diff options
Diffstat (limited to 'sys/dev')
156 files changed, 12321 insertions, 57645 deletions
diff --git a/sys/dev/advansys/advansys.c b/sys/dev/advansys/advansys.c index f0588f8916372..ac47f8d7bac4e 100644 --- a/sys/dev/advansys/advansys.c +++ b/sys/dev/advansys/advansys.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: advansys.c,v 1.6 1998/12/04 22:54:44 archie Exp $ + * $Id: advansys.c,v 1.3 1998/10/07 03:32:56 gibbs Exp $ */ /* * Ported from: @@ -134,7 +134,7 @@ adv_name(struct adv_softc *adv) { static char name[10]; - snprintf(name, sizeof(name), "adv%d", adv->unit); + sprintf(name, "adv%d", adv->unit); return (name); } @@ -554,10 +554,8 @@ adv_alloc_ccb_info(struct adv_softc *adv) struct adv_ccb_info *cinfo; cinfo = malloc(sizeof(*cinfo), M_DEVBUF, M_NOWAIT); - if (cinfo == NULL) { + if (cinfo == NULL) printf("%s: Can't malloc CCB info\n", adv_name(adv)); - return (NULL); - } cinfo->state = ACCB_FREE; error = bus_dmamap_create(adv->buffer_dmat, /*flags*/0, &cinfo->dmamap); @@ -1050,9 +1048,7 @@ adv_done(struct adv_softc *adv, union ccb *ccb, u_int done_stat, ccb->ccb_h.status = CAM_SEL_TIMEOUT; break; default: - xpt_print_path(ccb->ccb_h.path); - printf("adv_done - queue done without error, " - "unknown host status %x\n", host_stat); + /* QHSTA error occurred */ /* XXX Can I get more explicit information here? */ ccb->ccb_h.status = CAM_REQ_CMP_ERR; break; @@ -1088,9 +1084,6 @@ adv_done(struct adv_softc *adv, union ccb *ccb, u_int done_stat, ccb->ccb_h.status = CAM_SEL_TIMEOUT; break; default: - xpt_print_path(ccb->ccb_h.path); - printf("adv_done - queue done with error, " - "unknown host status %x\n", host_stat); /* XXX Can I get more explicit information here? */ ccb->ccb_h.status = CAM_REQ_CMP_ERR; break; @@ -1104,9 +1097,7 @@ adv_done(struct adv_softc *adv, union ccb *ccb, u_int done_stat, break; default: - xpt_print_path(ccb->ccb_h.path); - printf("adv_done - queue done with unknown status %x:%x\n", - done_stat, host_stat); + printf("adv_done: Unknown done status 0x%x\n", done_stat); ccb->ccb_h.status = CAM_REQ_CMP_ERR; break; } diff --git a/sys/dev/advansys/advlib.c b/sys/dev/advansys/advlib.c index e612974c44aa4..617266a6aa876 100644 --- a/sys/dev/advansys/advlib.c +++ b/sys/dev/advansys/advlib.c @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: advlib.c,v 1.9 1998/10/29 17:41:34 gibbs Exp $ + * $Id: advlib.c,v 1.7 1998/10/07 03:32:57 gibbs Exp $ */ /* * Ported from: @@ -1031,8 +1031,7 @@ adv_isr_chip_halted(struct adv_softc *adv) ccb = (union ccb *) adv_read_lram_32(adv, halt_q_addr + ADV_SCSIQ_D_CCBPTR); xpt_freeze_devq(ccb->ccb_h.path, /*count*/1); - ccb->ccb_h.status |= CAM_DEV_QFRZN|CAM_SCSI_STATUS_ERROR; - ccb->csio.scsi_status = SCSI_STATUS_QUEUE_FULL; + ccb->ccb_h.status |= CAM_DEV_QFRZN; adv_abort_ccb(adv, tid_no, ADV_TIX_TO_LUN(target_ix), /*ccb*/NULL, CAM_REQUEUE_REQ, /*queued_only*/TRUE); @@ -1971,6 +1970,7 @@ adv_abort_ccb(struct adv_softc *adv, int target, int lun, union ccb *ccb, struct adv_ccb_info *cinfo; scsiq->q_status |= QS_ABORTED; + scsiq->d3.done_stat = QD_ABORTED_BY_HOST; adv_write_lram_8(adv, q_addr + ADV_SCSIQ_B_STATUS, scsiq->q_status); aborted_ccb = (union ccb *)scsiq->d2.ccb_ptr; @@ -2009,6 +2009,8 @@ adv_reset_bus(struct adv_softc *adv) count = 0; while ((ccb = (union ccb *)LIST_FIRST(&adv->pending_ccbs)) != NULL) { + struct adv_ccb_info *cinfo; + if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) ccb->ccb_h.status |= CAM_SCSI_BUS_RESET; adv_done(adv, ccb, QD_ABORTED_BY_HOST, 0, 0, 0); diff --git a/sys/dev/advansys/adwlib.c b/sys/dev/advansys/adwlib.c index c727ca633b751..e2b93ac0fc2ce 100644 --- a/sys/dev/advansys/adwlib.c +++ b/sys/dev/advansys/adwlib.c @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: adwlib.c,v 1.1 1998/10/07 03:20:46 gibbs Exp $ + * $Id$ */ /* * Ported from: @@ -43,8 +43,7 @@ * code retain the above copyright notice and this comment without * modification. */ - -#include <sys/types.h> +#include <sys/queue.h> #include <sys/systm.h> #include <machine/bus_pio.h> diff --git a/sys/dev/aha/aha.c b/sys/dev/aha/aha.c index dcabdeaa71ad7..9109c6d4cfe3d 100644 --- a/sys/dev/aha/aha.c +++ b/sys/dev/aha/aha.c @@ -55,11 +55,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aha.c,v 1.18 1998/12/22 22:31:06 imp Exp $ + * $Id: aha.c,v 1.9 1998/10/15 19:53:30 imp Exp $ */ -#include "pnp.h" - #include <sys/param.h> #include <sys/systm.h> #include <sys/malloc.h> @@ -81,15 +79,10 @@ #include <vm/vm.h> #include <vm/pmap.h> - -#if NPNP > 0 -#include <i386/isa/isa_device.h> -#include <i386/isa/pnp.h> /* XXX pnp isn't x86 only */ -#endif #include <dev/aha/ahareg.h> -struct aha_softc *aha_softcs[NAHATOT]; +struct aha_softc *aha_softcs[NAHA]; #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define PRVERB(x) if (bootverbose) printf x @@ -132,15 +125,15 @@ ahanextoutbox(struct aha_softc *aha) /* CCB Mangement functions */ static __inline u_int32_t ahaccbvtop(struct aha_softc *aha, - struct aha_ccb *accb); + struct aha_ccb *bccb); static __inline struct aha_ccb* ahaccbptov(struct aha_softc *aha, u_int32_t ccb_addr); static __inline u_int32_t -ahaccbvtop(struct aha_softc *aha, struct aha_ccb *accb) +ahaccbvtop(struct aha_softc *aha, struct aha_ccb *bccb) { return (aha->aha_ccb_physbase - + (u_int32_t)((caddr_t)accb - (caddr_t)aha->aha_ccb_array)); + + (u_int32_t)((caddr_t)bccb - (caddr_t)aha->aha_ccb_array)); } static __inline struct aha_ccb * ahaccbptov(struct aha_softc *aha, u_int32_t ccb_addr) @@ -150,10 +143,10 @@ ahaccbptov(struct aha_softc *aha, u_int32_t ccb_addr) } static struct aha_ccb* ahagetccb(struct aha_softc *aha); -static __inline void ahafreeccb(struct aha_softc *aha, struct aha_ccb *accb); +static __inline void ahafreeccb(struct aha_softc *aha, struct aha_ccb *bccb); static void ahaallocccbs(struct aha_softc *aha); static bus_dmamap_callback_t ahaexecuteccb; -static void ahadone(struct aha_softc *aha, struct aha_ccb *accb, +static void ahadone(struct aha_softc *aha, struct aha_ccb *bccb, aha_mbi_comp_code_t comp_code); /* Host adapter command functions */ @@ -170,7 +163,7 @@ static void ahafetchtransinfo(struct aha_softc *aha, struct ccb_trans_settings *cts); /* CAM SIM entry points */ -#define ccb_accb_ptr spriv_ptr0 +#define ccb_bccb_ptr spriv_ptr0 #define ccb_aha_ptr spriv_ptr1 static void ahaaction(struct cam_sim *sim, union ccb *ccb); static void ahapoll(struct cam_sim *sim); @@ -187,26 +180,12 @@ u_long aha_unit = 0; */ struct aha_isa_port aha_isa_ports[] = { - { 0x130, 0, 4 }, - { 0x134, 0, 5 }, - { 0x230, 0, 2 }, - { 0x234, 0, 3 }, - { 0x330, 0, 0 }, - { 0x334, 0, 1 } -}; - -/* - * I/O ports listed in the order enumerated by the - * card for certain op codes. - */ -u_int16_t aha_board_ports[] = -{ - 0x330, - 0x334, - 0x230, - 0x234, - 0x130, - 0x134 + { 0x330, 0 }, + { 0x334, 0 }, + { 0x230, 0 }, + { 0x234, 0 }, + { 0x130, 0 }, + { 0x134, 0 } }; /* Exported functions */ @@ -216,7 +195,7 @@ aha_alloc(int unit, bus_space_tag_t tag, bus_space_handle_t bsh) struct aha_softc *aha; if (unit != AHA_TEMP_UNIT) { - if (unit >= NAHATOT) { + if (unit >= NAHA) { printf("aha: unit number (%d) too high\n", unit); return NULL; } @@ -242,8 +221,6 @@ aha_alloc(int unit, bus_space_tag_t tag, bus_space_handle_t bsh) aha->unit = unit; aha->tag = tag; aha->bsh = bsh; - aha->ccb_sg_opcode = INITIATOR_SG_CCB_WRESID; - aha->ccb_ccb_opcode = INITIATOR_CCB_WRESID; if (aha->unit != AHA_TEMP_UNIT) { aha_softcs[unit] = aha; @@ -315,26 +292,13 @@ aha_probe(struct aha_softc* aha) status = aha_inb(aha, STATUS_REG); if ((status == 0) || (status & (DIAG_ACTIVE|CMD_REG_BUSY| - STATUS_REG_RSVD)) != 0) { - PRVERB(("%s: status reg test failed %x\n", aha_name(aha), - status)); + STATUS_REG_RSVD|CMD_INVALID)) != 0) { return (ENXIO); } intstat = aha_inb(aha, INTSTAT_REG); if ((intstat & INTSTAT_REG_RSVD) != 0) { - PRVERB(("%s: Failed Intstat Reg Test\n", aha_name(aha))); - return (ENXIO); - } - - /* - * Looking good so far. Final test is to reset the - * adapter and fetch the board ID and ensure we aren't - * looking at a BusLogic. - */ - if ((error = ahareset(aha, /*hard_reset*/TRUE)) != 0) { - if (bootverbose) - printf("%s: Failed Reset\n", aha_name(aha)); + printf("%s: Failed Intstat Reg Test\n", aha_name(aha)); return (ENXIO); } @@ -342,7 +306,7 @@ aha_probe(struct aha_softc* aha) * Get the board ID. We use this to see if we're dealing with * a buslogic card or a aha card (or clone). */ - error = aha_cmd(aha, AOP_INQUIRE_BOARD_ID, NULL, /*parmlen*/0, + error = aha_cmd(aha, BOP_INQUIRE_BOARD_ID, NULL, /*parmlen*/0, (u_int8_t*)&board_id, sizeof(board_id), DEFAULT_CMD_TIMEOUT); if (error != 0) { @@ -360,29 +324,12 @@ aha_probe(struct aha_softc* aha) * this register, and return 0xff, while buslogic cards will return * something different. * - * It appears that for reasons unknow, for the for the - * aha-1542B cards, we need to wait a little bit before trying - * to read the geometry register. I picked 10ms since we have - * reports that a for loop to 1000 did the trick, and this - * errs on the side of conservatism. Besides, no one will - * notice a 10mS delay here, even the 1542B card users :-) - * - * Some compatible cards return 0 here. - * - * XXX I'm not sure how this will impact other cloned cards - * - * This really should be replaced with the esetup command, since - * that appears to be more reliable. + * XXX I'm not sure how this will impact other cloned cards. */ if (aha->boardid <= 0x42) { - /* Wait 10ms before reading */ - DELAY(10000); status = aha_inb(aha, GEOMETRY_REG); - if (status != 0xff && status != 0x00) { - PRVERB(("%s: Geometry Register test failed\n", - aha_name(aha))); + if (status != 0xff) return (ENXIO); - } } return (0); @@ -402,31 +349,31 @@ aha_fetch_adapter_info(struct aha_softc *aha) switch (aha->boardid) { case BOARD_1540_16HEAD_BIOS: - snprintf(aha->model, sizeof(aha->model), "1540 16 head BIOS"); + strcpy(aha->model, "1540 16 head BIOS"); break; case BOARD_1540_64HEAD_BIOS: - snprintf(aha->model, sizeof(aha->model), "1540 64 head BIOS"); + strcpy(aha->model, "1540 64 head BIOS"); break; case BOARD_1542: - snprintf(aha->model, sizeof(aha->model), "1540/1542 64 head BIOS"); + strcpy(aha->model, "1540/1542 64 head BIOS"); break; case BOARD_1640: - snprintf(aha->model, sizeof(aha->model), "1640"); + strcpy(aha->model, "1640"); break; case BOARD_1740: - snprintf(aha->model, sizeof(aha->model), "1740A/1742A/1744"); + strcpy(aha->model, "1740A/1742A/1744"); break; case BOARD_1542C: - snprintf(aha->model, sizeof(aha->model), "1542C"); + strcpy(aha->model, "1542C"); break; case BOARD_1542CF: - snprintf(aha->model, sizeof(aha->model), "1542CF"); + strcpy(aha->model, "1542CF"); break; case BOARD_1542CP: - snprintf(aha->model, sizeof(aha->model), "1542CP"); + strcpy(aha->model, "1542CP"); break; default: - snprintf(aha->model, sizeof(aha->model), "Unknown"); + strcpy(aha->model, "Unknown"); break; } /* @@ -442,24 +389,24 @@ aha_fetch_adapter_info(struct aha_softc *aha) (aha->boardid == 0x41 && aha->fw_major == 0x31 && aha->fw_minor >= 0x34)) { - error = aha_cmd(aha, AOP_RETURN_EXT_BIOS_INFO, NULL, + error = aha_cmd(aha, BOP_RETURN_EXT_BIOS_INFO, NULL, /*paramlen*/0, (u_char *)&extbios, sizeof(extbios), DEFAULT_CMD_TIMEOUT); - error = aha_cmd(aha, AOP_MBOX_IF_ENABLE, (u_int8_t *)&extbios, + error = aha_cmd(aha, BOP_MBOX_IF_ENABLE, (u_int8_t *)&extbios, /*paramlen*/2, NULL, 0, DEFAULT_CMD_TIMEOUT); } if (aha->boardid < 0x41) - printf("%s: Warning: aha-1542A won't likely work.\n", + printf("%s: Likely aha 1542A, which might not work properly\n", aha_name(aha)); - aha->max_sg = 17; /* Need >= 17 to do 64k I/O */ + aha->max_sg = 17; /* Need 17 to do 64k I/O */ aha->diff_bus = 0; aha->extended_lun = 0; aha->extended_trans = 0; aha->max_ccbs = 16; /* Determine Sync/Wide/Disc settings */ length_param = sizeof(setup_info); - error = aha_cmd(aha, AOP_INQUIRE_SETUP_INFO, &length_param, + error = aha_cmd(aha, BOP_INQUIRE_SETUP_INFO, &length_param, /*paramlen*/1, (u_int8_t*)&setup_info, sizeof(setup_info), DEFAULT_CMD_TIMEOUT); if (error != 0) { @@ -477,7 +424,7 @@ aha_fetch_adapter_info(struct aha_softc *aha) /* Determine our SCSI ID */ - error = aha_cmd(aha, AOP_INQUIRE_CONFIG, NULL, /*parmlen*/0, + error = aha_cmd(aha, BOP_INQUIRE_CONFIG, NULL, /*parmlen*/0, (u_int8_t*)&config_data, sizeof(config_data), DEFAULT_CMD_TIMEOUT); if (error != 0) { @@ -634,8 +581,8 @@ aha_attach(struct aha_softc *aha) struct cam_devq *devq; /* - * We don't do tagged queueing, since the aha cards don't - * support it. + * We reserve 1 ccb for error recovery, so don't + * tell the XPT about it. */ tagged_dev_openings = 0; @@ -677,7 +624,7 @@ aha_name(struct aha_softc *aha) { static char name[10]; - snprintf(name, sizeof(name), "aha%d", aha->unit); + sprintf(name, "aha%d", aha->unit); return (name); } @@ -702,7 +649,7 @@ void aha_mark_probed_bio(isa_compat_io_t port) { if (port < BIO_DISABLED) - aha_mark_probed_iop(aha_board_ports[port]); + aha_isa_ports[port].probed = 1; } void @@ -718,43 +665,6 @@ aha_mark_probed_iop(u_int ioport) } } -void -aha_find_probe_range(int ioport, int *port_index, int *max_port_index) -{ - if (ioport > 0) { - int i; - - for (i = 0;i < AHA_NUM_ISAPORTS; i++) - if (ioport <= aha_isa_ports[i].addr) - break; - if ((i >= AHA_NUM_ISAPORTS) - || (ioport != aha_isa_ports[i].addr)) { - printf("\n" -"aha_isa_probe: Invalid baseport of 0x%x specified.\n" -"aha_isa_probe: Nearest valid baseport is 0x%x.\n" -"aha_isa_probe: Failing probe.\n", - ioport, - (i < AHA_NUM_ISAPORTS) - ? aha_isa_ports[i].addr - : aha_isa_ports[AHA_NUM_ISAPORTS - 1].addr); - *port_index = *max_port_index = -1; - return; - } - *port_index = *max_port_index = aha_isa_ports[i].bio; - } else { - *port_index = 0; - *max_port_index = AHA_NUM_ISAPORTS - 1; - } -} - -int -aha_iop_from_bio(isa_compat_io_t bio_index) -{ - if (bio_index >= 0 && bio_index < AHA_NUM_ISAPORTS) - return (aha_board_ports[bio_index]); - return (-1); -} - static void ahaallocccbs(struct aha_softc *aha) { @@ -793,7 +703,7 @@ ahaallocccbs(struct aha_softc *aha) next_ccb->sg_list = segs; next_ccb->sg_list_phys = physaddr; - next_ccb->flags = ACCB_FREE; + next_ccb->flags = BCCB_FREE; error = bus_dmamap_create(aha->buffer_dmat, /*flags*/0, &next_ccb->dmamap); if (error != 0) @@ -806,54 +716,50 @@ ahaallocccbs(struct aha_softc *aha) } /* Reserve a CCB for error recovery */ - if (aha->recovery_accb == NULL) { - aha->recovery_accb = SLIST_FIRST(&aha->free_aha_ccbs); + if (aha->recovery_bccb == NULL) { + aha->recovery_bccb = SLIST_FIRST(&aha->free_aha_ccbs); SLIST_REMOVE_HEAD(&aha->free_aha_ccbs, links); } } static __inline void -ahafreeccb(struct aha_softc *aha, struct aha_ccb *accb) +ahafreeccb(struct aha_softc *aha, struct aha_ccb *bccb) { int s; s = splcam(); - if ((accb->flags & ACCB_ACTIVE) != 0) - LIST_REMOVE(&accb->ccb->ccb_h, sim_links.le); + if ((bccb->flags & BCCB_ACTIVE) != 0) + LIST_REMOVE(&bccb->ccb->ccb_h, sim_links.le); if (aha->resource_shortage != 0 - && (accb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) { - accb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; + && (bccb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) { + bccb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; aha->resource_shortage = FALSE; } - accb->flags = ACCB_FREE; - SLIST_INSERT_HEAD(&aha->free_aha_ccbs, accb, links); - aha->active_ccbs--; + bccb->flags = BCCB_FREE; + SLIST_INSERT_HEAD(&aha->free_aha_ccbs, bccb, links); splx(s); } static struct aha_ccb* ahagetccb(struct aha_softc *aha) { - struct aha_ccb* accb; + struct aha_ccb* bccb; int s; s = splcam(); - if ((accb = SLIST_FIRST(&aha->free_aha_ccbs)) != NULL) { + if ((bccb = SLIST_FIRST(&aha->free_aha_ccbs)) != NULL) { SLIST_REMOVE_HEAD(&aha->free_aha_ccbs, links); - aha->active_ccbs++; } else if (aha->num_ccbs < aha->max_ccbs) { ahaallocccbs(aha); - accb = SLIST_FIRST(&aha->free_aha_ccbs); - if (accb == NULL) - printf("%s: Can't malloc ACCB\n", aha_name(aha)); - else { + bccb = SLIST_FIRST(&aha->free_aha_ccbs); + if (bccb == NULL) + printf("%s: Can't malloc BCCB\n", aha_name(aha)); + else SLIST_REMOVE_HEAD(&aha->free_aha_ccbs, links); - aha->active_ccbs++; - } } splx(s); - return (accb); + return (bccb); } static void @@ -870,13 +776,13 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) case XPT_SCSI_IO: /* Execute the requested I/O operation */ case XPT_RESET_DEV: /* Bus Device Reset the specified SCSI device */ { - struct aha_ccb *accb; + struct aha_ccb *bccb; struct aha_hccb *hccb; /* - * get a accb to use. + * get a bccb to use. */ - if ((accb = ahagetccb(aha)) == NULL) { + if ((bccb = ahagetccb(aha)) == NULL) { int s; s = splcam(); @@ -888,17 +794,17 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) return; } - hccb = &accb->hccb; + hccb = &bccb->hccb; /* - * So we can find the ACCB when an abort is requested + * So we can find the BCCB when an abort is requested */ - accb->ccb = ccb; - ccb->ccb_h.ccb_accb_ptr = accb; + bccb->ccb = ccb; + ccb->ccb_h.ccb_bccb_ptr = bccb; ccb->ccb_h.ccb_aha_ptr = aha; /* - * Put all the arguments for the xfer in the accb + * Put all the arguments for the xfer in the bccb */ hccb->target = ccb->ccb_h.target_id; hccb->lun = ccb->ccb_h.target_lun; @@ -911,13 +817,13 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) csio = &ccb->csio; ccbh = &csio->ccb_h; - hccb->opcode = aha->ccb_ccb_opcode; + hccb->opcode = INITIATOR_CCB_WRESID; hccb->datain = (ccb->ccb_h.flags & CAM_DIR_IN) != 0; hccb->dataout = (ccb->ccb_h.flags & CAM_DIR_OUT) != 0; hccb->cmd_len = csio->cdb_len; if (hccb->cmd_len > sizeof(hccb->scsi_cdb)) { ccb->ccb_h.status = CAM_REQ_INVALID; - ahafreeccb(aha, accb); + ahafreeccb(aha, bccb); xpt_done(ccb); return; } @@ -929,7 +835,7 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) } else { /* I guess I could map it in... */ ccbh->status = CAM_REQ_INVALID; - ahafreeccb(aha, accb); + ahafreeccb(aha, bccb); xpt_done(ccb); return; } @@ -955,11 +861,11 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) s = splsoftvm(); error = bus_dmamap_load( aha->buffer_dmat, - accb->dmamap, + bccb->dmamap, csio->data_ptr, csio->dxfer_len, ahaexecuteccb, - accb, + bccb, /*flags*/0); if (error == EINPROGRESS) { /* @@ -982,7 +888,7 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) seg.ds_addr = (bus_addr_t)csio->data_ptr; seg.ds_len = csio->dxfer_len; - ahaexecuteccb(accb, &seg, 1, 0); + ahaexecuteccb(bccb, &seg, 1, 0); } } else { struct bus_dma_segment *segs; @@ -1000,11 +906,11 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) /* Just use the segments provided */ segs = (struct bus_dma_segment *) csio->data_ptr; - ahaexecuteccb(accb, segs, + ahaexecuteccb(bccb, segs, csio->sglist_cnt, 0); } } else { - ahaexecuteccb(accb, NULL, 0, 0); + ahaexecuteccb(bccb, NULL, 0, 0); } } else { hccb->opcode = INITIATOR_BUS_DEV_RESET; @@ -1013,7 +919,7 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) hccb->dataout = TRUE; hccb->cmd_len = 0; hccb->sense_len = 0; - ahaexecuteccb(accb, NULL, 0, 0); + ahaexecuteccb(bccb, NULL, 0, 0); } break; } @@ -1138,14 +1044,14 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) static void ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) { - struct aha_ccb *accb; + struct aha_ccb *bccb; union ccb *ccb; struct aha_softc *aha; int s; u_int32_t paddr; - accb = (struct aha_ccb *)arg; - ccb = accb->ccb; + bccb = (struct aha_ccb *)arg; + ccb = bccb->ccb; aha = (struct aha_softc *)ccb->ccb_h.ccb_aha_ptr; if (error != 0) { @@ -1156,7 +1062,7 @@ ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) xpt_freeze_devq(ccb->ccb_h.path, /*count*/1); ccb->ccb_h.status = CAM_REQ_TOO_BIG|CAM_DEV_QFRZN; } - ahafreeccb(aha, accb); + ahafreeccb(aha, bccb); xpt_done(ccb); return; } @@ -1169,7 +1075,7 @@ ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) end_seg = dm_segs + nseg; /* Copy the segments into our SG list */ - sg = accb->sg_list; + sg = bccb->sg_list; while (dm_segs < end_seg) { ahautoa24(dm_segs->ds_len, sg->len); ahautoa24(dm_segs->ds_addr, sg->addr); @@ -1178,13 +1084,13 @@ ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) } if (nseg > 1) { - accb->hccb.opcode = aha->ccb_sg_opcode; + bccb->hccb.opcode = INITIATOR_SG_CCB_WRESID; ahautoa24((sizeof(aha_sg_t) * nseg), - accb->hccb.data_len); - ahautoa24(accb->sg_list_phys, accb->hccb.data_addr); + bccb->hccb.data_len); + ahautoa24(bccb->sg_list_phys, bccb->hccb.data_addr); } else { - bcopy(accb->sg_list->len, accb->hccb.data_len, 3); - bcopy(accb->sg_list->addr, accb->hccb.data_addr, 3); + bcopy(bccb->sg_list->len, bccb->hccb.data_len, 3); + bcopy(bccb->sg_list->addr, bccb->hccb.data_addr, 3); } if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) @@ -1192,12 +1098,12 @@ ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) else op = BUS_DMASYNC_PREWRITE; - bus_dmamap_sync(aha->buffer_dmat, accb->dmamap, op); + bus_dmamap_sync(aha->buffer_dmat, bccb->dmamap, op); } else { - accb->hccb.opcode = INITIATOR_CCB; - ahautoa24(0, accb->hccb.data_len); - ahautoa24(0, accb->hccb.data_addr); + bccb->hccb.opcode = INITIATOR_CCB_WRESID; + ahautoa24(0, bccb->hccb.data_len); + ahautoa24(0, bccb->hccb.data_addr); } s = splcam(); @@ -1208,47 +1114,28 @@ ahaexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) */ if (ccb->ccb_h.status != CAM_REQ_INPROG) { if (nseg != 0) - bus_dmamap_unload(aha->buffer_dmat, accb->dmamap); - ahafreeccb(aha, accb); + bus_dmamap_unload(aha->buffer_dmat, bccb->dmamap); + ahafreeccb(aha, bccb); xpt_done(ccb); splx(s); return; } - accb->flags = ACCB_ACTIVE; + bccb->flags = BCCB_ACTIVE; ccb->ccb_h.status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&aha->pending_ccbs, &ccb->ccb_h, sim_links.le); ccb->ccb_h.timeout_ch = - timeout(ahatimeout, (caddr_t)accb, + timeout(ahatimeout, (caddr_t)bccb, (ccb->ccb_h.timeout * hz) / 1000); /* Tell the adapter about this command */ - if (aha->cur_outbox->action_code != AMBO_FREE) { - /* - * We should never encounter a busy mailbox. - * If we do, warn the user, and treat it as - * a resource shortage. If the controller is - * hung, one of the pending transactions will - * timeout causing us to start recovery operations. - */ - printf("%s: Encountered busy mailbox with %d out of %d " - "commands active!!!", aha_name(aha), aha->active_ccbs, - aha->max_ccbs); - untimeout(ahatimeout, accb, ccb->ccb_h.timeout_ch); - if (nseg != 0) - bus_dmamap_unload(aha->buffer_dmat, accb->dmamap); - ahafreeccb(aha, accb); - aha->resource_shortage = TRUE; - xpt_freeze_simq(aha->sim, /*count*/1); - ccb->ccb_h.status = CAM_REQUEUE_REQ; - xpt_done(ccb); - return; - } - paddr = ahaccbvtop(aha, accb); + paddr = ahaccbvtop(aha, bccb); ahautoa24(paddr, aha->cur_outbox->ccb_addr); - aha->cur_outbox->action_code = AMBO_START; - aha_outb(aha, COMMAND_REG, AOP_START_MBOX); + if (aha->cur_outbox->action_code != BMBO_FREE) + panic("%s: Too few mailboxes or to many ccbs???", aha_name(aha)); + aha->cur_outbox->action_code = BMBO_START; + aha_outb(aha, COMMAND_REG, BOP_START_MBOX); ahanextoutbox(aha); splx(s); @@ -1270,13 +1157,13 @@ aha_intr(void *arg) aha_outb(aha, CONTROL_REG, RESET_INTR); if ((intstat & IMB_LOADED) != 0) { - while (aha->cur_inbox->comp_code != AMBI_FREE) { + while (aha->cur_inbox->comp_code != BMBI_FREE) { u_int32_t paddr; paddr = aha_a24tou(aha->cur_inbox->ccb_addr); ahadone(aha, ahaccbptov(aha, paddr), aha->cur_inbox->comp_code); - aha->cur_inbox->comp_code = AMBI_FREE; + aha->cur_inbox->comp_code = BMBI_FREE; ahanextinbox(aha); } } @@ -1288,17 +1175,17 @@ aha_intr(void *arg) } static void -ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_code) +ahadone(struct aha_softc *aha, struct aha_ccb *bccb, aha_mbi_comp_code_t comp_code) { union ccb *ccb; struct ccb_scsiio *csio; - ccb = accb->ccb; - csio = &accb->ccb->csio; + ccb = bccb->ccb; + csio = &bccb->ccb->csio; - if ((accb->flags & ACCB_ACTIVE) == 0) { - printf("%s: ahadone - Attempt to free non-active ACCB %p\n", - aha_name(aha), (void *)accb); + if ((bccb->flags & BCCB_ACTIVE) == 0) { + printf("%s: ahadone - Attempt to free non-active BCCB %p\n", + aha_name(aha), (void *)bccb); return; } @@ -1309,13 +1196,13 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co op = BUS_DMASYNC_POSTREAD; else op = BUS_DMASYNC_POSTWRITE; - bus_dmamap_sync(aha->buffer_dmat, accb->dmamap, op); - bus_dmamap_unload(aha->buffer_dmat, accb->dmamap); + bus_dmamap_sync(aha->buffer_dmat, bccb->dmamap, op); + bus_dmamap_unload(aha->buffer_dmat, bccb->dmamap); } - if (accb == aha->recovery_accb) { + if (bccb == aha->recovery_bccb) { /* - * The recovery ACCB does not have a CCB associated + * The recovery BCCB does not have a CCB associated * with it, so short circuit the normal error handling. * We now traverse our list of pending CCBs and process * any that were terminated by the recovery CCBs action. @@ -1329,7 +1216,7 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co /* Notify all clients that a BDR occured */ error = xpt_create_path(&path, /*periph*/NULL, cam_sim_path(aha->sim), - accb->hccb.target, + bccb->hccb.target, CAM_LUN_WILDCARD); if (error == CAM_REQ_CMP) @@ -1337,16 +1224,16 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co ccb_h = LIST_FIRST(&aha->pending_ccbs); while (ccb_h != NULL) { - struct aha_ccb *pending_accb; + struct aha_ccb *pending_bccb; - pending_accb = (struct aha_ccb *)ccb_h->ccb_accb_ptr; - if (pending_accb->hccb.target == accb->hccb.target) { - pending_accb->hccb.ahastat = AHASTAT_HA_BDR; + pending_bccb = (struct aha_ccb *)ccb_h->ccb_bccb_ptr; + if (pending_bccb->hccb.target == bccb->hccb.target) { + pending_bccb->hccb.ahastat = AHASTAT_HA_BDR; ccb_h = LIST_NEXT(ccb_h, sim_links.le); - ahadone(aha, pending_accb, AMBI_ERROR); + ahadone(aha, pending_bccb, BMBI_ERROR); } else { ccb_h->timeout_ch = - timeout(ahatimeout, (caddr_t)pending_accb, + timeout(ahatimeout, (caddr_t)pending_bccb, (ccb_h->timeout * hz) / 1000); ccb_h = LIST_NEXT(ccb_h, sim_links.le); } @@ -1355,35 +1242,29 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co return; } - untimeout(ahatimeout, accb, ccb->ccb_h.timeout_ch); + untimeout(ahatimeout, bccb, ccb->ccb_h.timeout_ch); switch (comp_code) { - case AMBI_FREE: + case BMBI_FREE: printf("%s: ahadone - CCB completed with free status!\n", aha_name(aha)); break; - case AMBI_NOT_FOUND: + case BMBI_NOT_FOUND: printf("%s: ahadone - CCB Abort failed to find CCB\n", aha_name(aha)); break; - case AMBI_ABORT: - case AMBI_ERROR: + case BMBI_ABORT: + case BMBI_ERROR: /* An error occured */ - if (accb->hccb.opcode < INITIATOR_CCB_WRESID) - csio->resid = 0; - else - csio->resid = aha_a24tou(accb->hccb.data_len); - switch(accb->hccb.ahastat) { + switch(bccb->hccb.ahastat) { case AHASTAT_DATARUN_ERROR: - { - if (csio->resid <= 0) { + if (bccb->hccb.data_len <= 0) { csio->ccb_h.status = CAM_DATA_RUN_ERR; break; } /* FALLTHROUGH */ - } case AHASTAT_NOERROR: - csio->scsi_status = accb->hccb.sdstat; + csio->scsi_status = bccb->hccb.sdstat; csio->ccb_h.status |= CAM_SCSI_STATUS_ERROR; switch(csio->scsi_status) { case SCSI_STATUS_CHECK_COND: @@ -1393,10 +1274,10 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co * The aha writes the sense data at different * offsets based on the scsi cmd len */ - bcopy((caddr_t) &accb->hccb.scsi_cdb + - accb->hccb.cmd_len, + bcopy((caddr_t) &bccb->hccb.scsi_cdb + + bccb->hccb.cmd_len, (caddr_t) &csio->sense_data, - accb->hccb.sense_len); + bccb->hccb.sense_len); break; default: break; @@ -1404,6 +1285,7 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co csio->ccb_h.status = CAM_REQ_CMP; break; } + csio->resid = aha_a24tou(bccb->hccb.data_len); break; case AHASTAT_SELTIMEOUT: csio->ccb_h.status = CAM_SEL_TIMEOUT; @@ -1418,16 +1300,8 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co panic("%s: Inavlid Action code", aha_name(aha)); break; case AHASTAT_INVALID_OPCODE: - if (accb->hccb.opcode < INITIATOR_CCB_WRESID) - panic("%s: Invalid CCB Opcode %x hccb = %p", - aha_name(aha), accb->hccb.opcode, - &accb->hccb); - printf("%s: AHA-1540A detected, compensating\n", - aha_name(aha)); - aha->ccb_sg_opcode = INITIATOR_SG_CCB; - aha->ccb_ccb_opcode = INITIATOR_CCB; - xpt_freeze_devq(ccb->ccb_h.path, /*count*/1); - csio->ccb_h.status = CAM_REQUEUE_REQ; + panic("%s: Inavlid CCB Opcode code %x hccb = %p", + aha_name(aha), bccb->hccb.opcode, &bccb->hccb); break; case AHASTAT_LINKED_CCB_LUN_MISMATCH: /* We don't even support linked commands... */ @@ -1438,11 +1312,11 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co break; case AHASTAT_HA_SCSI_BUS_RESET: if ((csio->ccb_h.status & CAM_STATUS_MASK) - != CAM_CMD_TIMEOUT) + != CAM_CMD_TIMEOUT) csio->ccb_h.status = CAM_SCSI_BUS_RESET; break; case AHASTAT_HA_BDR: - if ((accb->flags & ACCB_DEVICE_RESET) == 0) + if ((bccb->flags & BCCB_DEVICE_RESET) == 0) csio->ccb_h.status = CAM_BDR_SENT; else csio->ccb_h.status = CAM_CMD_TIMEOUT; @@ -1452,19 +1326,18 @@ ahadone(struct aha_softc *aha, struct aha_ccb *accb, aha_mbi_comp_code_t comp_co xpt_freeze_devq(csio->ccb_h.path, /*count*/1); csio->ccb_h.status |= CAM_DEV_QFRZN; } - if ((accb->flags & ACCB_RELEASE_SIMQ) != 0) + if ((bccb->flags & BCCB_RELEASE_SIMQ) != 0) ccb->ccb_h.status |= CAM_RELEASE_SIMQ; - ahafreeccb(aha, accb); + ahafreeccb(aha, bccb); xpt_done(ccb); break; - case AMBI_OK: + case BMBI_OK: /* All completed without incident */ /* XXX DO WE NEED TO COPY SENSE BYTES HERE???? XXX */ - /* I don't think so since it works???? */ ccb->ccb_h.status |= CAM_REQ_CMP; - if ((accb->flags & ACCB_RELEASE_SIMQ) != 0) + if ((bccb->flags & BCCB_RELEASE_SIMQ) != 0) ccb->ccb_h.status |= CAM_RELEASE_SIMQ; - ahafreeccb(aha, accb); + ahafreeccb(aha, bccb); xpt_done(ccb); break; } @@ -1552,11 +1425,11 @@ ahareset(struct aha_softc* aha, int hard_reset) * Perform completion processing for all outstanding CCBs. */ while ((ccb_h = LIST_FIRST(&aha->pending_ccbs)) != NULL) { - struct aha_ccb *pending_accb; + struct aha_ccb *pending_bccb; - pending_accb = (struct aha_ccb *)ccb_h->ccb_accb_ptr; - pending_accb->hccb.ahastat = AHASTAT_HA_SCSI_BUS_RESET; - ahadone(aha, pending_accb, AMBI_ERROR); + pending_bccb = (struct aha_ccb *)ccb_h->ccb_bccb_ptr; + pending_bccb->hccb.ahastat = AHASTAT_HA_SCSI_BUS_RESET; + ahadone(aha, pending_bccb, BMBI_ERROR); } return (0); @@ -1575,13 +1448,11 @@ aha_cmd(struct aha_softc *aha, aha_op_t opcode, u_int8_t *params, u_int intstat; u_int reply_buf_size; int s; - int cmd_complete; /* No data returned to start */ reply_buf_size = reply_len; reply_len = 0; intstat = 0; - cmd_complete = 0; aha->command_cmp = 0; /* @@ -1617,13 +1488,10 @@ aha_cmd(struct aha_softc *aha, aha_op_t opcode, u_int8_t *params, status = aha_inb(aha, STATUS_REG); intstat = aha_inb(aha, INTSTAT_REG); if ((intstat & (INTR_PENDING|CMD_COMPLETE)) - == (INTR_PENDING|CMD_COMPLETE)) { - cmd_complete = 1; + == (INTR_PENDING|CMD_COMPLETE)) break; - } if (aha->command_cmp != 0) { status = aha->latched_status; - cmd_complete = 1; break; } if ((status & DATAIN_REG_READY) != 0) @@ -1643,7 +1511,7 @@ aha_cmd(struct aha_softc *aha, aha_op_t opcode, u_int8_t *params, * For all other commands, we wait for any output data * and the final comand completion interrupt. */ - while (cmd_complete == 0 && --cmd_timeout) { + while (--cmd_timeout) { status = aha_inb(aha, STATUS_REG); intstat = aha_inb(aha, INTSTAT_REG); @@ -1741,7 +1609,7 @@ ahainitmboxes(struct aha_softc *aha) /* Tell the adapter about them */ init_mbox.num_mboxes = aha->num_boxes; ahautoa24(aha->mailbox_physbase, init_mbox.base_addr); - error = aha_cmd(aha, AOP_INITIALIZE_MBOX, (u_int8_t *)&init_mbox, + error = aha_cmd(aha, BOP_INITIALIZE_MBOX, (u_int8_t *)&init_mbox, /*parmlen*/sizeof(init_mbox), /*reply_buf*/NULL, /*reply_len*/0, DEFAULT_CMD_TIMEOUT); @@ -1774,7 +1642,7 @@ ahafetchtransinfo(struct aha_softc *aha, struct ccb_trans_settings* cts) * the sync info for older models. */ param = sizeof(setup_info); - error = aha_cmd(aha, AOP_INQUIRE_SETUP_INFO, ¶m, /*paramlen*/1, + error = aha_cmd(aha, BOP_INQUIRE_SETUP_INFO, ¶m, /*paramlen*/1, (u_int8_t*)&setup_info, sizeof(setup_info), DEFAULT_CMD_TIMEOUT); @@ -1844,24 +1712,24 @@ ahapoll(struct cam_sim *sim) void ahatimeout(void *arg) { - struct aha_ccb *accb; + struct aha_ccb *bccb; union ccb *ccb; struct aha_softc *aha; int s; u_int32_t paddr; - accb = (struct aha_ccb *)arg; - ccb = accb->ccb; + bccb = (struct aha_ccb *)arg; + ccb = bccb->ccb; aha = (struct aha_softc *)ccb->ccb_h.ccb_aha_ptr; xpt_print_path(ccb->ccb_h.path); - printf("CCB %p - timed out\n", (void *)accb); + printf("CCB %p - timed out\n", (void *)bccb); s = splcam(); - if ((accb->flags & ACCB_ACTIVE) == 0) { + if ((bccb->flags & BCCB_ACTIVE) == 0) { xpt_print_path(ccb->ccb_h.path); printf("CCB %p - timed out CCB already completed\n", - (void *)accb); + (void *)bccb); splx(s); return; } @@ -1876,26 +1744,26 @@ ahatimeout(void *arg) * in attempting to handle errors in parrallel. Timeouts will * be reinstated when the recovery process ends. */ - if ((accb->flags & ACCB_DEVICE_RESET) == 0) { + if ((bccb->flags & BCCB_DEVICE_RESET) == 0) { struct ccb_hdr *ccb_h; - if ((accb->flags & ACCB_RELEASE_SIMQ) == 0) { + if ((bccb->flags & BCCB_RELEASE_SIMQ) == 0) { xpt_freeze_simq(aha->sim, /*count*/1); - accb->flags |= ACCB_RELEASE_SIMQ; + bccb->flags |= BCCB_RELEASE_SIMQ; } ccb_h = LIST_FIRST(&aha->pending_ccbs); while (ccb_h != NULL) { - struct aha_ccb *pending_accb; + struct aha_ccb *pending_bccb; - pending_accb = (struct aha_ccb *)ccb_h->ccb_accb_ptr; - untimeout(ahatimeout, pending_accb, ccb_h->timeout_ch); + pending_bccb = (struct aha_ccb *)ccb_h->ccb_bccb_ptr; + untimeout(ahatimeout, pending_bccb, ccb_h->timeout_ch); ccb_h = LIST_NEXT(ccb_h, sim_links.le); } } - if ((accb->flags & ACCB_DEVICE_RESET) != 0 - || aha->cur_outbox->action_code != AMBO_FREE) { + if ((bccb->flags & BCCB_DEVICE_RESET) != 0 + || aha->cur_outbox->action_code != BMBO_FREE) { /* * Try a full host adapter/SCSI bus reset. * We do this only if we have already attempted @@ -1917,22 +1785,22 @@ ahatimeout(void *arg) * If this fails, we'll get another timeout 2 seconds * later which will attempt a bus reset. */ - accb->flags |= ACCB_DEVICE_RESET; - ccb->ccb_h.timeout_ch = timeout(ahatimeout, (caddr_t)accb, 2 * hz); - aha->recovery_accb->hccb.opcode = INITIATOR_BUS_DEV_RESET; + bccb->flags |= BCCB_DEVICE_RESET; + ccb->ccb_h.timeout_ch = timeout(ahatimeout, (caddr_t)bccb, 2 * hz); + aha->recovery_bccb->hccb.opcode = INITIATOR_BUS_DEV_RESET; /* No Data Transfer */ - aha->recovery_accb->hccb.datain = TRUE; - aha->recovery_accb->hccb.dataout = TRUE; - aha->recovery_accb->hccb.ahastat = 0; - aha->recovery_accb->hccb.sdstat = 0; - aha->recovery_accb->hccb.target = ccb->ccb_h.target_id; + aha->recovery_bccb->hccb.datain = TRUE; + aha->recovery_bccb->hccb.dataout = TRUE; + aha->recovery_bccb->hccb.ahastat = 0; + aha->recovery_bccb->hccb.sdstat = 0; + aha->recovery_bccb->hccb.target = ccb->ccb_h.target_id; /* Tell the adapter about this command */ - paddr = ahaccbvtop(aha, aha->recovery_accb); + paddr = ahaccbvtop(aha, aha->recovery_bccb); ahautoa24(paddr, aha->cur_outbox->ccb_addr); - aha->cur_outbox->action_code = AMBO_START; - aha_outb(aha, COMMAND_REG, AOP_START_MBOX); + aha->cur_outbox->action_code = BMBO_START; + aha_outb(aha, COMMAND_REG, BOP_START_MBOX); ahanextoutbox(aha); } diff --git a/sys/dev/aha/ahareg.h b/sys/dev/aha/ahareg.h index 82f3f4a49bd4b..7af8b537d40d0 100644 --- a/sys/dev/aha/ahareg.h +++ b/sys/dev/aha/ahareg.h @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ahareg.h,v 1.4 1998/11/10 06:44:42 gibbs Exp $ + * $Id: ahareg.h,v 1.2 1998/10/01 04:53:55 imp Exp $ */ #ifndef _AHAREG_H_ @@ -101,41 +101,41 @@ * Opcodes for Adapter commands. */ typedef enum { - AOP_NOP = 0x00, - AOP_INITIALIZE_MBOX = 0x01, - AOP_START_MBOX = 0x02, - AOP_EXECUTE_BIOS_CMD = 0x03, - AOP_INQUIRE_BOARD_ID = 0x04, - AOP_ENABLE_OMBR_INT = 0x05, - AOP_SET_SEL_TIMOUT = 0x06, - AOP_SET_TIME_ON_BUS = 0x07, - AOP_SET_TIME_OFF_BUS = 0x08, - AOP_SET_BUS_TRANS_RATE = 0x09, - AOP_INQUIRE_INST_LDEVS = 0x0A, - AOP_INQUIRE_CONFIG = 0x0B, - AOP_ENABLE_TARGET_MODE = 0x0C, - AOP_INQUIRE_SETUP_INFO = 0x0D, - AOP_WRITE_LRAM = 0x1A, - AOP_READ_LRAM = 0x1B, - AOP_WRITE_CHIP_FIFO = 0x1C, - AOP_READ_CHIP_FIFO = 0x1D, - AOP_ECHO_DATA_BYTE = 0x1F, - AOP_ADAPTER_DIAGNOSTICS = 0x20, - AOP_SET_ADAPTER_OPTIONS = 0x21, - AOP_SET_EEPROM = 0x22, - AOP_RETURN_EEPROM = 0x23, - AOP_ENABLE_SHADOW_RAM = 0x24, - AOP_INIT_BIOS_MBOX = 0x25, - AOP_SET_BIOS_BANK_1 = 0x26, - AOP_SET_BIOS_BANK_2 = 0x27, - AOP_RETURN_EXT_BIOS_INFO= 0x28, - AOP_MBOX_IF_ENABLE = 0x29, - AOP_SCSI_TERM_STATUS = 0x2C, - AOP_INQUIRE_SCAM_DEV = 0x2D, - AOP_SCSI_DEV_TABLE = 0x2E, - AOP_SCAM_OP = 0x2F, - AOP_START_BIOS_CMD = 0x82, - AOP_INQUIRE_ESETUP_INFO = 0x8D + BOP_NOP = 0x00, + BOP_INITIALIZE_MBOX = 0x01, + BOP_START_MBOX = 0x02, + BOP_EXECUTE_BIOS_CMD = 0x03, + BOP_INQUIRE_BOARD_ID = 0x04, + BOP_ENABLE_OMBR_INT = 0x05, + BOP_SET_SEL_TIMOUT = 0x06, + BOP_SET_TIME_ON_BUS = 0x07, + BOP_SET_TIME_OFF_BUS = 0x08, + BOP_SET_BUS_TRANS_RATE = 0x09, + BOP_INQUIRE_INST_LDEVS = 0x0A, + BOP_INQUIRE_CONFIG = 0x0B, + BOP_ENABLE_TARGET_MODE = 0x0C, + BOP_INQUIRE_SETUP_INFO = 0x0D, + BOP_WRITE_LRAM = 0x1A, + BOP_READ_LRAM = 0x1B, + BOP_WRITE_CHIP_FIFO = 0x1C, + BOP_READ_CHIP_FIFO = 0x1D, + BOP_ECHO_DATA_BYTE = 0x1F, + BOP_ADAPTER_DIAGNOSTICS = 0x20, + BOP_SET_ADAPTER_OPTIONS = 0x21, + BOP_SET_EEPROM = 0x22, + BOP_RETURN_EEPROM = 0x23, + BOP_ENABLE_SHADOW_RAM = 0x24, + BOP_INIT_BIOS_MBOX = 0x25, + BOP_SET_BIOS_BANK_1 = 0x26, + BOP_SET_BIOS_BANK_2 = 0x27, + BOP_RETURN_EXT_BIOS_INFO= 0x28, + BOP_MBOX_IF_ENABLE = 0x29, + BOP_SCSI_TERM_STATUS = 0x2C, + BOP_INQUIRE_SCAM_DEV = 0x2D, + BOP_SCSI_DEV_TABLE = 0x2E, + BOP_SCAM_OP = 0x2F, + BOP_START_BIOS_CMD = 0x82, + BOP_INQUIRE_ESETUP_INFO = 0x8D } aha_op_t; /************** Definitions of Multi-byte commands and responses ************/ @@ -217,9 +217,10 @@ typedef struct { struct aha_isa_port { u_int16_t addr; u_int8_t probed; - u_int8_t bio; /* board IO offset */ }; +extern struct aha_isa_port aha_isa_ports[]; + #define AHA_NUM_ISAPORTS 6 typedef enum { @@ -245,9 +246,9 @@ typedef struct { /********************** Mail Box definitions *******************************/ typedef enum { - AMBO_FREE = 0x0, /* MBO intry is free */ - AMBO_START = 0x1, /* MBO activate entry */ - AMBO_ABORT = 0x2 /* MBO abort entry */ + BMBO_FREE = 0x0, /* MBO intry is free */ + BMBO_START = 0x1, /* MBO activate entry */ + BMBO_ABORT = 0x2 /* MBO abort entry */ } aha_mbo_action_code_t; typedef struct aha_mbox_out { @@ -256,11 +257,11 @@ typedef struct aha_mbox_out { } aha_mbox_out_t; typedef enum { - AMBI_FREE = 0x0, /* MBI entry is free */ - AMBI_OK = 0x1, /* completed without error */ - AMBI_ABORT = 0x2, /* aborted ccb */ - AMBI_NOT_FOUND = 0x3, /* Tried to abort invalid CCB */ - AMBI_ERROR = 0x4 /* Completed with error */ + BMBI_FREE = 0x0, /* MBI entry is free */ + BMBI_OK = 0x1, /* completed without error */ + BMBI_ABORT = 0x2, /* aborted ccb */ + BMBI_NOT_FOUND = 0x3, /* Tried to abort invalid CCB */ + BMBI_ERROR = 0x4 /* Completed with error */ } aha_mbi_comp_code_t; typedef struct aha_mbox_in { @@ -312,11 +313,11 @@ struct aha_hccb { }; typedef enum { - ACCB_FREE = 0x0, - ACCB_ACTIVE = 0x1, - ACCB_DEVICE_RESET = 0x2, - ACCB_RELEASE_SIMQ = 0x4 -} accb_flags_t; + BCCB_FREE = 0x0, + BCCB_ACTIVE = 0x1, + BCCB_DEVICE_RESET = 0x2, + BCCB_RELEASE_SIMQ = 0x4 +} bccb_flags_t; struct aha_ccb { struct aha_hccb hccb; /* hccb assumed to be at 0 */ @@ -347,15 +348,12 @@ struct aha_softc { struct aha_ccb *aha_ccb_array; SLIST_HEAD(,aha_ccb) free_aha_ccbs; LIST_HEAD(,ccb_hdr) pending_ccbs; - u_int active_ccbs; u_int32_t aha_ccb_physbase; - aha_ccb_opcode_t ccb_sg_opcode; - aha_ccb_opcode_t ccb_ccb_opcode; aha_mbox_in_t *in_boxes; aha_mbox_out_t *out_boxes; struct scsi_sense_data *sense_buffers; u_int32_t sense_buffers_physbase; - struct aha_ccb *recovery_accb; + struct aha_ccb *recovery_bccb; u_int num_boxes; bus_dma_tag_t parent_dmat; /* * All dmat's derive from @@ -412,11 +410,6 @@ char * aha_name(struct aha_softc *aha); int aha_check_probed_iop(u_int ioport); void aha_mark_probed_bio(isa_compat_io_t port); void aha_mark_probed_iop(u_int ioport); -void aha_find_probe_range(int ioport, - int *port_index, - int *max_port_index); - -int aha_iop_from_bio(isa_compat_io_t bio_index); #define DEFAULT_CMD_TIMEOUT 10000 /* 1 sec */ int aha_cmd(struct aha_softc *aha, aha_op_t opcode, @@ -430,18 +423,4 @@ int aha_cmd(struct aha_softc *aha, aha_op_t opcode, #define aha_outb(aha, port, value) \ bus_space_write_1((aha)->tag, (aha)->bsh, port, value) - -#ifndef EXTRA_AHA -#if NPNP > 0 -#define EXTRA_AHA MAX_PNP_CARDS -#else -#define EXTRA_AHA 0 -#endif -#endif - -#define NAHATOT (NAHA + EXTRA_AHA) - -#define AHA1542_PNP 0x42159004 /* ADP1542 */ -#define AHA1542_PNPCOMPAT 0xA000D040 /* PNP00A0 */ - #endif /* _AHA_H_ */ diff --git a/sys/dev/aic7xxx/Makefile b/sys/dev/aic7xxx/Makefile index b47dab3520815..0a74ca9c8c474 100644 --- a/sys/dev/aic7xxx/Makefile +++ b/sys/dev/aic7xxx/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.4 1997/09/27 19:37:22 gibbs Exp $ +# $Id: Makefile,v 1.3 1997/09/03 03:44:32 gibbs Exp $ PROG= aicasm @@ -19,7 +19,7 @@ LDADD+= -ll DEPENDFILE= .endif -CFLAGS+= -I/usr/include -I. +CFLAGS+= -I. NOMAN= noman .ifdef DEBUG diff --git a/sys/dev/aic7xxx/aic7xxx.c b/sys/dev/aic7xxx/aic7xxx.c index e442be536b9e6..48014aef3e1a2 100644 --- a/sys/dev/aic7xxx/aic7xxx.c +++ b/sys/dev/aic7xxx/aic7xxx.c @@ -5,7 +5,7 @@ * pci/ahc_pci.c 3985, 3980, 3940, 2940, aic7895, aic7890, * aic7880, aic7870, aic7860, and aic7850 controllers * - * Copyright (c) 1994, 1995, 1996, 1997, 1998, 1999 Justin T. Gibbs. + * Copyright (c) 1994, 1995, 1996, 1997, 1998 Justin T. Gibbs. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -36,7 +36,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aic7xxx.c,v 1.15 1999/01/14 06:14:14 gibbs Exp $ + * $Id: aic7xxx.c,v 1.8 1998/10/15 18:21:47 gibbs Exp $ */ /* * A few notes on features of the driver. @@ -133,8 +133,9 @@ #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#define ALL_TARGETS (~0) +#define ALL_LUNS (~0) #define ALL_CHANNELS '\0' -#define ALL_TARGETS_MASK 0xFFFF #define SIM_IS_SCSIBUS_B(ahc, sim) \ (sim == ahc->sim_b) @@ -154,22 +155,11 @@ #define ccb_scb_ptr spriv_ptr0 #define ccb_ahc_ptr spriv_ptr1 -typedef enum { - ROLE_UNKNOWN, - ROLE_INITIATOR, - ROLE_TARGET, -} role_t; - struct ahc_devinfo { int target_offset; u_int16_t target_mask; u_int8_t target; - u_int8_t lun; char channel; - role_t role; /* - * Only guaranteed to be correct if not - * in the busfree state. - */ }; typedef enum { @@ -188,10 +178,9 @@ static int ahc_debug = AHC_DEBUG; void ahc_pci_intr(struct ahc_softc *ahc); #endif -#if UNUSED static void ahc_dump_targcmd(struct target_cmd *cmd); -#endif static void ahc_shutdown(int howto, void *arg); +static void ahcminphys(struct buf *bp); static cam_status ahc_find_tmode_devs(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb, @@ -215,33 +204,16 @@ static struct scb * static void ahc_fetch_devinfo(struct ahc_softc *ahc, struct ahc_devinfo *devinfo); static void ahc_compile_devinfo(struct ahc_devinfo *devinfo, - u_int target, u_int lun, char channel, - role_t role); + u_int target, char channel); static u_int ahc_abort_wscb(struct ahc_softc *ahc, u_int scbpos, u_int prev); static void ahc_done(struct ahc_softc *ahc, struct scb *scbp); -static void ahc_handle_en_lun(struct ahc_softc *ahc, struct cam_sim *sim, - union ccb *ccb); -static int ahc_handle_target_cmd(struct ahc_softc *ahc, - struct target_cmd *cmd); +static void ahc_handle_target_cmd(struct ahc_softc *ahc); static void ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat); static void ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat); -static void ahc_build_transfer_msg(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo); -static void ahc_setup_initiator_msgout(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo, - struct scb *scb); -static void ahc_setup_target_msgin(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo); -static int ahc_handle_msg_reject(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo); -static void ahc_clear_msg_state(struct ahc_softc *ahc); -static void ahc_handle_message_phase(struct ahc_softc *ahc, - struct cam_path *path); -static int ahc_sent_msg(struct ahc_softc *ahc, u_int msgtype, int full); -static int ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, +static void ahc_handle_reqinit(struct ahc_softc *ahc, + struct scb *scb); +static int ahc_parse_msg(struct ahc_softc *ahc, struct scb *scb, struct ahc_devinfo *devinfo); -static void ahc_handle_ign_wide_residue(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo); static void ahc_handle_devreset(struct ahc_softc *ahc, int target, char channel, cam_status status, ac_code acode, char *message, @@ -260,8 +232,6 @@ static void ahc_print_scb(struct scb *scb); static int ahc_search_qinfifo(struct ahc_softc *ahc, int target, char channel, int lun, u_int tag, u_int32_t status, ahc_search_action action); -static void ahc_abort_ccb(struct ahc_softc *ahc, struct cam_sim *sim, - union ccb *ccb); static int ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset); static int ahc_abort_scbs(struct ahc_softc *ahc, int target, @@ -275,8 +245,6 @@ static void ahc_add_curscb_to_free_list(struct ahc_softc *ahc); static void ahc_clear_intstat(struct ahc_softc *ahc); static void ahc_reset_current_bus(struct ahc_softc *ahc); static struct ahc_syncrate * - ahc_devlimited_syncrate(struct ahc_softc *ahc, u_int *period); -static struct ahc_syncrate * ahc_find_syncrate(struct ahc_softc *ahc, u_int *period, u_int maxsync); static u_int ahc_find_period(struct ahc_softc *ahc, u_int scsirate, @@ -284,13 +252,6 @@ static u_int ahc_find_period(struct ahc_softc *ahc, u_int scsirate, static void ahc_validate_offset(struct ahc_softc *ahc, struct ahc_syncrate *syncrate, u_int *offset, int wide); -static void ahc_update_target_msg_request(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo, - struct ahc_target_tinfo *tinfo, - int force); -static int ahc_create_path(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo, - struct cam_path **path); static void ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, struct cam_path *path, @@ -312,7 +273,6 @@ static void ahc_set_recoveryscb(struct ahc_softc *ahc, struct scb *scb); static timeout_t ahc_timeout; -static __inline int sequencer_paused(struct ahc_softc *ahc); static __inline void pause_sequencer(struct ahc_softc *ahc); static __inline void unpause_sequencer(struct ahc_softc *ahc, int unpause_always); @@ -335,12 +295,6 @@ ahc_hscb_busaddr(struct ahc_softc *ahc, u_int index) #define AHC_BUSRESET_DELAY 25 /* Reset delay in us */ -static __inline int -sequencer_paused(struct ahc_softc *ahc) -{ - return ((ahc_inb(ahc, HCNTRL) & PAUSE) != 0); -} - static __inline void pause_sequencer(struct ahc_softc *ahc) { @@ -350,15 +304,16 @@ pause_sequencer(struct ahc_softc *ahc) * Since the sequencer can disable pausing in a critical section, we * must loop until it actually stops. */ - while (sequencer_paused(ahc) == 0) + while ((ahc_inb(ahc, HCNTRL) & PAUSE) == 0) ; } static __inline void unpause_sequencer(struct ahc_softc *ahc, int unpause_always) { - if (unpause_always - || (ahc_inb(ahc, INTSTAT) & (SCSIINT | SEQINT | BRKADRINT)) == 0) + if ((ahc->flags & AHC_HANDLING_REQINITS) == 0 + && (unpause_always + || (ahc_inb(ahc, INTSTAT) & (SCSIINT | SEQINT | BRKADRINT)) == 0)) ahc_outb(ahc, HCNTRL, ahc->unpause); } @@ -418,7 +373,7 @@ ahc_name(struct ahc_softc *ahc) { static char name[10]; - snprintf(name, sizeof(name), "ahc%d", ahc->unit); + sprintf(name, "ahc%d", ahc->unit); return (name); } @@ -604,30 +559,6 @@ ahc_reset(struct ahc_softc *ahc) } /* - * Called when we have an active connection to a target on the bus, - * this function finds the nearest syncrate to the input period limited - * by the capabilities of the bus connectivity of the target. - */ -static struct ahc_syncrate * -ahc_devlimited_syncrate(struct ahc_softc *ahc, u_int *period) { - u_int maxsync; - - if ((ahc->features & AHC_ULTRA2) != 0) { - if ((ahc_inb(ahc, SBLKCTL) & ENAB40) != 0 - && (ahc_inb(ahc, SSTAT2) & EXP_ACTIVE) == 0) { - maxsync = AHC_SYNCRATE_ULTRA2; - } else { - maxsync = AHC_SYNCRATE_ULTRA; - } - } else if ((ahc->features & AHC_ULTRA) != 0) { - maxsync = AHC_SYNCRATE_ULTRA; - } else { - maxsync = AHC_SYNCRATE_FAST; - } - return (ahc_find_syncrate(ahc, period, maxsync)); -} - -/* * Look up the valid period to SCSIRATE conversion in our table. * Return the period and offset that should be sent to the target * if this was the beginning of an SDTR. @@ -721,62 +652,10 @@ ahc_validate_offset(struct ahc_softc *ahc, struct ahc_syncrate *syncrate, } static void -ahc_update_target_msg_request(struct ahc_softc *ahc, - struct ahc_devinfo *devinfo, - struct ahc_target_tinfo *tinfo, - int force) -{ - int paused; - u_int targ_msg_req_orig; - - targ_msg_req_orig = ahc->targ_msg_req; - if (tinfo->current.period != tinfo->goal.period - || tinfo->current.width != tinfo->goal.width - || (force - && (tinfo->goal.period != 0 - || tinfo->goal.width != MSG_EXT_WDTR_BUS_8_BIT))) - ahc->targ_msg_req |= devinfo->target_mask; - else - ahc->targ_msg_req &= ~devinfo->target_mask; - - if (ahc->targ_msg_req != targ_msg_req_orig) { - /* Update the message request bit for this target */ - paused = sequencer_paused(ahc); - - if (!paused) - pause_sequencer(ahc); - - ahc_outb(ahc, TARGET_MSG_REQUEST, ahc->targ_msg_req & 0xFF); - ahc_outb(ahc, TARGET_MSG_REQUEST + 1, - (ahc->targ_msg_req >> 8) & 0xFF); - - if (!paused) - unpause_sequencer(ahc, /*unpause always*/FALSE); - } -} - -static int -ahc_create_path(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, - struct cam_path **path) -{ - path_id_t path_id; - - if (devinfo->channel == 'B') - path_id = cam_sim_path(ahc->sim_b); - else - path_id = cam_sim_path(ahc->sim); - - return (xpt_create_path(path, /*periph*/NULL, - path_id, devinfo->target, - devinfo->lun)); -} - -static void ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, struct cam_path *path, struct ahc_syncrate *syncrate, u_int period, u_int offset, u_int type) { - struct ahc_target_tinfo *tinfo; u_int old_period; u_int old_offset; @@ -785,16 +664,15 @@ ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, offset = 0; } - tinfo = &ahc->transinfo[devinfo->target_offset]; - old_period = tinfo->current.period; - old_offset = tinfo->current.offset; + old_period = ahc->transinfo[devinfo->target_offset].current.period; + old_offset = ahc->transinfo[devinfo->target_offset].current.offset; if ((type & AHC_TRANS_CUR) != 0 && (old_period != period || old_offset != offset)) { - struct cam_path *path2; + struct ccb_trans_settings neg; u_int scsirate; - scsirate = tinfo->scsirate; + scsirate = ahc->transinfo[devinfo->target_offset].scsirate; if ((ahc->features & AHC_ULTRA2) != 0) { scsirate &= ~SXFR_ULTRA2; @@ -803,8 +681,11 @@ ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, scsirate |= syncrate->sxfr_ultra2; } - if ((type & AHC_TRANS_ACTIVE) == AHC_TRANS_ACTIVE) + if ((type & AHC_TRANS_ACTIVE) == AHC_TRANS_ACTIVE) { ahc_outb(ahc, SCSIOFFSET, offset); + } + ahc_outb(ahc, TARG_OFFSET + devinfo->target_offset, + offset); } else { scsirate &= ~(SXFR|SOFS); @@ -833,45 +714,25 @@ ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, if ((type & AHC_TRANS_ACTIVE) == AHC_TRANS_ACTIVE) ahc_outb(ahc, SCSIRATE, scsirate); - tinfo->scsirate = scsirate; - tinfo->current.period = period; - tinfo->current.offset = offset; + ahc->transinfo[devinfo->target_offset].scsirate = scsirate; + ahc->transinfo[devinfo->target_offset].current.period = period; + ahc->transinfo[devinfo->target_offset].current.offset = offset; /* Update the syncrates in any pending scbs */ ahc_update_pending_syncrates(ahc); /* - * If possible, tell the SCSI layer about the + * Tell the SCSI layer about the * new transfer parameters. */ - /* If possible, update the XPT's notion of our transfer rate */ - path2 = NULL; - if (path == NULL) { - int error; - - error = ahc_create_path(ahc, devinfo, &path2); - if (error == CAM_REQ_CMP) - path = path2; - else - path2 = NULL; - } - - if (path != NULL) { - struct ccb_trans_settings neg; - - neg.sync_period = period; - neg.sync_offset = offset; - neg.valid = CCB_TRANS_SYNC_RATE_VALID - | CCB_TRANS_SYNC_OFFSET_VALID; - xpt_setup_ccb(&neg.ccb_h, path, /*priority*/1); - xpt_async(AC_TRANSFER_NEG, path, &neg); - } - - if (path2 != NULL) - xpt_free_path(path2); - + neg.sync_period = period; + neg.sync_offset = offset; + neg.valid = CCB_TRANS_SYNC_RATE_VALID + | CCB_TRANS_SYNC_OFFSET_VALID; + xpt_setup_ccb(&neg.ccb_h, path, /*priority*/1); + xpt_async(AC_TRANSFER_NEG, path, &neg); if (bootverbose) { - if (offset != 0) { + if (neg.sync_offset != 0) { printf("%s: target %d synchronous at %sMHz, " "offset = 0x%x\n", ahc_name(ahc), devinfo->target, syncrate->rate, offset); @@ -884,80 +745,57 @@ ahc_set_syncrate(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, } if ((type & AHC_TRANS_GOAL) != 0) { - tinfo->goal.period = period; - tinfo->goal.offset = offset; + ahc->transinfo[devinfo->target_offset].goal.period = period; + ahc->transinfo[devinfo->target_offset].goal.offset = offset; } if ((type & AHC_TRANS_USER) != 0) { - tinfo->user.period = period; - tinfo->user.offset = offset; + ahc->transinfo[devinfo->target_offset].user.period = period; + ahc->transinfo[devinfo->target_offset].user.offset = offset; } - - ahc_update_target_msg_request(ahc, devinfo, tinfo, /*force*/FALSE); } static void ahc_set_width(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, struct cam_path *path, u_int width, u_int type) { - struct ahc_target_tinfo *tinfo; - u_int oldwidth; + u_int oldwidth; - tinfo = &ahc->transinfo[devinfo->target_offset]; - oldwidth = tinfo->current.width; + oldwidth = ahc->transinfo[devinfo->target_offset].current.width; if ((type & AHC_TRANS_CUR) != 0 && oldwidth != width) { - struct cam_path *path2; + struct ccb_trans_settings neg; u_int scsirate; - scsirate = tinfo->scsirate; + scsirate = ahc->transinfo[devinfo->target_offset].scsirate; scsirate &= ~WIDEXFER; if (width == MSG_EXT_WDTR_BUS_16_BIT) scsirate |= WIDEXFER; - tinfo->scsirate = scsirate; + ahc->transinfo[devinfo->target_offset].scsirate = scsirate; if ((type & AHC_TRANS_ACTIVE) == AHC_TRANS_ACTIVE) ahc_outb(ahc, SCSIRATE, scsirate); - tinfo->current.width = width; - - /* If possible, update the XPT's notion of our transfer rate */ - path2 = NULL; - if (path == NULL) { - int error; - - error = ahc_create_path(ahc, devinfo, &path2); - if (error == CAM_REQ_CMP) - path = path2; - else - path2 = NULL; - } - - if (path != NULL) { - struct ccb_trans_settings neg; - - neg.bus_width = width; - neg.valid = CCB_TRANS_BUS_WIDTH_VALID; - xpt_setup_ccb(&neg.ccb_h, path, /*priority*/1); - xpt_async(AC_TRANSFER_NEG, path, &neg); - } - - if (path2 != NULL) - xpt_free_path(path2); + ahc->transinfo[devinfo->target_offset].current.width = width; + /* Tell the SCSI layer about the new transfer params */ + neg.bus_width = width; + neg.valid = CCB_TRANS_BUS_WIDTH_VALID; + xpt_setup_ccb(&neg.ccb_h, path, /*priority*/1); + xpt_async(AC_TRANSFER_NEG, path, &neg); if (bootverbose) { printf("%s: target %d using %dbit transfers\n", ahc_name(ahc), devinfo->target, - 8 * (0x01 << width)); + 8 * (0x01 << neg.bus_width)); } } - if ((type & AHC_TRANS_GOAL) != 0) - tinfo->goal.width = width; - if ((type & AHC_TRANS_USER) != 0) - tinfo->user.width = width; - - ahc_update_target_msg_request(ahc, devinfo, tinfo, /*force*/FALSE); + if ((type & AHC_TRANS_GOAL) != 0) { + ahc->transinfo[devinfo->target_offset].goal.width = width; + } + if ((type & AHC_TRANS_USER) != 0) { + ahc->transinfo[devinfo->target_offset].user.width = width; + } } /* @@ -1089,29 +927,19 @@ fail: static void ahc_fetch_devinfo(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) { - u_int saved_tcl; - role_t role; - - if (ahc_inb(ahc, SSTAT0) & TARGET) - role = ROLE_TARGET; - else - role = ROLE_INITIATOR; + u_int saved_tcl; saved_tcl = ahc_inb(ahc, SAVED_TCL); ahc_compile_devinfo(devinfo, (saved_tcl >> 4) & 0x0f, - saved_tcl & 0x3, (saved_tcl & SELBUSB) ? 'B': 'A', - role); + (saved_tcl & SELBUSB) ? 'B': 'A'); } static void -ahc_compile_devinfo(struct ahc_devinfo *devinfo, u_int target, u_int lun, - char channel, role_t role) +ahc_compile_devinfo(struct ahc_devinfo *devinfo, u_int target, char channel) { devinfo->target = target; - devinfo->lun = lun; devinfo->target_offset = target; devinfo->channel = channel; - devinfo->role = role; if (channel == 'B') devinfo->target_offset += 8; devinfo->target_mask = (0x01 << devinfo->target_offset); @@ -1161,6 +989,12 @@ ahc_intr(void *arg) scb_index = ahc->qoutfifo[ahc->qoutfifonext]; ahc->qoutfifo[ahc->qoutfifonext++] = SCB_LIST_NULL; + if (scb_index == TARGET_CMD_CMPLT + && (ahc->flags & AHC_TARGETMODE) != 0) { + ahc_handle_target_cmd(ahc); + continue; + } + scb = ahc->scb_data->scbarray[scb_index]; if (!scb || !(scb->flags & SCB_ACTIVE)) { printf("%s: WARNING no command for scb %d " @@ -1178,23 +1012,6 @@ ahc_intr(void *arg) ahc_calc_residual(scb); ahc_done(ahc, scb); } - - if ((ahc->flags & AHC_TARGETMODE) != 0) { - while (ahc->targetcmds[ahc->tqinfifonext].cmd_valid) { - struct target_cmd *cmd; - - cmd = &ahc->targetcmds[ahc->tqinfifonext]; - - /* - * Only advance through the queue if we - * had the resources to process the command. - */ - if (ahc_handle_target_cmd(ahc, cmd) != 0) - break; - ahc->tqinfifonext++; - cmd->cmd_valid = 0; - } - } } if (intstat & BRKADRINT) { /* @@ -1213,8 +1030,8 @@ ahc_intr(void *arg) (ahc_inb(ahc, SEQADDR1) << 8)); /* Tell everyone that this HBA is no longer availible */ - ahc_abort_scbs(ahc, CAM_TARGET_WILDCARD, ALL_CHANNELS, - CAM_LUN_WILDCARD, SCB_LIST_NULL, CAM_NO_HBA); + ahc_abort_scbs(ahc, ALL_TARGETS, ALL_CHANNELS, + ALL_LUNS, SCB_LIST_NULL, CAM_NO_HBA); } if (intstat & SEQINT) ahc_handle_seqint(ahc, intstat); @@ -1224,207 +1041,31 @@ ahc_intr(void *arg) } static void -ahc_handle_en_lun(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb) -{ - struct tmode_tstate *tstate; - struct tmode_lstate *lstate; - struct ccb_en_lun *cel; - cam_status status; - int target; - int lun; - - status = ahc_find_tmode_devs(ahc, sim, ccb, &tstate, &lstate, - /* notfound_failure*/FALSE); - - if (status != CAM_REQ_CMP) { - ccb->ccb_h.status = status; - return; - } - - cel = &ccb->cel; - target = ccb->ccb_h.target_id; - lun = ccb->ccb_h.target_lun; - if (cel->enable != 0) { - u_int scsiseq; - - /* Are we already enabled?? */ - if (lstate != NULL) { - ccb->ccb_h.status = CAM_LUN_ALRDY_ENA; - return; - } - - if (cel->grp6_len != 0 - || cel->grp7_len != 0) { - /* - * Don't (yet?) support vendor - * specific commands. - */ - ccb->ccb_h.status = CAM_REQ_INVALID; - return; - } - - /* - * Seems to be okay. - * Setup our data structures. - */ - if (target != CAM_TARGET_WILDCARD && tstate == NULL) { - tstate = malloc(sizeof(*tstate), M_DEVBUF, M_NOWAIT); - if (tstate == NULL) { - ccb->ccb_h.status = CAM_RESRC_UNAVAIL; - return; - } - bzero(tstate, sizeof(*tstate)); - ahc->enabled_targets[target] = tstate; - } - lstate = malloc(sizeof(*lstate), M_DEVBUF, M_NOWAIT); - if (lstate == NULL) { - ccb->ccb_h.status = CAM_RESRC_UNAVAIL; - return; - } - bzero(lstate, sizeof(*lstate)); - SLIST_INIT(&lstate->accept_tios); - SLIST_INIT(&lstate->immed_notifies); - if (target != CAM_TARGET_WILDCARD) { - tstate->enabled_luns[lun] = lstate; - ahc->enabled_luns++; - } else - ahc->black_hole = lstate; - pause_sequencer(ahc); - if ((ahc->features & AHC_MULTI_TID) != 0) { - u_int16_t targid_mask; - - targid_mask = ahc_inb(ahc, TARGID) - | (ahc_inb(ahc, TARGID + 1) << 8); - - targid_mask |= (0x01 << target); - ahc_outb(ahc, TARGID, targid_mask); - ahc_outb(ahc, TARGID+1, (targid_mask >> 8)); - } - /* Allow select-in operations */ - if (ahc->black_hole != NULL && ahc->enabled_luns > 0) { - scsiseq = ahc_inb(ahc, SCSISEQ_TEMPLATE); - scsiseq |= ENSELI; - ahc_outb(ahc, SCSISEQ_TEMPLATE, scsiseq); - scsiseq = ahc_inb(ahc, SCSISEQ); - scsiseq |= ENSELI; - ahc_outb(ahc, SCSISEQ, scsiseq); - } - unpause_sequencer(ahc, /*always?*/FALSE); - ccb->ccb_h.status = CAM_REQ_CMP; - xpt_print_path(ccb->ccb_h.path); - printf("Lun now enabled for target mode\n"); - xpt_done(ccb); - } else { - struct ccb_hdr *elm; - - if (lstate == NULL) { - ccb->ccb_h.status = CAM_LUN_INVALID; - return; - } - - ccb->ccb_h.status = CAM_REQ_CMP; - LIST_FOREACH(elm, &ahc->pending_ccbs, sim_links.le) { - if (elm->func_code == XPT_CONT_TARGET_IO - && !xpt_path_comp(elm->path, ccb->ccb_h.path)){ - printf("CTIO pending\n"); - ccb->ccb_h.status = CAM_REQ_INVALID; - return; - } - } - - if (SLIST_FIRST(&lstate->accept_tios) != NULL) { - printf("ATIOs pending\n"); - ccb->ccb_h.status = CAM_REQ_INVALID; - } - - if (SLIST_FIRST(&lstate->immed_notifies) != NULL) { - printf("INOTs pending\n"); - ccb->ccb_h.status = CAM_REQ_INVALID; - } - - if (ccb->ccb_h.status == CAM_REQ_CMP) { - int i, empty; - - xpt_print_path(ccb->ccb_h.path); - printf("Target mode disabled\n"); - free(lstate, M_DEVBUF); - - pause_sequencer(ahc); - /* Can we clean up the target too? */ - if (target != CAM_TARGET_WILDCARD) { - tstate->enabled_luns[lun] = NULL; - ahc->enabled_luns--; - for (empty = 1, i = 0; i < 8; i++) - if (tstate->enabled_luns[i] != NULL) { - empty = 0; - break; - } - if (empty) { - free(tstate, M_DEVBUF); - ahc->enabled_targets[target] = NULL; - if (ahc->features & AHC_MULTI_TID) { - u_int16_t targid_mask; - - targid_mask = - ahc_inb(ahc, TARGID) - | (ahc_inb(ahc, TARGID + 1) - << 8); - - targid_mask &= (0x01 << target); - ahc_outb(ahc, TARGID, - targid_mask); - ahc_outb(ahc, TARGID+1, - (targid_mask >> 8)); - } - - for (empty = 1, i = 0; i < 16; i++) - if (ahc->enabled_targets[i] - != NULL) { - empty = 0; - break; - } - } - } else { - - ahc->black_hole = NULL; - - /* - * We can't allow selections without - * our black hole device. - */ - empty = TRUE; - } - if (empty) { - /* Disallow select-in */ - u_int scsiseq; - - scsiseq = ahc_inb(ahc, SCSISEQ_TEMPLATE); - scsiseq &= ~ENSELI; - ahc_outb(ahc, SCSISEQ_TEMPLATE, scsiseq); - scsiseq = ahc_inb(ahc, SCSISEQ); - scsiseq &= ~ENSELI; - ahc_outb(ahc, SCSISEQ, scsiseq); - } - unpause_sequencer(ahc, /*always?*/FALSE); - } - } -} - -static int -ahc_handle_target_cmd(struct ahc_softc *ahc, struct target_cmd *cmd) +ahc_handle_target_cmd(struct ahc_softc *ahc) { struct tmode_tstate *tstate; struct tmode_lstate *lstate; struct ccb_accept_tio *atio; + struct target_cmd *cmd; u_int8_t *byte; int initiator; int target; int lun; - initiator = cmd->initiator_channel >> 4; + cmd = &ahc->targetcmds[ahc->next_targetcmd]; + ahc->next_targetcmd++; + if (ahc->next_targetcmd >= ahc->num_targetcmds) + ahc->next_targetcmd = 0; + + initiator = cmd->icl >> 4; target = cmd->targ_id; lun = (cmd->identify & MSG_IDENTIFY_LUNMASK); + xpt_print_path(ahc->path); + printf("Received Target Command (%d:%d:%d)\n", + initiator, target, lun); + ahc_dump_targcmd(cmd); + byte = cmd->bytes; tstate = ahc->enabled_targets[target]; lstate = NULL; @@ -1432,28 +1073,23 @@ ahc_handle_target_cmd(struct ahc_softc *ahc, struct target_cmd *cmd) lstate = tstate->enabled_luns[lun]; /* - * Commands for disabled luns go to the black hole driver. + * XXX Need to have a default TMODE devce that attaches to luns + * that wouldn't otherwise be enabled and returns the proper + * inquiry information. After all, we don't want to duplicate + * this code in each driver. For now, simply drop it on the + * floor. */ if (lstate == NULL) { printf("Incoming Command on disabled lun\n"); - lstate = ahc->black_hole; - atio = - (struct ccb_accept_tio*)SLIST_FIRST(&lstate->accept_tios); - /* Fill in the wildcards */ - atio->ccb_h.target_id = target; - atio->ccb_h.target_lun = lun; - } else { - atio = - (struct ccb_accept_tio*)SLIST_FIRST(&lstate->accept_tios); + return; } + + atio = (struct ccb_accept_tio*)SLIST_FIRST(&lstate->accept_tios); + /* XXX Should reconnect and return BUSY status */ if (atio == NULL) { printf("No ATIOs for incoming command\n"); - /* - * Wait for more ATIOs from the peripheral driver for this lun. - */ - return (1); + return; } - SLIST_REMOVE_HEAD(&lstate->accept_tios, sim_links.sle); /* * Package it up and send it off to @@ -1494,6 +1130,7 @@ ahc_handle_target_cmd(struct ahc_softc *ahc, struct target_cmd *cmd) } bcopy(byte, atio->cdb_io.cdb_bytes, atio->cdb_len); + SLIST_REMOVE_HEAD(&lstate->accept_tios, sim_links.sle); atio->ccb_h.status |= CAM_CDB_RECVD; if ((cmd->identify & MSG_IDENTIFY_DISCFLAG) == 0) { @@ -1503,10 +1140,11 @@ ahc_handle_target_cmd(struct ahc_softc *ahc, struct target_cmd *cmd) * continue target I/O comes in response * to this accept tio. */ + xpt_print_path(atio->ccb_h.path); + printf("Incoming Command did not disconnect %p\n", lstate); ahc->pending_device = lstate; } xpt_done((union ccb*)atio); - return (0); } static void @@ -1581,6 +1219,130 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat) devinfo.target); } break; + case EXTENDED_MSG: + { + ahc->msg_type = MSG_TYPE_INITIATOR_MSGIN; + ahc->msg_len = 0; + ahc->msg_index = 0; + + /* + * To actually receive the message, simply turn on + * REQINIT interrupts and let our interrupt handler + * do the rest (REQINIT should already be true). + */ + ahc_outb(ahc, SIMODE1, ahc_inb(ahc, SIMODE1) | ENREQINIT); + ahc->flags |= AHC_HANDLING_REQINITS; + return; + } + case REJECT_MSG: + { + /* + * What we care about here is if we had an + * outstanding SDTR or WDTR message for this + * target. If we did, this is a signal that + * the target is refusing negotiation. + */ + u_int scb_index; + u_int last_msg; + + scb_index = ahc_inb(ahc, SCB_TAG); + scb = ahc->scb_data->scbarray[scb_index]; + + last_msg = ahc_inb(ahc, LAST_MSG); + + if ((last_msg == MSG_IDENTIFYFLAG + || last_msg == HOST_MSG) + && (scb->flags & SCB_MSGOUT_WDTR) != 0 + && (scb->flags & SCB_MSGOUT_SENT) != 0) { + struct ahc_target_tinfo *tinfo; + + /* note 8bit xfers and clear flag */ + printf("%s:%c:%d: refuses WIDE negotiation. Using " + "8bit transfers\n", ahc_name(ahc), + devinfo.channel, devinfo.target); + scb->flags &= ~SCB_MSGOUT_BITS; + ahc->wdtrpending &= ~devinfo.target_mask; + ahc_set_width(ahc, &devinfo, scb->ccb->ccb_h.path, + MSG_EXT_WDTR_BUS_8_BIT, + AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); + ahc_set_syncrate(ahc, &devinfo, scb->ccb->ccb_h.path, + /*syncrate*/NULL, /*period*/0, + /*offset*/0, AHC_TRANS_ACTIVE); + tinfo = &ahc->transinfo[devinfo.target_offset]; + if (tinfo->goal.period) { + /* Start the sync negotiation */ + ahc->sdtrpending |= devinfo.target_mask; + scb->flags |= SCB_MSGOUT_SDTR; + ahc_outb(ahc, MSG_OUT, HOST_MSG); + ahc_outb(ahc, SCSISIGO, + ahc_inb(ahc, SCSISIGO) | ATNO); + } + } else if ((last_msg == MSG_IDENTIFYFLAG + || last_msg == HOST_MSG) + && (scb->flags & SCB_MSGOUT_SDTR) != 0 + && (scb->flags & SCB_MSGOUT_SENT) != 0) { + + /* note asynch xfers and clear flag */ + ahc_set_syncrate(ahc, &devinfo, scb->ccb->ccb_h.path, + /*syncrate*/NULL, /*period*/0, + /*offset*/0, + AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); + scb->flags &= ~SCB_MSGOUT_BITS; + ahc->sdtrpending &= ~devinfo.target_mask; + printf("%s:%c:%d: refuses synchronous negotiation. " + "Using asynchronous transfers\n", + ahc_name(ahc), + devinfo.channel, devinfo.target); + } else if ((last_msg == MSG_IDENTIFYFLAG) + && (scb->hscb->control & MSG_SIMPLE_Q_TAG) != 0) { + struct ccb_trans_settings neg; + + printf("%s:%c:%d: refuses tagged commands. Performing " + "non-tagged I/O\n", ahc_name(ahc), + devinfo.channel, devinfo.target); + + ahc->tagenable &= ~devinfo.target_mask; + neg.flags = 0; + neg.valid = CCB_TRANS_TQ_VALID; + xpt_setup_ccb(&neg.ccb_h, scb->ccb->ccb_h.path, + /*priority*/1); + xpt_async(AC_TRANSFER_NEG, scb->ccb->ccb_h.path, &neg); + /* + * Resend the identify for this CCB as the target + * may believe that the selection is invalid otherwise. + */ + ahc_outb(ahc, SCB_CONTROL, ahc_inb(ahc, SCB_CONTROL) + & ~MSG_SIMPLE_Q_TAG); + scb->hscb->control &= ~MSG_SIMPLE_Q_TAG; + scb->ccb->ccb_h.flags &= ~CAM_TAG_ACTION_VALID; + ahc_outb(ahc, MSG_OUT, MSG_IDENTIFYFLAG); + ahc_outb(ahc, SCSISIGO, ahc_inb(ahc, SCSISIGO) | ATNO); + + /* + * Requeue all tagged commands for this target + * currently in our posession so they can be + * converted to untagged commands. + */ + ahc_search_qinfifo(ahc, SCB_TARGET(scb), + SCB_CHANNEL(scb), + SCB_LUN(scb), + /*tag*/SCB_LIST_NULL, + CAM_REQUEUE_REQ, + SEARCH_COMPLETE); + } else { + /* + * Otherwise, we ignore it. + */ +#ifdef AHC_DEBUG + if (ahc_debug & AHC_SHOWMISC) + printf("%s:%c:%d: Message reject -- ignored\n", + ahc_name(ahc), devinfo.channel, + devinfo.target); +#endif + break; + } + break; + } case BAD_STATUS: { u_int scb_index; @@ -1683,17 +1445,31 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat) * but due to the way we page SCBs, we can't. */ hscb->control = 0; - /* * This request sense could be because the * the device lost power or in some other * way has lost our transfer negotiations. * Renegotiate if appropriate. */ + ahc_set_width(ahc, &devinfo, + scb->ccb->ccb_h.path, + MSG_EXT_WDTR_BUS_8_BIT, + AHC_TRANS_CUR); + ahc_set_syncrate(ahc, &devinfo, + scb->ccb->ccb_h.path, + /*syncrate*/NULL, /*period*/0, + /*offset*/0, AHC_TRANS_CUR); + scb->flags &= ~SCB_MSGOUT_BITS; tinfo = &ahc->transinfo[devinfo.target_offset]; - ahc_update_target_msg_request(ahc, &devinfo, - tinfo, - /*force*/TRUE); + if (tinfo->goal.width) { + ahc->wdtrpending |= devinfo.target_mask; + hscb->control |= MK_MESSAGE; + scb->flags |= SCB_MSGOUT_WDTR; + } else if (tinfo->goal.period) { + ahc->sdtrpending |= devinfo.target_mask; + hscb->control |= MK_MESSAGE; + scb->flags |= SCB_MSGOUT_SDTR; + } hscb->status = 0; hscb->SG_count = 1; hscb->SG_pointer = scb->ahc_dmaphys; @@ -1736,15 +1512,19 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat) } break; } - case TRACE_POINT: + case TARGET_SYNC_CMD: { - printf("SSTAT2 = 0x%x DFCNTRL = 0x%x\n", ahc_inb(ahc, SSTAT2), - ahc_inb(ahc, DFCNTRL)); - printf("SSTAT3 = 0x%x DSTATUS = 0x%x\n", ahc_inb(ahc, SSTAT3), - ahc_inb(ahc, DFSTATUS)); - printf("SSTAT0 = 0x%x, SCB_DATACNT = 0x%x\n", - ahc_inb(ahc, SSTAT0), - ahc_inb(ahc, SCB_DATACNT)); + /* + * We've already processed the command. If the command + * is still pending, don't unpause the sequencer until + * it returns. + */ + xpt_print_path(ahc->path); + printf("Saw a target sync cmd\n"); + if (ahc->pending_device != NULL) { + printf(" Pending device too.\n"); + return; + } break; } case TARGET_MSG_HELP: @@ -1755,56 +1535,105 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat) restart_sequencer(ahc); return; } - case HOST_MSG_LOOP: + case AWAITING_MSG: { + u_int scb_index; + + scb_index = ahc_inb(ahc, SCB_TAG); + scb = ahc->scb_data->scbarray[scb_index]; + + /* + * To facilitate adding multiple messages together, + * each routine should increment the index and len + * variables instead of setting them explicitly. + */ + ahc->msg_index = 0; + ahc->msg_len = 0; + /* - * The sequencer has encountered a message phase - * that requires host assistance for completion. - * While handling the message phase(s), we will be - * notified by the sequencer after each byte is - * transfered so we can track bus phases. - * - * If this is the first time we've seen a HOST_MSG_LOOP, - * initialize the state of the host message loop. + * This SCB had MK_MESSAGE set in its control byte or + * we have explicitly set HOST_MSG in MSG_OUT, + * informing the sequencer that we want to send a + * special message to this target. */ - if (ahc->msg_type == MSG_TYPE_NONE) { - u_int bus_phase; - - bus_phase = ahc_inb(ahc, SCSISIGI) & PHASE_MASK; - if (bus_phase != P_MESGIN && bus_phase != P_MESGOUT) - panic("ahc_intr: HOST_MSG_LOOP bad phase 0x%x", - bus_phase); - - if (devinfo.role == ROLE_INITIATOR) { - struct scb *scb; - u_int scb_index; - - scb_index = ahc_inb(ahc, SCB_TAG); - scb = ahc->scb_data->scbarray[scb_index]; - - if (bus_phase == P_MESGOUT) - ahc_setup_initiator_msgout(ahc, - &devinfo, - scb); - else { - ahc->msg_type = - MSG_TYPE_INITIATOR_MSGIN; - ahc->msgin_index = 0; + if ((scb->flags & SCB_DEVICE_RESET) == 0 + && ahc_inb(ahc, MSG_OUT) == MSG_IDENTIFYFLAG + && (scb->hscb->control & TAG_ENB) != 0) { + ahc->msg_buf[ahc->msg_index++] = + scb->ccb->csio.tag_action; + ahc->msg_buf[ahc->msg_index++] = + scb->hscb->tag; + ahc->msg_len += 2; + } + + if (scb->flags & SCB_DEVICE_RESET) { + ahc->msg_buf[ahc->msg_index++] = MSG_BUS_DEV_RESET; + ahc->msg_len++; + xpt_print_path(scb->ccb->ccb_h.path); + printf("Bus Device Reset Message Sent\n"); + } else if (scb->flags & SCB_ABORT) { + if ((scb->hscb->control & TAG_ENB) != 0) + ahc->msg_buf[ahc->msg_index++] = MSG_ABORT_TAG; + else + ahc->msg_buf[ahc->msg_index++] = MSG_ABORT; + ahc->msg_len++; + xpt_print_path(scb->ccb->ccb_h.path); + printf("Abort Message Sent\n"); + } else if (scb->flags & SCB_MSGOUT_WDTR) { + struct ahc_target_tinfo *tinfo; + + tinfo = &ahc->transinfo[devinfo.target_offset]; + ahc_construct_wdtr(ahc, tinfo->goal.width); + } else if (scb->flags & SCB_MSGOUT_SDTR) { + struct ahc_target_tinfo *tinfo; + u_int period; + u_int maxsync; + + /* + * Now that the target is actually selected, we + * can further refine our sync rate based on the + * output transceiver mode. + */ + if ((ahc->features & AHC_ULTRA2) != 0) { + if ((ahc_inb(ahc, SBLKCTL) & ENAB40) != 0 + && (ahc_inb(ahc, SSTAT2) & EXP_ACTIVE) == 0) { + maxsync = AHC_SYNCRATE_ULTRA2; + } else { + maxsync = AHC_SYNCRATE_ULTRA; } + } else if ((ahc->features & AHC_ULTRA) != 0) { + maxsync = AHC_SYNCRATE_ULTRA; } else { - if (bus_phase == P_MESGOUT) { - ahc->msg_type = - MSG_TYPE_TARGET_MSGOUT; - ahc->msgin_index = 0; - } else - /* XXX Ever executed??? */ - ahc_setup_target_msgin(ahc, &devinfo); + maxsync = AHC_SYNCRATE_FAST; } + tinfo = &ahc->transinfo[devinfo.target_offset]; + period = tinfo->goal.period; + ahc_find_syncrate(ahc, &period, maxsync); + ahc_construct_sdtr(ahc, period, tinfo->goal.offset); + } else { + printf("ahc_intr: AWAITING_MSG for an SCB that " + "does not have a waiting message"); + panic("SCB = %d, SCB Control = %x, MSG_OUT = %x " + "SCB flags = %x", scb_index, scb->hscb->control, + ahc_inb(ahc, MSG_OUT), scb->flags); } - /* Pass a NULL path so that handlers generate their own */ - ahc_handle_message_phase(ahc, /*path*/NULL); - break; + /* + * Record the fact that we attempted to send a message. + */ + scb->flags |= SCB_MSGOUT_SENT; + + /* + * To actually send the message, simply turn on + * REQINIT interrupts and let our interrupt handler + * do the rest (REQINIT should already be true). + */ + ahc->msg_index = 0; + ahc->msg_type = MSG_TYPE_INITIATOR_MSGOUT; + ahc->flags |= AHC_HANDLING_REQINITS; + ahc_outb(ahc, SIMODE1, ahc_inb(ahc, SIMODE1) | ENREQINIT); + + return; } case DATA_OVERRUN: { @@ -1997,7 +1826,7 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) CAM_UNEXP_BUSFREE); } else { ahc_abort_scbs(ahc, target, channel, - CAM_LUN_WILDCARD, SCB_LIST_NULL, + ALL_LUNS, SCB_LIST_NULL, CAM_UNEXP_BUSFREE); printf("%s: ", ahc_name(ahc)); } @@ -2006,8 +1835,10 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) lastphase, ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8)); } - ahc_clear_msg_state(ahc); - ahc_outb(ahc, SIMODE1, ahc_inb(ahc, SIMODE1) & ~ENBUSFREE); + ahc_outb(ahc, MSG_OUT, MSG_NOOP); + ahc_outb(ahc, SIMODE1, + ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENREQINIT)); + ahc->flags &= ~AHC_HANDLING_REQINITS; ahc_outb(ahc, CLRSINT1, CLRBUSFREE); ahc_outb(ahc, CLRINT, CLRSCSIINT); restart_sequencer(ahc); @@ -2030,6 +1861,11 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) "valid during SELTO scb(%d, %d)\n", ahc_name(ahc), scbptr, scb_index); } else { + /* + * Clear any pending messages for the timed out + * target. + */ + ahc_outb(ahc, MSG_OUT, MSG_NOOP); ahc_handle_devreset(ahc, SCB_TARGET(scb), SCB_CHANNEL(scb), CAM_SEL_TIMEOUT, /*ac_code*/0, "Selection Timeout", @@ -2038,7 +1874,9 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) /* Stop the selection */ ahc_outb(ahc, SCSISEQ, 0); - ahc_clear_msg_state(ahc); + ahc_outb(ahc, SIMODE1, + ahc_inb(ahc, SIMODE1) & ~ENREQINIT); + ahc->flags &= ~AHC_HANDLING_REQINITS; ahc_outb(ahc, CLRSINT1, CLRSELTIMEO|CLRBUSFREE); @@ -2109,14 +1947,14 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) * mesg_out to something other than MSG_NOP. */ if (mesg_out != MSG_NOOP) { - if (ahc->msg_type != MSG_TYPE_NONE) - ahc->send_msg_perror = TRUE; - else - ahc_outb(ahc, MSG_OUT, mesg_out); + ahc_outb(ahc, MSG_OUT, mesg_out); } ahc_outb(ahc, CLRSINT1, CLRSCSIPERR); ahc_outb(ahc, CLRINT, CLRSCSIINT); unpause_sequencer(ahc, /*unpause_always*/TRUE); + } else if ((status & REQINIT) != 0 + && (ahc->flags & AHC_HANDLING_REQINITS) != 0) { + ahc_handle_reqinit(ahc, scb); } else { xpt_print_path(scb->ccb->ccb_h.path); printf("Unknown SCSIINT. Status = 0x%x\n", status); @@ -2127,529 +1965,101 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat) } static void -ahc_build_transfer_msg(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) -{ - /* - * We need to initiate transfer negotiations. - * If our current and goal settings are identical, - * we want to renegotiate due to a check condition. - */ - struct ahc_target_tinfo *tinfo; - int dowide; - int dosync; - - tinfo = &ahc->transinfo[devinfo->target_offset]; - dowide = tinfo->current.width != tinfo->goal.width; - dosync = tinfo->current.period != tinfo->goal.period; - - if (!dowide && !dosync) { - dowide = tinfo->goal.width != MSG_EXT_WDTR_BUS_8_BIT; - dosync = tinfo->goal.period != 0; - } - - if (dowide) - ahc_construct_wdtr(ahc, tinfo->goal.width); - else if (dosync) { - struct ahc_syncrate *rate; - u_int period; - u_int offset; - - period = tinfo->goal.period; - rate = ahc_devlimited_syncrate(ahc, &period); - offset = tinfo->goal.offset; - ahc_validate_offset(ahc, rate, &offset, - tinfo->current.width); - ahc_construct_sdtr(ahc, period, offset); - } else { - panic("ahc_intr: AWAITING_MSG for negotiation, " - "but no negotiation needed\n"); - } -} - -static void -ahc_setup_initiator_msgout(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, - struct scb *scb) -{ - /* - * To facilitate adding multiple messages together, - * each routine should increment the index and len - * variables instead of setting them explicitly. - */ - ahc->msgout_index = 0; - ahc->msgout_len = 0; - - if ((scb->flags & SCB_DEVICE_RESET) == 0 - && ahc_inb(ahc, MSG_OUT) == MSG_IDENTIFYFLAG) { - u_int identify_msg; - - identify_msg = MSG_IDENTIFYFLAG | SCB_LUN(scb); - if ((scb->hscb->control & DISCENB) != 0) - identify_msg |= MSG_IDENTIFY_DISCFLAG; - ahc->msgout_buf[ahc->msgout_index++] = identify_msg; - ahc->msgout_len++; - - if ((scb->hscb->control & TAG_ENB) != 0) { - ahc->msgout_buf[ahc->msgout_index++] = - scb->ccb->csio.tag_action; - ahc->msgout_buf[ahc->msgout_index++] = scb->hscb->tag; - ahc->msgout_len += 2; - } - } - - if (scb->flags & SCB_DEVICE_RESET) { - ahc->msgout_buf[ahc->msgout_index++] = MSG_BUS_DEV_RESET; - ahc->msgout_len++; - xpt_print_path(scb->ccb->ccb_h.path); - printf("Bus Device Reset Message Sent\n"); - } else if (scb->flags & SCB_ABORT) { - if ((scb->hscb->control & TAG_ENB) != 0) - ahc->msgout_buf[ahc->msgout_index++] = MSG_ABORT_TAG; - else - ahc->msgout_buf[ahc->msgout_index++] = MSG_ABORT; - ahc->msgout_len++; - xpt_print_path(scb->ccb->ccb_h.path); - printf("Abort Message Sent\n"); - } else if ((ahc->targ_msg_req & devinfo->target_mask) != 0) { - ahc_build_transfer_msg(ahc, devinfo); - } else { - printf("ahc_intr: AWAITING_MSG for an SCB that " - "does not have a waiting message"); - panic("SCB = %d, SCB Control = %x, MSG_OUT = %x " - "SCB flags = %x", scb->hscb->tag, scb->hscb->control, - ahc_inb(ahc, MSG_OUT), scb->flags); - } - - /* - * Clear the MK_MESSAGE flag from the SCB so we aren't - * asked to send this message again. - */ - ahc_outb(ahc, SCB_CONTROL, ahc_inb(ahc, SCB_CONTROL) & ~MK_MESSAGE); - ahc->msgout_index = 0; - ahc->msg_type = MSG_TYPE_INITIATOR_MSGOUT; -} - -static void -ahc_setup_target_msgin(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) -{ - /* - * To facilitate adding multiple messages together, - * each routine should increment the index and len - * variables instead of setting them explicitly. - */ - ahc->msgout_index = 0; - ahc->msgout_len = 0; - - if ((ahc->targ_msg_req & devinfo->target_mask) != 0) - ahc_build_transfer_msg(ahc, devinfo); - else - panic("ahc_intr: AWAITING target message with no message"); - - ahc->msgout_index = 0; - ahc->msg_type = MSG_TYPE_TARGET_MSGIN; -} - -static int -ahc_handle_msg_reject(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) -{ - /* - * What we care about here is if we had an - * outstanding SDTR or WDTR message for this - * target. If we did, this is a signal that - * the target is refusing negotiation. - */ - struct scb *scb; - u_int scb_index; - u_int last_msg; - int response = 0; - - scb_index = ahc_inb(ahc, SCB_TAG); - scb = ahc->scb_data->scbarray[scb_index]; - - /* Might be necessary */ - last_msg = ahc_inb(ahc, LAST_MSG); - - if (ahc_sent_msg(ahc, MSG_EXT_WDTR, /*full*/FALSE)) { - struct ahc_target_tinfo *tinfo; - - /* note 8bit xfers and clear flag */ - printf("%s:%c:%d: refuses WIDE negotiation. Using " - "8bit transfers\n", ahc_name(ahc), - devinfo->channel, devinfo->target); - ahc_set_width(ahc, devinfo, scb->ccb->ccb_h.path, - MSG_EXT_WDTR_BUS_8_BIT, - AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); - ahc_set_syncrate(ahc, devinfo, scb->ccb->ccb_h.path, - /*syncrate*/NULL, /*period*/0, - /*offset*/0, AHC_TRANS_ACTIVE); - tinfo = &ahc->transinfo[devinfo->target_offset]; - if (tinfo->goal.period) { - u_int period; - - /* Start the sync negotiation */ - period = tinfo->goal.period; - ahc_devlimited_syncrate(ahc, &period); - ahc->msgout_index = 0; - ahc->msgout_len = 0; - ahc_construct_sdtr(ahc, period, tinfo->goal.offset); - ahc->msgout_index = 0; - response = 1; - } - } else if (ahc_sent_msg(ahc, MSG_EXT_SDTR, /*full*/FALSE)) { - /* note asynch xfers and clear flag */ - ahc_set_syncrate(ahc, devinfo, scb->ccb->ccb_h.path, - /*syncrate*/NULL, /*period*/0, - /*offset*/0, - AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); - printf("%s:%c:%d: refuses synchronous negotiation. " - "Using asynchronous transfers\n", - ahc_name(ahc), - devinfo->channel, devinfo->target); - } else if ((scb->hscb->control & MSG_SIMPLE_Q_TAG) != 0) { - struct ccb_trans_settings neg; - - printf("%s:%c:%d: refuses tagged commands. Performing " - "non-tagged I/O\n", ahc_name(ahc), - devinfo->channel, devinfo->target); - - ahc->tagenable &= ~devinfo->target_mask; - neg.flags = 0; - neg.valid = CCB_TRANS_TQ_VALID; - xpt_setup_ccb(&neg.ccb_h, scb->ccb->ccb_h.path, /*priority*/1); - xpt_async(AC_TRANSFER_NEG, scb->ccb->ccb_h.path, &neg); - - /* - * Resend the identify for this CCB as the target - * may believe that the selection is invalid otherwise. - */ - ahc_outb(ahc, SCB_CONTROL, ahc_inb(ahc, SCB_CONTROL) - & ~MSG_SIMPLE_Q_TAG); - scb->hscb->control &= ~MSG_SIMPLE_Q_TAG; - scb->ccb->ccb_h.flags &= ~CAM_TAG_ACTION_VALID; - ahc_outb(ahc, MSG_OUT, MSG_IDENTIFYFLAG); - ahc_outb(ahc, SCSISIGO, ahc_inb(ahc, SCSISIGO) | ATNO); - - /* - * Requeue all tagged commands for this target - * currently in our posession so they can be - * converted to untagged commands. - */ - ahc_search_qinfifo(ahc, SCB_TARGET(scb), SCB_CHANNEL(scb), - SCB_LUN(scb), /*tag*/SCB_LIST_NULL, - CAM_REQUEUE_REQ, SEARCH_COMPLETE); - } else { - /* - * Otherwise, we ignore it. - */ - printf("%s:%c:%d: Message reject for %x -- ignored\n", - ahc_name(ahc), devinfo->channel, devinfo->target, - last_msg); - } - return (response); -} - -static void -ahc_clear_msg_state(struct ahc_softc *ahc) -{ - ahc->msgout_len = 0; - ahc->msgin_index = 0; - ahc->msg_type = MSG_TYPE_NONE; - ahc_outb(ahc, MSG_OUT, MSG_NOOP); -} - -static void -ahc_handle_message_phase(struct ahc_softc *ahc, struct cam_path *path) +ahc_handle_reqinit(struct ahc_softc *ahc, struct scb *scb) { struct ahc_devinfo devinfo; - u_int bus_phase; - int end_session; + u_int simode1; ahc_fetch_devinfo(ahc, &devinfo); - - end_session = FALSE; - bus_phase = ahc_inb(ahc, SCSISIGI) & PHASE_MASK; - -reswitch: switch (ahc->msg_type) { case MSG_TYPE_INITIATOR_MSGOUT: { - int lastbyte; - int phasemis; - int msgdone; + int lastbyte; + int phasemis; + u_int bus_phase; - if (ahc->msgout_len == 0) + if (ahc->msg_len == 0) panic("REQINIT interrupt with no active message"); + lastbyte = (ahc->msg_index == ahc->msg_len - 1); + bus_phase = ahc_inb(ahc, SCSISIGI) & PHASE_MASK; phasemis = bus_phase != P_MESGOUT; - if (phasemis) { - if (bus_phase == P_MESGIN) { - /* - * Change gears and see if - * this messages is of interest to - * us or should be passed back to - * the sequencer. - */ - ahc_outb(ahc, CLRSINT1, CLRATNO); - ahc->send_msg_perror = FALSE; - ahc->msg_type = MSG_TYPE_INITIATOR_MSGIN; - ahc->msgin_index = 0; - goto reswitch; - } - end_session = TRUE; - break; - } - - if (ahc->send_msg_perror) { - ahc_outb(ahc, CLRSINT1, CLRATNO); - ahc_outb(ahc, CLRSINT1, CLRREQINIT); - ahc_outb(ahc, SCSIDATL, MSG_PARITY_ERROR); - break; - } - - msgdone = ahc->msgout_index == ahc->msgout_len; - if (msgdone) { - /* - * The target has requested a retry. - * Re-assert ATN, reset our message index to - * 0, and try again. - */ - ahc->msgout_index = 0; - ahc_outb(ahc, SCSISIGO, ahc_inb(ahc, SCSISIGO) | ATNO); - } - - lastbyte = ahc->msgout_index == (ahc->msgout_len - 1); - if (lastbyte) { - /* Last byte is signified by dropping ATN */ - ahc_outb(ahc, CLRSINT1, CLRATNO); - } - /* - * Clear our interrupt status and present - * the next byte on the bus. - */ - ahc_outb(ahc, CLRSINT1, CLRREQINIT); - ahc_outb(ahc, SCSIDATL, ahc->msgout_buf[ahc->msgout_index++]); - break; - } - case MSG_TYPE_INITIATOR_MSGIN: - { - int phasemis; - int message_done; - - phasemis = bus_phase != P_MESGIN; - - if (phasemis) { - ahc->msgin_index = 0; - if (bus_phase == P_MESGOUT - && (ahc->send_msg_perror == TRUE - || (ahc->msgout_len != 0 - && ahc->msgout_index == 0))) { - ahc->msg_type = MSG_TYPE_INITIATOR_MSGOUT; - goto reswitch; + if (lastbyte || phasemis) { + /* Time to end our message session */ + ahc->msg_len = 0; + ahc->msg_type = MSG_TYPE_NONE; + simode1 = ahc_inb(ahc, SIMODE1) & ~ENREQINIT; + ahc_outb(ahc, SIMODE1, simode1); + ahc_outb(ahc, CLRINT, CLRSCSIINT); + ahc->flags &= ~AHC_HANDLING_REQINITS; + + if (phasemis == 0) { + ahc_outb(ahc, SINDEX, + ahc->msg_buf[ahc->msg_index]); + ahc_outb(ahc, RETURN_1, 0); + } else { + ahc_outb(ahc, RETURN_1, MSGOUT_PHASEMIS); } - end_session = TRUE; - break; - } - - /* Pull the byte in without acking it */ - ahc->msgin_buf[ahc->msgin_index] = ahc_inb(ahc, SCSIBUSL); - - message_done = ahc_parse_msg(ahc, path, &devinfo); - - if (message_done) { - /* - * Clear our incoming message buffer in case there - * is another message following this one. - */ - ahc->msgin_index = 0; + unpause_sequencer(ahc, /* unpause_always */TRUE); + } else { /* - * If this message illicited a response, - * assert ATN so the target takes us to the - * message out phase. + * Clear our interrupt status and present the byte + * on the bus, but don't unpause the sequencer. */ - if (ahc->msgout_len != 0) - ahc_outb(ahc, SCSISIGO, - ahc_inb(ahc, SCSISIGO) | ATNO); + ahc_outb(ahc, CLRSINT1, CLRREQINIT); + ahc_outb(ahc, CLRINT, CLRSCSIINT); + ahc_outb(ahc, SCSIDATL, ahc->msg_buf[ahc->msg_index++]); } - - /* Ack the byte */ - ahc_outb(ahc, CLRSINT1, CLRREQINIT); - ahc_inb(ahc, SCSIDATL); - ahc->msgin_index++; break; } - case MSG_TYPE_TARGET_MSGIN: + case MSG_TYPE_INITIATOR_MSGIN: { - int msgdone; - int msgout_request; + int phasemis; + int done; - if (ahc->msgout_len == 0) - panic("Target MSGIN with no active message"); + phasemis = (ahc_inb(ahc, SCSISIGI) & PHASE_MASK) != P_MESGIN; - /* - * If we interrupted a mesgout session, the initiator - * will not know this until our first REQ. So, we - * only honor mesgout requests after we've sent our - * first byte. - */ - if ((ahc_inb(ahc, SCSISIGI) & ATNI) != 0 - && ahc->msgout_index > 0) - msgout_request = TRUE; - else - msgout_request = FALSE; + if (phasemis == 0) { - if (msgout_request) { - - /* - * Change gears and see if - * this messages is of interest to - * us or should be passed back to - * the sequencer. - */ - ahc->msg_type = MSG_TYPE_TARGET_MSGOUT; - ahc_outb(ahc, SCSISIGO, P_MESGOUT | BSYO); - ahc->msgin_index = 0; - /* Dummy read to REQ for first byte */ + ahc->msg_len++; + /* Pull the byte in without acking it */ + ahc->msg_buf[ahc->msg_index] = ahc_inb(ahc, SCSIBUSL); + done = ahc_parse_msg(ahc, scb, &devinfo); + /* Ack the byte */ + ahc_outb(ahc, CLRSINT1, CLRREQINIT); + ahc_outb(ahc, CLRINT, CLRSCSIINT); ahc_inb(ahc, SCSIDATL); - ahc_outb(ahc, SXFRCTL0, - ahc_inb(ahc, SXFRCTL0) | SPIOEN); - break; + ahc->msg_index++; } - - msgdone = ahc->msgout_index == ahc->msgout_len; - if (msgdone) { - ahc_outb(ahc, SXFRCTL0, - ahc_inb(ahc, SXFRCTL0) & ~SPIOEN); - end_session = TRUE; - break; + if (phasemis || done) { + /* Time to end our message session */ + ahc->msg_len = 0; + ahc->msg_type = MSG_TYPE_NONE; + simode1 = ahc_inb(ahc, SIMODE1) & ~ENREQINIT; + ahc->flags &= ~AHC_HANDLING_REQINITS; + ahc_outb(ahc, SIMODE1, simode1); + ahc_outb(ahc, CLRINT, CLRSCSIINT); + unpause_sequencer(ahc, /* unpause_always */TRUE); } - - /* - * Present the next byte on the bus. - */ - ahc_outb(ahc, SXFRCTL0, ahc_inb(ahc, SXFRCTL0) | SPIOEN); - ahc_outb(ahc, SCSIDATL, ahc->msgout_buf[ahc->msgout_index++]); - break; - } - case MSG_TYPE_TARGET_MSGOUT: - { - int lastbyte; - int msgdone; - - /* - * The initiator signals that this is - * the last byte by dropping ATN. - */ - lastbyte = (ahc_inb(ahc, SCSISIGI) & ATNI) == 0; - - /* - * Read the latched byte, but turn off SPIOEN first - * so that we don't inadvertantly cause a REQ for the - * next byte. - */ - ahc_outb(ahc, SXFRCTL0, ahc_inb(ahc, SXFRCTL0) & ~SPIOEN); - ahc->msgin_buf[ahc->msgin_index] = ahc_inb(ahc, SCSIDATL); - msgdone = ahc_parse_msg(ahc, path, &devinfo); - ahc->msgin_index++; - - /* - * XXX Read spec about initiator dropping ATN too soon - * and use msgdone to detect it. - */ - if (msgdone) { - ahc->msgin_index = 0; - - /* - * If this message illicited a response, transition - * to the Message in phase and send it. - */ - if (ahc->msgout_len != 0) { - ahc_outb(ahc, SCSISIGO, P_MESGIN | BSYO); - ahc_outb(ahc, SXFRCTL0, - ahc_inb(ahc, SXFRCTL0) | SPIOEN); - ahc->msg_type = MSG_TYPE_TARGET_MSGIN; - ahc->msgin_index = 0; - break; - } - } - - if (lastbyte) - end_session = TRUE; - else { - /* Ask for the next byte. */ - ahc_outb(ahc, SXFRCTL0, - ahc_inb(ahc, SXFRCTL0) | SPIOEN); - } - break; } default: panic("Unknown REQINIT message type"); } - - if (end_session) { - ahc_clear_msg_state(ahc); - ahc_outb(ahc, RETURN_1, EXIT_MSG_LOOP); - } else - ahc_outb(ahc, RETURN_1, CONT_MSG_LOOP); } -/* - * See if we sent a particular extended message to the target. - * If "full" is true, the target saw the full message. - * If "full" is false, the target saw at least the first - * byte of the message. - */ static int -ahc_sent_msg(struct ahc_softc *ahc, u_int msgtype, int full) -{ - int found; - int index; - - found = FALSE; - index = 0; - - while (index < ahc->msgout_len) { - if ((ahc->msgout_buf[index] & MSG_IDENTIFYFLAG) != 0 - || ahc->msgout_buf[index] == MSG_MESSAGE_REJECT) - index++; - else if (ahc->msgout_buf[index] >= MSG_SIMPLE_Q_TAG - && ahc->msgout_buf[index] < MSG_IGN_WIDE_RESIDUE) { - /* Skip tag type and tag id */ - index += 2; - } else if (ahc->msgout_buf[index] == MSG_EXTENDED) { - /* Found a candidate */ - if (ahc->msgout_buf[index+2] == msgtype) { - u_int end_index; - - end_index = index + 1 - + ahc->msgout_buf[index + 1]; - if (full) { - if (ahc->msgout_index > end_index) - found = TRUE; - } else if (ahc->msgout_index > index) - found = TRUE; - } - break; - } else { - panic("ahc_sent_msg: Inconsistent msg buffer"); - } - } - return (found); -} - -static int -ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, +ahc_parse_msg(struct ahc_softc *ahc, struct scb *scb, struct ahc_devinfo *devinfo) { int reject; int done; - int response; u_int targ_scsirate; done = FALSE; - response = FALSE; reject = FALSE; targ_scsirate = ahc->transinfo[devinfo->target_offset].scsirate; /* @@ -2658,48 +2068,26 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, * the entire message is availible and has been * handled, return TRUE indicating that we have * parsed an entire message. - * - * In the case of extended messages, we accept the length - * byte outright and perform more checking once we know the - * extended message type. */ - switch (ahc->msgin_buf[0]) { - case MSG_MESSAGE_REJECT: - response = ahc_handle_msg_reject(ahc, devinfo); - /* FALLTHROUGH */ - case MSG_NOOP: - done = TRUE; - break; - case MSG_IGN_WIDE_RESIDUE: - { - struct ahc_target_tinfo *tinfo; - - tinfo = &ahc->transinfo[devinfo->target_offset]; - /* Wait for the whole message */ - if (ahc->msgin_index >= 1) { - if (ahc->msgin_buf[1] != 1 - || tinfo->current.width == MSG_EXT_WDTR_BUS_8_BIT) { - reject = TRUE; - done = TRUE; - } else - ahc_handle_ign_wide_residue(ahc, devinfo); - } - break; + if (ahc->msg_buf[0] != MSG_EXTENDED) { + reject = TRUE; } - case MSG_EXTENDED: - { - /* Wait for enough of the message to begin validation */ - if (ahc->msgin_index < 2) - break; - switch (ahc->msgin_buf[2]) { + + /* + * Just accept the length byte outright and perform + * more checking once we know the message type. + */ + if (!reject && (ahc->msg_len > 2)) { + switch (ahc->msg_buf[2]) { case MSG_EXT_SDTR: { struct ahc_syncrate *syncrate; u_int period; u_int offset; u_int saved_offset; + u_int maxsync; - if (ahc->msgin_buf[1] != MSG_EXT_SDTR_LEN) { + if (ahc->msg_buf[1] != MSG_EXT_SDTR_LEN) { reject = TRUE; break; } @@ -2707,19 +2095,28 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, /* * Wait until we have both args before validating * and acting on this message. - * - * Add one to MSG_EXT_SDTR_LEN to account for - * the extended message preamble. */ - if (ahc->msgin_index < (MSG_EXT_SDTR_LEN + 1)) + if (ahc->msg_len < (MSG_EXT_SDTR_LEN + /*preamble*/2)) break; - period = ahc->msgin_buf[3]; - saved_offset = offset = ahc->msgin_buf[4]; - syncrate = ahc_devlimited_syncrate(ahc, &period); + period = ahc->msg_buf[3]; + saved_offset = offset = ahc->msg_buf[4]; + if ((ahc->features & AHC_ULTRA2) != 0) { + if ((ahc_inb(ahc, SBLKCTL) & ENAB40) != 0 + && (ahc_inb(ahc, SSTAT2) & EXP_ACTIVE) == 0) { + maxsync = AHC_SYNCRATE_ULTRA2; + } else { + maxsync = AHC_SYNCRATE_ULTRA; + } + } else if ((ahc->features & AHC_ULTRA) != 0) { + maxsync = AHC_SYNCRATE_ULTRA; + } else { + maxsync = AHC_SYNCRATE_FAST; + } + syncrate = ahc_find_syncrate(ahc, &period, maxsync); ahc_validate_offset(ahc, syncrate, &offset, targ_scsirate & WIDEXFER); - ahc_set_syncrate(ahc, devinfo, path, + ahc_set_syncrate(ahc, devinfo, scb->ccb->ccb_h.path, syncrate, period, offset, AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); @@ -2728,23 +2125,27 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, * and didn't have to fall down to async * transfers. */ - if (ahc_sent_msg(ahc, MSG_EXT_SDTR, /*full*/TRUE)) { + if ((scb->flags & (SCB_MSGOUT_SDTR|SCB_MSGOUT_SENT)) + == (SCB_MSGOUT_SDTR|SCB_MSGOUT_SENT)) { /* We started it */ if (saved_offset != offset) { /* Went too low - force async */ reject = TRUE; } + scb->flags &= ~SCB_MSGOUT_BITS; + ahc->sdtrpending &= ~devinfo->target_mask; } else { /* * Send our own SDTR in reply */ - if (bootverbose) - printf("Sending SDTR!\n"); - ahc->msgout_index = 0; - ahc->msgout_len = 0; - ahc_construct_sdtr(ahc, period, offset); - ahc->msgout_index = 0; - response = TRUE; + scb->flags &= ~SCB_MSGOUT_BITS; + scb->flags |= SCB_MSGOUT_SDTR; + ahc->sdtrpending |= devinfo->target_mask; + xpt_print_path(scb->ccb->ccb_h.path); + printf("Sending SDTR!!\n"); + ahc_outb(ahc, MSG_OUT, HOST_MSG); + ahc_outb(ahc, SCSISIGO, + ahc_inb(ahc, SCSISIGO) | ATNO); } done = TRUE; break; @@ -2752,10 +2153,8 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, case MSG_EXT_WDTR: { u_int bus_width; - u_int sending_reply; - sending_reply = FALSE; - if (ahc->msgin_buf[1] != MSG_EXT_WDTR_LEN) { + if (ahc->msg_buf[1] != MSG_EXT_WDTR_LEN) { reject = TRUE; break; } @@ -2763,26 +2162,13 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, /* * Wait until we have our arg before validating * and acting on this message. - * - * Add one to MSG_EXT_WDTR_LEN to account for - * the extended message preamble. - */ - if (ahc->msgin_index < (MSG_EXT_WDTR_LEN + 1)) - break; - - /* - * Due to a problem with sync/wide transfers - * on the aic7880 only allow this on Ultra2 - * controllers for the moment. */ - if (devinfo->role == ROLE_TARGET - && (ahc->features & AHC_ULTRA2) == 0) { - reject = TRUE; + if (ahc->msg_len < (MSG_EXT_WDTR_LEN + /*preamble*/2)) break; - } - bus_width = ahc->msgin_buf[3]; - if (ahc_sent_msg(ahc, MSG_EXT_WDTR, /*full*/TRUE)) { + bus_width = ahc->msg_buf[3]; + if ((scb->flags & (SCB_MSGOUT_WDTR|SCB_MSGOUT_SENT)) + == (SCB_MSGOUT_WDTR|SCB_MSGOUT_SENT)) { /* * Don't send a WDTR back to the * target, since we asked first. @@ -2806,12 +2192,15 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, case MSG_EXT_WDTR_BUS_16_BIT: break; } + scb->flags &= ~SCB_MSGOUT_WDTR; + ahc->wdtrpending &= ~devinfo->target_mask; } else { /* * Send our own WDTR in reply */ - if (bootverbose) - printf("Sending WDTR!\n"); + printf("Sending WDTR!\n"); + scb->flags &= ~SCB_MSGOUT_BITS; + scb->flags |= SCB_MSGOUT_WDTR; switch (bus_width) { default: if (ahc->features & AHC_WIDE) { @@ -2825,41 +2214,33 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, bus_width = MSG_EXT_WDTR_BUS_8_BIT; break; } - ahc->msgout_index = 0; - ahc->msgout_len = 0; - ahc_construct_wdtr(ahc, bus_width); - ahc->msgout_index = 0; - response = TRUE; - sending_reply = TRUE; + ahc_outb(ahc, MSG_OUT, HOST_MSG); + ahc_outb(ahc, SCSISIGO, + ahc_inb(ahc, SCSISIGO) | ATNO); + ahc->wdtrpending |= devinfo->target_mask; } - ahc_set_width(ahc, devinfo, path, bus_width, + ahc_set_width(ahc, devinfo, scb->ccb->ccb_h.path, + bus_width, AHC_TRANS_ACTIVE|AHC_TRANS_GOAL); /* After a wide message, we are async */ - ahc_set_syncrate(ahc, devinfo, path, + ahc_set_syncrate(ahc, devinfo, scb->ccb->ccb_h.path, /*syncrate*/NULL, /*period*/0, /*offset*/0, AHC_TRANS_ACTIVE); - if (sending_reply == FALSE && reject == FALSE) { + if ((ahc->wdtrpending & devinfo->target_mask) == 0 + && (reject == 0)) { struct ahc_target_tinfo *tinfo; + scb->flags &= ~SCB_MSGOUT_WDTR; tinfo = &ahc->transinfo[devinfo->target_offset]; if (tinfo->goal.period) { - struct ahc_syncrate *rate; - u_int period; - u_int offset; - /* Start the sync negotiation */ - period = tinfo->goal.period; - rate = ahc_devlimited_syncrate(ahc, - &period); - offset = tinfo->goal.offset; - ahc_validate_offset(ahc, rate, &offset, - tinfo->current.width); - ahc->msgout_index = 0; - ahc->msgout_len = 0; - ahc_construct_sdtr(ahc, period, offset); - ahc->msgout_index = 0; - response = TRUE; + ahc->sdtrpending |= + devinfo->target_mask; + scb->flags |= SCB_MSGOUT_SDTR; + ahc_outb(ahc, MSG_OUT, HOST_MSG); + ahc_outb(ahc, SCSISIGO, + ahc_inb(ahc, SCSISIGO) | ATNO); } } done = TRUE; @@ -2870,20 +2251,6 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, reject = TRUE; break; } - break; - } - case MSG_ABORT: - case MSG_ABORT_TAG: - case MSG_BUS_DEV_RESET: - case MSG_CLEAR_QUEUE: - case MSG_TERM_IO_PROC: - /* Target mode messages */ - if (devinfo->role != ROLE_TARGET) - reject = TRUE; - break; - default: - reject = TRUE; - break; } if (reject) { @@ -2891,128 +2258,43 @@ ahc_parse_msg(struct ahc_softc *ahc, struct cam_path *path, * Assert attention and setup to * reject the message. */ - ahc->msgout_index = 0; - ahc->msgout_len = 1; - ahc->msgout_buf[0] = MSG_MESSAGE_REJECT; + ahc_outb(ahc, MSG_OUT, MSG_MESSAGE_REJECT); + ahc_outb(ahc, SCSISIGO, ahc_inb(ahc, SCSISIGO) | ATNO); done = TRUE; - response = TRUE; } - - if (done && !response) - /* Clear the outgoing message buffer */ - ahc->msgout_len = 0; - return (done); } static void -ahc_handle_ign_wide_residue(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) -{ - u_int scb_index; - struct scb *scb; - - scb_index = ahc_inb(ahc, SCB_TAG); - scb = ahc->scb_data->scbarray[scb_index]; - if ((ahc_inb(ahc, SEQ_FLAGS) & DPHASE) == 0 - || (scb->ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_IN) { - /* - * Ignore the message if we haven't - * seen an appropriate data phase yet. - */ - } else { - /* - * If the residual occurred on the last - * transfer and the transfer request was - * expected to end on an odd count, do - * nothing. Otherwise, subtract a byte - * and update the residual count accordingly. - */ - u_int resid_sgcnt; - - resid_sgcnt = ahc_inb(ahc, SCB_RESID_SGCNT); - if (resid_sgcnt == 0 - && ahc_inb(ahc, DATA_COUNT_ODD) == 1) { - /* - * If the residual occurred on the last - * transfer and the transfer request was - * expected to end on an odd count, do - * nothing. - */ - } else { - u_int data_cnt; - u_int data_addr; - u_int sg_index; - - data_cnt = (ahc_inb(ahc, SCB_RESID_DCNT + 2) << 16) - | (ahc_inb(ahc, SCB_RESID_DCNT + 1) << 8) - | (ahc_inb(ahc, SCB_RESID_DCNT)); - - data_addr = (ahc_inb(ahc, SHADDR + 3) << 24) - | (ahc_inb(ahc, SHADDR + 2) << 16) - | (ahc_inb(ahc, SHADDR + 1) << 8) - | (ahc_inb(ahc, SHADDR)); - - data_cnt += 1; - data_addr -= 1; - - sg_index = scb->sg_count - resid_sgcnt; - - /* - * scb->ahc_dma starts with the second S/G entry. - */ - if (sg_index-- != 0 - && (scb->ahc_dma[sg_index].len < data_cnt)) { - u_int sg_addr; - - data_cnt = 1; - data_addr = scb->ahc_dma[sg_index - 1].addr - + scb->ahc_dma[sg_index - 1].len - 1; - - sg_addr = scb->ahc_dmaphys - + (sg_index * sizeof(*scb->ahc_dma)); - ahc_outb(ahc, SG_NEXT + 3, sg_addr >> 24); - ahc_outb(ahc, SG_NEXT + 2, sg_addr >> 16); - ahc_outb(ahc, SG_NEXT + 1, sg_addr >> 8); - ahc_outb(ahc, SG_NEXT, sg_addr); - } - - ahc_outb(ahc, SCB_RESID_DCNT + 2, data_cnt >> 16); - ahc_outb(ahc, SCB_RESID_DCNT + 1, data_cnt >> 8); - ahc_outb(ahc, SCB_RESID_DCNT, data_cnt); - - ahc_outb(ahc, SHADDR + 3, data_addr >> 24); - ahc_outb(ahc, SHADDR + 2, data_addr >> 16); - ahc_outb(ahc, SHADDR + 1, data_addr >> 8); - ahc_outb(ahc, SHADDR, data_addr); - } - } -} - -static void ahc_handle_devreset(struct ahc_softc *ahc, int target, char channel, cam_status status, ac_code acode, char *message, int verbose_only) { struct ahc_devinfo devinfo; struct cam_path *path; + path_id_t path_id; int found; int error; - ahc_compile_devinfo(&devinfo, target, CAM_LUN_WILDCARD, channel, - ROLE_UNKNOWN); + ahc_compile_devinfo(&devinfo, target, channel); - error = ahc_create_path(ahc, &devinfo, &path); + if (channel == 'B') + path_id = cam_sim_path(ahc->sim_b); + else + path_id = cam_sim_path(ahc->sim); + error = xpt_create_path(&path, /*periph*/NULL, path_id, target, + CAM_LUN_WILDCARD); /* * Go back to async/narrow transfers and renegotiate. - * ahc_set_width and ahc_set_syncrate can cope with NULL - * paths. */ - ahc_set_width(ahc, &devinfo, path, MSG_EXT_WDTR_BUS_8_BIT, - AHC_TRANS_CUR); - ahc_set_syncrate(ahc, &devinfo, path, /*syncrate*/NULL, - /*period*/0, /*offset*/0, AHC_TRANS_CUR); - found = ahc_abort_scbs(ahc, target, channel, CAM_LUN_WILDCARD, + if (error == CAM_REQ_CMP) { + ahc_set_width(ahc, &devinfo, path, MSG_EXT_WDTR_BUS_8_BIT, + AHC_TRANS_CUR); + ahc_set_syncrate(ahc, &devinfo, path, /*syncrate*/NULL, + /*period*/0, /*offset*/0, AHC_TRANS_CUR); + } + found = ahc_abort_scbs(ahc, target, channel, ALL_LUNS, SCB_LIST_NULL, status); if (error == CAM_REQ_CMP && acode != 0) @@ -3064,6 +2346,8 @@ ahc_done(struct ahc_softc *ahc, struct scb *scb) ahc_index_busy_tcl(ahc, scb->hscb->tcl, /*unbusy*/TRUE); if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO) { + xpt_print_path(ccb->ccb_h.path); + printf("CONT_TARGET_IO complete\n"); ccb->ccb_h.status = CAM_REQ_CMP; ahc_free_scb(ahc, scb); xpt_done(ccb); @@ -3108,6 +2392,22 @@ ahc_done(struct ahc_softc *ahc, struct scb *scb) ccb->ccb_h.status); } + if ((scb->flags & (SCB_MSGOUT_WDTR|SCB_MSGOUT_SDTR)) != 0) { + /* + * Turn off the pending flags for any DTR messages + * regardless of whether they completed successfully + * or not. This ensures that we don't have lingering + * state after we abort an SCB. + */ + u_int16_t mask; + + mask = (0x01 << (SCB_TARGET(scb) + | (SCB_IS_SCSIBUS_B(scb) ? SELBUSB : 0))); + if (scb->flags & SCB_MSGOUT_WDTR) + ahc->wdtrpending &= ~mask; + if (scb->flags & SCB_MSGOUT_SDTR) + ahc->sdtrpending &= ~mask; + } /* Don't clobber any existing error state */ if (ahc_ccb_status(ccb) == CAM_REQ_INPROG) { ccb->ccb_h.status |= CAM_REQ_CMP; @@ -3150,7 +2450,6 @@ ahc_init(struct ahc_softc *ahc) int i; int term; u_int scsi_conf; - u_int scsiseq_template; #ifdef AHC_PRINT_SRAM printf("Scratch Ram:"); @@ -3179,21 +2478,11 @@ ahc_init(struct ahc_softc *ahc) } /* - * Default to allowing initiator operations. - */ - ahc->flags |= AHC_INITIATORMODE; - - /* * XXX Would be better to use a per device flag, but PCI and EISA * devices don't have them yet. */ - if ((AHC_TMODE_ENABLE & (0x01 << ahc->unit)) != 0) { + if ((AHC_TMODE_ENABLE & (0x01 << ahc->unit)) != 0) ahc->flags |= AHC_TARGETMODE; - if ((ahc->features & AHC_ULTRA2) == 0) - /* Only have space for both on the Ultra2 chips */ - ahc->flags &= ~AHC_INITIATORMODE; - } - if ((ahc->features & AHC_TWIN) != 0) { printf("Twin Channel, A SCSI Id=%d, B SCSI Id=%d, primary %c, ", @@ -3246,10 +2535,18 @@ ahc_init(struct ahc_softc *ahc) if (ahc->scb_data->maxhscbs < AHC_SCB_MAX) { ahc->flags |= AHC_PAGESCBS; ahc->scb_data->maxscbs = AHC_SCB_MAX; + if ((ahc->flags & AHC_TARGETMODE) != 0) { + /* Steal one slot for TMODE commands */ + ahc->scb_data->maxscbs--; + } printf("%d/%d SCBs\n", ahc->scb_data->maxhscbs, ahc->scb_data->maxscbs); } else { ahc->scb_data->maxscbs = ahc->scb_data->maxhscbs; + if ((ahc->flags & AHC_TARGETMODE) != 0) { + /* Steal one slot for TMODE commands */ + ahc->scb_data->maxscbs--; + } ahc->flags &= ~AHC_PAGESCBS; printf("%d SCBs\n", ahc->scb_data->maxhscbs); } @@ -3283,14 +2580,13 @@ ahc_init(struct ahc_softc *ahc) ahc_outb(ahc, SIMODE1, ENSELTIMO|ENSCSIRST|ENSCSIPERR); ahc_outb(ahc, SXFRCTL0, DFON|SPIOEN); -#if 0 - if ((scsi_conf & RESET_SCSI) != 0 - && (ahc->flags & AHC_INITIATORMODE) != 0) - ahc->flags |= AHC_RESET_BUS_B; -#else - if ((ahc->flags & AHC_INITIATORMODE) != 0) - ahc->flags |= AHC_RESET_BUS_B; -#endif + if (scsi_conf & RESET_SCSI) { + /* Reset the bus */ + if (bootverbose) + printf("%s: Resetting Channel B\n", + ahc_name(ahc)); + ahc_reset_current_bus(ahc); + } /* Select Channel A */ ahc_outb(ahc, SBLKCTL, ahc_inb(ahc, SBLKCTL) & ~SELBUSB); @@ -3318,14 +2614,14 @@ ahc_init(struct ahc_softc *ahc) ahc_name(ahc)); } -#if 0 - if ((scsi_conf & RESET_SCSI) != 0 - && (ahc->flags & AHC_INITIATORMODE) != 0) - ahc->flags |= AHC_RESET_BUS_A; -#else - if ((ahc->flags & AHC_INITIATORMODE) != 0) - ahc->flags |= AHC_RESET_BUS_A; -#endif + if (scsi_conf & RESET_SCSI) { + /* Reset the bus */ + if (bootverbose) + printf("%s: Resetting Channel %c\n", ahc_name(ahc), + ahc->channel); + + ahc_reset_current_bus(ahc); + } /* * Look at the information that board initialization or @@ -3337,7 +2633,7 @@ ahc_init(struct ahc_softc *ahc) * flag. */ ahc->ultraenb = 0; - ahc->tagenable = ALL_TARGETS_MASK; + ahc->tagenable = ALL_TARGETS; /* Grab the disconnection disable table and invert it for our needs */ if (ahc->flags & AHC_USEDEFAULTS) { @@ -3345,7 +2641,7 @@ ahc_init(struct ahc_softc *ahc) "device parameters\n", ahc_name(ahc)); ahc->flags |= AHC_EXTENDED_TRANS_A|AHC_EXTENDED_TRANS_B| AHC_TERM_ENB_A|AHC_TERM_ENB_B; - ahc->discenable = ALL_TARGETS_MASK; + ahc->discenable = ALL_TARGETS; if ((ahc->features & AHC_ULTRA) != 0) ahc->ultraenb = 0xffff; } else { @@ -3421,6 +2717,8 @@ ahc_init(struct ahc_softc *ahc) } } + ahc->sdtrpending = 0; + ahc->wdtrpending = 0; #ifdef AHC_DEBUG if (ahc_debug & AHC_SHOWMISC) @@ -3463,10 +2761,9 @@ ahc_init(struct ahc_softc *ahc) if ((ahc->flags & AHC_TARGETMODE) != 0) { size_t array_size; - array_size = AHC_TMODE_CMDS * sizeof(struct target_cmd); - ahc->targetcmds = contigmalloc(array_size, M_DEVBUF, - M_NOWAIT, 0ul, 0xffffffff, - PAGE_SIZE, 0x10000); + ahc->num_targetcmds = 32; + array_size = ahc->num_targetcmds * sizeof(struct target_cmd); + ahc->targetcmds = malloc(array_size, M_DEVBUF, M_NOWAIT); if (ahc->targetcmds == NULL) { printf("%s: unable to allocate targetcmd array. " @@ -3474,11 +2771,8 @@ ahc_init(struct ahc_softc *ahc) return (-1); } - /* All target command blocks start out invalid. */ - for (i = 0; i < AHC_TMODE_CMDS; i++) - ahc->targetcmds[i].cmd_valid = 0; - ahc_outb(ahc, KERNEL_TQINPOS, 0); - ahc_outb(ahc, TQINPOS, 0); + bzero(ahc->targetcmds, array_size); + ahc_outb(ahc, TMODE_CMDADDR_NEXT, 0); } /* @@ -3535,10 +2829,6 @@ ahc_init(struct ahc_softc *ahc) ahc_outb(ahc, QINPOS, 0); ahc_outb(ahc, QOUTPOS, 0); - /* Don't have any special messages to send to targets */ - ahc_outb(ahc, TARGET_MSG_REQUEST, 0); - ahc_outb(ahc, TARGET_MSG_REQUEST + 1, 0); - /* * Use the built in queue management registers * if they are available. @@ -3561,16 +2851,6 @@ ahc_init(struct ahc_softc *ahc) ahc_outb(ahc, MSG_OUT, MSG_NOOP); /* - * Setup the allowed SCSI Sequences based on operational mode. - * If we are a target, we'll enalbe select in operations once - * we've had a lun enabled. - */ - scsiseq_template = ENSELO|ENAUTOATNO|ENAUTOATNP; - if ((ahc->flags & AHC_INITIATORMODE) != 0) - scsiseq_template |= ENRSELI; - ahc_outb(ahc, SCSISEQ_TEMPLATE, scsiseq_template); - - /* * Load the Sequencer program and Enable the adapter * in "fast" mode. */ @@ -3586,6 +2866,21 @@ ahc_init(struct ahc_softc *ahc) return (0); } +static void +ahcminphys(struct buf *bp) +{ +/* + * Even though the card can transfer up to 16megs per command + * we are limited by the number of segments in the dma segment + * list that we can hold. The worst case is that all pages are + * discontinuous physically, hense the "page per segment" limit + * enforced here. + */ + if (bp->b_bcount > ((AHC_NSEG - 1) * PAGE_SIZE)) { + bp->b_bcount = ((AHC_NSEG - 1) * PAGE_SIZE); + } +} + static cam_status ahc_find_tmode_devs(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb, struct tmode_tstate **tstate, struct tmode_lstate **lstate, @@ -3601,34 +2896,22 @@ ahc_find_tmode_devs(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb, return (CAM_REQ_INVALID); /* Range check target and lun */ + if (cam_sim_bus(sim) == 0) + our_id = ahc->our_id; + else + our_id = ahc->our_id_b; + if (ccb->ccb_h.target_id > ((ahc->features & AHC_WIDE) ? 15 : 7) + || ((ahc->features & AHC_MULTI_TID) == 0 + && (ccb->ccb_h.target_id != our_id))) + return (CAM_TID_INVALID); - /* - * Handle the 'black hole' device that sucks up - * requests to unattached luns on enabled targets. - */ - if (ccb->ccb_h.target_id == CAM_TARGET_WILDCARD - && ccb->ccb_h.target_lun == CAM_LUN_WILDCARD) { - *tstate = NULL; - *lstate = ahc->black_hole; - } else { - if (cam_sim_bus(sim) == 0) - our_id = ahc->our_id; - else - our_id = ahc->our_id_b; - if (ccb->ccb_h.target_id > ((ahc->features & AHC_WIDE) ? 15 : 7) - || ((ahc->features & AHC_MULTI_TID) == 0 - && (ccb->ccb_h.target_id != our_id))) - return (CAM_TID_INVALID); - - if (ccb->ccb_h.target_lun > 8) - return (CAM_LUN_INVALID); - - *tstate = ahc->enabled_targets[ccb->ccb_h.target_id]; - *lstate = NULL; - if (*tstate != NULL) - *lstate = - (*tstate)->enabled_luns[ccb->ccb_h.target_lun]; - } + if (ccb->ccb_h.target_lun > 8) + return (CAM_LUN_INVALID); + + *tstate = ahc->enabled_targets[ccb->ccb_h.target_id]; + *lstate = NULL; + if (*tstate != NULL) + *lstate = (*tstate)->enabled_luns[ccb->ccb_h.target_lun]; if (notfound_failure != 0 && *lstate == NULL) return (CAM_PATH_INVALID); @@ -3662,15 +2945,9 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) &lstate, TRUE); if (status != CAM_REQ_CMP) { - if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO) { - /* Response from the black hole device */ - tstate = NULL; - lstate = ahc->black_hole; - } else { - ccb->ccb_h.status = status; - xpt_done(ccb); - break; - } + ccb->ccb_h.status = status; + xpt_done(ccb); + break; } if (ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) { SLIST_INSERT_HEAD(&lstate->accept_tios, &ccb->ccb_h, @@ -3685,6 +2962,8 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) * the original command. */ target_id = ccb->csio.init_id; + xpt_print_path(ccb->ccb_h.path); + printf("Sending a continue TIO\n"); /* FALLTHROUGH */ } case XPT_SCSI_IO: /* Execute the requested I/O operation */ @@ -3746,7 +3025,21 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) hscb->control |= MK_MESSAGE; ahc_execute_scb(scb, NULL, 0, 0); } else { - if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO) { + if (ccb->ccb_h.func_code == XPT_SCSI_IO) { + if (tinfo->current.width != tinfo->goal.width) { + if ((ahc->wdtrpending & mask) == 0) { + ahc->wdtrpending |= mask; + hscb->control |= MK_MESSAGE; + scb->flags |= SCB_MSGOUT_WDTR; + } + } else if ((tinfo->current.period + != tinfo->goal.period) + && (ahc->sdtrpending & mask) == 0) { + ahc->sdtrpending |= mask; + hscb->control |= MK_MESSAGE; + scb->flags |= SCB_MSGOUT_SDTR; + } + } else { if (ahc->pending_device == lstate) { scb->flags |= SCB_TARGET_IMMEDIATE; ahc->pending_device = NULL; @@ -3797,14 +3090,105 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) break; } case XPT_EN_LUN: /* Enable LUN as a target */ - ahc_handle_en_lun(ahc, sim, ccb); - xpt_done(ccb); - break; - case XPT_ABORT: /* Abort the specified CCB */ { - ahc_abort_ccb(ahc, sim, ccb); + struct tmode_tstate *tstate; + struct tmode_lstate *lstate; + struct ccb_en_lun *cel; + cam_status status; + int target; + int lun; + + status = ahc_find_tmode_devs(ahc, sim, ccb, &tstate, &lstate, + /* notfound_failure*/FALSE); + + if (status != CAM_REQ_CMP) { + ccb->ccb_h.status = status; + xpt_done(ccb); + break; + } + + cel = &ccb->cel; + target = ccb->ccb_h.target_id; + lun = ccb->ccb_h.target_lun; + if (cel->enable != 0) { + /* Are we already enabled?? */ + if (lstate != NULL) { + ccb->ccb_h.status = CAM_LUN_ALRDY_ENA; + xpt_done(ccb); + break; + } + + if (cel->grp6_len != 0 + || cel->grp7_len != 0) { + /* + * Don't (yet?) support vendor + * specific commands. + */ + ccb->ccb_h.status = CAM_REQ_INVALID; + xpt_done(ccb); + break; + } + + /* + * Seems to be okay. + * Setup our data structures. + */ + if (tstate == NULL) { + tstate = malloc(sizeof(*tstate), + M_DEVBUF, M_NOWAIT); + if (tstate == NULL) { + ccb->ccb_h.status = CAM_RESRC_UNAVAIL; + xpt_done(ccb); + break; + } + bzero(tstate, sizeof(*tstate)); + ahc->enabled_targets[target] = tstate; + } + lstate = malloc(sizeof(*lstate), M_DEVBUF, M_NOWAIT); + if (lstate == NULL) { + ccb->ccb_h.status = CAM_RESRC_UNAVAIL; + xpt_done(ccb); + break; + } + bzero(lstate, sizeof(*lstate)); + SLIST_INIT(&lstate->accept_tios); + SLIST_INIT(&lstate->immed_notifies); + tstate->enabled_luns[lun] = lstate; + if ((ahc->features & AHC_MULTI_TID) != 0) { + u_int16_t targid_mask; + + pause_sequencer(ahc); + targid_mask = ahc_inb(ahc, TARGID) + | (ahc_inb(ahc, TARGID + 1) << 8); + + targid_mask |= (0x01 << target); + ahc_outb(ahc, TARGID, targid_mask); + ahc_outb(ahc, TARGID+1, (targid_mask >> 8)); + unpause_sequencer(ahc, /*always?*/FALSE); + } + ccb->ccb_h.status = CAM_REQ_CMP; + xpt_print_path(ccb->ccb_h.path); + printf("Lun now enabled for target mode\n"); + xpt_done(ccb); + break; + } else { + /* XXX Fully Implement Disable */ + if (lstate == NULL) { + ccb->ccb_h.status = CAM_LUN_INVALID; + xpt_done(ccb); + break; + } + ccb->ccb_h.status = CAM_REQ_CMP; + xpt_done(ccb); + break; + } break; } + case XPT_ABORT: /* Abort the specified CCB */ + /* XXX Implement */ + ccb->ccb_h.status = CAM_REQ_INVALID; + xpt_done(ccb); + break; case XPT_SET_TRAN_SETTINGS: { struct ahc_devinfo devinfo; @@ -3815,9 +3199,7 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) cts = &ccb->cts; ahc_compile_devinfo(&devinfo, cts->ccb_h.target_id, - cts->ccb_h.target_lun, - SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A', - ROLE_UNKNOWN); + SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A'); tinfo = &ahc->transinfo[devinfo.target_offset]; update_type = 0; if ((cts->flags & CCB_TRANS_CURRENT_SETTINGS) != 0) @@ -3853,8 +3235,10 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) cts->bus_width = MSG_EXT_WDTR_BUS_8_BIT; break; } - ahc_set_width(ahc, &devinfo, cts->ccb_h.path, - cts->bus_width, update_type); + if ((update_type & AHC_TRANS_GOAL) != 0) + tinfo->goal.width = cts->bus_width; + if ((update_type & AHC_TRANS_USER) != 0) + tinfo->user.width = cts->bus_width; } if ((cts->valid & CCB_TRANS_SYNC_RATE_VALID) != 0) { @@ -3868,21 +3252,30 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) else maxsync = AHC_SYNCRATE_FAST; - if ((cts->valid & CCB_TRANS_SYNC_OFFSET_VALID) == 0) + if ((cts->valid & CCB_TRANS_SYNC_OFFSET_VALID) != 0) { + if (cts->sync_offset != 0) + cts->sync_offset = ~0; + } else { cts->sync_offset = 0; + } syncrate = ahc_find_syncrate(ahc, &cts->sync_period, maxsync); ahc_validate_offset(ahc, syncrate, &cts->sync_offset, - MSG_EXT_WDTR_BUS_8_BIT); + tinfo->goal.width); /* We use a period of 0 to represent async */ if (cts->sync_offset == 0) cts->sync_period = 0; - ahc_set_syncrate(ahc, &devinfo, cts->ccb_h.path, - syncrate, cts->sync_period, - cts->sync_offset, update_type); + if ((update_type & AHC_TRANS_GOAL) != 0) { + tinfo->goal.period = cts->sync_period; + tinfo->goal.offset = cts->sync_offset; + } + if ((update_type & AHC_TRANS_USER) != 0) { + tinfo->user.period = cts->sync_period; + tinfo->user.offset = cts->sync_offset; + } } splx(s); ccb->ccb_h.status = CAM_REQ_CMP; @@ -3900,9 +3293,7 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) cts = &ccb->cts; ahc_compile_devinfo(&devinfo, cts->ccb_h.target_id, - cts->ccb_h.target_lun, - SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A', - ROLE_UNKNOWN); + SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A'); targ_info = &ahc->transinfo[devinfo.target_offset]; if ((cts->flags & CCB_TRANS_CURRENT_SETTINGS) != 0) @@ -4007,20 +3398,14 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) } else { cpi->target_sprt = 0; } - cpi->hba_misc = (ahc->flags & AHC_INITIATORMODE) - ? 0 : PIM_NOINITIATOR; + cpi->hba_misc = 0; cpi->hba_eng_cnt = 0; cpi->max_target = (ahc->features & AHC_WIDE) ? 15 : 7; cpi->max_lun = 7; - if (SIM_IS_SCSIBUS_B(ahc, sim)) { + if (SIM_IS_SCSIBUS_B(ahc, sim)) cpi->initiator_id = ahc->our_id_b; - if ((ahc->flags & AHC_RESET_BUS_B) == 0) - cpi->hba_misc |= PIM_NOBUSRESET; - } else { + else cpi->initiator_id = ahc->our_id; - if ((ahc->flags & AHC_RESET_BUS_A) == 0) - cpi->hba_misc |= PIM_NOBUSRESET; - } cpi->bus_id = cam_sim_bus(sim); strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); strncpy(cpi->hba_vid, "Adaptec", HBA_IDLEN); @@ -4051,9 +3436,7 @@ ahc_async(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg) struct ahc_devinfo devinfo; ahc_compile_devinfo(&devinfo, xpt_path_target_id(path), - xpt_path_lun_id(path), - SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A', - ROLE_UNKNOWN); + SIM_IS_SCSIBUS_B(ahc, sim) ? 'B' : 'A'); /* * Revert to async/narrow transfers @@ -4152,12 +3535,12 @@ ahc_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments, (ccb->ccb_h.timeout * hz) / 1000); if ((scb->flags & SCB_TARGET_IMMEDIATE) != 0) { + xpt_print_path(ccb->ccb_h.path); + printf("Returning an immediate CTIO\n"); if ((ahc->flags & AHC_PAGESCBS) == 0) ahc_outb(ahc, SCBPTR, scb->hscb->tag); - pause_sequencer(ahc); ahc_outb(ahc, SCB_TAG, scb->hscb->tag); - ahc_outb(ahc, RETURN_1, CONT_MSG_LOOP); - unpause_sequencer(ahc, /*unpause_always*/FALSE); + unpause_sequencer(ahc, /*unpause_always*/TRUE); } else { ahc->qinfifo[ahc->qinfifonext++] = scb->hscb->tag; @@ -4428,10 +3811,7 @@ ahc_loadseq(struct ahc_softc *ahc) u_int8_t download_consts[4]; /* Setup downloadable constant table */ -#if 0 - /* No downloaded constants are currently defined. */ download_consts[TMODE_NUMCMDS] = ahc->num_targetcmds; -#endif cur_patch = patches; downloaded = 0; @@ -4716,14 +4096,12 @@ ahc_timeout(void *arg) break; } - printf(", SEQADDR == 0x%x\n", - ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8)); - -#if 0 printf(", SCSISIGI == 0x%x\n", ahc_inb(ahc, SCSISIGI)); - printf("SIMODE1 = 0x%x\n", ahc_inb(ahc, SIMODE1)); - printf("INTSTAT = 0x%x\n", ahc_inb(ahc, INTSTAT)); + + printf("SEQADDR == 0x%x\n", ahc_inb(ahc, SEQADDR0) + | (ahc_inb(ahc, SEQADDR1) << 8)); printf("SSTAT1 == 0x%x\n", ahc_inb(ahc, SSTAT1)); +#if 0 printf("SCSIRATE == 0x%x\n", ahc_inb(ahc, SCSIRATE)); printf("CCSCBCTL == 0x%x\n", ahc_inb(ahc, CCSCBCTL)); printf("CCSCBCNT == 0x%x\n", ahc_inb(ahc, CCSCBCNT)); @@ -4731,6 +4109,7 @@ ahc_timeout(void *arg) printf("DFSTATUS == 0x%x\n", ahc_inb(ahc, DFSTATUS)); printf("CCHCNT == 0x%x\n", ahc_inb(ahc, CCHCNT)); #endif + /* Decide our course of action */ if (scb->flags & SCB_DEVICE_RESET) { /* * Been down this road before. @@ -4743,26 +4122,18 @@ bus_reset: "%d SCBs aborted\n", ahc_name(ahc), channel, found); } else { /* - * If we are a target, transition to bus free and report - * the timeout. - * - * The target/initiator that is holding up the bus may not + * Send a Bus Device Reset message: + * The target that is holding up the bus may not * be the same as the one that triggered this timeout * (different commands have different timeout lengths). - * If the bus is idle and we are actiing as the initiator - * for this request, queue a BDR message to the timed out - * target. Otherwise, if the timed out transaction is - * active: - * Initiator transaction: - * Stuff the message buffer with a BDR message and assert - * ATN in the hopes that the target will let go of the bus - * and go to the mesgout phase. If this fails, we'll - * get another timeout 2 seconds later which will attempt - * a bus reset. - * - * Target transaction: - * Transition to BUS FREE and report the error. - * It's good to be the target! + * Our strategy here is to queue a BDR message + * to the timed out target if the bus is idle. + * Otherwise, if we have an active target we stuff the + * message buffer with a BDR message and assert ATN + * in the hopes that the target will let go of the bus + * and go to the mesgout phase. If this fails, we'll + * get another timeout 2 seconds later which will attempt + * a bus reset. */ u_int active_scb_index; @@ -4793,25 +4164,7 @@ bus_reset: (newtimeout * hz) / 1000); splx(s); return; - } - - /* It's us */ - if ((scb->hscb->control & TARGET_SCB) != 0) { - - /* - * Send back any queued up transactions - * and properly record the error condition. - */ - ahc_freeze_devq(ahc, scb->ccb->ccb_h.path); - ahc_set_ccb_status(scb->ccb, CAM_CMD_TIMEOUT); - ahc_freeze_ccb(scb->ccb); - ahc_done(ahc, scb); - - /* Will clear us from the bus */ - restart_sequencer(ahc); - return; } - ahc_set_recoveryscb(ahc, active_scb); ahc_outb(ahc, MSG_OUT, MSG_BUS_DEV_RESET); ahc_outb(ahc, SCSISIGO, bus_state|ATNO); @@ -4824,15 +4177,6 @@ bus_reset: } else { int disconnected; - if (bus_state != P_BUSFREE - && (ahc_inb(ahc, SSTAT0) & TARGET) != 0) { - /* Hung target selection. Goto busfree */ - printf("%s: Hung target selection\n", - ahc_name(ahc)); - restart_sequencer(ahc); - return; - } - if (ahc_search_qinfifo(ahc, target, channel, lun, scb->hscb->tag, /*status*/0, SEARCH_COUNT) > 0) { @@ -4959,86 +4303,6 @@ ahc_search_qinfifo(struct ahc_softc *ahc, int target, char channel, } -static void -ahc_abort_ccb(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb) -{ - union ccb *abort_ccb; - - abort_ccb = ccb->cab.abort_ccb; - switch (abort_ccb->ccb_h.func_code) { - case XPT_ACCEPT_TARGET_IO: - case XPT_IMMED_NOTIFY: - case XPT_CONT_TARGET_IO: - { - struct tmode_tstate *tstate; - struct tmode_lstate *lstate; - struct ccb_hdr_slist *list; - cam_status status; - - status = ahc_find_tmode_devs(ahc, sim, abort_ccb, &tstate, - &lstate, TRUE); - - if (status != CAM_REQ_CMP) { - ccb->ccb_h.status = status; - break; - } - - if (abort_ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) - list = &lstate->accept_tios; - else if (abort_ccb->ccb_h.func_code == XPT_IMMED_NOTIFY) - list = &lstate->immed_notifies; - else - list = NULL; - - if (list != NULL) { - struct ccb_hdr *curelm; - int found; - - curelm = SLIST_FIRST(list); - found = 0; - if (curelm == &abort_ccb->ccb_h) { - found = 1; - SLIST_REMOVE_HEAD(list, sim_links.sle); - } else { - while(curelm != NULL) { - struct ccb_hdr *nextelm; - - nextelm = - SLIST_NEXT(curelm, sim_links.sle); - - if (nextelm == &abort_ccb->ccb_h) { - found = 1; - SLIST_NEXT(curelm, - sim_links.sle) = - SLIST_NEXT(nextelm, - sim_links.sle); - break; - } - curelm = nextelm; - } - } - - if (found) - abort_ccb->ccb_h.status = CAM_REQ_ABORTED; - else { - printf("Not found\n"); - ccb->ccb_h.status = CAM_PATH_INVALID; - } - break; - } - /* FALLTHROUGH */ - } - case XPT_SCSI_IO: - /* XXX Fully implement the hard ones */ - ccb->ccb_h.status = CAM_UA_ABORT; - break; - default: - ccb->ccb_h.status = CAM_REQ_INVALID; - break; - } - xpt_done(ccb); -} - /* * Abort all SCBs that match the given description (target/channel/lun/tag), * setting their status to the passed in status if the status has not already @@ -5303,9 +4567,8 @@ ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset) * Clean up all the state information for the * pending transactions on this bus. */ - found = ahc_abort_scbs(ahc, CAM_TARGET_WILDCARD, channel, - CAM_LUN_WILDCARD, SCB_LIST_NULL, - CAM_SCSI_BUS_RESET); + found = ahc_abort_scbs(ahc, ALL_TARGETS, channel, ALL_LUNS, + SCB_LIST_NULL, CAM_SCSI_BUS_RESET); path = channel == 'B' ? ahc->path_b : ahc->path; /* Notify the XPT that a bus reset occurred */ @@ -5318,8 +4581,7 @@ ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset) for (target = 0; target <= max_target; target++) { struct ahc_devinfo devinfo; - ahc_compile_devinfo(&devinfo, target, CAM_LUN_WILDCARD, - channel, ROLE_UNKNOWN); + ahc_compile_devinfo(&devinfo, target, channel); ahc_set_width(ahc, &devinfo, path, MSG_EXT_WDTR_BUS_8_BIT, AHC_TRANS_CUR); ahc_set_syncrate(ahc, &devinfo, path, /*syncrate*/NULL, @@ -5341,7 +4603,8 @@ ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset) * upsetting the current bus. */ ahc_outb(ahc, SBLKCTL, sblkctl ^ SELBUSB); - ahc_outb(ahc, SIMODE1, ahc_inb(ahc, SIMODE1) & ~ENBUSFREE); + ahc_outb(ahc, SIMODE1, + ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENREQINIT)); ahc_outb(ahc, SCSISEQ, ahc_inb(ahc, SCSISEQ) & (ENSELI|ENRSELI|ENAUTOATNP)); if (initiate_reset) @@ -5351,8 +4614,10 @@ ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset) unpause_sequencer(ahc, /*unpause_always*/FALSE); } else { /* Case 2: A command from this bus is active or we're idle */ - ahc_clear_msg_state(ahc); - ahc_outb(ahc, SIMODE1, ahc_inb(ahc, SIMODE1) & ~ENBUSFREE); + ahc_outb(ahc, SIMODE1, + ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENREQINIT)); + ahc->flags &= ~AHC_HANDLING_REQINITS; + ahc->msg_type = MSG_TYPE_NONE; ahc_outb(ahc, SCSISEQ, ahc_inb(ahc, SCSISEQ) & (ENSELI|ENRSELI|ENAUTOATNP)); if (initiate_reset) @@ -5373,9 +4638,9 @@ ahc_match_scb (struct scb *scb, int target, char channel, int lun, u_int tag) match = ((chan == channel) || (channel == ALL_CHANNELS)); if (match != 0) - match = ((targ == target) || (target == CAM_TARGET_WILDCARD)); + match = ((targ == target) || (target == ALL_TARGETS)); if (match != 0) - match = ((lun == slun) || (lun == CAM_LUN_WILDCARD)); + match = ((lun == slun) || (lun == ALL_LUNS)); if (match != 0) match = ((tag == scb->hscb->tag) || (tag == SCB_LIST_NULL)); @@ -5385,22 +4650,22 @@ ahc_match_scb (struct scb *scb, int target, char channel, int lun, u_int tag) static void ahc_construct_sdtr(struct ahc_softc *ahc, u_int period, u_int offset) { - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXTENDED; - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXT_SDTR_LEN; - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXT_SDTR; - ahc->msgout_buf[ahc->msgout_index++] = period; - ahc->msgout_buf[ahc->msgout_index++] = offset; - ahc->msgout_len += 5; + ahc->msg_buf[ahc->msg_index++] = MSG_EXTENDED; + ahc->msg_buf[ahc->msg_index++] = MSG_EXT_SDTR_LEN; + ahc->msg_buf[ahc->msg_index++] = MSG_EXT_SDTR; + ahc->msg_buf[ahc->msg_index++] = period; + ahc->msg_buf[ahc->msg_index++] = offset; + ahc->msg_len += 5; } static void ahc_construct_wdtr(struct ahc_softc *ahc, u_int bus_width) { - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXTENDED; - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXT_WDTR_LEN; - ahc->msgout_buf[ahc->msgout_index++] = MSG_EXT_WDTR; - ahc->msgout_buf[ahc->msgout_index++] = bus_width; - ahc->msgout_len += 4; + ahc->msg_buf[ahc->msg_index++] = MSG_EXTENDED; + ahc->msg_buf[ahc->msg_index++] = MSG_EXT_WDTR_LEN; + ahc->msg_buf[ahc->msg_index++] = MSG_EXT_WDTR; + ahc->msg_buf[ahc->msg_index++] = bus_width; + ahc->msg_len += 4; } static void @@ -5495,9 +4760,7 @@ ahc_update_pending_syncrates(struct ahc_softc *ahc) pending_scb = (struct scb *)ccbh->ccb_scb_ptr; pending_hscb = pending_scb->hscb; ahc_compile_devinfo(&devinfo, SCB_TARGET(pending_scb), - SCB_LUN(pending_scb), - SCB_CHANNEL(pending_scb), - ROLE_UNKNOWN); + SCB_CHANNEL(pending_scb)); tinfo = &ahc->transinfo[devinfo.target_offset]; pending_hscb->control &= ~ULTRAENB; if ((ahc->ultraenb & devinfo.target_mask) != 0) @@ -5528,9 +4791,7 @@ ahc_update_pending_syncrates(struct ahc_softc *ahc) pending_scb = ahc->scb_data->scbarray[scb_tag]; pending_hscb = pending_scb->hscb; ahc_compile_devinfo(&devinfo, SCB_TARGET(pending_scb), - SCB_LUN(pending_scb), - SCB_CHANNEL(pending_scb), - ROLE_UNKNOWN); + SCB_CHANNEL(pending_scb)); tinfo = &ahc->transinfo[devinfo.target_offset]; control = ahc_inb(ahc, SCB_CONTROL); control &= ~ULTRAENB; @@ -5544,7 +4805,6 @@ ahc_update_pending_syncrates(struct ahc_softc *ahc) ahc_outb(ahc, SCBPTR, saved_scbptr); } -#if UNUSED static void ahc_dump_targcmd(struct target_cmd *cmd) { @@ -5552,9 +4812,9 @@ ahc_dump_targcmd(struct target_cmd *cmd) u_int8_t *last_byte; int i; - byte = &cmd->initiator_channel; + byte = &cmd->icl; /* Debugging info for received commands */ - last_byte = &cmd[1].initiator_channel; + last_byte = &cmd[1].icl; i = 0; while (byte < last_byte) { @@ -5570,7 +4830,6 @@ ahc_dump_targcmd(struct target_cmd *cmd) } } } -#endif static void ahc_shutdown(int howto, void *arg) diff --git a/sys/dev/aic7xxx/aic7xxx.h b/sys/dev/aic7xxx/aic7xxx.h index e46d277e8d585..06f7d4abd4e1e 100644 --- a/sys/dev/aic7xxx/aic7xxx.h +++ b/sys/dev/aic7xxx/aic7xxx.h @@ -34,7 +34,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aic7xxx.h,v 1.4 1998/12/15 08:22:41 gibbs Exp $ + * $Id: aic7xxx.h,v 1.40 1997/02/25 03:05:35 gibbs Exp $ */ #ifndef _AIC7XXX_H_ @@ -68,12 +68,6 @@ * aic7850 has only 3. */ -#define AHC_TMODE_CMDS 256 /* - * Ring Buffer of incoming target commands. - * We allocate 256 to simplify the logic - * in the sequencer by using the natural - * wrap point of an 8bit counter. - */ #if defined(__FreeBSD__) extern u_long ahc_unit; @@ -117,11 +111,9 @@ typedef enum { AHC_AIC7860_FE = AHC_ULTRA|AHC_SPIOCAP, AHC_AIC7870_FE = AHC_FENONE, AHC_AIC7880_FE = AHC_ULTRA, - AHC_AIC7890_FE = AHC_MORE_SRAM|AHC_CMD_CHAN|AHC_ULTRA2|AHC_QUEUE_REGS - |AHC_SG_PRELOAD|AHC_MULTI_TID, + AHC_AIC7890_FE = AHC_MORE_SRAM|AHC_CMD_CHAN|AHC_ULTRA2|AHC_QUEUE_REGS|AHC_SG_PRELOAD|AHC_MULTI_TID, AHC_AIC7895_FE = AHC_MORE_SRAM|AHC_CMD_CHAN|AHC_ULTRA, - AHC_AIC7896_FE = AHC_MORE_SRAM|AHC_CMD_CHAN|AHC_ULTRA2|AHC_QUEUE_REGS - |AHC_SG_PRELOAD|AHC_MULTI_TID, + AHC_AIC7896_FE = AHC_MORE_SRAM|AHC_CMD_CHAN|AHC_ULTRA2|AHC_QUEUE_REGS|AHC_SG_PRELOAD|AHC_MULTI_TID, } ahc_feature; typedef enum { @@ -141,16 +133,11 @@ typedef enum { AHC_INDIRECT_PAGING = 0x008, AHC_SHARED_SRAM = 0x010, AHC_LARGE_SEEPROM = 0x020,/* Uses C56_66 not C46 */ - AHC_RESET_BUS_A = 0x040, - AHC_RESET_BUS_B = 0x080, AHC_EXTENDED_TRANS_A = 0x100, AHC_EXTENDED_TRANS_B = 0x200, AHC_TERM_ENB_A = 0x400, AHC_TERM_ENB_B = 0x800, - AHC_INITIATORMODE = 0x1000,/* - * Allow initiator operations on - * this controller. - */ + AHC_HANDLING_REQINITS = 0x1000, AHC_TARGETMODE = 0x2000,/* * Allow target operations on this * controller. @@ -172,6 +159,11 @@ typedef enum { SCB_DEVICE_RESET = 0x0004, SCB_SENSE = 0x0008, SCB_RECOVERY_SCB = 0x0040, + SCB_MSGOUT_SENT = 0x0200, + SCB_MSGOUT_SDTR = 0x0400, + SCB_MSGOUT_WDTR = 0x0800, + SCB_MSGOUT_BITS = (SCB_MSGOUT_SDTR|SCB_MSGOUT_WDTR + |SCB_MSGOUT_SENT), SCB_ABORT = 0x1000, SCB_QUEUED_MSG = 0x2000, SCB_ACTIVE = 0x4000, @@ -255,17 +247,13 @@ struct scb_data { * Connection desciptor for select-in requests in target mode. * The first byte is the connecting target, followed by identify * message and optional tag information, terminated by 0xFF. The - * remainder is the command to execute. The cmd_valid byte is on - * an 8 byte boundary to simplify setting it on aic7880 hardware - * which only has limited direct access to the DMA FIFO. + * remainder is the command to execute. */ struct target_cmd { - u_int8_t initiator_channel; - u_int8_t targ_id; /* Target ID we were selected at */ - u_int8_t identify; /* Identify message */ - u_int8_t bytes[21]; - u_int8_t cmd_valid; - u_int8_t pad[7]; + u_int8_t icl; /* Really only holds Initiator ID */ + u_int8_t targ_id; /* Target ID we were selected at */ + u_int8_t identify; /* Identify message */ + u_int8_t bytes[29]; }; /* @@ -273,8 +261,8 @@ struct target_cmd { * and immediate notify CCB pools. */ struct tmode_lstate { - struct ccb_hdr_slist accept_tios; - struct ccb_hdr_slist immed_notifies; + SLIST_HEAD(, ccb_hdr) accept_tios; + SLIST_HEAD(, ccb_hdr) immed_notifies; }; /* @@ -386,9 +374,7 @@ struct ahc_syncrate { typedef enum { MSG_TYPE_NONE = 0x00, MSG_TYPE_INITIATOR_MSGOUT = 0x01, - MSG_TYPE_INITIATOR_MSGIN = 0x02, - MSG_TYPE_TARGET_MSGOUT = 0x03, - MSG_TYPE_TARGET_MSGIN = 0x04 + MSG_TYPE_INITIATOR_MSGIN = 0x02 } ahc_msg_type; struct ahc_softc { @@ -409,12 +395,6 @@ struct ahc_softc { struct tmode_tstate* enabled_targets[16]; /* - * The black hole device responsible for handling requests for - * disabled luns on enabled targets. - */ - struct tmode_lstate* black_hole; - - /* * Device instance currently on the bus awaiting a continue TIO * for a command that was not given the disconnect priveledge. */ @@ -452,9 +432,10 @@ struct ahc_softc { * Per target state bitmasks. */ u_int16_t ultraenb; /* Using ultra sync rate */ + u_int16_t sdtrpending; /* Pending SDTR request */ + u_int16_t wdtrpending; /* Pending WDTR request */ u_int16_t discenable; /* Disconnection allowed */ u_int16_t tagenable; /* Tagged Queuing allowed */ - u_int16_t targ_msg_req; /* Need negotiation messages */ /* * Hooks into the XPT. @@ -481,24 +462,18 @@ struct ahc_softc { int unsolicited_ints; pcici_t pci_config_id; - /* - * Target incoming command FIFO. - */ + /* Hmmm. */ struct target_cmd *targetcmds; - u_int8_t tqinfifonext; + int next_targetcmd; + int num_targetcmds; /* * Incoming and outgoing message handling. */ - u_int8_t send_msg_perror; ahc_msg_type msg_type; - u_int8_t msgout_buf[8]; /* Message we are sending */ - u_int8_t msgin_buf[8]; /* Message we are receiving */ - u_int msgout_len; /* Length of message to send */ - u_int msgout_index; /* Current index in msgout */ - u_int msgin_index; /* Current index in msgin */ - - u_int enabled_luns; + u_int8_t msg_buf[8]; /* Message we are sending */ + u_int msg_len; /* Length of message to send */ + u_int msg_index; /* Current index in message */ /* * "Bus" addresses of our data structures. diff --git a/sys/dev/aic7xxx/aic7xxx.reg b/sys/dev/aic7xxx/aic7xxx.reg index 775c0e31086f4..fff2b6f26fc14 100644 --- a/sys/dev/aic7xxx/aic7xxx.reg +++ b/sys/dev/aic7xxx/aic7xxx.reg @@ -1,7 +1,7 @@ /* * Aic7xxx register and scratch ram definitions. * - * Copyright (c) 1994-1999 Justin Gibbs. + * Copyright (c) 1994-1998 Justin Gibbs. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aic7xxx.reg,v 1.11 1998/12/17 00:06:52 gibbs Exp $ + * $Id: aic7xxx.reg,v 1.4 1997/06/27 19:38:39 gibbs Exp $ */ /* @@ -471,7 +471,7 @@ register SEQCTL { * Sequencer RAM Data (p. 3-34) * Single byte window into the Scratch Ram area starting at the address * specified by SEQADDR0 and SEQADDR1. To write a full word, simply write - * four bytes in succession. The SEQADDRs will increment after the most + * four bytes in sucessesion. The SEQADDRs will increment after the most * significant byte is written */ register SEQRAM { @@ -675,20 +675,20 @@ register INTSTAT { mask SEND_REJECT 0x10|SEQINT /* sending a message reject */ mask NO_IDENT 0x20|SEQINT /* no IDENTIFY after reconnect*/ mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */ + mask EXTENDED_MSG 0x40|SEQINT /* Extended message received */ mask ABORT_REQUESTED 0x50|SEQINT /* Reconect of aborted SCB */ + mask REJECT_MSG 0x60|SEQINT /* Reject message received */ mask BAD_STATUS 0x70|SEQINT /* Bad status from target */ mask RESIDUAL 0x80|SEQINT /* Residual byte count != 0 */ - mask TRACE_POINT 0x90|SEQINT - mask HOST_MSG_LOOP 0xa0|SEQINT /* - * The bus is ready for the - * host to perform another - * message transaction. This - * mechanism is used for things - * like sync/wide negotiation - * that require a kernel based - * message state engine. + mask AWAITING_MSG 0xa0|SEQINT /* + * Kernel requested to specify + * a message to this target + * (command was null), so tell + * it that it can fill the + * message buffer. */ mask TARGET_MSG_HELP 0xb0|SEQINT + mask TARGET_SYNC_CMD 0xc0|SEQINT mask TRACEPOINT 0xd0|SEQINT mask MSGIN_PHASEMIS 0xe0|SEQINT /* * Target changed phase on us @@ -763,16 +763,6 @@ register DFSTATUS { bit FIFOEMP 0x01 } -register DFWADDR { - address 0x95 - access_mode RW -} - -register DFRADDR { - address 0x97 - access_mode RW -} - register DFDAT { address 0x099 access_mode RW @@ -1265,25 +1255,18 @@ scratch_ram { size 1 } /* - * Kernel and sequencer offsets into the queue of - * incoming target mode command descriptors. The - * queue is full when the ((KERNEL_TQINPOS - TQINPOS) == 1) + * Offset into the command descriptor array for the next + * available desciptor to use. */ - KERNEL_TQINPOS { - size 1 - } - TQINPOS { + TMODE_CMDADDR_NEXT { size 1 } ARG_1 { size 1 - mask SEND_MSG 0x80 - mask SEND_SENSE 0x40 - mask SEND_REJ 0x20 - mask MSGOUT_PHASEMIS 0x10 - mask EXIT_MSG_LOOP 0x08 - mask CONT_MSG_LOOP 0x04 - mask CONT_TARG_SESSION 0x02 + mask SEND_MSG 0x80 + mask SEND_SENSE 0x40 + mask SEND_REJ 0x20 + mask MSGOUT_PHASEMIS 0x10 alias RETURN_1 } ARG_2 { @@ -1306,44 +1289,6 @@ scratch_ram { size 1 } - /* - * Interrupt kernel for a message to this target on - * the next transaction. This is usually used for - * negotiation requests. - */ - TARGET_MSG_REQUEST { - size 2 - } - - /* - * Sequences the kernel driver has okayed for us. This allows - * the driver to do things like prevent initiator or target - * operations. - */ - SCSISEQ_TEMPLATE { - size 1 - bit ENSELO 0x40 - bit ENSELI 0x20 - bit ENRSELI 0x10 - bit ENAUTOATNO 0x08 - bit ENAUTOATNI 0x04 - bit ENAUTOATNP 0x02 - } - - /* - * Track whether the transfer byte count for - * the current data phase is odd. - */ - DATA_COUNT_ODD { - size 1 - } - - /* - * The initiator specified tag for this target mode transaction. - */ - INITIATOR_TAG { - size 1 - } /* * These are reserved registers in the card's scratch ram. Some of @@ -1415,7 +1360,5 @@ const CMD_GROUP5_BYTE_DELTA 11 /* * Number of command descriptors in the command descriptor array. - * No longer used, but left here as an example for how downloaded - * constantants can be defined. -const TMODE_NUMCMDS download */ +const TMODE_NUMCMDS download diff --git a/sys/dev/aic7xxx/aic7xxx.seq b/sys/dev/aic7xxx/aic7xxx.seq index 3377449cd302b..c1ab64df4193e 100644 --- a/sys/dev/aic7xxx/aic7xxx.seq +++ b/sys/dev/aic7xxx/aic7xxx.seq @@ -1,7 +1,7 @@ /* * Adaptec 274x/284x/294x device driver firmware for Linux and FreeBSD. * - * Copyright (c) 1994-1999 Justin Gibbs. + * Copyright (c) 1994-1998 Justin Gibbs. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aic7xxx.seq,v 1.83 1998/12/17 00:06:52 gibbs Exp $ + * $Id: aic7xxx.seq,v 1.78 1998/09/15 07:24:16 gibbs Exp $ */ #include <dev/aic7xxx/aic7xxx.reg> @@ -58,9 +58,12 @@ reset: clr SCSISIGO; /* De-assert BSY */ - and SXFRCTL1, ~BITBUCKET; /* Always allow reselection */ - and SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP, SCSISEQ_TEMPLATE; + if ((ahc->flags & AHC_TARGETMODE) != 0) { + mvi SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP; + } else { + mvi SCSISEQ, ENRSELI|ENAUTOATNP; + } if ((ahc->features & AHC_CMD_CHAN) != 0) { /* Ensure that no DMA operations are in progress */ @@ -178,12 +181,13 @@ initialize_scsiid: and SCSIID, OID; /* Clear old target */ or SCSIID, A; } - mov SINDEX, SCSISEQ_TEMPLATE; if ((ahc->flags & AHC_TARGETMODE) != 0) { - test SCB_CONTROL, TARGET_SCB jz . + 2; - or SINDEX, TEMODE; + and SINDEX, TARGET_SCB, SCB_CONTROL; + or SCSISEQ, ENSELO|ENAUTOATNO|ENSELI + |ENRSELI|ENAUTOATNP, SINDEX ret ; + } else { + mvi SCSISEQ, ENSELO|ENAUTOATNO|ENRSELI|ENAUTOATNP ret; } - mov SCSISEQ, SINDEX ret; /* * Initialize transfer settings and clear the SCSI channel. @@ -212,26 +216,29 @@ selection: mvi CLRSINT0, CLRSELDI; select_in: if ((ahc->flags & AHC_TARGETMODE) != 0) { - if ((ahc->flags & AHC_INITIATORMODE) != 0) { - test SSTAT0, TARGET jz initiator_reselect; - } - + test SSTAT0, TARGET jz initiator_reselect; /* * We've just been selected. Assert BSY and * setup the phase for receiving messages * from the target. */ mvi SCSISIGO, P_MESGOUT|BSYO; - mvi CLRSINT1, CLRBUSFREE; + + /* + * LAST_MSG gives an indication to the host of what + * went wrong should we need to terminate this selection + * before doing real work. Initialize it to SCB_LIST_NULL to + * indicate an improper initiator selection. + */ + mvi LAST_MSG, SCB_LIST_NULL; /* * Setup the DMA for sending the identify and - * command information. + * command information. We keep a count of the + * number of bytes to send to the host in ARG_2. */ or SEQ_FLAGS, CMDPHASE_PENDING; - - /* XXX If ring buffer is full, return busy or queue full */ - mov A, TQINPOS; + mov A, TMODE_CMDADDR_NEXT; if ((ahc->features & AHC_CMD_CHAN) != 0) { mvi DINDEX, CCHADDR; mvi TMODE_CMDADDR call set_32byte_addr; @@ -265,9 +272,6 @@ select_in: } } - /* No tag yet */ - mvi INITIATOR_TAG, SCB_LIST_NULL; - /* * If ATN isn't asserted, the target isn't interested * in talking to us. Go directly to bus free. @@ -279,20 +283,20 @@ select_in: * initiator. We follow the guidlines from section 6.5 * of the SCSI-2 spec for what messages are allowed when. */ - call target_inb; + call targ_inb; /* * Our first message must be one of IDENTIFY, ABORT, or * BUS_DEVICE_RESET. */ - /* XXX May need to be more lax here for older initiators... */ - test DINDEX, MSG_IDENTIFYFLAG jz host_target_message_loop; + test DINDEX, MSG_IDENTIFYFLAG jz more_first_messages; /* Store for host */ if ((ahc->features & AHC_CMD_CHAN) != 0) { mov CCSCBRAM, DINDEX; } else { mov DFDAT, DINDEX; } + mvi ARG_2, 3; /* Remember for disconnection decision */ test DINDEX, MSG_IDENTIFY_DISCFLAG jnz . + 2; @@ -300,7 +304,7 @@ select_in: or SEQ_FLAGS, NO_DISCONNECT; test SCSISIGI, ATNI jz ident_messages_done; - call target_inb; + call targ_inb; /* * If this is a tagged request, the tagged message must * immediately follow the identify. We test for a valid @@ -324,39 +328,39 @@ select_in: * free. */ test SCSISIGI, ATNI jz target_busfree; - /* * Store the tag for the host. */ - call target_inb; + call targ_inb; if ((ahc->features & AHC_CMD_CHAN) != 0) { mov CCSCBRAM, DINDEX; } else { mov DFDAT, DINDEX; } - mov INITIATOR_TAG, DINDEX; + add ARG_2, 2; jmp ident_messages_done; +more_first_messages: /* - * Pushed message loop to allow the kernel to - * run it's own target mode message state engine. + * Hmm. Now we're down to only accepting + * either an ABORT or BDR. */ -host_target_message_loop: - mvi INTSTAT, HOST_MSG_LOOP; - nop; - cmp RETURN_1, EXIT_MSG_LOOP je target_ITloop; - test SSTAT0, SPIORDY jz .; - jmp host_target_message_loop; + cmp DINDEX, MSG_ABORT je . + 2; + cmp DINDEX, MSG_BUS_DEV_RESET jne target_busfree; + + /* Record the event and notify the host */ + mov LAST_MSG, DINDEX; + jmp target_busfree; ident_messages_done: + mvi LAST_MSG, MSG_NOOP; /* We are so far successful */ /* Terminate the ident list */ if ((ahc->features & AHC_CMD_CHAN) != 0) { mvi CCSCBRAM, SCB_LIST_NULL; } else { mvi DFDAT, SCB_LIST_NULL; } - or SEQ_FLAGS, TARG_CMD_PENDING|IDENTIFY_SEEN; - test SCSISIGI, ATNI jnz target_mesgout_pending_msg; + or SEQ_FLAGS, TARG_CMD_PENDING; jmp target_ITloop; /* @@ -364,20 +368,16 @@ ident_messages_done: * message byte we receive so it can be checked prior to * driving REQ on the bus for the next byte. */ -target_inb: - /* - * Drive REQ on the bus by enabling SCSI PIO. - */ +targ_inb: + /* Drive REQ on the bus by enabling SCSI PIO */ or SXFRCTL0, SPIOEN; /* Wait for the byte */ test SSTAT0, SPIORDY jz .; /* Prevent our read from triggering another REQ */ and SXFRCTL0, ~SPIOEN; - /* Save latched contents */ mov DINDEX, SCSIDATL ret; } -if ((ahc->flags & AHC_INITIATORMODE) != 0) { /* * Reselection has been initiated by a target. Make a note that we've been * reselected, but haven't seen an IDENTIFY message from the target yet. @@ -389,7 +389,7 @@ initiator_reselect: test SBLKCTL, SELBUSB jz . + 2; or SAVED_TCL, SELBUSB; } - or SXFRCTL0, SPIOEN|CLRSTCNT|CLRCHN; + or SXFRCTL0, SPIOEN|CLRCHN; mvi CLRSINT1,CLRBUSFREE; or SIMODE1, ENBUSFREE; /* * We aren't expecting a @@ -399,7 +399,6 @@ initiator_reselect: */ mvi MSG_OUT, MSG_NOOP; /* No message to send */ jmp ITloop; -} /* * After the selection, remove this SCB from the "waiting SCB" @@ -409,7 +408,11 @@ initiator_reselect: */ select_out: /* Turn off the selection hardware */ - and SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP, SCSISEQ_TEMPLATE; + if ((ahc->flags & AHC_TARGETMODE) != 0) { + mvi SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP; + } else { + mvi SCSISEQ, ENRSELI|ENAUTOATNP; + } mvi CLRSINT0, CLRSELDO; mov SCBPTR, WAITING_SCBH; mov WAITING_SCBH,SCB_NEXT; @@ -422,8 +425,7 @@ select_out: * Assert BSY and setup the phase for * sending our identify messages. */ - mvi P_MESGIN|BSYO call change_phase; - mvi CLRSINT1,CLRBUSFREE; + mvi SCSISIGO, P_MESGIN|BSYO; /* * Start out with a simple identify message. @@ -437,22 +439,19 @@ select_out: */ test SCB_CONTROL, TAG_ENB jz . + 3; mvi MSG_SIMPLE_Q_TAG call target_outb; - mov SCB_INITIATOR_TAG call target_outb; - mov INITIATOR_TAG, SCB_INITIATOR_TAG; + mov SCB_TAG call target_outb; target_synccmd: /* * Now determine what phases the host wants us * to go through. */ mov SEQ_FLAGS, SCB_TARGET_PHASES; - target_ITloop: /* - * Start honoring ATN signals now that - * we properly identified ourself. + * XXX Start honoring ATN signals now that + * we properly identified ourself. */ - test SCSISIGI, ATNI jnz target_mesgout; test SEQ_FLAGS, CMDPHASE_PENDING jnz target_cmdphase; test SEQ_FLAGS, DPHASE_PENDING jnz target_dphase; test SEQ_FLAGS, SPHASE_PENDING jnz target_sphase; @@ -465,35 +464,38 @@ target_ITloop: if ((ahc->flags & AHC_PAGESCBS) != 0) { mov ALLZEROS call get_free_or_disc_scb; } - mov RETURN_1, ALLZEROS; call complete_target_cmd; - cmp RETURN_1, CONT_MSG_LOOP jne .; mvi DMAPARAMS, HDMAEN|DIRECTION|FIFORESET; mov SCB_TAG call dma_scb; jmp target_synccmd; -target_mesgout: - mvi SCSISIGO, P_MESGOUT|BSYO; - call target_inb; - /* Local Processing goes here... */ -target_mesgout_pending_msg: - jmp host_target_message_loop; - target_disconnect: - mvi P_MESGIN|BSYO call change_phase; - test SEQ_FLAGS, DPHASE jz . + 2; - mvi MSG_SAVEDATAPOINTER call target_outb; + mvi SCSISIGO, P_MESGIN|BSYO; mvi MSG_DISCONNECT call target_outb; target_busfree: + and SXFRCTL0, ~SPIOEN; clr SCSISIGO; call complete_target_cmd; + cmp LAST_MSG, MSG_NOOP je . + 2; + mvi INTSTAT, TARGET_MSG_HELP; call clear_target_state; jmp poll_for_work; target_cmdphase: - mvi P_COMMAND|BSYO call change_phase; - call target_inb; + /* + * Add one for the terminating byte + * and one for the command code. + */ + if ((ahc->features & AHC_CMD_CHAN) != 0) { + add CCHCNT, 2, ARG_2; + } else { + add HCNT[0], 2, ARG_2; + clr HCNT[1]; + clr HCNT[2]; + } + mvi SCSISIGO, P_COMMAND|BSYO; + call targ_inb; mov A, DINDEX; /* Store for host */ if ((ahc->features & AHC_CMD_CHAN) != 0) { @@ -504,16 +506,20 @@ target_cmdphase: /* * Determine the number of bytes to read - * based on the command group code via table lookup. - * We reuse the first 8 bytes of the TARG_SCSIRATE - * BIOS array for this table. Count is one less than - * the total for the command since we've already fetched - * the first byte. + * based on the command group code using an adding + * jump table. Count is one less than the total + * since we've already fetched the first byte. */ shr A, CMD_GROUP_CODE_SHIFT; add SINDEX, TARG_SCSIRATE, A; mov A, SINDIR; + if ((ahc->features & AHC_CMD_CHAN) != 0) { + add CCHCNT, A; + } else { + add HCNT[0], A; + } + test A, 0xFF jz command_phase_done; command_loop: or SXFRCTL0, SPIOEN; @@ -537,20 +543,20 @@ target_dphase: * Data direction flags are from the * perspective of the initiator. */ + and SXFRCTL0, ~SPIOEN; + or SXFRCTL0, CLRCHN; test SCB_TARGET_PHASES[1], TARGET_DATA_IN jz . + 4; + mvi SCSISIGO, P_DATAIN|BSYO; mvi LASTPHASE, P_DATAOUT; - mvi P_DATAIN|BSYO call change_phase; - jmp . + 3; + jmp p_data; + mvi SCSISIGO, P_DATAOUT|BSYO; mvi LASTPHASE, P_DATAIN; - mvi P_DATAOUT|BSYO call change_phase; - mov ALLZEROS call initialize_channel; jmp p_data; target_sphase: - mvi P_STATUS|BSYO call change_phase; - mvi LASTPHASE, P_STATUS; + mvi SCSISIGO, P_STATUS|BSYO; mov SCB_TARGET_STATUS call target_outb; - /* XXX Watch for ATN or parity errors??? */ + /* XXX Watch for ATN for parity errors??? */ mvi SCSISIGO, P_MESGIN|BSYO; /* MSG_CMDCMPLT is 0, but we can't do an immediate of 0 */ mov ALLZEROS call target_outb; @@ -560,52 +566,37 @@ complete_target_cmd: test SEQ_FLAGS, TARG_CMD_PENDING jnz . + 2; mov SCB_TAG jmp complete_post; if ((ahc->features & AHC_CMD_CHAN) != 0) { - /* Set the valid byte */ - mvi CCSCBADDR, 24; - mov CCSCBRAM, ALLONES; - mvi CCHCNT, 28; or CCSCBCTL, CCSCBEN|CCSCBRESET; test CCSCBCTL, CCSCBDONE jz .; clr CCSCBCTL; } else { - /* Set the valid byte */ - or DFCNTRL, FIFORESET; - mvi DFWADDR, 3; /* Third 64bit word or byte 24 */ - mov DFDAT, ALLONES; - mvi HCNT[0], 28; - clr HCNT[1]; - clr HCNT[2]; or DFCNTRL, HDMAEN|FIFOFLUSH; call dma_finish; } - inc TQINPOS; - mvi INTSTAT,CMDCMPLT ret; + inc TMODE_CMDADDR_NEXT; + cmp TMODE_CMDADDR_NEXT, TMODE_NUMCMDS jne . + 2; + clr TMODE_CMDADDR_NEXT; + mvi TARGET_CMD_CMPLT jmp complete_post; } - -if ((ahc->flags & AHC_INITIATORMODE) != 0) { initiator_select: mvi SPIOEN call initialize_channel; - - /* - * We aren't expecting a bus free, so interrupt - * the kernel driver if it happens. - */ +/* + * We aren't expecting a bus free, so interrupt + * the kernel driver if it happens. + */ mvi CLRSINT1,CLRBUSFREE; or SIMODE1, ENBUSFREE; - - /* - * As soon as we get a successful selection, the target - * should go into the message out phase since we have ATN - * asserted. - */ +/* + * As soon as we get a successful selection, the target should go + * into the message out phase since we have ATN asserted. + */ mvi MSG_OUT, MSG_IDENTIFYFLAG; or SEQ_FLAGS, IDENTIFY_SEEN; - /* - * Main loop for information transfer phases. Wait for the - * target to assert REQ before checking MSG, C/D and I/O for - * the bus phase. - */ +/* + * Main loop for information transfer phases. Wait for the target + * to assert REQ before checking MSG, C/D and I/O for the bus phase. + */ ITloop: call phase_lock; @@ -617,7 +608,7 @@ ITloop: cmp A,P_STATUS je p_status; cmp A,P_MESGIN je p_mesgin; - mvi INTSTAT,BAD_PHASE; + mvi INTSTAT,BAD_PHASE; /* unknown phase - signal driver */ jmp ITloop; /* Try reading the bus again. */ await_busfree: @@ -628,27 +619,20 @@ await_busfree: test SSTAT1,REQINIT|BUSFREE jz .; test SSTAT1, BUSFREE jnz poll_for_work; mvi INTSTAT, BAD_PHASE; -} clear_target_state: - /* - * We assume that the kernel driver may reset us - * at any time, even in the middle of a DMA, so - * clear DFCNTRL too. - */ - clr DFCNTRL; - - /* - * We don't know the target we will connect to, - * so default to narrow transfers to avoid - * parity problems. - */ - if ((ahc->features & AHC_ULTRA2) != 0) { - bmov SCSIRATE, ALLZEROS, 2; - } else { - clr SCSIRATE; - and SXFRCTL0, ~(FAST20); - } + clr DFCNTRL; /* + * We assume that the kernel driver + * may reset us at any time, even + * in the middle of a DMA, so clear + * DFCNTRL too. + */ + clr SCSIRATE; /* + * We don't know the target we will + * connect to, so default to narrow + * transfers to avoid parity problems. + */ + and SXFRCTL0, ~(FAST20); mvi LASTPHASE, P_BUSFREE; /* clear target specific flags */ clr SEQ_FLAGS ret; @@ -664,7 +648,6 @@ data_phase_reinit: mvi DINDEX, STCNT; mvi SCB_RESID_DCNT call bcopy_3; } - and DATA_COUNT_ODD, 0x1, SCB_RESID_DCNT[0]; jmp data_phase_loop; p_data: @@ -699,7 +682,6 @@ p_data: mvi DINDEX, HADDR; mvi SCB_DATAPTR call bcopy_7; } - and DATA_COUNT_ODD, 0x1, SCB_DATACNT[0]; if ((ahc->features & AHC_ULTRA2) == 0) { if ((ahc->features & AHC_CMD_CHAN) != 0) { @@ -826,10 +808,6 @@ prefetched_segs_avail: mvi HADDR call dfdat_in_7; } - /* Track odd'ness */ - test HCNT[0], 0x1 jz . + 2; - xor DATA_COUNT_ODD, 0x1; - if ((ahc->features & AHC_ULTRA2) == 0) { /* Load STCNT as well. It is a mirror of HCNT */ if ((ahc->features & AHC_CMD_CHAN) != 0) { @@ -844,12 +822,7 @@ prefetched_segs_avail: add SG_NEXT[0],SG_SIZEOF; adc SG_NEXT[1],A; - if ((ahc->flags & AHC_TARGETMODE) != 0) { - test SSTAT0, TARGET jnz data_phase_loop; - } - test SSTAT1, REQINIT jz .; test SSTAT1,PHASEMIS jz data_phase_loop; - /* Ensure the last seg is visable at the shaddow layer */ if ((ahc->features & AHC_ULTRA2) != 0) { or DFCNTRL, PRELOADEN; @@ -878,14 +851,8 @@ data_phase_finish: } if ((ahc->flags & AHC_TARGETMODE) != 0) { - test SEQ_FLAGS, DPHASE_PENDING jz ITloop; + test SEQ_FLAGS, DPHASE_PENDING jz . + 3; and SEQ_FLAGS, ~DPHASE_PENDING; - /* - * For data-in phases, wait for any pending acks from the - * initiator before changing phase. - */ - test DFCNTRL, DIRECTION jz target_ITloop; - test SSTAT1, REQINIT jnz .; jmp target_ITloop; } jmp ITloop; @@ -915,7 +882,6 @@ ultra2_dmahalt: ret; } -if ((ahc->flags & AHC_INITIATORMODE) != 0) { /* * Command phase. Set up the DMA registers and let 'er rip. */ @@ -972,22 +938,17 @@ p_status: jmp ITloop; /* - * Message out phase. If MSG_OUT is MSG_IDENTIFYFLAG, build a full - * indentify message sequence and send it to the target. The host may - * override this behavior by setting the MK_MESSAGE bit in the SCB - * control byte. This will cause us to interrupt the host and allow - * it to handle the message phase completely on its own. If the bit - * associated with this target is set, we will also interrupt the host, - * thereby allowing it to send a message on the next selection regardless - * of the transaction being sent. + * Message out phase. If MSG_OUT is 0x80, build I full indentify message + * sequence and send it to the target. In addition, if the MK_MESSAGE bit + * is set in the SCB_CONTROL byte, interrupt the host and allow it to send + * it's own message. * * If MSG_OUT is == HOST_MSG, also interrupt the host and take a message. - * This is done to allow the host to send messages outside of an identify + * This is done to allow the hsot to send messages outside of an identify * sequence while protecting the seqencer from testing the MK_MESSAGE bit * on an SCB that might not be for the current nexus. (For example, a * BDR message in responce to a bad reselection would leave us pointed to * an SCB that doesn't have anything to do with the current target). - * * Otherwise, treat MSG_OUT as a 1 byte message to send (abort, abort tag, * bus device reset). * @@ -995,29 +956,22 @@ p_status: * in case the target decides to put us in this phase for some strange * reason. */ -p_mesgout_retry: - or SCSISIGO,ATNO,LASTPHASE;/* turn on ATN for the retry */ p_mesgout: mov SINDEX, MSG_OUT; cmp SINDEX, MSG_IDENTIFYFLAG jne p_mesgout_from_host; - test SCB_CONTROL,MK_MESSAGE jnz host_message_loop; - mov FUNCTION1, SCB_TCL; - mov A, FUNCTION1; - mov SINDEX, TARGET_MSG_REQUEST[0]; - if ((ahc->features & AHC_TWIN) != 0) { - /* Second Channel uses high byte bits */ - test SCB_TCL, SELBUSB jz . + 2; - mov SINDEX, TARGET_MSG_REQUEST[1]; - } else if ((ahc->features & AHC_WIDE) != 0) { - test SCB_TCL, 0x80 jz . + 2; /* target > 7 */ - mov SINDEX, TARGET_MSG_REQUEST[1]; - } - test SINDEX, A jnz host_message_loop; p_mesgout_identify: - and SINDEX,LID,SCB_TCL; /* lun */ + if ((ahc->features & AHC_WIDE) != 0) { + and SINDEX,0xf,SCB_TCL; /* lun */ + } else { + and SINDEX,0x7,SCB_TCL; /* lun */ + } and A,DISCENB,SCB_CONTROL; /* mask off disconnect privledge */ or SINDEX,A; /* or in disconnect privledge */ or SINDEX,MSG_IDENTIFYFLAG; +p_mesgout_mk_message: + test SCB_CONTROL,MK_MESSAGE jz p_mesgout_tag; + mov SCSIDATL, SINDEX; /* Send the last byte */ + jmp p_mesgout_from_host + 1;/* Skip HOST_MSG test */ /* * Send a tag message if TAG_ENB is set in the SCB control block. * Use SCB_TAG (the position in the kernel's SCB array) as the tag value. @@ -1032,27 +986,36 @@ p_mesgout_tag: cmp LASTPHASE, P_MESGOUT jne p_mesgout_done; mov SCB_TAG jmp p_mesgout_onebyte; /* - * Interrupt the driver, and allow it to handle this message - * phase and any required retries. + * Interrupt the driver, and allow it to send a message + * if it asks. */ p_mesgout_from_host: cmp SINDEX, HOST_MSG jne p_mesgout_onebyte; - jmp host_message_loop; + mvi INTSTAT,AWAITING_MSG; + nop; + /* + * Did the host detect a phase change? + */ + cmp RETURN_1, MSGOUT_PHASEMIS je p_mesgout_done; p_mesgout_onebyte: mvi CLRSINT1, CLRATNO; mov SCSIDATL, SINDEX; /* - * If the next bus phase after ATN drops is message out, it means + * If the next bus phase after ATN drops is a message out, it means * that the target is requesting that the last message(s) be resent. */ call phase_lock; - cmp LASTPHASE, P_MESGOUT je p_mesgout_retry; + cmp LASTPHASE, P_MESGOUT jne p_mesgout_done; + or SCSISIGO,ATNO,LASTPHASE;/* turn on ATN for the retry */ + jmp p_mesgout; p_mesgout_done: mvi CLRSINT1,CLRATNO; /* Be sure to turn ATNO off */ mov LAST_MSG, MSG_OUT; + cmp MSG_OUT, MSG_IDENTIFYFLAG jne . + 2; + and SCB_CONTROL, ~MK_MESSAGE; mvi MSG_OUT, MSG_NOOP; /* No message left */ jmp ITloop; @@ -1067,22 +1030,19 @@ p_mesgin: cmp A,MSG_SAVEDATAPOINTER je mesgin_sdptrs; cmp ALLZEROS,A je mesgin_complete; cmp A,MSG_RESTOREPOINTERS je mesgin_rdptrs; + cmp A,MSG_EXTENDED je mesgin_extended; + cmp A,MSG_MESSAGE_REJECT je mesgin_reject; cmp A,MSG_NOOP je mesgin_done; +rej_mesgin: /* - * Pushed message loop to allow the kernel to - * RUN IT's own message state engine. To avoid an - * extra nop instruction after signaling the kernel, - * we perform the phase_lock before checking to see - * if we should exit the loop and skip the phase_lock - * in the ITloop. Performing back to back phase_locks - * shouldn't hurt, but why do it twice... + * We have no idea what this message in is, so we issue a message reject + * and hope for the best. In any case, rejection should be a rare + * occurrence - signal the driver when it happens. */ -host_message_loop: - mvi INTSTAT, HOST_MSG_LOOP; - call phase_lock; - cmp RETURN_1, EXIT_MSG_LOOP je ITloop + 1; - jmp host_message_loop; + mvi INTSTAT,SEND_REJECT; /* let driver know */ + + mvi MSG_MESSAGE_REJECT call mk_mesg; mesgin_done: mov NONE,SCSIDATL; /*dummy read from latch to ACK*/ @@ -1147,7 +1107,6 @@ complete_queue: add_to_free_list: call add_scb_to_free_list; jmp await_busfree; -} complete_post: /* Post the SCBID in SINDEX and issue an interrupt */ @@ -1162,9 +1121,23 @@ complete_post: if ((ahc->features & AHC_QUEUE_REGS) == 0) { inc QOUTPOS; } + if ((ahc->flags & AHC_TARGETMODE) != 0) { + test SEQ_FLAGS, NO_DISCONNECT jz . + 3; + mvi INTSTAT,TARGET_SYNC_CMD|CMDCMPLT; + ret; + } mvi INTSTAT,CMDCMPLT ret; -if ((ahc->flags & AHC_INITIATORMODE) != 0) { +/* + * Is it an extended message? Copy the message to our message buffer and + * notify the host. The host will tell us whether to reject this message, + * respond to it with the message that the host placed in our message buffer, + * or simply to do nothing. + */ +mesgin_extended: + mvi INTSTAT,EXTENDED_MSG; /* let driver know */ + jmp ITloop; + /* * Is it a disconnect message? Set a flag in the SCB to remind us * and await the bus going free. @@ -1293,6 +1266,16 @@ not_found: jmp mesgin_done; /* + * Message reject? Let the kernel driver handle this. If we have an + * outstanding WDTR or SDTR negotiation, assume that it's a response from + * the target selecting 8bit or asynchronous transfer, otherwise just ignore + * it since we have no clue what it pertains to. + */ +mesgin_reject: + mvi INTSTAT, REJECT_MSG; + jmp mesgin_done; + +/* * [ ADD MORE MESSAGE HANDLING HERE ] */ @@ -1337,35 +1320,18 @@ inb_first: mov DINDIR,SCSIBUSL ret; /*read byte directly from bus*/ inb_last: mov NONE,SCSIDATL ret; /*dummy read from latch to ACK*/ -} if ((ahc->flags & AHC_TARGETMODE) != 0) { -/* - * Change to a new phase. If we are changing the state of the I/O signal, - * from out to in, wait an additional data release delay before continuing. - */ -change_phase: - and DINDEX, IOI, SCSISIGI; - mov SCSISIGO, SINDEX; - and A, IOI, SINDEX; - cmp DINDEX, A je change_phase_wait; - test SINDEX, IOI jz change_phase_wait; - call change_phase_wait; -change_phase_wait: - nop; - nop; - nop; - nop ret; - -/* - * Send a byte to an initiator in Automatic PIO mode. - */ + /* + * Send a byte to an initiator in Automatic PIO mode. + * SPIOEN must be on prior to calling this routine. + */ target_outb: or SXFRCTL0, SPIOEN; test SSTAT0, SPIORDY jz .; mov SCSIDATL, SINDEX; test SSTAT0, SPIORDY jz .; - and SXFRCTL0, ~SPIOEN ret; + ret; } mesgin_phasemis: @@ -1584,8 +1550,8 @@ get_SCBID_from_host: phase_lock: test SSTAT1, REQINIT jz phase_lock; test SSTAT1, SCSIPERR jnz phase_lock; - and SCSISIGO, PHASE_MASK, SCSISIGI; - and LASTPHASE, PHASE_MASK, SCSISIGI ret; + and LASTPHASE, PHASE_MASK, SCSISIGI; + mov SCSISIGO, LASTPHASE ret; if ((ahc->features & AHC_CMD_CHAN) == 0) { set_stcnt_from_hcnt: diff --git a/sys/dev/aic7xxx/aicasm_gram.y b/sys/dev/aic7xxx/aicasm_gram.y index fdf352249ab8f..09a62b936d279 100644 --- a/sys/dev/aic7xxx/aicasm_gram.y +++ b/sys/dev/aic7xxx/aicasm_gram.y @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aicasm_gram.y,v 1.5 1998/09/15 07:24:17 gibbs Exp $ + * $Id: aicasm_gram.y,v 1.4 1997/09/27 19:37:28 gibbs Exp $ */ #include <stdio.h> @@ -861,12 +861,12 @@ code: ; code: - T_NOP ret ';' + T_NOP ';' { expression_t immed; make_expression(&immed, 0xff); - format_1_instr(AIC_OP_AND, &none, &immed, &allzeros, $2); + format_1_instr(AIC_OP_AND, &none, &immed, &allzeros, FALSE); } ; diff --git a/sys/dev/buslogic/bt.c b/sys/dev/buslogic/bt.c index 33ca81f6b2a6c..7196844368833 100644 --- a/sys/dev/buslogic/bt.c +++ b/sys/dev/buslogic/bt.c @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: bt.c,v 1.12 1998/12/04 22:54:44 archie Exp $ + * $Id: bt.c,v 1.6 1998/10/15 23:17:58 gibbs Exp $ */ /* @@ -181,26 +181,12 @@ u_long bt_unit = 0; */ struct bt_isa_port bt_isa_ports[] = { - { 0x130, 0, 4 }, - { 0x134, 0, 5 }, - { 0x230, 0, 2 }, - { 0x234, 0, 3 }, - { 0x330, 0, 0 }, - { 0x334, 0, 1 } -}; - -/* - * I/O ports listed in the order enumerated by the - * card for certain op codes. - */ -u_int16_t bt_board_ports[] = -{ - 0x330, - 0x334, - 0x230, - 0x234, - 0x130, - 0x134 + { 0x330, 0 }, + { 0x334, 0 }, + { 0x230, 0 }, + { 0x234, 0 }, + { 0x130, 0 }, + { 0x134, 0 } }; /* Exported functions */ @@ -449,15 +435,15 @@ bt_fetch_adapter_info(struct bt_softc *bt) if (esetup_info.bus_type == 'A' && bt->firmware_ver[0] == '2') { - snprintf(bt->model, sizeof(bt->model), "542B"); + strcpy(bt->model, "542B"); } else if (esetup_info.bus_type == 'E' && (strncmp(bt->firmware_ver, "2.1", 3) == 0 || strncmp(bt->firmware_ver, "2.20", 4) == 0)) { - snprintf(bt->model, sizeof(bt->model), "742A"); + strcpy(bt->model, "742A"); } else if (esetup_info.bus_type == 'E' && bt->firmware_ver[0] == '0') { /* AMI FastDisk EISA Series 441 0.x */ - snprintf(bt->model, sizeof(bt->model), "747A"); + strcpy(bt->model, "747A"); } else { ha_model_data_t model_data; int i; @@ -819,7 +805,7 @@ bt_name(struct bt_softc *bt) { static char name[10]; - snprintf(name, sizeof(name), "bt%d", bt->unit); + sprintf(name, "bt%d", bt->unit); return (name); } @@ -828,7 +814,7 @@ bt_check_probed_iop(u_int ioport) { u_int i; - for (i = 0; i < BT_NUM_ISAPORTS; i++) { + for (i=0; i < BT_NUM_ISAPORTS; i++) { if (bt_isa_ports[i].addr == ioport) { if (bt_isa_ports[i].probed != 0) return (1); @@ -844,7 +830,7 @@ void bt_mark_probed_bio(isa_compat_io_t port) { if (port < BIO_DISABLED) - bt_mark_probed_iop(bt_board_ports[port]); + bt_isa_ports[port].probed = 1; } void @@ -860,44 +846,6 @@ bt_mark_probed_iop(u_int ioport) } } -void -bt_find_probe_range(int ioport, int *port_index, int *max_port_index) -{ - if (ioport > 0) { - int i; - - for (i = 0;i < BT_NUM_ISAPORTS; i++) - if (ioport <= bt_isa_ports[i].addr) - break; - if ((i >= BT_NUM_ISAPORTS) - || (ioport != bt_isa_ports[i].addr)) { - printf(" -bt_isa_probe: Invalid baseport of 0x%x specified. -bt_isa_probe: Nearest valid baseport is 0x%x. -bt_isa_probe: Failing probe.\n", - ioport, - (i < BT_NUM_ISAPORTS) - ? bt_isa_ports[i].addr - : bt_isa_ports[BT_NUM_ISAPORTS - 1].addr); - *port_index = *max_port_index = -1; - return; - } - *port_index = *max_port_index = bt_isa_ports[i].bio; - } else { - *port_index = 0; - *max_port_index = BT_NUM_ISAPORTS - 1; - } -} - -int -bt_iop_from_bio(isa_compat_io_t bio_index) -{ - if (bio_index >= 0 && bio_index < BT_NUM_ISAPORTS) - return (bt_board_ports[bio_index]); - return (-1); -} - - static void btallocccbs(struct bt_softc *bt) { @@ -970,7 +918,6 @@ btfreeccb(struct bt_softc *bt, struct bt_ccb *bccb) } bccb->flags = BCCB_FREE; SLIST_INSERT_HEAD(&bt->free_bt_ccbs, bccb, links); - bt->active_ccbs--; splx(s); } @@ -983,16 +930,13 @@ btgetccb(struct bt_softc *bt) s = splcam(); if ((bccb = SLIST_FIRST(&bt->free_bt_ccbs)) != NULL) { SLIST_REMOVE_HEAD(&bt->free_bt_ccbs, links); - bt->active_ccbs++; } else if (bt->num_ccbs < bt->max_ccbs) { btallocccbs(bt); bccb = SLIST_FIRST(&bt->free_bt_ccbs); if (bccb == NULL) printf("%s: Can't malloc BCCB\n", bt_name(bt)); - else { + else SLIST_REMOVE_HEAD(&bt->free_bt_ccbs, links); - bt->active_ccbs++; - } } splx(s); @@ -1015,6 +959,7 @@ btaction(struct cam_sim *sim, union ccb *ccb) { struct bt_ccb *bccb; struct bt_hccb *hccb; + u_int16_t targ_mask; /* * get a bccb to use. @@ -1047,6 +992,7 @@ btaction(struct cam_sim *sim, union ccb *ccb) hccb->target_lun = ccb->ccb_h.target_lun; hccb->btstat = 0; hccb->sdstat = 0; + targ_mask = (0x01 << hccb->target_id); if (ccb->ccb_h.func_code == XPT_SCSI_IO) { struct ccb_scsiio *csio; @@ -1055,8 +1001,8 @@ btaction(struct cam_sim *sim, union ccb *ccb) csio = &ccb->csio; ccbh = &csio->ccb_h; hccb->opcode = INITIATOR_CCB_WRESID; - hccb->datain = (ccb->ccb_h.flags & CAM_DIR_IN) ? 1 : 0; - hccb->dataout =(ccb->ccb_h.flags & CAM_DIR_OUT) ? 1 : 0; + hccb->datain = (ccb->ccb_h.flags & CAM_DIR_IN) != 0; + hccb->dataout = (ccb->ccb_h.flags & CAM_DIR_OUT) != 0; hccb->cmd_len = csio->cdb_len; if (hccb->cmd_len > sizeof(hccb->scsi_cdb)) { ccb->ccb_h.status = CAM_REQ_INVALID; @@ -1365,7 +1311,7 @@ btexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) bus_dmamap_sync(bt->buffer_dmat, bccb->dmamap, op); } else { - bccb->hccb.opcode = INITIATOR_CCB; + bccb->hccb.opcode = INITIATOR_SG_CCB; bccb->hccb.data_len = 0; bccb->hccb.data_addr = 0; } @@ -1395,27 +1341,8 @@ btexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) /* Tell the adapter about this command */ bt->cur_outbox->ccb_addr = btccbvtop(bt, bccb); - if (bt->cur_outbox->action_code != BMBO_FREE) { - /* - * We should never encounter a busy mailbox. - * If we do, warn the user, and treat it as - * a resource shortage. If the controller is - * hung, one of the pending transactions will - * timeout causing us to start recovery operations. - */ - printf("%s: Encountered busy mailbox with %d out of %d " - "commands active!!!", bt_name(bt), bt->active_ccbs, - bt->max_ccbs); - untimeout(bttimeout, bccb, ccb->ccb_h.timeout_ch); - if (nseg != 0) - bus_dmamap_unload(bt->buffer_dmat, bccb->dmamap); - btfreeccb(bt, bccb); - bt->resource_shortage = TRUE; - xpt_freeze_simq(bt->sim, /*count*/1); - ccb->ccb_h.status = CAM_REQUEUE_REQ; - xpt_done(ccb); - return; - } + if (bt->cur_outbox->action_code != BMBO_FREE) + panic("%s: Too few mailboxes or to many ccbs???", bt_name(bt)); bt->cur_outbox->action_code = BMBO_START; bt_outb(bt, COMMAND_REG, BOP_START_MBOX); btnextoutbox(bt); @@ -1536,22 +1463,14 @@ btdone(struct bt_softc *bt, struct bt_ccb *bccb, bt_mbi_comp_code_t comp_code) break; case BMBI_ABORT: case BMBI_ERROR: - if (bootverbose) { - printf("bt: ccb %p - error %x occured. " - "btstat = %x, sdstat = %x\n", - (void *)bccb, comp_code, bccb->hccb.btstat, - bccb->hccb.sdstat); - } +#if 0 + printf("bt: ccb %x - error %x occured. btstat = %x, sdstat = %x\n", + bccb, comp_code, bccb->hccb.btstat, bccb->hccb.sdstat); +#endif /* An error occured */ switch(bccb->hccb.btstat) { case BTSTAT_DATARUN_ERROR: - if (bccb->hccb.data_len == 0) { - /* - * At least firmware 4.22, does this - * for a QUEUE FULL condition. - */ - bccb->hccb.sdstat = SCSI_STATUS_QUEUE_FULL; - } else if (bccb->hccb.data_len < 0) { + if (bccb->hccb.data_len <= 0) { csio->ccb_h.status = CAM_DATA_RUN_ERR; break; } @@ -1779,13 +1698,11 @@ bt_cmd(struct bt_softc *bt, bt_op_t opcode, u_int8_t *params, u_int param_len, u_int intstat; u_int reply_buf_size; int s; - int cmd_complete; /* No data returned to start */ reply_buf_size = reply_len; reply_len = 0; intstat = 0; - cmd_complete = 0; bt->command_cmp = 0; /* @@ -1821,13 +1738,10 @@ bt_cmd(struct bt_softc *bt, bt_op_t opcode, u_int8_t *params, u_int param_len, status = bt_inb(bt, STATUS_REG); intstat = bt_inb(bt, INTSTAT_REG); if ((intstat & (INTR_PENDING|CMD_COMPLETE)) - == (INTR_PENDING|CMD_COMPLETE)) { - cmd_complete = 1; + == (INTR_PENDING|CMD_COMPLETE)) break; - } if (bt->command_cmp != 0) { status = bt->latched_status; - cmd_complete = 1; break; } if ((status & DATAIN_REG_READY) != 0) @@ -1849,7 +1763,7 @@ bt_cmd(struct bt_softc *bt, bt_op_t opcode, u_int8_t *params, u_int param_len, * the CMD_REG_BUSY status to clear and check for a command * failure. */ - if (cmd_complete == 0 && opcode == BOP_MODIFY_IO_ADDR) { + if (opcode == BOP_MODIFY_IO_ADDR) { while (--cmd_timeout) { status = bt_inb(bt, STATUS_REG); @@ -1874,7 +1788,7 @@ bt_cmd(struct bt_softc *bt, bt_op_t opcode, u_int8_t *params, u_int param_len, * For all other commands, we wait for any output data * and the final comand completion interrupt. */ - while (cmd_complete == 0 && --cmd_timeout) { + while (--cmd_timeout) { status = bt_inb(bt, STATUS_REG); intstat = bt_inb(bt, INTSTAT_REG); diff --git a/sys/dev/buslogic/btreg.h b/sys/dev/buslogic/btreg.h index fa049bcfc3e2b..d31db883fc3d6 100644 --- a/sys/dev/buslogic/btreg.h +++ b/sys/dev/buslogic/btreg.h @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: btreg.h,v 1.2 1998/10/30 02:06:44 gibbs Exp $ + * $Id$ */ #ifndef _BTREG_H_ @@ -408,7 +408,6 @@ typedef struct { struct bt_isa_port { u_int16_t addr; u_int8_t probed; - u_int8_t bio; }; extern struct bt_isa_port bt_isa_ports[]; @@ -550,7 +549,7 @@ struct bt_hccb { wide_tag_type :2; /* Wide Lun CCB format */ u_int8_t cmd_len; u_int8_t sense_len; - int32_t data_len; /* residuals can be negative */ + u_int32_t data_len; u_int32_t data_addr; u_int8_t reserved[2]; u_int8_t btstat; @@ -600,7 +599,6 @@ struct bt_softc { struct bt_ccb *bt_ccb_array; SLIST_HEAD(,bt_ccb) free_bt_ccbs; LIST_HEAD(,ccb_hdr) pending_ccbs; - u_int active_ccbs; u_int32_t bt_ccb_physbase; bt_mbox_in_t *in_boxes; bt_mbox_out_t *out_boxes; @@ -668,11 +666,6 @@ char * bt_name(struct bt_softc *bt); int bt_check_probed_iop(u_int ioport); void bt_mark_probed_bio(isa_compat_io_t port); void bt_mark_probed_iop(u_int ioport); -void bt_find_probe_range(int ioport, - int *port_index, - int *max_port_index); - -int bt_iop_from_bio(isa_compat_io_t bio_index); #define DEFAULT_CMD_TIMEOUT 10000 /* 1 sec */ int bt_cmd(struct bt_softc *bt, bt_op_t opcode, diff --git a/sys/dev/dec/mcclock_if.m b/sys/dev/dec/mcclock_if.m index 79686237ed57b..39a06baf5d489 100644 --- a/sys/dev/dec/mcclock_if.m +++ b/sys/dev/dec/mcclock_if.m @@ -23,10 +23,10 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $Id: mcclock_if.m,v 1.1 1998/06/14 13:52:55 dfr Exp $ +# $Id$ # -INTERFACE mcclock; +INTERFACE mcclock # # Read an RTC register and return its value. diff --git a/sys/dev/dpt/dpt_control.c b/sys/dev/dpt/dpt_control.c index b28fb672d1cfc..ba4bec9c3cdb1 100644 --- a/sys/dev/dpt/dpt_control.c +++ b/sys/dev/dpt/dpt_control.c @@ -36,7 +36,7 @@ * future. */ -#ident "$Id: dpt_control.c,v 1.9 1998/09/15 08:33:31 gibbs Exp $" +#ident "$Id: dpt_control.c,v 1.8 1998/08/05 00:54:36 eivind Exp $" #include "opt_dpt.h" @@ -782,8 +782,7 @@ dpt_ioctl(dev_t dev, u_long cmd, caddr_t cmdarg, int flags, struct proc * p) compat_softc.ha_npend = dpt->submitted_ccbs_count; compat_softc.ha_active_jobs = dpt->waiting_ccbs_count; strncpy(compat_softc.ha_fw_version, - dpt->board_data.firmware, - sizeof(compat_softc.ha_fw_version)); + dpt->board_data.firmware, 4); compat_softc.ha_ccb = NULL; compat_softc.ha_cblist = NULL; compat_softc.ha_dev = NULL; diff --git a/sys/dev/dpt/dpt_scsi.c b/sys/dev/dpt/dpt_scsi.c index 47c12a51bdade..42ff038f6645d 100644 --- a/sys/dev/dpt/dpt_scsi.c +++ b/sys/dev/dpt/dpt_scsi.c @@ -43,7 +43,7 @@ * arrays that span controllers (Wow!). */ -#ident "$Id: dpt_scsi.c,v 1.21 1998/12/22 00:52:27 eivind Exp $" +#ident "$Id: dpt_scsi.c,v 1.19 1998/10/15 23:17:56 gibbs Exp $" #define _DPT_C_ @@ -300,12 +300,11 @@ dptallocsgmap(struct dpt_softc *dpt) return (NULL); } - (void)bus_dmamap_load(dpt->sg_dmat, sg_map->sg_dmamap, sg_map->sg_vaddr, - PAGE_SIZE, dptmapmem, &sg_map->sg_physaddr, - /*flags*/0); - SLIST_INSERT_HEAD(&dpt->sg_maps, sg_map, links); + bus_dmamap_load(dpt->sg_dmat, sg_map->sg_dmamap, sg_map->sg_vaddr, + PAGE_SIZE, dptmapmem, &sg_map->sg_physaddr, /*flags*/0); + return (sg_map); } @@ -1129,7 +1128,7 @@ dpt_free(struct dpt_softc *dpt) free(dpt, M_DEVBUF); } -static u_int8_t string_sizes[] = +u_int8_t string_sizes[] = { sizeof(((dpt_inq_t*)NULL)->vendor), sizeof(((dpt_inq_t*)NULL)->modelNum), @@ -1148,9 +1147,6 @@ dpt_init(struct dpt_softc *dpt) int i; int retval; - dpt->init_level = 0; - SLIST_INIT(&dpt->sg_maps); - #ifdef DPT_RESET_BOARD printf("dpt%d: resetting HBA\n", dpt->unit); dpt_outb(dpt, HA_WCOMMAND, EATA_CMD_RESET); diff --git a/sys/dev/en/midway.c b/sys/dev/en/midway.c index 44a465927ca41..2e22fd1db3291 100644 --- a/sys/dev/en/midway.c +++ b/sys/dev/en/midway.c @@ -1278,8 +1278,8 @@ caddr_t data; break; if ((shadow = pvc_attach(ifp)) != NULL) { - snprintf(ifr->ifr_name, sizeof(ifr->ifr_name), - "%s%d", shadow->if_name, shadow->if_unit); + sprintf(ifr->ifr_name, "%s%d", + shadow->if_name, shadow->if_unit); } else error = ENOBUFS; @@ -3643,8 +3643,8 @@ static int en_pvctx(sc, pvcreq) pvcreq->pvc_ifname); return (EINVAL); } - snprintf(pvcreq->pvc_ifname, sizeof(pvcreq->pvc_ifname), - "%s%d", sc->enif.if_name, sc->enif.if_unit); + sprintf(pvcreq->pvc_ifname, "%s%d", + sc->enif.if_name, sc->enif.if_unit); ATM_PH_FLAGS(&api.aph) = ATM_PH_PVCSIF | (ATM_PH_FLAGS(pvc_aph) & (ATM_PH_AAL5|ATM_PH_LLCSNAP)); diff --git a/sys/dev/fb/fb.c b/sys/dev/fb/fb.c deleted file mode 100644 index 99d15f852a373..0000000000000 --- a/sys/dev/fb/fb.c +++ /dev/null @@ -1,421 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. - * - * $Id: fb.c,v 1.2 1999/01/12 10:35:50 yokota Exp $ - */ - -#include "fb.h" -#include "opt_fb.h" - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/conf.h> -#include <sys/kernel.h> -#include <sys/malloc.h> - -#include <machine/console.h> - -#include <dev/fb/fbreg.h> - -/* local arrays */ - -/* - * We need at least one entry each in order to initialize a video card - * for the kernel console. The arrays will be increased dynamically - * when necessary. - */ - -static int adapters = 1; -static video_adapter_t *adp_ini; -static video_adapter_t **adapter = &adp_ini; -static video_switch_t *vidsw_ini; - video_switch_t **vidsw = &vidsw_ini; - -#ifdef FB_INSTALL_CDEV - -#define ARRAY_DELTA 4 - -static struct cdevsw *vidcdevsw_ini; -static struct cdevsw **vidcdevsw = &vidcdevsw_ini; - -static void -vid_realloc_array(void) -{ - video_adapter_t **new_adp; - video_switch_t **new_vidsw; - struct cdevsw **new_cdevsw; - int newsize; - int s; - - s = spltty(); - newsize = ((adapters + ARRAY_DELTA)/ARRAY_DELTA)*ARRAY_DELTA; - new_adp = malloc(sizeof(*new_adp)*newsize, M_DEVBUF, M_WAITOK); - new_vidsw = malloc(sizeof(*new_vidsw)*newsize, M_DEVBUF, M_WAITOK); - new_cdevsw = malloc(sizeof(*new_cdevsw)*newsize, M_DEVBUF, M_WAITOK); - bzero(new_adp, sizeof(*new_adp)*newsize); - bzero(new_vidsw, sizeof(*new_vidsw)*newsize); - bzero(new_cdevsw, sizeof(*new_cdevsw)*newsize); - bcopy(adapter, new_adp, sizeof(*adapter)*adapters); - bcopy(vidsw, new_vidsw, sizeof(*vidsw)*adapters); - bcopy(vidcdevsw, new_cdevsw, sizeof(*vidcdevsw)*adapters); - if (adapters > 1) { - free(adapter, M_DEVBUF); - free(vidsw, M_DEVBUF); - free(vidcdevsw, M_DEVBUF); - } - adapter = new_adp; - vidsw = new_vidsw; - vidcdevsw = new_cdevsw; - adapters = newsize; - splx(s); - - if (bootverbose) - printf("fb: new array size %d\n", adapters); -} - -#endif /* FB_INSTALL_CDEV */ - -/* - * Low-level frame buffer driver functions - * frame buffer subdrivers, such as the VGA driver, call these functions - * to initialize the video_adapter structure and register it to the virtual - * frame buffer driver `fb'. - */ - -/* initialize the video_adapter_t structure */ -void -vid_init_struct(video_adapter_t *adp, char *name, int type, int unit) -{ - adp->va_flags = 0; - adp->va_name = name; - adp->va_type = type; - adp->va_unit = unit; -} - -/* Register a video adapter */ -int -vid_register(video_adapter_t *adp) -{ - video_driver_t **list; - video_driver_t *p; - int index; - - for (index = 0; index < adapters; ++index) { - if (adapter[index] == NULL) - break; - } - if (index >= adapters) - return -1; - - adp->va_index = index; - adp->va_token = NULL; - list = (video_driver_t **)videodriver_set.ls_items; - while ((p = *list++) != NULL) { - if (strcmp(p->name, adp->va_name) == 0) { - adapter[index] = adp; - vidsw[index] = p->vidsw; - return index; - } - } - - return -1; -} - -int -vid_unregister(video_adapter_t *adp) -{ - if ((adp->va_index < 0) || (adp->va_index >= adapters)) - return ENOENT; - if (adapter[adp->va_index] != adp) - return ENOENT; - - adapter[adp->va_index] = NULL; - vidsw[adp->va_index] = NULL; - return 0; -} - -/* Get video I/O function table */ -video_switch_t -*vid_get_switch(char *name) -{ - video_driver_t **list; - video_driver_t *p; - - list = (video_driver_t **)videodriver_set.ls_items; - while ((p = *list++) != NULL) { - if (strcmp(p->name, name) == 0) - return p->vidsw; - } - - return NULL; -} - -/* - * Video card client functions - * Video card clients, such as the console driver `syscons' and the frame - * buffer cdev driver, use these functions to claim and release a card for - * exclusive use. - */ - -/* find the video card specified by a driver name and a unit number */ -int -vid_find_adapter(char *driver, int unit) -{ - int i; - - for (i = 0; i < adapters; ++i) { - if (adapter[i] == NULL) - continue; - if (strcmp("*", driver) && strcmp(adapter[i]->va_name, driver)) - continue; - if ((unit != -1) && (adapter[i]->va_unit != unit)) - continue; - return i; - } - return -1; -} - -/* allocate a video card */ -int -vid_allocate(char *driver, int unit, void *id) -{ - int index; - int s; - - s = spltty(); - index = vid_find_adapter(driver, unit); - if (index >= 0) { - if (adapter[index]->va_token) { - splx(s); - return -1; - } - adapter[index]->va_token = id; - } - splx(s); - return index; -} - -int -vid_release(video_adapter_t *adp, void *id) -{ - int error; - int s; - - s = spltty(); - if (adp->va_token == NULL) { - error = EINVAL; - } else if (adp->va_token != id) { - error = EPERM; - } else { - adp->va_token = NULL; - error = 0; - } - splx(s); - return error; -} - -/* Get a video adapter structure */ -video_adapter_t -*vid_get_adapter(int index) -{ - if ((index < 0) || (index >= adapters)) - return NULL; - return adapter[index]; -} - -/* Configure drivers: this is a backdoor for the console driver XXX */ -int -vid_configure(int flags) -{ - video_driver_t **list; - video_driver_t *p; - - list = (video_driver_t **)videodriver_set.ls_items; - while ((p = *list++) != NULL) { - if (p->configure != NULL) - (*p->configure)(flags); - } - - return 0; -} - -/* - * Virtual frame buffer cdev driver functions - * The virtual frame buffer driver dispatches driver functions to - * appropriate subdrivers. - */ - -#define DRIVER_NAME "fb" - -#ifdef FB_INSTALL_CDEV - -#define FB_UNIT(dev) minor(dev) -#define FB_MKMINOR(unit) (u) - -#if notyet - -static d_open_t fbopen; -static d_close_t fbclose; -static d_ioctl_t fbioctl; -static d_mmap_t fbmmap; - -#define CDEV_MAJOR 141 /* XXX */ - -static struct cdevsw fb_cdevsw = { - fbopen, fbclose, noread, nowrite, /* ??? */ - fbioctl, nostop, nullreset, nodevtotty, - seltrue, fbmmap, NULL, DRIVER_NAME, - NULL, -1, nodump, nopsize, -}; - -static void -vfbattach(void *arg) -{ - static int fb_devsw_installed = FALSE; - dev_t dev; - - if (!fb_devsw_installed) { - dev = makedev(CDEV_MAJOR, 0); - cdevsw_add(&dev, &fb_cdevsw, NULL); - fb_devsw_installed = TRUE; - } -} - -PSEUDO_SET(vfbattach, fb); - -#endif /* notyet */ - -int -fb_attach(dev_t dev, video_adapter *adp, struct cdevsw *cdevsw) -{ - int s; - - if (adp->va_index >= adapters) - return EINVAL; - if (adapter[adp->va_index] != adp) - return EINVAL; - - s = spltty(); - adp->va_minor = minor(dev); - vidcdevsw[adp->va_index] = cdevsw; - splx(s); - - /* XXX: DEVFS? */ - - if (adp->va_index + 1 >= adapters) - vid_realloc_array(); - - printf("fb%d at %s%d\n", adp->va_index, adp->va_name, adp->va_unit); - return 0; -} - -int -fb_detach(dev_t dev, video_adapter *adp, struct cdevsw *cdevsw) -{ - int s; - - if (adp->va_index >= adapters) - return EINVAL; - if (adapter[adp->va_index] != adp) - return EINVAL; - if (vidcdevsw[adp->va_index] != cdevsw) - return EINVAL; - - s = spltty(); - vidcdevsw[adp->va_index] = NULL; - splx(s); - return 0; -} - -#endif /* FB_INSTALL_CDEV */ - -static char -*adapter_name(int type) -{ - static struct { - int type; - char *name; - } names[] = { - { KD_MONO, "MDA" }, - { KD_HERCULES, "Hercules" }, - { KD_CGA, "CGA" }, - { KD_EGA, "EGA" }, - { KD_VGA, "VGA" }, - { KD_PC98, "PC-98x1" }, - { -1, "Unknown" }, - }; - int i; - - for (i = 0; names[i].type != -1; ++i) - if (names[i].type == type) - break; - return names[i].name; -} - -void -fb_dump_adp_info(char *driver, video_adapter_t *adp, int level) -{ - if (level <= 0) - return; - - printf("%s%d: %s%d, %s, type:%s (%d), flags:0x%x\n", - DRIVER_NAME, adp->va_index, driver, adp->va_unit, adp->va_name, - adapter_name(adp->va_type), adp->va_type, adp->va_flags); - printf("%s%d: port:0x%x-0x%x, crtc:0x%x, mem:0x%x 0x%x\n", - DRIVER_NAME, adp->va_index, - adp->va_io_base, adp->va_io_base + adp->va_io_size - 1, - adp->va_crtc_addr, adp->va_mem_base, adp->va_mem_size); - printf("%s%d: init mode:%d, bios mode:%d, current mode:%d\n", - DRIVER_NAME, adp->va_index, - adp->va_initial_mode, adp->va_initial_bios_mode, adp->va_mode); - printf("%s%d: window:0x%x size:%dk gran:%dk, buf:0x%x size:%dk\n", - DRIVER_NAME, adp->va_index, - adp->va_window, (int)adp->va_window_size/1024, - (int)adp->va_window_gran/1024, adp->va_buffer, - (int)adp->va_buffer_size/1024); -} - -void -fb_dump_mode_info(char *driver, video_adapter_t *adp, video_info_t *info, - int level) -{ - if (level <= 0) - return; - - printf("%s%d: %s, mode:%d, flags:0x%x ", - driver, adp->va_unit, adp->va_name, info->vi_mode, info->vi_flags); - if (info->vi_flags & V_INFO_GRAPHICS) - printf("G %dx%dx%d, %d plane(s), font:%dx%d, ", - info->vi_width, info->vi_height, - info->vi_depth, info->vi_planes, - info->vi_cwidth, info->vi_cheight); - else - printf("T %dx%d, font:%dx%d, ", - info->vi_width, info->vi_height, - info->vi_cwidth, info->vi_cheight); - printf("win:0x%x\n", info->vi_window); -} diff --git a/sys/dev/fb/fbreg.h b/sys/dev/fb/fbreg.h deleted file mode 100644 index 46f0343d0edd1..0000000000000 --- a/sys/dev/fb/fbreg.h +++ /dev/null @@ -1,154 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id: fbreg.h,v 1.1 1999/01/09 02:44:49 yokota Exp $ - */ - -#ifndef _DEV_FB_FBREG_H_ -#define _DEV_FB_FBREG_H_ - -#ifdef KERNEL - -#define V_MAX_ADAPTERS 8 /* XXX */ - -/* some macros */ -#ifdef __i386__ -#define bcopy_toio(s, d, c) generic_bcopy((void *)(s), (void *)(d), c) -#define bcopy_fromio(s, d, c) generic_bcopy((void *)(s), (void *)(d), c) -#define bzero_io(d, c) generic_bzero((void *)(d), c) -void generic_bcopy(const void *s, void *d, size_t c); -void generic_bzero(void *d, size_t c); -#else /* !__i386__ */ -#define bcopy_toio(s, d, c) memcpy_toio(d, s, c) -#define bcopy_fromio(s, d, c) memcpy_fromio(d, s, c) -#define bzero_io(d, c) memset_io(d, 0, c) -#endif /* !__i386__ */ - -/* video function table */ -typedef int vi_probe_t(int unit, video_adapter_t **adpp, void *arg, int flags); -typedef int vi_init_t(int unit, video_adapter_t *adp, int flags); -typedef int vi_get_info_t(video_adapter_t *adp, int mode, video_info_t *info); -typedef int vi_query_mode_t(video_adapter_t *adp, video_info_t *info); -typedef int vi_set_mode_t(video_adapter_t *adp, int mode); -typedef int vi_save_font_t(video_adapter_t *adp, int page, int size, - u_char *data, int c, int count); -typedef int vi_load_font_t(video_adapter_t *adp, int page, int size, - u_char *data, int c, int count); -typedef int vi_show_font_t(video_adapter_t *adp, int page); -typedef int vi_save_palette_t(video_adapter_t *adp, u_char *palette); -typedef int vi_load_palette_t(video_adapter_t *adp, u_char *palette); -typedef int vi_set_border_t(video_adapter_t *adp, int border); -typedef int vi_save_state_t(video_adapter_t *adp, void *p, size_t size); -typedef int vi_load_state_t(video_adapter_t *adp, void *p); -typedef int vi_set_win_org_t(video_adapter_t *adp, off_t offset); -typedef int vi_read_hw_cursor_t(video_adapter_t *adp, int *col, int *row); -typedef int vi_set_hw_cursor_t(video_adapter_t *adp, int col, int row); -typedef int vi_set_hw_cursor_shape_t(video_adapter_t *adp, int base, - int height, int celsize, int blink); -typedef int vi_blank_display_t(video_adapter_t *adp, int mode); -#define V_DISPLAY_POWER_ON 0 -#define V_DISPLAY_SUSPEND 1 -#define V_DISPLAY_SUSPEND1 1 -#define V_DISPLAY_SUSPEND2 2 -#define V_DISPLAY_POWER_OFF 3 -typedef int vi_mmap_t(video_adapter_t *adp, vm_offset_t offset); -typedef int vi_diag_t(video_adapter_t *adp, int level); - -typedef struct video_switch { - vi_probe_t *probe; - vi_init_t *init; - vi_get_info_t *get_info; - vi_query_mode_t *query_mode; - vi_set_mode_t *set_mode; - vi_save_font_t *save_font; - vi_load_font_t *load_font; - vi_show_font_t *show_font; - vi_save_palette_t *save_palette; - vi_load_palette_t *load_palette; - vi_set_border_t *set_border; - vi_save_state_t *save_state; - vi_load_state_t *load_state; - vi_set_win_org_t *set_win_org; - vi_read_hw_cursor_t *read_hw_cursor; - vi_set_hw_cursor_t *set_hw_cursor; - vi_set_hw_cursor_shape_t *set_hw_cursor_shape; - vi_blank_display_t *blank_display; - vi_mmap_t *mmap; - vi_diag_t *diag; -} video_switch_t; - -/* video driver */ -typedef struct video_driver { - char *name; - video_switch_t *vidsw; - int (*configure)(int); /* backdoor for the console driver */ -} video_driver_t; - -#define VIDEO_DRIVER(name, sw, config) \ - static struct video_driver name##_driver = { \ - #name, &sw, config \ - }; \ - DATA_SET(videodriver_set, name##_driver); - -/* global variables */ -extern struct video_switch **vidsw; -extern struct linker_set videodriver_set; - -/* functions for the video card driver */ -int vid_register(video_adapter_t *adp); -int vid_unregister(video_adapter_t *adp); -video_switch_t *vid_get_switch(char *name); -void vid_init_struct(video_adapter_t *adp, char *name, int type, - int unit); - -/* functions for the video card client */ -int vid_allocate(char *driver, int unit, void *id); -int vid_release(video_adapter_t *adp, void *id); -int vid_find_adapter(char *driver, int unit); -video_adapter_t *vid_get_adapter(int index); - -/* a backdoor for the console driver to tickle the video driver XXX */ -int vid_configure(int flags); -#define VIO_PROBE_ONLY (1 << 0) /* probe only, don't initialize */ - -#ifdef FB_INSTALL_CDEV - -/* virtual frame buffer driver functions */ -int fb_attach(dev_t dev, video_adapter_t *adp, - struct cdevsw *cdevsw); -int fb_detach(dev_t dev, video_adapter_t *adp, - struct cdevsw *cdevsw); - -#endif /* FB_INSTALL_CDEV */ - -/* generic low-level driver functions */ - -void fb_dump_adp_info(char *driver, video_adapter_t *adp, int level); -void fb_dump_mode_info(char *driver, video_adapter_t *adp, - video_info_t *info, int level); - -#endif /* KERNEL */ - -#endif /* !_DEV_FB_FBREG_H_ */ diff --git a/sys/dev/fb/splash.c b/sys/dev/fb/splash.c deleted file mode 100644 index 1f3281e361a3c..0000000000000 --- a/sys/dev/fb/splash.c +++ /dev/null @@ -1,208 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id: splash.c,v 1.1 1999/01/09 02:44:49 yokota Exp $ - */ - -#include "splash.h" - -#if NSPLASH > 0 - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/linker.h> - -#include <machine/console.h> - -#include <dev/fb/fbreg.h> -#include <dev/fb/splashreg.h> - -/* video adapter and image decoder */ -static video_adapter_t *splash_adp; -static splash_decoder_t *splash_decoder; - -/* decoder candidates */ -static int decoders; -static splash_decoder_t **decoder_set; -#define DECODER_ARRAY_DELTA 4 - -/* console driver callback */ -static int (*splash_callback)(int); - -static int -splash_find_data(splash_decoder_t *decoder) -{ - caddr_t image_module; - caddr_t p; - - if (decoder->data_type == NULL) - return 0; - image_module = preload_search_by_type(decoder->data_type); - if (image_module == NULL) - return ENOENT; - p = preload_search_info(image_module, MODINFO_ADDR); - if (p == NULL) - return ENOENT; - decoder->data = *(void **)p; - p = preload_search_info(image_module, MODINFO_SIZE); - if (p == NULL) - return ENOENT; - decoder->data_size = *(size_t *)p; - if (bootverbose) - printf("splash: image@%p, size:%u\n", - decoder->data, decoder->data_size); - return 0; -} - -static int -splash_test(splash_decoder_t *decoder) -{ - if (splash_find_data(decoder)) - return ENOENT; /* XXX */ - if ((*decoder->init)(splash_adp)) { - decoder->data = NULL; - decoder->data_size = 0; - return ENODEV; /* XXX */ - } - if (bootverbose) - printf("splash: image decoder found: %s\n", decoder->name); - return 0; -} - -static void -splash_new(splash_decoder_t *decoder) -{ - splash_decoder = decoder; - if (splash_callback != NULL) - (*splash_callback)(SPLASH_INIT); -} - -int -splash_register(splash_decoder_t *decoder) -{ - splash_decoder_t **p; - int error; - int i; - - if (splash_adp != NULL) { - /* - * If the video card has aleady been initialized, test - * this decoder immediately. - */ - error = splash_test(decoder); - if (error == 0) { - /* replace the current decoder with new one */ - if (splash_decoder != NULL) - error = splash_term(splash_adp); - if (error == 0) - splash_new(decoder); - } - return error; - } else { - /* register the decoder for later use */ - for (i = 0; i < decoders; ++i) { - if (decoder_set[i] == NULL) - break; - } - if ((i >= decoders) && (decoders % DECODER_ARRAY_DELTA) == 0) { - p = malloc(sizeof(*p)*(decoders + DECODER_ARRAY_DELTA), - M_DEVBUF, M_NOWAIT); - if (p == NULL) - return ENOMEM; - if (decoder_set != NULL) - bcopy(decoder_set, p, sizeof(*p)*decoders); - free(decoder_set, M_DEVBUF); - decoder_set = p; - i = decoders++; - } - decoder_set[i] = decoder; - } - - return 0; -} - -int -splash_unregister(splash_decoder_t *decoder) -{ - int error; - - if (splash_decoder == decoder) { - if ((error = splash_term(splash_adp)) != 0) - return error; - } - return 0; -} - -int -splash_init(video_adapter_t *adp, int (*callback)(int)) -{ - int i; - - splash_adp = adp; - splash_callback = callback; - - splash_decoder = NULL; - for (i = 0; i < decoders; ++i) { - if (decoder_set[i] == NULL) - continue; - if (splash_test(decoder_set[i]) == 0) { - splash_new(decoder_set[i]); - break; - } - decoder_set[i] = NULL; - } - for (++i; i < decoders; ++i) { - decoder_set[i] = NULL; - } - return 0; -} - -int -splash_term(video_adapter_t *adp) -{ - int error = 0; - - if (splash_decoder != NULL) { - if (splash_callback != NULL) - error = (*splash_callback)(SPLASH_TERM); - if (error == 0) - error = (*splash_decoder->term)(adp); - if (error == 0) - splash_decoder = NULL; - } - return error; -} - -int -splash(video_adapter_t *adp, int on) -{ - if (splash_decoder != NULL) - return (*splash_decoder->splash)(adp, on); - return ENODEV; -} - -#endif /* NSPLASH > 0 */ diff --git a/sys/dev/fb/splashreg.h b/sys/dev/fb/splashreg.h deleted file mode 100644 index fb785346202d3..0000000000000 --- a/sys/dev/fb/splashreg.h +++ /dev/null @@ -1,102 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id: splashreg.h,v 1.1 1999/01/09 02:44:49 yokota Exp $ - */ - -#ifndef _DEV_FB_SPLASHREG_H_ -#define _DEV_FB_SPLASHREG_H_ - -#define SPLASH_IMAGE "splash_image_data" - -struct video_adapter; - -struct image_decoder { - char *name; - int (*init)(struct video_adapter *adp); - int (*term)(struct video_adapter *adp); - int (*splash)(struct video_adapter *adp, int on); - char *data_type; - void *data; - size_t data_size; -}; - -typedef struct image_decoder splash_decoder_t; -typedef struct image_decoder scrn_saver_t; - -#define SPLASH_DECODER(name, sw) \ - static int name##_modevent(module_t mod, int type, void *data) \ - { \ - switch ((modeventtype_t)type) { \ - case MOD_LOAD: \ - return splash_register(&sw); \ - case MOD_UNLOAD: \ - return splash_unregister(&sw); \ - default: \ - break; \ - } \ - return 0; \ - } \ - static moduledata_t name##_mod = { \ - #name, \ - name##_modevent, \ - NULL \ - }; \ - DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) - -#define SAVER_MODULE(name, sw) \ - static int name##_modevent(module_t mod, int type, void *data) \ - { \ - switch ((modeventtype_t)type) { \ - case MOD_LOAD: \ - return splash_register(&sw); \ - case MOD_UNLOAD: \ - return splash_unregister(&sw); \ - default: \ - break; \ - } \ - return 0; \ - } \ - static moduledata_t name##_mod = { \ - #name, \ - name##_modevent, \ - NULL \ - }; \ - DECLARE_MODULE(name, name##_mod, SI_SUB_PSEUDO, SI_ORDER_MIDDLE) - -/* entry point for the splash image decoder */ -int splash_register(splash_decoder_t *decoder); -int splash_unregister(splash_decoder_t *decoder); - -/* entry points for the console driver */ -int splash_init(video_adapter_t *adp, int (*callback)(int)); -int splash_term(video_adapter_t *adp); -int splash(video_adapter_t *adp, int on); - -/* event types for the callback function */ -#define SPLASH_INIT 0 -#define SPLASH_TERM 1 - -#endif /* _DEV_FB_SPLASHREG_H_ */ diff --git a/sys/dev/fb/vgareg.h b/sys/dev/fb/vgareg.h deleted file mode 100644 index 841408e898799..0000000000000 --- a/sys/dev/fb/vgareg.h +++ /dev/null @@ -1,67 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id:$ - */ - -#ifndef _DEV_FB_VGAREG_H_ -#define _DEV_FB_VGAREG_H_ - -/* physical addresses */ -#define MDA_BUF_BASE 0xb0000 -#define MDA_BUF_SIZE 0x08000 -#define MDA_BUF BIOS_PADDRTOVADDR(MDA_BUF_BASE) -#define CGA_BUF_BASE 0xb8000 -#define CGA_BUF_SIZE 0x08000 -#define CGA_BUF BIOS_PADDRTOVADDR(CGA_BUF_BASE) -#define EGA_BUF_BASE 0xa0000 -#define EGA_BUF_SIZE 0x20000 -#define EGA_BUF BIOS_PADDRTOVADDR(EGA_BUF_BASE) -#define GRAPHICS_BUF_BASE 0xa0000 -#define GRAPHICS_BUF_SIZE 0x10000 -#define GRAPHICS_BUF BIOS_PADDRTOVADDR(GRAPHICS_BUF_BASE) -#define FONT_BUF BIOS_PADDRTOVADDR(GRAPHICS_BUF_BASE) -#define VIDEO_BUF_BASE 0xa0000 -#define VIDEO_BUF_SIZE 0x20000 - -/* I/O port addresses */ -#define MONO_CRTC (IO_MDA + 0x04) /* crt controller base mono */ -#define COLOR_CRTC (IO_CGA + 0x04) /* crt controller base color */ -#define MISC (IO_VGA + 0x02) /* misc output register */ -#define ATC (IO_VGA + 0x00) /* attribute controller */ -#define TSIDX (IO_VGA + 0x04) /* timing sequencer idx */ -#define TSREG (IO_VGA + 0x05) /* timing sequencer data */ -#define PIXMASK (IO_VGA + 0x06) /* pixel write mask */ -#define PALRADR (IO_VGA + 0x07) /* palette read address */ -#define PALWADR (IO_VGA + 0x08) /* palette write address */ -#define PALDATA (IO_VGA + 0x09) /* palette data register */ -#define GDCIDX (IO_VGA + 0x0E) /* graph data controller idx */ -#define GDCREG (IO_VGA + 0x0F) /* graph data controller data */ - -#ifdef KERNEL -extern int (*vga_sub_configure)(int flags); -#endif - -#endif /* _DEV_FB_VGAREG_H_ */ diff --git a/sys/dev/hea/eni.c b/sys/dev/hea/eni.c index 8c3e0604c1ac1..977ed9bf2060a 100644 --- a/sys/dev/hea/eni.c +++ b/sys/dev/hea/eni.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni.c,v 1.4 1998/12/04 22:54:45 archie Exp $ + * @(#) $Id: eni.c,v 1.1 1998/09/15 08:22:52 phk Exp $ * */ @@ -35,20 +35,20 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni.c,v 1.1 1998/09/15 08:22:52 phk Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni.c,v 1.4 1998/12/04 22:54:45 archie Exp $"); -#endif - /* * Typedef local functions */ -static const char *eni_pci_probe __P((pcici_t, pcidi_t)); +static char *eni_pci_probe __P((pcici_t, pcidi_t)); static void eni_pci_attach __P((pcici_t, int)); static int eni_get_ack __P((Eni_unit *)); static int eni_get_sebyte __P((Eni_unit *)); @@ -98,7 +98,7 @@ DATA_SET ( pcidevice_set, eni_pci_device ); * NULL unrecognized vendor/device * */ -static const char * +static char * eni_pci_probe ( pcici_t config_id, pcidi_t device_id ) { @@ -496,12 +496,10 @@ eni_pci_attach ( pcici_t config_id, int unit ) * Make a hw version number from the ID register values. * Format: {Midway ID}.{Mother board ID}.{Daughter board ID} */ - snprintf ( eup->eu_config.ac_hard_vers, - sizeof ( eup->eu_config.ac_hard_vers ), - "%ld/%ld/%ld", - (val >> ID_SHIFT) & ID_MASK, + sprintf ( eup->eu_config.ac_hard_vers, "%ld/%ld/%ld", + (val >> ID_SHIFT) & ID_MASK, (val >> MID_SHIFT) & MID_MASK, - (val >> DID_SHIFT) & DID_MASK ); + (val >> DID_SHIFT) & DID_MASK ); /* * There is no software version number diff --git a/sys/dev/hea/eni_buffer.c b/sys/dev/hea/eni_buffer.c index 71d2eb9128caa..35d1b13ae4f88 100644 --- a/sys/dev/hea/eni_buffer.c +++ b/sys/dev/hea/eni_buffer.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_buffer.c,v 1.1 1998/09/15 08:22:53 phk Exp $ + * @(#) $Id: eni_buffer.c,v 1.8 1998/08/26 23:28:53 mks Exp $ * */ @@ -35,16 +35,16 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_buffer.c,v 1.8 1998/08/26 23:28:53 mks Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_buffer.c,v 1.1 1998/09/15 08:22:53 phk Exp $"); -#endif - static int eni_test_memory __P((Eni_unit *)); /* diff --git a/sys/dev/hea/eni_globals.c b/sys/dev/hea/eni_globals.c index 71253e27a8232..a2a51fa834093 100644 --- a/sys/dev/hea/eni_globals.c +++ b/sys/dev/hea/eni_globals.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_globals.c,v 1.1 1998/09/15 08:22:53 phk Exp $ + * @(#) $Id: eni_globals.c,v 1.2 1997/05/06 22:07:52 mks Exp $ * */ @@ -35,16 +35,16 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_globals.c,v 1.2 1997/05/06 22:07:52 mks Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_globals.c,v 1.1 1998/09/15 08:22:53 phk Exp $"); -#endif - /* * Device unit table */ diff --git a/sys/dev/hea/eni_if.c b/sys/dev/hea/eni_if.c index 49f5e09516cdc..41ffd485b3f13 100644 --- a/sys/dev/hea/eni_if.c +++ b/sys/dev/hea/eni_if.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_if.c,v 1.2 1998/10/31 20:06:45 phk Exp $ + * @(#) $Id: eni_if.c,v 1.6 1998/08/26 23:28:53 mks Exp $ * */ @@ -35,6 +35,10 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_if.c,v 1.6 1998/08/26 23:28:53 mks Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> @@ -42,10 +46,6 @@ #include <dev/hea/eni_suni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_if.c,v 1.2 1998/10/31 20:06:45 phk Exp $"); -#endif - static void eni_get_stats __P((Eni_unit *)); /* @@ -194,8 +194,7 @@ eni_atm_ioctl ( code, data, arg ) */ if ( eup == NULL ) return ( ENXIO ); - snprintf ( ifname, sizeof(ifname), - "%s%d", pip->pif_name, pip->pif_unit ); + sprintf ( ifname, "%s%d", pip->pif_name, pip->pif_unit ); /* * Cast response structure onto user's buffer diff --git a/sys/dev/hea/eni_init.c b/sys/dev/hea/eni_init.c index 5706c65adb32b..d8106ab0e763e 100644 --- a/sys/dev/hea/eni_init.c +++ b/sys/dev/hea/eni_init.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_init.c,v 1.1 1998/09/15 08:22:53 phk Exp $ + * @(#) $Id: eni_init.c,v 1.6 1998/08/26 23:28:53 mks Exp $ * */ @@ -35,16 +35,16 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_init.c,v 1.6 1998/08/26 23:28:53 mks Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_init.c,v 1.1 1998/09/15 08:22:53 phk Exp $"); -#endif - /* * Initialize adapter for PDU processing * diff --git a/sys/dev/hea/eni_intr.c b/sys/dev/hea/eni_intr.c index ccc0d6bbc5475..44a6790eb88d9 100644 --- a/sys/dev/hea/eni_intr.c +++ b/sys/dev/hea/eni_intr.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_intr.c,v 1.2 1998/09/17 09:34:58 phk Exp $ + * @(#) $Id: eni_intr.c,v 1.1 1998/09/15 08:22:53 phk Exp $ * */ @@ -35,6 +35,10 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_intr.c,v 1.1 1998/09/15 08:22:53 phk Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> @@ -42,10 +46,6 @@ #include <dev/hea/eni_suni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_intr.c,v 1.2 1998/09/17 09:34:58 phk Exp $"); -#endif - static void eni_suni_intr __P((Eni_unit *)); /* diff --git a/sys/dev/hea/eni_receive.c b/sys/dev/hea/eni_receive.c index 8e8be36d6577b..94ce8c48a2217 100644 --- a/sys/dev/hea/eni_receive.c +++ b/sys/dev/hea/eni_receive.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_receive.c,v 1.2 1998/09/17 09:34:58 phk Exp $ + * @(#) $Id: eni_receive.c,v 1.1 1998/09/15 08:22:53 phk Exp $ * */ @@ -35,16 +35,16 @@ * */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_receive.c,v 1.1 1998/09/15 08:22:53 phk Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_receive.c,v 1.2 1998/09/17 09:34:58 phk Exp $"); -#endif - static void eni_recv_stack __P((void *, KBuffer *)); #ifdef DIAGNOSTIC diff --git a/sys/dev/hea/eni_transmit.c b/sys/dev/hea/eni_transmit.c index 2721709a8fd6a..25066dfb6060f 100644 --- a/sys/dev/hea/eni_transmit.c +++ b/sys/dev/hea/eni_transmit.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_transmit.c,v 1.2 1998/10/18 11:58:57 phk Exp $ + * @(#) $Id: eni_transmit.c,v 1.20 1998/07/17 20:20:16 root Exp $ * */ @@ -36,16 +36,16 @@ */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_transmit.c,v 1.20 1998/07/17 20:20:16 root Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_transmit.c,v 1.2 1998/10/18 11:58:57 phk Exp $"); -#endif - /* * Make a variable which controls printing of PDUs * as they travel through the driver. @@ -467,7 +467,7 @@ retry: /* * Gotta slide the data up */ - eup->eu_stats.eni_st_drv.drv_xm_segnoal++; + eup->eu_stats.eni_st_drv.drv_xm_segnoal; bfr = cp - align; KM_COPY ( cp, bfr, KB_LEN ( m ) ); KB_HEADMOVE ( m, -align ); diff --git a/sys/dev/hea/eni_vcm.c b/sys/dev/hea/eni_vcm.c index a88fc01bc67ad..36c2a3dbcec53 100644 --- a/sys/dev/hea/eni_vcm.c +++ b/sys/dev/hea/eni_vcm.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: eni_vcm.c,v 1.1 1998/09/15 08:22:54 phk Exp $ + * @(#) $Id: eni_vcm.c,v 1.8 1998/06/29 23:03:18 mks Exp $ * */ @@ -36,16 +36,16 @@ */ +#ifndef lint +static char *RCSid = "@(#) $Id: eni_vcm.c,v 1.8 1998/06/29 23:03:18 mks Exp $"; +#endif + #include <netatm/kern_include.h> #include <dev/hea/eni_stats.h> #include <dev/hea/eni.h> #include <dev/hea/eni_var.h> -#ifndef lint -__RCSID("@(#) $Id: eni_vcm.c,v 1.1 1998/09/15 08:22:54 phk Exp $"); -#endif - /* * VCC Stack Instantiation diff --git a/sys/dev/hfa/fore_buffer.c b/sys/dev/hfa/fore_buffer.c index 6952f01cc23d9..d8bdce48c6d1c 100644 --- a/sys/dev/hfa/fore_buffer.c +++ b/sys/dev/hfa/fore_buffer.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_buffer.c,v 1.1 1998/09/15 08:22:54 phk Exp $ + * @(#) $Id: fore_buffer.c,v 1.6 1997/05/06 22:09:21 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_buffer.c,v 1.1 1998/09/15 08:22:54 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_buffer.c,v 1.6 1997/05/06 22:09:21 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local functions diff --git a/sys/dev/hfa/fore_command.c b/sys/dev/hfa/fore_command.c index d8e0e9d3cd2e9..980be432deaa8 100644 --- a/sys/dev/hfa/fore_command.c +++ b/sys/dev/hfa/fore_command.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_command.c,v 1.3 1998/10/31 20:06:52 phk Exp $ + * @(#) $Id: fore_command.c,v 1.1 1998/09/15 08:22:54 phk Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_command.c,v 1.3 1998/10/31 20:06:52 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_command.c,v 1.1 1998/09/15 08:22:54 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local variables */ @@ -341,8 +341,7 @@ fore_cmd_drain(fup) sizeof(struct mac_addr)); fup->fu_config.ac_macaddr = fup->fu_pif.pif_macaddr; - snprintf(fup->fu_config.ac_hard_vers, - sizeof(fup->fu_config.ac_hard_vers), + sprintf(fup->fu_config.ac_hard_vers, "%ld.%ld.%ld", (fp->pr_hwver >> 16) & 0xff, (fp->pr_hwver >> 8) & 0xff, diff --git a/sys/dev/hfa/fore_globals.c b/sys/dev/hfa/fore_globals.c index 5dc803a954172..4abc5fa437c30 100644 --- a/sys/dev/hfa/fore_globals.c +++ b/sys/dev/hfa/fore_globals.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_globals.c,v 1.1 1998/09/15 08:22:55 phk Exp $ + * @(#) $Id: fore_globals.c,v 1.6 1997/05/06 22:09:31 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_globals.c,v 1.1 1998/09/15 08:22:55 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_globals.c,v 1.6 1997/05/06 22:09:31 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Supported device models diff --git a/sys/dev/hfa/fore_if.c b/sys/dev/hfa/fore_if.c index 479e7e672f816..7d3b3b6dff5f1 100644 --- a/sys/dev/hfa/fore_if.c +++ b/sys/dev/hfa/fore_if.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_if.c,v 1.2 1998/10/31 20:06:52 phk Exp $ + * @(#) $Id: fore_if.c,v 1.6 1998/08/26 23:28:58 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_if.c,v 1.2 1998/10/31 20:06:52 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_if.c,v 1.6 1998/08/26 23:28:58 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Handle netatm core service interface ioctl requests @@ -85,8 +85,7 @@ fore_atm_ioctl(code, data, arg) fup = (Fore_unit *)pip; if ( pip == NULL ) return ( ENXIO ); - snprintf ( ifname, sizeof(ifname), - "%s%d", pip->pif_name, pip->pif_unit ); + sprintf ( ifname, "%s%d", pip->pif_name, pip->pif_unit ); /* * Cast response structure onto user's buffer diff --git a/sys/dev/hfa/fore_init.c b/sys/dev/hfa/fore_init.c index 7c1ee96dd9055..d82a8f8f7a1d6 100644 --- a/sys/dev/hfa/fore_init.c +++ b/sys/dev/hfa/fore_init.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_init.c,v 1.3 1998/10/31 20:06:53 phk Exp $ + * @(#) $Id: fore_init.c,v 1.1 1998/09/15 08:22:55 phk Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_init.c,v 1.3 1998/10/31 20:06:53 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_init.c,v 1.1 1998/09/15 08:22:55 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local functions @@ -122,8 +122,7 @@ fore_initialize(fup) errmsg = "unsupported microcode version"; goto failed; } - snprintf(fup->fu_config.ac_firm_vers, - sizeof(fup->fu_config.ac_firm_vers), "%ld.%ld.%ld", + sprintf(fup->fu_config.ac_firm_vers, "%ld.%ld.%ld", (vers >> 16) & 0xff, (vers >> 8) & 0xff, vers & 0xff); #ifdef notdef diff --git a/sys/dev/hfa/fore_intr.c b/sys/dev/hfa/fore_intr.c index 6fba5f224a7c3..f295b6267e393 100644 --- a/sys/dev/hfa/fore_intr.c +++ b/sys/dev/hfa/fore_intr.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_intr.c,v 1.1 1998/09/15 08:22:55 phk Exp $ + * @(#) $Id: fore_intr.c,v 1.7 1997/05/06 22:09:48 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_intr.c,v 1.1 1998/09/15 08:22:55 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_intr.c,v 1.7 1997/05/06 22:09:48 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + #if defined(sun) /* * Polling interrupt routine diff --git a/sys/dev/hfa/fore_load.c b/sys/dev/hfa/fore_load.c index e41370efe5c35..251443d252471 100644 --- a/sys/dev/hfa/fore_load.c +++ b/sys/dev/hfa/fore_load.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_load.c,v 1.4 1998/12/04 22:54:45 archie Exp $ + * @(#) $Id: fore_load.c,v 1.1 1998/09/15 08:22:55 phk Exp $ * */ @@ -35,26 +35,26 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_load.c,v 1.4 1998/12/04 22:54:45 archie Exp $"); +static char *RCSid = "@(#) $Id: fore_load.c,v 1.1 1998/09/15 08:22:55 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local functions */ static int fore_start __P((void)); -#ifdef sun static int fore_stop __P((void)); static int fore_doload __P((void)); static int fore_dounload __P((void)); +#ifdef sun static int fore_identify __P((char *)); static int fore_attach __P((struct devinfo *)); #endif #ifdef __FreeBSD__ -static const char * fore_pci_probe __P((pcici_t, pcidi_t)); +static char * fore_pci_probe __P((pcici_t, pcidi_t)); static void fore_pci_attach __P((pcici_t, int)); #if BSD < 199506 static int fore_pci_shutdown __P((struct kern_devconf *, int)); @@ -156,8 +156,6 @@ fore_start() } -#ifdef sun - /* * Halt driver processing * @@ -242,6 +240,8 @@ fore_stop() return (0); } + +#ifdef sun /* * Device identify routine * @@ -726,12 +726,10 @@ fore_attach(devinfo_p) val = getprop ( devinfo_p->devi_nodeid, "hw-version", -1 ); } if (val != -1) { - snprintf(fcp->ac_hard_vers, - sizeof(fcp->ac_hard_vers), "%d.%d.%d", + sprintf(fcp->ac_hard_vers, "%d.%d.%d", (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff); } else - snprintf(fcp->ac_hard_vers, - sizeof(fcp->ac_hard_vers), "Unknown"); + sprintf(fcp->ac_hard_vers, "Unknown"); val = getprop ( devinfo_p->devi_nodeid, "serialnumber", -1 ); if ( val != -1 ) @@ -844,7 +842,7 @@ fore_attach(devinfo_p) * NULL device not claimed by this driver * */ -static const char * +static char * fore_pci_probe(config_id, device_id) pcici_t config_id; pcidi_t device_id; @@ -1145,8 +1143,8 @@ fore_unattach(fup) struct dev_info *devinfo_p = fup->fu_devinfo; struct dev_reg *dev_reg_p; struct dev_intr *dev_intr_p; - int i; #endif + int i; /* @@ -1361,7 +1359,6 @@ fore_reset(fup) ******************************************************************* */ -#ifdef sun /* * Generic module load processing * @@ -1421,6 +1418,7 @@ fore_dounload() } +#ifdef sun /* * Loadable driver description */ diff --git a/sys/dev/hfa/fore_output.c b/sys/dev/hfa/fore_output.c index d92d5a01ca481..59c82c939dc3a 100644 --- a/sys/dev/hfa/fore_output.c +++ b/sys/dev/hfa/fore_output.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_output.c,v 1.1 1998/09/15 08:22:55 phk Exp $ + * @(#) $Id: fore_output.c,v 1.7 1998/02/19 20:10:34 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_output.c,v 1.1 1998/09/15 08:22:55 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_output.c,v 1.7 1998/02/19 20:10:34 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local functions diff --git a/sys/dev/hfa/fore_receive.c b/sys/dev/hfa/fore_receive.c index 431a03f17cba8..12dfcec0d69ce 100644 --- a/sys/dev/hfa/fore_receive.c +++ b/sys/dev/hfa/fore_receive.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_receive.c,v 1.2 1998/09/17 09:34:59 phk Exp $ + * @(#) $Id: fore_receive.c,v 1.1 1998/09/15 08:22:55 phk Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_receive.c,v 1.2 1998/09/17 09:34:59 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_receive.c,v 1.1 1998/09/15 08:22:55 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Local functions diff --git a/sys/dev/hfa/fore_stats.c b/sys/dev/hfa/fore_stats.c index c1a1fab14e817..c70b09879a7a1 100644 --- a/sys/dev/hfa/fore_stats.c +++ b/sys/dev/hfa/fore_stats.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_stats.c,v 1.2 1998/09/17 09:34:59 phk Exp $ + * @(#) $Id: fore_stats.c,v 1.1 1998/09/15 08:22:55 phk Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_stats.c,v 1.2 1998/09/17 09:34:59 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_stats.c,v 1.1 1998/09/15 08:22:55 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Get device statistics from CP diff --git a/sys/dev/hfa/fore_timer.c b/sys/dev/hfa/fore_timer.c index 15cb02efbe65d..e0d0c0ee0a39a 100644 --- a/sys/dev/hfa/fore_timer.c +++ b/sys/dev/hfa/fore_timer.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_timer.c,v 1.1 1998/09/15 08:22:56 phk Exp $ + * @(#) $Id: fore_timer.c,v 1.5 1997/05/06 22:10:24 mks Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_timer.c,v 1.1 1998/09/15 08:22:56 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_timer.c,v 1.5 1997/05/06 22:10:24 mks Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Process a Fore timer tick diff --git a/sys/dev/hfa/fore_transmit.c b/sys/dev/hfa/fore_transmit.c index bced06c25e67f..744e7751c7568 100644 --- a/sys/dev/hfa/fore_transmit.c +++ b/sys/dev/hfa/fore_transmit.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_transmit.c,v 1.1 1998/09/15 08:22:56 phk Exp $ + * @(#) $Id: fore_transmit.c,v 1.8 1998/07/17 20:19:37 root Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_transmit.c,v 1.1 1998/09/15 08:22:56 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_transmit.c,v 1.8 1998/07/17 20:19:37 root Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * Allocate Transmit Queue Data Structures diff --git a/sys/dev/hfa/fore_vcm.c b/sys/dev/hfa/fore_vcm.c index 325883b31b6eb..2481d17c20bab 100644 --- a/sys/dev/hfa/fore_vcm.c +++ b/sys/dev/hfa/fore_vcm.c @@ -23,7 +23,7 @@ * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * - * @(#) $Id: fore_vcm.c,v 1.2 1998/09/17 09:34:59 phk Exp $ + * @(#) $Id: fore_vcm.c,v 1.1 1998/09/15 08:22:56 phk Exp $ * */ @@ -35,12 +35,12 @@ * */ -#include <dev/hfa/fore_include.h> - #ifndef lint -__RCSID("@(#) $Id: fore_vcm.c,v 1.2 1998/09/17 09:34:59 phk Exp $"); +static char *RCSid = "@(#) $Id: fore_vcm.c,v 1.1 1998/09/15 08:22:56 phk Exp $"; #endif +#include <dev/hfa/fore_include.h> + /* * VCC Stack Instantiation diff --git a/sys/dev/iicbus/if_ic.c b/sys/dev/iicbus/if_ic.c index 7af9db71f632f..52626e0904431 100644 --- a/sys/dev/iicbus/if_ic.c +++ b/sys/dev/iicbus/if_ic.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: if_ic.c,v 1.2 1998/10/31 11:31:07 nsouch Exp $ + * $Id: if_ic.c,v 1.1.1.11 1998/08/13 17:10:42 son Exp $ */ /* @@ -213,7 +213,7 @@ icioctl(struct ifnet *ifp, u_long cmd, caddr_t data) return ENOBUFS; } - iicbus_reset(parent, IIC_FASTEST, 0, NULL); + iicbus_reset(parent, IIC_FASTEST); ifp->if_flags |= IFF_RUNNING; } @@ -290,6 +290,7 @@ icintr (device_t dev, int event, char *ptr) int unit = device_get_unit(dev); int s, len; struct mbuf *top; + int i; s = splhigh(); diff --git a/sys/dev/iicbus/iic.c b/sys/dev/iicbus/iic.c index e41d08b8a2b77..45d551b8f5de8 100644 --- a/sys/dev/iicbus/iic.c +++ b/sys/dev/iicbus/iic.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iic.c,v 1.5 1998/12/07 21:58:16 archie Exp $ + * $Id: iic.c,v 1.2 1998/09/04 17:53:35 nsouch Exp $ * */ #include <sys/param.h> @@ -40,7 +40,6 @@ #include <dev/iicbus/iiconf.h> #include <dev/iicbus/iicbus.h> - #include <machine/iic.h> #include "iicbus_if.h" @@ -118,6 +117,8 @@ iic_probe(device_t dev) static int iic_attach(device_t dev) { + struct iic_softc *sc = (struct iic_softc *)device_get_softc(dev); + return (0); } @@ -210,16 +211,15 @@ iicioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) { device_t iicdev = IIC_DEVICE(minor(dev)); struct iic_softc *sc = IIC_SOFTC(minor(dev)); + int error; device_t parent = device_get_parent(iicdev); - struct iiccmd *s = (struct iiccmd *)data; - int error, count; if (!sc) return (EINVAL); switch (cmd) { case I2CSTART: - error = iicbus_start(parent, s->slave, 0); + error = iicbus_start(parent, sc->sc_addr); break; case I2CSTOP: @@ -227,15 +227,7 @@ iicioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) break; case I2CRSTCARD: - error = iicbus_reset(parent, 0, 0, NULL); - break; - - case I2CWRITE: - error = iicbus_write(parent, s->buf, s->count, &count, 0); - break; - - case I2CREAD: - error = iicbus_read(parent, s->buf, s->count, &count, s->last, 0); + error = iicbus_reset(parent, 0); break; default: diff --git a/sys/dev/iicbus/iicbb.c b/sys/dev/iicbus/iicbb.c deleted file mode 100644 index 81629bcf2b099..0000000000000 --- a/sys/dev/iicbus/iicbb.c +++ /dev/null @@ -1,323 +0,0 @@ -/*- - * Copyright (c) 1998 Nicolas Souchu - * 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 AUTHOR 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 AUTHOR 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. - * - * $Id: iicbb.c,v 1.1 1998/10/31 11:31:07 nsouch Exp $ - * - */ - -/* - * Generic I2C bit-banging code - * - * Example: - * - * iicbus - * / \ - * iicbb pcf - * | \ - * bti2c lpbb - * - * From Linux I2C generic interface - * (c) 1998 Gerd Knorr <kraxel@cs.tu-berlin.de> - * - * TODO: port Peter's generic bit-banging code <dufault@hda.com> - */ - -#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/systm.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/conf.h> -#include <sys/buf.h> -#include <sys/uio.h> -#include <sys/malloc.h> - -#include <machine/clock.h> - -#include <dev/iicbus/iiconf.h> -#include <dev/iicbus/iicbus.h> - -#include <dev/smbus/smbconf.h> - -#include "iicbus_if.h" -#include "iicbb_if.h" - -struct iicbb_softc { - int dummy; -}; - -static int iicbb_probe(device_t); -static int iicbb_attach(device_t); -static void iicbb_print_child(device_t, device_t); - -static int iicbb_callback(device_t, int, caddr_t); -static int iicbb_start(device_t, u_char, int); -static int iicbb_stop(device_t); -static int iicbb_write(device_t, char *, int, int *, int); -static int iicbb_read(device_t, char *, int, int *, int, int); -static int iicbb_reset(device_t, u_char, u_char, u_char *); - -static device_method_t iicbb_methods[] = { - /* device interface */ - DEVMETHOD(device_probe, iicbb_probe), - DEVMETHOD(device_attach, iicbb_attach), - - /* bus interface */ - DEVMETHOD(bus_print_child, iicbb_print_child), - - /* iicbus interface */ - DEVMETHOD(iicbus_callback, iicbb_callback), - DEVMETHOD(iicbus_start, iicbb_start), - DEVMETHOD(iicbus_repeated_start, iicbb_start), - DEVMETHOD(iicbus_stop, iicbb_stop), - DEVMETHOD(iicbus_write, iicbb_write), - DEVMETHOD(iicbus_read, iicbb_read), - DEVMETHOD(iicbus_reset, iicbb_reset), - - { 0, 0 } -}; - -static driver_t iicbb_driver = { - "iicbb", - iicbb_methods, - DRIVER_TYPE_MISC, - sizeof(struct iicbb_softc), -}; - -static devclass_t iicbb_devclass; - -static int iicbb_probe(device_t dev) -{ - device_set_desc(dev, "I2C generic bit-banging driver"); - - return (0); -} - -static int iicbb_attach(device_t dev) -{ - return (0); -} - -static void -iicbb_print_child(device_t bus, device_t dev) -{ - int error; - u_char oldaddr; - - /* retrieve the interface I2C address */ - error = IICBB_RESET(device_get_parent(bus), IIC_FASTEST, 0, &oldaddr); - if (error == IIC_ENOADDR) { - printf(" on %s%d master-only", device_get_name(bus), - device_get_unit(bus)); - - } else { - /* restore the address */ - IICBB_RESET(device_get_parent(bus), IIC_FASTEST, oldaddr, NULL); - - printf(" on %s%d addr 0x%x", device_get_name(bus), - device_get_unit(bus), oldaddr & 0xff); - } - - return; -} - -#define I2C_SET(dev,ctrl,data) \ - IICBB_SETLINES(device_get_parent(dev), ctrl, data) - -#define I2C_GET(dev) (IICBB_GETDATALINE(device_get_parent(dev))) - -static int i2c_debug = 0; -#define I2C_DEBUG(x) if (i2c_debug) (x) - -static void iicbb_one(device_t dev) -{ - I2C_SET(dev,0,1); - I2C_SET(dev,1,1); - I2C_SET(dev,0,1); - return; -} - -static void iicbb_zero(device_t dev) -{ - I2C_SET(dev,0,0); - I2C_SET(dev,1,0); - I2C_SET(dev,0,0); - return; -} - -/* - * Waiting for ACKNOWLEDGE. - * - * When a chip is being addressed or has received data it will issue an - * ACKNOWLEDGE pulse. Therefore the MASTER must release the DATA line - * (set it to high level) and then release the CLOCK line. - * Now it must wait for the SLAVE to pull the DATA line low. - * Actually on the bus this looks like a START condition so nothing happens - * because of the fact that the IC's that have not been addressed are doing - * nothing. - * - * When the SLAVE has pulled this line low the MASTER will take the CLOCK - * line low and then the SLAVE will release the SDA (data) line. - */ -static int iicbb_ack(device_t dev, int timeout) -{ - int noack; - int k = timeout/10; - - I2C_SET(dev,0,1); - I2C_SET(dev,1,1); - - do { - noack = I2C_GET(dev); - if (!noack) - break; - DELAY(10); /* XXX wait 10us */ - } while (k--); - - I2C_SET(dev,0,1); - I2C_DEBUG(printf("%c ",noack?'-':'+')); - - return (noack); -} - -static void iicbb_sendbyte(device_t dev, u_char data) -{ - int i; - - I2C_SET(dev,0,0); - for (i=7; i>=0; i--) - (data&(1<<i)) ? iicbb_one(dev) : iicbb_zero(dev); - I2C_DEBUG(printf("w%02x",(int)data)); - return; -} - -static u_char iicbb_readbyte(device_t dev, int last) -{ - int i; - unsigned char data=0; - - I2C_SET(dev,0,1); - for (i=7; i>=0; i--) - { - I2C_SET(dev,1,1); - if (I2C_GET(dev)) - data |= (1<<i); - I2C_SET(dev,0,1); - } - last ? iicbb_one(dev) : iicbb_zero(dev); - I2C_DEBUG(printf("r%02x%c ",(int)data,last?'-':'+')); - return data; -} - -static int iicbb_callback(device_t dev, int index, caddr_t data) -{ - return (IICBB_CALLBACK(device_get_parent(dev), index, data)); -} - -static int iicbb_reset(device_t dev, u_char speed, u_char addr, u_char *oldaddr) -{ - return (IICBB_RESET(device_get_parent(dev), speed, addr, oldaddr)); -} - -static int iicbb_start(device_t dev, u_char slave, int timeout) -{ - int error; - - I2C_DEBUG(printf("<")); - - I2C_SET(dev,0,1); - I2C_SET(dev,1,1); - I2C_SET(dev,1,0); - I2C_SET(dev,0,0); - - /* send address */ - iicbb_sendbyte(dev, slave); - - /* check for ack */ - if (iicbb_ack(dev, timeout)) { - error = IIC_ENOACK; - goto error; - } - - return(0); - -error: - iicbb_stop(dev); - return (error); -} - -static int iicbb_stop(device_t dev) -{ - I2C_SET(dev,0,0); - I2C_SET(dev,1,0); - I2C_SET(dev,1,1); - I2C_DEBUG(printf(">")); - return (0); -} - -static int iicbb_write(device_t dev, char * buf, int len, int *sent, - int timeout) -{ - int bytes, error = 0; - - bytes = 0; - while (len) { - /* send byte */ - iicbb_sendbyte(dev,(u_char)*buf++); - - /* check for ack */ - if (iicbb_ack(dev, timeout)) { - error = IIC_ENOACK; - goto error; - } - bytes ++; - len --; - } - -error: - *sent = bytes; - return (error); -} - -static int iicbb_read(device_t dev, char * buf, int len, int *read, - int last, int delay) -{ - int bytes; - - bytes = 0; - while (len) { - /* XXX should insert delay here */ - *buf++ = (char)iicbb_readbyte(dev, (len == 1) ? 1 : 0); - - bytes ++; - len --; - } - - *read = bytes; - return (0); -} - -DRIVER_MODULE(iicbb, bti2c, iicbb_driver, iicbb_devclass, 0, 0); -DRIVER_MODULE(iicbb, lpbb, iicbb_driver, iicbb_devclass, 0, 0); diff --git a/sys/dev/iicbus/iicbb_if.m b/sys/dev/iicbus/iicbb_if.m deleted file mode 100644 index bdf1108fac95a..0000000000000 --- a/sys/dev/iicbus/iicbb_if.m +++ /dev/null @@ -1,65 +0,0 @@ -# -# Copyright (c) 1998 Nicolas Souchu -# 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 AUTHOR 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 AUTHOR 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. -# -# $Id: iicbb_if.m,v 1.1 1998/10/31 11:31:07 nsouch Exp $ -# - -INTERFACE iicbb; - -# -# iicbus callback -# -METHOD int callback { - device_t dev; - int index; - caddr_t data; -}; - -# -# Set I2C bus lines -# -METHOD void setlines { - device_t dev; - int ctrl; - int data; -}; - -# -# Get I2C bus lines -# -# -METHOD int getdataline { - device_t dev; -}; - -# -# Reset interface -# -METHOD int reset { - device_t dev; - u_char speed; - u_char addr; - u_char *oldaddr; -}; diff --git a/sys/dev/iicbus/iicbus.c b/sys/dev/iicbus/iicbus.c index cf9f6ba5ac262..41a0cea4f01c4 100644 --- a/sys/dev/iicbus/iicbus.c +++ b/sys/dev/iicbus/iicbus.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iicbus.c,v 1.6 1998/12/07 21:58:16 archie Exp $ + * $Id: iicbus.c,v 1.1.2.7 1998/08/29 16:54:16 son Exp $ * */ @@ -54,7 +54,6 @@ struct iicbus_device { int iicd_class; /* driver or slave device class */ const char *iicd_desc; /* device descriptor */ u_char iicd_addr; /* address of the device */ - int iicd_waitack; /* wait for ack timeout or delay */ int iicd_alive; /* 1 if device found */ }; @@ -62,10 +61,10 @@ struct iicbus_device { * Common I2C addresses */ #define I2C_GENERAL_CALL 0x0 -#define PCF_MASTER_ADDRESS 0xaa -#define FIRST_SLAVE_ADDR 0x2 +#define I2C_MASTER_ADDRESS 0xaa +#define I2C_INET_ADDRESS 0xaa -#define LAST_SLAVE_ADDR 255 +#define MAXSLAVE 256 #define IICBUS_UNKNOWN_CLASS 0 #define IICBUS_DEVICE_CLASS 1 @@ -73,15 +72,13 @@ struct iicbus_device { /* * list of known devices - * - * XXX only one smb driver should exist for each I2C interface */ struct iicbus_device iicbus_children[] = { + { "iic", IICBUS_DRIVER_CLASS, "General Call", I2C_GENERAL_CALL }, { "iicsmb", IICBUS_DRIVER_CLASS, "I2C to SMB bridge" }, - { "iic", IICBUS_DRIVER_CLASS, "I2C general purpose I/O" }, -#if 0 - { "ic", IICBUS_DEVICE_CLASS, "network interface", PCF_MASTER_ADDRESS }, -#endif + { "iic", IICBUS_DEVICE_CLASS, "PCF8574 I2C to 8 bits parallel i/o", 64}, + { "iic", IICBUS_DEVICE_CLASS, "PCF8584 as slave", I2C_MASTER_ADDRESS }, + { "ic", IICBUS_DEVICE_CLASS, "network interface", I2C_INET_ADDRESS }, { NULL, 0 } }; @@ -94,7 +91,6 @@ static int iicbus_probe(device_t); static int iicbus_attach(device_t); static void iicbus_print_child(device_t, device_t); static int iicbus_read_ivar(device_t , device_t, int, u_long *); -static int iicbus_write_ivar(device_t , device_t, int, u_long); static device_method_t iicbus_methods[] = { /* device interface */ @@ -106,7 +102,9 @@ static device_method_t iicbus_methods[] = { /* bus interface */ DEVMETHOD(bus_print_child, iicbus_print_child), DEVMETHOD(bus_read_ivar, iicbus_read_ivar), - DEVMETHOD(bus_write_ivar, iicbus_write_ivar), + DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_create_intr, bus_generic_create_intr), + DEVMETHOD(bus_connect_intr, bus_generic_connect_intr), { 0, 0 } }; @@ -118,118 +116,59 @@ static driver_t iicbus_driver = { sizeof(struct iicbus_softc), }; -static int -iicbus_probe(device_t dev) -{ - device_set_desc(dev, "Philips I2C bus"); - - return (0); -} - -#if 0 -static int -iic_probe_device(device_t dev, u_char addr) -{ - int count; - char byte; - - if ((addr & 1) == 0) { - /* is device writable? */ - if (!iicbus_start(dev, (u_char)addr, 0)) { - iicbus_stop(dev); - return (1); - } - } else { - /* is device readable? */ - if (!iicbus_block_read(dev, (u_char)addr, &byte, 1, &count)) - return (1); - } - - return (0); -} -#endif - /* - * We add all the devices which we know about. - * The generic attach routine will attach them if they are alive. + * At 'probe' time, we add all the devices which we know about to the + * bus. The generic attach routine will probe and attach them if they + * are alive. */ static int -iicbus_attach(device_t dev) +iicbus_probe(device_t dev) { + struct iicbus_softc *sc = device_get_softc(dev); struct iicbus_device *iicdev; device_t child; - iicbus_reset(dev, IIC_FASTEST, 0, NULL); + /* XXX should query parent */ + sc->ownaddr = I2C_MASTER_ADDRESS; - /* device probing is meaningless since the bus is supposed to be - * hot-plug. Moreover, some I2C chips do not appreciate random - * accesses like stop after start to fast, reads for less than - * x bytes... - */ -#if 0 - printf("Probing for devices on iicbus%d:", device_get_unit(dev)); - - /* probe any devices */ - for (addr = FIRST_SLAVE_ADDR; addr <= LAST_SLAVE_ADDR; addr++) { - if (iic_probe_device(dev, (u_char)addr)) { - printf(" <%x>", addr); - } - } - printf("\n"); -#endif + iicbus_reset(dev, IIC_FASTEST); - /* attach known devices */ for (iicdev = iicbus_children; iicdev->iicd_name; iicdev++) { + + /* probe devices, not drivers */ switch (iicdev->iicd_class) { case IICBUS_DEVICE_CLASS: - /* check if the devclass exists */ - if (devclass_find(iicdev->iicd_name)) + if (!iicbus_start(dev, iicdev->iicd_addr)) { + iicbus_stop(dev); iicdev->iicd_alive = 1; - else if (bootverbose) - printf("iicbus: %s devclass not found\n", - iicdev->iicd_name); + } break; - case IICBUS_DRIVER_CLASS: - /* check if the devclass exists */ - if (devclass_find(iicdev->iicd_name)) - iicdev->iicd_alive = 1; - else if (bootverbose) - printf("iicbus: %s devclass not found\n", - iicdev->iicd_name); + iicdev->iicd_addr = sc->ownaddr; break; - default: panic("%s: unknown class!", __FUNCTION__); } - if (iicdev->iicd_alive) { - child = device_add_child(dev, iicdev->iicd_name, - -1, iicdev); - device_set_desc(child, iicdev->iicd_desc); - } + child = device_add_child(dev, iicdev->iicd_name, -1, iicdev); + device_set_desc(child, iicdev->iicd_desc); } - bus_generic_attach(dev); - - return (0); -} -int -iicbus_generic_intr(device_t dev, int event, char *buf) -{ return (0); } -int -iicbus_null_callback(device_t dev, int index, caddr_t data) +static int +iicbus_attach(device_t dev) { - return (0); + bus_generic_attach(dev); + + return (0); } int -iicbus_null_repeated_start(device_t dev, u_char addr) +iicbus_generic_intr(device_t dev, int event, char *buf) { - return (IIC_ENOTSUPP); + return (0); } static void @@ -239,8 +178,9 @@ iicbus_print_child(device_t bus, device_t dev) switch (iicdev->iicd_class) { case IICBUS_DEVICE_CLASS: - printf(" on %s%d addr 0x%x", device_get_name(bus), - device_get_unit(bus), iicdev->iicd_addr); + printf(" on %s%d addr %d %s", device_get_name(bus), + device_get_unit(bus), iicdev->iicd_addr, + (iicdev->iicd_alive) ? "found" : "not found"); break; case IICBUS_DRIVER_CLASS: @@ -272,17 +212,4 @@ iicbus_read_ivar(device_t bus, device_t dev, int index, u_long* result) return (0); } -static int -iicbus_write_ivar(device_t bus, device_t dev, int index, u_long val) -{ - switch (index) { - default: - return (ENOENT); - } - - return (0); -} - DRIVER_MODULE(iicbus, pcf, iicbus_driver, iicbus_devclass, 0, 0); -DRIVER_MODULE(iicbus, iicbb, iicbus_driver, iicbus_devclass, 0, 0); -DRIVER_MODULE(iicbus, bti2c, iicbus_driver, iicbus_devclass, 0, 0); diff --git a/sys/dev/iicbus/iicbus.h b/sys/dev/iicbus/iicbus.h index 3c230955bbc12..e84525286175f 100644 --- a/sys/dev/iicbus/iicbus.h +++ b/sys/dev/iicbus/iicbus.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iicbus.h,v 1.2 1998/10/31 11:31:07 nsouch Exp $ + * $Id: iicbus.h,v 1.1.2.3 1998/08/13 17:10:43 son Exp $ * */ #ifndef __IICBUS_H @@ -31,9 +31,8 @@ struct iicbus_softc { + u_char ownaddr; /* address of the adapter */ device_t owner; /* iicbus owner device structure */ - u_char started; /* address of the 'started' slave - * 0 if no start condition succeeded */ }; extern devclass_t iicbus_devclass; diff --git a/sys/dev/iicbus/iicbus_if.m b/sys/dev/iicbus/iicbus_if.m index 7e29333db4954..bf7efeb3a45a7 100644 --- a/sys/dev/iicbus/iicbus_if.m +++ b/sys/dev/iicbus/iicbus_if.m @@ -23,13 +23,13 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $Id: iicbus_if.m,v 1.2 1998/10/31 11:31:07 nsouch Exp $ +# $Id: iicbus_if.m,v 1.1.2.4 1998/08/13 17:10:43 son Exp $ # -INTERFACE iicbus; +INTERFACE iicbus # -# Interpret interrupt +# Interprete interrupt # METHOD int intr { device_t dev; @@ -38,21 +38,11 @@ METHOD int intr { }; # -# iicbus callback -# -METHOD int callback { - device_t dev; - int index; - caddr_t data; -}; - -# # Send REPEATED_START condition # METHOD int repeated_start { device_t dev; u_char slave; - int timeout; }; # @@ -61,7 +51,6 @@ METHOD int repeated_start { METHOD int start { device_t dev; u_char slave; - int timeout; }; # @@ -79,8 +68,6 @@ METHOD int read { char *buf; int len; int *bytes; - int last; - int delay; }; # @@ -91,7 +78,6 @@ METHOD int write { char *buf; int len; int *bytes; - int timeout; }; # @@ -100,6 +86,4 @@ METHOD int write { METHOD int reset { device_t dev; u_char speed; - u_char addr; - u_char *oldaddr; }; diff --git a/sys/dev/iicbus/iiconf.c b/sys/dev/iicbus/iiconf.c index 47f1686fac0f5..b037b7cca2b13 100644 --- a/sys/dev/iicbus/iiconf.c +++ b/sys/dev/iicbus/iiconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iiconf.c,v 1.3 1998/11/22 22:01:42 nsouch Exp $ + * $Id: iiconf.c,v 1.1.1.11 1998/08/29 17:02:05 son Exp $ * */ #include <sys/param.h> @@ -65,29 +65,10 @@ iicbus_alloc_bus(device_t parent) /* add the bus to the parent */ child = device_add_child(parent, "iicbus", -1, NULL); - return (child); -} - -static int -iicbus_poll(struct iicbus_softc *sc, int how) -{ - int error; + if (child) + device_set_desc(child, "Philips I2C bus"); - switch (how) { - case (IIC_WAIT | IIC_INTR): - error = tsleep(sc, IICPRI|PCATCH, "iicreq", 0); - break; - - case (IIC_WAIT | IIC_NOINTR): - error = tsleep(sc, IICPRI, "iicreq", 0); - break; - - default: - return (EWOULDBLOCK); - break; - } - - return (error); + return (child); } /* @@ -103,20 +84,25 @@ iicbus_request_bus(device_t bus, device_t dev, int how) struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); int s, error = 0; - /* first, ask the underlying layers if the request is ok */ - do { - error = IICBUS_CALLBACK(device_get_parent(bus), - IIC_REQUEST_BUS, (caddr_t)&how); - if (error) - error = iicbus_poll(sc, how); - } while (error); - while (!error) { s = splhigh(); if (sc->owner) { splx(s); - error = iicbus_poll(sc, how); + switch (how) { + case (IIC_WAIT | IIC_INTR): + error = tsleep(sc, IICPRI|PCATCH, "iicreq", 0); + break; + + case (IIC_WAIT | IIC_NOINTR): + error = tsleep(sc, IICPRI, "iicreq", 0); + break; + + default: + return (EWOULDBLOCK); + break; + } + } else { sc->owner = dev; @@ -137,13 +123,7 @@ int iicbus_release_bus(device_t bus, device_t dev) { struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - int s, error; - - /* first, ask the underlying layers if the release is ok */ - error = IICBUS_CALLBACK(device_get_parent(bus), IIC_RELEASE_BUS, NULL); - - if (error) - return (error); + int s; s = splhigh(); if (sc->owner != dev) { @@ -161,99 +141,6 @@ iicbus_release_bus(device_t bus, device_t dev) } /* - * iicbus_started() - * - * Test if the iicbus is started by the controller - */ -int -iicbus_started(device_t bus) -{ - struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - - return (sc->started); -} - -/* - * iicbus_start() - * - * Send start condition to the slave addressed by 'slave' - */ -int -iicbus_start(device_t bus, u_char slave, int timeout) -{ - struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - int error = 0; - - if (sc->started) - return (EINVAL); /* bus already started */ - - if (!(error = IICBUS_START(device_get_parent(bus), slave, timeout))) - sc->started = slave; - else - sc->started = 0; - - return (error); -} - -/* - * iicbus_stop() - * - * Send stop condition to the bus - */ -int -iicbus_stop(device_t bus) -{ - struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - int error = 0; - - if (!sc->started) - return (EINVAL); /* bus not started */ - - error = IICBUS_STOP(device_get_parent(bus)); - - /* refuse any further access */ - sc->started = 0; - - return (error); -} - -/* - * iicbus_write() - * - * Write a block of data to the slave previously started by - * iicbus_start() call - */ -int -iicbus_write(device_t bus, char *buf, int len, int *sent, int timeout) -{ - struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - - /* a slave must have been started with the appropriate address */ - if (!sc->started || (sc->started & LSB)) - return (EINVAL); - - return (IICBUS_WRITE(device_get_parent(bus), buf, len, sent, timeout)); -} - -/* - * iicbus_read() - * - * Read a block of data from the slave previously started by - * iicbus_read() call - */ -int -iicbus_read(device_t bus, char *buf, int len, int *read, int last, int delay) -{ - struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); - - /* a slave must have been started with the appropriate address */ - if (!sc->started || !(sc->started & LSB)) - return (EINVAL); - - return (IICBUS_READ(device_get_parent(bus), buf, len, read, last, delay)); -} - -/* * iicbus_block_write() * * Write a block of data to slave ; start/stop protocol managed @@ -264,10 +151,10 @@ iicbus_block_write(device_t bus, u_char slave, char *buf, int len, int *sent) u_char addr = slave & ~LSB; int error; - if ((error = iicbus_start(bus, addr, 0))) + if ((error = iicbus_start(bus, addr))) return (error); - error = iicbus_write(bus, buf, len, sent, 0); + error = iicbus_write(bus, buf, len, sent); iicbus_stop(bus); @@ -285,12 +172,12 @@ iicbus_block_read(device_t bus, u_char slave, char *buf, int len, int *read) u_char addr = slave | LSB; int error; - if ((error = iicbus_start(bus, addr, 0))) + if ((error = iicbus_start(bus, addr))) return (error); - error = iicbus_read(bus, buf, len, read, IIC_LAST_READ, 0); + error = iicbus_read(bus, buf, len, read); - iicbus_stop(bus); + /* STOP condition sent at adapter level */ return (error); } @@ -303,7 +190,7 @@ iicbus_block_read(device_t bus, u_char slave, char *buf, int len, int *read) u_char iicbus_get_addr(device_t dev) { - uintptr_t addr; + u_long addr; device_t parent = device_get_parent(dev); BUS_READ_IVAR(parent, dev, IICBUS_IVAR_ADDR, &addr); @@ -311,3 +198,10 @@ iicbus_get_addr(device_t dev) return ((u_char)addr); } +u_char +iicbus_get_own_address(device_t bus) +{ + struct iicbus_softc *sc = (struct iicbus_softc *)device_get_softc(bus); + + return (sc->ownaddr); +} diff --git a/sys/dev/iicbus/iiconf.h b/sys/dev/iicbus/iiconf.h index 0b548fbdf8f05..9bf0ed35e3cd2 100644 --- a/sys/dev/iicbus/iiconf.h +++ b/sys/dev/iicbus/iiconf.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iiconf.h,v 1.2 1998/10/31 11:31:07 nsouch Exp $ + * $Id: iiconf.h,v 1.1.1.10 1998/08/13 17:10:43 son Exp $ */ #ifndef __IICONF_H #define __IICONF_H @@ -59,14 +59,6 @@ #define IIC_FAST 0x2 #define IIC_FASTEST 0x3 -#define IIC_LAST_READ 0x1 - -/* - * callback index - */ -#define IIC_REQUEST_BUS 0x1 -#define IIC_RELEASE_BUS 0x2 - /* * interrupt events */ @@ -89,8 +81,6 @@ #define IIC_ESTATUS 0x5 /* status error */ #define IIC_EUNDERFLOW 0x6 /* slave ready for more data */ #define IIC_EOVERFLOW 0x7 /* too much data */ -#define IIC_ENOTSUPP 0x8 /* request not supported */ -#define IIC_ENOADDR 0x9 /* no address assigned to the interface */ /* * ivars codes @@ -103,25 +93,23 @@ extern device_t iicbus_alloc_bus(device_t); extern void iicbus_intr(device_t, int, char *); -extern int iicbus_null_repeated_start(device_t, u_char); -extern int iicbus_null_callback(device_t, int, caddr_t); - -#define iicbus_repeated_start(bus,slave,timeout) \ - (IICBUS_REPEATED_START(device_get_parent(bus), slave, timeout)) -#define iicbus_reset(bus,speed,addr,oldaddr) \ - (IICBUS_RESET(device_get_parent(bus), speed, addr, oldaddr)) - -/* basic I2C operations */ -extern int iicbus_started(device_t); -extern int iicbus_start(device_t, u_char, int); -extern int iicbus_stop(device_t); -extern int iicbus_write(device_t, char *, int, int *, int); -extern int iicbus_read(device_t, char *, int, int *, int, int); +#define iicbus_repeated_start(bus,slave) \ + (IICBUS_REPEATED_START(device_get_parent(bus), slave)) +#define iicbus_start(bus,slave) \ + (IICBUS_START(device_get_parent(bus), slave)) +#define iicbus_stop(bus) \ + (IICBUS_STOP(device_get_parent(bus))) +#define iicbus_reset(bus,speed) \ + (IICBUS_RESET(device_get_parent(bus), speed)) +#define iicbus_write(bus,buf,len,sent) \ + (IICBUS_WRITE(device_get_parent(bus), buf, len, sent)) +#define iicbus_read(bus,buf,len,sent) \ + (IICBUS_READ(device_get_parent(bus), buf, len, sent)) -/* Read/write operations with start/stop conditions managed */ extern int iicbus_block_write(device_t, u_char, char *, int, int *); extern int iicbus_block_read(device_t, u_char, char *, int, int *); extern u_char iicbus_get_addr(device_t); +extern u_char iicbus_get_own_address(device_t); #endif diff --git a/sys/dev/iicbus/iicsmb.c b/sys/dev/iicbus/iicsmb.c index 060c548d8a2fc..8f3a8bb7066d6 100644 --- a/sys/dev/iicbus/iicsmb.c +++ b/sys/dev/iicbus/iicsmb.c @@ -23,26 +23,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iicsmb.c,v 1.1.1.1 1998/09/03 20:51:50 nsouch Exp $ + * $Id: iicsmb.c,v 1.1.2.2 1998/08/13 17:10:44 son Exp $ * */ /* * I2C to SMB bridge - * - * Example: - * - * smb bttv - * \ / - * smbus - * / \ - * iicsmb bti2c - * | - * iicbus - * / | \ - * iicbb pcf ... - * | - * lpbb */ #include <sys/param.h> @@ -86,7 +72,6 @@ static int iicsmb_attach(device_t); static void iicsmb_print_child(device_t, device_t); static void iicsmb_intr(device_t dev, int event, char *buf); -static int iicsmb_callback(device_t dev, int index, caddr_t data); static int iicsmb_quick(device_t dev, u_char slave, int how); static int iicsmb_sendb(device_t dev, u_char slave, char byte); static int iicsmb_recvb(device_t dev, u_char slave, char *byte); @@ -112,7 +97,6 @@ static device_method_t iicsmb_methods[] = { DEVMETHOD(iicbus_intr, iicsmb_intr), /* smbus interface */ - DEVMETHOD(smbus_callback, iicsmb_callback), DEVMETHOD(smbus_quick, iicsmb_quick), DEVMETHOD(smbus_sendb, iicsmb_sendb), DEVMETHOD(smbus_recvb, iicsmb_recvb), @@ -239,32 +223,6 @@ end: } static int -iicsmb_callback(device_t dev, int index, caddr_t data) -{ - device_t parent = device_get_parent(dev); - int error = 0; - int how; - - switch (index) { - case SMB_REQUEST_BUS: - /* request underlying iicbus */ - how = *(int *)data; - error = iicbus_request_bus(parent, dev, how); - break; - - case SMB_RELEASE_BUS: - /* release underlying iicbus */ - error = iicbus_release_bus(parent, dev); - break; - - default: - error = EINVAL; - } - - return (error); -} - -static int iicsmb_quick(device_t dev, u_char slave, int how) { device_t parent = device_get_parent(dev); @@ -272,11 +230,11 @@ iicsmb_quick(device_t dev, u_char slave, int how) switch (how) { case SMB_QWRITE: - error = iicbus_start(parent, slave & ~LSB, 0); + error = iicbus_start(parent, slave & ~LSB); break; case SMB_QREAD: - error = iicbus_start(parent, slave | LSB, 0); + error = iicbus_start(parent, slave | LSB); break; default: @@ -296,10 +254,10 @@ iicsmb_sendb(device_t dev, u_char slave, char byte) device_t parent = device_get_parent(dev); int error, sent; - error = iicbus_start(parent, slave & ~LSB, 0); + error = iicbus_start(parent, slave & ~LSB); if (!error) { - error = iicbus_write(parent, &byte, 1, &sent, 0); + error = iicbus_write(parent, &byte, 1, &sent); iicbus_stop(parent); } @@ -313,13 +271,10 @@ iicsmb_recvb(device_t dev, u_char slave, char *byte) device_t parent = device_get_parent(dev); int error, read; - error = iicbus_start(parent, slave | LSB, 0); + error = iicbus_start(parent, slave | LSB); - if (!error) { - error = iicbus_read(parent, byte, 1, &read, IIC_LAST_READ, 0); - - iicbus_stop(parent); - } + if (!error) + error = iicbus_read(parent, byte, 1, &read); return (error); } @@ -330,11 +285,11 @@ iicsmb_writeb(device_t dev, u_char slave, char cmd, char byte) device_t parent = device_get_parent(dev); int error, sent; - error = iicbus_start(parent, slave & ~LSB, 0); + error = iicbus_start(parent, slave & ~LSB); if (!error) { - if (!(error = iicbus_write(parent, &cmd, 1, &sent, 0))) - error = iicbus_write(parent, &byte, 1, &sent, 0); + if (!(error = iicbus_write(parent, &cmd, 1, &sent))) + error = iicbus_write(parent, &byte, 1, &sent); iicbus_stop(parent); } @@ -351,12 +306,12 @@ iicsmb_writew(device_t dev, u_char slave, char cmd, short word) char low = (char)(word & 0xff); char high = (char)((word & 0xff00) >> 8); - error = iicbus_start(parent, slave & ~LSB, 0); + error = iicbus_start(parent, slave & ~LSB); if (!error) { - if (!(error = iicbus_write(parent, &cmd, 1, &sent, 0))) - if (!(error = iicbus_write(parent, &low, 1, &sent, 0))) - error = iicbus_write(parent, &high, 1, &sent, 0); + if (!(error = iicbus_write(parent, &cmd, 1, &sent))) + if (!(error = iicbus_write(parent, &low, 1, &sent))) + error = iicbus_write(parent, &high, 1, &sent); iicbus_stop(parent); } @@ -370,20 +325,19 @@ iicsmb_readb(device_t dev, u_char slave, char cmd, char *byte) device_t parent = device_get_parent(dev); int error, sent, read; - if ((error = iicbus_start(parent, slave & ~LSB, 0))) - return (error); + if ((error = iicbus_start(parent, slave & ~LSB))) + goto error; - if ((error = iicbus_write(parent, &cmd, 1, &sent, 0))) + if ((error = iicbus_write(parent, &cmd, 1, &sent))) goto error; - if ((error = iicbus_repeated_start(parent, slave | LSB, 0))) + if ((error = iicbus_repeated_start(parent, slave | LSB))) goto error; - if ((error = iicbus_read(parent, byte, 1, &read, IIC_LAST_READ, 0))) + if ((error = iicbus_read(parent, byte, 1, &read))) goto error; error: - iicbus_stop(parent); return (error); } @@ -397,23 +351,22 @@ iicsmb_readw(device_t dev, u_char slave, char cmd, short *word) int error, sent, read; char buf[2]; - if ((error = iicbus_start(parent, slave & ~LSB, 0))) - return (error); + if ((error = iicbus_start(parent, slave & ~LSB))) + goto error; - if ((error = iicbus_write(parent, &cmd, 1, &sent, 0))) + if ((error = iicbus_write(parent, &cmd, 1, &sent))) goto error; - if ((error = iicbus_repeated_start(parent, slave | LSB, 0))) + if ((error = iicbus_repeated_start(parent, slave | LSB))) goto error; - if ((error = iicbus_read(parent, buf, 2, &read, IIC_LAST_READ, 0))) + if ((error = iicbus_read(parent, buf, 2, &read))) goto error; /* first, receive low, then high byte */ *word = BUF2SHORT(buf[0], buf[1]); error: - iicbus_stop(parent); return (error); } @@ -424,30 +377,29 @@ iicsmb_pcall(device_t dev, u_char slave, char cmd, short sdata, short *rdata) int error, sent, read; char buf[2]; - if ((error = iicbus_start(parent, slave & ~LSB, 0))) - return (error); + if ((error = iicbus_start(parent, slave & ~LSB))) + goto error; - if ((error = iicbus_write(parent, &cmd, 1, &sent, 0))) + if ((error = iicbus_write(parent, &cmd, 1, &sent))) goto error; /* first, send low, then high byte */ buf[0] = (char)(sdata & 0xff); buf[1] = (char)((sdata & 0xff00) >> 8); - if ((error = iicbus_write(parent, buf, 2, &sent, 0))) + if ((error = iicbus_write(parent, buf, 2, &sent))) goto error; - if ((error = iicbus_repeated_start(parent, slave | LSB, 0))) + if ((error = iicbus_repeated_start(parent, slave | LSB))) goto error; - if ((error = iicbus_read(parent, buf, 2, &read, IIC_LAST_READ, 0))) + if ((error = iicbus_read(parent, buf, 2, &read))) goto error; /* first, receive low, then high byte */ *rdata = BUF2SHORT(buf[0], buf[1]); error: - iicbus_stop(parent); return (error); } @@ -457,13 +409,13 @@ iicsmb_bwrite(device_t dev, u_char slave, char cmd, u_char count, char *buf) device_t parent = device_get_parent(dev); int error, sent; - if ((error = iicbus_start(parent, slave & ~LSB, 0))) + if ((error = iicbus_start(parent, slave & ~LSB))) goto error; - if ((error = iicbus_write(parent, &cmd, 1, &sent, 0))) + if ((error = iicbus_write(parent, &cmd, 1, &sent))) goto error; - if ((error = iicbus_write(parent, buf, (int)count, &sent, 0))) + if ((error = iicbus_write(parent, buf, (int)count, &sent))) goto error; if ((error = iicbus_stop(parent))) @@ -479,21 +431,19 @@ iicsmb_bread(device_t dev, u_char slave, char cmd, u_char count, char *buf) device_t parent = device_get_parent(dev); int error, sent, read; - if ((error = iicbus_start(parent, slave & ~LSB, 0))) - return (error); + if ((error = iicbus_start(parent, slave & ~LSB))) + goto error; - if ((error = iicbus_write(parent, &cmd, 1, &sent, 0))) + if ((error = iicbus_write(parent, &cmd, 1, &sent))) goto error; - if ((error = iicbus_repeated_start(parent, slave | LSB, 0))) + if ((error = iicbus_repeated_start(parent, slave | LSB))) goto error; - if ((error = iicbus_read(parent, buf, (int)count, &read, - IIC_LAST_READ, 0))) + if ((error = iicbus_read(parent, buf, (int)count, &read))) goto error; error: - iicbus_stop(parent); return (error); } diff --git a/sys/dev/isp/asm_pci.h b/sys/dev/isp/asm_pci.h index b7e0f9a9a11dc..fd9313bd263e1 100644 --- a/sys/dev/isp/asm_pci.h +++ b/sys/dev/isp/asm_pci.h @@ -1,13 +1,1314 @@ -/* $Id: $ */ -/* release_12_28_98_A */ +/* $Id: asm_pci.h,v 1.8 1998/09/14 23:24:59 mjacob Exp $ */ /* * Copyright (c) 1995, 1996, 1997, 1998 by Qlogic Corporation */ /* - * Firmware Version 7.55.00 (16:16 Mar 20, 1998) + * Version 2.10 Initiator Firmware (16:13 Oct 18, 1995) + * + * (this f/w now deprecated for newer f/w, but the old is held here + * in case of problems...) */ + #define ISP_CODE_ORG 0x1000 +#if 0 +#define ISP_CODE_VERSION 2*1024+10 +static const u_int16_t ISP_RISC_CODE[] = { + 0x0078, 0x1041, 0x0000, 0x283a, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, + 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, + 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, + 0x3130, 0x3230, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x322e, 0x3130, 0x2020, 0x2043, + 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, + 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, + 0x2400, 0x20b9, 0x1212, 0x2071, 0x0010, 0x70c3, 0x0004, 0x20c9, + 0x43ff, 0x2089, 0x115b, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, + 0x2020, 0x70d3, 0x0002, 0x3f00, 0x70d6, 0x20c1, 0x0008, 0x2019, + 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, + 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, + 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10b3, 0xa386, 0x000f, 0x0040, + 0x1079, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019, 0x000f, 0x0078, + 0x1059, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009, 0x7fff, 0x2148, + 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734, 0x203b, 0x5050, + 0x2114, 0xa286, 0x0a0a, 0x0040, 0x109d, 0x284a, 0x263a, 0x20c1, + 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050, 0x2114, 0xa286, + 0x5050, 0x0040, 0x109e, 0x0078, 0x1163, 0x284a, 0x263a, 0x98c0, + 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114, 0xa286, 0xa5a5, + 0x0040, 0x10b0, 0x250a, 0xa18a, 0x1000, 0x98c1, 0x0078, 0x10b5, + 0x250a, 0x0078, 0x10b5, 0x2c6a, 0x2a5a, 0x2130, 0xa18a, 0x0040, + 0x2128, 0xa1a2, 0x3900, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, + 0x8424, 0xa192, 0x4400, 0x2009, 0x0000, 0x2001, 0x002f, 0x1078, + 0x1a70, 0x2218, 0x2079, 0x3900, 0x2fa0, 0x2408, 0x2011, 0x0000, + 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10d0, 0x7eea, 0x7dde, + 0x8528, 0x7dda, 0x7ce2, 0x7be6, 0x787b, 0x0000, 0x2031, 0x0030, + 0x78c3, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003, + 0x2069, 0x3940, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, + 0x680f, 0x0008, 0x6813, 0x0005, 0x681f, 0x0000, 0x6823, 0x0006, + 0x6817, 0x0008, 0x6827, 0x0000, 0x2069, 0x3a00, 0x2011, 0x0020, + 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, 0x0019, 0x6803, 0xfd00, + 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, + 0x8109, 0x00c0, 0x1102, 0x2069, 0x3a80, 0x20a9, 0x0080, 0x680b, + 0x0040, 0x7be8, 0xa386, 0xfeff, 0x00c0, 0x1124, 0x6817, 0x0100, + 0x681f, 0x0064, 0x0078, 0x1128, 0x6817, 0x0064, 0x681f, 0x0002, + 0xade8, 0x0010, 0x0070, 0x112e, 0x0078, 0x1117, 0x1078, 0x1d15, + 0x1078, 0x3366, 0x1078, 0x18a4, 0x1078, 0x37fc, 0x3200, 0xa085, + 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x1145, 0x70c0, 0xa086, + 0x0002, 0x00c0, 0x1145, 0x1078, 0x1274, 0x1078, 0x1186, 0x78c0, + 0xa005, 0x00c0, 0x1151, 0x1078, 0x1a99, 0x0068, 0x1155, 0x1078, + 0x1c6f, 0x0068, 0x1155, 0x1078, 0x1997, 0x00e0, 0x1145, 0x1078, + 0x369a, 0x0078, 0x1145, 0x1163, 0x1165, 0x1ebb, 0x1ebb, 0x33d7, + 0x33d7, 0x1ebb, 0x1ebb, 0x0078, 0x1163, 0x0078, 0x1165, 0x0078, + 0x1167, 0x0078, 0x1169, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000, + 0x0040, 0x1181, 0x7008, 0x800b, 0x00c8, 0x1181, 0x7007, 0x0002, + 0xa08c, 0x0060, 0x00c0, 0x1182, 0xa084, 0x0008, 0x0040, 0x1181, + 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x1277, 0x0068, 0x11f1, + 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x11f1, 0x7814, + 0xa005, 0x00c0, 0x1197, 0x0010, 0x11f2, 0x0078, 0x11f1, 0x2009, + 0x3968, 0x2104, 0xa005, 0x00c0, 0x11f1, 0x2009, 0x3971, 0x200b, + 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11bc, 0x7816, 0x2009, + 0x396f, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca, + 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce, + 0x1078, 0x1896, 0x0078, 0x11ef, 0x7814, 0xa086, 0x0018, 0x00c0, + 0x11c3, 0x1078, 0x1622, 0x7817, 0x0000, 0x2009, 0x396f, 0x2104, + 0xa065, 0x0040, 0x11df, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6087, + 0x0103, 0x1078, 0x181d, 0x00c0, 0x11eb, 0x1078, 0x1896, 0x2009, + 0x396f, 0x200b, 0x0000, 0x2009, 0x3969, 0x2104, 0x200b, 0x0000, + 0xa005, 0x0040, 0x11ef, 0x2001, 0x4005, 0x0078, 0x1276, 0x0078, + 0x1274, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, + 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1242, 0x2038, + 0x0079, 0x1202, 0x1274, 0x12cf, 0x1293, 0x12cf, 0x1338, 0x1338, + 0x128a, 0x16fd, 0x1343, 0x1282, 0x1297, 0x1299, 0x129b, 0x129d, + 0x1702, 0x1282, 0x1355, 0x1380, 0x163a, 0x16f7, 0x129f, 0x1569, + 0x158b, 0x15a1, 0x15be, 0x1526, 0x1534, 0x1548, 0x155c, 0x13f3, + 0x1282, 0x13a1, 0x13a7, 0x13ac, 0x13b1, 0x13b7, 0x13bc, 0x13c1, + 0x13c6, 0x13cb, 0x13cf, 0x13e4, 0x13f0, 0x1282, 0x1282, 0x1282, + 0x1282, 0x13ff, 0x1408, 0x1417, 0x143d, 0x1447, 0x144e, 0x1474, + 0x1483, 0x1492, 0x14a4, 0x1506, 0x1516, 0x1282, 0x1282, 0x1282, + 0x1282, 0x151b, 0xa0bc, 0xffa0, 0x00c0, 0x1282, 0x2038, 0xa084, + 0x001f, 0x0079, 0x124b, 0x1719, 0x171c, 0x172c, 0x17a8, 0x17e1, + 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, + 0x1282, 0x1282, 0x1282, 0x12c5, 0x132e, 0x134b, 0x1376, 0x1630, + 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x17f9, 0x1803, 0x1807, + 0x1815, 0x1282, 0x1282, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, + 0x1276, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, + 0x1277, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, + 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x1277, 0x70c3, 0x4006, + 0x0078, 0x1277, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, + 0x53a3, 0x0078, 0x1274, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, + 0x1274, 0x0078, 0x1274, 0x0078, 0x1274, 0x0078, 0x1274, 0x2091, + 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, + 0x2020, 0x70d3, 0x0002, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, + 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, + 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, + 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x1078, 0x1a04, 0x00c0, + 0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x12d2, 0x2029, + 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098, + 0x2031, 0x0030, 0x81ff, 0x0040, 0x1274, 0x7007, 0x0004, 0x731a, + 0x721e, 0x7422, 0x7526, 0x2051, 0x0012, 0x2049, 0x130d, 0x2041, + 0x1274, 0x7003, 0x0002, 0xa786, 0x0001, 0x0040, 0x12f5, 0xa786, + 0x0050, 0x0040, 0x12f5, 0x0078, 0x12fb, 0x2049, 0x131a, 0x2041, + 0x1326, 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8, + 0x1303, 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040, + 0x131a, 0xa786, 0x0050, 0x0040, 0x131a, 0x700c, 0xa084, 0x007f, + 0x2009, 0x0040, 0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6, + 0x0078, 0x116b, 0x700c, 0xa084, 0x007f, 0x0040, 0x131a, 0x80ac, + 0x0048, 0x131a, 0x2698, 0x53a5, 0x0078, 0x116b, 0x700c, 0xa084, + 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x1274, 0x1078, 0x1a04, + 0x00c0, 0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x12d2, + 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1340, 0x200a, + 0x72ca, 0x0078, 0x1273, 0x70c7, 0x0002, 0x70cb, 0x000a, 0x70cf, + 0x0000, 0x0078, 0x1274, 0x1078, 0x1a04, 0x00c0, 0x1286, 0x75d8, + 0x76dc, 0x75da, 0x76de, 0x0078, 0x1358, 0x2029, 0x0000, 0x2530, + 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, + 0xa005, 0x0040, 0x1370, 0x8001, 0x788a, 0x7a92, 0x7b96, 0x7d9a, + 0x7e9e, 0x7c8e, 0x78c0, 0xa084, 0xfffc, 0x78c2, 0x0078, 0x1374, + 0x78c0, 0xa085, 0x0001, 0x78c2, 0x0078, 0x1274, 0x1078, 0x1a04, + 0x00c0, 0x1286, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1383, + 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, + 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x139b, 0x8001, 0x78a6, + 0x7aae, 0x7bb2, 0x7db6, 0x7eba, 0x7caa, 0x78c0, 0xa084, 0xfcff, + 0x78c2, 0x0078, 0x139f, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078, + 0x1274, 0x2009, 0x395f, 0x210c, 0x7ae4, 0x0078, 0x1272, 0x2009, + 0x3941, 0x210c, 0x0078, 0x1273, 0x2009, 0x3942, 0x210c, 0x0078, + 0x1273, 0x2061, 0x3940, 0x610c, 0x6210, 0x0078, 0x1272, 0x2009, + 0x3945, 0x210c, 0x0078, 0x1273, 0x2009, 0x3946, 0x210c, 0x0078, + 0x1273, 0x2009, 0x3947, 0x210c, 0x0078, 0x1273, 0x2009, 0x3948, + 0x210c, 0x0078, 0x1273, 0x7908, 0x7a0c, 0x0078, 0x1272, 0x71c4, + 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3a00, + 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x13e1, 0x6b08, 0x0078, + 0x13e2, 0x6b0c, 0x0078, 0x1271, 0x77c4, 0x1078, 0x18b4, 0x2091, + 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x1271, + 0x794c, 0x0078, 0x1273, 0x77c4, 0x1078, 0x18b4, 0x2091, 0x8000, + 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x1271, 0x71c4, + 0xa182, 0x0010, 0x00c8, 0x126c, 0x1078, 0x1d9b, 0x0078, 0x1271, + 0x71c4, 0xa182, 0x0010, 0x00c8, 0x126c, 0x2011, 0x3941, 0x2204, + 0x007e, 0x2112, 0x1078, 0x1d54, 0x017f, 0x0078, 0x1273, 0x71c4, + 0x2011, 0x1435, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x1427, + 0x8210, 0x0070, 0x1425, 0x0078, 0x141c, 0x0078, 0x126c, 0xa292, + 0x1435, 0x027e, 0x2011, 0x3942, 0x2204, 0x2112, 0x017f, 0x007e, + 0x1078, 0x1d60, 0x017f, 0x0078, 0x1273, 0x03e8, 0x00fa, 0x01f4, + 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x3940, 0x610c, + 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x1272, 0x2061, + 0x3940, 0x6114, 0x70c4, 0x6016, 0x0078, 0x1273, 0x71c4, 0x2011, + 0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x1467, 0x2011, + 0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x1467, 0x2011, + 0x0006, 0x2019, 0x2323, 0xa186, 0x003c, 0x00c0, 0x126c, 0x2061, + 0x3940, 0x6018, 0x007e, 0x611a, 0x23b8, 0x1078, 0x1d71, 0x1078, + 0x37fc, 0x017f, 0x0078, 0x1273, 0x71c4, 0xa184, 0xffcf, 0x00c0, + 0x126c, 0x2011, 0x3947, 0x2204, 0x2112, 0x007e, 0x1078, 0x1d93, + 0x017f, 0x0078, 0x1273, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x126c, + 0x2011, 0x3948, 0x2204, 0x007e, 0x2112, 0x1078, 0x1d82, 0x017f, + 0x0078, 0x1273, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x126b, + 0xa284, 0xfffd, 0x00c0, 0x126b, 0x2100, 0x7908, 0x780a, 0x2200, + 0x7a0c, 0x780e, 0x0078, 0x1272, 0x71c4, 0x8107, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3a00, 0x2019, 0x0000, 0x72c8, + 0x6800, 0x007e, 0xa226, 0x0040, 0x14d3, 0x6a02, 0xa484, 0x2000, + 0x0040, 0x14bc, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14c2, + 0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x14d3, 0x810f, 0xa284, + 0x4000, 0x0040, 0x14cf, 0x1078, 0x1db5, 0x0078, 0x14d3, 0x1078, + 0x1da7, 0x0078, 0x14d3, 0x72cc, 0x82ff, 0x0040, 0x14ff, 0x6808, + 0xa206, 0x0040, 0x14ff, 0xa2a4, 0x00ff, 0x2061, 0x3940, 0x6118, + 0xa186, 0x0028, 0x0040, 0x14ec, 0xa186, 0x0032, 0x0040, 0x14f2, + 0xa186, 0x003c, 0x0040, 0x14f8, 0xa482, 0x0064, 0x00c8, 0x126d, + 0x0078, 0x14fc, 0xa482, 0x0050, 0x00c8, 0x126d, 0x0078, 0x14fc, + 0xa482, 0x0043, 0x00c8, 0x126d, 0x6a0a, 0xa39d, 0x000a, 0x6804, + 0xa305, 0x6806, 0x027f, 0x6b0c, 0x0078, 0x1271, 0x77c4, 0x1078, + 0x18b4, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, + 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x1271, 0x70c4, 0x794c, + 0x784e, 0x0078, 0x1273, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, + 0x00c8, 0x126c, 0x1078, 0x1dc3, 0x0078, 0x1271, 0x77c4, 0x1078, + 0x18b4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, + 0x8001, 0x2708, 0x0078, 0x1272, 0x77c4, 0x1078, 0x18b4, 0x2091, + 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, + 0x1543, 0x1078, 0x1cf6, 0x2091, 0x8001, 0x2708, 0x0078, 0x1272, + 0x77c4, 0x1078, 0x18b4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, + 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1557, 0x1078, 0x1cf6, 0x2091, + 0x8001, 0x2708, 0x0078, 0x1272, 0x77c4, 0x2041, 0x0001, 0x2049, + 0x0005, 0x2051, 0x0020, 0x1078, 0x18c1, 0x2708, 0x6a08, 0x0078, + 0x1272, 0x77c4, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078, + 0x193c, 0x00c0, 0x1587, 0x6818, 0xa005, 0x0040, 0x1581, 0x2708, + 0x1078, 0x1dd3, 0x00c0, 0x1581, 0x7817, 0x0015, 0x2091, 0x8001, + 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x1276, 0x2091, + 0x8001, 0x0078, 0x1274, 0x77c4, 0x77c6, 0x2061, 0x3940, 0x60a3, + 0x0003, 0x67b6, 0x60c7, 0x000f, 0x2041, 0x0021, 0x2049, 0x0005, + 0x2051, 0x0020, 0x1078, 0x18c1, 0x7817, 0x0016, 0x1078, 0x1cf6, + 0x007c, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2061, 0x3940, 0x60a3, + 0x0002, 0x67b6, 0x60c7, 0x000f, 0x7817, 0x0017, 0x1078, 0x1cf6, + 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x18c1, + 0x8738, 0xa784, 0x0007, 0x00c0, 0x15b6, 0x007c, 0x78c0, 0xa084, + 0x0003, 0x00c0, 0x15e2, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x1078, 0x18b4, 0x2091, 0x8000, 0x6808, + 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x0007, 0x00c0, + 0x15cb, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, + 0x00c0, 0x15cb, 0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084, + 0x0040, 0x0040, 0x160b, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, + 0xa084, 0x0004, 0x0040, 0x15f8, 0x0070, 0x15f8, 0x0078, 0x15ef, + 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, + 0x1605, 0x0070, 0x1605, 0x0078, 0x15fc, 0x20a9, 0x00fa, 0x0070, + 0x160b, 0x0078, 0x1607, 0x2079, 0x3900, 0x7817, 0x0018, 0x2061, + 0x3940, 0x60a3, 0x0001, 0x60c7, 0x000f, 0x78c0, 0xa085, 0x0002, + 0x78c2, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0047, 0x2091, + 0x8001, 0x007c, 0x78c0, 0xa084, 0xfffd, 0x78c2, 0xa084, 0x0001, + 0x00c0, 0x162c, 0x1078, 0x197e, 0x71c4, 0x71c6, 0x794a, 0x007c, + 0x1078, 0x1a04, 0x00c0, 0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x0078, 0x163d, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, + 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x3900, 0x1078, 0x188d, 0x0040, + 0x16e5, 0x20a9, 0x0005, 0x20a1, 0x3916, 0x41a1, 0x2009, 0x0040, + 0x1078, 0x1857, 0x0040, 0x1658, 0x1078, 0x1896, 0x0078, 0x16e5, + 0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x16b9, 0x0c7e, + 0x2c68, 0x1078, 0x188d, 0x0040, 0x1688, 0x2c00, 0x689e, 0x8109, + 0x00c0, 0x1660, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218, 0x731c, + 0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040, 0x16b8, 0x2009, + 0x0040, 0x1078, 0x1857, 0x00c0, 0x16a1, 0x6004, 0xa084, 0x00ff, + 0xa086, 0x0002, 0x00c0, 0x1688, 0x2d00, 0x6002, 0x0078, 0x166e, + 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6, 0x0c7f, 0x609f, + 0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6008, 0xa085, 0x0200, + 0x600a, 0x6004, 0x6086, 0x1078, 0x181d, 0x1078, 0x1896, 0x0078, + 0x16e5, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6087, 0x0103, + 0x601b, 0x0003, 0x1078, 0x181d, 0x1078, 0x1896, 0x0078, 0x16e5, + 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x7817, 0x0012, 0x0e7e, + 0x2071, 0x3940, 0x70a3, 0x0005, 0x70a7, 0x0000, 0x73aa, 0x72ae, + 0x74b2, 0x70b6, 0x70bb, 0x0000, 0x2c00, 0x70be, 0x70c3, 0x0000, + 0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x16d9, 0x1078, + 0x330a, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x669a, 0x60af, 0x0000, + 0x60b3, 0x0000, 0x1078, 0x1cf6, 0x007c, 0x70c3, 0x4005, 0x0078, + 0x1277, 0x20a9, 0x0005, 0x2099, 0x3916, 0x530a, 0x2100, 0xa210, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, + 0x70c7, 0x0000, 0x7906, 0x0078, 0x1274, 0x71c4, 0x71c6, 0x2168, + 0x0078, 0x1704, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, + 0x8d68, 0x8109, 0x00c0, 0x1706, 0xa285, 0x0000, 0x00c0, 0x1714, + 0x70c3, 0x4000, 0x0078, 0x1716, 0x70c3, 0x4003, 0x70ca, 0x0078, + 0x1277, 0x79d8, 0x0078, 0x1273, 0x71c4, 0x71c6, 0x2198, 0x20a1, + 0x0042, 0x20a9, 0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, + 0x0004, 0x53a3, 0x0078, 0x1274, 0x70c4, 0x2068, 0x2079, 0x3900, + 0x1078, 0x188d, 0x0040, 0x17a4, 0x6007, 0x0001, 0x600b, 0x0000, + 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x0007, 0xa284, + 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, + 0x0800, 0x0040, 0x174f, 0x601b, 0x000a, 0x0078, 0x1755, 0xa284, + 0x1000, 0x0040, 0x1755, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, + 0x175e, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, + 0x601e, 0x6023, 0x0000, 0x6027, 0x000a, 0xa284, 0x0400, 0x0040, + 0x176b, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, + 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x1780, + 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, 0x178a, + 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, 0x6552, + 0x6596, 0x669a, 0x6014, 0x7817, 0x0042, 0x2c08, 0x2061, 0x3940, + 0x60a3, 0x0005, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x60af, 0x0000, + 0x60b3, 0x0000, 0x60b6, 0x61be, 0xa284, 0x0400, 0x60c2, 0x1078, + 0x32f5, 0x1078, 0x1cf6, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1277, + 0x78f0, 0xa005, 0x0040, 0x1282, 0x2091, 0x8000, 0x70c4, 0x800a, + 0x2011, 0x0010, 0x810c, 0x0048, 0x17ba, 0x3a00, 0xa084, 0xfff7, + 0x0078, 0x17bd, 0x3a00, 0xa085, 0x0008, 0x20d0, 0x0005, 0x0005, + 0xa084, 0xfffb, 0x20d0, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0xa085, 0x0004, 0x20d0, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x8211, 0x00c0, + 0x17b2, 0x3a00, 0xa085, 0x0008, 0x20d0, 0x2091, 0x8001, 0x0078, + 0x1274, 0x2011, 0x04fd, 0x2204, 0xa082, 0x0004, 0x0048, 0x17f5, + 0x78f3, 0x0001, 0x2009, 0xff01, 0x200a, 0x2001, 0x000c, 0x20d8, + 0x2001, 0x000c, 0x20d0, 0x0078, 0x1274, 0x2001, 0x4005, 0x0078, + 0x1276, 0x7978, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x126c, + 0x797a, 0x0078, 0x1274, 0x7978, 0x71c6, 0x0078, 0x1274, 0x796c, + 0x71c6, 0x71c4, 0x796e, 0x7970, 0x71ca, 0x71c8, 0x7972, 0x7974, + 0x71ce, 0x71cc, 0x7976, 0x0078, 0x1274, 0x796c, 0x71c6, 0x7970, + 0x71ca, 0x7974, 0x71ce, 0x0078, 0x1274, 0x700c, 0xa084, 0x00ff, + 0x0040, 0x1829, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, + 0x1824, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e, 0x7422, 0x7526, + 0xac80, 0x0001, 0x8108, 0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, + 0x6084, 0x20a2, 0x53a6, 0x780c, 0xa085, 0x0000, 0x7002, 0x7007, + 0x0001, 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1841, + 0x7108, 0x8103, 0x00c8, 0x1841, 0x7014, 0xa005, 0x0040, 0x1841, + 0x7007, 0x0002, 0xa184, 0x0060, 0x7003, 0x0000, 0x007c, 0x700c, + 0xa084, 0x00ff, 0x0040, 0x1863, 0x7007, 0x0004, 0x7004, 0xa084, + 0x0004, 0x00c0, 0x185e, 0x7017, 0x0000, 0x7112, 0x721a, 0x7422, + 0x7526, 0x731e, 0x2099, 0x0030, 0x8108, 0x81ac, 0x780c, 0xa085, + 0x0001, 0x7002, 0x7007, 0x0001, 0x2009, 0x0022, 0x2104, 0xa084, + 0x4000, 0x00c0, 0x1874, 0x7008, 0x800b, 0x00c8, 0x1874, 0x7007, + 0x0002, 0xa08c, 0x0060, 0x00c0, 0x188a, 0xac80, 0x0001, 0x20a0, + 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850, 0xa065, 0x0040, + 0x1895, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, + 0x3900, 0x7850, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x18a1, 0x1078, + 0x1eac, 0x7852, 0x0f7f, 0x007c, 0x2011, 0x4400, 0x7a52, 0x7be4, + 0x8319, 0x0040, 0x18b1, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078, + 0x18a8, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, + 0x0007, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3a80, + 0x007c, 0x1078, 0x18b4, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, + 0xa084, 0xffef, 0xa80d, 0x690a, 0x2091, 0x8000, 0x2009, 0x394f, + 0x210c, 0x6804, 0xa005, 0x0040, 0x18de, 0xa116, 0x00c0, 0x18de, + 0x2060, 0x6000, 0x6806, 0x017e, 0x0078, 0x18e1, 0x2009, 0x0000, + 0x017e, 0x6804, 0xa065, 0x0040, 0x18f0, 0x6000, 0x6806, 0x1078, + 0x1903, 0x1078, 0x1a14, 0x6810, 0x8001, 0x6812, 0x00c0, 0x18e1, + 0x017f, 0x6902, 0x6906, 0x2091, 0x8001, 0x007c, 0xa065, 0x0040, + 0x1902, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078, 0x1896, 0x2100, + 0x0078, 0x18f6, 0x007c, 0x6007, 0x0103, 0x20a9, 0x001c, 0xac80, + 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, + 0x6022, 0x007c, 0x0e7e, 0x2071, 0x3940, 0x7040, 0xa08c, 0x0080, + 0x00c0, 0x1920, 0xa088, 0x3980, 0x2d0a, 0x8000, 0x7042, 0xa006, + 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3940, 0x2009, 0x3980, 0x7240, + 0x8221, 0x8211, 0x0048, 0x193a, 0x2104, 0x8108, 0xad06, 0x00c0, + 0x1929, 0x8119, 0x211e, 0x8108, 0x8318, 0x8211, 0x00c8, 0x1932, + 0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, 0x18b4, 0x2091, 0x8000, + 0x6804, 0x781e, 0xa065, 0x0040, 0x197d, 0x0078, 0x194d, 0x2c00, + 0x781e, 0x6000, 0xa065, 0x0040, 0x197d, 0x6010, 0xa306, 0x00c0, + 0x1947, 0x600c, 0xa206, 0x00c0, 0x1947, 0x2c28, 0x6804, 0xac06, + 0x00c0, 0x1964, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x1964, + 0x6803, 0x0000, 0x0078, 0x196e, 0x6400, 0x781c, 0x2060, 0x6402, + 0xa486, 0x0000, 0x00c0, 0x196e, 0x2c00, 0x6802, 0x2560, 0x1078, + 0x1903, 0x601b, 0x0005, 0x6023, 0x0020, 0x1078, 0x1a14, 0x6810, + 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c, 0x2039, 0x0000, + 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x18c1, + 0x8738, 0xa784, 0x0007, 0x00c0, 0x1986, 0xa7bc, 0xff00, 0x873f, + 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1986, 0x007c, 0x2061, + 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x19a8, 0x2091, 0x8000, + 0x78d4, 0x78d7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x19a9, + 0x007c, 0xa08c, 0xfff0, 0x0040, 0x19af, 0x1078, 0x1eac, 0x0079, + 0x19b1, 0x19c1, 0x19c3, 0x19c9, 0x19cd, 0x19c1, 0x19d1, 0x19c1, + 0x19d8, 0x19dc, 0x19e0, 0x1a0a, 0x1a0e, 0x19c1, 0x19c1, 0x19c1, + 0x19c1, 0x1078, 0x1eac, 0x1078, 0x197e, 0x2001, 0x8001, 0x0078, + 0x1276, 0x2001, 0x8003, 0x0078, 0x1276, 0x2001, 0x8004, 0x0078, + 0x1276, 0x1078, 0x197e, 0x2001, 0x8006, 0x007c, 0x0078, 0x1276, + 0x2001, 0x8008, 0x0078, 0x1276, 0x2001, 0x8009, 0x0078, 0x1276, + 0x2091, 0x8000, 0x2069, 0x3940, 0x6800, 0xa086, 0x0000, 0x0040, + 0x19ee, 0x2091, 0x8001, 0x78d7, 0x0009, 0x007c, 0x68b4, 0xa0bc, + 0xff00, 0x2091, 0x8000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, + 0x0010, 0x1078, 0x18c1, 0x8738, 0xa784, 0x0007, 0x00c0, 0x19f9, + 0x2001, 0x800a, 0x0078, 0x1276, 0x2001, 0x04fd, 0x2004, 0xa086, + 0x0004, 0x007c, 0x2001, 0x800c, 0x0078, 0x1276, 0x1078, 0x197e, + 0x2001, 0x800d, 0x0078, 0x1276, 0x6004, 0x6086, 0x2c08, 0x2063, + 0x0000, 0x787c, 0x8000, 0x787e, 0x7880, 0xa005, 0x7982, 0x0040, + 0x1a24, 0x2c02, 0x0078, 0x1a25, 0x7986, 0x007c, 0x0c7e, 0x2061, + 0x3900, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x607c, 0x8000, + 0x607e, 0x6080, 0xa005, 0x6182, 0x0040, 0x1a39, 0x2d02, 0x0078, + 0x1a3a, 0x6186, 0x0c7f, 0x007c, 0x1078, 0x1a4d, 0x0040, 0x1a4c, + 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1a47, 0x1078, 0x18f6, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x1896, 0x007c, 0x7884, 0xa065, 0x0040, + 0x1a5f, 0x2091, 0x8000, 0x787c, 0x8001, 0x787e, 0x2c04, 0x7886, + 0xa005, 0x00c0, 0x1a5d, 0x7882, 0x8000, 0x2091, 0x8001, 0x007c, + 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1a69, + 0xa200, 0x0070, 0x1a6d, 0x0078, 0x1a64, 0x8086, 0x818e, 0x007c, + 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1a93, 0xa11a, 0x00c8, + 0x1a93, 0x8213, 0x818d, 0x0048, 0x1a84, 0xa11a, 0x00c8, 0x1a85, + 0x0070, 0x1a8b, 0x0078, 0x1a79, 0xa11a, 0x2308, 0x8210, 0x0070, + 0x1a8b, 0x0078, 0x1a79, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, + 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, + 0x1a8f, 0x798c, 0x70d0, 0x007e, 0x007f, 0xa106, 0x0040, 0x1ae9, + 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1ae9, + 0x7008, 0x7208, 0xa206, 0x00c0, 0x1ae9, 0xa286, 0x0008, 0x00c0, + 0x1ae9, 0x2071, 0x0010, 0x1078, 0x188d, 0x0040, 0x1ae9, 0x7a94, + 0x7b90, 0x7c9c, 0x7d98, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, + 0x0000, 0x2009, 0x0040, 0x1078, 0x1857, 0x2091, 0x8001, 0x0040, + 0x1ae0, 0x1078, 0x1896, 0x78a0, 0x8000, 0x78a2, 0xa086, 0x0002, + 0x00c0, 0x1ae9, 0x2091, 0x8000, 0x78d7, 0x0002, 0x78a3, 0x0000, + 0x78c0, 0xa085, 0x0003, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1ae9, + 0x78a3, 0x0000, 0x1078, 0x1c38, 0x6004, 0xa084, 0x000f, 0x0079, + 0x1aee, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x1afe, 0x1b20, + 0x1b46, 0x1afe, 0x1b58, 0x1b0d, 0x1afe, 0x1afe, 0x1afe, 0x1b1a, + 0x1b40, 0x1afe, 0x1afe, 0x1afe, 0x1afe, 0x1afe, 0x2039, 0x0400, + 0x78d0, 0xa705, 0x78d2, 0x6008, 0xa705, 0x600a, 0x1078, 0x1b96, + 0x609c, 0x78ce, 0x1078, 0x1c20, 0x007c, 0x78d0, 0xa084, 0x0100, + 0x0040, 0x1b14, 0x0078, 0x1afe, 0x601c, 0xa085, 0x0080, 0x601e, + 0x0078, 0x1b27, 0x1078, 0x1a04, 0x00c0, 0x1afe, 0x1078, 0x1c52, + 0x78d0, 0xa084, 0x0100, 0x0040, 0x1b27, 0x0078, 0x1afe, 0x78d3, + 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78c6, 0x8001, 0x609f, + 0x0000, 0x0040, 0x1b3d, 0x1078, 0x1b96, 0x0040, 0x1b3d, 0x78d0, + 0xa085, 0x0100, 0x78d2, 0x0078, 0x1b3f, 0x1078, 0x1bba, 0x007c, + 0x1078, 0x1a04, 0x00c0, 0x1afe, 0x1078, 0x1c4e, 0x78d0, 0xa08c, + 0x0e00, 0x00c0, 0x1b4f, 0xa084, 0x0100, 0x00c0, 0x1b51, 0x0078, + 0x1afe, 0x1078, 0x1b96, 0x00c0, 0x1b57, 0x1078, 0x1bba, 0x007c, + 0x78d0, 0xa084, 0x0100, 0x0040, 0x1b5f, 0x0078, 0x1afe, 0x78d3, + 0x0000, 0x6714, 0x20a9, 0x0001, 0x6018, 0xa005, 0x0040, 0x1b7a, + 0xa7bc, 0xff00, 0x20a9, 0x0008, 0xa08e, 0x0001, 0x0040, 0x1b7a, + 0x2039, 0x0000, 0x20a9, 0x0080, 0xa08e, 0x0002, 0x0040, 0x1b7a, + 0x0078, 0x1b93, 0x1078, 0x18b4, 0x2d00, 0xa088, 0x0002, 0x2091, + 0x8000, 0x2168, 0x682b, 0x0000, 0x682f, 0x0000, 0x2104, 0xa084, + 0xffde, 0x200a, 0x2100, 0xa088, 0x0010, 0x2091, 0x8001, 0x0070, + 0x1b93, 0x0078, 0x1b7f, 0x1078, 0x1896, 0x007c, 0x78c8, 0xa06d, + 0x00c0, 0x1ba1, 0x2c00, 0x78ca, 0x78ce, 0x609f, 0x0000, 0x0078, + 0x1bad, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78ca, 0x2d00, 0x6002, + 0x78cc, 0xad06, 0x00c0, 0x1bad, 0x6002, 0x78c4, 0x8001, 0x78c6, + 0x00c0, 0x1bb9, 0x78d0, 0xa084, 0x0000, 0x78d2, 0x78cc, 0x2060, + 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xc1ff, + 0x601e, 0xa184, 0x0060, 0x0040, 0x1bc9, 0x0e7e, 0x1078, 0x330a, + 0x0e7f, 0x6596, 0x669a, 0x6714, 0x1078, 0x18b4, 0x2091, 0x8000, + 0x6808, 0xa084, 0x0001, 0x0040, 0x1be5, 0x2091, 0x8001, 0x1078, + 0x1903, 0x2091, 0x8000, 0x1078, 0x1a14, 0x2091, 0x8001, 0x78cb, + 0x0000, 0x78cf, 0x0000, 0x0078, 0x1c1f, 0x6024, 0xa096, 0x0001, + 0x00c0, 0x1bec, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091, 0x8001, + 0xa202, 0x0048, 0x1bfb, 0x0040, 0x1bfb, 0x2039, 0x0200, 0x1078, + 0x1c20, 0x0078, 0x1c1f, 0x2c08, 0x2091, 0x8000, 0x6800, 0xa065, + 0x0040, 0x1c03, 0x6102, 0x6902, 0x00c0, 0x1c07, 0x6906, 0x2160, + 0x6003, 0x0000, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, + 0xa08c, 0x0040, 0x0040, 0x1c19, 0xa086, 0x0040, 0x680a, 0x1078, + 0x1912, 0x1078, 0x1cf6, 0x78cf, 0x0000, 0x78cb, 0x0000, 0x007c, + 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1a14, 0x2091, + 0x8001, 0x78cc, 0xa065, 0x0040, 0x1c33, 0x609c, 0x78ce, 0x609f, + 0x0000, 0x0078, 0x1c23, 0x78cb, 0x0000, 0x78cf, 0x0000, 0x007c, + 0x7988, 0x788c, 0x8000, 0xa10a, 0x00c8, 0x1c3f, 0xa006, 0x788e, + 0x70d2, 0x7804, 0xa005, 0x0040, 0x1c4d, 0x8001, 0x7806, 0x00c0, + 0x1c4d, 0x0068, 0x1c4d, 0x2091, 0x4080, 0x007c, 0x2039, 0x1c66, + 0x0078, 0x1c54, 0x2039, 0x1c6c, 0x2704, 0xa005, 0x0040, 0x1c65, + 0xac00, 0x2068, 0x6b08, 0x6c0c, 0x6910, 0x6a14, 0x690a, 0x6a0e, + 0x6b12, 0x6c16, 0x8738, 0x0078, 0x1c54, 0x007c, 0x0003, 0x0009, + 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0068, + 0x1c87, 0x2029, 0x0000, 0x7884, 0xa065, 0x0040, 0x1c82, 0x1078, + 0x1c88, 0x0040, 0x1c82, 0x1078, 0x1c99, 0x00c0, 0x1c82, 0x8528, + 0x0078, 0x1c73, 0x85ff, 0x0040, 0x1c87, 0x2091, 0x4080, 0x007c, + 0x7ba4, 0x79a8, 0x70d4, 0x007e, 0x007f, 0xa102, 0x00c0, 0x1c93, + 0x2300, 0xa005, 0x007c, 0x0048, 0x1c97, 0xa302, 0x007c, 0x8002, + 0x007c, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, + 0x1cdd, 0x7008, 0x7208, 0xa206, 0x00c0, 0x1cdd, 0xa286, 0x0008, + 0x00c0, 0x1cdd, 0x2071, 0x0010, 0x1078, 0x1ce2, 0x2009, 0x001c, + 0x6028, 0xa005, 0x0040, 0x1cb6, 0x2009, 0x0040, 0x1078, 0x181d, + 0x0040, 0x1ccf, 0x78bc, 0x8000, 0x78be, 0xa086, 0x0002, 0x00c0, + 0x1cdd, 0x2091, 0x8000, 0x78d7, 0x0003, 0x78bf, 0x0000, 0x78c0, + 0xa085, 0x0300, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1cdd, 0x78bf, + 0x0000, 0x1078, 0x1a3c, 0x79a4, 0x78a8, 0x8000, 0xa10a, 0x00c8, + 0x1cda, 0xa006, 0x78aa, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, + 0x8001, 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab0, 0x7bac, 0x7cb8, + 0x7db4, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, + 0x007c, 0x2009, 0x3968, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, + 0x0100, 0x2009, 0x3940, 0x2091, 0x8000, 0x2104, 0xa086, 0x0000, + 0x00c0, 0x1d11, 0x2009, 0x3912, 0x2104, 0xa005, 0x00c0, 0x1d11, + 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1d11, 0x0018, 0x1d11, 0x781b, + 0x0045, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, + 0x2071, 0x3940, 0x2079, 0x0100, 0x784b, 0x000f, 0x2019, 0x3205, + 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x1d2f, 0x789a, 0x8318, + 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, 0x1d22, 0x789b, + 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x0020, 0x0070, + 0x1d3b, 0x0078, 0x1d33, 0x7003, 0x0000, 0x1078, 0x1e40, 0x7004, + 0xa084, 0x000f, 0xa085, 0x6280, 0x7806, 0x780f, 0x9200, 0x7843, + 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x397f, 0x7043, + 0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, + 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x1e40, 0x007c, + 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x1d69, 0x0078, + 0x1d64, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, + 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x1d7a, + 0x0078, 0x1d75, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, + 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, + 0x1d8b, 0x0078, 0x1d86, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, + 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, + 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, + 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, + 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, + 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, + 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, + 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, + 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, + 0x2018, 0x0c7f, 0x007c, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, + 0x1e1c, 0x2061, 0x4380, 0x1078, 0x1e22, 0x0040, 0x1e06, 0x20a9, + 0x0000, 0x2061, 0x4280, 0x0c7e, 0x1078, 0x1e22, 0x0040, 0x1df0, + 0x0c7f, 0x8c60, 0x0070, 0x1dee, 0x0078, 0x1de3, 0x0078, 0x1e1c, + 0x007f, 0xa082, 0x4280, 0x2071, 0x3940, 0x70ba, 0x6020, 0xa085, + 0x0800, 0x6022, 0x2091, 0x8001, 0x71b6, 0x2001, 0x0004, 0x70a2, + 0x70c7, 0x000f, 0x1078, 0x1cf1, 0x0078, 0x1e18, 0x2071, 0x3940, + 0x6020, 0xa085, 0x0800, 0x6022, 0x2091, 0x8001, 0x71b6, 0x2c00, + 0x70be, 0x2001, 0x0006, 0x70a2, 0x70c7, 0x000f, 0x1078, 0x1cf1, + 0x2001, 0x0000, 0x0078, 0x1e1e, 0x2001, 0x0001, 0xa005, 0x0e7f, + 0x0c7f, 0x007c, 0x2091, 0x8000, 0x2c04, 0xa005, 0x0040, 0x1e3b, + 0x2060, 0x6010, 0xa306, 0x00c0, 0x1e38, 0x600c, 0xa206, 0x00c0, + 0x1e38, 0x6014, 0xa106, 0x00c0, 0x1e38, 0xa006, 0x0078, 0x1e3f, + 0x6000, 0x0078, 0x1e25, 0xa085, 0x0001, 0x2091, 0x8001, 0x007c, + 0x2011, 0x3941, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, + 0xa084, 0x0100, 0x0040, 0x1e56, 0x2021, 0xff04, 0x2122, 0x810b, + 0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, + 0x68e4, 0xa08c, 0x0020, 0x0040, 0x1eaa, 0xa084, 0x0006, 0x00c0, + 0x1eaa, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, + 0xa0f0, 0x3a00, 0x7004, 0xa084, 0x000a, 0x00c0, 0x1eaa, 0x7108, + 0xa194, 0xff00, 0x0040, 0x1eaa, 0xa18c, 0x00ff, 0x2001, 0x000c, + 0xa106, 0x0040, 0x1e91, 0x2001, 0x0012, 0xa106, 0x0040, 0x1e95, + 0x2001, 0x0014, 0xa106, 0x0040, 0x1e99, 0x2001, 0x0019, 0xa106, + 0x0040, 0x1e9d, 0x2001, 0x0032, 0xa106, 0x0040, 0x1ea1, 0x0078, + 0x1ea5, 0x2009, 0x0012, 0x0078, 0x1ea7, 0x2009, 0x0014, 0x0078, + 0x1ea7, 0x2009, 0x0019, 0x0078, 0x1ea7, 0x2009, 0x0020, 0x0078, + 0x1ea7, 0x2009, 0x003f, 0x0078, 0x1ea7, 0x2011, 0x0000, 0x2100, + 0xa205, 0x700a, 0x0e7f, 0x007c, 0x2071, 0x0010, 0x70ca, 0x007f, + 0x70c6, 0x70c3, 0x8002, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, + 0x4080, 0x0078, 0x1eb9, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, + 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x2009, 0x3974, 0x78a0, 0x200a, + 0x8108, 0x250a, 0x8108, 0x240a, 0x8108, 0x260a, 0x8108, 0x270a, + 0xa594, 0x003f, 0xa484, 0x4000, 0x0040, 0x1edc, 0xa784, 0x007c, + 0x00c0, 0x318f, 0x1078, 0x1eac, 0xa49c, 0x000f, 0xa382, 0x0004, + 0x0050, 0x1ee4, 0x1078, 0x1eac, 0x8507, 0xa084, 0x000f, 0x0079, + 0x1ee9, 0x236e, 0x240d, 0x242e, 0x2699, 0x28dd, 0x293b, 0x2984, + 0x29f0, 0x2a8d, 0x2b1a, 0x1f11, 0x1ef9, 0x21c3, 0x2288, 0x28bc, + 0x1ef9, 0x1078, 0x1eac, 0x0018, 0x1ec0, 0x127f, 0x2091, 0x8001, + 0x007f, 0x107f, 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030, + 0xa005, 0x0040, 0x1f0d, 0x7033, 0x0000, 0x1078, 0x316a, 0x0018, + 0x1ec0, 0x2009, 0x390f, 0x200b, 0x0000, 0x705c, 0xa005, 0x00c0, + 0x1fe2, 0x70a0, 0xa084, 0x0007, 0x0079, 0x1f1e, 0x2005, 0x1f26, + 0x1f34, 0x1f51, 0x1f73, 0x1fc0, 0x1f99, 0x1f26, 0x7808, 0xa084, + 0xfffd, 0x780a, 0x2009, 0x0047, 0x1078, 0x27c1, 0x00c0, 0x1f32, + 0x7003, 0x0004, 0x0078, 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f4f, + 0x70b4, 0x8007, 0x7882, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b, + 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078, + 0x27bf, 0x00c0, 0x1f4f, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078, + 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f71, 0x71b4, 0x8107, 0x7882, + 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, + 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009, + 0x00fb, 0x1078, 0x27bf, 0x00c0, 0x1f71, 0x7003, 0x0004, 0x70c7, + 0x000f, 0x0078, 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f97, 0x71b4, + 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, + 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b, + 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078, + 0x27bf, 0x00c0, 0x1f97, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078, + 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1fbe, 0x71b4, 0x8107, 0x7882, + 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, + 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009, + 0x00fb, 0x1078, 0x27bf, 0x00c0, 0x1fbe, 0x70bc, 0x70bf, 0x0000, + 0x2068, 0x703e, 0x7003, 0x0002, 0x70c7, 0x000f, 0x0078, 0x1efb, + 0x1078, 0x3151, 0x00c0, 0x1efb, 0x70bc, 0x2068, 0x1078, 0x31f3, + 0x789b, 0x0010, 0x6814, 0xa084, 0x0007, 0xa085, 0x0080, 0x007e, + 0x007f, 0x78aa, 0x6e1c, 0x067e, 0x067f, 0x2041, 0x0001, 0x70c0, + 0xa084, 0x0400, 0x2001, 0x0004, 0x0040, 0x1fe0, 0x2001, 0x0006, + 0x0078, 0x20e1, 0x1078, 0x3151, 0x00c0, 0x1efb, 0x789b, 0x0010, + 0x705c, 0x2068, 0x1078, 0x31f3, 0x6f14, 0x1078, 0x3099, 0x6008, + 0xa085, 0x0010, 0x600a, 0xad80, 0x0009, 0x2003, 0x0005, 0x6814, + 0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, + 0x0001, 0x2001, 0x0003, 0x0078, 0x20e1, 0x0018, 0x1ec0, 0x7440, + 0xa485, 0x0000, 0x0040, 0x201f, 0xa080, 0x3980, 0x2030, 0x7144, + 0x8108, 0xa12a, 0x0048, 0x2016, 0x2009, 0x3980, 0x2164, 0x6504, + 0x85ff, 0x00c0, 0x202c, 0x8421, 0x00c0, 0x2010, 0x7146, 0x7003, + 0x0000, 0x703f, 0x0000, 0x0078, 0x1efb, 0x7640, 0xa6b0, 0x3980, + 0x7144, 0x2600, 0x0078, 0x201b, 0x7146, 0x2568, 0x2558, 0x753e, + 0x2c50, 0x6708, 0x7736, 0xa784, 0x013f, 0x0040, 0x2059, 0xa784, + 0x0021, 0x00c0, 0x2029, 0xa784, 0x0002, 0x0040, 0x2046, 0xa784, + 0x0004, 0x0040, 0x2029, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008, + 0x00c0, 0x2029, 0xa784, 0x0010, 0x00c0, 0x2029, 0xa784, 0x0100, + 0x0040, 0x2059, 0x6018, 0xa005, 0x00c0, 0x2029, 0xa7bc, 0xfeff, + 0x670a, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, + 0x2069, 0x601c, 0xa102, 0x0048, 0x206c, 0x0040, 0x206c, 0x0078, + 0x2025, 0x81ff, 0x00c0, 0x2025, 0xa784, 0x0080, 0x00c0, 0x2072, + 0x700c, 0x6022, 0x1078, 0x31f3, 0x0018, 0x1ec0, 0x789b, 0x0010, + 0xa046, 0x1078, 0x3151, 0x00c0, 0x1efb, 0x6b14, 0xa39c, 0x0007, + 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x208b, 0xa684, + 0x0001, 0x0040, 0x208d, 0xa39c, 0xffbf, 0xa684, 0x0010, 0x0040, + 0x2093, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, 0x00c0, + 0x209e, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x20df, 0x714c, 0xa18c, + 0x0800, 0x0040, 0x2cfc, 0x2011, 0x0021, 0x8004, 0x8004, 0x0048, + 0x20b5, 0x2011, 0x0022, 0x8004, 0x0048, 0x20b5, 0x2011, 0x0020, + 0x8004, 0x0048, 0x20b5, 0x0040, 0x20df, 0x7aaa, 0x8840, 0x1078, + 0x316a, 0x6a14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0, 0x4280, + 0x2c64, 0x8cff, 0x0040, 0x20d6, 0x6014, 0xa206, 0x00c0, 0x20c0, + 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x20bb, 0x0c7e, 0x2a60, 0x6008, + 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x2005, 0x1078, 0x3151, + 0x00c0, 0x1efb, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e, 0x2001, + 0x0001, 0x007e, 0x7150, 0xa184, 0x0018, 0x0040, 0x20fc, 0xa184, + 0x0010, 0x0040, 0x20ef, 0x1078, 0x2ee3, 0x00c0, 0x211f, 0xa184, + 0x0008, 0x0040, 0x20fc, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x20fc, + 0x1078, 0x2ddf, 0x0078, 0x211f, 0x69a0, 0xa184, 0x0800, 0x0040, + 0x2113, 0x0c7e, 0x027e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, + 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f, 0x0c7f, 0x1078, 0x2ee3, + 0x00c0, 0x211f, 0x69a0, 0xa184, 0x0200, 0x0040, 0x211b, 0x1078, + 0x2e2e, 0x0078, 0x211f, 0xa184, 0x0400, 0x00c0, 0x20f8, 0x69a0, + 0xa184, 0x1000, 0x0040, 0x212a, 0x6914, 0xa18c, 0xff00, 0x810f, + 0x1078, 0x1da7, 0x007f, 0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060, + 0x0040, 0x2138, 0xa086, 0x0060, 0x00c0, 0x2138, 0xa18d, 0x4000, + 0x88ff, 0x0040, 0x213d, 0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b, + 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, 0x6818, 0xa08d, 0x8000, + 0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080, 0x0040, 0x215c, 0x70cb, + 0x0000, 0xa08a, 0x000d, 0x0050, 0x215a, 0xa08a, 0x000c, 0x71ca, + 0x2001, 0x000c, 0x800c, 0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040, + 0x2d07, 0xa18c, 0x00f8, 0x00c0, 0x2d07, 0x157e, 0x137e, 0x147e, + 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, + 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, + 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2, 0x7eda, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x2185, 0x0098, 0x218d, 0x6008, 0xa084, 0xffef, + 0x600a, 0x1078, 0x316a, 0x0078, 0x1f03, 0x7200, 0xa284, 0x0007, + 0xa086, 0x0001, 0x00c0, 0x219a, 0x781b, 0x004a, 0x1078, 0x316a, + 0x0078, 0x21ab, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a, + 0x1078, 0x316a, 0x7200, 0x2500, 0xa605, 0x0040, 0x21ab, 0xa284, + 0x0007, 0x1079, 0x21b9, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, + 0x1efb, 0x6018, 0x8000, 0x601a, 0xad80, 0x0009, 0x7032, 0x0078, + 0x1efb, 0x21c1, 0x3571, 0x3571, 0x3560, 0x3571, 0x21c1, 0x3560, + 0x21c1, 0x1078, 0x1eac, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, + 0x2079, 0x3900, 0x78c0, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x21e9, + 0x70a0, 0xa086, 0x0001, 0x00c0, 0x21d8, 0x70a2, 0x0078, 0x226c, + 0x70a0, 0xa086, 0x0005, 0x00c0, 0x21e7, 0x70bc, 0x2068, 0x681b, + 0x0004, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x70a3, + 0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, + 0x2207, 0xa186, 0x0007, 0x00c0, 0x21fb, 0x2009, 0x3935, 0x200b, + 0x0005, 0x0078, 0x2207, 0x2009, 0x3913, 0x2104, 0x2009, 0x3912, + 0x200a, 0x2009, 0x3935, 0x200b, 0x0001, 0x0078, 0x2209, 0x70a3, + 0x0000, 0x1078, 0x32f5, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078, + 0x2f9a, 0xa7b8, 0x0100, 0x0070, 0x2217, 0x0078, 0x220f, 0x7000, + 0x0079, 0x221a, 0x2248, 0x2231, 0x2231, 0x2224, 0x2248, 0x2248, + 0x2248, 0x2222, 0x1078, 0x1eac, 0x2021, 0x3957, 0x2404, 0xa005, + 0x0040, 0x2248, 0xad06, 0x00c0, 0x2231, 0x6800, 0x2022, 0x0078, + 0x2241, 0x6820, 0xa084, 0x0001, 0x00c0, 0x223d, 0x6f14, 0x1078, + 0x3099, 0x1078, 0x2cc9, 0x0078, 0x2241, 0x7054, 0x2060, 0x6800, + 0x6002, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x1a26, + 0x2021, 0x4380, 0x1078, 0x2272, 0x2021, 0x3957, 0x1078, 0x2272, + 0x20a9, 0x0000, 0x2021, 0x4280, 0x1078, 0x2272, 0x8420, 0x0070, + 0x225b, 0x0078, 0x2254, 0x20a9, 0x0080, 0x2061, 0x3a80, 0x6018, + 0x6110, 0xa102, 0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, + 0x226b, 0x0078, 0x225f, 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, + 0x0078, 0x1efb, 0x047e, 0x2404, 0xa005, 0x0040, 0x2284, 0x2068, + 0x6800, 0x007e, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, + 0x1a26, 0x007f, 0x0078, 0x2274, 0x047f, 0x2023, 0x0000, 0x007c, + 0xa282, 0x0003, 0x0050, 0x228e, 0x1078, 0x1eac, 0x2300, 0x0079, + 0x2291, 0x2294, 0x2311, 0x232e, 0xa282, 0x0002, 0x0040, 0x229a, + 0x1078, 0x1eac, 0x70a0, 0x70a3, 0x0000, 0x70c7, 0x0000, 0x0079, + 0x22a1, 0x22a9, 0x22a9, 0x22ab, 0x22e9, 0x2d0d, 0x22a9, 0x22e9, + 0x22a9, 0x1078, 0x1eac, 0x77b4, 0x1078, 0x2f9a, 0x77b4, 0xa7bc, + 0x0f00, 0x1078, 0x3099, 0x6018, 0xa005, 0x0040, 0x22e0, 0x2021, + 0x4380, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x0040, + 0x22e0, 0x157e, 0x20a9, 0x0000, 0x2021, 0x4280, 0x047e, 0x2009, + 0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x047f, 0x0040, 0x22d5, + 0x8420, 0x0070, 0x22d5, 0x0078, 0x22c6, 0x157f, 0x2021, 0x3957, + 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x0040, 0x22e0, + 0x8738, 0xa784, 0x0007, 0x00c0, 0x22b1, 0x0078, 0x1f03, 0x0078, + 0x1f03, 0x77b4, 0x1078, 0x3099, 0x6018, 0xa005, 0x0040, 0x230f, + 0x2021, 0x4380, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2349, + 0x0040, 0x230f, 0x157e, 0x20a9, 0x0000, 0x2021, 0x4280, 0x047e, + 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2349, 0x047f, 0x0040, + 0x230e, 0x8420, 0x0070, 0x230e, 0x0078, 0x22ff, 0x157f, 0x0078, + 0x1f03, 0x2200, 0x0079, 0x2314, 0x2317, 0x2319, 0x2319, 0x1078, + 0x1eac, 0x2009, 0x0012, 0x70a0, 0xa086, 0x0002, 0x0040, 0x2322, + 0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x2328, 0x691a, + 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x311c, 0x2200, 0x0079, + 0x2331, 0x2336, 0x2319, 0x2334, 0x1078, 0x1eac, 0x1078, 0x27ce, + 0x7000, 0xa086, 0x0001, 0x00c0, 0x2c9f, 0x1078, 0x2cdf, 0x6008, + 0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x2c9f, 0x0078, + 0x2005, 0x2404, 0xa005, 0x0040, 0x236a, 0x2068, 0x2d04, 0x007e, + 0x6814, 0xa706, 0x0040, 0x2358, 0x2d20, 0x007f, 0x0078, 0x234a, + 0x007f, 0x2022, 0x691a, 0x6820, 0xa205, 0x6822, 0x1078, 0x1a26, + 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, + 0x2cdf, 0x007c, 0xa085, 0x0001, 0x0078, 0x2369, 0x2300, 0x0079, + 0x2371, 0x2376, 0x2374, 0x23c2, 0x1078, 0x1eac, 0x78e4, 0xa005, + 0x00d0, 0x238a, 0x0018, 0x238a, 0xa084, 0x0007, 0x0079, 0x2380, + 0x239b, 0x23a8, 0x238e, 0x2388, 0x3144, 0x3144, 0x2388, 0x23b5, + 0x1078, 0x1eac, 0x2001, 0x0003, 0x0078, 0x26ad, 0x6818, 0xa084, + 0x8000, 0x0040, 0x2395, 0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b, + 0x0053, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040, 0x23a2, + 0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b, 0x00de, 0x0078, 0x1efb, + 0x6818, 0xa084, 0x8000, 0x0040, 0x23af, 0x681b, 0x001d, 0x1078, + 0x2f7d, 0x781b, 0x00e5, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, + 0x0040, 0x23bc, 0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b, 0x009c, + 0x0078, 0x1efb, 0xa584, 0x000f, 0x00c0, 0x23e1, 0x1078, 0x27ce, + 0x7000, 0x0079, 0x23cb, 0x23d3, 0x23d5, 0x23d3, 0x2c9f, 0x2c9f, + 0x2c9f, 0x2c9f, 0x23d3, 0x1078, 0x1eac, 0x1078, 0x2cdf, 0x6008, + 0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x2c9f, 0x0078, + 0x2005, 0x79e4, 0xa005, 0x00d0, 0x238a, 0x0018, 0x238a, 0xa184, + 0x0007, 0x0079, 0x23eb, 0x23fb, 0x2401, 0x23f5, 0x23f3, 0x3144, + 0x3144, 0x23f3, 0x313c, 0x1078, 0x1eac, 0x1078, 0x2f85, 0x781b, + 0x0053, 0x0078, 0x1efb, 0x1078, 0x2f85, 0x781b, 0x00de, 0x0078, + 0x1efb, 0x1078, 0x2f85, 0x781b, 0x00e5, 0x0078, 0x1efb, 0x1078, + 0x2f85, 0x781b, 0x009c, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2410, + 0x2415, 0x2413, 0x2417, 0x1078, 0x1eac, 0x0078, 0x29f0, 0x681b, + 0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x29f0, + 0xa184, 0x0007, 0x0079, 0x2424, 0x242c, 0x2401, 0x238e, 0x311c, + 0x3144, 0x3144, 0x242c, 0x313c, 0x1078, 0x1eac, 0xa282, 0x0005, + 0x0050, 0x2434, 0x1078, 0x1eac, 0x2300, 0x0079, 0x2437, 0x243a, + 0x265e, 0x266a, 0x2200, 0x0079, 0x243d, 0x2457, 0x2444, 0x2457, + 0x2442, 0x2643, 0x1078, 0x1eac, 0x789b, 0x0018, 0x78a8, 0xa084, + 0x00ff, 0xa082, 0x0020, 0x0048, 0x2f69, 0xa08a, 0x0004, 0x00c8, + 0x2f69, 0x0079, 0x2453, 0x2f69, 0x2f69, 0x2f69, 0x2f23, 0x789b, + 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x246c, 0xa184, 0x0018, + 0x0040, 0x2468, 0x0078, 0x2f69, 0x7000, 0xa005, 0x00c0, 0x2462, + 0x2011, 0x0004, 0x0078, 0x2b28, 0xa184, 0x00ff, 0xa08a, 0x0010, + 0x00c8, 0x2f69, 0x0079, 0x2474, 0x2486, 0x2484, 0x249e, 0x24a2, + 0x255a, 0x2f69, 0x2f69, 0x255c, 0x2f69, 0x2f69, 0x263f, 0x263f, + 0x2f69, 0x2f69, 0x2f69, 0x2641, 0x1078, 0x1eac, 0xa684, 0x1000, + 0x0040, 0x2493, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, + 0x0099, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040, 0x249c, + 0x681b, 0x001d, 0x0078, 0x248a, 0x0078, 0x311c, 0x681b, 0x001d, + 0x0078, 0x2f75, 0x6920, 0xa184, 0x8000, 0x00c0, 0x24ae, 0x68af, + 0x0000, 0x68b3, 0x0000, 0xa18d, 0x8000, 0x6922, 0xa684, 0x1800, + 0x00c0, 0x24ed, 0x6820, 0xa084, 0x0001, 0x00c0, 0x24f3, 0x6818, + 0xa086, 0x0008, 0x00c0, 0x24be, 0x681b, 0x0000, 0xa684, 0x0400, + 0x0040, 0x2556, 0xa684, 0x0080, 0x0040, 0x24e9, 0x70cb, 0x0000, + 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x24e9, 0xa08a, + 0x000c, 0x71ca, 0x2001, 0x000c, 0x800c, 0x71ce, 0x789b, 0x0061, + 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, + 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, + 0x157f, 0x781b, 0x0056, 0x0078, 0x1efb, 0xa684, 0x1000, 0x0040, + 0x24f3, 0x0078, 0x1efb, 0xa684, 0x0060, 0x0040, 0x2552, 0xa684, + 0x0800, 0x0040, 0x2552, 0xa684, 0x8000, 0x00c0, 0x2503, 0x69b0, + 0x6aac, 0x0078, 0x251d, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, + 0x0074, 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2510, 0x8000, + 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, + 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, + 0x2525, 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0xa006, 0x1078, 0x362f, + 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x2534, + 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, + 0x2300, 0xa405, 0x00c0, 0x2544, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, + 0x781b, 0x0065, 0x0078, 0x1efb, 0x781b, 0x0065, 0x2200, 0xa115, + 0x00c0, 0x254e, 0x1078, 0x3571, 0x0078, 0x1efb, 0x1078, 0x35a6, + 0x0078, 0x1efb, 0x781b, 0x0068, 0x0078, 0x1efb, 0x781b, 0x0056, + 0x0078, 0x1efb, 0x1078, 0x1eac, 0x0078, 0x25b1, 0x6920, 0xa184, + 0x0100, 0x0040, 0x2570, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7048, + 0x2060, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x25a0, + 0xa184, 0x0200, 0x0040, 0x25a0, 0xa18c, 0xfdff, 0x6922, 0x0c7e, + 0x7048, 0x2060, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, + 0x0c7f, 0xa184, 0x0008, 0x0040, 0x25a0, 0x1078, 0x3095, 0x1078, + 0x2ddf, 0x88ff, 0x0040, 0x25a0, 0x789b, 0x0060, 0x2800, 0x78aa, + 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x259c, + 0x781b, 0x0053, 0x0078, 0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb, + 0x7e58, 0xa684, 0x0400, 0x00c0, 0x25a9, 0x781b, 0x0056, 0x0078, + 0x1efb, 0x781b, 0x0068, 0x0078, 0x1efb, 0x0078, 0x2f6f, 0x0078, + 0x2f6f, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x25af, + 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, + 0x25d4, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x25cc, + 0x0048, 0x25cc, 0x0078, 0x25ce, 0x0078, 0x255e, 0x24a8, 0x7aa8, + 0x00f0, 0x25ce, 0x0078, 0x25ba, 0xa284, 0x00f0, 0xa086, 0x0020, + 0x00c0, 0x2630, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x25e4, + 0x0048, 0x25e4, 0x0078, 0x262d, 0xa286, 0x0023, 0x0040, 0x25af, + 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xa085, + 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a, 0x0c7e, + 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0010, + 0x0040, 0x2608, 0x1078, 0x3095, 0x1078, 0x2ee3, 0x0078, 0x2617, + 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, + 0x0008, 0x0040, 0x25a0, 0x1078, 0x3095, 0x1078, 0x2ddf, 0x88ff, + 0x0040, 0x25a0, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004, + 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2629, 0x781b, 0x0053, 0x0078, + 0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb, 0x7aa8, 0x0078, 0x25ba, + 0x8318, 0x2300, 0xa102, 0x0040, 0x2639, 0x0048, 0x2639, 0x0078, + 0x25ba, 0xa284, 0x0080, 0x00c0, 0x2f75, 0x0078, 0x2f6f, 0x0078, + 0x2f75, 0x0078, 0x2f69, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, + 0xa08e, 0x0001, 0x0040, 0x264e, 0x1078, 0x1eac, 0x7aa8, 0xa294, + 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x2f69, + 0x0079, 0x265a, 0x2f69, 0x2d32, 0x2f69, 0x2e7e, 0xa282, 0x0000, + 0x00c0, 0x2664, 0x1078, 0x1eac, 0x1078, 0x2f7d, 0x781b, 0x0067, + 0x0078, 0x1efb, 0xa282, 0x0003, 0x00c0, 0x2670, 0x1078, 0x1eac, + 0xa484, 0x8000, 0x00c0, 0x2693, 0x70a0, 0xa005, 0x0040, 0x267a, + 0x1078, 0x1eac, 0x6f14, 0x77b6, 0xa7bc, 0x0f00, 0x1078, 0x3099, + 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x0007, 0x00c0, + 0x267e, 0x1078, 0x2f81, 0x70a3, 0x0002, 0x2009, 0x3935, 0x200b, + 0x0009, 0x0078, 0x2695, 0x1078, 0x2f8d, 0x781b, 0x0067, 0x0078, + 0x1efb, 0xa282, 0x0004, 0x0050, 0x269f, 0x1078, 0x1eac, 0x2300, + 0x0079, 0x26a2, 0x26a5, 0x2781, 0x27a9, 0xa286, 0x0003, 0x0040, + 0x26ab, 0x1078, 0x1eac, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, + 0x0007, 0x0079, 0x26b3, 0x26bb, 0x26bd, 0x26bd, 0x2871, 0x28a2, + 0x1f03, 0x28a2, 0x26bb, 0x1078, 0x1eac, 0xa684, 0x1000, 0x00c0, + 0x26c5, 0x1078, 0x32f5, 0x0040, 0x275b, 0x7868, 0xa08c, 0x00ff, + 0x0040, 0x270d, 0xa186, 0x0008, 0x00c0, 0x26dc, 0x1078, 0x2cdf, + 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x270d, + 0x1078, 0x32f5, 0x0078, 0x26f4, 0xa186, 0x0028, 0x00c0, 0x270d, + 0x1078, 0x32f5, 0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, + 0x0040, 0x26f4, 0x8001, 0x601a, 0xa005, 0x0040, 0x26f4, 0x8001, + 0xa005, 0x0040, 0x26f4, 0x601e, 0x6820, 0xa084, 0x0001, 0x0040, + 0x1f03, 0x6820, 0xa084, 0xfffe, 0x6822, 0x7054, 0x0c7e, 0x2060, + 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, + 0x270a, 0x6002, 0x6006, 0x0078, 0x1f03, 0x017e, 0x1078, 0x27ce, + 0x017f, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, + 0x0040, 0x275b, 0xa186, 0x0002, 0x00c0, 0x2753, 0xa684, 0x0800, + 0x00c0, 0x272a, 0xa684, 0x0060, 0x0040, 0x272a, 0x78d8, 0x7adc, + 0x682e, 0x6a32, 0x6820, 0xa084, 0x0800, 0x00c0, 0x275b, 0x8717, + 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xa290, 0x3a00, 0xa290, + 0x0000, 0x221c, 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, + 0xa384, 0x0400, 0x0040, 0x274d, 0x68a0, 0xa084, 0x0100, 0x00c0, + 0x274d, 0x1078, 0x2830, 0x0078, 0x1f03, 0x6008, 0xa085, 0x0002, + 0x600a, 0x0078, 0x275b, 0xa186, 0x0018, 0x0040, 0x275b, 0xa186, + 0x0014, 0x0040, 0x1f03, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040, + 0x2763, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x2cd0, + 0x1078, 0x2cdf, 0x00c0, 0x2770, 0x6008, 0xa084, 0xffef, 0x600a, + 0x6820, 0xa084, 0x0001, 0x00c0, 0x2779, 0x1078, 0x2cc9, 0x0078, + 0x277d, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078, 0x1a26, 0x0078, + 0x1f03, 0xa282, 0x0004, 0x0048, 0x2787, 0x1078, 0x1eac, 0x2200, + 0x0079, 0x278a, 0x2785, 0x278e, 0x2794, 0x278e, 0x1078, 0x2f7d, + 0x781b, 0x0067, 0x0078, 0x1efb, 0x7890, 0x8007, 0x8001, 0xa084, + 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, + 0x0003, 0x0040, 0x27a5, 0x0078, 0x2f69, 0x781b, 0x0068, 0x0078, + 0x1efb, 0x6820, 0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0, 0x27b4, + 0x1078, 0x2f7d, 0x0078, 0x27bb, 0x8211, 0x0040, 0x27b9, 0x1078, + 0x1eac, 0x1078, 0x2f8d, 0x781b, 0x0067, 0x0078, 0x1efb, 0x1078, + 0x316a, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x27cb, 0x0018, 0x27cb, + 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, + 0x00c0, 0x27d8, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x282f, + 0xa684, 0x0800, 0x00c0, 0x27e8, 0x6998, 0x6a94, 0x692e, 0x6a32, + 0x7000, 0xa086, 0x0006, 0x0040, 0x27e7, 0x1078, 0x32f5, 0x007c, + 0xa684, 0x0020, 0x0040, 0x2802, 0xa684, 0x4000, 0x0040, 0x27f6, + 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x27e0, 0x7038, 0xa005, + 0x00c0, 0x27fc, 0x703b, 0x0015, 0x79d8, 0x7adc, 0x692e, 0x6a32, + 0x0078, 0x27e0, 0xa684, 0x4000, 0x0040, 0x280c, 0x682f, 0x0000, + 0x6833, 0x0000, 0x0078, 0x27e0, 0x7038, 0xa005, 0x00c0, 0x2812, + 0x703b, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x2819, + 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, + 0x2100, 0xa205, 0x00c0, 0x2826, 0x0078, 0x27e0, 0x7000, 0xa086, + 0x0006, 0x0040, 0x282f, 0x1078, 0x362f, 0x0078, 0x27e0, 0x007c, + 0xa384, 0x0200, 0x0040, 0x2838, 0x6008, 0xa085, 0x0002, 0x600a, + 0x681b, 0x0006, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, + 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, + 0x7000, 0x0079, 0x284b, 0x2853, 0x2855, 0x285e, 0x2853, 0x2853, + 0x2853, 0x2853, 0x2853, 0x1078, 0x1eac, 0x6820, 0xa084, 0x0001, + 0x00c0, 0x285e, 0x1078, 0x2cc9, 0x0078, 0x2864, 0x7054, 0x2c50, + 0x2060, 0x6800, 0x6002, 0x2a60, 0x2021, 0x3957, 0x2404, 0xa005, + 0x0040, 0x286d, 0x2020, 0x0078, 0x2866, 0x2d22, 0x206b, 0x0000, + 0x007c, 0x1078, 0x2cd0, 0x1078, 0x2cdf, 0x682b, 0x0000, 0x789b, + 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x366b, 0xa684, 0x0800, + 0x0040, 0x2886, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, 0xa084, + 0x8000, 0x0040, 0x2896, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2894, + 0x681b, 0x001e, 0x0078, 0x2896, 0x681b, 0x0000, 0x2021, 0x3957, + 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1a26, + 0x0078, 0x1f03, 0x1078, 0x27ce, 0x682b, 0x0000, 0x789b, 0x000e, + 0x6f14, 0x1078, 0x316f, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084, + 0x8000, 0x0040, 0x28b5, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, + 0x70a3, 0x0000, 0x0078, 0x1f03, 0xa006, 0x1078, 0x32f5, 0x6817, + 0x0000, 0x681b, 0x0001, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, + 0x7000, 0x0079, 0x28cb, 0x28d3, 0x28d5, 0x28d5, 0x28d7, 0x28d7, + 0x28d7, 0x28d7, 0x28d3, 0x1078, 0x1eac, 0x1078, 0x2cdf, 0x6008, + 0xa084, 0xffef, 0x600a, 0x0078, 0x2caa, 0x2300, 0x0079, 0x28e0, + 0x28e3, 0x28e5, 0x2939, 0x1078, 0x1eac, 0x7000, 0x0079, 0x28e8, + 0x28f0, 0x28f2, 0x28f2, 0x290d, 0x28f2, 0x291a, 0x290d, 0x28f0, + 0x1078, 0x1eac, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2909, + 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, + 0xa084, 0xffdf, 0x681e, 0x1078, 0x32f5, 0x1078, 0x3571, 0x0078, + 0x311c, 0xa684, 0x2000, 0x0040, 0x28fc, 0x6818, 0xa084, 0x8000, + 0x0040, 0x291a, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x291a, + 0x681b, 0x0007, 0x2009, 0x391e, 0x210c, 0xa186, 0x0000, 0x0040, + 0x292f, 0xa186, 0x0001, 0x0040, 0x2933, 0x2009, 0x3935, 0x200b, + 0x000b, 0x70a3, 0x0001, 0x781b, 0x0047, 0x0078, 0x1efb, 0x781b, + 0x00df, 0x0078, 0x1efb, 0x2009, 0x3935, 0x200b, 0x000a, 0x0078, + 0x1efb, 0x1078, 0x1eac, 0x2300, 0x0079, 0x293e, 0x2941, 0x2943, + 0x2976, 0x1078, 0x1eac, 0x7000, 0x0079, 0x2946, 0x294e, 0x2950, + 0x2950, 0x296b, 0x2950, 0x2972, 0x296b, 0x294e, 0x1078, 0x1eac, + 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2967, 0xa6b4, 0xffbf, + 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf, + 0x681e, 0x1078, 0x32f5, 0x1078, 0x3571, 0x0078, 0x311c, 0xa684, + 0x2000, 0x0040, 0x295a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2972, + 0x681b, 0x0007, 0x781b, 0x00e6, 0x0078, 0x1efb, 0x6820, 0xa085, + 0x0004, 0x6822, 0x1078, 0x30e7, 0xa6b5, 0x0800, 0x1078, 0x2f7d, + 0x781b, 0x0067, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2987, 0x298a, + 0x298c, 0x298e, 0x1078, 0x1eac, 0x1078, 0x1eac, 0xa684, 0x0400, + 0x00c0, 0x29ae, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, + 0xfeff, 0x6922, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, + 0x785a, 0x79e4, 0xa184, 0x0020, 0x00c0, 0x29aa, 0x2001, 0x0014, + 0x0078, 0x26ad, 0xa184, 0x0007, 0x0079, 0x29e6, 0x7a90, 0xa294, + 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x29e4, 0x789b, + 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x29d5, 0x7ba8, 0x7ba8, + 0xa386, 0x0001, 0x00c0, 0x29c8, 0x2009, 0xfff7, 0x0078, 0x29ce, + 0xa386, 0x0003, 0x00c0, 0x29d5, 0x2009, 0xffef, 0x0c7e, 0x7048, + 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, + 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, + 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x311c, 0x239b, 0x23a8, + 0x3124, 0x3124, 0x29ee, 0x29ee, 0x29ee, 0x3124, 0x1078, 0x1eac, + 0x79e4, 0xa184, 0x0030, 0x00c0, 0x2a06, 0x70a0, 0xa086, 0x0002, + 0x00c0, 0x29fe, 0x2011, 0x0002, 0x0078, 0x2288, 0x6818, 0xa085, + 0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x26ad, 0xa184, 0x0007, + 0x0079, 0x2a0a, 0x311c, 0x311c, 0x2a12, 0x311c, 0x3144, 0x3144, + 0x311c, 0x311c, 0xa684, 0x0080, 0x0040, 0x2a41, 0x71c8, 0x81ff, + 0x0040, 0x2a41, 0xa182, 0x000d, 0x00d0, 0x2a22, 0x70cb, 0x0000, + 0x0078, 0x2a27, 0xa182, 0x000c, 0x70ca, 0x2009, 0x000c, 0x789b, + 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x70cc, 0x8114, 0xa210, + 0x72ce, 0xa080, 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b, + 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, + 0x3124, 0xa684, 0x0400, 0x00c0, 0x2a82, 0x6820, 0xa084, 0x0001, + 0x0040, 0x3124, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2a56, + 0xa086, 0x0060, 0x00c0, 0x2a56, 0xa18d, 0x4000, 0xa18c, 0xfffb, + 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, + 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, + 0x2d07, 0xa18c, 0x00f8, 0x00c0, 0x2d07, 0x157e, 0x137e, 0x147e, + 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, + 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, + 0x0078, 0x3124, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a89, 0x681b, + 0x0008, 0x781b, 0x00da, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2a90, + 0x2a95, 0x2b18, 0x2a93, 0x1078, 0x1eac, 0x7000, 0xa084, 0x0007, + 0x0079, 0x2a9a, 0x2aa2, 0x2aa4, 0x2ac0, 0x2aa2, 0x2aa2, 0x1f03, + 0x2aa2, 0x2aa2, 0x1078, 0x1eac, 0x6920, 0xa18d, 0x0001, 0x6922, + 0x6800, 0x6006, 0xa005, 0x00c0, 0x2aae, 0x6002, 0x681c, 0xa084, + 0x000e, 0x0040, 0x2aba, 0x7014, 0x68ba, 0x712c, 0xa188, 0x4280, + 0x0078, 0x2abc, 0x2009, 0x4380, 0x2104, 0x6802, 0x2d0a, 0x7156, + 0x6920, 0xa184, 0x8000, 0x00c0, 0x2acc, 0x68af, 0x0000, 0x68b3, + 0x0000, 0xa18d, 0x8000, 0x6922, 0x6eb6, 0xa684, 0x0060, 0x0040, + 0x2b16, 0xa684, 0x0800, 0x00c0, 0x2add, 0x6894, 0x68a6, 0x6898, + 0x68aa, 0x1078, 0x32f5, 0x0078, 0x2b16, 0xa684, 0x0020, 0x0040, + 0x2aea, 0xa006, 0x1078, 0x362f, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, + 0x0078, 0x2af0, 0x1078, 0x30a6, 0x69aa, 0x6aa6, 0x1078, 0x362f, + 0xa684, 0x8000, 0x0040, 0x2b16, 0xa684, 0x7fff, 0x68b6, 0x789b, + 0x0074, 0x1078, 0x316f, 0x2010, 0x1078, 0x316f, 0x2008, 0xa684, + 0x0020, 0x00c0, 0x2b0e, 0x1078, 0x316f, 0x801b, 0x00c8, 0x2b09, + 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, + 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078, 0x1f03, + 0x0078, 0x2f75, 0x7033, 0x0000, 0xa282, 0x0006, 0x0050, 0x2b22, + 0x1078, 0x1eac, 0x2300, 0x0079, 0x2b25, 0x2b28, 0x2b4e, 0x2b72, + 0x2200, 0x0079, 0x2b2b, 0x2b31, 0x2f75, 0x2b33, 0x2b31, 0x2b9c, + 0x2bed, 0x1078, 0x1eac, 0x7003, 0x0005, 0x2001, 0x4390, 0x2068, + 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, + 0x2b43, 0x0078, 0x2b3c, 0x157f, 0x6817, 0x0000, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x2f69, 0x7000, 0xa086, + 0x0001, 0x00c0, 0x2b5b, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034, + 0x600a, 0x0078, 0x2b60, 0x7000, 0xa086, 0x0003, 0x0040, 0x2b55, + 0x7003, 0x0005, 0x2001, 0x4390, 0x2068, 0x703e, 0x7032, 0x2200, + 0x0079, 0x2b6a, 0x2f75, 0x2b70, 0x2b70, 0x2b9c, 0x2b70, 0x2f75, + 0x1078, 0x1eac, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2b7f, 0x1078, + 0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a, 0x0078, 0x2b84, 0x7000, + 0xa086, 0x0003, 0x0040, 0x2b79, 0x7003, 0x0005, 0x2001, 0x4390, + 0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2b8e, 0x2b96, 0x2b94, + 0x2b94, 0x2b96, 0x2b94, 0x2b96, 0x1078, 0x1eac, 0x1078, 0x2f8d, + 0x781b, 0x0067, 0x0078, 0x1efb, 0x7000, 0xa086, 0x0001, 0x00c0, + 0x2ba9, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a, 0x0078, + 0x2bae, 0x7000, 0xa086, 0x0003, 0x0040, 0x2ba3, 0x7003, 0x0002, + 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, + 0xa215, 0x2069, 0x4380, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, + 0x0040, 0x2bc9, 0x6814, 0xa206, 0x0040, 0x2be2, 0x6800, 0x0078, + 0x2bbc, 0x7003, 0x0005, 0x2001, 0x4390, 0x2068, 0x703e, 0x7032, + 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2bda, + 0x0078, 0x2bd3, 0x157f, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, + 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, + 0x2c4b, 0x1078, 0x2f85, 0x0078, 0x2c4b, 0x7000, 0xa086, 0x0001, + 0x00c0, 0x2bfa, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a, + 0x0078, 0x2bff, 0x7000, 0xa086, 0x0003, 0x0040, 0x2bf4, 0x7003, + 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, + 0x0007, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x4280, + 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x2c1e, 0x6814, + 0xa206, 0x0040, 0x2c36, 0x6800, 0x0078, 0x2c11, 0x7003, 0x0005, + 0x2001, 0x4390, 0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, + 0x0000, 0x8000, 0x0070, 0x2c2e, 0x0078, 0x2c27, 0x157f, 0x6a16, + 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, + 0x6820, 0xa084, 0x0c00, 0x0040, 0x2c4b, 0xa084, 0x0800, 0x0040, + 0x2c45, 0x1078, 0x2f89, 0x0078, 0x2c4b, 0x1078, 0x2f85, 0x70bf, + 0x0000, 0x0078, 0x2c4b, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa080, 0x3a00, 0x2060, 0x704a, 0x6000, 0x704e, + 0x6004, 0x7052, 0xa684, 0x0060, 0x0040, 0x2c64, 0x68a8, 0x78d2, + 0x78da, 0x68a4, 0x78d6, 0x78de, 0x077f, 0x1078, 0x3099, 0x2009, + 0x0068, 0xa684, 0x0008, 0x0040, 0x2c6f, 0x2009, 0x0067, 0xa6b5, + 0x2000, 0x7e5a, 0x791a, 0xa684, 0x0060, 0x0040, 0x2c85, 0xa684, + 0x0800, 0x00c0, 0x2c7f, 0x1078, 0x3571, 0x0078, 0x2c85, 0xa684, + 0x4000, 0x00c0, 0x2c85, 0x1078, 0x3502, 0x2d00, 0x703e, 0x8207, + 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a00, 0x2048, + 0x0078, 0x1efb, 0x6020, 0xa005, 0x0040, 0x2c9e, 0x8001, 0x6022, + 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, + 0x1078, 0x32f5, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, + 0x681f, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x2caf, 0x2cb7, + 0x2cb9, 0x2cb9, 0x2cc5, 0x2cc1, 0x2cb7, 0x2cc1, 0x2cb7, 0x1078, + 0x1eac, 0x1078, 0x2cd0, 0x1078, 0x2cc9, 0x1078, 0x1a26, 0x0078, + 0x1f03, 0x70a3, 0x0000, 0x0078, 0x1f03, 0x681b, 0x0000, 0x0078, + 0x2871, 0x6800, 0xa005, 0x00c0, 0x2cce, 0x6002, 0x6006, 0x007c, + 0x6010, 0xa005, 0x0040, 0x2cd9, 0x8001, 0x00d0, 0x2cd9, 0x1078, + 0x1eac, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, + 0xa005, 0x0040, 0x2ce5, 0x8001, 0x601a, 0x007c, 0x1078, 0x316a, + 0x6818, 0xa084, 0x8000, 0x0040, 0x2cef, 0x681b, 0x0018, 0x0078, + 0x2d26, 0x1078, 0x316a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2cfa, + 0x681b, 0x0019, 0x0078, 0x2d26, 0x1078, 0x316a, 0x6818, 0xa084, + 0x8000, 0x0040, 0x2d05, 0x681b, 0x001a, 0x0078, 0x2d26, 0x1078, + 0x316a, 0x681b, 0x0003, 0x0078, 0x2d26, 0x71b8, 0xa18c, 0x00ff, + 0xa1e8, 0x4280, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2d1a, + 0x0078, 0x1f03, 0x6814, 0x72b4, 0xa206, 0x0040, 0x2d22, 0x6800, + 0x0078, 0x2d13, 0x6800, 0x200a, 0x681b, 0x0005, 0x681f, 0x0000, + 0x6823, 0x0020, 0x1078, 0x2cd0, 0x1078, 0x2cc9, 0x1078, 0x1a26, + 0x0078, 0x1f03, 0xa282, 0x0003, 0x00c0, 0x2f69, 0x7da8, 0xa5ac, + 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, + 0xa184, 0x0100, 0x0040, 0x2d92, 0xa18c, 0xfeff, 0x6922, 0xa6b4, + 0x00ff, 0x0040, 0x2d7c, 0xa682, 0x000c, 0x0048, 0x2d53, 0x0040, + 0x2d53, 0x2031, 0x000c, 0x852b, 0x852b, 0x1078, 0x3018, 0x0040, + 0x2d5d, 0x1078, 0x2e4a, 0x0078, 0x2d85, 0x1078, 0x2fd3, 0x0c7e, + 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2e6e, 0x0c7f, + 0x6920, 0xa18d, 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, + 0xa684, 0x0400, 0x00c0, 0x2d78, 0x781b, 0x0053, 0x0078, 0x1efb, + 0x781b, 0x0067, 0x0078, 0x1efb, 0x0c7e, 0x2960, 0x6004, 0xa084, + 0xfff5, 0x6006, 0x1078, 0x2e6e, 0x0c7f, 0x7e58, 0xa684, 0x0400, + 0x00c0, 0x2d8e, 0x781b, 0x0056, 0x0078, 0x1efb, 0x781b, 0x0068, + 0x0078, 0x1efb, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000, + 0x0040, 0x2dd2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, + 0x0048, 0x2da6, 0x0040, 0x2da6, 0x2011, 0x000c, 0x2600, 0xa202, + 0x00c8, 0x2dab, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, + 0x0028, 0x00c0, 0x2dbb, 0xa282, 0x0019, 0x00c8, 0x2dc1, 0x2011, + 0x0019, 0x0078, 0x2dc1, 0xa282, 0x000c, 0x00c8, 0x2dc1, 0x2011, + 0x000c, 0x2200, 0xa502, 0x00c8, 0x2dc6, 0x2228, 0x1078, 0x2fd7, + 0x852b, 0x852b, 0x1078, 0x3018, 0x0040, 0x2dd2, 0x1078, 0x2e4a, + 0x0078, 0x2dd6, 0x1078, 0x2fd3, 0x1078, 0x2e6e, 0x7858, 0xa085, + 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x1efb, 0x0c7e, + 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2df7, 0x6010, 0xa084, + 0x000f, 0x00c0, 0x2df1, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f, + 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x2e1e, 0x68a0, + 0xa084, 0x0200, 0x00c0, 0x2df1, 0x6208, 0xa294, 0x00ff, 0x7018, + 0xa086, 0x0028, 0x00c0, 0x2e0c, 0xa282, 0x0019, 0x00c8, 0x2e12, + 0x2011, 0x0019, 0x0078, 0x2e12, 0xa282, 0x000c, 0x00c8, 0x2e12, + 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, + 0x0048, 0x2e1e, 0x0040, 0x2e1e, 0x2019, 0x000c, 0x78ab, 0x0001, + 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, + 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x2960, + 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, + 0x0078, 0x2e3a, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, + 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, + 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084, 0xfff0, + 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084, + 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, 0xa6b4, + 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e, + 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7048, + 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, + 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282, 0x0002, + 0x00c0, 0x2f69, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, + 0x0200, 0x0040, 0x2ec3, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff, + 0xa282, 0x0002, 0x00c8, 0x2f69, 0x1078, 0x2f0a, 0x1078, 0x2e6e, + 0xa980, 0x0001, 0x200c, 0x1078, 0x3095, 0x1078, 0x2ddf, 0x88ff, + 0x0040, 0x2eb6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, + 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2eb2, 0x781b, 0x0053, + 0x0078, 0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb, 0x7e58, 0xa684, + 0x0400, 0x00c0, 0x2ebf, 0x781b, 0x0056, 0x0078, 0x1efb, 0x781b, + 0x0068, 0x0078, 0x1efb, 0xa282, 0x0002, 0x00c8, 0x2ecb, 0xa284, + 0x0001, 0x0040, 0x2ed5, 0x7148, 0xa188, 0x0000, 0x210c, 0xa18c, + 0x2000, 0x00c0, 0x2ed5, 0x2011, 0x0000, 0x1078, 0x2fc5, 0x1078, + 0x2f0a, 0x1078, 0x2e6e, 0x7858, 0xa085, 0x0004, 0x785a, 0x781b, + 0x0067, 0x0078, 0x1efb, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, + 0x0001, 0xa084, 0x2000, 0x00c0, 0x2efa, 0x6014, 0xa084, 0x0040, + 0x00c0, 0x2ef8, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x2f07, + 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, + 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, + 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, 0x2f12, + 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, + 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef, + 0x6006, 0x0c7f, 0x007c, 0xa684, 0x0020, 0x0040, 0x2f65, 0x7888, + 0xa084, 0x0040, 0x0040, 0x2f65, 0x7bb8, 0xa384, 0x003f, 0x831b, + 0x00c8, 0x2f33, 0x8000, 0xa005, 0x0040, 0x2f4c, 0x831b, 0x00c8, + 0x2f3c, 0x8001, 0x0040, 0x2f61, 0xa684, 0x4000, 0x0040, 0x2f4c, + 0x78b8, 0x801b, 0x00c8, 0x2f45, 0x8000, 0xa084, 0x003f, 0x00c0, + 0x2f61, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, + 0xa108, 0x00c8, 0x2f55, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, + 0x7ade, 0x1078, 0x362f, 0x781b, 0x0065, 0x1078, 0x3502, 0x0078, + 0x1efb, 0x781b, 0x0065, 0x0078, 0x1efb, 0x781b, 0x0068, 0x0078, + 0x1efb, 0x1078, 0x2f91, 0x781b, 0x0067, 0x0078, 0x1efb, 0x1078, + 0x2f7d, 0x781b, 0x0067, 0x0078, 0x1efb, 0x6827, 0x0002, 0x1078, + 0x2f85, 0x781b, 0x0067, 0x0078, 0x1efb, 0x2001, 0x0005, 0x0078, + 0x2f93, 0x2001, 0x000c, 0x0078, 0x2f93, 0x2001, 0x0006, 0x0078, + 0x2f93, 0x2001, 0x000d, 0x0078, 0x2f93, 0x2001, 0x0009, 0x0078, + 0x2f93, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008, + 0x7e5a, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, + 0x8703, 0xa0e0, 0x3a00, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, + 0x000f, 0x0040, 0x2fb3, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, + 0xa085, 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, + 0x0040, 0x0040, 0x2fc3, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, + 0xa085, 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, + 0x78ab, 0x0004, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, + 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, + 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, + 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, + 0xa18c, 0xfff0, 0x2001, 0x3946, 0x2004, 0xa082, 0x0028, 0x0040, + 0x3001, 0x2021, 0x307c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, + 0x3007, 0x2021, 0x3088, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, + 0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x3016, 0x8420, + 0x2300, 0xa210, 0x0070, 0x3016, 0x0078, 0x3009, 0x157f, 0x007c, + 0x157e, 0x2011, 0x3946, 0x2214, 0xa282, 0x0032, 0x0048, 0x302c, + 0x0040, 0x3030, 0x2021, 0x306e, 0x2019, 0x0011, 0x20a9, 0x000e, + 0x2011, 0x0032, 0x0078, 0x3042, 0xa282, 0x0028, 0x0040, 0x303a, + 0x2021, 0x307c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, + 0x0078, 0x3042, 0x2021, 0x3088, 0x2019, 0x0019, 0x20a9, 0x000d, + 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x3052, 0x0048, 0x3052, + 0x8420, 0x2300, 0xa210, 0x0070, 0x304f, 0x0078, 0x3042, 0x157f, + 0xa006, 0x007c, 0x157f, 0x7a08, 0xa582, 0x0064, 0x00c8, 0x305d, + 0xa285, 0x0040, 0x780a, 0x0078, 0x305d, 0x78ec, 0xa084, 0x0300, + 0x0040, 0x306b, 0x2404, 0xa09e, 0x2002, 0x00c0, 0x306b, 0x2001, + 0x2101, 0x0078, 0x306c, 0x2404, 0xa015, 0x007c, 0x2002, 0x3002, + 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, + 0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202, + 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05, + 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604, + 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046, + 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, 0x0007, 0x8003, 0x8003, + 0x8003, 0x8003, 0xa105, 0xa0e0, 0x3a80, 0x007c, 0x79d8, 0x7adc, + 0x78d0, 0x801b, 0x00c8, 0x30ad, 0x8000, 0xa084, 0x003f, 0xa108, + 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3940, + 0x2091, 0x8000, 0x2104, 0x0079, 0x30bd, 0x30e3, 0x30c7, 0x30c7, + 0x30c7, 0x30c7, 0x30c7, 0x30c7, 0x30c5, 0x1078, 0x1eac, 0x784b, + 0x0004, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000, + 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x30e3, 0x0018, 0x30e3, + 0x681c, 0xa084, 0x0020, 0x00c0, 0x30e1, 0x781b, 0x00df, 0x0078, + 0x30e3, 0x781b, 0x00e6, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e, + 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, + 0x3a00, 0x6004, 0xa084, 0x000a, 0x00c0, 0x311a, 0x6108, 0xa194, + 0xff00, 0x0040, 0x311a, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, + 0x0040, 0x3109, 0x2001, 0x0032, 0xa106, 0x0040, 0x310d, 0x0078, + 0x3111, 0x2009, 0x0020, 0x0078, 0x3113, 0x2009, 0x003f, 0x0078, + 0x3113, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, + 0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x1efb, + 0x781b, 0x0067, 0x0078, 0x1efb, 0x781b, 0x0056, 0x0078, 0x1efb, + 0x781b, 0x0053, 0x0078, 0x1efb, 0x781b, 0x00df, 0x0078, 0x1efb, + 0x781b, 0x00de, 0x0078, 0x1efb, 0x781b, 0x00e6, 0x0078, 0x1efb, + 0x781b, 0x00e5, 0x0078, 0x1efb, 0x781b, 0x009d, 0x0078, 0x1efb, + 0x781b, 0x009c, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040, + 0x314b, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, 0x0047, 0x0078, + 0x1efb, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3168, 0x7808, + 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, + 0xa084, 0x0021, 0x0040, 0x3168, 0x7808, 0xa085, 0x0002, 0x780a, + 0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, 0x007c, 0x7830, + 0xa084, 0x0040, 0x00c0, 0x316f, 0x0098, 0x3178, 0x78ac, 0x007c, + 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, + 0x78ec, 0xa084, 0x0021, 0x0040, 0x3187, 0x0098, 0x3185, 0x78ac, + 0x007e, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, + 0x0070, 0x0040, 0x319b, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x1e57, + 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x31a8, 0x784b, + 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1f03, 0x0078, 0x311c, + 0xa784, 0x0004, 0x0040, 0x31db, 0x78b8, 0xa084, 0x4001, 0x0040, + 0x31db, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1f03, + 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x31db, 0x78c0, + 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00e6, 0x0078, 0x1efb, + 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040, 0x31d7, 0x681b, + 0x0015, 0xa684, 0x4000, 0x0040, 0x31d7, 0x681b, 0x0007, 0x781b, + 0x00df, 0x0078, 0x1efb, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, + 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78e4, + 0xa005, 0x00d0, 0x238a, 0xa084, 0x0020, 0x0040, 0x238a, 0x0018, + 0x238a, 0x0078, 0x2f6f, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa080, 0x3a00, 0x2060, 0x2048, 0x704a, 0x6000, + 0x704e, 0x6004, 0x7052, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, + 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014, 0x98f9, 0x98e9, + 0x0014, 0x0014, 0x0080, 0x00c0, 0x0100, 0x0402, 0x2008, 0xf880, + 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838, + 0x3806, 0x8839, 0x28c2, 0x9cc2, 0xa805, 0x0864, 0xa83d, 0x3008, + 0x28c1, 0x9cc2, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, + 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9c9f, 0xa8f3, 0x0864, + 0xa82b, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9c9f, 0x280d, 0xa204, + 0x64c0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, + 0xa80f, 0x786e, 0x883e, 0xa80c, 0x282b, 0xa205, 0x64a0, 0x67a0, + 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa801, 0x883e, + 0x206b, 0x28c1, 0x9cc2, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8dc, + 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872, + 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x866f, 0x0704, + 0x3008, 0x9c9f, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, + 0x19e2, 0xf848, 0x8174, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f, + 0x08e6, 0xa8f1, 0xf861, 0xa8e8, 0xf801, 0x0014, 0xf881, 0x0016, + 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, + 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0xa206, 0x6865, + 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, + 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, 0x11d6, + 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016, 0x8000, 0x2848, + 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, + 0xa883, 0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, + 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0xd301, 0x0014, 0x26e0, + 0x873a, 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, + 0x3806, 0x0210, 0x9ccc, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200, + 0x2049, 0x32f5, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, + 0xa084, 0xfff7, 0xa205, 0x0040, 0x3307, 0x1078, 0x3380, 0x127f, + 0x2000, 0x007c, 0x6428, 0x84ff, 0x0040, 0x3336, 0x2c70, 0x7004, + 0xa0bc, 0x000f, 0xa7b8, 0x3346, 0x273c, 0x87fb, 0x00c0, 0x3324, + 0x0048, 0x331c, 0x1078, 0x1eac, 0x609c, 0xa075, 0x0040, 0x3336, + 0x0078, 0x330f, 0x2039, 0x333b, 0x2704, 0xae68, 0x6808, 0xa630, + 0x680c, 0xa529, 0x8421, 0x0040, 0x3336, 0x8738, 0x2704, 0xa005, + 0x00c0, 0x3325, 0x709c, 0xa075, 0x00c0, 0x330f, 0x007c, 0x0000, + 0x0005, 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, + 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x333b, + 0x3338, 0x0000, 0x0000, 0x8000, 0x0000, 0x333b, 0x0000, 0x3343, + 0x3340, 0x0000, 0x0000, 0x0000, 0x0000, 0x3343, 0x0000, 0x333e, + 0x333e, 0x0000, 0x0000, 0x8000, 0x0000, 0x333e, 0x0000, 0x3344, + 0x3344, 0x0000, 0x0000, 0x0000, 0x0000, 0x3344, 0x127e, 0x2091, + 0x2200, 0x2079, 0x3900, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, + 0x0002, 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, + 0x0002, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, + 0x2049, 0x3380, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x33b2, + 0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x338a, 0xa184, + 0x01e0, 0x0040, 0x3395, 0x1078, 0x1eac, 0xa184, 0x4000, 0x00c0, + 0x338a, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x33a7, 0xa386, + 0x0008, 0x0040, 0x33b2, 0xa386, 0x200c, 0x00c0, 0x338a, 0x7200, + 0x8204, 0x0048, 0x33b2, 0x730c, 0xa384, 0x00ff, 0x0040, 0x33b2, + 0x1078, 0x1eac, 0x7007, 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, + 0x33c3, 0x7310, 0x7014, 0xa305, 0x0040, 0x33c3, 0x700c, 0xa084, + 0x00ff, 0x00c0, 0x3380, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, + 0xa084, 0x0008, 0x00c0, 0x33c7, 0x7007, 0x0012, 0x7108, 0x8103, + 0x0048, 0x33cc, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, + 0x007e, 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x33e7, + 0x157f, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, + 0x7500, 0x730c, 0xa384, 0x0300, 0x00c0, 0x3426, 0xa184, 0x0060, + 0x00c0, 0x3442, 0x7008, 0x7108, 0xa106, 0x00c0, 0x33f2, 0xa184, + 0x01e0, 0x00c0, 0x3442, 0xa184, 0x4000, 0x00c0, 0x33f2, 0xa986, + 0x362f, 0x00c0, 0x341a, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, + 0x3411, 0xa386, 0x0008, 0x0040, 0x341a, 0xa386, 0x200c, 0x00c0, + 0x33f2, 0x7200, 0x8204, 0x0048, 0x341a, 0x730c, 0xa384, 0x00ff, + 0x00c0, 0x3426, 0xa184, 0x0007, 0x0079, 0x341e, 0x3428, 0x3436, + 0x3426, 0x3436, 0x3426, 0x348f, 0x3426, 0x348d, 0x1078, 0x1eac, + 0x7007, 0x0002, 0x8aff, 0x00c0, 0x3431, 0x2049, 0x0000, 0x0078, + 0x3435, 0x1078, 0x3606, 0x00c0, 0x3431, 0x007c, 0x7007, 0x0002, + 0x8aff, 0x00c0, 0x343d, 0x0078, 0x3441, 0x1078, 0x3606, 0x00c0, + 0x343d, 0x007c, 0x7108, 0x7008, 0xa106, 0x00c0, 0x3442, 0xa184, + 0x4000, 0x00c0, 0x3442, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106, + 0x00c0, 0x344d, 0xa184, 0x4000, 0x00c0, 0x344d, 0x00e0, 0x3456, + 0x2091, 0x6000, 0x00e0, 0x345a, 0x2091, 0x6000, 0x7007, 0x0012, + 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x3462, 0x7007, + 0x0012, 0x7108, 0x8103, 0x0048, 0x3467, 0x7003, 0x0000, 0x7000, + 0xa005, 0x00c0, 0x347b, 0x7004, 0xa005, 0x00c0, 0x347b, 0x700c, + 0xa005, 0x0040, 0x347d, 0x0078, 0x345e, 0x2049, 0x0000, 0x1078, + 0x30b3, 0x6818, 0xa084, 0x8000, 0x0040, 0x3488, 0x681b, 0x0002, + 0x007c, 0x1078, 0x1eac, 0x1078, 0x1eac, 0x1078, 0x34ed, 0x7210, + 0x7114, 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, + 0x0000, 0x1078, 0x34ed, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, + 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x34b2, + 0x00c8, 0x34b2, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, + 0x0078, 0x3499, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, + 0x0040, 0x34be, 0xa7ba, 0x3340, 0x0078, 0x34c0, 0xa7ba, 0x3338, + 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x1078, + 0x3380, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x34dd, 0x609c, + 0xa005, 0x0040, 0x34ea, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, + 0x3346, 0x203c, 0x87fb, 0x1040, 0x1eac, 0x8a51, 0x0040, 0x34e9, + 0x7008, 0x7508, 0xa52e, 0x00c0, 0x34e0, 0xa084, 0x0003, 0xa086, + 0x0003, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, + 0xa004, 0x00c0, 0x3501, 0x6000, 0xa064, 0x00c0, 0x34f8, 0x2d60, + 0x6004, 0xa084, 0x000f, 0xa080, 0x3356, 0x203c, 0x87fb, 0x1040, + 0x1eac, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, + 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, + 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x351c, + 0xa0b8, 0x3340, 0x0078, 0x351e, 0xa0b8, 0x3338, 0x7e08, 0xa6b5, + 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x3528, 0xa6b5, 0x0001, + 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x352a, 0x2400, + 0xa305, 0x00c0, 0x3535, 0x0078, 0x3559, 0x2c58, 0x2704, 0x6104, + 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, + 0x0008, 0x0040, 0x3549, 0x6010, 0xa001, 0x7022, 0x6014, 0xa001, + 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203, + 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x34ca, 0x0078, + 0x355b, 0x1078, 0x3606, 0x00c0, 0x3559, 0x127f, 0x2000, 0x007c, + 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, + 0xa084, 0x0004, 0x00c0, 0x3567, 0x7003, 0x0008, 0x127f, 0x2000, + 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x3571, + 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x357a, 0x7e08, + 0xa6b5, 0x000c, 0x681c, 0xa084, 0x0020, 0x00c0, 0x3589, 0xa6b5, + 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, + 0x3346, 0x273c, 0x87fb, 0x00c0, 0x359f, 0x0048, 0x3599, 0x1078, + 0x1eac, 0x689c, 0xa065, 0x0040, 0x35a3, 0x0078, 0x358c, 0x1078, + 0x3606, 0x00c0, 0x359f, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, + 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, + 0xa6b5, 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x35b9, 0xa6b5, + 0x0001, 0x2049, 0x35a6, 0x6828, 0xa055, 0x0040, 0x3603, 0x2d70, + 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3346, 0x273c, 0x87fb, + 0x00c0, 0x35d5, 0x0048, 0x35ce, 0x1078, 0x1eac, 0x709c, 0xa075, + 0x2060, 0x0040, 0x3603, 0x0078, 0x35c1, 0x2704, 0xae68, 0x6808, + 0xa422, 0x680c, 0xa31b, 0x0048, 0x35f0, 0x8a51, 0x00c0, 0x35e2, + 0x1078, 0x1eac, 0x8738, 0x2704, 0xa005, 0x00c0, 0x35d6, 0x709c, + 0xa075, 0x2060, 0x0040, 0x3603, 0x2039, 0x3338, 0x0078, 0x35c1, + 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, + 0x690c, 0x2300, 0xa11b, 0x00c8, 0x35ff, 0x1078, 0x1eac, 0x2071, + 0x0020, 0x0078, 0x3528, 0x127f, 0x2000, 0x007c, 0x7008, 0x7508, + 0xa52e, 0x00c0, 0x3606, 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, + 0x362e, 0x2704, 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, + 0x8108, 0x2104, 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, + 0x0008, 0x0040, 0x3629, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, + 0x7026, 0x7602, 0x7007, 0x0001, 0x1078, 0x34ca, 0x007c, 0x127e, + 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x362f, 0x0d7f, 0x087f, + 0x7108, 0x7008, 0xa106, 0x00c0, 0x3638, 0xa184, 0x4000, 0x00c0, + 0x3638, 0xa184, 0x0003, 0x00c0, 0x364f, 0x6828, 0xa005, 0x0040, + 0x365d, 0x0020, 0x364f, 0x1078, 0x348f, 0x0078, 0x365d, 0x00a0, + 0x3656, 0x7108, 0x1078, 0x33e7, 0x0078, 0x3638, 0x7007, 0x0010, + 0x00a0, 0x3658, 0x7108, 0x1078, 0x33e7, 0x7008, 0xa086, 0x0008, + 0x00c0, 0x3638, 0x7000, 0xa005, 0x00c0, 0x3638, 0x2049, 0x0000, + 0x127f, 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e, + 0x2091, 0x2200, 0x0d7f, 0x2049, 0x366b, 0xad80, 0x0011, 0x20a0, + 0x2099, 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, + 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x3689, 0x8000, 0x80ac, + 0x53a5, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x368b, + 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, + 0x2000, 0x007c, 0x2091, 0x6000, 0x78c0, 0xa005, 0x0040, 0x36af, + 0x798c, 0x70d0, 0xa106, 0x00c0, 0x36af, 0x7804, 0xa005, 0x0040, + 0x36af, 0x7807, 0x0000, 0x0068, 0x36af, 0x2091, 0x4080, 0x7820, + 0x8001, 0x7822, 0x00c0, 0x370f, 0x7824, 0x7822, 0x2091, 0x8000, + 0x78f0, 0xa005, 0x0040, 0x36dc, 0x78d4, 0xa005, 0x00c0, 0x36dc, + 0x3a10, 0xa284, 0x0002, 0x00c0, 0x36cc, 0x78d7, 0x0007, 0x2009, + 0xff01, 0x200a, 0x0078, 0x36dc, 0xa284, 0x0001, 0x00c0, 0x36d4, + 0x78ef, 0x0000, 0x0078, 0x36dc, 0x78ec, 0xa005, 0x00c0, 0x36dc, + 0x78d7, 0x0008, 0x78ef, 0x0001, 0x2069, 0x3940, 0x6800, 0xa084, + 0x0007, 0x0040, 0x36f3, 0xa086, 0x0002, 0x0040, 0x36f3, 0x6830, + 0xa00d, 0x0040, 0x36f3, 0x2104, 0xa005, 0x0040, 0x36f3, 0x8001, + 0x200a, 0x0040, 0x37b1, 0x7848, 0xa005, 0x0040, 0x3703, 0x8001, + 0x784a, 0x00c0, 0x3703, 0x0f7e, 0x2079, 0x0100, 0x1078, 0x316a, + 0x0f7f, 0x1078, 0x1cf6, 0x68c4, 0xa005, 0x0040, 0x370f, 0x8001, + 0x68c6, 0x00c0, 0x370f, 0x68a3, 0x0000, 0x68a7, 0x0001, 0x1078, + 0x3716, 0x1078, 0x373b, 0x2091, 0x8001, 0x007c, 0x7834, 0x8001, + 0x7836, 0x00c0, 0x373a, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844, + 0xa005, 0x00c0, 0x3725, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080, + 0x4280, 0x2040, 0x2004, 0xa065, 0x0040, 0x373a, 0x6024, 0xa005, + 0x0040, 0x3736, 0x8001, 0x6026, 0x0040, 0x376a, 0x6000, 0x2c40, + 0x0078, 0x372b, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3769, + 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x3748, 0x2001, 0x0080, + 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x3a80, + 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x3769, 0xa290, + 0x0009, 0x2204, 0xa005, 0x0040, 0x3761, 0x8001, 0x2012, 0x00c0, + 0x3769, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078, + 0x1cf6, 0x007c, 0x2069, 0x3940, 0x6800, 0xa005, 0x0040, 0x3774, + 0x683c, 0xac06, 0x0040, 0x37b1, 0x601b, 0x0006, 0x60b4, 0xa084, + 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, + 0x6000, 0x2042, 0x6714, 0x6fb6, 0x1078, 0x18b4, 0x6818, 0xa005, + 0x0040, 0x378c, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a, + 0x6810, 0x8001, 0x00d0, 0x3796, 0x1078, 0x1eac, 0x6812, 0x602f, + 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1a26, 0x2069, 0x3940, + 0x2001, 0x0006, 0x68a2, 0x7944, 0xa184, 0x0100, 0x00c0, 0x37ac, + 0x69ba, 0x2001, 0x0004, 0x68a2, 0x1078, 0x1cf1, 0x2091, 0x8001, + 0x007c, 0x2009, 0x394f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1e57, + 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, + 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, + 0x6830, 0xa084, 0x0040, 0x0040, 0x37ed, 0x684b, 0x0004, 0x20a9, + 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x37da, 0x0070, 0x37da, + 0x0078, 0x37d1, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, + 0x0001, 0x0040, 0x37e7, 0x0070, 0x37e7, 0x0078, 0x37de, 0x20a9, + 0x00fa, 0x0070, 0x37ed, 0x0078, 0x37e9, 0x6808, 0xa084, 0xfffd, + 0x680a, 0x681b, 0x0047, 0x2009, 0x3968, 0x200b, 0x0007, 0x784c, + 0x784a, 0x2091, 0x8001, 0x007c, 0x2079, 0x3900, 0x1078, 0x3827, + 0x1078, 0x380b, 0x1078, 0x3819, 0x7833, 0x0000, 0x7847, 0x0000, + 0x784b, 0x0000, 0x007c, 0x2019, 0x000c, 0x2011, 0x3946, 0x2204, + 0xa086, 0x003c, 0x0040, 0x3816, 0x2019, 0x0008, 0x7b2a, 0x7b2e, + 0x007c, 0x2019, 0x0039, 0x2011, 0x3946, 0x2204, 0xa086, 0x003c, + 0x0040, 0x3824, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, + 0x3971, 0x2011, 0x3946, 0x2204, 0xa086, 0x003c, 0x0040, 0x3832, + 0x2019, 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, + 0x007c, 0x8e59 +}; +#define ISP_CODE_LENGTH 0x283a +#endif +/* + * Firmware Version 7.55.00 (16:16 Mar 20, 1998) + */ + #define ISP_CODE_VERSION 7*1024+55 static const u_int16_t ISP_RISC_CODE[] = { 0x0078, 0x103a, 0x0000, 0x3cd2, 0x0000, 0x2043, 0x4f50, 0x5952, @@ -1960,6166 +3261,5933 @@ static const u_int16_t ISP_RISC_CODE[] = { }; #define ISP_CODE_LENGTH 0x3cd2 -/* - * We now only support 1.15.07 version F/W with some various flavors - * - * ISP2100_FABRIC provides Fabric Login support - * ISP2100_SCCLUN provides 16 bits worth of lun. - * - * As of 11/24/98 neither Fabric nor SCCLUN have been extensively tested. - */ #define ISP2100_CODE_ORG 0x1000 -#define ISP2100_CODE_VERSION 1*1024+15 -/* #define ISP2100_FABRIC 1 */ -/* #define ISP2100_SCCLUN 1 */ - -#if !defined(ISP2100_FABRIC) && !defined(ISP2100_SCCLUN) /************************************************************************ * * - * --- ISP2100 Initiator/Target Firmware --- * + * --- ISP2100 Fabric Initiator/Target Firmware --- * * * * * - ************************************************************************ - * * - * NOTICE * - * * - * COPYRIGHT 1998 QLOGIC CORPORATION * - * ALL RIGHTS RESERVED * - * * - * This computer program is CONFIDENTIAL and contains TRADE SECRETS of * - * QLOGIC CORPORATION. The receipt or possession of this program does * - * not convey any rights to reproduce or disclose its contents, or to * - * manufacture, use, or sell anything that it may describe, in whole or * - * in part, without the specific written consent of QLOGIC CORPORATION. * - * Any reproduction of this program without the express written consent * - * of QLOGIC CORPORATION is a violation of the copyright laws and may * - * subject you to civil liability and criminal prosecution. * - * * - ************************************************************************ - */ + ************************************************************************/ +#if 0 /* - * Firmware Version 1.15.07 (14:43 Oct 13, 1998) + * Firmware Version 1.13.00 (18:04 May 04, 1998) */ - +#define ISP2100_CODE_VERSION 1*1024+13 static const u_int16_t ISP2100_RISC_CODE[] = { - 0x0078, 0x1029, 0x0000, 0x5e69, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x0078, 0x1029, 0x0000, 0x5c95, 0x0000, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020, - 0x2400, 0x20c1, 0x0021, 0x20a1, 0x6e69, 0x2009, 0x0000, 0x20a9, - 0x0697, 0x41a4, 0x3400, 0x20c9, 0x72ff, 0x2091, 0x2000, 0x2059, - 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x1ff1, 0x2051, 0x6f00, - 0x2a70, 0x705b, 0x8d00, 0x705f, 0xffff, 0x7057, 0x8cf9, 0x7063, - 0x0300, 0x1078, 0x1235, 0x20a1, 0x7500, 0x715c, 0x810d, 0x810d, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3133, 0x2020, 0x2020, + 0x2400, 0x20c1, 0x0021, 0x20a1, 0x6c95, 0x2009, 0x0000, 0x20a9, + 0x076b, 0x41a4, 0x3400, 0x20c9, 0x71ff, 0x2091, 0x2000, 0x2059, + 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x1e36, 0x2051, 0x6d00, + 0x2a70, 0x705b, 0x8c00, 0x705f, 0xffff, 0x7057, 0x8bf9, 0x7063, + 0x0300, 0x1078, 0x1264, 0x20a1, 0x7400, 0x715c, 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e, 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400, 0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4, - 0x1078, 0x1200, 0x1078, 0x1321, 0x1078, 0x14a6, 0x1078, 0x192f, - 0x1078, 0x32c3, 0x1078, 0x5567, 0x1078, 0x12ac, 0x1078, 0x22f7, - 0x1078, 0x38fc, 0x1078, 0x36d4, 0x1078, 0x40ad, 0x1078, 0x1dbe, - 0x1078, 0x42ec, 0x1078, 0x3e1a, 0x1078, 0x1cdd, 0x1078, 0x1d9d, + 0x1078, 0x122b, 0x1078, 0x134e, 0x1078, 0x14d3, 0x1078, 0x17d7, + 0x1078, 0x324a, 0x1078, 0x54fc, 0x1078, 0x12d9, 0x1078, 0x2191, + 0x1078, 0x3875, 0x1078, 0x3655, 0x1078, 0x4064, 0x1078, 0x1c35, + 0x1078, 0x4213, 0x1078, 0x3d73, 0x1078, 0x1b5d, 0x1078, 0x1c14, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086, 0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, - 0x00c0, 0x10bd, 0x1078, 0x2a3b, 0x1078, 0x231f, 0x1078, 0x394c, - 0x1078, 0x37bf, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x10c1, 0x1078, 0x40c5, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, - 0x10aa, 0x1078, 0x5239, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x112a, - 0x10cd, 0x117d, 0x11fd, 0x11fe, 0x11ff, 0x1078, 0x1288, 0x007c, - 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2b5e, 0x2079, 0x0100, - 0x7844, 0xa005, 0x00c0, 0x1127, 0x2011, 0x31f0, 0x1078, 0x4187, + 0x00c0, 0x10bd, 0x1078, 0x2a96, 0x1078, 0x21b9, 0x1078, 0x38c5, + 0x1078, 0x373c, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, + 0x10c1, 0x1078, 0x4078, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, + 0x10aa, 0x1078, 0x52d8, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1151, + 0x10cd, 0x11aa, 0x1228, 0x1229, 0x122a, 0x1078, 0x12b7, 0x007c, + 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2aec, 0x2079, 0x0100, + 0x7844, 0xa005, 0x00c0, 0x1142, 0x2011, 0x318e, 0x1078, 0x40d1, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, - 0x73b0, 0x1078, 0x29fa, 0x1078, 0x5084, 0x2011, 0x0004, 0x1078, - 0x622b, 0x1078, 0x366e, 0x2079, 0x6f51, 0x7804, 0xd0ac, 0x00c0, - 0x1115, 0x2011, 0x0001, 0x1078, 0x622b, 0x7083, 0x0000, 0x7087, - 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x20a1, 0x2011, 0x0005, - 0x1078, 0x5193, 0x1078, 0x4893, 0x0c7e, 0x2061, 0x0100, 0x60e3, - 0x0008, 0x0c7f, 0x127f, 0x0078, 0x1129, 0x7083, 0x0000, 0x7087, - 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x5193, 0x1078, - 0x4893, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, - 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa086, 0xffff, - 0x0040, 0x1138, 0x1078, 0x20a1, 0x1078, 0x4893, 0x0078, 0x117b, - 0x7080, 0xa005, 0x00c0, 0x117b, 0x2001, 0x6f52, 0x2004, 0xd0ac, - 0x0040, 0x115e, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, - 0x017e, 0x1078, 0x34cb, 0x00c0, 0x1151, 0x6000, 0xd0ec, 0x00c0, - 0x1159, 0x017f, 0x8108, 0x00f0, 0x1148, 0x0c7f, 0x157f, 0x0078, - 0x115e, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x117b, 0x7003, 0x0003, - 0x7087, 0xffff, 0x2001, 0x0000, 0x1078, 0x1f8a, 0x1078, 0x2a74, - 0x2001, 0x70b7, 0x2004, 0xa086, 0x0005, 0x00c0, 0x1173, 0x2011, - 0x0000, 0x1078, 0x5193, 0x2011, 0x0000, 0x1078, 0x519d, 0x1078, - 0x4893, 0x1078, 0x4943, 0x127f, 0x007c, 0x017e, 0x0f7e, 0x127e, - 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010, 0x7942, - 0x7924, 0xd1b4, 0x0040, 0x118e, 0x7827, 0x0040, 0xd19c, 0x0040, - 0x1193, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, 0xa18a, - 0x0003, 0x0050, 0x11b9, 0x7954, 0xd1ac, 0x00c0, 0x11b9, 0x2009, - 0x00f8, 0x1078, 0x3292, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, - 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11b1, 0x7824, 0xd0ac, 0x00c0, - 0x11ed, 0x00f0, 0x11a9, 0x2001, 0x0001, 0x1078, 0x1f8a, 0x0078, - 0x11f6, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008, 0x00e0, - 0x11bf, 0x2091, 0x6000, 0x00f0, 0x11bf, 0x7853, 0x0400, 0x782f, - 0x0000, 0x2009, 0x00f8, 0x1078, 0x3292, 0x20a9, 0x000e, 0x0005, - 0x00f0, 0x11cf, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010, - 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x11e4, - 0x7824, 0xd0ac, 0x00c0, 0x11ed, 0x8319, 0x00c0, 0x11da, 0x2001, - 0x0001, 0x1078, 0x1f8a, 0x0078, 0x11f4, 0x7828, 0xc09d, 0x782a, - 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, 0x037f, - 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, - 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, 0x120c, - 0x704f, 0xffff, 0x0078, 0x120e, 0x704f, 0x0000, 0x7053, 0xffff, - 0x2061, 0x70a0, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, - 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, - 0x601f, 0x07d0, 0x2061, 0x70a8, 0x6003, 0x8000, 0x6007, 0x0000, - 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, - 0x601b, 0x0001, 0x601f, 0x0000, 0x007c, 0x1078, 0x125b, 0x2011, - 0x0000, 0x81ff, 0x0040, 0x125a, 0xa186, 0x0001, 0x00c0, 0x124a, - 0x705f, 0x8fff, 0x7057, 0x7d01, 0x7063, 0x0100, 0x705b, 0x7d00, - 0x0078, 0x1258, 0xa186, 0x0002, 0x00c0, 0x1252, 0x2011, 0x0000, - 0x0078, 0x1258, 0xa186, 0x0005, 0x00c0, 0x1258, 0x2011, 0x0001, - 0x1078, 0x1282, 0x007c, 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, - 0x1282, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, - 0x7fff, 0x2c04, 0xa406, 0x0040, 0x1270, 0xc18d, 0x0078, 0x127d, - 0xc185, 0x2011, 0x0001, 0x1078, 0x1282, 0x2061, 0xffff, 0x2362, - 0x2c04, 0xa306, 0x00c0, 0x127d, 0xc195, 0x2011, 0x0001, 0x1078, - 0x1282, 0x007c, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, - 0x2091, 0x8000, 0x0068, 0x128a, 0x007e, 0x017e, 0x2079, 0x0000, - 0x7818, 0xa084, 0x0000, 0x00c0, 0x1290, 0x017f, 0x792e, 0x007f, - 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, - 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0x6f00, 0x7803, - 0x0005, 0x0078, 0x12a9, 0x007c, 0x2071, 0x6f00, 0x7158, 0x712e, - 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048, 0x12c2, - 0x705c, 0xa302, 0x00c8, 0x12c2, 0x220a, 0x2208, 0x2310, 0x8420, - 0x0078, 0x12b4, 0x200b, 0x0000, 0x7496, 0x749a, 0x007c, 0x0e7e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x6f00, 0x7098, 0xa0ea, 0x0010, - 0x00c8, 0x12d5, 0xa06e, 0x0078, 0x12df, 0x8001, 0x709a, 0x702c, - 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, - 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6f00, 0x127e, 0x2091, 0x8000, - 0x7098, 0x8001, 0x00c8, 0x12ef, 0xa06e, 0x0078, 0x12f8, 0x709a, - 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, - 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x6f00, 0x702c, 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, - 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x1317, 0x6804, 0x6807, - 0x0000, 0x007e, 0x1078, 0x12fb, 0x0d7f, 0x0078, 0x130b, 0x007c, - 0x0e7e, 0x2071, 0x6f00, 0x7098, 0xa08a, 0x0010, 0xa00d, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x70d9, 0x7007, 0x0000, 0x701b, 0x0000, - 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, - 0x0e7f, 0x007c, 0x0e7e, 0x2270, 0x700b, 0x0000, 0x2071, 0x70d9, - 0x7018, 0xa088, 0x70e2, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, - 0x7004, 0xa005, 0x00c0, 0x134a, 0x0f7e, 0x2079, 0x0010, 0x1078, - 0x135b, 0x0f7f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x70d9, 0x7004, - 0xa005, 0x00c0, 0x1359, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x135b, - 0x0f7f, 0x0e7f, 0x007c, 0x7000, 0x0079, 0x135e, 0x1362, 0x13cc, - 0x13e9, 0x13e9, 0x7018, 0x711c, 0xa106, 0x00c0, 0x136a, 0x7007, - 0x0000, 0x007c, 0x0d7e, 0xa180, 0x70e2, 0x2004, 0x700a, 0x2068, - 0x8108, 0xa18c, 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, - 0x6828, 0x7836, 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, - 0x680c, 0x7016, 0x6804, 0x0d7f, 0xd084, 0x0040, 0x138c, 0x7007, - 0x0001, 0x1078, 0x1391, 0x007c, 0x7007, 0x0002, 0x1078, 0x13a7, - 0x007c, 0x017e, 0x027e, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, - 0x00c8, 0x139c, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, - 0x7803, 0x0020, 0x7803, 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, - 0x027e, 0x137e, 0x147e, 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, - 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, - 0x13bb, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, - 0x7803, 0x0020, 0x7803, 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, - 0x137f, 0x027f, 0x017f, 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, - 0x6fe5, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, - 0x127e, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, - 0xc084, 0x7002, 0x700b, 0x6fe0, 0x127f, 0x157f, 0x147f, 0x137f, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x7014, 0x209c, 0x20a1, - 0x0014, 0x7803, 0x0026, 0x2001, 0x7015, 0x20ac, 0x53a6, 0x2099, - 0x7016, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, - 0x127e, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, - 0xc08c, 0x7002, 0x700b, 0x7011, 0x127f, 0x157f, 0x147f, 0x137f, - 0x007c, 0x017e, 0x0e7e, 0x2071, 0x70d9, 0x0f7e, 0x2079, 0x0010, - 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0040, 0x142c, 0xa18c, 0x0700, - 0x0040, 0x1429, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, - 0x142c, 0x7004, 0x1079, 0x1430, 0x0f7f, 0x0e7f, 0x017f, 0x007c, - 0x135b, 0x1438, 0x145a, 0x1474, 0x149d, 0x1436, 0x0078, 0x1436, - 0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, - 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, - 0x137f, 0x700c, 0xa005, 0x0040, 0x1461, 0x1078, 0x1391, 0x007c, - 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, - 0x135b, 0x007c, 0x700c, 0xa005, 0x0040, 0x1461, 0x1078, 0x13a7, - 0x007c, 0x0d7e, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, - 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, - 0x0000, 0x1078, 0x135b, 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, - 0x6fe3, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, - 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0x6fe5, 0x2004, 0xd0bc, - 0x0040, 0x1493, 0x2001, 0x6fee, 0x2004, 0xa080, 0x000d, 0x20a0, - 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, - 0x1078, 0x39f5, 0x1078, 0x135b, 0x007c, 0x2001, 0x7013, 0x2003, - 0x0100, 0x7007, 0x0000, 0x1078, 0x135b, 0x007c, 0x127e, 0x2091, - 0x2100, 0x2079, 0x0030, 0x2071, 0x70ea, 0x7003, 0x0000, 0x700f, - 0x70f0, 0x7013, 0x70f0, 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, - 0xa184, 0x0007, 0x0079, 0x14bc, 0x14c4, 0x150a, 0x14c4, 0x14c4, - 0x14c4, 0x14ef, 0x14d3, 0x14c8, 0xa085, 0x0001, 0x0078, 0x1524, - 0x684c, 0xd0bc, 0x0040, 0x14c4, 0x6860, 0x682e, 0x685c, 0x682a, - 0x6858, 0x0078, 0x1512, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, - 0x14c4, 0x684c, 0xd0bc, 0x0040, 0x14c4, 0x6860, 0x682e, 0x685c, - 0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1beb, 0x2004, 0x6832, 0x6858, 0x0078, 0x151a, 0xa18c, - 0x00ff, 0xa186, 0x0015, 0x00c0, 0x14c4, 0x684c, 0xd0ac, 0x0040, - 0x14c4, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1beb, 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, - 0x0078, 0x151a, 0x684c, 0xd0ac, 0x0040, 0x14c4, 0xa006, 0x682e, - 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x1beb, 0x210c, 0x6932, - 0x2d08, 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, - 0x697c, 0x6912, 0x6980, 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, - 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff, 0x0040, 0x153f, 0xa280, - 0x0004, 0x0d7e, 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x153b, 0x1078, - 0x14b7, 0x10c0, 0x1288, 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, - 0x047e, 0x037e, 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, - 0x7000, 0xa005, 0x00c0, 0x1553, 0x7206, 0x2001, 0x1567, 0x007e, - 0x2260, 0x0078, 0x167f, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, - 0x240a, 0x8108, 0xa182, 0x710b, 0x0048, 0x1560, 0x2009, 0x70f0, - 0x710e, 0x7000, 0xa005, 0x00c0, 0x1567, 0x1078, 0x1668, 0x127f, - 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, - 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, - 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x15bb, 0x6808, 0xa005, - 0x0040, 0x1621, 0x7000, 0xa005, 0x00c0, 0x1588, 0x0078, 0x15b5, - 0x700c, 0x7110, 0xa106, 0x00c0, 0x1625, 0x7004, 0xa406, 0x00c0, - 0x15b5, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x159e, 0x047e, - 0x1078, 0x1737, 0x047f, 0x2460, 0x0078, 0x157e, 0x2001, 0x0207, - 0x2004, 0xd09c, 0x00c0, 0x1591, 0x7804, 0xa084, 0x6000, 0x0040, - 0x15af, 0xa086, 0x6000, 0x0040, 0x15af, 0x0078, 0x1591, 0x7803, - 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x55fc, 0x0078, 0x1625, 0x6808, 0xa005, 0x0040, 0x1621, 0x7000, - 0xa005, 0x00c0, 0x15c5, 0x0078, 0x1621, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x15ce, 0x7004, 0xa406, 0x00c0, 0x1621, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x0040, 0x15db, 0x047e, 0x1078, 0x1737, 0x047f, - 0x2460, 0x0078, 0x15bb, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, - 0x15ce, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x15d4, 0x7804, - 0xa084, 0x6000, 0x0040, 0x15f2, 0xa086, 0x6000, 0x0040, 0x15f2, - 0x0078, 0x15ce, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, - 0x0001, 0x0040, 0x1613, 0xa08e, 0x0002, 0x00c0, 0x1621, 0x0c7e, - 0x0e7e, 0x6818, 0x2060, 0x1078, 0x1bc0, 0x2804, 0xac70, 0x6034, - 0xd09c, 0x00c0, 0x160f, 0x7308, 0x720c, 0x0078, 0x1611, 0x7310, - 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, - 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, - 0x0000, 0x2009, 0x0048, 0x1078, 0x55fc, 0x0c7f, 0x0d7f, 0x127f, - 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x70ea, 0x7000, 0xa086, 0x0000, - 0x0040, 0x1665, 0x7004, 0xac06, 0x00c0, 0x1656, 0x2079, 0x0030, - 0x7804, 0xd0fc, 0x00c0, 0x1652, 0x2001, 0x0207, 0x2004, 0xd09c, - 0x00c0, 0x1638, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1644, - 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, - 0x0078, 0x1656, 0x1078, 0x1737, 0x0078, 0x162d, 0x157e, 0x20a9, - 0x0009, 0x2009, 0x70f0, 0x2104, 0xac06, 0x00c0, 0x1660, 0x200a, - 0xa188, 0x0003, 0x00f0, 0x165b, 0x157f, 0x0e7f, 0x0f7f, 0x007c, - 0x700c, 0x7110, 0xa106, 0x00c0, 0x1670, 0x7003, 0x0000, 0x007c, + 0x73b8, 0x1078, 0x2a53, 0x1078, 0x5129, 0x2011, 0x0004, 0x1078, + 0x6135, 0x1078, 0x35ef, 0x70c7, 0x0000, 0x70bf, 0x0000, 0x70c3, + 0x0000, 0x1078, 0x1145, 0x2011, 0x0000, 0x2079, 0x6d51, 0x7804, + 0xd0ac, 0x0040, 0x1104, 0xc295, 0x70a4, 0xa005, 0x0040, 0x1109, + 0xc29d, 0x72be, 0xa296, 0x0004, 0x0040, 0x112a, 0x2011, 0x0001, + 0x1078, 0x6135, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002, + 0x0f7f, 0x1078, 0x1ee6, 0x2011, 0x0005, 0x1078, 0x5232, 0x1078, + 0x476a, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f, + 0x0078, 0x1144, 0x7003, 0x0003, 0x2001, 0x0000, 0x1078, 0x1dc9, + 0x2011, 0x0000, 0x1078, 0x5232, 0x2011, 0x0000, 0x1078, 0x523c, + 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x1078, 0x476a, + 0x1078, 0x4821, 0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, + 0x2009, 0x007e, 0x1078, 0x342f, 0x8108, 0x00f0, 0x114a, 0x0c7f, + 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086, 0xffff, 0x0040, + 0x115f, 0x1078, 0x1ee6, 0x1078, 0x476a, 0x0078, 0x11a8, 0x70bc, + 0xd09c, 0x0040, 0x1187, 0xd084, 0x0040, 0x1187, 0x0f7e, 0x2079, + 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c, 0x0040, 0x1187, + 0x70c0, 0xa086, 0xffff, 0x0040, 0x1183, 0x1078, 0x1fdb, 0x1078, + 0x476a, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078, 0x2013, 0x1078, + 0x476a, 0x0078, 0x11a8, 0x70c4, 0xa005, 0x00c0, 0x11a8, 0x7088, + 0xa005, 0x00c0, 0x11a8, 0x7003, 0x0003, 0x708f, 0xffff, 0x2001, + 0x0000, 0x1078, 0x1dc9, 0x1078, 0x2ad1, 0x2001, 0x6f11, 0x2004, + 0xa086, 0x0005, 0x00c0, 0x11a0, 0x2011, 0x0000, 0x1078, 0x5232, + 0x2011, 0x0000, 0x1078, 0x523c, 0x1078, 0x476a, 0x1078, 0x4821, + 0x127f, 0x007c, 0x017e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, + 0x0100, 0x7843, 0x0000, 0x7924, 0xd1b4, 0x0040, 0x11b9, 0x7827, + 0x0040, 0xd19c, 0x0040, 0x11be, 0x7827, 0x0008, 0x007e, 0x037e, + 0x157e, 0x7900, 0xa18a, 0x0003, 0x0050, 0x11e4, 0x7954, 0xd1ac, + 0x00c0, 0x11e4, 0x2009, 0x00f8, 0x1078, 0x3233, 0x7843, 0x0090, + 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11dc, + 0x7824, 0xd0ac, 0x00c0, 0x1218, 0x00f0, 0x11d4, 0x2001, 0x0001, + 0x1078, 0x1dc9, 0x0078, 0x1221, 0x7853, 0x0000, 0x782f, 0x0020, + 0x20a9, 0x0008, 0x00e0, 0x11ea, 0x2091, 0x6000, 0x00f0, 0x11ea, + 0x7853, 0x0400, 0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x3233, + 0x20a9, 0x000e, 0x0005, 0x00f0, 0x11fa, 0x7853, 0x1400, 0x7843, + 0x0090, 0x7843, 0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, + 0xd08c, 0x0040, 0x120f, 0x7824, 0xd0ac, 0x00c0, 0x1218, 0x8319, + 0x00c0, 0x1205, 0x2001, 0x0001, 0x1078, 0x1dc9, 0x0078, 0x121f, + 0x7828, 0xc09d, 0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, + 0x0400, 0x157f, 0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, + 0x007c, 0x007c, 0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, + 0x0002, 0x0048, 0x1237, 0x704f, 0xffff, 0x0078, 0x1239, 0x704f, + 0x0000, 0x7053, 0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, + 0x6f00, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, + 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, + 0x07d0, 0x2061, 0x6f08, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, + 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, + 0x0001, 0x601f, 0x0000, 0x007c, 0x1078, 0x128a, 0x2011, 0x0000, + 0x81ff, 0x0040, 0x1289, 0xa186, 0x0001, 0x00c0, 0x1279, 0x705f, + 0x8fff, 0x7057, 0x7c01, 0x7063, 0x0100, 0x705b, 0x7c00, 0x0078, + 0x1287, 0xa186, 0x0002, 0x00c0, 0x1281, 0x2011, 0x0000, 0x0078, + 0x1287, 0xa186, 0x0005, 0x00c0, 0x1287, 0x2011, 0x0001, 0x1078, + 0x12b1, 0x007c, 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12b1, + 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, + 0x2c04, 0xa406, 0x0040, 0x129f, 0xc18d, 0x0078, 0x12ac, 0xc185, + 0x2011, 0x0001, 0x1078, 0x12b1, 0x2061, 0xffff, 0x2362, 0x2c04, + 0xa306, 0x00c0, 0x12ac, 0xc195, 0x2011, 0x0001, 0x1078, 0x12b1, + 0x007c, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, + 0x8000, 0x0068, 0x12b9, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, + 0xa084, 0x0000, 0x00c0, 0x12bf, 0x017f, 0x792e, 0x007f, 0x782a, + 0x007f, 0x7826, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000, + 0x2091, 0x4080, 0x2079, 0x6d00, 0x7803, 0x0005, 0x0078, 0x12d6, + 0x007c, 0x2071, 0x6d00, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190, + 0x002d, 0xa298, 0x002d, 0x0048, 0x12ef, 0x705c, 0xa302, 0x00c8, + 0x12ef, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x12e1, 0x200b, + 0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, + 0x2071, 0x6d00, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x1302, 0xa06e, + 0x0078, 0x130c, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e, + 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, + 0x2071, 0x6d00, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8, + 0x131c, 0xa06e, 0x0078, 0x1325, 0x70a2, 0x702c, 0x2068, 0x2d04, + 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, + 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x6d00, 0x702c, 0x206a, + 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c, + 0x8dff, 0x0040, 0x1344, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078, + 0x1328, 0x0d7f, 0x0078, 0x1338, 0x007c, 0x0e7e, 0x2071, 0x6d00, + 0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071, + 0x6f31, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, + 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e, + 0x2270, 0x700b, 0x0000, 0x2071, 0x6f31, 0x7018, 0xa088, 0x6f3a, + 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, + 0x1377, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1388, 0x0f7f, 0x0e7f, + 0x007c, 0x0e7e, 0x2071, 0x6f31, 0x7004, 0xa005, 0x00c0, 0x1386, + 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1388, 0x0f7f, 0x0e7f, 0x007c, + 0x7000, 0x0079, 0x138b, 0x138f, 0x13f9, 0x1416, 0x1416, 0x7018, + 0x711c, 0xa106, 0x00c0, 0x1397, 0x7007, 0x0000, 0x007c, 0x0d7e, + 0xa180, 0x6f3a, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, + 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, + 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804, + 0x0d7f, 0xd084, 0x0040, 0x13b9, 0x7007, 0x0001, 0x1078, 0x13be, + 0x007c, 0x7007, 0x0002, 0x1078, 0x13d4, 0x007c, 0x017e, 0x027e, + 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13c9, 0x2110, + 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, + 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e, + 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, + 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13e8, 0x2110, 0xa006, + 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, + 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f, + 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x6dc5, 0x20a1, 0x0018, + 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, + 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b, + 0x6dc0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e, + 0x157e, 0x2001, 0x6df4, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026, + 0x2001, 0x6df5, 0x20ac, 0x53a6, 0x2099, 0x6df6, 0x20a1, 0x0018, + 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, + 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b, + 0x6df1, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e, + 0x2071, 0x6f31, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002, + 0xd1fc, 0x0040, 0x1459, 0xa18c, 0x0700, 0x0040, 0x1456, 0x7008, + 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1459, 0x7004, 0x1079, + 0x145d, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1388, 0x1465, 0x1487, + 0x14a1, 0x14ca, 0x1463, 0x0078, 0x1463, 0x137e, 0x147e, 0x157e, + 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, + 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005, + 0x0040, 0x148e, 0x1078, 0x13be, 0x007c, 0x7008, 0xa080, 0x0002, + 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1388, 0x007c, 0x700c, + 0xa005, 0x0040, 0x148e, 0x1078, 0x13d4, 0x007c, 0x0d7e, 0x7008, + 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c, + 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1388, + 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x6dc3, 0x2004, 0xa080, + 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, + 0x53a5, 0x2001, 0x6dc5, 0x2004, 0xd0bc, 0x0040, 0x14c0, 0x2001, + 0x6dce, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, + 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x396e, 0x1078, + 0x1388, 0x007c, 0x2001, 0x6df3, 0x2003, 0x0100, 0x7007, 0x0000, + 0x1078, 0x1388, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030, + 0x2071, 0x6f42, 0x7003, 0x0000, 0x700f, 0x6f48, 0x7013, 0x6f48, + 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079, + 0x14e9, 0x14f1, 0x151b, 0x14f1, 0x14f1, 0x14f1, 0x1500, 0x14f1, + 0x14f5, 0xa085, 0x0001, 0x0078, 0x1531, 0x684c, 0xd0bc, 0x0040, + 0x14f1, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x1523, + 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x14f1, 0x684c, 0xd0ac, + 0x0040, 0x14f1, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, + 0x000f, 0xa080, 0x1a82, 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, + 0x6858, 0x0078, 0x152b, 0x684c, 0xd0ac, 0x0040, 0x14f1, 0xa006, + 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x1a82, 0x210c, + 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, + 0x680a, 0x007c, 0x82ff, 0x0040, 0x1545, 0xa280, 0x0004, 0x0d7e, + 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x1541, 0x1078, 0x14e4, 0x10c0, + 0x12b7, 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, + 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, + 0x00c0, 0x1559, 0x7206, 0x2001, 0x156d, 0x007e, 0x2260, 0x0078, + 0x164f, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, + 0xa182, 0x6f63, 0x0048, 0x1566, 0x2009, 0x6f48, 0x710e, 0x7000, + 0xa005, 0x00c0, 0x156d, 0x1078, 0x1638, 0x127f, 0x007c, 0x127e, + 0x027e, 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, + 0x037f, 0x027f, 0x0c7e, 0x0d7e, 0x2460, 0x6110, 0x2168, 0x6a62, + 0x6b5e, 0xa005, 0x0040, 0x15bc, 0x6808, 0xa005, 0x0040, 0x15ea, + 0x7000, 0xa005, 0x00c0, 0x158e, 0x0078, 0x15b4, 0x700c, 0x7110, + 0xa106, 0x00c0, 0x15ba, 0x7004, 0xa406, 0x00c0, 0x15b4, 0x2001, + 0x0005, 0x2004, 0xd08c, 0x00c0, 0x15ee, 0x2001, 0x0207, 0x2004, + 0xd09c, 0x00c0, 0x1597, 0x7804, 0xa084, 0x6000, 0x0040, 0x15ae, + 0xa086, 0x6000, 0x0040, 0x15ae, 0x0078, 0x1597, 0x7803, 0x0004, + 0x7003, 0x0000, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5591, + 0x0078, 0x15ee, 0x0078, 0x15ee, 0x6808, 0xa005, 0x0040, 0x15ea, + 0x7000, 0xa005, 0x00c0, 0x15c6, 0x0078, 0x15ea, 0x700c, 0x7110, + 0xa106, 0x00c0, 0x15ba, 0x7004, 0xa406, 0x00c0, 0x15ea, 0x2001, + 0x0005, 0x2004, 0xd08c, 0x00c0, 0x15ee, 0x2001, 0x0207, 0x2004, + 0xd09c, 0x00c0, 0x15cf, 0x7804, 0xa084, 0x6000, 0x0040, 0x15e6, + 0xa086, 0x6000, 0x0040, 0x15e6, 0x0078, 0x15cf, 0x7803, 0x0004, + 0x7003, 0x0000, 0x2009, 0x0048, 0x1078, 0x5591, 0x0d7f, 0x0c7f, + 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x6f42, 0x7000, 0xa086, + 0x0000, 0x0040, 0x1635, 0x7004, 0xac06, 0x00c0, 0x1626, 0x2079, + 0x0030, 0x7804, 0xd0fc, 0x00c0, 0x1622, 0x2001, 0x0207, 0x2004, + 0xd09c, 0x00c0, 0x1601, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, + 0x160d, 0x7908, 0xd1ec, 0x00c0, 0x1619, 0x2009, 0x0009, 0x0078, + 0x161b, 0x2009, 0x0019, 0x7803, 0x0002, 0x7902, 0x7003, 0x0003, + 0x0078, 0x1635, 0x1078, 0x16e5, 0x0078, 0x15f6, 0x157e, 0x20a9, + 0x0009, 0x2009, 0x6f48, 0x2104, 0xac06, 0x00c0, 0x1630, 0x200a, + 0xa188, 0x0003, 0x00f0, 0x162b, 0x157f, 0x0e7f, 0x0f7f, 0x007c, + 0x700c, 0x7110, 0xa106, 0x00c0, 0x1640, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, - 0xa182, 0x710b, 0x0048, 0x167e, 0x2009, 0x70f0, 0x7112, 0x8cff, - 0x00c0, 0x169e, 0x7908, 0xd1ec, 0x00c0, 0x1692, 0x1078, 0x190d, - 0x0040, 0x1692, 0x7803, 0x0009, 0x7904, 0xd1fc, 0x0040, 0x168c, - 0x7803, 0x0006, 0x7007, 0x0000, 0x1078, 0x190d, 0x0040, 0x16c5, - 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x16c5, 0x6010, 0x2068, - 0x2d58, 0x6828, 0xa406, 0x00c0, 0x16a9, 0x682c, 0xa306, 0x0040, - 0x16ad, 0x1078, 0x1c0b, 0x00c0, 0x1682, 0x684c, 0xd0f4, 0x00c0, - 0x1682, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, - 0xa0cc, 0x000f, 0x2009, 0x0011, 0x1078, 0x16c6, 0x0040, 0x16c4, - 0x2009, 0x0001, 0x1078, 0x16c6, 0x2d58, 0x007c, 0x8aff, 0x0040, - 0x1732, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x16e5, 0x0d7e, - 0x2804, 0xac68, 0x2900, 0x0079, 0x16d5, 0x1714, 0x16f5, 0x16f5, - 0x1714, 0x1714, 0x170c, 0x1714, 0x16f5, 0x1714, 0x16fb, 0x16fb, - 0x1714, 0x1714, 0x1714, 0x1703, 0x16fb, 0xc0fc, 0x6852, 0x6b6c, - 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040, 0x1717, 0x2804, - 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1717, 0x6b08, 0x6a0c, 0x6d00, - 0x6c04, 0x0078, 0x1717, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, - 0x6e0c, 0x0078, 0x1717, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, - 0xa086, 0x001e, 0x00c0, 0x1714, 0x0d7f, 0x1078, 0x1ba7, 0x00c0, - 0x16c6, 0xa00e, 0x0078, 0x1732, 0x0d7f, 0x1078, 0x1288, 0x7b22, - 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, - 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, - 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, - 0x1078, 0x1ba7, 0x007c, 0x1078, 0x1288, 0x1078, 0x1288, 0x127e, - 0x2091, 0x2100, 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, - 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1735, 0xa184, 0x0003, - 0xa086, 0x0003, 0x0040, 0x1735, 0x7000, 0x0079, 0x174f, 0x1757, - 0x1759, 0x182a, 0x188e, 0x18a5, 0x1757, 0x1757, 0x1757, 0x1078, - 0x1288, 0x8001, 0x7002, 0xa184, 0x0880, 0x00c0, 0x176e, 0x8aff, - 0x0040, 0x17ca, 0x2009, 0x0001, 0x1078, 0x16c6, 0x0040, 0x18b7, - 0x2009, 0x0001, 0x1078, 0x16c6, 0x0078, 0x18b7, 0x7803, 0x0004, - 0x7003, 0x0000, 0xd1dc, 0x0040, 0x17b9, 0x027e, 0x037e, 0x6b28, - 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, - 0x6a2e, 0x7820, 0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, - 0x6816, 0x037f, 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, - 0x1bc0, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, - 0x0000, 0x6850, 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, - 0x17ab, 0x684c, 0xd0e4, 0x0040, 0x17ab, 0x7004, 0x2060, 0x2009, - 0x0048, 0x1078, 0x55fc, 0x7808, 0xd0ec, 0x00c0, 0x17b5, 0x7803, - 0x0009, 0x7003, 0x0004, 0x0078, 0x18b7, 0x1078, 0x1668, 0x0078, - 0x18b7, 0x057e, 0x7d0c, 0x1078, 0x6e15, 0x057f, 0x1078, 0x18bb, - 0x697c, 0x6912, 0x6980, 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, - 0x0078, 0x18b7, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, - 0x17e2, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17de, - 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x55fc, 0x1078, 0x1668, - 0x0078, 0x18b7, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, - 0x0000, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa188, 0x0007, - 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, - 0x810b, 0x810b, 0x810b, 0x1078, 0x18ea, 0x7803, 0x0004, 0x780f, - 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0040, 0x1803, 0x7803, - 0x0002, 0x7803, 0x0004, 0x780f, 0x0070, 0x7004, 0x7007, 0x0000, - 0x2060, 0x2009, 0x0048, 0x1078, 0x55fc, 0x1078, 0x190d, 0x0040, - 0x17de, 0x7908, 0xd1ec, 0x00c0, 0x1821, 0x2009, 0x0009, 0x0078, - 0x1823, 0x2009, 0x0019, 0x7902, 0x7803, 0x0009, 0x7003, 0x0003, - 0x0078, 0x18b7, 0x8001, 0x7002, 0xd194, 0x0040, 0x183c, 0x7804, - 0xd0fc, 0x00c0, 0x173f, 0x8aff, 0x0040, 0x18b7, 0x2009, 0x0001, - 0x1078, 0x16c6, 0x0078, 0x18b7, 0xa184, 0x0880, 0x00c0, 0x1849, - 0x8aff, 0x0040, 0x18b7, 0x2009, 0x0001, 0x1078, 0x16c6, 0x0078, - 0x18b7, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, 0x187d, - 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1bc0, 0x0d7e, 0x0f7e, - 0x2d78, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x186d, 0x6808, - 0x2008, 0xa31a, 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, - 0x7814, 0xa101, 0x7816, 0x0078, 0x1879, 0x6810, 0x2008, 0xa31a, - 0x6814, 0xa213, 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, - 0x7816, 0x0f7f, 0x0d7f, 0x0078, 0x1779, 0x057e, 0x7d0c, 0x1078, - 0x6e15, 0x057f, 0x1078, 0x18bb, 0x697c, 0x6912, 0x6980, 0x6916, - 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x18b7, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x18a1, 0x6808, 0x8001, - 0x680a, 0x00c0, 0x18a1, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x55fc, 0x1078, 0x1668, 0x0078, 0x18b7, 0x7803, 0x0004, 0x7003, - 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x18a1, 0x2068, - 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x167f, 0x017f, - 0x007f, 0x127f, 0x007c, 0x1078, 0x18cc, 0x20e1, 0x9028, 0x700f, - 0x70f0, 0x7013, 0x70f0, 0x2001, 0x015d, 0x200c, 0x810a, 0x2102, - 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, - 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, - 0x18e9, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x18e9, - 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x18e9, 0x8421, 0x00c0, - 0x18d3, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, 0x7808, - 0xa084, 0xf000, 0xa10d, 0x1078, 0x18cc, 0x20e1, 0x7000, 0x7324, - 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, - 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, - 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, 0x7908, - 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x191a, 0xa085, 0x0001, - 0x0078, 0x192c, 0x2001, 0x020a, 0x81ff, 0x0040, 0x1925, 0x20e1, - 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, 0x200c, - 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, 0x0e7e, - 0x2071, 0x710b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, 0xa280, - 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x19b1, 0x6934, 0xa184, - 0x0007, 0x0079, 0x1943, 0x194b, 0x199c, 0x194b, 0x194b, 0x194b, - 0x1981, 0x195e, 0x194d, 0x1078, 0x1288, 0x684c, 0xd0b4, 0x0040, - 0x1ab3, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, - 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x19a4, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x00c0, 0x194b, 0x684c, 0xd0b4, 0x0040, - 0x1ab3, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, - 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, - 0xa084, 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6958, 0x0078, - 0x19ad, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x19b1, 0x684c, - 0xd0b4, 0x0040, 0x1ab3, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, - 0xa084, 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6958, 0xa006, - 0x682e, 0x682a, 0x0078, 0x19ad, 0x684c, 0xd0b4, 0x0040, 0x1733, - 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, - 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6926, 0x684c, 0xc0dd, - 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, 0xd0fc, - 0x10c0, 0x1ab7, 0x0e7e, 0x0d7e, 0x2071, 0x710b, 0x7000, 0xa005, - 0x00c0, 0x1a2d, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, - 0x2068, 0x6818, 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, 0x0f7e, - 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, - 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, - 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, - 0x0040, 0x19ef, 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, 0xa108, - 0x791a, 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, - 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x00c0, - 0x1a06, 0x6928, 0x6810, 0xa106, 0x0040, 0x1a13, 0x037e, 0x047e, - 0x6b14, 0x6c10, 0x1078, 0x1c0b, 0x047f, 0x037f, 0x0040, 0x1a13, - 0x0c7f, 0x0078, 0x1a2d, 0x8aff, 0x00c0, 0x1a1b, 0x0c7f, 0xa085, - 0x0001, 0x0078, 0x1a2d, 0x127e, 0x2091, 0x8000, 0x2079, 0x0020, - 0x2009, 0x0001, 0x1078, 0x1a31, 0x0040, 0x1a2a, 0x2009, 0x0001, - 0x1078, 0x1a31, 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, 0x0f7f, - 0x007c, 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, 0x8aff, - 0x0040, 0x1aac, 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, 0xa203, - 0x0048, 0x1aab, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1a5e, - 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1a4e, 0x1a8d, 0x1a6e, - 0x1a6e, 0x1a8d, 0x1a8d, 0x1a85, 0x1a8d, 0x1a6e, 0x1a8d, 0x1a74, - 0x1a74, 0x1a8d, 0x1a8d, 0x1a8d, 0x1a7c, 0x1a74, 0xc0fc, 0x6852, - 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1a91, 0x0d7e, - 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1a90, 0x6b08, 0x6a0c, - 0x6d00, 0x6c04, 0x0078, 0x1a90, 0x6b10, 0x6a14, 0x6d00, 0x6c04, - 0x6f08, 0x6e0c, 0x0078, 0x1a90, 0x0d7f, 0x0d7e, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1a8d, 0x0d7f, 0x1078, 0x1ba7, - 0x00c0, 0x1a37, 0xa00e, 0x0078, 0x1aac, 0x0d7f, 0x1078, 0x1288, - 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, - 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, - 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, - 0x1ba7, 0x0078, 0x1aac, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, - 0x067f, 0x077f, 0x007c, 0x1078, 0x1288, 0x1078, 0x1288, 0x127e, - 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x2079, 0x0020, 0x2071, 0x710b, 0x2b68, 0x6818, 0x2060, 0x7904, - 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1ab5, 0x7000, 0x0079, - 0x1ad1, 0x1b78, 0x1ad5, 0x1b45, 0x1b76, 0x8001, 0x7002, 0xd19c, - 0x00c0, 0x1ae9, 0x8aff, 0x0040, 0x1b08, 0x2009, 0x0001, 0x1078, - 0x1a31, 0x0040, 0x1b78, 0x2009, 0x0001, 0x1078, 0x1a31, 0x0078, - 0x1b78, 0x7803, 0x0004, 0xd194, 0x0040, 0x1af9, 0x6850, 0xc0fc, - 0x6852, 0x8aff, 0x00c0, 0x1afe, 0x684c, 0xc0f5, 0x684e, 0x0078, - 0x1afe, 0x1078, 0x1bc0, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, - 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, 0x1b78, - 0x711c, 0x81ff, 0x0040, 0x1b1e, 0x7918, 0x7922, 0x7827, 0x0000, - 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, 0x700e, - 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1b78, 0x0f7e, 0x027e, - 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, 0xa284, - 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, 0x1b2c, - 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, 0x78c6, - 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, - 0x0008, 0x7003, 0x0000, 0x0078, 0x1b78, 0x8001, 0x7002, 0xd194, - 0x0040, 0x1b5a, 0x7804, 0xd0fc, 0x00c0, 0x1ac7, 0xd19c, 0x00c0, - 0x1b74, 0x8aff, 0x0040, 0x1b78, 0x2009, 0x0001, 0x1078, 0x1a31, - 0x0078, 0x1b78, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1bc0, - 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1b6d, 0x6808, - 0xa31a, 0x680c, 0xa213, 0x0078, 0x1b71, 0x6810, 0xa31a, 0x6814, - 0xa213, 0x0d7f, 0x0078, 0x1af9, 0x0078, 0x1af9, 0x1078, 0x1288, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, - 0x0f7e, 0x0e7e, 0x2071, 0x710b, 0x7000, 0xa086, 0x0000, 0x0040, - 0x1ba4, 0x2079, 0x0020, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x0040, - 0x1b8b, 0x1078, 0x1ab7, 0x7000, 0xa086, 0x0000, 0x00c0, 0x1b8b, - 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1b9a, 0x20e1, 0x9040, + 0xa182, 0x6f63, 0x0048, 0x164e, 0x2009, 0x6f48, 0x7112, 0x8cff, + 0x00c0, 0x1658, 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x167b, + 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x1663, 0x682c, + 0xa306, 0x0040, 0x1667, 0x1078, 0x1aa2, 0x00c0, 0x1652, 0x6824, + 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, + 0x2009, 0x0011, 0x1078, 0x167c, 0x0040, 0x167a, 0x2009, 0x0001, + 0x1078, 0x167c, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x16e0, 0xa03e, + 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x169b, 0x0d7e, 0x2804, 0xac68, + 0x2900, 0x0079, 0x168b, 0x16ca, 0x16ab, 0x16ab, 0x16ca, 0x16ca, + 0x16c2, 0x16ca, 0x16ab, 0x16ca, 0x16b1, 0x16b1, 0x16ca, 0x16ca, + 0x16ca, 0x16ca, 0x16b1, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, + 0x6c20, 0x0d7e, 0xd99c, 0x0040, 0x16cd, 0x2804, 0xac68, 0x6f08, + 0x6e0c, 0x0078, 0x16cd, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, + 0x16cd, 0x7b0c, 0xd3bc, 0x0040, 0x16ba, 0x7b08, 0xa39c, 0x0fff, + 0x0078, 0x16bb, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, + 0x0078, 0x16cd, 0x0d7f, 0x1078, 0x1a3f, 0x00c0, 0x167c, 0xa00e, + 0x0078, 0x16e0, 0x0d7f, 0x1078, 0x12b7, 0x7b22, 0x7a26, 0x7d32, + 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f, + 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x1078, 0x1a3f, + 0x007c, 0x1078, 0x12b7, 0x1078, 0x12b7, 0x127e, 0x2091, 0x2100, + 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, + 0xa184, 0x0700, 0x00c0, 0x16e3, 0xa184, 0x0003, 0xa086, 0x0003, + 0x0040, 0x16e3, 0x7000, 0x0079, 0x16fd, 0x1701, 0x1703, 0x1779, + 0x17c0, 0x1078, 0x12b7, 0x8001, 0x7002, 0xa184, 0x0880, 0x00c0, + 0x1718, 0x8aff, 0x0040, 0x175b, 0x2009, 0x0001, 0x1078, 0x167c, + 0x0040, 0x17d3, 0x2009, 0x0001, 0x1078, 0x167c, 0x0078, 0x17d3, + 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, 0x1751, 0x027e, + 0x037e, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872, + 0xa213, 0x6b2a, 0x6a2e, 0x037f, 0x027f, 0x7830, 0x681e, 0x7834, + 0x6822, 0x1078, 0x1a58, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, + 0x6832, 0x7003, 0x0000, 0x6850, 0xc0fd, 0x6852, 0x6808, 0x8001, + 0x680a, 0x00c0, 0x174d, 0x684c, 0xd0e4, 0x0040, 0x174d, 0x7004, + 0x2060, 0x2009, 0x0048, 0x1078, 0x5591, 0x1078, 0x1638, 0x0078, + 0x17d3, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x1758, 0x1078, 0x6c41, + 0x057f, 0x0078, 0x1773, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, + 0x00c0, 0x1773, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, + 0x176f, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5591, 0x1078, + 0x1638, 0x0078, 0x17d3, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, + 0x17d3, 0x8001, 0x7002, 0xd194, 0x0040, 0x178b, 0x7804, 0xd0fc, + 0x00c0, 0x16ed, 0x8aff, 0x0040, 0x17d3, 0x2009, 0x0001, 0x1078, + 0x167c, 0x0078, 0x17d3, 0xa184, 0x0880, 0x00c0, 0x1798, 0x8aff, + 0x0040, 0x17d3, 0x2009, 0x0001, 0x1078, 0x167c, 0x0078, 0x17d3, + 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, 0x17b9, 0x027e, + 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1a58, 0x0d7e, 0x2804, 0xac68, + 0x6034, 0xd09c, 0x00c0, 0x17b2, 0x6808, 0xa31a, 0x680c, 0xa213, + 0x0078, 0x17b6, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, 0x0078, + 0x1723, 0x057e, 0x7d0c, 0x1078, 0x6c41, 0x057f, 0x0078, 0x1773, + 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x17d1, 0x6808, 0x8001, + 0x680a, 0x00c0, 0x17d1, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, + 0x5591, 0x1078, 0x1638, 0x017f, 0x007f, 0x127f, 0x007c, 0x0e7e, + 0x2071, 0x6f63, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, 0xa280, + 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1836, 0x6934, 0xa184, + 0x0007, 0x0079, 0x17eb, 0x17f3, 0x1821, 0x17f3, 0x17f3, 0x17f3, + 0x1806, 0x17f3, 0x17f5, 0x1078, 0x12b7, 0x684c, 0xd0b4, 0x0040, + 0x192f, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, + 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1829, 0xa18c, 0x00ff, + 0xa186, 0x0015, 0x00c0, 0x1836, 0x684c, 0xd0b4, 0x0040, 0x192f, + 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, + 0x1a82, 0x2004, 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, 0x0078, + 0x1832, 0x684c, 0xd0b4, 0x0040, 0x16e1, 0x6958, 0xa006, 0x682e, + 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, 0xa080, 0x1a82, + 0x2004, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, + 0x0f7e, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x10c0, 0x1933, 0x0e7e, + 0x0d7e, 0x2071, 0x6f63, 0x7000, 0xa005, 0x00c0, 0x18b2, 0x0c7e, + 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068, 0x6818, 0x0d7e, + 0x2068, 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, + 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, + 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, + 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, 0x0040, 0x1874, 0x017e, + 0x2009, 0x0008, 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, + 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, + 0x7004, 0x692c, 0x6814, 0xa106, 0x00c0, 0x188b, 0x6928, 0x6810, + 0xa106, 0x0040, 0x1898, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, + 0x1aa2, 0x047f, 0x037f, 0x0040, 0x1898, 0x0c7f, 0x0078, 0x18b2, + 0x8aff, 0x00c0, 0x18a0, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x18b2, + 0x127e, 0x2091, 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, + 0x18b6, 0x0040, 0x18af, 0x2009, 0x0001, 0x1078, 0x18b6, 0x127f, + 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, + 0x057e, 0x047e, 0x037e, 0x027e, 0x8aff, 0x0040, 0x1928, 0x700c, + 0x7214, 0xa202, 0x7010, 0x7218, 0xa203, 0x0048, 0x1927, 0xa03e, + 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x18e3, 0x0d7e, 0x2804, 0xac68, + 0x2900, 0x0079, 0x18d3, 0x1909, 0x18f3, 0x18f3, 0x1909, 0x1909, + 0x1901, 0x1909, 0x18f3, 0x1909, 0x18f9, 0x18f9, 0x1909, 0x1909, + 0x1909, 0x1909, 0x18f9, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, + 0x6c20, 0xd99c, 0x0040, 0x190d, 0x0d7e, 0x2804, 0xac68, 0x6f08, + 0x6e0c, 0x0078, 0x190c, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, + 0x190c, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, + 0x190c, 0x0d7f, 0x1078, 0x1a3f, 0x00c0, 0x18bc, 0xa00e, 0x0078, + 0x1928, 0x0d7f, 0x1078, 0x12b7, 0x0d7f, 0x7b22, 0x7a26, 0x7d32, + 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x6828, + 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c, 0xa300, 0x700e, + 0x7010, 0xa201, 0x7012, 0x1078, 0x1a3f, 0x0078, 0x1928, 0xa006, + 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, + 0x12b7, 0x1078, 0x12b7, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, + 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0x6f63, + 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, + 0x00c0, 0x1931, 0x7000, 0x0079, 0x194d, 0x1a09, 0x1951, 0x19d6, + 0x1a07, 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1965, 0x8aff, 0x0040, + 0x199a, 0x2009, 0x0001, 0x1078, 0x18b6, 0x0040, 0x1a09, 0x2009, + 0x0001, 0x1078, 0x18b6, 0x0078, 0x1a09, 0x7803, 0x0004, 0xd194, + 0x0040, 0x1975, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1990, + 0x684c, 0xc0f5, 0x684e, 0x0078, 0x1990, 0x027e, 0x037e, 0x6b28, + 0x6a2c, 0x701c, 0xa005, 0x10c0, 0x1a11, 0x7820, 0x686e, 0xa31a, + 0x7824, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x037f, 0x027f, 0x7830, + 0x681e, 0x7834, 0x6822, 0x1078, 0x1a58, 0x6850, 0xc0fd, 0x6852, + 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, + 0x0078, 0x1a09, 0x711c, 0x81ff, 0x0040, 0x19af, 0x7922, 0x7827, + 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, + 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1a09, 0x0f7e, + 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, + 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, + 0x19bd, 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, + 0x78c6, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, + 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, 0x1a09, 0x8001, 0x7002, + 0xd194, 0x0040, 0x19eb, 0x7804, 0xd0fc, 0x00c0, 0x1943, 0xd19c, + 0x00c0, 0x1a05, 0x8aff, 0x0040, 0x1a09, 0x2009, 0x0001, 0x1078, + 0x18b6, 0x0078, 0x1a09, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, + 0x1a58, 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x19fe, + 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1a02, 0x6810, 0xa31a, + 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1979, 0x0078, 0x1975, 0x1078, + 0x12b7, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, + 0x007c, 0x7920, 0xa108, 0x7922, 0x7924, 0xa189, 0x0000, 0x7926, + 0x7930, 0xa10a, 0x7932, 0x7934, 0xa18b, 0x0000, 0x7936, 0x007c, + 0x0f7e, 0x0e7e, 0x2071, 0x6f63, 0x7000, 0xa086, 0x0000, 0x0040, + 0x1a3c, 0x2079, 0x0020, 0x7804, 0xa084, 0x0003, 0x0040, 0x1a36, + 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1a32, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, 0x8840, - 0x2804, 0xa005, 0x00c0, 0x1bbb, 0x6004, 0xa005, 0x0040, 0x1bbd, - 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1beb, 0x2044, - 0x88ff, 0x1040, 0x1288, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, - 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0, 0x1bda, 0x2c00, 0xad06, - 0x0040, 0x1bcf, 0x6000, 0xa005, 0x00c0, 0x1bcf, 0x2d00, 0x2060, - 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, 0x1bfb, 0x2044, 0x88ff, - 0x1040, 0x1288, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, + 0x2804, 0xa005, 0x00c0, 0x1a53, 0x6004, 0xa005, 0x0040, 0x1a55, + 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1a82, 0x2044, + 0x88ff, 0x1040, 0x12b7, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, + 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0, 0x1a72, 0x2c00, 0xad06, + 0x0040, 0x1a67, 0x6000, 0xa005, 0x00c0, 0x1a67, 0x2d00, 0x2060, + 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, 0x1a92, 0x2044, 0x88ff, + 0x1040, 0x12b7, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, - 0x0027, 0x0000, 0x0000, 0x0000, 0x1be0, 0x1bdc, 0x0000, 0x0000, - 0x1bea, 0x0000, 0x1be0, 0x0000, 0x1be7, 0x1be4, 0x0000, 0x0000, - 0x0000, 0x1bea, 0x1be7, 0x0000, 0x1be2, 0x1be2, 0x0000, 0x0000, - 0x1bea, 0x0000, 0x1be2, 0x0000, 0x1be8, 0x1be8, 0x0000, 0x0000, - 0x0000, 0x1bea, 0x1be8, 0x0a7e, 0x097e, 0x087e, 0x6858, 0xa055, - 0x0040, 0x1ca8, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1beb, - 0xa986, 0x0007, 0x0040, 0x1c24, 0xa986, 0x000e, 0x0040, 0x1c24, - 0xa986, 0x000f, 0x00c0, 0x1c28, 0x605c, 0xa422, 0x6060, 0xa31a, - 0x2804, 0xa045, 0x00c0, 0x1c36, 0x0050, 0x1c30, 0x0078, 0x1ca8, - 0x6004, 0xa065, 0x0040, 0x1ca8, 0x0078, 0x1c13, 0x2804, 0xa005, - 0x0040, 0x1c54, 0xac68, 0xd99c, 0x00c0, 0x1c44, 0x6808, 0xa422, - 0x680c, 0xa31b, 0x0078, 0x1c48, 0x6810, 0xa422, 0x6814, 0xa31b, - 0x0048, 0x1c73, 0x2300, 0xa405, 0x0040, 0x1c5a, 0x8a51, 0x0040, - 0x1ca8, 0x8840, 0x0078, 0x1c36, 0x6004, 0xa065, 0x0040, 0x1ca8, - 0x0078, 0x1c13, 0x8a51, 0x0040, 0x1ca8, 0x8840, 0x2804, 0xa005, - 0x00c0, 0x1c6d, 0x6004, 0xa065, 0x0040, 0x1ca8, 0x6034, 0xa0cc, - 0x000f, 0xa9c0, 0x1beb, 0x2804, 0x2040, 0x2b68, 0x6850, 0xc0fc, - 0x6852, 0x0078, 0x1ca0, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, - 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, 0x1c8e, - 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, 0x1288, - 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x1c9a, 0x6910, 0x2400, - 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1288, 0x6800, 0xa420, - 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, 0x6852, - 0x2c00, 0x681a, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1cad, + 0x0027, 0x0000, 0x0000, 0x1a78, 0x1a74, 0x0000, 0x0000, 0x8000, + 0x0000, 0x1a78, 0x0000, 0x1a7f, 0x1a7c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1a7f, 0x0000, 0x1a7a, 0x1a7a, 0x0000, 0x0000, 0x8000, + 0x0000, 0x1a7a, 0x0000, 0x1a80, 0x1a80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1a80, 0x0a7e, 0x097e, 0x087e, 0x6858, 0xa055, 0x0040, + 0x1b28, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1a82, 0xa986, + 0x0007, 0x0040, 0x1ab7, 0xa986, 0x000f, 0x00c0, 0x1abb, 0x605c, + 0xa422, 0x6060, 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1ac9, 0x0050, + 0x1ac3, 0x0078, 0x1b28, 0x6004, 0xa065, 0x0040, 0x1b28, 0x0078, + 0x1aaa, 0x2804, 0xa005, 0x0040, 0x1ae7, 0xac68, 0xd99c, 0x00c0, + 0x1ad7, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0078, 0x1adb, 0x6810, + 0xa422, 0x6814, 0xa31b, 0x0048, 0x1af5, 0x2300, 0xa405, 0x0040, + 0x1aed, 0x8a51, 0x0040, 0x1b28, 0x8840, 0x0078, 0x1ac9, 0x6004, + 0xa065, 0x0040, 0x1b28, 0x0078, 0x1aaa, 0x8a51, 0x8840, 0x2b68, + 0x6850, 0xc0fc, 0x6852, 0x0078, 0x1b22, 0x8422, 0x8420, 0x831a, + 0xa399, 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, + 0x00c0, 0x1b10, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, + 0x1048, 0x12b7, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x1b1c, + 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x12b7, + 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, + 0xc0fd, 0x6852, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1b2d, 0x087f, 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, - 0x2004, 0xa084, 0x0007, 0x0079, 0x1cb5, 0x1cbd, 0x1cbe, 0x1cc1, - 0x1cc4, 0x1cc9, 0x1ccc, 0x1cd1, 0x1cd6, 0x007c, 0x1078, 0x1ab7, - 0x007c, 0x1078, 0x1737, 0x007c, 0x1078, 0x1737, 0x1078, 0x1ab7, - 0x007c, 0x1078, 0x1411, 0x007c, 0x1078, 0x1ab7, 0x1078, 0x1411, - 0x007c, 0x1078, 0x1737, 0x1078, 0x1411, 0x007c, 0x1078, 0x1737, - 0x1078, 0x1ab7, 0x1078, 0x1411, 0x007c, 0x127e, 0x2091, 0x2300, - 0x2079, 0x0200, 0x2071, 0x7380, 0x2069, 0x6f00, 0x2009, 0x0004, - 0x7912, 0x7817, 0x0004, 0x1078, 0x1fb7, 0x781b, 0x0002, 0x20e1, - 0x8700, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, - 0x0007, 0x0079, 0x1cfb, 0x1d1f, 0x1d03, 0x1d07, 0x1d0b, 0x1d11, - 0x1d15, 0x1d19, 0x1d1d, 0x1078, 0x3e23, 0x0078, 0x1d1f, 0x1078, - 0x3e52, 0x0078, 0x1d1f, 0x1078, 0x3e23, 0x1078, 0x3e52, 0x0078, - 0x1d1f, 0x1078, 0x1d21, 0x0078, 0x1d1f, 0x1078, 0x1d21, 0x0078, - 0x1d1f, 0x1078, 0x1d21, 0x0078, 0x1d1f, 0x1078, 0x1d21, 0x127f, - 0x007c, 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, - 0x1d2b, 0x1078, 0x1288, 0xa184, 0x0030, 0x0040, 0x1d3c, 0x6a00, - 0xa286, 0x0003, 0x00c0, 0x1d36, 0x1078, 0x1288, 0x1078, 0x3229, - 0x20e1, 0x9010, 0x0078, 0x1d48, 0xa184, 0x00c0, 0x0040, 0x1d42, - 0x1078, 0x1288, 0xa184, 0x0300, 0x0040, 0x1d48, 0x20e1, 0x9020, - 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, - 0x2071, 0x6f00, 0x7128, 0x2001, 0x70a3, 0x2102, 0x2001, 0x70ab, - 0x2102, 0xa182, 0x0211, 0x00c8, 0x1d61, 0x2009, 0x0008, 0x0078, - 0x1d8b, 0xa182, 0x0259, 0x00c8, 0x1d69, 0x2009, 0x0007, 0x0078, - 0x1d8b, 0xa182, 0x02c1, 0x00c8, 0x1d71, 0x2009, 0x0006, 0x0078, - 0x1d8b, 0xa182, 0x0349, 0x00c8, 0x1d79, 0x2009, 0x0005, 0x0078, - 0x1d8b, 0xa182, 0x0421, 0x00c8, 0x1d81, 0x2009, 0x0004, 0x0078, - 0x1d8b, 0xa182, 0x0581, 0x00c8, 0x1d89, 0x2009, 0x0003, 0x0078, - 0x1d8b, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, 0x0005, - 0x00c8, 0x1d95, 0x7916, 0x0078, 0x1d97, 0x7817, 0x0004, 0x1078, - 0x1fb7, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, - 0x2061, 0x0100, 0x2071, 0x6f00, 0x6024, 0x6026, 0x6033, 0x00ef, - 0x60e7, 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, - 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x00af, - 0x600f, 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x6f2b, - 0x2003, 0x0000, 0x2001, 0x6f2a, 0x2003, 0x0001, 0x007c, 0x127e, - 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, - 0x00c0, 0x1dd6, 0xa184, 0x0007, 0x0079, 0x1ddc, 0xa195, 0x0004, - 0xa284, 0x0007, 0x0079, 0x1ddc, 0x1e08, 0x1de4, 0x1de8, 0x1dec, - 0x1df2, 0x1df6, 0x1dfc, 0x1e02, 0x1078, 0x42ff, 0x0078, 0x1e08, - 0x1078, 0x43ee, 0x0078, 0x1e08, 0x1078, 0x43ee, 0x1078, 0x42ff, - 0x0078, 0x1e08, 0x1078, 0x1e0d, 0x0078, 0x1e08, 0x1078, 0x42ff, - 0x1078, 0x1e0d, 0x0078, 0x1e08, 0x1078, 0x43ee, 0x1078, 0x1e0d, - 0x0078, 0x1e08, 0x1078, 0x43ee, 0x1078, 0x42ff, 0x1078, 0x1e0d, - 0x027f, 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1ebd, - 0x017e, 0x047e, 0x0c7e, 0x644c, 0x74b2, 0xa48c, 0xff00, 0xa196, - 0xff00, 0x0040, 0x1e3c, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, - 0x0040, 0x1e3c, 0x7130, 0xd18c, 0x00c0, 0x1e3c, 0x2011, 0x6f52, - 0x2214, 0xd2ec, 0x0040, 0x1e30, 0xc18d, 0x7132, 0x0078, 0x1e3c, - 0x6240, 0xa294, 0x0010, 0x0040, 0x1e7a, 0x6248, 0xa294, 0xff00, - 0xa296, 0xff00, 0x00c0, 0x1e7a, 0x037e, 0x73b0, 0x2011, 0x8013, - 0x1078, 0x29fa, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x6f52, - 0x220c, 0xd1a4, 0x0040, 0x1e62, 0x017e, 0x2009, 0x0001, 0x2011, - 0x0100, 0x1078, 0x42cd, 0x2019, 0x000e, 0x1078, 0x6d5c, 0xa484, - 0x00ff, 0x1078, 0x1fe4, 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, - 0x6dc4, 0x017f, 0xd1ac, 0x00c0, 0x1e6b, 0x2019, 0x0004, 0x1078, - 0x2186, 0x0078, 0x1e7a, 0x157e, 0x20a9, 0x007e, 0x2009, 0x0000, - 0x1078, 0x34cb, 0x00c0, 0x1e76, 0x1078, 0x32cf, 0x8108, 0x00f0, - 0x1e70, 0x157f, 0x0c7f, 0x047f, 0x6043, 0x0000, 0x2009, 0x00f7, - 0x1078, 0x3292, 0x0f7e, 0x2079, 0x70c9, 0x783c, 0xa086, 0x0000, - 0x0040, 0x1e92, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, - 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x5193, 0x2011, - 0x0002, 0x1078, 0x519d, 0x1078, 0x50a9, 0x1078, 0x4204, 0x037e, - 0x2019, 0x0000, 0x1078, 0x513b, 0x037f, 0x60e3, 0x0000, 0x017f, - 0x2001, 0x6f00, 0x2014, 0xa296, 0x0004, 0x00c0, 0x1eb5, 0xd19c, - 0x00c0, 0x1eb5, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, - 0x6f1e, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x1f5e, - 0x0f7e, 0x2079, 0x70c9, 0x783c, 0xa086, 0x0001, 0x00c0, 0x1ee1, - 0x017e, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, - 0x1000, 0x7803, 0x0000, 0x2079, 0x70b6, 0x7807, 0x0000, 0x7833, - 0x0000, 0x1078, 0x4893, 0x1078, 0x4943, 0x017f, 0x0f7f, 0x0078, - 0x1f5e, 0x0f7f, 0x017e, 0x6220, 0xd2b4, 0x0040, 0x1f16, 0x1078, - 0x4204, 0x1078, 0x4f8e, 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, - 0x6804, 0xa084, 0x4000, 0x0040, 0x1ef9, 0x6803, 0x1000, 0x6803, - 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x70b6, 0x6028, 0xa09a, 0x0002, - 0x00c8, 0x1f09, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x4f80, 0x0078, - 0x1f5d, 0x2019, 0x70bf, 0x2304, 0xa065, 0x0040, 0x1f13, 0x2009, - 0x0027, 0x1078, 0x55fc, 0x0c7f, 0x0078, 0x1f5d, 0xd2bc, 0x0040, - 0x1f5d, 0x1078, 0x4212, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, - 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1f2b, 0x6803, - 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x70b6, 0x6044, - 0xa09a, 0x0002, 0x00c8, 0x1f4c, 0x8000, 0x6046, 0x603c, 0x0c7f, - 0xa005, 0x0040, 0x1f5d, 0x1078, 0x4209, 0xa080, 0x0007, 0x2004, - 0xa086, 0x0006, 0x00c0, 0x1f48, 0x6017, 0x0012, 0x0078, 0x1f5d, - 0x6017, 0x0016, 0x0078, 0x1f5d, 0x037e, 0x2019, 0x0001, 0x1078, - 0x513b, 0x037f, 0x2019, 0x70c5, 0x2304, 0xa065, 0x0040, 0x1f5c, - 0x2009, 0x004f, 0x1078, 0x55fc, 0x0c7f, 0x017f, 0xd19c, 0x0040, - 0x1f86, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, - 0x5193, 0x2011, 0x0002, 0x1078, 0x519d, 0x1078, 0x50a9, 0x1078, - 0x4204, 0x037e, 0x2019, 0x0000, 0x1078, 0x513b, 0x037f, 0x60e3, - 0x0000, 0x1078, 0x6e33, 0x1078, 0x6e51, 0x2001, 0x6f00, 0x2003, - 0x0004, 0x6027, 0x0008, 0x1078, 0x117d, 0x017f, 0xa18c, 0xffd0, - 0x6126, 0x007c, 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x6f00, 0x71a8, 0x70aa, 0xa116, 0x0040, - 0x1fb0, 0x81ff, 0x0040, 0x1fa2, 0x2011, 0x8011, 0x1078, 0x29fa, - 0x0078, 0x1fb0, 0x2011, 0x8012, 0x1078, 0x29fa, 0x037e, 0x0c7e, - 0x2061, 0x0100, 0x2019, 0x0028, 0x1078, 0x2186, 0x0c7f, 0x037f, - 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, - 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x1fd2, 0x2204, - 0x60f2, 0xa192, 0x0005, 0x00c8, 0x1fc9, 0xa190, 0x1fdb, 0x0078, - 0x1fcb, 0x2011, 0x1fdf, 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, - 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, - 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, - 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0xa080, 0x2207, 0x200c, 0xa18c, - 0xff00, 0x810f, 0x007c, 0xa080, 0x2207, 0x200c, 0xa18c, 0x00ff, - 0x007c, 0x2011, 0x2015, 0x2019, 0x201f, 0x2025, 0x202b, 0x2031, - 0x2039, 0x2041, 0x2047, 0x204d, 0x2055, 0x205d, 0x2065, 0x206d, - 0x2077, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, - 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, - 0x2081, 0x107e, 0x007e, 0x0078, 0x209a, 0x107e, 0x007e, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1dc7, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x1078, 0x1cf3, 0x0078, - 0x209a, 0x0005, 0x0078, 0x2081, 0xb084, 0x003c, 0x8004, 0x8004, - 0x0079, 0x208a, 0x209a, 0x2017, 0x201b, 0x2021, 0x2027, 0x202d, - 0x2033, 0x203b, 0x2043, 0x2049, 0x204f, 0x2057, 0x205f, 0x2067, - 0x206f, 0x2079, 0x0008, 0x2084, 0x007f, 0x107f, 0x2091, 0x8001, - 0x007c, 0x0c7e, 0x027e, 0x2001, 0x010c, 0x203c, 0x7274, 0x82ff, - 0x0040, 0x20f0, 0x037e, 0x7384, 0xa38e, 0xffff, 0x00c0, 0x20b2, - 0x2019, 0x0001, 0x8314, 0xa2e0, 0x74c0, 0x2c04, 0xa38c, 0x0001, - 0x0040, 0x20bf, 0xa084, 0xff00, 0x8007, 0x0078, 0x20c1, 0xa084, - 0x00ff, 0xa70e, 0x0040, 0x20e5, 0xa08e, 0x0000, 0x0040, 0x20e5, - 0xa08e, 0x00ff, 0x0040, 0x20eb, 0x1078, 0x1fe4, 0x1078, 0x3494, - 0x00c0, 0x20e8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, - 0x20df, 0x1078, 0x2138, 0x0040, 0x20e8, 0x0078, 0x20e5, 0x1078, - 0x21d3, 0x1078, 0x215f, 0x0040, 0x20e8, 0x8318, 0x0078, 0x20b2, - 0x7386, 0x0078, 0x20ed, 0x7087, 0xffff, 0x037f, 0x0078, 0x2135, - 0xa780, 0x2207, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x20a9, 0x007e, - 0x2009, 0x0000, 0x7084, 0xa096, 0xffff, 0x0040, 0x210c, 0xa092, - 0x007e, 0x0048, 0x2107, 0x7087, 0xffff, 0x0078, 0x2132, 0x2008, - 0x2011, 0x007e, 0xa202, 0x20a8, 0x2700, 0x157e, 0x017e, 0xa106, - 0x0040, 0x2129, 0x1078, 0x3494, 0x00c0, 0x2132, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2123, 0x1078, 0x2138, 0x0040, - 0x2132, 0x0078, 0x2129, 0x1078, 0x21d3, 0x1078, 0x215f, 0x0040, - 0x2132, 0x017f, 0x8108, 0x157f, 0x00f0, 0x210c, 0x7087, 0xffff, - 0x0078, 0x2135, 0x017f, 0x157f, 0x7186, 0x027f, 0x0c7f, 0x007c, - 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x556f, 0x0040, - 0x215a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, - 0x3463, 0x2001, 0x0000, 0x1078, 0x3477, 0x127e, 0x2091, 0x8000, - 0x7080, 0x8000, 0x7082, 0x127f, 0x2009, 0x0004, 0x1078, 0x55fc, - 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x017e, - 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x556f, 0x0040, 0x2181, - 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x3463, - 0x2001, 0x0002, 0x1078, 0x3477, 0x127e, 0x2091, 0x8000, 0x7080, - 0x8000, 0x7082, 0x127f, 0x2009, 0x0002, 0x1078, 0x55fc, 0xa085, - 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0e7e, 0x0c7e, - 0x067e, 0x037e, 0x027e, 0x1078, 0x4582, 0x1078, 0x4532, 0x1078, - 0x59e4, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34cb, - 0x00c0, 0x219e, 0x1078, 0x364c, 0x1078, 0x32cf, 0x017f, 0x8108, - 0x00f0, 0x2195, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, - 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, - 0x027e, 0x2019, 0x0029, 0x1078, 0x457b, 0x1078, 0x44be, 0x2c08, - 0x1078, 0x6bfe, 0x017f, 0x2e60, 0x1078, 0x364c, 0x1078, 0x32cf, - 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e, - 0x2071, 0x6f00, 0x7080, 0xa005, 0x0040, 0x21d0, 0x8001, 0x7082, - 0x007f, 0x0e7f, 0x007c, 0x6000, 0xc08c, 0x6002, 0x007c, 0x0e7e, - 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x81ff, 0x00c0, 0x21e4, - 0x20a9, 0x0001, 0x0078, 0x21e8, 0x20a9, 0x007e, 0x2011, 0x0000, - 0x027e, 0xa2e0, 0x7020, 0x2c64, 0x8cff, 0x0040, 0x21fa, 0x2019, - 0x0029, 0x1078, 0x457b, 0x1078, 0x44be, 0x2c08, 0x1078, 0x6bfe, - 0x1078, 0x364c, 0x027f, 0x8210, 0x00f0, 0x21e8, 0x027e, 0x027f, - 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x7eef, - 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, - 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, - 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, - 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, - 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, - 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, - 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, - 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, - 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, - 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, - 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, - 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, - 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, - 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, - 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, - 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, - 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, - 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, - 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, - 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, - 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, - 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, - 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, - 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, - 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, - 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x2071, - 0x6f6d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, - 0x7033, 0x6f7d, 0x7037, 0x6f7d, 0x7007, 0x0001, 0x2061, 0x6fbd, - 0x6003, 0x0002, 0x007c, 0x0090, 0x231e, 0x0068, 0x231e, 0x2071, - 0x6f6d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x231e, 0x2a60, 0x7820, - 0xa08e, 0x0069, 0x00c0, 0x2405, 0x0079, 0x23a2, 0x007c, 0x2071, - 0x6f6d, 0x7004, 0x0079, 0x2324, 0x2328, 0x2329, 0x2333, 0x2345, - 0x007c, 0x0090, 0x2332, 0x0068, 0x2332, 0x2b78, 0x7818, 0xd084, - 0x0040, 0x2351, 0x007c, 0x2b78, 0x2061, 0x6fbd, 0x6008, 0xa08e, - 0x0100, 0x0040, 0x2340, 0xa086, 0x0200, 0x0040, 0x23fd, 0x007c, - 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068, 0x6834, - 0xa086, 0x0103, 0x0040, 0x234d, 0x007c, 0x2a60, 0x2b78, 0x7018, - 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x235a, 0x61a8, - 0x0079, 0x2362, 0x2100, 0xa08a, 0x0036, 0x00c8, 0x23f9, 0x61a8, - 0x0079, 0x23a2, 0x23db, 0x240d, 0x2415, 0x2419, 0x2421, 0x2427, - 0x242b, 0x2434, 0x2438, 0x2440, 0x2444, 0x23f9, 0x23f9, 0x23f9, - 0x2448, 0x23f9, 0x2458, 0x246f, 0x2486, 0x2502, 0x2507, 0x2534, - 0x2581, 0x2590, 0x25b1, 0x25e7, 0x25f1, 0x25fe, 0x2611, 0x2629, - 0x2632, 0x266f, 0x2675, 0x23f9, 0x2680, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x2684, 0x268a, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x2692, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x269f, 0x26a5, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x2440, 0x2444, 0x23f9, 0x23f9, 0x26b7, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x2704, 0x27d1, 0x27e5, 0x27ec, 0x284f, 0x28a0, - 0x28ab, 0x28ed, 0x28fa, 0x2907, 0x290a, 0x26bb, 0x2933, 0x297a, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x2a81, 0x2a8f, 0x2a9c, 0x2ad6, - 0x713c, 0x0078, 0x23db, 0x2021, 0x4000, 0x1078, 0x29d4, 0x127e, - 0x2091, 0x8000, 0x0068, 0x23e8, 0x7818, 0xd084, 0x0040, 0x23eb, - 0x127f, 0x0078, 0x23df, 0x781b, 0x0001, 0x7c22, 0x7926, 0x7a2a, - 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x127f, - 0x007c, 0x2021, 0x4001, 0x0078, 0x23dd, 0x2021, 0x4002, 0x0078, - 0x23dd, 0x2021, 0x4003, 0x0078, 0x23dd, 0x2021, 0x4005, 0x0078, - 0x23dd, 0x2021, 0x4006, 0x0078, 0x23dd, 0xa02e, 0x2520, 0x7b28, - 0x7a2c, 0x7824, 0x7930, 0x0078, 0x29e3, 0x7823, 0x0004, 0x7824, - 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, - 0x29e7, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078, 0x23db, 0x7924, - 0x2114, 0x0078, 0x23db, 0x2099, 0x0009, 0x20a1, 0x0009, 0x20a9, - 0x0007, 0x53a3, 0x0078, 0x23db, 0x7824, 0x2060, 0x0078, 0x244a, - 0x2009, 0x0001, 0x2011, 0x000f, 0x2019, 0x0007, 0x0078, 0x23db, - 0x7d38, 0x7c3c, 0x0078, 0x240f, 0x7d38, 0x7c3c, 0x0078, 0x241b, - 0x2061, 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, - 0x00c0, 0x244c, 0x2010, 0xa005, 0x0040, 0x23db, 0x0078, 0x2401, - 0x2061, 0x6f51, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2409, 0x8019, - 0x0040, 0x2409, 0x604a, 0x6142, 0x782c, 0x6052, 0x7828, 0x6056, - 0xa006, 0x605a, 0x605e, 0x1078, 0x3917, 0x0078, 0x23db, 0x2061, - 0x6f51, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2409, 0x8019, 0x0040, - 0x2409, 0x604e, 0x6146, 0x782c, 0x6062, 0x7828, 0x6066, 0xa006, - 0x606a, 0x606e, 0x1078, 0x36ed, 0x0078, 0x23db, 0xa02e, 0x2520, - 0x81ff, 0x00c0, 0x2405, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, - 0x20a1, 0x6f74, 0x41a1, 0x1078, 0x29ab, 0x0040, 0x2405, 0x2009, - 0x0020, 0x1078, 0x29e3, 0x701b, 0x249e, 0x007c, 0x6834, 0x2008, - 0xa084, 0x00ff, 0xa096, 0x0011, 0x0040, 0x24aa, 0xa096, 0x0019, - 0x00c0, 0x2405, 0x810f, 0xa18c, 0x00ff, 0x0040, 0x2405, 0x710e, - 0x700c, 0x8001, 0x0040, 0x24db, 0x700e, 0x1078, 0x29ab, 0x0040, - 0x2405, 0x2009, 0x0020, 0x2061, 0x6fbd, 0x6224, 0x6328, 0x642c, - 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, - 0x0000, 0x1078, 0x29e3, 0x701b, 0x24ce, 0x007c, 0x6834, 0xa084, - 0x00ff, 0xa096, 0x0002, 0x0040, 0x24d9, 0xa096, 0x000a, 0x00c0, - 0x2405, 0x0078, 0x24b0, 0x7010, 0x2068, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x33c8, 0x00c0, 0x24e9, 0x7007, 0x0003, 0x701b, 0x24eb, - 0x007c, 0x1078, 0x37b0, 0x127e, 0x2091, 0x8000, 0x20a9, 0x0005, - 0x2099, 0x6f74, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, - 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020, 0x127f, - 0x0078, 0x29e7, 0x6190, 0x7824, 0x6092, 0x0078, 0x23db, 0x2091, - 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020, 0x782f, - 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836, 0x2061, - 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205, 0x783a, - 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091, 0x5000, - 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0xa08a, 0x0003, - 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0, 0x2405, 0x1078, - 0x29c3, 0x0040, 0x2409, 0x7c28, 0x7d2c, 0x1078, 0x360f, 0xd28c, - 0x00c0, 0x2546, 0x1078, 0x359f, 0x0078, 0x2548, 0x1078, 0x35db, - 0x00c0, 0x2572, 0x2061, 0x7500, 0x127e, 0x2091, 0x8000, 0x6000, - 0xa086, 0x0000, 0x0040, 0x2560, 0x6010, 0xa06d, 0x0040, 0x2560, - 0x683c, 0xa406, 0x00c0, 0x2560, 0x6840, 0xa506, 0x0040, 0x256b, - 0x127f, 0xace0, 0x0008, 0x2001, 0x6f15, 0x2004, 0xac02, 0x00c8, - 0x2405, 0x0078, 0x254c, 0x1078, 0x6019, 0x127f, 0x0040, 0x2405, - 0x0078, 0x23db, 0xa00e, 0x2001, 0x0005, 0x1078, 0x37b0, 0x127e, - 0x2091, 0x8000, 0x1078, 0x63dd, 0x1078, 0x3720, 0x127f, 0x0078, - 0x23db, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, - 0x1078, 0x3554, 0x1078, 0x3620, 0x0040, 0x2405, 0x0078, 0x23db, - 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, 0x2031, - 0x000f, 0x1078, 0x3554, 0x8631, 0x00c8, 0x2599, 0x2019, 0x0005, - 0x1078, 0x3641, 0x0040, 0x2405, 0x7828, 0xa08a, 0x1000, 0x00c8, - 0x2409, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4194, 0x0078, - 0x23db, 0x127e, 0x2091, 0x8000, 0x81ff, 0x00c0, 0x25e1, 0x2029, - 0x007d, 0x644c, 0x2400, 0xa506, 0x0040, 0x25db, 0x2508, 0x1078, - 0x34cb, 0x00c0, 0x25db, 0x2031, 0x000f, 0x1078, 0x3554, 0x8631, - 0x00c8, 0x25c5, 0x2019, 0x0004, 0x1078, 0x3641, 0x0040, 0x25e1, - 0x7824, 0xa08a, 0x1000, 0x00c8, 0x25e4, 0x8003, 0x800b, 0x810b, - 0xa108, 0x1078, 0x4194, 0x8529, 0x00c8, 0x25ba, 0x127f, 0x0078, - 0x23db, 0x127f, 0x0078, 0x2405, 0x127f, 0x0078, 0x2409, 0x1078, - 0x29c3, 0x0040, 0x2409, 0x1078, 0x3584, 0x1078, 0x360f, 0x0078, - 0x23db, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, - 0x1078, 0x356d, 0x1078, 0x360f, 0x0078, 0x23db, 0x81ff, 0x00c0, - 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, 0x1078, 0x35de, 0x0040, - 0x2405, 0x1078, 0x3410, 0x1078, 0x3598, 0x1078, 0x360f, 0x0078, - 0x23db, 0x1078, 0x29c3, 0x0040, 0x2409, 0x1078, 0x3554, 0x62a0, - 0x2019, 0x0005, 0x0c7e, 0x1078, 0x364c, 0x0c7f, 0x1078, 0x457b, - 0x1078, 0x44be, 0x2c08, 0x1078, 0x6bfe, 0x1078, 0x360f, 0x0078, - 0x23db, 0x1078, 0x29c3, 0x0040, 0x2409, 0x1078, 0x360f, 0x2208, - 0x0078, 0x23db, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0x6fff, 0x6810, - 0x6914, 0xa10a, 0x00c8, 0x263e, 0x2009, 0x0000, 0x6816, 0x2011, - 0x0000, 0x2019, 0x0000, 0x20a9, 0x007d, 0x2069, 0x7020, 0x2d04, - 0xa075, 0x0040, 0x2653, 0x704c, 0x1078, 0x265d, 0xa210, 0x7080, - 0x1078, 0x265d, 0xa318, 0x8d68, 0x00f0, 0x2647, 0x2300, 0xa218, - 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x23db, 0x0f7e, 0x017e, 0xa07d, - 0x0040, 0x266c, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, - 0x266c, 0x2178, 0x0078, 0x2664, 0x017f, 0x0f7f, 0x007c, 0x2069, - 0x6fff, 0x6910, 0x6294, 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, - 0x614c, 0xa190, 0x2207, 0x2214, 0xa294, 0x00ff, 0x0078, 0x23db, - 0x613c, 0x6240, 0x0078, 0x23db, 0x1078, 0x29c3, 0x0040, 0x2409, - 0x0078, 0x23db, 0x1078, 0x29c3, 0x0040, 0x2409, 0x6244, 0x6338, - 0x0078, 0x23db, 0x613c, 0x6240, 0x7824, 0x603e, 0x7b28, 0x6342, - 0x2069, 0x6f51, 0x831f, 0xa305, 0x6816, 0x0078, 0x23db, 0x1078, - 0x29c3, 0x0040, 0x2409, 0x0078, 0x23db, 0x1078, 0x29c3, 0x0040, - 0x2409, 0x7828, 0xa00d, 0x0040, 0x2409, 0x782c, 0xa005, 0x0040, - 0x2409, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x23db, 0x7d38, - 0x7c3c, 0x0078, 0x2488, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, - 0x00c8, 0x2405, 0x624c, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, - 0x26d3, 0x2001, 0x6f40, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x0078, 0x29e7, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, - 0x0040, 0x2409, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, - 0x2405, 0x0c7e, 0x1078, 0x29ab, 0x0c7f, 0x0040, 0x2405, 0x6837, - 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x62f3, 0x0040, 0x2405, - 0x7007, 0x0003, 0x701b, 0x26f5, 0x007c, 0x6830, 0xa086, 0x0100, - 0x0040, 0x2405, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x0078, 0x29e7, 0x1078, 0x29ab, 0x0040, 0x2405, - 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x29e3, - 0x701b, 0x2713, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040, - 0x2409, 0x6804, 0xd0ac, 0x0040, 0x2720, 0xd0a4, 0x0040, 0x2409, - 0xd094, 0x0040, 0x272b, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c, - 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2736, 0x0c7e, 0x2061, - 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100, - 0x210c, 0xa18a, 0x0002, 0x0048, 0x274b, 0xd084, 0x0040, 0x274b, - 0x6a28, 0xa28a, 0x007e, 0x00c8, 0x2409, 0xa288, 0x2207, 0x210c, - 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2754, 0x6828, 0xa08a, - 0x007e, 0x00c8, 0x2409, 0x604e, 0x6808, 0xa08a, 0x0100, 0x0048, - 0x2409, 0xa08a, 0x0841, 0x00c8, 0x2409, 0xa084, 0x0007, 0x00c0, - 0x2409, 0x680c, 0xa005, 0x0040, 0x2409, 0x6810, 0xa005, 0x0040, - 0x2409, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2409, 0x8001, 0x0040, - 0x2409, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2409, 0x8001, 0x0040, - 0x2409, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x6f51, 0x2da0, 0x53a3, - 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084, 0x00ff, 0x6042, - 0x1078, 0x3917, 0x1078, 0x36ed, 0x6000, 0xa086, 0x0000, 0x00c0, - 0x27cf, 0x6808, 0x602a, 0x1078, 0x1d4d, 0x6818, 0x691c, 0x6a20, - 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, - 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x27af, 0x6830, 0x6934, 0x6a38, - 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0078, 0x27b1, 0xa084, - 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x1078, 0x4220, 0x0c7e, - 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x60ac, - 0xa005, 0x0040, 0x27cb, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, - 0x3229, 0x0078, 0x27cf, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, - 0x23db, 0x6000, 0xa086, 0x0000, 0x0040, 0x2405, 0x2069, 0x6f51, - 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009, 0x001c, 0x7a2c, - 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x29e7, 0x81ff, 0x00c0, 0x2405, - 0x1078, 0x3229, 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, 0x6174, - 0x81ff, 0x0040, 0x2806, 0x703f, 0x0000, 0x2001, 0x74c0, 0x2009, - 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e, 0x2091, 0x8000, - 0x1078, 0x29e7, 0x701b, 0x23d8, 0x127f, 0x007c, 0x703f, 0x0001, - 0x0d7e, 0x2069, 0x74c0, 0x20a9, 0x0040, 0x20a1, 0x74c0, 0x2019, - 0xffff, 0x43a4, 0x654c, 0xa588, 0x2207, 0x210c, 0xa18c, 0x00ff, - 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x0040, 0x2838, - 0x1078, 0x34cb, 0x00c0, 0x2838, 0x6014, 0x821c, 0x0048, 0x2830, - 0xa398, 0x74c0, 0xa085, 0xff00, 0x8007, 0x201a, 0x0078, 0x2837, - 0xa398, 0x74c0, 0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a, 0x8210, - 0x8108, 0xa182, 0x007f, 0x00c8, 0x283f, 0x0078, 0x281c, 0x8201, - 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9, 0x0040, 0x20a1, - 0x74c0, 0x2099, 0x74c0, 0x1078, 0x3272, 0x0078, 0x27f5, 0x1078, - 0x29c3, 0x0040, 0x2409, 0x0c7e, 0x1078, 0x29ab, 0x0c7f, 0x0040, - 0x2405, 0x2001, 0x6f52, 0x2004, 0xd0b4, 0x0040, 0x287c, 0x6000, - 0xd08c, 0x00c0, 0x287c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x00c0, 0x287c, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, - 0x630f, 0x0040, 0x2405, 0x7007, 0x0003, 0x701b, 0x2878, 0x007c, - 0x1078, 0x29c3, 0x0040, 0x2409, 0x20a9, 0x0029, 0x2c98, 0xade8, - 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, - 0xad80, 0x0006, 0x20a0, 0x1078, 0x3272, 0x20a9, 0x0004, 0xac80, - 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x1078, 0x3272, 0x2d00, - 0x2009, 0x0029, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x29e7, - 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, 0x1078, - 0x362b, 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, 0x7828, 0xa08a, - 0x1000, 0x00c8, 0x2409, 0x1078, 0x29c3, 0x0040, 0x2409, 0x2031, - 0x000f, 0x1078, 0x3554, 0x8631, 0x00c8, 0x28b9, 0x2019, 0x0004, - 0x1078, 0x3641, 0x7924, 0x810f, 0x7a28, 0x1078, 0x28c9, 0x0078, - 0x23db, 0xa186, 0x00ff, 0x0040, 0x28d1, 0x1078, 0x28e1, 0x0078, - 0x28e0, 0x2029, 0x007d, 0x2061, 0x6f00, 0x644c, 0x2400, 0xa506, - 0x0040, 0x28dd, 0x2508, 0x1078, 0x28e1, 0x8529, 0x00c8, 0x28d6, - 0x007c, 0x1078, 0x34cb, 0x00c0, 0x28ec, 0x2200, 0x8003, 0x800b, - 0x810b, 0xa108, 0x1078, 0x4194, 0x007c, 0x81ff, 0x00c0, 0x2405, - 0x1078, 0x29c3, 0x0040, 0x2409, 0x1078, 0x3554, 0x1078, 0x3636, - 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, - 0x2409, 0x1078, 0x3554, 0x1078, 0x3620, 0x0078, 0x23db, 0x6100, - 0x0078, 0x23db, 0x1078, 0x29c3, 0x0040, 0x2409, 0x6004, 0xa086, - 0x0707, 0x0040, 0x2409, 0x2001, 0x6f00, 0x2004, 0xa086, 0x0003, - 0x00c0, 0x2405, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, - 0x2923, 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, - 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, - 0x0200, 0x0078, 0x23db, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, - 0x0040, 0x293d, 0x81ff, 0x00c0, 0x2405, 0x7828, 0xa08a, 0x1000, - 0x00c8, 0x2409, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, - 0x0040, 0x2951, 0xa182, 0x007e, 0x00c8, 0x2409, 0x2100, 0x1078, - 0x1feb, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2061, 0x70c9, - 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0x0100, 0x6030, 0xa084, - 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, - 0x2009, 0x001e, 0x2011, 0x324e, 0x1078, 0x4217, 0x7924, 0xa18c, - 0xff00, 0x810f, 0x7a28, 0x1078, 0x28c9, 0x127f, 0x0c7f, 0x027f, - 0x0078, 0x23db, 0x7924, 0xa18c, 0xff00, 0x810f, 0x0c7e, 0x1078, - 0x3494, 0x2c08, 0x0c7f, 0x00c0, 0x2409, 0x0078, 0x23db, 0x017e, - 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, - 0x8108, 0x00f0, 0x2989, 0x017f, 0x007c, 0x017e, 0x0a7e, 0x0b7e, - 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, - 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, 0x0b7f, - 0x0a7f, 0x017f, 0x007c, 0x1078, 0x12c7, 0x0040, 0x29c2, 0xa006, - 0x6802, 0x7010, 0xa005, 0x00c0, 0x29ba, 0x2d00, 0x7012, 0x7016, - 0x0078, 0x29c0, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, - 0xad80, 0x000d, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, - 0x34cb, 0x00c0, 0x29d1, 0xa6b4, 0x00ff, 0xa682, 0x0010, 0x0048, - 0x29d2, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, - 0x29df, 0x2168, 0x6904, 0x1078, 0x12fb, 0x0078, 0x29d6, 0x7112, - 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x29e9, 0x2031, - 0x0000, 0x2061, 0x6fbd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, - 0x642e, 0x6532, 0x2c10, 0x1078, 0x1332, 0x7007, 0x0002, 0x701b, - 0x23db, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, - 0x2001, 0x6f7b, 0x2004, 0xa005, 0x00c0, 0x2a14, 0x0068, 0x2a14, - 0x7818, 0xd084, 0x00c0, 0x2a14, 0x781b, 0x0001, 0x7a22, 0x7b26, - 0x2091, 0x4080, 0x0078, 0x2a38, 0x017e, 0x0c7e, 0x0e7e, 0x2071, - 0x6f6d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2a22, 0x7030, 0x2060, - 0x0078, 0x2a33, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x6fbd, 0x0048, - 0x2a2b, 0x2061, 0x6f7d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2a31, - 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x0e7f, 0x0c7f, 0x017f, - 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x6f6d, 0x7038, 0xa005, - 0x0040, 0x2a72, 0x127e, 0x2091, 0x8000, 0x0068, 0x2a71, 0x0f7e, - 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2a70, 0x0c7e, 0x781b, - 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x2091, - 0x4080, 0x7038, 0x8001, 0x703a, 0xa005, 0x00c0, 0x2a66, 0x7033, - 0x6f7d, 0x7037, 0x6f7d, 0x0c7f, 0x0078, 0x2a70, 0xac80, 0x0008, - 0xa0fa, 0x6fbd, 0x0048, 0x2a6e, 0x2001, 0x6f7d, 0x7036, 0x0c7f, - 0x0f7f, 0x127f, 0x0e7f, 0x007c, 0x027e, 0x2001, 0x6f52, 0x2004, - 0xd0c4, 0x0040, 0x2a7f, 0x2011, 0x8014, 0x1078, 0x29fa, 0x027f, - 0x007c, 0x81ff, 0x00c0, 0x2405, 0x127e, 0x2091, 0x8000, 0x6030, - 0xc08d, 0x6032, 0x1078, 0x3229, 0x127f, 0x0078, 0x23db, 0x7824, - 0x2008, 0xa18c, 0xfffd, 0x00c0, 0x2a9a, 0x61b4, 0xa10d, 0x61b6, - 0x0078, 0x23db, 0x0078, 0x2409, 0x81ff, 0x00c0, 0x2405, 0x6000, - 0xa086, 0x0003, 0x00c0, 0x2405, 0x2001, 0x6f52, 0x2004, 0xd0a4, - 0x00c0, 0x2405, 0x1078, 0x29c3, 0x0040, 0x2409, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2ab9, 0x7828, 0xa005, 0x0040, - 0x23db, 0x0c7e, 0x1078, 0x29ab, 0x0c7f, 0x0040, 0x2405, 0x6837, - 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x637c, - 0x0040, 0x2405, 0x7007, 0x0003, 0x701b, 0x2acf, 0x007c, 0x6830, - 0xa086, 0x0100, 0x0040, 0x2405, 0x0078, 0x23db, 0x2001, 0x6f00, - 0x2004, 0xa086, 0x0003, 0x00c0, 0x2405, 0x7f24, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x1078, 0x29ab, 0x0040, 0x2405, 0x2009, 0x0000, - 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0005, - 0x7026, 0x20a0, 0x1078, 0x34cb, 0x00c0, 0x2b1c, 0x6004, 0xa0c6, - 0x0707, 0x0040, 0x2b1c, 0xa084, 0x00ff, 0xa0c6, 0x0006, 0x00c0, - 0x2b1c, 0x87ff, 0x0040, 0x2b0f, 0xac80, 0x0006, 0x2098, 0x3400, - 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2995, 0x0078, 0x2b18, 0xac80, - 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2995, - 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108, 0xa186, 0x007e, 0x0040, - 0x2b27, 0xa686, 0x0028, 0x0040, 0x2b30, 0x0078, 0x2af2, 0x86ff, - 0x00c0, 0x2b2e, 0x7120, 0x810b, 0x0078, 0x23db, 0x702f, 0x0001, - 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0x6fbd, 0x6007, - 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, - 0x2c10, 0x1078, 0x1332, 0x7007, 0x0002, 0x701b, 0x2b48, 0x007c, - 0x702c, 0xa005, 0x00c0, 0x2b5a, 0x711c, 0x7024, 0x20a0, 0x7728, - 0x2031, 0x0000, 0x2061, 0x6fbd, 0x6224, 0x6328, 0x642c, 0x6530, - 0x0078, 0x2af2, 0x7120, 0x810b, 0x0078, 0x23db, 0x127e, 0x0c7e, - 0x0e7e, 0x2061, 0x0100, 0x2071, 0x6f00, 0x6044, 0xd0a4, 0x00c0, - 0x2b87, 0xd084, 0x0040, 0x2b70, 0x1078, 0x2cae, 0x0078, 0x2b83, - 0xd08c, 0x0040, 0x2b77, 0x1078, 0x2bc5, 0x0078, 0x2b83, 0xd094, - 0x0040, 0x2b7e, 0x1078, 0x2ba8, 0x0078, 0x2b83, 0xd09c, 0x0040, - 0x2b83, 0x1078, 0x2b91, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, - 0x6128, 0xd19c, 0x00c0, 0x2b8e, 0xc19d, 0x612a, 0x017f, 0x0078, - 0x2b83, 0x6043, 0x0040, 0x6043, 0x0000, 0x7067, 0x0000, 0x707f, - 0x0001, 0x709f, 0x0000, 0x2009, 0x74c0, 0x200b, 0x0000, 0x706b, - 0x000f, 0x2009, 0x000f, 0x2011, 0x31e9, 0x1078, 0x4217, 0x007c, - 0x7068, 0xa005, 0x00c0, 0x2bc4, 0x2011, 0x31e9, 0x1078, 0x4187, - 0x6043, 0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0, 0x2bc0, - 0x707b, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2bc4, - 0x706f, 0x0000, 0x0078, 0x2bc4, 0x007c, 0x706c, 0xa08a, 0x0003, - 0x00c8, 0x2bce, 0x1079, 0x2bd1, 0x0078, 0x2bd0, 0x1078, 0x1288, - 0x007c, 0x2bd4, 0x2c23, 0x2cad, 0x0f7e, 0x706f, 0x0001, 0x20e1, - 0xa000, 0x20e1, 0x8700, 0x1078, 0x1d4d, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x2079, 0x7300, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, - 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, - 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, - 0x0000, 0x782f, 0x0000, 0x2079, 0x730c, 0x207b, 0x1101, 0x7807, - 0x0000, 0x2099, 0x6f05, 0x20a1, 0x730e, 0x20a9, 0x0004, 0x53a3, - 0x2079, 0x7312, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7300, - 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, - 0x0000, 0x1078, 0x3210, 0x0f7f, 0x7073, 0x0000, 0x6043, 0x0008, - 0x6043, 0x0000, 0x007c, 0x0d7e, 0x7070, 0x7073, 0x0000, 0xa025, - 0x0040, 0x2c97, 0x6020, 0xd0b4, 0x00c0, 0x2c95, 0x717c, 0x81ff, - 0x0040, 0x2c7e, 0xa486, 0x000c, 0x00c0, 0x2c89, 0xa480, 0x0018, - 0x8004, 0x20a8, 0x2011, 0x7380, 0x2019, 0x7300, 0x220c, 0x2304, - 0xa106, 0x00c0, 0x2c55, 0x8210, 0x8318, 0x00f0, 0x2c3e, 0x6043, - 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x706f, - 0x0002, 0x707b, 0x0002, 0x0078, 0x2c95, 0x2069, 0x7380, 0x6930, - 0xa18e, 0x1101, 0x00c0, 0x2c89, 0x6834, 0xa005, 0x00c0, 0x2c89, - 0x6900, 0xa18c, 0x00ff, 0x00c0, 0x2c69, 0x6804, 0xa005, 0x0040, - 0x2c7e, 0x2011, 0x738e, 0x2019, 0x6f05, 0x20a9, 0x0004, 0x220c, - 0x2304, 0xa102, 0x0048, 0x2c7c, 0x00c0, 0x2c89, 0x8210, 0x8318, - 0x00f0, 0x2c6f, 0x0078, 0x2c89, 0x707f, 0x0000, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x20a9, 0x0014, - 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, - 0x2c95, 0x60c3, 0x000c, 0x1078, 0x3210, 0x0d7f, 0x007c, 0x6020, - 0xd0b4, 0x00c0, 0x2c95, 0x60c3, 0x000c, 0x2011, 0x70c0, 0x2013, - 0x0000, 0x7073, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, - 0x9575, 0x1078, 0x4f85, 0x0078, 0x2c95, 0x007c, 0x7078, 0xa08a, - 0x001d, 0x00c8, 0x2cb7, 0x1079, 0x2cba, 0x0078, 0x2cb9, 0x1078, - 0x1288, 0x007c, 0x2cde, 0x2ced, 0x2d1e, 0x2d33, 0x2d63, 0x2d8b, - 0x2dbb, 0x2de5, 0x2e15, 0x2e3b, 0x2e86, 0x2ea8, 0x2ecc, 0x2ee2, - 0x2f08, 0x2f1b, 0x2f24, 0x2f3d, 0x2f6b, 0x2f93, 0x2fc1, 0x2feb, - 0x3030, 0x3065, 0x3087, 0x30c5, 0x30e9, 0x3102, 0x310f, 0x7003, - 0x0007, 0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, - 0x608f, 0xf0f0, 0x6043, 0x0002, 0x707b, 0x0001, 0x2009, 0x07d0, - 0x2011, 0x31f0, 0x1078, 0x417a, 0x007c, 0x0f7e, 0x7070, 0xa086, - 0x0014, 0x00c0, 0x2d1c, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, - 0x2d1c, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2d1a, - 0x7834, 0xa005, 0x00c0, 0x2d1a, 0x7a38, 0xd2fc, 0x0040, 0x2d10, - 0x709c, 0xa005, 0x00c0, 0x2d10, 0x1078, 0x32a9, 0x709f, 0x0001, - 0x2011, 0x31f0, 0x1078, 0x4187, 0x707b, 0x0010, 0x1078, 0x2f24, - 0x0078, 0x2d1c, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0003, - 0x6043, 0x0004, 0x1078, 0x327a, 0x20a3, 0x1102, 0x20a3, 0x0000, - 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x2d2a, 0x60c3, 0x0014, - 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2d61, - 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, 0x00c0, 0x2d5d, - 0x2079, 0x7380, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2d5d, 0x7834, - 0xa005, 0x00c0, 0x2d5d, 0x7a38, 0xd2fc, 0x0040, 0x2d57, 0x709c, - 0xa005, 0x00c0, 0x2d57, 0x1078, 0x32a9, 0x709f, 0x0001, 0x707b, - 0x0004, 0x1078, 0x2d63, 0x0078, 0x2d61, 0x707b, 0x0002, 0x7073, - 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0005, 0x1078, 0x327a, 0x20a3, - 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x738e, 0x7064, 0xa005, - 0x00c0, 0x2d7d, 0x714c, 0xa186, 0xffff, 0x0040, 0x2d7d, 0x1078, - 0x31b4, 0x0040, 0x2d7d, 0x1078, 0x32a9, 0x20a9, 0x0008, 0x2298, - 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2db9, - 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, 0x00c0, 0x2db5, - 0x2079, 0x7380, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2db5, 0x7834, - 0xa005, 0x00c0, 0x2db5, 0x7a38, 0xd2fc, 0x0040, 0x2daf, 0x709c, - 0xa005, 0x00c0, 0x2daf, 0x1078, 0x32a9, 0x709f, 0x0001, 0x707b, - 0x0006, 0x1078, 0x2dbb, 0x0078, 0x2db9, 0x707b, 0x0002, 0x7073, - 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0007, 0x1078, 0x327a, 0x20a3, - 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x738e, 0x7064, 0xa005, - 0x00c0, 0x2dd7, 0x7150, 0xa186, 0xffff, 0x0040, 0x2dd7, 0xa180, - 0x2207, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x31b4, 0x20a9, - 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, - 0x0040, 0x2e13, 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, - 0x00c0, 0x2e0f, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1104, 0x00c0, - 0x2e0f, 0x7834, 0xa005, 0x00c0, 0x2e0f, 0x7a38, 0xd2fc, 0x0040, - 0x2e09, 0x709c, 0xa005, 0x00c0, 0x2e09, 0x1078, 0x32a9, 0x709f, - 0x0001, 0x707b, 0x0008, 0x1078, 0x2e15, 0x0078, 0x2e13, 0x707b, - 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0009, 0x1078, - 0x327a, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x7064, 0xa005, - 0x00c0, 0x2e28, 0x1078, 0x311e, 0x0040, 0x2e38, 0x0078, 0x2e32, - 0x20a9, 0x0008, 0x2099, 0x738e, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x3210, 0x0078, 0x2e3a, - 0x1078, 0x2cd7, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2e84, - 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, 0x00c0, 0x2e80, - 0x2079, 0x7380, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x2e80, 0x7834, - 0x2011, 0x0100, 0xa21e, 0x00c0, 0x2e69, 0x7a38, 0xd2fc, 0x0040, - 0x2e61, 0x709c, 0xa005, 0x00c0, 0x2e61, 0x1078, 0x32a9, 0x709f, - 0x0001, 0x7077, 0x0001, 0x707b, 0x000a, 0x1078, 0x2e86, 0x0078, - 0x2e84, 0xa005, 0x00c0, 0x2e80, 0x7a38, 0xd2fc, 0x0040, 0x2e78, - 0x709c, 0xa005, 0x00c0, 0x2e78, 0x1078, 0x32a9, 0x709f, 0x0001, - 0x7077, 0x0000, 0x707b, 0x000e, 0x1078, 0x2f08, 0x0078, 0x2e84, - 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000b, - 0x2011, 0x730e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, - 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4, 0x1078, 0x327a, 0x20a3, - 0x1106, 0x20a3, 0x0000, 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, - 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x1078, 0x3210, 0x007c, - 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2eca, 0x2011, 0x31f0, 0x1078, - 0x4187, 0xa086, 0x0084, 0x00c0, 0x2ec6, 0x2079, 0x7380, 0x7a30, - 0xa296, 0x1106, 0x00c0, 0x2ec6, 0x7834, 0xa005, 0x00c0, 0x2ec6, - 0x707b, 0x000c, 0x1078, 0x2ecc, 0x0078, 0x2eca, 0x707b, 0x0002, - 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000d, 0x1078, 0x327a, - 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0x738e, 0x20a9, 0x0040, - 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, - 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f06, 0x2011, - 0x31f0, 0x1078, 0x4187, 0xa086, 0x0084, 0x00c0, 0x2f02, 0x2079, - 0x7380, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x2f02, 0x7834, 0xa005, - 0x00c0, 0x2f02, 0x1078, 0x326c, 0x707b, 0x000e, 0x1078, 0x2f08, - 0x0078, 0x2f06, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, - 0x707b, 0x000f, 0x7073, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, - 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x31f0, - 0x1078, 0x417a, 0x007c, 0x7070, 0xa005, 0x0040, 0x2f23, 0x2011, - 0x31f0, 0x1078, 0x4187, 0x007c, 0x707b, 0x0011, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x7470, 0xa480, - 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, - 0x60c3, 0x0014, 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, - 0x0040, 0x2f69, 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, - 0x00c0, 0x2f67, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1103, 0x00c0, - 0x2f67, 0x7834, 0xa005, 0x00c0, 0x2f67, 0x7a38, 0xd2fc, 0x0040, - 0x2f61, 0x709c, 0xa005, 0x00c0, 0x2f61, 0x1078, 0x32a9, 0x709f, - 0x0001, 0x707b, 0x0012, 0x1078, 0x2f6b, 0x0078, 0x2f69, 0x7073, - 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0013, 0x1078, 0x3286, 0x20a3, - 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x738e, 0x7064, 0xa005, - 0x00c0, 0x2f85, 0x714c, 0xa186, 0xffff, 0x0040, 0x2f85, 0x1078, - 0x31b4, 0x0040, 0x2f85, 0x1078, 0x32a9, 0x20a9, 0x0008, 0x2298, + 0x2004, 0xa084, 0x0007, 0x0079, 0x1b35, 0x1b3d, 0x1b3e, 0x1b41, + 0x1b44, 0x1b49, 0x1b4c, 0x1b51, 0x1b56, 0x007c, 0x1078, 0x1933, + 0x007c, 0x1078, 0x16e5, 0x007c, 0x1078, 0x16e5, 0x1078, 0x1933, + 0x007c, 0x1078, 0x143e, 0x007c, 0x1078, 0x1933, 0x1078, 0x143e, + 0x007c, 0x1078, 0x16e5, 0x1078, 0x143e, 0x007c, 0x1078, 0x16e5, + 0x1078, 0x1933, 0x1078, 0x143e, 0x007c, 0x127e, 0x2091, 0x2300, + 0x2079, 0x0200, 0x2071, 0x7280, 0x2069, 0x6d00, 0x2009, 0x0004, + 0x7912, 0x7916, 0x1078, 0x1df6, 0x781b, 0x0002, 0x20e1, 0x8700, + 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, + 0x0079, 0x1b7a, 0x1b9e, 0x1b82, 0x1b86, 0x1b8a, 0x1b90, 0x1b94, + 0x1b98, 0x1b9c, 0x1078, 0x3d7c, 0x0078, 0x1b9e, 0x1078, 0x3db0, + 0x0078, 0x1b9e, 0x1078, 0x3d7c, 0x1078, 0x3db0, 0x0078, 0x1b9e, + 0x1078, 0x1ba0, 0x0078, 0x1b9e, 0x1078, 0x1ba0, 0x0078, 0x1b9e, + 0x1078, 0x1ba0, 0x0078, 0x1b9e, 0x1078, 0x1ba0, 0x127f, 0x007c, + 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1baa, + 0x1078, 0x12b7, 0xa184, 0x0030, 0x0040, 0x1bbb, 0x6a00, 0xa286, + 0x0003, 0x00c0, 0x1bb5, 0x1078, 0x12b7, 0x1078, 0x31cb, 0x20e1, + 0x9010, 0x0078, 0x1bc7, 0xa184, 0x00c0, 0x0040, 0x1bc1, 0x1078, + 0x12b7, 0xa184, 0x0300, 0x0040, 0x1bc7, 0x20e1, 0x9020, 0x7932, + 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071, + 0x6d00, 0x7128, 0x2001, 0x6f03, 0x2102, 0x2001, 0x6f0b, 0x2102, + 0xa182, 0x0211, 0x00c8, 0x1be0, 0x2009, 0x0008, 0x0078, 0x1c0a, + 0xa182, 0x0259, 0x00c8, 0x1be8, 0x2009, 0x0007, 0x0078, 0x1c0a, + 0xa182, 0x02c1, 0x00c8, 0x1bf0, 0x2009, 0x0006, 0x0078, 0x1c0a, + 0xa182, 0x0349, 0x00c8, 0x1bf8, 0x2009, 0x0005, 0x0078, 0x1c0a, + 0xa182, 0x0421, 0x00c8, 0x1c00, 0x2009, 0x0004, 0x0078, 0x1c0a, + 0xa182, 0x0581, 0x00c8, 0x1c08, 0x2009, 0x0003, 0x0078, 0x1c0a, + 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0x7916, 0x1078, 0x1df6, + 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061, + 0x0100, 0x2071, 0x6d00, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7, + 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, + 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0caf, 0x600f, + 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x6d2d, 0x2003, + 0x0000, 0x2001, 0x6d2c, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, + 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, + 0x1c4d, 0xa184, 0x0007, 0x0079, 0x1c53, 0xa195, 0x0004, 0xa284, + 0x0007, 0x0079, 0x1c53, 0x1c7f, 0x1c5b, 0x1c5f, 0x1c63, 0x1c69, + 0x1c6d, 0x1c73, 0x1c79, 0x1078, 0x4226, 0x0078, 0x1c7f, 0x1078, + 0x42e4, 0x0078, 0x1c7f, 0x1078, 0x42e4, 0x1078, 0x4226, 0x0078, + 0x1c7f, 0x1078, 0x1c84, 0x0078, 0x1c7f, 0x1078, 0x4226, 0x1078, + 0x1c84, 0x0078, 0x1c7f, 0x1078, 0x42e4, 0x1078, 0x1c84, 0x0078, + 0x1c7f, 0x1078, 0x42e4, 0x1078, 0x4226, 0x1078, 0x1c84, 0x027f, + 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1d24, 0x017e, + 0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, 0xa196, 0xff00, + 0x0040, 0x1cb3, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, + 0x1cb3, 0x7130, 0xd18c, 0x00c0, 0x1cb3, 0x2011, 0x6d52, 0x2214, + 0xd2ec, 0x0040, 0x1ca7, 0xc18d, 0x7132, 0x0078, 0x1cb3, 0x6240, + 0xa294, 0x0010, 0x0040, 0x1cf2, 0x6248, 0xa294, 0xff00, 0xa296, + 0xff00, 0x00c0, 0x1cf2, 0x2011, 0x8013, 0x1078, 0x2a53, 0x7130, + 0xc185, 0x7132, 0x2011, 0x6d52, 0x220c, 0xd1a4, 0x0040, 0x1cda, + 0x017e, 0x2009, 0x0001, 0x2011, 0x0100, 0x1078, 0x41f4, 0x2019, + 0x000e, 0x1078, 0x6b8f, 0xa484, 0x00ff, 0xa080, 0x2091, 0x200c, + 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, + 0x6bf7, 0x017f, 0xd1ac, 0x00c0, 0x1ce3, 0x2019, 0x0004, 0x1078, + 0x202f, 0x0078, 0x1cf2, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, + 0x1078, 0x3447, 0x00c0, 0x1cee, 0x1078, 0x3256, 0x8108, 0x00f0, + 0x1ce8, 0x157f, 0x0c7f, 0x047f, 0x6043, 0x0000, 0x2009, 0x00f7, + 0x1078, 0x3233, 0x2011, 0x0003, 0x1078, 0x5232, 0x2011, 0x0002, + 0x1078, 0x523c, 0x1078, 0x5148, 0x1078, 0x414c, 0x037e, 0x2019, + 0x0000, 0x1078, 0x51da, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001, + 0x6d00, 0x2014, 0xa296, 0x0004, 0x00c0, 0x1d1c, 0xd19c, 0x00c0, + 0x1d1c, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x6d20, + 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x1d9d, 0x017e, + 0x6220, 0xd2b4, 0x0040, 0x1d5b, 0x1078, 0x414c, 0x1078, 0x4fe5, + 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, + 0x0040, 0x1d3e, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, + 0x2061, 0x6f10, 0x6028, 0xa09a, 0x0002, 0x00c8, 0x1d4e, 0x8000, + 0x602a, 0x0c7f, 0x1078, 0x4fd7, 0x0078, 0x1d9c, 0x2019, 0x6f19, + 0x2304, 0xa065, 0x0040, 0x1d58, 0x2009, 0x0014, 0x1078, 0x5591, + 0x0c7f, 0x0078, 0x1d9c, 0xd2bc, 0x0040, 0x1d9c, 0x1078, 0x415a, + 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, + 0xa084, 0x4000, 0x0040, 0x1d70, 0x6803, 0x1000, 0x6803, 0x0000, + 0x0d7f, 0x0c7e, 0x2061, 0x6f10, 0x6044, 0xa09a, 0x0002, 0x00c8, + 0x1d91, 0x8000, 0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1d9c, + 0x1078, 0x4151, 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, + 0x1d8d, 0x6017, 0x0012, 0x0078, 0x1d9c, 0x6017, 0x0016, 0x0078, + 0x1d9c, 0x2019, 0x6f1f, 0x2304, 0xa065, 0x0040, 0x1d9b, 0x2009, + 0x004a, 0x1078, 0x5591, 0x0c7f, 0x017f, 0xd19c, 0x0040, 0x1dc5, + 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, 0x5232, + 0x2011, 0x0002, 0x1078, 0x523c, 0x1078, 0x5148, 0x1078, 0x414c, + 0x037e, 0x2019, 0x0000, 0x1078, 0x51da, 0x037f, 0x60e3, 0x0000, + 0x1078, 0x6c5f, 0x1078, 0x6c7d, 0x2001, 0x6d00, 0x2003, 0x0004, + 0x6027, 0x0008, 0x1078, 0x11aa, 0x017f, 0xa18c, 0xffd0, 0x6126, + 0x007c, 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, + 0x8000, 0x2071, 0x6d00, 0x71b0, 0x70b2, 0xa116, 0x0040, 0x1def, + 0x81ff, 0x0040, 0x1de1, 0x2011, 0x8011, 0x1078, 0x2a53, 0x0078, + 0x1def, 0x2011, 0x8012, 0x1078, 0x2a53, 0x037e, 0x0c7e, 0x2061, + 0x0100, 0x2019, 0x0028, 0x1078, 0x202f, 0x0c7f, 0x037f, 0x127f, + 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x0f7e, + 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x1e09, 0x2204, 0x60f2, + 0xa190, 0x1e12, 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, 0x0c7f, + 0x007c, 0x083e, 0x083e, 0x083e, 0x0580, 0x0420, 0x0348, 0x02c0, + 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, + 0x00d0, 0x00b0, 0x00a0, 0x2028, 0x2130, 0xa094, 0xff00, 0x00c0, + 0x1e24, 0x81ff, 0x0040, 0x1e28, 0x1078, 0x3f00, 0x0078, 0x1e2f, + 0xa080, 0x2091, 0x200c, 0xa18c, 0xff00, 0x810f, 0xa006, 0x007c, + 0xa080, 0x2091, 0x200c, 0xa18c, 0x00ff, 0x007c, 0x1e56, 0x1e5a, + 0x1e5e, 0x1e64, 0x1e6a, 0x1e70, 0x1e76, 0x1e7e, 0x1e86, 0x1e8c, + 0x1e92, 0x1e9a, 0x1ea2, 0x1eaa, 0x1eb2, 0x1ebc, 0x1ec6, 0x1ec6, + 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, + 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x1ec6, 0x107e, 0x007e, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x0078, 0x1edf, 0x107e, 0x007e, + 0x1078, 0x1c3e, 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1c3e, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1b2e, 0x0078, 0x1edf, + 0x107e, 0x007e, 0x1078, 0x1b2e, 0x0078, 0x1edf, 0x107e, 0x007e, + 0x1078, 0x1c3e, 0x1078, 0x1b2e, 0x0078, 0x1edf, 0x107e, 0x007e, + 0x1078, 0x1c3e, 0x1078, 0x1b2e, 0x0078, 0x1edf, 0x107e, 0x007e, + 0x1078, 0x1b72, 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1b72, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1c3e, 0x1078, 0x1b72, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1c3e, 0x1078, 0x1b72, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1b2e, 0x1078, 0x1b72, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1b2e, 0x1078, 0x1b72, + 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1c3e, 0x1078, 0x1b2e, + 0x1078, 0x1b72, 0x0078, 0x1edf, 0x107e, 0x007e, 0x1078, 0x1c3e, + 0x1078, 0x1b2e, 0x1078, 0x1b72, 0x0078, 0x1edf, 0x0005, 0x0078, + 0x1ec6, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x1ecf, 0x1edf, + 0x1e5c, 0x1e60, 0x1e66, 0x1e6c, 0x1e72, 0x1e78, 0x1e80, 0x1e88, + 0x1e8e, 0x1e94, 0x1e9c, 0x1ea4, 0x1eac, 0x1eb4, 0x1ebe, 0x0008, + 0x1ec9, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, 0x027e, + 0x2041, 0x007e, 0x70bc, 0xd09c, 0x0040, 0x1ef0, 0x2041, 0x007f, + 0x2001, 0x010c, 0x203c, 0x727c, 0x82ff, 0x0040, 0x1f3b, 0x037e, + 0x738c, 0xa38e, 0xffff, 0x00c0, 0x1eff, 0x2019, 0x0001, 0x8314, + 0xa2e0, 0x73c0, 0x2c04, 0xa38c, 0x0001, 0x0040, 0x1f0c, 0xa084, + 0xff00, 0x8007, 0x0078, 0x1f0e, 0xa084, 0x00ff, 0xa70e, 0x0040, + 0x1f30, 0xa08e, 0x00ff, 0x0040, 0x1f36, 0x2009, 0x0000, 0x1078, + 0x1e1b, 0x1078, 0x3410, 0x00c0, 0x1f33, 0x6004, 0xa084, 0x00ff, + 0xa086, 0x0006, 0x00c0, 0x1f2a, 0x1078, 0x1f8d, 0x0040, 0x1f33, + 0x0078, 0x1f30, 0x1078, 0x208d, 0x1078, 0x1fb4, 0x0040, 0x1f33, + 0x8318, 0x0078, 0x1eff, 0x738e, 0x0078, 0x1f38, 0x708f, 0xffff, + 0x037f, 0x0078, 0x1f8a, 0xa780, 0x2091, 0x203c, 0xa7bc, 0xff00, + 0x873f, 0x708c, 0xa096, 0xffff, 0x0040, 0x1f4d, 0xa812, 0x00c8, + 0x1f5d, 0x708f, 0xffff, 0x0078, 0x1f87, 0x2009, 0x0000, 0x70bc, + 0xd09c, 0x0040, 0x1f58, 0xd094, 0x0040, 0x1f58, 0x2009, 0x007e, + 0x2100, 0xa802, 0x20a8, 0x0078, 0x1f61, 0x2008, 0x2810, 0xa202, + 0x20a8, 0x2700, 0x157e, 0x017e, 0xa106, 0x0040, 0x1f7e, 0x1078, + 0x3410, 0x00c0, 0x1f87, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, + 0x00c0, 0x1f78, 0x1078, 0x1f8d, 0x0040, 0x1f87, 0x0078, 0x1f7e, + 0x1078, 0x208d, 0x1078, 0x1fb4, 0x0040, 0x1f87, 0x017f, 0x8108, + 0x157f, 0x00f0, 0x1f61, 0x708f, 0xffff, 0x0078, 0x1f8a, 0x017f, + 0x157f, 0x718e, 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, + 0x0c7e, 0x2c68, 0x1078, 0x5504, 0x0040, 0x1faf, 0x2d00, 0x601a, + 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x33df, 0x2001, 0x0000, + 0x1078, 0x33f3, 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, + 0x127f, 0x2009, 0x0004, 0x1078, 0x5591, 0xa085, 0x0001, 0x0c7f, + 0x0d7f, 0x077f, 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, + 0x2c68, 0x1078, 0x5504, 0x0040, 0x1fd6, 0x2d00, 0x601a, 0x601f, + 0x0001, 0x2001, 0x0000, 0x1078, 0x33df, 0x2001, 0x0002, 0x1078, + 0x33f3, 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, + 0x2009, 0x0002, 0x1078, 0x5591, 0xa085, 0x0001, 0x0c7f, 0x0d7f, + 0x077f, 0x017f, 0x007c, 0x0c7e, 0x027e, 0x2009, 0x0080, 0x1078, + 0x3410, 0x00c0, 0x1fe9, 0x1078, 0x1fec, 0x0040, 0x1fe9, 0x70c3, + 0xffff, 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, + 0x2c68, 0x1078, 0x5504, 0x0040, 0x200e, 0x2d00, 0x601a, 0x601f, + 0x0001, 0x2001, 0x0000, 0x1078, 0x33df, 0x2001, 0x0002, 0x1078, + 0x33f3, 0x127e, 0x2091, 0x8000, 0x70c4, 0x8000, 0x70c6, 0x127f, + 0x2009, 0x0002, 0x1078, 0x5591, 0xa085, 0x0001, 0x0c7f, 0x0d7f, + 0x077f, 0x017f, 0x007c, 0x0c7e, 0x0d7e, 0x2009, 0x007f, 0x1078, + 0x3410, 0x00c0, 0x202c, 0x2c68, 0x1078, 0x5504, 0x0040, 0x202c, + 0x2d00, 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, + 0x1078, 0x5591, 0xa085, 0x0001, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e, + 0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x4463, 0x1078, 0x4417, + 0x1078, 0x59ce, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, + 0x3447, 0x00c0, 0x2047, 0x1078, 0x35cf, 0x1078, 0x3256, 0x017f, + 0x8108, 0x00f0, 0x203e, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, + 0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, + 0x72a0, 0x027e, 0x2019, 0x0029, 0x1078, 0x445c, 0x1078, 0x43a9, + 0x2c08, 0x1078, 0x6a57, 0x017f, 0x2e60, 0x1078, 0x35cf, 0x1078, + 0x3256, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, + 0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x2083, + 0x2071, 0x6d00, 0x7088, 0xa005, 0x0040, 0x2080, 0x8001, 0x708a, + 0x007f, 0x0e7f, 0x007c, 0x2071, 0x6d00, 0x70c4, 0xa005, 0x0040, + 0x2080, 0x8001, 0x70c6, 0x0078, 0x2080, 0x6000, 0xc08c, 0x6002, + 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, + 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, + 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, + 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, + 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, + 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, + 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, + 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, + 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, + 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, + 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, + 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, + 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, + 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, + 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, + 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, + 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, + 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, + 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, + 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, + 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, + 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, + 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, + 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, + 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, + 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, + 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x2071, 0x6d6d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, + 0x703a, 0x703e, 0x7033, 0x6d7d, 0x7037, 0x6d7d, 0x7007, 0x0001, + 0x2061, 0x6d9d, 0x6003, 0x0002, 0x007c, 0x0090, 0x21b8, 0x0068, + 0x21b8, 0x2071, 0x6d6d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x21b8, + 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x229c, 0x0079, 0x223c, + 0x007c, 0x2071, 0x6d6d, 0x7004, 0x0079, 0x21be, 0x21c2, 0x21c3, + 0x21cd, 0x21df, 0x007c, 0x0090, 0x21cc, 0x0068, 0x21cc, 0x2b78, + 0x7818, 0xd084, 0x0040, 0x21eb, 0x007c, 0x2b78, 0x2061, 0x6d9d, + 0x6008, 0xa08e, 0x0100, 0x0040, 0x21da, 0xa086, 0x0200, 0x0040, + 0x2294, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, + 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x21e7, 0x007c, 0x2a60, + 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, + 0x21f4, 0x61b0, 0x0079, 0x21fc, 0x2100, 0xa08a, 0x0033, 0x00c8, + 0x2290, 0x61b0, 0x0079, 0x223c, 0x2272, 0x22a4, 0x22ac, 0x22b0, + 0x22b8, 0x22be, 0x22c2, 0x22cb, 0x22cf, 0x22d7, 0x22db, 0x2290, + 0x2290, 0x2290, 0x22df, 0x2290, 0x22ef, 0x2306, 0x231d, 0x2399, + 0x239e, 0x23cb, 0x2416, 0x2425, 0x2446, 0x247c, 0x2486, 0x2493, + 0x24a6, 0x24be, 0x24c7, 0x2504, 0x250a, 0x2290, 0x251a, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x251e, 0x2524, 0x2290, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x252c, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x2539, 0x253f, 0x2290, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x22d7, 0x22db, 0x2290, 0x2290, + 0x2551, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, 0x2290, + 0x2290, 0x2290, 0x2290, 0x2290, 0x259e, 0x265d, 0x2671, 0x2678, + 0x26db, 0x2736, 0x2741, 0x2783, 0x2790, 0x279d, 0x27a0, 0x2555, + 0x27c9, 0x2811, 0x281e, 0x28fd, 0x29cb, 0x29f2, 0x2ade, 0x713c, + 0x0078, 0x2272, 0x2021, 0x4000, 0x1078, 0x2a2d, 0x127e, 0x2091, + 0x8000, 0x0068, 0x227f, 0x7818, 0xd084, 0x0040, 0x2282, 0x127f, + 0x0078, 0x2276, 0x781b, 0x0001, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, + 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x127f, 0x007c, + 0x2021, 0x4001, 0x0078, 0x2274, 0x2021, 0x4002, 0x0078, 0x2274, + 0x2021, 0x4003, 0x0078, 0x2274, 0x2021, 0x4005, 0x0078, 0x2274, + 0x2021, 0x4006, 0x0078, 0x2274, 0xa02e, 0x2520, 0x7b28, 0x7a2c, + 0x7824, 0x7930, 0x0078, 0x2a3c, 0x7823, 0x0004, 0x7824, 0x007a, + 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2a40, + 0x7924, 0x7828, 0x2114, 0x200a, 0x0078, 0x2272, 0x7924, 0x2114, + 0x0078, 0x2272, 0x2099, 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, + 0x53a3, 0x0078, 0x2272, 0x7824, 0x2060, 0x0078, 0x22e1, 0x2009, + 0x0001, 0x2011, 0x000d, 0x2019, 0x0000, 0x0078, 0x2272, 0x7d38, + 0x7c3c, 0x0078, 0x22a6, 0x7d38, 0x7c3c, 0x0078, 0x22b2, 0x2061, + 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, + 0x22e3, 0x2010, 0xa005, 0x0040, 0x2272, 0x0078, 0x2298, 0x2061, + 0x6d51, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x22a0, 0x8019, 0x0040, + 0x22a0, 0x604a, 0x6142, 0x782c, 0x6052, 0x7828, 0x6056, 0xa006, + 0x605a, 0x605e, 0x1078, 0x3890, 0x0078, 0x2272, 0x2061, 0x6d51, + 0x7824, 0x7930, 0xa11a, 0x00c8, 0x22a0, 0x8019, 0x0040, 0x22a0, + 0x604e, 0x6146, 0x782c, 0x6062, 0x7828, 0x6066, 0xa006, 0x606a, + 0x606e, 0x1078, 0x366e, 0x0078, 0x2272, 0xa02e, 0x2520, 0x81ff, + 0x00c0, 0x229c, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, + 0x6d74, 0x41a1, 0x1078, 0x2a04, 0x0040, 0x229c, 0x2009, 0x0020, + 0x1078, 0x2a3c, 0x701b, 0x2335, 0x007c, 0x6834, 0x2008, 0xa084, + 0x00ff, 0xa096, 0x0011, 0x0040, 0x2341, 0xa096, 0x0019, 0x00c0, + 0x229c, 0x810f, 0xa18c, 0x00ff, 0x0040, 0x229c, 0x710e, 0x700c, + 0x8001, 0x0040, 0x2372, 0x700e, 0x1078, 0x2a04, 0x0040, 0x229c, + 0x2009, 0x0020, 0x2061, 0x6d9d, 0x6224, 0x6328, 0x642c, 0x6530, + 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, + 0x1078, 0x2a3c, 0x701b, 0x2365, 0x007c, 0x6834, 0xa084, 0x00ff, + 0xa096, 0x0002, 0x0040, 0x2370, 0xa096, 0x000a, 0x00c0, 0x229c, + 0x0078, 0x2347, 0x7010, 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, + 0x3344, 0x00c0, 0x2380, 0x7007, 0x0003, 0x701b, 0x2382, 0x007c, + 0x1078, 0x372d, 0x127e, 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, + 0x6d74, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, + 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, + 0x2a40, 0x6198, 0x7824, 0x609a, 0x0078, 0x2272, 0x2091, 0x8000, + 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, + 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, + 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, + 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, + 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0xa08a, 0x0003, 0x00c8, + 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0, 0x229c, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x7c28, 0x7d2c, 0x1078, 0x3592, 0xd28c, 0x00c0, + 0x23dd, 0x1078, 0x3522, 0x0078, 0x23df, 0x1078, 0x355e, 0x00c0, + 0x2409, 0x2061, 0x7400, 0x127e, 0x2091, 0x8000, 0x6000, 0xa086, + 0x0000, 0x0040, 0x23f7, 0x6010, 0xa06d, 0x0040, 0x23f7, 0x683c, + 0xa406, 0x00c0, 0x23f7, 0x6840, 0xa506, 0x0040, 0x2402, 0x127f, + 0xace0, 0x0008, 0x2001, 0x6d15, 0x2004, 0xac02, 0x00c8, 0x229c, + 0x0078, 0x23e3, 0x1078, 0x5f5d, 0x127f, 0x0040, 0x229c, 0x0078, + 0x2272, 0xa00e, 0x2001, 0x0005, 0x1078, 0x372d, 0x127e, 0x2091, + 0x8000, 0x1078, 0x36a1, 0x127f, 0x0078, 0x2272, 0x81ff, 0x00c0, + 0x229c, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x1078, 0x34d7, 0x1078, + 0x35a3, 0x0040, 0x229c, 0x0078, 0x2272, 0x81ff, 0x00c0, 0x229c, + 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x2031, 0x000f, 0x1078, 0x34d7, + 0x8631, 0x00c8, 0x242e, 0x2019, 0x0005, 0x1078, 0x35c4, 0x0040, + 0x229c, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x22a0, 0x8003, 0x800b, + 0x810b, 0xa108, 0x1078, 0x40de, 0x0078, 0x2272, 0x127e, 0x2091, + 0x8000, 0x81ff, 0x00c0, 0x2476, 0x2029, 0x00ff, 0x644c, 0x2400, + 0xa506, 0x0040, 0x2470, 0x2508, 0x1078, 0x3447, 0x00c0, 0x2470, + 0x2031, 0x000f, 0x1078, 0x34d7, 0x8631, 0x00c8, 0x245a, 0x2019, + 0x0004, 0x1078, 0x35c4, 0x0040, 0x2476, 0x7824, 0xa08a, 0x1000, + 0x00c8, 0x2479, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x40de, + 0x8529, 0x00c8, 0x244f, 0x127f, 0x0078, 0x2272, 0x127f, 0x0078, + 0x229c, 0x127f, 0x0078, 0x22a0, 0x1078, 0x2a1c, 0x0040, 0x22a0, + 0x1078, 0x3507, 0x1078, 0x3592, 0x0078, 0x2272, 0x81ff, 0x00c0, + 0x229c, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x1078, 0x34f0, 0x1078, + 0x3592, 0x0078, 0x2272, 0x81ff, 0x00c0, 0x229c, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x1078, 0x3561, 0x0040, 0x229c, 0x1078, 0x338c, + 0x1078, 0x351b, 0x1078, 0x3592, 0x0078, 0x2272, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x1078, 0x34d7, 0x62a0, 0x2019, 0x0005, 0x0c7e, + 0x1078, 0x35cf, 0x0c7f, 0x1078, 0x445c, 0x1078, 0x43a9, 0x2c08, + 0x1078, 0x6a57, 0x1078, 0x3592, 0x0078, 0x2272, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x1078, 0x3592, 0x2208, 0x0078, 0x2272, 0x157e, + 0x0d7e, 0x0e7e, 0x2069, 0x6ddf, 0x6810, 0x6914, 0xa10a, 0x00c8, + 0x24d3, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, + 0x20a9, 0x007e, 0x2069, 0x6e00, 0x2d04, 0xa075, 0x0040, 0x24e8, + 0x704c, 0x1078, 0x24f2, 0xa210, 0x7080, 0x1078, 0x24f2, 0xa318, + 0x8d68, 0x00f0, 0x24dc, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, + 0x0078, 0x2272, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x2501, 0x2001, + 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x2501, 0x2178, 0x0078, + 0x24f9, 0x017f, 0x0f7f, 0x007c, 0x2069, 0x6ddf, 0x6910, 0x629c, + 0x0078, 0x2272, 0x81ff, 0x00c0, 0x229c, 0x614c, 0xa190, 0x2091, + 0x2214, 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, 0xa215, 0x6364, + 0x0078, 0x2272, 0x613c, 0x6240, 0x0078, 0x2272, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x0078, 0x2272, 0x1078, 0x2a1c, 0x0040, 0x22a0, + 0x6244, 0x6338, 0x0078, 0x2272, 0x613c, 0x6240, 0x7824, 0x603e, + 0x7b28, 0x6342, 0x2069, 0x6d51, 0x831f, 0xa305, 0x6816, 0x0078, + 0x2272, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x0078, 0x2272, 0x1078, + 0x2a1c, 0x0040, 0x22a0, 0x7828, 0xa00d, 0x0040, 0x22a0, 0x782c, + 0xa005, 0x0040, 0x22a0, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, + 0x2272, 0x7d38, 0x7c3c, 0x0078, 0x231f, 0x7824, 0xa09c, 0x00ff, + 0xa39a, 0x0003, 0x00c8, 0x229c, 0x624c, 0xa084, 0xff00, 0x8007, + 0xa206, 0x00c0, 0x256d, 0x2001, 0x6d40, 0x2009, 0x000c, 0x7a2c, + 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a40, 0x81ff, 0x00c0, 0x229c, + 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x6004, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x229c, 0x0c7e, 0x1078, 0x2a04, 0x0c7f, 0x0040, + 0x229c, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6223, + 0x0040, 0x229c, 0x7007, 0x0003, 0x701b, 0x258f, 0x007c, 0x6830, + 0xa086, 0x0100, 0x0040, 0x229c, 0xad80, 0x000e, 0x2009, 0x000c, + 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a40, 0x1078, 0x2a04, + 0x0040, 0x229c, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, + 0x1078, 0x2a3c, 0x701b, 0x25ad, 0x007c, 0xade8, 0x000d, 0x6800, + 0xa005, 0x0040, 0x22a0, 0x6804, 0xd0ac, 0x0040, 0x25ba, 0xd0a4, + 0x0040, 0x22a0, 0xd094, 0x0040, 0x25c5, 0x0c7e, 0x2061, 0x0100, + 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x25d0, + 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, + 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x25e5, 0xd084, + 0x0040, 0x25e5, 0x6828, 0xa08a, 0x007f, 0x00c8, 0x22a0, 0xa088, + 0x2091, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x25ee, + 0x6828, 0xa08a, 0x007f, 0x00c8, 0x22a0, 0x604e, 0x6808, 0xa08a, + 0x0100, 0x0048, 0x22a0, 0xa08a, 0x0841, 0x00c8, 0x22a0, 0xa084, + 0x0007, 0x00c0, 0x22a0, 0x680c, 0xa005, 0x0040, 0x22a0, 0x6810, + 0xa005, 0x0040, 0x22a0, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x22a0, + 0x8001, 0x0040, 0x22a0, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x22a0, + 0x8001, 0x0040, 0x22a0, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x6d51, + 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084, + 0x00ff, 0x6042, 0x1078, 0x3890, 0x1078, 0x366e, 0x6000, 0xa086, + 0x0000, 0x00c0, 0x265b, 0x6808, 0x602a, 0x1078, 0x1bcc, 0x6818, + 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, + 0x611a, 0x621e, 0x6322, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, + 0x6312, 0x1078, 0x4168, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, + 0x602f, 0x0000, 0x0c7f, 0x60b4, 0xa005, 0x0040, 0x2657, 0x6003, + 0x0001, 0x2091, 0x301d, 0x1078, 0x31cb, 0x0078, 0x265b, 0x6003, + 0x0004, 0x2091, 0x301d, 0x0078, 0x2272, 0x6000, 0xa086, 0x0000, + 0x0040, 0x229c, 0x2069, 0x6d51, 0x7830, 0x6842, 0x7834, 0x6846, + 0x2d00, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, + 0x2a40, 0x81ff, 0x00c0, 0x229c, 0x1078, 0x31cb, 0x0078, 0x2272, + 0x81ff, 0x00c0, 0x229c, 0x617c, 0x81ff, 0x0040, 0x2692, 0x703f, + 0x0000, 0x2001, 0x73c0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, + 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078, 0x2a40, 0x701b, 0x226f, + 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x73c0, 0x20a9, + 0x0040, 0x20a1, 0x73c0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, + 0x2091, 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, + 0x2100, 0xa506, 0x0040, 0x26c4, 0x1078, 0x3447, 0x00c0, 0x26c4, + 0x6014, 0x821c, 0x0048, 0x26bc, 0xa398, 0x73c0, 0xa085, 0xff00, + 0x8007, 0x201a, 0x0078, 0x26c3, 0xa398, 0x73c0, 0x2324, 0xa4a4, + 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, + 0x26cb, 0x0078, 0x26a8, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, + 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x73c0, 0x2099, 0x73c0, 0x1078, + 0x3213, 0x0078, 0x2681, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x0c7e, + 0x1078, 0x2a04, 0x0c7f, 0x0040, 0x229c, 0x2001, 0x6d52, 0x2004, + 0xd0b4, 0x0040, 0x2708, 0x6000, 0xd08c, 0x00c0, 0x2708, 0x6004, + 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2708, 0x6837, 0x0000, + 0x6838, 0xc0fd, 0x683a, 0x1078, 0x625b, 0x0040, 0x229c, 0x7007, + 0x0003, 0x701b, 0x2704, 0x007c, 0x1078, 0x2a1c, 0x0040, 0x22a0, + 0x20a9, 0x0029, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, + 0x0002, 0xac80, 0x0004, 0x2098, 0xad80, 0x0004, 0x20a0, 0x1078, + 0x3213, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, + 0x20a0, 0x1078, 0x3213, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, + 0xad80, 0x000a, 0x20a0, 0x1078, 0x3213, 0x2d00, 0x2009, 0x0029, + 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a40, 0x81ff, 0x00c0, + 0x229c, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x1078, 0x35ae, 0x0078, + 0x2272, 0x81ff, 0x00c0, 0x229c, 0x7828, 0xa08a, 0x1000, 0x00c8, + 0x22a0, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x2031, 0x000f, 0x1078, + 0x34d7, 0x8631, 0x00c8, 0x274f, 0x2019, 0x0004, 0x1078, 0x35c4, + 0x7924, 0x810f, 0x7a28, 0x1078, 0x275f, 0x0078, 0x2272, 0xa186, + 0x00ff, 0x0040, 0x2767, 0x1078, 0x2777, 0x0078, 0x2776, 0x2029, + 0x007e, 0x2061, 0x6d00, 0x644c, 0x2400, 0xa506, 0x0040, 0x2773, + 0x2508, 0x1078, 0x2777, 0x8529, 0x00c8, 0x276c, 0x007c, 0x1078, + 0x3447, 0x00c0, 0x2782, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, + 0x1078, 0x40de, 0x007c, 0x81ff, 0x00c0, 0x229c, 0x1078, 0x2a1c, + 0x0040, 0x22a0, 0x1078, 0x34d7, 0x1078, 0x35b9, 0x0078, 0x2272, + 0x81ff, 0x00c0, 0x229c, 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x1078, + 0x34d7, 0x1078, 0x35a3, 0x0078, 0x2272, 0x6100, 0x0078, 0x2272, + 0x1078, 0x2a1c, 0x0040, 0x22a0, 0x6004, 0xa086, 0x0707, 0x0040, + 0x22a0, 0x2001, 0x6d00, 0x2004, 0xa086, 0x0003, 0x00c0, 0x229c, + 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x27b9, 0xace8, + 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, + 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, + 0x2272, 0x81ff, 0x00c0, 0x229c, 0x7828, 0xa08a, 0x1000, 0x00c8, + 0x22a0, 0x7924, 0xa184, 0x00ff, 0xa082, 0x0010, 0x00c8, 0x22a0, + 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x27e6, 0xa182, + 0x007f, 0x00c8, 0x22a0, 0x2100, 0x1078, 0x1e30, 0x027e, 0x0c7e, + 0x127e, 0x2091, 0x8000, 0x2061, 0x6f23, 0x601b, 0x0000, 0x601f, + 0x0000, 0x2061, 0x6d00, 0x6003, 0x0001, 0x2061, 0x0100, 0x6030, + 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, + 0x0010, 0x2009, 0x001e, 0x2011, 0x31f0, 0x1078, 0x415f, 0x7924, + 0x810f, 0x7a28, 0x1078, 0x275f, 0x127f, 0x0c7f, 0x027f, 0x0078, + 0x2272, 0x7924, 0xa18c, 0xff00, 0x810f, 0x0c7e, 0x1078, 0x3410, + 0x2c08, 0x0c7f, 0x00c0, 0x22a0, 0x0078, 0x2272, 0x81ff, 0x00c0, + 0x229c, 0x60bc, 0xd09c, 0x0040, 0x229c, 0x1078, 0x2a04, 0x0040, + 0x229c, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2a3c, + 0x701b, 0x2833, 0x007c, 0x2009, 0x0080, 0x1078, 0x3447, 0x00c0, + 0x229c, 0x0d7e, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, + 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0040, 0x28a7, 0xa0be, + 0x0112, 0x0040, 0x28a7, 0xa0be, 0x0113, 0x0040, 0x28a7, 0xa0be, + 0x0114, 0x0040, 0x28a7, 0xa0be, 0x0117, 0x0040, 0x28a7, 0xa0be, + 0x011a, 0x0040, 0x28a7, 0xa0be, 0x0121, 0x0040, 0x289d, 0xa0be, + 0x0131, 0x0040, 0x289d, 0xa0be, 0x0171, 0x0040, 0x28a7, 0xa0be, + 0x01a1, 0x00c0, 0x2870, 0x6830, 0x8007, 0x6832, 0x0078, 0x28ad, + 0xa0be, 0x0212, 0x0040, 0x28a3, 0xa0be, 0x0213, 0x0040, 0x28a3, + 0xa0be, 0x0214, 0x0040, 0x2895, 0xa0be, 0x0217, 0x0040, 0x288f, + 0xa0be, 0x021a, 0x00c0, 0x2889, 0x6838, 0x8007, 0x683a, 0x0078, + 0x28a7, 0xa0be, 0x0300, 0x0040, 0x28a7, 0x0078, 0x229c, 0xad80, + 0x0010, 0x20a9, 0x0007, 0x1078, 0x28d9, 0xad80, 0x000e, 0x20a9, + 0x0001, 0x1078, 0x28d9, 0x0078, 0x28a7, 0xad80, 0x000c, 0x1078, + 0x28e7, 0x0078, 0x28ad, 0xad80, 0x000e, 0x1078, 0x28e7, 0xad80, + 0x000c, 0x20a9, 0x0001, 0x1078, 0x28d9, 0x0c7e, 0x1078, 0x2a04, + 0x0040, 0x28ce, 0x6837, 0x0119, 0x684f, 0x0020, 0x685b, 0x0001, + 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, + 0x6996, 0x689b, 0x0000, 0x0c7f, 0x0d7f, 0x1078, 0x623f, 0x0040, + 0x229c, 0x7007, 0x0003, 0x701b, 0x28d2, 0x007c, 0x0c7f, 0x0d7f, + 0x0078, 0x229c, 0x6820, 0xa086, 0x8001, 0x0040, 0x229c, 0x0078, + 0x2272, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, + 0x8108, 0x280a, 0x8108, 0x00f0, 0x28db, 0x017f, 0x007c, 0x017e, + 0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, + 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, + 0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x00c0, 0x229c, + 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0081, 0x0048, 0x22a0, + 0xa182, 0x00ff, 0x00c8, 0x22a0, 0x7a2c, 0x7b28, 0x6064, 0xa306, + 0x00c0, 0x2918, 0x6068, 0xa206, 0x00c0, 0x2918, 0x0078, 0x22a0, + 0x0c7e, 0x1078, 0x297b, 0x2c68, 0x0c7f, 0x0040, 0x2939, 0xa0c6, + 0x4007, 0x00c0, 0x2926, 0x7c26, 0x0078, 0x2936, 0xa0c6, 0x4008, + 0x00c0, 0x292e, 0x7f26, 0x7e2a, 0x0078, 0x2936, 0xa0c6, 0x4009, + 0x00c0, 0x2934, 0x0078, 0x2936, 0x2001, 0x4006, 0x2020, 0x0078, + 0x2274, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x5504, + 0x0040, 0x2969, 0x2d00, 0x601a, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, + 0x1078, 0x2a04, 0x0c7f, 0x2b70, 0x0040, 0x229c, 0x6837, 0x0000, + 0x2d00, 0x6012, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x33df, + 0x2001, 0x0002, 0x1078, 0x33f3, 0x127e, 0x2091, 0x8000, 0x7088, + 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5591, 0xa085, + 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f, 0x0040, 0x229c, 0x7007, + 0x0003, 0x701b, 0x2974, 0x007c, 0x6830, 0xa086, 0x0100, 0x00c0, + 0x2272, 0x0078, 0x229c, 0x0e7e, 0x0d7e, 0x2029, 0x0000, 0x2021, + 0x0081, 0x20a9, 0x007e, 0x2071, 0x6e81, 0x2e04, 0xa005, 0x00c0, + 0x298f, 0x2100, 0xa406, 0x0040, 0x29c0, 0x0078, 0x29b4, 0x2068, + 0x6f10, 0x2700, 0xa306, 0x00c0, 0x29a5, 0x6e14, 0x2600, 0xa206, + 0x00c0, 0x29a5, 0x2400, 0xa106, 0x00c0, 0x29a1, 0x2d60, 0x0078, + 0x29c6, 0x2001, 0x4007, 0x0078, 0x29c7, 0x2400, 0xa106, 0x00c0, + 0x29b4, 0x6e14, 0x87ff, 0x00c0, 0x29b0, 0x86ff, 0x0040, 0x29c0, + 0x2001, 0x4008, 0x0078, 0x29c7, 0x8420, 0x8e70, 0x00f0, 0x2985, + 0x2001, 0x4009, 0x0078, 0x29c7, 0x2001, 0x0001, 0x0078, 0x29c7, + 0x1078, 0x3410, 0x00c0, 0x29bc, 0x6312, 0x6216, 0xa006, 0xa005, + 0x0d7f, 0x0e7f, 0x007c, 0x81ff, 0x00c0, 0x229c, 0x1078, 0x2a04, + 0x0040, 0x229c, 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x22a0, + 0xa096, 0x00ff, 0x0040, 0x29e0, 0xa092, 0x0004, 0x00c8, 0x22a0, + 0x2010, 0x2d18, 0x1078, 0x2013, 0x0040, 0x229c, 0x7007, 0x0003, + 0x701b, 0x29eb, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x229c, + 0x0078, 0x2272, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0081, + 0x0048, 0x22a0, 0xa182, 0x00ff, 0x00c8, 0x22a0, 0x1078, 0x615b, + 0x1078, 0x342f, 0x0078, 0x2272, 0x1078, 0x12f4, 0x0040, 0x2a1b, + 0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, 0x2a13, 0x2d00, 0x7012, + 0x7016, 0x0078, 0x2a19, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, + 0x7016, 0xad80, 0x000d, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, + 0x1078, 0x3447, 0x00c0, 0x2a2a, 0xa6b4, 0x00ff, 0xa682, 0x0010, + 0x0048, 0x2a2b, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, + 0x0040, 0x2a38, 0x2168, 0x6904, 0x1078, 0x1328, 0x0078, 0x2a2f, + 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2a42, + 0x2031, 0x0000, 0x2061, 0x6d9d, 0x6606, 0x6112, 0x600e, 0x6226, + 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x135f, 0x7007, 0x0002, + 0x701b, 0x2272, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, + 0x0000, 0x2001, 0x6d7b, 0x2004, 0xa005, 0x00c0, 0x2a6e, 0x0068, + 0x2a6e, 0x7818, 0xd084, 0x00c0, 0x2a6e, 0x781b, 0x0001, 0x7a22, + 0x7b26, 0x7c2a, 0x2091, 0x4080, 0x0078, 0x2a93, 0x017e, 0x0c7e, + 0x0e7e, 0x2071, 0x6d6d, 0x7138, 0xa182, 0x0004, 0x0048, 0x2a7c, + 0x7030, 0x2060, 0x0078, 0x2a8d, 0x7030, 0xa0e0, 0x0008, 0xac82, + 0x6d9d, 0x0048, 0x2a85, 0x2061, 0x6d7d, 0x2c00, 0x7032, 0x81ff, + 0x00c0, 0x2a8b, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, + 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, + 0x6d6d, 0x7038, 0xa005, 0x0040, 0x2acf, 0x127e, 0x2091, 0x8000, + 0x0068, 0x2ace, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, + 0x2acd, 0x0c7e, 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, + 0x6004, 0x7826, 0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, + 0x703a, 0xa005, 0x00c0, 0x2ac3, 0x7033, 0x6d7d, 0x7037, 0x6d7d, + 0x0c7f, 0x0078, 0x2acd, 0xac80, 0x0008, 0xa0fa, 0x6d9d, 0x0048, + 0x2acb, 0x2001, 0x6d7d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, + 0x007c, 0x027e, 0x2001, 0x6d52, 0x2004, 0xd0c4, 0x0040, 0x2adc, + 0x2011, 0x8014, 0x1078, 0x2a53, 0x027f, 0x007c, 0x81ff, 0x00c0, + 0x229c, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, + 0x31cb, 0x127f, 0x0078, 0x2272, 0x127e, 0x0c7e, 0x0e7e, 0x2061, + 0x0100, 0x2071, 0x6d00, 0x6044, 0xd0a4, 0x00c0, 0x2b11, 0xd084, + 0x0040, 0x2afe, 0x1078, 0x2c34, 0x0078, 0x2b11, 0xd08c, 0x0040, + 0x2b05, 0x1078, 0x2b4b, 0x0078, 0x2b11, 0xd094, 0x0040, 0x2b0c, + 0x1078, 0x2b2c, 0x0078, 0x2b11, 0xd09c, 0x0040, 0x2b11, 0x1078, + 0x2b15, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x6043, 0x0040, 0x6043, + 0x0000, 0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x2009, + 0x73c0, 0x200b, 0x0000, 0x7073, 0x000f, 0x2009, 0x000f, 0x2011, + 0x3187, 0x1078, 0x415f, 0x007c, 0x7070, 0xa005, 0x00c0, 0x2b4a, + 0x2011, 0x3187, 0x1078, 0x40d1, 0x6043, 0x0020, 0x6043, 0x0000, + 0x6044, 0xd08c, 0x00c0, 0x2b46, 0x7003, 0x0001, 0x7083, 0x0000, + 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2b4a, 0x7077, 0x0000, + 0x0078, 0x2b4a, 0x007c, 0x7074, 0xa08a, 0x0003, 0x00c8, 0x2b54, + 0x1079, 0x2b57, 0x0078, 0x2b56, 0x1078, 0x12b7, 0x007c, 0x2b5a, + 0x2ba9, 0x2c33, 0x0f7e, 0x7077, 0x0001, 0x20e1, 0xa000, 0x20e1, + 0x8700, 0x1078, 0x1bcc, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, + 0x7200, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, + 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, + 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, + 0x0000, 0x2079, 0x720c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, + 0x6d05, 0x20a1, 0x720e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x7212, + 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7200, 0x20a1, 0x020b, + 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x1078, + 0x31b2, 0x0f7f, 0x707b, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, + 0x007c, 0x0d7e, 0x7078, 0x707b, 0x0000, 0xa025, 0x0040, 0x2c1d, + 0x6020, 0xd0b4, 0x00c0, 0x2c1b, 0x7184, 0x81ff, 0x0040, 0x2c04, + 0xa486, 0x000c, 0x00c0, 0x2c0f, 0xa480, 0x0018, 0x8004, 0x20a8, + 0x2011, 0x7280, 0x2019, 0x7200, 0x220c, 0x2304, 0xa106, 0x00c0, + 0x2bdb, 0x8210, 0x8318, 0x00f0, 0x2bc4, 0x6043, 0x0004, 0x608b, + 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7077, 0x0002, 0x7083, + 0x0002, 0x0078, 0x2c1b, 0x2069, 0x7280, 0x6930, 0xa18e, 0x1101, + 0x00c0, 0x2c0f, 0x6834, 0xa005, 0x00c0, 0x2c0f, 0x6900, 0xa18c, + 0x00ff, 0x00c0, 0x2bef, 0x6804, 0xa005, 0x0040, 0x2c04, 0x2011, + 0x728e, 0x2019, 0x6d05, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, + 0x0048, 0x2c02, 0x00c0, 0x2c0f, 0x8210, 0x8318, 0x00f0, 0x2bf5, + 0x0078, 0x2c0f, 0x7087, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x2099, 0x7280, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, + 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2c1b, 0x60c3, + 0x000c, 0x1078, 0x31b2, 0x0d7f, 0x007c, 0x6020, 0xd0b4, 0x00c0, + 0x2c1b, 0x60c3, 0x000c, 0x2011, 0x6f1a, 0x2013, 0x0000, 0x707b, + 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, + 0x4fdc, 0x0078, 0x2c1b, 0x007c, 0x7080, 0xa08a, 0x001d, 0x00c8, + 0x2c3d, 0x1079, 0x2c40, 0x0078, 0x2c3f, 0x1078, 0x12b7, 0x007c, + 0x2c64, 0x2c73, 0x2ca6, 0x2cbb, 0x2ced, 0x2d17, 0x2d49, 0x2d73, + 0x2da5, 0x2dcb, 0x2e1a, 0x2e3c, 0x2e60, 0x2e76, 0x2e9c, 0x2eaf, + 0x2eb8, 0x2ed1, 0x2f01, 0x2f2b, 0x2f5b, 0x2f85, 0x2fce, 0x3003, + 0x3025, 0x3063, 0x3087, 0x30a0, 0x30ad, 0x7003, 0x0007, 0x6004, + 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, + 0x6043, 0x0002, 0x7083, 0x0001, 0x2009, 0x07d0, 0x2011, 0x318e, + 0x1078, 0x40c4, 0x007c, 0x0f7e, 0x7078, 0xa086, 0x0014, 0x00c0, + 0x2ca4, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2ca4, 0x2079, + 0x7280, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2ca2, 0x7834, 0xa005, + 0x00c0, 0x2ca2, 0x7a38, 0xd2fc, 0x0040, 0x2c98, 0x70a4, 0xa005, + 0x00c0, 0x2c98, 0x2019, 0x002a, 0x1078, 0x202f, 0x70a7, 0x0001, + 0x2011, 0x318e, 0x1078, 0x40d1, 0x7083, 0x0010, 0x1078, 0x2eb8, + 0x0078, 0x2ca4, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0003, + 0x6043, 0x0004, 0x1078, 0x321b, 0x20a3, 0x1102, 0x20a3, 0x0000, + 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x2cb2, 0x60c3, 0x0014, + 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x2ceb, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0014, 0x00c0, 0x2ce7, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2ce7, 0x7834, + 0xa005, 0x00c0, 0x2ce7, 0x7a38, 0xd2fc, 0x0040, 0x2ce1, 0x70a4, + 0xa005, 0x00c0, 0x2ce1, 0x2019, 0x002a, 0x1078, 0x202f, 0x70a7, + 0x0001, 0x7083, 0x0004, 0x1078, 0x2ced, 0x0078, 0x2ceb, 0x7083, + 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, + 0x321b, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x728e, + 0x706c, 0xa005, 0x00c0, 0x2d09, 0x714c, 0xa186, 0xffff, 0x0040, + 0x2d09, 0x1078, 0x3152, 0x0040, 0x2d09, 0x2019, 0x002a, 0x1078, + 0x202f, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31b2, 0x007c, 0x0f7e, + 0x7078, 0xa005, 0x0040, 0x2d47, 0x2011, 0x318e, 0x1078, 0x40d1, + 0xa086, 0x0014, 0x00c0, 0x2d43, 0x2079, 0x7280, 0x7a30, 0xa296, + 0x1103, 0x00c0, 0x2d43, 0x7834, 0xa005, 0x00c0, 0x2d43, 0x7a38, + 0xd2fc, 0x0040, 0x2d3d, 0x70a4, 0xa005, 0x00c0, 0x2d3d, 0x2019, + 0x002a, 0x1078, 0x202f, 0x70a7, 0x0001, 0x7083, 0x0006, 0x1078, + 0x2d49, 0x0078, 0x2d47, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, + 0x007c, 0x7083, 0x0007, 0x1078, 0x321b, 0x20a3, 0x1104, 0x20a3, + 0x0000, 0x3430, 0x2011, 0x728e, 0x706c, 0xa005, 0x00c0, 0x2d65, + 0x7150, 0xa186, 0xffff, 0x0040, 0x2d65, 0xa180, 0x2091, 0x200c, + 0xa18c, 0xff00, 0x810f, 0x1078, 0x3152, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2fbf, - 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, 0x00c0, 0x2fbd, - 0x2079, 0x7380, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2fbd, 0x7834, - 0xa005, 0x00c0, 0x2fbd, 0x7a38, 0xd2fc, 0x0040, 0x2fb7, 0x709c, - 0xa005, 0x00c0, 0x2fb7, 0x1078, 0x32a9, 0x709f, 0x0001, 0x707b, - 0x0014, 0x1078, 0x2fc1, 0x0078, 0x2fbf, 0x7073, 0x0000, 0x0f7f, - 0x007c, 0x707b, 0x0015, 0x1078, 0x3286, 0x20a3, 0x1104, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x738e, 0x7064, 0xa006, 0x00c0, 0x2fdd, - 0x7150, 0xa186, 0xffff, 0x0040, 0x2fdd, 0xa180, 0x2207, 0x200c, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x31b4, 0x20a9, 0x0008, 0x2298, + 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x2da3, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0014, 0x00c0, 0x2d9f, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2d9f, 0x7834, + 0xa005, 0x00c0, 0x2d9f, 0x7a38, 0xd2fc, 0x0040, 0x2d99, 0x70a4, + 0xa005, 0x00c0, 0x2d99, 0x2019, 0x002a, 0x1078, 0x202f, 0x70a7, + 0x0001, 0x7083, 0x0008, 0x1078, 0x2da5, 0x0078, 0x2da3, 0x7083, + 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0009, 0x1078, + 0x321b, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x706c, 0xa005, + 0x00c0, 0x2db8, 0x1078, 0x30bc, 0x0040, 0x2dc8, 0x0078, 0x2dc2, + 0x20a9, 0x0008, 0x2099, 0x728e, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31b2, 0x0078, 0x2dca, + 0x1078, 0x2c5d, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x2e18, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0014, 0x00c0, 0x2e14, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x2e14, 0x7834, + 0x2011, 0x0100, 0xa21e, 0x00c0, 0x2dfb, 0x7a38, 0xd2fc, 0x0040, + 0x2df3, 0x70a4, 0xa005, 0x00c0, 0x2df3, 0x2019, 0x002a, 0x1078, + 0x202f, 0x70a7, 0x0001, 0x707f, 0x0001, 0x7083, 0x000a, 0x1078, + 0x2e1a, 0x0078, 0x2e18, 0xa005, 0x00c0, 0x2e14, 0x7a38, 0xd2fc, + 0x0040, 0x2e0c, 0x70a4, 0xa005, 0x00c0, 0x2e0c, 0x2019, 0x002a, + 0x1078, 0x202f, 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083, 0x000e, + 0x1078, 0x2e9c, 0x0078, 0x2e18, 0x7083, 0x0002, 0x707b, 0x0000, + 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011, 0x720e, 0x22a0, 0x20a9, + 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, + 0x41a4, 0x1078, 0x321b, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x6030, + 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, + 0x0084, 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, + 0x2e5e, 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0084, 0x00c0, + 0x2e5a, 0x2079, 0x7280, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x2e5a, + 0x7834, 0xa005, 0x00c0, 0x2e5a, 0x7083, 0x000c, 0x1078, 0x2e60, + 0x0078, 0x2e5e, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, + 0x7083, 0x000d, 0x1078, 0x321b, 0x20a3, 0x1107, 0x20a3, 0x0000, + 0x2099, 0x728e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x0084, 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, + 0xa005, 0x0040, 0x2e9a, 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, + 0x0084, 0x00c0, 0x2e96, 0x2079, 0x7280, 0x7a30, 0xa296, 0x1107, + 0x00c0, 0x2e96, 0x7834, 0xa005, 0x00c0, 0x2e96, 0x1078, 0x320d, + 0x7083, 0x000e, 0x1078, 0x2e9c, 0x0078, 0x2e9a, 0x7083, 0x0002, + 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x000f, 0x707b, 0x0000, + 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, + 0x2009, 0x07d0, 0x2011, 0x318e, 0x1078, 0x40c4, 0x007c, 0x7078, + 0xa005, 0x0040, 0x2eb7, 0x2011, 0x318e, 0x1078, 0x40d1, 0x007c, + 0x7083, 0x0011, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7280, + 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, + 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x31b2, + 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x2eff, 0x2011, 0x318e, + 0x1078, 0x40d1, 0xa086, 0x0014, 0x00c0, 0x2efd, 0x2079, 0x7280, + 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2efd, 0x7834, 0xa005, 0x00c0, + 0x2efd, 0x7a38, 0xd2fc, 0x0040, 0x2ef7, 0x70a4, 0xa005, 0x00c0, + 0x2ef7, 0x2019, 0x002a, 0x1078, 0x202f, 0x70a7, 0x0001, 0x7083, + 0x0012, 0x1078, 0x2f01, 0x0078, 0x2eff, 0x707b, 0x0000, 0x0f7f, + 0x007c, 0x7083, 0x0013, 0x1078, 0x3227, 0x20a3, 0x1103, 0x20a3, + 0x0000, 0x3430, 0x2011, 0x728e, 0x706c, 0xa005, 0x00c0, 0x2f1d, + 0x714c, 0xa186, 0xffff, 0x0040, 0x2f1d, 0x1078, 0x3152, 0x0040, + 0x2f1d, 0x2019, 0x002a, 0x1078, 0x202f, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x302e, - 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0014, 0x00c0, 0x302c, - 0x2079, 0x7380, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x302c, 0x7834, - 0x2011, 0x0100, 0xa21e, 0x00c0, 0x3015, 0x7a38, 0xd2fc, 0x0040, - 0x3011, 0x709c, 0xa005, 0x00c0, 0x3011, 0x1078, 0x32a9, 0x709f, - 0x0001, 0x7077, 0x0001, 0x0078, 0x3026, 0xa005, 0x00c0, 0x302c, - 0x7a38, 0xd2fc, 0x0040, 0x3024, 0x709c, 0xa005, 0x00c0, 0x3024, - 0x1078, 0x32a9, 0x709f, 0x0001, 0x7077, 0x0000, 0x707b, 0x0016, - 0x1078, 0x3030, 0x0078, 0x302e, 0x7073, 0x0000, 0x0f7f, 0x007c, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, - 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0x738e, 0x7074, 0xa005, - 0x0040, 0x3046, 0x707b, 0x0017, 0x0078, 0x3048, 0x707b, 0x001b, - 0x7064, 0xa005, 0x00c0, 0x3052, 0x1078, 0x311e, 0x0040, 0x3062, - 0x0078, 0x305c, 0x20a9, 0x0008, 0x2099, 0x738e, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x3210, - 0x0078, 0x3064, 0x1078, 0x2cd7, 0x007c, 0x0f7e, 0x7070, 0xa005, - 0x0040, 0x3085, 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0084, - 0x00c0, 0x3083, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1106, 0x00c0, - 0x3083, 0x7834, 0xa005, 0x00c0, 0x3083, 0x707b, 0x0018, 0x1078, - 0x3087, 0x0078, 0x3085, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, - 0x0019, 0x1078, 0x3286, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, - 0x2099, 0x738e, 0x2039, 0x730e, 0x27a0, 0x20a9, 0x0040, 0x53a3, - 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, - 0x00ff, 0x8007, 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, - 0x730e, 0x2414, 0xa38c, 0x0001, 0x0040, 0x30b2, 0xa294, 0xff00, - 0x0078, 0x30b5, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, - 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0084, 0x1078, 0x3210, 0x007c, 0x0f7e, 0x7070, 0xa005, - 0x0040, 0x30e7, 0x2011, 0x31f0, 0x1078, 0x4187, 0xa086, 0x0084, - 0x00c0, 0x30e5, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1107, 0x00c0, - 0x30e5, 0x7834, 0xa005, 0x00c0, 0x30e5, 0x1078, 0x326c, 0x707b, - 0x001a, 0x1078, 0x30e9, 0x0078, 0x30e7, 0x7073, 0x0000, 0x0f7f, - 0x007c, 0x707b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, - 0x7380, 0x20a1, 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, 0x0007, - 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078, - 0x3210, 0x007c, 0x7070, 0xa005, 0x0040, 0x310e, 0x2011, 0x31f0, - 0x1078, 0x4187, 0x707b, 0x001c, 0x1078, 0x310f, 0x007c, 0x7073, - 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009, - 0x07d0, 0x2011, 0x31f0, 0x1078, 0x417a, 0x007c, 0x087e, 0x097e, - 0x2029, 0x6f52, 0x252c, 0x20a9, 0x0008, 0x2041, 0x730e, 0x28a0, - 0x2099, 0x738e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, - 0x0040, 0x3134, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, - 0xffff, 0x00c0, 0x3146, 0xd5d4, 0x0040, 0x3141, 0x8210, 0x0078, - 0x3142, 0x8211, 0x00f0, 0x3134, 0x0078, 0x31ab, 0x82ff, 0x00c0, - 0x3158, 0xd5d4, 0x0040, 0x3152, 0xa1a6, 0x3fff, 0x0040, 0x313e, - 0x0078, 0x3156, 0xa1a6, 0x3fff, 0x0040, 0x31ab, 0xa18d, 0xc000, - 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040, 0x3161, 0x2019, - 0x0010, 0x2120, 0xd5d4, 0x0040, 0x3168, 0x8423, 0x0078, 0x3169, - 0x8424, 0x00c8, 0x3176, 0xd5d4, 0x0040, 0x3171, 0x8319, 0x0078, - 0x3172, 0x8318, 0x00f0, 0x3162, 0x0078, 0x31ab, 0x23a8, 0x2021, - 0x0001, 0x8426, 0x8425, 0x00f0, 0x317a, 0x2328, 0x8529, 0xa2be, - 0x0007, 0x0040, 0x318e, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, - 0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x318a, 0x754e, 0xa5c8, - 0x2207, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, - 0x2018, 0x2304, 0xa405, 0x201a, 0x7067, 0x0001, 0x26a0, 0x2898, - 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, - 0x0001, 0x0078, 0x31b1, 0xa006, 0x0078, 0x31b1, 0xa006, 0x1078, - 0x1288, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001, - 0x0007, 0xa39a, 0x0010, 0x0048, 0x31c1, 0x8420, 0x8001, 0x0078, - 0x31b9, 0x2118, 0x84ff, 0x0040, 0x31ca, 0xa39a, 0x0010, 0x8421, - 0x00c0, 0x31c5, 0x2021, 0x0001, 0x83ff, 0x0040, 0x31d3, 0x8423, - 0x8319, 0x00c0, 0x31cf, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x31e8, - 0xa405, 0x203a, 0x714e, 0xa1a0, 0x2207, 0x242c, 0xa5ac, 0x00ff, - 0x6532, 0x60e7, 0x0000, 0x65ea, 0x7067, 0x0001, 0xa084, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x6f00, 0x706b, 0x0000, 0x0e7f, 0x007c, - 0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x4f8e, - 0x7004, 0xa084, 0x4000, 0x0040, 0x3201, 0x7003, 0x1000, 0x7003, - 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x6f1e, 0x2073, 0x0000, - 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c, - 0x127e, 0x2091, 0x8000, 0x2011, 0x70c0, 0x2013, 0x0000, 0x7073, - 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x1078, 0x4f85, 0x2009, 0x07d0, 0x2011, 0x31f0, 0x1078, 0x4217, - 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009, - 0x00f7, 0x1078, 0x3292, 0x2061, 0x70c9, 0x601b, 0x0000, 0x601f, - 0x0000, 0x2061, 0x6f00, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, - 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x324e, 0x1078, - 0x417a, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, 0x4f8e, 0x2071, - 0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x3262, 0x7003, 0x1000, - 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x1f8a, 0x1078, 0x3229, - 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x74c0, - 0x2099, 0x738e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, - 0x3272, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7300, - 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x20a9, 0x000c, - 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, - 0x6f2a, 0x2004, 0xa005, 0x00c0, 0x32a3, 0x6030, 0xa084, 0x00ff, - 0xa105, 0x0078, 0x32a5, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, - 0x007c, 0x017e, 0x047e, 0x2001, 0x6f52, 0x2004, 0xd0a4, 0x0040, - 0x32bc, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0x6dc4, 0x2001, - 0x6f0c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2186, - 0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x007d, 0x2009, 0x7020, - 0xa006, 0x200a, 0x8108, 0x00f0, 0x32c9, 0x157f, 0x007c, 0x0d7e, - 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x6f51, 0xa006, 0x6002, - 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2207, 0x231c, - 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, - 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, - 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, - 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, - 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x604a, - 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, - 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, - 0x8000, 0x6944, 0xa1b4, 0x00ff, 0xa682, 0x0010, 0x00c8, 0x33bb, - 0xa18c, 0xff00, 0x810f, 0xa182, 0x007e, 0x00c8, 0x33c1, 0x2001, - 0x6f0c, 0x2004, 0xa084, 0x0003, 0x00c0, 0x33a4, 0xa188, 0x7020, - 0x2104, 0xa065, 0x0040, 0x339a, 0x6004, 0xa084, 0x00ff, 0xa08e, - 0x0006, 0x00c0, 0x33a0, 0x6078, 0xa00d, 0x0040, 0x3345, 0xa680, - 0x6e58, 0x2004, 0xa10c, 0x00c0, 0x3394, 0x607c, 0xa00d, 0x0040, - 0x3361, 0xa680, 0x6e58, 0x2004, 0xa10c, 0x0040, 0x3361, 0x694c, - 0xd1fc, 0x00c0, 0x3357, 0x1078, 0x3454, 0x0078, 0x338f, 0x1078, - 0x3425, 0x694c, 0xd1ec, 0x00c0, 0x338f, 0x1078, 0x356d, 0x0078, - 0x338f, 0x694c, 0xa184, 0xa000, 0x0040, 0x337f, 0xd1ec, 0x0040, - 0x3378, 0xd1fc, 0x0040, 0x3370, 0x1078, 0x3584, 0x0078, 0x337b, - 0xa680, 0x6e58, 0x200c, 0x607c, 0xa105, 0x607e, 0x0078, 0x337f, - 0xd1fc, 0x0040, 0x337f, 0x1078, 0x3425, 0x0078, 0x338f, 0x6050, - 0xa00d, 0x0040, 0x338a, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, - 0x0078, 0x338f, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, - 0x445d, 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, - 0x0078, 0x33c5, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x33c5, - 0xa082, 0x0006, 0x0048, 0x333b, 0x2009, 0x6f0c, 0x210c, 0xd18c, - 0x0040, 0x33ae, 0x2001, 0x0004, 0x0078, 0x33b7, 0xd184, 0x0040, - 0x33b5, 0x2001, 0x0004, 0x0078, 0x33b7, 0x2001, 0x0029, 0x2009, - 0x0000, 0x0078, 0x33c5, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, - 0x33c5, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f, 0x007c, - 0x6944, 0xa1b4, 0x00ff, 0xa682, 0x0010, 0x00c8, 0x340a, 0xa18c, - 0xff00, 0x810f, 0xa182, 0x007e, 0x00c8, 0x33fa, 0xa188, 0x7020, - 0x2104, 0xa065, 0x0040, 0x33fa, 0x6004, 0xa084, 0x00ff, 0xa08e, - 0x0006, 0x00c0, 0x3400, 0x684c, 0xd0ec, 0x0040, 0x33ed, 0x1078, - 0x3584, 0x1078, 0x3425, 0x0078, 0x33f5, 0x1078, 0x3425, 0x684c, - 0xd0fc, 0x0040, 0x33f5, 0x1078, 0x356d, 0x1078, 0x3598, 0xa006, - 0x0078, 0x340e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x340e, - 0xa082, 0x0006, 0x0048, 0x33e3, 0x2001, 0x0029, 0x2009, 0x0000, - 0x0078, 0x340e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, - 0x127e, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0040, 0x341e, 0x2d00, - 0x200a, 0x6803, 0x0000, 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, - 0x604e, 0x6803, 0x0000, 0x0078, 0x341c, 0x127e, 0x2091, 0x8000, - 0x604c, 0xa005, 0x0040, 0x3431, 0x6802, 0x2d00, 0x604e, 0x127f, - 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x342f, - 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0040, 0x3446, 0x6800, - 0xa005, 0x00c0, 0x3444, 0x6052, 0x604e, 0xad05, 0x127f, 0x007c, - 0x604c, 0xa06d, 0x0040, 0x3453, 0x6800, 0xa005, 0x00c0, 0x3451, - 0x6052, 0x604e, 0xad05, 0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, - 0x0040, 0x345e, 0x2d00, 0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, - 0x6082, 0x0078, 0x345d, 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, - 0x6218, 0x2260, 0x6200, 0xa005, 0x0040, 0x3471, 0xc285, 0x0078, - 0x3472, 0xc284, 0x6202, 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, - 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0xff00, - 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, - 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, - 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x007e, 0x0048, - 0x349d, 0xa085, 0x0001, 0x0078, 0x34b1, 0xa190, 0x7020, 0x2204, - 0xa065, 0x00c0, 0x34b0, 0x017e, 0x0d7e, 0x1078, 0x12c7, 0x2d60, - 0x0d7f, 0x017f, 0x0040, 0x3499, 0x2c00, 0x2012, 0x1078, 0x32cf, - 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, 0x007e, 0x0048, 0x34bc, - 0xa085, 0x0001, 0x0078, 0x34c9, 0x0d7e, 0xa190, 0x7020, 0x2204, - 0xa06d, 0x0040, 0x34c7, 0x2013, 0x0000, 0x1078, 0x12fb, 0x0d7f, - 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, 0x007e, 0x0048, 0x34d4, - 0xa085, 0x0001, 0x0078, 0x34db, 0xa188, 0x7020, 0x2104, 0xa065, - 0x0040, 0x34d0, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e, 0x137e, - 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, - 0x2069, 0x738e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, - 0x0048, 0x34f3, 0x603a, 0x6814, 0x6066, 0x2099, 0x7396, 0xac88, - 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x739a, 0xac88, - 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x73ae, 0x6808, - 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076, 0xa182, - 0x0211, 0x00c8, 0x3517, 0x2009, 0x0008, 0x0078, 0x3541, 0xa182, - 0x0259, 0x00c8, 0x351f, 0x2009, 0x0007, 0x0078, 0x3541, 0xa182, - 0x02c1, 0x00c8, 0x3527, 0x2009, 0x0006, 0x0078, 0x3541, 0xa182, - 0x0349, 0x00c8, 0x352f, 0x2009, 0x0005, 0x0078, 0x3541, 0xa182, - 0x0421, 0x00c8, 0x3537, 0x2009, 0x0004, 0x0078, 0x3541, 0xa182, - 0x0581, 0x00c8, 0x353f, 0x2009, 0x0003, 0x0078, 0x3541, 0x2009, - 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x0e7e, - 0x2071, 0x738d, 0x2e04, 0x6896, 0x2071, 0x738e, 0x7004, 0x689a, - 0x701c, 0x689e, 0x0e7f, 0x007c, 0x2001, 0x6e58, 0xa600, 0x2004, - 0x127e, 0x2091, 0x8000, 0x6178, 0xa10d, 0x617a, 0x127f, 0x007c, - 0x2001, 0x6e58, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, - 0x6178, 0xa10c, 0x617a, 0x127f, 0x007c, 0x2001, 0x6e58, 0xa600, - 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, 0x617c, 0xa10c, 0x617e, - 0x127f, 0x0078, 0x357d, 0x1078, 0x3410, 0x1078, 0x35de, 0x00c0, - 0x357b, 0x1078, 0x3598, 0x007c, 0x2001, 0x6e58, 0xa600, 0x2004, - 0x127e, 0x2091, 0x8000, 0x617c, 0xa10d, 0x617e, 0x127f, 0x0078, - 0x3593, 0x1078, 0x3454, 0x1078, 0x35a2, 0x00c0, 0x3591, 0x007c, - 0x127e, 0x2091, 0x8000, 0x1078, 0x445d, 0x127f, 0x007c, 0xa01e, - 0x0078, 0x35a4, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, - 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x35c4, 0x8dff, 0x0040, - 0x35d9, 0x83ff, 0x0040, 0x35bc, 0x6844, 0xa084, 0x00ff, 0xa606, - 0x0040, 0x35c9, 0x0078, 0x35c4, 0x683c, 0xa406, 0x00c0, 0x35c4, - 0x6840, 0xa506, 0x0040, 0x35c9, 0x2d08, 0x6800, 0x2068, 0x0078, - 0x35ae, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x35d1, 0x624e, 0x0078, - 0x35d4, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x35d9, 0x6152, - 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x35e0, 0x2019, 0x0001, - 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x360e, 0x83ff, 0x0040, - 0x35f1, 0x6844, 0xa084, 0x00ff, 0xa606, 0x0040, 0x35fe, 0x0078, - 0x35f9, 0x683c, 0xa406, 0x00c0, 0x35f9, 0x6840, 0xa506, 0x0040, - 0x35fe, 0x2d08, 0x6800, 0x2068, 0x0078, 0x35e3, 0x6a00, 0x6080, - 0xad06, 0x00c0, 0x3606, 0x6282, 0x0078, 0x3609, 0xa180, 0x0000, - 0x2202, 0x82ff, 0x00c0, 0x360e, 0x6186, 0x8dff, 0x007c, 0x2001, - 0x6e58, 0xa600, 0x2004, 0x6178, 0xa10c, 0x0040, 0x3619, 0x2011, - 0x0001, 0x617c, 0xa10c, 0x0040, 0x361f, 0xa295, 0x0002, 0x007c, - 0x1078, 0x366b, 0x0040, 0x3628, 0x1078, 0x62c8, 0x0078, 0x362a, - 0xa085, 0x0001, 0x007c, 0x1078, 0x366b, 0x0040, 0x3633, 0x1078, - 0x6257, 0x0078, 0x3635, 0xa085, 0x0001, 0x007c, 0x1078, 0x366b, - 0x0040, 0x363e, 0x1078, 0x629d, 0x0078, 0x3640, 0xa085, 0x0001, - 0x007c, 0x1078, 0x366b, 0x0040, 0x3649, 0x1078, 0x6273, 0x0078, - 0x364b, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, - 0x8000, 0x6080, 0xa06d, 0x0040, 0x3663, 0x6800, 0x007e, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x63d5, 0x1078, 0x3720, - 0x007f, 0x0078, 0x3652, 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, - 0x007f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x2079, - 0x6f51, 0x7804, 0xd0a4, 0x0040, 0x3697, 0x157e, 0x0c7e, 0x20a9, - 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34cb, 0x00c0, 0x368b, - 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x368b, - 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0, 0x367b, 0x0c7f, - 0x157f, 0x2009, 0x07d0, 0x2011, 0x3699, 0x1078, 0x4217, 0x0f7f, - 0x007c, 0x2011, 0x3699, 0x1078, 0x4187, 0x157e, 0x0c7e, 0x20a9, - 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34cb, 0x00c0, 0x36c5, - 0x6000, 0xd0ec, 0x0040, 0x36c5, 0x047e, 0x62a0, 0xa294, 0x00ff, - 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x6dc4, 0x6000, 0xc0e5, - 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x457b, 0x1078, 0x44be, - 0x2009, 0x0000, 0x1078, 0x6bfe, 0x047f, 0x017f, 0x8108, 0x00f0, - 0x36a3, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018, 0x2060, 0x6000, - 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x6fff, 0x7003, 0x0001, - 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, - 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020, - 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6fff, - 0x684c, 0xa005, 0x00c0, 0x36fb, 0x7028, 0xc085, 0x702a, 0xa085, - 0x0001, 0x0078, 0x371e, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, - 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, - 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, - 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, 0x7372, - 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x0e7f, 0x007c, - 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3771, 0x6804, 0xa00d, 0x0040, - 0x373f, 0x0d7e, 0x0e7e, 0x2071, 0x6f00, 0x027e, 0xa016, 0x702c, - 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x00c0, 0x3730, - 0x702e, 0x7098, 0xa200, 0x709a, 0x027f, 0x0e7f, 0x0d7f, 0x2071, - 0x6fff, 0x701c, 0xa005, 0x00c0, 0x3782, 0x0068, 0x3780, 0x2071, - 0x6f51, 0x7004, 0xd09c, 0x0040, 0x3780, 0x6934, 0xa186, 0x0103, - 0x00c0, 0x3793, 0x6948, 0x6844, 0xa105, 0x00c0, 0x3773, 0x2009, - 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3780, 0x7122, - 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, - 0x2071, 0x6f00, 0x702c, 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, - 0x709a, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0, 0x3780, - 0x6868, 0xa005, 0x00c0, 0x3780, 0x2009, 0x8020, 0x0078, 0x3759, - 0x2071, 0x6fff, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012, - 0x7018, 0xa06d, 0x711a, 0x0040, 0x3790, 0x6902, 0x0078, 0x3791, - 0x711e, 0x0078, 0x3771, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, - 0x37a1, 0xa186, 0x001e, 0x0040, 0x37a1, 0xa18e, 0x001f, 0x00c0, - 0x3780, 0x684c, 0xd0cc, 0x0040, 0x3780, 0x6850, 0xa084, 0x00ff, - 0xa086, 0x0001, 0x00c0, 0x3780, 0x2009, 0x8021, 0x0078, 0x3759, - 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, - 0x2001, 0x0000, 0x40a4, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, - 0x6fff, 0x7004, 0x0079, 0x37c4, 0x37cc, 0x37db, 0x386b, 0x386c, - 0x387c, 0x3882, 0x37cd, 0x3859, 0x007c, 0x127e, 0x2091, 0x8000, - 0x0068, 0x37da, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, - 0x7007, 0x0001, 0x127f, 0x701c, 0xa06d, 0x0040, 0x3858, 0x0e7e, - 0x2071, 0x6f51, 0x7004, 0xd09c, 0x0040, 0x383a, 0x6934, 0xa186, - 0x0103, 0x00c0, 0x3810, 0x6948, 0x6844, 0xa105, 0x00c0, 0x382d, - 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068, 0x380c, 0x2071, - 0x0000, 0x7018, 0xd084, 0x00c0, 0x380c, 0x7122, 0x683c, 0x7026, - 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x0e7f, - 0x1078, 0x38b5, 0x0078, 0x3858, 0x127f, 0x0e7f, 0x0078, 0x3858, - 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x381e, 0xa186, 0x001e, - 0x0040, 0x381e, 0xa18e, 0x001f, 0x00c0, 0x383a, 0x684c, 0xd0cc, - 0x0040, 0x383a, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, - 0x383a, 0x2009, 0x8021, 0x0078, 0x37f2, 0x6844, 0xa086, 0x0100, - 0x00c0, 0x383a, 0x6868, 0xa005, 0x00c0, 0x383a, 0x2009, 0x8020, - 0x0078, 0x37f2, 0x0e7f, 0x1078, 0x38c9, 0x0040, 0x3858, 0x700f, - 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x00c0, 0x384f, - 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x384f, 0x710e, 0x7007, - 0x0003, 0x1078, 0x38e9, 0x7050, 0xa086, 0x0100, 0x0040, 0x386c, - 0x007c, 0x701c, 0xa06d, 0x0040, 0x386a, 0x1078, 0x38c9, 0x0040, - 0x386a, 0x7007, 0x0003, 0x1078, 0x38e9, 0x7050, 0xa086, 0x0100, - 0x0040, 0x386c, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100, 0x00c0, - 0x3875, 0x7007, 0x0004, 0x0078, 0x387c, 0xa086, 0x0200, 0x00c0, - 0x387b, 0x7007, 0x0005, 0x007c, 0x1078, 0x3883, 0x7006, 0x1078, - 0x38b5, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, - 0x3890, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0078, 0x389a, - 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x389a, 0x7070, 0xa081, - 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e, 0x00c0, 0x38ae, - 0x127e, 0x2091, 0x8000, 0x0068, 0x38b1, 0x2001, 0x000d, 0x2102, - 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c, 0x2001, 0x0007, - 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, - 0x38c8, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, - 0x701e, 0xa005, 0x00c0, 0x38c5, 0x701a, 0x127f, 0x1078, 0x12fb, - 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x38d8, - 0x2304, 0x230c, 0xa10e, 0x0040, 0x38d8, 0xa006, 0x0078, 0x38e8, - 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x38e2, 0x2300, 0xa005, - 0x0078, 0x38e8, 0x0048, 0x38e7, 0xa302, 0x0078, 0x38e8, 0x8002, - 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, - 0x127e, 0x2091, 0x8000, 0x2009, 0x70d9, 0x2104, 0xc08d, 0x200a, - 0x127f, 0x1078, 0x134c, 0x007c, 0x2071, 0x6fcd, 0x7003, 0x0000, - 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, - 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, - 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, - 0x2071, 0x6fcd, 0x6848, 0xa005, 0x00c0, 0x3925, 0x7028, 0xc085, - 0x702a, 0xa085, 0x0001, 0x0078, 0x394a, 0x6a50, 0x7236, 0x6b54, - 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, - 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, - 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, - 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, - 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0x6fcd, 0x7004, - 0x1079, 0x39aa, 0x700c, 0x0079, 0x3955, 0x395a, 0x394f, 0x394f, - 0x394f, 0x394f, 0x007c, 0x700c, 0x0079, 0x395e, 0x3963, 0x39a8, - 0x39a8, 0x39a9, 0x39a9, 0x7830, 0x7930, 0xa106, 0x0040, 0x396d, - 0x7830, 0x7930, 0xa106, 0x00c0, 0x3993, 0x7030, 0xa10a, 0x0040, - 0x3993, 0x00c8, 0x3975, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, - 0x3994, 0x1078, 0x12c7, 0x0040, 0x3993, 0x2d00, 0x705a, 0x7063, - 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, - 0x8000, 0x2009, 0x70d9, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, - 0x127f, 0x1078, 0x134c, 0x007c, 0x1078, 0x12c7, 0x0040, 0x3993, - 0x2d00, 0x705a, 0x1078, 0x12c7, 0x00c0, 0x39a0, 0x0078, 0x397f, - 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x3983, - 0x007c, 0x007c, 0x39bb, 0x39bc, 0x39f3, 0x39f4, 0x39a8, 0x3a2a, - 0x3a2f, 0x3a66, 0x3a67, 0x3a82, 0x3a83, 0x3a84, 0x3a85, 0x3a86, - 0x3a87, 0x3af0, 0x3b1a, 0x007c, 0x700c, 0x0079, 0x39bf, 0x39c4, - 0x39c7, 0x39d7, 0x39f2, 0x39f2, 0x1078, 0x395b, 0x007c, 0x127e, - 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x3df9, 0x0040, 0x39d4, - 0x2091, 0x8000, 0x1078, 0x395b, 0x0d7f, 0x0078, 0x39e0, 0x127e, - 0x8001, 0x700e, 0x1078, 0x3df9, 0x7058, 0x2068, 0x7084, 0x705a, - 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, - 0x0020, 0x00c8, 0x39ef, 0x1079, 0x3a0a, 0x127f, 0x007c, 0x127f, - 0x1078, 0x3a88, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0x6fcd, - 0x700c, 0x0079, 0x39fb, 0x3a00, 0x3a00, 0x3a00, 0x3a02, 0x3a06, - 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3a08, 0x700f, 0x0002, - 0x0e7f, 0x007c, 0x3a88, 0x3a88, 0x3aa4, 0x3a88, 0x3b8f, 0x3a88, - 0x3a88, 0x3a88, 0x3a88, 0x3a88, 0x3aa4, 0x3bd4, 0x3c1d, 0x3c75, - 0x3c88, 0x3a88, 0x3a88, 0x3ac0, 0x3aa4, 0x3a88, 0x3a88, 0x3ad6, - 0x3d0f, 0x3d2c, 0x3a88, 0x3ac0, 0x3a88, 0x3a88, 0x3a88, 0x3a88, - 0x3ad6, 0x3d2c, 0x7020, 0x2068, 0x1078, 0x12fb, 0x007c, 0x700c, - 0x0079, 0x3a32, 0x3a37, 0x3a3a, 0x3a4a, 0x3a65, 0x3a65, 0x1078, - 0x395b, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, - 0x3df9, 0x0040, 0x3a47, 0x2091, 0x8000, 0x1078, 0x395b, 0x0d7f, - 0x0078, 0x3a53, 0x127e, 0x8001, 0x700e, 0x1078, 0x3df9, 0x7058, - 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, - 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3a62, 0x1079, 0x3a68, - 0x127f, 0x007c, 0x127f, 0x1078, 0x3a88, 0x007c, 0x007c, 0x007c, - 0x3a88, 0x3aa4, 0x3b79, 0x3a88, 0x3aa4, 0x3a88, 0x3aa4, 0x3aa4, - 0x3a88, 0x3aa4, 0x3b79, 0x3aa4, 0x3aa4, 0x3aa4, 0x3aa4, 0x3aa4, - 0x3a88, 0x3aa4, 0x3b79, 0x3a88, 0x3a88, 0x3aa4, 0x3a88, 0x3a88, - 0x3a88, 0x3aa4, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, - 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3720, 0x127f, 0x007c, 0x7007, 0x0001, - 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, - 0x1078, 0x3720, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3720, - 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, - 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3720, 0x127f, 0x007c, - 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3a96, 0x8001, 0x00c0, - 0x3acd, 0x7007, 0x0001, 0x0078, 0x3b56, 0x7007, 0x0006, 0x7012, - 0x2d00, 0x7016, 0x701a, 0x704b, 0x3b56, 0x007c, 0x2d00, 0x7016, - 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0x6ff8, - 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8, 0x3ab2, 0x6884, - 0xa08a, 0x0003, 0x00c8, 0x3ab2, 0xa080, 0x3b47, 0x2004, 0x70c6, - 0x7010, 0xa015, 0x0040, 0x3b3a, 0x1078, 0x12c7, 0x00c0, 0x3afb, - 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, - 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x3b0a, - 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, - 0x0040, 0x3b13, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, - 0x1078, 0x1332, 0x7090, 0xa08e, 0x0100, 0x0040, 0x3b2e, 0xa086, - 0x0200, 0x0040, 0x3b26, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, - 0x1078, 0x12fb, 0x7014, 0x2068, 0x0078, 0x3ab2, 0x7020, 0x2068, - 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, - 0x0078, 0x3af0, 0x7014, 0x2068, 0x7007, 0x0001, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x0040, 0x3d49, 0x0078, 0x3b56, 0x3b4a, - 0x3b4e, 0x3b52, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f, - 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006, 0x2009, 0x6f2a, - 0x210c, 0x81ff, 0x00c0, 0x3b73, 0x6838, 0xa084, 0x00ff, 0x683a, - 0x6853, 0x0000, 0x1078, 0x3316, 0x00c0, 0x3b67, 0x007c, 0x1078, - 0x37b0, 0x127e, 0x2091, 0x8000, 0x1078, 0x63d5, 0x1078, 0x3720, - 0x127f, 0x0078, 0x3b66, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, - 0x3b67, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a, 0x7010, - 0x8001, 0x7012, 0x0040, 0x3b88, 0x7007, 0x0006, 0x0078, 0x3b8e, + 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x2f59, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0014, 0x00c0, 0x2f57, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2f57, 0x7834, + 0xa005, 0x00c0, 0x2f57, 0x7a38, 0xd2fc, 0x0040, 0x2f51, 0x70a4, + 0xa005, 0x00c0, 0x2f51, 0x2019, 0x002a, 0x1078, 0x202f, 0x70a7, + 0x0001, 0x7083, 0x0014, 0x1078, 0x2f5b, 0x0078, 0x2f59, 0x707b, + 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0015, 0x1078, 0x3227, 0x20a3, + 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x728e, 0x706c, 0xa006, + 0x00c0, 0x2f77, 0x7150, 0xa186, 0xffff, 0x0040, 0x2f77, 0xa180, + 0x2091, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x3152, 0x20a9, + 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x60c3, 0x0014, 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, + 0x0040, 0x2fcc, 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0014, + 0x00c0, 0x2fca, 0x2079, 0x7280, 0x7a30, 0xa296, 0x1105, 0x00c0, + 0x2fca, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x2fb1, 0x7a38, + 0xd2fc, 0x0040, 0x2fad, 0x70a4, 0xa005, 0x00c0, 0x2fad, 0x2019, + 0x002a, 0x1078, 0x202f, 0x70a7, 0x0001, 0x707f, 0x0001, 0x0078, + 0x2fc4, 0xa005, 0x00c0, 0x2fca, 0x7a38, 0xd2fc, 0x0040, 0x2fc2, + 0x70a4, 0xa005, 0x00c0, 0x2fc2, 0x2019, 0x002a, 0x1078, 0x202f, + 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083, 0x0016, 0x1078, 0x2fce, + 0x0078, 0x2fcc, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x2099, 0x7280, 0x20a1, 0x020b, 0x20a9, 0x000e, + 0x53a6, 0x3430, 0x2011, 0x728e, 0x707c, 0xa005, 0x0040, 0x2fe4, + 0x7083, 0x0017, 0x0078, 0x2fe6, 0x7083, 0x001b, 0x706c, 0xa005, + 0x00c0, 0x2ff0, 0x1078, 0x30bc, 0x0040, 0x3000, 0x0078, 0x2ffa, + 0x20a9, 0x0008, 0x2099, 0x728e, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31b2, 0x0078, 0x3002, + 0x1078, 0x2c5d, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3023, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0084, 0x00c0, 0x3021, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x3021, 0x7834, + 0xa005, 0x00c0, 0x3021, 0x7083, 0x0018, 0x1078, 0x3025, 0x0078, + 0x3023, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0019, 0x1078, + 0x3227, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x728e, + 0x2039, 0x720e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514, + 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, + 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x720e, 0x2414, + 0xa38c, 0x0001, 0x0040, 0x3050, 0xa294, 0xff00, 0x0078, 0x3053, + 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, + 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, + 0x1078, 0x31b2, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3085, + 0x2011, 0x318e, 0x1078, 0x40d1, 0xa086, 0x0084, 0x00c0, 0x3083, + 0x2079, 0x7280, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x3083, 0x7834, + 0xa005, 0x00c0, 0x3083, 0x1078, 0x320d, 0x7083, 0x001a, 0x1078, + 0x3087, 0x0078, 0x3085, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, + 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7280, 0x20a1, + 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, + 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078, 0x31b2, 0x007c, + 0x7078, 0xa005, 0x0040, 0x30ac, 0x2011, 0x318e, 0x1078, 0x40d1, + 0x7083, 0x001c, 0x1078, 0x30ad, 0x007c, 0x707b, 0x0000, 0x608b, + 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009, 0x07d0, 0x2011, + 0x318e, 0x1078, 0x40c4, 0x007c, 0x087e, 0x097e, 0x2029, 0x6d52, + 0x252c, 0x20a9, 0x0008, 0x2041, 0x720e, 0x28a0, 0x2099, 0x728e, + 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x30d2, + 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, + 0x30e4, 0xd5d4, 0x0040, 0x30df, 0x8210, 0x0078, 0x30e0, 0x8211, + 0x00f0, 0x30d2, 0x0078, 0x3149, 0x82ff, 0x00c0, 0x30f6, 0xd5d4, + 0x0040, 0x30f0, 0xa1a6, 0x3fff, 0x0040, 0x30dc, 0x0078, 0x30f4, + 0xa1a6, 0x3fff, 0x0040, 0x3149, 0xa18d, 0xc000, 0x20a9, 0x0010, + 0x2019, 0x0001, 0xd5d4, 0x0040, 0x30ff, 0x2019, 0x0010, 0x2120, + 0xd5d4, 0x0040, 0x3106, 0x8423, 0x0078, 0x3107, 0x8424, 0x00c8, + 0x3114, 0xd5d4, 0x0040, 0x310f, 0x8319, 0x0078, 0x3110, 0x8318, + 0x00f0, 0x3100, 0x0078, 0x3149, 0x23a8, 0x2021, 0x0001, 0x8426, + 0x8425, 0x00f0, 0x3118, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, + 0x312c, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8, + 0xa5a8, 0x0010, 0x00f0, 0x3128, 0x754e, 0xa5c8, 0x2091, 0x292c, + 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, + 0xa405, 0x201a, 0x706f, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, + 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, + 0x314f, 0xa006, 0x0078, 0x314f, 0xa006, 0x1078, 0x12b7, 0x097f, + 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, + 0x0010, 0x0048, 0x315f, 0x8420, 0x8001, 0x0078, 0x3157, 0x2118, + 0x84ff, 0x0040, 0x3168, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x3163, + 0x2021, 0x0001, 0x83ff, 0x0040, 0x3171, 0x8423, 0x8319, 0x00c0, + 0x316d, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3186, 0xa405, 0x203a, + 0x714e, 0xa1a0, 0x2091, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, + 0x0000, 0x65ea, 0x706f, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, + 0x2071, 0x6d00, 0x7073, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, + 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x4fe5, 0x7004, 0xa084, + 0x4000, 0x0040, 0x319f, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, + 0x2091, 0x8000, 0x2071, 0x6d00, 0x7003, 0x0001, 0x2071, 0x6d20, + 0x2073, 0x0000, 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, + 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0x6f1a, 0x2013, + 0x0000, 0x707b, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, + 0x60a7, 0x9575, 0x1078, 0x4fdc, 0x2009, 0x07d0, 0x2011, 0x318e, + 0x1078, 0x415f, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, + 0x8000, 0x2009, 0x00f7, 0x1078, 0x3233, 0x2061, 0x6f23, 0x601b, + 0x0000, 0x601f, 0x0000, 0x2061, 0x6d00, 0x6003, 0x0001, 0x2061, + 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, + 0x31f0, 0x1078, 0x40c4, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, + 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, + 0x4fe5, 0x2071, 0x0140, 0xa084, 0x4000, 0x0040, 0x3203, 0x7003, + 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x1dc9, 0x1078, + 0x31cb, 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, + 0x73c0, 0x2099, 0x728e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, + 0x00f0, 0x3213, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, + 0x7200, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, + 0x9080, 0x20e1, 0x4000, 0x2099, 0x7280, 0x20a1, 0x020b, 0x20a9, + 0x000c, 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, + 0x2001, 0x6d2c, 0x2004, 0xa005, 0x00c0, 0x3244, 0x6030, 0xa084, + 0x00ff, 0xa105, 0x0078, 0x3246, 0xa185, 0x00f7, 0x604a, 0x007f, + 0x0c7f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009, 0x6e00, 0xa006, + 0x200a, 0x8108, 0x00f0, 0x3250, 0x157f, 0x007c, 0x0d7e, 0x037e, + 0x157e, 0x137e, 0x147e, 0x2069, 0x6d51, 0xa006, 0x6002, 0x6007, + 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2091, 0x231c, 0xa39c, + 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, + 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, + 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, + 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, + 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x604a, 0x6810, + 0x603a, 0x680c, 0x6046, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f, + 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0xa1b4, 0x00ff, 0xa682, + 0x0010, 0x00c8, 0x3337, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, + 0x00c8, 0x333d, 0xa188, 0x6e00, 0x2104, 0xa065, 0x0040, 0x3316, + 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x331c, 0x6078, + 0xa00d, 0x0040, 0x32c1, 0xa680, 0x6c84, 0x2004, 0xa10c, 0x00c0, + 0x3310, 0x607c, 0xa00d, 0x0040, 0x32dd, 0xa680, 0x6c84, 0x2004, + 0xa10c, 0x0040, 0x32dd, 0x694c, 0xd1fc, 0x00c0, 0x32d3, 0x1078, + 0x33d0, 0x0078, 0x330b, 0x1078, 0x33a1, 0x694c, 0xd1ec, 0x00c0, + 0x330b, 0x1078, 0x34f0, 0x0078, 0x330b, 0x694c, 0xa184, 0xa000, + 0x0040, 0x32fb, 0xd1ec, 0x0040, 0x32f4, 0xd1fc, 0x0040, 0x32ec, + 0x1078, 0x3507, 0x0078, 0x32f7, 0xa680, 0x6c84, 0x200c, 0x607c, + 0xa105, 0x607e, 0x0078, 0x32fb, 0xd1fc, 0x0040, 0x32fb, 0x1078, + 0x33a1, 0x0078, 0x330b, 0x6050, 0xa00d, 0x0040, 0x3306, 0x2d00, + 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x330b, 0x2d00, 0x6052, + 0x604e, 0x6803, 0x0000, 0x1078, 0x4346, 0xa006, 0x127f, 0x007c, + 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3341, 0x2001, 0x0028, + 0x2009, 0x0000, 0x0078, 0x3341, 0xa082, 0x0006, 0x0048, 0x32b7, + 0x2009, 0x6d0c, 0x210c, 0xd18c, 0x0040, 0x332a, 0x2001, 0x0004, + 0x0078, 0x3333, 0xd184, 0x0040, 0x3331, 0x2001, 0x0004, 0x0078, + 0x3333, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3341, 0x2001, + 0x0029, 0x2009, 0x0000, 0x0078, 0x3341, 0x2001, 0x0029, 0x2009, + 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0xa1b4, 0x00ff, 0xa682, + 0x0010, 0x00c8, 0x3386, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, + 0x00c8, 0x3376, 0xa188, 0x6e00, 0x2104, 0xa065, 0x0040, 0x3376, + 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x337c, 0x684c, + 0xd0ec, 0x0040, 0x3369, 0x1078, 0x3507, 0x1078, 0x33a1, 0x0078, + 0x3371, 0x1078, 0x33a1, 0x684c, 0xd0fc, 0x0040, 0x3371, 0x1078, + 0x34f0, 0x1078, 0x351b, 0xa006, 0x0078, 0x338a, 0x2001, 0x0028, + 0x2009, 0x0000, 0x0078, 0x338a, 0xa082, 0x0006, 0x0048, 0x335f, + 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x338a, 0x2001, 0x0029, + 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050, + 0xa00d, 0x0040, 0x339a, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, + 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, + 0x3398, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x33ad, + 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, + 0x6803, 0x0000, 0x0078, 0x33ab, 0x127e, 0x2091, 0x8000, 0x604c, + 0xa06d, 0x0040, 0x33c2, 0x6800, 0xa005, 0x00c0, 0x33c0, 0x6052, + 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x33cf, + 0x6800, 0xa005, 0x00c0, 0x33cd, 0x6052, 0x604e, 0xad05, 0x007c, + 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x33da, 0x2d00, 0x200a, + 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x33d9, 0x127e, + 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, + 0x0040, 0x33ed, 0xc285, 0x0078, 0x33ee, 0xc284, 0x6202, 0x027f, + 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, + 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f, 0x127f, + 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, + 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, + 0x027e, 0xa182, 0x00ff, 0x0048, 0x3419, 0xa085, 0x0001, 0x0078, + 0x342d, 0xa190, 0x6e00, 0x2204, 0xa065, 0x00c0, 0x342c, 0x017e, + 0x0d7e, 0x1078, 0x12f4, 0x2d60, 0x0d7f, 0x017f, 0x0040, 0x3415, + 0x2c00, 0x2012, 0x1078, 0x3256, 0xa006, 0x027f, 0x007c, 0x027e, + 0xa182, 0x00ff, 0x0048, 0x3438, 0xa085, 0x0001, 0x0078, 0x3445, + 0x0d7e, 0xa190, 0x6e00, 0x2204, 0xa06d, 0x0040, 0x3443, 0x2013, + 0x0000, 0x1078, 0x1328, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, + 0xa182, 0x00ff, 0x0048, 0x3450, 0xa085, 0x0001, 0x0078, 0x3457, + 0xa188, 0x6e00, 0x2104, 0xa065, 0x0040, 0x344c, 0xa006, 0x017f, + 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, + 0x0000, 0x6000, 0xc08c, 0x6002, 0x2069, 0x728e, 0x6808, 0x605e, + 0x6810, 0x6062, 0x6138, 0xa10a, 0x0048, 0x346f, 0x603a, 0x6814, + 0x6066, 0x2099, 0x7296, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, + 0x53a3, 0x2099, 0x729a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, + 0x53a3, 0x2069, 0x72ae, 0x6904, 0xa18c, 0x00ff, 0x810f, 0x6808, + 0xa084, 0x00ff, 0xa105, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, + 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, 0x349a, 0x2009, 0x0008, + 0x0078, 0x34c4, 0xa182, 0x0259, 0x00c8, 0x34a2, 0x2009, 0x0007, + 0x0078, 0x34c4, 0xa182, 0x02c1, 0x00c8, 0x34aa, 0x2009, 0x0006, + 0x0078, 0x34c4, 0xa182, 0x0349, 0x00c8, 0x34b2, 0x2009, 0x0005, + 0x0078, 0x34c4, 0xa182, 0x0421, 0x00c8, 0x34ba, 0x2009, 0x0004, + 0x0078, 0x34c4, 0xa182, 0x0581, 0x00c8, 0x34c2, 0x2009, 0x0003, + 0x0078, 0x34c4, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, + 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x728d, 0x2e04, 0x6896, 0x2071, + 0x728e, 0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x2001, + 0x6c84, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x6178, 0xa10d, + 0x617a, 0x127f, 0x007c, 0x2001, 0x6c84, 0xa600, 0x2004, 0x8002, + 0x127e, 0x2091, 0x8000, 0x6178, 0xa10c, 0x617a, 0x127f, 0x007c, + 0x2001, 0x6c84, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, + 0x617c, 0xa10c, 0x617e, 0x127f, 0x0078, 0x3500, 0x1078, 0x338c, + 0x1078, 0x3561, 0x00c0, 0x34fe, 0x1078, 0x351b, 0x007c, 0x2001, + 0x6c84, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x617c, 0xa10d, + 0x617e, 0x127f, 0x0078, 0x3516, 0x1078, 0x33d0, 0x1078, 0x3525, + 0x00c0, 0x3514, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4346, + 0x127f, 0x007c, 0xa01e, 0x0078, 0x3527, 0x2019, 0x0001, 0xa00e, + 0x127e, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, + 0x3547, 0x8dff, 0x0040, 0x355c, 0x83ff, 0x0040, 0x353f, 0x6844, + 0xa084, 0x00ff, 0xa606, 0x0040, 0x354c, 0x0078, 0x3547, 0x683c, + 0xa406, 0x00c0, 0x3547, 0x6840, 0xa506, 0x0040, 0x354c, 0x2d08, + 0x6800, 0x2068, 0x0078, 0x3531, 0x6a00, 0x604c, 0xad06, 0x00c0, + 0x3554, 0x624e, 0x0078, 0x3557, 0xa180, 0x0000, 0x2202, 0x82ff, + 0x00c0, 0x355c, 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, + 0x3563, 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, + 0x3591, 0x83ff, 0x0040, 0x3574, 0x6844, 0xa084, 0x00ff, 0xa606, + 0x0040, 0x3581, 0x0078, 0x357c, 0x683c, 0xa406, 0x00c0, 0x357c, + 0x6840, 0xa506, 0x0040, 0x3581, 0x2d08, 0x6800, 0x2068, 0x0078, + 0x3566, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x3589, 0x6282, 0x0078, + 0x358c, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x3591, 0x6186, + 0x8dff, 0x007c, 0x2001, 0x6c84, 0xa600, 0x2004, 0x6178, 0xa10c, + 0x0040, 0x359c, 0x2011, 0x0001, 0x617c, 0xa10c, 0x0040, 0x35a2, + 0xa295, 0x0002, 0x007c, 0x1078, 0x35ec, 0x0040, 0x35ab, 0x1078, + 0x61f8, 0x0078, 0x35ad, 0xa085, 0x0001, 0x007c, 0x1078, 0x35ec, + 0x0040, 0x35b6, 0x1078, 0x6187, 0x0078, 0x35b8, 0xa085, 0x0001, + 0x007c, 0x1078, 0x35ec, 0x0040, 0x35c1, 0x1078, 0x61cd, 0x0078, + 0x35c3, 0xa085, 0x0001, 0x007c, 0x1078, 0x35ec, 0x0040, 0x35cc, + 0x1078, 0x61a3, 0x0078, 0x35ce, 0xa085, 0x0001, 0x007c, 0x127e, + 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, 0x35e4, + 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, + 0x36a1, 0x007f, 0x0078, 0x35d5, 0x6083, 0x0000, 0x6087, 0x0000, + 0x0d7f, 0x007f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, + 0x2079, 0x6d51, 0x7804, 0xd0a4, 0x0040, 0x3618, 0x157e, 0x0c7e, + 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3447, 0x00c0, + 0x360c, 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, + 0x360c, 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0, 0x35fc, + 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, 0x361a, 0x1078, 0x415f, + 0x0f7f, 0x007c, 0x2011, 0x361a, 0x1078, 0x40d1, 0x157e, 0x0c7e, + 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3447, 0x00c0, + 0x3646, 0x6000, 0xd0ec, 0x0040, 0x3646, 0x047e, 0x62a0, 0xa294, + 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x6bf7, 0x6000, + 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x445c, 0x1078, + 0x43a9, 0x2009, 0x0000, 0x1078, 0x6a57, 0x047f, 0x017f, 0x8108, + 0x00f0, 0x3624, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018, 0x2060, + 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x6ddf, 0x7003, + 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, + 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, + 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e, 0x2071, + 0x6ddf, 0x684c, 0xa005, 0x00c0, 0x367c, 0x7028, 0xc085, 0x702a, + 0xa085, 0x0001, 0x0078, 0x369f, 0x6a60, 0x7236, 0x6b64, 0x733a, + 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, + 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, + 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, + 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x0e7f, + 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x36f2, 0x6804, 0xa00d, + 0x0040, 0x36c0, 0x0d7e, 0x0e7e, 0x2071, 0x6d00, 0x027e, 0xa016, + 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x00c0, + 0x36b1, 0x702e, 0x70a0, 0xa200, 0x70a2, 0x027f, 0x0e7f, 0x0d7f, + 0x2071, 0x6ddf, 0x701c, 0xa005, 0x00c0, 0x3703, 0x0068, 0x3701, + 0x2071, 0x6d51, 0x7004, 0xd09c, 0x0040, 0x3701, 0x6934, 0xa186, + 0x0103, 0x00c0, 0x3714, 0x6948, 0x6844, 0xa105, 0x00c0, 0x36f4, + 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3701, + 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, + 0x4080, 0x2071, 0x6d00, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70a0, + 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0, + 0x3701, 0x6868, 0xa005, 0x00c0, 0x3701, 0x2009, 0x8020, 0x0078, + 0x36da, 0x2071, 0x6ddf, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, + 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x3711, 0x6902, 0x0078, + 0x3712, 0x711e, 0x0078, 0x36f2, 0xa18c, 0x00ff, 0xa18e, 0x0017, + 0x0040, 0x371e, 0xa18e, 0x001f, 0x00c0, 0x3701, 0x684c, 0xd0cc, + 0x0040, 0x3701, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, + 0x3701, 0x2009, 0x8021, 0x0078, 0x36da, 0x007e, 0x6837, 0x0103, + 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, + 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0x6ddf, 0x7004, 0x0079, + 0x3741, 0x3749, 0x3758, 0x37e4, 0x37e5, 0x37f5, 0x37fb, 0x374a, + 0x37d2, 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x3757, 0x2009, + 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, + 0x701c, 0xa06d, 0x0040, 0x37d1, 0x0e7e, 0x2071, 0x6d51, 0x7004, + 0xd09c, 0x0040, 0x37b3, 0x6934, 0xa186, 0x0103, 0x00c0, 0x378d, + 0x6948, 0x6844, 0xa105, 0x00c0, 0x37a6, 0x2009, 0x8020, 0x127e, + 0x2091, 0x8000, 0x0068, 0x3789, 0x2071, 0x0000, 0x7018, 0xd084, + 0x00c0, 0x3789, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, + 0x0001, 0x2091, 0x4080, 0x127f, 0x0e7f, 0x1078, 0x382e, 0x0078, + 0x37d1, 0x127f, 0x0e7f, 0x0078, 0x37d1, 0xa18c, 0x00ff, 0xa18e, + 0x0017, 0x0040, 0x3797, 0xa18e, 0x001f, 0x00c0, 0x37b3, 0x684c, + 0xd0cc, 0x0040, 0x37b3, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, + 0x00c0, 0x37b3, 0x2009, 0x8021, 0x0078, 0x376f, 0x6844, 0xa086, + 0x0100, 0x00c0, 0x37b3, 0x6868, 0xa005, 0x00c0, 0x37b3, 0x2009, + 0x8020, 0x0078, 0x376f, 0x0e7f, 0x1078, 0x3842, 0x0040, 0x37d1, + 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x00c0, + 0x37c8, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x37c8, 0x710e, + 0x7007, 0x0003, 0x1078, 0x3862, 0x7050, 0xa086, 0x0100, 0x0040, + 0x37e5, 0x007c, 0x701c, 0xa06d, 0x0040, 0x37e3, 0x1078, 0x3842, + 0x0040, 0x37e3, 0x7007, 0x0003, 0x1078, 0x3862, 0x7050, 0xa086, + 0x0100, 0x0040, 0x37e5, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100, + 0x00c0, 0x37ee, 0x7007, 0x0004, 0x0078, 0x37f5, 0xa086, 0x0200, + 0x00c0, 0x37f4, 0x7007, 0x0005, 0x007c, 0x1078, 0x37fc, 0x7006, + 0x1078, 0x382e, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, + 0x0048, 0x3809, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0078, + 0x3813, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x3813, 0x7070, + 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e, 0x00c0, + 0x3827, 0x127e, 0x2091, 0x8000, 0x0068, 0x382a, 0x2001, 0x000d, + 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c, 0x2001, + 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c, 0xa06d, + 0x0040, 0x3841, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, + 0x2d04, 0x701e, 0xa005, 0x00c0, 0x383e, 0x701a, 0x127f, 0x1078, + 0x1328, 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, + 0x3851, 0x2304, 0x230c, 0xa10e, 0x0040, 0x3851, 0xa006, 0x0078, + 0x3861, 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x385b, 0x2300, + 0xa005, 0x0078, 0x3861, 0x0048, 0x3860, 0xa302, 0x0078, 0x3861, + 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, + 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, 0x6f31, 0x2104, 0xc08d, + 0x200a, 0x127f, 0x1078, 0x1379, 0x007c, 0x2071, 0x6dad, 0x7003, + 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, + 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, + 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, + 0x0e7e, 0x2071, 0x6dad, 0x6848, 0xa005, 0x00c0, 0x389e, 0x7028, + 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x38c3, 0x6a50, 0x7236, + 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, + 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, + 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, + 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, + 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0x6dad, + 0x7004, 0x1079, 0x3923, 0x700c, 0x0079, 0x38ce, 0x38d3, 0x38c8, + 0x38c8, 0x38c8, 0x38c8, 0x007c, 0x700c, 0x0079, 0x38d7, 0x38dc, + 0x3921, 0x3921, 0x3922, 0x3922, 0x7830, 0x7930, 0xa106, 0x0040, + 0x38e6, 0x7830, 0x7930, 0xa106, 0x00c0, 0x390c, 0x7030, 0xa10a, + 0x0040, 0x390c, 0x00c8, 0x38ee, 0x712c, 0xa10a, 0xa18a, 0x0002, + 0x00c8, 0x390d, 0x1078, 0x12f4, 0x0040, 0x390c, 0x2d00, 0x705a, + 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, + 0x2091, 0x8000, 0x2009, 0x6f31, 0x2104, 0xc085, 0x200a, 0x007f, + 0x700e, 0x127f, 0x1078, 0x1379, 0x007c, 0x1078, 0x12f4, 0x0040, + 0x390c, 0x2d00, 0x705a, 0x1078, 0x12f4, 0x00c0, 0x3919, 0x0078, + 0x38f8, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, + 0x38fc, 0x007c, 0x007c, 0x3934, 0x3935, 0x396c, 0x396d, 0x3921, + 0x39a3, 0x39a8, 0x39df, 0x39e0, 0x39fb, 0x39fc, 0x39fd, 0x39fe, + 0x39ff, 0x3a00, 0x3a69, 0x3a93, 0x007c, 0x700c, 0x0079, 0x3938, + 0x393d, 0x3940, 0x3950, 0x396b, 0x396b, 0x1078, 0x38d4, 0x007c, + 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x3d52, 0x0040, + 0x394d, 0x2091, 0x8000, 0x1078, 0x38d4, 0x0d7f, 0x0078, 0x3959, + 0x127e, 0x8001, 0x700e, 0x1078, 0x3d52, 0x7058, 0x2068, 0x7084, + 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, + 0xa08a, 0x0020, 0x00c8, 0x3968, 0x1079, 0x3983, 0x127f, 0x007c, + 0x127f, 0x1078, 0x3a01, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, + 0x6dad, 0x700c, 0x0079, 0x3974, 0x3979, 0x3979, 0x3979, 0x397b, + 0x397f, 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3981, 0x700f, + 0x0002, 0x0e7f, 0x007c, 0x3a01, 0x3a01, 0x3a1d, 0x3a01, 0x3aff, + 0x3a01, 0x3a01, 0x3a01, 0x3a01, 0x3a01, 0x3a1d, 0x3b44, 0x3b8d, + 0x3be5, 0x3bf8, 0x3a01, 0x3a01, 0x3a39, 0x3a1d, 0x3a01, 0x3a01, + 0x3a4f, 0x3c74, 0x3c91, 0x3a01, 0x3a39, 0x3a01, 0x3a01, 0x3a01, + 0x3a01, 0x3a01, 0x3c91, 0x7020, 0x2068, 0x1078, 0x1328, 0x007c, + 0x700c, 0x0079, 0x39ab, 0x39b0, 0x39b3, 0x39c3, 0x39de, 0x39de, + 0x1078, 0x38d4, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, + 0x1078, 0x3d52, 0x0040, 0x39c0, 0x2091, 0x8000, 0x1078, 0x38d4, + 0x0d7f, 0x0078, 0x39cc, 0x127e, 0x8001, 0x700e, 0x1078, 0x3d52, + 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, + 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x39db, 0x1079, + 0x39e1, 0x127f, 0x007c, 0x127f, 0x1078, 0x3a01, 0x007c, 0x007c, + 0x007c, 0x3a01, 0x3a1d, 0x3ae9, 0x3a01, 0x3a1d, 0x3a01, 0x3a1d, + 0x3a1d, 0x3a01, 0x3a1d, 0x3ae9, 0x3a1d, 0x3a1d, 0x3a1d, 0x3a1d, + 0x3a1d, 0x3a01, 0x3a1d, 0x3ae9, 0x3a01, 0x3a01, 0x3a1d, 0x3a01, + 0x3a01, 0x3a01, 0x3a1d, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, + 0x127e, 0x2091, 0x8000, 0x1078, 0x36a1, 0x127f, 0x007c, 0x7007, + 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, + 0x8000, 0x1078, 0x36a1, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, + 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, + 0x36a1, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, + 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x36a1, 0x127f, + 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3a0f, 0x8001, + 0x00c0, 0x3a46, 0x7007, 0x0001, 0x0078, 0x3ac8, 0x7007, 0x0006, + 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3ac8, 0x007c, 0x2d00, + 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, + 0x6dd8, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8, 0x3a2b, + 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3a2b, 0xa080, 0x3ab9, 0x2004, + 0x70c6, 0x7010, 0xa015, 0x0040, 0x3ab3, 0x1078, 0x12f4, 0x00c0, + 0x3a74, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, + 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, + 0x3a83, 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, + 0x0004, 0x0040, 0x3a8c, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, + 0x0022, 0x1078, 0x135f, 0x7090, 0xa08e, 0x0100, 0x0040, 0x3aa7, + 0xa086, 0x0200, 0x0040, 0x3a9f, 0x7007, 0x0010, 0x007c, 0x7020, + 0x2068, 0x1078, 0x1328, 0x7014, 0x2068, 0x0078, 0x3a2b, 0x7020, + 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, + 0x711a, 0x0078, 0x3a69, 0x7014, 0x2068, 0x7007, 0x0001, 0x0078, + 0x3ac8, 0x3abc, 0x3ac0, 0x3ac4, 0x0002, 0x0011, 0x0007, 0x0004, + 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006, + 0x2009, 0x6d2c, 0x210c, 0x81ff, 0x00c0, 0x3ae3, 0x6838, 0xa084, + 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3299, 0x00c0, 0x3ad9, + 0x007c, 0x1078, 0x372d, 0x127e, 0x2091, 0x8000, 0x1078, 0x36a1, + 0x127f, 0x0078, 0x3ad8, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, + 0x3ad9, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a, 0x7010, + 0x8001, 0x7012, 0x0040, 0x3af8, 0x7007, 0x0006, 0x0078, 0x3afe, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a, 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, - 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x3bba, 0x2009, 0x0000, - 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x3bba, 0xa005, 0x00c0, - 0x3bd1, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x34cb, 0x00c0, - 0x3bd1, 0x067e, 0x6e44, 0xa6b4, 0x000f, 0x1078, 0x3560, 0x067f, - 0x0078, 0x3bd1, 0x047e, 0x2011, 0x6f0c, 0x2224, 0xc484, 0xc48c, - 0x2412, 0x047f, 0x0c7e, 0x1078, 0x34cb, 0x00c0, 0x3bcd, 0x2091, - 0x8000, 0x607b, 0x0000, 0x2091, 0x8001, 0x8108, 0x00f0, 0x3bc3, - 0x0c7f, 0x1078, 0x12fb, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, - 0x0001, 0x2001, 0x6f52, 0x2004, 0xd0a4, 0x0040, 0x3c14, 0x6944, - 0x1078, 0x3e15, 0x6100, 0xd184, 0x0040, 0x3bf9, 0x6858, 0xa084, - 0x00ff, 0x00c0, 0x3c17, 0x6000, 0xd084, 0x0040, 0x3c14, 0x6004, - 0xa005, 0x00c0, 0x3c1a, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, - 0x3c11, 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0, 0x3c01, 0x2001, - 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x3c14, - 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3c14, 0x600a, - 0x6202, 0x127f, 0x0078, 0x3de8, 0x127f, 0x0078, 0x3de0, 0x127f, - 0x0078, 0x3dd8, 0x127f, 0x0078, 0x3ddc, 0x127e, 0x2091, 0x8000, - 0x7007, 0x0001, 0x2001, 0x6f52, 0x2004, 0xd0a4, 0x0040, 0x3c72, - 0x6944, 0x1078, 0x3e15, 0x6000, 0xa084, 0x0001, 0x0040, 0x3c72, - 0x6204, 0x6308, 0x6c48, 0xa484, 0x0003, 0x0040, 0x3c4a, 0x6958, - 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x3c43, 0x2100, 0xa210, 0x0048, - 0x3c6f, 0x0078, 0x3c4a, 0x8001, 0x00c0, 0x3c6f, 0x2100, 0xa212, - 0x0048, 0x3c6f, 0xa484, 0x000c, 0x0040, 0x3c64, 0x6958, 0x810f, - 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, 0x3c5c, 0x2100, 0xa318, - 0x0048, 0x3c6f, 0x0078, 0x3c64, 0xa082, 0x0004, 0x00c0, 0x3c6f, - 0x2100, 0xa31a, 0x0048, 0x3c6f, 0x6860, 0xa005, 0x0040, 0x3c6a, - 0x8000, 0x6016, 0x6206, 0x630a, 0x127f, 0x0078, 0x3de8, 0x127f, - 0x0078, 0x3de4, 0x127f, 0x0078, 0x3de0, 0x127e, 0x2091, 0x8000, - 0x7007, 0x0001, 0x6944, 0x1078, 0x3e15, 0x6308, 0x8318, 0x0048, - 0x3c85, 0x630a, 0x127f, 0x0078, 0x3df6, 0x127f, 0x0078, 0x3de4, + 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x3b2a, 0x2009, 0x0000, + 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x3b2a, 0xa005, 0x00c0, + 0x3b41, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x3447, 0x00c0, + 0x3b41, 0x067e, 0x6e44, 0xa6b4, 0x000f, 0x1078, 0x34e3, 0x067f, + 0x0078, 0x3b41, 0x047e, 0x2011, 0x6d0c, 0x2224, 0xc484, 0xc48c, + 0x2412, 0x047f, 0x0c7e, 0x1078, 0x3447, 0x00c0, 0x3b3d, 0x2091, + 0x8000, 0x607b, 0x0000, 0x2091, 0x8001, 0x8108, 0x00f0, 0x3b33, + 0x0c7f, 0x1078, 0x1328, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, + 0x0001, 0x2001, 0x6d52, 0x2004, 0xd0a4, 0x0040, 0x3b84, 0x6944, + 0x1078, 0x3d6e, 0x6100, 0xd184, 0x0040, 0x3b69, 0x6858, 0xa084, + 0x00ff, 0x00c0, 0x3b87, 0x6000, 0xd084, 0x0040, 0x3b84, 0x6004, + 0xa005, 0x00c0, 0x3b8a, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, + 0x3b81, 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0, 0x3b71, 0x2001, + 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x3b84, + 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3b84, 0x600a, + 0x6202, 0x127f, 0x0078, 0x3d41, 0x127f, 0x0078, 0x3d39, 0x127f, + 0x0078, 0x3d31, 0x127f, 0x0078, 0x3d35, 0x127e, 0x2091, 0x8000, + 0x7007, 0x0001, 0x2001, 0x6d52, 0x2004, 0xd0a4, 0x0040, 0x3be2, + 0x6944, 0x1078, 0x3d6e, 0x6000, 0xa084, 0x0001, 0x0040, 0x3be2, + 0x6204, 0x6308, 0x6c48, 0xa484, 0x0003, 0x0040, 0x3bba, 0x6958, + 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x3bb3, 0x2100, 0xa210, 0x0048, + 0x3bdf, 0x0078, 0x3bba, 0x8001, 0x00c0, 0x3bdf, 0x2100, 0xa212, + 0x0048, 0x3bdf, 0xa484, 0x000c, 0x0040, 0x3bd4, 0x6958, 0x810f, + 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, 0x3bcc, 0x2100, 0xa318, + 0x0048, 0x3bdf, 0x0078, 0x3bd4, 0xa082, 0x0004, 0x00c0, 0x3bdf, + 0x2100, 0xa31a, 0x0048, 0x3bdf, 0x6860, 0xa005, 0x0040, 0x3bda, + 0x8000, 0x6016, 0x6206, 0x630a, 0x127f, 0x0078, 0x3d41, 0x127f, + 0x0078, 0x3d3d, 0x127f, 0x0078, 0x3d39, 0x127e, 0x2091, 0x8000, + 0x7007, 0x0001, 0x6944, 0x1078, 0x3d6e, 0x6308, 0x8318, 0x0048, + 0x3bf5, 0x630a, 0x127f, 0x0078, 0x3d4f, 0x127f, 0x0078, 0x3d3d, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, - 0x0040, 0x3c9c, 0x027e, 0x2009, 0x0000, 0x2011, 0xfcff, 0x1078, - 0x42cd, 0x027f, 0x0078, 0x3cd2, 0x6858, 0xa005, 0x0040, 0x3ce6, - 0x685c, 0xa065, 0x0040, 0x3ce2, 0x2001, 0x6f2a, 0x2004, 0xa005, - 0x0040, 0x3cae, 0x1078, 0x6337, 0x0078, 0x3cb4, 0x6013, 0x0400, - 0x2009, 0x0041, 0x1078, 0x55fc, 0x6958, 0xa18c, 0xe600, 0xa186, - 0x2000, 0x0040, 0x3cca, 0xa186, 0x0400, 0x0040, 0x3cca, 0x6944, - 0x0c7e, 0x1078, 0x4225, 0x6000, 0xa084, 0xfdff, 0x6002, 0x0c7f, - 0x0078, 0x3cd2, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078, - 0x42cd, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x3cde, 0x6944, 0x1078, - 0x4225, 0x6008, 0x8000, 0x0048, 0x3cde, 0x600a, 0x0c7f, 0x127f, - 0x0078, 0x3de8, 0x0c7f, 0x127f, 0x0078, 0x3de0, 0x6954, 0xa186, - 0x002a, 0x00c0, 0x3cf2, 0x2001, 0x6f0c, 0x200c, 0xc194, 0x2102, - 0x0078, 0x3cd2, 0xa186, 0x0020, 0x0040, 0x3d07, 0xa186, 0x0029, - 0x00c0, 0x3ce2, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x34cb, - 0x00c0, 0x3cd2, 0x6000, 0xc0e4, 0x6002, 0x0078, 0x3cd2, 0x685c, - 0xa065, 0x0040, 0x3ce2, 0x6017, 0x0014, 0x0078, 0x3cd2, 0x6944, - 0x1078, 0x3e15, 0x6000, 0xa084, 0x0001, 0x0040, 0x3d28, 0x2091, - 0x8000, 0x6204, 0x8210, 0x0048, 0x3d22, 0x6206, 0x2091, 0x8001, - 0x0078, 0x3df6, 0x2091, 0x8001, 0x6853, 0x0016, 0x0078, 0x3def, - 0x6853, 0x0007, 0x0078, 0x3def, 0x6834, 0x8007, 0xa084, 0x00ff, - 0x00c0, 0x3d36, 0x1078, 0x3a96, 0x0078, 0x3d48, 0x2030, 0x8001, - 0x00c0, 0x3d40, 0x7007, 0x0001, 0x1078, 0x3d49, 0x0078, 0x3d48, - 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3d49, - 0x007c, 0x0e7e, 0x2009, 0x6f2a, 0x210c, 0x81ff, 0x00c0, 0x3dca, - 0x2009, 0x6f0c, 0x210c, 0xd194, 0x00c0, 0x3dd4, 0x6848, 0x2070, - 0xae82, 0x7500, 0x0048, 0x3db9, 0x2001, 0x6f15, 0x2004, 0xae02, - 0x00c8, 0x3db9, 0x6944, 0x1078, 0x3e15, 0x6100, 0xa184, 0x0001, - 0x0040, 0x3d9f, 0xa184, 0x0100, 0x00c0, 0x3dbd, 0xa184, 0x0200, - 0x00c0, 0x3dc1, 0x601c, 0xa005, 0x00c0, 0x3dc5, 0x711c, 0xa186, - 0x0006, 0x00c0, 0x3da4, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, - 0x127e, 0x2091, 0x8000, 0x7010, 0xa005, 0x00c0, 0x3d96, 0x7112, - 0x7018, 0xa065, 0x0040, 0x3dc9, 0x6000, 0xd0e4, 0x00c0, 0x3dce, - 0x2e60, 0x1078, 0x422e, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, - 0xa005, 0x00c0, 0x3d96, 0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, - 0x6853, 0x0006, 0x0078, 0x3def, 0x6944, 0xa18c, 0xff00, 0x810f, - 0x1078, 0x34cb, 0x00c0, 0x3dcf, 0x6000, 0xd0e4, 0x00c0, 0x3dcf, - 0x711c, 0xa186, 0x0007, 0x00c0, 0x3db9, 0x6853, 0x0002, 0x0078, - 0x3dd1, 0x6853, 0x0008, 0x0078, 0x3dd1, 0x6853, 0x000e, 0x0078, - 0x3dd1, 0x6853, 0x0017, 0x0078, 0x3dd1, 0x6853, 0x0035, 0x0078, - 0x3dd1, 0x127f, 0x6853, 0x0028, 0x0078, 0x3dd1, 0x127f, 0x6853, - 0x0029, 0x0e7f, 0x0078, 0x3def, 0x6853, 0x002a, 0x0078, 0x3dd1, - 0x2009, 0x003e, 0x0078, 0x3dea, 0x2009, 0x0004, 0x0078, 0x3dea, - 0x2009, 0x0006, 0x0078, 0x3dea, 0x2009, 0x0016, 0x0078, 0x3dea, - 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, 0xa105, 0x6856, 0x2091, - 0x8000, 0x1078, 0x3720, 0x2091, 0x8001, 0x007c, 0x1078, 0x12fb, - 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, 0x3e06, 0xa00e, - 0x7034, 0x7072, 0x7038, 0x7076, 0x0078, 0x3e12, 0x7070, 0xa080, - 0x0040, 0x7072, 0x00c8, 0x3e12, 0x7074, 0xa081, 0x0000, 0x7076, - 0xa085, 0x0001, 0x7932, 0x7132, 0x007c, 0x0d7e, 0x1078, 0x4225, - 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, - 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, - 0x3d00, 0xa084, 0x7000, 0x0040, 0x3e31, 0xa086, 0x1000, 0x00c0, - 0x3e4d, 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x3e38, 0x3e60, - 0xac84, 0x0007, 0x00c0, 0x3e4d, 0xac82, 0x7500, 0x0048, 0x3e4d, - 0x6854, 0xac02, 0x00c8, 0x3e4d, 0x2009, 0x0047, 0x1078, 0x55fc, - 0x7a1c, 0xd284, 0x00c0, 0x3e23, 0x007c, 0xa016, 0x1078, 0x1525, - 0x0078, 0x3e48, 0x157e, 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, - 0x3e28, 0xa584, 0x0070, 0x00c0, 0x3e7b, 0xa484, 0x7000, 0xa086, - 0x1000, 0x00c0, 0x3e7b, 0x1078, 0x3e88, 0x0040, 0x3e7b, 0x20e1, - 0x3000, 0x7828, 0x7828, 0x1078, 0x3ea6, 0x147f, 0x137f, 0x157f, - 0x2009, 0x70be, 0x2104, 0xa005, 0x00c0, 0x3e77, 0x007c, 0x1078, - 0x4893, 0x0078, 0x3e76, 0x1078, 0x6df7, 0x1078, 0x3e88, 0x20e1, - 0x3000, 0x7828, 0x7828, 0x147f, 0x137f, 0x157f, 0x0078, 0x3e76, - 0xa484, 0x01ff, 0x6872, 0xa005, 0x0040, 0x3e9a, 0xa080, 0x001f, - 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, - 0x53a5, 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, - 0x020a, 0x53a5, 0xa085, 0x0001, 0x0078, 0x3e99, 0x7000, 0xa084, - 0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x3eb3, - 0x0078, 0x3f9f, 0x007c, 0xa196, 0x2000, 0x00c0, 0x3ec4, 0x6900, - 0xa18e, 0x0001, 0x00c0, 0x3ec0, 0x1078, 0x2b5e, 0x0078, 0x3eb2, - 0x1078, 0x3ecc, 0x0078, 0x3eb2, 0xa196, 0x8000, 0x00c0, 0x3eb2, - 0x1078, 0x4025, 0x0078, 0x3eb2, 0x0c7e, 0x7110, 0xa18c, 0xff00, - 0x810f, 0xa196, 0x0001, 0x0040, 0x3ed9, 0xa196, 0x0023, 0x00c0, - 0x3f97, 0xa08e, 0x0023, 0x00c0, 0x3f0a, 0x1078, 0x4097, 0x0040, - 0x3f97, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x3ef2, - 0x7034, 0xa005, 0x00c0, 0x3f97, 0x2009, 0x0015, 0x1078, 0x55fc, - 0x0078, 0x3f97, 0xa08e, 0x0210, 0x00c0, 0x3efc, 0x2009, 0x0015, - 0x1078, 0x55fc, 0x0078, 0x3f97, 0xa08e, 0x0100, 0x00c0, 0x3f97, - 0x7034, 0xa005, 0x00c0, 0x3f97, 0x2009, 0x0016, 0x1078, 0x55fc, - 0x0078, 0x3f97, 0xa08e, 0x0022, 0x00c0, 0x3f97, 0x7030, 0xa08e, - 0x0300, 0x00c0, 0x3f1b, 0x7034, 0xa005, 0x00c0, 0x3f97, 0x2009, - 0x0017, 0x0078, 0x3f7f, 0xa08e, 0x0500, 0x00c0, 0x3f27, 0x7034, - 0xa005, 0x00c0, 0x3f97, 0x2009, 0x0018, 0x0078, 0x3f7f, 0xa08e, - 0x2010, 0x00c0, 0x3f2f, 0x2009, 0x0019, 0x0078, 0x3f7f, 0xa08e, - 0x2110, 0x00c0, 0x3f37, 0x2009, 0x001a, 0x0078, 0x3f7f, 0xa08e, - 0x5200, 0x00c0, 0x3f43, 0x7034, 0xa005, 0x00c0, 0x3f97, 0x2009, - 0x001b, 0x0078, 0x3f7f, 0xa08e, 0x5000, 0x00c0, 0x3f4f, 0x7034, - 0xa005, 0x00c0, 0x3f97, 0x2009, 0x001c, 0x0078, 0x3f7f, 0xa08e, - 0x1200, 0x00c0, 0x3f5b, 0x7034, 0xa005, 0x00c0, 0x3f97, 0x2009, - 0x0024, 0x0078, 0x3f7f, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x00c0, - 0x3f65, 0x2009, 0x002d, 0x0078, 0x3f7f, 0xa08c, 0xff00, 0xa18e, - 0x5300, 0x00c0, 0x3f6f, 0x2009, 0x002a, 0x0078, 0x3f7f, 0xa08e, - 0x0f00, 0x00c0, 0x3f77, 0x2009, 0x0020, 0x0078, 0x3f7f, 0xa08e, - 0x5300, 0x00c0, 0x3f7d, 0x0078, 0x3f7d, 0x2009, 0x001d, 0x017e, - 0x2011, 0x7383, 0x2204, 0x1078, 0x1fe4, 0x1078, 0x3494, 0x00c0, - 0x3f99, 0x0c7e, 0x1078, 0x556f, 0x0040, 0x3f9c, 0x017f, 0x611a, - 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x55fc, 0x0c7f, - 0x007c, 0x017f, 0x0078, 0x3f97, 0x0c7f, 0x0078, 0x3f99, 0xa084, - 0x0007, 0x0079, 0x3fa4, 0x007c, 0x3fac, 0x3fac, 0x3fac, 0x3fac, - 0x3fac, 0x3fad, 0x3fc6, 0x400e, 0x007c, 0x7110, 0xd1bc, 0x0040, - 0x3fc5, 0x7120, 0x2160, 0xac8c, 0x0007, 0x00c0, 0x3fc5, 0xac8a, - 0x7500, 0x0048, 0x3fc5, 0x6854, 0xac02, 0x00c8, 0x3fc5, 0x7124, - 0x610a, 0x2009, 0x0046, 0x1078, 0x55fc, 0x007c, 0x0c7e, 0x7110, - 0xd1bc, 0x00c0, 0x400c, 0x2011, 0x7383, 0x2204, 0xa080, 0x2207, - 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x34cb, 0x00c0, 0x400c, - 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x3ff1, - 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, 0x400c, 0x611a, 0x601f, - 0x0006, 0x7120, 0x610a, 0x2009, 0x0044, 0x1078, 0x55fc, 0x0078, - 0x400c, 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, 0x400c, 0x611a, - 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x4004, - 0x6007, 0x0005, 0x0078, 0x4006, 0x6007, 0x0001, 0x6003, 0x0001, - 0x1078, 0x448b, 0x1078, 0x4893, 0x0c7f, 0x007c, 0x7110, 0xd1bc, - 0x0040, 0x4024, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x4024, - 0xac82, 0x7500, 0x0048, 0x4024, 0x6854, 0xac02, 0x00c8, 0x4024, - 0x2009, 0x0045, 0x1078, 0x55fc, 0x007c, 0x7110, 0xa18c, 0xff00, - 0x810f, 0xa18e, 0x0000, 0x00c0, 0x4035, 0xa084, 0x000f, 0xa08a, - 0x0006, 0x10c8, 0x1288, 0x1079, 0x4036, 0x007c, 0x403c, 0x403d, - 0x403c, 0x403c, 0x4079, 0x4088, 0x007c, 0x7110, 0xd1bc, 0x00c0, - 0x4078, 0x700c, 0x1078, 0x1fe4, 0x1078, 0x3494, 0x00c0, 0x4078, - 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x4061, - 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, 0x4078, 0x611a, 0x601f, - 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x55fc, 0x0078, - 0x4078, 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, 0x4078, 0x611a, - 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x4074, - 0x2009, 0x0005, 0x0078, 0x4076, 0x2009, 0x0001, 0x1078, 0x55fc, - 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4087, 0x1078, 0x4097, 0x0040, - 0x4087, 0x7124, 0x610a, 0x2009, 0x0089, 0x1078, 0x55fc, 0x007c, - 0x7110, 0xd1bc, 0x0040, 0x4096, 0x1078, 0x4097, 0x0040, 0x4096, - 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, 0x55fc, 0x007c, 0x7020, - 0x2060, 0xac84, 0x0007, 0x00c0, 0x40aa, 0xac82, 0x7500, 0x0048, - 0x40aa, 0x2001, 0x6f15, 0x2004, 0xac02, 0x00c8, 0x40aa, 0xa085, - 0x0001, 0x007c, 0xa006, 0x0078, 0x40a9, 0x2071, 0x70c9, 0x7003, - 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x7500, - 0x7007, 0x0000, 0x7026, 0x702b, 0x4f9b, 0x7032, 0x7037, 0x4fdc, - 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, 0x2071, 0x70c9, 0x00e0, - 0x4174, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0, 0x413d, - 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000, 0x7138, - 0x8109, 0x713a, 0x00c0, 0x413b, 0x703b, 0x0002, 0x2009, 0x0100, - 0x2104, 0xa082, 0x0003, 0x00c8, 0x413b, 0x703c, 0xa086, 0x0001, - 0x00c0, 0x4118, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, - 0x0040, 0x40f6, 0x6803, 0x1000, 0x0078, 0x40fd, 0x6804, 0xa084, - 0x1000, 0x0040, 0x40fd, 0x6803, 0x0100, 0x6803, 0x0000, 0x703f, - 0x0000, 0x2069, 0x70b6, 0x6804, 0xa082, 0x0006, 0x00c0, 0x410a, - 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x4111, 0x6833, - 0x0000, 0x1078, 0x4893, 0x1078, 0x4943, 0x0d7f, 0x0078, 0x413b, - 0x0d7e, 0x2069, 0x6f00, 0x6944, 0x6860, 0xa102, 0x00c8, 0x413a, - 0x2069, 0x70b6, 0x6804, 0xa086, 0x0000, 0x00c0, 0x413a, 0x6830, - 0xa086, 0x0000, 0x00c0, 0x413a, 0x703f, 0x0001, 0x6807, 0x0006, - 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069, 0x0140, - 0x6803, 0x0600, 0x0d7f, 0x0078, 0x4140, 0x127e, 0x2091, 0x8000, - 0x7024, 0xa00d, 0x0040, 0x4151, 0x7020, 0x8001, 0x7022, 0x00c0, - 0x4151, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0, 0x4151, 0x7028, - 0x107a, 0x7030, 0xa00d, 0x0040, 0x4162, 0x702c, 0x8001, 0x702e, - 0x00c0, 0x4162, 0x702f, 0x0009, 0x8109, 0x7132, 0x00c0, 0x4162, - 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x4173, 0x7008, 0x8001, - 0x700a, 0x00c0, 0x4173, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, - 0x4173, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079, 0x4177, 0x419e, - 0x419f, 0x41bb, 0x0e7e, 0x2071, 0x70c9, 0x7018, 0xa005, 0x00c0, - 0x4185, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, - 0x007e, 0x2071, 0x70c9, 0x701c, 0xa206, 0x00c0, 0x4191, 0x701a, - 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x70c9, 0x6088, - 0xa102, 0x0048, 0x419c, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, - 0x1078, 0x34cb, 0x00c0, 0x41b1, 0x6088, 0x8001, 0x0048, 0x41b1, - 0x608a, 0x00c0, 0x41b1, 0x127e, 0x2091, 0x8000, 0x1078, 0x4893, - 0x127f, 0x8108, 0xa182, 0x007e, 0x0048, 0x41b9, 0xa00e, 0x7007, - 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, - 0x6014, 0xa005, 0x0040, 0x41ea, 0x8001, 0x6016, 0x00c0, 0x41ea, - 0x611c, 0xa186, 0x0003, 0x0040, 0x41d1, 0xa186, 0x0006, 0x00c0, - 0x41e8, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x41e8, - 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x41e1, 0x2001, - 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x41ea, - 0x1078, 0x60aa, 0x127f, 0xac88, 0x0008, 0x7116, 0x2001, 0x6f16, - 0x2004, 0xa102, 0x0048, 0x41f8, 0x7017, 0x7500, 0x7007, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x70c9, 0x7027, 0x07d0, 0x7023, 0x0009, - 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, 0x70d2, 0x2003, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x70c9, 0x7033, 0x07d0, 0x702f, 0x0009, - 0x0e7f, 0x007c, 0x2011, 0x70d5, 0x2013, 0x0000, 0x007c, 0x0e7e, - 0x2071, 0x70c9, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, - 0x0c7e, 0x2061, 0x715a, 0x0c7f, 0x007c, 0xa184, 0x000f, 0x8003, - 0x8003, 0x8003, 0xa080, 0x715a, 0x2060, 0x007c, 0x6854, 0xa08a, - 0x199a, 0x0048, 0x4235, 0x2001, 0x1999, 0xa005, 0x00c0, 0x4245, - 0x6944, 0x0c7e, 0x1078, 0x4225, 0x6014, 0x0c7f, 0xa005, 0x00c0, - 0x424a, 0x2001, 0x001e, 0x0078, 0x424a, 0xa08e, 0xffff, 0x00c0, - 0x424a, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, - 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4285, 0xd0b4, 0x00c0, - 0x4261, 0xd0bc, 0x00c0, 0x4273, 0x2009, 0x0006, 0x1078, 0x42a8, - 0x007c, 0xd0fc, 0x0040, 0x426e, 0xa084, 0x0003, 0xa08e, 0x0003, - 0x0040, 0x42a1, 0xa08e, 0x0000, 0x00c0, 0x42a1, 0x2009, 0x0043, - 0x1078, 0x55fc, 0x007c, 0xd0fc, 0x0040, 0x4280, 0xa084, 0x0003, - 0xa08e, 0x0003, 0x0040, 0x42a1, 0xa08e, 0x0000, 0x00c0, 0x42a1, - 0x2009, 0x0042, 0x1078, 0x55fc, 0x007c, 0xd0fc, 0x0040, 0x4297, - 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x42a1, 0xa08e, 0x0002, - 0x0040, 0x429b, 0x2009, 0x0041, 0x1078, 0x55fc, 0x007c, 0x1078, - 0x42a6, 0x0078, 0x4296, 0x2009, 0x0043, 0x1078, 0x55fc, 0x0078, - 0x4296, 0x2009, 0x0004, 0x1078, 0x42a8, 0x007c, 0x2009, 0x0001, - 0x6010, 0xa0ec, 0xf000, 0x0040, 0x42cc, 0x2068, 0x6952, 0x6800, - 0x6012, 0xa186, 0x0001, 0x00c0, 0x42c6, 0x694c, 0xa18c, 0x8100, - 0xa18e, 0x8100, 0x00c0, 0x42c6, 0x0c7e, 0x6944, 0x1078, 0x4225, - 0x6204, 0x8210, 0x0048, 0x42c5, 0x6206, 0x0c7f, 0x1078, 0x3720, - 0x6010, 0xa06d, 0x10c0, 0x422e, 0x007c, 0x157e, 0x0c7e, 0x20a9, - 0x0010, 0x2061, 0x715a, 0x6000, 0x81ff, 0x0040, 0x42da, 0xa205, - 0x0078, 0x42db, 0xa204, 0x6002, 0xace0, 0x0008, 0x00f0, 0x42d3, - 0x0c7f, 0x157f, 0x007c, 0x6808, 0xa005, 0x0040, 0x42eb, 0x8001, - 0x680a, 0xa085, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x2079, - 0x70b6, 0x127f, 0x0d7e, 0x2069, 0x70b6, 0x6803, 0x0005, 0x2069, - 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, - 0x6027, 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x4307, 0x4311, - 0x4336, 0x4391, 0x4317, 0x4336, 0x430f, 0x430f, 0x430f, 0x1078, - 0x1288, 0x1078, 0x4204, 0x1078, 0x4893, 0x0c7f, 0x007c, 0x62c0, - 0x82ff, 0x00c0, 0x431d, 0x0c7f, 0x007c, 0x2011, 0x31f0, 0x1078, - 0x4187, 0x7828, 0xa092, 0x0002, 0x00c8, 0x432c, 0x8000, 0x782a, - 0x1078, 0x3220, 0x0078, 0x431b, 0x1078, 0x31f0, 0x7807, 0x0003, - 0x7827, 0x0000, 0x782b, 0x0000, 0x0078, 0x431b, 0x1078, 0x4204, - 0x3c00, 0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, - 0x20e0, 0x82ff, 0x0040, 0x4354, 0x62c0, 0x82ff, 0x00c0, 0x4354, - 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1288, 0x2009, 0x0013, - 0x1078, 0x55fc, 0x0c7f, 0x007c, 0x3900, 0xa082, 0x71fa, 0x00c8, - 0x435b, 0x1078, 0x54ff, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1288, - 0x7804, 0xa086, 0x0004, 0x0040, 0x43d6, 0x7828, 0xa092, 0x2710, - 0x00c8, 0x4371, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x4f80, 0x0078, - 0x4352, 0x6104, 0xa186, 0x0003, 0x00c0, 0x4388, 0x0e7e, 0x2071, - 0x6f00, 0x70b4, 0x0e7f, 0xd08c, 0x0040, 0x4388, 0x0c7e, 0x0e7e, - 0x2061, 0x0100, 0x2071, 0x6f00, 0x1078, 0x3229, 0x0e7f, 0x0c7f, - 0x1078, 0x6e4a, 0x2009, 0x0014, 0x1078, 0x55fc, 0x0c7f, 0x0078, - 0x4352, 0x2001, 0x70d2, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, - 0x43a5, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1288, 0x2009, - 0x0013, 0x1078, 0x5649, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, - 0xa082, 0x71fa, 0x00c8, 0x43ae, 0x1078, 0x54ff, 0x7824, 0xa005, - 0x1040, 0x1288, 0x781c, 0xa06d, 0x1040, 0x1288, 0x6800, 0xc0dc, - 0x6802, 0x7924, 0x2160, 0x1078, 0x55d5, 0x693c, 0x81ff, 0x1040, - 0x1288, 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x43ca, 0x7a1e, - 0x0078, 0x43cc, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, - 0x0d7f, 0x0c7f, 0x1078, 0x4893, 0x0078, 0x43a3, 0x6104, 0xa186, - 0x0002, 0x0040, 0x43e1, 0xa186, 0x0004, 0x0040, 0x43e1, 0x0078, - 0x4365, 0x7808, 0xac06, 0x0040, 0x4365, 0x1078, 0x479a, 0x1078, - 0x448b, 0x0c7f, 0x1078, 0x4893, 0x0078, 0x4352, 0x0c7e, 0x6027, - 0x0002, 0x2011, 0x70d5, 0x2013, 0x0000, 0x62c8, 0x82ff, 0x00c0, - 0x4408, 0x62c4, 0x82ff, 0x00c0, 0x4408, 0x793c, 0xa1e5, 0x0000, - 0x0040, 0x4406, 0x2009, 0x0049, 0x1078, 0x55fc, 0x0c7f, 0x007c, - 0x3908, 0xa192, 0x71fa, 0x00c8, 0x440f, 0x1078, 0x54ff, 0x6017, - 0x0010, 0x793c, 0x81ff, 0x0040, 0x4406, 0x7944, 0xa192, 0x7530, - 0x00c8, 0x442e, 0x8108, 0x7946, 0x1078, 0x4209, 0x793c, 0xa188, - 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x442a, 0x6017, 0x0012, - 0x0078, 0x4406, 0x6017, 0x0016, 0x0078, 0x4406, 0x037e, 0x2019, - 0x0001, 0x1078, 0x513b, 0x037f, 0x1078, 0x6e4a, 0x793c, 0x2160, - 0x2009, 0x004a, 0x1078, 0x55fc, 0x0078, 0x4406, 0x007e, 0x017e, + 0x0040, 0x3c0c, 0x027e, 0x2009, 0x0000, 0x2011, 0xfcff, 0x1078, + 0x41f4, 0x027f, 0x0078, 0x3c42, 0x6858, 0xa005, 0x0040, 0x3c56, + 0x685c, 0xa065, 0x0040, 0x3c52, 0x2001, 0x6d2c, 0x2004, 0xa005, + 0x0040, 0x3c1e, 0x1078, 0x6283, 0x0078, 0x3c24, 0x6013, 0x0400, + 0x2009, 0x0041, 0x1078, 0x5591, 0x6958, 0xa18c, 0xe600, 0xa186, + 0x2000, 0x0040, 0x3c3a, 0xa186, 0x0400, 0x0040, 0x3c3a, 0x6944, + 0x0c7e, 0x1078, 0x416d, 0x6000, 0xa084, 0xfdff, 0x6002, 0x0c7f, + 0x0078, 0x3c42, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078, + 0x41f4, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x3c4e, 0x6944, 0x1078, + 0x416d, 0x6008, 0x8000, 0x0048, 0x3c4e, 0x600a, 0x0c7f, 0x127f, + 0x0078, 0x3d41, 0x0c7f, 0x127f, 0x0078, 0x3d39, 0x6954, 0xa186, + 0x0020, 0x0040, 0x3c6c, 0xa186, 0x0029, 0x00c0, 0x3c52, 0x6944, + 0xa18c, 0xff00, 0x810f, 0x1078, 0x3447, 0x00c0, 0x3c42, 0x6000, + 0xc0e4, 0x6002, 0x0078, 0x3c42, 0x685c, 0xa065, 0x0040, 0x3c52, + 0x6017, 0x0014, 0x0078, 0x3c42, 0x6944, 0x1078, 0x3d6e, 0x6000, + 0xa084, 0x0001, 0x0040, 0x3c8d, 0x2091, 0x8000, 0x6204, 0x8210, + 0x0048, 0x3c87, 0x6206, 0x2091, 0x8001, 0x0078, 0x3d4f, 0x2091, + 0x8001, 0x6853, 0x0016, 0x0078, 0x3d48, 0x6853, 0x0007, 0x0078, + 0x3d48, 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x3c9b, 0x1078, + 0x3a0f, 0x0078, 0x3cad, 0x2030, 0x8001, 0x00c0, 0x3ca5, 0x7007, + 0x0001, 0x1078, 0x3cae, 0x0078, 0x3cad, 0x7007, 0x0006, 0x7012, + 0x2d00, 0x7016, 0x701a, 0x704b, 0x3cae, 0x007c, 0x0e7e, 0x2009, + 0x6d2c, 0x210c, 0x81ff, 0x00c0, 0x3d28, 0x6848, 0x2070, 0xae82, + 0x7400, 0x0048, 0x3d18, 0x2001, 0x6d15, 0x2004, 0xae02, 0x00c8, + 0x3d18, 0x6944, 0x1078, 0x3d6e, 0x6100, 0xa184, 0x0001, 0x0040, + 0x3cfe, 0xa184, 0x0100, 0x00c0, 0x3d1c, 0xa184, 0x0200, 0x00c0, + 0x3d20, 0x601c, 0xa005, 0x00c0, 0x3d24, 0x711c, 0xa186, 0x0006, + 0x00c0, 0x3d03, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, + 0x2091, 0x8000, 0x7010, 0xa005, 0x00c0, 0x3cf5, 0x7112, 0x7018, + 0xa065, 0x0040, 0x3d28, 0x6000, 0xd0e4, 0x00c0, 0x3d2c, 0x2e60, + 0x1078, 0x4176, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, + 0x00c0, 0x3cf5, 0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, + 0x0006, 0x0078, 0x3d48, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, + 0x3447, 0x00c0, 0x3d2c, 0x6000, 0xd0e4, 0x00c0, 0x3d2c, 0x711c, + 0xa186, 0x0007, 0x00c0, 0x3d18, 0x6853, 0x0002, 0x0078, 0x3d2e, + 0x6853, 0x0008, 0x0078, 0x3d2e, 0x6853, 0x000e, 0x0078, 0x3d2e, + 0x6853, 0x0017, 0x0078, 0x3d2e, 0x6853, 0x0035, 0x0078, 0x3d2e, + 0x6853, 0x0028, 0x0078, 0x3d2e, 0x6853, 0x0029, 0x0e7f, 0x0078, + 0x3d48, 0x2009, 0x003e, 0x0078, 0x3d43, 0x2009, 0x0004, 0x0078, + 0x3d43, 0x2009, 0x0006, 0x0078, 0x3d43, 0x2009, 0x0016, 0x0078, + 0x3d43, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, 0xa105, 0x6856, + 0x2091, 0x8000, 0x1078, 0x36a1, 0x2091, 0x8001, 0x007c, 0x1078, + 0x1328, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, 0x3d5f, + 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078, 0x3d6b, 0x7070, + 0xa080, 0x0040, 0x7072, 0x00c8, 0x3d6b, 0x7074, 0xa081, 0x0000, + 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c, 0x0d7e, 0x1078, + 0x416d, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204, 0xa085, + 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08, 0x20e1, + 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x3d8a, 0xa086, 0x1000, + 0x00c0, 0x3dab, 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x3d91, + 0x3e60, 0xac84, 0x0007, 0x00c0, 0x3dab, 0xac82, 0x7400, 0x0048, + 0x3dab, 0x6854, 0xac02, 0x00c8, 0x3dab, 0x2009, 0x0047, 0x1078, + 0x5591, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x7a28, 0x7a1c, 0xd284, + 0x00c0, 0x3d7c, 0x007c, 0xa016, 0x1078, 0x1532, 0x0078, 0x3da1, + 0x157e, 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, + 0x0070, 0x00c0, 0x3dd9, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, + 0x3dd9, 0x1078, 0x3de6, 0x0040, 0x3dd9, 0x20e1, 0x3000, 0x7828, + 0x7828, 0x1078, 0x3e04, 0x147f, 0x137f, 0x157f, 0x2009, 0x6f18, + 0x2104, 0xa005, 0x00c0, 0x3dd5, 0x007c, 0x1078, 0x476a, 0x0078, + 0x3dd4, 0x1078, 0x6c23, 0x1078, 0x3de6, 0x20e1, 0x3000, 0x7828, + 0x7828, 0x147f, 0x137f, 0x157f, 0x0078, 0x3dd4, 0xa484, 0x01ff, + 0x687a, 0xa005, 0x0040, 0x3df8, 0xa080, 0x001f, 0xa084, 0x03f8, + 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, + 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, + 0xa085, 0x0001, 0x0078, 0x3df7, 0x7000, 0xa084, 0xff00, 0xa08c, + 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x3e11, 0x0078, 0x3f51, + 0x007c, 0xa196, 0x2000, 0x00c0, 0x3e22, 0x6900, 0xa18e, 0x0001, + 0x00c0, 0x3e1e, 0x1078, 0x2aec, 0x0078, 0x3e10, 0x1078, 0x3e2a, + 0x0078, 0x3e10, 0xa196, 0x8000, 0x00c0, 0x3e10, 0x1078, 0x3fd7, + 0x0078, 0x3e10, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, + 0x0001, 0x0040, 0x3e37, 0xa196, 0x0023, 0x00c0, 0x3ef8, 0xa08e, + 0x0023, 0x00c0, 0x3e68, 0x1078, 0x404e, 0x0040, 0x3ef8, 0x7124, + 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x3e50, 0x7034, 0xa005, + 0x00c0, 0x3ef8, 0x2009, 0x0015, 0x1078, 0x5591, 0x0078, 0x3ef8, + 0xa08e, 0x0210, 0x00c0, 0x3e5a, 0x2009, 0x0015, 0x1078, 0x5591, + 0x0078, 0x3ef8, 0xa08e, 0x0100, 0x00c0, 0x3ef8, 0x7034, 0xa005, + 0x00c0, 0x3ef8, 0x2009, 0x0016, 0x1078, 0x5591, 0x0078, 0x3ef8, + 0xa08e, 0x0022, 0x00c0, 0x3ef8, 0x7030, 0xa08e, 0x0300, 0x00c0, + 0x3e79, 0x7034, 0xa005, 0x00c0, 0x3ef8, 0x2009, 0x0017, 0x0078, + 0x3eda, 0xa08e, 0x0500, 0x00c0, 0x3e85, 0x7034, 0xa005, 0x00c0, + 0x3ef8, 0x2009, 0x0018, 0x0078, 0x3eda, 0xa08e, 0x2010, 0x00c0, + 0x3e8d, 0x2009, 0x0019, 0x0078, 0x3eda, 0xa08e, 0x2110, 0x00c0, + 0x3e95, 0x2009, 0x001a, 0x0078, 0x3eda, 0xa08e, 0x5200, 0x00c0, + 0x3ea1, 0x7034, 0xa005, 0x00c0, 0x3ef8, 0x2009, 0x001b, 0x0078, + 0x3eda, 0xa08e, 0x5000, 0x00c0, 0x3ead, 0x7034, 0xa005, 0x00c0, + 0x3ef8, 0x2009, 0x001c, 0x0078, 0x3eda, 0xa08e, 0x2400, 0x00c0, + 0x3eb3, 0x0078, 0x3ed8, 0xa08e, 0x5300, 0x00c0, 0x3eb9, 0x0078, + 0x3ed8, 0xa08e, 0x0f00, 0x00c0, 0x3ec1, 0x2009, 0x0020, 0x0078, + 0x3eda, 0xa08e, 0x5300, 0x00c0, 0x3ec7, 0x0078, 0x3ed8, 0xa08e, + 0x6104, 0x00c0, 0x3ed8, 0x2009, 0x728e, 0x2011, 0x8015, 0x211c, + 0x8108, 0x2124, 0x1078, 0x2a53, 0x2009, 0x0023, 0x0078, 0x3eda, + 0x2009, 0x001d, 0x017e, 0x2011, 0x7283, 0x2204, 0x8211, 0x220c, + 0x1078, 0x1e1b, 0x00c0, 0x3efa, 0x1078, 0x3410, 0x00c0, 0x3efa, + 0x6612, 0x6516, 0x0c7e, 0x1078, 0x5504, 0x0040, 0x3efd, 0x017f, + 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x5591, + 0x0c7f, 0x007c, 0x017f, 0x0078, 0x3ef8, 0x0c7f, 0x0078, 0x3efa, + 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff, 0x00c0, 0x3f20, + 0xa596, 0xfffd, 0x00c0, 0x3f10, 0x2009, 0x007f, 0x0078, 0x3f4d, + 0xa596, 0xfffe, 0x00c0, 0x3f18, 0x2009, 0x007e, 0x0078, 0x3f4d, + 0xa596, 0xfffc, 0x00c0, 0x3f20, 0x2009, 0x0080, 0x0078, 0x3f4d, + 0x2011, 0x0000, 0x2021, 0x007e, 0x20a9, 0x0082, 0x2071, 0x6e7e, + 0x2e1c, 0x83ff, 0x00c0, 0x3f32, 0x82ff, 0x00c0, 0x3f41, 0x2410, + 0x0078, 0x3f41, 0x2368, 0x6b10, 0x007e, 0x2100, 0xa31e, 0x007f, + 0x00c0, 0x3f41, 0x6b14, 0xa31e, 0x00c0, 0x3f41, 0x2408, 0x0078, + 0x3f4d, 0x8420, 0x8e70, 0x00f0, 0x3f28, 0x82ff, 0x00c0, 0x3f4c, + 0xa085, 0x0001, 0x0078, 0x3f4e, 0x2208, 0xa006, 0x0d7f, 0x0e7f, + 0x007c, 0xa084, 0x0007, 0x0079, 0x3f56, 0x007c, 0x3f5e, 0x3f5e, + 0x3f5e, 0x3f5e, 0x3f5e, 0x3f5f, 0x3f78, 0x3fc0, 0x007c, 0x7110, + 0xd1bc, 0x0040, 0x3f77, 0x7120, 0x2160, 0xac8c, 0x0007, 0x00c0, + 0x3f77, 0xac8a, 0x7400, 0x0048, 0x3f77, 0x6854, 0xac02, 0x00c8, + 0x3f77, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x5591, 0x007c, + 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x3fbe, 0x2011, 0x7283, 0x2204, + 0x8211, 0x220c, 0x1078, 0x1e1b, 0x00c0, 0x3fbe, 0x1078, 0x3447, + 0x00c0, 0x3fbe, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, + 0x00c0, 0x3fa3, 0x0c7e, 0x1078, 0x5504, 0x017f, 0x0040, 0x3fbe, + 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x2009, 0x0044, 0x1078, + 0x5591, 0x0078, 0x3fbe, 0x0c7e, 0x1078, 0x5504, 0x017f, 0x0040, + 0x3fbe, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, + 0x00c0, 0x3fb6, 0x6007, 0x0005, 0x0078, 0x3fb8, 0x6007, 0x0001, + 0x6003, 0x0001, 0x1078, 0x4376, 0x1078, 0x476a, 0x0c7f, 0x007c, + 0x7110, 0xd1bc, 0x0040, 0x3fd6, 0x7020, 0x2060, 0xac84, 0x0007, + 0x00c0, 0x3fd6, 0xac82, 0x7400, 0x0048, 0x3fd6, 0x6854, 0xac02, + 0x00c8, 0x3fd6, 0x2009, 0x0045, 0x1078, 0x5591, 0x007c, 0x7110, + 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x3fe7, 0xa084, + 0x000f, 0xa08a, 0x0006, 0x10c8, 0x12b7, 0x1079, 0x3fe8, 0x007c, + 0x3fee, 0x3fef, 0x3fee, 0x3fee, 0x4030, 0x403f, 0x007c, 0x7110, + 0xd1bc, 0x00c0, 0x402f, 0x700c, 0x7108, 0x1078, 0x1e1b, 0x00c0, + 0x402f, 0x1078, 0x3410, 0x00c0, 0x402f, 0x6612, 0x6516, 0x6204, + 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x4018, 0x0c7e, + 0x1078, 0x5504, 0x017f, 0x0040, 0x402f, 0x611a, 0x601f, 0x0005, + 0x7120, 0x610a, 0x2009, 0x0028, 0x1078, 0x5591, 0x0078, 0x402f, + 0x0c7e, 0x1078, 0x5504, 0x017f, 0x0040, 0x402f, 0x611a, 0x601f, + 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x402b, 0x2009, + 0x0005, 0x0078, 0x402d, 0x2009, 0x0001, 0x1078, 0x5591, 0x007c, + 0x7110, 0xd1bc, 0x0040, 0x403e, 0x1078, 0x404e, 0x0040, 0x403e, + 0x7124, 0x610a, 0x2009, 0x0029, 0x1078, 0x5591, 0x007c, 0x7110, + 0xd1bc, 0x0040, 0x404d, 0x1078, 0x404e, 0x0040, 0x404d, 0x7124, + 0x610a, 0x2009, 0x002a, 0x1078, 0x5591, 0x007c, 0x7020, 0x2060, + 0xac84, 0x0007, 0x00c0, 0x4061, 0xac82, 0x7400, 0x0048, 0x4061, + 0x2001, 0x6d15, 0x2004, 0xac02, 0x00c8, 0x4061, 0xa085, 0x0001, + 0x007c, 0xa006, 0x0078, 0x4060, 0x2071, 0x6f23, 0x7003, 0x0003, + 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x7400, 0x7007, + 0x0000, 0x7026, 0x702b, 0x4ff2, 0x7032, 0x7037, 0x503e, 0x007c, + 0x2071, 0x6f23, 0x00e0, 0x40be, 0x2091, 0x6000, 0x700c, 0x8001, + 0x700e, 0x00c0, 0x4087, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, + 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x409b, 0x7020, 0x8001, + 0x7022, 0x00c0, 0x409b, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0, + 0x409b, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x40ac, 0x702c, + 0x8001, 0x702e, 0x00c0, 0x40ac, 0x702f, 0x0009, 0x8109, 0x7132, + 0x00c0, 0x40ac, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x40bd, + 0x7008, 0x8001, 0x700a, 0x00c0, 0x40bd, 0x700b, 0x0009, 0x8109, + 0x711a, 0x00c0, 0x40bd, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079, + 0x40c1, 0x40e8, 0x40e9, 0x4105, 0x0e7e, 0x2071, 0x6f23, 0x7018, + 0xa005, 0x00c0, 0x40cf, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, + 0x007c, 0x0e7e, 0x007e, 0x2071, 0x6f23, 0x701c, 0xa206, 0x00c0, + 0x40db, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, + 0x6f23, 0x6088, 0xa102, 0x0048, 0x40e6, 0x618a, 0x0e7f, 0x007c, + 0x007c, 0x7110, 0x1078, 0x3447, 0x00c0, 0x40fb, 0x6088, 0x8001, + 0x0048, 0x40fb, 0x608a, 0x00c0, 0x40fb, 0x127e, 0x2091, 0x8000, + 0x1078, 0x476a, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, 0x4103, + 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e, + 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x4134, 0x8001, 0x6016, + 0x00c0, 0x4134, 0x611c, 0xa186, 0x0003, 0x0040, 0x411b, 0xa186, + 0x0006, 0x00c0, 0x4132, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, + 0x0048, 0x4132, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, + 0x412b, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, + 0x0078, 0x4134, 0x1078, 0x5fea, 0x127f, 0xac88, 0x0008, 0x7116, + 0x2001, 0x6d16, 0x2004, 0xa102, 0x0048, 0x4142, 0x7017, 0x7400, + 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6f23, 0x7027, 0x07d0, + 0x7023, 0x0009, 0x0e7f, 0x007c, 0x2001, 0x6f2c, 0x2003, 0x0000, + 0x007c, 0x0e7e, 0x2071, 0x6f23, 0x7033, 0x07d0, 0x702f, 0x0009, + 0x0e7f, 0x007c, 0x2011, 0x6f2f, 0x2013, 0x0000, 0x007c, 0x0e7e, + 0x2071, 0x6f23, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, + 0x0c7e, 0x2061, 0x6fb2, 0x0c7f, 0x007c, 0xa184, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa080, 0x6fb2, 0x2060, 0x007c, 0x684c, 0xa08c, + 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x41ac, 0xd0b4, 0x00c0, 0x4188, + 0xd0bc, 0x00c0, 0x419a, 0x2009, 0x0006, 0x1078, 0x41cf, 0x007c, + 0xd0fc, 0x0040, 0x4195, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, + 0x41c8, 0xa08e, 0x0000, 0x00c0, 0x41c8, 0x2009, 0x0043, 0x1078, + 0x5591, 0x007c, 0xd0fc, 0x0040, 0x41a7, 0xa084, 0x0003, 0xa08e, + 0x0003, 0x0040, 0x41c8, 0xa08e, 0x0000, 0x00c0, 0x41c8, 0x2009, + 0x0042, 0x1078, 0x5591, 0x007c, 0xd0fc, 0x0040, 0x41be, 0xa084, + 0x0003, 0xa08e, 0x0003, 0x0040, 0x41c8, 0xa08e, 0x0002, 0x0040, + 0x41c2, 0x2009, 0x0041, 0x1078, 0x5591, 0x007c, 0x1078, 0x41cd, + 0x0078, 0x41bd, 0x2009, 0x0043, 0x1078, 0x5591, 0x0078, 0x41bd, + 0x2009, 0x0004, 0x1078, 0x41cf, 0x007c, 0x2009, 0x0001, 0x6010, + 0xa0ec, 0xf000, 0x0040, 0x41f3, 0x2068, 0x6952, 0x6800, 0x6012, + 0xa186, 0x0001, 0x00c0, 0x41ed, 0x694c, 0xa18c, 0x8100, 0xa18e, + 0x8100, 0x00c0, 0x41ed, 0x0c7e, 0x6944, 0x1078, 0x416d, 0x6204, + 0x8210, 0x0048, 0x41ec, 0x6206, 0x0c7f, 0x1078, 0x36a1, 0x6010, + 0xa06d, 0x10c0, 0x4176, 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010, + 0x2061, 0x6fb2, 0x6000, 0x81ff, 0x0040, 0x4201, 0xa205, 0x0078, + 0x4202, 0xa204, 0x6002, 0xace0, 0x0008, 0x00f0, 0x41fa, 0x0c7f, + 0x157f, 0x007c, 0x6808, 0xa005, 0x0040, 0x4212, 0x8001, 0x680a, + 0xa085, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x2079, 0x6f10, + 0x127f, 0x0d7e, 0x2069, 0x6f10, 0x6803, 0x0005, 0x2069, 0x0004, + 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, + 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x422e, 0x4238, 0x425d, + 0x428e, 0x423e, 0x425d, 0x4236, 0x4236, 0x4236, 0x1078, 0x12b7, + 0x1078, 0x414c, 0x1078, 0x476a, 0x0c7f, 0x007c, 0x62c0, 0x82ff, + 0x00c0, 0x4244, 0x0c7f, 0x007c, 0x2011, 0x318e, 0x1078, 0x40d1, + 0x7828, 0xa092, 0x0002, 0x00c8, 0x4253, 0x8000, 0x782a, 0x1078, + 0x31c2, 0x0078, 0x4242, 0x1078, 0x318e, 0x7807, 0x0003, 0x7827, + 0x0000, 0x782b, 0x0000, 0x0078, 0x4242, 0x1078, 0x414c, 0x62c0, + 0x82ff, 0x00c0, 0x426f, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, + 0x12b7, 0x2009, 0x0013, 0x1078, 0x5591, 0x0c7f, 0x007c, 0x0c7e, + 0x7824, 0xa065, 0x1040, 0x12b7, 0x7804, 0xa086, 0x0004, 0x0040, + 0x42cc, 0x7828, 0xa092, 0x2710, 0x00c8, 0x4285, 0x8000, 0x782a, + 0x0c7f, 0x1078, 0x4fd7, 0x0078, 0x426d, 0x1078, 0x6c76, 0x2009, + 0x0014, 0x1078, 0x5591, 0x0c7f, 0x0078, 0x426d, 0x2001, 0x6f2c, + 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x42a2, 0x782b, 0x0000, + 0x7824, 0xa065, 0x1040, 0x12b7, 0x2009, 0x0013, 0x1078, 0x55df, + 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x7824, 0xa005, 0x1040, 0x12b7, + 0x781c, 0xa06d, 0x1040, 0x12b7, 0x6800, 0xc0dc, 0x6802, 0x7924, + 0x2160, 0x1078, 0x556a, 0x693c, 0x81ff, 0x1040, 0x12b7, 0x8109, + 0x693e, 0x6854, 0xa015, 0x0040, 0x42c0, 0x7a1e, 0x0078, 0x42c2, + 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, + 0x1078, 0x476a, 0x0078, 0x42a0, 0x6104, 0xa186, 0x0002, 0x0040, + 0x42d7, 0xa186, 0x0004, 0x0040, 0x42d7, 0x0078, 0x4279, 0x7808, + 0xac06, 0x0040, 0x4279, 0x1078, 0x4671, 0x1078, 0x4376, 0x0c7f, + 0x1078, 0x476a, 0x0078, 0x426d, 0x0c7e, 0x6027, 0x0002, 0x2011, + 0x6f2f, 0x2013, 0x0000, 0x62c8, 0x82ff, 0x00c0, 0x42fe, 0x62c4, + 0x82ff, 0x00c0, 0x42fe, 0x793c, 0xa1e5, 0x0000, 0x0040, 0x42fc, + 0x2009, 0x0049, 0x1078, 0x5591, 0x0c7f, 0x007c, 0x6017, 0x0010, + 0x793c, 0x81ff, 0x0040, 0x42fc, 0x7944, 0xa192, 0x2710, 0x00c8, + 0x431d, 0x8108, 0x7946, 0x1078, 0x4151, 0x793c, 0xa188, 0x0007, + 0x210c, 0xa18e, 0x0006, 0x00c0, 0x4319, 0x6017, 0x0012, 0x0078, + 0x42fc, 0x6017, 0x0016, 0x0078, 0x42fc, 0x1078, 0x6c76, 0x793c, + 0x2160, 0x2009, 0x004a, 0x1078, 0x5591, 0x0078, 0x42fc, 0x007e, + 0x017e, 0x0c7e, 0x127e, 0x600f, 0x0000, 0x2c08, 0x2061, 0x6f10, + 0x2091, 0x8000, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0040, + 0x4342, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f, 0x0c7f, 0x017f, + 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x433d, 0x0d7e, 0x2069, + 0x6f10, 0x6000, 0xd0d4, 0x0040, 0x435d, 0x6820, 0x8000, 0x6822, + 0xa086, 0x0001, 0x00c0, 0x4356, 0x2c00, 0x681e, 0x6804, 0xa084, + 0x0007, 0x0079, 0x4772, 0x0d7f, 0x007c, 0xc0d5, 0x6002, 0x6818, + 0xa005, 0x0040, 0x436f, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00, + 0x681a, 0x0d7f, 0x685a, 0x2069, 0x6f10, 0x0078, 0x434d, 0x6056, + 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x434d, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, - 0x70b6, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0040, 0x4459, - 0xa080, 0x0003, 0x2102, 0x6112, 0x127f, 0x0c7f, 0x017f, 0x007f, - 0x007c, 0x6116, 0x6112, 0x0078, 0x4454, 0x0d7e, 0x2069, 0x70b6, - 0x6000, 0xd0d4, 0x0040, 0x4472, 0x6820, 0x8000, 0x6822, 0xa086, - 0x0001, 0x00c0, 0x446d, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, - 0x0079, 0x489b, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0040, 0x4484, - 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00, 0x681a, 0x0d7f, 0x685a, - 0x2069, 0x70b6, 0x0078, 0x4464, 0x6056, 0x605a, 0x2c00, 0x681a, - 0x681e, 0x0078, 0x4464, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x70b6, 0x6020, 0x8000, - 0x6022, 0x6008, 0xa005, 0x0040, 0x44a6, 0xa080, 0x0003, 0x2102, - 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x610e, 0x610a, - 0x0078, 0x44a1, 0x0c7e, 0x600f, 0x0000, 0x2c08, 0x2061, 0x70b6, - 0x6034, 0xa005, 0x0040, 0x44ba, 0xa080, 0x0003, 0x2102, 0x6136, - 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078, 0x44b8, 0x0f7e, 0x0e7e, - 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2071, 0x70b6, - 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x4520, - 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x451b, 0x703c, - 0xac06, 0x00c0, 0x44e0, 0x6003, 0x000a, 0x630a, 0x0078, 0x451b, - 0x7038, 0xac36, 0x00c0, 0x44e6, 0x660c, 0x763a, 0x7034, 0xac36, - 0x00c0, 0x44f4, 0x2c00, 0xaf36, 0x0040, 0x44f2, 0x2f00, 0x7036, - 0x0078, 0x44f4, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, - 0x0040, 0x44fd, 0x7e0e, 0x0078, 0x44fe, 0x2678, 0x600f, 0x0000, - 0x1078, 0x6216, 0x0040, 0x4516, 0x6010, 0x2068, 0x601c, 0xa086, - 0x0003, 0x00c0, 0x4529, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x63d5, 0x1078, 0x3720, 0x1078, 0x632a, 0x1078, 0x6337, - 0x0c7f, 0x0078, 0x44cd, 0x2c78, 0x600c, 0x2060, 0x0078, 0x44cd, - 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x450b, 0x1078, 0x6d80, - 0x0078, 0x4516, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, - 0x0000, 0x127e, 0x2091, 0x8000, 0x2079, 0x70b6, 0x7838, 0xa065, - 0x0040, 0x4569, 0x600c, 0x007e, 0x600f, 0x0000, 0x783c, 0xac06, - 0x00c0, 0x4550, 0x6003, 0x000a, 0x630a, 0x2c30, 0x0078, 0x4566, - 0x1078, 0x6216, 0x0040, 0x4564, 0x6010, 0x2068, 0x601c, 0xa086, - 0x0003, 0x00c0, 0x4572, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x3720, 0x1078, 0x632a, 0x1078, 0x6337, 0x007f, 0x0078, - 0x453f, 0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, - 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x455b, 0x1078, - 0x6d80, 0x0078, 0x4564, 0x027e, 0x1078, 0x458f, 0x1078, 0x4628, - 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079, 0x70b6, 0x2091, 0x8000, - 0x1078, 0x46bf, 0x1078, 0x4727, 0x127f, 0x0f7f, 0x007c, 0x0f7e, - 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x70b6, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0040, 0x4617, - 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x4612, 0x7024, - 0xac06, 0x00c0, 0x45d5, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, - 0x45d0, 0x1078, 0x4f8e, 0x68c3, 0x0000, 0x1078, 0x5405, 0x7027, + 0x6f10, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x4391, + 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f, + 0x007c, 0x610e, 0x610a, 0x0078, 0x438c, 0x0c7e, 0x600f, 0x0000, + 0x2c08, 0x2061, 0x6f10, 0x6034, 0xa005, 0x0040, 0x43a5, 0xa080, + 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078, + 0x43a3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, + 0x127e, 0x2071, 0x6f10, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, + 0x8cff, 0x0040, 0x4405, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, + 0x00c0, 0x4400, 0x703c, 0xac06, 0x00c0, 0x43cb, 0x6003, 0x000a, + 0x630a, 0x0078, 0x4400, 0x7038, 0xac36, 0x00c0, 0x43d1, 0x660c, + 0x763a, 0x7034, 0xac36, 0x00c0, 0x43df, 0x2c00, 0xaf36, 0x0040, + 0x43dd, 0x2f00, 0x7036, 0x0078, 0x43df, 0x7037, 0x0000, 0x660c, + 0x067e, 0x2c00, 0xaf06, 0x0040, 0x43e8, 0x7e0e, 0x0078, 0x43e9, + 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, + 0x00c0, 0x440e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, + 0x36a1, 0x1078, 0x6276, 0x1078, 0x6283, 0x0c7f, 0x0078, 0x43b8, + 0x2c78, 0x600c, 0x2060, 0x0078, 0x43b8, 0x127f, 0x007f, 0x027f, + 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, + 0x0006, 0x00c0, 0x43f2, 0x1078, 0x6bb3, 0x0078, 0x43fb, 0x007e, + 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, + 0x8000, 0x2079, 0x6f10, 0x7838, 0xa065, 0x0040, 0x444a, 0x600c, + 0x007e, 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x4435, 0x6003, + 0x000a, 0x630a, 0x2c30, 0x0078, 0x4447, 0x6010, 0x2068, 0x601c, + 0xa086, 0x0003, 0x00c0, 0x4453, 0x6837, 0x0103, 0x6b4a, 0x6847, + 0x0000, 0x1078, 0x36a1, 0x1078, 0x6276, 0x1078, 0x6283, 0x007f, + 0x0078, 0x4424, 0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, + 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x443c, + 0x1078, 0x6bb3, 0x0078, 0x4445, 0x027e, 0x1078, 0x4470, 0x1078, + 0x4507, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079, 0x6f10, 0x2091, + 0x8000, 0x1078, 0x4599, 0x1078, 0x4601, 0x127f, 0x0f7f, 0x007c, + 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2071, 0x6f10, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0040, + 0x44f6, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x44f1, + 0x7024, 0xac06, 0x00c0, 0x44b6, 0x2069, 0x0100, 0x68c0, 0xa005, + 0x0040, 0x44b1, 0x1078, 0x4fe5, 0x68c3, 0x0000, 0x1078, 0x54a4, + 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, + 0x0040, 0x44a6, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, + 0x6824, 0xd084, 0x0040, 0x44ae, 0x6827, 0x0001, 0x037f, 0x0078, + 0x44b6, 0x6003, 0x0009, 0x630a, 0x0078, 0x44f1, 0x7014, 0xac36, + 0x00c0, 0x44bc, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x44ca, + 0x2c00, 0xaf36, 0x0040, 0x44c8, 0x2f00, 0x7012, 0x0078, 0x44ca, + 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x44d3, + 0x7e0e, 0x0078, 0x44d4, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, + 0x1078, 0x6120, 0x0040, 0x44ea, 0x601c, 0xa086, 0x0003, 0x00c0, + 0x44fe, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36a1, + 0x1078, 0x6276, 0x1078, 0x6283, 0x1078, 0x5374, 0x0c7f, 0x0078, + 0x447e, 0x2c78, 0x600c, 0x2060, 0x0078, 0x447e, 0x127f, 0x007f, + 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, + 0x0006, 0x00c0, 0x44e1, 0x1078, 0x6bb3, 0x0078, 0x44ea, 0x0c7e, + 0x007e, 0x127e, 0x2091, 0x8000, 0xa280, 0x6e00, 0x2004, 0xa065, + 0x0040, 0x4595, 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, 0x2071, 0x6f10, + 0x6654, 0x7018, 0xac06, 0x00c0, 0x451e, 0x761a, 0x701c, 0xac06, + 0x00c0, 0x452a, 0x86ff, 0x00c0, 0x4529, 0x7018, 0x701e, 0x0078, + 0x452a, 0x761e, 0x6058, 0xa07d, 0x0040, 0x452f, 0x7e56, 0xa6ed, + 0x0000, 0x0040, 0x4535, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, + 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x33c4, 0x0040, + 0x4591, 0x7624, 0x86ff, 0x0040, 0x4586, 0xa680, 0x0004, 0x2004, + 0xad06, 0x00c0, 0x4586, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, + 0x0040, 0x457d, 0x1078, 0x4fe5, 0x68c3, 0x0000, 0x1078, 0x54a4, + 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, + 0x0040, 0x4566, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, + 0x6824, 0xd084, 0x0040, 0x456e, 0x6827, 0x0001, 0x037f, 0x0d7f, + 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4577, 0x8001, 0x603e, 0x2660, + 0x1078, 0x6283, 0x0c7f, 0x0078, 0x4586, 0x0d7f, 0x0c7e, 0x2660, + 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x453d, 0x6837, 0x0103, + 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36a1, 0x1078, 0x5374, 0x0078, + 0x453d, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, + 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, + 0xa065, 0x0040, 0x45f1, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, + 0xac06, 0x00c0, 0x45d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, + 0x45d0, 0x1078, 0x4fe5, 0x68c3, 0x0000, 0x1078, 0x54a4, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x45c5, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, - 0xd084, 0x0040, 0x45cd, 0x6827, 0x0001, 0x037f, 0x0078, 0x45d5, - 0x6003, 0x0009, 0x630a, 0x0078, 0x4612, 0x7014, 0xac36, 0x00c0, - 0x45db, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x45e9, 0x2c00, - 0xaf36, 0x0040, 0x45e7, 0x2f00, 0x7012, 0x0078, 0x45e9, 0x7013, - 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x45f2, 0x7e0e, - 0x0078, 0x45f3, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, - 0x6216, 0x0040, 0x460b, 0x601c, 0xa086, 0x0003, 0x00c0, 0x461f, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x63d5, 0x1078, - 0x3720, 0x1078, 0x632a, 0x1078, 0x6337, 0x1078, 0x52d5, 0x0c7f, - 0x0078, 0x459d, 0x2c78, 0x600c, 0x2060, 0x0078, 0x459d, 0x127f, - 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x4600, 0x1078, 0x6d80, 0x0078, 0x460b, - 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0xa280, 0x7020, 0x2004, - 0xa065, 0x0040, 0x46bb, 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, 0x2071, - 0x70b6, 0x6654, 0x7018, 0xac06, 0x00c0, 0x463f, 0x761a, 0x701c, - 0xac06, 0x00c0, 0x464b, 0x86ff, 0x00c0, 0x464a, 0x7018, 0x701e, - 0x0078, 0x464b, 0x761e, 0x6058, 0xa07d, 0x0040, 0x4650, 0x7e56, - 0xa6ed, 0x0000, 0x0040, 0x4656, 0x2f00, 0x685a, 0x6057, 0x0000, - 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x3448, - 0x0040, 0x46b7, 0x7624, 0x86ff, 0x0040, 0x46a7, 0xa680, 0x0004, - 0x2004, 0xad06, 0x00c0, 0x46a7, 0x0d7e, 0x2069, 0x0100, 0x68c0, - 0xa005, 0x0040, 0x469e, 0x1078, 0x4f8e, 0x68c3, 0x0000, 0x1078, - 0x5405, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, - 0x1000, 0x0040, 0x4687, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0040, 0x468f, 0x6827, 0x0001, 0x037f, - 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4698, 0x8001, 0x603e, - 0x2660, 0x1078, 0x6337, 0x0c7f, 0x0078, 0x46a7, 0x0d7f, 0x0c7e, - 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x465e, 0x8dff, - 0x0040, 0x46b3, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, - 0x63d5, 0x1078, 0x3720, 0x1078, 0x52d5, 0x0078, 0x465e, 0x067f, - 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, - 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, - 0x4717, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, - 0x46fc, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x46f6, 0x1078, - 0x4f8e, 0x68c3, 0x0000, 0x1078, 0x5405, 0x7827, 0x0000, 0x037e, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x46eb, 0x6803, - 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, - 0x46f3, 0x6827, 0x0001, 0x037f, 0x0078, 0x46fc, 0x6003, 0x0009, - 0x630a, 0x2c30, 0x0078, 0x4714, 0x6010, 0x2068, 0x1078, 0x6216, - 0x0040, 0x4710, 0x601c, 0xa086, 0x0003, 0x00c0, 0x471e, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3720, 0x1078, 0x632a, - 0x1078, 0x6337, 0x1078, 0x52d5, 0x007f, 0x0078, 0x46c6, 0x7e16, - 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x4707, 0x1078, 0x6d80, 0x0078, 0x4710, 0x007e, - 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, 0x4793, 0x6054, - 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, - 0x6002, 0x1078, 0x3448, 0x0040, 0x4790, 0x7e24, 0x86ff, 0x0040, - 0x4782, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4782, 0x0d7e, - 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4779, 0x1078, 0x4f8e, - 0x68c3, 0x0000, 0x1078, 0x5405, 0x7827, 0x0000, 0x037e, 0x2069, - 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4762, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x476a, - 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, - 0x4773, 0x8001, 0x603e, 0x2660, 0x1078, 0x6337, 0x0c7f, 0x0078, - 0x4782, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, - 0x0078, 0x4739, 0x8dff, 0x0040, 0x478c, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x1078, 0x3720, 0x1078, 0x52d5, 0x0078, 0x4739, - 0x007f, 0x0078, 0x472c, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, - 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x70b6, 0x7004, 0xa084, - 0x0007, 0x0079, 0x47a3, 0x47ad, 0x47b0, 0x47c9, 0x47e5, 0x482a, - 0x47ad, 0x47ad, 0x47ab, 0x1078, 0x1288, 0x0c7f, 0x0e7f, 0x007c, - 0x7024, 0xa065, 0x0040, 0x47be, 0x7020, 0x8001, 0x7022, 0x600c, - 0xa015, 0x0040, 0x47c5, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, - 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, - 0x47be, 0x6018, 0x2060, 0x1078, 0x3448, 0x6000, 0xc0dc, 0x6002, - 0x7020, 0x8001, 0x7022, 0x0040, 0x47da, 0x6054, 0xa015, 0x0040, - 0x47e1, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, - 0x007c, 0x7218, 0x721e, 0x0078, 0x47da, 0x7024, 0xa065, 0x0040, - 0x4827, 0x700c, 0xac06, 0x00c0, 0x47fc, 0x1078, 0x52d5, 0x600c, - 0xa015, 0x0040, 0x47f8, 0x720e, 0x600f, 0x0000, 0x0078, 0x4825, - 0x720e, 0x720a, 0x0078, 0x4825, 0x7014, 0xac06, 0x00c0, 0x480f, - 0x1078, 0x52d5, 0x600c, 0xa015, 0x0040, 0x480b, 0x7216, 0x600f, - 0x0000, 0x0078, 0x4825, 0x7216, 0x7212, 0x0078, 0x4825, 0x6018, - 0x2060, 0x1078, 0x3448, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x52d5, - 0x701c, 0xa065, 0x0040, 0x4825, 0x6054, 0xa015, 0x0040, 0x4823, - 0x721e, 0x0078, 0x4825, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, - 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4837, 0x1078, 0x52d5, - 0x600c, 0xa015, 0x0040, 0x483e, 0x720e, 0x600f, 0x0000, 0x1078, - 0x5405, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, - 0x0078, 0x4837, 0x0d7e, 0x2069, 0x70b6, 0x6830, 0xa084, 0x0003, - 0x0079, 0x484a, 0x4850, 0x4852, 0x4878, 0x4850, 0x1078, 0x1288, - 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x486e, - 0x683c, 0xa065, 0x0040, 0x4863, 0x600c, 0xa015, 0x0040, 0x486a, - 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, - 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078, 0x4863, 0x6843, 0x0000, - 0x6838, 0xa065, 0x0040, 0x4863, 0x6003, 0x0003, 0x0078, 0x4863, - 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, - 0x4890, 0x600c, 0xa015, 0x0040, 0x488c, 0x6a3a, 0x600f, 0x0000, - 0x683f, 0x0000, 0x0078, 0x4890, 0x683f, 0x0000, 0x683a, 0x6836, - 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x70b6, 0x6804, 0xa084, - 0x0007, 0x0079, 0x489b, 0x48a5, 0x4932, 0x4932, 0x4932, 0x4932, - 0x4934, 0x4932, 0x48a3, 0x1078, 0x1288, 0x6820, 0xa005, 0x00c0, - 0x48ab, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x48ba, - 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x497a, 0x0c7f, - 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040, 0x48c8, 0x6807, 0x0001, - 0x6826, 0x682b, 0x0000, 0x1078, 0x497a, 0x0c7f, 0x0d7f, 0x007c, - 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x492d, 0x704c, - 0xa00d, 0x0040, 0x48d7, 0x7088, 0xa005, 0x0040, 0x48ef, 0x7054, - 0xa075, 0x0040, 0x48e0, 0xa20e, 0x0040, 0x492d, 0x0078, 0x48e5, - 0x6818, 0xa20e, 0x0040, 0x492d, 0x2070, 0x704c, 0xa00d, 0x0040, - 0x48d7, 0x7088, 0xa005, 0x00c0, 0x48d7, 0x2e00, 0x681e, 0x733c, - 0x7038, 0xa302, 0x00c8, 0x48d7, 0x1078, 0x55a4, 0x0040, 0x492d, - 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, - 0xa08a, 0x199a, 0x0048, 0x4906, 0x2001, 0x1999, 0x8003, 0x801b, - 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xa1e0, - 0x2207, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, - 0x4c94, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, - 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, - 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, - 0x0078, 0x492b, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, - 0x4940, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x497a, - 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0x70b6, 0x6830, - 0xa086, 0x0000, 0x00c0, 0x4961, 0x6838, 0xa07d, 0x0040, 0x4961, - 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, - 0x2200, 0x027f, 0x1078, 0x19b3, 0x00c0, 0x4964, 0x127f, 0x1078, - 0x4ec1, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, - 0x0002, 0x780c, 0xa015, 0x0040, 0x4976, 0x6a3a, 0x780f, 0x0000, - 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x4961, 0x683a, 0x6836, - 0x0078, 0x4970, 0x601c, 0xa084, 0x0007, 0x1079, 0x4980, 0x007c, - 0x4988, 0x498d, 0x4bcc, 0x4c64, 0x498d, 0x4bcc, 0x4c64, 0x4988, - 0x1078, 0x479a, 0x1078, 0x4893, 0x007c, 0x157e, 0x137e, 0x147e, - 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1288, 0x6118, - 0x2178, 0x79a0, 0xa1f8, 0x2207, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, - 0x2061, 0x0100, 0x619a, 0x1079, 0x49ab, 0x0f7f, 0x0c7f, 0x147f, - 0x137f, 0x157f, 0x007c, 0x49dd, 0x4a15, 0x4a2d, 0x4a66, 0x4a93, - 0x4a9b, 0x4abc, 0x4acd, 0x4ade, 0x4ae6, 0x4af7, 0x4ae6, 0x4b3f, - 0x4acd, 0x4b60, 0x4b68, 0x4ade, 0x4b68, 0x4b79, 0x49db, 0x49db, - 0x49db, 0x49db, 0x49db, 0x49db, 0x49db, 0x49db, 0x49db, 0x49db, - 0x49db, 0x49db, 0x504c, 0x5061, 0x49db, 0x49db, 0x49db, 0x49db, - 0x4abc, 0x4ae6, 0x49db, 0x4a2d, 0x4a66, 0x49db, 0x551f, 0x4ae6, - 0x49db, 0x5542, 0x4ae6, 0x1078, 0x1288, 0x20a1, 0x020b, 0x1078, - 0x4b8e, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x6f51, - 0x6804, 0xd084, 0x0040, 0x49f7, 0x6828, 0x20a3, 0x0000, 0x017e, - 0x1078, 0x1feb, 0x21a2, 0x017f, 0x0d7f, 0x0078, 0x49fc, 0x0d7f, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x6f05, - 0x53a6, 0x20a9, 0x0004, 0x2099, 0x6f01, 0x53a6, 0x20a3, 0x0000, - 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x001c, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, 0x1078, - 0x4b8e, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030, - 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0x6f05, 0x53a6, - 0x60c3, 0x0010, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, 0x1078, - 0x4b8e, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x2099, 0x70a0, 0x20a9, - 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x6f05, 0x53a6, 0x20a9, - 0x0004, 0x2099, 0x6f01, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, - 0x00f0, 0x4a46, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4a4c, - 0x2099, 0x70a8, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, - 0x0000, 0x00f0, 0x4a57, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, - 0x4a5d, 0x60c3, 0x0074, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, - 0x1078, 0x4b8e, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, - 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x0f7e, 0x2079, 0x6f51, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4a82, - 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4a87, 0xa085, 0x0010, 0xa085, - 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b8e, 0x20a3, - 0x5000, 0x0078, 0x4a33, 0x20a1, 0x020b, 0x1078, 0x4b8e, 0x20a3, - 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0014, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4bad, - 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0004, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, 0x1078, - 0x4bad, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, - 0x2a00, 0x60c3, 0x0008, 0x1078, 0x4f7a, 0x007c, 0x20a1, 0x020b, - 0x1078, 0x4bad, 0x20a3, 0x0200, 0x0078, 0x4a33, 0x20a1, 0x020b, - 0x1078, 0x4bad, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, - 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x4f7a, 0x007c, 0x0d7e, - 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0210, 0x20a3, 0x0014, - 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, - 0x4b1d, 0x6998, 0xa184, 0xc000, 0x00c0, 0x4b19, 0xd1ec, 0x0040, - 0x4b15, 0x20a3, 0x2100, 0x0078, 0x4b1f, 0x20a3, 0x0100, 0x0078, - 0x4b1f, 0x20a3, 0x0400, 0x0078, 0x4b1f, 0x20a3, 0x0700, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x6f51, - 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4b2f, 0xa085, 0x0020, 0xd1a4, - 0x0040, 0x4b34, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, - 0x20a2, 0x60c3, 0x0014, 0x1078, 0x4f7a, 0x0d7f, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, - 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, + 0xd084, 0x0040, 0x45cd, 0x6827, 0x0001, 0x037f, 0x0078, 0x45d6, + 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x45ee, 0x6010, 0x2068, + 0x1078, 0x6120, 0x0040, 0x45ea, 0x601c, 0xa086, 0x0003, 0x00c0, + 0x45f8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36a1, + 0x1078, 0x6276, 0x1078, 0x6283, 0x1078, 0x5374, 0x007f, 0x0078, + 0x45a0, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, + 0x601c, 0xa086, 0x0006, 0x00c0, 0x45e1, 0x1078, 0x6bb3, 0x0078, + 0x45ea, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, + 0x466a, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, + 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x33c4, 0x0040, 0x4667, 0x7e24, + 0x86ff, 0x0040, 0x465c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, + 0x465c, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4653, + 0x1078, 0x4fe5, 0x68c3, 0x0000, 0x1078, 0x54a4, 0x7827, 0x0000, + 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x463c, + 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0040, 0x4644, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, + 0xa005, 0x0040, 0x464d, 0x8001, 0x603e, 0x2660, 0x1078, 0x6283, + 0x0c7f, 0x0078, 0x465c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, + 0x630a, 0x0c7f, 0x0078, 0x4613, 0x6837, 0x0103, 0x6b4a, 0x6847, + 0x0000, 0x1078, 0x36a1, 0x1078, 0x5374, 0x0078, 0x4613, 0x007f, + 0x0078, 0x4606, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f, + 0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x6f10, 0x7004, 0xa084, 0x0007, + 0x0079, 0x467a, 0x4684, 0x4687, 0x46a0, 0x46bc, 0x4701, 0x4684, + 0x4682, 0x4682, 0x1078, 0x12b7, 0x0c7f, 0x0e7f, 0x007c, 0x7024, + 0xa065, 0x0040, 0x4695, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, + 0x0040, 0x469c, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, + 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, 0x4695, + 0x6018, 0x2060, 0x1078, 0x33c4, 0x6000, 0xc0dc, 0x6002, 0x7020, + 0x8001, 0x7022, 0x0040, 0x46b1, 0x6054, 0xa015, 0x0040, 0x46b8, + 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, + 0x7218, 0x721e, 0x0078, 0x46b1, 0x7024, 0xa065, 0x0040, 0x46fe, + 0x700c, 0xac06, 0x00c0, 0x46d3, 0x1078, 0x5374, 0x600c, 0xa015, + 0x0040, 0x46cf, 0x720e, 0x600f, 0x0000, 0x0078, 0x46fc, 0x720e, + 0x720a, 0x0078, 0x46fc, 0x7014, 0xac06, 0x00c0, 0x46e6, 0x1078, + 0x5374, 0x600c, 0xa015, 0x0040, 0x46e2, 0x7216, 0x600f, 0x0000, + 0x0078, 0x46fc, 0x7216, 0x7212, 0x0078, 0x46fc, 0x6018, 0x2060, + 0x1078, 0x33c4, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x5374, 0x701c, + 0xa065, 0x0040, 0x46fc, 0x6054, 0xa015, 0x0040, 0x46fa, 0x721e, + 0x0078, 0x46fc, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, 0x0e7f, + 0x007c, 0x7024, 0xa065, 0x0040, 0x470e, 0x1078, 0x5374, 0x600c, + 0xa015, 0x0040, 0x4715, 0x720e, 0x600f, 0x0000, 0x1078, 0x54a4, + 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, 0x0078, + 0x470e, 0x0d7e, 0x2069, 0x6f10, 0x6830, 0xa084, 0x0003, 0x0079, + 0x4721, 0x4727, 0x4729, 0x474f, 0x4725, 0x1078, 0x12b7, 0x0d7f, + 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x4745, 0x683c, + 0xa065, 0x0040, 0x473a, 0x600c, 0xa015, 0x0040, 0x4741, 0x6a3a, + 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, 0x0d7f, + 0x007c, 0x683a, 0x6836, 0x0078, 0x473a, 0x6843, 0x0000, 0x6838, + 0xa065, 0x0040, 0x473a, 0x6003, 0x0003, 0x0078, 0x473a, 0x0c7e, + 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, 0x4767, + 0x600c, 0xa015, 0x0040, 0x4763, 0x6a3a, 0x600f, 0x0000, 0x683f, + 0x0000, 0x0078, 0x4767, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, + 0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x6f10, 0x6804, 0xa084, 0x0007, + 0x0079, 0x4772, 0x477c, 0x4810, 0x4810, 0x4810, 0x4810, 0x4812, + 0x477a, 0x477a, 0x1078, 0x12b7, 0x6820, 0xa005, 0x00c0, 0x4782, + 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4791, 0x6807, + 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x4858, 0x0c7f, 0x0d7f, + 0x007c, 0x6814, 0xa065, 0x0040, 0x479f, 0x6807, 0x0001, 0x6826, + 0x682b, 0x0000, 0x1078, 0x4858, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, + 0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x480b, 0x704c, 0xa00d, + 0x0040, 0x47ae, 0x7088, 0xa005, 0x0040, 0x47c6, 0x7054, 0xa075, + 0x0040, 0x47b7, 0xa20e, 0x0040, 0x480b, 0x0078, 0x47bc, 0x6818, + 0xa20e, 0x0040, 0x480b, 0x2070, 0x704c, 0xa00d, 0x0040, 0x47ae, + 0x7088, 0xa005, 0x00c0, 0x47ae, 0x2e00, 0x681e, 0x733c, 0x7038, + 0xa302, 0x00c8, 0x47ae, 0x1078, 0x5539, 0x0040, 0x480b, 0x8318, + 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, 0xa08a, + 0x199a, 0x0048, 0x47dd, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, + 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc, 0x0040, + 0x47ed, 0x2009, 0x0000, 0x0078, 0x47f2, 0xa1e0, 0x2091, 0x2c0c, + 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, 0x4c44, 0x7300, + 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, + 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, + 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4809, + 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x481e, 0x6807, + 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x4858, 0x0c7f, 0x0d7f, + 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0x6f10, 0x6830, 0xa086, 0x0000, + 0x00c0, 0x483f, 0x6838, 0xa07d, 0x0040, 0x483f, 0x6833, 0x0001, + 0x683e, 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, + 0x1078, 0x1838, 0x00c0, 0x4842, 0x127f, 0x1078, 0x4ed5, 0x0d7f, + 0x0f7f, 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, + 0xa015, 0x0040, 0x4854, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, + 0x683f, 0x0000, 0x0078, 0x483f, 0x683a, 0x6836, 0x0078, 0x484e, + 0x601c, 0xa084, 0x000f, 0x1079, 0x485e, 0x007c, 0x4867, 0x4869, + 0x4b33, 0x4c15, 0x4869, 0x4b33, 0x4c15, 0x4867, 0x4869, 0x1078, + 0x12b7, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, + 0x0024, 0x10c8, 0x12b7, 0x6118, 0x2178, 0x79a0, 0xa1f8, 0x2091, + 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079, + 0x4887, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x48ad, + 0x48ec, 0x4904, 0x494c, 0x4979, 0x4981, 0x49a2, 0x49b3, 0x49c4, + 0x49cc, 0x49dd, 0x49cc, 0x4a25, 0x49b3, 0x4a55, 0x4a5d, 0x49c4, + 0x4a5d, 0x4a6e, 0x48ab, 0x48ab, 0x48ab, 0x48ab, 0x48ab, 0x48ab, + 0x48ab, 0x48ab, 0x48ab, 0x48ab, 0x48ab, 0x48ab, 0x50b8, 0x50cd, + 0x50f0, 0x5114, 0x49a2, 0x1078, 0x12b7, 0x20a1, 0x020b, 0x1078, + 0x4a83, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x6d51, + 0x6804, 0xd084, 0x0040, 0x48ce, 0x6828, 0x017e, 0x2069, 0x6d00, + 0x694c, 0xa106, 0x017f, 0x00c0, 0x48ce, 0x20a3, 0x0000, 0x6030, + 0xa084, 0x00ff, 0x20a2, 0x0d7f, 0x0078, 0x48d3, 0x0d7f, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x6d05, 0x53a6, + 0x20a9, 0x0004, 0x2099, 0x6d01, 0x53a6, 0x20a3, 0x0000, 0x6030, + 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, + 0x001c, 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a83, + 0x20a3, 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, + 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0x6d05, 0x53a6, 0x60c3, + 0x0010, 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a83, + 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4917, + 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0078, 0x4919, 0x20a3, + 0x0300, 0x20a3, 0x0000, 0x2099, 0x6f00, 0x20a9, 0x0008, 0x53a6, + 0x20a9, 0x0004, 0x2099, 0x6d05, 0x53a6, 0x20a9, 0x0004, 0x2099, + 0x6d01, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x492c, + 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4932, 0x2099, 0x6f08, + 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, + 0x493d, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x4943, 0x60c3, + 0x0074, 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a83, + 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, + 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, + 0x6d51, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4968, 0xa085, 0x0020, + 0xd1a4, 0x0040, 0x496d, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x4fd1, + 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a83, 0x20a3, 0x5000, 0x0078, + 0x4919, 0x20a1, 0x020b, 0x1078, 0x4a83, 0x20a3, 0x2110, 0x20a3, + 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x4f7a, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0200, 0x0078, 0x49e3, - 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x4f7a, - 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, - 0x4bad, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, - 0x0000, 0x60c3, 0x0008, 0x1078, 0x4f7a, 0x007c, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, - 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, - 0x4f69, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x20a3, 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000, - 0x6230, 0x22a2, 0x20a3, 0x0198, 0x20a3, 0x0000, 0x1078, 0x4f69, - 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x027f, 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, - 0x0085, 0x1048, 0x1288, 0xa08a, 0x008c, 0x10c8, 0x1288, 0x6118, - 0x2178, 0x79a0, 0xa1f8, 0x2207, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, - 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x1079, 0x4bea, 0x0f7f, - 0x0c7f, 0x007c, 0x4bf3, 0x4bfe, 0x4c18, 0x4bf1, 0x4bf1, 0x4bf1, - 0x4bf3, 0x1078, 0x1288, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4c2b, - 0x60c3, 0x0000, 0x1078, 0x4f7a, 0x147f, 0x007c, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x4c3e, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, - 0x20a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x4f7a, 0x147f, 0x007c, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x4c51, 0x20a3, 0x0003, 0x20a3, - 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, - 0x4f7a, 0x147f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x20a3, 0x8100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0078, 0x4b9f, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3, - 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, - 0x4bbe, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x8500, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, - 0x20a3, 0x0000, 0x0078, 0x4bbe, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, - 0xa08a, 0x0040, 0x1048, 0x1288, 0xa08a, 0x0050, 0x10c8, 0x1288, - 0x7918, 0x2160, 0x61a0, 0xa1e0, 0x2207, 0x2c0c, 0xa18c, 0x00ff, - 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x4c82, 0x0f7f, - 0x0c7f, 0x007c, 0x4c94, 0x4d46, 0x4d07, 0x4e55, 0x4c92, 0x4c92, - 0x4c92, 0x4c92, 0x4c92, 0x4c92, 0x4c92, 0x51ee, 0x51ff, 0x5210, - 0x5221, 0x4c92, 0x1078, 0x1288, 0x0d7e, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x4ce7, 0x7910, 0x2168, 0x6944, 0xa18c, 0x00ff, + 0x0022, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, + 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4afa, 0x20a3, 0x0200, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, + 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4afa, 0x20a3, + 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, + 0x0008, 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4afa, + 0x20a3, 0x0200, 0x0078, 0x4919, 0x20a1, 0x020b, 0x1078, 0x4afa, + 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, 0x20a2, + 0x60c3, 0x0008, 0x1078, 0x4fd1, 0x007c, 0x0d7e, 0x20a1, 0x020b, + 0x1078, 0x4afa, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, + 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x4a03, 0x6998, + 0xa184, 0xc000, 0x00c0, 0x49ff, 0xd1ec, 0x0040, 0x49fb, 0x20a3, + 0x2100, 0x0078, 0x4a05, 0x20a3, 0x0100, 0x0078, 0x4a05, 0x20a3, + 0x0400, 0x0078, 0x4a05, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, + 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x6d51, 0x7904, 0x0f7f, + 0xd1ac, 0x00c0, 0x4a15, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4a1a, + 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3, + 0x0014, 0x1078, 0x4fd1, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4afa, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x6018, + 0x0d7e, 0x2068, 0x6804, 0x0d7f, 0xa084, 0x00ff, 0xa086, 0x0006, + 0x0040, 0x4a3e, 0x20a3, 0x0400, 0x0078, 0x4a40, 0x20a3, 0x0100, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x60c3, 0x0014, 0x1078, 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4afa, 0x20a3, 0x0200, 0x0078, 0x48b3, 0x20a1, 0x020b, 0x1078, + 0x4afa, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, + 0x2a00, 0x60c3, 0x0008, 0x1078, 0x4fd1, 0x007c, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, 0x4afa, 0x20a3, 0x0100, + 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, + 0x1078, 0x4fd1, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0, 0x4a96, + 0x20a3, 0x22ff, 0x20a3, 0xfffe, 0x0078, 0x4ac4, 0xa286, 0x007f, + 0x00c0, 0x4aa1, 0x0d7e, 0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, + 0x4ab8, 0xd2bc, 0x0040, 0x4ac0, 0xa286, 0x0080, 0x0d7e, 0x00c0, + 0x4aaf, 0x20a3, 0x22ff, 0x20a3, 0xfffc, 0x0078, 0x4ab8, 0xa2e8, + 0x6e00, 0x2d6c, 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, + 0x2069, 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x4ac8, + 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, + 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, 0x4fc0, 0x22a2, 0x20a3, + 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, + 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0x6d19, 0x2da6, + 0x8d68, 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, + 0x4acc, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, + 0x0000, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, + 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x4b19, 0x0d7e, + 0xa0e8, 0x6e00, 0x2d6c, 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, + 0x20a2, 0x2069, 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, + 0x4b21, 0x20a3, 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, + 0x22a2, 0x20a3, 0x0198, 0x20a3, 0x0000, 0x1078, 0x4fc0, 0x22a2, + 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x027f, 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0025, + 0x1048, 0x12b7, 0xa08a, 0x002c, 0x10c8, 0x12b7, 0x6118, 0x2178, + 0x79a0, 0xa1f8, 0x2091, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, + 0x0100, 0x619a, 0xa082, 0x0025, 0x1079, 0x4b51, 0x0f7f, 0x0c7f, + 0x007c, 0x4b5a, 0x4b65, 0x4b7f, 0x4b58, 0x4b58, 0x4b58, 0x4b5a, + 0x1078, 0x12b7, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4b8e, 0x60c3, + 0x0000, 0x1078, 0x4fd1, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4bbb, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, + 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x000c, 0x1078, 0x4fd1, 0x147f, 0x007c, 0x147e, + 0x20a1, 0x020b, 0x1078, 0x4be8, 0x20a3, 0x0003, 0x20a3, 0x0300, + 0x60c3, 0x0004, 0x1078, 0x4fd1, 0x147f, 0x007c, 0x027e, 0x20e1, + 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, + 0x007e, 0x0048, 0x4bad, 0x0d7e, 0xa0e8, 0x6e00, 0x2d6c, 0x6810, + 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x6d19, 0x2da6, + 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x4bb5, 0x20a3, 0x8100, 0x6298, + 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009, 0x20a3, + 0x0000, 0x0078, 0x4acc, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x4bda, + 0x0d7e, 0xa0e8, 0x6e00, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, + 0x6814, 0x20a2, 0x2069, 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, + 0x0078, 0x4be2, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4b25, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, + 0x2004, 0xa092, 0x007e, 0x0048, 0x4c07, 0x0d7e, 0xa0e8, 0x6e00, + 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, + 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x4c0f, 0x20a3, + 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, + 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4b25, 0x0c7e, 0x0f7e, 0x2c78, + 0x7804, 0xa08a, 0x0040, 0x1048, 0x12b7, 0xa08a, 0x004f, 0x10c8, + 0x12b7, 0x7918, 0x2160, 0x61a0, 0xa1e0, 0x2091, 0x2c0c, 0xa18c, + 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x4c33, + 0x0f7f, 0x0c7f, 0x007c, 0x4c44, 0x4d28, 0x4cd0, 0x4e50, 0x4c42, + 0x4c42, 0x4c42, 0x4c42, 0x4c42, 0x4c42, 0x4c42, 0x528d, 0x529e, + 0x52af, 0x52c0, 0x1078, 0x12b7, 0x0d7e, 0x157e, 0x147e, 0x20a1, + 0x020b, 0x1078, 0x4c93, 0x7910, 0x2168, 0x6944, 0xa18c, 0x00ff, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006, - 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x4cb1, 0x20a3, 0x0002, 0x0078, - 0x4cbd, 0xd1b4, 0x0040, 0x4cb8, 0x20a3, 0x0001, 0x0078, 0x4cbd, - 0x20a3, 0x0000, 0x2230, 0x0078, 0x4cbf, 0x6a80, 0x6e7c, 0x20a9, + 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x4c61, 0x20a3, 0x0002, 0x0078, + 0x4c6d, 0xd1b4, 0x0040, 0x4c68, 0x20a3, 0x0001, 0x0078, 0x4c6d, + 0x20a3, 0x0000, 0x2230, 0x0078, 0x4c6f, 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0, - 0x4cc3, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, - 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x70d2, 0x2003, - 0x07d0, 0x2001, 0x70d1, 0x2003, 0x0009, 0x2001, 0x70d7, 0x2003, - 0x0002, 0x1078, 0x14b7, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0xa006, 0x20a3, 0x0600, 0x6198, - 0x21a2, 0x20a2, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a2, 0x22a2, - 0x20a2, 0x2fa2, 0x20a3, 0xffff, 0x20a2, 0x20a2, 0x007c, 0x0d7e, - 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4d27, 0x7810, - 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, - 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, - 0x1078, 0x4f7a, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0500, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, - 0x1078, 0x4f69, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, - 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e36, 0x7810, 0x2068, - 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, - 0xf000, 0x00c0, 0x4d63, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, - 0x4d6b, 0x0078, 0x4d66, 0xa006, 0x1079, 0x4d6b, 0x147f, 0x137f, - 0x157f, 0x0d7f, 0x007c, 0x4d75, 0x4dd7, 0x4ddb, 0x4dfe, 0x4e0b, - 0x4e1d, 0x4e21, 0x4d73, 0x1078, 0x1288, 0x017e, 0x037e, 0x694c, - 0xa18c, 0x0003, 0xa186, 0x0000, 0x00c0, 0x4d88, 0x6b78, 0x23a2, - 0x6868, 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x4e02, - 0xa186, 0x0001, 0x00c0, 0x4dd2, 0x6b78, 0x23a2, 0x6868, 0x20a2, - 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, - 0x2009, 0x0018, 0xa384, 0x0300, 0x0040, 0x4dd1, 0xd3c4, 0x0040, - 0x4da3, 0x687c, 0xa108, 0xd3cc, 0x0040, 0x4da8, 0x6874, 0xa108, - 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, - 0x8000, 0x00f0, 0x4dad, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, - 0x0003, 0x0040, 0x4dd1, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, - 0x22a2, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x4f69, 0x22a2, 0x20a3, - 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x4f7a, 0x007c, 0x20a3, - 0x0008, 0x0078, 0x4e00, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, - 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, - 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x60c3, 0x0032, 0x1078, 0x4f7a, 0x007c, 0x20a3, 0x0028, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, - 0x1078, 0x4f7a, 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x60c3, 0x0020, 0x1078, 0x4f7a, 0x007c, 0x20a3, 0x0008, 0x0078, - 0x4e00, 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, - 0x8001, 0x00c0, 0x4e2f, 0x22a2, 0x037f, 0x0078, 0x4e00, 0x20a3, - 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x4e02, 0x027e, 0x20e1, + 0x4c73, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, + 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x6f2c, 0x2003, + 0x07d0, 0x2001, 0x6f2b, 0x2003, 0x0009, 0x1078, 0x14e4, 0x147f, + 0x157f, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, + 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, + 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x4cb9, 0x0d7e, + 0xa0e8, 0x6e00, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, + 0x20a2, 0x2069, 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, + 0x4cc1, 0x20a3, 0x0600, 0x6198, 0x21a2, 0x20a3, 0x0000, 0x6130, + 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, + 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, + 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4cf0, + 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, + 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, + 0x000c, 0x1078, 0x4fd1, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, + 0x2004, 0xd0bc, 0x0040, 0x4d0e, 0x0d7e, 0xa0e8, 0x6e00, 0x2d6c, + 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x6d19, + 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x4d16, 0x20a3, 0x0500, + 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, + 0x20a3, 0x0000, 0x1078, 0x4fc0, 0x22a2, 0x20a3, 0x0000, 0x7a08, + 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, + 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e18, + 0x7810, 0x2068, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, + 0x7810, 0xa084, 0xf000, 0x00c0, 0x4d45, 0x7810, 0xa084, 0x0700, + 0x8007, 0x1079, 0x4d4d, 0x0078, 0x4d48, 0xa006, 0x1079, 0x4d4d, + 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x4d57, 0x4db9, 0x4dbd, + 0x4de0, 0x4ded, 0x4dff, 0x4e03, 0x4d55, 0x1078, 0x12b7, 0x017e, + 0x037e, 0x694c, 0xa18c, 0x0003, 0xa186, 0x0000, 0x00c0, 0x4d6a, + 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, + 0x0078, 0x4de4, 0xa186, 0x0001, 0x00c0, 0x4db4, 0x6b78, 0x23a2, + 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, + 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040, 0x4db3, + 0xd3c4, 0x0040, 0x4d85, 0x687c, 0xa108, 0xd3cc, 0x0040, 0x4d8a, + 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, + 0x831f, 0x23a2, 0x8000, 0x00f0, 0x4d8f, 0x157f, 0x22a2, 0x22a2, + 0x22a2, 0xa184, 0x0003, 0x0040, 0x4db3, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, - 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, - 0x4f69, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, - 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, - 0x4e68, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, - 0x4e70, 0x4e70, 0x4e72, 0x4e70, 0x4e70, 0x4e70, 0x4e97, 0x4e70, - 0x1078, 0x1288, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, - 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4ea1, 0x0d7e, 0x2069, - 0x6f51, 0x6804, 0xd0bc, 0x0040, 0x4e8c, 0x682c, 0xa084, 0x00ff, - 0x8007, 0x20a2, 0x0078, 0x4e8e, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, - 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x4f7a, 0x007c, 0x20a1, - 0x020b, 0x2009, 0x0003, 0x1078, 0x4ea1, 0x20a3, 0x7f00, 0x0078, - 0x4e8f, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0100, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888, - 0xa18d, 0x0008, 0x21a2, 0x1078, 0x4f69, 0x22a2, 0x20a3, 0x0000, - 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, - 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x2061, 0x0100, 0x2071, 0x6f00, - 0x6130, 0x7818, 0x2068, 0x68a0, 0xa080, 0x2207, 0x2014, 0xa294, - 0x00ff, 0x781c, 0xa086, 0x0006, 0x0040, 0x4f08, 0x6063, 0x0100, - 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008, - 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, - 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, - 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, - 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, - 0x6017, 0x0016, 0x1078, 0x4209, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, - 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, - 0x4f3d, 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, + 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x4fc0, + 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x4fd1, + 0x007c, 0x20a3, 0x0008, 0x0078, 0x4de2, 0x20a3, 0x0302, 0x22a2, + 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, + 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, + 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, + 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x4fd1, 0x007c, + 0x20a3, 0x0028, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, + 0x60c3, 0x0018, 0x1078, 0x4fd1, 0x007c, 0x20a3, 0x0100, 0x22a2, + 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, + 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x4fd1, 0x007c, 0x20a3, + 0x0008, 0x0078, 0x4de2, 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, + 0xa384, 0x00ff, 0x8001, 0x00c0, 0x4e11, 0x22a2, 0x037f, 0x0078, + 0x4de2, 0x20a3, 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x4de4, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, + 0x2004, 0xd0bc, 0x0040, 0x4e36, 0x0d7e, 0xa0e8, 0x6e00, 0x2d6c, + 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x6d19, + 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x4e3e, 0x20a3, 0x0700, + 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, + 0x20a3, 0x0000, 0x1078, 0x4fc0, 0x22a2, 0x20a3, 0x0000, 0x7a08, + 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, + 0x0d7e, 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, + 0x0700, 0x8007, 0x1079, 0x4e63, 0x037f, 0x017f, 0x147f, 0x137f, + 0x157f, 0x0d7f, 0x007c, 0x4e6b, 0x4e6b, 0x4e6d, 0x4e6b, 0x4e6b, + 0x4e6b, 0x4e92, 0x4e6b, 0x1078, 0x12b7, 0x7910, 0xa18c, 0xf8ff, + 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, + 0x4e9c, 0x0d7e, 0x2069, 0x6d51, 0x6804, 0xd0bc, 0x0040, 0x4e87, + 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x4e89, 0x20a3, + 0x3f00, 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, + 0x4fd1, 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4e9c, + 0x20a3, 0x7f00, 0x0078, 0x4e8a, 0x027e, 0x20e1, 0x9080, 0x20e1, + 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x4eba, + 0x0d7e, 0xa0e8, 0x6e00, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, + 0x6814, 0x20a2, 0x2069, 0x6d19, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, + 0x0078, 0x4ec2, 0x20a3, 0x0100, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, + 0x4fc0, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, + 0x057e, 0x047e, 0x037e, 0x2061, 0x0100, 0x2071, 0x6d00, 0x6130, + 0x7818, 0x2068, 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x4eee, 0xa080, + 0x2091, 0x2014, 0xa294, 0x00ff, 0x0078, 0x4ef2, 0x6910, 0x6a14, + 0x7364, 0x7468, 0x781c, 0xa086, 0x0006, 0x0040, 0x4f3d, 0xd5bc, + 0x0040, 0x4f02, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, + 0x0078, 0x4f08, 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, + 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, + 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, + 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, + 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, + 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x4f31, 0x2011, + 0x0000, 0x629e, 0x6017, 0x0016, 0x1078, 0x4151, 0x037f, 0x047f, + 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, + 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x4f83, 0xd5bc, 0x0040, + 0x4f51, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, + 0x4f57, 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, - 0x629e, 0x6017, 0x0012, 0x0078, 0x4f02, 0x6063, 0x0700, 0x6266, - 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, - 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, - 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, - 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, - 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, - 0x4f02, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, - 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0x70b6, 0x6843, 0x0001, - 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x1078, 0x4f85, 0x1078, 0x41f9, 0x007c, 0x007e, 0x6014, 0xa084, - 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, - 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, - 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, - 0x4204, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, - 0x0040, 0x4fd8, 0x1078, 0x4f8e, 0x6803, 0x1000, 0x6803, 0x0000, - 0x0c7e, 0x2061, 0x70b6, 0x6128, 0xa192, 0x0002, 0x00c8, 0x4fc5, - 0x8108, 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x4fd3, 0x1078, - 0x41f9, 0x1078, 0x4f85, 0x0078, 0x4fd3, 0x6124, 0xa1e5, 0x0000, - 0x0040, 0x4fd0, 0x1078, 0x6e4a, 0x2009, 0x0014, 0x1078, 0x55fc, - 0x0c7f, 0x0078, 0x4fd3, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, - 0x1078, 0x3229, 0x0078, 0x4fd3, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, - 0x027e, 0x1078, 0x4212, 0x2071, 0x70b6, 0x713c, 0x81ff, 0x0040, - 0x5006, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, - 0x0040, 0x500c, 0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, - 0x0001, 0x1078, 0x513b, 0x037f, 0x713c, 0x2160, 0x1078, 0x6e4a, - 0x2009, 0x004a, 0x1078, 0x55fc, 0x0078, 0x5006, 0x027f, 0x017f, - 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, - 0x4ff6, 0x8108, 0x7146, 0x1078, 0x4209, 0x0078, 0x5006, 0x0e7e, - 0x0d7e, 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0x70b6, 0x7018, 0x2068, - 0x8dff, 0x0040, 0x5043, 0x68a0, 0xa406, 0x0040, 0x5033, 0x6854, - 0x2068, 0x0078, 0x5028, 0x6010, 0x2060, 0x643c, 0x6540, 0x6644, - 0xa6b4, 0x000f, 0x2d60, 0x1078, 0x359f, 0x0040, 0x5043, 0x1078, - 0x52d5, 0xa085, 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, - 0x1078, 0x4b8e, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x4f7a, 0x147f, 0x157f, - 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, - 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0x6f40, 0x2019, - 0x6f41, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0, - 0x5071, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, - 0x4f7a, 0x147f, 0x157f, 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x70b6, 0x700c, 0x2060, 0x8cff, 0x0040, - 0x50a0, 0x1078, 0x6364, 0x00c0, 0x5097, 0x1078, 0x57d2, 0x600c, - 0x007e, 0x1078, 0x55d5, 0x1078, 0x52d5, 0x0c7f, 0x0078, 0x508e, - 0x700f, 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, - 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, - 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, - 0x2071, 0x70b6, 0x7024, 0x2060, 0x8cff, 0x0040, 0x50f9, 0x1078, - 0x4f8e, 0x68c3, 0x0000, 0x1078, 0x4204, 0x2009, 0x0013, 0x1078, - 0x55fc, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x50dc, 0x6827, - 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x50ee, 0x7803, 0x1000, - 0x7803, 0x0000, 0x0078, 0x50ee, 0xd084, 0x0040, 0x50e3, 0x6827, - 0x0001, 0x0078, 0x50e5, 0x00f0, 0x50cb, 0x7804, 0xa084, 0x1000, - 0x0040, 0x50ee, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, - 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, - 0x007c, 0x2001, 0x6f00, 0x2004, 0xa096, 0x0001, 0x0040, 0x5131, - 0xa096, 0x0004, 0x0040, 0x5131, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x2011, 0x31f0, 0x1078, 0x4187, 0x20a9, 0x01f4, 0x6824, 0xd094, - 0x0040, 0x511f, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, - 0x5131, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5131, 0xd084, - 0x0040, 0x5126, 0x6827, 0x0001, 0x0078, 0x5128, 0x00f0, 0x510e, - 0x7804, 0xa084, 0x1000, 0x0040, 0x5131, 0x7803, 0x0100, 0x7803, - 0x0000, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x157f, 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x70b6, 0x703c, 0x2060, 0x8cff, 0x0040, - 0x5189, 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, - 0x4212, 0x1078, 0x1b80, 0xa39d, 0x0000, 0x00c0, 0x5163, 0x2009, - 0x0049, 0x1078, 0x55fc, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, - 0x5176, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5188, - 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5188, 0xd094, 0x0040, - 0x517d, 0x6827, 0x0002, 0x0078, 0x517f, 0x00f0, 0x5165, 0x7804, - 0xa084, 0x1000, 0x0040, 0x5188, 0x7803, 0x0100, 0x7803, 0x0000, - 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x157f, 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, - 0x70b6, 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, - 0x8000, 0x2069, 0x70b6, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, - 0x0e7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x70b6, 0x7614, - 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x51e7, 0x601c, - 0xa206, 0x00c0, 0x51e2, 0x7014, 0xac36, 0x00c0, 0x51c1, 0x660c, - 0x7616, 0x7010, 0xac36, 0x00c0, 0x51cf, 0x2c00, 0xaf36, 0x0040, - 0x51cd, 0x2f00, 0x7012, 0x0078, 0x51cf, 0x7013, 0x0000, 0x660c, - 0x067e, 0x2c00, 0xaf06, 0x0040, 0x51d8, 0x7e0e, 0x0078, 0x51d9, - 0x2678, 0x600f, 0x0000, 0x1078, 0x6337, 0x1078, 0x52d5, 0x0c7f, - 0x0078, 0x51b4, 0x2c78, 0x600c, 0x2060, 0x0078, 0x51b4, 0x127f, - 0x007f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x4ce7, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x5230, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ce7, 0x7810, 0x20a2, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x5230, - 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ce7, 0x7810, 0x20a2, - 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, - 0x5230, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ce7, 0x7810, - 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, - 0x1078, 0x52e0, 0x60c3, 0x0020, 0x1078, 0x4f7a, 0x147f, 0x157f, - 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, - 0xd1b4, 0x00c0, 0x5248, 0xd1bc, 0x00c0, 0x5292, 0x0078, 0x52d2, - 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, - 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, - 0x0040, 0x5289, 0x6020, 0xd0b4, 0x0040, 0x5289, 0x6024, 0xd094, - 0x00c0, 0x5289, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, - 0x5289, 0x00f0, 0x5255, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, - 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, - 0xbc91, 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, - 0xd094, 0x00c0, 0x5288, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x527f, - 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, - 0x0078, 0x52d2, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, - 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, - 0xa084, 0x4000, 0x0040, 0x52cb, 0x6020, 0xd0bc, 0x0040, 0x52cb, - 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x52cb, 0x00f0, - 0x529f, 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, - 0x00ff, 0xa10d, 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, - 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, - 0x00c0, 0x52c5, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, - 0x200b, 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x70b6, - 0x7020, 0xa005, 0x0040, 0x52de, 0x8001, 0x7022, 0x0e7f, 0x007c, - 0x20a9, 0x0008, 0x20a2, 0x00f0, 0x52e2, 0x20a2, 0x20a2, 0x007c, - 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x70b6, 0x7614, 0x2660, 0x2678, 0x2039, - 0x0001, 0x87ff, 0x0040, 0x5378, 0x8cff, 0x0040, 0x5378, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x5373, 0x88ff, 0x0040, 0x530f, 0x2800, - 0xac06, 0x00c0, 0x5373, 0x2039, 0x0000, 0x0078, 0x5313, 0x6018, - 0xa206, 0x00c0, 0x5373, 0x7024, 0xac06, 0x00c0, 0x5341, 0x2069, - 0x0100, 0x68c0, 0xa005, 0x0040, 0x533c, 0x6817, 0x0008, 0x68c3, - 0x0000, 0x1078, 0x5405, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, - 0x6b04, 0xa384, 0x1000, 0x0040, 0x5331, 0x6803, 0x0100, 0x6803, - 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5339, 0x6827, - 0x0001, 0x037f, 0x0078, 0x5341, 0x6003, 0x0009, 0x630a, 0x0078, - 0x5373, 0x7014, 0xac36, 0x00c0, 0x5347, 0x660c, 0x7616, 0x7010, - 0xac36, 0x00c0, 0x5355, 0x2c00, 0xaf36, 0x0040, 0x5353, 0x2f00, - 0x7012, 0x0078, 0x5355, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, - 0xaf06, 0x0040, 0x535e, 0x7e0e, 0x0078, 0x535f, 0x2678, 0x600f, - 0x0000, 0x6010, 0x2068, 0x1078, 0x6216, 0x0040, 0x5369, 0x1078, - 0x6d80, 0x1078, 0x6337, 0x1078, 0x52d5, 0x88ff, 0x00c0, 0x5382, - 0x0c7f, 0x0078, 0x52f9, 0x2c78, 0x600c, 0x2060, 0x0078, 0x52f9, - 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, - 0x5379, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x70b6, 0x7638, 0x2660, 0x2678, - 0x8cff, 0x0040, 0x53f4, 0x601c, 0xa086, 0x0006, 0x00c0, 0x53ef, - 0x88ff, 0x0040, 0x53a9, 0x2800, 0xac06, 0x00c0, 0x53ef, 0x0078, - 0x53ad, 0x6018, 0xa206, 0x00c0, 0x53ef, 0x703c, 0xac06, 0x00c0, - 0x53bf, 0x037e, 0x2019, 0x0001, 0x1078, 0x513b, 0x7033, 0x0000, - 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, - 0xac36, 0x00c0, 0x53c5, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, - 0x53d3, 0x2c00, 0xaf36, 0x0040, 0x53d1, 0x2f00, 0x7036, 0x0078, - 0x53d3, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, - 0x53dc, 0x7e0e, 0x0078, 0x53dd, 0x2678, 0x600f, 0x0000, 0x6010, - 0x2068, 0x1078, 0x6216, 0x0040, 0x53e7, 0x1078, 0x6d80, 0x1078, - 0x6337, 0x88ff, 0x00c0, 0x53fe, 0x0c7f, 0x0078, 0x5398, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x5398, 0xa006, 0x127f, 0x007f, 0x027f, - 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, - 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x53f5, 0x0e7e, 0x2071, 0x70b6, - 0x2001, 0x6f00, 0x2004, 0xa086, 0x0002, 0x00c0, 0x5413, 0x7007, - 0x0005, 0x0078, 0x5415, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, - 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x70b6, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, - 0x5455, 0x2200, 0xac06, 0x00c0, 0x5450, 0x7038, 0xac36, 0x00c0, - 0x5433, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5441, 0x2c00, - 0xaf36, 0x0040, 0x543f, 0x2f00, 0x7036, 0x0078, 0x5441, 0x7037, - 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040, 0x5449, 0x7e0e, 0x0078, - 0x544a, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x5455, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x5426, 0x127f, 0x007f, 0x027f, - 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x70b6, - 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040, 0x54ee, 0x6018, 0xa080, - 0x0028, 0x2004, 0xa206, 0x00c0, 0x54e9, 0x7024, 0xac06, 0x00c0, - 0x549c, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x549c, 0x1078, - 0x4f8e, 0x68c3, 0x0000, 0x1078, 0x5405, 0x7027, 0x0000, 0x037e, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5493, 0x6803, - 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, - 0x549b, 0x6827, 0x0001, 0x037f, 0x700c, 0xac36, 0x00c0, 0x54a2, - 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0, 0x54b0, 0x2c00, 0xaf36, - 0x0040, 0x54ae, 0x2f00, 0x700a, 0x0078, 0x54b0, 0x700b, 0x0000, - 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x54b9, 0x7e0e, 0x0078, - 0x54ba, 0x2678, 0x600f, 0x0000, 0x1078, 0x6350, 0x00c0, 0x54c4, - 0x1078, 0x21c6, 0x0078, 0x54e0, 0x1078, 0x6364, 0x00c0, 0x54cc, - 0x1078, 0x57d2, 0x0078, 0x54e0, 0x6010, 0x2068, 0x1078, 0x6216, - 0x0040, 0x54e0, 0x601c, 0xa086, 0x0003, 0x00c0, 0x54f6, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3720, 0x1078, 0x632a, - 0x6003, 0x0000, 0x1078, 0x6337, 0x1078, 0x52d5, 0x0c7f, 0x0078, - 0x546b, 0x2c78, 0x600c, 0x2060, 0x0078, 0x546b, 0x127f, 0x007f, - 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x54d7, 0x1078, 0x6d80, 0x0078, 0x54e0, 0x037e, - 0x157e, 0x137e, 0x147e, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, - 0xa39e, 0x20a0, 0x00c0, 0x5510, 0x8210, 0x8000, 0x0078, 0x5507, - 0xa005, 0x0040, 0x551a, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, - 0x22c8, 0x53a3, 0x147f, 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, - 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0200, 0x20a3, 0x0014, - 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, - 0x20a3, 0x4f47, 0x20a3, 0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, - 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x1078, 0x4f7a, - 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4bad, 0x20a3, 0x0210, - 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x4f7a, 0x007c, 0x2061, - 0x7500, 0x2a70, 0x7060, 0x7046, 0x704b, 0x7500, 0x007c, 0x0e7e, - 0x127e, 0x2071, 0x6f00, 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, - 0x0048, 0x55a1, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, - 0x558d, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5589, 0x0078, - 0x557c, 0x2061, 0x7500, 0x0078, 0x557c, 0x6003, 0x0008, 0x8529, - 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x559d, 0x754a, - 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x7500, 0x0078, - 0x5598, 0xa006, 0x0078, 0x559a, 0x0e7e, 0x2071, 0x6f00, 0x7544, - 0xa582, 0x0001, 0x0048, 0x55d2, 0x7048, 0x2060, 0x6000, 0xa086, - 0x0000, 0x0040, 0x55bf, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, - 0x55bb, 0x0078, 0x55ae, 0x2061, 0x7500, 0x0078, 0x55ae, 0x6003, - 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, - 0x55ce, 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7500, - 0x0078, 0x55ca, 0xa006, 0x0078, 0x55cc, 0xac82, 0x7500, 0x1048, - 0x1288, 0x2001, 0x6f15, 0x2004, 0xac02, 0x10c8, 0x1288, 0xa006, - 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, - 0x6003, 0x0000, 0x2061, 0x6f00, 0x6044, 0x8000, 0x6046, 0xa086, - 0x0001, 0x0040, 0x55f4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, - 0x4893, 0x127f, 0x0078, 0x55f3, 0x601c, 0xa084, 0x0007, 0x0079, - 0x5601, 0x5609, 0x5611, 0x562d, 0x5649, 0x63e1, 0x63fd, 0x6419, - 0x5609, 0xa18e, 0x0047, 0x00c0, 0x5610, 0xa016, 0x1078, 0x1525, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x561b, 0x067f, 0x007c, 0x562b, 0x56f6, 0x57e1, 0x562b, 0x562b, - 0x562b, 0x562b, 0x562b, 0x56a5, 0x5a63, 0x562b, 0x562b, 0x562b, - 0x562b, 0x562b, 0x562b, 0x1078, 0x1288, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x1288, 0x1079, 0x5637, 0x067f, 0x007c, 0x5647, - 0x5647, 0x5647, 0x5647, 0x5647, 0x5647, 0x5647, 0x5647, 0x5ed3, - 0x5f99, 0x5647, 0x5eec, 0x5f45, 0x5eec, 0x5f45, 0x5647, 0x1078, - 0x1288, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x5653, 0x067f, 0x007c, 0x5663, 0x5aa1, 0x5b47, 0x5c09, 0x5d5d, - 0x5663, 0x5663, 0x5663, 0x5a7f, 0x5e88, 0x5e8c, 0x5663, 0x5663, - 0x5663, 0x5663, 0x5eb2, 0x1078, 0x1288, 0x20a9, 0x000e, 0x2e98, - 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, - 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, - 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5673, 0x0e7e, - 0x1078, 0x6216, 0x0040, 0x568a, 0x6010, 0x2070, 0x7007, 0x0000, - 0x7037, 0x0103, 0x0e7f, 0x1078, 0x55d5, 0x007c, 0x0d7e, 0x20a9, - 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, - 0x56a2, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, - 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x567f, 0x2100, 0xa1b2, 0x0030, - 0x10c8, 0x1288, 0x0079, 0x56ac, 0x56de, 0x56ea, 0x56de, 0x56de, - 0x56de, 0x56de, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, - 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, - 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56dc, - 0x56dc, 0x56dc, 0x56dc, 0x56de, 0x56dc, 0x56dc, 0x56dc, 0x56dc, - 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x56de, 0x56dc, 0x56dc, 0x56dc, - 0x56dc, 0x56dc, 0x56dc, 0x56dc, 0x1078, 0x1288, 0x6003, 0x0001, - 0x6106, 0x1078, 0x448b, 0x127e, 0x2091, 0x8000, 0x1078, 0x4893, - 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x448b, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4893, 0x127f, 0x007c, 0x6004, 0xa0b2, - 0x0030, 0x10c8, 0x1288, 0xa1b6, 0x0013, 0x00c0, 0x5702, 0x2008, - 0x0079, 0x575a, 0xa1b6, 0x0027, 0x00c0, 0x5740, 0x1078, 0x479a, - 0x6004, 0x1078, 0x6350, 0x0040, 0x5713, 0x1078, 0x6364, 0x0040, - 0x573c, 0x0078, 0x5737, 0x1078, 0x21c6, 0x2001, 0x0007, 0x1078, - 0x3477, 0x6018, 0xa080, 0x0028, 0x200c, 0x017e, 0x027e, 0x037e, - 0x2110, 0x2019, 0x0028, 0x1078, 0x457b, 0x1078, 0x44be, 0x0c7e, - 0x6018, 0xa065, 0x0040, 0x572e, 0x1078, 0x364c, 0x0c7f, 0x2c08, - 0x1078, 0x6bfe, 0x037f, 0x027f, 0x017f, 0x1078, 0x34b3, 0x1078, - 0x55d5, 0x1078, 0x4893, 0x007c, 0x1078, 0x57d2, 0x0078, 0x5737, - 0xa186, 0x0014, 0x00c0, 0x573b, 0x1078, 0x479a, 0x1078, 0x21a8, - 0x1078, 0x6350, 0x00c0, 0x5750, 0x1078, 0x21c6, 0x0078, 0x5737, - 0x1078, 0x6364, 0x00c0, 0x5758, 0x1078, 0x57d2, 0x0078, 0x5737, - 0x0078, 0x5737, 0x578c, 0x578e, 0x5792, 0x5796, 0x579a, 0x579e, - 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, - 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, - 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, - 0x57a2, 0x57a8, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, 0x578a, - 0x578a, 0x578a, 0x57a8, 0x57a8, 0x578a, 0x578a, 0x578a, 0x578a, - 0x578a, 0x578a, 0x1078, 0x1288, 0x0078, 0x57a8, 0x2001, 0x000b, - 0x0078, 0x57b1, 0x2001, 0x0003, 0x0078, 0x57b1, 0x2001, 0x0005, - 0x0078, 0x57b1, 0x2001, 0x0001, 0x0078, 0x57b1, 0x2001, 0x0009, - 0x0078, 0x57b1, 0x1078, 0x1288, 0x0078, 0x57b0, 0x1078, 0x3477, - 0x1078, 0x479a, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078, 0x4893, - 0x007c, 0x1078, 0x3477, 0x1078, 0x479a, 0x6003, 0x0002, 0x037e, - 0x2019, 0x6f5c, 0x2304, 0xa084, 0xff00, 0x00c0, 0x57c3, 0x2019, - 0x0028, 0x0078, 0x57cc, 0x8007, 0xa09a, 0x0004, 0x0048, 0x57bf, - 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x1078, 0x4893, - 0x0078, 0x57b0, 0x0e7e, 0x1078, 0x6216, 0x0040, 0x57df, 0x6010, - 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f, - 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, - 0xa0b2, 0x000c, 0x10c8, 0x1288, 0x6604, 0xa6b6, 0x0028, 0x00c0, - 0x57f5, 0x1078, 0x6399, 0x0078, 0x581e, 0x6604, 0xa6b6, 0x0029, - 0x00c0, 0x57fe, 0x1078, 0x63b3, 0x0078, 0x581e, 0x6604, 0xa6b6, - 0x001f, 0x00c0, 0x5807, 0x1078, 0x5665, 0x0078, 0x581e, 0x6604, - 0xa6b6, 0x0000, 0x00c0, 0x5810, 0x1078, 0x568e, 0x0078, 0x581e, - 0xa1b6, 0x0015, 0x00c0, 0x5818, 0x1079, 0x5823, 0x0078, 0x581e, - 0xa1b6, 0x0016, 0x00c0, 0x581f, 0x1079, 0x58ec, 0x007c, 0x1078, - 0x5609, 0x0078, 0x581e, 0x582f, 0x5832, 0x582f, 0x5873, 0x582f, - 0x589b, 0x582f, 0x582f, 0x582f, 0x58c4, 0x582f, 0x58da, 0x0005, - 0x0005, 0x007c, 0x0e7e, 0x2071, 0x6f00, 0x7070, 0xa086, 0x0074, - 0x00c0, 0x585c, 0x1078, 0x6bd6, 0x00c0, 0x584e, 0x0d7e, 0x6018, - 0x2068, 0x1078, 0x5860, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x3477, - 0x1078, 0x21c6, 0x1078, 0x55d5, 0x0078, 0x585e, 0x2001, 0x000a, - 0x1078, 0x3477, 0x1078, 0x21c6, 0x6003, 0x0001, 0x6007, 0x0001, - 0x1078, 0x448b, 0x0078, 0x585e, 0x1078, 0x588b, 0x0e7f, 0x007c, - 0x6800, 0xd084, 0x0040, 0x5872, 0x2001, 0x0000, 0x1078, 0x3463, - 0x2069, 0x6f51, 0x6804, 0xd0a4, 0x0040, 0x5872, 0x2001, 0x0006, - 0x1078, 0x3485, 0x007c, 0x2011, 0x6f1c, 0x2204, 0xa086, 0x0074, - 0x00c0, 0x5888, 0x1078, 0x59b5, 0x2001, 0x0004, 0x1078, 0x3477, - 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x448b, 0x0078, 0x588a, - 0x1078, 0x588b, 0x007c, 0x2001, 0x6f00, 0x2004, 0xa086, 0x0003, - 0x0040, 0x5896, 0x2001, 0x0007, 0x1078, 0x3477, 0x1078, 0x55d5, - 0x1078, 0x21c6, 0x007c, 0x0e7e, 0x2071, 0x6f00, 0x7070, 0xa086, - 0x0014, 0x00c0, 0x58c0, 0x7000, 0xa086, 0x0003, 0x00c0, 0x58aa, - 0x1078, 0x2a74, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3547, 0x1078, - 0x5860, 0x0d7f, 0x1078, 0x59bf, 0x00c0, 0x58c0, 0x2001, 0x0006, - 0x1078, 0x3477, 0x1078, 0x55d5, 0x1078, 0x21c6, 0x0078, 0x58c2, - 0x1078, 0x588b, 0x0e7f, 0x007c, 0x2011, 0x6f1c, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x58d7, 0x2001, 0x0002, 0x1078, 0x3477, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x448b, 0x0078, 0x58d9, 0x1078, - 0x588b, 0x007c, 0x2011, 0x6f1c, 0x2204, 0xa086, 0x0004, 0x00c0, - 0x58e9, 0x2001, 0x0007, 0x1078, 0x3477, 0x1078, 0x55d5, 0x0078, - 0x58eb, 0x1078, 0x588b, 0x007c, 0x582f, 0x58f8, 0x582f, 0x591e, - 0x582f, 0x596a, 0x582f, 0x582f, 0x582f, 0x597d, 0x582f, 0x5990, - 0x0c7e, 0x1078, 0x59a3, 0x00c0, 0x590d, 0x2001, 0x0000, 0x1078, - 0x3463, 0x2001, 0x0002, 0x1078, 0x3477, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x448b, 0x0078, 0x591c, 0x2009, 0x738f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x591a, 0x1078, 0x55d5, - 0x0078, 0x591c, 0x1078, 0x588b, 0x0c7f, 0x007c, 0x1078, 0x59b2, - 0x00c0, 0x5932, 0x2001, 0x0000, 0x1078, 0x3463, 0x2001, 0x0002, - 0x1078, 0x3477, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x448b, - 0x0078, 0x5952, 0x2009, 0x738e, 0x2134, 0xa6b4, 0x00ff, 0xa686, - 0x0005, 0x0040, 0x5953, 0x2009, 0x738f, 0x2104, 0xa084, 0xff00, - 0xa086, 0x1900, 0x00c0, 0x5950, 0xa686, 0x0009, 0x0040, 0x5953, - 0x2001, 0x0004, 0x1078, 0x3477, 0x1078, 0x55d5, 0x0078, 0x5952, - 0x1078, 0x588b, 0x007c, 0x0d7e, 0x6018, 0x2068, 0x6840, 0xa084, - 0x00ff, 0xa005, 0x0040, 0x5965, 0x8001, 0x6842, 0x6017, 0x000a, - 0x6007, 0x0016, 0x0d7f, 0x0078, 0x5952, 0x1078, 0x21a8, 0x0d7f, - 0x0078, 0x5950, 0x1078, 0x59b2, 0x00c0, 0x597a, 0x2001, 0x0004, - 0x1078, 0x3477, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x448b, - 0x0078, 0x597c, 0x1078, 0x588b, 0x007c, 0x1078, 0x59b2, 0x00c0, - 0x598d, 0x2001, 0x0008, 0x1078, 0x3477, 0x6003, 0x0001, 0x6007, - 0x0005, 0x1078, 0x448b, 0x0078, 0x598f, 0x1078, 0x588b, 0x007c, - 0x1078, 0x59b2, 0x00c0, 0x59a0, 0x2001, 0x000a, 0x1078, 0x3477, - 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x448b, 0x0078, 0x59a2, - 0x1078, 0x588b, 0x007c, 0x2009, 0x738e, 0x2104, 0xa086, 0x0003, - 0x00c0, 0x59b1, 0x2009, 0x738f, 0x2104, 0xa084, 0xff00, 0xa086, - 0x2a00, 0x007c, 0xa085, 0x0001, 0x007c, 0x0c7e, 0x017e, 0xac88, - 0x0006, 0x2164, 0x1078, 0x34dd, 0x017f, 0x0c7f, 0x007c, 0x0e7e, - 0x2071, 0x738c, 0x7004, 0xa086, 0x0014, 0x00c0, 0x59e2, 0x7008, - 0xa086, 0x0800, 0x00c0, 0x59e2, 0x700c, 0xd0ec, 0x0040, 0x59e0, - 0xa084, 0x0f00, 0xa086, 0x0100, 0x00c0, 0x59e0, 0x7024, 0xd0a4, - 0x0040, 0x59e0, 0xd08c, 0x0040, 0x59e0, 0xa006, 0x0078, 0x59e2, - 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, - 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2029, - 0x70bf, 0x252c, 0x2021, 0x70c5, 0x2424, 0x2061, 0x7500, 0x2071, - 0x6f00, 0x7244, 0x7060, 0xa202, 0x00c8, 0x5a39, 0x1078, 0x6ddc, - 0x0040, 0x5a31, 0x671c, 0xa786, 0x0001, 0x0040, 0x5a31, 0xa786, - 0x0007, 0x0040, 0x5a31, 0x2500, 0xac06, 0x0040, 0x5a31, 0x2400, - 0xac06, 0x0040, 0x5a31, 0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, - 0x5a1b, 0x1078, 0x1629, 0x6010, 0x2068, 0x1078, 0x6216, 0x0040, - 0x5a2e, 0xa786, 0x0003, 0x00c0, 0x5a43, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x1078, 0x3720, 0x1078, 0x632a, 0x1078, 0x6337, - 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5a39, 0x0078, - 0x59f9, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, 0x077f, 0x0c7f, - 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x5a25, 0x1078, - 0x6d80, 0x0078, 0x5a2e, 0x220c, 0x2304, 0xa106, 0x00c0, 0x5a56, - 0x8210, 0x8318, 0x00f0, 0x5a4b, 0xa006, 0x007c, 0x2304, 0xa102, - 0x0048, 0x5a5e, 0x2001, 0x0001, 0x0078, 0x5a60, 0x2001, 0x0000, - 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1288, - 0x1078, 0x6350, 0x0040, 0x5a72, 0x1078, 0x6364, 0x0040, 0x5a7b, - 0x0078, 0x5a74, 0x1078, 0x21c6, 0x1078, 0x479a, 0x1078, 0x55d5, - 0x1078, 0x4893, 0x007c, 0x1078, 0x57d2, 0x0078, 0x5a74, 0xa182, - 0x0040, 0x0079, 0x5a83, 0x5a93, 0x5a93, 0x5a93, 0x5a93, 0x5a93, - 0x5a93, 0x5a93, 0x5a93, 0x5a93, 0x5a93, 0x5a93, 0x5a95, 0x5a95, - 0x5a95, 0x5a95, 0x5a93, 0x1078, 0x1288, 0x6003, 0x0001, 0x6106, - 0x1078, 0x443e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4893, 0x127f, - 0x007c, 0xa186, 0x0013, 0x00c0, 0x5aaa, 0x6004, 0xa082, 0x0040, - 0x0079, 0x5b20, 0xa186, 0x0027, 0x00c0, 0x5ac7, 0x1078, 0x479a, - 0x1078, 0x21a8, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6216, 0x0040, - 0x5ac1, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3720, 0x1078, - 0x632a, 0x0d7f, 0x1078, 0x55d5, 0x1078, 0x4893, 0x007c, 0xa186, - 0x0014, 0x00c0, 0x5ad0, 0x6004, 0xa082, 0x0040, 0x0079, 0x5af0, - 0xa186, 0x0047, 0x10c0, 0x1288, 0x2001, 0x0109, 0x2004, 0xd084, - 0x0040, 0x5aed, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, - 0x1078, 0x42ff, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, - 0x0002, 0x00c0, 0x5aed, 0x0078, 0x5b47, 0x1078, 0x5609, 0x007c, - 0x5b02, 0x5b00, 0x5b00, 0x5b00, 0x5b00, 0x5b00, 0x5b00, 0x5b00, - 0x5b00, 0x5b00, 0x5b00, 0x5b19, 0x5b19, 0x5b19, 0x5b19, 0x5b00, - 0x1078, 0x1288, 0x1078, 0x479a, 0x0d7e, 0x6110, 0x2168, 0x1078, - 0x6216, 0x0040, 0x5b13, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, - 0x3720, 0x1078, 0x632a, 0x0d7f, 0x1078, 0x55d5, 0x1078, 0x4893, - 0x007c, 0x1078, 0x479a, 0x1078, 0x55d5, 0x1078, 0x4893, 0x007c, - 0x5b32, 0x5b30, 0x5b30, 0x5b30, 0x5b30, 0x5b30, 0x5b30, 0x5b30, - 0x5b30, 0x5b30, 0x5b30, 0x5b40, 0x5b40, 0x5b40, 0x5b40, 0x5b30, - 0x1078, 0x1288, 0x1078, 0x479a, 0x6003, 0x0002, 0x1078, 0x4893, - 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c, - 0x1078, 0x479a, 0x6003, 0x000f, 0x1078, 0x4893, 0x007c, 0xa182, - 0x0040, 0x0079, 0x5b4b, 0x5b5b, 0x5b5b, 0x5b5b, 0x5b5b, 0x5b5b, - 0x5b5d, 0x5be6, 0x5bfe, 0x5b5b, 0x5b5b, 0x5b5b, 0x5b5b, 0x5b5b, - 0x5b5b, 0x5b5b, 0x5b5b, 0x1078, 0x1288, 0x0e7e, 0x0d7e, 0x2071, - 0x738c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, - 0x5bca, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5b8f, 0xa186, - 0x0028, 0x00c0, 0x5b79, 0x1078, 0x633e, 0x684b, 0x001c, 0x0078, - 0x5b91, 0xd6dc, 0x0040, 0x5b84, 0x684b, 0x0015, 0x7318, 0x6b62, - 0x731c, 0x6b5e, 0x0078, 0x5b91, 0xd6d4, 0x0040, 0x5b8f, 0x684b, - 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5b91, 0x684b, - 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x5ba4, - 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7398, 0xad90, - 0x0019, 0x1078, 0x6008, 0x037f, 0xd6cc, 0x0040, 0x5bda, 0x7124, - 0x695a, 0xa192, 0x0021, 0x00c8, 0x5bb8, 0x2071, 0x7398, 0x831c, - 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6008, 0x0078, 0x5bda, - 0x6838, 0xd0fc, 0x0040, 0x5bc1, 0x2009, 0x0020, 0x695a, 0x0078, - 0x5bad, 0x0f7e, 0x2d78, 0x1078, 0x5fa0, 0x0f7f, 0x1078, 0x5ff5, - 0x0078, 0x5bdc, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, - 0xd0ac, 0x0040, 0x5bda, 0x6810, 0x6914, 0xa115, 0x0040, 0x5bda, - 0x1078, 0x5d4e, 0x1078, 0x3720, 0x6218, 0x2268, 0x6a3c, 0x8211, - 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x55d5, 0x007c, 0x0f7e, 0x6003, - 0x0003, 0x2079, 0x738c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, + 0xa582, 0x0080, 0x0048, 0x4f7e, 0x2011, 0x0000, 0x629e, 0x6017, + 0x0012, 0x0078, 0x4f34, 0xd5bc, 0x0040, 0x4f8e, 0xa185, 0x0700, + 0x20a2, 0x6266, 0x636a, 0x646e, 0x0078, 0x4f94, 0x6063, 0x0700, + 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, + 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, + 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, + 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, + 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, + 0x4fbb, 0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x4f34, + 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, + 0x8217, 0x007c, 0x0d7e, 0x2069, 0x6f10, 0x6843, 0x0001, 0x0d7f, + 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, + 0x4fdc, 0x1078, 0x4143, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, + 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, + 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, + 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x414c, + 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, + 0x503a, 0x1078, 0x4fe5, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, + 0x2061, 0x6f10, 0x6128, 0xa192, 0x0002, 0x00c8, 0x5027, 0x8108, + 0x612a, 0x613c, 0x0c7f, 0x81ff, 0x0040, 0x5035, 0x1078, 0x4143, + 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x5023, 0x6017, + 0x0012, 0x0078, 0x5035, 0x1078, 0x4fdc, 0x0078, 0x5035, 0x6124, + 0xa1e5, 0x0000, 0x0040, 0x5032, 0x1078, 0x6c76, 0x2009, 0x0014, + 0x1078, 0x5591, 0x0c7f, 0x0078, 0x5035, 0x027f, 0x017f, 0x0d7f, + 0x0c7f, 0x007c, 0x1078, 0x31cb, 0x0078, 0x5035, 0x0c7e, 0x0d7e, + 0x0e7e, 0x017e, 0x027e, 0x1078, 0x415a, 0x2071, 0x6f10, 0x713c, + 0x81ff, 0x0040, 0x5079, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, + 0x017e, 0x017f, 0xa194, 0x4000, 0x0040, 0x507f, 0x6017, 0x0010, + 0x7144, 0xa192, 0x0002, 0x00c8, 0x5071, 0x8108, 0x7146, 0x1078, + 0x4151, 0x713c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, + 0x506d, 0x6017, 0x0012, 0x0078, 0x5079, 0x6017, 0x0016, 0x0078, + 0x5079, 0x1078, 0x6c76, 0x2009, 0x004a, 0x1078, 0x5591, 0x0078, + 0x5079, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, + 0x4151, 0x0078, 0x5079, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e, + 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, + 0x2071, 0x6f10, 0x7018, 0x2068, 0x8dff, 0x0040, 0x50af, 0x68a0, + 0xa406, 0x0040, 0x509f, 0x6854, 0x2068, 0x0078, 0x5094, 0x6010, + 0x2060, 0x643c, 0x6540, 0x6644, 0xa6b4, 0x000f, 0x2d60, 0x1078, + 0x3522, 0x0040, 0x50af, 0x1078, 0x5374, 0xa085, 0x0001, 0x127f, + 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, + 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4a83, 0x20a3, 0x0f00, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, + 0x1078, 0x4fd1, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, + 0x020b, 0x1078, 0x4afa, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, + 0x0006, 0x2011, 0x6d40, 0x2019, 0x6d40, 0x23a6, 0x22a6, 0xa398, + 0x0002, 0xa290, 0x0002, 0x00f0, 0x50dd, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x001c, 0x1078, 0x4fd1, 0x147f, 0x157f, 0x007c, + 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x4ada, + 0x1078, 0x4af1, 0x7810, 0x007e, 0xa080, 0x0015, 0x2098, 0x7808, + 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, + 0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, 0x4fd1, 0x027f, + 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4a83, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x4fd1, 0x147f, 0x157f, + 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, + 0x6f10, 0x700c, 0x2060, 0x8cff, 0x0040, 0x513f, 0x600c, 0x007e, + 0x1078, 0x556a, 0x1078, 0x5374, 0x0c7f, 0x0078, 0x5133, 0x700f, + 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, + 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, + 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, + 0x6f10, 0x7024, 0x2060, 0x8cff, 0x0040, 0x5198, 0x1078, 0x4fe5, + 0x68c3, 0x0000, 0x1078, 0x414c, 0x2009, 0x0013, 0x1078, 0x5591, + 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x517b, 0x6827, 0x0004, + 0x7804, 0xa084, 0x4000, 0x0040, 0x518d, 0x7803, 0x1000, 0x7803, + 0x0000, 0x0078, 0x518d, 0xd084, 0x0040, 0x5182, 0x6827, 0x0001, + 0x0078, 0x5184, 0x00f0, 0x516a, 0x7804, 0xa084, 0x1000, 0x0040, + 0x518d, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, + 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, + 0x2001, 0x6d00, 0x2004, 0xa096, 0x0001, 0x0040, 0x51d0, 0xa096, + 0x0004, 0x0040, 0x51d0, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, + 0x318e, 0x1078, 0x40d1, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, + 0x51be, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x51d0, + 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x51d0, 0xd084, 0x0040, + 0x51c5, 0x6827, 0x0001, 0x0078, 0x51c7, 0x00f0, 0x51ad, 0x7804, + 0xa084, 0x1000, 0x0040, 0x51d0, 0x7803, 0x0100, 0x7803, 0x0000, + 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, + 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, + 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, + 0x0140, 0x2071, 0x6f10, 0x703c, 0x2060, 0x8cff, 0x0040, 0x5228, + 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x415a, + 0x1078, 0x1a20, 0xa39d, 0x0000, 0x00c0, 0x5202, 0x2009, 0x0049, + 0x1078, 0x5591, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x5215, + 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5227, 0x7803, + 0x1000, 0x7803, 0x0000, 0x0078, 0x5227, 0xd094, 0x0040, 0x521c, + 0x6827, 0x0002, 0x0078, 0x521e, 0x00f0, 0x5204, 0x7804, 0xa084, + 0x1000, 0x0040, 0x5227, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, + 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, + 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x6f10, + 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, + 0x2069, 0x6f10, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, + 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x6f10, 0x7614, 0x2660, + 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5286, 0x601c, 0xa206, + 0x00c0, 0x5281, 0x7014, 0xac36, 0x00c0, 0x5260, 0x660c, 0x7616, + 0x7010, 0xac36, 0x00c0, 0x526e, 0x2c00, 0xaf36, 0x0040, 0x526c, + 0x2f00, 0x7012, 0x0078, 0x526e, 0x7013, 0x0000, 0x660c, 0x067e, + 0x2c00, 0xaf06, 0x0040, 0x5277, 0x7e0e, 0x0078, 0x5278, 0x2678, + 0x600f, 0x0000, 0x1078, 0x6283, 0x1078, 0x5374, 0x0c7f, 0x0078, + 0x5253, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5253, 0x127f, 0x007f, + 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, + 0x020b, 0x1078, 0x4c93, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, + 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x52cf, 0x157e, 0x147e, + 0x20a1, 0x020b, 0x1078, 0x4c93, 0x7810, 0x20a2, 0xa006, 0x20a2, + 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x52cf, 0x157e, + 0x147e, 0x20a1, 0x020b, 0x1078, 0x4c93, 0x7810, 0x20a2, 0xa006, + 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x52cf, + 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4c93, 0x7810, 0x20a2, + 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, + 0x537f, 0x60c3, 0x0020, 0x1078, 0x4fd1, 0x147f, 0x157f, 0x007c, + 0x127e, 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, + 0x00c0, 0x52e7, 0xd1bc, 0x00c0, 0x5331, 0x0078, 0x5371, 0x2009, + 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, + 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, + 0x5328, 0x6020, 0xd0b4, 0x0040, 0x5328, 0x6024, 0xd094, 0x00c0, + 0x5328, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x5328, + 0x00f0, 0x52f4, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, + 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, + 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, + 0x00c0, 0x5327, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x531e, 0x027f, + 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, + 0x5371, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, + 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, + 0x4000, 0x0040, 0x536a, 0x6020, 0xd0bc, 0x0040, 0x536a, 0x2104, + 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x536a, 0x00f0, 0x533e, + 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, + 0xa10d, 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, + 0x6043, 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, + 0x5364, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, + 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x6f10, 0x7020, + 0xa005, 0x0040, 0x537d, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, + 0x0008, 0x20a2, 0x00f0, 0x5381, 0x20a2, 0x20a2, 0x007c, 0x0f7e, + 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2071, 0x6f10, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, + 0x87ff, 0x0040, 0x5417, 0x8cff, 0x0040, 0x5417, 0x601c, 0xa086, + 0x0006, 0x00c0, 0x5412, 0x88ff, 0x0040, 0x53ae, 0x2800, 0xac06, + 0x00c0, 0x5412, 0x2039, 0x0000, 0x0078, 0x53b2, 0x6018, 0xa206, + 0x00c0, 0x5412, 0x7024, 0xac06, 0x00c0, 0x53e0, 0x2069, 0x0100, + 0x68c0, 0xa005, 0x0040, 0x53db, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x1078, 0x54a4, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, + 0xa384, 0x1000, 0x0040, 0x53d0, 0x6803, 0x0100, 0x6803, 0x0000, + 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x53d8, 0x6827, 0x0001, + 0x037f, 0x0078, 0x53e0, 0x6003, 0x0009, 0x630a, 0x0078, 0x5412, + 0x7014, 0xac36, 0x00c0, 0x53e6, 0x660c, 0x7616, 0x7010, 0xac36, + 0x00c0, 0x53f4, 0x2c00, 0xaf36, 0x0040, 0x53f2, 0x2f00, 0x7012, + 0x0078, 0x53f4, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, + 0x0040, 0x53fd, 0x7e0e, 0x0078, 0x53fe, 0x2678, 0x600f, 0x0000, + 0x6010, 0x2068, 0x1078, 0x6120, 0x0040, 0x5408, 0x1078, 0x6bb3, + 0x1078, 0x6283, 0x1078, 0x5374, 0x88ff, 0x00c0, 0x5421, 0x0c7f, + 0x0078, 0x5398, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5398, 0xa006, + 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, + 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5418, + 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, + 0x2091, 0x8000, 0x2071, 0x6f10, 0x7638, 0x2660, 0x2678, 0x8cff, + 0x0040, 0x5493, 0x601c, 0xa086, 0x0006, 0x00c0, 0x548e, 0x88ff, + 0x0040, 0x5448, 0x2800, 0xac06, 0x00c0, 0x548e, 0x0078, 0x544c, + 0x6018, 0xa206, 0x00c0, 0x548e, 0x703c, 0xac06, 0x00c0, 0x545e, + 0x037e, 0x2019, 0x0001, 0x1078, 0x51da, 0x7033, 0x0000, 0x703f, + 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, + 0x00c0, 0x5464, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5472, + 0x2c00, 0xaf36, 0x0040, 0x5470, 0x2f00, 0x7036, 0x0078, 0x5472, + 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x547b, + 0x7e0e, 0x0078, 0x547c, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, + 0x1078, 0x6120, 0x0040, 0x5486, 0x1078, 0x6bb3, 0x1078, 0x6283, + 0x88ff, 0x00c0, 0x549d, 0x0c7f, 0x0078, 0x5437, 0x2c78, 0x600c, + 0x2060, 0x0078, 0x5437, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, + 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, + 0xa8c5, 0x0001, 0x0078, 0x5494, 0x0e7e, 0x2071, 0x6f10, 0x2001, + 0x6d00, 0x2004, 0xa086, 0x0002, 0x00c0, 0x54b2, 0x7007, 0x0005, + 0x0078, 0x54b4, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, + 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, + 0x6f10, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x54f4, + 0x2200, 0xac06, 0x00c0, 0x54ef, 0x7038, 0xac36, 0x00c0, 0x54d2, + 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x54e0, 0x2c00, 0xaf36, + 0x0040, 0x54de, 0x2f00, 0x7036, 0x0078, 0x54e0, 0x7037, 0x0000, + 0x660c, 0x2c00, 0xaf06, 0x0040, 0x54e8, 0x7e0e, 0x0078, 0x54e9, + 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x54f4, 0x2c78, + 0x600c, 0x2060, 0x0078, 0x54c5, 0x127f, 0x007f, 0x027f, 0x067f, + 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x2061, 0x7400, 0x2a70, 0x7060, + 0x7046, 0x704b, 0x7400, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x6d00, + 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x5536, 0x7048, + 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5522, 0xace0, 0x0008, + 0x7054, 0xac02, 0x00c8, 0x551e, 0x0078, 0x5511, 0x2061, 0x7400, + 0x0078, 0x5511, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008, + 0x7054, 0xa502, 0x00c8, 0x5532, 0x754a, 0xa085, 0x0001, 0x127f, + 0x0e7f, 0x007c, 0x704b, 0x7400, 0x0078, 0x552d, 0xa006, 0x0078, + 0x552f, 0x0e7e, 0x2071, 0x6d00, 0x7544, 0xa582, 0x0001, 0x0048, + 0x5567, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5554, + 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5550, 0x0078, 0x5543, + 0x2061, 0x7400, 0x0078, 0x5543, 0x6003, 0x0008, 0x8529, 0x7546, + 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5563, 0x754a, 0xa085, + 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7400, 0x0078, 0x555f, 0xa006, + 0x0078, 0x5561, 0xac82, 0x7400, 0x1048, 0x12b7, 0x2001, 0x6d15, + 0x2004, 0xac02, 0x10c8, 0x12b7, 0xa006, 0x6006, 0x600a, 0x600e, + 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x2061, + 0x6d00, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x5589, + 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x476a, 0x127f, 0x0078, + 0x5588, 0x601c, 0xa084, 0x000f, 0x0079, 0x5596, 0x559f, 0x55a7, + 0x55c3, 0x55df, 0x629a, 0x62b6, 0x62d2, 0x559f, 0x55a7, 0xa18e, + 0x0047, 0x00c0, 0x55a6, 0xa016, 0x1078, 0x1532, 0x007c, 0x067e, + 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12b7, 0x1079, 0x55b1, 0x067f, + 0x007c, 0x55c1, 0x5698, 0x5792, 0x55c1, 0x57d7, 0x55c1, 0x55c1, + 0x55c1, 0x5653, 0x5a4d, 0x55c1, 0x55c1, 0x55c1, 0x55c1, 0x55c1, + 0x55c1, 0x1078, 0x12b7, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, + 0x12b7, 0x1079, 0x55cd, 0x067f, 0x007c, 0x55dd, 0x55dd, 0x55dd, + 0x55dd, 0x55dd, 0x55dd, 0x55dd, 0x55dd, 0x5e10, 0x5edd, 0x55dd, + 0x5e29, 0x5e8f, 0x5e29, 0x5e8f, 0x55dd, 0x1078, 0x12b7, 0x067e, + 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12b7, 0x1079, 0x55e9, 0x067f, + 0x007c, 0x55f9, 0x5a96, 0x5b05, 0x5bbb, 0x5cd2, 0x55f9, 0x55f9, + 0x55f9, 0x5a75, 0x5dc6, 0x5dca, 0x55f9, 0x55f9, 0x55f9, 0x55f9, + 0x5df0, 0x1078, 0x12b7, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, + 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, + 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, + 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5609, 0x0e7e, 0x6010, 0x2070, + 0x7007, 0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x556a, 0x007c, + 0x0d7e, 0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x562d, 0x6018, + 0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, + 0x5637, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, + 0x556a, 0x037f, 0x0d7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, + 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x5650, 0x6018, + 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, + 0x0d7f, 0x0078, 0x5615, 0x2100, 0xa1b2, 0x0024, 0x10c8, 0x12b7, + 0x0079, 0x565a, 0x5680, 0x568c, 0x5680, 0x5680, 0x5680, 0x5680, + 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, + 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, + 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, 0x567e, + 0x567e, 0x5680, 0x567e, 0x5680, 0x5680, 0x567e, 0x1078, 0x12b7, + 0x6003, 0x0001, 0x6106, 0x1078, 0x4376, 0x127e, 0x2091, 0x8000, + 0x1078, 0x476a, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, + 0x4376, 0x127e, 0x2091, 0x8000, 0x1078, 0x476a, 0x127f, 0x007c, + 0x6004, 0xa0b2, 0x0024, 0x10c8, 0x12b7, 0xa1b6, 0x0013, 0x00c0, + 0x56a4, 0x2008, 0x0079, 0x5706, 0xa1b6, 0x0014, 0x00c0, 0x56fd, + 0x1078, 0x4671, 0x6004, 0xa08e, 0x0000, 0x0040, 0x56fe, 0xa08e, + 0x0002, 0x0040, 0x56c9, 0xa08e, 0x0003, 0x0040, 0x56c9, 0xa08e, + 0x0004, 0x0040, 0x56c9, 0xa08e, 0x001f, 0x0040, 0x56fe, 0xa08e, + 0x0021, 0x0040, 0x5702, 0xa08e, 0x0022, 0x0040, 0x56fe, 0x0078, + 0x56f9, 0x1078, 0x206f, 0x2001, 0x0007, 0x1078, 0x33f3, 0x6018, + 0xa080, 0x0028, 0x200c, 0x1078, 0x5778, 0xa186, 0x007e, 0x00c0, + 0x56df, 0x2001, 0x6d2f, 0x2014, 0xa295, 0x0001, 0x2202, 0x017e, + 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078, 0x445c, 0x1078, + 0x43a9, 0x0c7e, 0x6018, 0xa065, 0x0040, 0x56f0, 0x1078, 0x35cf, + 0x0c7f, 0x2c08, 0x1078, 0x6a57, 0x037f, 0x027f, 0x017f, 0x1078, + 0x342f, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, 0x1078, 0x5778, + 0x0078, 0x56f9, 0x1078, 0x5786, 0x0078, 0x56f9, 0x572c, 0x572e, + 0x5732, 0x5736, 0x573a, 0x573e, 0x572a, 0x572a, 0x572a, 0x572a, + 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, + 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, 0x572a, + 0x572a, 0x572a, 0x572a, 0x572a, 0x5742, 0x5748, 0x572a, 0x5752, + 0x5748, 0x572a, 0x1078, 0x12b7, 0x0078, 0x5748, 0x2001, 0x000b, + 0x0078, 0x575b, 0x2001, 0x0003, 0x0078, 0x575b, 0x2001, 0x0005, + 0x0078, 0x575b, 0x2001, 0x0001, 0x0078, 0x575b, 0x2001, 0x0009, + 0x0078, 0x575b, 0x1078, 0x12b7, 0x0078, 0x575a, 0x1078, 0x33f3, + 0x1078, 0x4671, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078, 0x476a, + 0x0078, 0x575a, 0x1078, 0x4671, 0x6003, 0x0004, 0x6017, 0x0028, + 0x1078, 0x476a, 0x007c, 0x1078, 0x33f3, 0x1078, 0x4671, 0x6003, + 0x0002, 0x037e, 0x2019, 0x6d5c, 0x2304, 0xa084, 0xff00, 0x00c0, + 0x576d, 0x2019, 0x0028, 0x0078, 0x5772, 0x8007, 0x8003, 0x801b, + 0x831b, 0xa318, 0x6316, 0x037f, 0x1078, 0x476a, 0x0078, 0x575a, + 0x0e7e, 0x6010, 0xa005, 0x0040, 0x5784, 0x2070, 0x7007, 0x0000, + 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f, 0x007c, 0x0e7e, 0xacf0, + 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, + 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, + 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12b7, 0x6604, 0xa6b6, 0x001f, + 0x00c0, 0x57a6, 0x1078, 0x55fb, 0x0078, 0x57c6, 0x6604, 0xa6b6, + 0x0000, 0x00c0, 0x57af, 0x1078, 0x563c, 0x0078, 0x57c6, 0x6604, + 0xa6b6, 0x0022, 0x00c0, 0x57b8, 0x1078, 0x5620, 0x0078, 0x57c6, + 0xa1b6, 0x0015, 0x00c0, 0x57c0, 0x1079, 0x57cb, 0x0078, 0x57c6, + 0xa1b6, 0x0016, 0x00c0, 0x57c7, 0x1079, 0x58f6, 0x007c, 0x1078, + 0x559f, 0x0078, 0x57c6, 0x57ef, 0x57f2, 0x57ef, 0x5833, 0x57ef, + 0x5892, 0x57ef, 0x57ef, 0x57ef, 0x58ce, 0x57ef, 0x58e4, 0xa1b6, + 0x0048, 0x0040, 0x57e3, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, + 0x1078, 0x1532, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, + 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x556a, 0x007c, 0x0005, + 0x0005, 0x007c, 0x0e7e, 0x2071, 0x6d00, 0x7078, 0xa086, 0x0074, + 0x00c0, 0x581c, 0x1078, 0x6a2b, 0x00c0, 0x580e, 0x0d7e, 0x6018, + 0x2068, 0x1078, 0x5820, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x33f3, + 0x1078, 0x206f, 0x1078, 0x556a, 0x0078, 0x581e, 0x2001, 0x000a, + 0x1078, 0x33f3, 0x1078, 0x206f, 0x6003, 0x0001, 0x6007, 0x0001, + 0x1078, 0x4376, 0x0078, 0x581e, 0x1078, 0x5889, 0x0e7f, 0x007c, + 0x6800, 0xd084, 0x0040, 0x5832, 0x2001, 0x0000, 0x1078, 0x33df, + 0x2069, 0x6d51, 0x6804, 0xd0a4, 0x0040, 0x5832, 0x2001, 0x0006, + 0x1078, 0x3401, 0x007c, 0x0d7e, 0x2011, 0x6d1e, 0x2204, 0xa086, + 0x0074, 0x00c0, 0x5885, 0x1078, 0x599f, 0x6018, 0x2068, 0xa080, + 0x0028, 0x2014, 0xa286, 0x007e, 0x0040, 0x5850, 0xa286, 0x0080, + 0x00c0, 0x5879, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x0078, 0x586f, + 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x6d2f, + 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071, 0x7280, 0x2079, 0x0100, + 0x2e04, 0xa084, 0x00ff, 0x2069, 0x6d19, 0x206a, 0x78e6, 0x8e70, + 0x2e04, 0x2069, 0x6d1a, 0x206a, 0x78ea, 0x0f7f, 0x0e7f, 0x2001, + 0x0006, 0x1078, 0x33f3, 0x1078, 0x206f, 0x1078, 0x556a, 0x0078, + 0x5887, 0x2001, 0x0004, 0x1078, 0x33f3, 0x6003, 0x0001, 0x6007, + 0x0003, 0x1078, 0x4376, 0x0078, 0x5887, 0x1078, 0x5889, 0x0d7f, + 0x007c, 0x2001, 0x0007, 0x1078, 0x33f3, 0x1078, 0x206f, 0x1078, + 0x556a, 0x007c, 0x0e7e, 0x2071, 0x6d00, 0x7078, 0xa086, 0x0014, + 0x00c0, 0x58c8, 0x7000, 0xa086, 0x0003, 0x00c0, 0x58a5, 0x6010, + 0xa005, 0x00c0, 0x58a5, 0x1078, 0x2ad1, 0x0d7e, 0x6018, 0x2068, + 0x1078, 0x34ca, 0x1078, 0x5820, 0x0d7f, 0x1078, 0x59a9, 0x00c0, + 0x58c8, 0x2001, 0x0006, 0x1078, 0x33f3, 0x0e7e, 0x6010, 0xa005, + 0x0040, 0x58c1, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, + 0x0200, 0x0e7f, 0x1078, 0x206f, 0x1078, 0x556a, 0x0078, 0x58cc, + 0x1078, 0x5778, 0x1078, 0x5889, 0x0e7f, 0x007c, 0x2011, 0x6d1e, + 0x2204, 0xa086, 0x0014, 0x00c0, 0x58e1, 0x2001, 0x0002, 0x1078, + 0x33f3, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4376, 0x0078, + 0x58e3, 0x1078, 0x5889, 0x007c, 0x2011, 0x6d1e, 0x2204, 0xa086, + 0x0004, 0x00c0, 0x58f3, 0x2001, 0x0007, 0x1078, 0x33f3, 0x1078, + 0x556a, 0x0078, 0x58f5, 0x1078, 0x5889, 0x007c, 0x57ef, 0x5902, + 0x57ef, 0x5928, 0x57ef, 0x5952, 0x57ef, 0x57ef, 0x57ef, 0x5967, + 0x57ef, 0x597a, 0x0c7e, 0x1078, 0x598d, 0x00c0, 0x5917, 0x2001, + 0x0000, 0x1078, 0x33df, 0x2001, 0x0002, 0x1078, 0x33f3, 0x6003, + 0x0001, 0x6007, 0x0002, 0x1078, 0x4376, 0x0078, 0x5926, 0x2009, + 0x728f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x5924, + 0x1078, 0x556a, 0x0078, 0x5926, 0x1078, 0x5889, 0x0c7f, 0x007c, + 0x1078, 0x599c, 0x00c0, 0x593c, 0x2001, 0x0000, 0x1078, 0x33df, + 0x2001, 0x0002, 0x1078, 0x33f3, 0x6003, 0x0001, 0x6007, 0x0002, + 0x1078, 0x4376, 0x0078, 0x5951, 0x1078, 0x5778, 0x2009, 0x728f, + 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x594f, 0x2001, + 0x0004, 0x1078, 0x33f3, 0x1078, 0x556a, 0x0078, 0x5951, 0x1078, + 0x5889, 0x007c, 0x1078, 0x599c, 0x00c0, 0x5962, 0x2001, 0x0004, + 0x1078, 0x33f3, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x4376, + 0x0078, 0x5966, 0x1078, 0x5778, 0x1078, 0x5889, 0x007c, 0x1078, + 0x599c, 0x00c0, 0x5977, 0x2001, 0x0008, 0x1078, 0x33f3, 0x6003, + 0x0001, 0x6007, 0x0005, 0x1078, 0x4376, 0x0078, 0x5979, 0x1078, + 0x5889, 0x007c, 0x1078, 0x599c, 0x00c0, 0x598a, 0x2001, 0x000a, + 0x1078, 0x33f3, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4376, + 0x0078, 0x598c, 0x1078, 0x5889, 0x007c, 0x2009, 0x728e, 0x2104, + 0xa086, 0x0003, 0x00c0, 0x599b, 0x2009, 0x728f, 0x2104, 0xa084, + 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, 0x007c, 0x0c7e, + 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x3459, 0x017f, 0x0c7f, + 0x007c, 0x0e7e, 0x2071, 0x728c, 0x7004, 0xa086, 0x0014, 0x00c0, + 0x59cc, 0x7008, 0xa086, 0x0800, 0x00c0, 0x59cc, 0x700c, 0xd0ec, + 0x0040, 0x59ca, 0xa084, 0x0f00, 0xa086, 0x0100, 0x00c0, 0x59ca, + 0x7024, 0xd0a4, 0x0040, 0x59ca, 0xd08c, 0x0040, 0x59ca, 0xa006, + 0x0078, 0x59cc, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, + 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2029, 0x6f19, 0x252c, 0x2021, 0x6f1f, 0x2424, 0x2061, + 0x7400, 0x2071, 0x6d00, 0x7244, 0x7060, 0xa202, 0x00c8, 0x5a23, + 0x1078, 0x6c0f, 0x0040, 0x5a1b, 0x671c, 0xa786, 0x0001, 0x0040, + 0x5a1b, 0xa786, 0x0007, 0x0040, 0x5a1b, 0x2500, 0xac06, 0x0040, + 0x5a1b, 0x2400, 0xac06, 0x0040, 0x5a1b, 0x0c7e, 0x6010, 0x2068, + 0x1078, 0x6120, 0x0040, 0x5a11, 0xa786, 0x0003, 0x00c0, 0x5a2d, + 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36a1, 0x1078, + 0x6276, 0x6000, 0xa086, 0x0004, 0x00c0, 0x5a18, 0x1078, 0x15f2, + 0x1078, 0x6283, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, + 0x5a23, 0x0078, 0x59e3, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, + 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, + 0x5a08, 0x1078, 0x6bb3, 0x0078, 0x5a11, 0x220c, 0x2304, 0xa106, + 0x00c0, 0x5a40, 0x8210, 0x8318, 0x00f0, 0x5a35, 0xa006, 0x007c, + 0x2304, 0xa102, 0x0048, 0x5a48, 0x2001, 0x0001, 0x0078, 0x5a4a, + 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x0024, + 0x10c8, 0x12b7, 0xa08e, 0x0000, 0x0040, 0x5a71, 0xa08e, 0x0002, + 0x0040, 0x5a68, 0xa08e, 0x0003, 0x0040, 0x5a68, 0xa08e, 0x0004, + 0x0040, 0x5a68, 0xa08e, 0x001f, 0x0040, 0x5a71, 0x0078, 0x5a6a, + 0x1078, 0x206f, 0x1078, 0x4671, 0x1078, 0x556a, 0x1078, 0x476a, + 0x007c, 0x1078, 0x5778, 0x0078, 0x5a6a, 0xa182, 0x0040, 0x0079, + 0x5a79, 0x5a88, 0x5a88, 0x5a88, 0x5a88, 0x5a88, 0x5a88, 0x5a88, + 0x5a88, 0x5a88, 0x5a88, 0x5a88, 0x5a8a, 0x5a8a, 0x5a8a, 0x5a8a, + 0x1078, 0x12b7, 0x6003, 0x0001, 0x6106, 0x1078, 0x4327, 0x127e, + 0x2091, 0x8000, 0x1078, 0x476a, 0x127f, 0x007c, 0xa186, 0x0013, + 0x00c0, 0x5a9f, 0x6004, 0xa082, 0x0040, 0x0079, 0x5adf, 0xa186, + 0x0014, 0x10c0, 0x12b7, 0x6004, 0xa082, 0x0040, 0x0079, 0x5aa8, + 0x5ab9, 0x5ab7, 0x5ab7, 0x5ab7, 0x5ab7, 0x5ab7, 0x5ab7, 0x5ab7, + 0x5ab7, 0x5ab7, 0x5ab7, 0x5ad4, 0x5ad4, 0x5ad4, 0x5ad4, 0x1078, + 0x12b7, 0x2001, 0x0007, 0x1078, 0x33f3, 0x1078, 0x4671, 0x0d7e, + 0x6110, 0x2168, 0x1078, 0x6120, 0x0040, 0x5ace, 0x6837, 0x0103, + 0x684b, 0x0028, 0x1078, 0x36a1, 0x1078, 0x6276, 0x0d7f, 0x1078, + 0x556a, 0x1078, 0x476a, 0x007c, 0x2001, 0x0007, 0x1078, 0x33f3, + 0x1078, 0x4671, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, 0x5af0, + 0x5aee, 0x5aee, 0x5aee, 0x5aee, 0x5aee, 0x5aee, 0x5aee, 0x5aee, + 0x5aee, 0x5aee, 0x5afe, 0x5afe, 0x5afe, 0x5afe, 0x1078, 0x12b7, + 0x1078, 0x4671, 0x6003, 0x0002, 0x1078, 0x476a, 0x6010, 0xa088, + 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4671, + 0x6003, 0x000f, 0x1078, 0x476a, 0x007c, 0xa182, 0x0040, 0x0079, + 0x5b09, 0x5b18, 0x5b18, 0x5b18, 0x5b18, 0x5b18, 0x5b1a, 0x5b98, + 0x5bb0, 0x5b18, 0x5b18, 0x5b18, 0x5b18, 0x5b18, 0x5b18, 0x5b18, + 0x1078, 0x12b7, 0x0e7e, 0x0d7e, 0x2071, 0x728c, 0x6110, 0x2168, + 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x5b87, 0xa68c, 0x00ff, + 0xa186, 0x0002, 0x0040, 0x5b4c, 0xa186, 0x0028, 0x00c0, 0x5b36, + 0x1078, 0x628a, 0x684b, 0x001c, 0x0078, 0x5b4e, 0xd6dc, 0x0040, + 0x5b41, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x5b4e, 0xd6d4, 0x0040, 0x5b4c, 0x684b, 0x0007, 0x7318, 0x6b62, + 0x731c, 0x6b5e, 0x0078, 0x5b4e, 0x684b, 0x0000, 0x6837, 0x0103, + 0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x5b61, 0x7328, 0x732c, 0x6b56, + 0x037e, 0x2308, 0x2019, 0x7298, 0xad90, 0x0019, 0x1078, 0x5f4c, + 0x037f, 0xd6cc, 0x0040, 0x5b8c, 0x7124, 0x695a, 0xa192, 0x0021, + 0x00c8, 0x5b75, 0x2071, 0x7298, 0x831c, 0x2300, 0xae18, 0xad90, + 0x001d, 0x1078, 0x5f4c, 0x0078, 0x5b8c, 0x6838, 0xd0fc, 0x0040, + 0x5b7e, 0x2009, 0x0020, 0x695a, 0x0078, 0x5b6a, 0x0f7e, 0x2d78, + 0x1078, 0x5ee4, 0x0f7f, 0x1078, 0x5f39, 0x0078, 0x5b8e, 0x684b, + 0x0000, 0x6837, 0x0103, 0x6e46, 0x1078, 0x36a1, 0x6218, 0x2268, + 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x556a, 0x007c, + 0x0f7e, 0x6003, 0x0003, 0x2079, 0x728c, 0x7c04, 0x7b00, 0x7e0c, + 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, + 0x2c10, 0x1078, 0x17de, 0x1078, 0x4395, 0x1078, 0x4821, 0x007c, + 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, + 0x1078, 0x1532, 0x007c, 0xa182, 0x0040, 0x0079, 0x5bbf, 0x5bce, + 0x5bce, 0x5bce, 0x5bce, 0x5bce, 0x5bd0, 0x5c5e, 0x5bce, 0x5bce, + 0x5c74, 0x5cb4, 0x5bce, 0x5bce, 0x5bce, 0x5bce, 0x1078, 0x12b7, + 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x728c, 0x6110, 0x2178, + 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, + 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5c59, 0xa694, + 0xff00, 0xa284, 0x0c00, 0x0040, 0x5bf1, 0x7018, 0x7862, 0x701c, + 0x785e, 0xa284, 0x0300, 0x0040, 0x5c59, 0x1078, 0x130f, 0x1040, + 0x12b7, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, + 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, + 0x00ff, 0xa186, 0x0002, 0x0040, 0x5c2b, 0xa186, 0x0028, 0x00c0, + 0x5c15, 0x684b, 0x001c, 0x0078, 0x5c2d, 0xd6dc, 0x0040, 0x5c20, + 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5c2d, + 0xd6d4, 0x0040, 0x5c2b, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, + 0x6b5e, 0x0078, 0x5c2d, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, + 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5c42, 0x7328, 0x732c, + 0x6b56, 0x037e, 0x2308, 0x2019, 0x7298, 0xad90, 0x0019, 0x1078, + 0x5f4c, 0x037f, 0xd6cc, 0x0040, 0x5c59, 0x7124, 0x695a, 0xa192, + 0x0021, 0x00c8, 0x5c56, 0x2071, 0x7298, 0x831c, 0x2300, 0xae18, + 0xad90, 0x001d, 0x1078, 0x5f4c, 0x0078, 0x5c59, 0x2d78, 0x1078, + 0x5ee4, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, + 0x0003, 0x2079, 0x728c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, - 0x1936, 0x1078, 0x44aa, 0x1078, 0x4943, 0x007c, 0x6003, 0x0004, - 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, - 0x007c, 0xa182, 0x0040, 0x0079, 0x5c0d, 0x5c1d, 0x5c1d, 0x5c1d, - 0x5c1d, 0x5c1d, 0x5c1f, 0x5cb6, 0x5c1d, 0x5c1d, 0x5ccc, 0x5d2e, - 0x5c1d, 0x5c1d, 0x5c1d, 0x5c1d, 0x5d35, 0x1078, 0x1288, 0x077e, - 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x738c, 0x6110, 0x2178, 0x7614, + 0x17de, 0x1078, 0x4fca, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, + 0x4719, 0x1078, 0x4821, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, + 0x5cb2, 0xd1cc, 0x0040, 0x5c8d, 0x6948, 0x017e, 0x1078, 0x1338, + 0x0d7f, 0x1078, 0x5f39, 0x0078, 0x5cb0, 0x6837, 0x0103, 0x6944, + 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5cac, 0xa086, 0x0028, + 0x00c0, 0x5c9e, 0x684b, 0x001c, 0x0078, 0x5cae, 0xd1dc, 0x0040, + 0x5ca5, 0x684b, 0x0015, 0x0078, 0x5cae, 0xd1d4, 0x0040, 0x5cac, + 0x684b, 0x0007, 0x0078, 0x5cae, 0x684b, 0x0000, 0x1078, 0x36a1, + 0x1078, 0x556a, 0x0d7f, 0x007c, 0x2001, 0x0007, 0x1078, 0x33f3, + 0x1078, 0x4719, 0x0f7e, 0x0d7e, 0x6110, 0x2178, 0x1078, 0x6120, + 0x0040, 0x5ccb, 0x7837, 0x0103, 0x784b, 0x0028, 0x2f68, 0x1078, + 0x36a1, 0x1078, 0x6276, 0x0d7f, 0x0f7f, 0x1078, 0x556a, 0x1078, + 0x4821, 0x007c, 0xa182, 0x0040, 0x0079, 0x5cd6, 0x5ce5, 0x5ce5, + 0x5ce5, 0x5ce5, 0x5ce5, 0x5ce7, 0x5ce5, 0x5d82, 0x5d8a, 0x5ce5, + 0x5ce5, 0x5ce5, 0x5ce5, 0x5ce5, 0x5ce5, 0x1078, 0x12b7, 0x077e, + 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x728c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5cb1, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0040, 0x5c40, 0x7018, 0x7862, 0x701c, 0x785e, - 0xa284, 0x0300, 0x0040, 0x5cb1, 0x1078, 0x12e2, 0x1040, 0x1288, - 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, - 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, - 0xa186, 0x0002, 0x0040, 0x5c7a, 0xa186, 0x0028, 0x00c0, 0x5c64, - 0x684b, 0x001c, 0x0078, 0x5c7c, 0xd6dc, 0x0040, 0x5c6f, 0x684b, - 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5c7c, 0xd6d4, - 0x0040, 0x5c7a, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, - 0x0078, 0x5c7c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, - 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5c91, 0x7328, 0x732c, 0x6b56, - 0x037e, 0x2308, 0x2019, 0x7398, 0xad90, 0x0019, 0x1078, 0x6008, - 0x037f, 0xd6cc, 0x0040, 0x5cb1, 0x7124, 0x695a, 0xa192, 0x0021, - 0x00c8, 0x5ca5, 0x2071, 0x7398, 0x831c, 0x2300, 0xae18, 0xad90, - 0x001d, 0x1078, 0x6008, 0x0078, 0x5cb1, 0x7838, 0xd0fc, 0x0040, - 0x5cae, 0x2009, 0x0020, 0x695a, 0x0078, 0x5c9a, 0x2d78, 0x1078, - 0x5fa0, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, - 0x0003, 0x2079, 0x738c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, - 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, - 0x1936, 0x1078, 0x4f73, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, - 0x4842, 0x1078, 0x4943, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, - 0x5d2c, 0xd1cc, 0x0040, 0x5d07, 0x6948, 0x6838, 0xd0fc, 0x0040, - 0x5cff, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, - 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, - 0x8318, 0x8210, 0x00f0, 0x5cee, 0x157f, 0x007f, 0x6852, 0x007f, - 0x684e, 0x017f, 0x2168, 0x1078, 0x130b, 0x0078, 0x5d2a, 0x017e, - 0x1078, 0x130b, 0x0d7f, 0x1078, 0x5ff5, 0x0078, 0x5d2a, 0x6837, - 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5d26, - 0xa086, 0x0028, 0x00c0, 0x5d18, 0x684b, 0x001c, 0x0078, 0x5d28, - 0xd1dc, 0x0040, 0x5d1f, 0x684b, 0x0015, 0x0078, 0x5d28, 0xd1d4, - 0x0040, 0x5d26, 0x684b, 0x0007, 0x0078, 0x5d28, 0x684b, 0x0000, - 0x1078, 0x3720, 0x1078, 0x55d5, 0x0d7f, 0x007c, 0x6003, 0x0002, - 0x1078, 0x4842, 0x1078, 0x4943, 0x007c, 0x1078, 0x4842, 0x1078, - 0x21a8, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6216, 0x0040, 0x5d48, - 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3720, 0x1078, 0x632a, - 0x0d7f, 0x1078, 0x55d5, 0x1078, 0x4943, 0x007c, 0x684b, 0x0015, - 0xd1fc, 0x0040, 0x5d5a, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, - 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, - 0x5d61, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d73, 0x5d71, - 0x5e17, 0x5e1f, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71, - 0x5d71, 0x1078, 0x1288, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, - 0x738c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, - 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, - 0x0040, 0x5e09, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x5d94, - 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x5e06, - 0x1078, 0x12e2, 0x1040, 0x1288, 0x2d00, 0x784a, 0x7f4c, 0xa7bd, - 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, - 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, - 0x5dcf, 0xa186, 0x0028, 0x00c0, 0x5db9, 0x684b, 0x001c, 0x0078, - 0x5dd1, 0xd6dc, 0x0040, 0x5dc4, 0x684b, 0x0015, 0x7318, 0x6b62, - 0x731c, 0x6b5e, 0x0078, 0x5dd1, 0xd6d4, 0x0040, 0x5dcf, 0x684b, - 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5dd1, 0x684b, - 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, - 0x0040, 0x5de6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, - 0x7398, 0xad90, 0x0019, 0x1078, 0x6008, 0x037f, 0xd6cc, 0x0040, - 0x5e06, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x5dfa, 0x2071, - 0x7398, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6008, - 0x0078, 0x5e06, 0x7838, 0xd0fc, 0x0040, 0x5e03, 0x2009, 0x0020, - 0x695a, 0x0078, 0x5def, 0x2d78, 0x1078, 0x5fa0, 0xd6dc, 0x00c0, - 0x5e0c, 0xa006, 0x0078, 0x5e10, 0x2001, 0x0001, 0x7218, 0x731c, - 0x1078, 0x1569, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, 0x007c, 0x0d7e, - 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x5e86, - 0xd1cc, 0x0040, 0x5e56, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x5e4e, - 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, - 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, - 0x8210, 0x00f0, 0x5e3d, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, - 0x017f, 0x2168, 0x1078, 0x130b, 0x0078, 0x5e84, 0x017e, 0x1078, - 0x130b, 0x0d7f, 0x1078, 0x5ff5, 0x0078, 0x5e84, 0x6837, 0x0103, - 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5e75, 0xa086, - 0x0028, 0x00c0, 0x5e67, 0x684b, 0x001c, 0x0078, 0x5e82, 0xd1dc, - 0x0040, 0x5e6e, 0x684b, 0x0015, 0x0078, 0x5e82, 0xd1d4, 0x0040, - 0x5e75, 0x684b, 0x0007, 0x0078, 0x5e82, 0x684b, 0x0000, 0x684c, - 0xd0ac, 0x0040, 0x5e82, 0x6810, 0x6914, 0xa115, 0x0040, 0x5e82, - 0x1078, 0x5d4e, 0x1078, 0x3720, 0x1078, 0x55d5, 0x0d7f, 0x007c, - 0x1078, 0x479a, 0x0078, 0x5e8e, 0x1078, 0x4842, 0x1078, 0x6216, - 0x0040, 0x5ea5, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, - 0x6f0c, 0x210c, 0xd18c, 0x00c0, 0x5eae, 0xd184, 0x00c0, 0x5eaa, - 0x6108, 0x694a, 0x1078, 0x3720, 0x0d7f, 0x1078, 0x55d5, 0x1078, - 0x4893, 0x007c, 0x684b, 0x0004, 0x0078, 0x5ea2, 0x684b, 0x0004, - 0x0078, 0x5ea2, 0xa182, 0x0040, 0x0079, 0x5eb6, 0x5ec6, 0x5ec6, - 0x5ec6, 0x5ec6, 0x5ec6, 0x5ec8, 0x5ec6, 0x5ecb, 0x5ec6, 0x5ec6, - 0x5ec6, 0x5ec6, 0x5ec6, 0x5ec6, 0x5ec6, 0x5ec6, 0x1078, 0x1288, - 0x1078, 0x55d5, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078, 0x1525, - 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x5ed7, 0x5ee0, - 0x5ede, 0x5ede, 0x5ede, 0x5ede, 0x5ede, 0x5ede, 0x1078, 0x1288, - 0x6003, 0x0001, 0x6106, 0x1078, 0x443e, 0x127e, 0x2091, 0x8000, - 0x1078, 0x4893, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x5ef6, - 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x5f2a, 0xa186, 0x0027, - 0x00c0, 0x5f17, 0x1078, 0x479a, 0x1078, 0x21a8, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x6216, 0x0040, 0x5f0d, 0x6837, 0x0103, 0x684b, - 0x0029, 0x1078, 0x3720, 0x1078, 0x632a, 0x0d7f, 0x1078, 0x55d5, - 0x1078, 0x4893, 0x007c, 0x1078, 0x5609, 0x0078, 0x5f12, 0xa186, - 0x0014, 0x00c0, 0x5f13, 0x1078, 0x479a, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x6216, 0x0040, 0x5f0d, 0x6837, 0x0103, 0x684b, 0x0006, - 0x0078, 0x5f09, 0x5f33, 0x5f31, 0x5f31, 0x5f31, 0x5f31, 0x5f31, - 0x5f3c, 0x1078, 0x1288, 0x1078, 0x479a, 0x6017, 0x0014, 0x6003, - 0x000c, 0x1078, 0x4893, 0x007c, 0x1078, 0x479a, 0x6017, 0x0014, - 0x6003, 0x000e, 0x1078, 0x4893, 0x007c, 0xa182, 0x008c, 0x00c8, - 0x5f4f, 0xa182, 0x0085, 0x0048, 0x5f4f, 0x0079, 0x5f52, 0x1078, - 0x5609, 0x007c, 0x5f59, 0x5f59, 0x5f59, 0x5f59, 0x5f5b, 0x5f7a, - 0x5f59, 0x1078, 0x1288, 0x0d7e, 0x1078, 0x632a, 0x1078, 0x6216, - 0x0040, 0x5f76, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850, 0xd0b4, - 0x0040, 0x5f6e, 0x684b, 0x0006, 0x0078, 0x5f72, 0x684b, 0x0005, - 0x1078, 0x63dd, 0x6847, 0x0000, 0x1078, 0x3720, 0x1078, 0x55d5, - 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6216, 0x0040, - 0x5f95, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x5f8b, 0x684b, - 0x0006, 0x0078, 0x5f8f, 0x684b, 0x0005, 0x1078, 0x63dd, 0x6847, - 0x0000, 0x1078, 0x3720, 0x1078, 0x632a, 0x0d7f, 0x1078, 0x55d5, - 0x007c, 0x1078, 0x479a, 0x1078, 0x55d5, 0x1078, 0x4893, 0x007c, - 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182, 0x0101, - 0x00c8, 0x5fac, 0x0078, 0x5fae, 0x2009, 0x0100, 0x2130, 0x2069, - 0x7398, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d, - 0x1078, 0x6008, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040, 0x5fc2, - 0x1078, 0x130b, 0x1078, 0x12e2, 0x0040, 0x5fec, 0x8528, 0x6837, - 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x00c8, - 0x5fd8, 0x2608, 0xad90, 0x000f, 0x1078, 0x6008, 0x0078, 0x5fec, - 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f, 0x1078, - 0x6008, 0x0078, 0x5fc2, 0x0f7f, 0x852f, 0xa5ad, 0x0003, 0x7d36, - 0xa5ac, 0x0000, 0x0078, 0x5ff1, 0x0f7f, 0x852f, 0xa5ad, 0x0003, - 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff, 0x0040, - 0x6006, 0x6804, 0xa07d, 0x0040, 0x6004, 0x6807, 0x0000, 0x1078, - 0x3720, 0x2f68, 0x0078, 0x5ff9, 0x1078, 0x3720, 0x0f7f, 0x007c, - 0x157e, 0xa184, 0x0001, 0x0040, 0x600e, 0x8108, 0x810c, 0x21a8, - 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6010, 0x157f, - 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x0007, 0x1079, - 0x6023, 0x127f, 0x007c, 0x6032, 0x602b, 0x602d, 0x604b, 0x602b, - 0x602d, 0x602d, 0x602d, 0x1078, 0x1288, 0xa006, 0x007c, 0xa085, - 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6216, 0x0040, - 0x6048, 0xa00e, 0x2001, 0x0005, 0x1078, 0x37b0, 0x1078, 0x63dd, - 0x1078, 0x3720, 0x1078, 0x55d5, 0xa085, 0x0001, 0x0d7f, 0x007c, - 0xa006, 0x0078, 0x6046, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1288, - 0x1079, 0x6053, 0x007c, 0x6063, 0x6080, 0x6065, 0x6091, 0x607c, - 0x6063, 0x602d, 0x6032, 0x6032, 0x602d, 0x602d, 0x602d, 0x602d, - 0x602d, 0x602d, 0x602d, 0x1078, 0x1288, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x6216, 0x0040, 0x606e, 0x1078, 0x63dd, 0x0d7f, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x443e, 0x1078, - 0x4893, 0xa085, 0x0001, 0x007c, 0x1078, 0x1629, 0x0078, 0x6065, - 0x0e7e, 0x2071, 0x70b6, 0x7024, 0xac06, 0x00c0, 0x6089, 0x1078, - 0x50a9, 0x1078, 0x5017, 0x0e7f, 0x00c0, 0x6065, 0x1078, 0x602d, - 0x007c, 0x037e, 0x0e7e, 0x2071, 0x70b6, 0x703c, 0xac06, 0x00c0, - 0x60a1, 0x2019, 0x0000, 0x1078, 0x513b, 0x0e7f, 0x037f, 0x0078, - 0x6065, 0x1078, 0x5417, 0x0e7f, 0x037f, 0x00c0, 0x6065, 0x1078, - 0x602d, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x0007, 0x1079, 0x60b2, - 0x0c7f, 0x007c, 0x60c0, 0x611d, 0x61ba, 0x60c4, 0x60c0, 0x60c0, - 0x6a64, 0x55d5, 0x1078, 0x6364, 0x00c0, 0x60c0, 0x1078, 0x57d2, - 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, - 0x1288, 0x1079, 0x60cc, 0x007c, 0x60dc, 0x60de, 0x60fe, 0x6110, - 0x6110, 0x60dc, 0x60c0, 0x60c0, 0x60c0, 0x6110, 0x6110, 0x60dc, - 0x60dc, 0x60dc, 0x60dc, 0x611a, 0x1078, 0x1288, 0x0e7e, 0x6010, - 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x70b6, 0x7024, 0xac06, - 0x0040, 0x60fa, 0x1078, 0x5017, 0x6007, 0x0085, 0x6003, 0x000b, - 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x443e, 0x1078, 0x4893, - 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x60f8, 0x0d7e, 0x6010, - 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, - 0x000b, 0x601f, 0x0002, 0x1078, 0x443e, 0x1078, 0x4893, 0x007c, - 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, - 0x0d7f, 0x007c, 0x1078, 0x55d5, 0x007c, 0x6000, 0xa08a, 0x0010, - 0x10c8, 0x1288, 0x1079, 0x6125, 0x007c, 0x6135, 0x60c1, 0x6137, - 0x6135, 0x6135, 0x6135, 0x6135, 0x6135, 0x60ba, 0x60ba, 0x6135, - 0x6135, 0x6135, 0x6135, 0x6135, 0x6135, 0x1078, 0x1288, 0x0d7e, - 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, - 0x10c8, 0x1288, 0x1079, 0x6145, 0x007c, 0x6151, 0x616c, 0x6151, - 0x616c, 0x6151, 0x616c, 0x6153, 0x615c, 0x6151, 0x616c, 0x6151, - 0x6161, 0x1078, 0x1288, 0x6004, 0xa08e, 0x0004, 0x0040, 0x6163, - 0xa08e, 0x0002, 0x0040, 0x6163, 0x6004, 0x1078, 0x6364, 0x0040, - 0x61b6, 0x1078, 0x21a8, 0x1078, 0x6364, 0x00c0, 0x6169, 0x1078, - 0x57d2, 0x1078, 0x55d5, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, - 0x0016, 0x0040, 0x61a6, 0xa186, 0x0002, 0x00c0, 0x6191, 0x6018, - 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6191, 0x8001, - 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, - 0x556f, 0x0040, 0x6191, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, - 0x61a6, 0x0d7f, 0x0c7f, 0x1078, 0x6364, 0x00c0, 0x6199, 0x1078, - 0x57d2, 0x1078, 0x21a8, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, - 0x21c6, 0x127f, 0x0e7f, 0x1078, 0x55d5, 0x007c, 0x2001, 0x0002, - 0x1078, 0x3477, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x448b, - 0x1078, 0x4893, 0x0d7f, 0x0c7f, 0x0078, 0x61a5, 0x1078, 0x57d2, - 0x0078, 0x6169, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x61c2, 0x007c, 0x61d2, 0x61d2, 0x61d2, 0x61d2, 0x61d2, 0x61d2, - 0x61d2, 0x61d2, 0x61d2, 0x60c0, 0x61d2, 0x60c1, 0x61d4, 0x60c1, - 0x61dd, 0x61d2, 0x1078, 0x1288, 0x6007, 0x008b, 0x6003, 0x000d, - 0x1078, 0x443e, 0x1078, 0x4893, 0x007c, 0x1078, 0x632a, 0x1078, - 0x6216, 0x0040, 0x61ff, 0x1078, 0x21a8, 0x0d7e, 0x1078, 0x6216, - 0x0040, 0x61f2, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, - 0x1078, 0x3720, 0x0d7f, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, - 0x0001, 0x1078, 0x448b, 0x1078, 0x4893, 0x0078, 0x6201, 0x1078, - 0x55d5, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6213, 0xa282, 0x7500, - 0x0048, 0x6213, 0x2001, 0x6f15, 0x2004, 0xa202, 0x00c8, 0x6213, - 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6212, 0x027e, 0x0e7e, - 0x2071, 0x6f00, 0x6210, 0x7058, 0xa202, 0x0048, 0x6228, 0x705c, - 0xa202, 0x00c8, 0x6228, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, - 0xa006, 0x0078, 0x6225, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2061, 0x7500, 0x2071, 0x6f00, 0x7344, 0x7060, - 0xa302, 0x00c8, 0x6251, 0x601c, 0xa206, 0x00c0, 0x6249, 0x1078, - 0x6364, 0x00c0, 0x6245, 0x1078, 0x57d2, 0x0c7e, 0x1078, 0x55d5, - 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x6251, 0x0078, - 0x6236, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0c7e, - 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x556f, 0x057f, - 0x0040, 0x6270, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, 0x004b, - 0x1078, 0x55fc, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x626c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, - 0x62a0, 0x0c7e, 0x1078, 0x556f, 0x057f, 0x0040, 0x629a, 0x6013, - 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, 0x364c, - 0x0c7f, 0x1078, 0x457b, 0x1078, 0x44be, 0x2c08, 0x1078, 0x6bfe, - 0x2009, 0x004c, 0x1078, 0x55fc, 0xa085, 0x0001, 0x127f, 0x057f, - 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6296, 0x0c7e, 0x057e, 0x127e, - 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x556f, 0x057f, 0x0040, - 0x62c5, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, - 0x2560, 0x1078, 0x364c, 0x0c7f, 0x1078, 0x457b, 0x1078, 0x44be, - 0x2c08, 0x1078, 0x6bfe, 0x2009, 0x004d, 0x1078, 0x55fc, 0xa085, - 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x62c1, + 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5d74, 0xa694, 0xff00, + 0xa284, 0x0c00, 0x0040, 0x5d08, 0x7018, 0x7862, 0x701c, 0x785e, + 0xa284, 0x0300, 0x0040, 0x5d71, 0x1078, 0x130f, 0x1040, 0x12b7, + 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, + 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, + 0x00ff, 0xa186, 0x0002, 0x0040, 0x5d43, 0xa186, 0x0028, 0x00c0, + 0x5d2d, 0x684b, 0x001c, 0x0078, 0x5d45, 0xd6dc, 0x0040, 0x5d38, + 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5d45, + 0xd6d4, 0x0040, 0x5d43, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, + 0x6b5e, 0x0078, 0x5d45, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, + 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5d5a, 0x7328, 0x732c, + 0x6b56, 0x037e, 0x2308, 0x2019, 0x7298, 0xad90, 0x0019, 0x1078, + 0x5f4c, 0x037f, 0xd6cc, 0x0040, 0x5d71, 0x7124, 0x695a, 0xa192, + 0x0021, 0x00c8, 0x5d6e, 0x2071, 0x7298, 0x831c, 0x2300, 0xae18, + 0xad90, 0x001d, 0x1078, 0x5f4c, 0x0078, 0x5d71, 0x2d78, 0x1078, + 0x5ee4, 0xd6dc, 0x00c0, 0x5d77, 0xa006, 0x0078, 0x5d7b, 0x2001, + 0x0001, 0x7218, 0x731c, 0x1078, 0x156f, 0x0d7f, 0x0e7f, 0x0f7f, + 0x077f, 0x007c, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, + 0x1532, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, + 0xd1e4, 0x0040, 0x5dc4, 0xd1cc, 0x0040, 0x5d9f, 0x6948, 0x017e, + 0x1078, 0x1338, 0x0d7f, 0x1078, 0x5f39, 0x0078, 0x5dc2, 0x6837, + 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5dbe, + 0xa086, 0x0028, 0x00c0, 0x5db0, 0x684b, 0x001c, 0x0078, 0x5dc0, + 0xd1dc, 0x0040, 0x5db7, 0x684b, 0x0015, 0x0078, 0x5dc0, 0xd1d4, + 0x0040, 0x5dbe, 0x684b, 0x0007, 0x0078, 0x5dc0, 0x684b, 0x0000, + 0x1078, 0x36a1, 0x1078, 0x556a, 0x0d7f, 0x007c, 0x1078, 0x4671, + 0x0078, 0x5dcc, 0x1078, 0x4719, 0x1078, 0x6120, 0x0040, 0x5de3, + 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0x6d0c, 0x210c, + 0xd18c, 0x00c0, 0x5dec, 0xd184, 0x00c0, 0x5de8, 0x6108, 0x694a, + 0x1078, 0x36a1, 0x0d7f, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, + 0x684b, 0x0004, 0x0078, 0x5de0, 0x684b, 0x0004, 0x0078, 0x5de0, + 0xa182, 0x0040, 0x0079, 0x5df4, 0x5e03, 0x5e03, 0x5e03, 0x5e03, + 0x5e03, 0x5e05, 0x5e03, 0x5e08, 0x5e03, 0x5e03, 0x5e03, 0x5e03, + 0x5e03, 0x5e03, 0x5e03, 0x1078, 0x12b7, 0x1078, 0x556a, 0x007c, + 0x007e, 0x027e, 0xa016, 0x1078, 0x1532, 0x027f, 0x007f, 0x007c, + 0xa182, 0x0025, 0x0079, 0x5e14, 0x5e1d, 0x5e1b, 0x5e1b, 0x5e1b, + 0x5e1b, 0x5e1b, 0x5e1b, 0x1078, 0x12b7, 0x6003, 0x0001, 0x6106, + 0x1078, 0x4327, 0x127e, 0x2091, 0x8000, 0x1078, 0x476a, 0x127f, + 0x007c, 0xa186, 0x0013, 0x00c0, 0x5e33, 0x6004, 0xa082, 0x0025, + 0x2008, 0x0079, 0x5e74, 0xa186, 0x0014, 0x00c0, 0x5e70, 0x1078, + 0x4671, 0x2001, 0x0007, 0x1078, 0x33f3, 0x6018, 0xa080, 0x0028, + 0x200c, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078, + 0x445c, 0x1078, 0x43a9, 0x0c7e, 0x6018, 0xa065, 0x0040, 0x5e52, + 0x1078, 0x35cf, 0x0c7f, 0x2c08, 0x1078, 0x6a57, 0x037f, 0x027f, + 0x017f, 0x1078, 0x342f, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6120, + 0x0040, 0x5e6a, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x36a1, + 0x1078, 0x6276, 0x0d7f, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, + 0x1078, 0x559f, 0x0078, 0x5e6f, 0x5e7d, 0x5e7b, 0x5e7b, 0x5e7b, + 0x5e7b, 0x5e7b, 0x5e86, 0x1078, 0x12b7, 0x1078, 0x4671, 0x6017, + 0x0014, 0x6003, 0x000c, 0x1078, 0x476a, 0x007c, 0x1078, 0x4671, + 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, 0x476a, 0x007c, 0xa182, + 0x002c, 0x00c8, 0x5e99, 0xa182, 0x0025, 0x0048, 0x5e99, 0x0079, + 0x5e9c, 0x1078, 0x559f, 0x007c, 0x5ea3, 0x5ea3, 0x5ea3, 0x5ea3, + 0x5ea5, 0x5ebf, 0x5ea3, 0x1078, 0x12b7, 0x0d7e, 0x1078, 0x6276, + 0x6010, 0x2068, 0x6837, 0x0103, 0x6850, 0xa084, 0x0040, 0x0040, + 0x5eb5, 0x684b, 0x0006, 0x0078, 0x5eb7, 0x684b, 0x0005, 0x6847, + 0x0000, 0x1078, 0x36a1, 0x1078, 0x556a, 0x0d7f, 0x007c, 0x0d7e, + 0x6010, 0x2068, 0x1078, 0x6120, 0x0040, 0x5ed9, 0x6837, 0x0103, + 0x6850, 0xa084, 0x0040, 0x0040, 0x5ed1, 0x684b, 0x0006, 0x0078, + 0x5ed3, 0x684b, 0x0005, 0x6847, 0x0000, 0x1078, 0x36a1, 0x1078, + 0x6276, 0x0d7f, 0x1078, 0x556a, 0x007c, 0x1078, 0x4671, 0x1078, + 0x556a, 0x1078, 0x476a, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, + 0x2029, 0x0001, 0xa182, 0x0101, 0x00c8, 0x5ef0, 0x0078, 0x5ef2, + 0x2009, 0x0100, 0x2130, 0x2069, 0x7298, 0x831c, 0x2300, 0xad18, + 0x2009, 0x0020, 0xaf90, 0x001d, 0x1078, 0x5f4c, 0xa6b2, 0x0020, + 0x7804, 0xa06d, 0x0040, 0x5f06, 0x1078, 0x1338, 0x1078, 0x130f, + 0x0040, 0x5f30, 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, + 0x7c06, 0xa68a, 0x003d, 0x00c8, 0x5f1c, 0x2608, 0xad90, 0x000f, + 0x1078, 0x5f4c, 0x0078, 0x5f30, 0xa6b2, 0x003c, 0x2009, 0x003c, + 0x2d78, 0xad90, 0x000f, 0x1078, 0x5f4c, 0x0078, 0x5f06, 0x0f7f, + 0x852f, 0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x5f35, + 0x0f7f, 0x852f, 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, + 0x007c, 0x0f7e, 0x8dff, 0x0040, 0x5f4a, 0x6804, 0xa07d, 0x0040, + 0x5f48, 0x6807, 0x0000, 0x1078, 0x36a1, 0x2f68, 0x0078, 0x5f3d, + 0x1078, 0x36a1, 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, + 0x5f52, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, + 0x8210, 0x00f0, 0x5f54, 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, + 0x601c, 0xa084, 0x000f, 0x1079, 0x5f67, 0x127f, 0x007c, 0x5f76, + 0x5f6f, 0x5f71, 0x5f8d, 0x5f6f, 0x5f71, 0x5f71, 0x5f71, 0x1078, + 0x12b7, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, + 0x2068, 0x1078, 0x6120, 0x0040, 0x5f8a, 0xa00e, 0x2001, 0x0005, + 0x1078, 0x372d, 0x1078, 0x36a1, 0x1078, 0x556a, 0xa085, 0x0001, + 0x0d7f, 0x007c, 0xa006, 0x0078, 0x5f88, 0x6000, 0xa08a, 0x0010, + 0x10c8, 0x12b7, 0x1079, 0x5f95, 0x007c, 0x5fa5, 0x5fc4, 0x5fa7, + 0x5fd5, 0x5fc0, 0x5fa5, 0x5f71, 0x5f76, 0x5f76, 0x5f71, 0x5f71, + 0x5f71, 0x5f71, 0x5f71, 0x5f71, 0x5f71, 0x1078, 0x12b7, 0x0d7e, + 0x6010, 0x2068, 0x1078, 0x6120, 0x0040, 0x5fb2, 0x6850, 0xa085, + 0x0005, 0x6852, 0x0d7f, 0x6007, 0x0025, 0x6003, 0x000b, 0x601f, + 0x0002, 0x1078, 0x4327, 0x1078, 0x476a, 0xa085, 0x0001, 0x007c, + 0x1078, 0x15f2, 0x0078, 0x5fa7, 0x0e7e, 0x2071, 0x6f10, 0x7024, + 0xac06, 0x00c0, 0x5fcd, 0x1078, 0x5148, 0x1078, 0x5083, 0x0e7f, + 0x00c0, 0x5fa7, 0x1078, 0x5f71, 0x007c, 0x037e, 0x0e7e, 0x2071, + 0x6f10, 0x703c, 0xac06, 0x00c0, 0x5fe1, 0x2019, 0x0000, 0x1078, + 0x51da, 0x1078, 0x54b6, 0x0e7f, 0x037f, 0x00c0, 0x5fa7, 0x1078, + 0x5f71, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079, 0x5ff2, + 0x0c7f, 0x007c, 0x5ffb, 0x605b, 0x60c8, 0x5fff, 0x5ffb, 0x5ffb, + 0x5ffb, 0x556a, 0x605b, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, + 0xa08a, 0x0010, 0x10c8, 0x12b7, 0x1079, 0x6007, 0x007c, 0x6017, + 0x6019, 0x603a, 0x604d, 0x604d, 0x6017, 0x5ffb, 0x5ffb, 0x5ffb, + 0x604d, 0x604d, 0x6017, 0x6017, 0x6017, 0x6017, 0x6058, 0x1078, + 0x12b7, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xa085, 0x0040, 0x7052, + 0x2071, 0x6f10, 0x7024, 0xac06, 0x0040, 0x6036, 0x1078, 0x5083, + 0x6007, 0x0025, 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, + 0x1078, 0x4327, 0x1078, 0x476a, 0x0e7f, 0x007c, 0x6017, 0x0001, + 0x0078, 0x6034, 0x0d7e, 0x6010, 0x2068, 0x6850, 0xa085, 0x0040, + 0x6852, 0x0d7f, 0x6007, 0x0025, 0x6003, 0x000b, 0x601f, 0x0002, + 0x1078, 0x4327, 0x1078, 0x476a, 0x007c, 0x0d7e, 0x6017, 0x0001, + 0x6010, 0x2068, 0x6850, 0xa085, 0x0040, 0x6852, 0x0d7f, 0x007c, + 0x1078, 0x556a, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12b7, + 0x1079, 0x6063, 0x007c, 0x6073, 0x5ffc, 0x6075, 0x6073, 0x6075, + 0x6073, 0x6073, 0x6073, 0x5ffb, 0x5ffb, 0x6073, 0x6073, 0x6073, + 0x6073, 0x6073, 0x6073, 0x1078, 0x12b7, 0x0d7e, 0x6018, 0x2068, + 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, 0x10c8, 0x12b7, + 0x1079, 0x6083, 0x007c, 0x608f, 0x60b1, 0x608f, 0x60b1, 0x608f, + 0x60b1, 0x6091, 0x609a, 0x608f, 0x60b1, 0x608f, 0x60aa, 0x1078, + 0x12b7, 0x6004, 0xa08e, 0x0004, 0x0040, 0x60ac, 0xa08e, 0x0002, + 0x0040, 0x60ac, 0xa08e, 0x0000, 0x0040, 0x60c0, 0xa08e, 0x001f, + 0x0040, 0x60c0, 0xa08e, 0x0021, 0x0040, 0x60c4, 0xa08e, 0x0022, + 0x0040, 0x60c0, 0x1078, 0x2051, 0x1078, 0x5778, 0x1078, 0x556a, + 0x007c, 0x1078, 0x5778, 0x1078, 0x2051, 0x0e7e, 0x127e, 0x2091, + 0x8000, 0x1078, 0x206f, 0x127f, 0x0e7f, 0x1078, 0x556a, 0x007c, + 0x1078, 0x5778, 0x0078, 0x60ac, 0x1078, 0x5786, 0x0078, 0x60ac, + 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12b7, 0x1079, 0x60d0, 0x007c, + 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e0, + 0x60e0, 0x5ffb, 0x60e0, 0x5ffc, 0x60e2, 0x5ffc, 0x60eb, 0x60e0, + 0x1078, 0x12b7, 0x6007, 0x002b, 0x6003, 0x000d, 0x1078, 0x4327, + 0x1078, 0x476a, 0x007c, 0x1078, 0x6276, 0x1078, 0x6120, 0x0040, + 0x6109, 0x1078, 0x2051, 0x0d7e, 0x6010, 0x2068, 0x6837, 0x0103, + 0x684b, 0x0006, 0x1078, 0x36a1, 0x0d7f, 0x601f, 0x0001, 0x6007, + 0x0001, 0x6003, 0x0001, 0x1078, 0x4376, 0x1078, 0x476a, 0x0078, + 0x610b, 0x1078, 0x556a, 0x007c, 0xa284, 0x0007, 0x00c0, 0x611d, + 0xa282, 0x7400, 0x0048, 0x611d, 0x2001, 0x6d15, 0x2004, 0xa202, + 0x00c8, 0x611d, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x611c, + 0x027e, 0x0e7e, 0x2071, 0x6d00, 0x6210, 0x7058, 0xa202, 0x0048, + 0x6132, 0x705c, 0xa202, 0x00c8, 0x6132, 0xa085, 0x0001, 0x0e7f, + 0x027f, 0x007c, 0xa006, 0x0078, 0x612f, 0x0e7e, 0x0c7e, 0x037e, + 0x007e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7400, 0x2071, 0x6d00, + 0x7344, 0x7060, 0xa302, 0x00c8, 0x6155, 0x601c, 0xa206, 0x00c0, + 0x614d, 0x0c7e, 0x1078, 0x556a, 0x0c7f, 0xace0, 0x0008, 0x7054, + 0xac02, 0x00c8, 0x6155, 0x0078, 0x6140, 0x127f, 0x007f, 0x037f, + 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0x127e, 0x2091, + 0x8000, 0xa188, 0x6e00, 0x210c, 0x81ff, 0x0040, 0x6182, 0x2061, + 0x7400, 0x2071, 0x6d00, 0x7344, 0x7060, 0xa302, 0x00c8, 0x6182, + 0x6018, 0xa106, 0x00c0, 0x617c, 0x1078, 0x2051, 0x017e, 0x0c7e, + 0x1078, 0x556a, 0x0c7f, 0x017f, 0xace0, 0x0008, 0x7054, 0xac02, + 0x0048, 0x6170, 0x127f, 0x017f, 0x0c7f, 0x0e7f, 0x007c, 0x0c7e, + 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5504, 0x057f, + 0x0040, 0x61a0, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, 0x004b, + 0x1078, 0x5591, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, + 0xa006, 0x0078, 0x619c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, + 0x62a0, 0x0c7e, 0x1078, 0x5504, 0x057f, 0x0040, 0x61ca, 0x6013, + 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, 0x35cf, + 0x0c7f, 0x1078, 0x445c, 0x1078, 0x43a9, 0x2c08, 0x1078, 0x6a57, + 0x2009, 0x004c, 0x1078, 0x5591, 0xa085, 0x0001, 0x127f, 0x057f, + 0x0c7f, 0x007c, 0xa006, 0x0078, 0x61c6, 0x0c7e, 0x057e, 0x127e, + 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5504, 0x057f, 0x0040, + 0x61f5, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, + 0x2560, 0x1078, 0x35cf, 0x0c7f, 0x1078, 0x445c, 0x1078, 0x43a9, + 0x2c08, 0x1078, 0x6a57, 0x2009, 0x004d, 0x1078, 0x5591, 0xa085, + 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x61f1, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, - 0x556f, 0x057f, 0x0040, 0x62f0, 0x6612, 0x651a, 0x601f, 0x0003, - 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x364c, 0x0c7f, 0x1078, - 0x457b, 0x1078, 0x44be, 0x2c08, 0x1078, 0x6bfe, 0x2009, 0x004e, - 0x1078, 0x55fc, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x62ec, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, - 0x1078, 0x556f, 0x017f, 0x0040, 0x630c, 0x660a, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x55fc, 0xa085, - 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6309, 0x0c7e, - 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, - 0x6327, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, - 0x1078, 0x55fc, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, - 0x0078, 0x6324, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, - 0x0040, 0x6334, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, - 0x0000, 0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, - 0x0d7e, 0x2031, 0x6f52, 0x2634, 0xd6e4, 0x0040, 0x634c, 0x6618, - 0x2660, 0x6e44, 0x1078, 0x3584, 0x0d7f, 0x0c7f, 0x067f, 0x007c, - 0x007e, 0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6361, 0xa08e, - 0x0003, 0x0040, 0x6361, 0xa08e, 0x0004, 0x0040, 0x6361, 0xa085, - 0x0001, 0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, - 0x0000, 0x0040, 0x6379, 0xa08e, 0x001f, 0x0040, 0x6379, 0xa08e, - 0x0028, 0x0040, 0x6379, 0xa08e, 0x0029, 0x0040, 0x6379, 0xa085, - 0x0001, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x556f, 0x017f, 0x0040, 0x6396, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x1078, 0x21a8, 0x2009, 0x0028, 0x1078, - 0x55fc, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, - 0x6393, 0xa186, 0x0015, 0x00c0, 0x63ae, 0x2011, 0x6f1c, 0x2204, - 0xa086, 0x0074, 0x00c0, 0x63ae, 0x1078, 0x59b5, 0x6003, 0x0001, - 0x6007, 0x0029, 0x1078, 0x448b, 0x0078, 0x63b2, 0x1078, 0x57d2, - 0x1078, 0x55d5, 0x007c, 0xa186, 0x0015, 0x00c0, 0x63d0, 0x2011, - 0x6f1c, 0x2204, 0xa086, 0x0014, 0x00c0, 0x63d0, 0x0d7e, 0x6018, - 0x2068, 0x1078, 0x3547, 0x0d7f, 0x1078, 0x59bf, 0x00c0, 0x63d0, - 0x2001, 0x0006, 0x1078, 0x3477, 0x1078, 0x567f, 0x0078, 0x63d4, - 0x1078, 0x57d2, 0x1078, 0x55d5, 0x007c, 0x6848, 0xa086, 0x0005, - 0x00c0, 0x63dc, 0x1078, 0x63dd, 0x007c, 0x6850, 0xc0ad, 0x6852, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x63eb, 0x067f, 0x007c, 0x63fb, 0x65cb, 0x66ac, 0x63fb, 0x63fb, - 0x63fb, 0x63fb, 0x63fb, 0x6435, 0x6712, 0x63fb, 0x63fb, 0x63fb, - 0x63fb, 0x63fb, 0x63fb, 0x1078, 0x1288, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x1288, 0x1079, 0x6407, 0x067f, 0x007c, 0x6417, - 0x6a13, 0x6417, 0x6417, 0x6417, 0x6417, 0x6417, 0x6417, 0x69ee, - 0x6a5d, 0x6417, 0x6417, 0x6417, 0x6417, 0x6417, 0x6417, 0x1078, - 0x1288, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x6423, 0x067f, 0x007c, 0x6433, 0x685f, 0x68d1, 0x68f3, 0x693f, - 0x6433, 0x6433, 0x6999, 0x671e, 0x69d6, 0x69da, 0x6433, 0x6433, - 0x6433, 0x6433, 0x6433, 0x1078, 0x1288, 0xa1b2, 0x0030, 0x10c8, - 0x1288, 0x2100, 0x0079, 0x643c, 0x646c, 0x6549, 0x646c, 0x646c, - 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, - 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, - 0x646c, 0x646c, 0x646c, 0x646e, 0x649d, 0x64a8, 0x64d0, 0x64d6, - 0x650a, 0x6542, 0x646c, 0x646c, 0x6551, 0x646c, 0x646c, 0x646c, - 0x6558, 0x646c, 0x646c, 0x646c, 0x646c, 0x646c, 0x6575, 0x646c, - 0x646c, 0x6580, 0x646c, 0x646c, 0x1078, 0x1288, 0x1078, 0x36cc, - 0x6618, 0x0c7e, 0x2660, 0x1078, 0x34dd, 0x0c7f, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x648f, 0x1078, - 0x6b3d, 0x00c0, 0x64ca, 0x1078, 0x6adb, 0x00c0, 0x648b, 0x6007, - 0x0008, 0x0078, 0x6544, 0x6007, 0x0009, 0x0078, 0x6544, 0x1078, - 0x6ccf, 0x0040, 0x6499, 0x1078, 0x6b3d, 0x0040, 0x6483, 0x0078, - 0x64ca, 0x6013, 0x1900, 0x0078, 0x648b, 0x6106, 0x1078, 0x6a9e, - 0x6007, 0x0006, 0x0078, 0x6544, 0x6007, 0x0007, 0x0078, 0x6544, - 0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, - 0x0006, 0x0040, 0x64ba, 0xa686, 0x0004, 0x0040, 0x64ba, 0x0d7f, - 0x0078, 0x64ca, 0x1078, 0x6b9b, 0x00c0, 0x64c5, 0x1078, 0x3547, - 0x6007, 0x000a, 0x0d7f, 0x0078, 0x6544, 0x6007, 0x000b, 0x0d7f, - 0x0078, 0x6544, 0x1078, 0x21a8, 0x6007, 0x0001, 0x0078, 0x6544, - 0x1078, 0x21a8, 0x6007, 0x000c, 0x0078, 0x6544, 0x1078, 0x36cc, + 0x5504, 0x057f, 0x0040, 0x6220, 0x6612, 0x651a, 0x601f, 0x0003, + 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x35cf, 0x0c7f, 0x1078, + 0x445c, 0x1078, 0x43a9, 0x2c08, 0x1078, 0x6a57, 0x2009, 0x004e, + 0x1078, 0x5591, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, + 0xa006, 0x0078, 0x621c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, + 0x1078, 0x5504, 0x017f, 0x0040, 0x623c, 0x660a, 0x611a, 0x601f, + 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x5591, 0xa085, + 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6239, 0x0c7e, + 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5504, 0x017f, 0x0040, + 0x6258, 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, + 0x0021, 0x1078, 0x5591, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, + 0xa006, 0x0078, 0x6255, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, + 0x1078, 0x5504, 0x017f, 0x0040, 0x6273, 0x611a, 0x601f, 0x0001, + 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078, 0x5591, 0xa085, 0x0001, + 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6270, 0x027e, 0x0d7e, + 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x6280, 0x8211, 0x6a3e, + 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, + 0x0014, 0x007c, 0x067e, 0x0c7e, 0x2031, 0x6d52, 0x2634, 0xd6e4, + 0x0040, 0x6297, 0x6618, 0x2660, 0x6e44, 0x1078, 0x3507, 0x0c7f, + 0x067f, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12b7, + 0x1079, 0x62a4, 0x067f, 0x007c, 0x62b4, 0x640b, 0x64d4, 0x62b4, + 0x62b4, 0x62b4, 0x62b4, 0x62b4, 0x62ee, 0x6542, 0x62b4, 0x62b4, + 0x62b4, 0x62b4, 0x62b4, 0x62b4, 0x1078, 0x12b7, 0x067e, 0x6000, + 0xa0b2, 0x0010, 0x10c8, 0x12b7, 0x1079, 0x62c0, 0x067f, 0x007c, + 0x62d0, 0x6837, 0x62d0, 0x62d0, 0x62d0, 0x62d0, 0x62d0, 0x62d0, + 0x6812, 0x687d, 0x62d0, 0x62d0, 0x62d0, 0x62d0, 0x62d0, 0x62d0, + 0x1078, 0x12b7, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12b7, + 0x1079, 0x62dc, 0x067f, 0x007c, 0x62ec, 0x668f, 0x66fb, 0x671c, + 0x6769, 0x62ec, 0x62ec, 0x67be, 0x654e, 0x67fa, 0x67fe, 0x62ec, + 0x62ec, 0x62ec, 0x62ec, 0x62ec, 0x1078, 0x12b7, 0xa1b2, 0x0024, + 0x10c8, 0x12b7, 0x2100, 0x0079, 0x62f5, 0x6319, 0x63f5, 0x6319, + 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, + 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, 0x6319, + 0x6319, 0x6319, 0x6319, 0x6319, 0x631b, 0x634a, 0x6354, 0x637c, + 0x6382, 0x63b6, 0x63ee, 0x6319, 0x6319, 0x63fd, 0x6319, 0x6319, + 0x6404, 0x1078, 0x12b7, 0x1078, 0x364d, 0x6618, 0x0c7e, 0x2660, + 0x1078, 0x3459, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, + 0xa082, 0x0006, 0x0048, 0x633c, 0x1078, 0x6993, 0x00c0, 0x6376, + 0x1078, 0x6931, 0x00c0, 0x6338, 0x6007, 0x0008, 0x0078, 0x63f0, + 0x6007, 0x0009, 0x0078, 0x63f0, 0x1078, 0x6b02, 0x0040, 0x6346, + 0x1078, 0x6993, 0x0040, 0x6330, 0x0078, 0x6376, 0x6013, 0x1900, + 0x0078, 0x6338, 0x1078, 0x68b7, 0x6007, 0x0006, 0x0078, 0x63f0, + 0x6007, 0x0007, 0x0078, 0x63f0, 0x0d7e, 0x6618, 0x2668, 0x6e04, + 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6366, 0xa686, + 0x0004, 0x0040, 0x6366, 0x0d7f, 0x0078, 0x6376, 0x1078, 0x69f1, + 0x00c0, 0x6371, 0x1078, 0x34ca, 0x6007, 0x000a, 0x0d7f, 0x0078, + 0x63f0, 0x6007, 0x000b, 0x0d7f, 0x0078, 0x63f0, 0x1078, 0x2051, + 0x6007, 0x0001, 0x0078, 0x63f0, 0x1078, 0x2051, 0x6007, 0x000c, + 0x0078, 0x63f0, 0x1078, 0x364d, 0x6618, 0xa6b0, 0x0001, 0x2634, + 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x63a3, 0xa6b4, 0xff00, + 0x8637, 0xa686, 0x0006, 0x00c0, 0x6376, 0x1078, 0x6a00, 0x00c0, + 0x639d, 0x6007, 0x000e, 0x0078, 0x63f0, 0x1078, 0x2051, 0x6007, + 0x000f, 0x0078, 0x63f0, 0x1078, 0x6b02, 0x0040, 0x63b0, 0xa6b4, + 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6395, 0x0078, 0x6376, + 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x63f0, 0x1078, 0x364d, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, - 0x0048, 0x64f7, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, - 0x64ca, 0x1078, 0x6baa, 0x00c0, 0x64f1, 0x6007, 0x000e, 0x0078, - 0x6544, 0x1078, 0x21a8, 0x6007, 0x000f, 0x0078, 0x6544, 0x1078, - 0x6ccf, 0x0040, 0x6504, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x64e9, 0x0078, 0x64ca, 0x6013, 0x1900, 0x6007, 0x0009, - 0x0078, 0x6544, 0x1078, 0x36cc, 0x6618, 0xa6b0, 0x0001, 0x2634, - 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x652f, 0xa6b4, 0xff00, - 0x8637, 0xa686, 0x0006, 0x00c0, 0x64ca, 0x1078, 0x6bd6, 0x00c0, - 0x6529, 0x1078, 0x6adb, 0x00c0, 0x6529, 0x6007, 0x0010, 0x0078, - 0x6544, 0x1078, 0x21a8, 0x6007, 0x0011, 0x0078, 0x6544, 0x1078, - 0x6ccf, 0x0040, 0x653c, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x651d, 0x0078, 0x64ca, 0x6013, 0x1900, 0x6007, 0x0009, - 0x0078, 0x6544, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x448b, - 0x007c, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x448b, 0x0078, - 0x6548, 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x448b, 0x007c, - 0x017e, 0x027e, 0x2011, 0x7388, 0x2214, 0x2c08, 0x1078, 0x6d97, - 0x00c0, 0x6569, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, - 0x656e, 0x1078, 0x55d5, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, - 0x1078, 0x448b, 0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x6587, - 0x6007, 0x002b, 0x0078, 0x6544, 0x6007, 0x002c, 0x0078, 0x6544, - 0x6106, 0x1078, 0x658c, 0x6007, 0x002e, 0x0078, 0x6544, 0x0d7e, - 0x1078, 0x65b2, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x65c1, 0x00c0, - 0x65ab, 0x680c, 0xa08c, 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, - 0x6212, 0xd1e4, 0x0040, 0x65a0, 0x2009, 0x0001, 0x0078, 0x65a7, - 0xd1ec, 0x0040, 0x65ab, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, - 0x21d7, 0x0078, 0x65af, 0xa085, 0x0001, 0x0078, 0x65b0, 0xa006, - 0x0d7f, 0x007c, 0x2069, 0x738d, 0x6800, 0xa082, 0x0010, 0x00c8, - 0x65bf, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x65c0, 0xa006, - 0x007c, 0x6013, 0x0000, 0x2069, 0x738c, 0x6808, 0xa084, 0xff00, - 0xa086, 0x0800, 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x1288, - 0xa1b6, 0x0013, 0x00c0, 0x65d7, 0x2008, 0x0079, 0x65ea, 0xa1b6, - 0x0027, 0x0040, 0x65df, 0xa1b6, 0x0014, 0x10c0, 0x1288, 0x2001, - 0x0007, 0x1078, 0x3485, 0x1078, 0x479a, 0x1078, 0x6337, 0x1078, - 0x4893, 0x007c, 0x661a, 0x661c, 0x661a, 0x661a, 0x661a, 0x661c, - 0x6624, 0x6687, 0x664a, 0x6687, 0x665e, 0x6687, 0x6624, 0x6687, - 0x667f, 0x6687, 0x667f, 0x6687, 0x6687, 0x661a, 0x661a, 0x661a, - 0x661a, 0x661a, 0x661a, 0x661a, 0x661a, 0x661a, 0x661a, 0x661a, - 0x661a, 0x661a, 0x6687, 0x661a, 0x661a, 0x661a, 0x661a, 0x6687, - 0x6687, 0x661a, 0x661a, 0x661a, 0x661a, 0x6687, 0x6687, 0x661a, - 0x6687, 0x6687, 0x1078, 0x1288, 0x1078, 0x479a, 0x6003, 0x0002, - 0x1078, 0x4893, 0x0078, 0x668d, 0x0f7e, 0x2079, 0x6f51, 0x7804, - 0x0f7f, 0xd0ac, 0x00c0, 0x6687, 0x2001, 0x0000, 0x1078, 0x3463, - 0x2001, 0x0002, 0x1078, 0x3477, 0x1078, 0x479a, 0x601f, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x448b, 0x1078, 0x4893, - 0x0c7e, 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x4194, 0x0c7f, - 0x0078, 0x668d, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6687, 0xa686, 0x0004, - 0x0040, 0x6687, 0x2001, 0x0004, 0x0078, 0x6685, 0x2001, 0x6f00, - 0x2004, 0xa086, 0x0003, 0x00c0, 0x6667, 0x1078, 0x2a74, 0x2001, - 0x0006, 0x1078, 0x668e, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6687, 0x2001, - 0x0006, 0x0078, 0x6685, 0x2001, 0x0004, 0x0078, 0x6685, 0x2001, - 0x0006, 0x1078, 0x668e, 0x0078, 0x6687, 0x1078, 0x3485, 0x1078, - 0x479a, 0x1078, 0x55d5, 0x1078, 0x4893, 0x007c, 0x017e, 0x0d7e, - 0x6118, 0x2168, 0x6900, 0xd184, 0x0040, 0x66a9, 0x6104, 0xa18e, - 0x000a, 0x00c0, 0x66a1, 0x699c, 0xd1a4, 0x00c0, 0x66a1, 0x2001, - 0x0007, 0x1078, 0x3477, 0x2001, 0x0000, 0x1078, 0x3463, 0x1078, - 0x21c6, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, - 0xa084, 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1288, - 0xa1b6, 0x0015, 0x00c0, 0x66c0, 0x1079, 0x66c7, 0x0078, 0x66c6, - 0xa1b6, 0x0016, 0x10c0, 0x1288, 0x1079, 0x66f7, 0x007c, 0x582f, - 0x582f, 0x582f, 0x582f, 0x582f, 0x582f, 0x582f, 0x66d3, 0x582f, - 0x582f, 0x582f, 0x582f, 0x0f7e, 0x2079, 0x6f51, 0x7804, 0x0f7f, - 0xd0ac, 0x00c0, 0x66ef, 0x2001, 0x0000, 0x1078, 0x3463, 0x2001, - 0x0002, 0x1078, 0x3477, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x448b, 0x1078, 0x4893, 0x0078, 0x66f6, 0x2011, - 0x7383, 0x220c, 0x1078, 0x32cf, 0x1078, 0x55d5, 0x007c, 0x582f, - 0x582f, 0x582f, 0x582f, 0x582f, 0x582f, 0x582f, 0x6703, 0x582f, - 0x582f, 0x582f, 0x582f, 0x1078, 0x59b2, 0x00c0, 0x670f, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x448b, 0x0078, 0x6711, 0x1078, - 0x55d5, 0x007c, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1288, 0x1078, - 0x479a, 0x1078, 0x6337, 0x1078, 0x4893, 0x007c, 0xa182, 0x0040, - 0x0079, 0x6722, 0x6732, 0x6732, 0x6732, 0x6732, 0x6734, 0x6732, - 0x6732, 0x6732, 0x6732, 0x6732, 0x6732, 0x6732, 0x6732, 0x6732, - 0x6732, 0x6732, 0x1078, 0x1288, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, - 0x047e, 0x027e, 0x6106, 0x2071, 0x7380, 0x7444, 0xa4a4, 0xe600, - 0x0040, 0x67a5, 0xa486, 0x2000, 0x0040, 0x6764, 0xa486, 0x0400, - 0x0040, 0x6764, 0x7130, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, - 0x6837, 0x0c7e, 0x1078, 0x4225, 0x2c68, 0x0c7f, 0x6a00, 0xa284, - 0x0001, 0x0040, 0x6818, 0x1078, 0x42e3, 0x0040, 0x6843, 0xa295, - 0x0200, 0x6a02, 0x0078, 0x676a, 0x2009, 0x0001, 0x2011, 0x0200, - 0x1078, 0x42cd, 0x1078, 0x12e2, 0x1040, 0x1288, 0x6003, 0x0007, - 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, - 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0xa18c, - 0x00ff, 0xa10d, 0x6946, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, - 0x3720, 0xa486, 0x2000, 0x00c0, 0x6793, 0x2019, 0x0017, 0x1078, - 0x6d5c, 0x0078, 0x6805, 0xa486, 0x0400, 0x00c0, 0x679d, 0x2019, - 0x0002, 0x1078, 0x6d5c, 0x0078, 0x6805, 0xa486, 0x0200, 0x00c0, - 0x67a3, 0x1078, 0x6d4d, 0x0078, 0x6805, 0x7130, 0xa184, 0xff00, - 0x00c0, 0x6857, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, 0x6857, - 0x0c7e, 0x1078, 0x4225, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, - 0x0040, 0x685b, 0xa284, 0x0300, 0x00c0, 0x6853, 0x6804, 0xa005, - 0x0040, 0x6843, 0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x12c7, - 0x0040, 0x680c, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, - 0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, - 0xa10d, 0x6946, 0x6853, 0x003d, 0x7044, 0xa084, 0x0003, 0xa086, - 0x0002, 0x00c0, 0x67e7, 0x684f, 0x0040, 0x0078, 0x67f1, 0xa086, - 0x0001, 0x00c0, 0x67ef, 0x684f, 0x0080, 0x0078, 0x67f1, 0x684f, - 0x0000, 0x20a9, 0x000a, 0x2001, 0x7390, 0xad90, 0x0015, 0x200c, - 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x67f7, 0x200c, 0x6982, - 0x8000, 0x200c, 0x697e, 0x1078, 0x3720, 0x027f, 0x047f, 0x157f, - 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003, 0x0001, - 0x6007, 0x0041, 0x1078, 0x443e, 0x1078, 0x4893, 0x0078, 0x6805, - 0x2069, 0x7392, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x00c0, - 0x6837, 0x2069, 0x7380, 0x686c, 0xa084, 0x00ff, 0x017e, 0x6110, - 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, 0x0001, 0x6007, - 0x0043, 0x1078, 0x443e, 0x1078, 0x4893, 0x0078, 0x6805, 0x6013, - 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x443e, 0x1078, - 0x4893, 0x0078, 0x6805, 0x6013, 0x0300, 0x0078, 0x6849, 0x6013, - 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x443e, 0x1078, - 0x4893, 0x0078, 0x6805, 0x6013, 0x0500, 0x0078, 0x6849, 0x6013, - 0x0600, 0x0078, 0x6818, 0x6013, 0x0200, 0x0078, 0x6818, 0xa186, - 0x0013, 0x00c0, 0x6871, 0x6004, 0xa08a, 0x0040, 0x1048, 0x1288, - 0xa08a, 0x0050, 0x10c8, 0x1288, 0xa082, 0x0040, 0x2008, 0x0079, - 0x68a2, 0xa186, 0x0047, 0x00c0, 0x6877, 0x0078, 0x68d1, 0xa186, - 0x0027, 0x0040, 0x687f, 0xa186, 0x0014, 0x10c0, 0x1288, 0x6004, - 0xa082, 0x0040, 0x2008, 0x0079, 0x6885, 0x6895, 0x6897, 0x6897, - 0x6895, 0x6895, 0x6895, 0x6895, 0x6895, 0x6895, 0x6895, 0x6895, - 0x6895, 0x6895, 0x6895, 0x6895, 0x6895, 0x1078, 0x1288, 0x2001, - 0x0007, 0x1078, 0x3485, 0x1078, 0x479a, 0x1078, 0x6337, 0x1078, - 0x4893, 0x007c, 0x68b2, 0x68c2, 0x68bb, 0x68cb, 0x68b2, 0x68b2, - 0x68b2, 0x68b2, 0x68b2, 0x68b2, 0x68b2, 0x68b2, 0x68b2, 0x68b2, - 0x68b2, 0x68b2, 0x1078, 0x1288, 0x6010, 0xa088, 0x0013, 0x2104, - 0xa085, 0x0400, 0x200a, 0x1078, 0x479a, 0x6003, 0x0002, 0x1078, - 0x4893, 0x007c, 0x1078, 0x479a, 0x1078, 0x42a6, 0x1078, 0x55d5, - 0x1078, 0x4893, 0x007c, 0x1078, 0x479a, 0x2009, 0x0041, 0x0078, - 0x6999, 0xa182, 0x0040, 0x0079, 0x68d5, 0x68e5, 0x68e7, 0x68e5, - 0x68e5, 0x68e5, 0x68e5, 0x68e5, 0x68e8, 0x68e5, 0x68e5, 0x68e5, - 0x68e5, 0x68e5, 0x68e5, 0x68e5, 0x68e5, 0x1078, 0x1288, 0x007c, - 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, - 0x1078, 0x1525, 0x007c, 0xa182, 0x0040, 0x0079, 0x68f7, 0x6907, - 0x6907, 0x6907, 0x6907, 0x6907, 0x6907, 0x6907, 0x6907, 0x6907, - 0x6909, 0x692c, 0x6907, 0x6907, 0x6907, 0x6907, 0x692c, 0x1078, - 0x1288, 0x1078, 0x4842, 0x1078, 0x4943, 0x6010, 0x0d7e, 0x2068, - 0x684c, 0xd0fc, 0x0040, 0x691f, 0xa08c, 0x0003, 0xa18e, 0x0002, - 0x0040, 0x6925, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x6999, 0x6003, - 0x0007, 0x1078, 0x42a6, 0x0d7f, 0x007c, 0x1078, 0x42a6, 0x1078, - 0x55d5, 0x0d7f, 0x0078, 0x6924, 0x037e, 0x1078, 0x4842, 0x1078, - 0x4943, 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078, 0x6d80, - 0x1078, 0x6337, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c, 0xa186, - 0x0013, 0x00c0, 0x694d, 0x6004, 0xa086, 0x0042, 0x10c0, 0x1288, - 0x1078, 0x479a, 0x1078, 0x4893, 0x007c, 0xa186, 0x0027, 0x0040, - 0x6955, 0xa186, 0x0014, 0x00c0, 0x6965, 0x6004, 0xa086, 0x0042, - 0x10c0, 0x1288, 0x2001, 0x0007, 0x1078, 0x3485, 0x1078, 0x479a, - 0x1078, 0x6337, 0x1078, 0x4893, 0x007c, 0xa182, 0x0040, 0x0079, - 0x6969, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, - 0x697b, 0x6987, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, - 0x6979, 0x1078, 0x1288, 0x037e, 0x047e, 0x20e1, 0x0005, 0x3d18, - 0x3e20, 0x2c10, 0x1078, 0x1525, 0x047f, 0x037f, 0x007c, 0x6010, - 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x6993, 0x2009, 0x0041, - 0x0d7f, 0x0078, 0x6999, 0x6003, 0x0007, 0x1078, 0x42a6, 0x0d7f, - 0x007c, 0xa182, 0x0040, 0x0079, 0x699d, 0x69ad, 0x69af, 0x69bb, - 0x69c7, 0x69ad, 0x69ad, 0x69ad, 0x69ad, 0x69ad, 0x69ad, 0x69ad, - 0x69ad, 0x69ad, 0x69ad, 0x69ad, 0x69ad, 0x1078, 0x1288, 0x6003, - 0x0001, 0x6106, 0x1078, 0x443e, 0x127e, 0x2091, 0x8000, 0x1078, - 0x4893, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x443e, - 0x127e, 0x2091, 0x8000, 0x1078, 0x4893, 0x127f, 0x007c, 0x6003, - 0x0003, 0x6106, 0x2c10, 0x1078, 0x1936, 0x127e, 0x2091, 0x8000, - 0x1078, 0x44aa, 0x1078, 0x4943, 0x127f, 0x007c, 0x1078, 0x479a, - 0x0078, 0x69dc, 0x1078, 0x4842, 0x6110, 0x81ff, 0x0040, 0x69e9, - 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x6d80, 0x037f, - 0x0d7f, 0x1078, 0x6337, 0x1078, 0x4893, 0x007c, 0xa182, 0x0085, - 0x0079, 0x69f2, 0x69f9, 0x69f9, 0x69f9, 0x69fb, 0x69f9, 0x69f9, - 0x69f9, 0x1078, 0x1288, 0x027e, 0x0e7e, 0x2071, 0x7380, 0x7220, - 0x1078, 0x6c9a, 0x0040, 0x6a08, 0x6007, 0x0086, 0x0078, 0x6a0a, - 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, 0x443e, 0x1078, 0x4893, - 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x6a24, 0x6004, - 0xa08a, 0x0085, 0x1048, 0x1288, 0xa08a, 0x008c, 0x10c8, 0x1288, - 0xa082, 0x0085, 0x0079, 0x6a37, 0xa186, 0x0027, 0x0040, 0x6a2c, - 0xa186, 0x0014, 0x10c0, 0x1288, 0x2001, 0x0007, 0x1078, 0x3485, - 0x1078, 0x479a, 0x1078, 0x6337, 0x1078, 0x4893, 0x007c, 0x6a3e, - 0x6a40, 0x6a40, 0x6a3e, 0x6a3e, 0x6a3e, 0x6a3e, 0x1078, 0x1288, - 0x1078, 0x479a, 0x1078, 0x55d5, 0x1078, 0x4893, 0x007c, 0xa182, - 0x0085, 0x1048, 0x1288, 0xa182, 0x008c, 0x10c8, 0x1288, 0xa182, - 0x0085, 0x0079, 0x6a53, 0x6a5a, 0x6a5a, 0x6a5a, 0x6a5c, 0x6a5a, - 0x6a5a, 0x6a5a, 0x1078, 0x1288, 0x007c, 0x1078, 0x479a, 0x1078, - 0x6337, 0x1078, 0x4893, 0x007c, 0x037e, 0x2019, 0x000b, 0x1078, - 0x6a6d, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, - 0x2091, 0x8000, 0x2c40, 0x1078, 0x52e8, 0x00c0, 0x6a9a, 0x1078, - 0x5389, 0x00c0, 0x6a9a, 0x6000, 0xa086, 0x0000, 0x0040, 0x6a9a, - 0x601c, 0xa086, 0x0007, 0x0040, 0x6a9a, 0x0d7e, 0x6000, 0xa086, - 0x0004, 0x00c0, 0x6a8d, 0x1078, 0x1629, 0x6010, 0x2068, 0x1078, - 0x6216, 0x0040, 0x6a95, 0x1078, 0x6d80, 0x0d7f, 0x6013, 0x0000, - 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, - 0x037e, 0x157e, 0x2079, 0x7380, 0x7838, 0xa084, 0x00ff, 0xa005, - 0x00c0, 0x6ad6, 0x783c, 0x1078, 0x1fe4, 0x017e, 0x0c7e, 0x1078, - 0x34cb, 0x00c0, 0x6ad4, 0x2011, 0x7390, 0xac98, 0x000a, 0x20a9, - 0x0004, 0x1078, 0x5a4b, 0x00c0, 0x6ad4, 0x017f, 0x027f, 0x027e, - 0x017e, 0x2019, 0x0029, 0x1078, 0x545d, 0x1078, 0x457b, 0x1078, - 0x44be, 0x017f, 0x1078, 0x6bfe, 0x1078, 0x364c, 0x017f, 0x1078, - 0x32cf, 0xa006, 0x0078, 0x6ad6, 0x0c7f, 0x017f, 0x157f, 0x037f, - 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x6f1c, - 0x2104, 0xa086, 0x0074, 0x00c0, 0x6b32, 0x2069, 0x738e, 0x690c, - 0xa182, 0x0100, 0x0048, 0x6b22, 0x6908, 0xa184, 0x8000, 0x0040, - 0x6b2e, 0xa184, 0x0800, 0x0040, 0x6b2e, 0x6910, 0xa18a, 0x0001, - 0x0048, 0x6b26, 0x6914, 0x2069, 0x73ae, 0x6904, 0x81ff, 0x00c0, - 0x6b1a, 0x690c, 0xa182, 0x0100, 0x0048, 0x6b22, 0x6908, 0x81ff, - 0x00c0, 0x6b1e, 0x6910, 0xa18a, 0x0001, 0x0048, 0x6b26, 0x6918, - 0xa18a, 0x0001, 0x0048, 0x6b2e, 0x0078, 0x6b38, 0x6013, 0x0100, - 0x0078, 0x6b34, 0x6013, 0x0300, 0x0078, 0x6b34, 0x6013, 0x0500, - 0x0078, 0x6b34, 0x6013, 0x0700, 0x0078, 0x6b34, 0x6013, 0x0900, - 0x0078, 0x6b34, 0x6013, 0x0b00, 0x0078, 0x6b34, 0x6013, 0x0f00, - 0x0078, 0x6b34, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, 0x6b39, - 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, - 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, - 0x0006, 0x0040, 0x6b61, 0xa286, 0x0004, 0x0040, 0x6b61, 0xa394, - 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x6b61, 0xa286, 0x0004, - 0x0040, 0x6b61, 0x0c7e, 0x2d60, 0x1078, 0x34dd, 0x0c7f, 0x0078, - 0x6b94, 0x2011, 0x7396, 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x5a4b, 0x00c0, 0x6b95, 0x2011, 0x739a, 0xad98, 0x0006, 0x20a9, - 0x0004, 0x1078, 0x5a4b, 0x00c0, 0x6b95, 0x047e, 0x017e, 0x6aa0, - 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x6f52, 0x210c, 0xd1a4, - 0x0040, 0x6b89, 0x2009, 0x0029, 0x1078, 0x6dc4, 0x6800, 0xc0e5, - 0x6802, 0x2019, 0x0029, 0x1078, 0x457b, 0x1078, 0x44be, 0x2c08, - 0x1078, 0x6bfe, 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, - 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x738e, 0x6800, 0xa086, - 0x0800, 0x0040, 0x6ba7, 0x6013, 0x0000, 0x0078, 0x6ba8, 0xa006, - 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, - 0x2079, 0x738c, 0x7830, 0xa00d, 0x00c0, 0x6bcf, 0x7834, 0x1078, - 0x1fe4, 0x1078, 0x34cb, 0x00c0, 0x6bcf, 0x2011, 0x7390, 0xac98, - 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a4b, 0x00c0, 0x6bcf, 0x2011, - 0x7394, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x5a4b, 0x157f, - 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, - 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x7383, 0x2204, 0x1078, - 0x1fe4, 0x1078, 0x34cb, 0x00c0, 0x6bf7, 0x2011, 0x7396, 0xac98, - 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a4b, 0x00c0, 0x6bf7, 0x2011, - 0x739a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x5a4b, 0x157f, - 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, - 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, - 0x2029, 0x70bf, 0x252c, 0x2021, 0x70c5, 0x2424, 0x2061, 0x7500, - 0x2071, 0x6f00, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x6c63, - 0x2100, 0xac06, 0x0040, 0x6c59, 0x1078, 0x6ddc, 0x0040, 0x6c59, - 0x671c, 0xa786, 0x0001, 0x0040, 0x6c78, 0xa786, 0x0007, 0x0040, - 0x6c59, 0x2500, 0xac06, 0x0040, 0x6c59, 0x2400, 0xac06, 0x0040, - 0x6c59, 0x1078, 0x6df0, 0x00c0, 0x6c59, 0x0d7e, 0x6000, 0xa086, - 0x0004, 0x00c0, 0x6c3f, 0x017e, 0x1078, 0x1629, 0x017f, 0x6010, - 0x2068, 0x1078, 0x6216, 0x0040, 0x6c56, 0xa786, 0x0003, 0x00c0, - 0x6c6c, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, - 0x63d5, 0x1078, 0x3720, 0x017f, 0x1078, 0x632a, 0x0d7f, 0x1078, - 0x6337, 0xace0, 0x0008, 0x2001, 0x6f15, 0x2004, 0xac02, 0x00c8, - 0x6c63, 0x0078, 0x6c10, 0x127f, 0x027f, 0x047f, 0x057f, 0x067f, - 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x6c49, - 0xa386, 0x0005, 0x0040, 0x6c59, 0x1078, 0x6d80, 0x0078, 0x6c56, - 0x1078, 0x6df0, 0x00c0, 0x6c59, 0xa180, 0x0001, 0x2004, 0xa086, - 0x0018, 0x00c0, 0x6c59, 0x6000, 0xa086, 0x0002, 0x00c0, 0x6c59, - 0x1078, 0x6350, 0x0040, 0x6c94, 0x1078, 0x6364, 0x00c0, 0x6c59, - 0x1078, 0x57d2, 0x0078, 0x6c96, 0x1078, 0x21c6, 0x1078, 0x6337, - 0x0078, 0x6c59, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, - 0x6d97, 0x017f, 0x0040, 0x6ca9, 0x601c, 0xa084, 0x0007, 0x1079, - 0x6cac, 0x0e7f, 0x0c7f, 0x007c, 0x6cb4, 0x6cb4, 0x6cb4, 0x6cb4, - 0x6cb4, 0x6cb4, 0x6cb6, 0x6cb4, 0xa006, 0x007c, 0x047e, 0x017e, - 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, - 0x2009, 0x0020, 0x1078, 0x6dc4, 0x017f, 0x047f, 0x037e, 0x2019, - 0x0002, 0x1078, 0x6a6d, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001, - 0x0001, 0x1078, 0x3463, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, - 0x0004, 0x2019, 0x6f05, 0x2011, 0x7396, 0x1078, 0x5a4b, 0x037f, - 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, - 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7500, - 0x2079, 0x0001, 0x8fff, 0x0040, 0x6d40, 0x2071, 0x6f00, 0x7644, - 0x7060, 0x8001, 0xa602, 0x00c8, 0x6d40, 0x88ff, 0x0040, 0x6d06, - 0x2800, 0xac06, 0x00c0, 0x6d36, 0x2079, 0x0000, 0x1078, 0x6ddc, - 0x0040, 0x6d36, 0x2400, 0xac06, 0x0040, 0x6d36, 0x671c, 0xa786, - 0x0006, 0x00c0, 0x6d36, 0xa786, 0x0007, 0x0040, 0x6d36, 0x88ff, - 0x00c0, 0x6d1e, 0x6018, 0xa206, 0x00c0, 0x6d36, 0x0d7e, 0x6000, - 0xa086, 0x0004, 0x00c0, 0x6d26, 0x1078, 0x1629, 0x6010, 0x2068, - 0x1078, 0x6216, 0x0040, 0x6d30, 0x047e, 0x1078, 0x6d80, 0x047f, - 0x0d7f, 0x1078, 0x6337, 0x88ff, 0x00c0, 0x6d49, 0xace0, 0x0008, - 0x2001, 0x6f15, 0x2004, 0xac02, 0x00c8, 0x6d40, 0x0078, 0x6cf2, - 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, - 0x007c, 0xa8c5, 0x0001, 0x0078, 0x6d41, 0x087e, 0x2041, 0x0000, - 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, 0x52e8, 0x1078, 0x5389, - 0x1078, 0x6ce5, 0x087f, 0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, - 0x157e, 0x2c20, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, 0x037e, - 0x1078, 0x34cb, 0x00c0, 0x6d75, 0x2c10, 0x2041, 0x0000, 0x1078, - 0x52e8, 0x1078, 0x5389, 0x1078, 0x6ce5, 0x037f, 0x017f, 0x8108, - 0x00f0, 0x6d66, 0x157f, 0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, - 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x6d94, 0x6800, 0xa07d, 0x0040, - 0x6d91, 0x6803, 0x0000, 0x6b52, 0x1078, 0x3720, 0x2f68, 0x0078, - 0x6d85, 0x6b52, 0x1078, 0x3720, 0x0f7f, 0x017f, 0x007c, 0x0e7e, - 0x047e, 0x037e, 0x2061, 0x7500, 0x2071, 0x6f00, 0x7444, 0x7060, - 0x8001, 0xa402, 0x00c8, 0x6dbf, 0x2100, 0xac06, 0x0040, 0x6db1, - 0x6000, 0xa086, 0x0000, 0x0040, 0x6db1, 0x6008, 0xa206, 0x0040, - 0x6dbb, 0xace0, 0x0008, 0x2001, 0x6f15, 0x2004, 0xac02, 0x00c8, - 0x6dbf, 0x0078, 0x6d9c, 0xa085, 0x0001, 0x0078, 0x6dc0, 0xa006, - 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078, 0x12e2, - 0x007f, 0x1040, 0x1288, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, - 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, - 0x1078, 0x3720, 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, - 0x6def, 0xa786, 0x0001, 0x0040, 0x6def, 0xa786, 0x000a, 0x0040, - 0x6def, 0xa786, 0x0009, 0x0040, 0x6def, 0xa085, 0x0001, 0x007c, - 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, - 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6f40, 0xd5a4, 0x0040, - 0x6e04, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x6e0a, 0x7030, - 0x8000, 0x7032, 0xd5ac, 0x0040, 0x6e11, 0x2071, 0x6f4a, 0x1078, - 0x6e40, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, - 0x2091, 0x8000, 0x2071, 0x6f40, 0xd5a4, 0x0040, 0x6e22, 0x7034, - 0x8000, 0x7036, 0xd5b4, 0x0040, 0x6e28, 0x7030, 0x8000, 0x7032, - 0xd5ac, 0x0040, 0x6e2f, 0x2071, 0x6f4a, 0x1078, 0x6e40, 0x0e7f, - 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, - 0x2071, 0x6f42, 0x1078, 0x6e40, 0x0e7f, 0x007f, 0x127f, 0x007c, - 0x2e04, 0x8000, 0x2072, 0x00c8, 0x6e49, 0x8e70, 0x2e04, 0x8000, - 0x2072, 0x007c, 0x0e7e, 0x2071, 0x6f40, 0x1078, 0x6e40, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x6f44, 0x1078, 0x6e40, 0x0e7f, 0x007c, - 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, - 0x5879 + 0x0048, 0x63db, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, + 0x6376, 0x1078, 0x6a2b, 0x00c0, 0x63d5, 0x1078, 0x6931, 0x00c0, + 0x63d5, 0x6007, 0x0010, 0x0078, 0x63f0, 0x1078, 0x2051, 0x6007, + 0x0011, 0x0078, 0x63f0, 0x1078, 0x6b02, 0x0040, 0x63e8, 0xa6b4, + 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x63c9, 0x0078, 0x6376, + 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x63f0, 0x6007, 0x0012, + 0x6003, 0x0001, 0x1078, 0x4376, 0x007c, 0x6007, 0x0001, 0x6003, + 0x0001, 0x1078, 0x4376, 0x0078, 0x63f4, 0x6007, 0x0020, 0x6003, + 0x0001, 0x1078, 0x4376, 0x007c, 0x6007, 0x0023, 0x6003, 0x0001, + 0x1078, 0x4376, 0x007c, 0x6004, 0xa0b2, 0x0024, 0x10c8, 0x12b7, + 0xa1b6, 0x0013, 0x00c0, 0x6417, 0x2008, 0x0079, 0x6426, 0xa1b6, + 0x0014, 0x10c0, 0x12b7, 0x2001, 0x0007, 0x1078, 0x3401, 0x1078, + 0x4671, 0x1078, 0x6283, 0x1078, 0x476a, 0x007c, 0x644a, 0x644c, + 0x644a, 0x644a, 0x644a, 0x644c, 0x6454, 0x64af, 0x6472, 0x64af, + 0x6486, 0x64af, 0x6454, 0x64af, 0x64a7, 0x64af, 0x64a7, 0x64af, + 0x64af, 0x644a, 0x644a, 0x644a, 0x644a, 0x644a, 0x644a, 0x644a, + 0x644a, 0x644a, 0x644a, 0x644a, 0x644a, 0x644a, 0x64af, 0x644a, + 0x644a, 0x64af, 0x1078, 0x12b7, 0x1078, 0x4671, 0x6003, 0x0002, + 0x1078, 0x476a, 0x0078, 0x64b5, 0x0f7e, 0x2079, 0x6d51, 0x7804, + 0x0f7f, 0xd0ac, 0x00c0, 0x64af, 0x2001, 0x0000, 0x1078, 0x33df, + 0x2001, 0x0002, 0x1078, 0x33f3, 0x1078, 0x4671, 0x601f, 0x0001, + 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4376, 0x1078, 0x476a, + 0x0078, 0x64b5, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, + 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x64af, 0xa686, 0x0004, + 0x0040, 0x64af, 0x2001, 0x0004, 0x0078, 0x64ad, 0x2001, 0x6d00, + 0x2004, 0xa086, 0x0003, 0x00c0, 0x648f, 0x1078, 0x2ad1, 0x2001, + 0x0006, 0x1078, 0x64b6, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, + 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x64af, 0x2001, + 0x0006, 0x0078, 0x64ad, 0x2001, 0x0004, 0x0078, 0x64ad, 0x2001, + 0x0006, 0x1078, 0x64b6, 0x0078, 0x64af, 0x1078, 0x3401, 0x1078, + 0x4671, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, 0x017e, 0x0d7e, + 0x6118, 0x2168, 0x6900, 0xd184, 0x0040, 0x64d1, 0x6104, 0xa18e, + 0x000a, 0x00c0, 0x64c9, 0x699c, 0xd1a4, 0x00c0, 0x64c9, 0x2001, + 0x0007, 0x1078, 0x33f3, 0x2001, 0x0000, 0x1078, 0x33df, 0x1078, + 0x206f, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, + 0xa084, 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12b7, + 0xa1b6, 0x0015, 0x00c0, 0x64e8, 0x1079, 0x64ef, 0x0078, 0x64ee, + 0xa1b6, 0x0016, 0x10c0, 0x12b7, 0x1079, 0x6527, 0x007c, 0x57ef, + 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x64fb, 0x57ef, + 0x57ef, 0x57ef, 0x57ef, 0x0f7e, 0x2079, 0x6d51, 0x7804, 0x0f7f, + 0xd0ac, 0x00c0, 0x6517, 0x2001, 0x0000, 0x1078, 0x33df, 0x2001, + 0x0002, 0x1078, 0x33f3, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, + 0x0002, 0x1078, 0x4376, 0x1078, 0x476a, 0x0078, 0x6526, 0x2011, + 0x7283, 0x220c, 0x017e, 0x0c7e, 0x1078, 0x3447, 0x00c0, 0x6526, + 0x1078, 0x3256, 0x0c7f, 0x017f, 0x1078, 0x556a, 0x007c, 0x57ef, + 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x57ef, 0x6533, 0x57ef, + 0x57ef, 0x57ef, 0x57ef, 0x1078, 0x599c, 0x00c0, 0x653f, 0x6003, + 0x0001, 0x6007, 0x0001, 0x1078, 0x4376, 0x0078, 0x6541, 0x1078, + 0x556a, 0x007c, 0x6004, 0xa08a, 0x0024, 0x10c8, 0x12b7, 0x1078, + 0x4671, 0x1078, 0x6283, 0x1078, 0x476a, 0x007c, 0xa182, 0x0040, + 0x0079, 0x6552, 0x6561, 0x6561, 0x6561, 0x6561, 0x6563, 0x6561, + 0x6561, 0x6561, 0x6561, 0x6561, 0x6561, 0x6561, 0x6561, 0x6561, + 0x6561, 0x1078, 0x12b7, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, + 0x027e, 0x2071, 0x7280, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x65d4, + 0xa486, 0x2000, 0x0040, 0x6592, 0xa486, 0x0400, 0x0040, 0x6592, + 0x7130, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, 0x6663, 0x0c7e, + 0x1078, 0x416d, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, + 0x6644, 0x1078, 0x420a, 0x0040, 0x666f, 0xa295, 0x0200, 0x6a02, + 0x0078, 0x6598, 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x41f4, + 0x1078, 0x130f, 0x1040, 0x12b7, 0x6003, 0x0007, 0x6106, 0x2d00, + 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, + 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0xa18c, 0x00ff, + 0xa10d, 0x6946, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x36a1, + 0xa486, 0x2000, 0x00c0, 0x65c2, 0x2019, 0x0017, 0x1078, 0x6b8f, + 0x0078, 0x6631, 0xa486, 0x0400, 0x00c0, 0x65cc, 0x2019, 0x0002, + 0x1078, 0x6b8f, 0x0078, 0x6631, 0xa486, 0x0200, 0x00c0, 0x65d2, + 0x1078, 0x6b80, 0x0078, 0x6631, 0x7130, 0xa18c, 0x00ff, 0xa182, + 0x0010, 0x00c8, 0x6687, 0x0c7e, 0x1078, 0x416d, 0x2c68, 0x0c7f, + 0x6a00, 0xa284, 0x0001, 0x0040, 0x668b, 0xa284, 0x0300, 0x00c0, + 0x6683, 0x6804, 0xa005, 0x0040, 0x666f, 0x8001, 0x6806, 0x6003, + 0x0007, 0x6106, 0x1078, 0x12f4, 0x0040, 0x6638, 0x6013, 0x0000, + 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x2c00, 0x684a, + 0x6018, 0x2078, 0x78a0, 0x8007, 0xa10d, 0x6946, 0x6853, 0x003d, + 0x7044, 0xa084, 0x0003, 0xa086, 0x0002, 0x00c0, 0x6613, 0x684f, + 0x0040, 0x0078, 0x661d, 0xa086, 0x0001, 0x00c0, 0x661b, 0x684f, + 0x0080, 0x0078, 0x661d, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, + 0x7290, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, + 0x00f0, 0x6623, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, + 0x36a1, 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, + 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4327, + 0x1078, 0x476a, 0x0078, 0x6631, 0x2069, 0x7292, 0x2d04, 0xa084, + 0xff00, 0xa086, 0x1200, 0x00c0, 0x6663, 0x2069, 0x7280, 0x686c, + 0xa084, 0x00ff, 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, + 0x017f, 0x6003, 0x0001, 0x6007, 0x0043, 0x1078, 0x4327, 0x1078, + 0x476a, 0x0078, 0x6631, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, + 0x0041, 0x1078, 0x4327, 0x1078, 0x476a, 0x0078, 0x6631, 0xa284, + 0x0004, 0x00c0, 0x6677, 0x6013, 0x0300, 0x0078, 0x6679, 0x6013, + 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4327, 0x1078, + 0x476a, 0x0078, 0x6631, 0x6013, 0x0500, 0x0078, 0x6679, 0x6013, + 0x0600, 0x0078, 0x6644, 0x6013, 0x0200, 0x0078, 0x6644, 0xa186, + 0x0013, 0x00c0, 0x66a1, 0x6004, 0xa08a, 0x0040, 0x1048, 0x12b7, + 0xa08a, 0x004f, 0x10c8, 0x12b7, 0xa082, 0x0040, 0x2008, 0x0079, + 0x66cd, 0xa186, 0x0047, 0x00c0, 0x66a7, 0x0078, 0x66fb, 0xa186, + 0x0014, 0x10c0, 0x12b7, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079, + 0x66b1, 0x66c0, 0x66c2, 0x66c2, 0x66c0, 0x66c0, 0x66c0, 0x66c0, + 0x66c0, 0x66c0, 0x66c0, 0x66c0, 0x66c0, 0x66c0, 0x66c0, 0x66c0, + 0x1078, 0x12b7, 0x2001, 0x0007, 0x1078, 0x3401, 0x1078, 0x4671, + 0x1078, 0x6283, 0x1078, 0x476a, 0x007c, 0x66dc, 0x66ec, 0x66e5, + 0x66f5, 0x66dc, 0x66dc, 0x66dc, 0x66dc, 0x66dc, 0x66dc, 0x66dc, + 0x66dc, 0x66dc, 0x66dc, 0x66dc, 0x1078, 0x12b7, 0x6010, 0xa088, + 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x4671, 0x6003, + 0x0002, 0x1078, 0x476a, 0x007c, 0x1078, 0x4671, 0x1078, 0x41cd, + 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, 0x1078, 0x4671, 0x2009, + 0x0041, 0x0078, 0x67be, 0xa182, 0x0040, 0x0079, 0x66ff, 0x670e, + 0x6710, 0x670e, 0x670e, 0x670e, 0x670e, 0x670e, 0x6711, 0x670e, + 0x670e, 0x670e, 0x670e, 0x670e, 0x670e, 0x670e, 0x1078, 0x12b7, + 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, + 0x2c10, 0x1078, 0x1532, 0x007c, 0xa182, 0x0040, 0x0079, 0x6720, + 0x672f, 0x672f, 0x672f, 0x672f, 0x672f, 0x672f, 0x672f, 0x672f, + 0x672f, 0x6731, 0x6754, 0x672f, 0x672f, 0x672f, 0x672f, 0x1078, + 0x12b7, 0x1078, 0x4719, 0x1078, 0x4821, 0x6010, 0x0d7e, 0x2068, + 0x684c, 0xd0fc, 0x0040, 0x6747, 0xa08c, 0x0003, 0xa18e, 0x0002, + 0x0040, 0x674d, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x67be, 0x6003, + 0x0007, 0x1078, 0x41cd, 0x0d7f, 0x007c, 0x1078, 0x41cd, 0x1078, + 0x556a, 0x0d7f, 0x0078, 0x674c, 0x2001, 0x0007, 0x1078, 0x3401, + 0x1078, 0x4719, 0x1078, 0x4821, 0x6010, 0x0d7e, 0x2068, 0x037e, + 0x2019, 0x0004, 0x1078, 0x6bb3, 0x037f, 0x1078, 0x6283, 0x0d7f, + 0x007c, 0xa186, 0x0013, 0x00c0, 0x6777, 0x6004, 0xa086, 0x0042, + 0x10c0, 0x12b7, 0x1078, 0x4671, 0x1078, 0x476a, 0x007c, 0xa186, + 0x0014, 0x00c0, 0x678b, 0x6004, 0xa086, 0x0042, 0x10c0, 0x12b7, + 0x2001, 0x0007, 0x1078, 0x3401, 0x1078, 0x4671, 0x1078, 0x6283, + 0x1078, 0x476a, 0x007c, 0xa182, 0x0040, 0x0079, 0x678f, 0x679e, + 0x679e, 0x679e, 0x679e, 0x679e, 0x679e, 0x679e, 0x67a0, 0x67ac, + 0x679e, 0x679e, 0x679e, 0x679e, 0x679e, 0x679e, 0x1078, 0x12b7, + 0x037e, 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, + 0x1532, 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x684c, + 0xd0fc, 0x0040, 0x67b8, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x67be, + 0x6003, 0x0007, 0x1078, 0x41cd, 0x0d7f, 0x007c, 0xa182, 0x0040, + 0x0079, 0x67c2, 0x67d1, 0x67d3, 0x67df, 0x67eb, 0x67d1, 0x67d1, + 0x67d1, 0x67d1, 0x67d1, 0x67d1, 0x67d1, 0x67d1, 0x67d1, 0x67d1, + 0x67d1, 0x1078, 0x12b7, 0x6003, 0x0001, 0x6106, 0x1078, 0x4327, + 0x127e, 0x2091, 0x8000, 0x1078, 0x476a, 0x127f, 0x007c, 0x6003, + 0x0001, 0x6106, 0x1078, 0x4327, 0x127e, 0x2091, 0x8000, 0x1078, + 0x476a, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, + 0x17de, 0x127e, 0x2091, 0x8000, 0x1078, 0x4395, 0x1078, 0x4821, + 0x127f, 0x007c, 0x1078, 0x4671, 0x0078, 0x6800, 0x1078, 0x4719, + 0x6110, 0x81ff, 0x0040, 0x680d, 0x0d7e, 0x2168, 0x037e, 0x2019, + 0x0029, 0x1078, 0x6bb3, 0x037f, 0x0d7f, 0x1078, 0x6283, 0x1078, + 0x476a, 0x007c, 0xa182, 0x0025, 0x0079, 0x6816, 0x681d, 0x681d, + 0x681d, 0x681f, 0x681d, 0x681d, 0x681d, 0x1078, 0x12b7, 0x027e, + 0x0e7e, 0x2071, 0x7280, 0x7220, 0x1078, 0x6ad1, 0x0040, 0x682c, + 0x6007, 0x0026, 0x0078, 0x682e, 0x6007, 0x0027, 0x6003, 0x0001, + 0x1078, 0x4327, 0x1078, 0x476a, 0x0e7f, 0x027f, 0x007c, 0xa186, + 0x0013, 0x00c0, 0x6848, 0x6004, 0xa08a, 0x0025, 0x1048, 0x12b7, + 0xa08a, 0x002c, 0x10c8, 0x12b7, 0xa082, 0x0025, 0x0079, 0x6857, + 0xa186, 0x0014, 0x10c0, 0x12b7, 0x2001, 0x0007, 0x1078, 0x3401, + 0x1078, 0x4671, 0x1078, 0x6283, 0x1078, 0x476a, 0x007c, 0x685e, + 0x6860, 0x6860, 0x685e, 0x685e, 0x685e, 0x685e, 0x1078, 0x12b7, + 0x1078, 0x4671, 0x1078, 0x556a, 0x1078, 0x476a, 0x007c, 0xa182, + 0x0025, 0x1048, 0x12b7, 0xa182, 0x002c, 0x10c8, 0x12b7, 0xa182, + 0x0025, 0x0079, 0x6873, 0x687a, 0x687a, 0x687a, 0x687c, 0x687a, + 0x687a, 0x687a, 0x1078, 0x12b7, 0x007c, 0x1078, 0x4671, 0x1078, + 0x6283, 0x1078, 0x476a, 0x007c, 0x127e, 0x037e, 0x087e, 0x2091, + 0x8000, 0x2c40, 0x2019, 0x0002, 0x1078, 0x5387, 0x00c0, 0x68b3, + 0x1078, 0x5428, 0x00c0, 0x68b3, 0x6000, 0xa086, 0x0000, 0x0040, + 0x68b3, 0x601c, 0xa086, 0x0007, 0x0040, 0x68b3, 0x0d7e, 0x6010, + 0x2068, 0x1078, 0x6120, 0x0040, 0x68a7, 0x1078, 0x6bb3, 0x0d7f, + 0x6000, 0xa086, 0x0004, 0x00c0, 0x68af, 0x1078, 0x15f2, 0x6013, + 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, + 0x0c7e, 0x037e, 0x157e, 0x2079, 0x7280, 0x7938, 0x783c, 0x1078, + 0x1e1b, 0x00c0, 0x68e8, 0x017e, 0x0c7e, 0x1078, 0x3447, 0x00c0, + 0x68e8, 0x2011, 0x7290, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, + 0x5a35, 0x00c0, 0x68e8, 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, + 0x0029, 0x1078, 0x445c, 0x1078, 0x43a9, 0x017f, 0x1078, 0x6a57, + 0x1078, 0x35cf, 0x017f, 0x1078, 0x3256, 0xa006, 0x0078, 0x68ea, + 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0e7e, + 0x0d7e, 0x0c7e, 0x047e, 0x037e, 0x027e, 0x2061, 0x7400, 0x2071, + 0x6d00, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x6929, 0x2100, + 0xac06, 0x0040, 0x691b, 0x6000, 0xa086, 0x0000, 0x0040, 0x691b, + 0x6018, 0x2068, 0x68a0, 0xa206, 0x00c0, 0x691b, 0x631c, 0xa386, + 0x0004, 0x0040, 0x6925, 0xa386, 0x0005, 0x0040, 0x6925, 0xa386, + 0x0006, 0x0040, 0x6925, 0xace0, 0x0008, 0x2001, 0x6d15, 0x2004, + 0xac02, 0x00c8, 0x6929, 0x0078, 0x68f7, 0xa085, 0x0001, 0x0078, + 0x692a, 0xa006, 0x027f, 0x037f, 0x047f, 0x0c7f, 0x0d7f, 0x0e7f, + 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x6d1e, 0x2104, 0xa086, + 0x0074, 0x00c0, 0x6988, 0x2069, 0x728e, 0x690c, 0xa182, 0x0100, + 0x0048, 0x6978, 0x6908, 0xa184, 0x8000, 0x0040, 0x6984, 0xa184, + 0x0800, 0x0040, 0x6984, 0x6910, 0xa18a, 0x0001, 0x0048, 0x697c, + 0x6914, 0x2069, 0x72ae, 0x6904, 0x81ff, 0x00c0, 0x6970, 0x690c, + 0xa182, 0x0100, 0x0048, 0x6978, 0x6908, 0x81ff, 0x00c0, 0x6974, + 0x6910, 0xa18a, 0x0001, 0x0048, 0x697c, 0x6918, 0xa18a, 0x0001, + 0x0048, 0x6984, 0x0078, 0x698e, 0x6013, 0x0100, 0x0078, 0x698a, + 0x6013, 0x0300, 0x0078, 0x698a, 0x6013, 0x0500, 0x0078, 0x698a, + 0x6013, 0x0700, 0x0078, 0x698a, 0x6013, 0x0900, 0x0078, 0x698a, + 0x6013, 0x0b00, 0x0078, 0x698a, 0x6013, 0x0f00, 0x0078, 0x698a, + 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, 0x698f, 0xa006, 0x017f, + 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, 0x037e, 0x157e, + 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0040, + 0x69b7, 0xa286, 0x0004, 0x0040, 0x69b7, 0xa394, 0xff00, 0x8217, + 0xa286, 0x0006, 0x0040, 0x69b7, 0xa286, 0x0004, 0x0040, 0x69b7, + 0x0c7e, 0x2d60, 0x1078, 0x3459, 0x0c7f, 0x0078, 0x69ea, 0x2011, + 0x7296, 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a35, 0x00c0, + 0x69eb, 0x2011, 0x729a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x1078, + 0x5a35, 0x00c0, 0x69eb, 0x047e, 0x017e, 0x6aa0, 0xa294, 0x00ff, + 0x8227, 0xa006, 0x2009, 0x6d52, 0x210c, 0xd1a4, 0x0040, 0x69df, + 0x2009, 0x0029, 0x1078, 0x6bf7, 0x6800, 0xc0e5, 0x6802, 0x2019, + 0x0029, 0x1078, 0x445c, 0x1078, 0x43a9, 0x2c08, 0x1078, 0x6a57, + 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, 0x0d7f, 0x0c7f, + 0x007c, 0x0d7e, 0x2069, 0x728e, 0x6800, 0xa086, 0x0800, 0x0040, + 0x69fd, 0x6013, 0x0000, 0x0078, 0x69fe, 0xa006, 0x0d7f, 0x007c, + 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2079, 0x728c, + 0x7930, 0x7834, 0x1078, 0x1e1b, 0x00c0, 0x6a24, 0x1078, 0x3447, + 0x00c0, 0x6a24, 0x2011, 0x7290, 0xac98, 0x000a, 0x20a9, 0x0004, + 0x1078, 0x5a35, 0x00c0, 0x6a24, 0x2011, 0x7294, 0xac98, 0x0006, + 0x20a9, 0x0004, 0x1078, 0x5a35, 0x157f, 0x037f, 0x027f, 0x017f, + 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, 0x017e, 0x027e, 0x037e, + 0x157e, 0x2011, 0x7283, 0x2204, 0x8211, 0x220c, 0x1078, 0x1e1b, + 0x00c0, 0x6a50, 0x1078, 0x3447, 0x00c0, 0x6a50, 0x2011, 0x7296, + 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a35, 0x00c0, 0x6a50, + 0x2011, 0x729a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x5a35, + 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, 0x007c, 0x0e7e, + 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, + 0x8000, 0x2029, 0x6f19, 0x252c, 0x2021, 0x6f1f, 0x2424, 0x2061, + 0x7400, 0x2071, 0x6d00, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, + 0x6abc, 0x2100, 0xac06, 0x0040, 0x6ab2, 0x1078, 0x6c0f, 0x0040, + 0x6ab2, 0x671c, 0xa786, 0x0001, 0x0040, 0x6ab2, 0xa786, 0x0007, + 0x0040, 0x6ab2, 0x2500, 0xac06, 0x0040, 0x6ab2, 0x2400, 0xac06, + 0x0040, 0x6ab2, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00c0, 0x6ab2, + 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6120, 0x0040, 0x6aa6, 0xa786, + 0x0003, 0x00c0, 0x6ac5, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, + 0x017e, 0x1078, 0x36a1, 0x017f, 0x1078, 0x6276, 0x0d7f, 0x6000, + 0xa086, 0x0004, 0x00c0, 0x6ab0, 0x017e, 0x1078, 0x15f2, 0x017f, + 0x1078, 0x6283, 0xace0, 0x0008, 0x2001, 0x6d15, 0x2004, 0xac02, + 0x00c8, 0x6abc, 0x0078, 0x6a69, 0x127f, 0x027f, 0x047f, 0x057f, + 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, + 0x6a9b, 0xa386, 0x0005, 0x0040, 0x6ab2, 0x1078, 0x6bb3, 0x0078, + 0x6aa6, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, 0x6bca, + 0x017f, 0x0040, 0x6ae0, 0x601c, 0xa084, 0x000f, 0x1079, 0x6ae3, + 0x0e7f, 0x0c7f, 0x007c, 0x6aeb, 0x6aeb, 0x6aeb, 0x6aeb, 0x6aeb, + 0x6aeb, 0x6aed, 0x6aeb, 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, + 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, + 0x0020, 0x1078, 0x6bf7, 0x017f, 0x047f, 0x1078, 0x6884, 0xa085, + 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x33df, 0x157e, 0x017e, + 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x6d05, 0x2011, 0x7296, + 0x1078, 0x5a35, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, + 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, + 0x8000, 0x2061, 0x7400, 0x2079, 0x0001, 0x8fff, 0x0040, 0x6b73, + 0x2071, 0x6d00, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x6b73, + 0x88ff, 0x0040, 0x6b39, 0x2800, 0xac06, 0x00c0, 0x6b69, 0x2079, + 0x0000, 0x1078, 0x6c0f, 0x0040, 0x6b69, 0x2400, 0xac06, 0x0040, + 0x6b69, 0x671c, 0xa786, 0x0006, 0x00c0, 0x6b69, 0xa786, 0x0007, + 0x0040, 0x6b69, 0x88ff, 0x00c0, 0x6b51, 0x6018, 0xa206, 0x00c0, + 0x6b69, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6120, 0x0040, 0x6b5c, + 0x047e, 0x1078, 0x6bb3, 0x047f, 0x0d7f, 0x6000, 0xa086, 0x0004, + 0x00c0, 0x6b64, 0x1078, 0x15f2, 0x1078, 0x6283, 0x88ff, 0x00c0, + 0x6b7c, 0xace0, 0x0008, 0x2001, 0x6d15, 0x2004, 0xac02, 0x00c8, + 0x6b73, 0x0078, 0x6b25, 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, + 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, 0x6b74, + 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, + 0x5387, 0x1078, 0x5428, 0x1078, 0x6b18, 0x087f, 0x007c, 0x027e, + 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, + 0x0000, 0x017e, 0x037e, 0x1078, 0x3447, 0x00c0, 0x6ba8, 0x2c10, + 0x2041, 0x0000, 0x1078, 0x5387, 0x1078, 0x5428, 0x1078, 0x6b18, + 0x037f, 0x017f, 0x8108, 0x00f0, 0x6b99, 0x157f, 0x0c7f, 0x087f, + 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x6bc7, + 0x6800, 0xa07d, 0x0040, 0x6bc4, 0x6803, 0x0000, 0x6b52, 0x1078, + 0x36a1, 0x2f68, 0x0078, 0x6bb8, 0x6b52, 0x1078, 0x36a1, 0x0f7f, + 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x7400, 0x2071, + 0x6d00, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x6bf2, 0x2100, + 0xac06, 0x0040, 0x6be4, 0x6000, 0xa086, 0x0000, 0x0040, 0x6be4, + 0x6008, 0xa206, 0x0040, 0x6bee, 0xace0, 0x0008, 0x2001, 0x6d15, + 0x2004, 0xac02, 0x00c8, 0x6bf2, 0x0078, 0x6bcf, 0xa085, 0x0001, + 0x0078, 0x6bf3, 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, + 0x007e, 0x1078, 0x130f, 0x007f, 0x1040, 0x12b7, 0x6837, 0x010d, + 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, + 0x6c46, 0x684f, 0x0000, 0x1078, 0x36a1, 0x0d7f, 0x007c, 0x6700, + 0xa786, 0x0000, 0x0040, 0x6c22, 0xa786, 0x0001, 0x0040, 0x6c22, + 0xa786, 0x000a, 0x0040, 0x6c22, 0xa786, 0x0009, 0x0040, 0x6c22, + 0xa085, 0x0001, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, + 0x2071, 0x6d00, 0xd5a4, 0x0040, 0x6c30, 0x7034, 0x8000, 0x7036, + 0xd5b4, 0x0040, 0x6c36, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, + 0x6c3d, 0x2071, 0x6d0a, 0x1078, 0x6c6c, 0x0e7f, 0x007f, 0x127f, + 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6d00, + 0xd5a4, 0x0040, 0x6c4e, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, + 0x6c54, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x6c5b, 0x2071, + 0x6d0a, 0x1078, 0x6c6c, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, + 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6d02, 0x1078, 0x6c6c, + 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, + 0x6c75, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, + 0x6d00, 0x1078, 0x6c6c, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6d04, + 0x1078, 0x6c6c, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004, 0x0008, + 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, + 0x1000, 0x2000, 0x4000, 0x8000, 0x614c }; -#define ISP2100_CODE_LENGTH 0x5e69 +#define ISP2100_CODE_LENGTH 0x5c95 #endif -#if !defined(ISP2100_FABRIC) && defined(ISP2100_SCCLUN) -/************************************************************************ - * * - * --- ISP2100 Initiator/Target Firmware --- * - * with expanded LUN addressing. * - * * - * * - ************************************************************************ - * * - * NOTICE * - * * - * COPYRIGHT 1998 QLOGIC CORPORATION * - * ALL RIGHTS RESERVED * - * * - * This computer program is CONFIDENTIAL and contains TRADE SECRETS of * - * QLOGIC CORPORATION. The receipt or possession of this program does * - * not convey any rights to reproduce or disclose its contents, or to * - * manufacture, use, or sell anything that it may describe, in whole or * - * in part, without the specific written consent of QLOGIC CORPORATION. * - * Any reproduction of this program without the express written consent * - * of QLOGIC CORPORATION is a violation of the copyright laws and may * - * subject you to civil liability and criminal prosecution. * - * * - ************************************************************************ - */ +#if 0 /* - * Firmware Version 1.15.07 (14:38 Oct 13, 1998) + * Firmware Version 1.14.06 (15:32 Jul 02, 1998) */ - +#define ISP2100_CODE_VERSION 1*1024+14 static const u_int16_t ISP2100_RISC_CODE[] = { - 0x0078, 0x1029, 0x0000, 0x5f74, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x0078, 0x1029, 0x0000, 0x5baf, 0x0000, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020, - 0x2400, 0x20c1, 0x0021, 0x20a1, 0x6f74, 0x2009, 0x0000, 0x20a9, - 0x068c, 0x41a4, 0x3400, 0x20c9, 0x73ff, 0x2091, 0x2000, 0x2059, - 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x1ff1, 0x2051, 0x7000, - 0x2a70, 0x705b, 0x8e00, 0x705f, 0xffff, 0x7057, 0x8df9, 0x7063, - 0x0300, 0x1078, 0x1235, 0x20a1, 0x7600, 0x715c, 0x810d, 0x810d, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3134, 0x2020, 0x2020, + 0x2400, 0x20c1, 0x0021, 0x20a1, 0x6baf, 0x2009, 0x0000, 0x20a9, + 0x0651, 0x41a4, 0x3400, 0x20c9, 0x6fff, 0x2091, 0x2000, 0x2059, + 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x1f6e, 0x2051, 0x6c00, + 0x2a70, 0x705b, 0x8a00, 0x705f, 0xffff, 0x7057, 0x89f9, 0x7063, + 0x0300, 0x1078, 0x1217, 0x20a1, 0x7200, 0x715c, 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e, 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400, 0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4, - 0x1078, 0x1200, 0x1078, 0x1321, 0x1078, 0x14a6, 0x1078, 0x192f, - 0x1078, 0x32e1, 0x1078, 0x5687, 0x1078, 0x12ac, 0x1078, 0x22f7, - 0x1078, 0x3a1c, 0x1078, 0x37f4, 0x1078, 0x41d0, 0x1078, 0x1dbe, - 0x1078, 0x4410, 0x1078, 0x3f3d, 0x1078, 0x1cdd, 0x1078, 0x1d9d, + 0x1078, 0x11e2, 0x1078, 0x1301, 0x1078, 0x1486, 0x1078, 0x18ce, + 0x1078, 0x3162, 0x1078, 0x53b7, 0x1078, 0x128c, 0x1078, 0x2244, + 0x1078, 0x37a0, 0x1078, 0x3578, 0x1078, 0x3f4c, 0x1078, 0x1d4c, + 0x1078, 0x418b, 0x1078, 0x3cbc, 0x1078, 0x1c74, 0x1078, 0x1d2b, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086, 0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, - 0x00c0, 0x10bd, 0x1078, 0x2a59, 0x1078, 0x231f, 0x1078, 0x3a6c, - 0x1078, 0x38df, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x10c1, 0x1078, 0x41e8, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, - 0x10aa, 0x1078, 0x5359, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x112a, - 0x10cd, 0x117d, 0x11fd, 0x11fe, 0x11ff, 0x1078, 0x1288, 0x007c, - 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2b7c, 0x2079, 0x0100, - 0x7844, 0xa005, 0x00c0, 0x1127, 0x2011, 0x320e, 0x1078, 0x42aa, + 0x00c0, 0x10bd, 0x1078, 0x2967, 0x1078, 0x226c, 0x1078, 0x37f0, + 0x1078, 0x3663, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, + 0x10c1, 0x1078, 0x3f64, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, + 0x10aa, 0x1078, 0x50d1, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1130, + 0x10cd, 0x1161, 0x11df, 0x11e0, 0x11e1, 0x1078, 0x126a, 0x007c, + 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2a02, 0x2079, 0x0100, + 0x7844, 0xa005, 0x00c0, 0x112d, 0x2011, 0x308c, 0x1078, 0x4026, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, - 0x73b0, 0x1078, 0x2a18, 0x1078, 0x51a4, 0x2011, 0x0004, 0x1078, - 0x634b, 0x1078, 0x378e, 0x2079, 0x7051, 0x7804, 0xd0ac, 0x00c0, - 0x1115, 0x2011, 0x0001, 0x1078, 0x634b, 0x7083, 0x0000, 0x7087, - 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x20a1, 0x2011, 0x0005, - 0x1078, 0x52b3, 0x1078, 0x49b7, 0x0c7e, 0x2061, 0x0100, 0x60e3, - 0x0008, 0x0c7f, 0x127f, 0x0078, 0x1129, 0x7083, 0x0000, 0x7087, - 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x52b3, 0x1078, - 0x49b7, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, - 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa086, 0xffff, - 0x0040, 0x1138, 0x1078, 0x20a1, 0x1078, 0x49b7, 0x0078, 0x117b, - 0x7080, 0xa005, 0x00c0, 0x117b, 0x2001, 0x7052, 0x2004, 0xd0ac, - 0x0040, 0x115e, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, - 0x017e, 0x1078, 0x34fa, 0x00c0, 0x1151, 0x6000, 0xd0ec, 0x00c0, - 0x1159, 0x017f, 0x8108, 0x00f0, 0x1148, 0x0c7f, 0x157f, 0x0078, - 0x115e, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x117b, 0x7003, 0x0003, - 0x7087, 0xffff, 0x2001, 0x0000, 0x1078, 0x1f8a, 0x1078, 0x2a92, - 0x2001, 0x71b7, 0x2004, 0xa086, 0x0005, 0x00c0, 0x1173, 0x2011, - 0x0000, 0x1078, 0x52b3, 0x2011, 0x0000, 0x1078, 0x52bd, 0x1078, - 0x49b7, 0x1078, 0x4a67, 0x127f, 0x007c, 0x017e, 0x0f7e, 0x127e, - 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010, 0x7942, - 0x7924, 0xd1b4, 0x0040, 0x118e, 0x7827, 0x0040, 0xd19c, 0x0040, - 0x1193, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, 0xa18a, - 0x0003, 0x0050, 0x11b9, 0x7954, 0xd1ac, 0x00c0, 0x11b9, 0x2009, - 0x00f8, 0x1078, 0x32b0, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, - 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11b1, 0x7824, 0xd0ac, 0x00c0, - 0x11ed, 0x00f0, 0x11a9, 0x2001, 0x0001, 0x1078, 0x1f8a, 0x0078, - 0x11f6, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008, 0x00e0, - 0x11bf, 0x2091, 0x6000, 0x00f0, 0x11bf, 0x7853, 0x0400, 0x782f, - 0x0000, 0x2009, 0x00f8, 0x1078, 0x32b0, 0x20a9, 0x000e, 0x0005, - 0x00f0, 0x11cf, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010, - 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x11e4, - 0x7824, 0xd0ac, 0x00c0, 0x11ed, 0x8319, 0x00c0, 0x11da, 0x2001, - 0x0001, 0x1078, 0x1f8a, 0x0078, 0x11f4, 0x7828, 0xc09d, 0x782a, - 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, 0x037f, - 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, - 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, 0x120c, - 0x704f, 0xffff, 0x0078, 0x120e, 0x704f, 0x0000, 0x7053, 0xffff, - 0x2061, 0x71a0, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, - 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, - 0x601f, 0x07d0, 0x2061, 0x71a8, 0x6003, 0x8000, 0x6007, 0x0000, - 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, - 0x601b, 0x0001, 0x601f, 0x0000, 0x007c, 0x1078, 0x125b, 0x2011, - 0x0000, 0x81ff, 0x0040, 0x125a, 0xa186, 0x0001, 0x00c0, 0x124a, - 0x705f, 0x8fff, 0x7057, 0x7e01, 0x7063, 0x0100, 0x705b, 0x7e00, - 0x0078, 0x1258, 0xa186, 0x0002, 0x00c0, 0x1252, 0x2011, 0x0000, - 0x0078, 0x1258, 0xa186, 0x0005, 0x00c0, 0x1258, 0x2011, 0x0001, - 0x1078, 0x1282, 0x007c, 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, - 0x1282, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, - 0x7fff, 0x2c04, 0xa406, 0x0040, 0x1270, 0xc18d, 0x0078, 0x127d, - 0xc185, 0x2011, 0x0001, 0x1078, 0x1282, 0x2061, 0xffff, 0x2362, - 0x2c04, 0xa306, 0x00c0, 0x127d, 0xc195, 0x2011, 0x0001, 0x1078, - 0x1282, 0x007c, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, - 0x2091, 0x8000, 0x0068, 0x128a, 0x007e, 0x017e, 0x2079, 0x0000, - 0x7818, 0xa084, 0x0000, 0x00c0, 0x1290, 0x017f, 0x792e, 0x007f, - 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, - 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0x7000, 0x7803, - 0x0005, 0x0078, 0x12a9, 0x007c, 0x2071, 0x7000, 0x7158, 0x712e, - 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048, 0x12c2, - 0x705c, 0xa302, 0x00c8, 0x12c2, 0x220a, 0x2208, 0x2310, 0x8420, - 0x0078, 0x12b4, 0x200b, 0x0000, 0x7496, 0x749a, 0x007c, 0x0e7e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x7000, 0x7098, 0xa0ea, 0x0010, - 0x00c8, 0x12d5, 0xa06e, 0x0078, 0x12df, 0x8001, 0x709a, 0x702c, + 0x73b0, 0x1078, 0x2926, 0x1078, 0x4f22, 0x2011, 0x0004, 0x1078, + 0x5fe2, 0x1078, 0x3512, 0x2079, 0x6c51, 0x7804, 0xd0ac, 0x00c0, + 0x1115, 0x2011, 0x0001, 0x1078, 0x5fe2, 0x7083, 0x0000, 0x7087, + 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x201e, 0x2011, 0x0005, + 0x1078, 0x502b, 0x1078, 0x4713, 0x0c7e, 0x2061, 0x0100, 0x60e3, + 0x0008, 0x0c7f, 0x127f, 0x0078, 0x112f, 0x7003, 0x0003, 0x2001, + 0x0000, 0x1078, 0x1f0f, 0x2011, 0x0000, 0x1078, 0x502b, 0x2011, + 0x0000, 0x1078, 0x5035, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, + 0x0c7f, 0x1078, 0x4713, 0x1078, 0x47c3, 0x0f7f, 0x127f, 0x007c, + 0x127e, 0x2091, 0x8000, 0x7084, 0xa086, 0xffff, 0x0040, 0x113e, + 0x1078, 0x201e, 0x1078, 0x4713, 0x0078, 0x115f, 0x7080, 0xa005, + 0x00c0, 0x115f, 0x7003, 0x0003, 0x7087, 0xffff, 0x2001, 0x0000, + 0x1078, 0x1f0f, 0x1078, 0x29a0, 0x2001, 0x6db1, 0x2004, 0xa086, + 0x0005, 0x00c0, 0x1157, 0x2011, 0x0000, 0x1078, 0x502b, 0x2011, + 0x0000, 0x1078, 0x5035, 0x1078, 0x4713, 0x1078, 0x47c3, 0x127f, + 0x007c, 0x017e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, + 0x7843, 0x0000, 0x7924, 0xd1b4, 0x0040, 0x1170, 0x7827, 0x0040, + 0xd19c, 0x0040, 0x1175, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, + 0x7900, 0xa18a, 0x0003, 0x0050, 0x119b, 0x7954, 0xd1ac, 0x00c0, + 0x119b, 0x2009, 0x00f8, 0x1078, 0x3131, 0x7843, 0x0090, 0x7843, + 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1193, 0x7824, + 0xd0ac, 0x00c0, 0x11cf, 0x00f0, 0x118b, 0x2001, 0x0001, 0x1078, + 0x1f0f, 0x0078, 0x11d8, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, + 0x0008, 0x00e0, 0x11a1, 0x2091, 0x6000, 0x00f0, 0x11a1, 0x7853, + 0x0400, 0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x3131, 0x20a9, + 0x000e, 0x0005, 0x00f0, 0x11b1, 0x7853, 0x1400, 0x7843, 0x0090, + 0x7843, 0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, + 0x0040, 0x11c6, 0x7824, 0xd0ac, 0x00c0, 0x11cf, 0x8319, 0x00c0, + 0x11bc, 0x2001, 0x0001, 0x1078, 0x1f0f, 0x0078, 0x11d6, 0x7828, + 0xc09d, 0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, + 0x157f, 0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, + 0x007c, 0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, + 0x0048, 0x11ee, 0x704f, 0xffff, 0x0078, 0x11f0, 0x704f, 0x0000, + 0x7053, 0xffff, 0x2061, 0x6da0, 0x6003, 0x0909, 0x6007, 0x0000, + 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, + 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061, 0x6da8, 0x6003, 0x8000, + 0x6007, 0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, + 0x6017, 0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x007c, 0x1078, + 0x123d, 0x2011, 0x0000, 0x81ff, 0x0040, 0x123c, 0xa186, 0x0001, + 0x00c0, 0x122c, 0x705f, 0x8fff, 0x7057, 0x7a01, 0x7063, 0x0100, + 0x705b, 0x7a00, 0x0078, 0x123a, 0xa186, 0x0002, 0x00c0, 0x1234, + 0x2011, 0x0000, 0x0078, 0x123a, 0xa186, 0x0005, 0x00c0, 0x123a, + 0x2011, 0x0001, 0x1078, 0x1264, 0x007c, 0x2009, 0x0000, 0x2011, + 0x0000, 0x1078, 0x1264, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2362, + 0x2c24, 0x2061, 0x7fff, 0x2c04, 0xa406, 0x0040, 0x1252, 0xc18d, + 0x0078, 0x125f, 0xc185, 0x2011, 0x0001, 0x1078, 0x1264, 0x2061, + 0xffff, 0x2362, 0x2c04, 0xa306, 0x00c0, 0x125f, 0xc195, 0x2011, + 0x0001, 0x1078, 0x1264, 0x007c, 0x3800, 0xa084, 0xfffc, 0xa205, + 0x20c0, 0x007c, 0x2091, 0x8000, 0x0068, 0x126c, 0x007e, 0x017e, + 0x2079, 0x0000, 0x7818, 0xa084, 0x0000, 0x00c0, 0x1272, 0x017f, + 0x792e, 0x007f, 0x782a, 0x007f, 0x7826, 0x7823, 0x8002, 0x781b, + 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0x6c00, 0x7803, + 0x0005, 0x0078, 0x1289, 0x007c, 0x2071, 0x6c00, 0x7158, 0x712e, + 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048, 0x12a2, + 0x705c, 0xa302, 0x00c8, 0x12a2, 0x220a, 0x2208, 0x2310, 0x8420, + 0x0078, 0x1294, 0x200b, 0x0000, 0x7496, 0x749a, 0x007c, 0x0e7e, + 0x127e, 0x2091, 0x8000, 0x2071, 0x6c00, 0x7098, 0xa0ea, 0x0010, + 0x00c8, 0x12b5, 0xa06e, 0x0078, 0x12bf, 0x8001, 0x709a, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, - 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7000, 0x127e, 0x2091, 0x8000, - 0x7098, 0x8001, 0x00c8, 0x12ef, 0xa06e, 0x0078, 0x12f8, 0x709a, + 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6c00, 0x127e, 0x2091, 0x8000, + 0x7098, 0x8001, 0x00c8, 0x12cf, 0xa06e, 0x0078, 0x12d8, 0x709a, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x7000, 0x702c, 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, - 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x1317, 0x6804, 0x6807, - 0x0000, 0x007e, 0x1078, 0x12fb, 0x0d7f, 0x0078, 0x130b, 0x007c, - 0x0e7e, 0x2071, 0x7000, 0x7098, 0xa08a, 0x0010, 0xa00d, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x71d9, 0x7007, 0x0000, 0x701b, 0x0000, + 0x6c00, 0x702c, 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, + 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x12f7, 0x6804, 0x6807, + 0x0000, 0x007e, 0x1078, 0x12db, 0x0d7f, 0x0078, 0x12eb, 0x007c, + 0x0e7e, 0x2071, 0x6c00, 0x7098, 0xa08a, 0x0010, 0xa00d, 0x0e7f, + 0x007c, 0x0e7e, 0x2071, 0x6dd3, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, - 0x0e7f, 0x007c, 0x0e7e, 0x2270, 0x700b, 0x0000, 0x2071, 0x71d9, - 0x7018, 0xa088, 0x71e2, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, - 0x7004, 0xa005, 0x00c0, 0x134a, 0x0f7e, 0x2079, 0x0010, 0x1078, - 0x135b, 0x0f7f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x71d9, 0x7004, - 0xa005, 0x00c0, 0x1359, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x135b, - 0x0f7f, 0x0e7f, 0x007c, 0x7000, 0x0079, 0x135e, 0x1362, 0x13cc, - 0x13e9, 0x13e9, 0x7018, 0x711c, 0xa106, 0x00c0, 0x136a, 0x7007, - 0x0000, 0x007c, 0x0d7e, 0xa180, 0x71e2, 0x2004, 0x700a, 0x2068, + 0x0e7f, 0x007c, 0x0e7e, 0x2270, 0x700b, 0x0000, 0x2071, 0x6dd3, + 0x7018, 0xa088, 0x6ddc, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, + 0x7004, 0xa005, 0x00c0, 0x132a, 0x0f7e, 0x2079, 0x0010, 0x1078, + 0x133b, 0x0f7f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6dd3, 0x7004, + 0xa005, 0x00c0, 0x1339, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x133b, + 0x0f7f, 0x0e7f, 0x007c, 0x7000, 0x0079, 0x133e, 0x1342, 0x13ac, + 0x13c9, 0x13c9, 0x7018, 0x711c, 0xa106, 0x00c0, 0x134a, 0x7007, + 0x0000, 0x007c, 0x0d7e, 0xa180, 0x6ddc, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, - 0x680c, 0x7016, 0x6804, 0x0d7f, 0xd084, 0x0040, 0x138c, 0x7007, - 0x0001, 0x1078, 0x1391, 0x007c, 0x7007, 0x0002, 0x1078, 0x13a7, + 0x680c, 0x7016, 0x6804, 0x0d7f, 0xd084, 0x0040, 0x136c, 0x7007, + 0x0001, 0x1078, 0x1371, 0x007c, 0x7007, 0x0002, 0x1078, 0x1387, 0x007c, 0x017e, 0x027e, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, - 0x00c8, 0x139c, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, + 0x00c8, 0x137c, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e, 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, - 0x13bb, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, + 0x139b, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f, 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, - 0x70e5, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, + 0x6ce5, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, - 0xc084, 0x7002, 0x700b, 0x70e0, 0x127f, 0x157f, 0x147f, 0x137f, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x7114, 0x209c, 0x20a1, - 0x0014, 0x7803, 0x0026, 0x2001, 0x7115, 0x20ac, 0x53a6, 0x2099, - 0x7116, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, + 0xc084, 0x7002, 0x700b, 0x6ce0, 0x127f, 0x157f, 0x147f, 0x137f, + 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x6d14, 0x209c, 0x20a1, + 0x0014, 0x7803, 0x0026, 0x2001, 0x6d15, 0x20ac, 0x53a6, 0x2099, + 0x6d16, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, - 0xc08c, 0x7002, 0x700b, 0x7111, 0x127f, 0x157f, 0x147f, 0x137f, - 0x007c, 0x017e, 0x0e7e, 0x2071, 0x71d9, 0x0f7e, 0x2079, 0x0010, - 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0040, 0x142c, 0xa18c, 0x0700, - 0x0040, 0x1429, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, - 0x142c, 0x7004, 0x1079, 0x1430, 0x0f7f, 0x0e7f, 0x017f, 0x007c, - 0x135b, 0x1438, 0x145a, 0x1474, 0x149d, 0x1436, 0x0078, 0x1436, + 0xc08c, 0x7002, 0x700b, 0x6d11, 0x127f, 0x157f, 0x147f, 0x137f, + 0x007c, 0x017e, 0x0e7e, 0x2071, 0x6dd3, 0x0f7e, 0x2079, 0x0010, + 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0040, 0x140c, 0xa18c, 0x0700, + 0x0040, 0x1409, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, + 0x140c, 0x7004, 0x1079, 0x1410, 0x0f7f, 0x0e7f, 0x017f, 0x007c, + 0x133b, 0x1418, 0x143a, 0x1454, 0x147d, 0x1416, 0x0078, 0x1416, 0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, - 0x137f, 0x700c, 0xa005, 0x0040, 0x1461, 0x1078, 0x1391, 0x007c, + 0x137f, 0x700c, 0xa005, 0x0040, 0x1441, 0x1078, 0x1371, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, - 0x135b, 0x007c, 0x700c, 0xa005, 0x0040, 0x1461, 0x1078, 0x13a7, + 0x133b, 0x007c, 0x700c, 0xa005, 0x0040, 0x1441, 0x1078, 0x1387, 0x007c, 0x0d7e, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, - 0x0000, 0x1078, 0x135b, 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, - 0x70e3, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, - 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0x70e5, 0x2004, 0xd0bc, - 0x0040, 0x1493, 0x2001, 0x70ee, 0x2004, 0xa080, 0x000d, 0x20a0, + 0x0000, 0x1078, 0x133b, 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, + 0x6ce3, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, + 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0x6ce5, 0x2004, 0xd0bc, + 0x0040, 0x1473, 0x2001, 0x6cee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, - 0x1078, 0x3b15, 0x1078, 0x135b, 0x007c, 0x2001, 0x7113, 0x2003, - 0x0100, 0x7007, 0x0000, 0x1078, 0x135b, 0x007c, 0x127e, 0x2091, - 0x2100, 0x2079, 0x0030, 0x2071, 0x71ea, 0x7003, 0x0000, 0x700f, - 0x71f0, 0x7013, 0x71f0, 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, - 0xa184, 0x0007, 0x0079, 0x14bc, 0x14c4, 0x150a, 0x14c4, 0x14c4, - 0x14c4, 0x14ef, 0x14d3, 0x14c8, 0xa085, 0x0001, 0x0078, 0x1524, - 0x684c, 0xd0bc, 0x0040, 0x14c4, 0x6860, 0x682e, 0x685c, 0x682a, - 0x6858, 0x0078, 0x1512, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, - 0x14c4, 0x684c, 0xd0bc, 0x0040, 0x14c4, 0x6860, 0x682e, 0x685c, + 0x1078, 0x3899, 0x1078, 0x133b, 0x007c, 0x2001, 0x6d13, 0x2003, + 0x0100, 0x7007, 0x0000, 0x1078, 0x133b, 0x007c, 0x127e, 0x2091, + 0x2100, 0x2079, 0x0030, 0x2071, 0x6de4, 0x7003, 0x0000, 0x700f, + 0x6dea, 0x7013, 0x6dea, 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, + 0xa184, 0x0007, 0x0079, 0x149c, 0x14a4, 0x14ea, 0x14a4, 0x14a4, + 0x14a4, 0x14cf, 0x14b3, 0x14a8, 0xa085, 0x0001, 0x0078, 0x1504, + 0x684c, 0xd0bc, 0x0040, 0x14a4, 0x6860, 0x682e, 0x685c, 0x682a, + 0x6858, 0x0078, 0x14f2, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, + 0x14a4, 0x684c, 0xd0bc, 0x0040, 0x14a4, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1beb, 0x2004, 0x6832, 0x6858, 0x0078, 0x151a, 0xa18c, - 0x00ff, 0xa186, 0x0015, 0x00c0, 0x14c4, 0x684c, 0xd0ac, 0x0040, - 0x14c4, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1beb, 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, - 0x0078, 0x151a, 0x684c, 0xd0ac, 0x0040, 0x14c4, 0xa006, 0x682e, - 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x1beb, 0x210c, 0x6932, + 0xa080, 0x1b82, 0x2004, 0x6832, 0x6858, 0x0078, 0x14fa, 0xa18c, + 0x00ff, 0xa186, 0x0015, 0x00c0, 0x14a4, 0x684c, 0xd0ac, 0x0040, + 0x14a4, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, + 0xa080, 0x1b82, 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, + 0x0078, 0x14fa, 0x684c, 0xd0ac, 0x0040, 0x14a4, 0xa006, 0x682e, + 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x1b82, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, - 0x697c, 0x6912, 0x6980, 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, - 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff, 0x0040, 0x153f, 0xa280, - 0x0004, 0x0d7e, 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x153b, 0x1078, - 0x14b7, 0x10c0, 0x1288, 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, - 0x047e, 0x037e, 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, - 0x7000, 0xa005, 0x00c0, 0x1553, 0x7206, 0x2001, 0x1567, 0x007e, - 0x2260, 0x0078, 0x167f, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, - 0x240a, 0x8108, 0xa182, 0x720b, 0x0048, 0x1560, 0x2009, 0x71f0, - 0x710e, 0x7000, 0xa005, 0x00c0, 0x1567, 0x1078, 0x1668, 0x127f, - 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, - 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, - 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x15bb, 0x6808, 0xa005, - 0x0040, 0x1621, 0x7000, 0xa005, 0x00c0, 0x1588, 0x0078, 0x15b5, - 0x700c, 0x7110, 0xa106, 0x00c0, 0x1625, 0x7004, 0xa406, 0x00c0, - 0x15b5, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x159e, 0x047e, - 0x1078, 0x1737, 0x047f, 0x2460, 0x0078, 0x157e, 0x2001, 0x0207, - 0x2004, 0xd09c, 0x00c0, 0x1591, 0x7804, 0xa084, 0x6000, 0x0040, - 0x15af, 0xa086, 0x6000, 0x0040, 0x15af, 0x0078, 0x1591, 0x7803, - 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x571c, 0x0078, 0x1625, 0x6808, 0xa005, 0x0040, 0x1621, 0x7000, - 0xa005, 0x00c0, 0x15c5, 0x0078, 0x1621, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x15ce, 0x7004, 0xa406, 0x00c0, 0x1621, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x0040, 0x15db, 0x047e, 0x1078, 0x1737, 0x047f, - 0x2460, 0x0078, 0x15bb, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, - 0x15ce, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x15d4, 0x7804, - 0xa084, 0x6000, 0x0040, 0x15f2, 0xa086, 0x6000, 0x0040, 0x15f2, - 0x0078, 0x15ce, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, - 0x0001, 0x0040, 0x1613, 0xa08e, 0x0002, 0x00c0, 0x1621, 0x0c7e, - 0x0e7e, 0x6818, 0x2060, 0x1078, 0x1bc0, 0x2804, 0xac70, 0x6034, - 0xd09c, 0x00c0, 0x160f, 0x7308, 0x720c, 0x0078, 0x1611, 0x7310, - 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, - 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, - 0x0000, 0x2009, 0x0048, 0x1078, 0x571c, 0x0c7f, 0x0d7f, 0x127f, - 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x71ea, 0x7000, 0xa086, 0x0000, - 0x0040, 0x1665, 0x7004, 0xac06, 0x00c0, 0x1656, 0x2079, 0x0030, - 0x7804, 0xd0fc, 0x00c0, 0x1652, 0x2001, 0x0207, 0x2004, 0xd09c, - 0x00c0, 0x1638, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1644, - 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, - 0x0078, 0x1656, 0x1078, 0x1737, 0x0078, 0x162d, 0x157e, 0x20a9, - 0x0009, 0x2009, 0x71f0, 0x2104, 0xac06, 0x00c0, 0x1660, 0x200a, - 0xa188, 0x0003, 0x00f0, 0x165b, 0x157f, 0x0e7f, 0x0f7f, 0x007c, - 0x700c, 0x7110, 0xa106, 0x00c0, 0x1670, 0x7003, 0x0000, 0x007c, - 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, - 0xa182, 0x720b, 0x0048, 0x167e, 0x2009, 0x71f0, 0x7112, 0x8cff, - 0x00c0, 0x169e, 0x7908, 0xd1ec, 0x00c0, 0x1692, 0x1078, 0x190d, - 0x0040, 0x1692, 0x7803, 0x0009, 0x7904, 0xd1fc, 0x0040, 0x168c, - 0x7803, 0x0006, 0x7007, 0x0000, 0x1078, 0x190d, 0x0040, 0x16c5, - 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x16c5, 0x6010, 0x2068, - 0x2d58, 0x6828, 0xa406, 0x00c0, 0x16a9, 0x682c, 0xa306, 0x0040, - 0x16ad, 0x1078, 0x1c0b, 0x00c0, 0x1682, 0x684c, 0xd0f4, 0x00c0, - 0x1682, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, - 0xa0cc, 0x000f, 0x2009, 0x0011, 0x1078, 0x16c6, 0x0040, 0x16c4, - 0x2009, 0x0001, 0x1078, 0x16c6, 0x2d58, 0x007c, 0x8aff, 0x0040, - 0x1732, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x16e5, 0x0d7e, - 0x2804, 0xac68, 0x2900, 0x0079, 0x16d5, 0x1714, 0x16f5, 0x16f5, - 0x1714, 0x1714, 0x170c, 0x1714, 0x16f5, 0x1714, 0x16fb, 0x16fb, - 0x1714, 0x1714, 0x1714, 0x1703, 0x16fb, 0xc0fc, 0x6852, 0x6b6c, - 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040, 0x1717, 0x2804, - 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1717, 0x6b08, 0x6a0c, 0x6d00, - 0x6c04, 0x0078, 0x1717, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, - 0x6e0c, 0x0078, 0x1717, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, - 0xa086, 0x001e, 0x00c0, 0x1714, 0x0d7f, 0x1078, 0x1ba7, 0x00c0, - 0x16c6, 0xa00e, 0x0078, 0x1732, 0x0d7f, 0x1078, 0x1288, 0x7b22, - 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, - 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, - 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, - 0x1078, 0x1ba7, 0x007c, 0x1078, 0x1288, 0x1078, 0x1288, 0x127e, - 0x2091, 0x2100, 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, - 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1735, 0xa184, 0x0003, - 0xa086, 0x0003, 0x0040, 0x1735, 0x7000, 0x0079, 0x174f, 0x1757, - 0x1759, 0x182a, 0x188e, 0x18a5, 0x1757, 0x1757, 0x1757, 0x1078, - 0x1288, 0x8001, 0x7002, 0xa184, 0x0880, 0x00c0, 0x176e, 0x8aff, - 0x0040, 0x17ca, 0x2009, 0x0001, 0x1078, 0x16c6, 0x0040, 0x18b7, - 0x2009, 0x0001, 0x1078, 0x16c6, 0x0078, 0x18b7, 0x7803, 0x0004, - 0x7003, 0x0000, 0xd1dc, 0x0040, 0x17b9, 0x027e, 0x037e, 0x6b28, - 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, - 0x6a2e, 0x7820, 0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, - 0x6816, 0x037f, 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, - 0x1bc0, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, - 0x0000, 0x6850, 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, - 0x17ab, 0x684c, 0xd0e4, 0x0040, 0x17ab, 0x7004, 0x2060, 0x2009, - 0x0048, 0x1078, 0x571c, 0x7808, 0xd0ec, 0x00c0, 0x17b5, 0x7803, - 0x0009, 0x7003, 0x0004, 0x0078, 0x18b7, 0x1078, 0x1668, 0x0078, - 0x18b7, 0x057e, 0x7d0c, 0x1078, 0x6f20, 0x057f, 0x1078, 0x18bb, - 0x697c, 0x6912, 0x6980, 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, - 0x0078, 0x18b7, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, - 0x17e2, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17de, - 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x571c, 0x1078, 0x1668, - 0x0078, 0x18b7, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, - 0x0000, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa188, 0x0007, - 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, - 0x810b, 0x810b, 0x810b, 0x1078, 0x18ea, 0x7803, 0x0004, 0x780f, - 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0040, 0x1803, 0x7803, - 0x0002, 0x7803, 0x0004, 0x780f, 0x0070, 0x7004, 0x7007, 0x0000, - 0x2060, 0x2009, 0x0048, 0x1078, 0x571c, 0x1078, 0x190d, 0x0040, - 0x17de, 0x7908, 0xd1ec, 0x00c0, 0x1821, 0x2009, 0x0009, 0x0078, - 0x1823, 0x2009, 0x0019, 0x7902, 0x7803, 0x0009, 0x7003, 0x0003, - 0x0078, 0x18b7, 0x8001, 0x7002, 0xd194, 0x0040, 0x183c, 0x7804, - 0xd0fc, 0x00c0, 0x173f, 0x8aff, 0x0040, 0x18b7, 0x2009, 0x0001, - 0x1078, 0x16c6, 0x0078, 0x18b7, 0xa184, 0x0880, 0x00c0, 0x1849, - 0x8aff, 0x0040, 0x18b7, 0x2009, 0x0001, 0x1078, 0x16c6, 0x0078, - 0x18b7, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, 0x187d, - 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1bc0, 0x0d7e, 0x0f7e, - 0x2d78, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x186d, 0x6808, - 0x2008, 0xa31a, 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, - 0x7814, 0xa101, 0x7816, 0x0078, 0x1879, 0x6810, 0x2008, 0xa31a, - 0x6814, 0xa213, 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, - 0x7816, 0x0f7f, 0x0d7f, 0x0078, 0x1779, 0x057e, 0x7d0c, 0x1078, - 0x6f20, 0x057f, 0x1078, 0x18bb, 0x697c, 0x6912, 0x6980, 0x6916, - 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x18b7, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x18a1, 0x6808, 0x8001, - 0x680a, 0x00c0, 0x18a1, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x571c, 0x1078, 0x1668, 0x0078, 0x18b7, 0x7803, 0x0004, 0x7003, - 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x18a1, 0x2068, - 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x167f, 0x017f, - 0x007f, 0x127f, 0x007c, 0x1078, 0x18cc, 0x20e1, 0x9028, 0x700f, - 0x71f0, 0x7013, 0x71f0, 0x2001, 0x015d, 0x200c, 0x810a, 0x2102, - 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, - 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, - 0x18e9, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x18e9, - 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x18e9, 0x8421, 0x00c0, - 0x18d3, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, 0x7808, - 0xa084, 0xf000, 0xa10d, 0x1078, 0x18cc, 0x20e1, 0x7000, 0x7324, - 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, - 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, - 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, 0x7908, - 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x191a, 0xa085, 0x0001, - 0x0078, 0x192c, 0x2001, 0x020a, 0x81ff, 0x0040, 0x1925, 0x20e1, - 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, 0x200c, - 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, 0x0e7e, - 0x2071, 0x720b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, 0xa280, - 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x19b1, 0x6934, 0xa184, - 0x0007, 0x0079, 0x1943, 0x194b, 0x199c, 0x194b, 0x194b, 0x194b, - 0x1981, 0x195e, 0x194d, 0x1078, 0x1288, 0x684c, 0xd0b4, 0x0040, - 0x1ab3, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, - 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x19a4, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x00c0, 0x194b, 0x684c, 0xd0b4, 0x0040, - 0x1ab3, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, - 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, - 0xa084, 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6958, 0x0078, - 0x19ad, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x19b1, 0x684c, - 0xd0b4, 0x0040, 0x1ab3, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, - 0xa084, 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6958, 0xa006, - 0x682e, 0x682a, 0x0078, 0x19ad, 0x684c, 0xd0b4, 0x0040, 0x1733, - 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, - 0x000f, 0xa080, 0x1beb, 0x2004, 0x6832, 0x6926, 0x684c, 0xc0dd, - 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, 0xd0fc, - 0x10c0, 0x1ab7, 0x0e7e, 0x0d7e, 0x2071, 0x720b, 0x7000, 0xa005, - 0x00c0, 0x1a2d, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, - 0x2068, 0x6818, 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, 0x0f7e, - 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, - 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, - 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, - 0x0040, 0x19ef, 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, 0xa108, - 0x791a, 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, - 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x00c0, - 0x1a06, 0x6928, 0x6810, 0xa106, 0x0040, 0x1a13, 0x037e, 0x047e, - 0x6b14, 0x6c10, 0x1078, 0x1c0b, 0x047f, 0x037f, 0x0040, 0x1a13, - 0x0c7f, 0x0078, 0x1a2d, 0x8aff, 0x00c0, 0x1a1b, 0x0c7f, 0xa085, - 0x0001, 0x0078, 0x1a2d, 0x127e, 0x2091, 0x8000, 0x2079, 0x0020, - 0x2009, 0x0001, 0x1078, 0x1a31, 0x0040, 0x1a2a, 0x2009, 0x0001, - 0x1078, 0x1a31, 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, 0x0f7f, - 0x007c, 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, 0x8aff, - 0x0040, 0x1aac, 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, 0xa203, - 0x0048, 0x1aab, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1a5e, - 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1a4e, 0x1a8d, 0x1a6e, - 0x1a6e, 0x1a8d, 0x1a8d, 0x1a85, 0x1a8d, 0x1a6e, 0x1a8d, 0x1a74, - 0x1a74, 0x1a8d, 0x1a8d, 0x1a8d, 0x1a7c, 0x1a74, 0xc0fc, 0x6852, - 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1a91, 0x0d7e, - 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1a90, 0x6b08, 0x6a0c, - 0x6d00, 0x6c04, 0x0078, 0x1a90, 0x6b10, 0x6a14, 0x6d00, 0x6c04, - 0x6f08, 0x6e0c, 0x0078, 0x1a90, 0x0d7f, 0x0d7e, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1a8d, 0x0d7f, 0x1078, 0x1ba7, - 0x00c0, 0x1a37, 0xa00e, 0x0078, 0x1aac, 0x0d7f, 0x1078, 0x1288, - 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, - 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, - 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, - 0x1ba7, 0x0078, 0x1aac, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, - 0x067f, 0x077f, 0x007c, 0x1078, 0x1288, 0x1078, 0x1288, 0x127e, - 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x2079, 0x0020, 0x2071, 0x720b, 0x2b68, 0x6818, 0x2060, 0x7904, - 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1ab5, 0x7000, 0x0079, - 0x1ad1, 0x1b78, 0x1ad5, 0x1b45, 0x1b76, 0x8001, 0x7002, 0xd19c, - 0x00c0, 0x1ae9, 0x8aff, 0x0040, 0x1b08, 0x2009, 0x0001, 0x1078, - 0x1a31, 0x0040, 0x1b78, 0x2009, 0x0001, 0x1078, 0x1a31, 0x0078, - 0x1b78, 0x7803, 0x0004, 0xd194, 0x0040, 0x1af9, 0x6850, 0xc0fc, - 0x6852, 0x8aff, 0x00c0, 0x1afe, 0x684c, 0xc0f5, 0x684e, 0x0078, - 0x1afe, 0x1078, 0x1bc0, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, - 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, 0x1b78, - 0x711c, 0x81ff, 0x0040, 0x1b1e, 0x7918, 0x7922, 0x7827, 0x0000, - 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, 0x700e, - 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1b78, 0x0f7e, 0x027e, - 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, 0xa284, - 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, 0x1b2c, - 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, 0x78c6, - 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, - 0x0008, 0x7003, 0x0000, 0x0078, 0x1b78, 0x8001, 0x7002, 0xd194, - 0x0040, 0x1b5a, 0x7804, 0xd0fc, 0x00c0, 0x1ac7, 0xd19c, 0x00c0, - 0x1b74, 0x8aff, 0x0040, 0x1b78, 0x2009, 0x0001, 0x1078, 0x1a31, - 0x0078, 0x1b78, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1bc0, - 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1b6d, 0x6808, - 0xa31a, 0x680c, 0xa213, 0x0078, 0x1b71, 0x6810, 0xa31a, 0x6814, - 0xa213, 0x0d7f, 0x0078, 0x1af9, 0x0078, 0x1af9, 0x1078, 0x1288, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, - 0x0f7e, 0x0e7e, 0x2071, 0x720b, 0x7000, 0xa086, 0x0000, 0x0040, - 0x1ba4, 0x2079, 0x0020, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x0040, - 0x1b8b, 0x1078, 0x1ab7, 0x7000, 0xa086, 0x0000, 0x00c0, 0x1b8b, - 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1b9a, 0x20e1, 0x9040, - 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, 0x8840, - 0x2804, 0xa005, 0x00c0, 0x1bbb, 0x6004, 0xa005, 0x0040, 0x1bbd, - 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1beb, 0x2044, - 0x88ff, 0x1040, 0x1288, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, - 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0, 0x1bda, 0x2c00, 0xad06, - 0x0040, 0x1bcf, 0x6000, 0xa005, 0x00c0, 0x1bcf, 0x2d00, 0x2060, - 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, 0x1bfb, 0x2044, 0x88ff, - 0x1040, 0x1288, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, - 0x0021, 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, - 0x0027, 0x0000, 0x0000, 0x0000, 0x1be0, 0x1bdc, 0x0000, 0x0000, - 0x1bea, 0x0000, 0x1be0, 0x0000, 0x1be7, 0x1be4, 0x0000, 0x0000, - 0x0000, 0x1bea, 0x1be7, 0x0000, 0x1be2, 0x1be2, 0x0000, 0x0000, - 0x1bea, 0x0000, 0x1be2, 0x0000, 0x1be8, 0x1be8, 0x0000, 0x0000, - 0x0000, 0x1bea, 0x1be8, 0x0a7e, 0x097e, 0x087e, 0x6858, 0xa055, - 0x0040, 0x1ca8, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1beb, - 0xa986, 0x0007, 0x0040, 0x1c24, 0xa986, 0x000e, 0x0040, 0x1c24, - 0xa986, 0x000f, 0x00c0, 0x1c28, 0x605c, 0xa422, 0x6060, 0xa31a, - 0x2804, 0xa045, 0x00c0, 0x1c36, 0x0050, 0x1c30, 0x0078, 0x1ca8, - 0x6004, 0xa065, 0x0040, 0x1ca8, 0x0078, 0x1c13, 0x2804, 0xa005, - 0x0040, 0x1c54, 0xac68, 0xd99c, 0x00c0, 0x1c44, 0x6808, 0xa422, - 0x680c, 0xa31b, 0x0078, 0x1c48, 0x6810, 0xa422, 0x6814, 0xa31b, - 0x0048, 0x1c73, 0x2300, 0xa405, 0x0040, 0x1c5a, 0x8a51, 0x0040, - 0x1ca8, 0x8840, 0x0078, 0x1c36, 0x6004, 0xa065, 0x0040, 0x1ca8, - 0x0078, 0x1c13, 0x8a51, 0x0040, 0x1ca8, 0x8840, 0x2804, 0xa005, - 0x00c0, 0x1c6d, 0x6004, 0xa065, 0x0040, 0x1ca8, 0x6034, 0xa0cc, - 0x000f, 0xa9c0, 0x1beb, 0x2804, 0x2040, 0x2b68, 0x6850, 0xc0fc, - 0x6852, 0x0078, 0x1ca0, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, - 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, 0x1c8e, - 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, 0x1288, - 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x1c9a, 0x6910, 0x2400, - 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1288, 0x6800, 0xa420, - 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, 0x6852, - 0x2c00, 0x681a, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1cad, - 0x087f, 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, - 0x2004, 0xa084, 0x0007, 0x0079, 0x1cb5, 0x1cbd, 0x1cbe, 0x1cc1, - 0x1cc4, 0x1cc9, 0x1ccc, 0x1cd1, 0x1cd6, 0x007c, 0x1078, 0x1ab7, - 0x007c, 0x1078, 0x1737, 0x007c, 0x1078, 0x1737, 0x1078, 0x1ab7, - 0x007c, 0x1078, 0x1411, 0x007c, 0x1078, 0x1ab7, 0x1078, 0x1411, - 0x007c, 0x1078, 0x1737, 0x1078, 0x1411, 0x007c, 0x1078, 0x1737, - 0x1078, 0x1ab7, 0x1078, 0x1411, 0x007c, 0x127e, 0x2091, 0x2300, - 0x2079, 0x0200, 0x2071, 0x7480, 0x2069, 0x7000, 0x2009, 0x0004, - 0x7912, 0x7817, 0x0004, 0x1078, 0x1fb7, 0x781b, 0x0002, 0x20e1, - 0x8700, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, - 0x0007, 0x0079, 0x1cfb, 0x1d1f, 0x1d03, 0x1d07, 0x1d0b, 0x1d11, - 0x1d15, 0x1d19, 0x1d1d, 0x1078, 0x3f46, 0x0078, 0x1d1f, 0x1078, - 0x3f75, 0x0078, 0x1d1f, 0x1078, 0x3f46, 0x1078, 0x3f75, 0x0078, - 0x1d1f, 0x1078, 0x1d21, 0x0078, 0x1d1f, 0x1078, 0x1d21, 0x0078, - 0x1d1f, 0x1078, 0x1d21, 0x0078, 0x1d1f, 0x1078, 0x1d21, 0x127f, - 0x007c, 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, - 0x1d2b, 0x1078, 0x1288, 0xa184, 0x0030, 0x0040, 0x1d3c, 0x6a00, - 0xa286, 0x0003, 0x00c0, 0x1d36, 0x1078, 0x1288, 0x1078, 0x3247, - 0x20e1, 0x9010, 0x0078, 0x1d48, 0xa184, 0x00c0, 0x0040, 0x1d42, - 0x1078, 0x1288, 0xa184, 0x0300, 0x0040, 0x1d48, 0x20e1, 0x9020, - 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, - 0x2071, 0x7000, 0x7128, 0x2001, 0x71a3, 0x2102, 0x2001, 0x71ab, - 0x2102, 0xa182, 0x0211, 0x00c8, 0x1d61, 0x2009, 0x0008, 0x0078, - 0x1d8b, 0xa182, 0x0259, 0x00c8, 0x1d69, 0x2009, 0x0007, 0x0078, - 0x1d8b, 0xa182, 0x02c1, 0x00c8, 0x1d71, 0x2009, 0x0006, 0x0078, - 0x1d8b, 0xa182, 0x0349, 0x00c8, 0x1d79, 0x2009, 0x0005, 0x0078, - 0x1d8b, 0xa182, 0x0421, 0x00c8, 0x1d81, 0x2009, 0x0004, 0x0078, - 0x1d8b, 0xa182, 0x0581, 0x00c8, 0x1d89, 0x2009, 0x0003, 0x0078, - 0x1d8b, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, 0x0005, - 0x00c8, 0x1d95, 0x7916, 0x0078, 0x1d97, 0x7817, 0x0004, 0x1078, - 0x1fb7, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, - 0x2061, 0x0100, 0x2071, 0x7000, 0x6024, 0x6026, 0x6033, 0x00ef, - 0x60e7, 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, - 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x00af, - 0x600f, 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x702b, - 0x2003, 0x0000, 0x2001, 0x702a, 0x2003, 0x0001, 0x007c, 0x127e, - 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, - 0x00c0, 0x1dd6, 0xa184, 0x0007, 0x0079, 0x1ddc, 0xa195, 0x0004, - 0xa284, 0x0007, 0x0079, 0x1ddc, 0x1e08, 0x1de4, 0x1de8, 0x1dec, - 0x1df2, 0x1df6, 0x1dfc, 0x1e02, 0x1078, 0x4423, 0x0078, 0x1e08, - 0x1078, 0x4512, 0x0078, 0x1e08, 0x1078, 0x4512, 0x1078, 0x4423, - 0x0078, 0x1e08, 0x1078, 0x1e0d, 0x0078, 0x1e08, 0x1078, 0x4423, - 0x1078, 0x1e0d, 0x0078, 0x1e08, 0x1078, 0x4512, 0x1078, 0x1e0d, - 0x0078, 0x1e08, 0x1078, 0x4512, 0x1078, 0x4423, 0x1078, 0x1e0d, - 0x027f, 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1ebd, - 0x017e, 0x047e, 0x0c7e, 0x644c, 0x74b2, 0xa48c, 0xff00, 0xa196, - 0xff00, 0x0040, 0x1e3c, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, - 0x0040, 0x1e3c, 0x7130, 0xd18c, 0x00c0, 0x1e3c, 0x2011, 0x7052, - 0x2214, 0xd2ec, 0x0040, 0x1e30, 0xc18d, 0x7132, 0x0078, 0x1e3c, - 0x6240, 0xa294, 0x0010, 0x0040, 0x1e7a, 0x6248, 0xa294, 0xff00, - 0xa296, 0xff00, 0x00c0, 0x1e7a, 0x037e, 0x73b0, 0x2011, 0x8013, - 0x1078, 0x2a18, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x7052, - 0x220c, 0xd1a4, 0x0040, 0x1e62, 0x017e, 0x2009, 0x0001, 0x2011, - 0x0100, 0x1078, 0x43f1, 0x2019, 0x000e, 0x1078, 0x6e67, 0xa484, - 0x00ff, 0x1078, 0x1fe4, 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, - 0x6ecf, 0x017f, 0xd1ac, 0x00c0, 0x1e6b, 0x2019, 0x0004, 0x1078, - 0x2186, 0x0078, 0x1e7a, 0x157e, 0x20a9, 0x007e, 0x2009, 0x0000, - 0x1078, 0x34fa, 0x00c0, 0x1e76, 0x1078, 0x32ed, 0x8108, 0x00f0, - 0x1e70, 0x157f, 0x0c7f, 0x047f, 0x6043, 0x0000, 0x2009, 0x00f7, - 0x1078, 0x32b0, 0x0f7e, 0x2079, 0x71c9, 0x783c, 0xa086, 0x0000, - 0x0040, 0x1e92, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, - 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x52b3, 0x2011, - 0x0002, 0x1078, 0x52bd, 0x1078, 0x51c9, 0x1078, 0x4327, 0x037e, - 0x2019, 0x0000, 0x1078, 0x525b, 0x037f, 0x60e3, 0x0000, 0x017f, - 0x2001, 0x7000, 0x2014, 0xa296, 0x0004, 0x00c0, 0x1eb5, 0xd19c, - 0x00c0, 0x1eb5, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, - 0x701e, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x1f5e, - 0x0f7e, 0x2079, 0x71c9, 0x783c, 0xa086, 0x0001, 0x00c0, 0x1ee1, - 0x017e, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, - 0x1000, 0x7803, 0x0000, 0x2079, 0x71b6, 0x7807, 0x0000, 0x7833, - 0x0000, 0x1078, 0x49b7, 0x1078, 0x4a67, 0x017f, 0x0f7f, 0x0078, - 0x1f5e, 0x0f7f, 0x017e, 0x6220, 0xd2b4, 0x0040, 0x1f16, 0x1078, - 0x4327, 0x1078, 0x50b0, 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, - 0x6804, 0xa084, 0x4000, 0x0040, 0x1ef9, 0x6803, 0x1000, 0x6803, - 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x71b6, 0x6028, 0xa09a, 0x0002, - 0x00c8, 0x1f09, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x50a2, 0x0078, - 0x1f5d, 0x2019, 0x71bf, 0x2304, 0xa065, 0x0040, 0x1f13, 0x2009, - 0x0027, 0x1078, 0x571c, 0x0c7f, 0x0078, 0x1f5d, 0xd2bc, 0x0040, - 0x1f5d, 0x1078, 0x4335, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, - 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1f2b, 0x6803, - 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x71b6, 0x6044, - 0xa09a, 0x0002, 0x00c8, 0x1f4c, 0x8000, 0x6046, 0x603c, 0x0c7f, - 0xa005, 0x0040, 0x1f5d, 0x1078, 0x432c, 0xa080, 0x0007, 0x2004, - 0xa086, 0x0006, 0x00c0, 0x1f48, 0x6017, 0x0012, 0x0078, 0x1f5d, - 0x6017, 0x0016, 0x0078, 0x1f5d, 0x037e, 0x2019, 0x0001, 0x1078, - 0x525b, 0x037f, 0x2019, 0x71c5, 0x2304, 0xa065, 0x0040, 0x1f5c, - 0x2009, 0x004f, 0x1078, 0x571c, 0x0c7f, 0x017f, 0xd19c, 0x0040, - 0x1f86, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, - 0x52b3, 0x2011, 0x0002, 0x1078, 0x52bd, 0x1078, 0x51c9, 0x1078, - 0x4327, 0x037e, 0x2019, 0x0000, 0x1078, 0x525b, 0x037f, 0x60e3, - 0x0000, 0x1078, 0x6f3e, 0x1078, 0x6f5c, 0x2001, 0x7000, 0x2003, - 0x0004, 0x6027, 0x0008, 0x1078, 0x117d, 0x017f, 0xa18c, 0xffd0, - 0x6126, 0x007c, 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x7000, 0x71a8, 0x70aa, 0xa116, 0x0040, - 0x1fb0, 0x81ff, 0x0040, 0x1fa2, 0x2011, 0x8011, 0x1078, 0x2a18, - 0x0078, 0x1fb0, 0x2011, 0x8012, 0x1078, 0x2a18, 0x037e, 0x0c7e, - 0x2061, 0x0100, 0x2019, 0x0028, 0x1078, 0x2186, 0x0c7f, 0x037f, - 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, - 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x1fd2, 0x2204, - 0x60f2, 0xa192, 0x0005, 0x00c8, 0x1fc9, 0xa190, 0x1fdb, 0x0078, - 0x1fcb, 0x2011, 0x1fdf, 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, - 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, - 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, - 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0xa080, 0x2207, 0x200c, 0xa18c, - 0xff00, 0x810f, 0x007c, 0xa080, 0x2207, 0x200c, 0xa18c, 0x00ff, - 0x007c, 0x2011, 0x2015, 0x2019, 0x201f, 0x2025, 0x202b, 0x2031, - 0x2039, 0x2041, 0x2047, 0x204d, 0x2055, 0x205d, 0x2065, 0x206d, - 0x2077, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, - 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, 0x2081, - 0x2081, 0x107e, 0x007e, 0x0078, 0x209a, 0x107e, 0x007e, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1dc7, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x0078, - 0x209a, 0x107e, 0x007e, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, 0x007e, 0x1078, - 0x1dc7, 0x1078, 0x1cae, 0x1078, 0x1cf3, 0x0078, 0x209a, 0x107e, - 0x007e, 0x1078, 0x1dc7, 0x1078, 0x1cae, 0x1078, 0x1cf3, 0x0078, - 0x209a, 0x0005, 0x0078, 0x2081, 0xb084, 0x003c, 0x8004, 0x8004, - 0x0079, 0x208a, 0x209a, 0x2017, 0x201b, 0x2021, 0x2027, 0x202d, - 0x2033, 0x203b, 0x2043, 0x2049, 0x204f, 0x2057, 0x205f, 0x2067, - 0x206f, 0x2079, 0x0008, 0x2084, 0x007f, 0x107f, 0x2091, 0x8001, - 0x007c, 0x0c7e, 0x027e, 0x2001, 0x010c, 0x203c, 0x7274, 0x82ff, - 0x0040, 0x20f0, 0x037e, 0x7384, 0xa38e, 0xffff, 0x00c0, 0x20b2, - 0x2019, 0x0001, 0x8314, 0xa2e0, 0x75c0, 0x2c04, 0xa38c, 0x0001, - 0x0040, 0x20bf, 0xa084, 0xff00, 0x8007, 0x0078, 0x20c1, 0xa084, - 0x00ff, 0xa70e, 0x0040, 0x20e5, 0xa08e, 0x0000, 0x0040, 0x20e5, - 0xa08e, 0x00ff, 0x0040, 0x20eb, 0x1078, 0x1fe4, 0x1078, 0x34bf, - 0x00c0, 0x20e8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, - 0x20df, 0x1078, 0x2138, 0x0040, 0x20e8, 0x0078, 0x20e5, 0x1078, - 0x21d3, 0x1078, 0x215f, 0x0040, 0x20e8, 0x8318, 0x0078, 0x20b2, - 0x7386, 0x0078, 0x20ed, 0x7087, 0xffff, 0x037f, 0x0078, 0x2135, - 0xa780, 0x2207, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x20a9, 0x007e, - 0x2009, 0x0000, 0x7084, 0xa096, 0xffff, 0x0040, 0x210c, 0xa092, - 0x007e, 0x0048, 0x2107, 0x7087, 0xffff, 0x0078, 0x2132, 0x2008, - 0x2011, 0x007e, 0xa202, 0x20a8, 0x2700, 0x157e, 0x017e, 0xa106, - 0x0040, 0x2129, 0x1078, 0x34bf, 0x00c0, 0x2132, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2123, 0x1078, 0x2138, 0x0040, - 0x2132, 0x0078, 0x2129, 0x1078, 0x21d3, 0x1078, 0x215f, 0x0040, - 0x2132, 0x017f, 0x8108, 0x157f, 0x00f0, 0x210c, 0x7087, 0xffff, - 0x0078, 0x2135, 0x017f, 0x157f, 0x7186, 0x027f, 0x0c7f, 0x007c, - 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x568f, 0x0040, - 0x215a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, - 0x348e, 0x2001, 0x0000, 0x1078, 0x34a2, 0x127e, 0x2091, 0x8000, - 0x7080, 0x8000, 0x7082, 0x127f, 0x2009, 0x0004, 0x1078, 0x571c, - 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x017e, - 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x568f, 0x0040, 0x2181, - 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x348e, - 0x2001, 0x0002, 0x1078, 0x34a2, 0x127e, 0x2091, 0x8000, 0x7080, - 0x8000, 0x7082, 0x127f, 0x2009, 0x0002, 0x1078, 0x571c, 0xa085, - 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0e7e, 0x0c7e, - 0x067e, 0x037e, 0x027e, 0x1078, 0x46a6, 0x1078, 0x4656, 0x1078, - 0x5b04, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34fa, - 0x00c0, 0x219e, 0x1078, 0x36e4, 0x1078, 0x32ed, 0x017f, 0x8108, - 0x00f0, 0x2195, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, - 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, - 0x027e, 0x2019, 0x0029, 0x1078, 0x469f, 0x1078, 0x45e2, 0x2c08, - 0x1078, 0x6d09, 0x017f, 0x2e60, 0x1078, 0x36e4, 0x1078, 0x32ed, - 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e, - 0x2071, 0x7000, 0x7080, 0xa005, 0x0040, 0x21d0, 0x8001, 0x7082, - 0x007f, 0x0e7f, 0x007c, 0x6000, 0xc08c, 0x6002, 0x007c, 0x0e7e, - 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x81ff, 0x00c0, 0x21e4, - 0x20a9, 0x0001, 0x0078, 0x21e8, 0x20a9, 0x007e, 0x2011, 0x0000, - 0x027e, 0xa2e0, 0x7120, 0x2c64, 0x8cff, 0x0040, 0x21fa, 0x2019, - 0x0029, 0x1078, 0x469f, 0x1078, 0x45e2, 0x2c08, 0x1078, 0x6d09, - 0x1078, 0x36e4, 0x027f, 0x8210, 0x00f0, 0x21e8, 0x027e, 0x027f, - 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x7eef, - 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, - 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, - 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, - 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, - 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, - 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, - 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, - 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, - 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, - 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, - 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, - 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, - 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, - 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, - 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, - 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, - 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, - 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, - 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, - 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, - 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, - 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, - 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, - 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, - 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, - 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x2071, - 0x706d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, - 0x7033, 0x707d, 0x7037, 0x707d, 0x7007, 0x0001, 0x2061, 0x70bd, - 0x6003, 0x0002, 0x007c, 0x0090, 0x231e, 0x0068, 0x231e, 0x2071, - 0x706d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x231e, 0x2a60, 0x7820, - 0xa08e, 0x0069, 0x00c0, 0x2405, 0x0079, 0x23a2, 0x007c, 0x2071, - 0x706d, 0x7004, 0x0079, 0x2324, 0x2328, 0x2329, 0x2333, 0x2345, - 0x007c, 0x0090, 0x2332, 0x0068, 0x2332, 0x2b78, 0x7818, 0xd084, - 0x0040, 0x2351, 0x007c, 0x2b78, 0x2061, 0x70bd, 0x6008, 0xa08e, - 0x0100, 0x0040, 0x2340, 0xa086, 0x0200, 0x0040, 0x23fd, 0x007c, - 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068, 0x6834, - 0xa086, 0x0103, 0x0040, 0x234d, 0x007c, 0x2a60, 0x2b78, 0x7018, - 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x235a, 0x61a8, - 0x0079, 0x2362, 0x2100, 0xa08a, 0x0036, 0x00c8, 0x23f9, 0x61a8, - 0x0079, 0x23a2, 0x23db, 0x240d, 0x2415, 0x2419, 0x2421, 0x2427, - 0x242b, 0x2434, 0x2438, 0x2440, 0x2444, 0x23f9, 0x23f9, 0x23f9, - 0x2448, 0x23f9, 0x2458, 0x246f, 0x2486, 0x2502, 0x2507, 0x2534, - 0x258e, 0x259f, 0x25bd, 0x25f0, 0x25fa, 0x2607, 0x261a, 0x2634, - 0x263d, 0x267a, 0x2680, 0x23f9, 0x268b, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x268f, 0x2695, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x269d, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x26aa, 0x26b0, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x2440, 0x2444, 0x23f9, 0x23f9, 0x26c2, 0x23f9, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x23f9, - 0x23f9, 0x23f9, 0x270f, 0x27dc, 0x27f0, 0x27f7, 0x285a, 0x28ab, - 0x28b6, 0x28f5, 0x2904, 0x2913, 0x2916, 0x26c6, 0x293f, 0x2986, - 0x23f9, 0x23f9, 0x23f9, 0x23f9, 0x2a9f, 0x2aad, 0x2aba, 0x2af4, - 0x713c, 0x0078, 0x23db, 0x2021, 0x4000, 0x1078, 0x29f2, 0x127e, - 0x2091, 0x8000, 0x0068, 0x23e8, 0x7818, 0xd084, 0x0040, 0x23eb, - 0x127f, 0x0078, 0x23df, 0x781b, 0x0001, 0x7c22, 0x7926, 0x7a2a, - 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x127f, - 0x007c, 0x2021, 0x4001, 0x0078, 0x23dd, 0x2021, 0x4002, 0x0078, - 0x23dd, 0x2021, 0x4003, 0x0078, 0x23dd, 0x2021, 0x4005, 0x0078, - 0x23dd, 0x2021, 0x4006, 0x0078, 0x23dd, 0xa02e, 0x2520, 0x7b28, - 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2a01, 0x7823, 0x0004, 0x7824, - 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, - 0x2a05, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078, 0x23db, 0x7924, - 0x2114, 0x0078, 0x23db, 0x2099, 0x0009, 0x20a1, 0x0009, 0x20a9, - 0x0007, 0x53a3, 0x0078, 0x23db, 0x7824, 0x2060, 0x0078, 0x244a, - 0x2009, 0x0001, 0x2011, 0x000f, 0x2019, 0x0007, 0x0078, 0x23db, - 0x7d38, 0x7c3c, 0x0078, 0x240f, 0x7d38, 0x7c3c, 0x0078, 0x241b, - 0x2061, 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, - 0x00c0, 0x244c, 0x2010, 0xa005, 0x0040, 0x23db, 0x0078, 0x2401, - 0x2061, 0x7051, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2409, 0x8019, - 0x0040, 0x2409, 0x604a, 0x6142, 0x782c, 0x6052, 0x7828, 0x6056, - 0xa006, 0x605a, 0x605e, 0x1078, 0x3a37, 0x0078, 0x23db, 0x2061, - 0x7051, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2409, 0x8019, 0x0040, - 0x2409, 0x604e, 0x6146, 0x782c, 0x6062, 0x7828, 0x6066, 0xa006, - 0x606a, 0x606e, 0x1078, 0x380d, 0x0078, 0x23db, 0xa02e, 0x2520, - 0x81ff, 0x00c0, 0x2405, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, - 0x20a1, 0x7074, 0x41a1, 0x1078, 0x29b7, 0x0040, 0x2405, 0x2009, - 0x0020, 0x1078, 0x2a01, 0x701b, 0x249e, 0x007c, 0x6834, 0x2008, - 0xa084, 0x00ff, 0xa096, 0x0011, 0x0040, 0x24aa, 0xa096, 0x0019, - 0x00c0, 0x2405, 0x810f, 0xa18c, 0x00ff, 0x0040, 0x2405, 0x710e, - 0x700c, 0x8001, 0x0040, 0x24db, 0x700e, 0x1078, 0x29b7, 0x0040, - 0x2405, 0x2009, 0x0020, 0x2061, 0x70bd, 0x6224, 0x6328, 0x642c, - 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, - 0x0000, 0x1078, 0x2a01, 0x701b, 0x24ce, 0x007c, 0x6834, 0xa084, - 0x00ff, 0xa096, 0x0002, 0x0040, 0x24d9, 0xa096, 0x000a, 0x00c0, - 0x2405, 0x0078, 0x24b0, 0x7010, 0x2068, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x33f2, 0x00c0, 0x24e9, 0x7007, 0x0003, 0x701b, 0x24eb, - 0x007c, 0x1078, 0x38d0, 0x127e, 0x2091, 0x8000, 0x20a9, 0x0005, - 0x2099, 0x7074, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, - 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020, 0x127f, - 0x0078, 0x2a05, 0x6190, 0x7824, 0x6092, 0x0078, 0x23db, 0x2091, - 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020, 0x782f, - 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836, 0x2061, - 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205, 0x783a, - 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091, 0x5000, - 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0xa08a, 0x0003, - 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0, 0x2405, 0x7924, - 0x810f, 0xa18c, 0x00ff, 0x1078, 0x34fa, 0x00c0, 0x2409, 0x7e38, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x2548, 0x0078, 0x2409, - 0x7c28, 0x7d2c, 0x1078, 0x36ab, 0xd28c, 0x00c0, 0x2553, 0x1078, - 0x363f, 0x0078, 0x2555, 0x1078, 0x3679, 0x00c0, 0x257f, 0x2061, - 0x7600, 0x127e, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000, 0x0040, - 0x256d, 0x6010, 0xa06d, 0x0040, 0x256d, 0x683c, 0xa406, 0x00c0, - 0x256d, 0x6840, 0xa506, 0x0040, 0x2578, 0x127f, 0xace0, 0x0008, - 0x2001, 0x7015, 0x2004, 0xac02, 0x00c8, 0x2405, 0x0078, 0x2559, - 0x1078, 0x6139, 0x127f, 0x0040, 0x2405, 0x0078, 0x23db, 0xa00e, - 0x2001, 0x0005, 0x1078, 0x38d0, 0x127e, 0x2091, 0x8000, 0x1078, - 0x64fd, 0x1078, 0x3840, 0x127f, 0x0078, 0x23db, 0x81ff, 0x00c0, - 0x2405, 0x1078, 0x29cf, 0x0040, 0x2409, 0x1078, 0x3583, 0x0040, - 0x2405, 0x1078, 0x36b8, 0x0040, 0x2405, 0x0078, 0x23db, 0x81ff, - 0x00c0, 0x2405, 0x1078, 0x29e1, 0x0040, 0x2409, 0x1078, 0x371f, - 0x0040, 0x2405, 0x2019, 0x0005, 0x1078, 0x36d9, 0x0040, 0x2405, - 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2409, 0x8003, 0x800b, 0x810b, - 0xa108, 0x1078, 0x42b7, 0x0078, 0x23db, 0x127e, 0x2091, 0x8000, - 0x81ff, 0x00c0, 0x25ea, 0x2029, 0x007d, 0x644c, 0x2400, 0xa506, - 0x0040, 0x25e4, 0x2508, 0x1078, 0x34fa, 0x00c0, 0x25e4, 0x1078, - 0x371f, 0x0040, 0x2405, 0x2019, 0x0004, 0x1078, 0x36d9, 0x0040, - 0x25ea, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x25ed, 0x8003, 0x800b, - 0x810b, 0xa108, 0x1078, 0x42b7, 0x8529, 0x00c8, 0x25c6, 0x127f, - 0x0078, 0x23db, 0x127f, 0x0078, 0x2405, 0x127f, 0x0078, 0x2409, - 0x1078, 0x29cf, 0x0040, 0x2409, 0x1078, 0x35f0, 0x1078, 0x36ab, - 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29cf, 0x0040, - 0x2409, 0x1078, 0x35df, 0x1078, 0x36ab, 0x0078, 0x23db, 0x81ff, - 0x00c0, 0x2405, 0x1078, 0x29cf, 0x0040, 0x2409, 0x1078, 0x367c, - 0x0040, 0x2405, 0x1078, 0x343b, 0x1078, 0x3638, 0x1078, 0x36ab, - 0x0078, 0x23db, 0x1078, 0x29cf, 0x0040, 0x2409, 0x1078, 0x3583, - 0x0040, 0x2405, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078, 0x36e4, - 0x0c7f, 0x1078, 0x469f, 0x1078, 0x45e2, 0x2c08, 0x1078, 0x6d09, - 0x1078, 0x36ab, 0x0078, 0x23db, 0x1078, 0x29cf, 0x0040, 0x2409, - 0x1078, 0x36ab, 0x2208, 0x0078, 0x23db, 0x157e, 0x0d7e, 0x0e7e, - 0x2069, 0x70ff, 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2649, 0x2009, - 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007d, - 0x2069, 0x7120, 0x2d04, 0xa075, 0x0040, 0x265e, 0x704c, 0x1078, - 0x2668, 0xa210, 0x7080, 0x1078, 0x2668, 0xa318, 0x8d68, 0x00f0, - 0x2652, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x23db, - 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x2677, 0x2001, 0x0000, 0x8000, - 0x2f0c, 0x81ff, 0x0040, 0x2677, 0x2178, 0x0078, 0x266f, 0x017f, - 0x0f7f, 0x007c, 0x2069, 0x70ff, 0x6910, 0x6294, 0x0078, 0x23db, - 0x81ff, 0x00c0, 0x2405, 0x614c, 0xa190, 0x2207, 0x2214, 0xa294, - 0x00ff, 0x0078, 0x23db, 0x613c, 0x6240, 0x0078, 0x23db, 0x1078, - 0x29e1, 0x0040, 0x2409, 0x0078, 0x23db, 0x1078, 0x29e1, 0x0040, - 0x2409, 0x6244, 0x6338, 0x0078, 0x23db, 0x613c, 0x6240, 0x7824, - 0x603e, 0x7b28, 0x6342, 0x2069, 0x7051, 0x831f, 0xa305, 0x6816, - 0x0078, 0x23db, 0x1078, 0x29e1, 0x0040, 0x2409, 0x0078, 0x23db, - 0x1078, 0x29e1, 0x0040, 0x2409, 0x7828, 0xa00d, 0x0040, 0x2409, - 0x782c, 0xa005, 0x0040, 0x2409, 0x6244, 0x6146, 0x6338, 0x603a, - 0x0078, 0x23db, 0x7d38, 0x7c3c, 0x0078, 0x2488, 0x7824, 0xa09c, - 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2405, 0x624c, 0xa084, 0xff00, - 0x8007, 0xa206, 0x00c0, 0x26de, 0x2001, 0x7040, 0x2009, 0x000c, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a05, 0x81ff, 0x00c0, - 0x2405, 0x1078, 0x29e1, 0x0040, 0x2409, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x0006, 0x00c0, 0x2405, 0x0c7e, 0x1078, 0x29b7, 0x0c7f, - 0x0040, 0x2405, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, - 0x6413, 0x0040, 0x2405, 0x7007, 0x0003, 0x701b, 0x2700, 0x007c, - 0x6830, 0xa086, 0x0100, 0x0040, 0x2405, 0xad80, 0x000e, 0x2009, - 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a05, 0x1078, - 0x29b7, 0x0040, 0x2405, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x1078, 0x2a01, 0x701b, 0x271e, 0x007c, 0xade8, 0x000d, - 0x6800, 0xa005, 0x0040, 0x2409, 0x6804, 0xd0ac, 0x0040, 0x272b, - 0xd0a4, 0x0040, 0x2409, 0xd094, 0x0040, 0x2736, 0x0c7e, 0x2061, - 0x0100, 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, - 0x2741, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, - 0x0c7f, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x2756, - 0xd084, 0x0040, 0x2756, 0x6a28, 0xa28a, 0x007e, 0x00c8, 0x2409, - 0xa288, 0x2207, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, - 0x275f, 0x6828, 0xa08a, 0x007e, 0x00c8, 0x2409, 0x604e, 0x6808, - 0xa08a, 0x0100, 0x0048, 0x2409, 0xa08a, 0x0841, 0x00c8, 0x2409, - 0xa084, 0x0007, 0x00c0, 0x2409, 0x680c, 0xa005, 0x0040, 0x2409, - 0x6810, 0xa005, 0x0040, 0x2409, 0x6848, 0x6940, 0xa10a, 0x00c8, - 0x2409, 0x8001, 0x0040, 0x2409, 0x684c, 0x6944, 0xa10a, 0x00c8, - 0x2409, 0x8001, 0x0040, 0x2409, 0x20a9, 0x001c, 0x2d98, 0x2069, - 0x7051, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, - 0xa084, 0x00ff, 0x6042, 0x1078, 0x3a37, 0x1078, 0x380d, 0x6000, - 0xa086, 0x0000, 0x00c0, 0x27da, 0x6808, 0x602a, 0x1078, 0x1d4d, - 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, - 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x27ba, - 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, - 0x0078, 0x27bc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, - 0x1078, 0x4343, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, - 0x0000, 0x0c7f, 0x60ac, 0xa005, 0x0040, 0x27d6, 0x6003, 0x0001, - 0x2091, 0x301d, 0x1078, 0x3247, 0x0078, 0x27da, 0x6003, 0x0004, - 0x2091, 0x301d, 0x0078, 0x23db, 0x6000, 0xa086, 0x0000, 0x0040, - 0x2405, 0x2069, 0x7051, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, - 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2a05, - 0x81ff, 0x00c0, 0x2405, 0x1078, 0x3247, 0x0078, 0x23db, 0x81ff, - 0x00c0, 0x2405, 0x6174, 0x81ff, 0x0040, 0x2811, 0x703f, 0x0000, - 0x2001, 0x75c0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x127e, 0x2091, 0x8000, 0x1078, 0x2a05, 0x701b, 0x23d8, 0x127f, - 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x75c0, 0x20a9, 0x0040, - 0x20a1, 0x75c0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, 0x2207, - 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, - 0xa506, 0x0040, 0x2843, 0x1078, 0x34fa, 0x00c0, 0x2843, 0x6014, - 0x821c, 0x0048, 0x283b, 0xa398, 0x75c0, 0xa085, 0xff00, 0x8007, - 0x201a, 0x0078, 0x2842, 0xa398, 0x75c0, 0x2324, 0xa4a4, 0xff00, - 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x007f, 0x00c8, 0x284a, - 0x0078, 0x2827, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, - 0x20a9, 0x0040, 0x20a1, 0x75c0, 0x2099, 0x75c0, 0x1078, 0x3290, - 0x0078, 0x2800, 0x1078, 0x29e1, 0x0040, 0x2409, 0x0c7e, 0x1078, - 0x29b7, 0x0c7f, 0x0040, 0x2405, 0x2001, 0x7052, 0x2004, 0xd0b4, - 0x0040, 0x2887, 0x6000, 0xd08c, 0x00c0, 0x2887, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2887, 0x6837, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x1078, 0x642f, 0x0040, 0x2405, 0x7007, 0x0003, - 0x701b, 0x2883, 0x007c, 0x1078, 0x29e1, 0x0040, 0x2409, 0x20a9, - 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, - 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x3290, - 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, - 0x1078, 0x3290, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x0078, 0x2a05, 0x81ff, 0x00c0, 0x2405, 0x1078, 0x29cf, - 0x0040, 0x2409, 0x1078, 0x36c3, 0x0078, 0x23db, 0x81ff, 0x00c0, - 0x2405, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2409, 0x1078, 0x29e1, - 0x0040, 0x2409, 0x1078, 0x371f, 0x0040, 0x2405, 0x2019, 0x0004, - 0x1078, 0x36d9, 0x7924, 0x810f, 0x7a28, 0x1078, 0x28d1, 0x0078, - 0x23db, 0xa186, 0x00ff, 0x0040, 0x28d9, 0x1078, 0x28e9, 0x0078, - 0x28e8, 0x2029, 0x007d, 0x2061, 0x7000, 0x644c, 0x2400, 0xa506, - 0x0040, 0x28e5, 0x2508, 0x1078, 0x28e9, 0x8529, 0x00c8, 0x28de, - 0x007c, 0x1078, 0x34fa, 0x00c0, 0x28f4, 0x2200, 0x8003, 0x800b, - 0x810b, 0xa108, 0x1078, 0x42b7, 0x007c, 0x81ff, 0x00c0, 0x2405, - 0x1078, 0x29cf, 0x0040, 0x2409, 0x1078, 0x3583, 0x0040, 0x2405, - 0x1078, 0x36ce, 0x0078, 0x23db, 0x81ff, 0x00c0, 0x2405, 0x1078, - 0x29cf, 0x0040, 0x2409, 0x1078, 0x3583, 0x0040, 0x2405, 0x1078, - 0x36b8, 0x0078, 0x23db, 0x6100, 0x0078, 0x23db, 0x1078, 0x29e1, - 0x0040, 0x2409, 0x6004, 0xa086, 0x0707, 0x0040, 0x2409, 0x2001, - 0x7000, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2405, 0x0d7e, 0xace8, - 0x000a, 0x7924, 0xd184, 0x0040, 0x292f, 0xace8, 0x0006, 0x680c, + 0x697c, 0x6912, 0x6980, 0x6916, 0x007c, 0x82ff, 0x0040, 0x1518, + 0xa280, 0x0004, 0x0d7e, 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x1514, + 0x1078, 0x1497, 0x10c0, 0x126a, 0x6808, 0x8000, 0x680a, 0x0d7f, + 0x127e, 0x047e, 0x037e, 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, + 0x047f, 0x7000, 0xa005, 0x00c0, 0x152c, 0x7206, 0x2001, 0x1540, + 0x007e, 0x2260, 0x0078, 0x1652, 0x710c, 0x220a, 0x8108, 0x230a, + 0x8108, 0x240a, 0x8108, 0xa182, 0x6e05, 0x0048, 0x1539, 0x2009, + 0x6dea, 0x710e, 0x7000, 0xa005, 0x00c0, 0x1540, 0x1078, 0x163b, + 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e, 0x2091, + 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e, 0x2460, + 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x1594, 0x6808, + 0xa005, 0x0040, 0x15f4, 0x7000, 0xa005, 0x00c0, 0x1561, 0x0078, + 0x158e, 0x700c, 0x7110, 0xa106, 0x00c0, 0x15f8, 0x7004, 0xa406, + 0x00c0, 0x158e, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1577, + 0x047e, 0x1078, 0x170a, 0x047f, 0x2460, 0x0078, 0x1557, 0x2001, + 0x0207, 0x2004, 0xd09c, 0x00c0, 0x156a, 0x7804, 0xa084, 0x6000, + 0x0040, 0x1588, 0xa086, 0x6000, 0x0040, 0x1588, 0x0078, 0x156a, + 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x2009, 0x0048, + 0x1078, 0x544c, 0x0078, 0x15f8, 0x6808, 0xa005, 0x0040, 0x15f4, + 0x7000, 0xa005, 0x00c0, 0x159e, 0x0078, 0x15f4, 0x700c, 0x7110, + 0xa106, 0x00c0, 0x15a7, 0x7004, 0xa406, 0x00c0, 0x15f4, 0x2001, + 0x0005, 0x2004, 0xd08c, 0x0040, 0x15b4, 0x047e, 0x1078, 0x170a, + 0x047f, 0x2460, 0x0078, 0x1594, 0x2001, 0x0207, 0x2004, 0xd09c, + 0x00c0, 0x15a7, 0x7804, 0xa084, 0x6000, 0x0040, 0x15c5, 0xa086, + 0x6000, 0x0040, 0x15c5, 0x0078, 0x15a7, 0x7007, 0x0000, 0xa016, + 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, 0x15e6, 0xa08e, 0x0002, + 0x00c0, 0x15f4, 0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x1b57, + 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, 0x15e2, 0x7308, 0x720c, + 0x0078, 0x15e4, 0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, + 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, + 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048, 0x1078, 0x544c, + 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x6de4, + 0x7000, 0xa086, 0x0000, 0x0040, 0x1638, 0x7004, 0xac06, 0x00c0, + 0x1629, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0, 0x1625, 0x2001, + 0x0207, 0x2004, 0xd09c, 0x00c0, 0x160b, 0x7803, 0x0004, 0x7804, + 0xd0ac, 0x00c0, 0x1617, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, + 0x0003, 0x7007, 0x0000, 0x0078, 0x1629, 0x1078, 0x170a, 0x0078, + 0x1600, 0x157e, 0x20a9, 0x0009, 0x2009, 0x6dea, 0x2104, 0xac06, + 0x00c0, 0x1633, 0x200a, 0xa188, 0x0003, 0x00f0, 0x162e, 0x157f, + 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1643, + 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, + 0x8108, 0x2124, 0x8108, 0xa182, 0x6e05, 0x0048, 0x1651, 0x2009, + 0x6dea, 0x7112, 0x8cff, 0x00c0, 0x1671, 0x7908, 0xd1ec, 0x00c0, + 0x1665, 0x1078, 0x18ac, 0x0040, 0x1665, 0x7803, 0x0009, 0x7904, + 0xd1fc, 0x0040, 0x165f, 0x7803, 0x0006, 0x7007, 0x0000, 0x1078, + 0x18ac, 0x0040, 0x1698, 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, + 0x1698, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x167c, + 0x682c, 0xa306, 0x0040, 0x1680, 0x1078, 0x1ba2, 0x00c0, 0x1655, + 0x684c, 0xd0f4, 0x00c0, 0x1655, 0x6824, 0x2050, 0x6818, 0x2060, + 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011, 0x1078, + 0x1699, 0x0040, 0x1697, 0x2009, 0x0001, 0x1078, 0x1699, 0x2d58, + 0x007c, 0x8aff, 0x0040, 0x1705, 0xa03e, 0x2730, 0x6850, 0xd0fc, + 0x00c0, 0x16b8, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x16a8, + 0x16e7, 0x16c8, 0x16c8, 0x16e7, 0x16e7, 0x16df, 0x16e7, 0x16c8, + 0x16e7, 0x16ce, 0x16ce, 0x16e7, 0x16e7, 0x16e7, 0x16d6, 0x16ce, + 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, + 0x0040, 0x16ea, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x16ea, + 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x16ea, 0x6b10, 0x6a14, + 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x16ea, 0x0d7f, 0x0d7e, + 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x16e7, 0x0d7f, + 0x1078, 0x1b3e, 0x00c0, 0x1699, 0xa00e, 0x0078, 0x1705, 0x0d7f, + 0x1078, 0x126a, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, + 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, + 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, + 0x6a14, 0xa203, 0x6816, 0x1078, 0x1b3e, 0x007c, 0x1078, 0x126a, + 0x1078, 0x126a, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e, 0x2b68, + 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, + 0x1708, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1708, 0x7000, + 0x0079, 0x1722, 0x172a, 0x172c, 0x17f3, 0x184d, 0x1864, 0x172a, + 0x172a, 0x172a, 0x1078, 0x126a, 0x8001, 0x7002, 0xa184, 0x0880, + 0x00c0, 0x1741, 0x8aff, 0x0040, 0x1793, 0x2009, 0x0001, 0x1078, + 0x1699, 0x0040, 0x1876, 0x2009, 0x0001, 0x1078, 0x1699, 0x0078, + 0x1876, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, 0x178c, + 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, + 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x7820, 0x6910, 0xa100, 0x6812, + 0x7824, 0x6914, 0xa101, 0x6816, 0x037f, 0x027f, 0x7830, 0x681e, + 0x7834, 0x6822, 0x1078, 0x1b57, 0x2a00, 0x6826, 0x2c00, 0x681a, + 0x2800, 0x6832, 0x7003, 0x0000, 0x6850, 0xc0fd, 0x6852, 0x6808, + 0x8001, 0x680a, 0x00c0, 0x177e, 0x684c, 0xd0e4, 0x0040, 0x177e, + 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x544c, 0x7808, 0xd0ec, + 0x00c0, 0x1788, 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1876, + 0x1078, 0x163b, 0x0078, 0x1876, 0x057e, 0x7d0c, 0x1078, 0x6b5b, + 0x057f, 0x0078, 0x17ab, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, + 0x00c0, 0x17ab, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, + 0x17a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x544c, 0x1078, + 0x163b, 0x0078, 0x1876, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, + 0xa183, 0x0000, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa188, + 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, + 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x187a, 0x7803, 0x0004, + 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0040, 0x17cc, + 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0070, 0x7004, 0x7007, + 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x544c, 0x1078, 0x18ac, + 0x0040, 0x17a7, 0x7908, 0xd1ec, 0x00c0, 0x17ea, 0x2009, 0x0009, + 0x0078, 0x17ec, 0x2009, 0x0019, 0x7902, 0x7803, 0x0009, 0x7003, + 0x0003, 0x0078, 0x1876, 0x8001, 0x7002, 0xd194, 0x0040, 0x1805, + 0x7804, 0xd0fc, 0x00c0, 0x1712, 0x8aff, 0x0040, 0x1876, 0x2009, + 0x0001, 0x1078, 0x1699, 0x0078, 0x1876, 0xa184, 0x0880, 0x00c0, + 0x1812, 0x8aff, 0x0040, 0x1876, 0x2009, 0x0001, 0x1078, 0x1699, + 0x0078, 0x1876, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, + 0x1846, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1b57, 0x0d7e, + 0x0f7e, 0x2d78, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1836, + 0x6808, 0x2008, 0xa31a, 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, + 0x690c, 0x7814, 0xa101, 0x7816, 0x0078, 0x1842, 0x6810, 0x2008, + 0xa31a, 0x6814, 0xa213, 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, + 0xa101, 0x7816, 0x0f7f, 0x0d7f, 0x0078, 0x174c, 0x057e, 0x7d0c, + 0x1078, 0x6b5b, 0x057f, 0x0078, 0x17ab, 0x7803, 0x0004, 0x7003, + 0x0000, 0x7004, 0xa00d, 0x0040, 0x1860, 0x6808, 0x8001, 0x680a, + 0x00c0, 0x1860, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x544c, + 0x1078, 0x163b, 0x0078, 0x1876, 0x7803, 0x0004, 0x7003, 0x0000, + 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x1860, 0x2068, 0x6808, + 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x1652, 0x017f, 0x007f, + 0x127f, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, 0x7808, + 0xa084, 0xf000, 0xa10d, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, + 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1894, 0x2001, 0x0111, + 0x201c, 0x83ff, 0x0040, 0x1888, 0x20e1, 0x7000, 0x7324, 0x7420, + 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f, + 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202, + 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, 0x7908, 0xa18c, + 0x0fff, 0xa182, 0x0009, 0x0048, 0x18b9, 0xa085, 0x0001, 0x0078, + 0x18cb, 0x2001, 0x020a, 0x81ff, 0x0040, 0x18c4, 0x20e1, 0x6000, + 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, 0x200c, 0x200c, + 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, 0x0e7e, 0x2071, + 0x6e05, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, 0xa280, 0x0004, + 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1950, 0x6934, 0xa184, 0x0007, + 0x0079, 0x18e2, 0x18ea, 0x193b, 0x18ea, 0x18ea, 0x18ea, 0x1920, + 0x18fd, 0x18ec, 0x1078, 0x126a, 0x684c, 0xd0b4, 0x0040, 0x1a52, + 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, + 0x6880, 0x680e, 0x6958, 0x0078, 0x1943, 0x6834, 0xa084, 0x00ff, + 0xa086, 0x001e, 0x00c0, 0x18ea, 0x684c, 0xd0b4, 0x0040, 0x1a52, + 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, + 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, + 0x000f, 0xa080, 0x1b82, 0x2004, 0x6832, 0x6958, 0x0078, 0x194c, + 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1950, 0x684c, 0xd0b4, + 0x0040, 0x1a52, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, + 0x000f, 0xa080, 0x1b82, 0x2004, 0x6832, 0x6958, 0xa006, 0x682e, + 0x682a, 0x0078, 0x194c, 0x684c, 0xd0b4, 0x0040, 0x1706, 0x6958, + 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, + 0xa080, 0x1b82, 0x2004, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, + 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x10c0, + 0x1a56, 0x0e7e, 0x0d7e, 0x2071, 0x6e05, 0x7000, 0xa005, 0x00c0, + 0x19cc, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068, + 0x6818, 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, + 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, + 0x0f7f, 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, + 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, 0x0040, + 0x198e, 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, 0xa108, 0x791a, + 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, 0xa006, + 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x00c0, 0x19a5, + 0x6928, 0x6810, 0xa106, 0x0040, 0x19b2, 0x037e, 0x047e, 0x6b14, + 0x6c10, 0x1078, 0x1ba2, 0x047f, 0x037f, 0x0040, 0x19b2, 0x0c7f, + 0x0078, 0x19cc, 0x8aff, 0x00c0, 0x19ba, 0x0c7f, 0xa085, 0x0001, + 0x0078, 0x19cc, 0x127e, 0x2091, 0x8000, 0x2079, 0x0020, 0x2009, + 0x0001, 0x1078, 0x19d0, 0x0040, 0x19c9, 0x2009, 0x0001, 0x1078, + 0x19d0, 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, + 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, 0x8aff, 0x0040, + 0x1a4b, 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, 0xa203, 0x0048, + 0x1a4a, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x19fd, 0x0d7e, + 0x2804, 0xac68, 0x2900, 0x0079, 0x19ed, 0x1a2c, 0x1a0d, 0x1a0d, + 0x1a2c, 0x1a2c, 0x1a24, 0x1a2c, 0x1a0d, 0x1a2c, 0x1a13, 0x1a13, + 0x1a2c, 0x1a2c, 0x1a2c, 0x1a1b, 0x1a13, 0xc0fc, 0x6852, 0x6b6c, + 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1a30, 0x0d7e, 0x2804, + 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1a2f, 0x6b08, 0x6a0c, 0x6d00, + 0x6c04, 0x0078, 0x1a2f, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, + 0x6e0c, 0x0078, 0x1a2f, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, + 0xa086, 0x001e, 0x00c0, 0x1a2c, 0x0d7f, 0x1078, 0x1b3e, 0x00c0, + 0x19d6, 0xa00e, 0x0078, 0x1a4b, 0x0d7f, 0x1078, 0x126a, 0x0d7f, + 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, + 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, + 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x1b3e, + 0x0078, 0x1a4b, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, + 0x077f, 0x007c, 0x1078, 0x126a, 0x1078, 0x126a, 0x127e, 0x2091, + 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, + 0x0020, 0x2071, 0x6e05, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, + 0x0002, 0xa184, 0x0700, 0x00c0, 0x1a54, 0x7000, 0x0079, 0x1a70, + 0x1b17, 0x1a74, 0x1ae4, 0x1b15, 0x8001, 0x7002, 0xd19c, 0x00c0, + 0x1a88, 0x8aff, 0x0040, 0x1aa7, 0x2009, 0x0001, 0x1078, 0x19d0, + 0x0040, 0x1b17, 0x2009, 0x0001, 0x1078, 0x19d0, 0x0078, 0x1b17, + 0x7803, 0x0004, 0xd194, 0x0040, 0x1a98, 0x6850, 0xc0fc, 0x6852, + 0x8aff, 0x00c0, 0x1a9d, 0x684c, 0xc0f5, 0x684e, 0x0078, 0x1a9d, + 0x1078, 0x1b57, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00, + 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, 0x1b17, 0x711c, + 0x81ff, 0x0040, 0x1abd, 0x7918, 0x7922, 0x7827, 0x0000, 0x7803, + 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, 0x700e, 0x7010, + 0xa081, 0x0000, 0x7012, 0x0078, 0x1b17, 0x0f7e, 0x027e, 0x781c, + 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, 0xa284, 0x0004, + 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, 0x1acb, 0x79c8, + 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, 0x78c6, 0xa284, + 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, + 0x7003, 0x0000, 0x0078, 0x1b17, 0x8001, 0x7002, 0xd194, 0x0040, + 0x1af9, 0x7804, 0xd0fc, 0x00c0, 0x1a66, 0xd19c, 0x00c0, 0x1b13, + 0x8aff, 0x0040, 0x1b17, 0x2009, 0x0001, 0x1078, 0x19d0, 0x0078, + 0x1b17, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1b57, 0x0d7e, + 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1b0c, 0x6808, 0xa31a, + 0x680c, 0xa213, 0x0078, 0x1b10, 0x6810, 0xa31a, 0x6814, 0xa213, + 0x0d7f, 0x0078, 0x1a98, 0x0078, 0x1a98, 0x1078, 0x126a, 0x0c7f, + 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, + 0x0e7e, 0x2071, 0x6e05, 0x7000, 0xa086, 0x0000, 0x0040, 0x1b3b, + 0x2079, 0x0020, 0x7804, 0xa084, 0x0003, 0x0040, 0x1b35, 0x7803, + 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1b31, 0x20e1, 0x9040, 0x7803, + 0x0002, 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, 0x8840, 0x2804, + 0xa005, 0x00c0, 0x1b52, 0x6004, 0xa005, 0x0040, 0x1b54, 0x681a, + 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1b82, 0x2044, 0x88ff, + 0x1040, 0x126a, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, + 0x8841, 0x2804, 0xa005, 0x00c0, 0x1b71, 0x2c00, 0xad06, 0x0040, + 0x1b66, 0x6000, 0xa005, 0x00c0, 0x1b66, 0x2d00, 0x2060, 0x681a, + 0x6034, 0xa084, 0x000f, 0xa080, 0x1b92, 0x2044, 0x88ff, 0x1040, + 0x126a, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, + 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027, + 0x0000, 0x0000, 0x0000, 0x1b77, 0x1b73, 0x0000, 0x0000, 0x1b81, + 0x0000, 0x1b77, 0x0000, 0x1b7e, 0x1b7b, 0x0000, 0x0000, 0x0000, + 0x1b81, 0x1b7e, 0x0000, 0x1b79, 0x1b79, 0x0000, 0x0000, 0x1b81, + 0x0000, 0x1b79, 0x0000, 0x1b7f, 0x1b7f, 0x0000, 0x0000, 0x0000, + 0x1b81, 0x1b7f, 0x0a7e, 0x097e, 0x087e, 0x6858, 0xa055, 0x0040, + 0x1c3f, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1b82, 0xa986, + 0x0007, 0x0040, 0x1bbb, 0xa986, 0x000e, 0x0040, 0x1bbb, 0xa986, + 0x000f, 0x00c0, 0x1bbf, 0x605c, 0xa422, 0x6060, 0xa31a, 0x2804, + 0xa045, 0x00c0, 0x1bcd, 0x0050, 0x1bc7, 0x0078, 0x1c3f, 0x6004, + 0xa065, 0x0040, 0x1c3f, 0x0078, 0x1baa, 0x2804, 0xa005, 0x0040, + 0x1beb, 0xac68, 0xd99c, 0x00c0, 0x1bdb, 0x6808, 0xa422, 0x680c, + 0xa31b, 0x0078, 0x1bdf, 0x6810, 0xa422, 0x6814, 0xa31b, 0x0048, + 0x1c0a, 0x2300, 0xa405, 0x0040, 0x1bf1, 0x8a51, 0x0040, 0x1c3f, + 0x8840, 0x0078, 0x1bcd, 0x6004, 0xa065, 0x0040, 0x1c3f, 0x0078, + 0x1baa, 0x8a51, 0x0040, 0x1c3f, 0x8840, 0x2804, 0xa005, 0x00c0, + 0x1c04, 0x6004, 0xa065, 0x0040, 0x1c3f, 0x6034, 0xa0cc, 0x000f, + 0xa9c0, 0x1b82, 0x2804, 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, + 0x0078, 0x1c37, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x0d7e, + 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, 0x1c25, 0x6908, + 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, 0x126a, 0x6800, + 0xa420, 0x6804, 0xa319, 0x0078, 0x1c31, 0x6910, 0x2400, 0xa122, + 0x6914, 0x2300, 0xa11b, 0x1048, 0x126a, 0x6800, 0xa420, 0x6804, + 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, + 0x681a, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1c44, 0x087f, + 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, + 0xa084, 0x0007, 0x0079, 0x1c4c, 0x1c54, 0x1c55, 0x1c58, 0x1c5b, + 0x1c60, 0x1c63, 0x1c68, 0x1c6d, 0x007c, 0x1078, 0x1a56, 0x007c, + 0x1078, 0x170a, 0x007c, 0x1078, 0x170a, 0x1078, 0x1a56, 0x007c, + 0x1078, 0x13f1, 0x007c, 0x1078, 0x1a56, 0x1078, 0x13f1, 0x007c, + 0x1078, 0x170a, 0x1078, 0x13f1, 0x007c, 0x1078, 0x170a, 0x1078, + 0x1a56, 0x1078, 0x13f1, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, + 0x0200, 0x2071, 0x7080, 0x2069, 0x6c00, 0x2009, 0x0004, 0x7912, + 0x7916, 0x1078, 0x1f3c, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, + 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, + 0x1c91, 0x1cb5, 0x1c99, 0x1c9d, 0x1ca1, 0x1ca7, 0x1cab, 0x1caf, + 0x1cb3, 0x1078, 0x3cc5, 0x0078, 0x1cb5, 0x1078, 0x3cf9, 0x0078, + 0x1cb5, 0x1078, 0x3cc5, 0x1078, 0x3cf9, 0x0078, 0x1cb5, 0x1078, + 0x1cb7, 0x0078, 0x1cb5, 0x1078, 0x1cb7, 0x0078, 0x1cb5, 0x1078, + 0x1cb7, 0x0078, 0x1cb5, 0x1078, 0x1cb7, 0x127f, 0x007c, 0x007e, + 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1cc1, 0x1078, + 0x126a, 0xa184, 0x0030, 0x0040, 0x1cd2, 0x6a00, 0xa286, 0x0003, + 0x00c0, 0x1ccc, 0x1078, 0x126a, 0x1078, 0x30c9, 0x20e1, 0x9010, + 0x0078, 0x1cde, 0xa184, 0x00c0, 0x0040, 0x1cd8, 0x1078, 0x126a, + 0xa184, 0x0300, 0x0040, 0x1cde, 0x20e1, 0x9020, 0x7932, 0x027f, + 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071, 0x6c00, + 0x7128, 0x2001, 0x6da3, 0x2102, 0x2001, 0x6dab, 0x2102, 0xa182, + 0x0211, 0x00c8, 0x1cf7, 0x2009, 0x0008, 0x0078, 0x1d21, 0xa182, + 0x0259, 0x00c8, 0x1cff, 0x2009, 0x0007, 0x0078, 0x1d21, 0xa182, + 0x02c1, 0x00c8, 0x1d07, 0x2009, 0x0006, 0x0078, 0x1d21, 0xa182, + 0x0349, 0x00c8, 0x1d0f, 0x2009, 0x0005, 0x0078, 0x1d21, 0xa182, + 0x0421, 0x00c8, 0x1d17, 0x2009, 0x0004, 0x0078, 0x1d21, 0xa182, + 0x0581, 0x00c8, 0x1d1f, 0x2009, 0x0003, 0x0078, 0x1d21, 0x2009, + 0x0002, 0x2079, 0x0200, 0x7912, 0x7916, 0x1078, 0x1f3c, 0x0f7f, + 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, + 0x2071, 0x6c00, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7, 0x0000, + 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, + 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x00af, 0x600f, 0x00ff, + 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x6c2b, 0x2003, 0x0000, + 0x2001, 0x6c2a, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, + 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x1d64, + 0xa184, 0x0007, 0x0079, 0x1d6a, 0xa195, 0x0004, 0xa284, 0x0007, + 0x0079, 0x1d6a, 0x1d96, 0x1d72, 0x1d76, 0x1d7a, 0x1d80, 0x1d84, + 0x1d8a, 0x1d90, 0x1078, 0x419e, 0x0078, 0x1d96, 0x1078, 0x427a, + 0x0078, 0x1d96, 0x1078, 0x427a, 0x1078, 0x419e, 0x0078, 0x1d96, + 0x1078, 0x1d9b, 0x0078, 0x1d96, 0x1078, 0x419e, 0x1078, 0x1d9b, + 0x0078, 0x1d96, 0x1078, 0x427a, 0x1078, 0x1d9b, 0x0078, 0x1d96, + 0x1078, 0x427a, 0x1078, 0x419e, 0x1078, 0x1d9b, 0x027f, 0x017f, + 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1e48, 0x017e, 0x047e, + 0x0c7e, 0x644c, 0x74b2, 0xa48c, 0xff00, 0xa196, 0xff00, 0x0040, + 0x1dca, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x1dca, + 0x7130, 0xd18c, 0x00c0, 0x1dca, 0x2011, 0x6c52, 0x2214, 0xd2ec, + 0x0040, 0x1dbe, 0xc18d, 0x7132, 0x0078, 0x1dca, 0x6240, 0xa294, + 0x0010, 0x0040, 0x1e05, 0x6248, 0xa294, 0xff00, 0xa296, 0xff00, + 0x00c0, 0x1e05, 0x2011, 0x8013, 0x1078, 0x2926, 0x7130, 0xc185, + 0x7132, 0x2011, 0x6c52, 0x220c, 0xd1a4, 0x0040, 0x1ded, 0x017e, + 0x2009, 0x0001, 0x2011, 0x0100, 0x1078, 0x416c, 0x2019, 0x000e, + 0x1078, 0x6aa2, 0xa484, 0x00ff, 0x1078, 0x1f61, 0x8127, 0xa006, + 0x2009, 0x000e, 0x1078, 0x6b0a, 0x017f, 0xd1ac, 0x00c0, 0x1df6, + 0x2019, 0x0004, 0x1078, 0x2103, 0x0078, 0x1e05, 0x157e, 0x20a9, + 0x007e, 0x2009, 0x0000, 0x1078, 0x336a, 0x00c0, 0x1e01, 0x1078, + 0x316e, 0x8108, 0x00f0, 0x1dfb, 0x157f, 0x0c7f, 0x047f, 0x6043, + 0x0000, 0x2009, 0x00f7, 0x1078, 0x3131, 0x0f7e, 0x2079, 0x6dc3, + 0x783c, 0xa086, 0x0000, 0x0040, 0x1e1d, 0x6027, 0x0004, 0x783f, + 0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, + 0x1078, 0x502b, 0x2011, 0x0002, 0x1078, 0x5035, 0x1078, 0x4f41, + 0x1078, 0x40a3, 0x037e, 0x2019, 0x0000, 0x1078, 0x4fd3, 0x037f, + 0x60e3, 0x0000, 0x017f, 0x2001, 0x6c00, 0x2014, 0xa296, 0x0004, + 0x00c0, 0x1e40, 0xd19c, 0x00c0, 0x1e40, 0x6228, 0xc29d, 0x622a, + 0x2003, 0x0001, 0x2001, 0x6c1e, 0x2003, 0x0000, 0x6027, 0x0020, + 0xd194, 0x0040, 0x1ee3, 0x0f7e, 0x2079, 0x6dc3, 0x783c, 0xa086, + 0x0001, 0x00c0, 0x1e6c, 0x017e, 0x6027, 0x0004, 0x783f, 0x0000, + 0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x6db0, + 0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4713, 0x1078, 0x47c3, + 0x017f, 0x0f7f, 0x0078, 0x1ee3, 0x0f7f, 0x017e, 0x6220, 0xd2b4, + 0x0040, 0x1ea1, 0x1078, 0x40a3, 0x1078, 0x4e17, 0x6027, 0x0004, + 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1e84, + 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x6db0, + 0x6028, 0xa09a, 0x0002, 0x00c8, 0x1e94, 0x8000, 0x602a, 0x0c7f, + 0x1078, 0x4e09, 0x0078, 0x1ee2, 0x2019, 0x6db9, 0x2304, 0xa065, + 0x0040, 0x1e9e, 0x2009, 0x0027, 0x1078, 0x544c, 0x0c7f, 0x0078, + 0x1ee2, 0xd2bc, 0x0040, 0x1ee2, 0x1078, 0x40b1, 0x6017, 0x0010, + 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, + 0x0040, 0x1eb6, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, + 0x2061, 0x6db0, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1ed7, 0x8000, + 0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1ee2, 0x1078, 0x40a8, + 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x1ed3, 0x6017, + 0x0012, 0x0078, 0x1ee2, 0x6017, 0x0016, 0x0078, 0x1ee2, 0x2019, + 0x6dbf, 0x2304, 0xa065, 0x0040, 0x1ee1, 0x2009, 0x004f, 0x1078, + 0x544c, 0x0c7f, 0x017f, 0xd19c, 0x0040, 0x1f0b, 0x017e, 0x6028, + 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, 0x502b, 0x2011, 0x0002, + 0x1078, 0x5035, 0x1078, 0x4f41, 0x1078, 0x40a3, 0x037e, 0x2019, + 0x0000, 0x1078, 0x4fd3, 0x037f, 0x60e3, 0x0000, 0x1078, 0x6b79, + 0x1078, 0x6b97, 0x2001, 0x6c00, 0x2003, 0x0004, 0x6027, 0x0008, + 0x1078, 0x1161, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, + 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, + 0x6c00, 0x71a8, 0x70aa, 0xa116, 0x0040, 0x1f35, 0x81ff, 0x0040, + 0x1f27, 0x2011, 0x8011, 0x1078, 0x2926, 0x0078, 0x1f35, 0x2011, + 0x8012, 0x1078, 0x2926, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, + 0x0028, 0x1078, 0x2103, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, + 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, + 0x2061, 0x0100, 0xa190, 0x1f4f, 0x2204, 0x60f2, 0xa190, 0x1f58, + 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x083e, + 0x083e, 0x083e, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, + 0x00a0, 0xa080, 0x2154, 0x200c, 0xa18c, 0xff00, 0x810f, 0x007c, + 0xa080, 0x2154, 0x200c, 0xa18c, 0x00ff, 0x007c, 0x1f8e, 0x1f92, + 0x1f96, 0x1f9c, 0x1fa2, 0x1fa8, 0x1fae, 0x1fb6, 0x1fbe, 0x1fc4, + 0x1fca, 0x1fd2, 0x1fda, 0x1fe2, 0x1fea, 0x1ff4, 0x1ffe, 0x1ffe, + 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, + 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x1ffe, 0x107e, 0x007e, + 0x0078, 0x2017, 0x107e, 0x007e, 0x0078, 0x2017, 0x107e, 0x007e, + 0x1078, 0x1d55, 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1d55, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1c45, 0x0078, 0x2017, + 0x107e, 0x007e, 0x1078, 0x1c45, 0x0078, 0x2017, 0x107e, 0x007e, + 0x1078, 0x1d55, 0x1078, 0x1c45, 0x0078, 0x2017, 0x107e, 0x007e, + 0x1078, 0x1d55, 0x1078, 0x1c45, 0x0078, 0x2017, 0x107e, 0x007e, + 0x1078, 0x1c89, 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1c89, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1d55, 0x1078, 0x1c89, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1d55, 0x1078, 0x1c89, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1c45, 0x1078, 0x1c89, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1c45, 0x1078, 0x1c89, + 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1d55, 0x1078, 0x1c45, + 0x1078, 0x1c89, 0x0078, 0x2017, 0x107e, 0x007e, 0x1078, 0x1d55, + 0x1078, 0x1c45, 0x1078, 0x1c89, 0x0078, 0x2017, 0x0005, 0x0078, + 0x1ffe, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2007, 0x2017, + 0x1f94, 0x1f98, 0x1f9e, 0x1fa4, 0x1faa, 0x1fb0, 0x1fb8, 0x1fc0, + 0x1fc6, 0x1fcc, 0x1fd4, 0x1fdc, 0x1fe4, 0x1fec, 0x1ff6, 0x0008, + 0x2001, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, 0x027e, + 0x2001, 0x010c, 0x203c, 0x7274, 0x82ff, 0x0040, 0x206d, 0x037e, + 0x7384, 0xa38e, 0xffff, 0x00c0, 0x202f, 0x2019, 0x0001, 0x8314, + 0xa2e0, 0x71c0, 0x2c04, 0xa38c, 0x0001, 0x0040, 0x203c, 0xa084, + 0xff00, 0x8007, 0x0078, 0x203e, 0xa084, 0x00ff, 0xa70e, 0x0040, + 0x2062, 0xa08e, 0x0000, 0x0040, 0x2062, 0xa08e, 0x00ff, 0x0040, + 0x2068, 0x1078, 0x1f61, 0x1078, 0x3333, 0x00c0, 0x2065, 0x6004, + 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x205c, 0x1078, 0x20b5, + 0x0040, 0x2065, 0x0078, 0x2062, 0x1078, 0x2150, 0x1078, 0x20dc, + 0x0040, 0x2065, 0x8318, 0x0078, 0x202f, 0x7386, 0x0078, 0x206a, + 0x7087, 0xffff, 0x037f, 0x0078, 0x20b2, 0xa780, 0x2154, 0x203c, + 0xa7bc, 0xff00, 0x873f, 0x20a9, 0x007e, 0x2009, 0x0000, 0x7084, + 0xa096, 0xffff, 0x0040, 0x2089, 0xa092, 0x007e, 0x0048, 0x2084, + 0x7087, 0xffff, 0x0078, 0x20af, 0x2008, 0x2011, 0x007e, 0xa202, + 0x20a8, 0x2700, 0x157e, 0x017e, 0xa106, 0x0040, 0x20a6, 0x1078, + 0x3333, 0x00c0, 0x20af, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, + 0x00c0, 0x20a0, 0x1078, 0x20b5, 0x0040, 0x20af, 0x0078, 0x20a6, + 0x1078, 0x2150, 0x1078, 0x20dc, 0x0040, 0x20af, 0x017f, 0x8108, + 0x157f, 0x00f0, 0x2089, 0x7087, 0xffff, 0x0078, 0x20b2, 0x017f, + 0x157f, 0x7186, 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, + 0x0c7e, 0x2c68, 0x1078, 0x53bf, 0x0040, 0x20d7, 0x2d00, 0x601a, + 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x3302, 0x2001, 0x0000, + 0x1078, 0x3316, 0x127e, 0x2091, 0x8000, 0x7080, 0x8000, 0x7082, + 0x127f, 0x2009, 0x0004, 0x1078, 0x544c, 0xa085, 0x0001, 0x0c7f, + 0x0d7f, 0x077f, 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, + 0x2c68, 0x1078, 0x53bf, 0x0040, 0x20fe, 0x2d00, 0x601a, 0x601f, + 0x0001, 0x2001, 0x0000, 0x1078, 0x3302, 0x2001, 0x0002, 0x1078, + 0x3316, 0x127e, 0x2091, 0x8000, 0x7080, 0x8000, 0x7082, 0x127f, + 0x2009, 0x0002, 0x1078, 0x544c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, + 0x077f, 0x017f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, 0x037e, 0x027e, + 0x1078, 0x4406, 0x1078, 0x43b6, 0x1078, 0x5826, 0x20a9, 0x007e, + 0x2009, 0x0000, 0x017e, 0x1078, 0x336a, 0x00c0, 0x211b, 0x1078, + 0x34f2, 0x1078, 0x316e, 0x017f, 0x8108, 0x00f0, 0x2112, 0x027f, + 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x037e, + 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029, + 0x1078, 0x43ff, 0x1078, 0x4344, 0x2c08, 0x1078, 0x6946, 0x017f, + 0x2e60, 0x1078, 0x34f2, 0x1078, 0x316e, 0x017f, 0x027f, 0x037f, + 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x6c00, 0x7080, + 0xa005, 0x0040, 0x214d, 0x8001, 0x7082, 0x007f, 0x0e7f, 0x007c, + 0x6000, 0xc08c, 0x6002, 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, + 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, + 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, + 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, + 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, + 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, + 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, + 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, + 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, + 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, + 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, + 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, + 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, + 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, + 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, + 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, + 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, + 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, + 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, + 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, + 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, + 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, + 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, + 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, + 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, + 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, + 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, + 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x0000, 0x2071, 0x6c6d, 0x7003, 0x0002, + 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, 0x7033, 0x6c7d, 0x7037, + 0x6c7d, 0x7007, 0x0001, 0x2061, 0x6cbd, 0x6003, 0x0002, 0x007c, + 0x0090, 0x226b, 0x0068, 0x226b, 0x2071, 0x6c6d, 0x2b78, 0x7818, + 0xd084, 0x00c0, 0x226b, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, + 0x2351, 0x0079, 0x22ef, 0x007c, 0x2071, 0x6c6d, 0x7004, 0x0079, + 0x2271, 0x2275, 0x2276, 0x2280, 0x2292, 0x007c, 0x0090, 0x227f, + 0x0068, 0x227f, 0x2b78, 0x7818, 0xd084, 0x0040, 0x229e, 0x007c, + 0x2b78, 0x2061, 0x6cbd, 0x6008, 0xa08e, 0x0100, 0x0040, 0x228d, + 0xa086, 0x0200, 0x0040, 0x2349, 0x007c, 0x7014, 0x2068, 0x2a60, + 0x7018, 0x007a, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, + 0x229a, 0x007c, 0x2a60, 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, + 0xa08a, 0x0040, 0x00c8, 0x22a7, 0x61a8, 0x0079, 0x22af, 0x2100, + 0xa08a, 0x0035, 0x00c8, 0x2345, 0x61a8, 0x0079, 0x22ef, 0x2327, + 0x2359, 0x2361, 0x2365, 0x236d, 0x2373, 0x2377, 0x2380, 0x2384, + 0x238c, 0x2390, 0x2345, 0x2345, 0x2345, 0x2394, 0x2345, 0x23a4, + 0x23bb, 0x23d2, 0x244e, 0x2453, 0x2480, 0x24cb, 0x24da, 0x24fb, + 0x2531, 0x253b, 0x2548, 0x255b, 0x2573, 0x257c, 0x25b9, 0x25bf, + 0x2345, 0x25ca, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x25ce, + 0x25d4, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, + 0x2345, 0x25dc, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x25e9, + 0x25ef, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, + 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, + 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x238c, + 0x2390, 0x2345, 0x2345, 0x2601, 0x2345, 0x2345, 0x2345, 0x2345, + 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x2345, 0x264e, + 0x271d, 0x2731, 0x2738, 0x279b, 0x27ec, 0x27f7, 0x2839, 0x2846, + 0x2853, 0x2856, 0x2605, 0x287f, 0x28ca, 0x2345, 0x2345, 0x2345, + 0x2345, 0x29ad, 0x29bb, 0x29c8, 0x713c, 0x0078, 0x2327, 0x2021, + 0x4000, 0x1078, 0x2900, 0x127e, 0x2091, 0x8000, 0x0068, 0x2334, + 0x7818, 0xd084, 0x0040, 0x2337, 0x127f, 0x0078, 0x232b, 0x781b, + 0x0001, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, + 0x0001, 0x2091, 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, + 0x2329, 0x2021, 0x4002, 0x0078, 0x2329, 0x2021, 0x4003, 0x0078, + 0x2329, 0x2021, 0x4005, 0x0078, 0x2329, 0x2021, 0x4006, 0x0078, + 0x2329, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, + 0x290f, 0x7823, 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, + 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2913, 0x7924, 0x7828, 0x2114, + 0x200a, 0x0078, 0x2327, 0x7924, 0x2114, 0x0078, 0x2327, 0x2099, + 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x2327, + 0x7824, 0x2060, 0x0078, 0x2396, 0x2009, 0x0001, 0x2011, 0x000e, + 0x2019, 0x0006, 0x0078, 0x2327, 0x7d38, 0x7c3c, 0x0078, 0x235b, + 0x7d38, 0x7c3c, 0x0078, 0x2367, 0x2061, 0x1000, 0x610c, 0xa006, + 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, 0x2398, 0x2010, 0xa005, + 0x0040, 0x2327, 0x0078, 0x234d, 0x2061, 0x6c51, 0x7824, 0x7930, + 0xa11a, 0x00c8, 0x2355, 0x8019, 0x0040, 0x2355, 0x604a, 0x6142, + 0x782c, 0x6052, 0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, + 0x37bb, 0x0078, 0x2327, 0x2061, 0x6c51, 0x7824, 0x7930, 0xa11a, + 0x00c8, 0x2355, 0x8019, 0x0040, 0x2355, 0x604e, 0x6146, 0x782c, + 0x6062, 0x7828, 0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3591, + 0x0078, 0x2327, 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2351, 0x7924, + 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0x6c74, 0x41a1, 0x1078, + 0x28d7, 0x0040, 0x2351, 0x2009, 0x0020, 0x1078, 0x290f, 0x701b, + 0x23ea, 0x007c, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, + 0x0040, 0x23f6, 0xa096, 0x0019, 0x00c0, 0x2351, 0x810f, 0xa18c, + 0x00ff, 0x0040, 0x2351, 0x710e, 0x700c, 0x8001, 0x0040, 0x2427, + 0x700e, 0x1078, 0x28d7, 0x0040, 0x2351, 0x2009, 0x0020, 0x2061, + 0x6cbd, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, + 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x290f, 0x701b, + 0x241a, 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, + 0x2425, 0xa096, 0x000a, 0x00c0, 0x2351, 0x0078, 0x23fc, 0x7010, + 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x3267, 0x00c0, 0x2435, + 0x7007, 0x0003, 0x701b, 0x2437, 0x007c, 0x1078, 0x3654, 0x127e, + 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0x6c74, 0x530a, 0x2100, + 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, + 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, 0x2913, 0x6190, 0x7824, + 0x6092, 0x0078, 0x2327, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, + 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, + 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, + 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, + 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, + 0x20c1, 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, + 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, 0x0040, 0x2355, 0x7c28, + 0x7d2c, 0x1078, 0x34b5, 0xd28c, 0x00c0, 0x2492, 0x1078, 0x3445, + 0x0078, 0x2494, 0x1078, 0x3481, 0x00c0, 0x24be, 0x2061, 0x7200, + 0x127e, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000, 0x0040, 0x24ac, + 0x6010, 0xa06d, 0x0040, 0x24ac, 0x683c, 0xa406, 0x00c0, 0x24ac, + 0x6840, 0xa506, 0x0040, 0x24b7, 0x127f, 0xace0, 0x0008, 0x2001, + 0x6c15, 0x2004, 0xac02, 0x00c8, 0x2351, 0x0078, 0x2498, 0x1078, + 0x5de3, 0x127f, 0x0040, 0x2351, 0x0078, 0x2327, 0xa00e, 0x2001, + 0x0005, 0x1078, 0x3654, 0x127e, 0x2091, 0x8000, 0x1078, 0x35c4, + 0x127f, 0x0078, 0x2327, 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, + 0x0040, 0x2355, 0x1078, 0x33fa, 0x1078, 0x34c6, 0x0040, 0x2351, + 0x0078, 0x2327, 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, 0x0040, + 0x2355, 0x2031, 0x000f, 0x1078, 0x33fa, 0x8631, 0x00c8, 0x24e3, + 0x2019, 0x0005, 0x1078, 0x34e7, 0x0040, 0x2351, 0x7828, 0xa08a, + 0x1000, 0x00c8, 0x2355, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, + 0x4033, 0x0078, 0x2327, 0x127e, 0x2091, 0x8000, 0x81ff, 0x00c0, + 0x252b, 0x2029, 0x007d, 0x644c, 0x2400, 0xa506, 0x0040, 0x2525, + 0x2508, 0x1078, 0x336a, 0x00c0, 0x2525, 0x2031, 0x000f, 0x1078, + 0x33fa, 0x8631, 0x00c8, 0x250f, 0x2019, 0x0004, 0x1078, 0x34e7, + 0x0040, 0x252b, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x252e, 0x8003, + 0x800b, 0x810b, 0xa108, 0x1078, 0x4033, 0x8529, 0x00c8, 0x2504, + 0x127f, 0x0078, 0x2327, 0x127f, 0x0078, 0x2351, 0x127f, 0x0078, + 0x2355, 0x1078, 0x28ef, 0x0040, 0x2355, 0x1078, 0x342a, 0x1078, + 0x34b5, 0x0078, 0x2327, 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, + 0x0040, 0x2355, 0x1078, 0x3413, 0x1078, 0x34b5, 0x0078, 0x2327, + 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, 0x0040, 0x2355, 0x1078, + 0x3484, 0x0040, 0x2351, 0x1078, 0x32af, 0x1078, 0x343e, 0x1078, + 0x34b5, 0x0078, 0x2327, 0x1078, 0x28ef, 0x0040, 0x2355, 0x1078, + 0x33fa, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078, 0x34f2, 0x0c7f, + 0x1078, 0x43ff, 0x1078, 0x4344, 0x2c08, 0x1078, 0x6946, 0x1078, + 0x34b5, 0x0078, 0x2327, 0x1078, 0x28ef, 0x0040, 0x2355, 0x1078, + 0x34b5, 0x2208, 0x0078, 0x2327, 0x157e, 0x0d7e, 0x0e7e, 0x2069, + 0x6cff, 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2588, 0x2009, 0x0000, + 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007d, 0x2069, + 0x6d20, 0x2d04, 0xa075, 0x0040, 0x259d, 0x704c, 0x1078, 0x25a7, + 0xa210, 0x7080, 0x1078, 0x25a7, 0xa318, 0x8d68, 0x00f0, 0x2591, + 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2327, 0x0f7e, + 0x017e, 0xa07d, 0x0040, 0x25b6, 0x2001, 0x0000, 0x8000, 0x2f0c, + 0x81ff, 0x0040, 0x25b6, 0x2178, 0x0078, 0x25ae, 0x017f, 0x0f7f, + 0x007c, 0x2069, 0x6cff, 0x6910, 0x6294, 0x0078, 0x2327, 0x81ff, + 0x00c0, 0x2351, 0x614c, 0xa190, 0x2154, 0x2214, 0xa294, 0x00ff, + 0x0078, 0x2327, 0x613c, 0x6240, 0x0078, 0x2327, 0x1078, 0x28ef, + 0x0040, 0x2355, 0x0078, 0x2327, 0x1078, 0x28ef, 0x0040, 0x2355, + 0x6244, 0x6338, 0x0078, 0x2327, 0x613c, 0x6240, 0x7824, 0x603e, + 0x7b28, 0x6342, 0x2069, 0x6c51, 0x831f, 0xa305, 0x6816, 0x0078, + 0x2327, 0x1078, 0x28ef, 0x0040, 0x2355, 0x0078, 0x2327, 0x1078, + 0x28ef, 0x0040, 0x2355, 0x7828, 0xa00d, 0x0040, 0x2355, 0x782c, + 0xa005, 0x0040, 0x2355, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, + 0x2327, 0x7d38, 0x7c3c, 0x0078, 0x23d4, 0x7824, 0xa09c, 0x00ff, + 0xa39a, 0x0003, 0x00c8, 0x2351, 0x624c, 0xa084, 0xff00, 0x8007, + 0xa206, 0x00c0, 0x261d, 0x2001, 0x6c40, 0x2009, 0x000c, 0x7a2c, + 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2913, 0x81ff, 0x00c0, 0x2351, + 0x1078, 0x28ef, 0x0040, 0x2355, 0x6004, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x2351, 0x0c7e, 0x1078, 0x28d7, 0x0c7f, 0x0040, + 0x2351, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x60a4, + 0x0040, 0x2351, 0x7007, 0x0003, 0x701b, 0x263f, 0x007c, 0x6830, + 0xa086, 0x0100, 0x0040, 0x2351, 0xad80, 0x000e, 0x2009, 0x000c, + 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2913, 0x1078, 0x28d7, + 0x0040, 0x2351, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, + 0x1078, 0x290f, 0x701b, 0x265d, 0x007c, 0xade8, 0x000d, 0x6800, + 0xa005, 0x0040, 0x2355, 0x6804, 0xd0ac, 0x0040, 0x266a, 0xd0a4, + 0x0040, 0x2355, 0xd094, 0x0040, 0x2675, 0x0c7e, 0x2061, 0x0100, + 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2680, + 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, + 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x2697, 0xd084, + 0x0040, 0x2697, 0x6828, 0xa08a, 0x007e, 0x00c8, 0x2355, 0xa088, + 0x2154, 0x210c, 0xa18c, 0x00ff, 0x6152, 0x0078, 0x26a0, 0xd0dc, + 0x0040, 0x26a0, 0x6828, 0xa08a, 0x007e, 0x00c8, 0x2355, 0x604e, + 0x6808, 0xa08a, 0x0100, 0x0048, 0x2355, 0xa08a, 0x0841, 0x00c8, + 0x2355, 0xa084, 0x0007, 0x00c0, 0x2355, 0x680c, 0xa005, 0x0040, + 0x2355, 0x6810, 0xa005, 0x0040, 0x2355, 0x6848, 0x6940, 0xa10a, + 0x00c8, 0x2355, 0x8001, 0x0040, 0x2355, 0x684c, 0x6944, 0xa10a, + 0x00c8, 0x2355, 0x8001, 0x0040, 0x2355, 0x20a9, 0x001c, 0x2d98, + 0x2069, 0x6c51, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, + 0x8007, 0xa084, 0x00ff, 0x6042, 0x1078, 0x37bb, 0x1078, 0x3591, + 0x6000, 0xa086, 0x0000, 0x00c0, 0x271b, 0x6808, 0x602a, 0x1078, + 0x1ce3, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, + 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, + 0x26fb, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, + 0x831f, 0x0078, 0x26fd, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, + 0x6312, 0x1078, 0x40bf, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, + 0x602f, 0x0000, 0x0c7f, 0x60ac, 0xa005, 0x0040, 0x2717, 0x6003, + 0x0001, 0x2091, 0x301d, 0x1078, 0x30c9, 0x0078, 0x271b, 0x6003, + 0x0004, 0x2091, 0x301d, 0x0078, 0x2327, 0x6000, 0xa086, 0x0000, + 0x0040, 0x2351, 0x2069, 0x6c51, 0x7830, 0x6842, 0x7834, 0x6846, + 0x2d00, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, + 0x2913, 0x81ff, 0x00c0, 0x2351, 0x1078, 0x30c9, 0x0078, 0x2327, + 0x81ff, 0x00c0, 0x2351, 0x6174, 0x81ff, 0x0040, 0x2752, 0x703f, + 0x0000, 0x2001, 0x71c0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, + 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078, 0x2913, 0x701b, 0x2324, + 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x71c0, 0x20a9, + 0x0040, 0x20a1, 0x71c0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, + 0x2154, 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, + 0x2100, 0xa506, 0x0040, 0x2784, 0x1078, 0x336a, 0x00c0, 0x2784, + 0x6014, 0x821c, 0x0048, 0x277c, 0xa398, 0x71c0, 0xa085, 0xff00, + 0x8007, 0x201a, 0x0078, 0x2783, 0xa398, 0x71c0, 0x2324, 0xa4a4, + 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x007f, 0x00c8, + 0x278b, 0x0078, 0x2768, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, + 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x71c0, 0x2099, 0x71c0, 0x1078, + 0x3111, 0x0078, 0x2741, 0x1078, 0x28ef, 0x0040, 0x2355, 0x0c7e, + 0x1078, 0x28d7, 0x0c7f, 0x0040, 0x2351, 0x2001, 0x6c52, 0x2004, + 0xd0b4, 0x0040, 0x27c8, 0x6000, 0xd08c, 0x00c0, 0x27c8, 0x6004, + 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x27c8, 0x6837, 0x0000, + 0x6838, 0xc0fd, 0x683a, 0x1078, 0x60c0, 0x0040, 0x2351, 0x7007, + 0x0003, 0x701b, 0x27c4, 0x007c, 0x1078, 0x28ef, 0x0040, 0x2355, + 0x20a9, 0x0029, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, + 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, + 0x3111, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, + 0x20a0, 0x1078, 0x3111, 0x2d00, 0x2009, 0x0029, 0x7a2c, 0x7b28, + 0x7c3c, 0x7d38, 0x0078, 0x2913, 0x81ff, 0x00c0, 0x2351, 0x1078, + 0x28ef, 0x0040, 0x2355, 0x1078, 0x34d1, 0x0078, 0x2327, 0x81ff, + 0x00c0, 0x2351, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2355, 0x1078, + 0x28ef, 0x0040, 0x2355, 0x2031, 0x000f, 0x1078, 0x33fa, 0x8631, + 0x00c8, 0x2805, 0x2019, 0x0004, 0x1078, 0x34e7, 0x7924, 0x810f, + 0x7a28, 0x1078, 0x2815, 0x0078, 0x2327, 0xa186, 0x00ff, 0x0040, + 0x281d, 0x1078, 0x282d, 0x0078, 0x282c, 0x2029, 0x007d, 0x2061, + 0x6c00, 0x644c, 0x2400, 0xa506, 0x0040, 0x2829, 0x2508, 0x1078, + 0x282d, 0x8529, 0x00c8, 0x2822, 0x007c, 0x1078, 0x336a, 0x00c0, + 0x2838, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4033, + 0x007c, 0x81ff, 0x00c0, 0x2351, 0x1078, 0x28ef, 0x0040, 0x2355, + 0x1078, 0x33fa, 0x1078, 0x34dc, 0x0078, 0x2327, 0x81ff, 0x00c0, + 0x2351, 0x1078, 0x28ef, 0x0040, 0x2355, 0x1078, 0x33fa, 0x1078, + 0x34c6, 0x0078, 0x2327, 0x6100, 0x0078, 0x2327, 0x1078, 0x28ef, + 0x0040, 0x2355, 0x6004, 0xa086, 0x0707, 0x0040, 0x2355, 0x2001, + 0x6c00, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2351, 0x0d7e, 0xace8, + 0x000a, 0x7924, 0xd184, 0x0040, 0x286f, 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, - 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x23db, 0x7824, - 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2949, 0x81ff, 0x00c0, - 0x2405, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2409, 0x7924, 0xa18c, - 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x295d, 0xa182, 0x007e, - 0x00c8, 0x2409, 0x2100, 0x1078, 0x1feb, 0x027e, 0x0c7e, 0x127e, - 0x2091, 0x8000, 0x2061, 0x71c9, 0x601b, 0x0000, 0x601f, 0x0000, - 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, - 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x326c, - 0x1078, 0x433a, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, - 0x28d1, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x23db, 0x7924, 0xa18c, - 0xff00, 0x810f, 0x0c7e, 0x1078, 0x34bf, 0x2c08, 0x0c7f, 0x00c0, - 0x2409, 0x0078, 0x23db, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, - 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x00f0, 0x2995, 0x017f, - 0x007c, 0x017e, 0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, - 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, - 0x290a, 0x8108, 0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x1078, - 0x12c7, 0x0040, 0x29ce, 0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, - 0x29c6, 0x2d00, 0x7012, 0x7016, 0x0078, 0x29cc, 0x7014, 0x6802, - 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c, 0x7924, - 0x810f, 0xa18c, 0x00ff, 0x1078, 0x34fa, 0x00c0, 0x29de, 0x7e28, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x29df, 0xa066, 0x8cff, - 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, 0x34fa, 0x00c0, - 0x29ef, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, 0x29f0, 0xa066, - 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, 0x29fd, 0x2168, - 0x6904, 0x1078, 0x12fb, 0x0078, 0x29f4, 0x7112, 0x7116, 0x017f, - 0x007c, 0x2031, 0x0001, 0x0078, 0x2a07, 0x2031, 0x0000, 0x2061, - 0x70bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, - 0x2c10, 0x1078, 0x1332, 0x7007, 0x0002, 0x701b, 0x23db, 0x007c, - 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x707b, - 0x2004, 0xa005, 0x00c0, 0x2a32, 0x0068, 0x2a32, 0x7818, 0xd084, - 0x00c0, 0x2a32, 0x781b, 0x0001, 0x7a22, 0x7b26, 0x2091, 0x4080, - 0x0078, 0x2a56, 0x017e, 0x0c7e, 0x0e7e, 0x2071, 0x706d, 0x7138, - 0xa182, 0x0008, 0x0048, 0x2a40, 0x7030, 0x2060, 0x0078, 0x2a51, - 0x7030, 0xa0e0, 0x0008, 0xac82, 0x70bd, 0x0048, 0x2a49, 0x2061, - 0x707d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2a4f, 0x7036, 0x8108, - 0x713a, 0x2262, 0x6306, 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, - 0x007c, 0x0e7e, 0x2071, 0x706d, 0x7038, 0xa005, 0x0040, 0x2a90, - 0x127e, 0x2091, 0x8000, 0x0068, 0x2a8f, 0x0f7e, 0x2079, 0x0000, - 0x7818, 0xd084, 0x00c0, 0x2a8e, 0x0c7e, 0x781b, 0x0001, 0x7034, - 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x2091, 0x4080, 0x7038, - 0x8001, 0x703a, 0xa005, 0x00c0, 0x2a84, 0x7033, 0x707d, 0x7037, - 0x707d, 0x0c7f, 0x0078, 0x2a8e, 0xac80, 0x0008, 0xa0fa, 0x70bd, - 0x0048, 0x2a8c, 0x2001, 0x707d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, - 0x0e7f, 0x007c, 0x027e, 0x2001, 0x7052, 0x2004, 0xd0c4, 0x0040, - 0x2a9d, 0x2011, 0x8014, 0x1078, 0x2a18, 0x027f, 0x007c, 0x81ff, - 0x00c0, 0x2405, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, - 0x1078, 0x3247, 0x127f, 0x0078, 0x23db, 0x7824, 0x2008, 0xa18c, - 0xfffd, 0x00c0, 0x2ab8, 0x61b4, 0xa10d, 0x61b6, 0x0078, 0x23db, - 0x0078, 0x2409, 0x81ff, 0x00c0, 0x2405, 0x6000, 0xa086, 0x0003, - 0x00c0, 0x2405, 0x2001, 0x7052, 0x2004, 0xd0a4, 0x00c0, 0x2405, - 0x1078, 0x29e1, 0x0040, 0x2409, 0x6004, 0xa084, 0x00ff, 0xa086, - 0x0006, 0x00c0, 0x2ad7, 0x7828, 0xa005, 0x0040, 0x23db, 0x0c7e, - 0x1078, 0x29b7, 0x0c7f, 0x0040, 0x2405, 0x6837, 0x0000, 0x6833, - 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x649c, 0x0040, 0x2405, - 0x7007, 0x0003, 0x701b, 0x2aed, 0x007c, 0x6830, 0xa086, 0x0100, - 0x0040, 0x2405, 0x0078, 0x23db, 0x2001, 0x7000, 0x2004, 0xa086, - 0x0003, 0x00c0, 0x2405, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x1078, 0x29b7, 0x0040, 0x2405, 0x2009, 0x0000, 0x2031, 0x0000, - 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, - 0x1078, 0x34fa, 0x00c0, 0x2b3a, 0x6004, 0xa0c6, 0x0707, 0x0040, - 0x2b3a, 0xa084, 0x00ff, 0xa0c6, 0x0006, 0x00c0, 0x2b3a, 0x87ff, - 0x0040, 0x2b2d, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, - 0x53a3, 0x1078, 0x29a1, 0x0078, 0x2b36, 0xac80, 0x000a, 0x2098, - 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x29a1, 0x21a2, 0x94a0, - 0xa6b0, 0x0005, 0x8108, 0xa186, 0x007e, 0x0040, 0x2b45, 0xa686, - 0x0028, 0x0040, 0x2b4e, 0x0078, 0x2b10, 0x86ff, 0x00c0, 0x2b4c, - 0x7120, 0x810b, 0x0078, 0x23db, 0x702f, 0x0001, 0x711e, 0x7020, - 0xa600, 0x7022, 0x772a, 0x2061, 0x70bd, 0x6007, 0x0000, 0x6612, - 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, - 0x1332, 0x7007, 0x0002, 0x701b, 0x2b66, 0x007c, 0x702c, 0xa005, - 0x00c0, 0x2b78, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, - 0x2061, 0x70bd, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x2b10, - 0x7120, 0x810b, 0x0078, 0x23db, 0x127e, 0x0c7e, 0x0e7e, 0x2061, - 0x0100, 0x2071, 0x7000, 0x6044, 0xd0a4, 0x00c0, 0x2ba5, 0xd084, - 0x0040, 0x2b8e, 0x1078, 0x2ccc, 0x0078, 0x2ba1, 0xd08c, 0x0040, - 0x2b95, 0x1078, 0x2be3, 0x0078, 0x2ba1, 0xd094, 0x0040, 0x2b9c, - 0x1078, 0x2bc6, 0x0078, 0x2ba1, 0xd09c, 0x0040, 0x2ba1, 0x1078, - 0x2baf, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, - 0x00c0, 0x2bac, 0xc19d, 0x612a, 0x017f, 0x0078, 0x2ba1, 0x6043, - 0x0040, 0x6043, 0x0000, 0x7067, 0x0000, 0x707f, 0x0001, 0x709f, - 0x0000, 0x2009, 0x75c0, 0x200b, 0x0000, 0x706b, 0x000f, 0x2009, - 0x000f, 0x2011, 0x3207, 0x1078, 0x433a, 0x007c, 0x7068, 0xa005, - 0x00c0, 0x2be2, 0x2011, 0x3207, 0x1078, 0x42aa, 0x6043, 0x0020, - 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0, 0x2bde, 0x707b, 0x0000, - 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2be2, 0x706f, 0x0000, - 0x0078, 0x2be2, 0x007c, 0x706c, 0xa08a, 0x0003, 0x00c8, 0x2bec, - 0x1079, 0x2bef, 0x0078, 0x2bee, 0x1078, 0x1288, 0x007c, 0x2bf2, - 0x2c41, 0x2ccb, 0x0f7e, 0x706f, 0x0001, 0x20e1, 0xa000, 0x20e1, - 0x8700, 0x1078, 0x1d4d, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, - 0x7400, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, - 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, - 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, - 0x0000, 0x2079, 0x740c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, - 0x7005, 0x20a1, 0x740e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x7412, - 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7400, 0x20a1, 0x020b, - 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x1078, - 0x322e, 0x0f7f, 0x7073, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, - 0x007c, 0x0d7e, 0x7070, 0x7073, 0x0000, 0xa025, 0x0040, 0x2cb5, - 0x6020, 0xd0b4, 0x00c0, 0x2cb3, 0x717c, 0x81ff, 0x0040, 0x2c9c, - 0xa486, 0x000c, 0x00c0, 0x2ca7, 0xa480, 0x0018, 0x8004, 0x20a8, - 0x2011, 0x7480, 0x2019, 0x7400, 0x220c, 0x2304, 0xa106, 0x00c0, - 0x2c73, 0x8210, 0x8318, 0x00f0, 0x2c5c, 0x6043, 0x0004, 0x608b, - 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x706f, 0x0002, 0x707b, - 0x0002, 0x0078, 0x2cb3, 0x2069, 0x7480, 0x6930, 0xa18e, 0x1101, - 0x00c0, 0x2ca7, 0x6834, 0xa005, 0x00c0, 0x2ca7, 0x6900, 0xa18c, - 0x00ff, 0x00c0, 0x2c87, 0x6804, 0xa005, 0x0040, 0x2c9c, 0x2011, - 0x748e, 0x2019, 0x7005, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, - 0x0048, 0x2c9a, 0x00c0, 0x2ca7, 0x8210, 0x8318, 0x00f0, 0x2c8d, - 0x0078, 0x2ca7, 0x707f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x7480, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, - 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2cb3, 0x60c3, - 0x000c, 0x1078, 0x322e, 0x0d7f, 0x007c, 0x6020, 0xd0b4, 0x00c0, - 0x2cb3, 0x60c3, 0x000c, 0x2011, 0x71c0, 0x2013, 0x0000, 0x7073, - 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, - 0x50a7, 0x0078, 0x2cb3, 0x007c, 0x7078, 0xa08a, 0x001d, 0x00c8, - 0x2cd5, 0x1079, 0x2cd8, 0x0078, 0x2cd7, 0x1078, 0x1288, 0x007c, - 0x2cfc, 0x2d0b, 0x2d3c, 0x2d51, 0x2d81, 0x2da9, 0x2dd9, 0x2e03, - 0x2e33, 0x2e59, 0x2ea4, 0x2ec6, 0x2eea, 0x2f00, 0x2f26, 0x2f39, - 0x2f42, 0x2f5b, 0x2f89, 0x2fb1, 0x2fdf, 0x3009, 0x304e, 0x3083, - 0x30a5, 0x30e3, 0x3107, 0x3120, 0x312d, 0x7003, 0x0007, 0x6004, - 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, - 0x6043, 0x0002, 0x707b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x320e, - 0x1078, 0x429d, 0x007c, 0x0f7e, 0x7070, 0xa086, 0x0014, 0x00c0, - 0x2d3a, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2d3a, 0x2079, - 0x7480, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2d38, 0x7834, 0xa005, - 0x00c0, 0x2d38, 0x7a38, 0xd2fc, 0x0040, 0x2d2e, 0x709c, 0xa005, - 0x00c0, 0x2d2e, 0x1078, 0x32c7, 0x709f, 0x0001, 0x2011, 0x320e, - 0x1078, 0x42aa, 0x707b, 0x0010, 0x1078, 0x2f42, 0x0078, 0x2d3a, - 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0003, 0x6043, 0x0004, - 0x1078, 0x3298, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, - 0x20a3, 0x0000, 0x00f0, 0x2d48, 0x60c3, 0x0014, 0x1078, 0x322e, - 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2d7f, 0x2011, 0x320e, - 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2d7b, 0x2079, 0x7480, - 0x7a30, 0xa296, 0x1102, 0x00c0, 0x2d7b, 0x7834, 0xa005, 0x00c0, - 0x2d7b, 0x7a38, 0xd2fc, 0x0040, 0x2d75, 0x709c, 0xa005, 0x00c0, - 0x2d75, 0x1078, 0x32c7, 0x709f, 0x0001, 0x707b, 0x0004, 0x1078, - 0x2d81, 0x0078, 0x2d7f, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, - 0x007c, 0x707b, 0x0005, 0x1078, 0x3298, 0x20a3, 0x1103, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x748e, 0x7064, 0xa005, 0x00c0, 0x2d9b, - 0x714c, 0xa186, 0xffff, 0x0040, 0x2d9b, 0x1078, 0x31d2, 0x0040, - 0x2d9b, 0x1078, 0x32c7, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x322e, - 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2dd7, 0x2011, 0x320e, - 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2dd3, 0x2079, 0x7480, - 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2dd3, 0x7834, 0xa005, 0x00c0, - 0x2dd3, 0x7a38, 0xd2fc, 0x0040, 0x2dcd, 0x709c, 0xa005, 0x00c0, - 0x2dcd, 0x1078, 0x32c7, 0x709f, 0x0001, 0x707b, 0x0006, 0x1078, - 0x2dd9, 0x0078, 0x2dd7, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, - 0x007c, 0x707b, 0x0007, 0x1078, 0x3298, 0x20a3, 0x1104, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x748e, 0x7064, 0xa005, 0x00c0, 0x2df5, - 0x7150, 0xa186, 0xffff, 0x0040, 0x2df5, 0xa180, 0x2207, 0x200c, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x31d2, 0x20a9, 0x0008, 0x2298, + 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x2327, 0x7824, + 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2889, 0x81ff, 0x00c0, + 0x2351, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2355, 0x7924, 0xa18c, + 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x289d, 0xa182, 0x007e, + 0x00c8, 0x2355, 0x2100, 0x1078, 0x1f68, 0x027e, 0x0c7e, 0x127e, + 0x2091, 0x8000, 0x2061, 0x6dc3, 0x601b, 0x0000, 0x601f, 0x0000, + 0x2061, 0x6c00, 0x6003, 0x0001, 0x2061, 0x0100, 0x6030, 0xa084, + 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, + 0x2009, 0x001e, 0x2011, 0x30ee, 0x1078, 0x40b6, 0x7924, 0xa18c, + 0xff00, 0x810f, 0x7a28, 0x1078, 0x2815, 0x127f, 0x0c7f, 0x027f, + 0x0078, 0x2327, 0x7924, 0xa18c, 0xff00, 0x810f, 0x0c7e, 0x1078, + 0x3333, 0x2c08, 0x0c7f, 0x00c0, 0x2355, 0x0078, 0x2327, 0x1078, + 0x12a7, 0x0040, 0x28ee, 0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, + 0x28e6, 0x2d00, 0x7012, 0x7016, 0x0078, 0x28ec, 0x7014, 0x6802, + 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c, 0x7e24, + 0x860f, 0xa18c, 0x00ff, 0x1078, 0x336a, 0x00c0, 0x28fd, 0xa6b4, + 0x00ff, 0xa682, 0x0010, 0x0048, 0x28fe, 0xa066, 0x8cff, 0x007c, + 0x017e, 0x7110, 0x81ff, 0x0040, 0x290b, 0x2168, 0x6904, 0x1078, + 0x12db, 0x0078, 0x2902, 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, + 0x0001, 0x0078, 0x2915, 0x2031, 0x0000, 0x2061, 0x6cbd, 0x6606, + 0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, + 0x1312, 0x7007, 0x0002, 0x701b, 0x2327, 0x007c, 0x0f7e, 0x127e, + 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x6c7b, 0x2004, 0xa005, + 0x00c0, 0x2940, 0x0068, 0x2940, 0x7818, 0xd084, 0x00c0, 0x2940, + 0x781b, 0x0001, 0x7a22, 0x7b26, 0x2091, 0x4080, 0x0078, 0x2964, + 0x017e, 0x0c7e, 0x0e7e, 0x2071, 0x6c6d, 0x7138, 0xa182, 0x0008, + 0x0048, 0x294e, 0x7030, 0x2060, 0x0078, 0x295f, 0x7030, 0xa0e0, + 0x0008, 0xac82, 0x6cbd, 0x0048, 0x2957, 0x2061, 0x6c7d, 0x2c00, + 0x7032, 0x81ff, 0x00c0, 0x295d, 0x7036, 0x8108, 0x713a, 0x2262, + 0x6306, 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, + 0x2071, 0x6c6d, 0x7038, 0xa005, 0x0040, 0x299e, 0x127e, 0x2091, + 0x8000, 0x0068, 0x299d, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, + 0x00c0, 0x299c, 0x0c7e, 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, + 0x7822, 0x6004, 0x7826, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, + 0xa005, 0x00c0, 0x2992, 0x7033, 0x6c7d, 0x7037, 0x6c7d, 0x0c7f, + 0x0078, 0x299c, 0xac80, 0x0008, 0xa0fa, 0x6cbd, 0x0048, 0x299a, + 0x2001, 0x6c7d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, + 0x027e, 0x2001, 0x6c52, 0x2004, 0xd0c4, 0x0040, 0x29ab, 0x2011, + 0x8014, 0x1078, 0x2926, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2351, + 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x30c9, + 0x127f, 0x0078, 0x2327, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, + 0x29c6, 0x61b4, 0xa10d, 0x61b6, 0x0078, 0x2327, 0x0078, 0x2355, + 0x81ff, 0x00c0, 0x2351, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2351, + 0x2001, 0x6c52, 0x2004, 0xd0a4, 0x00c0, 0x2351, 0x1078, 0x28ef, + 0x0040, 0x2355, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, + 0x29e5, 0x7828, 0xa005, 0x0040, 0x2327, 0x0c7e, 0x1078, 0x28d7, + 0x0c7f, 0x0040, 0x2351, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, + 0xc0fd, 0x683a, 0x1078, 0x612d, 0x0040, 0x2351, 0x7007, 0x0003, + 0x701b, 0x29fb, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2351, + 0x0078, 0x2327, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, + 0x6c00, 0x6044, 0xd0a4, 0x00c0, 0x2a27, 0xd084, 0x0040, 0x2a14, + 0x1078, 0x2b4a, 0x0078, 0x2a27, 0xd08c, 0x0040, 0x2a1b, 0x1078, + 0x2a61, 0x0078, 0x2a27, 0xd094, 0x0040, 0x2a22, 0x1078, 0x2a42, + 0x0078, 0x2a27, 0xd09c, 0x0040, 0x2a27, 0x1078, 0x2a2b, 0x0e7f, + 0x0c7f, 0x127f, 0x007c, 0x6043, 0x0040, 0x6043, 0x0000, 0x7067, + 0x0000, 0x707f, 0x0001, 0x709f, 0x0000, 0x2009, 0x71c0, 0x200b, + 0x0000, 0x706b, 0x000f, 0x2009, 0x000f, 0x2011, 0x3085, 0x1078, + 0x40b6, 0x007c, 0x7068, 0xa005, 0x00c0, 0x2a60, 0x2011, 0x3085, + 0x1078, 0x4026, 0x6043, 0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, + 0x00c0, 0x2a5c, 0x7003, 0x0001, 0x707b, 0x0000, 0x6043, 0x0090, + 0x6043, 0x0010, 0x0078, 0x2a60, 0x706f, 0x0000, 0x0078, 0x2a60, + 0x007c, 0x706c, 0xa08a, 0x0003, 0x00c8, 0x2a6a, 0x1079, 0x2a6d, + 0x0078, 0x2a6c, 0x1078, 0x126a, 0x007c, 0x2a70, 0x2abf, 0x2b49, + 0x0f7e, 0x706f, 0x0001, 0x20e1, 0xa000, 0x20e1, 0x8700, 0x1078, + 0x1ce3, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0x7000, 0x207b, + 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, + 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823, + 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079, + 0x700c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0x6c05, 0x20a1, + 0x700e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x7012, 0x207b, 0x0000, + 0x7807, 0x0000, 0x2099, 0x7000, 0x20a1, 0x020b, 0x20a9, 0x0014, + 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x1078, 0x30b0, 0x0f7f, + 0x7073, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x007c, 0x0d7e, + 0x7070, 0x7073, 0x0000, 0xa025, 0x0040, 0x2b33, 0x6020, 0xd0b4, + 0x00c0, 0x2b31, 0x717c, 0x81ff, 0x0040, 0x2b1a, 0xa486, 0x000c, + 0x00c0, 0x2b25, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0x7080, + 0x2019, 0x7000, 0x220c, 0x2304, 0xa106, 0x00c0, 0x2af1, 0x8210, + 0x8318, 0x00f0, 0x2ada, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, + 0xf0f0, 0x6043, 0x0006, 0x706f, 0x0002, 0x707b, 0x0002, 0x0078, + 0x2b31, 0x2069, 0x7080, 0x6930, 0xa18e, 0x1101, 0x00c0, 0x2b25, + 0x6834, 0xa005, 0x00c0, 0x2b25, 0x6900, 0xa18c, 0x00ff, 0x00c0, + 0x2b05, 0x6804, 0xa005, 0x0040, 0x2b1a, 0x2011, 0x708e, 0x2019, + 0x6c05, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048, 0x2b18, + 0x00c0, 0x2b25, 0x8210, 0x8318, 0x00f0, 0x2b0b, 0x0078, 0x2b25, + 0x707f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7080, + 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, + 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2b31, 0x60c3, 0x000c, 0x1078, + 0x30b0, 0x0d7f, 0x007c, 0x6020, 0xd0b4, 0x00c0, 0x2b31, 0x60c3, + 0x000c, 0x2011, 0x6dba, 0x2013, 0x0000, 0x7073, 0x0000, 0x20e1, + 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x4e0e, 0x0078, + 0x2b31, 0x007c, 0x7078, 0xa08a, 0x001d, 0x00c8, 0x2b53, 0x1079, + 0x2b56, 0x0078, 0x2b55, 0x1078, 0x126a, 0x007c, 0x2b7a, 0x2b89, + 0x2bba, 0x2bcf, 0x2bff, 0x2c27, 0x2c57, 0x2c81, 0x2cb1, 0x2cd7, + 0x2d22, 0x2d44, 0x2d68, 0x2d7e, 0x2da4, 0x2db7, 0x2dc0, 0x2dd9, + 0x2e07, 0x2e2f, 0x2e5d, 0x2e87, 0x2ecc, 0x2f01, 0x2f23, 0x2f61, + 0x2f85, 0x2f9e, 0x2fab, 0x7003, 0x0007, 0x6004, 0xa084, 0xfff9, + 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, + 0x707b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x308c, 0x1078, 0x4019, + 0x007c, 0x0f7e, 0x7070, 0xa086, 0x0014, 0x00c0, 0x2bb8, 0x6043, + 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2bb8, 0x2079, 0x7080, 0x7a30, + 0xa296, 0x1102, 0x00c0, 0x2bb6, 0x7834, 0xa005, 0x00c0, 0x2bb6, + 0x7a38, 0xd2fc, 0x0040, 0x2bac, 0x709c, 0xa005, 0x00c0, 0x2bac, + 0x1078, 0x3148, 0x709f, 0x0001, 0x2011, 0x308c, 0x1078, 0x4026, + 0x707b, 0x0010, 0x1078, 0x2dc0, 0x0078, 0x2bb8, 0x7073, 0x0000, + 0x0f7f, 0x007c, 0x707b, 0x0003, 0x6043, 0x0004, 0x1078, 0x3119, + 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, + 0x00f0, 0x2bc6, 0x60c3, 0x0014, 0x1078, 0x30b0, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2bfd, 0x2011, 0x308c, 0x1078, 0x4026, + 0xa086, 0x0014, 0x00c0, 0x2bf9, 0x2079, 0x7080, 0x7a30, 0xa296, + 0x1102, 0x00c0, 0x2bf9, 0x7834, 0xa005, 0x00c0, 0x2bf9, 0x7a38, + 0xd2fc, 0x0040, 0x2bf3, 0x709c, 0xa005, 0x00c0, 0x2bf3, 0x1078, + 0x3148, 0x709f, 0x0001, 0x707b, 0x0004, 0x1078, 0x2bff, 0x0078, + 0x2bfd, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0005, 0x1078, 0x3119, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x708e, 0x7064, 0xa005, 0x00c0, 0x2c19, 0x714c, 0xa186, + 0xffff, 0x0040, 0x2c19, 0x1078, 0x3050, 0x0040, 0x2c19, 0x1078, + 0x3148, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x30b0, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2c55, 0x2011, 0x308c, 0x1078, 0x4026, + 0xa086, 0x0014, 0x00c0, 0x2c51, 0x2079, 0x7080, 0x7a30, 0xa296, + 0x1103, 0x00c0, 0x2c51, 0x7834, 0xa005, 0x00c0, 0x2c51, 0x7a38, + 0xd2fc, 0x0040, 0x2c4b, 0x709c, 0xa005, 0x00c0, 0x2c4b, 0x1078, + 0x3148, 0x709f, 0x0001, 0x707b, 0x0006, 0x1078, 0x2c57, 0x0078, + 0x2c55, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0007, 0x1078, 0x3119, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x708e, 0x7064, 0xa005, 0x00c0, 0x2c73, 0x7150, 0xa186, + 0xffff, 0x0040, 0x2c73, 0xa180, 0x2154, 0x200c, 0xa18c, 0xff00, + 0x810f, 0x1078, 0x3050, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x30b0, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2caf, 0x2011, 0x308c, + 0x1078, 0x4026, 0xa086, 0x0014, 0x00c0, 0x2cab, 0x2079, 0x7080, + 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2cab, 0x7834, 0xa005, 0x00c0, + 0x2cab, 0x7a38, 0xd2fc, 0x0040, 0x2ca5, 0x709c, 0xa005, 0x00c0, + 0x2ca5, 0x1078, 0x3148, 0x709f, 0x0001, 0x707b, 0x0008, 0x1078, + 0x2cb1, 0x0078, 0x2caf, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, + 0x007c, 0x707b, 0x0009, 0x1078, 0x3119, 0x20a3, 0x1105, 0x20a3, + 0x0100, 0x3430, 0x7064, 0xa005, 0x00c0, 0x2cc4, 0x1078, 0x2fba, + 0x0040, 0x2cd4, 0x0078, 0x2cce, 0x20a9, 0x0008, 0x2099, 0x708e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x322e, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2e31, - 0x2011, 0x320e, 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2e2d, - 0x2079, 0x7480, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2e2d, 0x7834, - 0xa005, 0x00c0, 0x2e2d, 0x7a38, 0xd2fc, 0x0040, 0x2e27, 0x709c, - 0xa005, 0x00c0, 0x2e27, 0x1078, 0x32c7, 0x709f, 0x0001, 0x707b, - 0x0008, 0x1078, 0x2e33, 0x0078, 0x2e31, 0x707b, 0x0002, 0x7073, - 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0009, 0x1078, 0x3298, 0x20a3, - 0x1105, 0x20a3, 0x0100, 0x3430, 0x7064, 0xa005, 0x00c0, 0x2e46, - 0x1078, 0x313c, 0x0040, 0x2e56, 0x0078, 0x2e50, 0x20a9, 0x0008, - 0x2099, 0x748e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x322e, 0x0078, 0x2e58, 0x1078, 0x2cf5, - 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2ea2, 0x2011, 0x320e, - 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2e9e, 0x2079, 0x7480, - 0x7a30, 0xa296, 0x1105, 0x00c0, 0x2e9e, 0x7834, 0x2011, 0x0100, - 0xa21e, 0x00c0, 0x2e87, 0x7a38, 0xd2fc, 0x0040, 0x2e7f, 0x709c, - 0xa005, 0x00c0, 0x2e7f, 0x1078, 0x32c7, 0x709f, 0x0001, 0x7077, - 0x0001, 0x707b, 0x000a, 0x1078, 0x2ea4, 0x0078, 0x2ea2, 0xa005, - 0x00c0, 0x2e9e, 0x7a38, 0xd2fc, 0x0040, 0x2e96, 0x709c, 0xa005, - 0x00c0, 0x2e96, 0x1078, 0x32c7, 0x709f, 0x0001, 0x7077, 0x0000, - 0x707b, 0x000e, 0x1078, 0x2f26, 0x0078, 0x2ea2, 0x707b, 0x0002, - 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000b, 0x2011, 0x740e, - 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, - 0x2009, 0x0000, 0x41a4, 0x1078, 0x3298, 0x20a3, 0x1106, 0x20a3, - 0x0000, 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, - 0x53a6, 0x60c3, 0x0084, 0x1078, 0x322e, 0x007c, 0x0f7e, 0x7070, - 0xa005, 0x0040, 0x2ee8, 0x2011, 0x320e, 0x1078, 0x42aa, 0xa086, - 0x0084, 0x00c0, 0x2ee4, 0x2079, 0x7480, 0x7a30, 0xa296, 0x1106, - 0x00c0, 0x2ee4, 0x7834, 0xa005, 0x00c0, 0x2ee4, 0x707b, 0x000c, - 0x1078, 0x2eea, 0x0078, 0x2ee8, 0x707b, 0x0002, 0x7073, 0x0000, - 0x0f7f, 0x007c, 0x707b, 0x000d, 0x1078, 0x3298, 0x20a3, 0x1107, - 0x20a3, 0x0000, 0x2099, 0x748e, 0x20a9, 0x0040, 0x53a6, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x322e, 0x007c, - 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f24, 0x2011, 0x320e, 0x1078, - 0x42aa, 0xa086, 0x0084, 0x00c0, 0x2f20, 0x2079, 0x7480, 0x7a30, - 0xa296, 0x1107, 0x00c0, 0x2f20, 0x7834, 0xa005, 0x00c0, 0x2f20, - 0x1078, 0x328a, 0x707b, 0x000e, 0x1078, 0x2f26, 0x0078, 0x2f24, - 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000f, - 0x7073, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, - 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x320e, 0x1078, 0x429d, - 0x007c, 0x7070, 0xa005, 0x0040, 0x2f41, 0x2011, 0x320e, 0x1078, - 0x42aa, 0x007c, 0x707b, 0x0011, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x7480, 0x20a1, 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, - 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, - 0x1078, 0x322e, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f87, - 0x2011, 0x320e, 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2f85, - 0x2079, 0x7480, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2f85, 0x7834, - 0xa005, 0x00c0, 0x2f85, 0x7a38, 0xd2fc, 0x0040, 0x2f7f, 0x709c, - 0xa005, 0x00c0, 0x2f7f, 0x1078, 0x32c7, 0x709f, 0x0001, 0x707b, - 0x0012, 0x1078, 0x2f89, 0x0078, 0x2f87, 0x7073, 0x0000, 0x0f7f, - 0x007c, 0x707b, 0x0013, 0x1078, 0x32a4, 0x20a3, 0x1103, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x748e, 0x7064, 0xa005, 0x00c0, 0x2fa3, - 0x714c, 0xa186, 0xffff, 0x0040, 0x2fa3, 0x1078, 0x31d2, 0x0040, - 0x2fa3, 0x1078, 0x32c7, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x322e, - 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2fdd, 0x2011, 0x320e, - 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x2fdb, 0x2079, 0x7480, - 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2fdb, 0x7834, 0xa005, 0x00c0, - 0x2fdb, 0x7a38, 0xd2fc, 0x0040, 0x2fd5, 0x709c, 0xa005, 0x00c0, - 0x2fd5, 0x1078, 0x32c7, 0x709f, 0x0001, 0x707b, 0x0014, 0x1078, - 0x2fdf, 0x0078, 0x2fdd, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, - 0x0015, 0x1078, 0x32a4, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, - 0x2011, 0x748e, 0x7064, 0xa006, 0x00c0, 0x2ffb, 0x7150, 0xa186, - 0xffff, 0x0040, 0x2ffb, 0xa180, 0x2207, 0x200c, 0xa18c, 0xff00, - 0x810f, 0x1078, 0x31d2, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x322e, - 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x304c, 0x2011, 0x320e, - 0x1078, 0x42aa, 0xa086, 0x0014, 0x00c0, 0x304a, 0x2079, 0x7480, - 0x7a30, 0xa296, 0x1105, 0x00c0, 0x304a, 0x7834, 0x2011, 0x0100, - 0xa21e, 0x00c0, 0x3033, 0x7a38, 0xd2fc, 0x0040, 0x302f, 0x709c, - 0xa005, 0x00c0, 0x302f, 0x1078, 0x32c7, 0x709f, 0x0001, 0x7077, - 0x0001, 0x0078, 0x3044, 0xa005, 0x00c0, 0x304a, 0x7a38, 0xd2fc, - 0x0040, 0x3042, 0x709c, 0xa005, 0x00c0, 0x3042, 0x1078, 0x32c7, - 0x709f, 0x0001, 0x7077, 0x0000, 0x707b, 0x0016, 0x1078, 0x304e, - 0x0078, 0x304c, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x7480, 0x20a1, 0x020b, 0x20a9, 0x000e, - 0x53a6, 0x3430, 0x2011, 0x748e, 0x7074, 0xa005, 0x0040, 0x3064, - 0x707b, 0x0017, 0x0078, 0x3066, 0x707b, 0x001b, 0x7064, 0xa005, - 0x00c0, 0x3070, 0x1078, 0x313c, 0x0040, 0x3080, 0x0078, 0x307a, - 0x20a9, 0x0008, 0x2099, 0x748e, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x322e, 0x0078, 0x3082, - 0x1078, 0x2cf5, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x30a3, - 0x2011, 0x320e, 0x1078, 0x42aa, 0xa086, 0x0084, 0x00c0, 0x30a1, - 0x2079, 0x7480, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x30a1, 0x7834, - 0xa005, 0x00c0, 0x30a1, 0x707b, 0x0018, 0x1078, 0x30a5, 0x0078, - 0x30a3, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0019, 0x1078, - 0x32a4, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x748e, - 0x2039, 0x740e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514, - 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, - 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x740e, 0x2414, - 0xa38c, 0x0001, 0x0040, 0x30d0, 0xa294, 0xff00, 0x0078, 0x30d3, - 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, - 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, - 0x1078, 0x322e, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x3105, - 0x2011, 0x320e, 0x1078, 0x42aa, 0xa086, 0x0084, 0x00c0, 0x3103, - 0x2079, 0x7480, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x3103, 0x7834, - 0xa005, 0x00c0, 0x3103, 0x1078, 0x328a, 0x707b, 0x001a, 0x1078, - 0x3107, 0x0078, 0x3105, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, - 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7480, 0x20a1, - 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, - 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078, 0x322e, 0x007c, - 0x7070, 0xa005, 0x0040, 0x312c, 0x2011, 0x320e, 0x1078, 0x42aa, - 0x707b, 0x001c, 0x1078, 0x312d, 0x007c, 0x7073, 0x0000, 0x608b, - 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009, 0x07d0, 0x2011, - 0x320e, 0x1078, 0x429d, 0x007c, 0x087e, 0x097e, 0x2029, 0x7052, - 0x252c, 0x20a9, 0x0008, 0x2041, 0x740e, 0x28a0, 0x2099, 0x748e, - 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x3152, - 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, - 0x3164, 0xd5d4, 0x0040, 0x315f, 0x8210, 0x0078, 0x3160, 0x8211, - 0x00f0, 0x3152, 0x0078, 0x31c9, 0x82ff, 0x00c0, 0x3176, 0xd5d4, - 0x0040, 0x3170, 0xa1a6, 0x3fff, 0x0040, 0x315c, 0x0078, 0x3174, - 0xa1a6, 0x3fff, 0x0040, 0x31c9, 0xa18d, 0xc000, 0x20a9, 0x0010, - 0x2019, 0x0001, 0xd5d4, 0x0040, 0x317f, 0x2019, 0x0010, 0x2120, - 0xd5d4, 0x0040, 0x3186, 0x8423, 0x0078, 0x3187, 0x8424, 0x00c8, - 0x3194, 0xd5d4, 0x0040, 0x318f, 0x8319, 0x0078, 0x3190, 0x8318, - 0x00f0, 0x3180, 0x0078, 0x31c9, 0x23a8, 0x2021, 0x0001, 0x8426, - 0x8425, 0x00f0, 0x3198, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, - 0x31ac, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8, - 0xa5a8, 0x0010, 0x00f0, 0x31a8, 0x754e, 0xa5c8, 0x2207, 0x292c, - 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, - 0xa405, 0x201a, 0x7067, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, - 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, - 0x31cf, 0xa006, 0x0078, 0x31cf, 0xa006, 0x1078, 0x1288, 0x097f, - 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, - 0x0010, 0x0048, 0x31df, 0x8420, 0x8001, 0x0078, 0x31d7, 0x2118, - 0x84ff, 0x0040, 0x31e8, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x31e3, - 0x2021, 0x0001, 0x83ff, 0x0040, 0x31f1, 0x8423, 0x8319, 0x00c0, - 0x31ed, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3206, 0xa405, 0x203a, - 0x714e, 0xa1a0, 0x2207, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, - 0x0000, 0x65ea, 0x7067, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, - 0x2071, 0x7000, 0x706b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, - 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x50b0, 0x7004, 0xa084, - 0x4000, 0x0040, 0x321f, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, - 0x2091, 0x8000, 0x2071, 0x701e, 0x2073, 0x0000, 0x7843, 0x0090, - 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, - 0x8000, 0x2011, 0x71c0, 0x2013, 0x0000, 0x7073, 0x0000, 0x127f, - 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x50a7, - 0x2009, 0x07d0, 0x2011, 0x320e, 0x1078, 0x433a, 0x007c, 0x017e, - 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x00f7, 0x1078, - 0x32b0, 0x2061, 0x71c9, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, - 0x7000, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, - 0x0010, 0x2009, 0x001e, 0x2011, 0x326c, 0x1078, 0x429d, 0x127f, - 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x0100, 0x1078, 0x50b0, 0x2071, 0x0140, 0x7004, - 0xa084, 0x4000, 0x0040, 0x3280, 0x7003, 0x1000, 0x7003, 0x0000, - 0x2001, 0x0001, 0x1078, 0x1f8a, 0x1078, 0x3247, 0x127f, 0x007f, - 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x75c0, 0x2099, 0x748e, - 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x3290, 0x007c, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7400, 0x20a1, 0x020b, - 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x7480, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, - 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0x702a, 0x2004, - 0xa005, 0x00c0, 0x32c1, 0x6030, 0xa084, 0x00ff, 0xa105, 0x0078, - 0x32c3, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c, 0x017e, - 0x047e, 0x2001, 0x7052, 0x2004, 0xd0a4, 0x0040, 0x32da, 0xa006, - 0x2020, 0x2009, 0x002a, 0x1078, 0x6ecf, 0x2001, 0x700c, 0x200c, - 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2186, 0x047f, 0x017f, - 0x007c, 0x157e, 0x20a9, 0x007d, 0x2009, 0x7120, 0xa006, 0x200a, - 0x8108, 0x00f0, 0x32e7, 0x157f, 0x007c, 0x0d7e, 0x037e, 0x157e, - 0x137e, 0x147e, 0x2069, 0x7051, 0xa006, 0x6002, 0x6007, 0x0707, - 0x600a, 0x600e, 0x6012, 0xa198, 0x2207, 0x231c, 0xa39c, 0x00ff, - 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9, - 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e, - 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e, - 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, 0x608e, - 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x0d7e, 0x60a4, 0xa06d, - 0x0040, 0x332c, 0x1078, 0x12fb, 0x60a7, 0x0000, 0x60a8, 0xa06d, - 0x0040, 0x3334, 0x1078, 0x12fb, 0x60ab, 0x0000, 0x0d7f, 0xa006, - 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, - 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f, 0x007c, 0x127e, - 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, - 0x00c8, 0x33e5, 0xa18c, 0xff00, 0x810f, 0xa182, 0x007e, 0x00c8, - 0x33eb, 0x2001, 0x700c, 0x2004, 0xa084, 0x0003, 0x00c0, 0x33ce, - 0xa188, 0x7120, 0x2104, 0xa065, 0x0040, 0x33c4, 0x6004, 0xa084, - 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x33ca, 0x60a4, 0xa00d, 0x0040, - 0x3375, 0x1078, 0x370a, 0x0040, 0x33be, 0x60a8, 0xa00d, 0x0040, - 0x338f, 0x1078, 0x375a, 0x00c0, 0x338f, 0x694c, 0xd1fc, 0x00c0, - 0x3385, 0x1078, 0x347f, 0x0078, 0x33b9, 0x1078, 0x3450, 0x694c, - 0xd1ec, 0x00c0, 0x33b9, 0x1078, 0x35df, 0x0078, 0x33b9, 0x694c, - 0xa184, 0xa000, 0x0040, 0x33a9, 0xd1ec, 0x0040, 0x33a2, 0xd1fc, - 0x0040, 0x339e, 0x1078, 0x35f0, 0x0078, 0x33a5, 0x1078, 0x35f0, - 0x0078, 0x33a9, 0xd1fc, 0x0040, 0x33a9, 0x1078, 0x3450, 0x0078, - 0x33b9, 0x6050, 0xa00d, 0x0040, 0x33b4, 0x2d00, 0x200a, 0x6803, - 0x0000, 0x6052, 0x0078, 0x33b9, 0x2d00, 0x6052, 0x604e, 0x6803, - 0x0000, 0x1078, 0x4581, 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, - 0x2009, 0x0000, 0x0078, 0x33ef, 0x2001, 0x0028, 0x2009, 0x0000, - 0x0078, 0x33ef, 0xa082, 0x0006, 0x0048, 0x336d, 0x2009, 0x700c, - 0x210c, 0xd18c, 0x0040, 0x33d8, 0x2001, 0x0004, 0x0078, 0x33e1, - 0xd184, 0x0040, 0x33df, 0x2001, 0x0004, 0x0078, 0x33e1, 0x2001, - 0x0029, 0x2009, 0x0000, 0x0078, 0x33ef, 0x2001, 0x0029, 0x2009, - 0x0000, 0x0078, 0x33ef, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, - 0x127f, 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, - 0x00c8, 0x3435, 0xa18c, 0xff00, 0x810f, 0xa182, 0x007e, 0x00c8, - 0x3425, 0xa188, 0x7120, 0x2104, 0xa065, 0x0040, 0x3425, 0x6004, - 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x342b, 0x684c, 0xd0ec, - 0x0040, 0x3418, 0x1078, 0x35f0, 0x1078, 0x3450, 0x0078, 0x3420, - 0x1078, 0x3450, 0x684c, 0xd0fc, 0x0040, 0x3420, 0x1078, 0x35df, - 0x1078, 0x3638, 0xa006, 0x0078, 0x3439, 0x2001, 0x0028, 0x2009, - 0x0000, 0x0078, 0x3439, 0xa082, 0x0006, 0x0048, 0x340e, 0x2001, - 0x0029, 0x2009, 0x0000, 0x0078, 0x3439, 0x2001, 0x0029, 0x2009, - 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050, 0xa00d, - 0x0040, 0x3449, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x127f, - 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x3447, - 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x345c, 0x6802, - 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, - 0x0000, 0x0078, 0x345a, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d, - 0x0040, 0x3471, 0x6800, 0xa005, 0x00c0, 0x346f, 0x6052, 0x604e, - 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x347e, 0x6800, - 0xa005, 0x00c0, 0x347c, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803, - 0x0000, 0x6084, 0xa00d, 0x0040, 0x3489, 0x2d00, 0x200a, 0x6086, - 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x3488, 0x127e, 0x0c7e, - 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040, - 0x349c, 0xc285, 0x0078, 0x349d, 0xc284, 0x6202, 0x027f, 0x0c7f, - 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, - 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, - 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, - 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, - 0xa182, 0x007e, 0x0048, 0x34c8, 0xa085, 0x0001, 0x0078, 0x34e0, - 0xa190, 0x7120, 0x2204, 0xa065, 0x00c0, 0x34df, 0x017e, 0x0d7e, - 0x1078, 0x12c7, 0x2d60, 0x0d7f, 0x017f, 0x0040, 0x34c4, 0x2c00, - 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x1078, 0x32ed, 0xa006, - 0x027f, 0x007c, 0x027e, 0xa182, 0x007e, 0x0048, 0x34eb, 0xa085, - 0x0001, 0x0078, 0x34f8, 0x0d7e, 0xa190, 0x7120, 0x2204, 0xa06d, - 0x0040, 0x34f6, 0x2013, 0x0000, 0x1078, 0x12fb, 0x0d7f, 0xa006, - 0x027f, 0x007c, 0x017e, 0xa182, 0x007e, 0x0048, 0x3503, 0xa085, - 0x0001, 0x0078, 0x350a, 0xa188, 0x7120, 0x2104, 0xa065, 0x0040, - 0x34ff, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, + 0x1078, 0x30b0, 0x0078, 0x2cd6, 0x1078, 0x2b73, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2d20, 0x2011, 0x308c, 0x1078, 0x4026, + 0xa086, 0x0014, 0x00c0, 0x2d1c, 0x2079, 0x7080, 0x7a30, 0xa296, + 0x1105, 0x00c0, 0x2d1c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, + 0x2d05, 0x7a38, 0xd2fc, 0x0040, 0x2cfd, 0x709c, 0xa005, 0x00c0, + 0x2cfd, 0x1078, 0x3148, 0x709f, 0x0001, 0x7077, 0x0001, 0x707b, + 0x000a, 0x1078, 0x2d22, 0x0078, 0x2d20, 0xa005, 0x00c0, 0x2d1c, + 0x7a38, 0xd2fc, 0x0040, 0x2d14, 0x709c, 0xa005, 0x00c0, 0x2d14, + 0x1078, 0x3148, 0x709f, 0x0001, 0x7077, 0x0000, 0x707b, 0x000e, + 0x1078, 0x2da4, 0x0078, 0x2d20, 0x707b, 0x0002, 0x7073, 0x0000, + 0x0f7f, 0x007c, 0x707b, 0x000b, 0x2011, 0x700e, 0x22a0, 0x20a9, + 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, + 0x41a4, 0x1078, 0x3119, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x6030, + 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, + 0x0084, 0x1078, 0x30b0, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, + 0x2d66, 0x2011, 0x308c, 0x1078, 0x4026, 0xa086, 0x0084, 0x00c0, + 0x2d62, 0x2079, 0x7080, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x2d62, + 0x7834, 0xa005, 0x00c0, 0x2d62, 0x707b, 0x000c, 0x1078, 0x2d68, + 0x0078, 0x2d66, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, + 0x707b, 0x000d, 0x1078, 0x3119, 0x20a3, 0x1107, 0x20a3, 0x0000, + 0x2099, 0x708e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x0084, 0x1078, 0x30b0, 0x007c, 0x0f7e, 0x7070, + 0xa005, 0x0040, 0x2da2, 0x2011, 0x308c, 0x1078, 0x4026, 0xa086, + 0x0084, 0x00c0, 0x2d9e, 0x2079, 0x7080, 0x7a30, 0xa296, 0x1107, + 0x00c0, 0x2d9e, 0x7834, 0xa005, 0x00c0, 0x2d9e, 0x1078, 0x310b, + 0x707b, 0x000e, 0x1078, 0x2da4, 0x0078, 0x2da2, 0x707b, 0x0002, + 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000f, 0x7073, 0x0000, + 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, + 0x2009, 0x07d0, 0x2011, 0x308c, 0x1078, 0x4019, 0x007c, 0x7070, + 0xa005, 0x0040, 0x2dbf, 0x2011, 0x308c, 0x1078, 0x4026, 0x007c, + 0x707b, 0x0011, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7080, + 0x20a1, 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, + 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x30b0, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2e05, 0x2011, 0x308c, + 0x1078, 0x4026, 0xa086, 0x0014, 0x00c0, 0x2e03, 0x2079, 0x7080, + 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2e03, 0x7834, 0xa005, 0x00c0, + 0x2e03, 0x7a38, 0xd2fc, 0x0040, 0x2dfd, 0x709c, 0xa005, 0x00c0, + 0x2dfd, 0x1078, 0x3148, 0x709f, 0x0001, 0x707b, 0x0012, 0x1078, + 0x2e07, 0x0078, 0x2e05, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0013, 0x1078, 0x3125, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x708e, 0x7064, 0xa005, 0x00c0, 0x2e21, 0x714c, 0xa186, + 0xffff, 0x0040, 0x2e21, 0x1078, 0x3050, 0x0040, 0x2e21, 0x1078, + 0x3148, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x30b0, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2e5b, 0x2011, 0x308c, 0x1078, 0x4026, + 0xa086, 0x0014, 0x00c0, 0x2e59, 0x2079, 0x7080, 0x7a30, 0xa296, + 0x1104, 0x00c0, 0x2e59, 0x7834, 0xa005, 0x00c0, 0x2e59, 0x7a38, + 0xd2fc, 0x0040, 0x2e53, 0x709c, 0xa005, 0x00c0, 0x2e53, 0x1078, + 0x3148, 0x709f, 0x0001, 0x707b, 0x0014, 0x1078, 0x2e5d, 0x0078, + 0x2e5b, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0015, 0x1078, + 0x3125, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x708e, + 0x7064, 0xa006, 0x00c0, 0x2e79, 0x7150, 0xa186, 0xffff, 0x0040, + 0x2e79, 0xa180, 0x2154, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, + 0x3050, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x30b0, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2eca, 0x2011, 0x308c, 0x1078, 0x4026, + 0xa086, 0x0014, 0x00c0, 0x2ec8, 0x2079, 0x7080, 0x7a30, 0xa296, + 0x1105, 0x00c0, 0x2ec8, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, + 0x2eb1, 0x7a38, 0xd2fc, 0x0040, 0x2ead, 0x709c, 0xa005, 0x00c0, + 0x2ead, 0x1078, 0x3148, 0x709f, 0x0001, 0x7077, 0x0001, 0x0078, + 0x2ec2, 0xa005, 0x00c0, 0x2ec8, 0x7a38, 0xd2fc, 0x0040, 0x2ec0, + 0x709c, 0xa005, 0x00c0, 0x2ec0, 0x1078, 0x3148, 0x709f, 0x0001, + 0x7077, 0x0000, 0x707b, 0x0016, 0x1078, 0x2ecc, 0x0078, 0x2eca, + 0x7073, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x2099, 0x7080, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, + 0x2011, 0x708e, 0x7074, 0xa005, 0x0040, 0x2ee2, 0x707b, 0x0017, + 0x0078, 0x2ee4, 0x707b, 0x001b, 0x7064, 0xa005, 0x00c0, 0x2eee, + 0x1078, 0x2fba, 0x0040, 0x2efe, 0x0078, 0x2ef8, 0x20a9, 0x0008, + 0x2099, 0x708e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x60c3, 0x0014, 0x1078, 0x30b0, 0x0078, 0x2f00, 0x1078, 0x2b73, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f21, 0x2011, 0x308c, + 0x1078, 0x4026, 0xa086, 0x0084, 0x00c0, 0x2f1f, 0x2079, 0x7080, + 0x7a30, 0xa296, 0x1106, 0x00c0, 0x2f1f, 0x7834, 0xa005, 0x00c0, + 0x2f1f, 0x707b, 0x0018, 0x1078, 0x2f23, 0x0078, 0x2f21, 0x7073, + 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0019, 0x1078, 0x3125, 0x20a3, + 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x708e, 0x2039, 0x700e, + 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514, 0x8207, 0xa084, + 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, + 0x6030, 0x2310, 0x8214, 0xa2a0, 0x700e, 0x2414, 0xa38c, 0x0001, + 0x0040, 0x2f4e, 0xa294, 0xff00, 0x0078, 0x2f51, 0xa294, 0x00ff, + 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x30b0, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f83, 0x2011, 0x308c, + 0x1078, 0x4026, 0xa086, 0x0084, 0x00c0, 0x2f81, 0x2079, 0x7080, + 0x7a30, 0xa296, 0x1107, 0x00c0, 0x2f81, 0x7834, 0xa005, 0x00c0, + 0x2f81, 0x1078, 0x310b, 0x707b, 0x001a, 0x1078, 0x2f85, 0x0078, + 0x2f83, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x001b, 0x20e1, + 0x9080, 0x20e1, 0x4000, 0x2099, 0x7080, 0x20a1, 0x020b, 0x7470, + 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, + 0x53a6, 0x60c3, 0x0084, 0x1078, 0x30b0, 0x007c, 0x7070, 0xa005, + 0x0040, 0x2faa, 0x2011, 0x308c, 0x1078, 0x4026, 0x707b, 0x001c, + 0x1078, 0x2fab, 0x007c, 0x7073, 0x0000, 0x608b, 0xbc85, 0x608f, + 0xb5b5, 0x6043, 0x0001, 0x2009, 0x07d0, 0x2011, 0x308c, 0x1078, + 0x4019, 0x007c, 0x087e, 0x097e, 0x2029, 0x6c52, 0x252c, 0x20a9, + 0x0008, 0x2041, 0x700e, 0x28a0, 0x2099, 0x708e, 0x53a3, 0x20a9, + 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x2fd0, 0x2011, 0x0000, + 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, 0x2fe2, 0xd5d4, + 0x0040, 0x2fdd, 0x8210, 0x0078, 0x2fde, 0x8211, 0x00f0, 0x2fd0, + 0x0078, 0x3047, 0x82ff, 0x00c0, 0x2ff4, 0xd5d4, 0x0040, 0x2fee, + 0xa1a6, 0x3fff, 0x0040, 0x2fda, 0x0078, 0x2ff2, 0xa1a6, 0x3fff, + 0x0040, 0x3047, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, + 0xd5d4, 0x0040, 0x2ffd, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0040, + 0x3004, 0x8423, 0x0078, 0x3005, 0x8424, 0x00c8, 0x3012, 0xd5d4, + 0x0040, 0x300d, 0x8319, 0x0078, 0x300e, 0x8318, 0x00f0, 0x2ffe, + 0x0078, 0x3047, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x00f0, + 0x3016, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, 0x302a, 0x007e, + 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8, 0xa5a8, 0x0010, + 0x00f0, 0x3026, 0x754e, 0xa5c8, 0x2154, 0x292c, 0xa5ac, 0x00ff, + 0x6532, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, + 0x7067, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, 0x304d, 0xa006, + 0x0078, 0x304d, 0xa006, 0x1078, 0x126a, 0x097f, 0x087f, 0x007c, + 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, + 0x305d, 0x8420, 0x8001, 0x0078, 0x3055, 0x2118, 0x84ff, 0x0040, + 0x3066, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x3061, 0x2021, 0x0001, + 0x83ff, 0x0040, 0x306f, 0x8423, 0x8319, 0x00c0, 0x306b, 0xa238, + 0x2704, 0xa42c, 0x00c0, 0x3084, 0xa405, 0x203a, 0x714e, 0xa1a0, + 0x2154, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, + 0x7067, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6c00, + 0x706b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, 0x0100, + 0x2071, 0x0140, 0x1078, 0x4e17, 0x7004, 0xa084, 0x4000, 0x0040, + 0x309d, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, 0x2091, 0x8000, + 0x2071, 0x6c00, 0x7003, 0x0001, 0x2071, 0x6c1e, 0x2073, 0x0000, + 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c, + 0x127e, 0x2091, 0x8000, 0x2011, 0x6dba, 0x2013, 0x0000, 0x7073, + 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, + 0x1078, 0x4e0e, 0x2009, 0x07d0, 0x2011, 0x308c, 0x1078, 0x40b6, + 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009, + 0x00f7, 0x1078, 0x3131, 0x2061, 0x6dc3, 0x601b, 0x0000, 0x601f, + 0x0000, 0x2061, 0x6c00, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, + 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x30ee, 0x1078, + 0x4019, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e, + 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, 0x4e17, 0x2071, + 0x0140, 0xa084, 0x4000, 0x0040, 0x3101, 0x7003, 0x1000, 0x7003, + 0x0000, 0x2001, 0x0001, 0x1078, 0x1f0f, 0x1078, 0x30c9, 0x127f, + 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x71c0, 0x2099, + 0x708e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x3111, + 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7000, 0x20a1, + 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1, + 0x4000, 0x2099, 0x7080, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, + 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0x6c2a, + 0x2004, 0xa005, 0x00c0, 0x3142, 0x6030, 0xa084, 0x00ff, 0xa105, + 0x0078, 0x3144, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c, + 0x017e, 0x047e, 0x2001, 0x6c52, 0x2004, 0xd0a4, 0x0040, 0x315b, + 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0x6b0a, 0x2001, 0x6c0c, + 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2103, 0x047f, + 0x017f, 0x007c, 0x157e, 0x20a9, 0x007d, 0x2009, 0x6d20, 0xa006, + 0x200a, 0x8108, 0x00f0, 0x3168, 0x157f, 0x007c, 0x0d7e, 0x037e, + 0x157e, 0x137e, 0x147e, 0x2069, 0x6c51, 0xa006, 0x6002, 0x6007, + 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2154, 0x231c, 0xa39c, + 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, + 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, + 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, + 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, + 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x604a, 0x6810, + 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, + 0x137f, 0x157f, 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, + 0x6944, 0xa1b4, 0x00ff, 0xa682, 0x0010, 0x00c8, 0x325a, 0xa18c, + 0xff00, 0x810f, 0xa182, 0x007e, 0x00c8, 0x3260, 0x2001, 0x6c0c, + 0x2004, 0xa084, 0x0003, 0x00c0, 0x3243, 0xa188, 0x6d20, 0x2104, + 0xa065, 0x0040, 0x3239, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, + 0x00c0, 0x323f, 0x6078, 0xa00d, 0x0040, 0x31e4, 0xa680, 0x6b9e, + 0x2004, 0xa10c, 0x00c0, 0x3233, 0x607c, 0xa00d, 0x0040, 0x3200, + 0xa680, 0x6b9e, 0x2004, 0xa10c, 0x0040, 0x3200, 0x694c, 0xd1fc, + 0x00c0, 0x31f6, 0x1078, 0x32f3, 0x0078, 0x322e, 0x1078, 0x32c4, + 0x694c, 0xd1ec, 0x00c0, 0x322e, 0x1078, 0x3413, 0x0078, 0x322e, + 0x694c, 0xa184, 0xa000, 0x0040, 0x321e, 0xd1ec, 0x0040, 0x3217, + 0xd1fc, 0x0040, 0x320f, 0x1078, 0x342a, 0x0078, 0x321a, 0xa680, + 0x6b9e, 0x200c, 0x607c, 0xa105, 0x607e, 0x0078, 0x321e, 0xd1fc, + 0x0040, 0x321e, 0x1078, 0x32c4, 0x0078, 0x322e, 0x6050, 0xa00d, + 0x0040, 0x3229, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, + 0x322e, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x42e3, + 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, + 0x3264, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x3264, 0xa082, + 0x0006, 0x0048, 0x31da, 0x2009, 0x6c0c, 0x210c, 0xd18c, 0x0040, + 0x324d, 0x2001, 0x0004, 0x0078, 0x3256, 0xd184, 0x0040, 0x3254, + 0x2001, 0x0004, 0x0078, 0x3256, 0x2001, 0x0029, 0x2009, 0x0000, + 0x0078, 0x3264, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3264, + 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, + 0xa1b4, 0x00ff, 0xa682, 0x0010, 0x00c8, 0x32a9, 0xa18c, 0xff00, + 0x810f, 0xa182, 0x007e, 0x00c8, 0x3299, 0xa188, 0x6d20, 0x2104, + 0xa065, 0x0040, 0x3299, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, + 0x00c0, 0x329f, 0x684c, 0xd0ec, 0x0040, 0x328c, 0x1078, 0x342a, + 0x1078, 0x32c4, 0x0078, 0x3294, 0x1078, 0x32c4, 0x684c, 0xd0fc, + 0x0040, 0x3294, 0x1078, 0x3413, 0x1078, 0x343e, 0xa006, 0x0078, + 0x32ad, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x32ad, 0xa082, + 0x0006, 0x0048, 0x3282, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, + 0x32ad, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, + 0x2091, 0x8000, 0x6050, 0xa00d, 0x0040, 0x32bd, 0x2d00, 0x200a, + 0x6803, 0x0000, 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, + 0x6803, 0x0000, 0x0078, 0x32bb, 0x127e, 0x2091, 0x8000, 0x604c, + 0xa005, 0x0040, 0x32d0, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, + 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x32ce, 0x127e, + 0x2091, 0x8000, 0x604c, 0xa06d, 0x0040, 0x32e5, 0x6800, 0xa005, + 0x00c0, 0x32e3, 0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, + 0xa06d, 0x0040, 0x32f2, 0x6800, 0xa005, 0x00c0, 0x32f0, 0x6052, + 0x604e, 0xad05, 0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, + 0x32fd, 0x2d00, 0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, + 0x0078, 0x32fc, 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, + 0x2260, 0x6200, 0xa005, 0x0040, 0x3310, 0xc285, 0x0078, 0x3311, + 0xc284, 0x6202, 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, + 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, + 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, + 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, + 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x007e, 0x0048, 0x333c, + 0xa085, 0x0001, 0x0078, 0x3350, 0xa190, 0x6d20, 0x2204, 0xa065, + 0x00c0, 0x334f, 0x017e, 0x0d7e, 0x1078, 0x12a7, 0x2d60, 0x0d7f, + 0x017f, 0x0040, 0x3338, 0x2c00, 0x2012, 0x1078, 0x316e, 0xa006, + 0x027f, 0x007c, 0x027e, 0xa182, 0x007e, 0x0048, 0x335b, 0xa085, + 0x0001, 0x0078, 0x3368, 0x0d7e, 0xa190, 0x6d20, 0x2204, 0xa06d, + 0x0040, 0x3366, 0x2013, 0x0000, 0x1078, 0x12db, 0x0d7f, 0xa006, + 0x027f, 0x007c, 0x017e, 0xa182, 0x007e, 0x0048, 0x3373, 0xa085, + 0x0001, 0x0078, 0x337a, 0xa188, 0x6d20, 0x2104, 0xa065, 0x0040, + 0x336f, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, 0x2069, - 0x748e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0048, - 0x3522, 0x603a, 0x6814, 0x6066, 0x2099, 0x7496, 0xac88, 0x000a, - 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x749a, 0xac88, 0x0006, - 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x74ae, 0x6808, 0x606a, - 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076, 0xa182, 0x0211, - 0x00c8, 0x3546, 0x2009, 0x0008, 0x0078, 0x3570, 0xa182, 0x0259, - 0x00c8, 0x354e, 0x2009, 0x0007, 0x0078, 0x3570, 0xa182, 0x02c1, - 0x00c8, 0x3556, 0x2009, 0x0006, 0x0078, 0x3570, 0xa182, 0x0349, - 0x00c8, 0x355e, 0x2009, 0x0005, 0x0078, 0x3570, 0xa182, 0x0421, - 0x00c8, 0x3566, 0x2009, 0x0004, 0x0078, 0x3570, 0xa182, 0x0581, - 0x00c8, 0x356e, 0x2009, 0x0003, 0x0078, 0x3570, 0x2009, 0x0002, - 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x0e7e, 0x2071, - 0x748d, 0x2e04, 0x6896, 0x2071, 0x748e, 0x7004, 0x689a, 0x701c, - 0x689e, 0x0e7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, - 0xa06d, 0x0040, 0x35a7, 0x6900, 0x81ff, 0x00c0, 0x35bb, 0x6a04, - 0xa282, 0x0010, 0x00c8, 0x35c0, 0xad88, 0x0004, 0x20a9, 0x0010, - 0x2104, 0xa086, 0xffff, 0x0040, 0x35a2, 0x8108, 0x00f0, 0x3598, - 0x1078, 0x1288, 0x260a, 0x8210, 0x6a06, 0x0078, 0x35bb, 0x1078, - 0x12c7, 0x0040, 0x35c0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88, - 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x35b3, - 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, - 0xa006, 0x0078, 0x35bd, 0x127e, 0x2091, 0x8000, 0x1078, 0x3703, - 0x00c0, 0x35dd, 0x200b, 0xffff, 0x0d7e, 0x60a4, 0x2068, 0x6804, - 0xa08a, 0x0002, 0x0048, 0x35d8, 0x8001, 0x6806, 0x0078, 0x35dc, - 0x1078, 0x12fb, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, - 0x2091, 0x8000, 0x1078, 0x376f, 0x0078, 0x35e8, 0x1078, 0x343b, - 0x1078, 0x367c, 0x00c0, 0x35e6, 0x1078, 0x3638, 0x127f, 0x007c, - 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x3614, - 0x6950, 0x81ff, 0x00c0, 0x3628, 0x6a54, 0xa282, 0x0010, 0x00c8, - 0x3635, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, - 0x0040, 0x360f, 0x8108, 0x00f0, 0x3605, 0x1078, 0x1288, 0x260a, - 0x8210, 0x6a56, 0x0078, 0x3628, 0x1078, 0x12c7, 0x0040, 0x3635, - 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, - 0x200b, 0xffff, 0x8108, 0x00f0, 0x3620, 0x6857, 0x0001, 0x6e62, - 0x0078, 0x362c, 0x1078, 0x347f, 0x1078, 0x3642, 0x00c0, 0x362a, - 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x3632, - 0x127e, 0x2091, 0x8000, 0x1078, 0x4581, 0x127f, 0x007c, 0xa01e, - 0x0078, 0x3644, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, - 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x3662, 0x8dff, 0x0040, - 0x3677, 0x83ff, 0x0040, 0x365a, 0x6848, 0xa606, 0x0040, 0x3667, - 0x0078, 0x3662, 0x683c, 0xa406, 0x00c0, 0x3662, 0x6840, 0xa506, - 0x0040, 0x3667, 0x2d08, 0x6800, 0x2068, 0x0078, 0x364e, 0x6a00, - 0x604c, 0xad06, 0x00c0, 0x366f, 0x624e, 0x0078, 0x3672, 0xa180, - 0x0000, 0x2202, 0x82ff, 0x00c0, 0x3677, 0x6152, 0x8dff, 0x127f, - 0x007c, 0xa01e, 0x0078, 0x367e, 0x2019, 0x0001, 0xa00e, 0x6080, - 0x2068, 0x8dff, 0x0040, 0x36aa, 0x83ff, 0x0040, 0x368d, 0x6848, - 0xa606, 0x0040, 0x369a, 0x0078, 0x3695, 0x683c, 0xa406, 0x00c0, - 0x3695, 0x6840, 0xa506, 0x0040, 0x369a, 0x2d08, 0x6800, 0x2068, - 0x0078, 0x3681, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x36a2, 0x6282, - 0x0078, 0x36a5, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x36aa, - 0x6186, 0x8dff, 0x007c, 0x1078, 0x3703, 0x00c0, 0x36b1, 0x2011, - 0x0001, 0x1078, 0x3753, 0x00c0, 0x36b7, 0xa295, 0x0002, 0x007c, - 0x1078, 0x378b, 0x0040, 0x36c0, 0x1078, 0x63e8, 0x0078, 0x36c2, - 0xa085, 0x0001, 0x007c, 0x1078, 0x378b, 0x0040, 0x36cb, 0x1078, - 0x6377, 0x0078, 0x36cd, 0xa085, 0x0001, 0x007c, 0x1078, 0x378b, - 0x0040, 0x36d6, 0x1078, 0x63bd, 0x0078, 0x36d8, 0xa085, 0x0001, - 0x007c, 0x1078, 0x378b, 0x0040, 0x36e1, 0x1078, 0x6393, 0x0078, - 0x36e3, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, - 0x8000, 0x6080, 0xa06d, 0x0040, 0x36fb, 0x6800, 0x007e, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x64f5, 0x1078, 0x3840, - 0x007f, 0x0078, 0x36ea, 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, - 0x007f, 0x127f, 0x007c, 0x60a4, 0xa00d, 0x00c0, 0x370a, 0xa085, - 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7000, 0xa005, 0x00c0, 0x371d, - 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606, 0x0040, 0x371d, - 0x8108, 0x00f0, 0x3714, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0d7e, - 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x372d, 0x1078, - 0x12c7, 0x0040, 0x373f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807, - 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, - 0x00f0, 0x3735, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, - 0x0078, 0x373c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, - 0x0040, 0x3750, 0x60a7, 0x0000, 0x1078, 0x12fb, 0xa085, 0x0001, - 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x375a, 0xa085, - 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x376d, - 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x376d, - 0x8108, 0x00f0, 0x3764, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3753, 0x00c0, 0x3789, 0x200b, 0xffff, - 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x3784, - 0x8001, 0x6856, 0x0078, 0x3788, 0x1078, 0x12fb, 0x60ab, 0x0000, - 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x2079, - 0x7051, 0x7804, 0xd0a4, 0x0040, 0x37b7, 0x157e, 0x0c7e, 0x20a9, - 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34fa, 0x00c0, 0x37ab, - 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x37ab, - 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0, 0x379b, 0x0c7f, - 0x157f, 0x2009, 0x07d0, 0x2011, 0x37b9, 0x1078, 0x433a, 0x0f7f, - 0x007c, 0x2011, 0x37b9, 0x1078, 0x42aa, 0x157e, 0x0c7e, 0x20a9, - 0x007e, 0x2009, 0x0000, 0x017e, 0x1078, 0x34fa, 0x00c0, 0x37e5, - 0x6000, 0xd0ec, 0x0040, 0x37e5, 0x047e, 0x62a0, 0xa294, 0x00ff, - 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x6ecf, 0x6000, 0xc0e5, - 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x469f, 0x1078, 0x45e2, - 0x2009, 0x0000, 0x1078, 0x6d09, 0x047f, 0x017f, 0x8108, 0x00f0, - 0x37c3, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018, 0x2060, 0x6000, - 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x70ff, 0x7003, 0x0001, - 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, - 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020, - 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x70ff, - 0x684c, 0xa005, 0x00c0, 0x381b, 0x7028, 0xc085, 0x702a, 0xa085, - 0x0001, 0x0078, 0x383e, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, - 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, - 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, - 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, 0x7372, - 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x0e7f, 0x007c, - 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3891, 0x6804, 0xa00d, 0x0040, - 0x385f, 0x0d7e, 0x0e7e, 0x2071, 0x7000, 0x027e, 0xa016, 0x702c, - 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x00c0, 0x3850, - 0x702e, 0x7098, 0xa200, 0x709a, 0x027f, 0x0e7f, 0x0d7f, 0x2071, - 0x70ff, 0x701c, 0xa005, 0x00c0, 0x38a2, 0x0068, 0x38a0, 0x2071, - 0x7051, 0x7004, 0xd09c, 0x0040, 0x38a0, 0x6934, 0xa186, 0x0103, - 0x00c0, 0x38b3, 0x6948, 0x6844, 0xa105, 0x00c0, 0x3893, 0x2009, - 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x38a0, 0x7122, - 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, - 0x2071, 0x7000, 0x702c, 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, - 0x709a, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0, 0x38a0, - 0x6868, 0xa005, 0x00c0, 0x38a0, 0x2009, 0x8020, 0x0078, 0x3879, - 0x2071, 0x70ff, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012, - 0x7018, 0xa06d, 0x711a, 0x0040, 0x38b0, 0x6902, 0x0078, 0x38b1, - 0x711e, 0x0078, 0x3891, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, - 0x38c1, 0xa186, 0x001e, 0x0040, 0x38c1, 0xa18e, 0x001f, 0x00c0, - 0x38a0, 0x684c, 0xd0cc, 0x0040, 0x38a0, 0x6850, 0xa084, 0x00ff, - 0xa086, 0x0001, 0x00c0, 0x38a0, 0x2009, 0x8021, 0x0078, 0x3879, - 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, - 0x2001, 0x0000, 0x40a4, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, - 0x70ff, 0x7004, 0x0079, 0x38e4, 0x38ec, 0x38fb, 0x398b, 0x398c, - 0x399c, 0x39a2, 0x38ed, 0x3979, 0x007c, 0x127e, 0x2091, 0x8000, - 0x0068, 0x38fa, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, - 0x7007, 0x0001, 0x127f, 0x701c, 0xa06d, 0x0040, 0x3978, 0x0e7e, - 0x2071, 0x7051, 0x7004, 0xd09c, 0x0040, 0x395a, 0x6934, 0xa186, - 0x0103, 0x00c0, 0x3930, 0x6948, 0x6844, 0xa105, 0x00c0, 0x394d, - 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068, 0x392c, 0x2071, - 0x0000, 0x7018, 0xd084, 0x00c0, 0x392c, 0x7122, 0x683c, 0x7026, - 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x0e7f, - 0x1078, 0x39d5, 0x0078, 0x3978, 0x127f, 0x0e7f, 0x0078, 0x3978, - 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x393e, 0xa186, 0x001e, - 0x0040, 0x393e, 0xa18e, 0x001f, 0x00c0, 0x395a, 0x684c, 0xd0cc, - 0x0040, 0x395a, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, - 0x395a, 0x2009, 0x8021, 0x0078, 0x3912, 0x6844, 0xa086, 0x0100, - 0x00c0, 0x395a, 0x6868, 0xa005, 0x00c0, 0x395a, 0x2009, 0x8020, - 0x0078, 0x3912, 0x0e7f, 0x1078, 0x39e9, 0x0040, 0x3978, 0x700f, - 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x00c0, 0x396f, - 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x396f, 0x710e, 0x7007, - 0x0003, 0x1078, 0x3a09, 0x7050, 0xa086, 0x0100, 0x0040, 0x398c, - 0x007c, 0x701c, 0xa06d, 0x0040, 0x398a, 0x1078, 0x39e9, 0x0040, - 0x398a, 0x7007, 0x0003, 0x1078, 0x3a09, 0x7050, 0xa086, 0x0100, - 0x0040, 0x398c, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100, 0x00c0, - 0x3995, 0x7007, 0x0004, 0x0078, 0x399c, 0xa086, 0x0200, 0x00c0, - 0x399b, 0x7007, 0x0005, 0x007c, 0x1078, 0x39a3, 0x7006, 0x1078, - 0x39d5, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, - 0x39b0, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0078, 0x39ba, - 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x39ba, 0x7070, 0xa081, - 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e, 0x00c0, 0x39ce, - 0x127e, 0x2091, 0x8000, 0x0068, 0x39d1, 0x2001, 0x000d, 0x2102, - 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c, 0x2001, 0x0007, - 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, - 0x39e8, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, - 0x701e, 0xa005, 0x00c0, 0x39e5, 0x701a, 0x127f, 0x1078, 0x12fb, - 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x39f8, - 0x2304, 0x230c, 0xa10e, 0x0040, 0x39f8, 0xa006, 0x0078, 0x3a08, - 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x3a02, 0x2300, 0xa005, - 0x0078, 0x3a08, 0x0048, 0x3a07, 0xa302, 0x0078, 0x3a08, 0x8002, - 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, - 0x127e, 0x2091, 0x8000, 0x2009, 0x71d9, 0x2104, 0xc08d, 0x200a, - 0x127f, 0x1078, 0x134c, 0x007c, 0x2071, 0x70cd, 0x7003, 0x0000, - 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, - 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, - 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, - 0x2071, 0x70cd, 0x6848, 0xa005, 0x00c0, 0x3a45, 0x7028, 0xc085, - 0x702a, 0xa085, 0x0001, 0x0078, 0x3a6a, 0x6a50, 0x7236, 0x6b54, - 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, - 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, - 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, - 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, - 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0x70cd, 0x7004, - 0x1079, 0x3aca, 0x700c, 0x0079, 0x3a75, 0x3a7a, 0x3a6f, 0x3a6f, - 0x3a6f, 0x3a6f, 0x007c, 0x700c, 0x0079, 0x3a7e, 0x3a83, 0x3ac8, - 0x3ac8, 0x3ac9, 0x3ac9, 0x7830, 0x7930, 0xa106, 0x0040, 0x3a8d, - 0x7830, 0x7930, 0xa106, 0x00c0, 0x3ab3, 0x7030, 0xa10a, 0x0040, - 0x3ab3, 0x00c8, 0x3a95, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, - 0x3ab4, 0x1078, 0x12c7, 0x0040, 0x3ab3, 0x2d00, 0x705a, 0x7063, - 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, - 0x8000, 0x2009, 0x71d9, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, - 0x127f, 0x1078, 0x134c, 0x007c, 0x1078, 0x12c7, 0x0040, 0x3ab3, - 0x2d00, 0x705a, 0x1078, 0x12c7, 0x00c0, 0x3ac0, 0x0078, 0x3a9f, - 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x3aa3, - 0x007c, 0x007c, 0x3adb, 0x3adc, 0x3b13, 0x3b14, 0x3ac8, 0x3b4a, - 0x3b4f, 0x3b86, 0x3b87, 0x3ba2, 0x3ba3, 0x3ba4, 0x3ba5, 0x3ba6, - 0x3ba7, 0x3c10, 0x3c3a, 0x007c, 0x700c, 0x0079, 0x3adf, 0x3ae4, - 0x3ae7, 0x3af7, 0x3b12, 0x3b12, 0x1078, 0x3a7b, 0x007c, 0x127e, - 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x3f1c, 0x0040, 0x3af4, - 0x2091, 0x8000, 0x1078, 0x3a7b, 0x0d7f, 0x0078, 0x3b00, 0x127e, - 0x8001, 0x700e, 0x1078, 0x3f1c, 0x7058, 0x2068, 0x7084, 0x705a, - 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, - 0x0020, 0x00c8, 0x3b0f, 0x1079, 0x3b2a, 0x127f, 0x007c, 0x127f, - 0x1078, 0x3ba8, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0x70cd, - 0x700c, 0x0079, 0x3b1b, 0x3b20, 0x3b20, 0x3b20, 0x3b22, 0x3b26, - 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3b28, 0x700f, 0x0002, - 0x0e7f, 0x007c, 0x3ba8, 0x3ba8, 0x3bc4, 0x3ba8, 0x3caf, 0x3ba8, - 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3bc4, 0x3cee, 0x3d38, 0x3d91, - 0x3da5, 0x3ba8, 0x3ba8, 0x3be0, 0x3bc4, 0x3ba8, 0x3ba8, 0x3bf6, - 0x3e30, 0x3e4e, 0x3ba8, 0x3be0, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, - 0x3bf6, 0x3e4e, 0x7020, 0x2068, 0x1078, 0x12fb, 0x007c, 0x700c, - 0x0079, 0x3b52, 0x3b57, 0x3b5a, 0x3b6a, 0x3b85, 0x3b85, 0x1078, - 0x3a7b, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, - 0x3f1c, 0x0040, 0x3b67, 0x2091, 0x8000, 0x1078, 0x3a7b, 0x0d7f, - 0x0078, 0x3b73, 0x127e, 0x8001, 0x700e, 0x1078, 0x3f1c, 0x7058, - 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, - 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3b82, 0x1079, 0x3b88, - 0x127f, 0x007c, 0x127f, 0x1078, 0x3ba8, 0x007c, 0x007c, 0x007c, - 0x3ba8, 0x3bc4, 0x3c99, 0x3ba8, 0x3bc4, 0x3ba8, 0x3bc4, 0x3bc4, - 0x3ba8, 0x3bc4, 0x3c99, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, - 0x3ba8, 0x3bc4, 0x3c99, 0x3ba8, 0x3ba8, 0x3bc4, 0x3ba8, 0x3ba8, - 0x3ba8, 0x3bc4, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, - 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3840, 0x127f, 0x007c, 0x7007, 0x0001, - 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, - 0x1078, 0x3840, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3840, - 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, - 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3840, 0x127f, 0x007c, - 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3bb6, 0x8001, 0x00c0, - 0x3bed, 0x7007, 0x0001, 0x0078, 0x3c76, 0x7007, 0x0006, 0x7012, - 0x2d00, 0x7016, 0x701a, 0x704b, 0x3c76, 0x007c, 0x2d00, 0x7016, - 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0x70f8, - 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8, 0x3bd2, 0x6884, - 0xa08a, 0x0003, 0x00c8, 0x3bd2, 0xa080, 0x3c67, 0x2004, 0x70c6, - 0x7010, 0xa015, 0x0040, 0x3c5a, 0x1078, 0x12c7, 0x00c0, 0x3c1b, - 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, - 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x3c2a, - 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, - 0x0040, 0x3c33, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, - 0x1078, 0x1332, 0x7090, 0xa08e, 0x0100, 0x0040, 0x3c4e, 0xa086, - 0x0200, 0x0040, 0x3c46, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, - 0x1078, 0x12fb, 0x7014, 0x2068, 0x0078, 0x3bd2, 0x7020, 0x2068, - 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, - 0x0078, 0x3c10, 0x7014, 0x2068, 0x7007, 0x0001, 0x6834, 0xa084, - 0x00ff, 0xa086, 0x001e, 0x0040, 0x3e6b, 0x0078, 0x3c76, 0x3c6a, - 0x3c6e, 0x3c72, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f, - 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006, 0x2009, 0x702a, - 0x210c, 0x81ff, 0x00c0, 0x3c93, 0x6838, 0xa084, 0x00ff, 0x683a, - 0x6853, 0x0000, 0x1078, 0x3347, 0x00c0, 0x3c87, 0x007c, 0x1078, - 0x38d0, 0x127e, 0x2091, 0x8000, 0x1078, 0x64f5, 0x1078, 0x3840, - 0x127f, 0x0078, 0x3c86, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, - 0x3c87, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a, 0x7010, - 0x8001, 0x7012, 0x0040, 0x3ca8, 0x7007, 0x0006, 0x0078, 0x3cae, - 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a, 0x007c, 0x7007, - 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, - 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x3cd8, 0x2009, 0x0000, - 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x3cd8, 0xa005, 0x00c0, - 0x3ceb, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x34fa, 0x00c0, - 0x3ceb, 0x067e, 0x6e50, 0x1078, 0x35c3, 0x067f, 0x0078, 0x3ceb, - 0x047e, 0x2011, 0x700c, 0x2224, 0xc484, 0xc48c, 0x2412, 0x047f, - 0x0c7e, 0x1078, 0x34fa, 0x00c0, 0x3ce7, 0x1078, 0x3742, 0x8108, - 0x00f0, 0x3ce1, 0x0c7f, 0x1078, 0x12fb, 0x007c, 0x127e, 0x2091, - 0x8000, 0x7007, 0x0001, 0x2001, 0x7052, 0x2004, 0xd0a4, 0x0040, - 0x3d2f, 0x2009, 0x0000, 0x1078, 0x3f38, 0x6100, 0xd184, 0x0040, - 0x3d14, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x3d32, 0x6000, 0xd084, - 0x0040, 0x3d2f, 0x6004, 0xa005, 0x00c0, 0x3d35, 0x6003, 0x0000, - 0x600b, 0x0000, 0x0078, 0x3d2c, 0x2011, 0x0001, 0x6860, 0xa005, - 0x00c0, 0x3d1c, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, - 0x00ff, 0x0040, 0x3d2f, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, - 0x0040, 0x3d2f, 0x600a, 0x6202, 0x127f, 0x0078, 0x3f0b, 0x127f, - 0x0078, 0x3f03, 0x127f, 0x0078, 0x3efb, 0x127f, 0x0078, 0x3eff, - 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7052, 0x2004, - 0xd0a4, 0x0040, 0x3d8e, 0x2009, 0x0000, 0x1078, 0x3f38, 0x6000, - 0xa084, 0x0001, 0x0040, 0x3d8e, 0x6204, 0x6308, 0x6c48, 0xa484, - 0x0003, 0x0040, 0x3d66, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0, - 0x3d5f, 0x2100, 0xa210, 0x0048, 0x3d8b, 0x0078, 0x3d66, 0x8001, - 0x00c0, 0x3d8b, 0x2100, 0xa212, 0x0048, 0x3d8b, 0xa484, 0x000c, - 0x0040, 0x3d80, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, - 0x00c0, 0x3d78, 0x2100, 0xa318, 0x0048, 0x3d8b, 0x0078, 0x3d80, - 0xa082, 0x0004, 0x00c0, 0x3d8b, 0x2100, 0xa31a, 0x0048, 0x3d8b, - 0x6860, 0xa005, 0x0040, 0x3d86, 0x8000, 0x6016, 0x6206, 0x630a, - 0x127f, 0x0078, 0x3f0b, 0x127f, 0x0078, 0x3f07, 0x127f, 0x0078, - 0x3f03, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2009, 0x0000, - 0x1078, 0x3f38, 0x6308, 0x8318, 0x0048, 0x3da2, 0x630a, 0x127f, - 0x0078, 0x3f19, 0x127f, 0x0078, 0x3f07, 0x127e, 0x0c7e, 0x2091, - 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040, 0x3dbb, 0x2009, - 0x0000, 0x0c7e, 0x1078, 0x4348, 0x6000, 0x2001, 0xfcff, 0x6002, - 0x0c7f, 0x0078, 0x3df2, 0x6858, 0xa005, 0x0040, 0x3e07, 0x685c, - 0xa065, 0x0040, 0x3e03, 0x2001, 0x702a, 0x2004, 0xa005, 0x0040, - 0x3dcd, 0x1078, 0x6457, 0x0078, 0x3dd3, 0x6013, 0x0400, 0x2009, - 0x0041, 0x1078, 0x571c, 0x6958, 0xa18c, 0xe600, 0xa186, 0x2000, - 0x0040, 0x3dea, 0xa186, 0x0400, 0x0040, 0x3dea, 0x2009, 0x0000, - 0x0c7e, 0x1078, 0x4348, 0x6000, 0xa084, 0xfdff, 0x6002, 0x0c7f, - 0x0078, 0x3df2, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078, - 0x43f1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x3dff, 0x2009, 0x0000, - 0x1078, 0x4348, 0x6008, 0x8000, 0x0048, 0x3dff, 0x600a, 0x0c7f, - 0x127f, 0x0078, 0x3f0b, 0x0c7f, 0x127f, 0x0078, 0x3f03, 0x6954, - 0xa186, 0x002a, 0x00c0, 0x3e13, 0x2001, 0x700c, 0x200c, 0xc194, - 0x2102, 0x0078, 0x3df2, 0xa186, 0x0020, 0x0040, 0x3e28, 0xa186, - 0x0029, 0x00c0, 0x3e03, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, - 0x34fa, 0x00c0, 0x3df2, 0x6000, 0xc0e4, 0x6002, 0x0078, 0x3df2, - 0x685c, 0xa065, 0x0040, 0x3e03, 0x6017, 0x0014, 0x0078, 0x3df2, - 0x2009, 0x0000, 0x1078, 0x3f38, 0x6000, 0xa084, 0x0001, 0x0040, - 0x3e4a, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x3e44, 0x6206, - 0x2091, 0x8001, 0x0078, 0x3f19, 0x2091, 0x8001, 0x6853, 0x0016, - 0x0078, 0x3f12, 0x6853, 0x0007, 0x0078, 0x3f12, 0x6834, 0x8007, - 0xa084, 0x00ff, 0x00c0, 0x3e58, 0x1078, 0x3bb6, 0x0078, 0x3e6a, - 0x2030, 0x8001, 0x00c0, 0x3e62, 0x7007, 0x0001, 0x1078, 0x3e6b, - 0x0078, 0x3e6a, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, - 0x704b, 0x3e6b, 0x007c, 0x0e7e, 0x2009, 0x702a, 0x210c, 0x81ff, - 0x00c0, 0x3eed, 0x2009, 0x700c, 0x210c, 0xd194, 0x00c0, 0x3ef7, - 0x6848, 0x2070, 0xae82, 0x7600, 0x0048, 0x3edc, 0x2001, 0x7015, - 0x2004, 0xae02, 0x00c8, 0x3edc, 0x2009, 0x0000, 0x1078, 0x3f38, - 0x6100, 0xa184, 0x0001, 0x0040, 0x3ec2, 0xa184, 0x0100, 0x00c0, - 0x3ee0, 0xa184, 0x0200, 0x00c0, 0x3ee4, 0x601c, 0xa005, 0x00c0, - 0x3ee8, 0x711c, 0xa186, 0x0006, 0x00c0, 0x3ec7, 0x6853, 0x0000, - 0x6803, 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000, 0x7010, 0xa005, - 0x00c0, 0x3eb9, 0x7112, 0x7018, 0xa065, 0x0040, 0x3eec, 0x6000, - 0xd0e4, 0x00c0, 0x3ef1, 0x2e60, 0x1078, 0x4351, 0x127f, 0x0e7f, - 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x3eb9, 0x6902, 0x127f, - 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078, 0x3f12, 0x6944, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x34fa, 0x00c0, 0x3ef2, 0x6000, - 0xd0e4, 0x00c0, 0x3ef2, 0x711c, 0xa186, 0x0007, 0x00c0, 0x3edc, - 0x6853, 0x0002, 0x0078, 0x3ef4, 0x6853, 0x0008, 0x0078, 0x3ef4, - 0x6853, 0x000e, 0x0078, 0x3ef4, 0x6853, 0x0017, 0x0078, 0x3ef4, - 0x6853, 0x0035, 0x0078, 0x3ef4, 0x127f, 0x6853, 0x0028, 0x0078, - 0x3ef4, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078, 0x3f12, 0x6853, - 0x002a, 0x0078, 0x3ef4, 0x2009, 0x003e, 0x0078, 0x3f0d, 0x2009, - 0x0004, 0x0078, 0x3f0d, 0x2009, 0x0006, 0x0078, 0x3f0d, 0x2009, - 0x0016, 0x0078, 0x3f0d, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, - 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x3840, 0x2091, 0x8001, - 0x007c, 0x1078, 0x12fb, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, - 0x0048, 0x3f29, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078, - 0x3f35, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x3f35, 0x7074, - 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c, - 0x0d7e, 0x1078, 0x4348, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, - 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, - 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x3f54, - 0xa086, 0x1000, 0x00c0, 0x3f70, 0x20e1, 0x0004, 0x3d60, 0xd1bc, - 0x00c0, 0x3f5b, 0x3e60, 0xac84, 0x0007, 0x00c0, 0x3f70, 0xac82, - 0x7600, 0x0048, 0x3f70, 0x6854, 0xac02, 0x00c8, 0x3f70, 0x2009, - 0x0047, 0x1078, 0x571c, 0x7a1c, 0xd284, 0x00c0, 0x3f46, 0x007c, - 0xa016, 0x1078, 0x1525, 0x0078, 0x3f6b, 0x157e, 0x137e, 0x147e, - 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070, 0x00c0, 0x3f9e, - 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x3f9e, 0x1078, 0x3fab, - 0x0040, 0x3f9e, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078, 0x3fc9, - 0x147f, 0x137f, 0x157f, 0x2009, 0x71be, 0x2104, 0xa005, 0x00c0, - 0x3f9a, 0x007c, 0x1078, 0x49b7, 0x0078, 0x3f99, 0x1078, 0x6f02, - 0x1078, 0x3fab, 0x20e1, 0x3000, 0x7828, 0x7828, 0x147f, 0x137f, - 0x157f, 0x0078, 0x3f99, 0xa484, 0x01ff, 0x6872, 0xa005, 0x0040, - 0x3fbd, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, - 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9, 0x000c, 0x20e1, - 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, 0x0078, - 0x3fbc, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, - 0x0000, 0x00c0, 0x3fd6, 0x0078, 0x40c2, 0x007c, 0xa196, 0x2000, - 0x00c0, 0x3fe7, 0x6900, 0xa18e, 0x0001, 0x00c0, 0x3fe3, 0x1078, - 0x2b7c, 0x0078, 0x3fd5, 0x1078, 0x3fef, 0x0078, 0x3fd5, 0xa196, - 0x8000, 0x00c0, 0x3fd5, 0x1078, 0x4148, 0x0078, 0x3fd5, 0x0c7e, - 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0040, 0x3ffc, - 0xa196, 0x0023, 0x00c0, 0x40ba, 0xa08e, 0x0023, 0x00c0, 0x402d, - 0x1078, 0x41ba, 0x0040, 0x40ba, 0x7124, 0x610a, 0x7030, 0xa08e, - 0x0200, 0x00c0, 0x4015, 0x7034, 0xa005, 0x00c0, 0x40ba, 0x2009, - 0x0015, 0x1078, 0x571c, 0x0078, 0x40ba, 0xa08e, 0x0210, 0x00c0, - 0x401f, 0x2009, 0x0015, 0x1078, 0x571c, 0x0078, 0x40ba, 0xa08e, - 0x0100, 0x00c0, 0x40ba, 0x7034, 0xa005, 0x00c0, 0x40ba, 0x2009, - 0x0016, 0x1078, 0x571c, 0x0078, 0x40ba, 0xa08e, 0x0022, 0x00c0, - 0x40ba, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x403e, 0x7034, 0xa005, - 0x00c0, 0x40ba, 0x2009, 0x0017, 0x0078, 0x40a2, 0xa08e, 0x0500, - 0x00c0, 0x404a, 0x7034, 0xa005, 0x00c0, 0x40ba, 0x2009, 0x0018, - 0x0078, 0x40a2, 0xa08e, 0x2010, 0x00c0, 0x4052, 0x2009, 0x0019, - 0x0078, 0x40a2, 0xa08e, 0x2110, 0x00c0, 0x405a, 0x2009, 0x001a, - 0x0078, 0x40a2, 0xa08e, 0x5200, 0x00c0, 0x4066, 0x7034, 0xa005, - 0x00c0, 0x40ba, 0x2009, 0x001b, 0x0078, 0x40a2, 0xa08e, 0x5000, - 0x00c0, 0x4072, 0x7034, 0xa005, 0x00c0, 0x40ba, 0x2009, 0x001c, - 0x0078, 0x40a2, 0xa08e, 0x1200, 0x00c0, 0x407e, 0x7034, 0xa005, - 0x00c0, 0x40ba, 0x2009, 0x0024, 0x0078, 0x40a2, 0xa08c, 0xff00, - 0xa18e, 0x2400, 0x00c0, 0x4088, 0x2009, 0x002d, 0x0078, 0x40a2, - 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x4092, 0x2009, 0x002a, - 0x0078, 0x40a2, 0xa08e, 0x0f00, 0x00c0, 0x409a, 0x2009, 0x0020, - 0x0078, 0x40a2, 0xa08e, 0x5300, 0x00c0, 0x40a0, 0x0078, 0x40a0, - 0x2009, 0x001d, 0x017e, 0x2011, 0x7483, 0x2204, 0x1078, 0x1fe4, - 0x1078, 0x34bf, 0x00c0, 0x40bc, 0x0c7e, 0x1078, 0x568f, 0x0040, - 0x40bf, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, - 0x1078, 0x571c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x40ba, 0x0c7f, - 0x0078, 0x40bc, 0xa084, 0x0007, 0x0079, 0x40c7, 0x007c, 0x40cf, - 0x40cf, 0x40cf, 0x40cf, 0x40cf, 0x40d0, 0x40e9, 0x4131, 0x007c, - 0x7110, 0xd1bc, 0x0040, 0x40e8, 0x7120, 0x2160, 0xac8c, 0x0007, - 0x00c0, 0x40e8, 0xac8a, 0x7600, 0x0048, 0x40e8, 0x6854, 0xac02, - 0x00c8, 0x40e8, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x571c, - 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x412f, 0x2011, 0x7483, - 0x2204, 0xa080, 0x2207, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, - 0x34fa, 0x00c0, 0x412f, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, - 0x0006, 0x00c0, 0x4114, 0x0c7e, 0x1078, 0x568f, 0x017f, 0x0040, - 0x412f, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x2009, 0x0044, - 0x1078, 0x571c, 0x0078, 0x412f, 0x0c7e, 0x1078, 0x568f, 0x017f, - 0x0040, 0x412f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, - 0x0004, 0x00c0, 0x4127, 0x6007, 0x0005, 0x0078, 0x4129, 0x6007, - 0x0001, 0x6003, 0x0001, 0x1078, 0x45af, 0x1078, 0x49b7, 0x0c7f, - 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4147, 0x7020, 0x2060, 0xac84, - 0x0007, 0x00c0, 0x4147, 0xac82, 0x7600, 0x0048, 0x4147, 0x6854, - 0xac02, 0x00c8, 0x4147, 0x2009, 0x0045, 0x1078, 0x571c, 0x007c, - 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x4158, - 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x1288, 0x1079, 0x4159, - 0x007c, 0x415f, 0x4160, 0x415f, 0x415f, 0x419c, 0x41ab, 0x007c, - 0x7110, 0xd1bc, 0x00c0, 0x419b, 0x700c, 0x1078, 0x1fe4, 0x1078, - 0x34bf, 0x00c0, 0x419b, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, - 0x0006, 0x00c0, 0x4184, 0x0c7e, 0x1078, 0x568f, 0x017f, 0x0040, - 0x419b, 0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, - 0x1078, 0x571c, 0x0078, 0x419b, 0x0c7e, 0x1078, 0x568f, 0x017f, - 0x0040, 0x419b, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, - 0x0004, 0x00c0, 0x4197, 0x2009, 0x0005, 0x0078, 0x4199, 0x2009, - 0x0001, 0x1078, 0x571c, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x41aa, - 0x1078, 0x41ba, 0x0040, 0x41aa, 0x7124, 0x610a, 0x2009, 0x0089, - 0x1078, 0x571c, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x41b9, 0x1078, - 0x41ba, 0x0040, 0x41b9, 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, - 0x571c, 0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x41cd, - 0xac82, 0x7600, 0x0048, 0x41cd, 0x2001, 0x7015, 0x2004, 0xac02, - 0x00c8, 0x41cd, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x41cc, - 0x2071, 0x71c9, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, - 0x7012, 0x7017, 0x7600, 0x7007, 0x0000, 0x7026, 0x702b, 0x50bd, - 0x7032, 0x7037, 0x50fe, 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, - 0x2071, 0x71c9, 0x00e0, 0x4297, 0x2091, 0x6000, 0x700c, 0x8001, - 0x700e, 0x00c0, 0x4260, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, - 0x2091, 0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x425e, 0x703b, - 0x0002, 0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x425e, - 0x703c, 0xa086, 0x0001, 0x00c0, 0x423b, 0x0d7e, 0x2069, 0x0140, - 0x6804, 0xa084, 0x4000, 0x0040, 0x4219, 0x6803, 0x1000, 0x0078, - 0x4220, 0x6804, 0xa084, 0x1000, 0x0040, 0x4220, 0x6803, 0x0100, - 0x6803, 0x0000, 0x703f, 0x0000, 0x2069, 0x71b6, 0x6804, 0xa082, - 0x0006, 0x00c0, 0x422d, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, - 0x00c0, 0x4234, 0x6833, 0x0000, 0x1078, 0x49b7, 0x1078, 0x4a67, - 0x0d7f, 0x0078, 0x425e, 0x0d7e, 0x2069, 0x7000, 0x6944, 0x6860, - 0xa102, 0x00c8, 0x425d, 0x2069, 0x71b6, 0x6804, 0xa086, 0x0000, - 0x00c0, 0x425d, 0x6830, 0xa086, 0x0000, 0x00c0, 0x425d, 0x703f, - 0x0001, 0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, - 0x689e, 0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x4263, - 0x127e, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x4274, 0x7020, - 0x8001, 0x7022, 0x00c0, 0x4274, 0x7023, 0x0009, 0x8109, 0x7126, - 0x00c0, 0x4274, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x4285, - 0x702c, 0x8001, 0x702e, 0x00c0, 0x4285, 0x702f, 0x0009, 0x8109, - 0x7132, 0x00c0, 0x4285, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, - 0x4296, 0x7008, 0x8001, 0x700a, 0x00c0, 0x4296, 0x700b, 0x0009, - 0x8109, 0x711a, 0x00c0, 0x4296, 0x701c, 0x107a, 0x127f, 0x7004, - 0x0079, 0x429a, 0x42c1, 0x42c2, 0x42de, 0x0e7e, 0x2071, 0x71c9, - 0x7018, 0xa005, 0x00c0, 0x42a8, 0x711a, 0x721e, 0x700b, 0x0009, - 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x71c9, 0x701c, 0xa206, - 0x00c0, 0x42b4, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, - 0x2071, 0x71c9, 0x6088, 0xa102, 0x0048, 0x42bf, 0x618a, 0x0e7f, - 0x007c, 0x007c, 0x7110, 0x1078, 0x34fa, 0x00c0, 0x42d4, 0x6088, - 0x8001, 0x0048, 0x42d4, 0x608a, 0x00c0, 0x42d4, 0x127e, 0x2091, - 0x8000, 0x1078, 0x49b7, 0x127f, 0x8108, 0xa182, 0x007e, 0x0048, - 0x42dc, 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, - 0x127e, 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x430d, 0x8001, - 0x6016, 0x00c0, 0x430d, 0x611c, 0xa186, 0x0003, 0x0040, 0x42f4, - 0xa186, 0x0006, 0x00c0, 0x430b, 0x6010, 0x2068, 0x6854, 0xa08a, - 0x199a, 0x0048, 0x430b, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, - 0x0048, 0x4304, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, - 0x6116, 0x0078, 0x430d, 0x1078, 0x61ca, 0x127f, 0xac88, 0x0008, - 0x7116, 0x2001, 0x7016, 0x2004, 0xa102, 0x0048, 0x431b, 0x7017, - 0x7600, 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x71c9, 0x7027, - 0x07d0, 0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, - 0x71d2, 0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x71c9, 0x7033, - 0x07d0, 0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x71d5, 0x2013, - 0x0000, 0x007c, 0x0e7e, 0x2071, 0x71c9, 0x711a, 0x721e, 0x700b, - 0x0009, 0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x725a, 0x0c7f, 0x007c, - 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x725a, 0x2060, - 0x007c, 0x6854, 0xa08a, 0x199a, 0x0048, 0x4358, 0x2001, 0x1999, - 0xa005, 0x00c0, 0x4368, 0x6944, 0x0c7e, 0x1078, 0x4348, 0x6014, - 0x0c7f, 0xa005, 0x00c0, 0x436d, 0x2001, 0x001e, 0x0078, 0x436d, - 0xa08e, 0xffff, 0x00c0, 0x436d, 0xa006, 0x8003, 0x800b, 0x810b, - 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, - 0x43a8, 0xd0b4, 0x00c0, 0x4384, 0xd0bc, 0x00c0, 0x4396, 0x2009, - 0x0006, 0x1078, 0x43cb, 0x007c, 0xd0fc, 0x0040, 0x4391, 0xa084, - 0x0003, 0xa08e, 0x0003, 0x0040, 0x43c4, 0xa08e, 0x0000, 0x00c0, - 0x43c4, 0x2009, 0x0043, 0x1078, 0x571c, 0x007c, 0xd0fc, 0x0040, - 0x43a3, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x43c4, 0xa08e, - 0x0000, 0x00c0, 0x43c4, 0x2009, 0x0042, 0x1078, 0x571c, 0x007c, - 0xd0fc, 0x0040, 0x43ba, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, - 0x43c4, 0xa08e, 0x0002, 0x0040, 0x43be, 0x2009, 0x0041, 0x1078, - 0x571c, 0x007c, 0x1078, 0x43c9, 0x0078, 0x43b9, 0x2009, 0x0043, - 0x1078, 0x571c, 0x0078, 0x43b9, 0x2009, 0x0004, 0x1078, 0x43cb, - 0x007c, 0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x43f0, - 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x43ea, - 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x43ea, 0x0c7e, - 0x2009, 0x0000, 0x1078, 0x4348, 0x6204, 0x8210, 0x0048, 0x43e9, - 0x6206, 0x0c7f, 0x1078, 0x3840, 0x6010, 0xa06d, 0x10c0, 0x4351, - 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x725a, 0x6000, - 0x81ff, 0x0040, 0x43fe, 0xa205, 0x0078, 0x43ff, 0xa204, 0x6002, - 0xace0, 0x0008, 0x00f0, 0x43f7, 0x0c7f, 0x157f, 0x007c, 0x6808, - 0xa005, 0x0040, 0x440f, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, - 0x127e, 0x2091, 0x2200, 0x2079, 0x71b6, 0x127f, 0x0d7e, 0x2069, - 0x71b6, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, - 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, - 0x0007, 0x0079, 0x442b, 0x4435, 0x445a, 0x44b5, 0x443b, 0x445a, - 0x4433, 0x4433, 0x4433, 0x1078, 0x1288, 0x1078, 0x4327, 0x1078, - 0x49b7, 0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x4441, 0x0c7f, - 0x007c, 0x2011, 0x320e, 0x1078, 0x42aa, 0x7828, 0xa092, 0x0002, - 0x00c8, 0x4450, 0x8000, 0x782a, 0x1078, 0x323e, 0x0078, 0x443f, - 0x1078, 0x320e, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, - 0x0078, 0x443f, 0x1078, 0x4327, 0x3c00, 0x007e, 0x2011, 0x0209, - 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, 0x4478, - 0x62c0, 0x82ff, 0x00c0, 0x4478, 0x782b, 0x0000, 0x7824, 0xa065, - 0x1040, 0x1288, 0x2009, 0x0013, 0x1078, 0x571c, 0x0c7f, 0x007c, - 0x3900, 0xa082, 0x72fa, 0x00c8, 0x447f, 0x1078, 0x561f, 0x0c7e, - 0x7824, 0xa065, 0x1040, 0x1288, 0x7804, 0xa086, 0x0004, 0x0040, - 0x44fa, 0x7828, 0xa092, 0x2710, 0x00c8, 0x4495, 0x8000, 0x782a, - 0x0c7f, 0x1078, 0x50a2, 0x0078, 0x4476, 0x6104, 0xa186, 0x0003, - 0x00c0, 0x44ac, 0x0e7e, 0x2071, 0x7000, 0x70b4, 0x0e7f, 0xd08c, - 0x0040, 0x44ac, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7000, - 0x1078, 0x3247, 0x0e7f, 0x0c7f, 0x1078, 0x6f55, 0x2009, 0x0014, - 0x1078, 0x571c, 0x0c7f, 0x0078, 0x4476, 0x2001, 0x71d2, 0x2003, - 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x44c9, 0x782b, 0x0000, 0x7824, - 0xa065, 0x1040, 0x1288, 0x2009, 0x0013, 0x1078, 0x5769, 0x0c7f, - 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x72fa, 0x00c8, 0x44d2, - 0x1078, 0x561f, 0x7824, 0xa005, 0x1040, 0x1288, 0x781c, 0xa06d, - 0x1040, 0x1288, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, - 0x56f5, 0x693c, 0x81ff, 0x1040, 0x1288, 0x8109, 0x693e, 0x6854, - 0xa015, 0x0040, 0x44ee, 0x7a1e, 0x0078, 0x44f0, 0x7918, 0x791e, - 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x49b7, - 0x0078, 0x44c7, 0x6104, 0xa186, 0x0002, 0x0040, 0x4505, 0xa186, - 0x0004, 0x0040, 0x4505, 0x0078, 0x4489, 0x7808, 0xac06, 0x0040, - 0x4489, 0x1078, 0x48be, 0x1078, 0x45af, 0x0c7f, 0x1078, 0x49b7, - 0x0078, 0x4476, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x71d5, 0x2013, - 0x0000, 0x62c8, 0x82ff, 0x00c0, 0x452c, 0x62c4, 0x82ff, 0x00c0, - 0x452c, 0x793c, 0xa1e5, 0x0000, 0x0040, 0x452a, 0x2009, 0x0049, - 0x1078, 0x571c, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x72fa, 0x00c8, - 0x4533, 0x1078, 0x561f, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, - 0x452a, 0x7944, 0xa192, 0x7530, 0x00c8, 0x4552, 0x8108, 0x7946, - 0x1078, 0x432c, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, - 0x00c0, 0x454e, 0x6017, 0x0012, 0x0078, 0x452a, 0x6017, 0x0016, - 0x0078, 0x452a, 0x037e, 0x2019, 0x0001, 0x1078, 0x525b, 0x037f, - 0x1078, 0x6f55, 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, 0x571c, - 0x0078, 0x452a, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x600f, 0x0000, 0x2c08, 0x2061, 0x71b6, 0x6020, 0x8000, 0x6022, - 0x6010, 0xa005, 0x0040, 0x457d, 0xa080, 0x0003, 0x2102, 0x6112, - 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, - 0x4578, 0x0d7e, 0x2069, 0x71b6, 0x6000, 0xd0d4, 0x0040, 0x4596, - 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x4591, 0x2c00, - 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x49bf, 0xc0d5, 0x6002, - 0x6818, 0xa005, 0x0040, 0x45a8, 0x6056, 0x605b, 0x0000, 0x007e, - 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0x71b6, 0x0078, 0x4588, - 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x4588, 0x007e, - 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, - 0x2061, 0x71b6, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, - 0x45ca, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, - 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x45c5, 0x0c7e, 0x600f, - 0x0000, 0x2c08, 0x2061, 0x71b6, 0x6034, 0xa005, 0x0040, 0x45de, - 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, - 0x0078, 0x45dc, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, - 0x007e, 0x127e, 0x2071, 0x71b6, 0x7638, 0x2660, 0x2678, 0x2091, - 0x8000, 0x8cff, 0x0040, 0x4644, 0x6018, 0xa080, 0x0028, 0x2004, - 0xa206, 0x00c0, 0x463f, 0x703c, 0xac06, 0x00c0, 0x4604, 0x6003, - 0x000a, 0x630a, 0x0078, 0x463f, 0x7038, 0xac36, 0x00c0, 0x460a, - 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x4618, 0x2c00, 0xaf36, - 0x0040, 0x4616, 0x2f00, 0x7036, 0x0078, 0x4618, 0x7037, 0x0000, - 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x4621, 0x7e0e, 0x0078, - 0x4622, 0x2678, 0x600f, 0x0000, 0x1078, 0x6336, 0x0040, 0x463a, - 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x464d, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x64f5, 0x1078, 0x3840, - 0x1078, 0x644a, 0x1078, 0x6457, 0x0c7f, 0x0078, 0x45f1, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x45f1, 0x127f, 0x007f, 0x027f, 0x067f, + 0x708e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0048, + 0x3392, 0x603a, 0x6814, 0x6066, 0x2099, 0x7096, 0xac88, 0x000a, + 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x709a, 0xac88, 0x0006, + 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x70ae, 0x6904, 0xa18c, + 0x00ff, 0x810f, 0x6808, 0xa084, 0x00ff, 0xa105, 0x606a, 0x690c, + 0x616e, 0x6810, 0x6072, 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, + 0x33bd, 0x2009, 0x0008, 0x0078, 0x33e7, 0xa182, 0x0259, 0x00c8, + 0x33c5, 0x2009, 0x0007, 0x0078, 0x33e7, 0xa182, 0x02c1, 0x00c8, + 0x33cd, 0x2009, 0x0006, 0x0078, 0x33e7, 0xa182, 0x0349, 0x00c8, + 0x33d5, 0x2009, 0x0005, 0x0078, 0x33e7, 0xa182, 0x0421, 0x00c8, + 0x33dd, 0x2009, 0x0004, 0x0078, 0x33e7, 0xa182, 0x0581, 0x00c8, + 0x33e5, 0x2009, 0x0003, 0x0078, 0x33e7, 0x2009, 0x0002, 0x6192, + 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x708d, + 0x2e04, 0x6896, 0x2071, 0x708e, 0x7004, 0x689a, 0x701c, 0x689e, + 0x0e7f, 0x007c, 0x2001, 0x6b9e, 0xa600, 0x2004, 0x127e, 0x2091, + 0x8000, 0x6178, 0xa10d, 0x617a, 0x127f, 0x007c, 0x2001, 0x6b9e, + 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, 0x6178, 0xa10c, + 0x617a, 0x127f, 0x007c, 0x2001, 0x6b9e, 0xa600, 0x2004, 0x8002, + 0x127e, 0x2091, 0x8000, 0x617c, 0xa10c, 0x617e, 0x127f, 0x0078, + 0x3423, 0x1078, 0x32af, 0x1078, 0x3484, 0x00c0, 0x3421, 0x1078, + 0x343e, 0x007c, 0x2001, 0x6b9e, 0xa600, 0x2004, 0x127e, 0x2091, + 0x8000, 0x617c, 0xa10d, 0x617e, 0x127f, 0x0078, 0x3439, 0x1078, + 0x32f3, 0x1078, 0x3448, 0x00c0, 0x3437, 0x007c, 0x127e, 0x2091, + 0x8000, 0x1078, 0x42e3, 0x127f, 0x007c, 0xa01e, 0x0078, 0x344a, + 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c, 0x2068, + 0x6000, 0xd0dc, 0x00c0, 0x346a, 0x8dff, 0x0040, 0x347f, 0x83ff, + 0x0040, 0x3462, 0x6844, 0xa084, 0x00ff, 0xa606, 0x0040, 0x346f, + 0x0078, 0x346a, 0x683c, 0xa406, 0x00c0, 0x346a, 0x6840, 0xa506, + 0x0040, 0x346f, 0x2d08, 0x6800, 0x2068, 0x0078, 0x3454, 0x6a00, + 0x604c, 0xad06, 0x00c0, 0x3477, 0x624e, 0x0078, 0x347a, 0xa180, + 0x0000, 0x2202, 0x82ff, 0x00c0, 0x347f, 0x6152, 0x8dff, 0x127f, + 0x007c, 0xa01e, 0x0078, 0x3486, 0x2019, 0x0001, 0xa00e, 0x6080, + 0x2068, 0x8dff, 0x0040, 0x34b4, 0x83ff, 0x0040, 0x3497, 0x6844, + 0xa084, 0x00ff, 0xa606, 0x0040, 0x34a4, 0x0078, 0x349f, 0x683c, + 0xa406, 0x00c0, 0x349f, 0x6840, 0xa506, 0x0040, 0x34a4, 0x2d08, + 0x6800, 0x2068, 0x0078, 0x3489, 0x6a00, 0x6080, 0xad06, 0x00c0, + 0x34ac, 0x6282, 0x0078, 0x34af, 0xa180, 0x0000, 0x2202, 0x82ff, + 0x00c0, 0x34b4, 0x6186, 0x8dff, 0x007c, 0x2001, 0x6b9e, 0xa600, + 0x2004, 0x6178, 0xa10c, 0x0040, 0x34bf, 0x2011, 0x0001, 0x617c, + 0xa10c, 0x0040, 0x34c5, 0xa295, 0x0002, 0x007c, 0x1078, 0x350f, + 0x0040, 0x34ce, 0x1078, 0x6079, 0x0078, 0x34d0, 0xa085, 0x0001, + 0x007c, 0x1078, 0x350f, 0x0040, 0x34d9, 0x1078, 0x6008, 0x0078, + 0x34db, 0xa085, 0x0001, 0x007c, 0x1078, 0x350f, 0x0040, 0x34e4, + 0x1078, 0x604e, 0x0078, 0x34e6, 0xa085, 0x0001, 0x007c, 0x1078, + 0x350f, 0x0040, 0x34ef, 0x1078, 0x6024, 0x0078, 0x34f1, 0xa085, + 0x0001, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, + 0xa06d, 0x0040, 0x3507, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, + 0x6847, 0x0000, 0x1078, 0x35c4, 0x007f, 0x0078, 0x34f8, 0x6083, + 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x609c, + 0xd0a4, 0x007c, 0x0f7e, 0x2079, 0x6c51, 0x7804, 0xd0a4, 0x0040, + 0x353b, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, + 0x1078, 0x336a, 0x00c0, 0x352f, 0x6004, 0xa084, 0xff00, 0x8007, + 0xa086, 0x0006, 0x00c0, 0x352f, 0x6000, 0xc0ed, 0x6002, 0x017f, + 0x8108, 0x00f0, 0x351f, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, + 0x353d, 0x1078, 0x40b6, 0x0f7f, 0x007c, 0x2011, 0x353d, 0x1078, + 0x4026, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, + 0x1078, 0x336a, 0x00c0, 0x3569, 0x6000, 0xd0ec, 0x0040, 0x3569, + 0x047e, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, + 0x1078, 0x6b0a, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, + 0x1078, 0x43ff, 0x1078, 0x4344, 0x2009, 0x0000, 0x1078, 0x6946, + 0x047f, 0x017f, 0x8108, 0x00f0, 0x3547, 0x0c7f, 0x157f, 0x007c, + 0x0c7e, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, + 0x2071, 0x6cff, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, + 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, + 0x704f, 0x0000, 0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, + 0x007c, 0x0e7e, 0x2071, 0x6cff, 0x684c, 0xa005, 0x00c0, 0x359f, + 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x35c2, 0x6a60, + 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, + 0x707a, 0x684c, 0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, + 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, + 0x2100, 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, + 0x0001, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, + 0x3615, 0x6804, 0xa00d, 0x0040, 0x35e3, 0x0d7e, 0x0e7e, 0x2071, + 0x6c00, 0x027e, 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, + 0x2d00, 0x81ff, 0x00c0, 0x35d4, 0x702e, 0x7098, 0xa200, 0x709a, + 0x027f, 0x0e7f, 0x0d7f, 0x2071, 0x6cff, 0x701c, 0xa005, 0x00c0, + 0x3626, 0x0068, 0x3624, 0x2071, 0x6c51, 0x7004, 0xd09c, 0x0040, + 0x3624, 0x6934, 0xa186, 0x0103, 0x00c0, 0x3637, 0x6948, 0x6844, + 0xa105, 0x00c0, 0x3617, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, + 0xd084, 0x00c0, 0x3624, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, + 0x701b, 0x0001, 0x2091, 0x4080, 0x2071, 0x6c00, 0x702c, 0x206a, + 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, 0x0e7f, 0x007c, 0x6844, + 0xa086, 0x0100, 0x00c0, 0x3624, 0x6868, 0xa005, 0x00c0, 0x3624, + 0x2009, 0x8020, 0x0078, 0x35fd, 0x2071, 0x6cff, 0x2d08, 0x206b, + 0x0000, 0x7010, 0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, + 0x3634, 0x6902, 0x0078, 0x3635, 0x711e, 0x0078, 0x3615, 0xa18c, + 0x00ff, 0xa186, 0x0017, 0x0040, 0x3645, 0xa186, 0x001e, 0x0040, + 0x3645, 0xa18e, 0x001f, 0x00c0, 0x3624, 0x684c, 0xd0cc, 0x0040, + 0x3624, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3624, + 0x2009, 0x8021, 0x0078, 0x35fd, 0x007e, 0x6837, 0x0103, 0x20a9, + 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, + 0x684a, 0x6952, 0x007c, 0x2071, 0x6cff, 0x7004, 0x0079, 0x3668, + 0x3670, 0x367f, 0x370f, 0x3710, 0x3720, 0x3726, 0x3671, 0x36fd, + 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x367e, 0x2009, 0x000d, + 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, + 0xa06d, 0x0040, 0x36fc, 0x0e7e, 0x2071, 0x6c51, 0x7004, 0xd09c, + 0x0040, 0x36de, 0x6934, 0xa186, 0x0103, 0x00c0, 0x36b4, 0x6948, + 0x6844, 0xa105, 0x00c0, 0x36d1, 0x2009, 0x8020, 0x127e, 0x2091, + 0x8000, 0x0068, 0x36b0, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, + 0x36b0, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, + 0x2091, 0x4080, 0x127f, 0x0e7f, 0x1078, 0x3759, 0x0078, 0x36fc, + 0x127f, 0x0e7f, 0x0078, 0x36fc, 0xa18c, 0x00ff, 0xa186, 0x0017, + 0x0040, 0x36c2, 0xa186, 0x001e, 0x0040, 0x36c2, 0xa18e, 0x001f, + 0x00c0, 0x36de, 0x684c, 0xd0cc, 0x0040, 0x36de, 0x6850, 0xa084, + 0x00ff, 0xa086, 0x0001, 0x00c0, 0x36de, 0x2009, 0x8021, 0x0078, + 0x3696, 0x6844, 0xa086, 0x0100, 0x00c0, 0x36de, 0x6868, 0xa005, + 0x00c0, 0x36de, 0x2009, 0x8020, 0x0078, 0x3696, 0x0e7f, 0x1078, + 0x376d, 0x0040, 0x36fc, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, + 0xa086, 0x0003, 0x00c0, 0x36f3, 0x810f, 0xa18c, 0x00ff, 0x8101, + 0x0040, 0x36f3, 0x710e, 0x7007, 0x0003, 0x1078, 0x378d, 0x7050, + 0xa086, 0x0100, 0x0040, 0x3710, 0x007c, 0x701c, 0xa06d, 0x0040, + 0x370e, 0x1078, 0x376d, 0x0040, 0x370e, 0x7007, 0x0003, 0x1078, + 0x378d, 0x7050, 0xa086, 0x0100, 0x0040, 0x3710, 0x007c, 0x007c, + 0x7050, 0xa09e, 0x0100, 0x00c0, 0x3719, 0x7007, 0x0004, 0x0078, + 0x3720, 0xa086, 0x0200, 0x00c0, 0x371f, 0x7007, 0x0005, 0x007c, + 0x1078, 0x3727, 0x7006, 0x1078, 0x3759, 0x007c, 0x007c, 0x702c, + 0x7130, 0x8108, 0xa102, 0x0048, 0x3734, 0xa00e, 0x7034, 0x706e, + 0x7038, 0x7072, 0x0078, 0x373e, 0x706c, 0xa080, 0x0040, 0x706e, + 0x00c8, 0x373e, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, + 0x8001, 0x700e, 0x00c0, 0x3752, 0x127e, 0x2091, 0x8000, 0x0068, + 0x3755, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, + 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, + 0x007c, 0x701c, 0xa06d, 0x0040, 0x376c, 0x127e, 0x2091, 0x8000, + 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3769, + 0x701a, 0x127f, 0x1078, 0x12db, 0x007c, 0x2019, 0x000d, 0x2304, + 0x230c, 0xa10e, 0x0040, 0x377c, 0x2304, 0x230c, 0xa10e, 0x0040, + 0x377c, 0xa006, 0x0078, 0x378c, 0x732c, 0x8319, 0x7130, 0xa102, + 0x00c0, 0x3786, 0x2300, 0xa005, 0x0078, 0x378c, 0x0048, 0x378b, + 0xa302, 0x0078, 0x378c, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, + 0x000d, 0x7056, 0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, + 0x6dd3, 0x2104, 0xc08d, 0x200a, 0x127f, 0x1078, 0x132c, 0x007c, + 0x2071, 0x6ccd, 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, + 0x702b, 0x0001, 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, + 0x7063, 0x0040, 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, + 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6ccd, 0x6848, 0xa005, + 0x00c0, 0x37c9, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, + 0x37ee, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, + 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, + 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, + 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, + 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, + 0x2b78, 0x2071, 0x6ccd, 0x7004, 0x1079, 0x384e, 0x700c, 0x0079, + 0x37f9, 0x37fe, 0x37f3, 0x37f3, 0x37f3, 0x37f3, 0x007c, 0x700c, + 0x0079, 0x3802, 0x3807, 0x384c, 0x384c, 0x384d, 0x384d, 0x7830, + 0x7930, 0xa106, 0x0040, 0x3811, 0x7830, 0x7930, 0xa106, 0x00c0, + 0x3837, 0x7030, 0xa10a, 0x0040, 0x3837, 0x00c8, 0x3819, 0x712c, + 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x3838, 0x1078, 0x12a7, 0x0040, + 0x3837, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, + 0x0000, 0x127e, 0x007e, 0x2091, 0x8000, 0x2009, 0x6dd3, 0x2104, + 0xc085, 0x200a, 0x007f, 0x700e, 0x127f, 0x1078, 0x132c, 0x007c, + 0x1078, 0x12a7, 0x0040, 0x3837, 0x2d00, 0x705a, 0x1078, 0x12a7, + 0x00c0, 0x3844, 0x0078, 0x3823, 0x2d00, 0x7086, 0x7063, 0x0080, + 0x2001, 0x0004, 0x0078, 0x3827, 0x007c, 0x007c, 0x385f, 0x3860, + 0x3897, 0x3898, 0x384c, 0x38ce, 0x38d3, 0x390a, 0x390b, 0x3926, + 0x3927, 0x3928, 0x3929, 0x392a, 0x392b, 0x3994, 0x39be, 0x007c, + 0x700c, 0x0079, 0x3863, 0x3868, 0x386b, 0x387b, 0x3896, 0x3896, + 0x1078, 0x37ff, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, + 0x1078, 0x3c9b, 0x0040, 0x3878, 0x2091, 0x8000, 0x1078, 0x37ff, + 0x0d7f, 0x0078, 0x3884, 0x127e, 0x8001, 0x700e, 0x1078, 0x3c9b, + 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, + 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3893, 0x1079, + 0x38ae, 0x127f, 0x007c, 0x127f, 0x1078, 0x392c, 0x007c, 0x007c, + 0x007c, 0x0e7e, 0x2071, 0x6ccd, 0x700c, 0x0079, 0x389f, 0x38a4, + 0x38a4, 0x38a4, 0x38a6, 0x38aa, 0x0e7f, 0x007c, 0x700f, 0x0001, + 0x0078, 0x38ac, 0x700f, 0x0002, 0x0e7f, 0x007c, 0x392c, 0x392c, + 0x3948, 0x392c, 0x3a31, 0x392c, 0x392c, 0x392c, 0x392c, 0x392c, + 0x3948, 0x3a76, 0x3abf, 0x3b17, 0x3b2a, 0x392c, 0x392c, 0x3964, + 0x3948, 0x392c, 0x392c, 0x397a, 0x3bb1, 0x3bce, 0x392c, 0x3964, + 0x392c, 0x392c, 0x392c, 0x392c, 0x397a, 0x3bce, 0x7020, 0x2068, + 0x1078, 0x12db, 0x007c, 0x700c, 0x0079, 0x38d6, 0x38db, 0x38de, + 0x38ee, 0x3909, 0x3909, 0x1078, 0x37ff, 0x007c, 0x127e, 0x8001, + 0x700e, 0x7058, 0x007e, 0x1078, 0x3c9b, 0x0040, 0x38eb, 0x2091, + 0x8000, 0x1078, 0x37ff, 0x0d7f, 0x0078, 0x38f7, 0x127e, 0x8001, + 0x700e, 0x1078, 0x3c9b, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, + 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, + 0x00c8, 0x3906, 0x1079, 0x390c, 0x127f, 0x007c, 0x127f, 0x1078, + 0x392c, 0x007c, 0x007c, 0x007c, 0x392c, 0x3948, 0x3a1b, 0x392c, + 0x3948, 0x392c, 0x3948, 0x3948, 0x392c, 0x3948, 0x3a1b, 0x3948, + 0x3948, 0x3948, 0x3948, 0x3948, 0x392c, 0x3948, 0x3a1b, 0x392c, + 0x392c, 0x3948, 0x392c, 0x392c, 0x392c, 0x3948, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, + 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x35c4, + 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, + 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x35c4, 0x127f, 0x007c, + 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, + 0x2091, 0x8000, 0x1078, 0x35c4, 0x127f, 0x007c, 0x7007, 0x0001, + 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, + 0x1078, 0x35c4, 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, + 0x0040, 0x393a, 0x8001, 0x00c0, 0x3971, 0x7007, 0x0001, 0x0078, + 0x39fa, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, + 0x39fa, 0x007c, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, + 0x0024, 0x2098, 0x20a1, 0x6cf8, 0x53a3, 0x6858, 0x7012, 0xa082, + 0x0401, 0x00c8, 0x3956, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3956, + 0xa080, 0x39eb, 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x39de, + 0x1078, 0x12a7, 0x00c0, 0x399f, 0x7007, 0x000f, 0x007c, 0x2d00, + 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, + 0x6008, 0xa20a, 0x00c8, 0x39ae, 0xa00e, 0x2200, 0x7112, 0x620c, + 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x39b7, 0xa108, 0x719a, + 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x1312, 0x7090, 0xa08e, + 0x0100, 0x0040, 0x39d2, 0xa086, 0x0200, 0x0040, 0x39ca, 0x7007, + 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x12db, 0x7014, 0x2068, + 0x0078, 0x3956, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, + 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x3994, 0x7014, 0x2068, + 0x7007, 0x0001, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, + 0x3beb, 0x0078, 0x39fa, 0x39ee, 0x39f2, 0x39f6, 0x0002, 0x0011, + 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, + 0x0005, 0x0006, 0x2009, 0x6c2a, 0x210c, 0x81ff, 0x00c0, 0x3a15, + 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x31b5, + 0x00c0, 0x3a0b, 0x007c, 0x1078, 0x3654, 0x127e, 0x2091, 0x8000, + 0x1078, 0x35c4, 0x127f, 0x0078, 0x3a0a, 0x2001, 0x0028, 0x2009, + 0x0000, 0x0078, 0x3a0b, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, + 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3a2a, 0x7007, 0x0006, + 0x0078, 0x3a30, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a, + 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, + 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x3a5c, + 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x3a5c, + 0xa005, 0x00c0, 0x3a73, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078, + 0x336a, 0x00c0, 0x3a73, 0x067e, 0x6e44, 0xa6b4, 0x000f, 0x1078, + 0x3406, 0x067f, 0x0078, 0x3a73, 0x047e, 0x2011, 0x6c0c, 0x2224, + 0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, 0x336a, 0x00c0, + 0x3a6f, 0x2091, 0x8000, 0x607b, 0x0000, 0x2091, 0x8001, 0x8108, + 0x00f0, 0x3a65, 0x0c7f, 0x1078, 0x12db, 0x007c, 0x127e, 0x2091, + 0x8000, 0x7007, 0x0001, 0x2001, 0x6c52, 0x2004, 0xd0a4, 0x0040, + 0x3ab6, 0x6944, 0x1078, 0x3cb7, 0x6100, 0xd184, 0x0040, 0x3a9b, + 0x6858, 0xa084, 0x00ff, 0x00c0, 0x3ab9, 0x6000, 0xd084, 0x0040, + 0x3ab6, 0x6004, 0xa005, 0x00c0, 0x3abc, 0x6003, 0x0000, 0x600b, + 0x0000, 0x0078, 0x3ab3, 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0, + 0x3aa3, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, + 0x0040, 0x3ab6, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040, + 0x3ab6, 0x600a, 0x6202, 0x127f, 0x0078, 0x3c8a, 0x127f, 0x0078, + 0x3c82, 0x127f, 0x0078, 0x3c7a, 0x127f, 0x0078, 0x3c7e, 0x127e, + 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x6c52, 0x2004, 0xd0a4, + 0x0040, 0x3b14, 0x6944, 0x1078, 0x3cb7, 0x6000, 0xa084, 0x0001, + 0x0040, 0x3b14, 0x6204, 0x6308, 0x6c48, 0xa484, 0x0003, 0x0040, + 0x3aec, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x3ae5, 0x2100, + 0xa210, 0x0048, 0x3b11, 0x0078, 0x3aec, 0x8001, 0x00c0, 0x3b11, + 0x2100, 0xa212, 0x0048, 0x3b11, 0xa484, 0x000c, 0x0040, 0x3b06, + 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, 0x3afe, + 0x2100, 0xa318, 0x0048, 0x3b11, 0x0078, 0x3b06, 0xa082, 0x0004, + 0x00c0, 0x3b11, 0x2100, 0xa31a, 0x0048, 0x3b11, 0x6860, 0xa005, + 0x0040, 0x3b0c, 0x8000, 0x6016, 0x6206, 0x630a, 0x127f, 0x0078, + 0x3c8a, 0x127f, 0x0078, 0x3c86, 0x127f, 0x0078, 0x3c82, 0x127e, + 0x2091, 0x8000, 0x7007, 0x0001, 0x6944, 0x1078, 0x3cb7, 0x6308, + 0x8318, 0x0048, 0x3b27, 0x630a, 0x127f, 0x0078, 0x3c98, 0x127f, + 0x0078, 0x3c86, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, + 0x684c, 0xd0ac, 0x0040, 0x3b3e, 0x027e, 0x2009, 0x0000, 0x2011, + 0xfcff, 0x1078, 0x416c, 0x027f, 0x0078, 0x3b74, 0x6858, 0xa005, + 0x0040, 0x3b88, 0x685c, 0xa065, 0x0040, 0x3b84, 0x2001, 0x6c2a, + 0x2004, 0xa005, 0x0040, 0x3b50, 0x1078, 0x60e8, 0x0078, 0x3b56, + 0x6013, 0x0400, 0x2009, 0x0041, 0x1078, 0x544c, 0x6958, 0xa18c, + 0xe600, 0xa186, 0x2000, 0x0040, 0x3b6c, 0xa186, 0x0400, 0x0040, + 0x3b6c, 0x6944, 0x0c7e, 0x1078, 0x40c4, 0x6000, 0xa084, 0xfdff, + 0x6002, 0x0c7f, 0x0078, 0x3b74, 0x027e, 0x2009, 0x0000, 0x2011, + 0xfdff, 0x1078, 0x416c, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x3b80, + 0x6944, 0x1078, 0x40c4, 0x6008, 0x8000, 0x0048, 0x3b80, 0x600a, + 0x0c7f, 0x127f, 0x0078, 0x3c8a, 0x0c7f, 0x127f, 0x0078, 0x3c82, + 0x6954, 0xa186, 0x002a, 0x00c0, 0x3b94, 0x2001, 0x6c0c, 0x200c, + 0xc194, 0x2102, 0x0078, 0x3b74, 0xa186, 0x0020, 0x0040, 0x3ba9, + 0xa186, 0x0029, 0x00c0, 0x3b84, 0x6944, 0xa18c, 0xff00, 0x810f, + 0x1078, 0x336a, 0x00c0, 0x3b74, 0x6000, 0xc0e4, 0x6002, 0x0078, + 0x3b74, 0x685c, 0xa065, 0x0040, 0x3b84, 0x6017, 0x0014, 0x0078, + 0x3b74, 0x6944, 0x1078, 0x3cb7, 0x6000, 0xa084, 0x0001, 0x0040, + 0x3bca, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x3bc4, 0x6206, + 0x2091, 0x8001, 0x0078, 0x3c98, 0x2091, 0x8001, 0x6853, 0x0016, + 0x0078, 0x3c91, 0x6853, 0x0007, 0x0078, 0x3c91, 0x6834, 0x8007, + 0xa084, 0x00ff, 0x00c0, 0x3bd8, 0x1078, 0x393a, 0x0078, 0x3bea, + 0x2030, 0x8001, 0x00c0, 0x3be2, 0x7007, 0x0001, 0x1078, 0x3beb, + 0x0078, 0x3bea, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, + 0x704b, 0x3beb, 0x007c, 0x0e7e, 0x2009, 0x6c2a, 0x210c, 0x81ff, + 0x00c0, 0x3c6c, 0x2009, 0x6c0c, 0x210c, 0xd194, 0x00c0, 0x3c76, + 0x6848, 0x2070, 0xae82, 0x7200, 0x0048, 0x3c5b, 0x2001, 0x6c15, + 0x2004, 0xae02, 0x00c8, 0x3c5b, 0x6944, 0x1078, 0x3cb7, 0x6100, + 0xa184, 0x0001, 0x0040, 0x3c41, 0xa184, 0x0100, 0x00c0, 0x3c5f, + 0xa184, 0x0200, 0x00c0, 0x3c63, 0x601c, 0xa005, 0x00c0, 0x3c67, + 0x711c, 0xa186, 0x0006, 0x00c0, 0x3c46, 0x6853, 0x0000, 0x6803, + 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000, 0x7010, 0xa005, 0x00c0, + 0x3c38, 0x7112, 0x7018, 0xa065, 0x0040, 0x3c6b, 0x6000, 0xd0e4, + 0x00c0, 0x3c70, 0x2e60, 0x1078, 0x40cd, 0x127f, 0x0e7f, 0x007c, + 0x2068, 0x6800, 0xa005, 0x00c0, 0x3c38, 0x6902, 0x127f, 0x0e7f, + 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078, 0x3c91, 0x6944, 0xa18c, + 0xff00, 0x810f, 0x1078, 0x336a, 0x00c0, 0x3c71, 0x6000, 0xd0e4, + 0x00c0, 0x3c71, 0x711c, 0xa186, 0x0007, 0x00c0, 0x3c5b, 0x6853, + 0x0002, 0x0078, 0x3c73, 0x6853, 0x0008, 0x0078, 0x3c73, 0x6853, + 0x000e, 0x0078, 0x3c73, 0x6853, 0x0017, 0x0078, 0x3c73, 0x6853, + 0x0035, 0x0078, 0x3c73, 0x127f, 0x6853, 0x0028, 0x0078, 0x3c73, + 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078, 0x3c91, 0x6853, 0x002a, + 0x0078, 0x3c73, 0x2009, 0x003e, 0x0078, 0x3c8c, 0x2009, 0x0004, + 0x0078, 0x3c8c, 0x2009, 0x0006, 0x0078, 0x3c8c, 0x2009, 0x0016, + 0x0078, 0x3c8c, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, 0xa105, + 0x6856, 0x2091, 0x8000, 0x1078, 0x35c4, 0x2091, 0x8001, 0x007c, + 0x1078, 0x12db, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, + 0x3ca8, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078, 0x3cb4, + 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x3cb4, 0x7074, 0xa081, + 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c, 0x0d7e, + 0x1078, 0x40c4, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204, + 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08, + 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x3cd3, 0xa086, + 0x1000, 0x00c0, 0x3cf4, 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x00c0, + 0x3cda, 0x3e60, 0xac84, 0x0007, 0x00c0, 0x3cf4, 0xac82, 0x7200, + 0x0048, 0x3cf4, 0x6854, 0xac02, 0x00c8, 0x3cf4, 0x2009, 0x0047, + 0x1078, 0x544c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x7a28, 0x7a1c, + 0xd284, 0x00c0, 0x3cc5, 0x007c, 0xa016, 0x1078, 0x1505, 0x0078, + 0x3cea, 0x157e, 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, + 0xa584, 0x0070, 0x00c0, 0x3d22, 0xa484, 0x7000, 0xa086, 0x1000, + 0x00c0, 0x3d22, 0x1078, 0x3d2f, 0x0040, 0x3d22, 0x20e1, 0x3000, + 0x7828, 0x7828, 0x1078, 0x3d4d, 0x147f, 0x137f, 0x157f, 0x2009, + 0x6db8, 0x2104, 0xa005, 0x00c0, 0x3d1e, 0x007c, 0x1078, 0x4713, + 0x0078, 0x3d1d, 0x1078, 0x6b3d, 0x1078, 0x3d2f, 0x20e1, 0x3000, + 0x7828, 0x7828, 0x147f, 0x137f, 0x157f, 0x0078, 0x3d1d, 0xa484, + 0x01ff, 0x6872, 0xa005, 0x0040, 0x3d41, 0xa080, 0x001f, 0xa084, + 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, + 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, + 0x53a5, 0xa085, 0x0001, 0x0078, 0x3d40, 0x7000, 0xa084, 0xff00, + 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x3d5a, 0x0078, + 0x3e3e, 0x007c, 0xa196, 0x2000, 0x00c0, 0x3d6b, 0x6900, 0xa18e, + 0x0001, 0x00c0, 0x3d67, 0x1078, 0x2a02, 0x0078, 0x3d59, 0x1078, + 0x3d73, 0x0078, 0x3d59, 0xa196, 0x8000, 0x00c0, 0x3d59, 0x1078, + 0x3ec4, 0x0078, 0x3d59, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, + 0xa196, 0x0001, 0x0040, 0x3d80, 0xa196, 0x0023, 0x00c0, 0x3e36, + 0xa08e, 0x0023, 0x00c0, 0x3db1, 0x1078, 0x3f36, 0x0040, 0x3e36, + 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x3d99, 0x7034, + 0xa005, 0x00c0, 0x3e36, 0x2009, 0x0015, 0x1078, 0x544c, 0x0078, + 0x3e36, 0xa08e, 0x0210, 0x00c0, 0x3da3, 0x2009, 0x0015, 0x1078, + 0x544c, 0x0078, 0x3e36, 0xa08e, 0x0100, 0x00c0, 0x3e36, 0x7034, + 0xa005, 0x00c0, 0x3e36, 0x2009, 0x0016, 0x1078, 0x544c, 0x0078, + 0x3e36, 0xa08e, 0x0022, 0x00c0, 0x3e36, 0x7030, 0xa08e, 0x0300, + 0x00c0, 0x3dc2, 0x7034, 0xa005, 0x00c0, 0x3e36, 0x2009, 0x0017, + 0x0078, 0x3e1e, 0xa08e, 0x0500, 0x00c0, 0x3dce, 0x7034, 0xa005, + 0x00c0, 0x3e36, 0x2009, 0x0018, 0x0078, 0x3e1e, 0xa08e, 0x2010, + 0x00c0, 0x3dd6, 0x2009, 0x0019, 0x0078, 0x3e1e, 0xa08e, 0x2110, + 0x00c0, 0x3dde, 0x2009, 0x001a, 0x0078, 0x3e1e, 0xa08e, 0x5200, + 0x00c0, 0x3dea, 0x7034, 0xa005, 0x00c0, 0x3e36, 0x2009, 0x001b, + 0x0078, 0x3e1e, 0xa08e, 0x5000, 0x00c0, 0x3df6, 0x7034, 0xa005, + 0x00c0, 0x3e36, 0x2009, 0x001c, 0x0078, 0x3e1e, 0xa08e, 0x1200, + 0x00c0, 0x3e02, 0x7034, 0xa005, 0x00c0, 0x3e36, 0x2009, 0x0024, + 0x0078, 0x3e1e, 0xa08e, 0x2400, 0x00c0, 0x3e08, 0x0078, 0x3e1c, + 0xa08e, 0x5300, 0x00c0, 0x3e0e, 0x0078, 0x3e1c, 0xa08e, 0x0f00, + 0x00c0, 0x3e16, 0x2009, 0x0020, 0x0078, 0x3e1e, 0xa08e, 0x5300, + 0x00c0, 0x3e1c, 0x0078, 0x3e1c, 0x2009, 0x001d, 0x017e, 0x2011, + 0x7083, 0x2204, 0x1078, 0x1f61, 0x1078, 0x3333, 0x00c0, 0x3e38, + 0x0c7e, 0x1078, 0x53bf, 0x0040, 0x3e3b, 0x017f, 0x611a, 0x601f, + 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x544c, 0x0c7f, 0x007c, + 0x017f, 0x0078, 0x3e36, 0x0c7f, 0x0078, 0x3e38, 0xa084, 0x0007, + 0x0079, 0x3e43, 0x007c, 0x3e4b, 0x3e4b, 0x3e4b, 0x3e4b, 0x3e4b, + 0x3e4c, 0x3e65, 0x3ead, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x3e64, + 0x7120, 0x2160, 0xac8c, 0x0007, 0x00c0, 0x3e64, 0xac8a, 0x7200, + 0x0048, 0x3e64, 0x6854, 0xac02, 0x00c8, 0x3e64, 0x7124, 0x610a, + 0x2009, 0x0046, 0x1078, 0x544c, 0x007c, 0x0c7e, 0x7110, 0xd1bc, + 0x00c0, 0x3eab, 0x2011, 0x7083, 0x2204, 0xa080, 0x2154, 0x200c, + 0xa18c, 0xff00, 0x810f, 0x1078, 0x336a, 0x00c0, 0x3eab, 0x6204, + 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x3e90, 0x0c7e, + 0x1078, 0x53bf, 0x017f, 0x0040, 0x3eab, 0x611a, 0x601f, 0x0006, + 0x7120, 0x610a, 0x2009, 0x0044, 0x1078, 0x544c, 0x0078, 0x3eab, + 0x0c7e, 0x1078, 0x53bf, 0x017f, 0x0040, 0x3eab, 0x611a, 0x601f, + 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x3ea3, 0x6007, + 0x0005, 0x0078, 0x3ea5, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, + 0x4311, 0x1078, 0x4713, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, + 0x3ec3, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x3ec3, 0xac82, + 0x7200, 0x0048, 0x3ec3, 0x6854, 0xac02, 0x00c8, 0x3ec3, 0x2009, + 0x0045, 0x1078, 0x544c, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, + 0xa18e, 0x0000, 0x00c0, 0x3ed4, 0xa084, 0x000f, 0xa08a, 0x0006, + 0x10c8, 0x126a, 0x1079, 0x3ed5, 0x007c, 0x3edb, 0x3edc, 0x3edb, + 0x3edb, 0x3f18, 0x3f27, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x3f17, + 0x700c, 0x1078, 0x1f61, 0x1078, 0x3333, 0x00c0, 0x3f17, 0x6204, + 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x3f00, 0x0c7e, + 0x1078, 0x53bf, 0x017f, 0x0040, 0x3f17, 0x611a, 0x601f, 0x0005, + 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x544c, 0x0078, 0x3f17, + 0x0c7e, 0x1078, 0x53bf, 0x017f, 0x0040, 0x3f17, 0x611a, 0x601f, + 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x3f13, 0x2009, + 0x0005, 0x0078, 0x3f15, 0x2009, 0x0001, 0x1078, 0x544c, 0x007c, + 0x7110, 0xd1bc, 0x0040, 0x3f26, 0x1078, 0x3f36, 0x0040, 0x3f26, + 0x7124, 0x610a, 0x2009, 0x0089, 0x1078, 0x544c, 0x007c, 0x7110, + 0xd1bc, 0x0040, 0x3f35, 0x1078, 0x3f36, 0x0040, 0x3f35, 0x7124, + 0x610a, 0x2009, 0x008a, 0x1078, 0x544c, 0x007c, 0x7020, 0x2060, + 0xac84, 0x0007, 0x00c0, 0x3f49, 0xac82, 0x7200, 0x0048, 0x3f49, + 0x2001, 0x6c15, 0x2004, 0xac02, 0x00c8, 0x3f49, 0xa085, 0x0001, + 0x007c, 0xa006, 0x0078, 0x3f48, 0x2071, 0x6dc3, 0x7003, 0x0003, + 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x7200, 0x7007, + 0x0000, 0x7026, 0x702b, 0x4e24, 0x7032, 0x7037, 0x4e70, 0x703b, + 0x0002, 0x703f, 0x0000, 0x007c, 0x2071, 0x6dc3, 0x00e0, 0x4013, + 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0, 0x3fdc, 0x700f, + 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000, 0x7138, 0x8109, + 0x713a, 0x00c0, 0x3fda, 0x703b, 0x0002, 0x2009, 0x0100, 0x2104, + 0xa082, 0x0003, 0x00c8, 0x3fda, 0x703c, 0xa086, 0x0001, 0x00c0, + 0x3fb7, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, + 0x3f95, 0x6803, 0x1000, 0x0078, 0x3f9c, 0x6804, 0xa084, 0x1000, + 0x0040, 0x3f9c, 0x6803, 0x0100, 0x6803, 0x0000, 0x703f, 0x0000, + 0x2069, 0x6db0, 0x6804, 0xa082, 0x0006, 0x00c0, 0x3fa9, 0x6807, + 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x3fb0, 0x6833, 0x0000, + 0x1078, 0x4713, 0x1078, 0x47c3, 0x0d7f, 0x0078, 0x3fda, 0x0d7e, + 0x2069, 0x6c00, 0x6944, 0x6860, 0xa102, 0x00c8, 0x3fd9, 0x2069, + 0x6db0, 0x6804, 0xa086, 0x0000, 0x00c0, 0x3fd9, 0x6830, 0xa086, + 0x0000, 0x00c0, 0x3fd9, 0x703f, 0x0001, 0x6807, 0x0006, 0x6833, + 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069, 0x0140, 0x6803, + 0x0600, 0x0d7f, 0x0078, 0x3fdf, 0x127e, 0x2091, 0x8000, 0x7024, + 0xa00d, 0x0040, 0x3ff0, 0x7020, 0x8001, 0x7022, 0x00c0, 0x3ff0, + 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0, 0x3ff0, 0x7028, 0x107a, + 0x7030, 0xa00d, 0x0040, 0x4001, 0x702c, 0x8001, 0x702e, 0x00c0, + 0x4001, 0x702f, 0x0009, 0x8109, 0x7132, 0x00c0, 0x4001, 0x7034, + 0x107a, 0x7018, 0xa00d, 0x0040, 0x4012, 0x7008, 0x8001, 0x700a, + 0x00c0, 0x4012, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x4012, + 0x701c, 0x107a, 0x127f, 0x7004, 0x0079, 0x4016, 0x403d, 0x403e, + 0x405a, 0x0e7e, 0x2071, 0x6dc3, 0x7018, 0xa005, 0x00c0, 0x4024, + 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, + 0x2071, 0x6dc3, 0x701c, 0xa206, 0x00c0, 0x4030, 0x701a, 0x701e, + 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6dc3, 0x6088, 0xa102, + 0x0048, 0x403b, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, + 0x336a, 0x00c0, 0x4050, 0x6088, 0x8001, 0x0048, 0x4050, 0x608a, + 0x00c0, 0x4050, 0x127e, 0x2091, 0x8000, 0x1078, 0x4713, 0x127f, + 0x8108, 0xa182, 0x007e, 0x0048, 0x4058, 0xa00e, 0x7007, 0x0002, + 0x7112, 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x6014, + 0xa005, 0x0040, 0x4089, 0x8001, 0x6016, 0x00c0, 0x4089, 0x611c, + 0xa186, 0x0003, 0x0040, 0x4070, 0xa186, 0x0006, 0x00c0, 0x4087, + 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x4087, 0xa082, + 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x4080, 0x2001, 0x1999, + 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x4089, 0x1078, + 0x5e70, 0x127f, 0xac88, 0x0008, 0x7116, 0x2001, 0x6c16, 0x2004, + 0xa102, 0x0048, 0x4097, 0x7017, 0x7200, 0x7007, 0x0000, 0x007c, + 0x0e7e, 0x2071, 0x6dc3, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b, + 0x0002, 0x0e7f, 0x007c, 0x2001, 0x6dcc, 0x2003, 0x0000, 0x007c, + 0x0e7e, 0x2071, 0x6dc3, 0x7033, 0x07d0, 0x702f, 0x0009, 0x0e7f, + 0x007c, 0x2011, 0x6dcf, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, + 0x6dc3, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0c7e, + 0x2061, 0x6e54, 0x0c7f, 0x007c, 0xa184, 0x000f, 0x8003, 0x8003, + 0x8003, 0xa080, 0x6e54, 0x2060, 0x007c, 0x6854, 0xa08a, 0x199a, + 0x0048, 0x40d4, 0x2001, 0x1999, 0xa005, 0x00c0, 0x40e4, 0x6944, + 0x0c7e, 0x1078, 0x40c4, 0x6014, 0x0c7f, 0xa005, 0x00c0, 0x40e9, + 0x2001, 0x001e, 0x0078, 0x40e9, 0xa08e, 0xffff, 0x00c0, 0x40e9, + 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, + 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4124, 0xd0b4, 0x00c0, 0x4100, + 0xd0bc, 0x00c0, 0x4112, 0x2009, 0x0006, 0x1078, 0x4147, 0x007c, + 0xd0fc, 0x0040, 0x410d, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, + 0x4140, 0xa08e, 0x0000, 0x00c0, 0x4140, 0x2009, 0x0043, 0x1078, + 0x544c, 0x007c, 0xd0fc, 0x0040, 0x411f, 0xa084, 0x0003, 0xa08e, + 0x0003, 0x0040, 0x4140, 0xa08e, 0x0000, 0x00c0, 0x4140, 0x2009, + 0x0042, 0x1078, 0x544c, 0x007c, 0xd0fc, 0x0040, 0x4136, 0xa084, + 0x0003, 0xa08e, 0x0003, 0x0040, 0x4140, 0xa08e, 0x0002, 0x0040, + 0x413a, 0x2009, 0x0041, 0x1078, 0x544c, 0x007c, 0x1078, 0x4145, + 0x0078, 0x4135, 0x2009, 0x0043, 0x1078, 0x544c, 0x0078, 0x4135, + 0x2009, 0x0004, 0x1078, 0x4147, 0x007c, 0x2009, 0x0001, 0x6010, + 0xa0ec, 0xf000, 0x0040, 0x416b, 0x2068, 0x6952, 0x6800, 0x6012, + 0xa186, 0x0001, 0x00c0, 0x4165, 0x694c, 0xa18c, 0x8100, 0xa18e, + 0x8100, 0x00c0, 0x4165, 0x0c7e, 0x6944, 0x1078, 0x40c4, 0x6204, + 0x8210, 0x0048, 0x4164, 0x6206, 0x0c7f, 0x1078, 0x35c4, 0x6010, + 0xa06d, 0x10c0, 0x40cd, 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010, + 0x2061, 0x6e54, 0x6000, 0x81ff, 0x0040, 0x4179, 0xa205, 0x0078, + 0x417a, 0xa204, 0x6002, 0xace0, 0x0008, 0x00f0, 0x4172, 0x0c7f, + 0x157f, 0x007c, 0x6808, 0xa005, 0x0040, 0x418a, 0x8001, 0x680a, + 0xa085, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x2079, 0x6db0, + 0x127f, 0x0d7e, 0x2069, 0x6db0, 0x6803, 0x0005, 0x2069, 0x0004, + 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, + 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x41a6, 0x41b0, 0x41d5, + 0x4224, 0x41b6, 0x41d5, 0x41ae, 0x41ae, 0x41ae, 0x1078, 0x126a, + 0x1078, 0x40a3, 0x1078, 0x4713, 0x0c7f, 0x007c, 0x62c0, 0x82ff, + 0x00c0, 0x41bc, 0x0c7f, 0x007c, 0x2011, 0x308c, 0x1078, 0x4026, + 0x7828, 0xa092, 0x0002, 0x00c8, 0x41cb, 0x8000, 0x782a, 0x1078, + 0x30c0, 0x0078, 0x41ba, 0x1078, 0x308c, 0x7807, 0x0003, 0x7827, + 0x0000, 0x782b, 0x0000, 0x0078, 0x41ba, 0x1078, 0x40a3, 0x62c0, + 0x82ff, 0x00c0, 0x41e7, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, + 0x126a, 0x2009, 0x0013, 0x1078, 0x544c, 0x0c7f, 0x007c, 0x3900, + 0xa082, 0x6ef4, 0x00c8, 0x41ee, 0x1078, 0x5397, 0x0c7e, 0x7824, + 0xa065, 0x1040, 0x126a, 0x7804, 0xa086, 0x0004, 0x0040, 0x4262, + 0x7828, 0xa092, 0x2710, 0x00c8, 0x4204, 0x8000, 0x782a, 0x0c7f, + 0x1078, 0x4e09, 0x0078, 0x41e5, 0x6104, 0xa186, 0x0003, 0x00c0, + 0x421b, 0x0e7e, 0x2071, 0x6c00, 0x70b4, 0x0e7f, 0xd08c, 0x0040, + 0x421b, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x6c00, 0x1078, + 0x30c9, 0x0e7f, 0x0c7f, 0x1078, 0x6b90, 0x2009, 0x0014, 0x1078, + 0x544c, 0x0c7f, 0x0078, 0x41e5, 0x2001, 0x6dcc, 0x2003, 0x0000, + 0x62c0, 0x82ff, 0x00c0, 0x4238, 0x782b, 0x0000, 0x7824, 0xa065, + 0x1040, 0x126a, 0x2009, 0x0013, 0x1078, 0x5499, 0x0c7f, 0x007c, + 0x0c7e, 0x0d7e, 0x7824, 0xa005, 0x1040, 0x126a, 0x781c, 0xa06d, + 0x1040, 0x126a, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, + 0x5425, 0x693c, 0x81ff, 0x1040, 0x126a, 0x8109, 0x693e, 0x6854, + 0xa015, 0x0040, 0x4256, 0x7a1e, 0x0078, 0x4258, 0x7918, 0x791e, + 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x4713, + 0x0078, 0x4236, 0x6104, 0xa186, 0x0002, 0x0040, 0x426d, 0xa186, + 0x0004, 0x0040, 0x426d, 0x0078, 0x41f8, 0x7808, 0xac06, 0x0040, + 0x41f8, 0x1078, 0x461a, 0x1078, 0x4311, 0x0c7f, 0x1078, 0x4713, + 0x0078, 0x41e5, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x6dcf, 0x2013, + 0x0000, 0x62c8, 0x82ff, 0x00c0, 0x4294, 0x62c4, 0x82ff, 0x00c0, + 0x4294, 0x793c, 0xa1e5, 0x0000, 0x0040, 0x4292, 0x2009, 0x0049, + 0x1078, 0x544c, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x6ef4, 0x00c8, + 0x429b, 0x1078, 0x5397, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, + 0x4292, 0x7944, 0xa192, 0x2710, 0x00c8, 0x42ba, 0x8108, 0x7946, + 0x1078, 0x40a8, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, + 0x00c0, 0x42b6, 0x6017, 0x0012, 0x0078, 0x4292, 0x6017, 0x0016, + 0x0078, 0x4292, 0x1078, 0x6b90, 0x793c, 0x2160, 0x2009, 0x004a, + 0x1078, 0x544c, 0x0078, 0x4292, 0x007e, 0x017e, 0x0c7e, 0x127e, + 0x600f, 0x0000, 0x2c08, 0x2061, 0x6db0, 0x2091, 0x8000, 0x6020, + 0x8000, 0x6022, 0x6010, 0xa005, 0x0040, 0x42df, 0xa080, 0x0003, + 0x2102, 0x6112, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, + 0x6112, 0x0078, 0x42da, 0x0d7e, 0x2069, 0x6db0, 0x6000, 0xd0d4, + 0x0040, 0x42f8, 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, + 0x42f3, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x471b, + 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0040, 0x430a, 0x6056, 0x605b, + 0x0000, 0x007e, 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0x6db0, + 0x0078, 0x42ea, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, + 0x42ea, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, + 0x0000, 0x2c08, 0x2061, 0x6db0, 0x6020, 0x8000, 0x6022, 0x6008, + 0xa005, 0x0040, 0x432c, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, + 0x0c7f, 0x017f, 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x4327, + 0x0c7e, 0x600f, 0x0000, 0x2c08, 0x2061, 0x6db0, 0x6034, 0xa005, + 0x0040, 0x4340, 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, + 0x613a, 0x6136, 0x0078, 0x433e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, + 0x067e, 0x027e, 0x007e, 0x127e, 0x2071, 0x6db0, 0x7638, 0x2660, + 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x43a4, 0x6018, 0xa080, + 0x0028, 0x2004, 0xa206, 0x00c0, 0x439f, 0x703c, 0xac06, 0x00c0, + 0x4366, 0x6003, 0x000a, 0x630a, 0x0078, 0x439f, 0x7038, 0xac36, + 0x00c0, 0x436c, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x437a, + 0x2c00, 0xaf36, 0x0040, 0x4378, 0x2f00, 0x7036, 0x0078, 0x437a, + 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x4383, + 0x7e0e, 0x0078, 0x4384, 0x2678, 0x600f, 0x0000, 0x1078, 0x5fcd, + 0x0040, 0x439a, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, + 0x43ad, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x35c4, + 0x1078, 0x60db, 0x1078, 0x60e8, 0x0c7f, 0x0078, 0x4353, 0x2c78, + 0x600c, 0x2060, 0x0078, 0x4353, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, - 0x00c0, 0x462f, 0x1078, 0x6e8b, 0x0078, 0x463a, 0x007e, 0x067e, + 0x00c0, 0x4391, 0x1078, 0x6ac6, 0x0078, 0x439a, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, - 0x2079, 0x71b6, 0x7838, 0xa065, 0x0040, 0x468d, 0x600c, 0x007e, - 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x4674, 0x6003, 0x000a, - 0x630a, 0x2c30, 0x0078, 0x468a, 0x1078, 0x6336, 0x0040, 0x4688, - 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4696, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3840, 0x1078, 0x644a, - 0x1078, 0x6457, 0x007f, 0x0078, 0x4663, 0x7e3a, 0x7e36, 0x127f, + 0x2079, 0x6db0, 0x7838, 0xa065, 0x0040, 0x43ed, 0x600c, 0x007e, + 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x43d4, 0x6003, 0x000a, + 0x630a, 0x2c30, 0x0078, 0x43ea, 0x1078, 0x5fcd, 0x0040, 0x43e8, + 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x43f6, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, + 0x1078, 0x60e8, 0x007f, 0x0078, 0x43c3, 0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x467f, 0x1078, 0x6e8b, 0x0078, 0x4688, 0x027e, - 0x1078, 0x46b3, 0x1078, 0x474c, 0x027f, 0x007c, 0x0f7e, 0x127e, - 0x2079, 0x71b6, 0x2091, 0x8000, 0x1078, 0x47e3, 0x1078, 0x484b, + 0x0006, 0x00c0, 0x43df, 0x1078, 0x6ac6, 0x0078, 0x43e8, 0x027e, + 0x1078, 0x4413, 0x1078, 0x44aa, 0x027f, 0x007c, 0x0f7e, 0x127e, + 0x2079, 0x6db0, 0x2091, 0x8000, 0x1078, 0x453f, 0x1078, 0x45a7, 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, - 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x71b6, 0x7614, 0x2660, - 0x2678, 0x8cff, 0x0040, 0x473b, 0x6018, 0xa080, 0x0028, 0x2004, - 0xa206, 0x00c0, 0x4736, 0x7024, 0xac06, 0x00c0, 0x46f9, 0x2069, - 0x0100, 0x68c0, 0xa005, 0x0040, 0x46f4, 0x1078, 0x50b0, 0x68c3, - 0x0000, 0x1078, 0x5525, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, - 0x6b04, 0xa384, 0x1000, 0x0040, 0x46e9, 0x6803, 0x0100, 0x6803, - 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x46f1, 0x6827, - 0x0001, 0x037f, 0x0078, 0x46f9, 0x6003, 0x0009, 0x630a, 0x0078, - 0x4736, 0x7014, 0xac36, 0x00c0, 0x46ff, 0x660c, 0x7616, 0x7010, - 0xac36, 0x00c0, 0x470d, 0x2c00, 0xaf36, 0x0040, 0x470b, 0x2f00, - 0x7012, 0x0078, 0x470d, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, - 0xaf06, 0x0040, 0x4716, 0x7e0e, 0x0078, 0x4717, 0x2678, 0x600f, - 0x0000, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x472f, 0x601c, - 0xa086, 0x0003, 0x00c0, 0x4743, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x1078, 0x64f5, 0x1078, 0x3840, 0x1078, 0x644a, 0x1078, - 0x6457, 0x1078, 0x53f5, 0x0c7f, 0x0078, 0x46c1, 0x2c78, 0x600c, - 0x2060, 0x0078, 0x46c1, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, - 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4724, - 0x1078, 0x6e8b, 0x0078, 0x472f, 0x0c7e, 0x007e, 0x127e, 0x2091, - 0x8000, 0xa280, 0x7120, 0x2004, 0xa065, 0x0040, 0x47df, 0x0f7e, - 0x0e7e, 0x0d7e, 0x067e, 0x2071, 0x71b6, 0x6654, 0x7018, 0xac06, - 0x00c0, 0x4763, 0x761a, 0x701c, 0xac06, 0x00c0, 0x476f, 0x86ff, - 0x00c0, 0x476e, 0x7018, 0x701e, 0x0078, 0x476f, 0x761e, 0x6058, - 0xa07d, 0x0040, 0x4774, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x477a, - 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, - 0xc0dc, 0x6002, 0x1078, 0x3473, 0x0040, 0x47db, 0x7624, 0x86ff, - 0x0040, 0x47cb, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x47cb, - 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x47c2, 0x1078, - 0x50b0, 0x68c3, 0x0000, 0x1078, 0x5525, 0x7027, 0x0000, 0x037e, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x47ab, 0x6803, + 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x6db0, 0x7614, 0x2660, + 0x2678, 0x8cff, 0x0040, 0x4499, 0x6018, 0xa080, 0x0028, 0x2004, + 0xa206, 0x00c0, 0x4494, 0x7024, 0xac06, 0x00c0, 0x4459, 0x2069, + 0x0100, 0x68c0, 0xa005, 0x0040, 0x4454, 0x1078, 0x4e17, 0x68c3, + 0x0000, 0x1078, 0x529d, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, + 0x6b04, 0xa384, 0x1000, 0x0040, 0x4449, 0x6803, 0x0100, 0x6803, + 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4451, 0x6827, + 0x0001, 0x037f, 0x0078, 0x4459, 0x6003, 0x0009, 0x630a, 0x0078, + 0x4494, 0x7014, 0xac36, 0x00c0, 0x445f, 0x660c, 0x7616, 0x7010, + 0xac36, 0x00c0, 0x446d, 0x2c00, 0xaf36, 0x0040, 0x446b, 0x2f00, + 0x7012, 0x0078, 0x446d, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, + 0xaf06, 0x0040, 0x4476, 0x7e0e, 0x0078, 0x4477, 0x2678, 0x600f, + 0x0000, 0x6010, 0x2068, 0x1078, 0x5fcd, 0x0040, 0x448d, 0x601c, + 0xa086, 0x0003, 0x00c0, 0x44a1, 0x6837, 0x0103, 0x6b4a, 0x6847, + 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, 0x1078, 0x60e8, 0x1078, + 0x516d, 0x0c7f, 0x0078, 0x4421, 0x2c78, 0x600c, 0x2060, 0x0078, + 0x4421, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, + 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4484, 0x1078, 0x6ac6, + 0x0078, 0x448d, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0xa280, + 0x6d20, 0x2004, 0xa065, 0x0040, 0x453b, 0x0f7e, 0x0e7e, 0x0d7e, + 0x067e, 0x2071, 0x6db0, 0x6654, 0x7018, 0xac06, 0x00c0, 0x44c1, + 0x761a, 0x701c, 0xac06, 0x00c0, 0x44cd, 0x86ff, 0x00c0, 0x44cc, + 0x7018, 0x701e, 0x0078, 0x44cd, 0x761e, 0x6058, 0xa07d, 0x0040, + 0x44d2, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x44d8, 0x2f00, 0x685a, + 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, + 0x1078, 0x32e7, 0x0040, 0x4537, 0x7624, 0x86ff, 0x0040, 0x4529, + 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4529, 0x0d7e, 0x2069, + 0x0100, 0x68c0, 0xa005, 0x0040, 0x4520, 0x1078, 0x4e17, 0x68c3, + 0x0000, 0x1078, 0x529d, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, + 0x6b04, 0xa384, 0x1000, 0x0040, 0x4509, 0x6803, 0x0100, 0x6803, + 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4511, 0x6827, + 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x451a, + 0x8001, 0x603e, 0x2660, 0x1078, 0x60e8, 0x0c7f, 0x0078, 0x4529, + 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, + 0x44e0, 0x8dff, 0x0040, 0x4533, 0x6837, 0x0103, 0x6b4a, 0x6847, + 0x0000, 0x1078, 0x35c4, 0x1078, 0x516d, 0x0078, 0x44e0, 0x067f, + 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, + 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, + 0x4597, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, + 0x457c, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4576, 0x1078, + 0x4e17, 0x68c3, 0x0000, 0x1078, 0x529d, 0x7827, 0x0000, 0x037e, + 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x456b, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, - 0x47b3, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, - 0x0040, 0x47bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x6457, 0x0c7f, - 0x0078, 0x47cb, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, - 0x0c7f, 0x0078, 0x4782, 0x8dff, 0x0040, 0x47d7, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x64f5, 0x1078, 0x3840, 0x1078, - 0x53f5, 0x0078, 0x4782, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, - 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, - 0x0000, 0x7814, 0xa065, 0x0040, 0x483b, 0x600c, 0x007e, 0x600f, - 0x0000, 0x7824, 0xac06, 0x00c0, 0x4820, 0x2069, 0x0100, 0x68c0, - 0xa005, 0x0040, 0x481a, 0x1078, 0x50b0, 0x68c3, 0x0000, 0x1078, - 0x5525, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, - 0x1000, 0x0040, 0x480f, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0040, 0x4817, 0x6827, 0x0001, 0x037f, - 0x0078, 0x4820, 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x4838, - 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x4834, 0x601c, 0xa086, - 0x0003, 0x00c0, 0x4842, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x3840, 0x1078, 0x644a, 0x1078, 0x6457, 0x1078, 0x53f5, - 0x007f, 0x0078, 0x47ea, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, - 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x482b, 0x1078, - 0x6e8b, 0x0078, 0x4834, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, - 0xa065, 0x0040, 0x48b7, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, - 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x3473, 0x0040, - 0x48b4, 0x7e24, 0x86ff, 0x0040, 0x48a6, 0xa680, 0x0004, 0x2004, - 0xad06, 0x00c0, 0x48a6, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, - 0x0040, 0x489d, 0x1078, 0x50b0, 0x68c3, 0x0000, 0x1078, 0x5525, - 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, - 0x0040, 0x4886, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0040, 0x488e, 0x6827, 0x0001, 0x037f, 0x0d7f, - 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4897, 0x8001, 0x603e, 0x2660, - 0x1078, 0x6457, 0x0c7f, 0x0078, 0x48a6, 0x0d7f, 0x0c7e, 0x2660, - 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x485d, 0x8dff, 0x0040, - 0x48b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3840, - 0x1078, 0x53f5, 0x0078, 0x485d, 0x007f, 0x0078, 0x4850, 0x781e, - 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, - 0x2071, 0x71b6, 0x7004, 0xa084, 0x0007, 0x0079, 0x48c7, 0x48d1, - 0x48d4, 0x48ed, 0x4909, 0x494e, 0x48d1, 0x48d1, 0x48cf, 0x1078, - 0x1288, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x48e2, - 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x48e9, 0x7216, - 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, - 0x007c, 0x7216, 0x7212, 0x0078, 0x48e2, 0x6018, 0x2060, 0x1078, - 0x3473, 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, - 0x48fe, 0x6054, 0xa015, 0x0040, 0x4905, 0x721e, 0x7007, 0x0000, - 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, - 0x48fe, 0x7024, 0xa065, 0x0040, 0x494b, 0x700c, 0xac06, 0x00c0, - 0x4920, 0x1078, 0x53f5, 0x600c, 0xa015, 0x0040, 0x491c, 0x720e, - 0x600f, 0x0000, 0x0078, 0x4949, 0x720e, 0x720a, 0x0078, 0x4949, - 0x7014, 0xac06, 0x00c0, 0x4933, 0x1078, 0x53f5, 0x600c, 0xa015, - 0x0040, 0x492f, 0x7216, 0x600f, 0x0000, 0x0078, 0x4949, 0x7216, - 0x7212, 0x0078, 0x4949, 0x6018, 0x2060, 0x1078, 0x3473, 0x6000, - 0xc0dc, 0x6002, 0x1078, 0x53f5, 0x701c, 0xa065, 0x0040, 0x4949, - 0x6054, 0xa015, 0x0040, 0x4947, 0x721e, 0x0078, 0x4949, 0x7218, - 0x721e, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, - 0x0040, 0x495b, 0x1078, 0x53f5, 0x600c, 0xa015, 0x0040, 0x4962, - 0x720e, 0x600f, 0x0000, 0x1078, 0x5525, 0x7027, 0x0000, 0x0c7f, - 0x0e7f, 0x007c, 0x720e, 0x720a, 0x0078, 0x495b, 0x0d7e, 0x2069, - 0x71b6, 0x6830, 0xa084, 0x0003, 0x0079, 0x496e, 0x4974, 0x4976, - 0x499c, 0x4974, 0x1078, 0x1288, 0x0d7f, 0x007c, 0x0c7e, 0x6840, - 0xa086, 0x0001, 0x0040, 0x4992, 0x683c, 0xa065, 0x0040, 0x4987, - 0x600c, 0xa015, 0x0040, 0x498e, 0x6a3a, 0x600f, 0x0000, 0x6833, - 0x0000, 0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, - 0x0078, 0x4987, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x4987, - 0x6003, 0x0003, 0x0078, 0x4987, 0x0c7e, 0x6843, 0x0000, 0x6847, - 0x0000, 0x683c, 0xa065, 0x0040, 0x49b4, 0x600c, 0xa015, 0x0040, - 0x49b0, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, 0x49b4, - 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, - 0x2069, 0x71b6, 0x6804, 0xa084, 0x0007, 0x0079, 0x49bf, 0x49c9, - 0x4a56, 0x4a56, 0x4a56, 0x4a56, 0x4a58, 0x4a56, 0x49c7, 0x1078, - 0x1288, 0x6820, 0xa005, 0x00c0, 0x49cf, 0x0d7f, 0x007c, 0x0c7e, - 0x680c, 0xa065, 0x0040, 0x49de, 0x6807, 0x0004, 0x6826, 0x682b, - 0x0000, 0x1078, 0x4a9e, 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, - 0x0040, 0x49ec, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, - 0x4a9e, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, - 0x0000, 0x0040, 0x4a51, 0x704c, 0xa00d, 0x0040, 0x49fb, 0x7088, - 0xa005, 0x0040, 0x4a13, 0x7054, 0xa075, 0x0040, 0x4a04, 0xa20e, - 0x0040, 0x4a51, 0x0078, 0x4a09, 0x6818, 0xa20e, 0x0040, 0x4a51, - 0x2070, 0x704c, 0xa00d, 0x0040, 0x49fb, 0x7088, 0xa005, 0x00c0, - 0x49fb, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, 0x49fb, - 0x1078, 0x56c4, 0x0040, 0x4a51, 0x8318, 0x733e, 0x6112, 0x2e10, - 0x621a, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, 0x4a2a, - 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, - 0x0f7e, 0x2c78, 0x71a0, 0xa1e0, 0x2207, 0x2c0c, 0xa18c, 0x00ff, - 0x2061, 0x0100, 0x619a, 0x1078, 0x4db8, 0x7300, 0xc3dd, 0x7302, - 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, - 0x7803, 0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, - 0x007c, 0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4a4f, 0x0d7f, 0x007c, - 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4a64, 0x6807, 0x0004, 0x6826, - 0x682b, 0x0000, 0x1078, 0x4a9e, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, - 0x0d7e, 0x2069, 0x71b6, 0x6830, 0xa086, 0x0000, 0x00c0, 0x4a85, - 0x6838, 0xa07d, 0x0040, 0x4a85, 0x6833, 0x0001, 0x683e, 0x6847, - 0x0000, 0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x19b3, - 0x00c0, 0x4a88, 0x127f, 0x1078, 0x4fe3, 0x0d7f, 0x0f7f, 0x007c, - 0x127f, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, - 0x4a9a, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, - 0x0078, 0x4a85, 0x683a, 0x6836, 0x0078, 0x4a94, 0x601c, 0xa084, - 0x0007, 0x1079, 0x4aa4, 0x007c, 0x4aac, 0x4ab1, 0x4cf0, 0x4d88, - 0x4ab1, 0x4cf0, 0x4d88, 0x4aac, 0x1078, 0x48be, 0x1078, 0x49b7, - 0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, - 0x0030, 0x10c8, 0x1288, 0x6118, 0x2178, 0x79a0, 0xa1f8, 0x2207, - 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079, - 0x4acf, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x4b01, - 0x4b39, 0x4b51, 0x4b8a, 0x4bb7, 0x4bbf, 0x4be0, 0x4bf1, 0x4c02, - 0x4c0a, 0x4c1b, 0x4c0a, 0x4c63, 0x4bf1, 0x4c84, 0x4c8c, 0x4c02, - 0x4c8c, 0x4c9d, 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x4aff, - 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x516c, 0x5181, - 0x4aff, 0x4aff, 0x4aff, 0x4aff, 0x4be0, 0x4c0a, 0x4aff, 0x4b51, - 0x4b8a, 0x4aff, 0x563f, 0x4c0a, 0x4aff, 0x5662, 0x4c0a, 0x1078, - 0x1288, 0x20a1, 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x5200, 0x20a3, - 0x0000, 0x0d7e, 0x2069, 0x7051, 0x6804, 0xd084, 0x0040, 0x4b1b, - 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x1feb, 0x21a2, 0x017f, - 0x0d7f, 0x0078, 0x4b20, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a9, 0x0004, 0x2099, 0x7005, 0x53a6, 0x20a9, 0x0004, 0x2099, - 0x7001, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x509c, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x0500, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9, - 0x0004, 0x2099, 0x7005, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x509c, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x0300, 0x20a3, - 0x0000, 0x2099, 0x71a0, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, - 0x2099, 0x7005, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7001, 0x53a6, - 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4b6a, 0x20a9, 0x0008, - 0x20a3, 0x0000, 0x00f0, 0x4b70, 0x2099, 0x71a8, 0x20a9, 0x0008, - 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4b7b, 0x20a9, - 0x000a, 0x20a3, 0x0000, 0x00f0, 0x4b81, 0x60c3, 0x0074, 0x1078, - 0x509c, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x2010, - 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7051, 0x7904, - 0x0f7f, 0xd1ac, 0x00c0, 0x4ba6, 0xa085, 0x0020, 0xd1a4, 0x0040, - 0x4bab, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x509c, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x5000, 0x0078, 0x4b57, 0x20a1, - 0x020b, 0x1078, 0x4cb2, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x509c, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0200, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x509c, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0100, 0x20a3, - 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, - 0x509c, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0200, - 0x0078, 0x4b57, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0100, - 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, - 0x1078, 0x509c, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x4cd1, - 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, - 0x6894, 0xa086, 0x0014, 0x00c0, 0x4c41, 0x6998, 0xa184, 0xc000, - 0x00c0, 0x4c3d, 0xd1ec, 0x0040, 0x4c39, 0x20a3, 0x2100, 0x0078, - 0x4c43, 0x20a3, 0x0100, 0x0078, 0x4c43, 0x20a3, 0x0400, 0x0078, - 0x4c43, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x20a2, 0x0f7e, 0x2079, 0x7051, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, - 0x4c53, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4c58, 0xa085, 0x0010, - 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, - 0x509c, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, - 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, + 0x4573, 0x6827, 0x0001, 0x037f, 0x0078, 0x457c, 0x6003, 0x0009, + 0x630a, 0x2c30, 0x0078, 0x4594, 0x6010, 0x2068, 0x1078, 0x5fcd, + 0x0040, 0x4590, 0x601c, 0xa086, 0x0003, 0x00c0, 0x459e, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, + 0x1078, 0x60e8, 0x1078, 0x516d, 0x007f, 0x0078, 0x4546, 0x7e16, + 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, + 0x0006, 0x00c0, 0x4587, 0x1078, 0x6ac6, 0x0078, 0x4590, 0x007e, + 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, 0x4613, 0x6054, + 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, + 0x6002, 0x1078, 0x32e7, 0x0040, 0x4610, 0x7e24, 0x86ff, 0x0040, + 0x4602, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4602, 0x0d7e, + 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x45f9, 0x1078, 0x4e17, + 0x68c3, 0x0000, 0x1078, 0x529d, 0x7827, 0x0000, 0x037e, 0x2069, + 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x45e2, 0x6803, 0x0100, + 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x45ea, + 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, + 0x45f3, 0x8001, 0x603e, 0x2660, 0x1078, 0x60e8, 0x0c7f, 0x0078, + 0x4602, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, + 0x0078, 0x45b9, 0x8dff, 0x0040, 0x460c, 0x6837, 0x0103, 0x6b4a, + 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x516d, 0x0078, 0x45b9, + 0x007f, 0x0078, 0x45ac, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, + 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x6db0, 0x7004, 0xa084, + 0x0007, 0x0079, 0x4623, 0x462d, 0x4630, 0x4649, 0x4665, 0x46aa, + 0x462d, 0x462d, 0x462b, 0x1078, 0x126a, 0x0c7f, 0x0e7f, 0x007c, + 0x7024, 0xa065, 0x0040, 0x463e, 0x7020, 0x8001, 0x7022, 0x600c, + 0xa015, 0x0040, 0x4645, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, + 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, + 0x463e, 0x6018, 0x2060, 0x1078, 0x32e7, 0x6000, 0xc0dc, 0x6002, + 0x7020, 0x8001, 0x7022, 0x0040, 0x465a, 0x6054, 0xa015, 0x0040, + 0x4661, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, + 0x007c, 0x7218, 0x721e, 0x0078, 0x465a, 0x7024, 0xa065, 0x0040, + 0x46a7, 0x700c, 0xac06, 0x00c0, 0x467c, 0x1078, 0x516d, 0x600c, + 0xa015, 0x0040, 0x4678, 0x720e, 0x600f, 0x0000, 0x0078, 0x46a5, + 0x720e, 0x720a, 0x0078, 0x46a5, 0x7014, 0xac06, 0x00c0, 0x468f, + 0x1078, 0x516d, 0x600c, 0xa015, 0x0040, 0x468b, 0x7216, 0x600f, + 0x0000, 0x0078, 0x46a5, 0x7216, 0x7212, 0x0078, 0x46a5, 0x6018, + 0x2060, 0x1078, 0x32e7, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x516d, + 0x701c, 0xa065, 0x0040, 0x46a5, 0x6054, 0xa015, 0x0040, 0x46a3, + 0x721e, 0x0078, 0x46a5, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, + 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x46b7, 0x1078, 0x516d, + 0x600c, 0xa015, 0x0040, 0x46be, 0x720e, 0x600f, 0x0000, 0x1078, + 0x529d, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, + 0x0078, 0x46b7, 0x0d7e, 0x2069, 0x6db0, 0x6830, 0xa084, 0x0003, + 0x0079, 0x46ca, 0x46d0, 0x46d2, 0x46f8, 0x46d0, 0x1078, 0x126a, + 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x46ee, + 0x683c, 0xa065, 0x0040, 0x46e3, 0x600c, 0xa015, 0x0040, 0x46ea, + 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, + 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078, 0x46e3, 0x6843, 0x0000, + 0x6838, 0xa065, 0x0040, 0x46e3, 0x6003, 0x0003, 0x0078, 0x46e3, + 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, + 0x4710, 0x600c, 0xa015, 0x0040, 0x470c, 0x6a3a, 0x600f, 0x0000, + 0x683f, 0x0000, 0x0078, 0x4710, 0x683f, 0x0000, 0x683a, 0x6836, + 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x6db0, 0x6804, 0xa084, + 0x0007, 0x0079, 0x471b, 0x4725, 0x47b2, 0x47b2, 0x47b2, 0x47b2, + 0x47b4, 0x47b2, 0x4723, 0x1078, 0x126a, 0x6820, 0xa005, 0x00c0, + 0x472b, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x473a, + 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x47fa, 0x0c7f, + 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040, 0x4748, 0x6807, 0x0001, + 0x6826, 0x682b, 0x0000, 0x1078, 0x47fa, 0x0c7f, 0x0d7f, 0x007c, + 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x47ad, 0x704c, + 0xa00d, 0x0040, 0x4757, 0x7088, 0xa005, 0x0040, 0x476f, 0x7054, + 0xa075, 0x0040, 0x4760, 0xa20e, 0x0040, 0x47ad, 0x0078, 0x4765, + 0x6818, 0xa20e, 0x0040, 0x47ad, 0x2070, 0x704c, 0xa00d, 0x0040, + 0x4757, 0x7088, 0xa005, 0x00c0, 0x4757, 0x2e00, 0x681e, 0x733c, + 0x7038, 0xa302, 0x00c8, 0x4757, 0x1078, 0x53f4, 0x0040, 0x47ad, + 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, + 0xa08a, 0x199a, 0x0048, 0x4786, 0x2001, 0x1999, 0x8003, 0x801b, + 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xa1e0, + 0x2154, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, + 0x4b1d, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, + 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, + 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, + 0x0078, 0x47ab, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, + 0x47c0, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x47fa, + 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0x6db0, 0x6830, + 0xa086, 0x0000, 0x00c0, 0x47e1, 0x6838, 0xa07d, 0x0040, 0x47e1, + 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, + 0x2200, 0x027f, 0x1078, 0x1952, 0x00c0, 0x47e4, 0x127f, 0x1078, + 0x4d4a, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, + 0x0002, 0x780c, 0xa015, 0x0040, 0x47f6, 0x6a3a, 0x780f, 0x0000, + 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x47e1, 0x683a, 0x6836, + 0x0078, 0x47f0, 0x601c, 0xa084, 0x0007, 0x1079, 0x4800, 0x007c, + 0x4808, 0x480a, 0x4a59, 0x4aed, 0x480a, 0x4a59, 0x4aed, 0x4808, + 0x1078, 0x126a, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, + 0xa08a, 0x002a, 0x10c8, 0x126a, 0x6118, 0x2178, 0x79a0, 0xa1f8, + 0x2154, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, + 0x1079, 0x4828, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, + 0x4854, 0x4893, 0x48ab, 0x48e4, 0x4911, 0x4919, 0x493a, 0x494b, + 0x495c, 0x4964, 0x4975, 0x4964, 0x49bd, 0x494b, 0x49ed, 0x49f5, + 0x495c, 0x49f5, 0x4a06, 0x4852, 0x4852, 0x4852, 0x4852, 0x4852, + 0x4852, 0x4852, 0x4852, 0x4852, 0x4852, 0x4852, 0x4852, 0x4eea, + 0x4eff, 0x4852, 0x4852, 0x4852, 0x4852, 0x493a, 0x4964, 0x4852, + 0x48ab, 0x48e4, 0x1078, 0x126a, 0x20a1, 0x020b, 0x1078, 0x4a1b, + 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x6c51, 0x6804, + 0xd084, 0x0040, 0x4875, 0x6828, 0x017e, 0x2069, 0x6c00, 0x694c, + 0xa106, 0x017f, 0x00c0, 0x4875, 0x20a3, 0x0000, 0x6030, 0xa084, + 0x00ff, 0x20a2, 0x0d7f, 0x0078, 0x487a, 0x0d7f, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x6c05, 0x53a6, 0x20a9, + 0x0004, 0x2099, 0x6c01, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, + 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, + 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a1b, 0x20a3, + 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, + 0x20a2, 0x20a9, 0x0004, 0x2099, 0x6c05, 0x53a6, 0x60c3, 0x0010, + 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a1b, 0x20a3, + 0x0300, 0x20a3, 0x0000, 0x2099, 0x6da0, 0x20a9, 0x0008, 0x53a6, + 0x20a9, 0x0004, 0x2099, 0x6c05, 0x53a6, 0x20a9, 0x0004, 0x2099, + 0x6c01, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x48c4, + 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x48ca, 0x2099, 0x6da8, + 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, + 0x48d5, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x48db, 0x60c3, + 0x0074, 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a1b, + 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, + 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, + 0x6c51, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4900, 0xa085, 0x0020, + 0xd1a4, 0x0040, 0x4905, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x4e03, + 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a1b, 0x20a3, 0x5000, 0x0078, + 0x48b1, 0x20a1, 0x020b, 0x1078, 0x4a1b, 0x20a3, 0x2110, 0x20a3, + 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0014, 0x1078, 0x509c, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cd1, - 0x20a3, 0x0200, 0x0078, 0x4b07, 0x20a1, 0x020b, 0x1078, 0x4cd1, - 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, - 0x60c3, 0x0008, 0x1078, 0x509c, 0x007c, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0100, 0x20a3, - 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, - 0x509c, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, - 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, - 0x0129, 0x20a3, 0x0000, 0x1078, 0x508b, 0x22a2, 0x20a3, 0x0000, - 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x2300, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198, - 0x20a3, 0x0000, 0x1078, 0x508b, 0x22a2, 0x20a3, 0x0000, 0x7a08, - 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, - 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1288, 0xa08a, - 0x008c, 0x10c8, 0x1288, 0x6118, 0x2178, 0x79a0, 0xa1f8, 0x2207, - 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, - 0x0085, 0x1079, 0x4d0e, 0x0f7f, 0x0c7f, 0x007c, 0x4d17, 0x4d22, - 0x4d3c, 0x4d15, 0x4d15, 0x4d15, 0x4d17, 0x1078, 0x1288, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x4d4f, 0x60c3, 0x0000, 0x1078, 0x509c, - 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4d62, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, 0x0000, - 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, - 0x1078, 0x509c, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, - 0x4d75, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0004, 0x1078, 0x509c, 0x147f, 0x007c, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x8100, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, - 0x0078, 0x4cc3, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, - 0x8400, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, - 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4ce2, 0x027e, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x20a3, 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, - 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4ce2, - 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x1048, 0x1288, - 0xa08a, 0x0050, 0x10c8, 0x1288, 0x7918, 0x2160, 0x61a0, 0xa1e0, - 0x2207, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, - 0x0040, 0x1079, 0x4da6, 0x0f7f, 0x0c7f, 0x007c, 0x4db8, 0x4e68, - 0x4e29, 0x4f77, 0x4db6, 0x4db6, 0x4db6, 0x4db6, 0x4db6, 0x4db6, - 0x4db6, 0x530e, 0x531f, 0x5330, 0x5341, 0x4db6, 0x1078, 0x1288, - 0x0d7e, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e09, 0x7910, - 0x2168, 0x6948, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, - 0xa184, 0x0006, 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x4dd3, 0x20a3, - 0x0002, 0x0078, 0x4ddf, 0xd1b4, 0x0040, 0x4dda, 0x20a3, 0x0001, - 0x0078, 0x4ddf, 0x20a3, 0x0000, 0x2230, 0x0078, 0x4de1, 0x6a80, - 0x6e7c, 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, - 0x8000, 0x00f0, 0x4de5, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, - 0x9080, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, - 0x71d2, 0x2003, 0x07d0, 0x2001, 0x71d1, 0x2003, 0x0009, 0x2001, - 0x71d7, 0x2003, 0x0002, 0x1078, 0x14b7, 0x147f, 0x157f, 0x0d7f, - 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, - 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0xa006, 0x20a3, - 0x0600, 0x6198, 0x21a2, 0x20a2, 0x6130, 0x21a2, 0x20a3, 0x0829, - 0x20a2, 0x22a2, 0x20a2, 0x2fa2, 0x20a3, 0xffff, 0x20a2, 0x20a2, - 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, - 0x4e49, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, - 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x60c3, 0x000c, 0x1078, 0x509c, 0x147f, 0x137f, 0x157f, 0x0d7f, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0500, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, - 0x20a3, 0x0000, 0x1078, 0x508b, 0x22a2, 0x20a3, 0x0000, 0x7a08, - 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, - 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4f58, - 0x7810, 0x2068, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x7810, 0xa084, 0xf000, 0x00c0, 0x4e85, 0x7810, 0xa084, 0x0700, - 0x8007, 0x1079, 0x4e8d, 0x0078, 0x4e88, 0xa006, 0x1079, 0x4e8d, - 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x4e97, 0x4ef9, 0x4efd, - 0x4f20, 0x4f2d, 0x4f3f, 0x4f43, 0x4e95, 0x1078, 0x1288, 0x017e, - 0x037e, 0x694c, 0xa18c, 0x0003, 0xa186, 0x0000, 0x00c0, 0x4eaa, - 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, - 0x0078, 0x4f24, 0xa186, 0x0001, 0x00c0, 0x4ef4, 0x6b78, 0x23a2, - 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, - 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040, 0x4ef3, - 0xd3c4, 0x0040, 0x4ec5, 0x687c, 0xa108, 0xd3cc, 0x0040, 0x4eca, - 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, - 0x831f, 0x23a2, 0x8000, 0x00f0, 0x4ecf, 0x157f, 0x22a2, 0x22a2, - 0x22a2, 0xa184, 0x0003, 0x0040, 0x4ef3, 0x20a1, 0x020b, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, - 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x508b, - 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x509c, - 0x007c, 0x20a3, 0x0008, 0x0078, 0x4f22, 0x20a3, 0x0302, 0x22a2, - 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, - 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x509c, 0x007c, - 0x20a3, 0x0028, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x60c3, 0x0018, 0x1078, 0x509c, 0x007c, 0x20a3, 0x0100, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x509c, 0x007c, 0x20a3, - 0x0008, 0x0078, 0x4f22, 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, - 0xa384, 0x00ff, 0x8001, 0x00c0, 0x4f51, 0x22a2, 0x037f, 0x0078, - 0x4f22, 0x20a3, 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x4f24, - 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, - 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, - 0x0000, 0x1078, 0x508b, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, + 0x0022, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, + 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a3a, 0x20a3, 0x0200, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, + 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a3a, 0x20a3, + 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, + 0x0008, 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4a3a, + 0x20a3, 0x0200, 0x0078, 0x48b1, 0x20a1, 0x020b, 0x1078, 0x4a3a, + 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, 0x20a2, + 0x60c3, 0x0008, 0x1078, 0x4e03, 0x007c, 0x0d7e, 0x20a1, 0x020b, + 0x1078, 0x4a3a, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, + 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x499b, 0x6998, + 0xa184, 0xc000, 0x00c0, 0x4997, 0xd1ec, 0x0040, 0x4993, 0x20a3, + 0x2100, 0x0078, 0x499d, 0x20a3, 0x0100, 0x0078, 0x499d, 0x20a3, + 0x0400, 0x0078, 0x499d, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, + 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x6c51, 0x7904, 0x0f7f, + 0xd1ac, 0x00c0, 0x49ad, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x49b2, + 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3, + 0x0014, 0x1078, 0x4e03, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4a3a, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x6018, + 0x0d7e, 0x2068, 0x6804, 0x0d7f, 0xa084, 0x00ff, 0xa086, 0x0006, + 0x0040, 0x49d6, 0x20a3, 0x0400, 0x0078, 0x49d8, 0x20a3, 0x0100, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x60c3, 0x0014, 0x1078, 0x4e03, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4a3a, 0x20a3, 0x0200, 0x0078, 0x485a, 0x20a1, 0x020b, 0x1078, + 0x4a3a, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, + 0x2a00, 0x60c3, 0x0008, 0x1078, 0x4e03, 0x007c, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, 0x4a3a, 0x20a3, 0x0100, + 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, + 0x1078, 0x4e03, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, + 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, 0x4df2, 0x22a2, 0x20a3, + 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, + 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, + 0x0198, 0x20a3, 0x0000, 0x1078, 0x4df2, 0x22a2, 0x20a3, 0x0000, + 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, + 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x126a, + 0xa08a, 0x008c, 0x10c8, 0x126a, 0x6118, 0x2178, 0x79a0, 0xa1f8, + 0x2154, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, + 0xa082, 0x0085, 0x1079, 0x4a77, 0x0f7f, 0x0c7f, 0x007c, 0x4a80, + 0x4a8b, 0x4aa5, 0x4a7e, 0x4a7e, 0x4a7e, 0x4a80, 0x1078, 0x126a, + 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ab4, 0x60c3, 0x0000, 0x1078, + 0x4e03, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ac7, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, + 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, + 0x000c, 0x1078, 0x4e03, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4ada, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x60c3, 0x0004, + 0x1078, 0x4e03, 0x147f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, + 0x4000, 0x20a3, 0x8100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, + 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0078, 0x4a2c, 0x027e, + 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x8400, 0x6298, 0x22a2, + 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, + 0x0078, 0x4a4b, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, + 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, + 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4a4b, 0x0c7e, 0x0f7e, 0x2c78, + 0x7804, 0xa08a, 0x0040, 0x1048, 0x126a, 0xa08a, 0x0050, 0x10c8, + 0x126a, 0x7918, 0x2160, 0x61a0, 0xa1e0, 0x2154, 0x2c0c, 0xa18c, + 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x4b0b, + 0x0f7f, 0x0c7f, 0x007c, 0x4b1d, 0x4bcf, 0x4b90, 0x4cde, 0x4b1b, + 0x4b1b, 0x4b1b, 0x4b1b, 0x4b1b, 0x4b1b, 0x4b1b, 0x5086, 0x5097, + 0x50a8, 0x50b9, 0x4b1b, 0x1078, 0x126a, 0x0d7e, 0x157e, 0x147e, + 0x20a1, 0x020b, 0x1078, 0x4b70, 0x7910, 0x2168, 0x6944, 0xa18c, + 0x00ff, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, + 0x0006, 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x4b3a, 0x20a3, 0x0002, + 0x0078, 0x4b46, 0xd1b4, 0x0040, 0x4b41, 0x20a3, 0x0001, 0x0078, + 0x4b46, 0x20a3, 0x0000, 0x2230, 0x0078, 0x4b48, 0x6a80, 0x6e7c, + 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, + 0x00f0, 0x4b4c, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, + 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x6dcc, + 0x2003, 0x07d0, 0x2001, 0x6dcb, 0x2003, 0x0009, 0x2001, 0x6dd1, + 0x2003, 0x0002, 0x1078, 0x1497, 0x147f, 0x157f, 0x0d7f, 0x007c, + 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, + 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0xa006, 0x20a3, 0x0600, + 0x6198, 0x21a2, 0x20a2, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a2, + 0x22a2, 0x20a2, 0x2fa2, 0x20a3, 0xffff, 0x20a2, 0x20a2, 0x007c, + 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4bb0, + 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, + 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, + 0x000c, 0x1078, 0x4e03, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0500, 0x6298, + 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, + 0x0000, 0x1078, 0x4df2, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, - 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, - 0x8007, 0x1079, 0x4f8a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, - 0x0d7f, 0x007c, 0x4f92, 0x4f92, 0x4f94, 0x4f92, 0x4f92, 0x4f92, - 0x4fb9, 0x4f92, 0x1078, 0x1288, 0x7910, 0xa18c, 0xf8ff, 0xa18d, - 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4fc3, - 0x0d7e, 0x2069, 0x7051, 0x6804, 0xd0bc, 0x0040, 0x4fae, 0x682c, - 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x4fb0, 0x20a3, 0x3f00, - 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x509c, - 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4fc3, 0x20a3, - 0x7f00, 0x0078, 0x4fb1, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x20a3, 0x0100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x508b, 0x22a2, - 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x2061, 0x0100, - 0x2071, 0x7000, 0x6130, 0x7818, 0x2068, 0x68a0, 0xa080, 0x2207, - 0x2014, 0xa294, 0x00ff, 0x781c, 0xa086, 0x0006, 0x0040, 0x502a, - 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, - 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, + 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4cbf, 0x7810, + 0x2068, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, + 0xa084, 0xf000, 0x00c0, 0x4bec, 0x7810, 0xa084, 0x0700, 0x8007, + 0x1079, 0x4bf4, 0x0078, 0x4bef, 0xa006, 0x1079, 0x4bf4, 0x147f, + 0x137f, 0x157f, 0x0d7f, 0x007c, 0x4bfe, 0x4c60, 0x4c64, 0x4c87, + 0x4c94, 0x4ca6, 0x4caa, 0x4bfc, 0x1078, 0x126a, 0x017e, 0x037e, + 0x694c, 0xa18c, 0x0003, 0xa186, 0x0000, 0x00c0, 0x4c11, 0x6b78, + 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, + 0x4c8b, 0xa186, 0x0001, 0x00c0, 0x4c5b, 0x6b78, 0x23a2, 0x6868, + 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, + 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040, 0x4c5a, 0xd3c4, + 0x0040, 0x4c2c, 0x687c, 0xa108, 0xd3cc, 0x0040, 0x4c31, 0x6874, + 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, + 0x23a2, 0x8000, 0x00f0, 0x4c36, 0x157f, 0x22a2, 0x22a2, 0x22a2, + 0xa184, 0x0003, 0x0040, 0x4c5a, 0x20a1, 0x020b, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x4df2, 0x22a2, + 0x20a3, 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x4e03, 0x007c, + 0x20a3, 0x0008, 0x0078, 0x4c89, 0x20a3, 0x0302, 0x22a2, 0x22a2, + 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, + 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, + 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, + 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x4e03, 0x007c, 0x20a3, + 0x0028, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, + 0x0018, 0x1078, 0x4e03, 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, + 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, + 0x22a2, 0x60c3, 0x0020, 0x1078, 0x4e03, 0x007c, 0x20a3, 0x0008, + 0x0078, 0x4c89, 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, + 0x00ff, 0x8001, 0x00c0, 0x4cb8, 0x22a2, 0x037f, 0x0078, 0x4c89, + 0x20a3, 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x4c8b, 0x027e, + 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, + 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, + 0x1078, 0x4df2, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, + 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, + 0x1079, 0x4cf1, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, + 0x007c, 0x4cf9, 0x4cf9, 0x4cfb, 0x4cf9, 0x4cf9, 0x4cf9, 0x4d20, + 0x4cf9, 0x1078, 0x126a, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, + 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4d2a, 0x0d7e, + 0x2069, 0x6c51, 0x6804, 0xd0bc, 0x0040, 0x4d15, 0x682c, 0xa084, + 0x00ff, 0x8007, 0x20a2, 0x0078, 0x4d17, 0x20a3, 0x3f00, 0x0d7f, + 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x4e03, 0x007c, + 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x4d2a, 0x20a3, 0x7f00, + 0x0078, 0x4d18, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, + 0x0100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, + 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x4df2, 0x22a2, 0x20a3, + 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x2061, 0x0100, 0x2071, + 0x6c00, 0x6130, 0x7818, 0x2068, 0x68a0, 0xa080, 0x2154, 0x2014, + 0xa294, 0x00ff, 0x781c, 0xa086, 0x0006, 0x0040, 0x4d91, 0x6063, + 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, + 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, + 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, + 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, + 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, + 0x629e, 0x6017, 0x0016, 0x1078, 0x40a8, 0x0c7f, 0x0d7f, 0x0e7f, + 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, + 0x0040, 0x4dc6, 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, + 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, + 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, + 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, - 0x0000, 0x629e, 0x6017, 0x0016, 0x1078, 0x432c, 0x0c7f, 0x0d7f, - 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, - 0x0002, 0x0040, 0x505f, 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, - 0x616e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, - 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, - 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, - 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078, 0x5024, 0x6063, - 0x0700, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, - 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, - 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, - 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, - 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, 0x6017, - 0x0016, 0x0078, 0x5024, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0x71b6, - 0x6843, 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x1078, 0x50a7, 0x1078, 0x431c, 0x007c, 0x007e, - 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, - 0x007e, 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, - 0x0008, 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, - 0x027e, 0x1078, 0x4327, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, - 0xa194, 0x4000, 0x0040, 0x50fa, 0x1078, 0x50b0, 0x6803, 0x1000, - 0x6803, 0x0000, 0x0c7e, 0x2061, 0x71b6, 0x6128, 0xa192, 0x0002, - 0x00c8, 0x50e7, 0x8108, 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, - 0x50f5, 0x1078, 0x431c, 0x1078, 0x50a7, 0x0078, 0x50f5, 0x6124, - 0xa1e5, 0x0000, 0x0040, 0x50f2, 0x1078, 0x6f55, 0x2009, 0x0014, - 0x1078, 0x571c, 0x0c7f, 0x0078, 0x50f5, 0x027f, 0x017f, 0x0d7f, - 0x0c7f, 0x007c, 0x1078, 0x3247, 0x0078, 0x50f5, 0x0c7e, 0x0d7e, - 0x0e7e, 0x017e, 0x027e, 0x1078, 0x4335, 0x2071, 0x71b6, 0x713c, - 0x81ff, 0x0040, 0x5128, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, - 0xa194, 0x4000, 0x0040, 0x512e, 0x6803, 0x1000, 0x6803, 0x0000, - 0x037e, 0x2019, 0x0001, 0x1078, 0x525b, 0x037f, 0x713c, 0x2160, - 0x1078, 0x6f55, 0x2009, 0x004a, 0x1078, 0x571c, 0x0078, 0x5128, - 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x7144, 0xa192, - 0x0002, 0x00c8, 0x5118, 0x8108, 0x7146, 0x1078, 0x432c, 0x0078, - 0x5128, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0x71b6, - 0x7018, 0x2068, 0x8dff, 0x0040, 0x5163, 0x68a0, 0xa406, 0x0040, - 0x5155, 0x6854, 0x2068, 0x0078, 0x514a, 0x6010, 0x2060, 0x643c, - 0x6540, 0x6e48, 0x2d60, 0x1078, 0x363f, 0x0040, 0x5163, 0x1078, - 0x53f5, 0xa085, 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, - 0x1078, 0x4cb2, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x509c, 0x147f, 0x157f, - 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, - 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0x7040, 0x2019, - 0x7041, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0, - 0x5191, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, - 0x509c, 0x147f, 0x157f, 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x71b6, 0x700c, 0x2060, 0x8cff, 0x0040, - 0x51c0, 0x1078, 0x6484, 0x00c0, 0x51b7, 0x1078, 0x58f2, 0x600c, - 0x007e, 0x1078, 0x56f5, 0x1078, 0x53f5, 0x0c7f, 0x0078, 0x51ae, + 0x0000, 0x629e, 0x6017, 0x0012, 0x0078, 0x4d8b, 0x6063, 0x0700, + 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, + 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, + 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, + 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, + 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, 0x6017, 0x0016, + 0x0078, 0x4d8b, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, + 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0x6db0, 0x6843, + 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, + 0x9575, 0x1078, 0x4e0e, 0x1078, 0x4098, 0x007c, 0x007e, 0x6014, + 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, + 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, + 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, + 0x1078, 0x40a3, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, + 0x4000, 0x0040, 0x4e6c, 0x1078, 0x4e17, 0x6803, 0x1000, 0x6803, + 0x0000, 0x0c7e, 0x2061, 0x6db0, 0x6128, 0xa192, 0x0002, 0x00c8, + 0x4e59, 0x8108, 0x612a, 0x613c, 0x0c7f, 0x81ff, 0x0040, 0x4e67, + 0x1078, 0x4098, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, + 0x4e55, 0x6017, 0x0012, 0x0078, 0x4e67, 0x1078, 0x4e0e, 0x0078, + 0x4e67, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x4e64, 0x1078, 0x6b90, + 0x2009, 0x0014, 0x1078, 0x544c, 0x0c7f, 0x0078, 0x4e67, 0x027f, + 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x30c9, 0x0078, 0x4e67, + 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x40b1, 0x2071, + 0x6db0, 0x713c, 0x81ff, 0x0040, 0x4eab, 0x2061, 0x0100, 0x2069, + 0x0140, 0x6904, 0x017e, 0x017f, 0xa194, 0x4000, 0x0040, 0x4eb1, + 0x6017, 0x0010, 0x7144, 0xa192, 0x0002, 0x00c8, 0x4ea3, 0x8108, + 0x7146, 0x1078, 0x40a8, 0x713c, 0xa188, 0x0007, 0x210c, 0xa18e, + 0x0006, 0x00c0, 0x4e9f, 0x6017, 0x0012, 0x0078, 0x4eab, 0x6017, + 0x0016, 0x0078, 0x4eab, 0x1078, 0x6b90, 0x2009, 0x004a, 0x1078, + 0x544c, 0x0078, 0x4eab, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, + 0x007c, 0x1078, 0x40a8, 0x0078, 0x4eab, 0x0e7e, 0x0d7e, 0x0c7e, + 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, + 0x2068, 0x6ca0, 0x2071, 0x6db0, 0x7018, 0x2068, 0x8dff, 0x0040, + 0x4ee1, 0x68a0, 0xa406, 0x0040, 0x4ed1, 0x6854, 0x2068, 0x0078, + 0x4ec6, 0x6010, 0x2060, 0x643c, 0x6540, 0x6644, 0xa6b4, 0x000f, + 0x2d60, 0x1078, 0x3445, 0x0040, 0x4ee1, 0x1078, 0x516d, 0xa085, + 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, + 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4a1b, + 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, + 0x60c3, 0x0008, 0x1078, 0x4e03, 0x147f, 0x157f, 0x007c, 0x157e, + 0x147e, 0x20a1, 0x020b, 0x1078, 0x4a3a, 0x20a3, 0x0200, 0x20a3, + 0x0000, 0x20a9, 0x0006, 0x2011, 0x6c40, 0x2019, 0x6c41, 0x23a6, + 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0, 0x4f0f, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x4e03, 0x147f, + 0x157f, 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, + 0x2071, 0x6db0, 0x700c, 0x2060, 0x8cff, 0x0040, 0x4f38, 0x600c, + 0x007e, 0x1078, 0x5425, 0x1078, 0x516d, 0x0c7f, 0x0078, 0x4f2c, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, - 0x2071, 0x71b6, 0x7024, 0x2060, 0x8cff, 0x0040, 0x5219, 0x1078, - 0x50b0, 0x68c3, 0x0000, 0x1078, 0x4327, 0x2009, 0x0013, 0x1078, - 0x571c, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x51fc, 0x6827, - 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x520e, 0x7803, 0x1000, - 0x7803, 0x0000, 0x0078, 0x520e, 0xd084, 0x0040, 0x5203, 0x6827, - 0x0001, 0x0078, 0x5205, 0x00f0, 0x51eb, 0x7804, 0xa084, 0x1000, - 0x0040, 0x520e, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, + 0x2071, 0x6db0, 0x7024, 0x2060, 0x8cff, 0x0040, 0x4f91, 0x1078, + 0x4e17, 0x68c3, 0x0000, 0x1078, 0x40a3, 0x2009, 0x0013, 0x1078, + 0x544c, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x4f74, 0x6827, + 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x4f86, 0x7803, 0x1000, + 0x7803, 0x0000, 0x0078, 0x4f86, 0xd084, 0x0040, 0x4f7b, 0x6827, + 0x0001, 0x0078, 0x4f7d, 0x00f0, 0x4f63, 0x7804, 0xa084, 0x1000, + 0x0040, 0x4f86, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, - 0x007c, 0x2001, 0x7000, 0x2004, 0xa096, 0x0001, 0x0040, 0x5251, - 0xa096, 0x0004, 0x0040, 0x5251, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x2011, 0x320e, 0x1078, 0x42aa, 0x20a9, 0x01f4, 0x6824, 0xd094, - 0x0040, 0x523f, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, - 0x5251, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5251, 0xd084, - 0x0040, 0x5246, 0x6827, 0x0001, 0x0078, 0x5248, 0x00f0, 0x522e, - 0x7804, 0xa084, 0x1000, 0x0040, 0x5251, 0x7803, 0x0100, 0x7803, + 0x007c, 0x2001, 0x6c00, 0x2004, 0xa096, 0x0001, 0x0040, 0x4fc9, + 0xa096, 0x0004, 0x0040, 0x4fc9, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x2011, 0x308c, 0x1078, 0x4026, 0x20a9, 0x01f4, 0x6824, 0xd094, + 0x0040, 0x4fb7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, + 0x4fc9, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x4fc9, 0xd084, + 0x0040, 0x4fbe, 0x6827, 0x0001, 0x0078, 0x4fc0, 0x00f0, 0x4fa6, + 0x7804, 0xa084, 0x1000, 0x0040, 0x4fc9, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x71b6, 0x703c, 0x2060, 0x8cff, 0x0040, - 0x52a9, 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, - 0x4335, 0x1078, 0x1b80, 0xa39d, 0x0000, 0x00c0, 0x5283, 0x2009, - 0x0049, 0x1078, 0x571c, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, - 0x5296, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x52a8, - 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x52a8, 0xd094, 0x0040, - 0x529d, 0x6827, 0x0002, 0x0078, 0x529f, 0x00f0, 0x5285, 0x7804, - 0xa084, 0x1000, 0x0040, 0x52a8, 0x7803, 0x0100, 0x7803, 0x0000, + 0x2079, 0x0140, 0x2071, 0x6db0, 0x703c, 0x2060, 0x8cff, 0x0040, + 0x5021, 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, + 0x40b1, 0x1078, 0x1b1f, 0xa39d, 0x0000, 0x00c0, 0x4ffb, 0x2009, + 0x0049, 0x1078, 0x544c, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, + 0x500e, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5020, + 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5020, 0xd094, 0x0040, + 0x5015, 0x6827, 0x0002, 0x0078, 0x5017, 0x00f0, 0x4ffd, 0x7804, + 0xa084, 0x1000, 0x0040, 0x5020, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, - 0x71b6, 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, - 0x8000, 0x2069, 0x71b6, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, - 0x0e7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x71b6, 0x7614, - 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5307, 0x601c, - 0xa206, 0x00c0, 0x5302, 0x7014, 0xac36, 0x00c0, 0x52e1, 0x660c, - 0x7616, 0x7010, 0xac36, 0x00c0, 0x52ef, 0x2c00, 0xaf36, 0x0040, - 0x52ed, 0x2f00, 0x7012, 0x0078, 0x52ef, 0x7013, 0x0000, 0x660c, - 0x067e, 0x2c00, 0xaf06, 0x0040, 0x52f8, 0x7e0e, 0x0078, 0x52f9, - 0x2678, 0x600f, 0x0000, 0x1078, 0x6457, 0x1078, 0x53f5, 0x0c7f, - 0x0078, 0x52d4, 0x2c78, 0x600c, 0x2060, 0x0078, 0x52d4, 0x127f, + 0x6db0, 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, + 0x8000, 0x2069, 0x6db0, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, + 0x0e7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x6db0, 0x7614, + 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x507f, 0x601c, + 0xa206, 0x00c0, 0x507a, 0x7014, 0xac36, 0x00c0, 0x5059, 0x660c, + 0x7616, 0x7010, 0xac36, 0x00c0, 0x5067, 0x2c00, 0xaf36, 0x0040, + 0x5065, 0x2f00, 0x7012, 0x0078, 0x5067, 0x7013, 0x0000, 0x660c, + 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5070, 0x7e0e, 0x0078, 0x5071, + 0x2678, 0x600f, 0x0000, 0x1078, 0x60e8, 0x1078, 0x516d, 0x0c7f, + 0x0078, 0x504c, 0x2c78, 0x600c, 0x2060, 0x0078, 0x504c, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x4e09, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x5350, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e09, 0x7810, 0x20a2, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x5350, - 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e09, 0x7810, 0x20a2, + 0x20a1, 0x020b, 0x1078, 0x4b70, 0x7810, 0x20a2, 0xa006, 0x20a2, + 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x50c8, 0x157e, + 0x147e, 0x20a1, 0x020b, 0x1078, 0x4b70, 0x7810, 0x20a2, 0xa006, + 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x50c8, + 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4b70, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, - 0x5350, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4e09, 0x7810, + 0x50c8, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4b70, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, - 0x1078, 0x5400, 0x60c3, 0x0020, 0x1078, 0x509c, 0x147f, 0x157f, + 0x1078, 0x5178, 0x60c3, 0x0020, 0x1078, 0x4e03, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, - 0xd1b4, 0x00c0, 0x5368, 0xd1bc, 0x00c0, 0x53b2, 0x0078, 0x53f2, + 0xd1b4, 0x00c0, 0x50e0, 0xd1bc, 0x00c0, 0x512a, 0x0078, 0x516a, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, - 0x0040, 0x53a9, 0x6020, 0xd0b4, 0x0040, 0x53a9, 0x6024, 0xd094, - 0x00c0, 0x53a9, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, - 0x53a9, 0x00f0, 0x5375, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, + 0x0040, 0x5121, 0x6020, 0xd0b4, 0x0040, 0x5121, 0x6024, 0xd094, + 0x00c0, 0x5121, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, + 0x5121, 0x00f0, 0x50ed, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, - 0xd094, 0x00c0, 0x53a8, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x539f, + 0xd094, 0x00c0, 0x5120, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x5117, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, - 0x0078, 0x53f2, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, + 0x0078, 0x516a, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, - 0xa084, 0x4000, 0x0040, 0x53eb, 0x6020, 0xd0bc, 0x0040, 0x53eb, - 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x53eb, 0x00f0, - 0x53bf, 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, + 0xa084, 0x4000, 0x0040, 0x5163, 0x6020, 0xd0bc, 0x0040, 0x5163, + 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x5163, 0x00f0, + 0x5137, 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, - 0x00c0, 0x53e5, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, - 0x200b, 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x71b6, - 0x7020, 0xa005, 0x0040, 0x53fe, 0x8001, 0x7022, 0x0e7f, 0x007c, - 0x20a9, 0x0008, 0x20a2, 0x00f0, 0x5402, 0x20a2, 0x20a2, 0x007c, + 0x00c0, 0x515d, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, + 0x200b, 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x6db0, + 0x7020, 0xa005, 0x0040, 0x5176, 0x8001, 0x7022, 0x0e7f, 0x007c, + 0x20a9, 0x0008, 0x20a2, 0x00f0, 0x517a, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x71b6, 0x7614, 0x2660, 0x2678, 0x2039, - 0x0001, 0x87ff, 0x0040, 0x5498, 0x8cff, 0x0040, 0x5498, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x5493, 0x88ff, 0x0040, 0x542f, 0x2800, - 0xac06, 0x00c0, 0x5493, 0x2039, 0x0000, 0x0078, 0x5433, 0x6018, - 0xa206, 0x00c0, 0x5493, 0x7024, 0xac06, 0x00c0, 0x5461, 0x2069, - 0x0100, 0x68c0, 0xa005, 0x0040, 0x545c, 0x6817, 0x0008, 0x68c3, - 0x0000, 0x1078, 0x5525, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, - 0x6b04, 0xa384, 0x1000, 0x0040, 0x5451, 0x6803, 0x0100, 0x6803, - 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5459, 0x6827, - 0x0001, 0x037f, 0x0078, 0x5461, 0x6003, 0x0009, 0x630a, 0x0078, - 0x5493, 0x7014, 0xac36, 0x00c0, 0x5467, 0x660c, 0x7616, 0x7010, - 0xac36, 0x00c0, 0x5475, 0x2c00, 0xaf36, 0x0040, 0x5473, 0x2f00, - 0x7012, 0x0078, 0x5475, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, - 0xaf06, 0x0040, 0x547e, 0x7e0e, 0x0078, 0x547f, 0x2678, 0x600f, - 0x0000, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x5489, 0x1078, - 0x6e8b, 0x1078, 0x6457, 0x1078, 0x53f5, 0x88ff, 0x00c0, 0x54a2, - 0x0c7f, 0x0078, 0x5419, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5419, + 0x2091, 0x8000, 0x2071, 0x6db0, 0x7614, 0x2660, 0x2678, 0x2039, + 0x0001, 0x87ff, 0x0040, 0x5210, 0x8cff, 0x0040, 0x5210, 0x601c, + 0xa086, 0x0006, 0x00c0, 0x520b, 0x88ff, 0x0040, 0x51a7, 0x2800, + 0xac06, 0x00c0, 0x520b, 0x2039, 0x0000, 0x0078, 0x51ab, 0x6018, + 0xa206, 0x00c0, 0x520b, 0x7024, 0xac06, 0x00c0, 0x51d9, 0x2069, + 0x0100, 0x68c0, 0xa005, 0x0040, 0x51d4, 0x6817, 0x0008, 0x68c3, + 0x0000, 0x1078, 0x529d, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, + 0x6b04, 0xa384, 0x1000, 0x0040, 0x51c9, 0x6803, 0x0100, 0x6803, + 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x51d1, 0x6827, + 0x0001, 0x037f, 0x0078, 0x51d9, 0x6003, 0x0009, 0x630a, 0x0078, + 0x520b, 0x7014, 0xac36, 0x00c0, 0x51df, 0x660c, 0x7616, 0x7010, + 0xac36, 0x00c0, 0x51ed, 0x2c00, 0xaf36, 0x0040, 0x51eb, 0x2f00, + 0x7012, 0x0078, 0x51ed, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, + 0xaf06, 0x0040, 0x51f6, 0x7e0e, 0x0078, 0x51f7, 0x2678, 0x600f, + 0x0000, 0x6010, 0x2068, 0x1078, 0x5fcd, 0x0040, 0x5201, 0x1078, + 0x6ac6, 0x1078, 0x60e8, 0x1078, 0x516d, 0x88ff, 0x00c0, 0x521a, + 0x0c7f, 0x0078, 0x5191, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5191, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, - 0x5499, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x71b6, 0x7638, 0x2660, 0x2678, - 0x8cff, 0x0040, 0x5514, 0x601c, 0xa086, 0x0006, 0x00c0, 0x550f, - 0x88ff, 0x0040, 0x54c9, 0x2800, 0xac06, 0x00c0, 0x550f, 0x0078, - 0x54cd, 0x6018, 0xa206, 0x00c0, 0x550f, 0x703c, 0xac06, 0x00c0, - 0x54df, 0x037e, 0x2019, 0x0001, 0x1078, 0x525b, 0x7033, 0x0000, + 0x5211, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, + 0x127e, 0x2091, 0x8000, 0x2071, 0x6db0, 0x7638, 0x2660, 0x2678, + 0x8cff, 0x0040, 0x528c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5287, + 0x88ff, 0x0040, 0x5241, 0x2800, 0xac06, 0x00c0, 0x5287, 0x0078, + 0x5245, 0x6018, 0xa206, 0x00c0, 0x5287, 0x703c, 0xac06, 0x00c0, + 0x5257, 0x037e, 0x2019, 0x0001, 0x1078, 0x4fd3, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, - 0xac36, 0x00c0, 0x54e5, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, - 0x54f3, 0x2c00, 0xaf36, 0x0040, 0x54f1, 0x2f00, 0x7036, 0x0078, - 0x54f3, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, - 0x54fc, 0x7e0e, 0x0078, 0x54fd, 0x2678, 0x600f, 0x0000, 0x6010, - 0x2068, 0x1078, 0x6336, 0x0040, 0x5507, 0x1078, 0x6e8b, 0x1078, - 0x6457, 0x88ff, 0x00c0, 0x551e, 0x0c7f, 0x0078, 0x54b8, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x54b8, 0xa006, 0x127f, 0x007f, 0x027f, + 0xac36, 0x00c0, 0x525d, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, + 0x526b, 0x2c00, 0xaf36, 0x0040, 0x5269, 0x2f00, 0x7036, 0x0078, + 0x526b, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, + 0x5274, 0x7e0e, 0x0078, 0x5275, 0x2678, 0x600f, 0x0000, 0x6010, + 0x2068, 0x1078, 0x5fcd, 0x0040, 0x527f, 0x1078, 0x6ac6, 0x1078, + 0x60e8, 0x88ff, 0x00c0, 0x5296, 0x0c7f, 0x0078, 0x5230, 0x2c78, + 0x600c, 0x2060, 0x0078, 0x5230, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, - 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5515, 0x0e7e, 0x2071, 0x71b6, - 0x2001, 0x7000, 0x2004, 0xa086, 0x0002, 0x00c0, 0x5533, 0x7007, - 0x0005, 0x0078, 0x5535, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, + 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x528d, 0x0e7e, 0x2071, 0x6db0, + 0x2001, 0x6c00, 0x2004, 0xa086, 0x0002, 0x00c0, 0x52ab, 0x7007, + 0x0005, 0x0078, 0x52ad, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x71b6, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, - 0x5575, 0x2200, 0xac06, 0x00c0, 0x5570, 0x7038, 0xac36, 0x00c0, - 0x5553, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5561, 0x2c00, - 0xaf36, 0x0040, 0x555f, 0x2f00, 0x7036, 0x0078, 0x5561, 0x7037, - 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040, 0x5569, 0x7e0e, 0x0078, - 0x556a, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x5575, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x5546, 0x127f, 0x007f, 0x027f, + 0x2071, 0x6db0, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, + 0x52ed, 0x2200, 0xac06, 0x00c0, 0x52e8, 0x7038, 0xac36, 0x00c0, + 0x52cb, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x52d9, 0x2c00, + 0xaf36, 0x0040, 0x52d7, 0x2f00, 0x7036, 0x0078, 0x52d9, 0x7037, + 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040, 0x52e1, 0x7e0e, 0x0078, + 0x52e2, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x52ed, + 0x2c78, 0x600c, 0x2060, 0x0078, 0x52be, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x71b6, - 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040, 0x560e, 0x6018, 0xa080, - 0x0028, 0x2004, 0xa206, 0x00c0, 0x5609, 0x7024, 0xac06, 0x00c0, - 0x55bc, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x55bc, 0x1078, - 0x50b0, 0x68c3, 0x0000, 0x1078, 0x5525, 0x7027, 0x0000, 0x037e, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x55b3, 0x6803, + 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x6db0, + 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5386, 0x6018, 0xa080, + 0x0028, 0x2004, 0xa206, 0x00c0, 0x5381, 0x7024, 0xac06, 0x00c0, + 0x5334, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x5334, 0x1078, + 0x4e17, 0x68c3, 0x0000, 0x1078, 0x529d, 0x7027, 0x0000, 0x037e, + 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x532b, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, - 0x55bb, 0x6827, 0x0001, 0x037f, 0x700c, 0xac36, 0x00c0, 0x55c2, - 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0, 0x55d0, 0x2c00, 0xaf36, - 0x0040, 0x55ce, 0x2f00, 0x700a, 0x0078, 0x55d0, 0x700b, 0x0000, - 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x55d9, 0x7e0e, 0x0078, - 0x55da, 0x2678, 0x600f, 0x0000, 0x1078, 0x6470, 0x00c0, 0x55e4, - 0x1078, 0x21c6, 0x0078, 0x5600, 0x1078, 0x6484, 0x00c0, 0x55ec, - 0x1078, 0x58f2, 0x0078, 0x5600, 0x6010, 0x2068, 0x1078, 0x6336, - 0x0040, 0x5600, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5616, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3840, 0x1078, 0x644a, - 0x6003, 0x0000, 0x1078, 0x6457, 0x1078, 0x53f5, 0x0c7f, 0x0078, - 0x558b, 0x2c78, 0x600c, 0x2060, 0x0078, 0x558b, 0x127f, 0x007f, + 0x5333, 0x6827, 0x0001, 0x037f, 0x700c, 0xac36, 0x00c0, 0x533a, + 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0, 0x5348, 0x2c00, 0xaf36, + 0x0040, 0x5346, 0x2f00, 0x700a, 0x0078, 0x5348, 0x700b, 0x0000, + 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5351, 0x7e0e, 0x0078, + 0x5352, 0x2678, 0x600f, 0x0000, 0x1078, 0x6101, 0x00c0, 0x535c, + 0x1078, 0x2143, 0x0078, 0x5378, 0x1078, 0x6115, 0x00c0, 0x5364, + 0x1078, 0x5614, 0x0078, 0x5378, 0x6010, 0x2068, 0x1078, 0x5fcd, + 0x0040, 0x5378, 0x601c, 0xa086, 0x0003, 0x00c0, 0x538e, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, + 0x6003, 0x0000, 0x1078, 0x60e8, 0x1078, 0x516d, 0x0c7f, 0x0078, + 0x5303, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5303, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x55f7, 0x1078, 0x6e8b, 0x0078, 0x5600, 0x037e, + 0x0006, 0x00c0, 0x536f, 0x1078, 0x6ac6, 0x0078, 0x5378, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, - 0xa39e, 0x20a0, 0x00c0, 0x5630, 0x8210, 0x8000, 0x0078, 0x5627, - 0xa005, 0x0040, 0x563a, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, - 0x22c8, 0x53a3, 0x147f, 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, - 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0200, 0x20a3, 0x0014, - 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, - 0x20a3, 0x4f47, 0x20a3, 0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, - 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x1078, 0x509c, - 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4cd1, 0x20a3, 0x0210, - 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x509c, 0x007c, 0x2061, - 0x7600, 0x2a70, 0x7060, 0x7046, 0x704b, 0x7600, 0x007c, 0x0e7e, - 0x127e, 0x2071, 0x7000, 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, - 0x0048, 0x56c1, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, - 0x56ad, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x56a9, 0x0078, - 0x569c, 0x2061, 0x7600, 0x0078, 0x569c, 0x6003, 0x0008, 0x8529, - 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x56bd, 0x754a, - 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x7600, 0x0078, - 0x56b8, 0xa006, 0x0078, 0x56ba, 0x0e7e, 0x2071, 0x7000, 0x7544, - 0xa582, 0x0001, 0x0048, 0x56f2, 0x7048, 0x2060, 0x6000, 0xa086, - 0x0000, 0x0040, 0x56df, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, - 0x56db, 0x0078, 0x56ce, 0x2061, 0x7600, 0x0078, 0x56ce, 0x6003, + 0xa39e, 0x201d, 0x00c0, 0x53a8, 0x8210, 0x8000, 0x0078, 0x539f, + 0xa005, 0x0040, 0x53b2, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, + 0x22c8, 0x53a3, 0x147f, 0x137f, 0x157f, 0x037f, 0x007c, 0x2061, + 0x7200, 0x2a70, 0x7060, 0x7046, 0x704b, 0x7200, 0x007c, 0x0e7e, + 0x127e, 0x2071, 0x6c00, 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, + 0x0048, 0x53f1, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, + 0x53dd, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x53d9, 0x0078, + 0x53cc, 0x2061, 0x7200, 0x0078, 0x53cc, 0x6003, 0x0008, 0x8529, + 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x53ed, 0x754a, + 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x7200, 0x0078, + 0x53e8, 0xa006, 0x0078, 0x53ea, 0x0e7e, 0x2071, 0x6c00, 0x7544, + 0xa582, 0x0001, 0x0048, 0x5422, 0x7048, 0x2060, 0x6000, 0xa086, + 0x0000, 0x0040, 0x540f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, + 0x540b, 0x0078, 0x53fe, 0x2061, 0x7200, 0x0078, 0x53fe, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, - 0x56ee, 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7600, - 0x0078, 0x56ea, 0xa006, 0x0078, 0x56ec, 0xac82, 0x7600, 0x1048, - 0x1288, 0x2001, 0x7015, 0x2004, 0xac02, 0x10c8, 0x1288, 0xa006, + 0x541e, 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7200, + 0x0078, 0x541a, 0xa006, 0x0078, 0x541c, 0xac82, 0x7200, 0x1048, + 0x126a, 0x2001, 0x6c15, 0x2004, 0xac02, 0x10c8, 0x126a, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, - 0x6003, 0x0000, 0x2061, 0x7000, 0x6044, 0x8000, 0x6046, 0xa086, - 0x0001, 0x0040, 0x5714, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, - 0x49b7, 0x127f, 0x0078, 0x5713, 0x601c, 0xa084, 0x0007, 0x0079, - 0x5721, 0x5729, 0x5731, 0x574d, 0x5769, 0x6501, 0x651d, 0x6539, - 0x5729, 0xa18e, 0x0047, 0x00c0, 0x5730, 0xa016, 0x1078, 0x1525, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x573b, 0x067f, 0x007c, 0x574b, 0x5816, 0x5901, 0x574b, 0x574b, - 0x574b, 0x574b, 0x574b, 0x57c5, 0x5b83, 0x574b, 0x574b, 0x574b, - 0x574b, 0x574b, 0x574b, 0x1078, 0x1288, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x1288, 0x1079, 0x5757, 0x067f, 0x007c, 0x5767, - 0x5767, 0x5767, 0x5767, 0x5767, 0x5767, 0x5767, 0x5767, 0x5ff3, - 0x60b9, 0x5767, 0x600c, 0x6065, 0x600c, 0x6065, 0x5767, 0x1078, - 0x1288, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x5773, 0x067f, 0x007c, 0x5783, 0x5bc1, 0x5c67, 0x5d29, 0x5e7d, - 0x5783, 0x5783, 0x5783, 0x5b9f, 0x5fa8, 0x5fac, 0x5783, 0x5783, - 0x5783, 0x5783, 0x5fd2, 0x1078, 0x1288, 0x20a9, 0x000e, 0x2e98, + 0x6003, 0x0000, 0x2061, 0x6c00, 0x6044, 0x8000, 0x6046, 0xa086, + 0x0001, 0x0040, 0x5444, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, + 0x4713, 0x127f, 0x0078, 0x5443, 0x601c, 0xa084, 0x0007, 0x0079, + 0x5451, 0x5459, 0x5461, 0x547d, 0x5499, 0x6186, 0x61a2, 0x61be, + 0x5459, 0xa18e, 0x0047, 0x00c0, 0x5460, 0xa016, 0x1078, 0x1505, + 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x126a, 0x1079, + 0x546b, 0x067f, 0x007c, 0x547b, 0x5540, 0x5623, 0x547b, 0x547b, + 0x547b, 0x547b, 0x547b, 0x54f5, 0x58a5, 0x547b, 0x547b, 0x547b, + 0x547b, 0x547b, 0x547b, 0x1078, 0x126a, 0x067e, 0x6000, 0xa0b2, + 0x0010, 0x10c8, 0x126a, 0x1079, 0x5487, 0x067f, 0x007c, 0x5497, + 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5c9f, + 0x5d63, 0x5497, 0x5cb8, 0x5d11, 0x5cb8, 0x5d11, 0x5497, 0x1078, + 0x126a, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x126a, 0x1079, + 0x54a3, 0x067f, 0x007c, 0x54b3, 0x58e3, 0x5969, 0x5a2b, 0x5b54, + 0x54b3, 0x54b3, 0x54b3, 0x58c1, 0x5c54, 0x5c58, 0x54b3, 0x54b3, + 0x54b3, 0x54b3, 0x5c7e, 0x1078, 0x126a, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, - 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5793, 0x0e7e, - 0x1078, 0x6336, 0x0040, 0x57aa, 0x6010, 0x2070, 0x7007, 0x0000, - 0x7037, 0x0103, 0x0e7f, 0x1078, 0x56f5, 0x007c, 0x0d7e, 0x20a9, + 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x54c3, 0x0e7e, + 0x1078, 0x5fcd, 0x0040, 0x54da, 0x6010, 0x2070, 0x7007, 0x0000, + 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5425, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, - 0x57c2, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, - 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x579f, 0x2100, 0xa1b2, 0x0030, - 0x10c8, 0x1288, 0x0079, 0x57cc, 0x57fe, 0x580a, 0x57fe, 0x57fe, - 0x57fe, 0x57fe, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, - 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, - 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fc, - 0x57fc, 0x57fc, 0x57fc, 0x57fe, 0x57fc, 0x57fc, 0x57fc, 0x57fc, - 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x57fe, 0x57fc, 0x57fc, 0x57fc, - 0x57fc, 0x57fc, 0x57fc, 0x57fc, 0x1078, 0x1288, 0x6003, 0x0001, - 0x6106, 0x1078, 0x45af, 0x127e, 0x2091, 0x8000, 0x1078, 0x49b7, - 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x45af, 0x127e, - 0x2091, 0x8000, 0x1078, 0x49b7, 0x127f, 0x007c, 0x6004, 0xa0b2, - 0x0030, 0x10c8, 0x1288, 0xa1b6, 0x0013, 0x00c0, 0x5822, 0x2008, - 0x0079, 0x587a, 0xa1b6, 0x0027, 0x00c0, 0x5860, 0x1078, 0x48be, - 0x6004, 0x1078, 0x6470, 0x0040, 0x5833, 0x1078, 0x6484, 0x0040, - 0x585c, 0x0078, 0x5857, 0x1078, 0x21c6, 0x2001, 0x0007, 0x1078, - 0x34a2, 0x6018, 0xa080, 0x0028, 0x200c, 0x017e, 0x027e, 0x037e, - 0x2110, 0x2019, 0x0028, 0x1078, 0x469f, 0x1078, 0x45e2, 0x0c7e, - 0x6018, 0xa065, 0x0040, 0x584e, 0x1078, 0x36e4, 0x0c7f, 0x2c08, - 0x1078, 0x6d09, 0x037f, 0x027f, 0x017f, 0x1078, 0x34e2, 0x1078, - 0x56f5, 0x1078, 0x49b7, 0x007c, 0x1078, 0x58f2, 0x0078, 0x5857, - 0xa186, 0x0014, 0x00c0, 0x585b, 0x1078, 0x48be, 0x1078, 0x21a8, - 0x1078, 0x6470, 0x00c0, 0x5870, 0x1078, 0x21c6, 0x0078, 0x5857, - 0x1078, 0x6484, 0x00c0, 0x5878, 0x1078, 0x58f2, 0x0078, 0x5857, - 0x0078, 0x5857, 0x58ac, 0x58ae, 0x58b2, 0x58b6, 0x58ba, 0x58be, - 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, - 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, - 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, - 0x58c2, 0x58c8, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, 0x58aa, - 0x58aa, 0x58aa, 0x58c8, 0x58c8, 0x58aa, 0x58aa, 0x58aa, 0x58aa, - 0x58aa, 0x58aa, 0x1078, 0x1288, 0x0078, 0x58c8, 0x2001, 0x000b, - 0x0078, 0x58d1, 0x2001, 0x0003, 0x0078, 0x58d1, 0x2001, 0x0005, - 0x0078, 0x58d1, 0x2001, 0x0001, 0x0078, 0x58d1, 0x2001, 0x0009, - 0x0078, 0x58d1, 0x1078, 0x1288, 0x0078, 0x58d0, 0x1078, 0x34a2, - 0x1078, 0x48be, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078, 0x49b7, - 0x007c, 0x1078, 0x34a2, 0x1078, 0x48be, 0x6003, 0x0002, 0x037e, - 0x2019, 0x705c, 0x2304, 0xa084, 0xff00, 0x00c0, 0x58e3, 0x2019, - 0x0028, 0x0078, 0x58ec, 0x8007, 0xa09a, 0x0004, 0x0048, 0x58df, - 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x1078, 0x49b7, - 0x0078, 0x58d0, 0x0e7e, 0x1078, 0x6336, 0x0040, 0x58ff, 0x6010, - 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f, - 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, - 0xa0b2, 0x000c, 0x10c8, 0x1288, 0x6604, 0xa6b6, 0x0028, 0x00c0, - 0x5915, 0x1078, 0x64b9, 0x0078, 0x593e, 0x6604, 0xa6b6, 0x0029, - 0x00c0, 0x591e, 0x1078, 0x64d3, 0x0078, 0x593e, 0x6604, 0xa6b6, - 0x001f, 0x00c0, 0x5927, 0x1078, 0x5785, 0x0078, 0x593e, 0x6604, - 0xa6b6, 0x0000, 0x00c0, 0x5930, 0x1078, 0x57ae, 0x0078, 0x593e, - 0xa1b6, 0x0015, 0x00c0, 0x5938, 0x1079, 0x5943, 0x0078, 0x593e, - 0xa1b6, 0x0016, 0x00c0, 0x593f, 0x1079, 0x5a0c, 0x007c, 0x1078, - 0x5729, 0x0078, 0x593e, 0x594f, 0x5952, 0x594f, 0x5993, 0x594f, - 0x59bb, 0x594f, 0x594f, 0x594f, 0x59e4, 0x594f, 0x59fa, 0x0005, - 0x0005, 0x007c, 0x0e7e, 0x2071, 0x7000, 0x7070, 0xa086, 0x0074, - 0x00c0, 0x597c, 0x1078, 0x6ce1, 0x00c0, 0x596e, 0x0d7e, 0x6018, - 0x2068, 0x1078, 0x5980, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x34a2, - 0x1078, 0x21c6, 0x1078, 0x56f5, 0x0078, 0x597e, 0x2001, 0x000a, - 0x1078, 0x34a2, 0x1078, 0x21c6, 0x6003, 0x0001, 0x6007, 0x0001, - 0x1078, 0x45af, 0x0078, 0x597e, 0x1078, 0x59ab, 0x0e7f, 0x007c, - 0x6800, 0xd084, 0x0040, 0x5992, 0x2001, 0x0000, 0x1078, 0x348e, - 0x2069, 0x7051, 0x6804, 0xd0a4, 0x0040, 0x5992, 0x2001, 0x0006, - 0x1078, 0x34b0, 0x007c, 0x2011, 0x701c, 0x2204, 0xa086, 0x0074, - 0x00c0, 0x59a8, 0x1078, 0x5ad5, 0x2001, 0x0004, 0x1078, 0x34a2, - 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x45af, 0x0078, 0x59aa, - 0x1078, 0x59ab, 0x007c, 0x2001, 0x7000, 0x2004, 0xa086, 0x0003, - 0x0040, 0x59b6, 0x2001, 0x0007, 0x1078, 0x34a2, 0x1078, 0x56f5, - 0x1078, 0x21c6, 0x007c, 0x0e7e, 0x2071, 0x7000, 0x7070, 0xa086, - 0x0014, 0x00c0, 0x59e0, 0x7000, 0xa086, 0x0003, 0x00c0, 0x59ca, - 0x1078, 0x2a92, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3576, 0x1078, - 0x5980, 0x0d7f, 0x1078, 0x5adf, 0x00c0, 0x59e0, 0x2001, 0x0006, - 0x1078, 0x34a2, 0x1078, 0x56f5, 0x1078, 0x21c6, 0x0078, 0x59e2, - 0x1078, 0x59ab, 0x0e7f, 0x007c, 0x2011, 0x701c, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x59f7, 0x2001, 0x0002, 0x1078, 0x34a2, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x45af, 0x0078, 0x59f9, 0x1078, - 0x59ab, 0x007c, 0x2011, 0x701c, 0x2204, 0xa086, 0x0004, 0x00c0, - 0x5a09, 0x2001, 0x0007, 0x1078, 0x34a2, 0x1078, 0x56f5, 0x0078, - 0x5a0b, 0x1078, 0x59ab, 0x007c, 0x594f, 0x5a18, 0x594f, 0x5a3e, - 0x594f, 0x5a8a, 0x594f, 0x594f, 0x594f, 0x5a9d, 0x594f, 0x5ab0, - 0x0c7e, 0x1078, 0x5ac3, 0x00c0, 0x5a2d, 0x2001, 0x0000, 0x1078, - 0x348e, 0x2001, 0x0002, 0x1078, 0x34a2, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x45af, 0x0078, 0x5a3c, 0x2009, 0x748f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x5a3a, 0x1078, 0x56f5, - 0x0078, 0x5a3c, 0x1078, 0x59ab, 0x0c7f, 0x007c, 0x1078, 0x5ad2, - 0x00c0, 0x5a52, 0x2001, 0x0000, 0x1078, 0x348e, 0x2001, 0x0002, - 0x1078, 0x34a2, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x45af, - 0x0078, 0x5a72, 0x2009, 0x748e, 0x2134, 0xa6b4, 0x00ff, 0xa686, - 0x0005, 0x0040, 0x5a73, 0x2009, 0x748f, 0x2104, 0xa084, 0xff00, - 0xa086, 0x1900, 0x00c0, 0x5a70, 0xa686, 0x0009, 0x0040, 0x5a73, - 0x2001, 0x0004, 0x1078, 0x34a2, 0x1078, 0x56f5, 0x0078, 0x5a72, - 0x1078, 0x59ab, 0x007c, 0x0d7e, 0x6018, 0x2068, 0x6840, 0xa084, - 0x00ff, 0xa005, 0x0040, 0x5a85, 0x8001, 0x6842, 0x6017, 0x000a, - 0x6007, 0x0016, 0x0d7f, 0x0078, 0x5a72, 0x1078, 0x21a8, 0x0d7f, - 0x0078, 0x5a70, 0x1078, 0x5ad2, 0x00c0, 0x5a9a, 0x2001, 0x0004, - 0x1078, 0x34a2, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x45af, - 0x0078, 0x5a9c, 0x1078, 0x59ab, 0x007c, 0x1078, 0x5ad2, 0x00c0, - 0x5aad, 0x2001, 0x0008, 0x1078, 0x34a2, 0x6003, 0x0001, 0x6007, - 0x0005, 0x1078, 0x45af, 0x0078, 0x5aaf, 0x1078, 0x59ab, 0x007c, - 0x1078, 0x5ad2, 0x00c0, 0x5ac0, 0x2001, 0x000a, 0x1078, 0x34a2, - 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x45af, 0x0078, 0x5ac2, - 0x1078, 0x59ab, 0x007c, 0x2009, 0x748e, 0x2104, 0xa086, 0x0003, - 0x00c0, 0x5ad1, 0x2009, 0x748f, 0x2104, 0xa084, 0xff00, 0xa086, - 0x2a00, 0x007c, 0xa085, 0x0001, 0x007c, 0x0c7e, 0x017e, 0xac88, - 0x0006, 0x2164, 0x1078, 0x350c, 0x017f, 0x0c7f, 0x007c, 0x0e7e, - 0x2071, 0x748c, 0x7004, 0xa086, 0x0014, 0x00c0, 0x5b02, 0x7008, - 0xa086, 0x0800, 0x00c0, 0x5b02, 0x700c, 0xd0ec, 0x0040, 0x5b00, - 0xa084, 0x0f00, 0xa086, 0x0100, 0x00c0, 0x5b00, 0x7024, 0xd0a4, - 0x0040, 0x5b00, 0xd08c, 0x0040, 0x5b00, 0xa006, 0x0078, 0x5b02, - 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, - 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2029, - 0x71bf, 0x252c, 0x2021, 0x71c5, 0x2424, 0x2061, 0x7600, 0x2071, - 0x7000, 0x7244, 0x7060, 0xa202, 0x00c8, 0x5b59, 0x1078, 0x6ee7, - 0x0040, 0x5b51, 0x671c, 0xa786, 0x0001, 0x0040, 0x5b51, 0xa786, - 0x0007, 0x0040, 0x5b51, 0x2500, 0xac06, 0x0040, 0x5b51, 0x2400, - 0xac06, 0x0040, 0x5b51, 0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, - 0x5b3b, 0x1078, 0x1629, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, - 0x5b4e, 0xa786, 0x0003, 0x00c0, 0x5b63, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x1078, 0x3840, 0x1078, 0x644a, 0x1078, 0x6457, - 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5b59, 0x0078, - 0x5b19, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, 0x077f, 0x0c7f, - 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x5b45, 0x1078, - 0x6e8b, 0x0078, 0x5b4e, 0x220c, 0x2304, 0xa106, 0x00c0, 0x5b76, - 0x8210, 0x8318, 0x00f0, 0x5b6b, 0xa006, 0x007c, 0x2304, 0xa102, - 0x0048, 0x5b7e, 0x2001, 0x0001, 0x0078, 0x5b80, 0x2001, 0x0000, - 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1288, - 0x1078, 0x6470, 0x0040, 0x5b92, 0x1078, 0x6484, 0x0040, 0x5b9b, - 0x0078, 0x5b94, 0x1078, 0x21c6, 0x1078, 0x48be, 0x1078, 0x56f5, - 0x1078, 0x49b7, 0x007c, 0x1078, 0x58f2, 0x0078, 0x5b94, 0xa182, - 0x0040, 0x0079, 0x5ba3, 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb3, - 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb3, 0x5bb5, 0x5bb5, - 0x5bb5, 0x5bb5, 0x5bb3, 0x1078, 0x1288, 0x6003, 0x0001, 0x6106, - 0x1078, 0x4562, 0x127e, 0x2091, 0x8000, 0x1078, 0x49b7, 0x127f, - 0x007c, 0xa186, 0x0013, 0x00c0, 0x5bca, 0x6004, 0xa082, 0x0040, - 0x0079, 0x5c40, 0xa186, 0x0027, 0x00c0, 0x5be7, 0x1078, 0x48be, - 0x1078, 0x21a8, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6336, 0x0040, - 0x5be1, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3840, 0x1078, - 0x644a, 0x0d7f, 0x1078, 0x56f5, 0x1078, 0x49b7, 0x007c, 0xa186, - 0x0014, 0x00c0, 0x5bf0, 0x6004, 0xa082, 0x0040, 0x0079, 0x5c10, - 0xa186, 0x0047, 0x10c0, 0x1288, 0x2001, 0x0109, 0x2004, 0xd084, - 0x0040, 0x5c0d, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, - 0x1078, 0x4423, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, - 0x0002, 0x00c0, 0x5c0d, 0x0078, 0x5c67, 0x1078, 0x5729, 0x007c, - 0x5c22, 0x5c20, 0x5c20, 0x5c20, 0x5c20, 0x5c20, 0x5c20, 0x5c20, - 0x5c20, 0x5c20, 0x5c20, 0x5c39, 0x5c39, 0x5c39, 0x5c39, 0x5c20, - 0x1078, 0x1288, 0x1078, 0x48be, 0x0d7e, 0x6110, 0x2168, 0x1078, - 0x6336, 0x0040, 0x5c33, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, - 0x3840, 0x1078, 0x644a, 0x0d7f, 0x1078, 0x56f5, 0x1078, 0x49b7, - 0x007c, 0x1078, 0x48be, 0x1078, 0x56f5, 0x1078, 0x49b7, 0x007c, - 0x5c52, 0x5c50, 0x5c50, 0x5c50, 0x5c50, 0x5c50, 0x5c50, 0x5c50, - 0x5c50, 0x5c50, 0x5c50, 0x5c60, 0x5c60, 0x5c60, 0x5c60, 0x5c50, - 0x1078, 0x1288, 0x1078, 0x48be, 0x6003, 0x0002, 0x1078, 0x49b7, - 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c, - 0x1078, 0x48be, 0x6003, 0x000f, 0x1078, 0x49b7, 0x007c, 0xa182, - 0x0040, 0x0079, 0x5c6b, 0x5c7b, 0x5c7b, 0x5c7b, 0x5c7b, 0x5c7b, - 0x5c7d, 0x5d06, 0x5d1e, 0x5c7b, 0x5c7b, 0x5c7b, 0x5c7b, 0x5c7b, - 0x5c7b, 0x5c7b, 0x5c7b, 0x1078, 0x1288, 0x0e7e, 0x0d7e, 0x2071, - 0x748c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, - 0x5cea, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5caf, 0xa186, - 0x0028, 0x00c0, 0x5c99, 0x1078, 0x645e, 0x684b, 0x001c, 0x0078, - 0x5cb1, 0xd6dc, 0x0040, 0x5ca4, 0x684b, 0x0015, 0x7318, 0x6b62, - 0x731c, 0x6b5e, 0x0078, 0x5cb1, 0xd6d4, 0x0040, 0x5caf, 0x684b, - 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5cb1, 0x684b, - 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x5cc4, - 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7498, 0xad90, - 0x0019, 0x1078, 0x6128, 0x037f, 0xd6cc, 0x0040, 0x5cfa, 0x7124, - 0x695a, 0xa192, 0x0021, 0x00c8, 0x5cd8, 0x2071, 0x7498, 0x831c, - 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6128, 0x0078, 0x5cfa, - 0x6838, 0xd0fc, 0x0040, 0x5ce1, 0x2009, 0x0020, 0x695a, 0x0078, - 0x5ccd, 0x0f7e, 0x2d78, 0x1078, 0x60c0, 0x0f7f, 0x1078, 0x6115, - 0x0078, 0x5cfc, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, - 0xd0ac, 0x0040, 0x5cfa, 0x6810, 0x6914, 0xa115, 0x0040, 0x5cfa, - 0x1078, 0x5e6e, 0x1078, 0x3840, 0x6218, 0x2268, 0x6a3c, 0x8211, - 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x56f5, 0x007c, 0x0f7e, 0x6003, - 0x0003, 0x2079, 0x748c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, - 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, - 0x1936, 0x1078, 0x45ce, 0x1078, 0x4a67, 0x007c, 0x6003, 0x0004, - 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, - 0x007c, 0xa182, 0x0040, 0x0079, 0x5d2d, 0x5d3d, 0x5d3d, 0x5d3d, - 0x5d3d, 0x5d3d, 0x5d3f, 0x5dd6, 0x5d3d, 0x5d3d, 0x5dec, 0x5e4e, - 0x5d3d, 0x5d3d, 0x5d3d, 0x5d3d, 0x5e55, 0x1078, 0x1288, 0x077e, - 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x748c, 0x6110, 0x2178, 0x7614, - 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5dd1, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0040, 0x5d60, 0x7018, 0x7862, 0x701c, 0x785e, - 0xa284, 0x0300, 0x0040, 0x5dd1, 0x1078, 0x12e2, 0x1040, 0x1288, - 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, - 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, - 0xa186, 0x0002, 0x0040, 0x5d9a, 0xa186, 0x0028, 0x00c0, 0x5d84, - 0x684b, 0x001c, 0x0078, 0x5d9c, 0xd6dc, 0x0040, 0x5d8f, 0x684b, - 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5d9c, 0xd6d4, - 0x0040, 0x5d9a, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, - 0x0078, 0x5d9c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, - 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5db1, 0x7328, 0x732c, 0x6b56, - 0x037e, 0x2308, 0x2019, 0x7498, 0xad90, 0x0019, 0x1078, 0x6128, - 0x037f, 0xd6cc, 0x0040, 0x5dd1, 0x7124, 0x695a, 0xa192, 0x0021, - 0x00c8, 0x5dc5, 0x2071, 0x7498, 0x831c, 0x2300, 0xae18, 0xad90, - 0x001d, 0x1078, 0x6128, 0x0078, 0x5dd1, 0x7838, 0xd0fc, 0x0040, - 0x5dce, 0x2009, 0x0020, 0x695a, 0x0078, 0x5dba, 0x2d78, 0x1078, - 0x60c0, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, - 0x0003, 0x2079, 0x748c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, - 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, - 0x1936, 0x1078, 0x5095, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, - 0x4966, 0x1078, 0x4a67, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, - 0x5e4c, 0xd1cc, 0x0040, 0x5e27, 0x6948, 0x6838, 0xd0fc, 0x0040, - 0x5e1f, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, - 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, - 0x8318, 0x8210, 0x00f0, 0x5e0e, 0x157f, 0x007f, 0x6852, 0x007f, - 0x684e, 0x017f, 0x2168, 0x1078, 0x130b, 0x0078, 0x5e4a, 0x017e, - 0x1078, 0x130b, 0x0d7f, 0x1078, 0x6115, 0x0078, 0x5e4a, 0x6837, - 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5e46, - 0xa086, 0x0028, 0x00c0, 0x5e38, 0x684b, 0x001c, 0x0078, 0x5e48, - 0xd1dc, 0x0040, 0x5e3f, 0x684b, 0x0015, 0x0078, 0x5e48, 0xd1d4, - 0x0040, 0x5e46, 0x684b, 0x0007, 0x0078, 0x5e48, 0x684b, 0x0000, - 0x1078, 0x3840, 0x1078, 0x56f5, 0x0d7f, 0x007c, 0x6003, 0x0002, - 0x1078, 0x4966, 0x1078, 0x4a67, 0x007c, 0x1078, 0x4966, 0x1078, - 0x21a8, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6336, 0x0040, 0x5e68, - 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3840, 0x1078, 0x644a, - 0x0d7f, 0x1078, 0x56f5, 0x1078, 0x4a67, 0x007c, 0x684b, 0x0015, - 0xd1fc, 0x0040, 0x5e7a, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, - 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, - 0x5e81, 0x5e91, 0x5e91, 0x5e91, 0x5e91, 0x5e91, 0x5e93, 0x5e91, - 0x5f37, 0x5f3f, 0x5e91, 0x5e91, 0x5e91, 0x5e91, 0x5e91, 0x5e91, - 0x5e91, 0x1078, 0x1288, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, - 0x748c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, - 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, - 0x0040, 0x5f29, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x5eb4, - 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x5f26, - 0x1078, 0x12e2, 0x1040, 0x1288, 0x2d00, 0x784a, 0x7f4c, 0xa7bd, - 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, - 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, - 0x5eef, 0xa186, 0x0028, 0x00c0, 0x5ed9, 0x684b, 0x001c, 0x0078, - 0x5ef1, 0xd6dc, 0x0040, 0x5ee4, 0x684b, 0x0015, 0x7318, 0x6b62, - 0x731c, 0x6b5e, 0x0078, 0x5ef1, 0xd6d4, 0x0040, 0x5eef, 0x684b, - 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5ef1, 0x684b, - 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, - 0x0040, 0x5f06, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, - 0x7498, 0xad90, 0x0019, 0x1078, 0x6128, 0x037f, 0xd6cc, 0x0040, - 0x5f26, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x5f1a, 0x2071, - 0x7498, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6128, - 0x0078, 0x5f26, 0x7838, 0xd0fc, 0x0040, 0x5f23, 0x2009, 0x0020, - 0x695a, 0x0078, 0x5f0f, 0x2d78, 0x1078, 0x60c0, 0xd6dc, 0x00c0, - 0x5f2c, 0xa006, 0x0078, 0x5f30, 0x2001, 0x0001, 0x7218, 0x731c, - 0x1078, 0x1569, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, 0x007c, 0x0d7e, - 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x5fa6, - 0xd1cc, 0x0040, 0x5f76, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x5f6e, - 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, - 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, - 0x8210, 0x00f0, 0x5f5d, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, - 0x017f, 0x2168, 0x1078, 0x130b, 0x0078, 0x5fa4, 0x017e, 0x1078, - 0x130b, 0x0d7f, 0x1078, 0x6115, 0x0078, 0x5fa4, 0x6837, 0x0103, - 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5f95, 0xa086, - 0x0028, 0x00c0, 0x5f87, 0x684b, 0x001c, 0x0078, 0x5fa2, 0xd1dc, - 0x0040, 0x5f8e, 0x684b, 0x0015, 0x0078, 0x5fa2, 0xd1d4, 0x0040, - 0x5f95, 0x684b, 0x0007, 0x0078, 0x5fa2, 0x684b, 0x0000, 0x684c, - 0xd0ac, 0x0040, 0x5fa2, 0x6810, 0x6914, 0xa115, 0x0040, 0x5fa2, - 0x1078, 0x5e6e, 0x1078, 0x3840, 0x1078, 0x56f5, 0x0d7f, 0x007c, - 0x1078, 0x48be, 0x0078, 0x5fae, 0x1078, 0x4966, 0x1078, 0x6336, - 0x0040, 0x5fc5, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, - 0x700c, 0x210c, 0xd18c, 0x00c0, 0x5fce, 0xd184, 0x00c0, 0x5fca, - 0x6108, 0x694a, 0x1078, 0x3840, 0x0d7f, 0x1078, 0x56f5, 0x1078, - 0x49b7, 0x007c, 0x684b, 0x0004, 0x0078, 0x5fc2, 0x684b, 0x0004, - 0x0078, 0x5fc2, 0xa182, 0x0040, 0x0079, 0x5fd6, 0x5fe6, 0x5fe6, - 0x5fe6, 0x5fe6, 0x5fe6, 0x5fe8, 0x5fe6, 0x5feb, 0x5fe6, 0x5fe6, - 0x5fe6, 0x5fe6, 0x5fe6, 0x5fe6, 0x5fe6, 0x5fe6, 0x1078, 0x1288, - 0x1078, 0x56f5, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078, 0x1525, - 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x5ff7, 0x6000, - 0x5ffe, 0x5ffe, 0x5ffe, 0x5ffe, 0x5ffe, 0x5ffe, 0x1078, 0x1288, - 0x6003, 0x0001, 0x6106, 0x1078, 0x4562, 0x127e, 0x2091, 0x8000, - 0x1078, 0x49b7, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x6016, - 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x604a, 0xa186, 0x0027, - 0x00c0, 0x6037, 0x1078, 0x48be, 0x1078, 0x21a8, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x6336, 0x0040, 0x602d, 0x6837, 0x0103, 0x684b, - 0x0029, 0x1078, 0x3840, 0x1078, 0x644a, 0x0d7f, 0x1078, 0x56f5, - 0x1078, 0x49b7, 0x007c, 0x1078, 0x5729, 0x0078, 0x6032, 0xa186, - 0x0014, 0x00c0, 0x6033, 0x1078, 0x48be, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x6336, 0x0040, 0x602d, 0x6837, 0x0103, 0x684b, 0x0006, - 0x0078, 0x6029, 0x6053, 0x6051, 0x6051, 0x6051, 0x6051, 0x6051, - 0x605c, 0x1078, 0x1288, 0x1078, 0x48be, 0x6017, 0x0014, 0x6003, - 0x000c, 0x1078, 0x49b7, 0x007c, 0x1078, 0x48be, 0x6017, 0x0014, - 0x6003, 0x000e, 0x1078, 0x49b7, 0x007c, 0xa182, 0x008c, 0x00c8, - 0x606f, 0xa182, 0x0085, 0x0048, 0x606f, 0x0079, 0x6072, 0x1078, - 0x5729, 0x007c, 0x6079, 0x6079, 0x6079, 0x6079, 0x607b, 0x609a, - 0x6079, 0x1078, 0x1288, 0x0d7e, 0x1078, 0x644a, 0x1078, 0x6336, - 0x0040, 0x6096, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850, 0xd0b4, - 0x0040, 0x608e, 0x684b, 0x0006, 0x0078, 0x6092, 0x684b, 0x0005, - 0x1078, 0x64fd, 0x6847, 0x0000, 0x1078, 0x3840, 0x1078, 0x56f5, - 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, - 0x60b5, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x60ab, 0x684b, - 0x0006, 0x0078, 0x60af, 0x684b, 0x0005, 0x1078, 0x64fd, 0x6847, - 0x0000, 0x1078, 0x3840, 0x1078, 0x644a, 0x0d7f, 0x1078, 0x56f5, - 0x007c, 0x1078, 0x48be, 0x1078, 0x56f5, 0x1078, 0x49b7, 0x007c, - 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182, 0x0101, - 0x00c8, 0x60cc, 0x0078, 0x60ce, 0x2009, 0x0100, 0x2130, 0x2069, - 0x7498, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d, - 0x1078, 0x6128, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040, 0x60e2, - 0x1078, 0x130b, 0x1078, 0x12e2, 0x0040, 0x610c, 0x8528, 0x6837, - 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x00c8, - 0x60f8, 0x2608, 0xad90, 0x000f, 0x1078, 0x6128, 0x0078, 0x610c, - 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f, 0x1078, - 0x6128, 0x0078, 0x60e2, 0x0f7f, 0x852f, 0xa5ad, 0x0003, 0x7d36, - 0xa5ac, 0x0000, 0x0078, 0x6111, 0x0f7f, 0x852f, 0xa5ad, 0x0003, - 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff, 0x0040, - 0x6126, 0x6804, 0xa07d, 0x0040, 0x6124, 0x6807, 0x0000, 0x1078, - 0x3840, 0x2f68, 0x0078, 0x6119, 0x1078, 0x3840, 0x0f7f, 0x007c, - 0x157e, 0xa184, 0x0001, 0x0040, 0x612e, 0x8108, 0x810c, 0x21a8, - 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6130, 0x157f, - 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x0007, 0x1079, - 0x6143, 0x127f, 0x007c, 0x6152, 0x614b, 0x614d, 0x616b, 0x614b, - 0x614d, 0x614d, 0x614d, 0x1078, 0x1288, 0xa006, 0x007c, 0xa085, - 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, - 0x6168, 0xa00e, 0x2001, 0x0005, 0x1078, 0x38d0, 0x1078, 0x64fd, - 0x1078, 0x3840, 0x1078, 0x56f5, 0xa085, 0x0001, 0x0d7f, 0x007c, - 0xa006, 0x0078, 0x6166, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1288, - 0x1079, 0x6173, 0x007c, 0x6183, 0x61a0, 0x6185, 0x61b1, 0x619c, - 0x6183, 0x614d, 0x6152, 0x6152, 0x614d, 0x614d, 0x614d, 0x614d, - 0x614d, 0x614d, 0x614d, 0x1078, 0x1288, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x6336, 0x0040, 0x618e, 0x1078, 0x64fd, 0x0d7f, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4562, 0x1078, - 0x49b7, 0xa085, 0x0001, 0x007c, 0x1078, 0x1629, 0x0078, 0x6185, - 0x0e7e, 0x2071, 0x71b6, 0x7024, 0xac06, 0x00c0, 0x61a9, 0x1078, - 0x51c9, 0x1078, 0x5139, 0x0e7f, 0x00c0, 0x6185, 0x1078, 0x614d, - 0x007c, 0x037e, 0x0e7e, 0x2071, 0x71b6, 0x703c, 0xac06, 0x00c0, - 0x61c1, 0x2019, 0x0000, 0x1078, 0x525b, 0x0e7f, 0x037f, 0x0078, - 0x6185, 0x1078, 0x5537, 0x0e7f, 0x037f, 0x00c0, 0x6185, 0x1078, - 0x614d, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x0007, 0x1079, 0x61d2, - 0x0c7f, 0x007c, 0x61e0, 0x623d, 0x62da, 0x61e4, 0x61e0, 0x61e0, - 0x6b6f, 0x56f5, 0x1078, 0x6484, 0x00c0, 0x61e0, 0x1078, 0x58f2, + 0x54f2, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, + 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x54cf, 0x2100, 0xa1b2, 0x002a, + 0x10c8, 0x126a, 0x0079, 0x54fc, 0x5528, 0x5534, 0x5528, 0x5528, + 0x5528, 0x5528, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, + 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, + 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, + 0x5526, 0x5526, 0x5526, 0x5528, 0x5526, 0x5526, 0x5526, 0x5526, + 0x5526, 0x5526, 0x5526, 0x5526, 0x5528, 0x5526, 0x1078, 0x126a, + 0x6003, 0x0001, 0x6106, 0x1078, 0x4311, 0x127e, 0x2091, 0x8000, + 0x1078, 0x4713, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, + 0x4311, 0x127e, 0x2091, 0x8000, 0x1078, 0x4713, 0x127f, 0x007c, + 0x6004, 0xa0b2, 0x002a, 0x10c8, 0x126a, 0xa1b6, 0x0013, 0x00c0, + 0x554c, 0x2008, 0x0079, 0x55a2, 0xa1b6, 0x0027, 0x00c0, 0x558a, + 0x1078, 0x461a, 0x6004, 0x1078, 0x6101, 0x0040, 0x555d, 0x1078, + 0x6115, 0x0040, 0x5586, 0x0078, 0x5581, 0x1078, 0x2143, 0x2001, + 0x0007, 0x1078, 0x3316, 0x6018, 0xa080, 0x0028, 0x200c, 0x017e, + 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078, 0x43ff, 0x1078, + 0x4344, 0x0c7e, 0x6018, 0xa065, 0x0040, 0x5578, 0x1078, 0x34f2, + 0x0c7f, 0x2c08, 0x1078, 0x6946, 0x037f, 0x027f, 0x017f, 0x1078, + 0x3352, 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0x1078, 0x5614, + 0x0078, 0x5581, 0xa186, 0x0014, 0x1078, 0x461a, 0x1078, 0x2125, + 0x1078, 0x6101, 0x00c0, 0x5598, 0x1078, 0x2143, 0x0078, 0x5581, + 0x1078, 0x6115, 0x00c0, 0x55a0, 0x1078, 0x5614, 0x0078, 0x5581, + 0x0078, 0x5581, 0x55ce, 0x55d0, 0x55d4, 0x55d8, 0x55dc, 0x55e0, + 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, + 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, + 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, + 0x55e4, 0x55ea, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, 0x55cc, + 0x55cc, 0x55cc, 0x55ea, 0x55ea, 0x1078, 0x126a, 0x0078, 0x55ea, + 0x2001, 0x000b, 0x0078, 0x55f3, 0x2001, 0x0003, 0x0078, 0x55f3, + 0x2001, 0x0005, 0x0078, 0x55f3, 0x2001, 0x0001, 0x0078, 0x55f3, + 0x2001, 0x0009, 0x0078, 0x55f3, 0x1078, 0x126a, 0x0078, 0x55f2, + 0x1078, 0x3316, 0x1078, 0x461a, 0x6003, 0x0002, 0x6017, 0x0028, + 0x1078, 0x4713, 0x007c, 0x1078, 0x3316, 0x1078, 0x461a, 0x6003, + 0x0002, 0x037e, 0x2019, 0x6c5c, 0x2304, 0xa084, 0xff00, 0x00c0, + 0x5605, 0x2019, 0x0028, 0x0078, 0x560e, 0x8007, 0xa09a, 0x0004, + 0x0048, 0x5601, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, + 0x1078, 0x4713, 0x0078, 0x55f2, 0x0e7e, 0x1078, 0x5fcd, 0x0040, + 0x5621, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, + 0x0100, 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, + 0x00ff, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x126a, 0x6604, 0xa6b6, + 0x0028, 0x00c0, 0x5637, 0x1078, 0x614a, 0x0078, 0x5660, 0x6604, + 0xa6b6, 0x0029, 0x00c0, 0x5640, 0x1078, 0x6164, 0x0078, 0x5660, + 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x5649, 0x1078, 0x54b5, 0x0078, + 0x5660, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x5652, 0x1078, 0x54de, + 0x0078, 0x5660, 0xa1b6, 0x0015, 0x00c0, 0x565a, 0x1079, 0x5665, + 0x0078, 0x5660, 0xa1b6, 0x0016, 0x00c0, 0x5661, 0x1079, 0x572e, + 0x007c, 0x1078, 0x5459, 0x0078, 0x5660, 0x5671, 0x5674, 0x5671, + 0x56b5, 0x5671, 0x56dd, 0x5671, 0x5671, 0x5671, 0x5706, 0x5671, + 0x571c, 0x0005, 0x0005, 0x007c, 0x0e7e, 0x2071, 0x6c00, 0x7070, + 0xa086, 0x0074, 0x00c0, 0x569e, 0x1078, 0x691e, 0x00c0, 0x5690, + 0x0d7e, 0x6018, 0x2068, 0x1078, 0x56a2, 0x0d7f, 0x2001, 0x0006, + 0x1078, 0x3316, 0x1078, 0x2143, 0x1078, 0x5425, 0x0078, 0x56a0, + 0x2001, 0x000a, 0x1078, 0x3316, 0x1078, 0x2143, 0x6003, 0x0001, + 0x6007, 0x0001, 0x1078, 0x4311, 0x0078, 0x56a0, 0x1078, 0x56cd, + 0x0e7f, 0x007c, 0x6800, 0xd084, 0x0040, 0x56b4, 0x2001, 0x0000, + 0x1078, 0x3302, 0x2069, 0x6c51, 0x6804, 0xd0a4, 0x0040, 0x56b4, + 0x2001, 0x0006, 0x1078, 0x3324, 0x007c, 0x2011, 0x6c1c, 0x2204, + 0xa086, 0x0074, 0x00c0, 0x56ca, 0x1078, 0x57f7, 0x2001, 0x0004, + 0x1078, 0x3316, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x4311, + 0x0078, 0x56cc, 0x1078, 0x56cd, 0x007c, 0x2001, 0x6c00, 0x2004, + 0xa086, 0x0003, 0x0040, 0x56d8, 0x2001, 0x0007, 0x1078, 0x3316, + 0x1078, 0x5425, 0x1078, 0x2143, 0x007c, 0x0e7e, 0x2071, 0x6c00, + 0x7070, 0xa086, 0x0014, 0x00c0, 0x5702, 0x7000, 0xa086, 0x0003, + 0x00c0, 0x56ec, 0x1078, 0x29a0, 0x0d7e, 0x6018, 0x2068, 0x1078, + 0x33ed, 0x1078, 0x56a2, 0x0d7f, 0x1078, 0x5801, 0x00c0, 0x5702, + 0x2001, 0x0006, 0x1078, 0x3316, 0x1078, 0x5425, 0x1078, 0x2143, + 0x0078, 0x5704, 0x1078, 0x56cd, 0x0e7f, 0x007c, 0x2011, 0x6c1c, + 0x2204, 0xa086, 0x0014, 0x00c0, 0x5719, 0x2001, 0x0002, 0x1078, + 0x3316, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4311, 0x0078, + 0x571b, 0x1078, 0x56cd, 0x007c, 0x2011, 0x6c1c, 0x2204, 0xa086, + 0x0004, 0x00c0, 0x572b, 0x2001, 0x0007, 0x1078, 0x3316, 0x1078, + 0x5425, 0x0078, 0x572d, 0x1078, 0x56cd, 0x007c, 0x5671, 0x573a, + 0x5671, 0x5760, 0x5671, 0x57ac, 0x5671, 0x5671, 0x5671, 0x57bf, + 0x5671, 0x57d2, 0x0c7e, 0x1078, 0x57e5, 0x00c0, 0x574f, 0x2001, + 0x0000, 0x1078, 0x3302, 0x2001, 0x0002, 0x1078, 0x3316, 0x6003, + 0x0001, 0x6007, 0x0002, 0x1078, 0x4311, 0x0078, 0x575e, 0x2009, + 0x708f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x575c, + 0x1078, 0x5425, 0x0078, 0x575e, 0x1078, 0x56cd, 0x0c7f, 0x007c, + 0x1078, 0x57f4, 0x00c0, 0x5774, 0x2001, 0x0000, 0x1078, 0x3302, + 0x2001, 0x0002, 0x1078, 0x3316, 0x6003, 0x0001, 0x6007, 0x0002, + 0x1078, 0x4311, 0x0078, 0x5794, 0x2009, 0x708e, 0x2134, 0xa6b4, + 0x00ff, 0xa686, 0x0005, 0x0040, 0x5795, 0x2009, 0x708f, 0x2104, + 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x5792, 0xa686, 0x0009, + 0x0040, 0x5795, 0x2001, 0x0004, 0x1078, 0x3316, 0x1078, 0x5425, + 0x0078, 0x5794, 0x1078, 0x56cd, 0x007c, 0x0d7e, 0x6018, 0x2068, + 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x57a7, 0x8001, 0x6842, + 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x5794, 0x1078, + 0x2125, 0x0d7f, 0x0078, 0x5792, 0x1078, 0x57f4, 0x00c0, 0x57bc, + 0x2001, 0x0004, 0x1078, 0x3316, 0x6003, 0x0001, 0x6007, 0x0003, + 0x1078, 0x4311, 0x0078, 0x57be, 0x1078, 0x56cd, 0x007c, 0x1078, + 0x57f4, 0x00c0, 0x57cf, 0x2001, 0x0008, 0x1078, 0x3316, 0x6003, + 0x0001, 0x6007, 0x0005, 0x1078, 0x4311, 0x0078, 0x57d1, 0x1078, + 0x56cd, 0x007c, 0x1078, 0x57f4, 0x00c0, 0x57e2, 0x2001, 0x000a, + 0x1078, 0x3316, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4311, + 0x0078, 0x57e4, 0x1078, 0x56cd, 0x007c, 0x2009, 0x708e, 0x2104, + 0xa086, 0x0003, 0x00c0, 0x57f3, 0x2009, 0x708f, 0x2104, 0xa084, + 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, 0x007c, 0x0c7e, + 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x337c, 0x017f, 0x0c7f, + 0x007c, 0x0e7e, 0x2071, 0x708c, 0x7004, 0xa086, 0x0014, 0x00c0, + 0x5824, 0x7008, 0xa086, 0x0800, 0x00c0, 0x5824, 0x700c, 0xd0ec, + 0x0040, 0x5822, 0xa084, 0x0f00, 0xa086, 0x0100, 0x00c0, 0x5822, + 0x7024, 0xd0a4, 0x0040, 0x5822, 0xd08c, 0x0040, 0x5822, 0xa006, + 0x0078, 0x5824, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, + 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2029, 0x6db9, 0x252c, 0x2021, 0x6dbf, 0x2424, 0x2061, + 0x7200, 0x2071, 0x6c00, 0x7244, 0x7060, 0xa202, 0x00c8, 0x587b, + 0x1078, 0x6b22, 0x0040, 0x5873, 0x671c, 0xa786, 0x0001, 0x0040, + 0x5873, 0xa786, 0x0007, 0x0040, 0x5873, 0x2500, 0xac06, 0x0040, + 0x5873, 0x2400, 0xac06, 0x0040, 0x5873, 0x0c7e, 0x6000, 0xa086, + 0x0004, 0x00c0, 0x585d, 0x1078, 0x15fc, 0x6010, 0x2068, 0x1078, + 0x5fcd, 0x0040, 0x5870, 0xa786, 0x0003, 0x00c0, 0x5885, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, + 0x1078, 0x60e8, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, + 0x587b, 0x0078, 0x583b, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, + 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, + 0x5867, 0x1078, 0x6ac6, 0x0078, 0x5870, 0x220c, 0x2304, 0xa106, + 0x00c0, 0x5898, 0x8210, 0x8318, 0x00f0, 0x588d, 0xa006, 0x007c, + 0x2304, 0xa102, 0x0048, 0x58a0, 0x2001, 0x0001, 0x0078, 0x58a2, + 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x002a, + 0x10c8, 0x126a, 0x1078, 0x6101, 0x0040, 0x58b4, 0x1078, 0x6115, + 0x0040, 0x58bd, 0x0078, 0x58b6, 0x1078, 0x2143, 0x1078, 0x461a, + 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0x1078, 0x5614, 0x0078, + 0x58b6, 0xa182, 0x0040, 0x0079, 0x58c5, 0x58d5, 0x58d5, 0x58d5, + 0x58d5, 0x58d5, 0x58d5, 0x58d5, 0x58d5, 0x58d5, 0x58d5, 0x58d5, + 0x58d7, 0x58d7, 0x58d7, 0x58d7, 0x58d5, 0x1078, 0x126a, 0x6003, + 0x0001, 0x6106, 0x1078, 0x42c4, 0x127e, 0x2091, 0x8000, 0x1078, + 0x4713, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x58ec, 0x6004, + 0xa082, 0x0040, 0x0079, 0x5942, 0xa186, 0x0027, 0x00c0, 0x5909, + 0x1078, 0x461a, 0x1078, 0x2125, 0x0d7e, 0x6110, 0x2168, 0x1078, + 0x5fcd, 0x0040, 0x5903, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, + 0x35c4, 0x1078, 0x60db, 0x0d7f, 0x1078, 0x5425, 0x1078, 0x4713, + 0x007c, 0xa186, 0x0014, 0x10c0, 0x126a, 0x6004, 0xa082, 0x0040, + 0x0079, 0x5912, 0x5924, 0x5922, 0x5922, 0x5922, 0x5922, 0x5922, + 0x5922, 0x5922, 0x5922, 0x5922, 0x5922, 0x593b, 0x593b, 0x593b, + 0x593b, 0x5922, 0x1078, 0x126a, 0x1078, 0x461a, 0x0d7e, 0x6110, + 0x2168, 0x1078, 0x5fcd, 0x0040, 0x5935, 0x6837, 0x0103, 0x684b, + 0x0006, 0x1078, 0x35c4, 0x1078, 0x60db, 0x0d7f, 0x1078, 0x5425, + 0x1078, 0x4713, 0x007c, 0x1078, 0x461a, 0x1078, 0x5425, 0x1078, + 0x4713, 0x007c, 0x5954, 0x5952, 0x5952, 0x5952, 0x5952, 0x5952, + 0x5952, 0x5952, 0x5952, 0x5952, 0x5952, 0x5962, 0x5962, 0x5962, + 0x5962, 0x5952, 0x1078, 0x126a, 0x1078, 0x461a, 0x6003, 0x0002, + 0x1078, 0x4713, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, + 0x200a, 0x007c, 0x1078, 0x461a, 0x6003, 0x000f, 0x1078, 0x4713, + 0x007c, 0xa182, 0x0040, 0x0079, 0x596d, 0x597d, 0x597d, 0x597d, + 0x597d, 0x597d, 0x597f, 0x5a08, 0x5a20, 0x597d, 0x597d, 0x597d, + 0x597d, 0x597d, 0x597d, 0x597d, 0x597d, 0x1078, 0x126a, 0x0e7e, + 0x0d7e, 0x2071, 0x708c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, + 0x86ff, 0x0040, 0x59ec, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, + 0x59b1, 0xa186, 0x0028, 0x00c0, 0x599b, 0x1078, 0x60ef, 0x684b, + 0x001c, 0x0078, 0x59b3, 0xd6dc, 0x0040, 0x59a6, 0x684b, 0x0015, + 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x59b3, 0xd6d4, 0x0040, + 0x59b1, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x59b3, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, + 0x0040, 0x59c6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, + 0x7098, 0xad90, 0x0019, 0x1078, 0x5dd2, 0x037f, 0xd6cc, 0x0040, + 0x59fc, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x59da, 0x2071, + 0x7098, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x5dd2, + 0x0078, 0x59fc, 0x6838, 0xd0fc, 0x0040, 0x59e3, 0x2009, 0x0020, + 0x695a, 0x0078, 0x59cf, 0x0f7e, 0x2d78, 0x1078, 0x5d6a, 0x0f7f, + 0x1078, 0x5dbf, 0x0078, 0x59fe, 0x684b, 0x0000, 0x6837, 0x0103, + 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x59fc, 0x6810, 0x6914, 0xa115, + 0x0040, 0x59fc, 0x1078, 0x5b45, 0x1078, 0x35c4, 0x6218, 0x2268, + 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x5425, 0x007c, + 0x0f7e, 0x6003, 0x0003, 0x2079, 0x708c, 0x7c04, 0x7b00, 0x7e0c, + 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, + 0x2c10, 0x1078, 0x18d5, 0x1078, 0x4330, 0x1078, 0x47c3, 0x007c, + 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, + 0x1078, 0x1505, 0x007c, 0xa182, 0x0040, 0x0079, 0x5a2f, 0x5a3f, + 0x5a3f, 0x5a3f, 0x5a3f, 0x5a3f, 0x5a41, 0x5acf, 0x5a3f, 0x5a3f, + 0x5ae5, 0x5b25, 0x5a3f, 0x5a3f, 0x5a3f, 0x5a3f, 0x5b2c, 0x1078, + 0x126a, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x708c, 0x6110, + 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, + 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5aca, + 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x5a62, 0x7018, 0x7862, + 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x5aca, 0x1078, 0x12c2, + 0x1040, 0x126a, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, + 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, + 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5a9c, 0xa186, 0x0028, + 0x00c0, 0x5a86, 0x684b, 0x001c, 0x0078, 0x5a9e, 0xd6dc, 0x0040, + 0x5a91, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x5a9e, 0xd6d4, 0x0040, 0x5a9c, 0x684b, 0x0007, 0x7318, 0x6b62, + 0x731c, 0x6b5e, 0x0078, 0x5a9e, 0x684b, 0x0000, 0x6f4e, 0x7850, + 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5ab3, 0x7328, + 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7098, 0xad90, 0x0019, + 0x1078, 0x5dd2, 0x037f, 0xd6cc, 0x0040, 0x5aca, 0x7124, 0x695a, + 0xa192, 0x0021, 0x00c8, 0x5ac7, 0x2071, 0x7098, 0x831c, 0x2300, + 0xae18, 0xad90, 0x001d, 0x1078, 0x5dd2, 0x0078, 0x5aca, 0x2d78, + 0x1078, 0x5d6a, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, + 0x6003, 0x0003, 0x2079, 0x708c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, + 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, + 0x1078, 0x18d5, 0x1078, 0x4dfc, 0x007c, 0x0d7e, 0x6003, 0x0002, + 0x1078, 0x46c2, 0x1078, 0x47c3, 0x6110, 0x2168, 0x694c, 0xd1e4, + 0x0040, 0x5b23, 0xd1cc, 0x0040, 0x5afe, 0x6948, 0x017e, 0x1078, + 0x12eb, 0x0d7f, 0x1078, 0x5dbf, 0x0078, 0x5b21, 0x6837, 0x0103, + 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5b1d, 0xa086, + 0x0028, 0x00c0, 0x5b0f, 0x684b, 0x001c, 0x0078, 0x5b1f, 0xd1dc, + 0x0040, 0x5b16, 0x684b, 0x0015, 0x0078, 0x5b1f, 0xd1d4, 0x0040, + 0x5b1d, 0x684b, 0x0007, 0x0078, 0x5b1f, 0x684b, 0x0000, 0x1078, + 0x35c4, 0x1078, 0x5425, 0x0d7f, 0x007c, 0x6003, 0x0002, 0x1078, + 0x46c2, 0x1078, 0x47c3, 0x007c, 0x1078, 0x46c2, 0x1078, 0x2125, + 0x0d7e, 0x6110, 0x2168, 0x1078, 0x5fcd, 0x0040, 0x5b3f, 0x6837, + 0x0103, 0x684b, 0x0029, 0x1078, 0x35c4, 0x1078, 0x60db, 0x0d7f, + 0x1078, 0x5425, 0x1078, 0x47c3, 0x007c, 0x684b, 0x0015, 0xd1fc, + 0x0040, 0x5b51, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, + 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, 0x5b58, + 0x5b68, 0x5b68, 0x5b68, 0x5b68, 0x5b68, 0x5b6a, 0x5b68, 0x5c05, + 0x5c0d, 0x5b68, 0x5b68, 0x5b68, 0x5b68, 0x5b68, 0x5b68, 0x5b68, + 0x1078, 0x126a, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x708c, + 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, + 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, + 0x5bf7, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x5b8b, 0x7018, + 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x5bf4, 0x1078, + 0x12c2, 0x1040, 0x126a, 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, + 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, + 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5bc6, + 0xa186, 0x0028, 0x00c0, 0x5bb0, 0x684b, 0x001c, 0x0078, 0x5bc8, + 0xd6dc, 0x0040, 0x5bbb, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, + 0x6b5e, 0x0078, 0x5bc8, 0xd6d4, 0x0040, 0x5bc6, 0x684b, 0x0007, + 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5bc8, 0x684b, 0x0000, + 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, + 0x5bdd, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7098, + 0xad90, 0x0019, 0x1078, 0x5dd2, 0x037f, 0xd6cc, 0x0040, 0x5bf4, + 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x5bf1, 0x2071, 0x7098, + 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x5dd2, 0x0078, + 0x5bf4, 0x2d78, 0x1078, 0x5d6a, 0xd6dc, 0x00c0, 0x5bfa, 0xa006, + 0x0078, 0x5bfe, 0x2001, 0x0001, 0x7218, 0x731c, 0x1078, 0x1542, + 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x20e1, 0x0005, 0x3d18, + 0x3e20, 0x2c10, 0x1078, 0x1505, 0x007c, 0x0d7e, 0x6003, 0x0002, + 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x5c52, 0xd1cc, 0x0040, + 0x5c22, 0x6948, 0x017e, 0x1078, 0x12eb, 0x0d7f, 0x1078, 0x5dbf, + 0x0078, 0x5c50, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, + 0x0002, 0x0040, 0x5c41, 0xa086, 0x0028, 0x00c0, 0x5c33, 0x684b, + 0x001c, 0x0078, 0x5c4e, 0xd1dc, 0x0040, 0x5c3a, 0x684b, 0x0015, + 0x0078, 0x5c4e, 0xd1d4, 0x0040, 0x5c41, 0x684b, 0x0007, 0x0078, + 0x5c4e, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0040, 0x5c4e, 0x6810, + 0x6914, 0xa115, 0x0040, 0x5c4e, 0x1078, 0x5b45, 0x1078, 0x35c4, + 0x1078, 0x5425, 0x0d7f, 0x007c, 0x1078, 0x461a, 0x0078, 0x5c5a, + 0x1078, 0x46c2, 0x1078, 0x5fcd, 0x0040, 0x5c71, 0x0d7e, 0x6110, + 0x2168, 0x6837, 0x0103, 0x2009, 0x6c0c, 0x210c, 0xd18c, 0x00c0, + 0x5c7a, 0xd184, 0x00c0, 0x5c76, 0x6108, 0x694a, 0x1078, 0x35c4, + 0x0d7f, 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0x684b, 0x0004, + 0x0078, 0x5c6e, 0x684b, 0x0004, 0x0078, 0x5c6e, 0xa182, 0x0040, + 0x0079, 0x5c82, 0x5c92, 0x5c92, 0x5c92, 0x5c92, 0x5c92, 0x5c94, + 0x5c92, 0x5c97, 0x5c92, 0x5c92, 0x5c92, 0x5c92, 0x5c92, 0x5c92, + 0x5c92, 0x5c92, 0x1078, 0x126a, 0x1078, 0x5425, 0x007c, 0x007e, + 0x027e, 0xa016, 0x1078, 0x1505, 0x027f, 0x007f, 0x007c, 0xa182, + 0x0085, 0x0079, 0x5ca3, 0x5cac, 0x5caa, 0x5caa, 0x5caa, 0x5caa, + 0x5caa, 0x5caa, 0x1078, 0x126a, 0x6003, 0x0001, 0x6106, 0x1078, + 0x42c4, 0x127e, 0x2091, 0x8000, 0x1078, 0x4713, 0x127f, 0x007c, + 0xa186, 0x0013, 0x00c0, 0x5cc2, 0x6004, 0xa082, 0x0085, 0x2008, + 0x0079, 0x5cf6, 0xa186, 0x0027, 0x00c0, 0x5ce3, 0x1078, 0x461a, + 0x1078, 0x2125, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x5fcd, 0x0040, + 0x5cd9, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x35c4, 0x1078, + 0x60db, 0x0d7f, 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0x1078, + 0x5459, 0x0078, 0x5cde, 0xa186, 0x0014, 0x00c0, 0x5cdf, 0x1078, + 0x461a, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x5fcd, 0x0040, 0x5cd9, + 0x6837, 0x0103, 0x684b, 0x0006, 0x0078, 0x5cd5, 0x5cff, 0x5cfd, + 0x5cfd, 0x5cfd, 0x5cfd, 0x5cfd, 0x5d08, 0x1078, 0x126a, 0x1078, + 0x461a, 0x6017, 0x0014, 0x6003, 0x000c, 0x1078, 0x4713, 0x007c, + 0x1078, 0x461a, 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, 0x4713, + 0x007c, 0xa182, 0x008c, 0x00c8, 0x5d1b, 0xa182, 0x0085, 0x0048, + 0x5d1b, 0x0079, 0x5d1e, 0x1078, 0x5459, 0x007c, 0x5d25, 0x5d25, + 0x5d25, 0x5d25, 0x5d27, 0x5d45, 0x5d25, 0x1078, 0x126a, 0x0d7e, + 0x1078, 0x60db, 0x1078, 0x5fcd, 0x0040, 0x5d41, 0x6010, 0x2068, + 0x6837, 0x0103, 0x6850, 0xa084, 0x0040, 0x0040, 0x5d3b, 0x684b, + 0x0006, 0x0078, 0x5d3d, 0x684b, 0x0005, 0x6847, 0x0000, 0x1078, + 0x35c4, 0x1078, 0x5425, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, + 0x1078, 0x5fcd, 0x0040, 0x5d5f, 0x6837, 0x0103, 0x6850, 0xa084, + 0x0040, 0x0040, 0x5d57, 0x684b, 0x0006, 0x0078, 0x5d59, 0x684b, + 0x0005, 0x6847, 0x0000, 0x1078, 0x35c4, 0x1078, 0x60db, 0x0d7f, + 0x1078, 0x5425, 0x007c, 0x1078, 0x461a, 0x1078, 0x5425, 0x1078, + 0x4713, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, + 0xa182, 0x0101, 0x00c8, 0x5d76, 0x0078, 0x5d78, 0x2009, 0x0100, + 0x2130, 0x2069, 0x7098, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, + 0xaf90, 0x001d, 0x1078, 0x5dd2, 0xa6b2, 0x0020, 0x7804, 0xa06d, + 0x0040, 0x5d8c, 0x1078, 0x12eb, 0x1078, 0x12c2, 0x0040, 0x5db6, + 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, + 0x003d, 0x00c8, 0x5da2, 0x2608, 0xad90, 0x000f, 0x1078, 0x5dd2, + 0x0078, 0x5db6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, + 0x000f, 0x1078, 0x5dd2, 0x0078, 0x5d8c, 0x0f7f, 0x852f, 0xa5ad, + 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x5dbb, 0x0f7f, 0x852f, + 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, + 0x8dff, 0x0040, 0x5dd0, 0x6804, 0xa07d, 0x0040, 0x5dce, 0x6807, + 0x0000, 0x1078, 0x35c4, 0x2f68, 0x0078, 0x5dc3, 0x1078, 0x35c4, + 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x5dd8, 0x8108, + 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, + 0x5dda, 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, + 0x0007, 0x1079, 0x5ded, 0x127f, 0x007c, 0x5dfc, 0x5df5, 0x5df7, + 0x5e13, 0x5df5, 0x5df7, 0x5df7, 0x5df7, 0x1078, 0x126a, 0xa006, + 0x007c, 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, + 0x5fcd, 0x0040, 0x5e10, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3654, + 0x1078, 0x35c4, 0x1078, 0x5425, 0xa085, 0x0001, 0x0d7f, 0x007c, + 0xa006, 0x0078, 0x5e0e, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x126a, + 0x1079, 0x5e1b, 0x007c, 0x5e2b, 0x5e4a, 0x5e2d, 0x5e5b, 0x5e46, + 0x5e2b, 0x5df7, 0x5dfc, 0x5dfc, 0x5df7, 0x5df7, 0x5df7, 0x5df7, + 0x5df7, 0x5df7, 0x5df7, 0x1078, 0x126a, 0x0d7e, 0x6010, 0x2068, + 0x1078, 0x5fcd, 0x0040, 0x5e38, 0x6850, 0xa085, 0x0005, 0x6852, + 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, + 0x42c4, 0x1078, 0x4713, 0xa085, 0x0001, 0x007c, 0x1078, 0x15fc, + 0x0078, 0x5e2d, 0x0e7e, 0x2071, 0x6db0, 0x7024, 0xac06, 0x00c0, + 0x5e53, 0x1078, 0x4f41, 0x1078, 0x4eb5, 0x0e7f, 0x00c0, 0x5e2d, + 0x1078, 0x5df7, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x6db0, 0x703c, + 0xac06, 0x00c0, 0x5e67, 0x2019, 0x0000, 0x1078, 0x4fd3, 0x1078, + 0x52af, 0x0e7f, 0x037f, 0x00c0, 0x5e2d, 0x1078, 0x5df7, 0x007c, + 0x0c7e, 0x601c, 0xa084, 0x0007, 0x1079, 0x5e78, 0x0c7f, 0x007c, + 0x5e80, 0x5ee0, 0x5f71, 0x5e84, 0x5e80, 0x5e80, 0x67ac, 0x5425, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, - 0x1288, 0x1079, 0x61ec, 0x007c, 0x61fc, 0x61fe, 0x621e, 0x6230, - 0x6230, 0x61fc, 0x61e0, 0x61e0, 0x61e0, 0x6230, 0x6230, 0x61fc, - 0x61fc, 0x61fc, 0x61fc, 0x623a, 0x1078, 0x1288, 0x0e7e, 0x6010, - 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x71b6, 0x7024, 0xac06, - 0x0040, 0x621a, 0x1078, 0x5139, 0x6007, 0x0085, 0x6003, 0x000b, - 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x4562, 0x1078, 0x49b7, - 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x6218, 0x0d7e, 0x6010, - 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, - 0x000b, 0x601f, 0x0002, 0x1078, 0x4562, 0x1078, 0x49b7, 0x007c, - 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, - 0x0d7f, 0x007c, 0x1078, 0x56f5, 0x007c, 0x6000, 0xa08a, 0x0010, - 0x10c8, 0x1288, 0x1079, 0x6245, 0x007c, 0x6255, 0x61e1, 0x6257, - 0x6255, 0x6255, 0x6255, 0x6255, 0x6255, 0x61da, 0x61da, 0x6255, - 0x6255, 0x6255, 0x6255, 0x6255, 0x6255, 0x1078, 0x1288, 0x0d7e, - 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, - 0x10c8, 0x1288, 0x1079, 0x6265, 0x007c, 0x6271, 0x628c, 0x6271, - 0x628c, 0x6271, 0x628c, 0x6273, 0x627c, 0x6271, 0x628c, 0x6271, - 0x6281, 0x1078, 0x1288, 0x6004, 0xa08e, 0x0004, 0x0040, 0x6283, - 0xa08e, 0x0002, 0x0040, 0x6283, 0x6004, 0x1078, 0x6484, 0x0040, - 0x62d6, 0x1078, 0x21a8, 0x1078, 0x6484, 0x00c0, 0x6289, 0x1078, - 0x58f2, 0x1078, 0x56f5, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, - 0x0016, 0x0040, 0x62c6, 0xa186, 0x0002, 0x00c0, 0x62b1, 0x6018, - 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x62b1, 0x8001, - 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, - 0x568f, 0x0040, 0x62b1, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, - 0x62c6, 0x0d7f, 0x0c7f, 0x1078, 0x6484, 0x00c0, 0x62b9, 0x1078, - 0x58f2, 0x1078, 0x21a8, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, - 0x21c6, 0x127f, 0x0e7f, 0x1078, 0x56f5, 0x007c, 0x2001, 0x0002, - 0x1078, 0x34a2, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x45af, - 0x1078, 0x49b7, 0x0d7f, 0x0c7f, 0x0078, 0x62c5, 0x1078, 0x58f2, - 0x0078, 0x6289, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x62e2, 0x007c, 0x62f2, 0x62f2, 0x62f2, 0x62f2, 0x62f2, 0x62f2, - 0x62f2, 0x62f2, 0x62f2, 0x61e0, 0x62f2, 0x61e1, 0x62f4, 0x61e1, - 0x62fd, 0x62f2, 0x1078, 0x1288, 0x6007, 0x008b, 0x6003, 0x000d, - 0x1078, 0x4562, 0x1078, 0x49b7, 0x007c, 0x1078, 0x644a, 0x1078, - 0x6336, 0x0040, 0x631f, 0x1078, 0x21a8, 0x0d7e, 0x1078, 0x6336, - 0x0040, 0x6312, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, - 0x1078, 0x3840, 0x0d7f, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, - 0x0001, 0x1078, 0x45af, 0x1078, 0x49b7, 0x0078, 0x6321, 0x1078, - 0x56f5, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6333, 0xa282, 0x7600, - 0x0048, 0x6333, 0x2001, 0x7015, 0x2004, 0xa202, 0x00c8, 0x6333, - 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6332, 0x027e, 0x0e7e, - 0x2071, 0x7000, 0x6210, 0x7058, 0xa202, 0x0048, 0x6348, 0x705c, - 0xa202, 0x00c8, 0x6348, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, - 0xa006, 0x0078, 0x6345, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2061, 0x7600, 0x2071, 0x7000, 0x7344, 0x7060, - 0xa302, 0x00c8, 0x6371, 0x601c, 0xa206, 0x00c0, 0x6369, 0x1078, - 0x6484, 0x00c0, 0x6365, 0x1078, 0x58f2, 0x0c7e, 0x1078, 0x56f5, - 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x6371, 0x0078, - 0x6356, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0c7e, - 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x568f, 0x057f, - 0x0040, 0x6390, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, 0x004b, - 0x1078, 0x571c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x638c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, - 0x62a0, 0x0c7e, 0x1078, 0x568f, 0x057f, 0x0040, 0x63ba, 0x6013, - 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, 0x36e4, - 0x0c7f, 0x1078, 0x469f, 0x1078, 0x45e2, 0x2c08, 0x1078, 0x6d09, - 0x2009, 0x004c, 0x1078, 0x571c, 0xa085, 0x0001, 0x127f, 0x057f, - 0x0c7f, 0x007c, 0xa006, 0x0078, 0x63b6, 0x0c7e, 0x057e, 0x127e, - 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x568f, 0x057f, 0x0040, - 0x63e5, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, - 0x2560, 0x1078, 0x36e4, 0x0c7f, 0x1078, 0x469f, 0x1078, 0x45e2, - 0x2c08, 0x1078, 0x6d09, 0x2009, 0x004d, 0x1078, 0x571c, 0xa085, - 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x63e1, - 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, - 0x568f, 0x057f, 0x0040, 0x6410, 0x6612, 0x651a, 0x601f, 0x0003, - 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x36e4, 0x0c7f, 0x1078, - 0x469f, 0x1078, 0x45e2, 0x2c08, 0x1078, 0x6d09, 0x2009, 0x004e, - 0x1078, 0x571c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x640c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, - 0x1078, 0x568f, 0x017f, 0x0040, 0x642c, 0x660a, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x571c, 0xa085, - 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6429, 0x0c7e, - 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x568f, 0x017f, 0x0040, - 0x6447, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, - 0x1078, 0x571c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, - 0x0078, 0x6444, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, - 0x0040, 0x6454, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, - 0x0000, 0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, - 0x0d7e, 0x2031, 0x7052, 0x2634, 0xd6e4, 0x0040, 0x646c, 0x6618, - 0x2660, 0x6e48, 0x1078, 0x35f0, 0x0d7f, 0x0c7f, 0x067f, 0x007c, - 0x007e, 0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6481, 0xa08e, - 0x0003, 0x0040, 0x6481, 0xa08e, 0x0004, 0x0040, 0x6481, 0xa085, - 0x0001, 0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, - 0x0000, 0x0040, 0x6499, 0xa08e, 0x001f, 0x0040, 0x6499, 0xa08e, - 0x0028, 0x0040, 0x6499, 0xa08e, 0x0029, 0x0040, 0x6499, 0xa085, - 0x0001, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x568f, 0x017f, 0x0040, 0x64b6, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x1078, 0x21a8, 0x2009, 0x0028, 0x1078, - 0x571c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, - 0x64b3, 0xa186, 0x0015, 0x00c0, 0x64ce, 0x2011, 0x701c, 0x2204, - 0xa086, 0x0074, 0x00c0, 0x64ce, 0x1078, 0x5ad5, 0x6003, 0x0001, - 0x6007, 0x0029, 0x1078, 0x45af, 0x0078, 0x64d2, 0x1078, 0x58f2, - 0x1078, 0x56f5, 0x007c, 0xa186, 0x0015, 0x00c0, 0x64f0, 0x2011, - 0x701c, 0x2204, 0xa086, 0x0014, 0x00c0, 0x64f0, 0x0d7e, 0x6018, - 0x2068, 0x1078, 0x3576, 0x0d7f, 0x1078, 0x5adf, 0x00c0, 0x64f0, - 0x2001, 0x0006, 0x1078, 0x34a2, 0x1078, 0x579f, 0x0078, 0x64f4, - 0x1078, 0x58f2, 0x1078, 0x56f5, 0x007c, 0x6848, 0xa086, 0x0005, - 0x00c0, 0x64fc, 0x1078, 0x64fd, 0x007c, 0x6850, 0xc0ad, 0x6852, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x650b, 0x067f, 0x007c, 0x651b, 0x66eb, 0x67cc, 0x651b, 0x651b, - 0x651b, 0x651b, 0x651b, 0x6555, 0x6832, 0x651b, 0x651b, 0x651b, - 0x651b, 0x651b, 0x651b, 0x1078, 0x1288, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x1288, 0x1079, 0x6527, 0x067f, 0x007c, 0x6537, - 0x6b1e, 0x6537, 0x6537, 0x6537, 0x6537, 0x6537, 0x6537, 0x6af9, - 0x6b68, 0x6537, 0x6537, 0x6537, 0x6537, 0x6537, 0x6537, 0x1078, - 0x1288, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1288, 0x1079, - 0x6543, 0x067f, 0x007c, 0x6553, 0x696a, 0x69dc, 0x69fe, 0x6a4a, - 0x6553, 0x6553, 0x6aa4, 0x683e, 0x6ae1, 0x6ae5, 0x6553, 0x6553, - 0x6553, 0x6553, 0x6553, 0x1078, 0x1288, 0xa1b2, 0x0030, 0x10c8, - 0x1288, 0x2100, 0x0079, 0x655c, 0x658c, 0x6669, 0x658c, 0x658c, - 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, - 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, - 0x658c, 0x658c, 0x658c, 0x658e, 0x65bd, 0x65c8, 0x65f0, 0x65f6, - 0x662a, 0x6662, 0x658c, 0x658c, 0x6671, 0x658c, 0x658c, 0x658c, - 0x6678, 0x658c, 0x658c, 0x658c, 0x658c, 0x658c, 0x6695, 0x658c, - 0x658c, 0x66a0, 0x658c, 0x658c, 0x1078, 0x1288, 0x1078, 0x37ec, - 0x6618, 0x0c7e, 0x2660, 0x1078, 0x350c, 0x0c7f, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x65af, 0x1078, - 0x6c48, 0x00c0, 0x65ea, 0x1078, 0x6be6, 0x00c0, 0x65ab, 0x6007, - 0x0008, 0x0078, 0x6664, 0x6007, 0x0009, 0x0078, 0x6664, 0x1078, - 0x6dda, 0x0040, 0x65b9, 0x1078, 0x6c48, 0x0040, 0x65a3, 0x0078, - 0x65ea, 0x6013, 0x1900, 0x0078, 0x65ab, 0x6106, 0x1078, 0x6ba9, - 0x6007, 0x0006, 0x0078, 0x6664, 0x6007, 0x0007, 0x0078, 0x6664, - 0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, - 0x0006, 0x0040, 0x65da, 0xa686, 0x0004, 0x0040, 0x65da, 0x0d7f, - 0x0078, 0x65ea, 0x1078, 0x6ca6, 0x00c0, 0x65e5, 0x1078, 0x3576, - 0x6007, 0x000a, 0x0d7f, 0x0078, 0x6664, 0x6007, 0x000b, 0x0d7f, - 0x0078, 0x6664, 0x1078, 0x21a8, 0x6007, 0x0001, 0x0078, 0x6664, - 0x1078, 0x21a8, 0x6007, 0x000c, 0x0078, 0x6664, 0x1078, 0x37ec, - 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, - 0x0048, 0x6617, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, - 0x65ea, 0x1078, 0x6cb5, 0x00c0, 0x6611, 0x6007, 0x000e, 0x0078, - 0x6664, 0x1078, 0x21a8, 0x6007, 0x000f, 0x0078, 0x6664, 0x1078, - 0x6dda, 0x0040, 0x6624, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x6609, 0x0078, 0x65ea, 0x6013, 0x1900, 0x6007, 0x0009, - 0x0078, 0x6664, 0x1078, 0x37ec, 0x6618, 0xa6b0, 0x0001, 0x2634, - 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x664f, 0xa6b4, 0xff00, - 0x8637, 0xa686, 0x0006, 0x00c0, 0x65ea, 0x1078, 0x6ce1, 0x00c0, - 0x6649, 0x1078, 0x6be6, 0x00c0, 0x6649, 0x6007, 0x0010, 0x0078, - 0x6664, 0x1078, 0x21a8, 0x6007, 0x0011, 0x0078, 0x6664, 0x1078, - 0x6dda, 0x0040, 0x665c, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x663d, 0x0078, 0x65ea, 0x6013, 0x1900, 0x6007, 0x0009, - 0x0078, 0x6664, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x45af, - 0x007c, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x45af, 0x0078, - 0x6668, 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x45af, 0x007c, - 0x017e, 0x027e, 0x2011, 0x7488, 0x2214, 0x2c08, 0x1078, 0x6ea2, - 0x00c0, 0x6689, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, - 0x668e, 0x1078, 0x56f5, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, - 0x1078, 0x45af, 0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x66a7, - 0x6007, 0x002b, 0x0078, 0x6664, 0x6007, 0x002c, 0x0078, 0x6664, - 0x6106, 0x1078, 0x66ac, 0x6007, 0x002e, 0x0078, 0x6664, 0x0d7e, - 0x1078, 0x66d2, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x66e1, 0x00c0, - 0x66cb, 0x680c, 0xa08c, 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, - 0x6212, 0xd1e4, 0x0040, 0x66c0, 0x2009, 0x0001, 0x0078, 0x66c7, - 0xd1ec, 0x0040, 0x66cb, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, - 0x21d7, 0x0078, 0x66cf, 0xa085, 0x0001, 0x0078, 0x66d0, 0xa006, - 0x0d7f, 0x007c, 0x2069, 0x748d, 0x6800, 0xa082, 0x0010, 0x00c8, - 0x66df, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x66e0, 0xa006, - 0x007c, 0x6013, 0x0000, 0x2069, 0x748c, 0x6808, 0xa084, 0xff00, - 0xa086, 0x0800, 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x1288, - 0xa1b6, 0x0013, 0x00c0, 0x66f7, 0x2008, 0x0079, 0x670a, 0xa1b6, - 0x0027, 0x0040, 0x66ff, 0xa1b6, 0x0014, 0x10c0, 0x1288, 0x2001, - 0x0007, 0x1078, 0x34b0, 0x1078, 0x48be, 0x1078, 0x6457, 0x1078, - 0x49b7, 0x007c, 0x673a, 0x673c, 0x673a, 0x673a, 0x673a, 0x673c, - 0x6744, 0x67a7, 0x676a, 0x67a7, 0x677e, 0x67a7, 0x6744, 0x67a7, - 0x679f, 0x67a7, 0x679f, 0x67a7, 0x67a7, 0x673a, 0x673a, 0x673a, - 0x673a, 0x673a, 0x673a, 0x673a, 0x673a, 0x673a, 0x673a, 0x673a, - 0x673a, 0x673a, 0x67a7, 0x673a, 0x673a, 0x673a, 0x673a, 0x67a7, - 0x67a7, 0x673a, 0x673a, 0x673a, 0x673a, 0x67a7, 0x67a7, 0x673a, - 0x67a7, 0x67a7, 0x1078, 0x1288, 0x1078, 0x48be, 0x6003, 0x0002, - 0x1078, 0x49b7, 0x0078, 0x67ad, 0x0f7e, 0x2079, 0x7051, 0x7804, - 0x0f7f, 0xd0ac, 0x00c0, 0x67a7, 0x2001, 0x0000, 0x1078, 0x348e, - 0x2001, 0x0002, 0x1078, 0x34a2, 0x1078, 0x48be, 0x601f, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x45af, 0x1078, 0x49b7, - 0x0c7e, 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x42b7, 0x0c7f, - 0x0078, 0x67ad, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x67a7, 0xa686, 0x0004, - 0x0040, 0x67a7, 0x2001, 0x0004, 0x0078, 0x67a5, 0x2001, 0x7000, - 0x2004, 0xa086, 0x0003, 0x00c0, 0x6787, 0x1078, 0x2a92, 0x2001, - 0x0006, 0x1078, 0x67ae, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x67a7, 0x2001, - 0x0006, 0x0078, 0x67a5, 0x2001, 0x0004, 0x0078, 0x67a5, 0x2001, - 0x0006, 0x1078, 0x67ae, 0x0078, 0x67a7, 0x1078, 0x34b0, 0x1078, - 0x48be, 0x1078, 0x56f5, 0x1078, 0x49b7, 0x007c, 0x017e, 0x0d7e, - 0x6118, 0x2168, 0x6900, 0xd184, 0x0040, 0x67c9, 0x6104, 0xa18e, - 0x000a, 0x00c0, 0x67c1, 0x699c, 0xd1a4, 0x00c0, 0x67c1, 0x2001, - 0x0007, 0x1078, 0x34a2, 0x2001, 0x0000, 0x1078, 0x348e, 0x1078, - 0x21c6, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, - 0xa084, 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1288, - 0xa1b6, 0x0015, 0x00c0, 0x67e0, 0x1079, 0x67e7, 0x0078, 0x67e6, - 0xa1b6, 0x0016, 0x10c0, 0x1288, 0x1079, 0x6817, 0x007c, 0x594f, - 0x594f, 0x594f, 0x594f, 0x594f, 0x594f, 0x594f, 0x67f3, 0x594f, - 0x594f, 0x594f, 0x594f, 0x0f7e, 0x2079, 0x7051, 0x7804, 0x0f7f, - 0xd0ac, 0x00c0, 0x680f, 0x2001, 0x0000, 0x1078, 0x348e, 0x2001, - 0x0002, 0x1078, 0x34a2, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x45af, 0x1078, 0x49b7, 0x0078, 0x6816, 0x2011, - 0x7483, 0x220c, 0x1078, 0x32ed, 0x1078, 0x56f5, 0x007c, 0x594f, - 0x594f, 0x594f, 0x594f, 0x594f, 0x594f, 0x594f, 0x6823, 0x594f, - 0x594f, 0x594f, 0x594f, 0x1078, 0x5ad2, 0x00c0, 0x682f, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x45af, 0x0078, 0x6831, 0x1078, - 0x56f5, 0x007c, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1288, 0x1078, - 0x48be, 0x1078, 0x6457, 0x1078, 0x49b7, 0x007c, 0xa182, 0x0040, - 0x0079, 0x6842, 0x6852, 0x6852, 0x6852, 0x6852, 0x6854, 0x6852, - 0x6852, 0x6852, 0x6852, 0x6852, 0x6852, 0x6852, 0x6852, 0x6852, - 0x6852, 0x6852, 0x1078, 0x1288, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, - 0x047e, 0x027e, 0x6106, 0x2071, 0x7480, 0x7444, 0xa4a4, 0xe600, - 0x0040, 0x68b8, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4348, 0x2c68, - 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x6923, 0x1078, 0x4407, - 0x0040, 0x694e, 0xa295, 0x0200, 0x6a02, 0x0078, 0x687d, 0x2009, - 0x0001, 0x2011, 0x0200, 0x1078, 0x43f1, 0x1078, 0x12e2, 0x1040, - 0x1288, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, - 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, - 0x8007, 0x7130, 0x694a, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, - 0x6857, 0x0036, 0x1078, 0x3840, 0xa486, 0x2000, 0x00c0, 0x68a6, - 0x2019, 0x0017, 0x1078, 0x6e67, 0x0078, 0x6910, 0xa486, 0x0400, - 0x00c0, 0x68b0, 0x2019, 0x0002, 0x1078, 0x6e67, 0x0078, 0x6910, - 0xa486, 0x0200, 0x00c0, 0x68b6, 0x1078, 0x6e58, 0x0078, 0x6910, - 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4348, 0x2c68, 0x0c7f, 0x6a00, - 0xa284, 0x0001, 0x0040, 0x6966, 0xa284, 0x0300, 0x00c0, 0x695e, - 0x6804, 0xa005, 0x0040, 0x694e, 0x8001, 0x6806, 0x6003, 0x0007, - 0x1078, 0x12c7, 0x0040, 0x6917, 0x6013, 0x0000, 0x6803, 0x0000, + 0x126a, 0x1079, 0x5e8c, 0x007c, 0x5e9c, 0x5e9e, 0x5ebf, 0x5ed2, + 0x5ed2, 0x5e9c, 0x5e80, 0x5e80, 0x5e80, 0x5ed2, 0x5ed2, 0x5e9c, + 0x5e9c, 0x5e9c, 0x5e9c, 0x5edd, 0x1078, 0x126a, 0x0e7e, 0x6010, + 0x2070, 0x7050, 0xa085, 0x0040, 0x7052, 0x2071, 0x6db0, 0x7024, + 0xac06, 0x0040, 0x5ebb, 0x1078, 0x4eb5, 0x6007, 0x0085, 0x6003, + 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x42c4, 0x1078, + 0x4713, 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x5eb9, 0x0d7e, + 0x6010, 0x2068, 0x6850, 0xa085, 0x0040, 0x6852, 0x0d7f, 0x6007, + 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x42c4, 0x1078, + 0x4713, 0x007c, 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850, + 0xa085, 0x0040, 0x6852, 0x0d7f, 0x007c, 0x1078, 0x5425, 0x007c, + 0x6000, 0xa08a, 0x0010, 0x10c8, 0x126a, 0x1079, 0x5ee8, 0x007c, + 0x5ef8, 0x5e81, 0x5efa, 0x5ef8, 0x5ef8, 0x5ef8, 0x5ef8, 0x5ef8, + 0x5e80, 0x5e80, 0x5ef8, 0x5ef8, 0x5ef8, 0x5ef8, 0x5ef8, 0x5ef8, + 0x1078, 0x126a, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, + 0x0d7f, 0xa08a, 0x000c, 0x10c8, 0x126a, 0x1079, 0x5f08, 0x007c, + 0x5f14, 0x5f29, 0x5f14, 0x5f29, 0x5f14, 0x5f29, 0x5f16, 0x5f1f, + 0x5f14, 0x5f29, 0x5f14, 0x5f24, 0x1078, 0x126a, 0x6004, 0xa08e, + 0x0004, 0x0040, 0x5f26, 0xa08e, 0x0002, 0x0040, 0x5f26, 0x6004, + 0x1078, 0x6115, 0x0040, 0x5f6d, 0x1078, 0x2125, 0x1078, 0x5425, + 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040, 0x5f5d, + 0xa186, 0x0002, 0x00c0, 0x5f4e, 0x6018, 0x2068, 0x6840, 0xa084, + 0x00ff, 0xa005, 0x0040, 0x5f4e, 0x8001, 0x6842, 0x6013, 0x0000, + 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x53bf, 0x0040, 0x5f4e, + 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x5f5d, 0x0d7f, 0x0c7f, + 0x1078, 0x2125, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x2143, + 0x127f, 0x0e7f, 0x1078, 0x5425, 0x007c, 0x2001, 0x0002, 0x1078, + 0x3316, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4311, 0x1078, + 0x4713, 0x0d7f, 0x0c7f, 0x0078, 0x5f5c, 0x1078, 0x5614, 0x0078, + 0x5f26, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x126a, 0x1079, 0x5f79, + 0x007c, 0x5f89, 0x5f89, 0x5f89, 0x5f89, 0x5f89, 0x5f89, 0x5f89, + 0x5f89, 0x5f89, 0x5e80, 0x5f89, 0x5e81, 0x5f8b, 0x5e81, 0x5f94, + 0x5f89, 0x1078, 0x126a, 0x6007, 0x008b, 0x6003, 0x000d, 0x1078, + 0x42c4, 0x1078, 0x4713, 0x007c, 0x1078, 0x60db, 0x1078, 0x5fcd, + 0x0040, 0x5fb6, 0x1078, 0x2125, 0x0d7e, 0x1078, 0x5fcd, 0x0040, + 0x5fa9, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, + 0x35c4, 0x0d7f, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, + 0x1078, 0x4311, 0x1078, 0x4713, 0x0078, 0x5fb8, 0x1078, 0x5425, + 0x007c, 0xa284, 0x0007, 0x00c0, 0x5fca, 0xa282, 0x7200, 0x0048, + 0x5fca, 0x2001, 0x6c15, 0x2004, 0xa202, 0x00c8, 0x5fca, 0xa085, + 0x0001, 0x007c, 0xa006, 0x0078, 0x5fc9, 0x027e, 0x0e7e, 0x2071, + 0x6c00, 0x6210, 0x7058, 0xa202, 0x0048, 0x5fdf, 0x705c, 0xa202, + 0x00c8, 0x5fdf, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, 0xa006, + 0x0078, 0x5fdc, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2061, 0x7200, 0x2071, 0x6c00, 0x7344, 0x7060, 0xa302, + 0x00c8, 0x6002, 0x601c, 0xa206, 0x00c0, 0x5ffa, 0x0c7e, 0x1078, + 0x5425, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x6002, + 0x0078, 0x5fed, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, + 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x53bf, + 0x057f, 0x0040, 0x6021, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, + 0x004b, 0x1078, 0x544c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, + 0x007c, 0xa006, 0x0078, 0x601d, 0x0c7e, 0x057e, 0x127e, 0x2091, + 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x53bf, 0x057f, 0x0040, 0x604b, + 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, + 0x34f2, 0x0c7f, 0x1078, 0x43ff, 0x1078, 0x4344, 0x2c08, 0x1078, + 0x6946, 0x2009, 0x004c, 0x1078, 0x544c, 0xa085, 0x0001, 0x127f, + 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6047, 0x0c7e, 0x057e, + 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x53bf, 0x057f, + 0x0040, 0x6076, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, + 0x0c7e, 0x2560, 0x1078, 0x34f2, 0x0c7f, 0x1078, 0x43ff, 0x1078, + 0x4344, 0x2c08, 0x1078, 0x6946, 0x2009, 0x004d, 0x1078, 0x544c, + 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, + 0x6072, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, + 0x1078, 0x53bf, 0x057f, 0x0040, 0x60a1, 0x6612, 0x651a, 0x601f, + 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x34f2, 0x0c7f, + 0x1078, 0x43ff, 0x1078, 0x4344, 0x2c08, 0x1078, 0x6946, 0x2009, + 0x004e, 0x1078, 0x544c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, + 0x007c, 0xa006, 0x0078, 0x609d, 0x0c7e, 0x127e, 0x2091, 0x8000, + 0x0c7e, 0x1078, 0x53bf, 0x017f, 0x0040, 0x60bd, 0x660a, 0x611a, + 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x544c, + 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x60ba, + 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x53bf, 0x017f, + 0x0040, 0x60d8, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, + 0x0000, 0x1078, 0x544c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, + 0xa006, 0x0078, 0x60d5, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, + 0x82ff, 0x0040, 0x60e5, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, + 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, + 0x0c7e, 0x0d7e, 0x2031, 0x6c52, 0x2634, 0xd6e4, 0x0040, 0x60fd, + 0x6618, 0x2660, 0x6e44, 0x1078, 0x342a, 0x0d7f, 0x0c7f, 0x067f, + 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6112, + 0xa08e, 0x0003, 0x0040, 0x6112, 0xa08e, 0x0004, 0x0040, 0x6112, + 0xa085, 0x0001, 0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, + 0xa08e, 0x0000, 0x0040, 0x612a, 0xa08e, 0x001f, 0x0040, 0x612a, + 0xa08e, 0x0028, 0x0040, 0x612a, 0xa08e, 0x0029, 0x0040, 0x612a, + 0xa085, 0x0001, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, + 0x8000, 0x0c7e, 0x1078, 0x53bf, 0x017f, 0x0040, 0x6147, 0x611a, + 0x601f, 0x0001, 0x2d00, 0x6012, 0x1078, 0x2125, 0x2009, 0x0028, + 0x1078, 0x544c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, + 0x0078, 0x6144, 0xa186, 0x0015, 0x00c0, 0x615f, 0x2011, 0x6c1c, + 0x2204, 0xa086, 0x0074, 0x00c0, 0x615f, 0x1078, 0x57f7, 0x6003, + 0x0001, 0x6007, 0x0029, 0x1078, 0x4311, 0x0078, 0x6163, 0x1078, + 0x5614, 0x1078, 0x5425, 0x007c, 0xa186, 0x0015, 0x00c0, 0x6181, + 0x2011, 0x6c1c, 0x2204, 0xa086, 0x0014, 0x00c0, 0x6181, 0x0d7e, + 0x6018, 0x2068, 0x1078, 0x33ed, 0x0d7f, 0x1078, 0x5801, 0x00c0, + 0x6181, 0x2001, 0x0006, 0x1078, 0x3316, 0x1078, 0x54cf, 0x0078, + 0x6185, 0x1078, 0x5614, 0x1078, 0x5425, 0x007c, 0x067e, 0x6000, + 0xa0b2, 0x0010, 0x10c8, 0x126a, 0x1079, 0x6190, 0x067f, 0x007c, + 0x61a0, 0x6312, 0x63ed, 0x61a0, 0x61a0, 0x61a0, 0x61a0, 0x61a0, + 0x61da, 0x6453, 0x61a0, 0x61a0, 0x61a0, 0x61a0, 0x61a0, 0x61a0, + 0x1078, 0x126a, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x126a, + 0x1079, 0x61ac, 0x067f, 0x007c, 0x61bc, 0x675b, 0x61bc, 0x61bc, + 0x61bc, 0x61bc, 0x61bc, 0x61bc, 0x6736, 0x67a5, 0x61bc, 0x61bc, + 0x61bc, 0x61bc, 0x61bc, 0x61bc, 0x1078, 0x126a, 0x067e, 0x6000, + 0xa0b2, 0x0010, 0x10c8, 0x126a, 0x1079, 0x61c8, 0x067f, 0x007c, + 0x61d8, 0x65a5, 0x6617, 0x6639, 0x6687, 0x61d8, 0x61d8, 0x66e1, + 0x645f, 0x671e, 0x6722, 0x61d8, 0x61d8, 0x61d8, 0x61d8, 0x61d8, + 0x1078, 0x126a, 0xa1b2, 0x002a, 0x10c8, 0x126a, 0x2100, 0x0079, + 0x61e1, 0x620b, 0x62e8, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, + 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, + 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, 0x620b, + 0x620d, 0x623c, 0x6247, 0x626f, 0x6275, 0x62a9, 0x62e1, 0x620b, + 0x620b, 0x62f0, 0x620b, 0x620b, 0x620b, 0x62f7, 0x620b, 0x620b, + 0x620b, 0x620b, 0x620b, 0x1078, 0x126a, 0x1078, 0x3570, 0x6618, + 0x0c7e, 0x2660, 0x1078, 0x337c, 0x0c7f, 0xa6b0, 0x0001, 0x2634, + 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x622e, 0x1078, 0x6885, + 0x00c0, 0x6269, 0x1078, 0x6823, 0x00c0, 0x622a, 0x6007, 0x0008, + 0x0078, 0x62e3, 0x6007, 0x0009, 0x0078, 0x62e3, 0x1078, 0x6a15, + 0x0040, 0x6238, 0x1078, 0x6885, 0x0040, 0x6222, 0x0078, 0x6269, + 0x6013, 0x1900, 0x0078, 0x622a, 0x6106, 0x1078, 0x67e6, 0x6007, + 0x0006, 0x0078, 0x62e3, 0x6007, 0x0007, 0x0078, 0x62e3, 0x0d7e, + 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, + 0x0040, 0x6259, 0xa686, 0x0004, 0x0040, 0x6259, 0x0d7f, 0x0078, + 0x6269, 0x1078, 0x68e3, 0x00c0, 0x6264, 0x1078, 0x33ed, 0x6007, + 0x000a, 0x0d7f, 0x0078, 0x62e3, 0x6007, 0x000b, 0x0d7f, 0x0078, + 0x62e3, 0x1078, 0x2125, 0x6007, 0x0001, 0x0078, 0x62e3, 0x1078, + 0x2125, 0x6007, 0x000c, 0x0078, 0x62e3, 0x1078, 0x3570, 0x6618, + 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, + 0x6296, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6269, + 0x1078, 0x68f2, 0x00c0, 0x6290, 0x6007, 0x000e, 0x0078, 0x62e3, + 0x1078, 0x2125, 0x6007, 0x000f, 0x0078, 0x62e3, 0x1078, 0x6a15, + 0x0040, 0x62a3, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, + 0x6288, 0x0078, 0x6269, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, + 0x62e3, 0x1078, 0x3570, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, + 0x00ff, 0xa082, 0x0006, 0x0048, 0x62ce, 0xa6b4, 0xff00, 0x8637, + 0xa686, 0x0006, 0x00c0, 0x6269, 0x1078, 0x691e, 0x00c0, 0x62c8, + 0x1078, 0x6823, 0x00c0, 0x62c8, 0x6007, 0x0010, 0x0078, 0x62e3, + 0x1078, 0x2125, 0x6007, 0x0011, 0x0078, 0x62e3, 0x1078, 0x6a15, + 0x0040, 0x62db, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, + 0x62bc, 0x0078, 0x6269, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, + 0x62e3, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x4311, 0x007c, + 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x4311, 0x0078, 0x62e7, + 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x4311, 0x007c, 0x017e, + 0x027e, 0x2011, 0x7088, 0x2214, 0x2c08, 0x1078, 0x6add, 0x00c0, + 0x6308, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x630b, + 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x4311, 0x027f, + 0x017f, 0x007c, 0x6004, 0xa0b2, 0x002a, 0x10c8, 0x126a, 0xa1b6, + 0x0013, 0x00c0, 0x631e, 0x2008, 0x0079, 0x6331, 0xa1b6, 0x0027, + 0x0040, 0x6326, 0xa1b6, 0x0014, 0x10c0, 0x126a, 0x2001, 0x0007, + 0x1078, 0x3324, 0x1078, 0x461a, 0x1078, 0x60e8, 0x1078, 0x4713, + 0x007c, 0x635b, 0x635d, 0x635b, 0x635b, 0x635b, 0x635d, 0x6365, + 0x63c8, 0x638b, 0x63c8, 0x639f, 0x63c8, 0x6365, 0x63c8, 0x63c0, + 0x63c8, 0x63c0, 0x63c8, 0x63c8, 0x635b, 0x635b, 0x635b, 0x635b, + 0x635b, 0x635b, 0x635b, 0x635b, 0x635b, 0x635b, 0x635b, 0x635b, + 0x635b, 0x63c8, 0x635b, 0x635b, 0x635b, 0x635b, 0x63c8, 0x63c8, + 0x635b, 0x635b, 0x635b, 0x1078, 0x126a, 0x1078, 0x461a, 0x6003, + 0x0002, 0x1078, 0x4713, 0x0078, 0x63ce, 0x0f7e, 0x2079, 0x6c51, + 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x63c8, 0x2001, 0x0000, 0x1078, + 0x3302, 0x2001, 0x0002, 0x1078, 0x3316, 0x1078, 0x461a, 0x601f, + 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4311, 0x1078, + 0x4713, 0x0c7e, 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x4033, + 0x0c7f, 0x0078, 0x63ce, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, + 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x63c8, 0xa686, + 0x0004, 0x0040, 0x63c8, 0x2001, 0x0004, 0x0078, 0x63c6, 0x2001, + 0x6c00, 0x2004, 0xa086, 0x0003, 0x00c0, 0x63a8, 0x1078, 0x29a0, + 0x2001, 0x0006, 0x1078, 0x63cf, 0x6618, 0x0d7e, 0x2668, 0x6e04, + 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x63c8, + 0x2001, 0x0006, 0x0078, 0x63c6, 0x2001, 0x0004, 0x0078, 0x63c6, + 0x2001, 0x0006, 0x1078, 0x63cf, 0x0078, 0x63c8, 0x1078, 0x3324, + 0x1078, 0x461a, 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0x017e, + 0x0d7e, 0x6118, 0x2168, 0x6900, 0xd184, 0x0040, 0x63ea, 0x6104, + 0xa18e, 0x000a, 0x00c0, 0x63e2, 0x699c, 0xd1a4, 0x00c0, 0x63e2, + 0x2001, 0x0007, 0x1078, 0x3316, 0x2001, 0x0000, 0x1078, 0x3302, + 0x1078, 0x2143, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, + 0x6804, 0xa084, 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, + 0x126a, 0xa1b6, 0x0015, 0x00c0, 0x6401, 0x1079, 0x6408, 0x0078, + 0x6407, 0xa1b6, 0x0016, 0x10c0, 0x126a, 0x1079, 0x6438, 0x007c, + 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x6414, + 0x5671, 0x5671, 0x5671, 0x5671, 0x0f7e, 0x2079, 0x6c51, 0x7804, + 0x0f7f, 0xd0ac, 0x00c0, 0x6430, 0x2001, 0x0000, 0x1078, 0x3302, + 0x2001, 0x0002, 0x1078, 0x3316, 0x601f, 0x0001, 0x6003, 0x0001, + 0x6007, 0x0002, 0x1078, 0x4311, 0x1078, 0x4713, 0x0078, 0x6437, + 0x2011, 0x7083, 0x220c, 0x1078, 0x316e, 0x1078, 0x5425, 0x007c, + 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x5671, 0x6444, + 0x5671, 0x5671, 0x5671, 0x5671, 0x1078, 0x57f4, 0x00c0, 0x6450, + 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4311, 0x0078, 0x6452, + 0x1078, 0x5425, 0x007c, 0x6004, 0xa08a, 0x002a, 0x10c8, 0x126a, + 0x1078, 0x461a, 0x1078, 0x60e8, 0x1078, 0x4713, 0x007c, 0xa182, + 0x0040, 0x0079, 0x6463, 0x6473, 0x6473, 0x6473, 0x6473, 0x6475, + 0x6473, 0x6473, 0x6473, 0x6473, 0x6473, 0x6473, 0x6473, 0x6473, + 0x6473, 0x6473, 0x6473, 0x1078, 0x126a, 0x0d7e, 0x0e7e, 0x0f7e, + 0x157e, 0x047e, 0x027e, 0x2071, 0x7080, 0x7444, 0xa4a4, 0xe600, + 0x0040, 0x64e6, 0xa486, 0x2000, 0x0040, 0x64a4, 0xa486, 0x0400, + 0x0040, 0x64a4, 0x7130, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, + 0x6579, 0x0c7e, 0x1078, 0x40c4, 0x2c68, 0x0c7f, 0x6a00, 0xa284, + 0x0001, 0x0040, 0x655a, 0x1078, 0x4182, 0x0040, 0x6585, 0xa295, + 0x0200, 0x6a02, 0x0078, 0x64aa, 0x2009, 0x0001, 0x2011, 0x0200, + 0x1078, 0x416c, 0x1078, 0x12c2, 0x1040, 0x126a, 0x6003, 0x0007, + 0x6106, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, + 0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, + 0xa18c, 0x00ff, 0xa10d, 0x6946, 0x684f, 0x0000, 0x6857, 0x0036, + 0x1078, 0x35c4, 0xa486, 0x2000, 0x00c0, 0x64d4, 0x2019, 0x0017, + 0x1078, 0x6aa2, 0x0078, 0x6547, 0xa486, 0x0400, 0x00c0, 0x64de, + 0x2019, 0x0002, 0x1078, 0x6aa2, 0x0078, 0x6547, 0xa486, 0x0200, + 0x00c0, 0x64e4, 0x1078, 0x6a93, 0x0078, 0x6547, 0x7130, 0xa184, + 0xff00, 0x00c0, 0x659d, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, + 0x659d, 0x0c7e, 0x1078, 0x40c4, 0x2c68, 0x0c7f, 0x6a00, 0xa284, + 0x0001, 0x0040, 0x65a1, 0xa284, 0x0300, 0x00c0, 0x6599, 0x6804, + 0xa005, 0x0040, 0x6585, 0x8001, 0x6806, 0x6003, 0x0007, 0x6106, + 0x1078, 0x12a7, 0x0040, 0x654e, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, - 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7044, - 0xa084, 0x0003, 0xa086, 0x0002, 0x00c0, 0x68f2, 0x684f, 0x0040, - 0x0078, 0x68fc, 0xa086, 0x0001, 0x00c0, 0x68fa, 0x684f, 0x0080, - 0x0078, 0x68fc, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x7490, - 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, - 0x6902, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x3840, - 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, - 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4562, 0x1078, - 0x49b7, 0x0078, 0x6910, 0x2069, 0x7492, 0x2d04, 0xa084, 0xff00, - 0xa086, 0x1200, 0x00c0, 0x6942, 0x2069, 0x7480, 0x686c, 0xa084, - 0x00ff, 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, - 0x6003, 0x0001, 0x6007, 0x0043, 0x1078, 0x4562, 0x1078, 0x49b7, - 0x0078, 0x6910, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, - 0x1078, 0x4562, 0x1078, 0x49b7, 0x0078, 0x6910, 0x6013, 0x0300, - 0x0078, 0x6954, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, - 0x1078, 0x4562, 0x1078, 0x49b7, 0x0078, 0x6910, 0x6013, 0x0500, - 0x0078, 0x6954, 0x6013, 0x0600, 0x0078, 0x6923, 0x6013, 0x0200, - 0x0078, 0x6923, 0xa186, 0x0013, 0x00c0, 0x697c, 0x6004, 0xa08a, - 0x0040, 0x1048, 0x1288, 0xa08a, 0x0050, 0x10c8, 0x1288, 0xa082, - 0x0040, 0x2008, 0x0079, 0x69ad, 0xa186, 0x0047, 0x00c0, 0x6982, - 0x0078, 0x69dc, 0xa186, 0x0027, 0x0040, 0x698a, 0xa186, 0x0014, - 0x10c0, 0x1288, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079, 0x6990, - 0x69a0, 0x69a2, 0x69a2, 0x69a0, 0x69a0, 0x69a0, 0x69a0, 0x69a0, - 0x69a0, 0x69a0, 0x69a0, 0x69a0, 0x69a0, 0x69a0, 0x69a0, 0x69a0, - 0x1078, 0x1288, 0x2001, 0x0007, 0x1078, 0x34b0, 0x1078, 0x48be, - 0x1078, 0x6457, 0x1078, 0x49b7, 0x007c, 0x69bd, 0x69cd, 0x69c6, - 0x69d6, 0x69bd, 0x69bd, 0x69bd, 0x69bd, 0x69bd, 0x69bd, 0x69bd, - 0x69bd, 0x69bd, 0x69bd, 0x69bd, 0x69bd, 0x1078, 0x1288, 0x6010, - 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x48be, - 0x6003, 0x0002, 0x1078, 0x49b7, 0x007c, 0x1078, 0x48be, 0x1078, - 0x43c9, 0x1078, 0x56f5, 0x1078, 0x49b7, 0x007c, 0x1078, 0x48be, - 0x2009, 0x0041, 0x0078, 0x6aa4, 0xa182, 0x0040, 0x0079, 0x69e0, - 0x69f0, 0x69f2, 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f3, - 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f0, 0x69f0, - 0x1078, 0x1288, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, - 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, 0x007c, 0xa182, 0x0040, - 0x0079, 0x6a02, 0x6a12, 0x6a12, 0x6a12, 0x6a12, 0x6a12, 0x6a12, - 0x6a12, 0x6a12, 0x6a12, 0x6a14, 0x6a37, 0x6a12, 0x6a12, 0x6a12, - 0x6a12, 0x6a37, 0x1078, 0x1288, 0x1078, 0x4966, 0x1078, 0x4a67, - 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x6a2a, 0xa08c, - 0x0003, 0xa18e, 0x0002, 0x0040, 0x6a30, 0x2009, 0x0041, 0x0d7f, - 0x0078, 0x6aa4, 0x6003, 0x0007, 0x1078, 0x43c9, 0x0d7f, 0x007c, - 0x1078, 0x43c9, 0x1078, 0x56f5, 0x0d7f, 0x0078, 0x6a2f, 0x037e, - 0x1078, 0x4966, 0x1078, 0x4a67, 0x6010, 0x0d7e, 0x2068, 0x2019, - 0x0004, 0x1078, 0x6e8b, 0x1078, 0x6457, 0x6017, 0x0028, 0x0d7f, - 0x037f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x6a58, 0x6004, 0xa086, - 0x0042, 0x10c0, 0x1288, 0x1078, 0x48be, 0x1078, 0x49b7, 0x007c, - 0xa186, 0x0027, 0x0040, 0x6a60, 0xa186, 0x0014, 0x00c0, 0x6a70, - 0x6004, 0xa086, 0x0042, 0x10c0, 0x1288, 0x2001, 0x0007, 0x1078, - 0x34b0, 0x1078, 0x48be, 0x1078, 0x6457, 0x1078, 0x49b7, 0x007c, - 0xa182, 0x0040, 0x0079, 0x6a74, 0x6a84, 0x6a84, 0x6a84, 0x6a84, - 0x6a84, 0x6a84, 0x6a84, 0x6a86, 0x6a92, 0x6a84, 0x6a84, 0x6a84, - 0x6a84, 0x6a84, 0x6a84, 0x6a84, 0x1078, 0x1288, 0x037e, 0x047e, - 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1525, 0x047f, - 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, - 0x6a9e, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x6aa4, 0x6003, 0x0007, - 0x1078, 0x43c9, 0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, 0x6aa8, - 0x6ab8, 0x6aba, 0x6ac6, 0x6ad2, 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, - 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, 0x6ab8, - 0x1078, 0x1288, 0x6003, 0x0001, 0x6106, 0x1078, 0x4562, 0x127e, - 0x2091, 0x8000, 0x1078, 0x49b7, 0x127f, 0x007c, 0x6003, 0x0001, - 0x6106, 0x1078, 0x4562, 0x127e, 0x2091, 0x8000, 0x1078, 0x49b7, - 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, 0x1936, - 0x127e, 0x2091, 0x8000, 0x1078, 0x45ce, 0x1078, 0x4a67, 0x127f, - 0x007c, 0x1078, 0x48be, 0x0078, 0x6ae7, 0x1078, 0x4966, 0x6110, - 0x81ff, 0x0040, 0x6af4, 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, - 0x1078, 0x6e8b, 0x037f, 0x0d7f, 0x1078, 0x6457, 0x1078, 0x49b7, - 0x007c, 0xa182, 0x0085, 0x0079, 0x6afd, 0x6b04, 0x6b04, 0x6b04, - 0x6b06, 0x6b04, 0x6b04, 0x6b04, 0x1078, 0x1288, 0x027e, 0x0e7e, - 0x2071, 0x7480, 0x7220, 0x1078, 0x6da5, 0x0040, 0x6b13, 0x6007, - 0x0086, 0x0078, 0x6b15, 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, - 0x4562, 0x1078, 0x49b7, 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, - 0x00c0, 0x6b2f, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1288, 0xa08a, - 0x008c, 0x10c8, 0x1288, 0xa082, 0x0085, 0x0079, 0x6b42, 0xa186, - 0x0027, 0x0040, 0x6b37, 0xa186, 0x0014, 0x10c0, 0x1288, 0x2001, - 0x0007, 0x1078, 0x34b0, 0x1078, 0x48be, 0x1078, 0x6457, 0x1078, - 0x49b7, 0x007c, 0x6b49, 0x6b4b, 0x6b4b, 0x6b49, 0x6b49, 0x6b49, - 0x6b49, 0x1078, 0x1288, 0x1078, 0x48be, 0x1078, 0x56f5, 0x1078, - 0x49b7, 0x007c, 0xa182, 0x0085, 0x1048, 0x1288, 0xa182, 0x008c, - 0x10c8, 0x1288, 0xa182, 0x0085, 0x0079, 0x6b5e, 0x6b65, 0x6b65, - 0x6b65, 0x6b67, 0x6b65, 0x6b65, 0x6b65, 0x1078, 0x1288, 0x007c, - 0x1078, 0x48be, 0x1078, 0x6457, 0x1078, 0x49b7, 0x007c, 0x037e, - 0x2019, 0x000b, 0x1078, 0x6b78, 0x601f, 0x0006, 0x037f, 0x007c, - 0x127e, 0x037e, 0x087e, 0x2091, 0x8000, 0x2c40, 0x1078, 0x5408, - 0x00c0, 0x6ba5, 0x1078, 0x54a9, 0x00c0, 0x6ba5, 0x6000, 0xa086, - 0x0000, 0x0040, 0x6ba5, 0x601c, 0xa086, 0x0007, 0x0040, 0x6ba5, - 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6b98, 0x1078, 0x1629, - 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x6ba0, 0x1078, 0x6e8b, - 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, - 0x007c, 0x0f7e, 0x0c7e, 0x037e, 0x157e, 0x2079, 0x7480, 0x7838, - 0xa084, 0x00ff, 0xa005, 0x00c0, 0x6be1, 0x783c, 0x1078, 0x1fe4, - 0x017e, 0x0c7e, 0x1078, 0x34fa, 0x00c0, 0x6bdf, 0x2011, 0x7490, - 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5b6b, 0x00c0, 0x6bdf, - 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x557d, - 0x1078, 0x469f, 0x1078, 0x45e2, 0x017f, 0x1078, 0x6d09, 0x1078, - 0x36e4, 0x017f, 0x1078, 0x32ed, 0xa006, 0x0078, 0x6be1, 0x0c7f, - 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, - 0x017e, 0x2009, 0x701c, 0x2104, 0xa086, 0x0074, 0x00c0, 0x6c3d, - 0x2069, 0x748e, 0x690c, 0xa182, 0x0100, 0x0048, 0x6c2d, 0x6908, - 0xa184, 0x8000, 0x0040, 0x6c39, 0xa184, 0x0800, 0x0040, 0x6c39, - 0x6910, 0xa18a, 0x0001, 0x0048, 0x6c31, 0x6914, 0x2069, 0x74ae, - 0x6904, 0x81ff, 0x00c0, 0x6c25, 0x690c, 0xa182, 0x0100, 0x0048, - 0x6c2d, 0x6908, 0x81ff, 0x00c0, 0x6c29, 0x6910, 0xa18a, 0x0001, - 0x0048, 0x6c31, 0x6918, 0xa18a, 0x0001, 0x0048, 0x6c39, 0x0078, - 0x6c43, 0x6013, 0x0100, 0x0078, 0x6c3f, 0x6013, 0x0300, 0x0078, - 0x6c3f, 0x6013, 0x0500, 0x0078, 0x6c3f, 0x6013, 0x0700, 0x0078, - 0x6c3f, 0x6013, 0x0900, 0x0078, 0x6c3f, 0x6013, 0x0b00, 0x0078, - 0x6c3f, 0x6013, 0x0f00, 0x0078, 0x6c3f, 0x6013, 0x2d00, 0xa085, - 0x0001, 0x0078, 0x6c44, 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, - 0x0c7e, 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, - 0xa394, 0x00ff, 0xa286, 0x0006, 0x0040, 0x6c6c, 0xa286, 0x0004, - 0x0040, 0x6c6c, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, - 0x6c6c, 0xa286, 0x0004, 0x0040, 0x6c6c, 0x0c7e, 0x2d60, 0x1078, - 0x350c, 0x0c7f, 0x0078, 0x6c9f, 0x2011, 0x7496, 0xad98, 0x000a, - 0x20a9, 0x0004, 0x1078, 0x5b6b, 0x00c0, 0x6ca0, 0x2011, 0x749a, - 0xad98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x5b6b, 0x00c0, 0x6ca0, - 0x047e, 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, - 0x7052, 0x210c, 0xd1a4, 0x0040, 0x6c94, 0x2009, 0x0029, 0x1078, - 0x6ecf, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x469f, - 0x1078, 0x45e2, 0x2c08, 0x1078, 0x6d09, 0x017f, 0x047f, 0xa006, - 0x157f, 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, - 0x748e, 0x6800, 0xa086, 0x0800, 0x0040, 0x6cb2, 0x6013, 0x0000, - 0x0078, 0x6cb3, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, - 0x027e, 0x037e, 0x157e, 0x2079, 0x748c, 0x7830, 0xa00d, 0x00c0, - 0x6cda, 0x7834, 0x1078, 0x1fe4, 0x1078, 0x34fa, 0x00c0, 0x6cda, - 0x2011, 0x7490, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5b6b, - 0x00c0, 0x6cda, 0x2011, 0x7494, 0xac98, 0x0006, 0x20a9, 0x0004, - 0x1078, 0x5b6b, 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, - 0x007c, 0x0c7e, 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, - 0x7483, 0x2204, 0x1078, 0x1fe4, 0x1078, 0x34fa, 0x00c0, 0x6d02, - 0x2011, 0x7496, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5b6b, - 0x00c0, 0x6d02, 0x2011, 0x749a, 0xac98, 0x0006, 0x20a9, 0x0004, - 0x1078, 0x5b6b, 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, - 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, - 0x127e, 0x2091, 0x8000, 0x2029, 0x71bf, 0x252c, 0x2021, 0x71c5, - 0x2424, 0x2061, 0x7600, 0x2071, 0x7000, 0x7644, 0x7060, 0x8001, - 0xa602, 0x00c8, 0x6d6e, 0x2100, 0xac06, 0x0040, 0x6d64, 0x1078, - 0x6ee7, 0x0040, 0x6d64, 0x671c, 0xa786, 0x0001, 0x0040, 0x6d83, - 0xa786, 0x0007, 0x0040, 0x6d64, 0x2500, 0xac06, 0x0040, 0x6d64, - 0x2400, 0xac06, 0x0040, 0x6d64, 0x1078, 0x6efb, 0x00c0, 0x6d64, - 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6d4a, 0x017e, 0x1078, - 0x1629, 0x017f, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x6d61, - 0xa786, 0x0003, 0x00c0, 0x6d77, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x017e, 0x1078, 0x64f5, 0x1078, 0x3840, 0x017f, 0x1078, - 0x644a, 0x0d7f, 0x1078, 0x6457, 0xace0, 0x0008, 0x2001, 0x7015, - 0x2004, 0xac02, 0x00c8, 0x6d6e, 0x0078, 0x6d1b, 0x127f, 0x027f, - 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, - 0x0006, 0x00c0, 0x6d54, 0xa386, 0x0005, 0x0040, 0x6d64, 0x1078, - 0x6e8b, 0x0078, 0x6d61, 0x1078, 0x6efb, 0x00c0, 0x6d64, 0xa180, - 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x6d64, 0x6000, 0xa086, - 0x0002, 0x00c0, 0x6d64, 0x1078, 0x6470, 0x0040, 0x6d9f, 0x1078, - 0x6484, 0x00c0, 0x6d64, 0x1078, 0x58f2, 0x0078, 0x6da1, 0x1078, - 0x21c6, 0x1078, 0x6457, 0x0078, 0x6d64, 0x0c7e, 0x0e7e, 0x017e, - 0x2c08, 0x2170, 0x1078, 0x6ea2, 0x017f, 0x0040, 0x6db4, 0x601c, - 0xa084, 0x0007, 0x1079, 0x6db7, 0x0e7f, 0x0c7f, 0x007c, 0x6dbf, - 0x6dbf, 0x6dbf, 0x6dbf, 0x6dbf, 0x6dbf, 0x6dc1, 0x6dbf, 0xa006, - 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, - 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078, 0x6ecf, 0x017f, - 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x6b78, 0x037f, 0xa085, - 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x348e, 0x157e, 0x017e, - 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x7005, 0x2011, 0x7496, - 0x1078, 0x5b6b, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, - 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x7600, 0x2079, 0x0001, 0x8fff, 0x0040, 0x6e4b, - 0x2071, 0x7000, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x6e4b, - 0x88ff, 0x0040, 0x6e11, 0x2800, 0xac06, 0x00c0, 0x6e41, 0x2079, - 0x0000, 0x1078, 0x6ee7, 0x0040, 0x6e41, 0x2400, 0xac06, 0x0040, - 0x6e41, 0x671c, 0xa786, 0x0006, 0x00c0, 0x6e41, 0xa786, 0x0007, - 0x0040, 0x6e41, 0x88ff, 0x00c0, 0x6e29, 0x6018, 0xa206, 0x00c0, - 0x6e41, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6e31, 0x1078, - 0x1629, 0x6010, 0x2068, 0x1078, 0x6336, 0x0040, 0x6e3b, 0x047e, - 0x1078, 0x6e8b, 0x047f, 0x0d7f, 0x1078, 0x6457, 0x88ff, 0x00c0, - 0x6e54, 0xace0, 0x0008, 0x2001, 0x7015, 0x2004, 0xac02, 0x00c8, - 0x6e4b, 0x0078, 0x6dfd, 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, - 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, 0x6e4c, - 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, - 0x5408, 0x1078, 0x54a9, 0x1078, 0x6df0, 0x087f, 0x007c, 0x027e, - 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007e, 0x2009, - 0x0000, 0x017e, 0x037e, 0x1078, 0x34fa, 0x00c0, 0x6e80, 0x2c10, - 0x2041, 0x0000, 0x1078, 0x5408, 0x1078, 0x54a9, 0x1078, 0x6df0, - 0x037f, 0x017f, 0x8108, 0x00f0, 0x6e71, 0x157f, 0x0c7f, 0x087f, - 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x6e9f, - 0x6800, 0xa07d, 0x0040, 0x6e9c, 0x6803, 0x0000, 0x6b52, 0x1078, - 0x3840, 0x2f68, 0x0078, 0x6e90, 0x6b52, 0x1078, 0x3840, 0x0f7f, - 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x7600, 0x2071, - 0x7000, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x6eca, 0x2100, - 0xac06, 0x0040, 0x6ebc, 0x6000, 0xa086, 0x0000, 0x0040, 0x6ebc, - 0x6008, 0xa206, 0x0040, 0x6ec6, 0xace0, 0x0008, 0x2001, 0x7015, - 0x2004, 0xac02, 0x00c8, 0x6eca, 0x0078, 0x6ea7, 0xa085, 0x0001, - 0x0078, 0x6ecb, 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, - 0x007e, 0x1078, 0x12e2, 0x007f, 0x1040, 0x1288, 0x6837, 0x010d, - 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, - 0x6c46, 0x684f, 0x0000, 0x1078, 0x3840, 0x0d7f, 0x007c, 0x6700, - 0xa786, 0x0000, 0x0040, 0x6efa, 0xa786, 0x0001, 0x0040, 0x6efa, - 0xa786, 0x000a, 0x0040, 0x6efa, 0xa786, 0x0009, 0x0040, 0x6efa, - 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, - 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, - 0x7040, 0xd5a4, 0x0040, 0x6f0f, 0x7034, 0x8000, 0x7036, 0xd5b4, - 0x0040, 0x6f15, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x6f1c, - 0x2071, 0x704a, 0x1078, 0x6f4b, 0x0e7f, 0x007f, 0x127f, 0x007c, - 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7040, 0xd5a4, - 0x0040, 0x6f2d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x6f33, - 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x6f3a, 0x2071, 0x704a, - 0x1078, 0x6f4b, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, - 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7042, 0x1078, 0x6f4b, 0x0e7f, - 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0x6f54, - 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0x7040, - 0x1078, 0x6f4b, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7044, 0x1078, - 0x6f4b, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, - 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, - 0x2000, 0x4000, 0x8000, 0xd13b + 0x78a0, 0x8007, 0xa10d, 0x6946, 0x6853, 0x003d, 0x7044, 0xa084, + 0x0003, 0xa086, 0x0002, 0x00c0, 0x6529, 0x684f, 0x0040, 0x0078, + 0x6533, 0xa086, 0x0001, 0x00c0, 0x6531, 0x684f, 0x0080, 0x0078, + 0x6533, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x7090, 0xad90, + 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x6539, + 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x35c4, 0x027f, + 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, + 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x42c4, 0x1078, 0x4713, + 0x0078, 0x6547, 0x2069, 0x7092, 0x2d04, 0xa084, 0xff00, 0xa086, + 0x1200, 0x00c0, 0x6579, 0x2069, 0x7080, 0x686c, 0xa084, 0x00ff, + 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, + 0x0001, 0x6007, 0x0043, 0x1078, 0x42c4, 0x1078, 0x4713, 0x0078, + 0x6547, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, + 0x42c4, 0x1078, 0x4713, 0x0078, 0x6547, 0xa284, 0x0004, 0x00c0, + 0x658d, 0x6013, 0x0300, 0x0078, 0x658f, 0x6013, 0x0100, 0x6003, + 0x0001, 0x6007, 0x0041, 0x1078, 0x42c4, 0x1078, 0x4713, 0x0078, + 0x6547, 0x6013, 0x0500, 0x0078, 0x658f, 0x6013, 0x0600, 0x0078, + 0x655a, 0x6013, 0x0200, 0x0078, 0x655a, 0xa186, 0x0013, 0x00c0, + 0x65b7, 0x6004, 0xa08a, 0x0040, 0x1048, 0x126a, 0xa08a, 0x0050, + 0x10c8, 0x126a, 0xa082, 0x0040, 0x2008, 0x0079, 0x65e8, 0xa186, + 0x0047, 0x00c0, 0x65bd, 0x0078, 0x6617, 0xa186, 0x0027, 0x0040, + 0x65c5, 0xa186, 0x0014, 0x10c0, 0x126a, 0x6004, 0xa082, 0x0040, + 0x2008, 0x0079, 0x65cb, 0x65db, 0x65dd, 0x65dd, 0x65db, 0x65db, + 0x65db, 0x65db, 0x65db, 0x65db, 0x65db, 0x65db, 0x65db, 0x65db, + 0x65db, 0x65db, 0x65db, 0x1078, 0x126a, 0x2001, 0x0007, 0x1078, + 0x3324, 0x1078, 0x461a, 0x1078, 0x60e8, 0x1078, 0x4713, 0x007c, + 0x65f8, 0x6608, 0x6601, 0x6611, 0x65f8, 0x65f8, 0x65f8, 0x65f8, + 0x65f8, 0x65f8, 0x65f8, 0x65f8, 0x65f8, 0x65f8, 0x65f8, 0x65f8, + 0x1078, 0x126a, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, + 0x200a, 0x1078, 0x461a, 0x6003, 0x0002, 0x1078, 0x4713, 0x007c, + 0x1078, 0x461a, 0x1078, 0x4145, 0x1078, 0x5425, 0x1078, 0x4713, + 0x007c, 0x1078, 0x461a, 0x2009, 0x0041, 0x0078, 0x66e1, 0xa182, + 0x0040, 0x0079, 0x661b, 0x662b, 0x662d, 0x662b, 0x662b, 0x662b, + 0x662b, 0x662b, 0x662e, 0x662b, 0x662b, 0x662b, 0x662b, 0x662b, + 0x662b, 0x662b, 0x662b, 0x1078, 0x126a, 0x007c, 0x6003, 0x0004, + 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1505, + 0x007c, 0xa182, 0x0040, 0x0079, 0x663d, 0x664d, 0x664d, 0x664d, + 0x664d, 0x664d, 0x664d, 0x664d, 0x664d, 0x664d, 0x664f, 0x6672, + 0x664d, 0x664d, 0x664d, 0x664d, 0x6672, 0x1078, 0x126a, 0x1078, + 0x46c2, 0x1078, 0x47c3, 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, + 0x0040, 0x6665, 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0040, 0x666b, + 0x2009, 0x0041, 0x0d7f, 0x0078, 0x66e1, 0x6003, 0x0007, 0x1078, + 0x4145, 0x0d7f, 0x007c, 0x1078, 0x4145, 0x1078, 0x5425, 0x0d7f, + 0x0078, 0x666a, 0x2001, 0x0007, 0x1078, 0x3324, 0x1078, 0x46c2, + 0x1078, 0x47c3, 0x6010, 0x0d7e, 0x2068, 0x037e, 0x2019, 0x0004, + 0x1078, 0x6ac6, 0x037f, 0x1078, 0x60e8, 0x0d7f, 0x007c, 0xa186, + 0x0013, 0x00c0, 0x6695, 0x6004, 0xa086, 0x0042, 0x10c0, 0x126a, + 0x1078, 0x461a, 0x1078, 0x4713, 0x007c, 0xa186, 0x0027, 0x0040, + 0x669d, 0xa186, 0x0014, 0x00c0, 0x66ad, 0x6004, 0xa086, 0x0042, + 0x10c0, 0x126a, 0x2001, 0x0007, 0x1078, 0x3324, 0x1078, 0x461a, + 0x1078, 0x60e8, 0x1078, 0x4713, 0x007c, 0xa182, 0x0040, 0x0079, + 0x66b1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, + 0x66c3, 0x66cf, 0x66c1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, 0x66c1, + 0x66c1, 0x1078, 0x126a, 0x037e, 0x047e, 0x20e1, 0x0005, 0x3d18, + 0x3e20, 0x2c10, 0x1078, 0x1505, 0x047f, 0x037f, 0x007c, 0x6010, + 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x66db, 0x2009, 0x0041, + 0x0d7f, 0x0078, 0x66e1, 0x6003, 0x0007, 0x1078, 0x4145, 0x0d7f, + 0x007c, 0xa182, 0x0040, 0x0079, 0x66e5, 0x66f5, 0x66f7, 0x6703, + 0x670f, 0x66f5, 0x66f5, 0x66f5, 0x66f5, 0x66f5, 0x66f5, 0x66f5, + 0x66f5, 0x66f5, 0x66f5, 0x66f5, 0x66f5, 0x1078, 0x126a, 0x6003, + 0x0001, 0x6106, 0x1078, 0x42c4, 0x127e, 0x2091, 0x8000, 0x1078, + 0x4713, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x42c4, + 0x127e, 0x2091, 0x8000, 0x1078, 0x4713, 0x127f, 0x007c, 0x6003, + 0x0003, 0x6106, 0x2c10, 0x1078, 0x18d5, 0x127e, 0x2091, 0x8000, + 0x1078, 0x4330, 0x1078, 0x47c3, 0x127f, 0x007c, 0x1078, 0x461a, + 0x0078, 0x6724, 0x1078, 0x46c2, 0x6110, 0x81ff, 0x0040, 0x6731, + 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x6ac6, 0x037f, + 0x0d7f, 0x1078, 0x60e8, 0x1078, 0x4713, 0x007c, 0xa182, 0x0085, + 0x0079, 0x673a, 0x6741, 0x6741, 0x6741, 0x6743, 0x6741, 0x6741, + 0x6741, 0x1078, 0x126a, 0x027e, 0x0e7e, 0x2071, 0x7080, 0x7220, + 0x1078, 0x69e0, 0x0040, 0x6750, 0x6007, 0x0086, 0x0078, 0x6752, + 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, 0x42c4, 0x1078, 0x4713, + 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x676c, 0x6004, + 0xa08a, 0x0085, 0x1048, 0x126a, 0xa08a, 0x008c, 0x10c8, 0x126a, + 0xa082, 0x0085, 0x0079, 0x677f, 0xa186, 0x0027, 0x0040, 0x6774, + 0xa186, 0x0014, 0x10c0, 0x126a, 0x2001, 0x0007, 0x1078, 0x3324, + 0x1078, 0x461a, 0x1078, 0x60e8, 0x1078, 0x4713, 0x007c, 0x6786, + 0x6788, 0x6788, 0x6786, 0x6786, 0x6786, 0x6786, 0x1078, 0x126a, + 0x1078, 0x461a, 0x1078, 0x5425, 0x1078, 0x4713, 0x007c, 0xa182, + 0x0085, 0x1048, 0x126a, 0xa182, 0x008c, 0x10c8, 0x126a, 0xa182, + 0x0085, 0x0079, 0x679b, 0x67a2, 0x67a2, 0x67a2, 0x67a4, 0x67a2, + 0x67a2, 0x67a2, 0x1078, 0x126a, 0x007c, 0x1078, 0x461a, 0x1078, + 0x60e8, 0x1078, 0x4713, 0x007c, 0x037e, 0x2019, 0x000b, 0x1078, + 0x67b5, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, + 0x2091, 0x8000, 0x2c40, 0x1078, 0x5180, 0x00c0, 0x67e2, 0x1078, + 0x5221, 0x00c0, 0x67e2, 0x6000, 0xa086, 0x0000, 0x0040, 0x67e2, + 0x601c, 0xa086, 0x0007, 0x0040, 0x67e2, 0x0d7e, 0x6000, 0xa086, + 0x0004, 0x00c0, 0x67d5, 0x1078, 0x15fc, 0x6010, 0x2068, 0x1078, + 0x5fcd, 0x0040, 0x67dd, 0x1078, 0x6ac6, 0x0d7f, 0x6013, 0x0000, + 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, + 0x037e, 0x157e, 0x2079, 0x7080, 0x7838, 0xa084, 0x00ff, 0xa005, + 0x00c0, 0x681e, 0x783c, 0x1078, 0x1f61, 0x017e, 0x0c7e, 0x1078, + 0x336a, 0x00c0, 0x681c, 0x2011, 0x7090, 0xac98, 0x000a, 0x20a9, + 0x0004, 0x1078, 0x588d, 0x00c0, 0x681c, 0x017f, 0x027f, 0x027e, + 0x017e, 0x2019, 0x0029, 0x1078, 0x52f5, 0x1078, 0x43ff, 0x1078, + 0x4344, 0x017f, 0x1078, 0x6946, 0x1078, 0x34f2, 0x017f, 0x1078, + 0x316e, 0xa006, 0x0078, 0x681e, 0x0c7f, 0x017f, 0x157f, 0x037f, + 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x6c1c, + 0x2104, 0xa086, 0x0074, 0x00c0, 0x687a, 0x2069, 0x708e, 0x690c, + 0xa182, 0x0100, 0x0048, 0x686a, 0x6908, 0xa184, 0x8000, 0x0040, + 0x6876, 0xa184, 0x0800, 0x0040, 0x6876, 0x6910, 0xa18a, 0x0001, + 0x0048, 0x686e, 0x6914, 0x2069, 0x70ae, 0x6904, 0x81ff, 0x00c0, + 0x6862, 0x690c, 0xa182, 0x0100, 0x0048, 0x686a, 0x6908, 0x81ff, + 0x00c0, 0x6866, 0x6910, 0xa18a, 0x0001, 0x0048, 0x686e, 0x6918, + 0xa18a, 0x0001, 0x0048, 0x6876, 0x0078, 0x6880, 0x6013, 0x0100, + 0x0078, 0x687c, 0x6013, 0x0300, 0x0078, 0x687c, 0x6013, 0x0500, + 0x0078, 0x687c, 0x6013, 0x0700, 0x0078, 0x687c, 0x6013, 0x0900, + 0x0078, 0x687c, 0x6013, 0x0b00, 0x0078, 0x687c, 0x6013, 0x0f00, + 0x0078, 0x687c, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, 0x6881, + 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, + 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, + 0x0006, 0x0040, 0x68a9, 0xa286, 0x0004, 0x0040, 0x68a9, 0xa394, + 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x68a9, 0xa286, 0x0004, + 0x0040, 0x68a9, 0x0c7e, 0x2d60, 0x1078, 0x337c, 0x0c7f, 0x0078, + 0x68dc, 0x2011, 0x7096, 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, + 0x588d, 0x00c0, 0x68dd, 0x2011, 0x709a, 0xad98, 0x0006, 0x20a9, + 0x0004, 0x1078, 0x588d, 0x00c0, 0x68dd, 0x047e, 0x017e, 0x6aa0, + 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x6c52, 0x210c, 0xd1a4, + 0x0040, 0x68d1, 0x2009, 0x0029, 0x1078, 0x6b0a, 0x6800, 0xc0e5, + 0x6802, 0x2019, 0x0029, 0x1078, 0x43ff, 0x1078, 0x4344, 0x2c08, + 0x1078, 0x6946, 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, + 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x708e, 0x6800, 0xa086, + 0x0800, 0x0040, 0x68ef, 0x6013, 0x0000, 0x0078, 0x68f0, 0xa006, + 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, + 0x2079, 0x708c, 0x7830, 0xa00d, 0x00c0, 0x6917, 0x7834, 0x1078, + 0x1f61, 0x1078, 0x336a, 0x00c0, 0x6917, 0x2011, 0x7090, 0xac98, + 0x000a, 0x20a9, 0x0004, 0x1078, 0x588d, 0x00c0, 0x6917, 0x2011, + 0x7094, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x588d, 0x157f, + 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, + 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x7083, 0x2204, 0x1078, + 0x1f61, 0x1078, 0x336a, 0x00c0, 0x693f, 0x2011, 0x7096, 0xac98, + 0x000a, 0x20a9, 0x0004, 0x1078, 0x588d, 0x00c0, 0x693f, 0x2011, + 0x709a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x588d, 0x157f, + 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, + 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, + 0x2029, 0x6db9, 0x252c, 0x2021, 0x6dbf, 0x2424, 0x2061, 0x7200, + 0x2071, 0x6c00, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x69a9, + 0x2100, 0xac06, 0x0040, 0x699f, 0x1078, 0x6b22, 0x0040, 0x699f, + 0x671c, 0xa786, 0x0001, 0x0040, 0x69be, 0xa786, 0x0007, 0x0040, + 0x699f, 0x2500, 0xac06, 0x0040, 0x699f, 0x2400, 0xac06, 0x0040, + 0x699f, 0x1078, 0x6b36, 0x00c0, 0x699f, 0x0d7e, 0x6000, 0xa086, + 0x0004, 0x00c0, 0x6987, 0x017e, 0x1078, 0x15fc, 0x017f, 0x6010, + 0x2068, 0x1078, 0x5fcd, 0x0040, 0x699c, 0xa786, 0x0003, 0x00c0, + 0x69b2, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, + 0x35c4, 0x017f, 0x1078, 0x60db, 0x0d7f, 0x1078, 0x60e8, 0xace0, + 0x0008, 0x2001, 0x6c15, 0x2004, 0xac02, 0x00c8, 0x69a9, 0x0078, + 0x6958, 0x127f, 0x027f, 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, + 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x6991, 0xa386, 0x0005, + 0x0040, 0x699f, 0x1078, 0x6ac6, 0x0078, 0x699c, 0x1078, 0x6b36, + 0x00c0, 0x699f, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, + 0x699f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x699f, 0x1078, 0x6101, + 0x0040, 0x69da, 0x1078, 0x6115, 0x00c0, 0x699f, 0x1078, 0x5614, + 0x0078, 0x69dc, 0x1078, 0x2143, 0x1078, 0x60e8, 0x0078, 0x699f, + 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, 0x6add, 0x017f, + 0x0040, 0x69ef, 0x601c, 0xa084, 0x0007, 0x1079, 0x69f2, 0x0e7f, + 0x0c7f, 0x007c, 0x69fa, 0x69fa, 0x69fa, 0x69fa, 0x69fa, 0x69fa, + 0x69fc, 0x69fa, 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, + 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, + 0x1078, 0x6b0a, 0x017f, 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, + 0x67b5, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, + 0x3302, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, + 0x6c05, 0x2011, 0x7096, 0x1078, 0x588d, 0x037f, 0x027f, 0x017f, + 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, + 0x027e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7200, 0x2079, 0x0001, + 0x8fff, 0x0040, 0x6a86, 0x2071, 0x6c00, 0x7644, 0x7060, 0x8001, + 0xa602, 0x00c8, 0x6a86, 0x88ff, 0x0040, 0x6a4c, 0x2800, 0xac06, + 0x00c0, 0x6a7c, 0x2079, 0x0000, 0x1078, 0x6b22, 0x0040, 0x6a7c, + 0x2400, 0xac06, 0x0040, 0x6a7c, 0x671c, 0xa786, 0x0006, 0x00c0, + 0x6a7c, 0xa786, 0x0007, 0x0040, 0x6a7c, 0x88ff, 0x00c0, 0x6a64, + 0x6018, 0xa206, 0x00c0, 0x6a7c, 0x0d7e, 0x6000, 0xa086, 0x0004, + 0x00c0, 0x6a6c, 0x1078, 0x15fc, 0x6010, 0x2068, 0x1078, 0x5fcd, + 0x0040, 0x6a76, 0x047e, 0x1078, 0x6ac6, 0x047f, 0x0d7f, 0x1078, + 0x60e8, 0x88ff, 0x00c0, 0x6a8f, 0xace0, 0x0008, 0x2001, 0x6c15, + 0x2004, 0xac02, 0x00c8, 0x6a86, 0x0078, 0x6a38, 0xa006, 0x127f, + 0x027f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, + 0x0001, 0x0078, 0x6a87, 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, + 0x0002, 0x6218, 0x1078, 0x5180, 0x1078, 0x5221, 0x1078, 0x6a2b, + 0x087f, 0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, + 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x336a, + 0x00c0, 0x6abb, 0x2c10, 0x2041, 0x0000, 0x1078, 0x5180, 0x1078, + 0x5221, 0x1078, 0x6a2b, 0x037f, 0x017f, 0x8108, 0x00f0, 0x6aac, + 0x157f, 0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, + 0x8dff, 0x0040, 0x6ada, 0x6800, 0xa07d, 0x0040, 0x6ad7, 0x6803, + 0x0000, 0x6b52, 0x1078, 0x35c4, 0x2f68, 0x0078, 0x6acb, 0x6b52, + 0x1078, 0x35c4, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, + 0x2061, 0x7200, 0x2071, 0x6c00, 0x7444, 0x7060, 0x8001, 0xa402, + 0x00c8, 0x6b05, 0x2100, 0xac06, 0x0040, 0x6af7, 0x6000, 0xa086, + 0x0000, 0x0040, 0x6af7, 0x6008, 0xa206, 0x0040, 0x6b01, 0xace0, + 0x0008, 0x2001, 0x6c15, 0x2004, 0xac02, 0x00c8, 0x6b05, 0x0078, + 0x6ae2, 0xa085, 0x0001, 0x0078, 0x6b06, 0xa006, 0x037f, 0x047f, + 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078, 0x12c2, 0x007f, 0x1040, + 0x126a, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, + 0x0000, 0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, 0x1078, 0x35c4, + 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0x6b35, 0xa786, + 0x0001, 0x0040, 0x6b35, 0xa786, 0x000a, 0x0040, 0x6b35, 0xa786, + 0x0009, 0x0040, 0x6b35, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, + 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, + 0x2091, 0x8000, 0x2071, 0x6c40, 0xd5a4, 0x0040, 0x6b4a, 0x7034, + 0x8000, 0x7036, 0xd5b4, 0x0040, 0x6b50, 0x7030, 0x8000, 0x7032, + 0xd5ac, 0x0040, 0x6b57, 0x2071, 0x6c4a, 0x1078, 0x6b86, 0x0e7f, + 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, + 0x2071, 0x6c40, 0xd5a4, 0x0040, 0x6b68, 0x7034, 0x8000, 0x7036, + 0xd5b4, 0x0040, 0x6b6e, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, + 0x6b75, 0x2071, 0x6c4a, 0x1078, 0x6b86, 0x0e7f, 0x007f, 0x127f, + 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6c42, + 0x1078, 0x6b86, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, + 0x2072, 0x00c8, 0x6b8f, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, + 0x0e7e, 0x2071, 0x6c40, 0x1078, 0x6b86, 0x0e7f, 0x007c, 0x0e7e, + 0x2071, 0x6c44, 0x1078, 0x6b86, 0x0e7f, 0x007c, 0x0001, 0x0002, + 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, + 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x3cfe }; -#define ISP2100_CODE_LENGTH 0x5f74 +#define ISP2100_CODE_LENGTH 0x5baf #endif -#if defined(ISP2100_FABRIC) && !defined(ISP2100_SCCLUN) +#if 1 /************************************************************************ * * - * --- ISP2100 Fabric Initiator/Target Firmware --- * + * --- ISP2100 Initiator/Target Firmware --- * * * * * ************************************************************************ @@ -8141,618 +9209,580 @@ static const u_int16_t ISP2100_RISC_CODE[] = { ************************************************************************ */ /* - * Firmware Version 1.15.07 (14:45 Oct 13, 1998) + * Firmware Version 1.15.00 (12:09 Sep 10, 1998) */ - +#define ISP2100_CODE_VERSION 1*1024+15 static const u_int16_t ISP2100_RISC_CODE[] = { - 0x0078, 0x1029, 0x0000, 0x6591, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x0078, 0x1029, 0x0000, 0x5e35, 0x0000, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020, - 0x2400, 0x20c1, 0x0021, 0x20a1, 0x7591, 0x2009, 0x0000, 0x20a9, - 0x076f, 0x41a4, 0x3400, 0x20c9, 0x7aff, 0x2091, 0x2000, 0x2059, - 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2074, 0x2051, 0x7600, - 0x2a70, 0x705b, 0x9500, 0x705f, 0xffff, 0x7057, 0x94f9, 0x7063, - 0x0300, 0x1078, 0x1282, 0x20a1, 0x7d00, 0x715c, 0x810d, 0x810d, + 0x2400, 0x20c1, 0x0021, 0x20a1, 0x6e35, 0x2009, 0x0000, 0x20a9, + 0x06cb, 0x41a4, 0x3400, 0x20c9, 0x72ff, 0x2091, 0x2000, 0x2059, + 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x1fbd, 0x2051, 0x6f00, + 0x2a70, 0x705b, 0x8d00, 0x705f, 0xffff, 0x7057, 0x8cf9, 0x7063, + 0x0300, 0x1078, 0x1233, 0x20a1, 0x7500, 0x715c, 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e, 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400, 0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4, - 0x1078, 0x1249, 0x1078, 0x136e, 0x1078, 0x14f3, 0x1078, 0x19a0, - 0x1078, 0x35cf, 0x1078, 0x5b46, 0x1078, 0x12f9, 0x1078, 0x2403, - 0x1078, 0x3c08, 0x1078, 0x39e0, 0x1078, 0x4446, 0x1078, 0x1e2f, - 0x1078, 0x4685, 0x1078, 0x4126, 0x1078, 0x1d4e, 0x1078, 0x1e0e, + 0x1078, 0x11fe, 0x1078, 0x131f, 0x1078, 0x14a4, 0x1078, 0x1915, + 0x1078, 0x328f, 0x1078, 0x5533, 0x1078, 0x12aa, 0x1078, 0x22c3, + 0x1078, 0x38c8, 0x1078, 0x36a0, 0x1078, 0x4079, 0x1078, 0x1d9b, + 0x1078, 0x42b8, 0x1078, 0x3de6, 0x1078, 0x1cc3, 0x1078, 0x1d7a, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086, 0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, - 0x00c0, 0x10bd, 0x1078, 0x2d45, 0x1078, 0x242b, 0x1078, 0x3c58, - 0x1078, 0x3acb, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x10c1, 0x1078, 0x445e, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, - 0x10aa, 0x1078, 0x5818, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x114b, - 0x10cd, 0x11c6, 0x1246, 0x1247, 0x1248, 0x1078, 0x12d5, 0x007c, - 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2e6a, 0x2079, 0x0100, - 0x7844, 0xa005, 0x00c0, 0x113c, 0x2011, 0x34fc, 0x1078, 0x4520, + 0x00c0, 0x10bd, 0x1078, 0x2a07, 0x1078, 0x22eb, 0x1078, 0x3918, + 0x1078, 0x378b, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, + 0x10c1, 0x1078, 0x4091, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, + 0x10aa, 0x1078, 0x5205, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x112a, + 0x10cd, 0x117d, 0x11fb, 0x11fc, 0x11fd, 0x1078, 0x1286, 0x007c, + 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2b2a, 0x2079, 0x0100, + 0x7844, 0xa005, 0x00c0, 0x1127, 0x2011, 0x31bc, 0x1078, 0x4153, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, - 0x73b8, 0x1078, 0x2d02, 0x1078, 0x5663, 0x2011, 0x0004, 0x1078, - 0x68f8, 0x1078, 0x397a, 0x70c7, 0x0000, 0x70bf, 0x0000, 0x70c3, - 0x0000, 0x1078, 0x113f, 0x2011, 0x0000, 0x2079, 0x7651, 0x7804, - 0xd0ac, 0x0040, 0x1104, 0xc295, 0x70a4, 0xa005, 0x0040, 0x1109, - 0xc29d, 0x72be, 0xa296, 0x0004, 0x0040, 0x112a, 0x2011, 0x0001, - 0x1078, 0x68f8, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002, - 0x0f7f, 0x1078, 0x2124, 0x2011, 0x0005, 0x1078, 0x5772, 0x1078, - 0x4c2c, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f, - 0x0078, 0x113e, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002, - 0x2011, 0x0005, 0x1078, 0x5772, 0x1078, 0x4c2c, 0x0c7e, 0x2061, - 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e, - 0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x37bf, 0x8108, 0x00f0, - 0x1144, 0x0c7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086, - 0xffff, 0x0040, 0x1159, 0x1078, 0x2124, 0x1078, 0x4c2c, 0x0078, - 0x11c4, 0x70bc, 0xd09c, 0x0040, 0x1181, 0xd084, 0x0040, 0x1181, - 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c, - 0x0040, 0x1181, 0x70c0, 0xa086, 0xffff, 0x0040, 0x117d, 0x1078, - 0x2219, 0x1078, 0x4c2c, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078, - 0x2251, 0x1078, 0x4c2c, 0x0078, 0x11c4, 0x70c4, 0xa005, 0x00c0, - 0x11c4, 0x7088, 0xa005, 0x00c0, 0x11c4, 0x2001, 0x7652, 0x2004, - 0xd0ac, 0x0040, 0x11a7, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, - 0x0000, 0x017e, 0x1078, 0x37d7, 0x00c0, 0x119a, 0x6000, 0xd0ec, - 0x00c0, 0x11a2, 0x017f, 0x8108, 0x00f0, 0x1191, 0x0c7f, 0x157f, - 0x0078, 0x11a7, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x11c4, 0x7003, - 0x0003, 0x708f, 0xffff, 0x2001, 0x0000, 0x1078, 0x1fff, 0x1078, - 0x2d80, 0x2001, 0x7837, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11bc, - 0x2011, 0x0000, 0x1078, 0x5772, 0x2011, 0x0000, 0x1078, 0x577c, - 0x1078, 0x4c2c, 0x1078, 0x4cec, 0x127f, 0x007c, 0x017e, 0x0f7e, - 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010, - 0x7942, 0x7924, 0xd1b4, 0x0040, 0x11d7, 0x7827, 0x0040, 0xd19c, - 0x0040, 0x11dc, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, - 0xa18a, 0x0003, 0x0050, 0x1202, 0x7954, 0xd1ac, 0x00c0, 0x1202, - 0x2009, 0x00f8, 0x1078, 0x359e, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11fa, 0x7824, 0xd0ac, - 0x00c0, 0x1236, 0x00f0, 0x11f2, 0x2001, 0x0001, 0x1078, 0x1fff, - 0x0078, 0x123f, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008, - 0x00e0, 0x1208, 0x2091, 0x6000, 0x00f0, 0x1208, 0x7853, 0x0400, - 0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x359e, 0x20a9, 0x000e, - 0x0005, 0x00f0, 0x1218, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, - 0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, - 0x122d, 0x7824, 0xd0ac, 0x00c0, 0x1236, 0x8319, 0x00c0, 0x1223, - 0x2001, 0x0001, 0x1078, 0x1fff, 0x0078, 0x123d, 0x7828, 0xc09d, - 0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, - 0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, - 0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x1255, 0x704f, 0xffff, 0x0078, 0x1257, 0x704f, 0x0000, 0x7053, - 0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7820, 0x6003, - 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, - 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061, - 0x7828, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f, - 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f, - 0x0000, 0x007c, 0x1078, 0x12a8, 0x2011, 0x0000, 0x81ff, 0x0040, - 0x12a7, 0xa186, 0x0001, 0x00c0, 0x1297, 0x705f, 0x8fff, 0x7057, - 0x8501, 0x7063, 0x0100, 0x705b, 0x8500, 0x0078, 0x12a5, 0xa186, - 0x0002, 0x00c0, 0x129f, 0x2011, 0x0000, 0x0078, 0x12a5, 0xa186, - 0x0005, 0x00c0, 0x12a5, 0x2011, 0x0001, 0x1078, 0x12cf, 0x007c, - 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12cf, 0x2019, 0xaaaa, - 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, 0x2c04, 0xa406, - 0x0040, 0x12bd, 0xc18d, 0x0078, 0x12ca, 0xc185, 0x2011, 0x0001, - 0x1078, 0x12cf, 0x2061, 0xffff, 0x2362, 0x2c04, 0xa306, 0x00c0, - 0x12ca, 0xc195, 0x2011, 0x0001, 0x1078, 0x12cf, 0x007c, 0x3800, - 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, 0x8000, 0x0068, - 0x12d7, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, 0x0000, - 0x00c0, 0x12dd, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, 0x7826, - 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000, - 0x2091, 0x4080, 0x2079, 0x7600, 0x7803, 0x0005, 0x0078, 0x12f6, - 0x007c, 0x2071, 0x7600, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190, - 0x002d, 0xa298, 0x002d, 0x0048, 0x130f, 0x705c, 0xa302, 0x00c8, - 0x130f, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x1301, 0x200b, - 0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x7600, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x1322, 0xa06e, - 0x0078, 0x132c, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e, - 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, - 0x2071, 0x7600, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8, - 0x133c, 0xa06e, 0x0078, 0x1345, 0x70a2, 0x702c, 0x2068, 0x2d04, + 0x73b0, 0x1078, 0x29c6, 0x1078, 0x5050, 0x2011, 0x0004, 0x1078, + 0x61f1, 0x1078, 0x363a, 0x2079, 0x6f51, 0x7804, 0xd0ac, 0x00c0, + 0x1115, 0x2011, 0x0001, 0x1078, 0x61f1, 0x7083, 0x0000, 0x7087, + 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x206d, 0x2011, 0x0005, + 0x1078, 0x515f, 0x1078, 0x484d, 0x0c7e, 0x2061, 0x0100, 0x60e3, + 0x0008, 0x0c7f, 0x127f, 0x0078, 0x1129, 0x7083, 0x0000, 0x7087, + 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x515f, 0x1078, + 0x484d, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, + 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa086, 0xffff, + 0x0040, 0x1138, 0x1078, 0x206d, 0x1078, 0x484d, 0x0078, 0x117b, + 0x7080, 0xa005, 0x00c0, 0x117b, 0x2001, 0x6f52, 0x2004, 0xd0ac, + 0x0040, 0x115e, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, + 0x017e, 0x1078, 0x3497, 0x00c0, 0x1151, 0x6000, 0xd0ec, 0x00c0, + 0x1159, 0x017f, 0x8108, 0x00f0, 0x1148, 0x0c7f, 0x157f, 0x0078, + 0x115e, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x117b, 0x7003, 0x0003, + 0x7087, 0xffff, 0x2001, 0x0000, 0x1078, 0x1f5e, 0x1078, 0x2a40, + 0x2001, 0x70b7, 0x2004, 0xa086, 0x0005, 0x00c0, 0x1173, 0x2011, + 0x0000, 0x1078, 0x515f, 0x2011, 0x0000, 0x1078, 0x5169, 0x1078, + 0x484d, 0x1078, 0x48fd, 0x127f, 0x007c, 0x017e, 0x0f7e, 0x127e, + 0x2091, 0x8000, 0x2079, 0x0100, 0x7843, 0x0000, 0x7924, 0xd1b4, + 0x0040, 0x118c, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1191, 0x7827, + 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, 0xa18a, 0x0003, 0x0050, + 0x11b7, 0x7954, 0xd1ac, 0x00c0, 0x11b7, 0x2009, 0x00f8, 0x1078, + 0x325e, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, + 0xd09c, 0x00c0, 0x11af, 0x7824, 0xd0ac, 0x00c0, 0x11eb, 0x00f0, + 0x11a7, 0x2001, 0x0001, 0x1078, 0x1f5e, 0x0078, 0x11f4, 0x7853, + 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008, 0x00e0, 0x11bd, 0x2091, + 0x6000, 0x00f0, 0x11bd, 0x7853, 0x0400, 0x782f, 0x0000, 0x2009, + 0x00f8, 0x1078, 0x325e, 0x20a9, 0x000e, 0x0005, 0x00f0, 0x11cd, + 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010, 0x2019, 0x61a8, + 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x11e2, 0x7824, 0xd0ac, + 0x00c0, 0x11eb, 0x8319, 0x00c0, 0x11d8, 0x2001, 0x0001, 0x1078, + 0x1f5e, 0x0078, 0x11f2, 0x7828, 0xc09d, 0x782a, 0x7827, 0x0008, + 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f, 0x127f, + 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70, 0x2009, + 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, 0x120a, 0x704f, 0xffff, + 0x0078, 0x120c, 0x704f, 0x0000, 0x7053, 0xffff, 0x2061, 0x70a0, + 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, + 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, + 0x2061, 0x70a8, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, + 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, + 0x601f, 0x0000, 0x007c, 0x1078, 0x1259, 0x2011, 0x0000, 0x81ff, + 0x0040, 0x1258, 0xa186, 0x0001, 0x00c0, 0x1248, 0x705f, 0x8fff, + 0x7057, 0x7d01, 0x7063, 0x0100, 0x705b, 0x7d00, 0x0078, 0x1256, + 0xa186, 0x0002, 0x00c0, 0x1250, 0x2011, 0x0000, 0x0078, 0x1256, + 0xa186, 0x0005, 0x00c0, 0x1256, 0x2011, 0x0001, 0x1078, 0x1280, + 0x007c, 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x1280, 0x2019, + 0xaaaa, 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, 0x2c04, + 0xa406, 0x0040, 0x126e, 0xc18d, 0x0078, 0x127b, 0xc185, 0x2011, + 0x0001, 0x1078, 0x1280, 0x2061, 0xffff, 0x2362, 0x2c04, 0xa306, + 0x00c0, 0x127b, 0xc195, 0x2011, 0x0001, 0x1078, 0x1280, 0x007c, + 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, 0x8000, + 0x0068, 0x1288, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, + 0x0000, 0x00c0, 0x128e, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, + 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, + 0x5000, 0x2091, 0x4080, 0x2079, 0x6f00, 0x7803, 0x0005, 0x0078, + 0x12a7, 0x007c, 0x2071, 0x6f00, 0x7158, 0x712e, 0x2021, 0x0001, + 0xa190, 0x002d, 0xa298, 0x002d, 0x0048, 0x12c0, 0x705c, 0xa302, + 0x00c8, 0x12c0, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x12b2, + 0x200b, 0x0000, 0x7496, 0x749a, 0x007c, 0x0e7e, 0x127e, 0x2091, + 0x8000, 0x2071, 0x6f00, 0x7098, 0xa0ea, 0x0010, 0x00c8, 0x12d3, + 0xa06e, 0x0078, 0x12dd, 0x8001, 0x709a, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, - 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7600, 0x702c, 0x206a, - 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c, - 0x8dff, 0x0040, 0x1364, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078, - 0x1348, 0x0d7f, 0x0078, 0x1358, 0x007c, 0x0e7e, 0x2071, 0x7600, - 0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071, - 0x7859, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, - 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e, - 0x2270, 0x700b, 0x0000, 0x2071, 0x7859, 0x7018, 0xa088, 0x7862, - 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, - 0x1397, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a8, 0x0f7f, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x7859, 0x7004, 0xa005, 0x00c0, 0x13a6, - 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a8, 0x0f7f, 0x0e7f, 0x007c, - 0x7000, 0x0079, 0x13ab, 0x13af, 0x1419, 0x1436, 0x1436, 0x7018, - 0x711c, 0xa106, 0x00c0, 0x13b7, 0x7007, 0x0000, 0x007c, 0x0d7e, - 0xa180, 0x7862, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, - 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, - 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804, - 0x0d7f, 0xd084, 0x0040, 0x13d9, 0x7007, 0x0001, 0x1078, 0x13de, - 0x007c, 0x7007, 0x0002, 0x1078, 0x13f4, 0x007c, 0x017e, 0x027e, - 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13e9, 0x2110, - 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, - 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e, - 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, - 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1408, 0x2110, 0xa006, - 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, - 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x76e5, 0x20a1, 0x0018, - 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, - 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b, - 0x76e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e, - 0x157e, 0x2001, 0x7714, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026, - 0x2001, 0x7715, 0x20ac, 0x53a6, 0x2099, 0x7716, 0x20a1, 0x0018, - 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, - 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b, - 0x7711, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e, - 0x2071, 0x7859, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002, - 0xd1fc, 0x0040, 0x1479, 0xa18c, 0x0700, 0x0040, 0x1476, 0x7008, - 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1479, 0x7004, 0x1079, - 0x147d, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x13a8, 0x1485, 0x14a7, - 0x14c1, 0x14ea, 0x1483, 0x0078, 0x1483, 0x137e, 0x147e, 0x157e, - 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, - 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005, - 0x0040, 0x14ae, 0x1078, 0x13de, 0x007c, 0x7008, 0xa080, 0x0002, - 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x13a8, 0x007c, 0x700c, - 0xa005, 0x0040, 0x14ae, 0x1078, 0x13f4, 0x007c, 0x0d7e, 0x7008, - 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c, - 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x13a8, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x76e3, 0x2004, 0xa080, - 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, - 0x53a5, 0x2001, 0x76e5, 0x2004, 0xd0bc, 0x0040, 0x14e0, 0x2001, - 0x76ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, - 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3d01, 0x1078, - 0x13a8, 0x007c, 0x2001, 0x7713, 0x2003, 0x0100, 0x7007, 0x0000, - 0x1078, 0x13a8, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030, - 0x2071, 0x786a, 0x7003, 0x0000, 0x700f, 0x7870, 0x7013, 0x7870, - 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079, - 0x1509, 0x1511, 0x1557, 0x1511, 0x1511, 0x1511, 0x153c, 0x1520, - 0x1515, 0xa085, 0x0001, 0x0078, 0x1571, 0x684c, 0xd0bc, 0x0040, - 0x1511, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x155f, - 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1511, 0x684c, 0xd0bc, - 0x0040, 0x1511, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a, - 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, - 0x6832, 0x6858, 0x0078, 0x1567, 0xa18c, 0x00ff, 0xa186, 0x0015, - 0x00c0, 0x1511, 0x684c, 0xd0ac, 0x0040, 0x1511, 0x6804, 0x681a, - 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, - 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x1567, 0x684c, - 0xd0ac, 0x0040, 0x1511, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, - 0x000f, 0xa188, 0x1c5c, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826, - 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, - 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, - 0x2004, 0x82ff, 0x0040, 0x158c, 0xa280, 0x0004, 0x0d7e, 0x206c, - 0x684c, 0xd0dc, 0x00c0, 0x1588, 0x1078, 0x1504, 0x10c0, 0x12d5, - 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e, - 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0, - 0x15a0, 0x7206, 0x2001, 0x15b4, 0x007e, 0x2260, 0x0078, 0x16cc, - 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182, - 0x788b, 0x0048, 0x15ad, 0x2009, 0x7870, 0x710e, 0x7000, 0xa005, - 0x00c0, 0x15b4, 0x1078, 0x16b5, 0x127f, 0x007c, 0x127e, 0x027e, - 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, - 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, - 0xa005, 0x0040, 0x1608, 0x6808, 0xa005, 0x0040, 0x166e, 0x7000, - 0xa005, 0x00c0, 0x15d5, 0x0078, 0x1602, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x1672, 0x7004, 0xa406, 0x00c0, 0x1602, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x0040, 0x15eb, 0x047e, 0x1078, 0x17a5, 0x047f, - 0x2460, 0x0078, 0x15cb, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, - 0x15de, 0x7804, 0xa084, 0x6000, 0x0040, 0x15fc, 0xa086, 0x6000, - 0x0040, 0x15fc, 0x0078, 0x15de, 0x7803, 0x0004, 0x7003, 0x0000, - 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5bdb, 0x0078, 0x1672, - 0x6808, 0xa005, 0x0040, 0x166e, 0x7000, 0xa005, 0x00c0, 0x1612, - 0x0078, 0x166e, 0x700c, 0x7110, 0xa106, 0x00c0, 0x161b, 0x7004, - 0xa406, 0x00c0, 0x166e, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, - 0x1628, 0x047e, 0x1078, 0x17a5, 0x047f, 0x2460, 0x0078, 0x1608, - 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x161b, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x00c0, 0x1621, 0x7804, 0xa084, 0x6000, 0x0040, - 0x163f, 0xa086, 0x6000, 0x0040, 0x163f, 0x0078, 0x161b, 0x7007, - 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, 0x1660, - 0xa08e, 0x0002, 0x00c0, 0x166e, 0x0c7e, 0x0e7e, 0x6818, 0x2060, - 0x1078, 0x1c31, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, 0x165c, - 0x7308, 0x720c, 0x0078, 0x165e, 0x7310, 0x7214, 0x0e7f, 0x0c7f, - 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814, - 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048, - 0x1078, 0x5bdb, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, - 0x2071, 0x786a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16b2, 0x7004, - 0xac06, 0x00c0, 0x16a3, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0, - 0x169f, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x1685, 0x7803, - 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1691, 0x7803, 0x0002, 0x7803, - 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x16a3, 0x1078, - 0x17a5, 0x0078, 0x167a, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7870, - 0x2104, 0xac06, 0x00c0, 0x16ad, 0x200a, 0xa188, 0x0003, 0x00f0, - 0x16a8, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x16bd, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060, - 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x788b, 0x0048, - 0x16cb, 0x2009, 0x7870, 0x7112, 0x8cff, 0x00c0, 0x16eb, 0x7908, - 0xd1ec, 0x00c0, 0x16df, 0x1078, 0x197e, 0x0040, 0x16df, 0x7803, - 0x0009, 0x7904, 0xd1fc, 0x0040, 0x16d9, 0x7803, 0x0006, 0x7007, - 0x0000, 0x1078, 0x197e, 0x0040, 0x1712, 0x7803, 0x0019, 0x7003, - 0x0003, 0x0078, 0x1712, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406, - 0x00c0, 0x16f6, 0x682c, 0xa306, 0x0040, 0x16fa, 0x1078, 0x1c7c, - 0x00c0, 0x16cf, 0x684c, 0xd0f4, 0x00c0, 0x16cf, 0x6824, 0x2050, - 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, - 0x0011, 0x1078, 0x1713, 0x0040, 0x1711, 0x2009, 0x0001, 0x1078, - 0x1713, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x17a0, 0xa03e, 0x2730, - 0x6850, 0xd0fc, 0x00c0, 0x1732, 0x0d7e, 0x2804, 0xac68, 0x2900, - 0x0079, 0x1722, 0x1782, 0x1742, 0x1742, 0x1782, 0x1782, 0x177a, - 0x1782, 0x1742, 0x1782, 0x1748, 0x1748, 0x1782, 0x1782, 0x1782, - 0x1771, 0x1748, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, - 0x0d7e, 0xd99c, 0x0040, 0x1785, 0x2804, 0xac68, 0x6f08, 0x6e0c, - 0x0078, 0x1785, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1785, - 0x7b0c, 0xd3bc, 0x0040, 0x1769, 0x7004, 0x0e7e, 0x2070, 0x701c, - 0x0e7f, 0xa086, 0x0008, 0x00c0, 0x1769, 0x7b08, 0xa39c, 0x0fff, - 0x2d20, 0x0d7f, 0x0d7e, 0x6a14, 0x82ff, 0x00c0, 0x1764, 0x6810, - 0xa302, 0x0048, 0x1764, 0x6b10, 0x2011, 0x0000, 0x2468, 0x0078, - 0x176b, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, - 0x1785, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, - 0x00c0, 0x1782, 0x0d7f, 0x1078, 0x1c18, 0x00c0, 0x1713, 0xa00e, - 0x0078, 0x17a0, 0x0d7f, 0x1078, 0x12d5, 0x7b22, 0x7a26, 0x7d32, + 0x0e7e, 0x2071, 0x6f00, 0x127e, 0x2091, 0x8000, 0x7098, 0x8001, + 0x00c8, 0x12ed, 0xa06e, 0x0078, 0x12f6, 0x709a, 0x702c, 0x2068, + 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, + 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x6f00, 0x702c, + 0x206a, 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, 0x127f, 0x0e7f, + 0x007c, 0x8dff, 0x0040, 0x1315, 0x6804, 0x6807, 0x0000, 0x007e, + 0x1078, 0x12f9, 0x0d7f, 0x0078, 0x1309, 0x007c, 0x0e7e, 0x2071, + 0x6f00, 0x7098, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, + 0x2071, 0x70d9, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, + 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, + 0x0e7e, 0x2270, 0x700b, 0x0000, 0x2071, 0x70d9, 0x7018, 0xa088, + 0x70e2, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, + 0x00c0, 0x1348, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1359, 0x0f7f, + 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x70d9, 0x7004, 0xa005, 0x00c0, + 0x1357, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1359, 0x0f7f, 0x0e7f, + 0x007c, 0x7000, 0x0079, 0x135c, 0x1360, 0x13ca, 0x13e7, 0x13e7, + 0x7018, 0x711c, 0xa106, 0x00c0, 0x1368, 0x7007, 0x0000, 0x007c, + 0x0d7e, 0xa180, 0x70e2, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, + 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, + 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, + 0x6804, 0x0d7f, 0xd084, 0x0040, 0x138a, 0x7007, 0x0001, 0x1078, + 0x138f, 0x007c, 0x7007, 0x0002, 0x1078, 0x13a5, 0x007c, 0x017e, + 0x027e, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x139a, + 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, + 0x7803, 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, + 0x147e, 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, + 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13b9, 0x2110, + 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, + 0x7803, 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, + 0x017f, 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x6fe5, 0x20a1, + 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, + 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, + 0x700b, 0x6fe0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, + 0x147e, 0x157e, 0x2001, 0x7014, 0x209c, 0x20a1, 0x0014, 0x7803, + 0x0026, 0x2001, 0x7015, 0x20ac, 0x53a6, 0x2099, 0x7016, 0x20a1, + 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, + 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, + 0x700b, 0x7011, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, + 0x0e7e, 0x2071, 0x70d9, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, + 0x0002, 0xd1fc, 0x0040, 0x142a, 0xa18c, 0x0700, 0x0040, 0x1427, + 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x142a, 0x7004, + 0x1079, 0x142e, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1359, 0x1436, + 0x1458, 0x1472, 0x149b, 0x1434, 0x0078, 0x1434, 0x137e, 0x147e, + 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, + 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, + 0xa005, 0x0040, 0x145f, 0x1078, 0x138f, 0x007c, 0x7008, 0xa080, + 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1359, 0x007c, + 0x700c, 0xa005, 0x0040, 0x145f, 0x1078, 0x13a5, 0x007c, 0x0d7e, + 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, + 0x783c, 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, + 0x1359, 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x6fe3, 0x2004, + 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, + 0x0020, 0x53a5, 0x2001, 0x6fe5, 0x2004, 0xd0bc, 0x0040, 0x1491, + 0x2001, 0x6fee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, + 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x39c1, + 0x1078, 0x1359, 0x007c, 0x2001, 0x7013, 0x2003, 0x0100, 0x7007, + 0x0000, 0x1078, 0x1359, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, + 0x0030, 0x2071, 0x70ea, 0x7003, 0x0000, 0x700f, 0x70f0, 0x7013, + 0x70f0, 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, + 0x0079, 0x14ba, 0x14c2, 0x1508, 0x14c2, 0x14c2, 0x14c2, 0x14ed, + 0x14d1, 0x14c6, 0xa085, 0x0001, 0x0078, 0x1522, 0x684c, 0xd0bc, + 0x0040, 0x14c2, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, + 0x1510, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x14c2, 0x684c, + 0xd0bc, 0x0040, 0x14c2, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, + 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1bd1, + 0x2004, 0x6832, 0x6858, 0x0078, 0x1518, 0xa18c, 0x00ff, 0xa186, + 0x0015, 0x00c0, 0x14c2, 0x684c, 0xd0ac, 0x0040, 0x14c2, 0x6804, + 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1bd1, + 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x1518, + 0x684c, 0xd0ac, 0x0040, 0x14c2, 0xa006, 0x682e, 0x682a, 0x6858, + 0xa18c, 0x000f, 0xa188, 0x1bd1, 0x210c, 0x6932, 0x2d08, 0x691a, + 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, + 0x6980, 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, + 0x020a, 0x2004, 0x82ff, 0x0040, 0x153d, 0xa280, 0x0004, 0x0d7e, + 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x1539, 0x1078, 0x14b5, 0x10c0, + 0x1286, 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, + 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, + 0x00c0, 0x1551, 0x7206, 0x2001, 0x1565, 0x007e, 0x2260, 0x0078, + 0x167d, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, + 0xa182, 0x710b, 0x0048, 0x155e, 0x2009, 0x70f0, 0x710e, 0x7000, + 0xa005, 0x00c0, 0x1565, 0x1078, 0x1666, 0x127f, 0x007c, 0x127e, + 0x027e, 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, + 0x037f, 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, + 0x6b5e, 0xa005, 0x0040, 0x15b9, 0x6808, 0xa005, 0x0040, 0x161f, + 0x7000, 0xa005, 0x00c0, 0x1586, 0x0078, 0x15b3, 0x700c, 0x7110, + 0xa106, 0x00c0, 0x1623, 0x7004, 0xa406, 0x00c0, 0x15b3, 0x2001, + 0x0005, 0x2004, 0xd08c, 0x0040, 0x159c, 0x047e, 0x1078, 0x1735, + 0x047f, 0x2460, 0x0078, 0x157c, 0x2001, 0x0207, 0x2004, 0xd09c, + 0x00c0, 0x158f, 0x7804, 0xa084, 0x6000, 0x0040, 0x15ad, 0xa086, + 0x6000, 0x0040, 0x15ad, 0x0078, 0x158f, 0x7803, 0x0004, 0x7003, + 0x0000, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x55c8, 0x0078, + 0x1623, 0x6808, 0xa005, 0x0040, 0x161f, 0x7000, 0xa005, 0x00c0, + 0x15c3, 0x0078, 0x161f, 0x700c, 0x7110, 0xa106, 0x00c0, 0x15cc, + 0x7004, 0xa406, 0x00c0, 0x161f, 0x2001, 0x0005, 0x2004, 0xd08c, + 0x0040, 0x15d9, 0x047e, 0x1078, 0x1735, 0x047f, 0x2460, 0x0078, + 0x15b9, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x15cc, 0x2001, + 0x0005, 0x2004, 0xd08c, 0x00c0, 0x15d2, 0x7804, 0xa084, 0x6000, + 0x0040, 0x15f0, 0xa086, 0x6000, 0x0040, 0x15f0, 0x0078, 0x15cc, + 0x7007, 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, + 0x1611, 0xa08e, 0x0002, 0x00c0, 0x161f, 0x0c7e, 0x0e7e, 0x6818, + 0x2060, 0x1078, 0x1ba6, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, + 0x160d, 0x7308, 0x720c, 0x0078, 0x160f, 0x7310, 0x7214, 0x0e7f, + 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, + 0x6814, 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, + 0x0048, 0x1078, 0x55c8, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, + 0x0e7e, 0x2071, 0x70ea, 0x7000, 0xa086, 0x0000, 0x0040, 0x1663, + 0x7004, 0xac06, 0x00c0, 0x1654, 0x2079, 0x0030, 0x7804, 0xd0fc, + 0x00c0, 0x1650, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x1636, + 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1642, 0x7803, 0x0002, + 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x1654, + 0x1078, 0x1735, 0x0078, 0x162b, 0x157e, 0x20a9, 0x0009, 0x2009, + 0x70f0, 0x2104, 0xac06, 0x00c0, 0x165e, 0x200a, 0xa188, 0x0003, + 0x00f0, 0x1659, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, + 0xa106, 0x00c0, 0x166e, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, + 0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x710b, + 0x0048, 0x167c, 0x2009, 0x70f0, 0x7112, 0x8cff, 0x00c0, 0x169c, + 0x7908, 0xd1ec, 0x00c0, 0x1690, 0x1078, 0x18f3, 0x0040, 0x1690, + 0x7803, 0x0009, 0x7904, 0xd1fc, 0x0040, 0x168a, 0x7803, 0x0006, + 0x7007, 0x0000, 0x1078, 0x18f3, 0x0040, 0x16c3, 0x7803, 0x0019, + 0x7003, 0x0003, 0x0078, 0x16c3, 0x6010, 0x2068, 0x2d58, 0x6828, + 0xa406, 0x00c0, 0x16a7, 0x682c, 0xa306, 0x0040, 0x16ab, 0x1078, + 0x1bf1, 0x00c0, 0x1680, 0x684c, 0xd0f4, 0x00c0, 0x1680, 0x6824, + 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, + 0x2009, 0x0011, 0x1078, 0x16c4, 0x0040, 0x16c2, 0x2009, 0x0001, + 0x1078, 0x16c4, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x1730, 0xa03e, + 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x16e3, 0x0d7e, 0x2804, 0xac68, + 0x2900, 0x0079, 0x16d3, 0x1712, 0x16f3, 0x16f3, 0x1712, 0x1712, + 0x170a, 0x1712, 0x16f3, 0x1712, 0x16f9, 0x16f9, 0x1712, 0x1712, + 0x1712, 0x1701, 0x16f9, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, + 0x6c20, 0x0d7e, 0xd99c, 0x0040, 0x1715, 0x2804, 0xac68, 0x6f08, + 0x6e0c, 0x0078, 0x1715, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, + 0x1715, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, + 0x1715, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, + 0x00c0, 0x1712, 0x0d7f, 0x1078, 0x1b8d, 0x00c0, 0x16c4, 0xa00e, + 0x0078, 0x1730, 0x0d7f, 0x1078, 0x1286, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10, - 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1c18, - 0x007c, 0x1078, 0x12d5, 0x1078, 0x12d5, 0x127e, 0x2091, 0x2100, + 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1b8d, + 0x007c, 0x1078, 0x1286, 0x1078, 0x1286, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, - 0xa184, 0x0700, 0x00c0, 0x17a3, 0xa184, 0x0003, 0xa086, 0x0003, - 0x0040, 0x17a3, 0x7000, 0x0079, 0x17bd, 0x17c5, 0x17c7, 0x189b, - 0x18ff, 0x1916, 0x17c5, 0x17c5, 0x17c5, 0x1078, 0x12d5, 0x8001, - 0x7002, 0xa184, 0x0880, 0x00c0, 0x17dc, 0x8aff, 0x0040, 0x183b, - 0x2009, 0x0001, 0x1078, 0x1713, 0x0040, 0x1928, 0x2009, 0x0001, - 0x1078, 0x1713, 0x0078, 0x1928, 0x7803, 0x0004, 0x7003, 0x0000, - 0xd1dc, 0x0040, 0x1827, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820, + 0xa184, 0x0700, 0x00c0, 0x1733, 0xa184, 0x0003, 0xa086, 0x0003, + 0x0040, 0x1733, 0x7000, 0x0079, 0x174d, 0x1755, 0x1757, 0x1826, + 0x1888, 0x189f, 0x1755, 0x1755, 0x1755, 0x1078, 0x1286, 0x8001, + 0x7002, 0xa184, 0x0880, 0x00c0, 0x176c, 0x8aff, 0x0040, 0x17c6, + 0x2009, 0x0001, 0x1078, 0x16c4, 0x0040, 0x18b1, 0x2009, 0x0001, + 0x1078, 0x16c4, 0x0078, 0x18b1, 0x7803, 0x0004, 0x7003, 0x0000, + 0xd1dc, 0x0040, 0x17b7, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x7820, 0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, 0x6816, 0x037f, - 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, 0x1c31, 0x2a00, + 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, 0x1ba6, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x6850, - 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1819, 0x684c, - 0xd0e4, 0x0040, 0x1819, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x5bdb, 0x7808, 0xd0ec, 0x00c0, 0x1823, 0x7803, 0x0009, 0x7003, - 0x0004, 0x0078, 0x1928, 0x1078, 0x16b5, 0x0078, 0x1928, 0x057e, - 0x7d0c, 0xd5bc, 0x00c0, 0x182e, 0x1078, 0x753d, 0x057f, 0x1078, - 0x192c, 0x697c, 0x6912, 0x6980, 0x6916, 0x7803, 0x0009, 0x7003, - 0x0003, 0x0078, 0x1928, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, - 0x00c0, 0x1853, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, - 0x184f, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5bdb, 0x1078, - 0x16b5, 0x0078, 0x1928, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, - 0xa183, 0x0000, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa188, - 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, - 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x195b, 0x7803, 0x0004, - 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0040, 0x1874, - 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0070, 0x7004, 0x7007, - 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x5bdb, 0x1078, 0x197e, - 0x0040, 0x184f, 0x7908, 0xd1ec, 0x00c0, 0x1892, 0x2009, 0x0009, - 0x0078, 0x1894, 0x2009, 0x0019, 0x7902, 0x7803, 0x0009, 0x7003, - 0x0003, 0x0078, 0x1928, 0x8001, 0x7002, 0xd194, 0x0040, 0x18ad, - 0x7804, 0xd0fc, 0x00c0, 0x17ad, 0x8aff, 0x0040, 0x1928, 0x2009, - 0x0001, 0x1078, 0x1713, 0x0078, 0x1928, 0xa184, 0x0880, 0x00c0, - 0x18ba, 0x8aff, 0x0040, 0x1928, 0x2009, 0x0001, 0x1078, 0x1713, - 0x0078, 0x1928, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, - 0x18ee, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1c31, 0x0d7e, - 0x0f7e, 0x2d78, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x18de, - 0x6808, 0x2008, 0xa31a, 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, - 0x690c, 0x7814, 0xa101, 0x7816, 0x0078, 0x18ea, 0x6810, 0x2008, - 0xa31a, 0x6814, 0xa213, 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, - 0xa101, 0x7816, 0x0f7f, 0x0d7f, 0x0078, 0x17e7, 0x057e, 0x7d0c, - 0x1078, 0x753d, 0x057f, 0x1078, 0x192c, 0x697c, 0x6912, 0x6980, - 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1928, 0x7803, - 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x1912, 0x6808, - 0x8001, 0x680a, 0x00c0, 0x1912, 0x7004, 0x2060, 0x2009, 0x0048, - 0x1078, 0x5bdb, 0x1078, 0x16b5, 0x0078, 0x1928, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x1912, - 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x16cc, - 0x017f, 0x007f, 0x127f, 0x007c, 0x1078, 0x193d, 0x20e1, 0x9028, - 0x700f, 0x7870, 0x7013, 0x7870, 0x2001, 0x015d, 0x200c, 0x810a, - 0x2102, 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014, - 0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, - 0x00c0, 0x195a, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, - 0x195a, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x195a, 0x8421, - 0x00c0, 0x1944, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, - 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x193d, 0x20e1, 0x7000, - 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, - 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, - 0x0138, 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, - 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x198b, 0xa085, - 0x0001, 0x0078, 0x199d, 0x2001, 0x020a, 0x81ff, 0x0040, 0x1996, - 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, - 0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, - 0x0e7e, 0x2071, 0x788b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, - 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1a22, 0x6934, - 0xa184, 0x0007, 0x0079, 0x19b4, 0x19bc, 0x1a0d, 0x19bc, 0x19bc, - 0x19bc, 0x19f2, 0x19cf, 0x19be, 0x1078, 0x12d5, 0x684c, 0xd0b4, - 0x0040, 0x1b24, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1a15, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x19bc, 0x684c, 0xd0b4, - 0x0040, 0x1b24, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6958, - 0x0078, 0x1a1e, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1a22, - 0x684c, 0xd0b4, 0x0040, 0x1b24, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6958, - 0xa006, 0x682e, 0x682a, 0x0078, 0x1a1e, 0x684c, 0xd0b4, 0x0040, - 0x17a1, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, - 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6926, 0x684c, - 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, - 0xd0fc, 0x10c0, 0x1b28, 0x0e7e, 0x0d7e, 0x2071, 0x788b, 0x7000, - 0xa005, 0x00c0, 0x1a9e, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, - 0x7004, 0x2068, 0x6818, 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, - 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, - 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, - 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, - 0x0007, 0x0040, 0x1a60, 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, - 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, - 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, - 0x00c0, 0x1a77, 0x6928, 0x6810, 0xa106, 0x0040, 0x1a84, 0x037e, - 0x047e, 0x6b14, 0x6c10, 0x1078, 0x1c7c, 0x047f, 0x037f, 0x0040, - 0x1a84, 0x0c7f, 0x0078, 0x1a9e, 0x8aff, 0x00c0, 0x1a8c, 0x0c7f, - 0xa085, 0x0001, 0x0078, 0x1a9e, 0x127e, 0x2091, 0x8000, 0x2079, - 0x0020, 0x2009, 0x0001, 0x1078, 0x1aa2, 0x0040, 0x1a9b, 0x2009, - 0x0001, 0x1078, 0x1aa2, 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, - 0x8aff, 0x0040, 0x1b1d, 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, - 0xa203, 0x0048, 0x1b1c, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, - 0x1acf, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1abf, 0x1afe, - 0x1adf, 0x1adf, 0x1afe, 0x1afe, 0x1af6, 0x1afe, 0x1adf, 0x1afe, - 0x1ae5, 0x1ae5, 0x1afe, 0x1afe, 0x1afe, 0x1aed, 0x1ae5, 0xc0fc, - 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1b02, - 0x0d7e, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1b01, 0x6b08, - 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1b01, 0x6b10, 0x6a14, 0x6d00, - 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x1b01, 0x0d7f, 0x0d7e, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1afe, 0x0d7f, 0x1078, - 0x1c18, 0x00c0, 0x1aa8, 0xa00e, 0x0078, 0x1b1d, 0x0d7f, 0x1078, - 0x12d5, 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, - 0x7902, 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, - 0xa201, 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, - 0x1078, 0x1c18, 0x0078, 0x1b1d, 0xa006, 0x027f, 0x037f, 0x047f, - 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, 0x12d5, 0x1078, 0x12d5, - 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x2079, 0x0020, 0x2071, 0x788b, 0x2b68, 0x6818, 0x2060, - 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1b26, 0x7000, - 0x0079, 0x1b42, 0x1be9, 0x1b46, 0x1bb6, 0x1be7, 0x8001, 0x7002, - 0xd19c, 0x00c0, 0x1b5a, 0x8aff, 0x0040, 0x1b79, 0x2009, 0x0001, - 0x1078, 0x1aa2, 0x0040, 0x1be9, 0x2009, 0x0001, 0x1078, 0x1aa2, - 0x0078, 0x1be9, 0x7803, 0x0004, 0xd194, 0x0040, 0x1b6a, 0x6850, - 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1b6f, 0x684c, 0xc0f5, 0x684e, - 0x0078, 0x1b6f, 0x1078, 0x1c31, 0x6850, 0xc0fd, 0x6852, 0x2a00, - 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, - 0x1be9, 0x711c, 0x81ff, 0x0040, 0x1b8f, 0x7918, 0x7922, 0x7827, - 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, - 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1be9, 0x0f7e, - 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, - 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, - 0x1b9d, 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, - 0x78c6, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, - 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, 0x1be9, 0x8001, 0x7002, - 0xd194, 0x0040, 0x1bcb, 0x7804, 0xd0fc, 0x00c0, 0x1b38, 0xd19c, - 0x00c0, 0x1be5, 0x8aff, 0x0040, 0x1be9, 0x2009, 0x0001, 0x1078, - 0x1aa2, 0x0078, 0x1be9, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, - 0x1c31, 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1bde, - 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1be2, 0x6810, 0xa31a, - 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1b6a, 0x0078, 0x1b6a, 0x1078, - 0x12d5, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, - 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x788b, 0x7000, 0xa086, 0x0000, - 0x0040, 0x1c15, 0x2079, 0x0020, 0x20e1, 0x9040, 0x7804, 0xd0fc, - 0x0040, 0x1bfc, 0x1078, 0x1b28, 0x7000, 0xa086, 0x0000, 0x00c0, - 0x1bfc, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1c0b, 0x20e1, - 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, - 0x8840, 0x2804, 0xa005, 0x00c0, 0x1c2c, 0x6004, 0xa005, 0x0040, - 0x1c2e, 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1c5c, - 0x2044, 0x88ff, 0x1040, 0x12d5, 0x8a51, 0x007c, 0x2051, 0x0000, - 0x007c, 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0, 0x1c4b, 0x2c00, - 0xad06, 0x0040, 0x1c40, 0x6000, 0xa005, 0x00c0, 0x1c40, 0x2d00, - 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, 0x1c6c, 0x2044, - 0x88ff, 0x1040, 0x12d5, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, - 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, - 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x1c51, 0x1c4d, 0x0000, - 0x0000, 0x1c5b, 0x0000, 0x1c51, 0x0000, 0x1c58, 0x1c55, 0x0000, - 0x0000, 0x0000, 0x1c5b, 0x1c58, 0x0000, 0x1c53, 0x1c53, 0x0000, - 0x0000, 0x1c5b, 0x0000, 0x1c53, 0x0000, 0x1c59, 0x1c59, 0x0000, - 0x0000, 0x0000, 0x1c5b, 0x1c59, 0x0a7e, 0x097e, 0x087e, 0x6858, - 0xa055, 0x0040, 0x1d19, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, - 0x1c5c, 0xa986, 0x0007, 0x0040, 0x1c95, 0xa986, 0x000e, 0x0040, - 0x1c95, 0xa986, 0x000f, 0x00c0, 0x1c99, 0x605c, 0xa422, 0x6060, - 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1ca7, 0x0050, 0x1ca1, 0x0078, - 0x1d19, 0x6004, 0xa065, 0x0040, 0x1d19, 0x0078, 0x1c84, 0x2804, - 0xa005, 0x0040, 0x1cc5, 0xac68, 0xd99c, 0x00c0, 0x1cb5, 0x6808, - 0xa422, 0x680c, 0xa31b, 0x0078, 0x1cb9, 0x6810, 0xa422, 0x6814, - 0xa31b, 0x0048, 0x1ce4, 0x2300, 0xa405, 0x0040, 0x1ccb, 0x8a51, - 0x0040, 0x1d19, 0x8840, 0x0078, 0x1ca7, 0x6004, 0xa065, 0x0040, - 0x1d19, 0x0078, 0x1c84, 0x8a51, 0x0040, 0x1d19, 0x8840, 0x2804, - 0xa005, 0x00c0, 0x1cde, 0x6004, 0xa065, 0x0040, 0x1d19, 0x6034, - 0xa0cc, 0x000f, 0xa9c0, 0x1c5c, 0x2804, 0x2040, 0x2b68, 0x6850, - 0xc0fc, 0x6852, 0x0078, 0x1d11, 0x8422, 0x8420, 0x831a, 0xa399, - 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, - 0x1cff, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, - 0x12d5, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x1d0b, 0x6910, - 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x12d5, 0x6800, - 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, - 0x6852, 0x2c00, 0x681a, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, - 0x1d1e, 0x087f, 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, - 0x0005, 0x2004, 0xa084, 0x0007, 0x0079, 0x1d26, 0x1d2e, 0x1d2f, - 0x1d32, 0x1d35, 0x1d3a, 0x1d3d, 0x1d42, 0x1d47, 0x007c, 0x1078, - 0x1b28, 0x007c, 0x1078, 0x17a5, 0x007c, 0x1078, 0x17a5, 0x1078, - 0x1b28, 0x007c, 0x1078, 0x145e, 0x007c, 0x1078, 0x1b28, 0x1078, - 0x145e, 0x007c, 0x1078, 0x17a5, 0x1078, 0x145e, 0x007c, 0x1078, - 0x17a5, 0x1078, 0x1b28, 0x1078, 0x145e, 0x007c, 0x127e, 0x2091, - 0x2300, 0x2079, 0x0200, 0x2071, 0x7b80, 0x2069, 0x7600, 0x2009, - 0x0004, 0x7912, 0x7817, 0x0004, 0x1078, 0x202c, 0x781b, 0x0002, - 0x20e1, 0x8700, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, - 0xa084, 0x0007, 0x0079, 0x1d6c, 0x1d90, 0x1d74, 0x1d78, 0x1d7c, - 0x1d82, 0x1d86, 0x1d8a, 0x1d8e, 0x1078, 0x412f, 0x0078, 0x1d90, - 0x1078, 0x415e, 0x0078, 0x1d90, 0x1078, 0x412f, 0x1078, 0x415e, - 0x0078, 0x1d90, 0x1078, 0x1d92, 0x0078, 0x1d90, 0x1078, 0x1d92, - 0x0078, 0x1d90, 0x1078, 0x1d92, 0x0078, 0x1d90, 0x1078, 0x1d92, - 0x127f, 0x007c, 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, - 0x0040, 0x1d9c, 0x1078, 0x12d5, 0xa184, 0x0030, 0x0040, 0x1dad, - 0x6a00, 0xa286, 0x0003, 0x00c0, 0x1da7, 0x1078, 0x12d5, 0x1078, - 0x3535, 0x20e1, 0x9010, 0x0078, 0x1db9, 0xa184, 0x00c0, 0x0040, - 0x1db3, 0x1078, 0x12d5, 0xa184, 0x0300, 0x0040, 0x1db9, 0x20e1, - 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, - 0x0f7e, 0x2071, 0x7600, 0x7128, 0x2001, 0x7823, 0x2102, 0x2001, - 0x782b, 0x2102, 0xa182, 0x0211, 0x00c8, 0x1dd2, 0x2009, 0x0008, - 0x0078, 0x1dfc, 0xa182, 0x0259, 0x00c8, 0x1dda, 0x2009, 0x0007, - 0x0078, 0x1dfc, 0xa182, 0x02c1, 0x00c8, 0x1de2, 0x2009, 0x0006, - 0x0078, 0x1dfc, 0xa182, 0x0349, 0x00c8, 0x1dea, 0x2009, 0x0005, - 0x0078, 0x1dfc, 0xa182, 0x0421, 0x00c8, 0x1df2, 0x2009, 0x0004, - 0x0078, 0x1dfc, 0xa182, 0x0581, 0x00c8, 0x1dfa, 0x2009, 0x0003, - 0x0078, 0x1dfc, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, - 0x0005, 0x00c8, 0x1e06, 0x7916, 0x0078, 0x1e08, 0x7817, 0x0004, - 0x1078, 0x202c, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, - 0x2200, 0x2061, 0x0100, 0x2071, 0x7600, 0x6024, 0x6026, 0x6033, - 0x00ef, 0x60e7, 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, - 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, - 0x0caf, 0x600f, 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, - 0x762d, 0x2003, 0x0000, 0x2001, 0x762c, 0x2003, 0x0001, 0x007c, - 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, - 0x002c, 0x00c0, 0x1e47, 0xa184, 0x0007, 0x0079, 0x1e4d, 0xa195, - 0x0004, 0xa284, 0x0007, 0x0079, 0x1e4d, 0x1e79, 0x1e55, 0x1e59, - 0x1e5d, 0x1e63, 0x1e67, 0x1e6d, 0x1e73, 0x1078, 0x4698, 0x0078, - 0x1e79, 0x1078, 0x4787, 0x0078, 0x1e79, 0x1078, 0x4787, 0x1078, - 0x4698, 0x0078, 0x1e79, 0x1078, 0x1e7e, 0x0078, 0x1e79, 0x1078, - 0x4698, 0x1078, 0x1e7e, 0x0078, 0x1e79, 0x1078, 0x4787, 0x1078, - 0x1e7e, 0x0078, 0x1e79, 0x1078, 0x4787, 0x1078, 0x4698, 0x1078, - 0x1e7e, 0x027f, 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, - 0x1f32, 0x017e, 0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, - 0xa196, 0xff00, 0x0040, 0x1ead, 0x6030, 0xa084, 0x00ff, 0x810f, - 0xa116, 0x0040, 0x1ead, 0x7130, 0xd18c, 0x00c0, 0x1ead, 0x2011, - 0x7652, 0x2214, 0xd2ec, 0x0040, 0x1ea1, 0xc18d, 0x7132, 0x0078, - 0x1ead, 0x6240, 0xa294, 0x0010, 0x0040, 0x1eef, 0x6248, 0xa294, - 0xff00, 0xa296, 0xff00, 0x00c0, 0x1eef, 0x037e, 0x73b8, 0x2011, - 0x8013, 0x1078, 0x2d02, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, - 0x7652, 0x220c, 0xd1a4, 0x0040, 0x1ed7, 0x017e, 0x2009, 0x0001, - 0x2011, 0x0100, 0x1078, 0x4666, 0x2019, 0x000e, 0x1078, 0x7484, - 0xa484, 0x00ff, 0xa080, 0x2303, 0x200c, 0xa18c, 0xff00, 0x810f, - 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, 0x74ec, 0x017f, 0xd1ac, - 0x00c0, 0x1ee0, 0x2019, 0x0004, 0x1078, 0x226d, 0x0078, 0x1eef, - 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078, 0x37d7, 0x00c0, - 0x1eeb, 0x1078, 0x35db, 0x8108, 0x00f0, 0x1ee5, 0x157f, 0x0c7f, - 0x047f, 0x6043, 0x0000, 0x2009, 0x00f7, 0x1078, 0x359e, 0x0f7e, - 0x2079, 0x7849, 0x783c, 0xa086, 0x0000, 0x0040, 0x1f07, 0x6027, - 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, - 0x2011, 0x0003, 0x1078, 0x5772, 0x2011, 0x0002, 0x1078, 0x577c, - 0x1078, 0x5688, 0x1078, 0x459d, 0x037e, 0x2019, 0x0000, 0x1078, - 0x571a, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001, 0x7600, 0x2014, - 0xa296, 0x0004, 0x00c0, 0x1f2a, 0xd19c, 0x00c0, 0x1f2a, 0x6228, - 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x7620, 0x2003, 0x0000, - 0x6027, 0x0020, 0xd194, 0x0040, 0x1fd3, 0x0f7e, 0x2079, 0x7849, - 0x783c, 0xa086, 0x0001, 0x00c0, 0x1f56, 0x017e, 0x6027, 0x0004, - 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, - 0x2079, 0x7836, 0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4c2c, - 0x1078, 0x4cec, 0x017f, 0x0f7f, 0x0078, 0x1fd3, 0x0f7f, 0x017e, - 0x6220, 0xd2b4, 0x0040, 0x1f8b, 0x1078, 0x459d, 0x1078, 0x5534, - 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, - 0x0040, 0x1f6e, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, - 0x2061, 0x7836, 0x6028, 0xa09a, 0x0002, 0x00c8, 0x1f7e, 0x8000, - 0x602a, 0x0c7f, 0x1078, 0x5526, 0x0078, 0x1fd2, 0x2019, 0x783f, - 0x2304, 0xa065, 0x0040, 0x1f88, 0x2009, 0x0027, 0x1078, 0x5bdb, - 0x0c7f, 0x0078, 0x1fd2, 0xd2bc, 0x0040, 0x1fd2, 0x1078, 0x45ab, - 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, - 0xa084, 0x4000, 0x0040, 0x1fa0, 0x6803, 0x1000, 0x6803, 0x0000, - 0x0d7f, 0x0c7e, 0x2061, 0x7836, 0x6044, 0xa09a, 0x0002, 0x00c8, - 0x1fc1, 0x8000, 0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1fd2, - 0x1078, 0x45a2, 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, - 0x1fbd, 0x6017, 0x0012, 0x0078, 0x1fd2, 0x6017, 0x0016, 0x0078, - 0x1fd2, 0x037e, 0x2019, 0x0001, 0x1078, 0x571a, 0x037f, 0x2019, - 0x7845, 0x2304, 0xa065, 0x0040, 0x1fd1, 0x2009, 0x004f, 0x1078, - 0x5bdb, 0x0c7f, 0x017f, 0xd19c, 0x0040, 0x1ffb, 0x017e, 0x6028, - 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, 0x5772, 0x2011, 0x0002, - 0x1078, 0x577c, 0x1078, 0x5688, 0x1078, 0x459d, 0x037e, 0x2019, - 0x0000, 0x1078, 0x571a, 0x037f, 0x60e3, 0x0000, 0x1078, 0x755b, - 0x1078, 0x7579, 0x2001, 0x7600, 0x2003, 0x0004, 0x6027, 0x0008, - 0x1078, 0x11c6, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, - 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x7600, 0x71b0, 0x70b2, 0xa116, 0x0040, 0x2025, 0x81ff, 0x0040, - 0x2017, 0x2011, 0x8011, 0x1078, 0x2d02, 0x0078, 0x2025, 0x2011, - 0x8012, 0x1078, 0x2d02, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, - 0x0028, 0x1078, 0x226d, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, - 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, - 0x2061, 0x0100, 0xa190, 0x2047, 0x2204, 0x60f2, 0xa192, 0x0005, - 0x00c8, 0x203e, 0xa190, 0x2050, 0x0078, 0x2040, 0x2011, 0x2054, - 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x0840, - 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, - 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, - 0x00a0, 0x2028, 0x2130, 0xa094, 0xff00, 0x00c0, 0x2062, 0x81ff, - 0x0040, 0x2066, 0x1078, 0x42e2, 0x0078, 0x206d, 0xa080, 0x2303, - 0x200c, 0xa18c, 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x2303, - 0x200c, 0xa18c, 0x00ff, 0x007c, 0x2094, 0x2098, 0x209c, 0x20a2, - 0x20a8, 0x20ae, 0x20b4, 0x20bc, 0x20c4, 0x20ca, 0x20d0, 0x20d8, - 0x20e0, 0x20e8, 0x20f0, 0x20fa, 0x2104, 0x2104, 0x2104, 0x2104, - 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, - 0x2104, 0x2104, 0x2104, 0x2104, 0x107e, 0x007e, 0x0078, 0x211d, - 0x107e, 0x007e, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1d64, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d1f, 0x1078, 0x1d64, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d1f, - 0x1078, 0x1d64, 0x0078, 0x211d, 0x0005, 0x0078, 0x2104, 0xb084, - 0x003c, 0x8004, 0x8004, 0x0079, 0x210d, 0x211d, 0x209a, 0x209e, - 0x20a4, 0x20aa, 0x20b0, 0x20b6, 0x20be, 0x20c6, 0x20cc, 0x20d2, - 0x20da, 0x20e2, 0x20ea, 0x20f2, 0x20fc, 0x0008, 0x2107, 0x007f, - 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, 0x027e, 0x2041, 0x007e, - 0x70bc, 0xd09c, 0x0040, 0x212e, 0x2041, 0x007f, 0x2001, 0x010c, - 0x203c, 0x727c, 0x82ff, 0x0040, 0x2179, 0x037e, 0x738c, 0xa38e, - 0xffff, 0x00c0, 0x213d, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7cc0, - 0x2c04, 0xa38c, 0x0001, 0x0040, 0x214a, 0xa084, 0xff00, 0x8007, - 0x0078, 0x214c, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x216e, 0xa08e, - 0x00ff, 0x0040, 0x2174, 0x2009, 0x0000, 0x1078, 0x2059, 0x1078, - 0x37a0, 0x00c0, 0x2171, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x00c0, 0x2168, 0x1078, 0x21cb, 0x0040, 0x2171, 0x0078, 0x216e, - 0x1078, 0x22cf, 0x1078, 0x21f2, 0x0040, 0x2171, 0x8318, 0x0078, - 0x213d, 0x738e, 0x0078, 0x2176, 0x708f, 0xffff, 0x037f, 0x0078, - 0x21c8, 0xa780, 0x2303, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x708c, - 0xa096, 0xffff, 0x0040, 0x218b, 0xa812, 0x00c8, 0x219b, 0x708f, - 0xffff, 0x0078, 0x21c5, 0x2009, 0x0000, 0x70bc, 0xd09c, 0x0040, - 0x2196, 0xd094, 0x0040, 0x2196, 0x2009, 0x007e, 0x2100, 0xa802, - 0x20a8, 0x0078, 0x219f, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, - 0x157e, 0x017e, 0xa106, 0x0040, 0x21bc, 0x1078, 0x37a0, 0x00c0, - 0x21c5, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x21b6, - 0x1078, 0x21cb, 0x0040, 0x21c5, 0x0078, 0x21bc, 0x1078, 0x22cf, - 0x1078, 0x21f2, 0x0040, 0x21c5, 0x017f, 0x8108, 0x157f, 0x00f0, - 0x219f, 0x708f, 0xffff, 0x0078, 0x21c8, 0x017f, 0x157f, 0x718e, - 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, - 0x1078, 0x5b4e, 0x0040, 0x21ed, 0x2d00, 0x601a, 0x601f, 0x0001, - 0x2001, 0x0000, 0x1078, 0x376f, 0x2001, 0x0000, 0x1078, 0x3783, - 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, - 0x0004, 0x1078, 0x5bdb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, - 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, - 0x5b4e, 0x0040, 0x2214, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, 0x127e, - 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, - 0x1078, 0x5bdb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x027e, 0x2009, 0x0080, 0x1078, 0x37a0, 0x00c0, - 0x2227, 0x1078, 0x222a, 0x0040, 0x2227, 0x70c3, 0xffff, 0x027f, - 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, - 0x5b4e, 0x0040, 0x224c, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, 0x127e, - 0x2091, 0x8000, 0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, - 0x1078, 0x5bdb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x0d7e, 0x2009, 0x007f, 0x1078, 0x37a0, 0x00c0, - 0x226a, 0x2c68, 0x1078, 0x5b4e, 0x0040, 0x226a, 0x2d00, 0x601a, - 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5bdb, - 0xa085, 0x0001, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, - 0x037e, 0x027e, 0x1078, 0x491b, 0x1078, 0x48cb, 0x1078, 0x60a8, - 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x37d7, 0x00c0, - 0x2285, 0x1078, 0x3958, 0x1078, 0x35db, 0x017f, 0x8108, 0x00f0, - 0x227c, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, - 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, - 0x2019, 0x0029, 0x1078, 0x4914, 0x1078, 0x4857, 0x2c08, 0x1078, - 0x7326, 0x017f, 0x2e60, 0x1078, 0x3958, 0xa186, 0x007f, 0x0040, - 0x22ab, 0x1078, 0x35db, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, - 0x007c, 0x0e7e, 0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, - 0x00c0, 0x22c5, 0x2071, 0x7600, 0x7088, 0xa005, 0x0040, 0x22c2, - 0x8001, 0x708a, 0x007f, 0x0e7f, 0x007c, 0x2071, 0x7600, 0x70c4, - 0xa005, 0x0040, 0x22c2, 0x8001, 0x70c6, 0x0078, 0x22c2, 0x6000, + 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17a9, 0x684c, + 0xd0e4, 0x0040, 0x17a9, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, + 0x55c8, 0x7808, 0xd0ec, 0x00c0, 0x17b3, 0x7803, 0x0009, 0x7003, + 0x0004, 0x0078, 0x18b1, 0x1078, 0x1666, 0x0078, 0x18b1, 0x057e, + 0x7d0c, 0x1078, 0x6de1, 0x057f, 0x697c, 0x6912, 0x6980, 0x6916, + 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x18b1, 0x684c, 0xc0f5, + 0x684e, 0x7814, 0xa005, 0x00c0, 0x17de, 0x7003, 0x0000, 0x6808, + 0x8001, 0x680a, 0x00c0, 0x17da, 0x7004, 0x2060, 0x2009, 0x0048, + 0x1078, 0x55c8, 0x1078, 0x1666, 0x0078, 0x18b1, 0x7814, 0x6910, + 0xa102, 0x6812, 0x6914, 0xa183, 0x0000, 0x6816, 0x7814, 0x7908, + 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, + 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, + 0x18b5, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, + 0xd0fc, 0x0040, 0x17ff, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, + 0x0070, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, + 0x55c8, 0x1078, 0x18f3, 0x0040, 0x17da, 0x7908, 0xd1ec, 0x00c0, + 0x181d, 0x2009, 0x0009, 0x0078, 0x181f, 0x2009, 0x0019, 0x7902, + 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x18b1, 0x8001, 0x7002, + 0xd194, 0x0040, 0x1838, 0x7804, 0xd0fc, 0x00c0, 0x173d, 0x8aff, + 0x0040, 0x18b1, 0x2009, 0x0001, 0x1078, 0x16c4, 0x0078, 0x18b1, + 0xa184, 0x0880, 0x00c0, 0x1845, 0x8aff, 0x0040, 0x18b1, 0x2009, + 0x0001, 0x1078, 0x16c4, 0x0078, 0x18b1, 0x7803, 0x0004, 0x7003, + 0x0000, 0xd1dc, 0x0040, 0x1879, 0x027e, 0x037e, 0x6b28, 0x6a2c, + 0x1078, 0x1ba6, 0x0d7e, 0x0f7e, 0x2d78, 0x2804, 0xac68, 0x6034, + 0xd09c, 0x00c0, 0x1869, 0x6808, 0x2008, 0xa31a, 0x680c, 0xa213, + 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101, 0x7816, 0x0078, + 0x1875, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213, 0x7810, 0xa100, + 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f, 0x0d7f, 0x0078, + 0x1777, 0x057e, 0x7d0c, 0x1078, 0x6de1, 0x057f, 0x697c, 0x6912, + 0x6980, 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x18b1, + 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x189b, + 0x6808, 0x8001, 0x680a, 0x00c0, 0x189b, 0x7004, 0x2060, 0x2009, + 0x0048, 0x1078, 0x55c8, 0x1078, 0x1666, 0x0078, 0x18b1, 0x7803, + 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, + 0x189b, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, + 0x167d, 0x017f, 0x007f, 0x127f, 0x007c, 0x3c00, 0x007e, 0x0e7e, + 0x2071, 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x2001, 0x0138, + 0x2014, 0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, + 0xd3dc, 0x00c0, 0x18db, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, + 0x00c0, 0x18db, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x18db, + 0x8421, 0x00c0, 0x18c5, 0x20e1, 0x7000, 0x7324, 0x7420, 0x7028, + 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f, 0x0100, + 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202, 0x0e7f, + 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, 0x7908, 0xa18c, 0x0fff, + 0xa182, 0x0009, 0x0048, 0x1900, 0xa085, 0x0001, 0x0078, 0x1912, + 0x2001, 0x020a, 0x81ff, 0x0040, 0x190b, 0x20e1, 0x6000, 0x200c, + 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, 0x200c, 0x200c, 0x7003, + 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, 0x0e7e, 0x2071, 0x710b, + 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, 0xa280, 0x0004, 0x206c, + 0x694c, 0xd1dc, 0x00c0, 0x1997, 0x6934, 0xa184, 0x0007, 0x0079, + 0x1929, 0x1931, 0x1982, 0x1931, 0x1931, 0x1931, 0x1967, 0x1944, + 0x1933, 0x1078, 0x1286, 0x684c, 0xd0b4, 0x0040, 0x1a99, 0x6860, + 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, 0x6880, + 0x680e, 0x6958, 0x0078, 0x198a, 0x6834, 0xa084, 0x00ff, 0xa086, + 0x001e, 0x00c0, 0x1931, 0x684c, 0xd0b4, 0x0040, 0x1a99, 0x6860, + 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a, 0x6880, + 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, + 0xa080, 0x1bd1, 0x2004, 0x6832, 0x6958, 0x0078, 0x1993, 0xa18c, + 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1997, 0x684c, 0xd0b4, 0x0040, + 0x1a99, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, + 0xa080, 0x1bd1, 0x2004, 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, + 0x0078, 0x1993, 0x684c, 0xd0b4, 0x0040, 0x1731, 0x6958, 0xa006, + 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, 0xa080, + 0x1bd1, 0x2004, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, 0x0d7f, + 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x10c0, 0x1a9d, + 0x0e7e, 0x0d7e, 0x2071, 0x710b, 0x7000, 0xa005, 0x00c0, 0x1a13, + 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068, 0x6818, + 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, + 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, + 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, + 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, 0x0040, 0x19d5, + 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, + 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, + 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x00c0, 0x19ec, 0x6928, + 0x6810, 0xa106, 0x0040, 0x19f9, 0x037e, 0x047e, 0x6b14, 0x6c10, + 0x1078, 0x1bf1, 0x047f, 0x037f, 0x0040, 0x19f9, 0x0c7f, 0x0078, + 0x1a13, 0x8aff, 0x00c0, 0x1a01, 0x0c7f, 0xa085, 0x0001, 0x0078, + 0x1a13, 0x127e, 0x2091, 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, + 0x1078, 0x1a17, 0x0040, 0x1a10, 0x2009, 0x0001, 0x1078, 0x1a17, + 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, + 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, 0x8aff, 0x0040, 0x1a92, + 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, 0xa203, 0x0048, 0x1a91, + 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1a44, 0x0d7e, 0x2804, + 0xac68, 0x2900, 0x0079, 0x1a34, 0x1a73, 0x1a54, 0x1a54, 0x1a73, + 0x1a73, 0x1a6b, 0x1a73, 0x1a54, 0x1a73, 0x1a5a, 0x1a5a, 0x1a73, + 0x1a73, 0x1a73, 0x1a62, 0x1a5a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, + 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1a77, 0x0d7e, 0x2804, 0xac68, + 0x6f08, 0x6e0c, 0x0078, 0x1a76, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, + 0x0078, 0x1a76, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, + 0x0078, 0x1a76, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, + 0x001e, 0x00c0, 0x1a73, 0x0d7f, 0x1078, 0x1b8d, 0x00c0, 0x1a1d, + 0xa00e, 0x0078, 0x1a92, 0x0d7f, 0x1078, 0x1286, 0x0d7f, 0x7b22, + 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, + 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c, + 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x1b8d, 0x0078, + 0x1a92, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f, + 0x007c, 0x1078, 0x1286, 0x1078, 0x1286, 0x127e, 0x2091, 0x2200, + 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, + 0x2071, 0x710b, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, + 0xa184, 0x0700, 0x00c0, 0x1a9b, 0x7000, 0x0079, 0x1ab7, 0x1b5e, + 0x1abb, 0x1b2b, 0x1b5c, 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1acf, + 0x8aff, 0x0040, 0x1aee, 0x2009, 0x0001, 0x1078, 0x1a17, 0x0040, + 0x1b5e, 0x2009, 0x0001, 0x1078, 0x1a17, 0x0078, 0x1b5e, 0x7803, + 0x0004, 0xd194, 0x0040, 0x1adf, 0x6850, 0xc0fc, 0x6852, 0x8aff, + 0x00c0, 0x1ae4, 0x684c, 0xc0f5, 0x684e, 0x0078, 0x1ae4, 0x1078, + 0x1ba6, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, + 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, 0x1b5e, 0x711c, 0x81ff, + 0x0040, 0x1b04, 0x7918, 0x7922, 0x7827, 0x0000, 0x7803, 0x0001, + 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, 0x700e, 0x7010, 0xa081, + 0x0000, 0x7012, 0x0078, 0x1b5e, 0x0f7e, 0x027e, 0x781c, 0x007e, + 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, + 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, 0x1b12, 0x79c8, 0x007f, + 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, 0x78c6, 0xa284, 0x0004, + 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003, + 0x0000, 0x0078, 0x1b5e, 0x8001, 0x7002, 0xd194, 0x0040, 0x1b40, + 0x7804, 0xd0fc, 0x00c0, 0x1aad, 0xd19c, 0x00c0, 0x1b5a, 0x8aff, + 0x0040, 0x1b5e, 0x2009, 0x0001, 0x1078, 0x1a17, 0x0078, 0x1b5e, + 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1ba6, 0x0d7e, 0x2804, + 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1b53, 0x6808, 0xa31a, 0x680c, + 0xa213, 0x0078, 0x1b57, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, + 0x0078, 0x1adf, 0x0078, 0x1adf, 0x1078, 0x1286, 0x0c7f, 0x0d7f, + 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, + 0x2071, 0x710b, 0x7000, 0xa086, 0x0000, 0x0040, 0x1b8a, 0x2079, + 0x0020, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x0040, 0x1b71, 0x1078, + 0x1a9d, 0x7000, 0xa086, 0x0000, 0x00c0, 0x1b71, 0x7803, 0x0004, + 0x7804, 0xd0ac, 0x00c0, 0x1b80, 0x20e1, 0x9040, 0x7803, 0x0002, + 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, 0x8840, 0x2804, 0xa005, + 0x00c0, 0x1ba1, 0x6004, 0xa005, 0x0040, 0x1ba3, 0x681a, 0x2060, + 0x6034, 0xa084, 0x000f, 0xa080, 0x1bd1, 0x2044, 0x88ff, 0x1040, + 0x1286, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8841, + 0x2804, 0xa005, 0x00c0, 0x1bc0, 0x2c00, 0xad06, 0x0040, 0x1bb5, + 0x6000, 0xa005, 0x00c0, 0x1bb5, 0x2d00, 0x2060, 0x681a, 0x6034, + 0xa084, 0x000f, 0xa080, 0x1be1, 0x2044, 0x88ff, 0x1040, 0x1286, + 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, + 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, + 0x0000, 0x0000, 0x1bc6, 0x1bc2, 0x0000, 0x0000, 0x1bd0, 0x0000, + 0x1bc6, 0x0000, 0x1bcd, 0x1bca, 0x0000, 0x0000, 0x0000, 0x1bd0, + 0x1bcd, 0x0000, 0x1bc8, 0x1bc8, 0x0000, 0x0000, 0x1bd0, 0x0000, + 0x1bc8, 0x0000, 0x1bce, 0x1bce, 0x0000, 0x0000, 0x0000, 0x1bd0, + 0x1bce, 0x0a7e, 0x097e, 0x087e, 0x6858, 0xa055, 0x0040, 0x1c8e, + 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1bd1, 0xa986, 0x0007, + 0x0040, 0x1c0a, 0xa986, 0x000e, 0x0040, 0x1c0a, 0xa986, 0x000f, + 0x00c0, 0x1c0e, 0x605c, 0xa422, 0x6060, 0xa31a, 0x2804, 0xa045, + 0x00c0, 0x1c1c, 0x0050, 0x1c16, 0x0078, 0x1c8e, 0x6004, 0xa065, + 0x0040, 0x1c8e, 0x0078, 0x1bf9, 0x2804, 0xa005, 0x0040, 0x1c3a, + 0xac68, 0xd99c, 0x00c0, 0x1c2a, 0x6808, 0xa422, 0x680c, 0xa31b, + 0x0078, 0x1c2e, 0x6810, 0xa422, 0x6814, 0xa31b, 0x0048, 0x1c59, + 0x2300, 0xa405, 0x0040, 0x1c40, 0x8a51, 0x0040, 0x1c8e, 0x8840, + 0x0078, 0x1c1c, 0x6004, 0xa065, 0x0040, 0x1c8e, 0x0078, 0x1bf9, + 0x8a51, 0x0040, 0x1c8e, 0x8840, 0x2804, 0xa005, 0x00c0, 0x1c53, + 0x6004, 0xa065, 0x0040, 0x1c8e, 0x6034, 0xa0cc, 0x000f, 0xa9c0, + 0x1bd1, 0x2804, 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0078, + 0x1c86, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x0d7e, 0x2b68, + 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, 0x1c74, 0x6908, 0x2400, + 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, 0x1286, 0x6800, 0xa420, + 0x6804, 0xa319, 0x0078, 0x1c80, 0x6910, 0x2400, 0xa122, 0x6914, + 0x2300, 0xa11b, 0x1048, 0x1286, 0x6800, 0xa420, 0x6804, 0xa319, + 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, + 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1c93, 0x087f, 0x097f, + 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, + 0x0007, 0x0079, 0x1c9b, 0x1ca3, 0x1ca4, 0x1ca7, 0x1caa, 0x1caf, + 0x1cb2, 0x1cb7, 0x1cbc, 0x007c, 0x1078, 0x1a9d, 0x007c, 0x1078, + 0x1735, 0x007c, 0x1078, 0x1735, 0x1078, 0x1a9d, 0x007c, 0x1078, + 0x140f, 0x007c, 0x1078, 0x1a9d, 0x1078, 0x140f, 0x007c, 0x1078, + 0x1735, 0x1078, 0x140f, 0x007c, 0x1078, 0x1735, 0x1078, 0x1a9d, + 0x1078, 0x140f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, + 0x2071, 0x7380, 0x2069, 0x6f00, 0x2009, 0x0004, 0x7912, 0x7916, + 0x1078, 0x1f8b, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c, + 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x1ce0, + 0x1d04, 0x1ce8, 0x1cec, 0x1cf0, 0x1cf6, 0x1cfa, 0x1cfe, 0x1d02, + 0x1078, 0x3def, 0x0078, 0x1d04, 0x1078, 0x3e1e, 0x0078, 0x1d04, + 0x1078, 0x3def, 0x1078, 0x3e1e, 0x0078, 0x1d04, 0x1078, 0x1d06, + 0x0078, 0x1d04, 0x1078, 0x1d06, 0x0078, 0x1d04, 0x1078, 0x1d06, + 0x0078, 0x1d04, 0x1078, 0x1d06, 0x127f, 0x007c, 0x007e, 0x017e, + 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1d10, 0x1078, 0x1286, + 0xa184, 0x0030, 0x0040, 0x1d21, 0x6a00, 0xa286, 0x0003, 0x00c0, + 0x1d1b, 0x1078, 0x1286, 0x1078, 0x31f5, 0x20e1, 0x9010, 0x0078, + 0x1d2d, 0xa184, 0x00c0, 0x0040, 0x1d27, 0x1078, 0x1286, 0xa184, + 0x0300, 0x0040, 0x1d2d, 0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, + 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071, 0x6f00, 0x7128, + 0x2001, 0x70a3, 0x2102, 0x2001, 0x70ab, 0x2102, 0xa182, 0x0211, + 0x00c8, 0x1d46, 0x2009, 0x0008, 0x0078, 0x1d70, 0xa182, 0x0259, + 0x00c8, 0x1d4e, 0x2009, 0x0007, 0x0078, 0x1d70, 0xa182, 0x02c1, + 0x00c8, 0x1d56, 0x2009, 0x0006, 0x0078, 0x1d70, 0xa182, 0x0349, + 0x00c8, 0x1d5e, 0x2009, 0x0005, 0x0078, 0x1d70, 0xa182, 0x0421, + 0x00c8, 0x1d66, 0x2009, 0x0004, 0x0078, 0x1d70, 0xa182, 0x0581, + 0x00c8, 0x1d6e, 0x2009, 0x0003, 0x0078, 0x1d70, 0x2009, 0x0002, + 0x2079, 0x0200, 0x7912, 0x7916, 0x1078, 0x1f8b, 0x0f7f, 0x0e7f, + 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, + 0x6f00, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb, + 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, + 0x0080, 0x602f, 0x0000, 0x6007, 0x00af, 0x600f, 0x00ff, 0x602b, + 0x002f, 0x127f, 0x007c, 0x2001, 0x6f2b, 0x2003, 0x0000, 0x2001, + 0x6f2a, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e, + 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x1db3, 0xa184, + 0x0007, 0x0079, 0x1db9, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079, + 0x1db9, 0x1de5, 0x1dc1, 0x1dc5, 0x1dc9, 0x1dcf, 0x1dd3, 0x1dd9, + 0x1ddf, 0x1078, 0x42cb, 0x0078, 0x1de5, 0x1078, 0x43ae, 0x0078, + 0x1de5, 0x1078, 0x43ae, 0x1078, 0x42cb, 0x0078, 0x1de5, 0x1078, + 0x1dea, 0x0078, 0x1de5, 0x1078, 0x42cb, 0x1078, 0x1dea, 0x0078, + 0x1de5, 0x1078, 0x43ae, 0x1078, 0x1dea, 0x0078, 0x1de5, 0x1078, + 0x43ae, 0x1078, 0x42cb, 0x1078, 0x1dea, 0x027f, 0x017f, 0x007f, + 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1e97, 0x017e, 0x047e, 0x0c7e, + 0x644c, 0x74b2, 0xa48c, 0xff00, 0xa196, 0xff00, 0x0040, 0x1e19, + 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x1e19, 0x7130, + 0xd18c, 0x00c0, 0x1e19, 0x2011, 0x6f52, 0x2214, 0xd2ec, 0x0040, + 0x1e0d, 0xc18d, 0x7132, 0x0078, 0x1e19, 0x6240, 0xa294, 0x0010, + 0x0040, 0x1e54, 0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x00c0, + 0x1e54, 0x2011, 0x8013, 0x1078, 0x29c6, 0x7130, 0xc185, 0x7132, + 0x2011, 0x6f52, 0x220c, 0xd1a4, 0x0040, 0x1e3c, 0x017e, 0x2009, + 0x0001, 0x2011, 0x0100, 0x1078, 0x4299, 0x2019, 0x000e, 0x1078, + 0x6d28, 0xa484, 0x00ff, 0x1078, 0x1fb0, 0x8127, 0xa006, 0x2009, + 0x000e, 0x1078, 0x6d90, 0x017f, 0xd1ac, 0x00c0, 0x1e45, 0x2019, + 0x0004, 0x1078, 0x2152, 0x0078, 0x1e54, 0x157e, 0x20a9, 0x007e, + 0x2009, 0x0000, 0x1078, 0x3497, 0x00c0, 0x1e50, 0x1078, 0x329b, + 0x8108, 0x00f0, 0x1e4a, 0x157f, 0x0c7f, 0x047f, 0x6043, 0x0000, + 0x2009, 0x00f7, 0x1078, 0x325e, 0x0f7e, 0x2079, 0x70c9, 0x783c, + 0xa086, 0x0000, 0x0040, 0x1e6c, 0x6027, 0x0004, 0x783f, 0x0000, + 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, + 0x515f, 0x2011, 0x0002, 0x1078, 0x5169, 0x1078, 0x5075, 0x1078, + 0x41d0, 0x037e, 0x2019, 0x0000, 0x1078, 0x5107, 0x037f, 0x60e3, + 0x0000, 0x017f, 0x2001, 0x6f00, 0x2014, 0xa296, 0x0004, 0x00c0, + 0x1e8f, 0xd19c, 0x00c0, 0x1e8f, 0x6228, 0xc29d, 0x622a, 0x2003, + 0x0001, 0x2001, 0x6f1e, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, + 0x0040, 0x1f32, 0x0f7e, 0x2079, 0x70c9, 0x783c, 0xa086, 0x0001, + 0x00c0, 0x1ebb, 0x017e, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, + 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x70b6, 0x7807, + 0x0000, 0x7833, 0x0000, 0x1078, 0x484d, 0x1078, 0x48fd, 0x017f, + 0x0f7f, 0x0078, 0x1f32, 0x0f7f, 0x017e, 0x6220, 0xd2b4, 0x0040, + 0x1ef0, 0x1078, 0x41d0, 0x1078, 0x4f45, 0x6027, 0x0004, 0x0d7e, + 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1ed3, 0x6803, + 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x70b6, 0x6028, + 0xa09a, 0x0002, 0x00c8, 0x1ee3, 0x8000, 0x602a, 0x0c7f, 0x1078, + 0x4f37, 0x0078, 0x1f31, 0x2019, 0x70bf, 0x2304, 0xa065, 0x0040, + 0x1eed, 0x2009, 0x0027, 0x1078, 0x55c8, 0x0c7f, 0x0078, 0x1f31, + 0xd2bc, 0x0040, 0x1f31, 0x1078, 0x41de, 0x6017, 0x0010, 0x6027, + 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, + 0x1f05, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, + 0x70b6, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1f26, 0x8000, 0x6046, + 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1f31, 0x1078, 0x41d5, 0xa080, + 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x1f22, 0x6017, 0x0012, + 0x0078, 0x1f31, 0x6017, 0x0016, 0x0078, 0x1f31, 0x2019, 0x70c5, + 0x2304, 0xa065, 0x0040, 0x1f30, 0x2009, 0x004f, 0x1078, 0x55c8, + 0x0c7f, 0x017f, 0xd19c, 0x0040, 0x1f5a, 0x017e, 0x6028, 0xc09c, + 0x602a, 0x2011, 0x0003, 0x1078, 0x515f, 0x2011, 0x0002, 0x1078, + 0x5169, 0x1078, 0x5075, 0x1078, 0x41d0, 0x037e, 0x2019, 0x0000, + 0x1078, 0x5107, 0x037f, 0x60e3, 0x0000, 0x1078, 0x6dff, 0x1078, + 0x6e1d, 0x2001, 0x6f00, 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, + 0x117d, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, 0x017e, + 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x6f00, + 0x71a8, 0x70aa, 0xa116, 0x0040, 0x1f84, 0x81ff, 0x0040, 0x1f76, + 0x2011, 0x8011, 0x1078, 0x29c6, 0x0078, 0x1f84, 0x2011, 0x8012, + 0x1078, 0x29c6, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, + 0x1078, 0x2152, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, 0x027f, + 0x017f, 0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, 0x2061, + 0x0100, 0xa190, 0x1f9e, 0x2204, 0x60f2, 0xa190, 0x1fa7, 0x2204, + 0x60ee, 0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, + 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, + 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, + 0xa080, 0x21d3, 0x200c, 0xa18c, 0xff00, 0x810f, 0x007c, 0xa080, + 0x21d3, 0x200c, 0xa18c, 0x00ff, 0x007c, 0x1fdd, 0x1fe1, 0x1fe5, + 0x1feb, 0x1ff1, 0x1ff7, 0x1ffd, 0x2005, 0x200d, 0x2013, 0x2019, + 0x2021, 0x2029, 0x2031, 0x2039, 0x2043, 0x204d, 0x204d, 0x204d, + 0x204d, 0x204d, 0x204d, 0x204d, 0x204d, 0x204d, 0x204d, 0x204d, + 0x204d, 0x204d, 0x204d, 0x204d, 0x204d, 0x107e, 0x007e, 0x0078, + 0x2066, 0x107e, 0x007e, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, + 0x1da4, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, 0x1da4, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1c94, 0x0078, 0x2066, 0x107e, + 0x007e, 0x1078, 0x1c94, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, + 0x1da4, 0x1078, 0x1c94, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, + 0x1da4, 0x1078, 0x1c94, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, + 0x1cd8, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, 0x1cd8, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1da4, 0x1078, 0x1cd8, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1da4, 0x1078, 0x1cd8, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1c94, 0x1078, 0x1cd8, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1c94, 0x1078, 0x1cd8, 0x0078, + 0x2066, 0x107e, 0x007e, 0x1078, 0x1da4, 0x1078, 0x1c94, 0x1078, + 0x1cd8, 0x0078, 0x2066, 0x107e, 0x007e, 0x1078, 0x1da4, 0x1078, + 0x1c94, 0x1078, 0x1cd8, 0x0078, 0x2066, 0x0005, 0x0078, 0x204d, + 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2056, 0x2066, 0x1fe3, + 0x1fe7, 0x1fed, 0x1ff3, 0x1ff9, 0x1fff, 0x2007, 0x200f, 0x2015, + 0x201b, 0x2023, 0x202b, 0x2033, 0x203b, 0x2045, 0x0008, 0x2050, + 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, 0x027e, 0x2001, + 0x010c, 0x203c, 0x7274, 0x82ff, 0x0040, 0x20bc, 0x037e, 0x7384, + 0xa38e, 0xffff, 0x00c0, 0x207e, 0x2019, 0x0001, 0x8314, 0xa2e0, + 0x74c0, 0x2c04, 0xa38c, 0x0001, 0x0040, 0x208b, 0xa084, 0xff00, + 0x8007, 0x0078, 0x208d, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x20b1, + 0xa08e, 0x0000, 0x0040, 0x20b1, 0xa08e, 0x00ff, 0x0040, 0x20b7, + 0x1078, 0x1fb0, 0x1078, 0x3460, 0x00c0, 0x20b4, 0x6004, 0xa084, + 0x00ff, 0xa086, 0x0006, 0x00c0, 0x20ab, 0x1078, 0x2104, 0x0040, + 0x20b4, 0x0078, 0x20b1, 0x1078, 0x219f, 0x1078, 0x212b, 0x0040, + 0x20b4, 0x8318, 0x0078, 0x207e, 0x7386, 0x0078, 0x20b9, 0x7087, + 0xffff, 0x037f, 0x0078, 0x2101, 0xa780, 0x21d3, 0x203c, 0xa7bc, + 0xff00, 0x873f, 0x20a9, 0x007e, 0x2009, 0x0000, 0x7084, 0xa096, + 0xffff, 0x0040, 0x20d8, 0xa092, 0x007e, 0x0048, 0x20d3, 0x7087, + 0xffff, 0x0078, 0x20fe, 0x2008, 0x2011, 0x007e, 0xa202, 0x20a8, + 0x2700, 0x157e, 0x017e, 0xa106, 0x0040, 0x20f5, 0x1078, 0x3460, + 0x00c0, 0x20fe, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, + 0x20ef, 0x1078, 0x2104, 0x0040, 0x20fe, 0x0078, 0x20f5, 0x1078, + 0x219f, 0x1078, 0x212b, 0x0040, 0x20fe, 0x017f, 0x8108, 0x157f, + 0x00f0, 0x20d8, 0x7087, 0xffff, 0x0078, 0x2101, 0x017f, 0x157f, + 0x7186, 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, + 0x2c68, 0x1078, 0x553b, 0x0040, 0x2126, 0x2d00, 0x601a, 0x601f, + 0x0001, 0x2001, 0x0000, 0x1078, 0x342f, 0x2001, 0x0000, 0x1078, + 0x3443, 0x127e, 0x2091, 0x8000, 0x7080, 0x8000, 0x7082, 0x127f, + 0x2009, 0x0004, 0x1078, 0x55c8, 0xa085, 0x0001, 0x0c7f, 0x0d7f, + 0x077f, 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, + 0x1078, 0x553b, 0x0040, 0x214d, 0x2d00, 0x601a, 0x601f, 0x0001, + 0x2001, 0x0000, 0x1078, 0x342f, 0x2001, 0x0002, 0x1078, 0x3443, + 0x127e, 0x2091, 0x8000, 0x7080, 0x8000, 0x7082, 0x127f, 0x2009, + 0x0002, 0x1078, 0x55c8, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, + 0x017f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, + 0x453c, 0x1078, 0x44ec, 0x1078, 0x59ae, 0x20a9, 0x007e, 0x2009, + 0x0000, 0x017e, 0x1078, 0x3497, 0x00c0, 0x216a, 0x1078, 0x3618, + 0x1078, 0x329b, 0x017f, 0x8108, 0x00f0, 0x2161, 0x027f, 0x037f, + 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, + 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029, 0x1078, + 0x4535, 0x1078, 0x4478, 0x2c08, 0x1078, 0x6bca, 0x017f, 0x2e60, + 0x1078, 0x3618, 0x1078, 0x329b, 0x017f, 0x027f, 0x037f, 0x0c7f, + 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x6f00, 0x7080, 0xa005, + 0x0040, 0x219c, 0x8001, 0x7082, 0x007f, 0x0e7f, 0x007c, 0x6000, 0xc08c, 0x6002, 0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, - 0x157e, 0x81ff, 0x00c0, 0x22e0, 0x20a9, 0x0001, 0x0078, 0x22e4, - 0x20a9, 0x007f, 0x2011, 0x0000, 0x027e, 0xa2e0, 0x7720, 0x2c64, - 0x8cff, 0x0040, 0x22f6, 0x2019, 0x0029, 0x1078, 0x4914, 0x1078, - 0x4857, 0x2c08, 0x1078, 0x7326, 0x1078, 0x3958, 0x027f, 0x8210, - 0x00f0, 0x22e4, 0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, + 0x157e, 0x81ff, 0x00c0, 0x21b0, 0x20a9, 0x0001, 0x0078, 0x21b4, + 0x20a9, 0x007e, 0x2011, 0x0000, 0x027e, 0xa2e0, 0x7020, 0x2c64, + 0x8cff, 0x0040, 0x21c6, 0x2019, 0x0029, 0x1078, 0x4535, 0x1078, + 0x4478, 0x2c08, 0x1078, 0x6bca, 0x1078, 0x3618, 0x027f, 0x8210, + 0x00f0, 0x21b4, 0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, @@ -8783,582 +9813,516 @@ static const u_int16_t ISP2100_RISC_CODE[] = { 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x2071, 0x766d, 0x7003, 0x0002, 0xa006, - 0x7012, 0x7016, 0x703a, 0x703e, 0x7033, 0x767d, 0x7037, 0x767d, - 0x7007, 0x0001, 0x2061, 0x76bd, 0x6003, 0x0002, 0x007c, 0x0090, - 0x242a, 0x0068, 0x242a, 0x2071, 0x766d, 0x2b78, 0x7818, 0xd084, - 0x00c0, 0x242a, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2511, - 0x0079, 0x24ae, 0x007c, 0x2071, 0x766d, 0x7004, 0x0079, 0x2430, - 0x2434, 0x2435, 0x243f, 0x2451, 0x007c, 0x0090, 0x243e, 0x0068, - 0x243e, 0x2b78, 0x7818, 0xd084, 0x0040, 0x245d, 0x007c, 0x2b78, - 0x2061, 0x76bd, 0x6008, 0xa08e, 0x0100, 0x0040, 0x244c, 0xa086, - 0x0200, 0x0040, 0x2509, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, - 0x007a, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x2459, + 0x8000, 0x8000, 0x0000, 0x2071, 0x6f6d, 0x7003, 0x0002, 0xa006, + 0x7012, 0x7016, 0x703a, 0x703e, 0x7033, 0x6f7d, 0x7037, 0x6f7d, + 0x7007, 0x0001, 0x2061, 0x6fbd, 0x6003, 0x0002, 0x007c, 0x0090, + 0x22ea, 0x0068, 0x22ea, 0x2071, 0x6f6d, 0x2b78, 0x7818, 0xd084, + 0x00c0, 0x22ea, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x23d1, + 0x0079, 0x236e, 0x007c, 0x2071, 0x6f6d, 0x7004, 0x0079, 0x22f0, + 0x22f4, 0x22f5, 0x22ff, 0x2311, 0x007c, 0x0090, 0x22fe, 0x0068, + 0x22fe, 0x2b78, 0x7818, 0xd084, 0x0040, 0x231d, 0x007c, 0x2b78, + 0x2061, 0x6fbd, 0x6008, 0xa08e, 0x0100, 0x0040, 0x230c, 0xa086, + 0x0200, 0x0040, 0x23c9, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, + 0x007a, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x2319, 0x007c, 0x2a60, 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, - 0x0040, 0x00c8, 0x2466, 0x61b0, 0x0079, 0x246e, 0x2100, 0xa08a, - 0x0036, 0x00c8, 0x2505, 0x61b0, 0x0079, 0x24ae, 0x24e7, 0x2519, - 0x2521, 0x2525, 0x252d, 0x2533, 0x2537, 0x2540, 0x2544, 0x254c, - 0x2550, 0x2505, 0x2505, 0x2505, 0x2554, 0x2505, 0x2564, 0x257b, - 0x2592, 0x260e, 0x2613, 0x2640, 0x268d, 0x269c, 0x26bd, 0x26f3, - 0x26fd, 0x270a, 0x271d, 0x2735, 0x273e, 0x277b, 0x2781, 0x2505, - 0x2791, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2795, 0x279b, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x27a3, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x27b0, 0x27b6, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x254c, 0x2550, - 0x2505, 0x2505, 0x27c8, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2815, 0x28e2, - 0x28f6, 0x28fd, 0x2960, 0x29bb, 0x29c6, 0x2a08, 0x2a15, 0x2a22, - 0x2a25, 0x27cc, 0x2a4e, 0x2a95, 0x2aa2, 0x2b94, 0x2c7a, 0x2ca1, - 0x2d8d, 0x2d9b, 0x2da8, 0x2de2, 0x713c, 0x0078, 0x24e7, 0x2021, - 0x4000, 0x1078, 0x2cdc, 0x127e, 0x2091, 0x8000, 0x0068, 0x24f4, - 0x7818, 0xd084, 0x0040, 0x24f7, 0x127f, 0x0078, 0x24eb, 0x781b, + 0x0040, 0x00c8, 0x2326, 0x61a8, 0x0079, 0x232e, 0x2100, 0xa08a, + 0x0036, 0x00c8, 0x23c5, 0x61a8, 0x0079, 0x236e, 0x23a7, 0x23d9, + 0x23e1, 0x23e5, 0x23ed, 0x23f3, 0x23f7, 0x2400, 0x2404, 0x240c, + 0x2410, 0x23c5, 0x23c5, 0x23c5, 0x2414, 0x23c5, 0x2424, 0x243b, + 0x2452, 0x24ce, 0x24d3, 0x2500, 0x254d, 0x255c, 0x257d, 0x25b3, + 0x25bd, 0x25ca, 0x25dd, 0x25f5, 0x25fe, 0x263b, 0x2641, 0x23c5, + 0x264c, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x2650, 0x2656, + 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, + 0x265e, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x266b, 0x2671, + 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, + 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, + 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x240c, 0x2410, + 0x23c5, 0x23c5, 0x2683, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, + 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x23c5, 0x26d0, 0x279d, + 0x27b1, 0x27b8, 0x281b, 0x286c, 0x2877, 0x28b9, 0x28c6, 0x28d3, + 0x28d6, 0x2687, 0x28ff, 0x2946, 0x23c5, 0x23c5, 0x23c5, 0x23c5, + 0x2a4d, 0x2a5b, 0x2a68, 0x2aa2, 0x713c, 0x0078, 0x23a7, 0x2021, + 0x4000, 0x1078, 0x29a0, 0x127e, 0x2091, 0x8000, 0x0068, 0x23b4, + 0x7818, 0xd084, 0x0040, 0x23b7, 0x127f, 0x0078, 0x23ab, 0x781b, 0x0001, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, - 0x24e9, 0x2021, 0x4002, 0x0078, 0x24e9, 0x2021, 0x4003, 0x0078, - 0x24e9, 0x2021, 0x4005, 0x0078, 0x24e9, 0x2021, 0x4006, 0x0078, - 0x24e9, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, - 0x2ceb, 0x7823, 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, - 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2cef, 0x7924, 0x7828, 0x2114, - 0x200a, 0x0078, 0x24e7, 0x7924, 0x2114, 0x0078, 0x24e7, 0x2099, - 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x24e7, - 0x7824, 0x2060, 0x0078, 0x2556, 0x2009, 0x0001, 0x2011, 0x000f, - 0x2019, 0x0007, 0x0078, 0x24e7, 0x7d38, 0x7c3c, 0x0078, 0x251b, - 0x7d38, 0x7c3c, 0x0078, 0x2527, 0x2061, 0x1000, 0x610c, 0xa006, - 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, 0x2558, 0x2010, 0xa005, - 0x0040, 0x24e7, 0x0078, 0x250d, 0x2061, 0x7651, 0x7824, 0x7930, - 0xa11a, 0x00c8, 0x2515, 0x8019, 0x0040, 0x2515, 0x604a, 0x6142, + 0x23a9, 0x2021, 0x4002, 0x0078, 0x23a9, 0x2021, 0x4003, 0x0078, + 0x23a9, 0x2021, 0x4005, 0x0078, 0x23a9, 0x2021, 0x4006, 0x0078, + 0x23a9, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, + 0x29af, 0x7823, 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, + 0x7a2c, 0x7824, 0x7930, 0x0078, 0x29b3, 0x7924, 0x7828, 0x2114, + 0x200a, 0x0078, 0x23a7, 0x7924, 0x2114, 0x0078, 0x23a7, 0x2099, + 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x23a7, + 0x7824, 0x2060, 0x0078, 0x2416, 0x2009, 0x0001, 0x2011, 0x000f, + 0x2019, 0x0000, 0x0078, 0x23a7, 0x7d38, 0x7c3c, 0x0078, 0x23db, + 0x7d38, 0x7c3c, 0x0078, 0x23e7, 0x2061, 0x1000, 0x610c, 0xa006, + 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, 0x2418, 0x2010, 0xa005, + 0x0040, 0x23a7, 0x0078, 0x23cd, 0x2061, 0x6f51, 0x7824, 0x7930, + 0xa11a, 0x00c8, 0x23d5, 0x8019, 0x0040, 0x23d5, 0x604a, 0x6142, 0x782c, 0x6052, 0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, - 0x3c23, 0x0078, 0x24e7, 0x2061, 0x7651, 0x7824, 0x7930, 0xa11a, - 0x00c8, 0x2515, 0x8019, 0x0040, 0x2515, 0x604e, 0x6146, 0x782c, - 0x6062, 0x7828, 0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x39f9, - 0x0078, 0x24e7, 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2511, 0x7924, - 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0x7674, 0x41a1, 0x1078, - 0x2cb3, 0x0040, 0x2511, 0x2009, 0x0020, 0x1078, 0x2ceb, 0x701b, - 0x25aa, 0x007c, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, - 0x0040, 0x25b6, 0xa096, 0x0019, 0x00c0, 0x2511, 0x810f, 0xa18c, - 0x00ff, 0x0040, 0x2511, 0x710e, 0x700c, 0x8001, 0x0040, 0x25e7, - 0x700e, 0x1078, 0x2cb3, 0x0040, 0x2511, 0x2009, 0x0020, 0x2061, - 0x76bd, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, - 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x2ceb, 0x701b, - 0x25da, 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, - 0x25e5, 0xa096, 0x000a, 0x00c0, 0x2511, 0x0078, 0x25bc, 0x7010, - 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x36d4, 0x00c0, 0x25f5, - 0x7007, 0x0003, 0x701b, 0x25f7, 0x007c, 0x1078, 0x3abc, 0x127e, - 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0x7674, 0x530a, 0x2100, + 0x38e3, 0x0078, 0x23a7, 0x2061, 0x6f51, 0x7824, 0x7930, 0xa11a, + 0x00c8, 0x23d5, 0x8019, 0x0040, 0x23d5, 0x604e, 0x6146, 0x782c, + 0x6062, 0x7828, 0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x36b9, + 0x0078, 0x23a7, 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x23d1, 0x7924, + 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0x6f74, 0x41a1, 0x1078, + 0x2977, 0x0040, 0x23d1, 0x2009, 0x0020, 0x1078, 0x29af, 0x701b, + 0x246a, 0x007c, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, + 0x0040, 0x2476, 0xa096, 0x0019, 0x00c0, 0x23d1, 0x810f, 0xa18c, + 0x00ff, 0x0040, 0x23d1, 0x710e, 0x700c, 0x8001, 0x0040, 0x24a7, + 0x700e, 0x1078, 0x2977, 0x0040, 0x23d1, 0x2009, 0x0020, 0x2061, + 0x6fbd, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, + 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x29af, 0x701b, + 0x249a, 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, + 0x24a5, 0xa096, 0x000a, 0x00c0, 0x23d1, 0x0078, 0x247c, 0x7010, + 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x3394, 0x00c0, 0x24b5, + 0x7007, 0x0003, 0x701b, 0x24b7, 0x007c, 0x1078, 0x377c, 0x127e, + 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0x6f74, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, - 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, 0x2cef, 0x6198, 0x7824, - 0x609a, 0x0078, 0x24e7, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, + 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, 0x29b3, 0x6190, 0x7824, + 0x6092, 0x0078, 0x23a7, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, - 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2ccb, 0x0040, 0x2515, 0x7c28, - 0x7d2c, 0x1078, 0x391b, 0xd28c, 0x00c0, 0x2652, 0x1078, 0x38ab, - 0x0078, 0x2654, 0x1078, 0x38e7, 0x00c0, 0x267e, 0x2061, 0x7d00, - 0x127e, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000, 0x0040, 0x266c, - 0x6010, 0xa06d, 0x0040, 0x266c, 0x683c, 0xa406, 0x00c0, 0x266c, - 0x6840, 0xa506, 0x0040, 0x2677, 0x127f, 0xace0, 0x0008, 0x2001, - 0x7615, 0x2004, 0xac02, 0x00c8, 0x2511, 0x0078, 0x2658, 0x1078, - 0x66dd, 0x127f, 0x0040, 0x2511, 0x0078, 0x24e7, 0xa00e, 0x2001, - 0x0005, 0x1078, 0x3abc, 0x127e, 0x2091, 0x8000, 0x1078, 0x6af2, - 0x1078, 0x3a2c, 0x127f, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, - 0x1078, 0x2ccb, 0x0040, 0x2515, 0x1078, 0x3860, 0x1078, 0x392c, - 0x0040, 0x2511, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x1078, - 0x2ccb, 0x0040, 0x2515, 0x2031, 0x000f, 0x1078, 0x3860, 0x8631, - 0x00c8, 0x26a5, 0x2019, 0x0005, 0x1078, 0x394d, 0x0040, 0x2511, - 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2515, 0x8003, 0x800b, 0x810b, - 0xa108, 0x1078, 0x452d, 0x0078, 0x24e7, 0x127e, 0x2091, 0x8000, - 0x81ff, 0x00c0, 0x26ed, 0x2029, 0x00ff, 0x644c, 0x2400, 0xa506, - 0x0040, 0x26e7, 0x2508, 0x1078, 0x37d7, 0x00c0, 0x26e7, 0x2031, - 0x000f, 0x1078, 0x3860, 0x8631, 0x00c8, 0x26d1, 0x2019, 0x0004, - 0x1078, 0x394d, 0x0040, 0x26ed, 0x7824, 0xa08a, 0x1000, 0x00c8, - 0x26f0, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x452d, 0x8529, - 0x00c8, 0x26c6, 0x127f, 0x0078, 0x24e7, 0x127f, 0x0078, 0x2511, - 0x127f, 0x0078, 0x2515, 0x1078, 0x2ccb, 0x0040, 0x2515, 0x1078, - 0x3890, 0x1078, 0x391b, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, - 0x1078, 0x2ccb, 0x0040, 0x2515, 0x1078, 0x3879, 0x1078, 0x391b, - 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2ccb, 0x0040, - 0x2515, 0x1078, 0x38ea, 0x0040, 0x2511, 0x1078, 0x371c, 0x1078, - 0x38a4, 0x1078, 0x391b, 0x0078, 0x24e7, 0x1078, 0x2ccb, 0x0040, - 0x2515, 0x1078, 0x3860, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078, - 0x3958, 0x0c7f, 0x1078, 0x4914, 0x1078, 0x4857, 0x2c08, 0x1078, - 0x7326, 0x1078, 0x391b, 0x0078, 0x24e7, 0x1078, 0x2ccb, 0x0040, - 0x2515, 0x1078, 0x391b, 0x2208, 0x0078, 0x24e7, 0x157e, 0x0d7e, - 0x0e7e, 0x2069, 0x76ff, 0x6810, 0x6914, 0xa10a, 0x00c8, 0x274a, + 0x81ff, 0x00c0, 0x23d1, 0x1078, 0x298f, 0x0040, 0x23d5, 0x7c28, + 0x7d2c, 0x1078, 0x35db, 0xd28c, 0x00c0, 0x2512, 0x1078, 0x356b, + 0x0078, 0x2514, 0x1078, 0x35a7, 0x00c0, 0x253e, 0x2061, 0x7500, + 0x127e, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000, 0x0040, 0x252c, + 0x6010, 0xa06d, 0x0040, 0x252c, 0x683c, 0xa406, 0x00c0, 0x252c, + 0x6840, 0xa506, 0x0040, 0x2537, 0x127f, 0xace0, 0x0008, 0x2001, + 0x6f15, 0x2004, 0xac02, 0x00c8, 0x23d1, 0x0078, 0x2518, 0x1078, + 0x5fe3, 0x127f, 0x0040, 0x23d1, 0x0078, 0x23a7, 0xa00e, 0x2001, + 0x0005, 0x1078, 0x377c, 0x127e, 0x2091, 0x8000, 0x1078, 0x63a3, + 0x1078, 0x36ec, 0x127f, 0x0078, 0x23a7, 0x81ff, 0x00c0, 0x23d1, + 0x1078, 0x298f, 0x0040, 0x23d5, 0x1078, 0x3520, 0x1078, 0x35ec, + 0x0040, 0x23d1, 0x0078, 0x23a7, 0x81ff, 0x00c0, 0x23d1, 0x1078, + 0x298f, 0x0040, 0x23d5, 0x2031, 0x000f, 0x1078, 0x3520, 0x8631, + 0x00c8, 0x2565, 0x2019, 0x0005, 0x1078, 0x360d, 0x0040, 0x23d1, + 0x7828, 0xa08a, 0x1000, 0x00c8, 0x23d5, 0x8003, 0x800b, 0x810b, + 0xa108, 0x1078, 0x4160, 0x0078, 0x23a7, 0x127e, 0x2091, 0x8000, + 0x81ff, 0x00c0, 0x25ad, 0x2029, 0x007d, 0x644c, 0x2400, 0xa506, + 0x0040, 0x25a7, 0x2508, 0x1078, 0x3497, 0x00c0, 0x25a7, 0x2031, + 0x000f, 0x1078, 0x3520, 0x8631, 0x00c8, 0x2591, 0x2019, 0x0004, + 0x1078, 0x360d, 0x0040, 0x25ad, 0x7824, 0xa08a, 0x1000, 0x00c8, + 0x25b0, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4160, 0x8529, + 0x00c8, 0x2586, 0x127f, 0x0078, 0x23a7, 0x127f, 0x0078, 0x23d1, + 0x127f, 0x0078, 0x23d5, 0x1078, 0x298f, 0x0040, 0x23d5, 0x1078, + 0x3550, 0x1078, 0x35db, 0x0078, 0x23a7, 0x81ff, 0x00c0, 0x23d1, + 0x1078, 0x298f, 0x0040, 0x23d5, 0x1078, 0x3539, 0x1078, 0x35db, + 0x0078, 0x23a7, 0x81ff, 0x00c0, 0x23d1, 0x1078, 0x298f, 0x0040, + 0x23d5, 0x1078, 0x35aa, 0x0040, 0x23d1, 0x1078, 0x33dc, 0x1078, + 0x3564, 0x1078, 0x35db, 0x0078, 0x23a7, 0x1078, 0x298f, 0x0040, + 0x23d5, 0x1078, 0x3520, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078, + 0x3618, 0x0c7f, 0x1078, 0x4535, 0x1078, 0x4478, 0x2c08, 0x1078, + 0x6bca, 0x1078, 0x35db, 0x0078, 0x23a7, 0x1078, 0x298f, 0x0040, + 0x23d5, 0x1078, 0x35db, 0x2208, 0x0078, 0x23a7, 0x157e, 0x0d7e, + 0x0e7e, 0x2069, 0x6fff, 0x6810, 0x6914, 0xa10a, 0x00c8, 0x260a, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, - 0x007e, 0x2069, 0x7720, 0x2d04, 0xa075, 0x0040, 0x275f, 0x704c, - 0x1078, 0x2769, 0xa210, 0x7080, 0x1078, 0x2769, 0xa318, 0x8d68, - 0x00f0, 0x2753, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, - 0x24e7, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x2778, 0x2001, 0x0000, - 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x2778, 0x2178, 0x0078, 0x2770, - 0x017f, 0x0f7f, 0x007c, 0x2069, 0x76ff, 0x6910, 0x629c, 0x0078, - 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x614c, 0xa190, 0x2303, 0x2214, - 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, 0xa215, 0x6364, 0x0078, - 0x24e7, 0x613c, 0x6240, 0x0078, 0x24e7, 0x1078, 0x2ccb, 0x0040, - 0x2515, 0x0078, 0x24e7, 0x1078, 0x2ccb, 0x0040, 0x2515, 0x6244, - 0x6338, 0x0078, 0x24e7, 0x613c, 0x6240, 0x7824, 0x603e, 0x7b28, - 0x6342, 0x2069, 0x7651, 0x831f, 0xa305, 0x6816, 0x0078, 0x24e7, - 0x1078, 0x2ccb, 0x0040, 0x2515, 0x0078, 0x24e7, 0x1078, 0x2ccb, - 0x0040, 0x2515, 0x7828, 0xa00d, 0x0040, 0x2515, 0x782c, 0xa005, - 0x0040, 0x2515, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x24e7, - 0x7d38, 0x7c3c, 0x0078, 0x2594, 0x7824, 0xa09c, 0x00ff, 0xa39a, - 0x0003, 0x00c8, 0x2511, 0x624c, 0xa084, 0xff00, 0x8007, 0xa206, - 0x00c0, 0x27e4, 0x2001, 0x7640, 0x2009, 0x000c, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x0078, 0x2cef, 0x81ff, 0x00c0, 0x2511, 0x1078, - 0x2ccb, 0x0040, 0x2515, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x00c0, 0x2511, 0x0c7e, 0x1078, 0x2cb3, 0x0c7f, 0x0040, 0x2511, - 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x69ec, 0x0040, - 0x2511, 0x7007, 0x0003, 0x701b, 0x2806, 0x007c, 0x6830, 0xa086, - 0x0100, 0x0040, 0x2511, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, - 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2cef, 0x1078, 0x2cb3, 0x0040, - 0x2511, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, - 0x2ceb, 0x701b, 0x2824, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, - 0x0040, 0x2515, 0x6804, 0xd0ac, 0x0040, 0x2831, 0xd0a4, 0x0040, - 0x2515, 0xd094, 0x0040, 0x283c, 0x0c7e, 0x2061, 0x0100, 0x6104, - 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2847, 0x0c7e, - 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, - 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x285c, 0xd084, 0x0040, - 0x285c, 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2515, 0xa288, 0x2303, - 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2865, 0x6828, - 0xa08a, 0x007f, 0x00c8, 0x2515, 0x604e, 0x6808, 0xa08a, 0x0100, - 0x0048, 0x2515, 0xa08a, 0x0841, 0x00c8, 0x2515, 0xa084, 0x0007, - 0x00c0, 0x2515, 0x680c, 0xa005, 0x0040, 0x2515, 0x6810, 0xa005, - 0x0040, 0x2515, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2515, 0x8001, - 0x0040, 0x2515, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2515, 0x8001, - 0x0040, 0x2515, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x7651, 0x2da0, - 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084, 0x00ff, - 0x6042, 0x1078, 0x3c23, 0x1078, 0x39f9, 0x6000, 0xa086, 0x0000, - 0x00c0, 0x28e0, 0x6808, 0x602a, 0x1078, 0x1dbe, 0x6818, 0x691c, - 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, - 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x28c0, 0x6830, 0x6934, - 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0078, 0x28c2, - 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x1078, 0x45b9, - 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, - 0x60b4, 0xa005, 0x0040, 0x28dc, 0x6003, 0x0001, 0x2091, 0x301d, - 0x1078, 0x3535, 0x0078, 0x28e0, 0x6003, 0x0004, 0x2091, 0x301d, - 0x0078, 0x24e7, 0x6000, 0xa086, 0x0000, 0x0040, 0x2511, 0x2069, - 0x7651, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009, 0x001c, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2cef, 0x81ff, 0x00c0, - 0x2511, 0x1078, 0x3535, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, - 0x617c, 0x81ff, 0x0040, 0x2917, 0x703f, 0x0000, 0x2001, 0x7cc0, - 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e, 0x2091, - 0x8000, 0x1078, 0x2cef, 0x701b, 0x24e4, 0x127f, 0x007c, 0x703f, - 0x0001, 0x0d7e, 0x2069, 0x7cc0, 0x20a9, 0x0040, 0x20a1, 0x7cc0, - 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, 0x2303, 0x210c, 0xa18c, - 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x0040, - 0x2949, 0x1078, 0x37d7, 0x00c0, 0x2949, 0x6014, 0x821c, 0x0048, - 0x2941, 0xa398, 0x7cc0, 0xa085, 0xff00, 0x8007, 0x201a, 0x0078, - 0x2948, 0xa398, 0x7cc0, 0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a, - 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x2950, 0x0078, 0x292d, - 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9, 0x0040, - 0x20a1, 0x7cc0, 0x2099, 0x7cc0, 0x1078, 0x357e, 0x0078, 0x2906, - 0x1078, 0x2ccb, 0x0040, 0x2515, 0x0c7e, 0x1078, 0x2cb3, 0x0c7f, - 0x0040, 0x2511, 0x2001, 0x7652, 0x2004, 0xd0b4, 0x0040, 0x298d, - 0x6000, 0xd08c, 0x00c0, 0x298d, 0x6004, 0xa084, 0x00ff, 0xa086, - 0x0006, 0x00c0, 0x298d, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x6a24, 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, 0x2989, - 0x007c, 0x1078, 0x2ccb, 0x0040, 0x2515, 0x20a9, 0x0029, 0x2c98, - 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0002, 0xac80, 0x0004, - 0x2098, 0xad80, 0x0004, 0x20a0, 0x1078, 0x357e, 0x20a9, 0x0004, - 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x357e, - 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, - 0x1078, 0x357e, 0x2d00, 0x2009, 0x0029, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x0078, 0x2cef, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2ccb, - 0x0040, 0x2515, 0x1078, 0x3937, 0x0078, 0x24e7, 0x81ff, 0x00c0, - 0x2511, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2515, 0x1078, 0x2ccb, - 0x0040, 0x2515, 0x2031, 0x000f, 0x1078, 0x3860, 0x8631, 0x00c8, - 0x29d4, 0x2019, 0x0004, 0x1078, 0x394d, 0x7924, 0x810f, 0x7a28, - 0x1078, 0x29e4, 0x0078, 0x24e7, 0xa186, 0x00ff, 0x0040, 0x29ec, - 0x1078, 0x29fc, 0x0078, 0x29fb, 0x2029, 0x007e, 0x2061, 0x7600, - 0x644c, 0x2400, 0xa506, 0x0040, 0x29f8, 0x2508, 0x1078, 0x29fc, - 0x8529, 0x00c8, 0x29f1, 0x007c, 0x1078, 0x37d7, 0x00c0, 0x2a07, - 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x452d, 0x007c, - 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2ccb, 0x0040, 0x2515, 0x1078, - 0x3860, 0x1078, 0x3942, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, - 0x1078, 0x2ccb, 0x0040, 0x2515, 0x1078, 0x3860, 0x1078, 0x392c, - 0x0078, 0x24e7, 0x6100, 0x0078, 0x24e7, 0x1078, 0x2ccb, 0x0040, - 0x2515, 0x6004, 0xa086, 0x0707, 0x0040, 0x2515, 0x2001, 0x7600, - 0x2004, 0xa086, 0x0003, 0x00c0, 0x2511, 0x0d7e, 0xace8, 0x000a, - 0x7924, 0xd184, 0x0040, 0x2a3e, 0xace8, 0x0006, 0x680c, 0x8007, - 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217, - 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x24e7, 0x7824, 0xa084, - 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2a58, 0x81ff, 0x00c0, 0x2511, - 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2515, 0x7924, 0xa18c, 0xff00, - 0x810f, 0xa186, 0x00ff, 0x0040, 0x2a6c, 0xa182, 0x007f, 0x00c8, - 0x2515, 0x2100, 0x1078, 0x206e, 0x027e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x7849, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, - 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, - 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x355a, 0x1078, - 0x45b0, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, 0x29e4, - 0x127f, 0x0c7f, 0x027f, 0x0078, 0x24e7, 0x7924, 0xa18c, 0xff00, - 0x810f, 0x0c7e, 0x1078, 0x37a0, 0x2c08, 0x0c7f, 0x00c0, 0x2515, - 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x60bc, 0xd09c, 0x0040, - 0x2511, 0x1078, 0x2cb3, 0x0040, 0x2511, 0x6823, 0x0000, 0x7924, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2ceb, 0x701b, 0x2ab9, - 0x007c, 0x2009, 0x0080, 0x1078, 0x37d7, 0x00c0, 0x2ac6, 0x6004, - 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040, 0x2aca, 0x2021, 0x400a, - 0x0078, 0x24e9, 0x0d7e, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c, - 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0040, 0x2b3c, - 0xa0be, 0x0112, 0x0040, 0x2b3c, 0xa0be, 0x0113, 0x0040, 0x2b3c, - 0xa0be, 0x0114, 0x0040, 0x2b3c, 0xa0be, 0x0117, 0x0040, 0x2b3c, - 0xa0be, 0x011a, 0x0040, 0x2b3c, 0xa0be, 0x0121, 0x0040, 0x2b32, - 0xa0be, 0x0131, 0x0040, 0x2b32, 0xa0be, 0x0171, 0x0040, 0x2b3c, - 0xa0be, 0x0173, 0x0040, 0x2b3c, 0xa0be, 0x01a1, 0x00c0, 0x2b05, - 0x6830, 0x8007, 0x6832, 0x0078, 0x2b42, 0xa0be, 0x0212, 0x0040, - 0x2b38, 0xa0be, 0x0213, 0x0040, 0x2b38, 0xa0be, 0x0214, 0x0040, - 0x2b2a, 0xa0be, 0x0217, 0x0040, 0x2b24, 0xa0be, 0x021a, 0x00c0, - 0x2b1e, 0x6838, 0x8007, 0x683a, 0x0078, 0x2b3c, 0xa0be, 0x0300, - 0x0040, 0x2b3c, 0x0078, 0x2511, 0xad80, 0x0010, 0x20a9, 0x0007, - 0x1078, 0x2b70, 0xad80, 0x000e, 0x20a9, 0x0001, 0x1078, 0x2b70, - 0x0078, 0x2b3c, 0xad80, 0x000c, 0x1078, 0x2b7e, 0x0078, 0x2b42, - 0xad80, 0x000e, 0x1078, 0x2b7e, 0xad80, 0x000c, 0x20a9, 0x0001, - 0x1078, 0x2b70, 0x0c7e, 0x1078, 0x2cb3, 0x0040, 0x2b65, 0x6837, - 0x0119, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883, - 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000, - 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x1078, 0x6a08, 0x0040, 0x2511, - 0x7007, 0x0003, 0x701b, 0x2b69, 0x007c, 0x0c7f, 0x0d7f, 0x0078, - 0x2511, 0x6820, 0xa086, 0x8001, 0x0040, 0x2511, 0x0078, 0x24e7, - 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, - 0x280a, 0x8108, 0x00f0, 0x2b72, 0x017f, 0x007c, 0x017e, 0x0a7e, - 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, - 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, - 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x00c0, 0x2511, 0x7924, - 0x2140, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048, 0x2515, - 0xa182, 0x00ff, 0x00c8, 0x2515, 0x7a2c, 0x7b28, 0x6064, 0xa306, - 0x00c0, 0x2bb5, 0x6068, 0xa246, 0xa8c4, 0xff00, 0x0040, 0x2515, - 0xa206, 0x00c0, 0x2bb5, 0x0078, 0x2515, 0x0c7e, 0x1078, 0x2c1e, - 0x2c68, 0x0c7f, 0x0040, 0x2bdc, 0xa0c6, 0x4000, 0x00c0, 0x2bc2, - 0x0078, 0x2bd9, 0xa0c6, 0x4007, 0x00c0, 0x2bc9, 0x2408, 0x0078, - 0x2bd9, 0xa0c6, 0x4008, 0x00c0, 0x2bd1, 0x2708, 0x2610, 0x0078, - 0x2bd9, 0xa0c6, 0x4009, 0x00c0, 0x2bd7, 0x0078, 0x2bd9, 0x2001, - 0x4006, 0x2020, 0x0078, 0x24e9, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, - 0x2c70, 0x1078, 0x5b4e, 0x0040, 0x2c0c, 0x2d00, 0x601a, 0x2e58, - 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x2cb3, 0x0c7f, 0x2b70, 0x0040, - 0x2511, 0x6837, 0x0000, 0x2d00, 0x6012, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, 0x127e, - 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, - 0x1078, 0x5bdb, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f, - 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, 0x2c17, 0x007c, 0x6830, - 0xa086, 0x0100, 0x00c0, 0x24e7, 0x0078, 0x2511, 0x0e7e, 0x0d7e, - 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0x77a0, - 0x2e04, 0xa005, 0x00c0, 0x2c32, 0x2100, 0xa406, 0x0040, 0x2c6f, - 0x0078, 0x2c63, 0x2068, 0x6f10, 0x2700, 0xa306, 0x00c0, 0x2c54, - 0x6e14, 0x2600, 0xa206, 0x00c0, 0x2c54, 0x2400, 0xa106, 0x00c0, - 0x2c50, 0x2d60, 0xd884, 0x0040, 0x2c75, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x0006, 0x00c0, 0x2c75, 0x2001, 0x4000, 0x0078, 0x2c76, - 0x2001, 0x4007, 0x0078, 0x2c76, 0x2400, 0xa106, 0x00c0, 0x2c63, - 0x6e14, 0x87ff, 0x00c0, 0x2c5f, 0x86ff, 0x0040, 0x2c6f, 0x2001, - 0x4008, 0x0078, 0x2c76, 0x8420, 0x8e70, 0x00f0, 0x2c28, 0x2001, - 0x4009, 0x0078, 0x2c76, 0x2001, 0x0001, 0x0078, 0x2c76, 0x1078, - 0x37a0, 0x00c0, 0x2c6b, 0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, - 0x0e7f, 0x007c, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2cb3, 0x0040, - 0x2511, 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x2515, 0xa096, - 0x00ff, 0x0040, 0x2c8f, 0xa092, 0x0004, 0x00c8, 0x2515, 0x2010, - 0x2d18, 0x1078, 0x2251, 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, - 0x2c9a, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2511, 0x0078, - 0x24e7, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048, - 0x2515, 0xa182, 0x00ff, 0x00c8, 0x2515, 0x1078, 0x6924, 0x1078, - 0x37bf, 0x0078, 0x24e7, 0x1078, 0x1314, 0x0040, 0x2cca, 0xa006, - 0x6802, 0x7010, 0xa005, 0x00c0, 0x2cc2, 0x2d00, 0x7012, 0x7016, - 0x0078, 0x2cc8, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, - 0xad80, 0x000d, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, - 0x37d7, 0x00c0, 0x2cd9, 0xa6b4, 0x00ff, 0xa682, 0x0010, 0x0048, - 0x2cda, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, - 0x2ce7, 0x2168, 0x6904, 0x1078, 0x1348, 0x0078, 0x2cde, 0x7112, - 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2cf1, 0x2031, - 0x0000, 0x2061, 0x76bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, - 0x642e, 0x6532, 0x2c10, 0x1078, 0x137f, 0x7007, 0x0002, 0x701b, - 0x24e7, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, - 0x2001, 0x767b, 0x2004, 0xa005, 0x00c0, 0x2d1d, 0x0068, 0x2d1d, - 0x7818, 0xd084, 0x00c0, 0x2d1d, 0x781b, 0x0001, 0x7a22, 0x7b26, - 0x7c2a, 0x2091, 0x4080, 0x0078, 0x2d42, 0x017e, 0x0c7e, 0x0e7e, - 0x2071, 0x766d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2d2b, 0x7030, - 0x2060, 0x0078, 0x2d3c, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x76bd, - 0x0048, 0x2d34, 0x2061, 0x767d, 0x2c00, 0x7032, 0x81ff, 0x00c0, - 0x2d3a, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, - 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x766d, - 0x7038, 0xa005, 0x0040, 0x2d7e, 0x127e, 0x2091, 0x8000, 0x0068, - 0x2d7d, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2d7c, - 0x0c7e, 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, - 0x7826, 0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, - 0xa005, 0x00c0, 0x2d72, 0x7033, 0x767d, 0x7037, 0x767d, 0x0c7f, - 0x0078, 0x2d7c, 0xac80, 0x0008, 0xa0fa, 0x76bd, 0x0048, 0x2d7a, - 0x2001, 0x767d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, - 0x027e, 0x2001, 0x7652, 0x2004, 0xd0c4, 0x0040, 0x2d8b, 0x2011, - 0x8014, 0x1078, 0x2d02, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2511, - 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x3535, - 0x127f, 0x0078, 0x24e7, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, - 0x2da6, 0x61c8, 0xa10d, 0x61ca, 0x0078, 0x24e7, 0x0078, 0x2515, - 0x81ff, 0x00c0, 0x2511, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2511, - 0x2001, 0x7652, 0x2004, 0xd0a4, 0x00c0, 0x2511, 0x1078, 0x2ccb, - 0x0040, 0x2515, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, - 0x2dc5, 0x7828, 0xa005, 0x0040, 0x24e7, 0x0c7e, 0x1078, 0x2cb3, - 0x0c7f, 0x0040, 0x2511, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x1078, 0x6a91, 0x0040, 0x2511, 0x7007, 0x0003, - 0x701b, 0x2ddb, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2511, - 0x0078, 0x24e7, 0x2001, 0x7600, 0x2004, 0xa086, 0x0003, 0x00c0, - 0x2511, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2cb3, - 0x0040, 0x2511, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, - 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x37d7, - 0x00c0, 0x2e28, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e28, 0xa084, - 0x00ff, 0xa0c6, 0x0006, 0x00c0, 0x2e28, 0x87ff, 0x0040, 0x2e1b, + 0x007d, 0x2069, 0x7020, 0x2d04, 0xa075, 0x0040, 0x261f, 0x704c, + 0x1078, 0x2629, 0xa210, 0x7080, 0x1078, 0x2629, 0xa318, 0x8d68, + 0x00f0, 0x2613, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, + 0x23a7, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x2638, 0x2001, 0x0000, + 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x2638, 0x2178, 0x0078, 0x2630, + 0x017f, 0x0f7f, 0x007c, 0x2069, 0x6fff, 0x6910, 0x6294, 0x0078, + 0x23a7, 0x81ff, 0x00c0, 0x23d1, 0x614c, 0xa190, 0x21d3, 0x2214, + 0xa294, 0x00ff, 0x0078, 0x23a7, 0x613c, 0x6240, 0x0078, 0x23a7, + 0x1078, 0x298f, 0x0040, 0x23d5, 0x0078, 0x23a7, 0x1078, 0x298f, + 0x0040, 0x23d5, 0x6244, 0x6338, 0x0078, 0x23a7, 0x613c, 0x6240, + 0x7824, 0x603e, 0x7b28, 0x6342, 0x2069, 0x6f51, 0x831f, 0xa305, + 0x6816, 0x0078, 0x23a7, 0x1078, 0x298f, 0x0040, 0x23d5, 0x0078, + 0x23a7, 0x1078, 0x298f, 0x0040, 0x23d5, 0x7828, 0xa00d, 0x0040, + 0x23d5, 0x782c, 0xa005, 0x0040, 0x23d5, 0x6244, 0x6146, 0x6338, + 0x603a, 0x0078, 0x23a7, 0x7d38, 0x7c3c, 0x0078, 0x2454, 0x7824, + 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x23d1, 0x624c, 0xa084, + 0xff00, 0x8007, 0xa206, 0x00c0, 0x269f, 0x2001, 0x6f40, 0x2009, + 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x29b3, 0x81ff, + 0x00c0, 0x23d1, 0x1078, 0x298f, 0x0040, 0x23d5, 0x6004, 0xa084, + 0x00ff, 0xa086, 0x0006, 0x00c0, 0x23d1, 0x0c7e, 0x1078, 0x2977, + 0x0c7f, 0x0040, 0x23d1, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, + 0x1078, 0x62b9, 0x0040, 0x23d1, 0x7007, 0x0003, 0x701b, 0x26c1, + 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x23d1, 0xad80, 0x000e, + 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x29b3, + 0x1078, 0x2977, 0x0040, 0x23d1, 0x2009, 0x001c, 0x7a2c, 0x7b28, + 0x7c3c, 0x7d38, 0x1078, 0x29af, 0x701b, 0x26df, 0x007c, 0xade8, + 0x000d, 0x6800, 0xa005, 0x0040, 0x23d5, 0x6804, 0xd0ac, 0x0040, + 0x26ec, 0xd0a4, 0x0040, 0x23d5, 0xd094, 0x0040, 0x26f7, 0x0c7e, + 0x2061, 0x0100, 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, + 0x0040, 0x2702, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, + 0x6106, 0x0c7f, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, + 0x2717, 0xd084, 0x0040, 0x2717, 0x6a28, 0xa28a, 0x007e, 0x00c8, + 0x23d5, 0xa288, 0x21d3, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, + 0x0040, 0x2720, 0x6828, 0xa08a, 0x007e, 0x00c8, 0x23d5, 0x604e, + 0x6808, 0xa08a, 0x0100, 0x0048, 0x23d5, 0xa08a, 0x0841, 0x00c8, + 0x23d5, 0xa084, 0x0007, 0x00c0, 0x23d5, 0x680c, 0xa005, 0x0040, + 0x23d5, 0x6810, 0xa005, 0x0040, 0x23d5, 0x6848, 0x6940, 0xa10a, + 0x00c8, 0x23d5, 0x8001, 0x0040, 0x23d5, 0x684c, 0x6944, 0xa10a, + 0x00c8, 0x23d5, 0x8001, 0x0040, 0x23d5, 0x20a9, 0x001c, 0x2d98, + 0x2069, 0x6f51, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, + 0x8007, 0xa084, 0x00ff, 0x6042, 0x1078, 0x38e3, 0x1078, 0x36b9, + 0x6000, 0xa086, 0x0000, 0x00c0, 0x279b, 0x6808, 0x602a, 0x1078, + 0x1d32, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, + 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, + 0x277b, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, + 0x831f, 0x0078, 0x277d, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, + 0x6312, 0x1078, 0x41ec, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, + 0x602f, 0x0000, 0x0c7f, 0x60ac, 0xa005, 0x0040, 0x2797, 0x6003, + 0x0001, 0x2091, 0x301d, 0x1078, 0x31f5, 0x0078, 0x279b, 0x6003, + 0x0004, 0x2091, 0x301d, 0x0078, 0x23a7, 0x6000, 0xa086, 0x0000, + 0x0040, 0x23d1, 0x2069, 0x6f51, 0x7830, 0x6842, 0x7834, 0x6846, + 0x2d00, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, + 0x29b3, 0x81ff, 0x00c0, 0x23d1, 0x1078, 0x31f5, 0x0078, 0x23a7, + 0x81ff, 0x00c0, 0x23d1, 0x6174, 0x81ff, 0x0040, 0x27d2, 0x703f, + 0x0000, 0x2001, 0x74c0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, + 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078, 0x29b3, 0x701b, 0x23a4, + 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x74c0, 0x20a9, + 0x0040, 0x20a1, 0x74c0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, + 0x21d3, 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, + 0x2100, 0xa506, 0x0040, 0x2804, 0x1078, 0x3497, 0x00c0, 0x2804, + 0x6014, 0x821c, 0x0048, 0x27fc, 0xa398, 0x74c0, 0xa085, 0xff00, + 0x8007, 0x201a, 0x0078, 0x2803, 0xa398, 0x74c0, 0x2324, 0xa4a4, + 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x007f, 0x00c8, + 0x280b, 0x0078, 0x27e8, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, + 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x74c0, 0x2099, 0x74c0, 0x1078, + 0x323e, 0x0078, 0x27c1, 0x1078, 0x298f, 0x0040, 0x23d5, 0x0c7e, + 0x1078, 0x2977, 0x0c7f, 0x0040, 0x23d1, 0x2001, 0x6f52, 0x2004, + 0xd0b4, 0x0040, 0x2848, 0x6000, 0xd08c, 0x00c0, 0x2848, 0x6004, + 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2848, 0x6837, 0x0000, + 0x6838, 0xc0fd, 0x683a, 0x1078, 0x62d5, 0x0040, 0x23d1, 0x7007, + 0x0003, 0x701b, 0x2844, 0x007c, 0x1078, 0x298f, 0x0040, 0x23d5, + 0x20a9, 0x0029, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, + 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, + 0x323e, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, + 0x20a0, 0x1078, 0x323e, 0x2d00, 0x2009, 0x0029, 0x7a2c, 0x7b28, + 0x7c3c, 0x7d38, 0x0078, 0x29b3, 0x81ff, 0x00c0, 0x23d1, 0x1078, + 0x298f, 0x0040, 0x23d5, 0x1078, 0x35f7, 0x0078, 0x23a7, 0x81ff, + 0x00c0, 0x23d1, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x23d5, 0x1078, + 0x298f, 0x0040, 0x23d5, 0x2031, 0x000f, 0x1078, 0x3520, 0x8631, + 0x00c8, 0x2885, 0x2019, 0x0004, 0x1078, 0x360d, 0x7924, 0x810f, + 0x7a28, 0x1078, 0x2895, 0x0078, 0x23a7, 0xa186, 0x00ff, 0x0040, + 0x289d, 0x1078, 0x28ad, 0x0078, 0x28ac, 0x2029, 0x007d, 0x2061, + 0x6f00, 0x644c, 0x2400, 0xa506, 0x0040, 0x28a9, 0x2508, 0x1078, + 0x28ad, 0x8529, 0x00c8, 0x28a2, 0x007c, 0x1078, 0x3497, 0x00c0, + 0x28b8, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4160, + 0x007c, 0x81ff, 0x00c0, 0x23d1, 0x1078, 0x298f, 0x0040, 0x23d5, + 0x1078, 0x3520, 0x1078, 0x3602, 0x0078, 0x23a7, 0x81ff, 0x00c0, + 0x23d1, 0x1078, 0x298f, 0x0040, 0x23d5, 0x1078, 0x3520, 0x1078, + 0x35ec, 0x0078, 0x23a7, 0x6100, 0x0078, 0x23a7, 0x1078, 0x298f, + 0x0040, 0x23d5, 0x6004, 0xa086, 0x0707, 0x0040, 0x23d5, 0x2001, + 0x6f00, 0x2004, 0xa086, 0x0003, 0x00c0, 0x23d1, 0x0d7e, 0xace8, + 0x000a, 0x7924, 0xd184, 0x0040, 0x28ef, 0xace8, 0x0006, 0x680c, + 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, + 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x23a7, 0x7824, + 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2909, 0x81ff, 0x00c0, + 0x23d1, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x23d5, 0x7924, 0xa18c, + 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x291d, 0xa182, 0x007e, + 0x00c8, 0x23d5, 0x2100, 0x1078, 0x1fb7, 0x027e, 0x0c7e, 0x127e, + 0x2091, 0x8000, 0x2061, 0x70c9, 0x601b, 0x0000, 0x601f, 0x0000, + 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, + 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x321a, + 0x1078, 0x41e3, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, + 0x2895, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x23a7, 0x7924, 0xa18c, + 0xff00, 0x810f, 0x0c7e, 0x1078, 0x3460, 0x2c08, 0x0c7f, 0x00c0, + 0x23d5, 0x0078, 0x23a7, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, + 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x00f0, 0x2955, 0x017f, + 0x007c, 0x017e, 0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, + 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, + 0x290a, 0x8108, 0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x1078, + 0x12c5, 0x0040, 0x298e, 0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, + 0x2986, 0x2d00, 0x7012, 0x7016, 0x0078, 0x298c, 0x7014, 0x6802, + 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c, 0x7e24, + 0x860f, 0xa18c, 0x00ff, 0x1078, 0x3497, 0x00c0, 0x299d, 0xa6b4, + 0x00ff, 0xa682, 0x0010, 0x0048, 0x299e, 0xa066, 0x8cff, 0x007c, + 0x017e, 0x7110, 0x81ff, 0x0040, 0x29ab, 0x2168, 0x6904, 0x1078, + 0x12f9, 0x0078, 0x29a2, 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, + 0x0001, 0x0078, 0x29b5, 0x2031, 0x0000, 0x2061, 0x6fbd, 0x6606, + 0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, + 0x1330, 0x7007, 0x0002, 0x701b, 0x23a7, 0x007c, 0x0f7e, 0x127e, + 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x6f7b, 0x2004, 0xa005, + 0x00c0, 0x29e0, 0x0068, 0x29e0, 0x7818, 0xd084, 0x00c0, 0x29e0, + 0x781b, 0x0001, 0x7a22, 0x7b26, 0x2091, 0x4080, 0x0078, 0x2a04, + 0x017e, 0x0c7e, 0x0e7e, 0x2071, 0x6f6d, 0x7138, 0xa182, 0x0008, + 0x0048, 0x29ee, 0x7030, 0x2060, 0x0078, 0x29ff, 0x7030, 0xa0e0, + 0x0008, 0xac82, 0x6fbd, 0x0048, 0x29f7, 0x2061, 0x6f7d, 0x2c00, + 0x7032, 0x81ff, 0x00c0, 0x29fd, 0x7036, 0x8108, 0x713a, 0x2262, + 0x6306, 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, + 0x2071, 0x6f6d, 0x7038, 0xa005, 0x0040, 0x2a3e, 0x127e, 0x2091, + 0x8000, 0x0068, 0x2a3d, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, + 0x00c0, 0x2a3c, 0x0c7e, 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, + 0x7822, 0x6004, 0x7826, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, + 0xa005, 0x00c0, 0x2a32, 0x7033, 0x6f7d, 0x7037, 0x6f7d, 0x0c7f, + 0x0078, 0x2a3c, 0xac80, 0x0008, 0xa0fa, 0x6fbd, 0x0048, 0x2a3a, + 0x2001, 0x6f7d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, + 0x027e, 0x2001, 0x6f52, 0x2004, 0xd0c4, 0x0040, 0x2a4b, 0x2011, + 0x8014, 0x1078, 0x29c6, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x23d1, + 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x31f5, + 0x127f, 0x0078, 0x23a7, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, + 0x2a66, 0x61b4, 0xa10d, 0x61b6, 0x0078, 0x23a7, 0x0078, 0x23d5, + 0x81ff, 0x00c0, 0x23d1, 0x6000, 0xa086, 0x0003, 0x00c0, 0x23d1, + 0x2001, 0x6f52, 0x2004, 0xd0a4, 0x00c0, 0x23d1, 0x1078, 0x298f, + 0x0040, 0x23d5, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, + 0x2a85, 0x7828, 0xa005, 0x0040, 0x23a7, 0x0c7e, 0x1078, 0x2977, + 0x0c7f, 0x0040, 0x23d1, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, + 0xc0fd, 0x683a, 0x1078, 0x6342, 0x0040, 0x23d1, 0x7007, 0x0003, + 0x701b, 0x2a9b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x23d1, + 0x0078, 0x23a7, 0x2001, 0x6f00, 0x2004, 0xa086, 0x0003, 0x00c0, + 0x23d1, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2977, + 0x0040, 0x23d1, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, + 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x3497, + 0x00c0, 0x2ae8, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2ae8, 0xa084, + 0x00ff, 0xa0c6, 0x0006, 0x00c0, 0x2ae8, 0x87ff, 0x0040, 0x2adb, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, - 0x2b7e, 0x0078, 0x2e24, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, - 0x0004, 0x53a3, 0x1078, 0x2b7e, 0x21a2, 0x94a0, 0xa6b0, 0x0005, - 0x8108, 0xa186, 0x007e, 0x0040, 0x2e33, 0xa686, 0x0028, 0x0040, - 0x2e3c, 0x0078, 0x2dfe, 0x86ff, 0x00c0, 0x2e3a, 0x7120, 0x810b, - 0x0078, 0x24e7, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, - 0x772a, 0x2061, 0x76bd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, - 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x137f, 0x7007, - 0x0002, 0x701b, 0x2e54, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2e66, - 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x76bd, - 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x2dfe, 0x7120, 0x810b, - 0x0078, 0x24e7, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, - 0x7600, 0x6044, 0xd0a4, 0x00c0, 0x2e93, 0xd084, 0x0040, 0x2e7c, - 0x1078, 0x2fba, 0x0078, 0x2e8f, 0xd08c, 0x0040, 0x2e83, 0x1078, - 0x2ed1, 0x0078, 0x2e8f, 0xd094, 0x0040, 0x2e8a, 0x1078, 0x2eb4, - 0x0078, 0x2e8f, 0xd09c, 0x0040, 0x2e8f, 0x1078, 0x2e9d, 0x0e7f, - 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2e9a, - 0xc19d, 0x612a, 0x017f, 0x0078, 0x2e8f, 0x6043, 0x0040, 0x6043, - 0x0000, 0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x2009, - 0x7cc0, 0x200b, 0x0000, 0x7073, 0x000f, 0x2009, 0x000f, 0x2011, - 0x34f5, 0x1078, 0x45b0, 0x007c, 0x7070, 0xa005, 0x00c0, 0x2ed0, - 0x2011, 0x34f5, 0x1078, 0x4520, 0x6043, 0x0020, 0x6043, 0x0000, - 0x6044, 0xd08c, 0x00c0, 0x2ecc, 0x7083, 0x0000, 0x6043, 0x0090, - 0x6043, 0x0010, 0x0078, 0x2ed0, 0x7077, 0x0000, 0x0078, 0x2ed0, - 0x007c, 0x7074, 0xa08a, 0x0003, 0x00c8, 0x2eda, 0x1079, 0x2edd, - 0x0078, 0x2edc, 0x1078, 0x12d5, 0x007c, 0x2ee0, 0x2f2f, 0x2fb9, - 0x0f7e, 0x7077, 0x0001, 0x20e1, 0xa000, 0x20e1, 0x8700, 0x1078, - 0x1dbe, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0x7b00, 0x207b, + 0x2961, 0x0078, 0x2ae4, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, + 0x0004, 0x53a3, 0x1078, 0x2961, 0x21a2, 0x94a0, 0xa6b0, 0x0005, + 0x8108, 0xa186, 0x007e, 0x0040, 0x2af3, 0xa686, 0x0028, 0x0040, + 0x2afc, 0x0078, 0x2abe, 0x86ff, 0x00c0, 0x2afa, 0x7120, 0x810b, + 0x0078, 0x23a7, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, + 0x772a, 0x2061, 0x6fbd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, + 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x1330, 0x7007, + 0x0002, 0x701b, 0x2b14, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2b26, + 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x6fbd, + 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x2abe, 0x7120, 0x810b, + 0x0078, 0x23a7, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, + 0x6f00, 0x6044, 0xd0a4, 0x00c0, 0x2b53, 0xd084, 0x0040, 0x2b3c, + 0x1078, 0x2c7a, 0x0078, 0x2b4f, 0xd08c, 0x0040, 0x2b43, 0x1078, + 0x2b91, 0x0078, 0x2b4f, 0xd094, 0x0040, 0x2b4a, 0x1078, 0x2b74, + 0x0078, 0x2b4f, 0xd09c, 0x0040, 0x2b4f, 0x1078, 0x2b5d, 0x0e7f, + 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2b5a, + 0xc19d, 0x612a, 0x017f, 0x0078, 0x2b4f, 0x6043, 0x0040, 0x6043, + 0x0000, 0x7067, 0x0000, 0x707f, 0x0001, 0x709f, 0x0000, 0x2009, + 0x74c0, 0x200b, 0x0000, 0x706b, 0x000f, 0x2009, 0x000f, 0x2011, + 0x31b5, 0x1078, 0x41e3, 0x007c, 0x7068, 0xa005, 0x00c0, 0x2b90, + 0x2011, 0x31b5, 0x1078, 0x4153, 0x6043, 0x0020, 0x6043, 0x0000, + 0x6044, 0xd08c, 0x00c0, 0x2b8c, 0x707b, 0x0000, 0x6043, 0x0090, + 0x6043, 0x0010, 0x0078, 0x2b90, 0x706f, 0x0000, 0x0078, 0x2b90, + 0x007c, 0x706c, 0xa08a, 0x0003, 0x00c8, 0x2b9a, 0x1079, 0x2b9d, + 0x0078, 0x2b9c, 0x1078, 0x1286, 0x007c, 0x2ba0, 0x2bef, 0x2c79, + 0x0f7e, 0x706f, 0x0001, 0x20e1, 0xa000, 0x20e1, 0x8700, 0x1078, + 0x1d32, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0x7300, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079, - 0x7b0c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0x7605, 0x20a1, - 0x7b0e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x7b12, 0x207b, 0x0000, - 0x7807, 0x0000, 0x2099, 0x7b00, 0x20a1, 0x020b, 0x20a9, 0x0014, - 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x1078, 0x351c, 0x0f7f, - 0x707b, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x007c, 0x0d7e, - 0x7078, 0x707b, 0x0000, 0xa025, 0x0040, 0x2fa3, 0x6020, 0xd0b4, - 0x00c0, 0x2fa1, 0x7184, 0x81ff, 0x0040, 0x2f8a, 0xa486, 0x000c, - 0x00c0, 0x2f95, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0x7b80, - 0x2019, 0x7b00, 0x220c, 0x2304, 0xa106, 0x00c0, 0x2f61, 0x8210, - 0x8318, 0x00f0, 0x2f4a, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, - 0xf0f0, 0x6043, 0x0006, 0x7077, 0x0002, 0x7083, 0x0002, 0x0078, - 0x2fa1, 0x2069, 0x7b80, 0x6930, 0xa18e, 0x1101, 0x00c0, 0x2f95, - 0x6834, 0xa005, 0x00c0, 0x2f95, 0x6900, 0xa18c, 0x00ff, 0x00c0, - 0x2f75, 0x6804, 0xa005, 0x0040, 0x2f8a, 0x2011, 0x7b8e, 0x2019, - 0x7605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048, 0x2f88, - 0x00c0, 0x2f95, 0x8210, 0x8318, 0x00f0, 0x2f7b, 0x0078, 0x2f95, - 0x7087, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, + 0x730c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0x6f05, 0x20a1, + 0x730e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x7312, 0x207b, 0x0000, + 0x7807, 0x0000, 0x2099, 0x7300, 0x20a1, 0x020b, 0x20a9, 0x0014, + 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x1078, 0x31dc, 0x0f7f, + 0x7073, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x007c, 0x0d7e, + 0x7070, 0x7073, 0x0000, 0xa025, 0x0040, 0x2c63, 0x6020, 0xd0b4, + 0x00c0, 0x2c61, 0x717c, 0x81ff, 0x0040, 0x2c4a, 0xa486, 0x000c, + 0x00c0, 0x2c55, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0x7380, + 0x2019, 0x7300, 0x220c, 0x2304, 0xa106, 0x00c0, 0x2c21, 0x8210, + 0x8318, 0x00f0, 0x2c0a, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, + 0xf0f0, 0x6043, 0x0006, 0x706f, 0x0002, 0x707b, 0x0002, 0x0078, + 0x2c61, 0x2069, 0x7380, 0x6930, 0xa18e, 0x1101, 0x00c0, 0x2c55, + 0x6834, 0xa005, 0x00c0, 0x2c55, 0x6900, 0xa18c, 0x00ff, 0x00c0, + 0x2c35, 0x6804, 0xa005, 0x0040, 0x2c4a, 0x2011, 0x738e, 0x2019, + 0x6f05, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048, 0x2c48, + 0x00c0, 0x2c55, 0x8210, 0x8318, 0x00f0, 0x2c3b, 0x0078, 0x2c55, + 0x707f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, - 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2fa1, 0x60c3, 0x000c, 0x1078, - 0x351c, 0x0d7f, 0x007c, 0x6020, 0xd0b4, 0x00c0, 0x2fa1, 0x60c3, - 0x000c, 0x2011, 0x7840, 0x2013, 0x0000, 0x707b, 0x0000, 0x20e1, - 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x552b, 0x0078, - 0x2fa1, 0x007c, 0x7080, 0xa08a, 0x001d, 0x00c8, 0x2fc3, 0x1079, - 0x2fc6, 0x0078, 0x2fc5, 0x1078, 0x12d5, 0x007c, 0x2fea, 0x2ff9, - 0x302a, 0x303f, 0x306f, 0x3097, 0x30c7, 0x30f1, 0x3121, 0x3147, - 0x3192, 0x31b4, 0x31d8, 0x31ee, 0x3214, 0x3227, 0x3230, 0x3249, - 0x3277, 0x329f, 0x32cd, 0x32f7, 0x333c, 0x3371, 0x3393, 0x33d1, - 0x33f5, 0x340e, 0x341b, 0x7003, 0x0007, 0x6004, 0xa084, 0xfff9, + 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2c61, 0x60c3, 0x000c, 0x1078, + 0x31dc, 0x0d7f, 0x007c, 0x6020, 0xd0b4, 0x00c0, 0x2c61, 0x60c3, + 0x000c, 0x2011, 0x70c0, 0x2013, 0x0000, 0x7073, 0x0000, 0x20e1, + 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x4f3c, 0x0078, + 0x2c61, 0x007c, 0x7078, 0xa08a, 0x001d, 0x00c8, 0x2c83, 0x1079, + 0x2c86, 0x0078, 0x2c85, 0x1078, 0x1286, 0x007c, 0x2caa, 0x2cb9, + 0x2cea, 0x2cff, 0x2d2f, 0x2d57, 0x2d87, 0x2db1, 0x2de1, 0x2e07, + 0x2e52, 0x2e74, 0x2e98, 0x2eae, 0x2ed4, 0x2ee7, 0x2ef0, 0x2f09, + 0x2f37, 0x2f5f, 0x2f8d, 0x2fb7, 0x2ffc, 0x3031, 0x3053, 0x3091, + 0x30b5, 0x30ce, 0x30db, 0x7003, 0x0007, 0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, - 0x7083, 0x0001, 0x2009, 0x07d0, 0x2011, 0x34fc, 0x1078, 0x4513, - 0x007c, 0x0f7e, 0x7078, 0xa086, 0x0014, 0x00c0, 0x3028, 0x6043, - 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3028, 0x2079, 0x7b80, 0x7a30, - 0xa296, 0x1102, 0x00c0, 0x3026, 0x7834, 0xa005, 0x00c0, 0x3026, - 0x7a38, 0xd2fc, 0x0040, 0x301c, 0x70a4, 0xa005, 0x00c0, 0x301c, - 0x1078, 0x35b5, 0x70a7, 0x0001, 0x2011, 0x34fc, 0x1078, 0x4520, - 0x7083, 0x0010, 0x1078, 0x3230, 0x0078, 0x3028, 0x707b, 0x0000, - 0x0f7f, 0x007c, 0x7083, 0x0003, 0x6043, 0x0004, 0x1078, 0x3586, + 0x707b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x31bc, 0x1078, 0x4146, + 0x007c, 0x0f7e, 0x7070, 0xa086, 0x0014, 0x00c0, 0x2ce8, 0x6043, + 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2ce8, 0x2079, 0x7380, 0x7a30, + 0xa296, 0x1102, 0x00c0, 0x2ce6, 0x7834, 0xa005, 0x00c0, 0x2ce6, + 0x7a38, 0xd2fc, 0x0040, 0x2cdc, 0x709c, 0xa005, 0x00c0, 0x2cdc, + 0x1078, 0x3275, 0x709f, 0x0001, 0x2011, 0x31bc, 0x1078, 0x4153, + 0x707b, 0x0010, 0x1078, 0x2ef0, 0x0078, 0x2ce8, 0x7073, 0x0000, + 0x0f7f, 0x007c, 0x707b, 0x0003, 0x6043, 0x0004, 0x1078, 0x3246, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, - 0x00f0, 0x3036, 0x60c3, 0x0014, 0x1078, 0x351c, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x306d, 0x2011, 0x34fc, 0x1078, 0x4520, - 0xa086, 0x0014, 0x00c0, 0x3069, 0x2079, 0x7b80, 0x7a30, 0xa296, - 0x1102, 0x00c0, 0x3069, 0x7834, 0xa005, 0x00c0, 0x3069, 0x7a38, - 0xd2fc, 0x0040, 0x3063, 0x70a4, 0xa005, 0x00c0, 0x3063, 0x1078, - 0x35b5, 0x70a7, 0x0001, 0x7083, 0x0004, 0x1078, 0x306f, 0x0078, - 0x306d, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, - 0x0005, 0x1078, 0x3586, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, - 0x2011, 0x7b8e, 0x706c, 0xa005, 0x00c0, 0x3089, 0x714c, 0xa186, - 0xffff, 0x0040, 0x3089, 0x1078, 0x34c0, 0x0040, 0x3089, 0x1078, - 0x35b5, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x351c, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x30c5, 0x2011, 0x34fc, 0x1078, 0x4520, - 0xa086, 0x0014, 0x00c0, 0x30c1, 0x2079, 0x7b80, 0x7a30, 0xa296, - 0x1103, 0x00c0, 0x30c1, 0x7834, 0xa005, 0x00c0, 0x30c1, 0x7a38, - 0xd2fc, 0x0040, 0x30bb, 0x70a4, 0xa005, 0x00c0, 0x30bb, 0x1078, - 0x35b5, 0x70a7, 0x0001, 0x7083, 0x0006, 0x1078, 0x30c7, 0x0078, - 0x30c5, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, - 0x0007, 0x1078, 0x3586, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, - 0x2011, 0x7b8e, 0x706c, 0xa005, 0x00c0, 0x30e3, 0x7150, 0xa186, - 0xffff, 0x0040, 0x30e3, 0xa180, 0x2303, 0x200c, 0xa18c, 0xff00, - 0x810f, 0x1078, 0x34c0, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x351c, - 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x311f, 0x2011, 0x34fc, - 0x1078, 0x4520, 0xa086, 0x0014, 0x00c0, 0x311b, 0x2079, 0x7b80, - 0x7a30, 0xa296, 0x1104, 0x00c0, 0x311b, 0x7834, 0xa005, 0x00c0, - 0x311b, 0x7a38, 0xd2fc, 0x0040, 0x3115, 0x70a4, 0xa005, 0x00c0, - 0x3115, 0x1078, 0x35b5, 0x70a7, 0x0001, 0x7083, 0x0008, 0x1078, - 0x3121, 0x0078, 0x311f, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, - 0x007c, 0x7083, 0x0009, 0x1078, 0x3586, 0x20a3, 0x1105, 0x20a3, - 0x0100, 0x3430, 0x706c, 0xa005, 0x00c0, 0x3134, 0x1078, 0x342a, - 0x0040, 0x3144, 0x0078, 0x313e, 0x20a9, 0x0008, 0x2099, 0x7b8e, + 0x00f0, 0x2cf6, 0x60c3, 0x0014, 0x1078, 0x31dc, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2d2d, 0x2011, 0x31bc, 0x1078, 0x4153, + 0xa086, 0x0014, 0x00c0, 0x2d29, 0x2079, 0x7380, 0x7a30, 0xa296, + 0x1102, 0x00c0, 0x2d29, 0x7834, 0xa005, 0x00c0, 0x2d29, 0x7a38, + 0xd2fc, 0x0040, 0x2d23, 0x709c, 0xa005, 0x00c0, 0x2d23, 0x1078, + 0x3275, 0x709f, 0x0001, 0x707b, 0x0004, 0x1078, 0x2d2f, 0x0078, + 0x2d2d, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0005, 0x1078, 0x3246, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x738e, 0x7064, 0xa005, 0x00c0, 0x2d49, 0x714c, 0xa186, + 0xffff, 0x0040, 0x2d49, 0x1078, 0x3180, 0x0040, 0x2d49, 0x1078, + 0x3275, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31dc, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2d85, 0x2011, 0x31bc, 0x1078, 0x4153, + 0xa086, 0x0014, 0x00c0, 0x2d81, 0x2079, 0x7380, 0x7a30, 0xa296, + 0x1103, 0x00c0, 0x2d81, 0x7834, 0xa005, 0x00c0, 0x2d81, 0x7a38, + 0xd2fc, 0x0040, 0x2d7b, 0x709c, 0xa005, 0x00c0, 0x2d7b, 0x1078, + 0x3275, 0x709f, 0x0001, 0x707b, 0x0006, 0x1078, 0x2d87, 0x0078, + 0x2d85, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0007, 0x1078, 0x3246, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x738e, 0x7064, 0xa005, 0x00c0, 0x2da3, 0x7150, 0xa186, + 0xffff, 0x0040, 0x2da3, 0xa180, 0x21d3, 0x200c, 0xa18c, 0xff00, + 0x810f, 0x1078, 0x3180, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31dc, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2ddf, 0x2011, 0x31bc, + 0x1078, 0x4153, 0xa086, 0x0014, 0x00c0, 0x2ddb, 0x2079, 0x7380, + 0x7a30, 0xa296, 0x1104, 0x00c0, 0x2ddb, 0x7834, 0xa005, 0x00c0, + 0x2ddb, 0x7a38, 0xd2fc, 0x0040, 0x2dd5, 0x709c, 0xa005, 0x00c0, + 0x2dd5, 0x1078, 0x3275, 0x709f, 0x0001, 0x707b, 0x0008, 0x1078, + 0x2de1, 0x0078, 0x2ddf, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, + 0x007c, 0x707b, 0x0009, 0x1078, 0x3246, 0x20a3, 0x1105, 0x20a3, + 0x0100, 0x3430, 0x7064, 0xa005, 0x00c0, 0x2df4, 0x1078, 0x30ea, + 0x0040, 0x2e04, 0x0078, 0x2dfe, 0x20a9, 0x0008, 0x2099, 0x738e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x351c, 0x0078, 0x3146, 0x1078, 0x2fe3, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x3190, 0x2011, 0x34fc, 0x1078, 0x4520, - 0xa086, 0x0014, 0x00c0, 0x318c, 0x2079, 0x7b80, 0x7a30, 0xa296, - 0x1105, 0x00c0, 0x318c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, - 0x3175, 0x7a38, 0xd2fc, 0x0040, 0x316d, 0x70a4, 0xa005, 0x00c0, - 0x316d, 0x1078, 0x35b5, 0x70a7, 0x0001, 0x707f, 0x0001, 0x7083, - 0x000a, 0x1078, 0x3192, 0x0078, 0x3190, 0xa005, 0x00c0, 0x318c, - 0x7a38, 0xd2fc, 0x0040, 0x3184, 0x70a4, 0xa005, 0x00c0, 0x3184, - 0x1078, 0x35b5, 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083, 0x000e, - 0x1078, 0x3214, 0x0078, 0x3190, 0x7083, 0x0002, 0x707b, 0x0000, - 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011, 0x7b0e, 0x22a0, 0x20a9, + 0x1078, 0x31dc, 0x0078, 0x2e06, 0x1078, 0x2ca3, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2e50, 0x2011, 0x31bc, 0x1078, 0x4153, + 0xa086, 0x0014, 0x00c0, 0x2e4c, 0x2079, 0x7380, 0x7a30, 0xa296, + 0x1105, 0x00c0, 0x2e4c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, + 0x2e35, 0x7a38, 0xd2fc, 0x0040, 0x2e2d, 0x709c, 0xa005, 0x00c0, + 0x2e2d, 0x1078, 0x3275, 0x709f, 0x0001, 0x7077, 0x0001, 0x707b, + 0x000a, 0x1078, 0x2e52, 0x0078, 0x2e50, 0xa005, 0x00c0, 0x2e4c, + 0x7a38, 0xd2fc, 0x0040, 0x2e44, 0x709c, 0xa005, 0x00c0, 0x2e44, + 0x1078, 0x3275, 0x709f, 0x0001, 0x7077, 0x0000, 0x707b, 0x000e, + 0x1078, 0x2ed4, 0x0078, 0x2e50, 0x707b, 0x0002, 0x7073, 0x0000, + 0x0f7f, 0x007c, 0x707b, 0x000b, 0x2011, 0x730e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, - 0x41a4, 0x1078, 0x3586, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x6030, + 0x41a4, 0x1078, 0x3246, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, - 0x0084, 0x1078, 0x351c, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, - 0x31d6, 0x2011, 0x34fc, 0x1078, 0x4520, 0xa086, 0x0084, 0x00c0, - 0x31d2, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x31d2, - 0x7834, 0xa005, 0x00c0, 0x31d2, 0x7083, 0x000c, 0x1078, 0x31d8, - 0x0078, 0x31d6, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, - 0x7083, 0x000d, 0x1078, 0x3586, 0x20a3, 0x1107, 0x20a3, 0x0000, - 0x2099, 0x7b8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0084, 0x1078, 0x351c, 0x007c, 0x0f7e, 0x7078, - 0xa005, 0x0040, 0x3212, 0x2011, 0x34fc, 0x1078, 0x4520, 0xa086, - 0x0084, 0x00c0, 0x320e, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1107, - 0x00c0, 0x320e, 0x7834, 0xa005, 0x00c0, 0x320e, 0x1078, 0x3578, - 0x7083, 0x000e, 0x1078, 0x3214, 0x0078, 0x3212, 0x7083, 0x0002, - 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x000f, 0x707b, 0x0000, + 0x0084, 0x1078, 0x31dc, 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, + 0x2e96, 0x2011, 0x31bc, 0x1078, 0x4153, 0xa086, 0x0084, 0x00c0, + 0x2e92, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x2e92, + 0x7834, 0xa005, 0x00c0, 0x2e92, 0x707b, 0x000c, 0x1078, 0x2e98, + 0x0078, 0x2e96, 0x707b, 0x0002, 0x7073, 0x0000, 0x0f7f, 0x007c, + 0x707b, 0x000d, 0x1078, 0x3246, 0x20a3, 0x1107, 0x20a3, 0x0000, + 0x2099, 0x738e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x0084, 0x1078, 0x31dc, 0x007c, 0x0f7e, 0x7070, + 0xa005, 0x0040, 0x2ed2, 0x2011, 0x31bc, 0x1078, 0x4153, 0xa086, + 0x0084, 0x00c0, 0x2ece, 0x2079, 0x7380, 0x7a30, 0xa296, 0x1107, + 0x00c0, 0x2ece, 0x7834, 0xa005, 0x00c0, 0x2ece, 0x1078, 0x3238, + 0x707b, 0x000e, 0x1078, 0x2ed4, 0x0078, 0x2ed2, 0x707b, 0x0002, + 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x000f, 0x7073, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, - 0x2009, 0x07d0, 0x2011, 0x34fc, 0x1078, 0x4513, 0x007c, 0x7078, - 0xa005, 0x0040, 0x322f, 0x2011, 0x34fc, 0x1078, 0x4520, 0x007c, - 0x7083, 0x0011, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, - 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, - 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x351c, - 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3275, 0x2011, 0x34fc, - 0x1078, 0x4520, 0xa086, 0x0014, 0x00c0, 0x3273, 0x2079, 0x7b80, - 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3273, 0x7834, 0xa005, 0x00c0, - 0x3273, 0x7a38, 0xd2fc, 0x0040, 0x326d, 0x70a4, 0xa005, 0x00c0, - 0x326d, 0x1078, 0x35b5, 0x70a7, 0x0001, 0x7083, 0x0012, 0x1078, - 0x3277, 0x0078, 0x3275, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, - 0x0013, 0x1078, 0x3592, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, - 0x2011, 0x7b8e, 0x706c, 0xa005, 0x00c0, 0x3291, 0x714c, 0xa186, - 0xffff, 0x0040, 0x3291, 0x1078, 0x34c0, 0x0040, 0x3291, 0x1078, - 0x35b5, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x351c, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x32cb, 0x2011, 0x34fc, 0x1078, 0x4520, - 0xa086, 0x0014, 0x00c0, 0x32c9, 0x2079, 0x7b80, 0x7a30, 0xa296, - 0x1104, 0x00c0, 0x32c9, 0x7834, 0xa005, 0x00c0, 0x32c9, 0x7a38, - 0xd2fc, 0x0040, 0x32c3, 0x70a4, 0xa005, 0x00c0, 0x32c3, 0x1078, - 0x35b5, 0x70a7, 0x0001, 0x7083, 0x0014, 0x1078, 0x32cd, 0x0078, - 0x32cb, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0015, 0x1078, - 0x3592, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7b8e, - 0x706c, 0xa006, 0x00c0, 0x32e9, 0x7150, 0xa186, 0xffff, 0x0040, - 0x32e9, 0xa180, 0x2303, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, - 0x34c0, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x351c, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x333a, 0x2011, 0x34fc, 0x1078, 0x4520, - 0xa086, 0x0014, 0x00c0, 0x3338, 0x2079, 0x7b80, 0x7a30, 0xa296, - 0x1105, 0x00c0, 0x3338, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, - 0x3321, 0x7a38, 0xd2fc, 0x0040, 0x331d, 0x70a4, 0xa005, 0x00c0, - 0x331d, 0x1078, 0x35b5, 0x70a7, 0x0001, 0x707f, 0x0001, 0x0078, - 0x3332, 0xa005, 0x00c0, 0x3338, 0x7a38, 0xd2fc, 0x0040, 0x3330, - 0x70a4, 0xa005, 0x00c0, 0x3330, 0x1078, 0x35b5, 0x70a7, 0x0001, - 0x707f, 0x0000, 0x7083, 0x0016, 0x1078, 0x333c, 0x0078, 0x333a, - 0x707b, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x7b80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, - 0x2011, 0x7b8e, 0x707c, 0xa005, 0x0040, 0x3352, 0x7083, 0x0017, - 0x0078, 0x3354, 0x7083, 0x001b, 0x706c, 0xa005, 0x00c0, 0x335e, - 0x1078, 0x342a, 0x0040, 0x336e, 0x0078, 0x3368, 0x20a9, 0x0008, - 0x2099, 0x7b8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x351c, 0x0078, 0x3370, 0x1078, 0x2fe3, - 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3391, 0x2011, 0x34fc, - 0x1078, 0x4520, 0xa086, 0x0084, 0x00c0, 0x338f, 0x2079, 0x7b80, - 0x7a30, 0xa296, 0x1106, 0x00c0, 0x338f, 0x7834, 0xa005, 0x00c0, - 0x338f, 0x7083, 0x0018, 0x1078, 0x3393, 0x0078, 0x3391, 0x707b, - 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0019, 0x1078, 0x3592, 0x20a3, - 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x7b8e, 0x2039, 0x7b0e, + 0x2009, 0x07d0, 0x2011, 0x31bc, 0x1078, 0x4146, 0x007c, 0x7070, + 0xa005, 0x0040, 0x2eef, 0x2011, 0x31bc, 0x1078, 0x4153, 0x007c, + 0x707b, 0x0011, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7380, + 0x20a1, 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, + 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x31dc, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x2f35, 0x2011, 0x31bc, + 0x1078, 0x4153, 0xa086, 0x0014, 0x00c0, 0x2f33, 0x2079, 0x7380, + 0x7a30, 0xa296, 0x1103, 0x00c0, 0x2f33, 0x7834, 0xa005, 0x00c0, + 0x2f33, 0x7a38, 0xd2fc, 0x0040, 0x2f2d, 0x709c, 0xa005, 0x00c0, + 0x2f2d, 0x1078, 0x3275, 0x709f, 0x0001, 0x707b, 0x0012, 0x1078, + 0x2f37, 0x0078, 0x2f35, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, + 0x0013, 0x1078, 0x3252, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, + 0x2011, 0x738e, 0x7064, 0xa005, 0x00c0, 0x2f51, 0x714c, 0xa186, + 0xffff, 0x0040, 0x2f51, 0x1078, 0x3180, 0x0040, 0x2f51, 0x1078, + 0x3275, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31dc, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2f8b, 0x2011, 0x31bc, 0x1078, 0x4153, + 0xa086, 0x0014, 0x00c0, 0x2f89, 0x2079, 0x7380, 0x7a30, 0xa296, + 0x1104, 0x00c0, 0x2f89, 0x7834, 0xa005, 0x00c0, 0x2f89, 0x7a38, + 0xd2fc, 0x0040, 0x2f83, 0x709c, 0xa005, 0x00c0, 0x2f83, 0x1078, + 0x3275, 0x709f, 0x0001, 0x707b, 0x0014, 0x1078, 0x2f8d, 0x0078, + 0x2f8b, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0015, 0x1078, + 0x3252, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x738e, + 0x7064, 0xa006, 0x00c0, 0x2fa9, 0x7150, 0xa186, 0xffff, 0x0040, + 0x2fa9, 0xa180, 0x21d3, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, + 0x3180, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x31dc, 0x007c, 0x0f7e, + 0x7070, 0xa005, 0x0040, 0x2ffa, 0x2011, 0x31bc, 0x1078, 0x4153, + 0xa086, 0x0014, 0x00c0, 0x2ff8, 0x2079, 0x7380, 0x7a30, 0xa296, + 0x1105, 0x00c0, 0x2ff8, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, + 0x2fe1, 0x7a38, 0xd2fc, 0x0040, 0x2fdd, 0x709c, 0xa005, 0x00c0, + 0x2fdd, 0x1078, 0x3275, 0x709f, 0x0001, 0x7077, 0x0001, 0x0078, + 0x2ff2, 0xa005, 0x00c0, 0x2ff8, 0x7a38, 0xd2fc, 0x0040, 0x2ff0, + 0x709c, 0xa005, 0x00c0, 0x2ff0, 0x1078, 0x3275, 0x709f, 0x0001, + 0x7077, 0x0000, 0x707b, 0x0016, 0x1078, 0x2ffc, 0x0078, 0x2ffa, + 0x7073, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x2099, 0x7380, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, + 0x2011, 0x738e, 0x7074, 0xa005, 0x0040, 0x3012, 0x707b, 0x0017, + 0x0078, 0x3014, 0x707b, 0x001b, 0x7064, 0xa005, 0x00c0, 0x301e, + 0x1078, 0x30ea, 0x0040, 0x302e, 0x0078, 0x3028, 0x20a9, 0x0008, + 0x2099, 0x738e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x60c3, 0x0014, 0x1078, 0x31dc, 0x0078, 0x3030, 0x1078, 0x2ca3, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x3051, 0x2011, 0x31bc, + 0x1078, 0x4153, 0xa086, 0x0084, 0x00c0, 0x304f, 0x2079, 0x7380, + 0x7a30, 0xa296, 0x1106, 0x00c0, 0x304f, 0x7834, 0xa005, 0x00c0, + 0x304f, 0x707b, 0x0018, 0x1078, 0x3053, 0x0078, 0x3051, 0x7073, + 0x0000, 0x0f7f, 0x007c, 0x707b, 0x0019, 0x1078, 0x3252, 0x20a3, + 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x738e, 0x2039, 0x730e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, - 0x6030, 0x2310, 0x8214, 0xa2a0, 0x7b0e, 0x2414, 0xa38c, 0x0001, - 0x0040, 0x33be, 0xa294, 0xff00, 0x0078, 0x33c1, 0xa294, 0x00ff, + 0x6030, 0x2310, 0x8214, 0xa2a0, 0x730e, 0x2414, 0xa38c, 0x0001, + 0x0040, 0x307e, 0xa294, 0xff00, 0x0078, 0x3081, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x351c, - 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x33f3, 0x2011, 0x34fc, - 0x1078, 0x4520, 0xa086, 0x0084, 0x00c0, 0x33f1, 0x2079, 0x7b80, - 0x7a30, 0xa296, 0x1107, 0x00c0, 0x33f1, 0x7834, 0xa005, 0x00c0, - 0x33f1, 0x1078, 0x3578, 0x7083, 0x001a, 0x1078, 0x33f5, 0x0078, - 0x33f3, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x001b, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, 0x20a1, 0x020b, 0x7478, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x31dc, + 0x007c, 0x0f7e, 0x7070, 0xa005, 0x0040, 0x30b3, 0x2011, 0x31bc, + 0x1078, 0x4153, 0xa086, 0x0084, 0x00c0, 0x30b1, 0x2079, 0x7380, + 0x7a30, 0xa296, 0x1107, 0x00c0, 0x30b1, 0x7834, 0xa005, 0x00c0, + 0x30b1, 0x1078, 0x3238, 0x707b, 0x001a, 0x1078, 0x30b5, 0x0078, + 0x30b3, 0x7073, 0x0000, 0x0f7f, 0x007c, 0x707b, 0x001b, 0x20e1, + 0x9080, 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x7470, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, - 0x53a6, 0x60c3, 0x0084, 0x1078, 0x351c, 0x007c, 0x7078, 0xa005, - 0x0040, 0x341a, 0x2011, 0x34fc, 0x1078, 0x4520, 0x7083, 0x001c, - 0x1078, 0x341b, 0x007c, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, - 0xb5b5, 0x6043, 0x0001, 0x2009, 0x07d0, 0x2011, 0x34fc, 0x1078, - 0x4513, 0x007c, 0x087e, 0x097e, 0x2029, 0x7652, 0x252c, 0x20a9, - 0x0008, 0x2041, 0x7b0e, 0x28a0, 0x2099, 0x7b8e, 0x53a3, 0x20a9, - 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x3440, 0x2011, 0x0000, - 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, 0x3452, 0xd5d4, - 0x0040, 0x344d, 0x8210, 0x0078, 0x344e, 0x8211, 0x00f0, 0x3440, - 0x0078, 0x34b7, 0x82ff, 0x00c0, 0x3464, 0xd5d4, 0x0040, 0x345e, - 0xa1a6, 0x3fff, 0x0040, 0x344a, 0x0078, 0x3462, 0xa1a6, 0x3fff, - 0x0040, 0x34b7, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, - 0xd5d4, 0x0040, 0x346d, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0040, - 0x3474, 0x8423, 0x0078, 0x3475, 0x8424, 0x00c8, 0x3482, 0xd5d4, - 0x0040, 0x347d, 0x8319, 0x0078, 0x347e, 0x8318, 0x00f0, 0x346e, - 0x0078, 0x34b7, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x00f0, - 0x3486, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, 0x349a, 0x007e, + 0x53a6, 0x60c3, 0x0084, 0x1078, 0x31dc, 0x007c, 0x7070, 0xa005, + 0x0040, 0x30da, 0x2011, 0x31bc, 0x1078, 0x4153, 0x707b, 0x001c, + 0x1078, 0x30db, 0x007c, 0x7073, 0x0000, 0x608b, 0xbc85, 0x608f, + 0xb5b5, 0x6043, 0x0001, 0x2009, 0x07d0, 0x2011, 0x31bc, 0x1078, + 0x4146, 0x007c, 0x087e, 0x097e, 0x2029, 0x6f52, 0x252c, 0x20a9, + 0x0008, 0x2041, 0x730e, 0x28a0, 0x2099, 0x738e, 0x53a3, 0x20a9, + 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x3100, 0x2011, 0x0000, + 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, 0x3112, 0xd5d4, + 0x0040, 0x310d, 0x8210, 0x0078, 0x310e, 0x8211, 0x00f0, 0x3100, + 0x0078, 0x3177, 0x82ff, 0x00c0, 0x3124, 0xd5d4, 0x0040, 0x311e, + 0xa1a6, 0x3fff, 0x0040, 0x310a, 0x0078, 0x3122, 0xa1a6, 0x3fff, + 0x0040, 0x3177, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, + 0xd5d4, 0x0040, 0x312d, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0040, + 0x3134, 0x8423, 0x0078, 0x3135, 0x8424, 0x00c8, 0x3142, 0xd5d4, + 0x0040, 0x313d, 0x8319, 0x0078, 0x313e, 0x8318, 0x00f0, 0x312e, + 0x0078, 0x3177, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x00f0, + 0x3146, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, 0x315a, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8, 0xa5a8, 0x0010, - 0x00f0, 0x3496, 0x754e, 0xa5c8, 0x2303, 0x292c, 0xa5ac, 0x00ff, + 0x00f0, 0x3156, 0x754e, 0xa5c8, 0x21d3, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, - 0x706f, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, 0x34bd, 0xa006, - 0x0078, 0x34bd, 0xa006, 0x1078, 0x12d5, 0x097f, 0x087f, 0x007c, + 0x7067, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, 0x317d, 0xa006, + 0x0078, 0x317d, 0xa006, 0x1078, 0x1286, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, - 0x34cd, 0x8420, 0x8001, 0x0078, 0x34c5, 0x2118, 0x84ff, 0x0040, - 0x34d6, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x34d1, 0x2021, 0x0001, - 0x83ff, 0x0040, 0x34df, 0x8423, 0x8319, 0x00c0, 0x34db, 0xa238, - 0x2704, 0xa42c, 0x00c0, 0x34f4, 0xa405, 0x203a, 0x714e, 0xa1a0, - 0x2303, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, - 0x706f, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7600, - 0x7073, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, 0x0100, - 0x2071, 0x0140, 0x1078, 0x5534, 0x7004, 0xa084, 0x4000, 0x0040, - 0x350d, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, 0x2091, 0x8000, - 0x2071, 0x7620, 0x2073, 0x0000, 0x7843, 0x0090, 0x7843, 0x0010, + 0x318d, 0x8420, 0x8001, 0x0078, 0x3185, 0x2118, 0x84ff, 0x0040, + 0x3196, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x3191, 0x2021, 0x0001, + 0x83ff, 0x0040, 0x319f, 0x8423, 0x8319, 0x00c0, 0x319b, 0xa238, + 0x2704, 0xa42c, 0x00c0, 0x31b4, 0xa405, 0x203a, 0x714e, 0xa1a0, + 0x21d3, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, + 0x7067, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6f00, + 0x706b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, 0x0100, + 0x2071, 0x0140, 0x1078, 0x4f45, 0x7004, 0xa084, 0x4000, 0x0040, + 0x31cd, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, 0x2091, 0x8000, + 0x2071, 0x6f1e, 0x2073, 0x0000, 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, - 0x7840, 0x2013, 0x0000, 0x707b, 0x0000, 0x127f, 0x20e1, 0x9080, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x552b, 0x2009, 0x07d0, - 0x2011, 0x34fc, 0x1078, 0x45b0, 0x007c, 0x017e, 0x027e, 0x0c7e, - 0x127e, 0x2091, 0x8000, 0x2009, 0x00f7, 0x1078, 0x359e, 0x2061, - 0x7849, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0x7600, 0x6003, + 0x70c0, 0x2013, 0x0000, 0x7073, 0x0000, 0x127f, 0x20e1, 0x9080, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x4f3c, 0x2009, 0x07d0, + 0x2011, 0x31bc, 0x1078, 0x41e3, 0x007c, 0x017e, 0x027e, 0x0c7e, + 0x127e, 0x2091, 0x8000, 0x2009, 0x00f7, 0x1078, 0x325e, 0x2061, + 0x70c9, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0x6f00, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, - 0x001e, 0x2011, 0x355a, 0x1078, 0x4513, 0x127f, 0x0c7f, 0x027f, + 0x001e, 0x2011, 0x321a, 0x1078, 0x4146, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x0100, 0x1078, 0x5534, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, - 0x0040, 0x356e, 0x7003, 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, - 0x1078, 0x1fff, 0x1078, 0x3535, 0x127f, 0x007f, 0x0e7f, 0x007c, - 0x20a9, 0x0040, 0x20a1, 0x7cc0, 0x2099, 0x7b8e, 0x3304, 0x8007, - 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x357e, 0x007c, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x7b00, 0x20a1, 0x020b, 0x20a9, 0x000c, - 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, + 0x0100, 0x1078, 0x4f45, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, + 0x0040, 0x322e, 0x7003, 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, + 0x1078, 0x1f5e, 0x1078, 0x31f5, 0x127f, 0x007f, 0x0e7f, 0x007c, + 0x20a9, 0x0040, 0x20a1, 0x74c0, 0x2099, 0x738e, 0x3304, 0x8007, + 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x323e, 0x007c, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x2099, 0x7300, 0x20a1, 0x020b, 0x20a9, 0x000c, + 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7380, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x0c7e, 0x007e, - 0x2061, 0x0100, 0x810f, 0x2001, 0x762c, 0x2004, 0xa005, 0x00c0, - 0x35af, 0x6030, 0xa084, 0x00ff, 0xa105, 0x0078, 0x35b1, 0xa185, + 0x2061, 0x0100, 0x810f, 0x2001, 0x6f2a, 0x2004, 0xa005, 0x00c0, + 0x326f, 0x6030, 0xa084, 0x00ff, 0xa105, 0x0078, 0x3271, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c, 0x017e, 0x047e, 0x2001, - 0x7652, 0x2004, 0xd0a4, 0x0040, 0x35c8, 0xa006, 0x2020, 0x2009, - 0x002a, 0x1078, 0x74ec, 0x2001, 0x760c, 0x200c, 0xc195, 0x2102, - 0x2019, 0x002a, 0x1078, 0x226d, 0x047f, 0x017f, 0x007c, 0x157e, - 0x20a9, 0x00ff, 0x2009, 0x7720, 0xa006, 0x200a, 0x8108, 0x00f0, - 0x35d5, 0x157f, 0x007c, 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, - 0x2069, 0x7651, 0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, - 0x6012, 0xa198, 0x2303, 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, + 0x6f52, 0x2004, 0xd0a4, 0x0040, 0x3288, 0xa006, 0x2020, 0x2009, + 0x002a, 0x1078, 0x6d90, 0x2001, 0x6f0c, 0x200c, 0xc195, 0x2102, + 0x2019, 0x002a, 0x1078, 0x2152, 0x047f, 0x017f, 0x007c, 0x157e, + 0x20a9, 0x007d, 0x2009, 0x7020, 0xa006, 0x200a, 0x8108, 0x00f0, + 0x3295, 0x157f, 0x007c, 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, + 0x2069, 0x6f51, 0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, + 0x6012, 0xa198, 0x21d3, 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, @@ -9366,5354 +10330,1904 @@ static const u_int16_t ISP2100_RISC_CODE[] = { 0x609a, 0x609e, 0x61a2, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0xa1b4, 0x00ff, - 0xa682, 0x0010, 0x00c8, 0x36c7, 0xa18c, 0xff00, 0x810f, 0xa182, - 0x00ff, 0x00c8, 0x36cd, 0x2001, 0x760c, 0x2004, 0xa084, 0x0003, - 0x00c0, 0x36b0, 0xa188, 0x7720, 0x2104, 0xa065, 0x0040, 0x36a6, - 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x36ac, 0x6078, - 0xa00d, 0x0040, 0x3651, 0xa680, 0x7580, 0x2004, 0xa10c, 0x00c0, - 0x36a0, 0x607c, 0xa00d, 0x0040, 0x366d, 0xa680, 0x7580, 0x2004, - 0xa10c, 0x0040, 0x366d, 0x694c, 0xd1fc, 0x00c0, 0x3663, 0x1078, - 0x3760, 0x0078, 0x369b, 0x1078, 0x3731, 0x694c, 0xd1ec, 0x00c0, - 0x369b, 0x1078, 0x3879, 0x0078, 0x369b, 0x694c, 0xa184, 0xa000, - 0x0040, 0x368b, 0xd1ec, 0x0040, 0x3684, 0xd1fc, 0x0040, 0x367c, - 0x1078, 0x3890, 0x0078, 0x3687, 0xa680, 0x7580, 0x200c, 0x607c, - 0xa105, 0x607e, 0x0078, 0x368b, 0xd1fc, 0x0040, 0x368b, 0x1078, - 0x3731, 0x0078, 0x369b, 0x6050, 0xa00d, 0x0040, 0x3696, 0x2d00, - 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x369b, 0x2d00, 0x6052, - 0x604e, 0x6803, 0x0000, 0x1078, 0x47f6, 0xa006, 0x127f, 0x007c, - 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x36d1, 0x2001, 0x0028, - 0x2009, 0x0000, 0x0078, 0x36d1, 0xa082, 0x0006, 0x0048, 0x3647, - 0x2009, 0x760c, 0x210c, 0xd18c, 0x0040, 0x36ba, 0x2001, 0x0004, - 0x0078, 0x36c3, 0xd184, 0x0040, 0x36c1, 0x2001, 0x0004, 0x0078, - 0x36c3, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x36d1, 0x2001, - 0x0029, 0x2009, 0x0000, 0x0078, 0x36d1, 0x2001, 0x0029, 0x2009, + 0xa682, 0x0010, 0x00c8, 0x3387, 0xa18c, 0xff00, 0x810f, 0xa182, + 0x007e, 0x00c8, 0x338d, 0x2001, 0x6f0c, 0x2004, 0xa084, 0x0003, + 0x00c0, 0x3370, 0xa188, 0x7020, 0x2104, 0xa065, 0x0040, 0x3366, + 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x336c, 0x6078, + 0xa00d, 0x0040, 0x3311, 0xa680, 0x6e24, 0x2004, 0xa10c, 0x00c0, + 0x3360, 0x607c, 0xa00d, 0x0040, 0x332d, 0xa680, 0x6e24, 0x2004, + 0xa10c, 0x0040, 0x332d, 0x694c, 0xd1fc, 0x00c0, 0x3323, 0x1078, + 0x3420, 0x0078, 0x335b, 0x1078, 0x33f1, 0x694c, 0xd1ec, 0x00c0, + 0x335b, 0x1078, 0x3539, 0x0078, 0x335b, 0x694c, 0xa184, 0xa000, + 0x0040, 0x334b, 0xd1ec, 0x0040, 0x3344, 0xd1fc, 0x0040, 0x333c, + 0x1078, 0x3550, 0x0078, 0x3347, 0xa680, 0x6e24, 0x200c, 0x607c, + 0xa105, 0x607e, 0x0078, 0x334b, 0xd1fc, 0x0040, 0x334b, 0x1078, + 0x33f1, 0x0078, 0x335b, 0x6050, 0xa00d, 0x0040, 0x3356, 0x2d00, + 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x335b, 0x2d00, 0x6052, + 0x604e, 0x6803, 0x0000, 0x1078, 0x4417, 0xa006, 0x127f, 0x007c, + 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3391, 0x2001, 0x0028, + 0x2009, 0x0000, 0x0078, 0x3391, 0xa082, 0x0006, 0x0048, 0x3307, + 0x2009, 0x6f0c, 0x210c, 0xd18c, 0x0040, 0x337a, 0x2001, 0x0004, + 0x0078, 0x3383, 0xd184, 0x0040, 0x3381, 0x2001, 0x0004, 0x0078, + 0x3383, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3391, 0x2001, + 0x0029, 0x2009, 0x0000, 0x0078, 0x3391, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0xa1b4, 0x00ff, 0xa682, - 0x0010, 0x00c8, 0x3716, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, - 0x00c8, 0x3706, 0xa188, 0x7720, 0x2104, 0xa065, 0x0040, 0x3706, - 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x370c, 0x684c, - 0xd0ec, 0x0040, 0x36f9, 0x1078, 0x3890, 0x1078, 0x3731, 0x0078, - 0x3701, 0x1078, 0x3731, 0x684c, 0xd0fc, 0x0040, 0x3701, 0x1078, - 0x3879, 0x1078, 0x38a4, 0xa006, 0x0078, 0x371a, 0x2001, 0x0028, - 0x2009, 0x0000, 0x0078, 0x371a, 0xa082, 0x0006, 0x0048, 0x36ef, - 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x371a, 0x2001, 0x0029, + 0x0010, 0x00c8, 0x33d6, 0xa18c, 0xff00, 0x810f, 0xa182, 0x007e, + 0x00c8, 0x33c6, 0xa188, 0x7020, 0x2104, 0xa065, 0x0040, 0x33c6, + 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x33cc, 0x684c, + 0xd0ec, 0x0040, 0x33b9, 0x1078, 0x3550, 0x1078, 0x33f1, 0x0078, + 0x33c1, 0x1078, 0x33f1, 0x684c, 0xd0fc, 0x0040, 0x33c1, 0x1078, + 0x3539, 0x1078, 0x3564, 0xa006, 0x0078, 0x33da, 0x2001, 0x0028, + 0x2009, 0x0000, 0x0078, 0x33da, 0xa082, 0x0006, 0x0048, 0x33af, + 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x33da, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050, - 0xa00d, 0x0040, 0x372a, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, + 0xa00d, 0x0040, 0x33ea, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, - 0x3728, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x373d, + 0x33e8, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x33fd, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, - 0x6803, 0x0000, 0x0078, 0x373b, 0x127e, 0x2091, 0x8000, 0x604c, - 0xa06d, 0x0040, 0x3752, 0x6800, 0xa005, 0x00c0, 0x3750, 0x6052, - 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x375f, - 0x6800, 0xa005, 0x00c0, 0x375d, 0x6052, 0x604e, 0xad05, 0x007c, - 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x376a, 0x2d00, 0x200a, - 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x3769, 0x127e, + 0x6803, 0x0000, 0x0078, 0x33fb, 0x127e, 0x2091, 0x8000, 0x604c, + 0xa06d, 0x0040, 0x3412, 0x6800, 0xa005, 0x00c0, 0x3410, 0x6052, + 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x341f, + 0x6800, 0xa005, 0x00c0, 0x341d, 0x6052, 0x604e, 0xad05, 0x007c, + 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x342a, 0x2d00, 0x200a, + 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x3429, 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, - 0x0040, 0x377d, 0xc285, 0x0078, 0x377e, 0xc284, 0x6202, 0x027f, + 0x0040, 0x343d, 0xc285, 0x0078, 0x343e, 0xc284, 0x6202, 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, - 0x027e, 0xa182, 0x00ff, 0x0048, 0x37a9, 0xa085, 0x0001, 0x0078, - 0x37bd, 0xa190, 0x7720, 0x2204, 0xa065, 0x00c0, 0x37bc, 0x017e, - 0x0d7e, 0x1078, 0x1314, 0x2d60, 0x0d7f, 0x017f, 0x0040, 0x37a5, - 0x2c00, 0x2012, 0x1078, 0x35db, 0xa006, 0x027f, 0x007c, 0x027e, - 0xa182, 0x00ff, 0x0048, 0x37c8, 0xa085, 0x0001, 0x0078, 0x37d5, - 0x0d7e, 0xa190, 0x7720, 0x2204, 0xa06d, 0x0040, 0x37d3, 0x2013, - 0x0000, 0x1078, 0x1348, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, - 0xa182, 0x00ff, 0x0048, 0x37e0, 0xa085, 0x0001, 0x0078, 0x37e7, - 0xa188, 0x7720, 0x2104, 0xa065, 0x0040, 0x37dc, 0xa006, 0x017f, + 0x027e, 0xa182, 0x007e, 0x0048, 0x3469, 0xa085, 0x0001, 0x0078, + 0x347d, 0xa190, 0x7020, 0x2204, 0xa065, 0x00c0, 0x347c, 0x017e, + 0x0d7e, 0x1078, 0x12c5, 0x2d60, 0x0d7f, 0x017f, 0x0040, 0x3465, + 0x2c00, 0x2012, 0x1078, 0x329b, 0xa006, 0x027f, 0x007c, 0x027e, + 0xa182, 0x007e, 0x0048, 0x3488, 0xa085, 0x0001, 0x0078, 0x3495, + 0x0d7e, 0xa190, 0x7020, 0x2204, 0xa06d, 0x0040, 0x3493, 0x2013, + 0x0000, 0x1078, 0x12f9, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, + 0xa182, 0x007e, 0x0048, 0x34a0, 0xa085, 0x0001, 0x0078, 0x34a7, + 0xa188, 0x7020, 0x2104, 0xa065, 0x0040, 0x349c, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, - 0x0000, 0x6000, 0xc08c, 0x6002, 0x2069, 0x7b8e, 0x6808, 0x605e, - 0x6810, 0x6062, 0x6138, 0xa10a, 0x0048, 0x37ff, 0x603a, 0x6814, - 0x6066, 0x2099, 0x7b96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, - 0x53a3, 0x2099, 0x7b9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, - 0x53a3, 0x2069, 0x7bae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, - 0x6072, 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, 0x3823, 0x2009, - 0x0008, 0x0078, 0x384d, 0xa182, 0x0259, 0x00c8, 0x382b, 0x2009, - 0x0007, 0x0078, 0x384d, 0xa182, 0x02c1, 0x00c8, 0x3833, 0x2009, - 0x0006, 0x0078, 0x384d, 0xa182, 0x0349, 0x00c8, 0x383b, 0x2009, - 0x0005, 0x0078, 0x384d, 0xa182, 0x0421, 0x00c8, 0x3843, 0x2009, - 0x0004, 0x0078, 0x384d, 0xa182, 0x0581, 0x00c8, 0x384b, 0x2009, - 0x0003, 0x0078, 0x384d, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, - 0x157f, 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x7b8d, 0x2e04, 0x6896, - 0x2071, 0x7b8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, - 0x2001, 0x7580, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x6178, - 0xa10d, 0x617a, 0x127f, 0x007c, 0x2001, 0x7580, 0xa600, 0x2004, + 0x0000, 0x6000, 0xc08c, 0x6002, 0x2069, 0x738e, 0x6808, 0x605e, + 0x6810, 0x6062, 0x6138, 0xa10a, 0x0048, 0x34bf, 0x603a, 0x6814, + 0x6066, 0x2099, 0x7396, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, + 0x53a3, 0x2099, 0x739a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, + 0x53a3, 0x2069, 0x73ae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, + 0x6072, 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, 0x34e3, 0x2009, + 0x0008, 0x0078, 0x350d, 0xa182, 0x0259, 0x00c8, 0x34eb, 0x2009, + 0x0007, 0x0078, 0x350d, 0xa182, 0x02c1, 0x00c8, 0x34f3, 0x2009, + 0x0006, 0x0078, 0x350d, 0xa182, 0x0349, 0x00c8, 0x34fb, 0x2009, + 0x0005, 0x0078, 0x350d, 0xa182, 0x0421, 0x00c8, 0x3503, 0x2009, + 0x0004, 0x0078, 0x350d, 0xa182, 0x0581, 0x00c8, 0x350b, 0x2009, + 0x0003, 0x0078, 0x350d, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, + 0x157f, 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x738d, 0x2e04, 0x6896, + 0x2071, 0x738e, 0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, + 0x2001, 0x6e24, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x6178, + 0xa10d, 0x617a, 0x127f, 0x007c, 0x2001, 0x6e24, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, 0x6178, 0xa10c, 0x617a, 0x127f, - 0x007c, 0x2001, 0x7580, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, - 0x8000, 0x617c, 0xa10c, 0x617e, 0x127f, 0x0078, 0x3889, 0x1078, - 0x371c, 0x1078, 0x38ea, 0x00c0, 0x3887, 0x1078, 0x38a4, 0x007c, - 0x2001, 0x7580, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x617c, - 0xa10d, 0x617e, 0x127f, 0x0078, 0x389f, 0x1078, 0x3760, 0x1078, - 0x38ae, 0x00c0, 0x389d, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, - 0x47f6, 0x127f, 0x007c, 0xa01e, 0x0078, 0x38b0, 0x2019, 0x0001, + 0x007c, 0x2001, 0x6e24, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, + 0x8000, 0x617c, 0xa10c, 0x617e, 0x127f, 0x0078, 0x3549, 0x1078, + 0x33dc, 0x1078, 0x35aa, 0x00c0, 0x3547, 0x1078, 0x3564, 0x007c, + 0x2001, 0x6e24, 0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x617c, + 0xa10d, 0x617e, 0x127f, 0x0078, 0x355f, 0x1078, 0x3420, 0x1078, + 0x356e, 0x00c0, 0x355d, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, + 0x4417, 0x127f, 0x007c, 0xa01e, 0x0078, 0x3570, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, - 0x00c0, 0x38d0, 0x8dff, 0x0040, 0x38e5, 0x83ff, 0x0040, 0x38c8, - 0x6844, 0xa084, 0x00ff, 0xa606, 0x0040, 0x38d5, 0x0078, 0x38d0, - 0x683c, 0xa406, 0x00c0, 0x38d0, 0x6840, 0xa506, 0x0040, 0x38d5, - 0x2d08, 0x6800, 0x2068, 0x0078, 0x38ba, 0x6a00, 0x604c, 0xad06, - 0x00c0, 0x38dd, 0x624e, 0x0078, 0x38e0, 0xa180, 0x0000, 0x2202, - 0x82ff, 0x00c0, 0x38e5, 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, - 0x0078, 0x38ec, 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, - 0x0040, 0x391a, 0x83ff, 0x0040, 0x38fd, 0x6844, 0xa084, 0x00ff, - 0xa606, 0x0040, 0x390a, 0x0078, 0x3905, 0x683c, 0xa406, 0x00c0, - 0x3905, 0x6840, 0xa506, 0x0040, 0x390a, 0x2d08, 0x6800, 0x2068, - 0x0078, 0x38ef, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x3912, 0x6282, - 0x0078, 0x3915, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x391a, - 0x6186, 0x8dff, 0x007c, 0x2001, 0x7580, 0xa600, 0x2004, 0x6178, - 0xa10c, 0x0040, 0x3925, 0x2011, 0x0001, 0x617c, 0xa10c, 0x0040, - 0x392b, 0xa295, 0x0002, 0x007c, 0x1078, 0x3977, 0x0040, 0x3934, - 0x1078, 0x69c1, 0x0078, 0x3936, 0xa085, 0x0001, 0x007c, 0x1078, - 0x3977, 0x0040, 0x393f, 0x1078, 0x6950, 0x0078, 0x3941, 0xa085, - 0x0001, 0x007c, 0x1078, 0x3977, 0x0040, 0x394a, 0x1078, 0x6996, - 0x0078, 0x394c, 0xa085, 0x0001, 0x007c, 0x1078, 0x3977, 0x0040, - 0x3955, 0x1078, 0x696c, 0x0078, 0x3957, 0xa085, 0x0001, 0x007c, + 0x00c0, 0x3590, 0x8dff, 0x0040, 0x35a5, 0x83ff, 0x0040, 0x3588, + 0x6844, 0xa084, 0x00ff, 0xa606, 0x0040, 0x3595, 0x0078, 0x3590, + 0x683c, 0xa406, 0x00c0, 0x3590, 0x6840, 0xa506, 0x0040, 0x3595, + 0x2d08, 0x6800, 0x2068, 0x0078, 0x357a, 0x6a00, 0x604c, 0xad06, + 0x00c0, 0x359d, 0x624e, 0x0078, 0x35a0, 0xa180, 0x0000, 0x2202, + 0x82ff, 0x00c0, 0x35a5, 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, + 0x0078, 0x35ac, 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, + 0x0040, 0x35da, 0x83ff, 0x0040, 0x35bd, 0x6844, 0xa084, 0x00ff, + 0xa606, 0x0040, 0x35ca, 0x0078, 0x35c5, 0x683c, 0xa406, 0x00c0, + 0x35c5, 0x6840, 0xa506, 0x0040, 0x35ca, 0x2d08, 0x6800, 0x2068, + 0x0078, 0x35af, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x35d2, 0x6282, + 0x0078, 0x35d5, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x35da, + 0x6186, 0x8dff, 0x007c, 0x2001, 0x6e24, 0xa600, 0x2004, 0x6178, + 0xa10c, 0x0040, 0x35e5, 0x2011, 0x0001, 0x617c, 0xa10c, 0x0040, + 0x35eb, 0xa295, 0x0002, 0x007c, 0x1078, 0x3637, 0x0040, 0x35f4, + 0x1078, 0x628e, 0x0078, 0x35f6, 0xa085, 0x0001, 0x007c, 0x1078, + 0x3637, 0x0040, 0x35ff, 0x1078, 0x621d, 0x0078, 0x3601, 0xa085, + 0x0001, 0x007c, 0x1078, 0x3637, 0x0040, 0x360a, 0x1078, 0x6263, + 0x0078, 0x360c, 0xa085, 0x0001, 0x007c, 0x1078, 0x3637, 0x0040, + 0x3615, 0x1078, 0x6239, 0x0078, 0x3617, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, - 0x396f, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x6aea, 0x1078, 0x3a2c, 0x007f, 0x0078, 0x395e, 0x6083, + 0x362f, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, + 0x1078, 0x639b, 0x1078, 0x36ec, 0x007f, 0x0078, 0x361e, 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x609c, - 0xd0a4, 0x007c, 0x0f7e, 0x2079, 0x7651, 0x7804, 0xd0a4, 0x0040, - 0x39a3, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, - 0x1078, 0x37d7, 0x00c0, 0x3997, 0x6004, 0xa084, 0xff00, 0x8007, - 0xa086, 0x0006, 0x00c0, 0x3997, 0x6000, 0xc0ed, 0x6002, 0x017f, - 0x8108, 0x00f0, 0x3987, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, - 0x39a5, 0x1078, 0x45b0, 0x0f7f, 0x007c, 0x2011, 0x39a5, 0x1078, - 0x4520, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, - 0x1078, 0x37d7, 0x00c0, 0x39d1, 0x6000, 0xd0ec, 0x0040, 0x39d1, + 0xd0a4, 0x007c, 0x0f7e, 0x2079, 0x6f51, 0x7804, 0xd0a4, 0x0040, + 0x3663, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, + 0x1078, 0x3497, 0x00c0, 0x3657, 0x6004, 0xa084, 0xff00, 0x8007, + 0xa086, 0x0006, 0x00c0, 0x3657, 0x6000, 0xc0ed, 0x6002, 0x017f, + 0x8108, 0x00f0, 0x3647, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, + 0x3665, 0x1078, 0x41e3, 0x0f7f, 0x007c, 0x2011, 0x3665, 0x1078, + 0x4153, 0x157e, 0x0c7e, 0x20a9, 0x007e, 0x2009, 0x0000, 0x017e, + 0x1078, 0x3497, 0x00c0, 0x3691, 0x6000, 0xd0ec, 0x0040, 0x3691, 0x047e, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, - 0x1078, 0x74ec, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, - 0x1078, 0x4914, 0x1078, 0x4857, 0x2009, 0x0000, 0x1078, 0x7326, - 0x047f, 0x017f, 0x8108, 0x00f0, 0x39af, 0x0c7f, 0x157f, 0x007c, + 0x1078, 0x6d90, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, + 0x1078, 0x4535, 0x1078, 0x4478, 0x2009, 0x0000, 0x1078, 0x6bca, + 0x047f, 0x017f, 0x8108, 0x00f0, 0x366f, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, - 0x2071, 0x76ff, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, + 0x2071, 0x6fff, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x76ff, 0x684c, 0xa005, 0x00c0, 0x3a07, - 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3a2a, 0x6a60, + 0x007c, 0x0e7e, 0x2071, 0x6fff, 0x684c, 0xa005, 0x00c0, 0x36c7, + 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x36ea, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, - 0x3a7d, 0x6804, 0xa00d, 0x0040, 0x3a4b, 0x0d7e, 0x0e7e, 0x2071, - 0x7600, 0x027e, 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, - 0x2d00, 0x81ff, 0x00c0, 0x3a3c, 0x702e, 0x70a0, 0xa200, 0x70a2, - 0x027f, 0x0e7f, 0x0d7f, 0x2071, 0x76ff, 0x701c, 0xa005, 0x00c0, - 0x3a8e, 0x0068, 0x3a8c, 0x2071, 0x7651, 0x7004, 0xd09c, 0x0040, - 0x3a8c, 0x6934, 0xa186, 0x0103, 0x00c0, 0x3a9f, 0x6948, 0x6844, - 0xa105, 0x00c0, 0x3a7f, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, - 0xd084, 0x00c0, 0x3a8c, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, - 0x701b, 0x0001, 0x2091, 0x4080, 0x2071, 0x7600, 0x702c, 0x206a, - 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, - 0xa086, 0x0100, 0x00c0, 0x3a8c, 0x6868, 0xa005, 0x00c0, 0x3a8c, - 0x2009, 0x8020, 0x0078, 0x3a65, 0x2071, 0x76ff, 0x2d08, 0x206b, + 0x373d, 0x6804, 0xa00d, 0x0040, 0x370b, 0x0d7e, 0x0e7e, 0x2071, + 0x6f00, 0x027e, 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, + 0x2d00, 0x81ff, 0x00c0, 0x36fc, 0x702e, 0x7098, 0xa200, 0x709a, + 0x027f, 0x0e7f, 0x0d7f, 0x2071, 0x6fff, 0x701c, 0xa005, 0x00c0, + 0x374e, 0x0068, 0x374c, 0x2071, 0x6f51, 0x7004, 0xd09c, 0x0040, + 0x374c, 0x6934, 0xa186, 0x0103, 0x00c0, 0x375f, 0x6948, 0x6844, + 0xa105, 0x00c0, 0x373f, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, + 0xd084, 0x00c0, 0x374c, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, + 0x701b, 0x0001, 0x2091, 0x4080, 0x2071, 0x6f00, 0x702c, 0x206a, + 0x2d00, 0x702e, 0x7098, 0x8000, 0x709a, 0x0e7f, 0x007c, 0x6844, + 0xa086, 0x0100, 0x00c0, 0x374c, 0x6868, 0xa005, 0x00c0, 0x374c, + 0x2009, 0x8020, 0x0078, 0x3725, 0x2071, 0x6fff, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, - 0x3a9c, 0x6902, 0x0078, 0x3a9d, 0x711e, 0x0078, 0x3a7d, 0xa18c, - 0x00ff, 0xa186, 0x0017, 0x0040, 0x3aad, 0xa186, 0x001e, 0x0040, - 0x3aad, 0xa18e, 0x001f, 0x00c0, 0x3a8c, 0x684c, 0xd0cc, 0x0040, - 0x3a8c, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3a8c, - 0x2009, 0x8021, 0x0078, 0x3a65, 0x007e, 0x6837, 0x0103, 0x20a9, + 0x375c, 0x6902, 0x0078, 0x375d, 0x711e, 0x0078, 0x373d, 0xa18c, + 0x00ff, 0xa186, 0x0017, 0x0040, 0x376d, 0xa186, 0x001e, 0x0040, + 0x376d, 0xa18e, 0x001f, 0x00c0, 0x374c, 0x684c, 0xd0cc, 0x0040, + 0x374c, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x374c, + 0x2009, 0x8021, 0x0078, 0x3725, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, - 0x684a, 0x6952, 0x007c, 0x2071, 0x76ff, 0x7004, 0x0079, 0x3ad0, - 0x3ad8, 0x3ae7, 0x3b77, 0x3b78, 0x3b88, 0x3b8e, 0x3ad9, 0x3b65, - 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x3ae6, 0x2009, 0x000d, + 0x684a, 0x6952, 0x007c, 0x2071, 0x6fff, 0x7004, 0x0079, 0x3790, + 0x3798, 0x37a7, 0x3837, 0x3838, 0x3848, 0x384e, 0x3799, 0x3825, + 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x37a6, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, - 0xa06d, 0x0040, 0x3b64, 0x0e7e, 0x2071, 0x7651, 0x7004, 0xd09c, - 0x0040, 0x3b46, 0x6934, 0xa186, 0x0103, 0x00c0, 0x3b1c, 0x6948, - 0x6844, 0xa105, 0x00c0, 0x3b39, 0x2009, 0x8020, 0x127e, 0x2091, - 0x8000, 0x0068, 0x3b18, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, - 0x3b18, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, - 0x2091, 0x4080, 0x127f, 0x0e7f, 0x1078, 0x3bc1, 0x0078, 0x3b64, - 0x127f, 0x0e7f, 0x0078, 0x3b64, 0xa18c, 0x00ff, 0xa186, 0x0017, - 0x0040, 0x3b2a, 0xa186, 0x001e, 0x0040, 0x3b2a, 0xa18e, 0x001f, - 0x00c0, 0x3b46, 0x684c, 0xd0cc, 0x0040, 0x3b46, 0x6850, 0xa084, - 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3b46, 0x2009, 0x8021, 0x0078, - 0x3afe, 0x6844, 0xa086, 0x0100, 0x00c0, 0x3b46, 0x6868, 0xa005, - 0x00c0, 0x3b46, 0x2009, 0x8020, 0x0078, 0x3afe, 0x0e7f, 0x1078, - 0x3bd5, 0x0040, 0x3b64, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, - 0xa086, 0x0003, 0x00c0, 0x3b5b, 0x810f, 0xa18c, 0x00ff, 0x8101, - 0x0040, 0x3b5b, 0x710e, 0x7007, 0x0003, 0x1078, 0x3bf5, 0x7050, - 0xa086, 0x0100, 0x0040, 0x3b78, 0x007c, 0x701c, 0xa06d, 0x0040, - 0x3b76, 0x1078, 0x3bd5, 0x0040, 0x3b76, 0x7007, 0x0003, 0x1078, - 0x3bf5, 0x7050, 0xa086, 0x0100, 0x0040, 0x3b78, 0x007c, 0x007c, - 0x7050, 0xa09e, 0x0100, 0x00c0, 0x3b81, 0x7007, 0x0004, 0x0078, - 0x3b88, 0xa086, 0x0200, 0x00c0, 0x3b87, 0x7007, 0x0005, 0x007c, - 0x1078, 0x3b8f, 0x7006, 0x1078, 0x3bc1, 0x007c, 0x007c, 0x702c, - 0x7130, 0x8108, 0xa102, 0x0048, 0x3b9c, 0xa00e, 0x7034, 0x706e, - 0x7038, 0x7072, 0x0078, 0x3ba6, 0x706c, 0xa080, 0x0040, 0x706e, - 0x00c8, 0x3ba6, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, - 0x8001, 0x700e, 0x00c0, 0x3bba, 0x127e, 0x2091, 0x8000, 0x0068, - 0x3bbd, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, + 0xa06d, 0x0040, 0x3824, 0x0e7e, 0x2071, 0x6f51, 0x7004, 0xd09c, + 0x0040, 0x3806, 0x6934, 0xa186, 0x0103, 0x00c0, 0x37dc, 0x6948, + 0x6844, 0xa105, 0x00c0, 0x37f9, 0x2009, 0x8020, 0x127e, 0x2091, + 0x8000, 0x0068, 0x37d8, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, + 0x37d8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, + 0x2091, 0x4080, 0x127f, 0x0e7f, 0x1078, 0x3881, 0x0078, 0x3824, + 0x127f, 0x0e7f, 0x0078, 0x3824, 0xa18c, 0x00ff, 0xa186, 0x0017, + 0x0040, 0x37ea, 0xa186, 0x001e, 0x0040, 0x37ea, 0xa18e, 0x001f, + 0x00c0, 0x3806, 0x684c, 0xd0cc, 0x0040, 0x3806, 0x6850, 0xa084, + 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3806, 0x2009, 0x8021, 0x0078, + 0x37be, 0x6844, 0xa086, 0x0100, 0x00c0, 0x3806, 0x6868, 0xa005, + 0x00c0, 0x3806, 0x2009, 0x8020, 0x0078, 0x37be, 0x0e7f, 0x1078, + 0x3895, 0x0040, 0x3824, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, + 0xa086, 0x0003, 0x00c0, 0x381b, 0x810f, 0xa18c, 0x00ff, 0x8101, + 0x0040, 0x381b, 0x710e, 0x7007, 0x0003, 0x1078, 0x38b5, 0x7050, + 0xa086, 0x0100, 0x0040, 0x3838, 0x007c, 0x701c, 0xa06d, 0x0040, + 0x3836, 0x1078, 0x3895, 0x0040, 0x3836, 0x7007, 0x0003, 0x1078, + 0x38b5, 0x7050, 0xa086, 0x0100, 0x0040, 0x3838, 0x007c, 0x007c, + 0x7050, 0xa09e, 0x0100, 0x00c0, 0x3841, 0x7007, 0x0004, 0x0078, + 0x3848, 0xa086, 0x0200, 0x00c0, 0x3847, 0x7007, 0x0005, 0x007c, + 0x1078, 0x384f, 0x7006, 0x1078, 0x3881, 0x007c, 0x007c, 0x702c, + 0x7130, 0x8108, 0xa102, 0x0048, 0x385c, 0xa00e, 0x7034, 0x706e, + 0x7038, 0x7072, 0x0078, 0x3866, 0x706c, 0xa080, 0x0040, 0x706e, + 0x00c8, 0x3866, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, + 0x8001, 0x700e, 0x00c0, 0x387a, 0x127e, 0x2091, 0x8000, 0x0068, + 0x387d, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, - 0x007c, 0x701c, 0xa06d, 0x0040, 0x3bd4, 0x127e, 0x2091, 0x8000, - 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3bd1, - 0x701a, 0x127f, 0x1078, 0x1348, 0x007c, 0x2019, 0x000d, 0x2304, - 0x230c, 0xa10e, 0x0040, 0x3be4, 0x2304, 0x230c, 0xa10e, 0x0040, - 0x3be4, 0xa006, 0x0078, 0x3bf4, 0x732c, 0x8319, 0x7130, 0xa102, - 0x00c0, 0x3bee, 0x2300, 0xa005, 0x0078, 0x3bf4, 0x0048, 0x3bf3, - 0xa302, 0x0078, 0x3bf4, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, + 0x007c, 0x701c, 0xa06d, 0x0040, 0x3894, 0x127e, 0x2091, 0x8000, + 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3891, + 0x701a, 0x127f, 0x1078, 0x12f9, 0x007c, 0x2019, 0x000d, 0x2304, + 0x230c, 0xa10e, 0x0040, 0x38a4, 0x2304, 0x230c, 0xa10e, 0x0040, + 0x38a4, 0xa006, 0x0078, 0x38b4, 0x732c, 0x8319, 0x7130, 0xa102, + 0x00c0, 0x38ae, 0x2300, 0xa005, 0x0078, 0x38b4, 0x0048, 0x38b3, + 0xa302, 0x0078, 0x38b4, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, - 0x7859, 0x2104, 0xc08d, 0x200a, 0x127f, 0x1078, 0x1399, 0x007c, - 0x2071, 0x76cd, 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, + 0x70d9, 0x2104, 0xc08d, 0x200a, 0x127f, 0x1078, 0x134a, 0x007c, + 0x2071, 0x6fcd, 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, - 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x76cd, 0x6848, 0xa005, - 0x00c0, 0x3c31, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, - 0x3c56, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, + 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x6fcd, 0x6848, 0xa005, + 0x00c0, 0x38f1, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, + 0x3916, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, - 0x2b78, 0x2071, 0x76cd, 0x7004, 0x1079, 0x3cb6, 0x700c, 0x0079, - 0x3c61, 0x3c66, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x007c, 0x700c, - 0x0079, 0x3c6a, 0x3c6f, 0x3cb4, 0x3cb4, 0x3cb5, 0x3cb5, 0x7830, - 0x7930, 0xa106, 0x0040, 0x3c79, 0x7830, 0x7930, 0xa106, 0x00c0, - 0x3c9f, 0x7030, 0xa10a, 0x0040, 0x3c9f, 0x00c8, 0x3c81, 0x712c, - 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x3ca0, 0x1078, 0x1314, 0x0040, - 0x3c9f, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, - 0x0000, 0x127e, 0x007e, 0x2091, 0x8000, 0x2009, 0x7859, 0x2104, - 0xc085, 0x200a, 0x007f, 0x700e, 0x127f, 0x1078, 0x1399, 0x007c, - 0x1078, 0x1314, 0x0040, 0x3c9f, 0x2d00, 0x705a, 0x1078, 0x1314, - 0x00c0, 0x3cac, 0x0078, 0x3c8b, 0x2d00, 0x7086, 0x7063, 0x0080, - 0x2001, 0x0004, 0x0078, 0x3c8f, 0x007c, 0x007c, 0x3cc7, 0x3cc8, - 0x3cff, 0x3d00, 0x3cb4, 0x3d36, 0x3d3b, 0x3d72, 0x3d73, 0x3d8e, - 0x3d8f, 0x3d90, 0x3d91, 0x3d92, 0x3d93, 0x3dfc, 0x3e26, 0x007c, - 0x700c, 0x0079, 0x3ccb, 0x3cd0, 0x3cd3, 0x3ce3, 0x3cfe, 0x3cfe, - 0x1078, 0x3c67, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, - 0x1078, 0x4105, 0x0040, 0x3ce0, 0x2091, 0x8000, 0x1078, 0x3c67, - 0x0d7f, 0x0078, 0x3cec, 0x127e, 0x8001, 0x700e, 0x1078, 0x4105, + 0x2b78, 0x2071, 0x6fcd, 0x7004, 0x1079, 0x3976, 0x700c, 0x0079, + 0x3921, 0x3926, 0x391b, 0x391b, 0x391b, 0x391b, 0x007c, 0x700c, + 0x0079, 0x392a, 0x392f, 0x3974, 0x3974, 0x3975, 0x3975, 0x7830, + 0x7930, 0xa106, 0x0040, 0x3939, 0x7830, 0x7930, 0xa106, 0x00c0, + 0x395f, 0x7030, 0xa10a, 0x0040, 0x395f, 0x00c8, 0x3941, 0x712c, + 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x3960, 0x1078, 0x12c5, 0x0040, + 0x395f, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, + 0x0000, 0x127e, 0x007e, 0x2091, 0x8000, 0x2009, 0x70d9, 0x2104, + 0xc085, 0x200a, 0x007f, 0x700e, 0x127f, 0x1078, 0x134a, 0x007c, + 0x1078, 0x12c5, 0x0040, 0x395f, 0x2d00, 0x705a, 0x1078, 0x12c5, + 0x00c0, 0x396c, 0x0078, 0x394b, 0x2d00, 0x7086, 0x7063, 0x0080, + 0x2001, 0x0004, 0x0078, 0x394f, 0x007c, 0x007c, 0x3987, 0x3988, + 0x39bf, 0x39c0, 0x3974, 0x39f6, 0x39fb, 0x3a32, 0x3a33, 0x3a4e, + 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3abc, 0x3ae6, 0x007c, + 0x700c, 0x0079, 0x398b, 0x3990, 0x3993, 0x39a3, 0x39be, 0x39be, + 0x1078, 0x3927, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, + 0x1078, 0x3dc5, 0x0040, 0x39a0, 0x2091, 0x8000, 0x1078, 0x3927, + 0x0d7f, 0x0078, 0x39ac, 0x127e, 0x8001, 0x700e, 0x1078, 0x3dc5, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, - 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3cfb, 0x1079, - 0x3d16, 0x127f, 0x007c, 0x127f, 0x1078, 0x3d94, 0x007c, 0x007c, - 0x007c, 0x0e7e, 0x2071, 0x76cd, 0x700c, 0x0079, 0x3d07, 0x3d0c, - 0x3d0c, 0x3d0c, 0x3d0e, 0x3d12, 0x0e7f, 0x007c, 0x700f, 0x0001, - 0x0078, 0x3d14, 0x700f, 0x0002, 0x0e7f, 0x007c, 0x3d94, 0x3d94, - 0x3db0, 0x3d94, 0x3e9b, 0x3d94, 0x3d94, 0x3d94, 0x3d94, 0x3d94, - 0x3db0, 0x3ee0, 0x3f29, 0x3f81, 0x3f94, 0x3d94, 0x3d94, 0x3dcc, - 0x3db0, 0x3d94, 0x3d94, 0x3de2, 0x401b, 0x4038, 0x3d94, 0x3dcc, - 0x3d94, 0x3d94, 0x3d94, 0x3d94, 0x3de2, 0x4038, 0x7020, 0x2068, - 0x1078, 0x1348, 0x007c, 0x700c, 0x0079, 0x3d3e, 0x3d43, 0x3d46, - 0x3d56, 0x3d71, 0x3d71, 0x1078, 0x3c67, 0x007c, 0x127e, 0x8001, - 0x700e, 0x7058, 0x007e, 0x1078, 0x4105, 0x0040, 0x3d53, 0x2091, - 0x8000, 0x1078, 0x3c67, 0x0d7f, 0x0078, 0x3d5f, 0x127e, 0x8001, - 0x700e, 0x1078, 0x4105, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, + 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x39bb, 0x1079, + 0x39d6, 0x127f, 0x007c, 0x127f, 0x1078, 0x3a54, 0x007c, 0x007c, + 0x007c, 0x0e7e, 0x2071, 0x6fcd, 0x700c, 0x0079, 0x39c7, 0x39cc, + 0x39cc, 0x39cc, 0x39ce, 0x39d2, 0x0e7f, 0x007c, 0x700f, 0x0001, + 0x0078, 0x39d4, 0x700f, 0x0002, 0x0e7f, 0x007c, 0x3a54, 0x3a54, + 0x3a70, 0x3a54, 0x3b5b, 0x3a54, 0x3a54, 0x3a54, 0x3a54, 0x3a54, + 0x3a70, 0x3ba0, 0x3be9, 0x3c41, 0x3c54, 0x3a54, 0x3a54, 0x3a8c, + 0x3a70, 0x3a54, 0x3a54, 0x3aa2, 0x3cdb, 0x3cf8, 0x3a54, 0x3a8c, + 0x3a54, 0x3a54, 0x3a54, 0x3a54, 0x3aa2, 0x3cf8, 0x7020, 0x2068, + 0x1078, 0x12f9, 0x007c, 0x700c, 0x0079, 0x39fe, 0x3a03, 0x3a06, + 0x3a16, 0x3a31, 0x3a31, 0x1078, 0x3927, 0x007c, 0x127e, 0x8001, + 0x700e, 0x7058, 0x007e, 0x1078, 0x3dc5, 0x0040, 0x3a13, 0x2091, + 0x8000, 0x1078, 0x3927, 0x0d7f, 0x0078, 0x3a1f, 0x127e, 0x8001, + 0x700e, 0x1078, 0x3dc5, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, - 0x00c8, 0x3d6e, 0x1079, 0x3d74, 0x127f, 0x007c, 0x127f, 0x1078, - 0x3d94, 0x007c, 0x007c, 0x007c, 0x3d94, 0x3db0, 0x3e85, 0x3d94, - 0x3db0, 0x3d94, 0x3db0, 0x3db0, 0x3d94, 0x3db0, 0x3e85, 0x3db0, - 0x3db0, 0x3db0, 0x3db0, 0x3db0, 0x3d94, 0x3db0, 0x3e85, 0x3d94, - 0x3d94, 0x3db0, 0x3d94, 0x3d94, 0x3d94, 0x3db0, 0x007c, 0x007c, + 0x00c8, 0x3a2e, 0x1079, 0x3a34, 0x127f, 0x007c, 0x127f, 0x1078, + 0x3a54, 0x007c, 0x007c, 0x007c, 0x3a54, 0x3a70, 0x3b45, 0x3a54, + 0x3a70, 0x3a54, 0x3a70, 0x3a70, 0x3a54, 0x3a70, 0x3b45, 0x3a70, + 0x3a70, 0x3a70, 0x3a70, 0x3a70, 0x3a54, 0x3a70, 0x3b45, 0x3a54, + 0x3a54, 0x3a70, 0x3a54, 0x3a54, 0x3a54, 0x3a70, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a2c, + 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x36ec, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, - 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a2c, 0x127f, 0x007c, + 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x36ec, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3a2c, 0x127f, 0x007c, 0x7007, 0x0001, + 0x2091, 0x8000, 0x1078, 0x36ec, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, - 0x1078, 0x3a2c, 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, - 0x0040, 0x3da2, 0x8001, 0x00c0, 0x3dd9, 0x7007, 0x0001, 0x0078, - 0x3e62, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, - 0x3e62, 0x007c, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, - 0x0024, 0x2098, 0x20a1, 0x76f8, 0x53a3, 0x6858, 0x7012, 0xa082, - 0x0401, 0x00c8, 0x3dbe, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3dbe, - 0xa080, 0x3e53, 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3e46, - 0x1078, 0x1314, 0x00c0, 0x3e07, 0x7007, 0x000f, 0x007c, 0x2d00, + 0x1078, 0x36ec, 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, + 0x0040, 0x3a62, 0x8001, 0x00c0, 0x3a99, 0x7007, 0x0001, 0x0078, + 0x3b22, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, + 0x3b22, 0x007c, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, + 0x0024, 0x2098, 0x20a1, 0x6ff8, 0x53a3, 0x6858, 0x7012, 0xa082, + 0x0401, 0x00c8, 0x3a7e, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3a7e, + 0xa080, 0x3b13, 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3b06, + 0x1078, 0x12c5, 0x00c0, 0x3ac7, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, - 0x6008, 0xa20a, 0x00c8, 0x3e16, 0xa00e, 0x2200, 0x7112, 0x620c, - 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x3e1f, 0xa108, 0x719a, - 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x137f, 0x7090, 0xa08e, - 0x0100, 0x0040, 0x3e3a, 0xa086, 0x0200, 0x0040, 0x3e32, 0x7007, - 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x1348, 0x7014, 0x2068, - 0x0078, 0x3dbe, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, - 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x3dfc, 0x7014, 0x2068, + 0x6008, 0xa20a, 0x00c8, 0x3ad6, 0xa00e, 0x2200, 0x7112, 0x620c, + 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x3adf, 0xa108, 0x719a, + 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x1330, 0x7090, 0xa08e, + 0x0100, 0x0040, 0x3afa, 0xa086, 0x0200, 0x0040, 0x3af2, 0x7007, + 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x12f9, 0x7014, 0x2068, + 0x0078, 0x3a7e, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, + 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x3abc, 0x7014, 0x2068, 0x7007, 0x0001, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, - 0x4055, 0x0078, 0x3e62, 0x3e56, 0x3e5a, 0x3e5e, 0x0002, 0x0011, + 0x3d15, 0x0078, 0x3b22, 0x3b16, 0x3b1a, 0x3b1e, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, - 0x0005, 0x0006, 0x2009, 0x762c, 0x210c, 0x81ff, 0x00c0, 0x3e7f, - 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3622, - 0x00c0, 0x3e73, 0x007c, 0x1078, 0x3abc, 0x127e, 0x2091, 0x8000, - 0x1078, 0x6aea, 0x1078, 0x3a2c, 0x127f, 0x0078, 0x3e72, 0x2001, - 0x0028, 0x2009, 0x0000, 0x0078, 0x3e73, 0x7018, 0x6802, 0x2d08, - 0x2068, 0x6906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3e94, - 0x7007, 0x0006, 0x0078, 0x3e9a, 0x7014, 0x2068, 0x7007, 0x0001, + 0x0005, 0x0006, 0x2009, 0x6f2a, 0x210c, 0x81ff, 0x00c0, 0x3b3f, + 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x32e2, + 0x00c0, 0x3b33, 0x007c, 0x1078, 0x377c, 0x127e, 0x2091, 0x8000, + 0x1078, 0x639b, 0x1078, 0x36ec, 0x127f, 0x0078, 0x3b32, 0x2001, + 0x0028, 0x2009, 0x0000, 0x0078, 0x3b33, 0x7018, 0x6802, 0x2d08, + 0x2068, 0x6906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3b54, + 0x7007, 0x0006, 0x0078, 0x3b5a, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a, 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, - 0x0040, 0x3ec6, 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, - 0x0040, 0x3ec6, 0xa005, 0x00c0, 0x3edd, 0x6944, 0x810f, 0xa18c, - 0x00ff, 0x1078, 0x37d7, 0x00c0, 0x3edd, 0x067e, 0x6e44, 0xa6b4, - 0x000f, 0x1078, 0x386c, 0x067f, 0x0078, 0x3edd, 0x047e, 0x2011, - 0x760c, 0x2224, 0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, - 0x37d7, 0x00c0, 0x3ed9, 0x2091, 0x8000, 0x607b, 0x0000, 0x2091, - 0x8001, 0x8108, 0x00f0, 0x3ecf, 0x0c7f, 0x1078, 0x1348, 0x007c, - 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7652, 0x2004, - 0xd0a4, 0x0040, 0x3f20, 0x6944, 0x1078, 0x4121, 0x6100, 0xd184, - 0x0040, 0x3f05, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x3f23, 0x6000, - 0xd084, 0x0040, 0x3f20, 0x6004, 0xa005, 0x00c0, 0x3f26, 0x6003, - 0x0000, 0x600b, 0x0000, 0x0078, 0x3f1d, 0x2011, 0x0001, 0x6860, - 0xa005, 0x00c0, 0x3f0d, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, - 0xa084, 0x00ff, 0x0040, 0x3f20, 0x6006, 0x6858, 0x8007, 0xa084, - 0x00ff, 0x0040, 0x3f20, 0x600a, 0x6202, 0x127f, 0x0078, 0x40f4, - 0x127f, 0x0078, 0x40ec, 0x127f, 0x0078, 0x40e4, 0x127f, 0x0078, - 0x40e8, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7652, - 0x2004, 0xd0a4, 0x0040, 0x3f7e, 0x6944, 0x1078, 0x4121, 0x6000, - 0xa084, 0x0001, 0x0040, 0x3f7e, 0x6204, 0x6308, 0x6c48, 0xa484, - 0x0003, 0x0040, 0x3f56, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0, - 0x3f4f, 0x2100, 0xa210, 0x0048, 0x3f7b, 0x0078, 0x3f56, 0x8001, - 0x00c0, 0x3f7b, 0x2100, 0xa212, 0x0048, 0x3f7b, 0xa484, 0x000c, - 0x0040, 0x3f70, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, - 0x00c0, 0x3f68, 0x2100, 0xa318, 0x0048, 0x3f7b, 0x0078, 0x3f70, - 0xa082, 0x0004, 0x00c0, 0x3f7b, 0x2100, 0xa31a, 0x0048, 0x3f7b, - 0x6860, 0xa005, 0x0040, 0x3f76, 0x8000, 0x6016, 0x6206, 0x630a, - 0x127f, 0x0078, 0x40f4, 0x127f, 0x0078, 0x40f0, 0x127f, 0x0078, - 0x40ec, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x6944, 0x1078, - 0x4121, 0x6308, 0x8318, 0x0048, 0x3f91, 0x630a, 0x127f, 0x0078, - 0x4102, 0x127f, 0x0078, 0x40f0, 0x127e, 0x0c7e, 0x2091, 0x8000, - 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040, 0x3fa8, 0x027e, 0x2009, - 0x0000, 0x2011, 0xfcff, 0x1078, 0x4666, 0x027f, 0x0078, 0x3fde, - 0x6858, 0xa005, 0x0040, 0x3ff2, 0x685c, 0xa065, 0x0040, 0x3fee, - 0x2001, 0x762c, 0x2004, 0xa005, 0x0040, 0x3fba, 0x1078, 0x6a4c, - 0x0078, 0x3fc0, 0x6013, 0x0400, 0x2009, 0x0041, 0x1078, 0x5bdb, - 0x6958, 0xa18c, 0xe600, 0xa186, 0x2000, 0x0040, 0x3fd6, 0xa186, - 0x0400, 0x0040, 0x3fd6, 0x6944, 0x0c7e, 0x1078, 0x45be, 0x6000, - 0xa084, 0xfdff, 0x6002, 0x0c7f, 0x0078, 0x3fde, 0x027e, 0x2009, - 0x0000, 0x2011, 0xfdff, 0x1078, 0x4666, 0x027f, 0x684c, 0xd0c4, - 0x0040, 0x3fea, 0x6944, 0x1078, 0x45be, 0x6008, 0x8000, 0x0048, - 0x3fea, 0x600a, 0x0c7f, 0x127f, 0x0078, 0x40f4, 0x0c7f, 0x127f, - 0x0078, 0x40ec, 0x6954, 0xa186, 0x002a, 0x00c0, 0x3ffe, 0x2001, - 0x760c, 0x200c, 0xc194, 0x2102, 0x0078, 0x3fde, 0xa186, 0x0020, - 0x0040, 0x4013, 0xa186, 0x0029, 0x00c0, 0x3fee, 0x6944, 0xa18c, - 0xff00, 0x810f, 0x1078, 0x37d7, 0x00c0, 0x3fde, 0x6000, 0xc0e4, - 0x6002, 0x0078, 0x3fde, 0x685c, 0xa065, 0x0040, 0x3fee, 0x6017, - 0x0014, 0x0078, 0x3fde, 0x6944, 0x1078, 0x4121, 0x6000, 0xa084, - 0x0001, 0x0040, 0x4034, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, - 0x402e, 0x6206, 0x2091, 0x8001, 0x0078, 0x4102, 0x2091, 0x8001, - 0x6853, 0x0016, 0x0078, 0x40fb, 0x6853, 0x0007, 0x0078, 0x40fb, - 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x4042, 0x1078, 0x3da2, - 0x0078, 0x4054, 0x2030, 0x8001, 0x00c0, 0x404c, 0x7007, 0x0001, - 0x1078, 0x4055, 0x0078, 0x4054, 0x7007, 0x0006, 0x7012, 0x2d00, - 0x7016, 0x701a, 0x704b, 0x4055, 0x007c, 0x0e7e, 0x2009, 0x762c, - 0x210c, 0x81ff, 0x00c0, 0x40d6, 0x2009, 0x760c, 0x210c, 0xd194, - 0x00c0, 0x40e0, 0x6848, 0x2070, 0xae82, 0x7d00, 0x0048, 0x40c5, - 0x2001, 0x7615, 0x2004, 0xae02, 0x00c8, 0x40c5, 0x6944, 0x1078, - 0x4121, 0x6100, 0xa184, 0x0001, 0x0040, 0x40ab, 0xa184, 0x0100, - 0x00c0, 0x40c9, 0xa184, 0x0200, 0x00c0, 0x40cd, 0x601c, 0xa005, - 0x00c0, 0x40d1, 0x711c, 0xa186, 0x0006, 0x00c0, 0x40b0, 0x6853, + 0x0040, 0x3b86, 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, + 0x0040, 0x3b86, 0xa005, 0x00c0, 0x3b9d, 0x6944, 0x810f, 0xa18c, + 0x00ff, 0x1078, 0x3497, 0x00c0, 0x3b9d, 0x067e, 0x6e44, 0xa6b4, + 0x000f, 0x1078, 0x352c, 0x067f, 0x0078, 0x3b9d, 0x047e, 0x2011, + 0x6f0c, 0x2224, 0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, + 0x3497, 0x00c0, 0x3b99, 0x2091, 0x8000, 0x607b, 0x0000, 0x2091, + 0x8001, 0x8108, 0x00f0, 0x3b8f, 0x0c7f, 0x1078, 0x12f9, 0x007c, + 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x6f52, 0x2004, + 0xd0a4, 0x0040, 0x3be0, 0x6944, 0x1078, 0x3de1, 0x6100, 0xd184, + 0x0040, 0x3bc5, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x3be3, 0x6000, + 0xd084, 0x0040, 0x3be0, 0x6004, 0xa005, 0x00c0, 0x3be6, 0x6003, + 0x0000, 0x600b, 0x0000, 0x0078, 0x3bdd, 0x2011, 0x0001, 0x6860, + 0xa005, 0x00c0, 0x3bcd, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, + 0xa084, 0x00ff, 0x0040, 0x3be0, 0x6006, 0x6858, 0x8007, 0xa084, + 0x00ff, 0x0040, 0x3be0, 0x600a, 0x6202, 0x127f, 0x0078, 0x3db4, + 0x127f, 0x0078, 0x3dac, 0x127f, 0x0078, 0x3da4, 0x127f, 0x0078, + 0x3da8, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x6f52, + 0x2004, 0xd0a4, 0x0040, 0x3c3e, 0x6944, 0x1078, 0x3de1, 0x6000, + 0xa084, 0x0001, 0x0040, 0x3c3e, 0x6204, 0x6308, 0x6c48, 0xa484, + 0x0003, 0x0040, 0x3c16, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0, + 0x3c0f, 0x2100, 0xa210, 0x0048, 0x3c3b, 0x0078, 0x3c16, 0x8001, + 0x00c0, 0x3c3b, 0x2100, 0xa212, 0x0048, 0x3c3b, 0xa484, 0x000c, + 0x0040, 0x3c30, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, + 0x00c0, 0x3c28, 0x2100, 0xa318, 0x0048, 0x3c3b, 0x0078, 0x3c30, + 0xa082, 0x0004, 0x00c0, 0x3c3b, 0x2100, 0xa31a, 0x0048, 0x3c3b, + 0x6860, 0xa005, 0x0040, 0x3c36, 0x8000, 0x6016, 0x6206, 0x630a, + 0x127f, 0x0078, 0x3db4, 0x127f, 0x0078, 0x3db0, 0x127f, 0x0078, + 0x3dac, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x6944, 0x1078, + 0x3de1, 0x6308, 0x8318, 0x0048, 0x3c51, 0x630a, 0x127f, 0x0078, + 0x3dc2, 0x127f, 0x0078, 0x3db0, 0x127e, 0x0c7e, 0x2091, 0x8000, + 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040, 0x3c68, 0x027e, 0x2009, + 0x0000, 0x2011, 0xfcff, 0x1078, 0x4299, 0x027f, 0x0078, 0x3c9e, + 0x6858, 0xa005, 0x0040, 0x3cb2, 0x685c, 0xa065, 0x0040, 0x3cae, + 0x2001, 0x6f2a, 0x2004, 0xa005, 0x0040, 0x3c7a, 0x1078, 0x62fd, + 0x0078, 0x3c80, 0x6013, 0x0400, 0x2009, 0x0041, 0x1078, 0x55c8, + 0x6958, 0xa18c, 0xe600, 0xa186, 0x2000, 0x0040, 0x3c96, 0xa186, + 0x0400, 0x0040, 0x3c96, 0x6944, 0x0c7e, 0x1078, 0x41f1, 0x6000, + 0xa084, 0xfdff, 0x6002, 0x0c7f, 0x0078, 0x3c9e, 0x027e, 0x2009, + 0x0000, 0x2011, 0xfdff, 0x1078, 0x4299, 0x027f, 0x684c, 0xd0c4, + 0x0040, 0x3caa, 0x6944, 0x1078, 0x41f1, 0x6008, 0x8000, 0x0048, + 0x3caa, 0x600a, 0x0c7f, 0x127f, 0x0078, 0x3db4, 0x0c7f, 0x127f, + 0x0078, 0x3dac, 0x6954, 0xa186, 0x002a, 0x00c0, 0x3cbe, 0x2001, + 0x6f0c, 0x200c, 0xc194, 0x2102, 0x0078, 0x3c9e, 0xa186, 0x0020, + 0x0040, 0x3cd3, 0xa186, 0x0029, 0x00c0, 0x3cae, 0x6944, 0xa18c, + 0xff00, 0x810f, 0x1078, 0x3497, 0x00c0, 0x3c9e, 0x6000, 0xc0e4, + 0x6002, 0x0078, 0x3c9e, 0x685c, 0xa065, 0x0040, 0x3cae, 0x6017, + 0x0014, 0x0078, 0x3c9e, 0x6944, 0x1078, 0x3de1, 0x6000, 0xa084, + 0x0001, 0x0040, 0x3cf4, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, + 0x3cee, 0x6206, 0x2091, 0x8001, 0x0078, 0x3dc2, 0x2091, 0x8001, + 0x6853, 0x0016, 0x0078, 0x3dbb, 0x6853, 0x0007, 0x0078, 0x3dbb, + 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x3d02, 0x1078, 0x3a62, + 0x0078, 0x3d14, 0x2030, 0x8001, 0x00c0, 0x3d0c, 0x7007, 0x0001, + 0x1078, 0x3d15, 0x0078, 0x3d14, 0x7007, 0x0006, 0x7012, 0x2d00, + 0x7016, 0x701a, 0x704b, 0x3d15, 0x007c, 0x0e7e, 0x2009, 0x6f2a, + 0x210c, 0x81ff, 0x00c0, 0x3d96, 0x2009, 0x6f0c, 0x210c, 0xd194, + 0x00c0, 0x3da0, 0x6848, 0x2070, 0xae82, 0x7500, 0x0048, 0x3d85, + 0x2001, 0x6f15, 0x2004, 0xae02, 0x00c8, 0x3d85, 0x6944, 0x1078, + 0x3de1, 0x6100, 0xa184, 0x0001, 0x0040, 0x3d6b, 0xa184, 0x0100, + 0x00c0, 0x3d89, 0xa184, 0x0200, 0x00c0, 0x3d8d, 0x601c, 0xa005, + 0x00c0, 0x3d91, 0x711c, 0xa186, 0x0006, 0x00c0, 0x3d70, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000, 0x7010, - 0xa005, 0x00c0, 0x40a2, 0x7112, 0x7018, 0xa065, 0x0040, 0x40d5, - 0x6000, 0xd0e4, 0x00c0, 0x40da, 0x2e60, 0x1078, 0x45c7, 0x127f, - 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x40a2, 0x6902, - 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078, 0x40fb, - 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x37d7, 0x00c0, 0x40db, - 0x6000, 0xd0e4, 0x00c0, 0x40db, 0x711c, 0xa186, 0x0007, 0x00c0, - 0x40c5, 0x6853, 0x0002, 0x0078, 0x40dd, 0x6853, 0x0008, 0x0078, - 0x40dd, 0x6853, 0x000e, 0x0078, 0x40dd, 0x6853, 0x0017, 0x0078, - 0x40dd, 0x6853, 0x0035, 0x0078, 0x40dd, 0x127f, 0x6853, 0x0028, - 0x0078, 0x40dd, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078, 0x40fb, - 0x6853, 0x002a, 0x0078, 0x40dd, 0x2009, 0x003e, 0x0078, 0x40f6, - 0x2009, 0x0004, 0x0078, 0x40f6, 0x2009, 0x0006, 0x0078, 0x40f6, - 0x2009, 0x0016, 0x0078, 0x40f6, 0x2009, 0x0001, 0x6854, 0xa084, - 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x3a2c, 0x2091, - 0x8001, 0x007c, 0x1078, 0x1348, 0x007c, 0x702c, 0x7130, 0x8108, - 0xa102, 0x0048, 0x4112, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, - 0x0078, 0x411e, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x411e, + 0xa005, 0x00c0, 0x3d62, 0x7112, 0x7018, 0xa065, 0x0040, 0x3d95, + 0x6000, 0xd0e4, 0x00c0, 0x3d9a, 0x2e60, 0x1078, 0x41fa, 0x127f, + 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x3d62, 0x6902, + 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078, 0x3dbb, + 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x3497, 0x00c0, 0x3d9b, + 0x6000, 0xd0e4, 0x00c0, 0x3d9b, 0x711c, 0xa186, 0x0007, 0x00c0, + 0x3d85, 0x6853, 0x0002, 0x0078, 0x3d9d, 0x6853, 0x0008, 0x0078, + 0x3d9d, 0x6853, 0x000e, 0x0078, 0x3d9d, 0x6853, 0x0017, 0x0078, + 0x3d9d, 0x6853, 0x0035, 0x0078, 0x3d9d, 0x127f, 0x6853, 0x0028, + 0x0078, 0x3d9d, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078, 0x3dbb, + 0x6853, 0x002a, 0x0078, 0x3d9d, 0x2009, 0x003e, 0x0078, 0x3db6, + 0x2009, 0x0004, 0x0078, 0x3db6, 0x2009, 0x0006, 0x0078, 0x3db6, + 0x2009, 0x0016, 0x0078, 0x3db6, 0x2009, 0x0001, 0x6854, 0xa084, + 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x36ec, 0x2091, + 0x8001, 0x007c, 0x1078, 0x12f9, 0x007c, 0x702c, 0x7130, 0x8108, + 0xa102, 0x0048, 0x3dd2, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, + 0x0078, 0x3dde, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x3dde, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, - 0x007c, 0x0d7e, 0x1078, 0x45be, 0x0d7f, 0x007c, 0x0d7e, 0x2011, + 0x007c, 0x0d7e, 0x1078, 0x41f1, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, - 0x413d, 0xa086, 0x1000, 0x00c0, 0x4159, 0x20e1, 0x0004, 0x3d60, - 0xd1bc, 0x00c0, 0x4144, 0x3e60, 0xac84, 0x0007, 0x00c0, 0x4159, - 0xac82, 0x7d00, 0x0048, 0x4159, 0x6854, 0xac02, 0x00c8, 0x4159, - 0x2009, 0x0047, 0x1078, 0x5bdb, 0x7a1c, 0xd284, 0x00c0, 0x412f, - 0x007c, 0xa016, 0x1078, 0x1572, 0x0078, 0x4154, 0x157e, 0x137e, + 0x3dfd, 0xa086, 0x1000, 0x00c0, 0x3e19, 0x20e1, 0x0004, 0x3d60, + 0xd1bc, 0x00c0, 0x3e04, 0x3e60, 0xac84, 0x0007, 0x00c0, 0x3e19, + 0xac82, 0x7500, 0x0048, 0x3e19, 0x6854, 0xac02, 0x00c8, 0x3e19, + 0x2009, 0x0047, 0x1078, 0x55c8, 0x7a1c, 0xd284, 0x00c0, 0x3def, + 0x007c, 0xa016, 0x1078, 0x1523, 0x0078, 0x3e14, 0x157e, 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070, 0x00c0, - 0x4187, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x4187, 0x1078, - 0x4194, 0x0040, 0x4187, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078, - 0x41b2, 0x147f, 0x137f, 0x157f, 0x2009, 0x783e, 0x2104, 0xa005, - 0x00c0, 0x4183, 0x007c, 0x1078, 0x4c2c, 0x0078, 0x4182, 0x1078, - 0x751f, 0x1078, 0x4194, 0x20e1, 0x3000, 0x7828, 0x7828, 0x147f, - 0x137f, 0x157f, 0x0078, 0x4182, 0xa484, 0x01ff, 0x687a, 0xa005, - 0x0040, 0x41a6, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, + 0x3e47, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x3e47, 0x1078, + 0x3e54, 0x0040, 0x3e47, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078, + 0x3e72, 0x147f, 0x137f, 0x157f, 0x2009, 0x70be, 0x2104, 0xa005, + 0x00c0, 0x3e43, 0x007c, 0x1078, 0x484d, 0x0078, 0x3e42, 0x1078, + 0x6dc3, 0x1078, 0x3e54, 0x20e1, 0x3000, 0x7828, 0x7828, 0x147f, + 0x137f, 0x157f, 0x0078, 0x3e42, 0xa484, 0x01ff, 0x6872, 0xa005, + 0x0040, 0x3e66, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, - 0x0078, 0x41a5, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, - 0xa196, 0x0000, 0x00c0, 0x41bf, 0x0078, 0x4333, 0x007c, 0xa196, - 0x2000, 0x00c0, 0x41d0, 0x6900, 0xa18e, 0x0001, 0x00c0, 0x41cc, - 0x1078, 0x2e6a, 0x0078, 0x41be, 0x1078, 0x41d8, 0x0078, 0x41be, - 0xa196, 0x8000, 0x00c0, 0x41be, 0x1078, 0x43b9, 0x0078, 0x41be, + 0x0078, 0x3e65, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, + 0xa196, 0x0000, 0x00c0, 0x3e7f, 0x0078, 0x3f6b, 0x007c, 0xa196, + 0x2000, 0x00c0, 0x3e90, 0x6900, 0xa18e, 0x0001, 0x00c0, 0x3e8c, + 0x1078, 0x2b2a, 0x0078, 0x3e7e, 0x1078, 0x3e98, 0x0078, 0x3e7e, + 0xa196, 0x8000, 0x00c0, 0x3e7e, 0x1078, 0x3ff1, 0x0078, 0x3e7e, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0040, - 0x41e5, 0xa196, 0x0023, 0x00c0, 0x42da, 0xa08e, 0x0023, 0x00c0, - 0x4216, 0x1078, 0x4430, 0x0040, 0x42da, 0x7124, 0x610a, 0x7030, - 0xa08e, 0x0200, 0x00c0, 0x41fe, 0x7034, 0xa005, 0x00c0, 0x42da, - 0x2009, 0x0015, 0x1078, 0x5bdb, 0x0078, 0x42da, 0xa08e, 0x0210, - 0x00c0, 0x4208, 0x2009, 0x0015, 0x1078, 0x5bdb, 0x0078, 0x42da, - 0xa08e, 0x0100, 0x00c0, 0x42da, 0x7034, 0xa005, 0x00c0, 0x42da, - 0x2009, 0x0016, 0x1078, 0x5bdb, 0x0078, 0x42da, 0xa08e, 0x0022, - 0x00c0, 0x42da, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x4227, 0x7034, - 0xa005, 0x00c0, 0x42da, 0x2009, 0x0017, 0x0078, 0x42a6, 0xa08e, - 0x0500, 0x00c0, 0x4233, 0x7034, 0xa005, 0x00c0, 0x42da, 0x2009, - 0x0018, 0x0078, 0x42a6, 0xa08e, 0x2010, 0x00c0, 0x423b, 0x2009, - 0x0019, 0x0078, 0x42a6, 0xa08e, 0x2110, 0x00c0, 0x4243, 0x2009, - 0x001a, 0x0078, 0x42a6, 0xa08e, 0x5200, 0x00c0, 0x424f, 0x7034, - 0xa005, 0x00c0, 0x42da, 0x2009, 0x001b, 0x0078, 0x42a6, 0xa08e, - 0x5000, 0x00c0, 0x425b, 0x7034, 0xa005, 0x00c0, 0x42da, 0x2009, - 0x001c, 0x0078, 0x42a6, 0xa08e, 0x1200, 0x00c0, 0x4267, 0x7034, - 0xa005, 0x00c0, 0x42da, 0x2009, 0x0024, 0x0078, 0x42a6, 0xa08c, - 0xff00, 0xa18e, 0x2400, 0x00c0, 0x4271, 0x2009, 0x002d, 0x0078, - 0x42a6, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x427b, 0x2009, - 0x002a, 0x0078, 0x42a6, 0xa08e, 0x0f00, 0x00c0, 0x4283, 0x2009, - 0x0020, 0x0078, 0x42a6, 0xa08e, 0x5300, 0x00c0, 0x4289, 0x0078, - 0x42a4, 0xa08e, 0x6104, 0x00c0, 0x42a4, 0x2011, 0x7b8d, 0x8208, - 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, - 0x211c, 0x8108, 0x2124, 0x1078, 0x2d02, 0x8108, 0x00f0, 0x4296, - 0x2009, 0x0023, 0x0078, 0x42a6, 0x2009, 0x001d, 0x017e, 0x2011, - 0x7b83, 0x2204, 0x8211, 0x220c, 0x1078, 0x2059, 0x00c0, 0x42dc, - 0x1078, 0x37a0, 0x00c0, 0x42dc, 0x6612, 0x6516, 0x86ff, 0x0040, - 0x42cc, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x42cc, 0x6864, - 0xa606, 0x00c0, 0x42cc, 0x6868, 0xa506, 0xa084, 0xff00, 0x00c0, - 0x42cc, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x5b4e, 0x0040, - 0x42df, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, - 0x1078, 0x5bdb, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x42da, 0x0c7f, - 0x0078, 0x42dc, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff, - 0x00c0, 0x4302, 0xa596, 0xfffd, 0x00c0, 0x42f2, 0x2009, 0x007f, - 0x0078, 0x432f, 0xa596, 0xfffe, 0x00c0, 0x42fa, 0x2009, 0x007e, - 0x0078, 0x432f, 0xa596, 0xfffc, 0x00c0, 0x4302, 0x2009, 0x0080, - 0x0078, 0x432f, 0x2011, 0x0000, 0x2021, 0x007e, 0x20a9, 0x0082, - 0x2071, 0x779e, 0x2e1c, 0x83ff, 0x00c0, 0x4314, 0x82ff, 0x00c0, - 0x4323, 0x2410, 0x0078, 0x4323, 0x2368, 0x6b10, 0x007e, 0x2100, - 0xa31e, 0x007f, 0x00c0, 0x4323, 0x6b14, 0xa31e, 0x00c0, 0x4323, - 0x2408, 0x0078, 0x432f, 0x8420, 0x8e70, 0x00f0, 0x430a, 0x82ff, - 0x00c0, 0x432e, 0xa085, 0x0001, 0x0078, 0x4330, 0x2208, 0xa006, - 0x0d7f, 0x0e7f, 0x007c, 0xa084, 0x0007, 0x0079, 0x4338, 0x007c, - 0x4340, 0x4340, 0x4340, 0x4340, 0x4340, 0x4341, 0x435a, 0x43a2, - 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4359, 0x7120, 0x2160, 0xac8c, - 0x0007, 0x00c0, 0x4359, 0xac8a, 0x7d00, 0x0048, 0x4359, 0x6854, - 0xac02, 0x00c8, 0x4359, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, - 0x5bdb, 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x43a0, 0x2011, - 0x7b83, 0x2204, 0x8211, 0x220c, 0x1078, 0x2059, 0x00c0, 0x43a0, - 0x1078, 0x37d7, 0x00c0, 0x43a0, 0x6204, 0xa294, 0xff00, 0x8217, - 0xa286, 0x0006, 0x00c0, 0x4385, 0x0c7e, 0x1078, 0x5b4e, 0x017f, - 0x0040, 0x43a0, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x2009, - 0x0044, 0x1078, 0x5bdb, 0x0078, 0x43a0, 0x0c7e, 0x1078, 0x5b4e, - 0x017f, 0x0040, 0x43a0, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, - 0xa286, 0x0004, 0x00c0, 0x4398, 0x6007, 0x0005, 0x0078, 0x439a, - 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x4824, 0x1078, 0x4c2c, - 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x43b8, 0x7020, 0x2060, - 0xac84, 0x0007, 0x00c0, 0x43b8, 0xac82, 0x7d00, 0x0048, 0x43b8, - 0x6854, 0xac02, 0x00c8, 0x43b8, 0x2009, 0x0045, 0x1078, 0x5bdb, + 0x3ea5, 0xa196, 0x0023, 0x00c0, 0x3f63, 0xa08e, 0x0023, 0x00c0, + 0x3ed6, 0x1078, 0x4063, 0x0040, 0x3f63, 0x7124, 0x610a, 0x7030, + 0xa08e, 0x0200, 0x00c0, 0x3ebe, 0x7034, 0xa005, 0x00c0, 0x3f63, + 0x2009, 0x0015, 0x1078, 0x55c8, 0x0078, 0x3f63, 0xa08e, 0x0210, + 0x00c0, 0x3ec8, 0x2009, 0x0015, 0x1078, 0x55c8, 0x0078, 0x3f63, + 0xa08e, 0x0100, 0x00c0, 0x3f63, 0x7034, 0xa005, 0x00c0, 0x3f63, + 0x2009, 0x0016, 0x1078, 0x55c8, 0x0078, 0x3f63, 0xa08e, 0x0022, + 0x00c0, 0x3f63, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x3ee7, 0x7034, + 0xa005, 0x00c0, 0x3f63, 0x2009, 0x0017, 0x0078, 0x3f4b, 0xa08e, + 0x0500, 0x00c0, 0x3ef3, 0x7034, 0xa005, 0x00c0, 0x3f63, 0x2009, + 0x0018, 0x0078, 0x3f4b, 0xa08e, 0x2010, 0x00c0, 0x3efb, 0x2009, + 0x0019, 0x0078, 0x3f4b, 0xa08e, 0x2110, 0x00c0, 0x3f03, 0x2009, + 0x001a, 0x0078, 0x3f4b, 0xa08e, 0x5200, 0x00c0, 0x3f0f, 0x7034, + 0xa005, 0x00c0, 0x3f63, 0x2009, 0x001b, 0x0078, 0x3f4b, 0xa08e, + 0x5000, 0x00c0, 0x3f1b, 0x7034, 0xa005, 0x00c0, 0x3f63, 0x2009, + 0x001c, 0x0078, 0x3f4b, 0xa08e, 0x1200, 0x00c0, 0x3f27, 0x7034, + 0xa005, 0x00c0, 0x3f63, 0x2009, 0x0024, 0x0078, 0x3f4b, 0xa08c, + 0xff00, 0xa18e, 0x2400, 0x00c0, 0x3f31, 0x2009, 0x002d, 0x0078, + 0x3f4b, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x3f3b, 0x2009, + 0x002a, 0x0078, 0x3f4b, 0xa08e, 0x0f00, 0x00c0, 0x3f43, 0x2009, + 0x0020, 0x0078, 0x3f4b, 0xa08e, 0x5300, 0x00c0, 0x3f49, 0x0078, + 0x3f49, 0x2009, 0x001d, 0x017e, 0x2011, 0x7383, 0x2204, 0x1078, + 0x1fb0, 0x1078, 0x3460, 0x00c0, 0x3f65, 0x0c7e, 0x1078, 0x553b, + 0x0040, 0x3f68, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, + 0x017f, 0x1078, 0x55c8, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x3f63, + 0x0c7f, 0x0078, 0x3f65, 0xa084, 0x0007, 0x0079, 0x3f70, 0x007c, + 0x3f78, 0x3f78, 0x3f78, 0x3f78, 0x3f78, 0x3f79, 0x3f92, 0x3fda, + 0x007c, 0x7110, 0xd1bc, 0x0040, 0x3f91, 0x7120, 0x2160, 0xac8c, + 0x0007, 0x00c0, 0x3f91, 0xac8a, 0x7500, 0x0048, 0x3f91, 0x6854, + 0xac02, 0x00c8, 0x3f91, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, + 0x55c8, 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x3fd8, 0x2011, + 0x7383, 0x2204, 0xa080, 0x21d3, 0x200c, 0xa18c, 0xff00, 0x810f, + 0x1078, 0x3497, 0x00c0, 0x3fd8, 0x6204, 0xa294, 0xff00, 0x8217, + 0xa286, 0x0006, 0x00c0, 0x3fbd, 0x0c7e, 0x1078, 0x553b, 0x017f, + 0x0040, 0x3fd8, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x2009, + 0x0044, 0x1078, 0x55c8, 0x0078, 0x3fd8, 0x0c7e, 0x1078, 0x553b, + 0x017f, 0x0040, 0x3fd8, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, + 0xa286, 0x0004, 0x00c0, 0x3fd0, 0x6007, 0x0005, 0x0078, 0x3fd2, + 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x4445, 0x1078, 0x484d, + 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x3ff0, 0x7020, 0x2060, + 0xac84, 0x0007, 0x00c0, 0x3ff0, 0xac82, 0x7500, 0x0048, 0x3ff0, + 0x6854, 0xac02, 0x00c8, 0x3ff0, 0x2009, 0x0045, 0x1078, 0x55c8, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, - 0x43c9, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x12d5, 0x1079, - 0x43ca, 0x007c, 0x43d0, 0x43d1, 0x43d0, 0x43d0, 0x4412, 0x4421, - 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x4411, 0x700c, 0x7108, 0x1078, - 0x2059, 0x00c0, 0x4411, 0x1078, 0x37a0, 0x00c0, 0x4411, 0x6612, - 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, - 0x43fa, 0x0c7e, 0x1078, 0x5b4e, 0x017f, 0x0040, 0x4411, 0x611a, - 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x5bdb, - 0x0078, 0x4411, 0x0c7e, 0x1078, 0x5b4e, 0x017f, 0x0040, 0x4411, - 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, - 0x440d, 0x2009, 0x0005, 0x0078, 0x440f, 0x2009, 0x0001, 0x1078, - 0x5bdb, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4420, 0x1078, 0x4430, - 0x0040, 0x4420, 0x7124, 0x610a, 0x2009, 0x0089, 0x1078, 0x5bdb, - 0x007c, 0x7110, 0xd1bc, 0x0040, 0x442f, 0x1078, 0x4430, 0x0040, - 0x442f, 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, 0x5bdb, 0x007c, - 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x4443, 0xac82, 0x7d00, - 0x0048, 0x4443, 0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, 0x4443, - 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x4442, 0x2071, 0x7849, - 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, - 0x7d00, 0x7007, 0x0000, 0x7026, 0x702b, 0x5541, 0x7032, 0x7037, - 0x5582, 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, 0x2071, 0x7849, - 0x00e0, 0x450d, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0, - 0x44d6, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000, - 0x7138, 0x8109, 0x713a, 0x00c0, 0x44d4, 0x703b, 0x0002, 0x2009, - 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x44d4, 0x703c, 0xa086, - 0x0001, 0x00c0, 0x44b1, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, - 0x4000, 0x0040, 0x448f, 0x6803, 0x1000, 0x0078, 0x4496, 0x6804, - 0xa084, 0x1000, 0x0040, 0x4496, 0x6803, 0x0100, 0x6803, 0x0000, - 0x703f, 0x0000, 0x2069, 0x7836, 0x6804, 0xa082, 0x0006, 0x00c0, - 0x44a3, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x44aa, - 0x6833, 0x0000, 0x1078, 0x4c2c, 0x1078, 0x4cec, 0x0d7f, 0x0078, - 0x44d4, 0x0d7e, 0x2069, 0x7600, 0x6944, 0x6860, 0xa102, 0x00c8, - 0x44d3, 0x2069, 0x7836, 0x6804, 0xa086, 0x0000, 0x00c0, 0x44d3, - 0x6830, 0xa086, 0x0000, 0x00c0, 0x44d3, 0x703f, 0x0001, 0x6807, - 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069, - 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x44d9, 0x127e, 0x2091, - 0x8000, 0x7024, 0xa00d, 0x0040, 0x44ea, 0x7020, 0x8001, 0x7022, - 0x00c0, 0x44ea, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0, 0x44ea, - 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x44fb, 0x702c, 0x8001, - 0x702e, 0x00c0, 0x44fb, 0x702f, 0x0009, 0x8109, 0x7132, 0x00c0, - 0x44fb, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x450c, 0x7008, - 0x8001, 0x700a, 0x00c0, 0x450c, 0x700b, 0x0009, 0x8109, 0x711a, - 0x00c0, 0x450c, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079, 0x4510, - 0x4537, 0x4538, 0x4554, 0x0e7e, 0x2071, 0x7849, 0x7018, 0xa005, - 0x00c0, 0x451e, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, - 0x0e7e, 0x007e, 0x2071, 0x7849, 0x701c, 0xa206, 0x00c0, 0x452a, - 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7849, - 0x6088, 0xa102, 0x0048, 0x4535, 0x618a, 0x0e7f, 0x007c, 0x007c, - 0x7110, 0x1078, 0x37d7, 0x00c0, 0x454a, 0x6088, 0x8001, 0x0048, - 0x454a, 0x608a, 0x00c0, 0x454a, 0x127e, 0x2091, 0x8000, 0x1078, - 0x4c2c, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, 0x4552, 0xa00e, - 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, - 0x8000, 0x6014, 0xa005, 0x0040, 0x4583, 0x8001, 0x6016, 0x00c0, - 0x4583, 0x611c, 0xa186, 0x0003, 0x0040, 0x456a, 0xa186, 0x0006, - 0x00c0, 0x4581, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, - 0x4581, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x457a, - 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, - 0x4583, 0x1078, 0x676e, 0x127f, 0xac88, 0x0008, 0x7116, 0x2001, - 0x7616, 0x2004, 0xa102, 0x0048, 0x4591, 0x7017, 0x7d00, 0x7007, - 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7849, 0x7027, 0x07d0, 0x7023, - 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, 0x7852, 0x2003, - 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7849, 0x7033, 0x07d0, 0x702f, - 0x0009, 0x0e7f, 0x007c, 0x2011, 0x7855, 0x2013, 0x0000, 0x007c, - 0x0e7e, 0x2071, 0x7849, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, - 0x007c, 0x0c7e, 0x2061, 0x78da, 0x0c7f, 0x007c, 0xa184, 0x000f, - 0x8003, 0x8003, 0x8003, 0xa080, 0x78da, 0x2060, 0x007c, 0x6854, - 0xa08a, 0x199a, 0x0048, 0x45ce, 0x2001, 0x1999, 0xa005, 0x00c0, - 0x45de, 0x6944, 0x0c7e, 0x1078, 0x45be, 0x6014, 0x0c7f, 0xa005, - 0x00c0, 0x45e3, 0x2001, 0x001e, 0x0078, 0x45e3, 0xa08e, 0xffff, - 0x00c0, 0x45e3, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, - 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x461e, 0xd0b4, - 0x00c0, 0x45fa, 0xd0bc, 0x00c0, 0x460c, 0x2009, 0x0006, 0x1078, - 0x4641, 0x007c, 0xd0fc, 0x0040, 0x4607, 0xa084, 0x0003, 0xa08e, - 0x0003, 0x0040, 0x463a, 0xa08e, 0x0000, 0x00c0, 0x463a, 0x2009, - 0x0043, 0x1078, 0x5bdb, 0x007c, 0xd0fc, 0x0040, 0x4619, 0xa084, - 0x0003, 0xa08e, 0x0003, 0x0040, 0x463a, 0xa08e, 0x0000, 0x00c0, - 0x463a, 0x2009, 0x0042, 0x1078, 0x5bdb, 0x007c, 0xd0fc, 0x0040, - 0x4630, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x463a, 0xa08e, - 0x0002, 0x0040, 0x4634, 0x2009, 0x0041, 0x1078, 0x5bdb, 0x007c, - 0x1078, 0x463f, 0x0078, 0x462f, 0x2009, 0x0043, 0x1078, 0x5bdb, - 0x0078, 0x462f, 0x2009, 0x0004, 0x1078, 0x4641, 0x007c, 0x2009, - 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x4665, 0x2068, 0x6952, - 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x465f, 0x694c, 0xa18c, - 0x8100, 0xa18e, 0x8100, 0x00c0, 0x465f, 0x0c7e, 0x6944, 0x1078, - 0x45be, 0x6204, 0x8210, 0x0048, 0x465e, 0x6206, 0x0c7f, 0x1078, - 0x3a2c, 0x6010, 0xa06d, 0x10c0, 0x45c7, 0x007c, 0x157e, 0x0c7e, - 0x20a9, 0x0010, 0x2061, 0x78da, 0x6000, 0x81ff, 0x0040, 0x4673, - 0xa205, 0x0078, 0x4674, 0xa204, 0x6002, 0xace0, 0x0008, 0x00f0, - 0x466c, 0x0c7f, 0x157f, 0x007c, 0x6808, 0xa005, 0x0040, 0x4684, - 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, - 0x2079, 0x7836, 0x127f, 0x0d7e, 0x2069, 0x7836, 0x6803, 0x0005, - 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, - 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x46a0, - 0x46aa, 0x46cf, 0x472a, 0x46b0, 0x46cf, 0x46a8, 0x46a8, 0x46a8, - 0x1078, 0x12d5, 0x1078, 0x459d, 0x1078, 0x4c2c, 0x0c7f, 0x007c, - 0x62c0, 0x82ff, 0x00c0, 0x46b6, 0x0c7f, 0x007c, 0x2011, 0x34fc, - 0x1078, 0x4520, 0x7828, 0xa092, 0x0002, 0x00c8, 0x46c5, 0x8000, - 0x782a, 0x1078, 0x352c, 0x0078, 0x46b4, 0x1078, 0x34fc, 0x7807, - 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0078, 0x46b4, 0x1078, - 0x459d, 0x3c00, 0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, - 0x007f, 0x20e0, 0x82ff, 0x0040, 0x46ed, 0x62c0, 0x82ff, 0x00c0, - 0x46ed, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x12d5, 0x2009, - 0x0013, 0x1078, 0x5bdb, 0x0c7f, 0x007c, 0x3900, 0xa082, 0x797a, - 0x00c8, 0x46f4, 0x1078, 0x5ade, 0x0c7e, 0x7824, 0xa065, 0x1040, - 0x12d5, 0x7804, 0xa086, 0x0004, 0x0040, 0x476f, 0x7828, 0xa092, - 0x2710, 0x00c8, 0x470a, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x5526, - 0x0078, 0x46eb, 0x6104, 0xa186, 0x0003, 0x00c0, 0x4721, 0x0e7e, - 0x2071, 0x7600, 0x70c8, 0x0e7f, 0xd08c, 0x0040, 0x4721, 0x0c7e, - 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7600, 0x1078, 0x3535, 0x0e7f, - 0x0c7f, 0x1078, 0x7572, 0x2009, 0x0014, 0x1078, 0x5bdb, 0x0c7f, - 0x0078, 0x46eb, 0x2001, 0x7852, 0x2003, 0x0000, 0x62c0, 0x82ff, - 0x00c0, 0x473e, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x12d5, - 0x2009, 0x0013, 0x1078, 0x5c29, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, - 0x3900, 0xa082, 0x797a, 0x00c8, 0x4747, 0x1078, 0x5ade, 0x7824, - 0xa005, 0x1040, 0x12d5, 0x781c, 0xa06d, 0x1040, 0x12d5, 0x6800, - 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, 0x5bb4, 0x693c, 0x81ff, - 0x1040, 0x12d5, 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x4763, - 0x7a1e, 0x0078, 0x4765, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, - 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x4c2c, 0x0078, 0x473c, 0x6104, - 0xa186, 0x0002, 0x0040, 0x477a, 0xa186, 0x0004, 0x0040, 0x477a, - 0x0078, 0x46fe, 0x7808, 0xac06, 0x0040, 0x46fe, 0x1078, 0x4b33, - 0x1078, 0x4824, 0x0c7f, 0x1078, 0x4c2c, 0x0078, 0x46eb, 0x0c7e, - 0x6027, 0x0002, 0x2011, 0x7855, 0x2013, 0x0000, 0x62c8, 0x82ff, - 0x00c0, 0x47a1, 0x62c4, 0x82ff, 0x00c0, 0x47a1, 0x793c, 0xa1e5, - 0x0000, 0x0040, 0x479f, 0x2009, 0x0049, 0x1078, 0x5bdb, 0x0c7f, - 0x007c, 0x3908, 0xa192, 0x797a, 0x00c8, 0x47a8, 0x1078, 0x5ade, - 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x479f, 0x7944, 0xa192, - 0x7530, 0x00c8, 0x47c7, 0x8108, 0x7946, 0x1078, 0x45a2, 0x793c, - 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x47c3, 0x6017, - 0x0012, 0x0078, 0x479f, 0x6017, 0x0016, 0x0078, 0x479f, 0x037e, - 0x2019, 0x0001, 0x1078, 0x571a, 0x037f, 0x1078, 0x7572, 0x793c, - 0x2160, 0x2009, 0x004a, 0x1078, 0x5bdb, 0x0078, 0x479f, 0x007e, - 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, - 0x2061, 0x7836, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0040, - 0x47f2, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f, 0x0c7f, 0x017f, - 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x47ed, 0x0d7e, 0x2069, - 0x7836, 0x6000, 0xd0d4, 0x0040, 0x480b, 0x6820, 0x8000, 0x6822, - 0xa086, 0x0001, 0x00c0, 0x4806, 0x2c00, 0x681e, 0x6804, 0xa084, - 0x0007, 0x0079, 0x4c34, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0040, - 0x481d, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00, 0x681a, 0x0d7f, - 0x685a, 0x2069, 0x7836, 0x0078, 0x47fd, 0x6056, 0x605a, 0x2c00, - 0x681a, 0x681e, 0x0078, 0x47fd, 0x007e, 0x017e, 0x0c7e, 0x127e, - 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x7836, 0x6020, - 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x483f, 0xa080, 0x0003, - 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x610e, - 0x610a, 0x0078, 0x483a, 0x0c7e, 0x600f, 0x0000, 0x2c08, 0x2061, - 0x7836, 0x6034, 0xa005, 0x0040, 0x4853, 0xa080, 0x0003, 0x2102, - 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078, 0x4851, 0x0f7e, - 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2071, - 0x7836, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, - 0x48b9, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x48b4, - 0x703c, 0xac06, 0x00c0, 0x4879, 0x6003, 0x000a, 0x630a, 0x0078, - 0x48b4, 0x7038, 0xac36, 0x00c0, 0x487f, 0x660c, 0x763a, 0x7034, - 0xac36, 0x00c0, 0x488d, 0x2c00, 0xaf36, 0x0040, 0x488b, 0x2f00, - 0x7036, 0x0078, 0x488d, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, - 0xaf06, 0x0040, 0x4896, 0x7e0e, 0x0078, 0x4897, 0x2678, 0x600f, - 0x0000, 0x1078, 0x68e3, 0x0040, 0x48af, 0x6010, 0x2068, 0x601c, - 0xa086, 0x0003, 0x00c0, 0x48c2, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x1078, 0x6aea, 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x1078, - 0x6a4c, 0x0c7f, 0x0078, 0x4866, 0x2c78, 0x600c, 0x2060, 0x0078, - 0x4866, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x48a4, 0x1078, - 0x74a8, 0x0078, 0x48af, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, - 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, 0x2079, 0x7836, 0x7838, - 0xa065, 0x0040, 0x4902, 0x600c, 0x007e, 0x600f, 0x0000, 0x783c, - 0xac06, 0x00c0, 0x48e9, 0x6003, 0x000a, 0x630a, 0x2c30, 0x0078, - 0x48ff, 0x1078, 0x68e3, 0x0040, 0x48fd, 0x6010, 0x2068, 0x601c, - 0xa086, 0x0003, 0x00c0, 0x490b, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x1078, 0x6a4c, 0x007f, - 0x0078, 0x48d8, 0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, - 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x48f4, - 0x1078, 0x74a8, 0x0078, 0x48fd, 0x027e, 0x1078, 0x4928, 0x1078, - 0x49c1, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079, 0x7836, 0x2091, - 0x8000, 0x1078, 0x4a58, 0x1078, 0x4ac0, 0x127f, 0x0f7f, 0x007c, - 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x7836, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0040, - 0x49b0, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x49ab, - 0x7024, 0xac06, 0x00c0, 0x496e, 0x2069, 0x0100, 0x68c0, 0xa005, - 0x0040, 0x4969, 0x1078, 0x5534, 0x68c3, 0x0000, 0x1078, 0x59e4, - 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, - 0x0040, 0x495e, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0040, 0x4966, 0x6827, 0x0001, 0x037f, 0x0078, - 0x496e, 0x6003, 0x0009, 0x630a, 0x0078, 0x49ab, 0x7014, 0xac36, - 0x00c0, 0x4974, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x4982, - 0x2c00, 0xaf36, 0x0040, 0x4980, 0x2f00, 0x7012, 0x0078, 0x4982, - 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x498b, - 0x7e0e, 0x0078, 0x498c, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, - 0x1078, 0x68e3, 0x0040, 0x49a4, 0x601c, 0xa086, 0x0003, 0x00c0, - 0x49b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6aea, - 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x1078, 0x6a4c, 0x1078, 0x58b4, - 0x0c7f, 0x0078, 0x4936, 0x2c78, 0x600c, 0x2060, 0x0078, 0x4936, - 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, - 0x601c, 0xa086, 0x0006, 0x00c0, 0x4999, 0x1078, 0x74a8, 0x0078, - 0x49a4, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0xa280, 0x7720, - 0x2004, 0xa065, 0x0040, 0x4a54, 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, - 0x2071, 0x7836, 0x6654, 0x7018, 0xac06, 0x00c0, 0x49d8, 0x761a, - 0x701c, 0xac06, 0x00c0, 0x49e4, 0x86ff, 0x00c0, 0x49e3, 0x7018, - 0x701e, 0x0078, 0x49e4, 0x761e, 0x6058, 0xa07d, 0x0040, 0x49e9, - 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x49ef, 0x2f00, 0x685a, 0x6057, - 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, - 0x3754, 0x0040, 0x4a50, 0x7624, 0x86ff, 0x0040, 0x4a40, 0xa680, - 0x0004, 0x2004, 0xad06, 0x00c0, 0x4a40, 0x0d7e, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0040, 0x4a37, 0x1078, 0x5534, 0x68c3, 0x0000, - 0x1078, 0x59e4, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, - 0xa384, 0x1000, 0x0040, 0x4a20, 0x6803, 0x0100, 0x6803, 0x0000, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4a28, 0x6827, 0x0001, - 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4a31, 0x8001, - 0x603e, 0x2660, 0x1078, 0x6a4c, 0x0c7f, 0x0078, 0x4a40, 0x0d7f, - 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x49f7, - 0x8dff, 0x0040, 0x4a4c, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x6aea, 0x1078, 0x3a2c, 0x1078, 0x58b4, 0x0078, 0x49f7, - 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, - 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, - 0x0040, 0x4ab0, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, - 0x00c0, 0x4a95, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4a8f, - 0x1078, 0x5534, 0x68c3, 0x0000, 0x1078, 0x59e4, 0x7827, 0x0000, - 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4a84, + 0x4001, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x1286, 0x1079, + 0x4002, 0x007c, 0x4008, 0x4009, 0x4008, 0x4008, 0x4045, 0x4054, + 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x4044, 0x700c, 0x1078, 0x1fb0, + 0x1078, 0x3460, 0x00c0, 0x4044, 0x6204, 0xa294, 0xff00, 0x8217, + 0xa286, 0x0006, 0x00c0, 0x402d, 0x0c7e, 0x1078, 0x553b, 0x017f, + 0x0040, 0x4044, 0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, + 0x0088, 0x1078, 0x55c8, 0x0078, 0x4044, 0x0c7e, 0x1078, 0x553b, + 0x017f, 0x0040, 0x4044, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, + 0xa286, 0x0004, 0x00c0, 0x4040, 0x2009, 0x0005, 0x0078, 0x4042, + 0x2009, 0x0001, 0x1078, 0x55c8, 0x007c, 0x7110, 0xd1bc, 0x0040, + 0x4053, 0x1078, 0x4063, 0x0040, 0x4053, 0x7124, 0x610a, 0x2009, + 0x0089, 0x1078, 0x55c8, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4062, + 0x1078, 0x4063, 0x0040, 0x4062, 0x7124, 0x610a, 0x2009, 0x008a, + 0x1078, 0x55c8, 0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, + 0x4076, 0xac82, 0x7500, 0x0048, 0x4076, 0x2001, 0x6f15, 0x2004, + 0xac02, 0x00c8, 0x4076, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, + 0x4075, 0x2071, 0x70c9, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, + 0x701a, 0x7012, 0x7017, 0x7500, 0x7007, 0x0000, 0x7026, 0x702b, + 0x4f52, 0x7032, 0x7037, 0x4f9e, 0x703b, 0x0002, 0x703f, 0x0000, + 0x007c, 0x2071, 0x70c9, 0x00e0, 0x4140, 0x2091, 0x6000, 0x700c, + 0x8001, 0x700e, 0x00c0, 0x4109, 0x700f, 0x0361, 0x7007, 0x0001, + 0x127e, 0x2091, 0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x4107, + 0x703b, 0x0002, 0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, + 0x4107, 0x703c, 0xa086, 0x0001, 0x00c0, 0x40e4, 0x0d7e, 0x2069, + 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x40c2, 0x6803, 0x1000, + 0x0078, 0x40c9, 0x6804, 0xa084, 0x1000, 0x0040, 0x40c9, 0x6803, + 0x0100, 0x6803, 0x0000, 0x703f, 0x0000, 0x2069, 0x70b6, 0x6804, + 0xa082, 0x0006, 0x00c0, 0x40d6, 0x6807, 0x0000, 0x6830, 0xa082, + 0x0003, 0x00c0, 0x40dd, 0x6833, 0x0000, 0x1078, 0x484d, 0x1078, + 0x48fd, 0x0d7f, 0x0078, 0x4107, 0x0d7e, 0x2069, 0x6f00, 0x6944, + 0x6860, 0xa102, 0x00c8, 0x4106, 0x2069, 0x70b6, 0x6804, 0xa086, + 0x0000, 0x00c0, 0x4106, 0x6830, 0xa086, 0x0000, 0x00c0, 0x4106, + 0x703f, 0x0001, 0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, + 0x6830, 0x689e, 0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, + 0x410c, 0x127e, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x411d, + 0x7020, 0x8001, 0x7022, 0x00c0, 0x411d, 0x7023, 0x0009, 0x8109, + 0x7126, 0x00c0, 0x411d, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, + 0x412e, 0x702c, 0x8001, 0x702e, 0x00c0, 0x412e, 0x702f, 0x0009, + 0x8109, 0x7132, 0x00c0, 0x412e, 0x7034, 0x107a, 0x7018, 0xa00d, + 0x0040, 0x413f, 0x7008, 0x8001, 0x700a, 0x00c0, 0x413f, 0x700b, + 0x0009, 0x8109, 0x711a, 0x00c0, 0x413f, 0x701c, 0x107a, 0x127f, + 0x7004, 0x0079, 0x4143, 0x416a, 0x416b, 0x4187, 0x0e7e, 0x2071, + 0x70c9, 0x7018, 0xa005, 0x00c0, 0x4151, 0x711a, 0x721e, 0x700b, + 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x70c9, 0x701c, + 0xa206, 0x00c0, 0x415d, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, + 0x0e7e, 0x2071, 0x70c9, 0x6088, 0xa102, 0x0048, 0x4168, 0x618a, + 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x3497, 0x00c0, 0x417d, + 0x6088, 0x8001, 0x0048, 0x417d, 0x608a, 0x00c0, 0x417d, 0x127e, + 0x2091, 0x8000, 0x1078, 0x484d, 0x127f, 0x8108, 0xa182, 0x007e, + 0x0048, 0x4185, 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, + 0x2060, 0x127e, 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x41b6, + 0x8001, 0x6016, 0x00c0, 0x41b6, 0x611c, 0xa186, 0x0003, 0x0040, + 0x419d, 0xa186, 0x0006, 0x00c0, 0x41b4, 0x6010, 0x2068, 0x6854, + 0xa08a, 0x199a, 0x0048, 0x41b4, 0xa082, 0x1999, 0x6856, 0xa08a, + 0x199a, 0x0048, 0x41ad, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, + 0xa108, 0x6116, 0x0078, 0x41b6, 0x1078, 0x6070, 0x127f, 0xac88, + 0x0008, 0x7116, 0x2001, 0x6f16, 0x2004, 0xa102, 0x0048, 0x41c4, + 0x7017, 0x7500, 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x70c9, + 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, + 0x2001, 0x70d2, 0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x70c9, + 0x7033, 0x07d0, 0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x70d5, + 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x70c9, 0x711a, 0x721e, + 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x715a, 0x0c7f, + 0x007c, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x715a, + 0x2060, 0x007c, 0x6854, 0xa08a, 0x199a, 0x0048, 0x4201, 0x2001, + 0x1999, 0xa005, 0x00c0, 0x4211, 0x6944, 0x0c7e, 0x1078, 0x41f1, + 0x6014, 0x0c7f, 0xa005, 0x00c0, 0x4216, 0x2001, 0x001e, 0x0078, + 0x4216, 0xa08e, 0xffff, 0x00c0, 0x4216, 0xa006, 0x8003, 0x800b, + 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, + 0x0040, 0x4251, 0xd0b4, 0x00c0, 0x422d, 0xd0bc, 0x00c0, 0x423f, + 0x2009, 0x0006, 0x1078, 0x4274, 0x007c, 0xd0fc, 0x0040, 0x423a, + 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x426d, 0xa08e, 0x0000, + 0x00c0, 0x426d, 0x2009, 0x0043, 0x1078, 0x55c8, 0x007c, 0xd0fc, + 0x0040, 0x424c, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x426d, + 0xa08e, 0x0000, 0x00c0, 0x426d, 0x2009, 0x0042, 0x1078, 0x55c8, + 0x007c, 0xd0fc, 0x0040, 0x4263, 0xa084, 0x0003, 0xa08e, 0x0003, + 0x0040, 0x426d, 0xa08e, 0x0002, 0x0040, 0x4267, 0x2009, 0x0041, + 0x1078, 0x55c8, 0x007c, 0x1078, 0x4272, 0x0078, 0x4262, 0x2009, + 0x0043, 0x1078, 0x55c8, 0x0078, 0x4262, 0x2009, 0x0004, 0x1078, + 0x4274, 0x007c, 0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, + 0x4298, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, + 0x4292, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x4292, + 0x0c7e, 0x6944, 0x1078, 0x41f1, 0x6204, 0x8210, 0x0048, 0x4291, + 0x6206, 0x0c7f, 0x1078, 0x36ec, 0x6010, 0xa06d, 0x10c0, 0x41fa, + 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x715a, 0x6000, + 0x81ff, 0x0040, 0x42a6, 0xa205, 0x0078, 0x42a7, 0xa204, 0x6002, + 0xace0, 0x0008, 0x00f0, 0x429f, 0x0c7f, 0x157f, 0x007c, 0x6808, + 0xa005, 0x0040, 0x42b7, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, + 0x127e, 0x2091, 0x2200, 0x2079, 0x70b6, 0x127f, 0x0d7e, 0x2069, + 0x70b6, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, + 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, + 0x0007, 0x0079, 0x42d3, 0x42dd, 0x4302, 0x4351, 0x42e3, 0x4302, + 0x42db, 0x42db, 0x42db, 0x1078, 0x1286, 0x1078, 0x41d0, 0x1078, + 0x484d, 0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x42e9, 0x0c7f, + 0x007c, 0x2011, 0x31bc, 0x1078, 0x4153, 0x7828, 0xa092, 0x0002, + 0x00c8, 0x42f8, 0x8000, 0x782a, 0x1078, 0x31ec, 0x0078, 0x42e7, + 0x1078, 0x31bc, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, + 0x0078, 0x42e7, 0x1078, 0x41d0, 0x62c0, 0x82ff, 0x00c0, 0x4314, + 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1286, 0x2009, 0x0013, + 0x1078, 0x55c8, 0x0c7f, 0x007c, 0x3900, 0xa082, 0x71fa, 0x00c8, + 0x431b, 0x1078, 0x54cb, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1286, + 0x7804, 0xa086, 0x0004, 0x0040, 0x4396, 0x7828, 0xa092, 0x2710, + 0x00c8, 0x4331, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x4f37, 0x0078, + 0x4312, 0x6104, 0xa186, 0x0003, 0x00c0, 0x4348, 0x0e7e, 0x2071, + 0x6f00, 0x70b4, 0x0e7f, 0xd08c, 0x0040, 0x4348, 0x0c7e, 0x0e7e, + 0x2061, 0x0100, 0x2071, 0x6f00, 0x1078, 0x31f5, 0x0e7f, 0x0c7f, + 0x1078, 0x6e16, 0x2009, 0x0014, 0x1078, 0x55c8, 0x0c7f, 0x0078, + 0x4312, 0x2001, 0x70d2, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, + 0x4365, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1286, 0x2009, + 0x0013, 0x1078, 0x5615, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, + 0xa082, 0x71fa, 0x00c8, 0x436e, 0x1078, 0x54cb, 0x7824, 0xa005, + 0x1040, 0x1286, 0x781c, 0xa06d, 0x1040, 0x1286, 0x6800, 0xc0dc, + 0x6802, 0x7924, 0x2160, 0x1078, 0x55a1, 0x693c, 0x81ff, 0x1040, + 0x1286, 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x438a, 0x7a1e, + 0x0078, 0x438c, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, + 0x0d7f, 0x0c7f, 0x1078, 0x484d, 0x0078, 0x4363, 0x6104, 0xa186, + 0x0002, 0x0040, 0x43a1, 0xa186, 0x0004, 0x0040, 0x43a1, 0x0078, + 0x4325, 0x7808, 0xac06, 0x0040, 0x4325, 0x1078, 0x4754, 0x1078, + 0x4445, 0x0c7f, 0x1078, 0x484d, 0x0078, 0x4312, 0x0c7e, 0x6027, + 0x0002, 0x2011, 0x70d5, 0x2013, 0x0000, 0x62c8, 0x82ff, 0x00c0, + 0x43c8, 0x62c4, 0x82ff, 0x00c0, 0x43c8, 0x793c, 0xa1e5, 0x0000, + 0x0040, 0x43c6, 0x2009, 0x0049, 0x1078, 0x55c8, 0x0c7f, 0x007c, + 0x3908, 0xa192, 0x71fa, 0x00c8, 0x43cf, 0x1078, 0x54cb, 0x6017, + 0x0010, 0x793c, 0x81ff, 0x0040, 0x43c6, 0x7944, 0xa192, 0x2710, + 0x00c8, 0x43ee, 0x8108, 0x7946, 0x1078, 0x41d5, 0x793c, 0xa188, + 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x43ea, 0x6017, 0x0012, + 0x0078, 0x43c6, 0x6017, 0x0016, 0x0078, 0x43c6, 0x1078, 0x6e16, + 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, 0x55c8, 0x0078, 0x43c6, + 0x007e, 0x017e, 0x0c7e, 0x127e, 0x600f, 0x0000, 0x2c08, 0x2061, + 0x70b6, 0x2091, 0x8000, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, + 0x0040, 0x4413, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f, 0x0c7f, + 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x440e, 0x0d7e, + 0x2069, 0x70b6, 0x6000, 0xd0d4, 0x0040, 0x442c, 0x6820, 0x8000, + 0x6822, 0xa086, 0x0001, 0x00c0, 0x4427, 0x2c00, 0x681e, 0x6804, + 0xa084, 0x0007, 0x0079, 0x4855, 0xc0d5, 0x6002, 0x6818, 0xa005, + 0x0040, 0x443e, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00, 0x681a, + 0x0d7f, 0x685a, 0x2069, 0x70b6, 0x0078, 0x441e, 0x6056, 0x605a, + 0x2c00, 0x681a, 0x681e, 0x0078, 0x441e, 0x007e, 0x017e, 0x0c7e, + 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x70b6, + 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x4460, 0xa080, + 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, + 0x610e, 0x610a, 0x0078, 0x445b, 0x0c7e, 0x600f, 0x0000, 0x2c08, + 0x2061, 0x70b6, 0x6034, 0xa005, 0x0040, 0x4474, 0xa080, 0x0003, + 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078, 0x4472, + 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, + 0x2071, 0x70b6, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, + 0x0040, 0x44da, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, + 0x44d5, 0x703c, 0xac06, 0x00c0, 0x449a, 0x6003, 0x000a, 0x630a, + 0x0078, 0x44d5, 0x7038, 0xac36, 0x00c0, 0x44a0, 0x660c, 0x763a, + 0x7034, 0xac36, 0x00c0, 0x44ae, 0x2c00, 0xaf36, 0x0040, 0x44ac, + 0x2f00, 0x7036, 0x0078, 0x44ae, 0x7037, 0x0000, 0x660c, 0x067e, + 0x2c00, 0xaf06, 0x0040, 0x44b7, 0x7e0e, 0x0078, 0x44b8, 0x2678, + 0x600f, 0x0000, 0x1078, 0x61dc, 0x0040, 0x44d0, 0x6010, 0x2068, + 0x601c, 0xa086, 0x0003, 0x00c0, 0x44e3, 0x6837, 0x0103, 0x6b4a, + 0x6847, 0x0000, 0x1078, 0x639b, 0x1078, 0x36ec, 0x1078, 0x62f0, + 0x1078, 0x62fd, 0x0c7f, 0x0078, 0x4487, 0x2c78, 0x600c, 0x2060, + 0x0078, 0x4487, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, + 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x44c5, + 0x1078, 0x6d4c, 0x0078, 0x44d0, 0x007e, 0x067e, 0x0c7e, 0x0d7e, + 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, 0x2079, 0x70b6, + 0x7838, 0xa065, 0x0040, 0x4523, 0x600c, 0x007e, 0x600f, 0x0000, + 0x783c, 0xac06, 0x00c0, 0x450a, 0x6003, 0x000a, 0x630a, 0x2c30, + 0x0078, 0x4520, 0x1078, 0x61dc, 0x0040, 0x451e, 0x6010, 0x2068, + 0x601c, 0xa086, 0x0003, 0x00c0, 0x452c, 0x6837, 0x0103, 0x6b4a, + 0x6847, 0x0000, 0x1078, 0x36ec, 0x1078, 0x62f0, 0x1078, 0x62fd, + 0x007f, 0x0078, 0x44f9, 0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, + 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, + 0x4515, 0x1078, 0x6d4c, 0x0078, 0x451e, 0x027e, 0x1078, 0x4549, + 0x1078, 0x45e2, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079, 0x70b6, + 0x2091, 0x8000, 0x1078, 0x4679, 0x1078, 0x46e1, 0x127f, 0x0f7f, + 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, + 0x2091, 0x8000, 0x2071, 0x70b6, 0x7614, 0x2660, 0x2678, 0x8cff, + 0x0040, 0x45d1, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, + 0x45cc, 0x7024, 0xac06, 0x00c0, 0x458f, 0x2069, 0x0100, 0x68c0, + 0xa005, 0x0040, 0x458a, 0x1078, 0x4f45, 0x68c3, 0x0000, 0x1078, + 0x53d1, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, + 0x1000, 0x0040, 0x457f, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, + 0x0100, 0x6824, 0xd084, 0x0040, 0x4587, 0x6827, 0x0001, 0x037f, + 0x0078, 0x458f, 0x6003, 0x0009, 0x630a, 0x0078, 0x45cc, 0x7014, + 0xac36, 0x00c0, 0x4595, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, + 0x45a3, 0x2c00, 0xaf36, 0x0040, 0x45a1, 0x2f00, 0x7012, 0x0078, + 0x45a3, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, + 0x45ac, 0x7e0e, 0x0078, 0x45ad, 0x2678, 0x600f, 0x0000, 0x6010, + 0x2068, 0x1078, 0x61dc, 0x0040, 0x45c5, 0x601c, 0xa086, 0x0003, + 0x00c0, 0x45d9, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, + 0x639b, 0x1078, 0x36ec, 0x1078, 0x62f0, 0x1078, 0x62fd, 0x1078, + 0x52a1, 0x0c7f, 0x0078, 0x4557, 0x2c78, 0x600c, 0x2060, 0x0078, + 0x4557, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, + 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x45ba, 0x1078, 0x6d4c, + 0x0078, 0x45c5, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0xa280, + 0x7020, 0x2004, 0xa065, 0x0040, 0x4675, 0x0f7e, 0x0e7e, 0x0d7e, + 0x067e, 0x2071, 0x70b6, 0x6654, 0x7018, 0xac06, 0x00c0, 0x45f9, + 0x761a, 0x701c, 0xac06, 0x00c0, 0x4605, 0x86ff, 0x00c0, 0x4604, + 0x7018, 0x701e, 0x0078, 0x4605, 0x761e, 0x6058, 0xa07d, 0x0040, + 0x460a, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x4610, 0x2f00, 0x685a, + 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, + 0x1078, 0x3414, 0x0040, 0x4671, 0x7624, 0x86ff, 0x0040, 0x4661, + 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4661, 0x0d7e, 0x2069, + 0x0100, 0x68c0, 0xa005, 0x0040, 0x4658, 0x1078, 0x4f45, 0x68c3, + 0x0000, 0x1078, 0x53d1, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, + 0x6b04, 0xa384, 0x1000, 0x0040, 0x4641, 0x6803, 0x0100, 0x6803, + 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4649, 0x6827, + 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4652, + 0x8001, 0x603e, 0x2660, 0x1078, 0x62fd, 0x0c7f, 0x0078, 0x4661, + 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, + 0x4618, 0x8dff, 0x0040, 0x466d, 0x6837, 0x0103, 0x6b4a, 0x6847, + 0x0000, 0x1078, 0x639b, 0x1078, 0x36ec, 0x1078, 0x52a1, 0x0078, + 0x4618, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, + 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, + 0xa065, 0x0040, 0x46d1, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, + 0xac06, 0x00c0, 0x46b6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, + 0x46b0, 0x1078, 0x4f45, 0x68c3, 0x0000, 0x1078, 0x53d1, 0x7827, + 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, + 0x46a5, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, + 0xd084, 0x0040, 0x46ad, 0x6827, 0x0001, 0x037f, 0x0078, 0x46b6, + 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x46ce, 0x6010, 0x2068, + 0x1078, 0x61dc, 0x0040, 0x46ca, 0x601c, 0xa086, 0x0003, 0x00c0, + 0x46d8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36ec, + 0x1078, 0x62f0, 0x1078, 0x62fd, 0x1078, 0x52a1, 0x007f, 0x0078, + 0x4680, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, + 0x601c, 0xa086, 0x0006, 0x00c0, 0x46c1, 0x1078, 0x6d4c, 0x0078, + 0x46ca, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, + 0x474d, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, + 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x3414, 0x0040, 0x474a, 0x7e24, + 0x86ff, 0x0040, 0x473c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, + 0x473c, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4733, + 0x1078, 0x4f45, 0x68c3, 0x0000, 0x1078, 0x53d1, 0x7827, 0x0000, + 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x471c, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, - 0x0040, 0x4a8c, 0x6827, 0x0001, 0x037f, 0x0078, 0x4a95, 0x6003, - 0x0009, 0x630a, 0x2c30, 0x0078, 0x4aad, 0x6010, 0x2068, 0x1078, - 0x68e3, 0x0040, 0x4aa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4ab7, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3a2c, 0x1078, - 0x6a3f, 0x1078, 0x6a4c, 0x1078, 0x58b4, 0x007f, 0x0078, 0x4a5f, - 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x4aa0, 0x1078, 0x74a8, 0x0078, 0x4aa9, - 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, 0x4b2c, - 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, - 0xc0dc, 0x6002, 0x1078, 0x3754, 0x0040, 0x4b29, 0x7e24, 0x86ff, - 0x0040, 0x4b1b, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4b1b, - 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4b12, 0x1078, - 0x5534, 0x68c3, 0x0000, 0x1078, 0x59e4, 0x7827, 0x0000, 0x037e, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4afb, 0x6803, - 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, - 0x4b03, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, - 0x0040, 0x4b0c, 0x8001, 0x603e, 0x2660, 0x1078, 0x6a4c, 0x0c7f, - 0x0078, 0x4b1b, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, - 0x0c7f, 0x0078, 0x4ad2, 0x8dff, 0x0040, 0x4b25, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3a2c, 0x1078, 0x58b4, 0x0078, - 0x4ad2, 0x007f, 0x0078, 0x4ac5, 0x781e, 0x781a, 0x0d7f, 0x0c7f, - 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x7836, 0x7004, - 0xa084, 0x0007, 0x0079, 0x4b3c, 0x4b46, 0x4b49, 0x4b62, 0x4b7e, - 0x4bc3, 0x4b46, 0x4b46, 0x4b44, 0x1078, 0x12d5, 0x0c7f, 0x0e7f, - 0x007c, 0x7024, 0xa065, 0x0040, 0x4b57, 0x7020, 0x8001, 0x7022, - 0x600c, 0xa015, 0x0040, 0x4b5e, 0x7216, 0x600f, 0x0000, 0x7007, - 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, 0x7212, - 0x0078, 0x4b57, 0x6018, 0x2060, 0x1078, 0x3754, 0x6000, 0xc0dc, - 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x4b73, 0x6054, 0xa015, - 0x0040, 0x4b7a, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, - 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x4b73, 0x7024, 0xa065, - 0x0040, 0x4bc0, 0x700c, 0xac06, 0x00c0, 0x4b95, 0x1078, 0x58b4, - 0x600c, 0xa015, 0x0040, 0x4b91, 0x720e, 0x600f, 0x0000, 0x0078, - 0x4bbe, 0x720e, 0x720a, 0x0078, 0x4bbe, 0x7014, 0xac06, 0x00c0, - 0x4ba8, 0x1078, 0x58b4, 0x600c, 0xa015, 0x0040, 0x4ba4, 0x7216, - 0x600f, 0x0000, 0x0078, 0x4bbe, 0x7216, 0x7212, 0x0078, 0x4bbe, - 0x6018, 0x2060, 0x1078, 0x3754, 0x6000, 0xc0dc, 0x6002, 0x1078, - 0x58b4, 0x701c, 0xa065, 0x0040, 0x4bbe, 0x6054, 0xa015, 0x0040, - 0x4bbc, 0x721e, 0x0078, 0x4bbe, 0x7218, 0x721e, 0x7027, 0x0000, - 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4bd0, 0x1078, - 0x58b4, 0x600c, 0xa015, 0x0040, 0x4bd7, 0x720e, 0x600f, 0x0000, - 0x1078, 0x59e4, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, - 0x720a, 0x0078, 0x4bd0, 0x0d7e, 0x2069, 0x7836, 0x6830, 0xa084, - 0x0003, 0x0079, 0x4be3, 0x4be9, 0x4beb, 0x4c11, 0x4be9, 0x1078, - 0x12d5, 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, - 0x4c07, 0x683c, 0xa065, 0x0040, 0x4bfc, 0x600c, 0xa015, 0x0040, - 0x4c03, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, - 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078, 0x4bfc, 0x6843, - 0x0000, 0x6838, 0xa065, 0x0040, 0x4bfc, 0x6003, 0x0003, 0x0078, - 0x4bfc, 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, - 0x0040, 0x4c29, 0x600c, 0xa015, 0x0040, 0x4c25, 0x6a3a, 0x600f, - 0x0000, 0x683f, 0x0000, 0x0078, 0x4c29, 0x683f, 0x0000, 0x683a, - 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x7836, 0x6804, - 0xa084, 0x0007, 0x0079, 0x4c34, 0x4c3e, 0x4cdb, 0x4cdb, 0x4cdb, - 0x4cdb, 0x4cdd, 0x4cdb, 0x4c3c, 0x1078, 0x12d5, 0x6820, 0xa005, - 0x00c0, 0x4c44, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, - 0x4c53, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x4d23, - 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040, 0x4c61, 0x6807, - 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, 0x4d23, 0x0c7f, 0x0d7f, - 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x4cd6, - 0x704c, 0xa00d, 0x0040, 0x4c70, 0x7088, 0xa005, 0x0040, 0x4c88, - 0x7054, 0xa075, 0x0040, 0x4c79, 0xa20e, 0x0040, 0x4cd6, 0x0078, - 0x4c7e, 0x6818, 0xa20e, 0x0040, 0x4cd6, 0x2070, 0x704c, 0xa00d, - 0x0040, 0x4c70, 0x7088, 0xa005, 0x00c0, 0x4c70, 0x2e00, 0x681e, - 0x733c, 0x7038, 0xa302, 0x00c8, 0x4c70, 0x1078, 0x5b83, 0x0040, - 0x4cd6, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0015, - 0x2004, 0xa08a, 0x199a, 0x0048, 0x4c9f, 0x2001, 0x1999, 0x8003, - 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, - 0xd1bc, 0x0040, 0x4cb8, 0x7100, 0xd1f4, 0x0040, 0x4cb4, 0x7114, - 0xa18c, 0x00ff, 0x0078, 0x4cbd, 0x2009, 0x0000, 0x0078, 0x4cbd, - 0xa1e0, 0x2303, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, - 0x1078, 0x5174, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, - 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, - 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, - 0x0c7f, 0x0078, 0x4cd4, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, - 0x0040, 0x4ce9, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, - 0x4d23, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0x7836, - 0x6830, 0xa086, 0x0000, 0x00c0, 0x4d0a, 0x6838, 0xa07d, 0x0040, - 0x4d0a, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x127e, 0x0f7e, - 0x2091, 0x2200, 0x027f, 0x1078, 0x1a24, 0x00c0, 0x4d0d, 0x127f, - 0x1078, 0x5409, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843, 0x0000, - 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x4d1f, 0x6a3a, 0x780f, - 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x4d0a, 0x683a, - 0x6836, 0x0078, 0x4d19, 0x601c, 0xa084, 0x000f, 0x1079, 0x4d29, - 0x007c, 0x4d32, 0x4d37, 0x503e, 0x5134, 0x4d37, 0x503e, 0x5134, - 0x4d32, 0x4d37, 0x1078, 0x4b33, 0x1078, 0x4c2c, 0x007c, 0x157e, - 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0030, 0x10c8, - 0x12d5, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x4d54, 0x7900, - 0xd1f4, 0x0040, 0x4d50, 0x7914, 0xa18c, 0x00ff, 0x0078, 0x4d59, - 0x2009, 0x0000, 0x0078, 0x4d59, 0xa1f8, 0x2303, 0x2f0c, 0xa18c, - 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079, 0x4d65, 0x0f7f, - 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x4d97, 0x4dcf, 0x4de7, - 0x4e66, 0x4e93, 0x4e9b, 0x4ebc, 0x4ecd, 0x4ede, 0x4ee6, 0x4ef7, - 0x4ee6, 0x4f3f, 0x4ecd, 0x4f60, 0x4f68, 0x4ede, 0x4f68, 0x4f79, - 0x4d95, 0x4d95, 0x4d95, 0x4d95, 0x4d95, 0x4d95, 0x4d95, 0x4d95, - 0x4d95, 0x4d95, 0x4d95, 0x4d95, 0x55f2, 0x5607, 0x562a, 0x564e, - 0x4ebc, 0x4d95, 0x4ebc, 0x4ee6, 0x4d95, 0x4de7, 0x4e66, 0x4d95, - 0x5afe, 0x4ee6, 0x4d95, 0x5b21, 0x4ee6, 0x1078, 0x12d5, 0x20a1, - 0x020b, 0x1078, 0x4f8e, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, - 0x2069, 0x7651, 0x6804, 0xd084, 0x0040, 0x4db1, 0x6828, 0x20a3, - 0x0000, 0x017e, 0x1078, 0x206e, 0x21a2, 0x017f, 0x0d7f, 0x0078, - 0x4db6, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, - 0x2099, 0x7605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7601, 0x53a6, - 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5520, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x4f8e, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, - 0x7605, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x5520, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x4f8e, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, - 0x007e, 0x00c0, 0x4dfa, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, - 0x0078, 0x4dfc, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, - 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4e35, 0x2099, 0x7820, - 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304, 0xa084, 0x3fff, 0x20a2, - 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7605, 0x53a6, 0x20a9, - 0x0004, 0x2099, 0x7601, 0x53a6, 0x20a9, 0x0010, 0x20a3, 0x0000, - 0x00f0, 0x4e26, 0x2099, 0x7828, 0x33a6, 0x20a9, 0x0007, 0x20a3, - 0x0000, 0x00f0, 0x4e2f, 0x0078, 0x4e55, 0x2099, 0x7820, 0x20a9, - 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7605, 0x53a6, 0x20a9, - 0x0004, 0x2099, 0x7601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, - 0x00f0, 0x4e46, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4e4c, - 0x2099, 0x7828, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, - 0x0000, 0x00f0, 0x4e57, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, - 0x4e5d, 0x60c3, 0x0074, 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, - 0x1078, 0x4f8e, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, - 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x0f7e, 0x2079, 0x7651, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4e82, - 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4e87, 0xa085, 0x0010, 0xa085, - 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4f8e, 0x20a3, - 0x5000, 0x0078, 0x4dfc, 0x20a1, 0x020b, 0x1078, 0x4f8e, 0x20a3, - 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0014, 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5005, - 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0004, 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, 0x1078, - 0x5005, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, - 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, - 0x1078, 0x5005, 0x20a3, 0x0200, 0x0078, 0x4dfc, 0x20a1, 0x020b, - 0x1078, 0x5005, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, - 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5520, 0x007c, 0x0d7e, - 0x20a1, 0x020b, 0x1078, 0x5005, 0x20a3, 0x0210, 0x20a3, 0x0014, - 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, - 0x4f1d, 0x6998, 0xa184, 0xc000, 0x00c0, 0x4f19, 0xd1ec, 0x0040, - 0x4f15, 0x20a3, 0x2100, 0x0078, 0x4f1f, 0x20a3, 0x0100, 0x0078, - 0x4f1f, 0x20a3, 0x0400, 0x0078, 0x4f1f, 0x20a3, 0x0700, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7651, - 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4f2f, 0xa085, 0x0020, 0xd1a4, - 0x0040, 0x4f34, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, - 0x20a2, 0x60c3, 0x0014, 0x1078, 0x5520, 0x0d7f, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x5005, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, - 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x5520, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x5005, 0x20a3, 0x0200, 0x0078, 0x4d9d, - 0x20a1, 0x020b, 0x1078, 0x5005, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5520, - 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, - 0x5005, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, - 0x0000, 0x60c3, 0x0008, 0x1078, 0x5520, 0x007c, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, - 0x007e, 0x00c0, 0x4fa1, 0x20a3, 0x22ff, 0x20a3, 0xfffe, 0x0078, - 0x4fcf, 0xa286, 0x007f, 0x00c0, 0x4fac, 0x0d7e, 0x20a3, 0x22ff, - 0x20a3, 0xfffd, 0x0078, 0x4fc3, 0xd2bc, 0x0040, 0x4fcb, 0xa286, - 0x0080, 0x0d7e, 0x00c0, 0x4fba, 0x20a3, 0x22ff, 0x20a3, 0xfffc, - 0x0078, 0x4fc3, 0xa2e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x2200, - 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, - 0x0d7f, 0x0078, 0x4fd3, 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, - 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, - 0x550f, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x0d7e, - 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x20a3, 0x2029, - 0x20a3, 0x0000, 0x0078, 0x4fd7, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x007c, 0x027e, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, - 0x0048, 0x5024, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, - 0x2300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, - 0x2da6, 0x0d7f, 0x0078, 0x502c, 0x20a3, 0x2300, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198, 0x20a3, 0x0000, - 0x1078, 0x550f, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0c7e, 0x0f7e, - 0x6004, 0xa08a, 0x0085, 0x1048, 0x12d5, 0xa08a, 0x008c, 0x10c8, - 0x12d5, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x505c, 0x7900, - 0xd1f4, 0x0040, 0x5058, 0x7914, 0xa18c, 0x00ff, 0x0078, 0x5061, - 0x2009, 0x0000, 0x0078, 0x5061, 0xa1f8, 0x2303, 0x2f0c, 0xa18c, - 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x1079, - 0x506c, 0x0f7f, 0x0c7f, 0x007c, 0x5075, 0x5080, 0x509a, 0x5073, - 0x5073, 0x5073, 0x5075, 0x1078, 0x12d5, 0x147e, 0x20a1, 0x020b, - 0x1078, 0x50ad, 0x60c3, 0x0000, 0x1078, 0x5520, 0x147f, 0x007c, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x50da, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0xffff, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x5520, - 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5107, 0x20a3, - 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0004, 0x1078, 0x5520, 0x147f, 0x007c, 0x027e, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, - 0x0048, 0x50cc, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, - 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, - 0x2da6, 0x0d7f, 0x0078, 0x50d4, 0x20a3, 0x8100, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, - 0x0078, 0x4fd7, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, - 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x50f9, 0x0d7e, - 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, - 0x5101, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, - 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x5030, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa092, 0x007e, 0x0048, 0x5126, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, - 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x512e, 0x20a3, 0x8500, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, - 0x20a3, 0x0000, 0x0078, 0x5030, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, - 0xa08a, 0x0040, 0x1048, 0x12d5, 0xa08a, 0x0050, 0x10c8, 0x12d5, - 0x7918, 0x2160, 0x61a0, 0xd1bc, 0x0040, 0x5153, 0x6100, 0xd1f4, - 0x0040, 0x514f, 0x6114, 0xa18c, 0x00ff, 0x0078, 0x5158, 0x2009, - 0x0000, 0x0078, 0x5158, 0xa1e0, 0x2303, 0x2c0c, 0xa18c, 0x00ff, - 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x5162, 0x0f7f, - 0x0c7f, 0x007c, 0x5174, 0x525c, 0x5204, 0x5384, 0x5172, 0x5172, - 0x5172, 0x5172, 0x5172, 0x5172, 0x5172, 0x57cd, 0x57de, 0x57ef, - 0x5800, 0x5172, 0x1078, 0x12d5, 0x0d7e, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x51c7, 0x7910, 0x2168, 0x6944, 0xa18c, 0x00ff, - 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006, - 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x5191, 0x20a3, 0x0002, 0x0078, - 0x519d, 0xd1b4, 0x0040, 0x5198, 0x20a3, 0x0001, 0x0078, 0x519d, - 0x20a3, 0x0000, 0x2230, 0x0078, 0x519f, 0x6a80, 0x6e7c, 0x20a9, - 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0, - 0x51a3, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, - 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x7852, 0x2003, - 0x07d0, 0x2001, 0x7851, 0x2003, 0x0009, 0x2001, 0x7857, 0x2003, - 0x0002, 0x1078, 0x1504, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, - 0xd0bc, 0x0040, 0x51ed, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, - 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, - 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x51f5, 0x20a3, 0x0600, 0x6198, - 0x21a2, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3, - 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x5224, 0x7810, 0x2068, 0x6860, 0x20a2, - 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x5520, 0x147f, - 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x5242, - 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, - 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x0078, 0x524a, 0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, 0x0000, - 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x550f, - 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x534c, 0x7810, 0x2068, 0xa016, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0, - 0x5279, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x5281, 0x0078, - 0x527c, 0xa006, 0x1079, 0x5281, 0x147f, 0x137f, 0x157f, 0x0d7f, - 0x007c, 0x528b, 0x52ed, 0x52f1, 0x5314, 0x5321, 0x5333, 0x5337, - 0x5289, 0x1078, 0x12d5, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003, - 0xa186, 0x0000, 0x00c0, 0x529e, 0x6b78, 0x23a2, 0x6868, 0x20a2, - 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x5318, 0xa186, 0x0001, - 0x00c0, 0x52e8, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, - 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, - 0xa384, 0x0300, 0x0040, 0x52e7, 0xd3c4, 0x0040, 0x52b9, 0x687c, - 0xa108, 0xd3cc, 0x0040, 0x52be, 0x6874, 0xa108, 0x157e, 0x20a9, - 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, - 0x52c3, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, - 0x52e7, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, - 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, - 0x0898, 0x20a2, 0x1078, 0x550f, 0x22a2, 0x20a3, 0x0000, 0x61c2, - 0x037f, 0x017f, 0x1078, 0x5520, 0x007c, 0x20a3, 0x0008, 0x0078, - 0x5316, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, - 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, - 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, - 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, - 0x0032, 0x1078, 0x5520, 0x007c, 0x20a3, 0x0028, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, 0x5520, - 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, - 0x1078, 0x5520, 0x007c, 0x20a3, 0x0008, 0x0078, 0x5316, 0x037e, - 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, - 0x5345, 0x22a2, 0x037f, 0x0078, 0x5316, 0x20a3, 0x0800, 0x22a2, - 0x20a2, 0x037f, 0x0078, 0x5318, 0x027e, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x536a, - 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, - 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x0078, 0x5372, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, - 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x550f, + 0x0040, 0x4724, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, + 0xa005, 0x0040, 0x472d, 0x8001, 0x603e, 0x2660, 0x1078, 0x62fd, + 0x0c7f, 0x0078, 0x473c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, + 0x630a, 0x0c7f, 0x0078, 0x46f3, 0x8dff, 0x0040, 0x4746, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36ec, 0x1078, 0x52a1, + 0x0078, 0x46f3, 0x007f, 0x0078, 0x46e6, 0x781e, 0x781a, 0x0d7f, + 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x70b6, + 0x7004, 0xa084, 0x0007, 0x0079, 0x475d, 0x4767, 0x476a, 0x4783, + 0x479f, 0x47e4, 0x4767, 0x4767, 0x4765, 0x1078, 0x1286, 0x0c7f, + 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4778, 0x7020, 0x8001, + 0x7022, 0x600c, 0xa015, 0x0040, 0x477f, 0x7216, 0x600f, 0x0000, + 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, + 0x7212, 0x0078, 0x4778, 0x6018, 0x2060, 0x1078, 0x3414, 0x6000, + 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x4794, 0x6054, + 0xa015, 0x0040, 0x479b, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, + 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x4794, 0x7024, + 0xa065, 0x0040, 0x47e1, 0x700c, 0xac06, 0x00c0, 0x47b6, 0x1078, + 0x52a1, 0x600c, 0xa015, 0x0040, 0x47b2, 0x720e, 0x600f, 0x0000, + 0x0078, 0x47df, 0x720e, 0x720a, 0x0078, 0x47df, 0x7014, 0xac06, + 0x00c0, 0x47c9, 0x1078, 0x52a1, 0x600c, 0xa015, 0x0040, 0x47c5, + 0x7216, 0x600f, 0x0000, 0x0078, 0x47df, 0x7216, 0x7212, 0x0078, + 0x47df, 0x6018, 0x2060, 0x1078, 0x3414, 0x6000, 0xc0dc, 0x6002, + 0x1078, 0x52a1, 0x701c, 0xa065, 0x0040, 0x47df, 0x6054, 0xa015, + 0x0040, 0x47dd, 0x721e, 0x0078, 0x47df, 0x7218, 0x721e, 0x7027, + 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x47f1, + 0x1078, 0x52a1, 0x600c, 0xa015, 0x0040, 0x47f8, 0x720e, 0x600f, + 0x0000, 0x1078, 0x53d1, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, + 0x720e, 0x720a, 0x0078, 0x47f1, 0x0d7e, 0x2069, 0x70b6, 0x6830, + 0xa084, 0x0003, 0x0079, 0x4804, 0x480a, 0x480c, 0x4832, 0x480a, + 0x1078, 0x1286, 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, + 0x0040, 0x4828, 0x683c, 0xa065, 0x0040, 0x481d, 0x600c, 0xa015, + 0x0040, 0x4824, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, + 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078, 0x481d, + 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x481d, 0x6003, 0x0003, + 0x0078, 0x481d, 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, + 0xa065, 0x0040, 0x484a, 0x600c, 0xa015, 0x0040, 0x4846, 0x6a3a, + 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, 0x484a, 0x683f, 0x0000, + 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x70b6, + 0x6804, 0xa084, 0x0007, 0x0079, 0x4855, 0x485f, 0x48ec, 0x48ec, + 0x48ec, 0x48ec, 0x48ee, 0x48ec, 0x485d, 0x1078, 0x1286, 0x6820, + 0xa005, 0x00c0, 0x4865, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, + 0x0040, 0x4874, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, + 0x4934, 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040, 0x4882, + 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, 0x4934, 0x0c7f, + 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, + 0x48e7, 0x704c, 0xa00d, 0x0040, 0x4891, 0x7088, 0xa005, 0x0040, + 0x48a9, 0x7054, 0xa075, 0x0040, 0x489a, 0xa20e, 0x0040, 0x48e7, + 0x0078, 0x489f, 0x6818, 0xa20e, 0x0040, 0x48e7, 0x2070, 0x704c, + 0xa00d, 0x0040, 0x4891, 0x7088, 0xa005, 0x00c0, 0x4891, 0x2e00, + 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, 0x4891, 0x1078, 0x5570, + 0x0040, 0x48e7, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, + 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, 0x48c0, 0x2001, 0x1999, + 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, + 0x71a0, 0xa1e0, 0x21d3, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, + 0x619a, 0x1078, 0x4c4b, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, + 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, + 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, + 0x0e7f, 0x0c7f, 0x0078, 0x48e5, 0x0d7f, 0x007c, 0x0c7e, 0x680c, + 0xa065, 0x0040, 0x48fa, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, + 0x1078, 0x4934, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, + 0x70b6, 0x6830, 0xa086, 0x0000, 0x00c0, 0x491b, 0x6838, 0xa07d, + 0x0040, 0x491b, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x127e, + 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1999, 0x00c0, 0x491e, + 0x127f, 0x1078, 0x4e78, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843, + 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x4930, 0x6a3a, + 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x491b, + 0x683a, 0x6836, 0x0078, 0x492a, 0x601c, 0xa084, 0x0007, 0x1079, + 0x493a, 0x007c, 0x4942, 0x4944, 0x4b83, 0x4c1b, 0x4944, 0x4b83, + 0x4c1b, 0x4942, 0x1078, 0x1286, 0x157e, 0x137e, 0x147e, 0x0c7e, + 0x0f7e, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x1286, 0x6118, 0x2178, + 0x79a0, 0xa1f8, 0x21d3, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, + 0x0100, 0x619a, 0x1079, 0x4962, 0x0f7f, 0x0c7f, 0x147f, 0x137f, + 0x157f, 0x007c, 0x4994, 0x49cc, 0x49e4, 0x4a1d, 0x4a4a, 0x4a52, + 0x4a73, 0x4a84, 0x4a95, 0x4a9d, 0x4aae, 0x4a9d, 0x4af6, 0x4a84, + 0x4b17, 0x4b1f, 0x4a95, 0x4b1f, 0x4b30, 0x4992, 0x4992, 0x4992, + 0x4992, 0x4992, 0x4992, 0x4992, 0x4992, 0x4992, 0x4992, 0x4992, + 0x4992, 0x5018, 0x502d, 0x4992, 0x4992, 0x4992, 0x4992, 0x4a73, + 0x4a9d, 0x4992, 0x49e4, 0x4a1d, 0x4992, 0x54eb, 0x4a9d, 0x4992, + 0x550e, 0x4a9d, 0x1078, 0x1286, 0x20a1, 0x020b, 0x1078, 0x4b45, + 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x6f51, 0x6804, + 0xd084, 0x0040, 0x49ae, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, + 0x1fb7, 0x21a2, 0x017f, 0x0d7f, 0x0078, 0x49b3, 0x0d7f, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x6f05, 0x53a6, + 0x20a9, 0x0004, 0x2099, 0x6f01, 0x53a6, 0x20a3, 0x0000, 0x6030, + 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, + 0x001c, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b45, + 0x20a3, 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, + 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0x6f05, 0x53a6, 0x60c3, + 0x0010, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b45, + 0x20a3, 0x0300, 0x20a3, 0x0000, 0x2099, 0x70a0, 0x20a9, 0x0008, + 0x53a6, 0x20a9, 0x0004, 0x2099, 0x6f05, 0x53a6, 0x20a9, 0x0004, + 0x2099, 0x6f01, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, + 0x49fd, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4a03, 0x2099, + 0x70a8, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, + 0x00f0, 0x4a0e, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x4a14, + 0x60c3, 0x0074, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4b45, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, + 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, + 0x2079, 0x6f51, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4a39, 0xa085, + 0x0020, 0xd1a4, 0x0040, 0x4a3e, 0xa085, 0x0010, 0xa085, 0x0002, + 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, + 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b45, 0x20a3, 0x5000, + 0x0078, 0x49ea, 0x20a1, 0x020b, 0x1078, 0x4b45, 0x20a3, 0x2110, + 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, + 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b64, 0x20a3, + 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, + 0x0004, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4b64, + 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, + 0x60c3, 0x0008, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, 0x1078, + 0x4b64, 0x20a3, 0x0200, 0x0078, 0x49ea, 0x20a1, 0x020b, 0x1078, + 0x4b64, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, + 0x20a2, 0x60c3, 0x0008, 0x1078, 0x4f31, 0x007c, 0x0d7e, 0x20a1, + 0x020b, 0x1078, 0x4b64, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, + 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x4ad4, + 0x6998, 0xa184, 0xc000, 0x00c0, 0x4ad0, 0xd1ec, 0x0040, 0x4acc, + 0x20a3, 0x2100, 0x0078, 0x4ad6, 0x20a3, 0x0100, 0x0078, 0x4ad6, + 0x20a3, 0x0400, 0x0078, 0x4ad6, 0x20a3, 0x0700, 0xa006, 0x20a2, + 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x6f51, 0x7904, + 0x0f7f, 0xd1ac, 0x00c0, 0x4ae6, 0xa085, 0x0020, 0xd1a4, 0x0040, + 0x4aeb, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, + 0x60c3, 0x0014, 0x1078, 0x4f31, 0x0d7f, 0x007c, 0x20a1, 0x020b, + 0x1078, 0x4b64, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, + 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x4f31, 0x007c, 0x20a1, + 0x020b, 0x1078, 0x4b64, 0x20a3, 0x0200, 0x0078, 0x499a, 0x20a1, + 0x020b, 0x1078, 0x4b64, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, + 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x4f31, 0x007c, + 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, 0x4b64, + 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, + 0x60c3, 0x0008, 0x1078, 0x4f31, 0x007c, 0x027e, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, 0x4f20, + 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, + 0x4000, 0x20a3, 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, + 0x22a2, 0x20a3, 0x0198, 0x20a3, 0x0000, 0x1078, 0x4f20, 0x22a2, + 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x027f, 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, + 0x1048, 0x1286, 0xa08a, 0x008c, 0x10c8, 0x1286, 0x6118, 0x2178, + 0x79a0, 0xa1f8, 0x21d3, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, + 0x0100, 0x619a, 0xa082, 0x0085, 0x1079, 0x4ba1, 0x0f7f, 0x0c7f, + 0x007c, 0x4baa, 0x4bb5, 0x4bcf, 0x4ba8, 0x4ba8, 0x4ba8, 0x4baa, + 0x1078, 0x1286, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4be2, 0x60c3, + 0x0000, 0x1078, 0x4f31, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4bf5, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, + 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x000c, 0x1078, 0x4f31, 0x147f, 0x007c, 0x147e, + 0x20a1, 0x020b, 0x1078, 0x4c08, 0x20a3, 0x0003, 0x20a3, 0x0300, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x4f31, + 0x147f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, + 0x8100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, + 0x0009, 0x20a3, 0x0000, 0x0078, 0x4b56, 0x027e, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x4b75, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x8500, 0x6298, + 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, + 0x0000, 0x0078, 0x4b75, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, + 0x0040, 0x1048, 0x1286, 0xa08a, 0x0050, 0x10c8, 0x1286, 0x7918, + 0x2160, 0x61a0, 0xa1e0, 0x21d3, 0x2c0c, 0xa18c, 0x00ff, 0x2061, + 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x4c39, 0x0f7f, 0x0c7f, + 0x007c, 0x4c4b, 0x4cfd, 0x4cbe, 0x4e0c, 0x4c49, 0x4c49, 0x4c49, + 0x4c49, 0x4c49, 0x4c49, 0x4c49, 0x51ba, 0x51cb, 0x51dc, 0x51ed, + 0x4c49, 0x1078, 0x1286, 0x0d7e, 0x157e, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4c9e, 0x7910, 0x2168, 0x6944, 0xa18c, 0x00ff, 0x21a2, + 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006, 0x8004, + 0x20a2, 0xd1ac, 0x0040, 0x4c68, 0x20a3, 0x0002, 0x0078, 0x4c74, + 0xd1b4, 0x0040, 0x4c6f, 0x20a3, 0x0001, 0x0078, 0x4c74, 0x20a3, + 0x0000, 0x2230, 0x0078, 0x4c76, 0x6a80, 0x6e7c, 0x20a9, 0x0008, + 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0, 0x4c7a, + 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, + 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x70d2, 0x2003, 0x07d0, + 0x2001, 0x70d1, 0x2003, 0x0009, 0x2001, 0x70d7, 0x2003, 0x0002, + 0x1078, 0x14b5, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, + 0x00ff, 0x2202, 0x8217, 0xa006, 0x20a3, 0x0600, 0x6198, 0x21a2, + 0x20a2, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a2, 0x22a2, 0x20a2, + 0x2fa2, 0x20a3, 0xffff, 0x20a2, 0x20a2, 0x007c, 0x0d7e, 0x157e, + 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4cde, 0x7810, 0x2068, + 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, + 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, + 0x4f31, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, + 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, + 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, + 0x4f20, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, + 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, + 0x147e, 0x20a1, 0x020b, 0x1078, 0x4ded, 0x7810, 0x2068, 0xa016, + 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, + 0x00c0, 0x4d1a, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x4d22, + 0x0078, 0x4d1d, 0xa006, 0x1079, 0x4d22, 0x147f, 0x137f, 0x157f, + 0x0d7f, 0x007c, 0x4d2c, 0x4d8e, 0x4d92, 0x4db5, 0x4dc2, 0x4dd4, + 0x4dd8, 0x4d2a, 0x1078, 0x1286, 0x017e, 0x037e, 0x694c, 0xa18c, + 0x0003, 0xa186, 0x0000, 0x00c0, 0x4d3f, 0x6b78, 0x23a2, 0x6868, + 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x4db9, 0xa186, + 0x0001, 0x00c0, 0x4d89, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, + 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, + 0x0018, 0xa384, 0x0300, 0x0040, 0x4d88, 0xd3c4, 0x0040, 0x4d5a, + 0x687c, 0xa108, 0xd3cc, 0x0040, 0x4d5f, 0x6874, 0xa108, 0x157e, + 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, + 0x00f0, 0x4d64, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, + 0x0040, 0x4d88, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, + 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, + 0x20a3, 0x0898, 0x20a2, 0x1078, 0x4f20, 0x22a2, 0x20a3, 0x0000, + 0x61c2, 0x037f, 0x017f, 0x1078, 0x4f31, 0x007c, 0x20a3, 0x0008, + 0x0078, 0x4db7, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, + 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, + 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, + 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, + 0x60c3, 0x0032, 0x1078, 0x4f31, 0x007c, 0x20a3, 0x0028, 0x22a2, + 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, + 0x4f31, 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, + 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, + 0x0020, 0x1078, 0x4f31, 0x007c, 0x20a3, 0x0008, 0x0078, 0x4db7, + 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, + 0x00c0, 0x4de6, 0x22a2, 0x037f, 0x0078, 0x4db7, 0x20a3, 0x0800, + 0x22a2, 0x20a2, 0x037f, 0x0078, 0x4db9, 0x027e, 0x20e1, 0x9080, + 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, + 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x4f20, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, - 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x5397, - 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x539f, - 0x539f, 0x53a1, 0x539f, 0x539f, 0x539f, 0x53c6, 0x539f, 0x1078, - 0x12d5, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, - 0x020b, 0x2009, 0x0003, 0x1078, 0x53d0, 0x0d7e, 0x2069, 0x7651, - 0x6804, 0xd0bc, 0x0040, 0x53bb, 0x682c, 0xa084, 0x00ff, 0x8007, - 0x20a2, 0x0078, 0x53bd, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2, - 0x22a2, 0x60c3, 0x0001, 0x1078, 0x5520, 0x007c, 0x20a1, 0x020b, - 0x2009, 0x0003, 0x1078, 0x53d0, 0x20a3, 0x7f00, 0x0078, 0x53be, - 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, - 0x2004, 0xd0bc, 0x0040, 0x53ee, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, - 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x53f6, 0x20a3, 0x0100, - 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888, - 0xa18d, 0x0008, 0x21a2, 0x1078, 0x550f, 0x22a2, 0x20a3, 0x0000, - 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, - 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e, 0x037e, 0x2061, - 0x0100, 0x2071, 0x7600, 0x6130, 0x7818, 0x2068, 0x68a0, 0x2028, - 0xd0bc, 0x00c0, 0x5422, 0xa080, 0x2303, 0x2014, 0xa294, 0x00ff, - 0x0078, 0x5426, 0x6910, 0x6a14, 0x7364, 0x7468, 0x781c, 0xa086, - 0x0006, 0x0040, 0x547a, 0xd5bc, 0x0040, 0x5436, 0xa185, 0x0100, - 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x543c, 0x6063, 0x0100, - 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008, - 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, - 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, - 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, - 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, - 0x0080, 0x0048, 0x546e, 0x6a00, 0xd2f4, 0x0040, 0x546c, 0x6a14, - 0xa294, 0x00ff, 0x0078, 0x546e, 0x2011, 0x0000, 0x629e, 0x6017, - 0x0016, 0x1078, 0x45a2, 0x037f, 0x047f, 0x057f, 0x0c7f, 0x0d7f, - 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, - 0x0002, 0x0040, 0x54c9, 0xd5bc, 0x0040, 0x548e, 0xa185, 0x0100, - 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x5494, 0x6063, 0x0100, - 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008, - 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, - 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, - 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, - 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, - 0x54c4, 0x6a00, 0xd2f4, 0x0040, 0x54c2, 0x6a14, 0xa294, 0x00ff, - 0x0078, 0x54c4, 0x2011, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078, - 0x5471, 0xd5bc, 0x0040, 0x54d4, 0xa185, 0x0700, 0x20a2, 0x6266, - 0x636a, 0x646e, 0x0078, 0x54da, 0x6063, 0x0700, 0x6266, 0x606b, + 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x4e1f, + 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x4e27, + 0x4e27, 0x4e29, 0x4e27, 0x4e27, 0x4e27, 0x4e4e, 0x4e27, 0x1078, + 0x1286, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, + 0x020b, 0x2009, 0x0003, 0x1078, 0x4e58, 0x0d7e, 0x2069, 0x6f51, + 0x6804, 0xd0bc, 0x0040, 0x4e43, 0x682c, 0xa084, 0x00ff, 0x8007, + 0x20a2, 0x0078, 0x4e45, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2, + 0x22a2, 0x60c3, 0x0001, 0x1078, 0x4f31, 0x007c, 0x20a1, 0x020b, + 0x2009, 0x0003, 0x1078, 0x4e58, 0x20a3, 0x7f00, 0x0078, 0x4e46, + 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0100, 0x6298, + 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888, 0xa18d, + 0x0008, 0x21a2, 0x1078, 0x4f20, 0x22a2, 0x20a3, 0x0000, 0x7a08, + 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, + 0x0e7e, 0x0d7e, 0x0c7e, 0x2061, 0x0100, 0x2071, 0x6f00, 0x6130, + 0x7818, 0x2068, 0x68a0, 0xa080, 0x21d3, 0x2014, 0xa294, 0x00ff, + 0x781c, 0xa086, 0x0006, 0x0040, 0x4ebf, 0x6063, 0x0100, 0x6266, + 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, + 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, + 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, + 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, + 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, 0x6017, + 0x0016, 0x1078, 0x41d5, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, + 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x4ef4, + 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, + 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, + 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, + 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, + 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x629e, + 0x6017, 0x0012, 0x0078, 0x4eb9, 0x6063, 0x0700, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, - 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x550a, 0x6a00, - 0xd2f4, 0x0040, 0x5508, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x550a, - 0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x5471, 0x7a18, - 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, - 0x007c, 0x0d7e, 0x2069, 0x7836, 0x6843, 0x0001, 0x0d7f, 0x007c, - 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x552b, - 0x1078, 0x4592, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085, - 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100, - 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f, - 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x459d, 0x2061, - 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x557e, - 0x1078, 0x5534, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061, - 0x7836, 0x6128, 0xa192, 0x0002, 0x00c8, 0x556b, 0x8108, 0x612a, - 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x5579, 0x1078, 0x4592, 0x1078, - 0x552b, 0x0078, 0x5579, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x5576, - 0x1078, 0x7572, 0x2009, 0x0014, 0x1078, 0x5bdb, 0x0c7f, 0x0078, - 0x5579, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3535, - 0x0078, 0x5579, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, - 0x45ab, 0x2071, 0x7836, 0x713c, 0x81ff, 0x0040, 0x55ac, 0x2061, - 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x55b2, - 0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, - 0x571a, 0x037f, 0x713c, 0x2160, 0x1078, 0x7572, 0x2009, 0x004a, - 0x1078, 0x5bdb, 0x0078, 0x55ac, 0x027f, 0x017f, 0x0e7f, 0x0d7f, - 0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, 0x559c, 0x8108, - 0x7146, 0x1078, 0x45a2, 0x0078, 0x55ac, 0x0e7e, 0x0d7e, 0x0c7e, - 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, - 0x2068, 0x6ca0, 0x2071, 0x7836, 0x7018, 0x2068, 0x8dff, 0x0040, - 0x55e9, 0x68a0, 0xa406, 0x0040, 0x55d9, 0x6854, 0x2068, 0x0078, - 0x55ce, 0x6010, 0x2060, 0x643c, 0x6540, 0x6644, 0xa6b4, 0x000f, - 0x2d60, 0x1078, 0x38ab, 0x0040, 0x55e9, 0x1078, 0x58b4, 0xa085, - 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, - 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4f8e, - 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, - 0x60c3, 0x0008, 0x1078, 0x5520, 0x147f, 0x157f, 0x007c, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x5005, 0x20a3, 0x0200, 0x20a3, - 0x0000, 0x20a9, 0x0006, 0x2011, 0x7640, 0x2019, 0x7641, 0x23a6, - 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0, 0x5617, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5520, 0x147f, - 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, - 0x1078, 0x4fe5, 0x1078, 0x4ffc, 0x7810, 0x007e, 0xa080, 0x0015, - 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, - 0x8003, 0x60c2, 0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, - 0x5520, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x4f8e, 0x20a3, 0x6200, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5520, - 0x147f, 0x157f, 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x7836, 0x700c, 0x2060, 0x8cff, 0x0040, 0x567f, - 0x1078, 0x6a79, 0x00c0, 0x5676, 0x1078, 0x5e09, 0x600c, 0x007e, - 0x1078, 0x5bb4, 0x1078, 0x58b4, 0x0c7f, 0x0078, 0x566d, 0x700f, - 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, - 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, - 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, - 0x7836, 0x7024, 0x2060, 0x8cff, 0x0040, 0x56d8, 0x1078, 0x5534, - 0x68c3, 0x0000, 0x1078, 0x459d, 0x2009, 0x0013, 0x1078, 0x5bdb, - 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x56bb, 0x6827, 0x0004, - 0x7804, 0xa084, 0x4000, 0x0040, 0x56cd, 0x7803, 0x1000, 0x7803, - 0x0000, 0x0078, 0x56cd, 0xd084, 0x0040, 0x56c2, 0x6827, 0x0001, - 0x0078, 0x56c4, 0x00f0, 0x56aa, 0x7804, 0xa084, 0x1000, 0x0040, - 0x56cd, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, - 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, - 0x2001, 0x7600, 0x2004, 0xa096, 0x0001, 0x0040, 0x5710, 0xa096, - 0x0004, 0x0040, 0x5710, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, - 0x34fc, 0x1078, 0x4520, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, - 0x56fe, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5710, - 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5710, 0xd084, 0x0040, - 0x5705, 0x6827, 0x0001, 0x0078, 0x5707, 0x00f0, 0x56ed, 0x7804, - 0xa084, 0x1000, 0x0040, 0x5710, 0x7803, 0x0100, 0x7803, 0x0000, - 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, - 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, - 0x0140, 0x2071, 0x7836, 0x703c, 0x2060, 0x8cff, 0x0040, 0x5768, - 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x45ab, - 0x1078, 0x1bf1, 0xa39d, 0x0000, 0x00c0, 0x5742, 0x2009, 0x0049, - 0x1078, 0x5bdb, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x5755, - 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5767, 0x7803, - 0x1000, 0x7803, 0x0000, 0x0078, 0x5767, 0xd094, 0x0040, 0x575c, - 0x6827, 0x0002, 0x0078, 0x575e, 0x00f0, 0x5744, 0x7804, 0xa084, - 0x1000, 0x0040, 0x5767, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, - 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, - 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7836, - 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, - 0x2069, 0x7836, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, - 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x7836, 0x7614, 0x2660, - 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x57c6, 0x601c, 0xa206, - 0x00c0, 0x57c1, 0x7014, 0xac36, 0x00c0, 0x57a0, 0x660c, 0x7616, - 0x7010, 0xac36, 0x00c0, 0x57ae, 0x2c00, 0xaf36, 0x0040, 0x57ac, - 0x2f00, 0x7012, 0x0078, 0x57ae, 0x7013, 0x0000, 0x660c, 0x067e, - 0x2c00, 0xaf06, 0x0040, 0x57b7, 0x7e0e, 0x0078, 0x57b8, 0x2678, - 0x600f, 0x0000, 0x1078, 0x6a4c, 0x1078, 0x58b4, 0x0c7f, 0x0078, - 0x5793, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5793, 0x127f, 0x007f, - 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x51c7, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, - 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x580f, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x51c7, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x580f, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x51c7, 0x7810, 0x20a2, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x580f, - 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x51c7, 0x7810, 0x20a2, - 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, - 0x58bf, 0x60c3, 0x0020, 0x1078, 0x5520, 0x147f, 0x157f, 0x007c, - 0x127e, 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, - 0x00c0, 0x5827, 0xd1bc, 0x00c0, 0x5871, 0x0078, 0x58b1, 0x2009, - 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, - 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, - 0x5868, 0x6020, 0xd0b4, 0x0040, 0x5868, 0x6024, 0xd094, 0x00c0, - 0x5868, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x5868, - 0x00f0, 0x5834, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, - 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, - 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, - 0x00c0, 0x5867, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x585e, 0x027f, - 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, - 0x58b1, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, - 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, - 0x4000, 0x0040, 0x58aa, 0x6020, 0xd0bc, 0x0040, 0x58aa, 0x2104, - 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x58aa, 0x00f0, 0x587e, - 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, - 0xa10d, 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, - 0x6043, 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, - 0x58a4, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, - 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x7836, 0x7020, - 0xa005, 0x0040, 0x58bd, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, - 0x0008, 0x20a2, 0x00f0, 0x58c1, 0x20a2, 0x20a2, 0x007c, 0x0f7e, - 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x7836, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, - 0x87ff, 0x0040, 0x5957, 0x8cff, 0x0040, 0x5957, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x5952, 0x88ff, 0x0040, 0x58ee, 0x2800, 0xac06, - 0x00c0, 0x5952, 0x2039, 0x0000, 0x0078, 0x58f2, 0x6018, 0xa206, - 0x00c0, 0x5952, 0x7024, 0xac06, 0x00c0, 0x5920, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0040, 0x591b, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x1078, 0x59e4, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, - 0xa384, 0x1000, 0x0040, 0x5910, 0x6803, 0x0100, 0x6803, 0x0000, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5918, 0x6827, 0x0001, - 0x037f, 0x0078, 0x5920, 0x6003, 0x0009, 0x630a, 0x0078, 0x5952, - 0x7014, 0xac36, 0x00c0, 0x5926, 0x660c, 0x7616, 0x7010, 0xac36, - 0x00c0, 0x5934, 0x2c00, 0xaf36, 0x0040, 0x5932, 0x2f00, 0x7012, - 0x0078, 0x5934, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, - 0x0040, 0x593d, 0x7e0e, 0x0078, 0x593e, 0x2678, 0x600f, 0x0000, - 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, 0x5948, 0x1078, 0x74a8, - 0x1078, 0x6a4c, 0x1078, 0x58b4, 0x88ff, 0x00c0, 0x5961, 0x0c7f, - 0x0078, 0x58d8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x58d8, 0xa006, - 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5958, - 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x7836, 0x7638, 0x2660, 0x2678, 0x8cff, - 0x0040, 0x59d3, 0x601c, 0xa086, 0x0006, 0x00c0, 0x59ce, 0x88ff, - 0x0040, 0x5988, 0x2800, 0xac06, 0x00c0, 0x59ce, 0x0078, 0x598c, - 0x6018, 0xa206, 0x00c0, 0x59ce, 0x703c, 0xac06, 0x00c0, 0x599e, - 0x037e, 0x2019, 0x0001, 0x1078, 0x571a, 0x7033, 0x0000, 0x703f, - 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, - 0x00c0, 0x59a4, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x59b2, - 0x2c00, 0xaf36, 0x0040, 0x59b0, 0x2f00, 0x7036, 0x0078, 0x59b2, - 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x59bb, - 0x7e0e, 0x0078, 0x59bc, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, - 0x1078, 0x68e3, 0x0040, 0x59c6, 0x1078, 0x74a8, 0x1078, 0x6a4c, - 0x88ff, 0x00c0, 0x59dd, 0x0c7f, 0x0078, 0x5977, 0x2c78, 0x600c, - 0x2060, 0x0078, 0x5977, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, - 0xa8c5, 0x0001, 0x0078, 0x59d4, 0x0e7e, 0x2071, 0x7836, 0x2001, - 0x7600, 0x2004, 0xa086, 0x0002, 0x00c0, 0x59f2, 0x7007, 0x0005, - 0x0078, 0x59f4, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, + 0x95d5, 0x60d7, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x4eb9, + 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, + 0x8217, 0x007c, 0x0d7e, 0x2069, 0x70b6, 0x6843, 0x0001, 0x0d7f, + 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, + 0x4f3c, 0x1078, 0x41c5, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, + 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, + 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, + 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x41d0, + 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, + 0x4f9a, 0x1078, 0x4f45, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, + 0x2061, 0x70b6, 0x6128, 0xa192, 0x0002, 0x00c8, 0x4f87, 0x8108, + 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x4f95, 0x1078, 0x41c5, + 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x4f83, 0x6017, + 0x0012, 0x0078, 0x4f95, 0x1078, 0x4f3c, 0x0078, 0x4f95, 0x6124, + 0xa1e5, 0x0000, 0x0040, 0x4f92, 0x1078, 0x6e16, 0x2009, 0x0014, + 0x1078, 0x55c8, 0x0c7f, 0x0078, 0x4f95, 0x027f, 0x017f, 0x0d7f, + 0x0c7f, 0x007c, 0x1078, 0x31f5, 0x0078, 0x4f95, 0x0c7e, 0x0d7e, + 0x0e7e, 0x017e, 0x027e, 0x1078, 0x41de, 0x2071, 0x70b6, 0x713c, + 0x81ff, 0x0040, 0x4fd9, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, + 0x017e, 0x017f, 0xa194, 0x4000, 0x0040, 0x4fdf, 0x6017, 0x0010, + 0x7144, 0xa192, 0x0002, 0x00c8, 0x4fd1, 0x8108, 0x7146, 0x1078, + 0x41d5, 0x713c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, + 0x4fcd, 0x6017, 0x0012, 0x0078, 0x4fd9, 0x6017, 0x0016, 0x0078, + 0x4fd9, 0x1078, 0x6e16, 0x2009, 0x004a, 0x1078, 0x55c8, 0x0078, + 0x4fd9, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, + 0x41d5, 0x0078, 0x4fd9, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e, + 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, + 0x2071, 0x70b6, 0x7018, 0x2068, 0x8dff, 0x0040, 0x500f, 0x68a0, + 0xa406, 0x0040, 0x4fff, 0x6854, 0x2068, 0x0078, 0x4ff4, 0x6010, + 0x2060, 0x643c, 0x6540, 0x6644, 0xa6b4, 0x000f, 0x2d60, 0x1078, + 0x356b, 0x0040, 0x500f, 0x1078, 0x52a1, 0xa085, 0x0001, 0x127f, + 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, + 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4b45, 0x20a3, 0x0f00, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, + 0x1078, 0x4f31, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, + 0x020b, 0x1078, 0x4b64, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, + 0x0006, 0x2011, 0x6f40, 0x2019, 0x6f41, 0x23a6, 0x22a6, 0xa398, + 0x0002, 0xa290, 0x0002, 0x00f0, 0x503d, 0x20a3, 0x0000, 0x20a3, + 0x0000, 0x60c3, 0x001c, 0x1078, 0x4f31, 0x147f, 0x157f, 0x007c, + 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x70b6, + 0x700c, 0x2060, 0x8cff, 0x0040, 0x506c, 0x1078, 0x632a, 0x00c0, + 0x5063, 0x1078, 0x579c, 0x600c, 0x007e, 0x1078, 0x55a1, 0x1078, + 0x52a1, 0x0c7f, 0x0078, 0x505a, 0x700f, 0x0000, 0x700b, 0x0000, + 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, + 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, + 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x70b6, 0x7024, 0x2060, + 0x8cff, 0x0040, 0x50c5, 0x1078, 0x4f45, 0x68c3, 0x0000, 0x1078, + 0x41d0, 0x2009, 0x0013, 0x1078, 0x55c8, 0x20a9, 0x01f4, 0x6824, + 0xd094, 0x0040, 0x50a8, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, + 0x0040, 0x50ba, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x50ba, + 0xd084, 0x0040, 0x50af, 0x6827, 0x0001, 0x0078, 0x50b1, 0x00f0, + 0x5097, 0x7804, 0xa084, 0x1000, 0x0040, 0x50ba, 0x7803, 0x0100, + 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, + 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0x6f00, 0x2004, + 0xa096, 0x0001, 0x0040, 0x50fd, 0xa096, 0x0004, 0x0040, 0x50fd, + 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x31bc, 0x1078, 0x4153, + 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x50eb, 0x6827, 0x0004, + 0x7804, 0xa084, 0x4000, 0x0040, 0x50fd, 0x7803, 0x1000, 0x7803, + 0x0000, 0x0078, 0x50fd, 0xd084, 0x0040, 0x50f2, 0x6827, 0x0001, + 0x0078, 0x50f4, 0x00f0, 0x50da, 0x7804, 0xa084, 0x1000, 0x0040, + 0x50fd, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f, 0x027f, + 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x127e, + 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, + 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x70b6, + 0x703c, 0x2060, 0x8cff, 0x0040, 0x5155, 0x6817, 0x0010, 0x68cb, + 0x0000, 0x68c7, 0x0000, 0x1078, 0x41de, 0x1078, 0x1b66, 0xa39d, + 0x0000, 0x00c0, 0x512f, 0x2009, 0x0049, 0x1078, 0x55c8, 0x20a9, + 0x03e8, 0x6824, 0xd094, 0x0040, 0x5142, 0x6827, 0x0004, 0x7804, + 0xa084, 0x4000, 0x0040, 0x5154, 0x7803, 0x1000, 0x7803, 0x0000, + 0x0078, 0x5154, 0xd094, 0x0040, 0x5149, 0x6827, 0x0002, 0x0078, + 0x514b, 0x00f0, 0x5131, 0x7804, 0xa084, 0x1000, 0x0040, 0x5154, + 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, + 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x0d7e, + 0x127e, 0x2091, 0x8000, 0x2069, 0x70b6, 0x6a06, 0x127f, 0x0d7f, + 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x70b6, 0x6a32, + 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x007e, + 0x127e, 0x2071, 0x70b6, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, + 0x8cff, 0x0040, 0x51b3, 0x601c, 0xa206, 0x00c0, 0x51ae, 0x7014, + 0xac36, 0x00c0, 0x518d, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, + 0x519b, 0x2c00, 0xaf36, 0x0040, 0x5199, 0x2f00, 0x7012, 0x0078, + 0x519b, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, + 0x51a4, 0x7e0e, 0x0078, 0x51a5, 0x2678, 0x600f, 0x0000, 0x1078, + 0x62fd, 0x1078, 0x52a1, 0x0c7f, 0x0078, 0x5180, 0x2c78, 0x600c, + 0x2060, 0x0078, 0x5180, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0e7f, + 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4c9e, + 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, + 0x4000, 0x0078, 0x51fc, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, + 0x4c9e, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, + 0x20a3, 0x2000, 0x0078, 0x51fc, 0x157e, 0x147e, 0x20a1, 0x020b, + 0x1078, 0x4c9e, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, + 0x20a2, 0x20a3, 0x0400, 0x0078, 0x51fc, 0x157e, 0x147e, 0x20a1, + 0x020b, 0x1078, 0x4c9e, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, + 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x52ac, 0x60c3, 0x0020, + 0x1078, 0x4f31, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e, 0x2091, + 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x5214, 0xd1bc, + 0x00c0, 0x525e, 0x0078, 0x529e, 0x2009, 0x017f, 0x200b, 0x00a1, + 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, + 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x5255, 0x6020, 0xd0b4, + 0x0040, 0x5255, 0x6024, 0xd094, 0x00c0, 0x5255, 0x2104, 0xa084, + 0x000f, 0xa086, 0x0004, 0x00c0, 0x5255, 0x00f0, 0x5221, 0x027e, + 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, + 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001, 0x6043, + 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x5254, 0x6a04, + 0xa294, 0x4000, 0x00c0, 0x524b, 0x027f, 0x0d7f, 0x007f, 0x157f, + 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x529e, 0x2009, 0x017f, + 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, + 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x5297, + 0x6020, 0xd0bc, 0x0040, 0x5297, 0x2104, 0xa084, 0x000f, 0xa086, + 0x0004, 0x00c0, 0x5297, 0x00f0, 0x526b, 0x027e, 0x6164, 0xa18c, + 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, + 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, + 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x5291, 0x027f, 0x0d7f, + 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0c7f, 0x127f, + 0x007c, 0x0e7e, 0x2071, 0x70b6, 0x7020, 0xa005, 0x0040, 0x52aa, + 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2, 0x00f0, + 0x52ae, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, + 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x70b6, + 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040, 0x5344, + 0x8cff, 0x0040, 0x5344, 0x601c, 0xa086, 0x0006, 0x00c0, 0x533f, + 0x88ff, 0x0040, 0x52db, 0x2800, 0xac06, 0x00c0, 0x533f, 0x2039, + 0x0000, 0x0078, 0x52df, 0x6018, 0xa206, 0x00c0, 0x533f, 0x7024, + 0xac06, 0x00c0, 0x530d, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, + 0x5308, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x53d1, 0x7027, + 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, + 0x52fd, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, + 0xd084, 0x0040, 0x5305, 0x6827, 0x0001, 0x037f, 0x0078, 0x530d, + 0x6003, 0x0009, 0x630a, 0x0078, 0x533f, 0x7014, 0xac36, 0x00c0, + 0x5313, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x5321, 0x2c00, + 0xaf36, 0x0040, 0x531f, 0x2f00, 0x7012, 0x0078, 0x5321, 0x7013, + 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x532a, 0x7e0e, + 0x0078, 0x532b, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, + 0x61dc, 0x0040, 0x5335, 0x1078, 0x6d4c, 0x1078, 0x62fd, 0x1078, + 0x52a1, 0x88ff, 0x00c0, 0x534e, 0x0c7f, 0x0078, 0x52c5, 0x2c78, + 0x600c, 0x2060, 0x0078, 0x52c5, 0xa006, 0x127f, 0x007f, 0x067f, + 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, + 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5345, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x7836, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5a34, - 0x2200, 0xac06, 0x00c0, 0x5a2f, 0x7038, 0xac36, 0x00c0, 0x5a12, - 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5a20, 0x2c00, 0xaf36, - 0x0040, 0x5a1e, 0x2f00, 0x7036, 0x0078, 0x5a20, 0x7037, 0x0000, - 0x660c, 0x2c00, 0xaf06, 0x0040, 0x5a28, 0x7e0e, 0x0078, 0x5a29, - 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x5a34, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x5a05, 0x127f, 0x007f, 0x027f, 0x067f, - 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7836, 0x760c, - 0x2660, 0x2678, 0x8cff, 0x0040, 0x5acd, 0x6018, 0xa080, 0x0028, - 0x2004, 0xa206, 0x00c0, 0x5ac8, 0x7024, 0xac06, 0x00c0, 0x5a7b, - 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x5a7b, 0x1078, 0x5534, - 0x68c3, 0x0000, 0x1078, 0x59e4, 0x7027, 0x0000, 0x037e, 0x2069, - 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5a72, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5a7a, - 0x6827, 0x0001, 0x037f, 0x700c, 0xac36, 0x00c0, 0x5a81, 0x660c, - 0x760e, 0x7008, 0xac36, 0x00c0, 0x5a8f, 0x2c00, 0xaf36, 0x0040, - 0x5a8d, 0x2f00, 0x700a, 0x0078, 0x5a8f, 0x700b, 0x0000, 0x660c, - 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5a98, 0x7e0e, 0x0078, 0x5a99, - 0x2678, 0x600f, 0x0000, 0x1078, 0x6a65, 0x00c0, 0x5aa3, 0x1078, - 0x22b1, 0x0078, 0x5abf, 0x1078, 0x6a79, 0x00c0, 0x5aab, 0x1078, - 0x5e09, 0x0078, 0x5abf, 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, - 0x5abf, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5ad5, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x6003, - 0x0000, 0x1078, 0x6a4c, 0x1078, 0x58b4, 0x0c7f, 0x0078, 0x5a4a, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x5a4a, 0x127f, 0x007f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, - 0x00c0, 0x5ab6, 0x1078, 0x74a8, 0x0078, 0x5abf, 0x037e, 0x157e, - 0x137e, 0x147e, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, - 0x2123, 0x00c0, 0x5aef, 0x8210, 0x8000, 0x0078, 0x5ae6, 0xa005, - 0x0040, 0x5af9, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, - 0x53a3, 0x147f, 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, - 0x020b, 0x1078, 0x5005, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, - 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, - 0x4f47, 0x20a3, 0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, - 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x1078, 0x5520, 0x0d7f, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x5005, 0x20a3, 0x0210, 0x20a3, - 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0018, 0x1078, 0x5520, 0x007c, 0x2061, 0x7d00, - 0x2a70, 0x7060, 0x7046, 0x704b, 0x7d00, 0x007c, 0x0e7e, 0x127e, - 0x2071, 0x7600, 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, - 0x5b80, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5b6c, - 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5b68, 0x0078, 0x5b5b, - 0x2061, 0x7d00, 0x0078, 0x5b5b, 0x6003, 0x0008, 0x8529, 0x7546, - 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5b7c, 0x754a, 0xa085, - 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x7d00, 0x0078, 0x5b77, - 0xa006, 0x0078, 0x5b79, 0x0e7e, 0x2071, 0x7600, 0x7544, 0xa582, - 0x0001, 0x0048, 0x5bb1, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, - 0x0040, 0x5b9e, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5b9a, - 0x0078, 0x5b8d, 0x2061, 0x7d00, 0x0078, 0x5b8d, 0x6003, 0x0008, - 0x8529, 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5bad, - 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7d00, 0x0078, - 0x5ba9, 0xa006, 0x0078, 0x5bab, 0xac82, 0x7d00, 0x1048, 0x12d5, - 0x2001, 0x7615, 0x2004, 0xac02, 0x10c8, 0x12d5, 0xa006, 0x6006, - 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, - 0x0000, 0x2061, 0x7600, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, - 0x0040, 0x5bd3, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c2c, - 0x127f, 0x0078, 0x5bd2, 0x601c, 0xa084, 0x000f, 0x0079, 0x5be0, - 0x5be9, 0x5bf1, 0x5c0d, 0x5c29, 0x6af6, 0x6b12, 0x6b2e, 0x5be9, - 0x5bf1, 0xa18e, 0x0047, 0x00c0, 0x5bf0, 0xa016, 0x1078, 0x1572, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x5bfb, 0x067f, 0x007c, 0x5c0b, 0x5cf2, 0x5e24, 0x5c0b, 0x5e7b, - 0x5c0b, 0x5c0b, 0x5c0b, 0x5ca1, 0x6127, 0x5c0b, 0x5c0b, 0x5c0b, - 0x5c0b, 0x5c0b, 0x5c0b, 0x1078, 0x12d5, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x12d5, 0x1079, 0x5c17, 0x067f, 0x007c, 0x5c27, - 0x5c27, 0x5c27, 0x5c27, 0x5c27, 0x5c27, 0x5c27, 0x5c27, 0x6597, - 0x665d, 0x5c27, 0x65b0, 0x6609, 0x65b0, 0x6609, 0x5c27, 0x1078, - 0x12d5, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x5c33, 0x067f, 0x007c, 0x5c43, 0x6165, 0x620b, 0x62cd, 0x6421, - 0x5c43, 0x5c43, 0x5c43, 0x6143, 0x654c, 0x6550, 0x5c43, 0x5c43, - 0x5c43, 0x5c43, 0x6576, 0x1078, 0x12d5, 0x20a9, 0x000e, 0x2e98, - 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, - 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, - 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5c53, 0x0e7e, - 0x1078, 0x68e3, 0x0040, 0x5c6a, 0x6010, 0x2070, 0x7007, 0x0000, - 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5bb4, 0x007c, 0x0d7e, 0x037e, - 0x7330, 0xa386, 0x0200, 0x00c0, 0x5c7b, 0x6018, 0x2068, 0x6813, - 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x5c85, 0x2068, - 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x5bb4, 0x037f, - 0x0d7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, - 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x5c9e, 0x6018, 0x2068, 0x7038, + 0x70b6, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x53c0, 0x601c, + 0xa086, 0x0006, 0x00c0, 0x53bb, 0x88ff, 0x0040, 0x5375, 0x2800, + 0xac06, 0x00c0, 0x53bb, 0x0078, 0x5379, 0x6018, 0xa206, 0x00c0, + 0x53bb, 0x703c, 0xac06, 0x00c0, 0x538b, 0x037e, 0x2019, 0x0001, + 0x1078, 0x5107, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, + 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x5391, 0x660c, + 0x763a, 0x7034, 0xac36, 0x00c0, 0x539f, 0x2c00, 0xaf36, 0x0040, + 0x539d, 0x2f00, 0x7036, 0x0078, 0x539f, 0x7037, 0x0000, 0x660c, + 0x067e, 0x2c00, 0xaf06, 0x0040, 0x53a8, 0x7e0e, 0x0078, 0x53a9, + 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, + 0x53b3, 0x1078, 0x6d4c, 0x1078, 0x62fd, 0x88ff, 0x00c0, 0x53ca, + 0x0c7f, 0x0078, 0x5364, 0x2c78, 0x600c, 0x2060, 0x0078, 0x5364, + 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, + 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, + 0x53c1, 0x0e7e, 0x2071, 0x70b6, 0x2001, 0x6f00, 0x2004, 0xa086, + 0x0002, 0x00c0, 0x53df, 0x7007, 0x0005, 0x0078, 0x53e1, 0x7007, + 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, + 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x70b6, 0x2c10, 0x7638, + 0x2660, 0x2678, 0x8cff, 0x0040, 0x5421, 0x2200, 0xac06, 0x00c0, + 0x541c, 0x7038, 0xac36, 0x00c0, 0x53ff, 0x660c, 0x763a, 0x7034, + 0xac36, 0x00c0, 0x540d, 0x2c00, 0xaf36, 0x0040, 0x540b, 0x2f00, + 0x7036, 0x0078, 0x540d, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, + 0x0040, 0x5415, 0x7e0e, 0x0078, 0x5416, 0x2678, 0x600f, 0x0000, + 0xa085, 0x0001, 0x0078, 0x5421, 0x2c78, 0x600c, 0x2060, 0x0078, + 0x53f2, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, + 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, + 0x2091, 0x8000, 0x2071, 0x70b6, 0x760c, 0x2660, 0x2678, 0x8cff, + 0x0040, 0x54ba, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, + 0x54b5, 0x7024, 0xac06, 0x00c0, 0x5468, 0x2069, 0x0100, 0x68c0, + 0xa005, 0x0040, 0x5468, 0x1078, 0x4f45, 0x68c3, 0x0000, 0x1078, + 0x53d1, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, + 0x1000, 0x0040, 0x545f, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, + 0x0100, 0x6824, 0xd084, 0x0040, 0x5467, 0x6827, 0x0001, 0x037f, + 0x700c, 0xac36, 0x00c0, 0x546e, 0x660c, 0x760e, 0x7008, 0xac36, + 0x00c0, 0x547c, 0x2c00, 0xaf36, 0x0040, 0x547a, 0x2f00, 0x700a, + 0x0078, 0x547c, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, + 0x0040, 0x5485, 0x7e0e, 0x0078, 0x5486, 0x2678, 0x600f, 0x0000, + 0x1078, 0x6316, 0x00c0, 0x5490, 0x1078, 0x2192, 0x0078, 0x54ac, + 0x1078, 0x632a, 0x00c0, 0x5498, 0x1078, 0x579c, 0x0078, 0x54ac, + 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x54ac, 0x601c, 0xa086, + 0x0003, 0x00c0, 0x54c2, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, + 0x1078, 0x36ec, 0x1078, 0x62f0, 0x6003, 0x0000, 0x1078, 0x62fd, + 0x1078, 0x52a1, 0x0c7f, 0x0078, 0x5437, 0x2c78, 0x600c, 0x2060, + 0x0078, 0x5437, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, + 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x54a3, 0x1078, + 0x6d4c, 0x0078, 0x54ac, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, + 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x206c, 0x00c0, 0x54dc, + 0x8210, 0x8000, 0x0078, 0x54d3, 0xa005, 0x0040, 0x54e6, 0x20a9, + 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x147f, 0x137f, + 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x4b64, + 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, 0x4f47, 0x20a3, 0x4943, + 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x1078, 0x4f31, 0x0d7f, 0x007c, 0x20a1, 0x020b, + 0x1078, 0x4b64, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3, 0x0800, + 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, + 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084, + 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, + 0x1078, 0x4f31, 0x007c, 0x2061, 0x7500, 0x2a70, 0x7060, 0x7046, + 0x704b, 0x7500, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x6f00, 0x2091, + 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x556d, 0x7048, 0x2060, + 0x6000, 0xa086, 0x0000, 0x0040, 0x5559, 0xace0, 0x0008, 0x7054, + 0xac02, 0x00c8, 0x5555, 0x0078, 0x5548, 0x2061, 0x7500, 0x0078, + 0x5548, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008, 0x7054, + 0xa502, 0x00c8, 0x5569, 0x754a, 0xa085, 0x0001, 0x127f, 0x0e7f, + 0x007c, 0x704b, 0x7500, 0x0078, 0x5564, 0xa006, 0x0078, 0x5566, + 0x0e7e, 0x2071, 0x6f00, 0x7544, 0xa582, 0x0001, 0x0048, 0x559e, + 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x558b, 0xace0, + 0x0008, 0x7054, 0xac02, 0x00c8, 0x5587, 0x0078, 0x557a, 0x2061, + 0x7500, 0x0078, 0x557a, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, + 0x0008, 0x7054, 0xa502, 0x00c8, 0x559a, 0x754a, 0xa085, 0x0001, + 0x0e7f, 0x007c, 0x704b, 0x7500, 0x0078, 0x5596, 0xa006, 0x0078, + 0x5598, 0xac82, 0x7500, 0x1048, 0x1286, 0x2001, 0x6f15, 0x2004, + 0xac02, 0x10c8, 0x1286, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, + 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x2061, 0x6f00, + 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x55c0, 0x007c, + 0x127e, 0x2091, 0x8000, 0x1078, 0x484d, 0x127f, 0x0078, 0x55bf, + 0x601c, 0xa084, 0x0007, 0x0079, 0x55cd, 0x55d5, 0x55dd, 0x55f9, + 0x5615, 0x63a7, 0x63c3, 0x63df, 0x55d5, 0xa18e, 0x0047, 0x00c0, + 0x55dc, 0xa016, 0x1078, 0x1523, 0x007c, 0x067e, 0x6000, 0xa0b2, + 0x0010, 0x10c8, 0x1286, 0x1079, 0x55e7, 0x067f, 0x007c, 0x55f7, + 0x56c2, 0x57ab, 0x55f7, 0x55f7, 0x55f7, 0x55f7, 0x55f7, 0x5671, + 0x5a2d, 0x55f7, 0x55f7, 0x55f7, 0x55f7, 0x55f7, 0x55f7, 0x1078, + 0x1286, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1286, 0x1079, + 0x5603, 0x067f, 0x007c, 0x5613, 0x5613, 0x5613, 0x5613, 0x5613, + 0x5613, 0x5613, 0x5613, 0x5e9d, 0x5f63, 0x5613, 0x5eb6, 0x5f0f, + 0x5eb6, 0x5f0f, 0x5613, 0x1078, 0x1286, 0x067e, 0x6000, 0xa0b2, + 0x0010, 0x10c8, 0x1286, 0x1079, 0x561f, 0x067f, 0x007c, 0x562f, + 0x5a6b, 0x5b11, 0x5bd3, 0x5d27, 0x562f, 0x562f, 0x562f, 0x5a49, + 0x5e52, 0x5e56, 0x562f, 0x562f, 0x562f, 0x562f, 0x5e7c, 0x1078, + 0x1286, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, + 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, + 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, + 0x0002, 0x00f0, 0x563f, 0x0e7e, 0x1078, 0x61dc, 0x0040, 0x5656, + 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, + 0x55a1, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, + 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x566e, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, - 0x5c5f, 0x2100, 0xa1b2, 0x0030, 0x10c8, 0x12d5, 0x0079, 0x5ca8, - 0x5cda, 0x5ce6, 0x5cda, 0x5cda, 0x5cda, 0x5cda, 0x5cd8, 0x5cd8, - 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, - 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, - 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cda, - 0x5cd8, 0x5cda, 0x5cda, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, - 0x5cda, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, 0x5cd8, - 0x1078, 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, 0x4824, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4c2c, 0x127f, 0x007c, 0x6003, 0x0001, - 0x6106, 0x1078, 0x4824, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c2c, - 0x127f, 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12d5, 0xa1b6, - 0x0013, 0x00c0, 0x5cfe, 0x2008, 0x0079, 0x5d87, 0xa1b6, 0x0027, - 0x00c0, 0x5d54, 0x1078, 0x4b33, 0x6004, 0x1078, 0x6a65, 0x0040, - 0x5d17, 0x1078, 0x6a79, 0x0040, 0x5d4c, 0xa08e, 0x0021, 0x0040, - 0x5d50, 0xa08e, 0x0022, 0x0040, 0x5d4c, 0x0078, 0x5d47, 0x1078, - 0x22b1, 0x2001, 0x0007, 0x1078, 0x3783, 0x6018, 0xa080, 0x0028, - 0x200c, 0x1078, 0x5e09, 0xa186, 0x007e, 0x00c0, 0x5d2d, 0x2001, - 0x762f, 0x2014, 0xa295, 0x0001, 0x2202, 0x017e, 0x027e, 0x037e, - 0x2110, 0x2019, 0x0028, 0x1078, 0x4914, 0x1078, 0x4857, 0x0c7e, - 0x6018, 0xa065, 0x0040, 0x5d3e, 0x1078, 0x3958, 0x0c7f, 0x2c08, - 0x1078, 0x7326, 0x037f, 0x027f, 0x017f, 0x1078, 0x37bf, 0x1078, - 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x1078, 0x5e09, 0x0078, 0x5d47, - 0x1078, 0x5e18, 0x0078, 0x5d47, 0xa186, 0x0014, 0x00c0, 0x5d4b, - 0x1078, 0x4b33, 0x1078, 0x228f, 0x1078, 0x6a65, 0x00c0, 0x5d74, - 0x1078, 0x22b1, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x5e09, - 0xa186, 0x007e, 0x00c0, 0x5d72, 0x2001, 0x762f, 0x200c, 0xa18d, - 0x0001, 0x2102, 0x0078, 0x5d47, 0x1078, 0x6a79, 0x00c0, 0x5d7c, - 0x1078, 0x5e09, 0x0078, 0x5d47, 0x6004, 0xa08e, 0x0021, 0x0040, - 0x5d78, 0xa08e, 0x0022, 0x1040, 0x5e18, 0x0078, 0x5d47, 0x5db9, - 0x5dbb, 0x5dbf, 0x5dc3, 0x5dc7, 0x5dcb, 0x5db7, 0x5db7, 0x5db7, - 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, - 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, - 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5dcf, 0x5dd5, 0x5db7, - 0x5ddf, 0x5dd5, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5dd5, - 0x5dd5, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x5db7, 0x1078, - 0x12d5, 0x0078, 0x5dd5, 0x2001, 0x000b, 0x0078, 0x5de8, 0x2001, - 0x0003, 0x0078, 0x5de8, 0x2001, 0x0005, 0x0078, 0x5de8, 0x2001, - 0x0001, 0x0078, 0x5de8, 0x2001, 0x0009, 0x0078, 0x5de8, 0x1078, - 0x12d5, 0x0078, 0x5de7, 0x1078, 0x3783, 0x1078, 0x4b33, 0x6003, - 0x0002, 0x6017, 0x0028, 0x1078, 0x4c2c, 0x0078, 0x5de7, 0x1078, - 0x4b33, 0x6003, 0x0004, 0x6017, 0x0028, 0x1078, 0x4c2c, 0x007c, - 0x1078, 0x3783, 0x1078, 0x4b33, 0x6003, 0x0002, 0x037e, 0x2019, - 0x765c, 0x2304, 0xa084, 0xff00, 0x00c0, 0x5dfa, 0x2019, 0x0028, - 0x0078, 0x5e03, 0x8007, 0xa09a, 0x0004, 0x0048, 0x5df6, 0x8003, - 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x1078, 0x4c2c, 0x0078, - 0x5de7, 0x0e7e, 0x1078, 0x68e3, 0x0040, 0x5e16, 0x6010, 0x2070, - 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f, 0x007c, - 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, - 0x7023, 0x8001, 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, - 0xa084, 0x00ff, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12d5, 0x6604, - 0xa6b6, 0x0028, 0x00c0, 0x5e38, 0x1078, 0x6aae, 0x0078, 0x5e6a, - 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x5e41, 0x1078, 0x6ac8, 0x0078, - 0x5e6a, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x5e4a, 0x1078, 0x5c45, - 0x0078, 0x5e6a, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x5e53, 0x1078, - 0x5c8a, 0x0078, 0x5e6a, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x5e5c, - 0x1078, 0x5c6e, 0x0078, 0x5e6a, 0xa1b6, 0x0015, 0x00c0, 0x5e64, - 0x1079, 0x5e6f, 0x0078, 0x5e6a, 0xa1b6, 0x0016, 0x00c0, 0x5e6b, - 0x1079, 0x5fac, 0x007c, 0x1078, 0x5be9, 0x0078, 0x5e6a, 0x5e93, - 0x5e96, 0x5e93, 0x5ed7, 0x5e93, 0x5f48, 0x5e93, 0x5e93, 0x5e93, - 0x5f84, 0x5e93, 0x5f9a, 0xa1b6, 0x0048, 0x0040, 0x5e87, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1572, 0x007c, 0x0e7e, - 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x0e7f, - 0x1078, 0x5bb4, 0x007c, 0x0005, 0x0005, 0x007c, 0x0e7e, 0x2071, - 0x7600, 0x7078, 0xa086, 0x0074, 0x00c0, 0x5ec0, 0x1078, 0x72fa, - 0x00c0, 0x5eb2, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x5ec4, 0x0d7f, - 0x2001, 0x0006, 0x1078, 0x3783, 0x1078, 0x22b1, 0x1078, 0x5bb4, - 0x0078, 0x5ec2, 0x2001, 0x000a, 0x1078, 0x3783, 0x1078, 0x22b1, - 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4824, 0x0078, 0x5ec2, - 0x1078, 0x5f38, 0x0e7f, 0x007c, 0x6800, 0xd084, 0x0040, 0x5ed6, - 0x2001, 0x0000, 0x1078, 0x376f, 0x2069, 0x7651, 0x6804, 0xd0a4, - 0x0040, 0x5ed6, 0x2001, 0x0006, 0x1078, 0x3791, 0x007c, 0x0d7e, - 0x2011, 0x761e, 0x2204, 0xa086, 0x0074, 0x00c0, 0x5f34, 0x1078, - 0x6079, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, - 0x0040, 0x5eff, 0xa286, 0x0080, 0x00c0, 0x5f28, 0x6813, 0x00ff, - 0x6817, 0xfffc, 0x6010, 0xa005, 0x0040, 0x5f1e, 0x2068, 0x6807, - 0x0000, 0x6837, 0x0103, 0x6833, 0x0200, 0x0078, 0x5f1e, 0x0e7e, - 0x0f7e, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x762f, 0x2e04, - 0xa085, 0x0003, 0x2072, 0x2071, 0x7b80, 0x2079, 0x0100, 0x2e04, - 0xa084, 0x00ff, 0x2069, 0x7619, 0x206a, 0x78e6, 0x8e70, 0x2e04, - 0x2069, 0x761a, 0x206a, 0x78ea, 0x0f7f, 0x0e7f, 0x2001, 0x0006, - 0x1078, 0x3783, 0x1078, 0x22b1, 0x1078, 0x5bb4, 0x0078, 0x5f36, - 0x2001, 0x0004, 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, 0x0003, - 0x1078, 0x4824, 0x0078, 0x5f36, 0x1078, 0x5f38, 0x0d7f, 0x007c, - 0x2001, 0x7600, 0x2004, 0xa086, 0x0003, 0x0040, 0x5f43, 0x2001, - 0x0007, 0x1078, 0x3783, 0x1078, 0x22b1, 0x1078, 0x5bb4, 0x007c, - 0x0e7e, 0x2071, 0x7600, 0x7078, 0xa086, 0x0014, 0x00c0, 0x5f7e, - 0x7000, 0xa086, 0x0003, 0x00c0, 0x5f5b, 0x6010, 0xa005, 0x00c0, - 0x5f5b, 0x1078, 0x2d80, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3853, - 0x1078, 0x5ec4, 0x0d7f, 0x1078, 0x6083, 0x00c0, 0x5f7e, 0x2001, - 0x0006, 0x1078, 0x3783, 0x0e7e, 0x6010, 0xa005, 0x0040, 0x5f77, - 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x0e7f, - 0x1078, 0x22b1, 0x1078, 0x5bb4, 0x0078, 0x5f82, 0x1078, 0x5e09, - 0x1078, 0x5f38, 0x0e7f, 0x007c, 0x2011, 0x761e, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x5f97, 0x2001, 0x0002, 0x1078, 0x3783, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x4824, 0x0078, 0x5f99, 0x1078, - 0x5f38, 0x007c, 0x2011, 0x761e, 0x2204, 0xa086, 0x0004, 0x00c0, - 0x5fa9, 0x2001, 0x0007, 0x1078, 0x3783, 0x1078, 0x5bb4, 0x0078, - 0x5fab, 0x1078, 0x5f38, 0x007c, 0x5e93, 0x5fb8, 0x5e93, 0x5fde, - 0x5e93, 0x602c, 0x5e93, 0x5e93, 0x5e93, 0x6041, 0x5e93, 0x6054, - 0x0c7e, 0x1078, 0x6067, 0x00c0, 0x5fcd, 0x2001, 0x0000, 0x1078, - 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x4824, 0x0078, 0x5fdc, 0x2009, 0x7b8f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x5fda, 0x1078, 0x5bb4, - 0x0078, 0x5fdc, 0x1078, 0x5f38, 0x0c7f, 0x007c, 0x1078, 0x6076, - 0x00c0, 0x5ff2, 0x2001, 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, - 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4824, - 0x0078, 0x6014, 0x1078, 0x5e09, 0x2009, 0x7b8e, 0x2134, 0xa6b4, - 0x00ff, 0xa686, 0x0005, 0x0040, 0x6015, 0x2009, 0x7b8f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x6012, 0xa686, 0x0009, - 0x0040, 0x6015, 0x2001, 0x0004, 0x1078, 0x3783, 0x1078, 0x5bb4, - 0x0078, 0x6014, 0x1078, 0x5f38, 0x007c, 0x0d7e, 0x6018, 0x2068, - 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6027, 0x8001, 0x6842, - 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6014, 0x1078, - 0x228f, 0x0d7f, 0x0078, 0x6012, 0x1078, 0x6076, 0x00c0, 0x603c, - 0x2001, 0x0004, 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, 0x0003, - 0x1078, 0x4824, 0x0078, 0x6040, 0x1078, 0x5e09, 0x1078, 0x5f38, - 0x007c, 0x1078, 0x6076, 0x00c0, 0x6051, 0x2001, 0x0008, 0x1078, - 0x3783, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x4824, 0x0078, - 0x6053, 0x1078, 0x5f38, 0x007c, 0x1078, 0x6076, 0x00c0, 0x6064, - 0x2001, 0x000a, 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, 0x0001, - 0x1078, 0x4824, 0x0078, 0x6066, 0x1078, 0x5f38, 0x007c, 0x2009, - 0x7b8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x6075, 0x2009, 0x7b8f, - 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, - 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x37e9, - 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7b8c, 0x7004, 0xa086, - 0x0014, 0x00c0, 0x60a6, 0x7008, 0xa086, 0x0800, 0x00c0, 0x60a6, - 0x700c, 0xd0ec, 0x0040, 0x60a4, 0xa084, 0x0f00, 0xa086, 0x0100, - 0x00c0, 0x60a4, 0x7024, 0xd0a4, 0x0040, 0x60a4, 0xd08c, 0x0040, - 0x60a4, 0xa006, 0x0078, 0x60a6, 0xa085, 0x0001, 0x0e7f, 0x007c, - 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x2029, 0x783f, 0x252c, 0x2021, 0x7845, - 0x2424, 0x2061, 0x7d00, 0x2071, 0x7600, 0x7244, 0x7060, 0xa202, - 0x00c8, 0x60fd, 0x1078, 0x7504, 0x0040, 0x60f5, 0x671c, 0xa786, - 0x0001, 0x0040, 0x60f5, 0xa786, 0x0007, 0x0040, 0x60f5, 0x2500, - 0xac06, 0x0040, 0x60f5, 0x2400, 0xac06, 0x0040, 0x60f5, 0x0c7e, - 0x6000, 0xa086, 0x0004, 0x00c0, 0x60df, 0x1078, 0x1676, 0x6010, - 0x2068, 0x1078, 0x68e3, 0x0040, 0x60f2, 0xa786, 0x0003, 0x00c0, - 0x6107, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3a2c, - 0x1078, 0x6a3f, 0x1078, 0x6a4c, 0x0c7f, 0xace0, 0x0008, 0x7054, - 0xac02, 0x00c8, 0x60fd, 0x0078, 0x60bd, 0x127f, 0x007f, 0x027f, - 0x047f, 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, - 0x0006, 0x00c0, 0x60e9, 0x1078, 0x74a8, 0x0078, 0x60f2, 0x220c, - 0x2304, 0xa106, 0x00c0, 0x611a, 0x8210, 0x8318, 0x00f0, 0x610f, - 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6122, 0x2001, 0x0001, - 0x0078, 0x6124, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, - 0xa08a, 0x0030, 0x10c8, 0x12d5, 0x1078, 0x6a65, 0x0040, 0x6136, - 0x1078, 0x6a79, 0x0040, 0x613f, 0x0078, 0x6138, 0x1078, 0x22b1, - 0x1078, 0x4b33, 0x1078, 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x1078, - 0x5e09, 0x0078, 0x6138, 0xa182, 0x0040, 0x0079, 0x6147, 0x6157, - 0x6157, 0x6157, 0x6157, 0x6157, 0x6157, 0x6157, 0x6157, 0x6157, - 0x6157, 0x6157, 0x6159, 0x6159, 0x6159, 0x6159, 0x6157, 0x1078, - 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, 0x47d7, 0x127e, 0x2091, - 0x8000, 0x1078, 0x4c2c, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, - 0x616e, 0x6004, 0xa082, 0x0040, 0x0079, 0x61e4, 0xa186, 0x0027, - 0x00c0, 0x618b, 0x1078, 0x4b33, 0x1078, 0x228f, 0x0d7e, 0x6110, - 0x2168, 0x1078, 0x68e3, 0x0040, 0x6185, 0x6837, 0x0103, 0x684b, - 0x0029, 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x0d7f, 0x1078, 0x5bb4, - 0x1078, 0x4c2c, 0x007c, 0xa186, 0x0014, 0x00c0, 0x6194, 0x6004, - 0xa082, 0x0040, 0x0079, 0x61b4, 0xa186, 0x0047, 0x10c0, 0x12d5, - 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x61b1, 0x127e, 0x2091, - 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x4698, 0x027f, 0x017f, - 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x61b1, 0x0078, - 0x620b, 0x1078, 0x5be9, 0x007c, 0x61c6, 0x61c4, 0x61c4, 0x61c4, - 0x61c4, 0x61c4, 0x61c4, 0x61c4, 0x61c4, 0x61c4, 0x61c4, 0x61dd, - 0x61dd, 0x61dd, 0x61dd, 0x61c4, 0x1078, 0x12d5, 0x1078, 0x4b33, - 0x0d7e, 0x6110, 0x2168, 0x1078, 0x68e3, 0x0040, 0x61d7, 0x6837, - 0x0103, 0x684b, 0x0006, 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x0d7f, - 0x1078, 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x1078, 0x4b33, 0x1078, - 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x61f6, 0x61f4, 0x61f4, 0x61f4, - 0x61f4, 0x61f4, 0x61f4, 0x61f4, 0x61f4, 0x61f4, 0x61f4, 0x6204, - 0x6204, 0x6204, 0x6204, 0x61f4, 0x1078, 0x12d5, 0x1078, 0x4b33, - 0x6003, 0x0002, 0x1078, 0x4c2c, 0x6010, 0xa088, 0x0013, 0x2104, - 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4b33, 0x6003, 0x000f, - 0x1078, 0x4c2c, 0x007c, 0xa182, 0x0040, 0x0079, 0x620f, 0x621f, - 0x621f, 0x621f, 0x621f, 0x621f, 0x6221, 0x62aa, 0x62c2, 0x621f, - 0x621f, 0x621f, 0x621f, 0x621f, 0x621f, 0x621f, 0x621f, 0x1078, - 0x12d5, 0x0e7e, 0x0d7e, 0x2071, 0x7b8c, 0x6110, 0x2168, 0x7614, - 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x628e, 0xa68c, 0x00ff, 0xa186, - 0x0002, 0x0040, 0x6253, 0xa186, 0x0028, 0x00c0, 0x623d, 0x1078, - 0x6a53, 0x684b, 0x001c, 0x0078, 0x6255, 0xd6dc, 0x0040, 0x6248, - 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6255, - 0xd6d4, 0x0040, 0x6253, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x6255, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, - 0xa01e, 0xd6c4, 0x0040, 0x6268, 0x7328, 0x732c, 0x6b56, 0x037e, - 0x2308, 0x2019, 0x7b98, 0xad90, 0x0019, 0x1078, 0x66cc, 0x037f, - 0xd6cc, 0x0040, 0x629e, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, - 0x627c, 0x2071, 0x7b98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, - 0x1078, 0x66cc, 0x0078, 0x629e, 0x6838, 0xd0fc, 0x0040, 0x6285, - 0x2009, 0x0020, 0x695a, 0x0078, 0x6271, 0x0f7e, 0x2d78, 0x1078, - 0x6664, 0x0f7f, 0x1078, 0x66b9, 0x0078, 0x62a0, 0x684b, 0x0000, - 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x629e, 0x6810, - 0x6914, 0xa115, 0x0040, 0x629e, 0x1078, 0x6412, 0x1078, 0x3a2c, - 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, - 0x5bb4, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7b8c, 0x7c04, - 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, - 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19a7, 0x1078, 0x4843, 0x1078, - 0x4cec, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, - 0x3e20, 0x2c10, 0x1078, 0x1572, 0x007c, 0xa182, 0x0040, 0x0079, - 0x62d1, 0x62e1, 0x62e1, 0x62e1, 0x62e1, 0x62e1, 0x62e3, 0x637a, - 0x62e1, 0x62e1, 0x6390, 0x63f2, 0x62e1, 0x62e1, 0x62e1, 0x62e1, - 0x63f9, 0x1078, 0x12d5, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, - 0x7b8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, - 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, - 0x0040, 0x6375, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x6304, - 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x6375, - 0x1078, 0x132f, 0x1040, 0x12d5, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, - 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, - 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x633e, - 0xa186, 0x0028, 0x00c0, 0x6328, 0x684b, 0x001c, 0x0078, 0x6340, - 0xd6dc, 0x0040, 0x6333, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x6340, 0xd6d4, 0x0040, 0x633e, 0x684b, 0x0007, - 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6340, 0x684b, 0x0000, - 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, - 0x6355, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7b98, - 0xad90, 0x0019, 0x1078, 0x66cc, 0x037f, 0xd6cc, 0x0040, 0x6375, - 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6369, 0x2071, 0x7b98, - 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x66cc, 0x0078, - 0x6375, 0x7838, 0xd0fc, 0x0040, 0x6372, 0x2009, 0x0020, 0x695a, - 0x0078, 0x635e, 0x2d78, 0x1078, 0x6664, 0x0d7f, 0x0e7f, 0x0f7f, - 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7b8c, 0x7c04, - 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, - 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19a7, 0x1078, 0x5519, 0x007c, - 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4bdb, 0x1078, 0x4cec, 0x6110, - 0x2168, 0x694c, 0xd1e4, 0x0040, 0x63f0, 0xd1cc, 0x0040, 0x63cb, - 0x6948, 0x6838, 0xd0fc, 0x0040, 0x63c3, 0x017e, 0x684c, 0x007e, - 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, - 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x63b2, - 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, - 0x1358, 0x0078, 0x63ee, 0x017e, 0x1078, 0x1358, 0x0d7f, 0x1078, - 0x66b9, 0x0078, 0x63ee, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, - 0xa186, 0x0002, 0x0040, 0x63ea, 0xa086, 0x0028, 0x00c0, 0x63dc, - 0x684b, 0x001c, 0x0078, 0x63ec, 0xd1dc, 0x0040, 0x63e3, 0x684b, - 0x0015, 0x0078, 0x63ec, 0xd1d4, 0x0040, 0x63ea, 0x684b, 0x0007, - 0x0078, 0x63ec, 0x684b, 0x0000, 0x1078, 0x3a2c, 0x1078, 0x5bb4, - 0x0d7f, 0x007c, 0x6003, 0x0002, 0x1078, 0x4bdb, 0x1078, 0x4cec, - 0x007c, 0x1078, 0x4bdb, 0x1078, 0x228f, 0x0d7e, 0x6110, 0x2168, - 0x1078, 0x68e3, 0x0040, 0x640c, 0x6837, 0x0103, 0x684b, 0x0029, - 0x1078, 0x3a2c, 0x1078, 0x6a3f, 0x0d7f, 0x1078, 0x5bb4, 0x1078, - 0x4cec, 0x007c, 0x684b, 0x0015, 0xd1fc, 0x0040, 0x641e, 0x684b, - 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, - 0x007c, 0xa182, 0x0040, 0x0079, 0x6425, 0x6435, 0x6435, 0x6435, - 0x6435, 0x6435, 0x6437, 0x6435, 0x64db, 0x64e3, 0x6435, 0x6435, - 0x6435, 0x6435, 0x6435, 0x6435, 0x6435, 0x1078, 0x12d5, 0x077e, - 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x7b8c, 0x6110, 0x2178, 0x7614, - 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x64cd, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0040, 0x6458, 0x7018, 0x7862, 0x701c, 0x785e, - 0xa284, 0x0300, 0x0040, 0x64ca, 0x1078, 0x132f, 0x1040, 0x12d5, - 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, - 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, - 0x00ff, 0xa186, 0x0002, 0x0040, 0x6493, 0xa186, 0x0028, 0x00c0, - 0x647d, 0x684b, 0x001c, 0x0078, 0x6495, 0xd6dc, 0x0040, 0x6488, - 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6495, - 0xd6d4, 0x0040, 0x6493, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x6495, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, - 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x64aa, 0x7328, 0x732c, - 0x6b56, 0x037e, 0x2308, 0x2019, 0x7b98, 0xad90, 0x0019, 0x1078, - 0x66cc, 0x037f, 0xd6cc, 0x0040, 0x64ca, 0x7124, 0x695a, 0xa192, - 0x0021, 0x00c8, 0x64be, 0x2071, 0x7b98, 0x831c, 0x2300, 0xae18, - 0xad90, 0x001d, 0x1078, 0x66cc, 0x0078, 0x64ca, 0x7838, 0xd0fc, - 0x0040, 0x64c7, 0x2009, 0x0020, 0x695a, 0x0078, 0x64b3, 0x2d78, - 0x1078, 0x6664, 0xd6dc, 0x00c0, 0x64d0, 0xa006, 0x0078, 0x64d4, - 0x2001, 0x0001, 0x7218, 0x731c, 0x1078, 0x15b6, 0x0d7f, 0x0e7f, - 0x0f7f, 0x077f, 0x007c, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, - 0x1078, 0x1572, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, - 0x694c, 0xd1e4, 0x0040, 0x654a, 0xd1cc, 0x0040, 0x651a, 0x6948, - 0x6838, 0xd0fc, 0x0040, 0x6512, 0x017e, 0x684c, 0x007e, 0x6850, - 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, - 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6501, 0x157f, - 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x1358, - 0x0078, 0x6548, 0x017e, 0x1078, 0x1358, 0x0d7f, 0x1078, 0x66b9, - 0x0078, 0x6548, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, - 0x0002, 0x0040, 0x6539, 0xa086, 0x0028, 0x00c0, 0x652b, 0x684b, - 0x001c, 0x0078, 0x6546, 0xd1dc, 0x0040, 0x6532, 0x684b, 0x0015, - 0x0078, 0x6546, 0xd1d4, 0x0040, 0x6539, 0x684b, 0x0007, 0x0078, - 0x6546, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0040, 0x6546, 0x6810, - 0x6914, 0xa115, 0x0040, 0x6546, 0x1078, 0x6412, 0x1078, 0x3a2c, - 0x1078, 0x5bb4, 0x0d7f, 0x007c, 0x1078, 0x4b33, 0x0078, 0x6552, - 0x1078, 0x4bdb, 0x1078, 0x68e3, 0x0040, 0x6569, 0x0d7e, 0x6110, - 0x2168, 0x6837, 0x0103, 0x2009, 0x760c, 0x210c, 0xd18c, 0x00c0, - 0x6572, 0xd184, 0x00c0, 0x656e, 0x6108, 0x694a, 0x1078, 0x3a2c, - 0x0d7f, 0x1078, 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x684b, 0x0004, - 0x0078, 0x6566, 0x684b, 0x0004, 0x0078, 0x6566, 0xa182, 0x0040, - 0x0079, 0x657a, 0x658a, 0x658a, 0x658a, 0x658a, 0x658a, 0x658c, - 0x658a, 0x658f, 0x658a, 0x658a, 0x658a, 0x658a, 0x658a, 0x658a, - 0x658a, 0x658a, 0x1078, 0x12d5, 0x1078, 0x5bb4, 0x007c, 0x007e, - 0x027e, 0xa016, 0x1078, 0x1572, 0x027f, 0x007f, 0x007c, 0xa182, - 0x0085, 0x0079, 0x659b, 0x65a4, 0x65a2, 0x65a2, 0x65a2, 0x65a2, - 0x65a2, 0x65a2, 0x1078, 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, - 0x47d7, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c2c, 0x127f, 0x007c, - 0xa186, 0x0013, 0x00c0, 0x65ba, 0x6004, 0xa082, 0x0085, 0x2008, - 0x0079, 0x65ee, 0xa186, 0x0027, 0x00c0, 0x65db, 0x1078, 0x4b33, - 0x1078, 0x228f, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, - 0x65d1, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3a2c, 0x1078, - 0x6a3f, 0x0d7f, 0x1078, 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x1078, - 0x5be9, 0x0078, 0x65d6, 0xa186, 0x0014, 0x00c0, 0x65d7, 0x1078, - 0x4b33, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, 0x65d1, - 0x6837, 0x0103, 0x684b, 0x0006, 0x0078, 0x65cd, 0x65f7, 0x65f5, - 0x65f5, 0x65f5, 0x65f5, 0x65f5, 0x6600, 0x1078, 0x12d5, 0x1078, - 0x4b33, 0x6017, 0x0014, 0x6003, 0x000c, 0x1078, 0x4c2c, 0x007c, - 0x1078, 0x4b33, 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, 0x4c2c, - 0x007c, 0xa182, 0x008c, 0x00c8, 0x6613, 0xa182, 0x0085, 0x0048, - 0x6613, 0x0079, 0x6616, 0x1078, 0x5be9, 0x007c, 0x661d, 0x661d, - 0x661d, 0x661d, 0x661f, 0x663e, 0x661d, 0x1078, 0x12d5, 0x0d7e, - 0x1078, 0x6a3f, 0x1078, 0x68e3, 0x0040, 0x663a, 0x6010, 0x2068, - 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x6632, 0x684b, 0x0006, - 0x0078, 0x6636, 0x684b, 0x0005, 0x1078, 0x6af2, 0x6847, 0x0000, - 0x1078, 0x3a2c, 0x1078, 0x5bb4, 0x0d7f, 0x007c, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x68e3, 0x0040, 0x6659, 0x6837, 0x0103, 0x6850, - 0xd0b4, 0x0040, 0x664f, 0x684b, 0x0006, 0x0078, 0x6653, 0x684b, - 0x0005, 0x1078, 0x6af2, 0x6847, 0x0000, 0x1078, 0x3a2c, 0x1078, - 0x6a3f, 0x0d7f, 0x1078, 0x5bb4, 0x007c, 0x1078, 0x4b33, 0x1078, - 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, - 0x2029, 0x0001, 0xa182, 0x0101, 0x00c8, 0x6670, 0x0078, 0x6672, - 0x2009, 0x0100, 0x2130, 0x2069, 0x7b98, 0x831c, 0x2300, 0xad18, - 0x2009, 0x0020, 0xaf90, 0x001d, 0x1078, 0x66cc, 0xa6b2, 0x0020, - 0x7804, 0xa06d, 0x0040, 0x6686, 0x1078, 0x1358, 0x1078, 0x132f, - 0x0040, 0x66b0, 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, - 0x7c06, 0xa68a, 0x003d, 0x00c8, 0x669c, 0x2608, 0xad90, 0x000f, - 0x1078, 0x66cc, 0x0078, 0x66b0, 0xa6b2, 0x003c, 0x2009, 0x003c, - 0x2d78, 0xad90, 0x000f, 0x1078, 0x66cc, 0x0078, 0x6686, 0x0f7f, - 0x852f, 0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x66b5, - 0x0f7f, 0x852f, 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, - 0x007c, 0x0f7e, 0x8dff, 0x0040, 0x66ca, 0x6804, 0xa07d, 0x0040, - 0x66c8, 0x6807, 0x0000, 0x1078, 0x3a2c, 0x2f68, 0x0078, 0x66bd, - 0x1078, 0x3a2c, 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, - 0x66d2, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, - 0x8210, 0x00f0, 0x66d4, 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, - 0x601c, 0xa084, 0x000f, 0x1079, 0x66e7, 0x127f, 0x007c, 0x66f6, - 0x66ef, 0x66f1, 0x670f, 0x66ef, 0x66f1, 0x66f1, 0x66f1, 0x1078, - 0x12d5, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x68e3, 0x0040, 0x670c, 0xa00e, 0x2001, 0x0005, - 0x1078, 0x3abc, 0x1078, 0x6af2, 0x1078, 0x3a2c, 0x1078, 0x5bb4, - 0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x670a, 0x6000, - 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6717, 0x007c, 0x6727, - 0x6744, 0x6729, 0x6755, 0x6740, 0x6727, 0x66f1, 0x66f6, 0x66f6, - 0x66f1, 0x66f1, 0x66f1, 0x66f1, 0x66f1, 0x66f1, 0x66f1, 0x1078, - 0x12d5, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, 0x6732, - 0x1078, 0x6af2, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, - 0x0002, 0x1078, 0x47d7, 0x1078, 0x4c2c, 0xa085, 0x0001, 0x007c, - 0x1078, 0x1676, 0x0078, 0x6729, 0x0e7e, 0x2071, 0x7836, 0x7024, - 0xac06, 0x00c0, 0x674d, 0x1078, 0x5688, 0x1078, 0x55bd, 0x0e7f, - 0x00c0, 0x6729, 0x1078, 0x66f1, 0x007c, 0x037e, 0x0e7e, 0x2071, - 0x7836, 0x703c, 0xac06, 0x00c0, 0x6765, 0x2019, 0x0000, 0x1078, - 0x571a, 0x0e7f, 0x037f, 0x0078, 0x6729, 0x1078, 0x59f6, 0x0e7f, - 0x037f, 0x00c0, 0x6729, 0x1078, 0x66f1, 0x007c, 0x0c7e, 0x601c, - 0xa084, 0x000f, 0x1079, 0x6776, 0x0c7f, 0x007c, 0x6785, 0x67e2, - 0x6887, 0x6789, 0x6785, 0x6785, 0x7188, 0x5bb4, 0x67e2, 0x1078, - 0x6a79, 0x00c0, 0x6785, 0x1078, 0x5e09, 0x007c, 0x6017, 0x0001, - 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6791, - 0x007c, 0x67a1, 0x67a3, 0x67c3, 0x67d5, 0x67d5, 0x67a1, 0x6785, - 0x6785, 0x6785, 0x67d5, 0x67d5, 0x67a1, 0x67a1, 0x67a1, 0x67a1, - 0x67df, 0x1078, 0x12d5, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, - 0x7052, 0x2071, 0x7836, 0x7024, 0xac06, 0x0040, 0x67bf, 0x1078, - 0x55bd, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, - 0x0014, 0x1078, 0x47d7, 0x1078, 0x4c2c, 0x0e7f, 0x007c, 0x6017, - 0x0001, 0x0078, 0x67bd, 0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, - 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, - 0x1078, 0x47d7, 0x1078, 0x4c2c, 0x007c, 0x0d7e, 0x6017, 0x0001, - 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, - 0x5bb4, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x67ea, 0x007c, 0x67fa, 0x6786, 0x67fc, 0x67fa, 0x67fc, 0x67fa, - 0x67fa, 0x67fa, 0x677f, 0x677f, 0x67fa, 0x67fa, 0x67fa, 0x67fa, - 0x67fa, 0x67fa, 0x1078, 0x12d5, 0x0d7e, 0x6018, 0x2068, 0x6804, - 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, 0x10c8, 0x12d5, 0x1079, - 0x680a, 0x007c, 0x6816, 0x6835, 0x6816, 0x6835, 0x6816, 0x6835, - 0x6818, 0x6821, 0x6816, 0x6835, 0x6816, 0x682e, 0x1078, 0x12d5, - 0x6004, 0xa08e, 0x0004, 0x0040, 0x6830, 0xa08e, 0x0002, 0x0040, - 0x6830, 0x6004, 0x1078, 0x6a79, 0x0040, 0x687f, 0xa08e, 0x0021, - 0x0040, 0x6883, 0xa08e, 0x0022, 0x0040, 0x687f, 0x1078, 0x228f, - 0x1078, 0x5e09, 0x1078, 0x5bb4, 0x007c, 0x0c7e, 0x0d7e, 0x6104, - 0xa186, 0x0016, 0x0040, 0x686f, 0xa186, 0x0002, 0x00c0, 0x685e, - 0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x685e, 0x6840, 0xa084, - 0x00ff, 0xa005, 0x0040, 0x685e, 0x8001, 0x6842, 0x6013, 0x0000, - 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x5b4e, 0x0040, 0x685e, - 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x686f, 0x0d7f, 0x0c7f, - 0x1078, 0x5e09, 0x1078, 0x228f, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x1078, 0x22b1, 0x127f, 0x0e7f, 0x1078, 0x5bb4, 0x007c, 0x2001, - 0x0002, 0x1078, 0x3783, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, - 0x4824, 0x1078, 0x4c2c, 0x0d7f, 0x0c7f, 0x0078, 0x686e, 0x1078, - 0x5e09, 0x0078, 0x6832, 0x1078, 0x5e18, 0x0078, 0x6832, 0x6000, - 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x688f, 0x007c, 0x689f, - 0x689f, 0x689f, 0x689f, 0x689f, 0x689f, 0x689f, 0x689f, 0x689f, - 0x6785, 0x689f, 0x6786, 0x68a1, 0x6786, 0x68aa, 0x689f, 0x1078, - 0x12d5, 0x6007, 0x008b, 0x6003, 0x000d, 0x1078, 0x47d7, 0x1078, - 0x4c2c, 0x007c, 0x1078, 0x6a3f, 0x1078, 0x68e3, 0x0040, 0x68cc, - 0x1078, 0x228f, 0x0d7e, 0x1078, 0x68e3, 0x0040, 0x68bf, 0x6010, - 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3a2c, 0x0d7f, - 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x4824, - 0x1078, 0x4c2c, 0x0078, 0x68ce, 0x1078, 0x5bb4, 0x007c, 0xa284, - 0x0007, 0x00c0, 0x68e0, 0xa282, 0x7d00, 0x0048, 0x68e0, 0x2001, - 0x7615, 0x2004, 0xa202, 0x00c8, 0x68e0, 0xa085, 0x0001, 0x007c, - 0xa006, 0x0078, 0x68df, 0x027e, 0x0e7e, 0x2071, 0x7600, 0x6210, - 0x7058, 0xa202, 0x0048, 0x68f5, 0x705c, 0xa202, 0x00c8, 0x68f5, - 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, 0xa006, 0x0078, 0x68f2, - 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2061, - 0x7d00, 0x2071, 0x7600, 0x7344, 0x7060, 0xa302, 0x00c8, 0x691e, - 0x601c, 0xa206, 0x00c0, 0x6916, 0x1078, 0x6a79, 0x00c0, 0x6912, - 0x1078, 0x5e09, 0x0c7e, 0x1078, 0x5bb4, 0x0c7f, 0xace0, 0x0008, - 0x7054, 0xac02, 0x00c8, 0x691e, 0x0078, 0x6903, 0x127f, 0x007f, - 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0x127e, - 0x2091, 0x8000, 0xa188, 0x7720, 0x210c, 0x81ff, 0x0040, 0x694b, - 0x2061, 0x7d00, 0x2071, 0x7600, 0x7344, 0x7060, 0xa302, 0x00c8, - 0x694b, 0x6018, 0xa106, 0x00c0, 0x6945, 0x1078, 0x228f, 0x017e, - 0x0c7e, 0x1078, 0x5bb4, 0x0c7f, 0x017f, 0xace0, 0x0008, 0x7054, - 0xac02, 0x0048, 0x6939, 0x127f, 0x017f, 0x0c7f, 0x0e7f, 0x007c, - 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5b4e, - 0x057f, 0x0040, 0x6969, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, - 0x004b, 0x1078, 0x5bdb, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x6965, 0x0c7e, 0x057e, 0x127e, 0x2091, - 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5b4e, 0x057f, 0x0040, 0x6993, - 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, - 0x3958, 0x0c7f, 0x1078, 0x4914, 0x1078, 0x4857, 0x2c08, 0x1078, - 0x7326, 0x2009, 0x004c, 0x1078, 0x5bdb, 0xa085, 0x0001, 0x127f, - 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x698f, 0x0c7e, 0x057e, - 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5b4e, 0x057f, - 0x0040, 0x69be, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, - 0x0c7e, 0x2560, 0x1078, 0x3958, 0x0c7f, 0x1078, 0x4914, 0x1078, - 0x4857, 0x2c08, 0x1078, 0x7326, 0x2009, 0x004d, 0x1078, 0x5bdb, + 0x564b, 0x2100, 0xa1b2, 0x0030, 0x10c8, 0x1286, 0x0079, 0x5678, + 0x56aa, 0x56b6, 0x56aa, 0x56aa, 0x56aa, 0x56aa, 0x56a8, 0x56a8, + 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, + 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, + 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56aa, + 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, + 0x56aa, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, 0x56a8, + 0x1078, 0x1286, 0x6003, 0x0001, 0x6106, 0x1078, 0x4445, 0x127e, + 0x2091, 0x8000, 0x1078, 0x484d, 0x127f, 0x007c, 0x6003, 0x0001, + 0x6106, 0x1078, 0x4445, 0x127e, 0x2091, 0x8000, 0x1078, 0x484d, + 0x127f, 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x1286, 0xa1b6, + 0x0013, 0x00c0, 0x56ce, 0x2008, 0x0079, 0x5724, 0xa1b6, 0x0027, + 0x00c0, 0x570c, 0x1078, 0x4754, 0x6004, 0x1078, 0x6316, 0x0040, + 0x56df, 0x1078, 0x632a, 0x0040, 0x5708, 0x0078, 0x5703, 0x1078, + 0x2192, 0x2001, 0x0007, 0x1078, 0x3443, 0x6018, 0xa080, 0x0028, + 0x200c, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078, + 0x4535, 0x1078, 0x4478, 0x0c7e, 0x6018, 0xa065, 0x0040, 0x56fa, + 0x1078, 0x3618, 0x0c7f, 0x2c08, 0x1078, 0x6bca, 0x037f, 0x027f, + 0x017f, 0x1078, 0x347f, 0x1078, 0x55a1, 0x1078, 0x484d, 0x007c, + 0x1078, 0x579c, 0x0078, 0x5703, 0xa186, 0x0014, 0x1078, 0x4754, + 0x1078, 0x2174, 0x1078, 0x6316, 0x00c0, 0x571a, 0x1078, 0x2192, + 0x0078, 0x5703, 0x1078, 0x632a, 0x00c0, 0x5722, 0x1078, 0x579c, + 0x0078, 0x5703, 0x0078, 0x5703, 0x5756, 0x5758, 0x575c, 0x5760, + 0x5764, 0x5768, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, + 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, + 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, 0x5754, + 0x5754, 0x5754, 0x576c, 0x5772, 0x5754, 0x5754, 0x5754, 0x5754, + 0x5754, 0x5754, 0x5754, 0x5754, 0x5772, 0x5772, 0x5754, 0x5754, + 0x5754, 0x5754, 0x5754, 0x5754, 0x1078, 0x1286, 0x0078, 0x5772, + 0x2001, 0x000b, 0x0078, 0x577b, 0x2001, 0x0003, 0x0078, 0x577b, + 0x2001, 0x0005, 0x0078, 0x577b, 0x2001, 0x0001, 0x0078, 0x577b, + 0x2001, 0x0009, 0x0078, 0x577b, 0x1078, 0x1286, 0x0078, 0x577a, + 0x1078, 0x3443, 0x1078, 0x4754, 0x6003, 0x0002, 0x6017, 0x0028, + 0x1078, 0x484d, 0x007c, 0x1078, 0x3443, 0x1078, 0x4754, 0x6003, + 0x0002, 0x037e, 0x2019, 0x6f5c, 0x2304, 0xa084, 0xff00, 0x00c0, + 0x578d, 0x2019, 0x0028, 0x0078, 0x5796, 0x8007, 0xa09a, 0x0004, + 0x0048, 0x5789, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, + 0x1078, 0x484d, 0x0078, 0x577a, 0x0e7e, 0x1078, 0x61dc, 0x0040, + 0x57a9, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, + 0x0100, 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, + 0x00ff, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1286, 0x6604, 0xa6b6, + 0x0028, 0x00c0, 0x57bf, 0x1078, 0x635f, 0x0078, 0x57e8, 0x6604, + 0xa6b6, 0x0029, 0x00c0, 0x57c8, 0x1078, 0x6379, 0x0078, 0x57e8, + 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x57d1, 0x1078, 0x5631, 0x0078, + 0x57e8, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x57da, 0x1078, 0x565a, + 0x0078, 0x57e8, 0xa1b6, 0x0015, 0x00c0, 0x57e2, 0x1079, 0x57ed, + 0x0078, 0x57e8, 0xa1b6, 0x0016, 0x00c0, 0x57e9, 0x1079, 0x58b6, + 0x007c, 0x1078, 0x55d5, 0x0078, 0x57e8, 0x57f9, 0x57fc, 0x57f9, + 0x583d, 0x57f9, 0x5865, 0x57f9, 0x57f9, 0x57f9, 0x588e, 0x57f9, + 0x58a4, 0x0005, 0x0005, 0x007c, 0x0e7e, 0x2071, 0x6f00, 0x7070, + 0xa086, 0x0074, 0x00c0, 0x5826, 0x1078, 0x6ba2, 0x00c0, 0x5818, + 0x0d7e, 0x6018, 0x2068, 0x1078, 0x582a, 0x0d7f, 0x2001, 0x0006, + 0x1078, 0x3443, 0x1078, 0x2192, 0x1078, 0x55a1, 0x0078, 0x5828, + 0x2001, 0x000a, 0x1078, 0x3443, 0x1078, 0x2192, 0x6003, 0x0001, + 0x6007, 0x0001, 0x1078, 0x4445, 0x0078, 0x5828, 0x1078, 0x5855, + 0x0e7f, 0x007c, 0x6800, 0xd084, 0x0040, 0x583c, 0x2001, 0x0000, + 0x1078, 0x342f, 0x2069, 0x6f51, 0x6804, 0xd0a4, 0x0040, 0x583c, + 0x2001, 0x0006, 0x1078, 0x3451, 0x007c, 0x2011, 0x6f1c, 0x2204, + 0xa086, 0x0074, 0x00c0, 0x5852, 0x1078, 0x597f, 0x2001, 0x0004, + 0x1078, 0x3443, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x4445, + 0x0078, 0x5854, 0x1078, 0x5855, 0x007c, 0x2001, 0x6f00, 0x2004, + 0xa086, 0x0003, 0x0040, 0x5860, 0x2001, 0x0007, 0x1078, 0x3443, + 0x1078, 0x55a1, 0x1078, 0x2192, 0x007c, 0x0e7e, 0x2071, 0x6f00, + 0x7070, 0xa086, 0x0014, 0x00c0, 0x588a, 0x7000, 0xa086, 0x0003, + 0x00c0, 0x5874, 0x1078, 0x2a40, 0x0d7e, 0x6018, 0x2068, 0x1078, + 0x3513, 0x1078, 0x582a, 0x0d7f, 0x1078, 0x5989, 0x00c0, 0x588a, + 0x2001, 0x0006, 0x1078, 0x3443, 0x1078, 0x55a1, 0x1078, 0x2192, + 0x0078, 0x588c, 0x1078, 0x5855, 0x0e7f, 0x007c, 0x2011, 0x6f1c, + 0x2204, 0xa086, 0x0014, 0x00c0, 0x58a1, 0x2001, 0x0002, 0x1078, + 0x3443, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4445, 0x0078, + 0x58a3, 0x1078, 0x5855, 0x007c, 0x2011, 0x6f1c, 0x2204, 0xa086, + 0x0004, 0x00c0, 0x58b3, 0x2001, 0x0007, 0x1078, 0x3443, 0x1078, + 0x55a1, 0x0078, 0x58b5, 0x1078, 0x5855, 0x007c, 0x57f9, 0x58c2, + 0x57f9, 0x58e8, 0x57f9, 0x5934, 0x57f9, 0x57f9, 0x57f9, 0x5947, + 0x57f9, 0x595a, 0x0c7e, 0x1078, 0x596d, 0x00c0, 0x58d7, 0x2001, + 0x0000, 0x1078, 0x342f, 0x2001, 0x0002, 0x1078, 0x3443, 0x6003, + 0x0001, 0x6007, 0x0002, 0x1078, 0x4445, 0x0078, 0x58e6, 0x2009, + 0x738f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x58e4, + 0x1078, 0x55a1, 0x0078, 0x58e6, 0x1078, 0x5855, 0x0c7f, 0x007c, + 0x1078, 0x597c, 0x00c0, 0x58fc, 0x2001, 0x0000, 0x1078, 0x342f, + 0x2001, 0x0002, 0x1078, 0x3443, 0x6003, 0x0001, 0x6007, 0x0002, + 0x1078, 0x4445, 0x0078, 0x591c, 0x2009, 0x738e, 0x2134, 0xa6b4, + 0x00ff, 0xa686, 0x0005, 0x0040, 0x591d, 0x2009, 0x738f, 0x2104, + 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x591a, 0xa686, 0x0009, + 0x0040, 0x591d, 0x2001, 0x0004, 0x1078, 0x3443, 0x1078, 0x55a1, + 0x0078, 0x591c, 0x1078, 0x5855, 0x007c, 0x0d7e, 0x6018, 0x2068, + 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x592f, 0x8001, 0x6842, + 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x591c, 0x1078, + 0x2174, 0x0d7f, 0x0078, 0x591a, 0x1078, 0x597c, 0x00c0, 0x5944, + 0x2001, 0x0004, 0x1078, 0x3443, 0x6003, 0x0001, 0x6007, 0x0003, + 0x1078, 0x4445, 0x0078, 0x5946, 0x1078, 0x5855, 0x007c, 0x1078, + 0x597c, 0x00c0, 0x5957, 0x2001, 0x0008, 0x1078, 0x3443, 0x6003, + 0x0001, 0x6007, 0x0005, 0x1078, 0x4445, 0x0078, 0x5959, 0x1078, + 0x5855, 0x007c, 0x1078, 0x597c, 0x00c0, 0x596a, 0x2001, 0x000a, + 0x1078, 0x3443, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4445, + 0x0078, 0x596c, 0x1078, 0x5855, 0x007c, 0x2009, 0x738e, 0x2104, + 0xa086, 0x0003, 0x00c0, 0x597b, 0x2009, 0x738f, 0x2104, 0xa084, + 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, 0x007c, 0x0c7e, + 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x34a9, 0x017f, 0x0c7f, + 0x007c, 0x0e7e, 0x2071, 0x738c, 0x7004, 0xa086, 0x0014, 0x00c0, + 0x59ac, 0x7008, 0xa086, 0x0800, 0x00c0, 0x59ac, 0x700c, 0xd0ec, + 0x0040, 0x59aa, 0xa084, 0x0f00, 0xa086, 0x0100, 0x00c0, 0x59aa, + 0x7024, 0xd0a4, 0x0040, 0x59aa, 0xd08c, 0x0040, 0x59aa, 0xa006, + 0x0078, 0x59ac, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, + 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, + 0x8000, 0x2029, 0x70bf, 0x252c, 0x2021, 0x70c5, 0x2424, 0x2061, + 0x7500, 0x2071, 0x6f00, 0x7244, 0x7060, 0xa202, 0x00c8, 0x5a03, + 0x1078, 0x6da8, 0x0040, 0x59fb, 0x671c, 0xa786, 0x0001, 0x0040, + 0x59fb, 0xa786, 0x0007, 0x0040, 0x59fb, 0x2500, 0xac06, 0x0040, + 0x59fb, 0x2400, 0xac06, 0x0040, 0x59fb, 0x0c7e, 0x6000, 0xa086, + 0x0004, 0x00c0, 0x59e5, 0x1078, 0x1627, 0x6010, 0x2068, 0x1078, + 0x61dc, 0x0040, 0x59f8, 0xa786, 0x0003, 0x00c0, 0x5a0d, 0x6837, + 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x36ec, 0x1078, 0x62f0, + 0x1078, 0x62fd, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, + 0x5a03, 0x0078, 0x59c3, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, + 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, + 0x59ef, 0x1078, 0x6d4c, 0x0078, 0x59f8, 0x220c, 0x2304, 0xa106, + 0x00c0, 0x5a20, 0x8210, 0x8318, 0x00f0, 0x5a15, 0xa006, 0x007c, + 0x2304, 0xa102, 0x0048, 0x5a28, 0x2001, 0x0001, 0x0078, 0x5a2a, + 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x0030, + 0x10c8, 0x1286, 0x1078, 0x6316, 0x0040, 0x5a3c, 0x1078, 0x632a, + 0x0040, 0x5a45, 0x0078, 0x5a3e, 0x1078, 0x2192, 0x1078, 0x4754, + 0x1078, 0x55a1, 0x1078, 0x484d, 0x007c, 0x1078, 0x579c, 0x0078, + 0x5a3e, 0xa182, 0x0040, 0x0079, 0x5a4d, 0x5a5d, 0x5a5d, 0x5a5d, + 0x5a5d, 0x5a5d, 0x5a5d, 0x5a5d, 0x5a5d, 0x5a5d, 0x5a5d, 0x5a5d, + 0x5a5f, 0x5a5f, 0x5a5f, 0x5a5f, 0x5a5d, 0x1078, 0x1286, 0x6003, + 0x0001, 0x6106, 0x1078, 0x43f8, 0x127e, 0x2091, 0x8000, 0x1078, + 0x484d, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x5a74, 0x6004, + 0xa082, 0x0040, 0x0079, 0x5aea, 0xa186, 0x0027, 0x00c0, 0x5a91, + 0x1078, 0x4754, 0x1078, 0x2174, 0x0d7e, 0x6110, 0x2168, 0x1078, + 0x61dc, 0x0040, 0x5a8b, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, + 0x36ec, 0x1078, 0x62f0, 0x0d7f, 0x1078, 0x55a1, 0x1078, 0x484d, + 0x007c, 0xa186, 0x0014, 0x00c0, 0x5a9a, 0x6004, 0xa082, 0x0040, + 0x0079, 0x5aba, 0xa186, 0x0047, 0x10c0, 0x1286, 0x2001, 0x0109, + 0x2004, 0xd084, 0x0040, 0x5ab7, 0x127e, 0x2091, 0x2200, 0x007e, + 0x017e, 0x027e, 0x1078, 0x42cb, 0x027f, 0x017f, 0x007f, 0x127f, + 0x6000, 0xa086, 0x0002, 0x00c0, 0x5ab7, 0x0078, 0x5b11, 0x1078, + 0x55d5, 0x007c, 0x5acc, 0x5aca, 0x5aca, 0x5aca, 0x5aca, 0x5aca, + 0x5aca, 0x5aca, 0x5aca, 0x5aca, 0x5aca, 0x5ae3, 0x5ae3, 0x5ae3, + 0x5ae3, 0x5aca, 0x1078, 0x1286, 0x1078, 0x4754, 0x0d7e, 0x6110, + 0x2168, 0x1078, 0x61dc, 0x0040, 0x5add, 0x6837, 0x0103, 0x684b, + 0x0006, 0x1078, 0x36ec, 0x1078, 0x62f0, 0x0d7f, 0x1078, 0x55a1, + 0x1078, 0x484d, 0x007c, 0x1078, 0x4754, 0x1078, 0x55a1, 0x1078, + 0x484d, 0x007c, 0x5afc, 0x5afa, 0x5afa, 0x5afa, 0x5afa, 0x5afa, + 0x5afa, 0x5afa, 0x5afa, 0x5afa, 0x5afa, 0x5b0a, 0x5b0a, 0x5b0a, + 0x5b0a, 0x5afa, 0x1078, 0x1286, 0x1078, 0x4754, 0x6003, 0x0002, + 0x1078, 0x484d, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, + 0x200a, 0x007c, 0x1078, 0x4754, 0x6003, 0x000f, 0x1078, 0x484d, + 0x007c, 0xa182, 0x0040, 0x0079, 0x5b15, 0x5b25, 0x5b25, 0x5b25, + 0x5b25, 0x5b25, 0x5b27, 0x5bb0, 0x5bc8, 0x5b25, 0x5b25, 0x5b25, + 0x5b25, 0x5b25, 0x5b25, 0x5b25, 0x5b25, 0x1078, 0x1286, 0x0e7e, + 0x0d7e, 0x2071, 0x738c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, + 0x86ff, 0x0040, 0x5b94, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, + 0x5b59, 0xa186, 0x0028, 0x00c0, 0x5b43, 0x1078, 0x6304, 0x684b, + 0x001c, 0x0078, 0x5b5b, 0xd6dc, 0x0040, 0x5b4e, 0x684b, 0x0015, + 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5b5b, 0xd6d4, 0x0040, + 0x5b59, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x5b5b, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4, + 0x0040, 0x5b6e, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, + 0x7398, 0xad90, 0x0019, 0x1078, 0x5fd2, 0x037f, 0xd6cc, 0x0040, + 0x5ba4, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x5b82, 0x2071, + 0x7398, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x5fd2, + 0x0078, 0x5ba4, 0x6838, 0xd0fc, 0x0040, 0x5b8b, 0x2009, 0x0020, + 0x695a, 0x0078, 0x5b77, 0x0f7e, 0x2d78, 0x1078, 0x5f6a, 0x0f7f, + 0x1078, 0x5fbf, 0x0078, 0x5ba6, 0x684b, 0x0000, 0x6837, 0x0103, + 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x5ba4, 0x6810, 0x6914, 0xa115, + 0x0040, 0x5ba4, 0x1078, 0x5d18, 0x1078, 0x36ec, 0x6218, 0x2268, + 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x55a1, 0x007c, + 0x0f7e, 0x6003, 0x0003, 0x2079, 0x738c, 0x7c04, 0x7b00, 0x7e0c, + 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, + 0x2c10, 0x1078, 0x191c, 0x1078, 0x4464, 0x1078, 0x48fd, 0x007c, + 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, + 0x1078, 0x1523, 0x007c, 0xa182, 0x0040, 0x0079, 0x5bd7, 0x5be7, + 0x5be7, 0x5be7, 0x5be7, 0x5be7, 0x5be9, 0x5c80, 0x5be7, 0x5be7, + 0x5c96, 0x5cf8, 0x5be7, 0x5be7, 0x5be7, 0x5be7, 0x5cff, 0x1078, + 0x1286, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x738c, 0x6110, + 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, + 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x5c7b, + 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x5c0a, 0x7018, 0x7862, + 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x5c7b, 0x1078, 0x12e0, + 0x1040, 0x1286, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, + 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, + 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x5c44, 0xa186, 0x0028, + 0x00c0, 0x5c2e, 0x684b, 0x001c, 0x0078, 0x5c46, 0xd6dc, 0x0040, + 0x5c39, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x5c46, 0xd6d4, 0x0040, 0x5c44, 0x684b, 0x0007, 0x7318, 0x6b62, + 0x731c, 0x6b5e, 0x0078, 0x5c46, 0x684b, 0x0000, 0x6f4e, 0x7850, + 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x5c5b, 0x7328, + 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7398, 0xad90, 0x0019, + 0x1078, 0x5fd2, 0x037f, 0xd6cc, 0x0040, 0x5c7b, 0x7124, 0x695a, + 0xa192, 0x0021, 0x00c8, 0x5c6f, 0x2071, 0x7398, 0x831c, 0x2300, + 0xae18, 0xad90, 0x001d, 0x1078, 0x5fd2, 0x0078, 0x5c7b, 0x7838, + 0xd0fc, 0x0040, 0x5c78, 0x2009, 0x0020, 0x695a, 0x0078, 0x5c64, + 0x2d78, 0x1078, 0x5f6a, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c, + 0x0f7e, 0x6003, 0x0003, 0x2079, 0x738c, 0x7c04, 0x7b00, 0x7e0c, + 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, + 0x2c10, 0x1078, 0x191c, 0x1078, 0x4f2a, 0x007c, 0x0d7e, 0x6003, + 0x0002, 0x1078, 0x47fc, 0x1078, 0x48fd, 0x6110, 0x2168, 0x694c, + 0xd1e4, 0x0040, 0x5cf6, 0xd1cc, 0x0040, 0x5cd1, 0x6948, 0x6838, + 0xd0fc, 0x0040, 0x5cc9, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, + 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, + 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x5cb8, 0x157f, 0x007f, + 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x1309, 0x0078, + 0x5cf4, 0x017e, 0x1078, 0x1309, 0x0d7f, 0x1078, 0x5fbf, 0x0078, + 0x5cf4, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, + 0x0040, 0x5cf0, 0xa086, 0x0028, 0x00c0, 0x5ce2, 0x684b, 0x001c, + 0x0078, 0x5cf2, 0xd1dc, 0x0040, 0x5ce9, 0x684b, 0x0015, 0x0078, + 0x5cf2, 0xd1d4, 0x0040, 0x5cf0, 0x684b, 0x0007, 0x0078, 0x5cf2, + 0x684b, 0x0000, 0x1078, 0x36ec, 0x1078, 0x55a1, 0x0d7f, 0x007c, + 0x6003, 0x0002, 0x1078, 0x47fc, 0x1078, 0x48fd, 0x007c, 0x1078, + 0x47fc, 0x1078, 0x2174, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x61dc, + 0x0040, 0x5d12, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x36ec, + 0x1078, 0x62f0, 0x0d7f, 0x1078, 0x55a1, 0x1078, 0x48fd, 0x007c, + 0x684b, 0x0015, 0xd1fc, 0x0040, 0x5d24, 0x684b, 0x0007, 0x8002, + 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, + 0x0040, 0x0079, 0x5d2b, 0x5d3b, 0x5d3b, 0x5d3b, 0x5d3b, 0x5d3b, + 0x5d3d, 0x5d3b, 0x5de1, 0x5de9, 0x5d3b, 0x5d3b, 0x5d3b, 0x5d3b, + 0x5d3b, 0x5d3b, 0x5d3b, 0x1078, 0x1286, 0x077e, 0x0f7e, 0x0e7e, + 0x0d7e, 0x2071, 0x738c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, + 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, + 0x6a3e, 0x86ff, 0x0040, 0x5dd3, 0xa694, 0xff00, 0xa284, 0x0c00, + 0x0040, 0x5d5e, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, + 0x0040, 0x5dd0, 0x1078, 0x12e0, 0x1040, 0x1286, 0x2d00, 0x784a, + 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, + 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, + 0x0002, 0x0040, 0x5d99, 0xa186, 0x0028, 0x00c0, 0x5d83, 0x684b, + 0x001c, 0x0078, 0x5d9b, 0xd6dc, 0x0040, 0x5d8e, 0x684b, 0x0015, + 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x5d9b, 0xd6d4, 0x0040, + 0x5d99, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, + 0x5d9b, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, + 0xa01e, 0xd6c4, 0x0040, 0x5db0, 0x7328, 0x732c, 0x6b56, 0x037e, + 0x2308, 0x2019, 0x7398, 0xad90, 0x0019, 0x1078, 0x5fd2, 0x037f, + 0xd6cc, 0x0040, 0x5dd0, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, + 0x5dc4, 0x2071, 0x7398, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, + 0x1078, 0x5fd2, 0x0078, 0x5dd0, 0x7838, 0xd0fc, 0x0040, 0x5dcd, + 0x2009, 0x0020, 0x695a, 0x0078, 0x5db9, 0x2d78, 0x1078, 0x5f6a, + 0xd6dc, 0x00c0, 0x5dd6, 0xa006, 0x0078, 0x5dda, 0x2001, 0x0001, + 0x7218, 0x731c, 0x1078, 0x1567, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, + 0x007c, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1523, + 0x007c, 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, + 0x0040, 0x5e50, 0xd1cc, 0x0040, 0x5e20, 0x6948, 0x6838, 0xd0fc, + 0x0040, 0x5e18, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, + 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, + 0x2012, 0x8318, 0x8210, 0x00f0, 0x5e07, 0x157f, 0x007f, 0x6852, + 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x1309, 0x0078, 0x5e4e, + 0x017e, 0x1078, 0x1309, 0x0d7f, 0x1078, 0x5fbf, 0x0078, 0x5e4e, + 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, + 0x5e3f, 0xa086, 0x0028, 0x00c0, 0x5e31, 0x684b, 0x001c, 0x0078, + 0x5e4c, 0xd1dc, 0x0040, 0x5e38, 0x684b, 0x0015, 0x0078, 0x5e4c, + 0xd1d4, 0x0040, 0x5e3f, 0x684b, 0x0007, 0x0078, 0x5e4c, 0x684b, + 0x0000, 0x684c, 0xd0ac, 0x0040, 0x5e4c, 0x6810, 0x6914, 0xa115, + 0x0040, 0x5e4c, 0x1078, 0x5d18, 0x1078, 0x36ec, 0x1078, 0x55a1, + 0x0d7f, 0x007c, 0x1078, 0x4754, 0x0078, 0x5e58, 0x1078, 0x47fc, + 0x1078, 0x61dc, 0x0040, 0x5e6f, 0x0d7e, 0x6110, 0x2168, 0x6837, + 0x0103, 0x2009, 0x6f0c, 0x210c, 0xd18c, 0x00c0, 0x5e78, 0xd184, + 0x00c0, 0x5e74, 0x6108, 0x694a, 0x1078, 0x36ec, 0x0d7f, 0x1078, + 0x55a1, 0x1078, 0x484d, 0x007c, 0x684b, 0x0004, 0x0078, 0x5e6c, + 0x684b, 0x0004, 0x0078, 0x5e6c, 0xa182, 0x0040, 0x0079, 0x5e80, + 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e92, 0x5e90, 0x5e95, + 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e90, 0x5e90, + 0x1078, 0x1286, 0x1078, 0x55a1, 0x007c, 0x007e, 0x027e, 0xa016, + 0x1078, 0x1523, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, + 0x5ea1, 0x5eaa, 0x5ea8, 0x5ea8, 0x5ea8, 0x5ea8, 0x5ea8, 0x5ea8, + 0x1078, 0x1286, 0x6003, 0x0001, 0x6106, 0x1078, 0x43f8, 0x127e, + 0x2091, 0x8000, 0x1078, 0x484d, 0x127f, 0x007c, 0xa186, 0x0013, + 0x00c0, 0x5ec0, 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x5ef4, + 0xa186, 0x0027, 0x00c0, 0x5ee1, 0x1078, 0x4754, 0x1078, 0x2174, + 0x0d7e, 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x5ed7, 0x6837, + 0x0103, 0x684b, 0x0029, 0x1078, 0x36ec, 0x1078, 0x62f0, 0x0d7f, + 0x1078, 0x55a1, 0x1078, 0x484d, 0x007c, 0x1078, 0x55d5, 0x0078, + 0x5edc, 0xa186, 0x0014, 0x00c0, 0x5edd, 0x1078, 0x4754, 0x0d7e, + 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x5ed7, 0x6837, 0x0103, + 0x684b, 0x0006, 0x0078, 0x5ed3, 0x5efd, 0x5efb, 0x5efb, 0x5efb, + 0x5efb, 0x5efb, 0x5f06, 0x1078, 0x1286, 0x1078, 0x4754, 0x6017, + 0x0014, 0x6003, 0x000c, 0x1078, 0x484d, 0x007c, 0x1078, 0x4754, + 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, 0x484d, 0x007c, 0xa182, + 0x008c, 0x00c8, 0x5f19, 0xa182, 0x0085, 0x0048, 0x5f19, 0x0079, + 0x5f1c, 0x1078, 0x55d5, 0x007c, 0x5f23, 0x5f23, 0x5f23, 0x5f23, + 0x5f25, 0x5f44, 0x5f23, 0x1078, 0x1286, 0x0d7e, 0x1078, 0x62f0, + 0x1078, 0x61dc, 0x0040, 0x5f40, 0x6010, 0x2068, 0x6837, 0x0103, + 0x6850, 0xd0b4, 0x0040, 0x5f38, 0x684b, 0x0006, 0x0078, 0x5f3c, + 0x684b, 0x0005, 0x1078, 0x63a3, 0x6847, 0x0000, 0x1078, 0x36ec, + 0x1078, 0x55a1, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, + 0x61dc, 0x0040, 0x5f5f, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, + 0x5f55, 0x684b, 0x0006, 0x0078, 0x5f59, 0x684b, 0x0005, 0x1078, + 0x63a3, 0x6847, 0x0000, 0x1078, 0x36ec, 0x1078, 0x62f0, 0x0d7f, + 0x1078, 0x55a1, 0x007c, 0x1078, 0x4754, 0x1078, 0x55a1, 0x1078, + 0x484d, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, + 0xa182, 0x0101, 0x00c8, 0x5f76, 0x0078, 0x5f78, 0x2009, 0x0100, + 0x2130, 0x2069, 0x7398, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, + 0xaf90, 0x001d, 0x1078, 0x5fd2, 0xa6b2, 0x0020, 0x7804, 0xa06d, + 0x0040, 0x5f8c, 0x1078, 0x1309, 0x1078, 0x12e0, 0x0040, 0x5fb6, + 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, + 0x003d, 0x00c8, 0x5fa2, 0x2608, 0xad90, 0x000f, 0x1078, 0x5fd2, + 0x0078, 0x5fb6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, + 0x000f, 0x1078, 0x5fd2, 0x0078, 0x5f8c, 0x0f7f, 0x852f, 0xa5ad, + 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x5fbb, 0x0f7f, 0x852f, + 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, + 0x8dff, 0x0040, 0x5fd0, 0x6804, 0xa07d, 0x0040, 0x5fce, 0x6807, + 0x0000, 0x1078, 0x36ec, 0x2f68, 0x0078, 0x5fc3, 0x1078, 0x36ec, + 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x5fd8, 0x8108, + 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, + 0x5fda, 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, + 0x0007, 0x1079, 0x5fed, 0x127f, 0x007c, 0x5ffc, 0x5ff5, 0x5ff7, + 0x6015, 0x5ff5, 0x5ff7, 0x5ff7, 0x5ff7, 0x1078, 0x1286, 0xa006, + 0x007c, 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, + 0x61dc, 0x0040, 0x6012, 0xa00e, 0x2001, 0x0005, 0x1078, 0x377c, + 0x1078, 0x63a3, 0x1078, 0x36ec, 0x1078, 0x55a1, 0xa085, 0x0001, + 0x0d7f, 0x007c, 0xa006, 0x0078, 0x6010, 0x6000, 0xa08a, 0x0010, + 0x10c8, 0x1286, 0x1079, 0x601d, 0x007c, 0x602d, 0x604a, 0x602f, + 0x605b, 0x6046, 0x602d, 0x5ff7, 0x5ffc, 0x5ffc, 0x5ff7, 0x5ff7, + 0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x1078, 0x1286, 0x0d7e, + 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x6038, 0x1078, 0x63a3, + 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, + 0x43f8, 0x1078, 0x484d, 0xa085, 0x0001, 0x007c, 0x1078, 0x1627, + 0x0078, 0x602f, 0x0e7e, 0x2071, 0x70b6, 0x7024, 0xac06, 0x00c0, + 0x6053, 0x1078, 0x5075, 0x1078, 0x4fe3, 0x0e7f, 0x00c0, 0x602f, + 0x1078, 0x5ff7, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x70b6, 0x703c, + 0xac06, 0x00c0, 0x6067, 0x2019, 0x0000, 0x1078, 0x5107, 0x1078, + 0x53e3, 0x0e7f, 0x037f, 0x00c0, 0x602f, 0x1078, 0x5ff7, 0x007c, + 0x0c7e, 0x601c, 0xa084, 0x0007, 0x1079, 0x6078, 0x0c7f, 0x007c, + 0x6086, 0x60e3, 0x6180, 0x608a, 0x6086, 0x6086, 0x6a30, 0x55a1, + 0x1078, 0x632a, 0x00c0, 0x6086, 0x1078, 0x579c, 0x007c, 0x6017, + 0x0001, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1286, 0x1079, + 0x6092, 0x007c, 0x60a2, 0x60a4, 0x60c4, 0x60d6, 0x60d6, 0x60a2, + 0x6086, 0x6086, 0x6086, 0x60d6, 0x60d6, 0x60a2, 0x60a2, 0x60a2, + 0x60a2, 0x60e0, 0x1078, 0x1286, 0x0e7e, 0x6010, 0x2070, 0x7050, + 0xc0b5, 0x7052, 0x2071, 0x70b6, 0x7024, 0xac06, 0x0040, 0x60c0, + 0x1078, 0x4fe3, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, + 0x6017, 0x0014, 0x1078, 0x43f8, 0x1078, 0x484d, 0x0e7f, 0x007c, + 0x6017, 0x0001, 0x0078, 0x60be, 0x0d7e, 0x6010, 0x2068, 0x6850, + 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, + 0x0002, 0x1078, 0x43f8, 0x1078, 0x484d, 0x007c, 0x0d7e, 0x6017, + 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c, + 0x1078, 0x55a1, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1286, + 0x1079, 0x60eb, 0x007c, 0x60fb, 0x6087, 0x60fd, 0x60fb, 0x60fb, + 0x60fb, 0x60fb, 0x60fb, 0x6080, 0x6080, 0x60fb, 0x60fb, 0x60fb, + 0x60fb, 0x60fb, 0x60fb, 0x1078, 0x1286, 0x0d7e, 0x6018, 0x2068, + 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, 0x10c8, 0x1286, + 0x1079, 0x610b, 0x007c, 0x6117, 0x6132, 0x6117, 0x6132, 0x6117, + 0x6132, 0x6119, 0x6122, 0x6117, 0x6132, 0x6117, 0x6127, 0x1078, + 0x1286, 0x6004, 0xa08e, 0x0004, 0x0040, 0x6129, 0xa08e, 0x0002, + 0x0040, 0x6129, 0x6004, 0x1078, 0x632a, 0x0040, 0x617c, 0x1078, + 0x2174, 0x1078, 0x632a, 0x00c0, 0x612f, 0x1078, 0x579c, 0x1078, + 0x55a1, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040, + 0x616c, 0xa186, 0x0002, 0x00c0, 0x6157, 0x6018, 0x2068, 0x6840, + 0xa084, 0x00ff, 0xa005, 0x0040, 0x6157, 0x8001, 0x6842, 0x6013, + 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x553b, 0x0040, + 0x6157, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x616c, 0x0d7f, + 0x0c7f, 0x1078, 0x632a, 0x00c0, 0x615f, 0x1078, 0x579c, 0x1078, + 0x2174, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x2192, 0x127f, + 0x0e7f, 0x1078, 0x55a1, 0x007c, 0x2001, 0x0002, 0x1078, 0x3443, + 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4445, 0x1078, 0x484d, + 0x0d7f, 0x0c7f, 0x0078, 0x616b, 0x1078, 0x579c, 0x0078, 0x612f, + 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1286, 0x1079, 0x6188, 0x007c, + 0x6198, 0x6198, 0x6198, 0x6198, 0x6198, 0x6198, 0x6198, 0x6198, + 0x6198, 0x6086, 0x6198, 0x6087, 0x619a, 0x6087, 0x61a3, 0x6198, + 0x1078, 0x1286, 0x6007, 0x008b, 0x6003, 0x000d, 0x1078, 0x43f8, + 0x1078, 0x484d, 0x007c, 0x1078, 0x62f0, 0x1078, 0x61dc, 0x0040, + 0x61c5, 0x1078, 0x2174, 0x0d7e, 0x1078, 0x61dc, 0x0040, 0x61b8, + 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x36ec, + 0x0d7f, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, + 0x4445, 0x1078, 0x484d, 0x0078, 0x61c7, 0x1078, 0x55a1, 0x007c, + 0xa284, 0x0007, 0x00c0, 0x61d9, 0xa282, 0x7500, 0x0048, 0x61d9, + 0x2001, 0x6f15, 0x2004, 0xa202, 0x00c8, 0x61d9, 0xa085, 0x0001, + 0x007c, 0xa006, 0x0078, 0x61d8, 0x027e, 0x0e7e, 0x2071, 0x6f00, + 0x6210, 0x7058, 0xa202, 0x0048, 0x61ee, 0x705c, 0xa202, 0x00c8, + 0x61ee, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, 0xa006, 0x0078, + 0x61eb, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, 0x2091, 0x8000, + 0x2061, 0x7500, 0x2071, 0x6f00, 0x7344, 0x7060, 0xa302, 0x00c8, + 0x6217, 0x601c, 0xa206, 0x00c0, 0x620f, 0x1078, 0x632a, 0x00c0, + 0x620b, 0x1078, 0x579c, 0x0c7e, 0x1078, 0x55a1, 0x0c7f, 0xace0, + 0x0008, 0x7054, 0xac02, 0x00c8, 0x6217, 0x0078, 0x61fc, 0x127f, + 0x007f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, + 0x2091, 0x8000, 0x0c7e, 0x1078, 0x553b, 0x057f, 0x0040, 0x6236, + 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, 0x004b, 0x1078, 0x55c8, + 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, + 0x6232, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, + 0x1078, 0x553b, 0x057f, 0x0040, 0x6260, 0x6013, 0x0000, 0x651a, + 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, 0x3618, 0x0c7f, 0x1078, + 0x4535, 0x1078, 0x4478, 0x2c08, 0x1078, 0x6bca, 0x2009, 0x004c, + 0x1078, 0x55c8, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, + 0xa006, 0x0078, 0x625c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, + 0x62a0, 0x0c7e, 0x1078, 0x553b, 0x057f, 0x0040, 0x628b, 0x6612, + 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, + 0x3618, 0x0c7f, 0x1078, 0x4535, 0x1078, 0x4478, 0x2c08, 0x1078, + 0x6bca, 0x2009, 0x004d, 0x1078, 0x55c8, 0xa085, 0x0001, 0x127f, + 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6287, 0x0c7e, 0x057e, + 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x553b, 0x057f, + 0x0040, 0x62b6, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, + 0x0c7e, 0x2560, 0x1078, 0x3618, 0x0c7f, 0x1078, 0x4535, 0x1078, + 0x4478, 0x2c08, 0x1078, 0x6bca, 0x2009, 0x004e, 0x1078, 0x55c8, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, - 0x69ba, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, - 0x1078, 0x5b4e, 0x057f, 0x0040, 0x69e9, 0x6612, 0x651a, 0x601f, - 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x3958, 0x0c7f, - 0x1078, 0x4914, 0x1078, 0x4857, 0x2c08, 0x1078, 0x7326, 0x2009, - 0x004e, 0x1078, 0x5bdb, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x69e5, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x5b4e, 0x017f, 0x0040, 0x6a05, 0x660a, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x5bdb, - 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6a02, - 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5b4e, 0x017f, - 0x0040, 0x6a21, 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, - 0x2009, 0x0021, 0x1078, 0x5bdb, 0xa085, 0x0001, 0x127f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x6a1e, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x5b4e, 0x017f, 0x0040, 0x6a3c, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078, 0x5bdb, 0xa085, - 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6a39, 0x027e, - 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x6a49, 0x8211, - 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000, 0x601f, 0x0007, - 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x7652, - 0x2634, 0xd6e4, 0x0040, 0x6a61, 0x6618, 0x2660, 0x6e44, 0x1078, - 0x3890, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, - 0xa08e, 0x0002, 0x0040, 0x6a76, 0xa08e, 0x0003, 0x0040, 0x6a76, - 0xa08e, 0x0004, 0x0040, 0x6a76, 0xa085, 0x0001, 0x017f, 0x007f, - 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000, 0x0040, 0x6a8e, - 0xa08e, 0x001f, 0x0040, 0x6a8e, 0xa08e, 0x0028, 0x0040, 0x6a8e, - 0xa08e, 0x0029, 0x0040, 0x6a8e, 0xa085, 0x0001, 0x017f, 0x007f, - 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5b4e, - 0x017f, 0x0040, 0x6aab, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, - 0x1078, 0x228f, 0x2009, 0x0028, 0x1078, 0x5bdb, 0xa085, 0x0001, - 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6aa8, 0xa186, 0x0015, - 0x00c0, 0x6ac3, 0x2011, 0x761e, 0x2204, 0xa086, 0x0074, 0x00c0, - 0x6ac3, 0x1078, 0x6079, 0x6003, 0x0001, 0x6007, 0x0029, 0x1078, - 0x4824, 0x0078, 0x6ac7, 0x1078, 0x5e09, 0x1078, 0x5bb4, 0x007c, - 0xa186, 0x0015, 0x00c0, 0x6ae5, 0x2011, 0x761e, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x6ae5, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3853, - 0x0d7f, 0x1078, 0x6083, 0x00c0, 0x6ae5, 0x2001, 0x0006, 0x1078, - 0x3783, 0x1078, 0x5c5f, 0x0078, 0x6ae9, 0x1078, 0x5e09, 0x1078, - 0x5bb4, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0, 0x6af1, 0x1078, - 0x6af2, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c, 0x067e, 0x6000, - 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6b00, 0x067f, 0x007c, - 0x6b10, 0x6ce7, 0x6dc8, 0x6b10, 0x6b10, 0x6b10, 0x6b10, 0x6b10, - 0x6b4a, 0x6e36, 0x6b10, 0x6b10, 0x6b10, 0x6b10, 0x6b10, 0x6b10, - 0x1078, 0x12d5, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, - 0x1079, 0x6b1c, 0x067f, 0x007c, 0x6b2c, 0x7137, 0x6b2c, 0x6b2c, - 0x6b2c, 0x6b2c, 0x6b2c, 0x6b2c, 0x7112, 0x7181, 0x6b2c, 0x6b2c, - 0x6b2c, 0x6b2c, 0x6b2c, 0x6b2c, 0x1078, 0x12d5, 0x067e, 0x6000, - 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6b38, 0x067f, 0x007c, - 0x6b48, 0x6f83, 0x6ff5, 0x7017, 0x7063, 0x6b48, 0x6b48, 0x70bd, - 0x6e42, 0x70fa, 0x70fe, 0x6b48, 0x6b48, 0x6b48, 0x6b48, 0x6b48, - 0x1078, 0x12d5, 0xa1b2, 0x0030, 0x10c8, 0x12d5, 0x2100, 0x0079, - 0x6b51, 0x6b81, 0x6c5e, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, - 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, - 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, 0x6b81, - 0x6b83, 0x6bb2, 0x6bbd, 0x6be5, 0x6beb, 0x6c1f, 0x6c57, 0x6b81, - 0x6b81, 0x6c66, 0x6b81, 0x6b81, 0x6c6d, 0x6c74, 0x6b81, 0x6b81, - 0x6b81, 0x6b81, 0x6b81, 0x6c91, 0x6b81, 0x6b81, 0x6c9c, 0x6b81, - 0x6b81, 0x1078, 0x12d5, 0x1078, 0x39d8, 0x6618, 0x0c7e, 0x2660, - 0x1078, 0x37e9, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, - 0xa082, 0x0006, 0x0048, 0x6ba4, 0x1078, 0x7262, 0x00c0, 0x6bdf, - 0x1078, 0x7200, 0x00c0, 0x6ba0, 0x6007, 0x0008, 0x0078, 0x6c59, - 0x6007, 0x0009, 0x0078, 0x6c59, 0x1078, 0x73f7, 0x0040, 0x6bae, - 0x1078, 0x7262, 0x0040, 0x6b98, 0x0078, 0x6bdf, 0x6013, 0x1900, - 0x0078, 0x6ba0, 0x6106, 0x1078, 0x71c2, 0x6007, 0x0006, 0x0078, - 0x6c59, 0x6007, 0x0007, 0x0078, 0x6c59, 0x0d7e, 0x6618, 0x2668, - 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6bcf, - 0xa686, 0x0004, 0x0040, 0x6bcf, 0x0d7f, 0x0078, 0x6bdf, 0x1078, - 0x72c0, 0x00c0, 0x6bda, 0x1078, 0x3853, 0x6007, 0x000a, 0x0d7f, - 0x0078, 0x6c59, 0x6007, 0x000b, 0x0d7f, 0x0078, 0x6c59, 0x1078, - 0x228f, 0x6007, 0x0001, 0x0078, 0x6c59, 0x1078, 0x228f, 0x6007, - 0x000c, 0x0078, 0x6c59, 0x1078, 0x39d8, 0x6618, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6c0c, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6bdf, 0x1078, 0x72cf, - 0x00c0, 0x6c06, 0x6007, 0x000e, 0x0078, 0x6c59, 0x1078, 0x228f, - 0x6007, 0x000f, 0x0078, 0x6c59, 0x1078, 0x73f7, 0x0040, 0x6c19, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6bfe, 0x0078, - 0x6bdf, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x6c59, 0x1078, - 0x39d8, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, - 0x0006, 0x0048, 0x6c44, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x00c0, 0x6bdf, 0x1078, 0x72fa, 0x00c0, 0x6c3e, 0x1078, 0x7200, - 0x00c0, 0x6c3e, 0x6007, 0x0010, 0x0078, 0x6c59, 0x1078, 0x228f, - 0x6007, 0x0011, 0x0078, 0x6c59, 0x1078, 0x73f7, 0x0040, 0x6c51, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6c32, 0x0078, - 0x6bdf, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x6c59, 0x6007, - 0x0012, 0x6003, 0x0001, 0x1078, 0x4824, 0x007c, 0x6007, 0x0001, - 0x6003, 0x0001, 0x1078, 0x4824, 0x0078, 0x6c5d, 0x6007, 0x0020, - 0x6003, 0x0001, 0x1078, 0x4824, 0x007c, 0x6007, 0x0023, 0x6003, - 0x0001, 0x1078, 0x4824, 0x007c, 0x017e, 0x027e, 0x2011, 0x7b88, - 0x2214, 0x2c08, 0x1078, 0x74bf, 0x00c0, 0x6c85, 0x2160, 0x6007, - 0x0026, 0x6013, 0x1700, 0x0078, 0x6c8a, 0x1078, 0x5bb4, 0x2160, - 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x4824, 0x027f, 0x017f, - 0x007c, 0x6106, 0x1078, 0x6ca3, 0x6007, 0x002b, 0x0078, 0x6c59, - 0x6007, 0x002c, 0x0078, 0x6c59, 0x6106, 0x1078, 0x6ca8, 0x6007, - 0x002e, 0x0078, 0x6c59, 0x0d7e, 0x1078, 0x6cce, 0x0d7f, 0x007c, - 0x0d7e, 0x1078, 0x6cdd, 0x00c0, 0x6cc7, 0x680c, 0xa08c, 0xff00, - 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4, 0x0040, 0x6cbc, - 0x2009, 0x0001, 0x0078, 0x6cc3, 0xd1ec, 0x0040, 0x6cc7, 0x2009, - 0x0000, 0xa294, 0x00ff, 0x1078, 0x22d3, 0x0078, 0x6ccb, 0xa085, - 0x0001, 0x0078, 0x6ccc, 0xa006, 0x0d7f, 0x007c, 0x2069, 0x7b8d, - 0x6800, 0xa082, 0x0010, 0x00c8, 0x6cdb, 0x6013, 0x0000, 0xa085, - 0x0001, 0x0078, 0x6cdc, 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, - 0x7b8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x007c, 0x6004, - 0xa0b2, 0x0030, 0x10c8, 0x12d5, 0xa1b6, 0x0013, 0x00c0, 0x6cf3, - 0x2008, 0x0079, 0x6d06, 0xa1b6, 0x0027, 0x0040, 0x6cfb, 0xa1b6, - 0x0014, 0x10c0, 0x12d5, 0x2001, 0x0007, 0x1078, 0x3791, 0x1078, - 0x4b33, 0x1078, 0x6a4c, 0x1078, 0x4c2c, 0x007c, 0x6d36, 0x6d38, - 0x6d36, 0x6d36, 0x6d36, 0x6d38, 0x6d40, 0x6da3, 0x6d66, 0x6da3, - 0x6d7a, 0x6da3, 0x6d40, 0x6da3, 0x6d9b, 0x6da3, 0x6d9b, 0x6da3, - 0x6da3, 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6d36, - 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6d36, 0x6da3, 0x6d36, - 0x6d36, 0x6da3, 0x6d36, 0x6da3, 0x6da3, 0x6d36, 0x6d36, 0x6d36, - 0x6d36, 0x6da3, 0x6da3, 0x6d36, 0x6da3, 0x6da3, 0x1078, 0x12d5, - 0x1078, 0x4b33, 0x6003, 0x0002, 0x1078, 0x4c2c, 0x0078, 0x6da9, - 0x0f7e, 0x2079, 0x7651, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x6da3, - 0x2001, 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, - 0x1078, 0x4b33, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, - 0x1078, 0x4824, 0x1078, 0x4c2c, 0x0c7e, 0x6118, 0x2160, 0x2009, - 0x0001, 0x1078, 0x452d, 0x0c7f, 0x0078, 0x6da9, 0x6618, 0x0d7e, + 0x62b2, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x553b, + 0x017f, 0x0040, 0x62d2, 0x660a, 0x611a, 0x601f, 0x0001, 0x2d00, + 0x6012, 0x2009, 0x001f, 0x1078, 0x55c8, 0xa085, 0x0001, 0x127f, + 0x0c7f, 0x007c, 0xa006, 0x0078, 0x62cf, 0x0c7e, 0x127e, 0x2091, + 0x8000, 0x0c7e, 0x1078, 0x553b, 0x017f, 0x0040, 0x62ed, 0x611a, + 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078, 0x55c8, + 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x62ea, + 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x62fa, + 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000, 0x601f, + 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, + 0x6f52, 0x2634, 0xd6e4, 0x0040, 0x6312, 0x6618, 0x2660, 0x6e44, + 0x1078, 0x3550, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, + 0x6004, 0xa08e, 0x0002, 0x0040, 0x6327, 0xa08e, 0x0003, 0x0040, + 0x6327, 0xa08e, 0x0004, 0x0040, 0x6327, 0xa085, 0x0001, 0x017f, + 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000, 0x0040, + 0x633f, 0xa08e, 0x001f, 0x0040, 0x633f, 0xa08e, 0x0028, 0x0040, + 0x633f, 0xa08e, 0x0029, 0x0040, 0x633f, 0xa085, 0x0001, 0x017f, + 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, + 0x553b, 0x017f, 0x0040, 0x635c, 0x611a, 0x601f, 0x0001, 0x2d00, + 0x6012, 0x1078, 0x2174, 0x2009, 0x0028, 0x1078, 0x55c8, 0xa085, + 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6359, 0xa186, + 0x0015, 0x00c0, 0x6374, 0x2011, 0x6f1c, 0x2204, 0xa086, 0x0074, + 0x00c0, 0x6374, 0x1078, 0x597f, 0x6003, 0x0001, 0x6007, 0x0029, + 0x1078, 0x4445, 0x0078, 0x6378, 0x1078, 0x579c, 0x1078, 0x55a1, + 0x007c, 0xa186, 0x0015, 0x00c0, 0x6396, 0x2011, 0x6f1c, 0x2204, + 0xa086, 0x0014, 0x00c0, 0x6396, 0x0d7e, 0x6018, 0x2068, 0x1078, + 0x3513, 0x0d7f, 0x1078, 0x5989, 0x00c0, 0x6396, 0x2001, 0x0006, + 0x1078, 0x3443, 0x1078, 0x564b, 0x0078, 0x639a, 0x1078, 0x579c, + 0x1078, 0x55a1, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0, 0x63a2, + 0x1078, 0x63a3, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c, 0x067e, + 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1286, 0x1079, 0x63b1, 0x067f, + 0x007c, 0x63c1, 0x658f, 0x6670, 0x63c1, 0x63c1, 0x63c1, 0x63c1, + 0x63c1, 0x63fb, 0x66d6, 0x63c1, 0x63c1, 0x63c1, 0x63c1, 0x63c1, + 0x63c1, 0x1078, 0x1286, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, + 0x1286, 0x1079, 0x63cd, 0x067f, 0x007c, 0x63dd, 0x69df, 0x63dd, + 0x63dd, 0x63dd, 0x63dd, 0x63dd, 0x63dd, 0x69ba, 0x6a29, 0x63dd, + 0x63dd, 0x63dd, 0x63dd, 0x63dd, 0x63dd, 0x1078, 0x1286, 0x067e, + 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1286, 0x1079, 0x63e9, 0x067f, + 0x007c, 0x63f9, 0x6827, 0x6899, 0x68bb, 0x690b, 0x63f9, 0x63f9, + 0x6965, 0x66e2, 0x69a2, 0x69a6, 0x63f9, 0x63f9, 0x63f9, 0x63f9, + 0x63f9, 0x1078, 0x1286, 0xa1b2, 0x0030, 0x10c8, 0x1286, 0x2100, + 0x0079, 0x6402, 0x6432, 0x650f, 0x6432, 0x6432, 0x6432, 0x6432, + 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, + 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, 0x6432, + 0x6432, 0x6434, 0x6463, 0x646e, 0x6496, 0x649c, 0x64d0, 0x6508, + 0x6432, 0x6432, 0x6517, 0x6432, 0x6432, 0x6432, 0x651e, 0x6432, + 0x6432, 0x6432, 0x6432, 0x6432, 0x6539, 0x6432, 0x6432, 0x6544, + 0x6432, 0x6432, 0x1078, 0x1286, 0x1078, 0x3698, 0x6618, 0x0c7e, + 0x2660, 0x1078, 0x34a9, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, + 0x00ff, 0xa082, 0x0006, 0x0048, 0x6455, 0x1078, 0x6b09, 0x00c0, + 0x6490, 0x1078, 0x6aa7, 0x00c0, 0x6451, 0x6007, 0x0008, 0x0078, + 0x650a, 0x6007, 0x0009, 0x0078, 0x650a, 0x1078, 0x6c9b, 0x0040, + 0x645f, 0x1078, 0x6b09, 0x0040, 0x6449, 0x0078, 0x6490, 0x6013, + 0x1900, 0x0078, 0x6451, 0x6106, 0x1078, 0x6a6a, 0x6007, 0x0006, + 0x0078, 0x650a, 0x6007, 0x0007, 0x0078, 0x650a, 0x0d7e, 0x6618, + 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, + 0x6480, 0xa686, 0x0004, 0x0040, 0x6480, 0x0d7f, 0x0078, 0x6490, + 0x1078, 0x6b67, 0x00c0, 0x648b, 0x1078, 0x3513, 0x6007, 0x000a, + 0x0d7f, 0x0078, 0x650a, 0x6007, 0x000b, 0x0d7f, 0x0078, 0x650a, + 0x1078, 0x2174, 0x6007, 0x0001, 0x0078, 0x650a, 0x1078, 0x2174, + 0x6007, 0x000c, 0x0078, 0x650a, 0x1078, 0x3698, 0x6618, 0xa6b0, + 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x64bd, + 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6490, 0x1078, + 0x6b76, 0x00c0, 0x64b7, 0x6007, 0x000e, 0x0078, 0x650a, 0x1078, + 0x2174, 0x6007, 0x000f, 0x0078, 0x650a, 0x1078, 0x6c9b, 0x0040, + 0x64ca, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x64af, + 0x0078, 0x6490, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x650a, + 0x1078, 0x3698, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, + 0xa082, 0x0006, 0x0048, 0x64f5, 0xa6b4, 0xff00, 0x8637, 0xa686, + 0x0006, 0x00c0, 0x6490, 0x1078, 0x6ba2, 0x00c0, 0x64ef, 0x1078, + 0x6aa7, 0x00c0, 0x64ef, 0x6007, 0x0010, 0x0078, 0x650a, 0x1078, + 0x2174, 0x6007, 0x0011, 0x0078, 0x650a, 0x1078, 0x6c9b, 0x0040, + 0x6502, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x64e3, + 0x0078, 0x6490, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x650a, + 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x4445, 0x007c, 0x6007, + 0x0001, 0x6003, 0x0001, 0x1078, 0x4445, 0x0078, 0x650e, 0x6007, + 0x0020, 0x6003, 0x0001, 0x1078, 0x4445, 0x007c, 0x017e, 0x027e, + 0x2011, 0x7388, 0x2214, 0x2c08, 0x1078, 0x6d63, 0x00c0, 0x652f, + 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x6532, 0x2160, + 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x4445, 0x027f, 0x017f, + 0x007c, 0x6106, 0x1078, 0x654b, 0x6007, 0x002b, 0x0078, 0x650a, + 0x6007, 0x002c, 0x0078, 0x650a, 0x6106, 0x1078, 0x6550, 0x6007, + 0x002e, 0x0078, 0x650a, 0x0d7e, 0x1078, 0x6576, 0x0d7f, 0x007c, + 0x0d7e, 0x1078, 0x6585, 0x00c0, 0x656f, 0x680c, 0xa08c, 0xff00, + 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4, 0x0040, 0x6564, + 0x2009, 0x0001, 0x0078, 0x656b, 0xd1ec, 0x0040, 0x656f, 0x2009, + 0x0000, 0xa294, 0x00ff, 0x1078, 0x21a3, 0x0078, 0x6573, 0xa085, + 0x0001, 0x0078, 0x6574, 0xa006, 0x0d7f, 0x007c, 0x2069, 0x738d, + 0x6800, 0xa082, 0x0010, 0x00c8, 0x6583, 0x6013, 0x0000, 0xa085, + 0x0001, 0x0078, 0x6584, 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, + 0x738c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x007c, 0x6004, + 0xa0b2, 0x0030, 0x10c8, 0x1286, 0xa1b6, 0x0013, 0x00c0, 0x659b, + 0x2008, 0x0079, 0x65ae, 0xa1b6, 0x0027, 0x0040, 0x65a3, 0xa1b6, + 0x0014, 0x10c0, 0x1286, 0x2001, 0x0007, 0x1078, 0x3451, 0x1078, + 0x4754, 0x1078, 0x62fd, 0x1078, 0x484d, 0x007c, 0x65de, 0x65e0, + 0x65de, 0x65de, 0x65de, 0x65e0, 0x65e8, 0x664b, 0x660e, 0x664b, + 0x6622, 0x664b, 0x65e8, 0x664b, 0x6643, 0x664b, 0x6643, 0x664b, + 0x664b, 0x65de, 0x65de, 0x65de, 0x65de, 0x65de, 0x65de, 0x65de, + 0x65de, 0x65de, 0x65de, 0x65de, 0x65de, 0x65de, 0x664b, 0x65de, + 0x65de, 0x65de, 0x65de, 0x664b, 0x664b, 0x65de, 0x65de, 0x65de, + 0x65de, 0x664b, 0x664b, 0x65de, 0x664b, 0x664b, 0x1078, 0x1286, + 0x1078, 0x4754, 0x6003, 0x0002, 0x1078, 0x484d, 0x0078, 0x6651, + 0x0f7e, 0x2079, 0x6f51, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x664b, + 0x2001, 0x0000, 0x1078, 0x342f, 0x2001, 0x0002, 0x1078, 0x3443, + 0x1078, 0x4754, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, + 0x1078, 0x4445, 0x1078, 0x484d, 0x0c7e, 0x6118, 0x2160, 0x2009, + 0x0001, 0x1078, 0x4160, 0x0c7f, 0x0078, 0x6651, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x6da3, 0xa686, 0x0004, 0x0040, 0x6da3, 0x2001, 0x0004, - 0x0078, 0x6da1, 0x2001, 0x7600, 0x2004, 0xa086, 0x0003, 0x00c0, - 0x6d83, 0x1078, 0x2d80, 0x2001, 0x0006, 0x1078, 0x6daa, 0x6618, + 0x0040, 0x664b, 0xa686, 0x0004, 0x0040, 0x664b, 0x2001, 0x0004, + 0x0078, 0x6649, 0x2001, 0x6f00, 0x2004, 0xa086, 0x0003, 0x00c0, + 0x662b, 0x1078, 0x2a40, 0x2001, 0x0006, 0x1078, 0x6652, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, - 0x0006, 0x0040, 0x6da3, 0x2001, 0x0006, 0x0078, 0x6da1, 0x2001, - 0x0004, 0x0078, 0x6da1, 0x2001, 0x0006, 0x1078, 0x6daa, 0x0078, - 0x6da3, 0x1078, 0x3791, 0x1078, 0x4b33, 0x1078, 0x5bb4, 0x1078, - 0x4c2c, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168, 0x6900, 0xd184, - 0x0040, 0x6dc5, 0x6104, 0xa18e, 0x000a, 0x00c0, 0x6dbd, 0x699c, - 0xd1a4, 0x00c0, 0x6dbd, 0x2001, 0x0007, 0x1078, 0x3783, 0x2001, - 0x0000, 0x1078, 0x376f, 0x1078, 0x22b1, 0x0d7f, 0x017f, 0x007c, + 0x0006, 0x0040, 0x664b, 0x2001, 0x0006, 0x0078, 0x6649, 0x2001, + 0x0004, 0x0078, 0x6649, 0x2001, 0x0006, 0x1078, 0x6652, 0x0078, + 0x664b, 0x1078, 0x3451, 0x1078, 0x4754, 0x1078, 0x55a1, 0x1078, + 0x484d, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168, 0x6900, 0xd184, + 0x0040, 0x666d, 0x6104, 0xa18e, 0x000a, 0x00c0, 0x6665, 0x699c, + 0xd1a4, 0x00c0, 0x6665, 0x2001, 0x0007, 0x1078, 0x3443, 0x2001, + 0x0000, 0x1078, 0x342f, 0x1078, 0x2192, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00, 0x8007, 0x0d7f, - 0xa0b2, 0x000c, 0x10c8, 0x12d5, 0xa1b6, 0x0015, 0x00c0, 0x6ddc, - 0x1079, 0x6de3, 0x0078, 0x6de2, 0xa1b6, 0x0016, 0x10c0, 0x12d5, - 0x1079, 0x6e1b, 0x007c, 0x5e93, 0x5e93, 0x5e93, 0x5e93, 0x5e93, - 0x5e93, 0x5e93, 0x6def, 0x5e93, 0x5e93, 0x5e93, 0x5e93, 0x0f7e, - 0x2079, 0x7651, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x6e0b, 0x2001, - 0x0000, 0x1078, 0x376f, 0x2001, 0x0002, 0x1078, 0x3783, 0x601f, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4824, 0x1078, - 0x4c2c, 0x0078, 0x6e1a, 0x2011, 0x7b83, 0x220c, 0x017e, 0x0c7e, - 0x1078, 0x37d7, 0x00c0, 0x6e1a, 0x1078, 0x35db, 0x0c7f, 0x017f, - 0x1078, 0x5bb4, 0x007c, 0x5e93, 0x5e93, 0x5e93, 0x5e93, 0x5e93, - 0x5e93, 0x5e93, 0x6e27, 0x5e93, 0x5e93, 0x5e93, 0x5e93, 0x1078, - 0x6076, 0x00c0, 0x6e33, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, - 0x4824, 0x0078, 0x6e35, 0x1078, 0x5bb4, 0x007c, 0x6004, 0xa08a, - 0x0030, 0x10c8, 0x12d5, 0x1078, 0x4b33, 0x1078, 0x6a4c, 0x1078, - 0x4c2c, 0x007c, 0xa182, 0x0040, 0x0079, 0x6e46, 0x6e56, 0x6e56, - 0x6e56, 0x6e56, 0x6e58, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, - 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x1078, 0x12d5, + 0xa0b2, 0x000c, 0x10c8, 0x1286, 0xa1b6, 0x0015, 0x00c0, 0x6684, + 0x1079, 0x668b, 0x0078, 0x668a, 0xa1b6, 0x0016, 0x10c0, 0x1286, + 0x1079, 0x66bb, 0x007c, 0x57f9, 0x57f9, 0x57f9, 0x57f9, 0x57f9, + 0x57f9, 0x57f9, 0x6697, 0x57f9, 0x57f9, 0x57f9, 0x57f9, 0x0f7e, + 0x2079, 0x6f51, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x66b3, 0x2001, + 0x0000, 0x1078, 0x342f, 0x2001, 0x0002, 0x1078, 0x3443, 0x601f, + 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4445, 0x1078, + 0x484d, 0x0078, 0x66ba, 0x2011, 0x7383, 0x220c, 0x1078, 0x329b, + 0x1078, 0x55a1, 0x007c, 0x57f9, 0x57f9, 0x57f9, 0x57f9, 0x57f9, + 0x57f9, 0x57f9, 0x66c7, 0x57f9, 0x57f9, 0x57f9, 0x57f9, 0x1078, + 0x597c, 0x00c0, 0x66d3, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, + 0x4445, 0x0078, 0x66d5, 0x1078, 0x55a1, 0x007c, 0x6004, 0xa08a, + 0x0030, 0x10c8, 0x1286, 0x1078, 0x4754, 0x1078, 0x62fd, 0x1078, + 0x484d, 0x007c, 0xa182, 0x0040, 0x0079, 0x66e6, 0x66f6, 0x66f6, + 0x66f6, 0x66f6, 0x66f8, 0x66f6, 0x66f6, 0x66f6, 0x66f6, 0x66f6, + 0x66f6, 0x66f6, 0x66f6, 0x66f6, 0x66f6, 0x66f6, 0x1078, 0x1286, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e, 0x6106, 0x2071, - 0x7b80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x6ec9, 0xa486, 0x2000, - 0x0040, 0x6e88, 0xa486, 0x0400, 0x0040, 0x6e88, 0x7130, 0xa18c, - 0x00ff, 0xa182, 0x0010, 0x00c8, 0x6f5b, 0x0c7e, 0x1078, 0x45be, - 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x6f3c, 0x1078, - 0x467c, 0x0040, 0x6f67, 0xa295, 0x0200, 0x6a02, 0x0078, 0x6e8e, - 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x4666, 0x1078, 0x132f, - 0x1040, 0x12d5, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, + 0x7380, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x6769, 0xa486, 0x2000, + 0x0040, 0x6728, 0xa486, 0x0400, 0x0040, 0x6728, 0x7130, 0xa18c, + 0x00ff, 0xa182, 0x0010, 0x00c8, 0x67fb, 0x0c7e, 0x1078, 0x41f1, + 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x67dc, 0x1078, + 0x42af, 0x0040, 0x6807, 0xa295, 0x0200, 0x6a02, 0x0078, 0x672e, + 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x4299, 0x1078, 0x12e0, + 0x1040, 0x1286, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0xa18c, 0x00ff, 0xa10d, 0x6946, 0x684f, - 0x0000, 0x6857, 0x0036, 0x1078, 0x3a2c, 0xa486, 0x2000, 0x00c0, - 0x6eb7, 0x2019, 0x0017, 0x1078, 0x7484, 0x0078, 0x6f29, 0xa486, - 0x0400, 0x00c0, 0x6ec1, 0x2019, 0x0002, 0x1078, 0x7484, 0x0078, - 0x6f29, 0xa486, 0x0200, 0x00c0, 0x6ec7, 0x1078, 0x7475, 0x0078, - 0x6f29, 0x7130, 0xa184, 0xff00, 0x00c0, 0x6f7b, 0xa18c, 0x00ff, - 0xa182, 0x0010, 0x00c8, 0x6f7b, 0x0c7e, 0x1078, 0x45be, 0x2c68, - 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x6f7f, 0xa284, 0x0300, - 0x00c0, 0x6f77, 0x6804, 0xa005, 0x0040, 0x6f67, 0x8001, 0x6806, - 0x6003, 0x0007, 0x1078, 0x1314, 0x0040, 0x6f30, 0x6013, 0x0000, + 0x0000, 0x6857, 0x0036, 0x1078, 0x36ec, 0xa486, 0x2000, 0x00c0, + 0x6757, 0x2019, 0x0017, 0x1078, 0x6d28, 0x0078, 0x67c9, 0xa486, + 0x0400, 0x00c0, 0x6761, 0x2019, 0x0002, 0x1078, 0x6d28, 0x0078, + 0x67c9, 0xa486, 0x0200, 0x00c0, 0x6767, 0x1078, 0x6d19, 0x0078, + 0x67c9, 0x7130, 0xa184, 0xff00, 0x00c0, 0x681f, 0xa18c, 0x00ff, + 0xa182, 0x0010, 0x00c8, 0x681f, 0x0c7e, 0x1078, 0x41f1, 0x2c68, + 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x6823, 0xa284, 0x0300, + 0x00c0, 0x681b, 0x6804, 0xa005, 0x0040, 0x6807, 0x8001, 0x6806, + 0x6003, 0x0007, 0x1078, 0x12c5, 0x0040, 0x67d0, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0xa10d, 0x6946, 0x6853, 0x003d, - 0x7044, 0xa084, 0x0003, 0xa086, 0x0002, 0x00c0, 0x6f0b, 0x684f, - 0x0040, 0x0078, 0x6f15, 0xa086, 0x0001, 0x00c0, 0x6f13, 0x684f, - 0x0080, 0x0078, 0x6f15, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, - 0x7b90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, - 0x00f0, 0x6f1b, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, - 0x3a2c, 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, - 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x47d7, - 0x1078, 0x4c2c, 0x0078, 0x6f29, 0x2069, 0x7b92, 0x2d04, 0xa084, - 0xff00, 0xa086, 0x1200, 0x00c0, 0x6f5b, 0x2069, 0x7b80, 0x686c, + 0x7044, 0xa084, 0x0003, 0xa086, 0x0002, 0x00c0, 0x67ab, 0x684f, + 0x0040, 0x0078, 0x67b5, 0xa086, 0x0001, 0x00c0, 0x67b3, 0x684f, + 0x0080, 0x0078, 0x67b5, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, + 0x7390, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, + 0x00f0, 0x67bb, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, + 0x36ec, 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, + 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x43f8, + 0x1078, 0x484d, 0x0078, 0x67c9, 0x2069, 0x7392, 0x2d04, 0xa084, + 0xff00, 0xa086, 0x1200, 0x00c0, 0x67fb, 0x2069, 0x7380, 0x686c, 0xa084, 0x00ff, 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, - 0x017f, 0x6003, 0x0001, 0x6007, 0x0043, 0x1078, 0x47d7, 0x1078, - 0x4c2c, 0x0078, 0x6f29, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, - 0x0041, 0x1078, 0x47d7, 0x1078, 0x4c2c, 0x0078, 0x6f29, 0x6013, - 0x0300, 0x0078, 0x6f6d, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, - 0x0041, 0x1078, 0x47d7, 0x1078, 0x4c2c, 0x0078, 0x6f29, 0x6013, - 0x0500, 0x0078, 0x6f6d, 0x6013, 0x0600, 0x0078, 0x6f3c, 0x6013, - 0x0200, 0x0078, 0x6f3c, 0xa186, 0x0013, 0x00c0, 0x6f95, 0x6004, - 0xa08a, 0x0040, 0x1048, 0x12d5, 0xa08a, 0x0050, 0x10c8, 0x12d5, - 0xa082, 0x0040, 0x2008, 0x0079, 0x6fc6, 0xa186, 0x0047, 0x00c0, - 0x6f9b, 0x0078, 0x6ff5, 0xa186, 0x0027, 0x0040, 0x6fa3, 0xa186, - 0x0014, 0x10c0, 0x12d5, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079, - 0x6fa9, 0x6fb9, 0x6fbb, 0x6fbb, 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, - 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, 0x6fb9, - 0x6fb9, 0x1078, 0x12d5, 0x2001, 0x0007, 0x1078, 0x3791, 0x1078, - 0x4b33, 0x1078, 0x6a4c, 0x1078, 0x4c2c, 0x007c, 0x6fd6, 0x6fe6, - 0x6fdf, 0x6fef, 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, - 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, 0x6fd6, 0x1078, 0x12d5, - 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, - 0x4b33, 0x6003, 0x0002, 0x1078, 0x4c2c, 0x007c, 0x1078, 0x4b33, - 0x1078, 0x463f, 0x1078, 0x5bb4, 0x1078, 0x4c2c, 0x007c, 0x1078, - 0x4b33, 0x2009, 0x0041, 0x0078, 0x70bd, 0xa182, 0x0040, 0x0079, - 0x6ff9, 0x7009, 0x700b, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, - 0x700c, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, - 0x7009, 0x1078, 0x12d5, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1572, 0x007c, 0xa182, - 0x0040, 0x0079, 0x701b, 0x702b, 0x702b, 0x702b, 0x702b, 0x702b, - 0x702b, 0x702b, 0x702b, 0x702b, 0x702d, 0x7050, 0x702b, 0x702b, - 0x702b, 0x702b, 0x7050, 0x1078, 0x12d5, 0x1078, 0x4bdb, 0x1078, - 0x4cec, 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x7043, - 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0040, 0x7049, 0x2009, 0x0041, - 0x0d7f, 0x0078, 0x70bd, 0x6003, 0x0007, 0x1078, 0x463f, 0x0d7f, - 0x007c, 0x1078, 0x463f, 0x1078, 0x5bb4, 0x0d7f, 0x0078, 0x7048, - 0x037e, 0x1078, 0x4bdb, 0x1078, 0x4cec, 0x6010, 0x0d7e, 0x2068, - 0x2019, 0x0004, 0x1078, 0x74a8, 0x1078, 0x6a4c, 0x6017, 0x0028, - 0x0d7f, 0x037f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x7071, 0x6004, - 0xa086, 0x0042, 0x10c0, 0x12d5, 0x1078, 0x4b33, 0x1078, 0x4c2c, - 0x007c, 0xa186, 0x0027, 0x0040, 0x7079, 0xa186, 0x0014, 0x00c0, - 0x7089, 0x6004, 0xa086, 0x0042, 0x10c0, 0x12d5, 0x2001, 0x0007, - 0x1078, 0x3791, 0x1078, 0x4b33, 0x1078, 0x6a4c, 0x1078, 0x4c2c, - 0x007c, 0xa182, 0x0040, 0x0079, 0x708d, 0x709d, 0x709d, 0x709d, - 0x709d, 0x709d, 0x709d, 0x709d, 0x709f, 0x70ab, 0x709d, 0x709d, - 0x709d, 0x709d, 0x709d, 0x709d, 0x709d, 0x1078, 0x12d5, 0x037e, - 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1572, + 0x017f, 0x6003, 0x0001, 0x6007, 0x0043, 0x1078, 0x43f8, 0x1078, + 0x484d, 0x0078, 0x67c9, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, + 0x0041, 0x1078, 0x43f8, 0x1078, 0x484d, 0x0078, 0x67c9, 0xa284, + 0x0004, 0x00c0, 0x680f, 0x6013, 0x0300, 0x0078, 0x6811, 0x6013, + 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x43f8, 0x1078, + 0x484d, 0x0078, 0x67c9, 0x6013, 0x0500, 0x0078, 0x6811, 0x6013, + 0x0600, 0x0078, 0x67dc, 0x6013, 0x0200, 0x0078, 0x67dc, 0xa186, + 0x0013, 0x00c0, 0x6839, 0x6004, 0xa08a, 0x0040, 0x1048, 0x1286, + 0xa08a, 0x0050, 0x10c8, 0x1286, 0xa082, 0x0040, 0x2008, 0x0079, + 0x686a, 0xa186, 0x0047, 0x00c0, 0x683f, 0x0078, 0x6899, 0xa186, + 0x0027, 0x0040, 0x6847, 0xa186, 0x0014, 0x10c0, 0x1286, 0x6004, + 0xa082, 0x0040, 0x2008, 0x0079, 0x684d, 0x685d, 0x685f, 0x685f, + 0x685d, 0x685d, 0x685d, 0x685d, 0x685d, 0x685d, 0x685d, 0x685d, + 0x685d, 0x685d, 0x685d, 0x685d, 0x685d, 0x1078, 0x1286, 0x2001, + 0x0007, 0x1078, 0x3451, 0x1078, 0x4754, 0x1078, 0x62fd, 0x1078, + 0x484d, 0x007c, 0x687a, 0x688a, 0x6883, 0x6893, 0x687a, 0x687a, + 0x687a, 0x687a, 0x687a, 0x687a, 0x687a, 0x687a, 0x687a, 0x687a, + 0x687a, 0x687a, 0x1078, 0x1286, 0x6010, 0xa088, 0x0013, 0x2104, + 0xa085, 0x0400, 0x200a, 0x1078, 0x4754, 0x6003, 0x0002, 0x1078, + 0x484d, 0x007c, 0x1078, 0x4754, 0x1078, 0x4272, 0x1078, 0x55a1, + 0x1078, 0x484d, 0x007c, 0x1078, 0x4754, 0x2009, 0x0041, 0x0078, + 0x6965, 0xa182, 0x0040, 0x0079, 0x689d, 0x68ad, 0x68af, 0x68ad, + 0x68ad, 0x68ad, 0x68ad, 0x68ad, 0x68b0, 0x68ad, 0x68ad, 0x68ad, + 0x68ad, 0x68ad, 0x68ad, 0x68ad, 0x68ad, 0x1078, 0x1286, 0x007c, + 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, + 0x1078, 0x1523, 0x007c, 0xa182, 0x0040, 0x0079, 0x68bf, 0x68cf, + 0x68cf, 0x68cf, 0x68cf, 0x68cf, 0x68cf, 0x68cf, 0x68cf, 0x68cf, + 0x68d1, 0x68f4, 0x68cf, 0x68cf, 0x68cf, 0x68cf, 0x68f4, 0x1078, + 0x1286, 0x1078, 0x47fc, 0x1078, 0x48fd, 0x6010, 0x0d7e, 0x2068, + 0x684c, 0xd0fc, 0x0040, 0x68e7, 0xa08c, 0x0003, 0xa18e, 0x0002, + 0x0040, 0x68ed, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x6965, 0x6003, + 0x0007, 0x1078, 0x4272, 0x0d7f, 0x007c, 0x1078, 0x4272, 0x1078, + 0x55a1, 0x0d7f, 0x0078, 0x68ec, 0x037e, 0x2019, 0x0001, 0x1078, + 0x5107, 0x1078, 0x47fc, 0x1078, 0x48fd, 0x6010, 0x0d7e, 0x2068, + 0x2019, 0x0004, 0x1078, 0x6d4c, 0x1078, 0x62fd, 0x6017, 0x0028, + 0x0d7f, 0x037f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x6919, 0x6004, + 0xa086, 0x0042, 0x10c0, 0x1286, 0x1078, 0x4754, 0x1078, 0x484d, + 0x007c, 0xa186, 0x0027, 0x0040, 0x6921, 0xa186, 0x0014, 0x00c0, + 0x6931, 0x6004, 0xa086, 0x0042, 0x10c0, 0x1286, 0x2001, 0x0007, + 0x1078, 0x3451, 0x1078, 0x4754, 0x1078, 0x62fd, 0x1078, 0x484d, + 0x007c, 0xa182, 0x0040, 0x0079, 0x6935, 0x6945, 0x6945, 0x6945, + 0x6945, 0x6945, 0x6945, 0x6945, 0x6947, 0x6953, 0x6945, 0x6945, + 0x6945, 0x6945, 0x6945, 0x6945, 0x6945, 0x1078, 0x1286, 0x037e, + 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1523, 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, - 0x0040, 0x70b7, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x70bd, 0x6003, - 0x0007, 0x1078, 0x463f, 0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, - 0x70c1, 0x70d1, 0x70d3, 0x70df, 0x70eb, 0x70d1, 0x70d1, 0x70d1, - 0x70d1, 0x70d1, 0x70d1, 0x70d1, 0x70d1, 0x70d1, 0x70d1, 0x70d1, - 0x70d1, 0x1078, 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, 0x47d7, - 0x127e, 0x2091, 0x8000, 0x1078, 0x4c2c, 0x127f, 0x007c, 0x6003, - 0x0001, 0x6106, 0x1078, 0x47d7, 0x127e, 0x2091, 0x8000, 0x1078, - 0x4c2c, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, - 0x19a7, 0x127e, 0x2091, 0x8000, 0x1078, 0x4843, 0x1078, 0x4cec, - 0x127f, 0x007c, 0x1078, 0x4b33, 0x0078, 0x7100, 0x1078, 0x4bdb, - 0x6110, 0x81ff, 0x0040, 0x710d, 0x0d7e, 0x2168, 0x037e, 0x2019, - 0x0029, 0x1078, 0x74a8, 0x037f, 0x0d7f, 0x1078, 0x6a4c, 0x1078, - 0x4c2c, 0x007c, 0xa182, 0x0085, 0x0079, 0x7116, 0x711d, 0x711d, - 0x711d, 0x711f, 0x711d, 0x711d, 0x711d, 0x1078, 0x12d5, 0x027e, - 0x0e7e, 0x2071, 0x7b80, 0x7220, 0x1078, 0x73c2, 0x0040, 0x712c, - 0x6007, 0x0086, 0x0078, 0x712e, 0x6007, 0x0087, 0x6003, 0x0001, - 0x1078, 0x47d7, 0x1078, 0x4c2c, 0x0e7f, 0x027f, 0x007c, 0xa186, - 0x0013, 0x00c0, 0x7148, 0x6004, 0xa08a, 0x0085, 0x1048, 0x12d5, - 0xa08a, 0x008c, 0x10c8, 0x12d5, 0xa082, 0x0085, 0x0079, 0x715b, - 0xa186, 0x0027, 0x0040, 0x7150, 0xa186, 0x0014, 0x10c0, 0x12d5, - 0x2001, 0x0007, 0x1078, 0x3791, 0x1078, 0x4b33, 0x1078, 0x6a4c, - 0x1078, 0x4c2c, 0x007c, 0x7162, 0x7164, 0x7164, 0x7162, 0x7162, - 0x7162, 0x7162, 0x1078, 0x12d5, 0x1078, 0x4b33, 0x1078, 0x5bb4, - 0x1078, 0x4c2c, 0x007c, 0xa182, 0x0085, 0x1048, 0x12d5, 0xa182, - 0x008c, 0x10c8, 0x12d5, 0xa182, 0x0085, 0x0079, 0x7177, 0x717e, - 0x717e, 0x717e, 0x7180, 0x717e, 0x717e, 0x717e, 0x1078, 0x12d5, - 0x007c, 0x1078, 0x4b33, 0x1078, 0x6a4c, 0x1078, 0x4c2c, 0x007c, - 0x037e, 0x2019, 0x000b, 0x1078, 0x7191, 0x601f, 0x0006, 0x037f, + 0x0040, 0x695f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x6965, 0x6003, + 0x0007, 0x1078, 0x4272, 0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, + 0x6969, 0x6979, 0x697b, 0x6987, 0x6993, 0x6979, 0x6979, 0x6979, + 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, 0x6979, + 0x6979, 0x1078, 0x1286, 0x6003, 0x0001, 0x6106, 0x1078, 0x43f8, + 0x127e, 0x2091, 0x8000, 0x1078, 0x484d, 0x127f, 0x007c, 0x6003, + 0x0001, 0x6106, 0x1078, 0x43f8, 0x127e, 0x2091, 0x8000, 0x1078, + 0x484d, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, + 0x191c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4464, 0x1078, 0x48fd, + 0x127f, 0x007c, 0x1078, 0x4754, 0x0078, 0x69a8, 0x1078, 0x47fc, + 0x6110, 0x81ff, 0x0040, 0x69b5, 0x0d7e, 0x2168, 0x037e, 0x2019, + 0x0029, 0x1078, 0x6d4c, 0x037f, 0x0d7f, 0x1078, 0x62fd, 0x1078, + 0x484d, 0x007c, 0xa182, 0x0085, 0x0079, 0x69be, 0x69c5, 0x69c5, + 0x69c5, 0x69c7, 0x69c5, 0x69c5, 0x69c5, 0x1078, 0x1286, 0x027e, + 0x0e7e, 0x2071, 0x7380, 0x7220, 0x1078, 0x6c66, 0x0040, 0x69d4, + 0x6007, 0x0086, 0x0078, 0x69d6, 0x6007, 0x0087, 0x6003, 0x0001, + 0x1078, 0x43f8, 0x1078, 0x484d, 0x0e7f, 0x027f, 0x007c, 0xa186, + 0x0013, 0x00c0, 0x69f0, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1286, + 0xa08a, 0x008c, 0x10c8, 0x1286, 0xa082, 0x0085, 0x0079, 0x6a03, + 0xa186, 0x0027, 0x0040, 0x69f8, 0xa186, 0x0014, 0x10c0, 0x1286, + 0x2001, 0x0007, 0x1078, 0x3451, 0x1078, 0x4754, 0x1078, 0x62fd, + 0x1078, 0x484d, 0x007c, 0x6a0a, 0x6a0c, 0x6a0c, 0x6a0a, 0x6a0a, + 0x6a0a, 0x6a0a, 0x1078, 0x1286, 0x1078, 0x4754, 0x1078, 0x55a1, + 0x1078, 0x484d, 0x007c, 0xa182, 0x0085, 0x1048, 0x1286, 0xa182, + 0x008c, 0x10c8, 0x1286, 0xa182, 0x0085, 0x0079, 0x6a1f, 0x6a26, + 0x6a26, 0x6a26, 0x6a28, 0x6a26, 0x6a26, 0x6a26, 0x1078, 0x1286, + 0x007c, 0x1078, 0x4754, 0x1078, 0x62fd, 0x1078, 0x484d, 0x007c, + 0x037e, 0x2019, 0x000b, 0x1078, 0x6a39, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, 0x2091, 0x8000, 0x2c40, 0x1078, - 0x58c7, 0x00c0, 0x71be, 0x1078, 0x5968, 0x00c0, 0x71be, 0x6000, - 0xa086, 0x0000, 0x0040, 0x71be, 0x601c, 0xa086, 0x0007, 0x0040, - 0x71be, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x71b1, 0x1078, - 0x1676, 0x6010, 0x2068, 0x1078, 0x68e3, 0x0040, 0x71b9, 0x1078, - 0x74a8, 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, - 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e, 0x157e, 0x2079, 0x7b80, - 0x7838, 0xa08c, 0x00ff, 0x783c, 0x1078, 0x2059, 0x00c0, 0x71f9, - 0x017e, 0x0c7e, 0x1078, 0x37d7, 0x00c0, 0x71f9, 0x2011, 0x7b90, - 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x610f, 0x00c0, 0x71f9, - 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x5a3c, - 0x1078, 0x4914, 0x1078, 0x4857, 0x017f, 0x1078, 0x7326, 0x1078, - 0x3958, 0x017f, 0x1078, 0x35db, 0x6612, 0x6516, 0xa006, 0x0078, - 0x71fb, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, - 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x761e, 0x2104, 0xa086, 0x0074, - 0x00c0, 0x7257, 0x2069, 0x7b8e, 0x690c, 0xa182, 0x0100, 0x0048, - 0x7247, 0x6908, 0xa184, 0x8000, 0x0040, 0x7253, 0xa184, 0x0800, - 0x0040, 0x7253, 0x6910, 0xa18a, 0x0001, 0x0048, 0x724b, 0x6914, - 0x2069, 0x7bae, 0x6904, 0x81ff, 0x00c0, 0x723f, 0x690c, 0xa182, - 0x0100, 0x0048, 0x7247, 0x6908, 0x81ff, 0x00c0, 0x7243, 0x6910, - 0xa18a, 0x0001, 0x0048, 0x724b, 0x6918, 0xa18a, 0x0001, 0x0048, - 0x7253, 0x0078, 0x725d, 0x6013, 0x0100, 0x0078, 0x7259, 0x6013, - 0x0300, 0x0078, 0x7259, 0x6013, 0x0500, 0x0078, 0x7259, 0x6013, - 0x0700, 0x0078, 0x7259, 0x6013, 0x0900, 0x0078, 0x7259, 0x6013, - 0x0b00, 0x0078, 0x7259, 0x6013, 0x0f00, 0x0078, 0x7259, 0x6013, - 0x2d00, 0xa085, 0x0001, 0x0078, 0x725e, 0xa006, 0x017f, 0x0d7f, - 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, - 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0040, 0x7286, - 0xa286, 0x0004, 0x0040, 0x7286, 0xa394, 0xff00, 0x8217, 0xa286, - 0x0006, 0x0040, 0x7286, 0xa286, 0x0004, 0x0040, 0x7286, 0x0c7e, - 0x2d60, 0x1078, 0x37e9, 0x0c7f, 0x0078, 0x72b9, 0x2011, 0x7b96, - 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x610f, 0x00c0, 0x72ba, - 0x2011, 0x7b9a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x610f, - 0x00c0, 0x72ba, 0x047e, 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, - 0xa006, 0x2009, 0x7652, 0x210c, 0xd1a4, 0x0040, 0x72ae, 0x2009, - 0x0029, 0x1078, 0x74ec, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, - 0x1078, 0x4914, 0x1078, 0x4857, 0x2c08, 0x1078, 0x7326, 0x017f, - 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, - 0x0d7e, 0x2069, 0x7b8e, 0x6800, 0xa086, 0x0800, 0x0040, 0x72cc, - 0x6013, 0x0000, 0x0078, 0x72cd, 0xa006, 0x0d7f, 0x007c, 0x0c7e, - 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2079, 0x7b8c, 0x7930, - 0x7834, 0x1078, 0x2059, 0x00c0, 0x72f3, 0x1078, 0x37d7, 0x00c0, - 0x72f3, 0x2011, 0x7b90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x610f, 0x00c0, 0x72f3, 0x2011, 0x7b94, 0xac98, 0x0006, 0x20a9, - 0x0004, 0x1078, 0x610f, 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, + 0x52b4, 0x00c0, 0x6a66, 0x1078, 0x5355, 0x00c0, 0x6a66, 0x6000, + 0xa086, 0x0000, 0x0040, 0x6a66, 0x601c, 0xa086, 0x0007, 0x0040, + 0x6a66, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6a59, 0x1078, + 0x1627, 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x6a61, 0x1078, + 0x6d4c, 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, + 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e, 0x157e, 0x2079, 0x7380, + 0x7838, 0xa084, 0x00ff, 0xa005, 0x00c0, 0x6aa2, 0x783c, 0x1078, + 0x1fb0, 0x017e, 0x0c7e, 0x1078, 0x3497, 0x00c0, 0x6aa0, 0x2011, + 0x7390, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a15, 0x00c0, + 0x6aa0, 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, + 0x5429, 0x1078, 0x4535, 0x1078, 0x4478, 0x017f, 0x1078, 0x6bca, + 0x1078, 0x3618, 0x017f, 0x1078, 0x329b, 0xa006, 0x0078, 0x6aa2, + 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, + 0x0d7e, 0x017e, 0x2009, 0x6f1c, 0x2104, 0xa086, 0x0074, 0x00c0, + 0x6afe, 0x2069, 0x738e, 0x690c, 0xa182, 0x0100, 0x0048, 0x6aee, + 0x6908, 0xa184, 0x8000, 0x0040, 0x6afa, 0xa184, 0x0800, 0x0040, + 0x6afa, 0x6910, 0xa18a, 0x0001, 0x0048, 0x6af2, 0x6914, 0x2069, + 0x73ae, 0x6904, 0x81ff, 0x00c0, 0x6ae6, 0x690c, 0xa182, 0x0100, + 0x0048, 0x6aee, 0x6908, 0x81ff, 0x00c0, 0x6aea, 0x6910, 0xa18a, + 0x0001, 0x0048, 0x6af2, 0x6918, 0xa18a, 0x0001, 0x0048, 0x6afa, + 0x0078, 0x6b04, 0x6013, 0x0100, 0x0078, 0x6b00, 0x6013, 0x0300, + 0x0078, 0x6b00, 0x6013, 0x0500, 0x0078, 0x6b00, 0x6013, 0x0700, + 0x0078, 0x6b00, 0x6013, 0x0900, 0x0078, 0x6b00, 0x6013, 0x0b00, + 0x0078, 0x6b00, 0x6013, 0x0f00, 0x0078, 0x6b00, 0x6013, 0x2d00, + 0xa085, 0x0001, 0x0078, 0x6b05, 0xa006, 0x017f, 0x0d7f, 0x0c7f, + 0x007c, 0x0c7e, 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, + 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0040, 0x6b2d, 0xa286, + 0x0004, 0x0040, 0x6b2d, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, + 0x0040, 0x6b2d, 0xa286, 0x0004, 0x0040, 0x6b2d, 0x0c7e, 0x2d60, + 0x1078, 0x34a9, 0x0c7f, 0x0078, 0x6b60, 0x2011, 0x7396, 0xad98, + 0x000a, 0x20a9, 0x0004, 0x1078, 0x5a15, 0x00c0, 0x6b61, 0x2011, + 0x739a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x5a15, 0x00c0, + 0x6b61, 0x047e, 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, + 0x2009, 0x6f52, 0x210c, 0xd1a4, 0x0040, 0x6b55, 0x2009, 0x0029, + 0x1078, 0x6d90, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, + 0x4535, 0x1078, 0x4478, 0x2c08, 0x1078, 0x6bca, 0x017f, 0x047f, + 0xa006, 0x157f, 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, + 0x2069, 0x738e, 0x6800, 0xa086, 0x0800, 0x0040, 0x6b73, 0x6013, + 0x0000, 0x0078, 0x6b74, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, + 0x017e, 0x027e, 0x037e, 0x157e, 0x2079, 0x738c, 0x7830, 0xa00d, + 0x00c0, 0x6b9b, 0x7834, 0x1078, 0x1fb0, 0x1078, 0x3497, 0x00c0, + 0x6b9b, 0x2011, 0x7390, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, + 0x5a15, 0x00c0, 0x6b9b, 0x2011, 0x7394, 0xac98, 0x0006, 0x20a9, + 0x0004, 0x1078, 0x5a15, 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, - 0x2011, 0x7b83, 0x2204, 0x8211, 0x220c, 0x1078, 0x2059, 0x00c0, - 0x731f, 0x1078, 0x37d7, 0x00c0, 0x731f, 0x2011, 0x7b96, 0xac98, - 0x000a, 0x20a9, 0x0004, 0x1078, 0x610f, 0x00c0, 0x731f, 0x2011, - 0x7b9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x610f, 0x157f, - 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, - 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, - 0x2029, 0x783f, 0x252c, 0x2021, 0x7845, 0x2424, 0x2061, 0x7d00, - 0x2071, 0x7600, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x738b, - 0x2100, 0xac06, 0x0040, 0x7381, 0x1078, 0x7504, 0x0040, 0x7381, - 0x671c, 0xa786, 0x0001, 0x0040, 0x73a0, 0xa786, 0x0007, 0x0040, - 0x7381, 0x2500, 0xac06, 0x0040, 0x7381, 0x2400, 0xac06, 0x0040, - 0x7381, 0x1078, 0x7518, 0x00c0, 0x7381, 0x0d7e, 0x6000, 0xa086, - 0x0004, 0x00c0, 0x7367, 0x017e, 0x1078, 0x1676, 0x017f, 0x6010, - 0x2068, 0x1078, 0x68e3, 0x0040, 0x737e, 0xa786, 0x0003, 0x00c0, - 0x7394, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, - 0x6aea, 0x1078, 0x3a2c, 0x017f, 0x1078, 0x6a3f, 0x0d7f, 0x1078, - 0x6a4c, 0xace0, 0x0008, 0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, - 0x738b, 0x0078, 0x7338, 0x127f, 0x027f, 0x047f, 0x057f, 0x067f, - 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x7371, - 0xa386, 0x0005, 0x0040, 0x7381, 0x1078, 0x74a8, 0x0078, 0x737e, - 0x1078, 0x7518, 0x00c0, 0x7381, 0xa180, 0x0001, 0x2004, 0xa086, - 0x0018, 0x00c0, 0x7381, 0x6000, 0xa086, 0x0002, 0x00c0, 0x7381, - 0x1078, 0x6a65, 0x0040, 0x73bc, 0x1078, 0x6a79, 0x00c0, 0x7381, - 0x1078, 0x5e09, 0x0078, 0x73be, 0x1078, 0x22b1, 0x1078, 0x6a4c, - 0x0078, 0x7381, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, - 0x74bf, 0x017f, 0x0040, 0x73d1, 0x601c, 0xa084, 0x000f, 0x1079, - 0x73d4, 0x0e7f, 0x0c7f, 0x007c, 0x73dc, 0x73dc, 0x73dc, 0x73dc, - 0x73dc, 0x73dc, 0x73de, 0x73dc, 0xa006, 0x007c, 0x047e, 0x017e, - 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, - 0x2009, 0x0020, 0x1078, 0x74ec, 0x017f, 0x047f, 0x037e, 0x2019, - 0x0002, 0x1078, 0x7191, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001, - 0x0001, 0x1078, 0x376f, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, - 0x0004, 0x2019, 0x7605, 0x2011, 0x7b96, 0x1078, 0x610f, 0x037f, - 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, - 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7d00, - 0x2079, 0x0001, 0x8fff, 0x0040, 0x7468, 0x2071, 0x7600, 0x7644, - 0x7060, 0x8001, 0xa602, 0x00c8, 0x7468, 0x88ff, 0x0040, 0x742e, - 0x2800, 0xac06, 0x00c0, 0x745e, 0x2079, 0x0000, 0x1078, 0x7504, - 0x0040, 0x745e, 0x2400, 0xac06, 0x0040, 0x745e, 0x671c, 0xa786, - 0x0006, 0x00c0, 0x745e, 0xa786, 0x0007, 0x0040, 0x745e, 0x88ff, - 0x00c0, 0x7446, 0x6018, 0xa206, 0x00c0, 0x745e, 0x0d7e, 0x6000, - 0xa086, 0x0004, 0x00c0, 0x744e, 0x1078, 0x1676, 0x6010, 0x2068, - 0x1078, 0x68e3, 0x0040, 0x7458, 0x047e, 0x1078, 0x74a8, 0x047f, - 0x0d7f, 0x1078, 0x6a4c, 0x88ff, 0x00c0, 0x7471, 0xace0, 0x0008, - 0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, 0x7468, 0x0078, 0x741a, - 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, - 0x007c, 0xa8c5, 0x0001, 0x0078, 0x7469, 0x087e, 0x2041, 0x0000, - 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, 0x58c7, 0x1078, 0x5968, - 0x1078, 0x740d, 0x087f, 0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, - 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x037e, - 0x1078, 0x37d7, 0x00c0, 0x749d, 0x2c10, 0x2041, 0x0000, 0x1078, - 0x58c7, 0x1078, 0x5968, 0x1078, 0x740d, 0x037f, 0x017f, 0x8108, - 0x00f0, 0x748e, 0x157f, 0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, - 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x74bc, 0x6800, 0xa07d, 0x0040, - 0x74b9, 0x6803, 0x0000, 0x6b52, 0x1078, 0x3a2c, 0x2f68, 0x0078, - 0x74ad, 0x6b52, 0x1078, 0x3a2c, 0x0f7f, 0x017f, 0x007c, 0x0e7e, - 0x047e, 0x037e, 0x2061, 0x7d00, 0x2071, 0x7600, 0x7444, 0x7060, - 0x8001, 0xa402, 0x00c8, 0x74e7, 0x2100, 0xac06, 0x0040, 0x74d9, - 0x6000, 0xa086, 0x0000, 0x0040, 0x74d9, 0x6008, 0xa206, 0x0040, - 0x74e3, 0xace0, 0x0008, 0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, - 0x74e7, 0x0078, 0x74c4, 0xa085, 0x0001, 0x0078, 0x74e8, 0xa006, - 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078, 0x132f, - 0x007f, 0x1040, 0x12d5, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, - 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, - 0x1078, 0x3a2c, 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, - 0x7517, 0xa786, 0x0001, 0x0040, 0x7517, 0xa786, 0x000a, 0x0040, - 0x7517, 0xa786, 0x0009, 0x0040, 0x7517, 0xa085, 0x0001, 0x007c, - 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, - 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7640, 0xd5a4, 0x0040, - 0x752c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x7532, 0x7030, - 0x8000, 0x7032, 0xd5ac, 0x0040, 0x7539, 0x2071, 0x764a, 0x1078, - 0x7568, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, - 0x2091, 0x8000, 0x2071, 0x7640, 0xd5a4, 0x0040, 0x754a, 0x7034, - 0x8000, 0x7036, 0xd5b4, 0x0040, 0x7550, 0x7030, 0x8000, 0x7032, - 0xd5ac, 0x0040, 0x7557, 0x2071, 0x764a, 0x1078, 0x7568, 0x0e7f, - 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, - 0x2071, 0x7642, 0x1078, 0x7568, 0x0e7f, 0x007f, 0x127f, 0x007c, - 0x2e04, 0x8000, 0x2072, 0x00c8, 0x7571, 0x8e70, 0x2e04, 0x8000, - 0x2072, 0x007c, 0x0e7e, 0x2071, 0x7640, 0x1078, 0x7568, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x7644, 0x1078, 0x7568, 0x0e7f, 0x007c, - 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, - 0x59e7 -}; -#define ISP2100_CODE_LENGTH 0x6591 -#endif -#if defined(ISP2100_FABRIC) && defined(ISP2100_SCCLUN) -/************************************************************************ - * * - * --- ISP2100 Initiator/Target Firmware --- * - * with Fabric support (Public Loop) and * - * with expanded LUN addressing. * - * * - * * - ************************************************************************ - * * - * NOTICE * - * * - * COPYRIGHT 1998 QLOGIC CORPORATION * - * ALL RIGHTS RESERVED * - * * - * This computer program is CONFIDENTIAL and contains TRADE SECRETS of * - * QLOGIC CORPORATION. The receipt or possession of this program does * - * not convey any rights to reproduce or disclose its contents, or to * - * manufacture, use, or sell anything that it may describe, in whole or * - * in part, without the specific written consent of QLOGIC CORPORATION. * - * Any reproduction of this program without the express written consent * - * of QLOGIC CORPORATION is a violation of the copyright laws and may * - * subject you to civil liability and criminal prosecution. * - * * - ************************************************************************ - */ -/* - * Firmware Version 1.15.07 (14:40 Oct 13, 1998) - */ - -static const u_int16_t ISP2100_RISC_CODE[] = { - 0x0078, 0x1029, 0x0000, 0x669c, 0x0000, 0x2043, 0x4f50, 0x5952, - 0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943, - 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, - 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020, - 0x2400, 0x20c1, 0x0021, 0x20a1, 0x769c, 0x2009, 0x0000, 0x20a9, - 0x0764, 0x41a4, 0x3400, 0x20c9, 0x7bff, 0x2091, 0x2000, 0x2059, - 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2074, 0x2051, 0x7700, - 0x2a70, 0x705b, 0x9600, 0x705f, 0xffff, 0x7057, 0x95f9, 0x7063, - 0x0300, 0x1078, 0x1282, 0x20a1, 0x7e00, 0x715c, 0x810d, 0x810d, - 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e, - 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400, - 0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4, - 0x1078, 0x1249, 0x1078, 0x136e, 0x1078, 0x14f3, 0x1078, 0x19a0, - 0x1078, 0x35ed, 0x1078, 0x5c66, 0x1078, 0x12f9, 0x1078, 0x2403, - 0x1078, 0x3d28, 0x1078, 0x3b00, 0x1078, 0x4569, 0x1078, 0x1e2f, - 0x1078, 0x47a9, 0x1078, 0x4249, 0x1078, 0x1d4e, 0x1078, 0x1e0e, - 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086, - 0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b, - 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, - 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, - 0x00c0, 0x10bd, 0x1078, 0x2d63, 0x1078, 0x242b, 0x1078, 0x3d78, - 0x1078, 0x3beb, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x10c1, 0x1078, 0x4581, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078, - 0x10aa, 0x1078, 0x5938, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x114b, - 0x10cd, 0x11c6, 0x1246, 0x1247, 0x1248, 0x1078, 0x12d5, 0x007c, - 0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2e88, 0x2079, 0x0100, - 0x7844, 0xa005, 0x00c0, 0x113c, 0x2011, 0x351a, 0x1078, 0x4643, - 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, - 0x73b8, 0x1078, 0x2d20, 0x1078, 0x5783, 0x2011, 0x0004, 0x1078, - 0x6a18, 0x1078, 0x3a9a, 0x70c7, 0x0000, 0x70bf, 0x0000, 0x70c3, - 0x0000, 0x1078, 0x113f, 0x2011, 0x0000, 0x2079, 0x7751, 0x7804, - 0xd0ac, 0x0040, 0x1104, 0xc295, 0x70a4, 0xa005, 0x0040, 0x1109, - 0xc29d, 0x72be, 0xa296, 0x0004, 0x0040, 0x112a, 0x2011, 0x0001, - 0x1078, 0x6a18, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002, - 0x0f7f, 0x1078, 0x2124, 0x2011, 0x0005, 0x1078, 0x5892, 0x1078, - 0x4d50, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f, - 0x0078, 0x113e, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002, - 0x2011, 0x0005, 0x1078, 0x5892, 0x1078, 0x4d50, 0x0c7e, 0x2061, - 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e, - 0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x37ee, 0x8108, 0x00f0, - 0x1144, 0x0c7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086, - 0xffff, 0x0040, 0x1159, 0x1078, 0x2124, 0x1078, 0x4d50, 0x0078, - 0x11c4, 0x70bc, 0xd09c, 0x0040, 0x1181, 0xd084, 0x0040, 0x1181, - 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c, - 0x0040, 0x1181, 0x70c0, 0xa086, 0xffff, 0x0040, 0x117d, 0x1078, - 0x2219, 0x1078, 0x4d50, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078, - 0x2251, 0x1078, 0x4d50, 0x0078, 0x11c4, 0x70c4, 0xa005, 0x00c0, - 0x11c4, 0x7088, 0xa005, 0x00c0, 0x11c4, 0x2001, 0x7752, 0x2004, - 0xd0ac, 0x0040, 0x11a7, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, - 0x0000, 0x017e, 0x1078, 0x3806, 0x00c0, 0x119a, 0x6000, 0xd0ec, - 0x00c0, 0x11a2, 0x017f, 0x8108, 0x00f0, 0x1191, 0x0c7f, 0x157f, - 0x0078, 0x11a7, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x11c4, 0x7003, - 0x0003, 0x708f, 0xffff, 0x2001, 0x0000, 0x1078, 0x1fff, 0x1078, - 0x2d9e, 0x2001, 0x7937, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11bc, - 0x2011, 0x0000, 0x1078, 0x5892, 0x2011, 0x0000, 0x1078, 0x589c, - 0x1078, 0x4d50, 0x1078, 0x4e10, 0x127f, 0x007c, 0x017e, 0x0f7e, - 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010, - 0x7942, 0x7924, 0xd1b4, 0x0040, 0x11d7, 0x7827, 0x0040, 0xd19c, - 0x0040, 0x11dc, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, - 0xa18a, 0x0003, 0x0050, 0x1202, 0x7954, 0xd1ac, 0x00c0, 0x1202, - 0x2009, 0x00f8, 0x1078, 0x35bc, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11fa, 0x7824, 0xd0ac, - 0x00c0, 0x1236, 0x00f0, 0x11f2, 0x2001, 0x0001, 0x1078, 0x1fff, - 0x0078, 0x123f, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008, - 0x00e0, 0x1208, 0x2091, 0x6000, 0x00f0, 0x1208, 0x7853, 0x0400, - 0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x35bc, 0x20a9, 0x000e, - 0x0005, 0x00f0, 0x1218, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, - 0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, - 0x122d, 0x7824, 0xd0ac, 0x00c0, 0x1236, 0x8319, 0x00c0, 0x1223, - 0x2001, 0x0001, 0x1078, 0x1fff, 0x0078, 0x123d, 0x7828, 0xc09d, - 0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, - 0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, - 0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, - 0x1255, 0x704f, 0xffff, 0x0078, 0x1257, 0x704f, 0x0000, 0x7053, - 0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7920, 0x6003, - 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, - 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061, - 0x7928, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f, - 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f, - 0x0000, 0x007c, 0x1078, 0x12a8, 0x2011, 0x0000, 0x81ff, 0x0040, - 0x12a7, 0xa186, 0x0001, 0x00c0, 0x1297, 0x705f, 0x8fff, 0x7057, - 0x8601, 0x7063, 0x0100, 0x705b, 0x8600, 0x0078, 0x12a5, 0xa186, - 0x0002, 0x00c0, 0x129f, 0x2011, 0x0000, 0x0078, 0x12a5, 0xa186, - 0x0005, 0x00c0, 0x12a5, 0x2011, 0x0001, 0x1078, 0x12cf, 0x007c, - 0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12cf, 0x2019, 0xaaaa, - 0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, 0x2c04, 0xa406, - 0x0040, 0x12bd, 0xc18d, 0x0078, 0x12ca, 0xc185, 0x2011, 0x0001, - 0x1078, 0x12cf, 0x2061, 0xffff, 0x2362, 0x2c04, 0xa306, 0x00c0, - 0x12ca, 0xc195, 0x2011, 0x0001, 0x1078, 0x12cf, 0x007c, 0x3800, - 0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, 0x8000, 0x0068, - 0x12d7, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, 0x0000, - 0x00c0, 0x12dd, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, 0x7826, - 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000, - 0x2091, 0x4080, 0x2079, 0x7700, 0x7803, 0x0005, 0x0078, 0x12f6, - 0x007c, 0x2071, 0x7700, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190, - 0x002d, 0xa298, 0x002d, 0x0048, 0x130f, 0x705c, 0xa302, 0x00c8, - 0x130f, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x1301, 0x200b, - 0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x7700, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x1322, 0xa06e, - 0x0078, 0x132c, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e, - 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, - 0x2071, 0x7700, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8, - 0x133c, 0xa06e, 0x0078, 0x1345, 0x70a2, 0x702c, 0x2068, 0x2d04, - 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, - 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x702c, 0x206a, - 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c, - 0x8dff, 0x0040, 0x1364, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078, - 0x1348, 0x0d7f, 0x0078, 0x1358, 0x007c, 0x0e7e, 0x2071, 0x7700, - 0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071, - 0x7959, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, - 0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e, - 0x2270, 0x700b, 0x0000, 0x2071, 0x7959, 0x7018, 0xa088, 0x7962, - 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, - 0x1397, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a8, 0x0f7f, 0x0e7f, - 0x007c, 0x0e7e, 0x2071, 0x7959, 0x7004, 0xa005, 0x00c0, 0x13a6, - 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a8, 0x0f7f, 0x0e7f, 0x007c, - 0x7000, 0x0079, 0x13ab, 0x13af, 0x1419, 0x1436, 0x1436, 0x7018, - 0x711c, 0xa106, 0x00c0, 0x13b7, 0x7007, 0x0000, 0x007c, 0x0d7e, - 0xa180, 0x7962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, - 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, - 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804, - 0x0d7f, 0xd084, 0x0040, 0x13d9, 0x7007, 0x0001, 0x1078, 0x13de, - 0x007c, 0x7007, 0x0002, 0x1078, 0x13f4, 0x007c, 0x017e, 0x027e, - 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13e9, 0x2110, - 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, - 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e, - 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, - 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1408, 0x2110, 0xa006, - 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, - 0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x77e5, 0x20a1, 0x0018, - 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, - 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b, - 0x77e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e, - 0x157e, 0x2001, 0x7814, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026, - 0x2001, 0x7815, 0x20ac, 0x53a6, 0x2099, 0x7816, 0x20a1, 0x0018, - 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000, - 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b, - 0x7811, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e, - 0x2071, 0x7959, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002, - 0xd1fc, 0x0040, 0x1479, 0xa18c, 0x0700, 0x0040, 0x1476, 0x7008, - 0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1479, 0x7004, 0x1079, - 0x147d, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x13a8, 0x1485, 0x14a7, - 0x14c1, 0x14ea, 0x1483, 0x0078, 0x1483, 0x137e, 0x147e, 0x157e, - 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, - 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005, - 0x0040, 0x14ae, 0x1078, 0x13de, 0x007c, 0x7008, 0xa080, 0x0002, - 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x13a8, 0x007c, 0x700c, - 0xa005, 0x0040, 0x14ae, 0x1078, 0x13f4, 0x007c, 0x0d7e, 0x7008, - 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c, - 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x13a8, - 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x77e3, 0x2004, 0xa080, - 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, - 0x53a5, 0x2001, 0x77e5, 0x2004, 0xd0bc, 0x0040, 0x14e0, 0x2001, - 0x77ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, - 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3e21, 0x1078, - 0x13a8, 0x007c, 0x2001, 0x7813, 0x2003, 0x0100, 0x7007, 0x0000, - 0x1078, 0x13a8, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030, - 0x2071, 0x796a, 0x7003, 0x0000, 0x700f, 0x7970, 0x7013, 0x7970, - 0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079, - 0x1509, 0x1511, 0x1557, 0x1511, 0x1511, 0x1511, 0x153c, 0x1520, - 0x1515, 0xa085, 0x0001, 0x0078, 0x1571, 0x684c, 0xd0bc, 0x0040, - 0x1511, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x155f, - 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1511, 0x684c, 0xd0bc, - 0x0040, 0x1511, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a, - 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, - 0x6832, 0x6858, 0x0078, 0x1567, 0xa18c, 0x00ff, 0xa186, 0x0015, - 0x00c0, 0x1511, 0x684c, 0xd0ac, 0x0040, 0x1511, 0x6804, 0x681a, - 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, - 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x1567, 0x684c, - 0xd0ac, 0x0040, 0x1511, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, - 0x000f, 0xa188, 0x1c5c, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826, - 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, - 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, - 0x2004, 0x82ff, 0x0040, 0x158c, 0xa280, 0x0004, 0x0d7e, 0x206c, - 0x684c, 0xd0dc, 0x00c0, 0x1588, 0x1078, 0x1504, 0x10c0, 0x12d5, - 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e, - 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0, - 0x15a0, 0x7206, 0x2001, 0x15b4, 0x007e, 0x2260, 0x0078, 0x16cc, - 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182, - 0x798b, 0x0048, 0x15ad, 0x2009, 0x7970, 0x710e, 0x7000, 0xa005, - 0x00c0, 0x15b4, 0x1078, 0x16b5, 0x127f, 0x007c, 0x127e, 0x027e, - 0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, - 0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, - 0xa005, 0x0040, 0x1608, 0x6808, 0xa005, 0x0040, 0x166e, 0x7000, - 0xa005, 0x00c0, 0x15d5, 0x0078, 0x1602, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x1672, 0x7004, 0xa406, 0x00c0, 0x1602, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x0040, 0x15eb, 0x047e, 0x1078, 0x17a5, 0x047f, - 0x2460, 0x0078, 0x15cb, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, - 0x15de, 0x7804, 0xa084, 0x6000, 0x0040, 0x15fc, 0xa086, 0x6000, - 0x0040, 0x15fc, 0x0078, 0x15de, 0x7803, 0x0004, 0x7003, 0x0000, - 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5cfb, 0x0078, 0x1672, - 0x6808, 0xa005, 0x0040, 0x166e, 0x7000, 0xa005, 0x00c0, 0x1612, - 0x0078, 0x166e, 0x700c, 0x7110, 0xa106, 0x00c0, 0x161b, 0x7004, - 0xa406, 0x00c0, 0x166e, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, - 0x1628, 0x047e, 0x1078, 0x17a5, 0x047f, 0x2460, 0x0078, 0x1608, - 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x161b, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x00c0, 0x1621, 0x7804, 0xa084, 0x6000, 0x0040, - 0x163f, 0xa086, 0x6000, 0x0040, 0x163f, 0x0078, 0x161b, 0x7007, - 0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, 0x1660, - 0xa08e, 0x0002, 0x00c0, 0x166e, 0x0c7e, 0x0e7e, 0x6818, 0x2060, - 0x1078, 0x1c31, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, 0x165c, - 0x7308, 0x720c, 0x0078, 0x165e, 0x7310, 0x7214, 0x0e7f, 0x0c7f, - 0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814, - 0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048, - 0x1078, 0x5cfb, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, - 0x2071, 0x796a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16b2, 0x7004, - 0xac06, 0x00c0, 0x16a3, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0, - 0x169f, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x1685, 0x7803, - 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1691, 0x7803, 0x0002, 0x7803, - 0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x16a3, 0x1078, - 0x17a5, 0x0078, 0x167a, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7970, - 0x2104, 0xac06, 0x00c0, 0x16ad, 0x200a, 0xa188, 0x0003, 0x00f0, - 0x16a8, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x16bd, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060, - 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x798b, 0x0048, - 0x16cb, 0x2009, 0x7970, 0x7112, 0x8cff, 0x00c0, 0x16eb, 0x7908, - 0xd1ec, 0x00c0, 0x16df, 0x1078, 0x197e, 0x0040, 0x16df, 0x7803, - 0x0009, 0x7904, 0xd1fc, 0x0040, 0x16d9, 0x7803, 0x0006, 0x7007, - 0x0000, 0x1078, 0x197e, 0x0040, 0x1712, 0x7803, 0x0019, 0x7003, - 0x0003, 0x0078, 0x1712, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406, - 0x00c0, 0x16f6, 0x682c, 0xa306, 0x0040, 0x16fa, 0x1078, 0x1c7c, - 0x00c0, 0x16cf, 0x684c, 0xd0f4, 0x00c0, 0x16cf, 0x6824, 0x2050, - 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, - 0x0011, 0x1078, 0x1713, 0x0040, 0x1711, 0x2009, 0x0001, 0x1078, - 0x1713, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x17a0, 0xa03e, 0x2730, - 0x6850, 0xd0fc, 0x00c0, 0x1732, 0x0d7e, 0x2804, 0xac68, 0x2900, - 0x0079, 0x1722, 0x1782, 0x1742, 0x1742, 0x1782, 0x1782, 0x177a, - 0x1782, 0x1742, 0x1782, 0x1748, 0x1748, 0x1782, 0x1782, 0x1782, - 0x1771, 0x1748, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, - 0x0d7e, 0xd99c, 0x0040, 0x1785, 0x2804, 0xac68, 0x6f08, 0x6e0c, - 0x0078, 0x1785, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1785, - 0x7b0c, 0xd3bc, 0x0040, 0x1769, 0x7004, 0x0e7e, 0x2070, 0x701c, - 0x0e7f, 0xa086, 0x0008, 0x00c0, 0x1769, 0x7b08, 0xa39c, 0x0fff, - 0x2d20, 0x0d7f, 0x0d7e, 0x6a14, 0x82ff, 0x00c0, 0x1764, 0x6810, - 0xa302, 0x0048, 0x1764, 0x6b10, 0x2011, 0x0000, 0x2468, 0x0078, - 0x176b, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, - 0x1785, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, - 0x00c0, 0x1782, 0x0d7f, 0x1078, 0x1c18, 0x00c0, 0x1713, 0xa00e, - 0x0078, 0x17a0, 0x0d7f, 0x1078, 0x12d5, 0x7b22, 0x7a26, 0x7d32, - 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f, - 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10, - 0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1c18, - 0x007c, 0x1078, 0x12d5, 0x1078, 0x12d5, 0x127e, 0x2091, 0x2100, - 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, - 0xa184, 0x0700, 0x00c0, 0x17a3, 0xa184, 0x0003, 0xa086, 0x0003, - 0x0040, 0x17a3, 0x7000, 0x0079, 0x17bd, 0x17c5, 0x17c7, 0x189b, - 0x18ff, 0x1916, 0x17c5, 0x17c5, 0x17c5, 0x1078, 0x12d5, 0x8001, - 0x7002, 0xa184, 0x0880, 0x00c0, 0x17dc, 0x8aff, 0x0040, 0x183b, - 0x2009, 0x0001, 0x1078, 0x1713, 0x0040, 0x1928, 0x2009, 0x0001, - 0x1078, 0x1713, 0x0078, 0x1928, 0x7803, 0x0004, 0x7003, 0x0000, - 0xd1dc, 0x0040, 0x1827, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820, - 0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x7820, - 0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, 0x6816, 0x037f, - 0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, 0x1c31, 0x2a00, - 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x6850, - 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1819, 0x684c, - 0xd0e4, 0x0040, 0x1819, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, - 0x5cfb, 0x7808, 0xd0ec, 0x00c0, 0x1823, 0x7803, 0x0009, 0x7003, - 0x0004, 0x0078, 0x1928, 0x1078, 0x16b5, 0x0078, 0x1928, 0x057e, - 0x7d0c, 0xd5bc, 0x00c0, 0x182e, 0x1078, 0x7648, 0x057f, 0x1078, - 0x192c, 0x697c, 0x6912, 0x6980, 0x6916, 0x7803, 0x0009, 0x7003, - 0x0003, 0x0078, 0x1928, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, - 0x00c0, 0x1853, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, - 0x184f, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5cfb, 0x1078, - 0x16b5, 0x0078, 0x1928, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, - 0xa183, 0x0000, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa188, - 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, - 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x195b, 0x7803, 0x0004, - 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0040, 0x1874, - 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0070, 0x7004, 0x7007, - 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x5cfb, 0x1078, 0x197e, - 0x0040, 0x184f, 0x7908, 0xd1ec, 0x00c0, 0x1892, 0x2009, 0x0009, - 0x0078, 0x1894, 0x2009, 0x0019, 0x7902, 0x7803, 0x0009, 0x7003, - 0x0003, 0x0078, 0x1928, 0x8001, 0x7002, 0xd194, 0x0040, 0x18ad, - 0x7804, 0xd0fc, 0x00c0, 0x17ad, 0x8aff, 0x0040, 0x1928, 0x2009, - 0x0001, 0x1078, 0x1713, 0x0078, 0x1928, 0xa184, 0x0880, 0x00c0, - 0x18ba, 0x8aff, 0x0040, 0x1928, 0x2009, 0x0001, 0x1078, 0x1713, - 0x0078, 0x1928, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1dc, 0x0040, - 0x18ee, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x1c31, 0x0d7e, - 0x0f7e, 0x2d78, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x18de, - 0x6808, 0x2008, 0xa31a, 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, - 0x690c, 0x7814, 0xa101, 0x7816, 0x0078, 0x18ea, 0x6810, 0x2008, - 0xa31a, 0x6814, 0xa213, 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, - 0xa101, 0x7816, 0x0f7f, 0x0d7f, 0x0078, 0x17e7, 0x057e, 0x7d0c, - 0x1078, 0x7648, 0x057f, 0x1078, 0x192c, 0x697c, 0x6912, 0x6980, - 0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1928, 0x7803, - 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x1912, 0x6808, - 0x8001, 0x680a, 0x00c0, 0x1912, 0x7004, 0x2060, 0x2009, 0x0048, - 0x1078, 0x5cfb, 0x1078, 0x16b5, 0x0078, 0x1928, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x1912, - 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x16cc, - 0x017f, 0x007f, 0x127f, 0x007c, 0x1078, 0x193d, 0x20e1, 0x9028, - 0x700f, 0x7970, 0x7013, 0x7970, 0x2001, 0x015d, 0x200c, 0x810a, - 0x2102, 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014, - 0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, - 0x00c0, 0x195a, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, - 0x195a, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x195a, 0x8421, - 0x00c0, 0x1944, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, - 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x193d, 0x20e1, 0x7000, - 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, - 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, - 0x0138, 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, - 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x198b, 0xa085, - 0x0001, 0x0078, 0x199d, 0x2001, 0x020a, 0x81ff, 0x0040, 0x1996, - 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, - 0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, - 0x0e7e, 0x2071, 0x798b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, - 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1a22, 0x6934, - 0xa184, 0x0007, 0x0079, 0x19b4, 0x19bc, 0x1a0d, 0x19bc, 0x19bc, - 0x19bc, 0x19f2, 0x19cf, 0x19be, 0x1078, 0x12d5, 0x684c, 0xd0b4, - 0x0040, 0x1b24, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1a15, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x19bc, 0x684c, 0xd0b4, - 0x0040, 0x1b24, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6958, - 0x0078, 0x1a1e, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1a22, - 0x684c, 0xd0b4, 0x0040, 0x1b24, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6958, - 0xa006, 0x682e, 0x682a, 0x0078, 0x1a1e, 0x684c, 0xd0b4, 0x0040, - 0x17a1, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, - 0xa084, 0x000f, 0xa080, 0x1c5c, 0x2004, 0x6832, 0x6926, 0x684c, - 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, - 0xd0fc, 0x10c0, 0x1b28, 0x0e7e, 0x0d7e, 0x2071, 0x798b, 0x7000, - 0xa005, 0x00c0, 0x1a9e, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, - 0x7004, 0x2068, 0x6818, 0x0d7e, 0x2068, 0x686c, 0x7812, 0x6890, - 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, - 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824, 0x2050, 0x6818, - 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, - 0x0007, 0x0040, 0x1a60, 0x017e, 0x2009, 0x0008, 0xa102, 0x017f, - 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, - 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, - 0x00c0, 0x1a77, 0x6928, 0x6810, 0xa106, 0x0040, 0x1a84, 0x037e, - 0x047e, 0x6b14, 0x6c10, 0x1078, 0x1c7c, 0x047f, 0x037f, 0x0040, - 0x1a84, 0x0c7f, 0x0078, 0x1a9e, 0x8aff, 0x00c0, 0x1a8c, 0x0c7f, - 0xa085, 0x0001, 0x0078, 0x1a9e, 0x127e, 0x2091, 0x8000, 0x2079, - 0x0020, 0x2009, 0x0001, 0x1078, 0x1aa2, 0x0040, 0x1a9b, 0x2009, - 0x0001, 0x1078, 0x1aa2, 0x127f, 0x0c7f, 0xa006, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, 0x027e, - 0x8aff, 0x0040, 0x1b1d, 0x700c, 0x7214, 0xa202, 0x7010, 0x7218, - 0xa203, 0x0048, 0x1b1c, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, - 0x1acf, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1abf, 0x1afe, - 0x1adf, 0x1adf, 0x1afe, 0x1afe, 0x1af6, 0x1afe, 0x1adf, 0x1afe, - 0x1ae5, 0x1ae5, 0x1afe, 0x1afe, 0x1afe, 0x1aed, 0x1ae5, 0xc0fc, - 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1b02, - 0x0d7e, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x1b01, 0x6b08, - 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1b01, 0x6b10, 0x6a14, 0x6d00, - 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x1b01, 0x0d7f, 0x0d7e, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1afe, 0x0d7f, 0x1078, - 0x1c18, 0x00c0, 0x1aa8, 0xa00e, 0x0078, 0x1b1d, 0x0d7f, 0x1078, - 0x12d5, 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, - 0x7902, 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, - 0xa201, 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, - 0x1078, 0x1c18, 0x0078, 0x1b1d, 0xa006, 0x027f, 0x037f, 0x047f, - 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, 0x12d5, 0x1078, 0x12d5, - 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x2079, 0x0020, 0x2071, 0x798b, 0x2b68, 0x6818, 0x2060, - 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1b26, 0x7000, - 0x0079, 0x1b42, 0x1be9, 0x1b46, 0x1bb6, 0x1be7, 0x8001, 0x7002, - 0xd19c, 0x00c0, 0x1b5a, 0x8aff, 0x0040, 0x1b79, 0x2009, 0x0001, - 0x1078, 0x1aa2, 0x0040, 0x1be9, 0x2009, 0x0001, 0x1078, 0x1aa2, - 0x0078, 0x1be9, 0x7803, 0x0004, 0xd194, 0x0040, 0x1b6a, 0x6850, - 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1b6f, 0x684c, 0xc0f5, 0x684e, - 0x0078, 0x1b6f, 0x1078, 0x1c31, 0x6850, 0xc0fd, 0x6852, 0x2a00, - 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, - 0x1be9, 0x711c, 0x81ff, 0x0040, 0x1b8f, 0x7918, 0x7922, 0x7827, - 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, - 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1be9, 0x0f7e, - 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, - 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, - 0x1b9d, 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4, 0x007f, 0xa102, - 0x78c6, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, - 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, 0x1be9, 0x8001, 0x7002, - 0xd194, 0x0040, 0x1bcb, 0x7804, 0xd0fc, 0x00c0, 0x1b38, 0xd19c, - 0x00c0, 0x1be5, 0x8aff, 0x0040, 0x1be9, 0x2009, 0x0001, 0x1078, - 0x1aa2, 0x0078, 0x1be9, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, - 0x1c31, 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1bde, - 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1be2, 0x6810, 0xa31a, - 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1b6a, 0x0078, 0x1b6a, 0x1078, - 0x12d5, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, - 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x798b, 0x7000, 0xa086, 0x0000, - 0x0040, 0x1c15, 0x2079, 0x0020, 0x20e1, 0x9040, 0x7804, 0xd0fc, - 0x0040, 0x1bfc, 0x1078, 0x1b28, 0x7000, 0xa086, 0x0000, 0x00c0, - 0x1bfc, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1c0b, 0x20e1, - 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x0f7f, 0x007c, - 0x8840, 0x2804, 0xa005, 0x00c0, 0x1c2c, 0x6004, 0xa005, 0x0040, - 0x1c2e, 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1c5c, - 0x2044, 0x88ff, 0x1040, 0x12d5, 0x8a51, 0x007c, 0x2051, 0x0000, - 0x007c, 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0, 0x1c4b, 0x2c00, - 0xad06, 0x0040, 0x1c40, 0x6000, 0xa005, 0x00c0, 0x1c40, 0x2d00, - 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, 0x1c6c, 0x2044, - 0x88ff, 0x1040, 0x12d5, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, - 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, - 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x1c51, 0x1c4d, 0x0000, - 0x0000, 0x1c5b, 0x0000, 0x1c51, 0x0000, 0x1c58, 0x1c55, 0x0000, - 0x0000, 0x0000, 0x1c5b, 0x1c58, 0x0000, 0x1c53, 0x1c53, 0x0000, - 0x0000, 0x1c5b, 0x0000, 0x1c53, 0x0000, 0x1c59, 0x1c59, 0x0000, - 0x0000, 0x0000, 0x1c5b, 0x1c59, 0x0a7e, 0x097e, 0x087e, 0x6858, - 0xa055, 0x0040, 0x1d19, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0, - 0x1c5c, 0xa986, 0x0007, 0x0040, 0x1c95, 0xa986, 0x000e, 0x0040, - 0x1c95, 0xa986, 0x000f, 0x00c0, 0x1c99, 0x605c, 0xa422, 0x6060, - 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1ca7, 0x0050, 0x1ca1, 0x0078, - 0x1d19, 0x6004, 0xa065, 0x0040, 0x1d19, 0x0078, 0x1c84, 0x2804, - 0xa005, 0x0040, 0x1cc5, 0xac68, 0xd99c, 0x00c0, 0x1cb5, 0x6808, - 0xa422, 0x680c, 0xa31b, 0x0078, 0x1cb9, 0x6810, 0xa422, 0x6814, - 0xa31b, 0x0048, 0x1ce4, 0x2300, 0xa405, 0x0040, 0x1ccb, 0x8a51, - 0x0040, 0x1d19, 0x8840, 0x0078, 0x1ca7, 0x6004, 0xa065, 0x0040, - 0x1d19, 0x0078, 0x1c84, 0x8a51, 0x0040, 0x1d19, 0x8840, 0x2804, - 0xa005, 0x00c0, 0x1cde, 0x6004, 0xa065, 0x0040, 0x1d19, 0x6034, - 0xa0cc, 0x000f, 0xa9c0, 0x1c5c, 0x2804, 0x2040, 0x2b68, 0x6850, - 0xc0fc, 0x6852, 0x0078, 0x1d11, 0x8422, 0x8420, 0x831a, 0xa399, - 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0, - 0x1cff, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048, - 0x12d5, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x1d0b, 0x6910, - 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x12d5, 0x6800, - 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd, - 0x6852, 0x2c00, 0x681a, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, - 0x1d1e, 0x087f, 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, - 0x0005, 0x2004, 0xa084, 0x0007, 0x0079, 0x1d26, 0x1d2e, 0x1d2f, - 0x1d32, 0x1d35, 0x1d3a, 0x1d3d, 0x1d42, 0x1d47, 0x007c, 0x1078, - 0x1b28, 0x007c, 0x1078, 0x17a5, 0x007c, 0x1078, 0x17a5, 0x1078, - 0x1b28, 0x007c, 0x1078, 0x145e, 0x007c, 0x1078, 0x1b28, 0x1078, - 0x145e, 0x007c, 0x1078, 0x17a5, 0x1078, 0x145e, 0x007c, 0x1078, - 0x17a5, 0x1078, 0x1b28, 0x1078, 0x145e, 0x007c, 0x127e, 0x2091, - 0x2300, 0x2079, 0x0200, 0x2071, 0x7c80, 0x2069, 0x7700, 0x2009, - 0x0004, 0x7912, 0x7817, 0x0004, 0x1078, 0x202c, 0x781b, 0x0002, - 0x20e1, 0x8700, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, - 0xa084, 0x0007, 0x0079, 0x1d6c, 0x1d90, 0x1d74, 0x1d78, 0x1d7c, - 0x1d82, 0x1d86, 0x1d8a, 0x1d8e, 0x1078, 0x4252, 0x0078, 0x1d90, - 0x1078, 0x4281, 0x0078, 0x1d90, 0x1078, 0x4252, 0x1078, 0x4281, - 0x0078, 0x1d90, 0x1078, 0x1d92, 0x0078, 0x1d90, 0x1078, 0x1d92, - 0x0078, 0x1d90, 0x1078, 0x1d92, 0x0078, 0x1d90, 0x1078, 0x1d92, - 0x127f, 0x007c, 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, - 0x0040, 0x1d9c, 0x1078, 0x12d5, 0xa184, 0x0030, 0x0040, 0x1dad, - 0x6a00, 0xa286, 0x0003, 0x00c0, 0x1da7, 0x1078, 0x12d5, 0x1078, - 0x3553, 0x20e1, 0x9010, 0x0078, 0x1db9, 0xa184, 0x00c0, 0x0040, - 0x1db3, 0x1078, 0x12d5, 0xa184, 0x0300, 0x0040, 0x1db9, 0x20e1, - 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, - 0x0f7e, 0x2071, 0x7700, 0x7128, 0x2001, 0x7923, 0x2102, 0x2001, - 0x792b, 0x2102, 0xa182, 0x0211, 0x00c8, 0x1dd2, 0x2009, 0x0008, - 0x0078, 0x1dfc, 0xa182, 0x0259, 0x00c8, 0x1dda, 0x2009, 0x0007, - 0x0078, 0x1dfc, 0xa182, 0x02c1, 0x00c8, 0x1de2, 0x2009, 0x0006, - 0x0078, 0x1dfc, 0xa182, 0x0349, 0x00c8, 0x1dea, 0x2009, 0x0005, - 0x0078, 0x1dfc, 0xa182, 0x0421, 0x00c8, 0x1df2, 0x2009, 0x0004, - 0x0078, 0x1dfc, 0xa182, 0x0581, 0x00c8, 0x1dfa, 0x2009, 0x0003, - 0x0078, 0x1dfc, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, - 0x0005, 0x00c8, 0x1e06, 0x7916, 0x0078, 0x1e08, 0x7817, 0x0004, - 0x1078, 0x202c, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, - 0x2200, 0x2061, 0x0100, 0x2071, 0x7700, 0x6024, 0x6026, 0x6033, - 0x00ef, 0x60e7, 0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, - 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, - 0x0caf, 0x600f, 0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, - 0x772d, 0x2003, 0x0000, 0x2001, 0x772c, 0x2003, 0x0001, 0x007c, - 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, - 0x002c, 0x00c0, 0x1e47, 0xa184, 0x0007, 0x0079, 0x1e4d, 0xa195, - 0x0004, 0xa284, 0x0007, 0x0079, 0x1e4d, 0x1e79, 0x1e55, 0x1e59, - 0x1e5d, 0x1e63, 0x1e67, 0x1e6d, 0x1e73, 0x1078, 0x47bc, 0x0078, - 0x1e79, 0x1078, 0x48ab, 0x0078, 0x1e79, 0x1078, 0x48ab, 0x1078, - 0x47bc, 0x0078, 0x1e79, 0x1078, 0x1e7e, 0x0078, 0x1e79, 0x1078, - 0x47bc, 0x1078, 0x1e7e, 0x0078, 0x1e79, 0x1078, 0x48ab, 0x1078, - 0x1e7e, 0x0078, 0x1e79, 0x1078, 0x48ab, 0x1078, 0x47bc, 0x1078, - 0x1e7e, 0x027f, 0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, - 0x1f32, 0x017e, 0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, - 0xa196, 0xff00, 0x0040, 0x1ead, 0x6030, 0xa084, 0x00ff, 0x810f, - 0xa116, 0x0040, 0x1ead, 0x7130, 0xd18c, 0x00c0, 0x1ead, 0x2011, - 0x7752, 0x2214, 0xd2ec, 0x0040, 0x1ea1, 0xc18d, 0x7132, 0x0078, - 0x1ead, 0x6240, 0xa294, 0x0010, 0x0040, 0x1eef, 0x6248, 0xa294, - 0xff00, 0xa296, 0xff00, 0x00c0, 0x1eef, 0x037e, 0x73b8, 0x2011, - 0x8013, 0x1078, 0x2d20, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, - 0x7752, 0x220c, 0xd1a4, 0x0040, 0x1ed7, 0x017e, 0x2009, 0x0001, - 0x2011, 0x0100, 0x1078, 0x478a, 0x2019, 0x000e, 0x1078, 0x758f, - 0xa484, 0x00ff, 0xa080, 0x2303, 0x200c, 0xa18c, 0xff00, 0x810f, - 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, 0x75f7, 0x017f, 0xd1ac, - 0x00c0, 0x1ee0, 0x2019, 0x0004, 0x1078, 0x226d, 0x0078, 0x1eef, - 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078, 0x3806, 0x00c0, - 0x1eeb, 0x1078, 0x35f9, 0x8108, 0x00f0, 0x1ee5, 0x157f, 0x0c7f, - 0x047f, 0x6043, 0x0000, 0x2009, 0x00f7, 0x1078, 0x35bc, 0x0f7e, - 0x2079, 0x7949, 0x783c, 0xa086, 0x0000, 0x0040, 0x1f07, 0x6027, - 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, - 0x2011, 0x0003, 0x1078, 0x5892, 0x2011, 0x0002, 0x1078, 0x589c, - 0x1078, 0x57a8, 0x1078, 0x46c0, 0x037e, 0x2019, 0x0000, 0x1078, - 0x583a, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001, 0x7700, 0x2014, - 0xa296, 0x0004, 0x00c0, 0x1f2a, 0xd19c, 0x00c0, 0x1f2a, 0x6228, - 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x7720, 0x2003, 0x0000, - 0x6027, 0x0020, 0xd194, 0x0040, 0x1fd3, 0x0f7e, 0x2079, 0x7949, - 0x783c, 0xa086, 0x0001, 0x00c0, 0x1f56, 0x017e, 0x6027, 0x0004, - 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, - 0x2079, 0x7936, 0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4d50, - 0x1078, 0x4e10, 0x017f, 0x0f7f, 0x0078, 0x1fd3, 0x0f7f, 0x017e, - 0x6220, 0xd2b4, 0x0040, 0x1f8b, 0x1078, 0x46c0, 0x1078, 0x5656, - 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, - 0x0040, 0x1f6e, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, - 0x2061, 0x7936, 0x6028, 0xa09a, 0x0002, 0x00c8, 0x1f7e, 0x8000, - 0x602a, 0x0c7f, 0x1078, 0x5648, 0x0078, 0x1fd2, 0x2019, 0x793f, - 0x2304, 0xa065, 0x0040, 0x1f88, 0x2009, 0x0027, 0x1078, 0x5cfb, - 0x0c7f, 0x0078, 0x1fd2, 0xd2bc, 0x0040, 0x1fd2, 0x1078, 0x46ce, - 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, - 0xa084, 0x4000, 0x0040, 0x1fa0, 0x6803, 0x1000, 0x6803, 0x0000, - 0x0d7f, 0x0c7e, 0x2061, 0x7936, 0x6044, 0xa09a, 0x0002, 0x00c8, - 0x1fc1, 0x8000, 0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1fd2, - 0x1078, 0x46c5, 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, - 0x1fbd, 0x6017, 0x0012, 0x0078, 0x1fd2, 0x6017, 0x0016, 0x0078, - 0x1fd2, 0x037e, 0x2019, 0x0001, 0x1078, 0x583a, 0x037f, 0x2019, - 0x7945, 0x2304, 0xa065, 0x0040, 0x1fd1, 0x2009, 0x004f, 0x1078, - 0x5cfb, 0x0c7f, 0x017f, 0xd19c, 0x0040, 0x1ffb, 0x017e, 0x6028, - 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078, 0x5892, 0x2011, 0x0002, - 0x1078, 0x589c, 0x1078, 0x57a8, 0x1078, 0x46c0, 0x037e, 0x2019, - 0x0000, 0x1078, 0x583a, 0x037f, 0x60e3, 0x0000, 0x1078, 0x7666, - 0x1078, 0x7684, 0x2001, 0x7700, 0x2003, 0x0004, 0x6027, 0x0008, - 0x1078, 0x11c6, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, - 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x7700, 0x71b0, 0x70b2, 0xa116, 0x0040, 0x2025, 0x81ff, 0x0040, - 0x2017, 0x2011, 0x8011, 0x1078, 0x2d20, 0x0078, 0x2025, 0x2011, - 0x8012, 0x1078, 0x2d20, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, - 0x0028, 0x1078, 0x226d, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, - 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, - 0x2061, 0x0100, 0xa190, 0x2047, 0x2204, 0x60f2, 0xa192, 0x0005, - 0x00c8, 0x203e, 0xa190, 0x2050, 0x0078, 0x2040, 0x2011, 0x2054, - 0x2204, 0x60ee, 0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x0840, - 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, - 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, - 0x00a0, 0x2028, 0x2130, 0xa094, 0xff00, 0x00c0, 0x2062, 0x81ff, - 0x0040, 0x2066, 0x1078, 0x4405, 0x0078, 0x206d, 0xa080, 0x2303, - 0x200c, 0xa18c, 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x2303, - 0x200c, 0xa18c, 0x00ff, 0x007c, 0x2094, 0x2098, 0x209c, 0x20a2, - 0x20a8, 0x20ae, 0x20b4, 0x20bc, 0x20c4, 0x20ca, 0x20d0, 0x20d8, - 0x20e0, 0x20e8, 0x20f0, 0x20fa, 0x2104, 0x2104, 0x2104, 0x2104, - 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, 0x2104, - 0x2104, 0x2104, 0x2104, 0x2104, 0x107e, 0x007e, 0x0078, 0x211d, - 0x107e, 0x007e, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, - 0x1078, 0x1d1f, 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1d64, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1d1f, 0x1078, 0x1d64, 0x0078, 0x211d, - 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d1f, 0x1078, 0x1d64, - 0x0078, 0x211d, 0x107e, 0x007e, 0x1078, 0x1e38, 0x1078, 0x1d1f, - 0x1078, 0x1d64, 0x0078, 0x211d, 0x0005, 0x0078, 0x2104, 0xb084, - 0x003c, 0x8004, 0x8004, 0x0079, 0x210d, 0x211d, 0x209a, 0x209e, - 0x20a4, 0x20aa, 0x20b0, 0x20b6, 0x20be, 0x20c6, 0x20cc, 0x20d2, - 0x20da, 0x20e2, 0x20ea, 0x20f2, 0x20fc, 0x0008, 0x2107, 0x007f, - 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, 0x027e, 0x2041, 0x007e, - 0x70bc, 0xd09c, 0x0040, 0x212e, 0x2041, 0x007f, 0x2001, 0x010c, - 0x203c, 0x727c, 0x82ff, 0x0040, 0x2179, 0x037e, 0x738c, 0xa38e, - 0xffff, 0x00c0, 0x213d, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7dc0, - 0x2c04, 0xa38c, 0x0001, 0x0040, 0x214a, 0xa084, 0xff00, 0x8007, - 0x0078, 0x214c, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x216e, 0xa08e, - 0x00ff, 0x0040, 0x2174, 0x2009, 0x0000, 0x1078, 0x2059, 0x1078, - 0x37cb, 0x00c0, 0x2171, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x00c0, 0x2168, 0x1078, 0x21cb, 0x0040, 0x2171, 0x0078, 0x216e, - 0x1078, 0x22cf, 0x1078, 0x21f2, 0x0040, 0x2171, 0x8318, 0x0078, - 0x213d, 0x738e, 0x0078, 0x2176, 0x708f, 0xffff, 0x037f, 0x0078, - 0x21c8, 0xa780, 0x2303, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x708c, - 0xa096, 0xffff, 0x0040, 0x218b, 0xa812, 0x00c8, 0x219b, 0x708f, - 0xffff, 0x0078, 0x21c5, 0x2009, 0x0000, 0x70bc, 0xd09c, 0x0040, - 0x2196, 0xd094, 0x0040, 0x2196, 0x2009, 0x007e, 0x2100, 0xa802, - 0x20a8, 0x0078, 0x219f, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, - 0x157e, 0x017e, 0xa106, 0x0040, 0x21bc, 0x1078, 0x37cb, 0x00c0, - 0x21c5, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x21b6, - 0x1078, 0x21cb, 0x0040, 0x21c5, 0x0078, 0x21bc, 0x1078, 0x22cf, - 0x1078, 0x21f2, 0x0040, 0x21c5, 0x017f, 0x8108, 0x157f, 0x00f0, - 0x219f, 0x708f, 0xffff, 0x0078, 0x21c8, 0x017f, 0x157f, 0x718e, - 0x027f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, - 0x1078, 0x5c6e, 0x0040, 0x21ed, 0x2d00, 0x601a, 0x601f, 0x0001, - 0x2001, 0x0000, 0x1078, 0x379a, 0x2001, 0x0000, 0x1078, 0x37ae, - 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, - 0x0004, 0x1078, 0x5cfb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, - 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, - 0x5c6e, 0x0040, 0x2214, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x379a, 0x2001, 0x0002, 0x1078, 0x37ae, 0x127e, - 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, - 0x1078, 0x5cfb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x027e, 0x2009, 0x0080, 0x1078, 0x37cb, 0x00c0, - 0x2227, 0x1078, 0x222a, 0x0040, 0x2227, 0x70c3, 0xffff, 0x027f, - 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, - 0x5c6e, 0x0040, 0x224c, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x379a, 0x2001, 0x0002, 0x1078, 0x37ae, 0x127e, - 0x2091, 0x8000, 0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, - 0x1078, 0x5cfb, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x0d7e, 0x2009, 0x007f, 0x1078, 0x37cb, 0x00c0, - 0x226a, 0x2c68, 0x1078, 0x5c6e, 0x0040, 0x226a, 0x2d00, 0x601a, - 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5cfb, - 0xa085, 0x0001, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, - 0x037e, 0x027e, 0x1078, 0x4a3f, 0x1078, 0x49ef, 0x1078, 0x61c8, - 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3806, 0x00c0, - 0x2285, 0x1078, 0x39f0, 0x1078, 0x35f9, 0x017f, 0x8108, 0x00f0, - 0x227c, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, - 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, - 0x2019, 0x0029, 0x1078, 0x4a38, 0x1078, 0x497b, 0x2c08, 0x1078, - 0x7431, 0x017f, 0x2e60, 0x1078, 0x39f0, 0xa186, 0x007f, 0x0040, - 0x22ab, 0x1078, 0x35f9, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, - 0x007c, 0x0e7e, 0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, - 0x00c0, 0x22c5, 0x2071, 0x7700, 0x7088, 0xa005, 0x0040, 0x22c2, - 0x8001, 0x708a, 0x007f, 0x0e7f, 0x007c, 0x2071, 0x7700, 0x70c4, - 0xa005, 0x0040, 0x22c2, 0x8001, 0x70c6, 0x0078, 0x22c2, 0x6000, - 0xc08c, 0x6002, 0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, - 0x157e, 0x81ff, 0x00c0, 0x22e0, 0x20a9, 0x0001, 0x0078, 0x22e4, - 0x20a9, 0x007f, 0x2011, 0x0000, 0x027e, 0xa2e0, 0x7820, 0x2c64, - 0x8cff, 0x0040, 0x22f6, 0x2019, 0x0029, 0x1078, 0x4a38, 0x1078, - 0x497b, 0x2c08, 0x1078, 0x7431, 0x1078, 0x39f0, 0x027f, 0x8210, - 0x00f0, 0x22e4, 0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, - 0x0c7f, 0x0e7f, 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, - 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, - 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, - 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, - 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, - 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, - 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, - 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, - 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, - 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, - 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, - 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, - 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, - 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, - 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, - 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, - 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, - 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, - 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, - 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, - 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, - 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, - 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, - 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, - 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, - 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, - 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x2071, 0x776d, 0x7003, 0x0002, 0xa006, - 0x7012, 0x7016, 0x703a, 0x703e, 0x7033, 0x777d, 0x7037, 0x777d, - 0x7007, 0x0001, 0x2061, 0x77bd, 0x6003, 0x0002, 0x007c, 0x0090, - 0x242a, 0x0068, 0x242a, 0x2071, 0x776d, 0x2b78, 0x7818, 0xd084, - 0x00c0, 0x242a, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2511, - 0x0079, 0x24ae, 0x007c, 0x2071, 0x776d, 0x7004, 0x0079, 0x2430, - 0x2434, 0x2435, 0x243f, 0x2451, 0x007c, 0x0090, 0x243e, 0x0068, - 0x243e, 0x2b78, 0x7818, 0xd084, 0x0040, 0x245d, 0x007c, 0x2b78, - 0x2061, 0x77bd, 0x6008, 0xa08e, 0x0100, 0x0040, 0x244c, 0xa086, - 0x0200, 0x0040, 0x2509, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, - 0x007a, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x2459, - 0x007c, 0x2a60, 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, - 0x0040, 0x00c8, 0x2466, 0x61b0, 0x0079, 0x246e, 0x2100, 0xa08a, - 0x0036, 0x00c8, 0x2505, 0x61b0, 0x0079, 0x24ae, 0x24e7, 0x2519, - 0x2521, 0x2525, 0x252d, 0x2533, 0x2537, 0x2540, 0x2544, 0x254c, - 0x2550, 0x2505, 0x2505, 0x2505, 0x2554, 0x2505, 0x2564, 0x257b, - 0x2592, 0x260e, 0x2613, 0x2640, 0x269a, 0x26ab, 0x26c9, 0x26fc, - 0x2706, 0x2713, 0x2726, 0x2740, 0x2749, 0x2786, 0x278c, 0x2505, - 0x279c, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x27a0, 0x27a6, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x27ae, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x27bb, 0x27c1, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x254c, 0x2550, - 0x2505, 0x2505, 0x27d3, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, - 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2505, 0x2820, 0x28ed, - 0x2901, 0x2908, 0x296b, 0x29c6, 0x29d1, 0x2a10, 0x2a1f, 0x2a2e, - 0x2a31, 0x27d7, 0x2a5a, 0x2aa1, 0x2aae, 0x2ba0, 0x2c86, 0x2cad, - 0x2dab, 0x2db9, 0x2dc6, 0x2e00, 0x713c, 0x0078, 0x24e7, 0x2021, - 0x4000, 0x1078, 0x2cfa, 0x127e, 0x2091, 0x8000, 0x0068, 0x24f4, - 0x7818, 0xd084, 0x0040, 0x24f7, 0x127f, 0x0078, 0x24eb, 0x781b, - 0x0001, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, - 0x0001, 0x2091, 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, - 0x24e9, 0x2021, 0x4002, 0x0078, 0x24e9, 0x2021, 0x4003, 0x0078, - 0x24e9, 0x2021, 0x4005, 0x0078, 0x24e9, 0x2021, 0x4006, 0x0078, - 0x24e9, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, - 0x2d09, 0x7823, 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, - 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2d0d, 0x7924, 0x7828, 0x2114, - 0x200a, 0x0078, 0x24e7, 0x7924, 0x2114, 0x0078, 0x24e7, 0x2099, - 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x24e7, - 0x7824, 0x2060, 0x0078, 0x2556, 0x2009, 0x0001, 0x2011, 0x000f, - 0x2019, 0x0007, 0x0078, 0x24e7, 0x7d38, 0x7c3c, 0x0078, 0x251b, - 0x7d38, 0x7c3c, 0x0078, 0x2527, 0x2061, 0x1000, 0x610c, 0xa006, - 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, 0x2558, 0x2010, 0xa005, - 0x0040, 0x24e7, 0x0078, 0x250d, 0x2061, 0x7751, 0x7824, 0x7930, - 0xa11a, 0x00c8, 0x2515, 0x8019, 0x0040, 0x2515, 0x604a, 0x6142, - 0x782c, 0x6052, 0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, - 0x3d43, 0x0078, 0x24e7, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, - 0x00c8, 0x2515, 0x8019, 0x0040, 0x2515, 0x604e, 0x6146, 0x782c, - 0x6062, 0x7828, 0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3b19, - 0x0078, 0x24e7, 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2511, 0x7924, - 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0x7774, 0x41a1, 0x1078, - 0x2cbf, 0x0040, 0x2511, 0x2009, 0x0020, 0x1078, 0x2d09, 0x701b, - 0x25aa, 0x007c, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, - 0x0040, 0x25b6, 0xa096, 0x0019, 0x00c0, 0x2511, 0x810f, 0xa18c, - 0x00ff, 0x0040, 0x2511, 0x710e, 0x700c, 0x8001, 0x0040, 0x25e7, - 0x700e, 0x1078, 0x2cbf, 0x0040, 0x2511, 0x2009, 0x0020, 0x2061, - 0x77bd, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, - 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x2d09, 0x701b, - 0x25da, 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, - 0x25e5, 0xa096, 0x000a, 0x00c0, 0x2511, 0x0078, 0x25bc, 0x7010, - 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x36fe, 0x00c0, 0x25f5, - 0x7007, 0x0003, 0x701b, 0x25f7, 0x007c, 0x1078, 0x3bdc, 0x127e, - 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0x7774, 0x530a, 0x2100, - 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, - 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, 0x2d0d, 0x6198, 0x7824, - 0x609a, 0x0078, 0x24e7, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, - 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, - 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, - 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, - 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, - 0x20c1, 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, - 0x81ff, 0x00c0, 0x2511, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, - 0x3806, 0x00c0, 0x2515, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, - 0x0048, 0x2654, 0x0078, 0x2515, 0x7c28, 0x7d2c, 0x1078, 0x39b7, - 0xd28c, 0x00c0, 0x265f, 0x1078, 0x394b, 0x0078, 0x2661, 0x1078, - 0x3985, 0x00c0, 0x268b, 0x2061, 0x7e00, 0x127e, 0x2091, 0x8000, - 0x6000, 0xa086, 0x0000, 0x0040, 0x2679, 0x6010, 0xa06d, 0x0040, - 0x2679, 0x683c, 0xa406, 0x00c0, 0x2679, 0x6840, 0xa506, 0x0040, - 0x2684, 0x127f, 0xace0, 0x0008, 0x2001, 0x7715, 0x2004, 0xac02, - 0x00c8, 0x2511, 0x0078, 0x2665, 0x1078, 0x67fd, 0x127f, 0x0040, - 0x2511, 0x0078, 0x24e7, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3bdc, - 0x127e, 0x2091, 0x8000, 0x1078, 0x6c12, 0x1078, 0x3b4c, 0x127f, - 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2cd7, 0x0040, - 0x2515, 0x1078, 0x388f, 0x0040, 0x2511, 0x1078, 0x39c4, 0x0040, - 0x2511, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2ce9, - 0x0040, 0x2515, 0x1078, 0x3a2b, 0x0040, 0x2511, 0x2019, 0x0005, - 0x1078, 0x39e5, 0x0040, 0x2511, 0x7828, 0xa08a, 0x1000, 0x00c8, - 0x2515, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4650, 0x0078, - 0x24e7, 0x127e, 0x2091, 0x8000, 0x81ff, 0x00c0, 0x26f6, 0x2029, - 0x00ff, 0x644c, 0x2400, 0xa506, 0x0040, 0x26f0, 0x2508, 0x1078, - 0x3806, 0x00c0, 0x26f0, 0x1078, 0x3a2b, 0x0040, 0x2511, 0x2019, - 0x0004, 0x1078, 0x39e5, 0x0040, 0x26f6, 0x7824, 0xa08a, 0x1000, - 0x00c8, 0x26f9, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4650, - 0x8529, 0x00c8, 0x26d2, 0x127f, 0x0078, 0x24e7, 0x127f, 0x0078, - 0x2511, 0x127f, 0x0078, 0x2515, 0x1078, 0x2cd7, 0x0040, 0x2515, - 0x1078, 0x38fc, 0x1078, 0x39b7, 0x0078, 0x24e7, 0x81ff, 0x00c0, - 0x2511, 0x1078, 0x2cd7, 0x0040, 0x2515, 0x1078, 0x38eb, 0x1078, - 0x39b7, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2cd7, - 0x0040, 0x2515, 0x1078, 0x3988, 0x0040, 0x2511, 0x1078, 0x3747, - 0x1078, 0x3944, 0x1078, 0x39b7, 0x0078, 0x24e7, 0x1078, 0x2cd7, - 0x0040, 0x2515, 0x1078, 0x388f, 0x0040, 0x2511, 0x62a0, 0x2019, - 0x0005, 0x0c7e, 0x1078, 0x39f0, 0x0c7f, 0x1078, 0x4a38, 0x1078, - 0x497b, 0x2c08, 0x1078, 0x7431, 0x1078, 0x39b7, 0x0078, 0x24e7, - 0x1078, 0x2cd7, 0x0040, 0x2515, 0x1078, 0x39b7, 0x2208, 0x0078, - 0x24e7, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0x77ff, 0x6810, 0x6914, - 0xa10a, 0x00c8, 0x2755, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, - 0x2019, 0x0000, 0x20a9, 0x007e, 0x2069, 0x7820, 0x2d04, 0xa075, - 0x0040, 0x276a, 0x704c, 0x1078, 0x2774, 0xa210, 0x7080, 0x1078, - 0x2774, 0xa318, 0x8d68, 0x00f0, 0x275e, 0x2300, 0xa218, 0x0e7f, - 0x0d7f, 0x157f, 0x0078, 0x24e7, 0x0f7e, 0x017e, 0xa07d, 0x0040, - 0x2783, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x2783, - 0x2178, 0x0078, 0x277b, 0x017f, 0x0f7f, 0x007c, 0x2069, 0x77ff, - 0x6910, 0x629c, 0x0078, 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x614c, - 0xa190, 0x2303, 0x2214, 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, - 0xa215, 0x6364, 0x0078, 0x24e7, 0x613c, 0x6240, 0x0078, 0x24e7, - 0x1078, 0x2ce9, 0x0040, 0x2515, 0x0078, 0x24e7, 0x1078, 0x2ce9, - 0x0040, 0x2515, 0x6244, 0x6338, 0x0078, 0x24e7, 0x613c, 0x6240, - 0x7824, 0x603e, 0x7b28, 0x6342, 0x2069, 0x7751, 0x831f, 0xa305, - 0x6816, 0x0078, 0x24e7, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x0078, - 0x24e7, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x7828, 0xa00d, 0x0040, - 0x2515, 0x782c, 0xa005, 0x0040, 0x2515, 0x6244, 0x6146, 0x6338, - 0x603a, 0x0078, 0x24e7, 0x7d38, 0x7c3c, 0x0078, 0x2594, 0x7824, - 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2511, 0x624c, 0xa084, - 0xff00, 0x8007, 0xa206, 0x00c0, 0x27ef, 0x2001, 0x7740, 0x2009, - 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d0d, 0x81ff, - 0x00c0, 0x2511, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2511, 0x0c7e, 0x1078, 0x2cbf, - 0x0c7f, 0x0040, 0x2511, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x6b0c, 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, 0x2811, - 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2511, 0xad80, 0x000e, - 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d0d, - 0x1078, 0x2cbf, 0x0040, 0x2511, 0x2009, 0x001c, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x1078, 0x2d09, 0x701b, 0x282f, 0x007c, 0xade8, - 0x000d, 0x6800, 0xa005, 0x0040, 0x2515, 0x6804, 0xd0ac, 0x0040, - 0x283c, 0xd0a4, 0x0040, 0x2515, 0xd094, 0x0040, 0x2847, 0x0c7e, - 0x2061, 0x0100, 0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, - 0x0040, 0x2852, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, - 0x6106, 0x0c7f, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, - 0x2867, 0xd084, 0x0040, 0x2867, 0x6a28, 0xa28a, 0x007f, 0x00c8, - 0x2515, 0xa288, 0x2303, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, - 0x0040, 0x2870, 0x6828, 0xa08a, 0x007f, 0x00c8, 0x2515, 0x604e, - 0x6808, 0xa08a, 0x0100, 0x0048, 0x2515, 0xa08a, 0x0841, 0x00c8, - 0x2515, 0xa084, 0x0007, 0x00c0, 0x2515, 0x680c, 0xa005, 0x0040, - 0x2515, 0x6810, 0xa005, 0x0040, 0x2515, 0x6848, 0x6940, 0xa10a, - 0x00c8, 0x2515, 0x8001, 0x0040, 0x2515, 0x684c, 0x6944, 0xa10a, - 0x00c8, 0x2515, 0x8001, 0x0040, 0x2515, 0x20a9, 0x001c, 0x2d98, - 0x2069, 0x7751, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, - 0x8007, 0xa084, 0x00ff, 0x6042, 0x1078, 0x3d43, 0x1078, 0x3b19, - 0x6000, 0xa086, 0x0000, 0x00c0, 0x28eb, 0x6808, 0x602a, 0x1078, - 0x1dbe, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, - 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, - 0x28cb, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, - 0x831f, 0x0078, 0x28cd, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, - 0x6312, 0x1078, 0x46dc, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, - 0x602f, 0x0000, 0x0c7f, 0x60b4, 0xa005, 0x0040, 0x28e7, 0x6003, - 0x0001, 0x2091, 0x301d, 0x1078, 0x3553, 0x0078, 0x28eb, 0x6003, - 0x0004, 0x2091, 0x301d, 0x0078, 0x24e7, 0x6000, 0xa086, 0x0000, - 0x0040, 0x2511, 0x2069, 0x7751, 0x7830, 0x6842, 0x7834, 0x6846, - 0x2d00, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, - 0x2d0d, 0x81ff, 0x00c0, 0x2511, 0x1078, 0x3553, 0x0078, 0x24e7, - 0x81ff, 0x00c0, 0x2511, 0x617c, 0x81ff, 0x0040, 0x2922, 0x703f, - 0x0000, 0x2001, 0x7dc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078, 0x2d0d, 0x701b, 0x24e4, - 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x7dc0, 0x20a9, - 0x0040, 0x20a1, 0x7dc0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, - 0x2303, 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, - 0x2100, 0xa506, 0x0040, 0x2954, 0x1078, 0x3806, 0x00c0, 0x2954, - 0x6014, 0x821c, 0x0048, 0x294c, 0xa398, 0x7dc0, 0xa085, 0xff00, - 0x8007, 0x201a, 0x0078, 0x2953, 0xa398, 0x7dc0, 0x2324, 0xa4a4, - 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, - 0x295b, 0x0078, 0x2938, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, - 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x7dc0, 0x2099, 0x7dc0, 0x1078, - 0x359c, 0x0078, 0x2911, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x0c7e, - 0x1078, 0x2cbf, 0x0c7f, 0x0040, 0x2511, 0x2001, 0x7752, 0x2004, - 0xd0b4, 0x0040, 0x2998, 0x6000, 0xd08c, 0x00c0, 0x2998, 0x6004, - 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2998, 0x6837, 0x0000, - 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6b44, 0x0040, 0x2511, 0x7007, - 0x0003, 0x701b, 0x2994, 0x007c, 0x1078, 0x2ce9, 0x0040, 0x2515, - 0x20a9, 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, - 0x0002, 0xac80, 0x0004, 0x2098, 0xad80, 0x0004, 0x20a0, 0x1078, - 0x359c, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, - 0x20a0, 0x1078, 0x359c, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, - 0xad80, 0x000a, 0x20a0, 0x1078, 0x359c, 0x2d00, 0x2009, 0x002b, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d0d, 0x81ff, 0x00c0, - 0x2511, 0x1078, 0x2cd7, 0x0040, 0x2515, 0x1078, 0x39cf, 0x0078, - 0x24e7, 0x81ff, 0x00c0, 0x2511, 0x7828, 0xa08a, 0x1000, 0x00c8, - 0x2515, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x1078, 0x3a2b, 0x0040, - 0x2511, 0x2019, 0x0004, 0x1078, 0x39e5, 0x7924, 0x810f, 0x7a28, - 0x1078, 0x29ec, 0x0078, 0x24e7, 0xa186, 0x00ff, 0x0040, 0x29f4, - 0x1078, 0x2a04, 0x0078, 0x2a03, 0x2029, 0x007e, 0x2061, 0x7700, - 0x644c, 0x2400, 0xa506, 0x0040, 0x2a00, 0x2508, 0x1078, 0x2a04, - 0x8529, 0x00c8, 0x29f9, 0x007c, 0x1078, 0x3806, 0x00c0, 0x2a0f, - 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4650, 0x007c, - 0x81ff, 0x00c0, 0x2511, 0x1078, 0x2cd7, 0x0040, 0x2515, 0x1078, - 0x388f, 0x0040, 0x2511, 0x1078, 0x39da, 0x0078, 0x24e7, 0x81ff, - 0x00c0, 0x2511, 0x1078, 0x2cd7, 0x0040, 0x2515, 0x1078, 0x388f, - 0x0040, 0x2511, 0x1078, 0x39c4, 0x0078, 0x24e7, 0x6100, 0x0078, - 0x24e7, 0x1078, 0x2ce9, 0x0040, 0x2515, 0x6004, 0xa086, 0x0707, - 0x0040, 0x2515, 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, - 0x2511, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x2a4a, - 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, - 0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, - 0x0078, 0x24e7, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040, - 0x2a64, 0x81ff, 0x00c0, 0x2511, 0x7828, 0xa08a, 0x1000, 0x00c8, - 0x2515, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, - 0x2a78, 0xa182, 0x007f, 0x00c8, 0x2515, 0x2100, 0x1078, 0x206e, - 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7949, 0x601b, - 0x0000, 0x601f, 0x0000, 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, - 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, - 0x001e, 0x2011, 0x3578, 0x1078, 0x46d3, 0x7924, 0xa18c, 0xff00, - 0x810f, 0x7a28, 0x1078, 0x29ec, 0x127f, 0x0c7f, 0x027f, 0x0078, - 0x24e7, 0x7924, 0xa18c, 0xff00, 0x810f, 0x0c7e, 0x1078, 0x37cb, - 0x2c08, 0x0c7f, 0x00c0, 0x2515, 0x0078, 0x24e7, 0x81ff, 0x00c0, - 0x2511, 0x60bc, 0xd09c, 0x0040, 0x2511, 0x1078, 0x2cbf, 0x0040, - 0x2511, 0x6823, 0x0000, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x1078, 0x2d09, 0x701b, 0x2ac5, 0x007c, 0x2009, 0x0080, 0x1078, - 0x3806, 0x00c0, 0x2ad2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x0040, 0x2ad6, 0x2021, 0x400a, 0x0078, 0x24e9, 0x0d7e, 0xade8, - 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, - 0xa0be, 0x0100, 0x0040, 0x2b48, 0xa0be, 0x0112, 0x0040, 0x2b48, - 0xa0be, 0x0113, 0x0040, 0x2b48, 0xa0be, 0x0114, 0x0040, 0x2b48, - 0xa0be, 0x0117, 0x0040, 0x2b48, 0xa0be, 0x011a, 0x0040, 0x2b48, - 0xa0be, 0x0121, 0x0040, 0x2b3e, 0xa0be, 0x0131, 0x0040, 0x2b3e, - 0xa0be, 0x0171, 0x0040, 0x2b48, 0xa0be, 0x0173, 0x0040, 0x2b48, - 0xa0be, 0x01a1, 0x00c0, 0x2b11, 0x6830, 0x8007, 0x6832, 0x0078, - 0x2b4e, 0xa0be, 0x0212, 0x0040, 0x2b44, 0xa0be, 0x0213, 0x0040, - 0x2b44, 0xa0be, 0x0214, 0x0040, 0x2b36, 0xa0be, 0x0217, 0x0040, - 0x2b30, 0xa0be, 0x021a, 0x00c0, 0x2b2a, 0x6838, 0x8007, 0x683a, - 0x0078, 0x2b48, 0xa0be, 0x0300, 0x0040, 0x2b48, 0x0078, 0x2511, - 0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x2b7c, 0xad80, 0x000e, - 0x20a9, 0x0001, 0x1078, 0x2b7c, 0x0078, 0x2b48, 0xad80, 0x000c, - 0x1078, 0x2b8a, 0x0078, 0x2b4e, 0xad80, 0x000e, 0x1078, 0x2b8a, - 0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x2b7c, 0x0c7e, 0x1078, - 0x2cbf, 0x0040, 0x2b71, 0x6837, 0x0119, 0x684f, 0x0020, 0x685b, - 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, - 0x6d92, 0x6996, 0x689b, 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, - 0x1078, 0x6b28, 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, 0x2b75, - 0x007c, 0x0c7f, 0x0d7f, 0x0078, 0x2511, 0x6820, 0xa086, 0x8001, - 0x0040, 0x2511, 0x0078, 0x24e7, 0x017e, 0x2008, 0x2044, 0x8000, - 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x00f0, 0x2b7e, - 0x017f, 0x007c, 0x017e, 0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, - 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, - 0x8108, 0x290a, 0x8108, 0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, - 0x81ff, 0x00c0, 0x2511, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, - 0xa182, 0x0080, 0x0048, 0x2515, 0xa182, 0x00ff, 0x00c8, 0x2515, - 0x7a2c, 0x7b28, 0x6064, 0xa306, 0x00c0, 0x2bc1, 0x6068, 0xa246, - 0xa8c4, 0xff00, 0x0040, 0x2515, 0xa206, 0x00c0, 0x2bc1, 0x0078, - 0x2515, 0x0c7e, 0x1078, 0x2c2a, 0x2c68, 0x0c7f, 0x0040, 0x2be8, - 0xa0c6, 0x4000, 0x00c0, 0x2bce, 0x0078, 0x2be5, 0xa0c6, 0x4007, - 0x00c0, 0x2bd5, 0x2408, 0x0078, 0x2be5, 0xa0c6, 0x4008, 0x00c0, - 0x2bdd, 0x2708, 0x2610, 0x0078, 0x2be5, 0xa0c6, 0x4009, 0x00c0, - 0x2be3, 0x0078, 0x2be5, 0x2001, 0x4006, 0x2020, 0x0078, 0x24e9, - 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x5c6e, 0x0040, - 0x2c18, 0x2d00, 0x601a, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, - 0x2cbf, 0x0c7f, 0x2b70, 0x0040, 0x2511, 0x6837, 0x0000, 0x2d00, - 0x6012, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x379a, 0x2001, - 0x0002, 0x1078, 0x37ae, 0x127e, 0x2091, 0x8000, 0x7088, 0x8000, - 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5cfb, 0xa085, 0x0001, - 0x0e7f, 0x0c7f, 0x0b7f, 0x017f, 0x0040, 0x2511, 0x7007, 0x0003, - 0x701b, 0x2c23, 0x007c, 0x6830, 0xa086, 0x0100, 0x00c0, 0x24e7, - 0x0078, 0x2511, 0x0e7e, 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, - 0x20a9, 0x007f, 0x2071, 0x78a0, 0x2e04, 0xa005, 0x00c0, 0x2c3e, - 0x2100, 0xa406, 0x0040, 0x2c7b, 0x0078, 0x2c6f, 0x2068, 0x6f10, - 0x2700, 0xa306, 0x00c0, 0x2c60, 0x6e14, 0x2600, 0xa206, 0x00c0, - 0x2c60, 0x2400, 0xa106, 0x00c0, 0x2c5c, 0x2d60, 0xd884, 0x0040, - 0x2c81, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2c81, - 0x2001, 0x4000, 0x0078, 0x2c82, 0x2001, 0x4007, 0x0078, 0x2c82, - 0x2400, 0xa106, 0x00c0, 0x2c6f, 0x6e14, 0x87ff, 0x00c0, 0x2c6b, - 0x86ff, 0x0040, 0x2c7b, 0x2001, 0x4008, 0x0078, 0x2c82, 0x8420, - 0x8e70, 0x00f0, 0x2c34, 0x2001, 0x4009, 0x0078, 0x2c82, 0x2001, - 0x0001, 0x0078, 0x2c82, 0x1078, 0x37cb, 0x00c0, 0x2c77, 0x6312, - 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff, 0x00c0, - 0x2511, 0x1078, 0x2cbf, 0x0040, 0x2511, 0x6837, 0x0000, 0x7824, - 0xa005, 0x0040, 0x2515, 0xa096, 0x00ff, 0x0040, 0x2c9b, 0xa092, - 0x0004, 0x00c8, 0x2515, 0x2010, 0x2d18, 0x1078, 0x2251, 0x0040, - 0x2511, 0x7007, 0x0003, 0x701b, 0x2ca6, 0x007c, 0x6830, 0xa086, - 0x0100, 0x0040, 0x2511, 0x0078, 0x24e7, 0x7924, 0xa18c, 0xff00, - 0x810f, 0xa182, 0x0080, 0x0048, 0x2515, 0xa182, 0x00ff, 0x00c8, - 0x2515, 0x1078, 0x6a44, 0x1078, 0x37ee, 0x0078, 0x24e7, 0x1078, - 0x1314, 0x0040, 0x2cd6, 0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, - 0x2cce, 0x2d00, 0x7012, 0x7016, 0x0078, 0x2cd4, 0x7014, 0x6802, - 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c, 0x7924, - 0x810f, 0xa18c, 0x00ff, 0x1078, 0x3806, 0x00c0, 0x2ce6, 0x7e28, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x2ce7, 0xa066, 0x8cff, - 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, 0x3806, 0x00c0, - 0x2cf7, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, 0x2cf8, 0xa066, - 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, 0x2d05, 0x2168, - 0x6904, 0x1078, 0x1348, 0x0078, 0x2cfc, 0x7112, 0x7116, 0x017f, - 0x007c, 0x2031, 0x0001, 0x0078, 0x2d0f, 0x2031, 0x0000, 0x2061, - 0x77bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, - 0x2c10, 0x1078, 0x137f, 0x7007, 0x0002, 0x701b, 0x24e7, 0x007c, - 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x777b, - 0x2004, 0xa005, 0x00c0, 0x2d3b, 0x0068, 0x2d3b, 0x7818, 0xd084, - 0x00c0, 0x2d3b, 0x781b, 0x0001, 0x7a22, 0x7b26, 0x7c2a, 0x2091, - 0x4080, 0x0078, 0x2d60, 0x017e, 0x0c7e, 0x0e7e, 0x2071, 0x776d, - 0x7138, 0xa182, 0x0008, 0x0048, 0x2d49, 0x7030, 0x2060, 0x0078, - 0x2d5a, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x77bd, 0x0048, 0x2d52, - 0x2061, 0x777d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2d58, 0x7036, - 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, 0x0c7f, 0x017f, - 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x776d, 0x7038, 0xa005, - 0x0040, 0x2d9c, 0x127e, 0x2091, 0x8000, 0x0068, 0x2d9b, 0x0f7e, - 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2d9a, 0x0c7e, 0x781b, - 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x6008, - 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005, 0x00c0, - 0x2d90, 0x7033, 0x777d, 0x7037, 0x777d, 0x0c7f, 0x0078, 0x2d9a, - 0xac80, 0x0008, 0xa0fa, 0x77bd, 0x0048, 0x2d98, 0x2001, 0x777d, - 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, 0x027e, 0x2001, - 0x7752, 0x2004, 0xd0c4, 0x0040, 0x2da9, 0x2011, 0x8014, 0x1078, - 0x2d20, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2511, 0x127e, 0x2091, - 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x3553, 0x127f, 0x0078, - 0x24e7, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, 0x2dc4, 0x61c8, - 0xa10d, 0x61ca, 0x0078, 0x24e7, 0x0078, 0x2515, 0x81ff, 0x00c0, - 0x2511, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2511, 0x2001, 0x7752, - 0x2004, 0xd0a4, 0x00c0, 0x2511, 0x1078, 0x2ce9, 0x0040, 0x2515, - 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2de3, 0x7828, - 0xa005, 0x0040, 0x24e7, 0x0c7e, 0x1078, 0x2cbf, 0x0c7f, 0x0040, - 0x2511, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x6bb1, 0x0040, 0x2511, 0x7007, 0x0003, 0x701b, 0x2df9, - 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2511, 0x0078, 0x24e7, - 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2511, 0x7f24, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2cbf, 0x0040, 0x2511, - 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, - 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x3806, 0x00c0, 0x2e46, - 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e46, 0xa084, 0x00ff, 0xa0c6, - 0x0006, 0x00c0, 0x2e46, 0x87ff, 0x0040, 0x2e39, 0xac80, 0x0006, - 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2b8a, 0x0078, - 0x2e42, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, - 0x1078, 0x2b8a, 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108, 0xa186, - 0x007e, 0x0040, 0x2e51, 0xa686, 0x0028, 0x0040, 0x2e5a, 0x0078, - 0x2e1c, 0x86ff, 0x00c0, 0x2e58, 0x7120, 0x810b, 0x0078, 0x24e7, - 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, - 0x77bd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, - 0x642e, 0x6532, 0x2c10, 0x1078, 0x137f, 0x7007, 0x0002, 0x701b, - 0x2e72, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2e84, 0x711c, 0x7024, - 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x77bd, 0x6224, 0x6328, - 0x642c, 0x6530, 0x0078, 0x2e1c, 0x7120, 0x810b, 0x0078, 0x24e7, - 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700, 0x6044, - 0xd0a4, 0x00c0, 0x2eb1, 0xd084, 0x0040, 0x2e9a, 0x1078, 0x2fd8, - 0x0078, 0x2ead, 0xd08c, 0x0040, 0x2ea1, 0x1078, 0x2eef, 0x0078, - 0x2ead, 0xd094, 0x0040, 0x2ea8, 0x1078, 0x2ed2, 0x0078, 0x2ead, - 0xd09c, 0x0040, 0x2ead, 0x1078, 0x2ebb, 0x0e7f, 0x0c7f, 0x127f, - 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2eb8, 0xc19d, 0x612a, - 0x017f, 0x0078, 0x2ead, 0x6043, 0x0040, 0x6043, 0x0000, 0x706f, - 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x2009, 0x7dc0, 0x200b, - 0x0000, 0x7073, 0x000f, 0x2009, 0x000f, 0x2011, 0x3513, 0x1078, - 0x46d3, 0x007c, 0x7070, 0xa005, 0x00c0, 0x2eee, 0x2011, 0x3513, - 0x1078, 0x4643, 0x6043, 0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, - 0x00c0, 0x2eea, 0x7083, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, - 0x0078, 0x2eee, 0x7077, 0x0000, 0x0078, 0x2eee, 0x007c, 0x7074, - 0xa08a, 0x0003, 0x00c8, 0x2ef8, 0x1079, 0x2efb, 0x0078, 0x2efa, - 0x1078, 0x12d5, 0x007c, 0x2efe, 0x2f4d, 0x2fd7, 0x0f7e, 0x7077, - 0x0001, 0x20e1, 0xa000, 0x20e1, 0x8700, 0x1078, 0x1dbe, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x2079, 0x7c00, 0x207b, 0x2200, 0x7807, - 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, - 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, - 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079, 0x7c0c, 0x207b, - 0x1101, 0x7807, 0x0000, 0x2099, 0x7705, 0x20a1, 0x7c0e, 0x20a9, - 0x0004, 0x53a3, 0x2079, 0x7c12, 0x207b, 0x0000, 0x7807, 0x0000, - 0x2099, 0x7c00, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, - 0x000c, 0x600f, 0x0000, 0x1078, 0x353a, 0x0f7f, 0x707b, 0x0000, - 0x6043, 0x0008, 0x6043, 0x0000, 0x007c, 0x0d7e, 0x7078, 0x707b, - 0x0000, 0xa025, 0x0040, 0x2fc1, 0x6020, 0xd0b4, 0x00c0, 0x2fbf, - 0x7184, 0x81ff, 0x0040, 0x2fa8, 0xa486, 0x000c, 0x00c0, 0x2fb3, - 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0x7c80, 0x2019, 0x7c00, - 0x220c, 0x2304, 0xa106, 0x00c0, 0x2f7f, 0x8210, 0x8318, 0x00f0, - 0x2f68, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, - 0x0006, 0x7077, 0x0002, 0x7083, 0x0002, 0x0078, 0x2fbf, 0x2069, - 0x7c80, 0x6930, 0xa18e, 0x1101, 0x00c0, 0x2fb3, 0x6834, 0xa005, - 0x00c0, 0x2fb3, 0x6900, 0xa18c, 0x00ff, 0x00c0, 0x2f93, 0x6804, - 0xa005, 0x0040, 0x2fa8, 0x2011, 0x7c8e, 0x2019, 0x7705, 0x20a9, - 0x0004, 0x220c, 0x2304, 0xa102, 0x0048, 0x2fa6, 0x00c0, 0x2fb3, - 0x8210, 0x8318, 0x00f0, 0x2f99, 0x0078, 0x2fb3, 0x7087, 0x0000, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, - 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x6020, - 0xd0b4, 0x00c0, 0x2fbf, 0x60c3, 0x000c, 0x1078, 0x353a, 0x0d7f, - 0x007c, 0x6020, 0xd0b4, 0x00c0, 0x2fbf, 0x60c3, 0x000c, 0x2011, - 0x7940, 0x2013, 0x0000, 0x707b, 0x0000, 0x20e1, 0x9080, 0x60a3, - 0x0056, 0x60a7, 0x9575, 0x1078, 0x564d, 0x0078, 0x2fbf, 0x007c, - 0x7080, 0xa08a, 0x001d, 0x00c8, 0x2fe1, 0x1079, 0x2fe4, 0x0078, - 0x2fe3, 0x1078, 0x12d5, 0x007c, 0x3008, 0x3017, 0x3048, 0x305d, - 0x308d, 0x30b5, 0x30e5, 0x310f, 0x313f, 0x3165, 0x31b0, 0x31d2, - 0x31f6, 0x320c, 0x3232, 0x3245, 0x324e, 0x3267, 0x3295, 0x32bd, - 0x32eb, 0x3315, 0x335a, 0x338f, 0x33b1, 0x33ef, 0x3413, 0x342c, - 0x3439, 0x7003, 0x0007, 0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, - 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, 0x7083, 0x0001, - 0x2009, 0x07d0, 0x2011, 0x351a, 0x1078, 0x4636, 0x007c, 0x0f7e, - 0x7078, 0xa086, 0x0014, 0x00c0, 0x3046, 0x6043, 0x0000, 0x6020, - 0xd0b4, 0x00c0, 0x3046, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1102, - 0x00c0, 0x3044, 0x7834, 0xa005, 0x00c0, 0x3044, 0x7a38, 0xd2fc, - 0x0040, 0x303a, 0x70a4, 0xa005, 0x00c0, 0x303a, 0x1078, 0x35d3, - 0x70a7, 0x0001, 0x2011, 0x351a, 0x1078, 0x4643, 0x7083, 0x0010, - 0x1078, 0x324e, 0x0078, 0x3046, 0x707b, 0x0000, 0x0f7f, 0x007c, - 0x7083, 0x0003, 0x6043, 0x0004, 0x1078, 0x35a4, 0x20a3, 0x1102, - 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3054, - 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, - 0x0040, 0x308b, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0014, - 0x00c0, 0x3087, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, - 0x3087, 0x7834, 0xa005, 0x00c0, 0x3087, 0x7a38, 0xd2fc, 0x0040, - 0x3081, 0x70a4, 0xa005, 0x00c0, 0x3081, 0x1078, 0x35d3, 0x70a7, - 0x0001, 0x7083, 0x0004, 0x1078, 0x308d, 0x0078, 0x308b, 0x7083, - 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, - 0x35a4, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, - 0x706c, 0xa005, 0x00c0, 0x30a7, 0x714c, 0xa186, 0xffff, 0x0040, - 0x30a7, 0x1078, 0x34de, 0x0040, 0x30a7, 0x1078, 0x35d3, 0x20a9, - 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, - 0x0040, 0x30e3, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0014, - 0x00c0, 0x30df, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, - 0x30df, 0x7834, 0xa005, 0x00c0, 0x30df, 0x7a38, 0xd2fc, 0x0040, - 0x30d9, 0x70a4, 0xa005, 0x00c0, 0x30d9, 0x1078, 0x35d3, 0x70a7, - 0x0001, 0x7083, 0x0006, 0x1078, 0x30e5, 0x0078, 0x30e3, 0x7083, - 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0007, 0x1078, - 0x35a4, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, - 0x706c, 0xa005, 0x00c0, 0x3101, 0x7150, 0xa186, 0xffff, 0x0040, - 0x3101, 0xa180, 0x2303, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, - 0x34de, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x313d, 0x2011, 0x351a, 0x1078, 0x4643, - 0xa086, 0x0014, 0x00c0, 0x3139, 0x2079, 0x7c80, 0x7a30, 0xa296, - 0x1104, 0x00c0, 0x3139, 0x7834, 0xa005, 0x00c0, 0x3139, 0x7a38, - 0xd2fc, 0x0040, 0x3133, 0x70a4, 0xa005, 0x00c0, 0x3133, 0x1078, - 0x35d3, 0x70a7, 0x0001, 0x7083, 0x0008, 0x1078, 0x313f, 0x0078, - 0x313d, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, - 0x0009, 0x1078, 0x35a4, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, - 0x706c, 0xa005, 0x00c0, 0x3152, 0x1078, 0x3448, 0x0040, 0x3162, - 0x0078, 0x315c, 0x20a9, 0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x353a, - 0x0078, 0x3164, 0x1078, 0x3001, 0x007c, 0x0f7e, 0x7078, 0xa005, - 0x0040, 0x31ae, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0014, - 0x00c0, 0x31aa, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, - 0x31aa, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x3193, 0x7a38, - 0xd2fc, 0x0040, 0x318b, 0x70a4, 0xa005, 0x00c0, 0x318b, 0x1078, - 0x35d3, 0x70a7, 0x0001, 0x707f, 0x0001, 0x7083, 0x000a, 0x1078, - 0x31b0, 0x0078, 0x31ae, 0xa005, 0x00c0, 0x31aa, 0x7a38, 0xd2fc, - 0x0040, 0x31a2, 0x70a4, 0xa005, 0x00c0, 0x31a2, 0x1078, 0x35d3, - 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083, 0x000e, 0x1078, 0x3232, - 0x0078, 0x31ae, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, - 0x7083, 0x000b, 0x2011, 0x7c0e, 0x22a0, 0x20a9, 0x0040, 0x2019, - 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4, 0x1078, - 0x35a4, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x6030, 0xa085, 0x0100, - 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x1078, - 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x31f4, 0x2011, - 0x351a, 0x1078, 0x4643, 0xa086, 0x0084, 0x00c0, 0x31f0, 0x2079, - 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x31f0, 0x7834, 0xa005, - 0x00c0, 0x31f0, 0x7083, 0x000c, 0x1078, 0x31f6, 0x0078, 0x31f4, - 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x000d, - 0x1078, 0x35a4, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0x7c8e, - 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0084, 0x1078, 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, - 0x3230, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0084, 0x00c0, - 0x322c, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x322c, - 0x7834, 0xa005, 0x00c0, 0x322c, 0x1078, 0x3596, 0x7083, 0x000e, - 0x1078, 0x3232, 0x0078, 0x3230, 0x7083, 0x0002, 0x707b, 0x0000, - 0x0f7f, 0x007c, 0x7083, 0x000f, 0x707b, 0x0000, 0x608b, 0xbc85, - 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, - 0x2011, 0x351a, 0x1078, 0x4636, 0x007c, 0x7078, 0xa005, 0x0040, - 0x324d, 0x2011, 0x351a, 0x1078, 0x4643, 0x007c, 0x7083, 0x0011, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, - 0x7478, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, - 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x3293, 0x2011, 0x351a, 0x1078, 0x4643, - 0xa086, 0x0014, 0x00c0, 0x3291, 0x2079, 0x7c80, 0x7a30, 0xa296, - 0x1103, 0x00c0, 0x3291, 0x7834, 0xa005, 0x00c0, 0x3291, 0x7a38, - 0xd2fc, 0x0040, 0x328b, 0x70a4, 0xa005, 0x00c0, 0x328b, 0x1078, - 0x35d3, 0x70a7, 0x0001, 0x7083, 0x0012, 0x1078, 0x3295, 0x0078, - 0x3293, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0013, 0x1078, - 0x35b0, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, - 0x706c, 0xa005, 0x00c0, 0x32af, 0x714c, 0xa186, 0xffff, 0x0040, - 0x32af, 0x1078, 0x34de, 0x0040, 0x32af, 0x1078, 0x35d3, 0x20a9, - 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, - 0x0040, 0x32e9, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0014, - 0x00c0, 0x32e7, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, - 0x32e7, 0x7834, 0xa005, 0x00c0, 0x32e7, 0x7a38, 0xd2fc, 0x0040, - 0x32e1, 0x70a4, 0xa005, 0x00c0, 0x32e1, 0x1078, 0x35d3, 0x70a7, - 0x0001, 0x7083, 0x0014, 0x1078, 0x32eb, 0x0078, 0x32e9, 0x707b, - 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0015, 0x1078, 0x35b0, 0x20a3, - 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa006, - 0x00c0, 0x3307, 0x7150, 0xa186, 0xffff, 0x0040, 0x3307, 0xa180, - 0x2303, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x34de, 0x20a9, - 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x353a, 0x007c, 0x0f7e, 0x7078, 0xa005, - 0x0040, 0x3358, 0x2011, 0x351a, 0x1078, 0x4643, 0xa086, 0x0014, - 0x00c0, 0x3356, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, - 0x3356, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x333f, 0x7a38, - 0xd2fc, 0x0040, 0x333b, 0x70a4, 0xa005, 0x00c0, 0x333b, 0x1078, - 0x35d3, 0x70a7, 0x0001, 0x707f, 0x0001, 0x0078, 0x3350, 0xa005, - 0x00c0, 0x3356, 0x7a38, 0xd2fc, 0x0040, 0x334e, 0x70a4, 0xa005, - 0x00c0, 0x334e, 0x1078, 0x35d3, 0x70a7, 0x0001, 0x707f, 0x0000, - 0x7083, 0x0016, 0x1078, 0x335a, 0x0078, 0x3358, 0x707b, 0x0000, - 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80, - 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0x7c8e, - 0x707c, 0xa005, 0x0040, 0x3370, 0x7083, 0x0017, 0x0078, 0x3372, - 0x7083, 0x001b, 0x706c, 0xa005, 0x00c0, 0x337c, 0x1078, 0x3448, - 0x0040, 0x338c, 0x0078, 0x3386, 0x20a9, 0x0008, 0x2099, 0x7c8e, - 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x353a, 0x0078, 0x338e, 0x1078, 0x3001, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x33af, 0x2011, 0x351a, 0x1078, 0x4643, - 0xa086, 0x0084, 0x00c0, 0x33ad, 0x2079, 0x7c80, 0x7a30, 0xa296, - 0x1106, 0x00c0, 0x33ad, 0x7834, 0xa005, 0x00c0, 0x33ad, 0x7083, - 0x0018, 0x1078, 0x33b1, 0x0078, 0x33af, 0x707b, 0x0000, 0x0f7f, - 0x007c, 0x7083, 0x0019, 0x1078, 0x35b0, 0x20a3, 0x1106, 0x20a3, - 0x0000, 0x3430, 0x2099, 0x7c8e, 0x2039, 0x7c0e, 0x27a0, 0x20a9, - 0x0040, 0x53a3, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, - 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x6030, 0x2310, - 0x8214, 0xa2a0, 0x7c0e, 0x2414, 0xa38c, 0x0001, 0x0040, 0x33dc, - 0xa294, 0xff00, 0x0078, 0x33df, 0xa294, 0x00ff, 0x8007, 0xa215, - 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x353a, 0x007c, 0x0f7e, - 0x7078, 0xa005, 0x0040, 0x3411, 0x2011, 0x351a, 0x1078, 0x4643, - 0xa086, 0x0084, 0x00c0, 0x340f, 0x2079, 0x7c80, 0x7a30, 0xa296, - 0x1107, 0x00c0, 0x340f, 0x7834, 0xa005, 0x00c0, 0x340f, 0x1078, - 0x3596, 0x7083, 0x001a, 0x1078, 0x3413, 0x0078, 0x3411, 0x707b, - 0x0000, 0x0f7f, 0x007c, 0x7083, 0x001b, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, - 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, - 0x0084, 0x1078, 0x353a, 0x007c, 0x7078, 0xa005, 0x0040, 0x3438, - 0x2011, 0x351a, 0x1078, 0x4643, 0x7083, 0x001c, 0x1078, 0x3439, - 0x007c, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, - 0x0001, 0x2009, 0x07d0, 0x2011, 0x351a, 0x1078, 0x4636, 0x007c, - 0x087e, 0x097e, 0x2029, 0x7752, 0x252c, 0x20a9, 0x0008, 0x2041, - 0x7c0e, 0x28a0, 0x2099, 0x7c8e, 0x53a3, 0x20a9, 0x0008, 0x2011, - 0x0007, 0xd5d4, 0x0040, 0x345e, 0x2011, 0x0000, 0x2800, 0xa200, - 0x200c, 0xa1a6, 0xffff, 0x00c0, 0x3470, 0xd5d4, 0x0040, 0x346b, - 0x8210, 0x0078, 0x346c, 0x8211, 0x00f0, 0x345e, 0x0078, 0x34d5, - 0x82ff, 0x00c0, 0x3482, 0xd5d4, 0x0040, 0x347c, 0xa1a6, 0x3fff, - 0x0040, 0x3468, 0x0078, 0x3480, 0xa1a6, 0x3fff, 0x0040, 0x34d5, - 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040, - 0x348b, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0040, 0x3492, 0x8423, - 0x0078, 0x3493, 0x8424, 0x00c8, 0x34a0, 0xd5d4, 0x0040, 0x349b, - 0x8319, 0x0078, 0x349c, 0x8318, 0x00f0, 0x348c, 0x0078, 0x34d5, - 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x00f0, 0x34a4, 0x2328, - 0x8529, 0xa2be, 0x0007, 0x0040, 0x34b8, 0x007e, 0x2039, 0x0007, - 0x2200, 0xa73a, 0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x34b4, - 0x754e, 0xa5c8, 0x2303, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, - 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x706f, 0x0001, - 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0xa085, 0x0001, 0x0078, 0x34db, 0xa006, 0x0078, 0x34db, - 0xa006, 0x1078, 0x12d5, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, - 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x34eb, 0x8420, - 0x8001, 0x0078, 0x34e3, 0x2118, 0x84ff, 0x0040, 0x34f4, 0xa39a, - 0x0010, 0x8421, 0x00c0, 0x34ef, 0x2021, 0x0001, 0x83ff, 0x0040, - 0x34fd, 0x8423, 0x8319, 0x00c0, 0x34f9, 0xa238, 0x2704, 0xa42c, - 0x00c0, 0x3512, 0xa405, 0x203a, 0x714e, 0xa1a0, 0x2303, 0x242c, - 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0001, - 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7073, 0x0000, - 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140, - 0x1078, 0x5656, 0x7004, 0xa084, 0x4000, 0x0040, 0x352b, 0x7003, - 0x1000, 0x7003, 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x7720, - 0x2073, 0x0000, 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, - 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0x7940, 0x2013, - 0x0000, 0x707b, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x1078, 0x564d, 0x2009, 0x07d0, 0x2011, 0x351a, - 0x1078, 0x46d3, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x2009, 0x00f7, 0x1078, 0x35bc, 0x2061, 0x7949, 0x601b, - 0x0000, 0x601f, 0x0000, 0x2061, 0x7700, 0x6003, 0x0001, 0x2061, - 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, - 0x3578, 0x1078, 0x4636, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, - 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, - 0x5656, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x358c, - 0x7003, 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x1fff, - 0x1078, 0x3553, 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, - 0x20a1, 0x7dc0, 0x2099, 0x7c8e, 0x3304, 0x8007, 0x20a2, 0x9398, - 0x94a0, 0x00f0, 0x359c, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x7c00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, - 0x20a9, 0x000c, 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, - 0x810f, 0x2001, 0x772c, 0x2004, 0xa005, 0x00c0, 0x35cd, 0x6030, - 0xa084, 0x00ff, 0xa105, 0x0078, 0x35cf, 0xa185, 0x00f7, 0x604a, - 0x007f, 0x0c7f, 0x007c, 0x017e, 0x047e, 0x2001, 0x7752, 0x2004, - 0xd0a4, 0x0040, 0x35e6, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, - 0x75f7, 0x2001, 0x770c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, - 0x1078, 0x226d, 0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x00ff, - 0x2009, 0x7820, 0xa006, 0x200a, 0x8108, 0x00f0, 0x35f3, 0x157f, - 0x007c, 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x7751, - 0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, - 0x2303, 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, - 0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, - 0x40a4, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, - 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, - 0x6082, 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, - 0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x3638, 0x1078, 0x1348, - 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x3640, 0x1078, 0x1348, - 0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, - 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, - 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x36f1, 0xa18c, 0xff00, - 0x810f, 0xa182, 0x00ff, 0x00c8, 0x36f7, 0x2001, 0x770c, 0x2004, - 0xa084, 0x0003, 0x00c0, 0x36da, 0xa188, 0x7820, 0x2104, 0xa065, - 0x0040, 0x36d0, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, - 0x36d6, 0x60a4, 0xa00d, 0x0040, 0x3681, 0x1078, 0x3a16, 0x0040, - 0x36ca, 0x60a8, 0xa00d, 0x0040, 0x369b, 0x1078, 0x3a66, 0x00c0, - 0x369b, 0x694c, 0xd1fc, 0x00c0, 0x3691, 0x1078, 0x378b, 0x0078, - 0x36c5, 0x1078, 0x375c, 0x694c, 0xd1ec, 0x00c0, 0x36c5, 0x1078, - 0x38eb, 0x0078, 0x36c5, 0x694c, 0xa184, 0xa000, 0x0040, 0x36b5, - 0xd1ec, 0x0040, 0x36ae, 0xd1fc, 0x0040, 0x36aa, 0x1078, 0x38fc, - 0x0078, 0x36b1, 0x1078, 0x38fc, 0x0078, 0x36b5, 0xd1fc, 0x0040, - 0x36b5, 0x1078, 0x375c, 0x0078, 0x36c5, 0x6050, 0xa00d, 0x0040, - 0x36c0, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x36c5, - 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x491a, 0xa006, - 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x36fb, - 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x36fb, 0xa082, 0x0006, - 0x0048, 0x3679, 0x2009, 0x770c, 0x210c, 0xd18c, 0x0040, 0x36e4, - 0x2001, 0x0004, 0x0078, 0x36ed, 0xd184, 0x0040, 0x36eb, 0x2001, - 0x0004, 0x0078, 0x36ed, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, - 0x36fb, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x36fb, 0x2001, - 0x0029, 0x2009, 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0x6e48, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x3741, 0xa18c, 0xff00, - 0x810f, 0xa182, 0x00ff, 0x00c8, 0x3731, 0xa188, 0x7820, 0x2104, - 0xa065, 0x0040, 0x3731, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, - 0x00c0, 0x3737, 0x684c, 0xd0ec, 0x0040, 0x3724, 0x1078, 0x38fc, - 0x1078, 0x375c, 0x0078, 0x372c, 0x1078, 0x375c, 0x684c, 0xd0fc, - 0x0040, 0x372c, 0x1078, 0x38eb, 0x1078, 0x3944, 0xa006, 0x0078, - 0x3745, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x3745, 0xa082, - 0x0006, 0x0048, 0x371a, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, - 0x3745, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, - 0x2091, 0x8000, 0x6050, 0xa00d, 0x0040, 0x3755, 0x2d00, 0x200a, - 0x6803, 0x0000, 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, - 0x6803, 0x0000, 0x0078, 0x3753, 0x127e, 0x2091, 0x8000, 0x604c, - 0xa005, 0x0040, 0x3768, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, - 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x3766, 0x127e, - 0x2091, 0x8000, 0x604c, 0xa06d, 0x0040, 0x377d, 0x6800, 0xa005, - 0x00c0, 0x377b, 0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, - 0xa06d, 0x0040, 0x378a, 0x6800, 0xa005, 0x00c0, 0x3788, 0x6052, - 0x604e, 0xad05, 0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, - 0x3795, 0x2d00, 0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, - 0x0078, 0x3794, 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, - 0x2260, 0x6200, 0xa005, 0x0040, 0x37a8, 0xc285, 0x0078, 0x37a9, - 0xc284, 0x6202, 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, - 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, - 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, - 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, - 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048, 0x37d4, - 0xa085, 0x0001, 0x0078, 0x37ec, 0xa190, 0x7820, 0x2204, 0xa065, - 0x00c0, 0x37eb, 0x017e, 0x0d7e, 0x1078, 0x1314, 0x2d60, 0x0d7f, - 0x017f, 0x0040, 0x37d0, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, - 0x0000, 0x1078, 0x35f9, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, - 0x00ff, 0x0048, 0x37f7, 0xa085, 0x0001, 0x0078, 0x3804, 0x0d7e, - 0xa190, 0x7820, 0x2204, 0xa06d, 0x0040, 0x3802, 0x2013, 0x0000, - 0x1078, 0x1348, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, - 0x00ff, 0x0048, 0x380f, 0xa085, 0x0001, 0x0078, 0x3816, 0xa188, - 0x7820, 0x2104, 0xa065, 0x0040, 0x380b, 0xa006, 0x017f, 0x007c, - 0x0d7e, 0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, - 0x6000, 0xc08c, 0x6002, 0x2069, 0x7c8e, 0x6808, 0x605e, 0x6810, - 0x6062, 0x6138, 0xa10a, 0x0048, 0x382e, 0x603a, 0x6814, 0x6066, - 0x2099, 0x7c96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, - 0x2099, 0x7c9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, - 0x2069, 0x7cae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, - 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, 0x3852, 0x2009, 0x0008, - 0x0078, 0x387c, 0xa182, 0x0259, 0x00c8, 0x385a, 0x2009, 0x0007, - 0x0078, 0x387c, 0xa182, 0x02c1, 0x00c8, 0x3862, 0x2009, 0x0006, - 0x0078, 0x387c, 0xa182, 0x0349, 0x00c8, 0x386a, 0x2009, 0x0005, - 0x0078, 0x387c, 0xa182, 0x0421, 0x00c8, 0x3872, 0x2009, 0x0004, - 0x0078, 0x387c, 0xa182, 0x0581, 0x00c8, 0x387a, 0x2009, 0x0003, - 0x0078, 0x387c, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, - 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x7c8d, 0x2e04, 0x6896, 0x2071, - 0x7c8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x0d7e, - 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x0040, 0x38b3, 0x6900, - 0x81ff, 0x00c0, 0x38c7, 0x6a04, 0xa282, 0x0010, 0x00c8, 0x38cc, - 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, - 0x38ae, 0x8108, 0x00f0, 0x38a4, 0x1078, 0x12d5, 0x260a, 0x8210, - 0x6a06, 0x0078, 0x38c7, 0x1078, 0x1314, 0x0040, 0x38cc, 0x2d00, - 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, - 0xffff, 0x8108, 0x00f0, 0x38bf, 0x6807, 0x0001, 0x6e12, 0xa085, - 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x38c9, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3a0f, 0x00c0, 0x38e9, 0x200b, 0xffff, - 0x0d7e, 0x60a4, 0x2068, 0x6804, 0xa08a, 0x0002, 0x0048, 0x38e4, - 0x8001, 0x6806, 0x0078, 0x38e8, 0x1078, 0x1348, 0x60a7, 0x0000, - 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a7b, - 0x0078, 0x38f4, 0x1078, 0x3747, 0x1078, 0x3988, 0x00c0, 0x38f2, - 0x1078, 0x3944, 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, - 0x60a8, 0xa06d, 0x0040, 0x3920, 0x6950, 0x81ff, 0x00c0, 0x3934, - 0x6a54, 0xa282, 0x0010, 0x00c8, 0x3941, 0xad88, 0x0018, 0x20a9, - 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, 0x391b, 0x8108, 0x00f0, - 0x3911, 0x1078, 0x12d5, 0x260a, 0x8210, 0x6a56, 0x0078, 0x3934, - 0x1078, 0x1314, 0x0040, 0x3941, 0x2d00, 0x60aa, 0x6853, 0x0000, - 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, - 0x392c, 0x6857, 0x0001, 0x6e62, 0x0078, 0x3938, 0x1078, 0x378b, - 0x1078, 0x394e, 0x00c0, 0x3936, 0xa085, 0x0001, 0x127f, 0x0d7f, - 0x007c, 0xa006, 0x0078, 0x393e, 0x127e, 0x2091, 0x8000, 0x1078, - 0x491a, 0x127f, 0x007c, 0xa01e, 0x0078, 0x3950, 0x2019, 0x0001, - 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, - 0x00c0, 0x396e, 0x8dff, 0x0040, 0x3983, 0x83ff, 0x0040, 0x3966, - 0x6848, 0xa606, 0x0040, 0x3973, 0x0078, 0x396e, 0x683c, 0xa406, - 0x00c0, 0x396e, 0x6840, 0xa506, 0x0040, 0x3973, 0x2d08, 0x6800, - 0x2068, 0x0078, 0x395a, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x397b, - 0x624e, 0x0078, 0x397e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, - 0x3983, 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x398a, - 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x39b6, - 0x83ff, 0x0040, 0x3999, 0x6848, 0xa606, 0x0040, 0x39a6, 0x0078, - 0x39a1, 0x683c, 0xa406, 0x00c0, 0x39a1, 0x6840, 0xa506, 0x0040, - 0x39a6, 0x2d08, 0x6800, 0x2068, 0x0078, 0x398d, 0x6a00, 0x6080, - 0xad06, 0x00c0, 0x39ae, 0x6282, 0x0078, 0x39b1, 0xa180, 0x0000, - 0x2202, 0x82ff, 0x00c0, 0x39b6, 0x6186, 0x8dff, 0x007c, 0x1078, - 0x3a0f, 0x00c0, 0x39bd, 0x2011, 0x0001, 0x1078, 0x3a5f, 0x00c0, - 0x39c3, 0xa295, 0x0002, 0x007c, 0x1078, 0x3a97, 0x0040, 0x39cc, - 0x1078, 0x6ae1, 0x0078, 0x39ce, 0xa085, 0x0001, 0x007c, 0x1078, - 0x3a97, 0x0040, 0x39d7, 0x1078, 0x6a70, 0x0078, 0x39d9, 0xa085, - 0x0001, 0x007c, 0x1078, 0x3a97, 0x0040, 0x39e2, 0x1078, 0x6ab6, - 0x0078, 0x39e4, 0xa085, 0x0001, 0x007c, 0x1078, 0x3a97, 0x0040, - 0x39ed, 0x1078, 0x6a8c, 0x0078, 0x39ef, 0xa085, 0x0001, 0x007c, - 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, - 0x3a07, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x6c0a, 0x1078, 0x3b4c, 0x007f, 0x0078, 0x39f6, 0x6083, - 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x60a4, - 0xa00d, 0x00c0, 0x3a16, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, - 0x7000, 0xa005, 0x00c0, 0x3a29, 0x20a9, 0x0010, 0xae88, 0x0004, - 0x2104, 0xa606, 0x0040, 0x3a29, 0x8108, 0x00f0, 0x3a20, 0xa085, - 0x0001, 0x0e7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, - 0xa06d, 0x00c0, 0x3a39, 0x1078, 0x1314, 0x0040, 0x3a4b, 0x2d00, - 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, - 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x3a41, 0xa085, 0x0001, - 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x3a48, 0x0d7e, 0x127e, - 0x2091, 0x8000, 0x60a4, 0xa06d, 0x0040, 0x3a5c, 0x60a7, 0x0000, - 0x1078, 0x1348, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0x60a8, - 0xa00d, 0x00c0, 0x3a66, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, - 0x7050, 0xa005, 0x00c0, 0x3a79, 0x20a9, 0x0010, 0xae88, 0x0018, - 0x2104, 0xa606, 0x0040, 0x3a79, 0x8108, 0x00f0, 0x3a70, 0xa085, - 0x0001, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a5f, - 0x00c0, 0x3a95, 0x200b, 0xffff, 0x0d7e, 0x60a8, 0x2068, 0x6854, - 0xa08a, 0x0002, 0x0048, 0x3a90, 0x8001, 0x6856, 0x0078, 0x3a94, - 0x1078, 0x1348, 0x60ab, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x609c, - 0xd0a4, 0x007c, 0x0f7e, 0x2079, 0x7751, 0x7804, 0xd0a4, 0x0040, - 0x3ac3, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, - 0x1078, 0x3806, 0x00c0, 0x3ab7, 0x6004, 0xa084, 0xff00, 0x8007, - 0xa086, 0x0006, 0x00c0, 0x3ab7, 0x6000, 0xc0ed, 0x6002, 0x017f, - 0x8108, 0x00f0, 0x3aa7, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, - 0x3ac5, 0x1078, 0x46d3, 0x0f7f, 0x007c, 0x2011, 0x3ac5, 0x1078, - 0x4643, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, - 0x1078, 0x3806, 0x00c0, 0x3af1, 0x6000, 0xd0ec, 0x0040, 0x3af1, - 0x047e, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, - 0x1078, 0x75f7, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, - 0x1078, 0x4a38, 0x1078, 0x497b, 0x2009, 0x0000, 0x1078, 0x7431, - 0x047f, 0x017f, 0x8108, 0x00f0, 0x3acf, 0x0c7f, 0x157f, 0x007c, - 0x0c7e, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, - 0x2071, 0x77ff, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, - 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, - 0x704f, 0x0000, 0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x77ff, 0x684c, 0xa005, 0x00c0, 0x3b27, - 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3b4a, 0x6a60, - 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, - 0x707a, 0x684c, 0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, - 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, - 0x2100, 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, - 0x0001, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, - 0x3b9d, 0x6804, 0xa00d, 0x0040, 0x3b6b, 0x0d7e, 0x0e7e, 0x2071, - 0x7700, 0x027e, 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, - 0x2d00, 0x81ff, 0x00c0, 0x3b5c, 0x702e, 0x70a0, 0xa200, 0x70a2, - 0x027f, 0x0e7f, 0x0d7f, 0x2071, 0x77ff, 0x701c, 0xa005, 0x00c0, - 0x3bae, 0x0068, 0x3bac, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, - 0x3bac, 0x6934, 0xa186, 0x0103, 0x00c0, 0x3bbf, 0x6948, 0x6844, - 0xa105, 0x00c0, 0x3b9f, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, - 0xd084, 0x00c0, 0x3bac, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, - 0x701b, 0x0001, 0x2091, 0x4080, 0x2071, 0x7700, 0x702c, 0x206a, - 0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, - 0xa086, 0x0100, 0x00c0, 0x3bac, 0x6868, 0xa005, 0x00c0, 0x3bac, - 0x2009, 0x8020, 0x0078, 0x3b85, 0x2071, 0x77ff, 0x2d08, 0x206b, - 0x0000, 0x7010, 0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, - 0x3bbc, 0x6902, 0x0078, 0x3bbd, 0x711e, 0x0078, 0x3b9d, 0xa18c, - 0x00ff, 0xa186, 0x0017, 0x0040, 0x3bcd, 0xa186, 0x001e, 0x0040, - 0x3bcd, 0xa18e, 0x001f, 0x00c0, 0x3bac, 0x684c, 0xd0cc, 0x0040, - 0x3bac, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3bac, - 0x2009, 0x8021, 0x0078, 0x3b85, 0x007e, 0x6837, 0x0103, 0x20a9, - 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, - 0x684a, 0x6952, 0x007c, 0x2071, 0x77ff, 0x7004, 0x0079, 0x3bf0, - 0x3bf8, 0x3c07, 0x3c97, 0x3c98, 0x3ca8, 0x3cae, 0x3bf9, 0x3c85, - 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x3c06, 0x2009, 0x000d, - 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, - 0xa06d, 0x0040, 0x3c84, 0x0e7e, 0x2071, 0x7751, 0x7004, 0xd09c, - 0x0040, 0x3c66, 0x6934, 0xa186, 0x0103, 0x00c0, 0x3c3c, 0x6948, - 0x6844, 0xa105, 0x00c0, 0x3c59, 0x2009, 0x8020, 0x127e, 0x2091, - 0x8000, 0x0068, 0x3c38, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, - 0x3c38, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, - 0x2091, 0x4080, 0x127f, 0x0e7f, 0x1078, 0x3ce1, 0x0078, 0x3c84, - 0x127f, 0x0e7f, 0x0078, 0x3c84, 0xa18c, 0x00ff, 0xa186, 0x0017, - 0x0040, 0x3c4a, 0xa186, 0x001e, 0x0040, 0x3c4a, 0xa18e, 0x001f, - 0x00c0, 0x3c66, 0x684c, 0xd0cc, 0x0040, 0x3c66, 0x6850, 0xa084, - 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3c66, 0x2009, 0x8021, 0x0078, - 0x3c1e, 0x6844, 0xa086, 0x0100, 0x00c0, 0x3c66, 0x6868, 0xa005, - 0x00c0, 0x3c66, 0x2009, 0x8020, 0x0078, 0x3c1e, 0x0e7f, 0x1078, - 0x3cf5, 0x0040, 0x3c84, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, - 0xa086, 0x0003, 0x00c0, 0x3c7b, 0x810f, 0xa18c, 0x00ff, 0x8101, - 0x0040, 0x3c7b, 0x710e, 0x7007, 0x0003, 0x1078, 0x3d15, 0x7050, - 0xa086, 0x0100, 0x0040, 0x3c98, 0x007c, 0x701c, 0xa06d, 0x0040, - 0x3c96, 0x1078, 0x3cf5, 0x0040, 0x3c96, 0x7007, 0x0003, 0x1078, - 0x3d15, 0x7050, 0xa086, 0x0100, 0x0040, 0x3c98, 0x007c, 0x007c, - 0x7050, 0xa09e, 0x0100, 0x00c0, 0x3ca1, 0x7007, 0x0004, 0x0078, - 0x3ca8, 0xa086, 0x0200, 0x00c0, 0x3ca7, 0x7007, 0x0005, 0x007c, - 0x1078, 0x3caf, 0x7006, 0x1078, 0x3ce1, 0x007c, 0x007c, 0x702c, - 0x7130, 0x8108, 0xa102, 0x0048, 0x3cbc, 0xa00e, 0x7034, 0x706e, - 0x7038, 0x7072, 0x0078, 0x3cc6, 0x706c, 0xa080, 0x0040, 0x706e, - 0x00c8, 0x3cc6, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, - 0x8001, 0x700e, 0x00c0, 0x3cda, 0x127e, 0x2091, 0x8000, 0x0068, - 0x3cdd, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, - 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, - 0x007c, 0x701c, 0xa06d, 0x0040, 0x3cf4, 0x127e, 0x2091, 0x8000, - 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3cf1, - 0x701a, 0x127f, 0x1078, 0x1348, 0x007c, 0x2019, 0x000d, 0x2304, - 0x230c, 0xa10e, 0x0040, 0x3d04, 0x2304, 0x230c, 0xa10e, 0x0040, - 0x3d04, 0xa006, 0x0078, 0x3d14, 0x732c, 0x8319, 0x7130, 0xa102, - 0x00c0, 0x3d0e, 0x2300, 0xa005, 0x0078, 0x3d14, 0x0048, 0x3d13, - 0xa302, 0x0078, 0x3d14, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, - 0x000d, 0x7056, 0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, - 0x7959, 0x2104, 0xc08d, 0x200a, 0x127f, 0x1078, 0x1399, 0x007c, - 0x2071, 0x77cd, 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, - 0x702b, 0x0001, 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, - 0x7063, 0x0040, 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, - 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x77cd, 0x6848, 0xa005, - 0x00c0, 0x3d51, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, - 0x3d76, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, - 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, - 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, - 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, - 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, - 0x2b78, 0x2071, 0x77cd, 0x7004, 0x1079, 0x3dd6, 0x700c, 0x0079, - 0x3d81, 0x3d86, 0x3d7b, 0x3d7b, 0x3d7b, 0x3d7b, 0x007c, 0x700c, - 0x0079, 0x3d8a, 0x3d8f, 0x3dd4, 0x3dd4, 0x3dd5, 0x3dd5, 0x7830, - 0x7930, 0xa106, 0x0040, 0x3d99, 0x7830, 0x7930, 0xa106, 0x00c0, - 0x3dbf, 0x7030, 0xa10a, 0x0040, 0x3dbf, 0x00c8, 0x3da1, 0x712c, - 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x3dc0, 0x1078, 0x1314, 0x0040, - 0x3dbf, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, - 0x0000, 0x127e, 0x007e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104, - 0xc085, 0x200a, 0x007f, 0x700e, 0x127f, 0x1078, 0x1399, 0x007c, - 0x1078, 0x1314, 0x0040, 0x3dbf, 0x2d00, 0x705a, 0x1078, 0x1314, - 0x00c0, 0x3dcc, 0x0078, 0x3dab, 0x2d00, 0x7086, 0x7063, 0x0080, - 0x2001, 0x0004, 0x0078, 0x3daf, 0x007c, 0x007c, 0x3de7, 0x3de8, - 0x3e1f, 0x3e20, 0x3dd4, 0x3e56, 0x3e5b, 0x3e92, 0x3e93, 0x3eae, - 0x3eaf, 0x3eb0, 0x3eb1, 0x3eb2, 0x3eb3, 0x3f1c, 0x3f46, 0x007c, - 0x700c, 0x0079, 0x3deb, 0x3df0, 0x3df3, 0x3e03, 0x3e1e, 0x3e1e, - 0x1078, 0x3d87, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, - 0x1078, 0x4228, 0x0040, 0x3e00, 0x2091, 0x8000, 0x1078, 0x3d87, - 0x0d7f, 0x0078, 0x3e0c, 0x127e, 0x8001, 0x700e, 0x1078, 0x4228, - 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, - 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3e1b, 0x1079, - 0x3e36, 0x127f, 0x007c, 0x127f, 0x1078, 0x3eb4, 0x007c, 0x007c, - 0x007c, 0x0e7e, 0x2071, 0x77cd, 0x700c, 0x0079, 0x3e27, 0x3e2c, - 0x3e2c, 0x3e2c, 0x3e2e, 0x3e32, 0x0e7f, 0x007c, 0x700f, 0x0001, - 0x0078, 0x3e34, 0x700f, 0x0002, 0x0e7f, 0x007c, 0x3eb4, 0x3eb4, - 0x3ed0, 0x3eb4, 0x3fbb, 0x3eb4, 0x3eb4, 0x3eb4, 0x3eb4, 0x3eb4, - 0x3ed0, 0x3ffa, 0x4044, 0x409d, 0x40b1, 0x3eb4, 0x3eb4, 0x3eec, - 0x3ed0, 0x3eb4, 0x3eb4, 0x3f02, 0x413c, 0x415a, 0x3eb4, 0x3eec, - 0x3eb4, 0x3eb4, 0x3eb4, 0x3eb4, 0x3f02, 0x415a, 0x7020, 0x2068, - 0x1078, 0x1348, 0x007c, 0x700c, 0x0079, 0x3e5e, 0x3e63, 0x3e66, - 0x3e76, 0x3e91, 0x3e91, 0x1078, 0x3d87, 0x007c, 0x127e, 0x8001, - 0x700e, 0x7058, 0x007e, 0x1078, 0x4228, 0x0040, 0x3e73, 0x2091, - 0x8000, 0x1078, 0x3d87, 0x0d7f, 0x0078, 0x3e7f, 0x127e, 0x8001, - 0x700e, 0x1078, 0x4228, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, - 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, - 0x00c8, 0x3e8e, 0x1079, 0x3e94, 0x127f, 0x007c, 0x127f, 0x1078, - 0x3eb4, 0x007c, 0x007c, 0x007c, 0x3eb4, 0x3ed0, 0x3fa5, 0x3eb4, - 0x3ed0, 0x3eb4, 0x3ed0, 0x3ed0, 0x3eb4, 0x3ed0, 0x3fa5, 0x3ed0, - 0x3ed0, 0x3ed0, 0x3ed0, 0x3ed0, 0x3eb4, 0x3ed0, 0x3fa5, 0x3eb4, - 0x3eb4, 0x3ed0, 0x3eb4, 0x3eb4, 0x3eb4, 0x3ed0, 0x007c, 0x007c, - 0x007c, 0x007c, 0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b4c, - 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, - 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b4c, 0x127f, 0x007c, - 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, - 0x2091, 0x8000, 0x1078, 0x3b4c, 0x127f, 0x007c, 0x7007, 0x0001, - 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, - 0x1078, 0x3b4c, 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, - 0x0040, 0x3ec2, 0x8001, 0x00c0, 0x3ef9, 0x7007, 0x0001, 0x0078, - 0x3f82, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, - 0x3f82, 0x007c, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, - 0x0024, 0x2098, 0x20a1, 0x77f8, 0x53a3, 0x6858, 0x7012, 0xa082, - 0x0401, 0x00c8, 0x3ede, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3ede, - 0xa080, 0x3f73, 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3f66, - 0x1078, 0x1314, 0x00c0, 0x3f27, 0x7007, 0x000f, 0x007c, 0x2d00, - 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, - 0x6008, 0xa20a, 0x00c8, 0x3f36, 0xa00e, 0x2200, 0x7112, 0x620c, - 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x3f3f, 0xa108, 0x719a, - 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x137f, 0x7090, 0xa08e, - 0x0100, 0x0040, 0x3f5a, 0xa086, 0x0200, 0x0040, 0x3f52, 0x7007, - 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x1348, 0x7014, 0x2068, - 0x0078, 0x3ede, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, - 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x3f1c, 0x7014, 0x2068, - 0x7007, 0x0001, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, - 0x4177, 0x0078, 0x3f82, 0x3f76, 0x3f7a, 0x3f7e, 0x0002, 0x0011, - 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, - 0x0005, 0x0006, 0x2009, 0x772c, 0x210c, 0x81ff, 0x00c0, 0x3f9f, - 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3653, - 0x00c0, 0x3f93, 0x007c, 0x1078, 0x3bdc, 0x127e, 0x2091, 0x8000, - 0x1078, 0x6c0a, 0x1078, 0x3b4c, 0x127f, 0x0078, 0x3f92, 0x2001, - 0x0028, 0x2009, 0x0000, 0x0078, 0x3f93, 0x7018, 0x6802, 0x2d08, - 0x2068, 0x6906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3fb4, - 0x7007, 0x0006, 0x0078, 0x3fba, 0x7014, 0x2068, 0x7007, 0x0001, - 0x7048, 0x107a, 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, - 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, - 0x0040, 0x3fe4, 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, - 0x0040, 0x3fe4, 0xa005, 0x00c0, 0x3ff7, 0x6944, 0x810f, 0xa18c, - 0x00ff, 0x1078, 0x3806, 0x00c0, 0x3ff7, 0x067e, 0x6e50, 0x1078, - 0x38cf, 0x067f, 0x0078, 0x3ff7, 0x047e, 0x2011, 0x770c, 0x2224, - 0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, 0x3806, 0x00c0, - 0x3ff3, 0x1078, 0x3a4e, 0x8108, 0x00f0, 0x3fed, 0x0c7f, 0x1078, - 0x1348, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, - 0x7752, 0x2004, 0xd0a4, 0x0040, 0x403b, 0x2009, 0x0000, 0x1078, - 0x4244, 0x6100, 0xd184, 0x0040, 0x4020, 0x6858, 0xa084, 0x00ff, - 0x00c0, 0x403e, 0x6000, 0xd084, 0x0040, 0x403b, 0x6004, 0xa005, - 0x00c0, 0x4041, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x4038, - 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0, 0x4028, 0x2001, 0x001e, - 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x403b, 0x6006, - 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040, 0x403b, 0x600a, 0x6202, - 0x127f, 0x0078, 0x4217, 0x127f, 0x0078, 0x420f, 0x127f, 0x0078, - 0x4207, 0x127f, 0x0078, 0x420b, 0x127e, 0x2091, 0x8000, 0x7007, - 0x0001, 0x2001, 0x7752, 0x2004, 0xd0a4, 0x0040, 0x409a, 0x2009, - 0x0000, 0x1078, 0x4244, 0x6000, 0xa084, 0x0001, 0x0040, 0x409a, - 0x6204, 0x6308, 0x6c48, 0xa484, 0x0003, 0x0040, 0x4072, 0x6958, - 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x406b, 0x2100, 0xa210, 0x0048, - 0x4097, 0x0078, 0x4072, 0x8001, 0x00c0, 0x4097, 0x2100, 0xa212, - 0x0048, 0x4097, 0xa484, 0x000c, 0x0040, 0x408c, 0x6958, 0x810f, - 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, 0x4084, 0x2100, 0xa318, - 0x0048, 0x4097, 0x0078, 0x408c, 0xa082, 0x0004, 0x00c0, 0x4097, - 0x2100, 0xa31a, 0x0048, 0x4097, 0x6860, 0xa005, 0x0040, 0x4092, - 0x8000, 0x6016, 0x6206, 0x630a, 0x127f, 0x0078, 0x4217, 0x127f, - 0x0078, 0x4213, 0x127f, 0x0078, 0x420f, 0x127e, 0x2091, 0x8000, - 0x7007, 0x0001, 0x2009, 0x0000, 0x1078, 0x4244, 0x6308, 0x8318, - 0x0048, 0x40ae, 0x630a, 0x127f, 0x0078, 0x4225, 0x127f, 0x0078, - 0x4213, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, - 0xd0ac, 0x0040, 0x40c7, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x46e1, - 0x6000, 0x2001, 0xfcff, 0x6002, 0x0c7f, 0x0078, 0x40fe, 0x6858, - 0xa005, 0x0040, 0x4113, 0x685c, 0xa065, 0x0040, 0x410f, 0x2001, - 0x772c, 0x2004, 0xa005, 0x0040, 0x40d9, 0x1078, 0x6b6c, 0x0078, - 0x40df, 0x6013, 0x0400, 0x2009, 0x0041, 0x1078, 0x5cfb, 0x6958, - 0xa18c, 0xe600, 0xa186, 0x2000, 0x0040, 0x40f6, 0xa186, 0x0400, - 0x0040, 0x40f6, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x46e1, 0x6000, - 0xa084, 0xfdff, 0x6002, 0x0c7f, 0x0078, 0x40fe, 0x027e, 0x2009, - 0x0000, 0x2011, 0xfdff, 0x1078, 0x478a, 0x027f, 0x684c, 0xd0c4, - 0x0040, 0x410b, 0x2009, 0x0000, 0x1078, 0x46e1, 0x6008, 0x8000, - 0x0048, 0x410b, 0x600a, 0x0c7f, 0x127f, 0x0078, 0x4217, 0x0c7f, - 0x127f, 0x0078, 0x420f, 0x6954, 0xa186, 0x002a, 0x00c0, 0x411f, - 0x2001, 0x770c, 0x200c, 0xc194, 0x2102, 0x0078, 0x40fe, 0xa186, - 0x0020, 0x0040, 0x4134, 0xa186, 0x0029, 0x00c0, 0x410f, 0x6944, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x3806, 0x00c0, 0x40fe, 0x6000, - 0xc0e4, 0x6002, 0x0078, 0x40fe, 0x685c, 0xa065, 0x0040, 0x410f, - 0x6017, 0x0014, 0x0078, 0x40fe, 0x2009, 0x0000, 0x1078, 0x4244, - 0x6000, 0xa084, 0x0001, 0x0040, 0x4156, 0x2091, 0x8000, 0x6204, - 0x8210, 0x0048, 0x4150, 0x6206, 0x2091, 0x8001, 0x0078, 0x4225, - 0x2091, 0x8001, 0x6853, 0x0016, 0x0078, 0x421e, 0x6853, 0x0007, - 0x0078, 0x421e, 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x4164, - 0x1078, 0x3ec2, 0x0078, 0x4176, 0x2030, 0x8001, 0x00c0, 0x416e, - 0x7007, 0x0001, 0x1078, 0x4177, 0x0078, 0x4176, 0x7007, 0x0006, - 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x4177, 0x007c, 0x0e7e, - 0x2009, 0x772c, 0x210c, 0x81ff, 0x00c0, 0x41f9, 0x2009, 0x770c, - 0x210c, 0xd194, 0x00c0, 0x4203, 0x6848, 0x2070, 0xae82, 0x7e00, - 0x0048, 0x41e8, 0x2001, 0x7715, 0x2004, 0xae02, 0x00c8, 0x41e8, - 0x2009, 0x0000, 0x1078, 0x4244, 0x6100, 0xa184, 0x0001, 0x0040, - 0x41ce, 0xa184, 0x0100, 0x00c0, 0x41ec, 0xa184, 0x0200, 0x00c0, - 0x41f0, 0x601c, 0xa005, 0x00c0, 0x41f4, 0x711c, 0xa186, 0x0006, - 0x00c0, 0x41d3, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, - 0x2091, 0x8000, 0x7010, 0xa005, 0x00c0, 0x41c5, 0x7112, 0x7018, - 0xa065, 0x0040, 0x41f8, 0x6000, 0xd0e4, 0x00c0, 0x41fd, 0x2e60, - 0x1078, 0x46ea, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, - 0x00c0, 0x41c5, 0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, - 0x0006, 0x0078, 0x421e, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, - 0x3806, 0x00c0, 0x41fe, 0x6000, 0xd0e4, 0x00c0, 0x41fe, 0x711c, - 0xa186, 0x0007, 0x00c0, 0x41e8, 0x6853, 0x0002, 0x0078, 0x4200, - 0x6853, 0x0008, 0x0078, 0x4200, 0x6853, 0x000e, 0x0078, 0x4200, - 0x6853, 0x0017, 0x0078, 0x4200, 0x6853, 0x0035, 0x0078, 0x4200, - 0x127f, 0x6853, 0x0028, 0x0078, 0x4200, 0x127f, 0x6853, 0x0029, - 0x0e7f, 0x0078, 0x421e, 0x6853, 0x002a, 0x0078, 0x4200, 0x2009, - 0x003e, 0x0078, 0x4219, 0x2009, 0x0004, 0x0078, 0x4219, 0x2009, - 0x0006, 0x0078, 0x4219, 0x2009, 0x0016, 0x0078, 0x4219, 0x2009, - 0x0001, 0x6854, 0xa084, 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, - 0x1078, 0x3b4c, 0x2091, 0x8001, 0x007c, 0x1078, 0x1348, 0x007c, - 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, 0x4235, 0xa00e, 0x7034, - 0x7072, 0x7038, 0x7076, 0x0078, 0x4241, 0x7070, 0xa080, 0x0040, - 0x7072, 0x00c8, 0x4241, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, - 0x0001, 0x7932, 0x7132, 0x007c, 0x0d7e, 0x1078, 0x46e1, 0x0d7f, - 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, - 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, - 0xa084, 0x7000, 0x0040, 0x4260, 0xa086, 0x1000, 0x00c0, 0x427c, - 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x4267, 0x3e60, 0xac84, - 0x0007, 0x00c0, 0x427c, 0xac82, 0x7e00, 0x0048, 0x427c, 0x6854, - 0xac02, 0x00c8, 0x427c, 0x2009, 0x0047, 0x1078, 0x5cfb, 0x7a1c, - 0xd284, 0x00c0, 0x4252, 0x007c, 0xa016, 0x1078, 0x1572, 0x0078, - 0x4277, 0x157e, 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, - 0xa584, 0x0070, 0x00c0, 0x42aa, 0xa484, 0x7000, 0xa086, 0x1000, - 0x00c0, 0x42aa, 0x1078, 0x42b7, 0x0040, 0x42aa, 0x20e1, 0x3000, - 0x7828, 0x7828, 0x1078, 0x42d5, 0x147f, 0x137f, 0x157f, 0x2009, - 0x793e, 0x2104, 0xa005, 0x00c0, 0x42a6, 0x007c, 0x1078, 0x4d50, - 0x0078, 0x42a5, 0x1078, 0x762a, 0x1078, 0x42b7, 0x20e1, 0x3000, - 0x7828, 0x7828, 0x147f, 0x137f, 0x157f, 0x0078, 0x42a5, 0xa484, - 0x01ff, 0x687a, 0xa005, 0x0040, 0x42c9, 0xa080, 0x001f, 0xa084, - 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, - 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, - 0x53a5, 0xa085, 0x0001, 0x0078, 0x42c8, 0x7000, 0xa084, 0xff00, - 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x42e2, 0x0078, - 0x4456, 0x007c, 0xa196, 0x2000, 0x00c0, 0x42f3, 0x6900, 0xa18e, - 0x0001, 0x00c0, 0x42ef, 0x1078, 0x2e88, 0x0078, 0x42e1, 0x1078, - 0x42fb, 0x0078, 0x42e1, 0xa196, 0x8000, 0x00c0, 0x42e1, 0x1078, - 0x44dc, 0x0078, 0x42e1, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, - 0xa196, 0x0001, 0x0040, 0x4308, 0xa196, 0x0023, 0x00c0, 0x43fd, - 0xa08e, 0x0023, 0x00c0, 0x4339, 0x1078, 0x4553, 0x0040, 0x43fd, - 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x4321, 0x7034, - 0xa005, 0x00c0, 0x43fd, 0x2009, 0x0015, 0x1078, 0x5cfb, 0x0078, - 0x43fd, 0xa08e, 0x0210, 0x00c0, 0x432b, 0x2009, 0x0015, 0x1078, - 0x5cfb, 0x0078, 0x43fd, 0xa08e, 0x0100, 0x00c0, 0x43fd, 0x7034, - 0xa005, 0x00c0, 0x43fd, 0x2009, 0x0016, 0x1078, 0x5cfb, 0x0078, - 0x43fd, 0xa08e, 0x0022, 0x00c0, 0x43fd, 0x7030, 0xa08e, 0x0300, - 0x00c0, 0x434a, 0x7034, 0xa005, 0x00c0, 0x43fd, 0x2009, 0x0017, - 0x0078, 0x43c9, 0xa08e, 0x0500, 0x00c0, 0x4356, 0x7034, 0xa005, - 0x00c0, 0x43fd, 0x2009, 0x0018, 0x0078, 0x43c9, 0xa08e, 0x2010, - 0x00c0, 0x435e, 0x2009, 0x0019, 0x0078, 0x43c9, 0xa08e, 0x2110, - 0x00c0, 0x4366, 0x2009, 0x001a, 0x0078, 0x43c9, 0xa08e, 0x5200, - 0x00c0, 0x4372, 0x7034, 0xa005, 0x00c0, 0x43fd, 0x2009, 0x001b, - 0x0078, 0x43c9, 0xa08e, 0x5000, 0x00c0, 0x437e, 0x7034, 0xa005, - 0x00c0, 0x43fd, 0x2009, 0x001c, 0x0078, 0x43c9, 0xa08e, 0x1200, - 0x00c0, 0x438a, 0x7034, 0xa005, 0x00c0, 0x43fd, 0x2009, 0x0024, - 0x0078, 0x43c9, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x00c0, 0x4394, - 0x2009, 0x002d, 0x0078, 0x43c9, 0xa08c, 0xff00, 0xa18e, 0x5300, - 0x00c0, 0x439e, 0x2009, 0x002a, 0x0078, 0x43c9, 0xa08e, 0x0f00, - 0x00c0, 0x43a6, 0x2009, 0x0020, 0x0078, 0x43c9, 0xa08e, 0x5300, - 0x00c0, 0x43ac, 0x0078, 0x43c7, 0xa08e, 0x6104, 0x00c0, 0x43c7, - 0x2011, 0x7c8d, 0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, - 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x1078, 0x2d20, - 0x8108, 0x00f0, 0x43b9, 0x2009, 0x0023, 0x0078, 0x43c9, 0x2009, - 0x001d, 0x017e, 0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, - 0x2059, 0x00c0, 0x43ff, 0x1078, 0x37cb, 0x00c0, 0x43ff, 0x6612, - 0x6516, 0x86ff, 0x0040, 0x43ef, 0x017f, 0x017e, 0xa186, 0x0017, - 0x00c0, 0x43ef, 0x6864, 0xa606, 0x00c0, 0x43ef, 0x6868, 0xa506, - 0xa084, 0xff00, 0x00c0, 0x43ef, 0x6000, 0xc0f5, 0x6002, 0x0c7e, - 0x1078, 0x5c6e, 0x0040, 0x4402, 0x017f, 0x611a, 0x601f, 0x0004, - 0x7120, 0x610a, 0x017f, 0x1078, 0x5cfb, 0x0c7f, 0x007c, 0x017f, - 0x0078, 0x43fd, 0x0c7f, 0x0078, 0x43ff, 0x0e7e, 0x0d7e, 0x2028, - 0x2130, 0xa696, 0x00ff, 0x00c0, 0x4425, 0xa596, 0xfffd, 0x00c0, - 0x4415, 0x2009, 0x007f, 0x0078, 0x4452, 0xa596, 0xfffe, 0x00c0, - 0x441d, 0x2009, 0x007e, 0x0078, 0x4452, 0xa596, 0xfffc, 0x00c0, - 0x4425, 0x2009, 0x0080, 0x0078, 0x4452, 0x2011, 0x0000, 0x2021, - 0x007e, 0x20a9, 0x0082, 0x2071, 0x789e, 0x2e1c, 0x83ff, 0x00c0, - 0x4437, 0x82ff, 0x00c0, 0x4446, 0x2410, 0x0078, 0x4446, 0x2368, - 0x6b10, 0x007e, 0x2100, 0xa31e, 0x007f, 0x00c0, 0x4446, 0x6b14, - 0xa31e, 0x00c0, 0x4446, 0x2408, 0x0078, 0x4452, 0x8420, 0x8e70, - 0x00f0, 0x442d, 0x82ff, 0x00c0, 0x4451, 0xa085, 0x0001, 0x0078, - 0x4453, 0x2208, 0xa006, 0x0d7f, 0x0e7f, 0x007c, 0xa084, 0x0007, - 0x0079, 0x445b, 0x007c, 0x4463, 0x4463, 0x4463, 0x4463, 0x4463, - 0x4464, 0x447d, 0x44c5, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x447c, - 0x7120, 0x2160, 0xac8c, 0x0007, 0x00c0, 0x447c, 0xac8a, 0x7e00, - 0x0048, 0x447c, 0x6854, 0xac02, 0x00c8, 0x447c, 0x7124, 0x610a, - 0x2009, 0x0046, 0x1078, 0x5cfb, 0x007c, 0x0c7e, 0x7110, 0xd1bc, - 0x00c0, 0x44c3, 0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, - 0x2059, 0x00c0, 0x44c3, 0x1078, 0x3806, 0x00c0, 0x44c3, 0x6204, - 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x44a8, 0x0c7e, - 0x1078, 0x5c6e, 0x017f, 0x0040, 0x44c3, 0x611a, 0x601f, 0x0006, - 0x7120, 0x610a, 0x2009, 0x0044, 0x1078, 0x5cfb, 0x0078, 0x44c3, - 0x0c7e, 0x1078, 0x5c6e, 0x017f, 0x0040, 0x44c3, 0x611a, 0x601f, - 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x44bb, 0x6007, - 0x0005, 0x0078, 0x44bd, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, - 0x4948, 0x1078, 0x4d50, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, - 0x44db, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x44db, 0xac82, - 0x7e00, 0x0048, 0x44db, 0x6854, 0xac02, 0x00c8, 0x44db, 0x2009, - 0x0045, 0x1078, 0x5cfb, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, - 0xa18e, 0x0000, 0x00c0, 0x44ec, 0xa084, 0x000f, 0xa08a, 0x0006, - 0x10c8, 0x12d5, 0x1079, 0x44ed, 0x007c, 0x44f3, 0x44f4, 0x44f3, - 0x44f3, 0x4535, 0x4544, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x4534, - 0x700c, 0x7108, 0x1078, 0x2059, 0x00c0, 0x4534, 0x1078, 0x37cb, - 0x00c0, 0x4534, 0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, - 0xa286, 0x0006, 0x00c0, 0x451d, 0x0c7e, 0x1078, 0x5c6e, 0x017f, - 0x0040, 0x4534, 0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, - 0x0088, 0x1078, 0x5cfb, 0x0078, 0x4534, 0x0c7e, 0x1078, 0x5c6e, - 0x017f, 0x0040, 0x4534, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, - 0xa286, 0x0004, 0x00c0, 0x4530, 0x2009, 0x0005, 0x0078, 0x4532, - 0x2009, 0x0001, 0x1078, 0x5cfb, 0x007c, 0x7110, 0xd1bc, 0x0040, - 0x4543, 0x1078, 0x4553, 0x0040, 0x4543, 0x7124, 0x610a, 0x2009, - 0x0089, 0x1078, 0x5cfb, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4552, - 0x1078, 0x4553, 0x0040, 0x4552, 0x7124, 0x610a, 0x2009, 0x008a, - 0x1078, 0x5cfb, 0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, - 0x4566, 0xac82, 0x7e00, 0x0048, 0x4566, 0x2001, 0x7715, 0x2004, - 0xac02, 0x00c8, 0x4566, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, - 0x4565, 0x2071, 0x7949, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, - 0x701a, 0x7012, 0x7017, 0x7e00, 0x7007, 0x0000, 0x7026, 0x702b, - 0x5663, 0x7032, 0x7037, 0x56a4, 0x703b, 0x0002, 0x703f, 0x0000, - 0x007c, 0x2071, 0x7949, 0x00e0, 0x4630, 0x2091, 0x6000, 0x700c, - 0x8001, 0x700e, 0x00c0, 0x45f9, 0x700f, 0x0361, 0x7007, 0x0001, - 0x127e, 0x2091, 0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x45f7, - 0x703b, 0x0002, 0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, - 0x45f7, 0x703c, 0xa086, 0x0001, 0x00c0, 0x45d4, 0x0d7e, 0x2069, - 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x45b2, 0x6803, 0x1000, - 0x0078, 0x45b9, 0x6804, 0xa084, 0x1000, 0x0040, 0x45b9, 0x6803, - 0x0100, 0x6803, 0x0000, 0x703f, 0x0000, 0x2069, 0x7936, 0x6804, - 0xa082, 0x0006, 0x00c0, 0x45c6, 0x6807, 0x0000, 0x6830, 0xa082, - 0x0003, 0x00c0, 0x45cd, 0x6833, 0x0000, 0x1078, 0x4d50, 0x1078, - 0x4e10, 0x0d7f, 0x0078, 0x45f7, 0x0d7e, 0x2069, 0x7700, 0x6944, - 0x6860, 0xa102, 0x00c8, 0x45f6, 0x2069, 0x7936, 0x6804, 0xa086, - 0x0000, 0x00c0, 0x45f6, 0x6830, 0xa086, 0x0000, 0x00c0, 0x45f6, - 0x703f, 0x0001, 0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, - 0x6830, 0x689e, 0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, - 0x45fc, 0x127e, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x460d, - 0x7020, 0x8001, 0x7022, 0x00c0, 0x460d, 0x7023, 0x0009, 0x8109, - 0x7126, 0x00c0, 0x460d, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, - 0x461e, 0x702c, 0x8001, 0x702e, 0x00c0, 0x461e, 0x702f, 0x0009, - 0x8109, 0x7132, 0x00c0, 0x461e, 0x7034, 0x107a, 0x7018, 0xa00d, - 0x0040, 0x462f, 0x7008, 0x8001, 0x700a, 0x00c0, 0x462f, 0x700b, - 0x0009, 0x8109, 0x711a, 0x00c0, 0x462f, 0x701c, 0x107a, 0x127f, - 0x7004, 0x0079, 0x4633, 0x465a, 0x465b, 0x4677, 0x0e7e, 0x2071, - 0x7949, 0x7018, 0xa005, 0x00c0, 0x4641, 0x711a, 0x721e, 0x700b, - 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x7949, 0x701c, - 0xa206, 0x00c0, 0x464d, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, - 0x0e7e, 0x2071, 0x7949, 0x6088, 0xa102, 0x0048, 0x4658, 0x618a, - 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x3806, 0x00c0, 0x466d, - 0x6088, 0x8001, 0x0048, 0x466d, 0x608a, 0x00c0, 0x466d, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4d50, 0x127f, 0x8108, 0xa182, 0x00ff, - 0x0048, 0x4675, 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, - 0x2060, 0x127e, 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x46a6, - 0x8001, 0x6016, 0x00c0, 0x46a6, 0x611c, 0xa186, 0x0003, 0x0040, - 0x468d, 0xa186, 0x0006, 0x00c0, 0x46a4, 0x6010, 0x2068, 0x6854, - 0xa08a, 0x199a, 0x0048, 0x46a4, 0xa082, 0x1999, 0x6856, 0xa08a, - 0x199a, 0x0048, 0x469d, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, - 0xa108, 0x6116, 0x0078, 0x46a6, 0x1078, 0x688e, 0x127f, 0xac88, - 0x0008, 0x7116, 0x2001, 0x7716, 0x2004, 0xa102, 0x0048, 0x46b4, - 0x7017, 0x7e00, 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, - 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, - 0x2001, 0x7952, 0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, - 0x7033, 0x07d0, 0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x7955, - 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x711a, 0x721e, - 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x79da, 0x0c7f, - 0x007c, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x79da, - 0x2060, 0x007c, 0x6854, 0xa08a, 0x199a, 0x0048, 0x46f1, 0x2001, - 0x1999, 0xa005, 0x00c0, 0x4701, 0x6944, 0x0c7e, 0x1078, 0x46e1, - 0x6014, 0x0c7f, 0xa005, 0x00c0, 0x4706, 0x2001, 0x001e, 0x0078, - 0x4706, 0xa08e, 0xffff, 0x00c0, 0x4706, 0xa006, 0x8003, 0x800b, - 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, - 0x0040, 0x4741, 0xd0b4, 0x00c0, 0x471d, 0xd0bc, 0x00c0, 0x472f, - 0x2009, 0x0006, 0x1078, 0x4764, 0x007c, 0xd0fc, 0x0040, 0x472a, - 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x475d, 0xa08e, 0x0000, - 0x00c0, 0x475d, 0x2009, 0x0043, 0x1078, 0x5cfb, 0x007c, 0xd0fc, - 0x0040, 0x473c, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x475d, - 0xa08e, 0x0000, 0x00c0, 0x475d, 0x2009, 0x0042, 0x1078, 0x5cfb, - 0x007c, 0xd0fc, 0x0040, 0x4753, 0xa084, 0x0003, 0xa08e, 0x0003, - 0x0040, 0x475d, 0xa08e, 0x0002, 0x0040, 0x4757, 0x2009, 0x0041, - 0x1078, 0x5cfb, 0x007c, 0x1078, 0x4762, 0x0078, 0x4752, 0x2009, - 0x0043, 0x1078, 0x5cfb, 0x0078, 0x4752, 0x2009, 0x0004, 0x1078, - 0x4764, 0x007c, 0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, - 0x4789, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, - 0x4783, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x4783, - 0x0c7e, 0x2009, 0x0000, 0x1078, 0x46e1, 0x6204, 0x8210, 0x0048, - 0x4782, 0x6206, 0x0c7f, 0x1078, 0x3b4c, 0x6010, 0xa06d, 0x10c0, - 0x46ea, 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x79da, - 0x6000, 0x81ff, 0x0040, 0x4797, 0xa205, 0x0078, 0x4798, 0xa204, - 0x6002, 0xace0, 0x0008, 0x00f0, 0x4790, 0x0c7f, 0x157f, 0x007c, - 0x6808, 0xa005, 0x0040, 0x47a8, 0x8001, 0x680a, 0xa085, 0x0001, - 0x007c, 0x127e, 0x2091, 0x2200, 0x2079, 0x7936, 0x127f, 0x0d7e, - 0x2069, 0x7936, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, - 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, - 0xa084, 0x0007, 0x0079, 0x47c4, 0x47ce, 0x47f3, 0x484e, 0x47d4, - 0x47f3, 0x47cc, 0x47cc, 0x47cc, 0x1078, 0x12d5, 0x1078, 0x46c0, - 0x1078, 0x4d50, 0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x47da, - 0x0c7f, 0x007c, 0x2011, 0x351a, 0x1078, 0x4643, 0x7828, 0xa092, - 0x0002, 0x00c8, 0x47e9, 0x8000, 0x782a, 0x1078, 0x354a, 0x0078, - 0x47d8, 0x1078, 0x351a, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, - 0x0000, 0x0078, 0x47d8, 0x1078, 0x46c0, 0x3c00, 0x007e, 0x2011, - 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, - 0x4811, 0x62c0, 0x82ff, 0x00c0, 0x4811, 0x782b, 0x0000, 0x7824, - 0xa065, 0x1040, 0x12d5, 0x2009, 0x0013, 0x1078, 0x5cfb, 0x0c7f, - 0x007c, 0x3900, 0xa082, 0x7a7a, 0x00c8, 0x4818, 0x1078, 0x5bfe, - 0x0c7e, 0x7824, 0xa065, 0x1040, 0x12d5, 0x7804, 0xa086, 0x0004, - 0x0040, 0x4893, 0x7828, 0xa092, 0x2710, 0x00c8, 0x482e, 0x8000, - 0x782a, 0x0c7f, 0x1078, 0x5648, 0x0078, 0x480f, 0x6104, 0xa186, - 0x0003, 0x00c0, 0x4845, 0x0e7e, 0x2071, 0x7700, 0x70c8, 0x0e7f, - 0xd08c, 0x0040, 0x4845, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, - 0x7700, 0x1078, 0x3553, 0x0e7f, 0x0c7f, 0x1078, 0x767d, 0x2009, - 0x0014, 0x1078, 0x5cfb, 0x0c7f, 0x0078, 0x480f, 0x2001, 0x7952, - 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x4862, 0x782b, 0x0000, - 0x7824, 0xa065, 0x1040, 0x12d5, 0x2009, 0x0013, 0x1078, 0x5d49, - 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x7a7a, 0x00c8, - 0x486b, 0x1078, 0x5bfe, 0x7824, 0xa005, 0x1040, 0x12d5, 0x781c, - 0xa06d, 0x1040, 0x12d5, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, - 0x1078, 0x5cd4, 0x693c, 0x81ff, 0x1040, 0x12d5, 0x8109, 0x693e, - 0x6854, 0xa015, 0x0040, 0x4887, 0x7a1e, 0x0078, 0x4889, 0x7918, - 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, - 0x4d50, 0x0078, 0x4860, 0x6104, 0xa186, 0x0002, 0x0040, 0x489e, - 0xa186, 0x0004, 0x0040, 0x489e, 0x0078, 0x4822, 0x7808, 0xac06, - 0x0040, 0x4822, 0x1078, 0x4c57, 0x1078, 0x4948, 0x0c7f, 0x1078, - 0x4d50, 0x0078, 0x480f, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x7955, - 0x2013, 0x0000, 0x62c8, 0x82ff, 0x00c0, 0x48c5, 0x62c4, 0x82ff, - 0x00c0, 0x48c5, 0x793c, 0xa1e5, 0x0000, 0x0040, 0x48c3, 0x2009, - 0x0049, 0x1078, 0x5cfb, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x7a7a, - 0x00c8, 0x48cc, 0x1078, 0x5bfe, 0x6017, 0x0010, 0x793c, 0x81ff, - 0x0040, 0x48c3, 0x7944, 0xa192, 0x7530, 0x00c8, 0x48eb, 0x8108, - 0x7946, 0x1078, 0x46c5, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, - 0x0006, 0x00c0, 0x48e7, 0x6017, 0x0012, 0x0078, 0x48c3, 0x6017, - 0x0016, 0x0078, 0x48c3, 0x037e, 0x2019, 0x0001, 0x1078, 0x583a, - 0x037f, 0x1078, 0x767d, 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, - 0x5cfb, 0x0078, 0x48c3, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x7936, 0x6020, 0x8000, - 0x6022, 0x6010, 0xa005, 0x0040, 0x4916, 0xa080, 0x0003, 0x2102, - 0x6112, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, - 0x0078, 0x4911, 0x0d7e, 0x2069, 0x7936, 0x6000, 0xd0d4, 0x0040, - 0x492f, 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x492a, - 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x4d58, 0xc0d5, - 0x6002, 0x6818, 0xa005, 0x0040, 0x4941, 0x6056, 0x605b, 0x0000, - 0x007e, 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0x7936, 0x0078, - 0x4921, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x4921, - 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x7936, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, - 0x0040, 0x4963, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, - 0x017f, 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x495e, 0x0c7e, - 0x600f, 0x0000, 0x2c08, 0x2061, 0x7936, 0x6034, 0xa005, 0x0040, - 0x4977, 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, - 0x6136, 0x0078, 0x4975, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, - 0x027e, 0x007e, 0x127e, 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, - 0x2091, 0x8000, 0x8cff, 0x0040, 0x49dd, 0x6018, 0xa080, 0x0028, - 0x2004, 0xa206, 0x00c0, 0x49d8, 0x703c, 0xac06, 0x00c0, 0x499d, - 0x6003, 0x000a, 0x630a, 0x0078, 0x49d8, 0x7038, 0xac36, 0x00c0, - 0x49a3, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x49b1, 0x2c00, - 0xaf36, 0x0040, 0x49af, 0x2f00, 0x7036, 0x0078, 0x49b1, 0x7037, - 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x49ba, 0x7e0e, - 0x0078, 0x49bb, 0x2678, 0x600f, 0x0000, 0x1078, 0x6a03, 0x0040, - 0x49d3, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x49e6, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c0a, 0x1078, - 0x3b4c, 0x1078, 0x6b5f, 0x1078, 0x6b6c, 0x0c7f, 0x0078, 0x498a, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x498a, 0x127f, 0x007f, 0x027f, - 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x49c8, 0x1078, 0x75b3, 0x0078, 0x49d3, 0x007e, - 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, - 0x8000, 0x2079, 0x7936, 0x7838, 0xa065, 0x0040, 0x4a26, 0x600c, - 0x007e, 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x4a0d, 0x6003, - 0x000a, 0x630a, 0x2c30, 0x0078, 0x4a23, 0x1078, 0x6a03, 0x0040, - 0x4a21, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a2f, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b4c, 0x1078, - 0x6b5f, 0x1078, 0x6b6c, 0x007f, 0x0078, 0x49fc, 0x7e3a, 0x7e36, - 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x4a18, 0x1078, 0x75b3, 0x0078, 0x4a21, - 0x027e, 0x1078, 0x4a4c, 0x1078, 0x4ae5, 0x027f, 0x007c, 0x0f7e, - 0x127e, 0x2079, 0x7936, 0x2091, 0x8000, 0x1078, 0x4b7c, 0x1078, - 0x4be4, 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x7614, - 0x2660, 0x2678, 0x8cff, 0x0040, 0x4ad4, 0x6018, 0xa080, 0x0028, - 0x2004, 0xa206, 0x00c0, 0x4acf, 0x7024, 0xac06, 0x00c0, 0x4a92, - 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4a8d, 0x1078, 0x5656, - 0x68c3, 0x0000, 0x1078, 0x5b04, 0x7027, 0x0000, 0x037e, 0x2069, - 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4a82, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4a8a, - 0x6827, 0x0001, 0x037f, 0x0078, 0x4a92, 0x6003, 0x0009, 0x630a, - 0x0078, 0x4acf, 0x7014, 0xac36, 0x00c0, 0x4a98, 0x660c, 0x7616, - 0x7010, 0xac36, 0x00c0, 0x4aa6, 0x2c00, 0xaf36, 0x0040, 0x4aa4, - 0x2f00, 0x7012, 0x0078, 0x4aa6, 0x7013, 0x0000, 0x660c, 0x067e, - 0x2c00, 0xaf06, 0x0040, 0x4aaf, 0x7e0e, 0x0078, 0x4ab0, 0x2678, - 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x4ac8, - 0x601c, 0xa086, 0x0003, 0x00c0, 0x4adc, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x1078, 0x6c0a, 0x1078, 0x3b4c, 0x1078, 0x6b5f, - 0x1078, 0x6b6c, 0x1078, 0x59d4, 0x0c7f, 0x0078, 0x4a5a, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x4a5a, 0x127f, 0x007f, 0x067f, 0x0c7f, - 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, - 0x4abd, 0x1078, 0x75b3, 0x0078, 0x4ac8, 0x0c7e, 0x007e, 0x127e, - 0x2091, 0x8000, 0xa280, 0x7820, 0x2004, 0xa065, 0x0040, 0x4b78, - 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, 0x2071, 0x7936, 0x6654, 0x7018, - 0xac06, 0x00c0, 0x4afc, 0x761a, 0x701c, 0xac06, 0x00c0, 0x4b08, - 0x86ff, 0x00c0, 0x4b07, 0x7018, 0x701e, 0x0078, 0x4b08, 0x761e, - 0x6058, 0xa07d, 0x0040, 0x4b0d, 0x7e56, 0xa6ed, 0x0000, 0x0040, - 0x4b13, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, - 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x377f, 0x0040, 0x4b74, 0x7624, - 0x86ff, 0x0040, 0x4b64, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, - 0x4b64, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4b5b, - 0x1078, 0x5656, 0x68c3, 0x0000, 0x1078, 0x5b04, 0x7027, 0x0000, - 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4b44, - 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, - 0x0040, 0x4b4c, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, - 0xa005, 0x0040, 0x4b55, 0x8001, 0x603e, 0x2660, 0x1078, 0x6b6c, - 0x0c7f, 0x0078, 0x4b64, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, - 0x630a, 0x0c7f, 0x0078, 0x4b1b, 0x8dff, 0x0040, 0x4b70, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c0a, 0x1078, 0x3b4c, - 0x1078, 0x59d4, 0x0078, 0x4b1b, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, - 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x4bd4, 0x600c, 0x007e, - 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x4bb9, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0040, 0x4bb3, 0x1078, 0x5656, 0x68c3, 0x0000, - 0x1078, 0x5b04, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, - 0xa384, 0x1000, 0x0040, 0x4ba8, 0x6803, 0x0100, 0x6803, 0x0000, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4bb0, 0x6827, 0x0001, - 0x037f, 0x0078, 0x4bb9, 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, - 0x4bd1, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x4bcd, 0x601c, - 0xa086, 0x0003, 0x00c0, 0x4bdb, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x1078, 0x3b4c, 0x1078, 0x6b5f, 0x1078, 0x6b6c, 0x1078, - 0x59d4, 0x007f, 0x0078, 0x4b83, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, - 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4bc4, - 0x1078, 0x75b3, 0x0078, 0x4bcd, 0x007e, 0x067e, 0x0c7e, 0x0d7e, - 0x7818, 0xa065, 0x0040, 0x4c50, 0x6054, 0x007e, 0x6057, 0x0000, - 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x377f, - 0x0040, 0x4c4d, 0x7e24, 0x86ff, 0x0040, 0x4c3f, 0xa680, 0x0004, - 0x2004, 0xad06, 0x00c0, 0x4c3f, 0x0d7e, 0x2069, 0x0100, 0x68c0, - 0xa005, 0x0040, 0x4c36, 0x1078, 0x5656, 0x68c3, 0x0000, 0x1078, - 0x5b04, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, - 0x1000, 0x0040, 0x4c1f, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0040, 0x4c27, 0x6827, 0x0001, 0x037f, - 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4c30, 0x8001, 0x603e, - 0x2660, 0x1078, 0x6b6c, 0x0c7f, 0x0078, 0x4c3f, 0x0d7f, 0x0c7e, - 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x4bf6, 0x8dff, - 0x0040, 0x4c49, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, - 0x3b4c, 0x1078, 0x59d4, 0x0078, 0x4bf6, 0x007f, 0x0078, 0x4be9, - 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, - 0x0c7e, 0x2071, 0x7936, 0x7004, 0xa084, 0x0007, 0x0079, 0x4c60, - 0x4c6a, 0x4c6d, 0x4c86, 0x4ca2, 0x4ce7, 0x4c6a, 0x4c6a, 0x4c68, - 0x1078, 0x12d5, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, - 0x4c7b, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x4c82, - 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, - 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, 0x4c7b, 0x6018, 0x2060, - 0x1078, 0x377f, 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, - 0x0040, 0x4c97, 0x6054, 0xa015, 0x0040, 0x4c9e, 0x721e, 0x7007, - 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, - 0x0078, 0x4c97, 0x7024, 0xa065, 0x0040, 0x4ce4, 0x700c, 0xac06, - 0x00c0, 0x4cb9, 0x1078, 0x59d4, 0x600c, 0xa015, 0x0040, 0x4cb5, - 0x720e, 0x600f, 0x0000, 0x0078, 0x4ce2, 0x720e, 0x720a, 0x0078, - 0x4ce2, 0x7014, 0xac06, 0x00c0, 0x4ccc, 0x1078, 0x59d4, 0x600c, - 0xa015, 0x0040, 0x4cc8, 0x7216, 0x600f, 0x0000, 0x0078, 0x4ce2, - 0x7216, 0x7212, 0x0078, 0x4ce2, 0x6018, 0x2060, 0x1078, 0x377f, - 0x6000, 0xc0dc, 0x6002, 0x1078, 0x59d4, 0x701c, 0xa065, 0x0040, - 0x4ce2, 0x6054, 0xa015, 0x0040, 0x4ce0, 0x721e, 0x0078, 0x4ce2, - 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, - 0xa065, 0x0040, 0x4cf4, 0x1078, 0x59d4, 0x600c, 0xa015, 0x0040, - 0x4cfb, 0x720e, 0x600f, 0x0000, 0x1078, 0x5b04, 0x7027, 0x0000, - 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, 0x0078, 0x4cf4, 0x0d7e, - 0x2069, 0x7936, 0x6830, 0xa084, 0x0003, 0x0079, 0x4d07, 0x4d0d, - 0x4d0f, 0x4d35, 0x4d0d, 0x1078, 0x12d5, 0x0d7f, 0x007c, 0x0c7e, - 0x6840, 0xa086, 0x0001, 0x0040, 0x4d2b, 0x683c, 0xa065, 0x0040, - 0x4d20, 0x600c, 0xa015, 0x0040, 0x4d27, 0x6a3a, 0x600f, 0x0000, - 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, - 0x6836, 0x0078, 0x4d20, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, - 0x4d20, 0x6003, 0x0003, 0x0078, 0x4d20, 0x0c7e, 0x6843, 0x0000, - 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, 0x4d4d, 0x600c, 0xa015, - 0x0040, 0x4d49, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, - 0x4d4d, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, - 0x0d7e, 0x2069, 0x7936, 0x6804, 0xa084, 0x0007, 0x0079, 0x4d58, - 0x4d62, 0x4dff, 0x4dff, 0x4dff, 0x4dff, 0x4e01, 0x4dff, 0x4d60, - 0x1078, 0x12d5, 0x6820, 0xa005, 0x00c0, 0x4d68, 0x0d7f, 0x007c, - 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4d77, 0x6807, 0x0004, 0x6826, - 0x682b, 0x0000, 0x1078, 0x4e47, 0x0c7f, 0x0d7f, 0x007c, 0x6814, - 0xa065, 0x0040, 0x4d85, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, - 0x1078, 0x4e47, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, - 0xa2f5, 0x0000, 0x0040, 0x4dfa, 0x704c, 0xa00d, 0x0040, 0x4d94, - 0x7088, 0xa005, 0x0040, 0x4dac, 0x7054, 0xa075, 0x0040, 0x4d9d, - 0xa20e, 0x0040, 0x4dfa, 0x0078, 0x4da2, 0x6818, 0xa20e, 0x0040, - 0x4dfa, 0x2070, 0x704c, 0xa00d, 0x0040, 0x4d94, 0x7088, 0xa005, - 0x00c0, 0x4d94, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, - 0x4d94, 0x1078, 0x5ca3, 0x0040, 0x4dfa, 0x8318, 0x733e, 0x6112, - 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, - 0x4dc3, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, - 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc, 0x0040, 0x4ddc, 0x7100, - 0xd1f4, 0x0040, 0x4dd8, 0x7114, 0xa18c, 0x00ff, 0x0078, 0x4de1, - 0x2009, 0x0000, 0x0078, 0x4de1, 0xa1e0, 0x2303, 0x2c0c, 0xa18c, - 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, 0x5298, 0x7300, 0xc3dd, - 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, - 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, - 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4df8, 0x0d7f, - 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4e0d, 0x6807, 0x0004, - 0x6826, 0x682b, 0x0000, 0x1078, 0x4e47, 0x0c7f, 0x0d7f, 0x007c, - 0x0f7e, 0x0d7e, 0x2069, 0x7936, 0x6830, 0xa086, 0x0000, 0x00c0, - 0x4e2e, 0x6838, 0xa07d, 0x0040, 0x4e2e, 0x6833, 0x0001, 0x683e, - 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, - 0x1a24, 0x00c0, 0x4e31, 0x127f, 0x1078, 0x552b, 0x0d7f, 0x0f7f, - 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, - 0x0040, 0x4e43, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, - 0x0000, 0x0078, 0x4e2e, 0x683a, 0x6836, 0x0078, 0x4e3d, 0x601c, - 0xa084, 0x000f, 0x1079, 0x4e4d, 0x007c, 0x4e56, 0x4e5b, 0x5162, - 0x5258, 0x4e5b, 0x5162, 0x5258, 0x4e56, 0x4e5b, 0x1078, 0x4c57, - 0x1078, 0x4d50, 0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, - 0x6004, 0xa08a, 0x0030, 0x10c8, 0x12d5, 0x6118, 0x2178, 0x79a0, - 0xd1bc, 0x0040, 0x4e78, 0x7900, 0xd1f4, 0x0040, 0x4e74, 0x7914, - 0xa18c, 0x00ff, 0x0078, 0x4e7d, 0x2009, 0x0000, 0x0078, 0x4e7d, - 0xa1f8, 0x2303, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, - 0x619a, 0x1079, 0x4e89, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, - 0x007c, 0x4ebb, 0x4ef3, 0x4f0b, 0x4f8a, 0x4fb7, 0x4fbf, 0x4fe0, - 0x4ff1, 0x5002, 0x500a, 0x501b, 0x500a, 0x5063, 0x4ff1, 0x5084, - 0x508c, 0x5002, 0x508c, 0x509d, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, - 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eb9, - 0x5712, 0x5727, 0x574a, 0x576e, 0x4fe0, 0x4eb9, 0x4fe0, 0x500a, - 0x4eb9, 0x4f0b, 0x4f8a, 0x4eb9, 0x5c1e, 0x500a, 0x4eb9, 0x5c41, - 0x500a, 0x1078, 0x12d5, 0x20a1, 0x020b, 0x1078, 0x50b2, 0x20a3, - 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x7751, 0x6804, 0xd084, - 0x0040, 0x4ed5, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x206e, - 0x21a2, 0x017f, 0x0d7f, 0x0078, 0x4eda, 0x0d7f, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7705, 0x53a6, 0x20a9, - 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, - 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, - 0x1078, 0x5642, 0x007c, 0x20a1, 0x020b, 0x1078, 0x50b2, 0x20a3, - 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, - 0x20a2, 0x20a9, 0x0004, 0x2099, 0x7705, 0x53a6, 0x60c3, 0x0010, - 0x1078, 0x5642, 0x007c, 0x20a1, 0x020b, 0x1078, 0x50b2, 0x7818, - 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4f1e, 0x20a3, - 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0078, 0x4f20, 0x20a3, 0x0300, - 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, - 0x00c0, 0x4f59, 0x2099, 0x7920, 0x33a6, 0x9398, 0x33a6, 0x9398, - 0x3304, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, - 0x2099, 0x7705, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, - 0x20a9, 0x0010, 0x20a3, 0x0000, 0x00f0, 0x4f4a, 0x2099, 0x7928, - 0x33a6, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x00f0, 0x4f53, 0x0078, - 0x4f79, 0x2099, 0x7920, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, - 0x2099, 0x7705, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, - 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4f6a, 0x20a9, 0x0008, - 0x20a3, 0x0000, 0x00f0, 0x4f70, 0x2099, 0x7928, 0x20a9, 0x0008, - 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4f7b, 0x20a9, - 0x000a, 0x20a3, 0x0000, 0x00f0, 0x4f81, 0x60c3, 0x0074, 0x1078, - 0x5642, 0x007c, 0x20a1, 0x020b, 0x1078, 0x50b2, 0x20a3, 0x2010, - 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7751, 0x7904, - 0x0f7f, 0xd1ac, 0x00c0, 0x4fa6, 0xa085, 0x0020, 0xd1a4, 0x0040, - 0x4fab, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x5642, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x50b2, 0x20a3, 0x5000, 0x0078, 0x4f20, 0x20a1, - 0x020b, 0x1078, 0x50b2, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x5642, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0200, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x5642, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0100, 0x20a3, - 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, - 0x5642, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0200, - 0x0078, 0x4f20, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0100, - 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, - 0x1078, 0x5642, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x5129, - 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, - 0x6894, 0xa086, 0x0014, 0x00c0, 0x5041, 0x6998, 0xa184, 0xc000, - 0x00c0, 0x503d, 0xd1ec, 0x0040, 0x5039, 0x20a3, 0x2100, 0x0078, - 0x5043, 0x20a3, 0x0100, 0x0078, 0x5043, 0x20a3, 0x0400, 0x0078, - 0x5043, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x20a2, 0x0f7e, 0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, - 0x5053, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x5058, 0xa085, 0x0010, - 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, - 0x5642, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, - 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0014, 0x1078, 0x5642, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5129, - 0x20a3, 0x0200, 0x0078, 0x4ec1, 0x20a1, 0x020b, 0x1078, 0x5129, - 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, - 0x60c3, 0x0008, 0x1078, 0x5642, 0x007c, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0100, 0x20a3, - 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, - 0x5642, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, - 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0, 0x50c5, 0x20a3, - 0x22ff, 0x20a3, 0xfffe, 0x0078, 0x50f3, 0xa286, 0x007f, 0x00c0, - 0x50d0, 0x0d7e, 0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, 0x50e7, - 0xd2bc, 0x0040, 0x50ef, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x50de, - 0x20a3, 0x22ff, 0x20a3, 0xfffc, 0x0078, 0x50e7, 0xa2e8, 0x7820, - 0x2d6c, 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, - 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x50f7, 0x20a3, - 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, - 0x0129, 0x20a3, 0x0000, 0x1078, 0x5631, 0x22a2, 0x20a3, 0x0000, - 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, - 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0x7719, 0x2da6, 0x8d68, - 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x50fb, - 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, - 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5148, 0x0d7e, 0xa0e8, - 0x7820, 0x2d6c, 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, - 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5150, - 0x20a3, 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0198, 0x20a3, 0x0000, 0x1078, 0x5631, 0x22a2, 0x20a3, - 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x027f, 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, - 0x12d5, 0xa08a, 0x008c, 0x10c8, 0x12d5, 0x6118, 0x2178, 0x79a0, - 0xd1bc, 0x0040, 0x5180, 0x7900, 0xd1f4, 0x0040, 0x517c, 0x7914, - 0xa18c, 0x00ff, 0x0078, 0x5185, 0x2009, 0x0000, 0x0078, 0x5185, - 0xa1f8, 0x2303, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, - 0x619a, 0xa082, 0x0085, 0x1079, 0x5190, 0x0f7f, 0x0c7f, 0x007c, - 0x5199, 0x51a4, 0x51be, 0x5197, 0x5197, 0x5197, 0x5199, 0x1078, - 0x12d5, 0x147e, 0x20a1, 0x020b, 0x1078, 0x51d1, 0x60c3, 0x0000, - 0x1078, 0x5642, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, - 0x51fe, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, - 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x000c, 0x1078, 0x5642, 0x147f, 0x007c, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x522b, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x5642, 0x147f, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, - 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x51f0, 0x0d7e, 0xa0e8, - 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, - 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x51f8, - 0x20a3, 0x8100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0078, 0x50fb, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, - 0x007e, 0x0048, 0x521d, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, - 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, - 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5225, 0x20a3, 0x8400, 0x6298, - 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, - 0x0000, 0x0078, 0x5154, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x524a, - 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, - 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x0078, 0x5252, 0x20a3, 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, - 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x5154, - 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x1048, 0x12d5, - 0xa08a, 0x0050, 0x10c8, 0x12d5, 0x7918, 0x2160, 0x61a0, 0xd1bc, - 0x0040, 0x5277, 0x6100, 0xd1f4, 0x0040, 0x5273, 0x6114, 0xa18c, - 0x00ff, 0x0078, 0x527c, 0x2009, 0x0000, 0x0078, 0x527c, 0xa1e0, - 0x2303, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, - 0x0040, 0x1079, 0x5286, 0x0f7f, 0x0c7f, 0x007c, 0x5298, 0x537e, - 0x5326, 0x54a6, 0x5296, 0x5296, 0x5296, 0x5296, 0x5296, 0x5296, - 0x5296, 0x58ed, 0x58fe, 0x590f, 0x5920, 0x5296, 0x1078, 0x12d5, - 0x0d7e, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x52e9, 0x7910, - 0x2168, 0x6948, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, - 0xa184, 0x0006, 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x52b3, 0x20a3, - 0x0002, 0x0078, 0x52bf, 0xd1b4, 0x0040, 0x52ba, 0x20a3, 0x0001, - 0x0078, 0x52bf, 0x20a3, 0x0000, 0x2230, 0x0078, 0x52c1, 0x6a80, - 0x6e7c, 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, - 0x8000, 0x00f0, 0x52c5, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, - 0x9080, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, - 0x7952, 0x2003, 0x07d0, 0x2001, 0x7951, 0x2003, 0x0009, 0x2001, - 0x7957, 0x2003, 0x0002, 0x1078, 0x1504, 0x147f, 0x157f, 0x0d7f, - 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, - 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, - 0x0028, 0x2004, 0xd0bc, 0x0040, 0x530f, 0x0d7e, 0xa0e8, 0x7820, - 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, - 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5317, 0x20a3, - 0x0600, 0x6198, 0x21a2, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, - 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, - 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, - 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5346, 0x7810, 0x2068, - 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, - 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, - 0x5642, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, - 0x0040, 0x5364, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, - 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, - 0x2da6, 0x0d7f, 0x0078, 0x536c, 0x20a3, 0x0500, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, - 0x1078, 0x5631, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, - 0x137e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x546e, 0x7810, 0x2068, - 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, - 0xf000, 0x00c0, 0x539b, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, - 0x53a3, 0x0078, 0x539e, 0xa006, 0x1079, 0x53a3, 0x147f, 0x137f, - 0x157f, 0x0d7f, 0x007c, 0x53ad, 0x540f, 0x5413, 0x5436, 0x5443, - 0x5455, 0x5459, 0x53ab, 0x1078, 0x12d5, 0x017e, 0x037e, 0x694c, - 0xa18c, 0x0003, 0xa186, 0x0000, 0x00c0, 0x53c0, 0x6b78, 0x23a2, - 0x6868, 0x20a2, 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x543a, - 0xa186, 0x0001, 0x00c0, 0x540a, 0x6b78, 0x23a2, 0x6868, 0x20a2, - 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, - 0x2009, 0x0018, 0xa384, 0x0300, 0x0040, 0x5409, 0xd3c4, 0x0040, - 0x53db, 0x687c, 0xa108, 0xd3cc, 0x0040, 0x53e0, 0x6874, 0xa108, - 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, - 0x8000, 0x00f0, 0x53e5, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, - 0x0003, 0x0040, 0x5409, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, - 0x22a2, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x5631, 0x22a2, 0x20a3, - 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x5642, 0x007c, 0x20a3, - 0x0008, 0x0078, 0x5438, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, - 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, - 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x60c3, 0x0032, 0x1078, 0x5642, 0x007c, 0x20a3, 0x0028, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, - 0x1078, 0x5642, 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x60c3, 0x0020, 0x1078, 0x5642, 0x007c, 0x20a3, 0x0008, 0x0078, - 0x5438, 0x037e, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, - 0x8001, 0x00c0, 0x5467, 0x22a2, 0x037f, 0x0078, 0x5438, 0x20a3, - 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x543a, 0x027e, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, - 0x0040, 0x548c, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, - 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, - 0x2da6, 0x0d7f, 0x0078, 0x5494, 0x20a3, 0x0700, 0x6298, 0x22a2, - 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, - 0x1078, 0x5631, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, - 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, - 0x1079, 0x54b9, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, - 0x007c, 0x54c1, 0x54c1, 0x54c3, 0x54c1, 0x54c1, 0x54c1, 0x54e8, - 0x54c1, 0x1078, 0x12d5, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, - 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x54f2, 0x0d7e, - 0x2069, 0x7751, 0x6804, 0xd0bc, 0x0040, 0x54dd, 0x682c, 0xa084, - 0x00ff, 0x8007, 0x20a2, 0x0078, 0x54df, 0x20a3, 0x3f00, 0x0d7f, - 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x5642, 0x007c, - 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x54f2, 0x20a3, 0x7f00, - 0x0078, 0x54e0, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, - 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x5510, 0x0d7e, 0xa0e8, - 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, - 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5518, - 0x20a3, 0x0100, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x5631, 0x22a2, - 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e, - 0x037e, 0x2061, 0x0100, 0x2071, 0x7700, 0x6130, 0x7818, 0x2068, - 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x5544, 0xa080, 0x2303, 0x2014, - 0xa294, 0x00ff, 0x0078, 0x5548, 0x6910, 0x6a14, 0x7364, 0x7468, - 0x781c, 0xa086, 0x0006, 0x0040, 0x559c, 0xd5bc, 0x0040, 0x5558, - 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x555e, - 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, - 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, - 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, - 0x0000, 0xa582, 0x0080, 0x0048, 0x5590, 0x6a00, 0xd2f4, 0x0040, - 0x558e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x5590, 0x2011, 0x0000, - 0x629e, 0x6017, 0x0016, 0x1078, 0x46c5, 0x037f, 0x047f, 0x057f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, - 0x0003, 0xa086, 0x0002, 0x0040, 0x55eb, 0xd5bc, 0x0040, 0x55b0, - 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55b6, - 0x6063, 0x0100, 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, - 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, - 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, - 0x0080, 0x0048, 0x55e6, 0x6a00, 0xd2f4, 0x0040, 0x55e4, 0x6a14, - 0xa294, 0x00ff, 0x0078, 0x55e6, 0x2011, 0x0000, 0x629e, 0x6017, - 0x0012, 0x0078, 0x5593, 0xd5bc, 0x0040, 0x55f6, 0xa185, 0x0700, - 0x20a2, 0x6266, 0x636a, 0x646e, 0x0078, 0x55fc, 0x6063, 0x0700, - 0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, - 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, - 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, - 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, - 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, - 0x562c, 0x6a00, 0xd2f4, 0x0040, 0x562a, 0x6a14, 0xa294, 0x00ff, - 0x0078, 0x562c, 0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, - 0x5593, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, - 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0x7936, 0x6843, 0x0001, - 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x1078, 0x564d, 0x1078, 0x46b5, 0x007c, 0x007e, 0x6014, 0xa084, - 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, - 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, - 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, - 0x46c0, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, - 0x0040, 0x56a0, 0x1078, 0x5656, 0x6803, 0x1000, 0x6803, 0x0000, - 0x0c7e, 0x2061, 0x7936, 0x6128, 0xa192, 0x0002, 0x00c8, 0x568d, - 0x8108, 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x569b, 0x1078, - 0x46b5, 0x1078, 0x564d, 0x0078, 0x569b, 0x6124, 0xa1e5, 0x0000, - 0x0040, 0x5698, 0x1078, 0x767d, 0x2009, 0x0014, 0x1078, 0x5cfb, - 0x0c7f, 0x0078, 0x569b, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, - 0x1078, 0x3553, 0x0078, 0x569b, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, - 0x027e, 0x1078, 0x46ce, 0x2071, 0x7936, 0x713c, 0x81ff, 0x0040, - 0x56ce, 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, - 0x0040, 0x56d4, 0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, - 0x0001, 0x1078, 0x583a, 0x037f, 0x713c, 0x2160, 0x1078, 0x767d, - 0x2009, 0x004a, 0x1078, 0x5cfb, 0x0078, 0x56ce, 0x027f, 0x017f, - 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, - 0x56be, 0x8108, 0x7146, 0x1078, 0x46c5, 0x0078, 0x56ce, 0x0e7e, - 0x0d7e, 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0x7936, 0x7018, 0x2068, - 0x8dff, 0x0040, 0x5709, 0x68a0, 0xa406, 0x0040, 0x56fb, 0x6854, - 0x2068, 0x0078, 0x56f0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6e48, - 0x2d60, 0x1078, 0x394b, 0x0040, 0x5709, 0x1078, 0x59d4, 0xa085, - 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, - 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x50b2, - 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, - 0x60c3, 0x0008, 0x1078, 0x5642, 0x147f, 0x157f, 0x007c, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0200, 0x20a3, - 0x0000, 0x20a9, 0x0006, 0x2011, 0x7740, 0x2019, 0x7741, 0x23a6, - 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0, 0x5737, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5642, 0x147f, - 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, - 0x1078, 0x5109, 0x1078, 0x5120, 0x7810, 0x007e, 0xa080, 0x0015, - 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, - 0x8003, 0x60c2, 0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, - 0x5642, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x50b2, 0x20a3, 0x6200, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5642, - 0x147f, 0x157f, 0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x7936, 0x700c, 0x2060, 0x8cff, 0x0040, 0x579f, - 0x1078, 0x6b99, 0x00c0, 0x5796, 0x1078, 0x5f29, 0x600c, 0x007e, - 0x1078, 0x5cd4, 0x1078, 0x59d4, 0x0c7f, 0x0078, 0x578d, 0x700f, - 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, - 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, - 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, - 0x7936, 0x7024, 0x2060, 0x8cff, 0x0040, 0x57f8, 0x1078, 0x5656, - 0x68c3, 0x0000, 0x1078, 0x46c0, 0x2009, 0x0013, 0x1078, 0x5cfb, - 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x57db, 0x6827, 0x0004, - 0x7804, 0xa084, 0x4000, 0x0040, 0x57ed, 0x7803, 0x1000, 0x7803, - 0x0000, 0x0078, 0x57ed, 0xd084, 0x0040, 0x57e2, 0x6827, 0x0001, - 0x0078, 0x57e4, 0x00f0, 0x57ca, 0x7804, 0xa084, 0x1000, 0x0040, - 0x57ed, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, - 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, - 0x2001, 0x7700, 0x2004, 0xa096, 0x0001, 0x0040, 0x5830, 0xa096, - 0x0004, 0x0040, 0x5830, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, - 0x351a, 0x1078, 0x4643, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, - 0x581e, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5830, - 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x5830, 0xd084, 0x0040, - 0x5825, 0x6827, 0x0001, 0x0078, 0x5827, 0x00f0, 0x580d, 0x7804, - 0xa084, 0x1000, 0x0040, 0x5830, 0x7803, 0x0100, 0x7803, 0x0000, - 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, - 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, - 0x0140, 0x2071, 0x7936, 0x703c, 0x2060, 0x8cff, 0x0040, 0x5888, - 0x6817, 0x0010, 0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x46ce, - 0x1078, 0x1bf1, 0xa39d, 0x0000, 0x00c0, 0x5862, 0x2009, 0x0049, - 0x1078, 0x5cfb, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x5875, - 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5887, 0x7803, - 0x1000, 0x7803, 0x0000, 0x0078, 0x5887, 0xd094, 0x0040, 0x587c, - 0x6827, 0x0002, 0x0078, 0x587e, 0x00f0, 0x5864, 0x7804, 0xa084, - 0x1000, 0x0040, 0x5887, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, - 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, - 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936, - 0x6a06, 0x127f, 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, - 0x2069, 0x7936, 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, - 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2071, 0x7936, 0x7614, 0x2660, - 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x58e6, 0x601c, 0xa206, - 0x00c0, 0x58e1, 0x7014, 0xac36, 0x00c0, 0x58c0, 0x660c, 0x7616, - 0x7010, 0xac36, 0x00c0, 0x58ce, 0x2c00, 0xaf36, 0x0040, 0x58cc, - 0x2f00, 0x7012, 0x0078, 0x58ce, 0x7013, 0x0000, 0x660c, 0x067e, - 0x2c00, 0xaf06, 0x0040, 0x58d7, 0x7e0e, 0x0078, 0x58d8, 0x2678, - 0x600f, 0x0000, 0x1078, 0x6b6c, 0x1078, 0x59d4, 0x0c7f, 0x0078, - 0x58b3, 0x2c78, 0x600c, 0x2060, 0x0078, 0x58b3, 0x127f, 0x007f, - 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x52e9, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, - 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0078, 0x592f, 0x157e, 0x147e, - 0x20a1, 0x020b, 0x1078, 0x52e9, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x592f, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x52e9, 0x7810, 0x20a2, 0xa006, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x592f, - 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x52e9, 0x7810, 0x20a2, - 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, - 0x59df, 0x60c3, 0x0020, 0x1078, 0x5642, 0x147f, 0x157f, 0x007c, - 0x127e, 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, - 0x00c0, 0x5947, 0xd1bc, 0x00c0, 0x5991, 0x0078, 0x59d1, 0x2009, - 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, - 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, - 0x5988, 0x6020, 0xd0b4, 0x0040, 0x5988, 0x6024, 0xd094, 0x00c0, - 0x5988, 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x5988, - 0x00f0, 0x5954, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, - 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, - 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, - 0x00c0, 0x5987, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x597e, 0x027f, - 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, - 0x59d1, 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, - 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, - 0x4000, 0x0040, 0x59ca, 0x6020, 0xd0bc, 0x0040, 0x59ca, 0x2104, - 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x59ca, 0x00f0, 0x599e, - 0x027e, 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, - 0xa10d, 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, - 0x6043, 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, - 0x59c4, 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, - 0x0000, 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0x7936, 0x7020, - 0xa005, 0x0040, 0x59dd, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, - 0x0008, 0x20a2, 0x00f0, 0x59e1, 0x20a2, 0x20a2, 0x007c, 0x0f7e, - 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, - 0x87ff, 0x0040, 0x5a77, 0x8cff, 0x0040, 0x5a77, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x5a72, 0x88ff, 0x0040, 0x5a0e, 0x2800, 0xac06, - 0x00c0, 0x5a72, 0x2039, 0x0000, 0x0078, 0x5a12, 0x6018, 0xa206, - 0x00c0, 0x5a72, 0x7024, 0xac06, 0x00c0, 0x5a40, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0040, 0x5a3b, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x1078, 0x5b04, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, - 0xa384, 0x1000, 0x0040, 0x5a30, 0x6803, 0x0100, 0x6803, 0x0000, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5a38, 0x6827, 0x0001, - 0x037f, 0x0078, 0x5a40, 0x6003, 0x0009, 0x630a, 0x0078, 0x5a72, - 0x7014, 0xac36, 0x00c0, 0x5a46, 0x660c, 0x7616, 0x7010, 0xac36, - 0x00c0, 0x5a54, 0x2c00, 0xaf36, 0x0040, 0x5a52, 0x2f00, 0x7012, - 0x0078, 0x5a54, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, - 0x0040, 0x5a5d, 0x7e0e, 0x0078, 0x5a5e, 0x2678, 0x600f, 0x0000, - 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x5a68, 0x1078, 0x75b3, - 0x1078, 0x6b6c, 0x1078, 0x59d4, 0x88ff, 0x00c0, 0x5a81, 0x0c7f, - 0x0078, 0x59f8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x59f8, 0xa006, - 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5a78, - 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x8cff, - 0x0040, 0x5af3, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5aee, 0x88ff, - 0x0040, 0x5aa8, 0x2800, 0xac06, 0x00c0, 0x5aee, 0x0078, 0x5aac, - 0x6018, 0xa206, 0x00c0, 0x5aee, 0x703c, 0xac06, 0x00c0, 0x5abe, - 0x037e, 0x2019, 0x0001, 0x1078, 0x583a, 0x7033, 0x0000, 0x703f, - 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, - 0x00c0, 0x5ac4, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5ad2, - 0x2c00, 0xaf36, 0x0040, 0x5ad0, 0x2f00, 0x7036, 0x0078, 0x5ad2, - 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5adb, - 0x7e0e, 0x0078, 0x5adc, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, - 0x1078, 0x6a03, 0x0040, 0x5ae6, 0x1078, 0x75b3, 0x1078, 0x6b6c, - 0x88ff, 0x00c0, 0x5afd, 0x0c7f, 0x0078, 0x5a97, 0x2c78, 0x600c, - 0x2060, 0x0078, 0x5a97, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, - 0xa8c5, 0x0001, 0x0078, 0x5af4, 0x0e7e, 0x2071, 0x7936, 0x2001, - 0x7700, 0x2004, 0xa086, 0x0002, 0x00c0, 0x5b12, 0x7007, 0x0005, - 0x0078, 0x5b14, 0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, - 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, - 0x7936, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b54, - 0x2200, 0xac06, 0x00c0, 0x5b4f, 0x7038, 0xac36, 0x00c0, 0x5b32, - 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5b40, 0x2c00, 0xaf36, - 0x0040, 0x5b3e, 0x2f00, 0x7036, 0x0078, 0x5b40, 0x7037, 0x0000, - 0x660c, 0x2c00, 0xaf06, 0x0040, 0x5b48, 0x7e0e, 0x0078, 0x5b49, - 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0078, 0x5b54, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x5b25, 0x127f, 0x007f, 0x027f, 0x067f, - 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x760c, - 0x2660, 0x2678, 0x8cff, 0x0040, 0x5bed, 0x6018, 0xa080, 0x0028, - 0x2004, 0xa206, 0x00c0, 0x5be8, 0x7024, 0xac06, 0x00c0, 0x5b9b, - 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x5b9b, 0x1078, 0x5656, - 0x68c3, 0x0000, 0x1078, 0x5b04, 0x7027, 0x0000, 0x037e, 0x2069, - 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5b92, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5b9a, - 0x6827, 0x0001, 0x037f, 0x700c, 0xac36, 0x00c0, 0x5ba1, 0x660c, - 0x760e, 0x7008, 0xac36, 0x00c0, 0x5baf, 0x2c00, 0xaf36, 0x0040, - 0x5bad, 0x2f00, 0x700a, 0x0078, 0x5baf, 0x700b, 0x0000, 0x660c, - 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5bb8, 0x7e0e, 0x0078, 0x5bb9, - 0x2678, 0x600f, 0x0000, 0x1078, 0x6b85, 0x00c0, 0x5bc3, 0x1078, - 0x22b1, 0x0078, 0x5bdf, 0x1078, 0x6b99, 0x00c0, 0x5bcb, 0x1078, - 0x5f29, 0x0078, 0x5bdf, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, - 0x5bdf, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5bf5, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b4c, 0x1078, 0x6b5f, 0x6003, - 0x0000, 0x1078, 0x6b6c, 0x1078, 0x59d4, 0x0c7f, 0x0078, 0x5b6a, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x5b6a, 0x127f, 0x007f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, - 0x00c0, 0x5bd6, 0x1078, 0x75b3, 0x0078, 0x5bdf, 0x037e, 0x157e, - 0x137e, 0x147e, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, - 0x2123, 0x00c0, 0x5c0f, 0x8210, 0x8000, 0x0078, 0x5c06, 0xa005, - 0x0040, 0x5c19, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, - 0x53a3, 0x147f, 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, - 0x020b, 0x1078, 0x5129, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, - 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, - 0x4f47, 0x20a3, 0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, - 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x1078, 0x5642, 0x0d7f, - 0x007c, 0x20a1, 0x020b, 0x1078, 0x5129, 0x20a3, 0x0210, 0x20a3, - 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0018, 0x1078, 0x5642, 0x007c, 0x2061, 0x7e00, - 0x2a70, 0x7060, 0x7046, 0x704b, 0x7e00, 0x007c, 0x0e7e, 0x127e, - 0x2071, 0x7700, 0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, - 0x5ca0, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5c8c, - 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5c88, 0x0078, 0x5c7b, - 0x2061, 0x7e00, 0x0078, 0x5c7b, 0x6003, 0x0008, 0x8529, 0x7546, - 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5c9c, 0x754a, 0xa085, - 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5c97, - 0xa006, 0x0078, 0x5c99, 0x0e7e, 0x2071, 0x7700, 0x7544, 0xa582, - 0x0001, 0x0048, 0x5cd1, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, - 0x0040, 0x5cbe, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5cba, - 0x0078, 0x5cad, 0x2061, 0x7e00, 0x0078, 0x5cad, 0x6003, 0x0008, - 0x8529, 0x7546, 0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5ccd, - 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, - 0x5cc9, 0xa006, 0x0078, 0x5ccb, 0xac82, 0x7e00, 0x1048, 0x12d5, - 0x2001, 0x7715, 0x2004, 0xac02, 0x10c8, 0x12d5, 0xa006, 0x6006, - 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, - 0x0000, 0x2061, 0x7700, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, - 0x0040, 0x5cf3, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d50, - 0x127f, 0x0078, 0x5cf2, 0x601c, 0xa084, 0x000f, 0x0079, 0x5d00, - 0x5d09, 0x5d11, 0x5d2d, 0x5d49, 0x6c16, 0x6c32, 0x6c4e, 0x5d09, - 0x5d11, 0xa18e, 0x0047, 0x00c0, 0x5d10, 0xa016, 0x1078, 0x1572, - 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x5d1b, 0x067f, 0x007c, 0x5d2b, 0x5e12, 0x5f44, 0x5d2b, 0x5f9b, - 0x5d2b, 0x5d2b, 0x5d2b, 0x5dc1, 0x6247, 0x5d2b, 0x5d2b, 0x5d2b, - 0x5d2b, 0x5d2b, 0x5d2b, 0x1078, 0x12d5, 0x067e, 0x6000, 0xa0b2, - 0x0010, 0x10c8, 0x12d5, 0x1079, 0x5d37, 0x067f, 0x007c, 0x5d47, - 0x5d47, 0x5d47, 0x5d47, 0x5d47, 0x5d47, 0x5d47, 0x5d47, 0x66b7, - 0x677d, 0x5d47, 0x66d0, 0x6729, 0x66d0, 0x6729, 0x5d47, 0x1078, - 0x12d5, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x5d53, 0x067f, 0x007c, 0x5d63, 0x6285, 0x632b, 0x63ed, 0x6541, - 0x5d63, 0x5d63, 0x5d63, 0x6263, 0x666c, 0x6670, 0x5d63, 0x5d63, - 0x5d63, 0x5d63, 0x6696, 0x1078, 0x12d5, 0x20a9, 0x000e, 0x2e98, - 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, - 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, - 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5d73, 0x0e7e, - 0x1078, 0x6a03, 0x0040, 0x5d8a, 0x6010, 0x2070, 0x7007, 0x0000, - 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5cd4, 0x007c, 0x0d7e, 0x037e, - 0x7330, 0xa386, 0x0200, 0x00c0, 0x5d9b, 0x6018, 0x2068, 0x6813, - 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x5da5, 0x2068, - 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x5cd4, 0x037f, - 0x0d7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, - 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x5dbe, 0x6018, 0x2068, 0x7038, - 0x680a, 0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, - 0x5d7f, 0x2100, 0xa1b2, 0x0030, 0x10c8, 0x12d5, 0x0079, 0x5dc8, - 0x5dfa, 0x5e06, 0x5dfa, 0x5dfa, 0x5dfa, 0x5dfa, 0x5df8, 0x5df8, - 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, - 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, - 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5dfa, - 0x5df8, 0x5dfa, 0x5dfa, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, - 0x5dfa, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, 0x5df8, - 0x1078, 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, 0x4948, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4d50, 0x127f, 0x007c, 0x6003, 0x0001, - 0x6106, 0x1078, 0x4948, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d50, - 0x127f, 0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12d5, 0xa1b6, - 0x0013, 0x00c0, 0x5e1e, 0x2008, 0x0079, 0x5ea7, 0xa1b6, 0x0027, - 0x00c0, 0x5e74, 0x1078, 0x4c57, 0x6004, 0x1078, 0x6b85, 0x0040, - 0x5e37, 0x1078, 0x6b99, 0x0040, 0x5e6c, 0xa08e, 0x0021, 0x0040, - 0x5e70, 0xa08e, 0x0022, 0x0040, 0x5e6c, 0x0078, 0x5e67, 0x1078, - 0x22b1, 0x2001, 0x0007, 0x1078, 0x37ae, 0x6018, 0xa080, 0x0028, - 0x200c, 0x1078, 0x5f29, 0xa186, 0x007e, 0x00c0, 0x5e4d, 0x2001, - 0x772f, 0x2014, 0xa295, 0x0001, 0x2202, 0x017e, 0x027e, 0x037e, - 0x2110, 0x2019, 0x0028, 0x1078, 0x4a38, 0x1078, 0x497b, 0x0c7e, - 0x6018, 0xa065, 0x0040, 0x5e5e, 0x1078, 0x39f0, 0x0c7f, 0x2c08, - 0x1078, 0x7431, 0x037f, 0x027f, 0x017f, 0x1078, 0x37ee, 0x1078, - 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x1078, 0x5f29, 0x0078, 0x5e67, - 0x1078, 0x5f38, 0x0078, 0x5e67, 0xa186, 0x0014, 0x00c0, 0x5e6b, - 0x1078, 0x4c57, 0x1078, 0x228f, 0x1078, 0x6b85, 0x00c0, 0x5e94, - 0x1078, 0x22b1, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x5f29, - 0xa186, 0x007e, 0x00c0, 0x5e92, 0x2001, 0x772f, 0x200c, 0xa18d, - 0x0001, 0x2102, 0x0078, 0x5e67, 0x1078, 0x6b99, 0x00c0, 0x5e9c, - 0x1078, 0x5f29, 0x0078, 0x5e67, 0x6004, 0xa08e, 0x0021, 0x0040, - 0x5e98, 0xa08e, 0x0022, 0x1040, 0x5f38, 0x0078, 0x5e67, 0x5ed9, - 0x5edb, 0x5edf, 0x5ee3, 0x5ee7, 0x5eeb, 0x5ed7, 0x5ed7, 0x5ed7, - 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, - 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, - 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5eef, 0x5ef5, 0x5ed7, - 0x5eff, 0x5ef5, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ef5, - 0x5ef5, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x1078, - 0x12d5, 0x0078, 0x5ef5, 0x2001, 0x000b, 0x0078, 0x5f08, 0x2001, - 0x0003, 0x0078, 0x5f08, 0x2001, 0x0005, 0x0078, 0x5f08, 0x2001, - 0x0001, 0x0078, 0x5f08, 0x2001, 0x0009, 0x0078, 0x5f08, 0x1078, - 0x12d5, 0x0078, 0x5f07, 0x1078, 0x37ae, 0x1078, 0x4c57, 0x6003, - 0x0002, 0x6017, 0x0028, 0x1078, 0x4d50, 0x0078, 0x5f07, 0x1078, - 0x4c57, 0x6003, 0x0004, 0x6017, 0x0028, 0x1078, 0x4d50, 0x007c, - 0x1078, 0x37ae, 0x1078, 0x4c57, 0x6003, 0x0002, 0x037e, 0x2019, - 0x775c, 0x2304, 0xa084, 0xff00, 0x00c0, 0x5f1a, 0x2019, 0x0028, - 0x0078, 0x5f23, 0x8007, 0xa09a, 0x0004, 0x0048, 0x5f16, 0x8003, - 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x1078, 0x4d50, 0x0078, - 0x5f07, 0x0e7e, 0x1078, 0x6a03, 0x0040, 0x5f36, 0x6010, 0x2070, - 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f, 0x007c, - 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, - 0x7023, 0x8001, 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, - 0xa084, 0x00ff, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12d5, 0x6604, - 0xa6b6, 0x0028, 0x00c0, 0x5f58, 0x1078, 0x6bce, 0x0078, 0x5f8a, - 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x5f61, 0x1078, 0x6be8, 0x0078, - 0x5f8a, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x5f6a, 0x1078, 0x5d65, - 0x0078, 0x5f8a, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x5f73, 0x1078, - 0x5daa, 0x0078, 0x5f8a, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x5f7c, - 0x1078, 0x5d8e, 0x0078, 0x5f8a, 0xa1b6, 0x0015, 0x00c0, 0x5f84, - 0x1079, 0x5f8f, 0x0078, 0x5f8a, 0xa1b6, 0x0016, 0x00c0, 0x5f8b, - 0x1079, 0x60cc, 0x007c, 0x1078, 0x5d09, 0x0078, 0x5f8a, 0x5fb3, - 0x5fb6, 0x5fb3, 0x5ff7, 0x5fb3, 0x6068, 0x5fb3, 0x5fb3, 0x5fb3, - 0x60a4, 0x5fb3, 0x60ba, 0xa1b6, 0x0048, 0x0040, 0x5fa7, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1572, 0x007c, 0x0e7e, - 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x0e7f, - 0x1078, 0x5cd4, 0x007c, 0x0005, 0x0005, 0x007c, 0x0e7e, 0x2071, - 0x7700, 0x7078, 0xa086, 0x0074, 0x00c0, 0x5fe0, 0x1078, 0x7405, - 0x00c0, 0x5fd2, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x5fe4, 0x0d7f, - 0x2001, 0x0006, 0x1078, 0x37ae, 0x1078, 0x22b1, 0x1078, 0x5cd4, - 0x0078, 0x5fe2, 0x2001, 0x000a, 0x1078, 0x37ae, 0x1078, 0x22b1, - 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x4948, 0x0078, 0x5fe2, - 0x1078, 0x6058, 0x0e7f, 0x007c, 0x6800, 0xd084, 0x0040, 0x5ff6, - 0x2001, 0x0000, 0x1078, 0x379a, 0x2069, 0x7751, 0x6804, 0xd0a4, - 0x0040, 0x5ff6, 0x2001, 0x0006, 0x1078, 0x37bc, 0x007c, 0x0d7e, - 0x2011, 0x771e, 0x2204, 0xa086, 0x0074, 0x00c0, 0x6054, 0x1078, - 0x6199, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, - 0x0040, 0x601f, 0xa286, 0x0080, 0x00c0, 0x6048, 0x6813, 0x00ff, - 0x6817, 0xfffc, 0x6010, 0xa005, 0x0040, 0x603e, 0x2068, 0x6807, - 0x0000, 0x6837, 0x0103, 0x6833, 0x0200, 0x0078, 0x603e, 0x0e7e, - 0x0f7e, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x772f, 0x2e04, - 0xa085, 0x0003, 0x2072, 0x2071, 0x7c80, 0x2079, 0x0100, 0x2e04, - 0xa084, 0x00ff, 0x2069, 0x7719, 0x206a, 0x78e6, 0x8e70, 0x2e04, - 0x2069, 0x771a, 0x206a, 0x78ea, 0x0f7f, 0x0e7f, 0x2001, 0x0006, - 0x1078, 0x37ae, 0x1078, 0x22b1, 0x1078, 0x5cd4, 0x0078, 0x6056, - 0x2001, 0x0004, 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, 0x0003, - 0x1078, 0x4948, 0x0078, 0x6056, 0x1078, 0x6058, 0x0d7f, 0x007c, - 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x0040, 0x6063, 0x2001, - 0x0007, 0x1078, 0x37ae, 0x1078, 0x22b1, 0x1078, 0x5cd4, 0x007c, - 0x0e7e, 0x2071, 0x7700, 0x7078, 0xa086, 0x0014, 0x00c0, 0x609e, - 0x7000, 0xa086, 0x0003, 0x00c0, 0x607b, 0x6010, 0xa005, 0x00c0, - 0x607b, 0x1078, 0x2d9e, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3882, - 0x1078, 0x5fe4, 0x0d7f, 0x1078, 0x61a3, 0x00c0, 0x609e, 0x2001, - 0x0006, 0x1078, 0x37ae, 0x0e7e, 0x6010, 0xa005, 0x0040, 0x6097, - 0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x0e7f, - 0x1078, 0x22b1, 0x1078, 0x5cd4, 0x0078, 0x60a2, 0x1078, 0x5f29, - 0x1078, 0x6058, 0x0e7f, 0x007c, 0x2011, 0x771e, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x60b7, 0x2001, 0x0002, 0x1078, 0x37ae, 0x6003, - 0x0001, 0x6007, 0x0001, 0x1078, 0x4948, 0x0078, 0x60b9, 0x1078, - 0x6058, 0x007c, 0x2011, 0x771e, 0x2204, 0xa086, 0x0004, 0x00c0, - 0x60c9, 0x2001, 0x0007, 0x1078, 0x37ae, 0x1078, 0x5cd4, 0x0078, - 0x60cb, 0x1078, 0x6058, 0x007c, 0x5fb3, 0x60d8, 0x5fb3, 0x60fe, - 0x5fb3, 0x614c, 0x5fb3, 0x5fb3, 0x5fb3, 0x6161, 0x5fb3, 0x6174, - 0x0c7e, 0x1078, 0x6187, 0x00c0, 0x60ed, 0x2001, 0x0000, 0x1078, - 0x379a, 0x2001, 0x0002, 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x4948, 0x0078, 0x60fc, 0x2009, 0x7c8f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x60fa, 0x1078, 0x5cd4, - 0x0078, 0x60fc, 0x1078, 0x6058, 0x0c7f, 0x007c, 0x1078, 0x6196, - 0x00c0, 0x6112, 0x2001, 0x0000, 0x1078, 0x379a, 0x2001, 0x0002, - 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4948, - 0x0078, 0x6134, 0x1078, 0x5f29, 0x2009, 0x7c8e, 0x2134, 0xa6b4, - 0x00ff, 0xa686, 0x0005, 0x0040, 0x6135, 0x2009, 0x7c8f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x6132, 0xa686, 0x0009, - 0x0040, 0x6135, 0x2001, 0x0004, 0x1078, 0x37ae, 0x1078, 0x5cd4, - 0x0078, 0x6134, 0x1078, 0x6058, 0x007c, 0x0d7e, 0x6018, 0x2068, - 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6147, 0x8001, 0x6842, - 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6134, 0x1078, - 0x228f, 0x0d7f, 0x0078, 0x6132, 0x1078, 0x6196, 0x00c0, 0x615c, - 0x2001, 0x0004, 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, 0x0003, - 0x1078, 0x4948, 0x0078, 0x6160, 0x1078, 0x5f29, 0x1078, 0x6058, - 0x007c, 0x1078, 0x6196, 0x00c0, 0x6171, 0x2001, 0x0008, 0x1078, - 0x37ae, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x4948, 0x0078, - 0x6173, 0x1078, 0x6058, 0x007c, 0x1078, 0x6196, 0x00c0, 0x6184, - 0x2001, 0x000a, 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, 0x0001, - 0x1078, 0x4948, 0x0078, 0x6186, 0x1078, 0x6058, 0x007c, 0x2009, - 0x7c8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x6195, 0x2009, 0x7c8f, - 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, - 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x3818, - 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7c8c, 0x7004, 0xa086, - 0x0014, 0x00c0, 0x61c6, 0x7008, 0xa086, 0x0800, 0x00c0, 0x61c6, - 0x700c, 0xd0ec, 0x0040, 0x61c4, 0xa084, 0x0f00, 0xa086, 0x0100, - 0x00c0, 0x61c4, 0x7024, 0xd0a4, 0x0040, 0x61c4, 0xd08c, 0x0040, - 0x61c4, 0xa006, 0x0078, 0x61c6, 0xa085, 0x0001, 0x0e7f, 0x007c, - 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, - 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c, 0x2021, 0x7945, - 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7244, 0x7060, 0xa202, - 0x00c8, 0x621d, 0x1078, 0x760f, 0x0040, 0x6215, 0x671c, 0xa786, - 0x0001, 0x0040, 0x6215, 0xa786, 0x0007, 0x0040, 0x6215, 0x2500, - 0xac06, 0x0040, 0x6215, 0x2400, 0xac06, 0x0040, 0x6215, 0x0c7e, - 0x6000, 0xa086, 0x0004, 0x00c0, 0x61ff, 0x1078, 0x1676, 0x6010, - 0x2068, 0x1078, 0x6a03, 0x0040, 0x6212, 0xa786, 0x0003, 0x00c0, - 0x6227, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b4c, - 0x1078, 0x6b5f, 0x1078, 0x6b6c, 0x0c7f, 0xace0, 0x0008, 0x7054, - 0xac02, 0x00c8, 0x621d, 0x0078, 0x61dd, 0x127f, 0x007f, 0x027f, - 0x047f, 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, - 0x0006, 0x00c0, 0x6209, 0x1078, 0x75b3, 0x0078, 0x6212, 0x220c, - 0x2304, 0xa106, 0x00c0, 0x623a, 0x8210, 0x8318, 0x00f0, 0x622f, - 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6242, 0x2001, 0x0001, - 0x0078, 0x6244, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, - 0xa08a, 0x0030, 0x10c8, 0x12d5, 0x1078, 0x6b85, 0x0040, 0x6256, - 0x1078, 0x6b99, 0x0040, 0x625f, 0x0078, 0x6258, 0x1078, 0x22b1, - 0x1078, 0x4c57, 0x1078, 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x1078, - 0x5f29, 0x0078, 0x6258, 0xa182, 0x0040, 0x0079, 0x6267, 0x6277, - 0x6277, 0x6277, 0x6277, 0x6277, 0x6277, 0x6277, 0x6277, 0x6277, - 0x6277, 0x6277, 0x6279, 0x6279, 0x6279, 0x6279, 0x6277, 0x1078, - 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, 0x48fb, 0x127e, 0x2091, - 0x8000, 0x1078, 0x4d50, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, - 0x628e, 0x6004, 0xa082, 0x0040, 0x0079, 0x6304, 0xa186, 0x0027, - 0x00c0, 0x62ab, 0x1078, 0x4c57, 0x1078, 0x228f, 0x0d7e, 0x6110, - 0x2168, 0x1078, 0x6a03, 0x0040, 0x62a5, 0x6837, 0x0103, 0x684b, - 0x0029, 0x1078, 0x3b4c, 0x1078, 0x6b5f, 0x0d7f, 0x1078, 0x5cd4, - 0x1078, 0x4d50, 0x007c, 0xa186, 0x0014, 0x00c0, 0x62b4, 0x6004, - 0xa082, 0x0040, 0x0079, 0x62d4, 0xa186, 0x0047, 0x10c0, 0x12d5, - 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x62d1, 0x127e, 0x2091, - 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x47bc, 0x027f, 0x017f, - 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x62d1, 0x0078, - 0x632b, 0x1078, 0x5d09, 0x007c, 0x62e6, 0x62e4, 0x62e4, 0x62e4, - 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62fd, - 0x62fd, 0x62fd, 0x62fd, 0x62e4, 0x1078, 0x12d5, 0x1078, 0x4c57, - 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a03, 0x0040, 0x62f7, 0x6837, - 0x0103, 0x684b, 0x0006, 0x1078, 0x3b4c, 0x1078, 0x6b5f, 0x0d7f, - 0x1078, 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x1078, 0x4c57, 0x1078, - 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x6316, 0x6314, 0x6314, 0x6314, - 0x6314, 0x6314, 0x6314, 0x6314, 0x6314, 0x6314, 0x6314, 0x6324, - 0x6324, 0x6324, 0x6324, 0x6314, 0x1078, 0x12d5, 0x1078, 0x4c57, - 0x6003, 0x0002, 0x1078, 0x4d50, 0x6010, 0xa088, 0x0013, 0x2104, - 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4c57, 0x6003, 0x000f, - 0x1078, 0x4d50, 0x007c, 0xa182, 0x0040, 0x0079, 0x632f, 0x633f, - 0x633f, 0x633f, 0x633f, 0x633f, 0x6341, 0x63ca, 0x63e2, 0x633f, - 0x633f, 0x633f, 0x633f, 0x633f, 0x633f, 0x633f, 0x633f, 0x1078, - 0x12d5, 0x0e7e, 0x0d7e, 0x2071, 0x7c8c, 0x6110, 0x2168, 0x7614, - 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x63ae, 0xa68c, 0x00ff, 0xa186, - 0x0002, 0x0040, 0x6373, 0xa186, 0x0028, 0x00c0, 0x635d, 0x1078, - 0x6b73, 0x684b, 0x001c, 0x0078, 0x6375, 0xd6dc, 0x0040, 0x6368, - 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6375, - 0xd6d4, 0x0040, 0x6373, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x6375, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, - 0xa01e, 0xd6c4, 0x0040, 0x6388, 0x7328, 0x732c, 0x6b56, 0x037e, - 0x2308, 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x67ec, 0x037f, - 0xd6cc, 0x0040, 0x63be, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, - 0x639c, 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, - 0x1078, 0x67ec, 0x0078, 0x63be, 0x6838, 0xd0fc, 0x0040, 0x63a5, - 0x2009, 0x0020, 0x695a, 0x0078, 0x6391, 0x0f7e, 0x2d78, 0x1078, - 0x6784, 0x0f7f, 0x1078, 0x67d9, 0x0078, 0x63c0, 0x684b, 0x0000, - 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x63be, 0x6810, - 0x6914, 0xa115, 0x0040, 0x63be, 0x1078, 0x6532, 0x1078, 0x3b4c, - 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, - 0x5cd4, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c, 0x7c04, - 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, - 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19a7, 0x1078, 0x4967, 0x1078, - 0x4e10, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, - 0x3e20, 0x2c10, 0x1078, 0x1572, 0x007c, 0xa182, 0x0040, 0x0079, - 0x63f1, 0x6401, 0x6401, 0x6401, 0x6401, 0x6401, 0x6403, 0x649a, - 0x6401, 0x6401, 0x64b0, 0x6512, 0x6401, 0x6401, 0x6401, 0x6401, - 0x6519, 0x1078, 0x12d5, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, - 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, - 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, - 0x0040, 0x6495, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x6424, - 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x6495, - 0x1078, 0x132f, 0x1040, 0x12d5, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, - 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, - 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x645e, - 0xa186, 0x0028, 0x00c0, 0x6448, 0x684b, 0x001c, 0x0078, 0x6460, - 0xd6dc, 0x0040, 0x6453, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x6460, 0xd6d4, 0x0040, 0x645e, 0x684b, 0x0007, - 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6460, 0x684b, 0x0000, - 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, - 0x6475, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x7c98, - 0xad90, 0x0019, 0x1078, 0x67ec, 0x037f, 0xd6cc, 0x0040, 0x6495, - 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6489, 0x2071, 0x7c98, - 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x67ec, 0x0078, - 0x6495, 0x7838, 0xd0fc, 0x0040, 0x6492, 0x2009, 0x0020, 0x695a, - 0x0078, 0x647e, 0x2d78, 0x1078, 0x6784, 0x0d7f, 0x0e7f, 0x0f7f, - 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c, 0x7c04, - 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, - 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19a7, 0x1078, 0x563b, 0x007c, - 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4cff, 0x1078, 0x4e10, 0x6110, - 0x2168, 0x694c, 0xd1e4, 0x0040, 0x6510, 0xd1cc, 0x0040, 0x64eb, - 0x6948, 0x6838, 0xd0fc, 0x0040, 0x64e3, 0x017e, 0x684c, 0x007e, - 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, - 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x64d2, - 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, - 0x1358, 0x0078, 0x650e, 0x017e, 0x1078, 0x1358, 0x0d7f, 0x1078, - 0x67d9, 0x0078, 0x650e, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, - 0xa186, 0x0002, 0x0040, 0x650a, 0xa086, 0x0028, 0x00c0, 0x64fc, - 0x684b, 0x001c, 0x0078, 0x650c, 0xd1dc, 0x0040, 0x6503, 0x684b, - 0x0015, 0x0078, 0x650c, 0xd1d4, 0x0040, 0x650a, 0x684b, 0x0007, - 0x0078, 0x650c, 0x684b, 0x0000, 0x1078, 0x3b4c, 0x1078, 0x5cd4, - 0x0d7f, 0x007c, 0x6003, 0x0002, 0x1078, 0x4cff, 0x1078, 0x4e10, - 0x007c, 0x1078, 0x4cff, 0x1078, 0x228f, 0x0d7e, 0x6110, 0x2168, - 0x1078, 0x6a03, 0x0040, 0x652c, 0x6837, 0x0103, 0x684b, 0x0029, - 0x1078, 0x3b4c, 0x1078, 0x6b5f, 0x0d7f, 0x1078, 0x5cd4, 0x1078, - 0x4e10, 0x007c, 0x684b, 0x0015, 0xd1fc, 0x0040, 0x653e, 0x684b, - 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, - 0x007c, 0xa182, 0x0040, 0x0079, 0x6545, 0x6555, 0x6555, 0x6555, - 0x6555, 0x6555, 0x6557, 0x6555, 0x65fb, 0x6603, 0x6555, 0x6555, - 0x6555, 0x6555, 0x6555, 0x6555, 0x6555, 0x1078, 0x12d5, 0x077e, - 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, - 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x65ed, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0040, 0x6578, 0x7018, 0x7862, 0x701c, 0x785e, - 0xa284, 0x0300, 0x0040, 0x65ea, 0x1078, 0x132f, 0x1040, 0x12d5, - 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, - 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, - 0x00ff, 0xa186, 0x0002, 0x0040, 0x65b3, 0xa186, 0x0028, 0x00c0, - 0x659d, 0x684b, 0x001c, 0x0078, 0x65b5, 0xd6dc, 0x0040, 0x65a8, - 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x65b5, - 0xd6d4, 0x0040, 0x65b3, 0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, - 0x6b5e, 0x0078, 0x65b5, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, - 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x65ca, 0x7328, 0x732c, - 0x6b56, 0x037e, 0x2308, 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, - 0x67ec, 0x037f, 0xd6cc, 0x0040, 0x65ea, 0x7124, 0x695a, 0xa192, - 0x0021, 0x00c8, 0x65de, 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, - 0xad90, 0x001d, 0x1078, 0x67ec, 0x0078, 0x65ea, 0x7838, 0xd0fc, - 0x0040, 0x65e7, 0x2009, 0x0020, 0x695a, 0x0078, 0x65d3, 0x2d78, - 0x1078, 0x6784, 0xd6dc, 0x00c0, 0x65f0, 0xa006, 0x0078, 0x65f4, - 0x2001, 0x0001, 0x7218, 0x731c, 0x1078, 0x15b6, 0x0d7f, 0x0e7f, - 0x0f7f, 0x077f, 0x007c, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, - 0x1078, 0x1572, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, - 0x694c, 0xd1e4, 0x0040, 0x666a, 0xd1cc, 0x0040, 0x663a, 0x6948, - 0x6838, 0xd0fc, 0x0040, 0x6632, 0x017e, 0x684c, 0x007e, 0x6850, - 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, - 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6621, 0x157f, - 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x1358, - 0x0078, 0x6668, 0x017e, 0x1078, 0x1358, 0x0d7f, 0x1078, 0x67d9, - 0x0078, 0x6668, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, - 0x0002, 0x0040, 0x6659, 0xa086, 0x0028, 0x00c0, 0x664b, 0x684b, - 0x001c, 0x0078, 0x6666, 0xd1dc, 0x0040, 0x6652, 0x684b, 0x0015, - 0x0078, 0x6666, 0xd1d4, 0x0040, 0x6659, 0x684b, 0x0007, 0x0078, - 0x6666, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0040, 0x6666, 0x6810, - 0x6914, 0xa115, 0x0040, 0x6666, 0x1078, 0x6532, 0x1078, 0x3b4c, - 0x1078, 0x5cd4, 0x0d7f, 0x007c, 0x1078, 0x4c57, 0x0078, 0x6672, - 0x1078, 0x4cff, 0x1078, 0x6a03, 0x0040, 0x6689, 0x0d7e, 0x6110, - 0x2168, 0x6837, 0x0103, 0x2009, 0x770c, 0x210c, 0xd18c, 0x00c0, - 0x6692, 0xd184, 0x00c0, 0x668e, 0x6108, 0x694a, 0x1078, 0x3b4c, - 0x0d7f, 0x1078, 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x684b, 0x0004, - 0x0078, 0x6686, 0x684b, 0x0004, 0x0078, 0x6686, 0xa182, 0x0040, - 0x0079, 0x669a, 0x66aa, 0x66aa, 0x66aa, 0x66aa, 0x66aa, 0x66ac, - 0x66aa, 0x66af, 0x66aa, 0x66aa, 0x66aa, 0x66aa, 0x66aa, 0x66aa, - 0x66aa, 0x66aa, 0x1078, 0x12d5, 0x1078, 0x5cd4, 0x007c, 0x007e, - 0x027e, 0xa016, 0x1078, 0x1572, 0x027f, 0x007f, 0x007c, 0xa182, - 0x0085, 0x0079, 0x66bb, 0x66c4, 0x66c2, 0x66c2, 0x66c2, 0x66c2, - 0x66c2, 0x66c2, 0x1078, 0x12d5, 0x6003, 0x0001, 0x6106, 0x1078, - 0x48fb, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d50, 0x127f, 0x007c, - 0xa186, 0x0013, 0x00c0, 0x66da, 0x6004, 0xa082, 0x0085, 0x2008, - 0x0079, 0x670e, 0xa186, 0x0027, 0x00c0, 0x66fb, 0x1078, 0x4c57, - 0x1078, 0x228f, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, - 0x66f1, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3b4c, 0x1078, - 0x6b5f, 0x0d7f, 0x1078, 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x1078, - 0x5d09, 0x0078, 0x66f6, 0xa186, 0x0014, 0x00c0, 0x66f7, 0x1078, - 0x4c57, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x66f1, - 0x6837, 0x0103, 0x684b, 0x0006, 0x0078, 0x66ed, 0x6717, 0x6715, - 0x6715, 0x6715, 0x6715, 0x6715, 0x6720, 0x1078, 0x12d5, 0x1078, - 0x4c57, 0x6017, 0x0014, 0x6003, 0x000c, 0x1078, 0x4d50, 0x007c, - 0x1078, 0x4c57, 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, 0x4d50, - 0x007c, 0xa182, 0x008c, 0x00c8, 0x6733, 0xa182, 0x0085, 0x0048, - 0x6733, 0x0079, 0x6736, 0x1078, 0x5d09, 0x007c, 0x673d, 0x673d, - 0x673d, 0x673d, 0x673f, 0x675e, 0x673d, 0x1078, 0x12d5, 0x0d7e, - 0x1078, 0x6b5f, 0x1078, 0x6a03, 0x0040, 0x675a, 0x6010, 0x2068, - 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x6752, 0x684b, 0x0006, - 0x0078, 0x6756, 0x684b, 0x0005, 0x1078, 0x6c12, 0x6847, 0x0000, - 0x1078, 0x3b4c, 0x1078, 0x5cd4, 0x0d7f, 0x007c, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x6a03, 0x0040, 0x6779, 0x6837, 0x0103, 0x6850, - 0xd0b4, 0x0040, 0x676f, 0x684b, 0x0006, 0x0078, 0x6773, 0x684b, - 0x0005, 0x1078, 0x6c12, 0x6847, 0x0000, 0x1078, 0x3b4c, 0x1078, - 0x6b5f, 0x0d7f, 0x1078, 0x5cd4, 0x007c, 0x1078, 0x4c57, 0x1078, - 0x5cd4, 0x1078, 0x4d50, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, - 0x2029, 0x0001, 0xa182, 0x0101, 0x00c8, 0x6790, 0x0078, 0x6792, - 0x2009, 0x0100, 0x2130, 0x2069, 0x7c98, 0x831c, 0x2300, 0xad18, - 0x2009, 0x0020, 0xaf90, 0x001d, 0x1078, 0x67ec, 0xa6b2, 0x0020, - 0x7804, 0xa06d, 0x0040, 0x67a6, 0x1078, 0x1358, 0x1078, 0x132f, - 0x0040, 0x67d0, 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, - 0x7c06, 0xa68a, 0x003d, 0x00c8, 0x67bc, 0x2608, 0xad90, 0x000f, - 0x1078, 0x67ec, 0x0078, 0x67d0, 0xa6b2, 0x003c, 0x2009, 0x003c, - 0x2d78, 0xad90, 0x000f, 0x1078, 0x67ec, 0x0078, 0x67a6, 0x0f7f, - 0x852f, 0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x67d5, - 0x0f7f, 0x852f, 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, - 0x007c, 0x0f7e, 0x8dff, 0x0040, 0x67ea, 0x6804, 0xa07d, 0x0040, - 0x67e8, 0x6807, 0x0000, 0x1078, 0x3b4c, 0x2f68, 0x0078, 0x67dd, - 0x1078, 0x3b4c, 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, - 0x67f2, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, - 0x8210, 0x00f0, 0x67f4, 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, - 0x601c, 0xa084, 0x000f, 0x1079, 0x6807, 0x127f, 0x007c, 0x6816, - 0x680f, 0x6811, 0x682f, 0x680f, 0x6811, 0x6811, 0x6811, 0x1078, - 0x12d5, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x6a03, 0x0040, 0x682c, 0xa00e, 0x2001, 0x0005, - 0x1078, 0x3bdc, 0x1078, 0x6c12, 0x1078, 0x3b4c, 0x1078, 0x5cd4, - 0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x682a, 0x6000, - 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6837, 0x007c, 0x6847, - 0x6864, 0x6849, 0x6875, 0x6860, 0x6847, 0x6811, 0x6816, 0x6816, - 0x6811, 0x6811, 0x6811, 0x6811, 0x6811, 0x6811, 0x6811, 0x1078, - 0x12d5, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x6852, - 0x1078, 0x6c12, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, - 0x0002, 0x1078, 0x48fb, 0x1078, 0x4d50, 0xa085, 0x0001, 0x007c, - 0x1078, 0x1676, 0x0078, 0x6849, 0x0e7e, 0x2071, 0x7936, 0x7024, - 0xac06, 0x00c0, 0x686d, 0x1078, 0x57a8, 0x1078, 0x56df, 0x0e7f, - 0x00c0, 0x6849, 0x1078, 0x6811, 0x007c, 0x037e, 0x0e7e, 0x2071, - 0x7936, 0x703c, 0xac06, 0x00c0, 0x6885, 0x2019, 0x0000, 0x1078, - 0x583a, 0x0e7f, 0x037f, 0x0078, 0x6849, 0x1078, 0x5b16, 0x0e7f, - 0x037f, 0x00c0, 0x6849, 0x1078, 0x6811, 0x007c, 0x0c7e, 0x601c, - 0xa084, 0x000f, 0x1079, 0x6896, 0x0c7f, 0x007c, 0x68a5, 0x6902, - 0x69a7, 0x68a9, 0x68a5, 0x68a5, 0x7293, 0x5cd4, 0x6902, 0x1078, - 0x6b99, 0x00c0, 0x68a5, 0x1078, 0x5f29, 0x007c, 0x6017, 0x0001, - 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x68b1, - 0x007c, 0x68c1, 0x68c3, 0x68e3, 0x68f5, 0x68f5, 0x68c1, 0x68a5, - 0x68a5, 0x68a5, 0x68f5, 0x68f5, 0x68c1, 0x68c1, 0x68c1, 0x68c1, - 0x68ff, 0x1078, 0x12d5, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, - 0x7052, 0x2071, 0x7936, 0x7024, 0xac06, 0x0040, 0x68df, 0x1078, - 0x56df, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, - 0x0014, 0x1078, 0x48fb, 0x1078, 0x4d50, 0x0e7f, 0x007c, 0x6017, - 0x0001, 0x0078, 0x68dd, 0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, - 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, - 0x1078, 0x48fb, 0x1078, 0x4d50, 0x007c, 0x0d7e, 0x6017, 0x0001, - 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, - 0x5cd4, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, - 0x690a, 0x007c, 0x691a, 0x68a6, 0x691c, 0x691a, 0x691c, 0x691a, - 0x691a, 0x691a, 0x689f, 0x689f, 0x691a, 0x691a, 0x691a, 0x691a, - 0x691a, 0x691a, 0x1078, 0x12d5, 0x0d7e, 0x6018, 0x2068, 0x6804, - 0xa084, 0x00ff, 0x0d7f, 0xa08a, 0x000c, 0x10c8, 0x12d5, 0x1079, - 0x692a, 0x007c, 0x6936, 0x6955, 0x6936, 0x6955, 0x6936, 0x6955, - 0x6938, 0x6941, 0x6936, 0x6955, 0x6936, 0x694e, 0x1078, 0x12d5, - 0x6004, 0xa08e, 0x0004, 0x0040, 0x6950, 0xa08e, 0x0002, 0x0040, - 0x6950, 0x6004, 0x1078, 0x6b99, 0x0040, 0x699f, 0xa08e, 0x0021, - 0x0040, 0x69a3, 0xa08e, 0x0022, 0x0040, 0x699f, 0x1078, 0x228f, - 0x1078, 0x5f29, 0x1078, 0x5cd4, 0x007c, 0x0c7e, 0x0d7e, 0x6104, - 0xa186, 0x0016, 0x0040, 0x698f, 0xa186, 0x0002, 0x00c0, 0x697e, - 0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x697e, 0x6840, 0xa084, - 0x00ff, 0xa005, 0x0040, 0x697e, 0x8001, 0x6842, 0x6013, 0x0000, - 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x5c6e, 0x0040, 0x697e, - 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x698f, 0x0d7f, 0x0c7f, - 0x1078, 0x5f29, 0x1078, 0x228f, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x1078, 0x22b1, 0x127f, 0x0e7f, 0x1078, 0x5cd4, 0x007c, 0x2001, - 0x0002, 0x1078, 0x37ae, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, - 0x4948, 0x1078, 0x4d50, 0x0d7f, 0x0c7f, 0x0078, 0x698e, 0x1078, - 0x5f29, 0x0078, 0x6952, 0x1078, 0x5f38, 0x0078, 0x6952, 0x6000, - 0xa08a, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x69af, 0x007c, 0x69bf, - 0x69bf, 0x69bf, 0x69bf, 0x69bf, 0x69bf, 0x69bf, 0x69bf, 0x69bf, - 0x68a5, 0x69bf, 0x68a6, 0x69c1, 0x68a6, 0x69ca, 0x69bf, 0x1078, - 0x12d5, 0x6007, 0x008b, 0x6003, 0x000d, 0x1078, 0x48fb, 0x1078, - 0x4d50, 0x007c, 0x1078, 0x6b5f, 0x1078, 0x6a03, 0x0040, 0x69ec, - 0x1078, 0x228f, 0x0d7e, 0x1078, 0x6a03, 0x0040, 0x69df, 0x6010, - 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3b4c, 0x0d7f, - 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x4948, - 0x1078, 0x4d50, 0x0078, 0x69ee, 0x1078, 0x5cd4, 0x007c, 0xa284, - 0x0007, 0x00c0, 0x6a00, 0xa282, 0x7e00, 0x0048, 0x6a00, 0x2001, - 0x7715, 0x2004, 0xa202, 0x00c8, 0x6a00, 0xa085, 0x0001, 0x007c, - 0xa006, 0x0078, 0x69ff, 0x027e, 0x0e7e, 0x2071, 0x7700, 0x6210, - 0x7058, 0xa202, 0x0048, 0x6a15, 0x705c, 0xa202, 0x00c8, 0x6a15, - 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, 0xa006, 0x0078, 0x6a12, - 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2061, - 0x7e00, 0x2071, 0x7700, 0x7344, 0x7060, 0xa302, 0x00c8, 0x6a3e, - 0x601c, 0xa206, 0x00c0, 0x6a36, 0x1078, 0x6b99, 0x00c0, 0x6a32, - 0x1078, 0x5f29, 0x0c7e, 0x1078, 0x5cd4, 0x0c7f, 0xace0, 0x0008, - 0x7054, 0xac02, 0x00c8, 0x6a3e, 0x0078, 0x6a23, 0x127f, 0x007f, - 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0x127e, - 0x2091, 0x8000, 0xa188, 0x7820, 0x210c, 0x81ff, 0x0040, 0x6a6b, - 0x2061, 0x7e00, 0x2071, 0x7700, 0x7344, 0x7060, 0xa302, 0x00c8, - 0x6a6b, 0x6018, 0xa106, 0x00c0, 0x6a65, 0x1078, 0x228f, 0x017e, - 0x0c7e, 0x1078, 0x5cd4, 0x0c7f, 0x017f, 0xace0, 0x0008, 0x7054, - 0xac02, 0x0048, 0x6a59, 0x127f, 0x017f, 0x0c7f, 0x0e7f, 0x007c, - 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5c6e, - 0x057f, 0x0040, 0x6a89, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, - 0x004b, 0x1078, 0x5cfb, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x6a85, 0x0c7e, 0x057e, 0x127e, 0x2091, - 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5c6e, 0x057f, 0x0040, 0x6ab3, - 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, - 0x39f0, 0x0c7f, 0x1078, 0x4a38, 0x1078, 0x497b, 0x2c08, 0x1078, - 0x7431, 0x2009, 0x004c, 0x1078, 0x5cfb, 0xa085, 0x0001, 0x127f, - 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6aaf, 0x0c7e, 0x057e, - 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5c6e, 0x057f, - 0x0040, 0x6ade, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, - 0x0c7e, 0x2560, 0x1078, 0x39f0, 0x0c7f, 0x1078, 0x4a38, 0x1078, - 0x497b, 0x2c08, 0x1078, 0x7431, 0x2009, 0x004d, 0x1078, 0x5cfb, - 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, - 0x6ada, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, - 0x1078, 0x5c6e, 0x057f, 0x0040, 0x6b09, 0x6612, 0x651a, 0x601f, - 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x39f0, 0x0c7f, - 0x1078, 0x4a38, 0x1078, 0x497b, 0x2c08, 0x1078, 0x7431, 0x2009, - 0x004e, 0x1078, 0x5cfb, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x6b05, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x5c6e, 0x017f, 0x0040, 0x6b25, 0x660a, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x5cfb, - 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b22, - 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5c6e, 0x017f, - 0x0040, 0x6b41, 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, - 0x2009, 0x0021, 0x1078, 0x5cfb, 0xa085, 0x0001, 0x127f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x6b3e, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x5c6e, 0x017f, 0x0040, 0x6b5c, 0x611a, 0x601f, - 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078, 0x5cfb, 0xa085, - 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b59, 0x027e, - 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040, 0x6b69, 0x8211, - 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000, 0x601f, 0x0007, - 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x7752, - 0x2634, 0xd6e4, 0x0040, 0x6b81, 0x6618, 0x2660, 0x6e48, 0x1078, - 0x38fc, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, - 0xa08e, 0x0002, 0x0040, 0x6b96, 0xa08e, 0x0003, 0x0040, 0x6b96, - 0xa08e, 0x0004, 0x0040, 0x6b96, 0xa085, 0x0001, 0x017f, 0x007f, - 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000, 0x0040, 0x6bae, - 0xa08e, 0x001f, 0x0040, 0x6bae, 0xa08e, 0x0028, 0x0040, 0x6bae, - 0xa08e, 0x0029, 0x0040, 0x6bae, 0xa085, 0x0001, 0x017f, 0x007f, - 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x5c6e, - 0x017f, 0x0040, 0x6bcb, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, - 0x1078, 0x228f, 0x2009, 0x0028, 0x1078, 0x5cfb, 0xa085, 0x0001, - 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6bc8, 0xa186, 0x0015, - 0x00c0, 0x6be3, 0x2011, 0x771e, 0x2204, 0xa086, 0x0074, 0x00c0, - 0x6be3, 0x1078, 0x6199, 0x6003, 0x0001, 0x6007, 0x0029, 0x1078, - 0x4948, 0x0078, 0x6be7, 0x1078, 0x5f29, 0x1078, 0x5cd4, 0x007c, - 0xa186, 0x0015, 0x00c0, 0x6c05, 0x2011, 0x771e, 0x2204, 0xa086, - 0x0014, 0x00c0, 0x6c05, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x3882, - 0x0d7f, 0x1078, 0x61a3, 0x00c0, 0x6c05, 0x2001, 0x0006, 0x1078, - 0x37ae, 0x1078, 0x5d7f, 0x0078, 0x6c09, 0x1078, 0x5f29, 0x1078, - 0x5cd4, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0, 0x6c11, 0x1078, - 0x6c12, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c, 0x067e, 0x6000, - 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6c20, 0x067f, 0x007c, - 0x6c30, 0x6e07, 0x6ee8, 0x6c30, 0x6c30, 0x6c30, 0x6c30, 0x6c30, - 0x6c6a, 0x6f56, 0x6c30, 0x6c30, 0x6c30, 0x6c30, 0x6c30, 0x6c30, - 0x1078, 0x12d5, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d5, - 0x1079, 0x6c3c, 0x067f, 0x007c, 0x6c4c, 0x7242, 0x6c4c, 0x6c4c, - 0x6c4c, 0x6c4c, 0x6c4c, 0x6c4c, 0x721d, 0x728c, 0x6c4c, 0x6c4c, - 0x6c4c, 0x6c4c, 0x6c4c, 0x6c4c, 0x1078, 0x12d5, 0x067e, 0x6000, - 0xa0b2, 0x0010, 0x10c8, 0x12d5, 0x1079, 0x6c58, 0x067f, 0x007c, - 0x6c68, 0x708e, 0x7100, 0x7122, 0x716e, 0x6c68, 0x6c68, 0x71c8, - 0x6f62, 0x7205, 0x7209, 0x6c68, 0x6c68, 0x6c68, 0x6c68, 0x6c68, - 0x1078, 0x12d5, 0xa1b2, 0x0030, 0x10c8, 0x12d5, 0x2100, 0x0079, - 0x6c71, 0x6ca1, 0x6d7e, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, - 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, - 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, 0x6ca1, - 0x6ca3, 0x6cd2, 0x6cdd, 0x6d05, 0x6d0b, 0x6d3f, 0x6d77, 0x6ca1, - 0x6ca1, 0x6d86, 0x6ca1, 0x6ca1, 0x6d8d, 0x6d94, 0x6ca1, 0x6ca1, - 0x6ca1, 0x6ca1, 0x6ca1, 0x6db1, 0x6ca1, 0x6ca1, 0x6dbc, 0x6ca1, - 0x6ca1, 0x1078, 0x12d5, 0x1078, 0x3af8, 0x6618, 0x0c7e, 0x2660, - 0x1078, 0x3818, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, - 0xa082, 0x0006, 0x0048, 0x6cc4, 0x1078, 0x736d, 0x00c0, 0x6cff, - 0x1078, 0x730b, 0x00c0, 0x6cc0, 0x6007, 0x0008, 0x0078, 0x6d79, - 0x6007, 0x0009, 0x0078, 0x6d79, 0x1078, 0x7502, 0x0040, 0x6cce, - 0x1078, 0x736d, 0x0040, 0x6cb8, 0x0078, 0x6cff, 0x6013, 0x1900, - 0x0078, 0x6cc0, 0x6106, 0x1078, 0x72cd, 0x6007, 0x0006, 0x0078, - 0x6d79, 0x6007, 0x0007, 0x0078, 0x6d79, 0x0d7e, 0x6618, 0x2668, - 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6cef, - 0xa686, 0x0004, 0x0040, 0x6cef, 0x0d7f, 0x0078, 0x6cff, 0x1078, - 0x73cb, 0x00c0, 0x6cfa, 0x1078, 0x3882, 0x6007, 0x000a, 0x0d7f, - 0x0078, 0x6d79, 0x6007, 0x000b, 0x0d7f, 0x0078, 0x6d79, 0x1078, - 0x228f, 0x6007, 0x0001, 0x0078, 0x6d79, 0x1078, 0x228f, 0x6007, - 0x000c, 0x0078, 0x6d79, 0x1078, 0x3af8, 0x6618, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6d2c, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6cff, 0x1078, 0x73da, - 0x00c0, 0x6d26, 0x6007, 0x000e, 0x0078, 0x6d79, 0x1078, 0x228f, - 0x6007, 0x000f, 0x0078, 0x6d79, 0x1078, 0x7502, 0x0040, 0x6d39, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6d1e, 0x0078, - 0x6cff, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x6d79, 0x1078, - 0x3af8, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, - 0x0006, 0x0048, 0x6d64, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x00c0, 0x6cff, 0x1078, 0x7405, 0x00c0, 0x6d5e, 0x1078, 0x730b, - 0x00c0, 0x6d5e, 0x6007, 0x0010, 0x0078, 0x6d79, 0x1078, 0x228f, - 0x6007, 0x0011, 0x0078, 0x6d79, 0x1078, 0x7502, 0x0040, 0x6d71, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x6d52, 0x0078, - 0x6cff, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x6d79, 0x6007, - 0x0012, 0x6003, 0x0001, 0x1078, 0x4948, 0x007c, 0x6007, 0x0001, - 0x6003, 0x0001, 0x1078, 0x4948, 0x0078, 0x6d7d, 0x6007, 0x0020, - 0x6003, 0x0001, 0x1078, 0x4948, 0x007c, 0x6007, 0x0023, 0x6003, - 0x0001, 0x1078, 0x4948, 0x007c, 0x017e, 0x027e, 0x2011, 0x7c88, - 0x2214, 0x2c08, 0x1078, 0x75ca, 0x00c0, 0x6da5, 0x2160, 0x6007, - 0x0026, 0x6013, 0x1700, 0x0078, 0x6daa, 0x1078, 0x5cd4, 0x2160, - 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x4948, 0x027f, 0x017f, - 0x007c, 0x6106, 0x1078, 0x6dc3, 0x6007, 0x002b, 0x0078, 0x6d79, - 0x6007, 0x002c, 0x0078, 0x6d79, 0x6106, 0x1078, 0x6dc8, 0x6007, - 0x002e, 0x0078, 0x6d79, 0x0d7e, 0x1078, 0x6dee, 0x0d7f, 0x007c, - 0x0d7e, 0x1078, 0x6dfd, 0x00c0, 0x6de7, 0x680c, 0xa08c, 0xff00, - 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4, 0x0040, 0x6ddc, - 0x2009, 0x0001, 0x0078, 0x6de3, 0xd1ec, 0x0040, 0x6de7, 0x2009, - 0x0000, 0xa294, 0x00ff, 0x1078, 0x22d3, 0x0078, 0x6deb, 0xa085, - 0x0001, 0x0078, 0x6dec, 0xa006, 0x0d7f, 0x007c, 0x2069, 0x7c8d, - 0x6800, 0xa082, 0x0010, 0x00c8, 0x6dfb, 0x6013, 0x0000, 0xa085, - 0x0001, 0x0078, 0x6dfc, 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, - 0x7c8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x007c, 0x6004, - 0xa0b2, 0x0030, 0x10c8, 0x12d5, 0xa1b6, 0x0013, 0x00c0, 0x6e13, - 0x2008, 0x0079, 0x6e26, 0xa1b6, 0x0027, 0x0040, 0x6e1b, 0xa1b6, - 0x0014, 0x10c0, 0x12d5, 0x2001, 0x0007, 0x1078, 0x37bc, 0x1078, - 0x4c57, 0x1078, 0x6b6c, 0x1078, 0x4d50, 0x007c, 0x6e56, 0x6e58, - 0x6e56, 0x6e56, 0x6e56, 0x6e58, 0x6e60, 0x6ec3, 0x6e86, 0x6ec3, - 0x6e9a, 0x6ec3, 0x6e60, 0x6ec3, 0x6ebb, 0x6ec3, 0x6ebb, 0x6ec3, - 0x6ec3, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, - 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6e56, 0x6ec3, 0x6e56, - 0x6e56, 0x6ec3, 0x6e56, 0x6ec3, 0x6ec3, 0x6e56, 0x6e56, 0x6e56, - 0x6e56, 0x6ec3, 0x6ec3, 0x6e56, 0x6ec3, 0x6ec3, 0x1078, 0x12d5, - 0x1078, 0x4c57, 0x6003, 0x0002, 0x1078, 0x4d50, 0x0078, 0x6ec9, - 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x6ec3, - 0x2001, 0x0000, 0x1078, 0x379a, 0x2001, 0x0002, 0x1078, 0x37ae, - 0x1078, 0x4c57, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, - 0x1078, 0x4948, 0x1078, 0x4d50, 0x0c7e, 0x6118, 0x2160, 0x2009, - 0x0001, 0x1078, 0x4650, 0x0c7f, 0x0078, 0x6ec9, 0x6618, 0x0d7e, - 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0040, 0x6ec3, 0xa686, 0x0004, 0x0040, 0x6ec3, 0x2001, 0x0004, - 0x0078, 0x6ec1, 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, - 0x6ea3, 0x1078, 0x2d9e, 0x2001, 0x0006, 0x1078, 0x6eca, 0x6618, - 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, - 0x0006, 0x0040, 0x6ec3, 0x2001, 0x0006, 0x0078, 0x6ec1, 0x2001, - 0x0004, 0x0078, 0x6ec1, 0x2001, 0x0006, 0x1078, 0x6eca, 0x0078, - 0x6ec3, 0x1078, 0x37bc, 0x1078, 0x4c57, 0x1078, 0x5cd4, 0x1078, - 0x4d50, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168, 0x6900, 0xd184, - 0x0040, 0x6ee5, 0x6104, 0xa18e, 0x000a, 0x00c0, 0x6edd, 0x699c, - 0xd1a4, 0x00c0, 0x6edd, 0x2001, 0x0007, 0x1078, 0x37ae, 0x2001, - 0x0000, 0x1078, 0x379a, 0x1078, 0x22b1, 0x0d7f, 0x017f, 0x007c, - 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00, 0x8007, 0x0d7f, - 0xa0b2, 0x000c, 0x10c8, 0x12d5, 0xa1b6, 0x0015, 0x00c0, 0x6efc, - 0x1079, 0x6f03, 0x0078, 0x6f02, 0xa1b6, 0x0016, 0x10c0, 0x12d5, - 0x1079, 0x6f3b, 0x007c, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, - 0x5fb3, 0x5fb3, 0x6f0f, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, 0x0f7e, - 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x6f2b, 0x2001, - 0x0000, 0x1078, 0x379a, 0x2001, 0x0002, 0x1078, 0x37ae, 0x601f, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x4948, 0x1078, - 0x4d50, 0x0078, 0x6f3a, 0x2011, 0x7c83, 0x220c, 0x017e, 0x0c7e, - 0x1078, 0x3806, 0x00c0, 0x6f3a, 0x1078, 0x35f9, 0x0c7f, 0x017f, - 0x1078, 0x5cd4, 0x007c, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, - 0x5fb3, 0x5fb3, 0x6f47, 0x5fb3, 0x5fb3, 0x5fb3, 0x5fb3, 0x1078, - 0x6196, 0x00c0, 0x6f53, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, - 0x4948, 0x0078, 0x6f55, 0x1078, 0x5cd4, 0x007c, 0x6004, 0xa08a, - 0x0030, 0x10c8, 0x12d5, 0x1078, 0x4c57, 0x1078, 0x6b6c, 0x1078, - 0x4d50, 0x007c, 0xa182, 0x0040, 0x0079, 0x6f66, 0x6f76, 0x6f76, - 0x6f76, 0x6f76, 0x6f78, 0x6f76, 0x6f76, 0x6f76, 0x6f76, 0x6f76, - 0x6f76, 0x6f76, 0x6f76, 0x6f76, 0x6f76, 0x6f76, 0x1078, 0x12d5, - 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e, 0x6106, 0x2071, - 0x7c80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x6fdc, 0x2009, 0x0000, - 0x0c7e, 0x1078, 0x46e1, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, - 0x0040, 0x7047, 0x1078, 0x47a0, 0x0040, 0x7072, 0xa295, 0x0200, - 0x6a02, 0x0078, 0x6fa1, 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, - 0x478a, 0x1078, 0x132f, 0x1040, 0x12d5, 0x6003, 0x0007, 0x2d00, - 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, - 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0xa084, - 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x3b4c, - 0xa486, 0x2000, 0x00c0, 0x6fca, 0x2019, 0x0017, 0x1078, 0x758f, - 0x0078, 0x7034, 0xa486, 0x0400, 0x00c0, 0x6fd4, 0x2019, 0x0002, - 0x1078, 0x758f, 0x0078, 0x7034, 0xa486, 0x0200, 0x00c0, 0x6fda, - 0x1078, 0x7580, 0x0078, 0x7034, 0x2009, 0x0000, 0x0c7e, 0x1078, - 0x46e1, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x708a, - 0xa284, 0x0300, 0x00c0, 0x7082, 0x6804, 0xa005, 0x0040, 0x7072, - 0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x1314, 0x0040, 0x703b, - 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, - 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x6986, - 0x6846, 0x6853, 0x003d, 0x7044, 0xa084, 0x0003, 0xa086, 0x0002, - 0x00c0, 0x7016, 0x684f, 0x0040, 0x0078, 0x7020, 0xa086, 0x0001, - 0x00c0, 0x701e, 0x684f, 0x0080, 0x0078, 0x7020, 0x684f, 0x0000, - 0x20a9, 0x000a, 0x2001, 0x7c90, 0xad90, 0x0015, 0x200c, 0x810f, - 0x2112, 0x8000, 0x8210, 0x00f0, 0x7026, 0x200c, 0x6982, 0x8000, - 0x200c, 0x697e, 0x1078, 0x3b4c, 0x027f, 0x047f, 0x157f, 0x0f7f, - 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, - 0x0041, 0x1078, 0x48fb, 0x1078, 0x4d50, 0x0078, 0x7034, 0x2069, - 0x7c92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x00c0, 0x7066, - 0x2069, 0x7c80, 0x686c, 0xa084, 0x00ff, 0x017e, 0x6110, 0xa18c, - 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, 0x0001, 0x6007, 0x0043, - 0x1078, 0x48fb, 0x1078, 0x4d50, 0x0078, 0x7034, 0x6013, 0x0200, - 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x48fb, 0x1078, 0x4d50, - 0x0078, 0x7034, 0x6013, 0x0300, 0x0078, 0x7078, 0x6013, 0x0100, - 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x48fb, 0x1078, 0x4d50, - 0x0078, 0x7034, 0x6013, 0x0500, 0x0078, 0x7078, 0x6013, 0x0600, - 0x0078, 0x7047, 0x6013, 0x0200, 0x0078, 0x7047, 0xa186, 0x0013, - 0x00c0, 0x70a0, 0x6004, 0xa08a, 0x0040, 0x1048, 0x12d5, 0xa08a, - 0x0050, 0x10c8, 0x12d5, 0xa082, 0x0040, 0x2008, 0x0079, 0x70d1, - 0xa186, 0x0047, 0x00c0, 0x70a6, 0x0078, 0x7100, 0xa186, 0x0027, - 0x0040, 0x70ae, 0xa186, 0x0014, 0x10c0, 0x12d5, 0x6004, 0xa082, - 0x0040, 0x2008, 0x0079, 0x70b4, 0x70c4, 0x70c6, 0x70c6, 0x70c4, - 0x70c4, 0x70c4, 0x70c4, 0x70c4, 0x70c4, 0x70c4, 0x70c4, 0x70c4, - 0x70c4, 0x70c4, 0x70c4, 0x70c4, 0x1078, 0x12d5, 0x2001, 0x0007, - 0x1078, 0x37bc, 0x1078, 0x4c57, 0x1078, 0x6b6c, 0x1078, 0x4d50, - 0x007c, 0x70e1, 0x70f1, 0x70ea, 0x70fa, 0x70e1, 0x70e1, 0x70e1, - 0x70e1, 0x70e1, 0x70e1, 0x70e1, 0x70e1, 0x70e1, 0x70e1, 0x70e1, - 0x70e1, 0x1078, 0x12d5, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, - 0x0400, 0x200a, 0x1078, 0x4c57, 0x6003, 0x0002, 0x1078, 0x4d50, - 0x007c, 0x1078, 0x4c57, 0x1078, 0x4762, 0x1078, 0x5cd4, 0x1078, - 0x4d50, 0x007c, 0x1078, 0x4c57, 0x2009, 0x0041, 0x0078, 0x71c8, - 0xa182, 0x0040, 0x0079, 0x7104, 0x7114, 0x7116, 0x7114, 0x7114, - 0x7114, 0x7114, 0x7114, 0x7117, 0x7114, 0x7114, 0x7114, 0x7114, - 0x7114, 0x7114, 0x7114, 0x7114, 0x1078, 0x12d5, 0x007c, 0x6003, - 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, - 0x1572, 0x007c, 0xa182, 0x0040, 0x0079, 0x7126, 0x7136, 0x7136, - 0x7136, 0x7136, 0x7136, 0x7136, 0x7136, 0x7136, 0x7136, 0x7138, - 0x715b, 0x7136, 0x7136, 0x7136, 0x7136, 0x715b, 0x1078, 0x12d5, - 0x1078, 0x4cff, 0x1078, 0x4e10, 0x6010, 0x0d7e, 0x2068, 0x684c, - 0xd0fc, 0x0040, 0x714e, 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0040, - 0x7154, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x71c8, 0x6003, 0x0007, - 0x1078, 0x4762, 0x0d7f, 0x007c, 0x1078, 0x4762, 0x1078, 0x5cd4, - 0x0d7f, 0x0078, 0x7153, 0x037e, 0x1078, 0x4cff, 0x1078, 0x4e10, - 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078, 0x75b3, 0x1078, - 0x6b6c, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c, 0xa186, 0x0013, - 0x00c0, 0x717c, 0x6004, 0xa086, 0x0042, 0x10c0, 0x12d5, 0x1078, - 0x4c57, 0x1078, 0x4d50, 0x007c, 0xa186, 0x0027, 0x0040, 0x7184, - 0xa186, 0x0014, 0x00c0, 0x7194, 0x6004, 0xa086, 0x0042, 0x10c0, - 0x12d5, 0x2001, 0x0007, 0x1078, 0x37bc, 0x1078, 0x4c57, 0x1078, - 0x6b6c, 0x1078, 0x4d50, 0x007c, 0xa182, 0x0040, 0x0079, 0x7198, - 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71aa, - 0x71b6, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, 0x71a8, - 0x1078, 0x12d5, 0x037e, 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, - 0x2c10, 0x1078, 0x1572, 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, - 0x2068, 0x684c, 0xd0fc, 0x0040, 0x71c2, 0x2009, 0x0041, 0x0d7f, - 0x0078, 0x71c8, 0x6003, 0x0007, 0x1078, 0x4762, 0x0d7f, 0x007c, - 0xa182, 0x0040, 0x0079, 0x71cc, 0x71dc, 0x71de, 0x71ea, 0x71f6, - 0x71dc, 0x71dc, 0x71dc, 0x71dc, 0x71dc, 0x71dc, 0x71dc, 0x71dc, - 0x71dc, 0x71dc, 0x71dc, 0x71dc, 0x1078, 0x12d5, 0x6003, 0x0001, - 0x6106, 0x1078, 0x48fb, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d50, - 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x48fb, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4d50, 0x127f, 0x007c, 0x6003, 0x0003, - 0x6106, 0x2c10, 0x1078, 0x19a7, 0x127e, 0x2091, 0x8000, 0x1078, - 0x4967, 0x1078, 0x4e10, 0x127f, 0x007c, 0x1078, 0x4c57, 0x0078, - 0x720b, 0x1078, 0x4cff, 0x6110, 0x81ff, 0x0040, 0x7218, 0x0d7e, - 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x75b3, 0x037f, 0x0d7f, - 0x1078, 0x6b6c, 0x1078, 0x4d50, 0x007c, 0xa182, 0x0085, 0x0079, - 0x7221, 0x7228, 0x7228, 0x7228, 0x722a, 0x7228, 0x7228, 0x7228, - 0x1078, 0x12d5, 0x027e, 0x0e7e, 0x2071, 0x7c80, 0x7220, 0x1078, - 0x74cd, 0x0040, 0x7237, 0x6007, 0x0086, 0x0078, 0x7239, 0x6007, - 0x0087, 0x6003, 0x0001, 0x1078, 0x48fb, 0x1078, 0x4d50, 0x0e7f, - 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x7253, 0x6004, 0xa08a, - 0x0085, 0x1048, 0x12d5, 0xa08a, 0x008c, 0x10c8, 0x12d5, 0xa082, - 0x0085, 0x0079, 0x7266, 0xa186, 0x0027, 0x0040, 0x725b, 0xa186, - 0x0014, 0x10c0, 0x12d5, 0x2001, 0x0007, 0x1078, 0x37bc, 0x1078, - 0x4c57, 0x1078, 0x6b6c, 0x1078, 0x4d50, 0x007c, 0x726d, 0x726f, - 0x726f, 0x726d, 0x726d, 0x726d, 0x726d, 0x1078, 0x12d5, 0x1078, - 0x4c57, 0x1078, 0x5cd4, 0x1078, 0x4d50, 0x007c, 0xa182, 0x0085, - 0x1048, 0x12d5, 0xa182, 0x008c, 0x10c8, 0x12d5, 0xa182, 0x0085, - 0x0079, 0x7282, 0x7289, 0x7289, 0x7289, 0x728b, 0x7289, 0x7289, - 0x7289, 0x1078, 0x12d5, 0x007c, 0x1078, 0x4c57, 0x1078, 0x6b6c, - 0x1078, 0x4d50, 0x007c, 0x037e, 0x2019, 0x000b, 0x1078, 0x729c, - 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, 0x2091, - 0x8000, 0x2c40, 0x1078, 0x59e7, 0x00c0, 0x72c9, 0x1078, 0x5a88, - 0x00c0, 0x72c9, 0x6000, 0xa086, 0x0000, 0x0040, 0x72c9, 0x601c, - 0xa086, 0x0007, 0x0040, 0x72c9, 0x0d7e, 0x6000, 0xa086, 0x0004, - 0x00c0, 0x72bc, 0x1078, 0x1676, 0x6010, 0x2068, 0x1078, 0x6a03, - 0x0040, 0x72c4, 0x1078, 0x75b3, 0x0d7f, 0x6013, 0x0000, 0x601f, - 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e, - 0x157e, 0x2079, 0x7c80, 0x7838, 0xa08c, 0x00ff, 0x783c, 0x1078, - 0x2059, 0x00c0, 0x7304, 0x017e, 0x0c7e, 0x1078, 0x3806, 0x00c0, - 0x7304, 0x2011, 0x7c90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x622f, 0x00c0, 0x7304, 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, - 0x0029, 0x1078, 0x5b5c, 0x1078, 0x4a38, 0x1078, 0x497b, 0x017f, - 0x1078, 0x7431, 0x1078, 0x39f0, 0x017f, 0x1078, 0x35f9, 0x6612, - 0x6516, 0xa006, 0x0078, 0x7306, 0x0c7f, 0x017f, 0x157f, 0x037f, - 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x771e, - 0x2104, 0xa086, 0x0074, 0x00c0, 0x7362, 0x2069, 0x7c8e, 0x690c, - 0xa182, 0x0100, 0x0048, 0x7352, 0x6908, 0xa184, 0x8000, 0x0040, - 0x735e, 0xa184, 0x0800, 0x0040, 0x735e, 0x6910, 0xa18a, 0x0001, - 0x0048, 0x7356, 0x6914, 0x2069, 0x7cae, 0x6904, 0x81ff, 0x00c0, - 0x734a, 0x690c, 0xa182, 0x0100, 0x0048, 0x7352, 0x6908, 0x81ff, - 0x00c0, 0x734e, 0x6910, 0xa18a, 0x0001, 0x0048, 0x7356, 0x6918, - 0xa18a, 0x0001, 0x0048, 0x735e, 0x0078, 0x7368, 0x6013, 0x0100, - 0x0078, 0x7364, 0x6013, 0x0300, 0x0078, 0x7364, 0x6013, 0x0500, - 0x0078, 0x7364, 0x6013, 0x0700, 0x0078, 0x7364, 0x6013, 0x0900, - 0x0078, 0x7364, 0x6013, 0x0b00, 0x0078, 0x7364, 0x6013, 0x0f00, - 0x0078, 0x7364, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, 0x7369, - 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, - 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, - 0x0006, 0x0040, 0x7391, 0xa286, 0x0004, 0x0040, 0x7391, 0xa394, - 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x7391, 0xa286, 0x0004, - 0x0040, 0x7391, 0x0c7e, 0x2d60, 0x1078, 0x3818, 0x0c7f, 0x0078, - 0x73c4, 0x2011, 0x7c96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x622f, 0x00c0, 0x73c5, 0x2011, 0x7c9a, 0xad98, 0x0006, 0x20a9, - 0x0004, 0x1078, 0x622f, 0x00c0, 0x73c5, 0x047e, 0x017e, 0x6aa0, - 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x7752, 0x210c, 0xd1a4, - 0x0040, 0x73b9, 0x2009, 0x0029, 0x1078, 0x75f7, 0x6800, 0xc0e5, - 0x6802, 0x2019, 0x0029, 0x1078, 0x4a38, 0x1078, 0x497b, 0x2c08, - 0x1078, 0x7431, 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, - 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x7c8e, 0x6800, 0xa086, - 0x0800, 0x0040, 0x73d7, 0x6013, 0x0000, 0x0078, 0x73d8, 0xa006, - 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, - 0x2079, 0x7c8c, 0x7930, 0x7834, 0x1078, 0x2059, 0x00c0, 0x73fe, - 0x1078, 0x3806, 0x00c0, 0x73fe, 0x2011, 0x7c90, 0xac98, 0x000a, - 0x20a9, 0x0004, 0x1078, 0x622f, 0x00c0, 0x73fe, 0x2011, 0x7c94, - 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x622f, 0x157f, 0x037f, - 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, 0x017e, - 0x027e, 0x037e, 0x157e, 0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, - 0x1078, 0x2059, 0x00c0, 0x742a, 0x1078, 0x3806, 0x00c0, 0x742a, - 0x2011, 0x7c96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x622f, - 0x00c0, 0x742a, 0x2011, 0x7c9a, 0xac98, 0x0006, 0x20a9, 0x0004, - 0x1078, 0x622f, 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, - 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, - 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c, 0x2021, 0x7945, - 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7644, 0x7060, 0x8001, - 0xa602, 0x00c8, 0x7496, 0x2100, 0xac06, 0x0040, 0x748c, 0x1078, - 0x760f, 0x0040, 0x748c, 0x671c, 0xa786, 0x0001, 0x0040, 0x74ab, - 0xa786, 0x0007, 0x0040, 0x748c, 0x2500, 0xac06, 0x0040, 0x748c, - 0x2400, 0xac06, 0x0040, 0x748c, 0x1078, 0x7623, 0x00c0, 0x748c, - 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x7472, 0x017e, 0x1078, - 0x1676, 0x017f, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x7489, - 0xa786, 0x0003, 0x00c0, 0x749f, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x017e, 0x1078, 0x6c0a, 0x1078, 0x3b4c, 0x017f, 0x1078, - 0x6b5f, 0x0d7f, 0x1078, 0x6b6c, 0xace0, 0x0008, 0x2001, 0x7715, - 0x2004, 0xac02, 0x00c8, 0x7496, 0x0078, 0x7443, 0x127f, 0x027f, - 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, - 0x0006, 0x00c0, 0x747c, 0xa386, 0x0005, 0x0040, 0x748c, 0x1078, - 0x75b3, 0x0078, 0x7489, 0x1078, 0x7623, 0x00c0, 0x748c, 0xa180, - 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x748c, 0x6000, 0xa086, - 0x0002, 0x00c0, 0x748c, 0x1078, 0x6b85, 0x0040, 0x74c7, 0x1078, - 0x6b99, 0x00c0, 0x748c, 0x1078, 0x5f29, 0x0078, 0x74c9, 0x1078, - 0x22b1, 0x1078, 0x6b6c, 0x0078, 0x748c, 0x0c7e, 0x0e7e, 0x017e, - 0x2c08, 0x2170, 0x1078, 0x75ca, 0x017f, 0x0040, 0x74dc, 0x601c, - 0xa084, 0x000f, 0x1079, 0x74df, 0x0e7f, 0x0c7f, 0x007c, 0x74e7, - 0x74e7, 0x74e7, 0x74e7, 0x74e7, 0x74e7, 0x74e9, 0x74e7, 0xa006, - 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, - 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078, 0x75f7, 0x017f, - 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x729c, 0x037f, 0xa085, - 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x379a, 0x157e, 0x017e, - 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x7705, 0x2011, 0x7c96, - 0x1078, 0x622f, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, - 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x7e00, 0x2079, 0x0001, 0x8fff, 0x0040, 0x7573, - 0x2071, 0x7700, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x7573, - 0x88ff, 0x0040, 0x7539, 0x2800, 0xac06, 0x00c0, 0x7569, 0x2079, - 0x0000, 0x1078, 0x760f, 0x0040, 0x7569, 0x2400, 0xac06, 0x0040, - 0x7569, 0x671c, 0xa786, 0x0006, 0x00c0, 0x7569, 0xa786, 0x0007, - 0x0040, 0x7569, 0x88ff, 0x00c0, 0x7551, 0x6018, 0xa206, 0x00c0, - 0x7569, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x7559, 0x1078, - 0x1676, 0x6010, 0x2068, 0x1078, 0x6a03, 0x0040, 0x7563, 0x047e, - 0x1078, 0x75b3, 0x047f, 0x0d7f, 0x1078, 0x6b6c, 0x88ff, 0x00c0, - 0x757c, 0xace0, 0x0008, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, - 0x7573, 0x0078, 0x7525, 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, - 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, 0x7574, - 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, - 0x59e7, 0x1078, 0x5a88, 0x1078, 0x7518, 0x087f, 0x007c, 0x027e, - 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, - 0x0000, 0x017e, 0x037e, 0x1078, 0x3806, 0x00c0, 0x75a8, 0x2c10, - 0x2041, 0x0000, 0x1078, 0x59e7, 0x1078, 0x5a88, 0x1078, 0x7518, - 0x037f, 0x017f, 0x8108, 0x00f0, 0x7599, 0x157f, 0x0c7f, 0x087f, - 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x75c7, - 0x6800, 0xa07d, 0x0040, 0x75c4, 0x6803, 0x0000, 0x6b52, 0x1078, - 0x3b4c, 0x2f68, 0x0078, 0x75b8, 0x6b52, 0x1078, 0x3b4c, 0x0f7f, - 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x7e00, 0x2071, - 0x7700, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x75f2, 0x2100, - 0xac06, 0x0040, 0x75e4, 0x6000, 0xa086, 0x0000, 0x0040, 0x75e4, - 0x6008, 0xa206, 0x0040, 0x75ee, 0xace0, 0x0008, 0x2001, 0x7715, - 0x2004, 0xac02, 0x00c8, 0x75f2, 0x0078, 0x75cf, 0xa085, 0x0001, - 0x0078, 0x75f3, 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, - 0x007e, 0x1078, 0x132f, 0x007f, 0x1040, 0x12d5, 0x6837, 0x010d, - 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, - 0x6c46, 0x684f, 0x0000, 0x1078, 0x3b4c, 0x0d7f, 0x007c, 0x6700, - 0xa786, 0x0000, 0x0040, 0x7622, 0xa786, 0x0001, 0x0040, 0x7622, - 0xa786, 0x000a, 0x0040, 0x7622, 0xa786, 0x0009, 0x0040, 0x7622, - 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, - 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, - 0x7740, 0xd5a4, 0x0040, 0x7637, 0x7034, 0x8000, 0x7036, 0xd5b4, - 0x0040, 0x763d, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x7644, - 0x2071, 0x774a, 0x1078, 0x7673, 0x0e7f, 0x007f, 0x127f, 0x007c, - 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7740, 0xd5a4, - 0x0040, 0x7655, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x765b, - 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x7662, 0x2071, 0x774a, - 0x1078, 0x7673, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, - 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7742, 0x1078, 0x7673, 0x0e7f, - 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0x767c, - 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0x7740, - 0x1078, 0x7673, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7744, 0x1078, - 0x7673, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, - 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, - 0x2000, 0x4000, 0x8000, 0xb2be + 0x2011, 0x7383, 0x2204, 0x1078, 0x1fb0, 0x1078, 0x3497, 0x00c0, + 0x6bc3, 0x2011, 0x7396, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, + 0x5a15, 0x00c0, 0x6bc3, 0x2011, 0x739a, 0xac98, 0x0006, 0x20a9, + 0x0004, 0x1078, 0x5a15, 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, + 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, + 0x027e, 0x127e, 0x2091, 0x8000, 0x2029, 0x70bf, 0x252c, 0x2021, + 0x70c5, 0x2424, 0x2061, 0x7500, 0x2071, 0x6f00, 0x7644, 0x7060, + 0x8001, 0xa602, 0x00c8, 0x6c2f, 0x2100, 0xac06, 0x0040, 0x6c25, + 0x1078, 0x6da8, 0x0040, 0x6c25, 0x671c, 0xa786, 0x0001, 0x0040, + 0x6c44, 0xa786, 0x0007, 0x0040, 0x6c25, 0x2500, 0xac06, 0x0040, + 0x6c25, 0x2400, 0xac06, 0x0040, 0x6c25, 0x1078, 0x6dbc, 0x00c0, + 0x6c25, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6c0b, 0x017e, + 0x1078, 0x1627, 0x017f, 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, + 0x6c22, 0xa786, 0x0003, 0x00c0, 0x6c38, 0x6837, 0x0103, 0x6b4a, + 0x6847, 0x0000, 0x017e, 0x1078, 0x639b, 0x1078, 0x36ec, 0x017f, + 0x1078, 0x62f0, 0x0d7f, 0x1078, 0x62fd, 0xace0, 0x0008, 0x2001, + 0x6f15, 0x2004, 0xac02, 0x00c8, 0x6c2f, 0x0078, 0x6bdc, 0x127f, + 0x027f, 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, + 0xa786, 0x0006, 0x00c0, 0x6c15, 0xa386, 0x0005, 0x0040, 0x6c25, + 0x1078, 0x6d4c, 0x0078, 0x6c22, 0x1078, 0x6dbc, 0x00c0, 0x6c25, + 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x6c25, 0x6000, + 0xa086, 0x0002, 0x00c0, 0x6c25, 0x1078, 0x6316, 0x0040, 0x6c60, + 0x1078, 0x632a, 0x00c0, 0x6c25, 0x1078, 0x579c, 0x0078, 0x6c62, + 0x1078, 0x2192, 0x1078, 0x62fd, 0x0078, 0x6c25, 0x0c7e, 0x0e7e, + 0x017e, 0x2c08, 0x2170, 0x1078, 0x6d63, 0x017f, 0x0040, 0x6c75, + 0x601c, 0xa084, 0x0007, 0x1079, 0x6c78, 0x0e7f, 0x0c7f, 0x007c, + 0x6c80, 0x6c80, 0x6c80, 0x6c80, 0x6c80, 0x6c80, 0x6c82, 0x6c80, + 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028, 0x2024, + 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078, 0x6d90, + 0x017f, 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x6a39, 0x037f, + 0xa085, 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x342f, 0x157e, + 0x017e, 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x6f05, 0x2011, + 0x7396, 0x1078, 0x5a15, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, + 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, + 0x2091, 0x8000, 0x2061, 0x7500, 0x2079, 0x0001, 0x8fff, 0x0040, + 0x6d0c, 0x2071, 0x6f00, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, + 0x6d0c, 0x88ff, 0x0040, 0x6cd2, 0x2800, 0xac06, 0x00c0, 0x6d02, + 0x2079, 0x0000, 0x1078, 0x6da8, 0x0040, 0x6d02, 0x2400, 0xac06, + 0x0040, 0x6d02, 0x671c, 0xa786, 0x0006, 0x00c0, 0x6d02, 0xa786, + 0x0007, 0x0040, 0x6d02, 0x88ff, 0x00c0, 0x6cea, 0x6018, 0xa206, + 0x00c0, 0x6d02, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6cf2, + 0x1078, 0x1627, 0x6010, 0x2068, 0x1078, 0x61dc, 0x0040, 0x6cfc, + 0x047e, 0x1078, 0x6d4c, 0x047f, 0x0d7f, 0x1078, 0x62fd, 0x88ff, + 0x00c0, 0x6d15, 0xace0, 0x0008, 0x2001, 0x6f15, 0x2004, 0xac02, + 0x00c8, 0x6d0c, 0x0078, 0x6cbe, 0xa006, 0x127f, 0x027f, 0x067f, + 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, + 0x6d0d, 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002, 0x6218, + 0x1078, 0x52b4, 0x1078, 0x5355, 0x1078, 0x6cb1, 0x087f, 0x007c, + 0x027e, 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007e, + 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x3497, 0x00c0, 0x6d41, + 0x2c10, 0x2041, 0x0000, 0x1078, 0x52b4, 0x1078, 0x5355, 0x1078, + 0x6cb1, 0x037f, 0x017f, 0x8108, 0x00f0, 0x6d32, 0x157f, 0x0c7f, + 0x087f, 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, + 0x6d60, 0x6800, 0xa07d, 0x0040, 0x6d5d, 0x6803, 0x0000, 0x6b52, + 0x1078, 0x36ec, 0x2f68, 0x0078, 0x6d51, 0x6b52, 0x1078, 0x36ec, + 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x7500, + 0x2071, 0x6f00, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x6d8b, + 0x2100, 0xac06, 0x0040, 0x6d7d, 0x6000, 0xa086, 0x0000, 0x0040, + 0x6d7d, 0x6008, 0xa206, 0x0040, 0x6d87, 0xace0, 0x0008, 0x2001, + 0x6f15, 0x2004, 0xac02, 0x00c8, 0x6d8b, 0x0078, 0x6d68, 0xa085, + 0x0001, 0x0078, 0x6d8c, 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, + 0x0d7e, 0x007e, 0x1078, 0x12e0, 0x007f, 0x1040, 0x1286, 0x6837, + 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x685e, + 0x6956, 0x6c46, 0x684f, 0x0000, 0x1078, 0x36ec, 0x0d7f, 0x007c, + 0x6700, 0xa786, 0x0000, 0x0040, 0x6dbb, 0xa786, 0x0001, 0x0040, + 0x6dbb, 0xa786, 0x000a, 0x0040, 0x6dbb, 0xa786, 0x0009, 0x0040, + 0x6dbb, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x70a0, + 0xa206, 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, + 0x2071, 0x6f40, 0xd5a4, 0x0040, 0x6dd0, 0x7034, 0x8000, 0x7036, + 0xd5b4, 0x0040, 0x6dd6, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, + 0x6ddd, 0x2071, 0x6f4a, 0x1078, 0x6e0c, 0x0e7f, 0x007f, 0x127f, + 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6f40, + 0xd5a4, 0x0040, 0x6dee, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, + 0x6df4, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x6dfb, 0x2071, + 0x6f4a, 0x1078, 0x6e0c, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, + 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x6f42, 0x1078, 0x6e0c, + 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, + 0x6e15, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, + 0x6f40, 0x1078, 0x6e0c, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x6f44, + 0x1078, 0x6e0c, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004, 0x0008, + 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, + 0x1000, 0x2000, 0x4000, 0x8000, 0x40d5 }; -#define ISP2100_CODE_LENGTH 0x669c +#define ISP2100_CODE_LENGTH 0x5e35 #endif diff --git a/sys/dev/isp/asm_sbus.h b/sys/dev/isp/asm_sbus.h index b5df5f5d2403d..d81f3b9e4d849 100644 --- a/sys/dev/isp/asm_sbus.h +++ b/sys/dev/isp/asm_sbus.h @@ -1,14 +1,45 @@ -/* $Id: $ */ -/* release_12_28_98_A */ +/* $Id: asm_sbus.h,v 1.2 1998/04/14 17:43:24 mjacob Exp $ */ /* * SBus Qlogic Host Adapter Firmware Tables - * Copyright (c) 1996, 1997, 1998 by Qlogic Corporation * + *--------------------------------------- + * Copyright (c) 1997, 1998 by Matthew Jacob + * NASA/Ames Research Center + * 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 immediately at the beginning of the file, without modification, + * 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. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* * Version 1.24 Initiator Firmware (Aug 8, 1996) + * + * [from Qlogic] */ #define ISP_CODE_ORG 0x1000 -#if 0 #define ISP_CODE_VERSION 1*1024+24 static const u_int16_t ISP_RISC_CODE[] = { 0x0078, 0x1030, 0x0000, 0x231f, 0x0000, 0x12ff, 0x2043, 0x4f50, @@ -1137,1169 +1168,3 @@ static const u_int16_t ISP_RISC_CODE[] = { 0x331b, 0x2019, 0x2626, 0x7b22, 0x7b26, 0x007c, 0xae5b }; #define ISP_CODE_LENGTH 0x231f -#endif -#if 1 -/* - * Version 1.31.00 ISP1000 Initiator RISC firmware - */ -#define ISP_CODE_VERSION 1*1024+31 -static const u_int16_t ISP_RISC_CODE[] = { - 0x0078, 0x1030, 0xa5e3, 0x241a, 0x0001, 0x12ff, 0x2043, 0x4f50, - 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, - 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, - 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, - 0x5350, 0x3130, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, - 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3331, 0x2020, - 0x2071, 0x0010, 0x70c3, 0x0004, 0x20c9, 0x3fff, 0x2089, 0x10ca, - 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0001, - 0x3f00, 0x70d6, 0x2031, 0x0030, 0x2079, 0x3500, 0x7863, 0x0000, - 0x2fa0, 0x2009, 0x012b, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, - 0x8109, 0x00c0, 0x104d, 0x789b, 0x0101, 0x780b, 0x0002, 0x780f, - 0x0002, 0x784f, 0x0bb8, 0x2069, 0x3540, 0x00a8, 0x106c, 0x681b, - 0x003c, 0x2009, 0x1313, 0xa18c, 0xff00, 0x3700, 0xa084, 0x00ff, - 0xa105, 0x20b8, 0x0078, 0x106e, 0x681b, 0x0028, 0x6807, 0x0007, - 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f, 0x0000, - 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069, 0x3600, - 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, 0x0019, - 0x6803, 0xdd00, 0x6807, 0x001a, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, - 0xa290, 0x0004, 0x8109, 0x00c0, 0x1084, 0x2069, 0x3680, 0x20a9, - 0x0080, 0x6837, 0x0000, 0x680b, 0x0040, 0x6817, 0x0064, 0x681f, - 0x0002, 0xade8, 0x0010, 0x0070, 0x10a7, 0x0078, 0x1099, 0x1078, - 0x1a42, 0x1078, 0x2f3d, 0x1078, 0x168b, 0x1078, 0x33bb, 0x3200, - 0xa085, 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x10be, 0x70c0, - 0xa086, 0x0002, 0x00c0, 0x10be, 0x1078, 0x11be, 0x1078, 0x10ee, - 0x1078, 0x1821, 0x1078, 0x19b2, 0x1078, 0x3280, 0x1078, 0x1787, - 0x0078, 0x10be, 0x10d2, 0x10d4, 0x1b9f, 0x1b9f, 0x2f9b, 0x2f9b, - 0x1b9f, 0x1b9f, 0x0078, 0x10d2, 0x0078, 0x10d4, 0x0078, 0x10d6, - 0x0078, 0x10d8, 0x7008, 0x800c, 0x00c8, 0x10e9, 0x7007, 0x0002, - 0xa08c, 0x000c, 0x00c0, 0x10ea, 0x8004, 0x8004, 0x00c8, 0x10e9, - 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x11c1, 0x0068, 0x1133, - 0x7814, 0xa005, 0x00c0, 0x10f8, 0x0010, 0x1134, 0x0078, 0x1133, - 0x2009, 0x3568, 0x2104, 0xa005, 0x00c0, 0x1133, 0x7814, 0xa086, - 0x0001, 0x00c0, 0x1105, 0x1078, 0x1540, 0x7817, 0x0000, 0x2009, - 0x356f, 0x2104, 0xa065, 0x0040, 0x1121, 0x2009, 0x356a, 0x211c, - 0x8108, 0x2114, 0x8108, 0x2104, 0xa210, 0xa399, 0x0000, 0x2009, - 0x001c, 0x6083, 0x0103, 0x1078, 0x161b, 0x00c0, 0x112d, 0x1078, - 0x1682, 0x2009, 0x356f, 0x200b, 0x0000, 0x2009, 0x3569, 0x2104, - 0x200b, 0x0000, 0xa005, 0x0040, 0x1131, 0x2001, 0x4005, 0x0078, - 0x11c0, 0x0078, 0x11be, 0x007c, 0x2061, 0x0000, 0x6018, 0xa084, - 0x0001, 0x0040, 0x113c, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, - 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, - 0x118c, 0x2038, 0x0079, 0x114c, 0x11be, 0x1209, 0x11d7, 0x1209, - 0x125a, 0x125a, 0x11ce, 0x159a, 0x1265, 0x11ca, 0x11db, 0x11dd, - 0x11df, 0x11e1, 0x159f, 0x11ca, 0x126b, 0x1287, 0x154e, 0x1594, - 0x11e3, 0x1475, 0x1497, 0x14b1, 0x14da, 0x142e, 0x143c, 0x1450, - 0x1464, 0x12f3, 0x11ca, 0x12a3, 0x12aa, 0x12af, 0x12b4, 0x12ba, - 0x12bf, 0x12c4, 0x12c9, 0x12ce, 0x12d2, 0x12e7, 0x11ca, 0x11ca, - 0x11ca, 0x11ca, 0x11ca, 0x12ff, 0x1308, 0x1317, 0x133d, 0x1347, - 0x134e, 0x137a, 0x1389, 0x1398, 0x13aa, 0x1413, 0x11ca, 0x11ca, - 0x11ca, 0x11ca, 0x11ca, 0x1423, 0xa0bc, 0xffa0, 0x00c0, 0x11ca, - 0x2038, 0xa084, 0x001f, 0x0079, 0x1195, 0x11ca, 0x11ca, 0x11ca, - 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, - 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, - 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x11ca, 0x15f7, - 0x1601, 0x1605, 0x1613, 0x11ca, 0x11ca, 0x72ca, 0x71c6, 0x2001, - 0x4006, 0x0078, 0x11c0, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, - 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, - 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x11c1, 0x2099, 0x0041, - 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, 0x11be, 0x70c4, - 0x70c3, 0x0004, 0x007a, 0x0078, 0x11be, 0x0078, 0x11be, 0x0078, - 0x11be, 0x0078, 0x11be, 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, - 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, - 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, - 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061, 0x0472, 0x20b9, - 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091, 0x4080, 0x0078, - 0x0455, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098, 0x2031, - 0x0030, 0x81ff, 0x0040, 0x11be, 0x7007, 0x0004, 0x731a, 0x721e, - 0x2051, 0x0012, 0x2049, 0x1238, 0x2041, 0x11be, 0x7003, 0x0002, - 0xa786, 0x0001, 0x00c0, 0x122a, 0x2049, 0x1246, 0x2041, 0x1252, - 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8, 0x1232, - 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040, 0x1246, - 0x700c, 0xa084, 0x007f, 0x8004, 0x2009, 0x0020, 0xa102, 0x0942, - 0x094a, 0x20a8, 0x26a0, 0x53a6, 0x0078, 0x10da, 0x700c, 0xa084, - 0x007f, 0x0040, 0x1246, 0x80ac, 0x0048, 0x1246, 0x2698, 0x53a5, - 0x0078, 0x10da, 0x700c, 0xa084, 0x007f, 0x80ac, 0x2698, 0x53a5, - 0x0078, 0x11be, 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, - 0x1262, 0x200a, 0x72ca, 0x0078, 0x11bd, 0x70c7, 0x0001, 0x70cb, - 0x001f, 0x0078, 0x11be, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, - 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1281, 0x8001, 0x7872, - 0x7a7a, 0x7b7e, 0x7c76, 0x7898, 0xa084, 0xfffc, 0x789a, 0x0078, - 0x1285, 0x7898, 0xa085, 0x0001, 0x789a, 0x0078, 0x11be, 0x70c4, - 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, - 0x0040, 0x129d, 0x8001, 0x7886, 0x7a8e, 0x7b92, 0x7c8a, 0x7898, - 0xa084, 0xfcff, 0x789a, 0x0078, 0x12a1, 0x7898, 0xa085, 0x0100, - 0x789a, 0x0078, 0x11be, 0x2009, 0x3559, 0x210c, 0x2011, 0x015c, - 0x0078, 0x11bc, 0x2009, 0x3541, 0x210c, 0x0078, 0x11bd, 0x2009, - 0x3542, 0x210c, 0x0078, 0x11bd, 0x2061, 0x3540, 0x610c, 0x6210, - 0x0078, 0x11bc, 0x2009, 0x3545, 0x210c, 0x0078, 0x11bd, 0x2009, - 0x3546, 0x210c, 0x0078, 0x11bd, 0x2009, 0x3547, 0x210c, 0x0078, - 0x11bd, 0x2009, 0x3548, 0x210c, 0x0078, 0x11bd, 0x7908, 0x7a0c, - 0x0078, 0x11bc, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa0e8, 0x3600, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, - 0x12e4, 0x6b08, 0x0078, 0x12e5, 0x6b0c, 0x0078, 0x11bb, 0x77c4, - 0x1078, 0x169c, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, - 0x2708, 0x0078, 0x11bb, 0x77c4, 0x1078, 0x169c, 0x2091, 0x8000, - 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x11bb, 0x71c4, - 0xa182, 0x0010, 0x00c8, 0x11b6, 0x1078, 0x1ac6, 0x0078, 0x11bb, - 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11b6, 0x2011, 0x3541, 0x2204, - 0x007e, 0x2112, 0x1078, 0x1a7f, 0x017f, 0x0078, 0x11bd, 0x71c4, - 0x2011, 0x1335, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x1327, - 0x8210, 0x0070, 0x1325, 0x0078, 0x131c, 0x0078, 0x11b6, 0xa292, - 0x1335, 0x027e, 0x2011, 0x3542, 0x2204, 0x2112, 0x017f, 0x007e, - 0x1078, 0x1a8b, 0x017f, 0x0078, 0x11bd, 0x03e8, 0x00fa, 0x01f4, - 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x3540, 0x610c, - 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x11bc, 0x2061, - 0x3540, 0x6114, 0x70c4, 0x6016, 0x0078, 0x11bd, 0x71c4, 0x2011, - 0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x1367, 0x2011, - 0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x1367, 0x2011, - 0x0006, 0x2019, 0x1313, 0xa186, 0x003c, 0x00c0, 0x11b6, 0x2061, - 0x3540, 0x6018, 0x007e, 0x611a, 0xa39c, 0xff00, 0x3700, 0xa084, - 0x00ff, 0xa305, 0x20b8, 0x1078, 0x1a9c, 0x1078, 0x33bb, 0x017f, - 0x0078, 0x11bd, 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x11b6, 0x2011, - 0x3547, 0x2204, 0x2112, 0x007e, 0x1078, 0x1abe, 0x017f, 0x0078, - 0x11bd, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11b6, 0x2011, 0x3548, - 0x2204, 0x007e, 0x2112, 0x1078, 0x1aad, 0x017f, 0x0078, 0x11bd, - 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x11b5, 0xa284, 0xfffd, - 0x00c0, 0x11b5, 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, - 0x0078, 0x11bc, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa0e8, 0x3600, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e, - 0xa226, 0x0040, 0x13d9, 0x6a02, 0xa484, 0x2000, 0x0040, 0x13c2, - 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x13c8, 0xa39d, 0x0008, - 0xa484, 0x4000, 0x0040, 0x13d9, 0x810f, 0xa284, 0x4000, 0x0040, - 0x13d5, 0x1078, 0x1ae0, 0x0078, 0x13d9, 0x1078, 0x1ad2, 0x0078, - 0x13d9, 0x72cc, 0x82ff, 0x0040, 0x140b, 0x6808, 0xa206, 0x0040, - 0x140b, 0xa2a4, 0x00ff, 0x2061, 0x3540, 0x6118, 0xa186, 0x0028, - 0x0040, 0x13f2, 0xa186, 0x0032, 0x0040, 0x13f8, 0xa186, 0x003c, - 0x0040, 0x13fe, 0xa482, 0x0064, 0x0048, 0x1408, 0x0078, 0x1402, - 0xa482, 0x0050, 0x0048, 0x1408, 0x0078, 0x1402, 0xa482, 0x0043, - 0x0048, 0x1408, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x11b7, - 0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, - 0x71c4, 0x0078, 0x11bb, 0x77c4, 0x1078, 0x169c, 0x2091, 0x8000, - 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, - 0x2708, 0x0078, 0x11bb, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, - 0x00c8, 0x11b6, 0x1078, 0x1aee, 0x0078, 0x11bb, 0x77c4, 0x1078, - 0x169c, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, - 0x8001, 0x2708, 0x0078, 0x11bc, 0x77c4, 0x1078, 0x169c, 0x2091, - 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, - 0x144b, 0x1078, 0x1a23, 0x2091, 0x8001, 0x2708, 0x0078, 0x11bc, - 0x77c4, 0x1078, 0x169c, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, - 0x6a0a, 0x6804, 0xa005, 0x0040, 0x145f, 0x1078, 0x1a23, 0x2091, - 0x8001, 0x2708, 0x0078, 0x11bc, 0x77c4, 0x2041, 0x0001, 0x2049, - 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x16a9, 0x2091, - 0x8001, 0x2708, 0x6a08, 0x0078, 0x11bc, 0x77c4, 0x72c8, 0x73cc, - 0x77c6, 0x72ca, 0x73ce, 0x1078, 0x1722, 0x00c0, 0x1493, 0x6818, - 0xa005, 0x0040, 0x148d, 0x2708, 0x1078, 0x1afe, 0x00c0, 0x148d, - 0x7817, 0xffff, 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, - 0x4005, 0x0078, 0x11c0, 0x2091, 0x8001, 0x0078, 0x11be, 0x77c4, - 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, - 0x8000, 0x1078, 0x16a9, 0x2061, 0x3540, 0x60a3, 0x0003, 0x67b6, - 0x60a7, 0x0000, 0x7817, 0xffff, 0x2091, 0x8001, 0x1078, 0x1a23, - 0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, - 0x8000, 0x2061, 0x3540, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, - 0x7817, 0xffff, 0x1078, 0x1a23, 0x2091, 0x8001, 0x2041, 0x0021, - 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x16a9, - 0x70c8, 0x6836, 0x8738, 0xa784, 0x0007, 0x00c0, 0x14ce, 0x2091, - 0x8001, 0x007c, 0x7898, 0xa084, 0x0003, 0x00c0, 0x14fe, 0x2039, - 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, - 0x169c, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, - 0x8738, 0xa784, 0x0007, 0x00c0, 0x14e7, 0xa7bc, 0xff00, 0x873f, - 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x14e7, 0x2091, 0x8000, - 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, 0x1527, 0x684b, - 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x1514, - 0x0070, 0x1514, 0x0078, 0x150b, 0x684b, 0x0009, 0x20a9, 0x0014, - 0x6848, 0xa084, 0x0001, 0x0040, 0x1521, 0x0070, 0x1521, 0x0078, - 0x1518, 0x20a9, 0x00fa, 0x0070, 0x1527, 0x0078, 0x1523, 0x2079, - 0x3500, 0x7817, 0x0001, 0x2061, 0x3540, 0x60a3, 0x0001, 0x60a7, - 0x0000, 0x60c3, 0x000f, 0x7898, 0xa085, 0x0002, 0x789a, 0x6808, - 0xa084, 0xfffd, 0x680a, 0x681b, 0x0046, 0x2091, 0x8001, 0x007c, - 0x7898, 0xa084, 0xfffd, 0x789a, 0xa084, 0x0001, 0x00c0, 0x154a, - 0x1078, 0x176a, 0x71c4, 0x71c6, 0x794a, 0x007c, 0x74c4, 0x73c8, - 0x72cc, 0x74c6, 0x73ca, 0x72ce, 0x2079, 0x3500, 0x2009, 0x0040, - 0x1078, 0x1679, 0x0040, 0x1590, 0x1078, 0x1649, 0x0040, 0x1564, - 0x1078, 0x1682, 0x0078, 0x1590, 0x6010, 0x2091, 0x8001, 0x7817, - 0xffff, 0x2009, 0x3568, 0x200b, 0x0005, 0x8108, 0x200b, 0x0000, - 0x8108, 0x230a, 0x8108, 0x220a, 0x8108, 0x240a, 0x8108, 0x200a, - 0x8108, 0x200b, 0x0000, 0x8108, 0x2c0a, 0xa02e, 0x2530, 0x0e7e, - 0x1078, 0x2f16, 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, - 0x0000, 0x60af, 0x0000, 0x2091, 0x8001, 0x1078, 0x1a23, 0x007c, - 0x70c3, 0x4005, 0x0078, 0x11c1, 0x71c4, 0x70c7, 0x0000, 0x7906, - 0x0078, 0x11be, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x15a1, 0x2069, - 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, - 0x15a3, 0xa285, 0x0000, 0x00c0, 0x15b1, 0x70c3, 0x4000, 0x0078, - 0x15b3, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x11c1, 0x71c4, 0x72c8, - 0x73cc, 0x2100, 0xa184, 0xfffc, 0x00c0, 0x11ca, 0x2100, 0x0079, - 0x15c1, 0x15d8, 0x15ed, 0x15ef, 0x15f1, 0x70c3, 0x4003, 0x71ce, - 0x72d2, 0x73d6, 0x0078, 0x15d4, 0x70c3, 0x4000, 0x70cf, 0x0000, - 0x70d3, 0x0000, 0x70d7, 0x0000, 0x77c6, 0x71ca, 0x0078, 0x11be, - 0x2031, 0x15f3, 0x2624, 0x8630, 0x2412, 0x2204, 0xa446, 0x00c0, - 0x15c5, 0xa484, 0xffff, 0x00c0, 0x15da, 0x2031, 0x15f3, 0x8210, - 0x8319, 0xa384, 0xffff, 0x00c0, 0x15da, 0x0078, 0x15cc, 0x0078, - 0x15cc, 0x0078, 0x15cc, 0x5555, 0xaaaa, 0xffff, 0x0000, 0x7960, - 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x11b6, 0x7962, 0x0078, - 0x11be, 0x7960, 0x71c6, 0x0078, 0x11be, 0x7954, 0x71c6, 0x71c4, - 0x7956, 0x7958, 0x71ca, 0x71c8, 0x795a, 0x795c, 0x71ce, 0x71cc, - 0x795e, 0x0078, 0x11be, 0x7954, 0x71c6, 0x7958, 0x71ca, 0x795c, - 0x71ce, 0x0078, 0x11be, 0x700c, 0xa084, 0x007f, 0x0040, 0x1627, - 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x1622, 0x7017, - 0x0000, 0x7112, 0x721a, 0x731e, 0x8108, 0x810c, 0x81a9, 0x8c98, - 0x20a1, 0x0030, 0x6080, 0x20a2, 0x53a6, 0x780c, 0xa085, 0x0000, - 0x7002, 0x7007, 0x0001, 0x7108, 0x8104, 0x00c8, 0x163b, 0x7007, - 0x0002, 0xa184, 0x000c, 0x710c, 0xa184, 0x0300, 0x7003, 0x0000, - 0x007c, 0x700c, 0xa084, 0x007f, 0x0040, 0x1655, 0x7007, 0x0004, - 0x7004, 0xa084, 0x0004, 0x00c0, 0x1650, 0x7017, 0x0000, 0x7112, - 0x721a, 0x731e, 0x2099, 0x0030, 0x8108, 0x81ac, 0x780c, 0xa085, - 0x0001, 0x7002, 0x7007, 0x0001, 0x7008, 0x800c, 0x00c8, 0x1664, - 0x7007, 0x0002, 0xa08c, 0x000c, 0x00c0, 0x1676, 0x710c, 0xa184, - 0x0300, 0x00c0, 0x1676, 0x2ca0, 0x53a5, 0xa006, 0x7003, 0x0000, - 0x007c, 0x7850, 0xa065, 0x0040, 0x1681, 0x2c04, 0x7852, 0x2063, - 0x0000, 0x007c, 0x0f7e, 0x2079, 0x3500, 0x7850, 0x2062, 0x2c00, - 0x7852, 0x0f7f, 0x007c, 0x2011, 0x4000, 0x7a52, 0x2019, 0x015c, - 0x8319, 0x0040, 0x1699, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078, - 0x1690, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, - 0x0007, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3680, - 0x007c, 0x1078, 0x169c, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, - 0xa084, 0xffef, 0xa80d, 0x690a, 0x2009, 0x354f, 0x210c, 0x6804, - 0xa005, 0x0040, 0x16c6, 0xa116, 0x00c0, 0x16c6, 0x2060, 0x6000, - 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x16c9, 0x2009, 0x0000, - 0x017e, 0x6804, 0xa065, 0x0040, 0x16d8, 0x6000, 0x6806, 0x1078, - 0x16e9, 0x1078, 0x17d5, 0x6810, 0x8001, 0x6812, 0x00c0, 0x16c9, - 0x017f, 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x16e8, 0x6098, - 0x609b, 0x0000, 0x2008, 0x1078, 0x1682, 0x2100, 0x0078, 0x16dc, - 0x007c, 0x6003, 0x0103, 0x20a9, 0x001c, 0xac80, 0x0004, 0x20a0, - 0x2001, 0x0000, 0x40a4, 0x6828, 0x6016, 0x682c, 0x601e, 0x007c, - 0x0e7e, 0x2071, 0x3540, 0x7040, 0xa08c, 0x0080, 0x00c0, 0x1706, - 0xa088, 0x3580, 0x2d0a, 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, - 0x0e7e, 0x2071, 0x3540, 0x2009, 0x3580, 0x7240, 0x8221, 0x8211, - 0x0048, 0x1720, 0x2104, 0x8108, 0xad06, 0x00c0, 0x170f, 0x8119, - 0x211e, 0x8108, 0x8318, 0x8211, 0x00c8, 0x1718, 0x7442, 0xa006, - 0x0e7f, 0x007c, 0x1078, 0x169c, 0x2091, 0x8000, 0x6804, 0x781e, - 0xa065, 0x0040, 0x1769, 0x0078, 0x1733, 0x2c00, 0x781e, 0x6000, - 0xa065, 0x0040, 0x1769, 0x600c, 0xa306, 0x00c0, 0x172d, 0x6008, - 0xa206, 0x00c0, 0x172d, 0x2c28, 0x2001, 0x354f, 0x2004, 0xac06, - 0x0040, 0x1769, 0x6804, 0xac06, 0x00c0, 0x1750, 0x6000, 0x2060, - 0x6806, 0xa005, 0x00c0, 0x1750, 0x6803, 0x0000, 0x0078, 0x175a, - 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x175a, - 0x2c00, 0x6802, 0x2560, 0x1078, 0x16e9, 0x6017, 0x0005, 0x601f, - 0x0020, 0x1078, 0x17d5, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, - 0xa005, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, - 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x16a9, 0x8738, 0xa784, - 0x0007, 0x00c0, 0x1774, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, - 0xa784, 0x0f00, 0x00c0, 0x1774, 0x2091, 0x8001, 0x007c, 0x2061, - 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1794, 0x78ac, 0x78af, - 0x0000, 0xa005, 0x00c0, 0x1795, 0x007c, 0xa08c, 0xfff0, 0x0040, - 0x179b, 0x1078, 0x1b81, 0x0079, 0x179d, 0x17ad, 0x17af, 0x17b5, - 0x17b9, 0x17ad, 0x17bd, 0x17ad, 0x17ad, 0x17ad, 0x17ad, 0x17c3, - 0x17c7, 0x17ad, 0x17ad, 0x17ad, 0x17ad, 0x1078, 0x1b81, 0x1078, - 0x176a, 0x2001, 0x8001, 0x0078, 0x17cd, 0x2001, 0x8003, 0x0078, - 0x17cd, 0x2001, 0x8004, 0x0078, 0x17cd, 0x1078, 0x176a, 0x2001, - 0x8006, 0x0078, 0x17cd, 0x2001, 0x800c, 0x0078, 0x17cd, 0x1078, - 0x176a, 0x2001, 0x800d, 0x0078, 0x17cd, 0x70c2, 0x2061, 0x0000, - 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x2c04, 0x6082, 0x2c08, - 0x2063, 0x0000, 0x7864, 0x8000, 0x7866, 0x7868, 0xa005, 0x796a, - 0x0040, 0x17e5, 0x2c02, 0x0078, 0x17e6, 0x796e, 0x007c, 0x0c7e, - 0x2061, 0x3500, 0x6883, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6064, - 0x8000, 0x6066, 0x6068, 0xa005, 0x616a, 0x0040, 0x17fa, 0x2d02, - 0x0078, 0x17fb, 0x616e, 0x0c7f, 0x007c, 0x1078, 0x180e, 0x0040, - 0x180d, 0x0c7e, 0x6098, 0xa065, 0x0040, 0x1808, 0x1078, 0x16dc, - 0x0c7f, 0x609b, 0x0000, 0x1078, 0x1682, 0x007c, 0x786c, 0xa065, - 0x0040, 0x1820, 0x2091, 0x8000, 0x7864, 0x8001, 0x7866, 0x2c04, - 0x786e, 0xa005, 0x00c0, 0x181e, 0x786a, 0x8000, 0x2091, 0x8001, - 0x007c, 0x7898, 0xa005, 0x00c0, 0x186f, 0x7974, 0x70d0, 0x0005, - 0x0005, 0x72d0, 0xa206, 0x00c0, 0x1826, 0x2200, 0xa106, 0x00c0, - 0x183d, 0x7804, 0xa005, 0x0040, 0x186f, 0x7807, 0x0000, 0x0068, - 0x186f, 0x2091, 0x4080, 0x0078, 0x186f, 0x1078, 0x1679, 0x0040, - 0x186f, 0x7a7c, 0x7b78, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, - 0x0000, 0x2009, 0x0040, 0x1078, 0x1649, 0x0040, 0x1866, 0x1078, - 0x1682, 0x7880, 0x8000, 0x7882, 0xa086, 0x0002, 0x00c0, 0x186f, - 0x2091, 0x8000, 0x78af, 0x0002, 0x7883, 0x0000, 0x7898, 0xa085, - 0x0003, 0x789a, 0x2091, 0x8001, 0x0078, 0x186f, 0x7883, 0x0000, - 0x1078, 0x199c, 0x6000, 0xa084, 0x0007, 0x0079, 0x1870, 0x007c, - 0x1878, 0x1887, 0x18a7, 0x1878, 0x18b9, 0x1878, 0x1878, 0x1878, - 0x2039, 0x0400, 0x78a8, 0xa705, 0x78aa, 0x6004, 0xa705, 0x6006, - 0x1078, 0x18f7, 0x6018, 0x78a6, 0x1078, 0x1984, 0x007c, 0x78a8, - 0xa084, 0x0100, 0x0040, 0x188e, 0x0078, 0x1878, 0x78ab, 0x0000, - 0x6000, 0x8007, 0xa084, 0x00ff, 0x789e, 0x8001, 0x609b, 0x0000, - 0x0040, 0x18a4, 0x1078, 0x18f7, 0x0040, 0x18a4, 0x78a8, 0xa085, - 0x0100, 0x78aa, 0x0078, 0x18a6, 0x1078, 0x191b, 0x007c, 0x78a8, - 0xa08c, 0x0e00, 0x00c0, 0x18b0, 0xa084, 0x0100, 0x00c0, 0x18b2, - 0x0078, 0x1878, 0x1078, 0x18f7, 0x00c0, 0x18b8, 0x1078, 0x191b, - 0x007c, 0x78a8, 0xa084, 0x0100, 0x0040, 0x18c0, 0x0078, 0x1878, - 0x78ab, 0x0000, 0x6710, 0x20a9, 0x0001, 0x6014, 0xa084, 0x00ff, - 0xa005, 0x0040, 0x18dd, 0xa7bc, 0xff00, 0x20a9, 0x0008, 0xa08e, - 0x0001, 0x0040, 0x18dd, 0x2039, 0x0000, 0x20a9, 0x0080, 0xa08e, - 0x0002, 0x0040, 0x18dd, 0x0078, 0x18f4, 0x1078, 0x169c, 0x2d00, - 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, - 0xffde, 0x680a, 0x2d00, 0xa080, 0x0010, 0x2068, 0x2091, 0x8001, - 0x0070, 0x18f4, 0x0078, 0x18e0, 0x1078, 0x1682, 0x007c, 0x78a0, - 0xa06d, 0x00c0, 0x1902, 0x2c00, 0x78a2, 0x78a6, 0x609b, 0x0000, - 0x0078, 0x190e, 0x2c00, 0x689a, 0x609b, 0x0000, 0x78a2, 0x2d00, - 0x6002, 0x78a4, 0xad06, 0x00c0, 0x190e, 0x6002, 0x789c, 0x8001, - 0x789e, 0x00c0, 0x191a, 0x78a8, 0xa084, 0x0000, 0x78aa, 0x78a4, - 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x6118, 0xa184, 0x0060, - 0x619e, 0x0040, 0x1927, 0x0e7e, 0x1078, 0x2f16, 0x0e7f, 0x6592, - 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000, 0x60af, 0x0000, 0x6710, - 0x1078, 0x169c, 0x2091, 0x8000, 0x6808, 0xa084, 0x0001, 0x0040, - 0x1949, 0x2091, 0x8001, 0x1078, 0x16e9, 0x2091, 0x8000, 0x1078, - 0x17d5, 0x2091, 0x8001, 0x78a3, 0x0000, 0x78a7, 0x0000, 0x0078, - 0x1983, 0x6020, 0xa096, 0x0001, 0x00c0, 0x1950, 0x8000, 0x6022, - 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x195f, 0x0040, - 0x195f, 0x2039, 0x0200, 0x1078, 0x1984, 0x0078, 0x1983, 0x2c08, - 0x2091, 0x8000, 0x6800, 0xa065, 0x0040, 0x1967, 0x6102, 0x6902, - 0x00c0, 0x196b, 0x6906, 0x2160, 0x6003, 0x0000, 0x6810, 0x8000, - 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, 0x197d, - 0xa086, 0x0040, 0x680a, 0x1078, 0x16f8, 0x1078, 0x1a23, 0x78a7, - 0x0000, 0x78a3, 0x0000, 0x007c, 0x6004, 0xa705, 0x6006, 0x2091, - 0x8000, 0x1078, 0x17d5, 0x2091, 0x8001, 0x78a4, 0xa065, 0x0040, - 0x1997, 0x6098, 0x78a6, 0x609b, 0x0000, 0x0078, 0x1987, 0x78a3, - 0x0000, 0x78a7, 0x0000, 0x007c, 0x7970, 0x7874, 0x8000, 0xa10a, - 0x00c8, 0x19a3, 0xa006, 0x7876, 0x70d2, 0x7804, 0xa005, 0x0040, - 0x19b1, 0x8001, 0x7806, 0x00c0, 0x19b1, 0x0068, 0x19b1, 0x2091, - 0x4080, 0x007c, 0x0068, 0x19cc, 0x2029, 0x0000, 0x786c, 0xa065, - 0x0040, 0x19c7, 0x1078, 0x19cd, 0x0040, 0x19c7, 0x057e, 0x1078, - 0x19e3, 0x057f, 0x00c0, 0x19c7, 0x8528, 0x0078, 0x19b6, 0x85ff, - 0x0040, 0x19cc, 0x2091, 0x4080, 0x007c, 0x7b84, 0x7988, 0x72d4, - 0x0005, 0x0005, 0x70d4, 0xa206, 0x00c0, 0x19cf, 0x2200, 0xa102, - 0x00c0, 0x19dd, 0x2300, 0xa005, 0x007c, 0x0048, 0x19e1, 0xa302, - 0x007c, 0x8002, 0x007c, 0x1078, 0x1a15, 0x2009, 0x001c, 0x6024, - 0xa005, 0x0040, 0x19ed, 0x2009, 0x0040, 0x1078, 0x161b, 0x0040, - 0x1a06, 0x7894, 0x8000, 0x7896, 0xa086, 0x0002, 0x00c0, 0x1a14, - 0x2091, 0x8000, 0x78af, 0x0003, 0x7897, 0x0000, 0x7898, 0xa085, - 0x0300, 0x789a, 0x2091, 0x8001, 0x0078, 0x1a14, 0x7897, 0x0000, - 0x1078, 0x17fd, 0x7984, 0x7888, 0x8000, 0xa10a, 0x00c8, 0x1a11, - 0xa006, 0x788a, 0x70d6, 0xa006, 0x007c, 0x8107, 0x8004, 0x8004, - 0x7a90, 0x7b8c, 0xa210, 0xa399, 0x0000, 0x007c, 0x2009, 0x3568, - 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3540, - 0x2091, 0x8000, 0x2104, 0xa086, 0x0000, 0x00c0, 0x1a3e, 0x2009, - 0x3512, 0x2104, 0xa005, 0x00c0, 0x1a3e, 0x7830, 0xa084, 0x00c0, - 0x00c0, 0x1a3e, 0x0018, 0x1a3e, 0x781b, 0x0044, 0x2091, 0x8001, - 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071, 0x3540, 0x2079, - 0x0100, 0x2019, 0x2ddb, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, - 0x1a5a, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, - 0x0078, 0x1a4d, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, - 0x78af, 0x0220, 0x0070, 0x1a66, 0x0078, 0x1a5e, 0x7003, 0x0000, - 0x1078, 0x1b65, 0x7004, 0xa084, 0x000f, 0xa085, 0x6280, 0x7806, - 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, - 0x7047, 0x357f, 0x7043, 0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, - 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, - 0x1078, 0x1b65, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, - 0x0070, 0x1a94, 0x0078, 0x1a8f, 0xa18c, 0x0e00, 0x2204, 0xa084, - 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, - 0x8213, 0x0070, 0x1aa5, 0x0078, 0x1aa0, 0xa294, 0x00e0, 0x2104, - 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, - 0x000c, 0x810b, 0x0070, 0x1ab6, 0x0078, 0x1ab1, 0xa18c, 0xf000, - 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, - 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, - 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, - 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, - 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, - 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, - 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, - 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, - 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, - 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x1b43, 0x2061, 0x3f80, - 0x1078, 0x1b4b, 0x0040, 0x1b31, 0x20a9, 0x0000, 0x2061, 0x3e80, - 0x0c7e, 0x1078, 0x1b4b, 0x0040, 0x1b1d, 0x0c7f, 0x8c60, 0x0070, - 0x1b1b, 0x0078, 0x1b10, 0x0078, 0x1b43, 0x007f, 0xa082, 0x3e80, - 0x2071, 0x3540, 0x70ba, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, - 0x60a7, 0x0000, 0x2001, 0x0004, 0x70a2, 0x1078, 0x1a1e, 0x0078, - 0x1b3f, 0x2071, 0x3540, 0x601c, 0xa085, 0x0800, 0x601e, 0x71b6, - 0x60a7, 0x0000, 0x2001, 0x0006, 0x70a2, 0x1078, 0x1a1e, 0x2001, - 0x0000, 0x0078, 0x1b45, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, - 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, 0x1b62, 0x2060, - 0x600c, 0xa306, 0x00c0, 0x1b5f, 0x6008, 0xa206, 0x00c0, 0x1b5f, - 0x6010, 0xa106, 0x00c0, 0x1b5f, 0xa006, 0x0078, 0x1b64, 0x6000, - 0x0078, 0x1b4c, 0xa085, 0x0001, 0x007c, 0x2011, 0x3541, 0x220c, - 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084, 0x0100, 0x0040, - 0x1b80, 0x2019, 0x0112, 0x201b, 0x1000, 0x2021, 0x013a, 0x2122, - 0x2013, 0x0080, 0x2013, 0x008c, 0x2013, 0x0000, 0x201b, 0x0000, - 0x007c, 0x0068, 0x1b81, 0x007e, 0x2071, 0x0000, 0x7018, 0xa084, - 0x0001, 0x00c0, 0x1b86, 0x007f, 0x2e08, 0x2071, 0x0010, 0x70ca, - 0x007f, 0x70c6, 0x70c3, 0x8002, 0x2071, 0x0000, 0x701b, 0x0001, - 0x2091, 0x4080, 0x007f, 0x2070, 0x007f, 0x0078, 0x1b9d, 0x107e, - 0x007e, 0x127e, 0x2091, 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, - 0xa594, 0x003f, 0xa484, 0x4000, 0x0040, 0x1bb4, 0xa784, 0x007c, - 0x00c0, 0x2da7, 0x1078, 0x1b81, 0xa49c, 0x000f, 0xa382, 0x0004, - 0x0050, 0x1bbc, 0x1078, 0x1b81, 0x8507, 0xa084, 0x000f, 0x0079, - 0x1bc1, 0x1fed, 0x209d, 0x20c3, 0x22e9, 0x2576, 0x25be, 0x25f5, - 0x2670, 0x26ca, 0x274f, 0x1be7, 0x1bd1, 0x1e56, 0x1f20, 0x2555, - 0x1bd1, 0x1078, 0x1b81, 0x0018, 0x1ba4, 0x127f, 0x2091, 0x8001, - 0x007f, 0x107f, 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030, - 0xa005, 0x0040, 0x1be5, 0x7033, 0x0000, 0x0018, 0x1ba4, 0x705c, - 0xa005, 0x00c0, 0x1ca5, 0x70a0, 0xa084, 0x0007, 0x0079, 0x1bf0, - 0x1cd1, 0x1bf8, 0x1c06, 0x1c27, 0x1c4d, 0x1c79, 0x1c77, 0x1bf8, - 0x7808, 0xa084, 0xfffd, 0x780a, 0x2009, 0x0046, 0x1078, 0x241b, - 0x00c0, 0x1c04, 0x7003, 0x0004, 0x0078, 0x1bd3, 0x1078, 0x2d69, - 0x00c0, 0x1c25, 0x70b4, 0x8007, 0x789b, 0x007e, 0x78aa, 0x789b, - 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, - 0x0004, 0x2009, 0x00f7, 0x1078, 0x2419, 0x00c0, 0x1c25, 0x7003, - 0x0004, 0x70c3, 0x000f, 0x7033, 0x3570, 0x0078, 0x1bd3, 0x1078, - 0x2d69, 0x00c0, 0x1c4b, 0x71b4, 0x8107, 0x789b, 0x007e, 0x78aa, - 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, - 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009, - 0x00f7, 0x1078, 0x2419, 0x00c0, 0x1c4b, 0x7003, 0x0004, 0x70c3, - 0x000f, 0x7033, 0x3570, 0x0078, 0x1bd3, 0x1078, 0x2d69, 0x00c0, - 0x1c75, 0x71b4, 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, - 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x71b8, - 0x79aa, 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, - 0x0004, 0x2009, 0x00f7, 0x1078, 0x2419, 0x00c0, 0x1c75, 0x7003, - 0x0004, 0x70c3, 0x000f, 0x7033, 0x3570, 0x0078, 0x1bd3, 0x0078, - 0x1c27, 0x1078, 0x2d69, 0x00c0, 0x1bd3, 0x70bc, 0x2068, 0x789b, - 0x0010, 0x6f10, 0x1078, 0x2cac, 0x2c50, 0x6810, 0x007e, 0x8007, - 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2048, - 0x0c7e, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x0c7f, - 0x007f, 0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x6e18, 0x2041, - 0x0001, 0x2001, 0x0004, 0x0078, 0x1dcc, 0x1078, 0x2d69, 0x00c0, - 0x1bd3, 0x789b, 0x0010, 0x705c, 0x2068, 0x6f10, 0x1078, 0x2cac, - 0x2c50, 0x6008, 0xa085, 0x0010, 0x600a, 0x6820, 0xa005, 0x0040, - 0x1cc1, 0xa082, 0x0006, 0x0048, 0x1cbf, 0x0078, 0x1cc1, 0x6823, - 0x0005, 0x6810, 0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x2031, - 0x0020, 0x2041, 0x0001, 0x1078, 0x2dc8, 0x2001, 0x0003, 0x0078, - 0x1dcc, 0x0018, 0x1ba4, 0x7440, 0xa485, 0x0000, 0x0040, 0x1ceb, - 0xa080, 0x3580, 0x2030, 0x7144, 0x8108, 0xa12a, 0x0048, 0x1ce2, - 0x2009, 0x3580, 0x2164, 0x6504, 0x85ff, 0x00c0, 0x1cf8, 0x8421, - 0x00c0, 0x1cdc, 0x7146, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, - 0x1bd3, 0x7640, 0xa6b0, 0x3580, 0x7144, 0x2600, 0x0078, 0x1ce7, - 0x7146, 0x2568, 0x2558, 0x753e, 0x2c50, 0x6034, 0xa085, 0x0000, - 0x00c0, 0x1cf5, 0x6708, 0x7736, 0xa784, 0x013f, 0x0040, 0x1d2a, - 0xa784, 0x0021, 0x00c0, 0x1cf5, 0xa784, 0x0002, 0x0040, 0x1d17, - 0xa784, 0x0004, 0x0040, 0x1cf5, 0xa7bc, 0xfffb, 0x670a, 0xa784, - 0x0008, 0x00c0, 0x1cf5, 0xa784, 0x0010, 0x00c0, 0x1cf5, 0xa784, - 0x0100, 0x0040, 0x1d2a, 0x6018, 0xa005, 0x00c0, 0x1cf5, 0xa7bc, - 0xfeff, 0x670a, 0x681f, 0x0000, 0x6e18, 0xa684, 0x000e, 0x6118, - 0x0040, 0x1d3a, 0x601c, 0xa102, 0x0048, 0x1d3d, 0x0040, 0x1d3d, - 0x0078, 0x1cf1, 0x81ff, 0x00c0, 0x1cf1, 0xa784, 0x0080, 0x00c0, - 0x1d43, 0x700c, 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x6b10, 0x8307, - 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3600, 0x2060, - 0x2048, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x2a60, 0x0018, - 0x1ba4, 0x789b, 0x0010, 0xa046, 0x1078, 0x2d69, 0x00c0, 0x1bd3, - 0x6b10, 0xa39c, 0x0007, 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, - 0x0040, 0x1d6e, 0xa684, 0x0001, 0x0040, 0x1d74, 0xa39c, 0xffbf, - 0xa684, 0x000e, 0x00c0, 0x2901, 0xa684, 0x0010, 0x0040, 0x1d7e, - 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2907, 0x7baa, 0x8840, - 0xa684, 0x000e, 0x00c0, 0x1d89, 0xa7bd, 0x0010, 0x670a, 0x0078, - 0x1dca, 0x714c, 0xa18c, 0x0800, 0x0040, 0x290d, 0x2011, 0x0021, - 0x8004, 0x8004, 0x0048, 0x1da0, 0x2011, 0x0022, 0x8004, 0x0048, - 0x1da0, 0x2011, 0x0020, 0x8004, 0x0048, 0x1da0, 0x0040, 0x1dca, - 0x7aaa, 0x8840, 0x1078, 0x2d82, 0x6a10, 0x610c, 0x8108, 0xa18c, - 0x00ff, 0xa1e0, 0x3e80, 0x2c64, 0x8cff, 0x0040, 0x1dc1, 0x6010, - 0xa206, 0x00c0, 0x1dab, 0x60b4, 0x8001, 0x60b6, 0x00c0, 0x1da6, - 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, - 0x1cd1, 0x1078, 0x2d69, 0x00c0, 0x1bd3, 0x2a60, 0x610e, 0x79aa, - 0x8840, 0x712e, 0x2001, 0x0001, 0x007e, 0x7150, 0xa184, 0x0018, - 0x0040, 0x1de0, 0xa184, 0x0010, 0x0040, 0x1dda, 0x1078, 0x2ad7, - 0x00c0, 0x1de0, 0xa184, 0x0008, 0x0040, 0x1de0, 0x1078, 0x29f1, - 0x007f, 0x7002, 0xa68c, 0x0060, 0x88ff, 0x0040, 0x1de9, 0xa18d, - 0x0004, 0x795a, 0x69b2, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, - 0x0061, 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, - 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, - 0x000a, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6810, 0x8007, - 0x789b, 0x007e, 0x78aa, 0x6d90, 0x7dd6, 0x7dde, 0x6e94, 0x7ed2, - 0x7eda, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1e18, 0x0098, 0x1e20, - 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2d82, 0x0078, 0x1bdb, - 0x7200, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1e2d, 0x781b, - 0x0049, 0x1078, 0x2d82, 0x0078, 0x1e3e, 0x6ab0, 0xa295, 0x2000, - 0x7a5a, 0x781b, 0x0049, 0x1078, 0x2d82, 0x7200, 0x2500, 0xa605, - 0x0040, 0x1e3e, 0xa284, 0x0007, 0x1079, 0x1e4c, 0xad80, 0x0008, - 0x7032, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1e4a, 0x6018, - 0x8000, 0x601a, 0x0078, 0x1bd3, 0x1e54, 0x30f3, 0x30f3, 0x30e2, - 0x30f3, 0x1e54, 0x1e54, 0x1e54, 0x1078, 0x1b81, 0x7808, 0xa084, - 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3500, 0x7898, 0x0f7f, 0xa084, - 0x0001, 0x0040, 0x1e7c, 0x70a0, 0xa086, 0x0001, 0x00c0, 0x1e6b, - 0x70a2, 0x0078, 0x1f04, 0x70a0, 0xa086, 0x0005, 0x00c0, 0x1e7a, - 0x70bc, 0x2068, 0x6817, 0x0004, 0x6813, 0x0000, 0x681c, 0xa085, - 0x0008, 0x681e, 0x70a3, 0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, - 0xa186, 0x0001, 0x0040, 0x1e9e, 0xa186, 0x0007, 0x00c0, 0x1e8e, - 0x2009, 0x352b, 0x200b, 0x0005, 0x0078, 0x1e9e, 0x2009, 0x3513, - 0x2104, 0x2009, 0x3512, 0x200a, 0x2009, 0x352b, 0x200b, 0x0001, - 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x1ea0, 0x70a3, 0x0000, - 0x1078, 0x2eca, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078, 0x2bb1, - 0xa7b8, 0x0100, 0x0070, 0x1eae, 0x0078, 0x1ea6, 0x7000, 0x2020, - 0x0079, 0x1eb2, 0x1ee0, 0x1ec9, 0x1ec9, 0x1ebc, 0x1ee0, 0x1ee0, - 0x1eba, 0x1eba, 0x1078, 0x1b81, 0x2021, 0x3557, 0x2404, 0xa005, - 0x0040, 0x1ec9, 0xad06, 0x00c0, 0x1ec9, 0x6800, 0x2022, 0x0078, - 0x1ed9, 0x681c, 0xa084, 0x0001, 0x00c0, 0x1ed5, 0x6f10, 0x1078, - 0x2cac, 0x1078, 0x28e4, 0x0078, 0x1ed9, 0x7054, 0x2060, 0x6800, - 0x6002, 0x6a16, 0x681c, 0xa085, 0x0008, 0x681e, 0x1078, 0x17e7, - 0x2021, 0x3f80, 0x1078, 0x1f0a, 0x2021, 0x3557, 0x1078, 0x1f0a, - 0x20a9, 0x0000, 0x2021, 0x3e80, 0x1078, 0x1f0a, 0x8420, 0x0070, - 0x1ef3, 0x0078, 0x1eec, 0x20a9, 0x0080, 0x2061, 0x3680, 0x6018, - 0x6110, 0xa102, 0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, - 0x1f03, 0x0078, 0x1ef7, 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, - 0x0078, 0x1bd3, 0x047e, 0x2404, 0xa005, 0x0040, 0x1f1c, 0x2068, - 0x6800, 0x007e, 0x6a16, 0x681c, 0xa085, 0x0008, 0x681e, 0x1078, - 0x17e7, 0x007f, 0x0078, 0x1f0c, 0x047f, 0x2023, 0x0000, 0x007c, - 0xa282, 0x0003, 0x0050, 0x1f26, 0x1078, 0x1b81, 0x2300, 0x0079, - 0x1f29, 0x1f2c, 0x1f9f, 0x1fad, 0xa282, 0x0002, 0x0040, 0x1f32, - 0x1078, 0x1b81, 0x70a0, 0x70a3, 0x0000, 0x70c3, 0x0000, 0x0079, - 0x1f39, 0x1f41, 0x1f41, 0x1f43, 0x1f77, 0x2913, 0x1f41, 0x1f77, - 0x1f41, 0x1078, 0x1b81, 0x77b4, 0x1078, 0x2bb1, 0x77b4, 0xa7bc, - 0x0f00, 0x1078, 0x2cac, 0x6018, 0xa005, 0x0040, 0x1f6e, 0x2021, - 0x3f80, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x1fc8, 0x0040, - 0x1f6e, 0x157e, 0x20a9, 0x0000, 0x2021, 0x3e80, 0x047e, 0x2009, - 0x0004, 0x2011, 0x0010, 0x1078, 0x1fc8, 0x047f, 0x0040, 0x1f6d, - 0x8420, 0x0070, 0x1f6d, 0x0078, 0x1f5e, 0x157f, 0x8738, 0xa784, - 0x0007, 0x00c0, 0x1f49, 0x0078, 0x1bdb, 0x0078, 0x1bdb, 0x77b4, - 0x1078, 0x2cac, 0x6018, 0xa005, 0x0040, 0x1f9d, 0x2021, 0x3f80, - 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x1fc8, 0x0040, 0x1f9d, - 0x157e, 0x20a9, 0x0000, 0x2021, 0x3e80, 0x047e, 0x2009, 0x0005, - 0x2011, 0x0020, 0x1078, 0x1fc8, 0x047f, 0x0040, 0x1f9c, 0x8420, - 0x0070, 0x1f9c, 0x0078, 0x1f8d, 0x157f, 0x0078, 0x1bdb, 0x2200, - 0x0079, 0x1fa2, 0x1fa5, 0x1fa7, 0x1fa7, 0x1078, 0x1b81, 0x70a3, - 0x0000, 0x70a7, 0x0001, 0x0078, 0x1bd3, 0x2200, 0x0079, 0x1fb0, - 0x1fb5, 0x1fa7, 0x1fb3, 0x1078, 0x1b81, 0x1078, 0x2428, 0x7000, - 0xa086, 0x0001, 0x00c0, 0x28ba, 0x1078, 0x28fa, 0x6008, 0xa084, - 0xffef, 0x600a, 0x1078, 0x28ad, 0x0040, 0x28ba, 0x0078, 0x1cd1, - 0x2404, 0xa005, 0x0040, 0x1fe9, 0x2068, 0x2d04, 0x007e, 0x6810, - 0xa706, 0x0040, 0x1fd7, 0x2d20, 0x007f, 0x0078, 0x1fc9, 0x007f, - 0x2022, 0x6916, 0x681c, 0xa205, 0x681e, 0x1078, 0x17e7, 0x6010, - 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x28fa, - 0x007c, 0xa085, 0x0001, 0x0078, 0x1fe8, 0x2300, 0x0079, 0x1ff0, - 0x1ff5, 0x1ff3, 0x2038, 0x1078, 0x1b81, 0x78e4, 0xa005, 0x00d0, - 0x2018, 0x0018, 0x2018, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2004, - 0x781b, 0x0049, 0x0078, 0x1bd3, 0x78ec, 0xa084, 0x0003, 0x0040, - 0x2000, 0x2100, 0xa084, 0x0007, 0x0079, 0x200e, 0x2026, 0x202c, - 0x2020, 0x2016, 0x2d63, 0x2d63, 0x2016, 0x2032, 0x1078, 0x1b81, - 0x7000, 0xa005, 0x0040, 0x1bdb, 0x2001, 0x0003, 0x0078, 0x22fd, - 0x1078, 0x2b94, 0x781b, 0x0055, 0x0078, 0x1bd3, 0x1078, 0x2b94, - 0x781b, 0x00dc, 0x0078, 0x1bd3, 0x1078, 0x2b94, 0x781b, 0x00e3, - 0x0078, 0x1bd3, 0x1078, 0x2b94, 0x781b, 0x009d, 0x0078, 0x1bd3, - 0xa584, 0x000f, 0x00c0, 0x2062, 0x1078, 0x2428, 0x7000, 0x0079, - 0x2041, 0x2049, 0x2056, 0x2049, 0x28ba, 0x204b, 0x28ba, 0x2049, - 0x2049, 0x1078, 0x1b81, 0x71a0, 0x70a3, 0x0000, 0xa186, 0x0004, - 0x00c0, 0x2054, 0x0078, 0x2913, 0x0078, 0x28ba, 0x1078, 0x28fa, - 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x28ad, 0x0040, 0x28ba, - 0x0078, 0x1cd1, 0x78e4, 0xa005, 0x00d0, 0x2018, 0x0018, 0x2018, - 0x2008, 0xa084, 0x0030, 0x00c0, 0x2071, 0x781b, 0x0049, 0x0078, - 0x1bd3, 0x78ec, 0xa084, 0x0003, 0x0040, 0x206d, 0x2100, 0xa184, - 0x0007, 0x0079, 0x207b, 0x208b, 0x2091, 0x2085, 0x2083, 0x2d63, - 0x2d63, 0x2083, 0x2d5b, 0x1078, 0x1b81, 0x1078, 0x2b9c, 0x781b, - 0x0055, 0x0078, 0x1bd3, 0x1078, 0x2b9c, 0x781b, 0x00dc, 0x0078, - 0x1bd3, 0x1078, 0x2b9c, 0x781b, 0x00e3, 0x0078, 0x1bd3, 0x1078, - 0x2b9c, 0x781b, 0x009d, 0x0078, 0x1bd3, 0x2300, 0x0079, 0x20a0, - 0x20a5, 0x20a3, 0x20a7, 0x1078, 0x1b81, 0x0078, 0x2670, 0x6817, - 0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2670, - 0x78ec, 0xa084, 0x0003, 0x0040, 0x2670, 0xa184, 0x0007, 0x0079, - 0x20b9, 0x2026, 0x202c, 0x2020, 0x2d3b, 0x2d63, 0x2d63, 0x20c1, - 0x2d5b, 0x1078, 0x1b81, 0xa282, 0x0005, 0x0050, 0x20c9, 0x1078, - 0x1b81, 0x2300, 0x0079, 0x20cc, 0x20cf, 0x22d1, 0x22dd, 0x2200, - 0x0079, 0x20d2, 0x20d7, 0x20d9, 0x20ec, 0x20d7, 0x22b6, 0x1078, - 0x1b81, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, - 0x0048, 0x2b75, 0xa08a, 0x0004, 0x00c8, 0x2b75, 0x0079, 0x20e8, - 0x2b75, 0x2b75, 0x2b75, 0x2b17, 0x789b, 0x0018, 0x79a8, 0xa184, - 0x0080, 0x0040, 0x2101, 0xa184, 0x0018, 0x0040, 0x20fd, 0x0078, - 0x2b75, 0x7000, 0xa005, 0x00c0, 0x20f7, 0x2011, 0x0003, 0x0078, - 0x275d, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x2b75, 0x0079, - 0x2109, 0x211b, 0x2119, 0x2131, 0x2133, 0x21c5, 0x2b75, 0x2b75, - 0x21c7, 0x2b75, 0x2b75, 0x22b2, 0x22b2, 0x2b75, 0x2b75, 0x2b75, - 0x22b4, 0x1078, 0x1b81, 0xa684, 0x1000, 0x0040, 0x2128, 0x2001, - 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x009a, 0x0078, 0x1bd3, - 0x6814, 0xa084, 0x8000, 0x0040, 0x212f, 0x6817, 0x0003, 0x0078, - 0x2d3b, 0x1078, 0x1b81, 0x691c, 0x691e, 0xa684, 0x1800, 0x00c0, - 0x214d, 0x681c, 0xa084, 0x0001, 0x00c0, 0x2155, 0x6814, 0xa086, - 0x0008, 0x00c0, 0x2145, 0x6817, 0x0000, 0xa684, 0x0400, 0x0040, - 0x21c1, 0x781b, 0x0058, 0x0078, 0x1bd3, 0xa684, 0x1000, 0x0040, - 0x2155, 0x781b, 0x0058, 0x0078, 0x1bd3, 0xa684, 0x0060, 0x0040, - 0x21bd, 0xa684, 0x0800, 0x0040, 0x21bd, 0xa684, 0x8000, 0x00c0, - 0x2163, 0x0078, 0x217d, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb2, 0x789b, - 0x0074, 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2170, 0x8000, - 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, - 0x68ae, 0x6b90, 0x2200, 0xa303, 0x68aa, 0xa684, 0x4000, 0x0040, - 0x2185, 0xa6b4, 0xbfff, 0x7e5a, 0x6eb2, 0x7000, 0xa086, 0x0003, - 0x00c0, 0x2192, 0x1078, 0x2f3d, 0x1078, 0x30e2, 0x781b, 0x0067, - 0x0078, 0x1bd3, 0xa006, 0x1078, 0x3197, 0x6aac, 0x69a8, 0x6c94, - 0x6b90, 0x2200, 0xa105, 0x0040, 0x21a1, 0x2200, 0xa422, 0x2100, - 0xa31b, 0x7cd2, 0x7bd6, 0x2300, 0xa405, 0x00c0, 0x21af, 0xa6b5, - 0x4000, 0x7e5a, 0x6eb2, 0x781b, 0x0067, 0x0078, 0x1bd3, 0x781b, - 0x0067, 0x2200, 0xa115, 0x00c0, 0x21b9, 0x1078, 0x30f3, 0x0078, - 0x1bd3, 0x1078, 0x3120, 0x0078, 0x1bd3, 0x781b, 0x006a, 0x0078, - 0x1bd3, 0x781b, 0x0058, 0x0078, 0x1bd3, 0x1078, 0x1b81, 0x0078, - 0x2224, 0x691c, 0xa184, 0x0100, 0x0040, 0x21df, 0xa18c, 0xfeff, - 0x691e, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, 0xefff, 0x6002, - 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x2213, 0xa184, - 0x0200, 0x0040, 0x2213, 0xa18c, 0xfdff, 0x691e, 0x0c7e, 0x7048, - 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, - 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2213, - 0x1078, 0x2ca8, 0x1078, 0x29f1, 0x88ff, 0x0040, 0x2213, 0x789b, - 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, - 0x0400, 0x00c0, 0x220f, 0x781b, 0x0055, 0x0078, 0x1bd3, 0x781b, - 0x0069, 0x0078, 0x1bd3, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x221c, - 0x781b, 0x0058, 0x0078, 0x1bd3, 0x781b, 0x006a, 0x0078, 0x1bd3, - 0x0078, 0x2b7b, 0x0078, 0x2b7b, 0x2019, 0x0000, 0x7990, 0xa18c, - 0x0007, 0x0040, 0x2222, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, - 0xa286, 0x0001, 0x00c0, 0x2247, 0x2300, 0x7ca8, 0xa400, 0x2018, - 0xa102, 0x0040, 0x223f, 0x0048, 0x223f, 0x0078, 0x2241, 0x0078, - 0x21c9, 0x24a8, 0x7aa8, 0x00f0, 0x2241, 0x0078, 0x222d, 0xa284, - 0x00f0, 0xa086, 0x0020, 0x00c0, 0x22a3, 0x8318, 0x8318, 0x2300, - 0xa102, 0x0040, 0x2257, 0x0048, 0x2257, 0x0078, 0x22a0, 0xa286, - 0x0023, 0x0040, 0x2222, 0x6818, 0xa084, 0xfff1, 0x681a, 0x7e58, - 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, - 0x0010, 0x600a, 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, - 0x0c7f, 0xa184, 0x0010, 0x0040, 0x227b, 0x1078, 0x2ca8, 0x1078, - 0x2ad7, 0x0078, 0x228a, 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, - 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2213, 0x1078, 0x2ca8, - 0x1078, 0x29f1, 0x88ff, 0x0040, 0x2213, 0x789b, 0x0060, 0x2800, - 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x229c, - 0x781b, 0x0055, 0x0078, 0x1bd3, 0x781b, 0x0069, 0x0078, 0x1bd3, - 0x7aa8, 0x0078, 0x222d, 0x8318, 0x2300, 0xa102, 0x0040, 0x22ac, - 0x0048, 0x22ac, 0x0078, 0x222d, 0xa284, 0x0080, 0x00c0, 0x2b81, - 0x0078, 0x2b7b, 0x0078, 0x2b81, 0x0078, 0x2b75, 0x789b, 0x0018, - 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, 0x22c1, 0x1078, - 0x1b81, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, - 0x0004, 0x00c8, 0x2b75, 0x0079, 0x22cd, 0x2b75, 0x2944, 0x2b75, - 0x2a72, 0xa282, 0x0000, 0x00c0, 0x22d7, 0x1078, 0x1b81, 0x1078, - 0x2b94, 0x781b, 0x0069, 0x0078, 0x1bd3, 0xa282, 0x0003, 0x00c0, - 0x22e3, 0x1078, 0x1b81, 0x1078, 0x2ba4, 0x781b, 0x0069, 0x0078, - 0x1bd3, 0xa282, 0x0004, 0x0050, 0x22ef, 0x1078, 0x1b81, 0x2300, - 0x0079, 0x22f2, 0x22f5, 0x23d2, 0x2403, 0xa286, 0x0003, 0x0040, - 0x22fb, 0x1078, 0x1b81, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, - 0x0007, 0x0079, 0x2303, 0x230b, 0x230d, 0x230d, 0x2513, 0x253b, - 0x24dd, 0x230b, 0x230b, 0x1078, 0x1b81, 0xa684, 0x1000, 0x00c0, - 0x2315, 0x1078, 0x2eca, 0x0040, 0x23ac, 0x7868, 0xa08c, 0x00ff, - 0x0040, 0x235d, 0xa186, 0x0008, 0x00c0, 0x232c, 0x1078, 0x28fa, - 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x28ad, 0x0040, 0x235d, - 0x1078, 0x2eca, 0x0078, 0x2344, 0xa186, 0x0028, 0x00c0, 0x235d, - 0x1078, 0x2eca, 0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, - 0x0040, 0x2344, 0x8001, 0x601a, 0xa005, 0x0040, 0x2344, 0x8001, - 0xa005, 0x0040, 0x2344, 0x601e, 0x681c, 0xa084, 0x0001, 0x0040, - 0x1bdb, 0x681c, 0xa084, 0xfffe, 0x681e, 0x7054, 0x0c7e, 0x2060, - 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, - 0x235a, 0x6002, 0x6006, 0x0078, 0x1bdb, 0x017e, 0x1078, 0x2428, - 0x017f, 0xa684, 0xdf00, 0x681a, 0x6827, 0x0000, 0x6f10, 0x81ff, - 0x0040, 0x23ac, 0xa186, 0x0002, 0x00c0, 0x23a4, 0xa684, 0x0800, - 0x00c0, 0x237a, 0xa684, 0x0060, 0x0040, 0x237a, 0x78d8, 0x7adc, - 0x682e, 0x6a2a, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, - 0xa290, 0x3600, 0xa290, 0x0000, 0x221c, 0xa384, 0x0100, 0x00c0, - 0x238b, 0x0078, 0x2391, 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, - 0x8211, 0xa384, 0x0400, 0x0040, 0x239e, 0x689c, 0xa084, 0x0100, - 0x00c0, 0x239e, 0x1078, 0x249c, 0x0078, 0x1bdb, 0x6008, 0xa085, - 0x0002, 0x600a, 0x0078, 0x23ac, 0xa186, 0x0018, 0x0040, 0x23ac, - 0xa186, 0x0014, 0x0040, 0x1bdb, 0x6912, 0x6814, 0xa084, 0x8000, - 0x0040, 0x23b4, 0x7038, 0x6816, 0xa68c, 0xdf00, 0x691a, 0x1078, - 0x28eb, 0x1078, 0x28fa, 0x00c0, 0x23c1, 0x6008, 0xa084, 0xffef, - 0x600a, 0x681c, 0xa084, 0x0001, 0x00c0, 0x23ca, 0x1078, 0x28e4, - 0x0078, 0x23ce, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078, 0x17e7, - 0x0078, 0x1bdb, 0xa282, 0x0004, 0x0048, 0x23d8, 0x1078, 0x1b81, - 0x2200, 0x0079, 0x23db, 0x23df, 0x23e1, 0x23ee, 0x23e1, 0x1078, - 0x1b81, 0x7000, 0xa086, 0x0005, 0x0040, 0x23ea, 0x1078, 0x2b94, - 0x781b, 0x0069, 0x781b, 0x006a, 0x0078, 0x1bd3, 0x7890, 0x8007, - 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, - 0x00ff, 0xa186, 0x0003, 0x0040, 0x23ff, 0x0078, 0x2b75, 0x781b, - 0x006a, 0x0078, 0x1bd3, 0x681c, 0xa085, 0x0004, 0x681e, 0x82ff, - 0x00c0, 0x240e, 0x1078, 0x2b94, 0x0078, 0x2415, 0x8211, 0x0040, - 0x2413, 0x1078, 0x1b81, 0x1078, 0x2ba4, 0x781b, 0x0069, 0x0078, - 0x1bd3, 0x1078, 0x2d82, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2425, - 0x0018, 0x2425, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, - 0xa684, 0x0060, 0x00c0, 0x2432, 0x682f, 0x0000, 0x682b, 0x0000, - 0x0078, 0x249b, 0xa684, 0x0800, 0x00c0, 0x2441, 0x68b0, 0xa084, - 0x4800, 0xa635, 0xa684, 0x0800, 0x00c0, 0x2441, 0x1078, 0x2eca, - 0x007c, 0xa684, 0x0020, 0x0040, 0x246d, 0x78d0, 0x8003, 0x00c8, - 0x244f, 0xa006, 0x1078, 0x3197, 0x78d4, 0x1078, 0x31fc, 0xa684, - 0x4000, 0x0040, 0x2459, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, - 0x243e, 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, - 0x2453, 0x7038, 0xa005, 0x00c0, 0x2467, 0x703b, 0x0007, 0x79d8, - 0x7adc, 0x692e, 0x6a2a, 0x0078, 0x243e, 0xa684, 0x4000, 0x0040, - 0x2477, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078, 0x243e, 0x68b0, - 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2471, 0x7038, - 0xa005, 0x00c0, 0x2485, 0x703b, 0x0007, 0x79d8, 0x7adc, 0x78d0, - 0x80f3, 0x00c8, 0x248c, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, - 0x0000, 0x692e, 0x6a2a, 0x2100, 0xa205, 0x00c0, 0x2499, 0x0078, - 0x243e, 0x1078, 0x3197, 0x007c, 0xa384, 0x0200, 0x0040, 0x24a4, - 0x6008, 0xa085, 0x0002, 0x600a, 0x6817, 0x0006, 0x6a28, 0x692c, - 0x6a3a, 0x693e, 0x682b, 0x0300, 0x682f, 0x0000, 0x6833, 0x2000, - 0x6893, 0x0000, 0x6897, 0x0020, 0x7000, 0x0079, 0x24b7, 0x24bf, - 0x24c1, 0x24ca, 0x24bf, 0x24bf, 0x24bf, 0x24bf, 0x24bf, 0x1078, - 0x1b81, 0x681c, 0xa084, 0x0001, 0x00c0, 0x24ca, 0x1078, 0x28e4, - 0x0078, 0x24d0, 0x7054, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, - 0x2021, 0x3557, 0x2404, 0xa005, 0x0040, 0x24d9, 0x2020, 0x0078, - 0x24d2, 0x2d22, 0x206b, 0x0000, 0x007c, 0x77b4, 0x1078, 0x2bb1, - 0xa7bc, 0x0f00, 0x1078, 0x2cac, 0x6018, 0xa005, 0x0040, 0x250c, - 0x0d7e, 0x2001, 0x3f90, 0x2068, 0x0d7f, 0x2021, 0x3f80, 0x2009, - 0x0004, 0x2011, 0x0010, 0x1078, 0x1fc8, 0x0040, 0x250c, 0x157e, - 0x20a9, 0x0000, 0x2021, 0x3e80, 0x047e, 0x2009, 0x0004, 0x2011, - 0x0010, 0x1078, 0x1fc8, 0x047f, 0x0040, 0x250b, 0x8420, 0x0070, - 0x250b, 0x0078, 0x24fc, 0x157f, 0x8738, 0xa784, 0x0007, 0x00c0, - 0x24e2, 0x0078, 0x1bdb, 0x1078, 0x28eb, 0x1078, 0x28fa, 0x6827, - 0x0000, 0x789b, 0x000e, 0x6f10, 0x6813, 0x0002, 0x1078, 0x31cd, - 0xa684, 0x0800, 0x0040, 0x2528, 0x6918, 0xa18d, 0x2000, 0x691a, - 0x6814, 0xa084, 0x8000, 0x0040, 0x252f, 0x6817, 0x0000, 0x2021, - 0x3557, 0x6800, 0x2022, 0x6a38, 0x693c, 0x6a2a, 0x692e, 0x1078, - 0x17e7, 0x0078, 0x1bdb, 0x1078, 0x2428, 0x6827, 0x0000, 0x789b, - 0x000e, 0x6f10, 0x1078, 0x2d87, 0xa08c, 0x00ff, 0x6912, 0x6814, - 0xa084, 0x8000, 0x0040, 0x254e, 0x7038, 0x6816, 0xa68c, 0xdf00, - 0x691a, 0x70a3, 0x0000, 0x0078, 0x1bdb, 0xa006, 0x1078, 0x2eca, - 0x6813, 0x0000, 0x6817, 0x0001, 0xa68c, 0xdf00, 0x691a, 0x6827, - 0x0000, 0x7000, 0x0079, 0x2564, 0x256c, 0x256e, 0x256e, 0x2570, - 0x2570, 0x2570, 0x256c, 0x256c, 0x1078, 0x1b81, 0x1078, 0x28fa, - 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x28c5, 0x2300, 0x0079, - 0x2579, 0x257c, 0x257e, 0x25bc, 0x1078, 0x1b81, 0x7000, 0x0079, - 0x2581, 0x2589, 0x258b, 0x258b, 0x2596, 0x258b, 0x259d, 0x2589, - 0x2589, 0x1078, 0x1b81, 0xa684, 0x2000, 0x00c0, 0x2596, 0xa6b5, - 0x2000, 0x7e5a, 0x1078, 0x30f3, 0x0078, 0x2d3b, 0x6814, 0xa084, - 0x8000, 0x0040, 0x259d, 0x6817, 0x0007, 0x2009, 0x3518, 0x210c, - 0xa186, 0x0000, 0x0040, 0x25b2, 0xa186, 0x0001, 0x0040, 0x25b6, - 0x2009, 0x352b, 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b, 0x0046, - 0x0078, 0x1bd3, 0x781b, 0x00dd, 0x0078, 0x1bd3, 0x2009, 0x352b, - 0x200b, 0x000a, 0x0078, 0x1bd3, 0x1078, 0x1b81, 0x2300, 0x0079, - 0x25c1, 0x25c4, 0x25c6, 0x25e9, 0x1078, 0x1b81, 0x7000, 0x0079, - 0x25c9, 0x25d1, 0x25d3, 0x25d3, 0x25de, 0x25d3, 0x25e5, 0x25d1, - 0x25d1, 0x1078, 0x1b81, 0xa684, 0x2000, 0x00c0, 0x25de, 0xa6b5, - 0x2000, 0x7e5a, 0x1078, 0x30f3, 0x0078, 0x2d3b, 0x6814, 0xa084, - 0x8000, 0x0040, 0x25e5, 0x6817, 0x0007, 0x781b, 0x00e4, 0x0078, - 0x1bd3, 0x681c, 0xa085, 0x0004, 0x681e, 0xa6b5, 0x0800, 0x1078, - 0x2b94, 0x781b, 0x0069, 0x0078, 0x1bd3, 0x2300, 0x0079, 0x25f8, - 0x25fb, 0x25fd, 0x25ff, 0x1078, 0x1b81, 0x1078, 0x1b81, 0xa684, - 0x0400, 0x00c0, 0x261e, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, - 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, - 0x2616, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x261a, 0x2001, 0x0014, - 0x0078, 0x22fd, 0xa184, 0x0007, 0x0079, 0x2656, 0x7a90, 0xa294, - 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x2654, 0x789b, - 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x2645, 0x7ba8, 0x7ba8, - 0xa386, 0x0001, 0x00c0, 0x2638, 0x2009, 0xfff7, 0x0078, 0x263e, - 0xa386, 0x0003, 0x00c0, 0x2645, 0x2009, 0xffef, 0x0c7e, 0x7048, - 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, - 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x691c, 0xa18c, - 0xfdff, 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d3b, 0x2026, 0x202c, - 0x2660, 0x2668, 0x265e, 0x265e, 0x265e, 0x2d3b, 0x1078, 0x1b81, - 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d43, - 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x691e, 0x0078, 0x2d3b, - 0x79e4, 0xa184, 0x0030, 0x0040, 0x267a, 0x78ec, 0xa084, 0x0003, - 0x00c0, 0x2682, 0x6814, 0xa085, 0x8000, 0x6816, 0x2001, 0x0014, - 0x0078, 0x22fd, 0xa184, 0x0007, 0x0079, 0x2686, 0x2d3b, 0x2d3b, - 0x268e, 0x2d3b, 0x2d63, 0x2d63, 0x2d3b, 0x2d3b, 0xa684, 0x0400, - 0x00c0, 0x26bf, 0x681c, 0xa084, 0x0001, 0x0040, 0x2d43, 0xa68c, - 0x2060, 0xa18c, 0xfffb, 0x795a, 0x69b2, 0x789b, 0x0060, 0x78ab, - 0x0000, 0x789b, 0x0061, 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, - 0x157e, 0x137e, 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, - 0x80ac, 0xad80, 0x000a, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, - 0x6810, 0x8007, 0x789b, 0x007e, 0x78aa, 0x0078, 0x2d43, 0x6814, - 0xa084, 0x8000, 0x0040, 0x26c6, 0x6817, 0x0008, 0x781b, 0x00d8, - 0x0078, 0x1bd3, 0x2300, 0x0079, 0x26cd, 0x26d2, 0x274d, 0x26d0, - 0x1078, 0x1b81, 0x7000, 0xa084, 0x0007, 0x0079, 0x26d7, 0x26df, - 0x26e1, 0x26fd, 0x26df, 0x26df, 0x24dd, 0x26df, 0x26df, 0x1078, - 0x1b81, 0x691c, 0xa18d, 0x0001, 0x691e, 0x6800, 0x6006, 0xa005, - 0x00c0, 0x26eb, 0x6002, 0x6818, 0xa084, 0x000e, 0x0040, 0x26f7, - 0x7014, 0x68b6, 0x712c, 0xa188, 0x3e80, 0x0078, 0x26f9, 0x2009, - 0x3f80, 0x2104, 0x6802, 0x2d0a, 0x7156, 0x6eb2, 0xa684, 0x0060, - 0x0040, 0x274b, 0xa684, 0x0800, 0x00c0, 0x270f, 0xa684, 0x7fff, - 0x68b2, 0x6890, 0x6894, 0x1078, 0x2eca, 0x0078, 0x274b, 0xa684, - 0x0020, 0x0040, 0x2721, 0xa006, 0x1078, 0x3197, 0x78d0, 0x8003, - 0x00c8, 0x271d, 0x78d4, 0x1078, 0x31fc, 0x79d8, 0x7adc, 0x0078, - 0x2725, 0x1078, 0x2cb9, 0x1078, 0x3197, 0xa684, 0x8000, 0x0040, - 0x274b, 0xa684, 0x7fff, 0x68b2, 0x789b, 0x0074, 0x1078, 0x2d87, - 0x2010, 0x1078, 0x2d87, 0x2008, 0xa684, 0x0020, 0x00c0, 0x2743, - 0x1078, 0x2d87, 0x801b, 0x00c8, 0x273e, 0x8000, 0xa084, 0x003f, - 0xa108, 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90, - 0x2200, 0xa303, 0x68aa, 0x0078, 0x1bdb, 0x0078, 0x2b81, 0x7033, - 0x0000, 0xa282, 0x0005, 0x0050, 0x2757, 0x1078, 0x1b81, 0x2300, - 0x0079, 0x275a, 0x275d, 0x2767, 0x278a, 0x2200, 0x0079, 0x2760, - 0x2765, 0x2b81, 0x2765, 0x27b3, 0x2804, 0x1078, 0x1b81, 0x7000, - 0xa086, 0x0001, 0x00c0, 0x2774, 0x1078, 0x28fa, 0x1078, 0x2eca, - 0x7034, 0x600a, 0x0078, 0x2779, 0x7000, 0xa086, 0x0003, 0x0040, - 0x276e, 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032, - 0x2200, 0x0079, 0x2783, 0x2b81, 0x2788, 0x27b3, 0x2788, 0x2b81, - 0x1078, 0x1b81, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2797, 0x1078, - 0x28fa, 0x1078, 0x2eca, 0x7034, 0x600a, 0x0078, 0x279c, 0x7000, - 0xa086, 0x0003, 0x0040, 0x2791, 0x7003, 0x0005, 0x2001, 0x3f90, - 0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x27a6, 0x27ad, 0x27ab, - 0x27ad, 0x27ab, 0x27ad, 0x1078, 0x1b81, 0x1078, 0x2ba4, 0x781b, - 0x0069, 0x0078, 0x1bd3, 0x7000, 0xa086, 0x0001, 0x00c0, 0x27c0, - 0x1078, 0x28fa, 0x1078, 0x2eca, 0x7034, 0x600a, 0x0078, 0x27c5, - 0x7000, 0xa086, 0x0003, 0x0040, 0x27ba, 0x7003, 0x0002, 0x7a80, - 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215, - 0x2069, 0x3f80, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, - 0x27e0, 0x6810, 0xa206, 0x0040, 0x27f9, 0x6800, 0x0078, 0x27d3, - 0x7003, 0x0005, 0x2001, 0x3f90, 0x2068, 0x703e, 0x7032, 0x157e, - 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x27f1, 0x0078, - 0x27ea, 0x157f, 0x6a12, 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, - 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084, 0x0c00, 0x0040, 0x285a, - 0x1078, 0x2b9c, 0x0078, 0x285a, 0x7000, 0xa086, 0x0001, 0x00c0, - 0x2811, 0x1078, 0x28fa, 0x1078, 0x2eca, 0x7034, 0x600a, 0x0078, - 0x2816, 0x7000, 0xa086, 0x0003, 0x0040, 0x280b, 0x7003, 0x0002, - 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, - 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x3e80, 0x2d04, - 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x2835, 0x6810, 0xa206, - 0x0040, 0x284e, 0x6800, 0x0078, 0x2828, 0x7003, 0x0005, 0x2001, - 0x3f90, 0x2068, 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, - 0x0000, 0x8000, 0x0070, 0x2846, 0x0078, 0x283f, 0x157f, 0x6a12, - 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, - 0x681c, 0xa084, 0x0c00, 0x0040, 0x285a, 0x1078, 0x2b98, 0x7e58, - 0x0078, 0x285a, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa080, 0x3600, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, - 0x7052, 0xa684, 0x0060, 0x0040, 0x2891, 0x6b94, 0x6c90, 0x69a8, - 0x68ac, 0xa105, 0x00c0, 0x287f, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, - 0xa6b4, 0xb7ff, 0x7e5a, 0x1078, 0x30f3, 0x0078, 0x2891, 0x68ac, - 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x2891, 0x7bd2, - 0x7bda, 0x7cd6, 0x7cde, 0x68ac, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, - 0x3120, 0x077f, 0x1078, 0x2cac, 0x2009, 0x006a, 0xa684, 0x0008, - 0x0040, 0x289c, 0x2009, 0x0069, 0xa6b5, 0x2000, 0x7e5a, 0x791a, - 0x2d00, 0x703e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xa080, 0x3600, 0x2048, 0x0078, 0x1bd3, 0x6020, 0xa005, 0x0040, - 0x28b9, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, - 0x6026, 0x007c, 0xa006, 0x1078, 0x2eca, 0x6813, 0x0000, 0x6817, - 0x0001, 0x681f, 0x0040, 0x681b, 0x0100, 0x7000, 0xa084, 0x0007, - 0x0079, 0x28ca, 0x28d2, 0x28d4, 0x28d4, 0x28e0, 0x28dc, 0x28d2, - 0x28d2, 0x28d2, 0x1078, 0x1b81, 0x1078, 0x28eb, 0x1078, 0x28e4, - 0x1078, 0x17e7, 0x0078, 0x1bdb, 0x70a3, 0x0000, 0x0078, 0x1bdb, - 0x6817, 0x0000, 0x0078, 0x2513, 0x6800, 0xa005, 0x00c0, 0x28e9, - 0x6002, 0x6006, 0x007c, 0x6010, 0xa005, 0x0040, 0x28f4, 0x8001, - 0x00d0, 0x28f4, 0x1078, 0x1b81, 0x6012, 0x6008, 0xa084, 0xffef, - 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x2900, 0x8001, 0x601a, - 0x007c, 0x1078, 0x2d82, 0x6817, 0x0018, 0x0078, 0x2931, 0x1078, - 0x2d82, 0x6817, 0x0019, 0x0078, 0x2931, 0x1078, 0x2d82, 0x6817, - 0x001a, 0x0078, 0x2931, 0x77b4, 0x1078, 0x2cac, 0x71b8, 0xa18c, - 0x00ff, 0xa1e8, 0x3e80, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, - 0x2923, 0x0078, 0x1bdb, 0x6810, 0x72b4, 0xa206, 0x0040, 0x292b, - 0x6800, 0x0078, 0x291c, 0x6800, 0x200a, 0x6817, 0x0005, 0x70bf, - 0x0000, 0x1078, 0x28eb, 0x681c, 0xa084, 0x0001, 0x00c0, 0x293a, - 0x1078, 0x28e4, 0x1078, 0x28fa, 0x681b, 0x0000, 0x681f, 0x0020, - 0x1078, 0x17e7, 0x0078, 0x1bdb, 0xa282, 0x0003, 0x00c0, 0x2b75, - 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x691c, 0xa18d, - 0x0080, 0x691e, 0xa184, 0x0100, 0x0040, 0x29a4, 0xa18c, 0xfeff, - 0x691e, 0xa6b4, 0x00ff, 0x0040, 0x298e, 0xa682, 0x000f, 0x0048, - 0x2965, 0x0040, 0x2965, 0x2031, 0x000f, 0x852b, 0x852b, 0x1078, - 0x2c2f, 0x0040, 0x296f, 0x1078, 0x2a3e, 0x0078, 0x2997, 0x1078, - 0x2bea, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, - 0x2a62, 0x0c7f, 0x691c, 0xa18d, 0x0100, 0x691e, 0x7e58, 0xa6b5, - 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x298a, 0x781b, 0x0055, - 0x0078, 0x1bd3, 0x781b, 0x0069, 0x0078, 0x1bd3, 0x0c7e, 0x2960, - 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2a62, 0x0c7f, 0x7e58, - 0xa684, 0x0400, 0x00c0, 0x29a0, 0x781b, 0x0058, 0x0078, 0x1bd3, - 0x781b, 0x006a, 0x0078, 0x1bd3, 0x0c7e, 0x7048, 0x2060, 0x6100, - 0xa18c, 0x1000, 0x0040, 0x29e4, 0x6208, 0x8217, 0xa294, 0x00ff, - 0xa282, 0x000f, 0x0048, 0x29b8, 0x0040, 0x29b8, 0x2011, 0x000f, - 0x2600, 0xa202, 0x00c8, 0x29bd, 0x2230, 0x6208, 0xa294, 0x00ff, - 0x7018, 0xa086, 0x0028, 0x00c0, 0x29cd, 0xa282, 0x0019, 0x00c8, - 0x29d3, 0x2011, 0x0019, 0x0078, 0x29d3, 0xa282, 0x000c, 0x00c8, - 0x29d3, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x29d8, 0x2228, - 0x1078, 0x2bee, 0x852b, 0x852b, 0x1078, 0x2c2f, 0x0040, 0x29e4, - 0x1078, 0x2a3e, 0x0078, 0x29e8, 0x1078, 0x2bea, 0x1078, 0x2a62, - 0x7858, 0xa085, 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0069, 0x0078, - 0x1bd3, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2a0c, - 0x6010, 0xa084, 0x000f, 0x00c0, 0x2a06, 0xa18c, 0x0002, 0x00c0, - 0x2a06, 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, - 0x2019, 0x0000, 0x0078, 0x2a2e, 0x6208, 0xa294, 0x00ff, 0x7018, - 0xa086, 0x0028, 0x00c0, 0x2a1c, 0xa282, 0x0019, 0x00c8, 0x2a22, - 0x2011, 0x0019, 0x0078, 0x2a22, 0xa282, 0x000c, 0x00c8, 0x2a22, - 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000f, - 0x0048, 0x2a2e, 0x0040, 0x2a2e, 0x2019, 0x000f, 0x78ab, 0x0001, - 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, - 0x681c, 0xa085, 0x0100, 0x681e, 0x0c7f, 0x007c, 0x0c7e, 0x7148, - 0x2160, 0x2008, 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, - 0x7eae, 0x6612, 0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, - 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, - 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, - 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, - 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, - 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, 0x2b75, 0x7aa8, 0x691c, - 0xa18d, 0x0080, 0x691e, 0xa184, 0x0200, 0x0040, 0x2ab7, 0xa18c, - 0xfdff, 0x691e, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x2b75, - 0x1078, 0x2afe, 0x1078, 0x2a62, 0xa980, 0x0001, 0x200c, 0x1078, - 0x2ca8, 0x1078, 0x29f1, 0x88ff, 0x0040, 0x2aaa, 0x789b, 0x0060, - 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, - 0x00c0, 0x2aa6, 0x781b, 0x0055, 0x0078, 0x1bd3, 0x781b, 0x0069, - 0x0078, 0x1bd3, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2ab3, 0x781b, - 0x0058, 0x0078, 0x1bd3, 0x781b, 0x006a, 0x0078, 0x1bd3, 0xa282, - 0x0002, 0x00c8, 0x2abf, 0xa284, 0x0001, 0x0040, 0x2ac9, 0x7148, - 0xa188, 0x0000, 0x210c, 0xa18c, 0x2000, 0x00c0, 0x2ac9, 0x2011, - 0x0000, 0x1078, 0x2bdc, 0x1078, 0x2afe, 0x1078, 0x2a62, 0x7858, - 0xa085, 0x0004, 0x785a, 0x781b, 0x0069, 0x0078, 0x1bd3, 0x0c7e, - 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, - 0x2aee, 0x6014, 0xa084, 0x0040, 0x00c0, 0x2aec, 0xa18c, 0xffef, - 0x6106, 0xa006, 0x0078, 0x2afb, 0x2011, 0x0000, 0x78ab, 0x0001, - 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x681c, - 0xa085, 0x0200, 0x681e, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, - 0x2060, 0x82ff, 0x0040, 0x2b06, 0x2011, 0x0040, 0x6018, 0xa080, - 0x0002, 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, - 0x788a, 0x6004, 0xa084, 0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, - 0x7000, 0xa086, 0x0003, 0x0040, 0x2b20, 0x007f, 0x0078, 0x2b23, - 0x007f, 0x0078, 0x2b71, 0xa684, 0x0020, 0x0040, 0x2b71, 0x7888, - 0xa084, 0x0040, 0x0040, 0x2b71, 0x78a8, 0x8001, 0x0040, 0x2b30, - 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x2b37, 0x8000, 0xa005, - 0x0040, 0x2b58, 0x831b, 0x00c8, 0x2b40, 0x8001, 0x0040, 0x2b6d, - 0xa006, 0x1078, 0x3197, 0x78b4, 0x1078, 0x31fc, 0x0078, 0x2b71, - 0xa684, 0x4000, 0x0040, 0x2b58, 0x78b8, 0x801b, 0x00c8, 0x2b51, - 0x8000, 0xa084, 0x003f, 0x00c0, 0x2b6d, 0xa6b4, 0xbfff, 0x7e5a, - 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x2b61, 0xa291, - 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x3197, 0x781b, - 0x0067, 0x1078, 0x3061, 0x0078, 0x1bd3, 0x781b, 0x0067, 0x0078, - 0x1bd3, 0x781b, 0x006a, 0x0078, 0x1bd3, 0x1078, 0x2ba8, 0x781b, - 0x0069, 0x0078, 0x1bd3, 0x1078, 0x2b94, 0x781b, 0x0069, 0x0078, - 0x1bd3, 0x6823, 0x0002, 0x1078, 0x2b9c, 0x691c, 0xa18d, 0x0020, - 0x691e, 0x6814, 0xa084, 0x8000, 0x0040, 0x2b90, 0x6817, 0x0005, - 0x781b, 0x0069, 0x0078, 0x1bd3, 0x2001, 0x0005, 0x0078, 0x2baa, - 0x2001, 0x000c, 0x0078, 0x2baa, 0x2001, 0x0006, 0x0078, 0x2baa, - 0x2001, 0x000d, 0x0078, 0x2baa, 0x2001, 0x0009, 0x0078, 0x2baa, - 0x2001, 0x0007, 0x789b, 0x007f, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, - 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, - 0xa0e0, 0x3600, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, - 0x0040, 0x2bca, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, - 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, - 0x0040, 0x2bda, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, - 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, - 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, - 0x0004, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, - 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, - 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, - 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, - 0xfff0, 0x2001, 0x3546, 0x2004, 0xa082, 0x0028, 0x0040, 0x2c18, - 0x2021, 0x2c8f, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x2c1e, - 0x2021, 0x2c9b, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, - 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x2c2d, 0x8420, 0x2300, - 0xa210, 0x0070, 0x2c2d, 0x0078, 0x2c20, 0x157f, 0x007c, 0x157e, - 0x2011, 0x3546, 0x2214, 0xa282, 0x0032, 0x0048, 0x2c43, 0x0040, - 0x2c47, 0x2021, 0x2c81, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, - 0x0032, 0x0078, 0x2c57, 0xa282, 0x0028, 0x0040, 0x2c4f, 0x2021, - 0x2c8f, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x2c55, 0x2021, - 0x2c9b, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2200, - 0xa502, 0x0040, 0x2c67, 0x0048, 0x2c67, 0x8420, 0x2300, 0xa210, - 0x0070, 0x2c64, 0x0078, 0x2c57, 0x157f, 0xa006, 0x007c, 0x157f, - 0xa582, 0x0064, 0x00c8, 0x2c70, 0x7808, 0xa085, 0x0070, 0x780a, - 0x78ec, 0xa084, 0x0300, 0x0040, 0x2c7e, 0x2404, 0xa09e, 0x1201, - 0x00c0, 0x2c7e, 0x2001, 0x2101, 0x0078, 0x2c7f, 0x2404, 0xa005, - 0x007c, 0x1201, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, - 0x6605, 0x6805, 0x7806, 0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, - 0x4202, 0x5202, 0x6202, 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, - 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, - 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, - 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784, - 0x0007, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0, 0x3680, - 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x2cc0, 0x8000, - 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, - 0x0100, 0x2009, 0x3540, 0x2091, 0x8000, 0x2104, 0x0079, 0x2cd0, - 0x2d02, 0x2cda, 0x2cda, 0x2cda, 0x2cda, 0x2cda, 0x2cd8, 0x2cd8, - 0x1078, 0x1b81, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, - 0x2cdc, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x2ce3, - 0x68b0, 0xa085, 0x4000, 0x68b2, 0x7858, 0xa085, 0x4000, 0x785a, - 0x7830, 0xa084, 0x0080, 0x00c0, 0x2d02, 0x0018, 0x2d02, 0x6818, - 0xa084, 0x0020, 0x00c0, 0x2d00, 0x781b, 0x00dd, 0x0078, 0x2d02, - 0x781b, 0x00e4, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e, 0x6810, - 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3600, - 0x6004, 0xa084, 0x000a, 0x00c0, 0x2d39, 0x6108, 0xa194, 0xff00, - 0x0040, 0x2d39, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, - 0x2d28, 0x2001, 0x0032, 0xa106, 0x0040, 0x2d2c, 0x0078, 0x2d30, - 0x2009, 0x0020, 0x0078, 0x2d32, 0x2009, 0x003f, 0x0078, 0x2d32, - 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, - 0x6006, 0x0c7f, 0x007c, 0x781b, 0x006a, 0x0078, 0x1bd3, 0x781b, - 0x0069, 0x0078, 0x1bd3, 0x781b, 0x0058, 0x0078, 0x1bd3, 0x781b, - 0x0055, 0x0078, 0x1bd3, 0x781b, 0x00dd, 0x0078, 0x1bd3, 0x781b, - 0x00dc, 0x0078, 0x1bd3, 0x781b, 0x00e4, 0x0078, 0x1bd3, 0x781b, - 0x00e3, 0x0078, 0x1bd3, 0x781b, 0x009e, 0x0078, 0x1bd3, 0x781b, - 0x009d, 0x0078, 0x1bd3, 0x70a3, 0x0001, 0x781b, 0x0046, 0x0078, - 0x1bd3, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2d80, 0x7808, - 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, - 0xa084, 0x0021, 0x0040, 0x2d80, 0x7808, 0xa085, 0x0002, 0x780a, - 0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, 0x007c, 0x7830, - 0xa084, 0x0040, 0x00c0, 0x2d87, 0x0098, 0x2d90, 0x78ac, 0x007c, - 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, - 0x78ec, 0xa084, 0x0021, 0x0040, 0x2d9f, 0x0098, 0x2d9d, 0x78ac, - 0x007e, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, - 0x0070, 0x0040, 0x2dab, 0x6817, 0x0003, 0x7858, 0xa084, 0x3f00, - 0x681a, 0x682f, 0x0000, 0x682b, 0x0000, 0x784b, 0x0008, 0x78e4, - 0xa005, 0x00d0, 0x2018, 0xa084, 0x0020, 0x0040, 0x2018, 0x78ec, - 0xa084, 0x0003, 0x0040, 0x2018, 0x0018, 0x2018, 0x0078, 0x2b7b, - 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xa080, 0x3600, 0x2060, 0x2048, 0x704a, 0x6000, 0x704e, 0x6004, - 0x7052, 0x0c7f, 0x007c, 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, - 0x0014, 0x9847, 0x0014, 0x0014, 0x98f5, 0x98e7, 0x0014, 0x0014, - 0x0080, 0x00bf, 0x0100, 0x0402, 0x2008, 0xf880, 0xa20a, 0x0014, - 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838, 0x817e, 0x842a, 0x84a0, - 0x3806, 0x8839, 0x28c2, 0x9cc3, 0xa805, 0x0864, 0xa83b, 0x3008, - 0x28c1, 0x9cc3, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, - 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9ca0, 0xa8f3, 0x0864, - 0xa829, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9ca0, 0x280d, 0xa204, - 0x64c0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, - 0xa80f, 0x786e, 0x883e, 0xa80c, 0x282b, 0xa205, 0x64a0, 0x67a0, - 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa801, 0x883e, - 0x2069, 0x28c1, 0x9cc3, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8dc, - 0xa207, 0x0014, 0xa203, 0x8000, 0x84a8, 0x85a4, 0x1872, 0x849a, - 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x866f, 0x0704, 0x3008, - 0x9ca0, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, - 0xf848, 0x8174, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6, - 0xa8f1, 0xf861, 0xa8e8, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, - 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, - 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0xa206, 0x6865, 0x817f, - 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8000, - 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, 0x1dc6, 0x20d7, - 0x8822, 0x0016, 0x8000, 0x2848, 0x1011, 0xa8fc, 0x3008, 0x8000, - 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa887, 0x3008, 0x283d, 0x1011, - 0xa8fd, 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, - 0x0014, 0x26e0, 0x873a, 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, - 0x0014, 0xa20d, 0x817e, 0x842a, 0x84a0, 0x3806, 0x0210, 0x9ccd, - 0x0704, 0x0000, 0x127e, 0x2091, 0x2200, 0x2049, 0x2eca, 0x7000, - 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, 0xa084, 0xfffd, 0xa205, - 0x0040, 0x2edc, 0x0078, 0x2ee1, 0x7003, 0x0000, 0x127f, 0x2000, - 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, 0x2f0f, 0x7108, 0x8104, - 0x00c8, 0x2eee, 0x1078, 0x2fab, 0x0078, 0x2ee6, 0x700c, 0xa08c, - 0x007f, 0x0040, 0x2f0f, 0x7004, 0x8004, 0x00c8, 0x2f06, 0x7014, - 0xa005, 0x00c0, 0x2f02, 0x7010, 0xa005, 0x0040, 0x2f06, 0xa102, - 0x00c8, 0x2ee6, 0x7007, 0x0010, 0x0078, 0x2f0f, 0x8aff, 0x0040, - 0x2f0f, 0x1078, 0x316e, 0x00c0, 0x2f09, 0x0040, 0x2ee6, 0x1078, - 0x2f59, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x6424, 0x84ff, - 0x0040, 0x2f33, 0x2c70, 0x2039, 0x2f38, 0x2704, 0xae68, 0x680c, - 0xa630, 0x6808, 0xa529, 0x8421, 0x0040, 0x2f33, 0x8738, 0x2704, - 0xa005, 0x00c0, 0x2f1e, 0x7098, 0xa075, 0x0040, 0x2f33, 0x2039, - 0x2f35, 0x0078, 0x2f1d, 0x007c, 0x0000, 0x0004, 0x0008, 0x000c, - 0x0010, 0x0014, 0x0018, 0x001c, 0x0000, 0x127e, 0x2091, 0x2200, - 0x2079, 0x3500, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, - 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, - 0x7003, 0x0000, 0x2049, 0x0000, 0x78b3, 0x0000, 0x127f, 0x2000, - 0x007c, 0x2049, 0x2f59, 0x7004, 0x8004, 0x00c8, 0x2f85, 0x7007, - 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x2f61, 0xa184, 0x0030, - 0x0040, 0x2f6e, 0xa086, 0x0030, 0x00c0, 0x2f61, 0x7000, 0xa084, - 0x0001, 0x00c0, 0x2f85, 0x7008, 0xa084, 0x000c, 0x00c0, 0x2f83, - 0x710c, 0xa184, 0x0300, 0x00c0, 0x2f83, 0xa184, 0x007f, 0x00c0, - 0x2f59, 0x0078, 0x2f85, 0x6817, 0x0003, 0x7007, 0x0012, 0x7007, - 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x2f89, 0x7007, 0x0012, - 0x7108, 0x8104, 0x0048, 0x2f8e, 0x78b3, 0x0000, 0x7003, 0x0000, - 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e, 0x157e, 0x2091, - 0x2200, 0x7108, 0x1078, 0x2fab, 0x157f, 0x127f, 0x2091, 0x8001, - 0x007f, 0x107f, 0x007c, 0x7204, 0x2118, 0x7108, 0x700c, 0xa084, - 0x0300, 0x00c0, 0x2fed, 0xa184, 0x000c, 0x00c0, 0x2fed, 0x8213, - 0x8213, 0x8213, 0x8213, 0xa284, 0x0100, 0xa10d, 0x810b, 0x810b, - 0x810f, 0xa184, 0x0007, 0x0079, 0x2fc5, 0x2fcf, 0x2fdf, 0x2fed, - 0x2fdf, 0x3001, 0x3001, 0x2fed, 0x2fff, 0x1078, 0x1b81, 0x7007, - 0x0002, 0x8aff, 0x00c0, 0x2fd8, 0x2049, 0x0000, 0x0078, 0x2fdc, - 0x1078, 0x316e, 0x00c0, 0x2fd8, 0x78b3, 0x0000, 0x007c, 0x7007, - 0x0002, 0x8aff, 0x00c0, 0x2fe6, 0x0078, 0x2fea, 0x1078, 0x316e, - 0x00c0, 0x2fe6, 0x78b3, 0x0000, 0x007c, 0x7007, 0x0002, 0x1078, - 0x2f59, 0x1078, 0x2cc6, 0x6814, 0xa084, 0x8000, 0x0040, 0x2ffa, - 0x6817, 0x0002, 0x007c, 0x1078, 0x1b81, 0x1078, 0x1b81, 0x1078, - 0x3053, 0x7210, 0x7114, 0x700c, 0xa09c, 0x007f, 0x2800, 0xa300, - 0xa211, 0xa189, 0x0000, 0x78b0, 0xa005, 0x0040, 0x3013, 0x78b3, - 0x0000, 0x0078, 0x3036, 0x1078, 0x3053, 0x2704, 0x2c58, 0xac60, - 0x630c, 0x2200, 0xa322, 0x6308, 0x2100, 0xa31b, 0x2400, 0xa305, - 0x0040, 0x302c, 0x00c8, 0x302c, 0x8412, 0x8210, 0x830a, 0xa189, - 0x0000, 0x2b60, 0x0078, 0x3013, 0x2b60, 0x8a07, 0xa7ba, 0x2f35, - 0xa73d, 0x2c00, 0x6882, 0x6f86, 0x6c8e, 0x6b8a, 0x7007, 0x0012, - 0x1078, 0x2f59, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x3047, - 0x6098, 0xa005, 0x0040, 0x3050, 0x2060, 0x2039, 0x2f35, 0x8a51, - 0x0040, 0x304f, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, 0x007c, - 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, - 0x3060, 0x2039, 0x2f3b, 0x6000, 0xa064, 0x00c0, 0x3060, 0x2d60, - 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6880, 0x2060, - 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, - 0xa0b8, 0x2f35, 0x7e08, 0xa6b5, 0x000c, 0x6818, 0xa084, 0x0040, - 0x0040, 0x307c, 0xa6b5, 0x0001, 0x0f7e, 0x2079, 0x0100, 0x7858, - 0x0f7f, 0xa084, 0x0040, 0x0040, 0x308b, 0xa684, 0x0001, 0x00c0, - 0x308b, 0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, - 0x00c0, 0x308d, 0x7000, 0xa005, 0x0040, 0x3098, 0x1078, 0x1b81, - 0x2400, 0xa305, 0x00c0, 0x309e, 0x0078, 0x30db, 0x2c58, 0x2704, - 0xac60, 0x6004, 0xa400, 0x007e, 0x701a, 0x6000, 0xa301, 0x701e, - 0x2009, 0x04fd, 0x2104, 0xa086, 0x04fd, 0x007f, 0x00c0, 0x30cb, - 0xa084, 0x0001, 0x0040, 0x30cb, 0xa684, 0x0001, 0x00c0, 0x30cb, - 0x7013, 0x0001, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x78b3, - 0x0001, 0xa4a0, 0x0001, 0xa399, 0x0000, 0x6004, 0xa400, 0x701a, - 0x6000, 0xa301, 0x701e, 0x620c, 0x2400, 0xa202, 0x7012, 0x6208, - 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, - 0x303b, 0x0078, 0x30dd, 0x1078, 0x316e, 0x00c0, 0x30db, 0x127f, - 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, - 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x30e9, 0x7003, 0x0008, - 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, - 0x2049, 0x30f3, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, - 0x30fc, 0x7000, 0xa005, 0x0040, 0x3107, 0x1078, 0x1b81, 0x7e08, - 0xa6b5, 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x3111, 0xa6b5, - 0x0001, 0x6824, 0xa005, 0x0040, 0x311d, 0x2050, 0x2039, 0x2f38, - 0x2d60, 0x1078, 0x316e, 0x00c0, 0x3119, 0x127f, 0x2000, 0x007c, - 0x127e, 0x007e, 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, - 0x047f, 0x7e08, 0xa6b5, 0x000c, 0x6818, 0xa084, 0x0040, 0x0040, - 0x3133, 0xa6b5, 0x0001, 0x2049, 0x3120, 0x6824, 0xa055, 0x0040, - 0x316b, 0x2d70, 0x2e60, 0x2039, 0x2f38, 0x2704, 0xae68, 0x680c, - 0xa422, 0x6808, 0xa31b, 0x0048, 0x3158, 0x8a51, 0x00c0, 0x314a, - 0x1078, 0x1b81, 0x8738, 0x2704, 0xa005, 0x00c0, 0x313e, 0x7098, - 0xa075, 0x2060, 0x0040, 0x316b, 0x2039, 0x2f35, 0x0078, 0x313d, - 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x690c, 0x2400, 0xa122, - 0x6908, 0x2300, 0xa11b, 0x00c8, 0x3167, 0x1078, 0x1b81, 0x2071, - 0x0020, 0x0078, 0x308b, 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, - 0x00c0, 0xa086, 0x00c0, 0x0040, 0x3196, 0x2704, 0xac08, 0x2104, - 0x701e, 0x8108, 0x2104, 0x701a, 0x8108, 0x2104, 0x7016, 0x8108, - 0x2104, 0x7012, 0x0f7e, 0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, - 0x0040, 0x0040, 0x3191, 0xa684, 0x0001, 0x00c0, 0x3191, 0xa6b5, - 0x0001, 0x7602, 0x7007, 0x0001, 0x1078, 0x303b, 0x007c, 0x127e, - 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x3197, 0x0d7f, 0x087f, - 0x7108, 0xa184, 0x00c0, 0x00c0, 0x31ad, 0x6824, 0xa005, 0x0040, - 0x31bd, 0x0078, 0x2ee1, 0x0078, 0x31bd, 0x7108, 0x8104, 0x00c8, - 0x31b5, 0x1078, 0x2fab, 0x0078, 0x31a0, 0x7007, 0x0010, 0x7108, - 0x8104, 0x00c8, 0x31b7, 0x1078, 0x2fab, 0x7008, 0xa086, 0x0002, - 0x00c0, 0x31a0, 0x7000, 0xa005, 0x00c0, 0x31a0, 0x7003, 0x0000, - 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, - 0x157e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x31cd, 0xad80, - 0x0010, 0x20a0, 0x2099, 0x0031, 0x700c, 0xa084, 0x007f, 0x6826, - 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x31eb, - 0x8000, 0x80ac, 0x53a5, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, - 0x00c0, 0x31ed, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, - 0x147f, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, - 0x2200, 0x0d7f, 0x2049, 0x31fc, 0x6880, 0x2060, 0x6884, 0x6b88, - 0x6c8c, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x2f35, - 0x7e08, 0xa6b5, 0x0004, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, - 0x00c0, 0x3215, 0x2c58, 0x2704, 0xac60, 0x6004, 0xa400, 0x701a, - 0x6000, 0xa301, 0x701e, 0x7013, 0x0001, 0x7017, 0x0000, 0x7602, - 0x7007, 0x0001, 0x007f, 0x8007, 0x2009, 0x0031, 0x200a, 0x00a0, - 0x322f, 0x7108, 0x7007, 0x0002, 0x810c, 0x00c8, 0x322f, 0x810c, - 0x0048, 0x323c, 0x0078, 0x2fed, 0xa4a0, 0x0001, 0xa399, 0x0000, - 0x6b8a, 0x6c8e, 0x7007, 0x0004, 0x2049, 0x0000, 0x7003, 0x0000, - 0x127f, 0x2000, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, - 0x818e, 0x00c8, 0x3254, 0xa200, 0x00f0, 0x324f, 0x8086, 0x818e, - 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x327a, 0xa11a, - 0x00c8, 0x327a, 0x8213, 0x818d, 0x0048, 0x326d, 0xa11a, 0x00c8, - 0x326e, 0x00f0, 0x3262, 0x0078, 0x3272, 0xa11a, 0x2308, 0x8210, - 0x00f0, 0x3262, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, - 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x3276, - 0x00e0, 0x32c2, 0x2091, 0x6000, 0x7820, 0x8001, 0x7822, 0x00c0, - 0x32bc, 0x7824, 0x7822, 0x2091, 0x8000, 0x2069, 0x3540, 0x6800, - 0xa084, 0x0007, 0x0040, 0x32a4, 0xa086, 0x0002, 0x0040, 0x32a4, - 0x6830, 0xa00d, 0x0040, 0x32a4, 0x2104, 0xa005, 0x0040, 0x32a4, - 0x8001, 0x200a, 0x0040, 0x3372, 0x2061, 0x3680, 0x20a9, 0x0080, - 0x6034, 0xa005, 0x0040, 0x32b6, 0x8001, 0x6036, 0x00c0, 0x32b6, - 0x6010, 0xa005, 0x0040, 0x32b6, 0x1078, 0x1a23, 0xace0, 0x0010, - 0x0070, 0x32bc, 0x0078, 0x32a8, 0x1078, 0x32d7, 0x1078, 0x32c5, - 0x1078, 0x32fc, 0x2091, 0x8001, 0x007c, 0x783c, 0x8001, 0x783e, - 0x00c0, 0x32d6, 0x7840, 0x783e, 0x7848, 0xa005, 0x0040, 0x32d6, - 0x8001, 0x784a, 0x00c0, 0x32d6, 0x1078, 0x1a23, 0x007c, 0x7834, - 0x8001, 0x7836, 0x00c0, 0x32fb, 0x7838, 0x7836, 0x2091, 0x8000, - 0x7844, 0xa005, 0x00c0, 0x32e6, 0x2001, 0x0101, 0x8001, 0x7846, - 0xa080, 0x3e80, 0x2040, 0x2004, 0xa065, 0x0040, 0x32fb, 0x6020, - 0xa005, 0x0040, 0x32f7, 0x8001, 0x6022, 0x0040, 0x332b, 0x6000, - 0x2c40, 0x0078, 0x32ec, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, - 0x332a, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x3309, 0x2001, - 0x0080, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, - 0x3680, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x332a, - 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x3322, 0x8001, 0x2012, - 0x00c0, 0x332a, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, - 0x1078, 0x1a23, 0x007c, 0x2069, 0x3540, 0x6800, 0xa005, 0x0040, - 0x3335, 0x683c, 0xac06, 0x0040, 0x3372, 0x6017, 0x0006, 0x60b0, - 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, 0xa085, 0x0060, - 0x601e, 0x6000, 0x2042, 0x6710, 0x6fb6, 0x1078, 0x169c, 0x6818, - 0xa005, 0x0040, 0x334d, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, - 0x680a, 0x6810, 0x8001, 0x00d0, 0x3357, 0x1078, 0x1b81, 0x6812, - 0x602f, 0x0000, 0x602b, 0x0000, 0x2c68, 0x1078, 0x17e7, 0x2069, - 0x3540, 0x2001, 0x0006, 0x68a2, 0x7944, 0xa184, 0x0100, 0x00c0, - 0x336d, 0x69ba, 0x2001, 0x0004, 0x68a2, 0x1078, 0x1a1e, 0x2091, - 0x8001, 0x007c, 0x2009, 0x354f, 0x2164, 0x2069, 0x0100, 0x6017, - 0x0006, 0x6858, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, - 0xa085, 0x0048, 0x601e, 0x602f, 0x0000, 0x602b, 0x0000, 0x6830, - 0xa084, 0x0040, 0x0040, 0x33ac, 0x684b, 0x0004, 0x20a9, 0x0014, - 0x6848, 0xa084, 0x0004, 0x0040, 0x3399, 0x0070, 0x3399, 0x0078, - 0x3390, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, - 0x0040, 0x33a6, 0x0070, 0x33a6, 0x0078, 0x339d, 0x20a9, 0x00fa, - 0x0070, 0x33ac, 0x0078, 0x33a8, 0x6808, 0xa084, 0xfffd, 0x680a, - 0x681b, 0x0046, 0x2009, 0x3568, 0x200b, 0x0007, 0x784c, 0x784a, - 0x2091, 0x8001, 0x007c, 0x2079, 0x3500, 0x1078, 0x3404, 0x1078, - 0x33cc, 0x1078, 0x33e1, 0x1078, 0x33f6, 0x7833, 0x0000, 0x7847, - 0x0000, 0x784b, 0x0000, 0x007c, 0x2019, 0x000a, 0x2011, 0x3546, - 0x2204, 0xa086, 0x0032, 0x0040, 0x33de, 0x2019, 0x000c, 0x2204, - 0xa086, 0x003c, 0x0040, 0x33de, 0x2019, 0x0008, 0x7b2a, 0x7b2e, - 0x007c, 0x2019, 0x0030, 0x2011, 0x3546, 0x2204, 0xa086, 0x0032, - 0x0040, 0x33f3, 0x2019, 0x0039, 0x2204, 0xa086, 0x003c, 0x0040, - 0x33f3, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x000d, - 0x2011, 0x3546, 0x2204, 0xa086, 0x003c, 0x0040, 0x3401, 0x2019, - 0x000a, 0x7b3e, 0x7b42, 0x007c, 0x2019, 0x2faf, 0x2011, 0x3546, - 0x2204, 0xa086, 0x0032, 0x0040, 0x3416, 0x2019, 0x3971, 0x2204, - 0xa086, 0x003c, 0x0040, 0x3416, 0x2019, 0x2626, 0x7b22, 0x7b26, - 0x007c, 0xda3e -}; -#define ISP_CODE_LENGTH 0x241a -#endif diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index 1b8b9d893a7ee..b93775007e833 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -1,5 +1,4 @@ -/* $Id: isp.c,v 1.10 1999/01/10 02:55:10 mjacob Exp $ */ -/* release_12_28_98_A+ */ +/* $FreeBSD$ */ /* * Machine and OS Independent (well, as best as possible) * code for the Qlogic ISP SCSI adapters. @@ -52,7 +51,7 @@ #include <dev/isp/isp_freebsd.h> #endif #ifdef __linux__ -#include "isp_linux.h" +#include <isp_linux.h> #endif /* @@ -64,7 +63,7 @@ /* * Local static data */ -#ifdef ISP_TARGET_MODE +#if defined(ISP2100_TARGET_MODE) || defined(ISP_TARGET_MODE) static const char tgtiqd[36] = { 0x03, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x51, 0x4C, 0x4F, 0x47, 0x49, 0x43, 0x20, 0x20, @@ -89,16 +88,11 @@ static const char tgtiqd[36] = { /* * Local function prototypes. */ -static int isp_parse_async __P((struct ispsoftc *, int)); +static int isp_parse_async __P((struct ispsoftc *, u_int16_t)); static int isp_handle_other_response __P((struct ispsoftc *, ispstatusreq_t *, u_int8_t *)); -#ifdef ISP_TARGET_MODE +#if defined(ISP2100_TARGET_MODE) || defined(ISP_TARGET_MODE) static int isp_modify_lun __P((struct ispsoftc *, int, int, int)); -static void isp_notify_ack __P((struct ispsoftc *, void *)); -static void isp_handle_atio __P((struct ispsoftc *, void *)); -static void isp_handle_atio2 __P((struct ispsoftc *, void *)); -static void isp_handle_ctio __P((struct ispsoftc *, void *)); -static void isp_handle_ctio2 __P((struct ispsoftc *, void *)); #endif static void isp_parse_status __P((struct ispsoftc *, ispstatusreq_t *, ISP_SCSI_XFER_T *)); @@ -107,7 +101,7 @@ static void isp_fw_state __P((struct ispsoftc *)); static void isp_dumpregs __P((struct ispsoftc *, const char *)); static void isp_dumpxflist __P((struct ispsoftc *)); static void isp_prtstst __P((ispstatusreq_t *)); -static char *isp2100_fw_statename __P((int)); +static char *isp2100_fw_statename __P((u_int8_t)); static void isp_mboxcmd __P((struct ispsoftc *, mbreg_t *)); static void isp_update __P((struct ispsoftc *)); @@ -128,7 +122,7 @@ isp_reset(isp) { static char once = 1; mbreg_t mbs; - int loops, i, dodnld = 1, deadchip; + int loops, i, dodnld = 1; char *revname; isp->isp_state = ISP_NILSTATE; @@ -139,26 +133,16 @@ isp_reset(isp) * here. */ isp->isp_dblev = DFLT_DBLEVEL; - deadchip = ISP_READ(isp, HCCR) & HCCR_RESET; - if (deadchip) { - ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); - if (ISP_READ(isp, HCCR) & HCCR_RESET) { - isp_dumpregs(isp, "still reset after release"); - SYS_DELAY(1000); - } else { - deadchip = 1; - } - } - if (isp->isp_type & ISP_HA_FC) { revname = "2100"; } else { sdparam *sdp = isp->isp_param; - i = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK; - switch (i) { + + int rev = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK; + switch (rev) { default: PRINTF("%s: unknown chip rev. 0x%x- assuming a 1020\n", - isp->isp_name, i); + isp->isp_name, rev); /* FALLTHROUGH */ case 1: revname = "1020"; @@ -195,20 +179,16 @@ isp_reset(isp) * Try and figure out if we're connected to a differential bus. * You have to pause the RISC processor to read SXP registers. */ - if (deadchip == 0) { - ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); - i = 100; - while ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) { - SYS_DELAY(20); - if (--i == 0) { - isp_dumpregs(isp, - "cannot stop RISC processor"); - i = -1; - break; - } + ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); + i = 100; + while ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) { + SYS_DELAY(20); + if (--i == 0) { + PRINTF("%s: unable to pause RISC processor\n", + isp->isp_name); + i = -1; + break; } - } else { - i = 0; } if (i > 0) { if (isp->isp_bustype != ISP_BT_SBUS) { @@ -243,10 +223,9 @@ isp_reset(isp) sdp->isp_clock = 40; } /* - * Restart processor, if necessary. + * Restart processor */ - if (deadchip == 0) - ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); + ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); } /* * Machine dependent clock (if set) overrides @@ -264,7 +243,7 @@ isp_reset(isp) */ ISP_RESET0(isp); - if (once == 1 && deadchip == 0) { + if (once == 1) { once = 0; /* * Get the current running firmware revision out of the @@ -285,7 +264,6 @@ isp_reset(isp) } } - /* * Hit the chip over the head with hammer, * and give the ISP a chance to recover. @@ -353,21 +331,9 @@ isp_reset(isp) ISP_WRITE(isp, HCCR, HCCR_CMD_RESET); SYS_DELAY(100); - /* - * Establish some initial burst rate thingies - * (only for the 1XX0 boards). This really should - * be done later after fetching from NVRAM. - */ if (isp->isp_type & ISP_HA_SCSI) { - u_int16_t conf1 = isp->isp_mdvec->dv_conf1; - /* - * Busted FIFO. Turn off all but burst enables. - */ - if (isp->isp_type == ISP_HA_SCSI_1040A) { - conf1 &= BIU_BURST_ENABLE; - } - ISP_SETBITS(isp, BIU_CONF1, conf1); - if (conf1 & BIU_BURST_ENABLE) { + ISP_SETBITS(isp, BIU_CONF1, isp->isp_mdvec->dv_conf1); + if (isp->isp_mdvec->dv_conf1 & BIU_BURST_ENABLE) { ISP_SETBITS(isp, CDMA_CONF, DMA_ENABLE_BURST); ISP_SETBITS(isp, DDMA_CONF, DMA_ENABLE_BURST); } @@ -740,7 +706,7 @@ isp_fibre_init(isp) fcparam *fcp; isp_icb_t *icbp; mbreg_t mbs; - int count, loopid; + int count; u_int8_t lwfs; fcp = isp->isp_param; @@ -749,41 +715,16 @@ isp_fibre_init(isp) PRINTF("%s: can't setup DMA for mailboxes\n", isp->isp_name); return; } - /* - * For systems that don't have BIOS methods for which - * we can easily change the NVRAM based loopid, we'll - * override that here. Note that when we initialize - * the firmware we may get back a different loopid than - * we asked for anyway. XXX This is probably not the - * best way to figure this out XXX - */ -#ifndef __i386__ - loopid = DEFAULT_LOOPID; -#else - loopid = fcp->isp_loopid; -#endif - icbp = (isp_icb_t *) fcp->isp_scratch; - MEMZERO(icbp, sizeof (*icbp)); + bzero(icbp, sizeof (*icbp)); icbp->icb_version = ICB_VERSION1; -#ifdef ISP_TARGET_MODE - fcp->isp_fwoptions = ICBOPT_TGT_ENABLE|ICBOPT_INI_TGTTYPE; -#else + fcp->isp_fwoptions = 0; -#endif - fcp->isp_fwoptions |= ICBOPT_INI_ADISC|ICBOPT_FAIRNESS; - fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE; - fcp->isp_fwoptions |= ICBOPT_HARD_ADDRESS; -#ifdef CHECKME - fcp->isp_fwoptions |= ICBOPT_USE_PORTNAME; -#endif -#ifdef THIS_WORKED - /* - * This has unhappiness in target mode - */ - fcp->isp_fwoptions |= ICBOPT_FULL_LOGIN; +#ifdef ISP2100_TARGET_MODE + fcp->isp_fwoptions |= ICBOPT_TGT_ENABLE | ICBOPT_INI_TGTTYPE; + icbp->icb_iqdevtype = 0x23; /* DPQ_SUPPORTED/PROCESSOR */ #endif icbp->icb_fwoptions = fcp->isp_fwoptions; icbp->icb_maxfrmlen = fcp->isp_maxfrmlen; @@ -796,13 +737,9 @@ isp_fibre_init(isp) icbp->icb_execthrottle = fcp->isp_execthrottle; icbp->icb_retry_delay = fcp->isp_retry_delay; icbp->icb_retry_count = fcp->isp_retry_count; - icbp->icb_hardaddr = loopid; MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwn); - if (icbp->icb_fwoptions & ICBOPT_USE_PORTNAME) { - u_int64_t portname = fcp->isp_wwn | (2LL << 56); - MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, portname); - } + icbp->icb_rqstqlen = RQUEST_QUEUE_LEN; icbp->icb_rsltqlen = RESULT_QUEUE_LEN; icbp->icb_rqstaddr[RQRSP_ADDR0015] = @@ -851,15 +788,24 @@ isp_fibre_init(isp) isp->isp_residx = 0; /* - * Wait up to 5 seconds for FW to go to READY state. + * Wait up to 12 seconds for FW to go to READY state. + * This used to be 3 seconds, but that lost. + * + * This is all very much not right. The problem here + * is that the cable may not be plugged in, or there + * may be many many members of the loop that haven't + * been logged into. + * + * This model of doing things doesn't support dynamic + * attachment, so we just plain lose (for now). */ lwfs = FW_CONFIG_WAIT; for (count = 0; count < 12000; count++) { isp_fw_state(isp); if (lwfs != fcp->isp_fwstate) { PRINTF("%s: Firmware State %s -> %s\n", - isp->isp_name, isp2100_fw_statename((int)lwfs), - isp2100_fw_statename((int)fcp->isp_fwstate)); + isp->isp_name, isp2100_fw_statename(lwfs), + isp2100_fw_statename(fcp->isp_fwstate)); lwfs = fcp->isp_fwstate; } if (fcp->isp_fwstate == FW_READY) { @@ -882,14 +828,16 @@ isp_fibre_init(isp) } fcp->isp_loopid = mbs.param[1]; fcp->isp_alpa = mbs.param[2]; - PRINTF("%s: Loop ID %d, ALPA 0x%x\n", isp->isp_name, + PRINTF("%s: Loop ID 0x%x, ALPA 0x%x\n", isp->isp_name, fcp->isp_loopid, fcp->isp_alpa); isp->isp_state = ISP_INITSTATE; -#ifdef ISP_TARGET_MODE +#if defined(ISP2100_TARGET_MODE) || defined(ISP_TARGET_MODE) DISABLE_INTS(isp); - if (isp_modify_lun(isp, 0, 1, 1)) { - PRINTF("%s: failed to enable target mode\n", - isp->isp_name); + if (isp->isp_fwrev >= ISP_FW_REV(1, 13)) { + if (isp_modify_lun(isp, 0, 1, 1)) { + PRINTF("%s: failed to establish target mode\n", + isp->isp_name); + } } ENABLE_INTS(isp); #endif @@ -900,6 +848,29 @@ isp_fibre_init(isp) } /* + * Free any associated resources prior to decommissioning and + * set the card to a known state (so it doesn't wake up and kick + * us when we aren't expecting it to). + * + * Locks are held before coming here. + */ +void +isp_uninit(isp) + struct ispsoftc *isp; +{ + /* + * Leave with interrupts disabled. + */ + DISABLE_INTS(isp); + + /* + * Stop the watchdog timer (if started). + */ + STOP_WATCHDOG(isp_watch, isp); +} + + +/* * Start a command. Locking is assumed done in the caller. */ @@ -964,7 +935,7 @@ ispscsicmd(xs) u_int8_t niptr; ispmarkreq_t *marker = (ispmarkreq_t *) reqp; - MEMZERO((void *) marker, sizeof (*marker)); + bzero((void *) marker, sizeof (*marker)); marker->req_header.rqs_entry_count = 1; marker->req_header.rqs_entry_type = RQSTYPE_MARKER; marker->req_modifier = SYNC_ALL; @@ -991,7 +962,7 @@ ispscsicmd(xs) iptr = niptr; } - MEMZERO((void *) reqp, UZSIZE); + bzero((void *) reqp, UZSIZE); reqp->req_header.rqs_entry_count = 1; if (isp->isp_type & ISP_HA_FC) { reqp->req_header.rqs_entry_type = RQSTYPE_T2RQS; @@ -1046,19 +1017,12 @@ ispscsicmd(xs) reqp->req_flags = 0; } } + reqp->req_lun_trn = XS_LUN(xs); reqp->req_target = XS_TGT(xs); if (isp->isp_type & ISP_HA_SCSI) { - reqp->req_lun_trn = XS_LUN(xs); reqp->req_cdblen = XS_CDBLEN(xs); - } else { -#ifdef SCCLUN - reqp->req_scclun = XS_LUN(xs); -#else - reqp->req_lun_trn = XS_LUN(xs); -#endif - } - MEMCPY(reqp->req_cdb, XS_CDBP(xs), XS_CDBLEN(xs)); + bcopy((void *)XS_CDBP(xs), reqp->req_cdb, XS_CDBLEN(xs)); IDPRINTF(5, ("%s(%d.%d): START%d cmd 0x%x datalen %d\n", isp->isp_name, XS_TGT(xs), XS_LUN(xs), reqp->req_header.rqs_seqno, @@ -1158,18 +1122,7 @@ isp_control(isp, ctl, arg) break; } mbs.param[0] = MBOX_ABORT; -#ifdef SCCLUN - if (isp->isp_type & ISP_HA_FC) { - mbs.param[1] = XS_TGT(xs) << 8; - mbs.param[4] = 0; - mbs.param[5] = 0; - mbs.param[6] = XS_LUN(xs); - } else { - mbs.param[1] = XS_TGT(xs) << 8 | XS_LUN(xs); - } -#else - mbs.param[1] = XS_TGT(xs) << 8 | XS_LUN(xs); -#endif + mbs.param[1] = XS_TGT(xs) | XS_LUN(xs); mbs.param[2] = (i+1) >> 16; mbs.param[3] = (i+1) & 0xffff; isp_mboxcmd(isp, &mbs); @@ -1227,7 +1180,7 @@ isp_intr(arg) if (ISP_READ(isp, BIU_SEMA) & 1) { u_int16_t mbox = ISP_READ(isp, OUTMAILBOX0); - if (isp_parse_async(isp, (int) mbox)) + if (isp_parse_async(isp, mbox)) return (1); ISP_WRITE(isp, BIU_SEMA, 0); } @@ -1319,14 +1272,14 @@ isp_intr(arg) XS_STS(xs) = sp->req_scsi_status & 0xff; if (isp->isp_type & ISP_HA_SCSI) { if (sp->req_state_flags & RQSF_GOT_SENSE) { - MEMCPY(XS_SNSP(xs), sp->req_sense_data, + bcopy(sp->req_sense_data, XS_SNSP(xs), XS_SNSLEN(xs)); XS_SNS_IS_VALID(xs); } } else { if (XS_STS(xs) == SCSI_CHECK) { XS_SNS_IS_VALID(xs); - MEMCPY(XS_SNSP(xs), sp->req_sense_data, + bcopy(sp->req_sense_data, XS_SNSP(xs), XS_SNSLEN(xs)); sp->req_state_flags |= RQSF_GOT_SENSE; } @@ -1346,9 +1299,8 @@ isp_intr(arg) } else { PRINTF("%s: unknown return %x\n", isp->isp_name, sp->req_header.rqs_entry_type); - if (XS_NOERR(xs)) { + if (XS_NOERR(xs)) XS_SETERR(xs, HBA_BOTCH); - } } if (isp->isp_type & ISP_HA_SCSI) { XS_RESID(xs) = sp->req_resid; @@ -1368,8 +1320,7 @@ isp_intr(arg) */ if (XS_STS(xs) == SCSI_CHECK && !(XS_IS_SNS_VALID(xs))) { if (XS_NOERR(xs)) { - PRINTF("%s: ARQ failure for target %d lun %d\n", - isp->isp_name, XS_TGT(xs), XS_LUN(xs)); + PRINTF("%s: ARQ Failure\n", isp->isp_name); XS_SETERR(xs, HBA_ARQFAIL); } } @@ -1389,8 +1340,9 @@ isp_intr(arg) } ISP_WRITE(isp, INMAILBOX5, optr); - if (isp->isp_nactive > 0) - isp->isp_nactive--; + isp->isp_nactive--; + if (isp->isp_nactive < 0) + isp->isp_nactive = 0; complist[ndone++] = xs; /* defer completion call until later */ } /* @@ -1417,15 +1369,12 @@ isp_intr(arg) static int isp_parse_async(isp, mbox) struct ispsoftc *isp; - int mbox; + u_int16_t mbox; { switch (mbox) { case ASYNC_BUS_RESET: PRINTF("%s: SCSI bus reset detected\n", isp->isp_name); isp->isp_sendmarker = 1; -#ifdef ISP_TARGET_MODE - isp_notify_ack(isp, NULL); -#endif break; case ASYNC_SYSTEM_ERROR: @@ -1452,16 +1401,10 @@ isp_parse_async(isp, mbox) case ASYNC_TIMEOUT_RESET: PRINTF("%s: timeout initiated SCSI bus reset\n", isp->isp_name); isp->isp_sendmarker = 1; -#ifdef ISP_TARGET_MODE - isp_notify_ack(isp, NULL); -#endif break; - case ASYNC_DEVICE_RESET: - PRINTF("%s: device reset\n", isp->isp_name); -#ifdef ISP_TARGET_MODE - isp_notify_ack(isp, NULL); -#endif + case ASYNC_UNSPEC_TMODE: + PRINTF("%s: mystery async target completion\n", isp->isp_name); break; case ASYNC_EXTMSG_UNDERRUN: @@ -1497,7 +1440,6 @@ isp_parse_async(isp, mbox) break; case ASYNC_CTIO_DONE: - /* Should only occur when Fast Posting Set for 2100s */ PRINTF("%s: CTIO done\n", isp->isp_name); break; @@ -1515,9 +1457,6 @@ isp_parse_async(isp, mbox) case ASYNC_LOOP_RESET: PRINTF("%s: Loop RESET\n", isp->isp_name); -#ifdef ISP_TARGET_MODE - isp_notify_ack(isp, NULL); -#endif break; case ASYNC_PDB_CHANGED: @@ -1544,122 +1483,62 @@ isp_handle_other_response(isp, sp, optrp) u_int8_t iptr, optr; int reqsize = 0; void *ireqp = NULL; -#ifdef ISP_TARGET_MODE - union { - at_entry_t *atio; - at2_entry_t *at2io; - ct_entry_t *ctio; - ct2_entry_t *ct2io; - lun_entry_t *lunen; - in_entry_t *inot; - in_fcentry_t *inot_fc; - na_entry_t *nack; - na_fcentry_t *nack_fc; - void *voidp; -#define atio un.atio -#define at2io un.at2io -#define ctio un.ctio -#define ct2io un.ct2io -#define lunen un.lunen -#define inot un.inot -#define inot_fc un.inot_fc -#define nack un.nack -#define nack_fc un.nack_fc - } un; - - un.voidp = sp; -#endif - switch (sp->req_header.rqs_entry_type) { case RQSTYPE_REQUEST: return (-1); -#ifdef ISP_TARGET_MODE +#if defined(ISP2100_TARGET_MODE) || defined(ISP_TARGET_MODE) case RQSTYPE_NOTIFY_ACK: { - static const char *f = - "%s: Notify Ack Status 0x%x Sequence Id 0x%x\n" - /* - * The ISP is acknowleding our ack of an Immediate Notify. - */ - if (isp->isp_type & ISP_HA_FC) { - PRINTF(f, isp->isp_name, - nack_fc->na-status, nack_fc->na_seqid); - } else { - PRINTF(f, isp->isp_name, - nack->na_status, nack->na_seqid); - } + ispnotify_t *spx = (ispnotify_t *) sp; + PRINTF("%s: Immediate Notify Ack %d.%d Status 0x%x Sequence " + "0x%x\n", isp->isp_name, spx->req_initiator, spx->req_lun, + spx->req_status, spx->req_sequence); break; } case RQSTYPE_NOTIFY: { - u_int16_t seqid, status; - - /* - * Either the ISP received a SCSI message it cannot handle - * or some other out of band condition (e.g., Port Logout) - * or it is returning an Immediate Notify entry we sent. - */ - if (isp->isp_type & ISP_HA_FC) { - status = inot_fc->status; - seqid = inot_fc->in_seqid; - } else { - status = inot->status; - seqid = inot->seqid & 0xff; - } - PRINTF("%s: Immediate Notify Status 0x%x Sequence Id 0x%x\n", - isp->isp_name, status, seqid); - - switch (status) { - case IN_MSG_RECEIVED: - case IN_IDE_RECEIVED: - ptisp_got_msg(ptp, &inot); - break; - case IN_RSRC_UNAVAIL: - PRINTF("%s: Firmware out of ATIOs\n", isp->isp_name); - break; - case IN_ABORT_TASK: - PRINTF("%s: Abort Task iid %d rx_id 0x%x\n", - inot_fc->in_iid, seqid); - break; - case IN_PORT_LOGOUT: - PRINTF("%s: Port Logout for Initiator %d\n", - isp->isp_name, inot_fc->in_iid); - break; - default: - PRINTF("%s: bad status (0x%x) in Immediate Notify\n", - isp->isp_name, status); - break; - - } - isp_notify_ack(isp, un.voidp); - reqsize = 0; + ispnotify_t *spx = (ispnotify_t *) sp; + + PRINTF("%s: Notify loopid %d to lun %d req_status 0x%x " + "req_task_flags 0x%x seq 0x%x\n", isp->isp_name, spx->req_initiator, spx->req_lun, spx->req_status, + spx->req_task_flags, spx->req_sequence); + reqsize = sizeof (*spx); + spx->req_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK; + spx->req_header.rqs_entry_count = 1; + spx->req_header.rqs_flags = 0; + spx->req_header.rqs_seqno = isp->isp_seqno++; + spx->req_handle = (spx->req_initiator<<16) | RQSTYPE_NOTIFY_ACK; + if (spx->req_status == IN_RSRC_UNAVAIL) + spx->req_flags = LUN_INCR_CMD; + else if (spx->req_status == IN_NOCAP) + spx->req_flags = LUN_INCR_IMMED; + else { + reqsize = 0; + } + ireqp = spx; break; } case RQSTYPE_ENABLE_LUN: - case RQSTYPE_MODIFY_LUN: - if (lunen->req_status != 1) { - PRINTF("%s: ENABLE/MODIFY LUN returned status 0x%x\n", - isp->isp_name, lunen->req_status); + { + isplun_t *ip = (isplun_t *) sp; + if (ip->req_status != 1) { + PRINTF("%s: ENABLE LUN returned status 0x%x\n", + isp->isp_name, ip->req_status); } break; + } case RQSTYPE_ATIO2: { fcparam *fcp = isp->isp_param; ispctiot2_t local, *ct2 = NULL; ispatiot2_t *at2 = (ispatiot2_t *) sp; - int s, lun; + int s; -#ifdef SCCLUN - lun = at2->req_scclun; -#else - lun = at2->req_lun; -#endif - PRINTF("%s: atio2 loopid %d for lun %d rxid 0x%x flags0x%x " - "tflags0x%x ecodes0x%x rqstatus0x%x\n", isp->isp_name, - at2->req_initiator, lun, at2->req_rxid, - at2->req_flags, at2->req_taskflags, at2->req_execodes, - at2->req_status); + PRINTF("%s: atio2 loopid %d for lun %d rxid 0x%x flags 0x%x " + "task flags 0x%x exec codes 0x%x\n", isp->isp_name, + at2->req_initiator, at2->req_lun, at2->req_rxid, + at2->req_flags, at2->req_taskflags, at2->req_execodes); switch (at2->req_status & ~ATIO_SENSEVALID) { case ATIO_PATH_INVALID: @@ -1692,15 +1571,13 @@ isp_handle_other_response(isp, sp, optrp) } PRINTF("%s: datalen %d cdb0=0x%x\n", isp->isp_name, at2->req_datalen, at2->req_cdb[0]); - MEMZERO((void *) ct2, sizeof (*ct2)); + bzero ((void *) ct2, sizeof (*ct2)); ct2->req_header.rqs_entry_type = RQSTYPE_CTIO2; ct2->req_header.rqs_entry_count = 1; ct2->req_header.rqs_flags = 0; ct2->req_header.rqs_seqno = isp->isp_seqno++; - ct2->req_handle = (at2->req_initiator << 16) | lun; -#ifndef SCCLUN - ct2->req_lun = lun; -#endif + ct2->req_handle = (at2->req_initiator << 16) | at2->req_lun; + ct2->req_lun = at2->req_lun; ct2->req_initiator = at2->req_initiator; ct2->req_rxid = at2->req_rxid; @@ -1718,16 +1595,16 @@ isp_handle_other_response(isp, sp, optrp) ct2->req_seg_count = 1; if (at2->req_cdb[0] == 0x12) { s = sizeof(tgtiqd); - MEMCPY(fcp->isp_scratch, tgtiqd, s); + bcopy((void *)tgtiqd, fcp->isp_scratch, s); } else { s = at2->req_datalen; - MEMZERO(fcp->isp_scratch, s); + bzero(fcp->isp_scratch, s); } ct2->req_m.mode0.req_dataseg[0].ds_base = fcp->isp_scdma; ct2->req_m.mode0.req_dataseg[0].ds_count = s; ct2->req_m.mode0.req_datalen = s; -#if 1 +#if 0 if (at2->req_datalen < s) { ct2->req_m.mode1.req_scsi_status |= CTIO2_RESP_VALID|CTIO2_RSPOVERUN; @@ -1741,7 +1618,7 @@ isp_handle_other_response(isp, sp, optrp) default: /* ALL OTHERS */ ct2->req_flags |= CTIO_NODATA | CTIO2_SMODE1; ct2->req_m.mode1.req_scsi_status = 0; -#if 1 +#if 0 if (at2->req_datalen) { ct2->req_m.mode1.req_scsi_status |= CTIO2_RSPUNDERUN; @@ -1773,8 +1650,9 @@ isp_handle_other_response(isp, sp, optrp) ct2->req_m.mode1.req_sense_len = 18; ct2->req_m.mode1.req_scsi_status |= at2->req_scsi_status; - MEMCPY(ct2->req_m.mode1.req_response, - at2->req_sense, sizeof (at2->req_sense)); + bcopy((void *)at2->req_sense, + (void *)ct2->req_m.mode1.req_response, + sizeof (at2->req_sense)); } break; } @@ -1801,15 +1679,6 @@ isp_handle_other_response(isp, sp, optrp) ireqp = at2; break; } -#undef atio -#undef at2io -#undef ctio -#undef ct2io -#undef lunen -#undef inot -#undef inot_fc -#undef nack -#undef nack_fc #endif default: PRINTF("%s: other response type %x\n", isp->isp_name, @@ -1826,7 +1695,7 @@ isp_handle_other_response(isp, sp, optrp) PRINTF("%s: Request Queue Overflow other response\n", isp->isp_name); } else { - MEMCPY(reqp, ireqp, reqsize); + bcopy(ireqp, reqp, reqsize); ISP_WRITE(isp, INMAILBOX4, iptr); isp->isp_reqidx = iptr; } @@ -1834,37 +1703,7 @@ isp_handle_other_response(isp, sp, optrp) return (0); } -#ifdef ISP_TARGET_MODE - -static void isp_tmd_newcmd_dflt __P((void *, tmd_cmd_t *)); -static void isp_tmd_event_dflt __P((void *, int)); -static void isp_tmd_notify_dflt __P((void *, tmd_notify_t *)); - -static void isp_tgt_data_xfer __P ((tmd_cmd_t *)); -static void isp_tgt_endcmd __P ((tmd_cmd_t *, u_int8_t)); -static void isp_tgt_done __P ((tmd_cmd_t *)); - -static void -isp_tmd_newcmd_dflt(arg0, cmdp) - void *arg0; - tmd_cmd_t *cmdp; -{ -} - -static void -isp_tmd_event_dflt(arg0, event) - void *arg0; - int event; -{ -} - -static void -isp_tmd_notify_dflt(arg0, npt) - void *arg0; - tmd_notify_t *npt; -{ -} - +#if defined(ISP2100_TARGET_MODE) || defined(ISP_TARGET_MODE) /* * Locks held, and ints disabled (if FC). * @@ -1890,14 +1729,13 @@ isp_modify_lun(isp, lun, icnt, ccnt) return (-1); } - MEMZERO((void *) ip, sizeof (*ip)); + bzero((void *) ip, sizeof (*ip)); ip->req_header.rqs_entry_type = RQSTYPE_ENABLE_LUN; ip->req_header.rqs_entry_count = 1; + ip->req_header.rqs_flags = 0; ip->req_header.rqs_seqno = isp->isp_seqno++; ip->req_handle = RQSTYPE_ENABLE_LUN; - if (isp->isp_type & ISP_HA_SCSI) { - ip->req_lun = lun; - } + ip->req_lun = lun; ip->req_cmdcount = ccnt; ip->req_imcount = icnt; ip->req_timeout = 0; /* default 30 seconds */ @@ -1905,263 +1743,6 @@ isp_modify_lun(isp, lun, icnt, ccnt) isp->isp_reqidx = iptr; return (0); } - -static void -isp_notify_ack(isp, ptrp) - struct ispsoftc *isp; - void *ptrp; -{ - void *reqp; - u_int8_t iptr, optr; - union { - na_fcentry_t _naf; - na_entry_t _nas; - } un; - - MEMZERO((caddr_t)&un, sizeof (un)); - un._nas.na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK; - un._nas.na_header.rqs_entry_count = 1; - - if (isp->isp_type & ISP_HA_FC) { - na_fcentry_t *na = &un._nas; - if (ptrp) { - in_fcentry_t *inp = ptrp; - na->na_iid = inp->in_iid; - na->na_lun = inp->in_lun; - na->na_task_flags = inp->in_task_flags; - na->na_seqid = inp->in_seqid; - na->na_status = inp->in_status; - } else { - na->na_flags = NAFC_RST_CLRD; - } - } else { - na_entry_t *na = &un._nas; - if (ptrp) { - in_entry_t *inp = ptrp; - na->na_iid = inp->in_iid; - na->na_lun = inp->in_lun; - na->na_tgt = inp->in_tgt; - na->na_seqid = inp->in_seqid; - } else { - na->na_flags = NA_RST_CLRD; - } - } - optr = isp->isp_reqodx = ISP_READ(isp, OUTMAILBOX4); - iptr = isp->isp_reqidx; - reqp = (void *) ISP_QUEUE_ENTRY(isp->isp_rquest, iptr); - iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN); - if (iptr == optr) { - PRINTF("%s: Request Queue Overflow For isp_notify_ack\n", - isp->isp_name); - } else { - MEMCPY(reqp, ireqp, sizeof (un)); - ISP_WRITE(isp, INMAILBOX4, iptr); - isp->isp_reqidx = iptr; - } -} - -/* - * These are dummy stubs for now until the outside framework is plugged in. - */ - -static void -isp_handle_atio (isp, aep) - struct ispsoftc *isp; - at_entry_t *aep; -{ - int status, connected; - tmd_cmd_t local, *cdp = &local; - - /* - * Get the ATIO status and see if we're still connected. - */ - status = aep->at_status; - connected = ((aep->at_flags & AT_NODISC) != 0); - - PRINTF("%s: ATIO status=0x%x, connected=%d\n", isp->isp_name, - status, connected); - - /* - * The firmware status (except for the SenseValid bit) indicates - * why this ATIO was sent to us. - * If SenseValid is set, the firware has recommended Sense Data. - * If the Disconnects Disabled bit is set in the flags field, - * we're still connected on the SCSI bus - i.e. the initiator - * did not set DiscPriv in the identify message. We don't care - * about this so it's ignored. - */ - switch(status & ~TGTSVALID) { - case AT_PATH_INVALID: - /* - * ATIO rejected by the firmware due to disabled lun. - */ - PRINTF("%s: Firmware rejected ATIO for disabled lun %d\n", - isp->isp_name, aep->at_lun); - break; - - case AT_PHASE_ERROR: - /* - * Bus Pase Sequence error. - * - * The firmware should have filled in the correct - * sense data. - */ - - - if (status & TGTSVALID) { - MEMCPY(&cdp->cd_sensedata, aep->at_sense, - sizeof (cdp->cd_sensedata)); - PRINTF("%s: Bus Phase Sequence error key 0x%x\n", - isp->isp_name, cdp->cd_sensedata[2] & 0xf); - } else { - PRINTF("%s: Bus Phase Sequence With No Sense\n", - isp->isp_name); - } - (*isp->isp_tmd_newcmd)(isp, cdp); - break; - - case AT_NOCAP: - /* - * Requested Capability not available - * We sent an ATIO that overflowed the firmware's - * command resource count. - */ - PRINTF("%s: Firmware rejected ATIO, command count overflow\n", - isp->isp_name); - break; - - case AT_BDR_MSG: - /* - * If we send an ATIO to the firmware to increment - * its command resource count, and the firmware is - * recovering from a Bus Device Reset, it returns - * the ATIO with this status. - */ - PRINTF("%s: ATIO returned with BDR received\n", isp->isp_name); - break; - - case AT_CDB: - /* - * New CDB - */ - cdp->cd_hba = isp; - cdp->cd_iid = aep->at_iid; - cdp->cd_tgt = aep->at_tgt; - cdp->cd_lun = aep->at_lun; - cdp->cd_tagtype = aep->at_tag_type; - cdp->cd_tagval = aep->at_tag_val; - MEMCPY(cdp->cd_cdb, aep->at_cdb, 16); - PRINTF("%s: CDB 0x%x itl %d/%d/%d\n", isp->isp_name, - cdp->cd_cdb[0], cdp->cd_iid, cdp->cd_tgt, cdp->cd_lun); - (*isp->isp_tmd_newcmd)(isp, cdp); - break; - - default: - PRINTF("%s: Unknown status (0x%x) in ATIO\n", - isp->isp_name, status); - cdp->cd_hba = isp; - cdp->cd_iid = aep->at_iid; - cdp->cd_tgt = aep->at_tgt; - cdp->cd_lun = aep->at_lun; - cdp->cd_tagtype = aep->at_tag_type; - cdp->cd_tagval = aep->at_tag_val; - isp_tgtcmd_done(cdp); - break; - } -} - -static void -isp_handle_atio2(isp, aep) - struct ispsoftc *isp; - at2_entry_t *aep; -{ - int status; - tmd_cmd_t local, *cdp = &local; - - /* - * Get the ATIO2 status. - */ - status = aep->at_status; - PRINTD("%s: ATIO2 status=0x%x\n", status); - - /* - * The firmware status (except for the SenseValid bit) indicates - * why this ATIO was sent to us. - * If SenseValid is set, the firware has recommended Sense Data. - */ - switch(status & ~TGTSVALID) { - case AT_PATH_INVALID: - /* - * ATIO rejected by the firmware due to disabled lun. - */ - PRINTF("%s: Firmware rejected ATIO2 for disabled lun %d\n", - isp->isp_name, aep->at_lun); - break; - - case AT_NOCAP: - /* - * Requested Capability not available - * We sent an ATIO that overflowed the firmware's - * command resource count. - */ - PRINTF("%s: Firmware rejected ATIO2, command count overflow\n", - isp->isp_name); - break; - - case AT_BDR_MSG: - /* - * If we send an ATIO to the firmware to increment - * its command resource count, and the firmware is - * recovering from a Bus Device Reset, it returns - * the ATIO with this status. - */ - PRINTF("%s: ATIO2 returned with BDR rcvd\n", isp->isp_name); - break; - - case AT_CDB: - /* - * New CDB - */ - cdp->cd_hba = isp; - cdp->cd_iid = aep->at_iid; - cdp->cd_tgt = 0; - cdp->cd_lun = aep->at_lun; - MEMCPY(cdp->cd_cdb, aep->at_cdb, 16); - cdp->cd_rxid = aep->at_rxid; - cdp->cp_origdlen = aep->at_datalen; - cdp->cp_totbytes = 0; - PRINTF("%s: CDB 0x%x rx_id 0x%x itl %d/%d/%d dlen %d\n", - isp->isp_name, cdp->cd_cdb[0], cdp->cd_tagval, cdp->cd_iid, - cdp->cd_tgt, cdp->cd_lun, aep->at_datalen); - (*isp->isp_tmd_newcmd)(isp, cdp); - break; - - default: - PRINTF("%s: Unknown status (0x%x) in ATIO2\n", - isp->isp_name, status); - cdp->cd_hba = isp; - cdp->cd_iid = aep->at_iid; - cdp->cd_tgt = aep->at_tgt; - cdp->cd_lun = aep->at_lun; - cdp->cp_rxid = aep->at_rxid; - isp_tgtcmd_done(cdp); - break; - } -} - -static void -isp_handle_ctio(isp, cep) - struct ispsoftc *isp; - ct_entry_t *aep; -{ -} - -static void -isp_handle_ctio2(isp, cep) - struct ispsoftc *isp; - at2_entry_t *aep; -{ -} #endif static void @@ -2288,7 +1869,7 @@ isp_parse_status(isp, sp, xs) break; case RQCS_UNEXP_BUS_FREE: - PRINTF("%s: target %d lun %d had an unexpected bus free\n", + PRINTF("%s: target %d lun %d had unexeptected bus free\n", isp->isp_name, XS_TGT(xs), XS_LUN(xs)); break; @@ -2323,17 +1904,8 @@ isp_parse_status(isp, sp, xs) break; case RQCS_QUEUE_FULL: - PRINTF("%s: internal queues full for target %d lun %d " - "status 0x%x\n", isp->isp_name, XS_TGT(xs), XS_LUN(xs), - XS_STS(xs)); - /* - * If QFULL or some other status byte is set, then this - * isn't an error, per se. - */ - if (XS_STS(xs) != 0) { - XS_SETERR(xs, HBA_NOERROR); - return; - } + PRINTF("%s: internal queues full for target %d lun %d\n", + isp->isp_name, XS_TGT(xs), XS_LUN(xs)); break; case RQCS_PHASE_SKIPPED: @@ -2556,29 +2128,6 @@ isp_mboxcmd(isp, mbp) } - /* - * Check for variants - */ -#ifdef SCCLUN - if (isp->isp_type & ISP_HA_FC) { - switch (mbp->param[0]) { - case MBOX_ABORT: - inparam = 7; - break; - case MBOX_ABORT_DEVICE: - case MBOX_START_QUEUE: - case MBOX_STOP_QUEUE: - case MBOX_SINGLE_STEP_QUEUE: - case MBOX_ABORT_QUEUE: - case MBOX_GET_DEV_QUEUE_STATUS: - inparam = 3; - break; - default: - break; - } - } -#endif - command_known: /* @@ -2597,7 +2146,7 @@ command_known: isp->isp_name, ISP_READ(isp, BIU_ISR)); if (ISP_READ(isp, BIU_SEMA) & 1) { u_int16_t mbox = ISP_READ(isp, OUTMAILBOX0); - if (isp_parse_async(isp, (int) mbox)) + if (isp_parse_async(isp, mbox)) return; ISP_WRITE(isp, BIU_SEMA, 0); } @@ -2726,13 +2275,8 @@ command_known: isp->isp_name, opcode); break; - /* - * Be silent about these... - */ - case ASYNC_LOOP_UP: case ASYNC_LIP_OCCURRED: - case ASYNC_PDB_CHANGED: break; default: @@ -2850,7 +2394,6 @@ again: isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { if (mbs.param[0] == ASYNC_LIP_OCCURRED || - mbs.param[0] == ASYNC_PDB_CHANGED || mbs.param[0] == ASYNC_LOOP_UP) { if (once++ < 2) { goto again; @@ -3106,14 +2649,59 @@ isp_restart(isp) if (XS_NULL(xs)) { continue; } - if (isp->isp_nactive > 0) - isp->isp_nactive--; + isp->isp_nactive--; + if (isp->isp_nactive < 0) { + isp->isp_nactive = 0; + } XS_RESID(xs) = XS_XFRLEN(xs); XS_SETERR(xs, HBA_BUSRESET); XS_CMD_DONE(xs); } } +void +isp_watch(arg) + void *arg; +{ + int i; + struct ispsoftc *isp = arg; + ISP_SCSI_XFER_T *xs; + ISP_LOCKVAL_DECL; + + /* + * Look for completely dead commands (but not polled ones). + */ + ISP_ILOCK(isp); + for (i = 0; i < RQUEST_QUEUE_LEN; i++) { + if ((xs = (ISP_SCSI_XFER_T *) isp->isp_xflist[i]) == NULL) { + continue; + } + if (XS_TIME(xs) == 0) { + continue; + } + XS_TIME(xs) -= (WATCH_INTERVAL * 1000); + /* + * Avoid later thinking that this + * transaction is not being timed. + * Then give ourselves to watchdog + * periods of grace. + */ + if (XS_TIME(xs) == 0) + XS_TIME(xs) = 1; + else if (XS_TIME(xs) > -(2 * WATCH_INTERVAL * 1000)) { + continue; + } + if (isp_control(isp, ISPCTL_ABORT_CMD, xs)) { + PRINTF("%s: isp_watch failed to abort command\n", + isp->isp_name); + isp_restart(isp); + break; + } + } + ISP_IUNLOCK(isp); + RESTART_WATCHDOG(isp_watch, isp); +} + /* * Miscellaneous debug statements. */ @@ -3159,7 +2747,7 @@ isp_prtstst(sp) static char * isp2100_fw_statename(state) - int state; + u_int8_t state; { switch(state) { case FW_CONFIG_WAIT: return "Config Wait"; @@ -3232,9 +2820,9 @@ isp_read_nvram(isp) if (isp->isp_type & ISP_HA_SCSI) { sdparam *sdp = (sdparam *) isp->isp_param; + /* XXX CHECK THIS FOR SANITY XXX */ sdp->isp_fifo_threshold = - ISP_NVRAM_FIFO_THRESHOLD(nvram_data) | - (ISP_NVRAM_FIFO_THRESHOLD_128(nvram_data) << 2); + ISP_NVRAM_FIFO_THRESHOLD(nvram_data); sdp->isp_initiator_id = ISP_NVRAM_INITIATOR_ID(nvram_data); @@ -3276,6 +2864,8 @@ isp_read_nvram(isp) sdp->isp_tag_aging = ISP_NVRAM_TAG_AGE_LIMIT(nvram_data); + /* XXX ISP_NVRAM_FIFO_THRESHOLD_128 XXX */ + sdp->isp_selection_timeout = ISP_NVRAM_SELECTION_TIMEOUT(nvram_data); @@ -3284,12 +2874,6 @@ isp_read_nvram(isp) sdp->isp_fast_mttr = ISP_NVRAM_FAST_MTTR_ENABLE(nvram_data); -#if 0 - PRINTF("%s: fifo_threshold = 0x%x cbena%d dbena%d\n", - isp->isp_name, sdp->isp_fifo_threshold, - sdp->isp_cmd_dma_burst_enable, - sdp->isp_data_dma_burst_enabl); -#endif for (i = 0; i < 16; i++) { sdp->isp_devparam[i].dev_enable = ISP_NVRAM_TGT_DEVICE_ENABLE(nvram_data, i); @@ -3364,9 +2948,8 @@ isp_read_nvram(isp) fcp->isp_wwn = wwnstore.full64; wwnstore.full64 = ISP2100_NVRAM_BOOT_NODE_NAME(nvram_data); if (wwnstore.full64 != 0) { - PRINTF("%s: BOOT DEVICE WWN 0x%08x%08x\n", - isp->isp_name, wwnstore.wds.hi32, - wwnstore.wds.lo32); + PRINTF("%s: BOOT DEVICE WWN 0x%08x%08x\n", isp->isp_name, + wwnstore.wds.hi32, wwnstore.wds.lo32); } fcp->isp_maxalloc = ISP2100_NVRAM_MAXIOCBALLOCATION(nvram_data); diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c index 21d1acd172b9d..654c17cc90e8d 100644 --- a/sys/dev/isp/isp_freebsd.c +++ b/sys/dev/isp/isp_freebsd.c @@ -1,5 +1,4 @@ -/* $Id: $ */ -/* release_12_28_98_A */ +/* $FreeBSD$ */ /* * Platform (FreeBSD) dependent common attachment code for Qlogic adapters. * @@ -42,7 +41,8 @@ static void isp_poll __P((struct cam_sim *)); static void isp_action __P((struct cam_sim *, union ccb *)); void -isp_attach(struct ispsoftc *isp) +isp_attach(isp) + struct ispsoftc *isp; { struct ccb_setasync csa; struct cam_devq *devq; @@ -96,7 +96,11 @@ isp_attach(struct ispsoftc *isp) } static void -isp_async(void *cbarg, u_int32_t code, struct cam_path *path, void *arg) +isp_async(cbarg, code, path, arg) + void *cbarg; + u_int32_t code; + struct cam_path *path; + void *arg; { struct cam_sim *sim; struct ispsoftc *isp; @@ -130,14 +134,17 @@ isp_async(void *cbarg, u_int32_t code, struct cam_path *path, void *arg) } static void -isp_poll(struct cam_sim *sim) +isp_poll(sim) + struct cam_sim *sim; { isp_intr((struct ispsoftc *) cam_sim_softc(sim)); } static void -isp_action(struct cam_sim *sim, union ccb *ccb) +isp_action(sim, ccb) + struct cam_sim *sim; + union ccb *ccb; { int s, tgt, error; struct ispsoftc *isp; @@ -188,13 +195,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb) } else { if (ccb->ccb_h.target_id > (MAX_FC_TARG-1)) { ccb->ccb_h.status = CAM_PATH_INVALID; -#ifdef SCCLUN } else if (ccb->ccb_h.target_lun > 15) { ccb->ccb_h.status = CAM_PATH_INVALID; -#else - } else if (ccb->ccb_h.target_lun > 65535) { - ccb->ccb_h.status = CAM_PATH_INVALID; -#endif } } if (ccb->ccb_h.status == CAM_PATH_INVALID) { @@ -205,14 +207,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) break; } - CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_INFO, - ("cdb[0]=0x%x dlen%d\n", - (ccb->ccb_h.flags & CAM_CDB_POINTER)? - ccb->csio.cdb_io.cdb_ptr[0]: - ccb->csio.cdb_io.cdb_bytes[0], ccb->csio.dxfer_len)); - s = splcam(); - DISABLE_INTS(isp); switch (ispscsicmd((ISP_SCSI_XFER_T *) ccb)) { case CMD_QUEUED: ccb->ccb_h.status |= CAM_SIM_QUEUED; @@ -240,7 +235,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb) xpt_done(ccb); break; } - ENABLE_INTS(isp); splx(s); break; @@ -484,26 +478,28 @@ isp_action(struct cam_sim *sim, union ccb *ccb) cpi->max_target = MAX_FC_TARG-1; cpi->initiator_id = ((fcparam *)isp->isp_param)->isp_loopid; -#ifdef SCCLUN - cpi->max_lun = (1 << 16) - 1; -#else - cpi->max_lun = (1 << 4) - 1; -#endif + /* + * XXX: actually, this is not right if we have + * XXX: 1.14 F/W and the second level lun addressing + * XXX: in place. It's also probably not right + * XXX: even for 1.13 f/w. + */ + cpi->max_lun = 15; } else { cpi->initiator_id = ((sdparam *)isp->isp_param)->isp_initiator_id; cpi->max_target = MAX_TARGETS-1; if (isp->isp_fwrev >= ISP_FW_REV(7, 55)) { -#if 0 /* * Too much breakage. */ - cpi->max_lun = (1 << 5) - 1; +#if 0 + cpi->max_lun = 31; #else - cpi->max_lun = (1 << 3) - 1; + cpi->max_lun = 7; #endif } else { - cpi->max_lun = (1 << 3) - 1; + cpi->max_lun = 7; } } @@ -522,50 +518,11 @@ isp_action(struct cam_sim *sim, union ccb *ccb) break; } } - -#define ISPDDB (CAM_DEBUG_INFO|CAM_DEBUG_TRACE|CAM_DEBUG_CDB) -void -isp_done(struct ccb_scsiio *sccb) -{ - struct ispsoftc *isp = XS_ISP(sccb); - - if (XS_NOERR(sccb)) - XS_SETERR(sccb, CAM_REQ_CMP); - sccb->ccb_h.status &= ~CAM_STATUS_MASK; - sccb->ccb_h.status |= sccb->ccb_h.spriv_field0; - if ((sccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP && - (sccb->scsi_status != SCSI_STATUS_OK)) { - sccb->ccb_h.status &= ~CAM_STATUS_MASK; - sccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; - } - if ((sccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { - if ((sccb->ccb_h.status & CAM_DEV_QFRZN) == 0) { - IDPRINTF(3, ("%s: freeze devq %d.%d ccbstat 0x%x\n", - isp->isp_name, sccb->ccb_h.target_id, - sccb->ccb_h.target_lun, sccb->ccb_h.status)); - xpt_freeze_devq(sccb->ccb_h.path, 1); - sccb->ccb_h.status |= CAM_DEV_QFRZN; - } - } - if (isp->isp_osinfo.simqfrozen) { - sccb->ccb_h.status |= CAM_RELEASE_SIMQ; - isp->isp_osinfo.simqfrozen = 0; - } - sccb->ccb_h.status &= ~CAM_SIM_QUEUED; - if (CAM_DEBUGGED(sccb->ccb_h.path, ISPDDB) && - (sccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { - xpt_print_path(sccb->ccb_h.path); - printf("cam completion status 0x%x\n", sccb->ccb_h.status); - } - xpt_done((union ccb *) sccb); -} - #else static void ispminphys __P((struct buf *)); static u_int32_t isp_adapter_info __P((int)); static int ispcmd __P((ISP_SCSI_XFER_T *)); -static void isp_watch __P((void *arg)); static struct scsi_adapter isp_switch = { ispcmd, ispminphys, 0, 0, isp_adapter_info, "isp", { 0, 0 } @@ -580,7 +537,8 @@ static int isp_poll __P((struct ispsoftc *, ISP_SCSI_XFER_T *, int)); * Complete attachment of hardware, include subdevices. */ void -isp_attach(struct ispsoftc *isp) +isp_attach(isp) + struct ispsoftc *isp; { struct scsibus_data *scbus; @@ -589,7 +547,6 @@ isp_attach(struct ispsoftc *isp) return; } isp->isp_state = ISP_RUNSTATE; - START_WATCHDOG(isp); isp->isp_osinfo._link.adapter_unit = isp->isp_osinfo.unit; isp->isp_osinfo._link.adapter_softc = isp; @@ -626,7 +583,8 @@ isp_attach(struct ispsoftc *isp) */ static void -ispminphys(struct buf *bp) +ispminphys(bp) + struct buf *bp; { /* * Only the 10X0 has a 24 bit limit. @@ -637,7 +595,8 @@ ispminphys(struct buf *bp) } static u_int32_t -isp_adapter_info(int unit) +isp_adapter_info(unit) + int unit; { /* * XXX: FIND ISP BASED UPON UNIT AND GET REAL QUEUE LIMIT FROM THAT @@ -646,7 +605,8 @@ isp_adapter_info(int unit) } static int -ispcmd(ISP_SCSI_XFER_T *xs) +ispcmd(xs) + ISP_SCSI_XFER_T *xs; { struct ispsoftc *isp; int r; @@ -683,7 +643,10 @@ ispcmd(ISP_SCSI_XFER_T *xs) } static int -isp_poll(struct ispsoftc *isp, ISP_SCSI_XFER_T *xs, int mswait) +isp_poll(isp, xs, mswait) + struct ispsoftc *isp; + ISP_SCSI_XFER_T *xs; + int mswait; { while (mswait) { @@ -698,74 +661,4 @@ isp_poll(struct ispsoftc *isp, ISP_SCSI_XFER_T *xs, int mswait) } return (1); } - -static void -isp_watch(void *arg) -{ - int i; - struct ispsoftc *isp = arg; - ISP_SCSI_XFER_T *xs; - ISP_ILOCKVAL_DECL; - - /* - * Look for completely dead commands (but not polled ones). - */ - ISP_ILOCK(isp); - for (i = 0; i < RQUEST_QUEUE_LEN; i++) { - if ((xs = (ISP_SCSI_XFER_T *) isp->isp_xflist[i]) == NULL) { - continue; - } - if (XS_TIME(xs) == 0) { - continue; - } - XS_TIME(xs) -= (WATCH_INTERVAL * 1000); - /* - * Avoid later thinking that this - * transaction is not being timed. - * Then give ourselves to watchdog - * periods of grace. - */ - if (XS_TIME(xs) == 0) - XS_TIME(xs) = 1; - else if (XS_TIME(xs) > -(2 * WATCH_INTERVAL * 1000)) { - continue; - } - if (isp_control(isp, ISPCTL_ABORT_CMD, xs)) { - printf("%s: isp_watch failed to abort command\n", - isp->isp_name); - isp_restart(isp); - break; - } - } - RESTART_WATCHDOG(isp_watch, arg); - ISP_IUNLOCK(isp); -} #endif - -/* - * Free any associated resources prior to decommissioning and - * set the card to a known state (so it doesn't wake up and kick - * us when we aren't expecting it to). - * - * Locks are held before coming here. - */ -void -isp_uninit(struct ispsoftc *isp) -{ - ISP_ILOCKVAL_DECL; - ISP_ILOCK(isp); - /* - * Leave with interrupts disabled. - */ - DISABLE_INTS(isp); - - /* - * Turn off the watchdog (if active). - */ - STOP_WATCHDOG(isp_watch, isp); - - /* - * And out... - */ - ISP_IUNLOCK(isp); -} diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h index 3e2e84328fc76..6677b7c29bf95 100644 --- a/sys/dev/isp/isp_freebsd.h +++ b/sys/dev/isp/isp_freebsd.h @@ -1,5 +1,4 @@ -/* $Id: isp_freebsd.h,v 1.8 1999/01/10 02:51:06 mjacob Exp $ */ -/* release_12_28_98_A+ */ +/* $FreeBSD$ */ /* * Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions (non CAM version) *--------------------------------------- @@ -36,7 +35,7 @@ #define _ISP_FREEBSD_H #define ISP_PLATFORM_VERSION_MAJOR 0 -#define ISP_PLATFORM_VERSION_MINOR 98 +#define ISP_PLATFORM_VERSION_MINOR 97 #include <sys/param.h> @@ -80,11 +79,7 @@ struct isposinfo { #define IDPRINTF(lev, x) if (isp->isp_dblev >= lev) printf x #define DFLT_DBLEVEL 1 -#define MEMZERO BZERO -#define MEMCPY(dst, src, amt) bcopy((src), (dst), (amt)) - #define ISP_LOCKVAL_DECL int isp_spl_save -#define ISP_ILOCKVAL_DECL ISP_LOCKVAL_DECL #define ISP_UNLOCK(isp) (void) splx(isp_spl_save) #define ISP_LOCK(isp) isp_spl_save = splbio() #define ISP_ILOCK(isp) ISP_LOCK(isp) @@ -103,7 +98,7 @@ struct isposinfo { #define XS_STS(xs) (xs)->status #define XS_TIME(xs) (xs)->timeout #define XS_SNSP(xs) (&(xs)->sense) -#define XS_SNSLEN(xs) (sizeof((xs)->sense)) +#define XS_SNSLEN(xs) (sizeof (xs)->sense) #define XS_SNSKEY(xs) ((xs)->sense.ext.extended.flags) #define HBA_NOERROR XS_NOERROR @@ -135,15 +130,18 @@ struct isposinfo { /* * Our default tag */ -#define XS_KINDOF_TAG(xs) REQFLAG_STAG +#define XS_KINDOF_TAG(xs) REQFLAG_OTAG #define CMD_COMPLETE COMPLETE #define CMD_EAGAIN TRY_AGAIN_LATER #define CMD_QUEUED SUCCESSFULLY_QUEUED + + #define isp_name isp_osinfo.name + #define SYS_DELAY(x) DELAY(x) #define WATCH_INTERVAL 30 @@ -161,7 +159,6 @@ struct isposinfo { #define RESTART_WATCHDOG(f, s) START_WATCHDOG(f, s) extern void isp_attach __P((struct ispsoftc *)); -extern void isp_uninit __P((struct ispsoftc *)); #define PVS "Qlogic ISP Driver, FreeBSD Non-Cam" diff --git a/sys/dev/isp/isp_freebsd_cam.h b/sys/dev/isp/isp_freebsd_cam.h index 7649a15511a1d..383b0078f7d13 100644 --- a/sys/dev/isp/isp_freebsd_cam.h +++ b/sys/dev/isp/isp_freebsd_cam.h @@ -1,5 +1,4 @@ -/* $Id: isp_freebsd_cam.h,v 1.11 1999/01/10 02:51:06 mjacob Exp $ */ -/* release_12_28_98_A+ */ +/* $FreeBSD$ */ /* * Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions (CAM version) *--------------------------------------- @@ -69,6 +68,7 @@ struct isposinfo { int unit; struct cam_sim *sim; struct cam_path *path; + struct callout_handle watchid; volatile char simqfrozen; }; @@ -89,9 +89,6 @@ struct isposinfo { #define PRINTF printf #define IDPRINTF(lev, x) if (isp->isp_dblev >= lev) printf x -#define MEMZERO bzero -#define MEMCPY(dst, src, amt) bcopy((src), (dst), (amt)) - #ifdef CAMDEBUG #define DFLT_DBLEVEL 2 #else @@ -99,7 +96,6 @@ struct isposinfo { #endif #define ISP_LOCKVAL_DECL int isp_spl_save -#define ISP_ILOCKVAL_DECL ISP_LOCKVAL_DECL #define ISP_UNLOCK(isp) (void) splx(isp_spl_save) #define ISP_LOCK(isp) isp_spl_save = splcam() #define ISP_ILOCK(isp) ISP_LOCK(isp) @@ -119,7 +115,7 @@ struct isposinfo { #define XS_STS(ccb) (ccb)->scsi_status #define XS_TIME(ccb) (ccb)->ccb_h.timeout #define XS_SNSP(ccb) (&(ccb)->sense_data) -#define XS_SNSLEN(ccb) imin((sizeof((ccb)->sense_data)), ccb->sense_len) +#define XS_SNSLEN(ccb) imin((sizeof (ccb)->sense_data), ccb->sense_len) #define XS_SNSKEY(ccb) ((ccb)->sense_data.flags & 0xf) /* @@ -148,8 +144,32 @@ struct isposinfo { #define XS_NOERR(ccb) \ ((ccb)->ccb_h.spriv_field0 == CAM_REQ_INPROG) -extern void isp_done(struct ccb_scsiio *); -#define XS_CMD_DONE(sccb) isp_done(sccb) +#define XS_CMD_DONE(sccb) \ + if (XS_NOERR((sccb))) \ + XS_SETERR((sccb), CAM_REQ_CMP); \ + (sccb)->ccb_h.status &= ~CAM_STATUS_MASK; \ + (sccb)->ccb_h.status |= (sccb)->ccb_h.spriv_field0; \ + if (((sccb)->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP && \ + (sccb)->scsi_status != SCSI_STATUS_OK) { \ + (sccb)->ccb_h.status &= ~CAM_STATUS_MASK; \ + (sccb)->ccb_h.status |= CAM_SCSI_STATUS_ERROR; \ + } \ + if (((sccb)->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { \ + if (((sccb)->ccb_h.status & CAM_DEV_QFRZN) == 0) { \ + struct ispsoftc *isp = XS_ISP((sccb)); \ + IDPRINTF(3, ("%s: freeze devq %d.%d ccbstat 0x%x\n",\ + isp->isp_name, (sccb)->ccb_h.target_id, \ + (sccb)->ccb_h.target_lun, (sccb)->ccb_h.status)); \ + xpt_freeze_devq((sccb)->ccb_h.path, 1); \ + (sccb)->ccb_h.status |= CAM_DEV_QFRZN; \ + } \ + } \ + if ((XS_ISP((sccb)))->isp_osinfo.simqfrozen) { \ + (sccb)->ccb_h.status |= CAM_RELEASE_SIMQ; \ + (XS_ISP((sccb)))->isp_osinfo.simqfrozen = 0; \ + } \ + (sccb)->ccb_h.status &= ~CAM_SIM_QUEUED; \ + xpt_done((union ccb *)(sccb)) #define XS_IS_CMD_DONE(ccb) \ (((ccb)->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_INPROG) @@ -174,8 +194,14 @@ extern void isp_done(struct ccb_scsiio *); #define CMD_QUEUED 2 #define SYS_DELAY(x) DELAY(x) -#define STOP_WATCHDOG(f, s) + +#define WATCH_INTERVAL 30 +#define START_WATCHDOG(f, s) \ + (s)->isp_osinfo.watchid = timeout(f, s, WATCH_INTERVAL * hz), \ + s->isp_dogactive = 1 +#define STOP_WATCHDOG(f, s) untimeout(f, s, (s)->isp_osinfo.watchid),\ + (s)->isp_dogactive = 0 +#define RESTART_WATCHDOG(f, s) START_WATCHDOG(f, s) extern void isp_attach __P((struct ispsoftc *)); -extern void isp_uninit __P((struct ispsoftc *)); #endif /* _ISP_FREEBSD_CAM_H */ diff --git a/sys/dev/isp/ispmbox.h b/sys/dev/isp/ispmbox.h index 24de5aebf94c8..b3f82a7821d51 100644 --- a/sys/dev/isp/ispmbox.h +++ b/sys/dev/isp/ispmbox.h @@ -1,5 +1,4 @@ -/* $Id: $ */ -/* release_12_28_98_A */ +/* $Id: ispmbox.h,v 1.7 1998/09/14 23:23:26 mjacob Exp $ */ /* * Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters. * @@ -154,7 +153,7 @@ typedef struct { #define ASYNC_RSP_XFER_ERR 0x8004 #define ASYNC_QWAKEUP 0x8005 #define ASYNC_TIMEOUT_RESET 0x8006 -#define ASYNC_DEVICE_RESET 0x8007 +#define ASYNC_UNSPEC_TMODE 0x8007 #define ASYNC_EXTMSG_UNDERRUN 0x800A #define ASYNC_SCAM_INT 0x800B #define ASYNC_HUNG_SCSI 0x800C @@ -168,7 +167,7 @@ typedef struct { #define ASYNC_LOOP_UP 0x8011 #define ASYNC_LOOP_DOWN 0x8012 #define ASYNC_LOOP_RESET 0x8013 -#define ASYNC_PDB_CHANGED 0x8014 +#define ASYNC_PDB_CHANGED 0x8014 /* Port Database Changed */ #define ASYNC_CHANGE_NOTIFY 0x8015 /* @@ -242,7 +241,7 @@ typedef struct { u_int16_t req_cdblen; #define req_modifier req_cdblen /* marker packet */ u_int16_t req_flags; - u_int16_t req_reserved; + u_int16_t _res1; u_int16_t req_time; u_int16_t req_seg_count; u_int8_t req_cdb[12]; @@ -260,7 +259,7 @@ typedef struct { u_int8_t req_lun_trn; u_int8_t req_target; #endif - u_int16_t req_scclun; + u_int16_t _res1; u_int16_t req_flags; u_int16_t _res2; u_int16_t req_time; @@ -425,7 +424,169 @@ typedef struct { #define RQSTF_NEGOTIATION 0x0080 /* - * FC (ISP2100) specific initialization data structures + * Target Mode Structures + */ +/* + * Used for Enable LUN and Modify Lun types. + * (for FC, pre-1.14 FW layout revision). + */ +typedef struct { + isphdr_t req_header; + u_int32_t req_handle; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t _reserved0; + u_int8_t req_lun; /* HOST->FW: LUN to enable */ +#else + u_int8_t req_lun; /* HOST->FW: LUN to enable */ + u_int8_t _reserved0; +#endif + u_int16_t _reserved1[3]; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t _reserved2; + u_int8_t req_status; /* FW->HOST: Status of Request */ + u_int8_t req_imcount; /* HOST->FW: Immediate Notify Count */ + u_int8_t req_cmdcount; /* HOST->FW: ATIO Count */ +#else + u_int8_t req_status; /* FW->HOST: Status of Request */ + u_int8_t _reserved2; + u_int8_t req_cmdcount; /* HOST->FW: ATIO Count */ + u_int8_t req_imcount; /* HOST->FW: Immediate Notify Count */ +#endif + u_int16_t _reserved3; + u_int16_t req_timeout; /* HOST->FW: Lun timeout value */ +} isplun_t; +/* inbound status */ +#define LUN_OKAY 0x01 +#define LUN_ERR 0x04 +#define LUN_NOCAP 0x16 +#define LUN_ENABLED 0x3e +/* outbound flags */ +#define LUN_INCR_CMD 0x0001 +#define LUN_DECR_CMD 0x0002 +#define LUN_INCR_IMMED 0x0100 +#define LUN_DECR_IMMED 0x0200 + +typedef struct { + isphdr_t req_header; + u_int32_t req_handle; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t req_initiator; + u_int8_t req_lun; +#else + u_int8_t req_lun; + u_int8_t req_initiator; +#endif + u_int16_t req_flags; /* NOTIFY_ACK only */ + u_int16_t _reserved1[2]; + u_int16_t req_status; + u_int16_t req_task_flags; + u_int16_t req_sequence; +} ispnotify_t; + +#define IN_NOCAP 0x16 +#define IN_IDE_RECEIVED 0x33 +#define IN_RSRC_UNAVAIL 0x34 +#define IN_MSG_RECEIVED 0x36 + +typedef struct { + isphdr_t req_header; + u_int32_t req_handle; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t req_initiator; + u_int8_t req_lun; +#else + u_int8_t req_lun; + u_int8_t req_initiator; +#endif + u_int16_t req_rxid; + u_int16_t req_flags; + u_int16_t req_status; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t req_taskcodes; + u_int8_t _reserved0; + u_int8_t req_execodes; + u_int8_t req_taskflags; +#else + u_int8_t _reserved0; + u_int8_t req_taskcodes; + u_int8_t req_taskflags; + u_int8_t req_execodes; +#endif + u_int8_t req_cdb[16]; + u_int32_t req_datalen; + u_int16_t req_scclun; + u_int16_t _reserved1;; + u_int16_t req_scsi_status; + u_int8_t req_sense[18]; +} ispatiot2_t; + +#define ATIO_PATH_INVALID 0x07 +#define ATIO_PHASE_ERROR 0x14 +#define ATIO_NOCAP 0x16 +#define ATIO_BDR_MSG 0x17 +#define ATIO_CDB_RECEIVED 0x3d + +#define ATIO_SENSEVALID 0x80 + +/* + * Continue Target I/O, type 2 + */ +typedef struct { + isphdr_t req_header; + u_int32_t req_handle; +#if BYTE_ORDER == BIG_ENDIAN + u_int8_t req_initiator; + u_int8_t req_lun; +#else + u_int8_t req_lun; + u_int8_t req_initiator; +#endif + u_int16_t req_rxid; + u_int16_t req_flags; + u_int16_t req_status; + u_int16_t req_timeout; + u_int16_t req_seg_count; /* data segment count */ + u_int8_t req_reloff[4]; /* relative offset */ + u_int8_t req_resid[4]; /* residual */ + u_int8_t _reserved0[4]; + union { /* should be offset 0x20 */ + struct { + u_int16_t _reserved0; + u_int16_t req_scsi_status; + u_int32_t req_datalen; + ispds_t req_dataseg[ISP_RQDSEG_T2]; + } mode0; + struct { + u_int16_t req_sense_len; + u_int16_t req_scsi_status; + u_int32_t req_response_length; + u_int8_t req_response[26]; + } mode1; + struct { + u_int16_t _reserved0[2]; + u_int32_t req_datalen; + ispds_t req_fcpiudata; + } mode2; + } req_m; +} ispctiot2_t; + +#define CTIO_SEND_STATUS 0x8000 +#define CTIO_SEND_DATA 0x0040 /* To initiator */ +#define CTIO_RECV_DATA 0x0080 +#define CTIO_NODATA 0x00C0 + +#define CTIO2_SMODE0 0x0000 +#define CTIO2_SMODE1 0x0001 +#define CTIO2_SMODE2 0x0002 + +#define CTIO2_RESP_VALID 0x0100 +#define CTIO2_STATUS_VALID 0x0200 +#define CTIO2_RSPOVERUN 0x0400 +#define CTIO2_RSPUNDERUN 0x0800 + + +/* + * FC (ISP2100) specific data structures */ /* @@ -498,6 +659,16 @@ typedef struct { #define RQRSP_ADDR4863 3 +#if BYTE_ORDER == BIG_ENDIAN +#define ICB_NNM0 6 +#define ICB_NNM1 7 +#define ICB_NNM2 4 +#define ICB_NNM3 5 +#define ICB_NNM4 2 +#define ICB_NNM5 3 +#define ICB_NNM6 0 +#define ICB_NNM7 1 +#else #define ICB_NNM0 7 #define ICB_NNM1 6 #define ICB_NNM2 5 @@ -506,6 +677,7 @@ typedef struct { #define ICB_NNM5 2 #define ICB_NNM6 1 #define ICB_NNM7 0 +#endif #define MAKE_NODE_NAME_FROM_WWN(array, wwn) \ array[ICB_NNM0] = (u_int8_t) ((wwn >> 0) & 0xff), \ @@ -517,425 +689,4 @@ typedef struct { array[ICB_NNM6] = (u_int8_t) ((wwn >> 48) & 0xff), \ array[ICB_NNM7] = (u_int8_t) ((wwn >> 56) & 0xff) -/* - * Target Mode Structures - */ -#define TGTSVALID 0x80 /* scsi status & sense data valid */ -#define SUGGSENSELEN 18 - -/* - * Structure for Enable Lun and Modify Lun queue entries - */ -typedef struct { - isphdr_t le_header; - u_int32_t le_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t le_lun; - u_int8_t le_rsvd; - u_int8_t le_ops; /* Modify LUN only */ - u_int8_t le_tgt; /* Not for FC */ -#endif - u_int32_t le_flags; /* Not for FC */ -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t le_status; - u_int8_t le_rsvd2; - u_int8_t le_cmd_count; - u_int8_t le_in_count; - u_int8_t le_cdb6len; /* Not for FC */ - u_int8_t le_cdb7len; /* Not for FC */ -#endif - u_int16_t le_timeout; - u_int16_t le_reserved[20]; -} lun_entry_t; - -/* - * le_flags values - */ -#define LUN_TQAE 0x00000001 /* Tagged Queue Action Enable */ -#define LUN_DSSM 0x01000000 /* Disable Sending SDP Message */ -#define LUN_DM 0x40000000 /* Disconnects Mandatory */ - -/* - * le_ops values - */ -#define LUN_CCINCR 0x01 /* increment command count */ -#define LUN_CCDECR 0x02 /* decrement command count */ -#define LUN_ININCR 0x40 /* increment immed. notify count */ -#define LUN_INDECR 0x80 /* decrement immed. notify count */ - -/* - * le_status values - */ -#define LUN_ERR 0x04 /* request completed with error */ -#define LUN_INVAL 0x06 /* invalid request */ -#define LUN_NOCAP 0x16 /* can't provide requested capability */ -#define LUN_ENABLED 0x3E /* LUN already enabled */ - -/* - * Immediate Notify Entry structure - */ -#define IN_MSGLEN 8 /* 8 bytes */ -#define IN_RSVDLEN 8 /* 8 words */ -typedef struct { - isphdr_t in_header; - u_int32_t in_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t in_lun; /* lun */ - u_int8_t in_iid; /* initiator */ - u_int8_t in_rsvd; - u_int8_t in_tgt; /* target */ -#endif - u_int32_t in_flags; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t in_status; - u_int8_t in_rsvd2; - u_int8_t in_tag_val; /* tag value */ - u_int8_t in_tag_type; /* tag type */ -#endif - u_int16_t in_seqid; /* sequence id */ - u_int8_t in_msg[IN_MSGLEN]; /* SCSI message bytes */ - u_int16_t in_reserved[IN_RSVDLEN]; - u_int8_t in_sense[SUGGSENSELEN]; /* suggested sense data */ -} in_entry_t; - -typedef struct { - isphdr_t in_header; - u_int32_t in_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t in_lun; /* lun */ - u_int8_t in_iid; /* initiator */ -#endif - u_int16_t in_rsvd; - u_int32_t in_rsvd2; - u_int16_t in_status; - u_int16_t in_task_flags; - u_int16_t in_seqid; /* sequence id */ -} in_fcentry_t; - -/* - * Values for the in_status field - */ -#define IN_NO_RCAP 0x16 /* requested capability not available */ -#define IN_IDE_RECEIVED 0x33 /* Initiator Detected Error msg received */ -#define IN_RSRC_UNAVAIL 0x34 /* resource unavailable */ -#define IN_MSG_RECEIVED 0x36 /* SCSI message received */ -#define IN_PORT_LOGOUT 0x29 /* port has logged out (FC) */ -#define IN_ABORT_TASK 0x20 /* task named in RX_ID is being aborted (FC) */ - -/* - * Notify Acknowledge Entry structure - */ -#define NA_RSVDLEN 22 -typedef struct { - isphdr_t na_header; - u_int32_t na_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t na_lun; /* lun */ - u_int8_t na_iid; /* initiator */ - u_int8_t na_rsvd; - u_int8_t na_tgt; /* target */ -#endif - u_int32_t na_flags; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t na_status; - u_int8_t na_event; -#endif - u_int16_t na_seqid; /* sequence id */ - u_int16_t na_reserved[NA_RSVDLEN]; -} na_entry_t; - -/* - * Value for the na_event field - */ -#define NA_RST_CLRD 0x80 /* Clear an async event notification */ - -#define NA2_RSVDLEN 21 -typedef struct { - isphdr_t na_header; - u_int32_t na_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t na_lun; /* lun */ - u_int8_t na_iid; /* initiator */ -#endif - u_int16_t na_rsvd; - u_int16_t na_flags; - u_int16_t na_rsvd2; - u_int16_t na_status; - u_int16_t na_task_flags; - u_int16_t na_seqid; /* sequence id */ - u_int16_t na_reserved[NA2_RSVDLEN]; -} na_fcentry_t; -#define NAFC_RST_CLRD 0x40 - -/* - * Value for the na_event field - */ -#define NA_RST_CLRD 0x80 /* Clear an async event notification */ -/* - * Accept Target I/O Entry structure - */ -#define ATIO_CDBLEN 26 - -typedef struct { - isphdr_t at_header; - u_int32_t at_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t at_lun; /* lun */ - u_int8_t at_iid; /* initiator */ - u_int8_t at_cdblen; /* cdb length */ - u_int8_t at_tgt; /* target */ -#endif - u_int32_t at_flags; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t at_status; /* firmware status */ - u_int8_t at_scsi_status; /* scsi status */ - u_int8_t at_tag_val; /* tag value */ - u_int8_t at_tag_type; /* tag type */ -#endif - u_int8_t at_cdb[ATIO_CDBLEN]; /* received CDB */ - u_int8_t at_sense[SUGGSENSELEN]; /* suggested sense data */ -} at_entry_t; - -/* - * at_flags values - */ -#define AT_NODISC 0x00008000 /* disconnect disabled */ -#define AT_TQAE 0x00000001 /* Tagged Queue Action enabled */ - -/* - * at_status values - */ -#define AT_PATH_INVALID 0x07 /* ATIO sent to firmware for disabled lun */ -#define AT_PHASE_ERROR 0x14 /* Bus phase sequence error */ -#define AT_NOCAP 0x16 /* Requested capability not available */ -#define AT_BDR_MSG 0x17 /* Bus Device Reset msg received */ -#define AT_CDB 0x3D /* CDB received */ - -/* - * Accept Target I/O Entry structure, Type 2 - */ -#define ATIO2_CDBLEN 16 - -typedef struct { - isphdr_t at_header; - u_int32_t at_reserved2; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t at_lun; /* lun */ - u_int8_t at_iid; /* initiator */ -#endif - u_int16_t at_rxid; /* response ID */ - u_int16_t at_flags; - u_int16_t at_status; /* firmware status */ -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t at_reserved1; - u_int8_t at_taskcodes; - u_int8_t at_taskflags; - u_int8_t at_execodes; -#endif - u_int8_t at_cdb[ATIO2_CDBLEN]; /* received CDB */ - u_int32_t at_datalen; /* allocated data len */ - u_int16_t at_scclun; - u_int16_t at_reserved3; - u_int16_t at_scsi_status; - u_int8_t at_sense[SUGGSENSELEN]; /* suggested sense data */ -} at2_entry_t; - -#define ATIO2_TC_ATTR_MASK 0x7 -#define ATIO2_TC_ATTR_SIMPLEQ 0 -#define ATIO2_TC_ATTR_HEADOFQ 1 -#define ATIO2_TC_ATTR_ORDERED 2 -#define ATIO2_TC_ATTR_ACAQ 4 -#define ATIO2_TC_ATTR_UNTAGGED 5 -#define TC2TT(code) \ - (((code) == ATIO2_TC_ATTR_SIMPLEQ)? 0x20 : \ - (((code) == ATIO2_TC_ATTR_HEADOFQ)? 0x21 : \ - (((code) == ATIO2_TC_ATTR_ORDERED)? 0x22 : \ - (((code) == ATIO2_TC_ATTR_ACAQ)? 0x24 : 0)))) - - -/* - * Continue Target I/O Entry structure - * Request from driver. The response from the - * ISP firmware is the same except that the last 18 - * bytes are overwritten by suggested sense data if - * the 'autosense valid' bit is set in the status byte. - */ -typedef struct { - isphdr_t ct_header; - u_int32_t ct_reserved; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t ct_lun; /* lun */ - u_int8_t ct_iid; /* initiator id */ - u_int8_t ct_rsvd; - u_int8_t ct_tgt; /* our target id */ -#endif - u_int32_t ct_flags; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t ct_status; /* isp status */ - u_int8_t ct_scsi_status; /* scsi status */ - u_int8_t ct_tag_val; /* tag value */ - u_int8_t ct_tag_type; /* tag type */ -#endif - u_int32_t ct_xfrlen; /* transfer length */ - u_int32_t ct_resid; /* residual length */ - u_int16_t ct_timeout; - u_int16_t ct_seg_count; - ispds_t ct_dataseg[ISP_RQDSEG]; -} ct_entry_t; - -/* - * ct_flags values - */ -#define CT_TQAE 0x00000001 /* Tagged Queue Action enable */ -#define CT_DATA_IN 0x00000040 /* Data direction */ -#define CT_DATA_OUT 0x00000080 /* Data direction */ -#define CT_NO_DATA 0x000000C0 /* Data direction */ -#define CT_DATAMASK 0x000000C0 /* Data direction */ -#define CT_NODISC 0x00008000 /* Disconnects disabled */ -#define CT_DSDP 0x01000000 /* Disable Save Data Pointers */ -#define CT_SENDRDP 0x04000000 /* Send Restore Pointers msg */ -#define CT_SENDSTATUS 0x80000000 /* Send SCSI status byte */ - -/* - * ct_status values - * - set by the firmware when it returns the CTIO - */ -#define CT_OK 0x01 /* completed without error */ -#define CT_ABORTED 0x02 /* aborted by host */ -#define CT_ERR 0x04 /* see sense data for error */ -#define CT_INVAL 0x06 /* request for disabled lun */ -#define CT_NOPATH 0x07 /* invalid ITL nexus */ -#define CT_INVRXID 0x08 /* (FC only) Invalid RX_ID */ -#define CT_RSELTMO 0x0A /* reselection timeout after 2 tries */ -#define CT_TIMEOUT 0x0B /* timed out */ -#define CT_RESET 0x0E /* SCSI Bus Reset occurred */ -#define CT_PHASE_ERROR 0x14 /* Bus phase sequence error */ -#define CT_BDR_MSG 0x17 /* Bus Device Reset msg received */ -#define CT_TERMINATED 0x19 /* due to Terminate Transfer mbox cmd */ -#define CT_LOGOUT 0x29 /* port logout not acknowledged yet */ -#define CT_NOACK 0x35 /* Outstanding Immed. Notify. entry */ - -/* - * When the firmware returns a CTIO entry, it may overwrite the last - * part of the structure with sense data. This starts at offset 0x2E - * into the entry, which is in the middle of ct_dataseg[1]. Rather - * than define a new struct for this, I'm just using the sense data - * offset. - */ -#define CTIO_SENSE_OFFSET 0x2E - -/* - * Entry length in u_longs. All entries are the same size so - * any one will do as the numerator. - */ -#define UINT32_ENTRY_SIZE (sizeof(at_entry_t)/sizeof(u_int32_t)) - -/* - * QLA2100 CTIO (type 2) entry - */ -#define MAXRESPLEN 26 -typedef struct { - isphdr_t ct_header; - u_int32_t ct_reserved; -#if BYTE_ORDER == BIG_ENDIAN -#else - u_int8_t ct_lun; /* lun */ - u_int8_t ct_iid; /* initiator id */ -#endif - u_int16_t ct_rxid; /* response ID */ - u_int16_t ct_flags; - u_int16_t ct_status; /* isp status */ - u_int16_t ct_timeout; - u_int16_t ct_seg_count; - u_int32_t ct_reloff; /* relative offset */ - u_int32_t ct_resid; /* residual length */ - union { - /* - * The three different modes that the target driver - * can set the CTIO2 up as. - * - * The first is for sending FCP_DATA_IUs as well as - * (optionally) sending a terminal SCSI status FCP_RSP_IU. - * - * The second is for sending SCSI sense data in an FCP_RSP_IU. - * Note that no FCP_DATA_IUs will be sent. - * - * The third is for sending FCP_RSP_IUs as built specifically - * in system memory as located by the isp_dataseg. - */ - struct { - u_int32_t _reserved; - u_int16_t _reserved2; - u_int16_t ct_scsi_status; - u_int32_t ct_xfrlen; - ispds_t ct_dataseg[ISP_RQDSEG_T2]; - } m0; - struct { - u_int16_t _reserved; - u_int16_t _reserved2; - u_int16_t ct_senselen; - u_int16_t ct_scsi_status; - u_int16_t ct_resplen; - u_int8_t ct_resp[MAXRESPLEN]; - } m1; - struct { - u_int32_t _reserved; - u_int16_t _reserved2; - u_int16_t _reserved3; - u_int32_t ct_datalen; - ispds_t ct_fcp_rsp_iudata; - } m2; - /* - * CTIO2 returned from F/W... - */ - struct { - u_int32_t _reserved[4]; - u_int16_t ct_scsi_status; - u_int8_t ct_sense[SUGGSENSELEN]; - } fw; - } rsp; -} ct2_entry_t; -/* - * ct_flags values for CTIO2 - */ -#define CT2_FLAG_MMASK 0x0003 -#define CT2_FLAG_MODE0 0x0000 -#define CT2_FLAG_MODE1 0x0001 -#define CT2_FLAG_MODE2 0x0002 -#define CT2_DATA_IN CT_DATA_IN -#define CT2_DATA_OUT CT_DATA_OUT -#define CT2_NO_DATA CT_NO_DATA -#define CT2_DATAMASK CT_DATA_MASK -#define CT2_CCINCR 0x0100 -#define CT2_FASTPOST 0x0200 -#define CT2_SENDSTATUS 0x8000 - -/* - * ct_status values are (mostly) the same as that for ct_entry. - */ - -/* - * ct_scsi_status values- the low 8 bits are the normal SCSI status - * we know and love. The upper 8 bits are validity markers for FCP_RSP_IU - * fields. - */ -#define CT2_RSPLEN_VALID 0x0100 -#define CT2_SNSLEN_VALID 0x0200 -#define CT2_DATA_OVER 0x0400 -#define CT2_DATA_UNDER 0x0800 - #endif /* _ISPMBOX_H */ diff --git a/sys/dev/isp/ispreg.h b/sys/dev/isp/ispreg.h index 122a2976db1b6..a953bc1896542 100644 --- a/sys/dev/isp/ispreg.h +++ b/sys/dev/isp/ispreg.h @@ -1,5 +1,4 @@ -/* $Id: $ */ -/* release_12_28_98_A */ +/* $Id: ispreg.h,v 1.6 1998/09/08 01:09:46 mjacob Exp $ */ /* * Machine Independent (well, as best as possible) register * definitions for Qlogic ISP SCSI adapters. @@ -671,7 +670,7 @@ (((u_int64_t)(c)[23]) << 16) | \ (((u_int64_t)(c)[24]) << 8) | \ (((u_int64_t)(c)[25]) << 0)) -#define ISP2100_NVRAM_HARDLOOPID(c) (c)[26] +#define ISP2100_NVRAM_HARDLOOPID(c) (c)[24] #define ISP2100_NVRAM_HBA_DISABLE(c) ISPBSMX(c, 70, 0, 0x01) #define ISP2100_NVRAM_BIOS_DISABLE(c) ISPBSMX(c, 70, 1, 0x01) diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h index 222f77e9e9051..d1aeade78e4c9 100644 --- a/sys/dev/isp/ispvar.h +++ b/sys/dev/isp/ispvar.h @@ -1,5 +1,4 @@ -/* $Id: ispvar.h,v 1.7 1998/12/28 19:22:27 mjacob Exp $ */ -/* release_12_28_98_A+ */ +/* $FreeBSD$ */ /* * Soft Definitions for for Qlogic ISP SCSI adapters. * @@ -44,11 +43,11 @@ #include <dev/isp/ispmbox.h> #endif #ifdef __linux__ -#include "ispmbox.h" +#include <ispmbox.h> #endif #define ISP_CORE_VERSION_MAJOR 1 -#define ISP_CORE_VERSION_MINOR 5 +#define ISP_CORE_VERSION_MINOR 3 /* * Vector for MD code to provide specific services. @@ -78,7 +77,6 @@ struct ispmdvec { #define MAX_TARGETS 16 #define MAX_FC_TARG 126 -#define DEFAULT_LOOPID 113 /* queue length must be a power of two */ #define QENTRY_LEN 64 @@ -99,7 +97,7 @@ typedef struct { isp_data_line_active_neg: 1, isp_cmd_dma_burst_enable: 1, isp_data_dma_burst_enabl: 1, - isp_fifo_threshold : 3, + isp_fifo_threshold : 2, isp_diffmode : 1, isp_fast_mttr : 1, isp_initiator_id : 4, @@ -177,42 +175,6 @@ typedef struct { #define FW_REINIT 0x0006 #define FW_NON_PART 0x0007 -#ifdef ISP_TARGET_MODE -/* - * Some temporary Target Mode definitions - */ -typedef struct tmd_cmd { - u_int8_t cd_iid; /* initiator */ - u_int8_t cd_tgt; /* target */ - u_int8_t cd_lun; /* LUN for this command */ - u_int8_t cd_state; - u_int8_t cd_cdb[16]; /* command bytes */ - u_int8_t cd_sensedata[20]; - u_int16_t cd_rxid; - u_int32_t cd_datalen; - u_int32_t cd_totbytes; - void * cd_hba; -} tmd_cmd_t; - -/* - * Async Target Mode Event Definitions - */ -#define TMD_BUS_RESET 0 -#define TMD_BDR 1 - -/* - * Immediate Notify data structure. - */ -#define NOTIFY_MSGLEN 5 -typedef struct { - u_int8_t nt_iid; /* initiator */ - u_int8_t nt_tgt; /* target */ - u_int8_t nt_lun; /* LUN for this command */ - u_int8_t nt_msg[NOTIFY_MSGLEN]; /* SCSI message byte(s) */ -} tmd_notify_t; - -#endif - /* * Soft Structure per host adapter */ @@ -228,7 +190,7 @@ struct ispsoftc { struct ispmdvec * isp_mdvec; /* - * Mostly nonvolatile state, debugging, etc.. + * State, debugging, etc.. */ u_int : 8, @@ -281,28 +243,6 @@ struct ispsoftc { volatile caddr_t isp_result; u_int32_t isp_rquest_dma; u_int32_t isp_result_dma; - -#ifdef ISP_TARGET_MODE - /* - * Vectors for handling target mode support. - * - * isp_tmd_newcmd is for feeding a newly arrived command to some - * upper layer. - * - * isp_tmd_event is for notifying some upper layer that an event has - * occurred that is not necessarily tied to any target (e.g., a SCSI - * Bus Reset). - * - * isp_tmd_notify is for notifying some upper layer that some - * event is now occurring that is either pertinent for a specific - * device or for a specific command (e.g., BDR or ABORT TAG). - * - * It is left undefined (for now) how pools of commands are managed. - */ - void (*isp_tmd_newcmd) __P((void *, tmd_cmd_t *)); - void (*isp_tmd_event) __P((void *, int)); - void (*isp_tmd_notify) __P((void *, tmd_notify_t *)); -#endif }; /* @@ -388,6 +328,11 @@ void isp_reset __P((struct ispsoftc *)); void isp_init __P((struct ispsoftc *)); /* + * Free any associated resources prior to decommissioning. + */ +void isp_uninit __P((struct ispsoftc *)); + +/* * Reset the ISP and call completion for any orphaned commands. */ void isp_restart __P((struct ispsoftc *)); @@ -398,6 +343,11 @@ void isp_restart __P((struct ispsoftc *)); int isp_intr __P((void *)); /* + * Watchdog Routine + */ +void isp_watch __P((void *)); + +/* * Command Entry Point */ int32_t ispscsicmd __P((ISP_SCSI_XFER_T *)); diff --git a/sys/dev/kbd/atkbd.c b/sys/dev/kbd/atkbd.c deleted file mode 100644 index 653e2955ffee4..0000000000000 --- a/sys/dev/kbd/atkbd.c +++ /dev/null @@ -1,1313 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHORS ``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 AUTHORS 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. - * - * $Id: atkbd.c,v 1.2 1999/01/13 11:19:19 yokota Exp $ - */ - -#include "atkbd.h" -#include "opt_kbd.h" -#include "opt_devfs.h" - -#if NATKBD > 0 - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/conf.h> -#include <sys/proc.h> -#include <sys/tty.h> -#include <sys/fcntl.h> -#include <sys/malloc.h> - -#include <dev/kbd/kbdreg.h> -#include <dev/kbd/atkbdreg.h> -#include <dev/kbd/atkbdcreg.h> - -#ifndef __i386__ - -#include <isa/isareg.h> - -#define ATKBD_SOFTC(unit) \ - ((atkbd_softc_t *)devclass_get_softc(atkbd_devclass, unit)) - -#else /* __i386__ */ - -#include <i386/isa/isa.h> -#include <i386/isa/isa_device.h> - -extern struct isa_driver atkbddriver; /* XXX: a kludge; see below */ - -static atkbd_softc_t *atkbd_softc[NATKBD]; - -#define ATKBD_SOFTC(unit) atkbd_softc[(unit)] - -#endif /* __i386__ */ - -static timeout_t atkbd_timeout; - -#ifdef KBD_INSTALL_CDEV - -static d_open_t atkbdopen; -static d_close_t atkbdclose; -static d_read_t atkbdread; -static d_ioctl_t atkbdioctl; -static d_poll_t atkbdpoll; - -static struct cdevsw atkbd_cdevsw = { - atkbdopen, atkbdclose, atkbdread, nowrite, - atkbdioctl, nostop, nullreset, nodevtotty, - atkbdpoll, nommap, NULL, ATKBD_DRIVER_NAME, - NULL, -1, -}; - -#endif /* KBD_INSTALL_CDEV */ - -#ifdef __i386__ - -atkbd_softc_t -*atkbd_get_softc(int unit) -{ - atkbd_softc_t *sc; - - if (unit >= sizeof(atkbd_softc)/sizeof(atkbd_softc[0])) - return NULL; - sc = atkbd_softc[unit]; - if (sc == NULL) { - sc = atkbd_softc[unit] - = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT); - if (sc == NULL) - return NULL; - bzero(sc, sizeof(*sc)); - } - return sc; -} - -#endif /* __i386__ */ - -int -atkbd_probe_unit(int unit, atkbd_softc_t *sc, int port, int irq, int flags) -{ - keyboard_switch_t *sw; - int args[2]; - - if (sc->flags & ATKBD_ATTACHED) - return 0; - - sw = kbd_get_switch(ATKBD_DRIVER_NAME); - if (sw == NULL) - return ENXIO; - - args[0] = port; - args[1] = irq; - return (*sw->probe)(unit, &sc->kbd, args, flags); -} - -int -atkbd_attach_unit(int unit, atkbd_softc_t *sc) -{ - keyboard_switch_t *sw; - int error; - - if (sc->flags & ATKBD_ATTACHED) - return 0; - - sw = kbd_get_switch(ATKBD_DRIVER_NAME); - if (sw == NULL) - return ENXIO; - - /* reset, initialize and enable the device */ - error = (*sw->init)(sc->kbd); - if (error) - return ENXIO; - (*sw->enable)(sc->kbd); - -#ifdef KBD_INSTALL_CDEV - /* attach a virtual keyboard cdev */ - error = kbd_attach(makedev(0, ATKBD_MKMINOR(unit)), sc->kbd, - &atkbd_cdevsw); - if (error) - return error; -#endif - - /* - * This is a kludge to compensate for lost keyboard interrupts. - * A similar code used to be in syscons. See below. XXX - */ - atkbd_timeout(sc->kbd); - - if (bootverbose) - (*sw->diag)(sc->kbd, bootverbose); - - sc->flags |= ATKBD_ATTACHED; - return 0; -} - -static void -atkbd_timeout(void *arg) -{ - keyboard_t *kbd; - int s; - - /* The following comments are extracted from syscons.c (1.287) */ - /* - * With release 2.1 of the Xaccel server, the keyboard is left - * hanging pretty often. Apparently an interrupt from the - * keyboard is lost, and I don't know why (yet). - * This ugly hack calls scintr if input is ready for the keyboard - * and conveniently hides the problem. XXX - */ - /* - * Try removing anything stuck in the keyboard controller; whether - * it's a keyboard scan code or mouse data. `scintr()' doesn't - * read the mouse data directly, but `kbdio' routines will, as a - * side effect. - */ - s = spltty(); - kbd = (keyboard_t *)arg; - if ((*kbdsw[kbd->kb_index]->lock)(kbd, TRUE)) { - /* - * We have seen the lock flag is not set. Let's reset - * the flag early, otherwise the LED update routine fails - * which may want the lock during the interrupt routine. - */ - (*kbdsw[kbd->kb_index]->lock)(kbd, FALSE); - if ((*kbdsw[kbd->kb_index]->check_char)(kbd)) - (*kbdsw[kbd->kb_index]->intr)(kbd); - } - splx(s); - timeout(atkbd_timeout, arg, hz/10); -} - -/* cdev driver functions */ - -#ifdef KBD_INSTALL_CDEV - -static int -atkbdopen(dev_t dev, int flag, int mode, struct proc *p) -{ - atkbd_softc_t *sc; - int unit; - - unit = ATKBD_UNIT(dev); - if ((unit >= NATKBD) || ((sc = ATKBD_SOFTC(unit)) == NULL)) - return ENXIO; - if (mode & (FWRITE | O_CREAT | O_APPEND | O_TRUNC)) - return ENODEV; - - /* FIXME: set the initial input mode (K_XLATE?) and lock state? */ - return genkbdopen(&sc->gensc, sc->kbd, flag, mode, p); -} - -static int -atkbdclose(dev_t dev, int flag, int mode, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdclose(&sc->gensc, sc->kbd, flag, mode, p); -} - -static int -atkbdread(dev_t dev, struct uio *uio, int flag) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdread(&sc->gensc, sc->kbd, uio, flag); -} - -static int -atkbdioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdioctl(&sc->gensc, sc->kbd, cmd, arg, flag, p); -} - -static int -atkbdpoll(dev_t dev, int event, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdpoll(&sc->gensc, sc->kbd, event, p); -} - -#endif /* KBD_INSTALL_CDEV */ - -/* LOW-LEVEL */ - -#include <machine/limits.h> -#include <machine/console.h> -#include <machine/clock.h> - -#define ATKBD_DEFAULT 0 - -typedef struct atkbd_state { - KBDC kbdc; /* keyboard controller */ - /* XXX: don't move this field; pcvt - * expects `kbdc' to be the first - * field in this structure. */ - int ks_mode; /* input mode (K_XLATE,K_RAW,K_CODE) */ - int ks_flags; /* flags */ -#define COMPOSE (1 << 0) - int ks_state; /* shift/lock key state */ - int ks_accents; /* accent key index (> 0) */ - u_int ks_composed_char; /* composed char code (> 0) */ - u_char ks_prefix; /* AT scan code prefix */ -} atkbd_state_t; - -/* keyboard driver declaration */ -static int atkbd_configure(int flags); -static kbd_probe_t atkbd_probe; -static kbd_init_t atkbd_init; -static kbd_term_t atkbd_term; -static kbd_intr_t atkbd_intr; -static kbd_test_if_t atkbd_test_if; -static kbd_enable_t atkbd_enable; -static kbd_disable_t atkbd_disable; -static kbd_read_t atkbd_read; -static kbd_check_t atkbd_check; -static kbd_read_char_t atkbd_read_char; -static kbd_check_char_t atkbd_check_char; -static kbd_ioctl_t atkbd_ioctl; -static kbd_lock_t atkbd_lock; -static kbd_clear_state_t atkbd_clear_state; -static kbd_get_state_t atkbd_get_state; -static kbd_set_state_t atkbd_set_state; - -keyboard_switch_t atkbdsw = { - atkbd_probe, - atkbd_init, - atkbd_term, - atkbd_intr, - atkbd_test_if, - atkbd_enable, - atkbd_disable, - atkbd_read, - atkbd_check, - atkbd_read_char, - atkbd_check_char, - atkbd_ioctl, - atkbd_lock, - atkbd_clear_state, - atkbd_get_state, - atkbd_set_state, - genkbd_get_fkeystr, - genkbd_diag, -}; - -KEYBOARD_DRIVER(atkbd, atkbdsw, atkbd_configure); - -/* local functions */ -static int setup_kbd_port(KBDC kbdc, int port, int intr); -static int get_kbd_echo(KBDC kbdc); -static int probe_keyboard(KBDC kbdc, int flags); -static int init_keyboard(KBDC kbdc, int *type, int flags); -static int write_kbd(KBDC kbdc, int command, int data); -static int get_kbd_id(KBDC kbdc); - -/* local variables */ - -/* the initial key map, accent map and fkey strings */ -#include <dev/kbd/kbdtables.h> - -/* structures for the default keyboard */ -static keyboard_t default_kbd; -static atkbd_state_t default_kbd_state; -static keymap_t default_keymap; -static accentmap_t default_accentmap; -static fkeytab_t default_fkeytab[NUM_FKEYS]; - -/* - * The back door to the keyboard driver! - * This function is called by the console driver, via the kbdio module, - * to tickle keyboard drivers when the low-level console is being initialized. - * Almost nothing in the kernel has been initialied yet. Try to probe - * keyboards if possible. - * NOTE: because of the way the low-level conole is initialized, this routine - * may be called more than once!! - */ -static int -atkbd_configure(int flags) -{ - keyboard_t *kbd; - KBDC kbdc; - int arg[2]; -#ifdef __i386__ - struct isa_device *dev; - - /* XXX: a kludge to obtain the device configuration flags */ - dev = find_isadev(isa_devtab_tty, &atkbddriver, 0); - if (dev != NULL) - flags |= dev->id_flags; -#endif - - /* probe the keyboard controller */ - atkbdc_configure(); - - /* probe the default keyboard */ - arg[0] = -1; - arg[1] = -1; - if (atkbd_probe(ATKBD_DEFAULT, &kbd, arg, flags)) - return 0; - - /* initialize it */ - kbdc = ((atkbd_state_t *)kbd->kb_data)->kbdc; - if (!(flags & KB_CONF_PROBE_ONLY) && !KBD_IS_INITIALIZED(kbd)) { - if (KBD_HAS_DEVICE(kbd) - && init_keyboard(kbdc, &kbd->kb_type, flags) - && (flags & KB_CONF_FAIL_IF_NO_KBD)) - return 0; - KBD_INIT_DONE(kbd); - } - - /* and register */ - if (!KBD_IS_CONFIGURED(kbd)) { - if (kbd_register(kbd) < 0) - return 0; - KBD_CONFIG_DONE(kbd); - } - - return 1; /* return the number of found keyboards */ -} - -/* low-level functions */ - -/* initialize the keyboard_t structure and try to detect a keyboard */ -static int -atkbd_probe(int unit, keyboard_t **kbdp, void *arg, int flags) -{ - keyboard_t *kbd; - atkbd_state_t *state; - keymap_t *keymap; - accentmap_t *accmap; - fkeytab_t *fkeymap; - int fkeymap_size; - KBDC kbdc; - int *data = (int *)arg; - - /* XXX */ - if (unit == ATKBD_DEFAULT) { - *kbdp = kbd = &default_kbd; - if (KBD_IS_PROBED(kbd)) - return 0; - state = &default_kbd_state; - keymap = &default_keymap; - accmap = &default_accentmap; - fkeymap = default_fkeytab; - fkeymap_size = - sizeof(default_fkeytab)/sizeof(default_fkeytab[0]); - } else if (*kbdp == NULL) { - *kbdp = kbd = malloc(sizeof(*kbd), M_DEVBUF, M_NOWAIT); - if (kbd == NULL) - return ENOMEM; - bzero(kbd, sizeof(*kbd)); - state = malloc(sizeof(*state), M_DEVBUF, M_NOWAIT); - keymap = malloc(sizeof(key_map), M_DEVBUF, M_NOWAIT); - accmap = malloc(sizeof(accent_map), M_DEVBUF, M_NOWAIT); - fkeymap = malloc(sizeof(fkey_tab), M_DEVBUF, M_NOWAIT); - fkeymap_size = sizeof(fkey_tab)/sizeof(fkey_tab[0]); - if ((state == NULL) || (keymap == NULL) || (accmap == NULL) - || (fkeymap == NULL)) { - if (state != NULL) - free(state, M_DEVBUF); - if (keymap != NULL) - free(keymap, M_DEVBUF); - if (accmap != NULL) - free(accmap, M_DEVBUF); - if (fkeymap != NULL) - free(fkeymap, M_DEVBUF); - free(kbd, M_DEVBUF); - return ENOMEM; - } - bzero(state, sizeof(*state)); - } else if (KBD_IS_PROBED(*kbdp)) { - return 0; - } else { - kbd = *kbdp; - state = (atkbd_state_t *)kbd->kb_data; - bzero(state, sizeof(*state)); - keymap = kbd->kb_keymap; - accmap = kbd->kb_accentmap; - fkeymap = kbd->kb_fkeytab; - fkeymap_size = kbd->kb_fkeytab_size; - } - - state->kbdc = kbdc = kbdc_open(data[0]); - if (kbdc == NULL) - return ENXIO; - kbd_init_struct(kbd, ATKBD_DRIVER_NAME, KB_OTHER, unit, flags, data[0], - IO_KBDSIZE); - bcopy(&key_map, keymap, sizeof(key_map)); - bcopy(&accent_map, accmap, sizeof(accent_map)); - bcopy(fkey_tab, fkeymap, - imin(fkeymap_size*sizeof(fkeymap[0]), sizeof(fkey_tab))); - kbd_set_maps(kbd, keymap, accmap, fkeymap, fkeymap_size); - kbd->kb_data = (void *)state; - - if (probe_keyboard(kbdc, flags)) { - if (flags & KB_CONF_FAIL_IF_NO_KBD) - return ENXIO; - } else { - KBD_FOUND_DEVICE(kbd); - } - atkbd_clear_state(kbd); - state->ks_mode = K_XLATE; - /* - * FIXME: set the initial value for lock keys in ks_state - * according to the BIOS data? - */ - - KBD_PROBE_DONE(kbd); - return 0; -} - -/* reset and initialize the device */ -static int -atkbd_init(keyboard_t *kbd) -{ - KBDC kbdc; - - if ((kbd == NULL) || !KBD_IS_PROBED(kbd)) - return ENXIO; /* shouldn't happen */ - kbdc = ((atkbd_state_t *)kbd->kb_data)->kbdc; - if (kbdc == NULL) - return ENXIO; /* shouldn't happen */ - - if (!KBD_IS_INITIALIZED(kbd)) { - if (KBD_HAS_DEVICE(kbd) - && init_keyboard(kbdc, &kbd->kb_type, kbd->kb_config) - && (kbd->kb_config & KB_CONF_FAIL_IF_NO_KBD)) - return ENXIO; - atkbd_ioctl(kbd, KDSETLED, - (caddr_t)&((atkbd_state_t *)(kbd->kb_data))->ks_state); - KBD_INIT_DONE(kbd); - } - if (!KBD_IS_CONFIGURED(kbd)) { - if (kbd_register(kbd) < 0) - return ENXIO; - KBD_CONFIG_DONE(kbd); - } - - return 0; -} - -/* finish using this keyboard */ -static int -atkbd_term(keyboard_t *kbd) -{ - kbd_unregister(kbd); - return 0; -} - -/* keyboard interrupt routine */ -static int -atkbd_intr(keyboard_t *kbd) -{ - atkbd_state_t *state; - int c; - - if (KBD_IS_ACTIVE(kbd) && KBD_IS_BUSY(kbd)) { - /* let the callback function to process the input */ - (*kbd->kb_callback.kc_func)(kbd, KBDIO_KEYINPUT, - kbd->kb_callback.kc_arg); - } else { - /* read and discard the input; no one is waiting for input */ - do { - c = atkbd_read_char(kbd, FALSE); - } while (c != NOKEY); - - if (!KBD_HAS_DEVICE(kbd)) { - /* - * The keyboard was not detected before; - * it must have been reconnected! - */ - state = (atkbd_state_t *)kbd->kb_data; - init_keyboard(state->kbdc, &kbd->kb_type, - kbd->kb_config); - atkbd_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state); - KBD_FOUND_DEVICE(kbd); - } - } - return 0; -} - -/* test the interface to the device */ -static int -atkbd_test_if(keyboard_t *kbd) -{ - int error; - int s; - - error = 0; - empty_both_buffers(((atkbd_state_t *)kbd->kb_data)->kbdc, 10); - s = spltty(); - if (!test_controller(((atkbd_state_t *)kbd->kb_data)->kbdc)) - error = EIO; - else if (test_kbd_port(((atkbd_state_t *)kbd->kb_data)->kbdc) != 0) - error = EIO; - splx(s); - - return error; -} - -/* - * Enable the access to the device; until this function is called, - * the client cannot read from the keyboard. - */ -static int -atkbd_enable(keyboard_t *kbd) -{ - int s; - - s = spltty(); - KBD_ACTIVATE(kbd); - splx(s); - return 0; -} - -/* disallow the access to the device */ -static int -atkbd_disable(keyboard_t *kbd) -{ - int s; - - s = spltty(); - KBD_DEACTIVATE(kbd); - splx(s); - return 0; -} - -/* read one byte from the keyboard if it's allowed */ -static int -atkbd_read(keyboard_t *kbd, int wait) -{ - int c; - - if (wait) - c = read_kbd_data(((atkbd_state_t *)kbd->kb_data)->kbdc); - else - c = read_kbd_data_no_wait(((atkbd_state_t *)kbd->kb_data)->kbdc); - return (KBD_IS_ACTIVE(kbd) ? c : -1); -} - -/* check if data is waiting */ -static int -atkbd_check(keyboard_t *kbd) -{ - if (!KBD_IS_ACTIVE(kbd)) - return FALSE; - return kbdc_data_ready(((atkbd_state_t *)kbd->kb_data)->kbdc); -} - -/* read char from the keyboard */ -static u_int -atkbd_read_char(keyboard_t *kbd, int wait) -{ - atkbd_state_t *state; - u_int action; - int scancode; - int keycode; - - state = (atkbd_state_t *)kbd->kb_data; -next_code: - /* do we have a composed char to return? */ - if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char > 0)) { - action = state->ks_composed_char; - state->ks_composed_char = 0; - if (action > UCHAR_MAX) - return ERRKEY; - return action; - } - - /* see if there is something in the keyboard port */ - if (wait) { - do { - scancode = read_kbd_data(state->kbdc); - } while (scancode == -1); - } else { - scancode = read_kbd_data_no_wait(state->kbdc); - if (scancode == -1) - return NOKEY; - } - - /* return the byte as is for the K_RAW mode */ - if (state->ks_mode == K_RAW) - return scancode; - - /* translate the scan code into a keycode */ - keycode = scancode & 0x7F; - switch (state->ks_prefix) { - case 0x00: /* normal scancode */ - switch(scancode) { - case 0xB8: /* left alt (compose key) released */ - if (state->ks_flags & COMPOSE) { - state->ks_flags &= ~COMPOSE; - if (state->ks_composed_char > UCHAR_MAX) - state->ks_composed_char = 0; - } - break; - case 0x38: /* left alt (compose key) pressed */ - if (!(state->ks_flags & COMPOSE)) { - state->ks_flags |= COMPOSE; - state->ks_composed_char = 0; - } - break; - case 0xE0: - case 0xE1: - state->ks_prefix = scancode; - goto next_code; - } - break; - case 0xE0: /* 0xE0 prefix */ - state->ks_prefix = 0; - switch (keycode) { - case 0x1C: /* right enter key */ - keycode = 0x59; - break; - case 0x1D: /* right ctrl key */ - keycode = 0x5A; - break; - case 0x35: /* keypad divide key */ - keycode = 0x5B; - break; - case 0x37: /* print scrn key */ - keycode = 0x5C; - break; - case 0x38: /* right alt key (alt gr) */ - keycode = 0x5D; - break; - case 0x47: /* grey home key */ - keycode = 0x5E; - break; - case 0x48: /* grey up arrow key */ - keycode = 0x5F; - break; - case 0x49: /* grey page up key */ - keycode = 0x60; - break; - case 0x4B: /* grey left arrow key */ - keycode = 0x61; - break; - case 0x4D: /* grey right arrow key */ - keycode = 0x62; - break; - case 0x4F: /* grey end key */ - keycode = 0x63; - break; - case 0x50: /* grey down arrow key */ - keycode = 0x64; - break; - case 0x51: /* grey page down key */ - keycode = 0x65; - break; - case 0x52: /* grey insert key */ - keycode = 0x66; - break; - case 0x53: /* grey delete key */ - keycode = 0x67; - break; - /* the following 3 are only used on the MS "Natural" keyboard */ - case 0x5b: /* left Window key */ - keycode = 0x69; - break; - case 0x5c: /* right Window key */ - keycode = 0x6a; - break; - case 0x5d: /* menu key */ - keycode = 0x6b; - break; - default: /* ignore everything else */ - goto next_code; - } - break; - case 0xE1: /* 0xE1 prefix */ - state->ks_prefix = 0; - if (keycode == 0x1D) - state->ks_prefix = 0x1D; - goto next_code; - /* NOT REACHED */ - case 0x1D: /* pause / break */ - state->ks_prefix = 0; - if (keycode != 0x45) - goto next_code; - keycode = 0x68; - break; - } - - /* return the key code in the K_CODE mode */ - if (state->ks_mode == K_CODE) - return (keycode | (scancode & 0x80)); - - /* compose a character code */ - if (state->ks_flags & COMPOSE) { - switch (scancode) { - /* key pressed, process it */ - case 0x47: case 0x48: case 0x49: /* keypad 7,8,9 */ - state->ks_composed_char *= 10; - state->ks_composed_char += scancode - 0x40; - if (state->ks_composed_char > UCHAR_MAX) - return ERRKEY; - goto next_code; - case 0x4B: case 0x4C: case 0x4D: /* keypad 4,5,6 */ - state->ks_composed_char *= 10; - state->ks_composed_char += scancode - 0x47; - if (state->ks_composed_char > UCHAR_MAX) - return ERRKEY; - goto next_code; - case 0x4F: case 0x50: case 0x51: /* keypad 1,2,3 */ - state->ks_composed_char *= 10; - state->ks_composed_char += scancode - 0x4E; - if (state->ks_composed_char > UCHAR_MAX) - return ERRKEY; - goto next_code; - case 0x52: /* keypad 0 */ - state->ks_composed_char *= 10; - if (state->ks_composed_char > UCHAR_MAX) - return ERRKEY; - goto next_code; - - /* key released, no interest here */ - case 0xC7: case 0xC8: case 0xC9: /* keypad 7,8,9 */ - case 0xCB: case 0xCC: case 0xCD: /* keypad 4,5,6 */ - case 0xCF: case 0xD0: case 0xD1: /* keypad 1,2,3 */ - case 0xD2: /* keypad 0 */ - goto next_code; - - case 0x38: /* left alt key */ - break; - - default: - if (state->ks_composed_char > 0) { - state->ks_flags &= ~COMPOSE; - state->ks_composed_char = 0; - return ERRKEY; - } - break; - } - } - - /* keycode to key action */ - action = genkbd_keyaction(kbd, keycode, scancode & 0x80, - &state->ks_state, &state->ks_accents); - if (action == NOKEY) - goto next_code; - else - return action; -} - -/* check if char is waiting */ -static int -atkbd_check_char(keyboard_t *kbd) -{ - atkbd_state_t *state; - - if (!KBD_IS_ACTIVE(kbd)) - return FALSE; - state = (atkbd_state_t *)kbd->kb_data; - if (!(state->ks_flags & COMPOSE) && (state->ks_composed_char > 0)) - return TRUE; - return kbdc_data_ready(state->kbdc); -} - -/* some useful control functions */ -static int -atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) -{ - /* trasnlate LED_XXX bits into the device specific bits */ - static u_char ledmap[8] = { - 0, 4, 2, 6, 1, 5, 3, 7, - }; - atkbd_state_t *state = kbd->kb_data; - int error; - int s; - int i; - - s = spltty(); - switch (cmd) { - - case KDGKBMODE: /* get keyboard mode */ - *(int *)arg = state->ks_mode; - break; - case KDSKBMODE: /* set keyboard mode */ - switch (*(int *)arg) { - case K_XLATE: - if (state->ks_mode != K_XLATE) { - /* make lock key state and LED state match */ - state->ks_state &= ~LOCK_MASK; - state->ks_state |= KBD_LED_VAL(kbd); - } - /* FALL THROUGH */ - case K_RAW: - case K_CODE: - if (state->ks_mode != *(int *)arg) { - atkbd_clear_state(kbd); - state->ks_mode = *(int *)arg; - } - break; - default: - splx(s); - return EINVAL; - } - break; - - case KDGETLED: /* get keyboard LED */ - *(int *)arg = KBD_LED_VAL(kbd); - break; - case KDSETLED: /* set keyboard LED */ - /* NOTE: lock key state in ks_state won't be changed */ - if (*(int *)arg & ~LOCK_MASK) { - splx(s); - return EINVAL; - } - i = *(int *)arg; - /* replace CAPS LED with ALTGR LED for ALTGR keyboards */ - if (kbd->kb_keymap->n_keys > ALTGR_OFFSET) { - if (i & ALKED) - i |= CLKED; - else - i &= ~CLKED; - } - if (KBD_HAS_DEVICE(kbd)) { - error = write_kbd(state->kbdc, KBDC_SET_LEDS, - ledmap[i & LED_MASK]); - if (error) { - splx(s); - return error; - } - } - KBD_LED_VAL(kbd) = *(int *)arg; - break; - - case KDGKBSTATE: /* get lock key state */ - *(int *)arg = state->ks_state & LOCK_MASK; - break; - case KDSKBSTATE: /* set lock key state */ - if (*(int *)arg & ~LOCK_MASK) { - splx(s); - return EINVAL; - } - state->ks_state &= ~LOCK_MASK; - state->ks_state |= *(int *)arg; - splx(s); - /* set LEDs and quit */ - return atkbd_ioctl(kbd, KDSETLED, arg); - - case KDSETRAD: /* set keyboard repeat rate */ - splx(s); - if (!KBD_HAS_DEVICE(kbd)) - return 0; - return write_kbd(state->kbdc, KBDC_SET_TYPEMATIC, - *(int *)arg); - - case PIO_KEYMAP: /* set keyboard translation table */ - case PIO_KEYMAPENT: /* set keyboard translation table entry */ - case PIO_DEADKEYMAP: /* set accent key translation table */ - state->ks_accents = 0; - /* FALL THROUGH */ - default: - splx(s); - return genkbd_commonioctl(kbd, cmd, arg); - } - - splx(s); - return 0; -} - -/* lock the access to the keyboard */ -static int -atkbd_lock(keyboard_t *kbd, int lock) -{ - return kbdc_lock(((atkbd_state_t *)kbd->kb_data)->kbdc, lock); -} - -/* clear the internal state of the keyboard */ -static void -atkbd_clear_state(keyboard_t *kbd) -{ - atkbd_state_t *state; - - state = (atkbd_state_t *)kbd->kb_data; - state->ks_flags = 0; - state->ks_state &= LOCK_MASK; /* preserve locking key state */ - state->ks_accents = 0; - state->ks_composed_char = 0; -#if 0 - state->ks_prefix = 0; /* XXX */ -#endif -} - -/* save the internal state */ -static int -atkbd_get_state(keyboard_t *kbd, void *buf, size_t len) -{ - if (len == 0) - return sizeof(atkbd_state_t); - if (len < sizeof(atkbd_state_t)) - return -1; - bcopy(kbd->kb_data, buf, sizeof(atkbd_state_t)); - return 0; -} - -/* set the internal state */ -static int -atkbd_set_state(keyboard_t *kbd, void *buf, size_t len) -{ - if (len < sizeof(atkbd_state_t)) - return ENOMEM; - if (((atkbd_state_t *)kbd->kb_data)->kbdc - != ((atkbd_state_t *)buf)->kbdc) - return ENOMEM; - bcopy(buf, kbd->kb_data, sizeof(atkbd_state_t)); - return 0; -} - -/* local functions */ - -static int -setup_kbd_port(KBDC kbdc, int port, int intr) -{ - if (!set_controller_command_byte(kbdc, - KBD_KBD_CONTROL_BITS, - ((port) ? KBD_ENABLE_KBD_PORT : KBD_DISABLE_KBD_PORT) - | ((intr) ? KBD_ENABLE_KBD_INT : KBD_DISABLE_KBD_INT))) - return 1; - return 0; -} - -static int -get_kbd_echo(KBDC kbdc) -{ - /* enable the keyboard port, but disable the keyboard intr. */ - if (setup_kbd_port(kbdc, TRUE, FALSE)) - /* CONTROLLER ERROR: there is very little we can do... */ - return ENXIO; - - /* see if something is present */ - write_kbd_command(kbdc, KBDC_ECHO); - if (read_kbd_data(kbdc) != KBD_ECHO) { - empty_both_buffers(kbdc, 10); - test_controller(kbdc); - test_kbd_port(kbdc); - return ENXIO; - } - - /* enable the keyboard port and intr. */ - if (setup_kbd_port(kbdc, TRUE, TRUE)) { - /* - * CONTROLLER ERROR - * This is serious; the keyboard intr is left disabled! - */ - return ENXIO; - } - - return 0; -} - -static int -probe_keyboard(KBDC kbdc, int flags) -{ - /* - * Don't try to print anything in this function. The low-level - * console may not have been initialized yet... - */ - int err; - int c; - int m; - - if (!kbdc_lock(kbdc, TRUE)) { - /* driver error? */ - return ENXIO; - } - - /* flush any noise in the buffer */ - empty_both_buffers(kbdc, 10); - - /* save the current keyboard controller command byte */ - m = kbdc_get_device_mask(kbdc) & ~KBD_KBD_CONTROL_BITS; - c = get_controller_command_byte(kbdc); - if (c == -1) { - /* CONTROLLER ERROR */ - kbdc_set_device_mask(kbdc, m); - kbdc_lock(kbdc, FALSE); - return ENXIO; - } - - /* - * The keyboard may have been screwed up by the boot block. - * We may just be able to recover from error by testing the controller - * and the keyboard port. The controller command byte needs to be - * saved before this recovery operation, as some controllers seem - * to set the command byte to particular values. - */ - test_controller(kbdc); - test_kbd_port(kbdc); - - err = get_kbd_echo(kbdc); - if (err == 0) { - kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS); - } else { - if (c != -1) - /* try to restore the command byte as before */ - set_controller_command_byte(kbdc, 0xff, c); - kbdc_set_device_mask(kbdc, m); - } - - kbdc_lock(kbdc, FALSE); - return err; -} - -static int -init_keyboard(KBDC kbdc, int *type, int flags) -{ - int codeset; - int id; - int c; - - if (!kbdc_lock(kbdc, TRUE)) { - /* driver error? */ - return EIO; - } - - /* save the current controller command byte */ - empty_both_buffers(kbdc, 10); - c = get_controller_command_byte(kbdc); - if (c == -1) { - /* CONTROLLER ERROR */ - kbdc_lock(kbdc, FALSE); - printf("atkbd: unable to get the current command byte value.\n"); - return EIO; - } - if (bootverbose) - printf("atkbd: the current kbd controller command byte %04x\n", - c); -#if 0 - /* override the keyboard lock switch */ - c |= KBD_OVERRIDE_KBD_LOCK; -#endif - - /* enable the keyboard port, but disable the keyboard intr. */ - if (setup_kbd_port(kbdc, TRUE, FALSE)) { - /* CONTROLLER ERROR: there is very little we can do... */ - printf("atkbd: unable to set the command byte.\n"); - kbdc_lock(kbdc, FALSE); - return EIO; - } - - /* - * Check if we have an XT keyboard before we attempt to reset it. - * The procedure assumes that the keyboard and the controller have - * been set up properly by BIOS and have not been messed up - * during the boot process. - */ - codeset = -1; - if (flags & KB_CONF_ALT_SCANCODESET) - /* the user says there is a XT keyboard */ - codeset = 1; -#ifdef KBD_DETECT_XT_KEYBOARD - else if ((c & KBD_TRANSLATION) == 0) { - /* SET_SCANCODE_SET is not always supported; ignore error */ - if (send_kbd_command_and_data(kbdc, KBDC_SET_SCANCODE_SET, 0) - == KBD_ACK) - codeset = read_kbd_data(kbdc); - } - if (bootverbose) - printf("atkbd: scancode set %d\n", codeset); -#endif /* KBD_DETECT_XT_KEYBOARD */ - - *type = KB_OTHER; - id = get_kbd_id(kbdc); - switch(id) { - case 0x41ab: - case 0x83ab: - *type = KB_101; - break; - case -1: /* AT 84 keyboard doesn't return ID */ - *type = KB_84; - break; - default: - break; - } - if (bootverbose) - printf("atkbd: keyboard ID 0x%x (%d)\n", id, *type); - - /* reset keyboard hardware */ - if (!(flags & KB_CONF_NO_RESET) && !reset_kbd(kbdc)) { - /* - * KEYBOARD ERROR - * Keyboard reset may fail either because the keyboard - * doen't exist, or because the keyboard doesn't pass - * the self-test, or the keyboard controller on the - * motherboard and the keyboard somehow fail to shake hands. - * It is just possible, particularly in the last case, - * that the keyoard controller may be left in a hung state. - * test_controller() and test_kbd_port() appear to bring - * the keyboard controller back (I don't know why and how, - * though.) - */ - empty_both_buffers(kbdc, 10); - test_controller(kbdc); - test_kbd_port(kbdc); - /* - * We could disable the keyboard port and interrupt... but, - * the keyboard may still exist (see above). - */ - set_controller_command_byte(kbdc, 0xff, c); - kbdc_lock(kbdc, FALSE); - if (bootverbose) - printf("atkbd: failed to reset the keyboard.\n"); - return EIO; - } - - /* - * Allow us to set the XT_KEYBD flag in UserConfig so that keyboards - * such as those on the IBM ThinkPad laptop computers can be used - * with the standard console driver. - */ - if (codeset == 1) { - if (send_kbd_command_and_data(kbdc, - KBDC_SET_SCANCODE_SET, codeset) == KBD_ACK) { - /* XT kbd doesn't need scan code translation */ - c &= ~KBD_TRANSLATION; - } else { - /* - * KEYBOARD ERROR - * The XT kbd isn't usable unless the proper scan - * code set is selected. - */ - set_controller_command_byte(kbdc, 0xff, c); - kbdc_lock(kbdc, FALSE); - printf("atkbd: unable to set the XT keyboard mode.\n"); - return EIO; - } - } - -#ifdef __alpha__ - if (send_kbd_command_and_data( - kbdc, KBDC_SET_SCANCODE_SET, 2) != KBD_ACK) { - printf("atkbd: can't set translation.\n"); - - } - c |= KBD_TRANSLATION; -#endif - - /* enable the keyboard port and intr. */ - if (!set_controller_command_byte(kbdc, - KBD_KBD_CONTROL_BITS | KBD_TRANSLATION | KBD_OVERRIDE_KBD_LOCK, - (c & (KBD_TRANSLATION | KBD_OVERRIDE_KBD_LOCK)) - | KBD_ENABLE_KBD_PORT | KBD_ENABLE_KBD_INT)) { - /* - * CONTROLLER ERROR - * This is serious; we are left with the disabled - * keyboard intr. - */ - set_controller_command_byte(kbdc, 0xff, c); - kbdc_lock(kbdc, FALSE); - printf("atkbd: unable to enable the keyboard port and intr.\n"); - return EIO; - } - - kbdc_lock(kbdc, FALSE); - return 0; -} - -static int -write_kbd(KBDC kbdc, int command, int data) -{ - int s; - - /* prevent the timeout routine from polling the keyboard */ - if (!kbdc_lock(kbdc, TRUE)) - return EBUSY; - - /* disable the keyboard and mouse interrupt */ - s = spltty(); -#if 0 - c = get_controller_command_byte(kbdc); - if ((c == -1) - || !set_controller_command_byte(kbdc, - kbdc_get_device_mask(kbdc), - KBD_DISABLE_KBD_PORT | KBD_DISABLE_KBD_INT - | KBD_DISABLE_AUX_PORT | KBD_DISABLE_AUX_INT)) { - /* CONTROLLER ERROR */ - kbdc_lock(kbdc, FALSE); - splx(s); - return EIO; - } - /* - * Now that the keyboard controller is told not to generate - * the keyboard and mouse interrupts, call `splx()' to allow - * the other tty interrupts. The clock interrupt may also occur, - * but the timeout routine (`scrn_timer()') will be blocked - * by the lock flag set via `kbdc_lock()' - */ - splx(s); -#endif - - if (send_kbd_command_and_data(kbdc, command, data) != KBD_ACK) - send_kbd_command(kbdc, KBDC_ENABLE_KBD); - -#if 0 - /* restore the interrupts */ - if (!set_controller_command_byte(kbdc, - kbdc_get_device_mask(kbdc), - c & (KBD_KBD_CONTROL_BITS | KBD_AUX_CONTROL_BITS))) { - /* CONTROLLER ERROR */ - } -#else - splx(s); -#endif - kbdc_lock(kbdc, FALSE); - - return 0; -} - -static int -get_kbd_id(KBDC kbdc) -{ - int id1, id2; - - empty_both_buffers(kbdc, 10); - id1 = id2 = -1; - if (send_kbd_command(kbdc, KBDC_SEND_DEV_ID) != KBD_ACK) - return -1; - - DELAY(10000); /* 10 msec delay */ - id1 = read_kbd_data(kbdc); - if (id1 != -1) - id2 = read_kbd_data(kbdc); - - if ((id1 == -1) || (id2 == -1)) { - empty_both_buffers(kbdc, 10); - test_controller(kbdc); - test_kbd_port(kbdc); - return -1; - } - return ((id2 << 8) | id1); -} - -#endif /* NATKBD > 0 */ diff --git a/sys/dev/kbd/atkbdc.c b/sys/dev/kbd/atkbdc.c deleted file mode 100644 index 0f61835f07634..0000000000000 --- a/sys/dev/kbd/atkbdc.c +++ /dev/null @@ -1,1017 +0,0 @@ -/*- - * Copyright (c) 1996-1999 - * Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp) - * 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. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $Id: $ - * from kbdio.c,v 1.13 1998/09/25 11:55:46 yokota Exp - */ - -#include "atkbdc.h" -#include "opt_kbd.h" - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/syslog.h> - -#include <machine/clock.h> - -#include <dev/kbd/atkbdcreg.h> - -#ifndef __i386__ -#include <isa/isareg.h> -#else -#include <i386/isa/isa.h> -#endif - -/* constants */ - -#define MAXKBDC MAX(NATKBDC, 1) - -/* macros */ - -#ifndef MAX -#define MAX(x, y) ((x) > (y) ? (x) : (y)) -#endif - -#define kbdcp(p) ((atkbdc_softc_t *)(p)) -#define nextq(i) (((i) + 1) % KBDQ_BUFSIZE) -#define availq(q) ((q)->head != (q)->tail) -#if KBDIO_DEBUG >= 2 -#define emptyq(q) ((q)->tail = (q)->head = (q)->qcount = 0) -#else -#define emptyq(q) ((q)->tail = (q)->head = 0) -#endif - -/* local variables */ - -/* - * We always need at least one copy of the kbdc_softc struct for the - * low-level console. As the low-level console accesses the keyboard - * controller before kbdc, and all other devices, is probed, we - * statically allocate one entry. XXX - */ -static atkbdc_softc_t default_kbdc; -static atkbdc_softc_t *atkbdc_softc[MAXKBDC] = { &default_kbdc }; - -static int verbose = KBDIO_DEBUG; - -/* function prototypes */ - -static int atkbdc_setup(atkbdc_softc_t *sc, int port); -static int addq(kqueue *q, int c); -static int removeq(kqueue *q); -static int wait_while_controller_busy(atkbdc_softc_t *kbdc); -static int wait_for_data(atkbdc_softc_t *kbdc); -static int wait_for_kbd_data(atkbdc_softc_t *kbdc); -static int wait_for_kbd_ack(atkbdc_softc_t *kbdc); -static int wait_for_aux_data(atkbdc_softc_t *kbdc); -static int wait_for_aux_ack(atkbdc_softc_t *kbdc); - -#if NATKBDC > 0 - -atkbdc_softc_t -*atkbdc_get_softc(int unit) -{ - atkbdc_softc_t *sc; - - if (unit >= sizeof(atkbdc_softc)/sizeof(atkbdc_softc[0])) - return NULL; - sc = atkbdc_softc[unit]; - if (sc == NULL) { - sc = atkbdc_softc[unit] - = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT); - if (sc == NULL) - return NULL; - bzero(sc, sizeof(*sc)); - sc->port = -1; /* XXX */ - } - return sc; -} - -int -atkbdc_probe_unit(atkbdc_softc_t *sc, int unit, int port) -{ - return atkbdc_setup(sc, port); -} - -#endif /* NATKBDC > 0 */ - -/* the backdoor to the keyboard controller! XXX */ -int -atkbdc_configure(void) -{ - return atkbdc_setup(atkbdc_softc[0], -1); -} - -static int -atkbdc_setup(atkbdc_softc_t *sc, int port) -{ - if (port <= 0) - port = IO_KBD; - - if (sc->port <= 0) { - sc->command_byte = -1; - sc->command_mask = 0; - sc->lock = FALSE; - sc->kbd.head = sc->kbd.tail = 0; - sc->aux.head = sc->aux.tail = 0; -#if KBDIO_DEBUG >= 2 - sc->kbd.call_count = 0; - sc->kbd.qcount = sc->kbd.max_qcount = 0; - sc->aux.call_count = 0; - sc->aux.qcount = sc->aux.max_qcount = 0; -#endif - } - sc->port = port; /* may override the previous value */ - return 0; -} - -/* associate a port number with a KBDC */ - -KBDC -kbdc_open(int port) -{ - int s; - int i; - - if (port <= 0) - port = IO_KBD; - - s = spltty(); - for (i = 0; i < sizeof(atkbdc_softc)/sizeof(atkbdc_softc[0]); ++i) { - if (atkbdc_softc[i] == NULL) - continue; - if (atkbdc_softc[i]->port == port) { - splx(s); - return (KBDC)atkbdc_softc[i]; - } - if (atkbdc_softc[i]->port <= 0) { - if (atkbdc_setup(atkbdc_softc[i], port)) - break; - splx(s); - return (KBDC)atkbdc_softc[i]; - } - } - splx(s); - return NULL; -} - -/* - * I/O access arbitration in `kbdio' - * - * The `kbdio' module uses a simplistic convention to arbitrate - * I/O access to the controller/keyboard/mouse. The convention requires - * close cooperation of the calling device driver. - * - * The device driver which utilizes the `kbdio' module are assumed to - * have the following set of routines. - * a. An interrupt handler (the bottom half of the driver). - * b. Timeout routines which may briefly polls the keyboard controller. - * c. Routines outside interrupt context (the top half of the driver). - * They should follow the rules below: - * 1. The interrupt handler may assume that it always has full access - * to the controller/keyboard/mouse. - * 2. The other routines must issue `spltty()' if they wish to - * prevent the interrupt handler from accessing - * the controller/keyboard/mouse. - * 3. The timeout routines and the top half routines of the device driver - * arbitrate I/O access by observing the lock flag in `kbdio'. - * The flag is manipulated via `kbdc_lock()'; when one wants to - * perform I/O, call `kbdc_lock(kbdc, TRUE)' and proceed only if - * the call returns with TRUE. Otherwise the caller must back off. - * Call `kbdc_lock(kbdc, FALSE)' when necessary I/O operaion - * is finished. This mechanism does not prevent the interrupt - * handler from being invoked at any time and carrying out I/O. - * Therefore, `spltty()' must be strategically placed in the device - * driver code. Also note that the timeout routine may interrupt - * `kbdc_lock()' called by the top half of the driver, but this - * interruption is OK so long as the timeout routine observes the - * the rule 4 below. - * 4. The interrupt and timeout routines should not extend I/O operation - * across more than one interrupt or timeout; they must complete - * necessary I/O operation within one invokation of the routine. - * This measns that if the timeout routine acquires the lock flag, - * it must reset the flag to FALSE before it returns. - */ - -/* set/reset polling lock */ -int -kbdc_lock(KBDC p, int lock) -{ - int prevlock; - - prevlock = kbdcp(p)->lock; - kbdcp(p)->lock = lock; - - return (prevlock != lock); -} - -/* check if any data is waiting to be processed */ -int -kbdc_data_ready(KBDC p) -{ - return (availq(&kbdcp(p)->kbd) || availq(&kbdcp(p)->aux) - || (inb(kbdcp(p)->port + KBD_STATUS_PORT) & KBDS_ANY_BUFFER_FULL)); -} - -/* queuing functions */ - -static int -addq(kqueue *q, int c) -{ - if (nextq(q->tail) != q->head) { - q->q[q->tail] = c; - q->tail = nextq(q->tail); -#if KBDIO_DEBUG >= 2 - ++q->call_count; - ++q->qcount; - if (q->qcount > q->max_qcount) - q->max_qcount = q->qcount; -#endif - return TRUE; - } - return FALSE; -} - -static int -removeq(kqueue *q) -{ - int c; - - if (q->tail != q->head) { - c = q->q[q->head]; - q->head = nextq(q->head); -#if KBDIO_DEBUG >= 2 - --q->qcount; -#endif - return c; - } - return -1; -} - -/* - * device I/O routines - */ -static int -wait_while_controller_busy(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 100msec at most */ - int retry = 5000; - int port = kbdc->port; - int f; - - while ((f = inb(port + KBD_STATUS_PORT)) & KBDS_INPUT_BUFFER_FULL) { - if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdc->kbd, inb(port + KBD_DATA_PORT)); - } else if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdc->aux, inb(port + KBD_DATA_PORT)); - } - DELAY(KBDC_DELAYTIME); - if (--retry < 0) - return FALSE; - } - return TRUE; -} - -/* - * wait for any data; whether it's from the controller, - * the keyboard, or the aux device. - */ -static int -wait_for_data(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 200msec at most */ - int retry = 10000; - int port = kbdc->port; - int f; - - while ((f = inb(port + KBD_STATUS_PORT) & KBDS_ANY_BUFFER_FULL) == 0) { - DELAY(KBDC_DELAYTIME); - if (--retry < 0) - return 0; - } - DELAY(KBDD_DELAYTIME); - return f; -} - -/* wait for data from the keyboard */ -static int -wait_for_kbd_data(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 200msec at most */ - int retry = 10000; - int port = kbdc->port; - int f; - - while ((f = inb(port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL) - != KBDS_KBD_BUFFER_FULL) { - if (f == KBDS_AUX_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdc->aux, inb(port + KBD_DATA_PORT)); - } - DELAY(KBDC_DELAYTIME); - if (--retry < 0) - return 0; - } - DELAY(KBDD_DELAYTIME); - return f; -} - -/* - * wait for an ACK(FAh), RESEND(FEh), or RESET_FAIL(FCh) from the keyboard. - * queue anything else. - */ -static int -wait_for_kbd_ack(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 200msec at most */ - int retry = 10000; - int port = kbdc->port; - int f; - int b; - - while (retry-- > 0) { - if ((f = inb(port + KBD_STATUS_PORT)) & KBDS_ANY_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - b = inb(port + KBD_DATA_PORT); - if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { - if ((b == KBD_ACK) || (b == KBD_RESEND) - || (b == KBD_RESET_FAIL)) - return b; - addq(&kbdc->kbd, b); - } else if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { - addq(&kbdc->aux, b); - } - } - DELAY(KBDC_DELAYTIME); - } - return -1; -} - -/* wait for data from the aux device */ -static int -wait_for_aux_data(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 200msec at most */ - int retry = 10000; - int port = kbdc->port; - int f; - - while ((f = inb(port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL) - != KBDS_AUX_BUFFER_FULL) { - if (f == KBDS_KBD_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdc->kbd, inb(port + KBD_DATA_PORT)); - } - DELAY(KBDC_DELAYTIME); - if (--retry < 0) - return 0; - } - DELAY(KBDD_DELAYTIME); - return f; -} - -/* - * wait for an ACK(FAh), RESEND(FEh), or RESET_FAIL(FCh) from the aux device. - * queue anything else. - */ -static int -wait_for_aux_ack(struct atkbdc_softc *kbdc) -{ - /* CPU will stay inside the loop for 200msec at most */ - int retry = 10000; - int port = kbdc->port; - int f; - int b; - - while (retry-- > 0) { - if ((f = inb(port + KBD_STATUS_PORT)) & KBDS_ANY_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - b = inb(port + KBD_DATA_PORT); - if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { - if ((b == PSM_ACK) || (b == PSM_RESEND) - || (b == PSM_RESET_FAIL)) - return b; - addq(&kbdc->aux, b); - } else if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { - addq(&kbdc->kbd, b); - } - } - DELAY(KBDC_DELAYTIME); - } - return -1; -} - -/* write a one byte command to the controller */ -int -write_controller_command(KBDC p, int c) -{ - if (!wait_while_controller_busy(kbdcp(p))) - return FALSE; - outb(kbdcp(p)->port + KBD_COMMAND_PORT, c); - return TRUE; -} - -/* write a one byte data to the controller */ -int -write_controller_data(KBDC p, int c) -{ - if (!wait_while_controller_busy(kbdcp(p))) - return FALSE; - outb(kbdcp(p)->port + KBD_DATA_PORT, c); - return TRUE; -} - -/* write a one byte keyboard command */ -int -write_kbd_command(KBDC p, int c) -{ - if (!wait_while_controller_busy(kbdcp(p))) - return FALSE; - outb(kbdcp(p)->port + KBD_DATA_PORT, c); - return TRUE; -} - -/* write a one byte auxiliary device command */ -int -write_aux_command(KBDC p, int c) -{ - if (!write_controller_command(p, KBDC_WRITE_TO_AUX)) - return FALSE; - return write_controller_data(p, c); -} - -/* send a command to the keyboard and wait for ACK */ -int -send_kbd_command(KBDC p, int c) -{ - int retry = KBD_MAXRETRY; - int res = -1; - - while (retry-- > 0) { - if (!write_kbd_command(p, c)) - continue; - res = wait_for_kbd_ack(kbdcp(p)); - if (res == KBD_ACK) - break; - } - return res; -} - -/* send a command to the auxiliary device and wait for ACK */ -int -send_aux_command(KBDC p, int c) -{ - int retry = KBD_MAXRETRY; - int res = -1; - - while (retry-- > 0) { - if (!write_aux_command(p, c)) - continue; - /* - * FIXME: XXX - * The aux device may have already sent one or two bytes of - * status data, when a command is received. It will immediately - * stop data transmission, thus, leaving an incomplete data - * packet in our buffer. We have to discard any unprocessed - * data in order to remove such packets. Well, we may remove - * unprocessed, but necessary data byte as well... - */ - emptyq(&kbdcp(p)->aux); - res = wait_for_aux_ack(kbdcp(p)); - if (res == PSM_ACK) - break; - } - return res; -} - -/* send a command and a data to the keyboard, wait for ACKs */ -int -send_kbd_command_and_data(KBDC p, int c, int d) -{ - int retry; - int res = -1; - - for (retry = KBD_MAXRETRY; retry > 0; --retry) { - if (!write_kbd_command(p, c)) - continue; - res = wait_for_kbd_ack(kbdcp(p)); - if (res == KBD_ACK) - break; - else if (res != KBD_RESEND) - return res; - } - if (retry <= 0) - return res; - - for (retry = KBD_MAXRETRY, res = -1; retry > 0; --retry) { - if (!write_kbd_command(p, d)) - continue; - res = wait_for_kbd_ack(kbdcp(p)); - if (res != KBD_RESEND) - break; - } - return res; -} - -/* send a command and a data to the auxiliary device, wait for ACKs */ -int -send_aux_command_and_data(KBDC p, int c, int d) -{ - int retry; - int res = -1; - - for (retry = KBD_MAXRETRY; retry > 0; --retry) { - if (!write_aux_command(p, c)) - continue; - emptyq(&kbdcp(p)->aux); - res = wait_for_aux_ack(kbdcp(p)); - if (res == PSM_ACK) - break; - else if (res != PSM_RESEND) - return res; - } - if (retry <= 0) - return res; - - for (retry = KBD_MAXRETRY, res = -1; retry > 0; --retry) { - if (!write_aux_command(p, d)) - continue; - res = wait_for_aux_ack(kbdcp(p)); - if (res != PSM_RESEND) - break; - } - return res; -} - -/* - * read one byte from any source; whether from the controller, - * the keyboard, or the aux device - */ -int -read_controller_data(KBDC p) -{ - if (availq(&kbdcp(p)->kbd)) - return removeq(&kbdcp(p)->kbd); - if (availq(&kbdcp(p)->aux)) - return removeq(&kbdcp(p)->aux); - if (!wait_for_data(kbdcp(p))) - return -1; /* timeout */ - return inb(kbdcp(p)->port + KBD_DATA_PORT); -} - -#if KBDIO_DEBUG >= 2 -static int call = 0; -#endif - -/* read one byte from the keyboard */ -int -read_kbd_data(KBDC p) -{ -#if KBDIO_DEBUG >= 2 - if (++call > 2000) { - call = 0; - log(LOG_DEBUG, "kbdc: kbd q: %d calls, max %d chars, " - "aux q: %d calls, max %d chars\n", - kbdcp(p)->kbd.call_count, kbdcp(p)->kbd.max_qcount, - kbdcp(p)->aux.call_count, kbdcp(p)->aux.max_qcount); - } -#endif - - if (availq(&kbdcp(p)->kbd)) - return removeq(&kbdcp(p)->kbd); - if (!wait_for_kbd_data(kbdcp(p))) - return -1; /* timeout */ - return inb(kbdcp(p)->port + KBD_DATA_PORT); -} - -/* read one byte from the keyboard, but return immediately if - * no data is waiting - */ -int -read_kbd_data_no_wait(KBDC p) -{ - int f; - -#if KBDIO_DEBUG >= 2 - if (++call > 2000) { - call = 0; - log(LOG_DEBUG, "kbdc: kbd q: %d calls, max %d chars, " - "aux q: %d calls, max %d chars\n", - kbdcp(p)->kbd.call_count, kbdcp(p)->kbd.max_qcount, - kbdcp(p)->aux.call_count, kbdcp(p)->aux.max_qcount); - } -#endif - - if (availq(&kbdcp(p)->kbd)) - return removeq(&kbdcp(p)->kbd); - f = inb(kbdcp(p)->port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL; - if (f == KBDS_AUX_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdcp(p)->aux, inb(kbdcp(p)->port + KBD_DATA_PORT)); - f = inb(kbdcp(p)->port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL; - } - if (f == KBDS_KBD_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - return inb(kbdcp(p)->port + KBD_DATA_PORT); - } - return -1; /* no data */ -} - -/* read one byte from the aux device */ -int -read_aux_data(KBDC p) -{ - if (availq(&kbdcp(p)->aux)) - return removeq(&kbdcp(p)->aux); - if (!wait_for_aux_data(kbdcp(p))) - return -1; /* timeout */ - return inb(kbdcp(p)->port + KBD_DATA_PORT); -} - -/* read one byte from the aux device, but return immediately if - * no data is waiting - */ -int -read_aux_data_no_wait(KBDC p) -{ - int f; - - if (availq(&kbdcp(p)->aux)) - return removeq(&kbdcp(p)->aux); - f = inb(kbdcp(p)->port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL; - if (f == KBDS_KBD_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - addq(&kbdcp(p)->kbd, inb(kbdcp(p)->port + KBD_DATA_PORT)); - f = inb(kbdcp(p)->port + KBD_STATUS_PORT) & KBDS_BUFFER_FULL; - } - if (f == KBDS_AUX_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - return inb(kbdcp(p)->port + KBD_DATA_PORT); - } - return -1; /* no data */ -} - -/* discard data from the keyboard */ -void -empty_kbd_buffer(KBDC p, int wait) -{ - int t; - int b; - int f; -#if KBDIO_DEBUG >= 2 - int c1 = 0; - int c2 = 0; -#endif - int delta = 2; - - for (t = wait; t > 0; ) { - if ((f = inb(kbdcp(p)->port + KBD_STATUS_PORT)) & KBDS_ANY_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - b = inb(kbdcp(p)->port + KBD_DATA_PORT); - if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { - addq(&kbdcp(p)->aux, b); -#if KBDIO_DEBUG >= 2 - ++c2; - } else { - ++c1; -#endif - } - t = wait; - } else { - t -= delta; - } - DELAY(delta*1000); - } -#if KBDIO_DEBUG >= 2 - if ((c1 > 0) || (c2 > 0)) - log(LOG_DEBUG, "kbdc: %d:%d char read (empty_kbd_buffer)\n", c1, c2); -#endif - - emptyq(&kbdcp(p)->kbd); -} - -/* discard data from the aux device */ -void -empty_aux_buffer(KBDC p, int wait) -{ - int t; - int b; - int f; -#if KBDIO_DEBUG >= 2 - int c1 = 0; - int c2 = 0; -#endif - int delta = 2; - - for (t = wait; t > 0; ) { - if ((f = inb(kbdcp(p)->port + KBD_STATUS_PORT)) & KBDS_ANY_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - b = inb(kbdcp(p)->port + KBD_DATA_PORT); - if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { - addq(&kbdcp(p)->kbd, b); -#if KBDIO_DEBUG >= 2 - ++c1; - } else { - ++c2; -#endif - } - t = wait; - } else { - t -= delta; - } - DELAY(delta*1000); - } -#if KBDIO_DEBUG >= 2 - if ((c1 > 0) || (c2 > 0)) - log(LOG_DEBUG, "kbdc: %d:%d char read (empty_aux_buffer)\n", c1, c2); -#endif - - emptyq(&kbdcp(p)->aux); -} - -/* discard any data from the keyboard or the aux device */ -void -empty_both_buffers(KBDC p, int wait) -{ - int t; - int f; -#if KBDIO_DEBUG >= 2 - int c1 = 0; - int c2 = 0; -#endif - int delta = 2; - - for (t = wait; t > 0; ) { - if ((f = inb(kbdcp(p)->port + KBD_STATUS_PORT)) & KBDS_ANY_BUFFER_FULL) { - DELAY(KBDD_DELAYTIME); - (void)inb(kbdcp(p)->port + KBD_DATA_PORT); -#if KBDIO_DEBUG >= 2 - if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) - ++c1; - else - ++c2; -#endif - t = wait; - } else { - t -= delta; - } - DELAY(delta*1000); - } -#if KBDIO_DEBUG >= 2 - if ((c1 > 0) || (c2 > 0)) - log(LOG_DEBUG, "kbdc: %d:%d char read (empty_both_buffers)\n", c1, c2); -#endif - - emptyq(&kbdcp(p)->kbd); - emptyq(&kbdcp(p)->aux); -} - -/* keyboard and mouse device control */ - -/* NOTE: enable the keyboard port but disable the keyboard - * interrupt before calling "reset_kbd()". - */ -int -reset_kbd(KBDC p) -{ - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = KBD_RESEND; /* keep the compiler happy */ - - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (!write_kbd_command(p, KBDC_RESET_KBD)) - continue; - emptyq(&kbdcp(p)->kbd); - c = read_controller_data(p); - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: RESET_KBD return code:%04x\n", c); - if (c == KBD_ACK) /* keyboard has agreed to reset itself... */ - break; - } - if (retry < 0) - return FALSE; - - while (again-- > 0) { - /* wait awhile, well, in fact we must wait quite loooooooooooong */ - DELAY(KBD_RESETDELAY*1000); - c = read_controller_data(p); /* RESET_DONE/RESET_FAIL */ - if (c != -1) /* wait again if the controller is not ready */ - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: RESET_KBD status:%04x\n", c); - if (c != KBD_RESET_DONE) - return FALSE; - return TRUE; -} - -/* NOTE: enable the aux port but disable the aux interrupt - * before calling `reset_aux_dev()'. - */ -int -reset_aux_dev(KBDC p) -{ - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = PSM_RESEND; /* keep the compiler happy */ - - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (!write_aux_command(p, PSMC_RESET_DEV)) - continue; - emptyq(&kbdcp(p)->aux); - /* NOTE: Compaq Armada laptops require extra delay here. XXX */ - for (again = KBD_MAXWAIT; again > 0; --again) { - DELAY(KBD_RESETDELAY*1000); - c = read_aux_data_no_wait(p); - if (c != -1) - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: RESET_AUX return code:%04x\n", c); - if (c == PSM_ACK) /* aux dev is about to reset... */ - break; - } - if (retry < 0) - return FALSE; - - for (again = KBD_MAXWAIT; again > 0; --again) { - /* wait awhile, well, quite looooooooooooong */ - DELAY(KBD_RESETDELAY*1000); - c = read_aux_data_no_wait(p); /* RESET_DONE/RESET_FAIL */ - if (c != -1) /* wait again if the controller is not ready */ - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: RESET_AUX status:%04x\n", c); - if (c != PSM_RESET_DONE) /* reset status */ - return FALSE; - - c = read_aux_data(p); /* device ID */ - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: RESET_AUX ID:%04x\n", c); - /* NOTE: we could check the device ID now, but leave it later... */ - return TRUE; -} - -/* controller diagnostics and setup */ - -int -test_controller(KBDC p) -{ - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = KBD_DIAG_FAIL; - - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (write_controller_command(p, KBDC_DIAGNOSE)) - break; - } - if (retry < 0) - return FALSE; - - emptyq(&kbdcp(p)->kbd); - while (again-- > 0) { - /* wait awhile */ - DELAY(KBD_RESETDELAY*1000); - c = read_controller_data(p); /* DIAG_DONE/DIAG_FAIL */ - if (c != -1) /* wait again if the controller is not ready */ - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: DIAGNOSE status:%04x\n", c); - return (c == KBD_DIAG_DONE); -} - -int -test_kbd_port(KBDC p) -{ - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = -1; - - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (write_controller_command(p, KBDC_TEST_KBD_PORT)) - break; - } - if (retry < 0) - return FALSE; - - emptyq(&kbdcp(p)->kbd); - while (again-- > 0) { - c = read_controller_data(p); - if (c != -1) /* try again if the controller is not ready */ - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: TEST_KBD_PORT status:%04x\n", c); - return c; -} - -int -test_aux_port(KBDC p) -{ - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = -1; - - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (write_controller_command(p, KBDC_TEST_AUX_PORT)) - break; - } - if (retry < 0) - return FALSE; - - emptyq(&kbdcp(p)->kbd); - while (again-- > 0) { - c = read_controller_data(p); - if (c != -1) /* try again if the controller is not ready */ - break; - } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: TEST_AUX_PORT status:%04x\n", c); - return c; -} - -int -kbdc_get_device_mask(KBDC p) -{ - return kbdcp(p)->command_mask; -} - -void -kbdc_set_device_mask(KBDC p, int mask) -{ - kbdcp(p)->command_mask = - mask & (KBD_KBD_CONTROL_BITS | KBD_AUX_CONTROL_BITS); -} - -int -get_controller_command_byte(KBDC p) -{ - if (kbdcp(p)->command_byte != -1) - return kbdcp(p)->command_byte; - if (!write_controller_command(p, KBDC_GET_COMMAND_BYTE)) - return -1; - emptyq(&kbdcp(p)->kbd); - kbdcp(p)->command_byte = read_controller_data(p); - return kbdcp(p)->command_byte; -} - -int -set_controller_command_byte(KBDC p, int mask, int command) -{ - if (get_controller_command_byte(p) == -1) - return FALSE; - - command = (kbdcp(p)->command_byte & ~mask) | (command & mask); - if (command & KBD_DISABLE_KBD_PORT) { - if (!write_controller_command(p, KBDC_DISABLE_KBD_PORT)) - return FALSE; - } - if (!write_controller_command(p, KBDC_SET_COMMAND_BYTE)) - return FALSE; - if (!write_controller_data(p, command)) - return FALSE; - kbdcp(p)->command_byte = command; - - if (verbose) - log(LOG_DEBUG, "kbdc: new command byte:%04x (set_controller...)\n", - command); - - return TRUE; -} diff --git a/sys/dev/kbd/atkbdcreg.h b/sys/dev/kbd/atkbdcreg.h deleted file mode 100644 index 81b0ad35dce9d..0000000000000 --- a/sys/dev/kbd/atkbdcreg.h +++ /dev/null @@ -1,246 +0,0 @@ -/*- - * Copyright (c) 1996-1999 - * Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp) - * 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. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $Id: $ - * from kbdio.h,v 1.8 1998/09/25 11:55:46 yokota Exp - */ - -#ifndef _DEV_KBD_ATKBDCREG_H_ -#define _DEV_KBD_ATKBDCREG_H_ - -/* constants */ - -/* I/O ports */ -#define KBD_STATUS_PORT 4 /* status port, read */ -#define KBD_COMMAND_PORT 4 /* controller command port, write */ -#define KBD_DATA_PORT 0 /* data port, read/write - * also used as keyboard command - * and mouse command port - */ - -/* controller commands (sent to KBD_COMMAND_PORT) */ -#define KBDC_SET_COMMAND_BYTE 0x0060 -#define KBDC_GET_COMMAND_BYTE 0x0020 -#define KBDC_WRITE_TO_AUX 0x00d4 -#define KBDC_DISABLE_AUX_PORT 0x00a7 -#define KBDC_ENABLE_AUX_PORT 0x00a8 -#define KBDC_TEST_AUX_PORT 0x00a9 -#define KBDC_DIAGNOSE 0x00aa -#define KBDC_TEST_KBD_PORT 0x00ab -#define KBDC_DISABLE_KBD_PORT 0x00ad -#define KBDC_ENABLE_KBD_PORT 0x00ae - -/* controller command byte (set by KBDC_SET_COMMAND_BYTE) */ -#define KBD_TRANSLATION 0x0040 -#define KBD_RESERVED_BITS 0x0004 -#define KBD_OVERRIDE_KBD_LOCK 0x0008 -#define KBD_ENABLE_KBD_PORT 0x0000 -#define KBD_DISABLE_KBD_PORT 0x0010 -#define KBD_ENABLE_AUX_PORT 0x0000 -#define KBD_DISABLE_AUX_PORT 0x0020 -#define KBD_ENABLE_AUX_INT 0x0002 -#define KBD_DISABLE_AUX_INT 0x0000 -#define KBD_ENABLE_KBD_INT 0x0001 -#define KBD_DISABLE_KBD_INT 0x0000 -#define KBD_KBD_CONTROL_BITS (KBD_DISABLE_KBD_PORT | KBD_ENABLE_KBD_INT) -#define KBD_AUX_CONTROL_BITS (KBD_DISABLE_AUX_PORT | KBD_ENABLE_AUX_INT) - -/* keyboard device commands (sent to KBD_DATA_PORT) */ -#define KBDC_RESET_KBD 0x00ff -#define KBDC_ENABLE_KBD 0x00f4 -#define KBDC_DISABLE_KBD 0x00f5 -#define KBDC_SET_DEFAULTS 0x00f6 -#define KBDC_SEND_DEV_ID 0x00f2 -#define KBDC_SET_LEDS 0x00ed -#define KBDC_ECHO 0x00ee -#define KBDC_SET_SCANCODE_SET 0x00f0 -#define KBDC_SET_TYPEMATIC 0x00f3 - -/* aux device commands (sent to KBD_DATA_PORT) */ -#define PSMC_RESET_DEV 0x00ff -#define PSMC_ENABLE_DEV 0x00f4 -#define PSMC_DISABLE_DEV 0x00f5 -#define PSMC_SET_DEFAULTS 0x00f6 -#define PSMC_SEND_DEV_ID 0x00f2 -#define PSMC_SEND_DEV_STATUS 0x00e9 -#define PSMC_SEND_DEV_DATA 0x00eb -#define PSMC_SET_SCALING11 0x00e6 -#define PSMC_SET_SCALING21 0x00e7 -#define PSMC_SET_RESOLUTION 0x00e8 -#define PSMC_SET_STREAM_MODE 0x00ea -#define PSMC_SET_REMOTE_MODE 0x00f0 -#define PSMC_SET_SAMPLING_RATE 0x00f3 - -/* PSMC_SET_RESOLUTION argument */ -#define PSMD_RES_LOW 0 /* typically 25ppi */ -#define PSMD_RES_MEDIUM_LOW 1 /* typically 50ppi */ -#define PSMD_RES_MEDIUM_HIGH 2 /* typically 100ppi (default) */ -#define PSMD_RES_HIGH 3 /* typically 200ppi */ -#define PSMD_MAX_RESOLUTION PSMD_RES_HIGH - -/* PSMC_SET_SAMPLING_RATE */ -#define PSMD_MAX_RATE 255 /* FIXME: not sure if it's possible */ - -/* status bits (KBD_STATUS_PORT) */ -#define KBDS_BUFFER_FULL 0x0021 -#define KBDS_ANY_BUFFER_FULL 0x0001 -#define KBDS_KBD_BUFFER_FULL 0x0001 -#define KBDS_AUX_BUFFER_FULL 0x0021 -#define KBDS_INPUT_BUFFER_FULL 0x0002 - -/* return code */ -#define KBD_ACK 0x00fa -#define KBD_RESEND 0x00fe -#define KBD_RESET_DONE 0x00aa -#define KBD_RESET_FAIL 0x00fc -#define KBD_DIAG_DONE 0x0055 -#define KBD_DIAG_FAIL 0x00fd -#define KBD_ECHO 0x00ee - -#define PSM_ACK 0x00fa -#define PSM_RESEND 0x00fe -#define PSM_RESET_DONE 0x00aa -#define PSM_RESET_FAIL 0x00fc - -/* aux device ID */ -#define PSM_MOUSE_ID 0 -#define PSM_BALLPOINT_ID 2 -#define PSM_INTELLI_ID 3 - -#ifdef KERNEL - -#define ATKBDC_DRIVER_NAME "atkbdc" - -/* - * driver specific options: the following options may be set by - * `options' statements in the kernel configuration file. - */ - -/* retry count */ -#ifndef KBD_MAXRETRY -#define KBD_MAXRETRY 3 -#endif - -/* timing parameters */ -#ifndef KBD_RESETDELAY -#define KBD_RESETDELAY 200 /* wait 200msec after kbd/mouse reset */ -#endif -#ifndef KBD_MAXWAIT -#define KBD_MAXWAIT 5 /* wait 5 times at most after reset */ -#endif - -/* I/O recovery time */ -#define KBDC_DELAYTIME 20 -#define KBDD_DELAYTIME 7 - -/* debug option */ -#ifndef KBDIO_DEBUG -#define KBDIO_DEBUG 0 -#endif - -/* end of driver specific options */ - -/* types/structures */ - -#define KBDQ_BUFSIZE 32 - -typedef struct _kqueue { - int head; - int tail; - unsigned char q[KBDQ_BUFSIZE]; -#if KBDIO_DEBUG >= 2 - int call_count; - int qcount; - int max_qcount; -#endif -} kqueue; - -typedef struct atkbdc_softc { - int port; /* base port address */ - int command_byte; /* current command byte value */ - int command_mask; /* command byte mask bits for kbd/aux devices */ - int lock; /* FIXME: XXX not quite a semaphore... */ - kqueue kbd; /* keyboard data queue */ - kqueue aux; /* auxiliary data queue */ -} atkbdc_softc_t; - -enum kbdc_device_ivar { - KBDC_IVAR_PORT, - KBDC_IVAR_IRQ, - KBDC_IVAR_FLAGS, -}; - -typedef caddr_t KBDC; - -/* function prototypes */ - -atkbdc_softc_t *atkbdc_get_softc(int unit); -int atkbdc_probe_unit(atkbdc_softc_t *sc, int unit, int port); -int atkbdc_configure(void); - -KBDC kbdc_open(int port); -int kbdc_lock(KBDC kbdc, int lock); -int kbdc_data_ready(KBDC kbdc); - -int write_controller_command(KBDC kbdc,int c); -int write_controller_data(KBDC kbdc,int c); - -int write_kbd_command(KBDC kbdc,int c); -int write_aux_command(KBDC kbdc,int c); -int send_kbd_command(KBDC kbdc,int c); -int send_aux_command(KBDC kbdc,int c); -int send_kbd_command_and_data(KBDC kbdc,int c,int d); -int send_aux_command_and_data(KBDC kbdc,int c,int d); - -int read_controller_data(KBDC kbdc); -int read_kbd_data(KBDC kbdc); -int read_kbd_data_no_wait(KBDC kbdc); -int read_aux_data(KBDC kbdc); -int read_aux_data_no_wait(KBDC kbdc); - -void empty_kbd_buffer(KBDC kbdc, int t); -void empty_aux_buffer(KBDC kbdc, int t); -void empty_both_buffers(KBDC kbdc, int t); - -int reset_kbd(KBDC kbdc); -int reset_aux_dev(KBDC kbdc); - -int test_controller(KBDC kbdc); -int test_kbd_port(KBDC kbdc); -int test_aux_port(KBDC kbdc); - -int kbdc_get_device_mask(KBDC kbdc); -void kbdc_set_device_mask(KBDC kbdc, int mask); - -int get_controller_command_byte(KBDC kbdc); -int set_controller_command_byte(KBDC kbdc, int command, int flag); - -#endif /* KERNEL */ - -#endif /* !_DEV_KBD_ATKBDCREG_H_ */ diff --git a/sys/dev/kbd/atkbdreg.h b/sys/dev/kbd/atkbdreg.h deleted file mode 100644 index 9f20eeea5f3d7..0000000000000 --- a/sys/dev/kbd/atkbdreg.h +++ /dev/null @@ -1,61 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHORS ``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 AUTHORS 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. - * - * $Id: $ - */ - -#ifndef _DEV_KBD_ATKBDREG_H_ -#define _DEV_KBD_ATKBDREG_H_ - -#define ATKBD_DRIVER_NAME "atkbd" -#define ATKBD_UNIT(dev) minor(dev) -#define ATKBD_MKMINOR(unit) (unit) - -/* device configuration flags (atkbdprobe, atkbdattach) */ -#define KB_CONF_FAIL_IF_NO_KBD (1 << 0) /* don't install if no kbd is found */ -#define KB_CONF_NO_RESET (1 << 1) /* don't reset the keyboard */ -#define KB_CONF_ALT_SCANCODESET (1 << 2) /* assume the XT type keyboard */ - -#ifdef KERNEL - -typedef struct atkbd_softc { - short flags; -#define ATKBD_ATTACHED (1 << 0) - keyboard_t *kbd; -#ifdef KBD_INSTALL_CDEV - genkbd_softc_t gensc; -#endif -} atkbd_softc_t; - -#ifdef __i386__ -atkbd_softc_t *atkbd_get_softc(int unit); -#endif -int atkbd_probe_unit(int unit, atkbd_softc_t *sc, - int port, int irq, int flags); -int atkbd_attach_unit(int unit, atkbd_softc_t *sc); - -#endif /* KERNEL */ - -#endif /* !_DEV_KBD_ATKBDREG_H_ */ diff --git a/sys/dev/kbd/kbd.c b/sys/dev/kbd/kbd.c deleted file mode 100644 index e8c638327f909..0000000000000 --- a/sys/dev/kbd/kbd.c +++ /dev/null @@ -1,1198 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHORS ``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 AUTHORS 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. - * - * $Id: kbd.c,v 1.2 1999/01/12 10:35:58 yokota Exp $ - */ - -#include "kbd.h" -#include "opt_kbd.h" - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/conf.h> -#include <sys/proc.h> -#include <sys/tty.h> -#include <sys/poll.h> -#include <sys/vnode.h> -#include <sys/uio.h> - -#include <machine/console.h> - -#include <dev/kbd/kbdreg.h> - -/* local arrays */ - -/* - * We need at least one entry each in order to initialize a keyboard - * for the kernel console. The arrays will be increased dynamically - * when necessary. - */ - -static int keyboards = 1; -static keyboard_t *kbd_ini; -static keyboard_t **keyboard = &kbd_ini; -static keyboard_switch_t *kbdsw_ini; - keyboard_switch_t **kbdsw = &kbdsw_ini; - -#ifdef KBD_INSTALL_CDEV - -#define ARRAY_DELTA 4 - -static struct cdevsw *kbdcdevsw_ini; -static struct cdevsw **kbdcdevsw = &kbdcdevsw_ini; - -static void -kbd_realloc_array(void) -{ - keyboard_t **new_kbd; - keyboard_switch_t **new_kbdsw; - struct cdevsw **new_cdevsw; - int newsize; - int s; - - s = spltty(); - newsize = ((keyboards + ARRAY_DELTA)/ARRAY_DELTA)*ARRAY_DELTA; - new_kbd = malloc(sizeof(*new_kbd)*newsize, M_DEVBUF, M_NOWAIT); - new_kbdsw = malloc(sizeof(*new_kbdsw)*newsize, M_DEVBUF, M_NOWAIT); - new_cdevsw = malloc(sizeof(*new_cdevsw)*newsize, M_DEVBUF, M_NOWAIT); - bzero(new_kbd, sizeof(*new_kbd)*newsize); - bzero(new_kbdsw, sizeof(*new_kbdsw)*newsize); - bzero(new_cdevsw, sizeof(*new_cdevsw)*newsize); - bcopy(keyboard, new_kbd, sizeof(*keyboard)*keyboards); - bcopy(kbdsw, new_kbdsw, sizeof(*kbdsw)*keyboards); - bcopy(kbdcdevsw, new_cdevsw, sizeof(*kbdcdevsw)*keyboards); - if (keyboards > 1) { - free(keyboard, M_DEVBUF); - free(kbdsw, M_DEVBUF); - free(kbdcdevsw, M_DEVBUF); - } - keyboard = new_kbd; - kbdsw = new_kbdsw; - kbdcdevsw = new_cdevsw; - keyboards = newsize; - splx(s); - - if (bootverbose) - printf("kbd: new array size %d\n", keyboards); -} - -#endif /* KBD_INSTALL_CDEV */ - -/* - * Low-level keyboard driver functions - * Keyboard subdrivers, such as the AT keyboard driver and the USB keyboard - * driver, call these functions to initialize the keyboard_t structure - * and register it to the virtual keyboard driver `kbd'. - */ - -/* initialize the keyboard_t structure */ -void -kbd_init_struct(keyboard_t *kbd, char *name, int type, int unit, int config, - int port, int port_size) -{ - kbd->kb_flags = KB_NO_DEVICE; /* device has not been found */ - kbd->kb_name = name; - kbd->kb_type = type; - kbd->kb_unit = unit; - kbd->kb_config = config; - kbd->kb_led = 0; /* unknown */ - kbd->kb_io_base = port; - kbd->kb_io_size = port_size; - kbd->kb_data = NULL; - kbd->kb_keymap = NULL; - kbd->kb_accentmap = NULL; - kbd->kb_fkeytab = NULL; - kbd->kb_fkeytab_size = 0; -} - -void -kbd_set_maps(keyboard_t *kbd, keymap_t *keymap, accentmap_t *accmap, - fkeytab_t *fkeymap, int fkeymap_size) -{ - kbd->kb_keymap = keymap; - kbd->kb_accentmap = accmap; - kbd->kb_fkeytab = fkeymap; - kbd->kb_fkeytab_size = fkeymap_size; -} - -/* register a keyboard and associate it with a function table */ -int -kbd_register(keyboard_t *kbd) -{ - keyboard_driver_t **list; - keyboard_driver_t *p; - int index; - - for (index = 0; index < keyboards; ++index) { - if (keyboard[index] == NULL) - break; - } - if (index >= keyboards) - return -1; - - kbd->kb_index = index; - KBD_UNBUSY(kbd); - KBD_VALID(kbd); - kbd->kb_active = 0; /* disabled until someone calls kbd_enable() */ - kbd->kb_token = NULL; - kbd->kb_callback.kc_func = NULL; - kbd->kb_callback.kc_arg = NULL; - - list = (keyboard_driver_t **)kbddriver_set.ls_items; - while ((p = *list++) != NULL) { - if (strcmp(p->name, kbd->kb_name) == 0) { - keyboard[index] = kbd; - kbdsw[index] = p->kbdsw; - return index; - } - } - - return -1; -} - -int -kbd_unregister(keyboard_t *kbd) -{ - int error; - int s; - - if ((kbd->kb_index < 0) || (kbd->kb_index >= keyboards)) - return ENOENT; - if (keyboard[kbd->kb_index] != kbd) - return ENOENT; - - s = spltty(); - if (KBD_IS_BUSY(kbd)) { - error = (*kbd->kb_callback.kc_func)(kbd, KBDIO_UNLOADING, - kbd->kb_callback.kc_arg); - if (error) { - splx(s); - return error; - } - if (KBD_IS_BUSY(kbd)) { - splx(s); - return EBUSY; - } - } - KBD_INVALID(kbd); - keyboard[kbd->kb_index] = NULL; - kbdsw[kbd->kb_index] = NULL; - - splx(s); - return 0; -} - -/* find a funciton table by the driver name */ -keyboard_switch_t -*kbd_get_switch(char *driver) -{ - keyboard_driver_t **list; - keyboard_driver_t *p; - - list = (keyboard_driver_t **)kbddriver_set.ls_items; - while ((p = *list++) != NULL) { - if (strcmp(p->name, driver) == 0) - return p->kbdsw; - } - - return NULL; -} - -/* - * Keyboard client functions - * Keyboard clients, such as the console driver `syscons' and the keyboard - * cdev driver, use these functions to claim and release a keyboard for - * exclusive use. - */ - -/* find the keyboard specified by a driver name and a unit number */ -int -kbd_find_keyboard(char *driver, int unit) -{ - int i; - - for (i = 0; i < keyboards; ++i) { - if (keyboard[i] == NULL) - continue; - if (!KBD_IS_VALID(keyboard[i])) - continue; - if (strcmp("*", driver) && strcmp(keyboard[i]->kb_name, driver)) - continue; - if ((unit != -1) && (keyboard[i]->kb_unit != unit)) - continue; - return i; - } - return -1; -} - -/* allocate a keyboard */ -int -kbd_allocate(char *driver, int unit, void *id, kbd_callback_func_t *func, - void *arg) -{ - int index; - int s; - - if (func == NULL) - return -1; - - s = spltty(); - index = kbd_find_keyboard(driver, unit); - if (index >= 0) { - if (KBD_IS_BUSY(keyboard[index])) { - splx(s); - return -1; - } - keyboard[index]->kb_token = id; - KBD_BUSY(keyboard[index]); - keyboard[index]->kb_callback.kc_func = func; - keyboard[index]->kb_callback.kc_arg = arg; - (*kbdsw[index]->clear_state)(keyboard[index]); - } - splx(s); - return index; -} - -int -kbd_release(keyboard_t *kbd, void *id) -{ - int error; - int s; - - s = spltty(); - if (!KBD_IS_VALID(kbd) || !KBD_IS_BUSY(kbd)) { - error = EINVAL; - } else if (kbd->kb_token != id) { - error = EPERM; - } else { - kbd->kb_token = NULL; - KBD_UNBUSY(kbd); - kbd->kb_callback.kc_func = NULL; - kbd->kb_callback.kc_arg = NULL; - (*kbdsw[kbd->kb_index]->clear_state)(kbd); - error = 0; - } - splx(s); - return error; -} - -int -kbd_change_callback(keyboard_t *kbd, void *id, kbd_callback_func_t *func, - void *arg) -{ - int error; - int s; - - s = spltty(); - if (!KBD_IS_VALID(kbd) || !KBD_IS_BUSY(kbd)) { - error = EINVAL; - } else if (kbd->kb_token != id) { - error = EPERM; - } else if (func == NULL) { - error = EINVAL; - } else { - kbd->kb_callback.kc_func = func; - kbd->kb_callback.kc_arg = arg; - error = 0; - } - splx(s); - return error; -} - -/* get a keyboard structure */ -keyboard_t -*kbd_get_keyboard(int index) -{ - if ((index < 0) || (index >= keyboards)) - return NULL; - if (!KBD_IS_VALID(keyboard[index])) - return NULL; - return keyboard[index]; -} - -/* - * The back door for the console driver; configure keyboards - * This function is for the kernel console to initialize keyboards - * at very early stage. - */ - -int -kbd_configure(int flags) -{ - keyboard_driver_t **list; - keyboard_driver_t *p; - - list = (keyboard_driver_t **)kbddriver_set.ls_items; - while ((p = *list++) != NULL) { - if (p->configure != NULL) - (*p->configure)(flags); - } - - return 0; -} - -#ifdef KBD_INSTALL_CDEV - -/* - * Virtual keyboard cdev driver functions - * The virtual keyboard driver dispatches driver functions to - * appropriate subdrivers. - */ - -#define KBD_UNIT(dev) minor(dev) - -static d_open_t kbdopen; -static d_close_t kbdclose; -static d_read_t kbdread; -static d_write_t kbdwrite; -static d_ioctl_t kbdioctl; -static d_reset_t kbdreset; -static d_devtotty_t kbddevtotty; -static d_poll_t kbdpoll; -static d_mmap_t kbdmmap; - -#define CDEV_MAJOR 112 - -static struct cdevsw kbd_cdevsw = { - kbdopen, kbdclose, kbdread, kbdwrite, /* ??? */ - kbdioctl, nullstop, kbdreset, kbddevtotty, - kbdpoll, kbdmmap, nostrategy, "kbd", - NULL, -1, nodump, nopsize, -}; - -static void -vkbdattach(void *arg) -{ - static int kbd_devsw_installed = FALSE; - dev_t dev; - - if (!kbd_devsw_installed) { - dev = makedev(CDEV_MAJOR, 0); - cdevsw_add(&dev, &kbd_cdevsw, NULL); - kbd_devsw_installed = TRUE; - } -} - -PSEUDO_SET(vkbdattach, kbd); - -int -kbd_attach(dev_t dev, keyboard_t *kbd, struct cdevsw *cdevsw) -{ - int s; - - if (kbd->kb_index >= keyboards) - return EINVAL; - if (keyboard[kbd->kb_index] != kbd) - return EINVAL; - - s = spltty(); - kbd->kb_minor = minor(dev); - kbdcdevsw[kbd->kb_index] = cdevsw; - splx(s); - - /* XXX: DEVFS? */ - - if (kbd->kb_index + 1 >= keyboards) - kbd_realloc_array(); - - printf("kbd%d at %s%d\n", kbd->kb_index, kbd->kb_name, kbd->kb_unit); - return 0; -} - -int -kbd_detach(dev_t dev, keyboard_t *kbd, struct cdevsw *cdevsw) -{ - int s; - - if (kbd->kb_index >= keyboards) - return EINVAL; - if (keyboard[kbd->kb_index] != kbd) - return EINVAL; - if (kbdcdevsw[kbd->kb_index] != cdevsw) - return EINVAL; - - s = spltty(); - (*kbdsw[kbd->kb_index]->term)(kbd); - kbdcdevsw[kbd->kb_index] = NULL; - splx(s); - return 0; -} - -static int -kbdopen(dev_t dev, int flag, int mode, struct proc *p) -{ - int unit; - - unit = KBD_UNIT(dev); - if (unit >= keyboards) - return ENXIO; - if (kbdcdevsw[unit] == NULL) - return ENXIO; - if (KBD_IS_BUSY(keyboard[unit])) - return EBUSY; - return (*kbdcdevsw[unit]->d_open)(makedev(0, keyboard[unit]->kb_minor), - flag, mode, p); -} - -static int -kbdclose(dev_t dev, int flag, int mode, struct proc *p) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_close)(makedev(0, keyboard[unit]->kb_minor), - flag, mode, p); -} - -static int -kbdread(dev_t dev, struct uio *uio, int flag) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_read)(makedev(0, keyboard[unit]->kb_minor), - uio, flag); -} - -static int -kbdwrite(dev_t dev, struct uio *uio, int flag) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_write)(makedev(0, keyboard[unit]->kb_minor), - uio, flag); -} - -static int -kbdioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct proc *p) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_ioctl)(makedev(0, keyboard[unit]->kb_minor), - cmd, arg, flag, p); -} - -static int -kbdreset(dev_t dev) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_reset)(makedev(0, keyboard[unit]->kb_minor)); -} - -static struct tty -*kbddevtotty(dev_t dev) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return NULL; - return (*kbdcdevsw[unit]->d_devtotty)(makedev(0, keyboard[unit]->kb_minor)); -} - -static int -kbdpoll(dev_t dev, int event, struct proc *p) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_poll)(makedev(0, keyboard[unit]->kb_minor), - event, p); -} - -static int -kbdmmap(dev_t dev, vm_offset_t offset, int nprot) -{ - int unit; - - unit = KBD_UNIT(dev); - if (kbdcdevsw[unit] == NULL) - return ENXIO; - return (*kbdcdevsw[unit]->d_mmap)(makedev(0, keyboard[unit]->kb_minor), - offset, nprot); -} - -/* - * Generic keyboard cdev driver functions - * Keyboard subdrivers may call these functions to implement common - * driver functions. - */ - -#define KB_QSIZE 512 -#define KB_BUFSIZE 64 - -static kbd_callback_func_t genkbd_event; - -int -genkbdopen(genkbd_softc_t *sc, keyboard_t *kbd, int mode, int flag, - struct proc *p) -{ - int s; - int i; - - s = spltty(); - if (!KBD_IS_VALID(kbd)) { - splx(s); - return ENXIO; - } - i = kbd_allocate(kbd->kb_name, kbd->kb_unit, sc, - genkbd_event, (void *)sc); - if (i < 0) { - splx(s); - return EBUSY; - } - /* assert(i == kbd->kb_index) */ - /* assert(kbd == kbd_get_keyboard(i)) */ - - /* - * NOTE: even when we have successfully claimed a keyboard, - * the device may still be missing (!KBD_HAS_DEVICE(kbd)). - */ - -#if 0 - bzero(&sc->gkb_q, sizeof(sc->gkb_q)); -#endif - clist_alloc_cblocks(&sc->gkb_q, KB_QSIZE, KB_QSIZE/2); /* XXX */ - sc->gkb_rsel.si_flags = 0; - sc->gkb_rsel.si_pid = 0; - splx(s); - - return 0; -} - -int -genkbdclose(genkbd_softc_t *sc, keyboard_t *kbd, int mode, int flag, - struct proc *p) -{ - int s; - - /* - * NOTE: the device may have already become invalid. - * !KBD_IS_VALID(kbd) - */ - s = spltty(); - kbd_release(kbd, (void *)sc); -#if 0 - clist_free_cblocks(&sc->gkb_q); -#endif - splx(s); - - return 0; -} - -int -genkbdread(genkbd_softc_t *sc, keyboard_t *kbd, struct uio *uio, int flag) -{ - u_char buffer[KB_BUFSIZE]; - int len; - int error; - int s; - - /* wait for input */ - s = spltty(); - while (sc->gkb_q.c_cc == 0) { - if (!KBD_IS_VALID(kbd)) { - splx(s); - return EIO; - } - if (flag & IO_NDELAY) { - splx(s); - return EWOULDBLOCK; - } - sc->gkb_flags |= KB_ASLEEP; - error = tsleep((caddr_t)sc, PZERO | PCATCH, "kbdrea", 0); - if (error) { - sc->gkb_flags &= ~KB_ASLEEP; - splx(s); - return error; - } - } - splx(s); - - /* copy as much input as possible */ - error = 0; - while (uio->uio_resid > 0) { - len = imin(uio->uio_resid, sizeof(buffer)); - len = q_to_b(&sc->gkb_q, buffer, len); - if (len <= 0) - break; - error = uiomove(buffer, len, uio); - if (error) - break; - } - - return error; -} - -int -genkbdwrite(genkbd_softc_t *sc, keyboard_t *kbd, struct uio *uio, int flag) -{ - if (!KBD_IS_VALID(kbd)) - return ENXIO; - return ENODEV; -} - -int -genkbdioctl(genkbd_softc_t *sc, keyboard_t *kbd, u_long cmd, caddr_t arg, - int flag, struct proc *p) -{ - int error; - - if (kbd == NULL) /* XXX */ - return ENXIO; - if (!KBD_IS_VALID(kbd)) - return ENXIO; - error = (*kbdsw[kbd->kb_index]->ioctl)(kbd, cmd, arg); - if (error == ENOIOCTL) - error = ENODEV; - return error; -} - -int -genkbdpoll(genkbd_softc_t *sc, keyboard_t *kbd, int events, struct proc *p) -{ - int revents; - int s; - - revents = 0; - s = spltty(); - if (events & (POLLIN | POLLRDNORM)) { - if ((sc->gkb_q.c_cc > 0) || !KBD_IS_VALID(kbd)) - revents |= (POLLIN | POLLRDNORM); - else - selrecord(p, &sc->gkb_rsel); - } - splx(s); - return revents; -} - -static int -genkbd_event(keyboard_t *kbd, int event, void *arg) -{ - genkbd_softc_t *sc; - size_t len; - u_char *cp; - int mode; - int c; - - /* assert(KBD_IS_VALID(kbd)) */ - sc = (genkbd_softc_t *)arg; - - switch (event) { - case KBDIO_KEYINPUT: - break; - case KBDIO_UNLOADING: - /* the keyboard is going... */ - kbd_release(kbd, (void *)sc); - return 0; - default: - return EINVAL; - } - - /* obtain the current key input mode */ - if ((*kbdsw[kbd->kb_index]->ioctl)(kbd, KDGKBMODE, (caddr_t)&mode)) - mode = K_XLATE; - - /* read all pending input */ - while ((*kbdsw[kbd->kb_index]->check_char)(kbd)) { - c = (*kbdsw[kbd->kb_index]->read_char)(kbd, FALSE); - if (c == NOKEY) - continue; - if (c == ERRKEY) /* XXX: ring bell? */ - continue; - if (!KBD_IS_BUSY(kbd)) - /* the device is not open, discard the input */ - continue; - - /* store the byte as is for K_RAW and K_CODE modes */ - if (mode != K_XLATE) { - putc(KEYCHAR(c), &sc->gkb_q); - continue; - } - - /* K_XLATE */ - if (c & RELKEY) /* key release is ignored */ - continue; - - /* process special keys; most of them are just ignored... */ - if (c & SPCLKEY) { - switch (KEYCHAR(c)) { - /* locking keys */ - case NLK: case CLK: case SLK: case ALK: - /* shift keys */ - case LSH: case RSH: case LCTR: case RCTR: - case LALT: case RALT: case ASH: case META: - /* other special keys */ - case NOP: case SPSC: case RBT: case SUSP: - case STBY: case DBG: case NEXT: - /* ignore them... */ - continue; - case BTAB: /* a backtab: ESC [ Z */ - putc(0x1b, &sc->gkb_q); - putc('[', &sc->gkb_q); - putc('Z', &sc->gkb_q); - continue; - } - } - - /* normal chars, normal chars with the META, function keys */ - switch (KEYFLAGS(c)) { - case 0: /* a normal char */ - putc(KEYCHAR(c), &sc->gkb_q); - break; - case MKEY: /* the META flag: prepend ESC */ - putc(0x1b, &sc->gkb_q); - putc(KEYCHAR(c), &sc->gkb_q); - break; - case FKEY | SPCLKEY: /* a function key, return string */ - cp = (*kbdsw[kbd->kb_index]->get_fkeystr)(kbd, - KEYCHAR(c), &len); - if (cp != NULL) { - while (len-- > 0) - putc(*cp++, &sc->gkb_q); - } - break; - } - } - - /* wake up sleeping/polling processes */ - if (sc->gkb_q.c_cc > 0) { - if (sc->gkb_flags & KB_ASLEEP) { - sc->gkb_flags &= ~KB_ASLEEP; - wakeup((caddr_t)sc); - } - selwakeup(&sc->gkb_rsel); - } - - return 0; -} - -#endif /* KBD_INSTALL_CDEV */ - -/* - * Generic low-level keyboard functions - * The low-level functions in the keyboard subdriver may use these - * functions. - */ - -int -genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) -{ - keyarg_t *keyp; - fkeyarg_t *fkeyp; - int s; - int i; - - s = spltty(); - switch (cmd) { - - case KDGKBINFO: /* get keyboard information */ - ((keyboard_info_t *)arg)->kb_index = kbd->kb_index; - i = imin(strlen(kbd->kb_name) + 1, - sizeof(((keyboard_info_t *)arg)->kb_name)); - bcopy(kbd->kb_name, ((keyboard_info_t *)arg)->kb_name, i); - ((keyboard_info_t *)arg)->kb_unit = kbd->kb_unit; - ((keyboard_info_t *)arg)->kb_type = kbd->kb_type; - ((keyboard_info_t *)arg)->kb_config = kbd->kb_config; - ((keyboard_info_t *)arg)->kb_flags = kbd->kb_flags; - break; - - case KDGKBTYPE: /* get keyboard type */ - *(int *)arg = kbd->kb_type; - break; - - case GIO_KEYMAP: /* get keyboard translation table */ - bcopy(kbd->kb_keymap, arg, sizeof(*kbd->kb_keymap)); - break; - case PIO_KEYMAP: /* set keyboard translation table */ - bzero(kbd->kb_accentmap, sizeof(*kbd->kb_accentmap)); - bcopy(arg, kbd->kb_keymap, sizeof(*kbd->kb_keymap)); - break; - - case GIO_KEYMAPENT: /* get keyboard translation table entry */ - keyp = (keyarg_t *)arg; - if (keyp->keynum >= sizeof(kbd->kb_keymap->key) - /sizeof(kbd->kb_keymap->key[0])) { - splx(s); - return EINVAL; - } - bcopy(&kbd->kb_keymap->key[keyp->keynum], &keyp->key, - sizeof(keyp->key)); - break; - case PIO_KEYMAPENT: /* set keyboard translation table entry */ - keyp = (keyarg_t *)arg; - if (keyp->keynum >= sizeof(kbd->kb_keymap->key) - /sizeof(kbd->kb_keymap->key[0])) { - splx(s); - return EINVAL; - } - bcopy(&keyp->key, &kbd->kb_keymap->key[keyp->keynum], - sizeof(keyp->key)); - break; - - case GIO_DEADKEYMAP: /* get accent key translation table */ - bcopy(kbd->kb_accentmap, arg, sizeof(*kbd->kb_accentmap)); - break; - case PIO_DEADKEYMAP: /* set accent key translation table */ - bcopy(arg, kbd->kb_accentmap, sizeof(*kbd->kb_accentmap)); - break; - - case GETFKEY: /* get functionkey string */ - fkeyp = (fkeyarg_t *)arg; - if (fkeyp->keynum >= kbd->kb_fkeytab_size) { - splx(s); - return EINVAL; - } - bcopy(kbd->kb_fkeytab[fkeyp->keynum].str, fkeyp->keydef, - kbd->kb_fkeytab[fkeyp->keynum].len); - fkeyp->flen = kbd->kb_fkeytab[fkeyp->keynum].len; - break; - case SETFKEY: /* set functionkey string */ - fkeyp = (fkeyarg_t *)arg; - if (fkeyp->keynum >= kbd->kb_fkeytab_size) { - splx(s); - return EINVAL; - } - kbd->kb_fkeytab[fkeyp->keynum].len = imin(fkeyp->flen, MAXFK); - bcopy(fkeyp->keydef, kbd->kb_fkeytab[fkeyp->keynum].str, - kbd->kb_fkeytab[fkeyp->keynum].len); - break; - - default: - splx(s); - return ENOIOCTL; - } - - splx(s); - return 0; -} - -/* get a pointer to the string associated with the given function key */ -u_char -*genkbd_get_fkeystr(keyboard_t *kbd, int fkey, size_t *len) -{ - if (kbd == NULL) - return NULL; - fkey -= F_FN; - if (fkey > kbd->kb_fkeytab_size) - return NULL; - *len = kbd->kb_fkeytab[fkey].len; - return kbd->kb_fkeytab[fkey].str; -} - -/* diagnostic dump */ -static char -*get_kbd_type_name(int type) -{ - static struct { - int type; - char *name; - } name_table[] = { - { KB_84, "AT 84" }, - { KB_101, "AT 101/102" }, - { KB_OTHER, "generic" }, - }; - int i; - - for (i = 0; i < sizeof(name_table)/sizeof(name_table[0]); ++i) { - if (type == name_table[i].type) - return name_table[i].name; - } - return "unknown"; -} - -void -genkbd_diag(keyboard_t *kbd, int level) -{ - if (level > 0) { - printf("kbd%d: %s%d, %s (%d), config:0x%x, flags:0x%x", - kbd->kb_index, kbd->kb_name, kbd->kb_unit, - get_kbd_type_name(kbd->kb_type), kbd->kb_type, - kbd->kb_config, kbd->kb_flags); - if (kbd->kb_io_base > 0) - printf(", port:0x%x-0x%x", kbd->kb_io_base, - kbd->kb_io_base + kbd->kb_io_size - 1); - printf("\n"); - } -} - -#define set_lockkey_state(k, s, l) \ - if (!((s) & l ## DOWN)) { \ - int i; \ - (s) |= l ## DOWN; \ - (s) ^= l ## ED; \ - i = (s) & LOCK_MASK; \ - (*kbdsw[(k)->kb_index]->ioctl)((k), KDSETLED, (caddr_t)&i); \ - } - -static u_int -save_accent_key(keyboard_t *kbd, u_int key, int *accents) -{ - int i; - - /* make an index into the accent map */ - i = key - F_ACC + 1; - if ((i > kbd->kb_accentmap->n_accs) - || (kbd->kb_accentmap->acc[i - 1].accchar == 0)) { - /* the index is out of range or pointing to an empty entry */ - *accents = 0; - return ERRKEY; - } - - /* - * If the same accent key has been hit twice, produce the accent char - * itself. - */ - if (i == *accents) { - key = kbd->kb_accentmap->acc[i - 1].accchar; - *accents = 0; - return key; - } - - /* remember the index and wait for the next key */ - *accents = i; - return NOKEY; -} - -static u_int -make_accent_char(keyboard_t *kbd, u_int ch, int *accents) -{ - struct acc_t *acc; - int i; - - acc = &kbd->kb_accentmap->acc[*accents - 1]; - *accents = 0; - - /* - * If the accent key is followed by the space key, - * produce the accent char itself. - */ - if (ch == ' ') - return acc->accchar; - - /* scan the accent map */ - for (i = 0; i < NUM_ACCENTCHARS; ++i) { - if (acc->map[i][0] == 0) /* end of table */ - break; - if (acc->map[i][0] == ch) - return acc->map[i][1]; - } - /* this char cannot be accented... */ - return ERRKEY; -} - -int -genkbd_keyaction(keyboard_t *kbd, int keycode, int up, int *shiftstate, - int *accents) -{ - struct keyent_t *key; - int state = *shiftstate; - int action; - int f; - int i; - - f = state & (AGRS | ALKED); - if ((f == AGRS1) || (f == AGRS2) || (f == ALKED)) - keycode += ALTGR_OFFSET; - key = &kbd->kb_keymap->key[keycode]; - i = ((state & SHIFTS) ? 1 : 0) - | ((state & CTLS) ? 2 : 0) - | ((state & ALTS) ? 4 : 0); - if (((key->flgs & FLAG_LOCK_C) && (state & CLKED)) - || ((key->flgs & FLAG_LOCK_N) && (state & NLKED)) ) - i ^= 1; - - action = key->map[i]; - if (up) { /* break: key released */ - if (key->spcl & (0x80 >> i)) { - /* special keys */ - switch (action) { - case LSH: - state &= ~SHIFTS1; - break; - case RSH: - state &= ~SHIFTS2; - break; - case LCTR: - state &= ~CTLS1; - break; - case RCTR: - state &= ~CTLS2; - break; - case LALT: - state &= ~ALTS1; - break; - case RALT: - state &= ~ALTS2; - break; - case ASH: - state &= ~AGRS1; - break; - case META: - state &= ~METAS1; - break; - case NLK: - state &= ~NLKDOWN; - break; - case CLK: -#ifndef PC98 - state &= ~CLKDOWN; -#else - state &= ~CLKED; - i = state & LOCK_MASK; - (*kbdsw[kbd->kb_index]->ioctl)(kbd, KDSETLED, - (caddr_t)&i); -#endif - break; - case SLK: - state &= ~SLKDOWN; - break; - case ALK: - state &= ~ALKDOWN; - break; - } - *shiftstate = state; - return (SPCLKEY | RELKEY | action); - } - /* release events of regular keys are not reported */ - return NOKEY; - } else { /* make: key pressed */ - if (key->spcl & (0x80 >> i)) { - /* special keys */ - switch (action) { - /* LOCKING KEYS */ - case NLK: - set_lockkey_state(kbd, state, NLK); - break; - case CLK: -#ifndef PC98 - set_lockkey_state(kbd, state, CLK); -#else - state |= CLKED; - i = state & LOCK_MASK; - (*kbdsw[kbd->kb_index]->ioctl)(kbd, KDSETLED, - (caddr_t)&i); -#endif - break; - case SLK: - set_lockkey_state(kbd, state, SLK); - break; - case ALK: - set_lockkey_state(kbd, state, ALK); - break; - /* NON-LOCKING KEYS */ - case SPSC: case RBT: case SUSP: case STBY: - case DBG: case NEXT: - *accents = 0; - break; - case BTAB: - *accents = 0; - action |= BKEY; - break; - case LSH: - state |= SHIFTS1; - break; - case RSH: - state |= SHIFTS2; - break; - case LCTR: - state |= CTLS1; - break; - case RCTR: - state |= CTLS2; - break; - case LALT: - state |= ALTS1; - break; - case RALT: - state |= ALTS2; - break; - case ASH: - state |= AGRS1; - break; - case META: - state |= METAS1; - break; - default: - /* is this an accent (dead) key? */ - if (action >= F_ACC && action <= L_ACC) { - action = save_accent_key(kbd, action, - accents); - switch (action) { - case NOKEY: - case ERRKEY: - return action; - default: - if (state & METAS) - return (action | MKEY); - else - return action; - } - /* NOT REACHED */ - } - /* other special keys */ - if (*accents > 0) { - *accents = 0; - return ERRKEY; - } - if (action >= F_FN && action <= L_FN) - action |= FKEY; - /* XXX: return fkey string for the FKEY? */ - } - *shiftstate = state; - return (SPCLKEY | action); - } else { - /* regular keys */ - if (*accents > 0) { - /* make an accented char */ - action = make_accent_char(kbd, action, accents); - if (action == ERRKEY) - return action; - } - if (state & METAS) - action |= MKEY; - return action; - } - } - /* NOT REACHED */ -} diff --git a/sys/dev/kbd/kbdreg.h b/sys/dev/kbd/kbdreg.h deleted file mode 100644 index d5920196507d4..0000000000000 --- a/sys/dev/kbd/kbdreg.h +++ /dev/null @@ -1,270 +0,0 @@ -/*- - * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHORS ``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 AUTHORS 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. - * - * $Id: kbdreg.h,v 1.1 1999/01/09 02:44:50 yokota Exp $ - */ - -#ifndef _DEV_KBD_KBDREG_H_ -#define _DEV_KBD_KBDREG_H_ - -/* forward declarations */ -typedef struct keyboard keyboard_t; -struct keymap; -struct accentmap; -struct fkeytab; - -/* call back funcion */ -typedef int kbd_callback_func_t(keyboard_t *kbd, int event, - void *arg); -/* event types */ -#define KBDIO_KEYINPUT 0 -#define KBDIO_UNLOADING 1 - -typedef struct keyboard_callback { - kbd_callback_func_t *kc_func; - void *kc_arg; -} keyboard_callback_t; - -/* keyboard */ -struct keyboard { - /* the following fields are managed by kbdio */ - int kb_index; /* kbdio index# */ - int kb_minor; /* minor number of the sub-device */ - int kb_flags; /* internal flags */ -#define KB_VALID (1 << 16) /* this entry is valid */ -#define KB_NO_DEVICE (1 << 17) /* device not present */ -#define KB_PROBED (1 << 18) /* device probed */ -#define KB_INITIALIZED (1 << 19) /* device initialized */ -#define KB_REGISTERED (1 << 20) /* device registered to kbdio */ -#define KB_BUSY (1 << 21) /* device used by a client */ - int kb_active; /* 0: inactive */ - void *kb_token; /* id of the current client */ - keyboard_callback_t kb_callback;/* callback function */ - - /* - * Device configuration flags: - * The upper 16 bits are common between various keyboard devices. - * The lower 16 bits are device-specific. - */ - int kb_config; -#define KB_CONF_PROBE_ONLY (1 << 16) /* probe only, don't initialize */ - - /* the following fields are set up by the driver */ - char *kb_name; /* driver name */ - int kb_unit; /* unit # */ - int kb_type; /* KB_84, KB_101, KB_OTHER,... */ - int kb_io_base; /* port# if any */ - int kb_io_size; /* # of occupied port */ - int kb_led; /* LED status */ - struct keymap *kb_keymap; /* key map */ - struct accentmap *kb_accentmap; /* accent map */ - struct fkeytab *kb_fkeytab; /* function key strings */ - int kb_fkeytab_size;/* # of function key strings */ - void *kb_data; /* the driver's private data */ -}; - -#define KBD_IS_VALID(k) ((k)->kb_flags & KB_VALID) -#define KBD_VALID(k) ((k)->kb_flags |= KB_VALID) -#define KBD_INVALID(k) ((k)->kb_flags &= ~KB_VALID) -#define KBD_HAS_DEVICE(k) (!((k)->kb_flags & KB_NO_DEVICE)) -#define KBD_FOUND_DEVICE(k) ((k)->kb_flags &= ~KB_NO_DEVICE) -#define KBD_IS_PROBED(k) ((k)->kb_flags & KB_PROBED) -#define KBD_PROBE_DONE(k) ((k)->kb_flags |= KB_PROBED) -#define KBD_IS_INITIALIZED(k) ((k)->kb_flags & KB_INITIALIZED) -#define KBD_INIT_DONE(k) ((k)->kb_flags |= KB_INITIALIZED) -#define KBD_IS_CONFIGURED(k) ((k)->kb_flags & KB_REGISTERED) -#define KBD_CONFIG_DONE(k) ((k)->kb_flags |= KB_REGISTERED) -#define KBD_IS_BUSY(k) ((k)->kb_flags & KB_BUSY) -#define KBD_BUSY(k) ((k)->kb_flags |= KB_BUSY) -#define KBD_UNBUSY(k) ((k)->kb_flags &= ~KB_BUSY) -#define KBD_IS_ACTIVE(k) ((k)->kb_active) -#define KBD_ACTIVATE(k) (++(k)->kb_active) -#define KBD_DEACTIVATE(k) (--(k)->kb_active) -#define KBD_LED_VAL(k) ((k)->kb_led) - -/* keyboard function table */ -typedef int kbd_probe_t(int unit, keyboard_t **kbdp, void *arg, - int flags); -typedef int kbd_init_t(keyboard_t *kbd); -typedef int kbd_term_t(keyboard_t *kbd); -typedef int kbd_intr_t(keyboard_t *kbd); -typedef int kbd_test_if_t(keyboard_t *kbd); -typedef int kbd_enable_t(keyboard_t *kbd); -typedef int kbd_disable_t(keyboard_t *kbd); -typedef int kbd_read_t(keyboard_t *kbd, int wait); -typedef int kbd_check_t(keyboard_t *kbd); -typedef u_int kbd_read_char_t(keyboard_t *kbd, int wait); -typedef int kbd_check_char_t(keyboard_t *kbd); -typedef int kbd_ioctl_t(keyboard_t *kbd, u_long cmd, caddr_t data); -typedef int kbd_lock_t(keyboard_t *kbd, int lock); -typedef void kbd_clear_state_t(keyboard_t *kbd); -typedef int kbd_get_state_t(keyboard_t *kbd, void *buf, size_t len); -typedef int kbd_set_state_t(keyboard_t *kbd, void *buf, size_t len); -typedef u_char *kbd_get_fkeystr_t(keyboard_t *kbd, int fkey, - size_t *len); -typedef void kbd_diag_t(keyboard_t *kbd, int level); - -typedef struct keyboard_switch { - kbd_probe_t *probe; - kbd_init_t *init; - kbd_term_t *term; - kbd_intr_t *intr; - kbd_test_if_t *test_if; - kbd_enable_t *enable; - kbd_disable_t *disable; - kbd_read_t *read; - kbd_check_t *check; - kbd_read_char_t *read_char; - kbd_check_char_t *check_char; - kbd_ioctl_t *ioctl; - kbd_lock_t *lock; - kbd_clear_state_t *clear_state; - kbd_get_state_t *get_state; - kbd_set_state_t *set_state; - kbd_get_fkeystr_t *get_fkeystr; - kbd_diag_t *diag; -} keyboard_switch_t; - -/* keyboard driver */ -typedef struct keyboard_driver { - char *name; - keyboard_switch_t *kbdsw; - int (*configure)(int); /* backdoor for the console driver */ -} keyboard_driver_t; - -#ifdef KERNEL - -#define KEYBOARD_DRIVER(name, sw, config) \ - static struct keyboard_driver name##_driver = { \ - #name, &sw, config \ - }; \ - DATA_SET(kbddriver_set, name##_driver); - -/* global variables */ -extern keyboard_switch_t **kbdsw; -extern struct linker_set kbddriver_set; - -/* functions for the keyboard driver */ -int kbd_register(keyboard_t *kbd); -int kbd_unregister(keyboard_t *kbd); -keyboard_switch_t *kbd_get_switch(char *driver); -void kbd_init_struct(keyboard_t *kbd, char *name, int type, - int unit, int config, int port, - int port_size); -void kbd_set_maps(keyboard_t *kbd, struct keymap *keymap, - struct accentmap *accmap, - struct fkeytab *fkeymap, int fkeymap_size); - -/* functions for the keyboard client */ -int kbd_allocate(char *driver, int unit, void *id, - kbd_callback_func_t *func, void *arg); -int kbd_release(keyboard_t *kbd, void *id); -int kbd_change_callback(keyboard_t *kbd, void *id, - kbd_callback_func_t *func, void *arg); -int kbd_find_keyboard(char *driver, int unit); -keyboard_t *kbd_get_keyboard(int index); - -/* a back door for the console driver to tickle the keyboard driver XXX */ -int kbd_configure(int flags); - /* see `kb_config' above for flag bit definitions */ - -#ifdef KBD_INSTALL_CDEV - -/* virtual keyboard cdev driver functions */ - -int kbd_attach(dev_t dev, keyboard_t *kbd, - struct cdevsw *sw); -int kbd_detach(dev_t dev, keyboard_t *kbd, - struct cdevsw *sw); - -/* generic keyboard cdev driver functions */ - -typedef struct genkbd_softc { - int gkb_flags; /* flag/status bits */ -#define KB_ASLEEP (1 << 0) - struct clist gkb_q; /* input queue */ - struct selinfo gkb_rsel; -} genkbd_softc_t; - -int genkbdopen(genkbd_softc_t *sc, keyboard_t *kbd, int flag, int mode, - struct proc *p); -int genkbdclose(genkbd_softc_t *sc, keyboard_t *kbd, int flag, int mode, - struct proc *p); -int genkbdread(genkbd_softc_t *sc, keyboard_t *kbd, struct uio *uio, - int flag); -int genkbdwrite(genkbd_softc_t *sc, keyboard_t *kbd, struct uio *uio, - int flag); -int genkbdioctl(genkbd_softc_t *sc, keyboard_t *kbd, u_long cmd, - caddr_t arg, int flag, struct proc *p); -int genkbdpoll(genkbd_softc_t *sc, keyboard_t *kbd, int event, - struct proc *p); - -#endif /* KBD_INSTALL_CDEV */ - -/* generic low-level keyboard functions */ - -/* shift key state */ -#define SHIFTS1 (1 << 16) -#define SHIFTS2 (1 << 17) -#define SHIFTS (SHIFTS1 | SHIFTS2) -#define CTLS1 (1 << 18) -#define CTLS2 (1 << 19) -#define CTLS (CTLS1 | CTLS2) -#define ALTS1 (1 << 20) -#define ALTS2 (1 << 21) -#define ALTS (ALTS1 | ALTS2) -#define AGRS1 (1 << 22) -#define AGRS2 (1 << 23) -#define AGRS (AGRS1 | AGRS2) -#define METAS1 (1 << 24) -#define METAS2 (1 << 25) -#define METAS (METAS1 | METAS2) -#define NLKDOWN (1 << 26) -#define SLKDOWN (1 << 27) -#define CLKDOWN (1 << 28) -#define ALKDOWN (1 << 29) -/* lock key state (defined in machine/console.h) */ -/* -#define CLKED LED_CAP -#define NLKED LED_NUM -#define SLKED LED_SCR -#define ALKED (1 << 3) -#define LOCK_MASK (CLKED | NLKED | SLKED | ALKED) -#define LED_CAP (1 << 0) -#define LED_NUM (1 << 1) -#define LED_SCR (1 << 2) -#define LED_MASK (LED_CAP | LED_NUM | LED_SCR) -*/ - -kbd_get_fkeystr_t genkbd_get_fkeystr; -kbd_diag_t genkbd_diag; - -int genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg); -int genkbd_keyaction(keyboard_t *kbd, int keycode, int down, - int *shiftstate, int *accents); - -#endif /* KERNEL */ - -#endif /* !_DEV_KBD_KBDREG_H_ */ diff --git a/sys/dev/kbd/kbdtables.h b/sys/dev/kbd/kbdtables.h deleted file mode 100644 index c0d4663a6eacd..0000000000000 --- a/sys/dev/kbd/kbdtables.h +++ /dev/null @@ -1,1332 +0,0 @@ -/*- - * Copyright (c) 1992-1998 Søren Schmidt - * 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, - * without modification, immediately at the beginning of the file. - * 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * $Id: kbdtables.h,v 1.41 1998/09/15 18:16:37 sos Exp $ - */ - -#define SET8 0x80 /* set eight bit on */ - -#ifdef PC98 -#define NO_ACCENTCHARS -/* PC-9801 keymap by kuribo@isl.melco.co.jp */ -static keymap_t key_map = { 0x80, /* PC98 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=01 */ '1', '!', '!', '!', '1', '!', '!', '!', 0x00, 0x00, -/* sc=02 */ '2', '\"', 0x1A, 0x1A, '2', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=03 */ '3', '#', 0x1B, 0x1B, '3', '#', 0x1B, 0x1B, 0x00, 0x00, -/* sc=04 */ '4', '$', 0x1C, 0x1C, '4', '$', 0x1C, 0x1C, 0x00, 0x00, -/* sc=05 */ '5', '%', 0x1D, 0x1D, '5', '%', 0x1D, 0x1D, 0x00, 0x00, -/* sc=06 */ '6', '&', 0x1E, 0x1E, '6', '^', 0x1E, 0x1E, 0x00, 0x00, -/* sc=07 */ '7', '\'', 0x1F, 0x1F, '7', '&', '&', '&', 0x00, 0x00, -/* sc=08 */ '8', '(', 0x7F, 0x7F, '8', '*', 0x08, 0x08, 0x00, 0x00, -/* sc=09 */ '9', ')', '9', '9', '9', '(', '(', '(', 0x00, 0x00, -/* sc=0a */ '0', NOP, '0', '0', '0', ')', ')', ')', 0x40, 0x00, -/* sc=0b */ '-', '=', '-', '-', '-', '_', 0x1F, 0x1F, 0x00, 0x00, -/* sc=0c */ '^', '`', 0x1E, 0x1E, '=', '+', '+', '+', 0x00, 0x00, -/* sc=0d */ '\\', '|', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, -/* sc=0e */ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, -/* sc=0f */ '\t', '\t', '\t', '\t', '\t', '\t', '\t', '\t', 0x00, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ '@', '~', 0x00, 0x00, '[', '{', 0x1B, 0x1B, 0x00, 0x00, -/* sc=1b */ '[', '{', 0x1B, 0x1B, ']', '}', 0x1D, 0x1D, 0x00, 0x00, -/* sc=1c */ '\r', '\r', '\n', '\n', '\r', '\r', '\n', '\n', 0x00, 0x00, -/* sc=1d */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1e */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=1f */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=20 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=21 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=22 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=23 */ 'j', 'J', '\n', '\n', 'j', 'J', '\n', '\n', 0x00, 0x01, -/* sc=24 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=25 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=26 */ ';', '+', ';', ';', ';', ':', ';', ';', 0x00, 0x00, -/* sc=27 */ ':', '*', ':', ':', '\'', '\"', '\'', '\'', 0x00, 0x00, -/* sc=28 */ ']', '}', 0x1D, 0x1D, '`', '~', '~', '~', 0x00, 0x00, -/* sc=29 */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2a */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2b */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2c */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=2d */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=2e */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=2f */ 'm', 'M', '\r', '\r', 'm', 'M', '\r', '\r', 0x00, 0x01, -/* sc=30 */ ',', '<', '<', '<', ',', '<', '<', '<', 0x00, 0x00, -/* sc=31 */ '.', '>', '>', '>', '.', '>', '>', '>', 0x00, 0x00, -/* sc=32 */ '/', '?', 0x7F, 0x7F, '/', '?', 0x7F, 0x7F, 0x00, 0x00, -/* sc=33 */ NOP, '_', 0x1F, 0x1F, '\\', '|', 0x1C, 0x1C, 0x80, 0x00, -/* sc=34 */ ' ', ' ', 0x00, 0x00, ' ', ' ', 0x00, 0x00, 0x00, 0x00, -/* sc=35 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, -/* sc=36 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=37 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=38 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=39 */ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, RBT, RBT, 0x03, 0x02, -/* sc=3a */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=3b */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=3c */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=3d */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=3e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=3f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=40 */ '-', '-', '-', '-', '-', '-', '-', '-', 0x00, 0x00, -/* sc=41 */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x00, -/* sc=42 */ '7', '7', '7', '7', '7', '7', '7', '7', 0x00, 0x00, -/* sc=43 */ '8', '8', '8', '8', '8', '8', '8', '8', 0x00, 0x00, -/* sc=44 */ '9', '9', '9', '9', '9', '9', '9', '9', 0x00, 0x00, -/* sc=45 */ '*', '*', '*', '*', '*', '*', '*', '*', 0x00, 0x00, -/* sc=46 */ '4', '4', '4', '4', '4', '4', '4', '4', 0x00, 0x00, -/* sc=47 */ '5', '5', '5', '5', '5', '5', '5', '5', 0x00, 0x00, -/* sc=48 */ '6', '6', '6', '6', '6', '6', '6', '6', 0x00, 0x00, -/* sc=49 */ '+', '+', '+', '+', '+', '+', '+', '+', 0x00, 0x00, -/* sc=4a */ '1', '1', '1', '1', '1', '1', '1', '1', 0x00, 0x00, -/* sc=4b */ '2', '2', '2', '2', '2', '2', '2', '2', 0x00, 0x00, -/* sc=4c */ '3', '3', '3', '3', '3', '3', '3', '3', 0x00, 0x00, -/* sc=4d */ '=', '=', '=', '=', '=', '=', '=', '=', 0x00, 0x00, -/* sc=4e */ '0', '0', '0', '0', '0', '0', '0', '0', 0x00, 0x00, -/* sc=4f */ ',', ',', ',', ',', ',', ',', ',', ',', 0x00, 0x00, -/* sc=50 */ '.', '.', '.', '.', '.', '.', '.', '.', 0x00, 0x00, -/* sc=51 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, -/* sc=52 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=53 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=54 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=57 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=58 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=59 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5b */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=60 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=61 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=62 */ F( 1), F(13), F(25), F(37), S( 1), S( 1), S( 1), S( 1), 0xFF, 0x00, -/* sc=63 */ F( 2), F(14), F(26), F(38), S( 2), S( 2), S( 2), S( 2), 0xFF, 0x00, -/* sc=64 */ F( 3), F(15), F(27), F(39), S( 3), S( 3), S( 3), S( 3), 0xFF, 0x00, -/* sc=65 */ F( 4), F(16), F(28), F(40), S( 4), S( 4), S( 4), S( 4), 0xFF, 0x00, -/* sc=66 */ F( 5), F(17), F(29), F(41), S( 5), S( 5), S( 5), S( 5), 0xFF, 0x00, -/* sc=67 */ F( 6), F(18), F(30), F(42), S( 6), S( 6), S( 6), S( 6), 0xFF, 0x00, -/* sc=68 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=69 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=6a */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=6b */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=6c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=70 */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=71 */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=72 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=73 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=74 */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=75 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=76 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=77 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=78 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=79 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7b */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -}; -#endif - -#ifdef DKKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* DK iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, '1', '!', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, '@', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', '#', NOP, NOP, 0x9E, '#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', 0xA4, NOP, NOP, '$', 0xA4, NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '&', NOP, NOP, '6', '&', NOP, NOP, 0x33, 0x00, -/* sc=08 */ '7', '/', NOP, NOP, '{', '/', NOP, NOP, 0x33, 0x00, -/* sc=09 */ '8', '(', 0x1B, 0x1B, '[', '(', 0x1B, 0x1B, 0x00, 0x00, -/* sc=0a */ '9', ')', 0x1D, 0x1D, ']', ')', 0x1D, 0x1D, 0x00, 0x00, -/* sc=0b */ '0', '=', NOP, NOP, '}', '=', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '+', '?', NOP, NOP, '+', '?', NOP, NOP, 0x33, 0x00, -/* sc=0d */ '\'', '`', NOP, NOP, '|', '`', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ 0xE5, 0xC5, NOP, NOP, 0x86, 0x8F, NOP, NOP, 0x33, 0x01, -/* sc=1b */ '"', '^', 0x1E, 0x1E, '~', '^', 0x1E, 0x1E, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ 0xE6, 0xC6, NOP, NOP, 0x91, 0x92, NOP, NOP, 0x33, 0x01, -/* sc=28 */ 0xF8, 0xD8, NOP, NOP, 0x9B, 0x9D, NOP, NOP, 0x33, 0x01, -/* sc=29 */ 0xBD, 0xA7, NOP, NOP, 0xBD, 0xA7, NOP, NOP, 0x33, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '\'', '*', NOP, NOP, '\'', '*', NOP, NOP, 0x33, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', ';', NOP, NOP, ',', ';', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', ':', NOP, NOP, '.', ':', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', '*', '*', '*', '*', '*', '*', 0x00, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00, -/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', '-', '-', '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', '6', '6', '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ '<', '>', 0x1C, 0x1C, '\\', '>', 0x1C, 0x1C, 0x00, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x00, 0x02, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x00, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#ifdef UKKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* uk iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, '`', '`', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, '@', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', 0xA3, NOP, NOP, '#', '#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, '4', '$', NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '^', 0x1E, 0x1E, '^', '^', 0x1E, 0x1E, 0x00, 0x00, -/* sc=08 */ '7', '&', NOP, NOP, '[', '[', 0x1B, 0x1B, 0x30, 0x00, -/* sc=09 */ '8', '*', NOP, NOP, '8', '*', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '9', '(', NOP, NOP, ']', ']', 0x1D, 0x1D, 0x30, 0x00, -/* sc=0b */ '0', ')', NOP, NOP, '{', '{', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '-', '_', 0x1F, 0x1F, '|', '|', 0x1F, 0x1F, 0x00, 0x00, -/* sc=0d */ '=', '+', NOP, NOP, '}', '}', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ '[', '{', 0x1B, 0x1B, '[', '{', 0x1B, 0x1B, 0x00, 0x00, -/* sc=1b */ ']', '}', 0x1D, 0x1D, ']', '}', 0x1D, 0x1D, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ ';', ':', NOP, NOP, ';', ':', NOP, NOP, 0x33, 0x00, -/* sc=28 */ '\'', '@', 0x00, 0x00, '\'', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=29 */ '\\', '|', 0x1C, 0x1C, '\\', '\\', 0x1C, 0x1C, 0x00, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '#', '~', NOP, NOP, '~', '~', NOP, NOP, 0x33, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', '<', NOP, NOP, ',', '<', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', '>', NOP, NOP, '.', '>', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '/', '?', NOP, NOP, '/', '?', NOP, NOP, 0x33, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, '*', '*', 0x0A, 0x0A, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, 0x13, 0x13, NLK, NLK, 0x13, 0x13, 0xCC, 0x00, -/* sc=46 */ SLK, SLK, 0x7F, 0x7F, SLK, SLK, 0x7F, 0x7F, 0xCC, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', 0x1F, 0x1F, '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', 0x1E, 0x1E, '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ '\\', '|', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0xFF, 0x02, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x02, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#ifdef GRKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* german iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, '`', '`', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, '@', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', 0xA7, NOP, NOP, '#', '#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, '4', '$', NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '&', 0x1E, 0x1E, '^', '^', 0x1E, 0x1E, 0x00, 0x00, -/* sc=08 */ '7', '/', 0x1B, 0x1B, '[', '[', 0x1B, 0x1B, 0x00, 0x00, -/* sc=09 */ '8', '(', NOP, NOP, '8', '(', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '9', ')', 0x1D, 0x1D, ']', ']', 0x1D, 0x1D, 0x00, 0x00, -/* sc=0b */ '0', '=', NOP, NOP, '{', '{', NOP, NOP, 0x33, 0x00, -/* sc=0c */ 0xDF, '?', NOP, NOP, '|', '|', NOP, NOP, 0x33, 0x00, -/* sc=0d */ 0x92, 0x93, NOP, NOP, '\'', '`', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ 0xFC, 0xDC, 0x1B, 0x1B, '[', '{', 0x1B, 0x1B, 0x00, 0x01, -/* sc=1b */ '+', '*', 0x1D, 0x1D, ']', '}', 0x1D, 0x1D, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ 0xF6, 0xD6, NOP, NOP, 0xF6, 0xD6, NOP, NOP, 0x33, 0x01, -/* sc=28 */ 0xE4, 0xC4, NOP, NOP, 0xE4, 0xC4, NOP, NOP, 0x33, 0x01, -/* sc=29 */ '<', '>', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '#', '^', 0x1E, 0x1E, '`', '~', 0x1E, 0x1E, 0x00, 0x00, -/* sc=2c */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', ';', NOP, NOP, ',', ';', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', ':', NOP, NOP, '.', ':', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, '*', '*', 0x0A, 0x0A, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, 0x13, 0x13, NLK, NLK, 0x13, 0x13, 0xCC, 0x00, -/* sc=46 */ SLK, SLK, 0x7F, 0x7F, SLK, SLK, 0x7F, 0x7F, 0xCC, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', 0x1F, 0x1F, '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', 0x1E, 0x1E, '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0xFF, 0x02, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x02, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#ifdef SWKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* swedish iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, '@', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', '#', NOP, NOP, 0xA3, NOP, NOP, NOP, 0x37, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, 0xA4, NOP, NOP, NOP, 0x37, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=07 */ '6', '&', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=08 */ '7', '/', NOP, NOP, '{', NOP, NOP, NOP, 0x37, 0x00, -/* sc=09 */ '8', '(', NOP, NOP, '[', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0a */ '9', ')', NOP, NOP, ']', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0b */ '0', '=', NOP, NOP, '}', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0c */ '+', '?', NOP, NOP, '\\', NOP, 0x1C, NOP, 0x35, 0x00, -/* sc=0d */ 0x180, '`', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ 0xE5, 0xC5, NOP, NOP, '}', ']', NOP, NOP, 0x33, 0x01, -/* sc=1b */ 0xA8, '^', NOP, NOP, '~', NOP, NOP, NOP, 0x37, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ 0xF6, 0xD6, NOP, NOP, '|', '\\', NOP, NOP, 0x33, 0x01, -/* sc=28 */ 0xE4, 0xC4, NOP, NOP, '{', '[', NOP, NOP, 0x33, 0x01, -/* sc=29 */ 0xA7, 0xBD, NOP, NOP, '\\', '|', NOP, NOP, 0x33, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '\'', '*', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', ';', NOP, NOP, NOP, '<', NOP, NOP, 0x3B, 0x00, -/* sc=34 */ '.', ':', NOP, NOP, NOP, '>', NOP, NOP, 0x3B, 0x00, -/* sc=35 */ '-', '_', 0x1F, NOP, '/', '?', NOP, NOP, 0x13, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, '*', '*', 0x0A, 0x0A, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, 0x13, 0x13, NLK, NLK, 0x13, 0x13, 0xCC, 0x00, -/* sc=46 */ SLK, SLK, 0x7F, 0x7F, SLK, SLK, 0x7F, 0x7F, 0xCC, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', 0x1F, 0x1F, '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', 0x1E, 0x1E, '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ '<', '>', NOP, NOP, '|', NOP, NOP, NOP, 0x37, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0xFF, 0x02, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x02, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#ifdef RUKEYMAP -#define NO_ACCENTCHARS -static keymap_t key_map = { 0xEC, /* keys number */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * ------------------------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, NOP, NOP, SET8|0x1B, SET8|0x1B, DBG, NOP, 0x33, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, SET8|'1', SET8|'!', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '@', 0x00, 0x00, SET8|'2', SET8|'@', SET8|0x00, SET8|0x00, 0x00, 0x00, -/* sc=04 */ '3', '#', NOP, NOP, SET8|'3', SET8|'#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, SET8|'4', SET8|'$', NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, SET8|'5', SET8|'%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '^', 0x1E, 0x1E, SET8|'6', SET8|'^', SET8|0x1E, SET8|0x1E, 0x00, 0x00, -/* sc=08 */ '7', '&', NOP, NOP, SET8|'7', SET8|'&', NOP, NOP, 0x33, 0x00, -/* sc=09 */ '8', '*', NOP, NOP, SET8|'8', SET8|'*', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '9', '(', NOP, NOP, SET8|'9', SET8|'(', NOP, NOP, 0x33, 0x00, -/* sc=0b */ '0', ')', NOP, NOP, SET8|'0', SET8|')', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '-', '_', 0x1F, 0x1F, SET8|'-', SET8|'_', SET8|0x1F, SET8|0x1F, 0x00, 0x00, -/* sc=0d */ '=', '+', NOP, NOP, SET8|'=', SET8|'+', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, SET8|0x08, SET8|0x08, SET8|0x7F, SET8|0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, SET8|0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, SET8|'q', SET8|'Q', SET8|0x11, SET8|0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, SET8|'w', SET8|'W', SET8|0x17, SET8|0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, SET8|'e', SET8|'E', SET8|0x05, SET8|0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, SET8|'r', SET8|'R', SET8|0x12, SET8|0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, SET8|'t', SET8|'T', SET8|0x14, SET8|0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, SET8|'y', SET8|'Y', SET8|0x19, SET8|0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, SET8|'u', SET8|'U', SET8|0x15, SET8|0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, SET8|'i', SET8|'I', SET8|0x09, SET8|0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, SET8|'o', SET8|'O', SET8|0x0F, SET8|0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, SET8|'p', SET8|'P', SET8|0x10, SET8|0x10, 0x00, 0x01, -/* sc=1a */ '[', '{', 0x1B, 0x1B, SET8|'[', SET8|'{', SET8|0x1B, SET8|0x1B, 0x00, 0x00, -/* sc=1b */ ']', '}', 0x1D, 0x1D, SET8|']', SET8|'}', SET8|0x1D, SET8|0x1D, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, SET8|'a', SET8|'A', SET8|0x01, SET8|0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, SET8|'s', SET8|'S', SET8|0x13, SET8|0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, SET8|'d', SET8|'D', SET8|0x04, SET8|0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, SET8|'f', SET8|'F', SET8|0x06, SET8|0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, SET8|'g', SET8|'G', SET8|0x07, SET8|0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, SET8|'h', SET8|'H', SET8|0x08, SET8|0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, SET8|'j', SET8|'J', SET8|0x0A, SET8|0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, SET8|'k', SET8|'K', SET8|0x0B, SET8|0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, SET8|'l', SET8|'L', SET8|0x0C, SET8|0x0C, 0x00, 0x01, -/* sc=27 */ ';', ':', NOP, NOP, SET8|';', SET8|':', NOP, NOP, 0x33, 0x00, -/* sc=28 */ '\'', '"', NOP, NOP, SET8|'\'', SET8|'"', NOP, NOP, 0x33, 0x00, -/* sc=29 */ '`', '~', NOP, NOP, SET8|'`', SET8|'~', NOP, NOP, 0x33, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '\\', '|', 0x1C, 0x1C, SET8|'\\', SET8|'|', SET8|0x1C, SET8|0x1C, 0x00, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, SET8|'z', SET8|'Z', SET8|0x1A, SET8|0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, SET8|'x', SET8|'X', SET8|0x18, SET8|0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, SET8|'c', SET8|'C', SET8|0x03, SET8|0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, SET8|'v', SET8|'V', SET8|0x16, SET8|0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, SET8|'b', SET8|'B', SET8|0x02, SET8|0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, SET8|'n', SET8|'N', SET8|0x0E, SET8|0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, SET8|'m', SET8|'M', SET8|0x0D, SET8|0x0D, 0x00, 0x01, -/* sc=33 */ ',', '<', NOP, NOP, SET8|',', SET8|'<', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', '>', NOP, NOP, SET8|'.', SET8|'>', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '/', '?', NOP, NOP, SET8|'/', SET8|'?', NOP, NOP, 0x33, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, SET8|'*', SET8|'*', SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', SET8|' ', SET8|' ', SUSP, SET8|' ', 0x00, 0x00, -/* sc=3a */ ALK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00, -/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=47 */ F(49), '7', '7', '7', SET8|'7', SET8|'7', SET8|'7', SET8|'7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', SET8|'8', SET8|'8', SET8|'8', SET8|'8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', SET8|'9', SET8|'9', SET8|'9', SET8|'9', 0x80, 0x02, -/* sc=4a */ F(52), '-', '-', '-', SET8|'-', SET8|'-', SET8|'-', SET8|'-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', SET8|'4', SET8|'4', SET8|'4', SET8|'4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', SET8|'5', SET8|'5', SET8|'5', SET8|'5', 0x80, 0x02, -/* sc=4d */ F(55), '6', '6', '6', SET8|'6', SET8|'6', SET8|'6', SET8|'6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', SET8|'+', SET8|'+', SET8|'+', SET8|'+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', SET8|'1', SET8|'1', SET8|'1', SET8|'1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', SET8|'2', SET8|'2', SET8|'2', SET8|'2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', SET8|'3', SET8|'3', SET8|'3', SET8|'3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', SET8|'0', SET8|'0', SET8|'0', SET8|'0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', SET8|'.', SET8|'.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ ALK, ALK, ALK, ALK, ALK, ALK, ALK, ALK, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', NOP, NOP, SET8|'/', SET8|'/', NOP, NOP, 0x33, 0x00, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -/* sc=6c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=6f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=70 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=71 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=72 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=73 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=74 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=75 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=76 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=77 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=78 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=79 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7a */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7b */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7c */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7d */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7e */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=7f */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* extended (ALTGR LOCK keys) */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, NOP, NOP, SET8|0x1B, SET8|0x1B, DBG, NOP, 0x33, 0x00, -/* sc=02 */ '!', '1', NOP, NOP, SET8|'1', SET8|'!', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '"', '2', 0x00, 0x00, SET8|'2', SET8|'@', SET8|0x00, SET8|0x00, 0x00, 0x00, -/* sc=04 */ '\'', '3', NOP, NOP, SET8|'3', SET8|'#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '*', '4', NOP, NOP, SET8|'4', SET8|'$', NOP, NOP, 0x33, 0x00, -/* sc=06 */ ':', '5', NOP, NOP, SET8|'5', SET8|'%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ ',', '6', 0x1E, 0x1E, SET8|'6', SET8|'^', SET8|0x1E, SET8|0x1E, 0x00, 0x00, -/* sc=08 */ '.', '7', NOP, NOP, SET8|'7', SET8|'&', NOP, NOP, 0x33, 0x00, -/* sc=09 */ ';', '8', NOP, NOP, SET8|'8', SET8|'*', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '(', '9', NOP, NOP, SET8|'9', SET8|'(', NOP, NOP, 0x33, 0x00, -/* sc=0b */ ')', '0', NOP, NOP, SET8|'0', SET8|')', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '-', '_', 0x1F, 0x1F, SET8|'-', SET8|'_', SET8|0x1F, SET8|0x1F, 0x00, 0x00, -/* sc=0d */ '=', '+', NOP, NOP, SET8|'=', SET8|'+', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, SET8|0x08, SET8|0x08, SET8|0x7F, SET8|0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, SET8|0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 0xca, 0xea, 0x11, 0x11, SET8|'q', SET8|'Q', SET8|0x11, SET8|0x11, 0x00, 0x01, -/* sc=11 */ 0xc3, 0xe3, 0x17, 0x17, SET8|'w', SET8|'W', SET8|0x17, SET8|0x17, 0x00, 0x01, -/* sc=12 */ 0xd5, 0xf5, 0x05, 0x05, SET8|'e', SET8|'E', SET8|0x05, SET8|0x05, 0x00, 0x01, -/* sc=13 */ 0xcb, 0xeb, 0x12, 0x12, SET8|'r', SET8|'R', SET8|0x12, SET8|0x12, 0x00, 0x01, -/* sc=14 */ 0xc5, 0xe5, 0x14, 0x14, SET8|'t', SET8|'T', SET8|0x14, SET8|0x14, 0x00, 0x01, -/* sc=15 */ 0xce, 0xee, 0x19, 0x19, SET8|'y', SET8|'Y', SET8|0x19, SET8|0x19, 0x00, 0x01, -/* sc=16 */ 0xc7, 0xe7, 0x15, 0x15, SET8|'u', SET8|'U', SET8|0x15, SET8|0x15, 0x00, 0x01, -/* sc=17 */ 0xdb, 0xfb, 0x09, 0x09, SET8|'i', SET8|'I', SET8|0x09, SET8|0x09, 0x00, 0x01, -/* sc=18 */ 0xdd, 0xfd, 0x0F, 0x0F, SET8|'o', SET8|'O', SET8|0x0F, SET8|0x0F, 0x00, 0x01, -/* sc=19 */ 0xda, 0xfa, 0x10, 0x10, SET8|'p', SET8|'P', SET8|0x10, SET8|0x10, 0x00, 0x01, -/* sc=1a */ 0xc8, 0xe8, 0x1B, 0x1B, SET8|'[', SET8|'{', SET8|0x1B, SET8|0x1B, 0x00, 0x01, -/* sc=1b */ 0xdf, 0xff, 0x1D, 0x1D, SET8|']', SET8|'}', SET8|0x1D, SET8|0x1D, 0x00, 0x01, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 0xc6, 0xe6, 0x01, 0x01, SET8|'a', SET8|'A', SET8|0x01, SET8|0x01, 0x00, 0x01, -/* sc=1f */ 0xd9, 0xf9, 0x13, 0x13, SET8|'s', SET8|'S', SET8|0x13, SET8|0x13, 0x00, 0x01, -/* sc=20 */ 0xd7, 0xf7, 0x04, 0x04, SET8|'d', SET8|'D', SET8|0x04, SET8|0x04, 0x00, 0x01, -/* sc=21 */ 0xc1, 0xe1, 0x06, 0x06, SET8|'f', SET8|'F', SET8|0x06, SET8|0x06, 0x00, 0x01, -/* sc=22 */ 0xd0, 0xf0, 0x07, 0x07, SET8|'g', SET8|'G', SET8|0x07, SET8|0x07, 0x00, 0x01, -/* sc=23 */ 0xd2, 0xf2, 0x08, 0x08, SET8|'h', SET8|'H', SET8|0x08, SET8|0x08, 0x00, 0x01, -/* sc=24 */ 0xcf, 0xef, 0x0A, 0x0A, SET8|'j', SET8|'J', SET8|0x0A, SET8|0x0A, 0x00, 0x01, -/* sc=25 */ 0xcc, 0xec, 0x0B, 0x0B, SET8|'k', SET8|'K', SET8|0x0B, SET8|0x0B, 0x00, 0x01, -/* sc=26 */ 0xc4, 0xe4, 0x0C, 0x0C, SET8|'l', SET8|'L', SET8|0x0C, SET8|0x0C, 0x00, 0x01, -/* sc=27 */ 0xd6, 0xf6, NOP, NOP, SET8|';', SET8|':', NOP, NOP, 0x33, 0x01, -/* sc=28 */ 0xdc, 0xfc, NOP, NOP, SET8|'\'', SET8|'"', NOP, NOP, 0x33, 0x01, -/* sc=29 */ 0xa3, 0xb3, NOP, NOP, SET8|'`', SET8|'~', NOP, NOP, 0x33, 0x01, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '\\', '|', 0x1C, 0x1C, SET8|'\\', SET8|'|', SET8|0x1C, SET8|0x1C, 0x00, 0x00, -/* sc=2c */ 0xd1, 0xf1, 0x1A, 0x1A, SET8|'z', SET8|'Z', SET8|0x1A, SET8|0x1A, 0x00, 0x01, -/* sc=2d */ 0xde, 0xfe, 0x18, 0x18, SET8|'x', SET8|'X', SET8|0x18, SET8|0x18, 0x00, 0x01, -/* sc=2e */ 0xd3, 0xf3, 0x03, 0x03, SET8|'c', SET8|'C', SET8|0x03, SET8|0x03, 0x00, 0x01, -/* sc=2f */ 0xcd, 0xed, 0x16, 0x16, SET8|'v', SET8|'V', SET8|0x16, SET8|0x16, 0x00, 0x01, -/* sc=30 */ 0xc9, 0xe9, 0x02, 0x02, SET8|'b', SET8|'B', SET8|0x02, SET8|0x02, 0x00, 0x01, -/* sc=31 */ 0xd4, 0xf4, 0x0E, 0x0E, SET8|'n', SET8|'N', SET8|0x0E, SET8|0x0E, 0x00, 0x01, -/* sc=32 */ 0xd8, 0xf8, 0x0D, 0x0D, SET8|'m', SET8|'M', SET8|0x0D, SET8|0x0D, 0x00, 0x01, -/* sc=33 */ 0xc2, 0xe2, NOP, NOP, SET8|',', SET8|'<', NOP, NOP, 0x33, 0x01, -/* sc=34 */ 0xc0, 0xe0, NOP, NOP, SET8|'.', SET8|'>', NOP, NOP, 0x33, 0x01, -/* sc=35 */ '/', '?', NOP, NOP, SET8|'/', SET8|'?', NOP, NOP, 0x33, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, SET8|'*', SET8|'*', SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', SET8|' ', SET8|' ', SUSP, SET8|' ', 0x00, 0x00, -/* sc=3a */ ALK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00, -/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=47 */ F(49), '7', '7', '7', SET8|'7', SET8|'7', SET8|'7', SET8|'7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', SET8|'8', SET8|'8', SET8|'8', SET8|'8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', SET8|'9', SET8|'9', SET8|'9', SET8|'9', 0x80, 0x02, -/* sc=4a */ F(52), '-', '-', '-', SET8|'-', SET8|'-', SET8|'-', SET8|'-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', SET8|'4', SET8|'4', SET8|'4', SET8|'4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', SET8|'5', SET8|'5', SET8|'5', SET8|'5', 0x80, 0x02, -/* sc=4d */ F(55), '6', '6', '6', SET8|'6', SET8|'6', SET8|'6', SET8|'6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', SET8|'+', SET8|'+', SET8|'+', SET8|'+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', SET8|'1', SET8|'1', SET8|'1', SET8|'1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', SET8|'2', SET8|'2', SET8|'2', SET8|'2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', SET8|'3', SET8|'3', SET8|'3', SET8|'3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', SET8|'0', SET8|'0', SET8|'0', SET8|'0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', SET8|'.', SET8|'.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ ALK, ALK, ALK, ALK, ALK, ALK, ALK, ALK, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0A, 0x0A, SET8|0x0D, SET8|0x0D, SET8|0x0A, SET8|0x0A, 0x00, 0x00, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', NOP, NOP, SET8|'/', SET8|'/', NOP, NOP, 0x33, 0x00, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; - -#endif - -#ifdef ESKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x69, /* spanish iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x00, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, '|', '|', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, '@', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', 0xB7, NOP, NOP, '#', '#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, '4', '4', NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, '5', '5', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '&', 0x1E, 0x1E, 0xAC, 0xAC, 0x1E, 0x1E, 0x00, 0x00, -/* sc=08 */ '7', '/', 0x1B, 0x1B, '7', '7', 0x1B, 0x1B, 0x00, 0x00, -/* sc=09 */ '8', '(', NOP, NOP, '8', '8', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '9', ')', 0x1D, 0x1D, '8', '8', 0x1D, 0x1D, 0x00, 0x00, -/* sc=0b */ '0', '=', NOP, NOP, '9', '9', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '\'', '?', NOP, NOP, '\'', '\'', NOP, NOP, 0x33, 0x00, -/* sc=0d */ 0xA1, 0xBF, NOP, NOP, '\'', '`', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 0xE9, 0xC9, 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x1A, 0x1A, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 0xFA, 0xDA, 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 0xED, 0xCD, 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 0xF3, 0xD3, 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ DGRA, DCIR, 0x1B, 0x1B, '[', '[', 0x1B, 0x1B, 0xC0, 0x01, -/* sc=1b */ '+', '*', 0x1D, 0x1D, ']', '[', 0x1D, 0x1D, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 0xE1, 0xC1, 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ 0xF1, 0xD1, NOP, NOP, '~', NOP, NOP, NOP, 0x37, 0x01, -/* sc=28 */ DACU, DUML, NOP, NOP, '{', '}', NOP, NOP, 0xF3, 0x01, -/* sc=29 */ 0xBA, 0xAA, 0x1C, 0x1C, '\\', '\\', 0x1C, 0x1C, 0x00, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ 0xE7, 0xC7, 0x1E, 0x1E, '}', '}', 0x1E, 0x1E, 0x00, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x19, 0x19, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', ';', NOP, NOP, ',', ';', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', ':', NOP, NOP, '.', ':', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', NEXT, NEXT, '*', '*', NEXT, NEXT, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x00, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, 0x13, 0x13, NLK, NLK, 0x13, 0x13, 0xCC, 0x00, -/* sc=46 */ SLK, SLK, 0x7F, 0x7F, SLK, SLK, 0x7F, 0x7F, 0xCC, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', 0x1F, 0x1F, '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', 0x1E, 0x1E, '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x02, -/* sc=54 */ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ '<', '>', 0x1C, 0x1C, '\\', '>', 0x1C, 0x1C, 0x00, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x02, -/* sc=5c */ '*', '*', '*', '*', '*', '*', '*', '*', 0x00, 0x02, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(54), F(54), F(54), F(54), F(54), F(54), RBT, F(54), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -}; -#endif - -#ifdef ISKEYMAP -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* icelandic iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=03 */ '2', '"', 0x00, 0x00, NOP, NOP, 0x00, 0x00, 0x0C, 0x00, -/* sc=04 */ '3', '#', NOP, NOP, 0xA3, NOP, NOP, NOP, 0x37, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, 0xA4, NOP, NOP, NOP, 0x37, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=07 */ '6', '&', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=08 */ '7', '/', NOP, NOP, '{', NOP, NOP, NOP, 0x37, 0x00, -/* sc=09 */ '8', '(', NOP, NOP, '[', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0a */ '9', ')', NOP, NOP, ']', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0b */ '0', '=', NOP, NOP, '}', NOP, NOP, NOP, 0x37, 0x00, -/* sc=0c */ 0xF6, 0xD6, NOP, NOP, '\\', NOP, 0x1C, NOP, 0x35, 0x00, -/* sc=0d */ '-', '_', NOP, NOP, NOP, NOP, NOP, NOP, 0x3F, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, '@', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ 0xF0, 0xD0, NOP, NOP, '}', ']', NOP, NOP, 0x33, 0x01, -/* sc=1b */ '\'', '?', NOP, NOP, '~', NOP, NOP, NOP, 0x00, 0x01, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 0xDF, 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ 0xE6, 0xC6, NOP, NOP, '|', '\\', NOP, NOP, 0x33, 0x01, -/* sc=28 */ DACU, DACU, NOP, NOP, DTIL, '[', NOP, NOP, 0xFB, 0x01, -/* sc=29 */ DRIN, DDIA, NOP, NOP, DCIR, '*', NOP, NOP, 0xFB, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '+', '*', NOP, NOP, '`', '*', NOP, NOP, 0x00, 0x01, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', ';', NOP, NOP, NOP, '<', NOP, NOP, 0x3B, 0x00, -/* sc=34 */ '.', ':', NOP, NOP, NOP, '>', NOP, NOP, 0x3B, 0x00, -/* sc=35 */ 0xFE, 0xDE, 0x1F, NOP, '/', '?', NOP, NOP, 0x13, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, '*', '*', 0x0A, 0x0A, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, 0x13, 0x13, NLK, NLK, 0x13, 0x13, 0xCC, 0x00, -/* sc=46 */ SLK, SLK, 0x7F, 0x7F, SLK, SLK, 0x7F, 0x7F, 0xCC, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', 0x1F, 0x1F, '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', 0x1E, 0x1E, '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ '<', '>', NOP, NOP, '|', NOP, NOP, NOP, 0x37, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0xFF, 0x02, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x02, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#if !defined(DKKEYMAP) && !defined(UKKEYMAP) && !defined(GRKEYMAP) && !defined(SWKEYMAP) && !defined(RUKEYMAP) && !defined(ISKEYMAP) && !defined(ESKEYMAP) && !defined(PC98) -#define ISO_ACCENTCHARS -static keymap_t key_map = { 0x6C, /* US iso8859 keymap */ -/* alt - * scan cntrl alt alt cntrl - * code base shift cntrl shift alt shift cntrl shift spcl flgs - * --------------------------------------------------------------------------- - */ -/* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=01 */ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, DBG, 0x1B, 0x02, 0x00, -/* sc=02 */ '1', '!', NOP, NOP, '1', '!', NOP, NOP, 0x33, 0x00, -/* sc=03 */ '2', '@', 0x00, 0x00, '2', '@', 0x00, 0x00, 0x00, 0x00, -/* sc=04 */ '3', '#', NOP, NOP, '3', '#', NOP, NOP, 0x33, 0x00, -/* sc=05 */ '4', '$', NOP, NOP, '4', '$', NOP, NOP, 0x33, 0x00, -/* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, -/* sc=07 */ '6', '^', 0x1E, 0x1E, '6', '^', 0x1E, 0x1E, 0x00, 0x00, -/* sc=08 */ '7', '&', NOP, NOP, '7', '&', NOP, NOP, 0x33, 0x00, -/* sc=09 */ '8', '*', NOP, NOP, '8', '*', NOP, NOP, 0x33, 0x00, -/* sc=0a */ '9', '(', NOP, NOP, '9', '(', NOP, NOP, 0x33, 0x00, -/* sc=0b */ '0', ')', NOP, NOP, '0', ')', NOP, NOP, 0x33, 0x00, -/* sc=0c */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, -/* sc=0d */ '=', '+', NOP, NOP, '=', '+', NOP, NOP, 0x33, 0x00, -/* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, -/* sc=0f */ 0x09, BTAB, NOP, NOP, 0x09, BTAB, NOP, NOP, 0x77, 0x00, -/* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, -/* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, -/* sc=12 */ 'e', 'E', 0x05, 0x05, 'e', 'E', 0x05, 0x05, 0x00, 0x01, -/* sc=13 */ 'r', 'R', 0x12, 0x12, 'r', 'R', 0x12, 0x12, 0x00, 0x01, -/* sc=14 */ 't', 'T', 0x14, 0x14, 't', 'T', 0x14, 0x14, 0x00, 0x01, -/* sc=15 */ 'y', 'Y', 0x19, 0x19, 'y', 'Y', 0x19, 0x19, 0x00, 0x01, -/* sc=16 */ 'u', 'U', 0x15, 0x15, 'u', 'U', 0x15, 0x15, 0x00, 0x01, -/* sc=17 */ 'i', 'I', 0x09, 0x09, 'i', 'I', 0x09, 0x09, 0x00, 0x01, -/* sc=18 */ 'o', 'O', 0x0F, 0x0F, 'o', 'O', 0x0F, 0x0F, 0x00, 0x01, -/* sc=19 */ 'p', 'P', 0x10, 0x10, 'p', 'P', 0x10, 0x10, 0x00, 0x01, -/* sc=1a */ '[', '{', 0x1B, 0x1B, '[', '{', 0x1B, 0x1B, 0x00, 0x00, -/* sc=1b */ ']', '}', 0x1D, 0x1D, ']', '}', 0x1D, 0x1D, 0x00, 0x00, -/* sc=1c */ 0x0D, 0x0D, 0x0A, 0x0A, 0x0D, 0x0D, 0x0A, 0x0A, 0x00, 0x00, -/* sc=1d */ LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, LCTR, 0xFF, 0x00, -/* sc=1e */ 'a', 'A', 0x01, 0x01, 'a', 'A', 0x01, 0x01, 0x00, 0x01, -/* sc=1f */ 's', 'S', 0x13, 0x13, 's', 'S', 0x13, 0x13, 0x00, 0x01, -/* sc=20 */ 'd', 'D', 0x04, 0x04, 'd', 'D', 0x04, 0x04, 0x00, 0x01, -/* sc=21 */ 'f', 'F', 0x06, 0x06, 'f', 'F', 0x06, 0x06, 0x00, 0x01, -/* sc=22 */ 'g', 'G', 0x07, 0x07, 'g', 'G', 0x07, 0x07, 0x00, 0x01, -/* sc=23 */ 'h', 'H', 0x08, 0x08, 'h', 'H', 0x08, 0x08, 0x00, 0x01, -/* sc=24 */ 'j', 'J', 0x0A, 0x0A, 'j', 'J', 0x0A, 0x0A, 0x00, 0x01, -/* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, -/* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, -/* sc=27 */ ';', ':', NOP, NOP, ';', ':', NOP, NOP, 0x33, 0x00, -/* sc=28 */ '\'', '"', NOP, NOP, '\'', '"', NOP, NOP, 0x33, 0x00, -/* sc=29 */ '`', '~', NOP, NOP, '`', '~', NOP, NOP, 0x33, 0x00, -/* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, -/* sc=2b */ '\\', '|', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, -/* sc=2c */ 'z', 'Z', 0x1A, 0x1A, 'z', 'Z', 0x1A, 0x1A, 0x00, 0x01, -/* sc=2d */ 'x', 'X', 0x18, 0x18, 'x', 'X', 0x18, 0x18, 0x00, 0x01, -/* sc=2e */ 'c', 'C', 0x03, 0x03, 'c', 'C', 0x03, 0x03, 0x00, 0x01, -/* sc=2f */ 'v', 'V', 0x16, 0x16, 'v', 'V', 0x16, 0x16, 0x00, 0x01, -/* sc=30 */ 'b', 'B', 0x02, 0x02, 'b', 'B', 0x02, 0x02, 0x00, 0x01, -/* sc=31 */ 'n', 'N', 0x0E, 0x0E, 'n', 'N', 0x0E, 0x0E, 0x00, 0x01, -/* sc=32 */ 'm', 'M', 0x0D, 0x0D, 'm', 'M', 0x0D, 0x0D, 0x00, 0x01, -/* sc=33 */ ',', '<', NOP, NOP, ',', '<', NOP, NOP, 0x33, 0x00, -/* sc=34 */ '.', '>', NOP, NOP, '.', '>', NOP, NOP, 0x33, 0x00, -/* sc=35 */ '/', '?', NOP, NOP, '/', '?', NOP, NOP, 0x33, 0x00, -/* sc=36 */ RSH, RSH, RSH, RSH, RSH, RSH, RSH, RSH, 0xFF, 0x00, -/* sc=37 */ '*', '*', 0x0A, 0x0A, '*', '*', 0x0A, 0x0A, 0x33, 0x00, -/* sc=38 */ LALT, LALT, LALT, LALT, LALT, LALT, LALT, LALT, 0xFF, 0x00, -/* sc=39 */ ' ', ' ', 0x00, ' ', ' ', ' ', SUSP, ' ', 0x02, 0x00, -/* sc=3a */ CLK, CLK, CLK, CLK, CLK, CLK, CLK, CLK, 0xFF, 0x00, -/* sc=3b */ F( 1), F(13), F(25), F(37), S( 1), S(11), S( 1), S(11), 0xFF, 0x00, -/* sc=3c */ F( 2), F(14), F(26), F(38), S( 2), S(12), S( 2), S(12), 0xFF, 0x00, -/* sc=3d */ F( 3), F(15), F(27), F(39), S( 3), S(13), S( 3), S(13), 0xFF, 0x00, -/* sc=3e */ F( 4), F(16), F(28), F(40), S( 4), S(14), S( 4), S(14), 0xFF, 0x00, -/* sc=3f */ F( 5), F(17), F(29), F(41), S( 5), S(15), S( 5), S(15), 0xFF, 0x00, -/* sc=40 */ F( 6), F(18), F(30), F(42), S( 6), S(16), S( 6), S(16), 0xFF, 0x00, -/* sc=41 */ F( 7), F(19), F(31), F(43), S( 7), S( 7), S( 7), S( 7), 0xFF, 0x00, -/* sc=42 */ F( 8), F(20), F(32), F(44), S( 8), S( 8), S( 8), S( 8), 0xFF, 0x00, -/* sc=43 */ F( 9), F(21), F(33), F(45), S( 9), S( 9), S( 9), S( 9), 0xFF, 0x00, -/* sc=44 */ F(10), F(22), F(34), F(46), S(10), S(10), S(10), S(10), 0xFF, 0x00, -/* sc=45 */ NLK, NLK, NLK, NLK, NLK, NLK, NLK, NLK, 0xFF, 0x00, -/* sc=46 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=47 */ F(49), '7', '7', '7', '7', '7', '7', '7', 0x80, 0x02, -/* sc=48 */ F(50), '8', '8', '8', '8', '8', '8', '8', 0x80, 0x02, -/* sc=49 */ F(51), '9', '9', '9', '9', '9', '9', '9', 0x80, 0x02, -/* sc=4a */ F(52), '-', '-', '-', '-', '-', '-', '-', 0x80, 0x02, -/* sc=4b */ F(53), '4', '4', '4', '4', '4', '4', '4', 0x80, 0x02, -/* sc=4c */ F(54), '5', '5', '5', '5', '5', '5', '5', 0x80, 0x02, -/* sc=4d */ F(55), '6', '6', '6', '6', '6', '6', '6', 0x80, 0x02, -/* sc=4e */ F(56), '+', '+', '+', '+', '+', '+', '+', 0x80, 0x02, -/* sc=4f */ F(57), '1', '1', '1', '1', '1', '1', '1', 0x80, 0x02, -/* sc=50 */ F(58), '2', '2', '2', '2', '2', '2', '2', 0x80, 0x02, -/* sc=51 */ F(59), '3', '3', '3', '3', '3', '3', '3', 0x80, 0x02, -/* sc=52 */ F(60), '0', '0', '0', '0', '0', '0', '0', 0x80, 0x02, -/* sc=53 */ 0x7F, '.', '.', '.', '.', '.', RBT, RBT, 0x03, 0x02, -/* sc=54 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=55 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=57 */ F(11), F(23), F(35), F(47), S(11), S(11), S(11), S(11), 0xFF, 0x00, -/* sc=58 */ F(12), F(24), F(36), F(48), S(12), S(12), S(12), S(12), 0xFF, 0x00, -/* sc=59 */ 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x00, 0x00, -/* sc=5a */ RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, RCTR, 0xFF, 0x00, -/* sc=5b */ '/', '/', '/', '/', '/', '/', '/', '/', 0x00, 0x00, -/* sc=5c */ NEXT, NOP, DBG, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, -/* sc=5d */ RALT, RALT, RALT, RALT, RALT, RALT, RALT, RALT, 0xFF, 0x00, -/* sc=5e */ F(49), F(49), F(49), F(49), F(49), F(49), F(49), F(49), 0xFF, 0x00, -/* sc=5f */ F(50), F(50), F(50), F(50), F(50), F(50), F(50), F(50), 0xFF, 0x00, -/* sc=60 */ F(51), F(51), F(51), F(51), F(51), F(51), F(51), F(51), 0xFF, 0x00, -/* sc=61 */ F(53), F(53), F(53), F(53), F(53), F(53), F(53), F(53), 0xFF, 0x00, -/* sc=62 */ F(55), F(55), F(55), F(55), F(55), F(55), F(55), F(55), 0xFF, 0x00, -/* sc=63 */ F(57), F(57), F(57), F(57), F(57), F(57), F(57), F(57), 0xFF, 0x00, -/* sc=64 */ F(58), F(58), F(58), F(58), F(58), F(58), F(58), F(58), 0xFF, 0x00, -/* sc=65 */ F(59), F(59), F(59), F(59), F(59), F(59), F(59), F(59), 0xFF, 0x00, -/* sc=66 */ F(60), F(60), F(60), F(60), F(60), F(60), F(60), F(60), 0xFF, 0x00, -/* sc=67 */ F(61), F(61), F(61), F(61), F(61), F(61), RBT, F(61), 0xFF, 0x00, -/* sc=68 */ SLK, SLK, SLK, SLK, SLK, SLK, SLK, SLK, 0xFF, 0x00, -/* sc=69 */ F(62), F(62), F(62), F(62), F(62), F(62), F(62), F(62), 0xFF, 0x00, -/* sc=6a */ F(63), F(63), F(63), F(63), F(63), F(63), F(63), F(63), 0xFF, 0x00, -/* sc=6b */ F(64), F(64), F(64), F(64), F(64), F(64), F(64), F(64), 0xFF, 0x00, -}; -#endif - -#if defined(NO_ACCENTCHARS) -static accentmap_t accent_map = { 0, /* empty accent map */ - { - { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, - { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, - } -}; -#endif - -#if defined(ISO_ACCENTCHARS) -static accentmap_t accent_map = { 15, /* iso8859 accent map */ - { - /* dgra=0 */ - { '`', { { 'a',0xe0 }, { 'A',0xc0 }, { 'e',0xe8 }, { 'E',0xc8 }, - { 'i',0xec }, { 'I',0xcc }, { 'o',0xf2 }, { 'O',0xd2 }, - { 'u',0xf9 }, { 'U',0xd9 }, }, }, - /* dacu=1 */ - { 0xb4, { { 'a',0xe1 }, { 'A',0xc1 }, { 'e',0xe9 }, { 'E',0xc9 }, - { 'i',0xed }, { 'I',0xcd }, { 'o',0xf3 }, { 'O',0xd3 }, - { 'u',0xfa }, { 'U',0xda }, { 'y',0xfd }, { 'Y',0xdd }, }, }, - /* dcir=2 */ - { '^', { { 'a',0xe2 }, { 'A',0xc2 }, { 'e',0xea }, { 'E',0xca }, - { 'i',0xee }, { 'I',0xce }, { 'o',0xf4 }, { 'O',0xd4 }, - { 'u',0xfb }, { 'U',0xdb }, }, }, - /* dtil=3 */ - { '~', { { 'a',0xe3 }, { 'A',0xc3 }, { 'n',0xf1 }, { 'N',0xd1 }, - { 'o',0xf5 }, { 'O',0xd5 }, }, }, - /* dmac=4 */ - { 0 }, - /* dbre=5 */ - { 0 }, - /* ddot=6 */ - { 0 }, - /* duml=7 */ - { 0xa8, { { 'a',0xe4 }, { 'A',0xc4 }, { 'e',0xeb }, { 'E',0xcb }, - { 'i',0xef }, { 'I',0xcf }, { 'o',0xf6 }, { 'O',0xd6 }, - { 'u',0xfc }, { 'U',0xdc }, { 'y',0xff }, }, }, - /* dsla=8 */ - { 0 }, - /* drin=9 */ - { 0xb0, { { 'a',0xe5 }, { 'A',0xc5 }, }, }, - /* dced=10 */ - { 0xb8, { { 'c',0xe7 }, { 'C',0xc7 }, }, }, - /* dapo=11 */ - { 0 }, - /* ddac=12 */ - { 0 }, - /* dogo=13 */ - { 0 }, - /* dcar=14 */ - { 0 }, - } -}; -#endif /* ISO_ACCENTCHARS */ - -static fkeytab_t fkey_tab[96] = { -/* 01-04 */ {"\033[M", 3}, {"\033[N", 3}, {"\033[O", 3}, {"\033[P", 3}, -/* 05-08 */ {"\033[Q", 3}, {"\033[R", 3}, {"\033[S", 3}, {"\033[T", 3}, -/* 09-12 */ {"\033[U", 3}, {"\033[V", 3}, {"\033[W", 3}, {"\033[X", 3}, -/* 13-16 */ {"\033[Y", 3}, {"\033[Z", 3}, {"\033[a", 3}, {"\033[b", 3}, -/* 17-20 */ {"\033[c", 3}, {"\033[d", 3}, {"\033[e", 3}, {"\033[f", 3}, -/* 21-24 */ {"\033[g", 3}, {"\033[h", 3}, {"\033[i", 3}, {"\033[j", 3}, -/* 25-28 */ {"\033[k", 3}, {"\033[l", 3}, {"\033[m", 3}, {"\033[n", 3}, -/* 29-32 */ {"\033[o", 3}, {"\033[p", 3}, {"\033[q", 3}, {"\033[r", 3}, -/* 33-36 */ {"\033[s", 3}, {"\033[t", 3}, {"\033[u", 3}, {"\033[v", 3}, -/* 37-40 */ {"\033[w", 3}, {"\033[x", 3}, {"\033[y", 3}, {"\033[z", 3}, -/* 41-44 */ {"\033[@", 3}, {"\033[[", 3}, {"\033[\\",3}, {"\033[]", 3}, -/* 45-48 */ {"\033[^", 3}, {"\033[_", 3}, {"\033[`", 3}, {"\033[{", 3}, -/* 49-52 */ {"\033[H", 3}, {"\033[A", 3}, {"\033[I", 3}, {"-" , 1}, -/* 53-56 */ {"\033[D", 3}, {"\033[E", 3}, {"\033[C", 3}, {"+" , 1}, -/* 57-60 */ {"\033[F", 3}, {"\033[B", 3}, {"\033[G", 3}, {"\033[L", 3}, -/* 61-64 */ {"\177", 1}, {"\033[J", 3}, {"\033[~", 3}, {"\033[}", 3}, -/* 65-68 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 69-72 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 73-76 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 77-80 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 81-84 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 85-88 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 89-92 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} , -/* 93-96 */ {"", 0} , {"", 0} , {"", 0} , {"", 0} -}; diff --git a/sys/dev/pci/ohci_pci.c b/sys/dev/pci/ohci_pci.c deleted file mode 100644 index ece467c1a5aab..0000000000000 --- a/sys/dev/pci/ohci_pci.c +++ /dev/null @@ -1,200 +0,0 @@ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * USB Open Host Controller driver. - * - * OHCI spec: http://www.intel.com/design/usb/ohci11d.pdf - * USB spec: http://www.teleport.com/cgi-bin/mailmerge.cgi/~usb/cgiform.tpl - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/device.h> -#include <sys/proc.h> -#include <sys/queue.h> - -#include <pci/pcivar.h> -#include <pci/pcireg.h> - -#define PCI_CLASS_SERIALBUS 0x0c000000 -#define PCI_SUBCLASS_COMMUNICATIONS_SERIAL 0x00000000 -#define PCI_SUBCLASS_SERIALBUS_FIREWIRE 0x00000000 -#define PCI_SUBCLASS_SERIALBUS_ACCESS 0x00010000 -#define PCI_SUBCLASS_SERIALBUS_SSA 0x00020000 -#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000 -#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000 - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usb_mem.h> - -#include <dev/usb/ohcireg.h> -#include <dev/usb/ohcivar.h> - -#define PCI_INTERFACE(d) (((d) >> 8) & 0xff) -#define PCI_SUBCLASS(d) ((d) & PCI_SUBCLASS_MASK) -#define PCI_CLASS(d) ((d) & PCI_CLASS_MASK) - -#define PCI_VENDOR(d) ((d) & 0xffff) -#define PCI_DEVICE(d) (((d) >> 8) & 0xffff) - -#define PCI_OHCI_VENDORID_ALI 0x10b9 -#define PCI_OHCI_VENDORID_SIS 0x1039 - -#define PCI_OHCI_DEVICEID_ALADDIN_V 0x523710b9 -static const char ohci_device_aladdin_v[] = "AcerLabs M5237 (Aladdin-V) USB Host Controller"; -static const char ohci_device_generic[] = "OHCI USB Host Controller (generic)"; - -#define PCI_OHCI_BASE_REG 0x10 - -static const char *ohci_pci_probe __P((pcici_t, pcidi_t)); -static void ohci_pci_attach __P((pcici_t, int)); - -u_long ohci_count = 0; /* global counter for nr. of devices found */ - -static struct pci_device ohci_pci_device = { - "ohci", - ohci_pci_probe, - ohci_pci_attach, - &ohci_count, - NULL -}; - -DATA_SET(pcidevice_set, ohci_pci_device); - -static const char * -ohci_pci_probe(pcici_t config_id, pcidi_t device_id) -{ - u_int32_t class; - - if (device_id == PCI_OHCI_DEVICEID_ALADDIN_V) { - return (ohci_device_aladdin_v); - } else { - class = pci_conf_read(config_id, PCI_CLASS_REG); - if ( (PCI_CLASS(class) == PCI_CLASS_SERIALBUS) - && (PCI_SUBCLASS(class) == PCI_SUBCLASS_SERIALBUS_USB) - && (PCI_INTERFACE(class) == PCI_INTERFACE_OHCI)) { - return(ohci_device_generic); - } - } - - return NULL; /* dunno */ -} - -static void -ohci_pci_attach(pcici_t config_id, int unit) -{ - int id; - usbd_status r; - ohci_softc_t *sc = NULL; - vm_offset_t pbase; - - sc = malloc(sizeof(ohci_softc_t), M_DEVBUF, M_NOWAIT); - /* Do not free it below, intr might use the sc */ - if ( sc == NULL ) { - printf("usb%d: could not allocate memory", unit); - return; - } - memset(sc, 0, sizeof(ohci_softc_t)); - - if(!pci_map_mem(config_id, PCI_CBMEM, - (vm_offset_t *)&sc->sc_iobase, &pbase)) { - printf("usb%d: could not map memory\n", unit); - return; - } - sc->unit = unit; - - if ( !pci_map_int(config_id, (pci_inthand_t *)ohci_intr, - (void *) sc, &bio_imask)) { - printf("usb%d: could not map irq\n", unit); - return; - } - - /* Figure out vendor for root hub descriptor. */ - id = pci_conf_read(config_id, PCI_ID_REG); - if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_ALI) - sprintf(sc->sc_vendor, "AcerLabs"); - else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_SIS) - sprintf(sc->sc_vendor, "SiS"); - else - sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id)); - - /* We add a child to the root bus. After PCI configuration - * has completed the root bus will start to probe and - * attach all the devices attached to it, including our new - * kid. - * - * FIXME Sometime in the future the UHCI controller itself will - * become a kid of PCI device and this device add will no longer - * be necessary. - * - * See README for an elaborate description of the bus - * structure in spe. - */ - sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc); - if (!sc->sc_bus.bdev) { - printf("%s%d: could not add USB device to root bus\n", - device_get_name(sc->sc_bus.bdev), - device_get_unit(sc->sc_bus.bdev)); - return; - } - - r = ohci_init(sc); - if (r != USBD_NORMAL_COMPLETION) { - printf("usb%d: init failed, error=%d\n", unit, r); - device_delete_child(root_bus, sc->sc_bus.bdev); - return; - } - - switch(id) { - case PCI_OHCI_DEVICEID_ALADDIN_V: - device_set_desc(sc->sc_bus.bdev, ohci_device_aladdin_v); - break; - default: - printf("(New OHCI DeviceId=0x%08x)\n", id); - device_set_desc(sc->sc_bus.bdev, ohci_device_generic); - } - - return; -} diff --git a/sys/dev/pci/uhci_pci.c b/sys/dev/pci/uhci_pci.c deleted file mode 100644 index 083540f4b7921..0000000000000 --- a/sys/dev/pci/uhci_pci.c +++ /dev/null @@ -1,228 +0,0 @@ -/* FreeBSD $Id: uhci_pci.c,v 1.7 1999/01/06 19:55:49 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/device.h> -#include <sys/proc.h> -#include <sys/queue.h> - -#include <pci/pcivar.h> -#include <pci/pcireg.h> - -#define PCI_CLASS_SERIALBUS 0x0c000000 -#define PCI_SUBCLASS_COMMUNICATIONS_SERIAL 0x00000000 -#define PCI_SUBCLASS_SERIALBUS_FIREWIRE 0x00000000 -#define PCI_SUBCLASS_SERIALBUS_ACCESS 0x00010000 -#define PCI_SUBCLASS_SERIALBUS_SSA 0x00020000 -#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000 -#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000 - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usb_mem.h> - -#include <dev/usb/uhcireg.h> -#include <dev/usb/uhcivar.h> - -#define PCI_INTERFACE(d) (((d)>>8)&0xff) -#define PCI_SUBCLASS(d) ((d)&PCI_SUBCLASS_MASK) -#define PCI_CLASS(d) ((d)&PCI_CLASS_MASK) - -#define PCI_VENDOR(d) ((d)&0xffff) -#define PCI_DEVICE(d) (((d)>>8)&0xffff) - -#define PCI_UHCI_VENDORID_INTEL 0x8086 -#define PCI_UHCI_VENDORID_VIA 0x1106 - -#define PCI_UHCI_DEVICEID_PIIX3 0x70208086ul -static const char *uhci_device_piix3 = "Intel 82371SB USB Host Controller"; -#define PCI_UHCI_DEVICEID_PIIX4 0x71128086ul -#define PCI_UHCI_DEVICEID_PIIX4E 0x71128086ul /* no separate step */ -static const char *uhci_device_piix4 = "Intel 82371AB/EB USB Host Controller"; -#define PCI_UHCI_DEVICEID_VT83C572 0x30381106ul -static const char *uhci_device_vt83c572 = "VIA 83C572 USB Host Controller"; -static const char *uhci_device_generic = "UHCI USB Controller (generic)"; - -#define PCI_UHCI_BASE_REG 0x20 - -static const char *uhci_pci_probe __P((pcici_t, pcidi_t)); -static void uhci_pci_attach __P((pcici_t, int)); - -u_long uhci_count = 0; /* global counter for nr. of devices found */ - -static struct pci_device uhci_pci_device = { - "uhci", - uhci_pci_probe, - uhci_pci_attach, - &uhci_count, - NULL -}; - -DATA_SET(pcidevice_set, uhci_pci_device); - - -static const char * -uhci_pci_probe(pcici_t config_id, pcidi_t device_id) -{ - u_int32_t class; - - if (device_id == PCI_UHCI_DEVICEID_PIIX3) { - return (uhci_device_piix3); - } else if (device_id == PCI_UHCI_DEVICEID_PIIX4) { - return (uhci_device_piix4); - } else if (device_id == PCI_UHCI_DEVICEID_VT83C572) { - return (uhci_device_vt83c572); - } else { - class = pci_conf_read(config_id, PCI_CLASS_REG); - if ( PCI_CLASS(class) == PCI_CLASS_SERIALBUS - && PCI_SUBCLASS(class) == PCI_SUBCLASS_SERIALBUS_USB - && PCI_INTERFACE(class) == PCI_INTERFACE_UHCI) { - return (uhci_device_generic); - } - } - - return NULL; /* dunno... */ -} - -static void -uhci_pci_attach(pcici_t config_id, int unit) -{ - int id; - char *typestr; - usbd_status r; - uhci_softc_t *sc = NULL; - - sc = malloc(sizeof(uhci_softc_t), M_DEVBUF, M_NOWAIT); - /* Do not free it below, intr might use the sc */ - if ( sc == NULL ) { - printf("usb%d: could not allocate memory", unit); - return; - } - memset(sc, 0, sizeof(uhci_softc_t)); - - sc->sc_iobase = pci_conf_read(config_id,PCI_UHCI_BASE_REG) & 0xffe0; - sc->unit = unit; - - if ( !pci_map_int(config_id, (pci_inthand_t *)uhci_intr, - (void *) sc, &bio_imask)) { - printf("usb%d: could not map irq\n", unit); - return; - } - -#ifndef USBVERBOSE - if (bootverbose) -#endif - { - switch(pci_conf_read(config_id, PCI_USBREV) & PCI_USBREV_MASK) { - case PCI_USBREV_PRE_1_0: - typestr = "pre 1.0"; - break; - case PCI_USBREV_1_0: - typestr = "1.0"; - break; - default: - typestr = "unknown"; - break; - } - printf("usb%d: USB version %s, interrupting at %d\n", unit, - typestr, - (int)pci_conf_read(config_id,PCI_INTERRUPT_REG) & 0xff); - } - - /* Figure out vendor for root hub descriptor. */ - id = pci_conf_read(config_id, PCI_ID_REG); - if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_INTEL) - sprintf(sc->sc_vendor, "Intel"); - else if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_VIA) - sprintf(sc->sc_vendor, "VIA"); - else - sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id)); - - /* We add a child to the root bus. After PCI configuration - * has completed the root bus will start to probe and - * attach all the devices attached to it, including our new - * kid. - * - * FIXME Sometime in the future the UHCI controller itself will - * become a kid of PCI device and this device add will no longer - * be necessary. - * - * See README for an elaborate description of the bus - * structure in spe. - */ - sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc); - if (!sc->sc_bus.bdev) { - printf("%s%d: could not add USB device to root bus\n", - device_get_name(sc->sc_bus.bdev), - device_get_unit(sc->sc_bus.bdev)); - return; - } - - r = uhci_init(sc); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s%d: init failed, error=%d\n", - device_get_name(sc->sc_bus.bdev), - device_get_unit(sc->sc_bus.bdev), - r); - device_delete_child(root_bus, sc->sc_bus.bdev); - return; - } - - switch (id) { - case PCI_UHCI_DEVICEID_PIIX3: - device_set_desc(sc->sc_bus.bdev, uhci_device_piix3); - break; - case PCI_UHCI_DEVICEID_PIIX4: - device_set_desc(sc->sc_bus.bdev, uhci_device_piix4); - break; - case PCI_UHCI_DEVICEID_VT83C572: - device_set_desc(sc->sc_bus.bdev, uhci_device_vt83c572); - break; - default: - printf("(New UHCI DeviceId=0x%08x)\n", id); - device_set_desc(sc->sc_bus.bdev, uhci_device_generic); - } - - return; -} diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c index 7d64cd24fef6c..4bee255fd5a64 100644 --- a/sys/dev/ppbus/if_plip.c +++ b/sys/dev/ppbus/if_plip.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * From Id: lpt.c,v 1.55.2.1 1996/11/12 09:08:38 phk Exp - * $Id: if_plip.c,v 1.6 1998/11/07 14:35:41 nsouch Exp $ + * $Id: if_plip.c,v 1.3 1998/08/17 01:05:23 bde Exp $ */ /* @@ -129,9 +129,7 @@ #define LPIPTBLSIZE 256 /* Size of octet translation table */ -#ifndef DEBUG #define DEBUG -#endif #ifndef DEBUG #define lprintf (void) @@ -336,16 +334,17 @@ lpioctl (struct ifnet *ifp, u_long cmd, caddr_t data) } if (((ifp->if_flags & IFF_UP)) && (!(ifp->if_flags & IFF_RUNNING))) { - /* XXX + /* + * Try to allocate the ppbus as soon as possible + * With ppbus allocation, interrupts are enabled + * Now IFF_UP means that we own the bus + * + * XXX * Should the request be interruptible? */ if ((error = ppb_request_bus(&sc->lp_dev, PPB_WAIT|PPB_INTR))) return (error); - /* Now IFF_UP means that we own the bus */ - - ppb_set_mode(&sc->lp_dev, PPB_COMPATIBLE); - if (lpinittables()) { ppb_release_bus(&sc->lp_dev); return ENOBUFS; @@ -394,13 +393,6 @@ lpioctl (struct ifnet *ifp, u_long cmd, caddr_t data) } break; - case SIOCGIFMEDIA: - /* - * No ifmedia support at this stage; maybe use it - * in future for eg. protocol selection. - */ - return EINVAL; - default: lprintf("LP:ioctl(0x%lx)\n", cmd); return EINVAL; @@ -427,7 +419,7 @@ clpoutbyte (u_char byte, int spin, struct ppb_device *dev) static __inline int clpinbyte (int spin, struct ppb_device *dev) { - u_char c, cl; + int c, cl; while((ppb_rstr(dev) & CLPIP_SHAKE)) if(!--spin) { diff --git a/sys/dev/ppbus/immio.c b/sys/dev/ppbus/immio.c index 67054f79bea2e..630707cb0ad02 100644 --- a/sys/dev/ppbus/immio.c +++ b/sys/dev/ppbus/immio.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: immio.c,v 1.4 1998/10/31 11:35:21 nsouch Exp $ + * $Id: immio.c,v 1.2 1998/09/20 14:41:54 nsouch Exp $ * */ @@ -47,8 +47,6 @@ #include <sys/kernel.h> #endif /*KERNEL */ -#include "opt_vpo.h" - #include <dev/ppbus/ppbconf.h> #include <dev/ppbus/ppb_msq.h> #include <dev/ppbus/vpoio.h> @@ -288,13 +286,9 @@ imm_disconnect(struct vpoio_data *vpo, int *connected, int release_bus) ppb_MS_microseq(&vpo->vpo_dev, cpp_microseq, &ret); - if ((s1 != (char)0xb8 || s2 != (char)0x18 || s3 != (char)0x38)) { - if (bootverbose) - printf("imm%d: (disconnect) s1=0x%x s2=0x%x, s3=0x%x\n", - vpo->vpo_unit, s1 & 0xff, s2 & 0xff, s3 & 0xff); - if (connected) - *connected = VP0_ECONNECT; - } + if ((s1 != (char)0xb8 || s2 != (char)0x18 || s3 != (char)0x38) && + connected) + *connected = VP0_ECONNECT; if (release_bus) return (ppb_release_bus(&vpo->vpo_dev)); @@ -340,13 +334,9 @@ imm_connect(struct vpoio_data *vpo, int how, int *disconnected, int request_bus) ppb_MS_microseq(&vpo->vpo_dev, cpp_microseq, &ret); - if ((s1 != (char)0xb8 || s2 != (char)0x18 || s3 != (char)0x30)) { - if (bootverbose) - printf("imm%d: (connect) s1=0x%x s2=0x%x, s3=0x%x\n", - vpo->vpo_unit, s1 & 0xff, s2 & 0xff, s3 & 0xff); - if (disconnected) - *disconnected = VP0_ECONNECT; - } + if ((s1 != (char)0xb8 || s2 != (char)0x18 || s3 != (char)0x30) + && disconnected) + *disconnected = VP0_ECONNECT; return (0); } diff --git a/sys/dev/ppbus/lpbb.c b/sys/dev/ppbus/lpbb.c deleted file mode 100644 index cd8ff244a0c61..0000000000000 --- a/sys/dev/ppbus/lpbb.c +++ /dev/null @@ -1,319 +0,0 @@ -/*- - * Copyright (c) 1998 Nicolas Souchu, Marc Bouget - * 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 AUTHOR 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 AUTHOR 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. - * - * $Id: lpbb.c,v 1.3 1998/12/07 21:58:16 archie Exp $ - * - */ - -/* - * I2C Bit-Banging over parallel port - * - * See the Official Philips interface description in lpbb(4) - */ - -#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/systm.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/conf.h> -#include <sys/buf.h> -#include <sys/uio.h> -#include <sys/malloc.h> - -#include <machine/clock.h> - -#include <dev/ppbus/ppbconf.h> - -#include <dev/iicbus/iiconf.h> -#include <dev/iicbus/iicbus.h> - -#include "iicbb_if.h" - -/* iicbus softc */ -struct lpbb_softc { - - struct ppb_device lpbb_dev; -}; - -static int lpbb_detect(struct lpbb_softc *); - -static int lpbb_probe(device_t); -static int lpbb_attach(device_t); -static void lpbb_print_child(device_t, device_t); - -static int lpbb_callback(device_t, int, caddr_t *); -static void lpbb_setlines(device_t, int, int); -static int lpbb_getdataline(device_t); -static int lpbb_reset(device_t, u_char, u_char, u_char *); - -static devclass_t lpbb_devclass; - -static device_method_t lpbb_methods[] = { - /* device interface */ - DEVMETHOD(device_probe, lpbb_probe), - DEVMETHOD(device_attach, lpbb_attach), - - /* bus interface */ - DEVMETHOD(bus_print_child, lpbb_print_child), - - /* iicbb interface */ - DEVMETHOD(iicbb_callback, lpbb_callback), - DEVMETHOD(iicbb_setlines, lpbb_setlines), - DEVMETHOD(iicbb_getdataline, lpbb_getdataline), - DEVMETHOD(iicbb_reset, lpbb_reset), - - { 0, 0 } -}; - -static driver_t lpbb_driver = { - "lpbb", - lpbb_methods, - DRIVER_TYPE_MISC, - sizeof(struct lpbb_softc), -}; - -/* - * Make ourselves visible as a ppbus driver - */ -static struct ppb_device *lpbb_ppb_probe(struct ppb_data *ppb); -static int lpbb_ppb_attach(struct ppb_device *dev); - -#define MAXLPBB 8 /* XXX not much better! */ -static struct lpbb_softc *lpbbdata[MAXLPBB]; -static int nlpbb = 0; - -#ifdef KERNEL - -static struct ppb_driver lpbbdriver = { - lpbb_ppb_probe, lpbb_ppb_attach, "lpbb" -}; -DATA_SET(ppbdriver_set, lpbbdriver); - -#endif /* KERNEL */ - -static int -lpbb_probe(device_t dev) -{ - struct lpbb_softc *sc = lpbbdata[device_get_unit(dev)]; - struct lpbb_softc *scdst = (struct lpbb_softc *)device_get_softc(dev); - - /* XXX copy softc. Yet, ppbus device is sc->lpbb_dev, but will be - * dev->parent when ppbus will be ported to the new bus architecture */ - bcopy(sc, scdst, sizeof(struct lpbb_softc)); - - device_set_desc(dev, "parallel I2C bit-banging interface"); - - /* probe done by ppbus initialization */ - return (0); -} - -static int -lpbb_attach(device_t dev) -{ - device_t bitbang, iicbus; - - /* add generic bit-banging code */ - bitbang = device_add_child(dev, "iicbb", -1, NULL); - - /* add the iicbus to the tree */ - iicbus = iicbus_alloc_bus(bitbang); - - device_probe_and_attach(bitbang); - - /* XXX should be in iicbb_attach! */ - device_probe_and_attach(iicbus); - - return (0); -} - -/* - * lppbb_ppb_probe() - */ -static struct ppb_device * -lpbb_ppb_probe(struct ppb_data *ppb) -{ - struct lpbb_softc *sc; - - sc = (struct lpbb_softc *) malloc(sizeof(struct lpbb_softc), - M_TEMP, M_NOWAIT); - if (!sc) { - printf("lpbb: cannot malloc!\n"); - return (0); - } - bzero(sc, sizeof(struct lpbb_softc)); - - lpbbdata[nlpbb] = sc; - - /* - * ppbus dependent initialisation. - */ - sc->lpbb_dev.id_unit = nlpbb; - sc->lpbb_dev.name = lpbbdriver.name; - sc->lpbb_dev.ppb = ppb; - sc->lpbb_dev.intr = 0; - - if (!lpbb_detect(sc)) { - free(sc, M_TEMP); - return (NULL); - } - - /* Ok, go to next device on next probe */ - nlpbb ++; - - /* XXX wrong according to new bus architecture. ppbus needs to be - * ported - */ - return (&sc->lpbb_dev); -} - -static int -lpbb_ppb_attach(struct ppb_device *dev) -{ - /* add the parallel port I2C interface to the bus tree */ - if (!device_add_child(root_bus, "lpbb", dev->id_unit, NULL)) - return (0); - - return (1); -} - -static int -lpbb_callback(device_t dev, int index, caddr_t *data) -{ - struct lpbb_softc *sc = (struct lpbb_softc *)device_get_softc(dev); - int error = 0; - int how; - - switch (index) { - case IIC_REQUEST_BUS: - /* request the ppbus */ - how = *(int *)data; - error = ppb_request_bus(&sc->lpbb_dev, how); - break; - - case IIC_RELEASE_BUS: - /* release the ppbus */ - error = ppb_release_bus(&sc->lpbb_dev); - break; - - default: - error = EINVAL; - } - - return (error); -} - -#define SDA_out 0x80 -#define SCL_out 0x08 -#define SDA_in 0x80 -#define SCL_in 0x08 -#define ALIM 0x20 -#define I2CKEY 0x50 - -static int getSDA(struct lpbb_softc *sc) -{ -if((ppb_rstr(&sc->lpbb_dev)&SDA_in)==SDA_in) - return 1; -else - return 0; -} - -static void setSDA(struct lpbb_softc *sc, char val) -{ -if(val==0) - ppb_wdtr(&sc->lpbb_dev, (u_char)SDA_out); -else - ppb_wdtr(&sc->lpbb_dev, (u_char)~SDA_out); -} - -static void setSCL(struct lpbb_softc *sc, unsigned char val) -{ -if(val==0) - ppb_wctr(&sc->lpbb_dev, (u_char)(ppb_rctr(&sc->lpbb_dev)&~SCL_out)); -else - ppb_wctr(&sc->lpbb_dev, (u_char)(ppb_rctr(&sc->lpbb_dev)|SCL_out)); -} - -static int lpbb_detect(struct lpbb_softc *sc) -{ - if (ppb_request_bus(&sc->lpbb_dev, PPB_DONTWAIT)) { - printf("lpbb: can't allocate ppbus\n"); - return (0); - } - - /* reset bus */ - setSDA(sc, 1); - setSCL(sc, 1); - - if ((ppb_rstr(&sc->lpbb_dev) & I2CKEY) || - ((ppb_rstr(&sc->lpbb_dev) & ALIM) != ALIM)) { - - ppb_release_bus(&sc->lpbb_dev); - return (0); - } - - ppb_release_bus(&sc->lpbb_dev); - - return (1); -} - -static int -lpbb_reset(device_t dev, u_char speed, u_char addr, u_char * oldaddr) -{ - struct lpbb_softc *sc = (struct lpbb_softc *)device_get_softc(dev); - - /* reset bus */ - setSDA(sc, 1); - setSCL(sc, 1); - - return (IIC_ENOADDR); -} - -static void -lpbb_setlines(device_t dev, int ctrl, int data) -{ - struct lpbb_softc *sc = (struct lpbb_softc *)device_get_softc(dev); - - setSCL(sc, ctrl); - setSDA(sc, data); -} - -static int -lpbb_getdataline(device_t dev) -{ - struct lpbb_softc *sc = (struct lpbb_softc *)device_get_softc(dev); - - return (getSDA(sc)); -} - -static void -lpbb_print_child(device_t bus, device_t dev) -{ - printf(" on %s%d", device_get_name(bus), device_get_unit(bus)); - - return; -} - -DRIVER_MODULE(lpbb, root, lpbb_driver, lpbb_devclass, 0, 0); diff --git a/sys/dev/ppbus/nlpt.c b/sys/dev/ppbus/nlpt.c index 89d6c7f5a5a34..2a48eb4a2b766 100644 --- a/sys/dev/ppbus/nlpt.c +++ b/sys/dev/ppbus/nlpt.c @@ -47,7 +47,7 @@ * * from: unknown origin, 386BSD 0.1 * From Id: lpt.c,v 1.55.2.1 1996/11/12 09:08:38 phk Exp - * $Id: nlpt.c,v 1.11 1998/12/04 22:00:33 archie Exp $ + * $Id: nlpt.c,v 1.9 1998/08/03 19:14:31 msmith Exp $ */ /* @@ -81,19 +81,12 @@ #endif /*KERNEL*/ #include <dev/ppbus/ppbconf.h> -#include <dev/ppbus/ppb_1284.h> #include <dev/ppbus/nlpt.h> -#include "opt_nlpt.h" - #ifndef NLPT_DEBUG -#define nlprintf(args) +#define nlprintf (void) #else -#define nlprintf(args) \ - do { \ - if (nlptflag) \ - printf args; \ - } while (0) +#define nlprintf if (nlptflag) printf static int volatile nlptflag = 1; #endif @@ -102,7 +95,6 @@ static int volatile nlptflag = 1; #define LPTOUTMAX 1 /* maximal timeout 1 s */ #define LPPRI (PZERO+8) #define BUFSIZE 1024 -#define BUFSTATSIZE 32 #define LPTUNIT(s) ((s)&0x03) #define LPTFLAGS(s) ((s)&0xfc) @@ -167,12 +159,11 @@ DATA_SET(ppbdriver_set, nlptdriver); static d_open_t nlptopen; static d_close_t nlptclose; static d_write_t nlptwrite; -static d_read_t nlptread; static d_ioctl_t nlptioctl; #define CDEV_MAJOR 16 static struct cdevsw nlpt_cdevsw = - { nlptopen, nlptclose, nlptread, nlptwrite, /*16*/ + { nlptopen, nlptclose, noread, nlptwrite, /*16*/ nlptioctl, nullstop, nullreset, nodevtotty, /* lpt */ seltrue, nommap, nostrat, LPT_NAME, NULL, -1 }; @@ -181,9 +172,6 @@ lpt_request_ppbus(struct lpt_data *sc, int how) { int error; - if (sc->sc_state & HAVEBUS) - return (0); - /* we have the bus only if the request succeded */ if ((error = ppb_request_bus(&sc->lpt_dev, how)) == 0) sc->sc_state |= HAVEBUS; @@ -194,10 +182,13 @@ lpt_request_ppbus(struct lpt_data *sc, int how) static int lpt_release_ppbus(struct lpt_data *sc) { - ppb_release_bus(&sc->lpt_dev); - sc->sc_state &= ~HAVEBUS; + int error; + + /* we do not have the bus only if the request succeeded */ + if ((error = ppb_release_bus(&sc->lpt_dev)) == 0) + sc->sc_state &= ~HAVEBUS; - return (0); + return (error); } /* @@ -216,7 +207,7 @@ nlpt_port_test(struct lpt_data *sc, u_char data, u_char mask) temp = ppb_rdtr(&sc->lpt_dev) & mask; } while (temp != data && --timeout); - nlprintf(("out=%x\tin=%x\ttout=%d\n", data, temp, timeout)); + nlprintf("out=%x\tin=%x\ttout=%d\n", data, temp, timeout); return (temp == data); } @@ -377,15 +368,15 @@ nlptattach(struct ppb_device *dev) ppb_wctr(&sc->lpt_dev, LPC_NINIT); /* check if we can use interrupt, should be done by ppc stuff */ - nlprintf(("oldirq %x\n", sc->sc_irq)); + nlprintf("oldirq %x\n", sc->sc_irq); if (ppb_get_irq(&sc->lpt_dev)) { sc->sc_irq = LP_HAS_IRQ | LP_USE_IRQ | LP_ENABLE_IRQ; printf(LPT_NAME "%d: Interrupt-driven port\n", dev->id_unit); } else { sc->sc_irq = 0; - nlprintf((LPT_NAME "%d: Polled port\n", dev->id_unit)); + nlprintf(LPT_NAME "%d: Polled port\n", dev->id_unit); } - nlprintf(("irq %x\n", sc->sc_irq)); + nlprintf("irq %x\n", sc->sc_irq); lpt_release_ppbus(sc); @@ -407,7 +398,7 @@ nlptout(void *arg) struct lpt_data *sc = arg; int pl; - nlprintf(("T %x ", ppb_rstr(&sc->lpt_dev))); + nlprintf ("T %x ", ppb_rstr(&sc->lpt_dev)); if (sc->sc_state & OPEN) { sc->sc_backoff++; if (sc->sc_backoff > hz/LPTOUTMAX) @@ -444,7 +435,7 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) struct lpt_data *sc; int s; - int trys, err; + int trys; u_int unit = LPTUNIT(minor(dev)); if ((unit >= nlpt)) @@ -453,7 +444,7 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) sc = lptdata[unit]; if (sc->sc_state) { - nlprintf((LPT_NAME ": still open %x\n", sc->sc_state)); + nlprintf(LPT_NAME ": still open %x\n", sc->sc_state); return(EBUSY); } else sc->sc_state |= LPTINIT; @@ -467,11 +458,12 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) } /* request the ppbus only if we don't have it already */ - if (err = lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR)) - return (err); + if ((sc->sc_state & HAVEBUS) == 0 && + lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR)) + return (EINTR); s = spltty(); - nlprintf((LPT_NAME " flags 0x%x\n", sc->sc_flags)); + nlprintf(LPT_NAME " flags 0x%x\n", sc->sc_flags); /* set IRQ status according to ENABLE_IRQ flag */ if (sc->sc_irq & LP_ENABLE_IRQ) @@ -497,7 +489,7 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) if (trys++ >= LPINITRDY*4) { splx(s); sc->sc_state = 0; - nlprintf(("status %x\n", ppb_rstr(&sc->lpt_dev))); + nlprintf ("status %x\n", ppb_rstr(&sc->lpt_dev) ); lpt_release_ppbus(sc); return (EBUSY); @@ -530,7 +522,6 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) sc->sc_state = OPEN; sc->sc_inbuf = geteblk(BUFSIZE); - sc->sc_statbuf = geteblk(BUFSTATSIZE); sc->sc_xfercnt = 0; splx(s); @@ -538,14 +529,14 @@ nlptopen(dev_t dev, int flags, int fmt, struct proc *p) lpt_release_ppbus(sc); /* only use timeout if using interrupt */ - nlprintf(("irq %x\n", sc->sc_irq)); + nlprintf("irq %x\n", sc->sc_irq); if (sc->sc_irq & LP_USE_IRQ) { sc->sc_state |= TOUT; timeout(nlptout, (caddr_t)sc, (sc->sc_backoff = hz/LPTOUTINITIAL)); } - nlprintf(("opened.\n")); + nlprintf("opened.\n"); return(0); } @@ -564,7 +555,8 @@ nlptclose(dev_t dev, int flags, int fmt, struct proc *p) if(sc->sc_flags & LP_BYPASS) goto end_close; - if (err = lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR)) + if ((sc->sc_state & HAVEBUS) == 0 && + (err = lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR))) return (err); sc->sc_state &= ~OPEN; @@ -581,7 +573,6 @@ nlptclose(dev_t dev, int flags, int fmt, struct proc *p) ppb_wctr(&sc->lpt_dev, LPC_NINIT); brelse(sc->sc_inbuf); - brelse(sc->sc_statbuf); end_close: /* release the bus anyway */ @@ -589,7 +580,7 @@ end_close: sc->sc_state = 0; sc->sc_xfercnt = 0; - nlprintf(("closed.\n")); + nlprintf("closed.\n"); return(0); } @@ -607,7 +598,7 @@ nlpt_pushbytes(struct lpt_data *sc) int spin, err, tic; char ch; - nlprintf(("p")); + nlprintf("p"); /* loop for every character .. */ while (sc->sc_xfercnt > 0) { /* printer data */ @@ -654,40 +645,6 @@ nlpt_pushbytes(struct lpt_data *sc) } /* - * nlptread --retrieve printer status in IEEE1284 NIBBLE mode - */ - -static int -nlptread(dev_t dev, struct uio *uio, int ioflag) -{ - struct lpt_data *sc = lptdata[LPTUNIT(minor(dev))]; - int error = 0, len; - - if ((error = ppb_1284_negociate(&sc->lpt_dev, PPB_NIBBLE, 0))) - return (error); - - /* read data in an other buffer, read/write may be simultaneous */ - len = 0; - while (uio->uio_resid) { - if ((error = ppb_1284_read(&sc->lpt_dev, PPB_NIBBLE, - sc->sc_statbuf->b_data, min(BUFSTATSIZE, - uio->uio_resid), &len))) { - goto error; - } - - if (!len) - goto error; /* no more data */ - - if ((error = uiomove(sc->sc_statbuf->b_data, len, uio))) - goto error; - } - -error: - ppb_1284_terminate(&sc->lpt_dev); - return (error); -} - -/* * nlptwrite --copy a line from user space to a local buffer, then call * putc to get the chars moved to the output queue. * @@ -699,7 +656,6 @@ nlptwrite(dev_t dev, struct uio *uio, int ioflag) { register unsigned n; int pl, err; - u_int unit = LPTUNIT(minor(dev)); struct lpt_data *sc = lptdata[LPTUNIT(minor(dev))]; if(sc->sc_flags & LP_BYPASS) { @@ -708,46 +664,26 @@ nlptwrite(dev_t dev, struct uio *uio, int ioflag) } /* request the ppbus only if we don't have it already */ - if (err = lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR)) - return (err); + if ((sc->sc_state & HAVEBUS) == 0 && + lpt_request_ppbus(sc, PPB_WAIT|PPB_INTR)) + return (EINTR); sc->sc_state &= ~INTERRUPTED; while ((n = min(BUFSIZE, uio->uio_resid)) != 0) { sc->sc_cp = sc->sc_inbuf->b_data ; uiomove(sc->sc_cp, n, uio); sc->sc_xfercnt = n ; - - if (sc->sc_irq & LP_ENABLE_EXT) { - /* try any extended mode */ - err = ppb_write(&sc->lpt_dev, sc->sc_cp, - sc->sc_xfercnt, 0); - switch (err) { - case 0: - /* if not all data was sent, we could rely - * on polling for the last bytes */ - sc->sc_xfercnt = 0; - break; - case EINTR: - sc->sc_state |= INTERRUPTED; - return(err); - case EINVAL: - /* advanced mode not avail */ - log(LOG_NOTICE, LPT_NAME "%d: advanced mode not avail, polling\n", unit); - break; - default: - return(err); - } - } else while ((sc->sc_xfercnt > 0)&&(sc->sc_irq & LP_USE_IRQ)) { - nlprintf(("i")); + while ((sc->sc_xfercnt > 0)&&(sc->sc_irq & LP_USE_IRQ)) { + nlprintf("i"); /* if the printer is ready for a char, */ /* give it one */ if ((sc->sc_state & OBUSY) == 0){ - nlprintf(("\nC %d. ", sc->sc_xfercnt)); + nlprintf("\nC %d. ", sc->sc_xfercnt); pl = spltty(); nlpt_intr(sc->lpt_unit); (void) splx(pl); } - nlprintf(("W ")); + nlprintf("W "); if (sc->sc_state & OBUSY) if ((err = tsleep((caddr_t)sc, LPPRI|PCATCH, LPT_NAME "write", 0))) { @@ -755,10 +691,9 @@ nlptwrite(dev_t dev, struct uio *uio, int ioflag) return(err); } } - /* check to see if we must do a polled write */ if(!(sc->sc_irq & LP_USE_IRQ) && (sc->sc_xfercnt)) { - nlprintf(("p")); + nlprintf("p"); err = nlpt_pushbytes(sc); @@ -806,7 +741,7 @@ nlpt_intr(int unit) if (sc->sc_xfercnt) { /* send char */ - /*nlprintf(("%x ", *sc->sc_cp)); */ + /*nlprintf("%x ", *sc->sc_cp); */ ppb_wdtr(&sc->lpt_dev, *sc->sc_cp++) ; ppb_wctr(&sc->lpt_dev, sc->sc_control|LPC_STB); /* DELAY(X) */ @@ -824,7 +759,7 @@ nlpt_intr(int unit) if(!(sc->sc_state & INTERRUPTED)) wakeup((caddr_t)sc); - nlprintf(("w ")); + nlprintf("w "); return; } else { /* check for error */ if(((sts & (LPS_NERR | LPS_OUT) ) != LPS_NERR) && @@ -832,7 +767,7 @@ nlpt_intr(int unit) sc->sc_state |= EERROR; /* nlptout() will jump in and try to restart. */ } - nlprintf(("sts %x ", sts)); + nlprintf("sts %x ", sts); } static void @@ -870,35 +805,15 @@ nlptioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) * this gets syslog'd. */ old_sc_irq = sc->sc_irq; - switch(*(int*)data) { - case 0: + if(*(int*)data == 0) sc->sc_irq &= (~LP_ENABLE_IRQ); - break; - case 1: - sc->sc_irq &= (~LP_ENABLE_EXT); + else sc->sc_irq |= LP_ENABLE_IRQ; - break; - case 2: - /* classic irq based transfer and advanced - * modes are in conflict - */ - sc->sc_irq &= (~LP_ENABLE_IRQ); - sc->sc_irq |= LP_ENABLE_EXT; - break; - case 3: - sc->sc_irq &= (~LP_ENABLE_EXT); - break; - default: - break; - } - if (old_sc_irq != sc->sc_irq ) - log(LOG_NOTICE, LPT_NAME "%d: switched to %s %s mode\n", + log(LOG_NOTICE, LPT_NAME "%d: switched to %s mode\n", unit, (sc->sc_irq & LP_ENABLE_IRQ)? - "interrupt-driven":"polled", - (sc->sc_irq & LP_ENABLE_EXT)? - "extended":"standard"); + "interrupt-driven":"polled"); } else /* polled port */ error = EOPNOTSUPP; break; diff --git a/sys/dev/ppbus/nlpt.h b/sys/dev/ppbus/nlpt.h index 31292b9f7ed7b..b0b3df6457a78 100644 --- a/sys/dev/ppbus/nlpt.h +++ b/sys/dev/ppbus/nlpt.h @@ -27,7 +27,7 @@ * @(#)lptreg.h 1.1 (Berkeley) 12/19/90 * Id: lptreg.h,v 1.6 1997/02/22 09:36:52 peter Exp * - * $Id: nlpt.h,v 1.2 1997/08/16 14:05:32 msmith Exp $ + * $Id: nlpt.h,v 1.1 1997/08/14 13:57:40 msmith Exp $ */ #ifndef __NLPT_H #define __NLPT_H @@ -61,15 +61,13 @@ struct lpt_data { #define LP_AUTOLF 0x40 /* tell printer to do an automatic lf */ #define LP_BYPASS 0x80 /* bypass printer ready checks */ struct buf *sc_inbuf; - struct buf *sc_statbuf; short sc_xfercnt ; char sc_primed; char *sc_cp ; - u_short sc_irq ; /* IRQ status of port */ + u_char sc_irq ; /* IRQ status of port */ #define LP_HAS_IRQ 0x01 /* we have an irq available */ #define LP_USE_IRQ 0x02 /* we are using our irq */ #define LP_ENABLE_IRQ 0x04 /* enable IRQ on open */ -#define LP_ENABLE_EXT 0x10 /* we shall use advanced mode when possible */ u_char sc_backoff ; /* time to call lptout() again */ #ifdef DEVFS diff --git a/sys/dev/ppbus/ppb_1284.c b/sys/dev/ppbus/ppb_1284.c index 5da5fa3eac3ad..56524d1052e7b 100644 --- a/sys/dev/ppbus/ppb_1284.c +++ b/sys/dev/ppbus/ppb_1284.c @@ -23,15 +23,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppb_1284.c,v 1.7 1999/01/10 12:04:54 nsouch Exp $ + * $Id: ppb_1284.c,v 1.5 1998/09/13 18:26:26 nsouch Exp $ * */ -/* - * General purpose routines for the IEEE1284-1994 Standard - */ - -#include "opt_ppb_1284.h" +#include "opt_debug_1284.h" #include <sys/param.h> #include <sys/systm.h> @@ -46,414 +42,24 @@ * * Wait for the peripherial up to 40ms */ -static int -do_1284_wait(struct ppb_device *dev, char mask, char status) -{ - return (ppb_poll_device(dev, 4, mask, status, PPB_NOINTR | PPB_POLL)); -} - -static int -do_peripheral_wait(struct ppb_device *dev, char mask, char status) -{ - return (ppb_poll_device(dev, 100, mask, status, PPB_NOINTR | PPB_POLL)); -} - -#define nibble2char(s) (((s & ~nACK) >> 3) | (~s & nBUSY) >> 4) - -/* - * ppb_1284_reset_error() - * - * Unconditionaly reset the error field - */ -static int -ppb_1284_reset_error(struct ppb_device *dev, int state) -{ - dev->ppb->error = PPB_NO_ERROR; - dev->ppb->state = state; - - return (0); -} - -/* - * ppb_1284_get_state() - * - * Get IEEE1284 state - */ -static int -ppb_1284_get_state(struct ppb_device *dev) -{ - return (dev->ppb->state); -} - -/* - * ppb_1284_set_state() - * - * Change IEEE1284 state if no error occured - */ -static int -ppb_1284_set_state(struct ppb_device *dev, int state) -{ - /* call ppb_1284_reset_error() if you absolutly want to change - * the state from PPB_ERROR to another */ - if ((dev->ppb->state != PPB_ERROR) && - (dev->ppb->error == PPB_NO_ERROR)) { - dev->ppb->state = state; - dev->ppb->error = PPB_NO_ERROR; - } - - return (0); -} - -static int -ppb_1284_set_error(struct ppb_device *dev, int error, int event) -{ - /* do not accumulate errors */ - if ((dev->ppb->error == PPB_NO_ERROR) && - (dev->ppb->state != PPB_ERROR)) { - dev->ppb->error = error; - dev->ppb->state = PPB_ERROR; - } - -#ifdef DEBUG_1284 - printf("ppb1284: error=%d status=0x%x event=%d\n", error, - ppb_rstr(dev) & 0xff, event); -#endif - - return (0); -} - -/* - * ppb_request_mode() - * - * Converts mode+options into ext. value - */ -static int -ppb_request_mode(int mode, int options) -{ - int request_mode = 0; - - if (options & PPB_EXTENSIBILITY_LINK) { - request_mode = EXT_LINK_1284_NORMAL; - - } else { - switch (mode) { - case PPB_NIBBLE: - request_mode = (options & PPB_REQUEST_ID) ? - NIBBLE_1284_REQUEST_ID : - NIBBLE_1284_NORMAL; - break; - case PPB_PS2: - request_mode = (options & PPB_REQUEST_ID) ? - BYTE_1284_REQUEST_ID : - BYTE_1284_NORMAL; - break; - case PPB_ECP: - if (options & PPB_USE_RLE) - request_mode = (options & PPB_REQUEST_ID) ? - ECP_1284_RLE_REQUEST_ID : - ECP_1284_RLE; - else - request_mode = (options & PPB_REQUEST_ID) ? - ECP_1284_REQUEST_ID : - ECP_1284_NORMAL; - break; - case PPB_EPP: - request_mode = EPP_1284_NORMAL; - break; - default: - panic("%s: unsupported mode %d\n", __FUNCTION__, mode); - } - } - - return (request_mode); -} - -/* - * ppb_peripheral_negociate() - * - * Negociate the peripheral side - */ -int -ppb_peripheral_negociate(struct ppb_device *dev, int mode, int options) -{ - int spin, request_mode, error = 0; - char r; - - ppb_set_mode(dev, PPB_COMPATIBLE); - ppb_1284_set_state(dev, PPB_PERIPHERAL_NEGOCIATION); - - /* compute ext. value */ - request_mode = ppb_request_mode(mode, options); - - /* wait host */ - spin = 10; - while (spin-- && (ppb_rstr(dev) & nBUSY)) - DELAY(1); - - /* check termination */ - if (!(ppb_rstr(dev) & SELECT) || !spin) { - error = ENODEV; - goto error; - } - - /* Event 4 - read ext. value */ - r = ppb_rdtr(dev); - - /* nibble mode is not supported */ - if ((r == (char)request_mode) || - (r == NIBBLE_1284_NORMAL)) { - - /* Event 5 - restore direction bit, no data avail */ - ppb_wctr(dev, (STROBE | nINIT) & ~(SELECTIN)); - DELAY(1); - - /* Event 6 */ - ppb_wctr(dev, (nINIT) & ~(SELECTIN | STROBE)); - - if (r == NIBBLE_1284_NORMAL) { -#ifdef DEBUG_1284 - printf("R"); -#endif - ppb_1284_set_error(dev, PPB_MODE_UNSUPPORTED, 4); - error = EINVAL; - goto error; - } else { - ppb_1284_set_state(dev, PPB_PERIPHERAL_IDLE); - switch (r) { - case BYTE_1284_NORMAL: - ppb_set_mode(dev, PPB_BYTE); - break; - default: - break; - } -#ifdef DEBUG_1284 - printf("A"); -#endif - /* negociation succeeds */ - } - } else { - /* Event 5 - mode not supported */ - ppb_wctr(dev, SELECTIN); - DELAY(1); - - /* Event 6 */ - ppb_wctr(dev, (SELECTIN) & ~(STROBE | nINIT)); - ppb_1284_set_error(dev, PPB_MODE_UNSUPPORTED, 4); - -#ifdef DEBUG_1284 - printf("r"); -#endif - error = EINVAL; - goto error; - } - - return (0); - -error: - ppb_peripheral_terminate(dev, PPB_WAIT); - return (error); -} - -/* - * ppb_peripheral_terminate() - * - * Terminate peripheral transfer side - * - * Always return 0 in compatible mode - */ -int -ppb_peripheral_terminate(struct ppb_device *dev, int how) -{ - int error = 0; - -#ifdef DEBUG_1284 - printf("t"); -#endif - - ppb_1284_set_state(dev, PPB_PERIPHERAL_TERMINATION); - - /* Event 22 - wait up to host response time (1s) */ - if ((error = do_peripheral_wait(dev, SELECT | nBUSY, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 22); - goto error; - } - - /* Event 24 */ - ppb_wctr(dev, (nINIT | STROBE) & ~(AUTOFEED | SELECTIN)); - - /* Event 25 - wait up to host response time (1s) */ - if ((error = do_peripheral_wait(dev, nBUSY, nBUSY))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 25); - goto error; - } - - /* Event 26 */ - ppb_wctr(dev, (SELECTIN | nINIT | STROBE) & ~(AUTOFEED)); - DELAY(1); - /* Event 27 */ - ppb_wctr(dev, (SELECTIN | nINIT) & ~(STROBE | AUTOFEED)); - - /* Event 28 - wait up to host response time (1s) */ - if ((error = do_peripheral_wait(dev, nBUSY, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 28); - goto error; - } - -error: - ppb_set_mode(dev, PPB_COMPATIBLE); - ppb_1284_set_state(dev, PPB_FORWARD_IDLE); - - return (0); -} - -/* - * byte_peripheral_outbyte() - * - * Write 1 byte in BYTE mode - */ -static int -byte_peripheral_outbyte(struct ppb_device *dev, char *buffer, int last) -{ - int error = 0; - - /* Event 7 */ - if ((error = do_1284_wait(dev, nBUSY, nBUSY))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 7); - goto error; - } - - /* check termination */ - if (!(ppb_rstr(dev) & SELECT)) { - ppb_peripheral_terminate(dev, PPB_WAIT); - goto error; - } - - /* Event 15 - put byte on data lines */ -#ifdef DEBUG_1284 - printf("B"); -#endif - ppb_wdtr(dev, *buffer); - - /* Event 9 */ - ppb_wctr(dev, (AUTOFEED | STROBE) & ~(nINIT | SELECTIN)); - - /* Event 10 - wait data read */ - if ((error = do_peripheral_wait(dev, nBUSY, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 16); - goto error; - } - - /* Event 11 */ - if (!last) { - ppb_wctr(dev, (AUTOFEED) & ~(nINIT | STROBE | SELECTIN)); - } else { - ppb_wctr(dev, (nINIT) & ~(STROBE | SELECTIN | AUTOFEED)); - } - -#if 0 - /* Event 16 - wait strobe */ - if ((error = do_peripheral_wait(dev, nACK | nBUSY, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 16); - goto error; - } -#endif - - /* check termination */ - if (!(ppb_rstr(dev) & SELECT)) { - ppb_peripheral_terminate(dev, PPB_WAIT); - goto error; - } - -error: - return (error); -} - -/* - * byte_peripheral_write() - * - * Write n bytes in BYTE mode - */ int -byte_peripheral_write(struct ppb_device *dev, char *buffer, int len, int *sent) +do_1284_wait(struct ppb_device *dev, char mask, char status) { - int error = 0, i; + int i; char r; - ppb_1284_set_state(dev, PPB_PERIPHERAL_TRANSFER); - - /* wait forever, the remote host is master and should initiate - * termination - */ - for (i=0; i<len; i++) { - /* force remote nFAULT low to release the remote waiting - * process, if any - */ - r = ppb_rctr(dev); - ppb_wctr(dev, r & ~nINIT); - -#ifdef DEBUG_1284 - printf("y"); -#endif - /* Event 7 */ - error = ppb_poll_device(dev, PPB_FOREVER, nBUSY, nBUSY, - PPB_INTR); - - if (error && error != EWOULDBLOCK) - goto error; - -#ifdef DEBUG_1284 - printf("b"); -#endif - if ((error = byte_peripheral_outbyte(dev, buffer+i, (i == len-1)))) - goto error; + /* try up to 5ms */ + for (i = 0; i < 20; i++) { + r = ppb_rstr(dev); + DELAY(25); + if ((r & mask) == status) + return (0); } -error: - if (!error) - ppb_1284_set_state(dev, PPB_PERIPHERAL_IDLE); - *sent = i; - return (error); + return (ppb_poll_device(dev, 4, mask, status, PPB_NOINTR)); } -/* - * byte_1284_inbyte() - * - * Read 1 byte in BYTE mode - */ -int -byte_1284_inbyte(struct ppb_device *dev, char *buffer) -{ - int error = 0; - - /* Event 7 - ready to take data (nAUTO low) */ - ppb_wctr(dev, (PCD | nINIT | AUTOFEED) & ~(STROBE | SELECTIN)); - - /* Event 9 - peripheral set nAck low */ - if ((error = do_1284_wait(dev, nACK, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 9); - goto error; - } - - /* read the byte */ - *buffer = ppb_rdtr(dev); - - /* Event 10 - data received, can't accept more */ - ppb_wctr(dev, (nINIT) & ~(AUTOFEED | STROBE | SELECTIN)); - - /* Event 11 - peripheral ack */ - if ((error = do_1284_wait(dev, nACK, nACK))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 11); - goto error; - } - - /* Event 16 - strobe */ - ppb_wctr(dev, (nINIT | STROBE) & ~(AUTOFEED | SELECTIN)); - DELAY(3); - ppb_wctr(dev, (nINIT) & ~(AUTOFEED | STROBE | SELECTIN)); - -error: - return (error); -} +#define nibble2char(s) (((s & ~nACK) >> 3) | (~s & nBUSY) >> 4) /* * nibble_1284_inbyte() @@ -467,379 +73,126 @@ nibble_1284_inbyte(struct ppb_device *dev, char *buffer) int i, error; for (i = 0; i < 2; i++) { + /* ready to take data (nAUTO low) */ + ppb_wctr(dev, AUTOFEED & ~(STROBE | SELECTIN)); - /* Event 7 - ready to take data (nAUTO low) */ - ppb_wctr(dev, (nINIT | AUTOFEED) & ~(STROBE | SELECTIN)); - - /* Event 8 - peripheral writes the first nibble */ - - /* Event 9 - peripheral set nAck low */ - if ((error = do_1284_wait(dev, nACK, 0))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 9); - goto error; - } + if ((error = do_1284_wait(dev, nACK, 0))) + return (error); /* read nibble */ nibble[i] = ppb_rstr(dev); - /* Event 10 - ack, nibble received */ - ppb_wctr(dev, nINIT & ~(AUTOFEED | STROBE | SELECTIN)); + /* ack, not ready for another nibble */ + ppb_wctr(dev, 0 & ~(AUTOFEED | STROBE | SELECTIN)); - /* Event 11 - wait ack from peripherial */ - if ((error = do_1284_wait(dev, nACK, nACK))) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 11); - goto error; - } + /* wait ack from peripherial */ + if ((error = do_1284_wait(dev, nACK, nACK))) + return (error); } *buffer = ((nibble2char(nibble[1]) << 4) & 0xf0) | (nibble2char(nibble[0]) & 0x0f); -error: - return (error); -} - -/* - * spp_1284_read() - * - * Read in IEEE1284 NIBBLE/BYTE mode - */ -int -spp_1284_read(struct ppb_device *dev, int mode, char *buffer, int max, int *read) -{ - int error = 0, len = 0; - int terminate_after_transfer = 1; - int state; - - *read = len = 0; - - state = ppb_1284_get_state(dev); - - switch (state) { - case PPB_FORWARD_IDLE: - if ((error = ppb_1284_negociate(dev, mode, 0))) - return (error); - break; - - case PPB_REVERSE_IDLE: - terminate_after_transfer = 0; - break; - - default: - ppb_1284_terminate(dev); - if ((error = ppb_1284_negociate(dev, mode, 0))) - return (error); - break; - } - - while ((len < max) && !(ppb_rstr(dev) & (nFAULT))) { - - ppb_1284_set_state(dev, PPB_REVERSE_TRANSFER); - -#ifdef DEBUG_1284 - printf("B"); -#endif - - switch (mode) { - case PPB_NIBBLE: - /* read a byte, error means no more data */ - if (nibble_1284_inbyte(dev, buffer+len)) - goto end_while; - break; - case PPB_BYTE: - if (byte_1284_inbyte(dev, buffer+len)) - goto end_while; - break; - default: - error = EINVAL; - goto end_while; - } - len ++; - } -end_while: - - if (!error) - ppb_1284_set_state(dev, PPB_REVERSE_IDLE); - - *read = len; - - if (terminate_after_transfer || error) - ppb_1284_terminate(dev); - - return (error); + return (0); } /* - * ppb_1284_read_id() - * + * nibble_1284_sync() */ -int -ppb_1284_read_id(struct ppb_device *dev, int mode, char *buffer, - int max, int *read) +void +nibble_1284_sync(struct ppb_device *dev) { - int error = 0; + char ctr; - /* fill the buffer with 0s */ - bzero(buffer, max); + ctr = ppb_rctr(dev); - switch (mode) { - case PPB_NIBBLE: - case PPB_ECP: - if ((error = ppb_1284_negociate(dev, PPB_NIBBLE, PPB_REQUEST_ID))) - return (error); - error = spp_1284_read(dev, PPB_NIBBLE, buffer, max, read); - break; - case PPB_BYTE: - if ((error = ppb_1284_negociate(dev, PPB_BYTE, PPB_REQUEST_ID))) - return (error); - error = spp_1284_read(dev, PPB_BYTE, buffer, max, read); - break; - default: - panic("%s: unsupported mode %d\n", __FUNCTION__, mode); - } + ppb_wctr(dev, (ctr & ~AUTOFEED) | SELECTIN); + if (do_1284_wait(dev, nACK, 0)) + return; - ppb_1284_terminate(dev); - return (error); -} + ppb_wctr(dev, ctr | AUTOFEED); + do_1284_wait(dev, nACK, nACK); -/* - * ppb_1284_read() - * - * IEEE1284 read - */ -int -ppb_1284_read(struct ppb_device *dev, int mode, char *buffer, - int max, int *read) -{ - int error = 0; + ppb_wctr(dev, (ctr & ~AUTOFEED) | SELECTIN); - switch (mode) { - case PPB_NIBBLE: - case PPB_BYTE: - error = spp_1284_read(dev, mode, buffer, max, read); - break; - default: - return (EINVAL); - } - - return (error); + return; } /* * ppb_1284_negociate() * - * IEEE1284 negociation phase - * * Normal nibble mode or request device id mode (see ppb_1284.h) - * - * After negociation, nFAULT is low if data is available */ int -ppb_1284_negociate(struct ppb_device *dev, int mode, int options) +ppb_1284_negociate(struct ppb_device *dev, int mode) { int error; - int request_mode; + int phase = 0; -#ifdef DEBUG_1284 - printf("n"); -#endif - - if (ppb_1284_get_state(dev) >= PPB_PERIPHERAL_NEGOCIATION) - ppb_peripheral_terminate(dev, PPB_WAIT); - - if (ppb_1284_get_state(dev) != PPB_FORWARD_IDLE) - ppb_1284_terminate(dev); - -#ifdef DEBUG_1284 - printf("%d", mode); -#endif - - /* ensure the host is in compatible mode */ - ppb_set_mode(dev, PPB_COMPATIBLE); - - /* reset error to catch the actual negociation error */ - ppb_1284_reset_error(dev, PPB_FORWARD_IDLE); - - /* calculate ext. value */ - request_mode = ppb_request_mode(mode, options); - - /* default state */ ppb_wctr(dev, (nINIT | SELECTIN) & ~(STROBE | AUTOFEED)); DELAY(1); - /* enter negociation phase */ - ppb_1284_set_state(dev, PPB_NEGOCIATION); - - /* Event 0 - put the exten. value on the data lines */ - ppb_wdtr(dev, request_mode); - -#ifdef PERIPH_1284 - /* request remote host attention */ - ppb_wctr(dev, (nINIT | STROBE) & ~(AUTOFEED | SELECTIN)); - DELAY(1); - ppb_wctr(dev, (nINIT) & ~(STROBE | AUTOFEED | SELECTIN)); -#else + ppb_wdtr(dev, mode); DELAY(1); -#endif /* !PERIPH_1284 */ - - /* Event 1 - enter IEEE1284 mode */ ppb_wctr(dev, (nINIT | AUTOFEED) & ~(STROBE | SELECTIN)); -#ifdef PERIPH_1284 - /* ignore the PError line, wait a bit more, remote host's - * interrupts don't respond fast enough */ - if (ppb_poll_device(dev, 40, nACK | SELECT | nFAULT, - SELECT | nFAULT, PPB_NOINTR | PPB_POLL)) { - ppb_1284_set_error(dev, PPB_NOT_IEEE1284, 2); - error = ENODEV; - goto error; - } -#else - /* Event 2 - trying IEEE1284 dialog */ - if (do_1284_wait(dev, nACK | PERROR | SELECT | nFAULT, - PERROR | SELECT | nFAULT)) { - ppb_1284_set_error(dev, PPB_NOT_IEEE1284, 2); - error = ENODEV; + if ((error = do_1284_wait(dev, nACK | PERROR | SELECT | nFAULT, + PERROR | SELECT | nFAULT))) goto error; - } -#endif /* !PERIPH_1284 */ - /* Event 3 - latch the ext. value to the peripheral */ + phase = 1; + ppb_wctr(dev, (nINIT | STROBE | AUTOFEED) & ~SELECTIN); - DELAY(1); + DELAY(5); - /* Event 4 - IEEE1284 device recognized */ ppb_wctr(dev, nINIT & ~(SELECTIN | AUTOFEED | STROBE)); - /* Event 6 - waiting for status lines */ - if (do_1284_wait(dev, nACK, nACK)) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 6); - error = EBUSY; +#if 0 /* not respected by most devices */ + if ((error = do_1284_wait(dev, nACK, nACK))) goto error; - } - - /* Event 7 - quering result consider nACK not to misunderstand - * a remote computer terminate sequence */ - if (options & PPB_EXTENSIBILITY_LINK) { - - /* XXX not fully supported yet */ - ppb_1284_terminate(dev); - return (0); - } - if (request_mode == NIBBLE_1284_NORMAL) { - if (do_1284_wait(dev, nACK | SELECT, nACK)) { - ppb_1284_set_error(dev, PPB_MODE_UNSUPPORTED, 7); - error = ENODEV; - goto error; - } - } else { - if (do_1284_wait(dev, nACK | SELECT, SELECT | nACK)) { - ppb_1284_set_error(dev, PPB_MODE_UNSUPPORTED, 7); - error = ENODEV; + if (mode == 0) + if ((error = do_1284_wait(dev, SELECT, 0))) goto error; - } - } - - switch (mode) { - case PPB_NIBBLE: - case PPB_PS2: - /* enter reverse idle phase */ - ppb_1284_set_state(dev, PPB_REVERSE_IDLE); - break; - case PPB_ECP: - /* negociation ok, now setup the communication */ - ppb_1284_set_state(dev, PPB_SETUP); - ppb_wctr(dev, (nINIT | AUTOFEED) & ~(SELECTIN | STROBE)); - -#ifdef PERIPH_1284 - /* ignore PError line */ - if (do_1284_wait(dev, nACK | SELECT | nBUSY, - nACK | SELECT | nBUSY)) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 30); - error = ENODEV; - goto error; - } -#else - if (do_1284_wait(dev, nACK | SELECT | PERROR | nBUSY, - nACK | SELECT | PERROR | nBUSY)) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 30); - error = ENODEV; + else + if ((error = do_1284_wait(dev, SELECT, SELECT))) goto error; - } -#endif /* !PERIPH_1284 */ - - /* ok, the host enters the ForwardIdle state */ - ppb_1284_set_state(dev, PPB_ECP_FORWARD_IDLE); - break; - case PPB_EPP: - ppb_1284_set_state(dev, PPB_EPP_IDLE); - break; - - default: - panic("%s: unknown mode (%d)!", __FUNCTION__, mode); - } - ppb_set_mode(dev, mode); +#endif return (0); error: - ppb_1284_terminate(dev); + if (bootverbose) + printf("%s: status=0x%x %d\n", __FUNCTION__, ppb_rstr(dev), phase); return (error); } -/* - * ppb_1284_terminate() - * - * IEEE1284 termination phase, return code should ignored since the host - * is _always_ in compatible mode after ppb_1284_terminate() - */ int -ppb_1284_terminate(struct ppb_device *dev) +ppb_1284_terminate(struct ppb_device *dev, int how) { + int error; -#ifdef DEBUG_1284 - printf("T"); -#endif - - /* do not reset error here to keep the error that - * may occured before the ppb_1284_terminate() call */ - ppb_1284_set_state(dev, PPB_TERMINATION); + switch (how) { + case VALID_STATE: -#ifdef PERIPH_1284 - /* request remote host attention */ - ppb_wctr(dev, (nINIT | STROBE | SELECTIN) & ~(AUTOFEED)); - DELAY(1); -#endif /* PERIPH_1284 */ + ppb_wctr(dev, SELECTIN & ~(STROBE | AUTOFEED)); - /* Event 22 - set nSelectin low and nAutoFeed high */ - ppb_wctr(dev, (nINIT | SELECTIN) & ~(STROBE | AUTOFEED)); + if ((error = do_1284_wait(dev, nACK | nBUSY | nFAULT, nFAULT))) + return (error); - /* Event 24 - waiting for peripheral, Xflag ignored */ - if (do_1284_wait(dev, nACK | nBUSY | nFAULT, nFAULT)) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 24); - goto error; - } + ppb_wctr(dev, (SELECTIN | AUTOFEED) & ~STROBE); - /* Event 25 - set nAutoFd low */ - ppb_wctr(dev, (nINIT | SELECTIN | AUTOFEED) & ~STROBE); + if ((error = do_1284_wait(dev, nACK, nACK))) + return (error); - /* Event 26 - compatible mode status is set */ + ppb_wctr(dev, SELECTIN & ~(STROBE | AUTOFEED)); + break; - /* Event 27 - peripheral set nAck high */ - if (do_1284_wait(dev, nACK, nACK)) { - ppb_1284_set_error(dev, PPB_TIMEOUT, 27); + default: + return (EINVAL); } - /* Event 28 - end termination, return to idle phase */ - ppb_wctr(dev, (nINIT | SELECTIN) & ~(STROBE | AUTOFEED)); - -error: - /* return to compatible mode */ - ppb_set_mode(dev, PPB_COMPATIBLE); - ppb_1284_set_state(dev, PPB_FORWARD_IDLE); - return (0); } diff --git a/sys/dev/ppbus/ppb_1284.h b/sys/dev/ppbus/ppb_1284.h index ea009b7d381dd..1cc98d4614a52 100644 --- a/sys/dev/ppbus/ppb_1284.h +++ b/sys/dev/ppbus/ppb_1284.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppb_1284.h,v 1.3 1998/09/13 18:26:26 nsouch Exp $ + * $Id: ppb_1284.h,v 1.2 1998/08/03 19:14:31 msmith Exp $ * */ #ifndef __1284_H @@ -66,59 +66,20 @@ #define Intr nACK /* request mode values */ -#define NIBBLE_1284_NORMAL 0x0 -#define NIBBLE_1284_REQUEST_ID 0x4 -#define BYTE_1284_NORMAL 0x1 -#define BYTE_1284_REQUEST_ID 0x5 -#define ECP_1284_NORMAL 0x10 -#define ECP_1284_REQUEST_ID 0x14 -#define ECP_1284_RLE 0x30 -#define ECP_1284_RLE_REQUEST_ID 0x34 -#define EPP_1284_NORMAL 0x40 -#define EXT_LINK_1284_NORMAL 0x80 - -/* ieee1284 mode options */ -#define PPB_REQUEST_ID 0x1 -#define PPB_USE_RLE 0x2 -#define PPB_EXTENSIBILITY_LINK 0x4 - -/* ieee1284 errors */ -#define PPB_NO_ERROR 0 -#define PPB_MODE_UNSUPPORTED 1 /* mode not supported by peripheral */ -#define PPB_NOT_IEEE1284 2 /* not an IEEE1284 compliant periph. */ -#define PPB_TIMEOUT 3 /* timeout */ -#define PPB_INVALID_MODE 4 /* current mode is incorrect */ - -/* ieee1284 host side states */ -#define PPB_ERROR 0 -#define PPB_FORWARD_IDLE 1 -#define PPB_NEGOCIATION 2 -#define PPB_SETUP 3 -#define PPB_ECP_FORWARD_IDLE 4 -#define PPB_FWD_TO_REVERSE 5 -#define PPB_REVERSE_IDLE 6 -#define PPB_REVERSE_TRANSFER 7 -#define PPB_REVERSE_TO_FWD 8 -#define PPB_EPP_IDLE 9 -#define PPB_TERMINATION 10 - -/* peripheral side states */ -#define PPB_PERIPHERAL_NEGOCIATION 11 -#define PPB_PERIPHERAL_IDLE 12 -#define PPB_PERIPHERAL_TRANSFER 13 -#define PPB_PERIPHERAL_TERMINATION 14 +#define NIBBLE_1284_NORMAL 0 +#define NIBBLE_1284_REQUEST_ID 4 -extern int nibble_1284_inbyte(struct ppb_device *, char *); -extern int byte_1284_inbyte(struct ppb_device *, char *); -extern int spp_1284_read(struct ppb_device *, int, char *, int, int *); +/* how to terminate */ +#define VALID_STATE 0 +#define IMMEDIATE 1 + +extern int do_1284_wait(struct ppb_device *, char, char); -extern int ppb_1284_negociate(struct ppb_device *, int, int); -extern int ppb_1284_terminate(struct ppb_device *); -extern int ppb_1284_read_id(struct ppb_device *, int, char *, int, int *); -extern int ppb_1284_read(struct ppb_device *, int, char *, int, int *); +extern int nibble_1284_inbyte(struct ppb_device *, char *); +extern void nibble_1284_sync(struct ppb_device *); +extern int nibble_1284_mode(struct ppb_device *, int); -extern int ppb_peripheral_terminate(struct ppb_device *, int); -extern int ppb_peripheral_negociate(struct ppb_device *, int, int); -extern int byte_peripheral_write(struct ppb_device *, char *, int, int *); +extern int ppb_1284_negociate(struct ppb_device *, int); +extern int ppb_1284_terminate(struct ppb_device *, int how); #endif diff --git a/sys/dev/ppbus/ppb_base.c b/sys/dev/ppbus/ppb_base.c index 83fc26ef02948..7555b24f752e5 100644 --- a/sys/dev/ppbus/ppb_base.c +++ b/sys/dev/ppbus/ppb_base.c @@ -23,13 +23,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppb_base.c,v 1.5 1998/09/13 18:26:26 nsouch Exp $ + * $Id: ppb_base.c,v 1.4 1998/08/03 19:14:31 msmith Exp $ * */ #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> -#include <machine/clock.h> #include <dev/ppbus/ppbconf.h> @@ -71,39 +70,28 @@ int ppb_poll_device(struct ppb_device *dev, int max, char mask, char status, int how) { - int i, j, error; - char r; - - /* try at least up to 10ms */ - for (j = 0; j < ((how & PPB_POLL) ? max : 1); j++) { - for (i = 0; i < 10000; i++) { - r = ppb_rstr(dev); - DELAY(1); - if ((r & mask) == status) - return (0); - } - } + int i, error; - if (!(how & PPB_POLL)) { - for (i = 0; max == PPB_FOREVER || i < max-1; i++) { + for (i = 0; i < max; i++) { if ((ppb_rstr(dev) & mask) == status) return (0); switch (how) { case PPB_NOINTR: /* wait 10 ms */ - tsleep((caddr_t)dev, PPBPRI, "ppbpoll", hz/100); + if ((error = tsleep((caddr_t)dev, PPBPRI, + "ppbpoll", hz/100))) + return (error); break; case PPB_INTR: default: /* wait 10 ms */ if ((error = tsleep((caddr_t)dev, PPBPRI | PCATCH, - "ppbpoll", hz/100)) != EWOULDBLOCK) + "ppbpoll", hz/100))) return (error); break; } - } } return (EWOULDBLOCK); @@ -120,31 +108,16 @@ ppb_set_mode(struct ppb_device *dev, int mode) struct ppb_data *ppb = dev->ppb; int old_mode = ppb_get_mode(dev); - if ((*ppb->ppb_link->adapter->setmode)( - ppb->ppb_link->adapter_unit, mode)) + if ((*ppb->ppb_link->adapter->setmode)(dev->id_unit, mode)) return (-1); /* XXX yet device mode = ppbus mode = chipset mode */ - dev->mode = ppb->mode = (mode & PPB_MASK); + dev->mode = ppb->mode = mode; return (old_mode); } /* - * ppb_write() - * - * Write charaters to the port - */ -int -ppb_write(struct ppb_device *dev, char *buf, int len, int how) -{ - struct ppb_data *ppb = dev->ppb; - - return (ppb->ppb_link->adapter->write(ppb->ppb_link->adapter_unit, - buf, len, how)); -} - -/* * ppb_reset_epp_timeout() * * Reset the EPP timeout bit in the status register @@ -157,7 +130,7 @@ ppb_reset_epp_timeout(struct ppb_device *dev) if (ppb->ppb_owner != dev) return (EACCES); - (*ppb->ppb_link->adapter->reset_epp_timeout)(ppb->ppb_link->adapter_unit); + (*ppb->ppb_link->adapter->reset_epp_timeout)(dev->id_unit); return (0); } @@ -175,7 +148,7 @@ ppb_ecp_sync(struct ppb_device *dev) if (ppb->ppb_owner != dev) return (EACCES); - (*ppb->ppb_link->adapter->ecp_sync)(ppb->ppb_link->adapter_unit); + (*ppb->ppb_link->adapter->ecp_sync)(dev->id_unit); return (0); } diff --git a/sys/dev/ppbus/ppb_msq.c b/sys/dev/ppbus/ppb_msq.c index addcf041ab487..7e631e4945216 100644 --- a/sys/dev/ppbus/ppb_msq.c +++ b/sys/dev/ppbus/ppb_msq.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppb_msq.c,v 1.3 1998/09/20 14:41:54 nsouch Exp $ + * $Id: ppb_msq.c,v 1.2 1998/09/13 18:26:26 nsouch Exp $ * */ #include <machine/stdarg.h> @@ -272,19 +272,9 @@ ppb_MS_microseq(struct ppb_device *dev, struct ppb_microseq *msq, int *ret) xfer = mode2xfer(dev, mi->opcode); /* figure out if we should use ieee1284 code */ - if (!xfer->loop) { - if (mi->opcode == MS_OP_PUT) { - if ((error = ppb->ppb_link->adapter->write( - ppb->ppb_link->adapter_unit, - (char *)mi->arg[0].p, - mi->arg[1].i, 0))) - goto error; - - INCR_PC; - goto next; - } else - panic("%s: IEEE1284 read not supported", __FUNCTION__); - } + if (!xfer->loop) + panic("%s: IEEE1284 code not supported", + __FUNCTION__); /* XXX should use ppb_MS_init_msq() */ initxfer[0].arg[0].p = mi->arg[0].p; @@ -319,12 +309,10 @@ ppb_MS_microseq(struct ppb_device *dev, struct ppb_microseq *msq, int *ret) * is unknown here */ if ((error = ppb->ppb_link->adapter->exec_microseq( - ppb->ppb_link->adapter_unit, - &mi))) + dev->id_unit, &mi))) goto error; break; } - next: } error: return (error); diff --git a/sys/dev/ppbus/ppb_msq.h b/sys/dev/ppbus/ppb_msq.h index 4bba2997ac257..cdc815408d7fc 100644 --- a/sys/dev/ppbus/ppb_msq.h +++ b/sys/dev/ppbus/ppb_msq.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppb_msq.h,v 1.2 1998/09/13 18:26:26 nsouch Exp $ + * $Id: ppb_msq.h,v 1.1.2.7 1998/06/20 19:03:47 son Exp $ * */ #ifndef __PPB_MSQ_H @@ -34,7 +34,7 @@ */ /* microsequence parameter descriptor */ -#define MS_INS_MASK 0x00ff /* mask to retrieve the instruction position < 256 XXX */ +#define MS_INS_MASK 0x00ff /* mask to retrieve the instruction position */ #define MS_ARG_MASK 0x0f00 /* mask to retrieve the argument number */ #define MS_TYP_MASK 0xf000 /* mask to retrieve the type of the param */ diff --git a/sys/dev/ppbus/ppbconf.c b/sys/dev/ppbus/ppbconf.c index 01ac663a22528..86ebe024e6066 100644 --- a/sys/dev/ppbus/ppbconf.c +++ b/sys/dev/ppbus/ppbconf.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 1997, 1998, 1999 Nicolas Souchu + * Copyright (c) 1997, 1998 Nicolas Souchu * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,12 +23,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppbconf.c,v 1.12 1999/01/11 21:22:41 nsouch Exp $ + * $Id: ppbconf.c,v 1.7 1998/09/13 18:26:26 nsouch Exp $ * */ #include <sys/param.h> #include <sys/systm.h> -#include <sys/linker_set.h> +#include <sys/kernel.h> #include <sys/malloc.h> #include <vm/vm.h> @@ -37,8 +37,6 @@ #include <dev/ppbus/ppbconf.h> #include <dev/ppbus/ppb_1284.h> -#include "opt_ppb_1284.h" - LIST_HEAD(, ppb_data) ppbdata; /* list of existing ppbus */ /* @@ -82,30 +80,15 @@ ppb_alloc_bus(void) return(ppb); } -#define PPB_PNP_PRINTER 0 -#define PPB_PNP_MODEM 1 -#define PPB_PNP_NET 2 -#define PPB_PNP_HDC 3 -#define PPB_PNP_PCMCIA 4 -#define PPB_PNP_MEDIA 5 -#define PPB_PNP_FDC 6 -#define PPB_PNP_PORTS 7 -#define PPB_PNP_SCANNER 8 -#define PPB_PNP_DIGICAM 9 - -#ifndef DONTPROBE_1284 - static char *pnp_tokens[] = { "PRINTER", "MODEM", "NET", "HDC", "PCMCIA", "MEDIA", "FDC", "PORTS", "SCANNER", "DIGICAM", "", NULL }; -#if 0 static char *pnp_classes[] = { "printer", "modem", "network device", "hard disk", "PCMCIA", "multimedia device", "floppy disk", "ports", "scanner", "digital camera", "unknown device", NULL }; -#endif /* * search_token() @@ -151,40 +134,75 @@ search_token(char *str, int slen, char *token) * Returns the class id. of the peripherial, -1 otherwise */ static int -ppb_pnp_detect(struct ppb_data *ppb, struct ppb_device *pnpdev) +ppb_pnp_detect(struct ppb_data *ppb) { - char *token, *class = 0; + char *token, *q, *class = 0; int i, len, error; int class_id = -1; char str[PPB_PnP_STRING_SIZE+1]; + struct ppb_device pnpdev; /* temporary device to perform I/O */ - printf("Probing for PnP devices on ppbus%d:\n", + /* initialize the pnpdev structure for future use */ + bzero(&pnpdev, sizeof(pnpdev)); + + pnpdev.ppb = ppb; + + if (bootverbose) + printf("ppb: <PnP> probing devices on ppbus %d...\n", ppb->ppb_link->adapter_unit); - - if ((error = ppb_1284_read_id(pnpdev, PPB_NIBBLE, str, - PPB_PnP_STRING_SIZE, &len))) + + if (ppb_request_bus(&pnpdev, PPB_DONTWAIT)) { + if (bootverbose) + printf("ppb: <PnP> cannot allocate ppbus!\n"); + return (-1); + } + + if ((error = ppb_1284_negociate(&pnpdev, NIBBLE_1284_REQUEST_ID))) { + if (bootverbose) + printf("ppb: <PnP> ppb_1284_negociate()=%d\n", error); + goto end_detect; + } + + len = 0; + for (q=str; !(ppb_rstr(&pnpdev) & PERROR); q++) { + if ((error = nibble_1284_inbyte(&pnpdev, q))) { + if (bootverbose) { + *q = '\0'; + printf("ppb: <PnP> len=%d, %s\n", len, str); + printf("ppb: <PnP> nibble_1284_inbyte()=%d\n", + error); + } + goto end_detect; + } -#ifdef DEBUG_1284 - printf("ppb: <PnP> %d characters: ", len); - for (i = 0; i < len; i++) - printf("%c(0x%x) ", str[i], str[i]); - printf("\n"); -#endif + if (len++ >= PPB_PnP_STRING_SIZE) { + printf("ppb: <PnP> not space left!\n"); + goto end_detect; + } + } + *q = '\0'; + + nibble_1284_sync(&pnpdev); + + if (bootverbose) { + printf("ppb: <PnP> %d characters: ", len); + for (i = 0; i < len; i++) + printf("0x%x ", str[i]); + printf("\n"); + } /* replace ';' characters by '\0' */ for (i = 0; i < len; i++) str[i] = (str[i] == ';') ? '\0' : str[i]; - if ((token = search_token(str, len, "MFG")) != NULL || - (token = search_token(str, len, "MANUFACTURER")) != NULL) + if ((token = search_token(str, len, "MFG")) != NULL) printf("ppbus%d: <%s", ppb->ppb_link->adapter_unit, search_token(token, UNKNOWN_LENGTH, ":") + 1); else printf("ppbus%d: <unknown", ppb->ppb_link->adapter_unit); - if ((token = search_token(str, len, "MDL")) != NULL || - (token = search_token(str, len, "MODEL")) != NULL) + if ((token = search_token(str, len, "MDL")) != NULL) printf(" %s", search_token(token, UNKNOWN_LENGTH, ":") + 1); else @@ -205,8 +223,7 @@ ppb_pnp_detect(struct ppb_data *ppb, struct ppb_device *pnpdev) printf(" %s", class); } - if ((token = search_token(str, len, "CMD")) != NULL || - (token = search_token(str, len, "COMMAND")) != NULL) + if ((token = search_token(str, len, "CMD")) != NULL) printf(" %s", search_token(token, UNKNOWN_LENGTH, ":") + 1); @@ -224,120 +241,13 @@ ppb_pnp_detect(struct ppb_data *ppb, struct ppb_device *pnpdev) class_id = PPB_PnP_UNKNOWN; end_detect: - return (class_id); -} - -/* - * ppb_scan_bus() - * - * Scan the ppbus for IEEE1284 compliant devices - */ -static int -ppb_scan_bus(struct ppb_data *ppb) -{ - struct ppb_device pnpdev; /* temporary device to perform I/O */ - int error = 0; - - /* initialize the pnpdev structure for future use */ - bzero(&pnpdev, sizeof(pnpdev)); - pnpdev.ppb = ppb; - - if ((error = ppb_request_bus(&pnpdev, PPB_DONTWAIT))) { - if (bootverbose) - printf("ppb: cannot allocate ppbus!\n"); - - return (error); - } - - /* try all IEEE1284 modes, for one device only - * - * XXX We should implement the IEEE1284.3 standard to detect - * daisy chained devices - */ - - error = ppb_1284_negociate(&pnpdev, PPB_NIBBLE, PPB_REQUEST_ID); + if ((error = ppb_1284_terminate(&pnpdev, VALID_STATE)) && bootverbose) + printf("ppb: ppb_1284_terminate()=%d\n", error); - if ((ppb->state == PPB_ERROR) && (ppb->error == PPB_NOT_IEEE1284)) - goto end_scan; - - ppb_1284_terminate(&pnpdev); - - printf("ppb%d: IEEE1284 device found ", ppb->ppb_link->adapter_unit); - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_NIBBLE, 0))) { - printf("/NIBBLE"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_PS2, 0))) { - printf("/PS2"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_ECP, 0))) { - printf("/ECP"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_ECP, PPB_USE_RLE))) { - printf("/ECP_RLE"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_EPP, 0))) { - printf("/EPP"); - ppb_1284_terminate(&pnpdev); - } - - /* try more IEEE1284 modes */ - if (bootverbose) { - if (!(error = ppb_1284_negociate(&pnpdev, PPB_NIBBLE, - PPB_REQUEST_ID))) { - printf("/NIBBLE_ID"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_PS2, - PPB_REQUEST_ID))) { - printf("/PS2_ID"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_ECP, - PPB_REQUEST_ID))) { - printf("/ECP_ID"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_ECP, - PPB_REQUEST_ID | PPB_USE_RLE))) { - printf("/ECP_RLE_ID"); - ppb_1284_terminate(&pnpdev); - } - - if (!(error = ppb_1284_negociate(&pnpdev, PPB_COMPATIBLE, - PPB_EXTENSIBILITY_LINK))) { - printf("/Extensibility Link"); - ppb_1284_terminate(&pnpdev); - } - } - - printf("\n"); - - /* detect PnP devices */ - ppb->class_id = ppb_pnp_detect(ppb, &pnpdev); - - ppb_release_bus(&pnpdev); - - return (0); - -end_scan: ppb_release_bus(&pnpdev); - return (error); + return (class_id); } -#endif /* !DONTPROBE_1284 */ - /* * ppb_attachdevs() * @@ -347,16 +257,18 @@ end_scan: int ppb_attachdevs(struct ppb_data *ppb) { + int error; struct ppb_device *dev; struct ppb_driver **p_drvpp, *p_drvp; LIST_INIT(&ppb->ppb_devs); /* initialise device/driver list */ p_drvpp = (struct ppb_driver **)ppbdriver_set.ls_items; -#ifndef DONTPROBE_1284 - /* detect IEEE1284 compliant devices */ - ppb_scan_bus(ppb); -#endif /* !DONTPROBE_1284 */ +/* XXX wait for ieee1284 good support */ +#if 0 + /* detect PnP devices */ + ppb->class_id = ppb_pnp_detect(ppb); +#endif /* * Blindly try all probes here. Later we should look at diff --git a/sys/dev/ppbus/ppbconf.h b/sys/dev/ppbus/ppbconf.h index c47e4ab7d04dd..80efe282a62b3 100644 --- a/sys/dev/ppbus/ppbconf.h +++ b/sys/dev/ppbus/ppbconf.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppbconf.h,v 1.10 1999/01/10 12:04:55 nsouch Exp $ + * $Id: ppbconf.h,v 1.8 1998/09/13 18:26:26 nsouch Exp $ * */ #ifndef __PPBCONF_H @@ -47,12 +47,7 @@ #define PPB_EPP 0x4 /* EPP mode, 32 bit */ #define PPB_ECP 0x8 /* ECP mode */ -/* mode aliases */ -#define PPB_SPP PPB_NIBBLE|PPB_PS2 -#define PPB_BYTE PPB_PS2 - -#define PPB_MASK 0x0f -#define PPB_OPTIONS_MASK 0xf0 +#define PPB_SPP PPB_NIBBLE|PPB_PS2 #define PPB_IS_EPP(mode) (mode & PPB_EPP) #define PPB_IN_EPP_MODE(dev) (PPB_IS_EPP (ppb_get_mode (dev))) @@ -108,8 +103,6 @@ struct ppb_status { #define PPB_NOINTR 0 #define PPB_WAIT 0x1 #define PPB_INTR 0x2 -#define PPB_POLL 0x4 -#define PPB_FOREVER -1 /* * Microsequence stuff. @@ -151,14 +144,14 @@ struct ppb_context { struct microseq *curmsq; /* currently executed microseqence */ }; + struct ppb_device { int id_unit; /* unit of the device */ char *name; /* name of the device */ ushort mode; /* current mode of the device */ - ushort avm; /* available IEEE1284 modes of - * the device */ + ushort avm; /* available modes of the device */ struct ppb_context ctx; /* context of the device */ @@ -191,8 +184,6 @@ struct ppb_adapter { int (*exec_microseq)(int, struct ppb_microseq **); int (*setmode)(int, int); - int (*read)(int, char *, int, int); - int (*write)(int, char *, int, int); void (*outsb_epp)(int, char *, int); void (*outsw_epp)(int, char *, int); @@ -201,12 +192,12 @@ struct ppb_adapter { void (*insw_epp)(int, char *, int); void (*insl_epp)(int, char *, int); - u_char (*r_dtr)(int); - u_char (*r_str)(int); - u_char (*r_ctr)(int); - u_char (*r_epp)(int); - u_char (*r_ecr)(int); - u_char (*r_fifo)(int); + char (*r_dtr)(int); + char (*r_str)(int); + char (*r_ctr)(int); + char (*r_epp)(int); + char (*r_ecr)(int); + char (*r_fifo)(int); void (*w_dtr)(int, char); void (*w_str)(int, char); @@ -239,7 +230,7 @@ struct ppb_link { /* * Maximum size of the PnP info string */ -#define PPB_PnP_STRING_SIZE 256 /* XXX */ +#define PPB_PnP_STRING_SIZE 128 /* XXX */ /* * Parallel Port Bus structure. @@ -259,11 +250,10 @@ struct ppb_data { #define PPB_PnP_UNKNOWN 10 int class_id; /* not a PnP device if class_id < 0 */ - int state; /* current IEEE1284 state */ - int error; /* last IEEE1284 error */ - ushort mode; /* IEEE 1284-1994 mode * NIBBLE, PS2, EPP or ECP */ + ushort avm; /* IEEE 1284-1994 available + * modes */ struct ppb_link *ppb_link; /* link to the adapter */ struct ppb_device *ppb_owner; /* device which owns the bus */ @@ -304,7 +294,6 @@ extern int ppb_ecp_sync(struct ppb_device *); extern int ppb_get_status(struct ppb_device *, struct ppb_status *); extern int ppb_set_mode(struct ppb_device *, int); -extern int ppb_write(struct ppb_device *, char *, int, int); /* * These are defined as macros for speedup. diff --git a/sys/dev/ppbus/ppi.c b/sys/dev/ppbus/ppi.c index e0072f3e4cda8..f742e4b56fae5 100644 --- a/sys/dev/ppbus/ppi.c +++ b/sys/dev/ppbus/ppi.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppi.c,v 1.8 1998/12/07 21:58:16 archie Exp $ + * $Id: ppi.c,v 1.6 1998/01/02 09:30:39 msmith Exp $ * */ #include "ppi.h" @@ -34,35 +34,18 @@ #include <sys/systm.h> #include <sys/conf.h> #include <sys/kernel.h> -#include <sys/uio.h> #include <sys/malloc.h> #include <sys/fcntl.h> -#include <machine/clock.h> - #include <dev/ppbus/ppbconf.h> -#include <dev/ppbus/ppb_msq.h> - -#include "opt_ppb_1284.h" - -#ifdef PERIPH_1284 -#include <dev/ppbus/ppb_1284.h> -#endif - #include <dev/ppbus/ppi.h> -#define BUFSIZE 512 struct ppi_data { int ppi_unit; int ppi_flags; #define HAVE_PPBUS (1<<0) -#define HAD_PPBUS (1<<1) - - int ppi_count; - int ppi_mode; /* IEEE1284 mode */ - char ppi_buffer[BUFSIZE]; struct ppb_device ppi_dev; }; @@ -87,41 +70,13 @@ DATA_SET(ppbdriver_set, ppidriver); static d_open_t ppiopen; static d_close_t ppiclose; static d_ioctl_t ppiioctl; -static d_write_t ppiwrite; -static d_read_t ppiread; #define CDEV_MAJOR 82 static struct cdevsw ppi_cdevsw = - { ppiopen, ppiclose, ppiread, ppiwrite, /* 82 */ + { ppiopen, ppiclose, noread, nowrite, /* 82 */ ppiioctl, nullstop, nullreset, nodevtotty, seltrue, nommap, nostrat, "ppi", NULL, -1 }; -#ifdef PERIPH_1284 - -static void -ppi_enable_intr(struct ppi_data *ppi) -{ - char r; - - r = ppb_rctr(&ppi->ppi_dev); - ppb_wctr(&ppi->ppi_dev, r | IRQENABLE); - - return; -} - -static void -ppi_disable_intr(struct ppi_data *ppi) -{ - char r; - - r = ppb_rctr(&ppi->ppi_dev); - ppb_wctr(&ppi->ppi_dev, r & ~IRQENABLE); - - return; -} - -#endif /* PERIPH_1284 */ - /* * ppiprobe() */ @@ -161,6 +116,8 @@ ppiprobe(struct ppb_data *ppb) static int ppiattach(struct ppb_device *dev) { + struct ppi_data *ppi = ppidata[dev->id_unit]; + /* * Report ourselves */ @@ -170,72 +127,9 @@ ppiattach(struct ppb_device *dev) return (1); } -/* - * Cable - * ----- - * - * Use an IEEE1284 compliant (DB25/DB25) cable with the following tricks: - * - * nStrobe <-> nAck 1 <-> 10 - * nAutofd <-> Busy 11 <-> 14 - * nSelectin <-> Select 17 <-> 13 - * nInit <-> nFault 15 <-> 16 - * - */ static void ppiintr(int unit) { -#ifdef PERIPH_1284 - struct ppi_data *ppi = ppidata[unit]; - - ppi_disable_intr(ppi); - - switch (ppi->ppi_dev.ppb->state) { - - /* accept IEEE1284 negociation then wakeup an waiting process to - * continue negociation at process level */ - case PPB_FORWARD_IDLE: - /* Event 1 */ - if ((ppb_rstr(&ppi->ppi_dev) & (SELECT | nBUSY)) == - (SELECT | nBUSY)) { - /* IEEE1284 negociation */ -#ifdef DEBUG_1284 - printf("N"); -#endif - - /* Event 2 - prepare for reading the ext. value */ - ppb_wctr(&ppi->ppi_dev, (PCD | STROBE | nINIT) & ~SELECTIN); - - ppi->ppi_dev.ppb->state = PPB_NEGOCIATION; - - } else { -#ifdef DEBUG_1284 - printf("0x%x", ppb_rstr(&ppi->ppi_dev)); -#endif - ppb_peripheral_terminate(&ppi->ppi_dev, PPB_DONTWAIT); - break; - } - - /* wake up any process waiting for negociation from - * remote master host */ - - /* XXX should set a variable to warn the process about - * the interrupt */ - - wakeup(ppi); - break; - default: -#ifdef DEBUG_1284 - printf("?%d", ppi->ppi_dev.ppb->state); -#endif - ppi->ppi_dev.ppb->state = PPB_FORWARD_IDLE; - ppb_set_mode(&ppi->ppi_dev, PPB_COMPATIBLE); - break; - } - - ppi_enable_intr(ppi); -#endif /* PERIPH_1284 */ - return; } @@ -249,16 +143,11 @@ ppiopen(dev_t dev, int flags, int fmt, struct proc *p) if (unit >= nppi) return (ENXIO); - if (!(ppi->ppi_flags & HAVE_PPBUS)) { - if ((res = ppb_request_bus(&ppi->ppi_dev, - (flags & O_NONBLOCK) ? PPB_DONTWAIT : - (PPB_WAIT | PPB_INTR)))) + if (!(ppi->ppi_flags & HAVE_PPBUS)) + if ((res = ppb_request_bus(&ppi->ppi_dev, (flags & O_NONBLOCK) ? PPB_DONTWAIT : (PPB_WAIT | PPB_INTR)))) return (res); - ppi->ppi_flags |= HAVE_PPBUS; - } - ppi->ppi_count += 1; - + ppi->ppi_flags |= HAVE_PPBUS; return (0); } @@ -268,206 +157,12 @@ ppiclose(dev_t dev, int flags, int fmt, struct proc *p) u_int unit = minor(dev); struct ppi_data *ppi = ppidata[unit]; - ppi->ppi_count --; - if (!ppi->ppi_count) { - -#ifdef PERIPH_1284 - switch (ppi->ppi_dev.ppb->state) { - case PPB_PERIPHERAL_IDLE: - ppb_peripheral_terminate(&ppi->ppi_dev, 0); - break; - case PPB_REVERSE_IDLE: - case PPB_EPP_IDLE: - case PPB_ECP_FORWARD_IDLE: - default: - ppb_1284_terminate(&ppi->ppi_dev); - break; - } -#endif /* PERIPH_1284 */ - + if (ppi->ppi_flags & HAVE_PPBUS) ppb_release_bus(&ppi->ppi_dev); - ppi->ppi_flags &= ~HAVE_PPBUS; - } - + ppi->ppi_flags &= ~HAVE_PPBUS; return (0); } -/* - * ppiread() - * - * IEEE1284 compliant read. - * - * First, try negociation to BYTE then NIBBLE mode - * If no data is available, wait for it otherwise transfer as much as possible - */ -static int -ppiread(dev_t dev, struct uio *uio, int ioflag) -{ -#ifdef PERIPH_1284 - u_int unit = minor(dev); - struct ppi_data *ppi = ppidata[unit]; - int len, error = 0; - - switch (ppi->ppi_dev.ppb->state) { - case PPB_PERIPHERAL_IDLE: - ppb_peripheral_terminate(&ppi->ppi_dev, 0); - /* fall throught */ - - case PPB_FORWARD_IDLE: - /* if can't negociate NIBBLE mode then try BYTE mode, - * the peripheral may be a computer - */ - if ((ppb_1284_negociate(&ppi->ppi_dev, - ppi->ppi_mode = PPB_NIBBLE, 0))) { - - /* XXX Wait 2 seconds to let the remote host some - * time to terminate its interrupt - */ - tsleep(ppi, PPBPRI, "ppiread", 2*hz); - - if ((error = ppb_1284_negociate(&ppi->ppi_dev, - ppi->ppi_mode = PPB_BYTE, 0))) - return (error); - } - break; - - case PPB_REVERSE_IDLE: - case PPB_EPP_IDLE: - case PPB_ECP_FORWARD_IDLE: - default: - break; - } - -#ifdef DEBUG_1284 - printf("N"); -#endif - /* read data */ - len = 0; - while (uio->uio_resid) { - if ((error = ppb_1284_read(&ppi->ppi_dev, ppi->ppi_mode, - ppi->ppi_buffer, min(BUFSIZE, uio->uio_resid), - &len))) { - goto error; - } - - if (!len) - goto error; /* no more data */ - -#ifdef DEBUG_1284 - printf("d"); -#endif - if ((error = uiomove(ppi->ppi_buffer, len, uio))) - goto error; - } - -error: - -#else /* PERIPH_1284 */ - int error = ENODEV; -#endif - - return (error); -} - -/* - * ppiwrite() - * - * IEEE1284 compliant write - * - * Actually, this is the peripheral side of a remote IEEE1284 read - * - * The first part of the negociation (IEEE1284 device detection) is - * done at interrupt level, then the remaining is done by the writing - * process - * - * Once negociation done, transfer data - */ -static int -ppiwrite(dev_t dev, struct uio *uio, int ioflag) -{ -#ifdef PERIPH_1284 - u_int unit = minor(dev); - struct ppi_data *ppi = ppidata[unit]; - struct ppb_data *ppb = ppi->ppi_dev.ppb; - int len, error = 0, sent; - -#if 0 - int ret; - - #define ADDRESS MS_PARAM(0, 0, MS_TYP_PTR) - #define LENGTH MS_PARAM(0, 1, MS_TYP_INT) - - struct ppb_microseq msq[] = { - { MS_OP_PUT, { MS_UNKNOWN, MS_UNKNOWN, MS_UNKNOWN } }, - MS_RET(0) - }; - - /* negociate ECP mode */ - if (ppb_1284_negociate(&ppi->ppi_dev, PPB_ECP, 0)) { - printf("ppiwrite: ECP negociation failed\n"); - } - - while (!error && (len = min(uio->uio_resid, BUFSIZE))) { - uiomove(ppi->ppi_buffer, len, uio); - - ppb_MS_init_msq(msq, 2, ADDRESS, ppi->ppi_buffer, LENGTH, len); - - error = ppb_MS_microseq(&ppi->ppi_dev, msq, &ret); - } -#endif - - /* we have to be peripheral to be able to send data, so - * wait for the appropriate state - */ - if (ppb->state < PPB_PERIPHERAL_NEGOCIATION) - ppb_1284_terminate(&ppi->ppi_dev); - - while (ppb->state != PPB_PERIPHERAL_IDLE) { - /* XXX should check a variable before sleeping */ -#ifdef DEBUG_1284 - printf("s"); -#endif - - ppi_enable_intr(ppi); - - /* sleep until IEEE1284 negociation starts */ - error = tsleep(ppi, PCATCH | PPBPRI, "ppiwrite", 0); - - switch (error) { - case 0: - /* negociate peripheral side with BYTE mode */ - ppb_peripheral_negociate(&ppi->ppi_dev, PPB_BYTE, 0); - break; - case EWOULDBLOCK: - break; - default: - goto error; - } - } -#ifdef DEBUG_1284 - printf("N"); -#endif - - /* negociation done, write bytes to master host */ - while (len = min(uio->uio_resid, BUFSIZE)) { - uiomove(ppi->ppi_buffer, len, uio); - if ((error = byte_peripheral_write(&ppi->ppi_dev, - ppi->ppi_buffer, len, &sent))) - goto error; -#ifdef DEBUG_1284 - printf("d"); -#endif - } - -error: - -#else /* PERIPH_1284 */ - int error = ENODEV; -#endif - - return (error); -} - static int ppiioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) { @@ -515,6 +210,7 @@ ppiioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) case PPISFIFO: /* write FIFO */ ppb_wfifo(&ppi->ppi_dev, *val); break; + default: error = ENOTTY; break; diff --git a/sys/dev/ppbus/pps.c b/sys/dev/ppbus/pps.c index 95b255cb1bb31..9d1f20d9e04bc 100644 --- a/sys/dev/ppbus/pps.c +++ b/sys/dev/ppbus/pps.c @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: pps.c,v 1.11 1998/08/24 16:31:27 phk Exp $ + * $Id: pps.c,v 1.10 1998/08/03 19:14:31 msmith Exp $ * * This driver implements a draft-mogul-pps-api-02.txt PPS source. * @@ -153,6 +153,7 @@ ppsintr(int unit) { struct pps_data *sc = softc[unit]; struct timespec tc; + struct timeval tv; nanotime(&tc); if (!(ppb_rstr(&sc->pps_dev) & nACK)) @@ -170,8 +171,6 @@ ppsintr(int unit) sc->ppsinfo.assert_sequence++; #ifdef PPS_SYNC if (sc->ppsparam.mode & PPS_HARDPPSONASSERT) { - struct timeval tv; - tv.tv_sec = tc.tv_sec; tv.tv_usec = tc.tv_nsec / 1000; hardpps(&tv, tv.tv_usec); diff --git a/sys/dev/ppbus/vpo.c b/sys/dev/ppbus/vpo.c index 17b67c5f632d7..0585a497cd9b3 100644 --- a/sys/dev/ppbus/vpo.c +++ b/sys/dev/ppbus/vpo.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: vpo.c,v 1.10 1999/01/09 18:05:46 nsouch Exp $ + * $Id: vpo.c,v 1.4 1997/09/01 00:51:52 bde Exp $ * */ @@ -51,8 +51,6 @@ #include <sys/kernel.h> #endif /*KERNEL */ -#include "opt_vpo.h" - #include <dev/ppbus/ppbconf.h> #include <dev/ppbus/vpoio.h> @@ -159,6 +157,7 @@ vpoprobe(struct ppb_data *ppb) static int vpoattach(struct ppb_device *dev) { + struct scsibus_data *scbus; struct vpo_data *vpo = vpodata[dev->id_unit]; struct cam_devq *devq; @@ -212,11 +211,9 @@ vpoattach(struct ppb_device *dev) static void vpo_intr(struct vpo_data *vpo, struct ccb_scsiio *csio) { - int errno; /* error in errno.h */ + + int i, errno; /* error in errno.h */ int s; -#ifdef VP0_DEBUG - int i; -#endif s = splcam(); @@ -413,10 +410,6 @@ vpo_action(struct cam_sim *sim, union ccb *ccb) printf("vpo%d: XPT_PATH_INQ request\n", vpo->vpo_unit); #endif cpi->version_num = 1; /* XXX??? */ - cpi->hba_inquiry = 0; - cpi->target_sprt = 0; - cpi->hba_misc = 0; - cpi->hba_eng_cnt = 0; cpi->max_target = 7; cpi->max_lun = 0; cpi->initiator_id = VP0_INITIATOR; diff --git a/sys/dev/ppbus/vpoio.c b/sys/dev/ppbus/vpoio.c index 54791ee44dcc7..a416efefb8ef9 100644 --- a/sys/dev/ppbus/vpoio.c +++ b/sys/dev/ppbus/vpoio.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: vpoio.c,v 1.4 1998/12/07 21:58:16 archie Exp $ + * $Id: vpoio.c,v 1.2 1998/09/13 18:26:26 nsouch Exp $ * */ @@ -41,8 +41,6 @@ #include <sys/kernel.h> #endif /*KERNEL */ -#include "opt_vpo.h" - #include <dev/ppbus/ppbconf.h> #include <dev/ppbus/ppb_msq.h> #include <dev/ppbus/vpoio.h> @@ -286,13 +284,8 @@ vpoio_connect(struct vpoio_data *vpo, int how) int error; int ret; - if ((error = ppb_request_bus(&vpo->vpo_dev, how))) { - -#ifdef VP0_DEBUG - printf("%s: can't request bus!\n", __FUNCTION__); -#endif + if ((error = ppb_request_bus(&vpo->vpo_dev, how))) return error; - } if (PPB_IN_EPP_MODE(&vpo->vpo_dev)) ppb_MS_microseq(&vpo->vpo_dev, connect_epp_microseq, &ret); @@ -444,8 +437,8 @@ vpoio_outstr(struct vpoio_data *vpo, char *buffer, int size) ppb_wctr(&vpo->vpo_dev, H_AUTO | H_nSELIN | H_INIT | H_STROBE); } + /* ppb_ecp_sync(&vpo->vpo_dev); */ #endif - ppb_ecp_sync(&vpo->vpo_dev); return (error); } @@ -456,7 +449,10 @@ vpoio_outstr(struct vpoio_data *vpo, char *buffer, int size) static int vpoio_instr(struct vpoio_data *vpo, char *buffer, int size) { + + register int k; int error = 0; + int r, mode, epp; ppb_MS_exec(&vpo->vpo_dev, MS_OP_GET, buffer, size, MS_UNKNOWN, &error); @@ -483,8 +479,8 @@ vpoio_instr(struct vpoio_data *vpo, char *buffer, int size) ppb_wctr(&vpo->vpo_dev, PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE); } + /* ppb_ecp_sync(&vpo->vpo_dev); */ #endif - ppb_ecp_sync(&vpo->vpo_dev); return (error); } @@ -492,6 +488,7 @@ vpoio_instr(struct vpoio_data *vpo, char *buffer, int size) static char vpoio_select(struct vpoio_data *vpo, int initiator, int target) { + register int k; int ret; struct ppb_microseq select_microseq[] = { @@ -708,10 +705,6 @@ vpoio_reset_bus(struct vpoio_data *vpo) { /* first, connect to the drive */ if (vpoio_connect(vpo, PPB_WAIT|PPB_INTR) || !vpoio_in_disk_mode(vpo)) { - -#ifdef VP0_DEBUG - printf("%s: not in disk mode!\n", __FUNCTION__); -#endif /* release ppbus */ vpoio_disconnect(vpo); return (1); diff --git a/sys/dev/smbus/smb.c b/sys/dev/smbus/smb.c index b5d29194430eb..94719fb83ad68 100644 --- a/sys/dev/smbus/smb.c +++ b/sys/dev/smbus/smb.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smb.c,v 1.5 1999/01/09 18:08:23 nsouch Exp $ + * $Id: smb.c,v 1.2 1998/09/04 17:53:42 nsouch Exp $ * */ #include <sys/param.h> @@ -119,6 +119,8 @@ smb_probe(device_t dev) static int smb_attach(device_t dev) { + struct smb_softc *sc = (struct smb_softc *)device_get_softc(dev); + return (0); } @@ -157,9 +159,24 @@ smbclose(dev_t dev, int flags, int fmt, struct proc *p) static int smbwrite(dev_t dev, struct uio * uio, int ioflag) { - /* not supported */ + device_t smbdev = IIC_DEVICE(minor(dev)); + struct smb_softc *sc = IIC_SOFTC(minor(dev)); + int error, count; - return (EINVAL); + if (!sc || !smbdev) + return (EINVAL); + + if (sc->sc_count == 0) + return (EINVAL); + + count = min(uio->uio_resid, BUFSIZE); + uiomove(sc->sc_buffer, count, uio); + + /* we consider the command char as the first character to send */ + smbus_bwrite(device_get_parent(smbdev), sc->sc_addr, + sc->sc_buffer[0], count-1, sc->sc_buffer+1); + + return (0); } static int @@ -180,62 +197,65 @@ smbioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) int error = 0; struct smbcmd *s = (struct smbcmd *)data; - if (!sc || !s) + if (!sc) return (EINVAL); switch (cmd) { case SMB_QUICK_WRITE: - error=smbus_quick(parent, s->slave, SMB_QWRITE); + smbus_quick(parent, sc->sc_addr, SMB_QWRITE); goto end; case SMB_QUICK_READ: - error=smbus_quick(parent, s->slave, SMB_QREAD); + smbus_quick(parent, sc->sc_addr, SMB_QREAD); goto end; }; + if (!s) + return (EINVAL); + switch (cmd) { case SMB_SENDB: - error=smbus_sendb(parent, s->slave, s->cmd); + smbus_sendb(parent, sc->sc_addr, s->cmd); break; case SMB_RECVB: - error=smbus_recvb(parent, s->slave, &s->cmd); + smbus_recvb(parent, sc->sc_addr, &s->cmd); break; case SMB_WRITEB: - error=smbus_writeb(parent, s->slave, s->cmd, s->data.byte); + smbus_writeb(parent, sc->sc_addr, s->cmd, s->data.byte); break; case SMB_WRITEW: - error=smbus_writew(parent, s->slave, s->cmd, s->data.word); + smbus_writew(parent, sc->sc_addr, s->cmd, s->data.word); break; case SMB_READB: if (s->data.byte_ptr) - error=smbus_readb(parent, s->slave, s->cmd, + smbus_readb(parent, sc->sc_addr, s->cmd, s->data.byte_ptr); break; case SMB_READW: if (s->data.word_ptr) - error=smbus_readw(parent, s->slave, s->cmd, s->data.word_ptr); + smbus_readw(parent, sc->sc_addr, s->cmd, s->data.word_ptr); break; case SMB_PCALL: if (s->data.process.rdata) - error=smbus_pcall(parent, s->slave, s->cmd, + smbus_pcall(parent, sc->sc_addr, s->cmd, s->data.process.sdata, s->data.process.rdata); break; case SMB_BWRITE: if (s->count && s->data.byte_ptr) - error=smbus_bwrite(parent, s->slave, s->cmd, s->count, + smbus_bwrite(parent, sc->sc_addr, s->cmd, s->count, s->data.byte_ptr); break; case SMB_BREAD: if (s->count && s->data.byte_ptr) - error=smbus_bread(parent, s->slave, s->cmd, s->count, + smbus_bread(parent, sc->sc_addr, s->cmd, s->count, s->data.byte_ptr); break; diff --git a/sys/dev/smbus/smbconf.c b/sys/dev/smbus/smbconf.c index 458916f8e8e8e..60798f5c82ddb 100644 --- a/sys/dev/smbus/smbconf.c +++ b/sys/dev/smbus/smbconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbconf.c,v 1.3 1998/11/22 22:01:42 nsouch Exp $ + * $Id: smbconf.c,v 1.1.1.2 1998/08/13 15:16:57 son Exp $ * */ #include <sys/param.h> @@ -65,29 +65,10 @@ smbus_alloc_bus(device_t parent) /* add the bus to the parent */ child = device_add_child(parent, "smbus", -1, NULL); - return (child); -} - -static int -smbus_poll(struct smbus_softc *sc, int how) -{ - int error; - - switch (how) { - case (SMB_WAIT | SMB_INTR): - error = tsleep(sc, SMBPRI|PCATCH, "smbreq", 0); - break; - - case (SMB_WAIT | SMB_NOINTR): - error = tsleep(sc, SMBPRI, "smbreq", 0); - break; - - default: - return (EWOULDBLOCK); - break; - } + if (child) + device_set_desc(child, "System Management Bus"); - return (error); + return (child); } /* @@ -103,20 +84,25 @@ smbus_request_bus(device_t bus, device_t dev, int how) struct smbus_softc *sc = (struct smbus_softc *)device_get_softc(bus); int s, error = 0; - /* first, ask the underlying layers if the request is ok */ - do { - error = SMBUS_CALLBACK(device_get_parent(bus), - SMB_REQUEST_BUS, (caddr_t)&how); - if (error) - error = smbus_poll(sc, how); - } while (error); - while (!error) { s = splhigh(); if (sc->owner) { splx(s); - error = smbus_poll(sc, how); + switch (how) { + case (SMB_WAIT | SMB_INTR): + error = tsleep(sc, SMBPRI|PCATCH, "smbreq", 0); + break; + + case (SMB_WAIT | SMB_NOINTR): + error = tsleep(sc, SMBPRI, "smbreq", 0); + break; + + default: + return (EWOULDBLOCK); + break; + } + } else { sc->owner = dev; @@ -137,13 +123,7 @@ int smbus_release_bus(device_t bus, device_t dev) { struct smbus_softc *sc = (struct smbus_softc *)device_get_softc(bus); - int s, error; - - /* first, ask the underlying layers if the release is ok */ - error = SMBUS_CALLBACK(device_get_parent(bus), SMB_RELEASE_BUS, NULL); - - if (error) - return (error); + int s; s = splhigh(); if (sc->owner != dev) { @@ -168,7 +148,7 @@ smbus_release_bus(device_t bus, device_t dev) u_char smbus_get_addr(device_t dev) { - uintptr_t addr; + u_long addr; device_t parent = device_get_parent(dev); BUS_READ_IVAR(parent, dev, SMBUS_IVAR_ADDR, &addr); diff --git a/sys/dev/smbus/smbconf.h b/sys/dev/smbus/smbconf.h index 0a442ec9633ae..10fc3bcb011ca 100644 --- a/sys/dev/smbus/smbconf.h +++ b/sys/dev/smbus/smbconf.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbconf.h,v 1.1.1.1 1998/09/03 20:52:54 nsouch Exp $ + * $Id: smbconf.h,v 1.1.1.2 1998/08/13 15:16:58 son Exp $ */ #ifndef __SMBONF_H #define __SMBONF_H @@ -43,18 +43,10 @@ #define SMB_INTR 0x2 /* - * callback index - */ -#define SMB_REQUEST_BUS 0x1 -#define SMB_RELEASE_BUS 0x2 - -/* * SMB bus errors */ #define SMB_ENOERR 0x0 #define SMB_EBUSERR 0x1 -#define SMB_ENOTSUPP 0x2 -#define SMB_ENOACK 0x3 /* * How Quick command is executed diff --git a/sys/dev/smbus/smbus.c b/sys/dev/smbus/smbus.c index ca067103c43e3..f9f787d3a4719 100644 --- a/sys/dev/smbus/smbus.c +++ b/sys/dev/smbus/smbus.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbus.c,v 1.6 1998/12/28 19:07:51 nsouch Exp $ + * $Id: smbus.c,v 1.1.1.2 1998/08/13 15:16:58 son Exp $ * */ #include <sys/param.h> @@ -46,6 +46,7 @@ */ struct smbus_device { const char *smbd_name; /* device name */ + const u_char smbd_addr; /* address of the device */ const char *smbd_desc; /* device descriptor */ }; @@ -53,7 +54,7 @@ struct smbus_device { * list of known devices */ struct smbus_device smbus_children[] = { - { "smb", "SMBus general purpose I/O" }, + { "smb", 0, "General Call" }, { NULL, 0 } }; @@ -65,10 +66,7 @@ static devclass_t smbus_devclass; static int smbus_probe(device_t); static int smbus_attach(device_t); static void smbus_print_child(device_t, device_t); - -#if 0 static int smbus_read_ivar(device_t , device_t, int, u_long *); -#endif static device_method_t smbus_methods[] = { /* device interface */ @@ -79,8 +77,10 @@ static device_method_t smbus_methods[] = { /* bus interface */ DEVMETHOD(bus_print_child, smbus_print_child), - DEVMETHOD(bus_read_ivar, bus_generic_read_ivar), + DEVMETHOD(bus_read_ivar, smbus_read_ivar), DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_create_intr, bus_generic_create_intr), + DEVMETHOD(bus_connect_intr, bus_generic_connect_intr), { 0, 0 } }; @@ -100,7 +100,14 @@ static driver_t smbus_driver = { static int smbus_probe(device_t dev) { - device_set_desc(dev, "System Management Bus"); + struct smbus_device *smbdev; + device_t child; + + for (smbdev = smbus_children; smbdev->smbd_name; smbdev++) { + + child = device_add_child(dev, smbdev->smbd_name, -1, smbdev); + device_set_desc(child, smbdev->smbd_desc); + } return (0); } @@ -108,20 +115,10 @@ smbus_probe(device_t dev) static int smbus_attach(device_t dev) { - struct smbus_device *smbdev; + struct smbus_softc *sc = device_get_softc(dev); + device_t parent = device_get_parent(dev); - /* add known devices */ - for (smbdev = smbus_children; smbdev->smbd_name; smbdev++) { - device_t child; - - if (devclass_find(smbdev->smbd_name)) { - child = device_add_child(dev, smbdev->smbd_name, - -1, smbdev); - device_set_desc(child, smbdev->smbd_desc); - } else if (bootverbose) - printf("smbus: %s devclass not found\n", - smbdev->smbd_name); - } + printf("Probing for devices on the SMB bus:\n"); bus_generic_attach(dev); return (0); @@ -136,27 +133,25 @@ smbus_generic_intr(device_t dev, u_char devaddr, char low, char high) static void smbus_print_child(device_t bus, device_t dev) { + struct smbus_device* smbdev = DEVTOSMBUS(dev); - printf(" on %s%d", device_get_name(bus), device_get_unit(bus)); + printf(" on %s%d addr 0x%x", device_get_name(bus), + device_get_unit(bus), smbdev->smbd_addr); return; } -#if 0 static int smbus_read_ivar(device_t bus, device_t dev, int index, u_long* result) { struct smbus_device* smbdev = DEVTOSMBUS(dev); switch (index) { - default: + case SMBUS_IVAR_ADDR: + *result = smbdev->smbd_addr; break; } return (ENOENT); } -#endif DRIVER_MODULE(smbus, iicsmb, smbus_driver, smbus_devclass, 0, 0); -DRIVER_MODULE(smbus, bti2c, smbus_driver, smbus_devclass, 0, 0); -DRIVER_MODULE(smbus, intsmb, smbus_driver, smbus_devclass, 0, 0); -DRIVER_MODULE(smbus, smbv, smbus_driver, smbus_devclass, 0, 0); diff --git a/sys/dev/smbus/smbus_if.m b/sys/dev/smbus/smbus_if.m index 3e118811b5b06..3c9ee5a0ecc1d 100644 --- a/sys/dev/smbus/smbus_if.m +++ b/sys/dev/smbus/smbus_if.m @@ -23,13 +23,13 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $Id: smbus_if.m,v 1.3 1998/11/07 14:56:04 nsouch Exp $ +# $Id: smbus_if.m,v 1.1.1.2 1998/08/13 15:16:58 son Exp $ # -INTERFACE smbus; +INTERFACE smbus # -# Interpret interrupt +# Interprete interrupt # METHOD void intr { device_t dev; @@ -40,15 +40,6 @@ METHOD void intr { }; # -# smbus callback -# -METHOD int callback { - device_t dev; - int index; - caddr_t data; -}; - -# # Quick command # METHOD int quick { @@ -129,7 +120,7 @@ METHOD int pcall { # # Block Write command # -METHOD int bwrite { +METHODE int bwrite { device_t dev; u_char slave; char cmd; @@ -140,7 +131,7 @@ METHOD int bwrite { # # Block Read command # -METHOD int bread { +METHODE int bread { device_t dev; u_char slave; char cmd; diff --git a/sys/dev/syscons/scvesactl.c b/sys/dev/syscons/scvesactl.c deleted file mode 100644 index 6f48630e276cf..0000000000000 --- a/sys/dev/syscons/scvesactl.c +++ /dev/null @@ -1,143 +0,0 @@ -/*- - * Copyright (c) 1998 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id: $ - */ - -#include "sc.h" -#include "vga.h" -#include "opt_syscons.h" -#include "opt_vga.h" -#include "opt_vesa.h" -#include "opt_vm86.h" - -#ifdef VGA_NO_MODE_CHANGE -#undef VESA -#endif - -#if (NSC > 0 && NVGA > 0 && defined(VESA) && defined(VM86)) || defined(KLD_MODULE) - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/conf.h> -#include <sys/tty.h> -#include <sys/kernel.h> - -#include <machine/apm_bios.h> -#include <machine/console.h> -#include <machine/pc/vesa.h> - -#include <dev/fb/fbreg.h> -#include <dev/syscons/syscons.h> - -static d_ioctl_t *prev_user_ioctl; - -static int -vesa_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) -{ - scr_stat *scp; - struct tty *tp; - int mode; - - tp = scdevtotty(dev); - if (!tp) - return ENXIO; - scp = sc_get_scr_stat(tp->t_dev); - - switch (cmd) { - - /* generic text modes */ - case SW_TEXT_132x25: case SW_TEXT_132x30: - case SW_TEXT_132x43: case SW_TEXT_132x50: - case SW_TEXT_132x60: - if (!(scp->adp->va_flags & V_ADP_MODECHANGE)) - return ENODEV; - return sc_set_text_mode(scp, tp, cmd & 0xff, 0, 0, 0); - - /* text modes */ - case SW_VESA_C80x60: - case SW_VESA_C132x25: - case SW_VESA_C132x43: - case SW_VESA_C132x50: - case SW_VESA_C132x60: - if (!(scp->adp->va_flags & V_ADP_MODECHANGE)) - return ENODEV; - mode = (cmd & 0xff) + M_VESA_BASE; - return sc_set_text_mode(scp, tp, mode, 0, 0, 0); - - /* graphics modes */ - case SW_VESA_32K_320: case SW_VESA_64K_320: - case SW_VESA_FULL_320: - - case SW_VESA_CG640x400: - - case SW_VESA_CG640x480: - case SW_VESA_32K_640: case SW_VESA_64K_640: - case SW_VESA_FULL_640: - - case SW_VESA_800x600: case SW_VESA_CG800x600: - case SW_VESA_32K_800: case SW_VESA_64K_800: - case SW_VESA_FULL_800: - - case SW_VESA_1024x768: case SW_VESA_CG1024x768: - case SW_VESA_32K_1024: case SW_VESA_64K_1024: - case SW_VESA_FULL_1024: - - case SW_VESA_1280x1024: case SW_VESA_CG1280x1024: - case SW_VESA_32K_1280: case SW_VESA_64K_1280: - case SW_VESA_FULL_1280: - if (!(scp->adp->va_flags & V_ADP_MODECHANGE)) - return ENODEV; - mode = (cmd & 0xff) + M_VESA_BASE; - return sc_set_graphics_mode(scp, tp, mode); - } - - if (prev_user_ioctl) - return (*prev_user_ioctl)(dev, cmd, data, flag, p); - else - return ENOIOCTL; -} - -int -vesa_load_ioctl(void) -{ - if (prev_user_ioctl) - return EBUSY; - prev_user_ioctl = sc_user_ioctl; - sc_user_ioctl = vesa_ioctl; - return 0; -} - -int -vesa_unload_ioctl(void) -{ - if (sc_user_ioctl != vesa_ioctl) - return EBUSY; - sc_user_ioctl = prev_user_ioctl; - prev_user_ioctl = NULL; - return 0; -} - -#endif /* (NSC > 0 && NVGA > 0 && VESA && VM86) || KLD_MODULE */ diff --git a/sys/dev/syscons/scvidctl.c b/sys/dev/syscons/scvidctl.c deleted file mode 100644 index 8374028974709..0000000000000 --- a/sys/dev/syscons/scvidctl.c +++ /dev/null @@ -1,583 +0,0 @@ -/*- - * Copyright (c) 1998 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> - * 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 as - * the first lines of this file unmodified. - * 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 AUTHOR ``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 AUTHOR 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. - * - * $Id: scvidctl.c,v 1.6 1999/01/11 03:18:26 yokota Exp $ - */ - -#include "sc.h" -#include "opt_syscons.h" - -#if NSC > 0 - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/signalvar.h> -#include <sys/tty.h> -#include <sys/kernel.h> - -#ifdef __i386__ -#include <machine/apm_bios.h> -#endif -#include <machine/console.h> - -#include <dev/fb/fbreg.h> -#include <dev/syscons/syscons.h> - -/* for compatibility with previous versions */ -typedef struct old_video_adapter { - int va_index; - int va_type; - int va_flags; -#define V_ADP_COLOR (1<<0) -#define V_ADP_MODECHANGE (1<<1) -#define V_ADP_STATESAVE (1<<2) -#define V_ADP_STATELOAD (1<<3) -#define V_ADP_FONT (1<<4) -#define V_ADP_PALETTE (1<<5) -#define V_ADP_BORDER (1<<6) -#define V_ADP_VESA (1<<7) - int va_crtc_addr; - u_int va_window; /* virtual address */ - size_t va_window_size; - size_t va_window_gran; - u_int va_buffer; /* virtual address */ - size_t va_buffer_size; - int va_initial_mode; - int va_initial_bios_mode; - int va_mode; -} old_video_adapter_t; - -#define OLD_CONS_ADPINFO _IOWR('c', 101, old_video_adapter_t) - -/* variables */ -extern scr_stat *cur_console; -extern int fonts_loaded; -extern int sc_history_size; -extern u_char palette[]; - -int -sc_set_text_mode(scr_stat *scp, struct tty *tp, int mode, int xsize, int ysize, - int fontsize) -{ - video_info_t info; - int error; - int s; - int i; - - if ((*vidsw[scp->ad]->get_info)(scp->adp, mode, &info)) - return ENODEV; - - /* adjust argument values */ - if (fontsize <= 0) - fontsize = info.vi_cheight; - if (fontsize < 14) { - fontsize = 8; - if (!(fonts_loaded & FONT_8)) - return EINVAL; - } else if (fontsize >= 16) { - fontsize = 16; - if (!(fonts_loaded & FONT_16)) - return EINVAL; - } else { - fontsize = 14; - if (!(fonts_loaded & FONT_14)) - return EINVAL; - } - if ((xsize <= 0) || (xsize > info.vi_width)) - xsize = info.vi_width; - if ((ysize <= 0) || (ysize > info.vi_height)) - ysize = info.vi_height; - - /* stop screen saver, etc */ - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } - - /* set up scp */ - if (scp->history != NULL) - i = imax(scp->history_size / scp->xsize - - imax(sc_history_size, scp->ysize), 0); - else - i = 0; - /* - * This is a kludge to fend off scrn_update() while we - * muck around with scp. XXX - */ - scp->status |= UNKNOWN_MODE; - scp->status &= ~(GRAPHICS_MODE | PIXEL_MODE); - scp->mode = mode; - scp->font_size = fontsize; - scp->xsize = xsize; - scp->ysize = ysize; - scp->xoff = 0; - scp->yoff = 0; - scp->xpixel = scp->xsize*8; - scp->ypixel = scp->ysize*fontsize; - - /* allocate buffers */ - sc_alloc_scr_buffer(scp, TRUE, TRUE); - if (ISMOUSEAVAIL(scp->adp->va_flags)) - sc_alloc_cut_buffer(scp, FALSE); - sc_alloc_history_buffer(scp, sc_history_size, i, FALSE); - splx(s); - - if (scp == cur_console) - set_mode(scp); - scp->status &= ~UNKNOWN_MODE; - - if (tp == NULL) - return 0; - if (tp->t_winsize.ws_col != scp->xsize - || tp->t_winsize.ws_row != scp->ysize) { - tp->t_winsize.ws_col = scp->xsize; - tp->t_winsize.ws_row = scp->ysize; - pgsignal(tp->t_pgrp, SIGWINCH, 1); - } - - return 0; -} - -int -sc_set_graphics_mode(scr_stat *scp, struct tty *tp, int mode) -{ - video_info_t info; - int error; - int s; - - if ((*vidsw[scp->ad]->get_info)(scp->adp, mode, &info)) - return ENODEV; - - /* stop screen saver, etc */ - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } - - /* set up scp */ - scp->status |= (UNKNOWN_MODE | GRAPHICS_MODE); - scp->status &= ~PIXEL_MODE; - scp->mode = mode; - scp->xoff = 0; - scp->yoff = 0; - scp->xpixel = info.vi_width; - scp->ypixel = info.vi_height; - scp->xsize = info.vi_width/8; - scp->ysize = info.vi_height/info.vi_cheight; - scp->font_size = FONT_NONE; - /* move the mouse cursor at the center of the screen */ - sc_move_mouse(scp, scp->xpixel / 2, scp->ypixel / 2); - splx(s); - - if (scp == cur_console) - set_mode(scp); - /* clear_graphics();*/ - scp->status &= ~UNKNOWN_MODE; - - if (tp == NULL) - return 0; - if (tp->t_winsize.ws_xpixel != scp->xpixel - || tp->t_winsize.ws_ypixel != scp->ypixel) { - tp->t_winsize.ws_xpixel = scp->xpixel; - tp->t_winsize.ws_ypixel = scp->ypixel; - pgsignal(tp->t_pgrp, SIGWINCH, 1); - } - - return 0; -} - -int -sc_set_pixel_mode(scr_stat *scp, struct tty *tp, int xsize, int ysize, - int fontsize) -{ - video_info_t info; - int error; - int s; - int i; - - if ((*vidsw[scp->ad]->get_info)(scp->adp, scp->mode, &info)) - return ENODEV; /* this shouldn't happen */ - -#ifdef SC_VIDEO_DEBUG - if (scp->scr_buf != NULL) { - printf("set_pixel_mode(): mode:%x, col:%d, row:%d, font:%d\n", - scp->mode, xsize, ysize, fontsize); - } -#endif - - /* adjust argument values */ - if ((fontsize <= 0) || (fontsize == FONT_NONE)) - fontsize = info.vi_cheight; - if (fontsize < 14) { - fontsize = 8; - if (!(fonts_loaded & FONT_8)) - return EINVAL; - } else if (fontsize >= 16) { - fontsize = 16; - if (!(fonts_loaded & FONT_16)) - return EINVAL; - } else { - fontsize = 14; - if (!(fonts_loaded & FONT_14)) - return EINVAL; - } - if (xsize <= 0) - xsize = info.vi_width/8; - if (ysize <= 0) - ysize = info.vi_height/fontsize; - -#ifdef SC_VIDEO_DEBUG - if (scp->scr_buf != NULL) { - printf("set_pixel_mode(): mode:%x, col:%d, row:%d, font:%d\n", - scp->mode, xsize, ysize, fontsize); - printf("set_pixel_mode(): window:%x, %dx%d, xoff:%d, yoff:%d\n", - scp->adp->va_window, info.vi_width, info.vi_height, - (info.vi_width/8 - xsize)/2, - (info.vi_height/fontsize - ysize)/2); - } -#endif - - if ((info.vi_width < xsize*8) || (info.vi_height < ysize*fontsize)) - return EINVAL; - - /* only 16 color, 4 plane modes are supported XXX */ - if ((info.vi_depth != 4) || (info.vi_planes != 4)) - return ENODEV; - - /* - * set_pixel_mode() currently does not support video modes whose - * memory size is larger than 64K. Because such modes require - * bank switching to access the entire screen. XXX - */ - if (info.vi_width*info.vi_height/8 > info.vi_window_size) - return ENODEV; - - /* stop screen saver, etc */ - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } - - /* set up scp */ - if (scp->history != NULL) - i = imax(scp->history_size / scp->xsize - - imax(sc_history_size, scp->ysize), 0); - else - i = 0; - scp->status |= (UNKNOWN_MODE | PIXEL_MODE); - scp->status &= ~(GRAPHICS_MODE | MOUSE_ENABLED); - scp->xsize = xsize; - scp->ysize = ysize; - scp->font_size = fontsize; - scp->xoff = (scp->xpixel/8 - xsize)/2; - scp->yoff = (scp->ypixel/fontsize - ysize)/2; - - /* allocate buffers */ - sc_alloc_scr_buffer(scp, TRUE, TRUE); - if (ISMOUSEAVAIL(scp->adp->va_flags)) - sc_alloc_cut_buffer(scp, FALSE); - sc_alloc_history_buffer(scp, sc_history_size, i, FALSE); - splx(s); - - if (scp == cur_console) - set_border(scp, scp->border); - - scp->status &= ~UNKNOWN_MODE; - -#ifdef SC_VIDEO_DEBUG - printf("set_pixel_mode(): status:%x\n", scp->status); -#endif - - if (tp == NULL) - return 0; - if (tp->t_winsize.ws_col != scp->xsize - || tp->t_winsize.ws_row != scp->ysize) { - tp->t_winsize.ws_col = scp->xsize; - tp->t_winsize.ws_row = scp->ysize; - pgsignal(tp->t_pgrp, SIGWINCH, 1); - } - - return 0; -} - -int -sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct proc *p) -{ - scr_stat *scp; - int error; - int s; - - scp = sc_get_scr_stat(tp->t_dev); - - switch (cmd) { - - case CONS_CURRENT: /* get current adapter type */ - if (scp->adp == NULL) - return ENODEV; - *(int *)data = scp->adp->va_type; - return 0; - - case CONS_CURRENTADP: /* get current adapter index */ - *(int *)data = scp->ad; - return 0; - - case OLD_CONS_ADPINFO: /* adapter information */ - if (scp->adp == NULL) - return ENODEV; - ((old_video_adapter_t *)data)->va_index = scp->adp->va_index; - ((old_video_adapter_t *)data)->va_type = scp->adp->va_type; - ((old_video_adapter_t *)data)->va_flags = scp->adp->va_flags; - ((old_video_adapter_t *)data)->va_crtc_addr = scp->adp->va_crtc_addr; - ((old_video_adapter_t *)data)->va_window = scp->adp->va_window; - ((old_video_adapter_t *)data)->va_window_size - = scp->adp->va_window_size; - ((old_video_adapter_t *)data)->va_window_gran - = scp->adp->va_window_gran; - ((old_video_adapter_t *)data)->va_buffer = scp->adp->va_buffer; - ((old_video_adapter_t *)data)->va_buffer_size - = scp->adp->va_buffer_size; - ((old_video_adapter_t *)data)->va_mode = scp->adp->va_mode; - ((old_video_adapter_t *)data)->va_initial_mode - = scp->adp->va_initial_mode; - ((old_video_adapter_t *)data)->va_initial_bios_mode - = scp->adp->va_initial_bios_mode; - return 0; - - case CONS_ADPINFO: /* adapter information */ - if (scp->adp == NULL) - return ENODEV; - ((video_adapter_info_t *)data)->va_index = scp->adp->va_index; - ((video_adapter_info_t *)data)->va_type = scp->adp->va_type; - bcopy(scp->adp->va_name, ((video_adapter_info_t *)data)->va_name, - imin(strlen(scp->adp->va_name) + 1, - sizeof(((video_adapter_info_t *)data)->va_name))); - ((video_adapter_info_t *)data)->va_unit = scp->adp->va_unit; - ((video_adapter_info_t *)data)->va_flags = scp->adp->va_flags; - ((video_adapter_info_t *)data)->va_io_base = scp->adp->va_io_base; - ((video_adapter_info_t *)data)->va_io_size = scp->adp->va_io_size; - ((video_adapter_info_t *)data)->va_crtc_addr = scp->adp->va_crtc_addr; - ((video_adapter_info_t *)data)->va_mem_base = scp->adp->va_mem_base; - ((video_adapter_info_t *)data)->va_mem_size = scp->adp->va_mem_size; - ((video_adapter_info_t *)data)->va_window = scp->adp->va_window; - ((video_adapter_info_t *)data)->va_window_size - = scp->adp->va_window_size; - ((video_adapter_info_t *)data)->va_window_gran - = scp->adp->va_window_gran; - ((video_adapter_info_t *)data)->va_buffer = scp->adp->va_buffer; - ((video_adapter_info_t *)data)->va_buffer_size - = scp->adp->va_buffer_size; - ((video_adapter_info_t *)data)->va_mode = scp->adp->va_mode; - ((video_adapter_info_t *)data)->va_mode_flags = scp->adp->va_mode_flags; - ((video_adapter_info_t *)data)->va_initial_mode - = scp->adp->va_initial_mode; - ((video_adapter_info_t *)data)->va_initial_bios_mode - = scp->adp->va_initial_bios_mode; - return 0; - - case CONS_GET: /* get current video mode */ - *(int *)data = scp->mode; - return 0; - - case CONS_MODEINFO: /* get mode information */ - return ((*vidsw[scp->ad]->get_info)(scp->adp, - ((video_info_t *)data)->vi_mode, (video_info_t *)data) - ? ENODEV : 0); - - case CONS_FINDMODE: /* find a matching video mode */ - return ((*vidsw[scp->ad]->query_mode)(scp->adp, (video_info_t *)data) - ? ENODEV : 0); - - case CONS_SETWINORG: - return ((*vidsw[scp->ad]->set_win_org)(scp->adp, *(u_int *)data) - ? ENODEV : 0); - - /* generic text modes */ - case SW_TEXT_80x25: case SW_TEXT_80x30: - case SW_TEXT_80x43: case SW_TEXT_80x50: - case SW_TEXT_80x60: - /* FALL THROUGH */ - - /* VGA TEXT MODES */ - case SW_VGA_C40x25: - case SW_VGA_C80x25: case SW_VGA_M80x25: - case SW_VGA_C80x30: case SW_VGA_M80x30: - case SW_VGA_C80x50: case SW_VGA_M80x50: - case SW_VGA_C80x60: case SW_VGA_M80x60: - case SW_B40x25: case SW_C40x25: - case SW_B80x25: case SW_C80x25: - case SW_ENH_B40x25: case SW_ENH_C40x25: - case SW_ENH_B80x25: case SW_ENH_C80x25: - case SW_ENH_B80x43: case SW_ENH_C80x43: - case SW_EGAMONO80x25: - -#ifdef PC98 - /* PC98 TEXT MODES */ - case SW_PC98_80x25: - case SW_PC98_80x30: -#endif - if (!(scp->adp->va_flags & V_ADP_MODECHANGE)) - return ENODEV; - return sc_set_text_mode(scp, tp, cmd & 0xff, 0, 0, 0); - - /* GRAPHICS MODES */ - case SW_BG320: case SW_BG640: - case SW_CG320: case SW_CG320_D: case SW_CG640_E: - case SW_CG640x350: case SW_ENH_CG640: - case SW_BG640x480: case SW_CG640x480: case SW_VGA_CG320: - case SW_VGA_MODEX: - if (!(scp->adp->va_flags & V_ADP_MODECHANGE)) - return ENODEV; - return sc_set_graphics_mode(scp, tp, cmd & 0xff); - - case KDSETMODE: /* set current mode of this (virtual) console */ - switch (*(int *)data) { - case KD_TEXT: /* switch to TEXT (known) mode */ - /* - * If scp->mode is of graphics modes, we don't know which - * text mode to switch back to... - */ - if (scp->status & GRAPHICS_MODE) - return EINVAL; - /* restore fonts & palette ! */ -#if 0 - if (ISFONTAVAIL(scp->adp->va_flags) - && !(scp->status & (GRAPHICS_MODE | PIXEL_MODE))) - /* - * FONT KLUDGE - * Don't load fonts for now... XXX - */ - if (fonts_loaded & FONT_8) - copy_font(scp, LOAD, 8, font_8); - if (fonts_loaded & FONT_14) - copy_font(scp, LOAD, 14, font_14); - if (fonts_loaded & FONT_16) - copy_font(scp, LOAD, 16, font_16); - } -#endif - load_palette(scp->adp, palette); - - /* move hardware cursor out of the way */ - (*vidsw[scp->ad]->set_hw_cursor)(scp->adp, -1, -1); - - /* FALL THROUGH */ - - case KD_TEXT1: /* switch to TEXT (known) mode */ - /* - * If scp->mode is of graphics modes, we don't know which - * text/pixel mode to switch back to... - */ - if (scp->status & GRAPHICS_MODE) - return EINVAL; - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } -#ifndef PC98 - scp->status |= UNKNOWN_MODE; - splx(s); - /* no restore fonts & palette */ - if (scp == cur_console) - set_mode(scp); - sc_clear_screen(scp); - scp->status &= ~UNKNOWN_MODE; -#else /* PC98 */ - scp->status &= ~UNKNOWN_MODE; - /* no restore fonts & palette */ - if (scp == cur_console) - set_mode(scp); - sc_clear_screen(scp); - splx(s); -#endif /* PC98 */ - return 0; - - case KD_PIXEL: /* pixel (raster) display */ - if (!(scp->status & (GRAPHICS_MODE | PIXEL_MODE))) - return EINVAL; - if (scp->status & GRAPHICS_MODE) - return sc_set_pixel_mode(scp, tp, scp->xsize, scp->ysize, - scp->font_size); - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } - scp->status |= (UNKNOWN_MODE | PIXEL_MODE); - splx(s); - if (scp == cur_console) { - set_mode(scp); - load_palette(scp->adp, palette); - } - sc_clear_screen(scp); - scp->status &= ~UNKNOWN_MODE; - return 0; - - case KD_GRAPHICS: /* switch to GRAPHICS (unknown) mode */ - s = spltty(); - if ((error = sc_clean_up(scp))) { - splx(s); - return error; - } - scp->status |= UNKNOWN_MODE; - splx(s); -#ifdef PC98 - if (scp == cur_console) - set_mode(scp); -#endif - return 0; - - default: - return EINVAL; - } - /* NOT REACHED */ - - case KDRASTER: /* set pixel (raster) display mode */ - if (ISUNKNOWNSC(scp) || ISTEXTSC(scp)) - return ENODEV; - return sc_set_pixel_mode(scp, tp, ((int *)data)[0], ((int *)data)[1], - ((int *)data)[2]); - - case KDGETMODE: /* get current mode of this (virtual) console */ - /* - * From the user program's point of view, KD_PIXEL is the same - * as KD_TEXT... - */ - *data = ISGRAPHSC(scp) ? KD_GRAPHICS : KD_TEXT; - return 0; - - case KDSBORDER: /* set border color of this (virtual) console */ - scp->border = *data; - if (scp == cur_console) - set_border(scp, scp->border); - return 0; - } - - return ENOIOCTL; -} - -#endif /* NSC > 0 */ diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c deleted file mode 100644 index ce71733f1584f..0000000000000 --- a/sys/dev/syscons/syscons.c +++ /dev/null @@ -1,4529 +0,0 @@ -/*- - * Copyright (c) 1992-1998 Søren Schmidt - * 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, - * without modification, immediately at the beginning of the file. - * 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * $Id: syscons.c,v 1.292 1999/01/17 14:23:15 yokota Exp $ - */ - -#include "sc.h" -#include "splash.h" -#ifdef __i386__ -#include "apm.h" -#endif -#include "opt_ddb.h" -#include "opt_devfs.h" -#ifdef __i386__ -#include "opt_vesa.h" -#include "opt_vm86.h" -#endif -#include "opt_syscons.h" - -#if NSC > 0 -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/reboot.h> -#include <sys/conf.h> -#include <sys/proc.h> -#include <sys/signalvar.h> -#include <sys/tty.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#ifdef DEVFS -#include <sys/devfsext.h> -#endif - -#include <machine/bootinfo.h> -#include <machine/clock.h> -#include <machine/cons.h> -#include <machine/console.h> -#include <machine/mouse.h> -#include <machine/md_var.h> -#include <machine/psl.h> -#include <machine/frame.h> -#include <machine/pc/display.h> -#ifdef __i386__ -#include <machine/pc/vesa.h> -#include <machine/apm_bios.h> -#include <machine/random.h> -#endif - -#include <vm/vm.h> -#include <vm/vm_param.h> -#include <vm/pmap.h> - -#include <dev/kbd/kbdreg.h> -#include <dev/fb/fbreg.h> -#include <dev/fb/vgareg.h> -#include <dev/fb/splashreg.h> -#include <dev/syscons/syscons.h> - -#ifndef __i386__ -#include <isa/isareg.h> -#else -#include <i386/isa/isa.h> -#include <i386/isa/isa_device.h> -#include <i386/isa/timerreg.h> -#endif - -#if !defined(MAXCONS) -#define MAXCONS 16 -#endif - -#if !defined(SC_MAX_HISTORY_SIZE) -#define SC_MAX_HISTORY_SIZE (1000 * MAXCONS) -#endif - -#if !defined(SC_HISTORY_SIZE) -#define SC_HISTORY_SIZE (ROW * 4) -#endif - -#if (SC_HISTORY_SIZE * MAXCONS) > SC_MAX_HISTORY_SIZE -#undef SC_MAX_HISTORY_SIZE -#define SC_MAX_HISTORY_SIZE (SC_HISTORY_SIZE * MAXCONS) -#endif - -#if !defined(SC_MOUSE_CHAR) -#define SC_MOUSE_CHAR (0xd0) -#endif - -#define COLD 0 -#define WARM 1 - -#define DEFAULT_BLANKTIME (5*60) /* 5 minutes */ -#define MAX_BLANKTIME (7*24*60*60) /* 7 days!? */ - -/* for backward compatibility */ -#define OLD_CONS_MOUSECTL _IOWR('c', 10, old_mouse_info_t) - -typedef struct old_mouse_data { - int x; - int y; - int buttons; -} old_mouse_data_t; - -typedef struct old_mouse_info { - int operation; - union { - struct old_mouse_data data; - struct mouse_mode mode; - } u; -} old_mouse_info_t; - -static default_attr user_default = { - (FG_LIGHTGREY | BG_BLACK) << 8, - (FG_BLACK | BG_LIGHTGREY) << 8 -}; - -static default_attr kernel_default = { - (FG_WHITE | BG_BLACK) << 8, - (FG_BLACK | BG_LIGHTGREY) << 8 -}; - -static scr_stat main_console; -static scr_stat *console[MAXCONS]; -#ifdef DEVFS -static void *sc_devfs_token[MAXCONS]; -static void *sc_mouse_devfs_token; -static void *sc_console_devfs_token; -#endif - scr_stat *cur_console; -static scr_stat *new_scp, *old_scp; -static term_stat kernel_console; -static default_attr *current_default; -static int sc_flags; -static char init_done = COLD; -static u_short sc_buffer[ROW*COL]; -static char shutdown_in_progress = FALSE; -static char font_loading_in_progress = FALSE; -static char switch_in_progress = FALSE; -static char write_in_progress = FALSE; -static char blink_in_progress = FALSE; -static int blinkrate = 0; -static int adapter = -1; -static int keyboard = -1; -static keyboard_t *kbd; -static int delayed_next_scr = FALSE; -static long scrn_blank_time = 0; /* screen saver timeout value */ -static int scrn_blanked = FALSE; /* screen saver active flag */ -static long scrn_time_stamp; -static int saver_mode = CONS_LKM_SAVER; /* LKM/user saver */ -static int run_scrn_saver = FALSE; /* should run the saver? */ -static int scrn_idle = FALSE; /* about to run the saver */ -static int scrn_saver_failed; - u_char scr_map[256]; - u_char scr_rmap[256]; -static int initial_video_mode; /* initial video mode # */ - int fonts_loaded = 0 -#ifdef STD8X16FONT - | FONT_16 -#endif - ; - - u_char font_8[256*8]; - u_char font_14[256*14]; -#ifdef STD8X16FONT -extern -#endif - u_char font_16[256*16]; - u_char palette[256*3]; -static u_char *cut_buffer; -static int cut_buffer_size; -static int mouse_level; /* sysmouse protocol level */ -static mousestatus_t mouse_status = { 0, 0, 0, 0, 0, 0 }; -static u_short mouse_and_mask[16] = { - 0xc000, 0xe000, 0xf000, 0xf800, - 0xfc00, 0xfe00, 0xff00, 0xff80, - 0xfe00, 0x1e00, 0x1f00, 0x0f00, - 0x0f00, 0x0000, 0x0000, 0x0000 - }; -static u_short mouse_or_mask[16] = { - 0x0000, 0x4000, 0x6000, 0x7000, - 0x7800, 0x7c00, 0x7e00, 0x6800, - 0x0c00, 0x0c00, 0x0600, 0x0600, - 0x0000, 0x0000, 0x0000, 0x0000 - }; - - int sc_history_size = SC_HISTORY_SIZE; -static int extra_history_size = - SC_MAX_HISTORY_SIZE - SC_HISTORY_SIZE * MAXCONS; - -static void none_saver(int blank) { } -static void (*current_saver)(int blank) = none_saver; - d_ioctl_t *sc_user_ioctl; - -static int sticky_splash = FALSE; -static struct { - u_int8_t cursor_start; - u_int8_t cursor_end; - u_int8_t shift_state; - } bios_value; - -/* OS specific stuff */ -#ifdef not_yet_done -#define VIRTUAL_TTY(x) (sccons[x] = ttymalloc(sccons[x])) -struct CONSOLE_TTY (sccons[MAXCONS] = ttymalloc(sccons[MAXCONS])) -struct MOUSE_TTY (sccons[MAXCONS+1] = ttymalloc(sccons[MAXCONS+1])) -struct tty *sccons[MAXCONS+2]; -#else -#define VIRTUAL_TTY(x) &sccons[x] -#define CONSOLE_TTY &sccons[MAXCONS] -#define MOUSE_TTY &sccons[MAXCONS+1] -static struct tty sccons[MAXCONS+2]; -#endif -#define SC_MOUSE 128 -#define SC_CONSOLE 255 -vm_offset_t Crtat; -static const int nsccons = MAXCONS+2; - -#define WRAPHIST(scp, pointer, offset)\ - ((scp)->history + ((((pointer) - (scp)->history) + (scp)->history_size \ - + (offset)) % (scp)->history_size)) -#define ISSIGVALID(sig) ((sig) > 0 && (sig) < NSIG) - -/* some useful macros */ -#define kbd_read_char(kbd, wait) \ - (*kbdsw[(kbd)->kb_index]->read_char)((kbd), (wait)) -#define kbd_check_char(kbd) \ - (*kbdsw[(kbd)->kb_index]->check_char)((kbd)) -#define kbd_enable(kbd) \ - (*kbdsw[(kbd)->kb_index]->enable)((kbd)) -#define kbd_disable(kbd) \ - (*kbdsw[(kbd)->kb_index]->disable)((kbd)) -#define kbd_lock(kbd, lockf) \ - (*kbdsw[(kbd)->kb_index]->lock)((kbd), (lockf)) -#define kbd_ioctl(kbd, cmd, arg) \ - (((kbd) == NULL) ? \ - ENODEV : (*kbdsw[(kbd)->kb_index]->ioctl)((kbd), (cmd), (arg))) -#define kbd_clear_state(kbd) \ - (*kbdsw[(kbd)->kb_index]->clear_state)((kbd)) -#define kbd_get_fkeystr(kbd, fkey, len) \ - (*kbdsw[(kbd)->kb_index]->get_fkeystr)((kbd), (fkey), (len)) - -/* prototypes */ -static kbd_callback_func_t sckbdevent; -static int scparam(struct tty *tp, struct termios *t); -static int scvidprobe(int unit, int flags, int cons); -static int sckbdprobe(int unit, int flags, int cons); -static void scstart(struct tty *tp); -static void scmousestart(struct tty *tp); -static void scinit(void); -static void scshutdown(int howto, void *arg); -static u_int scgetc(keyboard_t *kbd, u_int flags); -#define SCGETC_CN 1 -#define SCGETC_NONBLOCK 2 -static int sccngetch(int flags); -static void sccnupdate(scr_stat *scp); -static scr_stat *alloc_scp(void); -static void init_scp(scr_stat *scp); -static void get_bios_values(void); -static void sc_bcopy(scr_stat *scp, u_short *p, int from, int to, int mark); -static int get_scr_num(void); -static timeout_t scrn_timer; -static void scrn_update(scr_stat *scp, int show_cursor); -#if NSPLASH > 0 -static int scsplash_callback(int); -static void scsplash_saver(int show); -static int add_scrn_saver(void (*this_saver)(int)); -static int remove_scrn_saver(void (*this_saver)(int)); -static int set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border); -static int restore_scrn_saver_mode(scr_stat *scp, int changemode); -static void stop_scrn_saver(void (*saver)(int)); -static int wait_scrn_saver_stop(void); -#define scsplash_stick(stick) (sticky_splash = (stick)) -#else /* !NSPLASH */ -#define stop_scrn_saver(saver) -#define wait_scrn_saver_stop() 0 -#define scsplash_stick(stick) -#endif /* NSPLASH */ -static int switch_scr(scr_stat *scp, u_int next_scr); -static void exchange_scr(void); -static void scan_esc(scr_stat *scp, u_char c); -static void ansi_put(scr_stat *scp, u_char *buf, int len); -static void draw_cursor_image(scr_stat *scp); -static void remove_cursor_image(scr_stat *scp); -static void move_crsr(scr_stat *scp, int x, int y); -static void history_to_screen(scr_stat *scp); -static int history_up_line(scr_stat *scp); -static int history_down_line(scr_stat *scp); -static int mask2attr(struct term_stat *term); -static int save_kbd_state(scr_stat *scp); -static int update_kbd_state(int state, int mask); -static int update_kbd_leds(int which); -static void set_destructive_cursor(scr_stat *scp); -static void set_mouse_pos(scr_stat *scp); -static int skip_spc_right(scr_stat *scp, u_short *p); -static int skip_spc_left(scr_stat *scp, u_short *p); -static void mouse_cut(scr_stat *scp); -static void mouse_cut_start(scr_stat *scp); -static void mouse_cut_end(scr_stat *scp); -static void mouse_cut_word(scr_stat *scp); -static void mouse_cut_line(scr_stat *scp); -static void mouse_cut_extend(scr_stat *scp); -static void mouse_paste(scr_stat *scp); -static void draw_mouse_image(scr_stat *scp); -static void remove_mouse_image(scr_stat *scp); -static void draw_cutmarking(scr_stat *scp); -static void remove_cutmarking(scr_stat *scp); -static void do_bell(scr_stat *scp, int pitch, int duration); -static timeout_t blink_screen; - -#define CDEV_MAJOR 12 - -#ifdef __i386__ - -static cn_probe_t sccnprobe; -static cn_init_t sccninit; -static cn_getc_t sccngetc; -static cn_checkc_t sccncheckc; -static cn_putc_t sccnputc; - -CONS_DRIVER(sc, sccnprobe, sccninit, sccngetc, sccncheckc, sccnputc); - -#else /* !__i386__ */ - -static cn_getc_t sccngetc; -static cn_checkc_t sccncheckc; -static cn_putc_t sccnputc; - -struct consdev sc_cons = { - NULL, NULL, sccngetc, sccncheckc, sccnputc, - NULL, makedev(CDEV_MAJOR, 0), CN_NORMAL, -}; - -#endif /* __i386__ */ - -static d_open_t scopen; -static d_close_t scclose; -static d_read_t scread; -static d_write_t scwrite; -static d_ioctl_t scioctl; -static d_mmap_t scmmap; - -struct cdevsw sc_cdevsw = { - scopen, scclose, scread, scwrite, - scioctl, nullstop, noreset, scdevtotty, - ttpoll, scmmap, nostrategy, "sc", - NULL, -1, nodump, nopsize, - D_TTY, -}; - -#ifdef __i386__ - -#define fillw_io(p, b, c) fillw((p), (void *)(b), (c)) - -#endif - -#ifdef __alpha__ - -static void -fillw(int pat, void *base, size_t cnt) -{ - u_short *sp = base; - while (cnt--) - *sp++ = pat; -} - -static void -fillw_io(int pat, u_int32_t base, size_t cnt) -{ - while (cnt--) { - writew(base, pat); - base += 2; - } -} - -#endif - -static void -draw_cursor_image(scr_stat *scp) -{ - u_short cursor_image; - vm_offset_t ptr; - u_short prev_image; - - if (ISPIXELSC(scp)) { - sc_bcopy(scp, scp->scr_buf, scp->cursor_pos - scp->scr_buf, - scp->cursor_pos - scp->scr_buf, 1); - return; - } - - ptr = scp->adp->va_window + 2*(scp->cursor_pos - scp->scr_buf); - - /* do we have a destructive cursor ? */ - if (sc_flags & CHAR_CURSOR) { - prev_image = scp->cursor_saveunder; - cursor_image = readw(ptr) & 0x00ff; - if (cursor_image == DEAD_CHAR) - cursor_image = prev_image & 0x00ff; - cursor_image |= *(scp->cursor_pos) & 0xff00; - scp->cursor_saveunder = cursor_image; - /* update the cursor bitmap if the char under the cursor has changed */ - if (prev_image != cursor_image) - set_destructive_cursor(scp); - /* modify cursor_image */ - if (!(sc_flags & BLINK_CURSOR)||((sc_flags & BLINK_CURSOR)&&(blinkrate & 4))){ - /* - * When the mouse pointer is at the same position as the cursor, - * the cursor bitmap needs to be updated even if the char under - * the cursor hasn't changed, because the mouse pionter may - * have moved by a few dots within the cursor cel. - */ - if ((prev_image == cursor_image) - && (cursor_image != *(scp->cursor_pos))) - set_destructive_cursor(scp); - cursor_image &= 0xff00; - cursor_image |= DEAD_CHAR; - } - } else { - cursor_image = (readw(ptr) & 0x00ff) | *(scp->cursor_pos) & 0xff00; - scp->cursor_saveunder = cursor_image; - if (!(sc_flags & BLINK_CURSOR)||((sc_flags & BLINK_CURSOR)&&(blinkrate & 4))){ - if ((cursor_image & 0x7000) == 0x7000) { - cursor_image &= 0x8fff; - if(!(cursor_image & 0x0700)) - cursor_image |= 0x0700; - } else { - cursor_image |= 0x7000; - if ((cursor_image & 0x0700) == 0x0700) - cursor_image &= 0xf0ff; - } - } - } - writew(ptr, cursor_image); -} - -static void -remove_cursor_image(scr_stat *scp) -{ - if (ISPIXELSC(scp)) - sc_bcopy(scp, scp->scr_buf, scp->cursor_oldpos - scp->scr_buf, - scp->cursor_oldpos - scp->scr_buf, 0); - else - writew(scp->adp->va_window + 2*(scp->cursor_oldpos - scp->scr_buf), - scp->cursor_saveunder); -} - -static void -move_crsr(scr_stat *scp, int x, int y) -{ - if (x < 0) - x = 0; - if (y < 0) - y = 0; - if (x >= scp->xsize) - x = scp->xsize-1; - if (y >= scp->ysize) - y = scp->ysize-1; - scp->xpos = x; - scp->ypos = y; - scp->cursor_pos = scp->scr_buf + scp->ypos * scp->xsize + scp->xpos; -} - -int -sc_probe_unit(int unit, int flags) -{ - if (!scvidprobe(unit, flags, FALSE)) { - if (bootverbose) - printf("sc%d: no video adapter is found.\n", unit); - return ENXIO; - } - - return ((sckbdprobe(unit, flags, FALSE)) ? 0 : ENXIO); -} - -/* probe video adapters, return TRUE if found */ -static int -scvidprobe(int unit, int flags, int cons) -{ - video_adapter_t *adp; - - /* - * Access the video adapter driver through the back door! - * Video adapter drivers need to be configured before syscons. - * However, when syscons is being probed as the low-level console, - * they have not been initialized yet. We force them to initialize - * themselves here. XXX - */ - vid_configure(cons ? VIO_PROBE_ONLY : 0); - - /* allocate a frame buffer */ - if (adapter < 0) { - adapter = vid_allocate("*", -1, (void *)&adapter); - if (adapter < 0) - return FALSE; - } - adp = vid_get_adapter(adapter); /* shouldn't fail */ - - Crtat = adp->va_window; - initial_video_mode = adp->va_initial_mode; - - return TRUE; -} - -/* probe the keyboard, return TRUE if found */ -static int -sckbdprobe(int unit, int flags, int cons) -{ - /* access the keyboard driver through the backdoor! */ - kbd_configure(cons ? KB_CONF_PROBE_ONLY : 0); - - /* allocate a keyboard and register the keyboard event handler */ - if (keyboard < 0) { - keyboard = kbd_allocate("*", -1, (void *)&keyboard, sckbdevent, NULL); - if (keyboard < 0) - return FALSE; - } - kbd = kbd_get_keyboard(keyboard); /* shouldn't fail */ - - return TRUE; -} - -#if NAPM > 0 -static int -scresume(void *dummy) -{ - if (kbd != NULL) - kbd_clear_state(kbd); - return 0; -} -#endif - -int -sc_attach_unit(int unit, int flags) -{ - scr_stat *scp; -#if defined(VESA) && defined(VM86) - video_info_t info; -#endif - dev_t cdev = makedev(CDEV_MAJOR, 0); -#ifdef DEVFS - int vc; -#endif - - scinit(); - scp = console[0]; - sc_flags = flags; - if (!ISFONTAVAIL(scp->adp->va_flags)) - sc_flags &= ~CHAR_CURSOR; - - /* copy temporary buffer to final buffer */ - scp->scr_buf = NULL; - sc_alloc_scr_buffer(scp, FALSE, FALSE); - bcopy(sc_buffer, scp->scr_buf, scp->xsize*scp->ysize*sizeof(u_short)); - - /* cut buffer is available only when the mouse pointer is used */ - if (ISMOUSEAVAIL(scp->adp->va_flags)) - sc_alloc_cut_buffer(scp, FALSE); - - /* initialize history buffer & pointers */ - sc_alloc_history_buffer(scp, sc_history_size, 0, FALSE); - -#if defined(VESA) && defined(VM86) - if ((sc_flags & VESA800X600) - && ((*vidsw[scp->ad]->get_info)(scp->adp, M_VESA_800x600, &info) == 0)) { -#if NSPLASH > 0 - splash_term(scp->adp); -#endif - sc_set_graphics_mode(scp, NULL, M_VESA_800x600); - sc_set_pixel_mode(scp, NULL, COL, ROW, 16); - initial_video_mode = M_VESA_800x600; -#if NSPLASH > 0 - /* put up the splash again! */ - splash_init(scp->adp, scsplash_callback); -#endif - } -#endif /* VESA && VM86 */ - - /* initialize cursor stuff */ - if (!ISGRAPHSC(scp)) - draw_cursor_image(scp); - - /* get screen update going */ - scrn_timer((void *)TRUE); - - /* set up the keyboard */ - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode); - update_kbd_state(scp->status, LOCK_MASK); - - if (bootverbose) { - printf("sc%d:", unit); - if (adapter >= 0) - printf(" fb%d", adapter); - if (keyboard >= 0) - printf(" kbd%d", keyboard); - printf("\n"); - } - printf("sc%d: ", unit); - switch(scp->adp->va_type) { - case KD_VGA: - printf("VGA %s", (scp->adp->va_flags & V_ADP_COLOR) ? "color" : "mono"); - break; - case KD_EGA: - printf("EGA %s", (scp->adp->va_flags & V_ADP_COLOR) ? "color" : "mono"); - break; - case KD_CGA: - printf("CGA"); - break; - case KD_MONO: - case KD_HERCULES: - default: - printf("MDA/Hercules"); - break; - } - printf(" <%d virtual consoles, flags=0x%x>\n", MAXCONS, sc_flags); - -#if NAPM > 0 - scp->r_hook.ah_fun = scresume; - scp->r_hook.ah_arg = NULL; - scp->r_hook.ah_name = "system keyboard"; - scp->r_hook.ah_order = APM_MID_ORDER; - apm_hook_establish(APM_HOOK_RESUME , &scp->r_hook); -#endif - - at_shutdown(scshutdown, NULL, SHUTDOWN_PRE_SYNC); - - cdevsw_add(&cdev, &sc_cdevsw, NULL); - -#ifdef DEVFS - for (vc = 0; vc < MAXCONS; vc++) - sc_devfs_token[vc] = devfs_add_devswf(&sc_cdevsw, vc, DV_CHR, - UID_ROOT, GID_WHEEL, 0600, "ttyv%r", vc); - sc_mouse_devfs_token = devfs_add_devswf(&sc_cdevsw, SC_MOUSE, DV_CHR, - UID_ROOT, GID_WHEEL, 0600, "sysmouse"); - sc_console_devfs_token = devfs_add_devswf(&sc_cdevsw, SC_CONSOLE, DV_CHR, - UID_ROOT, GID_WHEEL, 0600, "consolectl"); -#endif - return 0; -} - -struct tty -*scdevtotty(dev_t dev) -{ - int unit = minor(dev); - - if (init_done == COLD) - return(NULL); - if (unit == SC_CONSOLE) - return CONSOLE_TTY; - if (unit == SC_MOUSE) - return MOUSE_TTY; - if (unit >= MAXCONS || unit < 0) - return(NULL); - return VIRTUAL_TTY(unit); -} - -int -scopen(dev_t dev, int flag, int mode, struct proc *p) -{ - struct tty *tp = scdevtotty(dev); - keyarg_t key; - int s; - - if (!tp) - return(ENXIO); - - tp->t_oproc = (minor(dev) == SC_MOUSE) ? scmousestart : scstart; - tp->t_param = scparam; - tp->t_dev = dev; - if (!(tp->t_state & TS_ISOPEN)) { - ttychars(tp); - /* Use the current setting of the <-- key as default VERASE. */ - /* If the Delete key is preferable, an stty is necessary */ - key.keynum = 0x0e; /* how do we know this magic number... XXX */ - kbd_ioctl(kbd, GIO_KEYMAPENT, (caddr_t)&key); - tp->t_cc[VERASE] = key.key.map[0]; - tp->t_iflag = TTYDEF_IFLAG; - tp->t_oflag = TTYDEF_OFLAG; - tp->t_cflag = TTYDEF_CFLAG; - tp->t_lflag = TTYDEF_LFLAG; - tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED; - scparam(tp, &tp->t_termios); - (*linesw[tp->t_line].l_modem)(tp, 1); - if (minor(dev) == SC_MOUSE) - mouse_level = 0; /* XXX */ - if (minor(dev) < MAXCONS && console[minor(dev)]) { - s = spltty(); - sc_clean_up(console[minor(dev)]); - splx(s); - } - } - else - if (tp->t_state & TS_XCLUDE && p->p_ucred->cr_uid != 0) - return(EBUSY); - if (minor(dev) < MAXCONS && !console[minor(dev)]) { - console[minor(dev)] = alloc_scp(); - if (ISGRAPHSC(console[minor(dev)])) - sc_set_pixel_mode(console[minor(dev)], NULL, COL, ROW, 16); - } - if (minor(dev)<MAXCONS && !tp->t_winsize.ws_col && !tp->t_winsize.ws_row) { - tp->t_winsize.ws_col = console[minor(dev)]->xsize; - tp->t_winsize.ws_row = console[minor(dev)]->ysize; - } - return ((*linesw[tp->t_line].l_open)(dev, tp)); -} - -int -scclose(dev_t dev, int flag, int mode, struct proc *p) -{ - struct tty *tp = scdevtotty(dev); - struct scr_stat *scp; - - if (!tp) - return(ENXIO); - if (minor(dev) < MAXCONS) { - scp = sc_get_scr_stat(tp->t_dev); - if (scp->status & SWITCH_WAIT_ACQ) - wakeup((caddr_t)&scp->smode); -#if not_yet_done - if (scp == &main_console) { - scp->pid = 0; - scp->proc = NULL; - scp->smode.mode = VT_AUTO; - } - else { - free(scp->scr_buf, M_DEVBUF); - if (scp->history != NULL) { - free(scp->history, M_DEVBUF); - if (scp->history_size / scp->xsize - > imax(sc_history_size, scp->ysize)) - extra_history_size += scp->history_size / scp->xsize - - imax(sc_history_size, scp->ysize); - } - free(scp, M_DEVBUF); - console[minor(dev)] = NULL; - } -#else - scp->pid = 0; - scp->proc = NULL; - scp->smode.mode = VT_AUTO; -#endif - } - spltty(); - (*linesw[tp->t_line].l_close)(tp, flag); - ttyclose(tp); - spl0(); - return(0); -} - -int -scread(dev_t dev, struct uio *uio, int flag) -{ - struct tty *tp = scdevtotty(dev); - - if (!tp) - return(ENXIO); - return((*linesw[tp->t_line].l_read)(tp, uio, flag)); -} - -int -scwrite(dev_t dev, struct uio *uio, int flag) -{ - struct tty *tp = scdevtotty(dev); - - if (!tp) - return(ENXIO); - return((*linesw[tp->t_line].l_write)(tp, uio, flag)); -} - -static int -sckbdevent(keyboard_t *thiskbd, int event, void *arg) -{ - static struct tty *cur_tty; - int c; - size_t len; - u_char *cp; - - /* assert(thiskbd == kbd) */ - - switch (event) { - case KBDIO_KEYINPUT: - break; - case KBDIO_UNLOADING: - kbd = NULL; - kbd_release(thiskbd, (void *)&keyboard); - return 0; - default: - return EINVAL; - } - - /* - * Loop while there is still input to get from the keyboard. - * I don't think this is nessesary, and it doesn't fix - * the Xaccel-2.1 keyboard hang, but it can't hurt. XXX - */ - while ((c = scgetc(thiskbd, SCGETC_NONBLOCK)) != NOKEY) { - - cur_tty = VIRTUAL_TTY(get_scr_num()); - if (!(cur_tty->t_state & TS_ISOPEN)) - if (!((cur_tty = CONSOLE_TTY)->t_state & TS_ISOPEN)) - continue; - - switch (KEYFLAGS(c)) { - case 0x0000: /* normal key */ - (*linesw[cur_tty->t_line].l_rint)(KEYCHAR(c), cur_tty); - break; - case FKEY: /* function key, return string */ - cp = kbd_get_fkeystr(thiskbd, KEYCHAR(c), &len); - if (cp != NULL) { - while (len-- > 0) - (*linesw[cur_tty->t_line].l_rint)(*cp++, cur_tty); - } - break; - case MKEY: /* meta is active, prepend ESC */ - (*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty); - (*linesw[cur_tty->t_line].l_rint)(KEYCHAR(c), cur_tty); - break; - case BKEY: /* backtab fixed sequence (esc [ Z) */ - (*linesw[cur_tty->t_line].l_rint)(0x1b, cur_tty); - (*linesw[cur_tty->t_line].l_rint)('[', cur_tty); - (*linesw[cur_tty->t_line].l_rint)('Z', cur_tty); - break; - } - } - - if (cur_console->status & MOUSE_VISIBLE) { - remove_mouse_image(cur_console); - cur_console->status &= ~MOUSE_VISIBLE; - } - - return 0; -} - -static int -scparam(struct tty *tp, struct termios *t) -{ - tp->t_ispeed = t->c_ispeed; - tp->t_ospeed = t->c_ospeed; - tp->t_cflag = t->c_cflag; - return 0; -} - -int -scioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) -{ - u_int delta_ehs; - int error; - int i; - struct tty *tp; - scr_stat *scp; - int s; - - tp = scdevtotty(dev); - if (!tp) - return ENXIO; - scp = sc_get_scr_stat(tp->t_dev); - - /* If there is a user_ioctl function call that first */ - if (sc_user_ioctl) { - error = (*sc_user_ioctl)(dev, cmd, data, flag, p); - if (error != ENOIOCTL) - return error; - } - - error = sc_vid_ioctl(tp, cmd, data, flag, p); - if (error != ENOIOCTL) - return error; - - switch (cmd) { /* process console hardware related ioctl's */ - - case GIO_ATTR: /* get current attributes */ - *(int*)data = (scp->term.cur_attr >> 8) & 0xFF; - return 0; - - case GIO_COLOR: /* is this a color console ? */ - *(int *)data = (scp->adp->va_flags & V_ADP_COLOR) ? 1 : 0; - return 0; - - case CONS_BLANKTIME: /* set screen saver timeout (0 = no saver) */ - if (*(int *)data < 0 || *(int *)data > MAX_BLANKTIME) - return EINVAL; - s = spltty(); - scrn_blank_time = *(int *)data; - run_scrn_saver = (scrn_blank_time != 0); - splx(s); - return 0; - - case CONS_CURSORTYPE: /* set cursor type blink/noblink */ - if ((*(int*)data) & 0x01) - sc_flags |= BLINK_CURSOR; - else - sc_flags &= ~BLINK_CURSOR; - if ((*(int*)data) & 0x02) { - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - sc_flags |= CHAR_CURSOR; - } else - sc_flags &= ~CHAR_CURSOR; - /* - * The cursor shape is global property; all virtual consoles - * are affected. Update the cursor in the current console... - */ - if (!ISGRAPHSC(cur_console)) { - s = spltty(); - remove_cursor_image(cur_console); - if (sc_flags & CHAR_CURSOR) - set_destructive_cursor(cur_console); - draw_cursor_image(cur_console); - splx(s); - } - return 0; - - case CONS_BELLTYPE: /* set bell type sound/visual */ - if ((*(int *)data) & 0x01) - sc_flags |= VISUAL_BELL; - else - sc_flags &= ~VISUAL_BELL; - if ((*(int *)data) & 0x02) - sc_flags |= QUIET_BELL; - else - sc_flags &= ~QUIET_BELL; - return 0; - - case CONS_HISTORY: /* set history size */ - if (*(int *)data > 0) { - int lines; /* buffer size to allocate */ - int lines0; /* current buffer size */ - - lines = imax(*(int *)data, scp->ysize); - lines0 = (scp->history != NULL) ? - scp->history_size / scp->xsize : scp->ysize; - if (lines0 > imax(sc_history_size, scp->ysize)) - delta_ehs = lines0 - imax(sc_history_size, scp->ysize); - else - delta_ehs = 0; - /* - * syscons unconditionally allocates buffers upto SC_HISTORY_SIZE - * lines or scp->ysize lines, whichever is larger. A value - * greater than that is allowed, subject to extra_history_size. - */ - if (lines > imax(sc_history_size, scp->ysize)) - if (lines - imax(sc_history_size, scp->ysize) > - extra_history_size + delta_ehs) - return EINVAL; - if (cur_console->status & BUFFER_SAVED) - return EBUSY; - sc_alloc_history_buffer(scp, lines, delta_ehs, TRUE); - return 0; - } - else - return EINVAL; - - case CONS_MOUSECTL: /* control mouse arrow */ - case OLD_CONS_MOUSECTL: - { - /* MOUSE_BUTTON?DOWN -> MOUSE_MSC_BUTTON?UP */ - static int butmap[8] = { - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP, - MOUSE_MSC_BUTTON2UP, - MOUSE_MSC_BUTTON1UP, - 0, - }; - mouse_info_t *mouse = (mouse_info_t*)data; - mouse_info_t buf; - - /* FIXME: */ - if (!ISMOUSEAVAIL(scp->adp->va_flags)) - return ENODEV; - - if (cmd == OLD_CONS_MOUSECTL) { - static u_char swapb[] = { 0, 4, 2, 6, 1, 5, 3, 7 }; - old_mouse_info_t *old_mouse = (old_mouse_info_t *)data; - - mouse = &buf; - mouse->operation = old_mouse->operation; - switch (mouse->operation) { - case MOUSE_MODE: - mouse->u.mode = old_mouse->u.mode; - break; - case MOUSE_SHOW: - case MOUSE_HIDE: - break; - case MOUSE_MOVEABS: - case MOUSE_MOVEREL: - case MOUSE_ACTION: - mouse->u.data.x = old_mouse->u.data.x; - mouse->u.data.y = old_mouse->u.data.y; - mouse->u.data.z = 0; - mouse->u.data.buttons = swapb[old_mouse->u.data.buttons & 0x7]; - break; - case MOUSE_GETINFO: - old_mouse->u.data.x = scp->mouse_xpos; - old_mouse->u.data.y = scp->mouse_ypos; - old_mouse->u.data.buttons = swapb[scp->mouse_buttons & 0x7]; - break; - default: - return EINVAL; - } - } - - switch (mouse->operation) { - case MOUSE_MODE: - if (ISSIGVALID(mouse->u.mode.signal)) { - scp->mouse_signal = mouse->u.mode.signal; - scp->mouse_proc = p; - scp->mouse_pid = p->p_pid; - } - else { - scp->mouse_signal = 0; - scp->mouse_proc = NULL; - scp->mouse_pid = 0; - } - return 0; - - case MOUSE_SHOW: - if (ISTEXTSC(scp) && !(scp->status & MOUSE_ENABLED)) { - scp->status |= (MOUSE_ENABLED | MOUSE_VISIBLE); - scp->mouse_oldpos = scp->mouse_pos; - mark_all(scp); - return 0; - } - else - return EINVAL; - break; - - case MOUSE_HIDE: - if (ISTEXTSC(scp) && (scp->status & MOUSE_ENABLED)) { - scp->status &= ~(MOUSE_ENABLED | MOUSE_VISIBLE); - mark_all(scp); - return 0; - } - else - return EINVAL; - break; - - case MOUSE_MOVEABS: - scp->mouse_xpos = mouse->u.data.x; - scp->mouse_ypos = mouse->u.data.y; - set_mouse_pos(scp); - break; - - case MOUSE_MOVEREL: - scp->mouse_xpos += mouse->u.data.x; - scp->mouse_ypos += mouse->u.data.y; - set_mouse_pos(scp); - break; - - case MOUSE_GETINFO: - mouse->u.data.x = scp->mouse_xpos; - mouse->u.data.y = scp->mouse_ypos; - mouse->u.data.z = 0; - mouse->u.data.buttons = scp->mouse_buttons; - return 0; - - case MOUSE_ACTION: - case MOUSE_MOTION_EVENT: - /* this should maybe only be settable from /dev/consolectl SOS */ - /* send out mouse event on /dev/sysmouse */ - - mouse_status.dx += mouse->u.data.x; - mouse_status.dy += mouse->u.data.y; - mouse_status.dz += mouse->u.data.z; - if (mouse->operation == MOUSE_ACTION) - mouse_status.button = mouse->u.data.buttons; - mouse_status.flags |= - ((mouse->u.data.x || mouse->u.data.y || mouse->u.data.z) ? - MOUSE_POSCHANGED : 0) - | (mouse_status.obutton ^ mouse_status.button); - if (mouse_status.flags == 0) - return 0; - - if (ISTEXTSC(cur_console) && (cur_console->status & MOUSE_ENABLED)) - cur_console->status |= MOUSE_VISIBLE; - - if ((MOUSE_TTY)->t_state & TS_ISOPEN) { - u_char buf[MOUSE_SYS_PACKETSIZE]; - int j; - - /* the first five bytes are compatible with MouseSystems' */ - buf[0] = MOUSE_MSC_SYNC - | butmap[mouse_status.button & MOUSE_STDBUTTONS]; - j = imax(imin(mouse->u.data.x, 255), -256); - buf[1] = j >> 1; - buf[3] = j - buf[1]; - j = -imax(imin(mouse->u.data.y, 255), -256); - buf[2] = j >> 1; - buf[4] = j - buf[2]; - for (j = 0; j < MOUSE_MSC_PACKETSIZE; j++) - (*linesw[(MOUSE_TTY)->t_line].l_rint)(buf[j],MOUSE_TTY); - if (mouse_level >= 1) { /* extended part */ - j = imax(imin(mouse->u.data.z, 127), -128); - buf[5] = (j >> 1) & 0x7f; - buf[6] = (j - (j >> 1)) & 0x7f; - /* buttons 4-10 */ - buf[7] = (~mouse_status.button >> 3) & 0x7f; - for (j = MOUSE_MSC_PACKETSIZE; - j < MOUSE_SYS_PACKETSIZE; j++) - (*linesw[(MOUSE_TTY)->t_line].l_rint)(buf[j],MOUSE_TTY); - } - } - - if (cur_console->mouse_signal) { - cur_console->mouse_buttons = mouse->u.data.buttons; - /* has controlling process died? */ - if (cur_console->mouse_proc && - (cur_console->mouse_proc != pfind(cur_console->mouse_pid))){ - cur_console->mouse_signal = 0; - cur_console->mouse_proc = NULL; - cur_console->mouse_pid = 0; - } - else - psignal(cur_console->mouse_proc, cur_console->mouse_signal); - } - else if (mouse->operation == MOUSE_ACTION && cut_buffer != NULL) { - /* process button presses */ - if ((cur_console->mouse_buttons ^ mouse->u.data.buttons) && - ISTEXTSC(cur_console)) { - cur_console->mouse_buttons = mouse->u.data.buttons; - if (cur_console->mouse_buttons & MOUSE_BUTTON1DOWN) - mouse_cut_start(cur_console); - else - mouse_cut_end(cur_console); - if (cur_console->mouse_buttons & MOUSE_BUTTON2DOWN || - cur_console->mouse_buttons & MOUSE_BUTTON3DOWN) - mouse_paste(cur_console); - } - } - - if (mouse->u.data.x != 0 || mouse->u.data.y != 0) { - cur_console->mouse_xpos += mouse->u.data.x; - cur_console->mouse_ypos += mouse->u.data.y; - set_mouse_pos(cur_console); - } - - break; - - case MOUSE_BUTTON_EVENT: - if ((mouse->u.event.id & MOUSE_BUTTONS) == 0) - return EINVAL; - if (mouse->u.event.value < 0) - return EINVAL; - - if (mouse->u.event.value > 0) { - cur_console->mouse_buttons |= mouse->u.event.id; - mouse_status.button |= mouse->u.event.id; - } else { - cur_console->mouse_buttons &= ~mouse->u.event.id; - mouse_status.button &= ~mouse->u.event.id; - } - mouse_status.flags |= mouse_status.obutton ^ mouse_status.button; - if (mouse_status.flags == 0) - return 0; - - if (ISTEXTSC(cur_console) && (cur_console->status & MOUSE_ENABLED)) - cur_console->status |= MOUSE_VISIBLE; - - if ((MOUSE_TTY)->t_state & TS_ISOPEN) { - u_char buf[8]; - int i; - - buf[0] = MOUSE_MSC_SYNC - | butmap[mouse_status.button & MOUSE_STDBUTTONS]; - buf[7] = (~mouse_status.button >> 3) & 0x7f; - buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0; - for (i = 0; - i < ((mouse_level >= 1) ? MOUSE_SYS_PACKETSIZE - : MOUSE_MSC_PACKETSIZE); i++) - (*linesw[(MOUSE_TTY)->t_line].l_rint)(buf[i],MOUSE_TTY); - } - - if (cur_console->mouse_signal) { - if (cur_console->mouse_proc && - (cur_console->mouse_proc != pfind(cur_console->mouse_pid))){ - cur_console->mouse_signal = 0; - cur_console->mouse_proc = NULL; - cur_console->mouse_pid = 0; - } - else - psignal(cur_console->mouse_proc, cur_console->mouse_signal); - break; - } - - if (!ISTEXTSC(cur_console) || (cut_buffer == NULL)) - break; - - switch (mouse->u.event.id) { - case MOUSE_BUTTON1DOWN: - switch (mouse->u.event.value % 4) { - case 0: /* up */ - mouse_cut_end(cur_console); - break; - case 1: - mouse_cut_start(cur_console); - break; - case 2: - mouse_cut_word(cur_console); - break; - case 3: - mouse_cut_line(cur_console); - break; - } - break; - case MOUSE_BUTTON2DOWN: - switch (mouse->u.event.value) { - case 0: /* up */ - break; - default: - mouse_paste(cur_console); - break; - } - break; - case MOUSE_BUTTON3DOWN: - switch (mouse->u.event.value) { - case 0: /* up */ - if (!(cur_console->mouse_buttons & MOUSE_BUTTON1DOWN)) - mouse_cut_end(cur_console); - break; - default: - mouse_cut_extend(cur_console); - break; - } - break; - } - break; - - default: - return EINVAL; - } - /* make screensaver happy */ - sc_touch_scrn_saver(); - return 0; - } - - /* MOUSE_XXX: /dev/sysmouse ioctls */ - case MOUSE_GETHWINFO: /* get device information */ - { - mousehw_t *hw = (mousehw_t *)data; - - if (tp != MOUSE_TTY) - return ENOTTY; - hw->buttons = 10; /* XXX unknown */ - hw->iftype = MOUSE_IF_SYSMOUSE; - hw->type = MOUSE_MOUSE; - hw->model = MOUSE_MODEL_GENERIC; - hw->hwid = 0; - return 0; - } - - case MOUSE_GETMODE: /* get protocol/mode */ - { - mousemode_t *mode = (mousemode_t *)data; - - if (tp != MOUSE_TTY) - return ENOTTY; - mode->level = mouse_level; - switch (mode->level) { - case 0: - /* at this level, sysmouse emulates MouseSystems protocol */ - mode->protocol = MOUSE_PROTO_MSC; - mode->rate = -1; /* unknown */ - mode->resolution = -1; /* unknown */ - mode->accelfactor = 0; /* disabled */ - mode->packetsize = MOUSE_MSC_PACKETSIZE; - mode->syncmask[0] = MOUSE_MSC_SYNCMASK; - mode->syncmask[1] = MOUSE_MSC_SYNC; - break; - - case 1: - /* at this level, sysmouse uses its own protocol */ - mode->protocol = MOUSE_PROTO_SYSMOUSE; - mode->rate = -1; - mode->resolution = -1; - mode->accelfactor = 0; - mode->packetsize = MOUSE_SYS_PACKETSIZE; - mode->syncmask[0] = MOUSE_SYS_SYNCMASK; - mode->syncmask[1] = MOUSE_SYS_SYNC; - break; - } - return 0; - } - - case MOUSE_SETMODE: /* set protocol/mode */ - { - mousemode_t *mode = (mousemode_t *)data; - - if (tp != MOUSE_TTY) - return ENOTTY; - if ((mode->level < 0) || (mode->level > 1)) - return EINVAL; - mouse_level = mode->level; - return 0; - } - - case MOUSE_GETLEVEL: /* get operation level */ - if (tp != MOUSE_TTY) - return ENOTTY; - *(int *)data = mouse_level; - return 0; - - case MOUSE_SETLEVEL: /* set operation level */ - if (tp != MOUSE_TTY) - return ENOTTY; - if ((*(int *)data < 0) || (*(int *)data > 1)) - return EINVAL; - mouse_level = *(int *)data; - return 0; - - case MOUSE_GETSTATUS: /* get accumulated mouse events */ - if (tp != MOUSE_TTY) - return ENOTTY; - s = spltty(); - *(mousestatus_t *)data = mouse_status; - mouse_status.flags = 0; - mouse_status.obutton = mouse_status.button; - mouse_status.dx = 0; - mouse_status.dy = 0; - mouse_status.dz = 0; - splx(s); - return 0; - -#if notyet - case MOUSE_GETVARS: /* get internal mouse variables */ - case MOUSE_SETVARS: /* set internal mouse variables */ - if (tp != MOUSE_TTY) - return ENOTTY; - return ENODEV; -#endif - - case MOUSE_READSTATE: /* read status from the device */ - case MOUSE_READDATA: /* read data from the device */ - if (tp != MOUSE_TTY) - return ENOTTY; - return ENODEV; - - case CONS_GETINFO: /* get current (virtual) console info */ - { - vid_info_t *ptr = (vid_info_t*)data; - if (ptr->size == sizeof(struct vid_info)) { - ptr->m_num = get_scr_num(); - ptr->mv_col = scp->xpos; - ptr->mv_row = scp->ypos; - ptr->mv_csz = scp->xsize; - ptr->mv_rsz = scp->ysize; - ptr->mv_norm.fore = (scp->term.std_color & 0x0f00)>>8; - ptr->mv_norm.back = (scp->term.std_color & 0xf000)>>12; - ptr->mv_rev.fore = (scp->term.rev_color & 0x0f00)>>8; - ptr->mv_rev.back = (scp->term.rev_color & 0xf000)>>12; - ptr->mv_grfc.fore = 0; /* not supported */ - ptr->mv_grfc.back = 0; /* not supported */ - ptr->mv_ovscan = scp->border; - if (scp == cur_console) - save_kbd_state(scp); - ptr->mk_keylock = scp->status & LOCK_MASK; - return 0; - } - return EINVAL; - } - - case CONS_GETVERS: /* get version number */ - *(int*)data = 0x200; /* version 2.0 */ - return 0; - - case CONS_IDLE: /* see if the screen has been idle */ - /* - * When the screen is in the GRAPHICS_MODE or UNKNOWN_MODE, - * the user process may have been writing something on the - * screen and syscons is not aware of it. Declare the screen - * is NOT idle if it is in one of these modes. But there is - * an exception to it; if a screen saver is running in the - * graphics mode in the current screen, we should say that the - * screen has been idle. - */ - *(int *)data = scrn_idle - && (!ISGRAPHSC(cur_console) - || (cur_console->status & SAVER_RUNNING)); - return 0; - - case CONS_SAVERMODE: /* set saver mode */ - switch(*(int *)data) { - case CONS_USR_SAVER: - /* if a LKM screen saver is running, stop it first. */ - scsplash_stick(FALSE); - saver_mode = *(int *)data; - s = spltty(); - if ((error = wait_scrn_saver_stop())) { - splx(s); - return error; - } - scp->status |= SAVER_RUNNING; - scsplash_stick(TRUE); - splx(s); - break; - case CONS_LKM_SAVER: - s = spltty(); - if ((saver_mode == CONS_USR_SAVER) && (scp->status & SAVER_RUNNING)) - scp->status &= ~SAVER_RUNNING; - saver_mode = *(int *)data; - splx(s); - break; - default: - return EINVAL; - } - return 0; - - case CONS_SAVERSTART: /* immediately start/stop the screen saver */ - /* - * Note that this ioctl does not guarantee the screen saver - * actually starts or stops. It merely attempts to do so... - */ - s = spltty(); - run_scrn_saver = (*(int *)data != 0); - if (run_scrn_saver) - scrn_time_stamp -= scrn_blank_time; - splx(s); - return 0; - - case VT_SETMODE: /* set screen switcher mode */ - { - struct vt_mode *mode; - - mode = (struct vt_mode *)data; - if (ISSIGVALID(mode->relsig) && ISSIGVALID(mode->acqsig) && - ISSIGVALID(mode->frsig)) { - bcopy(data, &scp->smode, sizeof(struct vt_mode)); - if (scp->smode.mode == VT_PROCESS) { - scp->proc = p; - scp->pid = scp->proc->p_pid; - } - return 0; - } else - return EINVAL; - } - - case VT_GETMODE: /* get screen switcher mode */ - bcopy(&scp->smode, data, sizeof(struct vt_mode)); - return 0; - - case VT_RELDISP: /* screen switcher ioctl */ - switch(*(int *)data) { - case VT_FALSE: /* user refuses to release screen, abort */ - if (scp == old_scp && (scp->status & SWITCH_WAIT_REL)) { - old_scp->status &= ~SWITCH_WAIT_REL; - switch_in_progress = FALSE; - return 0; - } - return EINVAL; - - case VT_TRUE: /* user has released screen, go on */ - if (scp == old_scp && (scp->status & SWITCH_WAIT_REL)) { - scp->status &= ~SWITCH_WAIT_REL; - exchange_scr(); - if (new_scp->smode.mode == VT_PROCESS) { - new_scp->status |= SWITCH_WAIT_ACQ; - psignal(new_scp->proc, new_scp->smode.acqsig); - } - else - switch_in_progress = FALSE; - return 0; - } - return EINVAL; - - case VT_ACKACQ: /* acquire acknowledged, switch completed */ - if (scp == new_scp && (scp->status & SWITCH_WAIT_ACQ)) { - scp->status &= ~SWITCH_WAIT_ACQ; - switch_in_progress = FALSE; - return 0; - } - return EINVAL; - - default: - return EINVAL; - } - /* NOT REACHED */ - - case VT_OPENQRY: /* return free virtual console */ - for (i = 0; i < MAXCONS; i++) { - tp = VIRTUAL_TTY(i); - if (!(tp->t_state & TS_ISOPEN)) { - *(int *)data = i + 1; - return 0; - } - } - return EINVAL; - - case VT_ACTIVATE: /* switch to screen *data */ - s = spltty(); - sc_clean_up(cur_console); - splx(s); - return switch_scr(scp, *(int *)data - 1); - - case VT_WAITACTIVE: /* wait for switch to occur */ - if (*(int *)data > MAXCONS || *(int *)data < 0) - return EINVAL; - s = spltty(); - error = sc_clean_up(cur_console); - splx(s); - if (error) - return error; - if (minor(dev) == *(int *)data - 1) - return 0; - if (*(int *)data == 0) { - if (scp == cur_console) - return 0; - } - else - scp = console[*(int *)data - 1]; - while ((error=tsleep((caddr_t)&scp->smode, PZERO|PCATCH, - "waitvt", 0)) == ERESTART) ; - return error; - - case VT_GETACTIVE: - *(int *)data = get_scr_num()+1; - return 0; - - case KDENABIO: /* allow io operations */ - error = suser(p->p_ucred, &p->p_acflag); - if (error != 0) - return error; - if (securelevel > 0) - return EPERM; -#ifdef __i386__ - p->p_md.md_regs->tf_eflags |= PSL_IOPL; -#endif - return 0; - - case KDDISABIO: /* disallow io operations (default) */ -#ifdef __i386__ - p->p_md.md_regs->tf_eflags &= ~PSL_IOPL; -#endif - return 0; - - case KDSKBSTATE: /* set keyboard state (locks) */ - if (*(int *)data & ~LOCK_MASK) - return EINVAL; - scp->status &= ~LOCK_MASK; - scp->status |= *(int *)data; - if (scp == cur_console) - update_kbd_state(scp->status, LOCK_MASK); - return 0; - - case KDGKBSTATE: /* get keyboard state (locks) */ - if (scp == cur_console) - save_kbd_state(scp); - *(int *)data = scp->status & LOCK_MASK; - return 0; - - case KDSETRAD: /* set keyboard repeat & delay rates */ - if (*(int *)data & ~0x7f) - return EINVAL; - error = kbd_ioctl(kbd, KDSETRAD, data); - if (error == ENOIOCTL) - error = ENODEV; - return error; - - case KDSKBMODE: /* set keyboard mode */ - switch (*(int *)data) { - case K_XLATE: /* switch to XLT ascii mode */ - case K_RAW: /* switch to RAW scancode mode */ - case K_CODE: /* switch to CODE mode */ - scp->kbd_mode = *(int *)data; - if (scp == cur_console) - kbd_ioctl(kbd, cmd, data); - return 0; - default: - return EINVAL; - } - /* NOT REACHED */ - - case KDGKBMODE: /* get keyboard mode */ - *(int *)data = scp->kbd_mode; - return 0; - - case KDGKBINFO: - error = kbd_ioctl(kbd, cmd, data); - if (error == ENOIOCTL) - error = ENODEV; - return error; - - case KDMKTONE: /* sound the bell */ - if (*(int*)data) - do_bell(scp, (*(int*)data)&0xffff, - (((*(int*)data)>>16)&0xffff)*hz/1000); - else - do_bell(scp, scp->bell_pitch, scp->bell_duration); - return 0; - - case KIOCSOUND: /* make tone (*data) hz */ -#ifdef __i386__ - if (scp == cur_console) { - if (*(int*)data) { - int pitch = timer_freq / *(int*)data; - - /* set command for counter 2, 2 byte write */ - if (acquire_timer2(TIMER_16BIT|TIMER_SQWAVE)) - return EBUSY; - - /* set pitch */ - outb(TIMER_CNTR2, pitch); - outb(TIMER_CNTR2, (pitch>>8)); - - /* enable counter 2 output to speaker */ - outb(IO_PPI, inb(IO_PPI) | 3); - } - else { - /* disable counter 2 output to speaker */ - outb(IO_PPI, inb(IO_PPI) & 0xFC); - release_timer2(); - } - } -#endif /* __i386__ */ - return 0; - - case KDGKBTYPE: /* get keyboard type */ - error = kbd_ioctl(kbd, cmd, data); - if (error == ENOIOCTL) { - /* always return something? XXX */ - *(int *)data = 0; - } - return 0; - - case KDSETLED: /* set keyboard LED status */ - if (*(int *)data & ~LED_MASK) /* FIXME: LOCK_MASK? */ - return EINVAL; - scp->status &= ~LED_MASK; - scp->status |= *(int *)data; - if (scp == cur_console) - update_kbd_leds(scp->status); - return 0; - - case KDGETLED: /* get keyboard LED status */ - if (scp == cur_console) - save_kbd_state(scp); - *(int *)data = scp->status & LED_MASK; - return 0; - - case CONS_SETKBD: /* set the new keyboard */ - { - keyboard_t *newkbd; - - s = spltty(); - newkbd = kbd_get_keyboard(*(int *)data); - if (newkbd == NULL) { - splx(s); - return EINVAL; - } - error = 0; - if (kbd != newkbd) { - i = kbd_allocate(newkbd->kb_name, newkbd->kb_unit, - (void *)&keyboard, sckbdevent, NULL); - /* i == newkbd->kb_index */ - if (i >= 0) { - if (kbd != NULL) { - save_kbd_state(cur_console); - kbd_release(kbd, (void *)&keyboard); - } - kbd = kbd_get_keyboard(i); /* kbd == newkbd */ - keyboard = i; - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); - update_kbd_state(cur_console->status, LOCK_MASK); - } else { - error = EPERM; /* XXX */ - } - } - splx(s); - return error; - } - - case CONS_RELKBD: /* release the current keyboard */ - s = spltty(); - error = 0; - if (kbd != NULL) { - save_kbd_state(cur_console); - error = kbd_release(kbd, (void *)&keyboard); - if (error == 0) { - kbd = NULL; - keyboard = -1; - } - } - splx(s); - return error; - - case GIO_SCRNMAP: /* get output translation table */ - bcopy(&scr_map, data, sizeof(scr_map)); - return 0; - - case PIO_SCRNMAP: /* set output translation table */ - bcopy(data, &scr_map, sizeof(scr_map)); - for (i=0; i<sizeof(scr_map); i++) - scr_rmap[scr_map[i]] = i; - return 0; - - case GIO_KEYMAP: /* get keyboard translation table */ - case PIO_KEYMAP: /* set keyboard translation table */ - case GIO_DEADKEYMAP: /* get accent key translation table */ - case PIO_DEADKEYMAP: /* set accent key translation table */ - case GETFKEY: /* get function key string */ - case SETFKEY: /* set function key string */ - error = kbd_ioctl(kbd, cmd, data); - if (error == ENOIOCTL) - error = ENODEV; - return error; - - case PIO_FONT8x8: /* set 8x8 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - bcopy(data, font_8, 8*256); - fonts_loaded |= FONT_8; - /* - * FONT KLUDGE - * Always use the font page #0. XXX - * Don't load if the current font size is not 8x8. - */ - if (ISTEXTSC(cur_console) && (cur_console->font_size < 14)) - copy_font(cur_console, LOAD, 8, font_8); - return 0; - - case GIO_FONT8x8: /* get 8x8 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - if (fonts_loaded & FONT_8) { - bcopy(font_8, data, 8*256); - return 0; - } - else - return ENXIO; - - case PIO_FONT8x14: /* set 8x14 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - bcopy(data, font_14, 14*256); - fonts_loaded |= FONT_14; - /* - * FONT KLUDGE - * Always use the font page #0. XXX - * Don't load if the current font size is not 8x14. - */ - if (ISTEXTSC(cur_console) - && (cur_console->font_size >= 14) && (cur_console->font_size < 16)) - copy_font(cur_console, LOAD, 14, font_14); - return 0; - - case GIO_FONT8x14: /* get 8x14 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - if (fonts_loaded & FONT_14) { - bcopy(font_14, data, 14*256); - return 0; - } - else - return ENXIO; - - case PIO_FONT8x16: /* set 8x16 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - bcopy(data, font_16, 16*256); - fonts_loaded |= FONT_16; - /* - * FONT KLUDGE - * Always use the font page #0. XXX - * Don't load if the current font size is not 8x16. - */ - if (ISTEXTSC(cur_console) && (cur_console->font_size >= 16)) - copy_font(cur_console, LOAD, 16, font_16); - return 0; - - case GIO_FONT8x16: /* get 8x16 dot font */ - if (!ISFONTAVAIL(scp->adp->va_flags)) - return ENXIO; - if (fonts_loaded & FONT_16) { - bcopy(font_16, data, 16*256); - return 0; - } - else - return ENXIO; - default: - break; - } - - error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p); - if (error != ENOIOCTL) - return(error); - error = ttioctl(tp, cmd, data, flag); - if (error != ENOIOCTL) - return(error); - return(ENOTTY); -} - -static void -scstart(struct tty *tp) -{ - struct clist *rbp; - int s, len; - u_char buf[PCBURST]; - scr_stat *scp = sc_get_scr_stat(tp->t_dev); - - if (scp->status & SLKED || blink_in_progress) - return; /* XXX who repeats the call when the above flags are cleared? */ - s = spltty(); - if (!(tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))) { - tp->t_state |= TS_BUSY; - rbp = &tp->t_outq; - while (rbp->c_cc) { - len = q_to_b(rbp, buf, PCBURST); - splx(s); - ansi_put(scp, buf, len); - s = spltty(); - } - tp->t_state &= ~TS_BUSY; - ttwwakeup(tp); - } - splx(s); -} - -static void -scmousestart(struct tty *tp) -{ - struct clist *rbp; - int s; - u_char buf[PCBURST]; - - s = spltty(); - if (!(tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))) { - tp->t_state |= TS_BUSY; - rbp = &tp->t_outq; - while (rbp->c_cc) { - q_to_b(rbp, buf, PCBURST); - } - tp->t_state &= ~TS_BUSY; - ttwwakeup(tp); - } - splx(s); -} - -#if __i386__ - -/* XXX kludge! */ -extern struct isa_driver scdriver; - -static void -sccnprobe(struct consdev *cp) -{ - struct isa_device *dvp; - - /* - * Take control if we are the highest priority enabled display device. - */ - dvp = find_display(); - if (dvp == NULL || dvp->id_driver != &scdriver) { - cp->cn_pri = CN_DEAD; - return; - } - - if (!scvidprobe(dvp->id_unit, dvp->id_flags, TRUE)) { - cp->cn_pri = CN_DEAD; - return; - } - sckbdprobe(dvp->id_unit, dvp->id_flags, TRUE); - - /* initialize required fields */ - cp->cn_dev = makedev(CDEV_MAJOR, SC_CONSOLE); - cp->cn_pri = CN_INTERNAL; -} - -static void -sccninit(struct consdev *cp) -{ - scinit(); -} - -#else /* !__i386__ */ - -extern struct consdev *cn_tab; - -void -sccnattach(void) -{ - if (!scvidprobe(0, 0, TRUE) || !sckbdprobe(0, 0, TRUE)) { - return; - } - - scinit(); - cn_tab = &sc_cons; -} - -#endif /* __i386__ */ - -static void -sccnputc(dev_t dev, int c) -{ - u_char buf[1]; - scr_stat *scp = console[0]; - term_stat save = scp->term; - u_short *p; - int s; - int i; - - if (scp == cur_console && scp->status & SLKED) { - scp->status &= ~SLKED; - update_kbd_state(scp->status, SLKED); - if (cur_console->status & BUFFER_SAVED) { - p = cur_console->history_save; - for (i = 0; i < cur_console->ysize; ++i) { - bcopy(p, cur_console->scr_buf + (cur_console->xsize*i), - cur_console->xsize*sizeof(u_short)); - p += cur_console->xsize; - if (p + cur_console->xsize - > cur_console->history + cur_console->history_size) - p = cur_console->history; - } - cur_console->status &= ~BUFFER_SAVED; - cur_console->history_head = cur_console->history_save; - cur_console->status |= CURSOR_ENABLED; - mark_all(cur_console); - } -#if 1 /* XXX */ - scstart(VIRTUAL_TTY(get_scr_num())); -#endif - } - - scp->term = kernel_console; - current_default = &kernel_default; - if (scp == cur_console && !ISGRAPHSC(scp)) - remove_cursor_image(scp); - buf[0] = c; - ansi_put(scp, buf, 1); - kernel_console = scp->term; - current_default = &user_default; - scp->term = save; - - s = spltty(); /* block sckbdevent and scrn_timer */ - sccnupdate(scp); - splx(s); -} - -static int -sccngetc(dev_t dev) -{ - return sccngetch(0); -} - -static int -sccncheckc(dev_t dev) -{ - return sccngetch(SCGETC_NONBLOCK); -} - -static int -sccngetch(int flags) -{ - int cur_mode; - int s = spltty(); /* block sckbdevent and scrn_timer while we poll */ - int c; - - /* - * Stop the screen saver and update the screen if necessary. - * What if we have been running in the screen saver code... XXX - */ - sc_touch_scrn_saver(); - sccnupdate(cur_console); - - if (kbd == NULL) { - splx(s); - return -1; - } - - /* - * Make sure the keyboard is accessible even when the kbd device - * driver is disabled. - */ - kbd_enable(kbd); - - /* we shall always use the keyboard in the XLATE mode here */ - cur_mode = cur_console->kbd_mode; - cur_console->kbd_mode = K_XLATE; - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); - - c = scgetc(kbd, SCGETC_CN | flags); - - cur_console->kbd_mode = cur_mode; - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); - kbd_disable(kbd); - splx(s); - - switch (KEYFLAGS(c)) { - case 0: /* normal char */ - return KEYCHAR(c); - case FKEY: /* function key */ - return c; /* XXX */ - case NOKEY: - case ERRKEY: - default: - return -1; - } - /* NOT REACHED */ -} - -static void -sccnupdate(scr_stat *scp) -{ - /* this is a cut-down version of scrn_timer()... */ - - if (font_loading_in_progress) - return; - - if (panicstr || shutdown_in_progress) { - sc_touch_scrn_saver(); - } else if (scp != cur_console) { - return; - } - - if (!run_scrn_saver) - scrn_idle = FALSE; - if ((saver_mode != CONS_LKM_SAVER) || !scrn_idle) - if (scrn_blanked) - stop_scrn_saver(current_saver); - - if (scp != cur_console || blink_in_progress || switch_in_progress) - return; - - if (!ISGRAPHSC(scp) && !(scp->status & SAVER_RUNNING)) - scrn_update(scp, TRUE); -} - -scr_stat -*sc_get_scr_stat(dev_t dev) -{ - int unit = minor(dev); - - if (unit == SC_CONSOLE) - return console[0]; - if (unit >= MAXCONS || unit < 0) - return(NULL); - return console[unit]; -} - -static int -get_scr_num() -{ - int i = 0; - - while ((i < MAXCONS) && (cur_console != console[i])) - i++; - return i < MAXCONS ? i : 0; -} - -static void -scrn_timer(void *arg) -{ - static int kbd_interval = 0; - struct timeval tv; - scr_stat *scp; - int s; - - /* don't do anything when we are touching font */ - if (font_loading_in_progress) { - if (arg) - timeout(scrn_timer, (void *)TRUE, hz / 10); - return; - } - s = spltty(); - - if ((kbd == NULL) && (sc_flags & AUTODETECT_KBD)) { - /* try to allocate a keyboard automatically */ - if (++kbd_interval >= 25) { - keyboard = kbd_allocate("*", -1, (void *)&keyboard, - sckbdevent, NULL); - if (keyboard >= 0) { - kbd = kbd_get_keyboard(keyboard); - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&cur_console->kbd_mode); - update_kbd_state(cur_console->status, LOCK_MASK); - } - kbd_interval = 0; - } - } - - /* should we stop the screen saver? */ - getmicrouptime(&tv); - if (panicstr || shutdown_in_progress) - sc_touch_scrn_saver(); - if (run_scrn_saver) { - scrn_idle = (tv.tv_sec > scrn_time_stamp + scrn_blank_time); - } else { - scrn_time_stamp = tv.tv_sec; - scrn_idle = FALSE; - if (scrn_blank_time > 0) - run_scrn_saver = TRUE; - } - if ((saver_mode != CONS_LKM_SAVER) || !scrn_idle) - if (scrn_blanked) - stop_scrn_saver(current_saver); - - /* should we just return ? */ - if (blink_in_progress || switch_in_progress) { - if (arg) - timeout(scrn_timer, (void *)TRUE, hz / 10); - splx(s); - return; - } - - /* Update the screen */ - scp = cur_console; - if (!ISGRAPHSC(scp) && !(scp->status & SAVER_RUNNING)) - scrn_update(scp, TRUE); - - /* should we activate the screen saver? */ - if ((saver_mode == CONS_LKM_SAVER) && scrn_idle) - if (!ISGRAPHSC(scp) || scrn_blanked) - (*current_saver)(TRUE); - - if (arg) - timeout(scrn_timer, (void *)TRUE, hz / 25); - splx(s); -} - -static void -scrn_update(scr_stat *scp, int show_cursor) -{ - /* update screen image */ - if (scp->start <= scp->end) - sc_bcopy(scp, scp->scr_buf, scp->start, scp->end, 0); - - /* we are not to show the cursor and the mouse pointer... */ - if (!show_cursor) { - scp->end = 0; - scp->start = scp->xsize*scp->ysize - 1; - return; - } - - /* update "pseudo" mouse pointer image */ - if (scp->status & MOUSE_VISIBLE) { - /* did mouse move since last time ? */ - if (scp->status & MOUSE_MOVED) { - /* do we need to remove old mouse pointer image ? */ - if (scp->mouse_cut_start != NULL || - (scp->mouse_pos-scp->scr_buf) <= scp->start || - (scp->mouse_pos+scp->xsize + 1 - scp->scr_buf) >= scp->end) { - remove_mouse_image(scp); - } - scp->status &= ~MOUSE_MOVED; - draw_mouse_image(scp); - } - else { - /* mouse didn't move, has it been overwritten ? */ - if ((scp->mouse_pos+scp->xsize + 1 - scp->scr_buf) >= scp->start && - (scp->mouse_pos - scp->scr_buf) <= scp->end) { - draw_mouse_image(scp); - } - } - } - - /* update cursor image */ - if (scp->status & CURSOR_ENABLED) { - /* did cursor move since last time ? */ - if (scp->cursor_pos != scp->cursor_oldpos) { - /* do we need to remove old cursor image ? */ - if ((scp->cursor_oldpos - scp->scr_buf) < scp->start || - ((scp->cursor_oldpos - scp->scr_buf) > scp->end)) { - remove_cursor_image(scp); - } - scp->cursor_oldpos = scp->cursor_pos; - draw_cursor_image(scp); - } - else { - /* cursor didn't move, has it been overwritten ? */ - if (scp->cursor_pos - scp->scr_buf >= scp->start && - scp->cursor_pos - scp->scr_buf <= scp->end) { - draw_cursor_image(scp); - } else { - /* if its a blinking cursor, we may have to update it */ - if (sc_flags & BLINK_CURSOR) - draw_cursor_image(scp); - } - } - blinkrate++; - } - - if (scp->mouse_cut_start != NULL) - draw_cutmarking(scp); - - scp->end = 0; - scp->start = scp->xsize*scp->ysize - 1; -} - -#if NSPLASH > 0 - -static int -scsplash_callback(int event) -{ - int error; - - switch (event) { - case SPLASH_INIT: - scrn_saver_failed = FALSE; - if (add_scrn_saver(scsplash_saver) == 0) { - run_scrn_saver = TRUE; - if (cold && !(boothowto & (RB_VERBOSE | RB_CONFIG))) { - scsplash_stick(TRUE); - (*current_saver)(TRUE); - } - } - return 0; - - case SPLASH_TERM: - if (current_saver == scsplash_saver) { - scsplash_stick(FALSE); - error = remove_scrn_saver(scsplash_saver); - if (error) - return error; - } - return 0; - - default: - return EINVAL; - } -} - -static void -scsplash_saver(int show) -{ - static int busy = FALSE; - scr_stat *scp; - - if (busy) - return; - busy = TRUE; - - scp = cur_console; - if (show) { - if (!scrn_saver_failed) { - if (!scrn_blanked) - set_scrn_saver_mode(scp, -1, NULL, 0); - switch (splash(scp->adp, TRUE)) { - case 0: /* succeeded */ - scrn_blanked = TRUE; - break; - case EAGAIN: /* try later */ - restore_scrn_saver_mode(scp, FALSE); - break; - default: - scrn_saver_failed = TRUE; - scsplash_stick(FALSE); - printf("scsplash_saver(): failed to put up the image\n"); - restore_scrn_saver_mode(scp, TRUE); - break; - } - } - } else if (!sticky_splash) { - if (scrn_blanked && (splash(scp->adp, FALSE) == 0)) { - restore_scrn_saver_mode(scp, TRUE); - scrn_blanked = FALSE; - } - } - busy = FALSE; -} - -static int -add_scrn_saver(void (*this_saver)(int)) -{ - int error; - - if (current_saver != none_saver) { - error = remove_scrn_saver(current_saver); - if (error) - return error; - } - - run_scrn_saver = FALSE; - saver_mode = CONS_LKM_SAVER; - current_saver = this_saver; - return 0; -} - -static int -remove_scrn_saver(void (*this_saver)(int)) -{ - if (current_saver != this_saver) - return EINVAL; - - /* - * In order to prevent `current_saver' from being called by - * the timeout routine `scrn_timer()' while we manipulate - * the saver list, we shall set `current_saver' to `none_saver' - * before stopping the current saver, rather than blocking by `splXX()'. - */ - current_saver = none_saver; - if (scrn_blanked) - stop_scrn_saver(this_saver); - - return (scrn_blanked ? EBUSY : 0); -} - -static int -set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border) -{ - int s; - - /* assert(scp == cur_console) */ - s = spltty(); - scp->splash_save_mode = scp->mode; - scp->splash_save_status = scp->status & (GRAPHICS_MODE | PIXEL_MODE); - scp->status &= ~(GRAPHICS_MODE | PIXEL_MODE); - scp->status |= (UNKNOWN_MODE | SAVER_RUNNING); - splx(s); - if (mode < 0) - return 0; - scp->mode = mode; - if (set_mode(scp) == 0) { - if (scp->adp->va_mode_flags & V_INFO_GRAPHICS) - scp->status |= GRAPHICS_MODE; - if (pal != NULL) - load_palette(scp->adp, pal); - set_border(scp, border); - return 0; - } else { - s = spltty(); - scp->mode = scp->splash_save_mode; - scp->status &= ~(UNKNOWN_MODE | SAVER_RUNNING); - scp->status |= scp->splash_save_status; - splx(s); - return 1; - } -} - -static int -restore_scrn_saver_mode(scr_stat *scp, int changemode) -{ - int mode; - int status; - int s; - - /* assert(scp == cur_console) */ - s = spltty(); - mode = scp->mode; - status = scp->status; - scp->mode = scp->splash_save_mode; - scp->status &= ~(UNKNOWN_MODE | SAVER_RUNNING); - scp->status |= scp->splash_save_status; - if (!changemode) { - splx(s); - return 0; - } - if (set_mode(scp) == 0) { - load_palette(scp->adp, palette); - splx(s); - return 0; - } else { - scp->mode = mode; - scp->status = status; - splx(s); - return 1; - } -} - -static void -stop_scrn_saver(void (*saver)(int)) -{ - (*saver)(FALSE); - run_scrn_saver = FALSE; - /* the screen saver may have chosen not to stop after all... */ - if (scrn_blanked) - return; - - mark_all(cur_console); - if (delayed_next_scr) - switch_scr(cur_console, delayed_next_scr - 1); - wakeup((caddr_t)&scrn_blanked); -} - -static int -wait_scrn_saver_stop(void) -{ - int error = 0; - - while (scrn_blanked) { - run_scrn_saver = FALSE; - error = tsleep((caddr_t)&scrn_blanked, PZERO | PCATCH, "scrsav", 0); - run_scrn_saver = FALSE; - if (error != ERESTART) - break; - } - return error; -} - -#endif /* NSPLASH */ - -void -sc_touch_scrn_saver(void) -{ - scsplash_stick(FALSE); - run_scrn_saver = FALSE; -} - -void -sc_clear_screen(scr_stat *scp) -{ - move_crsr(scp, 0, 0); - scp->cursor_oldpos = scp->cursor_pos; - fillw(scp->term.cur_color | scr_map[0x20], scp->scr_buf, - scp->xsize * scp->ysize); - mark_all(scp); - remove_cutmarking(scp); -} - -static int -switch_scr(scr_stat *scp, u_int next_scr) -{ - /* delay switch if actively updating screen */ - if (scrn_blanked || write_in_progress || blink_in_progress) { - delayed_next_scr = next_scr+1; - sc_touch_scrn_saver(); - return 0; - } - - if (switch_in_progress && (cur_console->proc != pfind(cur_console->pid))) - switch_in_progress = FALSE; - - if (next_scr >= MAXCONS || switch_in_progress || - (cur_console->smode.mode == VT_AUTO && ISGRAPHSC(cur_console))) { - do_bell(scp, BELL_PITCH, BELL_DURATION); - return EINVAL; - } - - /* is the wanted virtual console open ? */ - if (next_scr) { - struct tty *tp = VIRTUAL_TTY(next_scr); - if (!(tp->t_state & TS_ISOPEN)) { - do_bell(scp, BELL_PITCH, BELL_DURATION); - return EINVAL; - } - } - - switch_in_progress = TRUE; - old_scp = cur_console; - new_scp = console[next_scr]; - wakeup((caddr_t)&new_scp->smode); - if (new_scp == old_scp) { - switch_in_progress = FALSE; - delayed_next_scr = FALSE; - return 0; - } - - /* has controlling process died? */ - if (old_scp->proc && (old_scp->proc != pfind(old_scp->pid))) - old_scp->smode.mode = VT_AUTO; - if (new_scp->proc && (new_scp->proc != pfind(new_scp->pid))) - new_scp->smode.mode = VT_AUTO; - - /* check the modes and switch appropriately */ - if (old_scp->smode.mode == VT_PROCESS) { - old_scp->status |= SWITCH_WAIT_REL; - psignal(old_scp->proc, old_scp->smode.relsig); - } - else { - exchange_scr(); - if (new_scp->smode.mode == VT_PROCESS) { - new_scp->status |= SWITCH_WAIT_ACQ; - psignal(new_scp->proc, new_scp->smode.acqsig); - } - else - switch_in_progress = FALSE; - } - return 0; -} - -static void -exchange_scr(void) -{ - /* save the current state of video and keyboard */ - move_crsr(old_scp, old_scp->xpos, old_scp->ypos); - if (old_scp->kbd_mode == K_XLATE) - save_kbd_state(old_scp); - - /* set up the video for the new screen */ - cur_console = new_scp; - if (old_scp->mode != new_scp->mode || ISUNKNOWNSC(old_scp)) - set_mode(new_scp); - move_crsr(new_scp, new_scp->xpos, new_scp->ypos); - if (ISTEXTSC(new_scp) && (sc_flags & CHAR_CURSOR)) - set_destructive_cursor(new_scp); - if (ISGRAPHSC(old_scp)) - load_palette(new_scp->adp, palette); - set_border(new_scp, new_scp->border); - - /* set up the keyboard for the new screen */ - if (old_scp->kbd_mode != new_scp->kbd_mode) - kbd_ioctl(kbd, KDSKBMODE, (caddr_t)&new_scp->kbd_mode); - update_kbd_state(new_scp->status, LOCK_MASK); - - delayed_next_scr = FALSE; - mark_all(new_scp); -} - -static void -scan_esc(scr_stat *scp, u_char c) -{ - static u_char ansi_col[16] = - {0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15}; - int i, n; - u_short *src, *dst, count; - - if (scp->term.esc == 1) { /* seen ESC */ - switch (c) { - - case '7': /* Save cursor position */ - scp->saved_xpos = scp->xpos; - scp->saved_ypos = scp->ypos; - break; - - case '8': /* Restore saved cursor position */ - if (scp->saved_xpos >= 0 && scp->saved_ypos >= 0) - move_crsr(scp, scp->saved_xpos, scp->saved_ypos); - break; - - case '[': /* Start ESC [ sequence */ - scp->term.esc = 2; - scp->term.last_param = -1; - for (i = scp->term.num_param; i < MAX_ESC_PAR; i++) - scp->term.param[i] = 1; - scp->term.num_param = 0; - return; - - case 'M': /* Move cursor up 1 line, scroll if at top */ - if (scp->ypos > 0) - move_crsr(scp, scp->xpos, scp->ypos - 1); - else { - bcopy(scp->scr_buf, scp->scr_buf + scp->xsize, - (scp->ysize - 1) * scp->xsize * sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], - scp->scr_buf, scp->xsize); - mark_all(scp); - } - break; -#if notyet - case 'Q': - scp->term.esc = 4; - return; -#endif - case 'c': /* Clear screen & home */ - sc_clear_screen(scp); - break; - - case '(': /* iso-2022: designate 94 character set to G0 */ - scp->term.esc = 5; - return; - } - } - else if (scp->term.esc == 2) { /* seen ESC [ */ - if (c >= '0' && c <= '9') { - if (scp->term.num_param < MAX_ESC_PAR) { - if (scp->term.last_param != scp->term.num_param) { - scp->term.last_param = scp->term.num_param; - scp->term.param[scp->term.num_param] = 0; - } - else - scp->term.param[scp->term.num_param] *= 10; - scp->term.param[scp->term.num_param] += c - '0'; - return; - } - } - scp->term.num_param = scp->term.last_param + 1; - switch (c) { - - case ';': - if (scp->term.num_param < MAX_ESC_PAR) - return; - break; - - case '=': - scp->term.esc = 3; - scp->term.last_param = -1; - for (i = scp->term.num_param; i < MAX_ESC_PAR; i++) - scp->term.param[i] = 1; - scp->term.num_param = 0; - return; - - case 'A': /* up n rows */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos, scp->ypos - n); - break; - - case 'B': /* down n rows */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos, scp->ypos + n); - break; - - case 'C': /* right n columns */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos + n, scp->ypos); - break; - - case 'D': /* left n columns */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos - n, scp->ypos); - break; - - case 'E': /* cursor to start of line n lines down */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, 0, scp->ypos + n); - break; - - case 'F': /* cursor to start of line n lines up */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, 0, scp->ypos - n); - break; - - case 'f': /* Cursor move */ - case 'H': - if (scp->term.num_param == 0) - move_crsr(scp, 0, 0); - else if (scp->term.num_param == 2) - move_crsr(scp, scp->term.param[1] - 1, scp->term.param[0] - 1); - break; - - case 'J': /* Clear all or part of display */ - if (scp->term.num_param == 0) - n = 0; - else - n = scp->term.param[0]; - switch (n) { - case 0: /* clear form cursor to end of display */ - fillw(scp->term.cur_color | scr_map[0x20], - scp->cursor_pos, - scp->scr_buf + scp->xsize * scp->ysize - scp->cursor_pos); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, scp->xsize * scp->ysize - 1); - remove_cutmarking(scp); - break; - case 1: /* clear from beginning of display to cursor */ - fillw(scp->term.cur_color | scr_map[0x20], - scp->scr_buf, - scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, 0); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - remove_cutmarking(scp); - break; - case 2: /* clear entire display */ - fillw(scp->term.cur_color | scr_map[0x20], scp->scr_buf, - scp->xsize * scp->ysize); - mark_all(scp); - remove_cutmarking(scp); - break; - } - break; - - case 'K': /* Clear all or part of line */ - if (scp->term.num_param == 0) - n = 0; - else - n = scp->term.param[0]; - switch (n) { - case 0: /* clear form cursor to end of line */ - fillw(scp->term.cur_color | scr_map[0x20], - scp->cursor_pos, - scp->xsize - scp->xpos); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf + - scp->xsize - 1 - scp->xpos); - break; - case 1: /* clear from beginning of line to cursor */ - fillw(scp->term.cur_color | scr_map[0x20], - scp->cursor_pos - scp->xpos, - scp->xpos + 1); - mark_for_update(scp, scp->ypos * scp->xsize); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - break; - case 2: /* clear entire line */ - fillw(scp->term.cur_color | scr_map[0x20], - scp->cursor_pos - scp->xpos, - scp->xsize); - mark_for_update(scp, scp->ypos * scp->xsize); - mark_for_update(scp, (scp->ypos + 1) * scp->xsize - 1); - break; - } - break; - - case 'L': /* Insert n lines */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->ysize - scp->ypos) - n = scp->ysize - scp->ypos; - src = scp->scr_buf + scp->ypos * scp->xsize; - dst = src + n * scp->xsize; - count = scp->ysize - (scp->ypos + n); - bcopy(src, dst, count * scp->xsize * sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], src, - n * scp->xsize); - mark_for_update(scp, scp->ypos * scp->xsize); - mark_for_update(scp, scp->xsize * scp->ysize - 1); - break; - - case 'M': /* Delete n lines */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->ysize - scp->ypos) - n = scp->ysize - scp->ypos; - dst = scp->scr_buf + scp->ypos * scp->xsize; - src = dst + n * scp->xsize; - count = scp->ysize - (scp->ypos + n); - bcopy(src, dst, count * scp->xsize * sizeof(u_short)); - src = dst + count * scp->xsize; - fillw(scp->term.cur_color | scr_map[0x20], src, - n * scp->xsize); - mark_for_update(scp, scp->ypos * scp->xsize); - mark_for_update(scp, scp->xsize * scp->ysize - 1); - break; - - case 'P': /* Delete n chars */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->xsize - scp->xpos) - n = scp->xsize - scp->xpos; - dst = scp->cursor_pos; - src = dst + n; - count = scp->xsize - (scp->xpos + n); - bcopy(src, dst, count * sizeof(u_short)); - src = dst + count; - fillw(scp->term.cur_color | scr_map[0x20], src, n); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf + n + count - 1); - break; - - case '@': /* Insert n chars */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->xsize - scp->xpos) - n = scp->xsize - scp->xpos; - src = scp->cursor_pos; - dst = src + n; - count = scp->xsize - (scp->xpos + n); - bcopy(src, dst, count * sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], src, n); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf + n + count - 1); - break; - - case 'S': /* scroll up n lines */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->ysize) - n = scp->ysize; - bcopy(scp->scr_buf + (scp->xsize * n), - scp->scr_buf, - scp->xsize * (scp->ysize - n) * sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], - scp->scr_buf + scp->xsize * (scp->ysize - n), - scp->xsize * n); - mark_all(scp); - break; - - case 'T': /* scroll down n lines */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->ysize) - n = scp->ysize; - bcopy(scp->scr_buf, - scp->scr_buf + (scp->xsize * n), - scp->xsize * (scp->ysize - n) * - sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], - scp->scr_buf, scp->xsize * n); - mark_all(scp); - break; - - case 'X': /* erase n characters in line */ - n = scp->term.param[0]; if (n < 1) n = 1; - if (n > scp->xsize - scp->xpos) - n = scp->xsize - scp->xpos; - fillw(scp->term.cur_color | scr_map[0x20], - scp->cursor_pos, n); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf + n - 1); - break; - - case 'Z': /* move n tabs backwards */ - n = scp->term.param[0]; if (n < 1) n = 1; - if ((i = scp->xpos & 0xf8) == scp->xpos) - i -= 8*n; - else - i -= 8*(n-1); - if (i < 0) - i = 0; - move_crsr(scp, i, scp->ypos); - break; - - case '`': /* move cursor to column n */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, n - 1, scp->ypos); - break; - - case 'a': /* move cursor n columns to the right */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos + n, scp->ypos); - break; - - case 'd': /* move cursor to row n */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos, n - 1); - break; - - case 'e': /* move cursor n rows down */ - n = scp->term.param[0]; if (n < 1) n = 1; - move_crsr(scp, scp->xpos, scp->ypos + n); - break; - - case 'm': /* change attribute */ - if (scp->term.num_param == 0) { - scp->term.attr_mask = NORMAL_ATTR; - scp->term.cur_attr = - scp->term.cur_color = scp->term.std_color; - break; - } - for (i = 0; i < scp->term.num_param; i++) { - switch (n = scp->term.param[i]) { - case 0: /* back to normal */ - scp->term.attr_mask = NORMAL_ATTR; - scp->term.cur_attr = - scp->term.cur_color = scp->term.std_color; - break; - case 1: /* bold */ - scp->term.attr_mask |= BOLD_ATTR; - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 4: /* underline */ - scp->term.attr_mask |= UNDERLINE_ATTR; - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 5: /* blink */ - scp->term.attr_mask |= BLINK_ATTR; - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 7: /* reverse video */ - scp->term.attr_mask |= REVERSE_ATTR; - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 30: case 31: /* set fg color */ - case 32: case 33: case 34: - case 35: case 36: case 37: - scp->term.attr_mask |= FOREGROUND_CHANGED; - scp->term.cur_color = - (scp->term.cur_color&0xF000) | (ansi_col[(n-30)&7]<<8); - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 40: case 41: /* set bg color */ - case 42: case 43: case 44: - case 45: case 46: case 47: - scp->term.attr_mask |= BACKGROUND_CHANGED; - scp->term.cur_color = - (scp->term.cur_color&0x0F00) | (ansi_col[(n-40)&7]<<12); - scp->term.cur_attr = mask2attr(&scp->term); - break; - } - } - break; - - case 's': /* Save cursor position */ - scp->saved_xpos = scp->xpos; - scp->saved_ypos = scp->ypos; - break; - - case 'u': /* Restore saved cursor position */ - if (scp->saved_xpos >= 0 && scp->saved_ypos >= 0) - move_crsr(scp, scp->saved_xpos, scp->saved_ypos); - break; - - case 'x': - if (scp->term.num_param == 0) - n = 0; - else - n = scp->term.param[0]; - switch (n) { - case 0: /* reset attributes */ - scp->term.attr_mask = NORMAL_ATTR; - scp->term.cur_attr = - scp->term.cur_color = scp->term.std_color = - current_default->std_color; - scp->term.rev_color = current_default->rev_color; - break; - case 1: /* set ansi background */ - scp->term.attr_mask &= ~BACKGROUND_CHANGED; - scp->term.cur_color = scp->term.std_color = - (scp->term.std_color & 0x0F00) | - (ansi_col[(scp->term.param[1])&0x0F]<<12); - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 2: /* set ansi foreground */ - scp->term.attr_mask &= ~FOREGROUND_CHANGED; - scp->term.cur_color = scp->term.std_color = - (scp->term.std_color & 0xF000) | - (ansi_col[(scp->term.param[1])&0x0F]<<8); - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 3: /* set ansi attribute directly */ - scp->term.attr_mask &= ~(FOREGROUND_CHANGED|BACKGROUND_CHANGED); - scp->term.cur_color = scp->term.std_color = - (scp->term.param[1]&0xFF)<<8; - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 5: /* set ansi reverse video background */ - scp->term.rev_color = - (scp->term.rev_color & 0x0F00) | - (ansi_col[(scp->term.param[1])&0x0F]<<12); - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 6: /* set ansi reverse video foreground */ - scp->term.rev_color = - (scp->term.rev_color & 0xF000) | - (ansi_col[(scp->term.param[1])&0x0F]<<8); - scp->term.cur_attr = mask2attr(&scp->term); - break; - case 7: /* set ansi reverse video directly */ - scp->term.rev_color = - (scp->term.param[1]&0xFF)<<8; - scp->term.cur_attr = mask2attr(&scp->term); - break; - } - break; - - case 'z': /* switch to (virtual) console n */ - if (scp->term.num_param == 1) - switch_scr(scp, scp->term.param[0]); - break; - } - } - else if (scp->term.esc == 3) { /* seen ESC [0-9]+ = */ - if (c >= '0' && c <= '9') { - if (scp->term.num_param < MAX_ESC_PAR) { - if (scp->term.last_param != scp->term.num_param) { - scp->term.last_param = scp->term.num_param; - scp->term.param[scp->term.num_param] = 0; - } - else - scp->term.param[scp->term.num_param] *= 10; - scp->term.param[scp->term.num_param] += c - '0'; - return; - } - } - scp->term.num_param = scp->term.last_param + 1; - switch (c) { - - case ';': - if (scp->term.num_param < MAX_ESC_PAR) - return; - break; - - case 'A': /* set display border color */ - if (scp->term.num_param == 1) { - scp->border=scp->term.param[0] & 0xff; - if (scp == cur_console) - set_border(cur_console, scp->border); - } - break; - - case 'B': /* set bell pitch and duration */ - if (scp->term.num_param == 2) { - scp->bell_pitch = scp->term.param[0]; - scp->bell_duration = scp->term.param[1]; - } - break; - - case 'C': /* set cursor type & shape */ - if (scp->term.num_param == 1) { - if (scp->term.param[0] & 0x01) - sc_flags |= BLINK_CURSOR; - else - sc_flags &= ~BLINK_CURSOR; - if ((scp->term.param[0] & 0x02) - && ISFONTAVAIL(scp->adp->va_flags)) - sc_flags |= CHAR_CURSOR; - else - sc_flags &= ~CHAR_CURSOR; - } - else if (scp->term.num_param == 2) { - scp->cursor_start = scp->term.param[0] & 0x1F; - scp->cursor_end = scp->term.param[1] & 0x1F; - } - /* - * The cursor shape is global property; all virtual consoles - * are affected. Update the cursor in the current console... - */ - if (!ISGRAPHSC(cur_console)) { - i = spltty(); - remove_cursor_image(cur_console); - if (sc_flags & CHAR_CURSOR) - set_destructive_cursor(cur_console); - draw_cursor_image(cur_console); - splx(i); - } - break; - - case 'F': /* set ansi foreground */ - if (scp->term.num_param == 1) { - scp->term.attr_mask &= ~FOREGROUND_CHANGED; - scp->term.cur_color = scp->term.std_color = - (scp->term.std_color & 0xF000) - | ((scp->term.param[0] & 0x0F) << 8); - scp->term.cur_attr = mask2attr(&scp->term); - } - break; - - case 'G': /* set ansi background */ - if (scp->term.num_param == 1) { - scp->term.attr_mask &= ~BACKGROUND_CHANGED; - scp->term.cur_color = scp->term.std_color = - (scp->term.std_color & 0x0F00) - | ((scp->term.param[0] & 0x0F) << 12); - scp->term.cur_attr = mask2attr(&scp->term); - } - break; - - case 'H': /* set ansi reverse video foreground */ - if (scp->term.num_param == 1) { - scp->term.rev_color = - (scp->term.rev_color & 0xF000) - | ((scp->term.param[0] & 0x0F) << 8); - scp->term.cur_attr = mask2attr(&scp->term); - } - break; - - case 'I': /* set ansi reverse video background */ - if (scp->term.num_param == 1) { - scp->term.rev_color = - (scp->term.rev_color & 0x0F00) - | ((scp->term.param[0] & 0x0F) << 12); - scp->term.cur_attr = mask2attr(&scp->term); - } - break; - } - } -#if notyet - else if (scp->term.esc == 4) { /* seen ESC Q */ - /* to be filled */ - } -#endif - else if (scp->term.esc == 5) { /* seen ESC ( */ - switch (c) { - case 'B': /* iso-2022: desginate ASCII into G0 */ - break; - /* other items to be filled */ - default: - break; - } - } - scp->term.esc = 0; -} - -static void -ansi_put(scr_stat *scp, u_char *buf, int len) -{ - u_char *ptr = buf; - - /* make screensaver happy */ - if (!sticky_splash && scp == cur_console) - run_scrn_saver = FALSE; - - write_in_progress++; -outloop: - if (scp->term.esc) { - scan_esc(scp, *ptr++); - len--; - } - else if (PRINTABLE(*ptr)) { /* Print only printables */ - int cnt = len <= (scp->xsize-scp->xpos) ? len : (scp->xsize-scp->xpos); - u_short cur_attr = scp->term.cur_attr; - u_short *cursor_pos = scp->cursor_pos; - do { - /* - * gcc-2.6.3 generates poor (un)sign extension code. Casting the - * pointers in the following to volatile should have no effect, - * but in fact speeds up this inner loop from 26 to 18 cycles - * (+ cache misses) on i486's. - */ -#define UCVP(ucp) ((u_char volatile *)(ucp)) - *cursor_pos++ = UCVP(scr_map)[*UCVP(ptr)] | cur_attr; - ptr++; - cnt--; - } while (cnt && PRINTABLE(*ptr)); - len -= (cursor_pos - scp->cursor_pos); - scp->xpos += (cursor_pos - scp->cursor_pos); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - mark_for_update(scp, cursor_pos - scp->scr_buf); - scp->cursor_pos = cursor_pos; - if (scp->xpos >= scp->xsize) { - scp->xpos = 0; - scp->ypos++; - } - } - else { - switch(*ptr) { - case 0x07: - do_bell(scp, scp->bell_pitch, scp->bell_duration); - break; - - case 0x08: /* non-destructive backspace */ - if (scp->cursor_pos > scp->scr_buf) { - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->cursor_pos--; - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - if (scp->xpos > 0) - scp->xpos--; - else { - scp->xpos += scp->xsize - 1; - scp->ypos--; - } - } - break; - - case 0x09: /* non-destructive tab */ - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->cursor_pos += (8 - scp->xpos % 8u); - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - if ((scp->xpos += (8 - scp->xpos % 8u)) >= scp->xsize) { - scp->xpos = 0; - scp->ypos++; - } - break; - - case 0x0a: /* newline, same pos */ - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->cursor_pos += scp->xsize; - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->ypos++; - break; - - case 0x0c: /* form feed, clears screen */ - sc_clear_screen(scp); - break; - - case 0x0d: /* return, return to pos 0 */ - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->cursor_pos -= scp->xpos; - mark_for_update(scp, scp->cursor_pos - scp->scr_buf); - scp->xpos = 0; - break; - - case 0x1b: /* start escape sequence */ - scp->term.esc = 1; - scp->term.num_param = 0; - break; - } - ptr++; len--; - } - /* do we have to scroll ?? */ - if (scp->cursor_pos >= scp->scr_buf + scp->ysize * scp->xsize) { - remove_cutmarking(scp); - if (scp->history != NULL) { - bcopy(scp->scr_buf, scp->history_head, - scp->xsize * sizeof(u_short)); - scp->history_head += scp->xsize; - if (scp->history_head + scp->xsize > - scp->history + scp->history_size) - scp->history_head = scp->history; - } - bcopy(scp->scr_buf + scp->xsize, scp->scr_buf, - scp->xsize * (scp->ysize - 1) * sizeof(u_short)); - fillw(scp->term.cur_color | scr_map[0x20], - scp->scr_buf + scp->xsize * (scp->ysize - 1), - scp->xsize); - scp->cursor_pos -= scp->xsize; - scp->ypos--; - mark_all(scp); - } - if (len) - goto outloop; - write_in_progress--; - if (delayed_next_scr) - switch_scr(scp, delayed_next_scr - 1); -} - -static void -scinit(void) -{ - video_adapter_t *adp; - int col; - int row; - u_int i; - - if (init_done != COLD) - return; - init_done = WARM; - - get_bios_values(); - - /* extract the hardware cursor location and hide the cursor for now */ - adp = vid_get_adapter(adapter); - (*vidsw[adapter]->read_hw_cursor)(adp, &col, &row); - (*vidsw[adapter]->set_hw_cursor)(adp, -1, -1); - - /* set up the first console */ - current_default = &user_default; - console[0] = &main_console; - init_scp(console[0]); - cur_console = console[0]; - - /* copy screen to temporary buffer */ - if (ISTEXTSC(console[0])) - bcopy_fromio(console[0]->adp->va_window, sc_buffer, - console[0]->xsize * console[0]->ysize * sizeof(u_short)); - - console[0]->scr_buf = console[0]->mouse_pos = console[0]->mouse_oldpos - = sc_buffer; - if (col >= console[0]->xsize) - col = 0; - if (row >= console[0]->ysize) - row = console[0]->ysize - 1; - console[0]->xpos = col; - console[0]->ypos = row; - console[0]->cursor_pos = console[0]->cursor_oldpos = - sc_buffer + row*console[0]->xsize + col; - console[0]->cursor_saveunder = *console[0]->cursor_pos; - for (i=1; i<MAXCONS; i++) - console[i] = NULL; - kernel_console.esc = 0; - kernel_console.attr_mask = NORMAL_ATTR; - kernel_console.cur_attr = - kernel_console.cur_color = kernel_console.std_color = - kernel_default.std_color; - kernel_console.rev_color = kernel_default.rev_color; - - /* initialize mapscrn arrays to a one to one map */ - for (i=0; i<sizeof(scr_map); i++) { - scr_map[i] = scr_rmap[i] = i; - } - - /* Save font and palette */ - if (ISFONTAVAIL(cur_console->adp->va_flags)) { - if (fonts_loaded & FONT_16) { - copy_font(cur_console, LOAD, 16, font_16); - } else { - copy_font(cur_console, SAVE, 16, font_16); - fonts_loaded = FONT_16; - set_destructive_cursor(cur_console); - } - /* - * FONT KLUDGE - * Always use the font page #0. XXX - */ - (*vidsw[cur_console->ad]->show_font)(cur_console->adp, 0); - } - save_palette(cur_console->adp, palette); - -#if NSPLASH > 0 - /* we are ready to put up the splash image! */ - splash_init(cur_console->adp, scsplash_callback); -#endif -} - -static void -scshutdown(int howto, void *arg) -{ - sc_touch_scrn_saver(); - if (!cold && cur_console->smode.mode == VT_AUTO - && console[0]->smode.mode == VT_AUTO) - switch_scr(cur_console, 0); - shutdown_in_progress = TRUE; -} - -int -sc_clean_up(scr_stat *scp) -{ - int error; - - sc_touch_scrn_saver(); - if ((error = wait_scrn_saver_stop())) - return error; - scp->status &= ~MOUSE_VISIBLE; - remove_cutmarking(scp); - return 0; -} - -void -sc_alloc_scr_buffer(scr_stat *scp, int wait, int clear) -{ - if (scp->scr_buf) - free(scp->scr_buf, M_DEVBUF); - scp->scr_buf = (u_short *)malloc(scp->xsize*scp->ysize*sizeof(u_short), - M_DEVBUF, (wait) ? M_WAITOK : M_NOWAIT); - - if (clear) { - /* clear the screen and move the text cursor to the top-left position */ - sc_clear_screen(scp); - } else { - /* retain the current cursor position, but adjust pointers */ - move_crsr(scp, scp->xpos, scp->ypos); - scp->cursor_oldpos = scp->cursor_pos; - } - - /* move the mouse cursor at the center of the screen */ - sc_move_mouse(scp, scp->xpixel / 2, scp->ypixel / 2); -} - -void -sc_alloc_cut_buffer(scr_stat *scp, int wait) -{ - if ((cut_buffer == NULL) - || (cut_buffer_size < scp->xsize * scp->ysize + 1)) { - if (cut_buffer != NULL) - free(cut_buffer, M_DEVBUF); - cut_buffer_size = scp->xsize * scp->ysize + 1; - cut_buffer = (u_char *)malloc(cut_buffer_size, - M_DEVBUF, (wait) ? M_WAITOK : M_NOWAIT); - if (cut_buffer != NULL) - cut_buffer[0] = '\0'; - } -} - -void -sc_alloc_history_buffer(scr_stat *scp, int lines, int extra, int wait) -{ - u_short *usp; - - if (lines < scp->ysize) - lines = scp->ysize; - - usp = scp->history; - scp->history = NULL; - if (usp != NULL) { - free(usp, M_DEVBUF); - if (extra > 0) - extra_history_size += extra; - } - - scp->history_size = lines * scp->xsize; - if (lines > imax(sc_history_size, scp->ysize)) - extra_history_size -= lines - imax(sc_history_size, scp->ysize); - usp = (u_short *)malloc(scp->history_size * sizeof(u_short), - M_DEVBUF, (wait) ? M_WAITOK : M_NOWAIT); - if (usp != NULL) - bzero(usp, scp->history_size * sizeof(u_short)); - scp->history_head = scp->history_pos = usp; - scp->history = usp; -} - -static scr_stat -*alloc_scp() -{ - scr_stat *scp; - - scp = (scr_stat *)malloc(sizeof(scr_stat), M_DEVBUF, M_WAITOK); - init_scp(scp); - sc_alloc_scr_buffer(scp, TRUE, TRUE); - if (ISMOUSEAVAIL(scp->adp->va_flags)) - sc_alloc_cut_buffer(scp, TRUE); - sc_alloc_history_buffer(scp, sc_history_size, 0, TRUE); -/* SOS - if (scp->adp->va_flags & V_ADP_MODECHANGE) - set_mode(scp); -*/ - sc_clear_screen(scp); - scp->cursor_saveunder = *scp->cursor_pos; - return scp; -} - -static void -init_scp(scr_stat *scp) -{ - video_info_t info; - - scp->ad = adapter; - scp->adp = vid_get_adapter(scp->ad); - (*vidsw[scp->ad]->get_info)(scp->adp, initial_video_mode, &info); - - scp->status = 0; - scp->mode = initial_video_mode; - scp->scr_buf = NULL; - if (info.vi_flags & V_INFO_GRAPHICS) { - scp->status |= GRAPHICS_MODE; - scp->xpixel = info.vi_width; - scp->ypixel = info.vi_height; - scp->xsize = info.vi_width/8; - scp->ysize = info.vi_height/info.vi_cheight; - scp->font_size = FONT_NONE; - } else { - scp->xsize = info.vi_width; - scp->ysize = info.vi_height; - scp->xpixel = scp->xsize*8; - scp->ypixel = scp->ysize*info.vi_cheight; - scp->font_size = info.vi_cheight; - } - scp->xoff = scp->yoff = 0; - scp->xpos = scp->ypos = 0; - scp->saved_xpos = scp->saved_ypos = -1; - scp->start = scp->xsize * scp->ysize; - scp->end = 0; - scp->term.esc = 0; - scp->term.attr_mask = NORMAL_ATTR; - scp->term.cur_attr = - scp->term.cur_color = scp->term.std_color = - current_default->std_color; - scp->term.rev_color = current_default->rev_color; - scp->border = BG_BLACK; - scp->cursor_start = bios_value.cursor_start; - scp->cursor_end = bios_value.cursor_end; - scp->mouse_xpos = scp->xsize*8/2; - scp->mouse_ypos = scp->ysize*scp->font_size/2; - scp->mouse_cut_start = scp->mouse_cut_end = NULL; - scp->mouse_signal = 0; - scp->mouse_pid = 0; - scp->mouse_proc = NULL; - scp->kbd_mode = K_XLATE; - scp->bell_pitch = BELL_PITCH; - scp->bell_duration = BELL_DURATION; - scp->status |= (bios_value.shift_state & 0x20) ? NLKED : 0; - scp->status |= CURSOR_ENABLED; - scp->pid = 0; - scp->proc = NULL; - scp->smode.mode = VT_AUTO; - scp->history_head = scp->history_pos = scp->history = NULL; - scp->history_size = imax(sc_history_size, scp->ysize) * scp->xsize; -} - -static void -get_bios_values(void) -{ - bios_value.cursor_start = *(u_int8_t *)pa_to_va(0x461); - bios_value.cursor_end = *(u_int8_t *)pa_to_va(0x460); - bios_value.shift_state = *(u_int8_t *)pa_to_va(0x417); -} - -static void -history_to_screen(scr_stat *scp) -{ - int i; - - for (i=0; i<scp->ysize; i++) - bcopy(scp->history + (((scp->history_pos - scp->history) + - scp->history_size-((i+1)*scp->xsize))%scp->history_size), - scp->scr_buf + (scp->xsize * (scp->ysize-1 - i)), - scp->xsize * sizeof(u_short)); - mark_all(scp); -} - -static int -history_up_line(scr_stat *scp) -{ - if (WRAPHIST(scp, scp->history_pos, -(scp->xsize*scp->ysize)) != - scp->history_head) { - scp->history_pos = WRAPHIST(scp, scp->history_pos, -scp->xsize); - history_to_screen(scp); - return 0; - } - else - return -1; -} - -static int -history_down_line(scr_stat *scp) -{ - if (scp->history_pos != scp->history_head) { - scp->history_pos = WRAPHIST(scp, scp->history_pos, scp->xsize); - history_to_screen(scp); - return 0; - } - else - return -1; -} - -/* - * scgetc(flags) - get character from keyboard. - * If flags & SCGETC_CN, then avoid harmful side effects. - * If flags & SCGETC_NONBLOCK, then wait until a key is pressed, else - * return NOKEY if there is nothing there. - */ -static u_int -scgetc(keyboard_t *kbd, u_int flags) -{ - u_int c; - int this_scr; - int f; - int i; - - if (kbd == NULL) - return NOKEY; - -next_code: - /* I don't like this, but... XXX */ - if (flags & SCGETC_CN) - sccnupdate(cur_console); - /* first see if there is something in the keyboard port */ - for (;;) { - c = kbd_read_char(kbd, !(flags & SCGETC_NONBLOCK)); - if (c == ERRKEY) { - if (!(flags & SCGETC_CN)) - do_bell(cur_console, BELL_PITCH, BELL_DURATION); - } else if (c == NOKEY) - return c; - else - break; - } - - /* make screensaver happy */ - if (!(c & RELKEY)) - sc_touch_scrn_saver(); - -#ifdef __i386__ - if (!(flags & SCGETC_CN)) - /* do the /dev/random device a favour */ - add_keyboard_randomness(c); -#endif - - if (cur_console->kbd_mode != K_XLATE) - return KEYCHAR(c); - - /* if scroll-lock pressed allow history browsing */ - if (!ISGRAPHSC(cur_console) && cur_console->history - && cur_console->status & SLKED) { - - cur_console->status &= ~CURSOR_ENABLED; - if (!(cur_console->status & BUFFER_SAVED)) { - cur_console->status |= BUFFER_SAVED; - cur_console->history_save = cur_console->history_head; - - /* copy screen into top of history buffer */ - for (i=0; i<cur_console->ysize; i++) { - bcopy(cur_console->scr_buf + (cur_console->xsize * i), - cur_console->history_head, - cur_console->xsize * sizeof(u_short)); - cur_console->history_head += cur_console->xsize; - if (cur_console->history_head + cur_console->xsize > - cur_console->history + cur_console->history_size) - cur_console->history_head=cur_console->history; - } - cur_console->history_pos = cur_console->history_head; - history_to_screen(cur_console); - } - switch (c) { - /* FIXME: key codes */ - case SPCLKEY | FKEY | F(49): /* home key */ - remove_cutmarking(cur_console); - cur_console->history_pos = cur_console->history_head; - history_to_screen(cur_console); - goto next_code; - - case SPCLKEY | FKEY | F(57): /* end key */ - remove_cutmarking(cur_console); - cur_console->history_pos = - WRAPHIST(cur_console, cur_console->history_head, - cur_console->xsize*cur_console->ysize); - history_to_screen(cur_console); - goto next_code; - - case SPCLKEY | FKEY | F(50): /* up arrow key */ - remove_cutmarking(cur_console); - if (history_up_line(cur_console)) - if (!(flags & SCGETC_CN)) - do_bell(cur_console, BELL_PITCH, BELL_DURATION); - goto next_code; - - case SPCLKEY | FKEY | F(58): /* down arrow key */ - remove_cutmarking(cur_console); - if (history_down_line(cur_console)) - if (!(flags & SCGETC_CN)) - do_bell(cur_console, BELL_PITCH, BELL_DURATION); - goto next_code; - - case SPCLKEY | FKEY | F(51): /* page up key */ - remove_cutmarking(cur_console); - for (i=0; i<cur_console->ysize; i++) - if (history_up_line(cur_console)) { - if (!(flags & SCGETC_CN)) - do_bell(cur_console, BELL_PITCH, BELL_DURATION); - break; - } - goto next_code; - - case SPCLKEY | FKEY | F(59): /* page down key */ - remove_cutmarking(cur_console); - for (i=0; i<cur_console->ysize; i++) - if (history_down_line(cur_console)) { - if (!(flags & SCGETC_CN)) - do_bell(cur_console, BELL_PITCH, BELL_DURATION); - break; - } - goto next_code; - } - } - - /* - * Process and consume special keys here. Return a plain char code - * or a char code with the META flag or a function key code. - */ - if (c & RELKEY) { - /* key released */ - /* goto next_code */ - } else { - /* key pressed */ - if (c & SPCLKEY) { - c &= ~SPCLKEY; - switch (KEYCHAR(c)) { - /* LOCKING KEYS */ - case NLK: case CLK: case ALK: - break; - case SLK: - kbd_ioctl(kbd, KDGKBSTATE, (caddr_t)&f); - if (f & SLKED) { - cur_console->status |= SLKED; - } else { - if (cur_console->status & SLKED) { - cur_console->status &= ~SLKED; - if (cur_console->status & BUFFER_SAVED) { - int i; - u_short *ptr = cur_console->history_save; - - for (i=0; i<cur_console->ysize; i++) { - bcopy(ptr, - cur_console->scr_buf + - (cur_console->xsize*i), - cur_console->xsize * sizeof(u_short)); - ptr += cur_console->xsize; - if (ptr + cur_console->xsize > - cur_console->history + - cur_console->history_size) - ptr = cur_console->history; - } - cur_console->status &= ~BUFFER_SAVED; - cur_console->history_head=cur_console->history_save; - cur_console->status |= CURSOR_ENABLED; - mark_all(cur_console); - } - scstart(VIRTUAL_TTY(get_scr_num())); - } - } - break; - - /* NON-LOCKING KEYS */ - case NOP: - case LSH: case RSH: case LCTR: case RCTR: - case LALT: case RALT: case ASH: case META: - break; - - case BTAB: - return c; - - case SPSC: - /* force activatation/deactivation of the screen saver */ - if (!scrn_blanked) { - run_scrn_saver = TRUE; - scrn_time_stamp -= scrn_blank_time; - } -#if NSPLASH > 0 - if (cold) { - /* - * While devices are being probed, the screen saver need - * to be invoked explictly. XXX - */ - if (scrn_blanked) { - scsplash_stick(FALSE); - stop_scrn_saver(current_saver); - } else { - if (!ISGRAPHSC(cur_console)) { - scsplash_stick(TRUE); - (*current_saver)(TRUE); - } - } - } -#endif /* NSPLASH */ - break; - - case RBT: -#ifndef SC_DISABLE_REBOOT - shutdown_nice(); -#endif - break; - -#if NAPM > 0 - case SUSP: - apm_suspend(PMST_SUSPEND); - break; - case STBY: - apm_suspend(PMST_STANDBY); - break; -#else - case SUSP: - case STBY: - break; -#endif - - case DBG: -#ifdef DDB /* try to switch to console 0 */ - /* - * TRY to make sure the screen saver is stopped, - * and the screen is updated before switching to - * the vty0. - */ - scrn_timer((void *)FALSE); - if (cur_console->smode.mode == VT_AUTO && - console[0]->smode.mode == VT_AUTO) - switch_scr(cur_console, 0); - Debugger("manual escape to debugger"); -#else - printf("No debugger in kernel\n"); -#endif - break; - - case NEXT: - this_scr = get_scr_num(); - for (i = this_scr + 1; i != this_scr; i = (i + 1)%MAXCONS) { - struct tty *tp = VIRTUAL_TTY(i); - if (tp->t_state & TS_ISOPEN) { - switch_scr(cur_console, i); - break; - } - } - break; - - default: - if (KEYCHAR(c) >= F_SCR && KEYCHAR(c) <= L_SCR) { - switch_scr(cur_console, KEYCHAR(c) - F_SCR); - break; - } - /* assert(c & FKEY) */ - return c; - } - /* goto next_code */ - } else { - /* regular keys (maybe MKEY is set) */ - return c; - } - } - - goto next_code; -} - -int -scmmap(dev_t dev, vm_offset_t offset, int nprot) -{ - struct tty *tp; - struct scr_stat *scp; - - tp = scdevtotty(dev); - if (!tp) - return ENXIO; - scp = sc_get_scr_stat(tp->t_dev); - return (*vidsw[scp->ad]->mmap)(scp->adp, offset); -} - -/* - * Calculate hardware attributes word using logical attributes mask and - * hardware colors - */ - -static int -mask2attr(struct term_stat *term) -{ - int attr, mask = term->attr_mask; - - if (mask & REVERSE_ATTR) { - attr = ((mask & FOREGROUND_CHANGED) ? - ((term->cur_color & 0xF000) >> 4) : - (term->rev_color & 0x0F00)) | - ((mask & BACKGROUND_CHANGED) ? - ((term->cur_color & 0x0F00) << 4) : - (term->rev_color & 0xF000)); - } else - attr = term->cur_color; - - /* XXX: underline mapping for Hercules adapter can be better */ - if (mask & (BOLD_ATTR | UNDERLINE_ATTR)) - attr ^= 0x0800; - if (mask & BLINK_ATTR) - attr ^= 0x8000; - - return attr; -} - -static int -save_kbd_state(scr_stat *scp) -{ - int state; - int error; - - error = kbd_ioctl(kbd, KDGKBSTATE, (caddr_t)&state); - if (error == ENOIOCTL) - error = ENODEV; - if (error == 0) { - scp->status &= ~LOCK_MASK; - scp->status |= state; - } - return error; -} - -static int -update_kbd_state(int new_bits, int mask) -{ - int state; - int error; - - if (mask != LOCK_MASK) { - error = kbd_ioctl(kbd, KDGKBSTATE, (caddr_t)&state); - if (error == ENOIOCTL) - error = ENODEV; - if (error) - return error; - state &= ~mask; - state |= new_bits & mask; - } else { - state = new_bits & LOCK_MASK; - } - error = kbd_ioctl(kbd, KDSKBSTATE, (caddr_t)&state); - if (error == ENOIOCTL) - error = ENODEV; - return error; -} - -static int -update_kbd_leds(int which) -{ - int error; - - which &= LOCK_MASK; - error = kbd_ioctl(kbd, KDSETLED, (caddr_t)&which); - if (error == ENOIOCTL) - error = ENODEV; - return error; -} - -int -set_mode(scr_stat *scp) -{ - video_info_t info; - - /* reject unsupported mode */ - if ((*vidsw[scp->ad]->get_info)(scp->adp, scp->mode, &info)) - return 1; - - /* if this vty is not currently showing, do nothing */ - if (scp != cur_console) - return 0; - - /* setup video hardware for the given mode */ - (*vidsw[scp->ad]->set_mode)(scp->adp, scp->mode); - Crtat = scp->adp->va_window; - - if (!(scp->status & GRAPHICS_MODE)) { - /* load appropriate font */ - if (!(scp->status & PIXEL_MODE) && ISFONTAVAIL(scp->adp->va_flags)) { - if (scp->font_size < 14) { - if (fonts_loaded & FONT_8) - copy_font(scp, LOAD, 8, font_8); - } else if (scp->font_size >= 16) { - if (fonts_loaded & FONT_16) - copy_font(scp, LOAD, 16, font_16); - } else { - if (fonts_loaded & FONT_14) - copy_font(scp, LOAD, 14, font_14); - } - /* - * FONT KLUDGE: - * This is an interim kludge to display correct font. - * Always use the font page #0 on the video plane 2. - * Somehow we cannot show the font in other font pages on - * some video cards... XXX - */ - (*vidsw[scp->ad]->show_font)(scp->adp, 0); - } - mark_all(scp); - } - - if (scp->status & PIXEL_MODE) - bzero_io(scp->adp->va_window, scp->xpixel*scp->ypixel/8); - - set_border(scp, scp->border); - - /* move hardware cursor out of the way */ - (*vidsw[scp->ad]->set_hw_cursor)(scp->adp, -1, -1); - - return 0; -} - -void -set_border(scr_stat *scp, int color) -{ - vm_offset_t p; - int xoff; - int yoff; - int xlen; - int ylen; - int i; - - (*vidsw[scp->ad]->set_border)(scp->adp, color); - - if (scp->status & PIXEL_MODE) { - outw(GDCIDX, 0x0005); /* read mode 0, write mode 0 */ - outw(GDCIDX, 0x0003); /* data rotate/function select */ - outw(GDCIDX, 0x0f01); /* set/reset enable */ - outw(GDCIDX, 0xff08); /* bit mask */ - outw(GDCIDX, (color << 8) | 0x00); /* set/reset */ - p = scp->adp->va_window; - xoff = scp->xoff; - yoff = scp->yoff*scp->font_size; - xlen = scp->xpixel/8; - ylen = scp->ysize*scp->font_size; - if (yoff > 0) { - bzero_io(p, xlen*yoff); - bzero_io(p + xlen*(yoff + ylen), - xlen*scp->ypixel - xlen*(yoff + ylen)); - } - if (xoff > 0) { - for (i = 0; i < ylen; ++i) { - bzero_io(p + xlen*(yoff + i), xoff); - bzero_io(p + xlen*(yoff + i) + xoff + scp->xsize, - xlen - xoff - scp->xsize); - } - } - outw(GDCIDX, 0x0000); /* set/reset */ - outw(GDCIDX, 0x0001); /* set/reset enable */ - } -} - -void -copy_font(scr_stat *scp, int operation, int font_size, u_char *buf) -{ - /* - * FONT KLUDGE: - * This is an interim kludge to display correct font. - * Always use the font page #0 on the video plane 2. - * Somehow we cannot show the font in other font pages on - * some video cards... XXX - */ - font_loading_in_progress = TRUE; - if (operation == LOAD) { - (*vidsw[scp->ad]->load_font)(scp->adp, 0, font_size, buf, 0, 256); - if (sc_flags & CHAR_CURSOR) - set_destructive_cursor(scp); - } else if (operation == SAVE) { - (*vidsw[scp->ad]->save_font)(scp->adp, 0, font_size, buf, 0, 256); - } - font_loading_in_progress = FALSE; -} - -static void -set_destructive_cursor(scr_stat *scp) -{ - u_char cursor[32]; - u_char *font_buffer; - int font_size; - int crtc_addr; - int i; - - if (!ISFONTAVAIL(scp->adp->va_flags) - || (scp->status & (GRAPHICS_MODE | PIXEL_MODE))) - return; - - if (scp->font_size < 14) { - font_buffer = font_8; - font_size = 8; - } else if (scp->font_size >= 16) { - font_buffer = font_16; - font_size = 16; - } else { - font_buffer = font_14; - font_size = 14; - } - - if (scp->status & MOUSE_VISIBLE) { - if ((scp->cursor_saveunder & 0xff) == SC_MOUSE_CHAR) - bcopy(&scp->mouse_cursor[0], cursor, scp->font_size); - else if ((scp->cursor_saveunder & 0xff) == SC_MOUSE_CHAR + 1) - bcopy(&scp->mouse_cursor[32], cursor, scp->font_size); - else if ((scp->cursor_saveunder & 0xff) == SC_MOUSE_CHAR + 2) - bcopy(&scp->mouse_cursor[64], cursor, scp->font_size); - else if ((scp->cursor_saveunder & 0xff) == SC_MOUSE_CHAR + 3) - bcopy(&scp->mouse_cursor[96], cursor, scp->font_size); - else - bcopy(font_buffer+((scp->cursor_saveunder & 0xff)*scp->font_size), - cursor, scp->font_size); - } - else - bcopy(font_buffer + ((scp->cursor_saveunder & 0xff) * scp->font_size), - cursor, scp->font_size); - for (i=0; i<32; i++) - if ((i >= scp->cursor_start && i <= scp->cursor_end) || - (scp->cursor_start >= scp->font_size && i == scp->font_size - 1)) - cursor[i] |= 0xff; -#if 1 - crtc_addr = scp->adp->va_crtc_addr; - while (!(inb(crtc_addr+6) & 0x08)) /* wait for vertical retrace */ ; -#endif - font_loading_in_progress = TRUE; - (*vidsw[scp->ad]->load_font)(scp->adp, 0, font_size, cursor, DEAD_CHAR, 1); - font_loading_in_progress = FALSE; -} - -void -sc_move_mouse(scr_stat *scp, int x, int y) -{ - scp->mouse_xpos = x; - scp->mouse_ypos = y; - scp->mouse_pos = scp->mouse_oldpos = - scp->scr_buf + (y / scp->font_size) * scp->xsize + x / 8; -} - -static void -set_mouse_pos(scr_stat *scp) -{ - static int last_xpos = -1, last_ypos = -1; - - if (scp->mouse_xpos < 0) - scp->mouse_xpos = 0; - if (scp->mouse_ypos < 0) - scp->mouse_ypos = 0; - if (!ISTEXTSC(scp)) { - if (scp->mouse_xpos > scp->xpixel-1) - scp->mouse_xpos = scp->xpixel-1; - if (scp->mouse_ypos > scp->ypixel-1) - scp->mouse_ypos = scp->ypixel-1; - return; - } - if (scp->mouse_xpos > (scp->xsize*8)-1) - scp->mouse_xpos = (scp->xsize*8)-1; - if (scp->mouse_ypos > (scp->ysize*scp->font_size)-1) - scp->mouse_ypos = (scp->ysize*scp->font_size)-1; - - if (scp->mouse_xpos != last_xpos || scp->mouse_ypos != last_ypos) { - scp->status |= MOUSE_MOVED; - - scp->mouse_pos = scp->scr_buf + - ((scp->mouse_ypos/scp->font_size)*scp->xsize + scp->mouse_xpos/8); - - if ((scp->status & MOUSE_VISIBLE) && (scp->status & MOUSE_CUTTING)) - mouse_cut(scp); - } -} - -#define isspace(c) (((c) & 0xff) == ' ') - -static int -skip_spc_right(scr_stat *scp, u_short *p) -{ - int i; - - for (i = (p - scp->scr_buf) % scp->xsize; i < scp->xsize; ++i) { - if (!isspace(*p)) - break; - ++p; - } - return i; -} - -static int -skip_spc_left(scr_stat *scp, u_short *p) -{ - int i; - - for (i = (p-- - scp->scr_buf) % scp->xsize - 1; i >= 0; --i) { - if (!isspace(*p)) - break; - --p; - } - return i; -} - -static void -mouse_cut(scr_stat *scp) -{ - u_short *end; - u_short *p; - int i = 0; - int j = 0; - - scp->mouse_cut_end = (scp->mouse_pos >= scp->mouse_cut_start) ? - scp->mouse_pos + 1 : scp->mouse_pos; - end = (scp->mouse_cut_start > scp->mouse_cut_end) ? - scp->mouse_cut_start : scp->mouse_cut_end; - for (p = (scp->mouse_cut_start > scp->mouse_cut_end) ? - scp->mouse_cut_end : scp->mouse_cut_start; p < end; ++p) { - cut_buffer[i] = *p & 0xff; - /* remember the position of the last non-space char */ - if (!isspace(cut_buffer[i++])) - j = i; - /* trim trailing blank when crossing lines */ - if (((p - scp->scr_buf) % scp->xsize) == (scp->xsize - 1)) { - cut_buffer[j++] = '\r'; - i = j; - } - } - cut_buffer[i] = '\0'; - - /* scan towards the end of the last line */ - --p; - for (i = (p - scp->scr_buf) % scp->xsize; i < scp->xsize; ++i) { - if (!isspace(*p)) - break; - ++p; - } - /* if there is nothing but blank chars, trim them, but mark towards eol */ - if (i >= scp->xsize) { - if (scp->mouse_cut_start > scp->mouse_cut_end) - scp->mouse_cut_start = p; - else - scp->mouse_cut_end = p; - cut_buffer[j++] = '\r'; - cut_buffer[j] = '\0'; - } - - mark_for_update(scp, scp->mouse_cut_start - scp->scr_buf); - mark_for_update(scp, scp->mouse_cut_end - scp->scr_buf); -} - -static void -mouse_cut_start(scr_stat *scp) -{ - int i; - - if (scp->status & MOUSE_VISIBLE) { - if (scp->mouse_pos == scp->mouse_cut_start && - scp->mouse_cut_start == scp->mouse_cut_end - 1) { - cut_buffer[0] = '\0'; - remove_cutmarking(scp); - } else if (skip_spc_right(scp, scp->mouse_pos) >= scp->xsize) { - /* if the pointer is on trailing blank chars, mark towards eol */ - i = skip_spc_left(scp, scp->mouse_pos) + 1; - scp->mouse_cut_start = scp->scr_buf + - ((scp->mouse_pos - scp->scr_buf) / scp->xsize) * scp->xsize + i; - scp->mouse_cut_end = scp->scr_buf + - ((scp->mouse_pos - scp->scr_buf) / scp->xsize + 1) * scp->xsize; - cut_buffer[0] = '\r'; - cut_buffer[1] = '\0'; - scp->status |= MOUSE_CUTTING; - } else { - scp->mouse_cut_start = scp->mouse_pos; - scp->mouse_cut_end = scp->mouse_cut_start + 1; - cut_buffer[0] = *scp->mouse_cut_start & 0xff; - cut_buffer[1] = '\0'; - scp->status |= MOUSE_CUTTING; - } - mark_all(scp); - /* delete all other screens cut markings */ - for (i=0; i<MAXCONS; i++) { - if (console[i] == NULL || console[i] == scp) - continue; - remove_cutmarking(console[i]); - } - } -} - -static void -mouse_cut_end(scr_stat *scp) -{ - if (scp->status & MOUSE_VISIBLE) { - scp->status &= ~MOUSE_CUTTING; - } -} - -static void -mouse_cut_word(scr_stat *scp) -{ - u_short *p; - u_short *sol; - u_short *eol; - int i; - - /* - * Because we don't have locale information in the kernel, - * we only distinguish space char and non-space chars. Punctuation - * chars, symbols and other regular chars are all treated alike. - */ - if (scp->status & MOUSE_VISIBLE) { - sol = scp->scr_buf - + ((scp->mouse_pos - scp->scr_buf) / scp->xsize) * scp->xsize; - eol = sol + scp->xsize; - if (isspace(*scp->mouse_pos)) { - for (p = scp->mouse_pos; p >= sol; --p) - if (!isspace(*p)) - break; - scp->mouse_cut_start = ++p; - for (p = scp->mouse_pos; p < eol; ++p) - if (!isspace(*p)) - break; - scp->mouse_cut_end = p; - } else { - for (p = scp->mouse_pos; p >= sol; --p) - if (isspace(*p)) - break; - scp->mouse_cut_start = ++p; - for (p = scp->mouse_pos; p < eol; ++p) - if (isspace(*p)) - break; - scp->mouse_cut_end = p; - } - for (i = 0, p = scp->mouse_cut_start; p < scp->mouse_cut_end; ++p) - cut_buffer[i++] = *p & 0xff; - cut_buffer[i] = '\0'; - scp->status |= MOUSE_CUTTING; - } -} - -static void -mouse_cut_line(scr_stat *scp) -{ - u_short *p; - int i; - - if (scp->status & MOUSE_VISIBLE) { - scp->mouse_cut_start = scp->scr_buf - + ((scp->mouse_pos - scp->scr_buf) / scp->xsize) * scp->xsize; - scp->mouse_cut_end = scp->mouse_cut_start + scp->xsize; - for (i = 0, p = scp->mouse_cut_start; p < scp->mouse_cut_end; ++p) - cut_buffer[i++] = *p & 0xff; - cut_buffer[i++] = '\r'; - cut_buffer[i] = '\0'; - scp->status |= MOUSE_CUTTING; - } -} - -static void -mouse_cut_extend(scr_stat *scp) -{ - if ((scp->status & MOUSE_VISIBLE) && !(scp->status & MOUSE_CUTTING) - && (scp->mouse_cut_start != NULL)) { - mouse_cut(scp); - scp->status |= MOUSE_CUTTING; - } -} - -static void -mouse_paste(scr_stat *scp) -{ - if (scp->status & MOUSE_VISIBLE) { - struct tty *tp; - u_char *ptr = cut_buffer; - - tp = VIRTUAL_TTY(get_scr_num()); - while (*ptr) - (*linesw[tp->t_line].l_rint)(scr_rmap[*ptr++], tp); - } -} - -static void -draw_mouse_image(scr_stat *scp) -{ - u_short buffer[32]; - u_short xoffset, yoffset; - vm_offset_t crt_pos = scp->adp->va_window + 2*(scp->mouse_pos - scp->scr_buf); - u_char *font_buffer; - int font_size; - int crtc_addr; - int i; - - if (scp->font_size < 14) { - font_buffer = font_8; - font_size = 8; - } else if (scp->font_size >= 16) { - font_buffer = font_16; - font_size = 16; - } else { - font_buffer = font_14; - font_size = 14; - } - - xoffset = scp->mouse_xpos % 8; - yoffset = scp->mouse_ypos % scp->font_size; - - /* prepare mousepointer char's bitmaps */ - bcopy(font_buffer + ((*(scp->mouse_pos) & 0xff) * font_size), - &scp->mouse_cursor[0], font_size); - bcopy(font_buffer + ((*(scp->mouse_pos+1) & 0xff) * font_size), - &scp->mouse_cursor[32], font_size); - bcopy(font_buffer + ((*(scp->mouse_pos+scp->xsize) & 0xff) * font_size), - &scp->mouse_cursor[64], font_size); - bcopy(font_buffer + ((*(scp->mouse_pos+scp->xsize+1) & 0xff) * font_size), - &scp->mouse_cursor[96], font_size); - for (i=0; i<font_size; i++) { - buffer[i] = scp->mouse_cursor[i]<<8 | scp->mouse_cursor[i+32]; - buffer[i+font_size]=scp->mouse_cursor[i+64]<<8|scp->mouse_cursor[i+96]; - } - - /* now and-or in the mousepointer image */ - for (i=0; i<16; i++) { - buffer[i+yoffset] = - ( buffer[i+yoffset] & ~(mouse_and_mask[i] >> xoffset)) - | (mouse_or_mask[i] >> xoffset); - } - for (i=0; i<font_size; i++) { - scp->mouse_cursor[i] = (buffer[i] & 0xff00) >> 8; - scp->mouse_cursor[i+32] = buffer[i] & 0xff; - scp->mouse_cursor[i+64] = (buffer[i+font_size] & 0xff00) >> 8; - scp->mouse_cursor[i+96] = buffer[i+font_size] & 0xff; - } - - scp->mouse_oldpos = scp->mouse_pos; - -#if 1 - /* wait for vertical retrace to avoid jitter on some videocards */ - crtc_addr = scp->adp->va_crtc_addr; - while (!(inb(crtc_addr+6) & 0x08)) /* idle */ ; -#endif - font_loading_in_progress = TRUE; - (*vidsw[scp->ad]->load_font)(scp->adp, 0, 32, scp->mouse_cursor, - SC_MOUSE_CHAR, 4); - font_loading_in_progress = FALSE; - - writew(crt_pos, (*(scp->mouse_pos) & 0xff00) | SC_MOUSE_CHAR); - writew(crt_pos+2*scp->xsize, - (*(scp->mouse_pos + scp->xsize) & 0xff00) | (SC_MOUSE_CHAR + 2)); - if (scp->mouse_xpos < (scp->xsize-1)*8) { - writew(crt_pos + 2, (*(scp->mouse_pos + 1) & 0xff00) | (SC_MOUSE_CHAR + 1)); - writew(crt_pos+2*scp->xsize + 2, - (*(scp->mouse_pos + scp->xsize + 1) & 0xff00) | (SC_MOUSE_CHAR + 3)); - } - mark_for_update(scp, scp->mouse_pos - scp->scr_buf); - mark_for_update(scp, scp->mouse_pos + scp->xsize + 1 - scp->scr_buf); -} - -static void -remove_mouse_image(scr_stat *scp) -{ - vm_offset_t crt_pos; - - if (!ISTEXTSC(scp)) - return; - - crt_pos = scp->adp->va_window + 2*(scp->mouse_oldpos - scp->scr_buf); - writew(crt_pos, *(scp->mouse_oldpos)); - writew(crt_pos+2, *(scp->mouse_oldpos+1)); - writew(crt_pos+2*scp->xsize, *(scp->mouse_oldpos+scp->xsize)); - writew(crt_pos+2*scp->xsize+2, *(scp->mouse_oldpos+scp->xsize+1)); - mark_for_update(scp, scp->mouse_oldpos - scp->scr_buf); - mark_for_update(scp, scp->mouse_oldpos + scp->xsize + 1 - scp->scr_buf); -} - -static void -draw_cutmarking(scr_stat *scp) -{ - vm_offset_t crt_pos; - u_short *ptr; - u_short och, nch; - - crt_pos = scp->adp->va_window; - for (ptr=scp->scr_buf; ptr<=(scp->scr_buf+(scp->xsize*scp->ysize)); ptr++) { - nch = och = readw(crt_pos + 2*(ptr - scp->scr_buf)); - /* are we outside the selected area ? */ - if ( ptr < (scp->mouse_cut_start > scp->mouse_cut_end ? - scp->mouse_cut_end : scp->mouse_cut_start) || - ptr >= (scp->mouse_cut_start > scp->mouse_cut_end ? - scp->mouse_cut_start : scp->mouse_cut_end)) { - if (ptr != scp->cursor_pos) - nch = (och & 0xff) | (*ptr & 0xff00); - } - else { - /* are we clear of the cursor image ? */ - if (ptr != scp->cursor_pos) - nch = (och & 0x88ff) | (*ptr & 0x7000)>>4 | (*ptr & 0x0700)<<4; - else { - if (sc_flags & CHAR_CURSOR) - nch = (och & 0x88ff)|(*ptr & 0x7000)>>4|(*ptr & 0x0700)<<4; - else - if (!(sc_flags & BLINK_CURSOR)) - nch = (och & 0xff) | (*ptr & 0xff00); - } - } - if (nch != och) - writew(crt_pos + 2*(ptr - scp->scr_buf), nch); - } -} - -static void -remove_cutmarking(scr_stat *scp) -{ - scp->mouse_cut_start = scp->mouse_cut_end = NULL; - scp->status &= ~MOUSE_CUTTING; - mark_all(scp); -} - -static void -do_bell(scr_stat *scp, int pitch, int duration) -{ - if (cold || shutdown_in_progress) - return; - - if (scp != cur_console && (sc_flags & QUIET_BELL)) - return; - - if (sc_flags & VISUAL_BELL) { - if (blink_in_progress) - return; - blink_in_progress = 4; - if (scp != cur_console) - blink_in_progress += 2; - blink_screen(cur_console); - } else { - if (scp != cur_console) - pitch *= 2; - sysbeep(pitch, duration); - } -} - -static void -blink_screen(void *arg) -{ - scr_stat *scp = arg; - - if (!ISTEXTSC(scp) || (blink_in_progress <= 1)) { - blink_in_progress = FALSE; - mark_all(scp); - if (delayed_next_scr) - switch_scr(scp, delayed_next_scr - 1); - } - else { - if (blink_in_progress & 1) - fillw_io(kernel_default.std_color | scr_map[0x20], - scp->adp->va_window, - scp->xsize * scp->ysize); - else - fillw_io(kernel_default.rev_color | scr_map[0x20], - scp->adp->va_window, - scp->xsize * scp->ysize); - blink_in_progress--; - timeout(blink_screen, scp, hz / 10); - } -} - -void -sc_bcopy(scr_stat *scp, u_short *p, int from, int to, int mark) -{ - u_char *font; - vm_offset_t d; - vm_offset_t e; - u_char *f; - int font_size; - int line_length; - int xsize; - u_short bg; - int i, j; - u_char c; - - if (ISTEXTSC(scp)) { - bcopy_toio(p + from, scp->adp->va_window + 2*from, - (to - from + 1)*sizeof(u_short)); - } else /* if ISPIXELSC(scp) */ { - if (mark) - mark = 255; - font_size = scp->font_size; - if (font_size < 14) - font = font_8; - else if (font_size >= 16) - font = font_16; - else - font = font_14; - line_length = scp->xpixel/8; - xsize = scp->xsize; - d = scp->adp->va_window - + scp->xoff + scp->yoff*font_size*line_length - + (from%xsize) + font_size*line_length*(from/xsize); - - outw(GDCIDX, 0x0005); /* read mode 0, write mode 0 */ - outw(GDCIDX, 0x0003); /* data rotate/function select */ - outw(GDCIDX, 0x0f01); /* set/reset enable */ - bg = -1; - for (i = from ; i <= to ; i++) { - /* set background color in EGA/VGA latch */ - if (bg != (p[i] & 0xf000)) { - bg = (p[i] & 0xf000); - outw(GDCIDX, (bg >> 4) | 0x00); /* set/reset */ - outw(GDCIDX, 0xff08); /* bit mask */ - writeb(d, 0); - c = readb(d); /* set the background color in the latch */ - } - /* foreground color */ - outw(GDCIDX, (p[i] & 0x0f00) | 0x00); /* set/reset */ - e = d; - f = &font[(p[i] & 0x00ff)*font_size]; - for (j = 0 ; j < font_size; j++, f++) { - outw(GDCIDX, ((*f^mark) << 8) | 0x08); /* bit mask */ - writeb(e, 0); - e += line_length; - } - d++; - if ((i % xsize) == xsize - 1) - d += scp->xoff*2 + (font_size - 1)*line_length; - } - outw(GDCIDX, 0x0000); /* set/reset */ - outw(GDCIDX, 0x0001); /* set/reset enable */ - outw(GDCIDX, 0xff08); /* bit mask */ - -#if 0 /* VGA only */ - outw(GDCIDX, 0x0305); /* read mode 0, write mode 3 */ - outw(GDCIDX, 0x0003); /* data rotate/function select */ - outw(GDCIDX, 0x0f01); /* set/reset enable */ - outw(GDCIDX, 0xff08); /* bit mask */ - bg = -1; - for (i = from ; i <= to ; i++) { - /* set background color in EGA/VGA latch */ - if (bg != (p[i] & 0xf000)) { - bg = (p[i] & 0xf000); - outw(GDCIDX, 0x0005); /* read mode 0, write mode 0 */ - outw(GDCIDX, (bg >> 4) | 0x00); /* set/reset */ - *d = 0; - c = *d; /* set the background color in the latch */ - outw(GDCIDX, 0x0305); /* read mode 0, write mode 3 */ - } - /* foreground color */ - outw(GDCIDX, (p[i] & 0x0f00) | 0x00); /* set/reset */ - e = (u_char *)d; - f = &font[(p[i] & 0x00ff)*font_size]; - for (j = 0 ; j < font_size; j++, f++) { - *e = *f^mark; - e += line_length; - } - d++; - if ((i % xsize) == xsize - 1) - d += scp->xoff*2 + (font_size - 1)*line_length; - } - outw(GDCIDX, 0x0005); /* read mode 0, write mode 0 */ - outw(GDCIDX, 0x0000); /* set/reset */ - outw(GDCIDX, 0x0001); /* set/reset enable */ -#endif /* 0 */ - } -} - -#endif /* NSC */ diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h deleted file mode 100644 index 1a88a8c7b5ae9..0000000000000 --- a/sys/dev/syscons/syscons.h +++ /dev/null @@ -1,241 +0,0 @@ -/*- - * Copyright (c) 1995-1998 Søren Schmidt - * 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, - * without modification, immediately at the beginning of the file. - * 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * $Id: syscons.h,v 1.45 1999/01/11 03:18:29 yokota Exp $ - */ - -#ifndef _DEV_SYSCONS_SYSCONS_H_ -#define _DEV_SYSCONS_SYSCONS_H_ - -/* vm things */ -#define ISMAPPED(pa, width) \ - (((pa) <= (u_long)0x1000 - (width)) \ - || ((pa) >= 0xa0000 && (pa) <= 0x100000 - (width))) -#define pa_to_va(pa) (KERNBASE + (pa)) /* works if ISMAPPED(pa...) */ - -/* printable chars */ -#define PRINTABLE(ch) ((ch) > 0x1b || ((ch) > 0x0d && (ch) < 0x1b) \ - || (ch) < 0x07) - -/* macros for "intelligent" screen update */ -#define mark_for_update(scp, x) {\ - if ((x) < scp->start) scp->start = (x);\ - else if ((x) > scp->end) scp->end = (x);\ - } -#define mark_all(scp) {\ - scp->start = 0;\ - scp->end = scp->xsize * scp->ysize - 1;\ - } - -/* status flags */ -#define UNKNOWN_MODE 0x00010 -#define SWITCH_WAIT_REL 0x00080 -#define SWITCH_WAIT_ACQ 0x00100 -#define BUFFER_SAVED 0x00200 -#define CURSOR_ENABLED 0x00400 -#define MOUSE_ENABLED 0x00800 -#define MOUSE_MOVED 0x01000 -#define MOUSE_CUTTING 0x02000 -#define MOUSE_VISIBLE 0x04000 -#define GRAPHICS_MODE 0x08000 -#define PIXEL_MODE 0x10000 -#define SAVER_RUNNING 0x20000 - -/* configuration flags */ -#define VISUAL_BELL 0x00001 -#define BLINK_CURSOR 0x00002 -#define CHAR_CURSOR 0x00004 -/* these options are now obsolete; use corresponding options for kbd driver */ -#if 0 -#define DETECT_KBD 0x00008 -#define XT_KEYBD 0x00010 -#define KBD_NORESET 0x00020 -#endif -#define QUIET_BELL 0x00040 -#define VESA800X600 0x00080 -#define AUTODETECT_KBD 0x00100 - -/* attribute flags */ -#define NORMAL_ATTR 0x00 -#define BLINK_ATTR 0x01 -#define BOLD_ATTR 0x02 -#define UNDERLINE_ATTR 0x04 -#define REVERSE_ATTR 0x08 -#define FOREGROUND_CHANGED 0x10 -#define BACKGROUND_CHANGED 0x20 - -/* misc defines */ -#define FALSE 0 -#define TRUE 1 -#define MAX_ESC_PAR 5 -#define LOAD 1 -#define SAVE 0 -#define COL 80 -#define ROW 25 -#define BELL_DURATION 5 -#define BELL_PITCH 800 -#define CONSOLE_BUFSIZE 1024 -#define PCBURST 128 -#define FONT_NONE 1 -#define FONT_8 2 -#define FONT_14 4 -#define FONT_16 8 - -/* special characters */ -#define cntlc 0x03 -#define cntld 0x04 -#define bs 0x08 -#define lf 0x0a -#define cr 0x0d -#define del 0x7f - -#define DEAD_CHAR 0x07 /* char used for cursor */ - -typedef struct term_stat { - int esc; /* processing escape sequence */ - int num_param; /* # of parameters to ESC */ - int last_param; /* last parameter # */ - int param[MAX_ESC_PAR]; /* contains ESC parameters */ - int cur_attr; /* current hardware attr word */ - int attr_mask; /* current logical attr mask */ - int cur_color; /* current hardware color */ - int std_color; /* normal hardware color */ - int rev_color; /* reverse hardware color */ -} term_stat; - -typedef struct scr_stat { - int ad; /* video adapter index */ - video_adapter_t *adp; /* video adapter structure */ - u_short *scr_buf; /* buffer when off screen */ - int xpos; /* current X position */ - int ypos; /* current Y position */ - int saved_xpos; /* saved X position */ - int saved_ypos; /* saved Y position */ - int xsize; /* X text size */ - int ysize; /* Y text size */ - int xpixel; /* X graphics size */ - int ypixel; /* Y graphics size */ - int xoff; /* X offset in pixel mode */ - int yoff; /* Y offset in pixel mode */ - int font_size; /* fontsize in Y direction */ - int start; /* modified area start */ - int end; /* modified area end */ - term_stat term; /* terminal emulation stuff */ - int status; /* status (bitfield) */ - int kbd_mode; /* keyboard I/O mode */ - u_short *cursor_pos; /* cursor buffer position */ - u_short *cursor_oldpos; /* cursor old buffer position */ - u_short cursor_saveunder; /* saved chars under cursor */ - char cursor_start; /* cursor start line # */ - char cursor_end; /* cursor end line # */ - u_short *mouse_pos; /* mouse buffer position */ - u_short *mouse_oldpos; /* mouse old buffer position */ - short mouse_xpos; /* mouse x coordinate */ - short mouse_ypos; /* mouse y coordinate */ - short mouse_buttons; /* mouse buttons */ - u_char mouse_cursor[128]; /* mouse cursor bitmap store */ - u_short *mouse_cut_start; /* mouse cut start pos */ - u_short *mouse_cut_end; /* mouse cut end pos */ - struct proc *mouse_proc; /* proc* of controlling proc */ - pid_t mouse_pid; /* pid of controlling proc */ - int mouse_signal; /* signal # to report with */ - u_short bell_duration; - u_short bell_pitch; - u_char border; /* border color */ - int mode; /* mode */ - pid_t pid; /* pid of controlling proc */ - struct proc *proc; /* proc* of controlling proc */ - struct vt_mode smode; /* switch mode */ - u_short *history; /* circular history buffer */ - u_short *history_head; /* current head position */ - u_short *history_pos; /* position shown on screen */ - u_short *history_save; /* save area index */ - int history_size; /* size of history buffer */ -#ifdef __i386__ - struct apmhook r_hook; /* reconfiguration support */ -#endif - int splash_save_mode; /* saved mode for splash screen */ - int splash_save_status; /* saved status for splash screen */ -} scr_stat; - -typedef struct default_attr { - int std_color; /* normal hardware color */ - int rev_color; /* reverse hardware color */ -} default_attr; - - -#define ISTEXTSC(scp) (!((scp)->status \ - & (UNKNOWN_MODE | GRAPHICS_MODE | PIXEL_MODE))) -#define ISGRAPHSC(scp) (((scp)->status \ - & (UNKNOWN_MODE | GRAPHICS_MODE))) -#define ISPIXELSC(scp) (((scp)->status \ - & (UNKNOWN_MODE | GRAPHICS_MODE | PIXEL_MODE))\ - == PIXEL_MODE) -#define ISUNKNOWNSC(scp) ((scp)->status & UNKNOWN_MODE) - -#define ISFONTAVAIL(af) ((af) & V_ADP_FONT) -#define ISMOUSEAVAIL(af) ((af) & V_ADP_FONT) -#define ISPALAVAIL(af) ((af) & V_ADP_PALETTE) - -/* misc prototypes used by different syscons related LKM's */ - -/* syscons.c */ -int sc_probe_unit(int unit, int flags); -int sc_attach_unit(int unit, int flags); - -extern int (*sc_user_ioctl)(dev_t dev, u_long cmd, caddr_t data, int flag, - struct proc *p); - -int set_mode(scr_stat *scp); -scr_stat *sc_get_scr_stat(dev_t dev); - -void copy_font(scr_stat *scp, int operation, int font_size, u_char *font_image); -void set_border(scr_stat *scp, int color); -#define save_palette(adp, pal) \ - (*vidsw[(adp)->va_index]->save_palette)((adp), (pal)) -#define load_palette(adp, pal) \ - (*vidsw[(adp)->va_index]->load_palette)((adp), (pal)) - -void sc_touch_scrn_saver(void); -void sc_clear_screen(scr_stat *scp); -void sc_move_mouse(scr_stat *scp, int x, int y); -int sc_clean_up(scr_stat *scp); -void sc_alloc_scr_buffer(scr_stat *scp, int wait, int clear); -void sc_alloc_cut_buffer(scr_stat *scp, int wait); -void sc_alloc_history_buffer(scr_stat *scp, int lines, int extra, int wait); -struct tty *scdevtotty(dev_t dev); - -/* scvidctl.c */ -int sc_set_text_mode(scr_stat *scp, struct tty *tp, int mode, - int xsize, int ysize, int fontsize); -int sc_set_graphics_mode(scr_stat *scp, struct tty *tp, int mode); -int sc_set_pixel_mode(scr_stat *scp, struct tty *tp, - int xsize, int ysize, int fontsize); -int sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, - struct proc *p); - -#endif /* !_DEV_SYSCONS_SYSCONS_H_ */ diff --git a/sys/dev/usb/hid.c b/sys/dev/usb/hid.c deleted file mode 100644 index ea04a05b67e56..0000000000000 --- a/sys/dev/usb/hid.c +++ /dev/null @@ -1,471 +0,0 @@ -/* $NetBSD: hid.c,v 1.7 1999/01/08 11:58:25 augustss Exp $ */ -/* FreeBSD $Id: hid.c,v 1.5 1999/01/07 23:31:29 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__FreeBSD__) -#include <sys/bus.h> -#endif - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> - -#include <dev/usb/hid.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -extern int usbdebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -static void hid_clear_local __P((struct hid_item *)); - -#define MAXUSAGE 100 -struct hid_data { - u_char *start; - u_char *end; - u_char *p; - struct hid_item cur; - int32_t usages[MAXUSAGE]; - int nu; - int minset; - int multi; - int multimax; - int kindset; -}; - -static void -hid_clear_local(c) - struct hid_item *c; -{ - c->usage = 0; - c->usage_minimum = 0; - c->usage_maximum = 0; - c->designator_index = 0; - c->designator_minimum = 0; - c->designator_maximum = 0; - c->string_index = 0; - c->string_minimum = 0; - c->string_maximum = 0; - c->set_delimiter = 0; -} - -struct hid_data * -hid_start_parse(d, len, kindset) - void *d; - int len; - int kindset; -{ - struct hid_data *s; - - s = malloc(sizeof *s, M_TEMP, M_WAITOK); - memset(s, 0, sizeof *s); - s->start = s->p = d; - s->end = (char *)d + len; - s->kindset = kindset; - return (s); -} - -void -hid_end_parse(s) - struct hid_data *s; -{ - while (s->cur.next) { - struct hid_item *hi = s->cur.next->next; - free(s->cur.next, M_TEMP); - s->cur.next = hi; - } - free(s, M_TEMP); -} - -int -hid_get_item(s, h) - struct hid_data *s; - struct hid_item *h; -{ - struct hid_item *c = &s->cur; - int bTag, bType, bSize; - u_char *data; - int32_t dval; - u_char *p; - struct hid_item *hi; - int i; - - top: - if (s->multimax) { - if (s->multi < s->multimax) { - c->usage = s->usages[min(s->multi, s->nu-1)]; - s->multi++; - *h = *c; - c->loc.pos += c->loc.size; - h->next = 0; - return (1); - } else { - c->loc.count = s->multimax; - s->multimax = 0; - s->nu = 0; - hid_clear_local(c); - } - } - for (;;) { - p = s->p; - if (p >= s->end) - return (0); - - bSize = *p++; - if (bSize == 0xfe) { - /* long item */ - bSize = *p++; - bSize |= *p++ << 8; - bTag = *p++; - data = p; - p += bSize; - bType = 0xff; /* XXX what should it be */ - } else { - /* short item */ - bTag = bSize >> 4; - bType = (bSize >> 2) & 3; - bSize &= 3; - if (bSize == 3) bSize = 4; - data = p; - p += bSize; - } - s->p = p; - switch(bSize) { - case 0: - dval = 0; - break; - case 1: - dval = (int8_t)*data++; - break; - case 2: - dval = *data++; - dval |= *data++ << 8; - dval = (int16_t)dval; - break; - case 4: - dval = *data++; - dval |= *data++ << 8; - dval |= *data++ << 16; - dval |= *data++ << 24; - break; - default: - printf("BAD LENGTH %d\n", bSize); - continue; - } - - switch (bType) { - case 0: /* Main */ - switch (bTag) { - case 8: /* Input */ - if (!(s->kindset & (1 << hid_input))) - continue; - c->kind = hid_input; - c->flags = dval; - ret: - if (c->flags & HIO_VARIABLE) { - s->multimax = c->loc.count; - s->multi = 0; - c->loc.count = 1; - if (s->minset) { - for (i = c->usage_minimum; - i <= c->usage_maximum; - i++) { - s->usages[s->nu] = i; - if (s->nu < MAXUSAGE-1) - s->nu++; - } - s->minset = 0; - } - goto top; - } else { - *h = *c; - h->next = 0; - c->loc.pos += - c->loc.size * c->loc.count; - hid_clear_local(c); - s->minset = 0; - return (1); - } - case 9: /* Output */ - if (!(s->kindset & (1 << hid_output))) - continue; - c->kind = hid_output; - c->flags = dval; - goto ret; - case 10: /* Collection */ - c->kind = hid_collection; - c->collection = dval; - c->collevel++; - *h = *c; - hid_clear_local(c); - s->nu = 0; - return (1); - case 11: /* Feature */ - if (!(s->kindset & (1 << hid_feature))) - continue; - c->kind = hid_feature; - c->flags = dval; - goto ret; - case 12: /* End collection */ - c->kind = hid_endcollection; - c->collevel--; - *h = *c; - hid_clear_local(c); - s->nu = 0; - return (1); - default: - printf("Main bTag=%d\n", bTag); - break; - } - break; - case 1: /* Global */ - switch (bTag) { - case 0: - c->_usage_page = dval << 16; - break; - case 1: - c->logical_minimum = dval; - break; - case 2: - c->logical_maximum = dval; - break; - case 3: - c->physical_maximum = dval; - break; - case 4: - c->physical_maximum = dval; - break; - case 5: - c->unit_exponent = dval; - break; - case 6: - c->unit = dval; - break; - case 7: - c->loc.size = dval; - break; - case 8: - c->report_ID = dval; - break; - case 9: - c->loc.count = dval; - break; - case 10: /* Push */ - hi = malloc(sizeof *hi, M_TEMP, M_WAITOK); - *hi = s->cur; - c->next = hi; - break; - case 11: /* Pop */ - hi = c->next; - s->cur = *hi; - free(hi, M_TEMP); - break; - default: - printf("Global bTag=%d\n", bTag); - break; - } - break; - case 2: /* Local */ - switch (bTag) { - case 0: - if (bSize == 1) - dval = c->_usage_page | (dval&0xff); - else if (bSize == 2) - dval = c->_usage_page | (dval&0xffff); - c->usage = dval; - if (s->nu < MAXUSAGE) - s->usages[s->nu++] = dval; - /* else XXX */ - break; - case 1: - s->minset = 1; - if (bSize == 1) - dval = c->_usage_page | (dval&0xff); - else if (bSize == 2) - dval = c->_usage_page | (dval&0xffff); - c->usage_minimum = dval; - break; - case 2: - if (bSize == 1) - dval = c->_usage_page | (dval&0xff); - else if (bSize == 2) - dval = c->_usage_page | (dval&0xffff); - c->usage_maximum = dval; - break; - case 3: - c->designator_index = dval; - break; - case 4: - c->designator_minimum = dval; - break; - case 5: - c->designator_maximum = dval; - break; - case 7: - c->string_index = dval; - break; - case 8: - c->string_minimum = dval; - break; - case 9: - c->string_maximum = dval; - break; - case 10: - c->set_delimiter = dval; - break; - default: - printf("Local bTag=%d\n", bTag); - break; - } - break; - default: - printf("default bType=%d\n", bType); - break; - } - } -} - -int -hid_report_size(buf, len, k, idp) - void *buf; - int len; - enum hid_kind k; - u_int8_t *idp; -{ - struct hid_data *d; - struct hid_item h; - int size, id; - - id = 0; - for (d = hid_start_parse(buf, len, 1<<k); hid_get_item(d, &h); ) - if (h.report_ID) - id = h.report_ID; - hid_end_parse(d); - size = h.loc.pos; - if (id) { - size += 8; - *idp = id; /* XXX wrong */ - } else - *idp = 0; - return ((size + 7) / 8); -} - -int -hid_locate(desc, size, u, k, loc, flags) - void *desc; - int size; - u_int32_t u; - enum hid_kind k; - struct hid_location *loc; - u_int32_t *flags; -{ - struct hid_data *d; - struct hid_item h; - - for (d = hid_start_parse(desc, size, 1<<k); hid_get_item(d, &h); ) { - if (h.kind == k && !(h.flags & HIO_CONST) && h.usage == u) { - if (loc) - *loc = h.loc; - if (flags) - *flags = h.flags; - hid_end_parse(d); - return (1); - } - } - hid_end_parse(d); - loc->size = 0; - return (0); -} - -u_long -hid_get_data(buf, loc) - u_char *buf; - struct hid_location *loc; -{ - u_int hpos = loc->pos; - u_int hsize = loc->size; - u_int32_t data; - int i, s; - - DPRINTFN(10, ("hid_get_data: loc %d/%d\n", hpos, hsize)); - - if (hsize == 0) - return (0); - - data = 0; - s = hpos / 8; - for (i = hpos; i < hpos+hsize; i += 8) - data |= buf[i / 8] << ((i / 8 - s) * 8); - data >>= hpos % 8; - data &= (1 << hsize) - 1; - hsize = 32 - hsize; - /* Sign extend */ - data = ((int32_t)data << hsize) >> hsize; - DPRINTFN(10,("hid_get_data: loc %d/%d = %lu\n", - loc->pos, loc->size, (long)data)); - return (data); -} - -int -hid_is_collection(desc, size, usage) - void *desc; - int size; - u_int32_t usage; -{ - struct hid_data *hd; - struct hid_item hi; - int r; - - hd = hid_start_parse(desc, size, hid_input); - if (!hd) - return (0); - - r = hid_get_item(hd, &hi) && - hi.kind == hid_collection && - hi.usage == usage; - hid_end_parse(hd); - return (r); -} diff --git a/sys/dev/usb/hid.h b/sys/dev/usb/hid.h deleted file mode 100644 index 0529701d72a2e..0000000000000 --- a/sys/dev/usb/hid.h +++ /dev/null @@ -1,91 +0,0 @@ -/* $NetBSD: hid.h,v 1.3 1998/11/25 22:32:04 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -enum hid_kind { - hid_input, hid_output, hid_feature, hid_collection, hid_endcollection -}; - -struct hid_location { - u_int32_t size; - u_int32_t count; - u_int32_t pos; -}; - -struct hid_item { - /* Global */ - int32_t _usage_page; - int32_t logical_minimum; - int32_t logical_maximum; - int32_t physical_minimum; - int32_t physical_maximum; - int32_t unit_exponent; - int32_t unit; - int32_t report_ID; - /* Local */ - int32_t usage; - int32_t usage_minimum; - int32_t usage_maximum; - int32_t designator_index; - int32_t designator_minimum; - int32_t designator_maximum; - int32_t string_index; - int32_t string_minimum; - int32_t string_maximum; - int32_t set_delimiter; - /* Misc */ - int32_t collection; - int collevel; - enum hid_kind kind; - u_int32_t flags; - /* Location */ - struct hid_location loc; - /* */ - struct hid_item *next; -}; - -struct hid_data *hid_start_parse __P((void *d, int len, int kindset)); -void hid_end_parse __P((struct hid_data *s)); -int hid_get_item __P((struct hid_data *s, struct hid_item *h)); -int hid_report_size __P((void *buf, int len, enum hid_kind k, u_int8_t *id)); -int hid_locate __P((void *desc, int size, u_int32_t usage, - enum hid_kind kind, struct hid_location *loc, - u_int32_t *flags)); -u_long hid_get_data __P((u_char *buf, struct hid_location *loc)); -int hid_is_collection __P((void *desc, int size, u_int32_t usage)); diff --git a/sys/dev/usb/ohci.c b/sys/dev/usb/ohci.c deleted file mode 100644 index 1cb64b33769ad..0000000000000 --- a/sys/dev/usb/ohci.c +++ /dev/null @@ -1,2228 +0,0 @@ -/* $NetBSD: ohci.c,v 1.23 1999/01/07 02:06:05 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * USB Open Host Controller driver. - * - * OHCI spec: http://www.intel.com/design/usb/ohci11d.pdf - * USB spec: http://www.teleport.com/cgi-bin/mailmerge.cgi/~usb/cgiform.tpl - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#endif -#include <sys/proc.h> -#include <sys/queue.h> -#include <sys/select.h> - -#include <machine/bus.h> -#include <machine/endian.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usb_quirks.h> -#include <dev/usb/usb_mem.h> - -#include <dev/usb/ohcireg.h> -#include <dev/usb/ohcivar.h> - -#if defined(__FreeBSD__) -#include <machine/clock.h> - -#define delay(d) DELAY(d) - -#endif - -/* - * The OHCI controller is little endian, so on big endian machines - * the data strored in memory needs to be swapped. - */ -#if BYTE_ORDER == BIG_ENDIAN -#define LE(x) (bswap32(x)) -#else -#define LE(x) (x) -#endif - -struct ohci_pipe; - -ohci_soft_ed_t *ohci_alloc_sed __P((ohci_softc_t *)); -void ohci_free_sed __P((ohci_softc_t *, ohci_soft_ed_t *)); - -ohci_soft_td_t *ohci_alloc_std __P((ohci_softc_t *)); -void ohci_free_std __P((ohci_softc_t *, ohci_soft_td_t *)); - -usbd_status ohci_open __P((usbd_pipe_handle)); -void ohci_poll __P((struct usbd_bus *)); -void ohci_waitintr __P((ohci_softc_t *, usbd_request_handle)); -void ohci_rhsc __P((ohci_softc_t *, usbd_request_handle)); -void ohci_process_done __P((ohci_softc_t *, ohci_physaddr_t)); -void ohci_ii_done __P((ohci_softc_t *, usbd_request_handle)); -void ohci_ctrl_done __P((ohci_softc_t *, usbd_request_handle)); -void ohci_intr_done __P((ohci_softc_t *, usbd_request_handle)); -void ohci_bulk_done __P((ohci_softc_t *, usbd_request_handle)); - -usbd_status ohci_device_request __P((usbd_request_handle reqh)); -void ohci_add_ed __P((ohci_soft_ed_t *, ohci_soft_ed_t *)); -void ohci_rem_ed __P((ohci_soft_ed_t *, ohci_soft_ed_t *)); -void ohci_hash_add_td __P((ohci_softc_t *, ohci_soft_td_t *)); -void ohci_hash_rem_td __P((ohci_softc_t *, ohci_soft_td_t *)); -ohci_soft_td_t *ohci_hash_find_td __P((ohci_softc_t *, ohci_physaddr_t)); - -usbd_status ohci_root_ctrl_transfer __P((usbd_request_handle)); -usbd_status ohci_root_ctrl_start __P((usbd_request_handle)); -void ohci_root_ctrl_abort __P((usbd_request_handle)); -void ohci_root_ctrl_close __P((usbd_pipe_handle)); - -usbd_status ohci_root_intr_transfer __P((usbd_request_handle)); -usbd_status ohci_root_intr_start __P((usbd_request_handle)); -void ohci_root_intr_abort __P((usbd_request_handle)); -void ohci_root_intr_close __P((usbd_pipe_handle)); - -usbd_status ohci_device_ctrl_transfer __P((usbd_request_handle)); -usbd_status ohci_device_ctrl_start __P((usbd_request_handle)); -void ohci_device_ctrl_abort __P((usbd_request_handle)); -void ohci_device_ctrl_close __P((usbd_pipe_handle)); - -usbd_status ohci_device_bulk_transfer __P((usbd_request_handle)); -usbd_status ohci_device_bulk_start __P((usbd_request_handle)); -void ohci_device_bulk_abort __P((usbd_request_handle)); -void ohci_device_bulk_close __P((usbd_pipe_handle)); - -usbd_status ohci_device_intr_transfer __P((usbd_request_handle)); -usbd_status ohci_device_intr_start __P((usbd_request_handle)); -void ohci_device_intr_abort __P((usbd_request_handle)); -void ohci_device_intr_close __P((usbd_pipe_handle)); -usbd_status ohci_device_setintr __P((ohci_softc_t *sc, - struct ohci_pipe *pipe, int ival)); - -int ohci_str __P((usb_string_descriptor_t *, int, char *)); - -void ohci_timeout __P((void *)); -void ohci_rhsc_able __P((ohci_softc_t *, int)); - -#ifdef USB_DEBUG -ohci_softc_t *thesc; -void ohci_dumpregs __P((ohci_softc_t *)); -void ohci_dump_tds __P((ohci_soft_td_t *)); -void ohci_dump_td __P((ohci_soft_td_t *)); -void ohci_dump_ed __P((ohci_soft_ed_t *)); -#endif - -#if defined(__NetBSD__) -#define OWRITE4(sc, r, x) bus_space_write_4((sc)->iot, (sc)->ioh, (r), (x)) -#define OREAD4(sc, r) bus_space_read_4((sc)->iot, (sc)->ioh, (r)) -#define OREAD2(sc, r) bus_space_read_2((sc)->iot, (sc)->ioh, (r)) -#elif defined(__FreeBSD__) -#define OWRITE4(sc, r, x) *(u_int32_t *) ((sc)->sc_iobase + (r)) = x -#define OREAD4(sc, r) (*(u_int32_t *) ((sc)->sc_iobase + (r))) -#define OREAD2(sc, r) (*(u_int16_t *) ((sc)->sc_iobase + (r))) -#endif - -/* Reverse the bits in a value 0 .. 31 */ -static u_int8_t revbits[OHCI_NO_INTRS] = - { 0x00, 0x10, 0x08, 0x18, 0x04, 0x14, 0x0c, 0x1c, - 0x02, 0x12, 0x0a, 0x1a, 0x06, 0x16, 0x0e, 0x1e, - 0x01, 0x11, 0x09, 0x19, 0x05, 0x15, 0x0d, 0x1d, - 0x03, 0x13, 0x0b, 0x1b, 0x07, 0x17, 0x0f, 0x1f }; - -struct ohci_pipe { - struct usbd_pipe pipe; - ohci_soft_ed_t *sed; - ohci_soft_td_t *tail; - /* Info needed for different pipe kinds. */ - union { - /* Control pipe */ - struct { - usb_dma_t datadma; - usb_dma_t reqdma; - u_int length; - ohci_soft_td_t *setup, *xfer, *stat; - } ctl; - /* Interrupt pipe */ - struct { - usb_dma_t datadma; - int nslots; - int pos; - } intr; - /* Bulk pipe */ - struct { - usb_dma_t datadma; - u_int length; - } bulk; - } u; -}; - -#define OHCI_INTR_ENDPT 1 - -struct usbd_methods ohci_root_ctrl_methods = { - ohci_root_ctrl_transfer, - ohci_root_ctrl_start, - ohci_root_ctrl_abort, - ohci_root_ctrl_close, - 0, -}; - -struct usbd_methods ohci_root_intr_methods = { - ohci_root_intr_transfer, - ohci_root_intr_start, - ohci_root_intr_abort, - ohci_root_intr_close, - 0, -}; - -struct usbd_methods ohci_device_ctrl_methods = { - ohci_device_ctrl_transfer, - ohci_device_ctrl_start, - ohci_device_ctrl_abort, - ohci_device_ctrl_close, - 0, -}; - -struct usbd_methods ohci_device_intr_methods = { - ohci_device_intr_transfer, - ohci_device_intr_start, - ohci_device_intr_abort, - ohci_device_intr_close, -}; - -struct usbd_methods ohci_device_bulk_methods = { - ohci_device_bulk_transfer, - ohci_device_bulk_start, - ohci_device_bulk_abort, - ohci_device_bulk_close, - 0, -}; - -ohci_soft_ed_t * -ohci_alloc_sed(sc) - ohci_softc_t *sc; -{ - ohci_soft_ed_t *sed; - usbd_status r; - int i, offs; - usb_dma_t dma; - - if (!sc->sc_freeeds) { - DPRINTFN(2, ("ohci_alloc_sed: allocating chunk\n")); - sed = malloc(sizeof(ohci_soft_ed_t) * OHCI_ED_CHUNK, - M_USBDEV, M_NOWAIT); - if (!sed) - return 0; - r = usb_allocmem(sc->sc_dmatag, OHCI_ED_SIZE * OHCI_ED_CHUNK, - OHCI_ED_ALIGN, &dma); - if (r != USBD_NORMAL_COMPLETION) { - free(sed, M_USBDEV); - return 0; - } - for(i = 0; i < OHCI_ED_CHUNK; i++, sed++) { - offs = i * OHCI_ED_SIZE; - sed->physaddr = DMAADDR(&dma) + offs; - sed->ed = (ohci_ed_t *) - ((char *)KERNADDR(&dma) + offs); - sed->next = sc->sc_freeeds; - sc->sc_freeeds = sed; - } - } - sed = sc->sc_freeeds; - sc->sc_freeeds = sed->next; - memset(sed->ed, 0, OHCI_ED_SIZE); - sed->next = 0; - return sed; -} - -void -ohci_free_sed(sc, sed) - ohci_softc_t *sc; - ohci_soft_ed_t *sed; -{ - sed->next = sc->sc_freeeds; - sc->sc_freeeds = sed; -} - -ohci_soft_td_t * -ohci_alloc_std(sc) - ohci_softc_t *sc; -{ - ohci_soft_td_t *std; - usbd_status r; - int i, offs; - usb_dma_t dma; - - if (!sc->sc_freetds) { - DPRINTFN(2, ("ohci_alloc_std: allocating chunk\n")); - std = malloc(sizeof(ohci_soft_td_t) * OHCI_TD_CHUNK, - M_USBDEV, M_NOWAIT); - if (!std) - return 0; - r = usb_allocmem(sc->sc_dmatag, OHCI_TD_SIZE * OHCI_TD_CHUNK, - OHCI_TD_ALIGN, &dma); - if (r != USBD_NORMAL_COMPLETION) { - free(std, M_USBDEV); - return 0; - } - for(i = 0; i < OHCI_TD_CHUNK; i++, std++) { - offs = i * OHCI_TD_SIZE; - std->physaddr = DMAADDR(&dma) + offs; - std->td = (ohci_td_t *) - ((char *)KERNADDR(&dma) + offs); - std->nexttd = sc->sc_freetds; - sc->sc_freetds = std; - } - } - std = sc->sc_freetds; - sc->sc_freetds = std->nexttd; - memset(std->td, 0, OHCI_TD_SIZE); - std->nexttd = 0; - return (std); -} - -void -ohci_free_std(sc, std) - ohci_softc_t *sc; - ohci_soft_td_t *std; -{ - std->nexttd = sc->sc_freetds; - sc->sc_freetds = std; -} - -usbd_status -ohci_init(sc) - ohci_softc_t *sc; -{ - ohci_soft_ed_t *sed, *psed; - usbd_status r; - int rev; - int i; - u_int32_t s, ctl, ival, hcr, fm, per; - - DPRINTF(("ohci_init: start\n")); - rev = OREAD4(sc, OHCI_REVISION); - printf("%s: OHCI version %d.%d%s\n", USBDEVNAME(sc->sc_bus.bdev), - OHCI_REV_HI(rev), OHCI_REV_LO(rev), - OHCI_REV_LEGACY(rev) ? ", legacy support" : ""); - if (OHCI_REV_HI(rev) != 1 || OHCI_REV_LO(rev) != 0) { - printf("%s: unsupported OHCI revision\n", - USBDEVNAME(sc->sc_bus.bdev)); - return (USBD_INVAL); - } - - for (i = 0; i < OHCI_HASH_SIZE; i++) - LIST_INIT(&sc->sc_hash_tds[i]); - - /* Allocate the HCCA area. */ - r = usb_allocmem(sc->sc_dmatag, OHCI_HCCA_SIZE, - OHCI_HCCA_ALIGN, &sc->sc_hccadma); - if (r != USBD_NORMAL_COMPLETION) - return (r); - sc->sc_hcca = (struct ohci_hcca *)KERNADDR(&sc->sc_hccadma); - memset(sc->sc_hcca, 0, OHCI_HCCA_SIZE); - - sc->sc_eintrs = OHCI_NORMAL_INTRS; - - sc->sc_ctrl_head = ohci_alloc_sed(sc); - if (!sc->sc_ctrl_head) { - r = USBD_NOMEM; - goto bad1; - } - sc->sc_ctrl_head->ed->ed_flags |= LE(OHCI_ED_SKIP); - sc->sc_bulk_head = ohci_alloc_sed(sc); - if (!sc->sc_bulk_head) { - r = USBD_NOMEM; - goto bad2; - } - sc->sc_bulk_head->ed->ed_flags |= LE(OHCI_ED_SKIP); - - /* Allocate all the dummy EDs that make up the interrupt tree. */ - for (i = 0; i < OHCI_NO_EDS; i++) { - sed = ohci_alloc_sed(sc); - if (!sed) { - while (--i >= 0) - ohci_free_sed(sc, sc->sc_eds[i]); - r = USBD_NOMEM; - goto bad3; - } - /* All ED fields are set to 0. */ - sc->sc_eds[i] = sed; - sed->ed->ed_flags |= LE(OHCI_ED_SKIP); - if (i != 0) { - psed = sc->sc_eds[(i-1) / 2]; - sed->next = psed; - sed->ed->ed_nexted = LE(psed->physaddr); - } - } - /* - * Fill HCCA interrupt table. The bit reversal is to get - * the tree set up properly to spread the interrupts. - */ - for (i = 0; i < OHCI_NO_INTRS; i++) - sc->sc_hcca->hcca_interrupt_table[revbits[i]] = - LE(sc->sc_eds[OHCI_NO_EDS-OHCI_NO_INTRS+i]->physaddr); - - /* Determine in what context we are running. */ - ctl = OREAD4(sc, OHCI_CONTROL); - if (ctl & OHCI_IR) { - /* SMM active, request change */ - DPRINTF(("ohci_init: SMM active, request owner change\n")); - s = OREAD4(sc, OHCI_COMMAND_STATUS); - OWRITE4(sc, OHCI_COMMAND_STATUS, s | OHCI_OCR); - for (i = 0; i < 100 && (ctl & OHCI_IR); i++) { - delay(1000); - ctl = OREAD4(sc, OHCI_CONTROL); - } - if ((ctl & OHCI_IR) == 0) { - printf("%s: SMM does not respond, resetting\n", - USBDEVNAME(sc->sc_bus.bdev)); - OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET); - goto reset; - } - } else if ((ctl & OHCI_HCFS_MASK) != OHCI_HCFS_RESET) { - /* BIOS started controller. */ - DPRINTF(("ohci_init: BIOS active\n")); - if ((ctl & OHCI_HCFS_MASK) != OHCI_HCFS_OPERATIONAL) { - OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_OPERATIONAL); - delay(USB_RESUME_DELAY * 1000); - } - } else { - DPRINTF(("ohci_init: cold started\n")); - reset: - /* Controller was cold started. */ - delay(USB_BUS_RESET_DELAY * 1000); - } - - /* - * This reset should not be necessary according to the OHCI spec, but - * without it some controllers do not start. - */ - DPRINTF(("%s: resetting\n", USBDEVNAME(sc->sc_bus.bdev))); - OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET); - delay(USB_BUS_RESET_DELAY * 1000); - - /* We now own the host controller and the bus has been reset. */ - ival = OHCI_GET_IVAL(OREAD4(sc, OHCI_FM_INTERVAL)); - - OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_HCR); /* Reset HC */ - /* Nominal time for a reset is 10 us. */ - for (i = 0; i < 10; i++) { - delay(10); - hcr = OREAD4(sc, OHCI_COMMAND_STATUS) & OHCI_HCR; - if (!hcr) - break; - } - if (hcr) { - printf("%s: reset timeout\n", USBDEVNAME(sc->sc_bus.bdev)); - r = USBD_IOERROR; - goto bad3; - } -#ifdef USB_DEBUG - thesc = sc; - if (ohcidebug > 15) - ohci_dumpregs(sc); -#endif - - /* The controller is now in suspend state, we have 2ms to finish. */ - - /* Set up HC registers. */ - OWRITE4(sc, OHCI_HCCA, DMAADDR(&sc->sc_hccadma)); - OWRITE4(sc, OHCI_CONTROL_HEAD_ED, sc->sc_ctrl_head->physaddr); - OWRITE4(sc, OHCI_BULK_HEAD_ED, sc->sc_bulk_head->physaddr); - OWRITE4(sc, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS); - OWRITE4(sc, OHCI_INTERRUPT_ENABLE, sc->sc_eintrs | OHCI_MIE); - ctl = OREAD4(sc, OHCI_CONTROL); - ctl &= ~(OHCI_CBSR_MASK | OHCI_LES | OHCI_HCFS_MASK | OHCI_IR); - ctl |= OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE | - OHCI_RATIO_1_4 | OHCI_HCFS_OPERATIONAL; - /* And finally start it! */ - OWRITE4(sc, OHCI_CONTROL, ctl); - - /* - * The controller is now OPERATIONAL. Set a some final - * registers that should be set earlier, but that the - * controller ignores when in the SUSPEND state. - */ - fm = (OREAD4(sc, OHCI_FM_INTERVAL) & OHCI_FIT) ^ OHCI_FIT; - fm |= OHCI_FSMPS(ival) | ival; - OWRITE4(sc, OHCI_FM_INTERVAL, fm); - per = OHCI_PERIODIC(ival); /* 90% periodic */ - OWRITE4(sc, OHCI_PERIODIC_START, per); - - OWRITE4(sc, OHCI_RH_STATUS, OHCI_LPSC); /* Enable port power */ - - sc->sc_noport = OHCI_GET_NDP(OREAD4(sc, OHCI_RH_DESCRIPTOR_A)); - -#ifdef USB_DEBUG - if (ohcidebug > 5) - ohci_dumpregs(sc); -#endif - - /* Set up the bus struct. */ - sc->sc_bus.open_pipe = ohci_open; - sc->sc_bus.pipe_size = sizeof(struct ohci_pipe); - sc->sc_bus.do_poll = ohci_poll; - - return (USBD_NORMAL_COMPLETION); - - bad3: - ohci_free_sed(sc, sc->sc_ctrl_head); - bad2: - ohci_free_sed(sc, sc->sc_bulk_head); - bad1: - usb_freemem(sc->sc_dmatag, &sc->sc_hccadma); - return (r); -} - -#ifdef USB_DEBUG -void ohcidump(void); -void ohcidump(void) { ohci_dumpregs(thesc); } - -void -ohci_dumpregs(sc) - ohci_softc_t *sc; -{ - printf("ohci_dumpregs: rev=0x%08x control=0x%08x command=0x%08x\n", - OREAD4(sc, OHCI_REVISION), - OREAD4(sc, OHCI_CONTROL), - OREAD4(sc, OHCI_COMMAND_STATUS)); - printf(" intrstat=0x%08x intre=0x%08x intrd=0x%08x\n", - OREAD4(sc, OHCI_INTERRUPT_STATUS), - OREAD4(sc, OHCI_INTERRUPT_ENABLE), - OREAD4(sc, OHCI_INTERRUPT_DISABLE)); - printf(" hcca=0x%08x percur=0x%08x ctrlhd=0x%08x\n", - OREAD4(sc, OHCI_HCCA), - OREAD4(sc, OHCI_PERIOD_CURRENT_ED), - OREAD4(sc, OHCI_CONTROL_HEAD_ED)); - printf(" ctrlcur=0x%08x bulkhd=0x%08x bulkcur=0x%08x\n", - OREAD4(sc, OHCI_CONTROL_CURRENT_ED), - OREAD4(sc, OHCI_BULK_HEAD_ED), - OREAD4(sc, OHCI_BULK_CURRENT_ED)); - printf(" done=0x%08x fmival=0x%08x fmrem=0x%08x\n", - OREAD4(sc, OHCI_DONE_HEAD), - OREAD4(sc, OHCI_FM_INTERVAL), - OREAD4(sc, OHCI_FM_REMAINING)); - printf(" fmnum=0x%08x perst=0x%08x lsthrs=0x%08x\n", - OREAD4(sc, OHCI_FM_NUMBER), - OREAD4(sc, OHCI_PERIODIC_START), - OREAD4(sc, OHCI_LS_THRESHOLD)); - printf(" desca=0x%08x descb=0x%08x stat=0x%08x\n", - OREAD4(sc, OHCI_RH_DESCRIPTOR_A), - OREAD4(sc, OHCI_RH_DESCRIPTOR_B), - OREAD4(sc, OHCI_RH_STATUS)); - printf(" port1=0x%08x port2=0x%08x\n", - OREAD4(sc, OHCI_RH_PORT_STATUS(1)), - OREAD4(sc, OHCI_RH_PORT_STATUS(2))); - printf(" HCCA: frame_number=0x%04x done_head=0x%08x\n", - LE(sc->sc_hcca->hcca_frame_number), - LE(sc->sc_hcca->hcca_done_head)); -} -#endif - -int -ohci_intr(p) - void *p; -{ - ohci_softc_t *sc = p; - u_int32_t intrs = 0, eintrs; - ohci_physaddr_t done; - - /* In case the interrupt occurs before initialization has completed. */ - if (sc == NULL || sc->sc_hcca == NULL) { /* NWH added sc==0 */ -#ifdef DIAGNOSTIC - printf("ohci_intr: sc->sc_hcca == NULL\n"); -#endif - return (0); - } - - done = LE(sc->sc_hcca->hcca_done_head); - if (done != 0) { - sc->sc_hcca->hcca_done_head = 0; - if (done & ~OHCI_DONE_INTRS) - intrs = OHCI_WDH; - if (done & OHCI_DONE_INTRS) - intrs |= OREAD4(sc, OHCI_INTERRUPT_STATUS); - } else - intrs = OREAD4(sc, OHCI_INTERRUPT_STATUS); - if (!intrs) - return (0); - intrs &= ~OHCI_MIE; - OWRITE4(sc, OHCI_INTERRUPT_STATUS, intrs); /* Acknowledge */ - eintrs = intrs & sc->sc_eintrs; - if (!eintrs) - return (0); - - sc->sc_intrs++; - DPRINTFN(7, ("ohci_intr: sc=%p intrs=%x(%x) eintr=%x\n", - sc, (u_int)intrs, OREAD4(sc, OHCI_INTERRUPT_STATUS), - (u_int)eintrs)); - - if (eintrs & OHCI_SO) { - printf("%s: scheduling overrun\n",USBDEVNAME(sc->sc_bus.bdev)); - /* XXX do what */ - intrs &= ~OHCI_SO; - } - if (eintrs & OHCI_WDH) { - ohci_process_done(sc, done &~ OHCI_DONE_INTRS); - intrs &= ~OHCI_WDH; - } - if (eintrs & OHCI_RD) { - /* XXX process resume detect */ - } - if (eintrs & OHCI_UE) { - printf("%s: unrecoverable error, controller halted\n", - USBDEVNAME(sc->sc_bus.bdev)); - OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET); - /* XXX what else */ - } - if (eintrs & OHCI_RHSC) { - ohci_rhsc(sc, sc->sc_intrreqh); - intrs &= ~OHCI_RHSC; - - /* - * Disable RHSC interrupt for now, because it will be - * on until the port has been reset. - */ - ohci_rhsc_able(sc, 0); - } - - /* Block unprocessed interrupts. XXX */ - OWRITE4(sc, OHCI_INTERRUPT_DISABLE, intrs); - sc->sc_eintrs &= ~intrs; - - return (1); -} - -void -ohci_rhsc_able(sc, on) - ohci_softc_t *sc; - int on; -{ - DPRINTFN(4, ("ohci_rhsc_able: on=%d\n", on)); - if (on) { - sc->sc_eintrs |= OHCI_RHSC; - OWRITE4(sc, OHCI_INTERRUPT_ENABLE, OHCI_RHSC); - } else { - sc->sc_eintrs &= ~OHCI_RHSC; - OWRITE4(sc, OHCI_INTERRUPT_DISABLE, OHCI_RHSC); - } -} - -#ifdef USB_DEBUG -char *ohci_cc_strs[] = { - "NO_ERROR", - "CRC", - "BIT_STUFFING", - "DATA_TOGGLE_MISMATCH", - "STALL", - "DEVICE_NOT_RESPONDING", - "PID_CHECK_FAILURE", - "UNEXPECTED_PID", - "DATA_OVERRUN", - "DATA_UNDERRUN", - "BUFFER_OVERRUN", - "BUFFER_UNDERRUN", - "NOT_ACCESSED", -}; -#endif - -void -ohci_process_done(sc, done) - ohci_softc_t *sc; - ohci_physaddr_t done; -{ - ohci_soft_td_t *std = NULL, *sdone; - usbd_request_handle reqh; - int len, cc; - - DPRINTFN(10,("ohci_process_done: done=0x%08lx\n", (u_long)done)); - - /* Reverse the done list. */ - for (sdone = 0; done; done = LE(std->td->td_nexttd)) { - std = ohci_hash_find_td(sc, done); - std->dnext = sdone; - sdone = std; - } - -#ifdef USB_DEBUG - if (ohcidebug > 10) { - printf("ohci_process_done: TD done:\n"); - ohci_dump_tds(sdone); - } -#endif - - for (std = sdone; std; std = std->dnext) { - reqh = std->reqh; - DPRINTFN(10, ("ohci_process_done: std=%p reqh=%p hcpriv=%p\n", - std, reqh, reqh->hcpriv)); - cc = OHCI_TD_GET_CC(LE(std->td->td_flags)); - if (cc == OHCI_CC_NO_ERROR) { - if (std->td->td_cbp == 0) - len = std->len; - else - len = LE(std->td->td_be) - - LE(std->td->td_cbp) + 1; - /* - * Only do a callback on the last stage of a transfer. - * Others have hcpriv = 0. - */ - if ((reqh->pipe->endpoint->edesc->bmAttributes & - UE_XFERTYPE) == UE_CONTROL) { - /* For a control transfer the length is in - * the xfer stage */ - if (reqh->hcpriv == std) { - reqh->status = USBD_NORMAL_COMPLETION; - ohci_ii_done(sc, reqh); - } else - reqh->actlen = len; - } else { - if (reqh->hcpriv == std) { - reqh->actlen = len; - reqh->status = USBD_NORMAL_COMPLETION; - ohci_ii_done(sc, reqh); - } - } - } else { - ohci_soft_td_t *p, *n; - struct ohci_pipe *opipe = - (struct ohci_pipe *)reqh->pipe; - DPRINTFN(-1,("ohci_process_done: error cc=%d (%s)\n", - OHCI_TD_GET_CC(LE(std->td->td_flags)), - ohci_cc_strs[OHCI_TD_GET_CC(LE(std->td->td_flags))])); - /* - * Endpoint is halted. First unlink all the TDs - * belonging to the failed transfer, and then restart - * the endpoint. - */ - for (p = std->nexttd; p->reqh == reqh; p = n) { - n = p->nexttd; - ohci_hash_rem_td(sc, p); - ohci_free_std(sc, p); - } - /* clear halt */ - opipe->sed->ed->ed_headp = LE(p->physaddr); - OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_CLF); - - if (cc == OHCI_CC_STALL) - reqh->status = USBD_STALLED; - else - reqh->status = USBD_IOERROR; - ohci_ii_done(sc, reqh); - } - ohci_hash_rem_td(sc, std); - ohci_free_std(sc, std); - } -} - -void -ohci_ii_done(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - switch (reqh->pipe->endpoint->edesc->bmAttributes & UE_XFERTYPE) { - case UE_CONTROL: - ohci_ctrl_done(sc, reqh); - usb_start_next(reqh->pipe); - break; - case UE_INTERRUPT: - ohci_intr_done(sc, reqh); - break; - case UE_BULK: - ohci_bulk_done(sc, reqh); - usb_start_next(reqh->pipe); - break; - case UE_ISOCHRONOUS: - printf("ohci_process_done: ISO done?\n"); - usb_start_next(reqh->pipe); - break; - } - - /* And finally execute callback. */ - reqh->xfercb(reqh); -} - -void -ohci_ctrl_done(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - u_int len = opipe->u.ctl.length; - usb_dma_t *dma; - - DPRINTFN(10,("ohci_ctrl_done: reqh=%p\n", reqh)); - - if (!reqh->isreq) { - panic("ohci_ctrl_done: not a request\n"); - return; - } - - if (len != 0) { - dma = &opipe->u.ctl.datadma; - if (reqh->request.bmRequestType & UT_READ) - memcpy(reqh->buffer, KERNADDR(dma), len); - usb_freemem(sc->sc_dmatag, dma); - } - usb_untimeout(ohci_timeout, reqh, reqh->timo_handle); -} - -void -ohci_intr_done(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - usb_dma_t *dma; - ohci_soft_ed_t *sed = opipe->sed; - ohci_soft_td_t *xfer, *tail; - - - DPRINTFN(10,("ohci_intr_done: reqh=%p, actlen=%d\n", - reqh, reqh->actlen)); - - dma = &opipe->u.intr.datadma; - memcpy(reqh->buffer, KERNADDR(dma), reqh->actlen); - - if (reqh->pipe->intrreqh == reqh) { - xfer = opipe->tail; - tail = ohci_alloc_std(sc); /* XXX should reuse TD */ - if (!tail) { - reqh->status = USBD_NOMEM; - return; - } - tail->reqh = 0; - - xfer->td->td_flags = LE( - OHCI_TD_IN | OHCI_TD_NOCC | - OHCI_TD_SET_DI(1) | OHCI_TD_TOGGLE_CARRY); - if (reqh->flags & USBD_SHORT_XFER_OK) - xfer->td->td_flags |= LE(OHCI_TD_R); - xfer->td->td_cbp = LE(DMAADDR(dma)); - xfer->nexttd = tail; - xfer->td->td_nexttd = LE(tail->physaddr); - xfer->td->td_be = LE(LE(xfer->td->td_cbp) + reqh->length - 1); - xfer->len = reqh->length; - xfer->reqh = reqh; - - reqh->hcpriv = xfer; - - ohci_hash_add_td(sc, xfer); - sed->ed->ed_tailp = LE(tail->physaddr); - opipe->tail = tail; - } else { - usb_freemem(sc->sc_dmatag, dma); - usb_start_next(reqh->pipe); - } -} - -void -ohci_bulk_done(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - usb_dma_t *dma; - - - DPRINTFN(10,("ohci_bulk_done: reqh=%p, actlen=%d\n", - reqh, reqh->actlen)); - - dma = &opipe->u.bulk.datadma; - if (reqh->request.bmRequestType & UT_READ) - memcpy(reqh->buffer, KERNADDR(dma), reqh->actlen); - usb_freemem(sc->sc_dmatag, dma); - usb_untimeout(ohci_timeout, reqh, reqh->timo_handle); -} - -void -ohci_rhsc(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe; - struct ohci_pipe *opipe; - u_char *p; - int i, m; - int hstatus; - - hstatus = OREAD4(sc, OHCI_RH_STATUS); - DPRINTF(("ohci_rhsc: sc=%p reqh=%p hstatus=0x%08x\n", - sc, reqh, hstatus)); - - if (reqh == 0) { - /* Just ignore the change. */ - return; - } - - pipe = reqh->pipe; - opipe = (struct ohci_pipe *)pipe; - - p = KERNADDR(&opipe->u.intr.datadma); - m = min(sc->sc_noport, reqh->length * 8 - 1); - memset(p, 0, reqh->length); - for (i = 1; i <= m; i++) { - if (OREAD4(sc, OHCI_RH_PORT_STATUS(i)) >> 16) - p[i/8] |= 1 << (i%8); - } - DPRINTF(("ohci_rhsc: change=0x%02x\n", *p)); - reqh->actlen = reqh->length; - reqh->status = USBD_NORMAL_COMPLETION; - reqh->xfercb(reqh); - - if (reqh->pipe->intrreqh != reqh) { - sc->sc_intrreqh = 0; - usb_freemem(sc->sc_dmatag, &opipe->u.intr.datadma); - usb_start_next(reqh->pipe); - } -} - -/* - * Wait here until controller claims to have an interrupt. - * Then call ohci_intr and return. Use timeout to avoid waiting - * too long. - */ -void -ohci_waitintr(sc, reqh) - ohci_softc_t *sc; - usbd_request_handle reqh; -{ - int timo = reqh->timeout; - int usecs; - u_int32_t intrs; - - reqh->status = USBD_IN_PROGRESS; - for (usecs = timo * 1000000 / hz; usecs > 0; usecs -= 1000) { - usb_delay_ms(&sc->sc_bus, 1); - intrs = OREAD4(sc, OHCI_INTERRUPT_STATUS) & sc->sc_eintrs; - DPRINTFN(15,("ohci_waitintr: 0x%04x\n", intrs)); -#ifdef USB_DEBUG - if (ohcidebug > 15) - ohci_dumpregs(sc); -#endif - if (intrs) { - ohci_intr(sc); - if (reqh->status != USBD_IN_PROGRESS) - return; - } - } - - /* Timeout */ - DPRINTF(("ohci_waitintr: timeout\n")); - reqh->status = USBD_TIMEOUT; - ohci_ii_done(sc, reqh); - /* XXX should free TD */ -} - -void -ohci_poll(bus) - struct usbd_bus *bus; -{ - ohci_softc_t *sc = (ohci_softc_t *)bus; - - if (OREAD4(sc, OHCI_INTERRUPT_STATUS) & sc->sc_eintrs) - ohci_intr(sc); -} - -usbd_status -ohci_device_request(reqh) - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - usb_device_request_t *req = &reqh->request; - usbd_device_handle dev = opipe->pipe.device; - ohci_softc_t *sc = (ohci_softc_t *)dev->bus; - int addr = dev->address; - ohci_soft_td_t *setup, *xfer = 0, *stat, *next, *tail; - ohci_soft_ed_t *sed; - usb_dma_t *dmap; - int isread; - int len; - usbd_status r; - int s; - - isread = req->bmRequestType & UT_READ; - len = UGETW(req->wLength); - - DPRINTFN(3,("ohci_device_control type=0x%02x, request=0x%02x, " - "wValue=0x%04x, wIndex=0x%04x len=%d, addr=%d, endpt=%d\n", - req->bmRequestType, req->bRequest, UGETW(req->wValue), - UGETW(req->wIndex), len, addr, - opipe->pipe.endpoint->edesc->bEndpointAddress)); - - setup = opipe->tail; - stat = ohci_alloc_std(sc); - if (!stat) { - r = USBD_NOMEM; - goto bad1; - } - tail = ohci_alloc_std(sc); - if (!tail) { - r = USBD_NOMEM; - goto bad2; - } - tail->reqh = 0; - - sed = opipe->sed; - dmap = &opipe->u.ctl.datadma; - opipe->u.ctl.length = len; - - /* Update device address and length since they may have changed. */ - /* XXX This only needs to be done once, but it's too early in open. */ - sed->ed->ed_flags = LE( - (LE(sed->ed->ed_flags) & ~(OHCI_ED_ADDRMASK | OHCI_ED_MAXPMASK)) | - OHCI_ED_SET_FA(addr) | - OHCI_ED_SET_MAXP(UGETW(opipe->pipe.endpoint->edesc->wMaxPacketSize))); - - /* Set up data transaction */ - if (len != 0) { - xfer = ohci_alloc_std(sc); - if (!xfer) { - r = USBD_NOMEM; - goto bad3; - } - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto bad4; - xfer->td->td_flags = LE( - (isread ? OHCI_TD_IN : OHCI_TD_OUT) | OHCI_TD_NOCC | - OHCI_TD_TOGGLE_1 | OHCI_TD_NOINTR | - (reqh->flags & USBD_SHORT_XFER_OK ? OHCI_TD_R : 0)); - xfer->td->td_cbp = LE(DMAADDR(dmap)); - xfer->nexttd = stat; - xfer->td->td_nexttd = LE(stat->physaddr); - xfer->td->td_be = LE(LE(xfer->td->td_cbp) + len - 1); - xfer->len = len; - xfer->reqh = reqh; - - next = xfer; - } else - next = stat; - - memcpy(KERNADDR(&opipe->u.ctl.reqdma), req, sizeof *req); - if (!isread && len != 0) - memcpy(KERNADDR(dmap), reqh->buffer, len); - - setup->td->td_flags = LE(OHCI_TD_SETUP | OHCI_TD_NOCC | - OHCI_TD_TOGGLE_0 | OHCI_TD_NOINTR); - setup->td->td_cbp = LE(DMAADDR(&opipe->u.ctl.reqdma)); - setup->nexttd = next; - setup->td->td_nexttd = LE(next->physaddr); - setup->td->td_be = LE(LE(setup->td->td_cbp) + sizeof *req - 1); - setup->len = 0; /* XXX The number of byte we count */ - setup->reqh = reqh; - - stat->td->td_flags = LE( - (isread ? OHCI_TD_OUT : OHCI_TD_IN) | OHCI_TD_NOCC | - OHCI_TD_TOGGLE_1 | OHCI_TD_SET_DI(1)); - stat->td->td_cbp = 0; - stat->nexttd = tail; - stat->td->td_nexttd = LE(tail->physaddr); - stat->td->td_be = 0; - stat->len = 0; - stat->reqh = reqh; - - reqh->hcpriv = stat; - -#if USB_DEBUG - if (ohcidebug > 5) { - printf("ohci_device_request:\n"); - ohci_dump_ed(sed); - ohci_dump_tds(setup); - } -#endif - - /* Insert ED in schedule */ - s = splusb(); - ohci_hash_add_td(sc, setup); - if (len != 0) - ohci_hash_add_td(sc, xfer); - ohci_hash_add_td(sc, stat); - sed->ed->ed_tailp = LE(tail->physaddr); - opipe->tail = tail; - OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_CLF); - if (reqh->timeout && !sc->sc_bus.use_polling) { - usb_timeout(ohci_timeout, reqh, - MS_TO_TICKS(reqh->timeout), reqh->timo_handle); - } - splx(s); - -#if USB_DEBUG - if (ohcidebug > 5) { - delay(5000); - printf("ohci_device_request: status=%x\n", - OREAD4(sc, OHCI_COMMAND_STATUS)); - ohci_dump_ed(sed); - ohci_dump_tds(setup); - } -#endif - - return (USBD_NORMAL_COMPLETION); - - bad4: - ohci_free_std(sc, xfer); - bad3: - ohci_free_std(sc, tail); - bad2: - ohci_free_std(sc, stat); - bad1: - return (r); -} - -/* - * Add an ED to the schedule. Called at splusb(). - */ -void -ohci_add_ed(sed, head) - ohci_soft_ed_t *sed; - ohci_soft_ed_t *head; -{ - sed->next = head->next; - sed->ed->ed_nexted = head->ed->ed_nexted; - head->next = sed; - head->ed->ed_nexted = LE(sed->physaddr); -} - -/* - * Remove an ED from the schedule. Called at splusb(). - */ -void -ohci_rem_ed(sed, head) - ohci_soft_ed_t *sed; - ohci_soft_ed_t *head; -{ - ohci_soft_ed_t *p; - - /* XXX */ - for (p = head; p && p->next != sed; p = p->next) - ; - if (!p) - panic("ohci_rem_ed: ED not found\n"); - p->next = sed->next; - p->ed->ed_nexted = sed->ed->ed_nexted; -} - -/* - * When a transfer is completed the TD is added to the done queue by - * the host controller. This queue is the processed by software. - * Unfortunately the queue contains the physical address of the TD - * and we have no simple way to translate this back to a kernel address. - * To make the translation possible (and fast) we use a hash table of - * TDs currently in the schedule. The physical address is used as the - * hash value. - */ - -#define HASH(a) (((a) >> 4) % OHCI_HASH_SIZE) -/* Called at splusb() */ -void -ohci_hash_add_td(sc, std) - ohci_softc_t *sc; - ohci_soft_td_t *std; -{ - int h = HASH(std->physaddr); - - LIST_INSERT_HEAD(&sc->sc_hash_tds[h], std, hnext); -} - -/* Called at splusb() */ -void -ohci_hash_rem_td(sc, std) - ohci_softc_t *sc; - ohci_soft_td_t *std; -{ - LIST_REMOVE(std, hnext); -} - -ohci_soft_td_t * -ohci_hash_find_td(sc, a) - ohci_softc_t *sc; - ohci_physaddr_t a; -{ - int h = HASH(a); - ohci_soft_td_t *std; - - for (std = LIST_FIRST(&sc->sc_hash_tds[h]); - std != 0; - std = LIST_NEXT(std, hnext)) - if (std->physaddr == a) - return (std); - panic("ohci_hash_find_td: addr 0x%08lx not found\n", (u_long)a); -} - -void -ohci_timeout(addr) - void *addr; -{ -#if 0 - usbd_request_handle *reqh = addr; - int s; - - DPRINTF(("ohci_timeout: reqh=%p\n", reqh)); - s = splusb(); - /* XXX need to inactivate TD before calling interrupt routine */ - ohci_XXX_done(reqh); - splx(s); -#endif -} - -#ifdef USB_DEBUG -void -ohci_dump_tds(std) - ohci_soft_td_t *std; -{ - for (; std; std = std->nexttd) - ohci_dump_td(std); -} - -void -ohci_dump_td(std) - ohci_soft_td_t *std; -{ - printf("TD(%p) at %08lx: %b delay=%d ec=%d cc=%d\ncbp=0x%08lx " - "nexttd=0x%08lx be=0x%08lx\n", - std, (u_long)std->physaddr, - (int)LE(std->td->td_flags), - "\20\23R\24OUT\25IN\31TOG1\32SETTOGGLE", - OHCI_TD_GET_DI(LE(std->td->td_flags)), - OHCI_TD_GET_EC(LE(std->td->td_flags)), - OHCI_TD_GET_CC(LE(std->td->td_flags)), - (u_long)LE(std->td->td_cbp), - (u_long)LE(std->td->td_nexttd), (u_long)LE(std->td->td_be)); -} - -void -ohci_dump_ed(sed) - ohci_soft_ed_t *sed; -{ - printf("ED(%p) at %08lx: addr=%d endpt=%d maxp=%d %b\ntailp=0x%08lx " - "headp=%b nexted=0x%08lx\n", - sed, (u_long)sed->physaddr, - OHCI_ED_GET_FA(LE(sed->ed->ed_flags)), - OHCI_ED_GET_EN(LE(sed->ed->ed_flags)), - OHCI_ED_GET_MAXP(LE(sed->ed->ed_flags)), - (int)LE(sed->ed->ed_flags), - "\20\14OUT\15IN\16LOWSPEED\17SKIP\20ISO", - (u_long)LE(sed->ed->ed_tailp), - (int)LE(sed->ed->ed_headp), "\20\1HALT\2CARRY", - (u_long)LE(sed->ed->ed_nexted)); -} -#endif - -usbd_status -ohci_open(pipe) - usbd_pipe_handle pipe; -{ - usbd_device_handle dev = pipe->device; - ohci_softc_t *sc = (ohci_softc_t *)dev->bus; - usb_endpoint_descriptor_t *ed = pipe->endpoint->edesc; - struct ohci_pipe *opipe = (struct ohci_pipe *)pipe; - u_int8_t addr = dev->address; - ohci_soft_ed_t *sed; - ohci_soft_td_t *std; - usbd_status r; - int s; - - DPRINTFN(1, ("ohci_open: pipe=%p, addr=%d, endpt=%d (%d)\n", - pipe, addr, ed->bEndpointAddress, sc->sc_addr)); - if (addr == sc->sc_addr) { - switch (ed->bEndpointAddress) { - case USB_CONTROL_ENDPOINT: - pipe->methods = &ohci_root_ctrl_methods; - break; - case UE_IN | OHCI_INTR_ENDPT: - pipe->methods = &ohci_root_intr_methods; - break; - default: - return (USBD_INVAL); - } - } else { - sed = ohci_alloc_sed(sc); - if (sed == 0) - goto bad0; - std = ohci_alloc_std(sc); - if (std == 0) - goto bad1; - opipe->sed = sed; - opipe->tail = std; - sed->ed->ed_flags = LE( - OHCI_ED_SET_FA(addr) | - OHCI_ED_SET_EN(ed->bEndpointAddress) | - OHCI_ED_DIR_TD | - (dev->lowspeed ? OHCI_ED_SPEED : 0) | - ((ed->bmAttributes & UE_XFERTYPE) == UE_ISOCHRONOUS ? - OHCI_ED_FORMAT_ISO : OHCI_ED_FORMAT_GEN) | - OHCI_ED_SET_MAXP(UGETW(ed->wMaxPacketSize))); - sed->ed->ed_headp = sed->ed->ed_tailp = LE(std->physaddr); - - switch (ed->bmAttributes & UE_XFERTYPE) { - case UE_CONTROL: - pipe->methods = &ohci_device_ctrl_methods; - r = usb_allocmem(sc->sc_dmatag, - sizeof(usb_device_request_t), - 0, &opipe->u.ctl.reqdma); - if (r != USBD_NORMAL_COMPLETION) - goto bad; - s = splusb(); - ohci_add_ed(sed, sc->sc_ctrl_head); - splx(s); - break; - case UE_INTERRUPT: - pipe->methods = &ohci_device_intr_methods; - return (ohci_device_setintr(sc, opipe, ed->bInterval)); - case UE_ISOCHRONOUS: - printf("ohci_open: open iso unimplemented\n"); - return (USBD_XXX); - case UE_BULK: - pipe->methods = &ohci_device_bulk_methods; - s = splusb(); - ohci_add_ed(sed, sc->sc_bulk_head); - splx(s); - break; - } - } - return (USBD_NORMAL_COMPLETION); - - bad: - ohci_free_std(sc, std); - bad1: - ohci_free_sed(sc, sed); - bad0: - return (USBD_NOMEM); - -} - -/* - * Data structures and routines to emulate the root hub. - */ -usb_device_descriptor_t ohci_devd = { - USB_DEVICE_DESCRIPTOR_SIZE, - UDESC_DEVICE, /* type */ - {0x00, 0x01}, /* USB version */ - UCLASS_HUB, /* class */ - USUBCLASS_HUB, /* subclass */ - 0, /* protocol */ - 64, /* max packet */ - {0},{0},{0x00,0x01}, /* device id */ - 1,2,0, /* string indicies */ - 1 /* # of configurations */ -}; - -usb_config_descriptor_t ohci_confd = { - USB_CONFIG_DESCRIPTOR_SIZE, - UDESC_CONFIG, - {USB_CONFIG_DESCRIPTOR_SIZE + - USB_INTERFACE_DESCRIPTOR_SIZE + - USB_ENDPOINT_DESCRIPTOR_SIZE}, - 1, - 1, - 0, - UC_SELF_POWERED, - 0 /* max power */ -}; - -usb_interface_descriptor_t ohci_ifcd = { - USB_INTERFACE_DESCRIPTOR_SIZE, - UDESC_INTERFACE, - 0, - 0, - 1, - UCLASS_HUB, - USUBCLASS_HUB, - 0, - 0 -}; - -usb_endpoint_descriptor_t ohci_endpd = { - USB_ENDPOINT_DESCRIPTOR_SIZE, - UDESC_ENDPOINT, - UE_IN | OHCI_INTR_ENDPT, - UE_INTERRUPT, - {8, 0}, /* max packet */ - 255 -}; - -usb_hub_descriptor_t ohci_hubd = { - USB_HUB_DESCRIPTOR_SIZE, - UDESC_HUB, - 0, - {0,0}, - 0, - 0, - {0}, -}; - -int -ohci_str(p, l, s) - usb_string_descriptor_t *p; - int l; - char *s; -{ - int i; - - if (l == 0) - return (0); - p->bLength = 2 * strlen(s) + 2; - if (l == 1) - return (1); - p->bDescriptorType = UDESC_STRING; - l -= 2; - for (i = 0; s[i] && l > 1; i++, l -= 2) - USETW2(p->bString[i], 0, s[i]); - return (2*i+2); -} - -/* - * Simulate a hardware hub by handling all the necessary requests. - */ -usbd_status -ohci_root_ctrl_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (ohci_root_ctrl_start(reqh)); -} - -usbd_status -ohci_root_ctrl_start(reqh) - usbd_request_handle reqh; -{ - ohci_softc_t *sc = (ohci_softc_t *)reqh->pipe->device->bus; - usb_device_request_t *req; - void *buf; - int port, i; - int len, value, index, l, totlen = 0; - usb_port_status_t ps; - usb_hub_descriptor_t hubd; - usbd_status r; - u_int32_t v; - - if (!reqh->isreq) - /* XXX panic */ - return (USBD_INVAL); - req = &reqh->request; - buf = reqh->buffer; - - DPRINTFN(4,("ohci_root_ctrl_control type=0x%02x request=%02x\n", - req->bmRequestType, req->bRequest)); - - len = UGETW(req->wLength); - value = UGETW(req->wValue); - index = UGETW(req->wIndex); -#define C(x,y) ((x) | ((y) << 8)) - switch(C(req->bRequest, req->bmRequestType)) { - case C(UR_CLEAR_FEATURE, UT_WRITE_DEVICE): - case C(UR_CLEAR_FEATURE, UT_WRITE_INTERFACE): - case C(UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT): - /* - * DEVICE_REMOTE_WAKEUP and ENDPOINT_HALT are no-ops - * for the integrated root hub. - */ - break; - case C(UR_GET_CONFIG, UT_READ_DEVICE): - if (len > 0) { - *(u_int8_t *)buf = sc->sc_conf; - totlen = 1; - } - break; - case C(UR_GET_DESCRIPTOR, UT_READ_DEVICE): - DPRINTFN(8,("ohci_root_ctrl_control wValue=0x%04x\n", value)); - switch(value >> 8) { - case UDESC_DEVICE: - if ((value & 0xff) != 0) { - r = USBD_IOERROR; - goto ret; - } - totlen = l = min(len, USB_DEVICE_DESCRIPTOR_SIZE); - memcpy(buf, &ohci_devd, l); - break; - case UDESC_CONFIG: - if ((value & 0xff) != 0) { - r = USBD_IOERROR; - goto ret; - } - totlen = l = min(len, USB_CONFIG_DESCRIPTOR_SIZE); - memcpy(buf, &ohci_confd, l); - buf = (char *)buf + l; - len -= l; - l = min(len, USB_INTERFACE_DESCRIPTOR_SIZE); - totlen += l; - memcpy(buf, &ohci_ifcd, l); - buf = (char *)buf + l; - len -= l; - l = min(len, USB_ENDPOINT_DESCRIPTOR_SIZE); - totlen += l; - memcpy(buf, &ohci_endpd, l); - break; - case UDESC_STRING: - if (len == 0) - break; - *(u_int8_t *)buf = 0; - totlen = 1; - switch (value & 0xff) { - case 1: /* Vendor */ - totlen = ohci_str(buf, len, sc->sc_vendor); - break; - case 2: /* Product */ - totlen = ohci_str(buf, len, "OHCI root hub"); - break; - } - break; - default: - r = USBD_IOERROR; - goto ret; - } - break; - case C(UR_GET_INTERFACE, UT_READ_INTERFACE): - if (len > 0) { - *(u_int8_t *)buf = 0; - totlen = 1; - } - break; - case C(UR_GET_STATUS, UT_READ_DEVICE): - if (len > 1) { - USETW(((usb_status_t *)buf)->wStatus,UDS_SELF_POWERED); - totlen = 2; - } - break; - case C(UR_GET_STATUS, UT_READ_INTERFACE): - case C(UR_GET_STATUS, UT_READ_ENDPOINT): - if (len > 1) { - USETW(((usb_status_t *)buf)->wStatus, 0); - totlen = 2; - } - break; - case C(UR_SET_ADDRESS, UT_WRITE_DEVICE): - if (value >= USB_MAX_DEVICES) { - r = USBD_IOERROR; - goto ret; - } - sc->sc_addr = value; - break; - case C(UR_SET_CONFIG, UT_WRITE_DEVICE): - if (value != 0 && value != 1) { - r = USBD_IOERROR; - goto ret; - } - sc->sc_conf = value; - break; - case C(UR_SET_DESCRIPTOR, UT_WRITE_DEVICE): - break; - case C(UR_SET_FEATURE, UT_WRITE_DEVICE): - case C(UR_SET_FEATURE, UT_WRITE_INTERFACE): - case C(UR_SET_FEATURE, UT_WRITE_ENDPOINT): - r = USBD_IOERROR; - goto ret; - case C(UR_SET_INTERFACE, UT_WRITE_INTERFACE): - break; - case C(UR_SYNCH_FRAME, UT_WRITE_ENDPOINT): - break; - /* Hub requests */ - case C(UR_CLEAR_FEATURE, UT_WRITE_CLASS_DEVICE): - break; - case C(UR_CLEAR_FEATURE, UT_WRITE_CLASS_OTHER): - DPRINTFN(8, ("ohci_root_ctrl_control: UR_CLEAR_PORT_FEATURE " - "port=%d feature=%d\n", - index, value)); - if (index < 1 || index > sc->sc_noport) { - r = USBD_IOERROR; - goto ret; - } - port = OHCI_RH_PORT_STATUS(index); - switch(value) { - case UHF_PORT_ENABLE: - OWRITE4(sc, port, UPS_CURRENT_CONNECT_STATUS); - break; - case UHF_PORT_SUSPEND: - OWRITE4(sc, port, UPS_OVERCURRENT_INDICATOR); - break; - case UHF_PORT_POWER: - OWRITE4(sc, port, UPS_LOW_SPEED); - break; - case UHF_C_PORT_CONNECTION: - OWRITE4(sc, port, UPS_C_CONNECT_STATUS << 16); - break; - case UHF_C_PORT_ENABLE: - OWRITE4(sc, port, UPS_C_PORT_ENABLED << 16); - break; - case UHF_C_PORT_SUSPEND: - OWRITE4(sc, port, UPS_C_SUSPEND << 16); - break; - case UHF_C_PORT_OVER_CURRENT: - OWRITE4(sc, port, UPS_C_OVERCURRENT_INDICATOR << 16); - break; - case UHF_C_PORT_RESET: - OWRITE4(sc, port, UPS_C_PORT_RESET << 16); - break; - default: - r = USBD_IOERROR; - goto ret; - } - switch(value) { - case UHF_C_PORT_CONNECTION: - case UHF_C_PORT_ENABLE: - case UHF_C_PORT_SUSPEND: - case UHF_C_PORT_OVER_CURRENT: - case UHF_C_PORT_RESET: - /* Enable RHSC interrupt if condition is cleared. */ - if ((OREAD4(sc, port) >> 16) == 0) - ohci_rhsc_able(sc, 1); - break; - default: - break; - } - break; - case C(UR_GET_DESCRIPTOR, UT_READ_CLASS_DEVICE): - if (value != 0) { - r = USBD_IOERROR; - goto ret; - } - v = OREAD4(sc, OHCI_RH_DESCRIPTOR_A); - hubd = ohci_hubd; - hubd.bNbrPorts = sc->sc_noport; - USETW(hubd.wHubCharacteristics, - (v & OHCI_NPS ? UHD_PWR_NO_SWITCH : - v & OHCI_PSM ? UHD_PWR_GANGED : UHD_PWR_INDIVIDUAL) - /* XXX overcurrent */ - ); - hubd.bPwrOn2PwrGood = OHCI_GET_POTPGT(v); - v = OREAD4(sc, OHCI_RH_DESCRIPTOR_B); - for (i = 0, l = sc->sc_noport; l > 0; i++, l -= 8, v >>= 8) - hubd.DeviceRemovable[i++] = (u_int8_t)v; - hubd.bDescLength = USB_HUB_DESCRIPTOR_SIZE + i; - l = min(len, hubd.bDescLength); - totlen = l; - memcpy(buf, &hubd, l); - break; - case C(UR_GET_STATUS, UT_READ_CLASS_DEVICE): - if (len != 4) { - r = USBD_IOERROR; - goto ret; - } - memset(buf, 0, len); /* ? XXX */ - totlen = len; - break; - case C(UR_GET_STATUS, UT_READ_CLASS_OTHER): - DPRINTFN(8,("ohci_root_ctrl_transfer: get port status i=%d\n", - index)); - if (index < 1 || index > sc->sc_noport) { - r = USBD_IOERROR; - goto ret; - } - if (len != 4) { - r = USBD_IOERROR; - goto ret; - } - v = OREAD4(sc, OHCI_RH_PORT_STATUS(index)); - DPRINTFN(8,("ohci_root_ctrl_transfer: port status=0x%04x\n", - v)); - USETW(ps.wPortStatus, v); - USETW(ps.wPortChange, v >> 16); - l = min(len, sizeof ps); - memcpy(buf, &ps, l); - totlen = l; - break; - case C(UR_SET_DESCRIPTOR, UT_WRITE_CLASS_DEVICE): - r = USBD_IOERROR; - goto ret; - case C(UR_SET_FEATURE, UT_WRITE_CLASS_DEVICE): - break; - case C(UR_SET_FEATURE, UT_WRITE_CLASS_OTHER): - if (index < 1 || index > sc->sc_noport) { - r = USBD_IOERROR; - goto ret; - } - port = OHCI_RH_PORT_STATUS(index); - switch(value) { - case UHF_PORT_ENABLE: - OWRITE4(sc, port, UPS_PORT_ENABLED); - break; - case UHF_PORT_SUSPEND: - OWRITE4(sc, port, UPS_SUSPEND); - break; - case UHF_PORT_RESET: - DPRINTFN(5,("ohci_root_ctrl_transfer: reset port %d\n", - index)); - OWRITE4(sc, port, UPS_RESET); - for (i = 0; i < 10; i++) { - usb_delay_ms(&sc->sc_bus, 10); - if ((OREAD4(sc, port) & UPS_RESET) == 0) - break; - } - DPRINTFN(8,("ohci port %d reset, status = 0x%04x\n", - index, OREAD4(sc, port))); - break; - case UHF_PORT_POWER: - DPRINTFN(2,("ohci_root_ctrl_transfer: set port power " - "%d\n", index)); - OWRITE4(sc, port, UPS_PORT_POWER); - break; - default: - r = USBD_IOERROR; - goto ret; - } - break; - default: - r = USBD_IOERROR; - goto ret; - } - reqh->actlen = totlen; - r = USBD_NORMAL_COMPLETION; - ret: - reqh->status = r; - reqh->xfercb(reqh); - usb_start_next(reqh->pipe); - return (USBD_IN_PROGRESS); -} - -/* Abort a root control request. */ -void -ohci_root_ctrl_abort(reqh) - usbd_request_handle reqh; -{ - /* Nothing to do, all transfers are synchronous. */ -} - -/* Close the root pipe. */ -void -ohci_root_ctrl_close(pipe) - usbd_pipe_handle pipe; -{ - DPRINTF(("ohci_root_ctrl_close\n")); -} - -usbd_status -ohci_root_intr_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (ohci_root_intr_start(reqh)); -} - -usbd_status -ohci_root_intr_start(reqh) - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe = reqh->pipe; - ohci_softc_t *sc = (ohci_softc_t *)pipe->device->bus; - struct ohci_pipe *upipe = (struct ohci_pipe *)pipe; - usb_dma_t *dmap; - usbd_status r; - int len; - - len = reqh->length; - dmap = &upipe->u.intr.datadma; - if (len == 0) - return (USBD_INVAL); /* XXX should it be? */ - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - return (r); - sc->sc_intrreqh = reqh; - - return (USBD_IN_PROGRESS); -} - -/* Abort a root interrupt request. */ -void -ohci_root_intr_abort(reqh) - usbd_request_handle reqh; -{ - /* No need to abort. */ -} - -/* Close the root pipe. */ -void -ohci_root_intr_close(pipe) - usbd_pipe_handle pipe; -{ - ohci_softc_t *sc = (ohci_softc_t *)pipe->device->bus; - sc->sc_intrreqh = 0; - - DPRINTF(("ohci_root_intr_close\n")); -} - -/************************/ - -usbd_status -ohci_device_ctrl_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (ohci_device_ctrl_start(reqh)); -} - -usbd_status -ohci_device_ctrl_start(reqh) - usbd_request_handle reqh; -{ - ohci_softc_t *sc = (ohci_softc_t *)reqh->pipe->device->bus; - usbd_status r; - - if (!reqh->isreq) { - /* XXX panic */ - printf("ohci_device_ctrl_transfer: not a request\n"); - return (USBD_INVAL); - } - - r = ohci_device_request(reqh); - if (r != USBD_NORMAL_COMPLETION) - return (r); - - if (sc->sc_bus.use_polling) - ohci_waitintr(sc, reqh); - return (USBD_IN_PROGRESS); -} - -/* Abort a device control request. */ -void -ohci_device_ctrl_abort(reqh) - usbd_request_handle reqh; -{ - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 1); /* make sure it is donw */ - /* XXX call done */ -} - -/* Close a device control pipe. */ -void -ohci_device_ctrl_close(pipe) - usbd_pipe_handle pipe; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)pipe; - ohci_softc_t *sc = (ohci_softc_t *)pipe->device->bus; - ohci_soft_ed_t *sed = opipe->sed; - int s; - - s = splusb(); - sed->ed->ed_flags |= LE(OHCI_ED_SKIP); - if ((LE(sed->ed->ed_tailp) & OHCI_TAILMASK) != LE(sed->ed->ed_headp)) - usb_delay_ms(&sc->sc_bus, 2); - ohci_rem_ed(sed, sc->sc_ctrl_head); - splx(s); - ohci_free_std(sc, opipe->tail); - ohci_free_sed(sc, opipe->sed); - /* XXX free other resources */ -} - -/************************/ - -usbd_status -ohci_device_bulk_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (ohci_device_bulk_start(reqh)); -} - -usbd_status -ohci_device_bulk_start(reqh) - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - usbd_device_handle dev = opipe->pipe.device; - ohci_softc_t *sc = (ohci_softc_t *)dev->bus; - int addr = dev->address; - ohci_soft_td_t *xfer, *tail; - ohci_soft_ed_t *sed; - usb_dma_t *dmap; - usbd_status r; - int s, len, isread; - - if (reqh->isreq) { - /* XXX panic */ - printf("ohci_device_bulk_transfer: a request\n"); - return (USBD_INVAL); - } - - len = reqh->length; - dmap = &opipe->u.bulk.datadma; - isread = reqh->pipe->endpoint->edesc->bEndpointAddress & UE_IN; - sed = opipe->sed; - - opipe->u.bulk.length = len; - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto ret1; - - tail = ohci_alloc_std(sc); - if (!tail) { - r = USBD_NOMEM; - goto ret2; - } - tail->reqh = 0; - - /* Update device address */ - sed->ed->ed_flags = LE( - (LE(sed->ed->ed_flags) & ~OHCI_ED_ADDRMASK) | - OHCI_ED_SET_FA(addr)); - - /* Set up data transaction */ - xfer = opipe->tail; - xfer->td->td_flags = LE( - (isread ? OHCI_TD_IN : OHCI_TD_OUT) | OHCI_TD_NOCC | - OHCI_TD_SET_DI(1) | OHCI_TD_TOGGLE_CARRY | - (reqh->flags & USBD_SHORT_XFER_OK ? OHCI_TD_R : 0)); - xfer->td->td_cbp = LE(DMAADDR(dmap)); - xfer->nexttd = tail; - xfer->td->td_nexttd = LE(tail->physaddr); - xfer->td->td_be = LE(LE(xfer->td->td_cbp) + len - 1); - xfer->len = len; - xfer->reqh = reqh; - - reqh->hcpriv = xfer; - - if (!isread) - memcpy(KERNADDR(dmap), reqh->buffer, len); - - /* Insert ED in schedule */ - s = splusb(); - ohci_hash_add_td(sc, xfer); - sed->ed->ed_tailp = LE(tail->physaddr); - opipe->tail = tail; - OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_BLF); - if (reqh->timeout && !sc->sc_bus.use_polling) { - usb_timeout(ohci_timeout, reqh, - MS_TO_TICKS(reqh->timeout), reqh->timo_handle); - } - splx(s); - - return (USBD_IN_PROGRESS); - - ret2: - usb_freemem(sc->sc_dmatag, dmap); - ret1: - return (r); -} - -/* Abort a device bulk request. */ -void -ohci_device_bulk_abort(reqh) - usbd_request_handle reqh; -{ -#if 0 - sed->ed->ed_flags |= LE(OHCI_ED_SKIP); - if ((LE(sed->ed->ed_tailp) & OHCI_TAILMASK) != LE(sed->ed->ed_headp)) - usb_delay_ms(reqh->pipe->device->bus, 2); -#endif - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 1); /* make sure it is done */ - /* XXX call done */ -} - -/* Close a device bulk pipe. */ -void -ohci_device_bulk_close(pipe) - usbd_pipe_handle pipe; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)pipe; - usbd_device_handle dev = opipe->pipe.device; - ohci_softc_t *sc = (ohci_softc_t *)dev->bus; - int s; - - s = splusb(); - ohci_rem_ed(opipe->sed, sc->sc_bulk_head); - splx(s); - ohci_free_std(sc, opipe->tail); - ohci_free_sed(sc, opipe->sed); - /* XXX free other resources */ -} - -/************************/ - -usbd_status -ohci_device_intr_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (ohci_device_intr_start(reqh)); -} - -usbd_status -ohci_device_intr_start(reqh) - usbd_request_handle reqh; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)reqh->pipe; - usbd_device_handle dev = opipe->pipe.device; - ohci_softc_t *sc = (ohci_softc_t *)dev->bus; - ohci_soft_ed_t *sed = opipe->sed; - ohci_soft_td_t *xfer, *tail; - usb_dma_t *dmap; - usbd_status r; - int len; - int s; - - DPRINTFN(3, ("ohci_device_intr_transfer: reqh=%p buf=%p len=%d " - "flags=%d priv=%p\n", - reqh, reqh->buffer, reqh->length, reqh->flags, reqh->priv)); - - if (reqh->isreq) - panic("ohci_device_intr_transfer: a request\n"); - - len = reqh->length; - dmap = &opipe->u.intr.datadma; - if (len == 0) - return (USBD_INVAL); /* XXX should it be? */ - - xfer = opipe->tail; - tail = ohci_alloc_std(sc); - if (!tail) { - r = USBD_NOMEM; - goto ret1; - } - tail->reqh = 0; - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto ret2; - - xfer->td->td_flags = LE( - OHCI_TD_IN | OHCI_TD_NOCC | - OHCI_TD_SET_DI(1) | OHCI_TD_TOGGLE_CARRY); - if (reqh->flags & USBD_SHORT_XFER_OK) - xfer->td->td_flags |= LE(OHCI_TD_R); - xfer->td->td_cbp = LE(DMAADDR(dmap)); - xfer->nexttd = tail; - xfer->td->td_nexttd = LE(tail->physaddr); - xfer->td->td_be = LE(LE(xfer->td->td_cbp) + len - 1); - xfer->len = len; - xfer->reqh = reqh; - - reqh->hcpriv = xfer; - -#if USB_DEBUG - if (ohcidebug > 5) { - printf("ohci_device_intr_transfer:\n"); - ohci_dump_ed(sed); - ohci_dump_tds(xfer); - } -#endif - - /* Insert ED in schedule */ - s = splusb(); - ohci_hash_add_td(sc, xfer); - sed->ed->ed_tailp = LE(tail->physaddr); - opipe->tail = tail; -#if 0 - if (reqh->timeout && !sc->sc_bus.use_polling) { - usb_timeout(ohci_timeout, reqh, - MS_TO_TICKS(reqh->timeout), reqh->timo_handle); - } -#endif - sed->ed->ed_flags &= LE(~OHCI_ED_SKIP); - -#ifdef USB_DEBUG - if (ohcidebug > 5) { - delay(5000); - printf("ohci_device_intr_transfer: status=%x\n", - OREAD4(sc, OHCI_COMMAND_STATUS)); - ohci_dump_ed(sed); - ohci_dump_tds(xfer); - } -#endif - /* moved splx(s) because of indefinite printing of TD's */ - splx(s); - - return (USBD_IN_PROGRESS); - - ret2: - ohci_free_std(sc, xfer); - ret1: - return (r); -} - -/* Abort a device control request. */ -void -ohci_device_intr_abort(reqh) - usbd_request_handle reqh; -{ - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 1); /* make sure it is done */ - if (reqh->pipe->intrreqh == reqh) { - DPRINTF(("ohci_device_intr_abort: remove\n")); - reqh->pipe->intrreqh = 0; - ohci_intr_done((ohci_softc_t *)reqh->pipe->device->bus, reqh); - } -} - -/* Close a device interrupt pipe. */ -void -ohci_device_intr_close(pipe) - usbd_pipe_handle pipe; -{ - struct ohci_pipe *opipe = (struct ohci_pipe *)pipe; - ohci_softc_t *sc = (ohci_softc_t *)pipe->device->bus; - int nslots = opipe->u.intr.nslots; - int pos = opipe->u.intr.pos; - int j; - ohci_soft_ed_t *p, *sed = opipe->sed; - int s; - - DPRINTFN(1,("ohci_device_intr_close: pipe=%p nslots=%d pos=%d\n", - pipe, nslots, pos)); - s = splusb(); - sed->ed->ed_flags |= LE(OHCI_ED_SKIP); - if ((sed->ed->ed_tailp & LE(OHCI_TAILMASK)) != sed->ed->ed_headp) - usb_delay_ms(&sc->sc_bus, 2); - - for (p = sc->sc_eds[pos]; p && p->next != sed; p = p->next) - ; - if (!p) - panic("ohci_device_intr_close: ED not found\n"); - p->next = sed->next; - p->ed->ed_nexted = sed->ed->ed_nexted; - splx(s); - - for (j = 0; j < nslots; j++) - --sc->sc_bws[pos * nslots + j]; - - ohci_free_std(sc, opipe->tail); - ohci_free_sed(sc, opipe->sed); - /* XXX free other resources */ -} - -usbd_status -ohci_device_setintr(sc, opipe, ival) - ohci_softc_t *sc; - struct ohci_pipe *opipe; - int ival; -{ - int i, j, s, best; - u_int npoll, slow, shigh, nslots; - u_int bestbw, bw; - ohci_soft_ed_t *hsed, *sed = opipe->sed; - - DPRINTFN(2, ("ohci_setintr: pipe=%p\n", opipe)); - if (ival == 0) { - printf("ohci_setintr: 0 interval\n"); - return (USBD_INVAL); - } - - npoll = OHCI_NO_INTRS; - while (npoll > ival) - npoll /= 2; - DPRINTFN(2, ("ohci_setintr: ival=%d npoll=%d\n", ival, npoll)); - - /* - * We now know which level in the tree the ED must go into. - * Figure out which slot has most bandwidth left over. - * Slots to examine: - * npoll - * 1 0 - * 2 1 2 - * 4 3 4 5 6 - * 8 7 8 9 10 11 12 13 14 - * N (N-1) .. (N-1+N-1) - */ - slow = npoll-1; - shigh = slow + npoll; - nslots = OHCI_NO_INTRS / npoll; - for (best = i = slow, bestbw = ~0; i < shigh; i++) { - bw = 0; - for (j = 0; j < nslots; j++) - bw += sc->sc_bws[i * nslots + j]; - if (bw < bestbw) { - best = i; - bestbw = bw; - } - } - DPRINTFN(2, ("ohci_setintr: best=%d(%d..%d) bestbw=%d\n", - best, slow, shigh, bestbw)); - - s = splusb(); - hsed = sc->sc_eds[best]; - sed->next = hsed->next; - sed->ed->ed_nexted = hsed->ed->ed_nexted; - hsed->next = sed; - hsed->ed->ed_nexted = LE(sed->physaddr); - splx(s); - - for (j = 0; j < nslots; j++) - ++sc->sc_bws[best * nslots + j]; - opipe->u.intr.nslots = nslots; - opipe->u.intr.pos = best; - - DPRINTFN(5, ("ohci_setintr: returns %p\n", opipe)); - return (USBD_NORMAL_COMPLETION); -} - diff --git a/sys/dev/usb/ohcireg.h b/sys/dev/usb/ohcireg.h deleted file mode 100644 index bd44e8be40711..0000000000000 --- a/sys/dev/usb/ohcireg.h +++ /dev/null @@ -1,208 +0,0 @@ -/* $NetBSD: ohcireg.h,v 1.7 1998/12/10 23:16:47 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#ifndef _DEV_PCI_OHCIREG_H_ -#define _DEV_PCI_OHCIREG_H_ - -/*** PCI config registers ***/ - -#define PCI_CBMEM 0x10 /* configuration base memory */ - -#define PCI_INTERFACE_OHCI 0x10 - -/*** OHCI registers */ - -#define OHCI_REVISION 0x00 /* OHCI revision # */ -#define OHCI_REV_LO(rev) ((rev)&0xf) -#define OHCI_REV_HI(rev) (((rev)>>4)&0xf) -#define OHCI_REV_LEGACY(rev) ((rev) & 0x100) - -#define OHCI_CONTROL 0x04 -#define OHCI_CBSR_MASK 0x00000003 /* Control/Bulk Service Ratio */ -#define OHCI_RATIO_1_1 0x00000000 -#define OHCI_RATIO_1_2 0x00000001 -#define OHCI_RATIO_1_3 0x00000002 -#define OHCI_RATIO_1_4 0x00000003 -#define OHCI_PLE 0x00000004 /* Periodic List Enable */ -#define OHCI_IE 0x00000008 /* Isochronous Enable */ -#define OHCI_CLE 0x00000010 /* Control List Enable */ -#define OHCI_BLE 0x00000020 /* Bulk List Enable */ -#define OHCI_HCFS_MASK 0x000000c0 /* HostControllerFunctionalState */ -#define OHCI_HCFS_RESET 0x00000000 -#define OHCI_HCFS_RESUME 0x00000040 -#define OHCI_HCFS_OPERATIONAL 0x00000080 -#define OHCI_HCFS_SUSPEND 0x000000c0 -#define OHCI_IR 0x00000100 /* Interrupt Routing */ -#define OHCI_RWC 0x00000200 /* Remote Wakeup Connected */ -#define OHCI_RWE 0x00000400 /* Remote Wakeup Enabled */ -#define OHCI_COMMAND_STATUS 0x08 -#define OHCI_HCR 0x00000001 /* Host Controller Reset */ -#define OHCI_CLF 0x00000002 /* Control List Filled */ -#define OHCI_BLF 0x00000004 /* Bulk List Filled */ -#define OHCI_OCR 0x00000008 /* Ownership Change Request */ -#define OHCI_SOC_MASK 0x00030000 /* Scheduling Overrun Count */ -#define OHCI_INTERRUPT_STATUS 0x0c -#define OHCI_SO 0x00000001 /* Scheduling Overrun */ -#define OHCI_WDH 0x00000002 /* Writeback Done Head */ -#define OHCI_SF 0x00000004 /* Start of Frame */ -#define OHCI_RD 0x00000008 /* Resume Detected */ -#define OHCI_UE 0x00000010 /* Unrecoverable Error */ -#define OHCI_FNO 0x00000020 /* Frame Number Overflow */ -#define OHCI_RHSC 0x00000040 /* Root Hub Status Change */ -#define OHCI_OC 0x40000000 /* Ownership Change */ -#define OHCI_MIE 0x80000000 /* Master Interrupt Enable */ -#define OHCI_INTERRUPT_ENABLE 0x10 -#define OHCI_INTERRUPT_DISABLE 0x14 -#define OHCI_HCCA 0x18 -#define OHCI_PERIOD_CURRENT_ED 0x1c -#define OHCI_CONTROL_HEAD_ED 0x20 -#define OHCI_CONTROL_CURRENT_ED 0x24 -#define OHCI_BULK_HEAD_ED 0x28 -#define OHCI_BULK_CURRENT_ED 0x2c -#define OHCI_DONE_HEAD 0x30 -#define OHCI_FM_INTERVAL 0x34 -#define OHCI_GET_IVAL(s) ((s) & 0x3fff) -#define OHCI_GET_FSMPS(s) (((s) >> 16) & 0x7fff) -#define OHCI_FIT 0x80000000 -#define OHCI_FM_REMAINING 0x38 -#define OHCI_FM_NUMBER 0x3c -#define OHCI_PERIODIC_START 0x40 -#define OHCI_LS_THRESHOLD 0x44 -#define OHCI_RH_DESCRIPTOR_A 0x48 -#define OHCI_GET_NDP(s) ((s) & 0xff) -#define OHCI_PSM 0x0100 /* Power Switching Mode */ -#define OHCI_NPS 0x0200 /* No Power Switching */ -#define OHCI_GET_POTPGT(s) ((s) >> 24) -#define OHCI_RH_DESCRIPTOR_B 0x4c -#define OHCI_RH_STATUS 0x50 -#define OHCI_LPS 0x00000001 /* Local Power Status */ -#define OHCI_OCI 0x00000002 /* OverCurrent Indicator */ -#define OHCI_DRWE 0x00008000 /* Device Remote Wakeup Enable */ -#define OHCI_LPSC 0x00010000 /* Local Power Status Change */ -#define OHCI_CCIC 0x00020000 /* OverCurrent Indicator Change */ -#define OHCI_CRWE 0x80000000 /* Clear Remote Wakeup Enable */ -#define OHCI_RH_PORT_STATUS(n) (0x50 + (n)*4) /* 1 based indexing */ - -#define OHCI_LES (OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE) -#define OHCI_ALL_INTRS (OHCI_SO | OHCI_WDH | OHCI_SF | OHCI_RD | OHCI_UE | \ - OHCI_FNO | OHCI_RHSC | OHCI_OC) -#define OHCI_NORMAL_INTRS (OHCI_SO | OHCI_WDH | OHCI_RD | OHCI_UE | OHCI_RHSC) - -#define OHCI_FSMPS(i) (((i-210)*6/7) << 16) -#define OHCI_PERIODIC(i) ((i)*9/10) - -typedef u_int32_t ohci_physaddr_t; - -#define OHCI_NO_INTRS 32 -struct ohci_hcca { - ohci_physaddr_t hcca_interrupt_table[OHCI_NO_INTRS]; - u_int32_t hcca_frame_number; - ohci_physaddr_t hcca_done_head; -#define OHCI_DONE_INTRS 1 -}; -#define OHCI_HCCA_SIZE 256 -#define OHCI_HCCA_ALIGN 256 - -typedef struct { - u_int32_t ed_flags; -#define OHCI_ED_GET_FA(s) ((s) & 0x7f) -#define OHCI_ED_ADDRMASK 0x0000007f -#define OHCI_ED_SET_FA(s) (s) -#define OHCI_ED_GET_EN(s) (((s) >> 7) & 0xf) -#define OHCI_ED_SET_EN(s) ((s) << 7) -#define OHCI_ED_DIR_MASK 0x00001800 -#define OHCI_ED_DIR_TD 0x00000000 -#define OHCI_ED_DIR_OUT 0x00000800 -#define OHCI_ED_DIR_IN 0x00001000 -#define OHCI_ED_SPEED 0x00002000 -#define OHCI_ED_SKIP 0x00004000 -#define OHCI_ED_FORMAT_GEN 0x00000000 -#define OHCI_ED_FORMAT_ISO 0x00008000 -#define OHCI_ED_GET_MAXP(s) (((s) >> 16) & 0x07ff) -#define OHCI_ED_SET_MAXP(s) ((s) << 16) -#define OHCI_ED_MAXPMASK (0x7ff << 16) - ohci_physaddr_t ed_tailp; -#define OHCI_HALTED 0x00000002 -#define OHCI_TOGGLECARRY 0x00000001 -#define OHCI_TAILMASK 0xfffffffc - ohci_physaddr_t ed_headp; - ohci_physaddr_t ed_nexted; -} ohci_ed_t; -#define OHCI_ED_SIZE 16 -#define OHCI_ED_ALIGN 16 - -typedef struct { - u_int32_t td_flags; -#define OHCI_TD_R 0x00040000 /* Buffer Rounding */ -#define OHCI_TD_DP_MASK 0x00180000 /* Direction / PID */ -#define OHCI_TD_SETUP 0x00000000 -#define OHCI_TD_OUT 0x00080000 -#define OHCI_TD_IN 0x00100000 -#define OHCI_TD_GET_DI(x) (((x) >> 21) & 7) /* Delay Interrupt */ -#define OHCI_TD_SET_DI(x) ((x) << 21) -#define OHCI_TD_NOINTR 0x00e00000 -#define OHCI_TD_TOGGLE_CARRY 0x00000000 -#define OHCI_TD_TOGGLE_0 0x02000000 -#define OHCI_TD_TOGGLE_1 0x03000000 -#define OHCI_TD_GET_EC(x) (((x) >> 26) & 3) /* Error Count */ -#define OHCI_TD_GET_CC(x) ((x) >> 28) /* Condition Code */ -#define OHCI_TD_NOCC 0xf0000000 - ohci_physaddr_t td_cbp; /* Current Buffer Pointer */ - ohci_physaddr_t td_nexttd; /* Next TD */ - ohci_physaddr_t td_be; /* Buffer End */ -} ohci_td_t; -#define OHCI_TD_SIZE 16 -#define OHCI_TD_ALIGN 16 - -#define OHCI_CC_NO_ERROR 0 -#define OHCI_CC_CRC 1 -#define OHCI_CC_BIT_STUFFING 2 -#define OHCI_CC_DATA_TOGGLE_MISMATCH 3 -#define OHCI_CC_STALL 4 -#define OHCI_CC_DEVICE_NOT_RESPONDING 5 -#define OHCI_CC_PID_CHECK_FAILURE 6 -#define OHCI_CC_UNEXPECTED_PID 7 -#define OHCI_CC_DATA_OVERRUN 8 -#define OHCI_CC_DATA_UNDERRUN 9 -#define OHCI_CC_BUFFER_OVERRUN 12 -#define OHCI_CC_BUFFER_UNDERRUN 13 -#define OHCI_CC_NOT_ACCESSED 15 - -#endif /* _DEV_PCI_OHCIREG_H_ */ diff --git a/sys/dev/usb/ohcivar.h b/sys/dev/usb/ohcivar.h deleted file mode 100644 index db8631f7976e1..0000000000000 --- a/sys/dev/usb/ohcivar.h +++ /dev/null @@ -1,115 +0,0 @@ -/* $NetBSD: ohcivar.h,v 1.4 1998/12/26 12:53:01 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -typedef struct ohci_soft_ed { - ohci_ed_t *ed; - struct ohci_soft_ed *next; - ohci_physaddr_t physaddr; -} ohci_soft_ed_t; -#define OHCI_ED_CHUNK 256 - -typedef struct ohci_soft_td { - ohci_td_t *td; - struct ohci_soft_td *nexttd; /* mirrors nexttd in TD */ - struct ohci_soft_td *dnext; /* next in done list */ - ohci_physaddr_t physaddr; - LIST_ENTRY(ohci_soft_td) hnext; - /*ohci_soft_ed_t *sed;*/ - usbd_request_handle reqh; - u_int16_t len; -} ohci_soft_td_t; -#define OHCI_TD_CHUNK 256 - -#define OHCI_NO_EDS (2*OHCI_NO_INTRS-1) - -#define OHCI_HASH_SIZE 128 - -typedef struct ohci_softc { - struct usbd_bus sc_bus; /* base device */ -#if defined(__NetBSD__) - void *sc_ih; /* interrupt vectoring */ - bus_space_tag_t iot; - bus_space_handle_t ioh; - - bus_dma_tag_t sc_dmatag; /* DMA tag */ - /* XXX should keep track of all DMA memory */ - -#elif defined(__FreeBSD__) - int sc_iobase; - int unit; -#endif /* __FreeBSD__ */ - - usb_dma_t sc_hccadma; - struct ohci_hcca *sc_hcca; - ohci_soft_ed_t *sc_eds[OHCI_NO_EDS]; - u_int sc_bws[OHCI_NO_INTRS]; - - u_int32_t sc_eintrs; - ohci_soft_ed_t *sc_ctrl_head; - ohci_soft_ed_t *sc_bulk_head; - - LIST_HEAD(, ohci_soft_td) sc_hash_tds[OHCI_HASH_SIZE]; - - int sc_noport; - u_int8_t sc_addr; /* device address */ - u_int8_t sc_conf; /* device configuration */ - - ohci_soft_ed_t *sc_freeeds; - ohci_soft_td_t *sc_freetds; - - usbd_request_handle sc_intrreqh; - - int sc_intrs; - char sc_vendor[16]; -} ohci_softc_t; - -usbd_status ohci_init __P((ohci_softc_t *)); -int ohci_intr __P((void *)); - -#define MS_TO_TICKS(ms) ((ms) * hz / 1000) - -#ifdef USB_DEBUG -#define DPRINTF(x) if (ohcidebug) printf x -#define DPRINTFN(n,x) if (ohcidebug>(n)) printf x -extern int ohcidebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif diff --git a/sys/dev/usb/ucom.c b/sys/dev/usb/ucom.c deleted file mode 100644 index 749cad455f3f3..0000000000000 --- a/sys/dev/usb/ucom.c +++ /dev/null @@ -1,139 +0,0 @@ -/* $NetBSD: ucom.c,v 1.6 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <dev/usb/usb_port.h> - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#include <sys/conf.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> -#include <dev/usb/hid.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (ucomdebug) printf x -#define DPRINTFN(n,x) if (ucomdebug>(n)) printf x -int ucomdebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -struct ucom_softc { - bdevice sc_dev; /* base device */ - usbd_interface_handle sc_iface; /* interface */ -}; - -void ucom_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); -void ucom_disco __P((void *)); - -USB_DECLARE_DRIVER(ucom); - -USB_MATCH(ucom) -{ - USB_MATCH_START(ucom, uaa); - usb_interface_descriptor_t *id; - - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (id && - id->bInterfaceClass != UCLASS_CDC || - id->bInterfaceSubClass != USUBCLASS_ABSTRACT_CONTROL_MODEL) - return (UMATCH_NONE); - return (UMATCH_IFACECLASS_IFACESUBCLASS); -} - -USB_ATTACH(ucom) -{ - USB_ATTACH_START(ucom, sc, uaa); - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id; - char devinfo[1024]; - - sc->sc_iface = iface; - id = usbd_get_interface_descriptor(iface); - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__FreeBSD__) -static int -ucom_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - return 0; -} -#endif - -#if defined(__FreeBSD__) -DRIVER_MODULE(ucom, uhub, ucom_driver, ucom_devclass, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c deleted file mode 100644 index f739b4b642c95..0000000000000 --- a/sys/dev/usb/ugen.c +++ /dev/null @@ -1,985 +0,0 @@ -/* $NetBSD: ugen.c,v 1.11 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#include <sys/conf.h> -#include <sys/fcntl.h> -#include <sys/filio.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (ugendebug) printf x -#define DPRINTFN(n,x) if (ugendebug>(n)) printf x -int ugendebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -struct ugen_endpoint { - struct ugen_softc *sc; - usb_endpoint_descriptor_t *edesc; - usbd_interface_handle iface; - int state; -#define UGEN_OPEN 0x01 /* device is open */ -#define UGEN_ASLP 0x02 /* waiting for data */ -#define UGEN_SHORT_OK 0x04 /* short xfers are OK */ - usbd_pipe_handle pipeh; - struct clist q; - struct selinfo rsel; - void *ibuf; -}; - -#define UGEN_CHUNK 128 /* chunk size for read */ -#define UGEN_IBSIZE 1020 /* buffer size */ -#define UGEN_BBSIZE 1024 - -struct ugen_softc { - bdevice sc_dev; /* base device */ - struct usbd_device *sc_udev; - - struct ugen_endpoint sc_endpoints[USB_MAX_ENDPOINTS][2]; -#define OUT 0 /* index order is important, from UE_OUT */ -#define IN 1 /* from UE_IN */ - - int sc_disconnected; /* device is gone */ -}; - -int ugenopen __P((dev_t, int, int, struct proc *)); -int ugenclose __P((dev_t, int, int, struct proc *p)); -int ugenread __P((dev_t, struct uio *uio, int)); -int ugenwrite __P((dev_t, struct uio *uio, int)); -int ugenioctl __P((dev_t, u_long, caddr_t, int, struct proc *)); -int ugenpoll __P((dev_t, int, struct proc *)); -void ugenintr __P((usbd_request_handle reqh, usbd_private_handle addr, - usbd_status status)); -void ugen_disco __P((void *)); - -#define UGEN_CDEV_MAJOR 114 - -int ugen_set_config __P((struct ugen_softc *sc, int configno)); -usb_config_descriptor_t *ugen_get_cdesc __P((struct ugen_softc *sc, int index, - int *lenp)); -usbd_status ugen_set_interface __P((struct ugen_softc *, int, int)); -int ugen_get_alt_index __P((struct ugen_softc *sc, int ifaceidx)); - -#define UGENUNIT(n) (((n) >> 4) & 0xf) -#define UGENENDPOINT(n) ((n) & 0xf) - -USB_DECLARE_DRIVER(ugen); - -USB_MATCH(ugen) -{ - USB_MATCH_START(ugen, uaa); - - if (uaa->usegeneric) - return (UMATCH_GENERIC); - else - return (UMATCH_NONE); -} - -USB_ATTACH(ugen) -{ - USB_ATTACH_START(ugen, sc, uaa); - char devinfo[1024]; - usbd_status r; - int conf; - - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s\n", USBDEVNAME(sc->sc_dev), devinfo); - - sc->sc_udev = uaa->device; - conf = 1; /* XXX should not hard code 1 */ - r = ugen_set_config(sc, conf); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s: setting configuration %d failed\n", - USBDEVNAME(sc->sc_dev), conf); - sc->sc_disconnected = 1; - USB_ATTACH_ERROR_RETURN; - } - USB_ATTACH_SUCCESS_RETURN; -} - -int -ugen_set_config(sc, configno) - struct ugen_softc *sc; - int configno; -{ - usbd_device_handle dev = sc->sc_udev; - usbd_interface_handle iface; - usb_endpoint_descriptor_t *ed; - struct ugen_endpoint *sce; - u_int8_t niface, nendpt; - int ifaceno, endptno, endpt; - usbd_status r; - - DPRINTFN(1,("ugen_set_config: %s to configno %d, sc=%p\n", - USBDEVNAME(sc->sc_dev), configno, sc)); - if (usbd_get_config_descriptor(dev)->bConfigurationValue != configno) { - /* Avoid setting the current value. */ - r = usbd_set_config_no(dev, configno, 0); - if (r != USBD_NORMAL_COMPLETION) - return (r); - } - - r = usbd_interface_count(dev, &niface); - if (r != USBD_NORMAL_COMPLETION) - return (r); - memset(sc->sc_endpoints, 0, sizeof sc->sc_endpoints); - for (ifaceno = 0; ifaceno < niface; ifaceno++) { - DPRINTFN(1,("ugen_set_config: ifaceno %d\n", ifaceno)); - r = usbd_device2interface_handle(dev, ifaceno, &iface); - if (r != USBD_NORMAL_COMPLETION) - return (r); - r = usbd_endpoint_count(iface, &nendpt); - if (r != USBD_NORMAL_COMPLETION) - return (r); - for (endptno = 0; endptno < nendpt; endptno++) { - ed = usbd_interface2endpoint_descriptor(iface,endptno); - endpt = ed->bEndpointAddress; - sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)] - [UE_GET_IN(endpt)]; - DPRINTFN(1,("ugen_set_config: endptno %d, endpt=0x%02x" - "(%d,%d), sce=%p\n", - endptno, endpt, UE_GET_ADDR(endpt), - UE_GET_IN(endpt), sce)); - sce->sc = sc; - sce->edesc = ed; - sce->iface = iface; - } - } - return (USBD_NORMAL_COMPLETION); -} - -void -ugen_disco(p) - void *p; -{ - struct ugen_softc *sc = p; - sc->sc_disconnected = 1; -} - -int -ugenopen(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - int unit = UGENUNIT(dev); - int endpt = UGENENDPOINT(dev); - usb_endpoint_descriptor_t *edesc; - struct ugen_endpoint *sce; - int dir, isize; - usbd_status r; - - USB_GET_SC_OPEN(ugen, unit, sc); - DPRINTFN(5, ("ugenopen: flag=%d, mode=%d, unit=%d endpt=%d\n", - flag, mode, unit, endpt)); - - if (sc->sc_disconnected) - return (EIO); - - if (endpt == USB_CONTROL_ENDPOINT) { - /*if ((flag & (FWRITE|FREAD)) != (FWRITE|FREAD)) - return (EACCES);*/ - sce = &sc->sc_endpoints[USB_CONTROL_ENDPOINT][OUT]; - if (sce->state & UGEN_OPEN) - return (EBUSY); - } else { - switch (flag & (FWRITE|FREAD)) { - case FWRITE: - dir = OUT; - break; - case FREAD: - dir = IN; - break; - default: - return (EACCES); - } - sce = &sc->sc_endpoints[endpt][dir]; - DPRINTFN(5, ("ugenopen: sc=%p, endpt=%d, dir=%d, sce=%p\n", - sc, endpt, dir, sce)); - if (sce->state & UGEN_OPEN) - return (EBUSY); - edesc = sce->edesc; - if (!edesc) - return (ENXIO); - switch (edesc->bmAttributes & UE_XFERTYPE) { - case UE_INTERRUPT: - isize = UGETW(edesc->wMaxPacketSize); - if (isize == 0) /* shouldn't happen */ - return (EINVAL); - sce->ibuf = malloc(isize, M_USB, M_WAITOK); - DPRINTFN(5, ("ugenopen: intr endpt=%d,isize=%d\n", - endpt, isize)); -#if defined(__NetBSD__) - if (clalloc(&sce->q, UGEN_IBSIZE, 0) == -1) - return (ENOMEM); -#elif defined(__FreeBSD__) - clist_alloc_cblocks(&sce->q, UGEN_IBSIZE, 0); -#endif - r = usbd_open_pipe_intr(sce->iface, - edesc->bEndpointAddress, - USBD_SHORT_XFER_OK, &sce->pipeh, sce, - sce->ibuf, isize, ugenintr); - if (r != USBD_NORMAL_COMPLETION) { - free(sce->ibuf, M_USB); -#if defined(__NetBSD__) - clfree(&sce->q); -#elif defined(__FreeBSD__) - clist_free_cblocks(&sce->q); -#endif - return (EIO); - } - usbd_set_disco(sce->pipeh, ugen_disco, sc); - DPRINTFN(5, ("ugenopen: interrupt open done\n")); - break; - case UE_BULK: - r = usbd_open_pipe(sce->iface, - edesc->bEndpointAddress, 0, - &sce->pipeh); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - break; - case UE_CONTROL: - case UE_ISOCHRONOUS: - return (EINVAL); - } - } - sce->state |= UGEN_OPEN; - return (0); -} - -int -ugenclose(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - USB_GET_SC(ugen, UGENUNIT(dev), sc); - int endpt = UGENENDPOINT(dev); - struct ugen_endpoint *sce; - int dir; - - DPRINTFN(5, ("ugenclose: flag=%d, mode=%d\n", flag, mode)); - if (sc->sc_disconnected) - return (EIO); - - if (endpt == USB_CONTROL_ENDPOINT) { - DPRINTFN(5, ("ugenclose: close control\n")); - sc->sc_endpoints[endpt][OUT].state = 0; - return (0); - } - - flag = FWRITE | FREAD; /* XXX bug if generic open/close */ - - /* The open modes have been joined, so check for both modes. */ - for (dir = OUT; dir <= IN; dir++) { - if (flag & (dir == OUT ? FWRITE : FREAD)) { - sce = &sc->sc_endpoints[endpt][dir]; - if (!sce || !sce->pipeh) /* XXX */ - continue; /* XXX */ - DPRINTFN(5, ("ugenclose: endpt=%d dir=%d sce=%p\n", - endpt, dir, sce)); - sce->state = 0; - - usbd_abort_pipe(sce->pipeh); - usbd_close_pipe(sce->pipeh); - sce->pipeh = 0; - - if (sce->ibuf) { - free(sce->ibuf, M_USB); - sce->ibuf = 0; - } - } - } - - return (0); -} - -int -ugenread(dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - USB_GET_SC(ugen, UGENUNIT(dev), sc); - int endpt = UGENENDPOINT(dev); - struct ugen_endpoint *sce = &sc->sc_endpoints[endpt][IN]; - u_int32_t n, tn; - char buf[UGEN_BBSIZE]; - usbd_request_handle reqh; - usbd_status r; - int s; - int error = 0; - u_char buffer[UGEN_CHUNK]; - - DPRINTFN(5, ("ugenread: %d:%d\n", UGENUNIT(dev), UGENENDPOINT(dev))); - if (sc->sc_disconnected) - return (EIO); - -#ifdef DIAGNOSTIC - if (!sce->edesc) { - printf("ugenread: no edesc\n"); - return (EIO); - } - if (!sce->pipeh) { - printf("ugenread: no pipe\n"); - return (EIO); - } -#endif - - switch (sce->edesc->bmAttributes & UE_XFERTYPE) { - case UE_INTERRUPT: - /* Block until activity occured. */ - s = splusb(); - while (sce->q.c_cc == 0) { - if (flag & IO_NDELAY) { - splx(s); - return (EWOULDBLOCK); - } - sce->state |= UGEN_ASLP; - DPRINTFN(5, ("ugenread: sleep on %p\n", sc)); - error = tsleep((caddr_t)sce, PZERO | PCATCH, - "ugenri", 0); - DPRINTFN(5, ("ugenread: woke, error=%d\n", error)); - if (error) { - sce->state &= ~UGEN_ASLP; - splx(s); - return (error); - } - } - splx(s); - - /* Transfer as many chunks as possible. */ - while (sce->q.c_cc > 0 && uio->uio_resid > 0) { - n = min(sce->q.c_cc, uio->uio_resid); - if (n > sizeof(buffer)) - n = sizeof(buffer); - - /* Remove a small chunk from the input queue. */ - q_to_b(&sce->q, buffer, n); - DPRINTFN(5, ("ugenread: got %d chars\n", n)); - - /* Copy the data to the user process. */ - error = uiomove(buffer, n, uio); - if (error) - break; - } - break; - case UE_BULK: - reqh = usbd_alloc_request(); - if (reqh == 0) - return (ENOMEM); - while ((n = min(UGEN_BBSIZE, uio->uio_resid)) != 0) { - DPRINTFN(1, ("ugenread: start transfer %d bytes\n", n)); - tn = n; - r = usbd_bulk_transfer(reqh, sce->pipeh, 0, buf, - &tn, "ugenrb"); - if (r != USBD_NORMAL_COMPLETION) { - if (r == USBD_INTERRUPTED) - error = EINTR; - else - error = EIO; - break; - } - DPRINTFN(1, ("ugenread: got %d bytes\n", tn)); - error = uiomove(buf, tn, uio); - if (error || tn < n) - break; - } - usbd_free_request(reqh); - break; - default: - return (ENXIO); - } - - return (error); -} - -int -ugenwrite(dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - USB_GET_SC(ugen, UGENUNIT(dev), sc); - int endpt = UGENENDPOINT(dev); - struct ugen_endpoint *sce = &sc->sc_endpoints[endpt][OUT]; - size_t n; - int error = 0; - char buf[UGEN_BBSIZE]; - usbd_request_handle reqh; - usbd_status r; - - if (sc->sc_disconnected) - return (EIO); - -#ifdef DIAGNOSTIC - if (!sce->edesc) { - printf("ugenwrite: no edesc\n"); - return (EIO); - } - if (!sce->pipeh) { - printf("ugenwrite: no pipe\n"); - return (EIO); - } -#endif - - DPRINTF(("ugenwrite\n")); - switch (sce->edesc->bmAttributes & UE_XFERTYPE) { - case UE_BULK: - reqh = usbd_alloc_request(); - if (reqh == 0) - return (EIO); - while ((n = min(UGEN_BBSIZE, uio->uio_resid)) != 0) { - error = uiomove(buf, n, uio); - if (error) - break; - DPRINTFN(1, ("ugenwrite: transfer %d bytes\n", n)); - r = usbd_bulk_transfer(reqh, sce->pipeh, 0, buf, - &n, "ugenwb"); - if (r != USBD_NORMAL_COMPLETION) { - if (r == USBD_INTERRUPTED) - error = EINTR; - else - error = EIO; - break; - } - } - usbd_free_request(reqh); - break; - default: - return (ENXIO); - } - return (error); -} - - -void -ugenintr(reqh, addr, status) - usbd_request_handle reqh; - usbd_private_handle addr; - usbd_status status; -{ - struct ugen_endpoint *sce = addr; - /*struct ugen_softc *sc = sce->sc;*/ - usbd_private_handle priv; - void *buffer; - u_int32_t count; - usbd_status xstatus; - u_char *ibuf; - - if (status == USBD_CANCELLED) - return; - - if (status != USBD_NORMAL_COMPLETION) { - DPRINTF(("ugenintr: status=%d\n", status)); - usbd_clear_endpoint_stall_async(sce->pipeh); - return; - } - - (void)usbd_get_request_status(reqh, &priv, &buffer, &count, &xstatus); - ibuf = sce->ibuf; - - DPRINTFN(5, ("ugenintr: reqh=%p status=%d count=%d\n", - reqh, xstatus, count)); - DPRINTFN(5, (" data = %02x %02x %02x\n", - ibuf[0], ibuf[1], ibuf[2])); - - (void)b_to_q(ibuf, count, &sce->q); - - if (sce->state & UGEN_ASLP) { - sce->state &= ~UGEN_ASLP; - DPRINTFN(5, ("ugen_intr: waking %p\n", sce)); - wakeup((caddr_t)sce); - } - selwakeup(&sce->rsel); -} - -usbd_status -ugen_set_interface(sc, ifaceidx, altno) - struct ugen_softc *sc; - int ifaceidx, altno; -{ - usbd_interface_handle iface; - usb_endpoint_descriptor_t *ed; - usbd_status r; - struct ugen_endpoint *sce; - u_int8_t niface, nendpt, endptno, endpt; - - DPRINTFN(15, ("ugen_set_interface %d %d\n", ifaceidx, altno)); - - r = usbd_interface_count(sc->sc_udev, &niface); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (ifaceidx < 0 || ifaceidx >= niface) - return (USBD_INVAL); - - r = usbd_device2interface_handle(sc->sc_udev, ifaceidx, &iface); - if (r != USBD_NORMAL_COMPLETION) - return (r); - r = usbd_endpoint_count(iface, &nendpt); - if (r != USBD_NORMAL_COMPLETION) - return (r); - for (endptno = 0; endptno < nendpt; endptno++) { - ed = usbd_interface2endpoint_descriptor(iface,endptno); - endpt = ed->bEndpointAddress; - sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)][UE_GET_IN(endpt)]; - sce->sc = 0; - sce->edesc = 0; - sce->iface = 0; - } - - /* change setting */ - r = usbd_set_interface(iface, altno); - if (r != USBD_NORMAL_COMPLETION) - return (r); - - r = usbd_endpoint_count(iface, &nendpt); - if (r != USBD_NORMAL_COMPLETION) - return (r); - for (endptno = 0; endptno < nendpt; endptno++) { - ed = usbd_interface2endpoint_descriptor(iface,endptno); - endpt = ed->bEndpointAddress; - sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)][UE_GET_IN(endpt)]; - sce->sc = sc; - sce->edesc = ed; - sce->iface = iface; - } - return (0); -} - -/* Retrieve a complete descriptor for a certain device and index. */ -usb_config_descriptor_t * -ugen_get_cdesc(sc, index, lenp) - struct ugen_softc *sc; - int index; - int *lenp; -{ - usb_config_descriptor_t *cdesc, *tdesc, cdescr; - int len; - usbd_status r; - - if (index == USB_CURRENT_CONFIG_INDEX) { - tdesc = usbd_get_config_descriptor(sc->sc_udev); - len = UGETW(tdesc->wTotalLength); - if (lenp) - *lenp = len; - cdesc = malloc(len, M_TEMP, M_WAITOK); - memcpy(cdesc, tdesc, len); - DPRINTFN(5,("ugen_get_cdesc: current, len=%d\n", len)); - } else { - r = usbd_get_config_desc(sc->sc_udev, index, &cdescr); - if (r != USBD_NORMAL_COMPLETION) - return (0); - len = UGETW(cdescr.wTotalLength); - DPRINTFN(5,("ugen_get_cdesc: index=%d, len=%d\n", index, len)); - if (lenp) - *lenp = len; - cdesc = malloc(len, M_TEMP, M_WAITOK); - r = usbd_get_config_desc_full(sc->sc_udev, index, cdesc, len); - if (r != USBD_NORMAL_COMPLETION) { - free(cdesc, M_TEMP); - return (0); - } - } - return (cdesc); -} - -int -ugen_get_alt_index(sc, ifaceidx) - struct ugen_softc *sc; - int ifaceidx; -{ - usbd_interface_handle iface; - usbd_status r; - - r = usbd_device2interface_handle(sc->sc_udev, ifaceidx, &iface); - if (r != USBD_NORMAL_COMPLETION) - return (-1); - return (usbd_get_interface_altindex(iface)); -} - -int -ugenioctl(dev, cmd, addr, flag, p) - dev_t dev; - u_long cmd; - caddr_t addr; - int flag; - struct proc *p; -{ - USB_GET_SC(ugen, UGENUNIT(dev), sc); - int endpt = UGENENDPOINT(dev); - struct ugen_endpoint *sce; - usbd_status r; - usbd_interface_handle iface; - struct usb_config_desc *cd; - usb_config_descriptor_t *cdesc; - struct usb_interface_desc *id; - usb_interface_descriptor_t *idesc; - struct usb_endpoint_desc *ed; - usb_endpoint_descriptor_t *edesc; - struct usb_alt_interface *ai; - struct usb_string_desc *si; - u_int8_t conf, alt; - - DPRINTFN(5, ("ugenioctl: cmd=%08lx\n", cmd)); - if (sc->sc_disconnected) - return (EIO); - - switch (cmd) { - case FIONBIO: - /* All handled in the upper FS layer. */ - return (0); - case USB_SET_SHORT_XFER: - /* This flag only affects read */ - sce = &sc->sc_endpoints[endpt][IN]; -#ifdef DIAGNOSTIC - if (!sce->pipeh) { - printf("ugenioctl: no pipe\n"); - return (EIO); - } -#endif - if (*(int *)addr) - sce->state |= UGEN_SHORT_OK; - else - sce->state &= ~UGEN_SHORT_OK; - return (0); - default: - break; - } - - if (endpt != USB_CONTROL_ENDPOINT) - return (EINVAL); - - switch (cmd) { -#ifdef USB_DEBUG - case USB_SETDEBUG: - ugendebug = *(int *)addr; - break; -#endif - case USB_GET_CONFIG: - r = usbd_get_config(sc->sc_udev, &conf); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - *(int *)addr = conf; - break; - case USB_SET_CONFIG: - if (!(flag & FWRITE)) - return (EPERM); - r = ugen_set_config(sc, *(int *)addr); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - break; - case USB_GET_ALTINTERFACE: - ai = (struct usb_alt_interface *)addr; - r = usbd_device2interface_handle(sc->sc_udev, - ai->interface_index, &iface); - if (r != USBD_NORMAL_COMPLETION) - return (EINVAL); - idesc = usbd_get_interface_descriptor(iface); - if (!idesc) - return (EIO); - ai->alt_no = idesc->bAlternateSetting; - break; - case USB_SET_ALTINTERFACE: - if (!(flag & FWRITE)) - return (EPERM); - ai = (struct usb_alt_interface *)addr; - r = usbd_device2interface_handle(sc->sc_udev, - ai->interface_index, &iface); - if (r != USBD_NORMAL_COMPLETION) - return (EINVAL); - r = ugen_set_interface(sc, ai->interface_index, ai->alt_no); - if (r != USBD_NORMAL_COMPLETION) - return (EINVAL); - break; - case USB_GET_NO_ALT: - ai = (struct usb_alt_interface *)addr; - cdesc = ugen_get_cdesc(sc, ai->config_index, 0); - if (!cdesc) - return (EINVAL); - idesc = usbd_find_idesc(cdesc, ai->interface_index, 0); - if (!idesc) - return (EINVAL); - ai->alt_no = usbd_get_no_alts(cdesc, idesc->bInterfaceNumber); - break; - case USB_GET_DEVICE_DESC: - *(usb_device_descriptor_t *)addr = - *usbd_get_device_descriptor(sc->sc_udev); - break; - case USB_GET_CONFIG_DESC: - cd = (struct usb_config_desc *)addr; - cdesc = ugen_get_cdesc(sc, cd->config_index, 0); - if (!cdesc) - return (EINVAL); - cd->desc = *cdesc; - free(cdesc, M_TEMP); - break; - case USB_GET_INTERFACE_DESC: - id = (struct usb_interface_desc *)addr; - cdesc = ugen_get_cdesc(sc, id->config_index, 0); - if (!cdesc) - return (EINVAL); - if (id->config_index == USB_CURRENT_CONFIG_INDEX && - id->alt_index == USB_CURRENT_ALT_INDEX) - alt = ugen_get_alt_index(sc, id->interface_index); - else - alt = id->alt_index; - idesc = usbd_find_idesc(cdesc, id->interface_index, alt); - if (!idesc) { - free(cdesc, M_TEMP); - return (EINVAL); - } - id->desc = *idesc; - free(cdesc, M_TEMP); - break; - case USB_GET_ENDPOINT_DESC: - ed = (struct usb_endpoint_desc *)addr; - cdesc = ugen_get_cdesc(sc, ed->config_index, 0); - if (!cdesc) - return (EINVAL); - if (ed->config_index == USB_CURRENT_CONFIG_INDEX && - ed->alt_index == USB_CURRENT_ALT_INDEX) - alt = ugen_get_alt_index(sc, ed->interface_index); - else - alt = ed->alt_index; - edesc = usbd_find_edesc(cdesc, ed->interface_index, - alt, ed->endpoint_index); - if (!edesc) { - free(cdesc, M_TEMP); - return (EINVAL); - } - ed->desc = *edesc; - free(cdesc, M_TEMP); - break; - case USB_GET_FULL_DESC: - { - int len; - struct iovec iov; - struct uio uio; - struct usb_full_desc *fd = (struct usb_full_desc *)addr; - int error; - - cdesc = ugen_get_cdesc(sc, fd->config_index, &len); - if (len > fd->size) - len = fd->size; - iov.iov_base = (caddr_t)fd->data; - iov.iov_len = len; - uio.uio_iov = &iov; - uio.uio_iovcnt = 1; - uio.uio_resid = len; - uio.uio_offset = 0; - uio.uio_segflg = UIO_USERSPACE; - uio.uio_rw = UIO_READ; - uio.uio_procp = p; - error = uiomove((caddr_t)cdesc, len, &uio); - free(cdesc, M_TEMP); - return (error); - } - case USB_GET_STRING_DESC: - si = (struct usb_string_desc *)addr; - r = usbd_get_string_desc(sc->sc_udev, si->string_index, - si->language_id, &si->desc); - if (r != USBD_NORMAL_COMPLETION) - return (EINVAL); - break; - case USB_DO_REQUEST: - { - struct usb_ctl_request *ur = (void *)addr; - int len = UGETW(ur->request.wLength); - struct iovec iov; - struct uio uio; - void *ptr = 0; - usbd_status r; - int error = 0; - - if (!(flag & FWRITE)) - return (EPERM); - /* Avoid requests that would damage the bus integrity. */ - if ((ur->request.bmRequestType == UT_WRITE_DEVICE && - ur->request.bRequest == UR_SET_ADDRESS) || - (ur->request.bmRequestType == UT_WRITE_DEVICE && - ur->request.bRequest == UR_SET_CONFIG) || - (ur->request.bmRequestType == UT_WRITE_INTERFACE && - ur->request.bRequest == UR_SET_INTERFACE)) - return (EINVAL); - - if (len < 0 || len > 32767) - return (EINVAL); - if (len != 0) { - iov.iov_base = (caddr_t)ur->data; - iov.iov_len = len; - uio.uio_iov = &iov; - uio.uio_iovcnt = 1; - uio.uio_resid = len; - uio.uio_offset = 0; - uio.uio_segflg = UIO_USERSPACE; - uio.uio_rw = - ur->request.bmRequestType & UT_READ ? - UIO_READ : UIO_WRITE; - uio.uio_procp = p; - ptr = malloc(len, M_TEMP, M_WAITOK); - if (uio.uio_rw == UIO_WRITE) { - error = uiomove(ptr, len, &uio); - if (error) - goto ret; - } - } - r = usbd_do_request_flags(sc->sc_udev, &ur->request, - ptr, ur->flags, &ur->actlen); - if (r) { - error = EIO; - goto ret; - } - if (len != 0) { - if (uio.uio_rw == UIO_READ) { - error = uiomove(ptr, len, &uio); - if (error) - goto ret; - } - } - ret: - if (ptr) - free(ptr, M_TEMP); - return (error); - } - case USB_GET_DEVICEINFO: - usbd_fill_deviceinfo(sc->sc_udev, - (struct usb_device_info *)addr); - break; - default: - return (EINVAL); - } - return (0); -} - -int -ugenpoll(dev, events, p) - dev_t dev; - int events; - struct proc *p; -{ - USB_GET_SC(ugen, UGENUNIT(dev), sc); - /* XXX */ - struct ugen_endpoint *sce; - int revents = 0; - int s; - - if (sc->sc_disconnected) - return (EIO); - - sce = &sc->sc_endpoints[UGENENDPOINT(dev)][IN]; -#ifdef DIAGNOSTIC - if (!sce->edesc) { - printf("ugenwrite: no edesc\n"); - return (EIO); - } - if (!sce->pipeh) { - printf("ugenpoll: no pipe\n"); - return (EIO); - } -#endif - s = splusb(); - switch (sce->edesc->bmAttributes & UE_XFERTYPE) { - case UE_INTERRUPT: - if (events & (POLLIN | POLLRDNORM)) { - if (sce->q.c_cc > 0) - revents |= events & (POLLIN | POLLRDNORM); - else - selrecord(p, &sce->rsel); - } - break; - case UE_BULK: - /* - * We have no easy way of determining if a read will - * yield any data or a write will happen. - * Pretend they will. - */ - revents |= events & - (POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM); - break; - default: - break; - } - splx(s); - return (revents); -} - -#if defined(__FreeBSD__) -static int -ugen_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - return 0; -} - -DRIVER_MODULE(ugen, uhub, ugen_driver, ugen_devclass, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/uhci.c b/sys/dev/usb/uhci.c deleted file mode 100644 index 707bfe3795ba8..0000000000000 --- a/sys/dev/usb/uhci.c +++ /dev/null @@ -1,2620 +0,0 @@ -/* $NetBSD: uhci.c,v 1.22 1999/01/08 11:58:25 augustss Exp $ */ -/* FreeBSD $Id: uhci.c,v 1.6 1999/01/07 23:31:33 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * USB Universal Host Controller driver. - * Handles PIIX3 and PIIX4. - * - * Data sheets: ftp://download.intel.com/design/intarch/datashts/29055002.pdf - * ftp://download.intel.com/design/intarch/datashts/29056201.pdf - * UHCI spec: http://www.intel.com/design/usb/uhci11d.pdf - * USB spec: http://www.teleport.com/cgi-bin/mailmerge.cgi/~usb/cgiform.tpl - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#endif -#include <sys/proc.h> -#include <sys/queue.h> -#include <sys/select.h> - -#include <machine/bus.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usb_mem.h> -#include <dev/usb/usb_quirks.h> - -#include <dev/usb/uhcireg.h> -#include <dev/usb/uhcivar.h> - -#if defined(__FreeBSD__) -#include <machine/clock.h> - -#define delay(d) DELAY(d) -#endif - -#define MS_TO_TICKS(ms) ((ms) * hz / 1000) - -struct uhci_pipe { - struct usbd_pipe pipe; - uhci_intr_info_t *iinfo; - int newtoggle; - /* Info needed for different pipe kinds. */ - union { - /* Control pipe */ - struct { - uhci_soft_qh_t *sqh; - usb_dma_t reqdma; - usb_dma_t datadma; - uhci_soft_td_t *setup, *stat; - u_int length; - } ctl; - /* Interrupt pipe */ - struct { - usb_dma_t datadma; - int npoll; - uhci_soft_qh_t **qhs; - } intr; - /* Bulk pipe */ - struct { - uhci_soft_qh_t *sqh; - usb_dma_t datadma; - u_int length; - int isread; - } bulk; - /* Iso pipe */ - struct iso { - u_int bufsize; - u_int nbuf; - usb_dma_t *bufs; - uhci_soft_td_t **stds; - } iso; - } u; -}; - -/* - * The uhci_intr_info free list can be global since they contain - * no dma specific data. The other free lists do. - */ -LIST_HEAD(, uhci_intr_info) uhci_ii_free; - -void uhci_busreset __P((uhci_softc_t *)); -usbd_status uhci_run __P((uhci_softc_t *, int run)); -uhci_soft_td_t *uhci_alloc_std __P((uhci_softc_t *)); -void uhci_free_std __P((uhci_softc_t *, uhci_soft_td_t *)); -uhci_soft_qh_t *uhci_alloc_sqh __P((uhci_softc_t *)); -void uhci_free_sqh __P((uhci_softc_t *, uhci_soft_qh_t *)); -uhci_intr_info_t *uhci_alloc_intr_info __P((uhci_softc_t *)); -void uhci_free_intr_info __P((uhci_intr_info_t *ii)); -#if 0 -void uhci_enter_ctl_q __P((uhci_softc_t *, uhci_soft_qh_t *, - uhci_intr_info_t *)); -void uhci_exit_ctl_q __P((uhci_softc_t *, uhci_soft_qh_t *)); -#endif - -void uhci_free_std_chain __P((uhci_softc_t *, - uhci_soft_td_t *, uhci_soft_td_t *)); -usbd_status uhci_alloc_std_chain __P((struct uhci_pipe *, uhci_softc_t *, - int, int, int, usb_dma_t *, - uhci_soft_td_t **, - uhci_soft_td_t **)); -void uhci_timo __P((void *)); -void uhci_waitintr __P((uhci_softc_t *, usbd_request_handle)); -void uhci_check_intr __P((uhci_softc_t *, uhci_intr_info_t *)); -void uhci_ii_done __P((uhci_intr_info_t *, int)); -void uhci_timeout __P((void *)); -void uhci_wakeup_ctrl __P((void *, int, int, void *, int)); -void uhci_lock_frames __P((uhci_softc_t *)); -void uhci_unlock_frames __P((uhci_softc_t *)); -void uhci_add_ctrl __P((uhci_softc_t *, uhci_soft_qh_t *)); -void uhci_add_bulk __P((uhci_softc_t *, uhci_soft_qh_t *)); -void uhci_remove_ctrl __P((uhci_softc_t *, uhci_soft_qh_t *)); -void uhci_remove_bulk __P((uhci_softc_t *, uhci_soft_qh_t *)); -int uhci_str __P((usb_string_descriptor_t *, int, char *)); - -void uhci_wakeup_cb __P((usbd_request_handle reqh)); - -usbd_status uhci_device_ctrl_transfer __P((usbd_request_handle)); -usbd_status uhci_device_ctrl_start __P((usbd_request_handle)); -void uhci_device_ctrl_abort __P((usbd_request_handle)); -void uhci_device_ctrl_close __P((usbd_pipe_handle)); -usbd_status uhci_device_intr_transfer __P((usbd_request_handle)); -usbd_status uhci_device_intr_start __P((usbd_request_handle)); -void uhci_device_intr_abort __P((usbd_request_handle)); -void uhci_device_intr_close __P((usbd_pipe_handle)); -usbd_status uhci_device_bulk_transfer __P((usbd_request_handle)); -usbd_status uhci_device_bulk_start __P((usbd_request_handle)); -void uhci_device_bulk_abort __P((usbd_request_handle)); -void uhci_device_bulk_close __P((usbd_pipe_handle)); -usbd_status uhci_device_isoc_transfer __P((usbd_request_handle)); -usbd_status uhci_device_isoc_start __P((usbd_request_handle)); -void uhci_device_isoc_abort __P((usbd_request_handle)); -void uhci_device_isoc_close __P((usbd_pipe_handle)); -usbd_status uhci_device_isoc_setbuf __P((usbd_pipe_handle, u_int, u_int)); - -usbd_status uhci_root_ctrl_transfer __P((usbd_request_handle)); -usbd_status uhci_root_ctrl_start __P((usbd_request_handle)); -void uhci_root_ctrl_abort __P((usbd_request_handle)); -void uhci_root_ctrl_close __P((usbd_pipe_handle)); -usbd_status uhci_root_intr_transfer __P((usbd_request_handle)); -usbd_status uhci_root_intr_start __P((usbd_request_handle)); -void uhci_root_intr_abort __P((usbd_request_handle)); -void uhci_root_intr_close __P((usbd_pipe_handle)); - -usbd_status uhci_open __P((usbd_pipe_handle)); -void uhci_poll __P((struct usbd_bus *)); - -usbd_status uhci_device_request __P((usbd_request_handle reqh)); -void uhci_ctrl_done __P((uhci_intr_info_t *ii)); -void uhci_bulk_done __P((uhci_intr_info_t *ii)); - -void uhci_add_intr __P((uhci_softc_t *, int, uhci_soft_qh_t *)); -void uhci_remove_intr __P((uhci_softc_t *, int, uhci_soft_qh_t *)); -usbd_status uhci_device_setintr __P((uhci_softc_t *sc, - struct uhci_pipe *pipe, int ival)); -void uhci_intr_done __P((uhci_intr_info_t *ii)); -void uhci_isoc_done __P((uhci_intr_info_t *ii)); - -#ifdef USB_DEBUG -static void uhci_dumpregs __P((uhci_softc_t *)); -void uhci_dump_tds __P((uhci_soft_td_t *)); -void uhci_dump_qh __P((uhci_soft_qh_t *)); -void uhci_dump __P((void)); -void uhci_dump_td __P((uhci_soft_td_t *)); -#endif - -#if defined(__NetBSD__) -#define UWRITE2(sc, r, x) bus_space_write_2((sc)->iot, (sc)->ioh, (r), (x)) -#define UWRITE4(sc, r, x) bus_space_write_4((sc)->iot, (sc)->ioh, (r), (x)) -#define UREAD2(sc, r) bus_space_read_2((sc)->iot, (sc)->ioh, (r)) -#define UREAD4(sc, r) bus_space_read_4((sc)->iot, (sc)->ioh, (r)) -#elif defined(__FreeBSD__) -#define UWRITE2(sc,r,x) outw((sc)->sc_iobase + (r), (x)) -#define UWRITE4(sc,r,x) outl((sc)->sc_iobase + (r), (x)) -#define UREAD2(sc,r) inw((sc)->sc_iobase + (r)) -#define UREAD4(sc,r) inl((sc)->sc_iobase + (r)) -#endif - -#define UHCICMD(sc, cmd) UWRITE2(sc, UHCI_CMD, cmd) -#define UHCISTS(sc) UREAD2(sc, UHCI_STS) - -#define UHCI_RESET_TIMEOUT 100 /* reset timeout */ - -#define UHCI_CURFRAME(sc) (UREAD2(sc, UHCI_FRNUM) & UHCI_FRNUM_MASK) - -#define UHCI_INTR_ENDPT 1 - -struct usbd_methods uhci_root_ctrl_methods = { - uhci_root_ctrl_transfer, - uhci_root_ctrl_start, - uhci_root_ctrl_abort, - uhci_root_ctrl_close, - 0, -}; - -struct usbd_methods uhci_root_intr_methods = { - uhci_root_intr_transfer, - uhci_root_intr_start, - uhci_root_intr_abort, - uhci_root_intr_close, - 0, -}; - -struct usbd_methods uhci_device_ctrl_methods = { - uhci_device_ctrl_transfer, - uhci_device_ctrl_start, - uhci_device_ctrl_abort, - uhci_device_ctrl_close, - 0, -}; - -struct usbd_methods uhci_device_intr_methods = { - uhci_device_intr_transfer, - uhci_device_intr_start, - uhci_device_intr_abort, - uhci_device_intr_close, - 0, -}; - -struct usbd_methods uhci_device_bulk_methods = { - uhci_device_bulk_transfer, - uhci_device_bulk_start, - uhci_device_bulk_abort, - uhci_device_bulk_close, - 0, -}; - -struct usbd_methods uhci_device_isoc_methods = { - uhci_device_isoc_transfer, - uhci_device_isoc_start, - uhci_device_isoc_abort, - uhci_device_isoc_close, - uhci_device_isoc_setbuf, -}; - -void -uhci_busreset(sc) - uhci_softc_t *sc; -{ - UHCICMD(sc, UHCI_CMD_GRESET); /* global reset */ - usb_delay_ms(&sc->sc_bus, USB_BUS_RESET_DELAY); /* wait a little */ - UHCICMD(sc, 0); /* do nothing */ -} - -usbd_status -uhci_init(sc) - uhci_softc_t *sc; -{ - usbd_status r; - int i, j; - uhci_soft_qh_t *csqh, *bsqh, *sqh; - uhci_soft_td_t *std; - usb_dma_t dma; - static int uhci_global_init_done = 0; - - DPRINTFN(1,("uhci_init: start\n")); - - if (!uhci_global_init_done) { - uhci_global_init_done = 1; - LIST_INIT(&uhci_ii_free); - } - -#if defined(USB_DEBUG) - if (uhcidebug > 2) - uhci_dumpregs(sc); -#endif - - uhci_run(sc, 0); /* stop the controller */ - UWRITE2(sc, UHCI_INTR, 0); /* disable interrupts */ - - /* Allocate and initialize real frame array. */ - r = usb_allocmem(sc->sc_dmatag, - UHCI_FRAMELIST_COUNT * sizeof(uhci_physaddr_t), - UHCI_FRAMELIST_ALIGN, &dma); - if (r != USBD_NORMAL_COMPLETION) - return (r); - sc->sc_pframes = KERNADDR(&dma); - UWRITE2(sc, UHCI_FRNUM, 0); /* set frame number to 0 */ - UWRITE4(sc, UHCI_FLBASEADDR, DMAADDR(&dma)); /* set frame list */ - - uhci_busreset(sc); - - /* Allocate the dummy QH where bulk traffic will be queued. */ - bsqh = uhci_alloc_sqh(sc); - if (!bsqh) - return (USBD_NOMEM); - bsqh->qh->qh_hlink = UHCI_PTR_T; /* end of QH chain */ - bsqh->qh->qh_elink = UHCI_PTR_T; - sc->sc_bulk_start = sc->sc_bulk_end = bsqh; - - /* Allocate the dummy QH where control traffic will be queued. */ - csqh = uhci_alloc_sqh(sc); - if (!csqh) - return (USBD_NOMEM); - csqh->qh->hlink = bsqh; - csqh->qh->qh_hlink = bsqh->physaddr | UHCI_PTR_Q; - csqh->qh->qh_elink = UHCI_PTR_T; - sc->sc_ctl_start = sc->sc_ctl_end = csqh; - - /* - * Make all (virtual) frame list pointers point to the interrupt - * queue heads and the interrupt queue heads at the control - * queue head and point the physical frame list to the virtual. - */ - for(i = 0; i < UHCI_VFRAMELIST_COUNT; i++) { - std = uhci_alloc_std(sc); - sqh = uhci_alloc_sqh(sc); - if (!std || !sqh) - return (USBD_NOMEM); - std->td->link.sqh = sqh; - std->td->td_link = sqh->physaddr | UHCI_PTR_Q; - std->td->td_status = UHCI_TD_IOS; /* iso, inactive */ - std->td->td_token = 0; - std->td->td_buffer = 0; - sqh->qh->hlink = csqh; - sqh->qh->qh_hlink = csqh->physaddr | UHCI_PTR_Q; - sqh->qh->elink = 0; - sqh->qh->qh_elink = UHCI_PTR_T; - sc->sc_vframes[i].htd = std; - sc->sc_vframes[i].etd = std; - sc->sc_vframes[i].hqh = sqh; - sc->sc_vframes[i].eqh = sqh; - for (j = i; - j < UHCI_FRAMELIST_COUNT; - j += UHCI_VFRAMELIST_COUNT) - sc->sc_pframes[j] = std->physaddr; - } - - LIST_INIT(&sc->sc_intrhead); - - /* Set up the bus struct. */ - sc->sc_bus.open_pipe = uhci_open; - sc->sc_bus.pipe_size = sizeof(struct uhci_pipe); - sc->sc_bus.do_poll = uhci_poll; - - DPRINTFN(1,("uhci_init: enabling\n")); - UWRITE2(sc, UHCI_INTR, UHCI_INTR_TOCRCIE | UHCI_INTR_RIE | - UHCI_INTR_IOCE | UHCI_INTR_SPIE); /* enable interrupts */ - - return (uhci_run(sc, 1)); /* and here we go... */ -} - -#ifdef USB_DEBUG -static void -uhci_dumpregs(sc) - uhci_softc_t *sc; -{ - printf("%s; regs: cmd=%04x, sts=%04x, intr=%04x, frnum=%04x, " - "flbase=%08x, sof=%04x, portsc1=%04x, portsc2=%04x\n", - USBDEVNAME(sc->sc_bus.bdev), - UREAD2(sc, UHCI_CMD), - UREAD2(sc, UHCI_STS), - UREAD2(sc, UHCI_INTR), - UREAD2(sc, UHCI_FRNUM), - UREAD2(sc, UHCI_FLBASEADDR), - UREAD2(sc, UHCI_SOF), - UREAD2(sc, UHCI_PORTSC1), - UREAD2(sc, UHCI_PORTSC2)); -} - -int uhci_longtd = 1; - -void -uhci_dump_td(p) - uhci_soft_td_t *p; -{ - printf("TD(%p) at %08lx = 0x%08lx 0x%08lx 0x%08lx 0x%08lx\n", - p, (long)p->physaddr, - (long)p->td->td_link, - (long)p->td->td_status, - (long)p->td->td_token, - (long)p->td->td_buffer); - if (uhci_longtd) - printf(" %b %b,errcnt=%d,actlen=%d pid=%02x,addr=%d,endpt=%d," - "D=%d,maxlen=%d\n", - (int)p->td->td_link, - "\20\1T\2Q\3VF", - (int)p->td->td_status, - "\20\22BITSTUFF\23CRCTO\24NAK\25BABBLE\26DBUFFER\27" - "STALLED\30ACTIVE\31IOC\32ISO\33LS\36SPD", - UHCI_TD_GET_ERRCNT(p->td->td_status), - UHCI_TD_GET_ACTLEN(p->td->td_status), - UHCI_TD_GET_PID(p->td->td_token), - UHCI_TD_GET_DEVADDR(p->td->td_token), - UHCI_TD_GET_ENDPT(p->td->td_token), - UHCI_TD_GET_DT(p->td->td_token), - UHCI_TD_GET_MAXLEN(p->td->td_token)); -} - -void -uhci_dump_qh(p) - uhci_soft_qh_t *p; -{ - printf("QH(%p) at %08x: hlink=%08x elink=%08x\n", p, (int)p->physaddr, - p->qh->qh_hlink, p->qh->qh_elink); -} - - -#if 0 -void -uhci_dump() -{ - uhci_softc_t *sc = uhci; - - uhci_dumpregs(sc); - printf("intrs=%d\n", sc->sc_intrs); - printf("framelist[i].link = %08x\n", sc->sc_framelist[0].link); - uhci_dump_qh(sc->sc_ctl_start->qh->hlink); -} -#endif - -void -uhci_dump_tds(std) - uhci_soft_td_t *std; -{ - uhci_soft_td_t *p; - - for(p = std; p; p = p->td->link.std) - uhci_dump_td(p); -} -#endif - -/* - * This routine is executed periodically and simulates interrupts - * from the root controller interrupt pipe for port status change. - */ -void -uhci_timo(addr) - void *addr; -{ - usbd_request_handle reqh = addr; - usbd_pipe_handle pipe = reqh->pipe; - uhci_softc_t *sc = (uhci_softc_t *)pipe->device->bus; - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - int s; - u_char *p; - - DPRINTFN(15, ("uhci_timo\n")); - - p = KERNADDR(&upipe->u.intr.datadma); - p[0] = 0; - if (UREAD2(sc, UHCI_PORTSC1) & (UHCI_PORTSC_CSC|UHCI_PORTSC_OCIC)) - p[0] |= 1<<1; - if (UREAD2(sc, UHCI_PORTSC2) & (UHCI_PORTSC_CSC|UHCI_PORTSC_OCIC)) - p[0] |= 1<<2; - s = splusb(); - if (p[0] != 0) { - reqh->actlen = 1; - reqh->status = USBD_NORMAL_COMPLETION; - reqh->xfercb(reqh); - } - if (reqh->pipe->intrreqh == reqh) { - usb_timeout(uhci_timo, reqh, sc->sc_ival, reqh->timo_handle); - } else { - usb_freemem(sc->sc_dmatag, &upipe->u.intr.datadma); - usb_start_next(reqh->pipe); - } - splx(s); -} - - -void -uhci_lock_frames(sc) - uhci_softc_t *sc; -{ - int s = splusb(); - while (sc->sc_vflock) { - sc->sc_vflock |= UHCI_WANT_LOCK; - tsleep(&sc->sc_vflock, PRIBIO, "uhcqhl", 0); - } - sc->sc_vflock = UHCI_HAS_LOCK; - splx(s); -} - -void -uhci_unlock_frames(sc) - uhci_softc_t *sc; -{ - int s = splusb(); - sc->sc_vflock &= ~UHCI_HAS_LOCK; - if (sc->sc_vflock & UHCI_WANT_LOCK) - wakeup(&sc->sc_vflock); - splx(s); -} - -/* - * Allocate an interrupt information struct. A free list is kept - * for fast allocation. - */ -uhci_intr_info_t * -uhci_alloc_intr_info(sc) - uhci_softc_t *sc; -{ - uhci_intr_info_t *ii; - - ii = LIST_FIRST(&uhci_ii_free); - if (ii) - LIST_REMOVE(ii, list); - else { - ii = malloc(sizeof(uhci_intr_info_t), M_USBDEV, M_NOWAIT); - } - ii->sc = sc; - return ii; -} - -void -uhci_free_intr_info(ii) - uhci_intr_info_t *ii; -{ - LIST_INSERT_HEAD(&uhci_ii_free, ii, list); /* and put on free list */ -} - -/* Add control QH, called at splusb(). */ -void -uhci_add_ctrl(sc, sqh) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; -{ - uhci_qh_t *eqh; - - DPRINTFN(10, ("uhci_add_ctrl: sqh=%p\n", sqh)); - eqh = sc->sc_ctl_end->qh; - sqh->qh->hlink = eqh->hlink; - sqh->qh->qh_hlink = eqh->qh_hlink; - eqh->hlink = sqh; - eqh->qh_hlink = sqh->physaddr | UHCI_PTR_Q; - sc->sc_ctl_end = sqh; -} - -/* Remove control QH, called at splusb(). */ -void -uhci_remove_ctrl(sc, sqh) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; -{ - uhci_soft_qh_t *pqh; - - DPRINTFN(10, ("uhci_remove_ctrl: sqh=%p\n", sqh)); - for (pqh = sc->sc_ctl_start; pqh->qh->hlink != sqh; pqh=pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) - if (pqh->qh->qh_hlink & UHCI_PTR_T) { - printf("uhci_remove_ctrl: QH not found\n"); - return; - } -#else - ; -#endif - pqh->qh->hlink = sqh->qh->hlink; - pqh->qh->qh_hlink = sqh->qh->qh_hlink; - if (sc->sc_ctl_end == sqh) - sc->sc_ctl_end = pqh; -} - -/* Add bulk QH, called at splusb(). */ -void -uhci_add_bulk(sc, sqh) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; -{ - uhci_qh_t *eqh; - - DPRINTFN(10, ("uhci_add_bulk: sqh=%p\n", sqh)); - eqh = sc->sc_bulk_end->qh; - sqh->qh->hlink = eqh->hlink; - sqh->qh->qh_hlink = eqh->qh_hlink; - eqh->hlink = sqh; - eqh->qh_hlink = sqh->physaddr | UHCI_PTR_Q; - sc->sc_bulk_end = sqh; -} - -/* Remove bulk QH, called at splusb(). */ -void -uhci_remove_bulk(sc, sqh) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; -{ - uhci_soft_qh_t *pqh; - - DPRINTFN(10, ("uhci_remove_bulk: sqh=%p\n", sqh)); - for (pqh = sc->sc_bulk_start; - pqh->qh->hlink != sqh; - pqh = pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) - if (pqh->qh->qh_hlink & UHCI_PTR_T) { - printf("uhci_remove_bulk: QH not found\n"); - return; - } -#else - ; -#endif - pqh->qh->hlink = sqh->qh->hlink; - pqh->qh->qh_hlink = sqh->qh->qh_hlink; - if (sc->sc_bulk_end == sqh) - sc->sc_bulk_end = pqh; -} - -int -uhci_intr(p) - void *p; -{ - uhci_softc_t *sc = p; - int status, ret; - uhci_intr_info_t *ii; - - sc->sc_intrs++; -#if defined(USB_DEBUG) - if (uhcidebug > 9) { - printf("uhci_intr %p\n", sc); - uhci_dumpregs(sc); - } -#endif - status = UREAD2(sc, UHCI_STS); - ret = 0; - if (status & UHCI_STS_USBINT) { - UWRITE2(sc, UHCI_STS, UHCI_STS_USBINT); /* acknowledge */ - ret = 1; - } - if (status & UHCI_STS_USBEI) { - UWRITE2(sc, UHCI_STS, UHCI_STS_USBEI); /* acknowledge */ - ret = 1; - } - if (status & UHCI_STS_RD) { - UWRITE2(sc, UHCI_STS, UHCI_STS_RD); /* acknowledge */ - printf("%s: resume detect\n", USBDEVNAME(sc->sc_bus.bdev)); - ret = 1; - } - if (status & UHCI_STS_HSE) { - UWRITE2(sc, UHCI_STS, UHCI_STS_HSE); /* acknowledge */ - printf("%s: Host System Error\n", USBDEVNAME(sc->sc_bus.bdev)); - ret = 1; - } - if (status & UHCI_STS_HCPE) { - UWRITE2(sc, UHCI_STS, UHCI_STS_HCPE); /* acknowledge */ - printf("%s: Host System Error\n", USBDEVNAME(sc->sc_bus.bdev)); - ret = 1; - } - if (status & UHCI_STS_HCH) - printf("%s: controller halted\n", USBDEVNAME(sc->sc_bus.bdev)); - if (!ret) - return 0; - - /* - * Interrupts on UHCI really suck. When the host controller - * interrupts because a transfer is completed there is no - * way of knowing which transfer it was. You can scan down - * the TDs and QHs of the previous frame to limit the search, - * but that assumes that the interrupt was not delayed by more - * than 1 ms, which may not always be true (e.g. after debug - * output on a slow console). - * We scan all interrupt descriptors to see if any have - * completed. - */ - for (ii = LIST_FIRST(&sc->sc_intrhead); ii; ii = LIST_NEXT(ii, list)) - uhci_check_intr(sc, ii); - - DPRINTFN(10, ("uhci_intr: exit\n")); - return 1; -} - -/* Check for an interrupt. */ -void -uhci_check_intr(sc, ii) - uhci_softc_t *sc; - uhci_intr_info_t *ii; -{ - struct uhci_pipe *upipe; - uhci_soft_td_t *std, *lstd; - u_int32_t status; - - DPRINTFN(15, ("uhci_check_intr: ii=%p\n", ii)); -#ifdef DIAGNOSTIC - if (!ii) { - printf("uhci_check_intr: no ii? %p\n", ii); - return; - } -#endif - if (!ii->stdstart) - return; - lstd = ii->stdend; -#ifdef DIAGNOSTIC - if (!lstd) { - printf("uhci_check_intr: std==0\n"); - return; - } -#endif - /* If the last TD is still active the whole transfer probably is. */ - if (lstd->td->td_status & UHCI_TD_ACTIVE) { - DPRINTFN(15, ("uhci_check_intr: active ii=%p\n", ii)); - for (std = ii->stdstart; std != lstd; std = std->td->link.std){ - status = std->td->td_status; - if ((status & UHCI_TD_STALLED) || - (status & (UHCI_TD_SPD | UHCI_TD_ACTIVE)) == - UHCI_TD_SPD) - goto done; - } - DPRINTFN(15, ("uhci_check_intr: ii=%p std=%p still active\n", - ii, ii->stdstart)); - return; - } - done: - upipe = (struct uhci_pipe *)ii->reqh->pipe; - upipe->pipe.endpoint->toggle = upipe->newtoggle; - uhci_ii_done(ii, 0); - usb_untimeout(uhci_timeout, ii, ii->timeout_handle); -} - -void -uhci_ii_done(ii, timo) - uhci_intr_info_t *ii; - int timo; -{ - usbd_request_handle reqh = ii->reqh; - uhci_soft_td_t *std; - u_int32_t tst; - int len, status, attr; - - DPRINTFN(10, ("uhci_ii_done: ii=%p ready %d\n", ii, timo)); - -#ifdef DIAGNOSTIC - { - int s = splhigh(); - if (ii->isdone) { - printf("uhci_ii_done: is done!\n"); - splx(s); - return; - } - ii->isdone = 1; - splx(s); - } -#endif - - /* The transfer is done, compute length and status. */ - /* XXX Should stop at first inactive to get toggle right. */ - /* XXX Is this correct for control xfers? */ - for (len = status = 0, std = ii->stdstart; - std != 0; - std = std->td->link.std) { - tst = std->td->td_status; - status |= tst; -#ifdef USB_DEBUG - if ((tst & UHCI_TD_ERROR) && uhcidebug) { - printf("uhci_ii_done: intr error TD:\n"); - uhci_dump_td(std); - } -#endif - if (UHCI_TD_GET_PID(std->td->td_token) != UHCI_TD_PID_SETUP) - len += UHCI_TD_GET_ACTLEN(tst); - } - status &= UHCI_TD_ERROR; - DPRINTFN(10, ("uhci_check_intr: len=%d, status=0x%x\n", len, status)); - if (status != 0) { - DPRINTFN(-1+(status==UHCI_TD_STALLED), - ("uhci_ii_done: error, addr=%d, endpt=0x%02x, " - "status 0x%b\n", - reqh->pipe->device->address, - reqh->pipe->endpoint->edesc->bEndpointAddress, - (int)status, - "\20\22BITSTUFF\23CRCTO\24NAK\25BABBLE\26DBUFFER\27" - "STALLED\30ACTIVE")); - if (status == UHCI_TD_STALLED) - reqh->status = USBD_STALLED; - else - reqh->status = USBD_IOERROR; /* more info XXX */ - reqh->actlen = 0; - } else { - reqh->status = USBD_NORMAL_COMPLETION; - reqh->actlen = len; - } - if (timo) { - /* We got a timeout. Make sure transaction is not active. */ - reqh->status = USBD_TIMEOUT; - for (std = ii->stdstart; std != 0; std = std->td->link.std) - std->td->td_status &= ~UHCI_TD_ACTIVE; - /* XXX should we wait 1 ms */ - } - DPRINTFN(5, ("uhci_ii_done: calling handler ii=%p\n", ii)); - - attr = reqh->pipe->endpoint->edesc->bmAttributes; - switch (attr & UE_XFERTYPE) { - case UE_CONTROL: - uhci_ctrl_done(ii); - usb_start_next(reqh->pipe); - break; - case UE_ISOCHRONOUS: - uhci_isoc_done(ii); - usb_start_next(reqh->pipe); - break; - case UE_BULK: - uhci_bulk_done(ii); - usb_start_next(reqh->pipe); - break; - case UE_INTERRUPT: - uhci_intr_done(ii); - break; - } - - /* And finally execute callback. */ - reqh->xfercb(reqh); -} - -/* - * Called when a request does not complete. - */ -void -uhci_timeout(addr) - void *addr; -{ - uhci_intr_info_t *ii = addr; - int s; - - DPRINTF(("uhci_timeout: ii=%p\n", ii)); - s = splusb(); - uhci_ii_done(ii, 1); - splx(s); -} - -/* - * Wait here until controller claims to have an interrupt. - * Then call uhci_intr and return. Use timeout to avoid waiting - * too long. - * Only used during boot when interrupts are not enabled yet. - */ -void -uhci_waitintr(sc, reqh) - uhci_softc_t *sc; - usbd_request_handle reqh; -{ - int timo = reqh->timeout; - int usecs; - uhci_intr_info_t *ii; - - DPRINTFN(10,("uhci_waitintr: timeout = %ds\n", timo)); - - reqh->status = USBD_IN_PROGRESS; - for (usecs = timo * 1000000 / hz; usecs > 0; usecs -= 1000) { - usb_delay_ms(&sc->sc_bus, 1); - DPRINTFN(10,("uhci_waitintr: 0x%04x\n", UREAD2(sc, UHCI_STS))); - if (UREAD2(sc, UHCI_STS) & UHCI_STS_USBINT) { - uhci_intr(sc); - if (reqh->status != USBD_IN_PROGRESS) - return; - } - } - - /* Timeout */ - DPRINTF(("uhci_waitintr: timeout\n")); - for (ii = LIST_FIRST(&sc->sc_intrhead); - ii && ii->reqh != reqh; - ii = LIST_NEXT(ii, list)) - ; - if (ii) - uhci_ii_done(ii, 1); - else - panic("uhci_waitintr: lost intr_info\n"); -} - -void -uhci_poll(bus) - struct usbd_bus *bus; -{ - uhci_softc_t *sc = (uhci_softc_t *)bus; - - if (UREAD2(sc, UHCI_STS) & UHCI_STS_USBINT) - uhci_intr(sc); -} - -#if 0 -void -uhci_reset(p) - void *p; -{ - uhci_softc_t *sc = p; - int n; - - UHCICMD(sc, UHCI_CMD_HCRESET); - /* The reset bit goes low when the controller is done. */ - for (n = 0; n < UHCI_RESET_TIMEOUT && - (UREAD2(sc, UHCI_CMD) & UHCI_CMD_HCRESET); n++) - delay(100); - if (n >= UHCI_RESET_TIMEOUT) - printf("%s: controller did not reset\n", - USBDEVNAME(sc->sc_bus.bdev)); -} -#endif - -usbd_status -uhci_run(sc, run) - uhci_softc_t *sc; - int run; -{ - int s, n, running; - - run = run != 0; - s = splusb(); - running = !(UREAD2(sc, UHCI_STS) & UHCI_STS_HCH); - if (run == running) { - splx(s); - return (USBD_NORMAL_COMPLETION); - } - UWRITE2(sc, UHCI_CMD, run ? UHCI_CMD_RS : 0); - for(n = 0; n < 10; n++) { - running = !(UREAD2(sc, UHCI_STS) & UHCI_STS_HCH); - /* return when we've entered the state we want */ - if (run == running) { - splx(s); - return (USBD_NORMAL_COMPLETION); - } - usb_delay_ms(&sc->sc_bus, 1); - } - splx(s); - printf("%s: cannot %s\n", USBDEVNAME(sc->sc_bus.bdev), - run ? "start" : "stop"); - return (USBD_IOERROR); -} - -/* - * Memory management routines. - * uhci_alloc_std allocates TDs - * uhci_alloc_sqh allocates QHs - * These two routines do their own free list management, - * partly for speed, partly because allocating DMAable memory - * has page size granularaity so much memory would be wasted if - * only one TD/QH (32 bytes) was placed in each allocated chunk. - */ - -uhci_soft_td_t * -uhci_alloc_std(sc) - uhci_softc_t *sc; -{ - uhci_soft_td_t *std; - usbd_status r; - int i; - usb_dma_t dma; - - if (!sc->sc_freetds) { - DPRINTFN(2,("uhci_alloc_std: allocating chunk\n")); - std = malloc(sizeof(uhci_soft_td_t) * UHCI_TD_CHUNK, - M_USBDEV, M_NOWAIT); - if (!std) - return (0); - r = usb_allocmem(sc->sc_dmatag, UHCI_TD_SIZE * UHCI_TD_CHUNK, - UHCI_TD_ALIGN, &dma); - if (r != USBD_NORMAL_COMPLETION) { - free(std, M_USBDEV); - return (0); - } - for(i = 0; i < UHCI_TD_CHUNK; i++, std++) { - std->physaddr = DMAADDR(&dma) + i * UHCI_TD_SIZE; - std->td = (uhci_td_t *) - ((char *)KERNADDR(&dma) + i * UHCI_TD_SIZE); - std->td->link.std = sc->sc_freetds; - sc->sc_freetds = std; - } - } - std = sc->sc_freetds; - sc->sc_freetds = std->td->link.std; - memset(std->td, 0, UHCI_TD_SIZE); - return std; -} - -void -uhci_free_std(sc, std) - uhci_softc_t *sc; - uhci_soft_td_t *std; -{ -#ifdef DIAGNOSTIC -#define TD_IS_FREE 0x12345678 - if (std->td->td_token == TD_IS_FREE) { - printf("uhci_free_std: freeing free TD %p\n", std); - return; - } - std->td->td_token = TD_IS_FREE; -#endif - std->td->link.std = sc->sc_freetds; - sc->sc_freetds = std; -} - -uhci_soft_qh_t * -uhci_alloc_sqh(sc) - uhci_softc_t *sc; -{ - uhci_soft_qh_t *sqh; - usbd_status r; - int i, offs; - usb_dma_t dma; - - if (!sc->sc_freeqhs) { - DPRINTFN(2, ("uhci_alloc_sqh: allocating chunk\n")); - sqh = malloc(sizeof(uhci_soft_qh_t) * UHCI_QH_CHUNK, - M_USBDEV, M_NOWAIT); - if (!sqh) - return 0; - r = usb_allocmem(sc->sc_dmatag, UHCI_QH_SIZE * UHCI_QH_CHUNK, - UHCI_QH_ALIGN, &dma); - if (r != USBD_NORMAL_COMPLETION) { - free(sqh, M_USBDEV); - return 0; - } - for(i = 0; i < UHCI_QH_CHUNK; i++, sqh++) { - offs = i * UHCI_QH_SIZE; - sqh->physaddr = DMAADDR(&dma) + offs; - sqh->qh = (uhci_qh_t *) - ((char *)KERNADDR(&dma) + offs); - sqh->qh->hlink = sc->sc_freeqhs; - sc->sc_freeqhs = sqh; - } - } - sqh = sc->sc_freeqhs; - sc->sc_freeqhs = sqh->qh->hlink; - memset(sqh->qh, 0, UHCI_QH_SIZE); - return (sqh); -} - -void -uhci_free_sqh(sc, sqh) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; -{ - sqh->qh->hlink = sc->sc_freeqhs; - sc->sc_freeqhs = sqh; -} - -#if 0 -/* - * Enter a list of transfers onto a control queue. - * Called at splusb() - */ -void -uhci_enter_ctl_q(sc, sqh, ii) - uhci_softc_t *sc; - uhci_soft_qh_t *sqh; - uhci_intr_info_t *ii; -{ - DPRINTFN(5, ("uhci_enter_ctl_q: sqh=%p\n", sqh)); - -} -#endif - -void -uhci_free_std_chain(sc, std, stdend) - uhci_softc_t *sc; - uhci_soft_td_t *std; - uhci_soft_td_t *stdend; -{ - uhci_soft_td_t *p; - - for (; std != stdend; std = p) { - p = std->td->link.std; - uhci_free_std(sc, std); - } -} - -usbd_status -uhci_alloc_std_chain(upipe, sc, len, rd, spd, dma, sp, ep) - struct uhci_pipe *upipe; - uhci_softc_t *sc; - int len, rd, spd; - usb_dma_t *dma; - uhci_soft_td_t **sp, **ep; -{ - uhci_soft_td_t *p, *lastp; - uhci_physaddr_t lastlink; - int i, ntd, l, tog, maxp; - u_int32_t status; - int addr = upipe->pipe.device->address; - int endpt = upipe->pipe.endpoint->edesc->bEndpointAddress; - - DPRINTFN(15, ("uhci_alloc_std_chain: addr=%d endpt=%d len=%d ls=%d " - "spd=%d\n", addr, endpt, len, - upipe->pipe.device->lowspeed, spd)); - if (len == 0) { - *sp = *ep = 0; - DPRINTFN(-1,("uhci_alloc_std_chain: len=0\n")); - return (USBD_NORMAL_COMPLETION); - } - maxp = UGETW(upipe->pipe.endpoint->edesc->wMaxPacketSize); - if (maxp == 0) { - printf("uhci_alloc_std_chain: maxp=0\n"); - return (USBD_INVAL); - } - ntd = (len + maxp - 1) / maxp; - tog = upipe->pipe.endpoint->toggle; - if (ntd % 2 == 0) - tog ^= 1; - upipe->newtoggle = tog ^ 1; - lastp = 0; - lastlink = UHCI_PTR_T; - ntd--; - status = UHCI_TD_SET_ERRCNT(2) | UHCI_TD_ACTIVE; - if (upipe->pipe.device->lowspeed) - status |= UHCI_TD_LS; - if (spd) - status |= UHCI_TD_SPD; - for (i = ntd; i >= 0; i--) { - p = uhci_alloc_std(sc); - if (!p) { - uhci_free_std_chain(sc, lastp, 0); - return (USBD_NOMEM); - } - p->td->link.std = lastp; - p->td->td_link = lastlink; - lastp = p; - lastlink = p->physaddr; - p->td->td_status = status; - if (i == ntd) { - /* last TD */ - l = len % maxp; - if (l == 0) l = maxp; - *ep = p; - } else - l = maxp; - p->td->td_token = - rd ? UHCI_TD_IN (l, endpt, addr, tog) : - UHCI_TD_OUT(l, endpt, addr, tog); - p->td->td_buffer = DMAADDR(dma) + i * maxp; - tog ^= 1; - } - *sp = lastp; - /*upipe->pipe.endpoint->toggle = tog;*/ - DPRINTFN(10, ("uhci_alloc_std_chain: oldtog=%d newtog=%d\n", - upipe->pipe.endpoint->toggle, upipe->newtoggle)); - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -uhci_device_bulk_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (uhci_device_bulk_start(reqh)); -} - -usbd_status -uhci_device_bulk_start(reqh) - usbd_request_handle reqh; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - uhci_intr_info_t *ii = upipe->iinfo; - uhci_soft_td_t *xfer, *xferend; - uhci_soft_qh_t *sqh; - usb_dma_t *dmap; - usbd_status r; - int len, isread; - int s; - - DPRINTFN(3, ("uhci_device_bulk_transfer: reqh=%p buf=%p len=%d " - "flags=%d\n", - reqh, reqh->buffer, reqh->length, reqh->flags)); - - if (reqh->isreq) - panic("uhci_device_bulk_transfer: a request\n"); - - len = reqh->length; - dmap = &upipe->u.bulk.datadma; - isread = reqh->pipe->endpoint->edesc->bEndpointAddress & UE_IN; - sqh = upipe->u.bulk.sqh; - - upipe->u.bulk.isread = isread; - upipe->u.bulk.length = len; - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto ret1; - r = uhci_alloc_std_chain(upipe, sc, len, isread, - reqh->flags & USBD_SHORT_XFER_OK, - dmap, &xfer, &xferend); - if (r != USBD_NORMAL_COMPLETION) - goto ret2; - xferend->td->td_status |= UHCI_TD_IOC; - - if (!isread && len != 0) - memcpy(KERNADDR(dmap), reqh->buffer, len); - -#ifdef USB_DEBUG - if (uhcidebug > 10) { - printf("uhci_device_bulk_transfer: xfer(1)\n"); - uhci_dump_tds(xfer); - } -#endif - - /* Set up interrupt info. */ - ii->reqh = reqh; - ii->stdstart = xfer; - ii->stdend = xferend; -#ifdef DIAGNOSTIC - ii->isdone = 0; -#endif - - sqh->qh->elink = xfer; - sqh->qh->qh_elink = xfer->physaddr; - sqh->intr_info = ii; - - s = splusb(); - uhci_add_bulk(sc, sqh); - LIST_INSERT_HEAD(&sc->sc_intrhead, ii, list); - - if (reqh->timeout && !sc->sc_bus.use_polling) { - usb_timeout(uhci_timeout, ii, - MS_TO_TICKS(reqh->timeout), ii->timeout_handle); - } - splx(s); - -#ifdef USB_DEBUG - if (uhcidebug > 10) { - printf("uhci_device_bulk_transfer: xfer(2)\n"); - uhci_dump_tds(xfer); - } -#endif - - return (USBD_IN_PROGRESS); - - ret2: - if (len != 0) - usb_freemem(sc->sc_dmatag, dmap); - ret1: - return (r); -} - -/* Abort a device bulk request. */ -void -uhci_device_bulk_abort(reqh) - usbd_request_handle reqh; -{ - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 1);/* make sure it is done */ - /* XXX call done */ -} - -/* Close a device bulk pipe. */ -void -uhci_device_bulk_close(pipe) - usbd_pipe_handle pipe; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - - uhci_free_sqh(sc, upipe->u.bulk.sqh); - uhci_free_intr_info(upipe->iinfo); - /* XXX free other resources */ -} - -usbd_status -uhci_device_ctrl_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (uhci_device_ctrl_start(reqh)); -} - -usbd_status -uhci_device_ctrl_start(reqh) - usbd_request_handle reqh; -{ - uhci_softc_t *sc = (uhci_softc_t *)reqh->pipe->device->bus; - usbd_status r; - - if (!reqh->isreq) - panic("uhci_device_ctrl_transfer: not a request\n"); - - r = uhci_device_request(reqh); - if (r != USBD_NORMAL_COMPLETION) - return (r); - - if (sc->sc_bus.use_polling) - uhci_waitintr(sc, reqh); - return (USBD_IN_PROGRESS); -} - -usbd_status -uhci_device_intr_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (uhci_device_intr_start(reqh)); -} - -usbd_status -uhci_device_intr_start(reqh) - usbd_request_handle reqh; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - uhci_intr_info_t *ii = upipe->iinfo; - uhci_soft_td_t *xfer, *xferend; - uhci_soft_qh_t *sqh; - usb_dma_t *dmap; - usbd_status r; - int len, i; - int s; - - DPRINTFN(3, ("uhci_device_intr_transfer: reqh=%p buf=%p len=%d " - "flags=%d\n", - reqh, reqh->buffer, reqh->length, reqh->flags)); - - if (reqh->isreq) - panic("uhci_device_intr_transfer: a request\n"); - - len = reqh->length; - dmap = &upipe->u.intr.datadma; - if (len == 0) - return (USBD_INVAL); /* XXX should it be? */ - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto ret1; - r = uhci_alloc_std_chain(upipe, sc, len, 1, - reqh->flags & USBD_SHORT_XFER_OK, - dmap, &xfer, &xferend); - if (r != USBD_NORMAL_COMPLETION) - goto ret2; - xferend->td->td_status |= UHCI_TD_IOC; - -#ifdef USB_DEBUG - if (uhcidebug > 10) { - printf("uhci_device_intr_transfer: xfer(1)\n"); - uhci_dump_tds(xfer); - uhci_dump_qh(upipe->u.intr.qhs[0]); - } -#endif - - s = splusb(); - /* Set up interrupt info. */ - ii->reqh = reqh; - ii->stdstart = xfer; - ii->stdend = xferend; -#ifdef DIAGNOSTIC - ii->isdone = 0; -#endif - - DPRINTFN(10,("uhci_device_intr_transfer: qhs[0]=%p\n", - upipe->u.intr.qhs[0])); - for (i = 0; i < upipe->u.intr.npoll; i++) { - sqh = upipe->u.intr.qhs[i]; - sqh->qh->elink = xfer; - sqh->qh->qh_elink = xfer->physaddr; - } - splx(s); - -#ifdef USB_DEBUG - if (uhcidebug > 10) { - printf("uhci_device_intr_transfer: xfer(2)\n"); - uhci_dump_tds(xfer); - uhci_dump_qh(upipe->u.intr.qhs[0]); - } -#endif - - return (USBD_IN_PROGRESS); - - ret2: - if (len != 0) - usb_freemem(sc->sc_dmatag, dmap); - ret1: - return (r); -} - -/* Abort a device control request. */ -void -uhci_device_ctrl_abort(reqh) - usbd_request_handle reqh; -{ - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 1); /* make sure it is done */ - /* XXX call done */ -} - -/* Close a device control pipe. */ -void -uhci_device_ctrl_close(pipe) - usbd_pipe_handle pipe; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - - uhci_free_intr_info(upipe->iinfo); - /* XXX free other resources */ -} - -/* Abort a device interrupt request. */ -void -uhci_device_intr_abort(reqh) - usbd_request_handle reqh; -{ - struct uhci_pipe *upipe; - - DPRINTFN(1, ("uhci_device_intr_abort: reqh=%p\n", reqh)); - /* XXX inactivate */ - usb_delay_ms(reqh->pipe->device->bus, 2); /* make sure it is done */ - if (reqh->pipe->intrreqh == reqh) { - DPRINTF(("uhci_device_intr_abort: remove\n")); - reqh->pipe->intrreqh = 0; - upipe = (struct uhci_pipe *)reqh->pipe; - uhci_intr_done(upipe->u.intr.qhs[0]->intr_info); - } -} - -/* Close a device interrupt pipe. */ -void -uhci_device_intr_close(pipe) - usbd_pipe_handle pipe; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - uhci_softc_t *sc = (uhci_softc_t *)pipe->device->bus; - int i, s, npoll; - - upipe->iinfo->stdstart = 0; /* inactive */ - - /* Unlink descriptors from controller data structures. */ - npoll = upipe->u.intr.npoll; - uhci_lock_frames(sc); - for (i = 0; i < npoll; i++) - uhci_remove_intr(sc, upipe->u.intr.qhs[i]->pos, - upipe->u.intr.qhs[i]); - uhci_unlock_frames(sc); - - /* - * We now have to wait for any activity on the physical - * descriptors to stop. - */ - usb_delay_ms(&sc->sc_bus, 2); - - for(i = 0; i < npoll; i++) - uhci_free_sqh(sc, upipe->u.intr.qhs[i]); - free(upipe->u.intr.qhs, M_USB); - - s = splusb(); - LIST_REMOVE(upipe->iinfo, list); /* remove from active list */ - splx(s); - uhci_free_intr_info(upipe->iinfo); - - /* XXX free other resources */ -} - -usbd_status -uhci_device_request(reqh) - usbd_request_handle reqh; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - usb_device_request_t *req = &reqh->request; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - int addr = dev->address; - int endpt = upipe->pipe.endpoint->edesc->bEndpointAddress; - uhci_intr_info_t *ii = upipe->iinfo; - uhci_soft_td_t *setup, *xfer, *stat, *next, *xferend; - uhci_soft_qh_t *sqh; - usb_dma_t *dmap; - int len; - u_int32_t ls; - usbd_status r; - int isread; - int s; - - DPRINTFN(3,("uhci_device_control type=0x%02x, request=0x%02x, " - "wValue=0x%04x, wIndex=0x%04x len=%d, addr=%d, endpt=%d\n", - req->bmRequestType, req->bRequest, UGETW(req->wValue), - UGETW(req->wIndex), UGETW(req->wLength), - addr, endpt)); - - ls = dev->lowspeed ? UHCI_TD_LS : 0; - isread = req->bmRequestType & UT_READ; - len = UGETW(req->wLength); - - setup = upipe->u.ctl.setup; - stat = upipe->u.ctl.stat; - sqh = upipe->u.ctl.sqh; - dmap = &upipe->u.ctl.datadma; - - /* Set up data transaction */ - if (len != 0) { - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - goto ret1; - upipe->pipe.endpoint->toggle = 1; - r = uhci_alloc_std_chain(upipe, sc, len, isread, - reqh->flags & USBD_SHORT_XFER_OK, - dmap, &xfer, &xferend); - if (r != USBD_NORMAL_COMPLETION) - goto ret2; - next = xfer; - xferend->td->link.std = stat; - xferend->td->td_link = stat->physaddr; - } else { - next = stat; - } - upipe->u.ctl.length = len; - - memcpy(KERNADDR(&upipe->u.ctl.reqdma), req, sizeof *req); - if (!isread && len != 0) - memcpy(KERNADDR(dmap), reqh->buffer, len); - - setup->td->link.std = next; - setup->td->td_link = next->physaddr; - setup->td->td_status = UHCI_TD_SET_ERRCNT(2) | ls | UHCI_TD_ACTIVE; - setup->td->td_token = UHCI_TD_SETUP(sizeof *req, endpt, addr); - setup->td->td_buffer = DMAADDR(&upipe->u.ctl.reqdma); - - stat->td->link.std = 0; - stat->td->td_link = UHCI_PTR_T; - stat->td->td_status = UHCI_TD_SET_ERRCNT(2) | ls | - UHCI_TD_ACTIVE | UHCI_TD_IOC; - stat->td->td_token = - isread ? UHCI_TD_OUT(0, endpt, addr, 1) : - UHCI_TD_IN (0, endpt, addr, 1); - stat->td->td_buffer = 0; - -#ifdef USB_DEBUG - if (uhcidebug > 20) { - printf("uhci_device_request: setup\n"); - uhci_dump_td(setup); - printf("uhci_device_request: stat\n"); - uhci_dump_td(stat); - } -#endif - - /* Set up interrupt info. */ - ii->reqh = reqh; - ii->stdstart = setup; - ii->stdend = stat; -#ifdef DIAGNOSTIC - ii->isdone = 0; -#endif - - sqh->qh->elink = setup; - sqh->qh->qh_elink = setup->physaddr; - sqh->intr_info = ii; - - s = splusb(); - uhci_add_ctrl(sc, sqh); - LIST_INSERT_HEAD(&sc->sc_intrhead, ii, list); -#ifdef USB_DEBUG - if (uhcidebug > 12) { - uhci_soft_td_t *std; - uhci_soft_qh_t *xqh; - uhci_soft_qh_t *sxqh; - int maxqh = 0; - uhci_physaddr_t link; - printf("uhci_enter_ctl_q: follow from [0]\n"); - for (std = sc->sc_vframes[0].htd, link = 0; - (link & UHCI_PTR_Q) == 0; - std = std->td->link.std) { - link = std->td->td_link; - uhci_dump_td(std); - } - for (sxqh = xqh = (uhci_soft_qh_t *)std; - xqh; - xqh = (maxqh++ == 5 || xqh->qh->hlink==sxqh || - xqh->qh->hlink==xqh ? NULL : xqh->qh->hlink)) { - uhci_dump_qh(xqh); - uhci_dump_qh(sxqh); - } - printf("Enqueued QH:\n"); - uhci_dump_qh(sqh); - uhci_dump_tds(sqh->qh->elink); - } -#endif - if (reqh->timeout && !sc->sc_bus.use_polling) { - usb_timeout(uhci_timeout, ii, - MS_TO_TICKS(reqh->timeout), ii->timeout_handle); - } - splx(s); - - return (USBD_NORMAL_COMPLETION); - - ret2: - if (len != 0) - usb_freemem(sc->sc_dmatag, dmap); - ret1: - return (r); -} - -usbd_status -uhci_device_isoc_transfer(reqh) - usbd_request_handle reqh; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; -#ifdef USB_DEBUG - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; -#endif - - DPRINTFN(1,("uhci_device_isoc_transfer: sc=%p\n", sc)); - if (upipe->u.iso.bufsize == 0) - return (USBD_INVAL); - - /* XXX copy data */ - return (USBD_XXX); -} - -usbd_status -uhci_device_isoc_start(reqh) - usbd_request_handle reqh; -{ - return (USBD_XXX); -} - -void -uhci_device_isoc_abort(reqh) - usbd_request_handle reqh; -{ - /* XXX Can't abort a single request. */ -} - -void -uhci_device_isoc_close(pipe) - usbd_pipe_handle pipe; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - struct iso *iso; - int i; - - /* - * Make sure all TDs are marked as inactive. - * Wait for completion. - * Unschedule. - * Deallocate. - */ - iso = &upipe->u.iso; - - for (i = 0; i < UHCI_VFRAMELIST_COUNT; i++) - iso->stds[i]->td->td_status &= ~UHCI_TD_ACTIVE; - usb_delay_ms(&sc->sc_bus, 2); /* wait for completion */ - - uhci_lock_frames(sc); - for (i = 0; i < UHCI_VFRAMELIST_COUNT; i++) { - uhci_soft_td_t *std, *vstd; - - std = iso->stds[i]; - for (vstd = sc->sc_vframes[i % UHCI_VFRAMELIST_COUNT].htd; - vstd && vstd->td->link.std != std; - vstd = vstd->td->link.std) - ; - if (!vstd) { - /*panic*/ - printf("uhci_device_isoc_close: %p not found\n", std); - uhci_unlock_frames(sc); - return; - } - vstd->td->link = std->td->link; - vstd->td->td_link = std->td->td_link; - uhci_free_std(sc, std); - } - uhci_unlock_frames(sc); - - for (i = 0; i < iso->nbuf; i++) - usb_freemem(sc->sc_dmatag, &iso->bufs[i]); - free(iso->stds, M_USB); - free(iso->bufs, M_USB); - - /* XXX what else? */ -} - -usbd_status -uhci_device_isoc_setbuf(pipe, bufsize, nbuf) - usbd_pipe_handle pipe; - u_int bufsize; - u_int nbuf; -{ - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - usbd_device_handle dev = upipe->pipe.device; - uhci_softc_t *sc = (uhci_softc_t *)dev->bus; - int addr = upipe->pipe.device->address; - int endpt = upipe->pipe.endpoint->edesc->bEndpointAddress; - int rd = upipe->pipe.endpoint->edesc->bEndpointAddress & UE_IN; - struct iso *iso; - int i; - usbd_status r; - - /* - * For simplicity the number of buffers must fit nicely in the frame - * list. - */ - if (UHCI_VFRAMELIST_COUNT % nbuf != 0) - return (USBD_INVAL); - - iso = &upipe->u.iso; - iso->bufsize = bufsize; - iso->nbuf = nbuf; - - /* Allocate memory for buffers. */ - iso->bufs = malloc(nbuf * sizeof(usb_dma_t), M_USB, M_WAITOK); - iso->stds = malloc(UHCI_VFRAMELIST_COUNT * sizeof (uhci_soft_td_t *), - M_USB, M_WAITOK); - - for (i = 0; i < nbuf; i++) { - r = usb_allocmem(sc->sc_dmatag, bufsize, 0, &iso->bufs[i]); - if (r != USBD_NORMAL_COMPLETION) { - nbuf = i; - goto bad1; - } - } - - /* Allocate the TDs. */ - for (i = 0; i < UHCI_VFRAMELIST_COUNT; i++) { - iso->stds[i] = uhci_alloc_std(sc); - if (iso->stds[i] == 0) - goto bad2; - } - - /* XXX check schedule */ - - /* XXX interrupts */ - - /* Insert TDs into schedule, all marked inactive. */ - uhci_lock_frames(sc); - for (i = 0; i < UHCI_VFRAMELIST_COUNT; i++) { - uhci_soft_td_t *std, *vstd; - - std = iso->stds[i]; - std->td->td_status = UHCI_TD_IOS; /* iso, inactive */ - std->td->td_token = - rd ? UHCI_TD_IN (0, endpt, addr, 0) : - UHCI_TD_OUT(0, endpt, addr, 0); - std->td->td_buffer = DMAADDR(&iso->bufs[i % nbuf]); - - vstd = sc->sc_vframes[i % UHCI_VFRAMELIST_COUNT].htd; - std->td->link = vstd->td->link; - std->td->td_link = vstd->td->td_link; - vstd->td->link.std = std; - vstd->td->td_link = std->physaddr; - } - uhci_unlock_frames(sc); - - return (USBD_NORMAL_COMPLETION); - - bad2: - while (--i >= 0) - uhci_free_std(sc, iso->stds[i]); - bad1: - for (i = 0; i < nbuf; i++) - usb_freemem(sc->sc_dmatag, &iso->bufs[i]); - free(iso->stds, M_USB); - free(iso->bufs, M_USB); - return (USBD_NOMEM); -} - -void -uhci_isoc_done(ii) - uhci_intr_info_t *ii; -{ -} - -void -uhci_intr_done(ii) - uhci_intr_info_t *ii; -{ - uhci_softc_t *sc = ii->sc; - usbd_request_handle reqh = ii->reqh; - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - usb_dma_t *dma; - uhci_soft_qh_t *sqh; - int i, npoll; - - DPRINTFN(5, ("uhci_intr_done: length=%d\n", reqh->actlen)); - - dma = &upipe->u.intr.datadma; - memcpy(reqh->buffer, KERNADDR(dma), reqh->actlen); - npoll = upipe->u.intr.npoll; - for(i = 0; i < npoll; i++) { - sqh = upipe->u.intr.qhs[i]; - sqh->qh->elink = 0; - sqh->qh->qh_elink = UHCI_PTR_T; - } - uhci_free_std_chain(sc, ii->stdstart, 0); - - /* XXX Wasteful. */ - if (reqh->pipe->intrreqh == reqh) { - uhci_soft_td_t *xfer, *xferend; - - /* This alloc cannot fail since we freed the chain above. */ - uhci_alloc_std_chain(upipe, sc, reqh->length, 1, - reqh->flags & USBD_SHORT_XFER_OK, - dma, &xfer, &xferend); - xferend->td->td_status |= UHCI_TD_IOC; - -#ifdef USB_DEBUG - if (uhcidebug > 10) { - printf("uhci_device_intr_done: xfer(1)\n"); - uhci_dump_tds(xfer); - uhci_dump_qh(upipe->u.intr.qhs[0]); - } -#endif - - ii->stdstart = xfer; - ii->stdend = xferend; -#ifdef DIAGNOSTIC - ii->isdone = 0; -#endif - for (i = 0; i < npoll; i++) { - sqh = upipe->u.intr.qhs[i]; - sqh->qh->elink = xfer; - sqh->qh->qh_elink = xfer->physaddr; - } - } else { - usb_freemem(sc->sc_dmatag, dma); - ii->stdstart = 0; /* mark as inactive */ - usb_start_next(reqh->pipe); - } -} - -/* Deallocate request data structures */ -void -uhci_ctrl_done(ii) - uhci_intr_info_t *ii; -{ - uhci_softc_t *sc = ii->sc; - usbd_request_handle reqh = ii->reqh; - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - u_int len = upipe->u.ctl.length; - usb_dma_t *dma; - uhci_td_t *htd = ii->stdstart->td; - -#ifdef DIAGNOSTIC - if (!reqh->isreq) - panic("uhci_ctrl_done: not a request\n"); -#endif - - LIST_REMOVE(ii, list); /* remove from active list */ - - uhci_remove_ctrl(sc, upipe->u.ctl.sqh); - - if (len != 0) { - dma = &upipe->u.ctl.datadma; - if (reqh->request.bmRequestType & UT_READ) - memcpy(reqh->buffer, KERNADDR(dma), len); - uhci_free_std_chain(sc, htd->link.std, ii->stdend); - usb_freemem(sc->sc_dmatag, dma); - } - DPRINTFN(5, ("uhci_ctrl_done: length=%d\n", reqh->actlen)); -} - -/* Deallocate request data structures */ -void -uhci_bulk_done(ii) - uhci_intr_info_t *ii; -{ - uhci_softc_t *sc = ii->sc; - usbd_request_handle reqh = ii->reqh; - struct uhci_pipe *upipe = (struct uhci_pipe *)reqh->pipe; - u_int len = upipe->u.bulk.length; - usb_dma_t *dma; - uhci_td_t *htd = ii->stdstart->td; - - LIST_REMOVE(ii, list); /* remove from active list */ - - uhci_remove_bulk(sc, upipe->u.bulk.sqh); - - if (len != 0) { - dma = &upipe->u.bulk.datadma; - if (upipe->u.bulk.isread && len != 0) - memcpy(reqh->buffer, KERNADDR(dma), len); - uhci_free_std_chain(sc, htd->link.std, 0); - usb_freemem(sc->sc_dmatag, dma); - } - DPRINTFN(4, ("uhci_bulk_done: length=%d\n", reqh->actlen)); - /* XXX compute new toggle */ -} - -/* Add interrupt QH, called with vflock. */ -void -uhci_add_intr(sc, n, sqh) - uhci_softc_t *sc; - int n; - uhci_soft_qh_t *sqh; -{ - struct uhci_vframe *vf = &sc->sc_vframes[n]; - uhci_qh_t *eqh; - - DPRINTFN(4, ("uhci_add_intr: n=%d sqh=%p\n", n, sqh)); - eqh = vf->eqh->qh; - sqh->qh->hlink = eqh->hlink; - sqh->qh->qh_hlink = eqh->qh_hlink; - eqh->hlink = sqh; - eqh->qh_hlink = sqh->physaddr | UHCI_PTR_Q; - vf->eqh = sqh; - vf->bandwidth++; -} - -/* Remove interrupt QH, called with vflock. */ -void -uhci_remove_intr(sc, n, sqh) - uhci_softc_t *sc; - int n; - uhci_soft_qh_t *sqh; -{ - struct uhci_vframe *vf = &sc->sc_vframes[n]; - uhci_soft_qh_t *pqh; - - DPRINTFN(4, ("uhci_remove_intr: n=%d sqh=%p\n", n, sqh)); - - for (pqh = vf->hqh; pqh->qh->hlink != sqh; pqh = pqh->qh->hlink) -#if defined(DIAGNOSTIC) || defined(USB_DEBUG) - if (pqh->qh->qh_hlink & UHCI_PTR_T) { - printf("uhci_remove_intr: QH not found\n"); - return; - } -#else - ; -#endif - pqh->qh->hlink = sqh->qh->hlink; - pqh->qh->qh_hlink = sqh->qh->qh_hlink; - if (vf->eqh == sqh) - vf->eqh = pqh; - vf->bandwidth--; -} - -usbd_status -uhci_device_setintr(sc, upipe, ival) - uhci_softc_t *sc; - struct uhci_pipe *upipe; - int ival; -{ - uhci_soft_qh_t *sqh; - int i, npoll, s; - u_int bestbw, bw, bestoffs, offs; - - DPRINTFN(2, ("uhci_setintr: pipe=%p\n", upipe)); - if (ival == 0) { - printf("uhci_setintr: 0 interval\n"); - return (USBD_INVAL); - } - - if (ival > UHCI_VFRAMELIST_COUNT) - ival = UHCI_VFRAMELIST_COUNT; - npoll = (UHCI_VFRAMELIST_COUNT + ival - 1) / ival; - DPRINTFN(2, ("uhci_setintr: ival=%d npoll=%d\n", ival, npoll)); - - upipe->u.intr.npoll = npoll; - upipe->u.intr.qhs = - malloc(npoll * sizeof(uhci_soft_qh_t *), M_USB, M_WAITOK); - - /* - * Figure out which offset in the schedule that has most - * bandwidth left over. - */ -#define MOD(i) ((i) & (UHCI_VFRAMELIST_COUNT-1)) - for (bestoffs = offs = 0, bestbw = ~0; offs < ival; offs++) { - for (bw = i = 0; i < npoll; i++) - bw += sc->sc_vframes[MOD(i * ival + offs)].bandwidth; - if (bw < bestbw) { - bestbw = bw; - bestoffs = offs; - } - } - DPRINTFN(1, ("uhci_setintr: bw=%d offs=%d\n", bestbw, bestoffs)); - - upipe->iinfo->stdstart = 0; - for(i = 0; i < npoll; i++) { - upipe->u.intr.qhs[i] = sqh = uhci_alloc_sqh(sc); - sqh->qh->elink = 0; - sqh->qh->qh_elink = UHCI_PTR_T; - sqh->pos = MOD(i * ival + bestoffs); - sqh->intr_info = upipe->iinfo; - } -#undef MOD - - s = splusb(); - LIST_INSERT_HEAD(&sc->sc_intrhead, upipe->iinfo, list); - splx(s); - - uhci_lock_frames(sc); - /* Enter QHs into the controller data structures. */ - for(i = 0; i < npoll; i++) - uhci_add_intr(sc, upipe->u.intr.qhs[i]->pos, - upipe->u.intr.qhs[i]); - uhci_unlock_frames(sc); - - DPRINTFN(5, ("uhci_setintr: returns %p\n", upipe)); - return (USBD_NORMAL_COMPLETION); -} - -/* Open a new pipe. */ -usbd_status -uhci_open(pipe) - usbd_pipe_handle pipe; -{ - uhci_softc_t *sc = (uhci_softc_t *)pipe->device->bus; - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - usb_endpoint_descriptor_t *ed = pipe->endpoint->edesc; - usbd_status r; - - DPRINTFN(1, ("uhci_open: pipe=%p, addr=%d, endpt=%d (%d)\n", - pipe, pipe->device->address, - ed->bEndpointAddress, sc->sc_addr)); - if (pipe->device->address == sc->sc_addr) { - switch (ed->bEndpointAddress) { - case USB_CONTROL_ENDPOINT: - pipe->methods = &uhci_root_ctrl_methods; - break; - case UE_IN | UHCI_INTR_ENDPT: - pipe->methods = &uhci_root_intr_methods; - break; - default: - return (USBD_INVAL); - } - } else { - upipe->iinfo = uhci_alloc_intr_info(sc); - if (upipe->iinfo == 0) - return (USBD_NOMEM); - switch (ed->bmAttributes & UE_XFERTYPE) { - case UE_CONTROL: - pipe->methods = &uhci_device_ctrl_methods; - upipe->u.ctl.sqh = uhci_alloc_sqh(sc); - if (upipe->u.ctl.sqh == 0) - goto bad; - upipe->u.ctl.setup = uhci_alloc_std(sc); - if (upipe->u.ctl.setup == 0) { - uhci_free_sqh(sc, upipe->u.ctl.sqh); - goto bad; - } - upipe->u.ctl.stat = uhci_alloc_std(sc); - if (upipe->u.ctl.stat == 0) { - uhci_free_sqh(sc, upipe->u.ctl.sqh); - uhci_free_std(sc, upipe->u.ctl.setup); - goto bad; - } - r = usb_allocmem(sc->sc_dmatag, - sizeof(usb_device_request_t), - 0, &upipe->u.ctl.reqdma); - if (r != USBD_NORMAL_COMPLETION) { - uhci_free_sqh(sc, upipe->u.ctl.sqh); - uhci_free_std(sc, upipe->u.ctl.setup); - uhci_free_std(sc, upipe->u.ctl.stat); - goto bad; - } - break; - case UE_INTERRUPT: - pipe->methods = &uhci_device_intr_methods; - return (uhci_device_setintr(sc, upipe, ed->bInterval)); - case UE_ISOCHRONOUS: - pipe->methods = &uhci_device_isoc_methods; - upipe->u.iso.nbuf = 0; - return (USBD_NORMAL_COMPLETION); - case UE_BULK: - pipe->methods = &uhci_device_bulk_methods; - upipe->u.bulk.sqh = uhci_alloc_sqh(sc); - if (upipe->u.bulk.sqh == 0) - goto bad; - break; - } - } - return (USBD_NORMAL_COMPLETION); - - bad: - uhci_free_intr_info(upipe->iinfo); - return (USBD_NOMEM); -} - -/* - * Data structures and routines to emulate the root hub. - */ -usb_device_descriptor_t uhci_devd = { - USB_DEVICE_DESCRIPTOR_SIZE, - UDESC_DEVICE, /* type */ - {0x00, 0x01}, /* USB version */ - UCLASS_HUB, /* class */ - USUBCLASS_HUB, /* subclass */ - 0, /* protocol */ - 64, /* max packet */ - {0},{0},{0x00,0x01}, /* device id */ - 1,2,0, /* string indicies */ - 1 /* # of configurations */ -}; - -usb_config_descriptor_t uhci_confd = { - USB_CONFIG_DESCRIPTOR_SIZE, - UDESC_CONFIG, - {USB_CONFIG_DESCRIPTOR_SIZE + - USB_INTERFACE_DESCRIPTOR_SIZE + - USB_ENDPOINT_DESCRIPTOR_SIZE}, - 1, - 1, - 0, - UC_SELF_POWERED, - 0 /* max power */ -}; - -usb_interface_descriptor_t uhci_ifcd = { - USB_INTERFACE_DESCRIPTOR_SIZE, - UDESC_INTERFACE, - 0, - 0, - 1, - UCLASS_HUB, - USUBCLASS_HUB, - 0, - 0 -}; - -usb_endpoint_descriptor_t uhci_endpd = { - USB_ENDPOINT_DESCRIPTOR_SIZE, - UDESC_ENDPOINT, - UE_IN | UHCI_INTR_ENDPT, - UE_INTERRUPT, - {8}, - 255 -}; - -usb_hub_descriptor_t uhci_hubd_piix = { - USB_HUB_DESCRIPTOR_SIZE, - UDESC_HUB, - 2, - { UHD_PWR_NO_SWITCH | UHD_OC_INDIVIDUAL, 0 }, - 50, /* power on to power good */ - 0, - { 0x00 }, /* both ports are removable */ -}; - -int -uhci_str(p, l, s) - usb_string_descriptor_t *p; - int l; - char *s; -{ - int i; - - if (l == 0) - return (0); - p->bLength = 2 * strlen(s) + 2; - if (l == 1) - return (1); - p->bDescriptorType = UDESC_STRING; - l -= 2; - for (i = 0; s[i] && l > 1; i++, l -= 2) - USETW2(p->bString[i], 0, s[i]); - return (2*i+2); -} - -/* - * Simulate a hardware hub by handling all the necessary requests. - */ -usbd_status -uhci_root_ctrl_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (uhci_root_ctrl_start(reqh)); -} - -usbd_status -uhci_root_ctrl_start(reqh) - usbd_request_handle reqh; -{ - uhci_softc_t *sc = (uhci_softc_t *)reqh->pipe->device->bus; - usb_device_request_t *req; - void *buf; - int port, x; - int len, value, index, status, change, l, totlen = 0; - usb_port_status_t ps; - usbd_status r; - - if (!reqh->isreq) - panic("uhci_root_ctrl_transfer: not a request\n"); - req = &reqh->request; - buf = reqh->buffer; - - DPRINTFN(2,("uhci_root_ctrl_control type=0x%02x request=%02x\n", - req->bmRequestType, req->bRequest)); - - len = UGETW(req->wLength); - value = UGETW(req->wValue); - index = UGETW(req->wIndex); -#define C(x,y) ((x) | ((y) << 8)) - switch(C(req->bRequest, req->bmRequestType)) { - case C(UR_CLEAR_FEATURE, UT_WRITE_DEVICE): - case C(UR_CLEAR_FEATURE, UT_WRITE_INTERFACE): - case C(UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT): - /* - * DEVICE_REMOTE_WAKEUP and ENDPOINT_HALT are no-ops - * for the integrated root hub. - */ - break; - case C(UR_GET_CONFIG, UT_READ_DEVICE): - if (len > 0) { - *(u_int8_t *)buf = sc->sc_conf; - totlen = 1; - } - break; - case C(UR_GET_DESCRIPTOR, UT_READ_DEVICE): - DPRINTFN(2,("uhci_root_ctrl_control wValue=0x%04x\n", value)); - switch(value >> 8) { - case UDESC_DEVICE: - if ((value & 0xff) != 0) { - r = USBD_IOERROR; - goto ret; - } - totlen = l = min(len, USB_DEVICE_DESCRIPTOR_SIZE); - memcpy(buf, &uhci_devd, l); - break; - case UDESC_CONFIG: - if ((value & 0xff) != 0) { - r = USBD_IOERROR; - goto ret; - } - totlen = l = min(len, USB_CONFIG_DESCRIPTOR_SIZE); - memcpy(buf, &uhci_confd, l); - buf = (char *)buf + l; - len -= l; - l = min(len, USB_INTERFACE_DESCRIPTOR_SIZE); - totlen += l; - memcpy(buf, &uhci_ifcd, l); - buf = (char *)buf + l; - len -= l; - l = min(len, USB_ENDPOINT_DESCRIPTOR_SIZE); - totlen += l; - memcpy(buf, &uhci_endpd, l); - break; - case UDESC_STRING: - if (len == 0) - break; - *(u_int8_t *)buf = 0; - totlen = 1; - switch (value & 0xff) { - case 1: /* Vendor */ - totlen = uhci_str(buf, len, sc->sc_vendor); - break; - case 2: /* Product */ - totlen = uhci_str(buf, len, "UHCI root hub"); - break; - } - break; - default: - r = USBD_IOERROR; - goto ret; - } - break; - case C(UR_GET_INTERFACE, UT_READ_INTERFACE): - if (len > 0) { - *(u_int8_t *)buf = 0; - totlen = 1; - } - break; - case C(UR_GET_STATUS, UT_READ_DEVICE): - if (len > 1) { - USETW(((usb_status_t *)buf)->wStatus,UDS_SELF_POWERED); - totlen = 2; - } - break; - case C(UR_GET_STATUS, UT_READ_INTERFACE): - case C(UR_GET_STATUS, UT_READ_ENDPOINT): - if (len > 1) { - USETW(((usb_status_t *)buf)->wStatus, 0); - totlen = 2; - } - break; - case C(UR_SET_ADDRESS, UT_WRITE_DEVICE): - if (value >= USB_MAX_DEVICES) { - r = USBD_IOERROR; - goto ret; - } - sc->sc_addr = value; - break; - case C(UR_SET_CONFIG, UT_WRITE_DEVICE): - if (value != 0 && value != 1) { - r = USBD_IOERROR; - goto ret; - } - sc->sc_conf = value; - break; - case C(UR_SET_DESCRIPTOR, UT_WRITE_DEVICE): - break; - case C(UR_SET_FEATURE, UT_WRITE_DEVICE): - case C(UR_SET_FEATURE, UT_WRITE_INTERFACE): - case C(UR_SET_FEATURE, UT_WRITE_ENDPOINT): - r = USBD_IOERROR; - goto ret; - case C(UR_SET_INTERFACE, UT_WRITE_INTERFACE): - break; - case C(UR_SYNCH_FRAME, UT_WRITE_ENDPOINT): - break; - /* Hub requests */ - case C(UR_CLEAR_FEATURE, UT_WRITE_CLASS_DEVICE): - break; - case C(UR_CLEAR_FEATURE, UT_WRITE_CLASS_OTHER): - DPRINTFN(3, ("uhci_root_ctrl_control: UR_CLEAR_PORT_FEATURE " - "port=%d feature=%d\n", - index, value)); - if (index == 1) - port = UHCI_PORTSC1; - else if (index == 2) - port = UHCI_PORTSC2; - else { - r = USBD_IOERROR; - goto ret; - } - switch(value) { - case UHF_PORT_ENABLE: - x = UREAD2(sc, port); - UWRITE2(sc, port, x & ~UHCI_PORTSC_PE); - break; - case UHF_PORT_SUSPEND: - x = UREAD2(sc, port); - UWRITE2(sc, port, x & ~UHCI_PORTSC_SUSP); - break; - case UHF_PORT_RESET: - x = UREAD2(sc, port); - UWRITE2(sc, port, x & ~UHCI_PORTSC_PR); - break; - case UHF_C_PORT_CONNECTION: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_CSC); - break; - case UHF_C_PORT_ENABLE: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_POEDC); - break; - case UHF_C_PORT_OVER_CURRENT: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_OCIC); - break; - case UHF_C_PORT_RESET: - sc->sc_isreset = 0; - r = USBD_NORMAL_COMPLETION; - goto ret; - case UHF_PORT_CONNECTION: - case UHF_PORT_OVER_CURRENT: - case UHF_PORT_POWER: - case UHF_PORT_LOW_SPEED: - case UHF_C_PORT_SUSPEND: - default: - r = USBD_IOERROR; - goto ret; - } - break; - case C(UR_GET_BUS_STATE, UT_READ_CLASS_OTHER): - if (index == 1) - port = UHCI_PORTSC1; - else if (index == 2) - port = UHCI_PORTSC2; - else { - r = USBD_IOERROR; - goto ret; - } - if (len > 0) { - *(u_int8_t *)buf = - (UREAD2(sc, port) & UHCI_PORTSC_LS) >> - UHCI_PORTSC_LS_SHIFT; - totlen = 1; - } - break; - case C(UR_GET_DESCRIPTOR, UT_READ_CLASS_DEVICE): - if (value != 0) { - r = USBD_IOERROR; - goto ret; - } - l = min(len, USB_HUB_DESCRIPTOR_SIZE); - totlen = l; - memcpy(buf, &uhci_hubd_piix, l); - break; - case C(UR_GET_STATUS, UT_READ_CLASS_DEVICE): - if (len != 4) { - r = USBD_IOERROR; - goto ret; - } - memset(buf, 0, len); - totlen = len; - break; - case C(UR_GET_STATUS, UT_READ_CLASS_OTHER): - if (index == 1) - port = UHCI_PORTSC1; - else if (index == 2) - port = UHCI_PORTSC2; - else { - r = USBD_IOERROR; - goto ret; - } - if (len != 4) { - r = USBD_IOERROR; - goto ret; - } - x = UREAD2(sc, port); - status = change = 0; - if (x & UHCI_PORTSC_CCS ) - status |= UPS_CURRENT_CONNECT_STATUS; - if (x & UHCI_PORTSC_CSC ) - change |= UPS_C_CONNECT_STATUS; - if (x & UHCI_PORTSC_PE ) - status |= UPS_PORT_ENABLED; - if (x & UHCI_PORTSC_POEDC) - change |= UPS_C_PORT_ENABLED; - if (x & UHCI_PORTSC_OCI ) - status |= UPS_OVERCURRENT_INDICATOR; - if (x & UHCI_PORTSC_OCIC ) - change |= UPS_C_OVERCURRENT_INDICATOR; - if (x & UHCI_PORTSC_SUSP ) - status |= UPS_SUSPEND; - if (x & UHCI_PORTSC_LSDA ) - status |= UPS_LOW_SPEED; - status |= UPS_PORT_POWER; - if (sc->sc_isreset) - change |= UPS_C_PORT_RESET; - USETW(ps.wPortStatus, status); - USETW(ps.wPortChange, change); - l = min(len, sizeof ps); - memcpy(buf, &ps, l); - totlen = l; - break; - case C(UR_SET_DESCRIPTOR, UT_WRITE_CLASS_DEVICE): - r = USBD_IOERROR; - goto ret; - case C(UR_SET_FEATURE, UT_WRITE_CLASS_DEVICE): - break; - case C(UR_SET_FEATURE, UT_WRITE_CLASS_OTHER): - if (index == 1) - port = UHCI_PORTSC1; - else if (index == 2) - port = UHCI_PORTSC2; - else { - r = USBD_IOERROR; - goto ret; - } - switch(value) { - case UHF_PORT_ENABLE: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_PE); - break; - case UHF_PORT_SUSPEND: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_SUSP); - break; - case UHF_PORT_RESET: - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_PR); - usb_delay_ms(&sc->sc_bus, 10); - UWRITE2(sc, port, x & ~UHCI_PORTSC_PR); - delay(100); - x = UREAD2(sc, port); - UWRITE2(sc, port, x | UHCI_PORTSC_PE); - delay(100); - DPRINTFN(3,("uhci port %d reset, status = 0x%04x\n", - index, UREAD2(sc, port))); - sc->sc_isreset = 1; - break; - case UHF_C_PORT_CONNECTION: - case UHF_C_PORT_ENABLE: - case UHF_C_PORT_OVER_CURRENT: - case UHF_PORT_CONNECTION: - case UHF_PORT_OVER_CURRENT: - case UHF_PORT_POWER: - case UHF_PORT_LOW_SPEED: - case UHF_C_PORT_SUSPEND: - case UHF_C_PORT_RESET: - default: - r = USBD_IOERROR; - goto ret; - } - break; - default: - r = USBD_IOERROR; - goto ret; - } - reqh->actlen = totlen; - r = USBD_NORMAL_COMPLETION; - ret: - reqh->status = r; - reqh->xfercb(reqh); - usb_start_next(reqh->pipe); - return (USBD_IN_PROGRESS); -} - -/* Abort a root control request. */ -void -uhci_root_ctrl_abort(reqh) - usbd_request_handle reqh; -{ - /* Nothing to do, all transfers are syncronous. */ -} - -/* Close the root pipe. */ -void -uhci_root_ctrl_close(pipe) - usbd_pipe_handle pipe; -{ - usb_untimeout(uhci_timo, pipe->intrreqh, pipe->intrreqh->timo_handle); - DPRINTF(("uhci_root_ctrl_close\n")); -} - -/* Abort a root interrupt request. */ -void -uhci_root_intr_abort(reqh) - usbd_request_handle reqh; -{ - usb_untimeout(uhci_timo, reqh, reqh->timo_handle); -} - -usbd_status -uhci_root_intr_transfer(reqh) - usbd_request_handle reqh; -{ - int s; - usbd_status r; - - s = splusb(); - r = usb_insert_transfer(reqh); - splx(s); - if (r != USBD_NORMAL_COMPLETION) - return (r); - else - return (uhci_root_intr_start(reqh)); -} - -/* Start a transfer on the root interrupt pipe */ -usbd_status -uhci_root_intr_start(reqh) - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe = reqh->pipe; - uhci_softc_t *sc = (uhci_softc_t *)pipe->device->bus; - struct uhci_pipe *upipe = (struct uhci_pipe *)pipe; - usb_dma_t *dmap; - usbd_status r; - int len; - - DPRINTFN(3, ("uhci_root_intr_transfer: reqh=%p buf=%p len=%d " - "flags=%d\n", - reqh, reqh->buffer, reqh->length, reqh->flags)); - - len = reqh->length; - dmap = &upipe->u.intr.datadma; - if (len == 0) - return (USBD_INVAL); /* XXX should it be? */ - - r = usb_allocmem(sc->sc_dmatag, len, 0, dmap); - if (r != USBD_NORMAL_COMPLETION) - return (r); - - sc->sc_ival = MS_TO_TICKS(reqh->pipe->endpoint->edesc->bInterval); - usb_timeout(uhci_timo, reqh, sc->sc_ival, reqh->timo_handle); - return (USBD_IN_PROGRESS); -} - -/* Close the root interrupt pipe. */ -void -uhci_root_intr_close(pipe) - usbd_pipe_handle pipe; -{ - usb_untimeout(uhci_timo, pipe->intrreqh, pipe->intrreqh->timo_handle); - DPRINTF(("uhci_root_intr_close\n")); -} diff --git a/sys/dev/usb/uhcireg.h b/sys/dev/usb/uhcireg.h deleted file mode 100644 index 9c8ef008b2b70..0000000000000 --- a/sys/dev/usb/uhcireg.h +++ /dev/null @@ -1,191 +0,0 @@ -/* $NetBSD: uhcireg.h,v 1.5 1998/12/27 23:40:52 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#ifndef _DEV_PCI_UHCIREG_H_ -#define _DEV_PCI_UHCIREG_H_ - -/*** PCI config registers ***/ - -#define PCI_USBREV 0x60 /* USB protocol revision */ -#define PCI_USBREV_MASK 0xff -#define PCI_USBREV_PRE_1_0 0x00 -#define PCI_USBREV_1_0 0x10 - -#define PCI_CBIO 0x20 /* configuration base IO */ - -#define PCI_INTERFACE_UHCI 0x00 - -/*** UHCI registers ***/ - -#define UHCI_CMD 0x00 -#define UHCI_CMD_RS 0x0001 -#define UHCI_CMD_HCRESET 0x0002 -#define UHCI_CMD_GRESET 0x0004 -#define UHCI_CMD_EGSM 0x0008 -#define UHCI_CMD_FGR 0x0010 -#define UHCI_CMD_SWDBG 0x0020 -#define UHCI_CMD_CF 0x0040 -#define UHCI_CMD_MAXP 0x0080 - -#define UHCI_STS 0x02 -#define UHCI_STS_USBINT 0x0001 -#define UHCI_STS_USBEI 0x0002 -#define UHCI_STS_RD 0x0004 -#define UHCI_STS_HSE 0x0008 -#define UHCI_STS_HCPE 0x0010 -#define UHCI_STS_HCH 0x0020 - -#define UHCI_INTR 0x04 -#define UHCI_INTR_TOCRCIE 0x0001 -#define UHCI_INTR_RIE 0x0002 -#define UHCI_INTR_IOCE 0x0004 -#define UHCI_INTR_SPIE 0x0008 - -#define UHCI_FRNUM 0x06 -#define UHCI_FRNUM_MASK 0x03ff - - -#define UHCI_FLBASEADDR 0x08 - -#define UHCI_SOF 0x0c -#define UHCI_SOF_MASK 0x7f - -#define UHCI_PORTSC1 0x010 -#define UHCI_PORTSC2 0x012 -#define UHCI_PORTSC_CCS 0x0001 -#define UHCI_PORTSC_CSC 0x0002 -#define UHCI_PORTSC_PE 0x0004 -#define UHCI_PORTSC_POEDC 0x0008 -#define UHCI_PORTSC_LS 0x0030 -#define UHCI_PORTSC_LS_SHIFT 4 -#define UHCI_PORTSC_RD 0x0040 -#define UHCI_PORTSC_LSDA 0x0100 -#define UHCI_PORTSC_PR 0x0200 -#define UHCI_PORTSC_OCI 0x0400 -#define UHCI_PORTSC_OCIC 0x0800 -#define UHCI_PORTSC_SUSP 0x1000 - -#define UHCI_FRAMELIST_COUNT 1024 -#define UHCI_FRAMELIST_ALIGN 4096 - -#define UHCI_TD_ALIGN 16 -#define UHCI_QH_ALIGN 16 - -typedef u_int32_t uhci_physaddr_t; -#define UHCI_PTR_T 0x00000001 -#define UHCI_PTR_Q 0x00000002 -#define UHCI_PTR_VF 0x00000004 - -typedef union { - struct uhci_soft_qh *sqh; - struct uhci_soft_td *std; -} uhci_soft_td_qh_t; - -/* - * The Queue Heads and Transfer Descriptors and accessed - * by both the CPU and the USB controller which runs - * concurrently. This means that they have to be accessed - * with great care. As long as the data structures are - * not linked into the controller's frame list they cannot - * be accessed by it and anything goes. As soon as a - * TD is accessible by the controller it "owns" the td_status - * field; it will not be written by the CPU. Similarly - * the controller "owns" the qh_elink field. - */ - -typedef struct { - uhci_physaddr_t td_link; - u_int32_t td_status; -#define UHCI_TD_GET_ACTLEN(s) (((s) + 1) & 0x3ff) -#define UHCI_TD_ZERO_ACTLEN(t) ((t) | 0x3ff) -#define UHCI_TD_BITSTUFF 0x00020000 -#define UHCI_TD_CRCTO 0x00040000 -#define UHCI_TD_NAK 0x00080000 -#define UHCI_TD_BABBLE 0x00100000 -#define UHCI_TD_DBUFFER 0x00200000 -#define UHCI_TD_STALLED 0x00400000 -#define UHCI_TD_ACTIVE 0x00800000 -#define UHCI_TD_IOC 0x01000000 -#define UHCI_TD_IOS 0x02000000 -#define UHCI_TD_LS 0x04000000 -#define UHCI_TD_GET_ERRCNT(s) (((s) >> 27) & 3) -#define UHCI_TD_SET_ERRCNT(n) ((n) << 27) -#define UHCI_TD_SPD 0x20000000 - u_int32_t td_token; -#define UHCI_TD_PID_IN 0x00000069 -#define UHCI_TD_PID_OUT 0x000000e1 -#define UHCI_TD_PID_SETUP 0x0000002d -#define UHCI_TD_GET_PID(s) ((s) & 0xff) -#define UHCI_TD_SET_DEVADDR(a) ((a) << 8) -#define UHCI_TD_GET_DEVADDR(s) (((s) >> 8) & 0x7f) -#define UHCI_TD_SET_ENDPT(e) (((e)&0xf) << 15) -#define UHCI_TD_GET_ENDPT(s) (((s) >> 15) & 0xf) -#define UHCI_TD_SET_DT(t) ((t) << 19) -#define UHCI_TD_GET_DT(s) (((s) >> 19) & 1) -#define UHCI_TD_SET_MAXLEN(l) (((l)-1) << 21) -#define UHCI_TD_GET_MAXLEN(s) ((((s) >> 21) + 1) & 0x7ff) -#define UHCI_TD_MAXLEN_MASK 0xffe00000 - u_int32_t td_buffer; - uhci_soft_td_qh_t link; /* soft version of the td_link field */ - /* padding to 32 bytes */ -} uhci_td_t; -#define UHCI_TD_SIZE 32 - -#define UHCI_TD_ERROR (UHCI_TD_BITSTUFF|UHCI_TD_CRCTO|UHCI_TD_BABBLE|UHCI_TD_DBUFFER|UHCI_TD_STALLED) - -#define UHCI_TD_SETUP(len, endp, dev) (UHCI_TD_SET_MAXLEN(len) | \ - UHCI_TD_SET_ENDPT(endp) | UHCI_TD_SET_DEVADDR(dev) | UHCI_TD_PID_SETUP) -#define UHCI_TD_OUT(len, endp, dev, dt) (UHCI_TD_SET_MAXLEN(len) | \ - UHCI_TD_SET_ENDPT(endp) | UHCI_TD_SET_DEVADDR(dev) | \ - UHCI_TD_PID_OUT | UHCI_TD_SET_DT(dt)) -#define UHCI_TD_IN(len, endp, dev, dt) (UHCI_TD_SET_MAXLEN(len) | \ - UHCI_TD_SET_ENDPT(endp) | UHCI_TD_SET_DEVADDR(dev) | UHCI_TD_PID_IN | \ - UHCI_TD_SET_DT(dt)) - -typedef struct { - uhci_physaddr_t qh_hlink; - uhci_physaddr_t qh_elink; - struct uhci_soft_qh *hlink; /* soft version of qh_hlink */ - struct uhci_soft_td *elink; /* soft version of qh_elink */ - /* padding to 32 bytes */ -} uhci_qh_t; -#define UHCI_QH_SIZE 32 - -#endif /* _DEV_PCI_UHCIREG_H_ */ diff --git a/sys/dev/usb/uhcivar.h b/sys/dev/usb/uhcivar.h deleted file mode 100644 index 7143c42fbf0d1..0000000000000 --- a/sys/dev/usb/uhcivar.h +++ /dev/null @@ -1,180 +0,0 @@ -/* $NetBSD: uhcivar.h,v 1.5 1998/12/26 12:53:02 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * To avoid having 1024 TDs for each isochronous transfer we introduce - * a virtual frame list. Every UHCI_VFRAMELIST_COUNT entries in the real - * frame list points to a non-active TD. These, in turn, which form the - * starts of the virtual frame list. This also has the advantage that it - * simplifies linking in/out TD/QH in the schedule. - * Furthermore, initially each of the inactive TDs point to an inactive - * QH that forms the start of the interrupt traffic for that slot. - * Each of these QHs point to the same QH that is the start of control - * traffic. - * - * UHCI_VFRAMELIST_COUNT should be a power of 2 and <= UHCI_FRAMELIST_COUNT. - */ -#define UHCI_VFRAMELIST_COUNT 128 - -typedef struct uhci_soft_qh uhci_soft_qh_t; -typedef struct uhci_soft_td uhci_soft_td_t; - -/* - * An interrupt info struct contains the information needed to - * execute a requested routine when the controller generates an - * interrupt. Since we cannot know which transfer generated - * the interrupt all structs are linked together so they can be - * searched at interrupt time. - */ -typedef struct uhci_intr_info { - struct uhci_softc *sc; - usbd_request_handle reqh; - uhci_soft_td_t *stdstart; - uhci_soft_td_t *stdend; - LIST_ENTRY(uhci_intr_info) list; -#if defined(__FreeBSD__) - struct callout_handle timeout_handle; -#endif /* defined(__FreeBSD__) */ -#ifdef DIAGNOSTIC - int isdone; -#endif -} uhci_intr_info_t; - -/* - * Extra information that we need for a TD. - */ -struct uhci_soft_td { - uhci_td_t *td; /* The real TD */ - uhci_physaddr_t physaddr; /* and its physical address. */ -}; -#define UHCI_TD_CHUNK 128 /*(PAGE_SIZE / UHCI_TD_SIZE)*/ - -/* - * Extra information that we need for a QH. - */ -struct uhci_soft_qh { - uhci_qh_t *qh; /* The real QH */ - uhci_physaddr_t physaddr; /* and its physical address. */ - int pos; /* Timeslot position */ - uhci_intr_info_t *intr_info; /* Who to call on completion. */ -}; -#define UHCI_QH_CHUNK 128 /*(PAGE_SIZE / UHCI_QH_SIZE)*/ - -/* Only used for buffer free list. */ -struct uhci_buffer { - struct uhci_buffer *next; -}; -#define UHCI_BUFFER_SIZE 64 -#define UHCI_BUFFER_CHUNK 64 /*(PAGE_SIZE / UHCI_BUFFER_SIZE)*/ - -/* - * Information about an entry in the virtial frame list. - */ -struct uhci_vframe { - uhci_soft_td_t *htd; /* pointer to dummy TD */ - uhci_soft_td_t *etd; /* pointer to last TD */ - uhci_soft_qh_t *hqh; /* pointer to dummy QH */ - uhci_soft_qh_t *eqh; /* pointer to last QH */ - u_int bandwidth; /* max bandwidth used by this frame */ -}; - -typedef struct uhci_softc { - struct usbd_bus sc_bus; /* base device */ -#if defined(__NetBSD__) - void *sc_ih; /* interrupt vectoring */ - bus_space_tag_t iot; - bus_space_handle_t ioh; - - bus_dma_tag_t sc_dmatag; /* DMA tag */ - /* XXX should keep track of all DMA memory */ -#elif defined(__FreeBSD__) - int sc_iobase; - int unit; -#endif /* defined(__FreeBSD__) */ - - uhci_physaddr_t *sc_pframes; - struct uhci_vframe sc_vframes[UHCI_VFRAMELIST_COUNT]; - - uhci_soft_qh_t *sc_ctl_start; /* dummy QH for control */ - uhci_soft_qh_t *sc_ctl_end; /* last control QH */ - uhci_soft_qh_t *sc_bulk_start; /* dummy QH for bulk */ - uhci_soft_qh_t *sc_bulk_end; /* last bulk transfer */ - - uhci_soft_td_t *sc_freetds; - uhci_soft_qh_t *sc_freeqhs; - struct uhci_buffer *sc_freebuffers; - - u_int8_t sc_addr; /* device address */ - u_int8_t sc_conf; /* device configuration */ - - char sc_isreset; - - int sc_intrs; - LIST_HEAD(, uhci_intr_info) sc_intrhead; - - /* Info for the root hub interrupt channel. */ - int sc_ival; - - char sc_vflock; -#define UHCI_HAS_LOCK 1 -#define UHCI_WANT_LOCK 2 - -#if defined(__NetBSD__) - usb_dma_t *sc_mallocs; -#endif - - char sc_vendor[16]; -} uhci_softc_t; - -usbd_status uhci_init __P((uhci_softc_t *)); -int uhci_intr __P((void *)); -#if 0 -void uhci_reset __P((void *)); -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (uhcidebug) printf x -#define DPRINTFN(n,x) if (uhcidebug>(n)) printf x -extern int uhcidebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - diff --git a/sys/dev/usb/uhid.c b/sys/dev/usb/uhid.c deleted file mode 100644 index 26c0e5b5b20f6..0000000000000 --- a/sys/dev/usb/uhid.c +++ /dev/null @@ -1,546 +0,0 @@ -/* $NetBSD: uhid.c,v 1.14 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/ioccom.h> -#include <sys/filio.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/hid.h> -#include <dev/usb/usb_quirks.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (uhiddebug) printf x -#define DPRINTFN(n,x) if (uhiddebug>(n)) printf x -int uhiddebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -struct uhid_softc { - bdevice sc_dev; /* base device */ - usbd_interface_handle sc_iface; /* interface */ - usbd_pipe_handle sc_intrpipe; /* interrupt pipe */ - int sc_ep_addr; - - int sc_isize; - int sc_osize; - int sc_fsize; - u_int8_t sc_iid; - u_int8_t sc_oid; - u_int8_t sc_fid; - - char *sc_ibuf; - char *sc_obuf; - - void *sc_repdesc; - int sc_repdesc_size; - - struct clist sc_q; - struct selinfo sc_rsel; - u_char sc_state; /* driver state */ -#define UHID_OPEN 0x01 /* device is open */ -#define UHID_ASLP 0x02 /* waiting for device data */ -#define UHID_NEEDCLEAR 0x04 /* needs clearing endpoint stall */ -#define UHID_IMMED 0x08 /* return read data immediately */ - int sc_disconnected; /* device is gone */ -}; - -#define UHIDUNIT(dev) (minor(dev)) -#define UHID_CHUNK 128 /* chunk size for read */ -#define UHID_BSIZE 1020 /* buffer size */ - -int uhidopen __P((dev_t, int, int, struct proc *)); -int uhidclose __P((dev_t, int, int, struct proc *p)); -int uhidread __P((dev_t, struct uio *uio, int)); -int uhidwrite __P((dev_t, struct uio *uio, int)); -int uhidioctl __P((dev_t, u_long, caddr_t, int, struct proc *)); -int uhidpoll __P((dev_t, int, struct proc *)); -void uhid_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); -void uhid_disco __P((void *)); - -USB_DECLARE_DRIVER(uhid); - -USB_MATCH(uhid) -{ - USB_MATCH_START(uhid, uaa); - usb_interface_descriptor_t *id; - - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (!id || id->bInterfaceClass != UCLASS_HID) - return (UMATCH_NONE); - return (UMATCH_IFACECLASS_GENERIC); -} - -USB_ATTACH(uhid) -{ - USB_ATTACH_START(uhid, sc, uaa); - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id; - usb_endpoint_descriptor_t *ed; - int size; - void *desc; - usbd_status r; - char devinfo[1024]; - - sc->sc_disconnected = 1; - sc->sc_iface = iface; - id = usbd_get_interface_descriptor(iface); - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - - ed = usbd_interface2endpoint_descriptor(iface, 0); - if (!ed) { - printf("%s: could not read endpoint descriptor\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - DPRINTFN(10,("uhid_attach: bLength=%d bDescriptorType=%d " - "bEndpointAddress=%d-%s bmAttributes=%d wMaxPacketSize=%d" - " bInterval=%d\n", - ed->bLength, ed->bDescriptorType, - ed->bEndpointAddress & UE_ADDR, - ed->bEndpointAddress & UE_IN ? "in" : "out", - ed->bmAttributes & UE_XFERTYPE, - UGETW(ed->wMaxPacketSize), ed->bInterval)); - - if ((ed->bEndpointAddress & UE_IN) != UE_IN || - (ed->bmAttributes & UE_XFERTYPE) != UE_INTERRUPT) { - printf("%s: unexpected endpoint\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - sc->sc_ep_addr = ed->bEndpointAddress; - sc->sc_disconnected = 0; - - r = usbd_alloc_report_desc(uaa->iface, &desc, &size, M_USB); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s: no report descriptor\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - (void)usbd_set_idle(iface, 0, 0); - - sc->sc_isize = hid_report_size(desc, size, hid_input, &sc->sc_iid); - sc->sc_osize = hid_report_size(desc, size, hid_output, &sc->sc_oid); - sc->sc_fsize = hid_report_size(desc, size, hid_feature, &sc->sc_fid); - - sc->sc_repdesc = desc; - sc->sc_repdesc_size = size; - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__FreeBSD__) -static int -uhid_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - return 0; -} -#endif - -void -uhid_disco(p) - void *p; -{ - struct uhid_softc *sc = p; - - DPRINTF(("ums_hid: sc=%p\n", sc)); - usbd_abort_pipe(sc->sc_intrpipe); - sc->sc_disconnected = 1; -} - -void -uhid_intr(reqh, addr, status) - usbd_request_handle reqh; - usbd_private_handle addr; - usbd_status status; -{ - struct uhid_softc *sc = addr; - - DPRINTFN(5, ("uhid_intr: status=%d\n", status)); - DPRINTFN(5, ("uhid_intr: data = %02x %02x %02x\n", - sc->sc_ibuf[0], sc->sc_ibuf[1], sc->sc_ibuf[2])); - - if (status == USBD_CANCELLED) - return; - - if (status != USBD_NORMAL_COMPLETION) { - DPRINTF(("uhid_intr: status=%d\n", status)); - sc->sc_state |= UHID_NEEDCLEAR; - return; - } - - (void) b_to_q(sc->sc_ibuf, sc->sc_isize, &sc->sc_q); - - if (sc->sc_state & UHID_ASLP) { - sc->sc_state &= ~UHID_ASLP; - DPRINTFN(5, ("uhid_intr: waking %p\n", sc)); - wakeup((caddr_t)sc); - } - selwakeup(&sc->sc_rsel); -} - -int -uhidopen(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - usbd_status r; - USB_GET_SC_OPEN(uhid, UHIDUNIT(dev), sc); - - if (!sc) - return (ENXIO); - - DPRINTF(("uhidopen: sc=%p, disco=%d\n", sc, sc->sc_disconnected)); - - if (sc->sc_disconnected) - return (EIO); - - if (sc->sc_state & UHID_OPEN) - return (EBUSY); - -#if defined(__NetBSD__) - if (clalloc(&sc->sc_q, UHID_BSIZE, 0) == -1) - return (ENOMEM); -#elif defined(__FreeBSD__) - clist_alloc_cblocks(&sc->sc_q, UHID_BSIZE, 0); -#endif - - sc->sc_state |= UHID_OPEN; - sc->sc_state &= ~UHID_IMMED; - - sc->sc_ibuf = malloc(sc->sc_isize, M_USB, M_WAITOK); - sc->sc_obuf = malloc(sc->sc_osize, M_USB, M_WAITOK); - - /* Set up interrupt pipe. */ - r = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ep_addr, - USBD_SHORT_XFER_OK, - &sc->sc_intrpipe, sc, sc->sc_ibuf, - sc->sc_isize, uhid_intr); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("uhidopen: usbd_open_pipe_intr failed, " - "error=%d\n",r)); - sc->sc_state &= ~UHID_OPEN; - return (EIO); - } - usbd_set_disco(sc->sc_intrpipe, uhid_disco, sc); - - return (0); -} - -int -uhidclose(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - USB_GET_SC(uhid, UHIDUNIT(dev), sc); - - if (sc->sc_disconnected) - return (EIO); - - DPRINTF(("uhidclose: sc=%p\n", sc)); - - /* Disable interrupts. */ - usbd_abort_pipe(sc->sc_intrpipe); - usbd_close_pipe(sc->sc_intrpipe); - - sc->sc_state &= ~UHID_OPEN; - -#if defined(__NetBSD__) - clfree(&sc->sc_q); -#elif defined(__FreeBSD__) - clist_free_cblocks(&sc->sc_q); -#endif - - free(sc->sc_ibuf, M_USB); - free(sc->sc_obuf, M_USB); - - return (0); -} - -int -uhidread(dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - int s; - int error = 0; - size_t length; - u_char buffer[UHID_CHUNK]; - usbd_status r; - USB_GET_SC(uhid, UHIDUNIT(dev), sc); - - if (sc->sc_disconnected) - return (EIO); - - DPRINTFN(1, ("uhidread\n")); - if (sc->sc_state & UHID_IMMED) { - DPRINTFN(1, ("uhidread immed\n")); - - r = usbd_get_report(sc->sc_iface, UHID_INPUT_REPORT, - sc->sc_iid, sc->sc_ibuf, sc->sc_isize); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - return (uiomove(buffer, sc->sc_isize, uio)); - } - - s = splusb(); - while (sc->sc_q.c_cc == 0) { - if (flag & IO_NDELAY) { - splx(s); - return EWOULDBLOCK; - } - sc->sc_state |= UHID_ASLP; - DPRINTFN(5, ("uhidread: sleep on %p\n", sc)); - error = tsleep((caddr_t)sc, PZERO | PCATCH, "uhidrea", 0); - DPRINTFN(5, ("uhidread: woke, error=%d\n", error)); - if (error) { - sc->sc_state &= ~UHID_ASLP; - splx(s); - return (error); - } - if (sc->sc_state & UHID_NEEDCLEAR) { - DPRINTFN(-1,("uhidread: clearing stall\n")); - sc->sc_state &= ~UHID_NEEDCLEAR; - usbd_clear_endpoint_stall(sc->sc_intrpipe); - } - } - splx(s); - - /* Transfer as many chunks as possible. */ - while (sc->sc_q.c_cc > 0 && uio->uio_resid > 0) { - length = min(sc->sc_q.c_cc, uio->uio_resid); - if (length > sizeof(buffer)) - length = sizeof(buffer); - - /* Remove a small chunk from the input queue. */ - (void) q_to_b(&sc->sc_q, buffer, length); - DPRINTFN(5, ("uhidread: got %d chars\n", length)); - - /* Copy the data to the user process. */ - if ((error = uiomove(buffer, length, uio)) != 0) - break; - } - - return (error); -} - -int -uhidwrite(dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - int error; - int size; - usbd_status r; - USB_GET_SC(uhid, UHIDUNIT(dev), sc); - - if (sc->sc_disconnected) - return (EIO); - - DPRINTFN(1, ("uhidwrite\n")); - - size = sc->sc_osize; - error = 0; - while (uio->uio_resid > 0) { - if (uio->uio_resid != size) - return (0); - if ((error = uiomove(sc->sc_obuf, size, uio)) != 0) - break; - if (sc->sc_oid) - r = usbd_set_report(sc->sc_iface, UHID_OUTPUT_REPORT, - sc->sc_obuf[0], - sc->sc_obuf+1, size-1); - else - r = usbd_set_report(sc->sc_iface, UHID_OUTPUT_REPORT, - 0, sc->sc_obuf, size); - if (r != USBD_NORMAL_COMPLETION) { - error = EIO; - break; - } - } - return (error); -} - -int -uhidioctl(dev, cmd, addr, flag, p) - dev_t dev; - u_long cmd; - caddr_t addr; - int flag; - struct proc *p; -{ - struct usb_ctl_report_desc *rd; - struct usb_ctl_report *re; - int size, id; - usbd_status r; - USB_GET_SC(uhid, UHIDUNIT(dev), sc); - - if (sc->sc_disconnected) - return (EIO); - - DPRINTFN(2, ("uhidioctl: cmd=%lx\n", cmd)); - switch (cmd) { - case FIONBIO: - /* All handled in the upper FS layer. */ - break; - - case USB_GET_REPORT_DESC: - rd = (struct usb_ctl_report_desc *)addr; - size = min(sc->sc_repdesc_size, sizeof rd->data); - rd->size = size; - memcpy(rd->data, sc->sc_repdesc, size); - break; - - case USB_SET_IMMED: - if (*(int *)addr) { - /* XXX should read into ibuf, but does it matter */ - r = usbd_get_report(sc->sc_iface, UHID_INPUT_REPORT, - sc->sc_iid, sc->sc_ibuf, - sc->sc_isize); - if (r != USBD_NORMAL_COMPLETION) - return (EOPNOTSUPP); - - sc->sc_state |= UHID_IMMED; - } else - sc->sc_state &= ~UHID_IMMED; - break; - - case USB_GET_REPORT: - re = (struct usb_ctl_report *)addr; - switch (re->report) { - case UHID_INPUT_REPORT: - size = sc->sc_isize; - id = sc->sc_iid; - break; - case UHID_OUTPUT_REPORT: - size = sc->sc_osize; - id = sc->sc_oid; - break; - case UHID_FEATURE_REPORT: - size = sc->sc_fsize; - id = sc->sc_fid; - break; - default: - return (EINVAL); - } - r = usbd_get_report(sc->sc_iface, re->report, id, - re->data, size); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - break; - - default: - return (EINVAL); - } - return (0); -} - -int -uhidpoll(dev, events, p) - dev_t dev; - int events; - struct proc *p; -{ - int revents = 0; - int s; - USB_GET_SC(uhid, UHIDUNIT(dev), sc); - - if (sc->sc_disconnected) - return (EIO); - - s = splusb(); - if (events & (POLLOUT | POLLWRNORM)) - revents |= events & (POLLOUT | POLLWRNORM); - if (events & (POLLIN | POLLRDNORM)) { - if (sc->sc_q.c_cc > 0) - revents |= events & (POLLIN | POLLRDNORM); - else - selrecord(p, &sc->sc_rsel); - } - - splx(s); - return (revents); -} - -#if defined(__FreeBSD__) -DRIVER_MODULE(uhid, uhub, uhid_driver, uhid_devclass, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/uhub.c b/sys/dev/usb/uhub.c deleted file mode 100644 index 40ff36317addc..0000000000000 --- a/sys/dev/usb/uhub.c +++ /dev/null @@ -1,521 +0,0 @@ -/* $NetBSD: uhub.c,v 1.14 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#endif -#include <sys/proc.h> - -#include <dev/usb/usb.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdivar.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -extern int usbdebug; -extern char *usbd_error_strs[]; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -struct uhub_softc { - bdevice sc_dev; /* base device */ - usbd_device_handle sc_hub; /* USB device */ - usbd_pipe_handle sc_ipipe; /* interrupt pipe */ - u_int8_t sc_status[1]; /* XXX more ports */ - u_char sc_running; -}; - -usbd_status uhub_init_port __P((struct usbd_port *)); -void uhub_disconnect __P((struct usbd_port *up)); -usbd_status uhub_explore __P((usbd_device_handle hub)); -void uhub_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); - -/*void uhub_disco __P((void *));*/ - -USB_DECLARE_DRIVER(uhub); - -#if defined(__FreeBSD__) -devclass_t uhubroot_devclass; - -static device_method_t uhubroot_methods[] = { - DEVMETHOD(device_probe, uhub_match), - DEVMETHOD(device_attach, uhub_attach), - /* detach is not allowed for a root hub */ - {0,0} -}; - -static driver_t uhubroot_driver = { - "uhub", - uhubroot_methods, - DRIVER_TYPE_MISC, - sizeof(struct uhub_softc) -}; -#endif - -#if defined(__NetBSD__) -struct cfattach uhub_uhub_ca = { - sizeof(struct uhub_softc), uhub_match, uhub_attach -}; -#endif - -USB_MATCH(uhub) -{ - USB_MATCH_START(uhub, uaa); - usb_device_descriptor_t *dd = usbd_get_device_descriptor(uaa->device); - - DPRINTFN(5,("uhub_match, dd=%p\n", dd)); - /* - * The subclass for hubs seems to be 0 for some and 1 for others, - * so we just ignore the subclass. - */ - if (uaa->iface == 0 && dd->bDeviceClass == UCLASS_HUB) - return (UMATCH_DEVCLASS_DEVSUBCLASS); - return (UMATCH_NONE); -} - -USB_ATTACH(uhub) -{ - USB_ATTACH_START(uhub, sc, uaa); - usbd_device_handle dev = uaa->device; - char devinfo[1024]; - usbd_status r; - struct usbd_hub *hub; - usb_device_request_t req; - usb_hub_descriptor_t hubdesc; - int p, port, nports, nremov; - usbd_interface_handle iface; - usb_endpoint_descriptor_t *ed; - - DPRINTFN(1,("uhub_attach\n")); - sc->sc_hub = dev; - usbd_devinfo(dev, 1, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s\n", USBDEVNAME(sc->sc_dev), devinfo); - - r = usbd_set_config_index(dev, 0, 1); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("%s: configuration failed, error=%d(%s)\n", - USBDEVNAME(sc->sc_dev), r, usbd_error_strs[r])); - USB_ATTACH_ERROR_RETURN; - } - - if (dev->depth > USB_HUB_MAX_DEPTH) { - printf("%s: hub depth (%d) exceeded, hub ignored\n", - USBDEVNAME(sc->sc_dev), USB_HUB_MAX_DEPTH); - USB_ATTACH_ERROR_RETURN; - } - - /* Get hub descriptor. */ - req.bmRequestType = UT_READ_CLASS_DEVICE; - req.bRequest = UR_GET_DESCRIPTOR; - USETW(req.wValue, 0); - USETW(req.wIndex, 0); - USETW(req.wLength, USB_HUB_DESCRIPTOR_SIZE); - DPRINTFN(1,("usb_init_hub: getting hub descriptor\n")); - r = usbd_do_request(dev, &req, &hubdesc); - nports = hubdesc.bNbrPorts; - if (r == USBD_NORMAL_COMPLETION && nports > 7) { - USETW(req.wLength, USB_HUB_DESCRIPTOR_SIZE + (nports+1) / 8); - r = usbd_do_request(dev, &req, &hubdesc); - } - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("%s: getting hub descriptor failed, error=%d(%s)\n", - USBDEVNAME(sc->sc_dev), r, usbd_error_strs[r])); - USB_ATTACH_ERROR_RETURN; - } - - for (nremov = 0, port = 1; port <= nports; port++) - if (!UHD_NOT_REMOV(&hubdesc, port)) - nremov++; - printf("%s: %d port%s with %d removable, %s powered\n", - USBDEVNAME(sc->sc_dev), nports, nports != 1 ? "s" : "", - nremov, dev->self_powered ? "self" : "bus"); - - - hub = malloc(sizeof(*hub) + (nports-1) * sizeof(struct usbd_port), - M_USB, M_NOWAIT); - if (hub == 0) - USB_ATTACH_ERROR_RETURN; - dev->hub = hub; - dev->hub->hubsoftc = sc; - hub->explore = uhub_explore; - hub->hubdesc = hubdesc; - - DPRINTFN(1,("usbhub_init_hub: selfpowered=%d, parent=%p, " - "parent->selfpowered=%d\n", - dev->self_powered, dev->powersrc->parent, - dev->powersrc->parent ? - dev->powersrc->parent->self_powered : 0)); - if (!dev->self_powered && dev->powersrc->parent && - !dev->powersrc->parent->self_powered) { - printf("%s: bus powered hub connected to bus powered hub, " - "ignored\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - /* Set up interrupt pipe. */ - r = usbd_device2interface_handle(dev, 0, &iface); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s: no interface handle\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - ed = usbd_interface2endpoint_descriptor(iface, 0); - if (ed == 0) { - printf("%s: no endpoint descriptor\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - if ((ed->bmAttributes & UE_XFERTYPE) != UE_INTERRUPT) { - printf("%s: bad interrupt endpoint\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - r = usbd_open_pipe_intr(iface, ed->bEndpointAddress,USBD_SHORT_XFER_OK, - &sc->sc_ipipe, sc, sc->sc_status, - sizeof(sc->sc_status), - uhub_intr); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s: cannot open interrupt pipe\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - /* Wait with power off for a while. */ - usbd_delay_ms(dev, USB_POWER_DOWN_TIME); - - for (p = 0; p < nports; p++) { - struct usbd_port *up = &hub->ports[p]; - up->device = 0; - up->parent = dev; - up->portno = p+1; - r = uhub_init_port(up); - if (r != USBD_NORMAL_COMPLETION) - printf("%s: init of port %d failed\n", - USBDEVNAME(sc->sc_dev), up->portno); - } - sc->sc_running = 1; - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__FreeBSD__) -static int -uhub_detach(device_t self) -{ - struct uhub_softc *sc = device_get_softc(self); - int nports = sc->sc_hub->hub->hubdesc.bNbrPorts; - int p; - - for (p = 0; p < nports; p++) { - struct usbd_port *up = &sc->sc_hub->hub->ports[p]; - if (up->device) - uhub_disconnect(up); - } - - free(sc->sc_hub->hub, M_USB); - - return 0; -} -#endif - -usbd_status -uhub_init_port(up) - struct usbd_port *up; -{ - int port = up->portno; - usbd_device_handle dev = up->parent; - usbd_status r; - u_int16_t pstatus; - - r = usbd_get_port_status(dev, port, &up->status); - if (r != USBD_NORMAL_COMPLETION) - return (r); - pstatus = UGETW(up->status.wPortStatus); - DPRINTF(("usbd_init_port: adding hub port=%d status=0x%04x " - "change=0x%04x\n", - port, pstatus, UGETW(up->status.wPortChange))); - if ((pstatus & UPS_PORT_POWER) == 0) { - /* Port lacks power, turn it on */ - - /* First let the device go through a good power cycle, */ - usbd_delay_ms(dev, USB_PORT_POWER_DOWN_TIME); - - /* then turn the power on. */ - r = usbd_set_port_feature(dev, port, UHF_PORT_POWER); - if (r != USBD_NORMAL_COMPLETION) - return (r); - r = usbd_get_port_status(dev, port, &up->status); - if (r != USBD_NORMAL_COMPLETION) - return (r); - DPRINTF(("usb_init_port: turn on port %d power status=0x%04x " - "change=0x%04x\n", - port, UGETW(up->status.wPortStatus), - UGETW(up->status.wPortChange))); - /* Wait for stable power. */ - usbd_delay_ms(dev, dev->hub->hubdesc.bPwrOn2PwrGood * - UHD_PWRON_FACTOR); - } - if (dev->self_powered) - /* Self powered hub, give ports maximum current. */ - up->power = USB_MAX_POWER; - else - up->power = USB_MIN_POWER; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -uhub_explore(dev) - usbd_device_handle dev; -{ - usb_hub_descriptor_t *hd = &dev->hub->hubdesc; - struct uhub_softc *sc = dev->hub->hubsoftc; - struct usbd_port *up; - usbd_status r; - int port; - int change, status; - - DPRINTFN(10, ("uhub_explore dev=%p addr=%d\n", dev, dev->address)); - - if (!sc->sc_running) - return (USBD_NOT_STARTED); - - /* Ignore hubs that are too deep. */ - if (dev->depth > USB_HUB_MAX_DEPTH) - return (USBD_TOO_DEEP); - - for(port = 1; port <= hd->bNbrPorts; port++) { - up = &dev->hub->ports[port-1]; - r = usbd_get_port_status(dev, port, &up->status); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("uhub_explore: get port status failed, " - "error=%d(%s)\n", - r, usbd_error_strs[r])); - continue; - } - status = UGETW(up->status.wPortStatus); - change = UGETW(up->status.wPortChange); - DPRINTFN(5, ("uhub_explore: port %d status 0x%04x 0x%04x\n", - port, status, change)); - if (change & UPS_C_PORT_ENABLED) { - usbd_clear_port_feature(dev, port, UHF_C_PORT_ENABLE); - if (status & UPS_PORT_ENABLED) { - printf("%s: illegal enable change, port %d\n", - USBDEVNAME(sc->sc_dev), port); - } else { - /* Port error condition. */ - if (up->restartcnt++ < USBD_RESTART_MAX) { - printf("%s: port error, restarting " - "port %d\n", - USBDEVNAME(sc->sc_dev), port); - goto disco; - } else { - printf("%s: port error, giving up " - "port %d\n", - USBDEVNAME(sc->sc_dev), port); - } - } - } - if (!(change & UPS_C_CONNECT_STATUS)) { - /* No status change, just do recursive explore. */ - if (up->device && up->device->hub) - up->device->hub->explore(up->device); - continue; - } - DPRINTF(("uhub_explore: status change hub=%d port=%d\n", - dev->address, port)); - usbd_clear_port_feature(dev, port, UHF_C_PORT_CONNECTION); - usbd_clear_port_feature(dev, port, UHF_C_PORT_ENABLE); - /* - * If there is already a device on the port the change status - * must mean that is has disconnected. Looking at the - * current connect status is not enough to figure this out - * since a new unit may have been connected before we handle - * the disconnect. - */ - disco: - if (up->device) { - /* Disconnected */ - DPRINTF(("uhub_explore: device %d disappeared " - "on port %d\n", - up->device->address, port)); - uhub_disconnect(up); - usbd_clear_port_feature(dev, port, - UHF_C_PORT_CONNECTION); - } - if (!(status & UPS_CURRENT_CONNECT_STATUS)) - continue; - - /* Connected */ - up->restartcnt = 0; - - /* Wait for maximum device power up time. */ - usbd_delay_ms(dev, USB_PORT_POWERUP_DELAY); - - /* Reset port, which implies enabling it. */ - if (usbd_reset_port(dev, port, &up->status) != - USBD_NORMAL_COMPLETION) - continue; - - /* Get device info and set its address. */ - r = usbd_new_device(&sc->sc_dev, dev->bus, - dev->depth + 1, status & UPS_LOW_SPEED, - port, up); - /* XXX retry a few times? */ - if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1,("uhub_explore: usb_new_device failed, " - "error=%d(%s)\n", r, usbd_error_strs[r])); - /* Avoid addressing problems by disabling. */ - /* usbd_reset_port(dev, port, &up->status); */ -/* XXX - * What should we do. The device may or may not be at its - * assigned address. In any case we'd like to ignore it. - * Maybe the port should be disabled until the device is - * disconnected. - */ - if (r == USBD_SET_ADDR_FAILED || 1) {/* XXX */ - /* The unit refused to accept a new - * address, and since we cannot leave - * at 0 we have to disable the port - * instead. */ - printf("%s: device problem, disabling " - "port %d\n", - USBDEVNAME(sc->sc_dev), port); - usbd_clear_port_feature(dev, port, - UHF_PORT_ENABLE); - /* Make sure we don't try to restart it. */ - up->restartcnt = USBD_RESTART_MAX; - } - } else { - if (up->device->hub) - up->device->hub->explore(up->device); - } - } - return (USBD_NORMAL_COMPLETION); -} - -void -uhub_disconnect(up) - struct usbd_port *up; -{ - usbd_device_handle dev = up->device; - usbd_pipe_handle p, n; - int i; - struct softc { bdevice sc_dev; }; /* all softc begin like this */ - - DPRINTFN(3,("uhub_disconnect: up=%p dev=%p port=%d\n", - up, dev, up->portno)); - - printf("%s: at %s port %d (addr %d) disconnected\n", - USBDEVNAME(((struct softc *)dev->softc)->sc_dev), - USBDEVNAME(((struct uhub_softc *)up->parent->softc)->sc_dev), - up->portno, dev->address); - - if (!dev->cdesc) { - /* Partially attached device, just drop it. */ - dev->bus->devices[dev->address] = 0; - up->device = 0; - return; - } - - for (i = 0; i < dev->cdesc->bNumInterface; i++) { - for (p = LIST_FIRST(&dev->ifaces[i].pipes); p; p = n) { - n = LIST_NEXT(p, next); - if (p->disco) - p->disco(p->discoarg); - usbd_abort_pipe(p); - usbd_close_pipe(p); - } - } - - /* XXX Free all data structures and disable further I/O. */ - if (dev->hub) { - struct usbd_port *rup; - int p, nports; - - DPRINTFN(3,("usb_disconnect: hub, recursing\n")); - nports = dev->hub->hubdesc.bNbrPorts; - for(p = 0; p < nports; p++) { - rup = &dev->hub->ports[p]; - if (rup->device) - uhub_disconnect(rup); - } - } - - dev->bus->devices[dev->address] = 0; - up->device = 0; - /* XXX free */ -#if defined(__FreeBSD__) - device_delete_child( - device_get_parent(((struct softc *)dev->softc)->sc_dev), - ((struct softc *)dev->softc)->sc_dev); -#endif -} - -void -uhub_intr(reqh, addr, status) - usbd_request_handle reqh; - usbd_private_handle addr; - usbd_status status; -{ - struct uhub_softc *sc = addr; - - DPRINTFN(5,("uhub_intr: sc=%p\n", sc)); - if (status != USBD_NORMAL_COMPLETION) - usbd_clear_endpoint_stall_async(sc->sc_ipipe); - else - usb_needs_explore(sc->sc_hub->bus); -} - -#if defined(__FreeBSD__) -DRIVER_MODULE(uhub, usb, uhubroot_driver, uhubroot_devclass, 0, 0); -DRIVER_MODULE(uhub, uhub, uhub_driver, uhub_devclass, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/ukbd.c b/sys/dev/usb/ukbd.c deleted file mode 100644 index 0d54e01f3ac1f..0000000000000 --- a/sys/dev/usb/ukbd.c +++ /dev/null @@ -1,680 +0,0 @@ -/* $NetBSD: ukbd.c,v 1.22 1999/01/09 12:10:36 drochner Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * Information about USB keyboard can be found in the USB HID spec. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/ioccom.h> -#include <sys/module.h> -#include <sys/bus.h> -#include <machine/clock.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> -#include <dev/usb/hid.h> - -#if defined(__NetBSD__) -#include <dev/wscons/wsconsio.h> -#include <dev/wscons/wskbdvar.h> -#include <dev/wscons/wsksymdef.h> -#include <dev/wscons/wsksymvar.h> -#include <dev/wscons/wskbdmap_mfii.h> - -#include "opt_pckbd_layout.h" -#include "opt_wsdisplay_compat.h" - -#elif defined(__FreeBSD__) -#include <machine/clock.h> -#define delay(d) DELAY(d) -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (ukbddebug) printf x -#define DPRINTFN(n,x) if (ukbddebug>(n)) printf x -int ukbddebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -#define UPROTO_BOOT_KEYBOARD 1 - -#define NKEYCODE 6 - -#define NUM_LOCK 0x01 -#define CAPS_LOCK 0x02 -#define SCROLL_LOCK 0x04 - -struct ukbd_data { - u_int8_t modifiers; -#define MOD_CONTROL_L 0x01 -#define MOD_CONTROL_R 0x10 -#define MOD_SHIFT_L 0x02 -#define MOD_SHIFT_R 0x20 -#define MOD_ALT_L 0x04 -#define MOD_ALT_R 0x40 -#define MOD_WIN_L 0x08 -#define MOD_WIN_R 0x80 - u_int8_t reserved; - u_int8_t keycode[NKEYCODE]; -}; - -#define PRESS 0 -#define RELEASE 0x100 - -#define NMOD 6 -static struct { - int mask, key; -} ukbd_mods[NMOD] = { - { MOD_CONTROL_L, 29 }, - { MOD_CONTROL_R, 58 }, - { MOD_SHIFT_L, 42 }, - { MOD_SHIFT_R, 54 }, - { MOD_ALT_L, 56 }, - { MOD_ALT_R, 184 }, -}; - -#define NN 0 /* no translation */ -/* - * Translate USB keycodes to US keyboard AT scancodes. - * Scancodes >= 128 represent EXTENDED keycodes. - */ -static u_int8_t ukbd_trtab[256] = { - 0, 0, 0, 0, 30, 48, 46, 32, /* 00 - 07 */ - 18, 33, 34, 35, 23, 36, 37, 38, /* 08 - 0F */ - 50, 49, 24, 25, 16, 19, 31, 20, /* 10 - 17 */ - 22, 47, 17, 45, 21, 44, 2, 3, /* 18 - 1F */ - 4, 5, 6, 7, 8, 9, 10, 11, /* 20 - 27 */ - 28, 1, 14, 15, 57, 12, 13, 26, /* 28 - 2F */ - 27, 43, NN, 39, 40, 41, 51, 52, /* 30 - 37 */ - 53, 58, 59, 60, 61, 62, 63, 64, /* 38 - 3F */ - 65, 66, 67, 68, 87, 88, 170, 70, /* 40 - 47 */ - 127, 210, 199, 201, 211, 207, 209, 205, /* 48 - 4F */ - 203, 208, 200, 69, 181, 55, 74, 78, /* 50 - 57 */ - 156, 79, 80, 81, 75, 76, 77, 71, /* 58 - 5F */ - 72, 73, 82, 83, NN, NN, NN, NN, /* 60 - 67 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 68 - 6F */ - NN, NN, NN, NN, NN, NN, 221, NN, /* 70 - 77 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 78 - 7F */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 80 - 87 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 88 - 8F */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 90 - 97 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* 98 - 9F */ - NN, NN, NN, NN, NN, NN, NN, NN, /* A0 - A7 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* A8 - AF */ - NN, NN, NN, NN, NN, NN, NN, NN, /* B0 - B7 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* B8 - BF */ - NN, NN, NN, NN, NN, NN, NN, NN, /* C0 - C7 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* C8 - CF */ - NN, NN, NN, NN, NN, NN, NN, NN, /* D0 - D7 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* D8 - DF */ - NN, NN, NN, NN, NN, NN, NN, NN, /* E0 - E7 */ - NN, NN, NN, 219, NN, NN, NN, 220, /* E8 - EF */ - NN, NN, NN, NN, NN, NN, NN, NN, /* F0 - F7 */ - NN, NN, NN, NN, NN, NN, NN, NN, /* F8 - FF */ -}; - -#define KEY_ERROR 0x01 - -#define MAXKEYS (NMOD+2*NKEYCODE) - -struct ukbd_softc { - bdevice sc_dev; /* base device */ - usbd_interface_handle sc_iface; /* interface */ - usbd_pipe_handle sc_intrpipe; /* interrupt pipe */ - int sc_ep_addr; - - struct ukbd_data sc_ndata; - struct ukbd_data sc_odata; - - char sc_enabled; - char sc_disconnected; /* device is gone */ - - int sc_leds; -#if defined(__NetBSD__) - struct device *sc_wskbddev; -#ifdef WSDISPLAY_COMPAT_RAWKBD -#define REP_DELAY1 400 -#define REP_DELAYN 100 - int sc_rawkbd; - int sc_nrep; - char sc_rep[MAXKEYS]; -#endif - - int sc_polling; - int sc_pollchar; -#endif -}; - -#define UKBDUNIT(dev) (minor(dev)) -#define UKBD_CHUNK 128 /* chunk size for read */ -#define UKBD_BSIZE 1020 /* buffer size */ - -void ukbd_cngetc __P((void *, u_int *, int *)); -void ukbd_cnpollc __P((void *, int)); - -#if defined(__NetBSD__) -const struct wskbd_consops ukbd_consops = { - ukbd_cngetc, - ukbd_cnpollc, -}; -#endif - -void ukbd_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); -void ukbd_disco __P((void *)); - -int ukbd_enable __P((void *, int)); -void ukbd_set_leds __P((void *, int)); -#if defined(__NetBSD__) -int ukbd_ioctl __P((void *, u_long, caddr_t, int, struct proc *)); -int ukbd_cnattach __P((void *v)); -void ukbd_rawrepeat __P((void *v)); - -const struct wskbd_accessops ukbd_accessops = { - ukbd_enable, - ukbd_set_leds, - ukbd_ioctl, -#if 0 - ukbd_cnattach, -#endif -}; - -const struct wskbd_mapdata ukbd_keymapdata = { - pckbd_keydesctab, -#ifdef PCKBD_LAYOUT - PCKBD_LAYOUT, -#else - KB_US, -#endif -}; -#endif - -USB_DECLARE_DRIVER(ukbd); - -USB_MATCH(ukbd) -{ - USB_MATCH_START(ukbd, uaa); - usb_interface_descriptor_t *id; - - /* Check that this is a keyboard that speaks the boot protocol. */ - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (!id || - id->bInterfaceClass != UCLASS_HID || - id->bInterfaceSubClass != USUBCLASS_BOOT || - id->bInterfaceProtocol != UPROTO_BOOT_KEYBOARD) - return (UMATCH_NONE); - return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO); -} - -USB_ATTACH(ukbd) -{ - USB_ATTACH_START(ukbd, sc, uaa); - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id; - usb_endpoint_descriptor_t *ed; - usbd_status r; - char devinfo[1024]; -#if defined(__NetBSD__) - struct wskbddev_attach_args a; -#endif - - sc->sc_disconnected = 1; - sc->sc_iface = iface; - id = usbd_get_interface_descriptor(iface); - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - - ed = usbd_interface2endpoint_descriptor(iface, 0); - if (!ed) { - printf("%s: could not read endpoint descriptor\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - DPRINTFN(10,("ukbd_attach: bLength=%d bDescriptorType=%d " - "bEndpointAddress=%d-%s bmAttributes=%d wMaxPacketSize=%d" - " bInterval=%d\n", - ed->bLength, ed->bDescriptorType, - ed->bEndpointAddress & UE_ADDR, - ed->bEndpointAddress & UE_IN ? "in" : "out", - ed->bmAttributes & UE_XFERTYPE, - UGETW(ed->wMaxPacketSize), ed->bInterval)); - - if ((ed->bEndpointAddress & UE_IN) != UE_IN || - (ed->bmAttributes & UE_XFERTYPE) != UE_INTERRUPT) { - printf("%s: unexpected endpoint\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - if ((usbd_get_quirks(uaa->device)->uq_flags & UQ_NO_SET_PROTO) == 0) { - r = usbd_set_protocol(iface, 0); - DPRINTFN(5, ("ukbd_attach: protocol set\n")); - if (r != USBD_NORMAL_COMPLETION) { - printf("%s: set protocol failed\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - } - - /* Ignore if SETIDLE fails since it is not crucial. */ - usbd_set_idle(iface, 0, 0); - - sc->sc_ep_addr = ed->bEndpointAddress; - sc->sc_disconnected = 0; - -#if defined(__NetBSD__) - a.console = 0; - - a.keymap = &ukbd_keymapdata; - - a.accessops = &ukbd_accessops; - a.accesscookie = sc; - - /* Flash the leds; no real purpose, just shows we're alive. */ - ukbd_set_leds(sc, WSKBD_LED_SCROLL | WSKBD_LED_NUM | WSKBD_LED_CAPS); - usbd_delay_ms(uaa->device, 300); - ukbd_set_leds(sc, 0); - - sc->sc_wskbddev = config_found(self, &a, wskbddevprint); - -#elif defined(__FreeBSD__) - /* XXX why waste CPU in delay() ? */ - /* It's alive! IT'S ALIVE! Do a little song and dance. */ - ukbd_set_leds(sc, NUM_LOCK); - delay(15000); - ukbd_set_leds(sc, CAPS_LOCK); - delay(20000); - ukbd_set_leds(sc, SCROLL_LOCK); - delay(30000); - ukbd_set_leds(sc, CAPS_LOCK); - delay(50000); - ukbd_set_leds(sc, NUM_LOCK); - - ukbd_enable(sc, 1); -#endif - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__FreeBSD__) -int -ukbd_detach(device_t self) -{ - struct ukbd_softc *sc = device_get_softc(self); - char *devinfo = (char *) device_get_desc(self); - - if (sc->sc_enabled) - return (ENXIO); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - - return (0); -} -#endif - -void -ukbd_disco(p) - void *p; -{ - struct ukbd_softc *sc = p; - - DPRINTF(("ukbd_disco: sc=%p\n", sc)); - usbd_abort_pipe(sc->sc_intrpipe); - sc->sc_disconnected = 1; -} - -int -ukbd_enable(v, on) - void *v; - int on; -{ - struct ukbd_softc *sc = v; - usbd_status r; - - if (on) { - /* Set up interrupt pipe. */ - if (sc->sc_enabled) - return (EBUSY); - - sc->sc_enabled = 1; - r = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ep_addr, - USBD_SHORT_XFER_OK, - &sc->sc_intrpipe, sc, &sc->sc_ndata, - sizeof(sc->sc_ndata), ukbd_intr); - if (r != USBD_NORMAL_COMPLETION) - return (EIO); - usbd_set_disco(sc->sc_intrpipe, ukbd_disco, sc); - } else { - /* Disable interrupts. */ - usbd_abort_pipe(sc->sc_intrpipe); - usbd_close_pipe(sc->sc_intrpipe); - - sc->sc_enabled = 0; - } - - return (0); -} - -void -ukbd_intr(reqh, addr, status) - usbd_request_handle reqh; - usbd_private_handle addr; - usbd_status status; -{ - struct ukbd_softc *sc = addr; - struct ukbd_data *ud = &sc->sc_ndata; - int mod, omod; - int ibuf[MAXKEYS]; /* chars events */ - int nkeys, i, j; - int key, c; -#define ADDKEY(c) ibuf[nkeys++] = (c) - - DPRINTFN(5, ("ukbd_intr: status=%d\n", status)); - if (status == USBD_CANCELLED) - return; - - if (status != USBD_NORMAL_COMPLETION) { - DPRINTF(("ukbd_intr: status=%d\n", status)); - usbd_clear_endpoint_stall_async(sc->sc_intrpipe); - return; - } - - DPRINTFN(5, (" mod=0x%02x key0=0x%02x key1=0x%02x\n", - ud->modifiers, ud->keycode[0], ud->keycode[1])); - - if (ud->keycode[0] == KEY_ERROR) - return; /* ignore */ - nkeys = 0; - mod = ud->modifiers; - omod = sc->sc_odata.modifiers; - if (mod != omod) - for (i = 0; i < NMOD; i++) - if (( mod & ukbd_mods[i].mask) != - (omod & ukbd_mods[i].mask)) - ADDKEY(ukbd_mods[i].key | - (mod & ukbd_mods[i].mask - ? PRESS : RELEASE)); - if (memcmp(ud->keycode, sc->sc_odata.keycode, NKEYCODE) != 0) { - /* Check for released keys. */ - for (i = 0; i < NKEYCODE; i++) { - key = sc->sc_odata.keycode[i]; - if (key == 0) - continue; - for (j = 0; j < NKEYCODE; j++) - if (key == ud->keycode[j]) - goto rfound; - c = ukbd_trtab[key]; - if (c) - ADDKEY(c | RELEASE); - rfound: - ; - } - - /* Check for pressed keys. */ - for (i = 0; i < NKEYCODE; i++) { - key = ud->keycode[i]; - if (key == 0) - continue; - for (j = 0; j < NKEYCODE; j++) - if (key == sc->sc_odata.keycode[j]) - goto pfound; - c = ukbd_trtab[key]; - DPRINTFN(2,("ukbd_intr: press key=0x%02x -> 0x%02x\n", - key, c)); - if (c) - ADDKEY(c | PRESS); - pfound: - ; - } - } - sc->sc_odata = *ud; - - if (nkeys == 0) - return; - -#if defined(__NetBSD__) - if (sc->sc_polling) { - DPRINTFN(1,("ukbd_intr: pollchar = 0x%02x\n", ibuf[0])); - if (nkeys > 0) - sc->sc_pollchar = ibuf[0]; /* XXX lost keys? */ - return; - } -#ifdef WSDISPLAY_COMPAT_RAWKBD - if (sc->sc_rawkbd) { - char cbuf[MAXKEYS * 2]; - int npress; - - for (npress = i = j = 0; i < nkeys; i++, j++) { - c = ibuf[i]; - if (c & 0x80) - cbuf[j++] = 0xe0; - cbuf[j] = c & 0x7f; - if (c & RELEASE) - cbuf[j] |= 0x80; - else { - /* remember keys for autorepeat */ - if (c & 0x80) - sc->sc_rep[npress++] = 0xe0; - sc->sc_rep[npress++] = c & 0x7f; - } - } - wskbd_rawinput(sc->sc_wskbddev, cbuf, j); - untimeout(ukbd_rawrepeat, sc); - if (npress != 0) { - sc->sc_nrep = npress; - timeout(ukbd_rawrepeat, sc, hz * REP_DELAY1 / 1000); - } - return; - } -#endif - - for (i = 0; i < nkeys; i++) { - c = ibuf[i]; - wskbd_input(sc->sc_wskbddev, - c & RELEASE ? WSCONS_EVENT_KEY_UP : WSCONS_EVENT_KEY_DOWN, - c & 0xff); - } -#elif defined(__FreeBSD__) - /* XXX shouldn't the keys be used? */ - for (i = 0; i < nkeys; i++) { - c = ibuf[i]; - printf("%c (%d) %s ", - ((c&0xff) < 32 || (c&0xff) > 126? '.':(c&0xff)), c, - (c&RELEASE? "released":"pressed")); - if (ud->modifiers) - printf("mod = 0x%04x ", ud->modifiers); - for (i = 0; i < NKEYCODE; i++) - if (ud->keycode[i]) - printf("%d ", ud->keycode[i]); - printf("\n"); - } -#endif -} - -void -ukbd_set_leds(v, leds) - void *v; - int leds; -{ - struct ukbd_softc *sc = v; - u_int8_t res; - - DPRINTF(("ukbd_set_leds: sc=%p leds=%d\n", sc, leds)); - - sc->sc_leds = leds; -#if defined(__NetBSD__) - res = 0; - if (leds & WSKBD_LED_SCROLL) - res |= SCROLL_LOCK; - if (leds & WSKBD_LED_NUM) - res |= NUM_LOCK; - if (leds & WSKBD_LED_CAPS) - res |= CAPS_LOCK; -#elif defined(__FreeBSD__) - res = leds; -#endif - usbd_set_report_async(sc->sc_iface, UHID_OUTPUT_REPORT, 0, &res, 1); -} - -#if defined(__NetBSD__) - -#ifdef WSDISPLAY_COMPAT_RAWKBD -void -ukbd_rawrepeat(v) - void *v; -{ - struct ukbd_softc *sc = v; - - wskbd_rawinput(sc->sc_wskbddev, sc->sc_rep, sc->sc_nrep); - timeout(ukbd_rawrepeat, sc, hz * REP_DELAYN / 1000); -} -#endif - -int -ukbd_ioctl(v, cmd, data, flag, p) - void *v; - u_long cmd; - caddr_t data; - int flag; - struct proc *p; -{ - struct ukbd_softc *sc = v; - - switch (cmd) { - case WSKBDIO_GTYPE: - *(int *)data = WSKBD_TYPE_USB; - return (0); - case WSKBDIO_SETLEDS: - ukbd_set_leds(v, *(int *)data); - return (0); - case WSKBDIO_GETLEDS: - *(int *)data = sc->sc_leds; - return (0); -#ifdef WSDISPLAY_COMPAT_RAWKBD - case WSKBDIO_SETMODE: - DPRINTF(("ukbd_ioctl: set raw = %d\n", *(int *)data)); - sc->sc_rawkbd = *(int *)data == WSKBD_RAW; - untimeout(ukbd_rawrepeat, sc); - return (0); -#endif - } - return (-1); -} - -/* Console interface. */ -void -ukbd_cngetc(v, type, data) - void *v; - u_int *type; - int *data; -{ - struct ukbd_softc *sc = v; - usbd_lock_token s; - int c; - - DPRINTFN(1,("ukbd_cngetc: enter\n")); - s = usbd_lock(); - sc->sc_polling = 1; - sc->sc_pollchar = -1; - while(sc->sc_pollchar == -1) - usbd_dopoll(sc->sc_iface); - sc->sc_polling = 0; - c = sc->sc_pollchar; - *type = c & RELEASE ? WSCONS_EVENT_KEY_UP : WSCONS_EVENT_KEY_DOWN; - *data = c & 0xff; - usbd_unlock(s); - DPRINTFN(1,("ukbd_cngetc: return 0x%02x\n", c)); -} - -void -ukbd_cnpollc(v, on) - void *v; - int on; -{ - struct ukbd_softc *sc = v; - - DPRINTFN(2,("ukbd_cnpollc: sc=%p on=%d\n", v, on)); - - usbd_set_polling(sc->sc_iface, on); -} - -int -ukbd_cnattach(v) - void *v; -{ - struct ukbd_softc *sc = v; - - DPRINTF(("ukbd_cnattach: sc=%p\n", sc)); - wskbd_cnattach(&ukbd_consops, sc, &ukbd_keymapdata); - return (0); -} - -#endif /* NetBSD */ - -#if defined(__FreeBSD__) -DRIVER_MODULE(ukbd, uhub, ukbd_driver, ukbd_devclass, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/ulpt.c b/sys/dev/usb/ulpt.c deleted file mode 100644 index 074fe04893335..0000000000000 --- a/sys/dev/usb/ulpt.c +++ /dev/null @@ -1,451 +0,0 @@ -/* $NetBSD: ulpt.c,v 1.10 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/malloc.h> -#include <sys/kernel.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/ioccom.h> -#include <sys/module.h> -#include <sys/bus.h> -#endif -#include <sys/uio.h> -#include <sys/conf.h> -#include <sys/syslog.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> - -#define TIMEOUT hz*16 /* wait up to 16 seconds for a ready */ -#define STEP hz/4 - -#define LPTPRI (PZERO+8) -#define ULPT_BSIZE 1024 - -#ifdef USB_DEBUG -#define DPRINTF(x) if (ulptdebug) printf x -#define DPRINTFN(n,x) if (ulptdebug>(n)) printf x -int ulptdebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -#define UR_GET_DEVICE_ID 0 -#define UR_GET_PORT_STATUS 1 -#define UR_SOFT_RESET 2 - -#define LPS_NERR 0x08 /* printer no error */ -#define LPS_SELECT 0x10 /* printer selected */ -#define LPS_NOPAPER 0x20 /* printer out of paper */ -#define LPS_INVERT (LPS_SELECT|LPS_NERR) -#define LPS_MASK (LPS_SELECT|LPS_NERR|LPS_NOPAPER) - -struct ulpt_softc { - bdevice sc_dev; - usbd_device_handle sc_udev; /* device */ - usbd_interface_handle sc_iface; /* interface */ - int sc_ifaceno; - usbd_pipe_handle sc_bulkpipe; /* bulk pipe */ - int sc_bulk; - - u_char sc_state; -#define ULPT_OPEN 0x01 /* device is open */ -#define ULPT_OBUSY 0x02 /* printer is busy doing output */ -#define ULPT_INIT 0x04 /* waiting to initialize for open */ - u_char sc_flags; -#if defined(__NetBSD__) -#define ULPT_NOPRIME 0x40 /* don't prime on open */ -#elif defined(__FreeBSD__) -/* values taken from i386/isa/lpt.c */ -#define ULPT_POS_INIT 0x04 /* if we are a postive init signal */ -#define ULPT_POS_ACK 0x08 /* if we are a positive going ack */ -#define ULPT_NOPRIME 0x10 /* don't prime the printer at all */ -#define ULPT_PRIMEOPEN 0x20 /* prime on every open */ -#define ULPT_AUTOLF 0x40 /* tell printer to do an automatic lf */ -#define ULPT_BYPASS 0x80 /* bypass printer ready checks */ -#endif - u_char sc_laststatus; -}; - -#if defined(__NetBSD__) -int ulptopen __P((dev_t, int, int, struct proc *)); -int ulptclose __P((dev_t, int, int, struct proc *p)); -int ulptwrite __P((dev_t, struct uio *uio, int)); -int ulptioctl __P((dev_t, u_long, caddr_t, int, struct proc *)); -#elif defined(__FreeBSD__) -static d_open_t ulptopen; -static d_close_t ulptclose; -static d_write_t ulptwrite; -static d_ioctl_t ulptioctl; - -#define ULPT_CDEV_MAJOR 113 - -static struct cdevsw ulpt_cdevsw = { - ulptopen, ulptclose, noread, ulptwrite, - ulptioctl, nostop, nullreset, nodevtotty, - seltrue, nommap, nostrat, - "ulpt", NULL, -1 -}; -#endif - -int ulpt_status __P((struct ulpt_softc *)); -void ulpt_reset __P((struct ulpt_softc *)); -int ulpt_statusmsg __P((u_char, struct ulpt_softc *)); - -#if defined(__NetBSD__) -#define ULPTUNIT(s) (minor(s) & 0x1f) -#define ULPTFLAGS(s) (minor(s) & 0xe0) -#elif defined(__FreeBSD__) -/* defines taken from i386/isa/lpt.c */ -#define ULPTUNIT(s) (minor(s) & 0x03) -#define ULPTFLAGS(s) (minor(s) & 0xfc) -#endif - -USB_DECLARE_DRIVER(ulpt); - -USB_MATCH(ulpt) -{ - USB_MATCH_START(ulpt, uaa); - usb_interface_descriptor_t *id; - - DPRINTFN(10,("ulpt_match\n")); - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (id && - id->bInterfaceClass == UCLASS_PRINTER && - id->bInterfaceSubClass == USUBCLASS_PRINTER && - (id->bInterfaceProtocol == UPROTO_PRINTER_UNI || - id->bInterfaceProtocol == UPROTO_PRINTER_BI)) - return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO); - return (UMATCH_NONE); -} - -USB_ATTACH(ulpt) -{ - USB_ATTACH_START(ulpt, sc, uaa); - usbd_device_handle dev = uaa->device; - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); -#if 0 - usb_config_descriptor_t *cd = usbd_get_config_descriptor(dev); - usb_device_request_t req; -#endif - char devinfo[1024]; - usb_endpoint_descriptor_t *ed; - usbd_status r; - - DPRINTFN(10,("ulpt_attach: sc=%p\n", sc)); - usbd_devinfo(dev, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - - /* Figure out which endpoint is the bulk out endpoint. */ - ed = usbd_interface2endpoint_descriptor(iface, 0); - if (!ed) - goto nobulk; - if ((ed->bEndpointAddress & UE_IN) != UE_OUT || - (ed->bmAttributes & UE_XFERTYPE) != UE_BULK) { - /* In case we are using a bidir protocol... */ - ed = usbd_interface2endpoint_descriptor(iface, 1); - if (!ed) - goto nobulk; - if ((ed->bEndpointAddress & UE_IN) != UE_OUT || - (ed->bmAttributes & UE_XFERTYPE) != UE_BULK) - goto nobulk; - } - sc->sc_bulk = ed->bEndpointAddress; - DPRINTFN(10, ("ulpt_attach: bulk=%d\n", sc->sc_bulk)); - - sc->sc_iface = iface; - r = usbd_interface2device_handle(iface, &sc->sc_udev); - if (r != USBD_NORMAL_COMPLETION) - USB_ATTACH_ERROR_RETURN; - sc->sc_ifaceno = id->bInterfaceNumber; - -#if 0 -XXX needs a different way to read the id string since the length -is unknown. usbd_do_request() returns error on a short transfer. - req.bmRequestType = UT_READ_CLASS_INTERFACE; - req.bRequest = UR_GET_DEVICE_ID; - USETW(req.wValue, cd->bConfigurationValue); - USETW2(req.wIndex, id->bInterfaceNumber, id->bAlternateSetting); - USETW(req.wLength, sizeof devinfo - 1); - r = usbd_do_request(dev, &req, devinfo); - if (r == USBD_NORMAL_COMPLETION) { - int len; - char *idstr; - len = (devinfo[0] << 8) | (devinfo[1] & 0xff); - /* devinfo now contains an IEEE-1284 device ID */ - idstr = devinfo+2; - idstr[len] = 0; - printf("%s: device id <%s>\n", USBDEVNAME(sc->sc_dev), idstr); - } else { - printf("%s: cannot get device id\n", USBDEVNAME(sc->sc_dev)); - } -#endif - - USB_ATTACH_SUCCESS_RETURN; - - nobulk: - printf("%s: could not find bulk endpoint\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; -} - -int -ulpt_status(sc) - struct ulpt_softc *sc; -{ - usb_device_request_t req; - usbd_status r; - u_char status; - - req.bmRequestType = UT_READ_CLASS_INTERFACE; - req.bRequest = UR_GET_PORT_STATUS; - USETW(req.wValue, 0); - USETW(req.wIndex, sc->sc_ifaceno); - USETW(req.wLength, 1); - r = usbd_do_request(sc->sc_udev, &req, &status); - DPRINTFN(1, ("ulpt_status: status=0x%02x r=%d\n", status, r)); - if (r == USBD_NORMAL_COMPLETION) - return (status); - else - return (0); -} - -void -ulpt_reset(sc) - struct ulpt_softc *sc; -{ - usb_device_request_t req; - - DPRINTFN(1, ("ulpt_reset\n")); - req.bmRequestType = UT_WRITE_CLASS_OTHER; - req.bRequest = UR_SOFT_RESET; - USETW(req.wValue, 0); - USETW(req.wIndex, sc->sc_ifaceno); - USETW(req.wLength, 0); - (void)usbd_do_request(sc->sc_udev, &req, 0); -} - -/* - * Reset the printer, then wait until it's selected and not busy. - */ -int -ulptopen(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - u_char flags = ULPTFLAGS(dev); - usbd_status r; - int spin, error; - USB_GET_SC_OPEN(ulpt, ULPTUNIT(dev), sc); - - if (!sc || !sc->sc_iface) - return ENXIO; - - if (sc->sc_state) - return EBUSY; - - sc->sc_state = ULPT_INIT; - sc->sc_flags = flags; - DPRINTF(("ulptopen: flags=0x%x\n", (unsigned)flags)); - -#if USB_DEBUG && defined(__FreeBSD__) - /* Ignoring these flags might not be a good idea */ - if ((flags ^ ULPT_NOPRIME) != 0) - DPRINTF(("flags ignored: %b\n", flags, - "\20\3POS_INIT\4POS_ACK\6PRIME_OPEN\7AUTOLF\10BYPASS")); -#endif - if ((flags & ULPT_NOPRIME) == 0) - ulpt_reset(sc); - - for (spin = 0; (ulpt_status(sc) & LPS_SELECT) == 0; spin += STEP) { - if (spin >= TIMEOUT) { - sc->sc_state = 0; - return EBUSY; - } - - /* wait 1/4 second, give up if we get a signal */ - error = tsleep((caddr_t)sc, LPTPRI | PCATCH, "ulptop", STEP); - if (error != EWOULDBLOCK) { - sc->sc_state = 0; - return error; - } - } - - r = usbd_open_pipe(sc->sc_iface, sc->sc_bulk, 0, &sc->sc_bulkpipe); - if (r != USBD_NORMAL_COMPLETION) { - sc->sc_state = 0; - return (EIO); - } - - sc->sc_state = ULPT_OPEN; - - DPRINTF(("ulptopen: done\n")); - return (0); -} - -int -ulpt_statusmsg(status, sc) - u_char status; - struct ulpt_softc *sc; -{ - u_char new; - - status = (status ^ LPS_INVERT) & LPS_MASK; - new = status & ~sc->sc_laststatus; - sc->sc_laststatus = status; - - if (new & LPS_SELECT) - log(LOG_NOTICE, "%s: offline\n", USBDEVNAME(sc->sc_dev)); - else if (new & LPS_NOPAPER) - log(LOG_NOTICE, "%s: out of paper\n", USBDEVNAME(sc->sc_dev)); - else if (new & LPS_NERR) - log(LOG_NOTICE, "%s: output error\n", USBDEVNAME(sc->sc_dev)); - - return status; -} - -int -ulptclose(dev, flag, mode, p) - dev_t dev; - int flag; - int mode; - struct proc *p; -{ - USB_GET_SC(ulpt, ULPTUNIT(dev), sc); - - usbd_close_pipe(sc->sc_bulkpipe); - - sc->sc_state = 0; - - DPRINTF(("ulptclose: closed\n")); - return (0); -} - -int -ulptwrite(dev, uio, flags) - dev_t dev; - struct uio *uio; - int flags; -{ - size_t n; - int error = 0; - char buf[ULPT_BSIZE]; - usbd_request_handle reqh; - usbd_status r; - USB_GET_SC(ulpt, ULPTUNIT(dev), sc); - - DPRINTF(("ulptwrite\n")); - reqh = usbd_alloc_request(); - if (reqh == 0) - return (ENOMEM); - while ((n = min(ULPT_BSIZE, uio->uio_resid)) != 0) { - ulpt_statusmsg(ulpt_status(sc), sc); - error = uiomove(buf, n, uio); - if (error) - break; - /* XXX use callback to enable interrupt? */ - r = usbd_setup_request(reqh, sc->sc_bulkpipe, 0, buf, n, - 0, USBD_NO_TIMEOUT, 0); - if (r != USBD_NORMAL_COMPLETION) { - error = EIO; - break; - } - DPRINTFN(1, ("ulptwrite: transfer %d bytes\n", n)); - r = usbd_sync_transfer(reqh); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("ulptwrite: error=%d\n", r)); - usbd_clear_endpoint_stall(sc->sc_bulkpipe); - error = EIO; - break; - } - } - usbd_free_request(reqh); - return (error); -} - -int -ulptioctl(dev, cmd, data, flag, p) - dev_t dev; - u_long cmd; - caddr_t data; - int flag; - struct proc *p; -{ - int error = 0; - - switch (cmd) { - default: - error = ENODEV; - } - - return error; -} - -#if defined(__FreeBSD__) -static int -ulpt_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - return 0; -} - -CDEV_DRIVER_MODULE(ulpt, uhub, ulpt_driver, ulpt_devclass, - ULPT_CDEV_MAJOR, ulpt_cdevsw, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/umodem.c b/sys/dev/usb/umodem.c deleted file mode 100644 index 16bfae25ae168..0000000000000 --- a/sys/dev/usb/umodem.c +++ /dev/null @@ -1,142 +0,0 @@ -/* $NetBSD: umodem.c,v 1.5 1999/01/08 11:58:25 augustss Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#include <sys/conf.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/device.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbcdc.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (umodemdebug) printf x -#define DPRINTFN(n,x) if (umodemdebug>(n)) printf x -int umodemdebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -struct umodem_softc { - bdevice sc_dev; /* base device */ - usbd_interface_handle sc_ctl; /* control interface */ - usbd_interface_handle sc_data; /* data interface */ - uByte cmCaps; - uByte acmCaps; -}; - -void umodem_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); -void umodem_disco __P((void *)); - -USB_DECLARE_DRIVER(umodem); - -USB_MATCH(umodem) -{ - USB_MATCH_START(umodem, uaa); - - usb_interface_descriptor_t *id; - - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (!id || - id->bInterfaceClass != UCLASS_CDC || - id->bInterfaceSubClass != USUBCLASS_ABSTRACT_CONTROL_MODEL || - id->bInterfaceProtocol != UPROTO_CDC_AT) - return (UMATCH_NONE); - return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO); -} - -USB_ATTACH(umodem) -{ - USB_ATTACH_START(umodem, sc, uaa); - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id; - char devinfo[1024]; - - sc->sc_ctl = iface; - id = usbd_get_interface_descriptor(iface); - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__FreeBSD__) -static int -umodem_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - - return 0; -} -#endif - -#if defined(__FreeBSD__) -DRIVER_MODULE(umodem, uhub, umodem_driver, umodem_devclass, usbd_driver_load,0); -#endif - diff --git a/sys/dev/usb/ums.c b/sys/dev/usb/ums.c deleted file mode 100644 index e92d027ec0db3..0000000000000 --- a/sys/dev/usb/ums.c +++ /dev/null @@ -1,720 +0,0 @@ -/* $NetBSD: ums.c,v 1.19 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#include <sys/ioctl.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#include <sys/conf.h> -#endif -#include <sys/tty.h> -#include <sys/file.h> -#include <sys/select.h> -#include <sys/proc.h> -#include <sys/vnode.h> -#include <sys/poll.h> - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> -#include <dev/usb/hid.h> - -#if defined(__NetBSD__) -#include <dev/wscons/wsconsio.h> -#include <dev/wscons/wsmousevar.h> -#elif defined(__FreeBSD__) -#include <machine/mouse.h> -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (umsdebug) printf x -#define DPRINTFN(n,x) if (umsdebug>(n)) printf x -int umsdebug = 6; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -#define UMSUNIT(s) (minor(s)&0x1f) - -#define PS2LBUTMASK x01 -#define PS2RBUTMASK x02 -#define PS2MBUTMASK x04 -#define PS2BUTMASK 0x0f - -#define QUEUE_BUFSIZE 240 /* MUST be divisible by 3 _and_ 4 */ - -struct ums_softc { - bdevice sc_dev; /* base device */ - usbd_interface_handle sc_iface; /* interface */ - usbd_pipe_handle sc_intrpipe; /* interrupt pipe */ - int sc_ep_addr; - - u_char *sc_ibuf; - u_int8_t sc_iid; - int sc_isize; - struct hid_location sc_loc_x, sc_loc_y, sc_loc_z; - struct hid_location *sc_loc_btn; - - int sc_enabled; - int sc_disconnected; /* device is gone */ - - int flags; /* device configuration */ -#define UMS_Z 0x01 /* z direction available */ - int nbuttons; -#define MAX_BUTTONS 7 /* chosen because sc_buttons is u_char */ - -#if defined(__NetBSD__) - u_char sc_buttons; /* mouse button status */ - struct device *sc_wsmousedev; -#elif defined(__FreeBSD__) - u_char qbuf[QUEUE_BUFSIZE]; /* must be divisable by 3&4 */ - u_char dummy[100]; /* XXX just for safety and for now */ - int qcount, qhead, qtail; - mousehw_t hw; - mousemode_t mode; - mousestatus_t status; - - int state; -# define UMS_ASLEEP 0x01 /* readFromDevice is waiting */ -# define UMS_SELECT 0x02 /* select is waiting */ - struct selinfo rsel; /* process waiting in select */ -#endif -}; - -#define MOUSE_FLAGS_MASK (HIO_CONST|HIO_RELATIVE) -#define MOUSE_FLAGS (HIO_RELATIVE) - -void ums_intr __P((usbd_request_handle, usbd_private_handle, usbd_status)); -void ums_disco __P((void *)); - -static int ums_enable __P((void *)); -static void ums_disable __P((void *)); - -#if defined(__NetBSD__) -static int ums_ioctl __P((void *, u_long, caddr_t, int, struct proc *)); - -const struct wsmouse_accessops ums_accessops = { - ums_enable, - ums_ioctl, - ums_disable, -}; - -#elif defined(__FreeBSD__) -static d_open_t ums_open; -static d_close_t ums_close; -static d_read_t ums_read; -static d_ioctl_t ums_ioctl; -static d_poll_t ums_poll; - -#define UMS_CDEV_MAJOR 111 - -static struct cdevsw ums_cdevsw = { - ums_open, ums_close, ums_read, nowrite, - ums_ioctl, nostop, nullreset, nodevtotty, - ums_poll, nommap, nostrat, - "ums", NULL, -1 -}; -#endif - -USB_DECLARE_DRIVER(ums); - -USB_MATCH(ums) -{ - USB_MATCH_START(ums, uaa); - usb_interface_descriptor_t *id; - int size, ret; - void *desc; - usbd_status r; - - if (!uaa->iface) - return (UMATCH_NONE); - id = usbd_get_interface_descriptor(uaa->iface); - if (!id || id->bInterfaceClass != UCLASS_HID) - return (UMATCH_NONE); - - r = usbd_alloc_report_desc(uaa->iface, &desc, &size, M_TEMP); - if (r != USBD_NORMAL_COMPLETION) - return (UMATCH_NONE); - - if (hid_is_collection(desc, size, - HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_MOUSE))) - ret = UMATCH_IFACECLASS; - else - ret = UMATCH_NONE; - - free(desc, M_TEMP); - return (ret); -} - -USB_ATTACH(ums) -{ - USB_ATTACH_START(ums, sc, uaa); - usbd_interface_handle iface = uaa->iface; - usb_interface_descriptor_t *id; - usb_endpoint_descriptor_t *ed; -#if defined(__NetBSD__) - struct wsmousedev_attach_args a; -#endif - int size; - void *desc; - usbd_status r; - char devinfo[1024]; - u_int32_t flags; - int i; - struct hid_location loc_btn; - - sc->sc_disconnected = 1; - sc->sc_iface = iface; - id = usbd_get_interface_descriptor(iface); - usbd_devinfo(uaa->device, 0, devinfo); - USB_ATTACH_SETUP; - printf("%s: %s, iclass %d/%d\n", USBDEVNAME(sc->sc_dev), - devinfo, id->bInterfaceClass, id->bInterfaceSubClass); - ed = usbd_interface2endpoint_descriptor(iface, 0); - if (!ed) { - printf("%s: could not read endpoint descriptor\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - DPRINTFN(10,("ums_attach: bLength=%d bDescriptorType=%d " - "bEndpointAddress=%d-%s bmAttributes=%d wMaxPacketSize=%d" - " bInterval=%d\n", - ed->bLength, ed->bDescriptorType, - ed->bEndpointAddress & UE_ADDR, - ed->bEndpointAddress & UE_IN ? "in" : "out", - ed->bmAttributes & UE_XFERTYPE, - UGETW(ed->wMaxPacketSize), ed->bInterval)); - - if ((ed->bEndpointAddress & UE_IN) != UE_IN || - (ed->bmAttributes & UE_XFERTYPE) != UE_INTERRUPT) { - printf("%s: unexpected endpoint\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - - r = usbd_alloc_report_desc(uaa->iface, &desc, &size, M_TEMP); - if (r != USBD_NORMAL_COMPLETION) - USB_ATTACH_ERROR_RETURN; - - if (!hid_locate(desc, size, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_X), - hid_input, &sc->sc_loc_x, &flags)) { - printf("%s: mouse has no X report\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) { - printf("%s: X report 0x%04x not supported\n", - USBDEVNAME(sc->sc_dev), flags); - USB_ATTACH_ERROR_RETURN; - } - - if (!hid_locate(desc, size, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Y), - hid_input, &sc->sc_loc_y, &flags)) { - printf("%s: mouse has no Y report\n", USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) { - printf("%s: Y report 0x%04x not supported\n", - USBDEVNAME(sc->sc_dev), flags); - USB_ATTACH_ERROR_RETURN; - } - - /* try to guess the Z activator: first check Z, then WHEEL */ - if (hid_locate(desc, size, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_Z), - hid_input, &sc->sc_loc_z, &flags) || - hid_locate(desc, size, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_WHEEL), - hid_input, &sc->sc_loc_z, &flags)) { - if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) { - sc->sc_loc_z.size = 0; /* Bad Z coord, ignore it */ - } else { -#if defined(__FreeBSD__) -#ifdef USBVERBOSE - printf("%s: Z dir. ignored due to bugs in ums.c\n", - USBDEVNAME(sc->sc_dev)); -#endif -#else - sc->flags |= UMS_Z; -#endif - } - } - - /* figure out the number of buttons */ - for (i = 1; i <= MAX_BUTTONS; i++) - if (!hid_locate(desc, size, HID_USAGE2(HUP_BUTTON, i), - hid_input, &loc_btn, 0)) - break; - sc->nbuttons = i - 1; - sc->sc_loc_btn = malloc(sizeof(struct hid_location)*sc->nbuttons, - M_USBDEV, M_NOWAIT); - if (!sc->sc_loc_btn) - USB_ATTACH_ERROR_RETURN; - - printf("%s: %d buttons%s\n", USBDEVNAME(sc->sc_dev), - sc->nbuttons, (sc->flags & UMS_Z? " and Z dir." : "")); - - for (i = 1; i <= sc->nbuttons; i++) - hid_locate(desc, size, HID_USAGE2(HUP_BUTTON, i), - hid_input, &sc->sc_loc_btn[i-1], 0); - - sc->sc_isize = hid_report_size(desc, size, hid_input, &sc->sc_iid); - sc->sc_ibuf = malloc(sc->sc_isize, M_USB, M_NOWAIT); - if (!sc->sc_ibuf) { - free(sc->sc_loc_btn, M_USB); - USB_ATTACH_ERROR_RETURN; - } - - sc->sc_ep_addr = ed->bEndpointAddress; - sc->sc_disconnected = 0; - free(desc, M_TEMP); - -#ifdef USB_DEBUG - DPRINTF(("ums_attach: sc=%p\n", sc)); - DPRINTF(("ums_attach: X\t%d/%d\n", - sc->sc_loc_x.pos, sc->sc_loc_x.size)); - DPRINTF(("ums_attach: Y\t%d/%d\n", - sc->sc_loc_x.pos, sc->sc_loc_x.size)); - if (sc->flags & UMS_Z) - DPRINTF(("ums_attach: Z\t%d/%d\n", - sc->sc_loc_z.pos, sc->sc_loc_z.size)); - for (i = 1; i <= sc->nbuttons; i++) { - DPRINTF(("ums_attach: B%d\t%d/%d\n", - i, sc->sc_loc_btn[i-1].pos,sc->sc_loc_btn[i-1].size)); - } - DPRINTF(("ums_attach: size=%d, id=%d\n", sc->sc_isize, sc->sc_iid)); -#endif - -#if defined(__NetBSD__) - a.accessops = &ums_accessops; - a.accesscookie = sc; - - sc->sc_wsmousedev = config_found(self, &a, wsmousedevprint); -#elif defined(__FreeBSD__) - sc->hw.buttons = 2; /* XXX hw&mode values are bogus */ - sc->hw.iftype = MOUSE_IF_PS2; - sc->hw.type = MOUSE_MOUSE; - if (sc->flags & UMS_Z) - sc->hw.model = MOUSE_MODEL_INTELLI; - else - sc->hw.model = MOUSE_MODEL_GENERIC; - sc->hw.hwid = 0; - sc->mode.protocol = MOUSE_PROTO_PS2; - sc->mode.rate = -1; - sc->mode.resolution = MOUSE_RES_DEFAULT; - sc->mode.accelfactor = 1; - sc->mode.level = 0; - if (sc->flags & UMS_Z) { - sc->mode.packetsize = MOUSE_INTELLI_PACKETSIZE; - sc->mode.syncmask[0] = 0xc8; - } else { - sc->mode.packetsize = MOUSE_PS2_PACKETSIZE; - sc->mode.syncmask[0] = 0xc0; - } - sc->mode.syncmask[1] = 0; - - sc->status.flags = 0; - sc->status.button = sc->status.obutton = 0; - sc->status.dx = sc->status.dy = sc->status.dz = 0; - - sc->rsel.si_flags = 0; - sc->rsel.si_pid = 0; -#endif - - USB_ATTACH_SUCCESS_RETURN; -} - - -#if defined(__FreeBSD__) -static int -ums_detach(device_t self) -{ - struct ums_softc *sc = device_get_softc(self); - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - free(sc->sc_loc_btn, M_USB); - free(sc->sc_ibuf, M_USB); - - return 0; -} -#endif - -void -ums_disco(p) - void *p; -{ - struct ums_softc *sc = p; - - DPRINTF(("ums_disco: sc=%p\n", sc)); - usbd_abort_pipe(sc->sc_intrpipe); - sc->sc_disconnected = 1; -} - -void -ums_intr(reqh, addr, status) - usbd_request_handle reqh; - usbd_private_handle addr; - usbd_status status; -{ - struct ums_softc *sc = addr; - u_char *ibuf; - int dx, dy, dz; - u_char buttons = 0; - int i; - -#if defined(__NetBSD__) -#define UMS_BUT(i) ((i) == 1 || (i) == 2 ? 3 - (i) : i) -#elif defined(__FreeBSD__) -#define UMS_BUT(i) (i) -#endif - - DPRINTFN(5, ("ums_intr: sc=%p status=%d\n", sc, status)); - DPRINTFN(5, ("ums_intr: data = %02x %02x %02x\n", - sc->sc_ibuf[0], sc->sc_ibuf[1], sc->sc_ibuf[2])); - - if (status == USBD_CANCELLED) - return; - - if (status != USBD_NORMAL_COMPLETION) { - DPRINTF(("ums_intr: status=%d\n", status)); - usbd_clear_endpoint_stall_async(sc->sc_intrpipe); - return; - } - - ibuf = sc->sc_ibuf; - if (sc->sc_iid) { - if (*ibuf++ != sc->sc_iid) - return; - } - - dx = hid_get_data(ibuf, &sc->sc_loc_x); - dy = -hid_get_data(ibuf, &sc->sc_loc_y); - dz = hid_get_data(ibuf, &sc->sc_loc_z); - for (i = 0; i < sc->nbuttons; i++) - if (hid_get_data(ibuf, &sc->sc_loc_btn[i])) - buttons |= (1 << UMS_BUT(i)); - -#if defined(__NetBSD__) - if (dx || dy || buttons != sc->sc_buttons) { - DPRINTFN(10, ("ums_intr: x:%d y:%d z:%d buttons:0x%x\n", - dx, dy, dz, buttons)); - sc->sc_buttons = buttons; - if (sc->sc_wsmousedev) - wsmouse_input(sc->sc_wsmousedev, buttons, dx, dy, dz); -#elif defined(__FreeBSD__) - if (dx || dy || (sc->flags & UMS_Z && dz) - || buttons != sc->status.button) { - DPRINTFN(5, ("ums_intr: x:%d y:%d z:%d buttons:0x%x\n", - dx, dy, dz, buttons)); - - sc->status.button = buttons; - sc->status.dx += dx; - sc->status.dy += dy; - sc->status.dz += dz; - - /* Discard data in case of full buffer */ - if (sc->qcount == sizeof(sc->qbuf)) { - DPRINTF(("Buffer full, discarded packet")); - return; - } - - sc->qbuf[sc->qhead] = MOUSE_PS2_SYNC; - if (dx < 0) - sc->qbuf[sc->qhead] |= MOUSE_PS2_XNEG; - if (dx > 255 || dx < -255) - sc->qbuf[sc->qhead] |= MOUSE_PS2_XOVERFLOW; - if (dy < 0) - sc->qbuf[sc->qhead] |= MOUSE_PS2_YNEG; - if (dy > 255 || dy < -255) - sc->qbuf[sc->qhead] |= MOUSE_PS2_YOVERFLOW; - sc->qbuf[sc->qhead++] |= buttons; - sc->qbuf[sc->qhead++] = dx; - sc->qbuf[sc->qhead++] = dy; - sc->qcount += 3; - if (sc->flags & UMS_Z) { - sc->qbuf[sc->qhead++] = dz; - sc->qcount++; - } -#ifdef USB_DEBUG - if (sc->qhead > sizeof(sc->qbuf)) - DPRINTF(("Buffer overrun! %d %d\n", - sc->qhead, sizeof(sc->qbuf))); -#endif - /* wrap round at end of buffer */ - if (sc->qhead >= sizeof(sc->qbuf)) - sc->qhead = 0; - - /* someone waiting for data */ - if (sc->state & UMS_ASLEEP) { - DPRINTF(("Waking up %p\n", sc)); - wakeup(sc); - } - if (sc->state & UMS_SELECT) { - DPRINTF(("Waking up select %p\n", &sc->rsel)); - selwakeup(&sc->rsel); - } -#endif - } -} - - -static int -ums_enable(v) - void *v; -{ - struct ums_softc *sc = v; - - usbd_status r; - - if (sc->sc_enabled) - return EBUSY; - - sc->sc_enabled = 1; -#if defined(__NetBSD__) - sc->sc_buttons = 0; -#elif defined(__FreeBSD__) - sc->qcount = 0; - sc->qhead = sc->qtail = 0; - sc->status.flags = 0; - sc->status.button = sc->status.obutton = 0; - sc->status.dx = sc->status.dy = sc->status.dz = 0; -#endif - - /* Set up interrupt pipe. */ - r = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ep_addr, - USBD_SHORT_XFER_OK, &sc->sc_intrpipe, sc, - sc->sc_ibuf, sc->sc_isize, ums_intr); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("ums_enable: usbd_open_pipe_intr failed, error=%d\n", - r)); - sc->sc_enabled = 0; - return (EIO); - } - usbd_set_disco(sc->sc_intrpipe, ums_disco, sc); - return (0); -} - -static void -ums_disable(v) - void *v; -{ - struct ums_softc *sc = v; - - /* Disable interrupts. */ - usbd_abort_pipe(sc->sc_intrpipe); - usbd_close_pipe(sc->sc_intrpipe); - - sc->sc_enabled = 0; - -#if defined(USBVERBOSE) && defined(__FreeBSD__) - if (sc->qcount != 0) - DPRINTF(("Discarded %d bytes in queue\n", sc->qcount)); -#endif -} - -#if defined(__NetBSD__) -static int -ums_ioctl(v, cmd, data, flag, p) - void *v; - u_long cmd; - caddr_t data; - int flag; - struct proc *p; - -{ - switch (cmd) { - case WSMOUSEIO_GTYPE: - *(u_int *)data = WSMOUSE_TYPE_USB; - return (0); - } - - return (-1); -} - -#elif defined(__FreeBSD__) -static int -ums_open(dev_t dev, int flag, int fmt, struct proc *p) -{ - USB_GET_SC_OPEN(ums, UMSUNIT(dev), sc); - - return ums_enable(sc); -} - -static int -ums_close(dev_t dev, int flag, int fmt, struct proc *p) -{ - USB_GET_SC(ums, UMSUNIT(dev), sc); - - if (sc->sc_enabled) - ums_disable(sc); - - return 0; -} - -static int -ums_read(dev_t dev, struct uio *uio, int flag) -{ - USB_GET_SC(ums, UMSUNIT(dev), sc); - int s; - char buf[sizeof(sc->qbuf)]; - int l = 0; - int error; - - s = splusb(); - while (sc->qcount == 0 ) { - /* NWH XXX non blocking I/O ?? - if (non blocking I/O ) { - splx(s); - return EWOULDBLOCK; - } else { - */ - sc->state |= UMS_ASLEEP; - error = tsleep(sc, PZERO | PCATCH, "umsrea", 0); - sc->state &= ~UMS_ASLEEP; - if (error) { - splx(s); - return error; - } - } - - while ((sc->qcount > 0) && (uio->uio_resid > 0)) { - l = (sc->qcount < uio->uio_resid? sc->qcount:uio->uio_resid); - if (l > sizeof(buf)) - l = sizeof(buf); - if (l > sizeof(sc->qbuf) - sc->qtail) /* transfer till end of buf */ - l = sizeof(sc->qbuf) - sc->qtail; - - splx(s); - uiomove(&sc->qbuf[sc->qtail], l, uio); - s = splusb(); - - if ( sc->qcount - l < 0 ) { - DPRINTF(("qcount below 0, count=%d l=%d\n", sc->qcount, l)); - sc->qcount = l; - } - sc->qcount -= l; /* remove the bytes from the buffer */ - sc->qtail = (sc->qtail + l) % sizeof(sc->qbuf); - } - splx(s); - - return 0; -} - -static int -ums_poll(dev_t dev, int events, struct proc *p) -{ - USB_GET_SC(ums, UMSUNIT(dev), sc); - int revents = 0; - int s; - - s = splusb(); - if (events & (POLLIN | POLLRDNORM)) { - if (sc->qcount) { - revents = events & (POLLIN | POLLRDNORM); - } else { - sc->state |= UMS_SELECT; - selrecord(p, &sc->rsel); - sc->state &= ~UMS_SELECT; - } - } - splx(s); - - return revents; -} - -int -ums_ioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) -{ - USB_GET_SC(ums, UMSUNIT(dev), sc); - int error = 0; - int s; - - switch(cmd) { - case MOUSE_GETHWINFO: - *(mousehw_t *)addr = sc->hw; - break; - case MOUSE_GETMODE: - *(mousemode_t *)addr = sc->mode; - break; - case MOUSE_GETLEVEL: - *(int *)addr = sc->mode.level; - break; - case MOUSE_GETSTATUS: { - mousestatus_t *status = (mousestatus_t *) addr; - - s = splusb(); - *status = sc->status; - sc->status.obutton = sc->status.button; - sc->status.button = 0; - sc->status.dx = sc->status.dy = sc->status.dz = 0; - splx(s); - - if (status->dx || status->dy || status->dz) - status->flags |= MOUSE_POSCHANGED; - if (status->button != status->obutton) - status->flags |= MOUSE_BUTTONSCHANGED; - break; - } - default: - error = ENOTTY; - } - - return error; -} -#endif - -#if defined(__FreeBSD__) -CDEV_DRIVER_MODULE(ums, uhub, ums_driver, ums_devclass, - UMS_CDEV_MAJOR, ums_cdevsw, usbd_driver_load, 0); -#endif diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c deleted file mode 100644 index 70c75166b2662..0000000000000 --- a/sys/dev/usb/usb.c +++ /dev/null @@ -1,418 +0,0 @@ -/* $NetBSD: usb.c,v 1.11 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * USB specifications and other documentation can be found at - * http://www.usb.org/developers/data/ and - * http://www.usb.org/developers/index.html . - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/ioccom.h> -#include <sys/uio.h> -#include <sys/conf.h> -#endif -#include <sys/poll.h> -#include <sys/proc.h> -#include <sys/select.h> - -#include <dev/usb/usb.h> - -#if defined(__FreeBSD__) -MALLOC_DEFINE(M_USB, "USB", "USB"); -MALLOC_DEFINE(M_USBDEV, "USBdev", "USB device"); - -#include "usb_if.h" -#endif /* defined(__FreeBSD__) */ - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usb_quirks.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -int usbdebug = 1; -int uhcidebug = 1; -int ohcidebug = 1; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -#define USBUNIT(dev) (minor(dev)) - -struct usb_softc { - bdevice sc_dev; /* base device */ - usbd_bus_handle sc_bus; /* USB controller */ - struct usbd_port sc_port; /* dummy port for root hub */ - char sc_running; - char sc_exploring; - struct selinfo sc_consel; /* waiting for connect change */ -}; - -#if defined(__NetBSD__) -int usbopen __P((dev_t, int, int, struct proc *)); -int usbclose __P((dev_t, int, int, struct proc *)); -int usbioctl __P((dev_t, u_long, caddr_t, int, struct proc *)); -int usbpoll __P((dev_t, int, struct proc *)); - -#elif defined(__FreeBSD__) -d_open_t usbopen; -d_close_t usbclose; -d_ioctl_t usbioctl; -int usbpoll __P((dev_t, int, struct proc *)); - -struct cdevsw usb_cdevsw = { - usbopen, usbclose, noread, nowrite, - usbioctl, nullstop, nullreset, nodevtotty, - usbpoll, nommap, nostrat, - "usb", NULL, -1 -}; -#endif - -usbd_status usb_discover __P((struct usb_softc *)); - -USB_DECLARE_DRIVER_INIT(usb, DEVMETHOD(bus_print_child, usbd_print_child)); - -USB_MATCH(usb) -{ - DPRINTF(("usbd_match\n")); - return (UMATCH_GENERIC); -} - -USB_ATTACH(usb) -{ -#if defined(__NetBSD__) - struct usb_softc *sc = (struct usb_softc *)self; -#elif defined(__FreeBSD__) - struct usb_softc *sc = device_get_softc(self); - void *aux = device_get_ivars(self); -#endif - usbd_device_handle dev; - usbd_status r; - -#if defined(__NetBSD__) - printf("\n"); -#elif defined(__FreeBSD__) - sc->sc_dev = self; -#endif - - DPRINTF(("usbd_attach\n")); - usbd_init(); - sc->sc_bus = aux; - sc->sc_bus->usbctl = sc; - sc->sc_running = 1; - sc->sc_bus->use_polling = 1; - sc->sc_port.power = USB_MAX_POWER; - r = usbd_new_device(&sc->sc_dev, sc->sc_bus, 0, 0, 0, &sc->sc_port); - - if (r == USBD_NORMAL_COMPLETION) { - dev = sc->sc_port.device; - if (!dev->hub) { - sc->sc_running = 0; - printf("%s: root device is not a hub\n", - USBDEVNAME(sc->sc_dev)); - USB_ATTACH_ERROR_RETURN; - } - sc->sc_bus->root_hub = dev; - dev->hub->explore(sc->sc_bus->root_hub); - } else { - printf("%s: root hub problem, error=%d\n", - USBDEVNAME(sc->sc_dev), r); - sc->sc_running = 0; - } - sc->sc_bus->use_polling = 0; - - USB_ATTACH_SUCCESS_RETURN; -} - -#if defined(__NetBSD__) -int -usbctlprint(aux, pnp) - void *aux; - const char *pnp; -{ - /* only "usb"es can attach to host controllers */ - if (pnp) - printf("usb at %s", pnp); - - return (UNCONF); -} -#endif - -int -usbopen(dev, flag, mode, p) - dev_t dev; - int flag, mode; - struct proc *p; -{ - USB_GET_SC_OPEN(usb, USBUNIT(dev), sc); - - if (sc == 0 || !sc->sc_running) - return (ENXIO); - - return (0); -} - -int -usbclose(dev, flag, mode, p) - dev_t dev; - int flag, mode; - struct proc *p; -{ - return (0); -} - -int -usbioctl(dev, cmd, data, flag, p) - dev_t dev; - u_long cmd; - caddr_t data; - int flag; - struct proc *p; -{ - USB_GET_SC(usb, USBUNIT(dev), sc); - - if (sc == 0 || !sc->sc_running) - return (ENXIO); - switch (cmd) { -#ifdef USB_DEBUG - case USB_SETDEBUG: - usbdebug = uhcidebug = ohcidebug = *(int *)data; - break; -#endif - case USB_DISCOVER: - usb_discover(sc); - break; - case USB_REQUEST: - { - struct usb_ctl_request *ur = (void *)data; - int len = UGETW(ur->request.wLength); - struct iovec iov; - struct uio uio; - void *ptr = 0; - int addr = ur->addr; - usbd_status r; - int error = 0; - - DPRINTF(("usbioctl: USB_REQUEST addr=%d len=%d\n", addr, len)); - if (len < 0 || len > 32768) - return (EINVAL); - if (addr < 0 || addr >= USB_MAX_DEVICES || - sc->sc_bus->devices[addr] == 0) - return (EINVAL); - if (len != 0) { - iov.iov_base = (caddr_t)ur->data; - iov.iov_len = len; - uio.uio_iov = &iov; - uio.uio_iovcnt = 1; - uio.uio_resid = len; - uio.uio_offset = 0; - uio.uio_segflg = UIO_USERSPACE; - uio.uio_rw = - ur->request.bmRequestType & UT_READ ? - UIO_READ : UIO_WRITE; - uio.uio_procp = p; - ptr = malloc(len, M_TEMP, M_WAITOK); - if (uio.uio_rw == UIO_WRITE) { - error = uiomove(ptr, len, &uio); - if (error) - goto ret; - } - } - r = usbd_do_request_flags(sc->sc_bus->devices[addr], - &ur->request, ptr, - ur->flags, &ur->actlen); - if (r) { - error = EIO; - goto ret; - } - if (len != 0) { - if (uio.uio_rw == UIO_READ) { - error = uiomove(ptr, len, &uio); - if (error) - goto ret; - } - } - ret: - if (ptr) - free(ptr, M_TEMP); - return (error); - } - - case USB_DEVICEINFO: - { - struct usb_device_info *di = (void *)data; - int addr = di->addr; - usbd_device_handle dev; - - if (addr < 1 || addr >= USB_MAX_DEVICES) - return (EINVAL); - dev = sc->sc_bus->devices[addr]; - if (dev == 0) - return (ENXIO); - usbd_fill_deviceinfo(dev, di); - break; - } - - case USB_DEVICESTATS: - *(struct usb_device_stats *)data = sc->sc_bus->stats; - break; - - default: - return (ENXIO); - } - return (0); -} - -int -usbpoll(dev, events, p) - dev_t dev; - int events; - struct proc *p; -{ - int revents, s; - USB_GET_SC(usb, USBUNIT(dev), sc); - - DPRINTFN(2, ("usbpoll: sc=%p events=0x%x\n", sc, events)); - s = splusb(); - revents = 0; - if (events & (POLLOUT | POLLWRNORM)) - if (sc->sc_bus->needs_explore) - revents |= events & (POLLOUT | POLLWRNORM); - DPRINTFN(2, ("usbpoll: revents=0x%x\n", revents)); - if (revents == 0) { - if (events & (POLLOUT | POLLWRNORM)) { - DPRINTFN(2, ("usbpoll: selrecord\n")); - selrecord(p, &sc->sc_consel); - } - } - splx(s); - return (revents); -} - -#if 0 -int -usb_bus_count() -{ - int i, n; - - for (i = n = 0; i < usb_cd.cd_ndevs; i++) - if (usb_cd.cd_devs[i]) - n++; - return (n); -} -#endif - -#if defined(__NetBSD__) -usbd_status -usb_get_bus_handle(n, h) - int n; - usbd_bus_handle *h; -{ - int i; - - for (i = 0; i < usb_cd.cd_ndevs; i++) - if (usb_cd.cd_devs[i] && n-- == 0) { - *h = usb_cd.cd_devs[i]; - return (USBD_NORMAL_COMPLETION); - } - return (USBD_INVAL); -} -#endif - -usbd_status -usb_discover(sc) - struct usb_softc *sc; -{ - int s; - - /* Explore device tree from the root */ - /* We need mutual exclusion while traversing the device tree. */ - s = splusb(); - while (sc->sc_exploring) - tsleep(&sc->sc_exploring, PRIBIO, "usbdis", 0); - sc->sc_exploring = 1; - sc->sc_bus->needs_explore = 0; - splx(s); - - sc->sc_bus->root_hub->hub->explore(sc->sc_bus->root_hub); - - s = splusb(); - sc->sc_exploring = 0; - wakeup(&sc->sc_exploring); - splx(s); - /* XXX should we start over if sc_needsexplore is set again? */ - return (0); -} - -void -usb_needs_explore(bus) - usbd_bus_handle bus; -{ - bus->needs_explore = 1; - selwakeup(&bus->usbctl->sc_consel); -} - -#if defined(__FreeBSD__) -int -usb_detach(device_t self) -{ - char *devinfo = (char *) device_get_desc(self); - - if (devinfo) { - device_set_desc(self, NULL); - free(devinfo, M_USB); - } - - return (0); -} - -DRIVER_MODULE(usb, root, usb_driver, usb_devclass, 0, 0); -#endif diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h deleted file mode 100644 index 17f0f0eeed715..0000000000000 --- a/sys/dev/usb/usb.h +++ /dev/null @@ -1,493 +0,0 @@ -/* $NetBSD: usb.h,v 1.17 1999/01/03 01:09:18 augustss Exp $ */ -/* FreeBSD $Id: usb.h,v 1.6 1999/01/07 23:31:37 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - - -#ifndef _USB_H_ -#define _USB_H_ - -#include <sys/types.h> -#if defined(__NetBSD__) -#include <sys/ioctl.h> -#endif - -#if defined(__NetBSD__) -#if defined(_KERNEL) -#include <dev/usb/usb_port.h> -#endif /* _KERNEL */ - -#elif defined(__FreeBSD__) -#include <sys/malloc.h> - -#if defined(KERNEL) -MALLOC_DECLARE(M_USB); -MALLOC_DECLARE(M_USBDEV); - -#include <dev/usb/usb_port.h> -#endif /* KERNEL */ -#endif /* __FreeBSD__ */ - - -#define USB_MAX_DEVICES 128 -#define USB_START_ADDR 0 - -#define USB_CONTROL_ENDPOINT 0 -#define USB_MAX_ENDPOINTS 16 - -#define USB_FRAMES_PER_SECOND 1000 - -/* - * The USB records contain some unaligned little-endian word - * components. The U[SG]ETW macros take care of both the alignment - * and endian problem and should always be used to access 16 bit - * values. - */ -typedef u_int8_t uByte; -typedef u_int8_t uWord[2]; -#define UGETW(w) ((w)[0] | ((w)[1] << 8)) -#define USETW(w,v) ((w)[0] = (u_int8_t)(v), (w)[1] = (u_int8_t)((v) >> 8)) -#define USETW2(w,h,l) ((w)[0] = (u_int8_t)(l), (w)[1] = (u_int8_t)(h)) -typedef u_int8_t uDWord[4]; -#define UGETDW(w) ((w)[0] | ((w)[1] << 8) | ((w)[2] << 16) | ((w)[3] << 24)) -#define USETDW(w,v) ((w)[0] = (u_int8_t)(v), \ - (w)[1] = (u_int8_t)((v) >> 8), \ - (w)[2] = (u_int8_t)((v) >> 16), \ - (w)[3] = (u_int8_t)((v) >> 24)) -/* - * On little-endian machines that can handle unanliged accesses - * (e.g. i386) these macros can be replaced by the following. - */ -#if 0 -#define UGETW(w) (*(u_int16_t *)(w)) -#define USETW(w,v) (*(u_int16_t *)(w) = (v)) -#endif - -typedef struct { - uByte bmRequestType; - uByte bRequest; - uWord wValue; - uWord wIndex; - uWord wLength; -} usb_device_request_t; - -#define UT_WRITE 0x00 -#define UT_READ 0x80 -#define UT_STANDARD 0x00 -#define UT_CLASS 0x20 -#define UT_VENDOR 0x40 -#define UT_DEVICE 0x00 -#define UT_INTERFACE 0x01 -#define UT_ENDPOINT 0x02 -#define UT_OTHER 0x03 - -#define UT_READ_DEVICE (UT_READ | UT_STANDARD | UT_DEVICE) -#define UT_READ_INTERFACE (UT_READ | UT_STANDARD | UT_INTERFACE) -#define UT_READ_ENDPOINT (UT_READ | UT_STANDARD | UT_ENDPOINT) -#define UT_WRITE_DEVICE (UT_WRITE | UT_STANDARD | UT_DEVICE) -#define UT_WRITE_INTERFACE (UT_WRITE | UT_STANDARD | UT_INTERFACE) -#define UT_WRITE_ENDPOINT (UT_WRITE | UT_STANDARD | UT_ENDPOINT) -#define UT_READ_CLASS_DEVICE (UT_READ | UT_CLASS | UT_DEVICE) -#define UT_READ_CLASS_INTERFACE (UT_READ | UT_CLASS | UT_INTERFACE) -#define UT_READ_CLASS_OTHER (UT_READ | UT_CLASS | UT_OTHER) -#define UT_WRITE_CLASS_DEVICE (UT_WRITE | UT_CLASS | UT_DEVICE) -#define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE) -#define UT_WRITE_CLASS_OTHER (UT_WRITE | UT_CLASS | UT_OTHER) -#define UT_READ_VENDOR_DEVICE (UT_READ | UT_VENDOR | UT_DEVICE) -#define UT_READ_VENDOR_INTERFACE (UT_READ | UT_VENDOR | UT_INTERFACE) -#define UT_READ_VENDOR_OTHER (UT_READ | UT_VENDOR | UT_OTHER) -#define UT_WRITE_VENDOR_DEVICE (UT_WRITE | UT_VENDOR | UT_DEVICE) -#define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE) -#define UT_WRITE_VENDOR_OTHER (UT_WRITE | UT_VENDOR | UT_OTHER) - -/* Requests */ -#define UR_GET_STATUS 0x00 -#define UR_CLEAR_FEATURE 0x01 -#define UR_SET_FEATURE 0x03 -#define UR_SET_ADDRESS 0x05 -#define UR_GET_DESCRIPTOR 0x06 -#define UDESC_DEVICE 1 -#define UDESC_CONFIG 2 -#define UDESC_STRING 3 -#define UDESC_INTERFACE 4 -#define UDESC_ENDPOINT 5 -#define UR_SET_DESCRIPTOR 0x07 -#define UR_GET_CONFIG 0x08 -#define UR_SET_CONFIG 0x09 -#define UR_GET_INTERFACE 0x0a -#define UR_SET_INTERFACE 0x0b -#define UR_SYNCH_FRAME 0x0c - -/* Feature numbers */ -#define UF_ENDPOINT_HALT 0 -#define UF_DEVICE_REMOTE_WAKEUP 1 - -#define USB_MAX_IPACKET 8 /* maximum size of the initial packet */ - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; -} usb_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord bcdUSB; - uByte bDeviceClass; - uByte bDeviceSubClass; - uByte bDeviceProtocol; - uByte bMaxPacketSize; - /* The fields below are not part of the initial descriptor. */ - uWord idVendor; - uWord idProduct; - uWord bcdDevice; - uByte iManufacturer; - uByte iProduct; - uByte iSerialNumber; - uByte bNumConfigurations; -} usb_device_descriptor_t; -#define USB_DEVICE_DESCRIPTOR_SIZE 18 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord wTotalLength; - uByte bNumInterface; - uByte bConfigurationValue; - uByte iConfiguration; - uByte bmAttributes; -#define UC_BUS_POWERED 0x80 -#define UC_SELF_POWERED 0x40 -#define UC_REMOTE_WAKEUP 0x20 - uByte bMaxPower; /* max current in 2 mA units */ -#define UC_POWER_FACTOR 2 -} usb_config_descriptor_t; -#define USB_CONFIG_DESCRIPTOR_SIZE 9 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bInterfaceNumber; - uByte bAlternateSetting; - uByte bNumEndpoints; - uByte bInterfaceClass; - uByte bInterfaceSubClass; - uByte bInterfaceProtocol; - uByte iInterface; -} usb_interface_descriptor_t; -#define USB_INTERFACE_DESCRIPTOR_SIZE 9 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bEndpointAddress; -#define UE_IN 0x80 -#define UE_OUT 0x00 -#define UE_ADDR 0x0f -#define UE_GET_ADDR(a) ((a) & UE_ADDR) -#define UE_GET_IN(a) (((a) >> 7) & 1) - uByte bmAttributes; -#define UE_XFERTYPE 0x03 -#define UE_CONTROL 0x00 -#define UE_ISOCHRONOUS 0x01 -#define UE_BULK 0x02 -#define UE_INTERRUPT 0x03 -#define UE_ISO_TYPE 0x0c -#define UE_ISO_ASYNC 0x04 -#define UE_ISO_ADAPT 0x08 -#define UE_ISO_SYNC 0x0c - uWord wMaxPacketSize; - uByte bInterval; -} usb_endpoint_descriptor_t; -#define USB_ENDPOINT_DESCRIPTOR_SIZE 7 - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uWord bString[127]; -} usb_string_descriptor_t; -#define USB_MAX_STRING_LEN 128 -#define USB_LANGUAGE_TABLE 0 /* # of the string language id table */ - -/* Hub specific request */ -#define UR_GET_BUS_STATE 0x02 - -/* Hub features */ -#define UHF_C_HUB_LOCAL_POWER 0 -#define UHF_C_HUB_OVER_CURRENT 1 -#define UHF_PORT_CONNECTION 0 -#define UHF_PORT_ENABLE 1 -#define UHF_PORT_SUSPEND 2 -#define UHF_PORT_OVER_CURRENT 3 -#define UHF_PORT_RESET 4 -#define UHF_PORT_POWER 8 -#define UHF_PORT_LOW_SPEED 9 -#define UHF_C_PORT_CONNECTION 16 -#define UHF_C_PORT_ENABLE 17 -#define UHF_C_PORT_SUSPEND 18 -#define UHF_C_PORT_OVER_CURRENT 19 -#define UHF_C_PORT_RESET 20 - -typedef struct { - uByte bDescLength; - uByte bDescriptorType; - uByte bNbrPorts; - uWord wHubCharacteristics; -#define UHD_PWR 0x03 -#define UHD_PWR_GANGED 0x00 -#define UHD_PWR_INDIVIDUAL 0x01 -#define UHD_PWR_NO_SWITCH 0x02 -#define UHD_COMPOUND 0x04 -#define UHD_OC 0x18 -#define UHD_OC_GLOBAL 0x00 -#define UHD_OC_INDIVIDUAL 0x08 -#define UHD_OC_NONE 0x10 - uByte bPwrOn2PwrGood; /* delay in 2 ms units */ -#define UHD_PWRON_FACTOR 2 - uByte bHubContrCurrent; - uByte DeviceRemovable[32]; /* max 255 ports */ -#define UHD_NOT_REMOV(desc, i) \ - (((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1) - /* deprecated uByte PortPowerCtrlMask[]; */ -} usb_hub_descriptor_t; -#define USB_HUB_DESCRIPTOR_SIZE 8 - -typedef struct { - uWord wStatus; -/* Device status flags */ -#define UDS_SELF_POWERED 0x0001 -#define UDS_REMOTE_WAKEUP 0x0002 -/* Endpoint status flags */ -#define UES_HALT 0x0001 -} usb_status_t; - -typedef struct { - uWord wHubStatus; -#define UHS_LOCAL_POWER 0x0001 -#define UHS_OVER_CURRENT 0x0002 - uWord wHubChange; -} usb_hub_status_t; - -typedef struct { - uWord wPortStatus; -#define UPS_CURRENT_CONNECT_STATUS 0x0001 -#define UPS_PORT_ENABLED 0x0002 -#define UPS_SUSPEND 0x0004 -#define UPS_OVERCURRENT_INDICATOR 0x0008 -#define UPS_RESET 0x0010 -#define UPS_PORT_POWER 0x0100 -#define UPS_LOW_SPEED 0x0200 - uWord wPortChange; -#define UPS_C_CONNECT_STATUS 0x0001 -#define UPS_C_PORT_ENABLED 0x0002 -#define UPS_C_SUSPEND 0x0004 -#define UPS_C_OVERCURRENT_INDICATOR 0x0008 -#define UPS_C_PORT_RESET 0x0010 -} usb_port_status_t; - -#define UDESC_CS_DEVICE 0x21 -#define UDESC_CS_CONFIG 0x22 -#define UDESC_CS_STRING 0x23 -#define UDESC_CS_INTERFACE 0x24 -#define UDESC_CS_ENDPOINT 0x25 - -#define UDESC_HUB 0x29 - -#define UCLASS_UNSPEC 0 -#define UCLASS_AUDIO 1 -#define USUBCLASS_AUDIOCONTROL 1 -#define USUBCLASS_AUDIOSTREAM 2 -#define UCLASS_CDC 2 /* communication */ -#define USUBCLASS_ABSTRACT_CONTROL_MODEL 2 -#define UPROTO_CDC_AT 1 -#define UCLASS_HID 3 -#define USUBCLASS_BOOT 1 -#define UCLASS_PRINTER 7 -#define USUBCLASS_PRINTER 1 -#define UPROTO_PRINTER_UNI 1 -#define UPROTO_PRINTER_BI 2 -#define UCLASS_HUB 9 -#define USUBCLASS_HUB 0 -#define UCLASS_DATA 10 - -#define USB_HUB_MAX_DEPTH 5 - -/* - * Minimum time a device needs to be powered down to go through - * a power cycle. XXX Are these time in the spec? - */ -#define USB_POWER_DOWN_TIME 200 /* ms */ -#define USB_PORT_POWER_DOWN_TIME 100 /* ms */ - -#if 0 -/* These are the values from the spec. */ -#define USB_PORT_RESET_DELAY 10 /* ms */ -#define USB_PORT_RESET_SETTLE 10 /* ms */ -#define USB_PORT_POWERUP_DELAY 100 /* ms */ -#define USB_SET_ADDRESS_SETTLE 2 /* ms */ -#else -/* Allow for marginal (i.e. non-conforming) devices. */ -#define USB_PORT_RESET_DELAY 20 /* ms */ -#define USB_PORT_RESET_RECOVERY 50 /* ms */ -#define USB_PORT_POWERUP_DELAY 200 /* ms */ -#define USB_SET_ADDRESS_SETTLE 10 /* ms */ -#endif - -#define USB_MIN_POWER 100 /* mA */ -#define USB_MAX_POWER 500 /* mA */ - - -#define USB_BUS_RESET_DELAY 100 /* ms XXX?*/ -#define USB_RESUME_DELAY 10 /* ms XXX?*/ - -/*** ioctl() related stuff ***/ - -struct usb_ctl_request { - int addr; - usb_device_request_t request; - void *data; - int flags; -/* XXX must match flags in usbdi.h */ -#define USBD_SHORT_XFER_OK 0x04 - int actlen; /* actual length transferred */ -}; - -struct usb_alt_interface { - int config_index; - int interface_index; - int alt_no; -}; - -#define USB_CURRENT_CONFIG_INDEX (-1) -#define USB_CURRENT_ALT_INDEX (-1) - -struct usb_config_desc { - int config_index; - usb_config_descriptor_t desc; -}; - -struct usb_interface_desc { - int config_index; - int interface_index; - int alt_index; - usb_interface_descriptor_t desc; -}; - -struct usb_endpoint_desc { - int config_index; - int interface_index; - int alt_index; - int endpoint_index; - usb_endpoint_descriptor_t desc; -}; - -struct usb_full_desc { - int config_index; - u_int size; - u_char *data; -}; - -struct usb_string_desc { - int string_index; - int language_id; - usb_string_descriptor_t desc; -}; - -struct usb_ctl_report_desc { - int size; - u_char data[1024]; /* filled data size will vary */ -}; - -struct usb_device_info { - u_int8_t addr; /* device address */ - char product[USB_MAX_STRING_LEN]; - char vendor[USB_MAX_STRING_LEN]; - char revision[8]; - u_int16_t productNo; - u_int16_t vendorNo; - u_int8_t class; - u_int8_t config; - u_int8_t lowspeed; - int power; /* power consumption in mA, 0 if selfpowered */ - int nports; - u_int8_t ports[16];/* hub only: addresses of devices on ports */ -#define USB_PORT_ENABLED 0xff -#define USB_PORT_SUSPENDED 0xfe -#define USB_PORT_POWERED 0xfd -#define USB_PORT_DISABLED 0xfc -}; - -struct usb_ctl_report { - int report; - u_char data[1024]; /* filled data size will vary */ -}; - -struct usb_device_stats { - u_long requests[4]; /* indexed by transfer type UE_* */ -}; - -/* USB controller */ -#define USB_REQUEST _IOWR('U', 1, struct usb_ctl_request) -#define USB_SETDEBUG _IOW ('U', 2, int) -#define USB_DISCOVER _IO ('U', 3) -#define USB_DEVICEINFO _IOWR('U', 4, struct usb_device_info) -#define USB_DEVICESTATS _IOR ('U', 5, struct usb_device_stats) - -/* Generic HID device */ -#define USB_GET_REPORT_DESC _IOR ('U', 21, struct usb_ctl_report_desc) -#define USB_SET_IMMED _IOW ('U', 22, int) -#define USB_GET_REPORT _IOWR('U', 23, struct usb_ctl_report) - -/* Generic USB device */ -#define USB_GET_CONFIG _IOR ('U', 100, int) -#define USB_SET_CONFIG _IOW ('U', 101, int) -#define USB_GET_ALTINTERFACE _IOWR('U', 102, struct usb_alt_interface) -#define USB_SET_ALTINTERFACE _IOWR('U', 103, struct usb_alt_interface) -#define USB_GET_NO_ALT _IOWR('U', 104, struct usb_alt_interface) -#define USB_GET_DEVICE_DESC _IOR ('U', 105, usb_device_descriptor_t) -#define USB_GET_CONFIG_DESC _IOWR('U', 106, struct usb_config_desc) -#define USB_GET_INTERFACE_DESC _IOWR('U', 107, struct usb_interface_desc) -#define USB_GET_ENDPOINT_DESC _IOWR('U', 108, struct usb_endpoint_desc) -#define USB_GET_FULL_DESC _IOWR('U', 109, struct usb_full_desc) -#define USB_GET_STRING_DESC _IOWR('U', 110, struct usb_string_desc) -#define USB_DO_REQUEST _IOWR('U', 111, struct usb_ctl_request) -#define USB_GET_DEVICEINFO _IOR ('U', 112, struct usb_device_info) -#define USB_SET_SHORT_XFER _IOW ('U', 113, int) - -#endif /* _USB_H_ */ diff --git a/sys/dev/usb/usb_if.m b/sys/dev/usb/usb_if.m deleted file mode 100644 index fa5649c555dad..0000000000000 --- a/sys/dev/usb/usb_if.m +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 1992-1998 Nick Hibma <hibma@skylink.it> -# 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, -# without modification, immediately at the beginning of the file. -# 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. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -# -# $Id$ -# - -# USB interface description -# - -INTERFACE usb; - -# The device should start probing for new children again -# -METHOD int reconfigure { - device_t dev; -}; - diff --git a/sys/dev/usb/usb_mem.h b/sys/dev/usb/usb_mem.h deleted file mode 100644 index f6ffb96879457..0000000000000 --- a/sys/dev/usb/usb_mem.h +++ /dev/null @@ -1,92 +0,0 @@ -/* $NetBSD: usb_mem.h,v 1.4 1999/01/09 12:16:54 augustss Exp $ */ -/* FreeBSD $Id: usb_mem.h,v 1.4 1999/01/07 23:31:38 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#if defined(__NetBSD__) -typedef struct usb_block_dma { - bus_dma_tag_t tag; - bus_dmamap_t map; - caddr_t kaddr; - bus_dma_segment_t segs[1]; - int nsegs; - size_t size; - size_t align; - int fullblock; - LIST_ENTRY(usb_block_dma) next; -} usb_dma_block_t; - -typedef struct { - usb_dma_block_t *block; - u_int offs; -} usb_dma_t; - -#define DMAADDR(dma) ((dma)->block->segs[0].ds_addr + (dma)->offs) -#define KERNADDR(dma) ((void *)((dma)->block->kaddr + (dma)->offs)) - -usbd_status usb_allocmem __P((bus_dma_tag_t, size_t, size_t, usb_dma_t *)); -void usb_freemem __P((bus_dma_tag_t, usb_dma_t *)); - -#elif defined(__FreeBSD__) - -/* - * FreeBSD does not have special functions for dma memory, so let's keep it - * simple for now. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/queue.h> -#include <sys/proc.h> -#include <sys/buf.h> -#include <sys/malloc.h> -#include <sys/kernel.h> -#include <vm/vm.h> -#include <vm/pmap.h> - -#include <machine/pmap.h> /* for vtophys */ - -typedef void * usb_dma_t; - -#define usb_allocmem(t,s,a,p) (*(p) = malloc(s, M_USB, M_NOWAIT), (*(p) == NULL? USBD_NOMEM: USBD_NORMAL_COMPLETION)) -#define usb_freemem(t,p) (free(*(p), M_USB)) - -#define DMAADDR(dma) (vtophys(*(dma))) -#define KERNADDR(dma) ((void *) *(dma)) -#endif - diff --git a/sys/dev/usb/usb_port.h b/sys/dev/usb/usb_port.h deleted file mode 100644 index d7bd4f0040ddf..0000000000000 --- a/sys/dev/usb/usb_port.h +++ /dev/null @@ -1,217 +0,0 @@ -/* $NetBSD: usb_port.h,v 1.5 1999/01/08 11:58:25 augustss Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - - -/* - * Macro's to cope with the differences between operating systems. - */ - -/* - * NetBSD - */ - -#if defined(__NetBSD__) -#include "opt_usbverbose.h" - -#define USBDEVNAME(bdev) ((bdev).dv_xname) - -typedef struct device bdevice; /* base device */ - -#define usb_timeout(f, d, t, h) timeout((f), (d), (t)) -#define usb_untimeout(f, d, h) untimeout((f), (d)) - -#define USB_DECLARE_DRIVER_INIT(dname, _2) \ -int __CONCAT(dname,_match) __P((struct device *, struct cfdata *, void *)); \ -void __CONCAT(dname,_attach) __P((struct device *, struct device *, void *)); \ -\ -extern struct cfdriver __CONCAT(dname,_cd); \ -\ -struct cfattach __CONCAT(dname,_ca) = { \ - sizeof(struct __CONCAT(dname,_softc)), \ - __CONCAT(dname,_match), \ - __CONCAT(dname,_attach) \ -} - -#define USB_MATCH(dname) \ -int \ -__CONCAT(dname,_match)(parent, match, aux) \ - struct device *parent; \ - struct cfdata *match; \ - void *aux; - -#define USB_MATCH_START(dname, uaa) \ - struct usb_attach_arg *uaa = aux - -#define USB_ATTACH(dname) \ -void \ -__CONCAT(dname,_attach)(parent, self, aux) \ - struct device *parent; \ - struct device *self; \ - void *aux; - -#define USB_ATTACH_START(dname, sc, uaa) \ - struct __CONCAT(dname,_softc) *sc = \ - (struct __CONCAT(dname,_softc) *)self; \ - struct usb_attach_arg *uaa = aux - -/* Returns from attach */ -#define USB_ATTACH_ERROR_RETURN return -#define USB_ATTACH_SUCCESS_RETURN return - -#define USB_ATTACH_SETUP printf("\n") - -#define USB_GET_SC_OPEN(dname, unit, sc) \ - struct __CONCAT(dname,_softc) *sc; \ - if (unit >= __CONCAT(dname,_cd).cd_ndevs) \ - return (ENXIO); \ - sc = __CONCAT(dname,_cd).cd_devs[unit]; \ - if (!sc) \ - return (ENXIO) - -#define USB_GET_SC(dname, unit, sc) \ - struct __CONCAT(dname,_softc) *sc = __CONCAT(dname,_cd).cd_devs[unit] - -#define USB_DO_ATTACH(dev, bdev, parent, args, print, sub) \ - ((dev)->softc = config_found_sm(parent, args, print, sub)) - - - - -#elif defined(__FreeBSD__) -/* - * FreeBSD - */ - -#include "opt_usb.h" -/* - * The following is not a type def to avoid error messages - * because of includes in the wrong order. - */ -#define bdevice device_t -#define USBDEVNAME(bdev) usbd_devname(&bdev) - -/* XXX Change this when FreeBSD has memset - */ -#define memset(d, v, s) \ - do{ \ - if ((v) == 0) \ - bzero((d), (s)); \ - else \ - panic("Non zero filler for memset, cannot handle!"); \ - } while (0) - - -#define usb_timeout(f, d, t, h) ((h) = timeout((f), (d), (t))) -#define usb_untimeout(f, d, h) untimeout((f), (d), (h)) - -#define USB_DECLARE_DRIVER_INIT(dname, init...) \ -static device_probe_t __CONCAT(dname,_match); \ -static device_attach_t __CONCAT(dname,_attach); \ -static device_detach_t __CONCAT(dname,_detach); \ -\ -static devclass_t __CONCAT(dname,_devclass); \ -\ -static device_method_t __CONCAT(dname,_methods)[] = { \ - DEVMETHOD(device_probe, __CONCAT(dname,_match)), \ - DEVMETHOD(device_attach, __CONCAT(dname,_attach)), \ - DEVMETHOD(device_detach, __CONCAT(dname,_detach)), \ - init, \ - {0,0} \ -}; \ -\ -static driver_t __CONCAT(dname,_driver) = { \ - #dname, \ - __CONCAT(dname,_methods), \ - DRIVER_TYPE_MISC, \ - sizeof(struct __CONCAT(dname,_softc)) \ -} - -#define USB_MATCH(dname) \ -static int \ -__CONCAT(dname,_match)(device_t device) - -#define USB_MATCH_START(dname, uaa) \ - struct usb_attach_arg *uaa = device_get_ivars(device) - -#define USB_ATTACH(dname) \ -static int \ -__CONCAT(dname,_attach)(device_t self) - -#define USB_ATTACH_START(dname, sc, uaa) \ - struct __CONCAT(dname,_softc) *sc = device_get_softc(self); \ - struct usb_attach_arg *uaa = device_get_ivars(self) - -/* Returns from attach */ -#define USB_ATTACH_ERROR_RETURN return ENXIO -#define USB_ATTACH_SUCCESS_RETURN return 0 - -#define USB_ATTACH_SETUP \ - usbd_device_set_desc(self, devinfo); \ - sc->sc_dev = self - -#define USB_GET_SC_OPEN(dname, unit, sc) \ - struct __CONCAT(dname,_softc) *sc = \ - devclass_get_softc(__CONCAT(dname,_devclass), unit); \ - if (!sc) \ - return (ENXIO) - -#define USB_GET_SC(dname, unit, sc) \ - struct __CONCAT(dname,_softc) *sc = \ - devclass_get_softc(__CONCAT(dname,_devclass), unit) - -#define USB_DO_ATTACH(dev, bdev, parent, args, print, sub) \ - (device_probe_and_attach((bdev)) == 0 ? ((dev)->softc = (bdev)) : 0) - -/* conversion from one type of queue to the other */ -#define SIMPLEQ_REMOVE_HEAD STAILQ_REMOVE_HEAD_UNTIL -#define SIMPLEQ_INSERT_HEAD STAILQ_INSERT_HEAD -#define SIMPLEQ_INSERT_TAIL STAILQ_INSERT_TAIL -#define SIMPLEQ_NEXT STAILQ_NEXT -#define SIMPLEQ_FIRST STAILQ_FIRST -#define SIMPLEQ_HEAD STAILQ_HEAD -#define SIMPLEQ_INIT STAILQ_INIT -#define SIMPLEQ_ENTRY STAILQ_ENTRY - -#endif /* __FreeBSD__ */ - - - -#define USB_DECLARE_DRIVER(dname) \ - USB_DECLARE_DRIVER_INIT(dname, {0,0} ) diff --git a/sys/dev/usb/usb_quirks.c b/sys/dev/usb/usb_quirks.c deleted file mode 100644 index e7c8208abce19..0000000000000 --- a/sys/dev/usb/usb_quirks.c +++ /dev/null @@ -1,94 +0,0 @@ -/* $NetBSD: usb_quirks.c,v 1.8 1999/01/08 11:58:25 augustss Exp $ */ -/* FreeBSD $Id: usb_quirks.c,v 1.5 1999/01/07 23:31:39 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#if defined(__FreeBSD__) -#include <sys/bus.h> -#endif - -#include <dev/usb/usb.h> - -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> - -#ifdef USB_DEBUG -extern int usbdebug; -#endif - -struct usbd_quirk_entry { - u_int16_t idVendor; - u_int16_t idProduct; - u_int16_t bcdDevice; - struct usbd_quirks quirks; -} quirks[] = { - { USB_VENDOR_GENIUS, USB_PRODUCT_GENIUS_NICHE, 0x100, { UQ_NO_SET_PROTO}}, - { USB_VENDOR_INSIDEOUT,USB_PRODUCT_INSIDEOUT_EDGEPORT4, - 0x094, { UQ_SWAP_UNICODE}}, - { USB_VENDOR_UNIXTAR, USB_PRODUCT_UNIXTAR_UTUSB41, 0x100, { UQ_HUB_POWER }}, - { USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932, 0x100, { UQ_NO_STRINGS }}, - { USB_VENDOR_ADS, USB_PRODUCT_ADS_ENET, 0x002, { UQ_NO_STRINGS }}, - { USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1, 0x101, { UQ_NO_STRINGS }}, - { USB_VENDOR_JAZZ, USB_PRODUCT_JAZZ_J6502, 0x0a2, { UQ_BAD_ADC }}, - { 0, 0, 0, { 0 } } -}; - -struct usbd_quirks usbd_no_quirk = { 0 }; - -struct usbd_quirks * -usbd_find_quirk(d) - usb_device_descriptor_t *d; -{ - struct usbd_quirk_entry *t; - - for (t = quirks; t->idVendor != 0; t++) { - if (t->idVendor == UGETW(d->idVendor) && - t->idProduct == UGETW(d->idProduct) && - t->bcdDevice == UGETW(d->bcdDevice)) - break; - } -#ifdef USB_DEBUG - if (usbdebug && t->quirks.uq_flags) - printf("usbd_find_quirk 0x%04x/0x%04x/%x: %d\n", - UGETW(d->idVendor), UGETW(d->idProduct), - UGETW(d->bcdDevice), t->quirks.uq_flags); -#endif - return (&t->quirks); -} diff --git a/sys/dev/usb/usb_quirks.h b/sys/dev/usb/usb_quirks.h deleted file mode 100644 index 07935d58143f6..0000000000000 --- a/sys/dev/usb/usb_quirks.h +++ /dev/null @@ -1,53 +0,0 @@ -/* $NetBSD: usb_quirks.h,v 1.5 1998/12/29 15:23:59 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -struct usbd_quirks { - u_int32_t uq_flags; /* Device problems: */ -#define UQ_NO_SET_PROTO 0x01 /* cannot handle SET PROTOCOL. */ -#define UQ_SWAP_UNICODE 0x02 /* has some Unicode strings swapped. */ -#define UQ_HUB_POWER 0x04 /* does not respond correctly to get - device status; use get hub status. */ -#define UQ_NO_STRINGS 0x08 /* string descriptors are broken. */ -#define UQ_BAD_ADC 0x10 /* bad audio spec version number. */ -}; - -extern struct usbd_quirks usbd_no_quirk; - -struct usbd_quirks *usbd_find_quirk __P((usb_device_descriptor_t *)); diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c deleted file mode 100644 index d903c07951642..0000000000000 --- a/sys/dev/usb/usb_subr.c +++ /dev/null @@ -1,1127 +0,0 @@ -/* $NetBSD: usb_subr.c,v 1.27 1999/01/08 11:58:25 augustss Exp $ */ -/* FreeBSD $Id: usb_subr.c,v 1.6 1999/01/07 23:31:40 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#elif defined(__FreeBSD__) -#include <sys/module.h> -#include <sys/bus.h> -#endif -#include <sys/proc.h> -#include <sys/select.h> - -#include <dev/usb/usb.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdivar.h> -#include <dev/usb/usbdevs.h> -#include <dev/usb/usb_quirks.h> - -#if defined(__FreeBSD__) -#include <machine/clock.h> -#define delay(d) DELAY(d) -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -extern int usbdebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -static usbd_status usbd_set_config __P((usbd_device_handle, int)); -char *usbd_get_string __P((usbd_device_handle, int, char *)); -int usbd_getnewaddr __P((usbd_bus_handle bus)); -#if defined(__NetBSD__) -int usbd_print __P((void *aux, const char *pnp)); -int usbd_submatch __P((bdevice *, struct cfdata *cf, void *)); -#endif -void usbd_free_iface_data __P((usbd_device_handle dev, int ifcno)); -void usbd_kill_pipe __P((usbd_pipe_handle)); -usbd_status usbd_probe_and_attach - __P((bdevice *parent, usbd_device_handle dev, int port, int addr)); - - -#ifdef USBVERBOSE -typedef u_int16_t usb_vendor_id_t; -typedef u_int16_t usb_product_id_t; - -/* - * Descriptions of of known vendors and devices ("products"). - */ -struct usb_knowndev { - usb_vendor_id_t vendor; - usb_product_id_t product; - int flags; - char *vendorname, *productname; -}; -#define USB_KNOWNDEV_NOPROD 0x01 /* match on vendor only */ - -#include <dev/usb/usbdevs_data.h> -#endif /* USBVERBOSE */ - -#ifdef USB_DEBUG -char *usbd_error_strs[] = { - "NORMAL_COMPLETION", - "IN_PROGRESS", - "PENDING_REQUESTS", - "NOT_STARTED", - "INVAL", - "IS_IDLE", - "NOMEM", - "CANCELLED", - "BAD_ADDRESS", - "IN_USE", - "INTERFACE_NOT_ACTIVE", - "NO_ADDR", - "SET_ADDR_FAILED", - "NO_POWER", - "TOO_DEEP", - "IOERROR", - "NOT_CONFIGURED", - "TIMEOUT", - "SHORT_XFER", - "STALLED", - "XXX", -}; -#endif - -usbd_status -usbd_get_string_desc(dev, sindex, langid, sdesc) - usbd_device_handle dev; - int sindex; - int langid; - usb_string_descriptor_t *sdesc; -{ - usb_device_request_t req; - usbd_status r; - - req.bmRequestType = UT_READ_DEVICE; - req.bRequest = UR_GET_DESCRIPTOR; - USETW2(req.wValue, UDESC_STRING, sindex); - USETW(req.wIndex, langid); - USETW(req.wLength, 1); /* only size byte first */ - r = usbd_do_request(dev, &req, sdesc); - if (r != USBD_NORMAL_COMPLETION) - return (r); - USETW(req.wLength, sdesc->bLength); /* the whole string */ - return (usbd_do_request(dev, &req, sdesc)); -} - -char * -usbd_get_string(dev, si, buf) - usbd_device_handle dev; - int si; - char *buf; -{ - int swap = dev->quirks->uq_flags & UQ_SWAP_UNICODE; - usb_string_descriptor_t us; - char *s; - int i, n; - u_int16_t c; - usbd_status r; - - if (si == 0) - return (0); - if (dev->quirks->uq_flags & UQ_NO_STRINGS) - return (0); - if (dev->langid == USBD_NOLANG) { - /* Set up default language */ - r = usbd_get_string_desc(dev, USB_LANGUAGE_TABLE, 0, &us); - if (r != USBD_NORMAL_COMPLETION || us.bLength < 4) { - dev->langid = 0; /* Well, just pick English then */ - } else { - /* Pick the first language as the default. */ - dev->langid = UGETW(us.bString[0]); - } - } - r = usbd_get_string_desc(dev, si, dev->langid, &us); - if (r != USBD_NORMAL_COMPLETION) - return (0); - s = buf; - n = us.bLength / 2 - 1; - for (i = 0; i < n; i++) { - c = UGETW(us.bString[i]); - /* Convert from Unicode, handle buggy strings. */ - if ((c & 0xff00) == 0) - *s++ = c; - else if ((c & 0x00ff) == 0 && swap) - *s++ = c >> 8; - else - *s++ = '?'; - } - *s++ = 0; - return buf; -} - -void -usbd_devinfo_vp(dev, v, p) - usbd_device_handle dev; - char *v, *p; -{ - usb_device_descriptor_t *udd = &dev->ddesc; - char *vendor = 0, *product = 0; -#ifdef USBVERBOSE - struct usb_knowndev *kdp; -#endif - - vendor = usbd_get_string(dev, udd->iManufacturer, v); - product = usbd_get_string(dev, udd->iProduct, p); -#ifdef USBVERBOSE - if (!vendor) { - for(kdp = usb_knowndevs; - kdp->vendorname != NULL; - kdp++) { - if (kdp->vendor == UGETW(udd->idVendor) && - (kdp->product == UGETW(udd->idProduct) || - (kdp->flags & USB_KNOWNDEV_NOPROD) != 0)) - break; - } - if (kdp->vendorname == NULL) - vendor = product = NULL; - else { - vendor = kdp->vendorname; - product = (kdp->flags & USB_KNOWNDEV_NOPROD) == 0 ? - kdp->productname : NULL; - } - } -#endif - if (vendor) - strcpy(v, vendor); - else - sprintf(v, "vendor 0x%04x", UGETW(udd->idVendor)); - if (product) - strcpy(p, product); - else - sprintf(p, "product 0x%04x", UGETW(udd->idProduct)); -} - -int -usbd_printBCD(cp, bcd) - char *cp; - int bcd; -{ - return (sprintf(cp, "%x.%02x", bcd >> 8, bcd & 0xff)); -} - -void -usbd_devinfo(dev, showclass, cp) - usbd_device_handle dev; - int showclass; - char *cp; -{ - usb_device_descriptor_t *udd = &dev->ddesc; - char vendor[USB_MAX_STRING_LEN]; - char product[USB_MAX_STRING_LEN]; - int bcdDevice, bcdUSB; - - usbd_devinfo_vp(dev, vendor, product); - cp += sprintf(cp, "%s %s", vendor, product); - if (showclass) - cp += sprintf(cp, ", class %d/%d", - udd->bDeviceClass, udd->bDeviceSubClass); - bcdUSB = UGETW(udd->bcdUSB); - bcdDevice = UGETW(udd->bcdDevice); - cp += sprintf(cp, ", rev "); - cp += usbd_printBCD(cp, bcdUSB); - *cp++ = '/'; - cp += usbd_printBCD(cp, bcdDevice); - cp += sprintf(cp, ", addr %d", dev->address); - *cp = 0; -} - -/* Delay for a certain number of ms */ -void -usb_delay_ms(bus, ms) - usbd_bus_handle bus; - u_int ms; -{ - /* Wait at least two clock ticks so we know the time has passed. */ - if (bus->use_polling) - delay((ms+1) * 1000); - else - tsleep(&ms, PRIBIO, "usbdly", (ms*hz+999)/1000 + 1); -} - -/* Delay given a device handle. */ -void -usbd_delay_ms(dev, ms) - usbd_device_handle dev; - u_int ms; -{ - usb_delay_ms(dev->bus, ms); -} - -usbd_status -usbd_reset_port(dev, port, ps) - usbd_device_handle dev; - int port; - usb_port_status_t *ps; -{ - usb_device_request_t req; - usbd_status r; - int n; - - req.bmRequestType = UT_WRITE_CLASS_OTHER; - req.bRequest = UR_SET_FEATURE; - USETW(req.wValue, UHF_PORT_RESET); - USETW(req.wIndex, port); - USETW(req.wLength, 0); - r = usbd_do_request(dev, &req, 0); - DPRINTFN(1,("usbd_reset_port: port %d reset done, error=%d(%s)\n", - port, r, usbd_error_strs[r])); - if (r != USBD_NORMAL_COMPLETION) - return (r); - n = 10; - do { - /* Wait for device to recover from reset. */ - usbd_delay_ms(dev, USB_PORT_RESET_DELAY); - r = usbd_get_port_status(dev, port, ps); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("usbd_reset_port: get status failed %d\n",r)); - return (r); - } - } while ((UGETW(ps->wPortChange) & UPS_C_PORT_RESET) == 0 && --n > 0); - if (n == 0) { - printf("usbd_reset_port: timeout\n"); - return (USBD_IOERROR); - } - r = usbd_clear_port_feature(dev, port, UHF_C_PORT_RESET); -#ifdef USB_DEBUG - if (r != USBD_NORMAL_COMPLETION) - DPRINTF(("usbd_reset_port: clear port feature failed %d\n",r)); -#endif - - /* Wait for the device to recover from reset. */ - usbd_delay_ms(dev, USB_PORT_RESET_RECOVERY); - return (r); -} - -usb_interface_descriptor_t * -usbd_find_idesc(cd, ifaceidx, altidx) - usb_config_descriptor_t *cd; - int ifaceidx; - int altidx; -{ - char *p = (char *)cd; - char *end = p + UGETW(cd->wTotalLength); - usb_interface_descriptor_t *d; - int curidx, lastidx, curaidx = 0; - - for (curidx = lastidx = -1; p < end; ) { - d = (usb_interface_descriptor_t *)p; - DPRINTFN(4,("usbd_find_idesc: idx=%d(%d) altidx=%d(%d) len=%d " - "type=%d\n", - ifaceidx, curidx, altidx, curaidx, - d->bLength, d->bDescriptorType)); - if (d->bLength == 0) /* bad descriptor */ - break; - p += d->bLength; - if (p <= end && d->bDescriptorType == UDESC_INTERFACE) { - if (d->bInterfaceNumber != lastidx) { - lastidx = d->bInterfaceNumber; - curidx++; - curaidx = 0; - } else - curaidx++; - if (ifaceidx == curidx && altidx == curaidx) - return (d); - } - } - return (0); -} - -usb_endpoint_descriptor_t * -usbd_find_edesc(cd, ifaceidx, altidx, endptidx) - usb_config_descriptor_t *cd; - int ifaceidx; - int altidx; - int endptidx; -{ - char *p = (char *)cd; - char *end = p + UGETW(cd->wTotalLength); - usb_interface_descriptor_t *d; - usb_endpoint_descriptor_t *e; - int curidx; - - d = usbd_find_idesc(cd, ifaceidx, altidx); - if (!d) - return (0); - if (endptidx >= d->bNumEndpoints) /* quick exit */ - return (0); - - curidx = -1; - for (p = (char *)d + d->bLength; p < end; ) { - e = (usb_endpoint_descriptor_t *)p; - if (e->bLength == 0) /* bad descriptor */ - break; - p += e->bLength; - if (p <= end && e->bDescriptorType == UDESC_INTERFACE) - return (0); - if (p <= end && e->bDescriptorType == UDESC_ENDPOINT) { - curidx++; - if (curidx == endptidx) - return (e); - } - } - return (0); -} - -usbd_status -usbd_fill_iface_data(dev, ifaceidx, altidx) - usbd_device_handle dev; - int ifaceidx; - int altidx; -{ - usbd_interface_handle ifc = &dev->ifaces[ifaceidx]; - char *p, *end; - int endpt, nendpt; - - DPRINTFN(4,("usbd_fill_iface_data: ifaceidx=%d altidx=%d\n", - ifaceidx, altidx)); - ifc->device = dev; - ifc->idesc = usbd_find_idesc(dev->cdesc, ifaceidx, altidx); - if (ifc->idesc == 0) - return (USBD_INVAL); - ifc->index = ifaceidx; - ifc->altindex = altidx; - nendpt = ifc->idesc->bNumEndpoints; - DPRINTFN(10,("usbd_fill_iface_data: found idesc n=%d\n", nendpt)); - if (nendpt != 0) { - ifc->endpoints = malloc(nendpt * sizeof(struct usbd_endpoint), - M_USB, M_NOWAIT); - if (ifc->endpoints == 0) - return (USBD_NOMEM); - } else - ifc->endpoints = 0; - ifc->priv = 0; - p = (char *)ifc->idesc + ifc->idesc->bLength; - end = (char *)dev->cdesc + UGETW(dev->cdesc->wTotalLength); -#define ed ((usb_endpoint_descriptor_t *)p) - for (endpt = 0; endpt < nendpt; endpt++) { - DPRINTFN(10,("usbd_fill_iface_data: endpt=%d\n", endpt)); - for (; p < end; p += ed->bLength) { - ed = (usb_endpoint_descriptor_t *)p; - DPRINTFN(10,("usbd_fill_iface_data: p=%p end=%p " - "len=%d type=%d\n", - p, end, ed->bLength, ed->bDescriptorType)); - if (p + ed->bLength <= end && ed->bLength != 0 && - ed->bDescriptorType == UDESC_ENDPOINT) - goto found; - if (ed->bDescriptorType == UDESC_INTERFACE || - ed->bLength == 0) - break; - } - /* passed end, or bad desc */ - goto bad; - found: - ifc->endpoints[endpt].edesc = ed; - ifc->endpoints[endpt].state = USBD_ENDPOINT_ACTIVE; - ifc->endpoints[endpt].refcnt = 0; - ifc->endpoints[endpt].toggle = 0; - p += ed->bLength; - } -#undef ed - LIST_INIT(&ifc->pipes); - ifc->state = USBD_INTERFACE_ACTIVE; - return (USBD_NORMAL_COMPLETION); - - bad: - free(ifc->endpoints, M_USB); - return (USBD_INVAL); -} - -void -usbd_free_iface_data(dev, ifcno) - usbd_device_handle dev; - int ifcno; -{ - usbd_interface_handle ifc = &dev->ifaces[ifcno]; - if (ifc->endpoints) - free(ifc->endpoints, M_USB); -} - -static usbd_status -usbd_set_config(dev, conf) - usbd_device_handle dev; - int conf; -{ - usb_device_request_t req; - - req.bmRequestType = UT_WRITE_DEVICE; - req.bRequest = UR_SET_CONFIG; - USETW(req.wValue, conf); - USETW(req.wIndex, 0); - USETW(req.wLength, 0); - return (usbd_do_request(dev, &req, 0)); -} - -usbd_status -usbd_set_config_no(dev, no, msg) - usbd_device_handle dev; - int no; - int msg; -{ - int index; - usb_config_descriptor_t cd; - usbd_status r; - - DPRINTFN(5,("usbd_set_config_no: %d\n", no)); - /* Figure out what config index to use. */ - for (index = 0; index < dev->ddesc.bNumConfigurations; index++) { - r = usbd_get_config_desc(dev, index, &cd); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (cd.bConfigurationValue == no) - return (usbd_set_config_index(dev, index, msg)); - } - return (USBD_INVAL); -} - -usbd_status -usbd_set_config_index(dev, index, msg) - usbd_device_handle dev; - int index; - int msg; -{ - usb_status_t ds; - usb_hub_status_t hs; - usb_config_descriptor_t cd, *cdp; - usbd_status r; - int ifcidx, nifc, len, selfpowered, power; - - DPRINTFN(5,("usbd_set_config_index: dev=%p index=%d\n", dev, index)); - - /* XXX check that all interfaces are idle */ - if (dev->config != 0) { - DPRINTF(("usbd_set_config_index: free old config\n")); - /* Free all configuration data structures. */ - nifc = dev->cdesc->bNumInterface; - for (ifcidx = 0; ifcidx < nifc; ifcidx++) - usbd_free_iface_data(dev, ifcidx); - free(dev->ifaces, M_USB); - free(dev->cdesc, M_USB); - dev->ifaces = 0; - dev->cdesc = 0; - dev->config = 0; - dev->state = USBD_DEVICE_ADDRESSED; - } - - /* Figure out what config number to use. */ - r = usbd_get_config_desc(dev, index, &cd); - if (r != USBD_NORMAL_COMPLETION) - return (r); - len = UGETW(cd.wTotalLength); - cdp = malloc(len, M_USB, M_NOWAIT); - if (cdp == 0) - return (USBD_NOMEM); - r = usbd_get_desc(dev, UDESC_CONFIG, index, len, cdp); - if (r != USBD_NORMAL_COMPLETION) - goto bad; - if (cdp->bDescriptorType != UDESC_CONFIG) { - DPRINTFN(-1,("usbd_set_config_index: bad desc %d\n", - cdp->bDescriptorType)); - r = USBD_INVAL; - goto bad; - } - selfpowered = 0; - if (cdp->bmAttributes & UC_SELF_POWERED) { - /* May be self powered. */ - if (cdp->bmAttributes & UC_BUS_POWERED) { - /* Must ask device. */ - if (dev->quirks->uq_flags & UQ_HUB_POWER) { - /* Buggy hub, use hub descriptor. */ - r = usbd_get_hub_status(dev, &hs); - if (r == USBD_NORMAL_COMPLETION && - !(UGETW(hs.wHubStatus) & UHS_LOCAL_POWER)) - selfpowered = 1; - } else { - r = usbd_get_device_status(dev, &ds); - if (r == USBD_NORMAL_COMPLETION && - (UGETW(ds.wStatus) & UDS_SELF_POWERED)) - selfpowered = 1; - } - DPRINTF(("usbd_set_config_index: status=0x%04x, " - "error=%d(%s)\n", - UGETW(ds.wStatus), r, usbd_error_strs[r])); - } else - selfpowered = 1; - } - DPRINTF(("usbd_set_config_index: (addr %d) attr=0x%02x, " - "selfpowered=%d, power=%d, powerquirk=%x\n", - dev->address, cdp->bmAttributes, - selfpowered, cdp->bMaxPower * 2, - dev->quirks->uq_flags & UQ_HUB_POWER)); -#ifdef USB_DEBUG - if (!dev->powersrc) { - printf("usbd_set_config_index: No power source?\n"); - return (USBD_IOERROR); - } -#endif - power = cdp->bMaxPower * 2; - if (power > dev->powersrc->power) { - /* XXX print nicer message. */ - if (msg) - printf("%s: device addr %d (config %d) exceeds power " - "budget, %d mA > %d mA\n", - USBDEVNAME(dev->bus->bdev), dev->address, - cdp->bConfigurationValue, - power, dev->powersrc->power); - r = USBD_NO_POWER; - goto bad; - } - dev->power = power; - dev->self_powered = selfpowered; - - DPRINTF(("usbd_set_config_index: set config %d\n", - cdp->bConfigurationValue)); - r = usbd_set_config(dev, cdp->bConfigurationValue); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("usbd_set_config_index: setting config=%d failed, " - "error=%d(%s)\n", - cdp->bConfigurationValue, r, usbd_error_strs[r])); - goto bad; - } - DPRINTF(("usbd_set_config_index: setting new config %d\n", - cdp->bConfigurationValue)); - nifc = cdp->bNumInterface; - dev->ifaces = malloc(nifc * sizeof(struct usbd_interface), - M_USB, M_NOWAIT); - if (dev->ifaces == 0) { - r = USBD_NOMEM; - goto bad; - } - DPRINTFN(5,("usbd_set_config_index: dev=%p cdesc=%p\n", dev, cdp)); - dev->cdesc = cdp; - dev->config = cdp->bConfigurationValue; - dev->state = USBD_DEVICE_CONFIGURED; - for (ifcidx = 0; ifcidx < nifc; ifcidx++) { - r = usbd_fill_iface_data(dev, ifcidx, 0); - if (r != USBD_NORMAL_COMPLETION) { - while (--ifcidx >= 0) - usbd_free_iface_data(dev, ifcidx); - goto bad; - } - } - - return (USBD_NORMAL_COMPLETION); - - bad: - free(cdp, M_USB); - return (r); -} - -/* XXX add function for alternate settings */ - -usbd_status -usbd_setup_pipe(dev, iface, ep, pipe) - usbd_device_handle dev; - usbd_interface_handle iface; - struct usbd_endpoint *ep; - usbd_pipe_handle *pipe; -{ - usbd_pipe_handle p; - usbd_status r; - - DPRINTFN(1,("usbd_setup_pipe: dev=%p iface=%p ep=%p pipe=%p\n", - dev, iface, ep, pipe)); - p = malloc(dev->bus->pipe_size, M_USB, M_NOWAIT); - if (p == 0) - return (USBD_NOMEM); - p->device = dev; - p->iface = iface; - p->state = USBD_PIPE_ACTIVE; - p->endpoint = ep; - ep->refcnt++; - p->refcnt = 1; - p->intrreqh = 0; - p->running = 0; - SIMPLEQ_INIT(&p->queue); - r = dev->bus->open_pipe(p); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1,("usbd_setup_pipe: endpoint=0x%x failed, error=%d" - "(%s)\n", - ep->edesc->bEndpointAddress, r, usbd_error_strs[r])); - free(p, M_USB); - return (r); - } - *pipe = p; - return (USBD_NORMAL_COMPLETION); -} - -/* Abort the device control pipe. */ -void -usbd_kill_pipe(pipe) - usbd_pipe_handle pipe; -{ - pipe->methods->close(pipe); - pipe->endpoint->refcnt--; - free(pipe, M_USB); -} - -int -usbd_getnewaddr(bus) - usbd_bus_handle bus; -{ - int addr; - - for (addr = 1; addr < USB_MAX_DEVICES; addr++) - if (bus->devices[addr] == 0) - return (addr); - return (-1); -} - - -usbd_status -usbd_probe_and_attach(parent, dev, port, addr) - bdevice *parent; - usbd_device_handle dev; - int port; - int addr; -{ - struct usb_attach_arg uaa; - usb_device_descriptor_t *dd = &dev->ddesc; - int r, found, i, confi, nifaces; - usbd_interface_handle ifaces[256]; /* 256 is the absolute max */ - -#if defined(__FreeBSD__) -/* XXX uaa is a static var. Not a problem as it _should_ be used only - * during probe and attach. Should be changed however - */ - bdevice bdev; - bdev = device_add_child(*parent, NULL, -1, &uaa); - if (!bdev) { - printf("%s: Device creation failed\n", USBDEVNAME(dev->bus->bdev)); - return (USBD_INVAL); - } -#endif - - uaa.device = dev; - uaa.iface = 0; - uaa.ifaces = 0; - uaa.nifaces = 0; - uaa.usegeneric = 0; - uaa.port = port; - uaa.configno = UHUB_UNK_CONFIGURATION; - uaa.ifaceno = UHUB_UNK_INTERFACE; - - /* First try with device specific drivers. */ - if (USB_DO_ATTACH(dev, bdev, parent, &uaa, usbd_print, usbd_submatch)) - return (USBD_NORMAL_COMPLETION); - - DPRINTF(("usbd_probe_and_attach: no device specific driver found\n")); - - /* Next try with interface drivers. */ - for (confi = 0; confi < dd->bNumConfigurations; confi++) { - DPRINTFN(1,("usbd_probe_and_attach: trying config idx=%d\n", - confi)); - r = usbd_set_config_index(dev, confi, 1); - if (r != USBD_NORMAL_COMPLETION) { -#ifdef USB_DEBUG - DPRINTF(("%s: port %d, set config at addr %d failed, " - "error=%d(%s)\n", USBDEVNAME(*parent), port, - addr, r, usbd_error_strs[r])); -#else - printf("%s: port %d, set config at addr %d failed\n", - USBDEVNAME(*parent), port, addr); -#endif -#if defined(__FreeBSD__) - device_delete_child(*parent, bdev); -#endif - return (r); - } - nifaces = dev->cdesc->bNumInterface; - uaa.configno = dev->cdesc->bConfigurationValue; - for (i = 0; i < nifaces; i++) - ifaces[i] = &dev->ifaces[i]; - uaa.ifaces = ifaces; - uaa.nifaces = nifaces; - for (found = i = 0; i < nifaces; i++) { - if (!ifaces[i]) - continue; /* interface already claimed */ - uaa.iface = ifaces[i]; - uaa.ifaceno = ifaces[i]->idesc->bInterfaceNumber; - if (USB_DO_ATTACH(dev, bdev, parent, &uaa, usbd_print, - usbd_submatch)) { - found++; - ifaces[i] = 0; /* consumed */ - } - } - if (found != 0) - return (USBD_NORMAL_COMPLETION); - } - /* No interfaces were attached in any of the configurations. */ - if (dd->bNumConfigurations > 1)/* don't change if only 1 config */ - usbd_set_config_index(dev, 0, 0); - - DPRINTF(("usbd_probe_and_attach: no interface drivers found\n")); - - /* Finally try the generic driver. */ - uaa.iface = 0; - uaa.usegeneric = 1; - uaa.configno = UHUB_UNK_CONFIGURATION; - uaa.ifaceno = UHUB_UNK_INTERFACE; - if (USB_DO_ATTACH(dev, bdev, parent, &uaa, usbd_print, usbd_submatch)) - return (USBD_NORMAL_COMPLETION); - - /* - * The generic attach failed, but leave the device as it is. - * We just did not find any drivers, that's all. The device is - * fully operational and not harming anyone. - */ - DPRINTF(("usbd_probe_and_attach: generic attach failed\n")); -#if defined(__FreeBSD__) -/* - * XXX should we delete the child again? Left for now to avoid dangling - * references. - device_delete_child(*parent, bdev); -*/ -#endif - return (USBD_NORMAL_COMPLETION); -} - - - -/* - * Called when a new device has been put in the powered state, - * but not yet in the addressed state. - * Get initial descriptor, set the address, get full descriptor, - * and attach a driver. - */ -usbd_status -usbd_new_device(parent, bus, depth, lowspeed, port, up) - bdevice *parent; - usbd_bus_handle bus; - int depth; - int lowspeed; - int port; - struct usbd_port *up; -{ - usbd_device_handle dev; - usb_device_descriptor_t *dd; - usbd_status r; - int addr; - int i; - - DPRINTF(("usbd_new_device bus=%p depth=%d lowspeed=%d\n", - bus, depth, lowspeed)); - addr = usbd_getnewaddr(bus); - if (addr < 0) { - printf("%s: No free USB addresses, new device ignored.\n", - USBDEVNAME(bus->bdev)); - return (USBD_NO_ADDR); - } - - dev = malloc(sizeof *dev, M_USB, M_NOWAIT); - if (dev == 0) - return (USBD_NOMEM); - memset(dev, 0, sizeof(*dev)); - - dev->bus = bus; - - /* Set up default endpoint handle. */ - dev->def_ep.edesc = &dev->def_ep_desc; - dev->def_ep.state = USBD_ENDPOINT_ACTIVE; - - /* Set up default endpoint descriptor. */ - dev->def_ep_desc.bLength = USB_ENDPOINT_DESCRIPTOR_SIZE; - dev->def_ep_desc.bDescriptorType = UDESC_ENDPOINT; - dev->def_ep_desc.bEndpointAddress = USB_CONTROL_ENDPOINT; - dev->def_ep_desc.bmAttributes = UE_CONTROL; - USETW(dev->def_ep_desc.wMaxPacketSize, USB_MAX_IPACKET); - dev->def_ep_desc.bInterval = 0; - - dev->state = USBD_DEVICE_DEFAULT; - dev->quirks = &usbd_no_quirk; - dev->address = USB_START_ADDR; - dev->ddesc.bMaxPacketSize = 0; - dev->lowspeed = lowspeed != 0; - dev->depth = depth; - dev->powersrc = up; - dev->langid = USBD_NOLANG; - - /* Establish the the default pipe. */ - r = usbd_setup_pipe(dev, 0, &dev->def_ep, &dev->default_pipe); - if (r != USBD_NORMAL_COMPLETION) { - usbd_remove_device(dev, up); - return (r); - } - - up->device = dev; - dd = &dev->ddesc; - /* Try a few times in case the device is slow (i.e. outside specs.) */ - for (i = 0; i < 5; i++) { - /* Get the first 8 bytes of the device descriptor. */ - r = usbd_get_desc(dev, UDESC_DEVICE, 0, USB_MAX_IPACKET, dd); - if (r == USBD_NORMAL_COMPLETION) - break; - usbd_delay_ms(dev, 200); - } - if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1, ("usbd_new_device: addr=%d, getting first desc " - "failed\n", - addr)); - usbd_remove_device(dev, up); - return (r); - } - - if (dd->bDescriptorType != UDESC_DEVICE) { - /* Illegal device descriptor */ - DPRINTFN(-1,("usbd_new_device: illegal descriptor %d\n", - dd->bDescriptorType)); - usbd_remove_device(dev, up); - return (USBD_INVAL); - } - - DPRINTF(("usbd_new_device: adding unit addr=%d, rev=%02x, class=%d, " - "subclass=%d, protocol=%d, maxpacket=%d, ls=%d\n", - addr,UGETW(dd->bcdUSB), dd->bDeviceClass, dd->bDeviceSubClass, - dd->bDeviceProtocol, dd->bMaxPacketSize, dev->lowspeed)); - - USETW(dev->def_ep_desc.wMaxPacketSize, dd->bMaxPacketSize); - - /* Get the full device descriptor. */ - r = usbd_get_device_desc(dev, dd); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1, ("usbd_new_device: addr=%d, getting full desc " - "failed\n", addr)); - usbd_remove_device(dev, up); - return (r); - } - - /* Figure out what's wrong with this device. */ - dev->quirks = usbd_find_quirk(dd); - - /* Set the address */ - r = usbd_set_address(dev, addr); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTFN(-1,("usb_new_device: set address %d failed\n",addr)); - r = USBD_SET_ADDR_FAILED; - usbd_remove_device(dev, up); - return (r); - } - /* Allow device time to set new address */ - usbd_delay_ms(dev, USB_SET_ADDRESS_SETTLE); - - dev->address = addr; /* New device address now */ - dev->state = USBD_DEVICE_ADDRESSED; - bus->devices[addr] = dev; - - /* Assume 100mA bus powered for now. Changed when configured. */ - dev->power = USB_MIN_POWER; - dev->self_powered = 0; - - DPRINTF(("usbd_new_device: new dev (addr %d), dev=%p, parent=%p\n", - addr, dev, parent)); - - r = usbd_probe_and_attach(parent, dev, port, addr); - if (r != USBD_NORMAL_COMPLETION) { - usbd_remove_device(dev, up); - return (r); - } - - return (USBD_NORMAL_COMPLETION); -} - -void -usbd_remove_device(dev, up) - usbd_device_handle dev; - struct usbd_port *up; -{ - DPRINTF(("usbd_remove_device: %p\n", dev)); - - if (dev->default_pipe) - usbd_kill_pipe(dev->default_pipe); - up->device = 0; - dev->bus->devices[dev->address] = 0; - - free(dev, M_USB); -} - -#if defined(__NetBSD__) -int -usbd_print(aux, pnp) - void *aux; - const char *pnp; -{ - struct usb_attach_arg *uaa = aux; - char devinfo[1024]; - - DPRINTFN(15, ("usbd_print dev=%p\n", uaa->device)); - if (pnp) { - if (!uaa->usegeneric) - return (QUIET); - usbd_devinfo(uaa->device, 1, devinfo); - printf("%s, %s", devinfo, pnp); - } - if (uaa->port != 0) - printf(" port %d", uaa->port); - if (uaa->configno != UHUB_UNK_CONFIGURATION) - printf(" configuration %d", uaa->configno); - if (uaa->ifaceno != UHUB_UNK_INTERFACE) - printf(" interface %d", uaa->ifaceno); - return (UNCONF); -} - -int -usbd_submatch(parent, cf, aux) - struct device *parent; - struct cfdata *cf; - void *aux; -{ - struct usb_attach_arg *uaa = aux; - - if ((uaa->port != 0 && - cf->uhubcf_port != UHUB_UNK_PORT && - cf->uhubcf_port != uaa->port) || - (uaa->configno != UHUB_UNK_CONFIGURATION && - cf->uhubcf_configuration != UHUB_UNK_CONFIGURATION && - cf->uhubcf_configuration != uaa->configno) || - (uaa->ifaceno != UHUB_UNK_INTERFACE && - cf->uhubcf_interface != UHUB_UNK_INTERFACE && - cf->uhubcf_interface != uaa->ifaceno)) - return 0; - return ((*cf->cf_attach->ca_match)(parent, cf, aux)); -} -#endif - -usbd_status -usb_insert_transfer(reqh) - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe = reqh->pipe; - usbd_interface_handle iface = pipe->iface; - - if (pipe->state == USBD_PIPE_IDLE || - (iface && iface->state == USBD_INTERFACE_IDLE)) - return (USBD_IS_IDLE); - SIMPLEQ_INSERT_TAIL(&pipe->queue, reqh, next); - if (pipe->state != USBD_PIPE_ACTIVE || - (iface && iface->state != USBD_INTERFACE_ACTIVE)) - return (USBD_NOT_STARTED); - if (pipe->running) - return (USBD_IN_PROGRESS); - pipe->running = 1; - return (USBD_NORMAL_COMPLETION); -} - -void -usb_start_next(pipe) - usbd_pipe_handle pipe; -{ - usbd_request_handle reqh; - usbd_status r; - -#ifdef DIAGNOSTIC - if (SIMPLEQ_FIRST(&pipe->queue) == 0) { - printf("usb_start_next: empty\n"); - return; - } -#endif - - /* First remove remove old */ - SIMPLEQ_REMOVE_HEAD(&pipe->queue, SIMPLEQ_FIRST(&pipe->queue), next); - if (pipe->state != USBD_PIPE_ACTIVE) { - pipe->running = 0; - return; - } - reqh = SIMPLEQ_FIRST(&pipe->queue); - DPRINTFN(5, ("usb_start_next: start reqh=%p\n", reqh)); - if (!reqh) - pipe->running = 0; - else { - r = pipe->methods->start(reqh); - if (r != USBD_IN_PROGRESS) { - printf("usb_start_next: error=%d\n", r); - pipe->running = 0; - /* XXX do what? */ - } - } -} - -void -usbd_fill_deviceinfo(dev, di) - usbd_device_handle dev; - struct usb_device_info *di; -{ - struct usbd_port *p; - int i, r, s; - - di->config = dev->config; - usbd_devinfo_vp(dev, di->vendor, di->product); - usbd_printBCD(di->revision, UGETW(dev->ddesc.bcdDevice)); - di->vendorNo = UGETW(dev->ddesc.idVendor); - di->productNo = UGETW(dev->ddesc.idProduct); - di->class = dev->ddesc.bDeviceClass; - di->power = dev->self_powered ? 0 : dev->power; - di->lowspeed = dev->lowspeed; - di->addr = dev->address; - if (dev->hub) { - for (i = 0; - i < sizeof(di->ports) / sizeof(di->ports[0]) && - i < dev->hub->hubdesc.bNbrPorts; - i++) { - p = &dev->hub->ports[i]; - if (p->device) - r = p->device->address; - else { - s = UGETW(p->status.wPortStatus); - if (s & UPS_PORT_ENABLED) - r = USB_PORT_ENABLED; - else if (s & UPS_SUSPEND) - r = USB_PORT_SUSPENDED; - else if (s & UPS_PORT_POWER) - r = USB_PORT_POWERED; - else - r = USB_PORT_DISABLED; - } - di->ports[i] = r; - } - di->nports = dev->hub->hubdesc.bNbrPorts; - } else - di->nports = 0; -} diff --git a/sys/dev/usb/usbcdc.h b/sys/dev/usb/usbcdc.h deleted file mode 100644 index 3d3eb818f1b2e..0000000000000 --- a/sys/dev/usb/usbcdc.h +++ /dev/null @@ -1,141 +0,0 @@ -/* $NetBSD: usbcdc.h,v 1.3 1999/01/03 01:09:18 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#ifndef _USBCDC_H_ -#define _USBCDC_H_ - -#define UDESCSUB_CDC_HEADER 0 -#define UDESCSUB_CDC_CM 1 /* Call Management */ -#define UDESCSUB_CDC_ACM 2 /* Abstract Control Model */ -#define UDESCSUB_CDC_DLM 3 /* Direct Line Management */ -#define UDESCSUB_CDC_TRF 4 /* Telephone Ringer */ -#define UDESCSUB_CDC_TCLSR 5 /* Telephone Call ... */ -#define UDESCSUB_CDC_UNION 6 -#define UDESCSUB_CDC_CS 7 /* Country Selection */ -#define UDESCSUB_CDC_TOM 8 /* Telephone Operational Modes */ -#define UDESCSUB_CDC_USBT 9 /* USB Terminal */ - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; - uWord bcdCDC; -} usb_cdc_header_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; - uByte bmCapabilities; -#define USB_CDC_CM_DOES_CM 0x01 -#define USB_CDC_CM_CM_OVER_DATA 0x02 - uByte bDataInterface; -} usb_cdc_cm_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; - uByte bmCapabilities; -#define USB_CDC_ACM_HAS_FEATURE 0x01 -#define USB_CDC_ACM_HAS_LINE 0x02 -#define USB_CDC_ACM_HAS_BREAK 0x04 -#define USB_CDC_ACM_HAS_NETWORK_CONN 0x08 -} usb_cdc_acm_descriptor_t; - -typedef struct { - uByte bLength; - uByte bDescriptorType; - uByte bDescriptorSubtype; - uByte bMasterInterface; - uByte bSlaveInterface[1]; -} usb_cdc_union_descriptor_t; - -#define UCDC_SEND_ENCAPSULATED_COMMAND 0x00 -#define UCDC_GET_ENCAPSULATED_RESPONSE 0x01 -#define UCDC_SET_COMM_FEATURE 0x02 -#define UCDC_GET_COMM_FEATURE 0x03 -#define UCDC_ABSTRACT_STATE 0x01 -#define UCDC_COUNTRY_SETTING 0x02 -#define UCDC_CLEAR_COMM_FEATURE 0x04 -#define UCDC_SET_LINE_CODING 0x20 -#define UCDC_GET_LINE_CODING 0x21 - -typedef struct { - uWord wState; -#define UCDC_IDLE_SETTING 0x0001 -#define UCDC_DATA_MULTIPLEXED 0x0002 -} usb_cdc_abstract_state_t; - -typedef struct { - uDWord dwDTERate; - uByte bCharFormat; -#define UCDC_STOP_BIT_1 0 -#define UCDC_STOP_BIT_1_5 1 -#define UCDC_STOP_BIT_2 2 - uByte bParityType; -#define UCDC_PARITY_NONE 0 -#define UCDC_PARITY_ODD 1 -#define UCDC_PARITY_EVEN 2 -#define UCDC_PARITY_MARK 3 -#define UCDC_PARITY_SPACE 4 - uByte bDataBits; -} usb_cdc_line_state_t; - -typedef struct { - uByte bmRequestType; -#define UCDC_NOTIFICATION 0xa1 - uByte bNotification; -#define UCDC_N_NETWORK_CONNECTION 0x00 -#define UCDC_N_RESPONSE_AVAILABLE 0x01 -#define UCDC_N_AUX_JACK_HOOK_STATE 0x08 -#define UCDC_N_RING_DETECT 0x09 -#define UCDC_N_SERIAL_STATE 0x20 -#define UCDC_N_CALL_STATE_CHANGED 0x28 -#define UCDC_N_LINE_STATE_CHANGED 0x29 -#define UCDC_N_CONNECTION_SPEED_CHANGE 0x2a - uWord wValue; - uWord wIndex; - uWord wLength; - uByte data[16]; -} usb_cdc_notification_t; -#define UCDC_NOTIFICATION_LENGTH 8 - -#endif /* _USBCDC_H_ */ diff --git a/sys/dev/usb/usbdevs.h b/sys/dev/usb/usbdevs.h deleted file mode 100644 index 24398066a8c92..0000000000000 --- a/sys/dev/usb/usbdevs.h +++ /dev/null @@ -1,176 +0,0 @@ -/* $FreeBSD$ */ - -/* - * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. - * - * generated from: - * NetBSD: usbdevs,v 1.19 1999/01/08 11:18:38 augustss Exp - */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -/* - * List of known USB vendors - */ - -#define USB_VENDOR_NEC 0x0409 /* NEC */ -#define USB_VENDOR_KODAK 0x040a /* Eastman Kodak */ -/* Computer Access Technology Corporation */ -#define USB_VENDOR_CATC 0x0423 /* CATC */ -#define USB_VENDOR_NANAO 0x0440 /* Nanao */ -#define USB_VENDOR_UNIXTAR 0x0451 /* Unixtar */ -#define USB_VENDOR_GENIUS 0x0458 /* Genius */ -#define USB_VENDOR_MICROSOFT 0x045e /* Microsoft */ -#define USB_VENDOR_KENSINGTON 0x0461 /* Kensington */ -#define USB_VENDOR_CHERRY 0x046a /* Cherry */ -/* Behavior Technology Corporation */ -#define USB_VENDOR_BTC 0x046e /* BTC */ -#define USB_VENDOR_PHILIPS 0x0471 /* Philips */ -#define USB_VENDOR_CONNECTIX 0x0478 /* Connectix */ -#define USB_VENDOR_ACER 0x04a5 /* Acer Peripherals */ -#define USB_VENDOR_CYPRESS 0x04b4 /* Cypress Semiconductor */ -#define USB_VENDOR_3COM 0x04c1 /* 3Com */ -#define USB_VENDOR_SHUTTLE 0x04e6 /* Shuttle Technology */ -#define USB_VENDOR_JAZZ 0x04fa /* Jazz */ -#define USB_VENDOR_ATEN 0x0557 /* ATen */ -#define USB_VENDOR_PERACOM 0x0565 /* Peracom */ -#define USB_VENDOR_EIZO 0x056d /* EIZO */ -#define USB_VENDOR_AGILER 0x056e /* Agiler */ -#define USB_VENDOR_BELKIN 0x05ab /* Belkin */ -#define USB_VENDOR_LOGITECH 0x05ac /* Logitech */ -#define USB_VENDOR_EIZONANAO 0x05e7 /* EIZO Nanao */ -#define USB_VENDOR_CHIC 0x05fe /* Chic Technology */ -#define USB_VENDOR_ADS 0x06e1 /* ADS Technologies */ -#define USB_VENDOR_PLX 0x10b5 /* PLX */ -#define USB_VENDOR_ENTREGA 0x1645 /* Entrega */ -#define USB_VENDOR_INSIDEOUT 0x1608 /* Inside Out Networks */ -#define USB_VENDOR_INTEL 0x8086 /* Intel */ - -/* - * List of known products. Grouped by vendor. - */ - -/* NEC products */ -#define USB_PRODUCT_NEC_HUB 0x55aa /* hub */ -#define USB_PRODUCT_NEC_HUB_B 0x55ab /* hub */ - -/* Kodak products */ -#define USB_PRODUCT_KODAK_DC260 0x0110 /* Digital Science DC260 */ - -/* CATC products */ -#define USB_PRODUCT_CATC_ANDROMEDA 0x1237 /* Andromeda hub */ - -/* Unixtar products */ -#define USB_PRODUCT_UNIXTAR_UTUSB41 0x1446 /* UT-USB41 hub */ - -/* Genius products */ -#define USB_PRODUCT_GENIUS_NICHE 0x0001 /* Niche mouse */ -#define USB_PRODUCT_GENIUS_FLIGHT2000 0x1004 /* Flight 2000 joystick */ - -/* Microsoft products */ -#define USB_PRODUCT_MICROSOFT_INTELLIMOUSE 0x0009 /* IntelliMouse */ - -/* Kensington products */ -#define USB_PRODUCT_KENSINGTON_MOUSEINABOX 0x4d02 /* Mouse-in-a-Box */ - -/* Cherry products */ -#define USB_PRODUCT_CHERRY_MY3000KBD 0x0001 /* My3000 keyboard */ -#define USB_PRODUCT_CHERRY_MY3000HUB 0x0003 /* My3000 hub */ - -/* Behavior Technology Corporation products */ -#define USB_PRODUCT_BTC_BTC7932 0x6782 /* Keyboard with mouse port */ - -/* Philips products */ -#define USB_PRODUCT_PHILIPS_DSS 0x0101 /* DSS 350 Digital Speaker System */ -#define USB_PRODUCT_PHILIPS_HUB 0x0201 /* hub */ - -/* Connectix products */ -#define USB_PRODUCT_CONNECTIX_QUICKCAM 0x0001 /* QuickCam */ - -/* Acer products */ -#define USB_PRODUCT_ACER_ACERSCAN_C310U 0x12a6 /* Acerscan C310U */ - -/* Cypress Semiconduuctor products */ -#define USB_PRODUCT_CYPRESS_MOUSE 0x0001 /* mouse */ - -/* 3Com products */ -#define USB_PRODUCT_3COM_USR56K 0x3021 /* U.S.Robotics 56000 Voice USB Modem */ - -/* Shuttle Technology products */ -#define USB_PRODUCT_SHUTTLE_EUSB 0x0001 /* E-USB Bridge */ - -/* Jazz products */ -#define USB_PRODUCT_JAZZ_J6502 0x4201 /* J-6502 speakers */ - -/* ATen products */ -#define USB_PRODUCT_ATEN_UC1284 0x2001 /* Parallel printer adapter */ - -/* Peracom products */ -#define USB_PRODUCT_PERACOM_SERIAL1 0x0001 /* Serial Converter */ - -/* EIZO products */ -#define USB_PRODUCT_EIZO_HUB 0x0000 /* hub */ -#define USB_PRODUCT_EIZO_MONITOR 0x0001 /* monitor */ - -/* Agiler products */ -#define USB_PRODUCT_AGILER_MOUSE29UO 0x0002 /* mouse 29UO */ - -/* Belkin products */ -#define USB_PRODUCT_BELKIN_F5U002 0x0002 /* Parallel printer adapter */ - -/* Logitech products */ -#define USB_PRODUCT_LOGITECH_M2452 0x0203 /* M2452 keyboard */ -#define USB_PRODUCT_LOGITECH_M4848 0x0301 /* M4848 mouse */ - -/* Chic Technology products */ -#define USB_PRODUCT_CHIC_MOUSE1 0x0001 /* mouse */ - -/* ADS products */ -#define USB_PRODUCT_ADS_ENET 0x0008 /* Ethernet adapter */ - -/* PLX products */ -#define USB_PRODUCT_PLX_TESTBOARD 0x9060 /* test board */ - -#define USB_PRODUCT_ENTREGA_CENTRONICS 0x0006 /* Centronics connector */ -#define USB_PRODUCT_ENTREGA_SERIAL 0x8001 /* DB25 Serial connector */ - -/* Inside Out Networks products */ -#define USB_PRODUCT_INSIDEOUT_EDGEPORT4 0x0001 /* EdgePort/4 serial ports */ - -/* Intel products */ -#define USB_PRODUCT_INTEL_TESTBOARD 0x9890 /* 82930 test board */ diff --git a/sys/dev/usb/usbdevs_data.h b/sys/dev/usb/usbdevs_data.h deleted file mode 100644 index a6815eb6c9da6..0000000000000 --- a/sys/dev/usb/usbdevs_data.h +++ /dev/null @@ -1,439 +0,0 @@ -/* $FreeBSD$ */ - -/* - * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. - * - * generated from: - * NetBSD: usbdevs,v 1.19 1999/01/08 11:18:38 augustss Exp - */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -struct usb_knowndev usb_knowndevs[] = { - { - USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB, - 0, - "NEC", - "hub", - }, - { - USB_VENDOR_NEC, USB_PRODUCT_NEC_HUB_B, - 0, - "NEC", - "hub", - }, - { - USB_VENDOR_KODAK, USB_PRODUCT_KODAK_DC260, - 0, - "Eastman Kodak", - "Digital Science DC260", - }, - { - USB_VENDOR_CATC, USB_PRODUCT_CATC_ANDROMEDA, - 0, - "CATC", - "Andromeda hub", - }, - { - USB_VENDOR_UNIXTAR, USB_PRODUCT_UNIXTAR_UTUSB41, - 0, - "Unixtar", - "UT-USB41 hub", - }, - { - USB_VENDOR_GENIUS, USB_PRODUCT_GENIUS_NICHE, - 0, - "Genius", - "Niche mouse", - }, - { - USB_VENDOR_GENIUS, USB_PRODUCT_GENIUS_FLIGHT2000, - 0, - "Genius", - "Flight 2000 joystick", - }, - { - USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_INTELLIMOUSE, - 0, - "Microsoft", - "IntelliMouse", - }, - { - USB_VENDOR_KENSINGTON, USB_PRODUCT_KENSINGTON_MOUSEINABOX, - 0, - "Kensington", - "Mouse-in-a-Box", - }, - { - USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000KBD, - 0, - "Cherry", - "My3000 keyboard", - }, - { - USB_VENDOR_CHERRY, USB_PRODUCT_CHERRY_MY3000HUB, - 0, - "Cherry", - "My3000 hub", - }, - { - USB_VENDOR_BTC, USB_PRODUCT_BTC_BTC7932, - 0, - "BTC", - "Keyboard with mouse port", - }, - { - USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_DSS, - 0, - "Philips", - "DSS 350 Digital Speaker System", - }, - { - USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_HUB, - 0, - "Philips", - "hub", - }, - { - USB_VENDOR_CONNECTIX, USB_PRODUCT_CONNECTIX_QUICKCAM, - 0, - "Connectix", - "QuickCam", - }, - { - USB_VENDOR_ACER, USB_PRODUCT_ACER_ACERSCAN_C310U, - 0, - "Acer Peripherals", - "Acerscan C310U", - }, - { - USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_MOUSE, - 0, - "Cypress Semiconductor", - "mouse", - }, - { - USB_VENDOR_3COM, USB_PRODUCT_3COM_USR56K, - 0, - "3Com", - "U.S.Robotics 56000 Voice USB Modem", - }, - { - USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB, - 0, - "Shuttle Technology", - "E-USB Bridge", - }, - { - USB_VENDOR_JAZZ, USB_PRODUCT_JAZZ_J6502, - 0, - "Jazz", - "J-6502 speakers", - }, - { - USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC1284, - 0, - "ATen", - "Parallel printer adapter", - }, - { - USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1, - 0, - "Peracom", - "Serial Converter", - }, - { - USB_VENDOR_EIZO, USB_PRODUCT_EIZO_HUB, - 0, - "EIZO", - "hub", - }, - { - USB_VENDOR_EIZO, USB_PRODUCT_EIZO_MONITOR, - 0, - "EIZO", - "monitor", - }, - { - USB_VENDOR_AGILER, USB_PRODUCT_AGILER_MOUSE29UO, - 0, - "Agiler", - "mouse 29UO", - }, - { - USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U002, - 0, - "Belkin", - "Parallel printer adapter", - }, - { - USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M2452, - 0, - "Logitech", - "M2452 keyboard", - }, - { - USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_M4848, - 0, - "Logitech", - "M4848 mouse", - }, - { - USB_VENDOR_CHIC, USB_PRODUCT_CHIC_MOUSE1, - 0, - "Chic Technology", - "mouse", - }, - { - USB_VENDOR_ADS, USB_PRODUCT_ADS_ENET, - 0, - "ADS Technologies", - "Ethernet adapter", - }, - { - USB_VENDOR_PLX, USB_PRODUCT_PLX_TESTBOARD, - 0, - "PLX", - "test board", - }, - { - USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_CENTRONICS, - 0, - "Entrega", - "Centronics connector", - }, - { - USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_SERIAL, - 0, - "Entrega", - "DB25 Serial connector", - }, - { - USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4, - 0, - "Inside Out Networks", - "EdgePort/4 serial ports", - }, - { - USB_VENDOR_INTEL, USB_PRODUCT_INTEL_TESTBOARD, - 0, - "Intel", - "82930 test board", - }, - { - USB_VENDOR_NEC, 0, - USB_KNOWNDEV_NOPROD, - "NEC", - NULL, - }, - { - USB_VENDOR_KODAK, 0, - USB_KNOWNDEV_NOPROD, - "Eastman Kodak", - NULL, - }, - { - USB_VENDOR_CATC, 0, - USB_KNOWNDEV_NOPROD, - "CATC", - NULL, - }, - { - USB_VENDOR_NANAO, 0, - USB_KNOWNDEV_NOPROD, - "Nanao", - NULL, - }, - { - USB_VENDOR_UNIXTAR, 0, - USB_KNOWNDEV_NOPROD, - "Unixtar", - NULL, - }, - { - USB_VENDOR_GENIUS, 0, - USB_KNOWNDEV_NOPROD, - "Genius", - NULL, - }, - { - USB_VENDOR_MICROSOFT, 0, - USB_KNOWNDEV_NOPROD, - "Microsoft", - NULL, - }, - { - USB_VENDOR_KENSINGTON, 0, - USB_KNOWNDEV_NOPROD, - "Kensington", - NULL, - }, - { - USB_VENDOR_CHERRY, 0, - USB_KNOWNDEV_NOPROD, - "Cherry", - NULL, - }, - { - USB_VENDOR_BTC, 0, - USB_KNOWNDEV_NOPROD, - "BTC", - NULL, - }, - { - USB_VENDOR_PHILIPS, 0, - USB_KNOWNDEV_NOPROD, - "Philips", - NULL, - }, - { - USB_VENDOR_CONNECTIX, 0, - USB_KNOWNDEV_NOPROD, - "Connectix", - NULL, - }, - { - USB_VENDOR_ACER, 0, - USB_KNOWNDEV_NOPROD, - "Acer Peripherals", - NULL, - }, - { - USB_VENDOR_CYPRESS, 0, - USB_KNOWNDEV_NOPROD, - "Cypress Semiconductor", - NULL, - }, - { - USB_VENDOR_3COM, 0, - USB_KNOWNDEV_NOPROD, - "3Com", - NULL, - }, - { - USB_VENDOR_SHUTTLE, 0, - USB_KNOWNDEV_NOPROD, - "Shuttle Technology", - NULL, - }, - { - USB_VENDOR_JAZZ, 0, - USB_KNOWNDEV_NOPROD, - "Jazz", - NULL, - }, - { - USB_VENDOR_ATEN, 0, - USB_KNOWNDEV_NOPROD, - "ATen", - NULL, - }, - { - USB_VENDOR_PERACOM, 0, - USB_KNOWNDEV_NOPROD, - "Peracom", - NULL, - }, - { - USB_VENDOR_EIZO, 0, - USB_KNOWNDEV_NOPROD, - "EIZO", - NULL, - }, - { - USB_VENDOR_AGILER, 0, - USB_KNOWNDEV_NOPROD, - "Agiler", - NULL, - }, - { - USB_VENDOR_BELKIN, 0, - USB_KNOWNDEV_NOPROD, - "Belkin", - NULL, - }, - { - USB_VENDOR_LOGITECH, 0, - USB_KNOWNDEV_NOPROD, - "Logitech", - NULL, - }, - { - USB_VENDOR_EIZONANAO, 0, - USB_KNOWNDEV_NOPROD, - "EIZO Nanao", - NULL, - }, - { - USB_VENDOR_CHIC, 0, - USB_KNOWNDEV_NOPROD, - "Chic Technology", - NULL, - }, - { - USB_VENDOR_ADS, 0, - USB_KNOWNDEV_NOPROD, - "ADS Technologies", - NULL, - }, - { - USB_VENDOR_PLX, 0, - USB_KNOWNDEV_NOPROD, - "PLX", - NULL, - }, - { - USB_VENDOR_ENTREGA, 0, - USB_KNOWNDEV_NOPROD, - "Entrega", - NULL, - }, - { - USB_VENDOR_INSIDEOUT, 0, - USB_KNOWNDEV_NOPROD, - "Inside Out Networks", - NULL, - }, - { - USB_VENDOR_INTEL, 0, - USB_KNOWNDEV_NOPROD, - "Intel", - NULL, - }, - { 0, 0, 0, NULL, NULL, } -}; diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c deleted file mode 100644 index e1ed20a0f8a72..0000000000000 --- a/sys/dev/usb/usbdi.c +++ /dev/null @@ -1,1294 +0,0 @@ -/* $NetBSD: usbdi.c,v 1.20 1999/01/08 11:58:26 augustss Exp $ */ -/* FreeBSD $Id: usbdi.c,v 1.7 1999/01/07 23:31:42 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#if defined(__NetBSD__) -#include <sys/device.h> -#else -#include <sys/module.h> -#include <sys/bus.h> -#include <sys/conf.h> -#endif -#include <sys/malloc.h> -#include <sys/proc.h> - -#include <dev/usb/usb.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> -#include <dev/usb/usbdivar.h> - -#if defined(__FreeBSD__) -#include "usb_if.h" -#endif - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -extern int usbdebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -static usbd_status usbd_ar_pipe __P((usbd_pipe_handle pipe)); -static usbd_status usbd_ar_iface __P((usbd_interface_handle iface)); -static void usbd_transfer_cb __P((usbd_request_handle reqh)); -static void usbd_sync_transfer_cb __P((usbd_request_handle reqh)); -static usbd_status usbd_do_transfer __P((usbd_request_handle reqh)); -void usbd_do_request_async_cb - __P((usbd_request_handle, usbd_private_handle, usbd_status)); - -static SIMPLEQ_HEAD(, usbd_request) usbd_free_requests; - -#if defined(__FreeBSD__) -#define USB_CDEV_MAJOR 108 - -extern struct cdevsw usb_cdevsw; -#endif - -usbd_status -usbd_open_pipe(iface, address, flags, pipe) - usbd_interface_handle iface; - u_int8_t address; - u_int8_t flags; - usbd_pipe_handle *pipe; -{ - usbd_pipe_handle p; - struct usbd_endpoint *ep; - usbd_status r; - int i; - - if (iface->state != USBD_INTERFACE_ACTIVE) - return (USBD_INTERFACE_NOT_ACTIVE); - for (i = 0; i < iface->idesc->bNumEndpoints; i++) { - ep = &iface->endpoints[i]; - if (ep->edesc->bEndpointAddress == address) - goto found; - } - return (USBD_BAD_ADDRESS); - found: - if ((flags & USBD_EXCLUSIVE_USE) && - ep->refcnt != 0) - return (USBD_IN_USE); - r = usbd_setup_pipe(iface->device, iface, ep, &p); - if (r != USBD_NORMAL_COMPLETION) - return (r); - LIST_INSERT_HEAD(&iface->pipes, p, next); - *pipe = p; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_open_pipe_intr(iface, address, flags, pipe, priv, buffer, length, cb) - usbd_interface_handle iface; - u_int8_t address; - u_int8_t flags; - usbd_pipe_handle *pipe; - usbd_private_handle priv; - void *buffer; - u_int32_t length; - usbd_callback cb; -{ - usbd_status r; - usbd_request_handle reqh; - usbd_pipe_handle ipipe; - - reqh = usbd_alloc_request(); - if (reqh == 0) - return (USBD_NOMEM); - r = usbd_open_pipe(iface, address, USBD_EXCLUSIVE_USE, &ipipe); - if (r != USBD_NORMAL_COMPLETION) - goto bad1; - r = usbd_setup_request(reqh, ipipe, priv, buffer, length, - USBD_XFER_IN | flags, USBD_NO_TIMEOUT, cb); - if (r != USBD_NORMAL_COMPLETION) - goto bad2; - ipipe->intrreqh = reqh; - r = usbd_transfer(reqh); - *pipe = ipipe; - if (r != USBD_IN_PROGRESS) - goto bad3; - return (USBD_NORMAL_COMPLETION); - - bad3: - ipipe->intrreqh = 0; - bad2: - usbd_close_pipe(ipipe); - bad1: - usbd_free_request(reqh); - return r; -} - -usbd_status -usbd_open_pipe_iso(iface, address, flags, pipe, priv, bufsize, nbuf, cb) - usbd_interface_handle iface; - u_int8_t address; - u_int8_t flags; - usbd_pipe_handle *pipe; - usbd_private_handle priv; - u_int32_t bufsize; - u_int32_t nbuf; - usbd_callback cb; -{ - usbd_status r; - usbd_pipe_handle p; - - r = usbd_open_pipe(iface, address, USBD_EXCLUSIVE_USE, &p); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!p->methods->isobuf) { - usbd_close_pipe(p); - return (USBD_INVAL); - } - r = p->methods->isobuf(p, bufsize, nbuf); - if (r != USBD_NORMAL_COMPLETION) { - usbd_close_pipe(p); - return (r); - } - *pipe = p; - return r; -} - -usbd_status -usbd_close_pipe(pipe) - usbd_pipe_handle pipe; -{ - if (pipe->iface->state != USBD_INTERFACE_ACTIVE) - return (USBD_INTERFACE_NOT_ACTIVE); - if (--pipe->refcnt != 0) - return (USBD_NORMAL_COMPLETION); - if (SIMPLEQ_FIRST(&pipe->queue) != 0) - return (USBD_PENDING_REQUESTS); - LIST_REMOVE(pipe, next); - pipe->endpoint->refcnt--; - pipe->methods->close(pipe); - if (pipe->intrreqh) - usbd_free_request(pipe->intrreqh); - free(pipe, M_USB); - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_transfer(reqh) - usbd_request_handle reqh; -{ - reqh->xfercb = usbd_transfer_cb; - return (usbd_do_transfer(reqh)); -} - -static usbd_status -usbd_do_transfer(reqh) - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe = reqh->pipe; - - DPRINTFN(10,("usbd_do_transfer: reqh=%p\n", reqh)); - reqh->done = 0; - return (pipe->methods->transfer(reqh)); -} - -usbd_request_handle -usbd_alloc_request() -{ - usbd_request_handle reqh; - - reqh = SIMPLEQ_FIRST(&usbd_free_requests); - if (reqh) - SIMPLEQ_REMOVE_HEAD(&usbd_free_requests, reqh, next); - else - reqh = malloc(sizeof(*reqh), M_USB, M_NOWAIT); - if (!reqh) - return (0); - memset(reqh, 0, sizeof *reqh); - return (reqh); -} - -usbd_status -usbd_free_request(reqh) - usbd_request_handle reqh; -{ - SIMPLEQ_INSERT_HEAD(&usbd_free_requests, reqh, next); - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_setup_request(reqh, pipe, priv, buffer, length, flags, timeout, callback) - usbd_request_handle reqh; - usbd_pipe_handle pipe; - usbd_private_handle priv; - void *buffer; - u_int32_t length; - u_int16_t flags; - u_int32_t timeout; - void (*callback) __P((usbd_request_handle, - usbd_private_handle, - usbd_status)); -{ - reqh->pipe = pipe; - reqh->isreq = 0; - reqh->priv = priv; - reqh->buffer = buffer; - reqh->length = length; - reqh->actlen = 0; - reqh->flags = flags; - reqh->callback = callback; - reqh->status = USBD_NOT_STARTED; - reqh->retries = 1; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_setup_device_request(reqh, req) - usbd_request_handle reqh; - usb_device_request_t *req; -{ - reqh->isreq = 1; - reqh->request = *req; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_setup_default_request(reqh, dev, priv, timeout, req, buffer, - length, flags, callback) - usbd_request_handle reqh; - usbd_device_handle dev; - usbd_private_handle priv; - u_int32_t timeout; - usb_device_request_t *req; - void *buffer; - u_int32_t length; - u_int16_t flags; - void (*callback) __P((usbd_request_handle, - usbd_private_handle, - usbd_status)); -{ - reqh->pipe = dev->default_pipe; - reqh->priv = priv; - reqh->buffer = buffer; - reqh->length = length; - reqh->actlen = 0; - reqh->flags = flags; - reqh->timeout = timeout; - reqh->status = USBD_NOT_STARTED; - reqh->callback = callback; - reqh->request = *req; - reqh->isreq = 1; - reqh->retries = 1; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_set_request_timeout(reqh, timeout) - usbd_request_handle reqh; - u_int32_t timeout; -{ - reqh->timeout = timeout; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_request_status(reqh, priv, buffer, count, status) - usbd_request_handle reqh; - usbd_private_handle *priv; - void **buffer; - u_int32_t *count; - usbd_status *status; -{ - *priv = reqh->priv; - *buffer = reqh->buffer; - *count = reqh->actlen; - *status = reqh->status; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_request_device_data(reqh, req) - usbd_request_handle reqh; - usb_device_request_t *req; -{ - if (!reqh->isreq) - return (USBD_INVAL); - *req = reqh->request; - return (USBD_NORMAL_COMPLETION); -} - -#if 0 -usb_descriptor_t * -usbd_get_descriptor(iface, desc_type) - usbd_interface_handle *iface; - u_int8_t desc_type; -XX -#endif - -usb_config_descriptor_t * -usbd_get_config_descriptor(dev) - usbd_device_handle dev; -{ - return (dev->cdesc); -} - -usb_interface_descriptor_t * -usbd_get_interface_descriptor(iface) - usbd_interface_handle iface; -{ - return (iface->idesc); -} - -usb_device_descriptor_t * -usbd_get_device_descriptor(dev) - usbd_device_handle dev; -{ - return (&dev->ddesc); -} - -usb_endpoint_descriptor_t * -usbd_interface2endpoint_descriptor(iface, index) - usbd_interface_handle iface; - u_int8_t index; -{ - if (index >= iface->idesc->bNumEndpoints) - return (0); - return (iface->endpoints[index].edesc); -} - -usbd_status -usbd_set_configuration(dev, conf) - usbd_device_handle dev; - u_int8_t conf; -{ - return usbd_set_config_no(dev, conf, 0); -} - -usbd_status -usbd_retry_request(reqh, retry_count) - usbd_request_handle reqh; - u_int32_t retry_count; -{ - usbd_status r; - - r = usbd_set_pipe_state(reqh->pipe, USBD_PIPE_ACTIVE); - if (r != USBD_NORMAL_COMPLETION) - return (r); - reqh->retries = retry_count; - return (usbd_transfer(reqh)); -} - -usbd_status -usbd_abort_pipe(pipe) - usbd_pipe_handle pipe; -{ - usbd_status r; - int s, st; - - if (pipe->iface->state != USBD_INTERFACE_ACTIVE) - return (USBD_INTERFACE_NOT_ACTIVE); - s = splusb(); - st = pipe->state; - r = usbd_ar_pipe(pipe); - pipe->state = st; - splx(s); - return (r); -} - -usbd_status -usbd_abort_interface(iface) - usbd_interface_handle iface; -{ - usbd_status r; - int s, st; - - s = splusb(); - st = iface->state; - r = usbd_ar_iface(iface); - iface->state = st; - splx(s); - return (r); -} - -usbd_status -usbd_reset_pipe(pipe) - usbd_pipe_handle pipe; -{ - usbd_status r; - int s; - - if (pipe->iface->state != USBD_INTERFACE_ACTIVE) - return (USBD_INTERFACE_NOT_ACTIVE); - s = splusb(); - r = usbd_ar_pipe(pipe); - /* XXX anything else */ - pipe->state = USBD_PIPE_ACTIVE; - splx(s); - return (r); -} - -usbd_status -usbd_reset_interface(iface) - usbd_interface_handle iface; -{ - usbd_status r; - int s; - - s = splusb(); - r = usbd_ar_iface(iface); - /* XXX anything else */ - iface->state = USBD_INTERFACE_ACTIVE; - splx(s); - return (r); -} - -usbd_status -usbd_clear_endpoint_stall(pipe) - usbd_pipe_handle pipe; -{ - usbd_device_handle dev = pipe->device; - usb_device_request_t req; - usbd_status r; - - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, pipe->endpoint->edesc->bEndpointAddress); - USETW(req.wLength, 0); - r = usbd_do_request(dev, &req, 0); -#if 0 -XXX should we do this? - if (r == USBD_NORMAL_COMPLETION) { - pipe->state = USBD_PIPE_ACTIVE; - /* XXX activate pipe */ - } -#endif - return (r); -} - -usbd_status -usbd_clear_endpoint_stall_async(pipe) - usbd_pipe_handle pipe; -{ - usbd_device_handle dev = pipe->device; - usb_device_request_t req; - usbd_status r; - - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, pipe->endpoint->edesc->bEndpointAddress); - USETW(req.wLength, 0); - r = usbd_do_request_async(dev, &req, 0); - return (r); -} - -usbd_status -usbd_set_pipe_state(pipe, state) - usbd_pipe_handle pipe; - usbd_pipe_state state; -{ - int s; - usbd_status r; - usbd_request_handle reqh; - - if (pipe->iface->state != USBD_INTERFACE_ACTIVE) - return (USBD_INTERFACE_NOT_ACTIVE); - if (state != USBD_PIPE_ACTIVE && - state != USBD_PIPE_STALLED && - state != USBD_PIPE_IDLE) - return (USBD_INVAL); - pipe->state = state; - r = USBD_NORMAL_COMPLETION; - if (state == USBD_PIPE_ACTIVE) { - s = splusb(); - if (!pipe->running) { - reqh = SIMPLEQ_FIRST(&pipe->queue); - if (reqh != 0) { - pipe->running = 1; - splx(s); - r = pipe->methods->start(reqh); - } else - splx(s); - } else - splx(s); - } - return (r); -} - -usbd_status -usbd_get_pipe_state(pipe, state, endpoint_state, request_count) - usbd_pipe_handle pipe; - usbd_pipe_state *state; - u_int32_t *endpoint_state; - u_int32_t *request_count; -{ - int n; - usbd_request_handle r; - - *state = pipe->state; - *endpoint_state = pipe->endpoint->state; - for (r = SIMPLEQ_FIRST(&pipe->queue), n = 0; - r != 0; - r = SIMPLEQ_NEXT(r, next), n++) - ; - *request_count = n; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_set_interface_state(iface, state) - usbd_interface_handle iface; - usbd_interface_state state; -{ - int ps; - usbd_pipe_handle p; - - if (state == USBD_INTERFACE_ACTIVE) - ps = USBD_PIPE_ACTIVE; - else if (state == USBD_INTERFACE_STALLED) - ps = USBD_PIPE_STALLED; - else if (state == USBD_INTERFACE_IDLE) - ps = USBD_PIPE_IDLE; - else - return (USBD_INVAL); - iface->state = USBD_INTERFACE_ACTIVE; /* to allow setting the pipe */ - for (p = LIST_FIRST(&iface->pipes); p != 0; p = LIST_NEXT(p, next)) - usbd_set_pipe_state(p, ps); - iface->state = state; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_interface_state(iface, state) - usbd_interface_handle iface; - usbd_interface_state *state; -{ - *state = iface->state; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_device_state(dev, state) - usbd_device_handle dev; - usbd_device_state *state; -{ - *state = dev->state; - return (USBD_NORMAL_COMPLETION); -} - -#if 0 -usbd_status -usbd_set_device_state(dev, state) - usbd_device_handle dev; - usbd_device_state state; -X -#endif - -usbd_status -usbd_device_address(dev, address) - usbd_device_handle dev; - u_int8_t *address; -{ - *address = dev->address; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_endpoint_address(pipe, address) - usbd_pipe_handle pipe; - u_int8_t *address; -{ - *address = pipe->endpoint->edesc->bEndpointAddress; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_endpoint_count(iface, count) - usbd_interface_handle iface; - u_int8_t *count; -{ - *count = iface->idesc->bNumEndpoints; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_interface_count(dev, count) - usbd_device_handle dev; - u_int8_t *count; -{ - if (!dev->cdesc) - return (USBD_NOT_CONFIGURED); - *count = dev->cdesc->bNumInterface; - return (USBD_NORMAL_COMPLETION); -} - -#if 0 -u_int8_t -usbd_bus_count() -{ - return (usb_bus_count()); -} -#endif - -#if defined(__NetBSD__) -usbd_status -usbd_get_bus_handle(index, bus) - u_int8_t index; - usbd_bus_handle *bus; -{ - return (usb_get_bus_handle(index, bus)); -} -#endif - -usbd_status -usbd_get_root_hub(bus, dev) - usbd_bus_handle bus; - usbd_device_handle *dev; -{ - *dev = bus->root_hub; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_port_count(dev, nports) - usbd_device_handle dev; - u_int8_t *nports; -{ - if (dev->hub == 0) - return (USBD_INVAL); - *nports = dev->hub->hubdesc.bNbrPorts; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_hub2device_handle(dev, port, devp) - usbd_device_handle dev; - u_int8_t port; - usbd_device_handle *devp; -{ - if (dev->hub == 0 || port >= dev->hub->hubdesc.bNbrPorts || - dev->hub->ports[port].device == 0) - return (USBD_INVAL); - *devp = dev->hub->ports[port].device; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_request2pipe_handle(reqh, pipe) - usbd_request_handle reqh; - usbd_pipe_handle *pipe; -{ - *pipe = reqh->pipe; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_pipe2interface_handle(pipe, iface) - usbd_pipe_handle pipe; - usbd_interface_handle *iface; -{ - *iface = pipe->iface; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_interface2device_handle(iface, dev) - usbd_interface_handle iface; - usbd_device_handle *dev; -{ - *dev = iface->device; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_device2bus_handle(dev, bus) - usbd_device_handle dev; - usbd_bus_handle *bus; -{ - *bus = dev->bus; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_device2interface_handle(dev, ifaceno, iface) - usbd_device_handle dev; - u_int8_t ifaceno; - usbd_interface_handle *iface; -{ - if (!dev->cdesc) - return (USBD_NOT_CONFIGURED); - if (ifaceno >= dev->cdesc->bNumInterface) - return (USBD_INVAL); - *iface = &dev->ifaces[ifaceno]; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_set_interface_private_handle(iface, priv) - usbd_interface_handle iface; - usbd_private_handle priv; -{ - iface->priv = priv; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_interface_private_handle(iface, priv) - usbd_interface_handle iface; - usbd_private_handle *priv; -{ - *priv = iface->priv; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_reference_pipe(pipe) - usbd_pipe_handle pipe; -{ - pipe->refcnt++; - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_dereference_pipe(pipe) - usbd_pipe_handle pipe; -{ - pipe->refcnt--; - return (USBD_NORMAL_COMPLETION); -} - -usbd_lock_token -usbd_lock() -{ - return (splusb()); -} - -void -usbd_unlock(tok) - usbd_lock_token tok; -{ - splx(tok); -} - -/* XXXX use altno */ -usbd_status -usbd_set_interface(iface, altidx) - usbd_interface_handle iface; - int altidx; -{ - usb_device_request_t req; - usbd_status r; - - if (LIST_FIRST(&iface->pipes) != 0) - return (USBD_IN_USE); - - if (iface->endpoints) - free(iface->endpoints, M_USB); - iface->endpoints = 0; - iface->idesc = 0; - iface->state = USBD_INTERFACE_IDLE; - - r = usbd_fill_iface_data(iface->device, iface->index, altidx); - if (r != USBD_NORMAL_COMPLETION) - return (r); - - req.bmRequestType = UT_WRITE_INTERFACE; - req.bRequest = UR_SET_INTERFACE; - USETW(req.wValue, iface->idesc->bAlternateSetting); - USETW(req.wIndex, iface->idesc->bInterfaceNumber); - USETW(req.wLength, 0); - return usbd_do_request(iface->device, &req, 0); -} - -int -usbd_get_no_alts(cdesc, ifaceno) - usb_config_descriptor_t *cdesc; - int ifaceno; -{ - char *p = (char *)cdesc; - char *end = p + UGETW(cdesc->wTotalLength); - usb_interface_descriptor_t *d; - int n; - - for (n = 0; p < end; p += d->bLength) { - d = (usb_interface_descriptor_t *)p; - if (p + d->bLength <= end && - d->bDescriptorType == UDESC_INTERFACE && - d->bInterfaceNumber == ifaceno) - n++; - } - return (n); -} - -int -usbd_get_interface_altindex(iface) - usbd_interface_handle iface; -{ - return (iface->altindex); -} - -usbd_status -usbd_get_interface(iface, aiface) - usbd_interface_handle iface; - u_int8_t *aiface; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_INTERFACE; - req.bRequest = UR_GET_INTERFACE; - USETW(req.wValue, 0); - USETW(req.wIndex, iface->idesc->bInterfaceNumber); - USETW(req.wLength, 1); - return usbd_do_request(iface->device, &req, aiface); -} - -/*** Internal routines ***/ - -/* Dequeue all pipe operations, called at splusb(). */ -static usbd_status -usbd_ar_pipe(pipe) - usbd_pipe_handle pipe; -{ - usbd_request_handle reqh; - -#if 0 - for (;;) { - reqh = SIMPLEQ_FIRST(&pipe->queue); - if (reqh == 0) - break; - SIMPLEQ_REMOVE_HEAD(&pipe->queue, reqh, next); - reqh->status = USBD_CANCELLED; - if (reqh->callback) - reqh->callback(reqh, reqh->priv, reqh->status); - } -#else - while ((reqh = SIMPLEQ_FIRST(&pipe->queue))) { - pipe->methods->abort(reqh); - SIMPLEQ_REMOVE_HEAD(&pipe->queue, reqh, next); - } -#endif - return (USBD_NORMAL_COMPLETION); -} - -/* Dequeue all interface operations, called at splusb(). */ -static usbd_status -usbd_ar_iface(iface) - usbd_interface_handle iface; -{ - usbd_pipe_handle p; - usbd_status r, ret = USBD_NORMAL_COMPLETION; - - for (p = LIST_FIRST(&iface->pipes); p != 0; p = LIST_NEXT(p, next)) { - r = usbd_ar_pipe(p); - if (r != USBD_NORMAL_COMPLETION) - ret = r; - } - return (ret); -} - -static int usbd_global_init_done = 0; - -void -usbd_init() -{ -#if defined(__FreeBSD__) - dev_t dev; -#endif - - if (!usbd_global_init_done) { - usbd_global_init_done = 1; - SIMPLEQ_INIT(&usbd_free_requests); - -#if defined(__FreeBSD__) - dev = makedev(USB_CDEV_MAJOR, 0); - cdevsw_add(&dev, &usb_cdevsw, NULL); -#endif - } -} - -static void -usbd_transfer_cb(reqh) - usbd_request_handle reqh; -{ - usbd_pipe_handle pipe = reqh->pipe; - - /* Count completed transfers. */ - ++pipe->device->bus->stats.requests - [pipe->endpoint->edesc->bmAttributes & UE_XFERTYPE]; - - /* XXX check retry count */ - reqh->done = 1; - if (reqh->status == USBD_NORMAL_COMPLETION && - reqh->actlen < reqh->length && - !(reqh->flags & USBD_SHORT_XFER_OK)) { - DPRINTFN(-1, ("usbd_transfer_cb: short xfer %d<%d (bytes)\n", - reqh->actlen, reqh->length)); - reqh->status = USBD_SHORT_XFER; - } - if (reqh->callback) - reqh->callback(reqh, reqh->priv, reqh->status); -} - -static void -usbd_sync_transfer_cb(reqh) - usbd_request_handle reqh; -{ - usbd_transfer_cb(reqh); - if (!reqh->pipe->device->bus->use_polling) - wakeup(reqh); -} - -/* Like usbd_transfer(), but waits for completion. */ -usbd_status -usbd_sync_transfer(reqh) - usbd_request_handle reqh; -{ - usbd_status r; - int s; - - reqh->xfercb = usbd_sync_transfer_cb; - r = usbd_do_transfer(reqh); - if (r != USBD_IN_PROGRESS) - return (r); - s = splusb(); - if (!reqh->done) { - if (reqh->pipe->device->bus->use_polling) - panic("usbd_sync_transfer: not done\n"); - tsleep(reqh, PRIBIO, "usbsyn", 0); - } - splx(s); - return (reqh->status); -} - -usbd_status -usbd_do_request(dev, req, data) - usbd_device_handle dev; - usb_device_request_t *req; - void *data; -{ - return (usbd_do_request_flags(dev, req, data, 0, 0)); -} - -usbd_status -usbd_do_request_flags(dev, req, data, flags, actlen) - usbd_device_handle dev; - usb_device_request_t *req; - void *data; - u_int16_t flags; - int *actlen; -{ - usbd_request_handle reqh; - usbd_status r; - -#ifdef DIAGNOSTIC - if (!curproc) { - printf("usbd_do_request: not in process context\n"); - return (USBD_XXX); - } -#endif - - reqh = usbd_alloc_request(); - if (reqh == 0) - return (USBD_NOMEM); - r = usbd_setup_default_request( - reqh, dev, 0, USBD_DEFAULT_TIMEOUT, req, data, - UGETW(req->wLength), flags, 0); - if (r != USBD_NORMAL_COMPLETION) - goto bad; - r = usbd_sync_transfer(reqh); -#if defined(USB_DEBUG) || defined(DIAGNOSTIC) - if (reqh->actlen > reqh->length) - printf("usbd_do_request: overrun addr=%d type=0x%02x req=0x" - "%02x val=%d index=%d rlen=%d length=%d actlen=%d\n", - dev->address, reqh->request.bmRequestType, - reqh->request.bRequest, UGETW(reqh->request.wValue), - UGETW(reqh->request.wIndex), - UGETW(reqh->request.wLength), - reqh->length, reqh->actlen); -#endif - if (actlen) - *actlen = reqh->actlen; - if (r == USBD_STALLED) { - /* - * The control endpoint has stalled. Control endpoints - * should not halt, but some may do so anyway so clear - * any halt condition. - */ - usb_device_request_t treq; - usb_status_t status; - u_int16_t s; - usbd_status nr; - - treq.bmRequestType = UT_READ_ENDPOINT; - treq.bRequest = UR_GET_STATUS; - USETW(treq.wValue, 0); - USETW(treq.wIndex, 0); - USETW(treq.wLength, sizeof(usb_status_t)); - nr = usbd_setup_default_request( - reqh, dev, 0, USBD_DEFAULT_TIMEOUT, &treq, &status, - sizeof(usb_status_t), 0, 0); - if (nr != USBD_NORMAL_COMPLETION) - goto bad; - nr = usbd_sync_transfer(reqh); - if (nr != USBD_NORMAL_COMPLETION) - goto bad; - s = UGETW(status.wStatus); - DPRINTF(("usbd_do_request: status = 0x%04x\n", s)); - if (!(s & UES_HALT)) - goto bad; - treq.bmRequestType = UT_WRITE_ENDPOINT; - treq.bRequest = UR_CLEAR_FEATURE; - USETW(treq.wValue, UF_ENDPOINT_HALT); - USETW(treq.wIndex, 0); - USETW(treq.wLength, 0); - nr = usbd_setup_default_request( - reqh, dev, 0, USBD_DEFAULT_TIMEOUT, &treq, &status, - 0, 0, 0); - if (nr != USBD_NORMAL_COMPLETION) - goto bad; - nr = usbd_sync_transfer(reqh); - if (nr != USBD_NORMAL_COMPLETION) - goto bad; - } - - bad: - usbd_free_request(reqh); - return (r); -} - -void -usbd_do_request_async_cb(reqh, priv, status) - usbd_request_handle reqh; - usbd_private_handle priv; - usbd_status status; -{ -#if defined(USB_DEBUG) || defined(DIAGNOSTIC) - if (reqh->actlen > reqh->length) - printf("usbd_do_request: overrun addr=%d type=0x%02x req=0x" - "%02x val=%d index=%d rlen=%d length=%d actlen=%d\n", - reqh->pipe->device->address, - reqh->request.bmRequestType, - reqh->request.bRequest, UGETW(reqh->request.wValue), - UGETW(reqh->request.wIndex), - UGETW(reqh->request.wLength), - reqh->length, reqh->actlen); -#endif - usbd_free_request(reqh); -} - -/* - * Execute a request without waiting for completion. - * Can be used from interrupt context. - */ -usbd_status -usbd_do_request_async(dev, req, data) - usbd_device_handle dev; - usb_device_request_t *req; - void *data; -{ - usbd_request_handle reqh; - usbd_status r; - - reqh = usbd_alloc_request(); - if (reqh == 0) - return (USBD_NOMEM); - r = usbd_setup_default_request( - reqh, dev, 0, USBD_DEFAULT_TIMEOUT, req, data, - UGETW(req->wLength), 0, usbd_do_request_async_cb); - if (r != USBD_NORMAL_COMPLETION) { - usbd_free_request(reqh); - return (r); - } - r = usbd_transfer(reqh); - if (r != USBD_IN_PROGRESS) - return (r); - return (USBD_NORMAL_COMPLETION); -} - -struct usbd_quirks * -usbd_get_quirks(dev) - usbd_device_handle dev; -{ - return (dev->quirks); -} - -void -usbd_set_disco(p, hdl, data) - usbd_pipe_handle p; - void (*hdl) __P((void *)); - void *data; -{ - p->disco = hdl; - p->discoarg = data; -} - -/* XXX do periodic free() of free list */ - -/* - * Called from keyboard driver when in polling mode. - */ -void -usbd_dopoll(iface) - usbd_interface_handle iface; -{ - iface->device->bus->do_poll(iface->device->bus); -} - -void -usbd_set_polling(iface, on) - usbd_interface_handle iface; - int on; -{ - iface->device->bus->use_polling = on; -} - - -usb_endpoint_descriptor_t * -usbd_get_endpoint_descriptor(iface, address) - usbd_interface_handle iface; - u_int8_t address; -{ - struct usbd_endpoint *ep; - int i; - - for (i = 0; i < iface->idesc->bNumEndpoints; i++) { - ep = &iface->endpoints[i]; - if (ep->edesc->bEndpointAddress == address) - return (iface->endpoints[i].edesc); - } - return (0); -} - -#if defined(__FreeBSD__) -void -usbd_print_child(device_t parent, device_t child) -{ - /* - struct usb_softc *sc = device_get_softc(child); - */ - - printf(" at %s%d", device_get_name(parent), device_get_unit(parent)); - - /* XXX How do we get to the usbd_device_handle??? - usbd_device_handle dev = invalidadosch; - - printf(" addr %d", dev->addr); - - if (bootverbose) { - if (dev->lowspeed) - printf(", lowspeed"); - if (dev->self_powered) - printf(", self powered"); - else - printf(", %dmA", dev->power); - printf(", config %d", dev->config); - } - */ -} - -/* Reconfigure all the USB busses in the system. */ -int -usbd_driver_load(module_t mod, int what, void *arg) -{ - devclass_t usb_devclass = devclass_find("usb"); - devclass_t ugen_devclass = devclass_find("ugen"); - device_t *devlist; - int devcount; - int error; - - switch (what) { - case MOD_LOAD: - case MOD_UNLOAD: - if (!usb_devclass) - return 0; /* just ignore call */ - - if (ugen_devclass) { - /* detach devices from generic driver if possible */ - error = devclass_get_devices(ugen_devclass, &devlist, - &devcount); - if (!error) - for (devcount--; devcount >= 0; devcount--) - (void)DEVICE_DETACH(devlist[devcount]); - } - - error = devclass_get_devices(usb_devclass, &devlist, &devcount); - if (error) - return 0; /* XXX maybe transient, or error? */ - - for (devcount--; devcount >= 0; devcount--) - USB_RECONFIGURE(devlist[devcount]); - - free(devlist, M_TEMP); - return 0; - } - - return 0; /* nothing to do by us */ -} - -/* Set the description of the device including a malloc and copy. */ -void -usbd_device_set_desc(device_t device, char *devinfo) -{ - size_t l; - char *desc; - - if ( devinfo ) { - l = strlen(devinfo); - desc = malloc(l+1, M_USB, M_NOWAIT); - if (desc) - memcpy(desc, devinfo, l+1); - } else - desc = NULL; - - device_set_desc(device, desc); -} - -char * -usbd_devname(bdevice *bdev) -{ - static char buf[20]; - /* XXX a static buffer is not exactly a good idea, but the only - * thing that goes wrong is the string that is being printed - */ - - sprintf(buf, "%s%d", device_get_name(*bdev), device_get_unit(*bdev)); - return (buf); -} - -#endif diff --git a/sys/dev/usb/usbdi.h b/sys/dev/usb/usbdi.h deleted file mode 100644 index 88db91f8cb006..0000000000000 --- a/sys/dev/usb/usbdi.h +++ /dev/null @@ -1,343 +0,0 @@ -/* $NetBSD: usbdi.h,v 1.16 1999/01/08 11:58:26 augustss Exp $ */ -/* FreeBSD $Id: usbdi.h,v 1.4 1999/01/07 23:31:43 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -typedef struct usbd_bus *usbd_bus_handle; -typedef struct usbd_device *usbd_device_handle; -typedef struct usbd_interface *usbd_interface_handle; -typedef struct usbd_pipe *usbd_pipe_handle; -typedef struct usbd_request *usbd_request_handle; -typedef void *usbd_private_handle; - -typedef enum { - USBD_ENDPOINT_ACTIVE, - USBD_ENDPOINT_STALLED, -} usbd_endpoint_state; - -typedef enum { - USBD_PIPE_ACTIVE, - USBD_PIPE_STALLED, - USBD_PIPE_IDLE, -} usbd_pipe_state; - -typedef enum { - USBD_INTERFACE_ACTIVE, - USBD_INTERFACE_STALLED, - USBD_INTERFACE_IDLE, -} usbd_interface_state; - -typedef enum { - USBD_DEVICE_ATTACHED, - USBD_DEVICE_POWERED, - USBD_DEVICE_DEFAULT, - USBD_DEVICE_ADDRESSED, - USBD_DEVICE_CONFIGURED, - USBD_DEVICE_SUSPENDED, -} usbd_device_state; - -typedef enum { - USBD_NORMAL_COMPLETION = 0, - USBD_IN_PROGRESS, - /* errors */ - USBD_PENDING_REQUESTS, - USBD_NOT_STARTED, - USBD_INVAL, - USBD_IS_IDLE, - USBD_NOMEM, - USBD_CANCELLED, - USBD_BAD_ADDRESS, - USBD_IN_USE, - USBD_INTERFACE_NOT_ACTIVE, - USBD_NO_ADDR, - USBD_SET_ADDR_FAILED, - USBD_NO_POWER, - USBD_TOO_DEEP, - USBD_IOERROR, - USBD_NOT_CONFIGURED, - USBD_TIMEOUT, - USBD_SHORT_XFER, - USBD_STALLED, - USBD_INTERRUPTED, - - USBD_XXX, -} usbd_status; - -typedef int usbd_lock_token; - -typedef void (*usbd_callback) __P((usbd_request_handle, usbd_private_handle, - usbd_status)); - -/* Open flags */ -#define USBD_EXCLUSIVE_USE 0x01 - -/* Request flags */ -#define USBD_XFER_OUT 0x01 -#define USBD_XFER_IN 0x02 -#define USBD_SHORT_XFER_OK 0x04 - -#define USBD_NO_TIMEOUT 0 -#define USBD_DEFAULT_TIMEOUT 5000 /* ms = 5 s */ - -usbd_status usbd_open_pipe - __P((usbd_interface_handle iface, u_int8_t address, - u_int8_t flags, usbd_pipe_handle *pipe)); -usbd_status usbd_close_pipe __P((usbd_pipe_handle pipe)); -usbd_status usbd_transfer __P((usbd_request_handle req)); -usbd_request_handle usbd_alloc_request __P((void)); -usbd_status usbd_free_request __P((usbd_request_handle reqh)); -usbd_status usbd_setup_request - __P((usbd_request_handle reqh, usbd_pipe_handle pipe, - usbd_private_handle priv, void *buffer, - u_int32_t length, u_int16_t flags, u_int32_t timeout, - usbd_callback)); -usbd_status usbd_setup_device_request - __P((usbd_request_handle reqh, usb_device_request_t *req)); -usbd_status usbd_setup_default_request - __P((usbd_request_handle reqh, usbd_device_handle dev, - usbd_private_handle priv, u_int32_t timeout, - usb_device_request_t *req, void *buffer, - u_int32_t length, u_int16_t flags, usbd_callback)); -usbd_status usbd_set_request_timeout - __P((usbd_request_handle reqh, u_int32_t timeout)); -usbd_status usbd_get_request_status - __P((usbd_request_handle reqh, usbd_private_handle *priv, - void **buffer, u_int32_t *count, usbd_status *status)); -usbd_status usbd_request_device_data - __P((usbd_request_handle reqh, usb_device_request_t *req)); -usb_descriptor_t *usbd_get_descriptor - __P((usbd_interface_handle *iface, u_int8_t desc_type)); -usb_endpoint_descriptor_t *usbd_interface2endpoint_descriptor - __P((usbd_interface_handle iface, u_int8_t address)); -usbd_status usbd_set_configuration - __P((usbd_device_handle dev, u_int8_t conf)); -usbd_status usbd_retry_request - __P((usbd_request_handle reqh, u_int32_t retry_count)); -usbd_status usbd_abort_pipe __P((usbd_pipe_handle pipe)); -usbd_status usbd_abort_interface __P((usbd_interface_handle iface)); -usbd_status usbd_reset_pipe __P((usbd_pipe_handle pipe)); -usbd_status usbd_reset_interface __P((usbd_interface_handle iface)); -usbd_status usbd_clear_endpoint_stall __P((usbd_pipe_handle pipe)); -usbd_status usbd_clear_endpoint_stall_async __P((usbd_pipe_handle pipe)); -usbd_status usbd_set_pipe_state - __P((usbd_pipe_handle pipe, usbd_pipe_state state)); -usbd_status usbd_get_pipe_state - __P((usbd_pipe_handle pipe, usbd_pipe_state *state, - u_int32_t *endpoint_state, u_int32_t *request_count)); -usbd_status usbd_set_interface_state - __P((usbd_interface_handle iface, usbd_interface_state state)); -usbd_status usbd_get_interface_state - __P((usbd_interface_handle iface, usbd_interface_state *state)); -usbd_status usbd_get_device_state - __P((usbd_device_handle dev, usbd_device_state *state)); -usbd_status usbd_set_device_state - __P((usbd_device_handle dev, usbd_device_state state)); -usbd_status usbd_device_address - __P((usbd_device_handle dev, u_int8_t *address)); -usbd_status usbd_endpoint_address - __P((usbd_pipe_handle dev, u_int8_t *address)); -usbd_status usbd_endpoint_count - __P((usbd_interface_handle dev, u_int8_t *count)); -usbd_status usbd_interface_count - __P((usbd_device_handle dev, u_int8_t *count)); -#if 0 -u_int8_t usbd_bus_count __P((void)); -#endif -usbd_status usbd_get_bus_handle __P((u_int8_t index, usbd_bus_handle *bus)); -usbd_status usbd_get_root_hub - __P((usbd_bus_handle bus, usbd_device_handle *dev)); -usbd_status usbd_port_count __P((usbd_device_handle hub, u_int8_t *nports)); -usbd_status usbd_hub2device_handle - __P((usbd_device_handle hub, u_int8_t port, usbd_device_handle *dev)); -usbd_status usbd_request2pipe_handle - __P((usbd_request_handle reqh, usbd_pipe_handle *pipe)); -usbd_status usbd_pipe2interface_handle - __P((usbd_pipe_handle pipe, usbd_interface_handle *iface)); -usbd_status usbd_interface2device_handle - __P((usbd_interface_handle iface, usbd_device_handle *dev)); -usbd_status usbd_device2bus_handle - __P((usbd_device_handle dev, usbd_bus_handle *bus)); -usbd_status usbd_device2interface_handle - __P((usbd_device_handle dev, u_int8_t ifaceno, - usbd_interface_handle *iface)); -usbd_status usbd_set_interface_private_handle - __P((usbd_interface_handle iface, usbd_private_handle priv)); -usbd_status usbd_get_interface_private_handle - __P((usbd_interface_handle iface, usbd_private_handle *priv)); -usbd_status usbd_reference_pipe __P((usbd_pipe_handle pipe)); -usbd_status usbd_dereference_pipe __P((usbd_pipe_handle pipe)); -usbd_lock_token usbd_lock __P((void)); -void usbd_unlock __P((usbd_lock_token tok)); - -/* Non-standard */ -usbd_status usbd_sync_transfer __P((usbd_request_handle req)); -usbd_status usbd_open_pipe_intr - __P((usbd_interface_handle iface, u_int8_t address, - u_int8_t flags, usbd_pipe_handle *pipe, - usbd_private_handle priv, void *buffer, - u_int32_t length, usbd_callback)); -usbd_status usbd_open_pipe_iso - __P((usbd_interface_handle iface, u_int8_t address, - u_int8_t flags, usbd_pipe_handle *pipe, - usbd_private_handle priv, u_int32_t bufsize, u_int32_t nbuf, - usbd_callback)); -usbd_status usbd_do_request - __P((usbd_device_handle pipe, usb_device_request_t *req, void *data)); -usbd_status usbd_do_request_async - __P((usbd_device_handle pipe, usb_device_request_t *req, void *data)); -usbd_status usbd_do_request_flags - __P((usbd_device_handle pipe, usb_device_request_t *req, - void *data, u_int16_t flags, int *)); -usb_interface_descriptor_t *usbd_get_interface_descriptor - __P((usbd_interface_handle iface)); -usb_config_descriptor_t *usbd_get_config_descriptor - __P((usbd_device_handle dev)); -usb_device_descriptor_t *usbd_get_device_descriptor - __P((usbd_device_handle dev)); -usbd_status usbd_set_interface __P((usbd_interface_handle, int)); -int usbd_get_no_alts __P((usb_config_descriptor_t *, int)); -usbd_status usbd_get_interface - __P((usbd_interface_handle iface, u_int8_t *aiface)); -void usbd_fill_deviceinfo - __P((usbd_device_handle dev, struct usb_device_info *di)); -int usbd_get_interface_altindex __P((usbd_interface_handle iface)); - -usb_interface_descriptor_t *usbd_find_idesc - __P((usb_config_descriptor_t *cd, int iindex, int ano)); -usb_endpoint_descriptor_t *usbd_find_edesc - __P((usb_config_descriptor_t *cd, int ifaceidx, int altidx, - int endptidx)); - -void usbd_dopoll __P((usbd_interface_handle)); -void usbd_set_polling __P((usbd_interface_handle iface, int on)); - -/* NetBSD attachment information */ - -/* Attach data */ -struct usb_attach_arg { - int port; - int configno; - int ifaceno; - usbd_device_handle device; /* current device */ - usbd_interface_handle iface; /* current interface */ - int usegeneric; - usbd_interface_handle *ifaces; /* all interfaces */ - int nifaces; /* number of interfaces */ -}; - -#if defined(__NetBSD__) -/* Match codes. */ -/* First five codes is for a whole device. */ -#define UMATCH_VENDOR_PRODUCT_REV 14 -#define UMATCH_VENDOR_PRODUCT 13 -#define UMATCH_VENDOR_DEVCLASS_DEVPROTO 12 -#define UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO 11 -#define UMATCH_DEVCLASS_DEVSUBCLASS 10 -/* Next six codes are for interfaces. */ -#define UMATCH_VENDOR_PRODUCT_REV_CONF_IFACE 9 -#define UMATCH_VENDOR_PRODUCT_CONF_IFACE 8 -#define UMATCH_VENDOR_IFACESUBCLASS_IFACEPROTO 7 -#define UMATCH_VENDOR_IFACESUBCLASS 6 -#define UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO 5 -#define UMATCH_IFACECLASS_IFACESUBCLASS 4 -#define UMATCH_IFACECLASS 3 -#define UMATCH_IFACECLASS_GENERIC 2 -/* Generic driver */ -#define UMATCH_GENERIC 1 -/* No match */ -#define UMATCH_NONE 0 - -#elif defined(__FreeBSD__) -/* FreeBSD needs values less than zero */ -/* for the moment disabled -#define UMATCH_VENDOR_PRODUCT_REV -14 -#define UMATCH_VENDOR_PRODUCT -13 -#define UMATCH_VENDOR_DEVCLASS_DEVPROTO -12 -#define UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO -11 -#define UMATCH_DEVCLASS_DEVSUBCLASS -10 -#define UMATCH_VENDOR_PRODUCT_REV_CONF_IFACE -9 -#define UMATCH_VENDOR_PRODUCT_CONF_IFACE -8 -#define UMATCH_VENDOR_IFACESUBCLASS_IFACEPROTO -7 -#define UMATCH_VENDOR_IFACESUBCLASS -6 -#define UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO -5 -#define UMATCH_IFACECLASS_IFACESUBCLASS -4 -#define UMATCH_IFACECLASS -3 -#define UMATCH_IFACECLASS_GENERIC -2 -#define UMATCH_GENERIC -1 -#define UMATCH_NONE ENXIO - -* For the moment we use Yes/No answers with appropriate -* sorting in the config file -*/ -#define UMATCH_VENDOR_PRODUCT_REV 0 -#define UMATCH_VENDOR_PRODUCT 0 -#define UMATCH_VENDOR_DEVCLASS_DEVPROTO 0 -#define UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO 0 -#define UMATCH_DEVCLASS_DEVSUBCLASS 0 -#define UMATCH_VENDOR_PRODUCT_REV_CONF_IFACE 0 -#define UMATCH_VENDOR_PRODUCT_CONF_IFACE 0 -#define UMATCH_VENDOR_IFACESUBCLASS_IFACEPROTO 0 -#define UMATCH_VENDOR_IFACESUBCLASS 0 -#define UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO 0 -#define UMATCH_IFACECLASS_IFACESUBCLASS 0 -#define UMATCH_IFACECLASS 0 -#define UMATCH_IFACECLASS_GENERIC 0 -#define UMATCH_GENERIC 0 -#define UMATCH_NONE ENXIO - - -#endif - -void usbd_devinfo __P((usbd_device_handle, int, char *)); -struct usbd_quirks *usbd_get_quirks __P((usbd_device_handle)); -void usbd_set_disco __P((usbd_pipe_handle, void (*)(void *), void *)); -usb_endpoint_descriptor_t *usbd_get_endpoint_descriptor - __P((usbd_interface_handle iface, u_int8_t address)); - -#if defined(__FreeBSD__) -int usbd_driver_load __P((module_t mod, int what, void *arg)); -void usbd_device_set_desc __P((device_t device, char *devinfo)); -char *usbd_devname(bdevice *bdev); -bus_print_child_t usbd_print_child; -#endif - -/* XXX */ -#define splusb splbio -#define IPL_USB IPL_BIO -/* XXX */ - diff --git a/sys/dev/usb/usbdi_util.c b/sys/dev/usb/usbdi_util.c deleted file mode 100644 index fbb7a809ef40f..0000000000000 --- a/sys/dev/usb/usbdi_util.c +++ /dev/null @@ -1,511 +0,0 @@ -/* $NetBSD: usbdi_util.c,v 1.13 1999/01/08 11:58:26 augustss Exp $ */ -/* FreeBSD $Id: usbdi_util.c,v 1.5 1999/01/07 23:31:43 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/proc.h> -#if defined(__FreeBSD__) -#include <sys/bus.h> -#endif - -#include <dev/usb/usb.h> -#include <dev/usb/usbhid.h> - -#include <dev/usb/usbdi.h> -#include <dev/usb/usbdi_util.h> - -#ifdef USB_DEBUG -#define DPRINTF(x) if (usbdebug) printf x -#define DPRINTFN(n,x) if (usbdebug>(n)) printf x -extern int usbdebug; -#else -#define DPRINTF(x) -#define DPRINTFN(n,x) -#endif - -usbd_status -usbd_get_desc(dev, type, index, len, desc) - usbd_device_handle dev; - int type, index; - int len; - void *desc; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_DEVICE; - req.bRequest = UR_GET_DESCRIPTOR; - USETW2(req.wValue, type, index); - USETW(req.wIndex, 0); - USETW(req.wLength, len); - return (usbd_do_request(dev, &req, desc)); -} - -usbd_status -usbd_get_config_desc(dev, conf, d) - usbd_device_handle dev; - int conf; - usb_config_descriptor_t *d; -{ - usbd_status r; - - DPRINTFN(3,("usbd_get_config_desc: conf=%d\n", conf)); - r = usbd_get_desc(dev, UDESC_CONFIG, conf, - USB_CONFIG_DESCRIPTOR_SIZE, d); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (d->bDescriptorType != UDESC_CONFIG) { - DPRINTFN(-1,("usbd_get_config_desc: conf %d, bad desc %d\n", - conf, d->bDescriptorType)); - return (USBD_INVAL); - } - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_config_desc_full(dev, conf, d, size) - usbd_device_handle dev; - int conf; - void *d; - int size; -{ - DPRINTFN(3,("usbd_get_config_desc_full: conf=%d\n", conf)); - return (usbd_get_desc(dev, UDESC_CONFIG, conf, size, d)); -} - -usbd_status -usbd_get_device_desc(dev, d) - usbd_device_handle dev; - usb_device_descriptor_t *d; -{ - DPRINTFN(3,("usbd_get_device_desc:\n")); - return (usbd_get_desc(dev, UDESC_DEVICE, - 0, USB_DEVICE_DESCRIPTOR_SIZE, d)); -} - -usbd_status -usbd_get_device_status(dev, st) - usbd_device_handle dev; - usb_status_t *st; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_DEVICE; - req.bRequest = UR_GET_STATUS; - USETW(req.wValue, 0); - USETW(req.wIndex, 0); - USETW(req.wLength, sizeof(usb_status_t)); - return (usbd_do_request(dev, &req, st)); -} - -usbd_status -usbd_get_hub_status(dev, st) - usbd_device_handle dev; - usb_hub_status_t *st; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_CLASS_DEVICE; - req.bRequest = UR_GET_STATUS; - USETW(req.wValue, 0); - USETW(req.wIndex, 0); - USETW(req.wLength, sizeof(usb_hub_status_t)); - return (usbd_do_request(dev, &req, st)); -} - -usbd_status -usbd_set_address(dev, addr) - usbd_device_handle dev; - int addr; -{ - usb_device_request_t req; - - req.bmRequestType = UT_WRITE_DEVICE; - req.bRequest = UR_SET_ADDRESS; - USETW(req.wValue, addr); - USETW(req.wIndex, 0); - USETW(req.wLength, 0); - return usbd_do_request(dev, &req, 0); -} - -usbd_status -usbd_get_port_status(dev, port, ps) - usbd_device_handle dev; - int port; - usb_port_status_t *ps; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_CLASS_OTHER; - req.bRequest = UR_GET_STATUS; - USETW(req.wValue, 0); - USETW(req.wIndex, port); - USETW(req.wLength, sizeof *ps); - return (usbd_do_request(dev, &req, ps)); -} - -usbd_status -usbd_clear_port_feature(dev, port, sel) - usbd_device_handle dev; - int port, sel; -{ - usb_device_request_t req; - - req.bmRequestType = UT_WRITE_CLASS_OTHER; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, sel); - USETW(req.wIndex, port); - USETW(req.wLength, 0); - return (usbd_do_request(dev, &req, 0)); -} - -usbd_status -usbd_set_port_feature(dev, port, sel) - usbd_device_handle dev; - int port, sel; -{ - usb_device_request_t req; - - req.bmRequestType = UT_WRITE_CLASS_OTHER; - req.bRequest = UR_SET_FEATURE; - USETW(req.wValue, sel); - USETW(req.wIndex, port); - USETW(req.wLength, 0); - return (usbd_do_request(dev, &req, 0)); -} - - -usbd_status -usbd_set_protocol(iface, report) - usbd_interface_handle iface; - int report; -{ - usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); - usbd_device_handle dev; - usb_device_request_t req; - usbd_status r; - - DPRINTFN(4, ("usbd_set_protocol: iface=%p, report=%d, endpt=%d\n", - iface, report, id->bInterfaceNumber)); - if (!id) - return (USBD_IOERROR); - r = usbd_interface2device_handle(iface, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!id) - return (USBD_INVAL); - req.bmRequestType = UT_WRITE_CLASS_INTERFACE; - req.bRequest = UR_SET_PROTOCOL; - USETW(req.wValue, report); - USETW(req.wIndex, id->bInterfaceNumber); - USETW(req.wLength, 0); - return (usbd_do_request(dev, &req, 0)); -} - -usbd_status -usbd_set_report(iface, type, id, data, len) - usbd_interface_handle iface; - int type; - int id; - void *data; - int len; -{ - usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); - usbd_device_handle dev; - usb_device_request_t req; - usbd_status r; - - DPRINTFN(4, ("usbd_set_report: len=%d\n", len)); - if (!ifd) - return (USBD_IOERROR); - r = usbd_interface2device_handle(iface, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!ifd) - return (USBD_INVAL); - req.bmRequestType = UT_WRITE_CLASS_INTERFACE; - req.bRequest = UR_SET_REPORT; - USETW2(req.wValue, type, id); - USETW(req.wIndex, ifd->bInterfaceNumber); - USETW(req.wLength, len); - return (usbd_do_request(dev, &req, data)); -} - -usbd_status -usbd_set_report_async(iface, type, id, data, len) - usbd_interface_handle iface; - int type; - int id; - void *data; - int len; -{ - usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); - usbd_device_handle dev; - usb_device_request_t req; - usbd_status r; - - DPRINTFN(4, ("usbd_set_report_async: len=%d\n", len)); - if (!ifd) - return (USBD_IOERROR); - r = usbd_interface2device_handle(iface, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!ifd) - return (USBD_INVAL); - req.bmRequestType = UT_WRITE_CLASS_INTERFACE; - req.bRequest = UR_SET_REPORT; - USETW2(req.wValue, type, id); - USETW(req.wIndex, ifd->bInterfaceNumber); - USETW(req.wLength, len); - return (usbd_do_request_async(dev, &req, data)); -} - -usbd_status -usbd_get_report(iface, type, id, data, len) - usbd_interface_handle iface; - int type; - int id; - void *data; - int len; -{ - usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); - usbd_device_handle dev; - usb_device_request_t req; - usbd_status r; - - DPRINTFN(4, ("usbd_set_report: len=%d\n", len)); - if (!id) - return (USBD_IOERROR); - r = usbd_interface2device_handle(iface, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!ifd) - return (USBD_INVAL); - req.bmRequestType = UT_READ_CLASS_INTERFACE; - req.bRequest = UR_GET_REPORT; - USETW2(req.wValue, type, id); - USETW(req.wIndex, ifd->bInterfaceNumber); - USETW(req.wLength, len); - return (usbd_do_request(dev, &req, data)); -} - -usbd_status -usbd_set_idle(iface, duration, id) - usbd_interface_handle iface; - int duration; - int id; -{ - usb_interface_descriptor_t *ifd = usbd_get_interface_descriptor(iface); - usbd_device_handle dev; - usb_device_request_t req; - usbd_status r; - - DPRINTFN(4, ("usbd_set_idle: %d %d\n", duration, id)); - if (!ifd) - return (USBD_IOERROR); - r = usbd_interface2device_handle(iface, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - if (!ifd) - return (USBD_INVAL); - req.bmRequestType = UT_WRITE_CLASS_INTERFACE; - req.bRequest = UR_SET_IDLE; - USETW2(req.wValue, duration, id); - USETW(req.wIndex, ifd->bInterfaceNumber); - USETW(req.wLength, 0); - return (usbd_do_request(dev, &req, 0)); -} - -usbd_status -usbd_get_report_descriptor(dev, ifcno, repid, size, d) - usbd_device_handle dev; - int ifcno; - int repid; - int size; - void *d; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_INTERFACE; - req.bRequest = UR_GET_DESCRIPTOR; - USETW2(req.wValue, UDESC_REPORT, repid); - USETW(req.wIndex, ifcno); - USETW(req.wLength, size); - return (usbd_do_request(dev, &req, d)); -} - -usb_hid_descriptor_t * -usbd_get_hid_descriptor(ifc) - usbd_interface_handle ifc; -{ - usb_interface_descriptor_t *idesc = usbd_get_interface_descriptor(ifc); - usbd_device_handle dev; - usb_config_descriptor_t *cdesc; - usb_hid_descriptor_t *hd; - char *p, *end; - usbd_status r; - - if (!idesc) - return (0); - r = usbd_interface2device_handle(ifc, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (0); - cdesc = usbd_get_config_descriptor(dev); - - p = (char *)idesc + idesc->bLength; - end = (char *)cdesc + UGETW(cdesc->wTotalLength); - - for (; p < end; p += hd->bLength) { - hd = (usb_hid_descriptor_t *)p; - if (p + hd->bLength <= end && hd->bDescriptorType == UDESC_HID) - return (hd); - if (hd->bDescriptorType == UDESC_INTERFACE) - break; - } - return (0); -} - -usbd_status -usbd_alloc_report_desc(ifc, descp, sizep, mem) - usbd_interface_handle ifc; - void **descp; - int *sizep; -#if defined(__NetBSD__) - int mem; -#elif defined(__FreeBSD__) - struct malloc_type *mem; -#endif - -{ - usb_interface_descriptor_t *id; - usb_hid_descriptor_t *hid; - usbd_device_handle dev; - usbd_status r; - - r = usbd_interface2device_handle(ifc, &dev); - if (r != USBD_NORMAL_COMPLETION) - return (r); - id = usbd_get_interface_descriptor(ifc); - if (!id) - return (USBD_INVAL); - hid = usbd_get_hid_descriptor(ifc); - if (!hid) - return (USBD_IOERROR); - *sizep = UGETW(hid->descrs[0].wDescriptorLength); - *descp = malloc(*sizep, mem, M_NOWAIT); - if (!*descp) - return (USBD_NOMEM); - /* XXX should not use 0 Report ID */ - r = usbd_get_report_descriptor(dev, id->bInterfaceNumber, 0, - *sizep, *descp); - if (r != USBD_NORMAL_COMPLETION) { - free(*descp, mem); - return (r); - } - return (USBD_NORMAL_COMPLETION); -} - -usbd_status -usbd_get_config(dev, conf) - usbd_device_handle dev; - u_int8_t *conf; -{ - usb_device_request_t req; - - req.bmRequestType = UT_READ_DEVICE; - req.bRequest = UR_GET_CONFIG; - USETW(req.wValue, 0); - USETW(req.wIndex, 0); - USETW(req.wLength, 1); - return (usbd_do_request(dev, &req, conf)); -} - -static void usbd_bulk_transfer_cb __P((usbd_request_handle reqh, - usbd_private_handle priv, usbd_status status)); -static void -usbd_bulk_transfer_cb(reqh, priv, status) - usbd_request_handle reqh; - usbd_private_handle priv; - usbd_status status; -{ - wakeup(reqh); -} - -usbd_status -usbd_bulk_transfer(reqh, pipe, flags, buf, size, lbl) - usbd_request_handle reqh; - usbd_pipe_handle pipe; - u_int16_t flags; - void *buf; - u_int32_t *size; - char *lbl; -{ - usbd_private_handle priv; - void *buffer; - usbd_status r; - int s, error; - - r = usbd_setup_request(reqh, pipe, 0, buf, *size, - flags, USBD_NO_TIMEOUT, usbd_bulk_transfer_cb); - if (r != USBD_NORMAL_COMPLETION) - return (r); - DPRINTFN(1, ("usbd_bulk_transfer: start transfer %d bytes\n", *size)); - s = splusb(); /* don't want callback until tsleep() */ - r = usbd_transfer(reqh); - if (r != USBD_IN_PROGRESS) { - splx(s); - return (r); - } - error = tsleep((caddr_t)reqh, PZERO | PCATCH, lbl, 0); - splx(s); - if (error) { - usbd_abort_pipe(pipe); - return (USBD_INTERRUPTED); - } - usbd_get_request_status(reqh, &priv, &buffer, size, &r); - DPRINTFN(1,("usbd_bulk_transfer: transferred %d\n", *size)); - if (r != USBD_NORMAL_COMPLETION) { - DPRINTF(("usbd_bulk_transfer: error=%d\n", r)); - usbd_clear_endpoint_stall(pipe); - } - return (r); -} - diff --git a/sys/dev/usb/usbdi_util.h b/sys/dev/usb/usbdi_util.h deleted file mode 100644 index f5d700d1d91ce..0000000000000 --- a/sys/dev/usb/usbdi_util.h +++ /dev/null @@ -1,92 +0,0 @@ -/* $NetBSD: usbdi_util.h,v 1.12 1999/01/01 15:25:57 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -usbd_status usbd_get_desc __P((usbd_device_handle dev, int type, - int index, int len, void *desc)); -usbd_status usbd_get_config_desc __P((usbd_device_handle, int, - usb_config_descriptor_t *)); -usbd_status usbd_get_config_desc_full __P((usbd_device_handle, int, - void *, int)); -usbd_status usbd_get_device_desc __P((usbd_device_handle dev, - usb_device_descriptor_t *d)); -usbd_status usbd_set_address __P((usbd_device_handle dev, int addr)); -usbd_status usbd_get_port_status __P((usbd_device_handle, - int, usb_port_status_t *)); -usbd_status usbd_set_port_feature __P((usbd_device_handle dev, int, int)); -usbd_status usbd_clear_port_feature __P((usbd_device_handle, int, int)); -usbd_status usbd_get_device_status __P((usbd_device_handle,usb_status_t*)); -usbd_status usbd_get_hub_status __P((usbd_device_handle dev, - usb_hub_status_t *st)); -usbd_status usbd_set_protocol __P((usbd_interface_handle dev, int report)); -usbd_status usbd_get_report_descriptor - __P((usbd_device_handle dev, int ifcno, int repid, int size, void *d)); -struct usb_hid_descriptor *usbd_get_hid_descriptor - __P((usbd_interface_handle ifc)); -usbd_status usbd_set_report - __P((usbd_interface_handle iface,int type,int id,void *data,int len)); -usbd_status usbd_set_report_async - __P((usbd_interface_handle iface,int type,int id,void *data,int len)); -usbd_status usbd_get_report - __P((usbd_interface_handle iface,int type,int id,void *data,int len)); -usbd_status usbd_set_idle - __P((usbd_interface_handle iface, int duration, int id)); -#if defined(__NetBSD__) -usbd_status usbd_alloc_report_desc - __P((usbd_interface_handle ifc, void **descp, int *sizep, int mem)); -#elif defined(__FreeBSD__) -usbd_status usbd_alloc_report_desc - __P((usbd_interface_handle ifc, void **descp, int *sizep, struct malloc_type * mem)); -#endif -usbd_status usbd_get_config - __P((usbd_device_handle dev, u_int8_t *conf)); -usbd_status usbd_get_string_desc - __P((usbd_device_handle dev, int sindex, int langid, - usb_string_descriptor_t *sdesc)); -void usbd_delay_ms __P((usbd_device_handle, u_int)); - - -usbd_status usbd_set_config_no - __P((usbd_device_handle dev, int no, int msg)); -usbd_status usbd_set_config_index - __P((usbd_device_handle dev, int index, int msg)); - -usbd_status usbd_bulk_transfer - __P((usbd_request_handle reqh, usbd_pipe_handle pipe, u_int16_t flags, - void *buf, u_int32_t *size, char *lbl)); diff --git a/sys/dev/usb/usbdivar.h b/sys/dev/usb/usbdivar.h deleted file mode 100644 index 7c89b777e3d03..0000000000000 --- a/sys/dev/usb/usbdivar.h +++ /dev/null @@ -1,227 +0,0 @@ -/* $NetBSD: usbdivar.h,v 1.16 1999/01/08 11:58:26 augustss Exp $ */ -/* FreeBSD $Id: usbdivar.h,v 1.6 1999/01/07 23:31:45 n_hibma Exp $ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - -struct usbd_request; -struct usbd_pipe; - -struct usbd_endpoint { - usb_endpoint_descriptor_t *edesc; - usbd_endpoint_state state; - int refcnt; - int toggle; /* XXX */ -}; - -typedef void (*usbd_xfercb)__P((usbd_request_handle req)); - -struct usbd_methods { - usbd_status (*transfer)__P((usbd_request_handle reqh)); - usbd_status (*start)__P((usbd_request_handle reqh)); - void (*abort)__P((usbd_request_handle reqh)); - void (*close)__P((usbd_pipe_handle pipe)); - usbd_status (*isobuf)__P((usbd_pipe_handle pipe, - u_int32_t bufsize,u_int32_t nbuf)); -}; - -struct usbd_port { - usb_port_status_t status; - u_int16_t power; /* mA of current on port */ - u_int8_t portno; - u_int8_t restartcnt; -#define USBD_RESTART_MAX 5 - struct usbd_device *device; - struct usbd_device *parent; /* The ports hub */ -}; - -struct usbd_hub { - usbd_status (*explore)__P((usbd_device_handle hub)); - void *hubsoftc; - usb_hub_descriptor_t hubdesc; - struct usbd_port ports[1]; -}; - -struct usb_softc; - -/*****/ - -struct usbd_bus { - /* Filled by HC driver */ - bdevice bdev; /* base device, host adapter */ - usbd_status (*open_pipe)__P((struct usbd_pipe *pipe)); - u_int32_t pipe_size; /* size of a pipe struct */ - void (*do_poll)__P((struct usbd_bus *)); - /* Filled by usb driver */ - struct usbd_device *root_hub; - usbd_device_handle devices[USB_MAX_DEVICES]; - char needs_explore;/* a hub a signalled a change */ - char use_polling; - struct usb_softc *usbctl; - struct usb_device_stats stats; -}; - -struct usbd_device { - struct usbd_bus *bus; - usbd_device_state state; - struct usbd_pipe *default_pipe; - u_int8_t address; - u_int8_t depth; - u_int8_t lowspeed; - u_int16_t power; - u_int8_t self_powered; - int config; - int langid; /* language to use for strings */ -#define USBD_NOLANG (-1) - struct usbd_port *powersrc; - struct usbd_endpoint def_ep; /* for pipe 0 */ - usb_endpoint_descriptor_t def_ep_desc; /* for pipe 0 */ - struct usbd_interface *ifaces; - usb_device_descriptor_t ddesc; - usb_config_descriptor_t *cdesc; /* full config descr */ - struct usbd_quirks *quirks; - struct usbd_hub *hub; /* only if this is a hub */ - void *softc; /* device softc if attached */ -}; - -struct usbd_interface { - struct usbd_device *device; - usbd_interface_state state; - usb_interface_descriptor_t *idesc; - int index; - int altindex; - struct usbd_endpoint *endpoints; - void *priv; - LIST_HEAD(, usbd_pipe) pipes; -}; - -struct usbd_pipe { - struct usbd_interface *iface; - struct usbd_device *device; - struct usbd_endpoint *endpoint; - usbd_pipe_state state; - int32_t refcnt; - char running; - SIMPLEQ_HEAD(, usbd_request) queue; - LIST_ENTRY(usbd_pipe) next; - - void (*disco) __P((void *)); - void *discoarg; - - usbd_request_handle intrreqh; /* used for repeating requests */ - - /* Filled by HC driver. */ - struct usbd_methods *methods; -}; - -struct usbd_request { - struct usbd_pipe *pipe; - void *priv; - void *buffer; - u_int32_t length; - u_int32_t actlen; - u_int16_t flags; - u_int32_t timeout; - usbd_status status; - usbd_callback callback; - usbd_xfercb xfercb; - u_int32_t retries; - char done; - - usb_device_request_t request; - u_int8_t isreq; - - SIMPLEQ_ENTRY(usbd_request) next; - - void *hcpriv; /* XXX private use by the HC driver */ - -#if defined(__FreeBSD__) - struct callout_handle timo_handle; -#endif -}; - -void usbd_init __P((void)); - -/* Routines from usb_subr.c */ -int usbctlprint __P((void *, const char *)); -void usb_delay_ms __P((usbd_bus_handle, u_int)); -void usbd_devinfo_vp __P((usbd_device_handle, char *, char *)); -usbd_status usbd_reset_port __P((usbd_device_handle dev, - int port, usb_port_status_t *ps)); -usbd_status usbd_setup_pipe __P((usbd_device_handle dev, - usbd_interface_handle iface, - struct usbd_endpoint *, - usbd_pipe_handle *pipe)); -usbd_status usbd_new_device __P((bdevice *parent, - usbd_bus_handle bus, int depth, - int lowspeed, int port, - struct usbd_port *)); -void usbd_remove_device __P((usbd_device_handle, - struct usbd_port *)); -int usbd_printBCD __P((char *cp, int bcd)); -usbd_status usb_insert_transfer __P((usbd_request_handle reqh)); -void usb_start_next __P((usbd_pipe_handle pipe)); -usbd_status usbd_fill_iface_data __P((usbd_device_handle dev, - int i, int a)); - -/* Routines from usb.c */ -int usb_bus_count __P((void)); -usbd_status usb_get_bus_handle __P((int, usbd_bus_handle *)); -void usb_needs_explore __P((usbd_bus_handle)); - -/* Locator stuff. */ - -#if defined(__NetBSD__) -#include "locators.h" -#elif defined(__FreeBSD__) -/* XXX these values are used to statically bind some elements in the USB tree - * to specific driver instances. This should be somehow emulated in FreeBSD - * but can be done later on. - * The values are copied from the files.usb file in the NetBSD sources. - */ -#define UHUBCF_PORT_DEFAULT -1 -#define UHUBCF_CONFIGURATION_DEFAULT -1 -#define UHUBCF_INTERFACE_DEFAULT -1 -#endif - -#define uhubcf_port cf_loc[UHUBCF_PORT] -#define uhubcf_configuration cf_loc[UHUBCF_CONFIGURATION] -#define uhubcf_interface cf_loc[UHUBCF_INTERFACE] -#define UHUB_UNK_PORT UHUBCF_PORT_DEFAULT /* wildcarded 'port' */ -#define UHUB_UNK_CONFIGURATION UHUBCF_CONFIGURATION_DEFAULT /* wildcarded 'configuration' */ -#define UHUB_UNK_INTERFACE UHUBCF_INTERFACE_DEFAULT /* wildcarded 'interface' */ - diff --git a/sys/dev/usb/usbhid.h b/sys/dev/usb/usbhid.h deleted file mode 100644 index edec4130e1473..0000000000000 --- a/sys/dev/usb/usbhid.h +++ /dev/null @@ -1,135 +0,0 @@ -/* $NetBSD: usbhid.h,v 1.3 1998/12/26 12:53:04 augustss Exp $ */ -/* FreeBSD $Id$ */ - -/* - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Lennart Augustsson (augustss@carlstedt.se) at - * Carlstedt Research & Technology. - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE 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. - */ - - -#ifndef _USBHID_H_ -#define _USBHID_H_ - -#define UR_GET_HID_DESCRIPTOR 0x06 -#define UDESC_HID 0x21 -#define UDESC_REPORT 0x22 -#define UDESC_PHYSICAL 0x23 -#define UR_SET_HID_DESCRIPTOR 0x07 -#define UR_GET_REPORT 0x01 -#define UR_SET_REPORT 0x09 -#define UR_GET_IDLE 0x02 -#define UR_SET_IDLE 0x0a -#define UR_GET_PROTOCOL 0x03 -#define UR_SET_PROTOCOL 0x0b - -typedef struct usb_hid_descriptor { - uByte bLength; - uByte bDescriptorType; - uWord bcdHID; - uByte bCountryCode; - uByte bNumDescriptors; - struct { - uByte bDescriptorType; - uWord wDescriptorLength; - } descrs[1]; -} usb_hid_descriptor_t; -#define USB_HID_DESCRIPTOR_SIZE(n) (9+(n)*3) - -/* Usage pages */ -#define HUP_GENERIC_DESKTOP 0x0001 -#define HUP_SIMULATION 0x0002 -#define HUP_LEDS 0x0008 -#define HUP_BUTTON 0x0009 - -/* Usages, generic desktop */ -#define HUG_POINTER 0x0001 -#define HUG_MOUSE 0x0002 -#define HUG_JOYSTICK 0x0004 -#define HUG_GAME_PAD 0x0005 -#define HUG_KEYBOARD 0x0006 -#define HUG_KEYPAD 0x0007 -#define HUG_X 0x0030 -#define HUG_Y 0x0031 -#define HUG_Z 0x0032 -#define HUG_RX 0x0033 -#define HUG_RY 0x0034 -#define HUG_RZ 0x0035 -#define HUG_SLIDER 0x0036 -#define HUG_DIAL 0x0037 -#define HUG_WHEEL 0x0038 -#define HUG_HAT_SWITCH 0x0039 -#define HUG_COUNTED_BUFFER 0x003a -#define HUG_BYTE_COUNT 0x003b -#define HUG_MOTION_WAKEUP 0x003c -#define HUG_VX 0x0040 -#define HUG_VY 0x0041 -#define HUG_VZ 0x0042 -#define HUG_VBRX 0x0043 -#define HUG_VBRY 0x0044 -#define HUG_VBRZ 0x0045 -#define HUG_VNO 0x0046 -#define HUG_SYSTEM_CONTROL 0x0080 -#define HUG_SYSTEM_POWER_DOWN 0x0081 -#define HUG_SYSTEM_SLEEP 0x0082 -#define HUG_SYSTEM_WAKEUP 0x0083 -#define HUG_SYSTEM_CONTEXT_MENU 0x0084 -#define HUG_SYSTEM_MAIN_MENU 0x0085 -#define HUG_SYSTEM_APP_MENU 0x0086 -#define HUG_SYSTEM_MENU_HELP 0x0087 -#define HUG_SYSTEM_MENU_EXIT 0x0088 -#define HUG_SYSTEM_MENU_SELECT 0x0089 -#define HUG_SYSTEM_MENU_RIGHT 0x008a -#define HUG_SYSTEM_MENU_LEFT 0x008b -#define HUG_SYSTEM_MENU_UP 0x008c -#define HUG_SYSTEM_MENU_DOWN 0x008d - -#define HID_USAGE2(p,u) (((p) << 16) | u) - -#define UHID_INPUT_REPORT 0x01 -#define UHID_OUTPUT_REPORT 0x02 -#define UHID_FEATURE_REPORT 0x03 - -/* Bits in the input/output/feature items */ -#define HIO_CONST 0x001 -#define HIO_VARIABLE 0x002 -#define HIO_RELATIVE 0x004 -#define HIO_WRAP 0x008 -#define HIO_NONLINEAR 0x010 -#define HIO_NOPREF 0x020 -#define HIO_NULLSTATE 0x040 -#define HIO_VOLATILE 0x080 -#define HIO_BUFBYTES 0x100 - -#endif /* _USBHID_H_ */ diff --git a/sys/dev/vinum/COPYRIGHT b/sys/dev/vinum/COPYRIGHT deleted file mode 100644 index ed43ff1f54ebb..0000000000000 --- a/sys/dev/vinum/COPYRIGHT +++ /dev/null @@ -1,37 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: COPYRIGHT,v 1.1.1.1 1998/09/16 05:56:21 grog Exp $ - */ diff --git a/sys/dev/vinum/Makefile b/sys/dev/vinum/Makefile deleted file mode 100644 index 363aa7a1e1b5f..0000000000000 --- a/sys/dev/vinum/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: Makefile,v 1.4 1998/12/28 04:56:22 peter Exp $ - -.PATH: ${.CURDIR}/../../sys/dev/ccd -KMOD= vinum_mod -SRCS= vinum.c vinum.h vnode_if.h parser.c config.c io.c util.c vinumhdr.h request.h \ - state.c memory.c request.c lock.c vinumext.h vinumio.h vinumkw.h \ - vinumstate.h vinumvar.h revive.c vinumioctl.c interrupt.c -NOMAN= -PSEUDO_LKM= -CFLAGS = -I${.CURDIR} -O -g -DVINUMDEBUG -Wall -Wno-unused -Wno-parentheses - -CLEANFILES+= vinum.h vnode_if.h vnode_if.c - -all: - -# We don't need this, but the Makefile wants it -vinum.h: - touch $@ - -state.h: maketabs vinumstate.h - ./maketabs >state.h - -maketabs: maketabs.c - ${CC} -g -o maketabs maketabs.c - -.include <bsd.kmod.mk> diff --git a/sys/dev/vinum/makestatetext b/sys/dev/vinum/makestatetext deleted file mode 100755 index 02a927e4e3080..0000000000000 --- a/sys/dev/vinum/makestatetext +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/sh -# Make statetexts.h from vinumstate.h -# $Id: makestatetext,v 1.5 1999/01/15 07:30:45 grog Exp grog $ -infile=vinumstate.h -ofile=statetexts.h -cat > $ofile <<FOO -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called \`\`Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided \`\`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 company 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. - * - */ - -FOO - -echo >>$ofile "/* Created by $0 on" `date`. "Do not edit */" -echo >>$ofile -echo >>$ofile "/* Drive state texts */" -echo >>$ofile "char *drivestatetext [] = - { " -egrep -e 'drive_[A-z0-9]*,' <$infile | grep -v = | sed 's: *drive_\([^,]*\).*: \"\1\",:' >>$ofile -cat <<FOO >> $ofile - }; - -/* Subdisk state texts */ -char *sdstatetext [] = - { -FOO -egrep -e 'sd_[A-z0-9]*,' $infile | grep -v = | sed 's: *sd_\([^,]*\).*: \"\1\",:' >>$ofile -cat <<FOO >> $ofile - }; - -/* Plex state texts */ -char *plexstatetext [] = - { -FOO -egrep -e 'plex_[A-z0-9]*,' $infile | grep -v = | sed 's: *plex_\([^,]*\).*: \"\1\",:' >>$ofile -cat <<FOO >> $ofile - }; - -/* Volume state texts */ -char *volstatetext [] = - { -FOO -egrep -e 'volume_[A-z0-9]*,' $infile | grep -v = | sed 's: *volume_\([^,]*\).*: \"\1\",:' >>$ofile -cat <<FOO >> $ofile - }; -FOO diff --git a/sys/dev/vinum/request.h b/sys/dev/vinum/request.h deleted file mode 100644 index dfeb19604ca2c..0000000000000 --- a/sys/dev/vinum/request.h +++ /dev/null @@ -1,220 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: request.h,v 1.13 1999/01/14 05:46:22 grog Exp grog $ - */ - -/* Information needed to set up a transfer */ - -enum xferinfo { - XFR_NORMAL_READ = 1, - XFR_NORMAL_WRITE = 2, /* write request in normal mode */ - XFR_RECOVERY_READ = 4, - XFR_DEGRADED_WRITE = 8, - XFR_PARITYLESS_WRITE = 0x10, - XFR_NO_PARITY_STRIPE = 0x20, /* parity stripe is not available */ - XFR_DATA_BLOCK = 0x40, /* data block in request */ - XFR_PARITY_BLOCK = 0x80, /* parity block in request */ - XFR_BAD_SUBDISK = 0x100, /* this subdisk is dead */ - XFR_MALLOCED = 0x200, /* this buffer is malloced */ -#if VINUMDEBUG - XFR_PHASE2 = 0x800, /* documentation only: 2nd phase write */ -#endif - XFR_REVIVECONFLICT = 0x1000, /* possible conflict with a revive operation */ - /* operations that need a parity block */ - XFR_PARITYOP = (XFR_NORMAL_WRITE | XFR_RECOVERY_READ | XFR_DEGRADED_WRITE), - /* operations that use the group parameters */ - XFR_GROUPOP = (XFR_DEGRADED_WRITE | XFR_RECOVERY_READ), - /* operations that that use the data parameters */ - XFR_DATAOP = (XFR_NORMAL_READ | XFR_NORMAL_WRITE | XFR_PARITYLESS_WRITE), - /* operations requiring read before write */ - XFR_RBW = (XFR_NORMAL_WRITE | XFR_DEGRADED_WRITE), - /* operations that need a malloced buffer */ - XFR_NEEDS_MALLOC = (XFR_NORMAL_WRITE | XFR_RECOVERY_READ | XFR_DEGRADED_WRITE) -}; - -/* Describe one low-level request, part - * of a high-level request. This is an - * extended struct buf buffer, and the first - * element *must* be a struct buf. We pass this structure - * to the I/O routines instead of a struct buf in oder - * to be able to locate the high-level request when it - * completes. - * - * All offsets and lengths are in "blocks", i.e. sectors */ -struct rqelement { - struct buf b; /* buf structure */ - struct rqgroup *rqg; /* pointer to our group */ - /* Information about the transfer */ - daddr_t sdoffset; /* offset in subdisk */ - int useroffset; /* offset in user buffer of normal data */ - /* dataoffset and datalen refer to "individual" - * data transfers (normal read, parityless write) - * and also degraded write. - * - * groupoffset and grouplen refer to the other - * "group" operations (normal write, recovery read) - * Both the offsets are relative to the start of the - * local buffer */ - int dataoffset; /* offset in buffer of the normal data */ - int groupoffset; /* offset in buffer of group data */ - short datalen; /* length of normal data (sectors) */ - short grouplen; /* length of group data (sectors) */ - short buflen; /* total buffer length to allocate */ - short flags; /* really enum xferinfo (see above) */ - /* Ways to find other components */ - short sdno; /* subdisk number */ - short driveno; /* drive number */ -}; - -/* A group of requests built to satisfy a certain - * component of a user request */ -struct rqgroup { - struct rqgroup *next; /* pointer to next group */ - struct request *rq; /* pointer to the request */ - short count; /* number of requests in this group */ - short active; /* and number active */ - short plexno; /* index of plex */ - int badsdno; /* index of bad subdisk or -1 */ - enum xferinfo flags; /* description of transfer */ - struct rqelement rqe[0]; /* and the elements of this request */ -}; - -/* Describe one high-level request and the - * work we have to do to satisfy it */ -struct request { - struct buf *bp; /* pointer to the high-level request */ - enum xferinfo flags; - union { - int volno; /* volume index */ - int plexno; /* or plex index */ - } volplex; - int error; /* current error indication */ - int sdno; /* reviving subdisk (XFR_REVIVECONFLICT) */ - short isplex; /* set if this is a plex request */ - short active; /* number of subrequests still active */ - struct rqgroup *rqg; /* pointer to the first group of requests */ - struct rqgroup *lrqg; /* and to the last group of requests */ - struct request *next; /* link of waiting requests */ -}; - -/* Extended buffer header for subdisk I/O. Includes - * a pointer to the user I/O request. */ -struct sdbuf { - struct buf b; /* our buffer */ - struct buf *bp; /* and pointer to parent */ - short driveno; /* drive index */ - short sdno; /* and subdisk index */ -}; - -/* Values returned by rqe and friends. - * Be careful with these: they are in order of increasing - * seriousness. Some routines check for > REQUEST_RECOVERED - * to indicate a completely failed request. */ -enum requeststatus { - REQUEST_OK, /* request built OK */ - REQUEST_RECOVERED, /* request OK, but involves RAID5 recovery */ - REQUEST_EOF, /* request failed: outside plex */ - REQUEST_DOWN, /* request failed: subdisk down */ - REQUEST_ENOMEM /* ran out of memory */ -}; - -#ifdef VINUMDEBUG -/* Trace entry for request info (DEBUG_LASTREQS) */ -enum rqinfo_type { - loginfo_unused, /* never been used */ - loginfo_user_bp, /* this is the bp when strategy is called */ - loginfo_user_bpl, /* and this is the bp at launch time */ - loginfo_rqe, /* user RQE */ - loginfo_iodone, /* iodone */ - loginfo_raid5_data, /* write RAID-5 data block */ - loginfo_raid5_parity /* write RAID-5 parity block */ -}; - -union rqinfou { /* info to pass to logrq */ - struct buf *bp; - struct rqelement *rqe; /* address of request, for correlation */ -}; - -struct rqinfo { - enum rqinfo_type type; /* kind of event */ - struct timeval timestamp; /* time it happened */ - struct buf *bp; /* point to user buffer */ - union { - struct buf b; /* yup, the *whole* buffer header */ - struct rqelement rqe; /* and the whole rqe */ - } info; -}; - -#define RQINFO_SIZE 128 /* number of info slots in buffer */ - -void logrq(enum rqinfo_type type, union rqinfou info, struct buf *ubp); -#endif - -/* Structures for the daemon */ - -/* types of request to the daemon */ -enum daemonrq { - daemonrq_none, /* dummy to catch bugs */ - daemonrq_ioerror, /* error occurred on I/O */ - daemonrq_saveconfig, /* save configuration */ - daemonrq_return, /* return to userland */ - daemonrq_ping, /* show sign of life */ - daemonrq_init, /* initialize a plex */ - daemonrq_revive, /* revive a subdisk */ -}; - -/* info field for daemon requests */ -union daemoninfo { /* and the request information */ - struct request *rq; /* for daemonrq_ioerror */ - struct sd *sd; /* for daemonrq_revive */ - struct plex *plex; /* for daemonrq_init */ -}; - -struct daemonq { - struct daemonq *next; /* pointer to next element in queue */ - enum daemonrq type; /* type of request */ - union daemoninfo info; /* and the request information */ -}; - -void queue_daemon_request(enum daemonrq type, union daemoninfo info); - -extern int daemon_options; - -enum daemon_option { - daemon_verbose = 1, /* talk about what we're doing */ - daemon_stopped = 2, - daemon_noupdate = 4, /* don't update the disk config, for recovery */ -}; diff --git a/sys/dev/vinum/statetexts.h b/sys/dev/vinum/statetexts.h deleted file mode 100644 index 1388400b46eea..0000000000000 --- a/sys/dev/vinum/statetexts.h +++ /dev/null @@ -1,87 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - */ - -/* Created by ./makestatetext on Wed Jan 20 16:30:10 CST 1999. Do not edit */ - -/* Drive state texts */ -char *drivestatetext[] = -{ - "unallocated", - "uninit", - "down", - "up", -}; - -/* Subdisk state texts */ -char *sdstatetext[] = -{ - "unallocated", - "uninit", - "init", - "empty", - "initializing", - "obsolete", - "stale", - "crashed", - "down", - "reviving", - "reborn", - "up", -}; - -/* Plex state texts */ -char *plexstatetext[] = -{ - "unallocated", - "init", - "faulty", - "down", - "initializing", - "corrupt", - "degraded", - "flaky", - "up", -}; - -/* Volume state texts */ -char *volstatetext[] = -{ - "unallocated", - "uninit", - "down", - "up", -}; diff --git a/sys/dev/vinum/vinum.c b/sys/dev/vinum/vinum.c deleted file mode 100644 index 5d0dad245559d..0000000000000 --- a/sys/dev/vinum/vinum.c +++ /dev/null @@ -1,501 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinum.c,v 1.23 1999/01/15 05:03:15 grog Exp grog $ - */ - -#define STATIC /* nothing while we're testing XXX */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <sys/sysproto.h> /* for sync(2) */ -#ifdef VINUMDEBUG -#include <sys/reboot.h> -int debug = 0; -#endif -#include <dev/vinum/request.h> - -STATIC struct cdevsw vinum_cdevsw = -{ - vinumopen, vinumclose, vinumread, vinumwrite, - vinumioctl, nostop, nullreset, nodevtotty, - seltrue, nommap, vinumstrategy, "vinum", - NULL, -1, vinumdump, vinumsize, - D_DISK, 0, -1 -}; - -/* Called by main() during pseudo-device attachment. */ -STATIC void vinumattach(void *); - -STATIC void vinumgetdisklabel(dev_t); -int vinum_inactive(void); -void free_vinum(int); - -#ifndef ACTUALLY_LKM_NOT_KERNEL -STATIC int vinum_modevent(module_t mod, modeventtype_t type, void *unused); -#endif - -/* Why aren't these declared anywhere? XXX */ -int setjmp(jmp_buf); -void longjmp(jmp_buf, int); - -extern jmp_buf command_fail; /* return here if config fails */ - -struct _vinum_conf vinum_conf; /* configuration information */ - -STATIC int vinum_devsw_installed = 0; - -/* - * Called by main() during pseudo-device attachment. All we need - * to do is allocate enough space for devices to be configured later, and - * add devsw entries. - */ -void -vinumattach(void *dummy) -{ - char *buf; /* pointer to temporary buffer */ - struct _ioctl_reply *ioctl_reply; /* struct to return */ - struct uio uio; - struct iovec iovec; - - /* modload should prevent multiple loads, so this is worth a panic */ - if ((vinum_conf.flags & VF_LOADED) != NULL) - panic("vinum: already loaded"); - - printf("vinum: loaded\n"); - vinum_conf.flags |= VF_LOADED; /* we're loaded now */ - - daemonq = NULL; /* initialize daemon's work queue */ - dqend = NULL; - - cdevsw_add_generic(BDEV_MAJOR, CDEV_MAJOR, &vinum_cdevsw); -#ifdef DEVFS -#error DEVFS not finished yet -#endif - - uio.uio_iov = &iovec; - uio.uio_iovcnt = 1; /* just one buffer */ - uio.uio_offset = 0; /* start at the beginning */ - uio.uio_resid = 512; /* one sector */ - uio.uio_segflg = UIO_SYSSPACE; /* we're in system space */ - uio.uio_rw = UIO_READ; /* do we need this? */ - uio.uio_procp = curproc; /* do it for our own process */ - - iovec.iov_len = 512; - buf = (char *) Malloc(iovec.iov_len); /* get a buffer */ - CHECKALLOC(buf, "vinum: no memory\n"); /* can't get 512 bytes? */ - iovec.iov_base = buf; /* read into buf */ - - /* allocate space: drives... */ - DRIVE = (struct drive *) Malloc(sizeof(struct drive) * INITIAL_DRIVES); - CHECKALLOC(DRIVE, "vinum: no memory\n"); - vinum_conf.drives_allocated = INITIAL_DRIVES; /* number of drive slots allocated */ - vinum_conf.drives_used = 0; /* and number in use */ - - /* volumes, ... */ - VOL = (struct volume *) Malloc(sizeof(struct volume) * INITIAL_VOLUMES); - CHECKALLOC(VOL, "vinum: no memory\n"); - vinum_conf.volumes_allocated = INITIAL_VOLUMES; /* number of volume slots allocated */ - vinum_conf.volumes_used = 0; /* and number in use */ - - /* plexes, ... */ - PLEX = (struct plex *) Malloc(sizeof(struct plex) * INITIAL_PLEXES); - CHECKALLOC(PLEX, "vinum: no memory\n"); - vinum_conf.plexes_allocated = INITIAL_PLEXES; /* number of plex slots allocated */ - vinum_conf.plexes_used = 0; /* and number in use */ - - /* and subdisks */ - SD = (struct sd *) Malloc(sizeof(struct sd) * INITIAL_SUBDISKS); - CHECKALLOC(SD, "vinum: no memory\n"); - vinum_conf.subdisks_allocated = INITIAL_SUBDISKS; /* number of sd slots allocated */ - vinum_conf.subdisks_used = 0; /* and number in use */ - - ioctl_reply = NULL; /* no reply on longjmp */ -} - -/* Check if we have anything open. If so, return 0 (not inactive), - * otherwise 1 (inactive) */ -int -vinum_inactive(void) -{ - int i; - int can_do = 1; /* assume we can do it */ - - lock_config(); - for (i = 0; i < vinum_conf.volumes_used; i++) { - if (VOL[i].opencount != 0) { /* volume is open */ - can_do = 0; - break; - } - } - unlock_config(); - return can_do; -} - -/* Free all structures. - * If cleardrive is 0, save the configuration; otherwise - * remove the configuration from the drive. - * - * Before coming here, ensure that no volumes are open. - */ -void -free_vinum(int cleardrive) -{ - int i; - - if (cleardrive) { - for (i = 0; i < vinum_conf.drives_used; i++) - remove_drive(i); /* remove the drive */ - } else { /* keep the config */ - save_config(); - if (DRIVE != NULL) { - for (i = 0; i < vinum_conf.drives_used; i++) - free_drive(&DRIVE[i]); /* close files and things */ - Free(DRIVE); - } - } - queue_daemon_request(daemonrq_return, NULL); /* tell daemon to stop */ - if (SD != NULL) - Free(SD); - if (PLEX != NULL) { - for (i = 0; i < vinum_conf.plexes_used; i++) { - struct plex *plex = &vinum_conf.plex[i]; - - if (plex->state != plex_unallocated) { /* we have real data there */ - if (plex->sdnos) - Free(plex->sdnos); - } - } - Free(PLEX); - } - if (VOL != NULL) - Free(VOL); - bzero(&vinum_conf, sizeof(vinum_conf)); - while ((daemon_options & daemon_stopped) == 0) /* daemon hasn't stopped yet, */ - tsleep(&vinum_daemon, PRIBIO, "vdaemn", 10 * hz); /* wait for it to stop */ - tsleep(&vinum_daemon, PRIBIO, "diedie", 3 * hz); /* and wait another 3 secs XXX */ -} - -#ifdef ACTUALLY_LKM_NOT_KERNEL /* stuff for LKMs */ - -MOD_MISC(vinum); - -/* - * Function called when loading the driver. - */ - -STATIC int -vinum_load(struct lkm_table *lkmtp, int cmd) -{ - vinumattach(NULL); - return 0; /* OK */ -} - -/* - * Function called when unloading the driver. - */ -STATIC int -vinum_unload(struct lkm_table *lkmtp, int cmd) -{ - if (vinum_inactive()) { /* is anything open? */ - struct sync_args dummyarg = - {0}; - - printf("vinum: unloaded\n"); - sync(curproc, &dummyarg); /* write out buffers */ - free_vinum(0); /* no: clean up */ - cdevsw[CDEV_MAJOR] = NULL; /* and cdevsw */ - return 0; - } else - return EBUSY; -} - -/* - * Dispatcher function for the module (load/unload/stat). - */ -int -vinum_mod(struct lkm_table *lkmtp, int cmd, int ver) -{ - MOD_DISPATCH(vinum, /* module name */ - lkmtp, /* LKM table */ - cmd, /* command */ - ver, - vinum_load, /* load with this function */ - vinum_unload, /* and unload with this */ - lkm_nullcmd); -} - -#else /* not LKM */ - -STATIC int -vinum_modevent(module_t mod, modeventtype_t type, void *unused) -{ - struct sync_args dummyarg = - {0}; - - switch (type) { - case MOD_LOAD: - vinumattach(NULL); - return 0; /* OK */ - case MOD_UNLOAD: - if (!vinum_inactive()) /* is anything open? */ - return EBUSY; - sync(curproc, &dummyarg); /* write out buffers */ - free_vinum(0); /* no: clean up */ - cdevsw[CDEV_MAJOR] = NULL; /* and cdevsw */ - return 0; - default: - break; - } - return 0; -} - -moduledata_t vinum_mod = -{ - "vinum", - vinum_modevent, - 0 -}; -DECLARE_MODULE(vinum, vinum_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); - -#endif /* LKM */ - -/* ARGSUSED */ -/* Open a vinum object - * At the moment, we only open volumes and the - * super device. It's a nice concept to be - * able to open drives, subdisks and plexes, but - * I can't think what good it could be */ -int -vinumopen(dev_t dev, - int flags, - int fmt, - struct proc *p) -{ - int s; /* spl */ - int error; - unsigned int index; - struct volume *vol; - struct plex *plex; - struct sd *sd; - struct devcode *device; - - device = (struct devcode *) &dev; - - error = 0; - /* First, decide what we're looking at */ - switch (device->type) { - case VINUM_VOLUME_TYPE: - index = Volno(dev); - if (index >= vinum_conf.volumes_used) - return ENXIO; /* no such device */ - vol = &VOL[index]; - - switch (vol->state) { - case volume_unallocated: - case volume_uninit: - return ENXIO; - - case volume_up: - vol->opencount = 1; - vol->pid = p->p_pid; /* and say who we are (do we need this? XXX) */ - return 0; - - case volume_down: - return EIO; - - default: - return EINVAL; - } - - case VINUM_PLEX_TYPE: - if (Volno(dev) >= vinum_conf.volumes_used) - return ENXIO; - index = Plexno(dev); /* get plex index in vinum_conf */ - if (index >= vinum_conf.plexes_used) - return ENXIO; /* no such device */ - plex = &PLEX[index]; - - switch (plex->state) { - case plex_unallocated: - return EINVAL; - - default: - s = splhigh(); - if (plex->pid /* it's open already */ - && (plex->pid != p->p_pid)) { /* and not by us, */ - splx(s); - return EBUSY; /* one at a time, please */ - } - plex->pid = p->p_pid; /* and say who we are (do we need this? XXX) */ - splx(s); - return 0; - } - - case VINUM_SD_TYPE: - if ((Volno(dev) >= vinum_conf.volumes_used) || /* no such volume */ - (Plexno(dev) >= vinum_conf.plexes_used)) /* or no such plex */ - return ENXIO; /* no such device */ - index = Sdno(dev); /* get the subdisk number */ - if (index >= vinum_conf.subdisks_used) - return ENXIO; /* no such device */ - sd = &SD[index]; - - /* Opening a subdisk is always a special operation, so we - * ignore the state as long as it represents a real subdisk */ - switch (sd->state) { - case sd_unallocated: - case sd_uninit: - return EINVAL; - - default: - s = splhigh(); - if (sd->pid /* it's open already */ - && (sd->pid != p->p_pid)) { /* and not by us, */ - splx(s); - return EBUSY; /* one at a time, please */ - } - sd->pid = p->p_pid; /* and say who we are (do we need this? XXX) */ - splx(s); - return 0; - } - - case VINUM_DRIVE_TYPE: - default: - return ENODEV; /* don't know what to do with these */ - - case VINUM_SUPERDEV_TYPE: - if (p->p_ucred->cr_uid == 0) { /* root calling, */ - vinum_conf.opencount = 1; /* we're open */ - return 0; /* no worries opening super dev */ - } else - return EPERM; /* you can't do that! */ - } -} - -/* ARGSUSED */ -int -vinumclose(dev_t dev, - int flags, - int fmt, - struct proc *p) -{ - unsigned int index; - struct volume *vol; - struct plex *plex; - struct sd *sd; - struct devcode *device = (struct devcode *) &dev; - - index = Volno(dev); - /* First, decide what we're looking at */ - switch (device->type) { - case VINUM_VOLUME_TYPE: - if (index >= vinum_conf.volumes_used) - return ENXIO; /* no such device */ - vol = &VOL[index]; - - switch (vol->state) { - case volume_unallocated: - case volume_uninit: - return ENXIO; - - case volume_up: - vol->opencount = 0; /* reset our flags */ - vol->pid = NULL; /* and forget who owned us */ - return 0; - - case volume_down: - return EIO; - - default: - return EINVAL; - } - - case VINUM_PLEX_TYPE: - if (Volno(dev) >= vinum_conf.volumes_used) - return ENXIO; - index = Plexno(dev); /* get plex index in vinum_conf */ - if (index >= vinum_conf.plexes_used) - return ENXIO; /* no such device */ - plex = &PLEX[index]; - plex->pid = 0; - return 0; - - case VINUM_SD_TYPE: - if ((Volno(dev) >= vinum_conf.volumes_used) || /* no such volume */ - (Plexno(dev) >= vinum_conf.plexes_used)) /* or no such plex */ - return ENXIO; /* no such device */ - index = Sdno(dev); /* get the subdisk number */ - if (index >= vinum_conf.subdisks_used) - return ENXIO; /* no such device */ - sd = &SD[index]; - sd->pid = 0; - return 0; - - case VINUM_SUPERDEV_TYPE: - if (p->p_ucred->cr_uid == 0) /* root calling, */ - vinum_conf.opencount = 0; /* no longer open */ - return 0; /* no worries closing super dev */ - - case VINUM_DRIVE_TYPE: - default: - return ENODEV; /* don't know what to do with these */ - } -} - -/* size routine */ -int -vinumsize(dev_t dev) -{ - struct volume *vol; - int size; - - vol = &VOL[Volno(dev)]; - - if (vol->state == volume_up) - size = vol->size; - else - return 0; /* err on the size of conservatism */ - - return size; -} - -int -vinumdump(dev_t dev) -{ - /* Not implemented. */ - return ENXIO; -} diff --git a/sys/dev/vinum/vinumconfig.c b/sys/dev/vinum/vinumconfig.c deleted file mode 100644 index 32e56b9250560..0000000000000 --- a/sys/dev/vinum/vinumconfig.c +++ /dev/null @@ -1,1730 +0,0 @@ -/* To do: - - * Don't store drive configuration on the config DB: read each drive's header - * to decide where it is. - * - * Accept any old crap in the config_<foo> functions, and complain when - * we try to bring it up. - * - * When trying to bring volumes up, check that the complete address range - * is covered. - */ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumconfig.c,v 1.22 1998/12/30 05:07:24 grog Exp grog $ - */ - -#define STATIC /* nothing while we're testing XXX */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> - -extern jmp_buf command_fail; /* return on a failed command */ - -/* Why aren't these declared anywhere? XXX */ -void longjmp(jmp_buf, int); - -#define MAXTOKEN 64 /* maximum number of tokens in a line */ - -/* We can afford the luxury of global variables here, - * since start_config ensures that these functions - * are single-threaded. */ - -/* These are indices in vinum_conf of the last-mentioned of each kind of object */ -static int current_drive = -1; /* note the last drive we mention, for - * some defaults */ -static int current_plex = -1; /* and the same for the last plex */ -static int current_volume = -1; /* and the last volme */ -static struct _ioctl_reply *ioctl_reply; /* struct to return via ioctl */ - - -/* These values are used by most of these routines, so set them as globals */ -static char *token[MAXTOKEN]; /* pointers to individual tokens */ -static int tokens; /* number of tokens */ - -#define TOCONS 0x01 -#define TOTTY 0x02 -#define TOLOG 0x04 - -struct putchar_arg { - int flags; - struct tty *tty; -}; - -#define MSG_MAX 1024 /* maximum length of a formatted message */ -/* Format an error message and return to the user in the reply. - * CARE: This routine is designed to be called only from the - * configuration routines, so it assumes it's the owner of - * the configuration lock, and unlocks it on exit */ -void -throw_rude_remark(int error, char *msg,...) -{ - int retval; - va_list ap; - char *text; - static int finishing; /* don't recurse */ - int was_finishing; - - va_start(ap, msg); - if ((ioctl_reply != NULL) /* we're called from the user */ - &&(!(vinum_conf.flags & VF_KERNELOP))) { /* and we're not doing kernel things: return msg */ - /* XXX We can't just format to ioctl_reply, since it - * may contain our input parameters */ - text = Malloc(MSG_MAX); - if (text == NULL) { - printf("vinum: can't allocate error message buffer"); - printf("vinum: "); - vprintf(msg, ap); /* print to the console */ - printf("\n"); - } else { - retval = kvprintf(msg, NULL, (void *) text, 10, ap); - text[retval] = '\0'; /* delimit */ - strcpy(ioctl_reply->msg, text); - ioctl_reply->error = error; /* first byte is the error number */ - Free(text); - } - } else { - printf("vinum: "); - vprintf(msg, ap); /* print to the console */ - printf("\n"); - } - va_end(ap); - - if (vinum_conf.flags & VF_READING_CONFIG) /* go through to the bitter end, */ - return; - /* We have a problem here: we want to unlock the - * configuration, which implies tidying up, but - * if we find an error while tidying up, we could - * recurse for ever. Use this kludge to only try - * once */ - was_finishing = finishing; - finishing = 1; - finish_config(was_finishing); /* unlock anything we may be holding */ - finishing = was_finishing; - longjmp(command_fail, error); -} - -/* Function declarations */ -int atoi(char *); /* no atoi in the kernel */ - -/* Minimal version of atoi */ -int -atoi(char *s) -{ /* no atoi in the kernel */ - int r = 0; - int sign = 1; - - while (((*s >= '0') && (*s <= '9')) || (*s == '-')) { - if (*s == '-') - sign = -sign; - else - r = r * 10 + (*s - '0'); - } - return r; -} - -/* Find index of volume in vinum_conf. Return the index - * if found, or -1 if not */ -int -volume_index(struct volume *vol) -{ - int i; - - for (i = 0; i < vinum_conf.volumes_used; i++) - if (&VOL[i] == vol) - return i; - return -1; -} - -/* Find index of plex in vinum_conf. Return the index - * if found, or -1 if not */ -int -plex_index(struct plex *plex) -{ - int i; - - for (i = 0; i < vinum_conf.plexes_used; i++) - if (&PLEX[i] == plex) - return i; - return -1; -} - -/* Find index of subdisk in vinum_conf. Return the index - * if found, or -1 if not */ -int -sd_index(struct sd *sd) -{ - int i; - - for (i = 0; i < vinum_conf.subdisks_used; i++) - if (&SD[i] == sd) - return i; - return -1; -} - -/* Find index of drive in vinum_conf. Return the index - * if found, or -1 if not */ -int -drive_index(struct drive *drive) -{ - int i; - - for (i = 0; i < vinum_conf.drives_used; i++) - if (&DRIVE[i] == drive) - return i; - return -1; -} - -/* Check a volume to see if the plex is already assigned to it. - * Return index in volume->plex, or -1 if not assigned */ -int -my_plex(int volno, int plexno) -{ - int i; - struct volume *vol; - - vol = &VOL[volno]; /* point to volno */ - for (i = 0; i < vol->plexes; i++) - if (vol->plex[i] == plexno) - return i; - return -1; /* not found */ -} - -/* Check a plex to see if the subdisk is already assigned to it. - * Return index in plex->sd, or -1 if not assigned */ -int -my_sd(int plexno, int sdno) -{ - int i; - struct plex *plex; - - plex = &PLEX[plexno]; - for (i = 0; i < plex->subdisks; i++) - if (plex->sdnos[i] == sdno) - return i; - return -1; /* not found */ -} - -/* Check that this operation is being done in the kernel. - * longjmp out if not. op the name of the operation. */ -void -checkkernel(char *op) -{ - if (vinum_conf.flags & VF_KERNELOP == 0) - throw_rude_remark(EPERM, "Can't perform '%s' from user space", op); -} - -/* Add plex to the volume if possible */ -int -give_plex_to_volume(int volno, int plexno) -{ - struct volume *vol; - - /* XXX It's not an error for the plex to already - * belong to the volume, but we need to check a - * number of things to make sure it's done right. - * Some day. */ - if (my_plex(volno, plexno) >= 0) - return plexno; /* that's it */ - - vol = &VOL[volno]; /* point to volume */ - if (vol->plexes == MAXPLEX) /* all plexes allocated */ - throw_rude_remark(ENOSPC, - "Too many plexes for volume %s", - vol->name); - else if ((vol->plexes > 0) /* we have other plexes */ - &&(vol->flags & VF_CONFIG_SETUPSTATE == 0)) /* and we're not setting up state */ - invalidate_subdisks(&PLEX[plexno], sd_stale); /* make the subdisks invalid */ - vol->plex[vol->plexes] = plexno; /* this one */ - vol->plexes++; /* add another plex */ - PLEX[plexno].volno = volno; /* note the number of our volume */ - - return vol->plexes - 1; /* and return its index */ -} - -/* Add subdisk to a plex if possible */ -int -give_sd_to_plex(int plexno, int sdno) -{ - int i; - struct plex *plex; - struct sd *sd; - - /* XXX It's not an error for the sd to already - * belong to the plex, but we need to check a - * number of things to make sure it's done right. - * Some day. */ - i = my_sd(plexno, sdno); - if (i >= 0) /* does it already belong to us? */ - return i; /* that's it */ - - plex = &PLEX[plexno]; /* point to the plex */ - sd = &SD[sdno]; /* and the subdisk */ - - /* Do we have an offset? Otherwise put it after the last one */ - if (sd->plexoffset < 0) { /* no offset specified */ - if (plex->subdisks > 0) { - struct sd *lastsd = &SD[plex->sdnos[plex->subdisks - 1]]; /* last subdisk */ - - if (plex->organization == plex_concat) /* concat, */ - sd->plexoffset = lastsd->sectors + lastsd->plexoffset; /* starts here */ - else /* striped or RAID-5, */ - sd->plexoffset = plex->stripesize * plex->subdisks; /* starts here */ - } else /* first subdisk */ - sd->plexoffset = 0; /* start at the beginning */ - } - if (plex->subdisks == MAXSD) /* we already have our maximum */ - throw_rude_remark(ENOSPC, /* crap out */ - "Can't add %s to %s: plex full\n", - sd->name, - plex->name); - - plex->subdisks++; /* another entry */ - if (plex->subdisks >= plex->subdisks_allocated) /* need more space */ - EXPAND(plex->sdnos, int, plex->subdisks_allocated, INITIAL_SUBDISKS_IN_PLEX); - - /* Adjust size of plex and volume. */ - plex->length += sd->sectors; /* plex gets this much bigger */ - if (plex->volno >= 0) /* we have a volume */ - VOL[plex->volno].size = max(VOL[plex->volno].size, plex->length); /* adjust its size */ - - /* We need to check that the subdisks don't overlap, - * but we can't do that until a point where we *must* - * know the size of all the subdisks. That's not - * here. But we need to sort them by offset */ - for (i = 0; i < plex->subdisks - 1; i++) { - if (sd->plexoffset < SD[plex->sdnos[i]].plexoffset) { /* it fits before this one */ - /* First move any remaining subdisks by one */ - int j; - - for (j = plex->subdisks - 1; j > i; j--) /* move up one at a time */ - plex->sdnos[j] = plex->sdnos[j - 1]; - plex->sdnos[i] = sdno; - sd->plexsdno = i; /* note where we are in the subdisk */ - return i; - } - } - - /* The plex doesn't have any subdisk with a larger - * offset. Insert it */ - plex->sdnos[i] = sdno; - sd->plexsdno = i; /* note where we are in the subdisk */ - return i; -} - -/* Add a subdisk to drive if possible. The pointer to the drive - * must already be stored in the sd structure, but the drive - * doesn't know about the subdisk yet. */ -static void -give_sd_to_drive(int sdno) -{ - struct sd *sd; /* pointer to subdisk */ - struct drive *drive; /* and drive */ - int fe; /* index in free list */ - - sd = &SD[sdno]; /* point to sd */ - drive = &DRIVE[sd->driveno]; /* and drive */ - - if (drive->state != drive_up) - update_sd_state(sdno); /* that crashes the subdisk */ - if (sd->sectors > drive->sectors_available) { /* too big, */ - sd->driveoffset = -1; /* don't be confusing */ - throw_rude_remark(ENOSPC, "No space for %s on %s", sd->name, drive->label.name); - } - drive->subdisks_used++; /* one more subdisk */ - - /* no offset specified, find one */ - if (sd->driveoffset < 0) { - for (fe = 0; fe < drive->freelist_entries; fe++) { - if (drive->freelist[fe].sectors >= sd->sectors) { /* it'll fit here */ - sd->driveoffset = drive->freelist[fe].offset; - if (sd->sectors == drive->freelist[fe].sectors) { /* used up the entire entry */ - if (fe < (drive->freelist_entries - 1)) /* not the last one, */ - bcopy(&drive->freelist[fe + 1], - &drive->freelist[fe], - (drive->freelist_entries - fe) * sizeof(struct drive_freelist)); - drive->freelist_entries--; /* one less entry */ - } else { - drive->freelist[fe].sectors -= sd->sectors; /* this much less space */ - drive->freelist[fe].offset += sd->sectors; /* this much further on */ - } - drive->sectors_available -= sd->sectors; /* and note how much less space we have */ - break; - } - } - if (fe == drive->freelist_entries) - /* Didn't find anything. Although the drive has - * enough space, it's too fragmented */ - { - sd->driveoffset = -1; /* don't be confusing */ - throw_rude_remark(ENOSPC, "No space for %s on %s", sd->name, drive->label.name); - } - } else { /* specific offset */ - /* For a specific offset to work, the space must be - * entirely in a single freelist entry. Look for it. */ - u_int64_t sdend = sd->driveoffset + sd->sectors; /* end of our subdisk */ - for (fe = 0; fe < drive->freelist_entries; fe++) { - u_int64_t dend = drive->freelist[fe].offset + drive->freelist[fe].sectors; /* end of entry */ - if (dend >= sdend) { /* fits before here */ - if (drive->freelist[fe].offset > sd->driveoffset) /* starts after the beginning of sd area */ - throw_rude_remark(ENOSPC, - "No space for subdisk %s on drive %s at offset %qd\n", - sd->name, - drive->label.name); - - /* We've found the space, and we can allocate it. - * We don't need to say that to the subdisk, which - * already knows about it. We need to tell it to - * the free list, though. We have four possibilities: - * - * 1. The subdisk exactly eats up the entry. That's the - * same as above. - * 2. The subdisk starts at the beginning and leaves space - * at the end. - * 3. The subdisk starts after the beginning and leaves - * space at the end as well: we end up with another - * fragment. - * 4. The subdisk leaves space at the beginning and finishes - * at the end. - */ - drive->sectors_available -= sd->sectors; /* note how much less space we have */ - if (sd->driveoffset == drive->freelist[fe].offset) { /* 1 or 2 */ - if (sd->sectors == drive->freelist[fe].sectors) { /* 1: used up the entire entry */ - if (fe < (drive->freelist_entries - 1)) /* not the last one, */ - bcopy(&drive->freelist[fe + 1], - &drive->freelist[fe], - (drive->freelist_entries - fe) * sizeof(struct drive_freelist)); - drive->freelist_entries--; /* one less entry */ - } else { /* 2: space at the end */ - drive->freelist[fe].sectors -= sd->sectors; /* this much less space */ - drive->freelist[fe].offset += sd->sectors; /* this much further on */ - } - } else { /* 3 or 4 */ - drive->freelist[fe].sectors = sd->driveoffset - drive->freelist[fe].offset; - if (dend > sdend) { /* 3: space at the end as well */ - if (fe < (drive->freelist_entries - 1)) /* not the last one */ - bcopy(&drive->freelist[fe], /* move the rest down */ - &drive->freelist[fe + 1], - (drive->freelist_entries - fe) * sizeof(struct drive_freelist)); - drive->freelist_entries++; /* one less entry */ - drive->freelist[fe + 1].offset = sdend; /* second entry starts after sd */ - drive->freelist[fe + 1].sectors = dend - sdend; /* and is this long */ - } - } - break; - } - } - } - drive->opencount++; /* one more subdisk attached */ -} - -/* Get an empty drive entry from the drive table */ -int -get_empty_drive(void) -{ - int driveno; - struct drive *drive; - - /* first see if we have one which has been deallocated */ - for (driveno = 0; driveno < vinum_conf.drives_used; driveno++) { - if (DRIVE[driveno].state == drive_unallocated) /* bingo */ - break; - } - - if (driveno >= vinum_conf.drives_used) - /* Couldn't find a deallocated drive. Allocate a new one */ - { - vinum_conf.drives_used++; - if (vinum_conf.drives_used > vinum_conf.drives_allocated) /* we've used all our allocation */ - EXPAND(DRIVE, struct drive, vinum_conf.drives_allocated, INITIAL_DRIVES); - } - /* got a drive entry. Make it pretty */ - drive = &DRIVE[driveno]; - bzero(drive, sizeof(struct drive)); - drive->driveno = driveno; /* put number in structure */ - return driveno; /* return the index */ -} - -/* Find the named drive in vinum_conf.drive, return a pointer - * return the index in vinum_conf.drive. - * Don't mark the drive as allocated (XXX SMP) - * If create != 0, create an entry if it doesn't exist - */ -/* XXX check if we have it open from attach */ -int -find_drive(const char *name, int create) -{ - int driveno; - struct drive *drive; - - if (name != NULL) { - for (driveno = 0; driveno < vinum_conf.drives_used; driveno++) { - drive = &DRIVE[driveno]; /* point to drive */ - if ((drive->label.name[0] != '\0') /* it has a name */ - &&(strcmp(drive->label.name, name) == 0)) /* and it's this one: found */ - return driveno; - } - } - /* the drive isn't in the list. Add it if he wants */ - if (create == 0) /* don't want to create */ - return -1; /* give up */ - - driveno = get_empty_drive(); - drive = &DRIVE[driveno]; - if (name != NULL) - bcopy(name, /* put in its name */ - drive->label.name, - min(sizeof(drive->label.name), - strlen(name))); - drive->state = drive_uninit; /* in use, nothing worthwhile there */ - drive->flags |= VF_NEWBORN; /* newly born drive */ - return driveno; /* return the index */ -} - -/* Find a drive given its device name. - * devname must be valid. - * Otherwise the same as find_drive above */ -int -find_drive_by_dev(const char *devname, int create) -{ - int driveno; - struct drive *drive; - - for (driveno = 0; driveno < vinum_conf.drives_used; driveno++) { - drive = &DRIVE[driveno]; /* point to drive */ - if ((drive->label.name[0] != '\0') /* it has a name */ - &&(strcmp(drive->devicename, devname) == 0)) /* and it's this one: found */ - return driveno; - } - - /* the drive isn't in the list. Add it if he wants */ - if (create == 0) /* don't want to create */ - return -1; /* give up */ - - driveno = get_empty_drive(); - drive = &DRIVE[driveno]; - bcopy(devname, /* put in its name */ - drive->devicename, - min(sizeof(drive->devicename), - strlen(devname))); - drive->state = drive_uninit; /* in use, nothing worthwhile there */ - drive->flags |= VF_NEWBORN; /* newly born drive */ - return driveno; /* return the index */ -} - -/* Find an empty subdisk in the subdisk table */ -int -get_empty_sd(void) -{ - int sdno; - struct sd *sd; - - /* first see if we have one which has been deallocated */ - for (sdno = 0; sdno < vinum_conf.subdisks_used; sdno++) { - if (SD[sdno].state == sd_unallocated) /* bingo */ - break; - } - - if (sdno >= vinum_conf.subdisks_used) { /* No unused sd found. Allocate a new one */ - vinum_conf.subdisks_used++; - if (vinum_conf.subdisks_used > vinum_conf.subdisks_allocated) - EXPAND(SD, struct sd, vinum_conf.subdisks_allocated, INITIAL_SUBDISKS); - } - /* initialize some things */ - sd = &SD[sdno]; /* point to it */ - bzero(sd, sizeof(struct sd)); /* initialize */ - sd->plexno = -1; /* no plex */ - sd->driveno = -1; /* and no drive */ - sd->plexoffset = -1; /* and no offsets */ - sd->driveoffset = -1; - return sdno; /* return the index */ -} - -/* return a drive to the free pool */ -void -free_drive(struct drive *drive) -{ - lockdrive(drive); - if (drive->vp != NULL) /* device open */ - vn_close(drive->vp, FREAD | FWRITE, FSCRED, drive->p); - bzero(drive, sizeof(struct drive)); /* this also sets drive_unallocated */ - vinum_conf.drives_used--; /* one less drive */ - unlockdrive(drive); -} - -/* Find the named subdisk in vinum_conf.sd. - - * If create != 0, create an entry if it doesn't exist - * - * Return index in vinum_conf.sd - */ -int -find_subdisk(const char *name, int create) -{ - int sdno; - struct sd *sd; - - for (sdno = 0; sdno < vinum_conf.subdisks_allocated; sdno++) { - if (strcmp(SD[sdno].name, name) == 0) /* found it */ - return sdno; - } - - /* the subdisk isn't in the list. Add it if he wants */ - if (create == 0) /* don't want to create */ - return -1; /* give up */ - - /* Allocate one and insert the name */ - sdno = get_empty_sd(); - sd = &SD[sdno]; - bcopy(name, sd->name, min(sizeof(sd->name), strlen(name))); /* put in its name */ - sd->flags |= VF_NEWBORN; /* newly born subdisk */ - return sdno; /* return the pointer */ -} - -/* Free an allocated sd entry - * This performs memory management only. remove() - * is responsible for checking relationships. - */ -void -free_sd(int sdno) -{ - struct sd *sd; - struct drive *drive; - int fe; /* free list entry */ - u_int64_t sdend; /* end of our subdisk */ - u_int64_t dend; /* end of our freelist entry */ - - sd = &SD[sdno]; - if ((sd->driveno >= 0) /* we have a drive, */ - &&(sd->sectors > 0)) { /* and some space on it */ - drive = &DRIVE[sd->driveno]; - sdend = sd->driveoffset + sd->sectors; /* end of our subdisk */ - - /* Look for where to return the sd address space */ - for (fe = 0; - (fe < drive->freelist_entries) && (drive->freelist[fe].offset < sd->driveoffset); - fe++); - /* Now we are pointing to the last entry, the first - * with a higher offset than the subdisk, or both. */ - if ((fe > 1) /* not the first entry */ - &&((fe == drive->freelist_entries) /* gone past the end */ - ||(drive->freelist[fe].offset > sd->driveoffset))) /* or past the block were looking for */ - fe--; /* point to the block before */ - dend = drive->freelist[fe].offset + drive->freelist[fe].sectors; /* end of the entry */ - - /* At this point, we are pointing to the correct - * place in the free list. A number of possibilities - * exist: - * - * 1. The block to be freed immediately follows - * the block to which we are pointing. Just - * enlarge it. - * 2. The block to be freed starts at the end of - * the current block and ends at the beginning - * of the following block. Merge the three - * areas into a single block. - * 3. The block to be freed starts after the end - * of the block and ends before the start of - * the following block. Create a new free block. - * 4. The block to be freed starts after the end - * of the block, but ends at the start of the - * following block. Enlarge the following block - * downwards. - * - */ - if (sd->driveoffset == dend) { /* it starts after the end of this block */ - if ((fe < drive->freelist_entries - 1) /* we're not the last block in the free list */ - &&(sdend == drive->freelist[fe + 1].offset)) { /* and the subdisk ends at the start of the - * next block */ - drive->freelist[fe].sectors = drive->freelist[fe + 1].sectors; /* 2: merge all three blocks */ - if (fe < drive->freelist_entries - 2) /* still more blocks after next */ - bcopy(&drive->freelist[fe + 2], /* move down one */ - &drive->freelist[fe + 1], - (drive->freelist_entries - 2 - fe) * sizeof(struct drive_freelist)); - drive->freelist_entries--; /* one less entry in the free list */ - } else /* 1: just enlarge this block */ - drive->freelist[fe].sectors += sd->sectors; - } else { - if (sd->driveoffset > dend) /* it starts after this block */ - fe++; /* so look at the next block */ - if ((fe < drive->freelist_entries) /* we're not the last block in the free list */ - &&(sdend == drive->freelist[fe].offset)) { /* and the subdisk ends at the start of - * this block: case 4 */ - drive->freelist[fe].offset = sd->driveoffset; /* it starts where the sd was */ - drive->freelist[fe].sectors += sd->sectors; /* and it's this much bigger */ - } else { /* case 3: non-contiguous */ - if (fe < drive->freelist_entries) /* not after the last block, */ - bcopy(&drive->freelist[fe], /* move the rest up one entry */ - &drive->freelist[fe + 1], - (drive->freelist_entries - fe) * sizeof(struct drive_freelist)); - drive->freelist_entries++; /* one less entry */ - drive->freelist[fe].offset = sd->driveoffset; /* this entry represents the sd */ - drive->freelist[fe].sectors = sd->sectors; - } - } - drive->opencount--; /* one less subdisk attached */ - } - bzero(sd, sizeof(struct sd)); /* and clear it out */ - sd->state = sd_unallocated; - vinum_conf.subdisks_used--; /* one less sd */ -} - -/* Find an empty plex in the plex table */ -int -get_empty_plex(void) -{ - int plexno; - struct plex *plex; /* if we allocate one */ - - /* first see if we have one which has been deallocated */ - for (plexno = 0; plexno < vinum_conf.plexes_used; plexno++) { - if (PLEX[plexno].state == plex_unallocated) /* bingo */ - break; /* and get out of here */ - } - - if (plexno >= vinum_conf.plexes_used) { - /* Couldn't find a deallocated plex. Allocate a new one */ - vinum_conf.plexes_used++; - if (vinum_conf.plexes_used > vinum_conf.plexes_allocated) - EXPAND(PLEX, struct plex, vinum_conf.plexes_allocated, INITIAL_PLEXES); - } - /* Found a plex. Give it an sd structure */ - plex = &PLEX[plexno]; /* this one is ours */ - bzero(plex, sizeof(struct plex)); /* polish it up */ - plex->sdnos = (int *) Malloc(sizeof(int) * INITIAL_SUBDISKS_IN_PLEX); /* allocate sd table */ - CHECKALLOC(plex->sdnos, "vinum: Can't allocate plex subdisk table"); - bzero(plex->sdnos, (sizeof(int) * INITIAL_SUBDISKS_IN_PLEX)); /* do we need this? */ - plex->subdisks = 0; /* no subdisks in use */ - plex->subdisks_allocated = INITIAL_SUBDISKS_IN_PLEX; /* and we have space for this many */ - plex->organization = plex_disorg; /* and it's not organized */ - plex->volno = -1; /* no volume yet */ - return plexno; /* return the index */ -} - -/* Find the named plex in vinum_conf.plex - - * If create != 0, create an entry if it doesn't exist - * return index in vinum_conf.plex - */ -int -find_plex(const char *name, int create) -{ - int plexno; - struct plex *plex; - - for (plexno = 0; plexno < vinum_conf.plexes_allocated; plexno++) { - if (strcmp(PLEX[plexno].name, name) == 0) /* found it */ - return plexno; - } - - /* the plex isn't in the list. Add it if he wants */ - if (create == 0) /* don't want to create */ - return -1; /* give up */ - - /* Allocate one and insert the name */ - plexno = get_empty_plex(); - plex = &PLEX[plexno]; /* point to it */ - bcopy(name, plex->name, min(sizeof(plex->name), strlen(name))); /* put in its name */ - plex->flags |= VF_NEWBORN; /* newly born plex */ - return plexno; /* return the pointer */ -} - -/* Free an allocated plex entry - * and its associated memory areas */ -void -free_plex(int plexno) -{ - struct plex *plex; - - plex = &PLEX[plexno]; - if (plex->sdnos) - Free(plex->sdnos); - if (plex->lock) - Free(plex->lock); - bzero(plex, sizeof(struct plex)); /* and clear it out */ - plex->state = plex_unallocated; - vinum_conf.plexes_used--; /* one less plex */ -} - -/* Find an empty volume in the volume table */ -int -get_empty_volume(void) -{ - int volno; - struct volume *vol; - - /* first see if we have one which has been deallocated */ - for (volno = 0; volno < vinum_conf.volumes_used; volno++) { - if (VOL[volno].state == volume_unallocated) /* bingo */ - break; - } - - if (volno >= vinum_conf.volumes_used) - /* Couldn't find a deallocated volume. Allocate a new one */ - { - vinum_conf.volumes_used++; - if (vinum_conf.volumes_used > vinum_conf.volumes_allocated) - EXPAND(VOL, struct volume, vinum_conf.volumes_allocated, INITIAL_VOLUMES); - } - /* Now initialize fields */ - vol = &VOL[volno]; - bzero(vol, sizeof(struct volume)); - vol->preferred_plex = -1; /* default to round robin */ - vol->preferred_plex = ROUND_ROBIN_READPOL; /* round robin */ - - return volno; /* return the index */ -} - -/* Find the named volume in vinum_conf.volume. - - * If create != 0, create an entry if it doesn't exist - * return the index in vinum_conf - */ -int -find_volume(const char *name, int create) -{ - int volno; - struct volume *vol; - - for (volno = 0; volno < vinum_conf.volumes_used; volno++) { - if (strcmp(VOL[volno].name, name) == 0) /* found it */ - return volno; - } - - /* the volume isn't in the list. Add it if he wants */ - if (create == 0) /* don't want to create */ - return -1; /* give up */ - - /* Allocate one and insert the name */ - volno = get_empty_volume(); - vol = &VOL[volno]; - bcopy(name, vol->name, min(sizeof(vol->name), strlen(name))); /* put in its name */ - vol->blocksize = DEV_BSIZE; /* block size of this volume */ - vol->flags |= VF_NEWBORN; /* newly born volume */ - return volno; /* return the pointer */ -} - -/* Free an allocated volume entry - * and its associated memory areas */ -void -free_volume(int volno) -{ - struct volume *vol; - - vol = &VOL[volno]; - bzero(vol, sizeof(struct volume)); /* and clear it out */ - vol->state = volume_unallocated; - vinum_conf.volumes_used--; /* one less volume */ -} - -/* Handle a drive definition. We store the information in the global variable - * drive, so we don't need to allocate. - * - * If we find an error, print a message and return - */ -void -config_drive(int update) -{ - enum drive_label_info partition_status; /* info about the partition */ - int parameter; - int driveno; /* index of drive in vinum_conf */ - struct drive *drive; /* and pointer to it */ - - if (tokens < 2) /* not enough tokens */ - throw_rude_remark(EINVAL, "Drive has no name"); - driveno = find_drive(token[1], 1); /* allocate a drive to initialize */ - drive = &DRIVE[driveno]; /* and get a pointer */ - if (update && ((drive->flags & VF_NEWBORN) == 0)) /* this drive exists already */ - return; /* don't do anything */ - drive->flags &= ~VF_NEWBORN; /* no longer newly born */ - - if (drive->state != drive_uninit) { /* we already know this drive */ - /* XXX Check which definition is more up-to-date. Give - * preference for the definition on its own drive */ - return; /* XXX */ - } - for (parameter = 2; parameter < tokens; parameter++) { /* look at the other tokens */ - switch (get_keyword(token[parameter], &keyword_set)) { - case kw_device: - parameter++; - if (drive->devicename[0] != '\0') { /* we know this drive... */ - if (strcmp(drive->devicename, token[parameter])) /* different name */ - close_drive(drive); /* close it if it's open */ - else /* no change */ - break; - } - /* open the device and get the configuration */ - bcopy(token[parameter], /* insert device information */ - drive->devicename, - min(sizeof(drive->devicename), - strlen(token[parameter]))); - partition_status = read_drive_label(drive, 1); - switch (partition_status) { - case DL_CANT_OPEN: /* not our kind */ - close_drive(drive); - if (drive->lasterror == EFTYPE) /* wrong kind of partition */ - throw_rude_remark(drive->lasterror, - "Drive %s has invalid partition type", - drive->label.name); - else /* I/O error of some kind */ - throw_rude_remark(drive->lasterror, - "Can't initialize drive %s", - drive->label.name); - break; - - case DL_WRONG_DRIVE: /* valid drive, not the name we expected */ - close_drive(drive); - throw_rude_remark(drive->lasterror, - "Incorrect drive name %s specified for drive %s", - token[1], - drive->label.name); - break; - - case DL_DELETED_LABEL: /* it was a drive, but we deleted it */ - break; - - case DL_NOT_OURS: /* nothing to do with the rest */ - case DL_OURS: - break; - } - /* read_drive_label overwrites the device name. - * If we get here, we can have the drive, - * so put it back again */ - bcopy(token[parameter], - drive->devicename, - min(sizeof(drive->devicename), - strlen(token[parameter]))); - break; - - case kw_state: - checkkernel(token[++parameter]); /* must be a kernel user */ - drive->state = DriveState(token[parameter]); /* set the state */ - break; - - default: - close_drive(drive); - throw_rude_remark(EINVAL, - "Drive %s, invalid keyword: %s", - token[1], - token[parameter]); - } - } - - if (drive->devicename[0] == '\0') { - drive->state = drive_unallocated; /* deallocate the drive */ - throw_rude_remark(EINVAL, "No device name for %s", drive->label.name); - } -} - -/* Handle a subdisk definition. We store the information in the global variable - * sd, so we don't need to allocate. - * - * If we find an error, print a message and return - */ -void -config_subdisk(int update) -{ - int parameter; - int sdno; /* index of sd in vinum_conf */ - struct sd *sd; /* and pointer to it */ - u_int64_t size; - int detached = 0; /* set to 1 if this is a detached subdisk */ - int sdindex = -1; /* index in plexes subdisk table */ - int namedsdno; - enum sdstate state = sd_unallocated; /* state to set, if specified */ - - sdno = get_empty_sd(); /* allocate an SD to initialize */ - sd = &SD[sdno]; /* and get a pointer */ - - for (parameter = 1; parameter < tokens; parameter++) { /* look at the other tokens */ - switch (get_keyword(token[parameter], &keyword_set)) { - case kw_detached: - detached = 1; - break; - - case kw_plexoffset: - size = sizespec(token[++parameter]); - if ((size % DEV_BSIZE) != 0) - throw_rude_remark(EINVAL, "sd %s, bad plex offset alignment: %qd", sd->name, size); - else - sd->plexoffset = size / DEV_BSIZE; - break; - - case kw_driveoffset: - size = sizespec(token[++parameter]); - if ((size % DEV_BSIZE) != 0) - throw_rude_remark(EINVAL, "sd %s, bad drive offset alignment: %qd", sd->name, size); - else - sd->driveoffset = size / DEV_BSIZE; - break; - - case kw_name: - namedsdno = find_subdisk(token[++parameter], 0); /* find an existing sd with this name */ - if (namedsdno >= 0) { /* got one */ - if (update) /* are we updating? */ - return; /* that's OK, nothing more to do */ - else - throw_rude_remark(EINVAL, "Duplicate subdisk %s", token[parameter]); - } - bcopy(token[parameter], - sd->name, - min(sizeof(sd->name), strlen(token[parameter]))); - break; - - case kw_len: - size = sizespec(token[++parameter]); - if ((size % DEV_BSIZE) != 0) - throw_rude_remark(EINVAL, "sd %s, length %d not multiple of sector size", sd->name, size); - else - sd->sectors = size / DEV_BSIZE; - break; - - case kw_drive: - sd->driveno = find_drive(token[++parameter], 1); /* insert drive information */ - break; - - case kw_plex: - sd->plexno = find_plex(token[++parameter], 1); /* insert plex information */ - break; - - /* Set the state. We can't do this directly, - * because give_sd_to_plex may change it */ - case kw_state: - checkkernel(token[++parameter]); /* must be a kernel user */ - state = SdState(token[parameter]); /* set the state */ - break; - - default: - throw_rude_remark(EINVAL, "sd %s, invalid keyword: %s", sd->name, token[parameter]); - } - } - - /* Check we have a drive name */ - if (sd->driveno < 0) { /* didn't specify a drive */ - sd->driveno = current_drive; /* set to the current drive */ - if (sd->driveno < 0) /* no current drive? */ - throw_rude_remark(EINVAL, "Subdisk %s is not associated with a drive", sd->name); - } - /* Check for a plex name */ - if ((sd->plexno < 0) /* didn't specify a plex */ - &&(!detached)) /* and didn't say not to, */ - sd->plexno = current_plex; /* set to the current plex */ - - if (sd->plexno >= 0) - sdindex = give_sd_to_plex(sd->plexno, sdno); /* now tell the plex that it has this sd */ - - sd->sdno = sdno; /* point to our entry in the table */ - - /* Does the subdisk have a name? If not, give it one */ - if (sd->name[0] == '\0') { /* no name */ - char sdsuffix[8]; /* form sd name suffix here */ - - /* Do we have a plex name? */ - if (sdindex >= 0) /* we have a plex */ - strcpy(sd->name, PLEX[sd->plexno].name); /* take it from there */ - else /* no way */ - throw_rude_remark(EINVAL, "Unnamed sd is not associated with a plex"); - sprintf(sdsuffix, ".s%d", sdindex); /* form the suffix */ - strcat(sd->name, sdsuffix); /* and add it to the name */ - } - /* do we have complete info for this subdisk? */ - if (sd->sectors == 0) - throw_rude_remark(EINVAL, "sd %s has no length spec", sd->name); - - if (state != sd_unallocated) /* we had a specific state to set */ - sd->state = state; /* do it now */ - else if (sd->state == sd_unallocated) /* no, nothing set yet, */ - sd->state = sd_up; /* must be up */ - - /* register the subdisk with the drive. This action - * will have the side effect of setting the offset if - * we haven't specified one, and causing an error - * message if it overlaps with another subdisk. */ - give_sd_to_drive(sdno); -} - -/* Handle a plex definition. - */ -void -config_plex(int update) -{ - int parameter; - int plexno; /* index of plex in vinum_conf */ - struct plex *plex; /* and pointer to it */ - int pindex = MAXPLEX; /* index in volume's plex list */ - int detached = 0; /* don't give it to a volume */ - int namedplexno; - - current_plex = -1; /* forget the previous plex */ - plexno = get_empty_plex(); /* allocate a plex */ - plex = &PLEX[plexno]; /* and point to it */ - plex->plexno = plexno; /* and back to the config */ - - for (parameter = 1; parameter < tokens; parameter++) { /* look at the other tokens */ - switch (get_keyword(token[parameter], &keyword_set)) { - case kw_detached: - detached = 1; - break; - - case kw_name: - namedplexno = find_plex(token[++parameter], 0); /* find an existing plex with this name */ - if (namedplexno >= 0) { /* plex exists already, */ - if (update) /* are we updating? */ - return; /* yes: that's OK, just return */ - else - throw_rude_remark(EINVAL, "Duplicate plex %s", token[parameter]); - } - bcopy(token[parameter], /* put in the name */ - plex->name, - min(MAXPLEXNAME, strlen(token[parameter]))); - break; - - case kw_org: /* plex organization */ - switch (get_keyword(token[++parameter], &keyword_set)) { - case kw_concat: - plex->organization = plex_concat; - break; - - case kw_striped: - { - int stripesize = sizespec(token[++parameter]); - - plex->organization = plex_striped; - if (stripesize % DEV_BSIZE != 0) /* not a multiple of block size, */ - throw_rude_remark(EINVAL, "plex %s: stripe size %d not a multiple of sector size", - plex->name, - stripesize); - else - plex->stripesize = stripesize / DEV_BSIZE; - break; - } - - - default: - throw_rude_remark(EINVAL, "Invalid plex organization"); - } - if (((plex->organization == plex_striped) - ) - && (plex->stripesize == 0)) /* didn't specify a valid stripe size */ - throw_rude_remark(EINVAL, "Need a stripe size parameter"); - break; - - case kw_volume: - plex->volno = find_volume(token[++parameter], 1); /* insert a pointer to the volume */ - break; - - case kw_sd: /* add a subdisk */ - { - int sdno; - - sdno = find_subdisk(token[++parameter], 1); /* find a subdisk */ - SD[sdno].plexoffset = sizespec(token[++parameter]); /* get the offset */ - give_sd_to_plex(plexno, sdno); /* and insert it there */ - break; - } - - case kw_state: - checkkernel(token[++parameter]); /* only for kernel use */ - plex->state = PlexState(token[parameter]); /* set the state */ - break; - - default: - throw_rude_remark(EINVAL, "plex %s, invalid keyword: %s", - plex->name, - token[parameter]); - } - } - - if ((plex->volno < 0) /* we don't have a volume */ - &&(!detached)) /* and we wouldn't object */ - plex->volno = current_volume; - - if (plex->volno >= 0) - pindex = give_plex_to_volume(plex->volno, plexno); /* Now tell the volume that it has this plex */ - - /* Does the plex have a name? If not, give it one */ - if (plex->name[0] == '\0') { /* no name */ - char plexsuffix[8]; /* form plex name suffix here */ - /* Do we have a volume name? */ - if (plex->volno >= 0) /* we have a volume */ - strcpy(plex->name, /* take it from there */ - VOL[plex->volno].name); - else /* no way */ - throw_rude_remark(EINVAL, "Unnamed plex is not associated with a volume"); - sprintf(plexsuffix, ".p%d", pindex); /* form the suffix */ - strcat(plex->name, plexsuffix); /* and add it to the name */ - } - /* Note the last plex we configured */ - current_plex = plexno; - if (plex->state == plex_unallocated) /* we haven't changed the state, */ - plex->state = plex_init; /* we're initialized now */ -} - -/* Handle a volume definition. - * If we find an error, print a message, deallocate the nascent volume, and return - */ -void -config_volume(int update) -{ - int parameter; - int volno; - struct volume *vol; /* collect volume info here */ - int i; - - if (tokens < 2) /* not enough tokens */ - throw_rude_remark(EINVAL, "Volume has no name"); - current_volume = -1; /* forget the previous volume */ - volno = find_volume(token[1], 1); /* allocate a volume to initialize */ - vol = &VOL[volno]; /* and get a pointer */ - if (update && ((vol->flags & VF_NEWBORN) == 0)) /* this volume exists already */ - return; /* don't do anything */ - vol->flags &= ~VF_NEWBORN; /* no longer newly born */ - - for (parameter = 2; parameter < tokens; parameter++) { /* look at all tokens */ - switch (get_keyword(token[parameter], &keyword_set)) { - case kw_plex: - { - int plexno; /* index of this plex */ - - plexno = find_plex(token[++parameter], 1); /* find a plex */ - if (plexno < 0) /* couldn't */ - break; /* we've already had an error message */ - plexno = my_plex(volno, plexno); /* does it already belong to us? */ - if (plexno > 0) /* yes, shouldn't get it again */ - throw_rude_remark(EINVAL, - "Plex %s already belongs to volume %s", - token[parameter], - vol->name); - else if (++vol->plexes > 8) /* another entry */ - throw_rude_remark(EINVAL, - "Too many plexes for volume %s", - vol->name); - vol->plex[vol->plexes - 1] = plexno; - } - break; - - case kw_readpol: - switch (get_keyword(token[++parameter], &keyword_set)) { /* decide what to do */ - case kw_round: - vol->preferred_plex = ROUND_ROBIN_READPOL; /* default */ - break; - - case kw_prefer: - { - int myplexno; /* index of this plex */ - - myplexno = find_plex(token[++parameter], 1); /* find a plex */ - if (myplexno < 0) /* couldn't */ - break; /* we've already had an error message */ - myplexno = my_plex(volno, myplexno); /* does it already belong to us? */ - if (myplexno > 0) /* yes */ - vol->preferred_plex = myplexno; /* just note the index */ - else if (++vol->plexes > 8) /* another entry */ - throw_rude_remark(EINVAL, "Too many plexes"); - else { /* space for the new plex */ - vol->plex[vol->plexes - 1] = myplexno; /* add it to our list */ - vol->preferred_plex = vol->plexes - 1; /* and note the index */ - } - } - break; - - default: - throw_rude_remark(EINVAL, "Invalid read policy"); - } - - case kw_setupstate: - vol->flags |= VF_CONFIG_SETUPSTATE; /* set the volume up later on */ - break; - - case kw_state: - checkkernel(token[++parameter]); /* must be a kernel user */ - vol->state = VolState(token[parameter]); /* set the state */ - break; - - /* XXX experimental ideas. These are not - * documented, and will not be until I - * decide they're worth keeping */ - case kw_writethrough: /* set writethrough mode */ - vol->flags |= VF_WRITETHROUGH; - break; - - case kw_writeback: /* set writeback mode */ - vol->flags &= ~VF_WRITETHROUGH; - break; - - case kw_raw: - vol->flags |= VF_RAW; /* raw volume (no label) */ - break; - - default: - throw_rude_remark(EINVAL, "volume %s, invalid keyword: %s", - vol->name, - token[parameter]); - } - } - - current_volume = volno; /* note last referred volume */ - vol->devno = VINUMBDEV(volno, 0, 0, VINUM_VOLUME_TYPE); /* also note device number */ - - /* Before we can actually use the volume, we need - * a volume label. We could start to fake one here, - * but it will be a lot easier when we have some - * to copy from the drives, so defer it until we - * set up the configuration. XXX */ - if (vol->state == volume_unallocated) - vol->state = volume_down; /* now ready to bring up at the end */ - - /* Find out how big our volume is */ - for (i = 0; i < vol->plexes; i++) - vol->size = max(vol->size, PLEX[vol->plex[i]].length); -} - -/* Parse a config entry. CARE! This destroys the original contents of the - * config entry, which we don't really need after this. More specifically, it - * places \0 characters at the end of each token. - * - * Return 0 if all is well, otherwise EINVAL */ -int -parse_config(char *cptr, struct keywordset *keyset, int update) -{ - int status; - - status = 0; /* until proven otherwise */ - tokens = tokenize(cptr, token); /* chop up into tokens */ - - if (tokens <= 0) /* screwed up or empty line */ - return tokens; /* give up */ - - if (token[0][0] == '#') /* comment line */ - return 0; - - switch (get_keyword(token[0], keyset)) { /* decide what to do */ - case kw_read: /* read config from a specified drive */ - vinum_scandisk(&token[1], tokens - 1); /* read the config from disk */ - break; - - case kw_drive: - config_drive(update); - break; - - case kw_subdisk: - config_subdisk(update); - break; - - case kw_plex: - config_plex(update); - break; - - case kw_volume: - config_volume(update); - break; - - /* Anything else is invalid in this context */ - default: - throw_rude_remark(EINVAL, /* should we die? */ - "Invalid configuration information: %s", - token[0]); - } - return status; -} - -/* parse a line handed in from userland via ioctl. - * This differs only by the error reporting mechanism: - * we return the error indication in the reply to the - * ioctl, so we need to set a global static pointer in - * this file. This technique works because we have - * ensured that configuration is performed in a single- - * threaded manner */ -int -parse_user_config(char *cptr, struct keywordset *keyset) -{ - int status; - - ioctl_reply = (struct _ioctl_reply *) cptr; - status = parse_config(cptr, keyset, 0); - ioctl_reply = NULL; /* don't do this again */ - return status; -} - -/* Remove an object */ -void -remove(struct vinum_ioctl_msg *msg) -{ - struct vinum_ioctl_msg message = *msg; /* make a copy to hand on */ - - ioctl_reply = (struct _ioctl_reply *) msg; /* reinstate the address to reply to */ - ioctl_reply->error = 0; /* no error, */ - ioctl_reply->msg[0] = '\0'; /* no message */ - - switch (message.type) { - case drive_object: - remove_drive_entry(message.index, message.force, message.recurse); - updateconfig(0); - return; - - case sd_object: - remove_sd_entry(message.index, message.force, message.recurse); - updateconfig(0); - return; - - case plex_object: - remove_plex_entry(message.index, message.force, message.recurse); - updateconfig(0); - return; - - case volume_object: - remove_volume_entry(message.index, message.force, message.recurse); - updateconfig(0); - return; - - default: - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "Invalid object type"); - } -} - -/* Remove a drive. */ -void -remove_drive_entry(int driveno, int force, int recurse) -{ - struct drive *drive = &DRIVE[driveno]; - - if ((driveno > vinum_conf.drives_used) /* not a valid drive */ - ||(drive->state == drive_unallocated)) { /* or nothing there */ - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "No such drive"); - } else if (drive->opencount > 0) { /* we have subdisks */ - if (force) { /* do it at any cost */ - int sdno; - struct vinum_ioctl_msg sdmsg; - - for (sdno = 0; sdno < vinum_conf.subdisks_used; sdno++) { - if ((SD[sdno].state != sd_unallocated) /* subdisk is allocated */ - &&(SD[sdno].driveno == driveno)) { /* and it belongs to this drive */ - sdmsg.index = sdno; - sdmsg.type = sd_object; - sdmsg.recurse = 1; - sdmsg.force = force; - remove(&sdmsg); /* remove the subdisk by force */ - } - } - remove_drive(driveno); /* now remove it */ - } else - ioctl_reply->error = EBUSY; /* can't do that */ - } else - remove_drive(driveno); /* just remove it */ -} - -/* remove a subdisk */ -void -remove_sd_entry(int sdno, int force, int recurse) -{ - struct sd *sd = &SD[sdno]; - - if ((sdno > vinum_conf.subdisks_used) /* not a valid sd */ - ||(sd->state == sd_unallocated)) { /* or nothing there */ - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "No such subdisk"); - } else if (sd->plexno >= 0) { /* we have a plex */ - if (force) { /* do it at any cost */ - struct plex *plex = &PLEX[sd->plexno]; /* point to our plex */ - int mysdno; - - for (mysdno = 0; /* look for ourselves */ - mysdno < plex->subdisks && &SD[plex->sdnos[mysdno]] != sd; - mysdno++); - if (mysdno == plex->subdisks) /* didn't find it */ - throw_rude_remark(ENOENT, "plex %s does not contain subdisk %s", plex->name, sd->name); - if (mysdno < (plex->subdisks - 1)) /* not the last subdisk */ - bcopy(&plex->sdnos[mysdno + 1], - &plex->sdnos[mysdno], - (plex->subdisks - 1 - mysdno) * sizeof(int)); - plex->subdisks--; - /* removing a subdisk from a striped or - * RAID-5 plex really tears the hell out - * of the structure, and it needs to be - * reinitialized */ - /* XXX Think about this. Maybe we should just - * leave a hole */ - if (plex->organization != plex_concat) /* not concatenated, */ - set_plex_state(plex->plexno, plex_faulty, setstate_force); /* need to reinitialize */ - printf("vinum: removing %s\n", sd->name); - free_sd(sdno); - } else - ioctl_reply->error = EBUSY; /* can't do that */ - } else { - printf("vinum: removing %s\n", sd->name); - free_sd(sdno); - } -} - -/* remove a plex */ -void -remove_plex_entry(int plexno, int force, int recurse) -{ - struct plex *plex = &PLEX[plexno]; - int sdno; - - if ((plexno > vinum_conf.plexes_used) /* not a valid plex */ - ||(plex->state == plex_unallocated)) { /* or nothing there */ - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "No such plex"); - } else if (plex->pid) { /* we're open */ - ioctl_reply->error = EBUSY; /* no getting around that */ - return; - } - if (plex->subdisks) { - if (force) { /* do it anyway */ - if (recurse) { /* remove all below */ - for (sdno = 0; sdno < plex->subdisks; sdno++) - free_sd(plex->sdnos[sdno]); /* free all subdisks */ - } else { /* just tear them out */ - for (sdno = 0; sdno < plex->subdisks; sdno++) - SD[plex->sdnos[sdno]].plexno = -1; /* no plex any more */ - } - } else { /* can't do it without force */ - ioctl_reply->error = EBUSY; /* can't do that */ - return; - } - } - if (plex->volno >= 0) { /* we are part of a volume */ - /* XXX This should be more intelligent. We should - * be able to remove a plex as long as the volume - * does not lose any data, which is normally the - * case when it has more than one plex. To do it - * right we must compare the completeness of the - * mapping of all the plexes in the volume */ - if (force) { /* do it at any cost */ - struct volume *vol = &VOL[plex->volno]; - int myplexno; - - for (myplexno = 0; myplexno < vol->plexes; myplexno++) - if (vol->plex[myplexno] == plexno) /* found it */ - break; - if (myplexno == vol->plexes) /* didn't find it. Huh? */ - throw_rude_remark(ENOENT, "volume %s does not contain plex %s", vol->name, plex->name); - if (myplexno < (vol->plexes - 1)) /* not the last plex in the list */ - bcopy(&vol->plex[myplexno + 1], &vol->plex[myplexno], vol->plexes - 1 - myplexno); - vol->plexes--; - } else { - ioctl_reply->error = EBUSY; /* can't do that */ - return; - } - } - printf("vinum: removing %s\n", plex->name); - free_plex(plexno); -} - -/* remove a volume */ -void -remove_volume_entry(int volno, int force, int recurse) -{ - struct volume *vol = &VOL[volno]; - int plexno; - - if ((volno > vinum_conf.volumes_used) /* not a valid volume */ - ||(vol->state == volume_unallocated)) { /* or nothing there */ - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "No such volume"); - } else if (vol->opencount) /* we're open */ - ioctl_reply->error = EBUSY; /* no getting around that */ - else if (vol->plexes) { - if (recurse && force) { /* remove all below */ - struct vinum_ioctl_msg plexmsg; - - plexmsg.type = plex_object; - plexmsg.recurse = 1; - plexmsg.force = force; - for (plexno = 0; plexno < vol->plexes; plexno++) { - plexmsg.index = vol->plex[plexno]; /* plex number */ - remove(&plexmsg); - } - printf("vinum: removing %s\n", vol->name); - free_volume(volno); - } else - ioctl_reply->error = EBUSY; /* can't do that */ - } else { - printf("vinum: removing %s\n", vol->name); - free_volume(volno); - } -} - -void -update_sd_config(int sdno, int kernelstate) -{ - if (!kernelstate) - set_sd_state(sdno, sd_up, setstate_configuring); -} - -void -update_plex_config(int plexno, int kernelstate) -{ - int error = 0; - u_int64_t size; - int sdno; - struct plex *plex = &PLEX[plexno]; - enum plexstate state = plex_up; /* state we want the plex in */ - - /* XXX Insert checks here for sparse plexes and volumes */ - - /* Check that our subdisks make sense. For - * striped and RAID5 plexes, we need at least - * two subdisks, and they must all be the same - * size */ - if (((plex->organization == plex_striped) - ) - && (plex->subdisks < 2)) { - error = 1; - printf("vinum: plex %s does not have at least 2 subdisks\n", plex->name); - if (!kernelstate) - set_plex_state(plexno, plex_down, setstate_force | setstate_configuring); - } - size = 0; - for (sdno = 0; sdno < plex->subdisks; sdno++) { - if (((plex->organization == plex_striped) - ) - && (sdno > 0) - && (SD[plex->sdnos[sdno]].sectors != SD[plex->sdnos[sdno - 1]].sectors)) { - error = 1; - printf("vinum: %s must have equal sized subdisks\n", plex->name); - set_plex_state(plexno, plex_down, setstate_force | setstate_configuring); - } - size += SD[plex->sdnos[sdno]].sectors; - } - - if (plex->subdisks) { /* plex has subdisks, calculate size */ - /* XXX We shouldn't need to calculate the size any - * more. Check this some time */ - if (plex->length != size) - printf("Correcting length of %s: was %qd, is %qd\n", plex->name, plex->length, size); - plex->length = size; - } else { /* no subdisks, */ - plex->length = 0; /* no size */ - state = plex_down; /* take it down */ - } - if (!(kernelstate || error)) - set_plex_state(plexno, state, setstate_none | setstate_configuring); -} - -void -update_volume_config(int volno, int kernelstate) -{ - struct volume *vol = &VOL[volno]; - struct plex *plex; - int plexno; - - if (vol->state != volume_unallocated) - /* Recalculate the size of the volume */ - { - vol->size = 0; - for (plexno = 0; plexno < vol->plexes; plexno++) { - plex = &PLEX[vol->plex[plexno]]; - vol->size = max(plex->length, vol->size); /* maximum size */ - plex->volplexno = plexno; /* note it in the plex */ - } - } - if (!kernelstate) /* try to bring it up */ - set_volume_state(volno, volume_up, setstate_configuring); -} - -/* Update the global configuration. - * kernelstate is != 0 if we're reading in a config - * from disk. In this case, we don't try to - * bring the devices up, though we will bring - * them down if there's some error which got - * missed when writing to disk. - */ -void -updateconfig(int kernelstate) -{ - int plexno; - int volno; - - - for (plexno = 0; plexno < vinum_conf.plexes_used; plexno++) - update_plex_config(plexno, kernelstate); - - for (volno = 0; volno < vinum_conf.volumes_used; volno++) { - VOL[volno].flags &= ~VF_CONFIG_SETUPSTATE; /* no more setupstate */ - set_volume_state(volno, volume_up, setstate_configuring); - } - save_config(); -} - -/* Start manual changes to the configuration and lock out - * others who may wish to do so. - * XXX why do we need this and lock_config too? */ -int -start_config(void) -{ - int error; - - while ((vinum_conf.flags & VF_CONFIGURING) != 0) { - vinum_conf.flags |= VF_WILL_CONFIGURE; - if ((error = tsleep(&vinum_conf, PRIBIO | PCATCH, "vincfg", 0)) != 0) - return error; - } - /* We need two flags here: VF_CONFIGURING - * tells other processes to hold off (this - * function), and VF_CONFIG_INCOMPLETE - * tells the state change routines not to - * propagate incrememntal state changes */ - vinum_conf.flags |= VF_CONFIGURING | VF_CONFIG_INCOMPLETE; - current_drive = -1; /* reset the defaults */ - current_plex = -1; /* and the same for the last plex */ - current_volume = -1; /* and the last volme */ - return 0; -} - -/* Update the config if update is 1, and unlock - * it. We won't update the configuration if we - * are called in a recursive loop via throw_rude_remark. - */ -void -finish_config(int update) -{ - vinum_conf.flags &= ~VF_CONFIG_INCOMPLETE; /* we've finished our config */ - if (update) - updateconfig(0); /* so update things */ - else - updateconfig(1); /* do some updates only */ - vinum_conf.flags &= ~VF_CONFIGURING; /* and now other people can take a turn */ - if ((vinum_conf.flags & VF_WILL_CONFIGURE) != 0) { - vinum_conf.flags &= ~VF_WILL_CONFIGURE; - wakeup(&vinum_conf); - } -} diff --git a/sys/dev/vinum/vinumdaemon.c b/sys/dev/vinum/vinumdaemon.c deleted file mode 100644 index 23f3213f4cec7..0000000000000 --- a/sys/dev/vinum/vinumdaemon.c +++ /dev/null @@ -1,202 +0,0 @@ -/* daemon.c: kernel part of Vinum daemon */ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumdaemon.c,v 1.3 1999/01/18 04:32:50 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "vinumhdr.h" -#include "request.h" - -#ifdef VINUMDEBUG -#include <sys/reboot.h> -#endif - -/* declarations */ -void recover_io(struct request *rq); - -struct daemonq *daemonq; /* daemon's work queue */ -struct daemonq *dqend; /* and the end of the queue */ -int daemon_options = 0; /* options */ - -void -vinum_daemon(void) -{ - struct daemonq *request; - int s; - - daemon_save_config(); /* start by saving the configuration */ - while (1) { - tsleep(&vinum_daemon, PRIBIO, "vinum", 0); /* wait for something to happen */ - - while (daemonq != NULL) { /* we have work to do, */ - s = splhigh(); /* don't get interrupted here */ - request = daemonq; /* get the request */ - daemonq = daemonq->next; /* and detach it */ - if (daemonq == NULL) /* got to the end, */ - dqend = NULL; /* no end any more */ - splx(s); - - switch (request->type) { - /* We had an I/O error on a request. Go through the - * request and try to salvage it */ - case daemonrq_ioerror: - if (daemon_options & daemon_verbose) { - struct request *rq = request->info.rq; - - printf("vinumd: recovering I/O request: %x\n%s dev 0x%x, offset 0x%x, length %ld\n", - (u_int) rq, - rq->bp->b_flags & B_READ ? "Read" : "Write", - rq->bp->b_dev, - rq->bp->b_blkno, - rq->bp->b_bcount); - } - recover_io(request->info.rq); /* the failed request */ - break; - - /* Write the config to disk. We could end up with - * quite a few of these in a row. Only honour the - * last one */ - case daemonrq_saveconfig: - if ((daemonq == NULL) /* no more requests */ - ||(daemonq->type != daemonrq_saveconfig)) { /* or the next isn't the same */ - if ((daemon_options & daemon_noupdate) == 0) { /* we can do it */ - if (daemon_options & daemon_verbose) - printf("vinumd: saving config\n"); - daemon_save_config(); /* save it */ - } - } - break; - - case daemonrq_return: /* been told to stop */ - if (daemon_options & daemon_verbose) - printf("vinumd: stopping\n"); - daemon_options |= daemon_stopped; /* note that we've stopped */ - wakeup(vinum_daemon); /* in case somebody's waiting for us to stop */ - return; - break; - - case daemonrq_ping: /* tell the caller we're here */ - if (daemon_options & daemon_verbose) - printf("vinumd: ping reply\n"); - wakeup(&vinum_finddaemon); /* wake up the caller */ - break; - - case daemonrq_init: /* initialize a plex */ - /* XXX */ - case daemonrq_revive: /* revive a subdisk */ - /* XXX */ - default: - printf("Invalid request\n"); - break; - } - Free(request); - } - } -} - -/* Recover a failed I/O operation. - - * The correct way to do this is to examine the request and determine - * how to recover each individual failure. In the case of a write, - * this could be as simple as doing nothing: the defective drives may - * already be down, and there may be nothing else to do. In case of - * a read, it will be necessary to retry if there are alternative - * copies of the data. - * - * The easy way (here) is just to reissue the request. This will take - * a little longer, but nothing like as long as the failure will have - * taken. - * - */ -void -recover_io(struct request *rq) -{ - vinumstrategy(rq->bp); /* reissue the command */ -} - -/* Functions called to interface with the daemon */ - -/* queue a request for the daemon */ -void -queue_daemon_request(enum daemonrq type, union daemoninfo info) -{ - int s; - - struct daemonq *qelt = (struct daemonq *) Malloc(sizeof(struct daemonq)); - qelt->next = NULL; /* end of the chain */ - qelt->type = type; - qelt->info = info; - s = splhigh(); - if (daemonq) { /* something queued already */ - dqend->next = qelt; - dqend = qelt; - } else { /* queue is empty, */ - daemonq = qelt; /* this is the whole queue */ - dqend = qelt; - } - splx(s); - wakeup(&vinum_daemon); /* and give the dæmon a kick */ -} - -/* see if the daemon is running. Return 0 (no error) - * if it is, ESRCH otherwise */ - -int -vinum_finddaemon() -{ - int result; - - int i; - - for (i = 0; i < 2; i++) { /* try twice */ - queue_daemon_request(daemonrq_ping, NULL); /* queue a ping */ - do - result = tsleep(&vinum_finddaemon, PUSER, "recolte", 20 * hz); - while (result == ERESTART); /* let it finish */ - } - - if (result) /* will be EWOULDBLOCK or EINTR */ - return ESRCH; /* no process */ - return 0; -} - -int -vinum_setdaemonopts(int options) -{ - daemon_options = options; - return 0; -} diff --git a/sys/dev/vinum/vinumext.h b/sys/dev/vinum/vinumext.h deleted file mode 100644 index 40ffbbbd3eeb8..0000000000000 --- a/sys/dev/vinum/vinumext.h +++ /dev/null @@ -1,226 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumext.h,v 1.18 1999/01/15 02:41:16 grog Exp grog $ - */ - -/* vinumext.h: external definitions */ - -extern struct _vinum_conf vinum_conf; /* configuration information */ - -#ifdef VINUMDEBUG -extern debug; /* debug flags */ -#endif - -#define CHECKALLOC(ptr, msg) \ - if (ptr == NULL) \ - { \ - printf (msg); \ - longjmp (command_fail, -1); \ - } -#ifndef KERNEL -struct vnode; -struct proc; -#endif - -#ifdef KERNEL -int give_sd_to_plex(int plexno, int sdno); -int give_plex_to_volume(int volno, int plexno); -struct drive *check_drive(char *); -enum drive_label_info read_drive_label(struct drive *, int); -int parse_config(char *, struct keywordset *, int); -int parse_user_config(char *cptr, struct keywordset *keyset); -u_int64_t sizespec(char *spec); -int volume_index(struct volume *volume); -int plex_index(struct plex *plex); -int sd_index(struct sd *sd); -int drive_index(struct drive *drive); -int my_plex(int volno, int plexno); -int my_sd(int plexno, int sdno); -int get_empty_drive(void); -int find_drive(const char *name, int create); -int find_drive_by_dev(const char *devname, int create); -int get_empty_sd(void); -int find_subdisk(const char *name, int create); -void free_sd(int sdno); -void free_volume(int volno); -int get_empty_plex(void); -int find_plex(const char *name, int create); -void free_plex(int plexno); -int get_empty_volume(void); -int find_volume(const char *name, int create); -void config_subdisk(int); -void config_plex(int); -void config_volume(int); -void config_drive(int); -void updateconfig(int); -void update_sd_config(int sdno, int kernelstate); -void update_plex_config(int plexno, int kernelstate); -void update_volume_config(int volno, int kernelstate); -void update_config(void); -void drive_io_done(struct buf *); -void save_config(void); -void daemon_save_config(void); -void write_config(char *, int); -int start_config(void); -void finish_config(int); -void remove(struct vinum_ioctl_msg *msg); -void remove_drive_entry(int driveno, int force, int recurse); -void remove_sd_entry(int sdno, int force, int recurse); -void remove_plex_entry(int plexno, int force, int recurse); -void remove_volume_entry(int volno, int force, int recurse); - -void checkernel(char *); -int open_drive(struct drive *, struct proc *, int); -void close_drive(struct drive *drive); -int driveio(struct drive *, char *, size_t, off_t, int); -/* #define read_drive(a, b, c, d) driveio (a, b, c, d, B_READ) - #define write_drive(a, b, c, d) driveio (a, b, c, d, B_WRITE) */ -int set_drive_parms(struct drive *drive); -int init_drive(struct drive *, int); -/* void throw_rude_remark (int, struct _ioctl_reply *, char *, ...); XXX */ -void throw_rude_remark(int, char *,...); - -/* XXX die die */ -int read_drive(struct drive *drive, void *buf, size_t length, off_t offset); -int write_drive(struct drive *drive, void *buf, size_t length, off_t offset); -void format_config(char *config, int len); -void checkkernel(char *op); -void free_drive(struct drive *drive); -void down_drive(struct drive *drive); -void remove_drive(int driveno); - -void vinum_scandisk(char *drivename[], int drives); - -/* I/O */ -d_open_t vinumopen; -d_close_t vinumclose; -d_strategy_t vinumstrategy; -d_ioctl_t vinumioctl; -d_dump_t vinumdump; -d_psize_t vinumsize; -d_read_t vinumread; -d_write_t vinumwrite; - -int vinumstart(struct buf *bp, int reviveok); -int launch_requests(struct request *rq, int reviveok); -void sdio(struct buf *bp); - -/* XXX Do we need this? */ -int vinumpart(dev_t); - -#ifdef VINUMDEBUG -/* Memory allocation and request tracing */ -void vinum_meminfo(caddr_t data); -int vinum_mallocinfo(caddr_t data); -int vinum_rqinfo(caddr_t data); -#endif - -void expand_table(void **, int, int); - -struct request; -struct rqgroup *allocrqg(struct request *rq, int elements); -void deallocrqg(struct rqgroup *rqg); - -/* Device number decoding */ -int Volno(dev_t x); -int Plexno(dev_t x); -int Sdno(dev_t x); - -/* State transitions */ -int set_drive_state(int driveno, enum drivestate state, enum setstateflags flags); -int set_sd_state(int sdno, enum sdstate state, enum setstateflags flags); -enum requeststatus checksdstate(struct sd *sd, struct request *rq, daddr_t diskaddr, daddr_t diskend); -int set_plex_state(int plexno, enum plexstate state, enum setstateflags flags); -int set_volume_state(int volumeno, enum volumestate state, enum setstateflags flags); -void update_sd_state(int sdno); -void update_plex_state(int plexno); -void update_volume_state(int volno); -void invalidate_subdisks(struct plex *, enum sdstate); -void get_volume_label(struct volume *vol, struct disklabel *lp); -int write_volume_label(int); -void start_object(struct vinum_ioctl_msg *); -void stop_object(struct vinum_ioctl_msg *); -void setstate(struct vinum_ioctl_msg *msg); -void vinum_label(int); -int vinum_writedisklabel(struct volume *, struct disklabel *); -int initsd(int); - -int restart_plex(int plexno); -int revive_read(struct sd *sd); -int revive_block(int sdno); - -/* Auxiliary functions */ -enum sdstates sdstatemap(struct plex *plex); -enum volplexstate vpstate(struct plex *plex); -#endif - -enum keyword get_keyword(char *, struct keywordset *); -void listconfig(void); -char *drive_state(enum drivestate); -char *volume_state(enum volumestate); -char *plex_state(enum plexstate); -char *plex_org(enum plexorg); -char *sd_state(enum sdstate); -enum drivestate DriveState(char *text); -enum sdstate SdState(char *text); -enum plexstate PlexState(char *text); -enum volumestate VolState(char *text); -struct drive *validdrive(int driveno, struct _ioctl_reply *); -struct sd *validsd(int sdno, struct _ioctl_reply *); -struct plex *validplex(int plexno, struct _ioctl_reply *); -struct volume *validvol(int volno, struct _ioctl_reply *); -int tokenize(char *, char *[]); -void resetstats(struct vinum_ioctl_msg *msg); - -/* Locking */ -int lockdrive(struct drive *drive); -void unlockdrive(struct drive *drive); -int lockvol(struct volume *vol); -void unlockvol(struct volume *vol); -int lockplex(struct plex *plex); -void unlockplex(struct plex *plex); -int lockrange(struct plex *plex, off_t first, off_t last); -void unlockrange(struct plex *plex, off_t first, off_t last); -int lock_config(void); -void unlock_config(void); - -/* Dæmon */ - -void vinum_daemon(void); -int vinum_finddaemon(void); -int vinum_setdaemonopts(int); -extern struct daemonq *daemonq; /* daemon's work queue */ -extern struct daemonq *dqend; /* and the end of the queue */ diff --git a/sys/dev/vinum/vinumhdr.h b/sys/dev/vinum/vinumhdr.h deleted file mode 100644 index c913665cc30ce..0000000000000 --- a/sys/dev/vinum/vinumhdr.h +++ /dev/null @@ -1,104 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - */ - -/* Header files used by all modules */ -/* $Id: vinumhdr.h,v 1.11 1998/12/30 05:11:15 grog Exp grog $ */ - -#ifdef KERNEL -#define REALLYKERNEL -#endif -#include <sys/param.h> -#ifdef REALLYKERNEL -#include <sys/systm.h> -#include <sys/kernel.h> -#endif -#ifdef DEVFS -#error "DEVFS code not complete yet" -#include <sys/devfsext.h> -#endif /*DEVFS */ -#include <sys/proc.h> -#include <sys/errno.h> -#include <sys/dkstat.h> -#include <sys/buf.h> -#include <sys/malloc.h> -#include <sys/uio.h> -#include <sys/namei.h> -#include <sys/conf.h> -#include <sys/stat.h> -#include <sys/disklabel.h> -#include <ufs/ffs/fs.h> -#include <sys/mount.h> -#include <sys/device.h> -#undef KERNEL /* XXX */ -#include <sys/disk.h> -#ifdef REALLYKERNEL -#define KERNEL -#endif -#include <sys/syslog.h> -#include <sys/fcntl.h> -#include <sys/vnode.h> -#include <sys/dkbad.h> -#include <sys/queue.h> -#ifdef KERNEL -#include <machine/setjmp.h> -#include <machine/stdarg.h> -#else -#include <setjmp.h> -#include <stdarg.h> -#endif -#include <vm/vm.h> -#include <dev/vinum/vinumvar.h> -#include <dev/vinum/vinumio.h> -#include <dev/vinum/vinumkw.h> -#include <dev/vinum/vinumext.h> - -#undef Free /* defined in some funny net stuff */ -#ifdef REALLYKERNEL -#ifdef VINUMDEBUG -#define Malloc(x) MMalloc ((x), __FILE__, __LINE__) /* show where we came from */ -#define Free(x) FFree ((x), __FILE__, __LINE__) /* show where we came from */ -caddr_t MMalloc (int size, char *, int); -void FFree (void *mem, char *, int); -#else -#define Malloc(x) malloc((x), M_DEVBUF, M_WAITOK) -#define Free(x) free((x), M_DEVBUF) -#endif -#else -#define Malloc(x) malloc ((x)) /* just the size */ -#define Free(x) free ((x)) /* just the address */ -#endif - diff --git a/sys/dev/vinum/vinuminterrupt.c b/sys/dev/vinum/vinuminterrupt.c deleted file mode 100644 index 073ee7635c775..0000000000000 --- a/sys/dev/vinum/vinuminterrupt.c +++ /dev/null @@ -1,210 +0,0 @@ -/* interrupt.c: bottom half of the driver */ - -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinuminterrupt.c,v 1.4 1999/01/12 04:30:12 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <dev/vinum/request.h> -#include <miscfs/specfs/specdev.h> -#include <sys/resourcevar.h> - -void complete_raid5_write(struct rqelement *); -void freerq(struct request *rq); -void free_rqg(struct rqgroup *rqg); -void complete_rqe(struct buf *bp); -void sdio_done(struct buf *bp); - -/* Take a completed buffer, transfer the data back if - * it's a read, and complete the high-level request - * if this is the last subrequest. - * - * The bp parameter is in fact a struct rqelement, which - * includes a couple of extras at the end. - */ -void -complete_rqe(struct buf *bp) -{ - struct rqelement *rqe; - struct request *rq; - struct rqgroup *rqg; - struct buf *ubp; /* user buffer */ - - rqe = (struct rqelement *) bp; /* point to the element element that completed */ - rqg = rqe->rqg; /* and the request group */ - rq = rqg->rq; /* and the complete request */ - ubp = rq->bp; /* user buffer */ - -#ifdef VINUMDEBUG - if (debug & DEBUG_LASTREQS) - logrq(loginfo_iodone, rqe, ubp); -#endif - if ((bp->b_flags & B_ERROR) != 0) { /* transfer in error */ - if (bp->b_error != 0) /* did it return a number? */ - rq->error = bp->b_error; /* yes, put it in. */ - else if (rq->error == 0) /* no: do we have one already? */ - rq->error = EIO; /* no: catchall "I/O error" */ - SD[rqe->sdno].lasterror = rq->error; - if (bp->b_flags & B_READ) { - printf("%s: fatal read I/O error\n", SD[rqe->sdno].name); - set_sd_state(rqe->sdno, sd_crashed, setstate_force); /* subdisk is crashed */ - } else { /* write operation */ - printf("%s: fatal write I/O error\n", SD[rqe->sdno].name); - set_sd_state(rqe->sdno, sd_stale, setstate_force); /* subdisk is stale */ - } - if (rq->error == ENXIO) { /* the drive's down too */ - printf("%s: fatal drive I/O error\n", DRIVE[rqe->driveno].label.name); - DRIVE[rqe->driveno].lasterror = rq->error; - set_drive_state(rqe->driveno, /* take the drive down */ - drive_down, - setstate_force); - } - } - /* Now update the statistics */ - if (bp->b_flags & B_READ) { /* read operation */ - DRIVE[rqe->driveno].reads++; - DRIVE[rqe->driveno].bytes_read += bp->b_bcount; - SD[rqe->sdno].reads++; - SD[rqe->sdno].bytes_read += bp->b_bcount; - PLEX[rqe->rqg->plexno].reads++; - PLEX[rqe->rqg->plexno].bytes_read += bp->b_bcount; - } else { /* write operation */ - DRIVE[rqe->driveno].writes++; - DRIVE[rqe->driveno].bytes_written += bp->b_bcount; - SD[rqe->sdno].writes++; - SD[rqe->sdno].bytes_written += bp->b_bcount; - PLEX[rqe->rqg->plexno].writes++; - PLEX[rqe->rqg->plexno].bytes_written += bp->b_bcount; - } - rqg->active--; /* one less request active */ - if (rqg->active == 0) /* request group finished, */ - rq->active--; /* one less */ - if (rq->active == 0) { /* request finished, */ -#if VINUMDEBUG - if (debug & DEBUG_RESID) { - if (ubp->b_resid != 0) /* still something to transfer? */ - Debugger("resid"); - - { - int i; - for (i = 0; i < ubp->b_bcount; i += 512) /* XXX debug */ - if (((char *) ubp->b_data)[i] != '<') { /* and not what we expected */ - printf("At 0x%x (offset 0x%x): '%c' (0x%x)\n", - (int) (&((char *) ubp->b_data)[i]), - i, - ((char *) ubp->b_data)[i], - ((char *) ubp->b_data)[i]); - Debugger("complete_request checksum"); - } - } - } -#endif - - if (rq->error) { /* did we have an error? */ - if (rq->isplex) { /* plex operation, */ - ubp->b_flags |= B_ERROR; /* yes, propagate to user */ - ubp->b_error = rq->error; - } else /* try to recover */ - queue_daemon_request(daemonrq_ioerror, rq); /* let the daemon complete */ - } else { - ubp->b_resid = 0; /* completed our transfer */ - if (rq->isplex == 0) /* volume request, */ - VOL[rq->volplex.volno].active--; /* another request finished */ - biodone(ubp); /* top level buffer completed */ - freerq(rq); /* return the request storage */ - } - } -} - - -/* Free a request block and anything hanging off it */ -void -freerq(struct request *rq) -{ - struct rqgroup *rqg; - struct rqgroup *nrqg; /* next in chain */ - int rqno; - - for (rqg = rq->rqg; rqg != NULL; rqg = nrqg) { /* through the whole request chain */ - for (rqno = 0; rqno < rqg->count; rqno++) - if ((rqg->rqe[rqno].flags & XFR_MALLOCED) /* data buffer was malloced, */ - &&rqg->rqe[rqno].b.b_data) /* and the allocation succeeded */ - Free(rqg->rqe[rqno].b.b_data); /* free it */ - nrqg = rqg->next; /* note the next one */ - Free(rqg); /* and free this one */ - } - Free(rq); /* free the request itself */ -} - -void -free_rqg(struct rqgroup *rqg) -{ - if ((rqg->flags & XFR_GROUPOP) /* RAID 5 request */ - &&(rqg->rqe) /* got a buffer structure */ - &&(rqg->rqe->b.b_data)) /* and it has a buffer allocated */ - Free(rqg->rqe->b.b_data); /* free it */ -} - -/* I/O on subdisk completed */ -void -sdio_done(struct buf *bp) -{ - struct sdbuf *sbp; - - sbp = (struct sdbuf *) bp; - if (sbp->b.b_flags & B_ERROR) { /* had an error */ - bp->b_flags |= B_ERROR; - bp->b_error = sbp->b.b_error; - } - bp->b_resid = sbp->b.b_resid; - biodone(sbp->bp); /* complete the caller's I/O */ - /* Now update the statistics */ - if (bp->b_flags & B_READ) { /* read operation */ - DRIVE[sbp->driveno].reads++; - DRIVE[sbp->driveno].bytes_read += bp->b_bcount; - SD[sbp->sdno].reads++; - SD[sbp->sdno].bytes_read += bp->b_bcount; - } else { /* write operation */ - DRIVE[sbp->driveno].writes++; - DRIVE[sbp->driveno].bytes_written += bp->b_bcount; - SD[sbp->sdno].writes++; - SD[sbp->sdno].bytes_written += bp->b_bcount; - } - Free(sbp); -} diff --git a/sys/dev/vinum/vinumio.c b/sys/dev/vinum/vinumio.c deleted file mode 100644 index 331debfa643cd..0000000000000 --- a/sys/dev/vinum/vinumio.c +++ /dev/null @@ -1,1032 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumio.c,v 1.21 1998/12/30 06:04:31 grog Exp grog $ - */ - -#define STATIC /* nothing while we're testing XXX */ - -#include "opt_vinum.h" - -#define REALLYKERNEL -#include "vinumhdr.h" -#include "request.h" -#include <miscfs/specfs/specdev.h> - -extern jmp_buf command_fail; /* return on a failed command */ -struct _ioctl_reply *ioctl_reply; /* data pointer, for returning error messages */ - -/* Why aren't these declared anywhere? XXX */ -int setjmp(jmp_buf); -void longjmp(jmp_buf, int); - -static char *sappend(char *txt, char *s); -static int drivecmp(const void *va, const void *vb); - -/* Open the device associated with the drive, and set drive's vp. - * Return an error number */ -int -open_drive(struct drive *drive, struct proc *p, int verbose) -{ - struct nameidata nd; - struct vattr va; - int error; - - if (drive->devicename[0] == '\0') /* no device name */ - sprintf(drive->devicename, "/dev/%s", drive->label.name); /* get it from the drive name */ - NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, drive->devicename, p); - error = vn_open(&nd, FREAD | FWRITE, 0); /* open the device */ - if (error != 0) { /* can't open? */ - set_drive_state(drive->driveno, drive_down, setstate_force); - drive->lasterror = error; - if (verbose) - printf("vinum open_drive %s: failed with error %d\n", drive->devicename, error); /* XXX */ - return error; - } - drive->vp = nd.ni_vp; - drive->p = p; - - if (drive->vp->v_usecount > 1) { /* already in use? */ - if (verbose) - printf("open_drive %s: use count %d, ignoring\n", /* XXX where does this come from? */ - drive->devicename, - drive->vp->v_usecount); - drive->vp->v_usecount = 1; /* will this work? */ - } - error = VOP_GETATTR(drive->vp, &va, NOCRED, drive->p); - if (error) { - VOP_UNLOCK(drive->vp, 0, drive->p); - close_drive(drive); - set_drive_state(drive->driveno, drive_down, setstate_force); - drive->lasterror = error; - if (verbose) - printf("vinum open_drive %s: GETAATTR returns error %d\n", drive->devicename, error); /* XXX */ - return error; - } - drive->dev = va.va_rdev; /* device */ - - if (va.va_type != VBLK) { /* only consider block devices */ - VOP_UNLOCK(drive->vp, 0, drive->p); - close_drive(drive); - set_drive_state(drive->driveno, drive_down, setstate_force); /* this also closes the drive */ - drive->lasterror = ENOTBLK; - if (verbose) - printf("vinum open_drive %s: Not a block device\n", drive->devicename); /* XXX */ - return ENOTBLK; - } - drive->vp->v_numoutput = 0; - VOP_UNLOCK(drive->vp, 0, drive->p); - return 0; -} - -/* Set some variables in the drive struct - * in more convenient form. Return error indication */ -int -set_drive_parms(struct drive *drive) -{ - drive->blocksize = BLKDEV_IOSIZE; /* XXX do we need this? */ - drive->secsperblock = drive->blocksize /* number of sectors per block */ - / drive->partinfo.disklab->d_secsize; - - /* Now update the label part */ - bcopy(hostname, drive->label.sysname, VINUMHOSTNAMELEN); /* put in host name */ - getmicrotime(&drive->label.date_of_birth); /* and current time */ - drive->label.drive_size = ((u_int64_t) drive->partinfo.part->p_size) /* size of the drive in bytes */ - *((u_int64_t) drive->partinfo.disklab->d_secsize); - - /* number of sectors available for subdisks */ - drive->sectors_available = drive->label.drive_size / DEV_BSIZE - DATASTART; - - /* XXX Bug in 3.0 as of January 1998: you can open - * non-existent slices. They have a length of 0 */ - if (drive->label.drive_size < MINVINUMSLICE) { /* too small to worry about */ - set_drive_state(drive->driveno, drive_down, setstate_force); - drive->lasterror = ENOSPC; - return ENOSPC; - } - drive->freelist_size = INITIAL_DRIVE_FREELIST; /* initial number of entries */ - drive->freelist = (struct drive_freelist *) - Malloc(INITIAL_DRIVE_FREELIST * sizeof(struct drive_freelist)); - if (drive->freelist == NULL) /* can't malloc, dammit */ - return ENOSPC; - drive->freelist_entries = 1; /* just (almost) the complete drive */ - drive->freelist[0].offset = DATASTART; /* starts here */ - drive->freelist[0].sectors = (drive->label.drive_size >> DEV_BSHIFT) - DATASTART; /* and it's this long */ - if (drive->label.name[0] != '\0') /* got a name */ - set_drive_state(drive->driveno, drive_up, setstate_force); /* our drive is accessible */ - else /* we know about it, but that's all */ - drive->state = drive_uninit; - return 0; -} - -/* Initialize a drive: open the device and add device - * information */ -int -init_drive(struct drive *drive, int verbose) -{ - int error; - - if (drive->devicename[0] == '\0') { /* no device name yet, default to drive name */ - drive->lasterror = EINVAL; - /* This is a bug if it happens internally, - * so print a message regardless */ - printf("vinum: Can't open drive without drive name\n"); /* XXX */ - return EINVAL; - } - error = open_drive(drive, curproc, verbose); /* open the drive */ - if (error) - return error; - - error = VOP_IOCTL(drive->vp, /* get the partition information */ - DIOCGPART, - (caddr_t) & drive->partinfo, - FREAD, - NOCRED, - curproc); - if (error) { - if (verbose) - printf("vinum open_drive %s: Can't get partition information, error %d\n", - drive->devicename, - error); /* XXX */ - close_drive(drive); - drive->lasterror = error; - set_drive_state(drive->driveno, drive_down, setstate_force); - return error; - } - if (drive->partinfo.part->p_fstype != 0) { /* not plain */ - drive->lasterror = EFTYPE; - if (verbose) - printf("vinum open_drive %s: Wrong partition type for vinum\n", drive->devicename); /* XXX */ - close_drive(drive); - set_drive_state(drive->driveno, drive_down, setstate_force); - return EFTYPE; - } - return set_drive_parms(drive); /* set various odds and ends */ -} - -/* Close a drive if it's open. No errors */ -void -close_drive(struct drive *drive) -{ - if (drive->vp) { - lockdrive(drive); /* keep the daemon out */ - vn_close(drive->vp, FREAD | FWRITE, NOCRED, drive->p); - if (drive->vp->v_usecount) { /* XXX shouldn't happen */ - printf("close_drive %s: use count still %d\n", drive->devicename, drive->vp->v_usecount); - drive->vp->v_usecount = 0; /* will this work? */ - } - drive->vp = NULL; - unlockdrive(drive); - } -} - -/* Remove drive from the configuration. - * Caller must ensure that it isn't active - */ -void -remove_drive(int driveno) -{ - struct drive *drive = &vinum_conf.drive[driveno]; - long long int nomagic = VINUM_NOMAGIC; /* no magic number */ - - write_drive(drive, /* obliterate the magic, but leave a hint */ - (char *) &nomagic, - 8, - VINUM_LABEL_OFFSET); - free_drive(drive); /* close it and free resources */ - save_config(); /* and save the updated configuration */ -} - -/* Transfer drive data. Usually called from one of these defines; - * #define read_drive(a, b, c, d) driveio (a, b, c, d, B_READ) - * #define write_drive(a, b, c, d) driveio (a, b, c, d, B_WRITE) - * - * length and offset are in bytes, but must be multiples of sector - * size. The function *does not check* for this condition, and - * truncates ruthlessly. - * Return error number - */ -int -driveio(struct drive *drive, char *buf, size_t length, off_t offset, int flag) -{ - int error; - struct buf *bp; - char foo[40]; - - error = 0; /* to keep the compiler happy */ - while (length) { /* divide into small enough blocks */ - int len = min(length, MAXBSIZE); /* maximum block device transfer is MAXBSIZE */ - - bp = geteblk(len); /* get a buffer header */ - bp->b_flags = B_BUSY | flag; /* get busy */ - bp->b_proc = curproc; /* process */ - bp->b_dev = drive->vp->v_un.vu_specinfo->si_rdev; /* device */ - bp->b_blkno = offset / drive->partinfo.disklab->d_secsize; /* block number */ - bp->b_data = buf; - bp->b_bcount = len; - bp->b_bufsize = len; - - (*bdevsw[major(bp->b_dev)]->d_strategy) (bp); /* initiate the transfer */ - - error = biowait(bp); - printf("driveio: %s dev 0x%x, block 0x%x, len 0x%lx, error %d\n", /* XXX */ - flag ? "read" : "write", - bp->b_dev, - bp->b_blkno, - bp->b_bcount, - error); - bcopy(buf, foo, 40); - foo[39] = '\0'; - printf("---> %s\n", foo); /* XXXXXX */ - bp->b_flags |= B_INVAL | B_AGE; - brelse(bp); - if (error) - break; - length -= len; /* update pointers */ - buf += len; - offset += len; - } - return error; -} - -/* Read data from a drive - - * Return error number - */ -int -read_drive(struct drive *drive, void *buf, size_t length, off_t offset) -{ - int error; - struct buf *bp; - daddr_t nextbn; - long bscale; - - struct uio uio; - struct iovec iov; - daddr_t blocknum; /* block number */ - int blockoff; /* offset in block */ - int count; /* amount to transfer */ - - iov.iov_base = buf; - iov.iov_len = length; - - uio.uio_iov = &iov; - uio.uio_iovcnt = length; - uio.uio_offset = offset; - uio.uio_resid = length; - uio.uio_segflg = UIO_SYSSPACE; - uio.uio_rw = UIO_READ; - uio.uio_procp = curproc; - - bscale = btodb(drive->blocksize); /* mask off offset from block number */ - do { - blocknum = btodb(uio.uio_offset) & ~(bscale - 1); /* get the block number */ - blockoff = uio.uio_offset % drive->blocksize; /* offset in block */ - count = min((unsigned) (drive->blocksize - blockoff), /* amount to transfer in this block */ - uio.uio_resid); - - /* XXX Check this. I think the test is wrong */ - if (drive->vp->v_lastr + bscale == blocknum) { /* did our last read finish in this block? */ - nextbn = blocknum + bscale; /* note the end of the transfer */ - error = breadn(drive->vp, /* and read with read-ahead */ - blocknum, - (int) drive->blocksize, - &nextbn, - (int *) &drive->blocksize, - 1, - NOCRED, - &bp); - } else /* random read: just read this block */ - error = bread(drive->vp, blocknum, (int) drive->blocksize, NOCRED, &bp); - drive->vp->v_lastr = blocknum; /* note the last block we read */ - count = min(count, drive->blocksize - bp->b_resid); - if (error) { - brelse(bp); - return error; - } - error = uiomove((char *) bp->b_data + blockoff, count, &uio); /* move the data */ - brelse(bp); - } - while (error == 0 && uio.uio_resid > 0 && count != 0); - return error; -} - -/* Write data to a drive - - * Return error number - */ -int -write_drive(struct drive *drive, void *buf, size_t length, off_t offset) -{ - int error; - struct buf *bp; - struct uio uio; - struct iovec iov; - daddr_t blocknum; /* block number */ - int blockoff; /* offset in block */ - int count; /* amount to transfer */ - int blockshift; - - if (drive->state == drive_down) /* currently down */ - return 0; /* ignore */ - if (drive->vp == NULL) { - drive->lasterror = ENODEV; - return ENODEV; /* not configured yet */ - } - iov.iov_base = buf; - iov.iov_len = length; - - uio.uio_iov = &iov; - uio.uio_iovcnt = length; - uio.uio_offset = offset; - uio.uio_resid = length; - uio.uio_segflg = UIO_SYSSPACE; - uio.uio_rw = UIO_WRITE; - uio.uio_procp = curproc; - - error = 0; - blockshift = btodb(drive->blocksize) - 1; /* amount to shift block number - * to get sector number */ - do { - blocknum = btodb(uio.uio_offset) & ~blockshift; /* get the block number */ - blockoff = uio.uio_offset % drive->blocksize; /* offset in block */ - count = min((unsigned) (drive->blocksize - blockoff), /* amount to transfer in this block */ - uio.uio_resid); - if (count == drive->blocksize) /* the whole block */ - bp = getblk(drive->vp, blocknum, drive->blocksize, 0, 0); /* just transfer it */ - else /* partial block: */ - error = bread(drive->vp, /* read it first */ - blocknum, - drive->blocksize, - NOCRED, - &bp); - count = min(count, drive->blocksize - bp->b_resid); /* how much will we transfer now? */ - if (error == 0) - error = uiomove((char *) bp->b_data + blockoff, /* move the data to the block */ - count, - &uio); - if (error) { - brelse(bp); - drive->lasterror = error; - switch (error) { - case EIO: - set_drive_state(drive->driveno, drive_down, setstate_force); - break; - - /* XXX Add other possibilities here */ - default: - } - return error; - } - if (count + blockoff == drive->blocksize) - /* The transfer goes to the end of the block. There's - * no need to wait for any more data to arrive. */ - bawrite(bp); /* start the write now */ - else - bdwrite(bp); /* do a delayed write */ - } - while (error == 0 && uio.uio_resid > 0 && count != 0); - if (error) - drive->lasterror = error; - return error; /* OK */ -} - -/* Wake up on completion */ -void -drive_io_done(struct buf *bp) -{ - wakeup((caddr_t) bp); /* Wachet auf! */ - bp->b_flags &= ~B_CALL; /* don't do this again */ -} - -/* Check a drive for a vinum header. If found, - * update the drive information. We come here - * with a partially populated drive structure - * which includes the device name. - * - * Return information on what we found. - * - * This function is called from two places: check_drive, - * which wants to find out whether the drive is a - * Vinum drive, and config_drive, which asserts that - * it is a vinum drive. In the first case, we don't - * print error messages (verbose==0), in the second - * we do (verbose==1). - */ -enum drive_label_info -read_drive_label(struct drive *drive, int verbose) -{ - int error; - int result; /* result of our search */ - struct vinum_hdr *vhdr; /* and as header */ - - error = init_drive(drive, 0); /* find the drive */ - if (error) /* find the drive */ - return DL_CANT_OPEN; /* not ours */ - - vhdr = (struct vinum_hdr *) Malloc(VINUMHEADERLEN); /* allocate buffers */ - CHECKALLOC(vhdr, "Can't allocate memory"); - - error = read_drive(drive, (void *) vhdr, VINUMHEADERLEN, VINUM_LABEL_OFFSET); - if (vhdr->magic == VINUM_MAGIC) { /* ours! */ - if (drive->label.name[0] /* we have a name for this drive */ - &&(strcmp(drive->label.name, vhdr->label.name))) { /* but it doesn't match the real name */ - drive->lasterror = EINVAL; - result = DL_WRONG_DRIVE; /* it's the wrong drive */ - } else { - drive->state = drive_up; /* it's OK by us */ - result = DL_OURS; - } - /* We copy the drive anyway so that we have - * the correct name in the drive info. This - * may not be the name specified */ - drive->label = vhdr->label; /* put in the label information */ - } else if (vhdr->magic == VINUM_NOMAGIC) /* was ours, but we gave it away */ - result = DL_DELETED_LABEL; - else - result = DL_NOT_OURS; /* we could have it, but we don't yet */ - Free(vhdr); /* that's all. */ - return result; -} - -/* Check a drive for a vinum header. If found, - * read configuration information from the drive and - * incorporate the data into the configuration. - * - * Return - */ -struct drive * -check_drive(char *drivename) -{ - int driveno; - struct drive *drive; - - driveno = find_drive_by_dev(drivename, 1); /* entry doesn't exist, create it */ - drive = &vinum_conf.drive[driveno]; /* and get a pointer */ - - if (read_drive_label(drive, 0) != DL_OURS) { /* not ours */ - if (drive->lasterror == 0) - drive->lasterror = ENODEV; - set_drive_state(drive->driveno, drive_down, setstate_force); - } - return drive; -} - -static char * -sappend(char *txt, char *s) -{ - while (*s++ = *txt++); - return s - 1; -} - -/* Kludge: kernel printf doesn't handle quads */ -static char *lltoa (long long l, char *s); - -static char *lltoa (long long l, char *s) -{ - if (l < 0) - { - *s++ = '-'; - l = -l; - } - if (l > 9) - { - s = lltoa (l / 10, s); - l %= 10; - } - *s++ = l + '0'; - return s; - } -/* Format the configuration in text form into the buffer - * at config. Don't go beyond len bytes - * XXX this stinks. Fix soon. */ -void format_config (char *config, int len) -{ -#if __FreeBSD__ == 2 - BROKEN_GDB -#endif - int i; - int j; - char *s = config; - - bzero (config, len); - -#if 0 /* XXX die, die */ - /* First write the drive configuration */ - for (i = 0; i < vinum_conf.drives_used; i++) - { - struct drive *drive; - - drive = &vinum_conf.drive [i]; - if (drive->state != drive_unallocated) - { - sprintf (s, - "drive %s state %s device %s\n", - drive->label.name, - drive_state (drive->state), - drive->devicename); - while (*s) - s++; /* find the end */ - if (s > &config [len - 80]) - { - printf ("vinum: configuration data overflow\n"); - return; - } - } - } -#endif - - /* Then the volume configuration */ - for (i = 0; i < vinum_conf.volumes_used; i++) - { - struct volume *vol; - - vol = &vinum_conf.volume [i]; - if (vol->state != volume_unallocated) - { - if (vol->preferred_plex >= 0) /* preferences, */ - sprintf (s, - "volume %s state %s readpol prefer %s", - vol->name, - volume_state (vol->state), - vinum_conf.plex [vol->preferred_plex].name); - else /* default round-robin */ - sprintf (s, - "volume %s state %s", - vol->name, - volume_state (vol->state)); - while (*s) - s++; /* find the end */ -#if 0 - /* Do we need to state the plexes? */ - for (j = 0; j < vol->plexes; j++) - { - sprintf (s, " plex %s", vinum_conf.plex [vol->plex [j]].name); - while (*s) - s++; /* find the end */ - } -#endif - s = sappend ("\n", s); - if (s > &config [len - 80]) - { - printf ("vinum: configuration data overflow\n"); - return; - } - } - } - - /* Then the plex configuration */ - for (i = 0; i < vinum_conf.plexes_used; i++) - { - struct plex *plex; - - plex = &vinum_conf.plex [i]; - if (plex->state != plex_unallocated) - { - sprintf (s, "plex name %s state %s org %s ", - plex->name, - plex_state (plex->state), - plex_org (plex->organization) ); - while (*s) - s++; /* find the end */ - if ((plex->organization == plex_striped) -#ifdef RAID5 - || (plex->organization == plex_raid5) -#endif - ) - { - sprintf (s, "%db ", (int) plex->stripesize); - while (*s) - s++; /* find the end */ - } - if (plex->volno >= 0) /* we have a volume */ - sprintf (s, "vol %s ", vinum_conf.volume [plex->volno].name); - while (*s) - s++; /* find the end */ - for (j = 0; j < plex->subdisks; j++) - { - sprintf (s, " sd %s", vinum_conf.sd [plex->sdnos [j]].name); - } - s = sappend ("\n", s); - if (s > &config [len - 80]) - { - printf ("vinum: configuration data overflow\n"); - return; - } - } - } - - /* And finally the subdisk configuration */ - for (i = 0; i < vinum_conf.subdisks_used; i++) - { - struct sd *sd = &vinum_conf.sd [i]; /* XXX */ - if (vinum_conf.sd [i].state != sd_unallocated) - { - sprintf (s, - "sd name %s drive %s plex %s state %s len ", - sd->name, - vinum_conf.drive [sd->driveno].label.name, - vinum_conf.plex [sd->plexno].name, - sd_state (sd->state) ); - while (*s) - s++; /* find the end */ - s = lltoa (sd->sectors, s); - s = sappend ("b driveoffset ", s); - s = lltoa (sd->driveoffset, s); - s = sappend ("b plexoffset ", s); - s = lltoa (sd->plexoffset, s); - s = sappend ("b\n", s); - if (s > &config [len - 80]) - { - printf ("vinum: configuration data overflow\n"); - return; - } - } - } - } - -/* issue a save config request to the dæmon. The actual work - * is done in process context by daemon_save_config */ -void -save_config(void) -{ - queue_daemon_request(daemonrq_saveconfig, NULL); -} - -/* Write the configuration to all vinum slices. This - * is performed by the dæmon only */ -void -daemon_save_config(void) -{ - int error; - int written_config; /* set when we first write the config to disk */ - int driveno; - struct drive *drive; /* point to current drive info */ - struct vinum_hdr *vhdr; /* and as header */ - char *config; /* point to config data */ - int wlabel_on; /* to set writing label on/off */ - - /* don't save the configuration while we're still working on it */ - if (vinum_conf.flags & VF_CONFIGURING) - return; - written_config = 0; /* no config written yet */ - /* Build a volume header */ - vhdr = (struct vinum_hdr *) Malloc(VINUMHEADERLEN); /* get space for the config data */ - CHECKALLOC(vhdr, "Can't allocate config data"); - vhdr->magic = VINUM_MAGIC; /* magic number */ - vhdr->config_length = MAXCONFIG; /* length of following config info */ - - config = Malloc(MAXCONFIG); /* get space for the config data */ - CHECKALLOC(config, "Can't allocate config data"); - - format_config(config, MAXCONFIG); - error = 0; /* no errors yet */ - for (driveno = 0; driveno < vinum_conf.drives_used; driveno++) { - drive = &vinum_conf.drive[driveno]; /* point to drive */ - lockdrive(drive); /* don't let it change */ - - /* First, do some drive consistency checks. Some - * of these are kludges, others require a process - * context and couldn't be done before */ - if ((drive->devicename[0] == '\0') /* XXX we keep getting these nameless drives */ - ||(drive->label.name[0] == '\0')) { /* XXX we keep getting these nameless drives */ - unlockdrive(drive); - printf("Removing incomplete drive, index %d\n", driveno); - if (drive->vp) /* how can it be open without a name? */ - close_drive(drive); - free_drive(drive); /* get rid of it */ - break; - } - if ((drive->vp == NULL) /* drive not open */ - &&(drive->state > drive_down)) { /* and it thinks it's not down */ - unlockdrive(drive); - set_drive_state(driveno, drive_down, setstate_force); /* tell it what's what */ - } - if ((drive->state == drive_down) /* it's down */ - &&(drive->vp != NULL)) { /* but open, */ - unlockdrive(drive); - close_drive(drive); /* close it */ - } else if (drive->state > drive_down) { - getmicrotime(&drive->label.last_update); /* time of last update is now */ - bcopy((char *) &drive->label, /* and the label info from the drive structure */ - (char *) &vhdr->label, - sizeof(vhdr->label)); - if ((drive->state != drive_unallocated) - && (drive->state != drive_uninit)) { - wlabel_on = 1; /* enable writing the label */ - error = VOP_IOCTL(drive->vp, /* make the label writeable */ - DIOCWLABEL, - (caddr_t) & wlabel_on, - FWRITE, - NOCRED, - curproc); - if (error == 0) - error = write_drive(drive, (char *) vhdr, VINUMHEADERLEN, VINUM_LABEL_OFFSET); - if (error == 0) - error = write_drive(drive, config, MAXCONFIG, VINUM_CONFIG_OFFSET); /* first config copy */ - if (error == 0) - error = write_drive(drive, config, MAXCONFIG, VINUM_CONFIG_OFFSET + MAXCONFIG); /* second copy */ - wlabel_on = 0; /* enable writing the label */ - if (error == 0) - VOP_IOCTL(drive->vp, /* make the label non-writeable again */ - DIOCWLABEL, - (caddr_t) & wlabel_on, - FWRITE, - NOCRED, - curproc); - unlockdrive(drive); - if (error) { - printf("vinum: Can't write config to %s, error %d\n", drive->devicename, error); - set_drive_state(drive->driveno, drive_down, setstate_force); - } else - written_config = 1; /* we've written it on at least one drive */ - } - } - } - Free(vhdr); - Free(config); -} - -/* Disk labels are a mess. The correct way to access them - * is with the DIOC[GSW]DINFO ioctls, but some programs, such - * as newfs, access the disk directly, so we have to write - * things there. We do this only on request. If a user - * request tries to read it directly, we fake up one on the fly. - */ - -/* get_volume_label returns a label structure to lp, which - * is allocated by the caller */ -void -get_volume_label(struct volume *vol, struct disklabel *lp) -{ - bzero(lp, sizeof(struct disklabel)); - - strncpy(lp->d_typename, "vinum", sizeof(lp->d_typename)); - lp->d_type = DTYPE_VINUM; - strncpy(lp->d_packname, vol->name, min(sizeof(lp->d_packname), sizeof(vol->name))); - lp->d_rpm = 14400 * vol->plexes; /* to keep them guessing */ - lp->d_interleave = 1; - lp->d_flags = 0; - - /* Fitting unto the vine, a vinum has a single - * track with all its sectors */ - lp->d_secsize = DEV_BSIZE; /* bytes per sector */ - lp->d_nsectors = vol->size; /* data sectors per track */ - lp->d_ntracks = 1; /* tracks per cylinder */ - lp->d_ncylinders = 1; /* data cylinders per unit */ - lp->d_secpercyl = vol->size; /* data sectors per cylinder */ - lp->d_secperunit = vol->size; /* data sectors per unit */ - - lp->d_bbsize = BBSIZE; - lp->d_sbsize = SBSIZE; - - lp->d_magic = DISKMAGIC; - lp->d_magic2 = DISKMAGIC; - - /* Set up partitions a, b and c to be identical - * and the size of the volume. a is UFS, b is - * swap, c is nothing */ - lp->d_partitions[0].p_size = vol->size; - lp->d_partitions[0].p_fsize = 1024; - lp->d_partitions[0].p_fstype = FS_BSDFFS; /* FreeBSD File System :-) */ - lp->d_partitions[0].p_fsize = 1024; /* FS fragment size */ - lp->d_partitions[0].p_frag = 8; /* and fragments per block */ - lp->d_partitions[SWAP_PART].p_size = vol->size; - lp->d_partitions[SWAP_PART].p_fstype = FS_SWAP; /* swap partition */ - lp->d_partitions[LABEL_PART].p_size = vol->size; - lp->d_npartitions = LABEL_PART + 1; - strncpy(lp->d_packname, vol->name, min(sizeof(lp->d_packname), sizeof(vol->name))); - lp->d_checksum = dkcksum(lp); -} - -/* Write a volume label. This implements the VINUM_LABEL ioctl. */ -int -write_volume_label(int volno) -{ - struct disklabel *lp; - struct buf *bp; - struct disklabel *dlp; - struct volume *vol; - int error; - - lp = (struct disklabel *) Malloc((sizeof(struct disklabel) + (DEV_BSIZE - 1)) & (DEV_BSIZE - 1)); - if (lp == 0) - return ENOMEM; - - if ((unsigned) (volno) >= (unsigned) vinum_conf.volumes_used) /* invalid volume */ - return ENOENT; - - vol = &VOL[volno]; /* volume in question */ - if (vol->state == volume_unallocated) /* nothing there */ - return ENOENT; - - get_volume_label(vol, lp); /* get the label */ - - /* Now write to disk. This code is derived from the - * system writedisklabel (), which does silly things - * like reading the label and refusing to write - * unless it's already there. */ - bp = geteblk((int) lp->d_secsize); /* get a buffer */ - bp->b_dev = minor(vol->devno) | (CDEV_MAJOR << MAJORDEV_SHIFT); /* our own raw volume */ - bp->b_blkno = LABELSECTOR * ((int) lp->d_secsize / DEV_BSIZE); - bp->b_bcount = lp->d_secsize; - bzero(bp->b_data, lp->d_secsize); - dlp = (struct disklabel *) bp->b_data; - *dlp = *lp; - bp->b_flags &= ~B_INVAL; - bp->b_flags |= B_BUSY | B_WRITE; - vinumstrategy(bp); /* write it out */ - error = biowait(bp); - bp->b_flags |= B_INVAL | B_AGE; - brelse(bp); - return error; -} - -/* Initialize a subdisk */ -int -initsd(int sdno) -{ - return 0; -} - -/* Look at all disks on the system for vinum slices */ -void -vinum_scandisk(char *drivename[], int drives) -{ - struct drive *volatile drive; - volatile int driveno; - int firstdrive; /* first drive in this list */ - volatile int gooddrives; /* number of usable drives found */ - int firsttime; /* set if we have never configured before */ - int error; - struct nameidata nd; /* mount point credentials */ - char *config_text; /* read the config info from disk into here */ - char *volatile cptr; /* pointer into config information */ - char *eptr; /* end pointer into config information */ - char *config_line; /* copy the config line to */ - volatile int status; - struct drive **volatile drivelist; -#define DRIVENAMELEN 64 -#define DRIVEPARTS 35 /* max partitions per drive, excluding c */ - char partname[DRIVENAMELEN]; /* for creating partition names */ - - status = 0; /* success indication */ - vinum_conf.flags |= VF_KERNELOP | VF_READING_CONFIG; /* kernel operation: reading config */ - - gooddrives = 0; /* number of usable drives found */ - firstdrive = vinum_conf.drives_used; /* the first drive */ - firsttime = vinum_conf.drives_used == 0; /* are we a virgin? */ - - - /* allocate a drive pointer list */ - drivelist = (struct drive **) Malloc(drives * DRIVEPARTS * sizeof(struct drive *)); - CHECKALLOC(drivelist, "Can't allocate memory"); - - /* Open all drives and find which was modified most recently */ - for (driveno = 0; driveno < drives; driveno++) { - char part; /* UNIX partition */ - - for (part = 'a'; part < 'i'; part++) - if (part != 'c') { /* don't do the c partition */ - snprintf(partname, /* /dev/sd0a */ - DRIVENAMELEN, - "%s%c", - drivename[driveno], - part); - drive = check_drive(partname); /* try to open it */ - if (drive->lasterror != 0) /* didn't work, */ - free_drive(drive); /* get rid of it */ - else if (drive->flags & VF_CONFIGURED) /* already read this config, */ - printf("vinum: already read config from %s\n", /* say so */ - drive->label.name); - else { - drivelist[gooddrives] = drive; /* keep a pointer to the drive */ - drive->flags &= ~VF_NEWBORN; /* which is no longer newly born */ - gooddrives++; - } - } - } - - if (gooddrives == 0) { - printf("vinum: no drives found\n"); - return; - } - /* We now have at least one drive - * open. Sort them in order of config time - * and merge the config info with what we - * have already */ - qsort(drivelist, gooddrives, sizeof(struct drive *), drivecmp); - config_text = (char *) Malloc(MAXCONFIG * 2); /* allocate buffers */ - CHECKALLOC(config_text, "Can't allocate memory"); - config_line = (char *) Malloc(MAXCONFIGLINE * 2); /* allocate buffers */ - CHECKALLOC(config_line, "Can't allocate memory"); - for (driveno = 0; driveno < gooddrives; driveno++) { /* now include the config */ - drive = drivelist[driveno]; - - if (firsttime && (driveno == 0)) /* we've never configured before, */ - printf("vinum: reading configuration from %s\n", drive->devicename); - else - printf("vinum: updating configuration from %s\n", drive->devicename); - - /* Read in both copies of the configuration information */ - error = read_drive(drive, config_text, MAXCONFIG * 2, VINUM_CONFIG_OFFSET); - - if (error != 0) { - printf("vinum: Can't read device %s, error %d\n", drive->devicename, error); - Free(config_text); - Free(config_line); - free_drive(drive); /* give it back */ - status = error; - } - /* XXX At this point, check that the two copies are the same, and do something useful if not. - * In particular, consider which is newer, and what this means for the integrity of the - * data on the drive */ - - else { - /* Parse the configuration, and add it to the global configuration */ - for (cptr = config_text; *cptr != '\0';) { /* love this style(9) */ - volatile int parse_status; /* return value from parse_config */ - - for (eptr = config_line; (*cptr != '\n') && (*cptr != '\0');) /* until the end of the line */ - *eptr++ = *cptr++; - *eptr = '\0'; /* and delimit */ - if (setjmp(command_fail) == 0) { /* come back here on error and continue */ - parse_status = parse_config(config_line, &keyword_set, 1); /* parse the config line */ - if (parse_status < 0) { /* error in config */ - /* This config should have been parsed in user - * space. If we run into problems here, something - * serious is afoot. Complain and let the user - * snarf the config to see what's wrong */ - printf("vinum: Config error on drive %s, aborting integration\n", nd.ni_dirp); - Free(config_text); - Free(config_line); - free_drive(drive); /* give it back */ - status = EINVAL; - } - } - while (*cptr == '\n') - cptr++; /* skip to next line */ - } - } - drive->flags |= VF_CONFIGURED; /* read this drive's configuration */ - } - - Free(config_text); - Free(drivelist); - vinum_conf.flags &= ~(VF_KERNELOP | VF_READING_CONFIG); - if (status != 0) - throw_rude_remark(status, "Couldn't read configuration"); - updateconfig(VF_KERNELOP); /* update from kernel space */ -} - -/* Compare the modification dates of the drives, for qsort. - * Return 1 if a < b, 0 if a == b, 01 if a > b: in other - * words, sort backwards */ -int -drivecmp(const void *va, const void *vb) -{ - struct drive *a = *(struct drive **) va; - struct drive *b = *(struct drive **) vb; - - if ((a->label.last_update.tv_sec == b->label.last_update.tv_sec) - && (a->label.last_update.tv_usec == b->label.last_update.tv_usec)) - return 0; - else if ((a->label.last_update.tv_sec > b->label.last_update.tv_sec) - || ((a->label.last_update.tv_sec == b->label.last_update.tv_sec) - && (a->label.last_update.tv_usec > b->label.last_update.tv_usec))) - return -1; - else - return 1; -} diff --git a/sys/dev/vinum/vinumio.h b/sys/dev/vinum/vinumio.h deleted file mode 100644 index fe1c09b096067..0000000000000 --- a/sys/dev/vinum/vinumio.h +++ /dev/null @@ -1,145 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumio.h,v 1.14 1999/01/18 05:00:30 grog Exp grog $ - */ - -#ifdef VINUMDEBUG -#define MAX_IOCTL_REPLY 4096 -#else -#define MAX_IOCTL_REPLY 256 -#endif - -#define L 'F' /* ID letter of our ioctls */ -/* VINUM_CREATE returns a buffer of this kind */ -struct _ioctl_reply { - int error; - char msg[MAX_IOCTL_REPLY]; -}; - -/* ioctl requests */ -#define BUFSIZE 1024 /* size of buffer, including continuations */ -#define VINUM_CREATE _IOC(IOC_IN | IOC_OUT, L, 64, BUFSIZE) /* configure vinum */ -#define VINUM_GETCONFIG _IOR(L, 65, struct _vinum_conf) /* get global config */ -#define VINUM_DRIVECONFIG _IOWR(L, 66, struct drive) /* get drive config */ -#define VINUM_SDCONFIG _IOWR(L, 67, struct sd) /* get subdisk config */ -#define VINUM_PLEXCONFIG _IOWR(L, 68, struct plex) /* get plex config */ -#define VINUM_VOLCONFIG _IOWR(L, 69, struct volume) /* get volume config */ -#define VINUM_PLEXSDCONFIG _IOWR(L, 70, struct sd) /* get sd config for plex (plex, sdno) */ -#define VINUM_GETFREELIST _IOWR(L, 71, struct drive_freelist) /* get freelist element (drive, fe) */ -#define VINUM_SAVECONFIG _IOC(0, L, 72, 0) /* release locks, update, write config to disk */ -#define VINUM_RESETCONFIG _IOC(0, L, 73, 0) /* trash config on disk */ -#define VINUM_INIT _IOC(0, L, 74, 0) /* read config from disk */ -#ifdef VINUMDEBUG - -struct debuginfo { - int changeit; - int param; -}; - -#define VINUM_DEBUG _IOWR(L, 75, struct debuginfo) /* call the debugger from ioctl () */ -#endif - -enum objecttype { - drive_object, - sd_object, - plex_object, - volume_object, - invalid_object -}; - -/* Start an object. Pass two integers: - * msg [0] index in vinum_conf.<object> - * msg [1] type of object (see below) - * - * Return ioctl_reply - */ -#define VINUM_SETSTATE _IOC(IOC_IN | IOC_OUT, L, 76, MAX_IOCTL_REPLY) /* start an object */ - -/* The state to set with VINUM_SETSTATE. Since - * each object has a different set of states, we - * need to translate later */ -enum objectstate { - object_down, - object_initializing, - object_up -}; - -/* This structure is used for modifying objects - * (VINUM_SETSTATE, VINUM_REMOVE, VINUM_RESETSTATS, VINUM_ATTACH, - * VINUM_DETACH, VINUM_REPLACE - */ -struct vinum_ioctl_msg { - int index; - enum objecttype type; - enum objectstate state; /* state to set (VINUM_SETSTATE) */ - int force; /* do it even if it doesn't make sense */ - int recurse; /* recurse (VINUM_REMOVE) */ - int otherobject; /* superordinate object (attach), - * replacement object (replace) */ - int rename; /* rename object (attach) */ - int64_t offset; /* offset of subdisk (for attach) */ -}; - -#define VINUM_RELEASECONFIG _IOC(0, L, 77, 0) /* release locks and write config to disk */ -#define VINUM_STARTCONFIG _IOC(0, L, 78, 0) /* start a configuration operation */ -#define VINUM_MEMINFO _IOR(L, 79, struct meminfo) /* get memory usage summary */ -#define VINUM_MALLOCINFO _IOWR(L, 80, struct mc) /* get specific malloc information [i] */ -#define VINUM_LABEL _IOC(IOC_IN | IOC_OUT, L, 81, MAX_IOCTL_REPLY) /* label a volume */ -#define VINUM_INITSD _IOW(L, 82, int) /* initialize a subdisk */ -#define VINUM_REMOVE _IOC(IOC_IN | IOC_OUT, L, 83, MAX_IOCTL_REPLY) /* remove an object */ -/* 84, 85 going begging */ -#define VINUM_RESETSTATS _IOC(IOC_IN | IOC_OUT, L, 86, MAX_IOCTL_REPLY) /* reset object stats */ -#define VINUM_ATTACH _IOC(IOC_IN | IOC_OUT, L, 87, MAX_IOCTL_REPLY) /* reset object stats */ -#define VINUM_DETACH _IOC(IOC_IN | IOC_OUT, L, 88, MAX_IOCTL_REPLY) /* reset object stats */ - -struct vinum_rename_msg { - int index; - int recurse; /* rename subordinate objects too */ - enum objecttype type; - char newname[MAXNAME]; /* new name to give to object */ -}; - -#define VINUM_RENAME _IOC(IOC_IN | IOC_OUT, L, 89, MAX_IOCTL_REPLY) /* reset object stats */ -#define VINUM_REPLACE _IOC(IOC_IN | IOC_OUT, L, 90, MAX_IOCTL_REPLY) /* reset object stats */ - -#ifdef VINUMDEBUG -#define VINUM_RQINFO _IOWR(L, 91, struct rqinfo) /* get request info [i] from trace buffer */ -#endif - -#define VINUM_DAEMON _IOC(0, L, 92, 0) /* perform the kernel part of Vinum daemon */ -#define VINUM_FINDDAEMON _IOC(0, L, 93, 0) /* check for presence of Vinum daemon */ -#define VINUM_SETDAEMON _IOW(L, 94, int) /* set daemon flags */ -#define VINUM_GETDAEMON _IOR(L, 95, int) /* get daemon flags */ diff --git a/sys/dev/vinum/vinumioctl.c b/sys/dev/vinum/vinumioctl.c deleted file mode 100644 index a2052b87c1d20..0000000000000 --- a/sys/dev/vinum/vinumioctl.c +++ /dev/null @@ -1,767 +0,0 @@ -/* XXX replace all the checks on object validity with - * calls to valid<object> */ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumioctl.c,v 1.7 1999/01/18 03:36:17 grog Exp grog $ - */ - -#define STATIC /* nothing while we're testing XXX */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <sys/sysproto.h> /* for sync(2) */ -#ifdef VINUMDEBUG -#include <sys/reboot.h> -#include <dev/vinum/request.h> -#endif - -jmp_buf command_fail; /* return on a failed command */ - -/* Why aren't these declared anywhere? XXX */ -int setjmp(jmp_buf); -void longjmp(jmp_buf, int); - -int vinum_inactive(void); -void free_vinum(int); -void attachobject(struct vinum_ioctl_msg *); -void detachobject(struct vinum_ioctl_msg *); -void renameobject(struct vinum_rename_msg *); -void replaceobject(struct vinum_ioctl_msg *); - -/* ioctl routine */ -int -vinumioctl(dev_t dev, - u_long cmd, - caddr_t data, - int flag, - struct proc *p) -{ - unsigned int objno; - int error = 0; - struct volume *vol; - unsigned int index; /* for transferring config info */ - unsigned int sdno; /* for transferring config info */ - int fe; /* free list element number */ - struct _ioctl_reply *ioctl_reply = (struct _ioctl_reply *) data; /* struct to return */ - - struct devcode *device = (struct devcode *) &dev; - - /* First, decide what we're looking at */ - switch (device->type) { - case VINUM_SUPERDEV_TYPE: - ioctl_reply = (struct _ioctl_reply *) data; /* save the address to reply to */ - error = setjmp(command_fail); /* come back here on error */ - if (error) /* bombed out */ - return 0; /* the reply will contain meaningful info */ - switch (cmd) { -#ifdef VINUMDEBUG - case VINUM_DEBUG: - if (((struct debuginfo *) data)->changeit) /* change debug settings */ - debug = (((struct debuginfo *) data)->param); - else { - if (debug & DEBUG_REMOTEGDB) - boothowto |= RB_GDB; /* serial debug line */ - else - boothowto &= ~RB_GDB; /* local ddb */ - Debugger("vinum debug"); - } - ioctl_reply = (struct _ioctl_reply *) data; /* reinstate the address to reply to */ - ioctl_reply->error = 0; - return 0; -#endif - - case VINUM_CREATE: /* create a vinum object */ - error = lock_config(); /* get the config for us alone */ - if (error) /* can't do it, */ - return error; /* give up */ - error = setjmp(command_fail); /* come back here on error */ - if (error == 0) { /* first time, */ - parse_user_config((char *) data, &keyword_set); /* update the config */ - ioctl_reply->error = 0; /* no error if we make it here */ - } else if (ioctl_reply->error == 0) { /* longjmp, but no error status */ - ioctl_reply->error = EINVAL; /* note that something's up */ - ioctl_reply->msg[0] = '\0'; /* no message? */ - } - unlock_config(); - return 0; /* must be 0 to return the real error info */ - - case VINUM_GETCONFIG: /* get the configuration information */ - bcopy(&vinum_conf, data, sizeof(vinum_conf)); - return 0; - - /* start configuring the subsystem */ - case VINUM_STARTCONFIG: - return start_config(); /* just lock it */ - - /* Move the individual parts of the config to user space. - - * Specify the index of the object in the first word of data, - * and return the object there - */ - case VINUM_DRIVECONFIG: - index = *(int *) data; /* get the index */ - if (index >= (unsigned) vinum_conf.drives_used) /* can't do it */ - return EFAULT; /* bang */ - bcopy(&DRIVE[index], data, sizeof(struct drive)); /* copy the config item out */ - return 0; - - case VINUM_SDCONFIG: - index = *(int *) data; /* get the index */ - if (index >= (unsigned) vinum_conf.subdisks_used) /* can't do it */ - return EFAULT; /* bang */ - bcopy(&SD[index], data, sizeof(struct sd)); /* copy the config item out */ - return 0; - - case VINUM_PLEXCONFIG: - index = *(int *) data; /* get the index */ - if (index >= (unsigned) vinum_conf.plexes_used) /* can't do it */ - return EFAULT; /* bang */ - bcopy(&PLEX[index], data, sizeof(struct plex)); /* copy the config item out */ - return 0; - - case VINUM_VOLCONFIG: - index = *(int *) data; /* get the index */ - if (index >= (unsigned) vinum_conf.volumes_used) /* can't do it */ - return EFAULT; /* bang */ - bcopy(&VOL[index], data, sizeof(struct volume)); /* copy the config item out */ - return 0; - - case VINUM_PLEXSDCONFIG: - index = *(int *) data; /* get the plex index */ - sdno = ((int *) data)[1]; /* and the sd index */ - if ((index >= (unsigned) vinum_conf.plexes_used) /* plex doesn't exist */ - ||(sdno >= PLEX[index].subdisks)) /* or it doesn't have this many subdisks */ - return EFAULT; /* bang */ - bcopy(&SD[PLEX[index].sdnos[sdno]], /* copy the config item out */ - data, - sizeof(struct sd)); - return 0; - - case VINUM_SAVECONFIG: - if (VFLAGS & VF_CONFIGURING) { /* must be us, the others are asleep */ - finish_config(1); /* finish the configuration and update it */ - save_config(); /* save configuration to disk */ - } else - error = EINVAL; /* queue up for this one, please */ - return error; - - case VINUM_RELEASECONFIG: /* release the config */ - if (VFLAGS & VF_CONFIGURING) { /* must be us, the others are asleep */ - finish_config(0); /* finish the configuration, don't change it */ - save_config(); /* save configuration to disk */ - } else - error = EINVAL; /* release what config? */ - return error; - - case VINUM_INIT: - ioctl_reply = (struct _ioctl_reply *) data; /* reinstate the address to reply to */ - ioctl_reply->error = 0; - return 0; - - case VINUM_RESETCONFIG: - if (vinum_inactive() && (vinum_conf.opencount < 2)) { /* if we're not active */ - /* Note the open count. We may be called from v, so we'll be open. - * Keep the count so we don't underflow */ - int oc = vinum_conf.opencount; - free_vinum(1); /* clean up everything */ - printf("vinum: CONFIGURATION OBLITERATED\n"); - vinum_conf.opencount = oc; - ioctl_reply = (struct _ioctl_reply *) data; /* reinstate the address to reply to */ - ioctl_reply->error = 0; - return 0; - } - return EBUSY; - - case VINUM_SETSTATE: - setstate((struct vinum_ioctl_msg *) data); /* set an object state */ - return 0; - -#ifdef VINUMDEBUG - case VINUM_MEMINFO: - vinum_meminfo(data); - return 0; - - case VINUM_MALLOCINFO: - return vinum_mallocinfo(data); - - case VINUM_RQINFO: - return vinum_rqinfo(data); -#endif - - case VINUM_LABEL: /* label a volume */ - ioctl_reply->error = write_volume_label(*(int *) data); /* index of the volume to label */ - ioctl_reply->msg[0] = '\0'; /* no message */ - return 0; - - case VINUM_REMOVE: - remove((struct vinum_ioctl_msg *) data); /* remove an object */ - return 0; - - case VINUM_GETFREELIST: /* get a drive free list element */ - index = *(int *) data; /* get the drive index */ - fe = ((int *) data)[1]; /* and the free list element */ - if ((index >= (unsigned) vinum_conf.drives_used) /* plex doesn't exist */ - ||(DRIVE[index].state == drive_unallocated)) - return ENODEV; - if (fe >= DRIVE[index].freelist_entries) /* no such entry */ - return ENOENT; - bcopy(&DRIVE[index].freelist[fe], - data, - sizeof(struct drive_freelist)); - return 0; - - case VINUM_RESETSTATS: - resetstats((struct vinum_ioctl_msg *) data); /* reset object stats */ - return 0; - - /* attach an object to a superordinate object */ - case VINUM_ATTACH: - attachobject((struct vinum_ioctl_msg *) data); - return 0; - - /* detach an object from a superordinate object */ - case VINUM_DETACH: - detachobject((struct vinum_ioctl_msg *) data); - return 0; - - /* rename an object */ - case VINUM_RENAME: - renameobject((struct vinum_rename_msg *) data); - return 0; - - /* replace an object */ - case VINUM_REPLACE: - replaceobject((struct vinum_ioctl_msg *) data); - return 0; - - case VINUM_DAEMON: - vinum_daemon(); /* perform the daemon */ - return 0; - - case VINUM_FINDDAEMON: /* check for presence of daemon */ - return vinum_finddaemon(); - return 0; - - case VINUM_SETDAEMON: /* set daemon flags */ - return vinum_setdaemonopts(*(int *) data); - - case VINUM_GETDAEMON: /* get daemon flags */ - *(int *) data = daemon_options; - return 0; - - default: - /* FALLTHROUGH */ - } - - default: - printf("vinumioctl: invalid ioctl from process %d (%s): %lx\n", - curproc->p_pid, - curproc->p_comm, - cmd); /* XXX */ - return EINVAL; - - case VINUM_DRIVE_TYPE: - case VINUM_PLEX_TYPE: - return EAGAIN; /* try again next week */ - - case VINUM_SD_TYPE: - objno = Sdno(dev); - - switch (cmd) { - case VINUM_INITSD: /* initialize subdisk */ - return initsd(objno); - - default: - return EINVAL; - } - break; - - case VINUM_VOLUME_TYPE: - objno = Volno(dev); - - if ((unsigned) objno >= (unsigned) vinum_conf.volumes_used) /* not a valid volume */ - return ENXIO; - vol = &VOL[objno]; - if (vol->state != volume_up) /* not up, */ - return EIO; /* I/O error */ - - switch (cmd) { - case DIOCGDINFO: /* get disk label */ - get_volume_label(vol, (struct disklabel *) data); - break; - - /* Care! DIOCGPART returns *pointers* to - * the caller, so we need to store this crap as well. - * And yes, we need it. */ - case DIOCGPART: /* get partition information */ - get_volume_label(vol, &vol->label); - ((struct partinfo *) data)->disklab = &vol->label; - ((struct partinfo *) data)->part = &vol->label.d_partitions[0]; - break; - - /* We don't have this stuff on hardware, - * so just pretend to do it so that - * utilities don't get upset. */ - case DIOCWDINFO: /* write partition info */ - case DIOCSDINFO: /* set partition info */ - return 0; /* not a titty */ - - case DIOCWLABEL: /* set or reset label writeable */ - if ((flag & FWRITE) == 0) /* not writeable? */ - return EACCES; /* no, die */ - if (*(int *) data != 0) /* set it? */ - vol->flags |= VF_WLABEL; /* yes */ - else - vol->flags &= ~VF_WLABEL; /* no, reset */ - break; - - default: - return ENOTTY; /* not my kind of ioctl */ - } - break; - } - return 0; /* XXX */ -} - -/* The following four functions check the supplied - * object index and return a pointer to the object - * if it exists. Otherwise they longjump out via - * throw_rude_remark */ -struct drive * -validdrive(int driveno, struct _ioctl_reply *reply) -{ - if ((driveno < vinum_conf.drives_used) - && (DRIVE[driveno].state != drive_unallocated)) - return &DRIVE[driveno]; - strcpy(reply->msg, "No such drive"); - reply->error = ENOENT; - return NULL; -} - -struct sd * -validsd(int sdno, struct _ioctl_reply *reply) -{ - if ((sdno < vinum_conf.subdisks_used) - && (SD[sdno].state != sd_unallocated)) - return &SD[sdno]; - strcpy(reply->msg, "No such subdisk"); - reply->error = ENOENT; - return NULL; -} - -struct plex * -validplex(int plexno, struct _ioctl_reply *reply) -{ - if ((plexno < vinum_conf.plexes_used) - && (PLEX[plexno].state != plex_unallocated)) - return &PLEX[plexno]; - strcpy(reply->msg, "No such plex"); - reply->error = ENOENT; - return NULL; -} - -struct volume * -validvol(int volno, struct _ioctl_reply *reply) -{ - if ((volno < vinum_conf.volumes_used) - && (VOL[volno].state != volume_unallocated)) - return &VOL[volno]; - strcpy(reply->msg, "No such volume"); - reply->error = ENOENT; - return NULL; -} - -/* reset an object's stats */ -void -resetstats(struct vinum_ioctl_msg *msg) -{ - struct _ioctl_reply *reply = (struct _ioctl_reply *) msg; - - switch (msg->type) { - case drive_object: - if (msg->index < vinum_conf.drives_used) { - struct drive *drive = &DRIVE[msg->index]; - if (drive->state != drive_unallocated) { - drive->reads = 0; /* number of reads on this drive */ - drive->writes = 0; /* number of writes on this drive */ - drive->bytes_read = 0; /* number of bytes read */ - drive->bytes_written = 0; /* number of bytes written */ - reply->error = 0; - return; - } - reply->error = EINVAL; - return; - } - case sd_object: - if (msg->index < vinum_conf.subdisks_used) { - struct sd *sd = &SD[msg->index]; - if (sd->state != sd_unallocated) { - sd->reads = 0; /* number of reads on this subdisk */ - sd->writes = 0; /* number of writes on this subdisk */ - sd->bytes_read = 0; /* number of bytes read */ - sd->bytes_written = 0; /* number of bytes written */ - reply->error = 0; - return; - } - reply->error = EINVAL; - return; - } - break; - - case plex_object: - if (msg->index < vinum_conf.plexes_used) { - struct plex *plex = &PLEX[msg->index]; - if (plex->state != plex_unallocated) { - plex->reads = 0; - plex->writes = 0; /* number of writes on this plex */ - plex->bytes_read = 0; /* number of bytes read */ - plex->bytes_written = 0; /* number of bytes written */ - plex->multiblock = 0; /* requests that needed more than one block */ - plex->multistripe = 0; /* requests that needed more than one stripe */ - reply->error = 0; - return; - } - reply->error = EINVAL; - return; - } - break; - - case volume_object: - if (msg->index < vinum_conf.volumes_used) { - struct volume *vol = &VOL[msg->index]; - if (vol->state != volume_unallocated) { - vol->bytes_read = 0; /* number of bytes read */ - vol->bytes_written = 0; /* number of bytes written */ - vol->reads = 0; /* number of reads on this volume */ - vol->writes = 0; /* number of writes on this volume */ - vol->recovered_reads = 0; /* reads recovered from another plex */ - reply->error = 0; - return; - } - reply->error = EINVAL; - return; - } - case invalid_object: /* can't get this */ - reply->error = EINVAL; - return; - } -} - -/* attach an object to a superior object */ -void -attachobject(struct vinum_ioctl_msg *msg) -{ - struct _ioctl_reply *reply = (struct _ioctl_reply *) msg; - int sdno; - struct sd *sd; - struct plex *plex; - struct volume *vol; - - switch (msg->type) { - case drive_object: /* you can't attach a drive to anything */ - case volume_object: /* nor a volume */ - case invalid_object: /* "this can't happen" */ - reply->error = EINVAL; - reply->msg[0] = '\0'; /* vinum(8) doesn't do this */ - return; - - case sd_object: - sd = validsd(msg->index, reply); - if (sd == NULL) /* not a valid subdisk */ - return; - plex = validplex(msg->otherobject, reply); - if (plex) { - if (sd->plexno >= 0) { /* already belong to a plex */ - reply->error = EBUSY; /* no message, the user should check */ - reply->msg[0] = '\0'; - return; - } - sd->plexoffset = msg->offset; /* this is where we want it */ - set_sd_state(sd->sdno, sd_stale, setstate_force); /* make sure it's stale */ - give_sd_to_plex(plex->plexno, sd->sdno); /* and give it to the plex */ - update_sd_config(sd->sdno, 0); - save_config(); - reply->error = 0; - } - if (sd->state == sd_reviving) - reply->error = EAGAIN; /* need to revive it */ - else - reply->error = 0; - break; - - case plex_object: - plex = validplex(msg->index, reply); /* get plex */ - if (plex == NULL) - return; - if (plex->organization != plex_concat) { /* can't attach to striped and raid-5 */ - reply->error = EINVAL; /* no message, the user should check */ - reply->msg[0] = '\0'; - return; - } - vol = validvol(msg->otherobject, reply); /* and volume information */ - if (vol) { - if ((vol->plexes == MAXPLEX) /* we have too many already */ - ||(plex->volno >= 0)) { /* or the plex has an owner */ - reply->error = EINVAL; /* no message, the user should check */ - reply->msg[0] = '\0'; - return; - } - for (sdno = 0; sdno < plex->subdisks; sdno++) { - sd = &SD[plex->sdnos[sdno]]; - - if (sd->state > sd_down) /* real subdisk, vaguely accessible */ - set_sd_state(plex->sdnos[sdno], sd_stale, setstate_force); /* make it stale */ - } - set_plex_state(plex->plexno, plex_up, setstate_none); /* update plex state */ - give_plex_to_volume(msg->otherobject, msg->index); /* and give it to the volume */ - update_plex_config(plex->plexno, 0); - save_config(); - } - } -} - -/* detach an object from a superior object */ -void -detachobject(struct vinum_ioctl_msg *msg) -{ - struct _ioctl_reply *reply = (struct _ioctl_reply *) msg; - struct sd *sd; - struct plex *plex; - struct volume *vol; - int sdno; - int plexno; - - switch (msg->type) { - case drive_object: /* you can't detach a drive from anything */ - case volume_object: /* nor a volume */ - case invalid_object: /* "this can't happen" */ - reply->error = EINVAL; - reply->msg[0] = '\0'; /* vinum(8) doesn't do this */ - return; - - case sd_object: - sd = validsd(msg->index, reply); - if (sd == NULL) - return; - if (sd->plexno < 0) { /* doesn't belong to a plex */ - reply->error = ENOENT; - strcpy(reply->msg, "Subdisk is not attached"); - return; - } else { /* valid plex number */ - plex = &PLEX[sd->plexno]; - if ((!msg->force) /* don't force things */ - &&((plex->state == plex_up) /* and the plex is up */ - ||((plex->state == plex_flaky) && sd->state == sd_up))) { /* or flaky with this sd up */ - reply->error = EBUSY; /* we need this sd */ - reply->msg[0] = '\0'; - return; - } - sd->plexno = -1; /* anonymous sd */ - if (plex->subdisks == 1) { /* this was the only subdisk */ - Free(plex->sdnos); /* free the subdisk array */ - plex->sdnos = NULL; /* and note the fact */ - plex->subdisks_allocated = 0; /* no subdisk space */ - } else { - for (sdno = 0; sdno < plex->subdisks; sdno++) { - if (plex->sdnos[sdno] == msg->index) /* found our subdisk */ - break; - } - if (sdno < (plex->subdisks - 1)) /* not the last one, compact */ - bcopy(&plex->sdnos[sdno + 1], - &plex->sdnos[sdno], - (plex->subdisks - 1 - sdno) * sizeof(int)); - } - plex->subdisks--; - if (!bcmp(plex->name, sd->name, strlen(plex->name))) { /* this subdisk is named after the plex */ - bcopy(sd->name, - &sd->name[3], - min(strlen(sd->name), MAXSDNAME - 3)); - bcopy("ex-", sd->name, 3); - sd->name[MAXSDNAME - 1] = '\0'; - } - update_plex_config(plex->plexno, 0); - if ((plex->organization == plex_striped) /* we've just mutilated our plex, */ - ) - set_plex_state(plex->plexno, - plex_down, - setstate_force | setstate_configuring); - update_sd_config(sd->sdno, 0); - save_config(); - reply->error = 0; - } - return; - - case plex_object: - plex = validplex(msg->index, reply); /* get plex */ - if (plex == NULL) - return; - if (plex->volno >= 0) { - int volno = plex->volno; - - vol = &VOL[volno]; - if ((!msg->force) /* don't force things */ - &&((vol->state == volume_up) /* and the volume is up */ - &&(vol->plexes == 1))) { /* and this is the last plex */ - /* XXX As elsewhere, check whether we will lose - * mapping by removing this plex */ - reply->error = EBUSY; /* we need this plex */ - reply->msg[0] = '\0'; - return; - } - plex->volno = -1; /* anonymous plex */ - for (plexno = 0; plexno < vol->plexes; plexno++) { - if (vol->plex[plexno] == msg->index) /* found our plex */ - break; - } - if (plexno < (vol->plexes - 1)) /* not the last one, compact */ - bcopy(&vol[plexno + 1], &vol[plexno], (vol->plexes - 1 - plexno) * sizeof(int)); - vol->plexes--; - if (!bcmp(vol->name, plex->name, strlen(vol->name))) { /* this plex is named after the volume */ - /* First, check if the subdisks are the same */ - if (msg->recurse) { - int sdno; - - for (sdno = 0; sdno < plex->subdisks; sdno++) { - struct sd *sd = &SD[plex->sdnos[sdno]]; - - if (!bcmp(plex->name, sd->name, strlen(plex->name))) { /* subdisk is named after the plex */ - bcopy(sd->name, &sd->name[3], min(strlen(sd->name), MAXSDNAME - 3)); - bcopy("ex-", sd->name, 3); - sd->name[MAXSDNAME - 1] = '\0'; - } - } - } - bcopy(plex->name, &plex->name[3], min(strlen(plex->name), MAXPLEXNAME - 3)); - bcopy("ex-", plex->name, 3); - plex->name[MAXPLEXNAME - 1] = '\0'; - } - update_plex_config(plex->plexno, 0); - update_volume_config(volno, 0); - save_config(); - reply->error = 0; - } else { - reply->error = ENOENT; - strcpy(reply->msg, "Plex is not attached"); - } - } -} - -void -renameobject(struct vinum_rename_msg *msg) -{ - struct _ioctl_reply *reply = (struct _ioctl_reply *) msg; - struct drive *drive; - struct sd *sd; - struct plex *plex; - struct volume *vol; - - switch (msg->type) { - case drive_object: /* you can't attach a drive to anything */ - if (find_drive(msg->newname, 0) >= 0) { /* we have that name already, */ - reply->error = EEXIST; - reply->msg[0] = '\0'; - return; - } - drive = validdrive(msg->index, reply); - if (drive) { - bcopy(msg->newname, drive->label.name, MAXDRIVENAME); - save_config(); - reply->error = 0; - } - return; - - case sd_object: /* you can't attach a subdisk to anything */ - if (find_subdisk(msg->newname, 0) >= 0) { /* we have that name already, */ - reply->error = EEXIST; - reply->msg[0] = '\0'; - return; - } - sd = validsd(msg->index, reply); - if (sd) { - bcopy(msg->newname, sd->name, MAXSDNAME); - update_sd_config(sd->sdno, 0); - save_config(); - reply->error = 0; - } - return; - - case plex_object: /* you can't attach a plex to anything */ - if (find_plex(msg->newname, 0) >= 0) { /* we have that name already, */ - reply->error = EEXIST; - reply->msg[0] = '\0'; - return; - } - plex = validplex(msg->index, reply); - if (plex) { - bcopy(msg->newname, plex->name, MAXPLEXNAME); - update_plex_config(plex->plexno, 0); - save_config(); - reply->error = 0; - } - return; - - case volume_object: /* you can't attach a volume to anything */ - if (find_volume(msg->newname, 0) >= 0) { /* we have that name already, */ - reply->error = EEXIST; - reply->msg[0] = '\0'; - return; - } - vol = validvol(msg->index, reply); - if (vol) { - bcopy(msg->newname, vol->name, MAXVOLNAME); - update_volume_config(msg->index, 0); - save_config(); - reply->error = 0; - } - return; - - case invalid_object: - reply->error = EINVAL; - reply->msg[0] = '\0'; - } -} - -/* Replace one object with another */ -void -replaceobject(struct vinum_ioctl_msg *msg) -{ - struct _ioctl_reply *reply = (struct _ioctl_reply *) msg; - - reply->error = ENODEV; /* until I know how to do this */ - strcpy(reply->msg, "replace not implemented yet"); -/* save_config (); */ -} diff --git a/sys/dev/vinum/vinumkw.h b/sys/dev/vinum/vinumkw.h deleted file mode 100644 index 25dbced2fc282..0000000000000 --- a/sys/dev/vinum/vinumkw.h +++ /dev/null @@ -1,129 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumkw.h,v 1.11 1999/01/18 03:32:10 grog Exp grog $ - */ - -#ifdef KERNEL -#include "opt_vinum.h" -#endif - -/* Command keywords that vinum knows. These include both user-level - * and kernel-level stuff */ - -/* Our complete vocabulary. The names of the commands are - * the same as the identifier without the kw_ at the beginning - * (i.e. kw_create defines the "create" keyword). Preprocessor - * magic in parser.c does the rest. */ -enum keyword { - kw_create, - kw_modify, - kw_list, - kw_l = kw_list, - kw_ld, /* list drive */ - kw_ls, /* list subdisk */ - kw_lp, /* list plex */ - kw_lv, /* list volume */ - kw_set, - kw_rm, - kw_start, - kw_stop, - kw_makedev, /* make /dev/vinum devices */ - kw_setdaemon, /* set daemon flags */ - kw_getdaemon, /* set daemon flags */ - kw_help, - kw_drive, - kw_sd, - kw_subdisk = kw_sd, - kw_plex, - kw_volume, - kw_vol = kw_volume, - kw_read, - kw_readpol, - kw_org, - kw_name, - kw_concat, - kw_striped, - kw_raid5, - kw_driveoffset, - kw_plexoffset, - kw_len, - kw_length = kw_len, - kw_state, - kw_setupstate, - kw_d, /* flag names */ - kw_f, - kw_r, - kw_s, - kw_v, - kw_round, /* round robin */ - kw_prefer, /* prefer plex */ - kw_device, - kw_init, - kw_label, - kw_resetconfig, - kw_writethrough, - kw_writeback, - kw_raw, - kw_resetstats, - kw_attach, - kw_detach, - kw_rename, - kw_printconfig, - kw_replace, - kw_detached, -#ifdef VINUMDEBUG - kw_debug, /* go into debugger */ -#endif - kw_info, - kw_quit, - kw_invalid_keyword = -1 -}; - -struct _keywords { - char *name; - enum keyword keyword; -}; - -struct keywordset { - int size; - struct _keywords *k; -}; - -extern struct _keywords keywords[]; -extern struct _keywords flag_keywords[]; - -extern struct keywordset keyword_set; -extern struct keywordset flag_set; diff --git a/sys/dev/vinum/vinumlock.c b/sys/dev/vinum/vinumlock.c deleted file mode 100644 index b367dc57a50fe..0000000000000 --- a/sys/dev/vinum/vinumlock.c +++ /dev/null @@ -1,171 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumlock.c,v 1.8 1999/01/14 02:52:13 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> - -/* Lock routines. Currently, we lock either an individual volume - * or the global configuration. I don't think tsleep and - * wakeup are SMP safe. FIXME XXX */ - -/* Lock a drive, wait if it's in use */ -int -lockdrive(struct drive *drive) -{ - int error; - - /* XXX get rid of drive->flags |= VF_LOCKING; */ - while ((drive->flags & VF_LOCKED) != 0) { - /* There are problems sleeping on a unique identifier, - * since the drive structure can move, and the unlock - * function can be called after killing the drive. - * Solve this by waiting on this function; the number - * of conflicts is negligible */ - if ((error = tsleep(&lockdrive, - PRIBIO | PCATCH, - "vindrv", - 0)) != 0) - return error; - } - drive->flags |= VF_LOCKED; - drive->pid = curproc->p_pid; /* it's a panic error if curproc is null */ - return 0; -} - -/* Unlock a drive and let the next one at it */ -void -unlockdrive(struct drive *drive) -{ - drive->flags &= ~VF_LOCKED; - /* we don't reset pid: it's of hysterical interest */ - wakeup(&lockdrive); -} - -/* Lock a volume, wait if it's in use */ -int -lockvol(struct volume *vol) -{ - int error; - - while ((vol->flags & VF_LOCKED) != 0) { - vol->flags |= VF_LOCKING; - /* It would seem to make more sense to sleep on - * the address 'vol'. Unfortuntaly we can't - * guarantee that this address won't change due to - * table expansion. The address we choose won't change. */ - if ((error = tsleep(&vinum_conf.volume + vol->devno, - PRIBIO | PCATCH, - "volock", - 0)) != 0) - return error; - } - vol->flags |= VF_LOCKED; - return 0; -} - -/* Unlock a volume and let the next one at it */ -void -unlockvol(struct volume *vol) -{ - vol->flags &= ~VF_LOCKED; - if ((vol->flags & VF_LOCKING) != 0) { - vol->flags &= ~VF_LOCKING; - wakeup(&vinum_conf.volume + vol->devno); - } -} - -/* Lock a plex, wait if it's in use */ -int -lockplex(struct plex *plex) -{ - int error; - - while ((plex->flags & VF_LOCKED) != 0) { - plex->flags |= VF_LOCKING; - /* It would seem to make more sense to sleep on - * the address 'plex'. Unfortunately we can't - * guarantee that this address won't change due to - * table expansion. The address we choose won't change. */ - if ((error = tsleep(&vinum_conf.plex + plex->sdnos[0], - PRIBIO | PCATCH, - "plexlk", - 0)) != 0) - return error; - } - plex->flags |= VF_LOCKED; - return 0; -} - -/* Unlock a plex and let the next one at it */ -void -unlockplex(struct plex *plex) -{ - plex->flags &= ~VF_LOCKED; - if ((plex->flags & VF_LOCKING) != 0) { - plex->flags &= ~VF_LOCKING; - wakeup(&vinum_conf.plex + plex->plexno); - } -} - - -/* Get a lock for the global config, wait if it's not available */ -int -lock_config(void) -{ - int error; - - while ((vinum_conf.flags & VF_LOCKED) != 0) { - vinum_conf.flags |= VF_LOCKING; - if ((error = tsleep(&vinum_conf, PRIBIO | PCATCH, "vincfg", 0)) != 0) - return error; - } - vinum_conf.flags |= VF_LOCKED; - return 0; -} - -/* Unlock and wake up any waiters */ -void -unlock_config(void) -{ - vinum_conf.flags &= ~VF_LOCKED; - if ((vinum_conf.flags & VF_LOCKING) != 0) { - vinum_conf.flags &= ~VF_LOCKING; - wakeup(&vinum_conf); - } -} diff --git a/sys/dev/vinum/vinummemory.c b/sys/dev/vinum/vinummemory.c deleted file mode 100644 index c06bd9abd4db8..0000000000000 --- a/sys/dev/vinum/vinummemory.c +++ /dev/null @@ -1,198 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinummemory.c,v 1.19 1998/12/30 06:22:26 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> - -extern jmp_buf command_fail; /* return on a failed command */ - -#ifdef VINUMDEBUG -#include <dev/vinum/request.h> -extern struct rqinfo rqinfo[]; -extern struct rqinfo *rqip; -#endif - -/* Why aren't these declared anywhere? XXX */ -int setjmp(jmp_buf); -void longjmp(jmp_buf, int); - -void freedatabuf(struct mc *me); -caddr_t allocdatabuf(struct mc *me); - -void -expand_table(void **table, int oldsize, int newsize) -{ - if (newsize > oldsize) { - int *temp; - - temp = (int *) Malloc(newsize); /* allocate a new table */ - CHECKALLOC(temp, "vinum: Can't expand table\n"); - if (*table != NULL) { /* already something there, */ - bcopy((char *) *table, (char *) temp, oldsize); /* copy it to the old table */ - Free(*table); - } - *table = temp; - } -} - -#if VINUMDEBUG /* XXX debug */ -#define MALLOCENTRIES 16384 -int malloccount = 0; -int highwater = 0; /* highest index ever allocated */ -static struct mc malloced[MALLOCENTRIES]; - -static total_malloced; - -caddr_t -MMalloc(int size, char *file, int line) -{ - caddr_t result; - int i; - static int seq = 0; - int s; - struct mc me; /* information to pass to allocdatabuf */ - - if (malloccount >= MALLOCENTRIES) { /* too many */ - printf("vinum: can't allocate table space to trace memory allocation"); - return 0; /* can't continue */ - } - result = malloc(size, M_DEVBUF, M_WAITOK); /* use malloc for smaller and irregular stuff */ - if (result == NULL) - printf("vinum: can't allocate %d bytes from %s:%d\n", size, file, line); - else { - me.flags = 0; /* allocation via malloc */ - s = splhigh(); - for (i = 0; i < malloccount; i++) { - if (((result + size) > malloced[i].address) - && (result < malloced[i].address + malloced[i].size)) /* overlap */ - Debugger("Malloc overlap"); - } - if (result) { - char *f = rindex(file, '/'); /* chop off dirname if present */ - - if (f == NULL) - f = file; - else - f++; /* skip the / */ - i = malloccount++; - total_malloced += size; - malloced[i].address = result; - malloced[i].size = size; - malloced[i].line = line; - malloced[i].seq = seq++; - malloced[i].flags = me.flags; - malloced[i].databuf = me.databuf; /* only used with kva alloc */ - bcopy(f, malloced[i].file, min(strlen(f) + 1, 16)); - } - if (malloccount > highwater) - highwater = malloccount; - splx(s); - } - return result; -} - -void -FFree(void *mem, char *file, int line) -{ - int i; - int s; - - s = splhigh(); - for (i = 0; i < malloccount; i++) { - if ((caddr_t) mem == malloced[i].address) { /* found it */ - bzero(mem, malloced[i].size); /* XXX */ - free(mem, M_DEVBUF); - malloccount--; - total_malloced -= malloced[i].size; - if (i < malloccount) /* more coming after */ - bcopy(&malloced[i + 1], &malloced[i], (malloccount - i) * sizeof(struct mc)); - splx(s); - return; - } - } - splx(s); - printf("Freeing unallocated data at 0x%08x from %s, line %d\n", (int) mem, file, line); - Debugger("Free"); -} - -void -vinum_meminfo(caddr_t data) -{ - struct meminfo *m = (struct meminfo *) data; - - m->mallocs = malloccount; - m->total_malloced = total_malloced; - m->malloced = malloced; - m->highwater = highwater; -} - -int -vinum_mallocinfo(caddr_t data) -{ - struct mc *m = (struct mc *) data; - unsigned int ent = *(int *) data; /* 1st word is index */ - - if (ent >= malloccount) - return ENOENT; - m->address = malloced[ent].address; - m->size = malloced[ent].size; - m->line = malloced[ent].line; - m->seq = malloced[ent].seq; - bcopy(malloced[ent].file, m->file, 16); - return 0; -} - -/* return the nth request trace buffer entry. This - * is indexed back from the current entry (which - * has index 0) */ -int -vinum_rqinfo(caddr_t data) -{ - struct rqinfo *rq = (struct rqinfo *) data; - int ent = *(int *) data; /* 1st word is index */ - int lastent = rqip - rqinfo; /* entry number of current entry */ - - if (ent >= RQINFO_SIZE) /* out of the table */ - return ENOENT; - if ((ent = lastent - ent - 1) < 0) - ent += RQINFO_SIZE; /* roll over backwards */ - bcopy(&rqinfo[ent], rq, sizeof(struct rqinfo)); - return 0; -} -#endif diff --git a/sys/dev/vinum/vinumparser.c b/sys/dev/vinum/vinumparser.c deleted file mode 100644 index 7812f64bbd8b3..0000000000000 --- a/sys/dev/vinum/vinumparser.c +++ /dev/null @@ -1,216 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumparser.c,v 1.14 1999/01/18 03:30:07 grog Exp grog $ - */ - -/* This file contains the parser for the configuration routines. It's used - * both in the kernel and in the user interface program, thus the separate file. */ - -/* Go through a text and split up into text tokens. These are either non-blank - * sequences, or any sequence (except \0) enclosed in ' or ". Embedded ' or - * " characters may be escaped by \, which otherwise has no special meaning. - * - * Delimit by following with a \0, and return pointers to the starts at token []. - * Return the number of tokens found as the return value. - * - * This method has the restriction that a closing " or ' must be followed by - * grey space. - * - * Error conditions are end of line before end of quote, or no space after - * a closing quote. In this case, tokenize() returns -1. */ - -#ifdef KERNEL -#include "opt_vinum.h" -#endif - -#include <sys/param.h> -#ifdef KERNEL -#undef KERNEL /* XXX */ -#define REALLYKERNEL -#include "opt_vinum.h" -#else -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#endif -/* All this mess for a single struct definition */ -#include <sys/uio.h> -#include <sys/namei.h> -#include <sys/disklabel.h> -#include <sys/mount.h> -#include <sys/device.h> -#include <sys/disk.h> -#include <sys/buf.h> - -#include <dev/vinum/vinumvar.h> -#include <dev/vinum/vinumkw.h> -#include <dev/vinum/vinumio.h> -#include <dev/vinum/vinumext.h> - -#ifdef REALLYKERNEL -#define isspace(c) ((c == ' ') || (c == '\t')) /* check for white space */ -#else /* get it from the headers */ -#include <ctype.h> -#endif - -/* enum keyword is defined in vinumvar.h */ - -#define keypair(x) { #x, kw_##x } /* create pair "foo", kw_foo */ -#define flagkeypair(x) { "-"#x, kw_##x } /* create pair "-foo", kw_foo */ -#define KEYWORDSET(x) {sizeof (x) / sizeof (struct _keywords), x} - -/* Normal keywords. These are all the words that vinum knows. */ -struct _keywords keywords[] = -{keypair(drive), - keypair(sd), - keypair(subdisk), - keypair(plex), - keypair(volume), - keypair(vol), - keypair(setupstate), - keypair(readpol), - keypair(org), - keypair(name), - keypair(writethrough), - keypair(writeback), - keypair(raw), - keypair(device), - keypair(concat), - keypair(raid5), - keypair(striped), - keypair(plexoffset), - keypair(driveoffset), - keypair(length), - keypair(len), - keypair(state), - keypair(round), - keypair(prefer), - keypair(rename), - keypair(detached), -#ifndef KERNEL /* for vinum(8) only */ -#ifdef VINUMDEBUG - keypair(debug), -#endif - keypair(attach), - keypair(detach), - keypair(printconfig), - keypair(replace), - keypair(create), - keypair(read), - keypair(modify), - keypair(list), - keypair(l), - keypair(ld), - keypair(ls), - keypair(lp), - keypair(lv), - keypair(info), - keypair(set), - keypair(rm), - keypair(init), - keypair(label), - keypair(resetconfig), - keypair(start), - keypair(stop), - keypair(makedev), - keypair(help), - keypair(quit), - keypair(setdaemon), - keypair(getdaemon), - keypair(resetstats) -#endif -}; -struct keywordset keyword_set = KEYWORDSET(keywords); - -#ifndef KERNEL -struct _keywords flag_keywords[] = -{flagkeypair(f), - flagkeypair(d), - flagkeypair(v), - flagkeypair(s), - flagkeypair(r) -}; -struct keywordset flag_set = KEYWORDSET(flag_keywords); - -#endif - -int -tokenize(char *cptr, char *token[]) -{ - char delim; /* delimiter for searching for the partner */ - int tokennr; /* index of this token */ - tokennr = 0; /* none found yet */ - - for (;;) { - while (isspace(*cptr)) - cptr++; /* skip initial white space */ - if ((*cptr == '\0') || (*cptr == '\n') || (*cptr == '#')) /* end of line */ - return tokennr; /* return number of tokens found */ - delim = *cptr; - token[tokennr] = cptr; /* point to it */ - tokennr++; /* one more */ - /* XXX this is broken. It leaves superfluous \\ characters in the text */ - if ((delim == '\'') || (delim == '"')) { /* delimitered */ - for (;;) { - cptr++; - if ((*cptr == delim) && (cptr[-1] != '\\')) { /* found the partner */ - cptr++; /* move on past */ - if (!isspace(*cptr)) /* error, no space after closing quote */ - return -1; - *cptr++ = '\0'; /* delimit */ - } else if ((*cptr == '\0') || (*cptr == '\n')) /* end of line */ - return -1; - } - } else { /* not quoted */ - while ((*cptr != '\0') && (!isspace(*cptr)) && (*cptr != '\n')) - cptr++; - if (*cptr != '\0') /* not end of the line, */ - *cptr++ = '\0'; /* delimit and move to the next */ - } - } -} - -/* Find a keyword and return an index */ -enum keyword -get_keyword(char *name, struct keywordset *keywordset) -{ - int i; - struct _keywords *keywords = keywordset->k; /* point to the keywords */ - for (i = 0; i < keywordset->size; i++) - if (!strcmp(name, keywords[i].name)) - return (enum keyword) keywords[i].keyword; - return kw_invalid_keyword; -} diff --git a/sys/dev/vinum/vinumrequest.c b/sys/dev/vinum/vinumrequest.c deleted file mode 100644 index 91f6e15dd9e38..0000000000000 --- a/sys/dev/vinum/vinumrequest.c +++ /dev/null @@ -1,925 +0,0 @@ -/* XXX to do: - - * Decide where we need splbio () - */ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumrequest.c,v 1.22 1999/01/17 06:15:46 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <dev/vinum/request.h> -#include <miscfs/specfs/specdev.h> -#include <sys/resourcevar.h> - -enum requeststatus bre(struct request *rq, - int plexno, - daddr_t * diskstart, - daddr_t diskend); -enum requeststatus bre5(struct request *rq, - int plexno, - daddr_t * diskstart, - daddr_t diskend); -enum requeststatus build_read_request(struct request *rq, int volplexno); -enum requeststatus build_write_request(struct request *rq); -enum requeststatus build_rq_buffer(struct rqelement *rqe, struct plex *plex); -void freerq(struct request *rq); -void free_rqg(struct rqgroup *rqg); -int find_alternate_sd(struct request *rq); -int check_range_covered(struct request *); -void complete_rqe(struct buf *bp); -void complete_raid5_write(struct rqelement *); -int abortrequest(struct request *rq, int error); -void sdio_done(struct buf *bp); -int vinum_bounds_check(struct buf *bp, struct volume *vol); -caddr_t allocdatabuf(struct rqelement *rqe); -void freedatabuf(struct rqelement *rqe); - -#ifdef VINUMDEBUG -struct rqinfo rqinfo[RQINFO_SIZE]; -struct rqinfo *rqip = rqinfo; - -void -logrq(enum rqinfo_type type, union rqinfou info, struct buf *ubp) -{ - int s = splhigh(); - - microtime(&rqip->timestamp); /* when did this happen? */ - rqip->type = type; - rqip->bp = ubp; /* user buffer */ - switch (type) { - case loginfo_user_bp: - case loginfo_user_bpl: - bcopy(info.bp, &rqip->info.b, sizeof(struct buf)); - break; - - case loginfo_iodone: - case loginfo_rqe: - case loginfo_raid5_data: - case loginfo_raid5_parity: - bcopy(info.rqe, &rqip->info.rqe, sizeof(struct rqelement)); - break; - - case loginfo_unused: - break; - } - rqip++; - if (rqip >= &rqinfo[RQINFO_SIZE]) /* wrap around */ - rqip = rqinfo; - splx(s); -} - -#endif - -void -vinumstrategy(struct buf *bp) -{ - int volno; - struct volume *vol = NULL; - struct devcode *device = (struct devcode *) &bp->b_dev; /* decode device number */ - - switch (device->type) { - case VINUM_SD_TYPE: - case VINUM_RAWSD_TYPE: - sdio(bp); - return; - - /* In fact, vinum doesn't handle drives: they're - * handled directly by the disk drivers */ - case VINUM_DRIVE_TYPE: - default: - bp->b_error = EIO; /* I/O error */ - bp->b_flags |= B_ERROR; - biodone(bp); - return; - - case VINUM_VOLUME_TYPE: /* volume I/O */ - volno = Volno(bp->b_dev); - vol = &VOL[volno]; - if (vol->state != volume_up) { /* can't access this volume */ - bp->b_error = EIO; /* I/O error */ - bp->b_flags |= B_ERROR; - biodone(bp); - return; - } - if (vinum_bounds_check(bp, vol) <= 0) { /* don't like them bounds */ - biodone(bp); /* have nothing to do with this */ - return; - } - /* FALLTHROUGH */ - /* Plex I/O is pretty much the same as volume I/O - * for a single plex. Indicate this by passing a NULL - * pointer (set above) for the volume */ - case VINUM_PLEX_TYPE: - case VINUM_RAWPLEX_TYPE: - bp->b_resid = bp->b_bcount; /* transfer everything */ - vinumstart(bp, 0); - return; - } -} - -/* Start a transfer. Return -1 on error, - * 0 if OK, 1 if we need to retry. - * Parameter reviveok is set when doing - * transfers for revives: it allows transfers to - * be started immediately when a revive is in - * progress. During revive, normal transfers - * are queued if they share address space with - * a currently active revive operation. */ -int -vinumstart(struct buf *bp, int reviveok) -{ - int plexno; - int maxplex; /* maximum number of plexes to handle */ - struct volume *vol; - struct request *rq; /* build up our request here */ - enum requeststatus status; - -#if VINUMDEBUG - if (debug & DEBUG_LASTREQS) - logrq(loginfo_user_bp, bp, bp); -#endif - - /* XXX In these routines, we're assuming that - * we will always be called with bp->b_bcount - * which is a multiple of the sector size. This - * is a reasonable assumption, since we are only - * called from system routines. Should we check - * anyway? */ - - if ((bp->b_bcount % DEV_BSIZE) != 0) { /* bad length */ - bp->b_error = EINVAL; /* invalid size */ - bp->b_flags |= B_ERROR; - biodone(bp); - return -1; - } - rq = (struct request *) Malloc(sizeof(struct request)); /* allocate a request struct */ - if (rq == NULL) { /* can't do it */ - bp->b_error = ENOMEM; /* can't get memory */ - bp->b_flags |= B_ERROR; - biodone(bp); - return -1; - } - bzero(rq, sizeof(struct request)); - - /* Note the volume ID. This can be NULL, which - * the request building functions use as an - * indication for single plex I/O */ - rq->bp = bp; /* and the user buffer struct */ - - if (DEVTYPE(bp->b_dev) == VINUM_VOLUME_TYPE) { /* it's a volume, */ - rq->volplex.volno = Volno(bp->b_dev); /* get the volume number */ - vol = &VOL[rq->volplex.volno]; /* and point to it */ - vol->active++; /* one more active request */ - maxplex = vol->plexes; /* consider all its plexes */ - } else { - vol = NULL; /* no volume */ - rq->volplex.plexno = Plexno(bp->b_dev); /* point to the plex */ - rq->isplex = 1; /* note that it's a plex */ - maxplex = 1; /* just the one plex */ - } - - if (bp->b_flags & B_READ) { - /* This is a read request. Decide - * which plex to read from. - * - * There's a potential race condition here, - * since we're not locked, and we could end - * up multiply incrementing the round-robin - * counter. This doesn't have any serious - * effects, however. */ - if (vol != NULL) { - vol->reads++; - vol->bytes_read += bp->b_bcount; - plexno = vol->preferred_plex; /* get the plex to use */ - if (plexno < 0) { /* round robin */ - plexno = vol->last_plex_read; - vol->last_plex_read++; - if (vol->last_plex_read == vol->plexes) /* got the the end? */ - vol->last_plex_read = 0; /* wrap around */ - } - status = build_read_request(rq, plexno); /* build a request */ - } else { - daddr_t diskaddr = bp->b_blkno; /* start offset of transfer */ - status = bre(rq, /* build a request list */ - rq->volplex.plexno, - &diskaddr, - diskaddr + (bp->b_bcount / DEV_BSIZE)); - } - - if ((status > REQUEST_RECOVERED) /* can't satisfy it */ - ||(bp->b_flags & B_DONE)) { /* XXX shouldn't get this without bad status */ - if (status == REQUEST_DOWN) { /* not enough subdisks */ - bp->b_error = EIO; /* I/O error */ - bp->b_flags |= B_ERROR; - } - biodone(bp); - freerq(rq); - return -1; - } { /* XXX */ - int result; - int s = splhigh(); - result = launch_requests(rq, reviveok); /* now start the requests if we can */ - splx(s); - return result; - } - } else - /* This is a write operation. We write to all - * plexes. If this is a RAID 5 plex, we must also - * update the parity stripe. */ - { - if (vol != NULL) { - vol->writes++; - vol->bytes_written += bp->b_bcount; - status = build_write_request(rq); /* Not all the subdisks are up */ - } else { /* plex I/O */ - daddr_t diskstart; - - diskstart = bp->b_blkno; /* start offset of transfer */ - status = bre(rq, - Plexno(bp->b_dev), - &diskstart, - bp->b_blkno + (bp->b_bcount / DEV_BSIZE)); /* build requests for the plex */ - } - if ((status > REQUEST_RECOVERED) /* can't satisfy it */ - ||(bp->b_flags & B_DONE)) { /* XXX shouldn't get this without bad status */ - if (status == REQUEST_DOWN) { /* not enough subdisks */ - bp->b_error = EIO; /* I/O error */ - bp->b_flags |= B_ERROR; - } - if ((bp->b_flags & B_DONE) == 0) - biodone(bp); - freerq(rq); - return -1; - } - return launch_requests(rq, reviveok); /* now start the requests if we can */ - } -} - -/* Call the low-level strategy routines to - * perform the requests in a struct request */ -int -launch_requests(struct request *rq, int reviveok) -{ - struct rqgroup *rqg; - int rqno; /* loop index */ - struct rqelement *rqe; /* current element */ - int s; - - /* First find out whether we're reviving, and the - * request contains a conflict. If so, we hang - * the request off plex->waitlist of the first - * plex we find which is reviving */ - if ((rq->flags & XFR_REVIVECONFLICT) /* possible revive conflict */ - &&(!reviveok)) { /* and we don't want to do it now, */ - struct sd *sd; - struct request *waitlist; /* point to the waitlist */ - - sd = &SD[rq->sdno]; - if (sd->waitlist != NULL) { /* something there already, */ - waitlist = sd->waitlist; - while (waitlist->next != NULL) /* find the end */ - waitlist = waitlist->next; - waitlist->next = rq; /* hook our request there */ - } else - sd->waitlist = rq; /* hook our request at the front */ - -#if VINUMDEBUG - if (debug & DEBUG_REVIVECONFLICT) - printf("Revive conflict sd %d: %x\n%s dev 0x%x, offset 0x%x, length %ld\n", - rq->sdno, - (u_int) rq, - rq->bp->b_flags & B_READ ? "Read" : "Write", - rq->bp->b_dev, - rq->bp->b_blkno, - rq->bp->b_bcount); /* XXX */ -#endif - return 0; /* and get out of here */ - } - rq->active = 0; /* nothing yet */ - /* XXX This is probably due to a bug */ - if (rq->rqg == NULL) { /* no request */ - printf("vinum: null rqg"); - abortrequest(rq, EINVAL); - return -1; - } -#if VINUMDEBUG - if (debug & DEBUG_ADDRESSES) - printf("Request: %x\n%s dev 0x%x, offset 0x%x, length %ld\n", - (u_int) rq, - rq->bp->b_flags & B_READ ? "Read" : "Write", - rq->bp->b_dev, - rq->bp->b_blkno, - rq->bp->b_bcount); /* XXX */ - vinum_conf.lastrq = (int) rq; - vinum_conf.lastbuf = rq->bp; - if (debug & DEBUG_LASTREQS) - logrq(loginfo_user_bpl, rq->bp, rq->bp); -#endif - for (rqg = rq->rqg; rqg != NULL; rqg = rqg->next) { /* through the whole request chain */ - rqg->active = rqg->count; /* they're all active */ - rq->active++; /* one more active request group */ - for (rqno = 0; rqno < rqg->count; rqno++) { - rqe = &rqg->rqe[rqno]; - if (rqe->flags & XFR_BAD_SUBDISK) /* this subdisk is bad, */ - rqg->active--; /* one less active request */ - else { - if ((rqe->b.b_flags & B_READ) == 0) - rqe->b.b_vp->v_numoutput++; /* one more output going */ - rqe->b.b_flags |= B_ORDERED; /* XXX chase SCSI driver */ -#if VINUMDEBUG - if (debug & DEBUG_ADDRESSES) - printf(" %s dev 0x%x, sd %d, offset 0x%x, devoffset 0x%x, length %ld\n", - rqe->b.b_flags & B_READ ? "Read" : "Write", - rqe->b.b_dev, - rqe->sdno, - (u_int) (rqe->b.b_blkno - SD[rqe->sdno].driveoffset), - rqe->b.b_blkno, - rqe->b.b_bcount); /* XXX */ - if (debug & DEBUG_NUMOUTPUT) - printf(" vinumstart sd %d numoutput %ld\n", - rqe->sdno, - rqe->b.b_vp->v_numoutput); - if (debug & DEBUG_LASTREQS) - logrq(loginfo_rqe, rqe, rq->bp); -#endif - /* fire off the request */ - s = splbio(); - (*bdevsw[major(rqe->b.b_dev)]->d_strategy) (&rqe->b); - splx(s); - } - /* XXX Do we need caching? Think about this more */ - } - } - return 0; -} - -/* define the low-level requests needed to perform a - * high-level I/O operation for a specific plex 'plexno'. - * - * Return 0 if all subdisks involved in the request are up, 1 if some - * subdisks are not up, and -1 if the request is at least partially - * outside the bounds of the subdisks. - * - * Modify the pointer *diskstart to point to the end address. On - * read, return on the first bad subdisk, so that the caller - * (build_read_request) can try alternatives. - * - * On entry to this routine, the rqg structures are not assigned. The - * assignment is performed by expandrq(). Strictly speaking, the - * elements rqe->sdno of all entries should be set to -1, since 0 - * (from bzero) is a valid subdisk number. We avoid this problem by - * initializing the ones we use, and not looking at the others (index - * >= rqg->requests). - */ -enum requeststatus -bre(struct request *rq, - int plexno, - daddr_t * diskaddr, - daddr_t diskend) -{ - int sdno; - struct sd *sd; - struct rqgroup *rqg; - struct buf *bp; /* user's bp */ - struct plex *plex; - enum requeststatus status; /* return value */ - daddr_t plexoffset; /* offset of transfer in plex */ - daddr_t stripebase; /* base address of stripe (1st subdisk) */ - daddr_t stripeoffset; /* offset in stripe */ - daddr_t blockoffset; /* offset in stripe on subdisk */ - struct rqelement *rqe; /* point to this request information */ - daddr_t diskstart = *diskaddr; /* remember where this transfer starts */ - - bp = rq->bp; /* buffer pointer */ - status = REQUEST_OK; /* return value: OK until proven otherwise */ - plex = &PLEX[plexno]; /* point to the plex */ - - switch (plex->organization) { - case plex_concat: - for (sdno = 0; sdno < plex->subdisks; sdno++) { - sd = &SD[plex->sdnos[sdno]]; - if ((*diskaddr < (sd->plexoffset + sd->sectors)) /* The request starts before the end of this */ - &&(diskend > sd->plexoffset)) { /* subdisk and ends after the start of this sd */ - if (sd->state != sd_up) { - enum requeststatus s; - - s = checksdstate(sd, rq, *diskaddr, diskend); /* do we need to change state? */ - if (s) - return s; /* XXX get this right */ - } - rqg = allocrqg(rq, 1); /* space for the request */ - if (rqg == NULL) { /* malloc failed */ - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - biodone(bp); - return REQUEST_ENOMEM; - } - rqg->plexno = plexno; - - rqe = &rqg->rqe[0]; /* point to the element */ - rqe->rqg = rqg; /* group */ - rqe->sdno = sd->sdno; /* put in the subdisk number */ - plexoffset = max(sd->plexoffset, *diskaddr); /* start offset in plex */ - rqe->sdoffset = plexoffset - sd->plexoffset; /* start offset in subdisk */ - rqe->useroffset = plexoffset - diskstart; /* start offset in user buffer */ - rqe->dataoffset = 0; - rqe->datalen = min(diskend - *diskaddr, /* number of sectors to transfer in this sd */ - sd->sectors - rqe->sdoffset); - rqe->groupoffset = 0; /* no groups for concatenated plexes */ - rqe->grouplen = 0; - rqe->buflen = rqe->datalen; /* buffer length is data buffer length */ - rqe->flags = 0; - rqe->driveno = sd->driveno; - *diskaddr += rqe->datalen; /* bump the address */ - if (build_rq_buffer(rqe, plex)) { /* build the buffer */ - deallocrqg(rqg); - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - biodone(bp); - return REQUEST_ENOMEM; /* can't do it */ - } - } - if (*diskaddr > diskend) /* we're finished, */ - break; /* get out of here */ - } - break; - - case plex_striped: - { - while (*diskaddr < diskend) { /* until we get it all sorted out */ - /* The offset of the start address from - * the start of the stripe */ - stripeoffset = *diskaddr % (plex->stripesize * plex->subdisks); - - /* The plex-relative address of the - * start of the stripe */ - stripebase = *diskaddr - stripeoffset; - - /* The number of the subdisk in which - * the start is located */ - sdno = stripeoffset / plex->stripesize; - - /* The offset from the beginning of the stripe - * on this subdisk */ - blockoffset = stripeoffset % plex->stripesize; - - sd = &SD[plex->sdnos[sdno]]; /* the subdisk in question */ - if (sd->state != sd_up) { - enum requeststatus s; - - s = checksdstate(sd, rq, *diskaddr, diskend); /* do we need to change state? */ - if (s) /* give up? */ - return s; /* yup */ - } - rqg = allocrqg(rq, 1); /* space for the request */ - if (rqg == NULL) { /* malloc failed */ - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - biodone(bp); - return REQUEST_ENOMEM; - } - rqg->plexno = plexno; - - rqe = &rqg->rqe[0]; /* point to the element */ - rqe->rqg = rqg; - rqe->sdoffset = stripebase / plex->subdisks + blockoffset; /* start offset in this subdisk */ - rqe->useroffset = *diskaddr - diskstart; /* The offset of the start in the user buffer */ - rqe->dataoffset = 0; - rqe->datalen = min(diskend - *diskaddr, /* the amount remaining to transfer */ - plex->stripesize - blockoffset); /* and the amount left in this stripe */ - rqe->groupoffset = 0; /* no groups for striped plexes */ - rqe->grouplen = 0; - rqe->buflen = rqe->datalen; /* buffer length is data buffer length */ - rqe->flags = 0; - rqe->sdno = sd->sdno; /* put in the subdisk number */ - rqe->driveno = sd->driveno; - - if (rqe->sdoffset >= sd->sectors) { /* starts beyond the end of the subdisk? */ - deallocrqg(rqg); - return REQUEST_EOF; - } else if (rqe->sdoffset + rqe->datalen > sd->sectors) /* ends beyond the end of the subdisk? */ - rqe->datalen = sd->sectors - rqe->sdoffset; /* yes, truncate */ - - if (build_rq_buffer(rqe, plex)) { /* build the buffer */ - deallocrqg(rqg); - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - biodone(bp); - return REQUEST_ENOMEM; /* can't do it */ - } - *diskaddr += rqe->datalen; /* look at the remainder */ - if (*diskaddr < diskend) { /* didn't finish the request on this stripe */ - plex->multiblock++; /* count another one */ - if (sdno == plex->subdisks - 1) /* last subdisk, */ - plex->multistripe++; /* another stripe as well */ - } - } - } - break; - - - default: - printf("vinum: invalid plex type in bre"); - } - - return status; -} - -/* Build up a request structure for reading volumes. - * This function is not needed for plex reads, since there's - * no recovery if a plex read can't be satisified. */ -enum requeststatus -build_read_request(struct request *rq, /* request */ - int plexindex) -{ /* index in the volume's plex table */ - struct buf *bp; - daddr_t startaddr; /* offset of previous part of transfer */ - daddr_t diskaddr; /* offset of current part of transfer */ - daddr_t diskend; /* and end offset of transfer */ - int plexno; /* plex index in vinum_conf */ - struct rqgroup *rqg; /* point to the request we're working on */ - struct volume *vol; /* volume in question */ - off_t oldstart; /* note where we started */ - int recovered = 0; /* set if we recover a read */ - enum requeststatus status = REQUEST_OK; - - bp = rq->bp; /* buffer pointer */ - diskaddr = bp->b_blkno; /* start offset of transfer */ - diskend = diskaddr + (bp->b_bcount / DEV_BSIZE); /* and end offset of transfer */ - rqg = &rq->rqg[plexindex]; /* plex request */ - vol = &VOL[rq->volplex.volno]; /* point to volume */ - - while (diskaddr < diskend) { /* build up request components */ - startaddr = diskaddr; - status = bre(rq, vol->plex[plexindex], &diskaddr, diskend); /* build up a request */ - switch (status) { - case REQUEST_OK: - continue; - - case REQUEST_RECOVERED: - recovered = 1; - break; - - case REQUEST_EOF: - case REQUEST_ENOMEM: - return status; - - /* if we get here, we have either had a failure or - * a RAID 5 recovery. We don't want to use the - * recovery, because it's expensive, so first we - * check if we have alternatives */ - case REQUEST_DOWN: /* can't access the plex */ - if (vol != NULL) { /* and this is volume I/O */ - /* Try to satisfy the request - * from another plex */ - for (plexno = 0; plexno < vol->plexes; plexno++) { - diskaddr = startaddr; /* start at the beginning again */ - oldstart = startaddr; /* and note where that was */ - if (plexno != plexindex) { /* don't try this plex again */ - bre(rq, vol->plex[plexno], &diskaddr, diskend); /* try a request */ - if (diskaddr > oldstart) { /* we satisfied another part */ - recovered = 1; /* we recovered from the problem */ - status = REQUEST_OK; /* don't complain about it */ - break; - } - } - if (plexno == (vol->plexes - 1)) /* couldn't satisfy the request */ - return REQUEST_DOWN; /* failed */ - } - } else - return REQUEST_DOWN; /* bad luck */ - } - if (recovered) - vol->recovered_reads += recovered; /* adjust our recovery count */ - } - return status; -} - -/* Build up a request structure for writes. - * Return 0 if all subdisks involved in the request are up, 1 if some - * subdisks are not up, and -1 if the request is at least partially - * outside the bounds of the subdisks. */ -enum requeststatus -build_write_request(struct request *rq) -{ /* request */ - struct buf *bp; - daddr_t diskstart; /* offset of current part of transfer */ - daddr_t diskend; /* and end offset of transfer */ - int plexno; /* plex index in vinum_conf */ - struct volume *vol; /* volume in question */ - enum requeststatus status; - - bp = rq->bp; /* buffer pointer */ - vol = &VOL[rq->volplex.volno]; /* point to volume */ - diskend = bp->b_blkno + (bp->b_bcount / DEV_BSIZE); /* end offset of transfer */ - status = REQUEST_OK; - for (plexno = 0; plexno < vol->plexes; plexno++) { - diskstart = bp->b_blkno; /* start offset of transfer */ - status = max(status, bre(rq, /* build requests for the plex */ - vol->plex[plexno], - &diskstart, - diskend)); - } - return status; -} - -/* Fill in the struct buf part of a request element. */ -enum requeststatus -build_rq_buffer(struct rqelement *rqe, struct plex *plex) -{ - struct sd *sd; /* point to subdisk */ - struct volume *vol; - struct buf *bp; - struct buf *ubp; /* user (high level) buffer header */ - - vol = &VOL[rqe->rqg->rq->volplex.volno]; - sd = &SD[rqe->sdno]; /* point to subdisk */ - bp = &rqe->b; - ubp = rqe->rqg->rq->bp; /* pointer to user buffer header */ - - /* Initialize the buf struct */ - bzero(&rqe->b, sizeof(struct buf)); - bp->b_proc = ubp->b_proc; /* process pointer */ - bp->b_flags = ubp->b_flags & (B_NOCACHE | B_READ | B_ASYNC); /* copy these flags from user bp */ - bp->b_flags |= B_CALL | B_BUSY; /* inform us when it's done */ - /* XXX Should we check for reviving plexes here, and - * set B_ORDERED if so? */ - bp->b_iodone = complete_rqe; /* by calling us here */ - bp->b_dev = DRIVE[rqe->driveno].dev; /* drive device */ - bp->b_blkno = rqe->sdoffset + sd->driveoffset; /* start address */ - bp->b_bcount = rqe->buflen << DEV_BSHIFT; /* number of bytes to transfer */ - bp->b_resid = bp->b_bcount; /* and it's still all waiting */ - bp->b_bufsize = bp->b_bcount; /* and buffer size */ - bp->b_vp = DRIVE[rqe->driveno].vp; /* drive vnode */ - bp->b_rcred = FSCRED; /* we have the file system credentials */ - bp->b_wcred = FSCRED; /* we have the file system credentials */ - - if (rqe->flags & XFR_MALLOCED) { /* this operation requires a malloced buffer */ - bp->b_data = Malloc(bp->b_bcount); /* get a buffer to put it in */ - if (bp->b_data == NULL) { /* failed */ - Debugger("XXX"); - abortrequest(rqe->rqg->rq, ENOMEM); - return REQUEST_ENOMEM; /* no memory */ - } - } else - /* Point directly to user buffer data. This means - * that we don't need to do anything when we have - * finished the transfer */ - bp->b_data = ubp->b_data + rqe->useroffset * DEV_BSIZE; - return 0; -} -/* Abort a request: free resources and complete the - * user request with the specified error */ -int -abortrequest(struct request *rq, int error) -{ - struct buf *bp = rq->bp; /* user buffer */ - - bp->b_flags |= B_ERROR; - bp->b_error = error; - freerq(rq); /* free everything we're doing */ - biodone(bp); - return error; /* and give up */ -} - -/* Check that our transfer will cover the - * complete address space of the user request. - * - * Return 1 if it can, otherwise 0 */ -int -check_range_covered(struct request *rq) -{ - /* XXX */ - return 1; -} - -/* Perform I/O on a subdisk */ -void -sdio(struct buf *bp) -{ - int s; /* spl */ - struct sd *sd; - struct sdbuf *sbp; - daddr_t endoffset; - struct drive *drive; - - sd = &SD[Sdno(bp->b_dev)]; /* point to the subdisk */ - drive = &DRIVE[sd->driveno]; - - if (drive->state != drive_up) { /* XXX until we get the states fixed */ - if (bp->b_flags & B_WRITE) /* writing, */ - set_sd_state(Sdno(bp->b_dev), sd_stale, setstate_force); - else - set_sd_state(Sdno(bp->b_dev), sd_crashed, setstate_force); - bp->b_flags |= B_ERROR; - bp->b_error = EIO; - biodone(bp); - return; - } - if (sd->state < sd_empty) { /* nothing to talk to, */ - bp->b_flags |= B_ERROR; - bp->b_flags = EIO; - if (bp->b_flags & B_BUSY) /* XXX why isn't this always the case? */ - biodone(bp); - return; - } - /* Get a buffer */ - sbp = (struct sdbuf *) Malloc(sizeof(struct sdbuf)); - if (sbp == NULL) { - bp->b_flags |= B_ERROR; - bp->b_error = ENOMEM; - biodone(bp); - return; - } - bcopy(bp, &sbp->b, sizeof(struct buf)); /* start with the user's buffer */ - sbp->b.b_flags |= B_CALL; /* tell us when it's done */ - sbp->b.b_iodone = sdio_done; /* here */ - sbp->b.b_dev = DRIVE[sd->driveno].dev; /* device */ - sbp->b.b_vp = DRIVE[sd->driveno].vp; /* vnode */ - sbp->b.b_blkno += sd->driveoffset; - sbp->bp = bp; /* note the address of the original header */ - sbp->sdno = sd->sdno; /* note for statistics */ - sbp->driveno = sd->driveno; - endoffset = bp->b_blkno + sbp->b.b_bcount / DEV_BSIZE; /* final sector offset */ - if (endoffset > sd->sectors) { /* beyond the end */ - sbp->b.b_bcount -= (endoffset - sd->sectors) * DEV_BSIZE; /* trim */ - if (sbp->b.b_bcount <= 0) { /* nothing to transfer */ - bp->b_resid = bp->b_bcount; /* nothing transferred */ - /* XXX Grrr. This doesn't seem to work. Return - * an error after all */ - bp->b_flags |= B_ERROR; - bp->b_error = ENOSPC; - biodone(bp); - Free(sbp); - return; - } - } - if ((sbp->b.b_flags & B_READ) == 0) /* write */ - sbp->b.b_vp->v_numoutput++; /* one more output going */ -#if VINUMDEBUG - if (debug & DEBUG_ADDRESSES) - printf(" %s dev 0x%x, sd %d, offset 0x%x, devoffset 0x%x, length %ld\n", - sbp->b.b_flags & B_READ ? "Read" : "Write", - sbp->b.b_dev, - sbp->sdno, - (u_int) (sbp->b.b_blkno - SD[sbp->sdno].driveoffset), - (int) sbp->b.b_blkno, - sbp->b.b_bcount); /* XXX */ - if (debug & DEBUG_NUMOUTPUT) - printf(" vinumstart sd %d numoutput %ld\n", - sbp->sdno, - sbp->b.b_vp->v_numoutput); -#endif - s = splbio(); - (*bdevsw[major(sbp->b.b_dev)]->d_strategy) (&sbp->b); - splx(s); -} - -/* Simplified version of bounds_check_with_label - * Determine the size of the transfer, and make sure it is - * within the boundaries of the partition. Adjust transfer - * if needed, and signal errors or early completion. - * - * Volumes are simpler than disk slices: they only contain - * one component (though we call them a, b and c to make - * system utilities happy), and they always take up the - * complete space of the "partition". - * - * I'm still not happy with this: why should the label be - * protected? If it weren't so damned difficult to write - * one in the first pleace (because it's protected), it wouldn't - * be a problem. - */ -int -vinum_bounds_check(struct buf *bp, struct volume *vol) -{ - int maxsize = vol->size; /* size of the partition (sectors) */ - int size = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT; /* size of this request (sectors) */ - - /* Would this transfer overwrite the disk label? */ - if (bp->b_blkno <= LABELSECTOR /* starts before or at the label */ -#if LABELSECTOR != 0 - && bp->b_blkno + size > LABELSECTOR /* and finishes after */ -#endif - && (!(vol->flags & VF_RAW)) /* and it's not raw */ - &&major(bp->b_dev) == BDEV_MAJOR /* and it's the block device */ - && (bp->b_flags & B_READ) == 0 /* and it's a write */ - && (!vol->flags & (VF_WLABEL | VF_LABELLING))) { /* and we're not allowed to write the label */ - bp->b_error = EROFS; /* read-only */ - bp->b_flags |= B_ERROR; - return -1; - } - if (size == 0) /* no transfer specified, */ - return 0; /* treat as EOF */ - /* beyond partition? */ - if (bp->b_blkno < 0 /* negative start */ - || bp->b_blkno + size > maxsize) { /* or goes beyond the end of the partition */ - /* if exactly at end of disk, return an EOF */ - if (bp->b_blkno == maxsize) { - bp->b_resid = bp->b_bcount; - return 0; - } - /* or truncate if part of it fits */ - size = maxsize - bp->b_blkno; - if (size <= 0) { /* nothing to transfer */ - bp->b_error = EINVAL; - bp->b_flags |= B_ERROR; - return -1; - } - bp->b_bcount = size << DEV_BSHIFT; - } - bp->b_pblkno = bp->b_blkno; - return 1; -} - -/* Allocate a request group and hook - * it in in the list for rq */ -struct rqgroup * -allocrqg(struct request *rq, int elements) -{ - struct rqgroup *rqg; /* the one we're going to allocate */ - int size = sizeof(struct rqgroup) + elements * sizeof(struct rqelement); - - rqg = (struct rqgroup *) Malloc(size); - if (rqg != NULL) { /* malloc OK, */ - if (rq->rqg) /* we already have requests */ - rq->lrqg->next = rqg; /* hang it off the end */ - else /* first request */ - rq->rqg = rqg; /* at the start */ - rq->lrqg = rqg; /* this one is the last in the list */ - - bzero(rqg, size); /* no old junk */ - rqg->rq = rq; /* point back to the parent request */ - rqg->count = elements; /* number of requests in the group */ - } else - Debugger("XXX"); - return rqg; -} - -/* Deallocate a request group out of a chain. We do - * this by linear search: the chain is short, this - * almost never happens, and currently it can only - * happen to the first member of the chain. */ -void -deallocrqg(struct rqgroup *rqg) -{ - struct rqgroup *rqgc = rqg->rq->rqg; /* point to the request chain */ - - if (rqg->rq->rqg == rqg) /* we're first in line */ - rqg->rq->rqg = rqg->next; /* unhook ourselves */ - else { - while (rqgc->next != rqg) /* find the group */ - rqgc = rqgc->next; - rqgc->next = rqg->next; - } - Free(rqgc); -} - -/* Character device interface */ -int -vinumread(dev_t dev, struct uio *uio, int ioflag) -{ - return (physio(vinumstrategy, NULL, dev, 1, minphys, uio)); -} - -int -vinumwrite(dev_t dev, struct uio *uio, int ioflag) -{ - return (physio(vinumstrategy, NULL, dev, 0, minphys, uio)); -} diff --git a/sys/dev/vinum/vinumrevive.c b/sys/dev/vinum/vinumrevive.c deleted file mode 100644 index e7cc3dd33a4d8..0000000000000 --- a/sys/dev/vinum/vinumrevive.c +++ /dev/null @@ -1,181 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumrevive.c,v 1.6 1999/01/17 06:20:44 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <dev/vinum/request.h> - -/* revive a block of a subdisk. Return an error - * indication. EAGAIN means successful copy, but - * that more blocks remain to be copied. EINVAL means - * that the subdisk isn't associated with a plex (which - * means a programming error if we get here at all; - * FIXME) - * XXX We should specify a block size here. At the moment, - * just take a default value. FIXME */ -int -revive_block(int sdno) -{ - struct sd *sd; - struct plex *plex; - struct volume *vol; - struct buf *bp; - int error = EAGAIN; - int size; /* size of revive block, bytes */ - int s; /* priority level */ - daddr_t plexblkno; /* lblkno in plex */ - - plexblkno = 0; /* to keep the compiler happy */ - sd = &SD[sdno]; - if (sd->plexno < 0) /* no plex? */ - return EINVAL; - plex = &PLEX[sd->plexno]; /* point to plex */ - if (plex->volno >= 0) - vol = &VOL[plex->volno]; - else - vol = NULL; - - if (sd->revive_blocksize == 0) { - if (plex->stripesize != 0) /* we're striped, don't revive more than */ - sd->revive_blocksize = min(DEFAULT_REVIVE_BLOCKSIZE, /* one block at a time */ - plex->stripesize << DEV_BSHIFT); - else - sd->revive_blocksize = DEFAULT_REVIVE_BLOCKSIZE; - } - size = min(sd->revive_blocksize >> DEV_BSHIFT, sd->sectors - sd->revived) << DEV_BSHIFT; - - s = splbio(); - - bp = geteblk(size); /* Get a buffer */ - if (bp == NULL) { - splx(s); - return ENOMEM; - } - if (bp->b_qindex != 0) /* on a queue, */ - bremfree(bp); /* remove it XXX how can this happen? */ - splx(s); - - /* Amount to transfer: block size, unless it - * would overlap the end */ - bp->b_bufsize = size; - bp->b_bcount = bp->b_bufsize; - bp->b_resid = 0; - - /* Now decide where to read from */ - - switch (plex->organization) { - daddr_t stripeoffset; /* offset in stripe */ - - case plex_concat: - plexblkno = sd->revived + sd->plexoffset; /* corresponding address in plex */ - break; - - case plex_striped: - stripeoffset = sd->revived % plex->stripesize; /* offset from beginning of stripe */ - plexblkno = sd->plexoffset /* base */ - + (sd->revived - stripeoffset) * plex->subdisks /* offset to beginning of stripe */ - + sd->revived % plex->stripesize; /* offset from beginning of stripe */ - break; - - case plex_raid5: - case plex_disorg: /* to keep the compiler happy */ - } - - { - bp->b_blkno = plexblkno; /* start here */ - if (vol != NULL) /* it's part of a volume, */ - /* First, read the data from the volume. We don't - * care which plex, that's bre's job */ - bp->b_dev = VINUMBDEV(plex->volno, 0, 0, VINUM_VOLUME_TYPE); /* create the device number */ - else /* it's an unattached plex */ - bp->b_dev = VINUMRBDEV(sd->plexno, VINUM_RAWPLEX_TYPE); /* create the device number */ - - bp->b_flags = B_BUSY | B_READ; /* either way, read it */ - vinumstart(bp, 1); - biowait(bp); - } - if (bp->b_flags & B_ERROR) - error = bp->b_error; - else - /* Now write to the subdisk */ - { - s = splbio(); - if (bp->b_qindex != 0) /* on a queue, */ - bremfree(bp); /* remove it */ - splx(s); - - bp->b_dev = VINUMRBDEV(sdno, VINUM_RAWSD_TYPE); /* create the device number */ - bp->b_flags = B_BUSY | B_ORDERED; /* and make this an ordered write */ - bp->b_resid = 0x0; - bp->b_blkno = sd->revived; /* write it to here */ - sdio(bp); /* perform the I/O */ - biowait(bp); - if (bp->b_flags & B_ERROR) - error = bp->b_error; - else { - sd->revived += bp->b_bcount >> DEV_BSHIFT; /* moved this much further down */ - if (sd->revived >= sd->sectors) { /* finished */ - sd->revived = 0; - set_sd_state(sdno, sd_up, setstate_force); /* bring the sd up */ - printf("vinum: %s is %s\n", sd->name, sd_state(sd->state)); - save_config(); /* and save the updated configuration */ - error = 0; /* we're done */ - } - } - while (sd->waitlist) { /* we have waiting requests */ -#if VINUMDEBUG - struct request *rq = sd->waitlist; - - if (debug & DEBUG_REVIVECONFLICT) - printf("Relaunch revive conflict sd %d: %x\n%s dev 0x%x, offset 0x%x, length %ld\n", - rq->sdno, - (u_int) rq, - rq->bp->b_flags & B_READ ? "Read" : "Write", - rq->bp->b_dev, - rq->bp->b_blkno, - rq->bp->b_bcount); -#endif - launch_requests(sd->waitlist, 1); /* do them now */ - sd->waitlist = sd->waitlist->next; /* and move on to the next */ - } - } - if (bp->b_qindex == 0) /* not on a queue, */ - brelse(bp); /* is this kosher? */ - return error; -} diff --git a/sys/dev/vinum/vinumstate.c b/sys/dev/vinum/vinumstate.c deleted file mode 100644 index 8d44fecfcdf2d..0000000000000 --- a/sys/dev/vinum/vinumstate.c +++ /dev/null @@ -1,843 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumstate.c,v 2.10 1999/01/17 06:19:23 grog Exp grog $ - */ - -#define REALLYKERNEL -#include "opt_vinum.h" -#include <dev/vinum/vinumhdr.h> -#include <dev/vinum/request.h> - -/* Update drive state */ -/* Return 1 if the state changes, otherwise 0 */ -int -set_drive_state(int driveno, enum drivestate newstate, enum setstateflags flags) -{ - struct drive *drive = &DRIVE[driveno]; - int oldstate = drive->state; - int sdno; - - if (drive->state == drive_unallocated) /* no drive to do anything with, */ - return 0; - - if (newstate != oldstate) { /* don't change it if it's not different */ - if ((newstate == drive_down) /* the drive's going down */ - &&(!(flags & setstate_force)) - && (drive->opencount != 0)) /* we can't do it */ - return 0; /* don't do it */ - drive->state = newstate; /* set the state */ - if (drive->label.name[0] != '\0') /* we have a name, */ - printf("vinum: drive %s is %s\n", drive->label.name, drive_state(drive->state)); - if ((drive->state == drive_up) - && (drive->vp == NULL)) /* should be open, but we're not */ - init_drive(drive, 1); /* which changes the state again */ - if (newstate != oldstate) { /* state has changed */ - for (sdno = 0; sdno < vinum_conf.subdisks_used; sdno++) { /* find this drive's subdisks */ - if (SD[sdno].driveno == driveno) /* belongs to this drive */ - update_sd_state(sdno); /* update the state */ - } - } - if ((flags & setstate_configuring) == 0) /* configuring? */ - save_config(); /* no: save the updated configuration now */ - return 1; - } - return 0; -} - -/* Try to set the subdisk state. Return 1 if state changed to - * what we wanted, -1 if it changed to something else, and 0 - * if no change. - * - * This routine is called both from the user (up, down states - * only) and internally. - */ -int -set_sd_state(int sdno, enum sdstate newstate, enum setstateflags flags) -{ - struct sd *sd = &SD[sdno]; - struct plex *plex; - struct volume *vol; - int oldstate = sd->state; - int status = 1; /* status to return */ - - if ((newstate == oldstate) - || (sd->state == sd_unallocated)) /* no subdisk to do anything with, */ - return 0; - - if (sd->driveoffset < 0) { /* not allocated space */ - sd->state = sd_down; - if (newstate != sd_down) { - if (sd->plexno >= 0) - sdstatemap(&PLEX[sd->plexno]); /* count up subdisks */ - return -1; - } - } else { /* space allocated */ - switch (newstate) { - case sd_down: - if ((!flags & setstate_force) /* but gently */ - &&(sd->plexno >= 0)) /* and we're attached to a plex, */ - return 0; /* don't do it */ - break; - - case sd_up: - if (DRIVE[sd->driveno].state != drive_up) /* can't bring the sd up if the drive isn't, */ - return 0; /* not even by force */ - switch (sd->state) { - case sd_crashed: - case sd_down: /* been down, no data lost */ - if ((sd->plexno >= 0) /* we're associated with a plex */ - &&(((PLEX[sd->plexno].state < plex_firstup) /* and it's not up */ - ||(PLEX[sd->plexno].subdisks > 1)))) /* or it's the only one */ - break; /* do it */ - /* XXX Get this right: make sure that other plexes in - * the volume cover this address space, otherwise - * we make this one sd_up. - * - * Do we even want this any more? - */ - sd->state = sd_reborn; /* here it is again */ - printf("vinum: subdisk %s is %s, not %s\n", sd->name, sd_state(sd->state), sd_state(newstate)); - status = -1; - break; - - case sd_init: /* brand new */ - if (flags & setstate_configuring) /* we're doing this while configuring */ - break; - /* otherwise it's like being empty */ - /* FALLTHROUGH */ - - case sd_empty: - if ((sd->plexno >= 0) /* we're associated with a plex */ - &&(((PLEX[sd->plexno].state < plex_firstup) /* and it's not up */ - ||(PLEX[sd->plexno].subdisks > 1)))) /* or it's the only one */ - break; - /* Otherwise it's just out of date */ - /* FALLTHROUGH */ - - case sd_stale: /* out of date info, need reviving */ - case sd_obsolete: - /* 1. If the subdisk is not part of a plex, bring it up, don't revive. - - * 2. If the subdisk is part of a one-plex volume or an unattached plex, - * and it's not RAID-5, we *can't revive*. The subdisk doesn't - * change its state. - * - * 3. If the subdisk is part of a one-plex volume or an unattached plex, - * and it's RAID-5, but more than one subdisk is down, we *still - * can't revive*. The subdisk doesn't change its state. - * - * 4. If the subdisk is part of a multi-plex volume, we'll change to - * reviving and let the revive routines find out whether it will work - * or not. If they don't, the revive stops with an error message, - * but the state doesn't change (FWIW).*/ - if (sd->plexno < 0) /* no plex associated, */ - break; /* bring it up */ - plex = &PLEX[sd->plexno]; - if (plex->volno >= 0) /* have a volume */ - vol = &VOL[plex->volno]; - else - vol = NULL; - if (((vol == NULL) /* no volume */ ||(vol->plexes == 1)) /* or only one plex in volume */ - &&((plex->organization != plex_raid5) /* or it's a RAID-5 plex */ - ||(plex->sddowncount > 1))) /* with more than one subdisk down, */ - return 0; /* can't do it */ - sd->state = sd_reviving; /* put in reviving state */ - sd->revived = 0; /* nothing done yet */ - status = EAGAIN; /* need to repeat */ - break; - - /* XXX This is silly. We need to be able to - * bring the subdisk up when it's finished - * initializing, but not from the user. We - * use the same ioctl in each case, but Vinum(8) - * doesn't supply the -f flag, so we use that - * to decide whether to do it or not */ - case sd_initializing: - if (flags & setstate_force) - break; /* do it if we have to */ - return 0; /* no */ - - case sd_reviving: - if (flags & setstate_force) /* insist, */ - break; - return EAGAIN; /* no, try again */ - - default: /* can't do it */ - /* There's no way to bring subdisks up directly from - * other states. First they need to be initialized - * or revived */ - return 0; - } - break; - - default: /* other ones, only internal with force */ - if (flags & setstate_force == 0) /* no force? What's this? */ - return 0; /* don't do it */ - } - } - if (status == 1) { /* we can do it, */ - sd->state = newstate; - printf("vinum: %s is %s\n", sd->name, sd_state(sd->state)); - } else /* we don't get here with status 0 */ - printf("vinum: %s is %s, not %s\n", sd->name, sd_state(sd->state), sd_state(newstate)); - if (sd->plexno >= 0) /* we belong to a plex */ - update_plex_state(sd->plexno); /* update plex state */ - if ((flags & setstate_configuring) == 0) /* save config now */ - save_config(); - return status; -} - -/* Set the state of a plex dependent on its subdisks. - * This time round, we'll let plex state just reflect - * aggregate subdisk state, so this becomes an order of - * magnitude less complicated. In particular, ignore - * the requested state. - */ -int -set_plex_state(int plexno, enum plexstate state, enum setstateflags flags) -{ - struct plex *plex; /* point to our plex */ - enum plexstate oldstate; - enum volplexstate vps; /* how do we compare with the other plexes? */ - - plex = &PLEX[plexno]; /* point to our plex */ - oldstate = plex->state; - - if ((plex->state == plex_unallocated) /* or no plex to do anything with, */ - ||((state == oldstate) /* or we're already there */ - &&(state != plex_up))) /* and it's not up */ - return 0; - - vps = vpstate(plex); /* how do we compare with the other plexes? */ - - switch (state) { - /* We can't bring the plex up, even by force, - * unless it's ready. update_plex_state - * checks that */ - case plex_up: /* bring the plex up */ - update_plex_state(plex->plexno); /* it'll come up if it can */ - break; - - case plex_down: /* want to take it down */ - if (((vps == volplex_onlyus) /* we're the only one up */ - ||(vps == volplex_onlyusup)) /* we're the only one up */ - &&(!(flags & setstate_force))) /* and we don't want to use force */ - return 0; /* can't do it */ - plex->state = state; /* do it */ - invalidate_subdisks(plex, sd_down); /* and down all up subdisks */ - break; - - /* This is only requested internally. - * Trust ourselves */ - case plex_faulty: - plex->state = state; /* do it */ - invalidate_subdisks(plex, sd_crashed); /* and crash all up subdisks */ - break; - - case plex_initializing: - /* XXX consider what safeguards we need here */ - if ((flags & setstate_force) == 0) - return 0; - plex->state = state; /* do it */ - break; - - /* What's this? */ - default: - return 0; - } - if (plex->state != oldstate) /* we've changed, */ - printf("vinum: %s is %s\n", plex->name, plex_state(plex->state)); /* tell them about it */ - /* Now see what we have left, and whether - * we're taking the volume down */ - if (plex->volno >= 0) /* we have a volume */ - update_volume_state(plex->volno); /* update its state */ - if ((flags & setstate_configuring) == 0) /* save config now */ - save_config(); /* yes: save the updated configuration */ - return 1; -} - -/* Update the state of a plex dependent on its plexes. */ -int -set_volume_state(int volno, enum volumestate state, enum setstateflags flags) -{ - struct volume *vol = &VOL[volno]; /* point to our volume */ - - if ((vol->state == state) /* we're there already */ - ||(vol->state == volume_unallocated)) /* or no volume to do anything with, */ - return 0; - - if (state == volume_up) /* want to come up */ - update_volume_state(volno); - else if (state == volume_down) { /* want to go down */ - if ((vol->opencount == 0) /* not open */ - ||((flags & setstate_force) != 0)) { /* or we're forcing */ - vol->state = volume_down; - printf("vinum: volume %s is %s\n", vol->name, volume_state(vol->state)); - if ((flags & setstate_configuring) == 0) /* save config now */ - save_config(); /* yes: save the updated configuration */ - return 1; - } - } - return 0; /* no change */ -} - -/* Set the state of a subdisk based on its environment */ -void -update_sd_state(int sdno) -{ - struct sd *sd; - struct drive *drive; - enum sdstate oldstate; - - sd = &SD[sdno]; - oldstate = sd->state; - drive = &DRIVE[sd->driveno]; - - if (drive->state == drive_up) { - switch (sd->state) { - case sd_down: - case sd_crashed: - sd->state = sd_reborn; /* back up again with no loss */ - break; - - default: - break; - } - } else { /* down or worse */ - switch (sd->state) { - case sd_up: - case sd_reborn: - case sd_reviving: - sd->state = sd_crashed; /* lost our drive */ - break; - - default: - break; - } - } - if (sd->state != oldstate) /* state has changed, */ - printf("vinum: %s is %s\n", sd->name, sd_state(sd->state)); /* say so */ - if (sd->plexno >= 0) /* we're part of a plex, */ - update_plex_state(sd->plexno); /* update its state */ -} - -/* Set the state of a plex based on its environment */ -void -update_plex_state(int plexno) -{ - struct plex *plex; /* point to our plex */ - enum plexstate oldstate; - enum volplexstate vps; /* how do we compare with the other plexes? */ - enum sdstates statemap; /* get a map of the subdisk states */ - - plex = &PLEX[plexno]; /* point to our plex */ - oldstate = plex->state; - - vps = vpstate(plex); /* how do we compare with the other plexes? */ - statemap = sdstatemap(plex); /* get a map of the subdisk states */ - - if (statemap == sd_upstate) /* all subdisks ready for action */ - /* All the subdisks are up. This also means that - * they are consistent, so we can just bring - * the plex up */ - plex->state = plex_up; /* go for it */ - else if (statemap == sd_emptystate) { /* nothing done yet */ - if (((vps & (volplex_otherup | volplex_onlyus)) == 0) /* nothing is up */ &&(plex->state == plex_init) /* we're brand spanking new */ - &&(plex->volno >= 0) /* and we have a volume */ - &&(VOL[plex->volno].flags & VF_CONFIG_SETUPSTATE)) { /* and we consider that up */ - /* Conceptually, an empty plex does not contain valid data, - * but normally we'll see this state when we have just - * created a plex, and it's either consistent from earlier, - * or we don't care about the previous contents (we're going - * to create a file system or use it for swap). - * - * We need to do this in one swell foop: on the next call - * we will no longer be just empty. - * - * This code assumes that all the other plexes are also - * capable of coming up (i.e. all the sds are up), but - * that's OK: we'll come back to this function for the remaining - * plexes in the volume. */ - struct volume *vol = &VOL[plex->volno]; - int plexno; - - for (plexno = 0; plexno < vol->plexes; plexno++) - PLEX[vol->plex[plexno]].state = plex_up; - } else if (vps & volplex_otherup == 0) { /* no other plexes up */ - int sdno; - - plex->state = plex_up; /* we can call that up */ - for (sdno = 0; sdno < plex->subdisks; sdno++) { /* change the subdisks to up state */ - SD[plex->sdnos[sdno]].state = sd_up; - printf("vinum: %s is up\n", SD[plex->sdnos[sdno]].name); /* tell them about it */ - } - } else - plex->state = plex_faulty; /* no, it's down */ - } else if (statemap & (sd_upstate | sd_rebornstate) == statemap) /* all up or reborn */ - plex->state = plex_flaky; - else if (statemap & (sd_upstate | sd_rebornstate)) /* some up or reborn */ - plex->state = plex_corrupt; /* corrupt */ - else if (statemap & sd_initstate) /* some subdisks initializing */ - plex->state = plex_initializing; - else /* nothing at all up */ - plex->state = plex_faulty; - - if (plex->state != oldstate) /* state has changed, */ - printf("vinum: %s is %s\n", plex->name, plex_state(plex->state)); /* tell them about it */ - if (plex->volno >= 0) /* we're part of a volume, */ - update_volume_state(plex->volno); /* update its state */ -} - -/* Set volume state based on its components */ -void -update_volume_state(int volno) -{ - struct volume *vol; /* our volume */ - int plexno; - enum volumestate oldstate; - - vol = &VOL[volno]; /* point to our volume */ - oldstate = vol->state; - - for (plexno = 0; plexno < vol->plexes; plexno++) { - struct plex *plex = &PLEX[vol->plex[plexno]]; /* point to the plex */ - if (plex->state >= plex_corrupt) { /* something accessible, */ - vol->state = volume_up; - break; - } - } - if (plexno == vol->plexes) /* didn't find an up plex */ - vol->state = volume_down; - - if (vol->state != oldstate) { /* state changed */ - printf("vinum: %s is %s\n", vol->name, volume_state(vol->state)); - save_config(); /* save the updated configuration */ - } -} - -/* Called from request routines when they find - * a subdisk which is not kosher. Decide whether - * it warrants changing the state. Return - * REQUEST_DOWN if we can't use the subdisk, - * REQUEST_OK if we can. */ -/* A prior version of this function checked the plex - * state as well. At the moment, consider plex states - * information for the user only. We'll ignore them - * and use the subdisk state only. The last version of - * this file with the old logic was 2.7. XXX */ -enum requeststatus -checksdstate(struct sd *sd, struct request *rq, daddr_t diskaddr, daddr_t diskend) -{ - struct plex *plex = &PLEX[sd->plexno]; - int writeop = (rq->bp->b_flags & B_READ) == 0; /* note if we're writing */ - - switch (sd->state) { - /* We shouldn't get called if the subdisk is up */ - case sd_up: - return REQUEST_OK; - - case sd_reviving: - /* Access to a reviving subdisk depends on the - * organization of the plex: - - * - If it's concatenated, access the subdisk up to its current - * revive point. If we want to write to the subdisk overlapping the - * current revive block, set the conflict flag in the request, asking - * the caller to put the request on the wait list, which will be - * attended to by revive_block when it's done. - * - if it's striped, we can't do it (we could do some hairy - * calculations, but it's unlikely to work). - * - if it's RAID-5, we can do it as long as only one - * subdisk is down */ - if (plex->state == plex_striped) /* plex is striped, */ - return REQUEST_DOWN; /* can't access it now */ - if (diskaddr > (sd->revived - + sd->plexoffset - + (sd->revive_blocksize >> DEV_BSHIFT))) /* we're beyond the end */ - return REQUEST_DOWN; /* don't take the sd down again... */ - else if (diskend > (sd->revived + sd->plexoffset)) { /* we finish beyond the end */ - if (writeop) { - rq->flags |= XFR_REVIVECONFLICT; /* note a potential conflict */ - rq->sdno = sd->sdno; /* and which sd last caused it */ - } else - return REQUEST_DOWN; /* can't read this yet */ - } - return REQUEST_OK; - - case sd_reborn: - if (writeop) - return REQUEST_OK; /* always write to a reborn disk */ - else /* don't allow a read */ - /* Handle the mapping. We don't want to reject - * a read request to a reborn subdisk if that's - * all we have. XXX */ - return REQUEST_DOWN; - - case sd_down: - if (writeop) /* writing to a consistent down disk */ - set_sd_state(sd->sdno, sd_obsolete, setstate_force); /* it's not consistent now */ - return REQUEST_DOWN; /* and it's down one way or another */ - - case sd_crashed: - if (writeop) /* writing to a consistent down disk */ - set_sd_state(sd->sdno, sd_stale, setstate_force); /* it's not consistent now */ - return REQUEST_DOWN; /* and it's down one way or another */ - - default: - return REQUEST_DOWN; - } -} - -/* return a state map for the subdisks of a plex */ -enum sdstates -sdstatemap(struct plex *plex) -{ - int sdno; - enum sdstates statemap = 0; /* note the states we find */ - - plex->sddowncount = 0; /* no subdisks down yet */ - for (sdno = 0; sdno < plex->subdisks; sdno++) { - struct sd *sd = &SD[plex->sdnos[sdno]]; /* point to the subdisk */ - - switch (sd->state) { - case sd_empty: - statemap |= sd_emptystate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_init: - statemap |= sd_initstate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_down: - statemap |= sd_downstate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_crashed: - statemap |= sd_crashedstate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_obsolete: - statemap |= sd_obsolete; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_stale: - statemap |= sd_stalestate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_reborn: - statemap |= sd_rebornstate; - break; - - case sd_up: - statemap |= sd_upstate; - break; - - case sd_initializing: - statemap |= sd_initstate; - (plex->sddowncount)++; /* another unusable subdisk */ - break; - - case sd_unallocated: - case sd_uninit: - case sd_reviving: - statemap |= sd_otherstate; - (plex->sddowncount)++; /* another unusable subdisk */ - } - } - return statemap; -} - -/* determine the state of the volume relative to this plex */ -enum volplexstate -vpstate(struct plex *plex) -{ - struct volume *vol; - enum volplexstate state = volplex_onlyusdown; /* state to return */ - int plexno; - - if (plex->volno < 0) /* not associated with a volume */ - return volplex_onlyusdown; /* assume the worst */ - - vol = &VOL[plex->volno]; /* point to our volume */ - for (plexno = 0; plexno < vol->plexes; plexno++) { - if (&PLEX[vol->plex[plexno]] == plex) { /* us */ -#if RAID5 - if (PLEX[vol->plex[plexno]].state >= plex_degraded) /* are we up? */ - state |= volplex_onlyus; /* yes */ -#else - if (PLEX[vol->plex[plexno]].state >= plex_flaky) /* are we up? */ - state |= volplex_onlyus; /* yes */ -#endif - } else { -#if RAID5 - if (PLEX[vol->plex[plexno]].state >= plex_degraded) /* not us */ - state |= volplex_otherup; /* and when they were up, they were up */ - else - state |= volplex_alldown; /* and when they were down, they were down */ -#else - if (PLEX[vol->plex[plexno]].state >= plex_flaky) /* not us */ - state |= volplex_otherup; /* and when they were up, they were up */ - else - state |= volplex_alldown; /* and when they were down, they were down */ -#endif - } - } - return state; /* and when they were only halfway up */ -} /* they were neither up nor down */ - -/* Check if all bits b are set in a */ -int allset(int a, int b); - -int -allset(int a, int b) -{ - return (a & b) == b; -} - -/* Invalidate the subdisks belonging to a plex */ -void -invalidate_subdisks(struct plex *plex, enum sdstate state) -{ - int sdno; - - for (sdno = 0; sdno < plex->subdisks; sdno++) { /* for each subdisk */ - struct sd *sd = &SD[plex->sdnos[sdno]]; - - switch (sd->state) { - case sd_unallocated: - case sd_uninit: - case sd_init: - case sd_initializing: - case sd_empty: - case sd_obsolete: - case sd_stale: - case sd_crashed: - case sd_down: - break; - - case sd_reviving: - case sd_reborn: - case sd_up: - set_sd_state(plex->sdnos[sdno], state, setstate_force); - } - } -} - -/* Start an object, in other words do what we can to get it up. - * This is called from vinumioctl (VINUMSTART). - * Return error indications via ioctl_reply - */ -void -start_object(struct vinum_ioctl_msg *data) -{ - int status; - int objindex = data->index; /* data gets overwritten */ - struct _ioctl_reply *ioctl_reply = (struct _ioctl_reply *) data; /* format for returning replies */ - enum setstateflags flags; - - if (data->force != 0) /* are we going to use force? */ - flags = setstate_force; /* yes */ - else - flags = setstate_none; /* no */ - - switch (data->type) { - case drive_object: - status = set_drive_state(objindex, drive_up, flags); - if (DRIVE[objindex].state != drive_up) /* set status on whether we really did it */ - ioctl_reply->error = EINVAL; - else - ioctl_reply->error = 0; - break; - - case sd_object: - if (SD[objindex].state == sd_reviving) { /* reviving, */ - ioctl_reply->error = revive_block(objindex); /* revive another block */ - ioctl_reply->msg[0] = '\0'; /* no comment */ - return; - } - status = set_sd_state(objindex, sd_up, flags); /* set state */ - if (status == EAGAIN) { /* first revive, */ - ioctl_reply->error = revive_block(objindex); /* revive the first block */ - ioctl_reply->error = EAGAIN; - } else { - if (SD[objindex].state != sd_up) /* set status on whether we really did it */ - ioctl_reply->error = EINVAL; - else - ioctl_reply->error = 0; - } - break; - - case plex_object: - status = set_plex_state(objindex, plex_up, flags); - if (PLEX[objindex].state != plex_up) /* set status on whether we really did it */ - ioctl_reply->error = EINVAL; - else - ioctl_reply->error = 0; - break; - - case volume_object: - status = set_volume_state(objindex, volume_up, flags); - if (VOL[objindex].state != volume_up) /* set status on whether we really did it */ - ioctl_reply->error = EINVAL; - else - ioctl_reply->error = 0; - break; - - default: - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "Invalid object type"); - return; - } - /* There's no point in saying anything here: - * the userland program does it better */ - ioctl_reply->msg[0] = '\0'; -} - -/* Stop an object, in other words do what we can to get it down - * This is called from vinumioctl (VINUMSTOP). - * Return error indications via ioctl_reply. - */ -void -stop_object(struct vinum_ioctl_msg *data) -{ - int status = 1; - int objindex = data->index; /* save the number from change */ - struct _ioctl_reply *ioctl_reply = (struct _ioctl_reply *) data; /* format for returning replies */ - - switch (data->type) { - case drive_object: - status = set_drive_state(objindex, drive_down, data->force); - break; - - case sd_object: - status = set_sd_state(objindex, sd_down, data->force); - break; - - case plex_object: - status = set_plex_state(objindex, plex_down, data->force); - break; - - case volume_object: - status = set_volume_state(objindex, volume_down, data->force); - break; - - default: - ioctl_reply->error = EINVAL; - strcpy(ioctl_reply->msg, "Invalid object type"); - return; - } - ioctl_reply->msg[0] = '\0'; - if (status == 0) /* couldn't do it */ - ioctl_reply->error = EINVAL; - else - ioctl_reply->error = 0; -} - -/* VINUM_SETSTATE ioctl: set an object state - * msg is the message passed by the user */ -void -setstate(struct vinum_ioctl_msg *msg) -{ - int sdno; - struct sd *sd; - struct plex *plex; - struct _ioctl_reply *ioctl_reply = (struct _ioctl_reply *) msg; /* format for returning replies */ - - switch (msg->state) { - case object_down: - stop_object(msg); - break; - - case object_initializing: - switch (msg->type) { - case sd_object: - sd = &SD[msg->index]; - if ((msg->index >= vinum_conf.subdisks_used) - || (sd->state == sd_unallocated)) { - sprintf(ioctl_reply->msg, "Invalid subdisk %d", msg->index); - ioctl_reply->error = EFAULT; - return; - } - set_sd_state(msg->index, sd_initializing, msg->force); - if (sd->state != sd_initializing) { - strcpy(ioctl_reply->msg, "Can't set state"); - ioctl_reply->error = EINVAL; - } else - ioctl_reply->error = 0; - break; - - case plex_object: - plex = &PLEX[msg->index]; - if ((msg->index >= vinum_conf.plexes_used) - || (plex->state == plex_unallocated)) { - sprintf(ioctl_reply->msg, "Invalid subdisk %d", msg->index); - ioctl_reply->error = EFAULT; - return; - } - set_plex_state(msg->index, plex_initializing, msg->force); - if (plex->state != plex_initializing) { - strcpy(ioctl_reply->msg, "Can't set state"); - ioctl_reply->error = EINVAL; - } else { - ioctl_reply->error = 0; - for (sdno = 0; sdno < plex->subdisks; sdno++) { - sd = &SD[plex->sdnos[sdno]]; - set_sd_state(plex->sdnos[sdno], sd_initializing, msg->force); - if (sd->state != sd_initializing) { - strcpy(ioctl_reply->msg, "Can't set state"); - ioctl_reply->error = EINVAL; - break; - } - } - } - break; - - default: - strcpy(ioctl_reply->msg, "Invalid object"); - ioctl_reply->error = EINVAL; - } - break; - - case object_up: - start_object(msg); - } -} diff --git a/sys/dev/vinum/vinumstate.h b/sys/dev/vinum/vinumstate.h deleted file mode 100644 index 267626949069d..0000000000000 --- a/sys/dev/vinum/vinumstate.h +++ /dev/null @@ -1,206 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumstate.h,v 1.12 1998/12/30 01:31:52 grog Exp grog $ - */ - -/* This file gets read by makestatetext to create text files - * with the names of the states, so don't change the file - * format */ - -enum volumestate { - volume_unallocated, - /* present but unused. Must be 0 */ - - volume_uninit, - /* mentioned elsewhere but not defined */ - - volume_down, - - /* The volume is up and functional, but not all plexes may be available */ - volume_up, - volume_laststate = volume_up /* last value, for table dimensions */ -}; - -enum plexstate { - /* An empty entry, not a plex at all. */ - plex_unallocated, - - /* The plex has been allocated, but there configuration - * is not complete */ - plex_init, - - /* A plex which has gone completely down because of - * I/O errors. */ - plex_faulty, - - /* A plex which has been taken down by the - * administrator. */ - plex_down, - - /* A plex which is being initialized */ - plex_initializing, - - /* *** The remaining states represent plexes which are - * at least partially up. Keep these separate so that - * they can be checked more easily. */ - - /* A plex entry which is at least partially up. Not - * all subdisks are available, and an inconsistency - * has occurred. If no other plex is uncorrupted, - * the volume is no longer consistent. */ - plex_corrupt, - - plex_firstup = plex_corrupt, /* first "up" state */ - - /* A RAID-5 plex entry which is accessible, but one - * subdisk is down, requiring recovery for many - * I/O requests. */ - plex_degraded, - - /* A plex which is really up, but which has a reborn - * subdisk which we don't completely trust, and - * which we don't want to read if we can avoid it */ - plex_flaky, - - /* A plex entry which is completely up. All subdisks - * are up. */ - plex_up, - - plex_laststate = plex_up /* last value, for table dimensions */ -}; - -/* subdisk states */ -enum sdstate { - /* An empty entry, not a subdisk at all. */ - sd_unallocated, - - /* A subdisk entry which has not been created - * completely. Some fields may be empty. - */ - sd_uninit, - - /* A subdisk entry which has been created completely. - * All fields are correct, but the disk hasn't - * been updated. - */ - sd_init, - - /* A subdisk entry which has been created completely. - * All fields are correct, and the disk has been - * updated, but there is no data on the disk. - */ - sd_empty, - - /* A subdisk entry which has been created completely and - * which is currently being initialized */ - sd_initializing, - - /* *** The following states represent invalid data */ - /* A subdisk entry which has been created completely. - * All fields are correct, the config on disk has been - * updated, and the data was valid, but since then the - * drive has been taken down, and as a result updates - * have been missed. - */ - sd_obsolete, - - /* A subdisk entry which has been created completely. - * All fields are correct, the disk has been updated, - * and the data was valid, but since then the drive - * has been crashed and updates have been lost. - */ - sd_stale, - - /* *** The following states represent valid, inaccessible data */ - - /* A subdisk entry which has been created completely. - * All fields are correct, the disk has been updated, - * and the data was valid, but since then the drive - * has gone down. No attempt has been made to write - * to the subdisk since the crash, so the data is valid. - */ - sd_crashed, - - /* A subdisk entry which was up, which contained - * valid data, and which was taken down by the - * administrator. The data is valid. */ - sd_down, - - /* *** This is invalid data (the subdisk previously had - * a numerically lower state), but it is currently in the - * process of being revived. We can write but not read. */ - sd_reviving, - - /* *** The following states represent accessible subdisks - * with valid data */ - - /* A subdisk entry which has been created completely. - * All fields are correct, the disk has been updated, - * and the data was valid, but since then the drive - * has gone down and up again. No updates were lost, - * but it is possible that the subdisk has been - * damaged. We won't read from this subdisk if we - * have a choice. If this is the only subdisk which - * covers this address space in the plex, we set its - * state to sd_up under these circumstances, so this - * status implies that there is another subdisk to - * fulfil the request. */ - sd_reborn, - - /* A subdisk entry which has been created completely. - * All fields are correct, the disk has been updated, - * and the data is valid. - */ - sd_up, - - sd_laststate = sd_up /* last value, for table dimensions */ -}; - -enum drivestate { - drive_unallocated, - /* present but unused. Must be 0 */ - - drive_uninit, - /* just mentioned in some other config entry */ - - drive_down, - /* not accessible */ - - drive_up, - /* up and running */ - - drive_laststate = drive_up /* last value, for table dimensions */ -}; diff --git a/sys/dev/vinum/vinumutil.c b/sys/dev/vinum/vinumutil.c deleted file mode 100644 index 22d8be8431dd2..0000000000000 --- a/sys/dev/vinum/vinumutil.c +++ /dev/null @@ -1,280 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumutil.c,v 1.10 1999/01/02 00:39:04 grog Exp grog $ - */ - -/* This file contains utility routines used both in kernel and user context */ - -#ifdef KERNEL -#include "opt_vinum.h" -#endif -#include <dev/vinum/vinumhdr.h> -#include <dev/vinum/statetexts.h> -#ifndef REALLYKERNEL -#include <stdio.h> -extern jmp_buf command_fail; /* return on a failed command */ -#endif - -static char numeric_state[32]; /* temporary buffer for ASCII conversions */ -#define STATECOUNT(x) (sizeof (x##statetext) / sizeof (char *)) -/* Return drive state as a string */ -char * -drive_state(enum drivestate state) -{ - if (((unsigned) state) >= STATECOUNT(drive)) { - sprintf(numeric_state, "Invalid state %d", (int) state); - return numeric_state; - } else - return drivestatetext[state]; -} - -/* Return volume state as a string */ -char * -volume_state(enum volumestate state) -{ - if (((unsigned) state) >= STATECOUNT(vol)) { - sprintf(numeric_state, "Invalid state %d", (int) state); - return numeric_state; - } else - return volstatetext[state]; -} - -/* Return plex state as a string */ -char * -plex_state(enum plexstate state) -{ - if (((unsigned) state) >= STATECOUNT(plex)) { - sprintf(numeric_state, "Invalid state %d", (int) state); - return numeric_state; - } else - return plexstatetext[state]; -} - -/* Return plex organization as a string */ -char * -plex_org(enum plexorg org) -{ - switch (org) { - case plex_disorg: /* disorganized */ - return "disorg"; - break; - - case plex_concat: /* concatenated plex */ - return "concat"; - break; - - case plex_striped: /* striped plex */ - return "striped"; - break; - - case plex_raid5: /* RAID5 plex */ - return "raid5"; - break; - - default: - sprintf(numeric_state, "Invalid org %d", (int) org); - return numeric_state; - } -} - -/* Return sd state as a string */ -char * -sd_state(enum sdstate state) -{ - if (((unsigned) state) >= STATECOUNT(sd)) { - sprintf(numeric_state, "Invalid state %d", (int) state); - return numeric_state; - } else - return sdstatetext[state]; -} - -/* Now convert in the other direction */ -/* These are currently used only internally, - * so we don't do too much error checking */ -enum drivestate -DriveState(char *text) -{ - int i; - for (i = 0; i < STATECOUNT(drive); i++) - if (strcmp(text, drivestatetext[i]) == 0) /* found it */ - return (enum drivestate) i; - return -1; -} - -enum sdstate -SdState(char *text) -{ - int i; - for (i = 0; i < STATECOUNT(sd); i++) - if (strcmp(text, sdstatetext[i]) == 0) /* found it */ - return (enum sdstate) i; - return -1; -} - -enum plexstate -PlexState(char *text) -{ - int i; - for (i = 0; i < STATECOUNT(plex); i++) - if (strcmp(text, plexstatetext[i]) == 0) /* found it */ - return (enum plexstate) i; - return -1; -} - -enum volumestate -VolState(char *text) -{ - int i; - for (i = 0; i < STATECOUNT(vol); i++) - if (strcmp(text, volstatetext[i]) == 0) /* found it */ - return (enum volstate) i; - return -1; -} - -/* Take a number with an optional scale factor and convert - * it to a number of bytes. - * - * The scale factors are: - * - * b blocks (of 512 bytes) - * k kilobytes (1024 bytes) - * m megabytes (of 1024 * 1024 bytes) - * g gigabytes (of 1024 * 1024 * 1024 bytes) - */ -u_int64_t -sizespec(char *spec) -{ - u_int64_t size; - char *s; - - size = 0; - s = spec; - if ((*s >= '0') && (*s <= '9')) { /* it's numeric */ - while ((*s >= '0') && (*s <= '9')) /* it's numeric */ - size = size * 10 + *s++ - '0'; /* convert it */ - switch (*s) { - case '\0': - return size; - - case 'B': - case 'b': - return size * 512; - - case 'K': - case 'k': - return size * 1024; - - case 'M': - case 'm': - return size * 1024 * 1024; - - case 'G': - case 'g': - return size * 1024 * 1024 * 1024; - } - } -#ifdef REALLYKERNEL - throw_rude_remark(EINVAL, "Invalid length specification: %s", spec); -#else - fprintf(stderr, "Invalid length specification: %s", spec); - longjmp(command_fail, -1); -#endif - /* NOTREACHED */ - return -1; -} - -/* Extract the volume number from a device number. - * Perform no checking. */ -int -Volno(dev_t dev) -{ - int x = (int) dev; - return (x & MASK(VINUM_VOL_WIDTH)) >> VINUM_VOL_SHIFT; -} - -/* Extract a plex number from a device number. - * Don't check the major number, but check the - * type. Return -1 for invalid types. */ -int -Plexno(dev_t dev) -{ - int x = (int) dev; - - switch (DEVTYPE(dev)) { - case VINUM_VOLUME_TYPE: - case VINUM_DRIVE_TYPE: - case VINUM_SUPERDEV_TYPE: - case VINUM_RAWSD_TYPE: - return -1; - - case VINUM_PLEX_TYPE: - case VINUM_SD_TYPE: - return VOL[Volno(x)].plex[(x >> VINUM_PLEX_SHIFT) & (MASK(VINUM_PLEX_WIDTH))]; - - case VINUM_RAWPLEX_TYPE: - return ((x & MASK(VINUM_VOL_WIDTH)) >> VINUM_VOL_SHIFT) /* low order 8 bits */ - |((x >> VINUM_RAWPLEX_SHIFT) - & (MASK(VINUM_RAWPLEX_WIDTH) - << (VINUM_VOL_SHIFT + VINUM_VOL_WIDTH))); /* upper 12 bits */ - } - return 0; /* compiler paranoia */ -} - -/* Extract a subdisk number from a device number. - * Don't check the major number, but check the - * type. Return -1 for invalid types. */ -int -Sdno(dev_t dev) -{ - int x = (int) dev; - - switch (DEVTYPE(dev)) { - case VINUM_VOLUME_TYPE: - case VINUM_DRIVE_TYPE: - case VINUM_SUPERDEV_TYPE: - case VINUM_PLEX_TYPE: - case VINUM_RAWPLEX_TYPE: - return -1; - - case VINUM_SD_TYPE: - return PLEX[Plexno(x)].sdnos[(x >> VINUM_SD_SHIFT) & (MASK(VINUM_SD_WIDTH))]; - - case VINUM_RAWSD_TYPE: - return ((x & MASK(VINUM_VOL_WIDTH)) >> VINUM_VOL_SHIFT) /* low order 8 bits */ - |((x >> VINUM_RAWPLEX_SHIFT) & (MASK(VINUM_RAWPLEX_WIDTH) << (VINUM_VOL_SHIFT + VINUM_VOL_WIDTH))); /* upper 12 bits */ - } - return -1; /* compiler paranoia */ -} diff --git a/sys/dev/vinum/vinumvar.h b/sys/dev/vinum/vinumvar.h deleted file mode 100644 index df579fad53662..0000000000000 --- a/sys/dev/vinum/vinumvar.h +++ /dev/null @@ -1,528 +0,0 @@ -/*- - * Copyright (c) 1997, 1998 - * Nan Yang Computer Services Limited. All rights reserved. - * - * This software is distributed under the so-called ``Berkeley - * License'': - * - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Nan Yang Computer - * Services Limited. - * 4. Neither the name of the Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided ``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 company 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. - * - * $Id: vinumvar.h,v 1.18 1999/01/15 06:00:24 grog Exp grog $ - */ - -#include <sys/time.h> -#include <dev/vinum/vinumstate.h> -/* Some configuration maxima. They're an enum because - * we can't define global constants. Sorry about that. - * - * These aren't as bad as they look: most of them are soft limits. - */ - -enum constants { - VINUM_HEADER = 512, /* size of header on disk */ - MAXCONFIGLINE = 1024, /* maximum size of a single config line */ - /* XXX Do we still need this? */ - MINVINUMSLICE = 1048576, /* minimum size of a slice */ - - CDEV_MAJOR = 91, /* major number for character device */ - BDEV_MAJOR = 25, /* and block device */ - - ROUND_ROBIN_READPOL = -1, /* round robin read policy */ - - /* type field in minor number */ - VINUM_VOLUME_TYPE = 0, - VINUM_PLEX_TYPE = 1, - VINUM_SD_TYPE = 2, - VINUM_DRIVE_TYPE = 3, - VINUM_SUPERDEV_TYPE = 4, /* super device. */ - VINUM_RAWPLEX_TYPE = 5, /* anonymous plex */ - VINUM_RAWSD_TYPE = 6, /* anonymous subdisk */ - - /* Shifts for the individual fields in the device */ - VINUM_TYPE_SHIFT = 28, - VINUM_VOL_SHIFT = 0, - VINUM_PLEX_SHIFT = 16, - VINUM_SD_SHIFT = 20, - VINUM_VOL_WIDTH = 8, - VINUM_PLEX_WIDTH = 3, - VINUM_SD_WIDTH = 8, - - /* Shifts for the second half of raw plex and - * subdisk numbers */ - VINUM_RAWPLEX_SHIFT = 8, /* shift the second half this much */ - VINUM_RAWPLEX_WIDTH = 12, /* width of second half */ - - MAJORDEV_SHIFT = 8, - - MAXPLEX = 8, /* maximum number of plexes in a volume */ - MAXSD = 256, /* maximum number of subdisks in a plex */ - MAXDRIVENAME = 32, /* maximum length of a device name */ - MAXSDNAME = 64, /* maximum length of a subdisk name */ - MAXPLEXNAME = 64, /* maximum length of a plex name */ - MAXVOLNAME = 64, /* maximum length of a volume name */ - MAXNAME = 64, /* maximum length of any name */ - - -/* Create a block device number */ -#define VINUMBDEV(v,p,s,t) ((BDEV_MAJOR << MAJORDEV_SHIFT) \ - | (v << VINUM_VOL_SHIFT) \ - | (p << VINUM_PLEX_SHIFT) \ - | (s << VINUM_SD_SHIFT) \ - | (t << VINUM_TYPE_SHIFT) ) - -/* Create a bit mask for x bits */ -#define MASK(x) ((1 << (x)) - 1) - -/* Create a raw block device number */ -#define VINUMRBDEV(d,t) ((BDEV_MAJOR << MAJORDEV_SHIFT) \ - | ((d & MASK (VINUM_VOL_WIDTH)) << VINUM_VOL_SHIFT) \ - | ((d & ~MASK (VINUM_VOL_WIDTH)) \ - << (VINUM_PLEX_SHIFT + VINUM_VOL_WIDTH)) \ - | (t << VINUM_TYPE_SHIFT) ) - -/* And a character device number */ -#define VINUMCDEV(v,p,s,t) ((CDEV_MAJOR << MAJORDEV_SHIFT) \ - | (v << VINUM_VOL_SHIFT) \ - | (p << VINUM_PLEX_SHIFT) \ - | (s << VINUM_SD_SHIFT) \ - | (t << VINUM_TYPE_SHIFT) ) - -/* extract device type */ -#define DEVTYPE(x) ((x >> VINUM_TYPE_SHIFT) & 7) - - VINUM_SUPERDEV = VINUMBDEV(0, 0, 0, VINUM_SUPERDEV_TYPE), /* superdevice number */ - -/* the number of object entries to cater for initially, and also the - * value by which they are incremented. It doesn't take long - * to extend them, so theoretically we could start with 1 of each, but - * it's untidy to allocate such small areas. These values are - * probably too small. - */ - - INITIAL_DRIVES = 4, - INITIAL_VOLUMES = 4, - INITIAL_PLEXES = 8, - INITIAL_SUBDISKS = 16, - INITIAL_SUBDISKS_IN_PLEX = 4, /* number of subdisks to allocate to a plex */ - INITIAL_SUBDISKS_IN_DRIVE = 4, /* number of subdisks to allocate to a drive */ - INITIAL_DRIVE_FREELIST = 16, /* number of entries in drive freelist */ - PLEX_REGION_TABLE_SIZE = 8, /* number of entries in plex region tables */ - INITIAL_LOCKS = 8, /* number of locks to allocate to a volume */ - DEFAULT_REVIVE_BLOCKSIZE = 65536, /* size of block to transfer in one op */ - VINUMHOSTNAMELEN = 32, /* host name field in label */ -}; - -/* device numbers */ - -/* - * 31 30 28 27 20 19 18 16 15 8 7 0 - * |-----------------------------------------------------------------------------------------------| - * |X | Type | Subdisk number | X| Plex | Major number | volume number | - * |-----------------------------------------------------------------------------------------------| - * - * 0x2 03 1 19 06 - * - * The fields in the minor number are interpreted as follows: - * - * Volume: Only type and volume number are relevant - * Plex in volume: type, plex number in volume and volume number are relevant - * raw plex: type, plex number is made of bits 27-16 and 7-0 - * raw subdisk: type, subdisk number is made of bits 27-16 and 7-0 - */ - -struct devcode { -/* CARE. These fields assume a big-endian word. On a - * little-endian system, they're the wrong way around */ - unsigned volume:8; /* up to 256 volumes */ - unsigned major:8; /* this is where the major number fits */ - unsigned plex:3; /* up to 8 plexes per volume */ - unsigned unused:1; /* up for grabs */ - unsigned sd:8; /* up to 256 subdisks per plex */ - unsigned type:3; /* type of object */ - /* type field - VINUM_VOLUME = 0, - VINUM_PLEX = 1, - VINUM_SUBDISK = 2, - VINUM_DRIVE = 3, - VINUM_SUPERDEV = 4, - VINUM_RAWPLEX = 5, - VINUM_RAWSD = 6 */ - unsigned signbit:1; /* to make 32 bits */ -}; - -#define VINUM_DIR "/dev/vinum" -#define VINUM_RDIR "/dev/rvinum" -#define VINUM_SUPERDEV_NAME VINUM_DIR"/control" - -/* Flags for all objects. Most of them only apply to - * specific objects, but we have space for all in any - * 32 bit flags word. */ -enum objflags { - VF_LOCKED = 1, /* somebody has locked access to this object */ - VF_LOCKING = 2, /* we want access to this object */ - VF_WRITETHROUGH = 8, /* volume: write through */ - VF_INITED = 0x10, /* unit has been initialized */ - VF_WLABEL = 0x20, /* label area is writable */ - VF_LABELLING = 0x40, /* unit is currently being labelled */ - VF_WANTED = 0x80, /* someone is waiting to obtain a lock */ - VF_RAW = 0x100, /* raw volume (no file system) */ - VF_LOADED = 0x200, /* module is loaded */ - VF_CONFIGURING = 0x400, /* somebody is changing the config */ - VF_WILL_CONFIGURE = 0x800, /* somebody wants to change the config */ - VF_CONFIG_INCOMPLETE = 0x1000, /* haven't finished changing the config */ - VF_CONFIG_SETUPSTATE = 0x2000, /* set a volume up if all plexes are empty */ - VF_READING_CONFIG = 0x4000, /* we're reading config database from disk */ - VF_KERNELOP = 0x8000, /* we're performing ops from kernel space */ - VF_NEWBORN = 0x10000, /* for objects: we've just created it */ - VF_CONFIGURED = 0x20000, /* for drives: we read the config */ -}; - -/* Global configuration information for the vinum subsystem */ -struct _vinum_conf { - /* Pointers to vinum structures */ - struct drive *drive; - struct sd *sd; - struct plex *plex; - struct volume *volume; - - /* the number allocated */ - int drives_allocated; - int subdisks_allocated; - int plexes_allocated; - int volumes_allocated; - - /* and the number currently in use */ - int drives_used; - int subdisks_used; - int plexes_used; - int volumes_used; - - int flags; - int opencount; /* number of times we've been opened */ -#if VINUMDEBUG - int lastrq; - struct buf *lastbuf; - struct rqinfo **rqipp; - struct rqinfo *rqinfop; -#endif -}; - -/* Use these defines to simplify code */ -#define DRIVE vinum_conf.drive -#define SD vinum_conf.sd -#define PLEX vinum_conf.plex -#define VOL vinum_conf.volume -#define VFLAGS vinum_conf.flags - -/* Slice header - - * Vinum drives start with this structure: - * - *\ Sector - * |--------------------------------------| - * | PDP-11 memorial boot block | 0 - * |--------------------------------------| - * | Disk label, maybe | 1 - * |--------------------------------------| - * | Slice definition (vinum_hdr) | 2 - * |--------------------------------------| - * | | - * | Configuration info, first copy | 3 - * | | - * |--------------------------------------| - * | | - * | Configuration info, second copy | 3 + size of config - * | | - * |--------------------------------------| - */ - -/* Sizes and offsets of our information */ -enum { - VINUM_LABEL_OFFSET = 4096, /* offset of vinum label */ - VINUMHEADERLEN = 512, /* size of vinum label */ - VINUM_CONFIG_OFFSET = 4608, /* offset of first config copy */ - MAXCONFIG = 65536, /* and size of config copy */ - DATASTART = (MAXCONFIG * 2 + VINUM_CONFIG_OFFSET) / DEV_BSIZE /* this is where the data starts */ -}; - -/* hostname is 256 bytes long, but we don't need to shlep - * multiple copies in vinum. We use the host name just - * to identify this system, and 32 bytes should be ample - * for that purpose */ - -struct vinum_label { - char sysname[VINUMHOSTNAMELEN]; /* system name at time of creation */ - char name[MAXDRIVENAME]; /* our name of the drive */ - struct timeval date_of_birth; /* the time it was created */ - struct timeval last_update; /* and the time of last update */ - off_t drive_size; /* total size in bytes of the drive. - * This value includes the headers */ -}; - -struct vinum_hdr { - long long magic; /* we're long on magic numbers */ - /* XXX Get these right for big-endian */ -#define VINUM_MAGIC 22322600044678729LL /* should be this */ -#define VINUM_NOMAGIC 22322600044678990LL /* becomes this after obliteration */ - int config_length; /* size in bytes of each copy of the - * configuration info. - * This must be a multiple of the sector size. */ - - struct vinum_label label; /* unique label */ -}; - -/* Information returned from read_drive_label */ -enum drive_label_info { - DL_CANT_OPEN, /* invalid partition */ - DL_NOT_OURS, /* valid partition, but no vinum label */ - DL_DELETED_LABEL, /* valid partition, deleted label found */ - DL_WRONG_DRIVE, /* drive name doesn't match */ - DL_OURS /* valid partition and label found */ -}; - -/*** Drive definitions ***/ -/* A drive corresponds to a disk slice. We use a different term to show - * the difference in usage: it doesn't have to be a slice, and could - * theroretically be a complete, unpartitioned disk */ - -struct drive { - enum drivestate state; /* current state */ - int flags; /* flags */ - int subdisks_allocated; /* number of entries in sd */ - int subdisks_used; /* and the number used */ - int blocksize; /* size of fs blocks */ - int pid; /* of locker */ - u_int64_t sectors_available; /* number of sectors still available */ - int secsperblock; - int lasterror; /* last error on drive */ - int driveno; /* index of drive in vinum_conf */ - int opencount; /* number of up subdisks */ - u_int64_t reads; /* number of reads on this drive */ - u_int64_t writes; /* number of writes on this drive */ - u_int64_t bytes_read; /* number of bytes read */ - u_int64_t bytes_written; /* number of bytes written */ - dev_t dev; /* and device number */ - char devicename[MAXDRIVENAME]; /* name of the slice it's on */ - struct vnode *vp; /* vnode pointer */ - struct proc *p; - struct vinum_label label; /* and the label information */ - struct partinfo partinfo; /* partition information */ - int freelist_size; /* number of entries alloced in free list */ - int freelist_entries; /* number of entries used in free list */ - struct drive_freelist { /* sorted list of free space on drive */ - u_int64_t offset; - long sectors; - } *freelist; -}; - -/*** Subdisk definitions ***/ - -struct sd { - enum sdstate state; /* state */ - int flags; - int lasterror; /* last error occurred */ - /* offsets in blocks */ - int64_t driveoffset; /* offset on drive */ - /* plexoffset is the offset from the beginning of the - * plex to the very first part of the subdisk, in - * sectors. For striped and RAID-5 plexes, only - * the first stripe is located at this offset */ - int64_t plexoffset; /* offset in plex */ - u_int64_t sectors; /* and length in sectors */ - int plexno; /* index of plex, if it belongs */ - int driveno; /* index of the drive on which it is located */ - int sdno; /* our index in vinum_conf */ - int plexsdno; /* and our number in our plex - * (undefined if no plex) */ - int pid; /* pid of process which opened us */ - u_int64_t reads; /* number of reads on this subdisk */ - u_int64_t writes; /* number of writes on this subdisk */ - u_int64_t bytes_read; /* number of bytes read */ - u_int64_t bytes_written; /* number of bytes written */ - /* revive parameters */ - u_int64_t revived; /* block number of current revive request */ - int revive_blocksize; /* revive block size (bytes) */ - int revive_interval; /* and time to wait between transfers */ - struct request *waitlist; /* list of requests waiting on revive op */ - char name[MAXSDNAME]; /* name of subdisk */ -}; - -/*** Plex definitions ***/ - -/* kinds of plex organization */ -enum plexorg { - plex_disorg, /* disorganized */ - plex_concat, /* concatenated plex */ - plex_striped, /* striped plex */ - plex_raid5 /* RAID5 plex */ -}; - -struct plex { - enum plexorg organization; /* Plex organization */ - enum plexstate state; /* and current state */ - u_int64_t length; /* total length of plex (max offset, in blocks) */ - int flags; - int stripesize; /* size of stripe or raid band, in sectors */ - int subdisks; /* number of associated subdisks */ - int subdisks_allocated; /* number of subdisks allocated space for */ - int *sdnos; /* list of component subdisks */ - int plexno; /* index of plex in vinum_conf */ - int volno; /* index of volume */ - int volplexno; /* number of plex in volume */ - int pid; /* pid of process which opened us */ - /* Lock information */ - int locks; /* number of locks used */ - int alloclocks; /* number of locks allocated */ - struct rangelock *lock; /* ranges of locked addresses */ - /* Statistics */ - u_int64_t reads; /* number of reads on this plex */ - u_int64_t writes; /* number of writes on this plex */ - u_int64_t bytes_read; /* number of bytes read */ - u_int64_t bytes_written; /* number of bytes written */ - u_int64_t multiblock; /* requests that needed more than one block */ - u_int64_t multistripe; /* requests that needed more than one stripe */ - int sddowncount; /* number of subdisks down */ - char name[MAXPLEXNAME]; /* name of plex */ -}; - -/*** Volume definitions ***/ - - -struct volume { - enum volumestate state; /* current state */ - int plexes; /* number of plexes */ - int preferred_plex; /* plex to read from, -1 for round-robin */ - int last_plex_read; /* index of plex used for last read, - * for round-robin */ - dev_t devno; /* device number */ - int flags; /* status and configuration flags */ - int opencount; /* number of opens (all the same process) */ - int openflags; /* flags supplied to last open(2) */ - u_int64_t size; /* size of volume */ - int disk; /* disk index */ - int blocksize; /* logical block size */ - int active; /* number of outstanding requests active */ - int subops; /* and the number of suboperations */ - pid_t pid; /* pid of locker */ - /* Statistics */ - u_int64_t bytes_read; /* number of bytes read */ - u_int64_t bytes_written; /* number of bytes written */ - u_int64_t reads; /* number of reads on this volume */ - u_int64_t writes; /* number of writes on this volume */ - u_int64_t recovered_reads; /* reads recovered from another plex */ - /* Unlike subdisks in the plex, space for the plex pointers is static */ - int plex[MAXPLEX]; /* index of plexes */ - char name[MAXVOLNAME]; /* name of volume */ - struct disklabel label; /* for DIOCGPART */ -}; - -/* Table expansion. Expand table, which contains oldcount - * entries of type element, by increment entries, and change - * oldcount accordingly */ -#define EXPAND(table, element, oldcount, increment) \ -{ \ - expand_table ((void **) &table, \ - oldcount * sizeof (element), \ - (oldcount + increment) * sizeof (element) ); \ - oldcount += increment; \ - } - -/* Information on vinum's memory usage */ -struct meminfo { - int mallocs; /* number of malloced blocks */ - int total_malloced; /* total amount malloced */ - int highwater; /* maximum number of mallocs */ - struct mc *malloced; /* pointer to kernel table */ -}; - -struct mc { - int seq; - int size; - short line; - short flags; -#define ALLOC_KVA 1 /* allocated via kva calls */ - int *databuf; /* really vm_object_t */ - caddr_t address; - char file[16]; -}; - -/* These enums are used by the state transition - * routines. They're in bit map format: - * - * Bit 0: Other plexes in the volume are down - * Bit 1: Other plexes in the volume are up - * Bit 2: The current plex is up - * Maybe they should be local to - * state.c */ -enum volplexstate { - volplex_onlyusdown = 0, /* we're the only plex, and we're down */ - volplex_alldown, /* 1: another plex is down, and so are we */ - volplex_otherup, /* 2: another plex is up */ - volplex_otherupdown, /* other plexes are up and down */ - volplex_onlyus, /* 4: we're up and alone */ - volplex_onlyusup, /* only we are up, others are down */ - volplex_allup, /* all plexes are up */ - volplex_someup /* some plexes are up, including us */ -}; - -/* state map for plex */ -enum sdstates { - sd_emptystate = 1, - sd_downstate = 2, /* found an SD which is down */ - sd_crashedstate = 4, /* found an SD which is crashed */ - sd_obsoletestate = 8, /* found an SD which is obsolete */ - sd_stalestate = 16, /* found an SD which is stale */ - sd_rebornstate = 32, /* found an SD which is reborn */ - sd_upstate = 64, /* found an SD which is up */ - sd_initstate = 128, /* found an SD which is init */ - sd_otherstate = 256 /* found an SD in some other state */ -}; - -/* This is really just a parameter to pass to - * set_<foo>_state, but since it needs to be known - * in the external definitions, we need to define - * it here */ -enum setstateflags { - setstate_none = 0, /* no flags */ - setstate_force = 1, /* force the state change */ - setstate_configuring = 2, /* we're currently configuring, don't save */ -}; - -#ifdef VINUMDEBUG -/* Debugging stuff */ -enum debugflags { - DEBUG_ADDRESSES = 1, /* show buffer information during requests */ - DEBUG_NUMOUTPUT = 2, /* show the value of vp->v_numoutput */ - DEBUG_RESID = 4, /* go into debugger in complete_rqe */ - DEBUG_LASTREQS = 8, /* keep a circular buffer of last requests */ - DEBUG_REVIVECONFLICT = 16, /* print info about revive conflicts */ - DEBUG_REMOTEGDB = 256, /* go into remote gdb */ -}; - -#endif diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index b1d056fc8ba58..df8a606578ded 100644 --- a/sys/dev/vx/if_vx.c +++ b/sys/dev/vx/if_vx.c @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_vx.c,v 1.18 1998/07/13 09:52:53 bde Exp $ + * $Id: if_vx.c,v 1.17 1998/06/07 17:09:51 dfr Exp $ * */ @@ -131,6 +131,7 @@ static void vxsetfilter __P((struct vx_softc *)); static void vxgetlink __P((struct vx_softc *)); static void vxsetlink __P((struct vx_softc *)); /* int vxbusyeeprom __P((struct vx_softc *)); */ +/* void vxintr __P((void *)); */ struct vx_softc * vxalloc(unit) @@ -639,11 +640,10 @@ vxtxstat(sc) } void -vxintr(voidsc) - void *voidsc; +vxintr(sc) + struct vx_softc *sc; { register short status; - struct vx_softc *sc = voidsc; struct ifnet *ifp = &sc->arpcom.ac_if; for (;;) { diff --git a/sys/dev/vx/if_vxreg.h b/sys/dev/vx/if_vxreg.h index 688da0374649d..99708af18509e 100644 --- a/sys/dev/vx/if_vxreg.h +++ b/sys/dev/vx/if_vxreg.h @@ -452,5 +452,5 @@ extern struct vx_softc *vxalloc __P((int)); extern void vxfree __P((struct vx_softc *)); extern int vxattach __P((struct vx_softc *)); extern void vxstop __P((struct vx_softc *)); -extern void vxintr __P((void *)); +extern void vxintr __P((struct vx_softc *)); extern int vxbusyeeprom __P((struct vx_softc *)); |
