All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch 24/28] Sync up drivers/scsi/aic7xxx
@ 2004-09-28 13:07 Luben Tuikov
  0 siblings, 0 replies; only message in thread
From: Luben Tuikov @ 2004-09-28 13:07 UTC (permalink / raw)
  To: SCSI Mailing List

Sync up drivers/scsi/aic7xxx/. (3367-3707)

Signed-off-by: Luben Tuikov <luben_tuikov@adaptec.com>

==== //depot/aic7xxx/aic7xxx/aic79xx.h#106 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.h ====
--- /tmp/tmp.27211.0	2004-09-27 13:36:51.779634848 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.h	2004-04-29 12:52:06.000000000 -0400
@@ -37,7 +37,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#106 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#107 $
   *
   * $FreeBSD$
   */
@@ -1065,7 +1065,6 @@
  {
  	uint16_t	tag;
  	uint8_t		sg_status;
-	uint8_t		pad[4];
  	uint8_t		valid_tag;
  };

==== //depot/aic7xxx/aic7xxx/aic79xx.reg#75 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.reg ====
--- /tmp/tmp.27211.1	2004-09-27 13:36:52.572514312 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.reg	2004-04-29 13:04:55.000000000 -0400
@@ -39,7 +39,7 @@
   *
   * $FreeBSD$
   */
-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#75 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $"

  /*
   * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -3968,6 +3968,7 @@
  const SG_SIZEOF download
  const PKT_OVERRUN_BUFOFFSET download
  const SCB_TRANSFER_SIZE	download
+const CACHELINE_MASK download

  /*
   * BIOS SCB offsets
==== //depot/aic7xxx/aic7xxx/aic79xx.seq#118 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq ====
--- /tmp/tmp.27211.2	2004-09-27 13:36:53.336398184 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq	2004-05-07 15:48:50.000000000 -0400
@@ -40,7 +40,7 @@
   * $FreeBSD$
   */

-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#118 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $"
  PATCH_ARG_LIST = "struct ahd_softc *ahd"
  PREFIX = "ahd_"

@@ -364,11 +364,11 @@
  	bmov	COMPLETE_SCB_DMAINPROG_HEAD, COMPLETE_SCB_HEAD, 2;
  	mvi	CCSCBCTL, CCSCBRESET;
  	bmov	SCBHADDR, QOUTFIFO_NEXT_ADDR, 4;
+	mov	A, QOUTFIFO_NEXT_ADDR;
  	bmov	SCBPTR, COMPLETE_SCB_HEAD, 2;
  fill_qoutfifo_loop:
  	bmov	CCSCBRAM, SCBPTR, 2;
  	mov	CCSCBRAM, SCB_SGPTR[0];
-	bmov	CCSCBRAM, ALLZEROS, 4;
  	mov	CCSCBRAM, QOUTFIFO_ENTRY_VALID_TAG;
  	mov	NONE, SDSCB_QOFF;
  	inc	INT_COALESCING_CMDCOUNT;
@@ -377,6 +377,18 @@
  	cmp	SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je fill_qoutfifo_done;
  	cmp	CCSCBADDR, CCSCBADDR_MAX je fill_qoutfifo_done;
  	test	QOFF_CTLSTA, SDSCB_ROLLOVR jnz fill_qoutfifo_done;
+	/*
+	 * Don't cross an ADB or Cachline boundary when DMA'ing
+	 * completion entries.  In PCI mode, at least in 32/33
+	 * configurations, the SCB DMA engine may lose its place
+	 * in the data-stream should the target force a retry on
+	 * something other than an 8byte aligned boundary. In
+	 * PCI-X mode, we do this to avoid split transactions since
+	 * many chipsets seem to be unable to format proper split
+	 * completions to continue the data transfer.
+	 */
+	add	SINDEX, A, CCSCBADDR;
+	test	SINDEX, CACHELINE_MASK jz fill_qoutfifo_done;
  	bmov	SCBPTR, SCB_NEXT_COMPLETE, 2;
  	jmp	fill_qoutfifo_loop;
  fill_qoutfifo_done:
==== //depot/aic7xxx/aic7xxx/aic79xx.c#242 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c ====
--- /tmp/tmp.27211.3	2004-09-27 13:37:00.423320808 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c	2004-05-07 15:45:35.000000000 -0400
@@ -37,7 +37,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#242 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#245 $
   */

  #ifdef __linux__
@@ -225,7 +225,7 @@
  static void		ahd_download_instr(struct ahd_softc *ahd,
  					   u_int instrptr, uint8_t *dconsts);
  static int		ahd_probe_stack_size(struct ahd_softc *ahd);
-static void		ahd_other_scb_timeout(struct ahd_softc *ahd,
+static int		ahd_other_scb_timeout(struct ahd_softc *ahd,
  					      struct scb *scb,
  					      struct scb *other_scb);
  static int		ahd_scb_active_in_fifo(struct ahd_softc *ahd,
@@ -1635,7 +1635,7 @@
  					    CAM_LUN_WILDCARD,
  					    CAM_SEL_TIMEOUT,
  					    "Selection Timeout",
-					    /*verbose_level*/0);
+					    /*verbose_level*/1);
  		}
  		ahd_outb(ahd, CLRINT, CLRSCSIINT);
  		ahd_iocell_first_selection(ahd);
@@ -6025,22 +6025,6 @@
  		hscb = (struct hardware_scb *)hscb_map->vaddr;
  		hscb_busaddr = hscb_map->busaddr;
  		scb_data->scbs_left = PAGE_SIZE / sizeof(*hscb);
-		if (ahd->next_queued_hscb == NULL) {
-			/*
-			 * We need one HSCB to serve as the "next HSCB".  Since
-			 * the tag identifier in this HSCB will never be used,
-			 * there is no point in using a valid SCB from the
-			 * free pool for it.  So, we allocate this "sentinel"
-			 * specially.
-	 		 */
-			ahd->next_queued_hscb = hscb;
-			ahd->next_queued_hscb_map = hscb_map;
-			memset(hscb, 0, sizeof(*hscb));
-			hscb->hscb_busaddr = aic_htole32(hscb_busaddr);
-			hscb++;
-			hscb_busaddr += sizeof(*hscb);
-			scb_data->scbs_left--;
-		}
  	}

  	if (scb_data->sgs_left != 0) {
@@ -6300,7 +6284,8 @@
  	 * for the target mode role, we must additionally provide space for
  	 * the incoming target command fifo.
  	 */
-	driver_data_size = AHD_SCB_MAX * sizeof(*ahd->qoutfifo);
+	driver_data_size = AHD_SCB_MAX * sizeof(*ahd->qoutfifo)
+			 + sizeof(struct hardware_scb);
  	if ((ahd->features & AHD_TARGETMODE) != 0)
  		driver_data_size += AHD_TMODE_CMDS * sizeof(struct target_cmd);
  	if ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0)
@@ -6350,6 +6335,17 @@
  		next_baddr += PKT_OVERRUN_BUFSIZE;
  	}

+	/*
+	 * We need one SCB to serve as the "next SCB".  Since the
+	 * tag identifier in this SCB will never be used, there is
+	 * no point in using a valid HSCB tag from an SCB pulled from
+	 * the standard free pool.  So, we allocate this "sentinel"
+	 * specially from the DMA safe memory chunk used for the QOUTFIFO.
+	 */
+	ahd->next_queued_hscb = (struct hardware_scb *)next_vaddr;
+	ahd->next_queued_hscb_map = &ahd->shared_data_map;
+	ahd->next_queued_hscb->hscb_busaddr = aic_htole32(next_baddr);
+
  	ahd->init_level++;

  	/* Allocate SCB data now that buffer_dmat is initialized */
@@ -8478,13 +8474,14 @@
  	u_int	sg_prefetch_cnt_limit;
  	u_int	sg_prefetch_align;
  	u_int	sg_size;
+	u_int	cacheline_mask;
  	uint8_t	download_consts[DOWNLOAD_CONST_COUNT];

  	if (bootverbose)
  		printf("%s: Downloading Sequencer Program...",
  		       ahd_name(ahd));

-#if DOWNLOAD_CONST_COUNT != 7
+#if DOWNLOAD_CONST_COUNT != 8
  #error "Download Const Mismatch"
  #endif
  	/*
@@ -8520,6 +8517,9 @@
  	/* Round down to the nearest power of 2. */
  	while (powerof2(sg_prefetch_align) == 0)
  		sg_prefetch_align--;
+
+	cacheline_mask = sg_prefetch_align - 1;
+
  	/*
  	 * If the cacheline boundary is greater than half our prefetch RAM
  	 * we risk not being able to fetch even a single complete S/G
@@ -8560,6 +8560,7 @@
  	download_consts[PKT_OVERRUN_BUFOFFSET] =
  		(ahd->overrun_buf - (uint8_t *)ahd->qoutfifo) / 256;
  	download_consts[SCB_TRANSFER_SIZE] = SCB_TRANSFER_SIZE_1BYTE_LUN;
+	download_consts[CACHELINE_MASK] = cacheline_mask;
  	cur_patch = patches;
  	downloaded = 0;
  	skip_addr = 0;
@@ -9239,13 +9240,18 @@
  		if (active_scb != NULL) {

  			if (active_scb != scb) {
+
  				/*
  				 * If the active SCB is not us, assume that
  				 * the active SCB has a longer timeout than
  				 * the timedout SCB, and wait for the active
-				 * SCB to timeout.
+				 * SCB to timeout.  As a safeguard, only
+				 * allow this deferral to continue if some
+				 * untimed-out command is outstanding.
  				 */
-				ahd_other_scb_timeout(ahd, scb, active_scb);
+				if (ahd_other_scb_timeout(ahd, scb,
+							  active_scb) != 0)
+					goto bus_reset;
  				continue;
  			}

@@ -9283,7 +9289,8 @@
  			 * some other command.  Reset the timer
  			 * and go on.
  			 */
