Import tagging code and try to resolve locking problem.
authorsmurph <smurph@openbsd.org>
Tue, 4 Apr 2000 03:48:46 +0000 (03:48 +0000)
committersmurph <smurph@openbsd.org>
Tue, 4 Apr 2000 03:48:46 +0000 (03:48 +0000)
sys/dev/ic/aic7xxx.c
sys/dev/ic/aic7xxxreg.h
sys/dev/microcode/aic7xxx/aic7xxx.reg
sys/dev/microcode/aic7xxx/aic7xxx.seq
sys/dev/microcode/aic7xxx/aic7xxx_seq.h

index 782a7a2..5c4a961 100644 (file)
@@ -33,7 +33,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.c,v 1.40 2000/01/07 23:08:17 gibbs Exp $
- * $OpenBSD: aic7xxx.c,v 1.19 2000/03/22 02:48:47 smurph Exp $
+ * $OpenBSD: aic7xxx.c,v 1.20 2000/04/04 03:48:47 smurph Exp $
  */
 /*
  * A few notes on features of the driver.
@@ -323,6 +323,10 @@ STATIC void        ahc_set_width __P((struct ahc_softc *ahc,
                              u_int width, u_int type, int paused, int done));
 STATIC void    ahc_set_tags __P((struct ahc_softc *ahc,
                                  struct ahc_devinfo *devinfo,int enable));
+STATIC int      ahc_istagged_device __P((struct ahc_softc *ahc,
+                                        struct scsi_xfer *xs));
+STATIC void     ahc_check_tags __P((struct ahc_softc *ahc,
+                                   struct scsi_xfer *xs));
 STATIC void    ahc_construct_sdtr __P((struct ahc_softc *ahc,
                                   u_int period, u_int offset));
 STATIC void    ahc_construct_wdtr __P((struct ahc_softc *ahc, u_int bus_width));
@@ -619,6 +623,12 @@ ahcfreescb(ahc, scb)
        int opri;
 
        hscb = scb->hscb;
+
+#ifdef AHC_DEBUG
+       if (ahc_debug & AHC_SHOWSCBALLOC)
+               printf("%s: free SCB tag %x\n", ahc_name(ahc), hscb->tag);
+#endif
+
        opri = splbio();
 
        if ((ahc->flags & AHC_RESOURCE_SHORTAGE) != 0 ||
@@ -633,6 +643,7 @@ ahcfreescb(ahc, scb)
        hscb->status = 0;
 
        SLIST_INSERT_HEAD(&ahc->scb_data->free_scbs, scb, links);
+
        splx(opri);
 }
 
@@ -675,7 +686,7 @@ ahc_createdmamem(ahc, size, mapp, vaddr, baddr, seg, nseg, what)
        int *nseg;
        const char *what;
 {
-       int error, rseg, level = 0;
+       int error, level = 0;
        int dma_flags = BUS_DMA_NOWAIT;
        bus_dma_tag_t tag = ahc->sc_dmat;
        const char *myname = ahc_name(ahc);
@@ -713,12 +724,7 @@ ahc_createdmamem(ahc, size, mapp, vaddr, baddr, seg, nseg, what)
                goto out;
         }
 
-       *baddr = seg[0].ds_addr;
-
-       if (bootverbose)
-               printf("%s: dmamem for %s at phys %lx virt %lx nseg %d size %d\n",
-                      myname, what, (unsigned long)*baddr,
-                      (unsigned long)*vaddr, *nseg, size);
+       *baddr = (*mapp)->dm_segs[0].ds_addr;
        return 0;
 out:
        switch (level) {
@@ -729,7 +735,7 @@ out:
                bus_dmamem_unmap(tag, *vaddr, size);
                /* FALLTHROUGH */
        case 1:
-               bus_dmamem_free(tag, seg, rseg);
+               bus_dmamem_free(tag, seg, *nseg);
                break;
        default:
                break;
@@ -821,8 +827,8 @@ static const int num_phases = (sizeof(phase_table)/sizeof(phase_table[0])) - 1;
  */
 #define AHC_SYNCRATE_DT                0
 #define AHC_SYNCRATE_ULTRA2    1
-#define AHC_SYNCRATE_ULTRA     2
-#define AHC_SYNCRATE_FAST      5
+#define AHC_SYNCRATE_ULTRA     3
+#define AHC_SYNCRATE_FAST      6
 static struct ahc_syncrate ahc_syncrates[] = {
       /* ultra2    fast/ultra  period     rate */
        { 0x42,      0x000,      9,      "80.0" },
@@ -1505,7 +1511,7 @@ ahc_attach(ahc)
                        ahc->sc_link.adapter_buswidth = 16;
        }
 
-/*
+       /*
         * ask the adapter what subunits are present
         */
        if ((ahc->flags & AHC_CHANNEL_B_PRIMARY) == 0) {
@@ -2026,12 +2032,12 @@ ahc_handle_seqint(ahc, intstat)
                                        /* XXX Ever executed??? */
                                        ahc_setup_target_msgin(ahc, &devinfo);
                        }
-                       }
+               }
 
                /* Pass a NULL path so that handlers generate their own */
                ahc_handle_message_phase(ahc, /*path*/NULL);
                break;