-			ahd_other_scb_timeout(ahd, scb, scb);
+			if (ahd_other_scb_timeout(ahd, scb, NULL) != 0)
+				goto bus_reset;
  		} else {
  			/*
  			 * This SCB is for a disconnected transaction
@@ -9379,20 +9386,55 @@
  	ahd_unlock(ahd, &s);
  }

-static void
+/*
+ * Re-schedule a timeout for the passed in SCB if we determine that some
+ * other SCB is in the process of recovery or an SCB with a longer
+ * timeout is still pending.  Limit our search to just "other_scb"
+ * if it is non-NULL.
+ */
+static int
  ahd_other_scb_timeout(struct ahd_softc *ahd, struct scb *scb,
  		      struct scb *other_scb)
  {
  	u_int	newtimeout;
+	int	found;

  	ahd_print_path(ahd, scb);
  	printf("Other SCB Timeout%s",
   	       (scb->flags & SCB_OTHERTCL_TIMEOUT) != 0
  	       ? " again\n" : "\n");
+
+	newtimeout = aic_get_timeout(scb);
  	scb->flags |= SCB_OTHERTCL_TIMEOUT;
-	newtimeout = MAX(aic_get_timeout(other_scb),
-			 aic_get_timeout(scb));
-	aic_scb_timer_reset(scb, newtimeout);
+	found = 0;
+	if (other_scb != NULL) {
+		if ((other_scb->flags
+		   & (SCB_OTHERTCL_TIMEOUT|SCB_TIMEDOUT)) == 0
+		 || (other_scb->flags & SCB_RECOVERY_SCB) != 0) {
+			found++;
+			newtimeout = MAX(aic_get_timeout(other_scb),
+					 newtimeout);
+		}
+	} else {
+		LIST_FOREACH(other_scb, &ahd->pending_scbs, pending_links) {
+			if ((other_scb->flags
+			   & (SCB_OTHERTCL_TIMEOUT|SCB_TIMEDOUT)) == 0
+			 || (other_scb->flags & SCB_RECOVERY_SCB) != 0) {
+				found++;
+				newtimeout = MAX(aic_get_timeout(other_scb),
+						 newtimeout);
+			}
+		}
+	}
+
+	if (found != 0)
+		aic_scb_timer_reset(scb, newtimeout);
+	else {
+		ahd_print_path(ahd, scb);
+		printf("No other SCB worth waiting for...\n");
+	}
+
+	return (found != 0);
  }

  /**************************** Flexport Logic **********************************/
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#208 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.c ====
--- /tmp/tmp.27211.4	2004-09-27 13:37:01.441166072 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.c	2004-04-09 12:57:15.000000000 -0400
@@ -1,7 +1,7 @@
  /*
   * Adaptec AIC79xx device driver for Linux.
   *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#208 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#209 $
   *
   * --------------------------------------------------------------------------
   * Copyright (c) 1994-2000 Justin T. Gibbs.
@@ -4904,7 +4904,21 @@
  			new_status = DID_BAD_TARGET;
  			break;
  		case CAM_SEL_TIMEOUT:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+			/*
+			 * The 2.4.X SCSI layer will not offline
+			 * devices in response to DID_NO_CONNECT.
+			 * Return a command timeout here instead
+			 * so that for commands other than inquiry
+			 * and request sense commands (which the
+			 * mid-layer special cases) recovery will
+			 * take place and persistently missing
+			 * devices are eventually offlined.
+			 */
+			new_status = DID_TIME_OUT;
+#else
  			new_status = DID_NO_CONNECT;
+#endif
  			break;
  		case CAM_SCSI_BUS_RESET:
  		case CAM_BDR_SENT:
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#159 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.h ====
--- /tmp/tmp.27211.5	2004-09-27 13:37:01.511155432 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.h	2004-04-09 16:48:02.000000000 -0400
@@ -36,7 +36,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#159 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#161 $
   *
   */
  #ifndef _AIC79XX_LINUX_H_
@@ -94,7 +94,7 @@
  #include <linux/smp.h>
  #endif

-#define AIC79XX_DRIVER_VERSION "2.0.8"
+#define AIC79XX_DRIVER_VERSION "2.0.10"

  /********************* Definitions Required by the Core ***********************/
  /*
==== //depot/aic7xxx/aic7xxx/aic79xx_pci.c#87 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_pci.c ====
--- /tmp/tmp.27211.6	2004-09-27 13:37:01.709125336 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_pci.c	2004-04-09 17:09:51.000000000 -0400
@@ -38,7 +38,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#87 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#88 $
   */

  #ifdef __linux__
@@ -83,6 +83,7 @@
  #define ID_AHA_29320			0x8012900500429005ull
  #define ID_AHA_29320B			0x8013900500439005ull
  #define ID_AHA_39320_B			0x8015900500409005ull
+#define ID_AHA_39320_B_DELL		0x8015900501681028ull
  #define ID_AHA_39320A			0x8016900500409005ull
  #define ID_AHA_39320D			0x8011900500419005ull
  #define ID_AHA_39320D_B			0x801C900500419005ull
@@ -168,6 +169,12 @@
  		ahd_aic7902_setup
  	},
  	{
+		ID_AHA_39320_B_DELL,
+		ID_ALL_MASK,
+		"Adaptec (Dell OEM) 39320 Ultra320 SCSI adapter",
+		ahd_aic7902_setup
+	},
+	{
  		ID_AHA_39320A,
  		ID_ALL_MASK,
  		"Adaptec 39320A Ultra320 SCSI adapter",
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_reg.h#85 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped ====
--- /tmp/tmp.27211.7	2004-09-27 13:37:02.484007536 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped	2004-05-04 18:25:30.000000000 -0400
@@ -3788,6 +3788,7 @@


  /* Downloaded Constant Definitions */
+#define	CACHELINE_MASK	0x07
  #define	SCB_TRANSFER_SIZE	0x06
  #define	PKT_OVERRUN_BUFOFFSET	0x05
  #define	SG_SIZEOF	0x04
@@ -3795,9 +3796,9 @@
  #define	SG_PREFETCH_ALIGN_MASK	0x02
  #define	SG_PREFETCH_CNT_LIMIT	0x01
  #define	SG_PREFETCH_CNT	0x00
-#define	DOWNLOAD_CONST_COUNT	0x07
+#define	DOWNLOAD_CONST_COUNT	0x08


  /* Exported Labels */
-#define	LABEL_seq_isr 	0x283
-#define	LABEL_timer_isr	0x27f
+#define	LABEL_seq_isr 	0x285
+#define	LABEL_timer_isr	0x281
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_seq.h#86 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped ====
--- /tmp/tmp.27211.8	2004-09-27 13:37:02.617987168 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped	2004-05-04 18:25:30.000000000 -0400
@@ -7,12 +7,12 @@
   */
  static uint8_t seqprog[] = {
  	0xff, 0x02, 0x06, 0x78,
-	0x00, 0xea, 0x60, 0x59,
+	0x00, 0xea, 0x64, 0x59,
  	0x01, 0xea, 0x04, 0x30,
  	0xff, 0x04, 0x0c, 0x78,
-	0x19, 0xea, 0x60, 0x59,
+	0x19, 0xea, 0x64, 0x59,
  	0x19, 0xea, 0x04, 0x00,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x60, 0x3a, 0x3a, 0x68,
  	0x04, 0x4d, 0x35, 0x78,
@@ -33,15 +33,15 @@
  	0xff, 0xea, 0x62, 0x02,
  	0x00, 0xe2, 0x3a, 0x40,
  	0xff, 0x21, 0x3b, 0x70,
-	0x40, 0x4b, 0xa6, 0x69,
-	0x00, 0xe2, 0x64, 0x59,
-	0x40, 0x4b, 0xa6, 0x69,
-	0x20, 0x4b, 0x92, 0x69,
+	0x40, 0x4b, 0xaa, 0x69,
+	0x00, 0xe2, 0x68, 0x59,
+	0x40, 0x4b, 0xaa, 0x69,
+	0x20, 0x4b, 0x96, 0x69,
  	0xfc, 0x42, 0x44, 0x78,
  	0x10, 0x40, 0x44, 0x78,
-	0x00, 0xe2, 0xf8, 0x5d,
+	0x00, 0xe2, 0xfc, 0x5d,
  	0x20, 0x4d, 0x48, 0x78,
-	0x00, 0xe2, 0xf8, 0x5d,
+	0x00, 0xe2, 0xfc, 0x5d,
  	0x30, 0x3f, 0xc0, 0x09,
  	0x30, 0xe0, 0x50, 0x60,
  	0x7f, 0x4a, 0x94, 0x08,
@@ -51,7 +51,7 @@
  	0x00, 0xe2, 0x76, 0x58,
  	0x00, 0xe2, 0x86, 0x58,
  	0x00, 0xe2, 0x06, 0x40,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x01, 0x52, 0x84, 0x78,
  	0x02, 0x58, 0x50, 0x31,
@@ -59,21 +59,21 @@
  	0xff, 0x97, 0x6f, 0x78,
  	0x50, 0x4b, 0x6a, 0x68,
  	0xbf, 0x3a, 0x74, 0x08,
-	0x14, 0xea, 0x60, 0x59,
+	0x14, 0xea, 0x64, 0x59,
  	0x14, 0xea, 0x04, 0x00,
  	0x08, 0x92, 0x25, 0x03,
  	0xff, 0x90, 0x5f, 0x68,
-	0x00, 0xe2, 0x72, 0x5b,
+	0x00, 0xe2, 0x76, 0x5b,
  	0x00, 0xe2, 0x5e, 0x40,
-	0x00, 0xea, 0x5a, 0x59,
+	0x00, 0xea, 0x5e, 0x59,
  	0x01, 0xea, 0x00, 0x30,
  	0x80, 0xf9, 0x7e, 0x68,
-	0x00, 0xe2, 0x58, 0x59,
-	0x11, 0xea, 0x5a, 0x59,
+	0x00, 0xe2, 0x5c, 0x59,
+	0x11, 0xea, 0x5e, 0x59,
  	0x11, 0xea, 0x00, 0x00,
-	0x80, 0xf9, 0x58, 0x79,
+	0x80, 0xf9, 0x5c, 0x79,
  	0xff, 0xea, 0xd4, 0x0d,
-	0x22, 0xea, 0x5a, 0x59,
+	0x22, 0xea, 0x5e, 0x59,
  	0x22, 0xea, 0x00, 0x00,
  	0x10, 0x16, 0x90, 0x78,
  	0x10, 0x16, 0x2c, 0x00,
@@ -144,35 +144,37 @@
  	0x02, 0xa0, 0x40, 0x32,
  	0x02, 0xa0, 0x44, 0x36,
  	0x04, 0x4d, 0x17, 0x69,
-	0x40, 0x16, 0x44, 0x69,
-	0xff, 0x2d, 0x49, 0x61,
+	0x40, 0x16, 0x48, 0x69,
+	0xff, 0x2d, 0x4d, 0x61,
  	0xff, 0x29, 0x85, 0x70,
  	0x02, 0x28, 0x55, 0x32,
  	0x01, 0xea, 0x5a, 0x01,
  	0x04, 0x44, 0xf9, 0x30,
+	0x01, 0x44, 0xc1, 0x31,
  	0x02, 0x28, 0x51, 0x31,
  	0x02, 0xa8, 0x60, 0x31,
  	0x01, 0xa4, 0x61, 0x31,
-	0x04, 0xea, 0x60, 0x31,
  	0x01, 0x3d, 0x61, 0x31,
  	0x01, 0x14, 0xd4, 0x31,
  	0x01, 0x56, 0xad, 0x1a,
  	0xff, 0x54, 0xa9, 0x1a,
  	0xff, 0x55, 0xab, 0x22,
-	0xff, 0x8d, 0x3d, 0x71,
-	0x80, 0xac, 0x3c, 0x71,
-	0x20, 0x16, 0x3c, 0x69,
+	0xff, 0x8d, 0x41, 0x71,
+	0x80, 0xac, 0x40, 0x71,
+	0x20, 0x16, 0x40, 0x69,
+	0x00, 0xac, 0xc4, 0x19,
+	0x07, 0xe2, 0x40, 0xf9,
  	0x02, 0x8c, 0x51, 0x31,
-	0x00, 0xe2, 0x22, 0x41,
+	0x00, 0xe2, 0x24, 0x41,
  	0x01, 0xac, 0x08, 0x31,
  	0x09, 0xea, 0x5a, 0x01,
  	0x02, 0x8c, 0x51, 0x32,
  	0xff, 0xea, 0x1a, 0x07,
  	0x04, 0x24, 0xf9, 0x30,
-	0x1d, 0xea, 0x4e, 0x41,
+	0x1d, 0xea, 0x52, 0x41,
  	0x02, 0x2c, 0x51, 0x31,
  	0x04, 0xa8, 0xf9, 0x30,
-	0x19, 0xea, 0x4e, 0x41,
+	0x19, 0xea, 0x52, 0x41,
  	0x06, 0xea, 0x08, 0x81,
  	0x01, 0xe2, 0x5a, 0x35,
  	0x02, 0xf2, 0xf0, 0x31,
@@ -188,27 +190,27 @@
  	0x02, 0x20, 0xb9, 0x30,
  	0x02, 0x20, 0x51, 0x31,
  	0x4c, 0x93, 0xd7, 0x28,
-	0x10, 0x92, 0x73, 0x79,
+	0x10, 0x92, 0x77, 0x79,
  	0x01, 0x6b, 0xc0, 0x30,
  	0x02, 0x64, 0xc8, 0x00,
  	0x40, 0x3a, 0x74, 0x04,
  	0x00, 0xe2, 0x76, 0x58,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x30, 0x3f, 0xc0, 0x09,
-	0x30, 0xe0, 0x74, 0x61,
-	0x20, 0x3f, 0x8a, 0x69,
-	0x10, 0x3f, 0x74, 0x79,
+	0x30, 0xe0, 0x78, 0x61,
+	0x20, 0x3f, 0x8e, 0x69,
+	0x10, 0x3f, 0x78, 0x79,
  	0x02, 0xea, 0x7e, 0x00,
-	0x00, 0xea, 0x5a, 0x59,
+	0x00, 0xea, 0x5e, 0x59,
  	0x01, 0xea, 0x00, 0x30,
  	0x02, 0x4e, 0x51, 0x35,
  	0x01, 0xea, 0x7e, 0x00,
-	0x11, 0xea, 0x5a, 0x59,
+	0x11, 0xea, 0x5e, 0x59,
  	0x11, 0xea, 0x00, 0x00,
  	0x02, 0x4e, 0x51, 0x35,
  	0xc0, 0x4a, 0x94, 0x00,
-	0x04, 0x41, 0x98, 0x79,
+	0x04, 0x41, 0x9c, 0x79,
  	0x08, 0xea, 0x98, 0x00,
  	0x08, 0x57, 0xae, 0x00,
  	0x08, 0x3c, 0x78, 0x00,
@@ -216,12 +218,12 @@
  	0x0f, 0x67, 0xc0, 0x09,
  	0x00, 0x3a, 0x75, 0x02,
  	0x20, 0xea, 0x96, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
+	0x00, 0xe2, 0x14, 0x42,
  	0xc0, 0x4a, 0x94, 0x00,
-	0x40, 0x3a, 0xc4, 0x69,
+	0x40, 0x3a, 0xc8, 0x69,
  	0x02, 0x55, 0x06, 0x68,
-	0x02, 0x56, 0xc4, 0x69,
-	0xff, 0x5b, 0xc4, 0x61,
+	0x02, 0x56, 0xc8, 0x69,
+	0xff, 0x5b, 0xc8, 0x61,
  	0x02, 0x20, 0x51, 0x31,
  	0x80, 0xea, 0xb2, 0x01,
  	0x44, 0xea, 0x00, 0x00,
@@ -229,40 +231,40 @@
  	0x33, 0xea, 0x00, 0x00,
  	0xff, 0xea, 0xb2, 0x09,
  	0xff, 0xe0, 0xc0, 0x19,
-	0xff, 0xe0, 0xc6, 0x79,
+	0xff, 0xe0, 0xca, 0x79,
  	0x02, 0xac, 0x51, 0x31,
-	0x00, 0xe2, 0xbc, 0x41,
+	0x00, 0xe2, 0xc0, 0x41,
  	0x02, 0x5e, 0x50, 0x31,
  	0x02, 0xa8, 0xb8, 0x30,
  	0x02, 0x5c, 0x50, 0x31,
-	0xff, 0xad, 0xd7, 0x71,
+	0xff, 0xad, 0xdb, 0x71,
  	0x02, 0xac, 0x41, 0x31,
  	0x02, 0x22, 0x51, 0x31,
  	0x02, 0xa0, 0x5c, 0x33,
  	0x02, 0xa0, 0x44, 0x32,
-	0x00, 0xe2, 0xe0, 0x41,
-	0x10, 0x92, 0xe1, 0x69,
+	0x00, 0xe2, 0xe4, 0x41,
+	0x10, 0x92, 0xe5, 0x69,
  	0x3d, 0x93, 0xc9, 0x29,
  	0x01, 0xe4, 0xc8, 0x01,
  	0x01, 0xea, 0xca, 0x01,
  	0xff, 0xea, 0xda, 0x01,
  	0x02, 0x20, 0x51, 0x31,
  	0x02, 0xae, 0x41, 0x32,
-	0xff, 0x21, 0xe9, 0x61,
+	0xff, 0x21, 0xed, 0x61,
  	0xff, 0xea, 0x46, 0x02,
  	0x02, 0x5c, 0x50, 0x31,
  	0x40, 0xea, 0x96, 0x00,
-	0x02, 0x56, 0x00, 0x6e,
-	0x01, 0x55, 0x00, 0x6e,
-	0x10, 0x92, 0xf5, 0x79,
-	0x10, 0x40, 0xfe, 0x69,
-	0x01, 0x56, 0xfe, 0x79,
+	0x02, 0x56, 0x04, 0x6e,
+	0x01, 0x55, 0x04, 0x6e,
+	0x10, 0x92, 0xf9, 0x79,
+	0x10, 0x40, 0x02, 0x6a,
+	0x01, 0x56, 0x02, 0x7a,
  	0xff, 0x97, 0x07, 0x78,
-	0x13, 0xea, 0x60, 0x59,
+	0x13, 0xea, 0x64, 0x59,
  	0x13, 0xea, 0x04, 0x00,
  	0x00, 0xe2, 0x06, 0x40,
  	0xbf, 0x3a, 0x74, 0x08,
-	0x04, 0x41, 0x04, 0x7a,
+	0x04, 0x41, 0x08, 0x7a,
  	0x08, 0xea, 0x98, 0x00,
  	0x08, 0x57, 0xae, 0x00,
  	0x01, 0x93, 0x75, 0x32,
@@ -270,108 +272,108 @@
  	0x40, 0xea, 0x72, 0x02,
  	0x08, 0x3c, 0x78, 0x00,
  	0x80, 0xea, 0x6e, 0x02,
-	0x00, 0xe2, 0xde, 0x5b,
+	0x00, 0xe2, 0xe2, 0x5b,
  	0x01, 0x3c, 0xc1, 0x31,
-	0x9f, 0xe0, 0x80, 0x7c,
-	0x80, 0xe0, 0x24, 0x72,
-	0xa0, 0xe0, 0x60, 0x72,
-	0xc0, 0xe0, 0x56, 0x72,
-	0xe0, 0xe0, 0x90, 0x72,
-	0x01, 0xea, 0x60, 0x59,
+	0x9f, 0xe0, 0x84, 0x7c,
+	0x80, 0xe0, 0x28, 0x72,
+	0xa0, 0xe0, 0x64, 0x72,
+	0xc0, 0xe0, 0x5a, 0x72,
+	0xe0, 0xe0, 0x94, 0x72,
+	0x01, 0xea, 0x64, 0x59,
  	0x01, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
-	0x80, 0x39, 0x2b, 0x7a,
-	0x03, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x14, 0x42,
+	0x80, 0x39, 0x2f, 0x7a,
+	0x03, 0xea, 0x64, 0x59,
  	0x03, 0xea, 0x04, 0x00,
-	0xee, 0x00, 0x32, 0x6a,
+	0xee, 0x00, 0x36, 0x6a,
  	0x05, 0xea, 0xb4, 0x00,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x02, 0xa8, 0x9c, 0x32,
-	0x00, 0xe2, 0x7a, 0x59,
+	0x00, 0xe2, 0x7e, 0x59,
  	0xef, 0x96, 0xd5, 0x19,
-	0x00, 0xe2, 0x42, 0x52,
+	0x00, 0xe2, 0x46, 0x52,
  	0x09, 0x80, 0xe1, 0x30,
  	0x02, 0xea, 0x36, 0x00,
  	0xa8, 0xea, 0x32, 0x00,
-	0x00, 0xe2, 0x48, 0x42,
+	0x00, 0xe2, 0x4c, 0x42,
  	0x01, 0x96, 0xd1, 0x30,
  	0x10, 0x80, 0x89, 0x31,
  	0x20, 0xea, 0x32, 0x00,
  	0xbf, 0x39, 0x73, 0x0a,
-	0x10, 0x4c, 0x52, 0x6a,
-	0x20, 0x19, 0x4a, 0x6a,
+	0x10, 0x4c, 0x56, 0x6a,
  	0x20, 0x19, 0x4e, 0x6a,
-	0x02, 0x4d, 0x10, 0x6a,
+	0x20, 0x19, 0x52, 0x6a,
+	0x02, 0x4d, 0x14, 0x6a,
  	0x40, 0x39, 0x73, 0x02,
-	0x00, 0xe2, 0x10, 0x42,
-	0x80, 0x39, 0xd1, 0x6a,
+	0x00, 0xe2, 0x14, 0x42,
+	0x80, 0x39, 0xd5, 0x6a,
  	0x01, 0x44, 0x10, 0x33,
  	0x08, 0x92, 0x25, 0x03,
-	0x00, 0xe2, 0x10, 0x42,
+	0x00, 0xe2, 0x14, 0x42,
  	0x10, 0xea, 0x80, 0x00,
  	0x01, 0x37, 0xc5, 0x31,
-	0x80, 0xe2, 0x7c, 0x62,
-	0x10, 0x92, 0xa1, 0x6a,
+	0x80, 0xe2, 0x80, 0x62,
+	0x10, 0x92, 0xa5, 0x6a,
  	0xc0, 0x94, 0xc5, 0x01,
-	0x40, 0x92, 0x6d, 0x6a,
+	0x40, 0x92, 0x71, 0x6a,
  	0xbf, 0xe2, 0xc4, 0x09,
-	0x20, 0x92, 0x81, 0x7a,
+	0x20, 0x92, 0x85, 0x7a,
  	0x01, 0xe2, 0x88, 0x30,
-	0x00, 0xe2, 0xde, 0x5b,
-	0xa0, 0x3c, 0x89, 0x62,
+	0x00, 0xe2, 0xe2, 0x5b,
+	0xa0, 0x3c, 0x8d, 0x62,
  	0x23, 0x92, 0x89, 0x08,
-	0x00, 0xe2, 0xde, 0x5b,
-	0xa0, 0x3c, 0x89, 0x62,
-	0x00, 0xa8, 0x80, 0x42,
-	0xff, 0xe2, 0x80, 0x62,
-	0x00, 0xe2, 0xa0, 0x42,
+	0x00, 0xe2, 0xe2, 0x5b,
+	0xa0, 0x3c, 0x8d, 0x62,
+	0x00, 0xa8, 0x84, 0x42,
+	0xff, 0xe2, 0x84, 0x62,
+	0x00, 0xe2, 0xa4, 0x42,
  	0x40, 0xea, 0x98, 0x00,
  	0x01, 0xe2, 0x88, 0x30,
-	0x00, 0xe2, 0xde, 0x5b,
-	0xa0, 0x3c, 0x5f, 0x72,
+	0x00, 0xe2, 0xe2, 0x5b,
+	0xa0, 0x3c, 0x63, 0x72,
  	0x40, 0xea, 0x98, 0x00,
  	0x01, 0x37, 0x95, 0x32,
  	0x08, 0xea, 0x6e, 0x02,
-	0x00, 0xe2, 0x10, 0x42,
-	0xe0, 0xea, 0xfa, 0x5b,
-	0x80, 0xe0, 0xdc, 0x6a,
-	0x04, 0xe0, 0x8e, 0x73,
-	0x02, 0xe0, 0xc0, 0x73,
-	0x00, 0xea, 0x3a, 0x73,
-	0x03, 0xe0, 0xd0, 0x73,
-	0x23, 0xe0, 0xb2, 0x72,
-	0x08, 0xe0, 0xd8, 0x72,
-	0x00, 0xe2, 0xde, 0x5b,
-	0x07, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x14, 0x42,
+	0xe0, 0xea, 0xfe, 0x5b,
+	0x80, 0xe0, 0xe0, 0x6a,
+	0x04, 0xe0, 0x92, 0x73,
+	0x02, 0xe0, 0xc4, 0x73,
+	0x00, 0xea, 0x3e, 0x73,
+	0x03, 0xe0, 0xd4, 0x73,
+	0x23, 0xe0, 0xb6, 0x72,
+	0x08, 0xe0, 0xdc, 0x72,
+	0x00, 0xe2, 0xe2, 0x5b,
+	0x07, 0xea, 0x64, 0x59,
  	0x07, 0xea, 0x04, 0x00,
-	0x08, 0x48, 0x11, 0x72,
-	0x04, 0x48, 0xaf, 0x62,
+	0x08, 0x48, 0x15, 0x72,
+	0x04, 0x48, 0xb3, 0x62,
  	0x01, 0x49, 0x89, 0x30,
-	0x00, 0xe2, 0xa0, 0x42,
+	0x00, 0xe2, 0xa4, 0x42,
  	0x01, 0x44, 0xd4, 0x31,
-	0x00, 0xe2, 0xa0, 0x42,
+	0x00, 0xe2, 0xa4, 0x42,
  	0x01, 0x00, 0x6c, 0x32,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x4c, 0x3a, 0xc1, 0x28,
  	0x01, 0x64, 0xc0, 0x31,
-	0x00, 0x36, 0x5b, 0x59,
+	0x00, 0x36, 0x5f, 0x59,
  	0x01, 0x36, 0x01, 0x30,
-	0x01, 0xe0, 0xd6, 0x7a,
-	0xa0, 0xea, 0xf0, 0x5b,
-	0x01, 0xa0, 0xd6, 0x62,
-	0x01, 0x84, 0xcb, 0x7a,
-	0x01, 0x95, 0xd9, 0x6a,
-	0x05, 0xea, 0x60, 0x59,
+	0x01, 0xe0, 0xda, 0x7a,
+	0xa0, 0xea, 0xf4, 0x5b,
+	0x01, 0xa0, 0xda, 0x62,
+	0x01, 0x84, 0xcf, 0x7a,
+	0x01, 0x95, 0xdd, 0x6a,
+	0x05, 0xea, 0x64, 0x59,
  	0x05, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0xd8, 0x42,
-	0x03, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0xdc, 0x42,
+	0x03, 0xea, 0x64, 0x59,
  	0x03, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0xd8, 0x42,
-	0x07, 0xea, 0x02, 0x5c,
+	0x00, 0xe2, 0xdc, 0x42,
+	0x07, 0xea, 0x06, 0x5c,
  	0x01, 0x44, 0xd4, 0x31,
-	0x00, 0xe2, 0x10, 0x42,
+	0x00, 0xe2, 0x14, 0x42,
  	0x3f, 0xe0, 0x76, 0x0a,
  	0xc0, 0x3a, 0xc1, 0x09,
  	0x00, 0x3b, 0x51, 0x01,
@@ -382,54 +384,54 @@
  	0x01, 0xea, 0xc6, 0x01,
  	0x02, 0xe2, 0xc8, 0x31,
  	0x02, 0xec, 0x40, 0x31,
-	0xff, 0xa1, 0xf8, 0x72,
+	0xff, 0xa1, 0xfc, 0x72,
  	0x02, 0xe8, 0xda, 0x31,
  	0x02, 0xa0, 0x50, 0x31,
-	0x00, 0xe2, 0x1a, 0x43,
+	0x00, 0xe2, 0x1e, 0x43,
  	0x80, 0x39, 0x73, 0x02,
  	0x01, 0x44, 0xd4, 0x31,
-	0x00, 0xe2, 0xde, 0x5b,
+	0x00, 0xe2, 0xe2, 0x5b,
  	0x01, 0x39, 0x73, 0x02,
-	0xe0, 0x3c, 0x35, 0x63,
+	0xe0, 0x3c, 0x39, 0x63,
  	0x02, 0x39, 0x73, 0x02,
-	0x20, 0x46, 0x2e, 0x63,
+	0x20, 0x46, 0x32, 0x63,
  	0xff, 0xea, 0x52, 0x09,
-	0xa8, 0xea, 0xf0, 0x5b,
-	0x04, 0x92, 0x15, 0x7b,
+	0xa8, 0xea, 0xf4, 0x5b,
+	0x04, 0x92, 0x19, 0x7b,
  	0x01, 0x3a, 0xc1, 0x31,
-	0x00, 0x93, 0x15, 0x63,
+	0x00, 0x93, 0x19, 0x63,
  	0x01, 0x3b, 0xc1, 0x31,
-	0x00, 0x94, 0x1f, 0x73,
+	0x00, 0x94, 0x23, 0x73,
  	0x01, 0xa9, 0x52, 0x11,
-	0xff, 0xa9, 0x0a, 0x6b,
-	0x00, 0xe2, 0x2e, 0x43,
+	0xff, 0xa9, 0x0e, 0x6b,
+	0x00, 0xe2, 0x32, 0x43,
  	0x10, 0x39, 0x73, 0x02,
-	0x04, 0x92, 0x2f, 0x7b,
+	0x04, 0x92, 0x33, 0x7b,
  	0xfb, 0x92, 0x25, 0x0b,
  	0xff, 0xea, 0x72, 0x0a,
-	0x01, 0xa4, 0x29, 0x6b,
+	0x01, 0xa4, 0x2d, 0x6b,
  	0x02, 0xa8, 0x9c, 0x32,
-	0x00, 0xe2, 0x7a, 0x59,
-	0x10, 0x92, 0xd9, 0x7a,
-	0xff, 0xea, 0x02, 0x5c,
-	0x00, 0xe2, 0xd8, 0x42,
-	0x04, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x7e, 0x59,
+	0x10, 0x92, 0xdd, 0x7a,
+	0xff, 0xea, 0x06, 0x5c,
+	0x00, 0xe2, 0xdc, 0x42,
+	0x04, 0xea, 0x64, 0x59,
  	0x04, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0xd8, 0x42,
-	0x04, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0xdc, 0x42,
+	0x04, 0xea, 0x64, 0x59,
  	0x04, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
-	0x08, 0x92, 0xd1, 0x7a,
-	0xc0, 0x39, 0x45, 0x7b,
-	0x80, 0x39, 0xd1, 0x6a,
-	0xff, 0x88, 0x45, 0x6b,
-	0x40, 0x39, 0xd1, 0x6a,
-	0x10, 0x92, 0x4b, 0x7b,
-	0x0a, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x14, 0x42,
+	0x08, 0x92, 0xd5, 0x7a,
+	0xc0, 0x39, 0x49, 0x7b,
+	0x80, 0x39, 0xd5, 0x6a,
+	0xff, 0x88, 0x49, 0x6b,
+	0x40, 0x39, 0xd5, 0x6a,
+	0x10, 0x92, 0x4f, 0x7b,
+	0x0a, 0xea, 0x64, 0x59,
  	0x0a, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x6a, 0x5b,
-	0x00, 0xe2, 0xaa, 0x43,
-	0x50, 0x4b, 0x52, 0x6b,
+	0x00, 0xe2, 0x6e, 0x5b,
+	0x00, 0xe2, 0xae, 0x43,
+	0x50, 0x4b, 0x56, 0x6b,
  	0xbf, 0x3a, 0x74, 0x08,
  	0x01, 0xe0, 0xf4, 0x31,
  	0xff, 0xea, 0xc0, 0x09,
@@ -439,31 +441,31 @@
  	0x01, 0xfa, 0xc0, 0x35,
  	0x02, 0xa8, 0x90, 0x32,
  	0x02, 0xea, 0xb4, 0x00,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x02, 0x48, 0x51, 0x31,
  	0xff, 0x90, 0x85, 0x68,
-	0xff, 0x88, 0x77, 0x6b,
-	0x01, 0xa4, 0x73, 0x6b,
-	0x02, 0xa4, 0x7b, 0x6b,
-	0x01, 0x84, 0x7b, 0x7b,
+	0xff, 0x88, 0x7b, 0x6b,
+	0x01, 0xa4, 0x77, 0x6b,
+	0x02, 0xa4, 0x7f, 0x6b,
+	0x01, 0x84, 0x7f, 0x7b,
  	0x02, 0x28, 0x19, 0x33,
  	0x02, 0xa8, 0x50, 0x36,
-	0xff, 0x88, 0x7b, 0x73,
-	0x00, 0xe2, 0x4e, 0x5b,
+	0xff, 0x88, 0x7f, 0x73,
+	0x00, 0xe2, 0x52, 0x5b,
  	0x02, 0xa8, 0x20, 0x33,
  	0x04, 0xa4, 0x49, 0x03,
  	0xff, 0xea, 0x1a, 0x03,
-	0xff, 0x2d, 0x87, 0x63,
+	0xff, 0x2d, 0x8b, 0x63,
  	0x02, 0xa8, 0x58, 0x32,
  	0x02, 0xa8, 0x5c, 0x36,
  	0x02, 0xa8, 0x40, 0x31,
  	0x02, 0x2e, 0x51, 0x31,
  	0x02, 0xa0, 0x18, 0x33,
  	0x02, 0xa0, 0x5c, 0x36,
-	0xc0, 0x39, 0xd1, 0x6a,
+	0xc0, 0x39, 0xd5, 0x6a,
  	0x04, 0x92, 0x25, 0x03,
-	0x20, 0x92, 0xab, 0x6b,
+	0x20, 0x92, 0xaf, 0x6b,
  	0x02, 0xa8, 0x40, 0x31,
  	0xc0, 0x3a, 0xc1, 0x09,
  	0x00, 0x3b, 0x51, 0x01,
@@ -478,60 +480,60 @@
  	0xf7, 0x57, 0xae, 0x08,
  	0x08, 0xea, 0x98, 0x00,
  	0x01, 0x44, 0xd4, 0x31,
-	0xee, 0x00, 0xb4, 0x6b,
+	0xee, 0x00, 0xb8, 0x6b,
  	0x02, 0xea, 0xb4, 0x00,
  	0xc0, 0xea, 0x72, 0x02,
-	0x09, 0x4c, 0xb6, 0x7b,
+	0x09, 0x4c, 0xba, 0x7b,
  	0x01, 0xea, 0x78, 0x02,
  	0x08, 0x4c, 0x06, 0x68,
-	0x0b, 0xea, 0x60, 0x59,
+	0x0b, 0xea, 0x64, 0x59,
  	0x0b, 0xea, 0x04, 0x00,
  	0x01, 0x44, 0xd4, 0x31,
-	0x20, 0x39, 0x11, 0x7a,
-	0x00, 0xe2, 0xc8, 0x5b,
-	0x00, 0xe2, 0x10, 0x42,
-	0x01, 0x84, 0xcd, 0x7b,
+	0x20, 0x39, 0x15, 0x7a,
+	0x00, 0xe2, 0xcc, 0x5b,
+	0x00, 0xe2, 0x14, 0x42,
+	0x01, 0x84, 0xd1, 0x7b,
  	0x01, 0xa4, 0x49, 0x07,
  	0x08, 0x60, 0x30, 0x33,
  	0x08, 0x80, 0x41, 0x37,
  	0xdf, 0x39, 0x73, 0x0a,
-	0xee, 0x00, 0xda, 0x6b,
+	0xee, 0x00, 0xde, 0x6b,
  	0x05, 0xea, 0xb4, 0x00,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
-	0x00, 0xe2, 0x7a, 0x59,
-	0x00, 0xe2, 0xd8, 0x42,
-	0xff, 0x42, 0xea, 0x6b,
-	0x01, 0x41, 0xde, 0x6b,
-	0x02, 0x41, 0xde, 0x7b,
-	0xff, 0x42, 0xea, 0x6b,
-	0x01, 0x41, 0xde, 0x6b,
-	0x02, 0x41, 0xde, 0x7b,
-	0xff, 0x42, 0xea, 0x7b,
-	0x04, 0x4c, 0xde, 0x6b,
+	0x00, 0xe2, 0x7e, 0x59,
+	0x00, 0xe2, 0xdc, 0x42,
+	0xff, 0x42, 0xee, 0x6b,
+	0x01, 0x41, 0xe2, 0x6b,
+	0x02, 0x41, 0xe2, 0x7b,
+	0xff, 0x42, 0xee, 0x6b,
+	0x01, 0x41, 0xe2, 0x6b,
+	0x02, 0x41, 0xe2, 0x7b,
+	0xff, 0x42, 0xee, 0x7b,
+	0x04, 0x4c, 0xe2, 0x6b,
  	0xe0, 0x41, 0x78, 0x0e,
  	0x01, 0x44, 0xd4, 0x31,
-	0xff, 0x42, 0xf2, 0x7b,
-	0x04, 0x4c, 0xf2, 0x6b,
+	0xff, 0x42, 0xf6, 0x7b,
+	0x04, 0x4c, 0xf6, 0x6b,
  	0xe0, 0x41, 0x78, 0x0a,
-	0xe0, 0x3c, 0x11, 0x62,
+	0xe0, 0x3c, 0x15, 0x62,
  	0xff, 0xea, 0xca, 0x09,
  	0x01, 0xe2, 0xc8, 0x31,
  	0x01, 0x46, 0xda, 0x35,
  	0x01, 0x44, 0xd4, 0x35,
  	0x10, 0xea, 0x80, 0x00,
  	0x01, 0xe2, 0x6e, 0x36,
-	0x04, 0xa6, 0x0a, 0x7c,
+	0x04, 0xa6, 0x0e, 0x7c,
  	0xff, 0xea, 0x5a, 0x09,
  	0xff, 0xea, 0x4c, 0x0d,
-	0x01, 0xa6, 0x36, 0x6c,
+	0x01, 0xa6, 0x3a, 0x6c,
  	0x10, 0xad, 0x84, 0x78,
-	0x80, 0xad, 0x2e, 0x6c,
+	0x80, 0xad, 0x32, 0x6c,
  	0x08, 0xad, 0x84, 0x68,
-	0x20, 0x19, 0x22, 0x7c,
+	0x20, 0x19, 0x26, 0x7c,
  	0x80, 0xea, 0xb2, 0x01,
  	0x11, 0x00, 0x00, 0x10,
-	0x02, 0xa6, 0x1e, 0x7c,
+	0x02, 0xa6, 0x22, 0x7c,
  	0xff, 0xea, 0xb2, 0x0d,
  	0x11, 0x00, 0x00, 0x10,
  	0xff, 0xea, 0xb2, 0x09,
@@ -559,7 +561,7 @@
  	0x00, 0x86, 0x0d, 0x23,
  	0x00, 0x87, 0x0f, 0x23,
  	0x01, 0x84, 0xc5, 0x31,
-	0x80, 0x83, 0x59, 0x7c,
+	0x80, 0x83, 0x5d, 0x7c,
  	0x02, 0xe2, 0xc4, 0x01,
  	0xff, 0xea, 0x4c, 0x09,
  	0x01, 0xe2, 0x36, 0x30,
@@ -570,75 +572,75 @@
  	0xfe, 0xa6, 0x4c, 0x0d,
  	0x0b, 0x98, 0xe1, 0x30,
  	0xfd, 0xa4, 0x49, 0x09,
-	0x80, 0xa3, 0x6d, 0x7c,
+	0x80, 0xa3, 0x71, 0x7c,
  	0x02, 0xa4, 0x48, 0x01,
  	0x01, 0xa4, 0x36, 0x30,
  	0xa8, 0xea, 0x32, 0x00,
  	0xfd, 0xa4, 0x49, 0x0b,
  	0x05, 0xa3, 0x07, 0x33,
-	0x80, 0x83, 0x79, 0x6c,
+	0x80, 0x83, 0x7d, 0x6c,
  	0x02, 0xea, 0x4c, 0x05,
  	0xff, 0xea, 0x4c, 0x0d,
-	0x00, 0xe2, 0x52, 0x59,
-	0x02, 0xa6, 0x0c, 0x6c,
+	0x00, 0xe2, 0x56, 0x59,
+	0x02, 0xa6, 0x10, 0x6c,
  	0x80, 0xf9, 0xf2, 0x05,
-	0xc0, 0x39, 0x87, 0x7c,
-	0x03, 0xea, 0x60, 0x59,
+	0xc0, 0x39, 0x8b, 0x7c,
+	0x03, 0xea, 0x64, 0x59,
  	0x03, 0xea, 0x04, 0x00,
-	0x20, 0x39, 0xab, 0x7c,
-	0x01, 0x84, 0x91, 0x6c,
-	0x06, 0xea, 0x60, 0x59,
+	0x20, 0x39, 0xaf, 0x7c,
+	0x01, 0x84, 0x95, 0x6c,
+	0x06, 0xea, 0x64, 0x59,
  	0x06, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0xae, 0x44,
+	0x00, 0xe2, 0xb2, 0x44,
  	0x01, 0x00, 0x6c, 0x32,
-	0xee, 0x00, 0x9a, 0x6c,
+	0xee, 0x00, 0x9e, 0x6c,
  	0x05, 0xea, 0xb4, 0x00,
-	0x33, 0xea, 0x5a, 0x59,
+	0x33, 0xea, 0x5e, 0x59,
  	0x33, 0xea, 0x00, 0x00,
  	0x80, 0x3d, 0x7a, 0x00,
-	0xfc, 0x42, 0x9c, 0x7c,
+	0xfc, 0x42, 0xa0, 0x7c,
  	0x7f, 0x3d, 0x7a, 0x08,
-	0x00, 0x36, 0x5b, 0x59,
+	0x00, 0x36, 0x5f, 0x59,
  	0x01, 0x36, 0x01, 0x30,
-	0x09, 0xea, 0x60, 0x59,
+	0x09, 0xea, 0x64, 0x59,
  	0x09, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
-	0x01, 0xa4, 0x91, 0x6c,
-	0x00, 0xe2, 0x64, 0x5c,
+	0x00, 0xe2, 0x14, 0x42,
+	0x01, 0xa4, 0x95, 0x6c,
+	0x00, 0xe2, 0x68, 0x5c,
  	0x20, 0x39, 0x73, 0x02,
  	0x01, 0x00, 0x6c, 0x32,
-	0x02, 0xa6, 0xb6, 0x7c,
-	0x00, 0xe2, 0x7a, 0x5c,
+	0x02, 0xa6, 0xba, 0x7c,
+	0x00, 0xe2, 0x7e, 0x5c,
  	0x00, 0xe2, 0x76, 0x58,
  	0x00, 0xe2, 0x86, 0x58,
  	0x00, 0xe2, 0x5a, 0x58,
-	0x00, 0x36, 0x5b, 0x59,
+	0x00, 0x36, 0x5f, 0x59,
  	0x01, 0x36, 0x01, 0x30,
-	0x20, 0x19, 0xb6, 0x6c,
-	0x00, 0xe2, 0xe6, 0x5c,
-	0x04, 0x19, 0xd0, 0x6c,
+	0x20, 0x19, 0xba, 0x6c,
+	0x00, 0xe2, 0xea, 0x5c,
+	0x04, 0x19, 0xd4, 0x6c,
  	0x02, 0x19, 0x32, 0x00,
-	0x01, 0x84, 0xd1, 0x7c,
-	0x01, 0x1b, 0xca, 0x7c,
-	0x01, 0x1a, 0xd0, 0x6c,
-	0x00, 0xe2, 0x80, 0x44,
-	0x80, 0x4b, 0xd6, 0x6c,
-	0x01, 0x4c, 0xd2, 0x7c,
-	0x03, 0x42, 0x80, 0x6c,
-	0x00, 0xe2, 0x06, 0x5c,
+	0x01, 0x84, 0xd5, 0x7c,
+	0x01, 0x1b, 0xce, 0x7c,
+	0x01, 0x1a, 0xd4, 0x6c,
+	0x00, 0xe2, 0x84, 0x44,
+	0x80, 0x4b, 0xda, 0x6c,
+	0x01, 0x4c, 0xd6, 0x7c,
+	0x03, 0x42, 0x84, 0x6c,
+	0x00, 0xe2, 0x0a, 0x5c,
  	0x80, 0xf9, 0xf2, 0x01,
-	0x04, 0x39, 0x11, 0x7a,
-	0x00, 0xe2, 0x10, 0x42,
-	0x08, 0x5d, 0xee, 0x6c,
+	0x04, 0x39, 0x15, 0x7a,
+	0x00, 0xe2, 0x14, 0x42,
+	0x08, 0x5d, 0xf2, 0x6c,
  	0x00, 0xe2, 0x76, 0x58,
-	0x00, 0x36, 0x5b, 0x59,
+	0x00, 0x36, 0x5f, 0x59,
  	0x01, 0x36, 0x01, 0x30,
-	0x02, 0x1b, 0xde, 0x7c,
-	0x08, 0x5d, 0xec, 0x7c,
+	0x02, 0x1b, 0xe2, 0x7c,
+	0x08, 0x5d, 0xf0, 0x7c,
  	0x03, 0x68, 0x00, 0x37,
  	0x01, 0x84, 0x09, 0x07,
-	0x80, 0x1b, 0xf8, 0x7c,
-	0x80, 0x84, 0xf9, 0x6c,
+	0x80, 0x1b, 0xfc, 0x7c,
+	0x80, 0x84, 0xfd, 0x6c,
  	0xff, 0x85, 0x0b, 0x1b,
  	0xff, 0x86, 0x0d, 0x23,
  	0xff, 0x87, 0x0f, 0x23,
@@ -650,161 +652,161 @@
  	0xf9, 0xd9, 0xb2, 0x0d,
  	0x01, 0xd9, 0xb2, 0x05,
  	0x01, 0x52, 0x48, 0x31,
-	0x20, 0xa4, 0x22, 0x7d,
-	0x20, 0x5b, 0x22, 0x7d,
-	0x80, 0xf9, 0x30, 0x7d,
+	0x20, 0xa4, 0x26, 0x7d,
+	0x20, 0x5b, 0x26, 0x7d,
+	0x80, 0xf9, 0x34, 0x7d,
  	0x02, 0xea, 0xb4, 0x00,
  	0x11, 0x00, 0x00, 0x10,
-	0x04, 0x19, 0x3c, 0x7d,
+	0x04, 0x19, 0x40, 0x7d,
  	0xdf, 0x19, 0x32, 0x08,
-	0x60, 0x5b, 0x3c, 0x6d,
-	0x01, 0x4c, 0x16, 0x7d,
+	0x60, 0x5b, 0x40, 0x6d,
+	0x01, 0x4c, 0x1a, 0x7d,
  	0x20, 0x19, 0x32, 0x00,
  	0x01, 0xd9, 0xb2, 0x05,
  	0x02, 0xea, 0xb4, 0x00,
  	0x01, 0xd9, 0xb2, 0x05,
-	0x10, 0x5b, 0x34, 0x6d,
-	0x08, 0x5b, 0x3e, 0x6d,
-	0x20, 0x5b, 0x2e, 0x6d,
-	0x02, 0x5b, 0x5e, 0x6d,
-	0x0e, 0xea, 0x60, 0x59,
+	0x10, 0x5b, 0x38, 0x6d,
+	0x08, 0x5b, 0x42, 0x6d,
+	0x20, 0x5b, 0x32, 0x6d,
+	0x02, 0x5b, 0x62, 0x6d,
+	0x0e, 0xea, 0x64, 0x59,
  	0x0e, 0xea, 0x04, 0x00,
-	0x80, 0xf9, 0x1e, 0x6d,
+	0x80, 0xf9, 0x22, 0x6d,
  	0xdf, 0x5c, 0xb8, 0x08,
  	0x01, 0xd9, 0xb2, 0x05,
-	0x01, 0xa4, 0x19, 0x6e,
-	0x00, 0xe2, 0x64, 0x5c,
-	0x00, 0xe2, 0x68, 0x5d,
+	0x01, 0xa4, 0x1d, 0x6e,
+	0x00, 0xe2, 0x68, 0x5c,
+	0x00, 0xe2, 0x6c, 0x5d,
  	0x01, 0x90, 0x21, 0x1b,
  	0x01, 0xd9, 0xb2, 0x05,
-	0x00, 0xe2, 0x4e, 0x5b,
+	0x00, 0xe2, 0x52, 0x5b,
  	0xf3, 0x96, 0xd5, 0x19,
-	0x00, 0xe2, 0x4c, 0x55,
-	0x80, 0x96, 0x4d, 0x6d,
-	0x0f, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x50, 0x55,
+	0x80, 0x96, 0x51, 0x6d,
+	0x0f, 0xea, 0x64, 0x59,
  	0x0f, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x54, 0x45,
+	0x00, 0xe2, 0x58, 0x45,
  	0x04, 0x8c, 0xe1, 0x30,
  	0x01, 0xea, 0xf2, 0x00,
  	0x02, 0xea, 0x36, 0x00,
  	0xa8, 0xea, 0x32, 0x00,
-	0xff, 0x97, 0x5b, 0x7d,
-	0x14, 0xea, 0x60, 0x59,
+	0xff, 0x97, 0x5f, 0x7d,
+	0x14, 0xea, 0x64, 0x59,
  	0x14, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0xca, 0x5d,
+	0x00, 0xe2, 0xce, 0x5d,
  	0x01, 0xd9, 0xb2, 0x05,
  	0x09, 0x80, 0xe1, 0x30,
  	0x02, 0xea, 0x36, 0x00,
  	0xa8, 0xea, 0x32, 0x00,
-	0x00, 0xe2, 0xc2, 0x5d,
+	0x00, 0xe2, 0xc6, 0x5d,
  	0x01, 0xd9, 0xb2, 0x05,
-	0x02, 0xa6, 0x78, 0x7d,
-	0x00, 0xe2, 0x52, 0x59,
-	0x20, 0x5b, 0x86, 0x6d,
-	0xfc, 0x42, 0x72, 0x7d,
-	0x10, 0x40, 0x74, 0x6d,
-	0x20, 0x4d, 0x76, 0x7d,
-	0x08, 0x5d, 0x86, 0x6d,
-	0x02, 0xa6, 0x0c, 0x6c,
-	0x00, 0xe2, 0x52, 0x59,
-	0x20, 0x5b, 0x86, 0x6d,
-	0x01, 0x1b, 0xa6, 0x6d,
-	0xfc, 0x42, 0x82, 0x7d,
-	0x10, 0x40, 0x84, 0x6d,
+	0x02, 0xa6, 0x7c, 0x7d,
+	0x00, 0xe2, 0x56, 0x59,
+	0x20, 0x5b, 0x8a, 0x6d,
+	0xfc, 0x42, 0x76, 0x7d,
+	0x10, 0x40, 0x78, 0x6d,
+	0x20, 0x4d, 0x7a, 0x7d,
+	0x08, 0x5d, 0x8a, 0x6d,
+	0x02, 0xa6, 0x10, 0x6c,
+	0x00, 0xe2, 0x56, 0x59,
+	0x20, 0x5b, 0x8a, 0x6d,
+	0x01, 0x1b, 0xaa, 0x6d,
+	0xfc, 0x42, 0x86, 0x7d,
+	0x10, 0x40, 0x88, 0x6d,
  	0x20, 0x4d, 0x84, 0x78,
  	0x08, 0x5d, 0x84, 0x78,
  	0x02, 0x19, 0x32, 0x00,
  	0x01, 0x5b, 0x40, 0x31,
-	0x00, 0xe2, 0xe6, 0x5c,
-	0x00, 0xe2, 0xc8, 0x5b,
+	0x00, 0xe2, 0xea, 0x5c,
+	0x00, 0xe2, 0xcc, 0x5b,
  	0x20, 0xea, 0xb6, 0x00,
-	0x00, 0xe2, 0x06, 0x5c,
+	0x00, 0xe2, 0x0a, 0x5c,
  	0x20, 0x5c, 0xb8, 0x00,
-	0x04, 0x19, 0x9c, 0x6d,
-	0x01, 0x1a, 0x9c, 0x6d,
-	0x00, 0xe2, 0x52, 0x59,
+	0x04, 0x19, 0xa0, 0x6d,
+	0x01, 0x1a, 0xa0, 0x6d,
+	0x00, 0xe2, 0x56, 0x59,
  	0x01, 0x1a, 0x84, 0x78,
  	0x80, 0xf9, 0xf2, 0x01,
-	0x20, 0xa0, 0x00, 0x7e,
+	0x20, 0xa0, 0x04, 0x7e,
  	0xff, 0x90, 0x21, 0x1b,
-	0x08, 0x92, 0x5f, 0x6b,
+	0x08, 0x92, 0x63, 0x6b,
  	0x02, 0xea, 0xb4, 0x04,
  	0x01, 0xa4, 0x49, 0x03,
-	0x40, 0x5b, 0xb6, 0x6d,
-	0x00, 0xe2, 0x52, 0x59,
-	0x40, 0x5b, 0xb6, 0x6d,
-	0x04, 0x5d, 0x1a, 0x7e,
-	0x01, 0x1a, 0x1a, 0x7e,
+	0x40, 0x5b, 0xba, 0x6d,
+	0x00, 0xe2, 0x56, 0x59,
+	0x40, 0x5b, 0xba, 0x6d,
+	0x04, 0x5d, 0x1e, 0x7e,
+	0x01, 0x1a, 0x1e, 0x7e,
  	0x20, 0x4d, 0x84, 0x78,
-	0x40, 0x5b, 0x00, 0x7e,
-	0x04, 0x5d, 0x1a, 0x7e,
-	0x01, 0x1a, 0x1a, 0x7e,
+	0x40, 0x5b, 0x04, 0x7e,
+	0x04, 0x5d, 0x1e, 0x7e,
+	0x01, 0x1a, 0x1e, 0x7e,
  	0x80, 0xf9, 0xf2, 0x01,
  	0xff, 0x90, 0x21, 0x1b,
-	0x08, 0x92, 0x5f, 0x6b,
+	0x08, 0x92, 0x63, 0x6b,
  	0x02, 0xea, 0xb4, 0x04,
-	0x00, 0xe2, 0x52, 0x59,
+	0x00, 0xe2, 0x56, 0x59,
  	0x01, 0x1b, 0x84, 0x78,
  	0x80, 0xf9, 0xf2, 0x01,
  	0x02, 0xea, 0xb4, 0x04,
-	0x00, 0xe2, 0x52, 0x59,
-	0x01, 0x1b, 0xde, 0x6d,
-	0x40, 0x5b, 0xec, 0x7d,
-	0x01, 0x1b, 0xde, 0x6d,
+	0x00, 0xe2, 0x56, 0x59,
+	0x01, 0x1b, 0xe2, 0x6d,
+	0x40, 0x5b, 0xf0, 0x7d,
+	0x01, 0x1b, 0xe2, 0x6d,
  	0x02, 0x19, 0x32, 0x00,
  	0x01, 0x1a, 0x84, 0x78,
  	0x80, 0xf9, 0xf2, 0x01,
  	0xff, 0xea, 0x10, 0x03,
  	0x08, 0x92, 0x25, 0x03,
-	0x00, 0xe2, 0x5e, 0x43,
-	0x01, 0x1a, 0xe8, 0x7d,
-	0x40, 0x5b, 0xe4, 0x7d,
-	0x01, 0x1a, 0xd2, 0x6d,
+	0x00, 0xe2, 0x62, 0x43,
+	0x01, 0x1a, 0xec, 0x7d,
+	0x40, 0x5b, 0xe8, 0x7d,
+	0x01, 0x1a, 0xd6, 0x6d,
  	0xfc, 0x42, 0x84, 0x78,
-	0x01, 0x1a, 0xec, 0x6d,
-	0x10, 0xea, 0x60, 0x59,
+	0x01, 0x1a, 0xf0, 0x6d,
+	0x10, 0xea, 0x64, 0x59,
  	0x10, 0xea, 0x04, 0x00,
  	0xfc, 0x42, 0x84, 0x78,
-	0x10, 0x40, 0xf2, 0x6d,
+	0x10, 0x40, 0xf6, 0x6d,
  	0x20, 0x4d, 0x84, 0x78,
-	0x40, 0x5b, 0xd2, 0x6d,
+	0x40, 0x5b, 0xd6, 0x6d,
  	0x01, 0x1a, 0x84, 0x78,
  	0x01, 0x90, 0x21, 0x1b,
  	0x30, 0x3f, 0xc0, 0x09,
  	0x30, 0xe0, 0x84, 0x60,
  	0x40, 0x4b, 0x84, 0x68,
  	0xff, 0xea, 0x52, 0x01,
-	0xee, 0x00, 0x08, 0x6e,
+	0xee, 0x00, 0x0c, 0x6e,
  	0x80, 0xf9, 0xf2, 0x01,
  	0xff, 0x90, 0x21, 0x1b,
  	0x02, 0xea, 0xb4, 0x00,
  	0x20, 0xea, 0x9a, 0x00,
-	0xf3, 0x42, 0x12, 0x6e,
-	0x12, 0xea, 0x60, 0x59,
+	0xf3, 0x42, 0x16, 0x6e,
+	0x12, 0xea, 0x64, 0x59,
  	0x12, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
-	0x0d, 0xea, 0x60, 0x59,
+	0x00, 0xe2, 0x14, 0x42,
+	0x0d, 0xea, 0x64, 0x59,
  	0x0d, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x10, 0x42,
+	0x00, 0xe2, 0x14, 0x42,
  	0x01, 0x90, 0x21, 0x1b,
-	0x11, 0xea, 0x60, 0x59,
+	0x11, 0xea, 0x64, 0x59,
  	0x11, 0xea, 0x04, 0x00,
-	0x00, 0xe2, 0x4e, 0x5b,
+	0x00, 0xe2, 0x52, 0x5b,
  	0x08, 0x5a, 0xb4, 0x00,
-	0x00, 0xe2, 0x40, 0x5e,
+	0x00, 0xe2, 0x44, 0x5e,
  	0xa8, 0xea, 0x32, 0x00,
-	0x00, 0xe2, 0x52, 0x59,
-	0x80, 0x1a, 0x2e, 0x7e,
-	0x00, 0xe2, 0x40, 0x5e,
+	0x00, 0xe2, 0x56, 0x59,
+	0x80, 0x1a, 0x32, 0x7e,
+	0x00, 0xe2, 0x44, 0x5e,
  	0x80, 0x19, 0x32, 0x00,
-	0x40, 0x5b, 0x34, 0x6e,
-	0x08, 0x5a, 0x34, 0x7e,
+	0x40, 0x5b, 0x38, 0x6e,
+	0x08, 0x5a, 0x38, 0x7e,
  	0x20, 0x4d, 0x84, 0x78,
  	0x02, 0x84, 0x09, 0x03,
-	0x40, 0x5b, 0x00, 0x7e,
+	0x40, 0x5b, 0x04, 0x7e,
  	0xff, 0x90, 0x21, 0x1b,
  	0x80, 0xf9, 0xf2, 0x01,
-	0x08, 0x92, 0x5f, 0x6b,
+	0x08, 0x92, 0x63, 0x6b,
  	0x02, 0xea, 0xb4, 0x04,
  	0x01, 0x40, 0xe1, 0x30,
  	0x05, 0x41, 0xe3, 0x98,
@@ -1038,116 +1040,116 @@
  	{ ahd_patch2_func, 67, 1, 2 },
  	{ ahd_patch0_func, 68, 1, 1 },
  	{ ahd_patch4_func, 116, 1, 1 },
-	{ ahd_patch2_func, 173, 3, 1 },
-	{ ahd_patch1_func, 176, 2, 1 },
-	{ ahd_patch5_func, 178, 1, 1 },
-	{ ahd_patch2_func, 187, 1, 2 },
-	{ ahd_patch0_func, 188, 1, 1 },
-	{ ahd_patch6_func, 189, 2, 2 },
-	{ ahd_patch0_func, 191, 6, 3 },
-	{ ahd_patch2_func, 194, 1, 2 },
-	{ ahd_patch0_func, 195, 1, 1 },
-	{ ahd_patch2_func, 198, 1, 2 },
-	{ ahd_patch0_func, 199, 1, 1 },
-	{ ahd_patch3_func, 201, 1, 1 },
-	{ ahd_patch7_func, 202, 3, 1 },
-	{ ahd_patch3_func, 211, 1, 1 },
-	{ ahd_patch5_func, 212, 16, 2 },
-	{ ahd_patch0_func, 228, 1, 1 },
-	{ ahd_patch8_func, 248, 2, 1 },
-	{ ahd_patch1_func, 252, 1, 2 },
-	{ ahd_patch0_func, 253, 1, 1 },
-	{ ahd_patch7_func, 256, 3, 1 },
-	{ ahd_patch1_func, 271, 1, 2 },
-	{ ahd_patch0_func, 272, 1, 1 },
-	{ ahd_patch1_func, 275, 1, 2 },
-	{ ahd_patch0_func, 276, 1, 1 },
-	{ ahd_patch2_func, 279, 1, 2 },
-	{ ahd_patch0_func, 280, 1, 1 },
-	{ ahd_patch9_func, 293, 2, 2 },
-	{ ahd_patch0_func, 295, 1, 1 },
-	{ ahd_patch1_func, 337, 1, 2 },
-	{ ahd_patch0_func, 338, 1, 1 },
-	{ ahd_patch2_func, 346, 1, 2 },
-	{ ahd_patch0_func, 347, 1, 1 },
-	{ ahd_patch2_func, 350, 1, 2 },
-	{ ahd_patch0_func, 351, 1, 1 },
-	{ ahd_patch1_func, 357, 1, 2 },
-	{ ahd_patch0_func, 358, 1, 1 },
-	{ ahd_patch1_func, 360, 1, 2 },
-	{ ahd_patch0_func, 361, 1, 1 },
-	{ ahd_patch10_func, 380, 1, 1 },
-	{ ahd_patch10_func, 383, 1, 1 },
+	{ ahd_patch2_func, 175, 3, 1 },
+	{ ahd_patch1_func, 178, 2, 1 },
+	{ ahd_patch5_func, 180, 1, 1 },
+	{ ahd_patch2_func, 189, 1, 2 },
+	{ ahd_patch0_func, 190, 1, 1 },
+	{ ahd_patch6_func, 191, 2, 2 },
+	{ ahd_patch0_func, 193, 6, 3 },
+	{ ahd_patch2_func, 196, 1, 2 },
+	{ ahd_patch0_func, 197, 1, 1 },
+	{ ahd_patch2_func, 200, 1, 2 },
+	{ ahd_patch0_func, 201, 1, 1 },
+	{ ahd_patch3_func, 203, 1, 1 },
+	{ ahd_patch7_func, 204, 3, 1 },
+	{ ahd_patch3_func, 213, 1, 1 },
+	{ ahd_patch5_func, 214, 16, 2 },
+	{ ahd_patch0_func, 230, 1, 1 },
+	{ ahd_patch8_func, 250, 2, 1 },
+	{ ahd_patch1_func, 254, 1, 2 },
+	{ ahd_patch0_func, 255, 1, 1 },
+	{ ahd_patch7_func, 258, 3, 1 },
+	{ ahd_patch1_func, 273, 1, 2 },
+	{ ahd_patch0_func, 274, 1, 1 },
+	{ ahd_patch1_func, 277, 1, 2 },
+	{ ahd_patch0_func, 278, 1, 1 },
+	{ ahd_patch2_func, 281, 1, 2 },
+	{ ahd_patch0_func, 282, 1, 1 },
+	{ ahd_patch9_func, 295, 2, 2 },
+	{ ahd_patch0_func, 297, 1, 1 },
+	{ ahd_patch1_func, 339, 1, 2 },
+	{ ahd_patch0_func, 340, 1, 1 },
+	{ ahd_patch2_func, 348, 1, 2 },
+	{ ahd_patch0_func, 349, 1, 1 },
+	{ ahd_patch2_func, 352, 1, 2 },
+	{ ahd_patch0_func, 353, 1, 1 },
+	{ ahd_patch1_func, 359, 1, 2 },
+	{ ahd_patch0_func, 360, 1, 1 },
+	{ ahd_patch1_func, 362, 1, 2 },
+	{ ahd_patch0_func, 363, 1, 1 },
+	{ ahd_patch10_func, 382, 1, 1 },
  	{ ahd_patch10_func, 385, 1, 1 },
-	{ ahd_patch10_func, 397, 1, 1 },
-	{ ahd_patch1_func, 407, 1, 2 },
-	{ ahd_patch0_func, 408, 1, 1 },
-	{ ahd_patch1_func, 410, 1, 2 },
-	{ ahd_patch0_func, 411, 1, 1 },
-	{ ahd_patch1_func, 419, 1, 2 },
-	{ ahd_patch0_func, 420, 1, 1 },
-	{ ahd_patch2_func, 433, 1, 2 },
-	{ ahd_patch0_func, 434, 1, 1 },
-	{ ahd_patch11_func, 470, 1, 1 },
-	{ ahd_patch1_func, 478, 1, 2 },
-	{ ahd_patch0_func, 479, 1, 1 },
-	{ ahd_patch2_func, 491, 1, 2 },
-	{ ahd_patch0_func, 492, 1, 1 },
-	{ ahd_patch12_func, 495, 6, 2 },
-	{ ahd_patch0_func, 501, 1, 1 },
-	{ ahd_patch13_func, 522, 7, 1 },
-	{ ahd_patch14_func, 531, 1, 1 },
-	{ ahd_patch15_func, 540, 1, 1 },
-	{ ahd_patch16_func, 541, 1, 2 },
-	{ ahd_patch0_func, 542, 1, 1 },
-	{ ahd_patch17_func, 545, 1, 1 },
-	{ ahd_patch16_func, 546, 1, 1 },
-	{ ahd_patch18_func, 557, 1, 2 },
-	{ ahd_patch0_func, 558, 1, 1 },
-	{ ahd_patch1_func, 577, 1, 2 },
-	{ ahd_patch0_func, 578, 1, 1 },
-	{ ahd_patch1_func, 581, 1, 2 },
-	{ ahd_patch0_func, 582, 1, 1 },
-	{ ahd_patch2_func, 587, 1, 2 },
-	{ ahd_patch0_func, 588, 1, 1 },
-	{ ahd_patch2_func, 592, 1, 2 },
-	{ ahd_patch0_func, 593, 1, 1 },
-	{ ahd_patch1_func, 594, 1, 2 },
+	{ ahd_patch10_func, 387, 1, 1 },
+	{ ahd_patch10_func, 399, 1, 1 },
+	{ ahd_patch1_func, 409, 1, 2 },
+	{ ahd_patch0_func, 410, 1, 1 },
+	{ ahd_patch1_func, 412, 1, 2 },
+	{ ahd_patch0_func, 413, 1, 1 },
+	{ ahd_patch1_func, 421, 1, 2 },
+	{ ahd_patch0_func, 422, 1, 1 },
+	{ ahd_patch2_func, 435, 1, 2 },
+	{ ahd_patch0_func, 436, 1, 1 },
+	{ ahd_patch11_func, 472, 1, 1 },
+	{ ahd_patch1_func, 480, 1, 2 },
+	{ ahd_patch0_func, 481, 1, 1 },
+	{ ahd_patch2_func, 493, 1, 2 },
+	{ ahd_patch0_func, 494, 1, 1 },
+	{ ahd_patch12_func, 497, 6, 2 },
+	{ ahd_patch0_func, 503, 1, 1 },
+	{ ahd_patch13_func, 524, 7, 1 },
+	{ ahd_patch14_func, 533, 1, 1 },
+	{ ahd_patch15_func, 542, 1, 1 },
+	{ ahd_patch16_func, 543, 1, 2 },
+	{ ahd_patch0_func, 544, 1, 1 },
+	{ ahd_patch17_func, 547, 1, 1 },
+	{ ahd_patch16_func, 548, 1, 1 },
+	{ ahd_patch18_func, 559, 1, 2 },
+	{ ahd_patch0_func, 560, 1, 1 },
+	{ ahd_patch1_func, 579, 1, 2 },
+	{ ahd_patch0_func, 580, 1, 1 },
+	{ ahd_patch1_func, 583, 1, 2 },
+	{ ahd_patch0_func, 584, 1, 1 },
+	{ ahd_patch2_func, 589, 1, 2 },
+	{ ahd_patch0_func, 590, 1, 1 },
+	{ ahd_patch2_func, 594, 1, 2 },
  	{ ahd_patch0_func, 595, 1, 1 },
-	{ ahd_patch2_func, 606, 1, 2 },
-	{ ahd_patch0_func, 607, 1, 1 },
-	{ ahd_patch19_func, 611, 1, 1 },
-	{ ahd_patch20_func, 616, 1, 1 },
-	{ ahd_patch21_func, 617, 2, 1 },
-	{ ahd_patch20_func, 621, 1, 2 },
-	{ ahd_patch0_func, 622, 1, 1 },
-	{ ahd_patch2_func, 625, 1, 2 },
-	{ ahd_patch0_func, 626, 1, 1 },
-	{ ahd_patch2_func, 641, 1, 2 },
-	{ ahd_patch0_func, 642, 1, 1 },
-	{ ahd_patch13_func, 643, 14, 1 },
-	{ ahd_patch1_func, 661, 1, 2 },
-	{ ahd_patch0_func, 662, 1, 1 },
-	{ ahd_patch13_func, 663, 1, 1 },
-	{ ahd_patch1_func, 675, 1, 2 },
-	{ ahd_patch0_func, 676, 1, 1 },
-	{ ahd_patch1_func, 683, 1, 2 },
-	{ ahd_patch0_func, 684, 1, 1 },
-	{ ahd_patch19_func, 707, 1, 1 },
-	{ ahd_patch19_func, 745, 1, 1 },
-	{ ahd_patch1_func, 756, 1, 2 },
-	{ ahd_patch0_func, 757, 1, 1 },
-	{ ahd_patch1_func, 774, 1, 2 },
-	{ ahd_patch0_func, 775, 1, 1 },
-	{ ahd_patch1_func, 777, 1, 2 },
-	{ ahd_patch0_func, 778, 1, 1 },
-	{ ahd_patch1_func, 781, 1, 2 },
-	{ ahd_patch0_func, 782, 1, 1 },
-	{ ahd_patch22_func, 784, 1, 2 },
-	{ ahd_patch0_func, 785, 2, 1 },
-	{ ahd_patch23_func, 788, 4, 2 },
-	{ ahd_patch0_func, 792, 1, 1 },
-	{ ahd_patch23_func, 800, 11, 1 }
+	{ ahd_patch1_func, 596, 1, 2 },
+	{ ahd_patch0_func, 597, 1, 1 },
+	{ ahd_patch2_func, 608, 1, 2 },
+	{ ahd_patch0_func, 609, 1, 1 },
+	{ ahd_patch19_func, 613, 1, 1 },
+	{ ahd_patch20_func, 618, 1, 1 },
+	{ ahd_patch21_func, 619, 2, 1 },
+	{ ahd_patch20_func, 623, 1, 2 },
+	{ ahd_patch0_func, 624, 1, 1 },
+	{ ahd_patch2_func, 627, 1, 2 },
+	{ ahd_patch0_func, 628, 1, 1 },
+	{ ahd_patch2_func, 643, 1, 2 },
+	{ ahd_patch0_func, 644, 1, 1 },
+	{ ahd_patch13_func, 645, 14, 1 },
+	{ ahd_patch1_func, 663, 1, 2 },
+	{ ahd_patch0_func, 664, 1, 1 },
+	{ ahd_patch13_func, 665, 1, 1 },
+	{ ahd_patch1_func, 677, 1, 2 },
+	{ ahd_patch0_func, 678, 1, 1 },
+	{ ahd_patch1_func, 685, 1, 2 },
+	{ ahd_patch0_func, 686, 1, 1 },
+	{ ahd_patch19_func, 709, 1, 1 },
+	{ ahd_patch19_func, 747, 1, 1 },
+	{ ahd_patch1_func, 758, 1, 2 },
+	{ ahd_patch0_func, 759, 1, 1 },
+	{ ahd_patch1_func, 776, 1, 2 },
+	{ ahd_patch0_func, 777, 1, 1 },
+	{ ahd_patch1_func, 779, 1, 2 },
+	{ ahd_patch0_func, 780, 1, 1 },
+	{ ahd_patch1_func, 783, 1, 2 },
+	{ ahd_patch0_func, 784, 1, 1 },
+	{ ahd_patch22_func, 786, 1, 2 },
+	{ ahd_patch0_func, 787, 2, 1 },
+	{ ahd_patch23_func, 790, 4, 2 },
+	{ ahd_patch0_func, 794, 1, 1 },
+	{ ahd_patch23_func, 802, 11, 1 }
  };

  static struct cs {
@@ -1161,14 +1163,14 @@
  	{ 65, 66 },
  	{ 72, 92 },
  	{ 110, 137 },
-	{ 138, 173 },
-	{ 178, 186 },
-	{ 211, 262 },
-	{ 423, 431 },
-	{ 441, 443 },
-	{ 446, 455 },
-	{ 707, 737 },
-	{ 747, 751 }
+	{ 138, 175 },
+	{ 180, 188 },
+	{ 213, 264 },
+	{ 425, 433 },
+	{ 443, 445 },
+	{ 448, 457 },
+	{ 709, 739 },
+	{ 749, 753 }
  };

  static const int num_critical_sections = sizeof(critical_sections)
==== //depot/aic7xxx/aic7xxx/aic7xxx.c#153 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c ====
--- /tmp/tmp.27211.9	2004-09-27 13:37:03.641831520 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c	2004-04-09 16:46:42.000000000 -0400
@@ -37,7 +37,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#153 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#155 $
   */

  #ifdef __linux__
@@ -231,6 +231,9 @@
  					u_int start_instr, u_int *skip_addr);
  static void		ahc_download_instr(struct ahc_softc *ahc,
  					   u_int instrptr, uint8_t *dconsts);
+static int		ahc_other_scb_timeout(struct ahc_softc *ahc,
+					      struct scb *scb,
+					      struct scb *other_scb);
  #ifdef AHC_TARGET_MODE
  static void		ahc_queue_lstate_event(struct ahc_softc *ahc,
  					       struct ahc_tmode_lstate *lstate,
@@ -1200,7 +1203,7 @@
  			ahc_handle_devreset(ahc, &devinfo,
  					    CAM_SEL_TIMEOUT,
  					    "Selection Timeout",
-					    /*verbose_level*/0);
+					    /*verbose_level*/1);
  		}
  		ahc_outb(ahc, CLRINT, CLRSCSIINT);
  		ahc_restart(ahc);
@@ -6864,6 +6867,58 @@
  }

  /*
+ * Re-schedule a timeout for the passed in SCB if we determine that some
+ * other SCB is in the process of recovery or an SCB with a longer
+ * timeout is still pending.  Limit our search to just "other_scb"
+ * if it is non-NULL.
+ */
+static int
+ahc_other_scb_timeout(struct ahc_softc *ahc, struct scb *scb,
+		      struct scb *other_scb)
+{
+	u_int	newtimeout;
+	int	found;
+
+	ahc_print_path(ahc, scb);
+	printf("Other SCB Timeout%s",
+ 	       (scb->flags & SCB_OTHERTCL_TIMEOUT) != 0
+	       ? " again\n" : "\n");
+
+	newtimeout = aic_get_timeout(scb);
+	scb->flags |= SCB_OTHERTCL_TIMEOUT;
+	found = 0;
+	if (other_scb != NULL) {
+		if ((other_scb->flags
+		   & (SCB_OTHERTCL_TIMEOUT|SCB_TIMEDOUT)) == 0
+		 || (other_scb->flags & SCB_RECOVERY_SCB) != 0) {
+			found++;
+			newtimeout = MAX(aic_get_timeout(other_scb),
+					 newtimeout);
+		}
+	} else {
+		LIST_FOREACH(other_scb, &ahc->pending_scbs, pending_links) {
+			if ((other_scb->flags
+			   & (SCB_OTHERTCL_TIMEOUT|SCB_TIMEDOUT)) == 0
+			 || (other_scb->flags & SCB_RECOVERY_SCB) != 0) {
+				found++;
+				newtimeout =
+				    MAX(aic_get_timeout(other_scb),
+					newtimeout);
+			}
+		}
+	}
+
+	if (found != 0)
+		aic_scb_timer_reset(scb, newtimeout);
+	else {
+		ahc_print_path(ahc, scb);
+		printf("No other SCB worth waiting for...\n");
+	}
+
+	return (found != 0);
+}
+
+/*
   * ahc_recover_commands determines if any of the commands that have currently
   * timedout are the root cause for this timeout.  Innocent commands are given
   * a new timeout while we wait for the command executing on the bus to timeout.
@@ -6990,17 +7045,9 @@
  			 */
  			active_scb = ahc_lookup_scb(ahc, active_scb_index);
  			if (active_scb != scb) {
-				u_int	newtimeout;
-
-				ahc_print_path(ahc, scb);
-				printf("Other SCB Timeout%s",
-			 	       (scb->flags & SCB_OTHERTCL_TIMEOUT) != 0
-				       ? " again\n" : "\n");
-				scb->flags |= SCB_OTHERTCL_TIMEOUT;
-				newtimeout =
-				    MAX(aic_get_timeout(active_scb),
-					aic_get_timeout(scb));
-				aic_scb_timer_reset(scb, newtimeout);
+				if (ahc_other_scb_timeout(ahc, scb,
+							  active_scb) != 0)
+					goto bus_reset;
  				continue;
  			}