-               }
+       }
        case PERR_DETECTED:
        {
                /*
@@ -2352,6 +2358,7 @@ ahc_handle_scsiint(ahc, intstat)
                                               SCB_LUN(scb), tag,
                                               ROLE_INITIATOR,
                                               XS_DRIVER_STUFFUP);
+                               sc_print_addr(scb->xs->sc_link);
                        } else {
                                /*
                                 * We had not fully identified this connection,
@@ -3415,7 +3422,7 @@ ahc_done(ahc, scb)
        target = sc_link->target;
        
        if (xs->datalen) {
-               int op;
+               bus_dmasync_op_t op;
        
                if ((xs->flags & SCSI_DATA_IN) != 0)
                        op = BUS_DMASYNC_POSTREAD;
@@ -3510,6 +3517,7 @@ ahc_done(ahc, scb)
                splx(s);
        } else {
                xs->flags |= ITSDONE;
+               ahc_check_tags(ahc, xs);
                scsi_done(xs);
        }
 
@@ -3639,6 +3647,9 @@ ahc_init(ahc)
        for (i = 0; i < 256; i++)
                ahc->qoutfifo[i] = SCB_LIST_NULL;
 
+       bus_dmamap_sync(ahc->sc_dmat, ahc->shared_data_dmamap,
+                       BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
+       
        /*
         * Allocate a tstate to house information for our
         * initiator presence on the bus as well as the user
@@ -4080,6 +4091,9 @@ ahc_scsi_cmd(xs)
                goto get_scb;
        }
 
+       /* determine safety of software queueing */
+       dontqueue = xs->flags & SCSI_POLL;
+       
        /*
         * If no new requests are accepted, just insert into the
         * private queue to wait for our turn.
@@ -4088,7 +4102,8 @@ ahc_scsi_cmd(xs)
 
        if (ahc->queue_blocked ||
            ahc->devqueue_blocked[xs->sc_link->target] ||
-           ahc_index_busy_tcl(ahc, tcl, FALSE) != SCB_LIST_NULL) {
+           (!ahc_istagged_device(ahc, xs) &&
+            ahc_index_busy_tcl(ahc, tcl, FALSE) != SCB_LIST_NULL)) {
                if (dontqueue) {
                        splx(s);
                        xs->error = XS_DRIVER_STUFFUP;
@@ -4171,7 +4186,10 @@ get_scb:
        hscb = scb->hscb;
        hscb->tcl = tcl;
 
-       ahc_busy_tcl(ahc, scb);
+       if (ahc_istagged_device(ahc, xs))
+               scb->hscb->control |= MSG_SIMPLE_Q_TAG;
+       else
+               ahc_busy_tcl(ahc, scb);
 
        splx(s);
  
@@ -4271,7 +4289,8 @@ ahc_execute_scb(arg, dm_segs, nsegments)
         * be aborted.
         */
        if (xs->flags & ITSDONE) {
-               ahc_index_busy_tcl(ahc, scb->hscb->tcl, TRUE);
+               if (!ahc_istagged_device(ahc, xs))
+                       ahc_index_busy_tcl(ahc, scb->hscb->tcl, TRUE);
                if (nsegments != 0)
                        bus_dmamap_unload(ahc->sc_dmat, scb->dmamap);
                ahcfreescb(ahc, scb);
@@ -4322,6 +4341,7 @@ ahc_execute_scb(arg, dm_segs, nsegments)
 
 #ifdef AHC_DEBUG
        if (ahc_debug & AHC_SHOWCMDS) {
+               sc_print_addr(xs->sc_link);
                printf("opcode %d tag %x len %d flags %x control %x fpos %u"
                    " rate %x\n",
                    xs->cmdstore.opcode, scb->hscb->tag, scb->hscb->datalen,
@@ -4395,7 +4415,8 @@ ahc_setup_data(ahc, xs, scb)
                            (xs->flags & SCSI_NOSLEEP) ?
                            BUS_DMA_NOWAIT : BUS_DMA_WAITOK);
                if (error) {
-                       ahc_index_busy_tcl(ahc, hscb->tcl, TRUE);
+                       if (!ahc_istagged_device(ahc, xs))
+                               ahc_index_busy_tcl(ahc, hscb->tcl, TRUE);
                        return (TRY_AGAIN_LATER);       /* XXX fvdl */
                }
                error = ahc_execute_scb(scb,
@@ -4923,6 +4944,7 @@ bus_reset:
                        printf("BDR message in message buffer\n");
                        active_scb->flags |=  SCB_DEVICE_RESET;
                            timeout(ahc_timeout, (caddr_t)active_scb, 2 * hz);
+                       unpause_sequencer(ahc);
                } else {
                        int      disconnected;
 
@@ -4998,6 +5020,11 @@ bus_reset:
                                printf("Queuing a BDR SCB\n");
                                ahc->qinfifo[ahc->qinfifonext++] =
                                    scb->hscb->tag;
+
+                               bus_dmamap_sync(ahc->sc_dmat,
+                                   ahc->shared_data_dmamap,
+                                   BUS_DMASYNC_PREWRITE);
+
                                if ((ahc->features & AHC_QUEUE_REGS) != 0) {
                                        ahc_outb(ahc, HNSCB_QOFF,
                                                 ahc->qinfifonext);
@@ -5740,3 +5767,73 @@ ahc_shutdown(void *arg)
        for (i = TARG_SCSIRATE; i < HA_274_BIOSCTRL; i++)
                ahc_outb(ahc, i, 0);
 }
+
+STATIC void
+ahc_check_tags(ahc, xs)
+struct ahc_softc *ahc;
+struct scsi_xfer *xs;
+{
+       struct scsi_inquiry_data *inq;
+       struct ahc_devinfo devinfo;
+       int target_id, our_id;
+
+       if (xs->cmd->opcode != INQUIRY || xs->error != XS_NOERROR)
+               return;
+
+       target_id = xs->sc_link->target;
+       our_id = SIM_SCSI_ID(ahc, xs->sc_link);
+
+       /*
+        * Sneak a look at the results of the SCSI Inquiry
+        * command and see if we can do Tagged queing.  This
+        * should really be done by the higher level drivers.
+        */
+       inq = (struct scsi_inquiry_data *)xs->data;
+       if ((inq->flags & SID_CmdQue) && !(ahc_istagged_device(ahc, xs))) {
+#ifdef AHC_DEBUG 
+               printf("%s: target %d using tagged queuing\n",
+                       ahc_name(ahc), xs->sc_link->target);
+#endif 
+               ahc_compile_devinfo(&devinfo,
+                   our_id, target_id, xs->sc_link->lun,        
+                   SIM_CHANNEL(ahc, xs->sc_link), ROLE_INITIATOR);
+               ahc_set_tags(ahc, &devinfo, TRUE);
+
+               if (ahc->scb_data->maxhscbs >= 16 ||
+                   (ahc->flags & AHC_PAGESCBS)) {
+                       /* Default to 16 tags */
+                       xs->sc_link->openings += 14;
+               } else {
+                       /*
+                        * Default to 4 tags on whimpy
+                        * cards that don't have much SCB
+                        * space and can't page.  This prevents
+                        * a single device from hogging all
+                        * slots.  We should really have a better
+                        * way of providing fairness.
+                        */
+                       xs->sc_link->openings += 2;
+               }
+       }
+}
+
+STATIC int
+ahc_istagged_device(ahc, xs)
+struct ahc_softc *ahc;
+struct scsi_xfer *xs;
+{
+       char channel;
+       u_int our_id, target;
+       struct tmode_tstate *tstate;
+       struct ahc_devinfo devinfo;
+
+       channel = SIM_CHANNEL(ahc, xs->sc_link);
+       our_id = SIM_SCSI_ID(ahc, xs->sc_link);
+       target = xs->sc_link->target;
+       (void)ahc_fetch_transinfo(ahc, channel, our_id, target, &tstate);
+
+       ahc_compile_devinfo(&devinfo, our_id, target,
+           xs->sc_link->lun, channel, ROLE_INITIATOR);
+
+       return (tstate->tagenable & devinfo.target_mask);
+}
index 7dde5dd..36ae18f 100644 (file)
 
 #define        HS_MAILBOX                      0x86
 #define                HOST_MAILBOX            0xf0
+#define                HOST_TQINPOS            0x80
+#define                HOST_REQ_INT            0x10
 #define                SEQ_MAILBOX             0x0f
 
 #define        DSPCISTATUS                     0x86
index e85bfc7..bb52bdb 100644 (file)
@@ -706,6 +706,8 @@ register HS_MAILBOX {
        address                 0x086
        mask    HOST_MAILBOX    0xF0
        mask    SEQ_MAILBOX     0x0F
+       mask    HOST_REQ_INT    0x10
+       mask    HOST_TQINPOS    0x80    /* Boundary at either 0 or 128 */
 }
 
 const  HOST_MAILBOX_SHIFT      4
index 6f5210b..152194f 100644 (file)
@@ -78,7 +78,7 @@ poll_for_work_loop:
                and     SEQCTL, ~PAUSEDIS;
        }
        test    SSTAT0, SELDO|SELDI     jnz selection;
-       test    SCSISEQ, ENSELO jnz poll_for_work;
+       test    SCSISEQ, ENSELO jnz poll_for_work_loop;
        if ((ahc->features & AHC_TWIN) != 0) {
                /*
                 * Twin channel devices cannot handle things like SELTO
@@ -359,7 +359,11 @@ host_target_message_loop:
 
 ident_messages_done:
                /* If ring buffer is full, return busy or queue full */
+               if ((ahc->features & AHC_HS_MAILBOX) != 0) {
+                       and     A, HOST_TQINPOS, HS_MAILBOX;
+               } else {
                mov     A, KERNEL_TQINPOS;
+               }
                cmp     TQINPOS, A jne tqinfifo_has_space;
                mvi     P_STATUS|BSYO call change_phase;
                cmp     INITIATOR_TAG, SCB_LIST_NULL je . + 3;
@@ -427,7 +431,8 @@ initiator_reselect:
  */
 select_out:
        /* Turn off the selection hardware */
-       and     SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP,SCSISEQ_TEMPLATE;
+       and     SCSISEQ, TEMODE|ENSELI|ENRSELI|ENAUTOATNP, SCSISEQ;
+/*and  SCSISEQ, ENSELI|ENRSELI|ENAUTOATNP,SCSISEQ_TEMPLATE;*/
        mvi     CLRSINT0, CLRSELDO;
        mov     SCBPTR, WAITING_SCBH;
        mov     WAITING_SCBH,SCB_NEXT;
index b4ac8f1..9a1bde5 100644 (file)
@@ -8,12 +8,12 @@ static u_int8_t seqprog[] = {
        0x32, 0x58, 0x00, 0x08,
        0xff, 0x6a, 0xd6, 0x09,
        0xff, 0x6a, 0xdc, 0x09,
-       0x00, 0x65, 0xea, 0x59,
+       0x00, 0x65, 0xec, 0x59,
        0xf7, 0x01, 0x02, 0x08,
        0xff, 0x4e, 0xc8, 0x08,
        0xbf, 0x60, 0xc0, 0x08,
        0x60, 0x0b, 0x7c, 0x68,
-       0x40, 0x00, 0x0c, 0x68,
+       0x40, 0x00, 0x12, 0x68,
        0x08, 0x1f, 0x3e, 0x10,
        0x60, 0x0b, 0x7c, 0x68,
        0x40, 0x00, 0x0c, 0x68,
@@ -26,12 +26,12 @@ static u_int8_t seqprog[] = {
        0x00, 0x4d, 0x12, 0x70,
        0x01, 0x4e, 0x9c, 0x18,
        0xbf, 0x60, 0xc0, 0x08,
-       0x00, 0x6a, 0x8e, 0x5d,
+       0x00, 0x6a, 0x90, 0x5d,
        0xff, 0x4e, 0xc8, 0x18,
-       0x01, 0x6a, 0x9a, 0x5c,
+       0x01, 0x6a, 0x9c, 0x5c,
        0xff, 0x53, 0x20, 0x09,
        0x0d, 0x6a, 0x6a, 0x00,
-       0x00, 0x53, 0x18, 0x5d,
+       0x00, 0x53, 0x1a, 0x5d,
        0x03, 0xb0, 0x52, 0x31,
        0xff, 0xb0, 0x52, 0x09,
        0xff, 0xb1, 0x54, 0x09,
@@ -64,18 +64,18 @@ static u_int8_t seqprog[] = {
        0x20, 0x01, 0x02, 0x00,
        0x02, 0xbb, 0x08, 0x34,
        0xff, 0xbb, 0x08, 0x0c,
-       0x40, 0x0b, 0x0e, 0x69,
+       0x40, 0x0b, 0x10, 0x69,
        0x20, 0x6a, 0x16, 0x00,
-       0x80, 0x0b, 0x00, 0x79,
+       0x80, 0x0b, 0x02, 0x79,
        0xa4, 0x6a, 0x06, 0x00,
        0x08, 0x6a, 0x18, 0x00,
        0x08, 0x36, 0x6c, 0x00,
        0xff, 0x51, 0xc8, 0x08,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x49, 0x6a, 0x02, 0x5d,
+       0x49, 0x6a, 0x04, 0x5d,
        0x01, 0x6a, 0xdc, 0x01,
        0x88, 0x6a, 0xcc, 0x00,
-       0x49, 0x6a, 0x02, 0x5d,
+       0x49, 0x6a, 0x04, 0x5d,
        0x01, 0x6a, 0x26, 0x01,
        0xf0, 0x19, 0x6e, 0x08,
        0xff, 0x37, 0xd8, 0x09,
@@ -87,135 +87,136 @@ static u_int8_t seqprog[] = {
        0x0f, 0x0f, 0x32, 0x09,
        0x0f, 0x05, 0x32, 0x09,
        0xff, 0x6a, 0xb4, 0x00,
-       0x10, 0x03, 0x54, 0x79,
-       0x00, 0x65, 0xf8, 0x58,
+       0x10, 0x03, 0x56, 0x79,
+       0x00, 0x65, 0xfa, 0x58,
        0x80, 0x66, 0xd4, 0x78,
        0xff, 0x66, 0xd8, 0x09,
        0xff, 0x66, 0x32, 0x09,
        0x40, 0x66, 0xb8, 0x68,
        0x01, 0x36, 0x6c, 0x00,
        0x10, 0x03, 0xde, 0x78,
-       0x00, 0x65, 0xf8, 0x58,
+       0x00, 0x65, 0xfa, 0x58,
        0xe0, 0x66, 0xc8, 0x18,
        0x00, 0x65, 0xde, 0x50,
        0xdd, 0x66, 0xc8, 0x18,
        0x00, 0x65, 0xde, 0x48,
        0xff, 0x66, 0xd8, 0x09,
        0xff, 0x66, 0x32, 0x09,
-       0x10, 0x03, 0x54, 0x79,
-       0x00, 0x65, 0xf8, 0x58,
+       0x10, 0x03, 0x56, 0x79,
+       0x00, 0x65, 0xfa, 0x58,
        0xff, 0x66, 0xd8, 0x09,
        0xff, 0x66, 0x32, 0x09,
        0xff, 0x66, 0xb4, 0x08,
        0x00, 0x65, 0xde, 0x40,
        0xa1, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
-       0x08, 0x52, 0x2c, 0x71,
+       0x08, 0x52, 0x2e, 0x71,
        0x02, 0x0b, 0xda, 0x78,
        0x00, 0x65, 0xd4, 0x40,
+       0x80, 0x86, 0xc8, 0x08,
        0xff, 0x50, 0xc8, 0x08,
-       0x00, 0x51, 0xee, 0x60,
-       0xc4, 0x6a, 0x1c, 0x5c,
-       0xff, 0x5a, 0xea, 0x70,
-       0x28, 0x6a, 0x32, 0x5c,
-       0x00, 0x65, 0x52, 0x41,
-       0x08, 0x6a, 0x32, 0x5c,
-       0x00, 0x65, 0x52, 0x41,
+       0x00, 0x51, 0xf0, 0x60,
+       0xc4, 0x6a, 0x1e, 0x5c,
+       0xff, 0x5a, 0xec, 0x70,
+       0x28, 0x6a, 0x34, 0x5c,
+       0x00, 0x65, 0x54, 0x41,
+       0x08, 0x6a, 0x34, 0x5c,
+       0x00, 0x65, 0x54, 0x41,
        0xff, 0x6a, 0xd8, 0x01,
        0xff, 0x6a, 0x32, 0x01,
        0x90, 0x36, 0x6c, 0x00,
-       0x10, 0x03, 0x48, 0x69,
-       0x00, 0x65, 0x2c, 0x41,
+       0x10, 0x03, 0x4a, 0x69,
+       0x00, 0x65, 0x2e, 0x41,
        0x08, 0x01, 0x02, 0x00,
-       0x02, 0x0b, 0xfa, 0x78,
+       0x02, 0x0b, 0xfc, 0x78,
        0xf7, 0x01, 0x02, 0x08,
        0xff, 0x06, 0xcc, 0x0c,
        0xf0, 0x19, 0x6e, 0x08,
-       0x08, 0x1f, 0x06, 0x79,
+       0x08, 0x1f, 0x08, 0x79,
        0x08, 0x37, 0x6e, 0x00,
        0x1a, 0x01, 0x02, 0x00,
        0x08, 0x6a, 0x18, 0x00,
        0x08, 0x11, 0x22, 0x00,
-       0x00, 0x65, 0xcc, 0x41,
-       0x32, 0x58, 0x00, 0x08,
+       0x00, 0x65, 0xce, 0x41,
+       0xb2, 0x00, 0x00, 0x08,
        0x40, 0x6a, 0x16, 0x00,
        0xff, 0x3e, 0x20, 0x09,
        0xff, 0xba, 0x7c, 0x08,
        0xff, 0xa1, 0x6e, 0x08,
-       0x80, 0x0b, 0xc2, 0x79,
-       0xe4, 0x6a, 0x1c, 0x5c,
+       0x80, 0x0b, 0xc4, 0x79,
+       0xe4, 0x6a, 0x1e, 0x5c,
        0x08, 0x6a, 0x18, 0x00,
        0x07, 0xa1, 0xc8, 0x08,
-       0x80, 0x64, 0x32, 0x5c,
-       0x20, 0xa0, 0x28, 0x79,
-       0x20, 0x6a, 0x32, 0x5c,
-       0x00, 0xb8, 0x32, 0x5c,
+       0x80, 0x64, 0x34, 0x5c,
+       0x20, 0xa0, 0x2a, 0x79,
+       0x20, 0x6a, 0x34, 0x5c,
+       0x00, 0xb8, 0x34, 0x5c,
        0xff, 0xb8, 0xb4, 0x08,
        0xff, 0xb4, 0x6c, 0x08,
-       0x10, 0x03, 0x44, 0x69,
-       0x08, 0x36, 0x5c, 0x69,
-       0x04, 0x36, 0x82, 0x69,
-       0x02, 0x36, 0x92, 0x69,
-       0x01, 0x36, 0x4a, 0x79,
-       0x00, 0x6a, 0x8e, 0x5d,
+       0x10, 0x03, 0x46, 0x69,
+       0x08, 0x36, 0x5e, 0x69,
+       0x04, 0x36, 0x84, 0x69,
+       0x02, 0x36, 0x94, 0x69,
+       0x01, 0x36, 0x4c, 0x79,
+       0x00, 0x6a, 0x90, 0x5d,
        0xff, 0x6a, 0xa4, 0x08,
-       0x00, 0x65, 0x9e, 0x59,
-       0x04, 0x52, 0x3c, 0x61,
+       0x00, 0x65, 0xa0, 0x59,
+       0x04, 0x52, 0x3e, 0x61,
        0x0d, 0x6a, 0x6a, 0x00,
-       0x00, 0xb9, 0x18, 0x5d,
-       0x00, 0x65, 0x2a, 0x41,
+       0x00, 0xb9, 0x1a, 0x5d,
+       0x00, 0x65, 0x2c, 0x41,
        0xa4, 0x6a, 0x06, 0x00,
-       0x00, 0x65, 0xf8, 0x58,
+       0x00, 0x65, 0xfa, 0x58,
        0x00, 0x65, 0xd4, 0x40,
-       0xe4, 0x6a, 0x1c, 0x5c,
-       0x20, 0x36, 0x50, 0x79,
-       0x02, 0x6a, 0x32, 0x5c,
-       0x04, 0x6a, 0x32, 0x5c,
-       0x01, 0x03, 0x52, 0x69,
+       0xe4, 0x6a, 0x1e, 0x5c,
+       0x20, 0x36, 0x52, 0x79,
+       0x02, 0x6a, 0x34, 0x5c,
+       0x04, 0x6a, 0x34, 0x5c,
+       0x01, 0x03, 0x54, 0x69,
        0xff, 0x6a, 0x06, 0x08,
        0x01, 0x6a, 0x7a, 0x00,
-       0x00, 0x65, 0x9e, 0x59,
+       0x00, 0x65, 0xa0, 0x59,
        0x00, 0x65, 0x0c, 0x40,
-       0x84, 0x6a, 0x1c, 0x5c,
-       0x00, 0x65, 0xf8, 0x58,
+       0x84, 0x6a, 0x1e, 0x5c,
+       0x00, 0x65, 0xfa, 0x58,
        0xff, 0x66, 0xc8, 0x08,
        0xff, 0x64, 0xd8, 0x09,
        0xff, 0x64, 0x32, 0x09,
        0x5b, 0x64, 0xc8, 0x28,
        0x20, 0x64, 0xca, 0x18,
        0xff, 0x6c, 0xc8, 0x08,
-       0xff, 0x64, 0x7e, 0x79,
+       0xff, 0x64, 0x80, 0x79,
        0x08, 0x01, 0x02, 0x00,
-       0x02, 0x0b, 0x70, 0x79,
-       0x01, 0x64, 0x76, 0x61,
+       0x02, 0x0b, 0x72, 0x79,
+       0x01, 0x64, 0x78, 0x61,
        0xf7, 0x01, 0x02, 0x08,
        0xff, 0x06, 0xd8, 0x09,
        0xff, 0x06, 0x32, 0x09,
        0xff, 0x64, 0xc8, 0x18,
-       0xff, 0x64, 0x6e, 0x69,
+       0xff, 0x64, 0x70, 0x69,
        0xf7, 0x36, 0x6c, 0x08,
-       0x00, 0x65, 0x2c, 0x41,
-       0x01, 0xb5, 0x8a, 0x79,
+       0x00, 0x65, 0x2e, 0x41,
+       0x01, 0xb5, 0x8c, 0x79,
        0x00, 0x6a, 0x7a, 0x00,
-       0x44, 0x6a, 0x1c, 0x5c,
-       0x00, 0x65, 0x8e, 0x41,
+       0x44, 0x6a, 0x1e, 0x5c,
+       0x00, 0x65, 0x90, 0x41,
        0x40, 0x6a, 0x7a, 0x00,
-       0x04, 0x6a, 0x1c, 0x5c,
+       0x04, 0x6a, 0x1e, 0x5c,
        0x00, 0x6a, 0x72, 0x58,
-       0x00, 0x65, 0x04, 0x42,
-       0xc4, 0x6a, 0x1c, 0x5c,
+       0x00, 0x65, 0x06, 0x42,
+       0xc4, 0x6a, 0x1e, 0x5c,
        0xc0, 0x6a, 0x7a, 0x00,
-       0x00, 0xa2, 0x32, 0x5c,
+       0x00, 0xa2, 0x34, 0x5c,
        0xe4, 0x6a, 0x06, 0x00,
-       0x00, 0x6a, 0x32, 0x5c,
-       0x00, 0x65, 0x52, 0x41,
-       0x10, 0x36, 0xa2, 0x69,
-       0x00, 0xb9, 0x98, 0x43,
+       0x00, 0x6a, 0x34, 0x5c,
+       0x00, 0x65, 0x54, 0x41,
+       0x10, 0x36, 0xa4, 0x69,
+       0x00, 0xb9, 0x9a, 0x43,
        0x18, 0x6a, 0xda, 0x01,
        0xff, 0x69, 0xd8, 0x09,
        0x1c, 0x6a, 0xd0, 0x01,
        0x09, 0xee, 0xdc, 0x01,
-       0x80, 0xee, 0xaa, 0x79,
+       0x80, 0xee, 0xac, 0x79,
        0xff, 0x6a, 0xdc, 0x09,
        0x01, 0x93, 0x26, 0x01,
        0x03, 0x6a, 0x2a, 0x01,
@@ -224,7 +225,7 @@ static u_int8_t seqprog[] = {
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0x7e, 0x5d,
+       0x00, 0x65, 0x80, 0x5d,
        0x01, 0x51, 0xa2, 0x18,
        0x02, 0x6a, 0x22, 0x05,
        0x08, 0x6a, 0x72, 0x58,
@@ -232,19 +233,19 @@ static u_int8_t seqprog[] = {
        0x08, 0x11, 0x22, 0x00,
        0x80, 0x6a, 0x68, 0x00,
        0x80, 0x36, 0x6c, 0x00,
-       0x00, 0x65, 0xe6, 0x5c,
+       0x00, 0x65, 0xe8, 0x5c,
        0xff, 0x3d, 0xc8, 0x08,
-       0xbf, 0x64, 0x04, 0x7a,
-       0x80, 0x64, 0xd8, 0x72,
-       0xa0, 0x64, 0x12, 0x73,
-       0xc0, 0x64, 0x0a, 0x73,
-       0xe0, 0x64, 0x5a, 0x73,
+       0xbf, 0x64, 0x06, 0x7a,
+       0x80, 0x64, 0xda, 0x72,
+       0xa0, 0x64, 0x14, 0x73,
+       0xc0, 0x64, 0x0c, 0x73,
+       0xe0, 0x64, 0x5c, 0x73,
        0x01, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0xcc, 0x41,
+       0x00, 0x65, 0xce, 0x41,
        0xf7, 0x11, 0x22, 0x08,
        0xff, 0x06, 0xd4, 0x08,
        0xf7, 0x01, 0x02, 0x08,
-       0x09, 0x0c, 0xe4, 0x79,
+       0x09, 0x0c, 0xe6, 0x79,
        0x08, 0x0c, 0x0c, 0x68,
        0x01, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0x26, 0x09,
@@ -257,27 +258,27 @@ static u_int8_t seqprog[] = {
        0x03, 0xa9, 0x18, 0x31,
        0x03, 0xa9, 0x10, 0x30,
        0x08, 0x6a, 0xcc, 0x00,
-       0xa9, 0x6a, 0xfc, 0x5c,
+       0xa9, 0x6a, 0xfe, 0x5c,
        0x01, 0xa9, 0xb2, 0x08,
-       0x00, 0x65, 0x26, 0x42,
+       0x00, 0x65, 0x28, 0x42,
        0xa8, 0x6a, 0x6a, 0x00,
        0x79, 0x6a, 0x6a, 0x00,
-       0x40, 0x3d, 0x0c, 0x6a,
+       0x40, 0x3d, 0x0e, 0x6a,
        0x04, 0x35, 0x6a, 0x00,
-       0x00, 0x65, 0x54, 0x5c,
+       0x00, 0x65, 0x56, 0x5c,
        0x80, 0x6a, 0xd4, 0x01,
-       0x20, 0x36, 0xf6, 0x69,
+       0x20, 0x36, 0xf8, 0x69,
        0x20, 0x36, 0x6c, 0x00,
        0x07, 0xac, 0x10, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0xac, 0x6a, 0xf4, 0x5c,
+       0xac, 0x6a, 0xf6, 0x5c,
        0x01, 0xb0, 0xb2, 0x08,
        0x03, 0x8c, 0x10, 0x30,
-       0x00, 0x65, 0xee, 0x5c,
+       0x00, 0x65, 0xf0, 0x5c,
        0x05, 0xa3, 0x70, 0x30,
        0x38, 0x6a, 0xcc, 0x00,
-       0xa3, 0x6a, 0xf8, 0x5c,
-       0xff, 0x38, 0x36, 0x6a,
+       0xa3, 0x6a, 0xfa, 0x5c,
+       0xff, 0x38, 0x38, 0x6a,
        0x80, 0x02, 0x04, 0x00,
        0xe7, 0x35, 0x6a, 0x08,
        0x03, 0x69, 0x18, 0x31,
@@ -285,352 +286,352 @@ static u_int8_t seqprog[] = {
        0xff, 0x6a, 0x10, 0x00,
        0xff, 0x6a, 0x12, 0x00,
        0xff, 0x6a, 0x14, 0x00,
-       0x01, 0x38, 0x40, 0x62,
+       0x01, 0x38, 0x42, 0x62,
        0x02, 0xfc, 0xf8, 0x01,
-       0x80, 0x0b, 0x3e, 0x7a,
-       0x04, 0x35, 0x40, 0x7a,
+       0x80, 0x0b, 0x40, 0x7a,
+       0x04, 0x35, 0x42, 0x7a,
        0xbf, 0x35, 0x6a, 0x08,
        0xff, 0x69, 0xca, 0x08,
        0xff, 0x35, 0x26, 0x09,
-       0x04, 0x0b, 0x44, 0x6a,
-       0x04, 0x0b, 0x4c, 0x6a,
-       0x10, 0x0c, 0x46, 0x7a,
-       0x00, 0x35, 0x40, 0x5c,
-       0x80, 0x02, 0xb4, 0x6a,
-       0xff, 0x08, 0x9a, 0x6a,
-       0xff, 0x09, 0x9a, 0x6a,
-       0xff, 0x0a, 0x9a, 0x6a,
+       0x04, 0x0b, 0x46, 0x6a,
+       0x04, 0x0b, 0x4e, 0x6a,
+       0x10, 0x0c, 0x48, 0x7a,
+       0x00, 0x35, 0x42, 0x5c,
+       0x80, 0x02, 0xb6, 0x6a,
+       0xff, 0x08, 0x9c, 0x6a,
+       0xff, 0x09, 0x9c, 0x6a,
+       0xff, 0x0a, 0x9c, 0x6a,
        0xff, 0x38, 0x70, 0x18,
-       0xff, 0x38, 0x9a, 0x7a,
-       0x80, 0xea, 0x70, 0x62,
+       0xff, 0x38, 0x9c, 0x7a,
+       0x80, 0xea, 0x72, 0x62,
        0xef, 0x38, 0xc8, 0x18,
        0x80, 0x6a, 0xc8, 0x00,
-       0x00, 0x65, 0x62, 0x4a,
+       0x00, 0x65, 0x64, 0x4a,
        0x33, 0x38, 0xc8, 0x28,
        0xff, 0x64, 0xd0, 0x09,
        0x04, 0x39, 0xc0, 0x31,
        0x09, 0x6a, 0xd6, 0x01,
-       0x80, 0xeb, 0x68, 0x7a,
+       0x80, 0xeb, 0x6a, 0x7a,
        0xf7, 0xeb, 0xd6, 0x09,
-       0x08, 0xeb, 0x6c, 0x6a,
+       0x08, 0xeb, 0x6e, 0x6a,
        0x01, 0x6a, 0xd6, 0x01,
        0x08, 0xe9, 0x10, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0x39, 0x6a, 0xfa, 0x5c,
+       0x39, 0x6a, 0xfc, 0x5c,
        0x08, 0x6a, 0x18, 0x01,
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
        0x0d, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0x7e, 0x5d,
-       0x88, 0x6a, 0x6e, 0x5d,
-       0x01, 0x8c, 0x86, 0x7a,
+       0x00, 0x65, 0x80, 0x5d,
+       0x88, 0x6a, 0x70, 0x5d,
+       0x01, 0x8c, 0x88, 0x7a,
        0x01, 0x59, 0xb2, 0x10,
        0x03, 0x8c, 0x10, 0x30,
-       0x00, 0x65, 0xee, 0x5c,
+       0x00, 0x65, 0xf0, 0x5c,
        0xff, 0x6a, 0xc8, 0x08,
        0x08, 0x39, 0x72, 0x18,
        0x00, 0x3a, 0x74, 0x20,
-       0x80, 0x0b, 0x26, 0x6a,
-       0x01, 0x0c, 0x92, 0x7a,
-       0x10, 0x0c, 0x26, 0x7a,
+       0x80, 0x0b, 0x28, 0x6a,
+       0x01, 0x0c, 0x94, 0x7a,
+       0x10, 0x0c, 0x28, 0x7a,
        0xff, 0x35, 0x26, 0x09,
-       0x04, 0x0b, 0x98, 0x6a,
-       0x00, 0x65, 0xbe, 0x5a,
+       0x04, 0x0b, 0x9a, 0x6a,
+       0x00, 0x65, 0xc0, 0x5a,
        0x03, 0x08, 0x52, 0x31,
        0xff, 0x08, 0x52, 0x09,
        0xff, 0x09, 0x54, 0x09,
        0xff, 0x0a, 0x56, 0x09,
        0xff, 0x38, 0x50, 0x09,
        0x12, 0x01, 0x02, 0x00,
-       0x04, 0x36, 0xcc, 0x79,
+       0x04, 0x36, 0xce, 0x79,
        0xfb, 0x36, 0x6c, 0x08,
-       0x04, 0x93, 0x2c, 0x79,
-       0x01, 0x0c, 0xae, 0x6a,
-       0x00, 0x65, 0x2c, 0x41,
-       0x00, 0x65, 0xcc, 0x41,
-       0x00, 0x65, 0xbe, 0x5a,
+       0x04, 0x93, 0x2e, 0x79,
+       0x01, 0x0c, 0xb0, 0x6a,
+       0x00, 0x65, 0x2e, 0x41,
+       0x00, 0x65, 0xce, 0x41,
+       0x00, 0x65, 0xc0, 0x5a,
        0x12, 0x01, 0x02, 0x00,
        0x7f, 0x02, 0x04, 0x08,
        0xf1, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0xcc, 0x41,
-       0x04, 0x93, 0xd0, 0x6a,
+       0x00, 0x65, 0xce, 0x41,
+       0x04, 0x93, 0xd2, 0x6a,
        0xdf, 0x93, 0x26, 0x09,
-       0x20, 0x93, 0xc2, 0x6a,
+       0x20, 0x93, 0xc4, 0x6a,
        0x02, 0x93, 0x26, 0x01,
-       0x01, 0x94, 0xc4, 0x7a,
-       0x01, 0x94, 0xc4, 0x7a,
-       0x01, 0x94, 0xc4, 0x7a,
-       0x01, 0x94, 0xc4, 0x7a,
-       0x01, 0x94, 0xc4, 0x7a,
-       0x10, 0x94, 0xd0, 0x6a,
+       0x01, 0x94, 0xc6, 0x7a,
+       0x01, 0x94, 0xc6, 0x7a,
+       0x01, 0x94, 0xc6, 0x7a,
+       0x01, 0x94, 0xc6, 0x7a,
+       0x01, 0x94, 0xc6, 0x7a,
+       0x10, 0x94, 0xd2, 0x6a,
        0xd7, 0x93, 0x26, 0x09,
-       0x08, 0x93, 0xd4, 0x6a,
+       0x08, 0x93, 0xd6, 0x6a,
        0xff, 0x6a, 0xd4, 0x0c,
-       0x00, 0x65, 0x54, 0x5c,
+       0x00, 0x65, 0x56, 0x5c,
        0xff, 0xb8, 0x18, 0x09,
        0x02, 0x6a, 0x1a, 0x31,
        0x03, 0x8c, 0x10, 0x30,
        0xef, 0xb8, 0xd4, 0x18,
-       0x00, 0x65, 0xee, 0x4a,
+       0x00, 0x65, 0xf0, 0x4a,
        0x01, 0x6a, 0x10, 0x31,
        0xa4, 0x6a, 0x26, 0x01,
        0x35, 0x6a, 0x26, 0x01,
        0x10, 0xc0, 0x32, 0x31,
-       0x00, 0x65, 0xfe, 0x42,
+       0x00, 0x65, 0x00, 0x43,
        0x04, 0xb4, 0x10, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0xb4, 0x6a, 0xf8, 0x5c,
+       0xb4, 0x6a, 0xfa, 0x5c,
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
-       0x00, 0x65, 0xee, 0x5c,
+       0x00, 0x65, 0xf0, 0x5c,
        0x3d, 0x6a, 0x26, 0x01,
        0xac, 0x6a, 0x26, 0x01,
-       0x04, 0x0b, 0x02, 0x6b,
-       0x10, 0x0c, 0xfe, 0x7a,
-       0x01, 0x03, 0x02, 0x6b,
+       0x04, 0x0b, 0x04, 0x6b,
+       0x10, 0x0c, 0x00, 0x7b,
+       0x01, 0x03, 0x04, 0x6b,
        0xc7, 0x93, 0x26, 0x09,
-       0x38, 0x93, 0x06, 0x6b,
-       0x00, 0x65, 0xcc, 0x41,
-       0x00, 0x65, 0x54, 0x5c,
+       0x38, 0x93, 0x08, 0x6b,
+       0x00, 0x65, 0xce, 0x41,
+       0x00, 0x65, 0x56, 0x5c,
        0xff, 0x06, 0x44, 0x09,
-       0x00, 0x65, 0xcc, 0x41,
+       0x00, 0x65, 0xce, 0x41,
        0x10, 0x3d, 0x06, 0x00,
        0xff, 0x34, 0xca, 0x08,
-       0x80, 0x65, 0x46, 0x63,
-       0x10, 0xa0, 0x68, 0x6b,
+       0x80, 0x65, 0x48, 0x63,
+       0x10, 0xa0, 0x6a, 0x6b,
        0xff, 0xa1, 0xdc, 0x08,
        0xff, 0x6e, 0xc8, 0x08,
-       0xf0, 0x86, 0x20, 0x7b,
+       0xf0, 0x86, 0x22, 0x7b,
        0x61, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x56, 0xca, 0x08,
-       0x08, 0xa1, 0x28, 0x7b,
+       0x08, 0xa1, 0x2a, 0x7b,
        0xff, 0x57, 0xca, 0x08,
-       0x80, 0xa1, 0x2c, 0x7b,
+       0x80, 0xa1, 0x2e, 0x7b,
        0xff, 0x57, 0xca, 0x08,
-       0x00, 0x65, 0x68, 0x6b,
+       0x00, 0x65, 0x6a, 0x6b,
        0x07, 0xa1, 0xca, 0x08,
        0x40, 0xa0, 0xc8, 0x08,
        0x00, 0x65, 0xca, 0x00,
        0x80, 0x65, 0xca, 0x00,
-       0x20, 0xa0, 0x4a, 0x7b,
+       0x20, 0xa0, 0x4c, 0x7b,
        0xff, 0x65, 0x0c, 0x08,
-       0x00, 0x65, 0xe6, 0x5c,
-       0xa0, 0x3d, 0x52, 0x63,
+       0x00, 0x65, 0xe8, 0x5c,
+       0xa0, 0x3d, 0x54, 0x63,
        0x23, 0xa0, 0x0c, 0x08,
-       0x00, 0x65, 0xe6, 0x5c,
-       0xa0, 0x3d, 0x52, 0x63,
-       0x00, 0xb9, 0x4a, 0x43,
-       0xff, 0x65, 0x4a, 0x63,
-       0x00, 0x65, 0x68, 0x43,
+       0x00, 0x65, 0xe8, 0x5c,
+       0xa0, 0x3d, 0x54, 0x63,
+       0x00, 0xb9, 0x4c, 0x43,
+       0xff, 0x65, 0x4c, 0x63,
+       0x00, 0x65, 0x6a, 0x43,
        0x40, 0x6a, 0x18, 0x00,
        0xff, 0x65, 0x0c, 0x08,
-       0x00, 0x65, 0xe6, 0x5c,
-       0xa0, 0x3d, 0x10, 0x73,
+       0x00, 0x65, 0xe8, 0x5c,
+       0xa0, 0x3d, 0x12, 0x73,
        0x40, 0x6a, 0x18, 0x00,
        0xff, 0x34, 0xa8, 0x08,
        0x08, 0x6a, 0x68, 0x00,
-       0x00, 0x65, 0xcc, 0x41,
-       0x64, 0x6a, 0x16, 0x5c,
-       0x80, 0x64, 0xc6, 0x6b,
-       0x04, 0x64, 0xa8, 0x73,
-       0x02, 0x64, 0xae, 0x73,
-       0x00, 0x6a, 0x74, 0x73,
-       0x03, 0x64, 0xc2, 0x73,
-       0x08, 0x64, 0x70, 0x73,
+       0x00, 0x65, 0xce, 0x41,
+       0x64, 0x6a, 0x18, 0x5c,
+       0x80, 0x64, 0xc8, 0x6b,
+       0x04, 0x64, 0xaa, 0x73,
+       0x02, 0x64, 0xb0, 0x73,
+       0x00, 0x6a, 0x76, 0x73,
+       0x03, 0x64, 0xc4, 0x73,
+       0x08, 0x64, 0x72, 0x73,
        0xa1, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0xe6, 0x5c,
-       0x08, 0x52, 0xce, 0x71,
-       0x00, 0x65, 0x68, 0x43,
+       0x00, 0x65, 0xe8, 0x5c,
+       0x08, 0x52, 0xd0, 0x71,
+       0x00, 0x65, 0x6a, 0x43,
        0xff, 0x06, 0xd4, 0x08,
-       0x00, 0x65, 0xcc, 0x41,
-       0xff, 0xa8, 0x78, 0x6b,
-       0xff, 0xa2, 0x90, 0x7b,
+       0x00, 0x65, 0xce, 0x41,
+       0xff, 0xa8, 0x7a, 0x6b,
+       0xff, 0xa2, 0x92, 0x7b,
        0x01, 0x6a, 0x6a, 0x00,
-       0x00, 0xb9, 0x18, 0x5d,
-       0xff, 0xa2, 0x90, 0x7b,
+       0x00, 0xb9, 0x1a, 0x5d,
+       0xff, 0xa2, 0x92, 0x7b,
        0x71, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
-       0x40, 0x52, 0x90, 0x63,
+       0x40, 0x52, 0x92, 0x63,
        0x0d, 0x6a, 0x6a, 0x00,
-       0x00, 0xb9, 0x18, 0x5d,
+       0x00, 0xb9, 0x1a, 0x5d,
        0xff, 0x3e, 0x74, 0x09,
        0xff, 0x90, 0x7c, 0x08,
        0x00, 0x65, 0x50, 0x58,
-       0x00, 0x65, 0xde, 0x41,
-       0x20, 0xa0, 0x94, 0x6b,
+       0x00, 0x65, 0xe0, 0x41,
+       0x20, 0xa0, 0x96, 0x6b,
        0xff, 0x37, 0xc8, 0x08,
-       0x00, 0xb9, 0x98, 0x5b,
-       0x00, 0x65, 0xde, 0x41,
-       0x00, 0x65, 0x86, 0x5d,
+       0x00, 0xb9, 0x9a, 0x5b,
+       0x00, 0x65, 0xe0, 0x41,
+       0x00, 0x65, 0x88, 0x5d,
        0xff, 0x65, 0xa4, 0x08,
        0xff, 0xf8, 0xc8, 0x08,
        0xff, 0x4f, 0xc8, 0x08,
-       0x00, 0x6a, 0xba, 0x5c,
-       0x00, 0x52, 0xd0, 0x5c,
+       0x00, 0x6a, 0xbc, 0x5c,
+       0x00, 0x52, 0xd2, 0x5c,
        0x01, 0x4f, 0x9e, 0x18,
        0x02, 0x6a, 0x22, 0x05,
        0x04, 0xa0, 0x40, 0x01,
-       0x00, 0x65, 0xa0, 0x5d,
-       0x00, 0x65, 0xde, 0x41,
-       0x20, 0x36, 0x70, 0x7b,
+       0x00, 0x65, 0xa2, 0x5d,
+       0x00, 0x65, 0xe0, 0x41,
+       0x20, 0x36, 0x72, 0x7b,
        0x05, 0x38, 0x46, 0x31,
        0x04, 0x14, 0x58, 0x31,
        0x03, 0xa9, 0x60, 0x31,
        0xa3, 0x6a, 0xcc, 0x00,
-       0x38, 0x6a, 0xf8, 0x5c,
+       0x38, 0x6a, 0xfa, 0x5c,
        0xac, 0x6a, 0xcc, 0x00,
-       0x14, 0x6a, 0xfa, 0x5c,
-       0xa9, 0x6a, 0xfc, 0x5c,
-       0x00, 0x65, 0x70, 0x43,
+       0x14, 0x6a, 0xfc, 0x5c,
+       0xa9, 0x6a, 0xfe, 0x5c,
+       0x00, 0x65, 0x72, 0x43,
        0xdf, 0x36, 0x6c, 0x08,
-       0x00, 0x65, 0x70, 0x43,
+       0x00, 0x65, 0x72, 0x43,
        0x0f, 0x64, 0xc8, 0x08,
        0x07, 0x64, 0xc8, 0x08,
        0x00, 0x37, 0x6e, 0x00,
        0xff, 0x6a, 0xa6, 0x00,
-       0x00, 0x65, 0x8a, 0x5c,
-       0xff, 0x52, 0xd8, 0x73,
-       0x40, 0x36, 0xe2, 0x7b,
-       0x00, 0x65, 0x78, 0x5c,
-       0x00, 0x65, 0xe4, 0x43,
+       0x00, 0x65, 0x8c, 0x5c,
+       0xff, 0x52, 0xda, 0x73,
+       0x40, 0x36, 0xe4, 0x7b,
+       0x00, 0x65, 0x7a, 0x5c,
+       0x00, 0x65, 0xe6, 0x43,
        0xff, 0x06, 0xd4, 0x08,
-       0x00, 0x65, 0xe6, 0x5c,
-       0xe0, 0x3d, 0x00, 0x64,
-       0x20, 0x12, 0x00, 0x64,
-       0x52, 0x6a, 0x0c, 0x5c,
-       0x00, 0x65, 0x72, 0x5c,
+       0x00, 0x65, 0xe8, 0x5c,
+       0xe0, 0x3d, 0x02, 0x64,
+       0x20, 0x12, 0x02, 0x64,
+       0x52, 0x6a, 0x0e, 0x5c,
+       0x00, 0x65, 0x74, 0x5c,
        0xff, 0x37, 0xc8, 0x08,
-       0x00, 0xa1, 0xf8, 0x63,
-       0x04, 0xa0, 0xf8, 0x7b,
+       0x00, 0xa1, 0xfa, 0x63,
+       0x04, 0xa0, 0xfa, 0x7b,
        0xfb, 0xa0, 0x40, 0x09,
        0x80, 0x36, 0x6c, 0x00,
        0x00, 0x65, 0x74, 0x58,
-       0x10, 0xa0, 0x70, 0x7b,
+       0x10, 0xa0, 0x72, 0x7b,
        0xef, 0xa0, 0x40, 0x09,
-       0xff, 0x6a, 0x04, 0x5c,
-       0x00, 0x65, 0x70, 0x43,
-       0x04, 0xa0, 0xfe, 0x7b,
-       0x00, 0x65, 0xa0, 0x5d,
-       0x00, 0x65, 0x00, 0x44,
-       0x00, 0x65, 0x86, 0x5d,
+       0xff, 0x6a, 0x06, 0x5c,
+       0x00, 0x65, 0x72, 0x43,
+       0x04, 0xa0, 0x00, 0x7c,
+       0x00, 0x65, 0xa2, 0x5d,
+       0x00, 0x65, 0x02, 0x44,
+       0x00, 0x65, 0x88, 0x5d,
        0x31, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0x70, 0x43,
+       0x00, 0x65, 0x72, 0x43,
        0x10, 0x3d, 0x06, 0x00,
        0xff, 0x65, 0x68, 0x0c,
        0xb1, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0x0e, 0x44,
+       0x00, 0x65, 0x10, 0x44,
        0xff, 0x06, 0xd4, 0x08,
-       0x01, 0x0c, 0x0e, 0x7c,
-       0x04, 0x0c, 0x08, 0x6c,
+       0x01, 0x0c, 0x10, 0x7c,
+       0x04, 0x0c, 0x0a, 0x6c,
        0xe0, 0x03, 0x7a, 0x08,
-       0xe0, 0x3d, 0x3c, 0x64,
+       0xe0, 0x3d, 0x3e, 0x64,
        0xff, 0x65, 0xcc, 0x08,
        0xff, 0x12, 0xda, 0x0c,
        0xff, 0x06, 0xd4, 0x0c,
-       0x01, 0x03, 0x1c, 0x6c,
+       0x01, 0x03, 0x1e, 0x6c,
        0x40, 0x03, 0xcc, 0x08,
        0xff, 0x65, 0x06, 0x08,
        0x40, 0x65, 0xc8, 0x08,
-       0x00, 0x66, 0x2a, 0x74,
-       0x40, 0x65, 0x2a, 0x7c,
-       0x00, 0x65, 0x2a, 0x5c,
+       0x00, 0x66, 0x2c, 0x74,
+       0x40, 0x65, 0x2c, 0x7c,
+       0x00, 0x65, 0x2c, 0x5c,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x0c,
        0x08, 0x01, 0x02, 0x00,
-       0x02, 0x0b, 0x34, 0x7c,
+       0x02, 0x0b, 0x36, 0x7c,
        0xff, 0x65, 0x0c, 0x08,
-       0x02, 0x0b, 0x38, 0x7c,
+       0x02, 0x0b, 0x3a, 0x7c,
        0xf7, 0x01, 0x02, 0x0c,
        0xe1, 0x6a, 0x22, 0x01,
-       0x00, 0x65, 0xcc, 0x41,
+       0x00, 0x65, 0xce, 0x41,
        0xff, 0x65, 0x26, 0x09,
-       0x01, 0x0b, 0x4c, 0x6c,
-       0x10, 0x0c, 0x42, 0x7c,
-       0x04, 0x93, 0x4a, 0x6c,
-       0x01, 0x94, 0x48, 0x7c,
-       0x10, 0x94, 0x4a, 0x6c,
+       0x01, 0x0b, 0x4e, 0x6c,
+       0x10, 0x0c, 0x44, 0x7c,
+       0x04, 0x93, 0x4c, 0x6c,
+       0x01, 0x94, 0x4a, 0x7c,
+       0x10, 0x94, 0x4c, 0x6c,
        0xc7, 0x93, 0x26, 0x09,
        0xff, 0x99, 0xd4, 0x08,
-       0x38, 0x93, 0x4e, 0x6c,
+       0x38, 0x93, 0x50, 0x6c,
        0xff, 0x6a, 0xd4, 0x0c,
-       0x80, 0x36, 0x52, 0x6c,
+       0x80, 0x36, 0x54, 0x6c,
        0x21, 0x6a, 0x22, 0x05,
        0xff, 0x65, 0x20, 0x09,
-       0xff, 0x52, 0x60, 0x64,
+       0xff, 0x52, 0x62, 0x64,
        0xff, 0x37, 0xc8, 0x08,
-       0xa1, 0x6a, 0x6c, 0x44,
+       0xa1, 0x6a, 0x6e, 0x44,
        0xff, 0x52, 0xc8, 0x08,
-       0xb9, 0x6a, 0x6c, 0x44,
+       0xb9, 0x6a, 0x6e, 0x44,
        0xff, 0x90, 0xa6, 0x08,
-       0xff, 0xba, 0x70, 0x74,
+       0xff, 0xba, 0x72, 0x74,
        0xff, 0xba, 0x20, 0x09,
        0xff, 0x65, 0xca, 0x18,
-       0x00, 0x6c, 0x64, 0x64,
+       0x00, 0x6c, 0x66, 0x64,
        0xff, 0x90, 0xca, 0x0c,
        0xff, 0x6a, 0xca, 0x04,
-       0x40, 0x36, 0x84, 0x7c,
-       0x00, 0x90, 0x58, 0x5c,
-       0xff, 0x65, 0x84, 0x74,
-       0xff, 0x53, 0x82, 0x74,
+       0x40, 0x36, 0x86, 0x7c,
+       0x00, 0x90, 0x5a, 0x5c,
+       0xff, 0x65, 0x86, 0x74,
+       0xff, 0x53, 0x84, 0x74,
        0xff, 0xba, 0xcc, 0x08,
        0xff, 0x53, 0x20, 0x09,
        0xff, 0x66, 0x74, 0x09,
        0xff, 0x65, 0x20, 0x0d,
        0xff, 0xba, 0x7e, 0x0c,
-       0x00, 0x6a, 0x8e, 0x5d,
+       0x00, 0x6a, 0x90, 0x5d,
        0x0d, 0x6a, 0x6a, 0x00,
-       0x00, 0x52, 0x18, 0x45,
-       0xff, 0x3f, 0xde, 0x74,
+       0x00, 0x52, 0x1a, 0x45,
+       0xff, 0x3f, 0xe0, 0x74,
        0xff, 0x6a, 0xa4, 0x00,
-       0x00, 0x3f, 0x58, 0x5c,
-       0xff, 0x65, 0xde, 0x74,
+       0x00, 0x3f, 0x5a, 0x5c,
+       0xff, 0x65, 0xe0, 0x74,
        0x40, 0x36, 0x6c, 0x00,
-       0x20, 0xa0, 0x98, 0x6c,
+       0x20, 0xa0, 0x9a, 0x6c,
        0xff, 0xb9, 0xa4, 0x0c,
        0xff, 0x6a, 0xa4, 0x04,
        0xff, 0x65, 0xa6, 0x08,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x45, 0x6a, 0x0c, 0x5d,
+       0x45, 0x6a, 0x0e, 0x5d,
        0x01, 0x6a, 0xd0, 0x01,
        0x09, 0x6a, 0xd6, 0x01,
-       0x80, 0xeb, 0xa4, 0x7c,
+       0x80, 0xeb, 0xa6, 0x7c,
        0x01, 0x6a, 0xd6, 0x01,
        0x01, 0xe9, 0xa6, 0x34,
        0x88, 0x6a, 0xcc, 0x00,
-       0x45, 0x6a, 0x0c, 0x5d,
+       0x45, 0x6a, 0x0e, 0x5d,
        0x01, 0x6a, 0x18, 0x01,
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
        0x0d, 0x6a, 0x26, 0x01,
-       0x00, 0x65, 0x7e, 0x5d,
+       0x00, 0x65, 0x80, 0x5d,
        0xff, 0x99, 0xa6, 0x0c,
        0xff, 0x65, 0xa6, 0x08,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x45, 0x6a, 0x0c, 0x5d,
+       0x45, 0x6a, 0x0e, 0x5d,
        0x01, 0x6a, 0xd0, 0x01,
        0x01, 0x6a, 0xdc, 0x05,
        0x88, 0x6a, 0xcc, 0x00,
-       0x45, 0x6a, 0x0c, 0x5d,
+       0x45, 0x6a, 0x0e, 0x5d,
        0x01, 0x6a, 0x18, 0x01,
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
        0x01, 0x6a, 0x26, 0x05,
        0x01, 0x65, 0xd8, 0x31,
        0x09, 0xee, 0xdc, 0x01,
-       0x80, 0xee, 0xd4, 0x7c,
+       0x80, 0xee, 0xd6, 0x7c,
        0xff, 0x6a, 0xdc, 0x0d,
        0xff, 0x65, 0x32, 0x09,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0x7e, 0x45,
+       0x00, 0x65, 0x80, 0x45,
        0xff, 0x37, 0xc8, 0x08,
-       0x02, 0x6a, 0x9a, 0x5c,
+       0x02, 0x6a, 0x9c, 0x5c,
        0xff, 0x53, 0xa4, 0x0c,
        0xb1, 0x6a, 0x22, 0x01,
-       0x01, 0x0c, 0xe6, 0x7c,
-       0x04, 0x0c, 0xe4, 0x6c,
+       0x01, 0x0c, 0xe8, 0x7c,
+       0x04, 0x0c, 0xe6, 0x6c,
        0xe0, 0x03, 0x06, 0x08,
        0xe0, 0x03, 0x7a, 0x0c,
        0xff, 0x8c, 0x10, 0x08,
@@ -645,7 +646,7 @@ static u_int8_t seqprog[] = {
        0xff, 0x6c, 0xda, 0x0c,
        0x3d, 0x64, 0xa6, 0x28,
        0x55, 0x64, 0xc8, 0x28,
-       0x00, 0x65, 0x0c, 0x45,
+       0x00, 0x65, 0x0e, 0x45,
        0x2e, 0x64, 0xa6, 0x28,
        0x66, 0x64, 0xc8, 0x28,
        0x00, 0x6c, 0xda, 0x18,
@@ -656,30 +657,30 @@ static u_int8_t seqprog[] = {
        0x00, 0x6c, 0xda, 0x24,
        0xff, 0x65, 0xc8, 0x08,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x41, 0x6a, 0x08, 0x5d,
+       0x41, 0x6a, 0x0a, 0x5d,
        0xff, 0x90, 0xe2, 0x09,
-       0x04, 0x35, 0x2a, 0x7d,
+       0x04, 0x35, 0x2c, 0x7d,
        0x30, 0x6a, 0xd0, 0x01,
        0x1d, 0x6a, 0xdc, 0x01,
-       0xdc, 0xee, 0x26, 0x65,
-       0x00, 0x65, 0x38, 0x45,
+       0xdc, 0xee, 0x28, 0x65,
+       0x00, 0x65, 0x3a, 0x45,
        0x1c, 0x6a, 0xd0, 0x01,
        0x01, 0x6a, 0xdc, 0x01,
        0x1c, 0xa0, 0xd8, 0x31,
        0x09, 0xee, 0xdc, 0x01,
-       0x80, 0xee, 0x32, 0x7d,
+       0x80, 0xee, 0x34, 0x7d,
        0x19, 0x6a, 0xdc, 0x01,
-       0xd8, 0xee, 0x36, 0x65,
+       0xd8, 0xee, 0x38, 0x65,
        0xff, 0x6a, 0xdc, 0x09,
-       0x18, 0xee, 0x3a, 0x6d,
+       0x18, 0xee, 0x3c, 0x6d,
        0xff, 0x6a, 0xd4, 0x0c,
        0x88, 0x6a, 0xcc, 0x00,
-       0x41, 0x6a, 0x08, 0x5d,
+       0x41, 0x6a, 0x0a, 0x5d,
        0x1c, 0x6a, 0x18, 0x01,
        0xff, 0x6a, 0x1a, 0x09,
        0xff, 0x6a, 0x1c, 0x09,
        0xff, 0x35, 0x26, 0x09,
-       0x04, 0x35, 0x62, 0x6d,
+       0x04, 0x35, 0x64, 0x6d,
        0xa0, 0x6a, 0xca, 0x00,
        0x1c, 0x65, 0xc8, 0x18,
        0xff, 0x6c, 0x32, 0x09,
@@ -689,14 +690,14 @@ static u_int8_t seqprog[] = {
        0xff, 0x6c, 0x32, 0x09,
        0xff, 0x6c, 0x32, 0x09,
        0xff, 0x6c, 0x32, 0x09,
-       0x00, 0x65, 0x50, 0x65,
+       0x00, 0x65, 0x52, 0x65,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0x7e, 0x5d,
-       0x04, 0x35, 0x52, 0x7c,
-       0xa0, 0x6a, 0x6e, 0x5d,
-       0x00, 0x65, 0x70, 0x5d,
-       0x00, 0x65, 0x70, 0x5d,
-       0x00, 0x65, 0x70, 0x45,
+       0x00, 0x65, 0x80, 0x5d,
+       0x04, 0x35, 0x54, 0x7c,
+       0xa0, 0x6a, 0x70, 0x5d,
+       0x00, 0x65, 0x72, 0x5d,
+       0x00, 0x65, 0x72, 0x5d,
+       0x00, 0x65, 0x72, 0x45,
        0xff, 0x65, 0xcc, 0x08,
        0xff, 0x99, 0xda, 0x08,
        0xff, 0x99, 0xda, 0x08,
@@ -705,20 +706,20 @@ static u_int8_t seqprog[] = {
        0xff, 0x99, 0xda, 0x08,
        0xff, 0x99, 0xda, 0x08,
        0xff, 0x99, 0xda, 0x0c,
-       0x08, 0x94, 0x7e, 0x7d,
+       0x08, 0x94, 0x80, 0x7d,
        0xf7, 0x93, 0x26, 0x09,
-       0x08, 0x93, 0x82, 0x6d,
+       0x08, 0x93, 0x84, 0x6d,
        0xff, 0x6a, 0xd4, 0x0c,
        0xff, 0x40, 0x74, 0x09,
        0xff, 0x6a, 0x72, 0x01,
        0xff, 0x90, 0x80, 0x0c,
        0xff, 0x6a, 0x72, 0x05,
-       0xff, 0x40, 0x9c, 0x65,
-       0xff, 0x3f, 0x94, 0x65,
+       0xff, 0x40, 0x9e, 0x65,
+       0xff, 0x3f, 0x96, 0x65,
        0xff, 0x6a, 0xca, 0x04,
        0xff, 0x3f, 0x20, 0x09,
        0x01, 0x6a, 0x6a, 0x00,
-       0x00, 0xb9, 0x18, 0x5d,
+       0x00, 0xb9, 0x1a, 0x5d,
        0xff, 0xba, 0x7e, 0x0c,
        0xff, 0x40, 0x20, 0x09,
        0xff, 0xba, 0x80, 0x0c,
@@ -747,7 +748,7 @@ static int ahc_patch14_func(struct ahc_softc *ahc);
 static int
 ahc_patch14_func(struct ahc_softc *ahc)
 {
-       return ((ahc->features & AHC_HS_MAILBOX) != 0);
+       return ((ahc->features & AHC_CMD_CHAN) == 0);
 }
 
 static int ahc_patch13_func(struct ahc_softc *ahc);
@@ -755,7 +756,7 @@ static int ahc_patch13_func(struct ahc_softc *ahc);
 static int
 ahc_patch13_func(struct ahc_softc *ahc)
 {
-       return ((ahc->features & AHC_CMD_CHAN) == 0);
+       return ((ahc->features & AHC_ULTRA2) == 0);
 }
 
 static int ahc_patch12_func(struct ahc_softc *ahc);
@@ -763,7 +764,7 @@ static int ahc_patch12_func(struct ahc_softc *ahc);
 static int
 ahc_patch12_func(struct ahc_softc *ahc)
 {
-       return ((ahc->features & AHC_ULTRA2) == 0);
+       return ((ahc->features & AHC_HS_MAILBOX) != 0);
 }
 
 static int ahc_patch11_func(struct ahc_softc *ahc);
@@ -888,7 +889,7 @@ struct patch {
        { ahc_patch9_func, 58, 2, 1 },
        { ahc_patch8_func, 60, 1, 2 },
        { ahc_patch0_func, 61, 1, 1 },
-       { ahc_patch7_func, 64, 64, 24 },
+       { ahc_patch7_func, 64, 65, 26 },
        { ahc_patch10_func, 64, 1, 1 },
        { ahc_patch1_func, 69, 3, 2 },
        { ahc_patch0_func, 72, 3, 1 },
@@ -910,96 +911,98 @@ struct patch {
        { ahc_patch0_func, 99, 1, 1 },
        { ahc_patch1_func, 102, 1, 2 },
        { ahc_patch0_func, 103, 1, 1 },
-       { ahc_patch1_func, 119, 1, 2 },
-       { ahc_patch0_func, 120, 1, 1 },
-       { ahc_patch10_func, 128, 7, 2 },
-       { ahc_patch3_func, 129, 2, 1 },
-       { ahc_patch7_func, 140, 85, 8 },
-       { ahc_patch5_func, 155, 1, 1 },
-       { ahc_patch1_func, 177, 1, 2 },
-       { ahc_patch0_func, 178, 1, 1 },
-       { ahc_patch1_func, 187, 1, 2 },
-       { ahc_patch0_func, 188, 1, 1 },
-       { ahc_patch1_func, 209, 6, 2 },
-       { ahc_patch0_func, 215, 8, 1 },
-       { ahc_patch10_func, 225, 20, 1 },
-       { ahc_patch8_func, 246, 1, 2 },
-       { ahc_patch0_func, 247, 2, 1 },
-       { ahc_patch8_func, 251, 2, 2 },
-       { ahc_patch0_func, 253, 3, 3 },
-       { ahc_patch1_func, 253, 1, 2 },
-       { ahc_patch0_func, 254, 2, 1 },
-       { ahc_patch8_func, 258, 1, 2 },
-       { ahc_patch0_func, 259, 1, 1 },
-       { ahc_patch1_func, 263, 1, 1 },
-       { ahc_patch1_func, 266, 1, 2 },
-       { ahc_patch0_func, 267, 2, 1 },
-       { ahc_patch12_func, 270, 2, 3 },
-       { ahc_patch1_func, 270, 1, 2 },
-       { ahc_patch0_func, 271, 1, 1 },
-       { ahc_patch1_func, 272, 1, 2 },
-       { ahc_patch0_func, 273, 2, 1 },
-       { ahc_patch8_func, 278, 1, 2 },
-       { ahc_patch0_func, 279, 4, 3 },
-       { ahc_patch1_func, 279, 1, 2 },
-       { ahc_patch0_func, 280, 3, 1 },
-       { ahc_patch8_func, 284, 1, 2 },
-       { ahc_patch0_func, 285, 3, 2 },
-       { ahc_patch7_func, 285, 2, 1 },
-       { ahc_patch8_func, 288, 5, 2 },
-       { ahc_patch0_func, 293, 1, 1 },
-       { ahc_patch1_func, 300, 13, 2 },
-       { ahc_patch0_func, 313, 8, 1 },
-       { ahc_patch12_func, 323, 2, 3 },
-       { ahc_patch1_func, 323, 1, 2 },
-       { ahc_patch0_func, 324, 1, 1 },
-       { ahc_patch7_func, 328, 1, 1 },
-       { ahc_patch8_func, 331, 2, 1 },
-       { ahc_patch8_func, 333, 1, 1 },
-       { ahc_patch1_func, 334, 1, 2 },
-       { ahc_patch0_func, 335, 3, 1 },
-       { ahc_patch8_func, 339, 1, 1 },
-       { ahc_patch7_func, 340, 5, 1 },
-       { ahc_patch8_func, 346, 2, 1 },
-       { ahc_patch8_func, 351, 13, 1 },
-       { ahc_patch10_func, 364, 96, 13 },
-       { ahc_patch1_func, 365, 11, 5 },
-       { ahc_patch12_func, 367, 1, 1 },
-       { ahc_patch8_func, 371, 1, 2 },
-       { ahc_patch0_func, 372, 1, 1 },
-       { ahc_patch0_func, 376, 4, 1 },
-       { ahc_patch12_func, 380, 2, 3 },
-       { ahc_patch13_func, 380, 1, 1 },
-       { ahc_patch0_func, 382, 1, 1 },
-       { ahc_patch14_func, 398, 3, 1 },
-       { ahc_patch3_func, 402, 2, 2 },
-       { ahc_patch0_func, 404, 2, 2 },
-       { ahc_patch15_func, 404, 2, 1 },
-       { ahc_patch4_func, 462, 1, 2 },
-       { ahc_patch0_func, 463, 1, 1 },
-       { ahc_patch2_func, 466, 1, 1 },
-       { ahc_patch10_func, 468, 58, 6 },
-       { ahc_patch1_func, 472, 3, 2 },
-       { ahc_patch0_func, 475, 5, 1 },
-       { ahc_patch15_func, 483, 1, 2 },
-       { ahc_patch0_func, 484, 1, 1 },
-       { ahc_patch5_func, 489, 1, 1 },
-       { ahc_patch7_func, 526, 16, 1 },
-       { ahc_patch12_func, 551, 1, 1 },
-       { ahc_patch1_func, 590, 7, 2 },
-       { ahc_patch0_func, 597, 8, 1 },
-       { ahc_patch1_func, 606, 4, 2 },
-       { ahc_patch0_func, 610, 6, 1 },
-       { ahc_patch1_func, 616, 4, 2 },
-       { ahc_patch0_func, 620, 3, 1 },
-       { ahc_patch13_func, 631, 10, 1 },
-       { ahc_patch7_func, 641, 3, 1 },
-       { ahc_patch1_func, 653, 18, 4 },
-       { ahc_patch16_func, 662, 4, 2 },
-       { ahc_patch0_func, 666, 2, 1 },
-       { ahc_patch0_func, 671, 32, 1 },
-       { ahc_patch5_func, 707, 3, 2 },
-       { ahc_patch0_func, 710, 1, 1 },
-       { ahc_patch5_func, 711, 9, 1 },
+       { ahc_patch12_func, 111, 1, 2 },
+       { ahc_patch0_func, 112, 1, 1 },
+       { ahc_patch1_func, 120, 1, 2 },
+       { ahc_patch0_func, 121, 1, 1 },
+       { ahc_patch10_func, 129, 7, 2 },
+       { ahc_patch3_func, 130, 2, 1 },
+       { ahc_patch7_func, 141, 85, 8 },
+       { ahc_patch5_func, 156, 1, 1 },
+       { ahc_patch1_func, 178, 1, 2 },
+       { ahc_patch0_func, 179, 1, 1 },
+       { ahc_patch1_func, 188, 1, 2 },
+       { ahc_patch0_func, 189, 1, 1 },
+       { ahc_patch1_func, 210, 6, 2 },
+       { ahc_patch0_func, 216, 8, 1 },
+       { ahc_patch10_func, 226, 20, 1 },
+       { ahc_patch8_func, 247, 1, 2 },
+       { ahc_patch0_func, 248, 2, 1 },
+       { ahc_patch8_func, 252, 2, 2 },
+       { ahc_patch0_func, 254, 3, 3 },
+       { ahc_patch1_func, 254, 1, 2 },
+       { ahc_patch0_func, 255, 2, 1 },
+       { ahc_patch8_func, 259, 1, 2 },
+       { ahc_patch0_func, 260, 1, 1 },
+       { ahc_patch1_func, 264, 1, 1 },
+       { ahc_patch1_func, 267, 1, 2 },
+       { ahc_patch0_func, 268, 2, 1 },
+       { ahc_patch13_func, 271, 2, 3 },
+       { ahc_patch1_func, 271, 1, 2 },
+       { ahc_patch0_func, 272, 1, 1 },
+       { ahc_patch1_func, 273, 1, 2 },
+       { ahc_patch0_func, 274, 2, 1 },
+       { ahc_patch8_func, 279, 1, 2 },
+       { ahc_patch0_func, 280, 4, 3 },
+       { ahc_patch1_func, 280, 1, 2 },
+       { ahc_patch0_func, 281, 3, 1 },
+       { ahc_patch8_func, 285, 1, 2 },
+       { ahc_patch0_func, 286, 3, 2 },
+       { ahc_patch7_func, 286, 2, 1 },
+       { ahc_patch8_func, 289, 5, 2 },
+       { ahc_patch0_func, 294, 1, 1 },
+       { ahc_patch1_func, 301, 13, 2 },
+       { ahc_patch0_func, 314, 8, 1 },
+       { ahc_patch13_func, 324, 2, 3 },
+       { ahc_patch1_func, 324, 1, 2 },
+       { ahc_patch0_func, 325, 1, 1 },
+       { ahc_patch7_func, 329, 1, 1 },
+       { ahc_patch8_func, 332, 2, 1 },
+       { ahc_patch8_func, 334, 1, 1 },
+       { ahc_patch1_func, 335, 1, 2 },
+       { ahc_patch0_func, 336, 3, 1 },
+       { ahc_patch8_func, 340, 1, 1 },
+       { ahc_patch7_func, 341, 5, 1 },
+       { ahc_patch8_func, 347, 2, 1 },
+       { ahc_patch8_func, 352, 13, 1 },
+       { ahc_patch10_func, 365, 96, 13 },
+       { ahc_patch1_func, 366, 11, 5 },
+       { ahc_patch13_func, 368, 1, 1 },
+       { ahc_patch8_func, 372, 1, 2 },
+       { ahc_patch0_func, 373, 1, 1 },
+       { ahc_patch0_func, 377, 4, 1 },
+       { ahc_patch13_func, 381, 2, 3 },
+       { ahc_patch14_func, 381, 1, 1 },
+       { ahc_patch0_func, 383, 1, 1 },
+       { ahc_patch12_func, 399, 3, 1 },
+       { ahc_patch3_func, 403, 2, 2 },
+       { ahc_patch0_func, 405, 2, 2 },
+       { ahc_patch15_func, 405, 2, 1 },
+       { ahc_patch4_func, 463, 1, 2 },
+       { ahc_patch0_func, 464, 1, 1 },
+       { ahc_patch2_func, 467, 1, 1 },
+       { ahc_patch10_func, 469, 58, 6 },
+       { ahc_patch1_func, 473, 3, 2 },
+       { ahc_patch0_func, 476, 5, 1 },
+       { ahc_patch15_func, 484, 1, 2 },
+       { ahc_patch0_func, 485, 1, 1 },
+       { ahc_patch5_func, 490, 1, 1 },
+       { ahc_patch7_func, 527, 16, 1 },
+       { ahc_patch13_func, 552, 1, 1 },
+       { ahc_patch1_func, 591, 7, 2 },
+       { ahc_patch0_func, 598, 8, 1 },
+       { ahc_patch1_func, 607, 4, 2 },
+       { ahc_patch0_func, 611, 6, 1 },
+       { ahc_patch1_func, 617, 4, 2 },
+       { ahc_patch0_func, 621, 3, 1 },
+       { ahc_patch14_func, 632, 10, 1 },
+       { ahc_patch7_func, 642, 3, 1 },
+       { ahc_patch1_func, 654, 18, 4 },
+       { ahc_patch16_func, 663, 4, 2 },
+       { ahc_patch0_func, 667, 2, 1 },
+       { ahc_patch0_func, 672, 32, 1 },
+       { ahc_patch5_func, 708, 3, 2 },
+       { ahc_patch0_func, 711, 1, 1 },
+       { ahc_patch5_func, 712, 9, 1 },
 
 };