==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#270 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c ====
--- /tmp/tmp.27211.10	2004-09-27 13:37:08.994017864 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c	2004-04-09 12:57:10.000000000 -0400
@@ -1,7 +1,7 @@
  /*
   * Adaptec AIC7xxx device driver for Linux.
   *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#270 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#271 $
   *
   * Copyright (c) 1994 John Aycock
   *   The University of Calgary Department of Computer Science.
@@ -4563,7 +4563,21 @@
  			new_status = DID_BAD_TARGET;
  			break;
  		case CAM_SEL_TIMEOUT:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+			/*
+			 * The 2.4.X SCSI layer will not offline
+			 * devices in response to DID_NO_CONNECT.
+			 * Return a command timeout here instead
+			 * so that for commands other than inquiry
+			 * and request sense commands (which the
+			 * mid-layer special cases) recovery will
+			 * take place and persistently missing
+			 * devices are eventually offlined.
+			 */
+			new_status = DID_TIME_OUT;
+#else
  			new_status = DID_NO_CONNECT;
+#endif
  			break;
  		case CAM_SCSI_BUS_RESET:
  		case CAM_BDR_SENT:
==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#170 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.h ====
--- /tmp/tmp.27211.11	2004-09-27 13:37:09.297971656 -0400
+++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.h	2004-04-09 16:48:09.000000000 -0400
@@ -53,7 +53,7 @@
   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGES.
   *
- * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#170 $
+ * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#172 $
   *
   */
  #ifndef _AIC7XXX_LINUX_H_
@@ -113,7 +113,7 @@
  #include <linux/smp.h>
  #endif

-#define AIC7XXX_DRIVER_VERSION "6.3.6"
+#define AIC7XXX_DRIVER_VERSION "6.3.8"

  /********************* Definitions Required by the Core ***********************/
  /*



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-09-28 13:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-28 13:07 [patch 24/28] Sync up drivers/scsi/aic7xxx Luben Tuikov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.