From db7d4daea91e105e3859cf461d7e53b9b77454b2 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Sun, 13 Jun 1999 16:29:25 +0000 Subject: Merge with Linux 2.2.8. --- drivers/net/3c507.c | 14 + drivers/net/3c509.c | 235 +- drivers/net/3c523.c | 142 +- drivers/net/3c527.c | 1152 +++ drivers/net/3c527.h | 40 + drivers/net/8390.c | 10 +- drivers/net/Config.in | 7 +- drivers/net/Makefile | 27 +- drivers/net/Space.c | 6 +- drivers/net/a2065.c | 26 +- drivers/net/acenic.c | 647 +- drivers/net/acenic.h | 161 +- drivers/net/acenic_firmware.h | 14064 ++++++++++++++++++++++-------------- drivers/net/ariadne.c | 2 + drivers/net/bsd_comp.c | 1 - drivers/net/cosa.c | 214 +- drivers/net/cosa.h | 11 +- drivers/net/cs89x0.c | 32 +- drivers/net/de4x5.c | 109 +- drivers/net/de4x5.h | 2 + drivers/net/defxx.c | 56 +- drivers/net/defxx.h | 4 + drivers/net/eepro100.c | 7 +- drivers/net/eexpress.c | 28 + drivers/net/epic100.c | 1 + drivers/net/eql.c | 2 +- drivers/net/ethertap.c | 16 +- drivers/net/hamradio/baycom_epp.c | 2 +- drivers/net/hostess_sv11.c | 4 +- drivers/net/ibmtr.c | 83 +- drivers/net/ibmtr.h | 1 + drivers/net/irda/Config.in | 1 + drivers/net/irda/Makefile | 10 +- drivers/net/irda/actisys.c | 95 +- drivers/net/irda/esi.c | 48 +- drivers/net/irda/girbil.c | 276 + drivers/net/irda/irport.c | 265 +- drivers/net/irda/irtty.c | 446 +- drivers/net/irda/pc87108.c | 169 +- drivers/net/irda/tekram.c | 179 +- drivers/net/irda/uircc.c | 555 +- drivers/net/irda/w83977af_ir.c | 358 +- drivers/net/mace.c | 192 +- drivers/net/myri_sbus.c | 29 +- drivers/net/ne.c | 1 + drivers/net/ne2.c | 1 - drivers/net/net_init.c | 16 + drivers/net/pcnet32.c | 1514 ++-- drivers/net/plip.c | 4 +- drivers/net/ppp.c | 310 +- drivers/net/ppp_deflate.c | 1 - drivers/net/rclanmtl.c | 8 +- drivers/net/rclanmtl.h | 2 +- drivers/net/rcpci45.c | 320 +- drivers/net/rrunner.c | 684 +- drivers/net/rrunner.h | 91 +- drivers/net/shaper.c | 70 +- drivers/net/sk_g16.c | 2 +- drivers/net/smc-ultra.c | 55 +- drivers/net/smc9194.c | 1 - drivers/net/sunbmac.c | 1557 ++++ drivers/net/sunbmac.h | 381 + drivers/net/sunhme.c | 738 +- drivers/net/sunhme.h | 33 +- drivers/net/sunlance.c | 118 +- drivers/net/sunqe.c | 45 +- drivers/net/syncppp.c | 25 +- drivers/net/syncppp.h | 1 + drivers/net/tlan.c | 43 +- drivers/net/via-rhine.c | 5 +- drivers/net/wavelan.c | 333 +- drivers/net/wavelan.h | 3 + drivers/net/wavelan.p.h | 117 +- drivers/net/z85230.c | 68 +- 74 files changed, 17344 insertions(+), 8932 deletions(-) create mode 100644 drivers/net/3c527.c create mode 100644 drivers/net/3c527.h create mode 100644 drivers/net/irda/girbil.c create mode 100644 drivers/net/sunbmac.c create mode 100644 drivers/net/sunbmac.h (limited to 'drivers/net') diff --git a/drivers/net/3c507.c b/drivers/net/3c507.c index f6332d952..b27fa2148 100644 --- a/drivers/net/3c507.c +++ b/drivers/net/3c507.c @@ -40,6 +40,7 @@ static const char *version = info that the casual reader might think that it documents the i82586 :-<. */ +#include #include #include #include @@ -53,6 +54,7 @@ static const char *version = #include #include #include +#include #include #include @@ -123,6 +125,7 @@ struct net_local { ushort tx_head; ushort tx_cmd_link; ushort tx_reap; + spinlock_t lock; }; /* @@ -448,6 +451,7 @@ static int el16_send_packet(struct sk_buff *skb, struct device *dev) struct net_local *lp = (struct net_local *)dev->priv; int ioaddr = dev->base_addr; unsigned long shmem = dev->mem_start; + unsigned long flags; if (dev->tbusy) { @@ -487,7 +491,13 @@ static int el16_send_packet(struct sk_buff *skb, struct device *dev) lp->stats.tx_bytes+=length; /* Disable the 82586's input to the interrupt line. */ outb(0x80, ioaddr + MISC_CTRL); +#ifdef CONFIG_SMP + spin_lock_irqsave(&lp->lock, flags); hardware_send_packet(dev, buf, length); + spin_unlock_irqrestore(&lp->lock, flags); +#else + hardware_send_packet(dev, buf, length); +#endif dev->trans_start = jiffies; /* Enable the 82586 interrupt input. */ outb(0x84, ioaddr + MISC_CTRL); @@ -515,11 +525,14 @@ static void el16_interrupt(int irq, void *dev_id, struct pt_regs *regs) return; } dev->interrupt = 1; + ioaddr = dev->base_addr; lp = (struct net_local *)dev->priv; shmem = dev->mem_start; + spin_lock(&lp->lock); + status = readw(shmem+iSCB_STATUS); if (net_debug > 4) { @@ -598,6 +611,7 @@ static void el16_interrupt(int irq, void *dev_id, struct pt_regs *regs) /* Enable the 82586's interrupt input. */ outb(0x84, ioaddr + MISC_CTRL); + spin_unlock(&lp->lock); return; } diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index 2b79709aa..4a14d326b 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c @@ -1,8 +1,8 @@ /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */ /* - Written 1993-1997 by Donald Becker. + Written 1993-1998 by Donald Becker. - Copyright 1994-1997 by Donald Becker. + Copyright 1994-1998 by Donald Becker. Copyright 1993 United States Government as represented by the Director, National Security Agency. This software may be used and distributed according to the terms of the GNU Public License, @@ -35,19 +35,24 @@ other cleanups. -djb Andrea Arcangeli: Upgraded to Donald Becker's version 1.12. Rick Payne: Fixed SMP race condition + v1.13 9/8/97 Made 'max_interrupt_work' an insmod-settable variable -djb + v1.14 10/15/97 Avoided waiting..discard message for fast machines -djb + v1.15 1/31/98 Faster recovery for Tx errors. -djb + v1.16 2/3/98 Different ID port handling to avoid sound cards. -djb */ -static char *version = "3c509.c:1.12 6/4/97 becker@cesdis.gsfc.nasa.gov\n"; +static char *version = "3c509.c:1.16 (2.2) 2/3/98 becker@cesdis.gsfc.nasa.gov.\n"; /* A few values that may be tweaked. */ /* Time in jiffies before concluding the transmitter is hung. */ #define TX_TIMEOUT (400*HZ/1000) /* Maximum events (Rx packets, etc.) to handle at each interrupt. */ -#define INTR_WORK 10 +static int max_interrupt_work = 10; +#include #include -#include /* for CONFIG_MCA */ +#include #include #include #include @@ -129,12 +134,13 @@ struct el3_private { /* skb send-queue */ int head, size; struct sk_buff *queue[SKB_QUEUE_SIZE]; + char mca_slot; }; -static int id_port = 0x100; +static int id_port = 0x110; /* Start with 0x110 to avoid new sound cards.*/ static struct device *el3_root_dev = NULL; static ushort id_read_eeprom(int index); -static ushort read_eeprom(short ioaddr, int index); +static ushort read_eeprom(int ioaddr, int index); static int el3_open(struct device *dev); static int el3_start_xmit(struct sk_buff *skb, struct device *dev); static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs); @@ -144,14 +150,29 @@ static int el3_rx(struct device *dev); static int el3_close(struct device *dev); static void set_multicast_list(struct device *dev); - +#ifdef CONFIG_MCA +struct el3_mca_adapters_struct { + char* name; + int id; +}; + +struct el3_mca_adapters_struct el3_mca_adapters[] = { + { "3Com 3c529 EtherLink III (10base2)", 0x627c }, + { "3Com 3c529 EtherLink III (10baseT)", 0x627d }, + { "3Com 3c529 EtherLink III (test mode)", 0x62db }, + { "3Com 3c529 EtherLink III (TP or coax)", 0x62f6 }, + { "3Com 3c529 EtherLink III (TP)", 0x62f7 }, + { NULL, 0 }, +}; +#endif int el3_probe(struct device *dev) { short lrs_state = 0xff, i; - ushort ioaddr, irq, if_port; - short phys_addr[3]; + int ioaddr, irq, if_port; + u16 phys_addr[3]; static int current_tag = 0; + int mca_slot = -1; /* First check all slots of the EISA bus. The next slot address to probe is kept in 'eisa_addr' to support multiple probe() calls. */ @@ -182,69 +203,72 @@ int el3_probe(struct device *dev) } #ifdef CONFIG_MCA -#define MCA_NUMBER_OF_SLOTS 8 -#define MCA_PORT_POS_SEL 0x096 -#define MCA_PORT_ID_REG_0 0x100 -#define MCA_PORT_ID_REG_1 0x101 -#define MCA_SELECT_BIT 0x08 - if (MCA_bus) - { - u_int mca_id; - u_char posreg[4]; - int mca_slot; - - if (el3_debug > 2) - printk("3c529: probing...\n"); - /* This should probably be done once early on and read into - * a structure somewhere... */ - for (mca_slot = 0; mca_slot < MCA_NUMBER_OF_SLOTS; mca_slot++) - { - /* Select MCA slot i */ - outb_p(mca_slot | MCA_SELECT_BIT, MCA_PORT_POS_SEL); - mca_id = ((inb_p(MCA_PORT_ID_REG_1)<<8) - + inb_p(MCA_PORT_ID_REG_0)); - if (mca_id == 0x627C /* 10base2 */ - || mca_id == 0x627D /* 10baseT */ - || mca_id == 0x62DB /* Test mode */ - || mca_id == 0x62F6 /* TP or coax */ - || mca_id == 0x62F7) /* TP only */ - { - if (el3_debug > 1) - printk("3c529: Found with id 0x%x at slot %d\n", - mca_id, mca_slot); - posreg[0] = inb_p(0x102); posreg[1] = inb_p(0x103); - posreg[2] = inb_p(0x104); posreg[3] = inb_p(0x105); - break; + /* Based on Erik Nygren's (nygren@mit.edu) 3c529 patch, heavily + * modified by Chris Beauregard (cpbeaure@csclub.uwaterloo.ca) + * to support standard MCA probing. + * + * redone for multi-card detection by ZP Gu (zpg@castle.net) + * now works as a module + */ + + if( MCA_bus ) { + int slot, j; + u_char pos4, pos5; + + for( j = 0; el3_mca_adapters[j].name != NULL; j ++ ) { + slot = 0; + while( slot != MCA_NOTFOUND ) { + slot = mca_find_unused_adapter( + el3_mca_adapters[j].id, slot ); + if( slot == MCA_NOTFOUND ) break; + + /* if we get this far, an adapter has been + * detected and is enabled + */ + + printk("3c509: found %s at slot %d\n", + el3_mca_adapters[j].name, slot + 1 ); + + pos4 = mca_read_stored_pos( slot, 4 ); + pos5 = mca_read_stored_pos( slot, 5 ); + + ioaddr = ((short)((pos4&0xfc)|0x02)) << 8; + irq = pos5 & 0x0f; + + /* probing for a card at a particular IO/IRQ */ + if(dev && ((dev->irq >= 1 && dev->irq != irq) || + (dev->base_addr >= 1 && dev->base_addr != ioaddr))) { + slot++; /* probing next slot */ + continue; + } + + /* claim the slot */ + mca_set_adapter_name(slot, el3_mca_adapters[j].name); + mca_set_adapter_procfn(slot, NULL, NULL); + mca_mark_as_used(slot); + + if_port = pos4 & 0x03; + if (el3_debug > 2) { + printk("3c529: irq %d ioaddr 0x%x ifport %d\n", irq, ioaddr, if_port); + } + for (i = 0; i < 3; i++) { + phys_addr[i] = htons(read_eeprom(ioaddr, i)); + } + + mca_slot = slot; + + goto found; } - mca_id = 0xFFFF; - } - /* Read values from POS registers so now disable */ - outb(0,MCA_PORT_POS_SEL); - if (mca_id != 0xFFFF && !(posreg[0]&0x01)) - printk("3c529: Adapter found but disabled in slot %d\n", mca_slot); - else if (mca_id != 0xFFFF && posreg[0]&0x01) - { - /* Found and adapter is enabled */ - if (el3_debug > 2) - printk("3c529: pos registers 0:0x%x 1:0x%x 2:0x%x 3:0x%x\n", - posreg[0], posreg[1], posreg[2], posreg[3]); - ioaddr = ((short)((posreg[2]&0xfc)|0x02)) << 8; - irq = posreg[3] & 0x0f; - if_port = posreg[2] & 0x03; - if (el3_debug > 2) - printk("3c529: irq %d ioaddr 0x%x ifport %d\n", - irq, ioaddr, if_port); - for (i = 0; i < 3; i++) - phys_addr[i] = htons(read_eeprom(ioaddr, i)); - goto found; } + /* if we get here, we didn't find an MCA adapter */ + return -ENODEV; } #endif /* Reset the ISA PnP mechanism on 3c509b. */ outb(0x02, 0x279); /* Select PnP config control register. */ outb(0x02, 0xA79); /* Return to WaitForKey state. */ /* Select an open I/O location at 0x1*0 to do contention select. */ - for (id_port = 0x100; id_port < 0x200; id_port += 0x10) { + for ( ; id_port < 0x200; id_port += 0x10) { if (check_region(id_port, 1)) continue; outb(0x00, id_port); @@ -288,18 +312,23 @@ int el3_probe(struct device *dev) } { - unsigned short iobase = id_read_eeprom(8); + unsigned int iobase = id_read_eeprom(8); if_port = iobase >> 14; ioaddr = 0x200 + ((iobase & 0x1f) << 4); } - if (dev && dev->irq > 1 && dev->irq < 16) - irq = dev->irq; - else - irq = id_read_eeprom(9) >> 12; - - if (dev && dev->base_addr != 0 - && dev->base_addr != (unsigned short)ioaddr) { - return -ENODEV; + irq = id_read_eeprom(9) >> 12; + + if (dev) { /* Set passed-in IRQ or I/O Addr. */ + if (dev->irq > 1 && dev->irq < 16) + irq = dev->irq; + + if (dev->base_addr) { + if (dev->mem_end == 0x3c509 /* Magic key */ + && dev->base_addr >= 0x200 && dev->base_addr <= 0x3e0) + ioaddr = dev->base_addr & 0x3f0; + else if (dev->base_addr != ioaddr) + return -ENODEV; + } } /* Set the adaptor tag so that the next card can be found. */ @@ -342,7 +371,8 @@ int el3_probe(struct device *dev) if (dev->priv == NULL) return -ENOMEM; memset(dev->priv, 0, sizeof(struct el3_private)); - + + ((struct el3_private *)dev->priv)->mca_slot = mca_slot; ((struct el3_private *)dev->priv)->next_dev = el3_root_dev; el3_root_dev = dev; @@ -364,7 +394,7 @@ int el3_probe(struct device *dev) /* Read a word from the EEPROM using the regular EEPROM access register. Assume that we are in register window zero. */ -static ushort read_eeprom(short ioaddr, int index) +static ushort read_eeprom(int ioaddr, int index) { outw(EEPROM_READ + index, ioaddr + 10); /* Pause for at least 162 us. for the read to take place. */ @@ -394,7 +424,6 @@ static ushort id_read_eeprom(int index) } - static int el3_open(struct device *dev) { @@ -464,7 +493,7 @@ el3_open(struct device *dev) /* Ack all pending events, and set active indicator mask. */ outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq, ioaddr + EL3_CMD); - outw(SetIntrEnb | IntLatch | TxAvailable | RxComplete | StatsFull, + outw(SetIntrEnb | IntLatch|TxAvailable|TxComplete|RxComplete|StatsFull, ioaddr + EL3_CMD); if (el3_debug > 3) @@ -539,7 +568,7 @@ el3_start_xmit(struct sk_buff *skb, struct device *dev) */ #ifdef __SMP__ - disable_irq(dev->irq); + disable_irq_nosync(dev->irq); spin_lock(&lp->lock); #endif @@ -589,7 +618,7 @@ el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) struct device *dev = (struct device *)dev_id; struct el3_private *lp; int ioaddr, status; - int i = INTR_WORK; + int i = max_interrupt_work; if (dev == NULL) { printk ("el3_interrupt(): irq %d for unknown device.\n", irq); @@ -624,7 +653,7 @@ el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) dev->tbusy = 0; mark_bh(NET_BH); } - if (status & (AdapterFailure | RxEarly | StatsFull)) { + if (status & (AdapterFailure | RxEarly | StatsFull | TxComplete)) { /* Handle all uncommon interrupts. */ if (status & StatsFull) /* Empty statistics. */ update_stats(dev); @@ -632,6 +661,18 @@ el3_interrupt(int irq, void *dev_id, struct pt_regs *regs) el3_rx(dev); outw(AckIntr | RxEarly, ioaddr + EL3_CMD); } + if (status & TxComplete) { /* Really Tx error. */ + struct el3_private *lp = (struct el3_private *)dev->priv; + short tx_status; + int i = 4; + + while (--i>0 && (tx_status = inb(ioaddr + TX_STATUS)) > 0) { + if (tx_status & 0x38) lp->stats.tx_aborted_errors++; + if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD); + if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD); + outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */ + } + } if (status & AdapterFailure) { /* Adapter failure requires Rx reset and reinit. */ outw(RxReset, ioaddr + EL3_CMD); @@ -730,6 +771,8 @@ el3_rx(struct device *dev) while ((rx_status = inw(ioaddr + RX_STATUS)) > 0) { if (rx_status & 0x4000) { /* Error, update stats. */ short error = rx_status & 0x3800; + + outw(RxDiscard, ioaddr + EL3_CMD); lp->stats.rx_errors++; switch (error) { case 0x0000: lp->stats.rx_over_errors++; break; @@ -761,19 +804,21 @@ el3_rx(struct device *dev) (pkt_len + 3) >> 2); #endif + outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ skb->protocol = eth_type_trans(skb,dev); netif_rx(skb); - outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ lp->stats.rx_packets++; continue; - } else if (el3_debug) + } + outw(RxDiscard, ioaddr + EL3_CMD); + lp->stats.rx_dropped++; + if (el3_debug) printk("%s: Couldn't allocate a sk_buff of size %d.\n", dev->name, pkt_len); } - lp->stats.rx_dropped++; - outw(RxDiscard, ioaddr + EL3_CMD); + inw(ioaddr + EL3_STATUS); /* Delay. */ while (inw(ioaddr + EL3_STATUS) & 0x1000) - printk(" Waiting for 3c509 to discard packet, status %x.\n", + printk(KERN_DEBUG " Waiting for 3c509 to discard packet, status %x.\n", inw(ioaddr + EL3_STATUS) ); } @@ -786,7 +831,10 @@ el3_rx(struct device *dev) static void set_multicast_list(struct device *dev) { - short ioaddr = dev->base_addr; + unsigned long flags; + struct el3_private *lp = (struct el3_private *)dev->priv; + int ioaddr = dev->base_addr; + if (el3_debug > 1) { static int old = 0; if (old != dev->mc_count) { @@ -794,6 +842,7 @@ set_multicast_list(struct device *dev) printk("%s: Setting Rx mode to %d addresses.\n", dev->name, dev->mc_count); } } + spin_lock_irqsave(&lp->lock, flags); if (dev->flags&IFF_PROMISC) { outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm, ioaddr + EL3_CMD); @@ -803,6 +852,7 @@ set_multicast_list(struct device *dev) } else outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD); + spin_unlock_irqrestore(&lp->lock, flags); } static int @@ -844,7 +894,7 @@ el3_close(struct device *dev) } #ifdef MODULE -/* Parameter that may be passed into the module. */ +/* Parameters that may be passed into the module. */ static int debug = -1; static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1}; static int xcvr[] = {-1, -1, -1, -1, -1, -1, -1, -1}; @@ -880,7 +930,12 @@ cleanup_module(void) /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ while (el3_root_dev) { - next_dev = ((struct el3_private *)el3_root_dev->priv)->next_dev; + struct el3_private *lp = (struct el3_private *)el3_root_dev->priv; +#ifdef CONFIG_MCA + if(lp->mca_slot!=-1) + mca_mark_as_unused(lp->mca_slot); +#endif + next_dev = lp->next_dev; unregister_netdev(el3_root_dev); release_region(el3_root_dev->base_addr, EL3_IO_EXTENT); kfree(el3_root_dev); @@ -888,7 +943,7 @@ cleanup_module(void) } } #endif /* MODULE */ - + /* * Local variables: * compile-command: "gcc -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O6 -c 3c509.c" diff --git a/drivers/net/3c523.c b/drivers/net/3c523.c index d907fe7f3..25daedb2d 100644 --- a/drivers/net/3c523.c +++ b/drivers/net/3c523.c @@ -62,8 +62,8 @@ search the MCA slots until it finds a 3c523 with the specified parameters. - This driver should support multiple ethernet cards, but I can't test - that. If someone would I'd greatly appreciate it. + This driver does support multiple ethernet cards when used as a module + (up to MAX_3C523_CARDS, the default being 4) This has been tested with both BNC and TP versions, internal and external transceivers. Haven't tested with the 64K version (that I @@ -76,7 +76,12 @@ update to 1.3.59, incorporated multicast diffs from ni52.c Feb 15th, 1996 added shared irq support - + Apr 1999 + added support for multiple cards when used as a module + added option to disable multicast as is causes problems + Ganesh Sittampalam + Stuart Adamson + $Header: /fsys2/home/chrisb/linux-1.3.59-MCA/drivers/net/RCS/3c523.c,v 1.1 1996/02/05 01:53:46 chrisb Exp chrisb $ */ @@ -107,6 +112,7 @@ /*************************************************************************/ #define DEBUG /* debug on */ #define SYSBUSVAL 0 /* 1 = 8 Bit, 0 = 16 bit - 3c523 only does 16 bit */ +#undef ELMC_MULTICAST /* Disable multicast support as it is somewhat seriously broken at the moment */ #define make32(ptr16) (p->memtop + (short) (ptr16) ) #define make24(ptr32) ((char *) (ptr32) - p->base) @@ -180,7 +186,9 @@ static int elmc_open(struct device *dev); static int elmc_close(struct device *dev); static int elmc_send_packet(struct sk_buff *, struct device *); static struct net_device_stats *elmc_get_stats(struct device *dev); +#ifdef ELMC_MULTICAST static void set_multicast_list(struct device *dev); +#endif /* helper-functions */ static int init586(struct device *dev); @@ -432,21 +440,19 @@ __initfunc(int elmc_probe(struct device *dev)) while (slot != -1) { status = mca_read_stored_pos(slot, 2); + dev->irq=irq_table[(status & ELMC_STATUS_IRQ_SELECT) >> 6]; + dev->base_addr=csr_table[(status & ELMC_STATUS_CSR_SELECT) >> 1]; + /* If we're trying to match a specified irq or IO address, we'll reject a match unless it's what we're looking for. + Also reject it if the card is already in use. */ - if (base_addr || irq) { - /* we're looking for a card at a particular place */ - if (irq && irq != irq_table[(status & ELMC_STATUS_IRQ_SELECT) >> 6]) { - slot = mca_find_adapter(ELMC_MCA_ID, slot + 1); - continue; - } - if (base_addr && base_addr != csr_table[(status & ELMC_STATUS_CSR_SELECT) >> 1]) { - slot = mca_find_adapter(ELMC_MCA_ID, slot + 1); - continue; - } + if((irq && irq != dev->irq) || (base_addr && base_addr != dev->base_addr) + || check_region(dev->base_addr,ELMC_IO_EXTENT)) { + slot = mca_find_adapter(ELMC_MCA_ID, slot + 1); + continue; } /* found what we're looking for... */ break; @@ -476,9 +482,6 @@ __initfunc(int elmc_probe(struct device *dev)) /* revision is stored in the first 4 bits of the revision register */ revision = inb(dev->base_addr + ELMC_REVISION) & 0xf; - /* figure out our irq */ - dev->irq = irq_table[(status & ELMC_STATUS_IRQ_SELECT) >> 6]; - /* according to docs, we read the interrupt and write it back to the IRQ select register, since the POST might not configure the IRQ properly. */ @@ -497,9 +500,6 @@ __initfunc(int elmc_probe(struct device *dev)) break; } - /* Our IO address? */ - dev->base_addr = csr_table[(status & ELMC_STATUS_CSR_SELECT) >> 1]; - request_region(dev->base_addr, ELMC_IO_EXTENT, "3c523"); dev->priv = (void *) kmalloc(sizeof(struct priv), GFP_KERNEL); @@ -565,7 +565,11 @@ __initfunc(int elmc_probe(struct device *dev)) dev->stop = &elmc_close; dev->get_stats = &elmc_get_stats; dev->hard_start_xmit = &elmc_send_packet; +#ifdef ELMC_MULTICAST dev->set_multicast_list = &set_multicast_list; +#else + dev->set_multicast_list = NULL; +#endif ether_setup(dev); @@ -577,6 +581,10 @@ __initfunc(int elmc_probe(struct device *dev)) That gets done in elmc_open(). I'm not sure that's such a good idea, but it works, so I'll go with it. */ +#ifndef ELMC_MULTICAST + dev->flags&=~IFF_MULTICAST; /* Multicast doesn't work */ +#endif + return 0; } @@ -1210,6 +1218,7 @@ static struct net_device_stats *elmc_get_stats(struct device *dev) * Set MC list .. */ +#ifdef ELMC_MULTICAST static void set_multicast_list(struct device *dev) { if (!dev->start) { @@ -1222,60 +1231,85 @@ static void set_multicast_list(struct device *dev) startrecv586(dev); dev->start = 1; } +#endif /*************************************************************************/ #ifdef MODULE -static char devicename[9] = {0,}; +/* Increase if needed ;) */ +#define MAX_3C523_CARDS 4 +/* I'm not sure where this magic 9 comes from */ +#define NAMELEN 9 -static struct device dev_elmc = -{ - devicename /*"3c523" */ , 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, elmc_probe +static char devicenames[NAMELEN * MAX_3C523_CARDS] = {0,}; + +static struct device dev_elmc[MAX_3C523_CARDS] = +{ + { + NULL /*"3c523" */ , 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL + }, }; -static int irq = 0; -static int io = 0; -MODULE_PARM(irq, "i"); -MODULE_PARM(io, "i"); +static int irq[MAX_3C523_CARDS] = {0,}; +static int io[MAX_3C523_CARDS] = {0,}; +MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_3C523_CARDS) "i"); +MODULE_PARM(io, "1-" __MODULE_STRING(MAX_3C523_CARDS) "i"); int init_module(void) { - struct device *dev = &dev_elmc; - - dev->base_addr = io; - dev->irq = irq; - if (register_netdev(dev) != 0) { - return -EIO; + int this_dev,found = 0; + + /* Loop until we either can't find any more cards, or we have MAX_3C523_CARDS */ + for(this_dev=0; this_devname=devicenames+(NAMELEN*this_dev); + dev->irq=irq[this_dev]; + dev->base_addr=io[this_dev]; + dev->init=elmc_probe; + if(register_netdev(dev)!=0) { + if(io[this_dev]==0) break; + printk(KERN_WARNING "3c523.c: No 3c523 card found at io=%#x\n",io[this_dev]); + } else found++; } - return 0; + + if(found==0) { + if(io[0]==0) printk(KERN_NOTICE "3c523.c: No 3c523 cards found\n"); + return -ENXIO; + } else return 0; } void cleanup_module(void) { - struct device *dev = &dev_elmc; - - /* shutdown interrupts on the card */ - elmc_id_reset586(); - if (dev->irq != 0) { - /* this should be done by close, but if we failed to - initialize properly something may have gotten hosed. */ - free_irq(dev->irq, dev); - dev->irq = 0; - } - if (dev->base_addr != 0) { - release_region(dev->base_addr, ELMC_IO_EXTENT); - dev->base_addr = 0; - } - irq = 0; - io = 0; - unregister_netdev(dev); + int this_dev; + for(this_dev=0; this_devpriv) { + /* shutdown interrupts on the card */ + elmc_id_reset586(); + if (dev->irq != 0) { + /* this should be done by close, but if we failed to + initialize properly something may have gotten hosed. */ + free_irq(dev->irq, dev); + dev->irq = 0; + } + if (dev->base_addr != 0) { + release_region(dev->base_addr, ELMC_IO_EXTENT); + dev->base_addr = 0; + } + irq[this_dev] = 0; + io[this_dev] = 0; + unregister_netdev(dev); - mca_set_adapter_procfn(((struct priv *) (dev->priv))->slot, + mca_set_adapter_procfn(((struct priv *) (dev->priv))->slot, NULL, NULL); - kfree_s(dev->priv, sizeof(struct priv)); - dev->priv = NULL; + kfree_s(dev->priv, sizeof(struct priv)); + dev->priv = NULL; + } + } } #endif /* MODULE */ diff --git a/drivers/net/3c527.c b/drivers/net/3c527.c new file mode 100644 index 000000000..ca199597e --- /dev/null +++ b/drivers/net/3c527.c @@ -0,0 +1,1152 @@ +/* 3c527.c: 3Com Etherlink/MC32 driver for Linux + * + * (c) Copyright 1998 Red Hat Software Inc + * Written by Alan Cox. + * + * Based on skeleton.c written 1993-94 by Donald Becker and ne2.c + * (for the MCA stuff) written by Wim Dumon. + * + * Thanks to 3Com for making this possible by providing me with the + * documentation. + * + * This software may be used and distributed according to the terms + * of the GNU Public License, incorporated herein by reference. + * + */ + +static const char *version = + "3c527.c:v0.04 1999/03/16 Alan Cox (alan@redhat.com)\n"; + +/* + * Things you need + * o The databook. + * + * Traps for the unwary + * + * The diagram (Figure 1-1) and the POS summary disagree with the + * "Interrupt Level" section in the manual. + * + * The documentation in places seems to miss things. In actual fact + * I've always eventually found everything is documented, it just + * requires careful study. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "3c527.h" + +/* + * The name of the card. Is used for messages and in the requests for + * io regions, irqs and dma channels + */ +static const char* cardname = "3c527"; + +/* use 0 for production, 1 for verification, >2 for debug */ +#ifndef NET_DEBUG +#define NET_DEBUG 2 +#endif +static unsigned int mc32_debug = NET_DEBUG; + +/* The number of low I/O ports used by the ethercard. */ +#define NETCARD_IO_EXTENT 8 + + +struct mc32_mailbox +{ + u16 mbox __attribute((packed)); + u16 data[1] __attribute((packed)); +}; + +/* Information that need to be kept for each board. */ + +#define TX_RING_MAX 16 /* Typically the card supports 37 */ +#define RX_RING_MAX 32 /* " " " */ + +struct mc32_local +{ + struct net_device_stats net_stats; + int slot; + volatile struct mc32_mailbox *rx_box; + volatile struct mc32_mailbox *tx_box; + volatile struct mc32_mailbox *exec_box; + volatile u16 *stats; + u16 tx_chain; + u16 rx_chain; + u16 tx_len; + u16 rx_len; + u32 base; + u16 rx_halted; + u16 tx_halted; + u16 exec_pending; + u16 mc_reload_wait; /* a multicast load request is pending */ + atomic_t tx_count; /* buffers left */ + struct wait_queue *event; + struct sk_buff *tx_skb[TX_RING_MAX]; /* Transmit ring */ + u16 tx_skb_top; + u16 tx_skb_end; + struct sk_buff *rx_skb[RX_RING_MAX]; /* Receive ring */ + void *rx_ptr[RX_RING_MAX]; /* Data pointers */ +}; + +/* The station (ethernet) address prefix, used for a sanity check. */ +#define SA_ADDR0 0x02 +#define SA_ADDR1 0x60 +#define SA_ADDR2 0xAC + +struct mca_adapters_t { + unsigned int id; + char *name; +}; + +const struct mca_adapters_t mc32_adapters[] = { + { 0x0041, "3COM EtherLink MC/32" }, + { 0x8EF5, "IBM High Performance Lan Adapter" }, + { 0x0000, NULL } +}; + + +/* Index to functions, as function prototypes. */ + +extern int mc32_probe(struct device *dev); + +static int mc32_probe1(struct device *dev, int ioaddr); +static int mc32_open(struct device *dev); +static int mc32_send_packet(struct sk_buff *skb, struct device *dev); +static void mc32_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static int mc32_close(struct device *dev); +static struct net_device_stats *mc32_get_stats(struct device *dev); +static void mc32_set_multicast_list(struct device *dev); + +/* + * Check for a network adaptor of this type, and return '0' iff one exists. + * If dev->base_addr == 0, probe all likely locations. + * If dev->base_addr == 1, always return failure. + * If dev->base_addr == 2, allocate space for the device and return success + * (detachable devices only). + */ + +__initfunc(int mc32_probe(struct device *dev)) +{ + static int current_mca_slot = -1; + int i; + int adapter_found = 0; + + /* Do not check any supplied i/o locations. + POS registers usually don't fail :) */ + + /* MCA cards have POS registers. + Autodetecting MCA cards is extremely simple. + Just search for the card. */ + + for(i = 0; (mc32_adapters[i].name != NULL) && !adapter_found; i++) { + current_mca_slot = + mca_find_unused_adapter(mc32_adapters[i].id, 0); + + if((current_mca_slot != MCA_NOTFOUND) && !adapter_found) { + if(!mc32_probe1(dev, current_mca_slot)) + { + mca_set_adapter_name(current_mca_slot, + mc32_adapters[i].name); + mca_mark_as_used(current_mca_slot); + return 0; + } + + } + } + return -ENODEV; +} + +/* + * This is the real probe routine. Linux has a history of friendly device + * probes on the ISA bus. A good device probes avoids doing writes, and + * verifies that the correct device exists and functions. + */ +__initfunc(static int mc32_probe1(struct device *dev, int slot)) +{ + static unsigned version_printed = 0; + int i; + u8 POS; + u32 base; + struct mc32_local *lp; + static u16 mca_io_bases[]={ + 0x7280,0x7290, + 0x7680,0x7690, + 0x7A80,0x7A90, + 0x7E80,0x7E90 + }; + static u32 mca_mem_bases[]={ + 0x00C0000, + 0x00C4000, + 0x00C8000, + 0x00CC000, + 0x00D0000, + 0x00D4000, + 0x00D8000, + 0x00DC000 + }; + static char *failures[]={ + "Processor instruction", + "Processor data bus", + "Processor data bus", + "Processor data bus", + "Adapter bus", + "ROM checksum", + "Base RAM", + "Extended RAM", + "82586 internal loopback", + "82586 initialisation failure", + "Adapter list configuration error" + }; + + /* Time to play MCA games */ + + if (mc32_debug && version_printed++ == 0) + printk(KERN_DEBUG "%s", version); + + printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot); + + POS = mca_read_stored_pos(slot, 2); + + if(!(POS&1)) + { + printk(" disabled.\n"); + return -ENODEV; + } + + /* Allocate a new 'dev' if needed. */ + if (dev == NULL) { + /* + * Don't allocate the private data here, it is done later + * This makes it easier to free the memory when this driver + * is used as a module. + */ + dev = init_etherdev(0, 0); + if (dev == NULL) + return -ENOMEM; + } + + /* Fill in the 'dev' fields. */ + dev->base_addr = mca_io_bases[(POS>>1)&7]; + dev->mem_start = mca_mem_bases[(POS>>4)&7]; + + POS = mca_read_stored_pos(slot, 4); + if(!(POS&1)) + { + printk("memory window disabled.\n"); + return -ENODEV; + } + + POS = mca_read_stored_pos(slot, 5); + + i=(POS>>4)&3; + if(i==3) + { + printk("invalid memory window.\n"); + return -ENODEV; + } + + i*=16384; + i+=16384; + + dev->mem_end=dev->mem_start + i; + + dev->irq = ((POS>>2)&3)+9; + + printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n", + dev->base_addr, dev->irq, dev->mem_start, i/1024); + + + /* We ought to set the cache line size here.. */ + + + /* + * Go PROM browsing + */ + + printk("%s: Address ", dev->name); + + /* Retrieve and print the ethernet address. */ + for (i = 0; i < 6; i++) + { + mca_write_pos(slot, 6, i+12); + mca_write_pos(slot, 7, 0); + + printk(" %2.2x", dev->dev_addr[i] = mca_read_pos(slot,3)); + } + + mca_write_pos(slot, 6, 0); + mca_write_pos(slot, 7, 0); + + POS = mca_read_stored_pos(slot, 4); + + if(POS&2) + printk(" : BNC port selected.\n"); + else + printk(" : AUI port selected.\n"); + + POS=inb(dev->base_addr+HOST_CTRL); + POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET; + POS&=~HOST_CTRL_INTE; + outb(POS, dev->base_addr+HOST_CTRL); + /* Reset adapter */ + udelay(100); + /* Reset off */ + POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET); + outb(POS, dev->base_addr+HOST_CTRL); + + udelay(300); + + /* + * Grab the IRQ + */ + + if(request_irq(dev->irq, &mc32_interrupt, 0, cardname, dev)) + { + printk("%s: unable to get IRQ %d.\n", + dev->name, dev->irq); + return -EAGAIN; + } + + /* Initialize the device structure. */ + if (dev->priv == NULL) { + dev->priv = kmalloc(sizeof(struct mc32_local), GFP_KERNEL); + if (dev->priv == NULL) + { + free_irq(dev->irq, dev); + return -ENOMEM; + } + } + + memset(dev->priv, 0, sizeof(struct mc32_local)); + lp = (struct mc32_local *)dev->priv; + lp->slot = slot; + + i=0; + + base = inb(dev->base_addr); + + while(base==0xFF) + { + i++; + if(i==1000) + { + printk("%s: failed to boot adapter.\n", dev->name); + free_irq(dev->irq, dev); + return -ENODEV; + } + udelay(1000); + if(inb(dev->base_addr+2)&(1<<5)) + base = inb(dev->base_addr); + } + + if(base>0) + { + if(base < 0x0C) + printk("%s: %s%s.\n", dev->name, failures[base-1], + base<0x0A?" test failure":""); + else + printk("%s: unknown failure %d.\n", dev->name, base); + free_irq(dev->irq, dev); + return -ENODEV; + } + + base=0; + for(i=0;i<4;i++) + { + int n=0; + + while(!(inb(dev->base_addr+2)&(1<<5))) + { + n++; + udelay(50); + if(n>100) + { + printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i); + free_irq(dev->irq, dev); + return -ENODEV; + } + } + + base|=(inb(dev->base_addr)<<(8*i)); + } + + lp->exec_box=bus_to_virt(dev->mem_start+base); + + base=lp->exec_box->data[1]<<16|lp->exec_box->data[0]; + + lp->base = dev->mem_start+base; + + lp->rx_box=bus_to_virt(lp->base + lp->exec_box->data[2]); + lp->tx_box=bus_to_virt(lp->base + lp->exec_box->data[3]); + + lp->stats = bus_to_virt(lp->base + lp->exec_box->data[5]); + + /* + * Descriptor chains (card relative) + */ + + lp->tx_chain = lp->exec_box->data[8]; + lp->rx_chain = lp->exec_box->data[10]; + lp->tx_len = lp->exec_box->data[9]; + lp->rx_len = lp->exec_box->data[11]; + + printk("%s: %d RX buffers, %d TX buffers. Base of 0x%08X.\n", + dev->name, lp->rx_len, lp->tx_len, lp->base); + + dev->open = mc32_open; + dev->stop = mc32_close; + dev->hard_start_xmit = mc32_send_packet; + dev->get_stats = mc32_get_stats; + dev->set_multicast_list = mc32_set_multicast_list; + + lp->rx_halted = 1; + lp->tx_halted = 1; + + /* Fill in the fields of the device structure with ethernet values. */ + ether_setup(dev); + return 0; +} + + +/* + * Polled command stuff + */ + +static void mc32_ring_poll(struct device *dev) +{ + int ioaddr = dev->base_addr; + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); +} + + +/* + * Send exec commands + */ + +static int mc32_command(struct device *dev, u16 cmd, void *data, int len) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + unsigned long flags; + + while(lp->exec_pending) + sleep_on(&lp->event); + + lp->exec_pending=1; + lp->exec_box->mbox=0; + lp->exec_box->mbox=cmd; + memcpy((void *)lp->exec_box->data, data, len); + barrier(); /* the memcpy forgot the volatile so be sure */ + + /* Send the command */ + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + outb(1<<6, ioaddr+HOST_CMD); + + save_flags(flags); + cli(); + while(lp->exec_pending!=2) + sleep_on(&lp->event); + lp->exec_pending=0; + restore_flags(flags); + + /* + * A multicast set got blocked - do it now + */ + + if(lp->mc_reload_wait) + mc32_set_multicast_list(dev); + + if(lp->exec_box->data[0]&(1<<13)) + return -1; + return 0; +} + +/* + * RX abort + */ + +static void mc32_rx_abort(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + + lp->rx_box->mbox=0; + outb(3<<3, ioaddr+HOST_CMD); /* Suspend reception */ +} + + +/* + * RX enable + */ + +static void mc32_rx_begin(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + + lp->rx_box->mbox=0; + outb(1<<3, ioaddr+HOST_CMD); /* GO */ + mc32_ring_poll(dev); + + lp->rx_halted=0; +} + +static void mc32_tx_abort(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + + lp->tx_box->mbox=0; + outb(3, ioaddr+HOST_CMD); /* Suspend */ + + /* Ring empty */ + + atomic_set(&lp->tx_count, lp->tx_len); + + /* Flush */ + if(lp->tx_skb_top!=lp->tx_skb_end) + { + int i; + if(lp->tx_skb_top<=lp->tx_skb_end) + { + for(i=lp->tx_skb_top;itx_skb_end;i++) + { + dev_kfree_skb(lp->tx_skb[i]); + lp->tx_skb[i]=NULL; + } + } + else + { + for(i=lp->tx_skb_end;itx_skb[i]); + lp->tx_skb[i]=NULL; + } + for(i=0;itx_skb_top;i++) + { + dev_kfree_skb(lp->tx_skb[i]); + lp->tx_skb[i]=NULL; + } + } + } + lp->tx_skb_top=lp->tx_skb_end=0; +} + +/* + * TX enable + */ + +static void mc32_tx_begin(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + + lp->tx_box->mbox=0; +#if 0 + outb(5, ioaddr+HOST_CMD); /* GO */ + printk("TX=>5\n"); + mc32_ring_poll(dev); + if(lp->tx_box->mbox&(1<<13)) + printk("TX begin error!\n"); +#endif + lp->tx_halted=0; +} + + +/* + * Load the rx ring + */ + +static int mc32_load_rx_ring(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int i; + u16 base; + volatile struct skb_header *p; + + base = lp->rx_box->data[0]; + + /* Fix me - should use card size - also fix flush ! */ + + for(i=0;irx_skb[i]=alloc_skb(1532, GFP_KERNEL); + if(lp->rx_skb[i]==NULL) + { + for(;i>=0;i--) + kfree_skb(lp->rx_skb[i]); + return -ENOBUFS; + } + lp->rx_ptr[i]=lp->rx_skb[i]->data+18; + + p=bus_to_virt(lp->base+base); + p->control=0; + p->data = virt_to_bus(lp->rx_ptr[i]); + p->status=0; + p->length = 1532; + base = p->next; + } + p->control = (1<<6); + lp->rx_box->mbox = 0; + return 0; +} + +static void mc32_flush_rx_ring(struct mc32_local *lp) +{ + int i; + for(i=0;irx_skb[i]); +} + +static void mc32_flush_tx_ring(struct mc32_local *lp) +{ + int i; + + if(lp->tx_skb_top <= lp->tx_skb_end) + { + for(i=lp->tx_skb_top;itx_skb_end;i++) + dev_kfree_skb(lp->tx_skb[i]); + } + else + { + for(i=0;itx_skb_end;i++) + dev_kfree_skb(lp->tx_skb[i]); + for(i=lp->tx_skb_top;itx_skb[i]); + } +} + +/* + * Open/initialize the board. This is called (in the current kernel) + * sometime after booting when the 'ifconfig' program is run. + */ + +static int mc32_open(struct device *dev) +{ + int ioaddr = dev->base_addr; + u16 zero_word=0; + u8 one=1; + u8 regs; + + dev->tbusy = 0; + dev->interrupt = 0; + dev->start = 1; + + /* + * Interrupts enabled + */ + + regs=inb(ioaddr+HOST_CTRL); + regs|=HOST_CTRL_INTE; + outb(regs, ioaddr+HOST_CTRL); + + + /* + * Send the indications on command + */ + + mc32_command(dev, 4, &one, 2); + + + /* + * Send the command sequence "abort, resume" for RX and TX. + * The abort cleans up the buffer chains if needed. + */ + + mc32_rx_abort(dev); + mc32_tx_abort(dev); + + /* Set Network Address */ + mc32_command(dev, 1, dev->dev_addr, 6); + + /* Set the filters */ + mc32_set_multicast_list(dev); + + /* Issue the 82586 workaround command - this is for "busy lans", + but basically means for all lans now days - has a performance + cost but best set */ + + mc32_command(dev, 0x0D, &zero_word, 2); /* 82586 bug workaround on */ + + /* Load the ring we just initialised */ + + if(mc32_load_rx_ring(dev)) + { + mc32_close(dev); + return -ENOBUFS; + } + + /* And the resume command goes last */ + + mc32_rx_begin(dev); + mc32_tx_begin(dev); + + MOD_INC_USE_COUNT; + + return 0; +} + +static int mc32_send_packet(struct sk_buff *skb, struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + + if (dev->tbusy) { + /* + * If we get here, some higher level has decided we are broken. + * There should really be a "kick me" function call instead. + */ + int tickssofar = jiffies - dev->trans_start; + if (tickssofar < 5) + return 1; + printk(KERN_WARNING "%s: transmit timed out?\n", dev->name); + /* Try to restart the adaptor. */ + dev->tbusy=0; + dev->trans_start = jiffies; + } + + /* + * Block a timer-based transmit from overlapping. This could better be + * done with atomic_swap(1, dev->tbusy), but set_bit() works as well. + */ + if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) + { + printk(KERN_WARNING "%s: Transmitter access conflict.\n", dev->name); + dev_kfree_skb(skb); + } + else + { + unsigned long flags; + + u16 tx_head; + volatile struct skb_header *p, *np; + + save_flags(flags); + cli(); + + if(atomic_read(&lp->tx_count)==0) + { + dev->tbusy=1; + restore_flags(flags); + return 1; + } + + tx_head = lp->tx_box->data[0]; + atomic_dec(&lp->tx_count); + + /* We will need this to flush the buffer out */ + + lp->tx_skb[lp->tx_skb_end] = skb; + lp->tx_skb_end++; + lp->tx_skb_end&=(TX_RING_MAX-1); + + /* P is the last sending/sent buffer as a pointer */ + p=(struct skb_header *)bus_to_virt(lp->base+tx_head); + + /* NP is the buffer we will be loading */ + np=(struct skb_header *)bus_to_virt(lp->base+p->next); + + np->control |= (1<<6); /* EOL */ + wmb(); + + np->length = skb->len; + np->data = virt_to_bus(skb->data); + np->status = 0; + np->control = (1<<7)|(1<<6); /* EOP EOL */ + wmb(); + + p->status = 0; + p->control &= ~(1<<6); + + dev->tbusy = 0; /* Keep feeding me */ + + lp->tx_box->mbox=0; + restore_flags(flags); + } + return 0; +} + +static void mc32_update_stats(struct device *dev) +{ +} + + +static void mc32_rx_ring(struct device *dev) +{ + struct mc32_local *lp=dev->priv; + int ioaddr = dev->base_addr; + int x=0; + volatile struct skb_header *p; + u16 base; + u16 top; + + top = base = lp->rx_box->data[0]; + do + { + p=(struct skb_header *)bus_to_virt(base+lp->base); + if(!(p->status & (1<<7))) + break; + if(p->status & (1<<6)) + { + u16 length = p->length; + struct sk_buff *skb=dev_alloc_skb(length+2); + if(skb!=NULL) + { + skb_reserve(skb,2); + /*printk("Frame at %p\n", bus_to_virt(p->data)); */ + memcpy(skb_put(skb, length), + bus_to_virt(p->data), length); + skb->protocol=eth_type_trans(skb,dev); + skb->dev=dev; + lp->net_stats.rx_packets++; + lp->net_stats.rx_bytes+=skb->len; + netif_rx(skb); + } + else + lp->net_stats.rx_dropped++; + } + else + { + lp->net_stats.rx_errors++; + switch(p->status&0x0F) + { + case 1: + lp->net_stats.rx_crc_errors++;break; + case 2: + lp->net_stats.rx_fifo_errors++;break; + case 3: + lp->net_stats.rx_frame_errors++;break; + case 4: + lp->net_stats.rx_missed_errors++;break; + case 5: + lp->net_stats.rx_length_errors++;break; + } + } + p->length = 1532; + p->control &= ~(1<<6); + p->status = 0; + base = p->next; + } + while(x++<48); + + /* + * This is curious. It seems the receive stop and receive continue + * commands race against each other, even though we poll for + * command ready to be issued. The delay is hackish but is a workaround + * while I investigate in depth + */ + + while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); + lp->rx_box->mbox=0; + lp->rx_box->data[0] = top; + outb(1<<3, ioaddr+HOST_CMD); +} + + +/* + * The typical workload of the driver: + * Handle the network interface interrupts. + */ +static void mc32_interrupt(int irq, void *dev_id, struct pt_regs * regs) +{ + struct device *dev = dev_id; + struct mc32_local *lp; + int ioaddr, status, boguscount = 0; + int rx_event = 0; + + if (dev == NULL) { + printk(KERN_WARNING "%s: irq %d for unknown device.\n", cardname, irq); + return; + } + dev->interrupt = 1; + + ioaddr = dev->base_addr; + lp = (struct mc32_local *)dev->priv; + + /* See whats cooking */ + + while((inb(ioaddr+2)&(1<<5)) && boguscount++<2000) + { + status=inb(ioaddr+HOST_CMD); + +#ifdef DEBUG_IRQ + printk("Status TX%d RX%d EX%d OV%d\n", + (status&7), (status>>3)&7, (status>>6)&1, + (status>>7)&1); +#endif + + switch(status&7) + { + case 0: + break; + case 6: /* TX fail */ + lp->net_stats.tx_errors++; + case 2: /* TX ok */ + lp->net_stats.tx_packets++; + /* Packets are sent in order - this is + basically a FIFO queue of buffers matching + the card ring */ + lp->net_stats.tx_bytes+=lp->tx_skb[lp->tx_skb_top]->len; + dev_kfree_skb(lp->tx_skb[lp->tx_skb_top]); + lp->tx_skb[lp->tx_skb_top]=NULL; + lp->tx_skb_top++; + lp->tx_skb_top&=(TX_RING_MAX-1); + atomic_inc(&lp->tx_count); + dev->tbusy=0; + mark_bh(NET_BH); + break; + case 3: /* Halt */ + case 4: /* Abort */ + lp->tx_halted=1; + wake_up(&lp->event); + break; + case 5: + lp->tx_halted=0; + wake_up(&lp->event); + break; + default: + printk("%s: strange tx ack %d\n", + dev->name, status&7); + } + status>>=3; + switch(status&7) + { + case 0: + break; + case 2: /* RX */ + rx_event=1; + break; + case 3: + case 4: + lp->rx_halted=1; + wake_up(&lp->event); + break; + case 5: + lp->rx_halted=0; + wake_up(&lp->event); + break; + case 6: + /* Out of RX buffers stat */ + /* Must restart */ + lp->net_stats.rx_dropped++; + rx_event = 1; /* To restart */ + break; + default: + printk("%s: strange rx ack %d\n", + dev->name, status&7); + + } + status>>=3; + if(status&1) + { + /* 0=no 1=yes 2=reply clearing */ + lp->exec_pending=2; + wake_up(&lp->event); + } + if(status&2) + { + /* + * Update the stats as soon as + * we have it flagged and can + * send an immediate reply (CRR set) + */ + + if(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR) + { + mc32_update_stats(dev); + outb(0, ioaddr+HOST_CMD); + } + } + } + + /* + * Process and restart the receive ring. + */ + + if(rx_event) + mc32_rx_ring(dev); + dev->interrupt = 0; + return; +} + + +/* The inverse routine to mc32_open(). */ + +static int mc32_close(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + int ioaddr = dev->base_addr; + u8 regs; + u16 one=1; + + /* + * Send the indications on command (handy debug check) + */ + + mc32_command(dev, 4, &one, 2); + + /* Abort RX and Abort TX */ + + mc32_rx_abort(dev); + mc32_tx_abort(dev); + + /* Catch any waiting commands */ + + while(lp->exec_pending==1) + sleep_on(&lp->event); + + /* Ok the card is now stopping */ + + regs=inb(ioaddr+HOST_CTRL); + regs&=~HOST_CTRL_INTE; + outb(regs, ioaddr+HOST_CTRL); + + mc32_flush_rx_ring(lp); + mc32_flush_tx_ring(lp); + + dev->tbusy = 1; + dev->start = 0; + + /* Update the statistics here. */ + + MOD_DEC_USE_COUNT; + + return 0; + +} + +/* + * Get the current statistics. + * This may be called with the card open or closed. + */ + +static struct net_device_stats *mc32_get_stats(struct device *dev) +{ + struct mc32_local *lp = (struct mc32_local *)dev->priv; + return &lp->net_stats; +} + +/* + * Set or clear the multicast filter for this adaptor. + * num_addrs == -1 Promiscuous mode, receive all packets + * num_addrs == 0 Normal mode, clear multicast list + * num_addrs > 0 Multicast mode, receive normal and MC packets, + * and do best-effort filtering. + */ +static void mc32_set_multicast_list(struct device *dev) +{ + u16 filt; + if (dev->flags&IFF_PROMISC) + { + /* Enable promiscuous mode */ + filt = 1; + mc32_command(dev, 0, &filt, 2); + } + else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > 10) + { + dev->flags|=IFF_PROMISC; + filt = 1; + mc32_command(dev, 0, &filt, 2); + } + else if(dev->mc_count) + { + unsigned char block[62]; + unsigned char *bp; + struct dev_mc_list *dmc=dev->mc_list; + + int i; + + filt = 0; + block[1]=0; + block[0]=dev->mc_count; + bp=block+2; + + for(i=0;imc_count;i++) + { + memcpy(bp, dmc->dmi_addr, 6); + bp+=6; + dmc=dmc->next; + } + mc32_command(dev, 2, block, 2+6*dev->mc_count); + mc32_command(dev, 0, &filt, 2); + } + else + { + filt = 0; + mc32_command(dev, 0, &filt, 2); + } +} + +#ifdef MODULE + +static char devicename[9] = { 0, }; +static struct device this_device = { + devicename, /* will be inserted by linux/drivers/net/mc32_init.c */ + 0, 0, 0, 0, + 0, 0, /* I/O address, IRQ */ + 0, 0, 0, NULL, mc32_probe }; + +int init_module(void) +{ + int result; + + if ((result = register_netdev(&this_device)) != 0) + return result; + + return 0; +} + +void cleanup_module(void) +{ + int slot; + + /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ + unregister_netdev(&this_device); + + /* + * If we don't do this, we can't re-insmod it later. + * Release irq/dma here, when you have jumpered versions and + * allocate them in mc32_probe1(). + */ + + if (this_device.priv) + { + struct mc32_local *lp=this_device.priv; + slot = lp->slot; + mca_mark_as_unused(slot); + mca_set_adapter_name(slot, NULL); + kfree_s(this_device.priv, sizeof(struct mc32_local)); + } + free_irq(this_device.irq, &this_device); +} + +#endif /* MODULE */ diff --git a/drivers/net/3c527.h b/drivers/net/3c527.h new file mode 100644 index 000000000..e4060000b --- /dev/null +++ b/drivers/net/3c527.h @@ -0,0 +1,40 @@ +/* + * 3COM "EtherLink MC/32" Descriptions + */ + +/* + * Registers + */ + +#define HOST_CMD 0 + +#define HOST_STATUS 2 +#define HOST_STATUS_CRR (1<<6) +#define HOST_STATUS_CWR (1<<5) + +#define HOST_CTRL 6 +#define HOST_CTRL_ATTN (1<<7) +#define HOST_CTRL_RESET (1<<6) +#define HOST_CTRL_INTE (1<<2) + +#define HOST_RAMPAGE 8 + +struct skb_header +{ + u8 status __attribute((packed)); + u8 control __attribute((packed)); + u16 next __attribute((packed)); /* Do not change! */ + u16 length __attribute((packed)); + u32 data __attribute((packed)); +}; + +#define STATUS_MASK 0x0F +#define COMPLETED 0x80 +#define COMPLETED_OK 0x40 +#define BUFFER_BUSY 0x20 + +#define CONTROL_EOP 0x80 /* End Of Packet */ +#define CONTROL_EL 0x40 /* End of List */ + + +#define MCA_MC32_ID 0x0041 /* Our MCA ident */ diff --git a/drivers/net/8390.c b/drivers/net/8390.c index 064edb07f..c6be83778 100644 --- a/drivers/net/8390.c +++ b/drivers/net/8390.c @@ -165,8 +165,10 @@ int ei_open(struct device *dev) spin_lock_irqsave(&ei_local->page_lock, flags); NS8390_init(dev, 1); - spin_unlock_irqrestore(&ei_local->page_lock, flags); + /* Set the flag before we drop the lock, That way the IRQ arrives + after its set and we get no silly warnings */ dev->start = 1; + spin_unlock_irqrestore(&ei_local->page_lock, flags); ei_local->irqlock = 0; return 0; } @@ -255,8 +257,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev) /* Ugly but a reset can be slow, yet must be protected */ - disable_irq(dev->irq); - synchronize_irq(); + disable_irq_nosync(dev->irq); spin_lock(&ei_local->page_lock); /* Try to restart the card. Perhaps the user has fixed something. */ @@ -284,8 +285,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev) * Slow phase with lock held. */ - disable_irq(dev->irq); - synchronize_irq(); + disable_irq_nosync(dev->irq); spin_lock(&ei_local->page_lock); diff --git a/drivers/net/Config.in b/drivers/net/Config.in index e0ca210b1..ac19adda5 100644 --- a/drivers/net/Config.in +++ b/drivers/net/Config.in @@ -32,8 +32,8 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then fi fi if [ "$CONFIG_PPC" = "y" ]; then - bool 'MACE (Power Mac ethernet) support' CONFIG_MACE - bool 'BMAC (G3 ethernet) support' CONFIG_BMAC + tristate 'MACE (Power Mac ethernet) support' CONFIG_MACE + tristate 'BMAC (G3 ethernet) support' CONFIG_BMAC fi if [ "$CONFIG_ZORRO" = "y" ]; then tristate 'Ariadne support' CONFIG_ARIADNE @@ -53,6 +53,7 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then tristate '3c507 support' CONFIG_EL16 if [ "$CONFIG_MCA" = "y" ]; then tristate '3c523 support' CONFIG_ELMC + tristate '3c527 support' CONFIG_ELMC_II fi fi tristate '3c509/3c579 support' CONFIG_EL3 @@ -81,7 +82,7 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then tristate 'RealTek 8129/8139 (not 8019/8029!) support' CONFIG_RTL8139 tristate 'Packet Engines Yellowfin Gigabit-NIC support' CONFIG_YELLOWFIN - tristate 'Alteon AceNIC & 3Com 3C985 Gigabit support' CONFIG_ACENIC + tristate 'Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support' CONFIG_ACENIC fi bool 'Other ISA cards' CONFIG_NET_ISA if [ "$CONFIG_NET_ISA" = "y" ]; then diff --git a/drivers/net/Makefile b/drivers/net/Makefile index 22fe2bae3..4349b49f9 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -430,6 +430,14 @@ else endif endif +ifeq ($(CONFIG_SUNBMAC),y) +L_OBJS += sunbmac.o +else + ifeq ($(CONFIG_SUNBMAC),m) + M_OBJS += sunbmac.o + endif +endif + ifeq ($(CONFIG_MYRI_SBUS),y) L_OBJS += myri_sbus.o else @@ -478,6 +486,14 @@ else endif endif +ifeq ($(CONFIG_ELMC_II),y) +L_OBJS += 3c527.o +else + ifeq ($(CONFIG_ELMC_II),m) + M_OBJS += 3c527.o + endif +endif + ifeq ($(CONFIG_EL3),y) L_OBJS += 3c509.o else @@ -1005,10 +1021,18 @@ endif ifeq ($(CONFIG_MACE),y) L_OBJS += mace.o +else + ifeq ($(CONFIG_MACE),m) + M_OBJS += mace.o + endif endif ifeq ($(CONFIG_BMAC),y) L_OBJS += bmac.o +else + ifeq ($(CONFIG_BMAC),m) + M_OBJS += bmac.o + endif endif ifeq ($(CONFIG_VENDOR_SANGOMA),y) @@ -1062,9 +1086,10 @@ endif ifeq ($(CONFIG_IRDA),y) SUB_DIRS += irda +MOD_IN_SUB_DIRS += irda else ifeq ($(CONFIG_IRDA),m) - MOD_SUB_DIRS += irda + MOD_IN_SUB_DIRS += irda endif endif diff --git a/drivers/net/Space.c b/drivers/net/Space.c index 8c3f51ee7..c4e5cae51 100644 --- a/drivers/net/Space.c +++ b/drivers/net/Space.c @@ -87,6 +87,7 @@ extern int smc_init( struct device * ); extern int sparc_lance_probe(struct device *); extern int happy_meal_probe(struct device *); extern int qec_probe(struct device *); +extern int bigmac_probe(struct device *); extern int myri_sbus_probe(struct device *); extern int sgiseeq_probe(struct device *); extern int atarilance_probe(struct device *); @@ -252,6 +253,9 @@ struct devprobe sparc_probes[] __initdata = { #ifdef CONFIG_SUNQE {qec_probe, 0}, #endif +#ifdef CONFIG_SUNBMAC + {bigmac_probe, 0}, +#endif #ifdef CONFIG_MYRI_SBUS {myri_sbus_probe, 0}, #endif @@ -532,7 +536,7 @@ __initfunc(static int fddiif_probe(struct device *dev)) && dfx_probe(dev) #endif #ifdef CONFIG_APFDDI - && apfddi_init(dev); + && apfddi_init(dev) #endif && 1 ) { return 1; /* -ENODEV or -EAGAIN would be more accurate. */ diff --git a/drivers/net/a2065.c b/drivers/net/a2065.c index 898369fb3..037fc8209 100644 --- a/drivers/net/a2065.c +++ b/drivers/net/a2065.c @@ -135,6 +135,7 @@ struct lance_private { struct Linux_SBus_DMA *ledma; /* if set this points to ledma and arch=4m */ int burst_sizes; /* ledma SBus burst sizes */ #endif + struct timer_list multicast_timer; }; #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\ @@ -527,6 +528,7 @@ static int lance_close (struct device *dev) dev->start = 0; dev->tbusy = 1; + del_timer(&lp->multicast_timer); /* Stop the card */ ll->rap = LE_CSR0; @@ -706,12 +708,20 @@ static void lance_set_multicast (struct device *dev) volatile struct lance_init_block *ib = lp->init_block; volatile struct lance_regs *ll = lp->ll; - while (dev->tbusy) - schedule(); + if (!dev->start) + return; + + if (dev->tbusy) { + mod_timer(&lp->multicast_timer, jiffies + 2); + return; + } set_bit (0, (void *) &dev->tbusy); - while (lp->tx_old != lp->tx_new) - schedule(); + if (lp->tx_old != lp->tx_new) { + mod_timer(&lp->multicast_timer, jiffies + 4); + dev->tbusy = 0; + return; + } ll->rap = LE_CSR0; ll->rdp = LE_C0_STOP; @@ -726,6 +736,7 @@ static void lance_set_multicast (struct device *dev) load_csrs (lp); init_restart_lance (lp); dev->tbusy = 0; + mark_bh(NET_BH); } @@ -767,6 +778,8 @@ __initfunc(int a2065_probe(struct device *dev)) dev->priv = kmalloc(sizeof(struct lance_private), GFP_KERNEL); + if (dev->priv == NULL) + return -ENOMEM; priv = (struct lance_private *)dev->priv; memset(priv, 0, sizeof(struct lance_private)); @@ -793,6 +806,11 @@ __initfunc(int a2065_probe(struct device *dev)) dev->dma = 0; ether_setup(dev); + init_timer(&priv->multicast_timer); + priv->multicast_timer.data = (unsigned long) dev; + priv->multicast_timer.function = + (void (*)(unsigned long)) &lance_set_multicast; + zorro_config_board(key, 0); return(0); } diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c index 44709f341..3cdc89475 100644 --- a/drivers/net/acenic.c +++ b/drivers/net/acenic.c @@ -16,6 +16,9 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. + * + * Additional work by Pete Wyckoff for initial + * Alpha and trace dump support. */ #define PKT_COPY_THRESHOLD 300 @@ -40,6 +43,7 @@ #include #include #include +#include #include "acenic.h" @@ -52,10 +56,23 @@ #include "acenic_firmware.h" +#ifndef PCI_VENDOR_ID_ALTEON +#define PCI_VENDOR_ID_ALTEON 0x12ae +#define PCI_DEVICE_ID_ALTEON_ACENIC 0x0001 +#endif +#ifndef PCI_DEVICE_ID_3COM_3C985 +#define PCI_DEVICE_ID_3COM_3C985 0x0001 +#endif +#ifndef PCI_VENDOR_ID_NETGEAR +#define PCI_VENDOR_ID_NETGEAR 0x1385 +#define PCI_DEVICE_ID_NETGEAR_GA620 0x620a +#endif /* * This driver currently supports Tigon I and Tigon II based cards - * including the Alteon AceNIC and the 3Com 3C985. + * including the Alteon AceNIC and the 3Com 3C985. The driver should + * also work on the NetGear GA620, however I have not been able to + * test that myself. * * This card is really neat, it supports receive hardware checksumming * and jumbo frames (up to 9000 bytes) and does a lot of work in the @@ -114,30 +131,50 @@ * max_rx_desc= - maximum number of receive descriptors * (packets) received before interrupting the host. * + * tx_ratio= - 7 bit value (0 - 63) specifying the split in 64th + * increments of the NIC's on board memory to be used for + * transmit and receive buffers. For the 1MB NIC app. 800KB + * is available, on the 1/2MB NIC app. 300KB is available. + * 68KB will always be available as a minimum for both + * directions. The default value is a 50/50 split. + * * If you use more than one NIC, specify the parameters for the * individual NICs with a comma, ie. trace=0,0x00001fff,0 you want to * run tracing on NIC #2 but not on NIC #1 and #3. * * TODO: * - * - Add multicast support. + * - Proper multicast support. * - NIC dump support. * - More tuning parameters. + * + * The mini ring is not used under Linux and I am not sure it makes sense + * to actually use it. */ +/* + * Default values for tuning parameters + */ +#define DEF_TX_RATIO 31 +#define DEF_TX_COAL TICKS_PER_SEC / 500 +#define DEF_TX_MAX_DESC 7 +#define DEF_RX_COAL TICKS_PER_SEC / 10000 +#define DEF_RX_MAX_DESC 2 +#define DEF_TRACE 0 +#define DEF_STAT 2 * TICKS_PER_SEC + static int link[8] = {0, }; static int trace[8] = {0, }; static int tx_coal_tick[8] = {0, }; static int rx_coal_tick[8] = {0, }; static int max_tx_desc[8] = {0, }; static int max_rx_desc[8] = {0, }; +static int tx_ratio[8] = {0, }; -static const char *version = "acenic.c: v0.24 01/13/99 Jes Sorensen (Jes.Sorensen@cern.ch)\n"; +static const char __initdata *version = "acenic.c: v0.32 03/15/99 Jes Sorensen (Jes.Sorensen@cern.ch)\n"; static struct device *root_dev = NULL; -static int ace_load_firmware(struct device *dev); - static int probed __initdata = 0; __initfunc(int acenic_probe (struct device *dev)) @@ -163,13 +200,15 @@ __initfunc(int acenic_probe (struct device *dev)) version_disp = 0; - while((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev))) - { + while ((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET<<8, pdev))){ dev = NULL; - if ((pdev->vendor != PCI_VENDOR_ID_ALTEON) && + if (!((pdev->vendor == PCI_VENDOR_ID_ALTEON) && + (pdev->device == PCI_DEVICE_ID_ALTEON_ACENIC)) && !((pdev->vendor == PCI_VENDOR_ID_3COM) && - (pdev->device == PCI_DEVICE_ID_3COM_3C985))) + (pdev->device == PCI_DEVICE_ID_3COM_3C985)) && + !((pdev->vendor == PCI_VENDOR_ID_NETGEAR) && + (pdev->device == PCI_DEVICE_ID_NETGEAR_GA620))) continue; dev = init_etherdev(dev, sizeof(struct ace_private)); @@ -182,6 +221,8 @@ __initfunc(int acenic_probe (struct device *dev)) if (!dev->priv) dev->priv = kmalloc(sizeof(*ap), GFP_KERNEL); + if (!dev->priv) + return -ENOMEM; ap = dev->priv; ap->pdev = pdev; @@ -197,6 +238,9 @@ __initfunc(int acenic_probe (struct device *dev)) dev->stop = &ace_close; dev->get_stats = &ace_get_stats; dev->set_multicast_list = &ace_set_multicast_list; +#if 0 + dev->do_ioctl = &ace_ioctl; +#endif dev->set_mac_address = &ace_set_mac_addr; dev->change_mtu = &ace_change_mtu; @@ -234,6 +278,10 @@ __initfunc(int acenic_probe (struct device *dev)) sprintf(ap->name, "3Com 3C985 Gigabit Ethernet"); printk(KERN_INFO "%s: 3Com 3C985 ", dev->name); break; + case PCI_VENDOR_ID_NETGEAR: + sprintf(ap->name, "NetGear GA620 Gigabit Ethernet"); + printk(KERN_INFO "%s: NetGear GA620 ", dev->name); + break; default: sprintf(ap->name, "Unknown AceNIC based Gigabit Ethernet"); printk(KERN_INFO "%s: Unknown AceNIC ", dev->name); @@ -256,9 +304,11 @@ __initfunc(int acenic_probe (struct device *dev)) } #ifdef MODULE - ace_init(dev, boards_found); + if (ace_init(dev, boards_found)) + continue; #else - ace_init(dev, -1); + if (ace_init(dev, -1)) + continue; #endif boards_found++; @@ -317,17 +367,18 @@ void cleanup_module(void) short i; unsigned long flags; - while (root_dev) { + while (root_dev){ next = ((struct ace_private *)root_dev->priv)->next; ap = (struct ace_private *)root_dev->priv; regs = ap->regs; spin_lock_irqsave(&ap->lock, flags); - regs->CpuCtrl |= CPU_HALT; + writel(readl(®s->CpuCtrl) | CPU_HALT, ®s->CpuCtrl); if (ap->version == 2) - regs->CpuBCtrl |= CPU_HALT; - regs->Mb0Lo = 0; + writel(readl(®s->CpuBCtrl) | CPU_HALT, + ®s->CpuBCtrl); + writel(0, ®s->Mb0Lo); spin_unlock_irqrestore(&ap->lock, flags); @@ -337,7 +388,7 @@ void cleanup_module(void) for (i = 0; i < RX_STD_RING_ENTRIES; i++) { if (ap->rx_std_skbuff[i]) { ap->rx_std_ring[i].size = 0; - ap->rx_std_ring[i].addr = 0; + set_aceaddr_bus(&ap->rx_std_ring[i].addr, 0); dev_kfree_skb(ap->rx_std_skbuff[i]); } } @@ -363,12 +414,12 @@ static inline void ace_issue_cmd(struct ace_regs *regs, struct cmd *cmd) { u32 idx; - idx = regs->CmdPrd; + idx = readl(®s->CmdPrd); - regs->CmdRng[idx] = *(u32 *)(cmd); + writel(*(u32 *)(cmd), ®s->CmdRng[idx]); idx = (idx + 1) % CMD_RING_ENTRIES; - regs->CmdPrd = idx; + writel(idx, ®s->CmdPrd); } @@ -384,51 +435,42 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) ap = dev->priv; regs = ap->regs; -#if 0 - regs->HostCtrl |= 0x08; - regs->CpuCtrl = CPU_RESET; - regs->CpuBCtrl = CPU_RESET; - - { - long myjif = jiffies + HZ; - while (time_before(jiffies, myjif)); - } -#endif - /* * Don't access any other registes before this point! */ #ifdef __BIG_ENDIAN - regs->HostCtrl = ((BYTE_SWAP | WORD_SWAP | CLR_INT) | - ((BYTE_SWAP | WORD_SWAP | CLR_INT) << 24)); + writel(((BYTE_SWAP | WORD_SWAP | CLR_INT) | + ((BYTE_SWAP | WORD_SWAP | CLR_INT) << 24)), + ®s->HostCtrl); #else - regs->HostCtrl = (CLR_INT | WORD_SWAP | - ((CLR_INT | WORD_SWAP) << 24)); + writel((CLR_INT | WORD_SWAP | ((CLR_INT | WORD_SWAP) << 24)), + ®s->HostCtrl); #endif + mb(); /* * Stop the NIC CPU and clear pending interrupts */ - regs->CpuCtrl |= CPU_HALT; - regs->Mb0Lo = 0; + writel(readl(®s->CpuCtrl) | CPU_HALT, ®s->CpuCtrl); + writel(0, ®s->Mb0Lo); - tig_ver = regs->HostCtrl >> 28; + tig_ver = readl(®s->HostCtrl) >> 28; switch(tig_ver){ case 4: printk(KERN_INFO" Tigon I (Rev. 4), Firmware: %i.%i.%i, ", tigonFwReleaseMajor, tigonFwReleaseMinor, tigonFwReleaseFix); - regs->LocalCtrl = 0; + writel(0, ®s->LocalCtrl); ap->version = 1; break; case 6: printk(KERN_INFO" Tigon II (Rev. %i), Firmware: %i.%i.%i, ", tig_ver, tigon2FwReleaseMajor, tigon2FwReleaseMinor, tigon2FwReleaseFix); - regs->CpuBCtrl |= CPU_HALT; - regs->LocalCtrl = SRAM_BANK_512K; - regs->MiscCfg = SYNC_SRAM_TIMING; + writel(readl(®s->CpuBCtrl) | CPU_HALT, ®s->CpuBCtrl); + writel(SRAM_BANK_512K, ®s->LocalCtrl); + writel(SYNC_SRAM_TIMING, ®s->MiscCfg); ap->version = 2; break; default: @@ -445,8 +487,8 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) * `Firmware not running' problem on the Tigon II. */ #ifdef __LITTLE_ENDIAN - regs->ModeStat = ACE_BYTE_SWAP_DATA | ACE_WARN | ACE_FATAL - | ACE_WORD_SWAP; + writel(ACE_BYTE_SWAP_DATA | ACE_WARN | ACE_FATAL | + ACE_WORD_SWAP | ACE_NO_JUMBO_FRAG, ®s->ModeStat); #else #error "this driver doesn't run on big-endian machines yet!" #endif @@ -462,8 +504,8 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) mac2 |= read_eeprom_byte(regs, 0x8c+i); } - regs->MacAddrHi = mac1; - regs->MacAddrLo = mac2; + writel(mac1, ®s->MacAddrHi); + writel(mac2, ®s->MacAddrLo); printk("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", (mac1 >> 8) & 0xff, mac1 & 0xff, (mac2 >> 24) &0xff, @@ -514,10 +556,9 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) } } } - regs->PciState = tmp; + writel(tmp, ®s->PciState); - if (request_irq(dev->irq, ace_interrupt, SA_SHIRQ, ap->name, dev)) - { + if (request_irq(dev->irq, ace_interrupt, SA_SHIRQ, ap->name, dev)) { printk(KERN_WARNING "%s: Requested IRQ %d is busy\n", dev->name, dev->irq); return -EAGAIN; @@ -548,150 +589,149 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) tmp_ptr = virt_to_bus((void *)info); #if (BITS_PER_LONG == 64) - regs->InfoPtrHi = (tmp_ptr >> 32); + writel(tmp_ptr >> 32, ®s->InfoPtrHi); #else - regs->InfoPtrHi = 0; + writel(0, ®s->InfoPtrHi); #endif - regs->InfoPtrLo = ((tmp_ptr) & 0xffffffff); + writel(tmp_ptr & 0xffffffff, ®s->InfoPtrLo); memset(ap->evt_ring, 0, EVT_RING_ENTRIES * sizeof(struct event)); - info->evt_ctrl.rngptr = virt_to_bus(ap->evt_ring); + set_aceaddr(&info->evt_ctrl.rngptr, ap->evt_ring); info->evt_ctrl.flags = 0; - info->evt_prd_ptr = virt_to_bus(&ap->evt_prd); + set_aceaddr(&info->evt_prd_ptr, &ap->evt_prd); ap->evt_prd = 0; - regs->EvtCsm = 0; + writel(0, ®s->EvtCsm); info->cmd_ctrl.flags = 0; - info->cmd_ctrl.rngptr = 0x100; + set_aceaddr_bus(&info->cmd_ctrl.rngptr, (void *)0x100); info->cmd_ctrl.max_len = 0; - for (i = 0; i < CMD_RING_ENTRIES; i++) { - regs->CmdRng[i] = 0; - } + for (i = 0; i < CMD_RING_ENTRIES; i++) + writel(0, ®s->CmdRng[i]); - regs->CmdPrd = 0; - regs->CmdCsm = 0; + writel(0, ®s->CmdPrd); + writel(0, ®s->CmdCsm); - info->stats2_ptr = virt_to_bus(&info->s.stats); + set_aceaddr(&info->stats2_ptr, &info->s.stats); info->rx_std_ctrl.max_len = ACE_STD_MTU + ETH_HLEN + 4; - info->rx_std_ctrl.rngptr = virt_to_bus(ap->rx_std_ring); - info->rx_std_ctrl.flags = RX_TCP_UDP_SUM; + set_aceaddr(&info->rx_std_ctrl.rngptr, ap->rx_std_ring); + info->rx_std_ctrl.flags = FLG_RX_TCP_UDP_SUM; memset(ap->rx_std_ring, 0, RX_STD_RING_ENTRIES * sizeof(struct rx_desc)); info->rx_jumbo_ctrl.max_len = 0; - info->rx_jumbo_ctrl.rngptr = virt_to_bus(ap->rx_jumbo_ring); - info->rx_jumbo_ctrl.flags = RX_TCP_UDP_SUM; + set_aceaddr(&info->rx_jumbo_ctrl.rngptr, ap->rx_jumbo_ring); + info->rx_jumbo_ctrl.flags = FLG_RX_TCP_UDP_SUM; memset(ap->rx_jumbo_ring, 0, RX_JUMBO_RING_ENTRIES * sizeof(struct rx_desc)); - info->rx_return_ctrl.max_len = 0; - info->rx_return_ctrl.rngptr = virt_to_bus(ap->rx_return_ring); + info->rx_mini_ctrl.max_len = 0; +#if 0 + set_aceaddr(&info->rx_mini_ctrl.rngptr, ap->rx_mini_ring); +#else + set_aceaddr_bus(&info->rx_mini_ctrl.rngptr, 0); +#endif + info->rx_mini_ctrl.flags = FLG_RNG_DISABLED; + +#if 0 + memset(ap->rx_mini_ring, 0, + RX_MINI_RING_ENTRIES * sizeof(struct rx_desc)); +#endif + + set_aceaddr(&info->rx_return_ctrl.rngptr, ap->rx_return_ring); info->rx_return_ctrl.flags = 0; + info->rx_return_ctrl.max_len = RX_RETURN_RING_ENTRIES; memset(ap->rx_return_ring, 0, RX_RETURN_RING_ENTRIES * sizeof(struct rx_desc)); - info->rx_ret_prd_ptr = virt_to_bus(&ap->rx_ret_prd); + set_aceaddr(&info->rx_ret_prd_ptr, &ap->rx_ret_prd); - regs->WinBase = TX_RING_BASE; + writel(TX_RING_BASE, ®s->WinBase); ap->tx_ring = (struct tx_desc *)regs->Window; - memset(ap->tx_ring, 0, TX_RING_ENTRIES * sizeof(struct tx_desc)); + for (i = 0; i < (TX_RING_ENTRIES * sizeof(struct tx_desc) / 4); i++){ + writel(0, (unsigned long)ap->tx_ring + i * 4); + } info->tx_ctrl.max_len = TX_RING_ENTRIES; info->tx_ctrl.flags = 0; -#if (BITS_PER_LONG == 64) && defined(__BIG_ENDIAN) - info->tx_ctrl.rngptr = TX_RING_BASE << 32; -#else - info->tx_ctrl.rngptr = TX_RING_BASE; -#endif + set_aceaddr_bus(&info->tx_ctrl.rngptr, (void *)TX_RING_BASE); - info->tx_csm_ptr = virt_to_bus(&ap->tx_csm); + set_aceaddr(&info->tx_csm_ptr, &ap->tx_csm); /* * Potential item for tuning parameter */ - regs->DmaReadCfg = DMA_THRESH_8W; - regs->DmaWriteCfg = DMA_THRESH_8W; - - regs->MaskInt = 0; - regs->IfIdx = 1; - - regs->AssistState = 1; -#if 0 -{ - u32 tmp; - - tmp = regs->MacRxState; - tmp &= ~4; - regs->MacRxState = tmp; -} -#endif - - regs->TuneStatTicks = 2 * TICKS_PER_SEC; + writel(DMA_THRESH_8W, ®s->DmaReadCfg); + writel(DMA_THRESH_8W, ®s->DmaWriteCfg); + + writel(0, ®s->MaskInt); + writel(1, ®s->IfIdx); + writel(1, ®s->AssistState); + + writel(DEF_STAT, ®s->TuneStatTicks); + + writel(DEF_TX_COAL, ®s->TuneTxCoalTicks); + writel(DEF_TX_MAX_DESC, ®s->TuneMaxTxDesc); + writel(DEF_RX_COAL, ®s->TuneRxCoalTicks); + writel(DEF_RX_MAX_DESC, ®s->TuneMaxRxDesc); + writel(DEF_TRACE, ®s->TuneTrace); + writel(DEF_TX_RATIO, ®s->TxBufRat); + + if (board_idx >= 8) { + printk(KERN_WARNING "%s: more then 8 NICs detected, " + "ignoring module parameters!\n", dev->name); + board_idx = -1; + } if (board_idx >= 0) { - if ((board_idx < 8) && tx_coal_tick[board_idx]) - regs->TuneTxCoalTicks = tx_coal_tick[board_idx] * - TICKS_PER_SEC / 1000; - else - regs->TuneTxCoalTicks = TICKS_PER_SEC / 500; - if ((board_idx < 8) && max_tx_desc[board_idx]) - regs->TuneMaxTxDesc = max_tx_desc[board_idx]; - else - regs->TuneMaxTxDesc = 7; - - if ((board_idx < 8) && rx_coal_tick[board_idx]) - regs->TuneRxCoalTicks = rx_coal_tick[board_idx] * - TICKS_PER_SEC / 1000; - else - regs->TuneRxCoalTicks = TICKS_PER_SEC / 10000; - if ((board_idx < 8) && max_rx_desc[board_idx]) - regs->TuneMaxRxDesc = max_rx_desc[board_idx]; - else - regs->TuneMaxRxDesc = 2; - - if (board_idx < 8) - regs->TuneTrace = trace[board_idx]; - else - regs->TuneTrace = 0; - }else{ - regs->TuneTxCoalTicks = TICKS_PER_SEC / 500; - regs->TuneMaxTxDesc = 7; - regs->TuneRxCoalTicks = TICKS_PER_SEC / 10000; - regs->TuneMaxRxDesc = 2; - regs->TuneTrace = 0; + if (tx_coal_tick[board_idx]) + writel(tx_coal_tick[board_idx], + ®s->TuneTxCoalTicks); + if (max_tx_desc[board_idx]) + writel(max_tx_desc[board_idx], ®s->TuneMaxTxDesc); + + if (rx_coal_tick[board_idx]) + writel(rx_coal_tick[board_idx], + ®s->TuneRxCoalTicks); + if (max_rx_desc[board_idx]) + writel(max_rx_desc[board_idx], ®s->TuneMaxRxDesc); + + if (trace[board_idx]) + writel(trace[board_idx], ®s->TuneTrace); + + if ((tx_ratio[board_idx] >= 0) && (tx_ratio[board_idx] < 64)) + writel(tx_ratio[board_idx], ®s->TxBufRat); } - tmp = LNK_ENABLE; - - if ((board_idx > 7) || (board_idx < 0) || !(link[board_idx])){ - if (board_idx > 7) - printk(KERN_WARNING "%s: more then 8 NICs detected, " - "ignoring link options!\n", dev->name); - /* - * No link options specified, we go for the defaults - */ - tmp |= LNK_FULL_DUPLEX | LNK_1000MB | LNK_100MB | LNK_10MB | - LNK_RX_FLOW_CTL_Y | LNK_NEG_FCTL | LNK_NEGOTIATE; + /* + * Default link parameters + */ + tmp = LNK_ENABLE | LNK_FULL_DUPLEX | LNK_1000MB | LNK_100MB | + LNK_10MB | LNK_RX_FLOW_CTL_Y | LNK_NEG_FCTL | LNK_NEGOTIATE; + if(ap->version == 2) + tmp |= LNK_TX_FLOW_CTL_Y; - if(ap->version == 2) - tmp |= LNK_TX_FLOW_CTL_Y; - } else { + /* + * Override link default parameters + */ + if ((board_idx >= 0) && link[board_idx]) { int option = link[board_idx]; + tmp = LNK_ENABLE; + if (option & 0x01){ printk(KERN_INFO "%s: Setting half duplex link\n", dev->name); - tmp |= LNK_FULL_DUPLEX; + tmp &= ~LNK_FULL_DUPLEX; } - if ((option & 0x02) == 0) - tmp |= LNK_NEGOTIATE; + if (option & 0x02) + tmp &= ~LNK_NEGOTIATE; if (option & 0x10) tmp |= LNK_10MB; if (option & 0x20) @@ -718,22 +758,22 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) } } - regs->TuneLink = tmp; + writel(tmp, ®s->TuneLink); if (ap->version == 2) - regs->TuneFastLink = tmp; + writel(tmp, ®s->TuneFastLink); if (ap->version == 1) - regs->Pc = tigonFwStartAddr; + writel(tigonFwStartAddr, ®s->Pc); else if (ap->version == 2) - regs->Pc = tigon2FwStartAddr; + writel(tigon2FwStartAddr, ®s->Pc); - regs->Mb0Lo = 0; + writel(0, ®s->Mb0Lo); /* * Start the NIC CPU */ - regs->CpuCtrl = (regs->CpuCtrl & ~(CPU_HALT | CPU_TRACE)); + writel(readl(®s->CpuCtrl) & ~(CPU_HALT|CPU_TRACE), ®s->CpuCtrl); /* * Wait for the firmware to spin up - max 3 seconds. @@ -743,7 +783,7 @@ __initfunc(static int ace_init(struct device *dev, int board_idx)) if (!ap->fw_running){ printk(KERN_ERR "%s: Firmware NOT running!\n", dev->name); ace_dump_trace(ap); - regs->CpuCtrl |= CPU_HALT; + writel(readl(®s->CpuCtrl) | CPU_HALT, ®s->CpuCtrl); return -EBUSY; } @@ -773,7 +813,7 @@ static void ace_timer(unsigned long data) */ if (ap->tx_csm != ap->tx_ret_csm){ printk(KERN_WARNING "%s: Transmitter is stuck, %08x\n", - dev->name, regs->HostCtrl); + dev->name, (unsigned int)readl(®s->HostCtrl)); } ap->timer.expires = jiffies + (5/2*HZ); @@ -786,9 +826,11 @@ static void ace_timer(unsigned long data) */ static void ace_dump_trace(struct ace_private *ap) { +#if 0 if (!ap->trace_buf) if (!(ap->trace_buf = kmalloc(ACE_TRACE_SIZE, GFP_KERNEL))); return; +#endif } @@ -819,7 +861,7 @@ static int ace_load_std_rx_ring(struct device *dev) ap->tx_full = 0; ap->cur_rx = ap->dirty_rx = 0; ap->tx_prd = ap->tx_csm = ap->tx_ret_csm = 0; - regs->RxRetCsm = 0; + writel(0, ®s->RxRetCsm); for (i = 0; i < RX_RING_THRESH; i++) { struct sk_buff *skb; @@ -833,7 +875,7 @@ static int ace_load_std_rx_ring(struct device *dev) */ skb_reserve(skb, 2); - ap->rx_std_ring[i].addr = virt_to_bus(skb->data); + set_aceaddr(&ap->rx_std_ring[i].addr, skb->data); ap->rx_std_ring[i].size = ACE_STD_MTU + ETH_HLEN + 4; ap->rx_std_ring[i].flags = 0; @@ -877,7 +919,7 @@ static int ace_load_jumbo_rx_ring(struct device *dev) spin_lock_irqsave(&ap->lock, flags); - for (i = 0; i < RX_RING_THRESH; i++) { + for (i = 0; i < RX_RING_JUMBO_THRESH; i++) { struct sk_buff *skb; ap->rx_jumbo_ring[i].flags = 0; @@ -889,10 +931,10 @@ static int ace_load_jumbo_rx_ring(struct device *dev) */ skb_reserve(skb, 2); - ap->rx_jumbo_ring[i].addr = virt_to_bus(skb->data); + set_aceaddr(&ap->rx_jumbo_ring[i].addr, skb->data); ap->rx_jumbo_ring[i].size = ACE_JUMBO_MTU + ETH_HLEN + 4; - ap->rx_jumbo_ring[i].flags = JUMBO_FLAG; + ap->rx_jumbo_ring[i].flags = DFLG_RX_JUMBO; ap->rx_jumbo_ring[i].type = DESC_RX; ap->rx_jumbo_ring[i].idx = i; @@ -939,7 +981,7 @@ static int ace_flush_jumbo_rx_ring(struct device *dev) for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) { if (ap->rx_jumbo_skbuff[i]) { ap->rx_jumbo_ring[i].size = 0; - ap->rx_jumbo_ring[i].addr = 0; + set_aceaddr_bus(&ap->rx_jumbo_ring[i].addr, 0); dev_kfree_skb(ap->rx_jumbo_skbuff[i]); } } @@ -959,10 +1001,8 @@ static int ace_flush_jumbo_rx_ring(struct device *dev) static u32 ace_handle_event(struct device *dev, u32 evtcsm, u32 evtprd) { struct ace_private *ap; - struct ace_regs *regs; ap = (struct ace_private *)dev->priv; - regs = ap->regs; while (evtcsm != evtprd){ switch (ap->evt_ring[evtcsm].evt){ @@ -1019,24 +1059,24 @@ static u32 ace_handle_event(struct device *dev, u32 evtcsm, u32 evtprd) } -static int rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm) +static int ace_rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm) { struct ace_private *ap = (struct ace_private *)dev->priv; - u32 idx, oldidx; struct ace_regs *regs = ap->regs; + u32 idx, oldidx; idx = rxretcsm; - while(idx != rxretprd){ + while (idx != rxretprd){ struct sk_buff *skb, *newskb, *oldskb; struct rx_desc *newrxdesc, *oldrxdesc; u32 prdidx, size; - unsigned long addr; + void *addr; u16 csum; int jumbo; oldidx = ap->rx_return_ring[idx].idx; - jumbo = ap->rx_return_ring[idx].flags & JUMBO_FLAG; + jumbo = ap->rx_return_ring[idx].flags & DFLG_RX_JUMBO; if (jumbo){ oldskb = ap->rx_jumbo_skbuff[oldidx]; @@ -1065,7 +1105,7 @@ static int rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm) skb_reserve(skb, 2); memcpy(skb_put(skb, size), oldskb->data, size); - addr = oldrxdesc->addr; + addr = get_aceaddr_bus(&oldrxdesc->addr); newskb = oldskb; }else{ skb = oldskb; @@ -1084,21 +1124,21 @@ static int rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm) * aligned receive buffers */ skb_reserve(newskb, 2); - addr = virt_to_bus(newskb->data); + addr = (void *)virt_to_bus(newskb->data); } - newrxdesc->addr = addr; + set_aceaddr_bus(&newrxdesc->addr, addr); newrxdesc->size = size; newrxdesc->flags = oldrxdesc->flags; newrxdesc->idx = prdidx; newrxdesc->type = DESC_RX; #if (BITS_PER_LONG == 32) - newrxdesc->zero = 0; + newrxdesc->addr.addrhi = 0; #endif oldrxdesc->size = 0; - oldrxdesc->addr = 0; + set_aceaddr_bus(&oldrxdesc->addr, 0); if (jumbo){ ap->rx_jumbo_skbuff[oldidx] = NULL; @@ -1152,7 +1192,11 @@ static int rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm) idx = (idx + 1) % RX_RETURN_RING_ENTRIES; } out: - regs->RxRetCsm = idx; + /* + * According to the documentation RxRetCsm is obsolete with + * the 12.3.x Firmware - my Tigon I NIC's seem to disagree! + */ + writel(idx, ®s->RxRetCsm); ap->cur_rx = idx; return idx; @@ -1180,7 +1224,7 @@ static void ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) * we want to make sure it is actually our interrupt before * spending any time in here. */ - if (!(regs->HostCtrl & IN_INT)){ + if (!(readl(®s->HostCtrl) & IN_INT)){ spin_unlock(&ap->lock); return; } @@ -1188,7 +1232,16 @@ static void ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) /* * Tell the card not to generate interrupts while we are in here. */ - regs->Mb0Lo = 1; + writel(1, ®s->Mb0Lo); + + /* + * Service RX ints before TX + */ + rxretprd = ap->rx_ret_prd; + rxretcsm = ap->cur_rx; + + if (rxretprd != rxretcsm) + rxretprd = ace_rx_int(dev, rxretprd, rxretcsm); txcsm = ap->tx_csm; if (txcsm != ap->tx_ret_csm) { @@ -1201,9 +1254,11 @@ static void ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) ap->tx_skbuff[idx] = NULL; - ap->tx_ring[idx].size = 0; - ap->tx_ring[idx].addr = 0; - ap->tx_ring[idx].flags = 0; +#if (BITS_PER_LONG == 64) + writel(0, &ap->tx_ring[idx].addr.addrhi); +#endif + writel(0, &ap->tx_ring[idx].addr.addrlo); + writel(0, &ap->tx_ring[idx].flagsize); idx = (idx + 1) % TX_RING_ENTRIES; } while (idx != txcsm); @@ -1224,21 +1279,15 @@ static void ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) ap->tx_ret_csm = txcsm; } - rxretprd = ap->rx_ret_prd; - rxretcsm = ap->cur_rx; - - if (rxretprd != rxretcsm) - rxretprd = rx_int(dev, rxretprd, rxretcsm); - - evtcsm = regs->EvtCsm; + evtcsm = readl(®s->EvtCsm); evtprd = ap->evt_prd; if (evtcsm != evtprd){ evtcsm = ace_handle_event(dev, evtcsm, evtprd); } - regs->EvtCsm = evtcsm; - regs->Mb0Lo = 0; + writel(evtcsm, ®s->EvtCsm); + writel(0, ®s->Mb0Lo); spin_unlock(&ap->lock); } @@ -1258,7 +1307,7 @@ static int ace_open(struct device *dev) return -EBUSY; } - regs->IfMtu = dev->mtu + ETH_HLEN + 4; + writel(dev->mtu + ETH_HLEN + 4, ®s->IfMtu); cmd.evt = C_HOST_STATE; cmd.code = C_C_STACK_UP; @@ -1277,6 +1326,7 @@ static int ace_open(struct device *dev) ap->promisc = 1; }else ap->promisc = 0; + ap->mcast_all = 0; #if 0 { long myjif = jiffies + HZ; @@ -1338,8 +1388,9 @@ static int ace_close(struct device *dev) for (i = 0; i < TX_RING_ENTRIES; i++) { if (ap->tx_skbuff[i]) { - ap->tx_ring[i].size = 0; - ap->tx_ring[i].addr = 0; + writel(0, &ap->tx_ring[i].addr.addrhi); + writel(0, &ap->tx_ring[i].addr.addrlo); + writel(0, &ap->tx_ring[i].flagsize); dev_kfree_skb(ap->tx_skbuff[i]); } } @@ -1359,30 +1410,37 @@ static int ace_start_xmit(struct sk_buff *skb, struct device *dev) struct ace_private *ap = (struct ace_private *)dev->priv; struct ace_regs *regs = ap->regs; unsigned long flags; - u32 idx; + unsigned long addr; + u32 idx, flagsize; spin_lock_irqsave(&ap->lock, flags); idx = ap->tx_prd; ap->tx_skbuff[idx] = skb; - ap->tx_ring[idx].addr = virt_to_bus(skb->data); - ap->tx_ring[idx].size = skb->len; - ap->tx_ring[idx].flags = DESC_END; + addr = virt_to_bus(skb->data); +#if (BITS_PER_LONG == 64) + writel(addr >> 32, &ap->tx_ring[idx].addr.addrhi); +#endif + writel(addr & 0xffffffff, &ap->tx_ring[idx].addr.addrlo); + flagsize = (skb->len << 16) | (DESC_END) ; + writel(flagsize, &ap->tx_ring[idx].flagsize); + mb(); idx = (idx + 1) % TX_RING_ENTRIES; ap->tx_prd = idx; - regs->TxPrd = idx; + writel(idx, ®s->TxPrd); if ((idx + 1) % TX_RING_ENTRIES == ap->tx_ret_csm){ ap->tx_full = 1; set_bit(0, (void*)&dev->tbusy); /* * Queue is full, add timer to detect whether the - * transmitter is stuck. + * transmitter is stuck. Use mod_timer as we can get + * into the situation where we risk adding several + * timers. */ - ap->timer.expires = jiffies + (3 * HZ); - add_timer(&ap->timer); + mod_timer(&ap->timer, jiffies + (3 * HZ)); } spin_unlock_irqrestore(&ap->lock, flags); @@ -1400,7 +1458,7 @@ static int ace_change_mtu(struct device *dev, int new_mtu) if ((new_mtu < 68) || (new_mtu > ACE_JUMBO_MTU)) return -EINVAL; - regs->IfMtu = new_mtu + ETH_HLEN + 4; + writel(new_mtu + ETH_HLEN + 4, ®s->IfMtu); dev->mtu = new_mtu; if (new_mtu > ACE_STD_MTU){ @@ -1442,8 +1500,8 @@ static int ace_set_mac_addr(struct device *dev, void *p) da = (u16 *)dev->dev_addr; regs = ((struct ace_private *)dev->priv)->regs; - regs->MacAddrHi = da[0]; - regs->MacAddrLo = (da[1] << 16) | da[2]; + writel(da[0], ®s->MacAddrHi); + writel((da[1] << 16) | da[2], ®s->MacAddrLo); cmd.evt = C_SET_MAC_ADDR; cmd.code = 0; @@ -1460,21 +1518,51 @@ static void ace_set_multicast_list(struct device *dev) struct ace_regs *regs = ap->regs; struct cmd cmd; + if ((dev->flags & IFF_ALLMULTI) && !(ap->mcast_all)) { + cmd.evt = C_SET_MULTICAST_MODE; + cmd.code = C_C_MCAST_ENABLE; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + ap->mcast_all = 1; + } else if (ap->mcast_all){ + cmd.evt = C_SET_MULTICAST_MODE; + cmd.code = C_C_MCAST_ENABLE; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + ap->mcast_all = 0; + } + if ((dev->flags & IFF_PROMISC) && !(ap->promisc)) { cmd.evt = C_SET_PROMISC_MODE; cmd.code = C_C_PROMISC_ENABLE; cmd.idx = 0; ace_issue_cmd(regs, &cmd); - ap->promisc = 1; }else if (!(dev->flags & IFF_PROMISC) && (ap->promisc)){ cmd.evt = C_SET_PROMISC_MODE; cmd.code = C_C_PROMISC_DISABLE; cmd.idx = 0; ace_issue_cmd(regs, &cmd); - ap->promisc = 0; } + + /* + * For the time being multicast relies on the upper layers + * filtering it properly. The Firmware does not allow one to + * set the entire multicast list at a time and keeping track of + * it here is going to be messy. + */ + if ((dev->mc_count) && !(ap->mcast_all)) { + cmd.evt = C_SET_MULTICAST_MODE; + cmd.code = C_C_MCAST_ENABLE; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + }else if (!ap->mcast_all) { + cmd.evt = C_SET_MULTICAST_MODE; + cmd.code = C_C_MCAST_DISABLE; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + } } @@ -1488,24 +1576,29 @@ static struct net_device_stats *ace_get_stats(struct device *dev) __initfunc(void ace_copy(struct ace_regs *regs, void *src, u32 dest, int size)) { - int tsize; - u32 tdest; + unsigned long tdest; + u32 *wsrc; + short tsize, i; if (size <= 0) return; - while(size > 0){ + while (size > 0){ tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), min(size, ACE_WINDOW_SIZE)); - tdest = dest & (ACE_WINDOW_SIZE - 1); - regs->WinBase = dest & ~(ACE_WINDOW_SIZE - 1); + tdest = (unsigned long)®s->Window + + (dest & (ACE_WINDOW_SIZE - 1)); + writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); #ifdef __BIG_ENDIAN #error "data must be swapped here" #else -#if 0 - printk("copying %04x from %08x to %06x (Window addr %08x), winbase %02x\n", tsize, (unsigned)src, dest, (unsigned) ((void *)regs->Window + tdest), regs->WinBase); -#endif - memcpy((void *)((void *)regs->Window + tdest), src, tsize); +/* + * XXX - special memcpy needed here!!! + */ + wsrc = src; + for (i = 0; i < (tsize / 4); i++){ + writel(wsrc[i], tdest + i*4); + } #endif dest += tsize; src += tsize; @@ -1518,19 +1611,22 @@ __initfunc(void ace_copy(struct ace_regs *regs, void *src, u32 dest, int size)) __initfunc(void ace_clear(struct ace_regs *regs, u32 dest, int size)) { - int tsize = 0; - u32 tdest; + unsigned long tdest; + short tsize = 0, i; if (size <= 0) return; - while(size > 0){ + while (size > 0){ tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), min(size, ACE_WINDOW_SIZE)); - tdest = dest & (ACE_WINDOW_SIZE - 1); - regs->WinBase = dest & ~(ACE_WINDOW_SIZE - 1); + tdest = (unsigned long)®s->Window + + (dest & (ACE_WINDOW_SIZE - 1)); + writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); - memset((void *)((void *)regs->Window + tdest), 0, tsize); + for (i = 0; i < (tsize / 4); i++){ + writel(0, tdest + i*4); + } dest += tsize; size -= tsize; @@ -1554,13 +1650,17 @@ __initfunc(int ace_load_firmware(struct device *dev)) ap = (struct ace_private *)dev->priv; regs = ap->regs; - if (!(regs->CpuCtrl & CPU_HALTED)){ + if (!(readl(®s->CpuCtrl) & CPU_HALTED)){ printk(KERN_ERR "%s: trying to download firmware while the " "CPU is running!\n", dev->name); return -EFAULT; } - ace_clear(regs, 0x2000, 0x100000-0x2000); + /* + * Do not try to clear more than 512KB or we end up seeing + * funny things on NICs with only 512KB SRAM + */ + ace_clear(regs, 0x2000, 0x80000-0x2000); if (ap->version == 1){ ace_copy(regs, tigonFwText, tigonFwTextAddr, tigonFwTextLen); ace_copy(regs, tigonFwData, tigonFwDataAddr, tigonFwDataLen); @@ -1595,36 +1695,56 @@ __initfunc(int ace_load_firmware(struct device *dev)) */ static void eeprom_start(struct ace_regs *regs) { + u32 local = readl(®s->LocalCtrl); + udelay(1); - regs->LocalCtrl |= (EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE); + local |= EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl |= EEPROM_CLK_OUT; + local |= EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl &= ~EEPROM_DATA_OUT; + local &= ~EEPROM_DATA_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl &= ~EEPROM_CLK_OUT; + local &= ~EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); } static void eeprom_prep(struct ace_regs *regs, u8 magic) { short i; + u32 local; udelay(2); - regs->LocalCtrl &= ~EEPROM_DATA_OUT; - regs->LocalCtrl |= EEPROM_WRITE_ENABLE; + local = readl(®s->LocalCtrl); + local &= ~EEPROM_DATA_OUT; + local |= EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); + mb(); for (i = 0; i < 8; i++, magic <<= 1) { udelay(2); if (magic & 0x80) - regs->LocalCtrl |= EEPROM_DATA_OUT; + local |= EEPROM_DATA_OUT; else - regs->LocalCtrl &= ~EEPROM_DATA_OUT; + local &= ~EEPROM_DATA_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl |= EEPROM_CLK_OUT; + local |= EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT); + local &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT); + writel(local, ®s->LocalCtrl); + mb(); } } @@ -1632,15 +1752,23 @@ static void eeprom_prep(struct ace_regs *regs, u8 magic) static int eeprom_check_ack(struct ace_regs *regs) { int state; - - regs->LocalCtrl &= ~EEPROM_WRITE_ENABLE; + u32 local; + + local = readl(®s->LocalCtrl); + local &= ~EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); + mb(); udelay(2); - regs->LocalCtrl |= EEPROM_CLK_OUT; + local |= EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); /* sample data in middle of high clk */ - state = (regs->LocalCtrl & EEPROM_DATA_IN) != 0; + state = (readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0; udelay(1); - regs->LocalCtrl &= ~EEPROM_CLK_OUT; + mb(); + writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl); + mb(); return state; } @@ -1648,15 +1776,28 @@ static int eeprom_check_ack(struct ace_regs *regs) static void eeprom_stop(struct ace_regs *regs) { - regs->LocalCtrl |= EEPROM_WRITE_ENABLE; + u32 local; + + local = readl(®s->LocalCtrl); + local |= EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl &= ~EEPROM_DATA_OUT; + local &= ~EEPROM_DATA_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl |= EEPROM_CLK_OUT; + local |= EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(1); - regs->LocalCtrl |= EEPROM_DATA_OUT; + local |= EEPROM_DATA_OUT; + writel(local, ®s->LocalCtrl); + mb(); udelay(2); - regs->LocalCtrl &= ~EEPROM_CLK_OUT; + local &= ~EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); } @@ -1665,7 +1806,8 @@ static void eeprom_stop(struct ace_regs *regs) */ static u8 read_eeprom_byte(struct ace_regs *regs, unsigned long offset) { - u32 i; + u32 local; + short i; u8 result = 0; if (!regs){ @@ -1695,24 +1837,37 @@ static u8 read_eeprom_byte(struct ace_regs *regs, unsigned long offset) return 0; for (i = 0; i < 8; i++) { - regs->LocalCtrl &= ~EEPROM_WRITE_ENABLE; + local = readl(®s->LocalCtrl); + local &= ~EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); udelay(2); - regs->LocalCtrl |= EEPROM_CLK_OUT; + mb(); + local |= EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); udelay(1); + mb(); /* sample data mid high clk */ result = (result << 1) | - ((regs->LocalCtrl & EEPROM_DATA_IN) != 0); + ((readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0); udelay(1); - regs->LocalCtrl &= ~EEPROM_CLK_OUT; - if (i == 7) - regs->LocalCtrl |= EEPROM_WRITE_ENABLE; + mb(); + local = readl(®s->LocalCtrl); + local &= ~EEPROM_CLK_OUT; + writel(local, ®s->LocalCtrl); + mb(); + if (i == 7){ + local |= EEPROM_WRITE_ENABLE; + writel(local, ®s->LocalCtrl); + mb(); + } } - regs->LocalCtrl |= EEPROM_DATA_OUT; + local |= EEPROM_DATA_OUT; + writel(local, ®s->LocalCtrl); udelay(1); - regs->LocalCtrl |= EEPROM_CLK_OUT; + writel(readl(®s->LocalCtrl) | EEPROM_CLK_OUT, ®s->LocalCtrl); udelay(2); - regs->LocalCtrl &= ~EEPROM_CLK_OUT; + writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl); eeprom_stop(regs); return result; @@ -1721,6 +1876,6 @@ static u8 read_eeprom_byte(struct ace_regs *regs, unsigned long offset) /* * Local variables: - * compile-command: "gcc -D__KERNEL__ -D__SMP__ -I/data/home/jes/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -DMODULE -DMODVERSIONS -include /data/home/jes/linux/include/linux/modversions.h -c -o acenic.o acenic.c" + * compile-command: "gcc -D__KERNEL__ -D__SMP__ -DMODULE -I/data/home/jes/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -DMODVERSIONS -include /data/home/jes/linux/include/linux/modversions.h -c -o acenic.o acenic.c" * End: */ diff --git a/drivers/net/acenic.h b/drivers/net/acenic.h index deca3e895..6f4d67384 100644 --- a/drivers/net/acenic.h +++ b/drivers/net/acenic.h @@ -1,13 +1,84 @@ #ifndef _ACENIC_H_ #define _ACENIC_H_ -#if ((BITS_PER_LONG != 32) && (BITS_PER_LONG != 64)) -#error "BITS_PER_LONG not defined or not valid" +/* + * Addressing: + * + * The Tigon uses 64-bit host addresses, regardless of their actual + * length, and it expects a big-endian format. For 32 bit systems the + * upper 32 bits of the address are simply ignored (zero), however for + * little endian 64 bit systems (Alpha) this looks strange with the + * two parts of the address word being swapped. + * + * The addresses are split in two 32 bit words for all architectures + * as some of them are in PCI shared memory and it is necessary to use + * readl/writel to access them. + * + * The addressing code is derived from Pete Beckman's work, but + * modified to deal properly with readl/writel usage. + */ + +typedef struct { + u32 addrhi; + u32 addrlo; +} aceaddr; + + +static inline void set_aceaddr(aceaddr *aa, volatile void *addr) +{ + unsigned long baddr = virt_to_bus((void *)addr); +#if (BITS_PER_LONG == 64) + aa->addrlo = baddr & 0xffffffff; + aa->addrhi = baddr >> 32; +#else + /* Don't bother setting zero every time */ + aa->addrlo = baddr; #endif + mb(); +} -struct ace_regs { +static inline void set_aceaddr_bus(aceaddr *aa, volatile void *addr) +{ + unsigned long baddr = (unsigned long)addr; +#if (BITS_PER_LONG == 64) + aa->addrlo = baddr & 0xffffffff; + aa->addrhi = baddr >> 32; +#else + /* Don't bother setting zero every time */ + aa->addrlo = baddr; +#endif + mb(); +} + + +static inline void *get_aceaddr(aceaddr *aa) +{ + unsigned long addr; + mb(); +#if (BITS_PER_LONG == 64) + addr = (u64)aa->addrhi << 32 | aa->addrlo; +#else + addr = aa->addrlo; +#endif + return bus_to_virt(addr); +} + + +static inline void *get_aceaddr_bus(aceaddr *aa) +{ + unsigned long addr; + mb(); +#if (BITS_PER_LONG == 64) + addr = (u64)aa->addrhi << 32 | aa->addrlo; +#else + addr = aa->addrlo; +#endif + return (void *)addr; +} + +struct ace_regs { u32 pad0[16]; /* PCI control registers */ u32 HostCtrl; /* 0x40 */ @@ -109,7 +180,7 @@ struct ace_regs { u32 ModeStat; u32 DmaReadCfg; u32 DmaWriteCfg; /* 0x620 */ - u32 pad15; + u32 TxBufRat; u32 EvtCsm; u32 CmdCsm; u32 TuneRxCoalTicks;/* 0x630 */ @@ -220,6 +291,7 @@ struct ace_regs { #define ACE_BYTE_SWAP_DATA 0x10 #define ACE_WARN 0x08 #define ACE_WORD_SWAP 0x04 +#define ACE_NO_JUMBO_FRAG 0x200 #define ACE_FATAL 0x40000000 @@ -227,7 +299,7 @@ struct ace_regs { * DMA config */ -#define DMA_THRESH_8W 0x80; +#define DMA_THRESH_8W 0x80 /* @@ -366,19 +438,19 @@ struct cmd { #define DESC_MORE 0x08 /* - * RX control block flags + * Control block flags */ -#define RX_TCP_UDP_SUM 0x01 -#define RX_IP_SUM 0x02 -#define RX_SPLIT_HDRS 0x04 -#define RX_NO_PSEUDO_HDR_SUM 0x08 +#define FLG_RX_TCP_UDP_SUM 0x01 +#define FLG_RX_IP_SUM 0x02 +#define FLG_RX_SPLIT_HDRS 0x04 +#define FLG_RX_NO_PSDO_HDR_SUM 0x08 +#define FLG_RNG_DISABLED 0x200 /* * Descriptor flags */ - -#define JUMBO_FLAG 0x10 +#define DFLG_RX_JUMBO 0x10 /* * TX ring @@ -389,18 +461,20 @@ struct cmd { #define TX_RING_BASE 0x3800 struct tx_desc{ -#if (BITS_PER_LONG == 64) - u64 addr; -#else - u32 zero; - u32 addr; -#endif + aceaddr addr; + u32 flagsize; +#if 0 +/* + * This is in PCI shared mem and must be accessed with readl/writel + * real layout is: + */ #if __LITTLE_ENDIAN u16 flags; u16 size; #else u16 size; u16 flags; +#endif #endif u32 nic_addr; }; @@ -412,19 +486,18 @@ struct tx_desc{ #define RX_JUMBO_RING_ENTRIES 256 #define RX_JUMBO_RING_SIZE (RX_JUMBO_RING_ENTRIES *sizeof(struct rx_desc)) -#define RX_RETURN_RING_ENTRIES (2 * RX_STD_RING_ENTRIES) -#define RX_RETURN_RING_SIZE (RX_RETURN_RING_ENTRIES * \ +#define RX_MINI_RING_ENTRIES 1024 +#define RX_MINI_RING_SIZE (RX_MINI_RING_ENTRIES *sizeof(struct rx_desc)) + +#define RX_RETURN_RING_ENTRIES 2048 +#define RX_RETURN_RING_SIZE (RX_MAX_RETURN_RING_ENTRIES * \ sizeof(struct rx_desc)) -#define RX_RING_THRESH 32 +#define RX_RING_THRESH 64 +#define RX_RING_JUMBO_THRESH 48 struct rx_desc{ -#if (BITS_PER_LONG == 64) - u64 addr; -#else - u32 zero; - u32 addr; -#endif + aceaddr addr; #ifdef __LITTLE_ENDIAN u16 size; u16 idx; @@ -462,12 +535,7 @@ struct rx_desc{ * This struct is shared with the NIC firmware. */ struct ring_ctrl { -#if (BITS_PER_LONG == 64) - u64 rngptr; -#else - u32 zero; - u32 rngptr; -#endif + aceaddr rngptr; #ifdef __LITTLE_ENDIAN u16 flags; u16 max_len; @@ -522,22 +590,12 @@ struct ace_info { struct ring_ctrl tx_ctrl; struct ring_ctrl rx_std_ctrl; struct ring_ctrl rx_jumbo_ctrl; + struct ring_ctrl rx_mini_ctrl; struct ring_ctrl rx_return_ctrl; -#if (BITS_PER_LONG == 64) - u64 evt_prd_ptr; - u64 rx_ret_prd_ptr; - u64 tx_csm_ptr; - u64 stats2_ptr; -#else - u32 evt_prd_ptr_hi; - u32 evt_prd_ptr; - u32 rx_ret_prd_ptr_hi; - u32 rx_ret_prd_ptr; - u32 tx_csm_ptr_hi; - u32 tx_csm_ptr; - u32 stats2_ptr_hi; - u32 stats2_ptr; -#endif + aceaddr evt_prd_ptr; + aceaddr rx_ret_prd_ptr; + aceaddr tx_csm_ptr; + aceaddr stats2_ptr; }; /* @@ -555,6 +613,9 @@ struct ace_private struct tx_desc *tx_ring; struct rx_desc rx_std_ring[RX_STD_RING_ENTRIES]; struct rx_desc rx_jumbo_ring[RX_JUMBO_RING_ENTRIES]; +#if 0 + struct rx_desc rx_mini_ring[RX_MINI_RING_ENTRIES]; +#endif struct rx_desc rx_return_ring[RX_RETURN_RING_ENTRIES]; struct event evt_ring[EVT_RING_ENTRIES]; struct ace_info *info; @@ -576,7 +637,7 @@ struct ace_private struct device *next __attribute__ ((aligned (L1_CACHE_BYTES))); unsigned char *trace_buf; - int fw_running, fw_up, jumbo, promisc; + int fw_running, fw_up, jumbo, promisc, mcast_all; int version; int flags; u16 vendor; @@ -598,7 +659,7 @@ static int ace_load_std_rx_ring(struct device *dev); static int ace_load_jumbo_rx_ring(struct device *dev); static int ace_flush_jumbo_rx_ring(struct device *dev); static void ace_interrupt(int irq, void *dev_id, struct pt_regs *regs); - +static int ace_load_firmware(struct device *dev); static int ace_open(struct device *dev); static int ace_start_xmit(struct sk_buff *skb, struct device *dev); static int ace_close(struct device *dev); diff --git a/drivers/net/acenic_firmware.h b/drivers/net/acenic_firmware.h index 7e2472c51..b4e81b7e6 100644 --- a/drivers/net/acenic_firmware.h +++ b/drivers/net/acenic_firmware.h @@ -1,5554 +1,8532 @@ /* Generated by genfw.c */ int tigonFwReleaseMajor = 0xc; -int tigonFwReleaseMinor = 0x1; -int tigonFwReleaseFix = 0x6; -u32 tigonFwStartAddr = 0x4000; -u32 tigonFwTextAddr = 0x4000; -int tigonFwTextLen = 0x10500; -u32 tigonFwDataAddr = 0x14f50; -int tigonFwDataLen = 0x140; -u32 tigonFwRodataAddr = 0x14500; -int tigonFwRodataLen = 0xa30; -u32 tigonFwBssAddr = 0x150c0; +int tigonFwReleaseMinor = 0x3; +int tigonFwReleaseFix = 0x5; +u32 tigonFwStartAddr = 0x00004000; +u32 tigonFwTextAddr = 0x00004000; +int tigonFwTextLen = 0x10910; +u32 tigonFwRodataAddr = 0x00014910; +int tigonFwRodataLen = 0xaa0; +u32 tigonFwDataAddr = 0x000153d0; +int tigonFwDataLen = 0x150; +u32 tigonFwSbssAddr = 0x00015520; +int tigonFwSbssLen = 0x2c; +u32 tigonFwBssAddr = 0x00015550; int tigonFwBssLen = 0x2080; -u32 tigonFwSbssAddr = 0x15090; -int tigonFwSbssLen = 0x28; u32 tigonFwText[(MAX_TEXT_LEN/4) + 1] __initdata = { -0x10000003, 0x0, 0xd, 0xd, 0x3c1d0001, 0x8fbd4f84, -0x3a0f021, 0x3c100000, 0x26104000, 0xc00100c, 0x0, 0xd, -0x27bdffd8, 0x3c1cc000, 0x3c1b0013, 0x377bd800, 0xd021, 0x3c170013, -0x36f75430, 0x2e02021, 0x340583d0, 0xafbf0024, 0xc002488, 0xafb00020, -0xc0023e8, 0x0, 0x3c040001, 0x24844560, 0x24050001, 0x2e03021, -0x3821, 0x3c100001, 0x26107140, 0xafb00010, 0xc002403, 0xafbb0014, -0x3c02000f, 0x3442ffff, 0x2021024, 0x362102b, 0x10400009, 0x24050003, -0x3c040001, 0x2484456c, 0x2003021, 0x3603821, 0x3c020010, 0xafa20010, -0xc002403, 0xafa00014, 0x2021, 0x3405c000, 0x3c010001, 0x370821, -0xa02083a0, 0x3c010001, 0x370821, 0xa02083a2, 0x3c010001, 0x370821, -0xa02083a3, 0x3c010001, 0x370821, 0xac2083a4, 0xa2e004c8, 0x418c0, -0x24840001, 0x771021, 0xac40726c, 0x771021, 0xac407270, 0x2e31021, -0xa445726c, 0x2c820020, 0x1440fff7, 0x418c0, 0x2021, 0x3405c000, -0x418c0, 0x24840001, 0x771021, 0xac40736c, 0x771021, 0xac407370, -0x2e31021, 0xa445736c, 0x2c820080, 0x5440fff7, 0x418c0, 0xaf800054, -0xaf80011c, 0x8f820044, 0x34420040, 0xaf820044, 0x8f820044, 0x34420020, -0xaf820044, 0x8f420218, 0x30420002, 0x10400009, 0x0, 0x8f420220, -0x3c030002, 0x34630004, 0x431025, 0xaee204b4, 0x8f42021c, 0x8001074, -0x34420004, 0x8f420220, 0x3c030002, 0x34630006, 0x431025, 0xaee204b4, -0x8f42021c, 0x34420006, 0xaee204bc, 0x8f420218, 0x30420010, 0x1040000a, -0x0, 0x8f42021c, 0x34420004, 0xaee204b8, 0x8f420220, 0x3c03000a, -0x34630004, 0x431025, 0x800108a, 0xaee204b0, 0x8f420220, 0x3c03000a, -0x34630006, 0x431025, 0xaee204b0, 0x8f42021c, 0x34420006, 0xaee204b8, -0x8f420218, 0x30420200, 0x10400003, 0x24020001, 0x8001091, 0xa2e27238, -0xa2e07238, 0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054, 0x8f820054, -0x8001099, 0x24630064, 0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, -0x0, 0xaf800044, 0x8f420208, 0x8f43020c, 0xaee20010, 0xaee30014, -0x8ee40010, 0x8ee50014, 0x26e20030, 0xaee20028, 0x24020480, 0xaee20018, -0xaf840090, 0xaf850094, 0x8ee20028, 0xaf8200b4, 0x96e2001a, 0xaf82009c, -0x8f8200b0, 0x8ee304bc, 0x431025, 0xaf8200b0, 0x8f8200b0, 0x30420004, -0x1440fffd, 0x0, 0x8ee20450, 0x8ee30454, 0xaee304ec, 0x8ee204ec, -0x2442e000, 0x2c422001, 0x1440000d, 0x26e40030, 0x8ee20450, 0x8ee30454, -0x3c040001, 0x24844578, 0x3c050001, 0xafa00010, 0xafa00014, 0x8ee704ec, -0x34a5f000, 0xc002403, 0x603021, 0x26e40030, 0xc002488, 0x24050400, -0x27440080, 0xc002488, 0x24050080, 0x26e4776c, 0xc002488, 0x24050400, -0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260, 0x27450200, 0x24060008, -0xaee20068, 0x24020006, 0xc00249a, 0xaee20064, 0x3c023b9a, 0x3442ca00, -0x2021, 0x24030002, 0xaee30074, 0xaee30070, 0xaee2006c, 0x240203e8, -0xaee20104, 0x24020001, 0xaee30100, 0xaee2010c, 0x3c030001, 0x641821, -0x90634f50, 0x2e41021, 0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8, -0x0, 0x8f820040, 0x2e41821, 0x24840001, 0x21702, 0x24420030, -0xa062009c, 0x2e41021, 0xa040009c, 0x96e2046a, 0x30420003, 0x14400009, -0x0, 0x96e2047a, 0x30420003, 0x50400131, 0x3c030800, 0x96e2046a, -0x30420003, 0x1040002a, 0x3c020700, 0x96e2047a, 0x30420003, 0x10400026, -0x3c020700, 0x96e3047a, 0x96e2046a, 0x14620022, 0x3c020700, 0x8ee204b0, -0x24030001, 0xa2e34e10, 0x34420e00, 0xaee204b0, 0x8f420218, 0x30420100, -0x10400005, 0x0, 0x3c020001, 0x2442e128, 0x800111d, 0x21100, -0x3c020001, 0x2442d31c, 0x21100, 0x21182, 0x3c030800, 0x431025, -0x3c010001, 0xac221138, 0x3c020001, 0x2442f640, 0x21100, 0x21182, -0x3c030800, 0x431025, 0x3c010001, 0xac221178, 0x8ee20000, 0x34424000, -0x8001238, 0xaee20000, 0x34423000, 0xafa20018, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x3021, 0x24420001, 0xaee201a0, 0x80011a0, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008, -0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc, -0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, -0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, -0x10a20005, 0x0, 0x800118a, 0x0, 0x14a00005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x80011a0, 0x0, 0x8ee24e20, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, -0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584, -0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f000, 0x8001223, 0x0, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001, -0xaee201a0, 0x8001207, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, -0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20, -0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, -0x24420001, 0x10a20005, 0x0, 0x80011f1, 0x0, 0x14a00005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8001207, 0x0, 0x8ee24e20, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012, -0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001, -0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8001223, -0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228, -0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8, -0x8ee201a8, 0x8ee2015c, 0x3c040001, 0x248445a4, 0x3405f001, 0x24420001, -0xaee2015c, 0x8ee2015c, 0x3021, 0x3821, 0xafa00010, 0xc002403, -0xafa00014, 0x8001238, 0x0, 0x3c020001, 0x2442f568, 0x21100, -0x21182, 0x431025, 0x3c010001, 0xac221178, 0x96e2045a, 0x30420003, -0x10400025, 0x3c050fff, 0x8ee204b8, 0x34a5ffff, 0x34420a00, 0xaee204b8, -0x8ee304b8, 0x3c040001, 0x248445b0, 0x24020001, 0xa2e204dc, 0xa2e204dd, -0x3c020002, 0x621825, 0x3c020001, 0x2442a390, 0x451024, 0x21082, -0xaee304b8, 0x3c030800, 0x431025, 0x3c010001, 0xac221120, 0x3c020001, -0x2442adb4, 0x451024, 0x21082, 0x431025, 0x3c010001, 0xac221180, -0x96e6045a, 0x3821, 0x24050011, 0xafa00010, 0xc002403, 0xafa00014, -0x8001268, 0x0, 0x3c020001, 0x2442a9d4, 0x21100, 0x21182, -0x3c030800, 0x431025, 0x3c010001, 0xac221180, 0x96e2046a, 0x30420010, -0x14400009, 0x0, 0x96e2047a, 0x30420010, 0x10400112, 0x0, -0x96e2046a, 0x30420010, 0x10400005, 0x3c020700, 0x96e2047a, 0x30420010, -0x14400102, 0x3c020700, 0x34423000, 0xafa20018, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x3021, 0x24420001, 0xaee201a0, 0x80012ea, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008, -0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc, -0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, -0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, -0x10a20005, 0x0, 0x80012d4, 0x0, 0x14a00005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x80012ea, 0x0, 0x8ee24e20, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, -0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584, -0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f000, 0x800136d, 0x0, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001, -0xaee201a0, 0x8001351, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, -0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20, -0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, -0x24420001, 0x10a20005, 0x0, 0x800133b, 0x0, 0x14a00005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8001351, 0x0, 0x8ee24e20, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012, -0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001, -0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x800136d, -0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228, -0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8, -0x8ee201a8, 0x8ee2015c, 0x3c040001, 0x248445a4, 0x3405f002, 0x24420001, -0xaee2015c, 0x8ee2015c, 0x3021, 0x3821, 0xafa00010, 0xc002403, -0xafa00014, 0x96e6047a, 0x96e7046a, 0x3c040001, 0x248445bc, 0x24050012, -0xafa00010, 0xc002403, 0xafa00014, 0xc0044c0, 0x0, 0xc002314, -0x0, 0x3c060001, 0x34c63800, 0xaee005f8, 0xaf400228, 0xaf40022c, -0x96e30458, 0x8ee40000, 0x3c0512d8, 0x34a5c358, 0x27623800, 0xaee27248, -0x27623800, 0xaee27250, 0x27623800, 0xaee27254, 0x3661021, 0xaee27260, -0x2402ffff, 0xaee004c4, 0xaee004d0, 0xaee004d4, 0xaee004e0, 0xa2e004e4, -0xaee00dfc, 0xaee00e08, 0xaee00e00, 0xaee00e04, 0xaee00e0c, 0xaee0723c, -0xaee05234, 0xaee05230, 0xaee0522c, 0xaee07240, 0xaee07244, 0xaee0724c, -0xaee07258, 0xaee004c0, 0x2463ffff, 0x852025, 0xaee304e8, 0xaee40000, -0xaf800060, 0xaf820064, 0x3c020100, 0xafa20018, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x3021, 0x24420001, 0xaee201a0, 0x8001422, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008, -0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc, -0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, -0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, -0x10a20005, 0x0, 0x800140c, 0x0, 0x14a00005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x8001422, 0x0, 0x8ee24e20, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, -0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584, -0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f000, 0x80014a5, 0x0, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001, -0xaee201a0, 0x8001489, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, -0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20, -0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, -0x24420001, 0x10a20005, 0x0, 0x8001473, 0x0, 0x14a00005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8001489, 0x0, 0x8ee24e20, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012, -0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001, -0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x80014a5, -0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228, -0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8, -0x8ee201a8, 0x8ee20150, 0x24420001, 0xaee20150, 0xc0014dc, 0x8ee20150, -0x8f8200a0, 0x30420004, 0x1440fffd, 0x0, 0x8f820040, 0x30420001, -0x14400008, 0x0, 0x8f430104, 0x24020001, 0x10620004, 0x0, -0x8f420264, 0x10400006, 0x0, 0x8ee20178, 0x24420001, 0xaee20178, -0x80014c5, 0x8ee20178, 0x8f820044, 0x34420004, 0xaf820044, 0x8ee20174, -0x24420001, 0xaee20174, 0x8ee20174, 0x8f8200d8, 0x8f8300d4, 0x431023, -0xaee2725c, 0x8ee2725c, 0x1c400003, 0x3c030001, 0x431021, 0xaee2725c, -0xc004054, 0x0, 0xc004400, 0xaf800228, 0x8fbf0024, 0x8fb00020, -0x3e00008, 0x27bd0028, 0x3e00008, 0x0, 0x3e00008, 0x0, -0x0, 0x0, 0x2402002c, 0xaf820050, 0xaee07264, 0x8f420238, -0xaee27268, 0x8f820054, 0x24420067, 0xaf820058, 0xaee07b78, 0xaee07b7c, -0xaee07b74, 0x3c010001, 0x370821, 0xac2083ac, 0x3c010001, 0x370821, -0x3e00008, 0xa02083a9, 0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f820054, -0x3c030001, 0x8c63500c, 0x24420067, 0x1060000d, 0xaf820058, 0x3c020001, -0x571021, 0x904283a8, 0x10400005, 0x3c030200, 0x3c010001, 0x370821, -0x8001503, 0xa02083a8, 0x8ee20000, 0x431025, 0xaee20000, 0x8f420218, -0x30420100, 0x104000c6, 0x0, 0x8f8200b0, 0x30420004, 0x104000c2, -0x0, 0x3c030001, 0x771821, 0x8c6383c0, 0x8f820104, 0x146200b4, -0x0, 0x3c030001, 0x771821, 0x8c6383c4, 0x8f8200b4, 0x146200ae, -0x0, 0x8f8200b0, 0x3c030080, 0x431024, 0x1040000d, 0x0, -0x8f82011c, 0x34420002, 0xaf82011c, 0x8f8200b0, 0x2403fffb, 0x431024, -0xaf8200b0, 0x8f82011c, 0x2403fffd, 0x431024, 0x80015cc, 0xaf82011c, -0x3c030001, 0x771821, 0x8c6383c0, 0x8f820104, 0x14620082, 0x0, -0x3c030001, 0x771821, 0x8c6383c4, 0x8f8200b4, 0x1462007c, 0x0, -0x3c070001, 0xf73821, 0x8ce783c0, 0x8f8200b0, 0x3c040001, 0x24844630, -0xafa00014, 0xafa20010, 0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900, -0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, -0xaf8200b0, 0xaf830104, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20006, 0x0, 0x8ee201a0, 0x24420001, 0xaee201a0, 0x80015a0, -0x8ee201a0, 0x8f440208, 0x8f45020c, 0x26e20030, 0xac620008, 0x24020400, -0xa462000e, 0x2402000f, 0xac620018, 0xac60001c, 0xac640000, 0xac650004, -0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x0, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007, -0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, -0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0, -0x800158a, 0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, -0x80015a0, 0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, -0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201d4, 0x3c070001, -0xf73821, 0x8ce783c0, 0x24420001, 0xaee201d4, 0x8ee201d4, 0x3c040001, -0x2484463c, 0x80015bd, 0xafa00010, 0x8f820104, 0x3c010001, 0x370821, -0xac2283c0, 0x8f8200b4, 0x3c070001, 0xf73821, 0x8ce783c0, 0x3c040001, -0x24844644, 0x3c010001, 0x370821, 0xac2283c4, 0xafa00010, 0xafa00014, -0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900, 0x80015cc, 0x0, -0x8f820104, 0x3c010001, 0x370821, 0xac2283c0, 0x8f8200b4, 0x3c010001, -0x370821, 0xac2283c4, 0x8ee27264, 0x92e304e4, 0x24420067, 0x14600006, -0xaee27264, 0x8ee27264, 0x8f430234, 0x43102b, 0x1440007b, 0x0, -0x8ee304d4, 0x8ee204e8, 0x14620004, 0x0, 0x92e204e4, 0x50400074, -0xa2e004e4, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, -0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007, -0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8001637, -0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c, -0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000, -0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, -0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, -0x24020012, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, -0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005, -0x0, 0x8001621, 0x0, 0x14a00005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, -0xac800000, 0x8001637, 0x0, 0x8ee24e20, 0x24030040, 0x24420001, -0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, -0xac820004, 0x5600000b, 0x24100001, 0x8ee204d4, 0x3c040001, 0x2484464c, -0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f006, 0x16000003, 0x24020001, 0x8001650, 0xa2e204e4, 0x8ee2016c, -0x24420001, 0xaee2016c, 0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0, -0xaee07264, 0xaee204e8, 0x8ee20e0c, 0x1040006d, 0x0, 0x8f830120, -0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, -0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, -0x8021, 0x24420001, 0xaee201a0, 0x80016ad, 0x8ee201a0, 0x8ee2723c, -0xac62001c, 0x8ee40498, 0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008, -0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, -0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, -0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x8001697, -0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80016ad, -0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600000b, -0x24100001, 0x8ee2723c, 0x3c040001, 0x24844658, 0xafa00014, 0xafa20010, -0x8ee6723c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x56000001, -0xaee00e0c, 0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170, 0x8ee24e14, -0x10400019, 0x0, 0xaee04e14, 0x8f820040, 0x30420001, 0x14400008, -0x0, 0x8f430104, 0x24020001, 0x10620004, 0x0, 0x8f420264, -0x10400006, 0x0, 0x8ee20178, 0x24420001, 0xaee20178, 0x80016da, -0x8ee20178, 0x8f820044, 0x34420004, 0xaf820044, 0x8ee20174, 0x24420001, -0xaee20174, 0x8ee20174, 0x8ee27268, 0x2442ff99, 0xaee27268, 0x8ee27268, -0x1c4002a8, 0x0, 0x8f420238, 0x104002a5, 0x0, 0x8f420080, -0xaee2004c, 0x8f4200c0, 0xaee20048, 0x8f420084, 0xaee20038, 0x8f420084, -0xaee20234, 0x8f420088, 0xaee20238, 0x8f42008c, 0xaee2023c, 0x8f420090, -0xaee20240, 0x8f420094, 0xaee20244, 0x8f420098, 0xaee20248, 0x8f42009c, -0xaee2024c, 0x8f4200a0, 0xaee20250, 0x8f4200a4, 0xaee20254, 0x8f4200a8, -0xaee20258, 0x8f4200ac, 0xaee2025c, 0x8f4200b0, 0xaee20260, 0x8f4200b4, -0xaee20264, 0x8f4200b8, 0xaee20268, 0x8f4200bc, 0x24040001, 0xaee2026c, -0xaee0003c, 0x41080, 0x571021, 0x8ee3003c, 0x8c420234, 0x24840001, -0x621821, 0x2c82000f, 0xaee3003c, 0x1440fff8, 0x41080, 0x8f4200cc, -0xaee20050, 0x8f4200d0, 0xaee20054, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, -0xaee201a0, 0x8001770, 0x8ee201a0, 0x8f440208, 0x8f45020c, 0x26e20030, -0xac620008, 0x24020400, 0xa462000e, 0x2402000f, 0xac620018, 0xac60001c, -0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, -0x14400037, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, -0x10a20005, 0x0, 0x800175a, 0x0, 0x14a00005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x8001770, 0x0, 0x8ee24e20, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, -0x24020001, 0xac820004, 0x12000212, 0x3c020400, 0xafa20018, 0x3c020001, -0x571021, 0x904283a0, 0x1040010b, 0x0, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054, -0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821, -0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x8021, 0x24420001, 0xaee201a0, 0x80017ee, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f8000e, -0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008, -0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24100001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x80017db, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x80017ee, -0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x14620077, -0x3c050009, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023, -0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011, 0x24080012, -0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, -0x800185a, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494, -0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004, -0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24100001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1448001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10470007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001847, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x800185a, -0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac880000, 0xac8a0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x14620003, -0x3c050009, 0x8001977, 0x24100001, 0x3c040001, 0x24844664, 0xafa00010, -0xafa00014, 0x8f860120, 0x8f870124, 0x8001876, 0x34a5f011, 0x3c040001, -0x24844670, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x34a5f010, -0xc002403, 0x8021, 0x8001977, 0x0, 0x3c040001, 0x2484467c, -0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0x8001970, 0x34a5f00f, -0x8ee205f8, 0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, -0x8ee205f8, 0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, -0xac440600, 0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, -0x27683000, 0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, -0x1021, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x80018f2, -0x8ee201a0, 0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, -0x8ee305f8, 0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, -0x318c0, 0x246305fc, 0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, -0xaf880120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, -0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, -0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x80018dc, 0x0, -0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, -0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80018f2, 0x0, -0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x5600000c, 0xaee905f8, -0x3c040001, 0x24844688, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, -0x3c050009, 0xc002403, 0x34a5f000, 0x8001977, 0x0, 0x8f830120, -0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, -0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, -0x8021, 0x24420001, 0xaee201a0, 0x8001959, 0x8ee201a0, 0x8ee205f8, -0xac62001c, 0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, -0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, -0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, -0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x8001943, -0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x8001959, -0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600001d, -0x24100001, 0x3c040001, 0x24844690, 0xafa00010, 0xafa00014, 0x8ee605f8, -0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, -0xaee201ac, 0x8001977, 0x8ee201ac, 0x3c040001, 0x2484469c, 0xafa00014, -0x8ee605f8, 0x8f470228, 0x3c050009, 0x34a5f005, 0xc002403, 0x0, -0x8ee201a8, 0x8021, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x1200000c, -0x24020001, 0x3c010001, 0x370821, 0xa02083a0, 0x8f420238, 0x8ee30154, -0x24630001, 0xaee30154, 0x8ee30154, 0x8001987, 0xaee27268, 0x24020001, -0x3c010001, 0x370821, 0xa02283a0, 0x3c020001, 0x8c42500c, 0x10400187, -0x0, 0x8ee27b74, 0x24430001, 0x284200c9, 0x144001a4, 0xaee37b74, -0x8ee204c4, 0x30420002, 0x14400119, 0xaee07b74, 0x8ee204c4, 0x3c030600, -0x34631000, 0x34420002, 0xaee204c4, 0xafa30018, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054, -0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821, -0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x8021, 0x24420001, 0xaee201a0, 0x8001a10, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f8000e, -0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008, -0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24100001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x80019fd, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001a10, -0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x54620078, -0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023, -0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011, 0x24080012, -0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, -0x8001a7c, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494, -0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004, -0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24100001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1448001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10470007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001a69, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001a7c, -0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac880000, 0xac8a0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022, -0x0, 0x3c040001, 0x24844664, 0xafa00010, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001aa8, 0x0, -0x3c040001, 0x24844670, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, -0xc002403, 0x34a5f010, 0x8001aa8, 0x0, 0x3c040001, 0x2484467c, -0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, -0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20158, 0x24420001, -0xaee20158, 0x8ee20158, 0x8ee204c4, 0x30420001, 0x10400055, 0x0, -0x8f420218, 0x30420080, 0x10400029, 0x0, 0x8f820044, 0x34420040, -0xaf820044, 0x8ee27b6c, 0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000, -0x2407ffff, 0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b, -0x0, 0x8ee27b70, 0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021, -0x461024, 0x14440003, 0x671824, 0x1065000b, 0x0, 0x8ee200c0, -0x8ee300c4, 0x8ee400e0, 0x8ee500e4, 0xaee37b6c, 0xaee57b70, 0x8f820044, -0x38420020, 0x8001b33, 0xaf820044, 0x8f820044, 0x2403ffdf, 0x431024, -0x8001b33, 0xaf820044, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, -0x8ee27b6c, 0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000, 0x2407ffff, -0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0, -0x8ee27b70, 0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021, 0x461024, -0x14440003, 0x671824, 0x1065000b, 0x0, 0x8ee200c0, 0x8ee300c4, -0x8ee400e0, 0x8ee500e4, 0xaee37b6c, 0xaee57b70, 0x8f820044, 0x38420040, -0x8001b33, 0xaf820044, 0x8f820044, 0x34420040, 0x8001b33, 0xaf820044, -0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b7c, 0x24430001, 0x28420015, -0x14400028, 0xaee37b7c, 0x8f820044, 0x38420020, 0xaf820044, 0x8001b33, -0xaee07b7c, 0x8ee204c4, 0x30420001, 0x10400011, 0x0, 0x8f420218, -0x30420080, 0x10400009, 0x0, 0x8f820044, 0x34420020, 0xaf820044, -0x8f820044, 0x2403ffbf, 0x431024, 0x8001b31, 0xaf820044, 0x8f820044, -0x34420060, 0x8001b31, 0xaf820044, 0x8f820044, 0x34420040, 0xaf820044, -0x8ee27b78, 0x24430001, 0x28421389, 0x14400005, 0xaee37b78, 0x8f820044, -0x38420020, 0xaf820044, 0xaee07b78, 0xc00457c, 0x0, 0x8fbf0024, -0x8fb00020, 0x3e00008, 0x27bd0028, 0x0, 0x27bdffb8, 0xafbf0044, -0xafb60040, 0xafb5003c, 0xafb40038, 0xafb30034, 0xafb20030, 0xafb1002c, -0xafb00028, 0x8f960064, 0x32c20004, 0x1040000c, 0x24020004, 0xaf820064, -0x8f420114, 0xaee204d0, 0x8f820060, 0x34420008, 0xaf820060, 0x8ee20168, -0x24420001, 0xaee20168, 0x80022ee, 0x8ee20168, 0x32c20001, 0x10400004, -0x24020001, 0xaf820064, 0x80022ee, 0x0, 0x32c20002, 0x1440000c, -0x3c050003, 0x3c040001, 0x24844714, 0x34a50001, 0x2c03021, 0x3821, -0xafa00010, 0xc002403, 0xafa00014, 0x2402fff8, 0x80022ee, 0xaf820064, -0x8f43022c, 0x8f42010c, 0x5062000c, 0xafa00010, 0x8f42022c, 0x21080, -0x5a1021, 0x8c420300, 0xafa20020, 0x8f42022c, 0x24070001, 0x24420001, -0x3042003f, 0x8001b7c, 0xaf42022c, 0x3c040001, 0x24844720, 0xafa00014, -0x8f46022c, 0x8f47010c, 0x3c050003, 0xc002403, 0x34a5f01f, 0x3821, -0x14e00003, 0x0, 0x80022e7, 0xaf960064, 0x93a20020, 0x2443ffff, -0x2c620011, 0x10400656, 0x31080, 0x3c010001, 0x220821, 0x8c2247d8, -0x400008, 0x0, 0x8fa20020, 0x30420fff, 0xaee20dfc, 0x8f820060, -0x34420200, 0xaf820060, 0x8ee20118, 0x24420001, 0xaee20118, 0x80022e2, -0x8ee20118, 0x8fa20020, 0x24030001, 0x3c010001, 0x370821, 0xa02383a1, -0x30420fff, 0xaee25228, 0x8f820060, 0x34420100, 0xaf820060, 0x8ee20144, -0x24420001, 0xaee20144, 0x80022e2, 0x8ee20144, 0x8fa20020, 0x21200, -0x22502, 0x24020001, 0x10820005, 0x24020002, 0x10820009, 0x2402fffe, -0x8001bc5, 0xafa00010, 0x8ee204c4, 0xaee40070, 0xaee40074, 0x34420001, -0x8001bb9, 0xaee204c4, 0x8ee304c4, 0xaee40070, 0xaee40074, 0x621824, -0xaee304c4, 0x8f840054, 0x41442, 0x41c82, 0x431021, 0x41cc2, -0x431023, 0x41d02, 0x431021, 0x41d42, 0x431023, 0x8001bcc, -0xaee20078, 0x3c040001, 0x2484472c, 0xafa00014, 0x8fa60020, 0x3c050003, -0xc002403, 0x34a50004, 0x8ee20110, 0x24420001, 0xaee20110, 0x80022e2, -0x8ee20110, 0x27440212, 0xc0022f8, 0x24050006, 0x3049001f, 0x920c0, -0x2e41021, 0x9442726c, 0x30424000, 0x1040000a, 0x971021, 0x97430212, -0xa443726e, 0x8f430214, 0x971021, 0xac437270, 0x2e41821, 0x34028000, -0x8001c75, 0xa462726c, 0x9443726e, 0x97420212, 0x14620006, 0x2e41021, -0x971021, 0x8c437270, 0x8f420214, 0x1062009f, 0x2e41021, 0x9442726c, -0x30428000, 0x1040002a, 0x2406ffff, 0x2021, 0x410c0, 0x2e21021, -0x9442736c, 0x30424000, 0x54400005, 0x803021, 0x24840001, 0x2c820080, -0x1440fff8, 0x410c0, 0x4c10010, 0x618c0, 0x610c0, 0x571821, -0x8c63736c, 0x571021, 0xafa30010, 0x8c427370, 0x3c040001, 0x24844738, -0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a50013, 0x8001c8c, -0x3c020800, 0x97440212, 0x771021, 0xa444736e, 0x8f440214, 0x771021, -0x2e31821, 0xac447370, 0x34028000, 0xa462736c, 0x910c0, 0x2e21021, -0x8001c75, 0xa446726c, 0x2e41021, 0x9445726c, 0x8001c2a, 0x510c0, -0x9443736e, 0x97420212, 0x14620006, 0x510c0, 0x971021, 0x8c437370, -0x8f420214, 0x10620065, 0x510c0, 0x2e21021, 0x9445736c, 0x510c0, -0x2e21021, 0x9442736c, 0x30428000, 0x1040fff0, 0x971021, 0x520c0, -0x971021, 0x9443736e, 0x97420212, 0x14620006, 0x2406ffff, 0x971021, -0x8c437370, 0x8f420214, 0x10620053, 0x3c020800, 0x2021, 0x410c0, -0x2e21021, 0x9442736c, 0x30424000, 0x54400005, 0x803021, 0x24840001, -0x2c820080, 0x1440fff8, 0x410c0, 0x4c10023, 0x618c0, 0x910c0, -0x571821, 0x8c63726c, 0x571021, 0xafa30010, 0x8c427270, 0x3c040001, -0x24844744, 0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a5f017, -0x8001c8c, 0x3c020800, 0x8f430210, 0xb71021, 0xac43776c, 0x8f430214, -0xb71021, 0xac437770, 0x3c020001, 0x571021, 0x8c4283a4, 0x24420001, -0x3c010001, 0x370821, 0xac2283a4, 0x3c030001, 0x771821, 0x8c6383a4, -0x2e51021, 0x8001c7e, 0xa443776c, 0x97440212, 0x771021, 0xa444736e, -0x8f440214, 0x771021, 0x2e31821, 0xac447370, 0x34028000, 0xa462736c, -0x510c0, 0x2e21021, 0xa446736c, 0x2021, 0x428c0, 0x2e51021, -0x9442776c, 0x1040ffdc, 0x24840001, 0x2c820080, 0x5440fffa, 0x428c0, -0x92e204c8, 0x10400006, 0x24020001, 0x8ee304cc, 0x1221004, 0x621825, -0x8001c8b, 0xaee304cc, 0x8f830228, 0x24020001, 0x1221004, 0x621825, -0xaf830228, 0x3c020800, 0x34421000, 0xafa20018, 0x8ee205f8, 0x8f430228, -0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0, -0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054, -0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821, -0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120, -0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128, -0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0, -0x3821, 0x24420001, 0xaee201a0, 0x8001d04, 0x8ee201a0, 0x8ee405f8, -0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f0000e, -0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008, -0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24070001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001cf1, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001d04, -0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x54620078, -0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023, -0x2c420033, 0x10400061, 0x5821, 0x240e0008, 0x240d0011, 0x240a0012, -0x24080040, 0x240c0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20007, 0x0, 0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, -0x8001d70, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494, -0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, 0xac640000, 0xac650004, -0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24070001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144a001f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10480007, -0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001d5d, -0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, -0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001d70, -0x0, 0x8ee24e20, 0x24420001, 0x50480003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023, -0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022, -0x0, 0x3c040001, 0x24844750, 0xafa00010, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001d9c, 0x0, -0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, -0xc002403, 0x34a5f010, 0x8001d9c, 0x0, 0x3c040001, 0x24844768, -0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, -0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20124, 0x24420001, -0xaee20124, 0x8001f93, 0x8ee20124, 0x27440212, 0xc0022f8, 0x24050006, -0x3049001f, 0x928c0, 0x2e51021, 0x9442726c, 0x30428000, 0x1040002f, -0x2e51021, 0x9442726c, 0x30424000, 0x1440001c, 0xb71021, 0x9443726e, -0x97420212, 0x14620018, 0xb71021, 0x8c437270, 0x8f420214, 0x54620016, -0xafa20010, 0x92e204c8, 0x10400007, 0x24020001, 0x8ee304cc, 0x1221004, -0x21027, 0x621824, 0x8001dc5, 0xaee304cc, 0x8f830228, 0x1221004, -0x21027, 0x621824, 0xaf830228, 0x910c0, 0x2e21821, 0x3402c000, -0x8001e4a, 0xa462726c, 0x8f420214, 0xafa20010, 0x910c0, 0x571021, -0x8c42726c, 0x3c040001, 0x24844774, 0x3c050003, 0xafa20014, 0x8f470210, -0x34a5f01c, 0xc002403, 0x1203021, 0x8001e7f, 0x3c020800, 0xb71021, -0x9443726e, 0x97420212, 0x14620019, 0x918c0, 0xb71021, 0x8c437270, -0x8f420214, 0x14620014, 0x918c0, 0x2e51021, 0x9447726c, 0x720c0, -0x971021, 0x9443736e, 0xb71021, 0xa443726e, 0x971021, 0x8c437370, -0xb71021, 0xac437270, 0x2e41021, 0x9443736c, 0x2e51021, 0xa443726c, -0x2e41821, 0x3402c000, 0x8001e4a, 0xa462736c, 0x2e31021, 0x9447726c, -0x3021, 0x720c0, 0x2e41021, 0x9442736c, 0x4021, 0x30428000, -0x14400025, 0xe02821, 0x605021, 0x340bc000, 0x971021, 0x9443736e, -0x97420212, 0x54620015, 0xe02821, 0x971021, 0x8c437370, 0x8f420214, -0x54620010, 0xe02821, 0x11000006, 0x2e41021, 0x9443736c, 0x510c0, -0x2e21021, 0x8001e16, 0xa443736c, 0x9443736c, 0x2ea1021, 0xa443726c, -0x710c0, 0x2e21021, 0xa44b736c, 0x8001e24, 0x24060001, 0x510c0, -0x2e21021, 0x9447736c, 0x720c0, 0x2e41021, 0x9442736c, 0x30428000, -0x1040ffdf, 0x25080001, 0x30c200ff, 0x14400025, 0x2021, 0x720c0, -0x971021, 0x9443736e, 0x97420212, 0x1462000f, 0x910c0, 0x971021, -0x8c437370, 0x8f420214, 0x1462000a, 0x910c0, 0x2e41821, 0x3402c000, -0x15000015, 0xa462736c, 0x910c0, 0x2e21821, 0x34028000, 0x8001e4a, -0xa462726c, 0x571021, 0x8c42726c, 0x3c040001, 0x24844780, 0x3c050003, -0xafa20010, 0x710c0, 0x571021, 0x8c42736c, 0x34a5001e, 0x1203021, -0xc002403, 0xafa20014, 0x8001e7f, 0x3c020800, 0x2021, 0x428c0, -0xb71021, 0x9443776e, 0x97420212, 0x5462002b, 0x24840001, 0xb71021, -0x8c437770, 0x8f420214, 0x54620026, 0x24840001, 0x3c020001, 0x571021, -0x8c4283a4, 0x2442ffff, 0x3c010001, 0x370821, 0xac2283a4, 0x3c020001, -0x571021, 0x8c4283a4, 0x809021, 0x242102b, 0x1040000e, 0x24b1776c, -0x24b07774, 0x2f02021, 0x2f12821, 0xc002490, 0x24060008, 0x26310008, -0x3c020001, 0x571021, 0x8c4283a4, 0x26520001, 0x242102b, 0x1440fff5, -0x26100008, 0x3c040001, 0x972021, 0x8c8483a4, 0x24050008, 0x420c0, -0x2484776c, 0xc002488, 0x2e42021, 0x8001e7f, 0x3c020800, 0x2c820080, -0x1440ffcf, 0x428c0, 0x3c020800, 0x34422000, 0xafa20018, 0x8ee205f8, -0x8f430228, 0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, -0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, -0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, -0x5821, 0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, -0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, -0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, -0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8001ef7, 0x8ee201a0, -0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, -0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, -0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, -0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8001ee4, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, -0x8001ef7, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, 0x8f820054, -0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, -0x54620078, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, -0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240e0008, 0x240d0011, -0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821, 0x24420001, -0xaee201a0, 0x8001f63, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, -0x8ee50494, 0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, 0xac640000, -0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, -0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x144a001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x10480007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8001f50, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, -0x8001f63, 0x0, 0x8ee24e20, 0x24420001, 0x50480003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, -0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, -0x10620022, 0x0, 0x3c040001, 0x24844750, 0xafa00010, 0xafa00014, -0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001f8f, -0x0, 0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120, 0x8f870124, -0x3c050009, 0xc002403, 0x34a5f010, 0x8001f8f, 0x0, 0x3c040001, -0x24844768, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20128, -0x24420001, 0xaee20128, 0x8ee20128, 0x8ee20160, 0x24420001, 0xaee20160, -0x80022e2, 0x8ee20160, 0x8fa20020, 0x21200, 0x21d02, 0x24020001, -0x10620005, 0x24020002, 0x1062000d, 0x0, 0x8001fb3, 0xafa00010, -0x92e204c8, 0x14400006, 0x24020001, 0x8f820228, 0xaee204cc, 0x2402ffff, -0xaf820228, 0x24020001, 0x8001fba, 0xa2e204c8, 0x92e204c8, 0x5040000c, -0xa2e004c8, 0x8ee204cc, 0xaf820228, 0x8001fba, 0xa2e004c8, 0x3c040001, -0x24844788, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f009, -0x8ee2013c, 0x24420001, 0xaee2013c, 0x80022e2, 0x8ee2013c, 0x8fa20020, -0x21200, 0x22502, 0x24020001, 0x10820005, 0x24020002, 0x1082000f, -0x0, 0x8001fdf, 0xafa00010, 0x8f820220, 0x3c0308ff, 0x3463ffff, -0x431024, 0x34420008, 0xaf820220, 0x24020001, 0x3c010001, 0x370821, -0xa02283a2, 0x8001fe6, 0xaee40108, 0x8f820220, 0x3c0308ff, 0x3463fff7, -0x431024, 0xaf820220, 0x3c010001, 0x370821, 0xa02083a2, 0x8001fe6, -0xaee40108, 0x3c040001, 0x24844794, 0xafa00014, 0x8fa60020, 0x3c050003, -0xc002403, 0x34a5f00a, 0x8ee2012c, 0x24420001, 0xaee2012c, 0x80022e2, -0x8ee2012c, 0x8fa20020, 0x21200, 0x21d02, 0x24020001, 0x10620005, -0x24020002, 0x1062000e, 0x0, 0x800200d, 0xafa00010, 0x8f820220, -0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24020001, -0x3c010001, 0x370821, 0x8002014, 0xa02283a3, 0x3c020001, 0x571021, -0x904283a2, 0x3c010001, 0x370821, 0x1440000e, 0xa02083a3, 0x8f820220, -0x3c0308ff, 0x3463fff7, 0x431024, 0x8002014, 0xaf820220, 0x3c040001, -0x248447a0, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00b, -0x8ee20114, 0x24420001, 0xaee20114, 0x80022e2, 0x8ee20114, 0x27840208, -0x27450200, 0xc00249a, 0x24060008, 0x26e40094, 0x27450200, 0xc00249a, -0x24060008, 0x8ee20134, 0x24420001, 0xaee20134, 0x80022e2, 0x8ee20134, -0x8f460248, 0x24040001, 0xc004eac, 0x24050004, 0x8ee20130, 0x24420001, -0xaee20130, 0x80022e2, 0x8ee20130, 0x8ef301c4, 0x8ef401c8, 0x8ef501cc, -0x8ee20140, 0x26e40030, 0x24420001, 0xaee20140, 0x8ef00140, 0x8ef10074, -0x8ef20070, 0xc002488, 0x24050400, 0xaef301c4, 0xaef401c8, 0xaef501cc, -0xaef00140, 0xaef10074, 0xaef20070, 0x8f42025c, 0x26e40094, 0xaee20060, -0x8f420260, 0x27450200, 0x24060008, 0xaee20068, 0x24020006, 0xc00249a, -0xaee20064, 0x3c023b9a, 0x3442ca00, 0xaee2006c, 0x240203e8, 0x24040002, -0x24030001, 0xaee20104, 0xaee40100, 0xaee3010c, 0x8f820220, 0x30420008, -0x10400004, 0x0, 0xaee30108, 0x800205d, 0x2021, 0xaee40108, -0x2021, 0x3c030001, 0x641821, 0x90634f60, 0x2e41021, 0x24840001, -0xa043009c, 0x2c82000f, 0x1440fff8, 0x0, 0x8f820040, 0x2e41821, -0x24840001, 0x21702, 0x24420030, 0xa062009c, 0x2e41021, 0x80022e2, -0xa040009c, 0x240a0400, 0x24090040, 0x24080001, 0x8f830100, 0x27623000, -0x24660020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004, -0x0, 0x8f820104, 0x14c20007, 0x26e20030, 0x8ee201a4, 0x3821, -0x24420001, 0xaee201a4, 0x800209f, 0x8ee201a4, 0x8ee404a8, 0x8ee504ac, -0xac620008, 0xa46a000e, 0xac600018, 0xac60001c, 0xac640000, 0xac650004, -0x8ee204bc, 0xac620010, 0xaf860100, 0x92e204dc, 0x1440000e, 0x24070001, -0x8ee24e18, 0x24420001, 0x50490003, 0x1021, 0x8ee24e18, 0x24420001, -0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21021, 0xac400000, -0xac480004, 0x10e0ffd2, 0x0, 0x8ee20148, 0x24420001, 0xaee20148, -0x80022e2, 0x8ee20148, 0x3c020900, 0xaee05228, 0xaee0522c, 0xaee05230, -0xaee05234, 0xaee001c8, 0x3c010001, 0x370821, 0xa02083a1, 0xafa20018, -0x8ee205f8, 0x8f430228, 0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, -0x8ee205f8, 0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, -0xac440600, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033, -0x1040006a, 0x5821, 0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, -0x240e0001, 0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, -0x27683000, 0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, -0x1021, 0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8002126, -0x8ee201a0, 0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, -0x8ee205f8, 0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, -0x2e21021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, -0x14400033, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c820000, 0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, -0x24420001, 0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, -0x0, 0x8002113, 0x0, 0x14600005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, -0xac800000, 0x8002126, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, -0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, -0x24020001, 0x54620078, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, -0x24690032, 0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240e0008, -0x240d0011, 0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, 0x27623800, -0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, -0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821, -0x24420001, 0xaee201a0, 0x8002192, 0x8ee201a0, 0x8ee205f8, 0xac62001c, -0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, -0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, -0x14400033, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c820000, 0x144a001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, -0x24420001, 0x10480007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, -0x0, 0x800217f, 0x0, 0x14600005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, -0xac800000, 0x8002192, 0x0, 0x8ee24e20, 0x24420001, 0x50480003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, -0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, -0x24020001, 0x10620022, 0x0, 0x3c040001, 0x24844750, 0xafa00010, -0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, -0x80021be, 0x0, 0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80021be, 0x0, -0x3c040001, 0x24844768, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, -0x8ee20120, 0x24420001, 0xaee20120, 0x8ee20120, 0x8ee20164, 0x24420001, -0xaee20164, 0x80022e2, 0x8ee20164, 0x8f42025c, 0x26e40094, 0xaee20060, -0x8f420260, 0x27450200, 0x24060008, 0xc00249a, 0xaee20068, 0x8f820220, -0x30420008, 0x14400002, 0x24020001, 0x24020002, 0xaee20108, 0x8ee2011c, -0x24420001, 0xaee2011c, 0x80022e2, 0x8ee2011c, 0x3c040001, 0x248447ac, -0xafa00010, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00f, -0x93a20020, 0x3c030700, 0x34631000, 0x431025, 0xafa20018, 0x8ee205f8, -0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, -0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, -0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, -0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, -0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8002257, 0x8ee201a0, -0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, -0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, -0x246305fc, 0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, -0x92e24e10, 0x14400037, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, -0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, -0x24420001, 0x10a20005, 0x0, 0x8002241, 0x0, 0x14a00005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8002257, 0x0, 0x8ee24e20, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, -0xac820000, 0x24020001, 0xac820004, 0x54e0000c, 0xaee905f8, 0x3c040001, -0x248447b4, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f000, 0x80022da, 0x0, 0x8f830120, 0x27623800, -0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, -0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821, -0x24420001, 0xaee201a0, 0x80022be, 0x8ee201a0, 0x8ee205f8, 0xac62001c, -0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, -0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, -0xaf860120, 0x92e24e10, 0x14400037, 0x24070001, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, -0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, -0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x80022a8, 0x0, -0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, -0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80022be, 0x0, -0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, -0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x14e0001b, 0x0, -0x3c040001, 0x248447bc, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, -0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, -0x80022da, 0x8ee201ac, 0x3c040001, 0x248447c8, 0xafa00014, 0x8ee605f8, -0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, -0xaee201a8, 0x8ee201a8, 0x8ee2014c, 0x24420001, 0xaee2014c, 0x8ee2014c, -0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c, 0x8f43022c, 0x8f42010c, -0x14620009, 0x24020002, 0xaf820064, 0x8f820064, 0x14400005, 0x0, -0x8f43022c, 0x8f42010c, 0x1462f877, 0x0, 0x8fbf0044, 0x8fb60040, -0x8fb5003c, 0x8fb40038, 0x8fb30034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, -0x3e00008, 0x27bd0048, 0x27bdfff8, 0x2408ffff, 0x10a00014, 0x4821, -0x3c0aedb8, 0x354a8320, 0x90870000, 0x24840001, 0x3021, 0x1071026, -0x30420001, 0x10400002, 0x81842, 0x6a1826, 0x604021, 0x24c60001, -0x2cc20008, 0x1440fff7, 0x73842, 0x25290001, 0x125102b, 0x1440fff0, -0x0, 0x1001021, 0x3e00008, 0x27bd0008, 0x0, 0x0, -0x27bdffe8, 0x27642800, 0xafbf0010, 0xc002488, 0x24051000, 0x24020021, -0xaf800100, 0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114, 0xaf800118, -0xaf800120, 0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134, 0xaf800138, -0xaee04e18, 0xaee04e1c, 0xaee04e20, 0xaee04e24, 0xaf82011c, 0x8f420218, -0x30420040, 0x10400004, 0x0, 0x8f82011c, 0x34420004, 0xaf82011c, -0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0xafbf0018, 0x8f820104, -0xafa20010, 0x8f820100, 0x3c050002, 0xafa20014, 0x8f8600b0, 0x8f87011c, -0x3c040001, 0x2484487c, 0xc002403, 0x34a5f000, 0x8f8300b0, 0x3c027f00, -0x621824, 0x3c020400, 0x1062002b, 0x43102b, 0x14400008, 0x3c022000, -0x3c020100, 0x10620026, 0x3c020200, 0x10620013, 0x0, 0x8002372, -0x0, 0x1062000a, 0x43102b, 0x1040001e, 0x3c024000, 0x1462001c, -0x0, 0x8ee2018c, 0x24420001, 0xaee2018c, 0x8002372, 0x8ee2018c, -0x8ee20188, 0x24420001, 0xaee20188, 0x8002372, 0x8ee20188, 0x8f82011c, -0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0, -0xaf830104, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee2019c, -0x24420001, 0xaee2019c, 0x8002375, 0x8ee2019c, 0x8f8200b0, 0x34420001, -0xaf8200b0, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf001c, -0xafb00018, 0x8f820120, 0xafa20010, 0x8f820124, 0x3c050001, 0xafa20014, -0x8f8600a0, 0x8f87011c, 0x3c040001, 0x24844888, 0xc002403, 0x34a5f000, -0x8f8300a0, 0x3c027f00, 0x621824, 0x3c020400, 0x10620055, 0x8021, -0x43102b, 0x14400008, 0x3c042000, 0x3c020100, 0x1062004f, 0x3c020200, -0x1062003c, 0x0, 0x80023e0, 0x0, 0x10640005, 0x83102b, -0x10400047, 0x3c024000, 0x14620045, 0x0, 0x8f8200a0, 0x441024, -0x10400006, 0x0, 0x8ee20190, 0x24420001, 0xaee20190, 0x80023a9, -0x8ee20190, 0x8ee20194, 0x24420001, 0xaee20194, 0x8ee20194, 0x8f82011c, -0x34420002, 0xaf82011c, 0x8f82011c, 0x30420200, 0x1040001b, 0x0, -0x8f8300a0, 0x8f840124, 0x8f8200ac, 0x14400007, 0x24020001, 0x3c020001, -0x3442f000, 0x621024, 0x50400001, 0x24100001, 0x24020001, 0x1200000d, -0xaf8200a0, 0x8f820124, 0x2442ffe0, 0xaf820124, 0x8f820124, 0x8f820124, -0x27633000, 0x43102b, 0x10400005, 0x276237e0, 0xaf820124, 0x80023ca, -0x0, 0xaf840124, 0x8f82011c, 0x2403fffd, 0x431024, 0x80023e3, -0xaf82011c, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, -0x34420001, 0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd, 0x431024, -0xaf82011c, 0x8ee20198, 0x24420001, 0xaee20198, 0x80023e3, 0x8ee20198, -0x8f8200a0, 0x34420001, 0xaf8200a0, 0x8fbf001c, 0x8fb00018, 0x3e00008, -0x27bd0020, 0x0, 0x3c020001, 0x8c424f88, 0x27bdffe8, 0xafbf0014, -0x14400012, 0xafb00010, 0x3c100001, 0x261050c0, 0x2002021, 0xc002488, -0x24052000, 0x26021fe0, 0x3c010001, 0xac225094, 0x3c010001, 0xac225090, -0xaf420250, 0x24022000, 0xaf500254, 0xaf420258, 0x24020001, 0x3c010001, -0xac224f88, 0x8fbf0014, 0x8fb00010, 0x3e00008, 0x27bd0018, 0x3c030001, -0x8c635094, 0x8c820000, 0x8fa80010, 0x8fa90014, 0xac620000, 0x3c020001, -0x8c425094, 0x8c830004, 0xac430004, 0xac450008, 0x8f840054, 0x2443ffe0, -0xac460010, 0xac470014, 0xac480018, 0xac49001c, 0x3c010001, 0xac235094, -0xac44000c, 0x3c020001, 0x244250c0, 0x62182b, 0x10600005, 0x0, -0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094, -0x3c020001, 0x8c424f70, 0xac620000, 0x3c030001, 0x8c635094, 0x3c020001, -0x8c424f70, 0xac620004, 0x3e00008, 0xaf430250, 0x3c030001, 0x8c635094, -0x3c020001, 0x8c424f70, 0x27bdffd0, 0xafb40020, 0x8fb40040, 0xafb00010, -0x808021, 0xafb50024, 0x8fb50044, 0x8fa40048, 0xafb10014, 0xa08821, -0xafbf0028, 0xafb3001c, 0xafb20018, 0xac620000, 0x3c050001, 0x8ca55094, -0x3c020001, 0x8c424f70, 0xc09021, 0xe09821, 0x10800006, 0xaca20004, -0x24a50008, 0xc002490, 0x24060018, 0x800244e, 0x0, 0x24a40008, -0xc002488, 0x24050018, 0x3c020001, 0x8c425094, 0x3c050001, 0x24a550c0, -0x2442ffe0, 0x3c010001, 0xac225094, 0x45102b, 0x10400005, 0x0, -0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094, -0x8e020000, 0xac620000, 0x3c030001, 0x8c635094, 0x8e020004, 0xac620004, -0xac710008, 0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225094, 0x45102b, -0xac720010, 0xac730014, 0xac740018, 0xac75001c, 0x10400005, 0xac64000c, -0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094, -0x3c020001, 0x8c424f70, 0xac620000, 0x3c030001, 0x8c635094, 0x3c020001, -0x8c424f70, 0xac620004, 0xaf430250, 0x8fbf0028, 0x8fb50024, 0x8fb40020, -0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0030, -0x10a00005, 0x0, 0xac800000, 0x24a5fffc, 0x14a0fffd, 0x24840004, -0x3e00008, 0x0, 0x10c00007, 0x0, 0x8c820000, 0x24840004, -0x24c6fffc, 0xaca20000, 0x14c0fffb, 0x24a50004, 0x3e00008, 0x0, -0x10c00007, 0x0, 0x8ca20000, 0x24a50004, 0x24c6fffc, 0xac820000, -0x14c0fffb, 0x24840004, 0x3e00008, 0x0, 0x3e00008, 0x0, -0x27bdffd8, 0xafbf0020, 0x8ee304d4, 0x8ee204d0, 0x10620436, 0x0, -0x8ee204d4, 0x8ee304ec, 0x21100, 0x626021, 0x95870008, 0x8d8a0000, -0x8d8b0004, 0x958d000a, 0x8ee2724c, 0x8ee3725c, 0x30e4ffff, 0x441021, -0x62182b, 0x10600015, 0x31a20004, 0x8f8200d8, 0x8ee37248, 0x431023, -0xaee2725c, 0x8ee2725c, 0x1c400003, 0x3c030001, 0x431021, 0xaee2725c, -0x8ee2724c, 0x8ee3725c, 0x441021, 0x62182b, 0x10600006, 0x31a20004, -0x8ee201b4, 0x24420001, 0xaee201b4, 0x80028e1, 0x8ee201b4, 0x10400240, -0x31a20200, 0x1040014d, 0x4821, 0x96e2045a, 0x30420010, 0x10400149, -0x0, 0x8f840100, 0x27623000, 0x24850020, 0xa2102b, 0x50400001, -0x27652800, 0x8f820108, 0x10a20004, 0x0, 0x8f820104, 0x14a20006, -0x2402000c, 0x8ee201a4, 0x24420001, 0xaee201a4, 0x800252c, 0x8ee201a4, -0xac8a0000, 0xac8b0004, 0x8ee37254, 0x24060005, 0xa482000e, 0xac860018, -0xac830008, 0x8ee204d4, 0xac82001c, 0x8ee204b8, 0xac820010, 0xaf850100, -0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28, -0x2e22021, 0x8c820000, 0x1446001f, 0x0, 0x8ee34e18, 0x8ee24e1c, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, -0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001, -0x10a20005, 0x0, 0x8002516, 0x0, 0x14a00005, 0x0, -0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x800252c, 0x0, 0x8ee24e18, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, -0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000, -0x24020001, 0xac820004, 0x1520000a, 0x3c040001, 0xafab0010, 0x8ee27254, -0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be, -0x34a5f114, 0x8ee27254, 0x34843800, 0x3641821, 0x24420010, 0x43102b, -0x14400073, 0x0, 0x8ee27254, 0x24480010, 0x3641021, 0x102102b, -0x14400002, 0x3c02ffff, 0x1024021, 0x8f850100, 0x27623000, 0x24a60020, -0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004, 0x0, -0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821, 0x24420001, -0xaee201a4, 0x80025a0, 0x8ee201a4, 0x2c64000c, 0x1441021, 0xaca20000, -0xaca30004, 0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca80008, 0xaca20018, -0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002, 0x431025, 0xaca20010, -0xaf860100, 0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18, 0x210c0, -0x24424e28, 0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0, -0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, -0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x800258a, 0x0, -0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, -0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80025a0, 0x0, -0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, -0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, -0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x2508fffc, -0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, -0x8ee604d4, 0x80028be, 0x34a5f125, 0x34028100, 0xa5020000, 0x9582000e, -0x800261d, 0xa5020002, 0x8f850100, 0x27623000, 0x24a60020, 0xc2102b, -0x50400001, 0x27662800, 0x8f820108, 0x10c20004, 0x0, 0x8f820104, -0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821, 0x24420001, 0xaee201a4, -0x800260d, 0x8ee201a4, 0x2c64000c, 0x1441021, 0xaca20000, 0xaca30004, -0x8ee37254, 0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca20018, 0x24630010, -0xaca30008, 0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002, 0x431025, -0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18, -0x210c0, 0x24424e28, 0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, -0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, -0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x80025f7, -0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108, -0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x800260d, -0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021, -0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, -0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, -0x34028100, 0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, -0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f015, 0x8ee37254, 0xa462000c, -0x8ee37254, 0x9582000e, 0xa462000e, 0x8002681, 0x24e70004, 0x8f840100, -0x27623000, 0x24850020, 0xa2102b, 0x50400001, 0x27652800, 0x8f820108, -0x10a20004, 0x0, 0x8f820104, 0x14a20007, 0x24020006, 0x8ee201a4, -0x4821, 0x24420001, 0xaee201a4, 0x8002677, 0x8ee201a4, 0xac8a0000, -0xac8b0004, 0x8ee37254, 0xa487000e, 0xac820018, 0xac830008, 0x8ee204d4, -0xac82001c, 0x8ee204b8, 0x3c030002, 0x431025, 0xac820010, 0xaf850100, -0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28, -0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0, 0x8ee34e18, -0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, -0x24420001, 0x10a20005, 0x0, 0x8002661, 0x0, 0x14a00005, -0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8002677, 0x0, 0x8ee24e18, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, -0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, -0xac820000, 0x24020001, 0xac820004, 0x15200009, 0x3c050004, 0xafab0010, -0x8ee27254, 0x3c040001, 0x24844af0, 0xafa20014, 0x8ee604d4, 0x80028be, -0x34a5f004, 0x8ee2724c, 0x30e7ffff, 0x471021, 0xaee2724c, 0x8ee204d4, -0x8ee304ec, 0x8ee47248, 0x21100, 0x431021, 0xac44000c, 0x8ee27248, -0xafa20018, 0x8ee3724c, 0xafa3001c, 0x8ee2724c, 0x2c42003c, 0x10400004, -0x24620001, 0x2403fffe, 0x431024, 0xafa2001c, 0x8ee27254, 0x3c060001, -0x34c63800, 0x8ee3724c, 0x2405fff8, 0x471021, 0x24420007, 0x451024, -0x24630007, 0xaee27248, 0x8ee2725c, 0x8ee47248, 0x651824, 0x431023, -0xaee2725c, 0x3661021, 0x82202b, 0x14800004, 0x3c03ffff, 0x8ee27248, -0x431021, 0xaee27248, 0x8ee27248, 0xaee27254, 0x8f8200f0, 0x24470008, -0x27621800, 0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4, 0x14e20007, -0x0, 0x8ee201b0, 0x4821, 0x24420001, 0xaee201b0, 0x80026c4, -0x8ee201b0, 0x8f8200f0, 0x24090001, 0x8fa30018, 0x8fa4001c, 0xac430000, -0xac440004, 0xaf8700f0, 0x15200012, 0xd1142, 0x8f8200f0, 0xafa20010, -0x8f8200f4, 0x3c040001, 0x24844afc, 0xafa20014, 0x8fa60018, 0x8fa7001c, -0x3c050004, 0xc002403, 0x34a5f005, 0x8ee20088, 0x24420001, 0xaee20088, -0x8ee20088, 0x80028d3, 0xaee0724c, 0x30430003, 0x24020002, 0x10620016, -0x28620003, 0x10400005, 0x24020001, 0x10620008, 0x0, 0x8002703, -0x0, 0x24020003, 0x10620017, 0x0, 0x8002703, 0x0, -0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001, 0x441021, 0xaee200e8, -0xaee300ec, 0x8ee200e8, 0x8002703, 0x8ee300ec, 0x8ee200f0, 0x8ee300f4, -0x24630001, 0x2c640001, 0x441021, 0xaee200f0, 0xaee300f4, 0x8ee200f0, -0x8002703, 0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001, 0x2c640001, -0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8, 0x8ee300fc, 0x8ee2724c, -0x8ee400e0, 0x8ee500e4, 0x401821, 0x1021, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xaee400e0, 0xaee500e4, 0x80028d3, 0xaee0724c, -0x30e2ffff, 0x104001c1, 0x31a20200, 0x1040014d, 0x4821, 0x96e2045a, -0x30420010, 0x10400149, 0x0, 0x8f840100, 0x27623000, 0x24850020, -0xa2102b, 0x50400001, 0x27652800, 0x8f820108, 0x10a20004, 0x0, -0x8f820104, 0x14a20006, 0x2402000c, 0x8ee201a4, 0x24420001, 0xaee201a4, -0x800276e, 0x8ee201a4, 0xac8a0000, 0xac8b0004, 0x8ee37254, 0x24060005, -0xa482000e, 0xac860018, 0xac830008, 0x8ee204d4, 0xac82001c, 0x8ee204b8, -0xac820010, 0xaf850100, 0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18, -0x210c0, 0x24424e28, 0x2e22021, 0x8c820000, 0x1446001f, 0x0, -0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, -0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x8002758, 0x0, -0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, -0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x800276e, 0x0, -0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, -0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, -0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x3c040001, -0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, -0x8ee604d4, 0x80028be, 0x34a5f014, 0x8ee27254, 0x34843800, 0x3641821, -0x24420010, 0x43102b, 0x14400073, 0x0, 0x8ee27254, 0x24480010, -0x3641021, 0x102102b, 0x14400002, 0x3c02ffff, 0x1024021, 0x8f850100, -0x27623000, 0x24a60020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108, -0x10c20004, 0x0, 0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4, -0x4821, 0x24420001, 0xaee201a4, 0x80027e2, 0x8ee201a4, 0x2c64000c, -0x1441021, 0xaca20000, 0xaca30004, 0x24e2fff4, 0xa4a2000e, 0x24020006, -0xaca80008, 0xaca20018, 0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002, -0x431025, 0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037, 0x24090001, -0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c830000, 0x24020005, -0x1462001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, -0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, -0x80027cc, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020, -0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, -0x80027e2, 0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, -0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, -0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, -0x1520000a, 0x2508fffc, 0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, -0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f015, 0x34028100, -0xa5020000, 0x9582000e, 0x800285f, 0xa5020002, 0x8f850100, 0x27623000, -0x24a60020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004, -0x0, 0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821, -0x24420001, 0xaee201a4, 0x800284f, 0x8ee201a4, 0x2c64000c, 0x1441021, -0xaca20000, 0xaca30004, 0x8ee37254, 0x24e2fff4, 0xa4a2000e, 0x24020006, -0xaca20018, 0x24630010, 0xaca30008, 0x8ee204d4, 0xaca2001c, 0x8ee204b8, -0x3c030002, 0x431025, 0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037, -0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c830000, -0x24020005, 0x1462001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, -0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, -0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, -0x0, 0x8002839, 0x0, 0x14a00005, 0x0, 0x8f820108, -0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, -0xac800000, 0x800284f, 0x0, 0x8ee24e18, 0x24030040, 0x24420001, -0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, -0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, -0xac820004, 0x1520000a, 0x34028100, 0xafab0010, 0x8ee27254, 0x3c040001, -0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f016, -0x8ee37254, 0xa462000c, 0x8ee37254, 0x9582000e, 0xa462000e, 0x80028c2, -0x24e70004, 0x8f830100, 0x27623000, 0x24640020, 0x82102b, 0x50400001, -0x27642800, 0x8f820108, 0x10820004, 0x0, 0x8f820104, 0x14820007, -0x24050005, 0x8ee201a4, 0x4821, 0x24420001, 0xaee201a4, 0x80028b6, -0x8ee201a4, 0xac6a0000, 0xac6b0004, 0x8ee27254, 0xa467000e, 0xac650018, -0xac620008, 0x8ee204d4, 0xac62001c, 0x8ee204b8, 0xac620010, 0xaf840100, -0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28, -0x2e22021, 0x8c820000, 0x1445001f, 0x0, 0x8ee34e18, 0x8ee24e1c, -0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, -0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001, -0x10a20005, 0x0, 0x80028a0, 0x0, 0x14a00005, 0x0, -0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, -0x50400013, 0xac800000, 0x80028b6, 0x0, 0x8ee24e18, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, -0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000, -0x24020001, 0xac820004, 0x1520000b, 0x3c050004, 0x3c040001, 0x24844b08, -0xafab0010, 0xafa00014, 0x8ee604d4, 0x34a5f017, 0xc002403, 0x30e7ffff, -0x80028e1, 0x0, 0x8ee27254, 0x3c050001, 0x30e4ffff, 0x441021, -0xaee27254, 0x8ee2724c, 0x8ee37254, 0x34a53800, 0x441021, 0xaee2724c, -0x3651021, 0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27254, 0x431021, -0xaee27254, 0x8ee304d4, 0x96e20458, 0x24630001, 0x2442ffff, 0x621824, -0xaee304d4, 0x8ee304d4, 0x8ee204d0, 0x14620005, 0x0, 0x8f820060, -0x2403fff7, 0x431024, 0xaf820060, 0x8fbf0020, 0x3e00008, 0x27bd0028, -0x27bdffe0, 0xafbf0018, 0x8ee304d8, 0x8ee204d0, 0x10620189, 0x0, -0x8ee204d8, 0x8ee304ec, 0x21100, 0x621821, 0x94670008, 0x92e204dd, -0x8c680000, 0x8c690004, 0x10400023, 0x946a000a, 0x8ee204b8, 0x34460400, -0x31420200, 0x1040001f, 0x0, 0x96e2045a, 0x30420010, 0x1040001b, -0x3c028000, 0x3c010001, 0x370821, 0xac2283c8, 0x8ee27254, 0x9464000e, -0x3c050001, 0x34a53800, 0x24420004, 0xaee27254, 0x8ee37254, 0x42400, -0x3651021, 0x3c010001, 0x370821, 0xac2483cc, 0x62182b, 0x14600005, -0x24e70004, 0x8ee27254, 0x3c03ffff, 0x431021, 0xaee27254, 0x8ee27254, -0x8002917, 0xaee27248, 0x8ee604b8, 0x8ee2725c, 0x30e4ffff, 0x44102a, -0x10400015, 0x0, 0x8f8200d8, 0x8ee37248, 0x431023, 0xaee2725c, -0x8ee2725c, 0x1c400007, 0x44102a, 0x8ee2725c, 0x3c030001, 0x431021, -0xaee2725c, 0x8ee2725c, 0x44102a, 0x10400006, 0x0, 0x8ee201b4, -0x24420001, 0xaee201b4, 0x8002a72, 0x8ee201b4, 0x3c020001, 0x571021, -0x8c4283c8, 0x54400001, 0x24e7fffc, 0x31420004, 0x104000b9, 0x30e2ffff, -0x3c020001, 0x571021, 0x8c4283c8, 0x1040002f, 0x5021, 0x8f840100, -0x27623000, 0x24850020, 0xa2102b, 0x50400001, 0x27652800, 0x8f820108, -0x10a20032, 0x0, 0x8f820104, 0x10a2002f, 0x24020015, 0xac880000, -0xac890004, 0x8ee37254, 0xa487000e, 0xac820018, 0xac830008, 0x8ee204d8, -0x3c030001, 0x771821, 0x8c6383cc, 0xac860010, 0x431025, 0xac82001c, -0xaf850100, 0x92e204dc, 0x14400066, 0x240a0001, 0x8ee24e18, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, -0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21821, 0x24020015, 0xac620000, -0x24020001, 0x80029bf, 0xac620004, 0x8f840100, 0x27623000, 0x24850020, -0xa2102b, 0x50400001, 0x27652800, 0x8f820108, 0x10a20004, 0x0, -0x8f820104, 0x14a20006, 0x24020006, 0x8ee201a4, 0x24420001, 0xaee201a4, -0x80029bf, 0x8ee201a4, 0xac880000, 0xac890004, 0x8ee37254, 0xa487000e, -0xac820018, 0xac830008, 0x8ee204d8, 0xac860010, 0xac82001c, 0xaf850100, -0x92e204dc, 0x14400037, 0x240a0001, 0x8ee24e18, 0x210c0, 0x24424e28, -0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0, 0x8ee34e18, -0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, -0x24420001, 0x10a20005, 0x0, 0x80029a9, 0x0, 0x14a00005, -0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x80029bf, 0x0, 0x8ee24e18, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, -0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, -0xac820000, 0x24020001, 0xac820004, 0x1540000a, 0x24020001, 0xafa90010, -0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4, -0x8002a4f, 0x34a5f204, 0xa2e204dd, 0x8ee204d8, 0x8ee304ec, 0x8ee47248, -0x3c060001, 0x34c63800, 0x3c010001, 0x370821, 0xac2083c8, 0x3c010001, -0x370821, 0xac2083cc, 0x21100, 0x431021, 0xac44000c, 0x8ee27254, -0x2405fff8, 0x30e3ffff, 0x431021, 0x24420007, 0x451024, 0x24630007, -0xaee27248, 0x8ee2725c, 0x8ee47248, 0x651824, 0x431023, 0xaee2725c, -0x3661021, 0x82202b, 0x14800004, 0x3c03ffff, 0x8ee27248, 0x431021, -0xaee27248, 0x8ee27248, 0x8002a64, 0xaee27254, 0x10400073, 0x0, -0x8f830100, 0x27623000, 0x24640020, 0x82102b, 0x14400002, 0x5021, -0x27642800, 0x8f820108, 0x10820004, 0x0, 0x8f820104, 0x14820006, -0x24050005, 0x8ee201a4, 0x24420001, 0xaee201a4, 0x8002a46, 0x8ee201a4, -0xac680000, 0xac690004, 0x8ee27254, 0xa467000e, 0xac650018, 0xac620008, -0x8ee204d8, 0xac660010, 0xac62001c, 0xaf840100, 0x92e204dc, 0x14400036, -0x240a0001, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c820000, -0x1445001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, -0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, -0x8002a30, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020, -0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, -0x8002a46, 0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, -0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, -0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, -0x1540000c, 0x30e5ffff, 0x3c040001, 0x24844b08, 0x3c050004, 0xafa90010, -0xafa00014, 0x8ee604d4, 0x34a5f237, 0xc002403, 0x30e7ffff, 0x8002a72, -0x0, 0x8ee27254, 0x451021, 0xaee27254, 0x8ee2725c, 0x8ee37254, -0x3c040001, 0x34843800, 0xa2e004dd, 0x451023, 0xaee2725c, 0x3641021, -0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27254, 0x431021, 0xaee27254, -0x8ee304d8, 0x96e20458, 0x24630001, 0x2442ffff, 0x621824, 0xaee304d8, -0x8ee304d8, 0x8ee204d0, 0x14620005, 0x0, 0x8f820060, 0x2403fff7, -0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, -0xafbf001c, 0xafb00018, 0x8f820100, 0x8ee34e1c, 0x8f820104, 0x8f850108, -0x24020040, 0x24630001, 0x50620003, 0x1021, 0x8ee24e1c, 0x24420001, -0xaee24e1c, 0x8ee24e1c, 0x8ee34e1c, 0x210c0, 0x24424e28, 0x2e22021, -0x8ee24e18, 0x8c870004, 0x14620007, 0xa03021, 0x8f820108, 0x24420020, -0xaf820108, 0x8f820108, 0x8002aa2, 0xac800000, 0x8ee24e1c, 0x24030040, -0x24420001, 0x50430003, 0x1021, 0x8ee24e1c, 0x24420001, 0x210c0, -0x24424e28, 0x2e22021, 0x8c820004, 0x8f830108, 0x21140, 0x621821, -0xaf830108, 0xac800000, 0x8cc30018, 0x2c620002, 0x144000ba, 0x2c620004, -0x5440008d, 0x24030040, 0x2c620007, 0x104000b5, 0x2c620005, 0x144000b3, -0x0, 0x8ee204e0, 0x471021, 0xaee204e0, 0x8ee204e0, 0x8f43023c, -0x43102b, 0x144000b5, 0x0, 0x8ee304d4, 0x8ee204e8, 0x506200b1, -0xa2e004e4, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, -0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007, -0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8002b13, -0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c, -0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000, -0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, -0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, -0x24020012, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, -0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005, -0x0, 0x8002afd, 0x0, 0x14a00005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, -0xac800000, 0x8002b13, 0x0, 0x8ee24e20, 0x24030040, 0x24420001, -0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, -0xac820004, 0x5600000b, 0x24100001, 0x8ee204d4, 0x3c040001, 0x24844b14, -0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, -0x34a5f006, 0x16000003, 0x24020001, 0x8002b69, 0xa2e204e4, 0x8ee2016c, -0x24420001, 0xaee2016c, 0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0, -0xaee204e8, 0x8f42023c, 0x5040003c, 0xaee07264, 0x8ee20180, 0x24420001, -0xaee20180, 0x8ee20180, 0x8002b69, 0xaee07264, 0x8ee204f4, 0x24420001, -0x50430003, 0x1021, 0x8ee204f4, 0x24420001, 0xaee204f4, 0x8ee204f4, -0x8cc30018, 0x21080, 0x571021, 0x8c4404f8, 0x24020003, 0x1462000f, -0x0, 0x3c020001, 0x571021, 0x904283a1, 0x10400014, 0x0, -0x8ee201c8, 0x8ee35230, 0x441021, 0xaee201c8, 0x8ee201cc, 0x641821, -0x306300ff, 0x8002b59, 0xaee35230, 0x8ee201c4, 0x8ee30e00, 0x441021, -0xaee201c4, 0x8ee201cc, 0x641821, 0x306301ff, 0xaee30e00, 0x441021, -0xaee201cc, 0x8ee20000, 0x34420040, 0x8002b69, 0xaee20000, 0x94c7000e, -0x8cc2001c, 0x3c040001, 0x24844b20, 0xafa60014, 0xafa20010, 0x8cc60018, -0x3c050008, 0xc002403, 0x34a50910, 0x8fbf001c, 0x8fb00018, 0x3e00008, -0x27bd0020, 0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb60058, 0xafb50054, -0xafb40050, 0xafb3004c, 0xafb20048, 0xafb10044, 0xafb00040, 0x8f830108, -0x8f820104, 0xafa00024, 0x106203df, 0xafa0002c, 0x3c1e0001, 0x37de3800, -0x3c0bffff, 0x8f930108, 0x8e620018, 0x8f830104, 0x2443fffe, 0x2c620014, -0x104003c7, 0x31080, 0x3c010001, 0x220821, 0x8c224b30, 0x400008, -0x0, 0x9663000e, 0x8ee2724c, 0x8ee404e0, 0x431021, 0xaee2724c, -0x8e63001c, 0x96e20458, 0x24840001, 0xaee404e0, 0x24630001, 0x2442ffff, -0x621824, 0xaee304d4, 0x8f42023c, 0x82202b, 0x148003b1, 0x0, -0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, -0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0, -0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8002bf6, 0x8ee201a0, -0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008, -0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004, -0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, -0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x240c0040, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8002be0, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, -0x8002bf6, 0x0, 0x8ee24e20, 0x240c0040, 0x24420001, 0x504c0003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x24020012, 0x240c0001, 0xac820000, 0xac8c0004, -0x5600000d, 0x24100001, 0x8ee204d4, 0x3c040001, 0x24844b14, 0xafa00014, -0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0x34a5f006, 0xc002403, -0xafab0038, 0x8fab0038, 0x1200030a, 0x240c0001, 0x8002f11, 0x0, -0x966c001c, 0xafac002c, 0x9662001e, 0x3c0c8000, 0xafac0024, 0xae62001c, -0x8e75001c, 0x8ee204ec, 0x8ee404ec, 0x151900, 0x621021, 0x8c52000c, -0x92e27b88, 0x641821, 0x9476000a, 0x14400003, 0x32c20002, 0xaef27b94, -0xaef57b8c, 0x1040004b, 0x8021, 0x96e2045a, 0x30420002, 0x10400047, -0x0, 0x8e63001c, 0x8ee204ec, 0x32100, 0x821021, 0x8c42000c, -0x37e1821, 0x24420022, 0x43102b, 0x1440000a, 0x24050014, 0x8ee204ec, -0x821021, 0x8c44000c, 0xafab0038, 0xc002f65, 0x2484000e, 0x8fab0038, -0x8002c4a, 0x3050ffff, 0x8ee204ec, 0x821021, 0x8c42000c, 0x9450000e, -0x94430010, 0x94440012, 0x94450014, 0x2038021, 0x2048021, 0x2058021, -0x94430016, 0x94440018, 0x9445001a, 0x2038021, 0x2048021, 0x2058021, -0x9443001c, 0x9444001e, 0x94420020, 0x2038021, 0x2048021, 0x2028021, -0x101c02, 0x3202ffff, 0x628021, 0x8e63001c, 0x8ee204ec, 0x102402, -0x32900, 0xa21021, 0x8c43000c, 0x3202ffff, 0x828021, 0x37e1021, -0x24630018, 0x62182b, 0x14600009, 0x0, 0x8ee204ec, 0xa21021, -0x8c43000c, 0x101027, 0x3c01ffff, 0x230821, 0x8002c67, 0xa4220018, -0x8ee204ec, 0xa21021, 0x8c43000c, 0x101027, 0xa4620018, 0x96e2045a, -0x8821, 0x30420008, 0x14400063, 0xa021, 0x8e63001c, 0x8ee204ec, -0x33100, 0xc21021, 0x8c42000c, 0x37e1821, 0x24420022, 0x43102b, -0x14400035, 0x0, 0x8ee204ec, 0xc21021, 0x8c42000c, 0x24470010, -0x37e1021, 0xe2102b, 0x50400001, 0xeb3821, 0x8ee204ec, 0x94f10000, -0xc21021, 0x8c42000c, 0x24470016, 0x37e1021, 0xe2102b, 0x14400002, -0x2634ffec, 0xeb3821, 0x8ee204ec, 0x90e30001, 0xc21021, 0x8c42000c, -0x2447001a, 0x37e1021, 0xe2102b, 0x14400002, 0x2838821, 0xeb3821, -0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, 0xe2102b, 0x50400001, -0xeb3821, 0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, 0xe2102b, -0x50400001, 0xeb3821, 0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, -0xe2102b, 0x50400001, 0xeb3821, 0x94e20000, 0x8002cc8, 0x2228821, -0x8ee204ec, 0xc21021, 0x8c43000c, 0x8ee204ec, 0x94710010, 0x8ee304ec, -0xc21021, 0x8c44000c, 0xc31821, 0x8c62000c, 0x2634ffec, 0x90840017, -0x8ee304ec, 0x9442001a, 0x2848821, 0xc31821, 0x8c65000c, 0x8ee304ec, -0x2228821, 0x8ee204ec, 0xc31821, 0xc21021, 0x8c44000c, 0x8c62000c, -0x94a3001c, 0x9484001e, 0x94420020, 0x2238821, 0x2248821, 0x2228821, -0x111c02, 0x3222ffff, 0x628821, 0x111c02, 0x3222ffff, 0x628821, -0x32c20001, 0x104000b2, 0x0, 0x96e2045a, 0x30420001, 0x104000ae, -0x32c20080, 0x10400008, 0x0, 0x92e27b88, 0x14400005, 0x0, -0x240c0001, 0xa2ec7b88, 0xaef57b8c, 0xaef27b94, 0x8ee304ec, 0x151100, -0x431021, 0x8c47000c, 0x37e1821, 0x24e2000e, 0x43102b, 0x14400008, -0xe02021, 0x2405000e, 0xc002f65, 0xafab0038, 0x3042ffff, 0x8fab0038, -0x8002d01, 0x2028021, 0x94e60000, 0x24e70002, 0x94e50000, 0x24e70002, -0x94e30000, 0x24e70002, 0x94e20000, 0x24e70002, 0x94e40000, 0x24e70002, -0x2068021, 0x2058021, 0x2038021, 0x2028021, 0x94e20000, 0x94e30002, -0x2048021, 0x2028021, 0x2038021, 0x101c02, 0x3202ffff, 0x628021, -0x101c02, 0x3202ffff, 0x8ee47b8c, 0x628021, 0x14950004, 0x3205ffff, -0x96620016, 0x8002d0f, 0x512021, 0x96620016, 0x542021, 0x41402, -0x3083ffff, 0x432021, 0x852023, 0x41402, 0x822021, 0x3084ffff, -0x50800001, 0x3404ffff, 0x8ee27b94, 0x24430017, 0x37e1021, 0x62102b, -0x50400001, 0x6b1821, 0x90630000, 0x24020011, 0x14620031, 0x24020006, -0x8ee27b94, 0x37e1821, 0x24420028, 0x43102b, 0x14400018, 0x0, -0x8ee27b8c, 0x12a2000a, 0x32c20100, 0x8ee27b94, 0x3c01ffff, 0x220821, -0x94220028, 0x822021, 0x41c02, 0x3082ffff, 0x622021, 0x32c20100, -0x14400004, 0x41027, 0x92e27b88, 0x14400002, 0x41027, 0x3044ffff, -0x8ee27b94, 0x3c01ffff, 0x220821, 0x8002d82, 0xa4240028, 0x8ee27b8c, -0x12a20008, 0x32c20100, 0x8ee27b94, 0x94420028, 0x822021, 0x41c02, -0x3082ffff, 0x622021, 0x32c20100, 0x14400004, 0x41027, 0x92e27b88, -0x14400002, 0x41027, 0x3044ffff, 0x8ee27b94, 0x8002d82, 0xa4440028, -0x1462002f, 0x37e1821, 0x8ee27b94, 0x24420032, 0x43102b, 0x14400018, -0x0, 0x8ee27b8c, 0x12a2000a, 0x32c20100, 0x8ee27b94, 0x3c01ffff, -0x220821, 0x94220032, 0x822021, 0x41c02, 0x3082ffff, 0x622021, -0x32c20100, 0x14400004, 0x41027, 0x92e27b88, 0x14400002, 0x41027, -0x3044ffff, 0x8ee27b94, 0x3c01ffff, 0x220821, 0x8002d82, 0xa4240032, -0x8ee27b8c, 0x12a20008, 0x32c20100, 0x8ee27b94, 0x94420032, 0x822021, -0x41c02, 0x3082ffff, 0x622021, 0x32c20100, 0x14400004, 0x41027, -0x92e27b88, 0x14400002, 0x41027, 0x3044ffff, 0x8ee27b94, 0xa4440032, -0x8fac0024, 0x1180002c, 0x37e1821, 0x8e420000, 0xae42fffc, 0x2642000a, -0x43102b, 0x1440001b, 0x34038100, 0x26430004, 0x37e1021, 0x62102b, -0x14400003, 0x602021, 0x6b1821, 0x602021, 0x8c620000, 0x24630004, -0xae420000, 0x37e1021, 0x62102b, 0x50400001, 0x6b1821, 0x8c620000, -0xac820000, 0x34028100, 0xa4620000, 0x24630002, 0x37e1021, 0x62102b, -0x50400001, 0x6b1821, 0x97ac002e, 0x8002dac, 0xa46c0000, 0x8e420004, -0x8e440008, 0xa6430008, 0x97ac002e, 0xa64c000a, 0xae420000, 0xae440004, -0x9662000e, 0x2652fffc, 0x24420004, 0xa662000e, 0x9662000e, 0x8ee3724c, -0x621821, 0xaee3724c, 0xafb20018, 0x8ee3724c, 0xafa3001c, 0x8ee2724c, -0x2c42003c, 0x10400004, 0x24620001, 0x2403fffe, 0x431024, 0xafa2001c, -0x32c20080, 0x1040000c, 0x32c20100, 0x8ee27b98, 0x24430001, 0x210c0, -0x571021, 0xaee37b98, 0x8fa30018, 0x8fa4001c, 0xac437b9c, 0xac447ba0, -0x8002e98, 0xaee0724c, 0x10400072, 0x0, 0x8ee27b98, 0x24430001, -0x210c0, 0x571021, 0xaee37b98, 0x8fa30018, 0x8fa4001c, 0xac437b9c, -0xac447ba0, 0x8ee27b98, 0x10400063, 0x4821, 0x5021, 0x8f8200f0, -0x24480008, 0x27621800, 0x102102b, 0x50400001, 0x27681000, 0x8f8200f4, -0x15020007, 0x0, 0x8ee201b0, 0x8021, 0x24420001, 0xaee201b0, -0x8002df2, 0x8ee201b0, 0x8f8300f0, 0x24100001, 0x1571021, 0x8c447b9c, -0x8c457ba0, 0xac640000, 0xac650004, 0xaf8800f0, 0x16000006, 0x2ea1021, -0x8ee20088, 0x24420001, 0xaee20088, 0x8002e37, 0x8ee20088, 0x8c427ba0, -0x8ee400e0, 0x8ee500e4, 0x8ee67b8c, 0x401821, 0x1021, 0xa32821, -0xa3382b, 0x822021, 0x872021, 0x8ee204ec, 0xc93021, 0x63100, -0xaee400e0, 0xaee500e4, 0xc23021, 0x94c2000a, 0x240c0002, 0x21142, -0x30430003, 0x106c0016, 0x28620003, 0x10400005, 0x240c0001, 0x106c0008, -0x0, 0x8002e37, 0x0, 0x240c0003, 0x106c0017, 0x0, -0x8002e37, 0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001, -0x441021, 0xaee200e8, 0xaee300ec, 0x8ee200e8, 0x8002e37, 0x8ee300ec, -0x8ee200f0, 0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, 0xaee200f0, -0xaee300f4, 0x8ee200f0, 0x8002e37, 0x8ee300f4, 0x8ee200f8, 0x8ee300fc, -0x24630001, 0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8, -0x8ee300fc, 0x8ee27b98, 0x25290001, 0x122102b, 0x1440ffa0, 0x254a0008, -0xa2e07b88, 0x8002e97, 0xaee07b98, 0x8f8200f0, 0x24470008, 0x27621800, -0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4, 0x14e20007, 0x0, -0x8ee201b0, 0x8021, 0x24420001, 0xaee201b0, 0x8002e55, 0x8ee201b0, -0x8f8200f0, 0x24100001, 0x8fa30018, 0x8fa4001c, 0xac430000, 0xac440004, -0xaf8700f0, 0x16000007, 0x0, 0x8ee20088, 0x24420001, 0xaee20088, -0x8ee20088, 0x8002e98, 0xaee0724c, 0x8ee2724c, 0x8ee400e0, 0x8ee500e4, -0x240c0002, 0x401821, 0x1021, 0xa32821, 0xa3302b, 0x822021, -0x862021, 0x161142, 0x30430003, 0xaee400e0, 0xaee500e4, 0x106c0017, -0x2c620003, 0x10400005, 0x240c0001, 0x106c0008, 0x0, 0x8002e98, -0xaee0724c, 0x240c0003, 0x106c0019, 0x0, 0x8002e98, 0xaee0724c, -0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001, 0x441021, 0xaee200e8, -0xaee300ec, 0x8ee200e8, 0x8ee300ec, 0x8002e98, 0xaee0724c, 0x8ee200f0, -0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, 0xaee200f0, 0xaee300f4, -0x8ee200f0, 0x8ee300f4, 0x8002e98, 0xaee0724c, 0x8ee200f8, 0x8ee300fc, -0x24630001, 0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8, -0x8ee300fc, 0xaee0724c, 0x8e62001c, 0x96e30458, 0x8ee404e0, 0x24420001, -0x2463ffff, 0x431024, 0x24840001, 0xaee204d4, 0xaee404e0, 0x8f42023c, -0x82202b, 0x148000a8, 0x0, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, -0xaee201a0, 0x8002eff, 0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0, -0x8ee504a4, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20, -0x8ee24e24, 0x1062001b, 0x240c0040, 0x8c820004, 0x24420001, 0xac820004, -0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007, 0x0, 0x8ee24e24, -0x24420001, 0x10620005, 0x0, 0x8002ee9, 0x0, 0x14600005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x8002eff, 0x0, 0x8ee24e20, -0x240c0040, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012, -0x240c0001, 0xac820000, 0xac8c0004, 0x5600000d, 0x24100001, 0x8ee204d4, -0x3c040001, 0x24844b14, 0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228, -0x3c050009, 0x34a5f006, 0xc002403, 0xafab0038, 0x8fab0038, 0x16000003, -0x240c0001, 0x8002f4c, 0xa2ec04e4, 0x8ee2016c, 0x24420001, 0xaee2016c, -0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0, 0xaee07264, 0xaee204e8, -0x8f42023c, 0x10400030, 0x0, 0x8ee20180, 0x24420001, 0xaee20180, -0x8002f4c, 0x8ee20180, 0x8ee204f4, 0x240c0040, 0x24420001, 0x504c0003, -0x1021, 0x8ee204f4, 0x24420001, 0xaee204f4, 0x8ee204f4, 0x8e630018, -0x240c0003, 0x21080, 0x571021, 0x146c000f, 0x8c4404f8, 0x3c020001, -0x571021, 0x904283a1, 0x10400014, 0x0, 0x8ee201c8, 0x8ee35230, -0x441021, 0xaee201c8, 0x8ee201cc, 0x641821, 0x306300ff, 0x8002f47, -0xaee35230, 0x8ee201c4, 0x8ee30e00, 0x441021, 0xaee201c4, 0x8ee201cc, -0x641821, 0x306301ff, 0xaee30e00, 0x441021, 0xaee201cc, 0x8ee20000, -0x34420040, 0xaee20000, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, -0x8f820108, 0x27633000, 0x43102b, 0x14400002, 0x27622800, 0xaf820108, -0x8f830108, 0x8f820104, 0x1462fc26, 0x0, 0x8fbf0060, 0x8fbe005c, -0x8fb60058, 0x8fb50054, 0x8fb40050, 0x8fb3004c, 0x8fb20048, 0x8fb10044, -0x8fb00040, 0x3e00008, 0x27bd0068, 0x52843, 0x10a0000d, 0x3021, -0x3c030001, 0x34633800, 0x3c07ffff, 0x3631021, 0x82102b, 0x50400001, -0x872021, 0x94820000, 0x24840002, 0x24a5ffff, 0x14a0fff8, 0xc23021, -0x61c02, 0x30c2ffff, 0x623021, 0x61c02, 0x30c2ffff, 0x623021, -0x3e00008, 0x30c2ffff, 0x27bdff88, 0x240f0001, 0xafbf0070, 0xafbe006c, -0xafb60068, 0xafb50064, 0xafb40060, 0xafb3005c, 0xafb20058, 0xafb10054, -0xafb00050, 0xa3a00027, 0xafaf002c, 0x8ee204c4, 0x8021, 0x30420001, -0x1440002a, 0xa3a00037, 0x8f8700e0, 0x8f8800c4, 0x8f8200e8, 0xe22023, -0x2c821000, 0x50400001, 0x24841000, 0x420c2, 0x801821, 0x8ee400c8, -0x8ee500cc, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, -0xaee400c8, 0xaee500cc, 0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023, -0x44102b, 0x10400003, 0x3c02000a, 0x3442f000, 0x822021, 0x801821, -0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, 0x822021, -0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8, 0xaf8700e4, 0x80034bc, -0xaf8700e8, 0x3c020001, 0x571021, 0x904283b0, 0x1040000b, 0x0, -0x3c140001, 0x297a021, 0x8e9483b4, 0x3c130001, 0x2779821, 0x8e7383b8, -0x3c120001, 0x2579021, 0x8003183, 0x8e5283bc, 0x8f8300e0, 0x8f8200e4, -0x10430007, 0x8821, 0x8f8200e4, 0x24110001, 0x8c430000, 0x8c440004, -0xafa30018, 0xafa4001c, 0x1620000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, -0x8f8200c8, 0x3c040001, 0x24844be0, 0xafa20014, 0x8f8600e0, 0x8f8700e4, -0x3c050006, 0xc002403, 0x34a5f000, 0x80034bc, 0x0, 0x8fa3001c, -0x8fb20018, 0x3074ffff, 0x2694fffc, 0x621024, 0x10400058, 0x2409821, -0x3c020080, 0x621024, 0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001, -0xaee2007c, 0x8ee2007c, 0x8ee201ec, 0x24420001, 0xaee201ec, 0x80034b6, -0x8ee201ec, 0x3c060004, 0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008, -0x8ee20080, 0x3c080020, 0x34078000, 0x24420001, 0xaee20080, 0x8ee20080, -0x8fa2001c, 0x441824, 0x10660021, 0xc3102b, 0x14400007, 0x0, -0x106b0011, 0x0, 0x106a0015, 0x0, 0x8003039, 0x42042, -0x10650023, 0xa3102b, 0x14400005, 0x0, 0x10690019, 0x0, -0x8003039, 0x42042, 0x10680021, 0x0, 0x8003039, 0x42042, -0x8ee20034, 0x24420001, 0xaee20034, 0x8ee20034, 0x8003039, 0x42042, -0x8ee201dc, 0x24420001, 0xaee201dc, 0x8ee201dc, 0x8003039, 0x42042, -0x8ee201e0, 0x24420001, 0xaee201e0, 0x8ee201e0, 0x8003039, 0x42042, -0x8ee201e4, 0x24420001, 0xaee201e4, 0x8ee201e4, 0x8003039, 0x42042, -0x8ee20030, 0x24420001, 0xaee20030, 0x8ee20030, 0x8003039, 0x42042, -0x8ee201e8, 0x24420001, 0xaee201e8, 0x8ee201e8, 0x42042, 0x1087047c, -0x0, 0x8002ffe, 0x0, 0x3c020001, 0x571021, 0x904283a2, -0x14400084, 0x24020001, 0x3c030001, 0x771821, 0x906383a3, 0x1462007f, -0x3c020100, 0x8e430000, 0x621024, 0x1040006f, 0x2402ffff, 0x14620005, -0x24100001, 0x96430004, 0x3402ffff, 0x10620075, 0x0, 0x92e204c8, -0x14400072, 0x0, 0x3c020001, 0x571021, 0x8c4283a4, 0x28420005, -0x10400020, 0x3821, 0x3c020001, 0x571021, 0x8c4283a4, 0x18400016, -0x2821, 0x96660000, 0x520c0, 0x971021, 0x9442776e, 0x14460009, -0x971021, 0x94437770, 0x96620002, 0x14620005, 0x971021, 0x94437772, -0x96620004, 0x50620008, 0x24070001, 0x3c020001, 0x571021, 0x8c4283a4, -0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff, 0x10400440, -0x0, 0x80030c5, 0x0, 0x2402021, 0xc0022f8, 0x24050006, -0x3044001f, 0x428c0, 0x2e51021, 0x9442726c, 0x30424000, 0x14400434, -0xb71021, 0x9443726e, 0x96620000, 0x1462000b, 0x418c0, 0xb71021, -0x94437270, 0x96620002, 0x14620006, 0x418c0, 0xb71021, 0x94437272, -0x96620004, 0x10620035, 0x418c0, 0x2e31021, 0x9442726c, 0x30428000, -0x14400421, 0x2e31021, 0x944b726c, 0x96670000, 0xb28c0, 0xb71021, -0x9442736e, 0x80030a7, 0x3021, 0x420c0, 0x2e41021, 0x9443736c, -0x2e41021, 0x944b736c, 0x30638000, 0x14600010, 0xb28c0, 0xb71021, -0x9442736e, 0x1447fff5, 0x1602021, 0xb71021, 0x94437370, 0x96620002, -0x5462fff1, 0x420c0, 0xb71021, 0x94437372, 0x96620004, 0x5462ffec, -0x420c0, 0x24060001, 0x30c200ff, 0x10400400, 0x0, 0x80030c5, -0x0, 0x97430202, 0x96420000, 0x146203fa, 0x0, 0x97430204, -0x96420002, 0x146203f6, 0x0, 0x97430206, 0x96420004, 0x146203f2, -0x0, 0x92420000, 0x3a030001, 0x30420001, 0x431024, 0x10400074, -0x2402ffff, 0x8e630000, 0x14620004, 0x3402ffff, 0x96630004, 0x1062006f, -0x240f0002, 0x3c020001, 0x571021, 0x904283a2, 0x1440006a, 0x240f0003, -0x92e204c8, 0x54400068, 0xafaf002c, 0x3c020001, 0x571021, 0x8c4283a4, -0x28420005, 0x10400020, 0x3821, 0x3c020001, 0x571021, 0x8c4283a4, -0x18400016, 0x2821, 0x96660000, 0x520c0, 0x971021, 0x9442776e, -0x14460009, 0x971021, 0x94437770, 0x96620002, 0x14620005, 0x971021, -0x94437772, 0x96620004, 0x50620008, 0x24070001, 0x3c020001, 0x571021, -0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff, -0x14400044, 0x240f0003, 0x80034b6, 0x0, 0x2402021, 0xc0022f8, -0x24050006, 0x3044001f, 0x428c0, 0x2e51021, 0x9442726c, 0x30424000, -0x144003af, 0xb71021, 0x9443726e, 0x96620000, 0x1462000b, 0x418c0, -0xb71021, 0x94437270, 0x96620002, 0x14620006, 0x418c0, 0xb71021, -0x94437272, 0x96620004, 0x10620027, 0x418c0, 0x2e31021, 0x9442726c, -0x30428000, 0x1440039c, 0x2e31021, 0x944b726c, 0x96670000, 0xb28c0, -0xb71021, 0x9442736e, 0x800312c, 0x3021, 0x420c0, 0x2e41021, -0x9443736c, 0x2e41021, 0x944b736c, 0x30638000, 0x14600010, 0xb28c0, -0xb71021, 0x9442736e, 0x1447fff5, 0x1602021, 0xb71021, 0x94437370, -0x96620002, 0x5462fff1, 0x420c0, 0xb71021, 0x94437372, 0x96620004, -0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff, 0x1040037b, 0x0, -0x800313f, 0x240f0003, 0x240f0001, 0xafaf002c, 0x8f420260, 0x54102b, -0x1040003a, 0x0, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008, -0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2801821, 0x1021, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4, -0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, 0x24420001, -0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010, 0x8f8200e4, 0x3c040001, -0x24844be8, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, 0xc002403, -0x34a5f003, 0x80034bc, 0x0, 0x8ee25230, 0xafa20010, 0x8ee25234, -0x3c040001, 0x24844bf4, 0xafa20014, 0x8ee60e00, 0x8ee70e08, 0x3c050006, -0xc002403, 0x34a5f002, 0x8ee201bc, 0x24420001, 0xaee201bc, 0x8ee20000, -0x8ee301bc, 0x2403ffbf, 0x431024, 0x8003460, 0xaee20000, 0x96e20468, -0x54102b, 0x10400003, 0x0, 0x240f0001, 0xa3af0027, 0x12800301, -0x24160007, 0x24150040, 0x241e0001, 0x240e0012, 0x8ee2723c, 0x8f430280, -0x24420001, 0x304203ff, 0x106202d3, 0x0, 0x93a20027, 0x10400014, -0x0, 0x8ee35230, 0x8ee25234, 0x10620009, 0x26ed5234, 0x8ee65234, -0x8ee35234, 0x21140, 0x24425238, 0x2e28021, 0x24630001, 0x80031af, -0x306b00ff, 0x92e27238, 0x1440ffca, 0x0, 0x8ee201d0, 0x24420001, -0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffc2, 0x26ed0e08, -0x8ee60e08, 0x8ee30e08, 0x21140, 0x24420e10, 0x2e28021, 0x24630001, -0x306b01ff, 0x96e2046a, 0x30420010, 0x10400019, 0x0, 0x9642000c, -0x340f8100, 0x144f0015, 0x0, 0x3c020001, 0x571021, 0x904283b0, -0x14400010, 0x0, 0x9642000e, 0xa6020016, 0x8e420008, 0x8e430004, -0x8e440000, 0x2694fffc, 0xae42000c, 0xae430008, 0xae440004, 0x9602000e, -0x26730004, 0x240f0001, 0xa3af0037, 0x34420200, 0xa602000e, 0x8e020000, -0x8e030004, 0x3c040001, 0x34843800, 0x306a0007, 0x26a9823, 0x3641021, -0x262102b, 0x10400005, 0x28aa021, 0x2641023, 0x3621823, 0x3c020020, -0x439823, 0x26820007, 0x2404fff8, 0x9603000a, 0x446024, 0x6a1821, -0x6c102b, 0x10400002, 0x1803821, 0x603821, 0xae130018, 0x8f880120, -0x24e20007, 0x443824, 0x27623800, 0x25090020, 0x122102b, 0x50400001, -0x27693000, 0x8f820128, 0x11220004, 0x0, 0x8f820124, 0x15220007, -0x1401821, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0, 0x800323c, -0x8ee201a0, 0x8e040000, 0x8e050004, 0x1021, 0xad130008, 0xa507000e, -0xad160018, 0xad06001c, 0xa3302b, 0xa32823, 0x822023, 0x862023, -0xad040000, 0xad050004, 0x8ee204b0, 0xad020010, 0xaf890120, 0x92e24e10, -0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c820000, 0x1456001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, -0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, -0x0, 0x8003229, 0x0, 0x14600005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, -0xac800000, 0x800323c, 0x0, 0x8ee24e20, 0x24420001, 0x50550003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0xac960000, 0xac9e0004, 0x16200018, 0x3c050006, -0x8e020018, 0x3c040001, 0x24844c00, 0xafa20010, 0x8e020000, 0x8e030004, -0x34a5f009, 0x2003021, 0xc002403, 0xafa30014, 0x93a20037, 0x10400216, -0x340f8100, 0x8e420004, 0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000, -0xae430004, 0xae440008, 0x96020016, 0x8003460, 0xa642000e, 0x14ec0168, -0x28a1823, 0x960c000a, 0x9603000e, 0x28a1023, 0xa602000a, 0x34620004, -0xa602000e, 0x8f880120, 0x27623800, 0x25090020, 0x122102b, 0x14400002, -0x306affff, 0x27693000, 0x8f820128, 0x11220004, 0x0, 0x8f820124, -0x15220007, 0x24040020, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0, -0x80032ba, 0x8ee201a0, 0x8ee5723c, 0x8ee60480, 0x8ee70484, 0xa504000e, -0x24040004, 0xad100008, 0xad040018, 0x52940, 0xa01821, 0x1021, -0xe33821, 0xe3202b, 0xc23021, 0xc43021, 0xad060000, 0xad070004, -0x8ee2723c, 0xad02001c, 0x8ee204b4, 0xad020010, 0xaf890120, 0x92e24e10, -0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c820000, 0x1456001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, -0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, -0x0, 0x80032a7, 0x0, 0x14600005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, -0xac800000, 0x80032ba, 0x0, 0x8ee24e20, 0x24420001, 0x50550003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0xac960000, 0xac9e0004, 0x1620000d, 0x0, -0xa60c000a, 0xa60a000e, 0x8f820100, 0xafa20010, 0x8f820104, 0x3c040001, -0x24844c0c, 0x3c050006, 0xafa20014, 0x8ee6723c, 0x800342b, 0x34a5f00b, -0x3c010001, 0x370821, 0xa02083b0, 0xadab0000, 0x8ee201cc, 0x8ee3723c, -0x2442ffff, 0xaee201cc, 0x8ee201cc, 0x24630001, 0x306303ff, 0x26e25234, -0x15a20006, 0xaee3723c, 0x8ee201c8, 0x2442ffff, 0xaee201c8, 0x80032df, -0x8ee201c8, 0x8ee201c4, 0x2442ffff, 0xaee201c4, 0x8ee201c4, 0x8f420240, -0x10400073, 0x0, 0x8ee20e0c, 0x24420001, 0xaee20e0c, 0x8f430240, -0x43102b, 0x14400176, 0xa021, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8821, 0x24420001, -0xaee201a0, 0x800333f, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, -0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c820000, 0x144e001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee34e20, 0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, -0x10620005, 0x0, 0x800332c, 0x0, 0x14600005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400010, 0xac800000, 0x800333f, 0x0, 0x8ee24e20, 0x24420001, -0x50550003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x5620000d, -0x24110001, 0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010, -0x8ee6723c, 0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048, -0x8fae0048, 0x56200001, 0xaee00e0c, 0x8ee20184, 0x24420001, 0xaee20184, -0x80033b8, 0x8ee20184, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20007, 0x0, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0, -0x80033aa, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, 0x8ee5049c, -0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, -0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, -0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, -0x8c820000, 0x144e001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, -0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, -0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, -0x0, 0x8003397, 0x0, 0x14600005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, -0xac800000, 0x80033aa, 0x0, 0x8ee24e20, 0x24420001, 0x50550003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x1620000d, 0x0, -0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010, 0x8ee6723c, -0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048, 0x8fae0048, -0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170, 0x800345e, 0xa021, -0x960c000a, 0x183102b, 0x54400001, 0x1801821, 0xa603000a, 0x8f880120, -0x27623800, 0x25090020, 0x122102b, 0x50400001, 0x27693000, 0x8f820128, -0x11220004, 0x0, 0x8f820124, 0x15220007, 0x24040020, 0x8ee201a0, -0x8821, 0x24420001, 0xaee201a0, 0x800341f, 0x8ee201a0, 0x8ee5723c, -0x8ee60480, 0x8ee70484, 0xa504000e, 0x24040004, 0xad100008, 0xad040018, -0x52940, 0xa01821, 0x1021, 0xe33821, 0xe3202b, 0xc23021, -0xc43021, 0xad060000, 0xad070004, 0x8ee2723c, 0xad02001c, 0x8ee204b4, -0xad020010, 0xaf890120, 0x92e24e10, 0x14400033, 0x24110001, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1456001f, 0x0, -0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10550007, 0x0, -0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x800340c, 0x0, -0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, -0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x800341f, 0x0, -0x8ee24e20, 0x24420001, 0x50550003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0xac960000, -0xac9e0004, 0x1620001d, 0x0, 0xa60c000a, 0x8f820100, 0xafa20010, -0x8f820104, 0x3c040001, 0x24844c0c, 0x3c050006, 0xafa20014, 0x8ee6723c, -0x34a5f00d, 0xc002403, 0x2003821, 0x93a20037, 0x10400031, 0x340f8100, -0x8e420004, 0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000, 0xae430004, -0xae440008, 0x96020016, 0xa642000e, 0x9602000e, 0x3042fdff, 0x8003460, -0xa602000e, 0x8ee201cc, 0x2442ffff, 0xaee201cc, 0x8ee201cc, 0x8ee201c4, -0x3c04001f, 0x3c010001, 0x370821, 0xa03e83b0, 0x2442ffff, 0xaee201c4, -0x9603000a, 0x3484ffff, 0x8ee201c4, 0x6a1821, 0x2639821, 0x93202b, -0x10800003, 0x3c02fff5, 0x34421000, 0x2629821, 0xadab0000, 0x8ee2723c, -0x24420001, 0x304203ff, 0xaee2723c, 0x8f420240, 0x10400004, 0x283a023, -0x8ee20e0c, 0x24420001, 0xaee20e0c, 0xa3a00027, 0x1680fd29, 0x0, -0x12800024, 0x0, 0x3c010001, 0x370821, 0xac3483b4, 0x3c010001, -0x370821, 0xac3383b8, 0x3c010001, 0x370821, 0xac3283bc, 0x93a20037, -0x10400008, 0x0, 0x3c020001, 0x571021, 0x8c4283bc, 0x24420004, -0x3c010001, 0x370821, 0xac2283bc, 0x8ee2723c, 0x8f430280, 0x24420001, -0x304203ff, 0x14620006, 0x0, 0x8ee201c0, 0x24420001, 0xaee201c0, -0x80034bc, 0x8ee201c0, 0x8ee201b8, 0x24420001, 0xaee201b8, 0x80034bc, -0x8ee201b8, 0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0, 0x8ee500c4, -0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, -0xaee500c4, 0x8faf002c, 0x24020002, 0x11e2000f, 0x29e20003, 0x14400017, -0x24020003, 0x15e20015, 0x0, 0x8ee200d0, 0x8ee300d4, 0x24630001, -0x2c640001, 0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x80034b6, -0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001, 0x2c640001, 0x441021, -0xaee200d8, 0xaee300dc, 0x8ee200d8, 0x80034b6, 0x8ee300dc, 0x8ee200c8, -0x8ee300cc, 0x24630001, 0x2c640001, 0x441021, 0xaee200c8, 0xaee300cc, -0x8ee200c8, 0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008, -0xaf8300e4, 0xaf8300e8, 0x8fbf0070, 0x8fbe006c, 0x8fb60068, 0x8fb50064, -0x8fb40060, 0x8fb3005c, 0x8fb20058, 0x8fb10054, 0x8fb00050, 0x3e00008, -0x27bd0078, 0x27bdffb0, 0xafb50044, 0xa821, 0xafb00030, 0x8021, -0xafbf004c, 0xafb60048, 0xafb40040, 0xafb3003c, 0xafb20038, 0xafb10034, -0x8ee204c4, 0x24140001, 0x30420001, 0x1440002a, 0xb021, 0x8f8700e0, -0x8f8800c4, 0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, 0x24841000, -0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc, 0x1021, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8, -0x3c02000a, 0x3442efff, 0x1032023, 0x44102b, 0x10400003, 0x3c02000a, -0x3442f000, 0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4, -0xaf8800c8, 0xaf8700e4, 0x8003840, 0xaf8700e8, 0x3c020001, 0x571021, -0x904283b0, 0x1040000b, 0x0, 0x3c130001, 0x2779821, 0x8e7383b4, -0x3c110001, 0x2378821, 0x8e3183b8, 0x3c120001, 0x2579021, 0x80036d8, -0x8e5283bc, 0x8f8300e0, 0x8f8200e4, 0x10430007, 0x4821, 0x8f8200e4, -0x24090001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x1520000e, -0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, 0x3c040001, 0x24844be0, -0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f000, -0x8003840, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc, -0x621024, 0x10400058, 0x2408821, 0x3c020080, 0x621024, 0x1040000a, -0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8ee201ec, -0x24420001, 0xaee201ec, 0x800383a, 0x8ee201ec, 0x3c060004, 0x3c0b0001, -0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080, 0x3c080020, 0x34078000, -0x24420001, 0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021, -0xc3102b, 0x14400007, 0x0, 0x106b0011, 0x0, 0x106a0015, -0x0, 0x8003582, 0x42042, 0x10650023, 0xa3102b, 0x14400005, -0x0, 0x10690019, 0x0, 0x8003582, 0x42042, 0x10680021, -0x0, 0x8003582, 0x42042, 0x8ee20034, 0x24420001, 0xaee20034, -0x8ee20034, 0x8003582, 0x42042, 0x8ee201dc, 0x24420001, 0xaee201dc, -0x8ee201dc, 0x8003582, 0x42042, 0x8ee201e0, 0x24420001, 0xaee201e0, -0x8ee201e0, 0x8003582, 0x42042, 0x8ee201e4, 0x24420001, 0xaee201e4, -0x8ee201e4, 0x8003582, 0x42042, 0x8ee20030, 0x24420001, 0xaee20030, -0x8ee20030, 0x8003582, 0x42042, 0x8ee201e8, 0x24420001, 0xaee201e8, -0x8ee201e8, 0x42042, 0x108702b7, 0x0, 0x8003547, 0x0, -0x3c020001, 0x571021, 0x904283a2, 0x14400084, 0x24020001, 0x3c030001, -0x771821, 0x906383a3, 0x1462007f, 0x3c020100, 0x8e430000, 0x621024, -0x1040006f, 0x2402ffff, 0x14620005, 0x24100001, 0x96430004, 0x3402ffff, -0x10620075, 0x0, 0x92e204c8, 0x14400072, 0x0, 0x3c020001, -0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, 0x3c020001, -0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96260000, 0x520c0, -0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, 0x96220002, -0x14620005, 0x971021, 0x94437772, 0x96220004, 0x50620008, 0x24070001, -0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee, -0x520c0, 0x30e200ff, 0x1040027b, 0x0, 0x800360e, 0x0, -0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, 0x2e51021, -0x9442726c, 0x30424000, 0x1440026f, 0xb71021, 0x9443726e, 0x96220000, -0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96220002, 0x14620006, -0x418c0, 0xb71021, 0x94437272, 0x96220004, 0x10620035, 0x418c0, -0x2e31021, 0x9442726c, 0x30428000, 0x1440025c, 0x2e31021, 0x9448726c, -0x96270000, 0x828c0, 0xb71021, 0x9442736e, 0x80035f0, 0x3021, -0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x9448736c, 0x30638000, -0x14600010, 0x828c0, 0xb71021, 0x9442736e, 0x1447fff5, 0x1002021, -0xb71021, 0x94437370, 0x96220002, 0x5462fff1, 0x420c0, 0xb71021, -0x94437372, 0x96220004, 0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff, -0x1040023b, 0x0, 0x800360e, 0x0, 0x97430202, 0x96420000, -0x14620235, 0x0, 0x97430204, 0x96420002, 0x14620231, 0x0, -0x97430206, 0x96420004, 0x1462022d, 0x0, 0x92420000, 0x3a030001, -0x30420001, 0x431024, 0x10400074, 0x2402ffff, 0x8e230000, 0x14620004, -0x3402ffff, 0x96230004, 0x1062006f, 0x24140002, 0x3c020001, 0x571021, -0x904283a2, 0x1440006a, 0x24140003, 0x92e204c8, 0x14400067, 0x0, -0x3c020001, 0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, -0x3c020001, 0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96260000, -0x520c0, 0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, -0x96220002, 0x14620005, 0x971021, 0x94437772, 0x96220004, 0x50620008, -0x24070001, 0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, -0x5440ffee, 0x520c0, 0x30e200ff, 0x14400044, 0x24140003, 0x800383a, -0x0, 0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, -0x2e51021, 0x9442726c, 0x30424000, 0x144001ea, 0xb71021, 0x9443726e, -0x96220000, 0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96220002, -0x14620006, 0x418c0, 0xb71021, 0x94437272, 0x96220004, 0x10620027, -0x418c0, 0x2e31021, 0x9442726c, 0x30428000, 0x144001d7, 0x2e31021, -0x9448726c, 0x96270000, 0x828c0, 0xb71021, 0x9442736e, 0x8003675, -0x3021, 0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x9448736c, -0x30638000, 0x14600010, 0x828c0, 0xb71021, 0x9442736e, 0x1447fff5, -0x1002021, 0xb71021, 0x94437370, 0x96220002, 0x5462fff1, 0x420c0, -0xb71021, 0x94437372, 0x96220004, 0x5462ffec, 0x420c0, 0x24060001, -0x30c200ff, 0x104001b6, 0x0, 0x8003688, 0x24140003, 0x24140001, -0x8f420260, 0x53102b, 0x10400049, 0x0, 0x8f8300e4, 0x8f8200e0, -0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4, -0x2601821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, -0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, -0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010, -0x8f8200e4, 0x3c040001, 0x24844be8, 0xafa20014, 0x8fa60018, 0x8fa7001c, -0x3c050006, 0xc002403, 0x34a5f003, 0x8003840, 0x0, 0x8ee25230, -0xafa20010, 0x8ee25234, 0x3c040001, 0x24844bf4, 0xafa20014, 0x8ee60e00, -0x8ee70e08, 0xc002403, 0x34a5f002, 0x8ee201bc, 0x24420001, 0xaee201bc, -0x8ee20000, 0x8ee301bc, 0x2403ffbf, 0x431024, 0x80037e8, 0xaee20000, -0x8ee25230, 0xafa20010, 0x8ee25234, 0x3c040001, 0x24844bf4, 0xafa20014, -0x8ee60e00, 0x8ee70e08, 0x3c050006, 0xc002403, 0x34a5f002, 0x8ee201bc, -0x24420001, 0xaee201bc, 0x80037e8, 0x8ee201bc, 0x96e20468, 0x53102b, -0x54400001, 0x3c158000, 0x12600131, 0x3c0c001f, 0x358cffff, 0x8ee2723c, -0x8f430280, 0x24420001, 0x304203ff, 0x10620108, 0x0, 0x12a00014, -0x0, 0x8ee35230, 0x8ee25234, 0x10620009, 0x26ee5234, 0x8eeb5234, -0x8ee35234, 0x21140, 0x24425238, 0x2e28021, 0x24630001, 0x8003702, -0x306800ff, 0x92e27238, 0x1440ffc0, 0x3c050006, 0x8ee201d0, 0x24420001, -0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffcb, 0x26ee0e08, -0x8eeb0e08, 0xa821, 0x8ee30e08, 0x21140, 0x24420e10, 0x2e28021, -0x24630001, 0x306801ff, 0x96e2046a, 0x30420010, 0x10400017, 0x34028100, -0x9643000c, 0x14620014, 0x0, 0x3c020001, 0x571021, 0x904283b0, -0x1440000f, 0x0, 0x9642000e, 0xa6020016, 0x8e420008, 0x8e430004, -0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008, 0xae440004, 0x9602000e, -0x26310004, 0x24160001, 0x34420200, 0xa602000e, 0x9603000a, 0x2605021, -0x73102b, 0x10400002, 0x2606821, 0x605021, 0x2d42003d, 0x1040002a, -0x3821, 0x9623000c, 0x24020800, 0x54620027, 0xae110018, 0x3c020001, -0x571021, 0x904283b0, 0x54400022, 0xae110018, 0x26220017, 0x182102b, -0x10400013, 0x0, 0x3c02fff5, 0x511021, 0x90421017, 0x38430006, -0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x10600013, 0x26220010, -0x182102b, 0x1040000e, 0x0, 0x3c07fff5, 0xf13821, 0x94e71010, -0x800374e, 0x24e7000e, 0x92220017, 0x38430006, 0x2c630001, 0x38420011, -0x2c420001, 0x621825, 0x50600004, 0xae110018, 0x96270010, 0x24e7000e, -0xae110018, 0x3c020001, 0x571021, 0x904283b0, 0x2102b, 0x14e00002, -0x24ec0, 0x1403821, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, -0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, -0x14c20007, 0x2402000b, 0x8ee201a0, 0x4821, 0x24420001, 0xaee201a0, -0x80037af, 0x8ee201a0, 0x8e040000, 0x8e050004, 0xac620018, 0x1751025, -0x491025, 0xac710008, 0xa467000e, 0xac62001c, 0xac640000, 0xac650004, -0x8ee204b0, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400038, 0x24090001, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007, -0x14620020, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001c, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee34e24, 0x8ee54e20, 0x24020040, -0x24630001, 0x10620007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005, -0x0, 0x8003799, 0x0, 0x14a00005, 0x0, 0x8f820128, -0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, -0xac800000, 0x80037af, 0x0, 0x8ee24e20, 0x24030040, 0x24420001, -0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, -0xac820004, 0x15200018, 0x3c050006, 0x8e020018, 0x3c040001, 0x24844c00, -0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021, 0xc002403, -0xafa30014, 0x32c200ff, 0x1040002b, 0x34028100, 0x8e430004, 0x8e440008, -0x8e45000c, 0xa642000c, 0xae430000, 0xae440004, 0xae450008, 0x96020016, -0x80037e8, 0xa642000e, 0x154d000a, 0x0, 0x9602000e, 0xa613000a, -0x34420004, 0xa602000e, 0x3c010001, 0x370821, 0xa02083b0, 0x80037e6, -0x9821, 0x9604000a, 0x93102b, 0x10400002, 0x2601821, 0x801821, -0x24020001, 0xa603000a, 0x3c010001, 0x370821, 0xa02283b0, 0x9604000a, -0x2248821, 0x191102b, 0x10400003, 0x3c02fff5, 0x34421000, 0x2228821, -0x2649823, 0xa821, 0x1660fef4, 0xadc80000, 0x12600021, 0x32c200ff, -0x3c010001, 0x370821, 0xac3383b4, 0x3c010001, 0x370821, 0xac3183b8, -0x3c010001, 0x370821, 0x10400008, 0xac3283bc, 0x3c020001, 0x571021, -0x8c4283bc, 0x24420004, 0x3c010001, 0x370821, 0xac2283bc, 0x8ee2723c, -0x8f430280, 0x24420001, 0x14620006, 0x0, 0x8ee201c0, 0x24420001, -0xaee201c0, 0x8003840, 0x8ee201c0, 0x8ee201b8, 0x24420001, 0xaee201b8, -0x8003840, 0x8ee201b8, 0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0, -0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, -0x24020002, 0xaee400c0, 0xaee500c4, 0x1282000f, 0x2a820003, 0x14400017, -0x24020003, 0x16820015, 0x0, 0x8ee200d0, 0x8ee300d4, 0x24630001, -0x2c640001, 0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x800383a, -0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001, 0x2c640001, 0x441021, -0xaee200d8, 0xaee300dc, 0x8ee200d8, 0x800383a, 0x8ee300dc, 0x8ee200c8, -0x8ee300cc, 0x24630001, 0x2c640001, 0x441021, 0xaee200c8, 0xaee300cc, -0x8ee200c8, 0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008, -0xaf8300e4, 0xaf8300e8, 0x8fbf004c, 0x8fb60048, 0x8fb50044, 0x8fb40040, -0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, 0x27bd0050, -0x27bdff90, 0xafb60060, 0xb021, 0xafbf0068, 0xafbe0064, 0xafb5005c, -0xafb40058, 0xafb30054, 0xafb20050, 0xafb1004c, 0xafb00048, 0x8ee204c4, -0x8821, 0x24150001, 0x30420001, 0x1440002a, 0xa3a0002f, 0x8f8700e0, -0x8f8800c4, 0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, 0x24841000, -0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc, 0x1021, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8, -0x3c02000a, 0x3442efff, 0x1032023, 0x44102b, 0x10400003, 0x3c02000a, -0x3442f000, 0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4, -0xaf8800c8, 0xaf8700e4, 0x8003c4b, 0xaf8700e8, 0x3c020001, 0x571021, -0x904283b0, 0x1040000b, 0x0, 0x3c130001, 0x2779821, 0x8e7383b4, -0x3c100001, 0x2178021, 0x8e1083b8, 0x3c120001, 0x2579021, 0x8003a49, -0x8e5283bc, 0x8f8300e0, 0x8f8200e4, 0x10430007, 0x3821, 0x8f8200e4, -0x24070001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x14e0000e, -0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, 0x3c040001, 0x24844c24, -0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f200, -0x8003c4b, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc, -0x621024, 0x10400058, 0x2408021, 0x3c020080, 0x621024, 0x1040000a, -0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8ee201ec, -0x24420001, 0xaee201ec, 0x8003c45, 0x8ee201ec, 0x3c060004, 0x3c0b0001, -0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080, 0x3c080020, 0x34078000, -0x24420001, 0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021, -0xc3102b, 0x14400007, 0x0, 0x106b0011, 0x0, 0x106a0015, -0x0, 0x8003906, 0x42042, 0x10650023, 0xa3102b, 0x14400005, -0x0, 0x10690019, 0x0, 0x8003906, 0x42042, 0x10680021, -0x0, 0x8003906, 0x42042, 0x8ee20034, 0x24420001, 0xaee20034, -0x8ee20034, 0x8003906, 0x42042, 0x8ee201dc, 0x24420001, 0xaee201dc, -0x8ee201dc, 0x8003906, 0x42042, 0x8ee201e0, 0x24420001, 0xaee201e0, -0x8ee201e0, 0x8003906, 0x42042, 0x8ee201e4, 0x24420001, 0xaee201e4, -0x8ee201e4, 0x8003906, 0x42042, 0x8ee20030, 0x24420001, 0xaee20030, -0x8ee20030, 0x8003906, 0x42042, 0x8ee201e8, 0x24420001, 0xaee201e8, -0x8ee201e8, 0x42042, 0x1087033e, 0x0, 0x80038cb, 0x0, -0x3c020001, 0x571021, 0x904283a2, 0x14400084, 0x24020001, 0x3c030001, -0x771821, 0x906383a3, 0x1462007f, 0x3c020100, 0x8e430000, 0x621024, -0x1040006f, 0x2402ffff, 0x14620005, 0x24110001, 0x96430004, 0x3402ffff, -0x10620075, 0x0, 0x92e204c8, 0x14400072, 0x0, 0x3c020001, -0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, 0x3c020001, -0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96060000, 0x520c0, -0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, 0x96020002, -0x14620005, 0x971021, 0x94437772, 0x96020004, 0x50620008, 0x24070001, -0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee, -0x520c0, 0x30e200ff, 0x10400302, 0x0, 0x8003992, 0x0, -0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, 0x2e51021, -0x9442726c, 0x30424000, 0x144002f6, 0xb71021, 0x9443726e, 0x96020000, -0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96020002, 0x14620006, -0x418c0, 0xb71021, 0x94437272, 0x96020004, 0x10620035, 0x418c0, -0x2e31021, 0x9442726c, 0x30428000, 0x144002e3, 0x2e31021, 0x944d726c, -0x96070000, 0xd28c0, 0xb71021, 0x9442736e, 0x8003974, 0x3021, -0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x944d736c, 0x30638000, -0x14600010, 0xd28c0, 0xb71021, 0x9442736e, 0x1447fff5, 0x1a02021, -0xb71021, 0x94437370, 0x96020002, 0x5462fff1, 0x420c0, 0xb71021, -0x94437372, 0x96020004, 0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff, -0x104002c2, 0x0, 0x8003992, 0x0, 0x97430202, 0x96420000, -0x146202bc, 0x0, 0x97430204, 0x96420002, 0x146202b8, 0x0, -0x97430206, 0x96420004, 0x146202b4, 0x0, 0x92420000, 0x3a230001, -0x30420001, 0x431024, 0x10400074, 0x2402ffff, 0x8e030000, 0x14620004, -0x3402ffff, 0x96030004, 0x1062006f, 0x24150002, 0x3c020001, 0x571021, -0x904283a2, 0x1440006a, 0x24150003, 0x92e204c8, 0x14400067, 0x0, -0x3c020001, 0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, -0x3c020001, 0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96060000, -0x520c0, 0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, -0x96020002, 0x14620005, 0x971021, 0x94437772, 0x96020004, 0x50620008, -0x24070001, 0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, -0x5440ffee, 0x520c0, 0x30e200ff, 0x14400044, 0x24150003, 0x8003c45, -0x0, 0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, -0x2e51021, 0x9442726c, 0x30424000, 0x14400271, 0xb71021, 0x9443726e, -0x96020000, 0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96020002, -0x14620006, 0x418c0, 0xb71021, 0x94437272, 0x96020004, 0x10620027, -0x418c0, 0x2e31021, 0x9442726c, 0x30428000, 0x1440025e, 0x2e31021, -0x944d726c, 0x96070000, 0xd28c0, 0xb71021, 0x9442736e, 0x80039f9, -0x3021, 0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x944d736c, -0x30638000, 0x14600010, 0xd28c0, 0xb71021, 0x9442736e, 0x1447fff5, -0x1a02021, 0xb71021, 0x94437370, 0x96020002, 0x5462fff1, 0x420c0, -0xb71021, 0x94437372, 0x96020004, 0x5462ffec, 0x420c0, 0x24060001, -0x30c200ff, 0x1040023d, 0x0, 0x8003a0c, 0x24150003, 0x24150001, -0x8f420260, 0x53102b, 0x10400036, 0x0, 0x8f8300e4, 0x8f8200e0, -0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4, -0x2601821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, -0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, -0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010, -0x8f8200e4, 0x3c040001, 0x24844c30, 0xafa20014, 0x8fa60018, 0x8fa7001c, -0x3c050006, 0xc002403, 0x34a5f203, 0x8003c4b, 0x0, 0x8ee25230, -0xafa20010, 0x8ee25234, 0x3c040001, 0x24844c3c, 0xafa20014, 0x8ee60e00, -0x8ee70e08, 0x3c050006, 0xc002403, 0x34a5f202, 0x8ee201bc, 0x24420001, -0xaee201bc, 0x8003bf2, 0x8ee201bc, 0x96e20468, 0x53102b, 0x54400001, -0x3c168000, 0x126001cb, 0x3c0e001f, 0x35ceffff, 0x3c0ffff5, 0x35ef1000, -0x241e0040, 0x8ee2723c, 0x8f430280, 0x24420001, 0x304203ff, 0x1062019e, -0x0, 0x12c00012, 0x0, 0x8ee35230, 0x8ee25234, 0x1062000a, -0x26f85234, 0x8ef45234, 0xafb80024, 0x8ee35234, 0x21140, 0x24425238, -0x2e28821, 0x24630001, 0x8003a75, 0x306d00ff, 0x8ee201d0, 0x24420001, -0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffca, 0x26f80e08, -0x8ef40e08, 0xb021, 0xafb80024, 0x8ee30e08, 0x21140, 0x24420e10, -0x2e28821, 0x24630001, 0x306d01ff, 0x96e2046a, 0x30420010, 0x10400018, -0x34028100, 0x9643000c, 0x14620015, 0x0, 0x3c020001, 0x571021, -0x904283b0, 0x14400010, 0x0, 0x9642000e, 0xa6220016, 0x8e420008, -0x8e430004, 0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008, 0xae440004, -0x9622000e, 0x26100004, 0x24180001, 0xa3b8002f, 0x34420200, 0xa622000e, -0x8e220000, 0x8e230004, 0x3c040001, 0x34843800, 0x2003021, 0x306a0007, -0x20a8023, 0x3641021, 0x202102b, 0x10400005, 0x26a9821, 0x2041023, -0x3621823, 0x3c020020, 0x438023, 0x26620007, 0x9623000a, 0x2418fff8, -0x58c824, 0x6a1821, 0x79102b, 0x10400002, 0x3206021, 0x606021, -0x1801821, 0x24620007, 0x2418fff8, 0x586024, 0x26c102b, 0x14400004, -0x1932823, 0x1832823, 0x8003ab3, 0xc31021, 0xd31021, 0x4a2023, -0x1c4102b, 0x54400001, 0x8f2021, 0x25420040, 0x4c102b, 0x14400035, -0x5821, 0x94c3000c, 0x24020800, 0x54620032, 0xae260018, 0x3c020001, -0x571021, 0x904283b0, 0x5440002d, 0xae260018, 0x24c20017, 0x1c2102b, -0x10400013, 0x0, 0x3c02fff5, 0x461021, 0x90421017, 0x38430006, -0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x10600014, 0x24c20010, -0x1c2102b, 0x1040000e, 0x0, 0x3c0bfff5, 0x1665821, 0x956b1010, -0x8003ae4, 0x2562000e, 0x90c20017, 0x38430006, 0x2c630001, 0x38420011, -0x2c420001, 0x621825, 0x10600005, 0x1601821, 0x94cb0010, 0x2562000e, -0x4a5821, 0x1601821, 0x24620007, 0x2418fff8, 0x585824, 0xc31021, -0x4a2023, 0x1c4102b, 0x10400002, 0x1632823, 0x8f2021, 0xae260018, -0x3c020001, 0x571021, 0x904283b0, 0x2102b, 0x216c0, 0x15600002, -0xafa20044, 0x1805821, 0x30820001, 0x10400007, 0x4021, 0x90880000, -0x24840001, 0x1c4102b, 0x10400002, 0x24a5ffff, 0x8f2021, 0x50a00012, -0x81c02, 0x2ca20002, 0x54400009, 0x24a5ffff, 0x94820000, 0x24840002, -0x1024021, 0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b11, 0x8f2021, -0x90820000, 0x21200, 0x1024021, 0x14a0fff2, 0x2ca20002, 0x81c02, -0x3102ffff, 0x624021, 0x3108ffff, 0x1402821, 0x11400011, 0x2002021, -0x2ca20002, 0x54400009, 0x24a5ffff, 0x94820000, 0x24840002, 0x1024021, -0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b28, 0x8f2021, 0x90820000, -0x21200, 0x1024021, 0x14a0fff2, 0x2ca20002, 0x81c02, 0x3102ffff, -0x624021, 0x81c02, 0x3102ffff, 0x8f890120, 0x624021, 0x27623800, -0x25230020, 0x62102b, 0x14400002, 0x3108ffff, 0x27633000, 0x8f820128, -0x10620004, 0x0, 0x8f820124, 0x14620007, 0x1402821, 0x8ee201a0, -0x3821, 0x24420001, 0xaee201a0, 0x8003bb9, 0x8ee201a0, 0x8e260000, -0x8e270004, 0x81400, 0x3448000b, 0xad300008, 0xa52b000e, 0xad280018, -0x8fb80044, 0x2021, 0x2961025, 0x581025, 0xad22001c, 0xe5102b, -0xe53823, 0xc43023, 0xc23023, 0xad260000, 0xad270004, 0x8ee204b0, -0xad220010, 0xaf830120, 0x92e24e10, 0x1440005f, 0x24070001, 0x2502ffee, -0x2c420002, 0x14400003, 0x24020011, 0x15020024, 0x0, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462000f, -0x0, 0x8ee34e20, 0x8ee24e24, 0x1062000b, 0x0, 0x8c820004, -0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x105e002a, -0x0, 0x8003b98, 0x0, 0x8ee24e20, 0x24420001, 0x505e0003, -0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x8003bb6, 0x24020012, 0x8ee24e20, 0x210c0, -0x24425028, 0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, -0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, 0x24420001, -0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x105e0007, 0x0, -0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8003ba4, 0x0, -0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, -0x8c820004, 0x2c420011, 0x50400012, 0xac800000, 0x8003bb9, 0x0, -0x8ee24e20, 0x24420001, 0x505e0003, 0x1021, 0x8ee24e20, 0x24420001, -0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, -0xac820000, 0x24020001, 0xac820004, 0x14e00019, 0x3c050006, 0x3c040001, -0x24844c00, 0x8e220018, 0x34a5f209, 0xafa20010, 0x8e220000, 0x8e230004, -0x2203021, 0x1603821, 0xc002403, 0xafa30014, 0x93a2002f, 0x1040002a, -0x34028100, 0x8e430004, 0x8e440008, 0x8e45000c, 0xa642000c, 0xae430000, -0xae440004, 0xae450008, 0x96220016, 0x8003bf2, 0xa642000e, 0x1599000a, -0x26a1823, 0x9622000e, 0xa623000a, 0x34420004, 0xa622000e, 0x3c010001, -0x370821, 0xa02083b0, 0x8003bef, 0x9821, 0x9624000a, 0x83102b, -0x54400001, 0x801821, 0x24020001, 0xa623000a, 0x3c010001, 0x370821, -0xa02283b0, 0x9622000a, 0x4a1821, 0x2038021, 0x1d0102b, 0x54400001, -0x20f8021, 0x2639823, 0xb021, 0x8fb80024, 0x1660fe5e, 0xaf0d0000, -0x12600022, 0x0, 0x3c010001, 0x370821, 0xac3383b4, 0x3c010001, -0x370821, 0xac3083b8, 0x3c010001, 0x370821, 0xac3283bc, 0x93a2002f, -0x10400008, 0x0, 0x3c020001, 0x571021, 0x8c4283bc, 0x24420004, -0x3c010001, 0x370821, 0xac2283bc, 0x8f430280, 0x8ee2723c, 0x14620006, -0x0, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x8003c4b, 0x8ee201c0, -0x8ee201b8, 0x24420001, 0xaee201b8, 0x8003c4b, 0x8ee201b8, 0x97a4001e, -0x2484fffc, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0x24020002, 0xaee400c0, 0xaee500c4, -0x12a2000f, 0x2aa20003, 0x14400017, 0x24020003, 0x16a20015, 0x0, -0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001, 0x441021, 0xaee200d0, -0xaee300d4, 0x8ee200d0, 0x8003c45, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc, -0x24630001, 0x2c640001, 0x441021, 0xaee200d8, 0xaee300dc, 0x8ee200d8, -0x8003c45, 0x8ee300dc, 0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001, -0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8, 0x8ee300cc, 0x8f8300e4, -0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf0068, -0x8fbe0064, 0x8fb60060, 0x8fb5005c, 0x8fb40058, 0x8fb30054, 0x8fb20050, -0x8fb1004c, 0x8fb00048, 0x3e00008, 0x27bd0070, 0x27bdffe0, 0xafbf0018, -0x8ee30e04, 0x8ee20dfc, 0x10620074, 0x0, 0x8ee30dfc, 0x8ee20e04, -0x622023, 0x4820001, 0x24840200, 0x8ee30e08, 0x8ee20e04, 0x43102b, -0x14400004, 0x24020200, 0x8ee30e04, 0x8003c6d, 0x431823, 0x8ee20e08, -0x8ee30e04, 0x431023, 0x2443ffff, 0x804821, 0x69102a, 0x54400001, -0x604821, 0x8f870100, 0x27623000, 0x24e80020, 0x102102b, 0x50400001, -0x27682800, 0x8f820108, 0x11020004, 0x0, 0x8f820104, 0x15020007, -0x1021, 0x8ee201a4, 0x2021, 0x24420001, 0xaee201a4, 0x8003caf, -0x8ee201a4, 0x8ee40e04, 0x42140, 0x801821, 0x8ee40460, 0x8ee50464, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, -0x8ee30e04, 0x91140, 0xa4e2000e, 0x24020002, 0xace20018, 0x31940, -0x24630e10, 0x2e31021, 0xace20008, 0x8ee20e04, 0xace2001c, 0x8ee204bc, -0xace20010, 0xaf880100, 0x92e204dc, 0x14400011, 0x24040001, 0x8ee24e18, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, -0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21821, 0x24020002, -0xac620000, 0x24020001, 0xac620004, 0x1480000e, 0x24030040, 0x8ee20e04, -0xafa20010, 0x8ee20e08, 0x3c050007, 0xafa20014, 0x8ee60dfc, 0x8ee70e00, -0x3c040001, 0x24844c44, 0xc002403, 0x34a5f001, 0x8003ccd, 0x0, -0x8ee204f0, 0x24420001, 0x50430003, 0x1021, 0x8ee204f0, 0x24420001, -0xaee204f0, 0x8ee204f0, 0x21080, 0x571021, 0xac4904f8, 0x8ee20e04, -0x491021, 0x304201ff, 0xaee20e04, 0x8ee30e04, 0x8ee20dfc, 0x14620005, -0x0, 0x8f820060, 0x2403fdff, 0x431024, 0xaf820060, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf0018, 0x8ee3522c, 0x8ee25228, -0x10620074, 0x0, 0x8ee35228, 0x8ee2522c, 0x622023, 0x4820001, -0x24840100, 0x8ee35234, 0x8ee2522c, 0x43102b, 0x14400004, 0x24020100, -0x8ee3522c, 0x8003cef, 0x431823, 0x8ee25234, 0x8ee3522c, 0x431023, -0x2443ffff, 0x804821, 0x69102a, 0x54400001, 0x604821, 0x8f870100, -0x27623000, 0x24e80020, 0x102102b, 0x50400001, 0x27682800, 0x8f820108, -0x11020004, 0x0, 0x8f820104, 0x15020007, 0x1021, 0x8ee201a4, -0x2021, 0x24420001, 0xaee201a4, 0x8003d31, 0x8ee201a4, 0x8ee4522c, -0x42140, 0x801821, 0x8ee40470, 0x8ee50474, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee3522c, 0x91140, -0xa4e2000e, 0x24020003, 0xace20018, 0x31940, 0x24635238, 0x2e31021, -0xace20008, 0x8ee2522c, 0xace2001c, 0x8ee204bc, 0xace20010, 0xaf880100, -0x92e204dc, 0x14400011, 0x24040001, 0x8ee24e18, 0x24030040, 0x24420001, -0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, -0x210c0, 0x24424e28, 0x2e21821, 0x24020003, 0xac620000, 0x24020001, -0xac620004, 0x1480000e, 0x24030040, 0x8ee2522c, 0xafa20010, 0x8ee25234, -0x3c050007, 0xafa20014, 0x8ee65228, 0x8ee75230, 0x3c040001, 0x24844c50, -0xc002403, 0x34a5f010, 0x8003d4f, 0x0, 0x8ee204f0, 0x24420001, -0x50430003, 0x1021, 0x8ee204f0, 0x24420001, 0xaee204f0, 0x8ee204f0, -0x21080, 0x571021, 0xac4904f8, 0x8ee2522c, 0x491021, 0x304200ff, -0xaee2522c, 0x8ee3522c, 0x8ee25228, 0x14620005, 0x0, 0x8f820060, -0x2403feff, 0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020, -0x8f820120, 0x8ee34e24, 0x8f820124, 0x8f860128, 0x24020040, 0x24630001, -0x50620003, 0x1021, 0x8ee24e24, 0x24420001, 0xaee24e24, 0x8ee24e24, -0x8ee44e24, 0x8ee34e20, 0x210c0, 0x24425028, 0x14830007, 0x2e22821, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8003d82, 0xaca00000, -0x8ee24e24, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e24, -0x24420001, 0x210c0, 0x24425028, 0x2e22821, 0x8ca20004, 0x8f830128, -0x21140, 0x621821, 0xaf830128, 0xaca00000, 0x8cc20018, 0x2443fffe, -0x2c620012, 0x10400008, 0x31080, 0x3c010001, 0x220821, 0x8c224c60, -0x400008, 0x0, 0x24020001, 0xaee24e14, 0x3e00008, 0x0, -0x27bdffc8, 0xafbf0030, 0xafb5002c, 0xafb40028, 0xafb30024, 0xafb20020, -0xafb1001c, 0xafb00018, 0x8f830128, 0x8f820124, 0x106202b0, 0x9821, -0x3c11001f, 0x3631ffff, 0x3c12fff5, 0x36521000, 0x24150012, 0x24140040, -0x8f8c0128, 0x8f820128, 0x24420020, 0xaf820128, 0x9182001b, 0x8f830128, -0x2443fffe, 0x2c620012, 0x1040029c, 0x31080, 0x3c010001, 0x220821, -0x8c224cb8, 0x400008, 0x0, 0x8f420218, 0x30420100, 0x10400007, -0x0, 0x95830016, 0x95820018, 0x621823, 0x31402, 0x431021, -0xa5820016, 0x8d82001c, 0x3c038000, 0x3044ffff, 0x436824, 0x3c030800, -0x431824, 0x11a00004, 0xad84001c, 0x41140, 0x8003dc8, 0x24425238, -0x41140, 0x24420e10, 0x2e25821, 0x9562000e, 0x3042fffc, 0x10600004, -0xa562000e, 0x95840016, 0x8003eb0, 0x0, 0x8d690018, 0x4021, -0x952a0000, 0x25290002, 0x95270000, 0x25290002, 0x95260000, 0x25290002, -0x95250000, 0x25290002, 0x95240000, 0x25290002, 0x95230000, 0x25290002, -0x95220000, 0x25290002, 0x1475021, 0x1465021, 0x1455021, 0x1445021, -0x1435021, 0x1425021, 0xa1c02, 0x3142ffff, 0x625021, 0xa1c02, -0x3142ffff, 0x625021, 0x96e2046a, 0x314effff, 0x30420002, 0x10400044, -0x5021, 0x25220014, 0x222102b, 0x10400014, 0x1201821, 0x2405000a, -0x2021, 0x223102b, 0x54400001, 0x721821, 0x94620000, 0x24630002, -0x24a5ffff, 0x14a0fff9, 0x822021, 0x41c02, 0x3082ffff, 0x622021, -0x41402, 0x3083ffff, 0x431021, 0x3042ffff, 0x8003e23, 0x1425021, -0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000, 0x25290002, -0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000, 0x25290002, -0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021, 0x1475021, -0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000, 0x95230002, -0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, 0x625021, -0xa1c02, 0x3142ffff, 0x625021, 0x3148ffff, 0x51000001, 0x3408ffff, -0x8d620018, 0x9443000c, 0x24020800, 0x54620005, 0xa5680010, 0x9562000e, -0x34420002, 0xa562000e, 0xa5680010, 0x96e2046a, 0x2821, 0x30420008, -0x14400056, 0x3021, 0x8d630018, 0x24620024, 0x222102b, 0x10400034, -0x24690010, 0x229102b, 0x54400001, 0x1324821, 0x95250000, 0x24690014, -0x229102b, 0x10400002, 0x24a5ffec, 0x1324821, 0x95220000, 0x30420fff, -0x14400003, 0x25290002, 0x8003e50, 0x24130001, 0x9821, 0xa03021, -0x229102b, 0x54400001, 0x1324821, 0x91220001, 0x25290002, 0xa22821, -0x229102b, 0x54400001, 0x1324821, 0x25290002, 0x229102b, 0x54400001, -0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001, -0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001, -0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001, -0x1324821, 0x95220000, 0x8003e89, 0xa22821, 0x94650010, 0x94620014, -0x24690016, 0x30420fff, 0x14400003, 0x24a5ffec, 0x8003e7c, 0x24130001, -0x9821, 0xa03021, 0x91230001, 0x25290004, 0x95220000, 0x25290002, -0x95240000, 0x25290002, 0xa32821, 0xa22821, 0x95220000, 0x95230002, -0xa42821, 0xa22821, 0xa32821, 0x51c02, 0x30a2ffff, 0x622821, -0x51c02, 0x30a2ffff, 0x622821, 0x96e2046a, 0x30420001, 0x1040001e, -0x2021, 0x95820016, 0x4e2023, 0x41402, 0x822021, 0x326200ff, -0x50400002, 0x862021, 0x852021, 0x41402, 0x822021, 0x3084ffff, -0x50800001, 0x3404ffff, 0x8d620018, 0x24430017, 0x223102b, 0x54400001, -0x721821, 0x90620000, 0x38430011, 0x2c630001, 0x38420006, 0x2c420001, -0x621825, 0x10600004, 0x0, 0x9562000e, 0x34420001, 0xa562000e, -0x9562000e, 0x240a0002, 0x30420004, 0x10400002, 0xa5640012, 0x240a0004, -0x8f880120, 0x27623800, 0x25090020, 0x122102b, 0x50400001, 0x27693000, -0x8f820128, 0x11220004, 0x0, 0x8f820124, 0x15220007, 0x24040020, -0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8003f3f, 0x8ee201a0, -0x8ee5723c, 0x8ee60480, 0x8ee70484, 0xad0b0008, 0xa504000e, 0xad0a0018, -0x52940, 0xa01821, 0x1021, 0xe33821, 0xe3202b, 0xc23021, -0xc43021, 0xad060000, 0xad070004, 0x8ee2723c, 0x4d1025, 0xad02001c, -0x8ee204b4, 0xad020010, 0xaf890120, 0x92e24e10, 0x14400060, 0x24100001, -0x2543ffee, 0x2c630002, 0x39420011, 0x2c420001, 0x621825, 0x10600024, -0x0, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x1455000f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062000b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x1054002b, 0x0, 0x8003f1e, 0x0, 0x8ee24e20, 0x24420001, -0x50540003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x24020001, 0x8003f3e, 0xac950000, -0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007, -0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x10540007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8003f2a, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400012, 0xac800000, -0x8003f3f, 0x0, 0x8ee24e20, 0x24420001, 0x50540003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x1600000d, -0x0, 0x8f820120, 0x3c040001, 0x24844ca8, 0xafa00014, 0xafa20010, -0x8d86001c, 0x8f870124, 0x3c050008, 0xc002403, 0x34a50001, 0x8004047, -0x0, 0x8ee2723c, 0x24420001, 0x304203ff, 0x11a00006, 0xaee2723c, -0x8ee201c8, 0x2442ffff, 0xaee201c8, 0x8003f5b, 0x8ee201c8, 0x8ee201c4, -0x2442ffff, 0xaee201c4, 0x8ee201c4, 0x8ee201cc, 0x2442ffff, 0xaee201cc, -0x8004047, 0x8ee201cc, 0x8f420240, 0x104000e5, 0x0, 0x8ee20e0c, -0x24420001, 0x8004047, 0xaee20e0c, 0x9582001e, 0xad82001c, 0x8f420240, -0x10400072, 0x0, 0x8ee20e0c, 0x24420001, 0xaee20e0c, 0x8f430240, -0x43102b, 0x144000d5, 0x0, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, -0xaee201a0, 0x8003fca, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, -0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, -0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, -0x92e24e10, 0x14400034, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x8c820000, 0x1455001f, 0x0, 0x8ee34e20, 0x8ee24e24, -0x1062001b, 0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, -0x8ee34e20, 0x24420001, 0x10540007, 0x0, 0x8ee24e24, 0x24420001, -0x10620005, 0x0, 0x8003fb6, 0x0, 0x14600005, 0x0, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, -0x50400011, 0xac800000, 0x8003fca, 0x0, 0x8ee24e20, 0x24420001, -0x50540003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, -0x210c0, 0x24425028, 0x2e22021, 0x24020001, 0xac950000, 0xac820004, -0x5600000b, 0x24100001, 0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, -0xafa20010, 0x8ee6723c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, -0x56000001, 0xaee00e0c, 0x8ee20184, 0x24420001, 0xaee20184, 0x8004040, -0x8ee20184, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, -0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007, -0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8004034, -0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, 0x8ee5049c, 0x2462001c, -0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000, -0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400034, -0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x1455001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x10540007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8004020, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400011, 0xac800000, -0x8004034, 0x0, 0x8ee24e20, 0x24420001, 0x50540003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0x24020001, 0xac950000, 0xac820004, 0x1600000b, 0x0, -0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010, 0x8ee6723c, -0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x8ee20170, 0x24420001, -0xaee20170, 0x8004047, 0x8ee20170, 0x24020001, 0xaee24e14, 0x8f830128, -0x8f820124, 0x1462fd58, 0x0, 0x8fbf0030, 0x8fb5002c, 0x8fb40028, -0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0038, -0x27bdffe8, 0x27840208, 0x27450200, 0x24060008, 0xafbf0014, 0xc00249a, -0xafb00010, 0x24040001, 0x24100001, 0x2402241f, 0xaf900210, 0xaf900200, -0xaf800204, 0xaf820214, 0x8f460248, 0x24030004, 0x3c020040, 0x3c010001, -0xac234ff8, 0x3c010001, 0xac234ffc, 0x3c010001, 0xac20509c, 0x3c010001, -0xac224ff4, 0x3c010001, 0xac234ffc, 0xc004eac, 0x24050004, 0xc004734, -0x0, 0x8ee20000, 0x3c03feff, 0x3463fffd, 0x431024, 0xaee20000, -0x3c023c00, 0xaf82021c, 0x3c010001, 0x370821, 0xac30839c, 0x8fbf0014, -0x8fb00010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c050008, 0x34a50400, -0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, 0x3c040001, 0x24844d60, -0xc002403, 0x3821, 0x8ee20270, 0x24420001, 0xaee20270, 0x8ee20270, -0x8f830200, 0x3c023f00, 0x621824, 0x8fbf0018, 0x3c020400, 0x3e00008, -0x27bd0020, 0x27bdffd8, 0xafbf0020, 0xafb1001c, 0xafb00018, 0x8f900220, -0x8ee20204, 0x3821, 0x24420001, 0xaee20204, 0x8ee20204, 0x3c020300, -0x2021024, 0x10400027, 0x3c110400, 0xc00428b, 0x0, 0x3c020100, -0x2021024, 0x10400007, 0x0, 0x8ee20208, 0x24420001, 0xaee20208, -0x8ee20208, 0x80040b6, 0x3c03fdff, 0x8ee2020c, 0x24420001, 0xaee2020c, -0x8ee2020c, 0x3c03fdff, 0x3463ffff, 0x3c0808ff, 0x3508ffff, 0x8ee20000, -0x3c040001, 0x24844d6c, 0x3c050008, 0x2003021, 0x431024, 0xaee20000, -0x8f820220, 0x3821, 0x3c030300, 0x481024, 0x431025, 0xaf820220, -0xafa00010, 0xc002403, 0xafa00014, 0x8004286, 0x0, 0x2111024, -0x1040001f, 0x3c024000, 0x8f830224, 0x24021402, 0x1462000b, 0x3c03fdff, -0x3c040001, 0x24844d78, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860224, -0x34a5ffff, 0xc002403, 0x3821, 0x3c03fdff, 0x8ee20000, 0x3463ffff, -0x2002021, 0x431024, 0xc004c08, 0xaee20000, 0x8ee20210, 0x24420001, -0xaee20210, 0x8ee20210, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, -0x8004285, 0x511025, 0x2021024, 0x10400142, 0x0, 0x8ee2021c, -0x24420001, 0xaee2021c, 0x8ee2021c, 0x8f820220, 0x3c0308ff, 0x3463ffff, -0x431024, 0x34420004, 0xaf820220, 0x8f830054, 0x8f820054, 0x80040fe, -0x24630002, 0x8f820054, 0x621023, 0x2c420003, 0x1440fffc, 0x0, -0x8f8600e0, 0x8f8400e4, 0x30c20007, 0x10400012, 0x0, 0x8f8300e4, -0x2402fff8, 0xc21024, 0x1043000d, 0x0, 0x8f820054, 0x8f8300e0, -0x14c30009, 0x24440050, 0x8f820054, 0x821023, 0x2c420051, 0x10400004, -0x0, 0x8f8200e0, 0x10c2fff9, 0x0, 0x8f820220, 0x3c0308ff, -0x3463fffd, 0x431024, 0xaf820220, 0x8f8600e0, 0x30c20007, 0x10400003, -0x2402fff8, 0xc23024, 0xaf8600e0, 0x8f8300c4, 0x3c02001f, 0x3442ffff, -0x24680008, 0x48102b, 0x10400003, 0x3c02fff5, 0x34421000, 0x1024021, -0x8f8b00c8, 0x8f850120, 0x8f840124, 0x8004135, 0x6021, 0x27623800, -0x82102b, 0x50400001, 0x27643000, 0x10a40010, 0x318200ff, 0x8c820018, -0x38430007, 0x2c630001, 0x3842000b, 0x2c420001, 0x621825, 0x5060fff3, -0x24840020, 0x8ee20230, 0x240c0001, 0x24420001, 0xaee20230, 0x8ee20230, -0x8c8b0008, 0x318200ff, 0x14400065, 0x0, 0x3c020001, 0x571021, -0x904283b0, 0x14400060, 0x0, 0x8f8400e4, 0xc41023, 0x218c3, -0x4620001, 0x24630200, 0x8f8900c4, 0x10600005, 0x24020001, 0x10620009, -0x0, 0x8004177, 0x0, 0x8ee20220, 0x1205821, 0x24420001, -0xaee20220, 0x80041ac, 0x8ee20220, 0x8ee20224, 0x3c05000a, 0x24420001, -0xaee20224, 0x8c8b0000, 0x34a5f000, 0x8ee20224, 0x12b1823, 0xa3102b, -0x54400001, 0x651821, 0x2c62233f, 0x14400040, 0x0, 0x8f8200e8, -0x24420008, 0xaf8200e8, 0x8f8200e8, 0x8f8200e4, 0x1205821, 0x24420008, -0xaf8200e4, 0x80041ac, 0x8f8200e4, 0x8ee20228, 0x3c03000a, 0x24420001, -0xaee20228, 0x8c840000, 0x3463f000, 0x8ee20228, 0x883823, 0x67102b, -0x54400001, 0xe33821, 0x3c020003, 0x34420d40, 0x47102b, 0x10400003, -0x0, 0x80041ac, 0x805821, 0x8f8200e4, 0x24440008, 0xaf8400e4, -0x8f8400e4, 0x10860018, 0x3c05000a, 0x34a5f000, 0x3c0a0003, 0x354a0d40, -0x8ee2007c, 0x24420001, 0xaee2007c, 0x8c830000, 0x8ee2007c, 0x683823, -0xa7102b, 0x54400001, 0xe53821, 0x147102b, 0x54400007, 0x605821, -0x8f8200e4, 0x24440008, 0xaf8400e4, 0x8f8400e4, 0x1486ffef, 0x0, -0x14860005, 0x0, 0x1205821, 0xaf8600e4, 0x80041ac, 0xaf8600e8, -0xaf8400e4, 0xaf8400e8, 0x8f8200c8, 0x3c03000a, 0x3463f000, 0x483823, -0x67102b, 0x54400001, 0xe33821, 0x3c020003, 0x34420d3f, 0x47102b, -0x54400007, 0x6021, 0x1683823, 0x67102b, 0x54400003, 0xe33821, -0x80041bf, 0x3c020003, 0x3c020003, 0x34420d3f, 0x47102b, 0x14400016, -0x318200ff, 0x14400006, 0x0, 0x3c020001, 0x571021, 0x904283b0, -0x1040000f, 0x0, 0x8ee2022c, 0x3c04fdff, 0x8ee30000, 0x3484ffff, -0x24420001, 0xaee2022c, 0x8ee2022c, 0x24020001, 0x641824, 0x3c010001, -0x370821, 0xa02283a8, 0x800421c, 0xaee30000, 0xaf8b00c8, 0x8f8300c8, -0x8f8200c4, 0x3c04000a, 0x3484f000, 0x623823, 0x87102b, 0x54400001, -0xe43821, 0x3c020003, 0x34420d40, 0x47102b, 0x2ce30001, 0x431025, -0x10400008, 0x0, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, -0x3c034000, 0x431025, 0xaf820220, 0x8f8600e0, 0x8f8400e4, 0x10c4002a, -0x0, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x24c2fff8, -0xaf8200e0, 0x3c020001, 0x8c427140, 0x3c030008, 0x8f8600e0, 0x431024, -0x1040001d, 0x0, 0x10c4001b, 0x240dfff8, 0x3c0a000a, 0x354af000, -0x3c0c0080, 0x24850008, 0x27622800, 0x50a20001, 0x27651800, 0x8c880004, -0x8c820000, 0x8ca90000, 0x3103ffff, 0x431021, 0x4d1024, 0x24430010, -0x6b102b, 0x54400001, 0x6a1821, 0x12b102b, 0x54400001, 0x12a4821, -0x10690002, 0x10c1025, 0xac820004, 0xa02021, 0x14c4ffeb, 0x24850008, -0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420002, 0xaf820220, -0x8f830054, 0x8f820054, 0x8004227, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb, -0x431024, 0xaf820220, 0x6010055, 0x0, 0x8ee20218, 0x24420001, -0xaee20218, 0x8ee20218, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, -0x34420004, 0xaf820220, 0x8f830054, 0x8f820054, 0x8004241, 0x24630002, -0x8f820054, 0x621023, 0x2c420003, 0x1440fffc, 0x0, 0x8f8600e0, -0x30c20007, 0x10400012, 0x0, 0x8f8300e4, 0x2402fff8, 0xc21024, -0x1043000d, 0x0, 0x8f820054, 0x8f8300e0, 0x14c30009, 0x24440032, -0x8f820054, 0x821023, 0x2c420033, 0x10400004, 0x0, 0x8f8200e0, -0x10c2fff9, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffd, 0x431024, -0xaf820220, 0x8f8600e0, 0x30c20007, 0x10400003, 0x2402fff8, 0xc23024, -0xaf8600e0, 0x240301f5, 0x8f8200e8, 0x673823, 0x718c0, 0x431021, -0xaf8200e8, 0x8f8200e8, 0xaf8200e4, 0x8ee2007c, 0x3c0408ff, 0x3484ffff, -0x471021, 0xaee2007c, 0x8f820220, 0x3c038000, 0x34630002, 0x441024, -0x431025, 0xaf820220, 0x8f830054, 0x8f820054, 0x800427d, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820220, -0x3c0308ff, 0x3463fffb, 0x431024, 0xaf820220, 0x8fbf0020, 0x8fb1001c, -0x8fb00018, 0x3e00008, 0x27bd0028, 0x3c020001, 0x8c42500c, 0x27bdffd8, -0x10400012, 0xafbf0020, 0x3c040001, 0x24844d84, 0x3c050008, 0x24020001, -0x3c010001, 0x370821, 0xac22839c, 0xafa00010, 0xafa00014, 0x8f860220, -0x34a50498, 0x3c010001, 0xac20500c, 0x3c010001, 0xac225000, 0xc002403, -0x3821, 0x8f420268, 0x3c037fff, 0x3463ffff, 0x431024, 0xaf420268, -0x8ee204c0, 0x8ee404c4, 0x2403fffe, 0x431024, 0x30840002, 0x1080011e, -0xaee204c0, 0x8ee204c4, 0x2403fffd, 0x431024, 0xaee204c4, 0x8f820044, -0x3c030600, 0x34632000, 0x34420020, 0xaf820044, 0xafa30018, 0x8ee205f8, -0x8f430228, 0x24420001, 0x304a00ff, 0x514300fe, 0xafa00010, 0x8ee205f8, -0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, -0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, -0x5821, 0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, -0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, -0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, -0x8ee201a0, 0x2821, 0x24420001, 0xaee201a0, 0x800432d, 0x8ee201a0, -0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, -0xa4f8000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, -0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, -0x24050001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x800431a, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, -0x800432d, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0xac8d0000, 0xac8e0004, 0x54a00006, 0x240b0001, 0x8f820054, -0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, -0x54620079, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, -0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011, -0x24080012, 0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020, -0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, -0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x2821, 0x24420001, -0xaee201a0, 0x8004399, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, -0x8ee50494, 0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000, -0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, -0x24050001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, -0x1448001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, -0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, -0x10470007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, -0x8004386, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, -0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, -0x8004399, 0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021, -0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, -0x2e22021, 0xac880000, 0xac8a0004, 0x54a00006, 0x240b0001, 0x8f820054, -0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, -0x54620003, 0xafa00010, 0x80043c6, 0x0, 0x3c040001, 0x24844d90, -0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, -0x80043c6, 0x0, 0x3c040001, 0x24844d9c, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80043c6, 0x0, -0x3c040001, 0x24844da8, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, -0xc002403, 0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, -0x8ee20158, 0x24420001, 0xaee20158, 0x8ee20158, 0x8fbf0020, 0x3e00008, -0x27bd0028, 0x3c020001, 0x8c42500c, 0x27bdffe0, 0x1440000d, 0xafbf0018, -0x3c040001, 0x24844db4, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220, -0x34a50499, 0x24020001, 0x3c010001, 0xac22500c, 0xc002403, 0x3821, -0x8ee204c0, 0x3c030001, 0x771821, 0x946383a2, 0x34420001, 0x10600007, -0xaee204c0, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, -0xaf820220, 0x24040001, 0xc004fb3, 0x24050004, 0xaf420268, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x3c120001, 0x26521100, -0x3c140001, 0x8e944f80, 0x3c100001, 0x26101020, 0x3c15c000, 0x36b50060, -0x8e8a0000, 0x8eb30000, 0x26a400b, 0x248000a, 0x200f821, 0x0, -0xd, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x80014d6, 0x0, 0x80014d8, 0x3c0a0001, -0x80014d8, 0x3c0a0002, 0x80014d8, 0x0, 0x80024a6, 0x0, -0x80014d8, 0x3c0a0003, 0x80014d8, 0x3c0a0004, 0x8002f7c, 0x0, -0x80014d8, 0x3c0a0005, 0x8003cd8, 0x0, 0x8003c56, 0x0, -0x80014d8, 0x3c0a0006, 0x80014d8, 0x3c0a0007, 0x80014d8, 0x0, -0x80014d8, 0x0, 0x80014d8, 0x0, 0x8002a75, 0x0, -0x80014d8, 0x3c0a000b, 0x80014d8, 0x3c0a000c, 0x80014d8, 0x3c0a000d, -0x8002378, 0x0, 0x8002335, 0x0, 0x80014d8, 0x3c0a000e, -0x8001b38, 0x0, 0x80024a4, 0x0, 0x80014d8, 0x3c0a000f, -0x8004097, 0x0, 0x8004081, 0x0, 0x80014d8, 0x3c0a0010, -0x80014ee, 0x0, 0x80014d8, 0x3c0a0011, 0x80014d8, 0x3c0a0012, -0x80014d8, 0x3c0a0013, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x3c030001, 0x34633800, -0x24050080, 0x2404001f, 0x2406ffff, 0x24020001, 0xaf80021c, 0xaf820200, -0xaf820220, 0x3631021, 0xaf8200c0, 0x3631021, 0xaf8200c4, 0x3631021, -0xaf8200c8, 0x27623800, 0xaf8200d0, 0x27623800, 0xaf8200d4, 0x27623800, -0xaf8200d8, 0x27621800, 0xaf8200e0, 0x27621800, 0xaf8200e4, 0x27621800, -0xaf8200e8, 0x27621000, 0xaf8200f0, 0x27621000, 0xaf8200f4, 0x27621000, -0xaf8200f8, 0xaca00000, 0x2484ffff, 0x1486fffd, 0x24a50004, 0x8f830040, -0x3c02f000, 0x621824, 0x3c025000, 0x1062000c, 0x43102b, 0x14400006, -0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x80044f9, 0x0, -0x10620004, 0x24020800, 0x80044f9, 0x0, 0x24020700, 0x3c010001, -0xac225010, 0x3e00008, 0x0, 0x27bdffd0, 0xafbf0028, 0x3c010001, -0xc004be5, 0xac204ff8, 0x24040001, 0x2821, 0x27a60020, 0x34028000, -0xc004802, 0xa7a20020, 0x8f830054, 0x8f820054, 0x800450b, 0x24630064, -0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, -0xc0047c0, 0x27a60020, 0x8f830054, 0x8f820054, 0x8004517, 0x24630064, -0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, -0xc0047c0, 0x27a60020, 0x8f830054, 0x8f820054, 0x8004523, 0x24630064, -0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050002, -0xc0047c0, 0x27a60018, 0x8f830054, 0x8f820054, 0x800452f, 0x24630064, -0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050003, -0xc0047c0, 0x27a6001a, 0x97a20020, 0x10400022, 0x24030001, 0x3c020001, -0x8c424ff8, 0x97a30018, 0x34420001, 0x3c010001, 0xac224ff8, 0x24020015, -0x14620008, 0x3402f423, 0x97a3001a, 0x14620005, 0x24020003, 0x3c010001, -0xac2250ac, 0x8004562, 0x3c08fff0, 0x97a30018, 0x24027810, 0x1462000a, -0x24020002, 0x97a3001a, 0x24020001, 0x14620006, 0x24020002, 0x24020004, -0x3c010001, 0xac2250ac, 0x8004562, 0x3c08fff0, 0x3c010001, 0xac2250ac, -0x8004562, 0x3c08fff0, 0x3c020001, 0x8c424ff8, 0x3c010001, 0xac2350ac, -0x34420004, 0x3c010001, 0xac224ff8, 0x3c08fff0, 0x3508bdc0, 0x8f830054, -0x97a60018, 0x3c070001, 0x8ce750ac, 0x3c040001, 0x24844e20, 0x24020001, -0x3c010001, 0xac225000, 0xafa60010, 0x3c060001, 0x8cc64ff8, 0x97a2001a, -0x3c05000d, 0x34a50100, 0x3c010001, 0xac204ffc, 0x681821, 0x3c010001, -0xac2350a4, 0xc002403, 0xafa20014, 0x8fbf0028, 0x3e00008, 0x27bd0030, -0x27bdffe8, 0x24070004, 0x3c040001, 0x8c844ffc, 0x3021, 0x24020001, -0x1482000a, 0xafbf0010, 0x3c020001, 0x8c42714c, 0x3c050004, 0x30428000, -0x1040000c, 0x34a593e0, 0x3c05000f, 0x8004595, 0x34a54240, 0x3c020001, -0x8c42714c, 0x3c05000f, 0x30428000, 0x10400003, 0x34a54240, 0x3c05001e, -0x34a58480, 0x3c020001, 0x8c4250a4, 0x8f830054, 0x451021, 0x431023, -0x45102b, 0x1440002e, 0x0, 0x3c020001, 0x8c425004, 0x1440002a, -0x2cc20001, 0x7182b, 0x431024, 0x1040001d, 0x0, 0x3c090001, -0x8d294ff8, 0x240b0001, 0x3c054000, 0x3c080001, 0x2508714c, 0x250afffc, -0x42042, 0x14800002, 0x24e7ffff, 0x24040008, 0x891024, 0x5040000b, -0x2cc20001, 0x148b0004, 0x0, 0x8d020000, 0x80045ba, 0x451024, -0x8d420000, 0x451024, 0x54400001, 0x24060001, 0x2cc20001, 0x7182b, -0x431024, 0x5440ffed, 0x42042, 0x3c010001, 0x10c00024, 0xac244ffc, -0x8f830054, 0x24020001, 0x3c010001, 0xac225000, 0x3c010001, 0xac2350a4, -0x3c020001, 0x8c425000, 0x10400006, 0x24020001, 0x3c010001, 0xac205000, -0x3c010001, 0x370821, 0xac22839c, 0x3c030001, 0x771821, 0x8c63839c, -0x24020008, 0x10620005, 0x24020001, 0xc0045ea, 0x0, 0x80045e7, -0x0, 0x3c030001, 0x8c634ffc, 0x10620007, 0x2402000e, 0x3c030001, -0x8c6370c0, 0x10620003, 0x0, 0xc004c08, 0x8f840220, 0x8fbf0010, -0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c02fdff, 0xafbf0018, 0x8ee30000, -0x3c050001, 0x8ca54ffc, 0x3c040001, 0x8c845014, 0x3442ffff, 0x621824, -0x14a40008, 0xaee30000, 0x3c030001, 0x771821, 0x8c63839c, 0x3c020001, -0x8c425018, 0x10620008, 0x0, 0x3c020001, 0x571021, 0x8c42839c, -0x3c010001, 0xac255014, 0x3c010001, 0xac225018, 0x3c030001, 0x8c634ffc, -0x24020002, 0x10620126, 0x2c620003, 0x10400005, 0x24020001, 0x10620008, -0x0, 0x800472e, 0x0, 0x24020004, 0x1062007c, 0x24020001, -0x800472f, 0x0, 0x3c020001, 0x571021, 0x8c42839c, 0x2443ffff, -0x2c620008, 0x10400117, 0x31080, 0x3c010001, 0x220821, 0x8c224e38, -0x400008, 0x0, 0xc004734, 0x0, 0x3c020001, 0x8c425008, -0x3c010001, 0xac204f90, 0x104000c5, 0x24020002, 0x3c010001, 0x370821, -0xac22839c, 0x3c010001, 0x8004731, 0xac205008, 0xc004843, 0x0, -0x3c030001, 0x8c635020, 0x24020011, 0x146200fd, 0x24020003, 0x80046b1, -0x0, 0x3c050001, 0x8ca54ffc, 0x3c060001, 0x8cc6714c, 0xc004eac, -0x24040001, 0x24020005, 0x3c010001, 0xac205008, 0x3c010001, 0x370821, -0x8004731, 0xac22839c, 0x3c040001, 0x24844e2c, 0x3c05000f, 0x34a50100, -0x3021, 0x3821, 0xafa00010, 0xc002403, 0xafa00014, 0x8004731, -0x0, 0x8f820220, 0x3c03f700, 0x431025, 0x80046d8, 0xaf820220, -0x8f820220, 0x3c030004, 0x431024, 0x14400095, 0x24020007, 0x8f830054, -0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023, 0x2c422710, 0x144000d1, -0x24020001, 0x800472f, 0x0, 0x3c050001, 0x8ca54ffc, 0xc004fb3, -0x24040001, 0xc005078, 0x24040001, 0x3c030001, 0x8c637144, 0x46100c3, -0x24020001, 0x3c020008, 0x621024, 0x10400006, 0x0, 0x8f820214, -0x3c03ffff, 0x431024, 0x800467a, 0x3442251f, 0x8f820214, 0x3c03ffff, -0x431024, 0x3442241f, 0xaf820214, 0x8ee20000, 0x3c030200, 0x431025, -0xaee20000, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, -0x34420002, 0xaf820220, 0x24020008, 0x3c010001, 0x370821, 0xc0043cd, -0xac22839c, 0x8004731, 0x0, 0x3c020001, 0x571021, 0x8c42839c, -0x2443ffff, 0x2c620008, 0x1040009e, 0x31080, 0x3c010001, 0x220821, -0x8c224e58, 0x400008, 0x0, 0xc00428b, 0x0, 0x3c010001, -0xac205000, 0xaf800204, 0x3c010001, 0xc004734, 0xac207110, 0x8f820044, -0x34428080, 0xaf820044, 0x8f830054, 0x3c010001, 0xac204f90, 0x80046da, -0x24020002, 0x8f830054, 0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023, -0x2c422710, 0x14400081, 0x24020003, 0x3c010001, 0x370821, 0x8004731, -0xac22839c, 0x3c020001, 0x8c427148, 0x30424000, 0x10400005, 0x0, -0x8f820044, 0x3c03ffff, 0x80046c0, 0x34637fff, 0x8f820044, 0x2403ff7f, -0x431024, 0xaf820044, 0x8f830054, 0x80046da, 0x24020004, 0x8f830054, -0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023, 0x2c422710, 0x14400065, -0x24020005, 0x3c010001, 0x370821, 0x8004731, 0xac22839c, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0xaf800204, 0x3c010001, 0xac207110, -0x8f830054, 0x24020006, 0x3c010001, 0x370821, 0xac22839c, 0x3c010001, -0x8004731, 0xac2350a0, 0x3c05fffe, 0x34a57960, 0x3c040001, 0x8f820054, -0x3c030001, 0x8c6350a0, 0x3484869f, 0x451021, 0x621823, 0x83202b, -0x10800046, 0x0, 0x24020007, 0x3c010001, 0x370821, 0x8004731, -0xac22839c, 0x8f820220, 0x3c04f700, 0x441025, 0xaf820220, 0x8f820220, -0x3c030300, 0x431024, 0x14400005, 0x1821, 0x8f820220, 0x24030001, -0x441025, 0xaf820220, 0x10600030, 0x24020001, 0x8f820214, 0x3c03ffff, -0x3c040001, 0x8c845098, 0x431024, 0x3442251f, 0xaf820214, 0x24020008, -0x3c010001, 0x370821, 0xac22839c, 0x10800007, 0x24020001, 0x3c010001, -0xac2270c0, 0xc004c08, 0x8f840220, 0x8004731, 0x0, 0x8f820220, -0x3c030008, 0x431024, 0x1440001a, 0x2402000e, 0x3c010001, 0xac2270c0, -0x8ee20000, 0x24040001, 0x3c030200, 0x431025, 0xc005078, 0xaee20000, -0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, 0x34420002, -0xc0043cd, 0xaf820220, 0x3c050001, 0x8ca54ffc, 0xc004fb3, 0x24040001, -0x8004731, 0x0, 0x24020001, 0x3c010001, 0xac225000, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x8f820200, 0x8f820220, 0x8f820220, 0x34420004, -0xaf820220, 0x8f820200, 0x3c060001, 0x8cc64ffc, 0x34420004, 0xaf820200, -0x24020002, 0x10c20048, 0x2cc20003, 0x10400005, 0x24020001, 0x10c20008, -0x0, 0x8004788, 0x0, 0x24020004, 0x10c20013, 0x24020001, -0x8004788, 0x0, 0x3c030001, 0x8c634fe8, 0x3c020001, 0x8c424ff4, -0x3c040001, 0x8c845010, 0x3c050001, 0x8ca54fec, 0xaf860200, 0xaf860220, -0x34630022, 0x441025, 0x451025, 0x34420002, 0x8004787, 0xaf830200, -0xaf820200, 0xaf820220, 0x8f820044, 0x3c030001, 0x8c635098, 0x34428080, -0xaf820044, 0x10600005, 0x3c033f00, 0x3c020001, 0x8c424fe0, 0x800477b, -0x346300e0, 0x8f8400f0, 0x276217f8, 0x14820002, 0x24850008, 0x27651000, -0x8f8200f4, 0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, 0x24424fa0, -0xac820000, 0xac830004, 0xaf8500f0, 0x3c020001, 0x8c424fe0, 0x3c033f00, -0x346300e2, 0x431025, 0xaf820200, 0x3c030001, 0x8c634fe4, 0x3c04f700, -0x3c020001, 0x8c424ff4, 0x3c050001, 0x8ca55010, 0x641825, 0x431025, -0x451025, 0xaf820220, 0x3e00008, 0x0, 0x8f820220, 0x3c030001, -0x8c634ffc, 0x34420004, 0xaf820220, 0x24020001, 0x1062000f, 0x0, -0x8f830054, 0x8f820054, 0x24630002, 0x621023, 0x2c420003, 0x10400011, -0x0, 0x8f820054, 0x621023, 0x2c420003, 0x1040000c, 0x0, -0x8004799, 0x0, 0x8f830054, 0x8f820054, 0x80047a5, 0x24630007, -0x8f820054, 0x621023, 0x2c420008, 0x1440fffc, 0x0, 0x8f8400e0, -0x30820007, 0x1040000d, 0x0, 0x8f820054, 0x8f8300e0, 0x14830009, -0x24450032, 0x8f820054, 0xa21023, 0x2c420033, 0x10400004, 0x0, -0x8f8200e0, 0x1082fff9, 0x0, 0x8f820220, 0x2403fffd, 0x431024, -0xaf820220, 0x3e00008, 0x0, 0x0, 0x27bdffd8, 0xafb20018, -0x809021, 0xafb3001c, 0xa09821, 0xafb10014, 0xc08821, 0xafb00010, -0x8021, 0xafbf0020, 0xa6200000, 0xc004bbf, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x24100010, -0x2501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fffa, 0x2501024, 0x24100010, 0x2701024, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x2701024, 0xc004be5, -0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005, -0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, -0x0, 0xc004be5, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, -0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb10014, -0x808821, 0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, 0xafb00010, -0x8021, 0xafbf0020, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, -0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x2301024, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, -0x2301024, 0x24100010, 0x2501024, 0x10400002, 0x2021, 0x24040001, -0xc004bbf, 0x108042, 0x1600fffa, 0x2501024, 0xc004bbf, 0x24040001, -0xc004bbf, 0x2021, 0x34108000, 0x96620000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0, -0xc004be5, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, -0x8fb00010, 0x3e00008, 0x27bd0028, 0x3c030001, 0x8c635020, 0x3c020001, -0x8c425064, 0x27bdffd8, 0xafbf0020, 0xafb1001c, 0x10620003, 0xafb00018, -0x3c010001, 0xac235064, 0x2463ffff, 0x2c620013, 0x10400349, 0x31080, -0x3c010001, 0x220821, 0x8c224e80, 0x400008, 0x0, 0xc004be5, -0x8021, 0x34028000, 0xa7a20010, 0x27b10010, 0xc004bbf, 0x24040001, -0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, -0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, -0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0xc004bbf, 0x2021, -0x108042, 0x1600fffc, 0x0, 0xc004bbf, 0x24040001, 0xc004bbf, -0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5, -0x0, 0x8004b98, 0x24020002, 0x27b10010, 0xa7a00010, 0x8021, -0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, -0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x24040001, -0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, -0xc004bbf, 0x2021, 0x108042, 0x1600fffc, 0x0, 0xc004be5, -0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005, -0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, -0x0, 0xc004be5, 0x0, 0x97a20010, 0x30428000, 0x144002dc, -0x24020003, 0x8004b98, 0x0, 0x24021200, 0xa7a20010, 0x27b10010, -0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, -0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0xc004bbf, 0x2021, 0x108042, 0x1600fffc, 0x0, -0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, -0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, -0x24020004, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, -0x2c420064, 0x1440029e, 0x24020002, 0x3c030001, 0x8c6350ac, 0x10620297, -0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, 0x24020004, -0x10620291, 0x2402000f, 0x8004b98, 0x24020011, 0x8004b98, 0x24020005, -0x24020014, 0xa7a20010, 0x27b10010, 0x8021, 0xc004bbf, 0x24040001, -0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, -0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, -0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020012, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020012, -0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, -0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, -0x24020006, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, -0x2c420064, 0x14400250, 0x24020007, 0x8004b98, 0x0, 0x24020006, -0xa7a20010, 0x27b10010, 0x8021, 0xc004bbf, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010, -0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fffa, 0x32020001, 0x24100010, 0x32020013, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020013, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, 0x501024, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, -0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, 0x24020008, -0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064, -0x1440020f, 0x24020009, 0x8004b98, 0x0, 0x27b10010, 0xa7a00010, -0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fffa, 0x32020018, 0xc004be5, 0x34108000, 0xc004be5, -0x0, 0xc004b9f, 0x0, 0x50400005, 0x108042, 0x96220000, -0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, 0xc004be5, -0x8021, 0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, 0xc004bbf, -0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, -0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, -0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, -0x32020018, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, -0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, -0x8004b8a, 0x2402000a, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, -0x431023, 0x2c420064, 0x1440019b, 0x2402000b, 0x8004b98, 0x0, -0x27b10010, 0xa7a00010, 0x8021, 0xc004bbf, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x24100010, -0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020017, 0xc004be5, -0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005, -0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, -0x0, 0xc004be5, 0x8021, 0x97a20010, 0x27b10010, 0x34420700, -0xa7a20010, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, -0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fffa, 0x32020017, 0xc004bbf, 0x24040001, 0xc004bbf, -0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5, -0x0, 0x8f830054, 0x8004b8a, 0x2402000c, 0x8f830054, 0x3c020001, -0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400127, 0x24020012, -0x8004b98, 0x0, 0x27b10010, 0xa7a00010, 0x8021, 0xc004bbf, -0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, -0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf, -0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, -0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, -0x32020014, 0xc004be5, 0x34108000, 0xc004be5, 0x0, 0xc004b9f, -0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, -0x108042, 0x1600fff7, 0x0, 0xc004be5, 0x8021, 0x97a20010, -0x27b10010, 0x34420010, 0xa7a20010, 0xc004bbf, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010, -0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020014, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, 0x501024, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, -0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, 0x24020013, -0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064, -0x144000b3, 0x2402000d, 0x8004b98, 0x0, 0x27b10010, 0xa7a00010, -0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, -0x24040001, 0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fffa, 0x32020018, 0xc004be5, 0x34108000, 0xc004be5, -0x0, 0xc004b9f, 0x0, 0x50400005, 0x108042, 0x96220000, -0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, 0xc004be5, -0x8021, 0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, 0xc004bbf, -0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, -0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, -0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, -0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, -0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, -0x32020018, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, -0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, -0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, -0x8004b8a, 0x2402000e, 0x24020840, 0xa7a20010, 0x27b10010, 0x8021, -0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, -0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, -0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021, -0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, -0x32020013, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, -0x1600fffa, 0x32020013, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, -0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001, -0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0, -0x8f830054, 0x24020010, 0x3c010001, 0xac225020, 0x3c010001, 0x8004b9a, -0xac2350a8, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, -0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, 0xac225020, -0x8fbf0020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0028, 0x8f850044, -0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, 0x8f840054, -0x8f820054, 0xa32824, 0x8004bab, 0x24840001, 0x8f820054, 0x821023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, -0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004bb9, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, -0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824, -0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, 0x3c030001, -0x431025, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004bd1, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044, -0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, 0x8f820054, -0x8004bdf, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, -0x0, 0x3e00008, 0x0, 0x8f820044, 0x3c03fff0, 0x3463ffff, -0x431024, 0xaf820044, 0x8f820044, 0x3c030001, 0x431025, 0xaf820044, -0x8f830054, 0x8f820054, 0x8004bf3, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, -0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004c01, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, -0x0, 0x0, 0x27bdffe8, 0xafbf0010, 0x3c030001, 0x771821, -0x8c63839c, 0x24020008, 0x1462021c, 0x803021, 0x3c020001, 0x8c425098, -0x14400033, 0x0, 0x8f850224, 0x38a30020, 0x2c630001, 0x38a20010, -0x2c420001, 0x621825, 0x1460000d, 0x38a30030, 0x2c630001, 0x38a20400, -0x2c420001, 0x621825, 0x14600007, 0x38a30402, 0x2c630001, 0x38a20404, -0x2c420001, 0x621825, 0x10600005, 0x0, 0xc00428b, 0x0, -0x8004c41, 0x2402000e, 0xc0043cd, 0x0, 0x3c050001, 0x8ca54ffc, -0xc004fb3, 0x24040001, 0x3c030001, 0x8c634ffc, 0x24020004, 0x14620005, -0x2403fffb, 0x3c020001, 0x8c424ff8, 0x8004c3d, 0x2403fff7, 0x3c020001, -0x8c424ff8, 0x431024, 0x3c010001, 0xac224ff8, 0x2402000e, 0x3c010001, -0xc00428b, 0xac2270c0, 0x8004e2b, 0x0, 0x8f820220, 0x3c030400, -0x431024, 0x10400027, 0x2403ffbf, 0x8f850224, 0x3c020001, 0x8c4270cc, -0xa32024, 0x431024, 0x1482000c, 0x0, 0x3c020001, 0x8c4270d0, -0x24420001, 0x3c010001, 0xac2270d0, 0x2c420002, 0x14400008, 0x24020001, -0x3c010001, 0x8004c61, 0xac2270f0, 0x3c010001, 0xac2070d0, 0x3c010001, -0xac2070f0, 0x3c020001, 0x8c4270f0, 0x10400006, 0x30a20040, 0x10400004, -0x24020001, 0x3c010001, 0x8004c6c, 0xac2270f4, 0x3c010001, 0xac2070f4, -0x3c010001, 0xac2570cc, 0x3c010001, 0x8004c7c, 0xac207100, 0x24020001, -0x3c010001, 0xac227100, 0x3c010001, 0xac2070f0, 0x3c010001, 0xac2070d0, -0x3c010001, 0xac2070f4, 0x3c010001, 0xac2070cc, 0x3c030001, 0x8c6370c0, -0x3c020001, 0x8c4270c4, 0x10620003, 0x3c020200, 0x3c010001, 0xac2370c4, -0xc21024, 0x10400007, 0x2463ffff, 0x8f820220, 0x24030001, 0x3c010001, -0xac235000, 0x8004e29, 0x3c03f700, 0x2c62000e, 0x10400198, 0x31080, -0x3c010001, 0x220821, 0x8c224ed0, 0x400008, 0x0, 0x8ee20000, -0x3c03fdff, 0x3463ffff, 0x431024, 0xaee20000, 0x3c010001, 0xac2070f0, -0x3c010001, 0xac2070d0, 0x3c010001, 0xac207100, 0x3c010001, 0xac2070cc, -0x3c010001, 0xac2070f4, 0x3c010001, 0xac2070e8, 0x3c010001, 0xac2070e0, -0xc00478a, 0xaf800224, 0x24020002, 0x3c010001, 0xac2270c0, 0xc00428b, -0x0, 0xaf800204, 0x8f820200, 0x2403fffd, 0x431024, 0xaf820200, -0x3c010001, 0xac207110, 0x8f830054, 0x3c020001, 0x8c4270e8, 0x24040001, -0x3c010001, 0xac2470fc, 0x24420001, 0x3c010001, 0xac2270e8, 0x2c420004, -0x3c010001, 0xac2370e4, 0x14400006, 0x24020003, 0x3c010001, 0xac245000, -0x3c010001, 0x8004e27, 0xac2070e8, 0x3c010001, 0x8004e27, 0xac2270c0, -0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0, 0x431023, 0x2c422710, -0x14400154, 0x24020004, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c040001, -0x8c84509c, 0x3c010001, 0xc004e2e, 0xac2070d8, 0x3c020001, 0x8c42710c, -0xaf820204, 0x8f820204, 0x30420030, 0x1440013c, 0x24020002, 0x3c030001, -0x8c63710c, 0x24020005, 0x3c010001, 0xac2270c0, 0x3c010001, 0x8004e27, -0xac237110, 0x3c020001, 0x8c4270f0, 0x10400139, 0x0, 0x3c020001, -0x8c4270cc, 0x10400135, 0x0, 0x3c010001, 0xac2270f8, 0x24020003, -0x3c010001, 0xac2270d0, 0x8004dba, 0x24020006, 0x3c010001, 0xac2070d8, -0x8f820204, 0x34420040, 0xaf820204, 0x3c020001, 0x8c427110, 0x24030007, -0x3c010001, 0xac2370c0, 0x34420040, 0x3c010001, 0xac227110, 0x3c020001, -0x8c4270f0, 0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x10400110, -0x24020002, 0x3c050001, 0x24a570d0, 0x8ca20000, 0x2c424e21, 0x1040010a, -0x24020002, 0x3c020001, 0x8c4270f4, 0x1040010f, 0x2404ffbf, 0x3c020001, -0x8c4270cc, 0x3c030001, 0x8c6370f8, 0x441024, 0x641824, 0x14430007, -0x24020001, 0x24020003, 0xaca20000, 0x24020008, 0x3c010001, 0x8004e27, -0xac2270c0, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c020001, 0x8c4270fc, -0x1040000c, 0x24020001, 0x3c040001, 0xc004e3b, 0x8c8470cc, 0x3c020001, -0x8c427118, 0x14400005, 0x24020001, 0x3c020001, 0x8c427114, 0x10400006, -0x24020001, 0x3c010001, 0xac225000, 0x3c010001, 0x8004e27, 0xac2070e8, -0x8f820204, 0x34420040, 0xaf820204, 0x3c020001, 0x8c427110, 0x3c030001, -0x8c6370e0, 0x34420040, 0x3c010001, 0xac227110, 0x3c020001, 0x8c4270cc, -0x2c630001, 0x318c0, 0x3c010001, 0xac2370e0, 0x30420008, 0x3c010001, -0xac2270dc, 0x8f830054, 0x24020009, 0x3c010001, 0xac2270c0, 0x3c010001, -0x8004e27, 0xac2370e4, 0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0, -0x431023, 0x2c422710, 0x144000b6, 0x0, 0x3c020001, 0x8c4270f0, -0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x104000b7, 0x24020002, -0x3c030001, 0x246370d0, 0x8c620000, 0x2c424e21, 0x104000b1, 0x24020002, -0x3c020001, 0x8c4270fc, 0x1040000e, 0x0, 0x3c020001, 0x8c4270cc, -0x3c010001, 0xac2070fc, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204, -0x30420080, 0x1440000c, 0x24020003, 0x8004da7, 0x2402000c, 0x3c020001, -0x8c4270cc, 0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080, -0x1040001f, 0x24020003, 0xac620000, 0x2402000a, 0x3c010001, 0xac2270c0, -0x3c040001, 0x24847108, 0x8c820000, 0x3c030001, 0x8c6370e0, 0x431025, -0xaf820204, 0x8c830000, 0x3c040001, 0x8c8470e0, 0x2402000b, 0x3c010001, -0xac2270c0, 0x641825, 0x3c010001, 0xac237110, 0x3c050001, 0x24a570d0, -0x8ca20000, 0x2c424e21, 0x1040007d, 0x24020002, 0x3c020001, 0x8c427100, -0x10400005, 0x0, 0x2402000c, 0x3c010001, 0x8004e27, 0xac2270c0, -0x3c020001, 0x8c4270f0, 0x1040007a, 0x0, 0x3c040001, 0x8c8470cc, -0x1080006c, 0x30820008, 0x3c030001, 0x8c6370dc, 0x10620072, 0x24020003, -0x3c010001, 0xac2470f8, 0xaca20000, 0x24020006, 0x3c010001, 0x8004e27, -0xac2270c0, 0x8f8400f0, 0x276217f8, 0x14820002, 0x24850008, 0x27651000, -0x8f8200f4, 0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, 0x24424fa0, -0xac820000, 0xac830004, 0xaf8500f0, 0x8f820200, 0x34420002, 0xaf820200, -0x8f830054, 0x2402000d, 0x3c010001, 0xac2270c0, 0x3c010001, 0xac2370e4, -0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0, 0x431023, 0x2c422710, -0x1440003a, 0x0, 0x3c020001, 0x8c427100, 0x10400029, 0x2402000e, -0x3c030001, 0x8c637114, 0x3c010001, 0x14600015, 0xac2270c0, 0xc0043cd, -0x0, 0x3c050001, 0x8ca54ffc, 0xc004fb3, 0x24040001, 0x3c030001, -0x8c634ffc, 0x24020004, 0x14620005, 0x2403fffb, 0x3c020001, 0x8c424ff8, -0x8004df6, 0x2403fff7, 0x3c020001, 0x8c424ff8, 0x431024, 0x3c010001, -0xac224ff8, 0x8ee20000, 0x3c030200, 0x431025, 0xaee20000, 0x8f820224, -0x3c010001, 0xac22711c, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, -0x8f820220, 0x34420002, 0x8004e27, 0xaf820220, 0x3c020001, 0x8c4270f0, -0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x1040000f, 0x24020002, -0x3c020001, 0x8c4270d0, 0x2c424e21, 0x1040000a, 0x24020002, 0x3c020001, -0x8c4270f0, 0x1040000f, 0x0, 0x3c020001, 0x8c4270cc, 0x1440000b, -0x0, 0x24020002, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c020001, -0x8c4270f0, 0x10400003, 0x0, 0xc00428b, 0x0, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, 0x27bd0018, -0x3c030001, 0x24637118, 0x8c620000, 0x10400005, 0x34422000, 0x3c010001, -0xac22710c, 0x8004e39, 0xac600000, 0x3c010001, 0xac24710c, 0x3e00008, -0x0, 0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, 0xac227114, -0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030, -0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, 0x21200, -0x3c040001, 0x8c84509c, 0x621825, 0x331c2, 0x3c030001, 0x2463507c, -0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2, -0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025, -0x0, 0x10600007, 0x24020002, 0x10620013, 0x24020003, 0x1062002c, -0x3c05000f, 0x8004e9d, 0x0, 0x8f820200, 0x2403feff, 0x431024, -0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220, -0x3c010001, 0xac207154, 0x3c010001, 0x8004ea8, 0xac20715c, 0x8f820200, -0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, -0xaf820220, 0x24020100, 0x3c010001, 0xac227154, 0x3c010001, 0x8004ea8, -0xac20715c, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, -0x3c030001, 0x431025, 0xaf820220, 0x3c010001, 0xac207154, 0x3c010001, -0x8004ea8, 0xac23715c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, -0x3c030001, 0x431025, 0xaf820220, 0x24020100, 0x3c010001, 0xac227154, -0x3c010001, 0x8004ea8, 0xac23715c, 0x34a5ffff, 0x3c040001, 0x24844f08, -0xafa30010, 0xc002403, 0xafa00014, 0x8004ea8, 0x0, 0x24020030, -0x3c010001, 0xac227118, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, -0x27bdffc8, 0xafb10024, 0x808821, 0xafb3002c, 0xa09821, 0xafb00020, -0xc08021, 0x3c040001, 0x24844f20, 0x3c050009, 0x3c020001, 0x8c424ffc, -0x34a59001, 0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, 0xa7a0001a, -0xafb00014, 0xc002403, 0xafa20010, 0x24020002, 0x126200e9, 0x2e620003, -0x10400005, 0x24020001, 0x1262000a, 0x3c02fffb, 0x8004fac, 0x0, -0x24020004, 0x1262006d, 0x24020008, 0x1262006c, 0x3c02ffec, 0x8004fac, -0x0, 0x3442ffff, 0x2028024, 0x119140, 0x3c010001, 0x320821, -0xac30712c, 0x3c024000, 0x2021024, 0x10400046, 0x1023c2, 0x30840030, -0x101382, 0x3042000c, 0x3c030001, 0x24635024, 0x431021, 0x823821, -0x3c020020, 0x2021024, 0x10400006, 0x24020100, 0x3c010001, 0x320821, -0xac227130, 0x8004eef, 0x3c020080, 0x3c010001, 0x320821, 0xac207130, -0x3c020080, 0x2021024, 0x10400006, 0x111940, 0x3c020001, 0x3c010001, -0x230821, 0x8004efb, 0xac227138, 0x111140, 0x3c010001, 0x220821, -0xac207138, 0x94e30000, 0x32024000, 0x10400003, 0xa7a30018, 0x34624000, -0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, 0x24e60002, 0x34420001, -0xc004802, 0xa4e20002, 0x24040001, 0x2821, 0xc004802, 0x27a60018, -0x3c020001, 0x8c424ffc, 0x24110001, 0x3c010001, 0xac315008, 0x14530004, -0x32028000, 0xc00428b, 0x0, 0x32028000, 0x10400095, 0x0, -0xc00428b, 0x0, 0x24020002, 0x3c010001, 0xac315000, 0x3c010001, -0x8004fac, 0xac224ffc, 0x24040001, 0x24050004, 0x27b0001a, 0xc004802, -0x2003021, 0x24040001, 0x2821, 0xc004802, 0x2003021, 0x3c020001, -0x521021, 0x8c427124, 0x3c040001, 0x8c844ffc, 0x3c03bfff, 0x3463ffff, -0x3c010001, 0xac335008, 0x431024, 0x3c010001, 0x320821, 0x10930074, -0xac227124, 0x8004fac, 0x0, 0x3c02ffec, 0x3442ffff, 0x2028024, -0x3c020008, 0x2028025, 0x111140, 0x3c010001, 0x220821, 0xac307128, -0x3c022000, 0x2021024, 0x10400005, 0x24020001, 0x3c010001, 0xac225098, -0x8004f4d, 0x3c024000, 0x3c010001, 0xac205098, 0x3c024000, 0x2021024, -0x1440001c, 0x0, 0x3c020001, 0x8c425098, 0x10400007, 0x24022020, -0x3c010001, 0xac22509c, 0x24020001, 0x3c010001, 0x370821, 0xac22839c, -0x3c04bfff, 0x111940, 0x3c020001, 0x431021, 0x8c427120, 0x3c050001, -0x8ca54ffc, 0x3484ffff, 0x441024, 0x3c010001, 0x230821, 0xac227120, -0x24020001, 0x10a20044, 0x0, 0x8004faa, 0x0, 0x3c020001, -0x8c425098, 0x1040001c, 0x24022000, 0x3c010001, 0xac22509c, 0x3c0300a0, -0x2031024, 0x14430005, 0x111140, 0x3402a000, 0x3c010001, 0x8004fa5, -0xac22509c, 0x3c030001, 0x621821, 0x8c637128, 0x3c020020, 0x621024, -0x10400004, 0x24022001, 0x3c010001, 0x8004fa5, 0xac22509c, 0x3c020080, -0x621024, 0x1040001f, 0x3402a001, 0x3c010001, 0x8004fa5, 0xac22509c, -0x3c020020, 0x2021024, 0x10400007, 0x111940, 0x24020100, 0x3c010001, -0x230821, 0xac227134, 0x8004f99, 0x3c020080, 0x111140, 0x3c010001, -0x220821, 0xac207134, 0x3c020080, 0x2021024, 0x10400006, 0x111940, -0x3c020001, 0x3c010001, 0x230821, 0x8004fa5, 0xac22713c, 0x111140, -0x3c010001, 0x220821, 0xac20713c, 0x3c030001, 0x8c634ffc, 0x24020001, -0x10620003, 0x0, 0xc00428b, 0x0, 0x8fbf0030, 0x8fb3002c, -0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0038, 0x27bdffd0, -0xafb40028, 0x80a021, 0xafb20020, 0x9021, 0xafb30024, 0x9821, -0xafb1001c, 0x8821, 0x24020002, 0xafbf002c, 0xafb00018, 0xa7a00012, -0x10a20068, 0xa7a00010, 0x2ca20003, 0x10400005, 0x24020001, 0x10a2000a, -0x148140, 0x8005070, 0x2201021, 0x24020004, 0x10a2005e, 0x24020008, -0x10a2005d, 0x142140, 0x8005070, 0x2201021, 0x3c030001, 0x701821, -0x8c63712c, 0x3c024000, 0x621024, 0x14400009, 0x24040001, 0x3c027fff, -0x3442ffff, 0x628824, 0x3c010001, 0x300821, 0xac317124, 0x8005070, -0x2201021, 0x24050001, 0xc0047c0, 0x27a60010, 0x24040001, 0x24050001, -0xc0047c0, 0x27a60010, 0x97a20010, 0x30420004, 0x10400034, 0x3c114000, -0x3c030001, 0x8c6350ac, 0x24020003, 0x10620008, 0x2c620004, 0x14400029, -0x3c028000, 0x24020004, 0x10620014, 0x24040001, 0x8005019, 0x3c028000, -0x24040001, 0x24050011, 0x27b00012, 0xc0047c0, 0x2003021, 0x24040001, -0x24050011, 0xc0047c0, 0x2003021, 0x97a30012, 0x30624000, 0x10400002, -0x3c130010, 0x3c130008, 0x3c120001, 0x8005016, 0x30628000, 0x24050014, -0x27b00012, 0xc0047c0, 0x2003021, 0x24040001, 0x24050014, 0xc0047c0, -0x2003021, 0x97a30012, 0x30621000, 0x10400002, 0x3c130010, 0x3c130008, -0x3c120001, 0x30620800, 0x54400001, 0x3c120002, 0x3c028000, 0x2221025, -0x2531825, 0x8005023, 0x438825, 0x3c110001, 0x2308821, 0x8e31712c, -0x3c027fff, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, 0x220821, -0xac317124, 0x8005070, 0x2201021, 0x142140, 0x3c030001, 0x641821, -0x8c637128, 0x3c024000, 0x621024, 0x14400008, 0x3c027fff, 0x3442ffff, -0x628824, 0x3c010001, 0x240821, 0xac317120, 0x8005070, 0x2201021, -0x3c020001, 0x8c42500c, 0x1040002d, 0x3c11c00c, 0x3c020001, 0x8c425098, -0x3c03e00c, 0x3c010001, 0x240821, 0x8c247134, 0x2102b, 0x21023, -0x431024, 0x10800004, 0x518825, 0x3c020020, 0x800504d, 0x2228825, -0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, 0x220821, -0x8c22713c, 0x10400003, 0x3c020080, 0x8005058, 0x2228825, 0x3c02ff7f, -0x3442ffff, 0x2228824, 0x3c020001, 0x8c425070, 0x10400002, 0x3c020800, -0x2228825, 0x3c020001, 0x8c425074, 0x10400002, 0x3c020400, 0x2228825, -0x3c020001, 0x8c425078, 0x10400006, 0x3c020100, 0x800506b, 0x2228825, -0x3c027fff, 0x3442ffff, 0x628824, 0x141140, 0x3c010001, 0x220821, -0xac317120, 0x2201021, 0x8fbf002c, 0x8fb40028, 0x8fb30024, 0x8fb20020, -0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffd8, 0xafb40020, -0x80a021, 0xafbf0024, 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, -0x8f900200, 0x3c030001, 0x8c634ffc, 0x8f930220, 0x24020002, 0x106200b1, -0x2c620003, 0x10400005, 0x24020001, 0x1062000a, 0x141940, 0x8005137, -0x0, 0x24020004, 0x1062005a, 0x24020008, 0x10620059, 0x149140, -0x8005137, 0x0, 0x3c040001, 0x832021, 0x8c84712c, 0x3c110001, -0x2238821, 0x8e317124, 0x3c024000, 0x821024, 0x1040003e, 0x3c020008, -0x2221024, 0x10400020, 0x36100002, 0x3c020001, 0x431021, 0x8c427130, -0x10400005, 0x36100020, 0x36100100, 0x3c020020, 0x80050af, 0x2228825, -0x2402feff, 0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, -0x3c010001, 0x220821, 0x8c227138, 0x10400005, 0x3c020001, 0x2629825, -0x3c020080, 0x80050ce, 0x2228825, 0x3c02fffe, 0x3442ffff, 0x2629824, -0x3c02ff7f, 0x3442ffff, 0x80050ce, 0x2228824, 0x2402fedf, 0x2028024, -0x3c02fffe, 0x3442ffff, 0x2629824, 0x3c02ff5f, 0x3442ffff, 0x2228824, -0x3c010001, 0x230821, 0xac207130, 0x3c010001, 0x230821, 0xac207138, -0xc00478a, 0x0, 0xaf900200, 0xaf930220, 0x8f820220, 0x2403fffb, -0x431024, 0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, 0x80050e5, -0x141140, 0x8f820200, 0x2403fffd, 0x431024, 0xc00478a, 0xaf820200, -0x3c02bfff, 0x3442ffff, 0xc00428b, 0x2228824, 0x141140, 0x3c010001, -0x220821, 0x8005137, 0xac317124, 0x149140, 0x3c040001, 0x922021, -0x8c847128, 0x3c110001, 0x2328821, 0x8e317120, 0x3c024000, 0x821024, -0x14400011, 0x0, 0x3c020001, 0x8c425098, 0x14400006, 0x3c02bfff, -0x8f820200, 0x34420002, 0xc00478a, 0xaf820200, 0x3c02bfff, 0x3442ffff, -0xc00428b, 0x2228824, 0x3c010001, 0x320821, 0x8005137, 0xac317120, -0x3c020001, 0x8c425098, 0x1440002d, 0x141140, 0x3c020020, 0x821024, -0x10400007, 0x36100020, 0x24020100, 0x3c010001, 0x320821, 0xac227134, -0x8005117, 0x36100100, 0x3c010001, 0x320821, 0xac207134, 0x2402feff, -0x2028024, 0x3c020080, 0x821024, 0x10400007, 0x141940, 0x3c020001, -0x3c010001, 0x230821, 0xac22713c, 0x8005128, 0x2629825, 0x141140, -0x3c010001, 0x220821, 0xac20713c, 0x3c02fffe, 0x3442ffff, 0x2629824, -0xc00478a, 0x0, 0xaf900200, 0xaf930220, 0x8f820220, 0x2403fffb, -0x431024, 0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, 0x141140, -0x3c010001, 0x220821, 0xac317120, 0x8fbf0024, 0x8fb40020, 0x8fb3001c, -0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x0, -0x0 }; -u32 tigonFwData[(MAX_DATA_LEN/4) + 1] __initdata = { -0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x416c7465, 0x6f6e2041, -0x63654e49, 0x43205600, 0x42424242, 0x0, 0x0, 0x0, -0x135430, 0x13e7fc, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x60cf00, 0x60, 0xcf000000, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x3, 0x0, 0x1, 0x0, -0x0, 0x0, 0x0, 0x0, 0x1, 0x0, -0x0, 0x0, 0x0, 0x0, 0x1000000, 0x21000000, -0x12000140, 0x0, 0x0, 0x20000000, 0x120000a0, 0x0, -0x12000060, 0x12000180, 0x120001e0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x30001, 0x1, -0x30201, 0x0, 0x0 }; +0x10000003, +0x0, 0xd, 0xd, 0x3c1d0001, +0x8fbd5404, 0x3a0f021, 0x3c100000, 0x26104000, +0xc00100c, 0x0, 0xd, 0x27bdffd8, +0x3c1cc000, 0x3c1b0013, 0x377bd800, 0xd021, +0x3c170013, 0x36f75418, 0x2e02021, 0x340583e8, +0xafbf0024, 0xc00248c, 0xafb00020, 0xc0023ec, +0x0, 0x3c040001, 0x24844970, 0x24050001, +0x2e03021, 0x3821, 0x3c100001, 0x261075d0, +0xafb00010, 0xc002407, 0xafbb0014, 0x3c02000f, +0x3442ffff, 0x2021024, 0x362102b, 0x10400009, +0x24050003, 0x3c040001, 0x2484497c, 0x2003021, +0x3603821, 0x3c020010, 0xafa20010, 0xc002407, +0xafa00014, 0x2021, 0x3405c000, 0x3c010001, +0x370821, 0xa02083b0, 0x3c010001, 0x370821, +0xa02083b2, 0x3c010001, 0x370821, 0xa02083b3, +0x3c010001, 0x370821, 0xac2083b4, 0xa2e004d8, +0x418c0, 0x24840001, 0x771021, 0xac40727c, +0x771021, 0xac407280, 0x2e31021, 0xa445727c, +0x2c820020, 0x1440fff7, 0x418c0, 0x2021, +0x3405c000, 0x418c0, 0x24840001, 0x771021, +0xac40737c, 0x771021, 0xac407380, 0x2e31021, +0xa445737c, 0x2c820080, 0x5440fff7, 0x418c0, +0xaf800054, 0xaf80011c, 0x8f820044, 0x34420040, +0xaf820044, 0x8f820044, 0x34420020, 0xaf820044, +0x8f420218, 0x30420002, 0x10400009, 0x0, +0x8f420220, 0x3c030002, 0x34630004, 0x431025, +0xaee204c4, 0x8f42021c, 0x8001074, 0x34420004, +0x8f420220, 0x3c030002, 0x34630006, 0x431025, +0xaee204c4, 0x8f42021c, 0x34420006, 0xaee204cc, +0x8f420218, 0x30420010, 0x1040000a, 0x0, +0x8f42021c, 0x34420004, 0xaee204c8, 0x8f420220, +0x3c03000a, 0x34630004, 0x431025, 0x800108a, +0xaee204c0, 0x8f420220, 0x3c03000a, 0x34630006, +0x431025, 0xaee204c0, 0x8f42021c, 0x34420006, +0xaee204c8, 0x8f420218, 0x30420200, 0x10400003, +0x24020001, 0x8001091, 0xa2e27248, 0xa2e07248, +0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054, +0x8f820054, 0x8001099, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x0, +0xaf800044, 0x8f420208, 0x8f43020c, 0xaee20010, +0xaee30014, 0x8ee40010, 0x8ee50014, 0x26e20030, +0xaee20028, 0x24020490, 0xaee20018, 0xaf840090, +0xaf850094, 0x8ee20028, 0xaf8200b4, 0x96e2001a, +0xaf82009c, 0x8f8200b0, 0x8ee304cc, 0x431025, +0xaf8200b0, 0x8f8200b0, 0x30420004, 0x1440fffd, +0x0, 0x8ee20450, 0x8ee30454, 0xaee304fc, +0x8ee204fc, 0x2442e000, 0x2c422001, 0x1440000d, +0x26e40030, 0x8ee20450, 0x8ee30454, 0x3c040001, +0x24844988, 0x3c050001, 0xafa00010, 0xafa00014, +0x8ee704fc, 0x34a5f000, 0xc002407, 0x603021, +0x26e40030, 0xc00248c, 0x24050400, 0x27440080, +0xc00248c, 0x24050080, 0x26e4777c, 0xc00248c, +0x24050400, 0x8f42025c, 0x26e40094, 0xaee20060, +0x8f420260, 0x27450200, 0x24060008, 0xaee20068, +0x24020006, 0xc00249e, 0xaee20064, 0x3c023b9a, +0x3442ca00, 0x2021, 0x24030002, 0xaee30074, +0xaee30070, 0xaee2006c, 0x240203e8, 0xaee20104, +0x24020001, 0xaee30100, 0xaee2010c, 0x3c030001, +0x641821, 0x906353d0, 0x2e41021, 0x24840001, +0xa043009c, 0x2c82000f, 0x1440fff8, 0x0, +0x8f820040, 0x2e41821, 0x24840001, 0x21702, +0x24420030, 0xa062009c, 0x2e41021, 0xa040009c, +0x96e2046a, 0x30420003, 0x14400009, 0x0, +0x96e2047a, 0x30420003, 0x50400131, 0x3c030800, +0x96e2046a, 0x30420003, 0x1040002a, 0x3c020700, +0x96e2047a, 0x30420003, 0x10400026, 0x3c020700, +0x96e3047a, 0x96e2046a, 0x14620022, 0x3c020700, +0x8ee204c0, 0x24030001, 0xa2e34e20, 0x34420e00, +0xaee204c0, 0x8f420218, 0x30420100, 0x10400005, +0x0, 0x3c020001, 0x2442e178, 0x800111d, +0x21100, 0x3c020001, 0x2442d36c, 0x21100, +0x21182, 0x3c030800, 0x431025, 0x3c010001, +0xac221238, 0x3c020001, 0x2442f690, 0x21100, +0x21182, 0x3c030800, 0x431025, 0x3c010001, +0xac221278, 0x8ee20000, 0x34424000, 0x8001238, +0xaee20000, 0x34423000, 0xafa20018, 0x8ee20608, +0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, +0xafa00010, 0x8ee20608, 0x210c0, 0x571021, +0x8fa30018, 0x8fa4001c, 0xac43060c, 0xac440610, +0x8f870120, 0x27623800, 0x24e80020, 0x102102b, +0x50400001, 0x27683000, 0x8f820128, 0x11020004, +0x0, 0x8f820124, 0x15020007, 0x1021, +0x8ee201a4, 0x3021, 0x24420001, 0xaee201a4, +0x80011a0, 0x8ee201a4, 0x8ee40608, 0x420c0, +0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xace40000, +0xace50004, 0x8ee30608, 0x24020008, 0xa4e2000e, +0x2402000d, 0xace20018, 0xace9001c, 0x318c0, +0x2463060c, 0x2e31021, 0xace20008, 0x8ee204c4, +0xace20010, 0xaf880120, 0x92e24e20, 0x14400037, +0x24060001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x24030040, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007, +0x0, 0x8ee24e34, 0x24420001, 0x10a20005, +0x0, 0x800118a, 0x0, 0x14a00005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, +0xac800000, 0x80011a0, 0x0, 0x8ee24e30, +0x24030040, 0x24420001, 0x50430003, 0x1021, +0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x24020007, +0xac820000, 0x24020001, 0xac820004, 0x54c0000c, +0xaee90608, 0x3c040001, 0x24844994, 0xafa00010, +0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, +0xc002407, 0x34a5f000, 0x8001223, 0x0, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x3021, 0x24420001, 0xaee201a4, +0x8001207, 0x8ee201a4, 0x8ee20608, 0xac62001c, +0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008, +0x24020008, 0xa462000e, 0x24020011, 0xac620018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400037, 0x24060001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c830000, 0x24020012, 0x1462001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee54e30, 0x24420001, 0x10430007, 0x0, +0x8ee24e34, 0x24420001, 0x10a20005, 0x0, +0x80011f1, 0x0, 0x14a00005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x8001207, 0x0, 0x8ee24e30, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020012, 0xac820000, +0x24020001, 0xac820004, 0x14c0001b, 0x0, +0x3c040001, 0x2484499c, 0xafa00010, 0xafa00014, +0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407, +0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, +0x8001223, 0x8ee201b0, 0x3c040001, 0x248449a8, +0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, +0xc002407, 0x34a5f005, 0x8ee201ac, 0x24420001, +0xaee201ac, 0x8ee201ac, 0x8ee20160, 0x3c040001, +0x248449b4, 0x3405f001, 0x24420001, 0xaee20160, +0x8ee20160, 0x3021, 0x3821, 0xafa00010, +0xc002407, 0xafa00014, 0x8001238, 0x0, +0x3c020001, 0x2442f5b8, 0x21100, 0x21182, +0x431025, 0x3c010001, 0xac221278, 0x96e2045a, +0x30420003, 0x10400025, 0x3c050fff, 0x8ee204c8, +0x34a5ffff, 0x34420a00, 0xaee204c8, 0x8ee304c8, +0x3c040001, 0x248449c0, 0x24020001, 0xa2e204ec, +0xa2e204ed, 0x3c020002, 0x621825, 0x3c020001, +0x2442a3a0, 0x451024, 0x21082, 0xaee304c8, +0x3c030800, 0x431025, 0x3c010001, 0xac221220, +0x3c020001, 0x2442ade4, 0x451024, 0x21082, +0x431025, 0x3c010001, 0xac221280, 0x96e6045a, +0x3821, 0x24050011, 0xafa00010, 0xc002407, +0xafa00014, 0x8001268, 0x0, 0x3c020001, +0x2442a9e4, 0x21100, 0x21182, 0x3c030800, +0x431025, 0x3c010001, 0xac221280, 0x96e2046a, +0x30420010, 0x14400009, 0x0, 0x96e2047a, +0x30420010, 0x10400112, 0x0, 0x96e2046a, +0x30420010, 0x10400005, 0x3c020700, 0x96e2047a, +0x30420010, 0x14400102, 0x3c020700, 0x34423000, +0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001, +0x304900ff, 0x512300e2, 0xafa00010, 0x8ee20608, +0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, +0xac43060c, 0xac440610, 0x8f870120, 0x27623800, +0x24e80020, 0x102102b, 0x50400001, 0x27683000, +0x8f820128, 0x11020004, 0x0, 0x8f820124, +0x15020007, 0x1021, 0x8ee201a4, 0x3021, +0x24420001, 0xaee201a4, 0x80012ea, 0x8ee201a4, +0x8ee40608, 0x420c0, 0x801821, 0x8ee40430, +0x8ee50434, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xace40000, 0xace50004, 0x8ee30608, +0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, +0xace9001c, 0x318c0, 0x2463060c, 0x2e31021, +0xace20008, 0x8ee204c4, 0xace20010, 0xaf880120, +0x92e24e20, 0x14400037, 0x24060001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020007, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30, +0x24420001, 0x10430007, 0x0, 0x8ee24e34, +0x24420001, 0x10a20005, 0x0, 0x80012d4, +0x0, 0x14a00005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x80012ea, +0x0, 0x8ee24e30, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x24020007, 0xac820000, 0x24020001, +0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001, +0x24844994, 0xafa00010, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f000, +0x800136d, 0x0, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x3021, +0x24420001, 0xaee201a4, 0x8001351, 0x8ee201a4, +0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4, +0x2462001c, 0xac620008, 0x24020008, 0xa462000e, +0x24020011, 0xac620018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400037, 0x24060001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c830000, 0x24020012, +0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001, +0x10430007, 0x0, 0x8ee24e34, 0x24420001, +0x10a20005, 0x0, 0x800133b, 0x0, +0x14a00005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x8001351, 0x0, +0x8ee24e30, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020012, 0xac820000, 0x24020001, 0xac820004, +0x14c0001b, 0x0, 0x3c040001, 0x2484499c, +0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f001, 0x8ee201b0, +0x24420001, 0xaee201b0, 0x800136d, 0x8ee201b0, +0x3c040001, 0x248449a8, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f005, +0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, +0x8ee20160, 0x3c040001, 0x248449b4, 0x3405f002, +0x24420001, 0xaee20160, 0x8ee20160, 0x3021, +0x3821, 0xafa00010, 0xc002407, 0xafa00014, +0x96e6047a, 0x96e7046a, 0x3c040001, 0x248449cc, +0x24050012, 0xafa00010, 0xc002407, 0xafa00014, +0xc004500, 0x0, 0xc002318, 0x0, +0x3c060001, 0x34c63800, 0xaee00608, 0xaf400228, +0xaf40022c, 0x96e30458, 0x8ee40000, 0x3c0512d8, +0x34a5c358, 0x27623800, 0xaee27258, 0x27623800, +0xaee27260, 0x27623800, 0xaee27264, 0x3661021, +0xaee27270, 0x2402ffff, 0xaee004d4, 0xaee004e0, +0xaee004e4, 0xaee004f0, 0xa2e004f4, 0xaee00e0c, +0xaee00e18, 0xaee00e10, 0xaee00e14, 0xaee00e1c, +0xaee0724c, 0xaee05244, 0xaee05240, 0xaee0523c, +0xaee07250, 0xaee07254, 0xaee0725c, 0xaee07268, +0xaee004d0, 0x2463ffff, 0x852025, 0xaee304f8, +0xaee40000, 0xaf800060, 0xaf820064, 0x3c020100, +0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001, +0x304900ff, 0x512300e2, 0xafa00010, 0x8ee20608, +0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, +0xac43060c, 0xac440610, 0x8f870120, 0x27623800, +0x24e80020, 0x102102b, 0x50400001, 0x27683000, +0x8f820128, 0x11020004, 0x0, 0x8f820124, +0x15020007, 0x1021, 0x8ee201a4, 0x3021, +0x24420001, 0xaee201a4, 0x8001422, 0x8ee201a4, +0x8ee40608, 0x420c0, 0x801821, 0x8ee40430, +0x8ee50434, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xace40000, 0xace50004, 0x8ee30608, +0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, +0xace9001c, 0x318c0, 0x2463060c, 0x2e31021, +0xace20008, 0x8ee204c4, 0xace20010, 0xaf880120, +0x92e24e20, 0x14400037, 0x24060001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020007, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30, +0x24420001, 0x10430007, 0x0, 0x8ee24e34, +0x24420001, 0x10a20005, 0x0, 0x800140c, +0x0, 0x14a00005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x8001422, +0x0, 0x8ee24e30, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x24020007, 0xac820000, 0x24020001, +0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001, +0x24844994, 0xafa00010, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f000, +0x80014a5, 0x0, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x3021, +0x24420001, 0xaee201a4, 0x8001489, 0x8ee201a4, +0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4, +0x2462001c, 0xac620008, 0x24020008, 0xa462000e, +0x24020011, 0xac620018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400037, 0x24060001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c830000, 0x24020012, +0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001, +0x10430007, 0x0, 0x8ee24e34, 0x24420001, +0x10a20005, 0x0, 0x8001473, 0x0, +0x14a00005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x8001489, 0x0, +0x8ee24e30, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020012, 0xac820000, 0x24020001, 0xac820004, +0x14c0001b, 0x0, 0x3c040001, 0x2484499c, +0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f001, 0x8ee201b0, +0x24420001, 0xaee201b0, 0x80014a5, 0x8ee201b0, +0x3c040001, 0x248449a8, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f005, +0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, +0x8ee20154, 0x24420001, 0xaee20154, 0xc0014dc, +0x8ee20154, 0x8f8200a0, 0x30420004, 0x1440fffd, +0x0, 0x8f820040, 0x30420001, 0x14400008, +0x0, 0x8f430104, 0x24020001, 0x10620004, +0x0, 0x8f420264, 0x10400006, 0x0, +0x8ee2017c, 0x24420001, 0xaee2017c, 0x80014c5, +0x8ee2017c, 0x8f820044, 0x34420004, 0xaf820044, +0x8ee20178, 0x24420001, 0xaee20178, 0x8ee20178, +0x8f8200d8, 0x8f8300d4, 0x431023, 0xaee2726c, +0x8ee2726c, 0x1c400003, 0x3c030001, 0x431021, +0xaee2726c, 0xc004068, 0x0, 0xc004440, +0xaf800228, 0x8fbf0024, 0x8fb00020, 0x3e00008, +0x27bd0028, 0x3e00008, 0x0, 0x3e00008, +0x0, 0x0, 0x0, 0x2402002c, +0xaf820050, 0xaee07274, 0x8f420238, 0xaee27278, +0x8f820054, 0x24420067, 0xaf820058, 0xaee07b88, +0xaee07b8c, 0xaee07b84, 0x3c010001, 0x370821, +0xac2083bc, 0x3c010001, 0x370821, 0x3e00008, +0xa02083b9, 0x27bdffd8, 0xafbf0024, 0xafb00020, +0x8f820054, 0x3c030001, 0x8c635488, 0x24420067, +0x1060000d, 0xaf820058, 0x3c020001, 0x571021, +0x904283b8, 0x10400005, 0x3c030200, 0x3c010001, +0x370821, 0x8001503, 0xa02083b8, 0x8ee20000, +0x431025, 0xaee20000, 0x8f420218, 0x30420100, +0x104000c6, 0x0, 0x8f8200b0, 0x30420004, +0x104000c2, 0x0, 0x3c030001, 0x771821, +0x8c6383d0, 0x8f820104, 0x146200b4, 0x0, +0x3c030001, 0x771821, 0x8c6383d4, 0x8f8200b4, +0x146200ae, 0x0, 0x8f8200b0, 0x3c030080, +0x431024, 0x1040000d, 0x0, 0x8f82011c, +0x34420002, 0xaf82011c, 0x8f8200b0, 0x2403fffb, +0x431024, 0xaf8200b0, 0x8f82011c, 0x2403fffd, +0x431024, 0x80015cc, 0xaf82011c, 0x3c030001, +0x771821, 0x8c6383d0, 0x8f820104, 0x14620082, +0x0, 0x3c030001, 0x771821, 0x8c6383d4, +0x8f8200b4, 0x1462007c, 0x0, 0x3c070001, +0xf73821, 0x8ce783d0, 0x8f8200b0, 0x3c040001, +0x24844a40, 0xafa00014, 0xafa20010, 0x8f8600b0, +0x3c050005, 0xc002407, 0x34a50900, 0x8f82011c, +0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, +0x34420001, 0xaf8200b0, 0xaf830104, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20006, 0x0, 0x8ee201a4, +0x24420001, 0xaee201a4, 0x80015a0, 0x8ee201a4, +0x8f440208, 0x8f45020c, 0x26e20030, 0xac620008, +0x24020400, 0xa462000e, 0x2402000f, 0xac620018, +0xac60001c, 0xac640000, 0xac650004, 0x8ee204c4, +0xac620010, 0xaf860120, 0x92e24e20, 0x14400037, +0x0, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x24030040, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007, +0x0, 0x8ee24e34, 0x24420001, 0x10a20005, +0x0, 0x800158a, 0x0, 0x14a00005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, +0xac800000, 0x80015a0, 0x0, 0x8ee24e30, +0x24030040, 0x24420001, 0x50430003, 0x1021, +0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x24020007, +0xac820000, 0x24020001, 0xac820004, 0x8f82011c, +0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201e4, +0x3c070001, 0xf73821, 0x8ce783d0, 0x24420001, +0xaee201e4, 0x8ee201e4, 0x3c040001, 0x24844a4c, +0x80015bd, 0xafa00010, 0x8f820104, 0x3c010001, +0x370821, 0xac2283d0, 0x8f8200b4, 0x3c070001, +0xf73821, 0x8ce783d0, 0x3c040001, 0x24844a54, +0x3c010001, 0x370821, 0xac2283d4, 0xafa00010, +0xafa00014, 0x8f8600b0, 0x3c050005, 0xc002407, +0x34a50900, 0x80015cc, 0x0, 0x8f820104, +0x3c010001, 0x370821, 0xac2283d0, 0x8f8200b4, +0x3c010001, 0x370821, 0xac2283d4, 0x8ee27274, +0x92e304f4, 0x24420067, 0x14600006, 0xaee27274, +0x8ee27274, 0x8f430234, 0x43102b, 0x1440007b, +0x0, 0x8ee304e4, 0x8ee204f8, 0x14620004, +0x0, 0x92e204f4, 0x50400074, 0xa2e004f4, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4, +0x8001637, 0x8ee201a4, 0x8ee204e4, 0xac62001c, +0x8ee404b0, 0x8ee504b4, 0x2462001c, 0xac620008, +0x24020008, 0xa462000e, 0x24020011, 0xac620018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400037, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c830000, 0x24020012, 0x1462001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee54e30, 0x24420001, 0x10430007, 0x0, +0x8ee24e34, 0x24420001, 0x10a20005, 0x0, +0x8001621, 0x0, 0x14a00005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x8001637, 0x0, 0x8ee24e30, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020012, 0xac820000, +0x24020001, 0xac820004, 0x5600000b, 0x24100001, +0x8ee204e4, 0x3c040001, 0x24844a5c, 0xafa00014, +0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, +0xc002407, 0x34a5f006, 0x16000003, 0x24020001, +0x8001650, 0xa2e204f4, 0x8ee20170, 0x24420001, +0xaee20170, 0x8ee20170, 0x8ee204e4, 0xa2e004f4, +0xaee004f0, 0xaee07274, 0xaee204f8, 0x8ee20e1c, +0x1040006d, 0x0, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x8021, +0x24420001, 0xaee201a4, 0x80016ad, 0x8ee201a4, +0x8ee2724c, 0xac62001c, 0x8ee404a8, 0x8ee504ac, +0x2462001c, 0xac620008, 0x24020008, 0xa462000e, +0x24020011, 0xac620018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400037, 0x24100001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c830000, 0x24020012, +0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001, +0x10430007, 0x0, 0x8ee24e34, 0x24420001, +0x10a20005, 0x0, 0x8001697, 0x0, +0x14a00005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x80016ad, 0x0, +0x8ee24e30, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020012, 0xac820000, 0x24020001, 0xac820004, +0x5600000b, 0x24100001, 0x8ee2724c, 0x3c040001, +0x24844a68, 0xafa00014, 0xafa20010, 0x8ee6724c, +0x8f470280, 0x3c050009, 0xc002407, 0x34a5f008, +0x56000001, 0xaee00e1c, 0x8ee20174, 0x24420001, +0xaee20174, 0x8ee20174, 0x8ee24e24, 0x10400019, +0x0, 0xaee04e24, 0x8f820040, 0x30420001, +0x14400008, 0x0, 0x8f430104, 0x24020001, +0x10620004, 0x0, 0x8f420264, 0x10400006, +0x0, 0x8ee2017c, 0x24420001, 0xaee2017c, +0x80016da, 0x8ee2017c, 0x8f820044, 0x34420004, +0xaf820044, 0x8ee20178, 0x24420001, 0xaee20178, +0x8ee20178, 0x8ee27278, 0x2442ff99, 0xaee27278, +0x8ee27278, 0x1c4002ad, 0x0, 0x8f420238, +0x104002aa, 0x0, 0x3c020001, 0x571021, +0x904283e0, 0x144002a5, 0x0, 0x8f420080, +0xaee2004c, 0x8f4200c0, 0xaee20048, 0x8f420084, +0xaee20038, 0x8f420084, 0xaee20244, 0x8f420088, +0xaee20248, 0x8f42008c, 0xaee2024c, 0x8f420090, +0xaee20250, 0x8f420094, 0xaee20254, 0x8f420098, +0xaee20258, 0x8f42009c, 0xaee2025c, 0x8f4200a0, +0xaee20260, 0x8f4200a4, 0xaee20264, 0x8f4200a8, +0xaee20268, 0x8f4200ac, 0xaee2026c, 0x8f4200b0, +0xaee20270, 0x8f4200b4, 0xaee20274, 0x8f4200b8, +0xaee20278, 0x8f4200bc, 0x24040001, 0xaee2027c, +0xaee0003c, 0x41080, 0x571021, 0x8ee3003c, +0x8c420244, 0x24840001, 0x621821, 0x2c82000f, +0xaee3003c, 0x1440fff8, 0x41080, 0x8f4200cc, +0xaee20050, 0x8f4200d0, 0xaee20054, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x8001775, +0x8ee201a4, 0x8f440208, 0x8f45020c, 0x26e20030, +0xac620008, 0x24020400, 0xa462000e, 0x2402000f, +0xac620018, 0xac60001c, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400037, 0x24100001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c830000, 0x24020007, +0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001, +0x10430007, 0x0, 0x8ee24e34, 0x24420001, +0x10a20005, 0x0, 0x800175f, 0x0, +0x14a00005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x8001775, 0x0, +0x8ee24e30, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020007, 0xac820000, 0x24020001, 0xac820004, +0x12000212, 0x3c020400, 0xafa20018, 0x3c020001, +0x571021, 0x904283b0, 0x1040010b, 0x0, +0x8ee20608, 0x8f430228, 0x24420001, 0x304a00ff, +0x514300fd, 0xafa00010, 0x8ee20608, 0x210c0, +0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c, +0xac440610, 0x8f830054, 0x8f820054, 0x24690032, +0x1221023, 0x2c420033, 0x1040006a, 0x5821, +0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, +0x240e0001, 0x8f870120, 0x27623800, 0x24e80020, +0x102102b, 0x50400001, 0x27683000, 0x8f820128, +0x11020004, 0x0, 0x8f820124, 0x15020007, +0x1021, 0x8ee201a4, 0x8021, 0x24420001, +0xaee201a4, 0x80017f3, 0x8ee201a4, 0x8ee40608, +0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0xace40000, 0xace50004, 0x8ee20608, 0xa4f8000e, +0xacef0018, 0xacea001c, 0x210c0, 0x2442060c, +0x2e21021, 0xace20008, 0x8ee204c4, 0xace20010, +0xaf880120, 0x92e24e20, 0x14400033, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x144d001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x104c0007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x80017e0, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x80017f3, +0x0, 0x8ee24e30, 0x24420001, 0x504c0003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001, +0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d, +0x0, 0x316300ff, 0x24020001, 0x14620077, +0x3c050009, 0xaeea0608, 0x8f830054, 0x8f820054, +0x24690032, 0x1221023, 0x2c420033, 0x10400061, +0x5821, 0x240d0008, 0x240c0011, 0x24080012, +0x24070040, 0x240a0001, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x8021, +0x24420001, 0xaee201a4, 0x800185f, 0x8ee201a4, +0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4, +0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400033, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x1448001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x10470007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x800184c, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x800185f, +0x0, 0x8ee24e30, 0x24420001, 0x50470003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac880000, 0xac8a0004, 0x56000006, 0x240b0001, +0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, +0x0, 0x316300ff, 0x24020001, 0x14620003, +0x3c050009, 0x800197c, 0x24100001, 0x3c040001, +0x24844a74, 0xafa00010, 0xafa00014, 0x8f860120, +0x8f870124, 0x800187b, 0x34a5f011, 0x3c040001, +0x24844a80, 0xafa00010, 0xafa00014, 0x8f860120, +0x8f870124, 0x34a5f010, 0xc002407, 0x8021, +0x800197c, 0x0, 0x3c040001, 0x24844a8c, +0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, +0x8001975, 0x34a5f00f, 0x8ee20608, 0x8f430228, +0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, +0x8ee20608, 0x210c0, 0x571021, 0x8fa30018, +0x8fa4001c, 0xac43060c, 0xac440610, 0x8f870120, +0x27623800, 0x24e80020, 0x102102b, 0x50400001, +0x27683000, 0x8f820128, 0x11020004, 0x0, +0x8f820124, 0x15020007, 0x1021, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x80018f7, +0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821, +0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xace40000, 0xace50004, +0x8ee30608, 0x24020008, 0xa4e2000e, 0x2402000d, +0xace20018, 0xace9001c, 0x318c0, 0x2463060c, +0x2e31021, 0xace20008, 0x8ee204c4, 0xace20010, +0xaf880120, 0x92e24e20, 0x14400037, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c830000, 0x24020007, 0x1462001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee54e30, 0x24420001, 0x10430007, 0x0, +0x8ee24e34, 0x24420001, 0x10a20005, 0x0, +0x80018e1, 0x0, 0x14a00005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x80018f7, 0x0, 0x8ee24e30, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020007, 0xac820000, +0x24020001, 0xac820004, 0x5600000c, 0xaee90608, +0x3c040001, 0x24844a98, 0xafa00010, 0xafa00014, +0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407, +0x34a5f000, 0x800197c, 0x0, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x800195e, +0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0, +0x8ee504a4, 0x2462001c, 0xac620008, 0x24020008, +0xa462000e, 0x24020011, 0xac620018, 0xac640000, +0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120, +0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020012, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30, +0x24420001, 0x10430007, 0x0, 0x8ee24e34, +0x24420001, 0x10a20005, 0x0, 0x8001948, +0x0, 0x14a00005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x800195e, +0x0, 0x8ee24e30, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x24020012, 0xac820000, 0x24020001, +0xac820004, 0x5600001d, 0x24100001, 0x3c040001, +0x24844aa0, 0xafa00010, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f001, +0x8ee201b0, 0x24420001, 0xaee201b0, 0x800197c, +0x8ee201b0, 0x3c040001, 0x24844aac, 0xafa00014, +0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f005, +0xc002407, 0x0, 0x8ee201ac, 0x8021, +0x24420001, 0xaee201ac, 0x8ee201ac, 0x1200000c, +0x24020001, 0x3c010001, 0x370821, 0xa02083b0, +0x8f420238, 0x8ee30158, 0x24630001, 0xaee30158, +0x8ee30158, 0x800198c, 0xaee27278, 0x24020001, +0x3c010001, 0x370821, 0xa02283b0, 0x3c020001, +0x8c425488, 0x10400187, 0x0, 0x8ee27b84, +0x24430001, 0x284200c9, 0x144001a4, 0xaee37b84, +0x8ee204d4, 0x30420002, 0x14400119, 0xaee07b84, +0x8ee204d4, 0x3c030600, 0x34631000, 0x34420002, +0xaee204d4, 0xafa30018, 0x8ee20608, 0x8f430228, +0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, +0x8ee20608, 0x210c0, 0x571021, 0x8fa30018, +0x8fa4001c, 0xac43060c, 0xac440610, 0x8f830054, +0x8f820054, 0x24690032, 0x1221023, 0x2c420033, +0x1040006a, 0x5821, 0x24180008, 0x240f000d, +0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120, +0x27623800, 0x24e80020, 0x102102b, 0x50400001, +0x27683000, 0x8f820128, 0x11020004, 0x0, +0x8f820124, 0x15020007, 0x1021, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x8001a15, +0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821, +0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xace40000, 0xace50004, +0x8ee20608, 0xa4f8000e, 0xacef0018, 0xacea001c, +0x210c0, 0x2442060c, 0x2e21021, 0xace20008, +0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20, +0x14400033, 0x24100001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x144d001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x104c0007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x8001a02, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, +0xac800000, 0x8001a15, 0x0, 0x8ee24e30, +0x24420001, 0x504c0003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0xac8d0000, 0xac8e0004, +0x56000006, 0x240b0001, 0x8f820054, 0x1221023, +0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, +0x24020001, 0x54620078, 0xafa00010, 0xaeea0608, +0x8f830054, 0x8f820054, 0x24690032, 0x1221023, +0x2c420033, 0x10400061, 0x5821, 0x240d0008, +0x240c0011, 0x24080012, 0x24070040, 0x240a0001, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4, +0x8001a81, 0x8ee201a4, 0x8ee20608, 0xac62001c, +0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008, +0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400033, 0x24100001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x1448001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10470007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x8001a6e, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, +0xac800000, 0x8001a81, 0x0, 0x8ee24e30, +0x24420001, 0x50470003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0xac880000, 0xac8a0004, +0x56000006, 0x240b0001, 0x8f820054, 0x1221023, +0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, +0x24020001, 0x10620022, 0x0, 0x3c040001, +0x24844a74, 0xafa00010, 0xafa00014, 0x8f860120, +0x8f870124, 0x3c050009, 0xc002407, 0x34a5f011, +0x8001aad, 0x0, 0x3c040001, 0x24844a80, +0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, +0xc002407, 0x34a5f010, 0x8001aad, 0x0, +0x3c040001, 0x24844a8c, 0xafa00014, 0x8ee60608, +0x8f470228, 0x3c050009, 0xc002407, 0x34a5f00f, +0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, +0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c, +0x8ee204d4, 0x30420001, 0x10400055, 0x0, +0x8f420218, 0x30420080, 0x10400029, 0x0, +0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b7c, +0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000, +0x2407ffff, 0x2021, 0x461024, 0x1444000d, +0x671824, 0x1465000b, 0x0, 0x8ee27b80, +0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021, +0x461024, 0x14440003, 0x671824, 0x1065000b, +0x0, 0x8ee200c0, 0x8ee300c4, 0x8ee400e0, +0x8ee500e4, 0xaee37b7c, 0xaee57b80, 0x8f820044, +0x38420020, 0x8001b38, 0xaf820044, 0x8f820044, +0x2403ffdf, 0x431024, 0x8001b38, 0xaf820044, +0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, +0x8ee27b7c, 0x402821, 0x8ee200c0, 0x8ee300c4, +0x24060000, 0x2407ffff, 0x2021, 0x461024, +0x1444000d, 0x671824, 0x1465000b, 0x0, +0x8ee27b80, 0x402821, 0x8ee200e0, 0x8ee300e4, +0x2021, 0x461024, 0x14440003, 0x671824, +0x1065000b, 0x0, 0x8ee200c0, 0x8ee300c4, +0x8ee400e0, 0x8ee500e4, 0xaee37b7c, 0xaee57b80, +0x8f820044, 0x38420040, 0x8001b38, 0xaf820044, +0x8f820044, 0x34420040, 0x8001b38, 0xaf820044, +0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b8c, +0x24430001, 0x28420015, 0x14400028, 0xaee37b8c, +0x8f820044, 0x38420020, 0xaf820044, 0x8001b38, +0xaee07b8c, 0x8ee204d4, 0x30420001, 0x10400011, +0x0, 0x8f420218, 0x30420080, 0x10400009, +0x0, 0x8f820044, 0x34420020, 0xaf820044, +0x8f820044, 0x2403ffbf, 0x431024, 0x8001b36, +0xaf820044, 0x8f820044, 0x34420060, 0x8001b36, +0xaf820044, 0x8f820044, 0x34420040, 0xaf820044, +0x8ee27b88, 0x24430001, 0x28421389, 0x14400005, +0xaee37b88, 0x8f820044, 0x38420020, 0xaf820044, +0xaee07b88, 0xc0045c1, 0x0, 0x8fbf0024, +0x8fb00020, 0x3e00008, 0x27bd0028, 0x27bdffb8, +0xafbf0044, 0xafb60040, 0xafb5003c, 0xafb40038, +0xafb30034, 0xafb20030, 0xafb1002c, 0xafb00028, +0x8f960064, 0x32c20004, 0x1040000c, 0x24020004, +0xaf820064, 0x8f420114, 0xaee204e0, 0x8f820060, +0x34420008, 0xaf820060, 0x8ee2016c, 0x24420001, +0xaee2016c, 0x80022f4, 0x8ee2016c, 0x32c20001, +0x10400004, 0x24020001, 0xaf820064, 0x80022f4, +0x0, 0x32c20002, 0x1440000c, 0x3c050003, +0x3c040001, 0x24844b24, 0x34a50001, 0x2c03021, +0x3821, 0xafa00010, 0xc002407, 0xafa00014, +0x2402fff8, 0x80022f4, 0xaf820064, 0x8f43022c, +0x8f42010c, 0x5062000c, 0xafa00010, 0x8f42022c, +0x21080, 0x5a1021, 0x8c420300, 0xafa20020, +0x8f42022c, 0x24070001, 0x24420001, 0x3042003f, +0x8001b80, 0xaf42022c, 0x3c040001, 0x24844b30, +0xafa00014, 0x8f46022c, 0x8f47010c, 0x3c050003, +0xc002407, 0x34a5f01f, 0x3821, 0x14e00003, +0x0, 0x80022ed, 0xaf960064, 0x93a20020, +0x2443ffff, 0x2c620011, 0x10400658, 0x31080, +0x3c010001, 0x220821, 0x8c224be8, 0x400008, +0x0, 0x8fa20020, 0x30420fff, 0xaee20e0c, +0x8f820060, 0x34420200, 0xaf820060, 0x8ee20118, +0x24420001, 0xaee20118, 0x80022e8, 0x8ee20118, +0x8fa20020, 0x24030001, 0x3c010001, 0x370821, +0xa02383b1, 0x30420fff, 0xaee25238, 0x8f820060, +0x34420100, 0xaf820060, 0x8ee20144, 0x24420001, +0xaee20144, 0x80022e8, 0x8ee20144, 0x8fa20020, +0x21200, 0x22502, 0x24020001, 0x10820005, +0x24020002, 0x10820009, 0x2402fffe, 0x8001bc9, +0xafa00010, 0x8ee204d4, 0xaee40070, 0xaee40074, +0x34420001, 0x8001bbd, 0xaee204d4, 0x8ee304d4, +0xaee40070, 0xaee40074, 0x621824, 0xaee304d4, +0x8f840054, 0x41442, 0x41c82, 0x431021, +0x41cc2, 0x431023, 0x41d02, 0x431021, +0x41d42, 0x431023, 0x8001bd0, 0xaee20078, +0x3c040001, 0x24844b3c, 0xafa00014, 0x8fa60020, +0x3c050003, 0xc002407, 0x34a50004, 0x8ee20110, +0x24420001, 0xaee20110, 0x80022e8, 0x8ee20110, +0x27440212, 0xc0022fe, 0x24050006, 0x3049001f, +0x920c0, 0x2e41021, 0x9442727c, 0x30424000, +0x1040000a, 0x971021, 0x97430212, 0xa443727e, +0x8f430214, 0x971021, 0xac437280, 0x2e41821, +0x34028000, 0x8001c79, 0xa462727c, 0x9443727e, +0x97420212, 0x14620006, 0x2e41021, 0x971021, +0x8c437280, 0x8f420214, 0x1062009f, 0x2e41021, +0x9442727c, 0x30428000, 0x1040002a, 0x2406ffff, +0x2021, 0x410c0, 0x2e21021, 0x9442737c, +0x30424000, 0x54400005, 0x803021, 0x24840001, +0x2c820080, 0x1440fff8, 0x410c0, 0x4c10010, +0x618c0, 0x610c0, 0x571821, 0x8c63737c, +0x571021, 0xafa30010, 0x8c427380, 0x3c040001, +0x24844b48, 0xafa20014, 0x8f470214, 0x3c050003, +0xc002407, 0x34a50013, 0x8001c90, 0x3c020800, +0x97440212, 0x771021, 0xa444737e, 0x8f440214, +0x771021, 0x2e31821, 0xac447380, 0x34028000, +0xa462737c, 0x910c0, 0x2e21021, 0x8001c79, +0xa446727c, 0x2e41021, 0x9445727c, 0x8001c2e, +0x510c0, 0x9443737e, 0x97420212, 0x14620006, +0x510c0, 0x971021, 0x8c437380, 0x8f420214, +0x10620065, 0x510c0, 0x2e21021, 0x9445737c, +0x510c0, 0x2e21021, 0x9442737c, 0x30428000, +0x1040fff0, 0x971021, 0x520c0, 0x971021, +0x9443737e, 0x97420212, 0x14620006, 0x2406ffff, +0x971021, 0x8c437380, 0x8f420214, 0x10620053, +0x3c020800, 0x2021, 0x410c0, 0x2e21021, +0x9442737c, 0x30424000, 0x54400005, 0x803021, +0x24840001, 0x2c820080, 0x1440fff8, 0x410c0, +0x4c10023, 0x618c0, 0x910c0, 0x571821, +0x8c63727c, 0x571021, 0xafa30010, 0x8c427280, +0x3c040001, 0x24844b54, 0xafa20014, 0x8f470214, +0x3c050003, 0xc002407, 0x34a5f017, 0x8001c90, +0x3c020800, 0x8f430210, 0xb71021, 0xac43777c, +0x8f430214, 0xb71021, 0xac437780, 0x3c020001, +0x571021, 0x8c4283b4, 0x24420001, 0x3c010001, +0x370821, 0xac2283b4, 0x3c030001, 0x771821, +0x8c6383b4, 0x2e51021, 0x8001c82, 0xa443777c, +0x97440212, 0x771021, 0xa444737e, 0x8f440214, +0x771021, 0x2e31821, 0xac447380, 0x34028000, +0xa462737c, 0x510c0, 0x2e21021, 0xa446737c, +0x2021, 0x428c0, 0x2e51021, 0x9442777c, +0x1040ffdc, 0x24840001, 0x2c820080, 0x5440fffa, +0x428c0, 0x92e204d8, 0x10400006, 0x24020001, +0x8ee304dc, 0x1221004, 0x621825, 0x8001c8f, +0xaee304dc, 0x8f830228, 0x24020001, 0x1221004, +0x621825, 0xaf830228, 0x3c020800, 0x34421000, +0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001, +0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee20608, +0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, +0xac43060c, 0xac440610, 0x8f830054, 0x8f820054, +0x24690032, 0x1221023, 0x2c420033, 0x1040006a, +0x5821, 0x24100008, 0x240f000d, 0x240d0007, +0x240c0040, 0x240e0001, 0x8f870120, 0x27623800, +0x24e80020, 0x102102b, 0x50400001, 0x27683000, +0x8f820128, 0x11020004, 0x0, 0x8f820124, +0x15020007, 0x1021, 0x8ee201a4, 0x3821, +0x24420001, 0xaee201a4, 0x8001d08, 0x8ee201a4, +0x8ee40608, 0x420c0, 0x801821, 0x8ee40430, +0x8ee50434, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xace40000, 0xace50004, 0x8ee20608, +0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, +0x2442060c, 0x2e21021, 0xace20008, 0x8ee204c4, +0xace20010, 0xaf880120, 0x92e24e20, 0x14400033, +0x24070001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c820000, 0x144d001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x104c0007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x8001cf5, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400010, 0xac800000, +0x8001d08, 0x0, 0x8ee24e30, 0x24420001, +0x504c0003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, +0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, +0x1440ff9d, 0x0, 0x316300ff, 0x24020001, +0x54620078, 0xafa00010, 0xaeea0608, 0x8f830054, +0x8f820054, 0x24690032, 0x1221023, 0x2c420033, +0x10400061, 0x5821, 0x240e0008, 0x240d0011, +0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x3821, 0x24420001, 0xaee201a4, 0x8001d74, +0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0, +0x8ee504a4, 0x2462001c, 0xac620008, 0xa46e000e, +0xac6d0018, 0xac640000, 0xac650004, 0x8ee204c4, +0xac620010, 0xaf860120, 0x92e24e20, 0x14400033, +0x24070001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c820000, 0x144a001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x10480007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x8001d61, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400010, 0xac800000, +0x8001d74, 0x0, 0x8ee24e30, 0x24420001, +0x50480003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, +0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, +0x1440ffa6, 0x0, 0x316300ff, 0x24020001, +0x10620022, 0x0, 0x3c040001, 0x24844b60, +0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, +0x3c050009, 0xc002407, 0x34a5f011, 0x8001da0, +0x0, 0x3c040001, 0x24844b6c, 0xafa00014, +0x8f860120, 0x8f870124, 0x3c050009, 0xc002407, +0x34a5f010, 0x8001da0, 0x0, 0x3c040001, +0x24844b78, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f00f, 0x8ee201ac, +0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20124, +0x24420001, 0xaee20124, 0x8001f97, 0x8ee20124, +0x27440212, 0xc0022fe, 0x24050006, 0x3049001f, +0x928c0, 0x2e51021, 0x9442727c, 0x30428000, +0x1040002f, 0x2e51021, 0x9442727c, 0x30424000, +0x1440001c, 0xb71021, 0x9443727e, 0x97420212, +0x14620018, 0xb71021, 0x8c437280, 0x8f420214, +0x54620016, 0xafa20010, 0x92e204d8, 0x10400007, +0x24020001, 0x8ee304dc, 0x1221004, 0x21027, +0x621824, 0x8001dc9, 0xaee304dc, 0x8f830228, +0x1221004, 0x21027, 0x621824, 0xaf830228, +0x910c0, 0x2e21821, 0x3402c000, 0x8001e4e, +0xa462727c, 0x8f420214, 0xafa20010, 0x910c0, +0x571021, 0x8c42727c, 0x3c040001, 0x24844b84, +0x3c050003, 0xafa20014, 0x8f470210, 0x34a5f01c, +0xc002407, 0x1203021, 0x8001e83, 0x3c020800, +0xb71021, 0x9443727e, 0x97420212, 0x14620019, +0x918c0, 0xb71021, 0x8c437280, 0x8f420214, +0x14620014, 0x918c0, 0x2e51021, 0x9447727c, +0x720c0, 0x971021, 0x9443737e, 0xb71021, +0xa443727e, 0x971021, 0x8c437380, 0xb71021, +0xac437280, 0x2e41021, 0x9443737c, 0x2e51021, +0xa443727c, 0x2e41821, 0x3402c000, 0x8001e4e, +0xa462737c, 0x2e31021, 0x9447727c, 0x3021, +0x720c0, 0x2e41021, 0x9442737c, 0x4021, +0x30428000, 0x14400025, 0xe02821, 0x605021, +0x340bc000, 0x971021, 0x9443737e, 0x97420212, +0x54620015, 0xe02821, 0x971021, 0x8c437380, +0x8f420214, 0x54620010, 0xe02821, 0x11000006, +0x2e41021, 0x9443737c, 0x510c0, 0x2e21021, +0x8001e1a, 0xa443737c, 0x9443737c, 0x2ea1021, +0xa443727c, 0x710c0, 0x2e21021, 0xa44b737c, +0x8001e28, 0x24060001, 0x510c0, 0x2e21021, +0x9447737c, 0x720c0, 0x2e41021, 0x9442737c, +0x30428000, 0x1040ffdf, 0x25080001, 0x30c200ff, +0x14400025, 0x2021, 0x720c0, 0x971021, +0x9443737e, 0x97420212, 0x1462000f, 0x910c0, +0x971021, 0x8c437380, 0x8f420214, 0x1462000a, +0x910c0, 0x2e41821, 0x3402c000, 0x15000015, +0xa462737c, 0x910c0, 0x2e21821, 0x34028000, +0x8001e4e, 0xa462727c, 0x571021, 0x8c42727c, +0x3c040001, 0x24844b90, 0x3c050003, 0xafa20010, +0x710c0, 0x571021, 0x8c42737c, 0x34a5001e, +0x1203021, 0xc002407, 0xafa20014, 0x8001e83, +0x3c020800, 0x2021, 0x428c0, 0xb71021, +0x9443777e, 0x97420212, 0x5462002b, 0x24840001, +0xb71021, 0x8c437780, 0x8f420214, 0x54620026, +0x24840001, 0x3c020001, 0x571021, 0x8c4283b4, +0x2442ffff, 0x3c010001, 0x370821, 0xac2283b4, +0x3c020001, 0x571021, 0x8c4283b4, 0x809021, +0x242102b, 0x1040000e, 0x24b1777c, 0x24b07784, +0x2f02021, 0x2f12821, 0xc002494, 0x24060008, +0x26310008, 0x3c020001, 0x571021, 0x8c4283b4, +0x26520001, 0x242102b, 0x1440fff5, 0x26100008, +0x3c040001, 0x972021, 0x8c8483b4, 0x24050008, +0x420c0, 0x2484777c, 0xc00248c, 0x2e42021, +0x8001e83, 0x3c020800, 0x2c820080, 0x1440ffcf, +0x428c0, 0x3c020800, 0x34422000, 0xafa20018, +0x8ee20608, 0x8f430228, 0x24420001, 0x304a00ff, +0x514300fd, 0xafa00010, 0x8ee20608, 0x210c0, +0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c, +0xac440610, 0x8f830054, 0x8f820054, 0x24690032, +0x1221023, 0x2c420033, 0x1040006a, 0x5821, +0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, +0x240e0001, 0x8f870120, 0x27623800, 0x24e80020, +0x102102b, 0x50400001, 0x27683000, 0x8f820128, +0x11020004, 0x0, 0x8f820124, 0x15020007, +0x1021, 0x8ee201a4, 0x3821, 0x24420001, +0xaee201a4, 0x8001efb, 0x8ee201a4, 0x8ee40608, +0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0xace40000, 0xace50004, 0x8ee20608, 0xa4f0000e, +0xacef0018, 0xacea001c, 0x210c0, 0x2442060c, +0x2e21021, 0xace20008, 0x8ee204c4, 0xace20010, +0xaf880120, 0x92e24e20, 0x14400033, 0x24070001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x144d001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x104c0007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8001ee8, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x8001efb, +0x0, 0x8ee24e30, 0x24420001, 0x504c0003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, +0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d, +0x0, 0x316300ff, 0x24020001, 0x54620078, +0xafa00010, 0xaeea0608, 0x8f830054, 0x8f820054, +0x24690032, 0x1221023, 0x2c420033, 0x10400061, +0x5821, 0x240e0008, 0x240d0011, 0x240a0012, +0x24080040, 0x240c0001, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x3821, +0x24420001, 0xaee201a4, 0x8001f67, 0x8ee201a4, +0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4, +0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400033, 0x24070001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x144a001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x10480007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8001f54, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x8001f67, +0x0, 0x8ee24e30, 0x24420001, 0x50480003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, +0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, +0x0, 0x316300ff, 0x24020001, 0x10620022, +0x0, 0x3c040001, 0x24844b60, 0xafa00010, +0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, +0xc002407, 0x34a5f011, 0x8001f93, 0x0, +0x3c040001, 0x24844b6c, 0xafa00014, 0x8f860120, +0x8f870124, 0x3c050009, 0xc002407, 0x34a5f010, +0x8001f93, 0x0, 0x3c040001, 0x24844b78, +0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, +0xc002407, 0x34a5f00f, 0x8ee201ac, 0x24420001, +0xaee201ac, 0x8ee201ac, 0x8ee20128, 0x24420001, +0xaee20128, 0x8ee20128, 0x8ee20164, 0x24420001, +0xaee20164, 0x80022e8, 0x8ee20164, 0x8fa20020, +0x21200, 0x21d02, 0x24020001, 0x10620005, +0x24020002, 0x1062000d, 0x0, 0x8001fb7, +0xafa00010, 0x92e204d8, 0x14400006, 0x24020001, +0x8f820228, 0xaee204dc, 0x2402ffff, 0xaf820228, +0x24020001, 0x8001fbe, 0xa2e204d8, 0x92e204d8, +0x5040000c, 0xa2e004d8, 0x8ee204dc, 0xaf820228, +0x8001fbe, 0xa2e004d8, 0x3c040001, 0x24844b98, +0xafa00014, 0x8fa60020, 0x3c050003, 0xc002407, +0x34a5f009, 0x8ee2013c, 0x24420001, 0xaee2013c, +0x80022e8, 0x8ee2013c, 0x8fa20020, 0x21200, +0x22502, 0x24020001, 0x10820005, 0x24020002, +0x1082000f, 0x0, 0x8001fe3, 0xafa00010, +0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, +0x34420008, 0xaf820220, 0x24020001, 0x3c010001, +0x370821, 0xa02283b2, 0x8001fea, 0xaee40108, +0x8f820220, 0x3c0308ff, 0x3463fff7, 0x431024, +0xaf820220, 0x3c010001, 0x370821, 0xa02083b2, +0x8001fea, 0xaee40108, 0x3c040001, 0x24844ba4, +0xafa00014, 0x8fa60020, 0x3c050003, 0xc002407, +0x34a5f00a, 0x8ee2012c, 0x24420001, 0xaee2012c, +0x80022e8, 0x8ee2012c, 0x8fa20020, 0x21200, +0x21d02, 0x24020001, 0x10620005, 0x24020002, +0x1062000e, 0x0, 0x8002011, 0xafa00010, +0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, +0x34420008, 0xaf820220, 0x24020001, 0x3c010001, +0x370821, 0x8002018, 0xa02283b3, 0x3c020001, +0x571021, 0x904283b2, 0x3c010001, 0x370821, +0x1440000e, 0xa02083b3, 0x8f820220, 0x3c0308ff, +0x3463fff7, 0x431024, 0x8002018, 0xaf820220, +0x3c040001, 0x24844bb0, 0xafa00014, 0x8fa60020, +0x3c050003, 0xc002407, 0x34a5f00b, 0x8ee20114, +0x24420001, 0xaee20114, 0x80022e8, 0x8ee20114, +0x27840208, 0x27450200, 0xc00249e, 0x24060008, +0x26e40094, 0x27450200, 0xc00249e, 0x24060008, +0x8ee20134, 0x24420001, 0xaee20134, 0x80022e8, +0x8ee20134, 0x8f460248, 0x2021, 0xc004fa4, +0x24050004, 0x8ee20130, 0x24420001, 0xaee20130, +0x80022e8, 0x8ee20130, 0x8ef301cc, 0x8ef401d0, +0x8ef501d8, 0x8ee20140, 0x26e40030, 0x24420001, +0xaee20140, 0x8ef00140, 0x8ef10074, 0x8ef20070, +0xc00248c, 0x24050400, 0xaef301cc, 0xaef401d0, +0xaef501d8, 0xaef00140, 0xaef10074, 0xaef20070, +0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260, +0x27450200, 0x24060008, 0xaee20068, 0x24020006, +0xc00249e, 0xaee20064, 0x3c023b9a, 0x3442ca00, +0xaee2006c, 0x240203e8, 0x24040002, 0x24030001, +0xaee20104, 0xaee40100, 0xaee3010c, 0x8f820220, +0x30420008, 0x10400004, 0x0, 0xaee30108, +0x8002061, 0x2021, 0xaee40108, 0x2021, +0x3c030001, 0x641821, 0x906353e0, 0x2e41021, +0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8, +0x0, 0x8f820040, 0x2e41821, 0x24840001, +0x21702, 0x24420030, 0xa062009c, 0x2e41021, +0x80022e8, 0xa040009c, 0x24020001, 0x3c010001, +0x370821, 0xa02283e0, 0x240b0400, 0x24080014, +0x240a0040, 0x24090001, 0x8f830100, 0x27623000, +0x24660020, 0xc2102b, 0x50400001, 0x27662800, +0x8f820108, 0x10c20004, 0x0, 0x8f820104, +0x14c20007, 0x26e20030, 0x8ee201a8, 0x3821, +0x24420001, 0xaee201a8, 0x80020a8, 0x8ee201a8, +0x8ee404b8, 0x8ee504bc, 0xac620008, 0xa46b000e, +0xac680018, 0xac60001c, 0xac640000, 0xac650004, +0x8ee204cc, 0xac620010, 0xaf860100, 0x92e204ec, +0x1440000e, 0x24070001, 0x8ee24e28, 0x24420001, +0x504a0003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e21021, 0xac480000, 0xac490004, 0x10e0ffd2, +0x0, 0x80022e8, 0x0, 0x3c020900, +0xaee05238, 0xaee0523c, 0xaee05240, 0xaee05244, +0xaee001d0, 0x3c010001, 0x370821, 0xa02083b1, +0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001, +0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee20608, +0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, +0xac43060c, 0xac440610, 0x8f830054, 0x8f820054, +0x24690032, 0x1221023, 0x2c420033, 0x1040006a, +0x5821, 0x24100008, 0x240f000d, 0x240d0007, +0x240c0040, 0x240e0001, 0x8f870120, 0x27623800, +0x24e80020, 0x102102b, 0x50400001, 0x27683000, +0x8f820128, 0x11020004, 0x0, 0x8f820124, +0x15020007, 0x1021, 0x8ee201a4, 0x3821, +0x24420001, 0xaee201a4, 0x800212c, 0x8ee201a4, +0x8ee40608, 0x420c0, 0x801821, 0x8ee40430, +0x8ee50434, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xace40000, 0xace50004, 0x8ee20608, +0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, +0x2442060c, 0x2e21021, 0xace20008, 0x8ee204c4, +0xace20010, 0xaf880120, 0x92e24e20, 0x14400033, +0x24070001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c820000, 0x144d001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x104c0007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x8002119, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400010, 0xac800000, +0x800212c, 0x0, 0x8ee24e30, 0x24420001, +0x504c0003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, +0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, +0x1440ff9d, 0x0, 0x316300ff, 0x24020001, +0x54620078, 0xafa00010, 0xaeea0608, 0x8f830054, +0x8f820054, 0x24690032, 0x1221023, 0x2c420033, +0x10400061, 0x5821, 0x240e0008, 0x240d0011, +0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x3821, 0x24420001, 0xaee201a4, 0x8002198, +0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0, +0x8ee504a4, 0x2462001c, 0xac620008, 0xa46e000e, +0xac6d0018, 0xac640000, 0xac650004, 0x8ee204c4, +0xac620010, 0xaf860120, 0x92e24e20, 0x14400033, +0x24070001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c820000, 0x144a001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x10480007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x8002185, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400010, 0xac800000, +0x8002198, 0x0, 0x8ee24e30, 0x24420001, +0x50480003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, +0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, +0x1440ffa6, 0x0, 0x316300ff, 0x24020001, +0x10620022, 0x0, 0x3c040001, 0x24844b60, +0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, +0x3c050009, 0xc002407, 0x34a5f011, 0x80021c4, +0x0, 0x3c040001, 0x24844b6c, 0xafa00014, +0x8f860120, 0x8f870124, 0x3c050009, 0xc002407, +0x34a5f010, 0x80021c4, 0x0, 0x3c040001, +0x24844b78, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f00f, 0x8ee201ac, +0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20120, +0x24420001, 0xaee20120, 0x8ee20120, 0x8ee20168, +0x24420001, 0xaee20168, 0x80022e8, 0x8ee20168, +0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260, +0x27450200, 0x24060008, 0xc00249e, 0xaee20068, +0x8f820220, 0x30420008, 0x14400002, 0x24020001, +0x24020002, 0xaee20108, 0x8ee2011c, 0x24420001, +0xaee2011c, 0x80022e8, 0x8ee2011c, 0x3c040001, +0x24844bbc, 0xafa00010, 0xafa00014, 0x8fa60020, +0x3c050003, 0xc002407, 0x34a5f00f, 0x93a20020, +0x3c030700, 0x34631000, 0x431025, 0xafa20018, +0x8ee20608, 0x8f430228, 0x24420001, 0x304900ff, +0x512300e2, 0xafa00010, 0x8ee20608, 0x210c0, +0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c, +0xac440610, 0x8f870120, 0x27623800, 0x24e80020, +0x102102b, 0x50400001, 0x27683000, 0x8f820128, +0x11020004, 0x0, 0x8f820124, 0x15020007, +0x1021, 0x8ee201a4, 0x3821, 0x24420001, +0xaee201a4, 0x800225d, 0x8ee201a4, 0x8ee40608, +0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0xace40000, 0xace50004, 0x8ee30608, 0x24020008, +0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, +0x318c0, 0x2463060c, 0x2e31021, 0xace20008, +0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20, +0x14400037, 0x24070001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c830000, 0x24020007, +0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001, +0x10430007, 0x0, 0x8ee24e34, 0x24420001, +0x10a20005, 0x0, 0x8002247, 0x0, +0x14a00005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x800225d, 0x0, +0x8ee24e30, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020007, 0xac820000, 0x24020001, 0xac820004, +0x54e0000c, 0xaee90608, 0x3c040001, 0x24844bc4, +0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f000, 0x80022e0, +0x0, 0x8f830120, 0x27623800, 0x24660020, +0xc2102b, 0x50400001, 0x27663000, 0x8f820128, +0x10c20004, 0x0, 0x8f820124, 0x14c20007, +0x0, 0x8ee201a4, 0x3821, 0x24420001, +0xaee201a4, 0x80022c4, 0x8ee201a4, 0x8ee20608, +0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c, +0xac620008, 0x24020008, 0xa462000e, 0x24020011, +0xac620018, 0xac640000, 0xac650004, 0x8ee204c4, +0xac620010, 0xaf860120, 0x92e24e20, 0x14400037, +0x24070001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x24030040, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007, +0x0, 0x8ee24e34, 0x24420001, 0x10a20005, +0x0, 0x80022ae, 0x0, 0x14a00005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, +0xac800000, 0x80022c4, 0x0, 0x8ee24e30, +0x24030040, 0x24420001, 0x50430003, 0x1021, +0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x24020012, +0xac820000, 0x24020001, 0xac820004, 0x14e0001b, +0x0, 0x3c040001, 0x24844bcc, 0xafa00010, +0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, +0xc002407, 0x34a5f001, 0x8ee201b0, 0x24420001, +0xaee201b0, 0x80022e0, 0x8ee201b0, 0x3c040001, +0x24844bd8, 0xafa00014, 0x8ee60608, 0x8f470228, +0x3c050009, 0xc002407, 0x34a5f005, 0x8ee201ac, +0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20150, +0x24420001, 0xaee20150, 0x8ee20150, 0x8ee20160, +0x24420001, 0xaee20160, 0x8ee20160, 0x8f43022c, +0x8f42010c, 0x14620009, 0x24020002, 0xaf820064, +0x8f820064, 0x14400005, 0x0, 0x8f43022c, +0x8f42010c, 0x1462f875, 0x0, 0x8fbf0044, +0x8fb60040, 0x8fb5003c, 0x8fb40038, 0x8fb30034, +0x8fb20030, 0x8fb1002c, 0x8fb00028, 0x3e00008, +0x27bd0048, 0x27bdfff8, 0x2408ffff, 0x10a00014, +0x4821, 0x3c0aedb8, 0x354a8320, 0x90870000, +0x24840001, 0x3021, 0x1071026, 0x30420001, +0x10400002, 0x81842, 0x6a1826, 0x604021, +0x24c60001, 0x2cc20008, 0x1440fff7, 0x73842, +0x25290001, 0x125102b, 0x1440fff0, 0x0, +0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffe8, +0x27642800, 0xafbf0010, 0xc00248c, 0x24051000, +0x24020021, 0xaf800100, 0xaf800104, 0xaf800108, +0xaf800110, 0xaf800114, 0xaf800118, 0xaf800120, +0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134, +0xaf800138, 0xaee04e28, 0xaee04e2c, 0xaee04e30, +0xaee04e34, 0xaf82011c, 0x8f420218, 0x30420040, +0x10400004, 0x0, 0x8f82011c, 0x34420004, +0xaf82011c, 0x8fbf0010, 0x3e00008, 0x27bd0018, +0x27bdffe0, 0xafbf0018, 0x8f820104, 0xafa20010, +0x8f820100, 0x3c050002, 0xafa20014, 0x8f8600b0, +0x8f87011c, 0x3c040001, 0x24844c8c, 0xc002407, +0x34a5f000, 0x8f8300b0, 0x3c027f00, 0x621824, +0x3c020400, 0x1062002b, 0x43102b, 0x14400008, +0x3c022000, 0x3c020100, 0x10620026, 0x3c020200, +0x10620013, 0x0, 0x8002376, 0x0, +0x1062000a, 0x43102b, 0x1040001e, 0x3c024000, +0x1462001c, 0x0, 0x8ee20190, 0x24420001, +0xaee20190, 0x8002376, 0x8ee20190, 0x8ee2018c, +0x24420001, 0xaee2018c, 0x8002376, 0x8ee2018c, +0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, +0x8f8200b0, 0x34420001, 0xaf8200b0, 0xaf830104, +0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, +0x8ee201a0, 0x24420001, 0xaee201a0, 0x8002379, +0x8ee201a0, 0x8f8200b0, 0x34420001, 0xaf8200b0, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, +0xafbf001c, 0xafb00018, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c050001, 0xafa20014, 0x8f8600a0, +0x8f87011c, 0x3c040001, 0x24844c98, 0xc002407, +0x34a5f000, 0x8f8300a0, 0x3c027f00, 0x621824, +0x3c020400, 0x10620055, 0x8021, 0x43102b, +0x14400008, 0x3c042000, 0x3c020100, 0x1062004f, +0x3c020200, 0x1062003c, 0x0, 0x80023e4, +0x0, 0x10640005, 0x83102b, 0x10400047, +0x3c024000, 0x14620045, 0x0, 0x8f8200a0, +0x441024, 0x10400006, 0x0, 0x8ee20194, +0x24420001, 0xaee20194, 0x80023ad, 0x8ee20194, +0x8ee20198, 0x24420001, 0xaee20198, 0x8ee20198, +0x8f82011c, 0x34420002, 0xaf82011c, 0x8f82011c, +0x30420200, 0x1040001b, 0x0, 0x8f8300a0, +0x8f840124, 0x8f8200ac, 0x14400007, 0x24020001, +0x3c020001, 0x3442f000, 0x621024, 0x50400001, +0x24100001, 0x24020001, 0x1200000d, 0xaf8200a0, +0x8f820124, 0x2442ffe0, 0xaf820124, 0x8f820124, +0x8f820124, 0x27633000, 0x43102b, 0x10400005, +0x276237e0, 0xaf820124, 0x80023ce, 0x0, +0xaf840124, 0x8f82011c, 0x2403fffd, 0x431024, +0x80023e7, 0xaf82011c, 0x8f82011c, 0x34420002, +0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001, +0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd, +0x431024, 0xaf82011c, 0x8ee2019c, 0x24420001, +0xaee2019c, 0x80023e7, 0x8ee2019c, 0x8f8200a0, +0x34420001, 0xaf8200a0, 0x8fbf001c, 0x8fb00018, +0x3e00008, 0x27bd0020, 0x0, 0x3c020001, +0x8c425408, 0x27bdffe8, 0xafbf0014, 0x14400012, +0xafb00010, 0x3c100001, 0x26105550, 0x2002021, +0xc00248c, 0x24052000, 0x26021fe0, 0x3c010001, +0xac225524, 0x3c010001, 0xac225520, 0xaf420250, +0x24022000, 0xaf500254, 0xaf420258, 0x24020001, +0x3c010001, 0xac225408, 0x8fbf0014, 0x8fb00010, +0x3e00008, 0x27bd0018, 0x3c030001, 0x8c635524, +0x8c820000, 0x8fa80010, 0x8fa90014, 0xac620000, +0x3c020001, 0x8c425524, 0x8c830004, 0xac430004, +0xac450008, 0x8f840054, 0x2443ffe0, 0xac460010, +0xac470014, 0xac480018, 0xac49001c, 0x3c010001, +0xac235524, 0xac44000c, 0x3c020001, 0x24425550, +0x62182b, 0x10600005, 0x0, 0x3c020001, +0x8c425520, 0x3c010001, 0xac225524, 0x3c030001, +0x8c635524, 0x3c020001, 0x8c4253f0, 0xac620000, +0x3c030001, 0x8c635524, 0x3c020001, 0x8c4253f0, +0xac620004, 0x3e00008, 0xaf430250, 0x3c030001, +0x8c635524, 0x3c020001, 0x8c4253f0, 0x27bdffd0, +0xafb40020, 0x8fb40040, 0xafb00010, 0x808021, +0xafb50024, 0x8fb50044, 0x8fa40048, 0xafb10014, +0xa08821, 0xafbf0028, 0xafb3001c, 0xafb20018, +0xac620000, 0x3c050001, 0x8ca55524, 0x3c020001, +0x8c4253f0, 0xc09021, 0xe09821, 0x10800006, +0xaca20004, 0x24a50008, 0xc002494, 0x24060018, +0x8002452, 0x0, 0x24a40008, 0xc00248c, +0x24050018, 0x3c020001, 0x8c425524, 0x3c050001, +0x24a55550, 0x2442ffe0, 0x3c010001, 0xac225524, +0x45102b, 0x10400005, 0x0, 0x3c020001, +0x8c425520, 0x3c010001, 0xac225524, 0x3c030001, +0x8c635524, 0x8e020000, 0xac620000, 0x3c030001, +0x8c635524, 0x8e020004, 0xac620004, 0xac710008, +0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225524, +0x45102b, 0xac720010, 0xac730014, 0xac740018, +0xac75001c, 0x10400005, 0xac64000c, 0x3c020001, +0x8c425520, 0x3c010001, 0xac225524, 0x3c030001, +0x8c635524, 0x3c020001, 0x8c4253f0, 0xac620000, +0x3c030001, 0x8c635524, 0x3c020001, 0x8c4253f0, +0xac620004, 0xaf430250, 0x8fbf0028, 0x8fb50024, +0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, +0x8fb00010, 0x3e00008, 0x27bd0030, 0x10a00005, +0x0, 0xac800000, 0x24a5fffc, 0x14a0fffd, +0x24840004, 0x3e00008, 0x0, 0x10c00007, +0x0, 0x8c820000, 0x24840004, 0x24c6fffc, +0xaca20000, 0x14c0fffb, 0x24a50004, 0x3e00008, +0x0, 0x10c00007, 0x0, 0x8ca20000, +0x24a50004, 0x24c6fffc, 0xac820000, 0x14c0fffb, +0x24840004, 0x3e00008, 0x0, 0x3e00008, +0x0, 0x27bdffd8, 0xafbf0020, 0x8ee304e4, +0x8ee204e0, 0x10620436, 0x0, 0x8ee204e4, +0x8ee304fc, 0x21100, 0x626021, 0x95870008, +0x8d8a0000, 0x8d8b0004, 0x958d000a, 0x8ee2725c, +0x8ee3726c, 0x30e4ffff, 0x441021, 0x62182b, +0x10600015, 0x31a20004, 0x8f8200d8, 0x8ee37258, +0x431023, 0xaee2726c, 0x8ee2726c, 0x1c400003, +0x3c030001, 0x431021, 0xaee2726c, 0x8ee2725c, +0x8ee3726c, 0x441021, 0x62182b, 0x10600006, +0x31a20004, 0x8ee201b8, 0x24420001, 0xaee201b8, +0x80028e5, 0x8ee201b8, 0x10400240, 0x31a20200, +0x1040014d, 0x4821, 0x96e2045a, 0x30420010, +0x10400149, 0x0, 0x8f840100, 0x27623000, +0x24850020, 0xa2102b, 0x50400001, 0x27652800, +0x8f820108, 0x10a20004, 0x0, 0x8f820104, +0x14a20006, 0x2402000c, 0x8ee201a8, 0x24420001, +0xaee201a8, 0x8002530, 0x8ee201a8, 0xac8a0000, +0xac8b0004, 0x8ee37264, 0x24060005, 0xa482000e, +0xac860018, 0xac830008, 0x8ee204e4, 0xac82001c, +0x8ee204c8, 0xac820010, 0xaf850100, 0x92e204ec, +0x14400036, 0x24090001, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e22021, 0x8c820000, 0x1446001f, +0x0, 0x8ee34e28, 0x8ee24e2c, 0x1062001b, +0x24030040, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e2c, 0x8ee54e28, 0x24420001, 0x10430007, +0x0, 0x8ee24e2c, 0x24420001, 0x10a20005, +0x0, 0x800251a, 0x0, 0x14a00005, +0x0, 0x8f820108, 0x24420020, 0xaf820108, +0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, +0xac800000, 0x8002530, 0x0, 0x8ee24e28, +0x24030040, 0x24420001, 0x50430003, 0x1021, +0x8ee24e28, 0x24420001, 0xaee24e28, 0x8ee24e28, +0x210c0, 0x24424e38, 0x2e22021, 0x24020005, +0xac820000, 0x24020001, 0xac820004, 0x1520000a, +0x3c040001, 0xafab0010, 0x8ee27264, 0x3c040001, +0x24844f00, 0x3c050004, 0xafa20014, 0x8ee604e4, +0x80028c2, 0x34a5f114, 0x8ee27264, 0x34843800, +0x3641821, 0x24420010, 0x43102b, 0x14400073, +0x0, 0x8ee27264, 0x24480010, 0x3641021, +0x102102b, 0x14400002, 0x3c02ffff, 0x1024021, +0x8f850100, 0x27623000, 0x24a60020, 0xc2102b, +0x50400001, 0x27662800, 0x8f820108, 0x10c20004, +0x0, 0x8f820104, 0x14c20007, 0x2563000c, +0x8ee201a8, 0x4821, 0x24420001, 0xaee201a8, +0x80025a4, 0x8ee201a8, 0x2c64000c, 0x1441021, +0xaca20000, 0xaca30004, 0x24e2fff4, 0xa4a2000e, +0x24020006, 0xaca80008, 0xaca20018, 0x8ee204e4, +0xaca2001c, 0x8ee204c8, 0x3c030002, 0x431025, +0xaca20010, 0xaf860100, 0x92e204ec, 0x14400037, +0x24090001, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, +0x0, 0x8ee34e28, 0x8ee24e2c, 0x1062001b, +0x24030040, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e2c, 0x8ee54e28, 0x24420001, 0x10430007, +0x0, 0x8ee24e2c, 0x24420001, 0x10a20005, +0x0, 0x800258e, 0x0, 0x14a00005, +0x0, 0x8f820108, 0x24420020, 0xaf820108, +0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, +0xac800000, 0x80025a4, 0x0, 0x8ee24e28, +0x24030040, 0x24420001, 0x50430003, 0x1021, +0x8ee24e28, 0x24420001, 0xaee24e28, 0x8ee24e28, +0x210c0, 0x24424e38, 0x2e22021, 0x24020005, +0xac820000, 0x24020001, 0xac820004, 0x1520000a, +0x2508fffc, 0xafab0010, 0x8ee27264, 0x3c040001, +0x24844f00, 0x3c050004, 0xafa20014, 0x8ee604e4, +0x80028c2, 0x34a5f125, 0x34028100, 0xa5020000, +0x9582000e, 0x8002621, 0xa5020002, 0x8f850100, +0x27623000, 0x24a60020, 0xc2102b, 0x50400001, +0x27662800, 0x8f820108, 0x10c20004, 0x0, +0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a8, +0x4821, 0x24420001, 0xaee201a8, 0x8002611, +0x8ee201a8, 0x2c64000c, 0x1441021, 0xaca20000, +0xaca30004, 0x8ee37264, 0x24e2fff4, 0xa4a2000e, +0x24020006, 0xaca20018, 0x24630010, 0xaca30008, +0x8ee204e4, 0xaca2001c, 0x8ee204c8, 0x3c030002, +0x431025, 0xaca20010, 0xaf860100, 0x92e204ec, +0x14400037, 0x24090001, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e22021, 0x8c830000, 0x24020005, +0x1462001f, 0x0, 0x8ee34e28, 0x8ee24e2c, +0x1062001b, 0x24030040, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e2c, 0x8ee54e28, 0x24420001, +0x10430007, 0x0, 0x8ee24e2c, 0x24420001, +0x10a20005, 0x0, 0x80025fb, 0x0, +0x14a00005, 0x0, 0x8f820108, 0x24420020, +0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, +0x50400013, 0xac800000, 0x8002611, 0x0, +0x8ee24e28, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e28, 0x24420001, 0xaee24e28, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x24020005, 0xac820000, 0x24020001, 0xac820004, +0x1520000a, 0x34028100, 0xafab0010, 0x8ee27264, +0x3c040001, 0x24844f00, 0x3c050004, 0xafa20014, +0x8ee604e4, 0x80028c2, 0x34a5f015, 0x8ee37264, +0xa462000c, 0x8ee37264, 0x9582000e, 0xa462000e, +0x8002685, 0x24e70004, 0x8f840100, 0x27623000, +0x24850020, 0xa2102b, 0x50400001, 0x27652800, +0x8f820108, 0x10a20004, 0x0, 0x8f820104, +0x14a20007, 0x24020006, 0x8ee201a8, 0x4821, +0x24420001, 0xaee201a8, 0x800267b, 0x8ee201a8, +0xac8a0000, 0xac8b0004, 0x8ee37264, 0xa487000e, +0xac820018, 0xac830008, 0x8ee204e4, 0xac82001c, +0x8ee204c8, 0x3c030002, 0x431025, 0xac820010, +0xaf850100, 0x92e204ec, 0x14400037, 0x24090001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c830000, 0x24020005, 0x1462001f, 0x0, +0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c, +0x8ee54e28, 0x24420001, 0x10430007, 0x0, +0x8ee24e2c, 0x24420001, 0x10a20005, 0x0, +0x8002665, 0x0, 0x14a00005, 0x0, +0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x800267b, 0x0, 0x8ee24e28, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e28, +0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e22021, 0x24020005, 0xac820000, +0x24020001, 0xac820004, 0x15200009, 0x3c050004, +0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f00, +0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f004, +0x8ee2725c, 0x30e7ffff, 0x471021, 0xaee2725c, +0x8ee204e4, 0x8ee304fc, 0x8ee47258, 0x21100, +0x431021, 0xac44000c, 0x8ee27258, 0xafa20018, +0x8ee3725c, 0xafa3001c, 0x8ee2725c, 0x2c42003c, +0x10400004, 0x24620001, 0x2403fffe, 0x431024, +0xafa2001c, 0x8ee27264, 0x3c060001, 0x34c63800, +0x8ee3725c, 0x2405fff8, 0x471021, 0x24420007, +0x451024, 0x24630007, 0xaee27258, 0x8ee2726c, +0x8ee47258, 0x651824, 0x431023, 0xaee2726c, +0x3661021, 0x82202b, 0x14800004, 0x3c03ffff, +0x8ee27258, 0x431021, 0xaee27258, 0x8ee27258, +0xaee27264, 0x8f8200f0, 0x24470008, 0x27621800, +0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4, +0x14e20007, 0x0, 0x8ee201b4, 0x4821, +0x24420001, 0xaee201b4, 0x80026c8, 0x8ee201b4, +0x8f8200f0, 0x24090001, 0x8fa30018, 0x8fa4001c, +0xac430000, 0xac440004, 0xaf8700f0, 0x15200012, +0xd1142, 0x8f8200f0, 0xafa20010, 0x8f8200f4, +0x3c040001, 0x24844f0c, 0xafa20014, 0x8fa60018, +0x8fa7001c, 0x3c050004, 0xc002407, 0x34a5f005, +0x8ee20088, 0x24420001, 0xaee20088, 0x8ee20088, +0x80028d7, 0xaee0725c, 0x30430003, 0x24020002, +0x10620016, 0x28620003, 0x10400005, 0x24020001, +0x10620008, 0x0, 0x8002707, 0x0, +0x24020003, 0x10620017, 0x0, 0x8002707, +0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001, +0x2c640001, 0x441021, 0xaee200e8, 0xaee300ec, +0x8ee200e8, 0x8002707, 0x8ee300ec, 0x8ee200f0, +0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, +0xaee200f0, 0xaee300f4, 0x8ee200f0, 0x8002707, +0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001, +0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, +0x8ee200f8, 0x8ee300fc, 0x8ee2725c, 0x8ee400e0, +0x8ee500e4, 0x401821, 0x1021, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xaee400e0, +0xaee500e4, 0x80028d7, 0xaee0725c, 0x30e2ffff, +0x104001c1, 0x31a20200, 0x1040014d, 0x4821, +0x96e2045a, 0x30420010, 0x10400149, 0x0, +0x8f840100, 0x27623000, 0x24850020, 0xa2102b, +0x50400001, 0x27652800, 0x8f820108, 0x10a20004, +0x0, 0x8f820104, 0x14a20006, 0x2402000c, +0x8ee201a8, 0x24420001, 0xaee201a8, 0x8002772, +0x8ee201a8, 0xac8a0000, 0xac8b0004, 0x8ee37264, +0x24060005, 0xa482000e, 0xac860018, 0xac830008, +0x8ee204e4, 0xac82001c, 0x8ee204c8, 0xac820010, +0xaf850100, 0x92e204ec, 0x14400036, 0x24090001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c820000, 0x1446001f, 0x0, 0x8ee34e28, +0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28, +0x24420001, 0x10430007, 0x0, 0x8ee24e2c, +0x24420001, 0x10a20005, 0x0, 0x800275c, +0x0, 0x14a00005, 0x0, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x8002772, +0x0, 0x8ee24e28, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e22021, 0x24020005, 0xac820000, 0x24020001, +0xac820004, 0x1520000a, 0x3c040001, 0xafab0010, +0x8ee27264, 0x3c040001, 0x24844f00, 0x3c050004, +0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f014, +0x8ee27264, 0x34843800, 0x3641821, 0x24420010, +0x43102b, 0x14400073, 0x0, 0x8ee27264, +0x24480010, 0x3641021, 0x102102b, 0x14400002, +0x3c02ffff, 0x1024021, 0x8f850100, 0x27623000, +0x24a60020, 0xc2102b, 0x50400001, 0x27662800, +0x8f820108, 0x10c20004, 0x0, 0x8f820104, +0x14c20007, 0x2563000c, 0x8ee201a8, 0x4821, +0x24420001, 0xaee201a8, 0x80027e6, 0x8ee201a8, +0x2c64000c, 0x1441021, 0xaca20000, 0xaca30004, +0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca80008, +0xaca20018, 0x8ee204e4, 0xaca2001c, 0x8ee204c8, +0x3c030002, 0x431025, 0xaca20010, 0xaf860100, +0x92e204ec, 0x14400037, 0x24090001, 0x8ee24e28, +0x210c0, 0x24424e38, 0x2e22021, 0x8c830000, +0x24020005, 0x1462001f, 0x0, 0x8ee34e28, +0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28, +0x24420001, 0x10430007, 0x0, 0x8ee24e2c, +0x24420001, 0x10a20005, 0x0, 0x80027d0, +0x0, 0x14a00005, 0x0, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x80027e6, +0x0, 0x8ee24e28, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e22021, 0x24020005, 0xac820000, 0x24020001, +0xac820004, 0x1520000a, 0x2508fffc, 0xafab0010, +0x8ee27264, 0x3c040001, 0x24844f00, 0x3c050004, +0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f015, +0x34028100, 0xa5020000, 0x9582000e, 0x8002863, +0xa5020002, 0x8f850100, 0x27623000, 0x24a60020, +0xc2102b, 0x50400001, 0x27662800, 0x8f820108, +0x10c20004, 0x0, 0x8f820104, 0x14c20007, +0x2563000c, 0x8ee201a8, 0x4821, 0x24420001, +0xaee201a8, 0x8002853, 0x8ee201a8, 0x2c64000c, +0x1441021, 0xaca20000, 0xaca30004, 0x8ee37264, +0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca20018, +0x24630010, 0xaca30008, 0x8ee204e4, 0xaca2001c, +0x8ee204c8, 0x3c030002, 0x431025, 0xaca20010, +0xaf860100, 0x92e204ec, 0x14400037, 0x24090001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c830000, 0x24020005, 0x1462001f, 0x0, +0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c, +0x8ee54e28, 0x24420001, 0x10430007, 0x0, +0x8ee24e2c, 0x24420001, 0x10a20005, 0x0, +0x800283d, 0x0, 0x14a00005, 0x0, +0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x8002853, 0x0, 0x8ee24e28, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e28, +0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e22021, 0x24020005, 0xac820000, +0x24020001, 0xac820004, 0x1520000a, 0x34028100, +0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f00, +0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028c2, +0x34a5f016, 0x8ee37264, 0xa462000c, 0x8ee37264, +0x9582000e, 0xa462000e, 0x80028c6, 0x24e70004, +0x8f830100, 0x27623000, 0x24640020, 0x82102b, +0x50400001, 0x27642800, 0x8f820108, 0x10820004, +0x0, 0x8f820104, 0x14820007, 0x24050005, +0x8ee201a8, 0x4821, 0x24420001, 0xaee201a8, +0x80028ba, 0x8ee201a8, 0xac6a0000, 0xac6b0004, +0x8ee27264, 0xa467000e, 0xac650018, 0xac620008, +0x8ee204e4, 0xac62001c, 0x8ee204c8, 0xac620010, +0xaf840100, 0x92e204ec, 0x14400036, 0x24090001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c820000, 0x1445001f, 0x0, 0x8ee34e28, +0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28, +0x24420001, 0x10430007, 0x0, 0x8ee24e2c, +0x24420001, 0x10a20005, 0x0, 0x80028a4, +0x0, 0x14a00005, 0x0, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x80028ba, +0x0, 0x8ee24e28, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e22021, 0x24020005, 0xac820000, 0x24020001, +0xac820004, 0x1520000b, 0x3c050004, 0x3c040001, +0x24844f18, 0xafab0010, 0xafa00014, 0x8ee604e4, +0x34a5f017, 0xc002407, 0x30e7ffff, 0x80028e5, +0x0, 0x8ee27264, 0x3c050001, 0x30e4ffff, +0x441021, 0xaee27264, 0x8ee2725c, 0x8ee37264, +0x34a53800, 0x441021, 0xaee2725c, 0x3651021, +0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27264, +0x431021, 0xaee27264, 0x8ee304e4, 0x96e20458, +0x24630001, 0x2442ffff, 0x621824, 0xaee304e4, +0x8ee304e4, 0x8ee204e0, 0x14620005, 0x0, +0x8f820060, 0x2403fff7, 0x431024, 0xaf820060, +0x8fbf0020, 0x3e00008, 0x27bd0028, 0x27bdffe0, +0xafbf0018, 0x8ee304e8, 0x8ee204e0, 0x10620189, +0x0, 0x8ee204e8, 0x8ee304fc, 0x21100, +0x621821, 0x94670008, 0x92e204ed, 0x8c680000, +0x8c690004, 0x10400023, 0x946a000a, 0x8ee204c8, +0x34460400, 0x31420200, 0x1040001f, 0x0, +0x96e2045a, 0x30420010, 0x1040001b, 0x3c028000, +0x3c010001, 0x370821, 0xac2283d8, 0x8ee27264, +0x9464000e, 0x3c050001, 0x34a53800, 0x24420004, +0xaee27264, 0x8ee37264, 0x42400, 0x3651021, +0x3c010001, 0x370821, 0xac2483dc, 0x62182b, +0x14600005, 0x24e70004, 0x8ee27264, 0x3c03ffff, +0x431021, 0xaee27264, 0x8ee27264, 0x800291b, +0xaee27258, 0x8ee604c8, 0x8ee2726c, 0x30e4ffff, +0x44102a, 0x10400015, 0x0, 0x8f8200d8, +0x8ee37258, 0x431023, 0xaee2726c, 0x8ee2726c, +0x1c400007, 0x44102a, 0x8ee2726c, 0x3c030001, +0x431021, 0xaee2726c, 0x8ee2726c, 0x44102a, +0x10400006, 0x0, 0x8ee201b8, 0x24420001, +0xaee201b8, 0x8002a76, 0x8ee201b8, 0x3c020001, +0x571021, 0x8c4283d8, 0x54400001, 0x24e7fffc, +0x31420004, 0x104000b9, 0x30e2ffff, 0x3c020001, +0x571021, 0x8c4283d8, 0x1040002f, 0x5021, +0x8f840100, 0x27623000, 0x24850020, 0xa2102b, +0x50400001, 0x27652800, 0x8f820108, 0x10a20032, +0x0, 0x8f820104, 0x10a2002f, 0x24020015, +0xac880000, 0xac890004, 0x8ee37264, 0xa487000e, +0xac820018, 0xac830008, 0x8ee204e8, 0x3c030001, +0x771821, 0x8c6383dc, 0xac860010, 0x431025, +0xac82001c, 0xaf850100, 0x92e204ec, 0x14400066, +0x240a0001, 0x8ee24e28, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e21821, 0x24020015, 0xac620000, 0x24020001, +0x80029c3, 0xac620004, 0x8f840100, 0x27623000, +0x24850020, 0xa2102b, 0x50400001, 0x27652800, +0x8f820108, 0x10a20004, 0x0, 0x8f820104, +0x14a20006, 0x24020006, 0x8ee201a8, 0x24420001, +0xaee201a8, 0x80029c3, 0x8ee201a8, 0xac880000, +0xac890004, 0x8ee37264, 0xa487000e, 0xac820018, +0xac830008, 0x8ee204e8, 0xac860010, 0xac82001c, +0xaf850100, 0x92e204ec, 0x14400037, 0x240a0001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c830000, 0x24020005, 0x1462001f, 0x0, +0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c, +0x8ee54e28, 0x24420001, 0x10430007, 0x0, +0x8ee24e2c, 0x24420001, 0x10a20005, 0x0, +0x80029ad, 0x0, 0x14a00005, 0x0, +0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x80029c3, 0x0, 0x8ee24e28, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e28, +0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e22021, 0x24020005, 0xac820000, +0x24020001, 0xac820004, 0x1540000a, 0x24020001, +0xafa90010, 0x8ee27264, 0x3c040001, 0x24844f00, +0x3c050004, 0xafa20014, 0x8ee604e4, 0x8002a53, +0x34a5f204, 0xa2e204ed, 0x8ee204e8, 0x8ee304fc, +0x8ee47258, 0x3c060001, 0x34c63800, 0x3c010001, +0x370821, 0xac2083d8, 0x3c010001, 0x370821, +0xac2083dc, 0x21100, 0x431021, 0xac44000c, +0x8ee27264, 0x2405fff8, 0x30e3ffff, 0x431021, +0x24420007, 0x451024, 0x24630007, 0xaee27258, +0x8ee2726c, 0x8ee47258, 0x651824, 0x431023, +0xaee2726c, 0x3661021, 0x82202b, 0x14800004, +0x3c03ffff, 0x8ee27258, 0x431021, 0xaee27258, +0x8ee27258, 0x8002a68, 0xaee27264, 0x10400073, +0x0, 0x8f830100, 0x27623000, 0x24640020, +0x82102b, 0x14400002, 0x5021, 0x27642800, +0x8f820108, 0x10820004, 0x0, 0x8f820104, +0x14820006, 0x24050005, 0x8ee201a8, 0x24420001, +0xaee201a8, 0x8002a4a, 0x8ee201a8, 0xac680000, +0xac690004, 0x8ee27264, 0xa467000e, 0xac650018, +0xac620008, 0x8ee204e8, 0xac660010, 0xac62001c, +0xaf840100, 0x92e204ec, 0x14400036, 0x240a0001, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, +0x8c820000, 0x1445001f, 0x0, 0x8ee34e28, +0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28, +0x24420001, 0x10430007, 0x0, 0x8ee24e2c, +0x24420001, 0x10a20005, 0x0, 0x8002a34, +0x0, 0x14a00005, 0x0, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x8002a4a, +0x0, 0x8ee24e28, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e28, 0x24420001, +0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, +0x2e22021, 0x24020005, 0xac820000, 0x24020001, +0xac820004, 0x1540000c, 0x30e5ffff, 0x3c040001, +0x24844f18, 0x3c050004, 0xafa90010, 0xafa00014, +0x8ee604e4, 0x34a5f237, 0xc002407, 0x30e7ffff, +0x8002a76, 0x0, 0x8ee27264, 0x451021, +0xaee27264, 0x8ee2726c, 0x8ee37264, 0x3c040001, +0x34843800, 0xa2e004ed, 0x451023, 0xaee2726c, +0x3641021, 0x62182b, 0x14600004, 0x3c03ffff, +0x8ee27264, 0x431021, 0xaee27264, 0x8ee304e8, +0x96e20458, 0x24630001, 0x2442ffff, 0x621824, +0xaee304e8, 0x8ee304e8, 0x8ee204e0, 0x14620005, +0x0, 0x8f820060, 0x2403fff7, 0x431024, +0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020, +0x27bdffe0, 0xafbf001c, 0xafb00018, 0x8f820100, +0x8ee34e2c, 0x8f820104, 0x8f850108, 0x24020040, +0x24630001, 0x50620003, 0x1021, 0x8ee24e2c, +0x24420001, 0xaee24e2c, 0x8ee24e2c, 0x8ee34e2c, +0x210c0, 0x24424e38, 0x2e22021, 0x8ee24e28, +0x8c870004, 0x14620007, 0xa03021, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8002aa6, +0xac800000, 0x8ee24e2c, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e2c, 0x24420001, +0x210c0, 0x24424e38, 0x2e22021, 0x8c820004, +0x8f830108, 0x21140, 0x621821, 0xaf830108, +0xac800000, 0x8cc20018, 0x2443fffe, 0x2c620013, +0x104000c1, 0x31080, 0x3c010001, 0x220821, +0x8c224f40, 0x400008, 0x0, 0x8ee204f0, +0x471021, 0xaee204f0, 0x8ee204f0, 0x8f43023c, +0x43102b, 0x144000be, 0x0, 0x8ee304e4, +0x8ee204f8, 0x506200ba, 0xa2e004f4, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x8002b16, +0x8ee201a4, 0x8ee204e4, 0xac62001c, 0x8ee404b0, +0x8ee504b4, 0x2462001c, 0xac620008, 0x24020008, +0xa462000e, 0x24020011, 0xac620018, 0xac640000, +0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120, +0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020012, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30, +0x24420001, 0x10430007, 0x0, 0x8ee24e34, +0x24420001, 0x10a20005, 0x0, 0x8002b00, +0x0, 0x14a00005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x8002b16, +0x0, 0x8ee24e30, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x24020012, 0xac820000, 0x24020001, +0xac820004, 0x5600000b, 0x24100001, 0x8ee204e4, +0x3c040001, 0x24844f24, 0xafa00014, 0xafa20010, +0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407, +0x34a5f006, 0x16000003, 0x24020001, 0x8002b75, +0xa2e204f4, 0x8ee20170, 0x24420001, 0xaee20170, +0x8ee20170, 0x8ee204e4, 0xa2e004f4, 0xaee004f0, +0xaee204f8, 0x8f42023c, 0x50400045, 0xaee07274, +0x8ee20184, 0x24420001, 0xaee20184, 0x8ee20184, +0x8002b75, 0xaee07274, 0x8ee20504, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee20504, +0x24420001, 0xaee20504, 0x8ee20504, 0x8cc30018, +0x21080, 0x571021, 0x8c440508, 0x24020003, +0x1462000f, 0x0, 0x3c020001, 0x571021, +0x904283b1, 0x10400014, 0x0, 0x8ee201d0, +0x8ee35240, 0x441021, 0xaee201d0, 0x8ee201d8, +0x641821, 0x306300ff, 0x8002b5d, 0xaee35240, +0x8ee201cc, 0x8ee30e10, 0x441021, 0xaee201cc, +0x8ee201d8, 0x641821, 0x306301ff, 0xaee30e10, +0x441021, 0xaee201d8, 0x8ee20000, 0x34420040, +0x8002b75, 0xaee20000, 0x8ee2014c, 0x3c010001, +0x370821, 0xa02083e0, 0x24420001, 0xaee2014c, +0x8002b75, 0x8ee2014c, 0x94c7000e, 0x8cc2001c, +0x3c040001, 0x24844f30, 0xafa60014, 0xafa20010, +0x8cc60018, 0x3c050008, 0xc002407, 0x34a50910, +0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, +0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb60058, +0xafb50054, 0xafb40050, 0xafb3004c, 0xafb20048, +0xafb10044, 0xafb00040, 0x8f830108, 0x8f820104, +0xafa00024, 0x106203e7, 0xafa0002c, 0x3c1e0001, +0x37de3800, 0x3c0bffff, 0x8f930108, 0x8e620018, +0x8f830104, 0x2443fffe, 0x2c620014, 0x104003cf, +0x31080, 0x3c010001, 0x220821, 0x8c224f90, +0x400008, 0x0, 0x9663000e, 0x8ee2725c, +0x8ee404f0, 0x431021, 0xaee2725c, 0x8e63001c, +0x96e20458, 0x24840001, 0xaee404f0, 0x24630001, +0x2442ffff, 0x621824, 0xaee304e4, 0x8f42023c, +0x82202b, 0x148003b9, 0x0, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x8021, 0x24420001, 0xaee201a4, 0x8002c02, +0x8ee201a4, 0x8ee204e4, 0xac62001c, 0x8ee404b0, +0x8ee504b4, 0x2462001c, 0xac620008, 0x24020008, +0xa462000e, 0x24020011, 0xac620018, 0xac640000, +0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120, +0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020012, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x240c0040, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x104c0007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8002bec, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400013, 0xac800000, 0x8002c02, +0x0, 0x8ee24e30, 0x240c0040, 0x24420001, +0x504c0003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x24020012, 0x240c0001, 0xac820000, +0xac8c0004, 0x5600000d, 0x24100001, 0x8ee204e4, +0x3c040001, 0x24844f24, 0xafa00014, 0xafa20010, +0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f006, +0xc002407, 0xafab0038, 0x8fab0038, 0x1200030a, +0x240c0001, 0x8002f1d, 0x0, 0x966c001c, +0xafac002c, 0x9662001e, 0x3c0c8000, 0xafac0024, +0xae62001c, 0x8e75001c, 0x8ee204fc, 0x8ee404fc, +0x151900, 0x621021, 0x8c52000c, 0x92e27b98, +0x641821, 0x9476000a, 0x14400003, 0x32c20002, +0xaef27ba4, 0xaef57b9c, 0x1040004b, 0x8021, +0x96e2045a, 0x30420002, 0x10400047, 0x0, +0x8e63001c, 0x8ee204fc, 0x32100, 0x821021, +0x8c42000c, 0x37e1821, 0x24420022, 0x43102b, +0x1440000a, 0x24050014, 0x8ee204fc, 0x821021, +0x8c44000c, 0xafab0038, 0xc002f79, 0x2484000e, +0x8fab0038, 0x8002c56, 0x3050ffff, 0x8ee204fc, +0x821021, 0x8c42000c, 0x9450000e, 0x94430010, +0x94440012, 0x94450014, 0x2038021, 0x2048021, +0x2058021, 0x94430016, 0x94440018, 0x9445001a, +0x2038021, 0x2048021, 0x2058021, 0x9443001c, +0x9444001e, 0x94420020, 0x2038021, 0x2048021, +0x2028021, 0x101c02, 0x3202ffff, 0x628021, +0x8e63001c, 0x8ee204fc, 0x102402, 0x32900, +0xa21021, 0x8c43000c, 0x3202ffff, 0x828021, +0x37e1021, 0x24630018, 0x62182b, 0x14600009, +0x0, 0x8ee204fc, 0xa21021, 0x8c43000c, +0x101027, 0x3c01ffff, 0x230821, 0x8002c73, +0xa4220018, 0x8ee204fc, 0xa21021, 0x8c43000c, +0x101027, 0xa4620018, 0x96e2045a, 0x8821, +0x30420008, 0x14400063, 0xa021, 0x8e63001c, +0x8ee204fc, 0x33100, 0xc21021, 0x8c42000c, +0x37e1821, 0x24420022, 0x43102b, 0x14400035, +0x0, 0x8ee204fc, 0xc21021, 0x8c42000c, +0x24470010, 0x37e1021, 0xe2102b, 0x50400001, +0xeb3821, 0x8ee204fc, 0x94f10000, 0xc21021, +0x8c42000c, 0x24470016, 0x37e1021, 0xe2102b, +0x14400002, 0x2634ffec, 0xeb3821, 0x8ee204fc, +0x90e30001, 0xc21021, 0x8c42000c, 0x2447001a, +0x37e1021, 0xe2102b, 0x14400002, 0x2838821, +0xeb3821, 0x94e20000, 0x24e70002, 0x2228821, +0x37e1021, 0xe2102b, 0x50400001, 0xeb3821, +0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, +0xe2102b, 0x50400001, 0xeb3821, 0x94e20000, +0x24e70002, 0x2228821, 0x37e1021, 0xe2102b, +0x50400001, 0xeb3821, 0x94e20000, 0x8002cd4, +0x2228821, 0x8ee204fc, 0xc21021, 0x8c43000c, +0x8ee204fc, 0x94710010, 0x8ee304fc, 0xc21021, +0x8c44000c, 0xc31821, 0x8c62000c, 0x2634ffec, +0x90840017, 0x8ee304fc, 0x9442001a, 0x2848821, +0xc31821, 0x8c65000c, 0x8ee304fc, 0x2228821, +0x8ee204fc, 0xc31821, 0xc21021, 0x8c44000c, +0x8c62000c, 0x94a3001c, 0x9484001e, 0x94420020, +0x2238821, 0x2248821, 0x2228821, 0x111c02, +0x3222ffff, 0x628821, 0x111c02, 0x3222ffff, +0x628821, 0x32c20001, 0x104000b2, 0x0, +0x96e2045a, 0x30420001, 0x104000ae, 0x32c20080, +0x10400008, 0x0, 0x92e27b98, 0x14400005, +0x0, 0x240c0001, 0xa2ec7b98, 0xaef57b9c, +0xaef27ba4, 0x8ee304fc, 0x151100, 0x431021, +0x8c47000c, 0x37e1821, 0x24e2000e, 0x43102b, +0x14400008, 0xe02021, 0x2405000e, 0xc002f79, +0xafab0038, 0x3042ffff, 0x8fab0038, 0x8002d0d, +0x2028021, 0x94e60000, 0x24e70002, 0x94e50000, +0x24e70002, 0x94e30000, 0x24e70002, 0x94e20000, +0x24e70002, 0x94e40000, 0x24e70002, 0x2068021, +0x2058021, 0x2038021, 0x2028021, 0x94e20000, +0x94e30002, 0x2048021, 0x2028021, 0x2038021, +0x101c02, 0x3202ffff, 0x628021, 0x101c02, +0x3202ffff, 0x8ee47b9c, 0x628021, 0x14950004, +0x3205ffff, 0x96620016, 0x8002d1b, 0x512021, +0x96620016, 0x542021, 0x41402, 0x3083ffff, +0x432021, 0x852023, 0x41402, 0x822021, +0x3084ffff, 0x50800001, 0x3404ffff, 0x8ee27ba4, +0x24430017, 0x37e1021, 0x62102b, 0x50400001, +0x6b1821, 0x90630000, 0x24020011, 0x14620031, +0x24020006, 0x8ee27ba4, 0x37e1821, 0x24420028, +0x43102b, 0x14400018, 0x0, 0x8ee27b9c, +0x12a2000a, 0x32c20100, 0x8ee27ba4, 0x3c01ffff, +0x220821, 0x94220028, 0x822021, 0x41c02, +0x3082ffff, 0x622021, 0x32c20100, 0x14400004, +0x41027, 0x92e27b98, 0x14400002, 0x41027, +0x3044ffff, 0x8ee27ba4, 0x3c01ffff, 0x220821, +0x8002d8e, 0xa4240028, 0x8ee27b9c, 0x12a20008, +0x32c20100, 0x8ee27ba4, 0x94420028, 0x822021, +0x41c02, 0x3082ffff, 0x622021, 0x32c20100, +0x14400004, 0x41027, 0x92e27b98, 0x14400002, +0x41027, 0x3044ffff, 0x8ee27ba4, 0x8002d8e, +0xa4440028, 0x1462002f, 0x37e1821, 0x8ee27ba4, +0x24420032, 0x43102b, 0x14400018, 0x0, +0x8ee27b9c, 0x12a2000a, 0x32c20100, 0x8ee27ba4, +0x3c01ffff, 0x220821, 0x94220032, 0x822021, +0x41c02, 0x3082ffff, 0x622021, 0x32c20100, +0x14400004, 0x41027, 0x92e27b98, 0x14400002, +0x41027, 0x3044ffff, 0x8ee27ba4, 0x3c01ffff, +0x220821, 0x8002d8e, 0xa4240032, 0x8ee27b9c, +0x12a20008, 0x32c20100, 0x8ee27ba4, 0x94420032, +0x822021, 0x41c02, 0x3082ffff, 0x622021, +0x32c20100, 0x14400004, 0x41027, 0x92e27b98, +0x14400002, 0x41027, 0x3044ffff, 0x8ee27ba4, +0xa4440032, 0x8fac0024, 0x1180002c, 0x37e1821, +0x8e420000, 0xae42fffc, 0x2642000a, 0x43102b, +0x1440001b, 0x34038100, 0x26430004, 0x37e1021, +0x62102b, 0x14400003, 0x602021, 0x6b1821, +0x602021, 0x8c620000, 0x24630004, 0xae420000, +0x37e1021, 0x62102b, 0x50400001, 0x6b1821, +0x8c620000, 0xac820000, 0x34028100, 0xa4620000, +0x24630002, 0x37e1021, 0x62102b, 0x50400001, +0x6b1821, 0x97ac002e, 0x8002db8, 0xa46c0000, +0x8e420004, 0x8e440008, 0xa6430008, 0x97ac002e, +0xa64c000a, 0xae420000, 0xae440004, 0x9662000e, +0x2652fffc, 0x24420004, 0xa662000e, 0x9662000e, +0x8ee3725c, 0x621821, 0xaee3725c, 0xafb20018, +0x8ee3725c, 0xafa3001c, 0x8ee2725c, 0x2c42003c, +0x10400004, 0x24620001, 0x2403fffe, 0x431024, +0xafa2001c, 0x32c20080, 0x1040000c, 0x32c20100, +0x8ee27ba8, 0x24430001, 0x210c0, 0x571021, +0xaee37ba8, 0x8fa30018, 0x8fa4001c, 0xac437bac, +0xac447bb0, 0x8002ea4, 0xaee0725c, 0x10400072, +0x0, 0x8ee27ba8, 0x24430001, 0x210c0, +0x571021, 0xaee37ba8, 0x8fa30018, 0x8fa4001c, +0xac437bac, 0xac447bb0, 0x8ee27ba8, 0x10400063, +0x4821, 0x5021, 0x8f8200f0, 0x24480008, +0x27621800, 0x102102b, 0x50400001, 0x27681000, +0x8f8200f4, 0x15020007, 0x0, 0x8ee201b4, +0x8021, 0x24420001, 0xaee201b4, 0x8002dfe, +0x8ee201b4, 0x8f8300f0, 0x24100001, 0x1571021, +0x8c447bac, 0x8c457bb0, 0xac640000, 0xac650004, +0xaf8800f0, 0x16000006, 0x2ea1021, 0x8ee20088, +0x24420001, 0xaee20088, 0x8002e43, 0x8ee20088, +0x8c427bb0, 0x8ee400e0, 0x8ee500e4, 0x8ee67b9c, +0x401821, 0x1021, 0xa32821, 0xa3382b, +0x822021, 0x872021, 0x8ee204fc, 0xc93021, +0x63100, 0xaee400e0, 0xaee500e4, 0xc23021, +0x94c2000a, 0x240c0002, 0x21142, 0x30430003, +0x106c0016, 0x28620003, 0x10400005, 0x240c0001, +0x106c0008, 0x0, 0x8002e43, 0x0, +0x240c0003, 0x106c0017, 0x0, 0x8002e43, +0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001, +0x2c640001, 0x441021, 0xaee200e8, 0xaee300ec, +0x8ee200e8, 0x8002e43, 0x8ee300ec, 0x8ee200f0, +0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, +0xaee200f0, 0xaee300f4, 0x8ee200f0, 0x8002e43, +0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001, +0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, +0x8ee200f8, 0x8ee300fc, 0x8ee27ba8, 0x25290001, +0x122102b, 0x1440ffa0, 0x254a0008, 0xa2e07b98, +0x8002ea3, 0xaee07ba8, 0x8f8200f0, 0x24470008, +0x27621800, 0xe2102b, 0x50400001, 0x27671000, +0x8f8200f4, 0x14e20007, 0x0, 0x8ee201b4, +0x8021, 0x24420001, 0xaee201b4, 0x8002e61, +0x8ee201b4, 0x8f8200f0, 0x24100001, 0x8fa30018, +0x8fa4001c, 0xac430000, 0xac440004, 0xaf8700f0, +0x16000007, 0x0, 0x8ee20088, 0x24420001, +0xaee20088, 0x8ee20088, 0x8002ea4, 0xaee0725c, +0x8ee2725c, 0x8ee400e0, 0x8ee500e4, 0x240c0002, +0x401821, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0x161142, 0x30430003, +0xaee400e0, 0xaee500e4, 0x106c0017, 0x2c620003, +0x10400005, 0x240c0001, 0x106c0008, 0x0, +0x8002ea4, 0xaee0725c, 0x240c0003, 0x106c0019, +0x0, 0x8002ea4, 0xaee0725c, 0x8ee200e8, +0x8ee300ec, 0x24630001, 0x2c640001, 0x441021, +0xaee200e8, 0xaee300ec, 0x8ee200e8, 0x8ee300ec, +0x8002ea4, 0xaee0725c, 0x8ee200f0, 0x8ee300f4, +0x24630001, 0x2c640001, 0x441021, 0xaee200f0, +0xaee300f4, 0x8ee200f0, 0x8ee300f4, 0x8002ea4, +0xaee0725c, 0x8ee200f8, 0x8ee300fc, 0x24630001, +0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, +0x8ee200f8, 0x8ee300fc, 0xaee0725c, 0x8e62001c, +0x96e30458, 0x8ee404f0, 0x24420001, 0x2463ffff, +0x431024, 0x24840001, 0xaee204e4, 0xaee404f0, +0x8f42023c, 0x82202b, 0x148000b0, 0x0, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4, +0x8002f0b, 0x8ee201a4, 0x8ee204e4, 0xac62001c, +0x8ee404b0, 0x8ee504b4, 0x2462001c, 0xac620008, +0x24020008, 0xa462000e, 0x24020011, 0xac620018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400037, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c830000, 0x24020012, 0x1462001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x240c0040, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x104c0007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x8002ef5, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x8002f0b, 0x0, 0x8ee24e30, 0x240c0040, +0x24420001, 0x504c0003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020012, 0x240c0001, +0xac820000, 0xac8c0004, 0x5600000d, 0x24100001, +0x8ee204e4, 0x3c040001, 0x24844f24, 0xafa00014, +0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, +0x34a5f006, 0xc002407, 0xafab0038, 0x8fab0038, +0x16000003, 0x240c0001, 0x8002f60, 0xa2ec04f4, +0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170, +0x8ee204e4, 0xa2e004f4, 0xaee004f0, 0xaee07274, +0xaee204f8, 0x8f42023c, 0x10400038, 0x0, +0x8ee20184, 0x24420001, 0xaee20184, 0x8002f60, +0x8ee20184, 0x8ee20504, 0x240c0040, 0x24420001, +0x504c0003, 0x1021, 0x8ee20504, 0x24420001, +0xaee20504, 0x8ee20504, 0x8e630018, 0x240c0003, +0x21080, 0x571021, 0x146c000f, 0x8c440508, +0x3c020001, 0x571021, 0x904283b1, 0x10400014, +0x0, 0x8ee201d0, 0x8ee35240, 0x441021, +0xaee201d0, 0x8ee201d8, 0x641821, 0x306300ff, +0x8002f53, 0xaee35240, 0x8ee201cc, 0x8ee30e10, +0x441021, 0xaee201cc, 0x8ee201d8, 0x641821, +0x306301ff, 0xaee30e10, 0x441021, 0xaee201d8, +0x8ee20000, 0x34420040, 0x8002f60, 0xaee20000, +0x8ee2014c, 0x3c010001, 0x370821, 0xa02083e0, +0x24420001, 0xaee2014c, 0x8ee2014c, 0x8f820108, +0x24420020, 0xaf820108, 0x8f820108, 0x8f820108, +0x27633000, 0x43102b, 0x14400002, 0x27622800, +0xaf820108, 0x8f830108, 0x8f820104, 0x1462fc1e, +0x0, 0x8fbf0060, 0x8fbe005c, 0x8fb60058, +0x8fb50054, 0x8fb40050, 0x8fb3004c, 0x8fb20048, +0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0068, +0x52843, 0x10a0000d, 0x3021, 0x3c030001, +0x34633800, 0x3c07ffff, 0x3631021, 0x82102b, +0x50400001, 0x872021, 0x94820000, 0x24840002, +0x24a5ffff, 0x14a0fff8, 0xc23021, 0x61c02, +0x30c2ffff, 0x623021, 0x61c02, 0x30c2ffff, +0x623021, 0x3e00008, 0x30c2ffff, 0x27bdff88, +0x240f0001, 0xafbf0070, 0xafbe006c, 0xafb60068, +0xafb50064, 0xafb40060, 0xafb3005c, 0xafb20058, +0xafb10054, 0xafb00050, 0xa3a00027, 0xafaf002c, +0x8ee204d4, 0x8021, 0x30420001, 0x1440002a, +0xa3a00037, 0x8f8700e0, 0x8f8800c4, 0x8f8200e8, +0xe22023, 0x2c821000, 0x50400001, 0x24841000, +0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8, +0x3c02000a, 0x3442efff, 0x1032023, 0x44102b, +0x10400003, 0x3c02000a, 0x3442f000, 0x822021, +0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0xaee400c0, 0xaee500c4, 0xaf8800c8, 0xaf8700e4, +0x80034d0, 0xaf8700e8, 0x3c020001, 0x571021, +0x904283c0, 0x1040000b, 0x0, 0x3c140001, +0x297a021, 0x8e9483c4, 0x3c130001, 0x2779821, +0x8e7383c8, 0x3c120001, 0x2579021, 0x8003197, +0x8e5283cc, 0x8f8300e0, 0x8f8200e4, 0x10430007, +0x8821, 0x8f8200e4, 0x24110001, 0x8c430000, +0x8c440004, 0xafa30018, 0xafa4001c, 0x1620000e, +0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, +0x3c040001, 0x24845040, 0xafa20014, 0x8f8600e0, +0x8f8700e4, 0x3c050006, 0xc002407, 0x34a5f000, +0x80034d0, 0x0, 0x8fa3001c, 0x8fb20018, +0x3074ffff, 0x2694fffc, 0x621024, 0x10400058, +0x2409821, 0x3c020080, 0x621024, 0x1040000a, +0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c, +0x8ee2007c, 0x8ee201fc, 0x24420001, 0xaee201fc, +0x80034ca, 0x8ee201fc, 0x3c060004, 0x3c0b0001, +0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080, +0x3c080020, 0x34078000, 0x24420001, 0xaee20080, +0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021, +0xc3102b, 0x14400007, 0x0, 0x106b0011, +0x0, 0x106a0015, 0x0, 0x800304d, +0x42042, 0x10650023, 0xa3102b, 0x14400005, +0x0, 0x10690019, 0x0, 0x800304d, +0x42042, 0x10680021, 0x0, 0x800304d, +0x42042, 0x8ee20034, 0x24420001, 0xaee20034, +0x8ee20034, 0x800304d, 0x42042, 0x8ee201ec, +0x24420001, 0xaee201ec, 0x8ee201ec, 0x800304d, +0x42042, 0x8ee201f0, 0x24420001, 0xaee201f0, +0x8ee201f0, 0x800304d, 0x42042, 0x8ee201f4, +0x24420001, 0xaee201f4, 0x8ee201f4, 0x800304d, +0x42042, 0x8ee20030, 0x24420001, 0xaee20030, +0x8ee20030, 0x800304d, 0x42042, 0x8ee201f8, +0x24420001, 0xaee201f8, 0x8ee201f8, 0x42042, +0x1087047c, 0x0, 0x8003012, 0x0, +0x3c020001, 0x571021, 0x904283b2, 0x14400084, +0x24020001, 0x3c030001, 0x771821, 0x906383b3, +0x1462007f, 0x3c020100, 0x8e430000, 0x621024, +0x1040006f, 0x2402ffff, 0x14620005, 0x24100001, +0x96430004, 0x3402ffff, 0x10620075, 0x0, +0x92e204d8, 0x14400072, 0x0, 0x3c020001, +0x571021, 0x8c4283b4, 0x28420005, 0x10400020, +0x3821, 0x3c020001, 0x571021, 0x8c4283b4, +0x18400016, 0x2821, 0x96660000, 0x520c0, +0x971021, 0x9442777e, 0x14460009, 0x971021, +0x94437780, 0x96620002, 0x14620005, 0x971021, +0x94437782, 0x96620004, 0x50620008, 0x24070001, +0x3c020001, 0x571021, 0x8c4283b4, 0x24a50001, +0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff, +0x10400440, 0x0, 0x80030d9, 0x0, +0x2402021, 0xc0022fe, 0x24050006, 0x3044001f, +0x428c0, 0x2e51021, 0x9442727c, 0x30424000, +0x14400434, 0xb71021, 0x9443727e, 0x96620000, +0x1462000b, 0x418c0, 0xb71021, 0x94437280, +0x96620002, 0x14620006, 0x418c0, 0xb71021, +0x94437282, 0x96620004, 0x10620035, 0x418c0, +0x2e31021, 0x9442727c, 0x30428000, 0x14400421, +0x2e31021, 0x944b727c, 0x96670000, 0xb28c0, +0xb71021, 0x9442737e, 0x80030bb, 0x3021, +0x420c0, 0x2e41021, 0x9443737c, 0x2e41021, +0x944b737c, 0x30638000, 0x14600010, 0xb28c0, +0xb71021, 0x9442737e, 0x1447fff5, 0x1602021, +0xb71021, 0x94437380, 0x96620002, 0x5462fff1, +0x420c0, 0xb71021, 0x94437382, 0x96620004, +0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff, +0x10400400, 0x0, 0x80030d9, 0x0, +0x97430202, 0x96420000, 0x146203fa, 0x0, +0x97430204, 0x96420002, 0x146203f6, 0x0, +0x97430206, 0x96420004, 0x146203f2, 0x0, +0x92420000, 0x3a030001, 0x30420001, 0x431024, +0x10400074, 0x2402ffff, 0x8e630000, 0x14620004, +0x3402ffff, 0x96630004, 0x1062006f, 0x240f0002, +0x3c020001, 0x571021, 0x904283b2, 0x1440006a, +0x240f0003, 0x92e204d8, 0x54400068, 0xafaf002c, +0x3c020001, 0x571021, 0x8c4283b4, 0x28420005, +0x10400020, 0x3821, 0x3c020001, 0x571021, +0x8c4283b4, 0x18400016, 0x2821, 0x96660000, +0x520c0, 0x971021, 0x9442777e, 0x14460009, +0x971021, 0x94437780, 0x96620002, 0x14620005, +0x971021, 0x94437782, 0x96620004, 0x50620008, +0x24070001, 0x3c020001, 0x571021, 0x8c4283b4, +0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, +0x30e200ff, 0x14400044, 0x240f0003, 0x80034ca, +0x0, 0x2402021, 0xc0022fe, 0x24050006, +0x3044001f, 0x428c0, 0x2e51021, 0x9442727c, +0x30424000, 0x144003af, 0xb71021, 0x9443727e, +0x96620000, 0x1462000b, 0x418c0, 0xb71021, +0x94437280, 0x96620002, 0x14620006, 0x418c0, +0xb71021, 0x94437282, 0x96620004, 0x10620027, +0x418c0, 0x2e31021, 0x9442727c, 0x30428000, +0x1440039c, 0x2e31021, 0x944b727c, 0x96670000, +0xb28c0, 0xb71021, 0x9442737e, 0x8003140, +0x3021, 0x420c0, 0x2e41021, 0x9443737c, +0x2e41021, 0x944b737c, 0x30638000, 0x14600010, +0xb28c0, 0xb71021, 0x9442737e, 0x1447fff5, +0x1602021, 0xb71021, 0x94437380, 0x96620002, +0x5462fff1, 0x420c0, 0xb71021, 0x94437382, +0x96620004, 0x5462ffec, 0x420c0, 0x24060001, +0x30c200ff, 0x1040037b, 0x0, 0x8003153, +0x240f0003, 0x240f0001, 0xafaf002c, 0x8f420260, +0x54102b, 0x1040003a, 0x0, 0x8f8300e4, +0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4, +0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2801821, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, +0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, +0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845048, +0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, +0xc002407, 0x34a5f003, 0x80034d0, 0x0, +0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, +0x24845054, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0x3c050006, 0xc002407, 0x34a5f002, 0x8ee201c0, +0x24420001, 0xaee201c0, 0x8ee20000, 0x8ee301c0, +0x2403ffbf, 0x431024, 0x8003474, 0xaee20000, +0x96e20468, 0x54102b, 0x10400003, 0x0, +0x240f0001, 0xa3af0027, 0x12800301, 0x24160007, +0x24150040, 0x241e0001, 0x240e0012, 0x8ee2724c, +0x8f430280, 0x24420001, 0x304207ff, 0x106202d3, +0x0, 0x93a20027, 0x10400014, 0x0, +0x8ee35240, 0x8ee25244, 0x10620009, 0x26ed5244, +0x8ee65244, 0x8ee35244, 0x21140, 0x24425248, +0x2e28021, 0x24630001, 0x80031c3, 0x306b00ff, +0x92e27248, 0x1440ffca, 0x0, 0x8ee201e0, +0x24420001, 0xaee201e0, 0x8ee201e0, 0x8ee30e10, +0x8ee20e18, 0x1062ffc2, 0x26ed0e18, 0x8ee60e18, +0x8ee30e18, 0x21140, 0x24420e20, 0x2e28021, +0x24630001, 0x306b01ff, 0x96e2046a, 0x30420010, +0x10400019, 0x0, 0x9642000c, 0x340f8100, +0x144f0015, 0x0, 0x3c020001, 0x571021, +0x904283c0, 0x14400010, 0x0, 0x9642000e, +0xa6020016, 0x8e420008, 0x8e430004, 0x8e440000, +0x2694fffc, 0xae42000c, 0xae430008, 0xae440004, +0x9602000e, 0x26730004, 0x240f0001, 0xa3af0037, +0x34420200, 0xa602000e, 0x8e020000, 0x8e030004, +0x3c040001, 0x34843800, 0x306a0007, 0x26a9823, +0x3641021, 0x262102b, 0x10400005, 0x28aa021, +0x2641023, 0x3621823, 0x3c020020, 0x439823, +0x26820007, 0x2404fff8, 0x9603000a, 0x446024, +0x6a1821, 0x6c102b, 0x10400002, 0x1803821, +0x603821, 0xae130018, 0x8f880120, 0x24e20007, +0x443824, 0x27623800, 0x25090020, 0x122102b, +0x50400001, 0x27693000, 0x8f820128, 0x11220004, +0x0, 0x8f820124, 0x15220007, 0x1401821, +0x8ee201a4, 0x8821, 0x24420001, 0xaee201a4, +0x8003250, 0x8ee201a4, 0x8e040000, 0x8e050004, +0x1021, 0xad130008, 0xa507000e, 0xad160018, +0xad06001c, 0xa3302b, 0xa32823, 0x822023, +0x862023, 0xad040000, 0xad050004, 0x8ee204c0, +0xad020010, 0xaf890120, 0x92e24e20, 0x14400033, +0x24110001, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c820000, 0x1456001f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x10550007, 0x0, +0x8ee24e34, 0x24420001, 0x10620005, 0x0, +0x800323d, 0x0, 0x14600005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400010, 0xac800000, +0x8003250, 0x0, 0x8ee24e30, 0x24420001, +0x50550003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0xac960000, 0xac9e0004, 0x16200018, +0x3c050006, 0x8e020018, 0x3c040001, 0x24845060, +0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009, +0x2003021, 0xc002407, 0xafa30014, 0x93a20037, +0x10400216, 0x340f8100, 0x8e420004, 0x8e430008, +0x8e44000c, 0xa64f000c, 0xae420000, 0xae430004, +0xae440008, 0x96020016, 0x8003474, 0xa642000e, +0x14ec0168, 0x28a1823, 0x960c000a, 0x9603000e, +0x28a1023, 0xa602000a, 0x34620004, 0xa602000e, +0x8f880120, 0x27623800, 0x25090020, 0x122102b, +0x14400002, 0x306affff, 0x27693000, 0x8f820128, +0x11220004, 0x0, 0x8f820124, 0x15220007, +0x24040020, 0x8ee201a4, 0x8821, 0x24420001, +0xaee201a4, 0x80032ce, 0x8ee201a4, 0x8ee5724c, +0x8ee60490, 0x8ee70494, 0xa504000e, 0x24040004, +0xad100008, 0xad040018, 0x52940, 0xa01821, +0x1021, 0xe33821, 0xe3202b, 0xc23021, +0xc43021, 0xad060000, 0xad070004, 0x8ee2724c, +0xad02001c, 0x8ee204c4, 0xad020010, 0xaf890120, +0x92e24e20, 0x14400033, 0x24110001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c820000, +0x1456001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x0, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee34e30, 0x24420001, +0x10550007, 0x0, 0x8ee24e34, 0x24420001, +0x10620005, 0x0, 0x80032bb, 0x0, +0x14600005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400010, 0xac800000, 0x80032ce, 0x0, +0x8ee24e30, 0x24420001, 0x50550003, 0x1021, +0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0xac960000, +0xac9e0004, 0x1620000d, 0x0, 0xa60c000a, +0xa60a000e, 0x8f820100, 0xafa20010, 0x8f820104, +0x3c040001, 0x2484506c, 0x3c050006, 0xafa20014, +0x8ee6724c, 0x800343f, 0x34a5f00b, 0x3c010001, +0x370821, 0xa02083c0, 0xadab0000, 0x8ee201d8, +0x8ee3724c, 0x2442ffff, 0xaee201d8, 0x8ee201d8, +0x24630001, 0x306307ff, 0x26e25244, 0x15a20006, +0xaee3724c, 0x8ee201d0, 0x2442ffff, 0xaee201d0, +0x80032f3, 0x8ee201d0, 0x8ee201cc, 0x2442ffff, +0xaee201cc, 0x8ee201cc, 0x8f420240, 0x10400073, +0x0, 0x8ee20e1c, 0x24420001, 0xaee20e1c, +0x8f430240, 0x43102b, 0x14400176, 0xa021, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x8821, 0x24420001, 0xaee201a4, +0x8003353, 0x8ee201a4, 0x8ee2724c, 0xac62001c, +0x8ee404a8, 0x8ee504ac, 0x2462001c, 0xac620008, +0x24020008, 0xa462000e, 0x24020011, 0xac620018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400033, 0x24110001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x144e001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x10550007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8003340, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x8003353, +0x0, 0x8ee24e30, 0x24420001, 0x50550003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac8e0000, 0xac9e0004, 0x5620000d, 0x24110001, +0x8ee2724c, 0x3c040001, 0x24845078, 0xafa00014, +0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, +0x34a5f008, 0xc002407, 0xafae0048, 0x8fae0048, +0x56200001, 0xaee00e1c, 0x8ee20188, 0x24420001, +0xaee20188, 0x80033cc, 0x8ee20188, 0x8f830120, +0x27623800, 0x24660020, 0xc2102b, 0x50400001, +0x27663000, 0x8f820128, 0x10c20004, 0x0, +0x8f820124, 0x14c20007, 0x0, 0x8ee201a4, +0x8821, 0x24420001, 0xaee201a4, 0x80033be, +0x8ee201a4, 0x8ee2724c, 0xac62001c, 0x8ee404a8, +0x8ee504ac, 0x2462001c, 0xac620008, 0x24020008, +0xa462000e, 0x24020011, 0xac620018, 0xac640000, +0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120, +0x92e24e20, 0x14400033, 0x24110001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c820000, +0x144e001f, 0x0, 0x8ee34e30, 0x8ee24e34, +0x1062001b, 0x0, 0x8c820004, 0x24420001, +0xac820004, 0x8ee24e34, 0x8ee34e30, 0x24420001, +0x10550007, 0x0, 0x8ee24e34, 0x24420001, +0x10620005, 0x0, 0x80033ab, 0x0, +0x14600005, 0x0, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, +0x50400010, 0xac800000, 0x80033be, 0x0, +0x8ee24e30, 0x24420001, 0x50550003, 0x1021, +0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0xac8e0000, +0xac9e0004, 0x1620000d, 0x0, 0x8ee2724c, +0x3c040001, 0x24845078, 0xafa00014, 0xafa20010, +0x8ee6724c, 0x8f470280, 0x3c050009, 0x34a5f008, +0xc002407, 0xafae0048, 0x8fae0048, 0x8ee20174, +0x24420001, 0xaee20174, 0x8ee20174, 0x8003472, +0xa021, 0x960c000a, 0x183102b, 0x54400001, +0x1801821, 0xa603000a, 0x8f880120, 0x27623800, +0x25090020, 0x122102b, 0x50400001, 0x27693000, +0x8f820128, 0x11220004, 0x0, 0x8f820124, +0x15220007, 0x24040020, 0x8ee201a4, 0x8821, +0x24420001, 0xaee201a4, 0x8003433, 0x8ee201a4, +0x8ee5724c, 0x8ee60490, 0x8ee70494, 0xa504000e, +0x24040004, 0xad100008, 0xad040018, 0x52940, +0xa01821, 0x1021, 0xe33821, 0xe3202b, +0xc23021, 0xc43021, 0xad060000, 0xad070004, +0x8ee2724c, 0xad02001c, 0x8ee204c4, 0xad020010, +0xaf890120, 0x92e24e20, 0x14400033, 0x24110001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x1456001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x10550007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8003420, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400010, 0xac800000, 0x8003433, +0x0, 0x8ee24e30, 0x24420001, 0x50550003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0xac960000, 0xac9e0004, 0x1620001d, 0x0, +0xa60c000a, 0x8f820100, 0xafa20010, 0x8f820104, +0x3c040001, 0x2484506c, 0x3c050006, 0xafa20014, +0x8ee6724c, 0x34a5f00d, 0xc002407, 0x2003821, +0x93a20037, 0x10400031, 0x340f8100, 0x8e420004, +0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000, +0xae430004, 0xae440008, 0x96020016, 0xa642000e, +0x9602000e, 0x3042fdff, 0x8003474, 0xa602000e, +0x8ee201d8, 0x2442ffff, 0xaee201d8, 0x8ee201d8, +0x8ee201cc, 0x3c04001f, 0x3c010001, 0x370821, +0xa03e83c0, 0x2442ffff, 0xaee201cc, 0x9603000a, +0x3484ffff, 0x8ee201cc, 0x6a1821, 0x2639821, +0x93202b, 0x10800003, 0x3c02fff5, 0x34421000, +0x2629821, 0xadab0000, 0x8ee2724c, 0x24420001, +0x304207ff, 0xaee2724c, 0x8f420240, 0x10400004, +0x283a023, 0x8ee20e1c, 0x24420001, 0xaee20e1c, +0xa3a00027, 0x1680fd29, 0x0, 0x12800024, +0x0, 0x3c010001, 0x370821, 0xac3483c4, +0x3c010001, 0x370821, 0xac3383c8, 0x3c010001, +0x370821, 0xac3283cc, 0x93a20037, 0x10400008, +0x0, 0x3c020001, 0x571021, 0x8c4283cc, +0x24420004, 0x3c010001, 0x370821, 0xac2283cc, +0x8ee2724c, 0x8f430280, 0x24420001, 0x304207ff, +0x14620006, 0x0, 0x8ee201c4, 0x24420001, +0xaee201c4, 0x80034d0, 0x8ee201c4, 0x8ee201bc, +0x24420001, 0xaee201bc, 0x80034d0, 0x8ee201bc, +0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0, +0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xaee400c0, 0xaee500c4, +0x8faf002c, 0x24020002, 0x11e2000f, 0x29e20003, +0x14400017, 0x24020003, 0x15e20015, 0x0, +0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001, +0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, +0x80034ca, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc, +0x24630001, 0x2c640001, 0x441021, 0xaee200d8, +0xaee300dc, 0x8ee200d8, 0x80034ca, 0x8ee300dc, +0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001, +0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8, +0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, +0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf0070, +0x8fbe006c, 0x8fb60068, 0x8fb50064, 0x8fb40060, +0x8fb3005c, 0x8fb20058, 0x8fb10054, 0x8fb00050, +0x3e00008, 0x27bd0078, 0x27bdffb0, 0xafb50044, +0xa821, 0xafb00030, 0x8021, 0xafbf004c, +0xafb60048, 0xafb40040, 0xafb3003c, 0xafb20038, +0xafb10034, 0x8ee204d4, 0x24140001, 0x30420001, +0x1440002a, 0xb021, 0x8f8700e0, 0x8f8800c4, +0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, +0x24841000, 0x420c2, 0x801821, 0x8ee400c8, +0x8ee500cc, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xaee400c8, 0xaee500cc, +0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023, +0x44102b, 0x10400003, 0x3c02000a, 0x3442f000, +0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8, +0xaf8700e4, 0x8003854, 0xaf8700e8, 0x3c020001, +0x571021, 0x904283c0, 0x1040000b, 0x0, +0x3c130001, 0x2779821, 0x8e7383c4, 0x3c110001, +0x2378821, 0x8e3183c8, 0x3c120001, 0x2579021, +0x80036ec, 0x8e5283cc, 0x8f8300e0, 0x8f8200e4, +0x10430007, 0x4821, 0x8f8200e4, 0x24090001, +0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, +0x1520000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, +0x8f8200c8, 0x3c040001, 0x24845040, 0xafa20014, +0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002407, +0x34a5f000, 0x8003854, 0x0, 0x8fa3001c, +0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024, +0x10400058, 0x2408821, 0x3c020080, 0x621024, +0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001, +0xaee2007c, 0x8ee2007c, 0x8ee201fc, 0x24420001, +0xaee201fc, 0x800384e, 0x8ee201fc, 0x3c060004, +0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008, +0x8ee20080, 0x3c080020, 0x34078000, 0x24420001, +0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, +0x10660021, 0xc3102b, 0x14400007, 0x0, +0x106b0011, 0x0, 0x106a0015, 0x0, +0x8003596, 0x42042, 0x10650023, 0xa3102b, +0x14400005, 0x0, 0x10690019, 0x0, +0x8003596, 0x42042, 0x10680021, 0x0, +0x8003596, 0x42042, 0x8ee20034, 0x24420001, +0xaee20034, 0x8ee20034, 0x8003596, 0x42042, +0x8ee201ec, 0x24420001, 0xaee201ec, 0x8ee201ec, +0x8003596, 0x42042, 0x8ee201f0, 0x24420001, +0xaee201f0, 0x8ee201f0, 0x8003596, 0x42042, +0x8ee201f4, 0x24420001, 0xaee201f4, 0x8ee201f4, +0x8003596, 0x42042, 0x8ee20030, 0x24420001, +0xaee20030, 0x8ee20030, 0x8003596, 0x42042, +0x8ee201f8, 0x24420001, 0xaee201f8, 0x8ee201f8, +0x42042, 0x108702b7, 0x0, 0x800355b, +0x0, 0x3c020001, 0x571021, 0x904283b2, +0x14400084, 0x24020001, 0x3c030001, 0x771821, +0x906383b3, 0x1462007f, 0x3c020100, 0x8e430000, +0x621024, 0x1040006f, 0x2402ffff, 0x14620005, +0x24100001, 0x96430004, 0x3402ffff, 0x10620075, +0x0, 0x92e204d8, 0x14400072, 0x0, +0x3c020001, 0x571021, 0x8c4283b4, 0x28420005, +0x10400020, 0x3821, 0x3c020001, 0x571021, +0x8c4283b4, 0x18400016, 0x2821, 0x96260000, +0x520c0, 0x971021, 0x9442777e, 0x14460009, +0x971021, 0x94437780, 0x96220002, 0x14620005, +0x971021, 0x94437782, 0x96220004, 0x50620008, +0x24070001, 0x3c020001, 0x571021, 0x8c4283b4, +0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, +0x30e200ff, 0x1040027b, 0x0, 0x8003622, +0x0, 0x2402021, 0xc0022fe, 0x24050006, +0x3044001f, 0x428c0, 0x2e51021, 0x9442727c, +0x30424000, 0x1440026f, 0xb71021, 0x9443727e, +0x96220000, 0x1462000b, 0x418c0, 0xb71021, +0x94437280, 0x96220002, 0x14620006, 0x418c0, +0xb71021, 0x94437282, 0x96220004, 0x10620035, +0x418c0, 0x2e31021, 0x9442727c, 0x30428000, +0x1440025c, 0x2e31021, 0x9448727c, 0x96270000, +0x828c0, 0xb71021, 0x9442737e, 0x8003604, +0x3021, 0x420c0, 0x2e41021, 0x9443737c, +0x2e41021, 0x9448737c, 0x30638000, 0x14600010, +0x828c0, 0xb71021, 0x9442737e, 0x1447fff5, +0x1002021, 0xb71021, 0x94437380, 0x96220002, +0x5462fff1, 0x420c0, 0xb71021, 0x94437382, +0x96220004, 0x5462ffec, 0x420c0, 0x24060001, +0x30c200ff, 0x1040023b, 0x0, 0x8003622, +0x0, 0x97430202, 0x96420000, 0x14620235, +0x0, 0x97430204, 0x96420002, 0x14620231, +0x0, 0x97430206, 0x96420004, 0x1462022d, +0x0, 0x92420000, 0x3a030001, 0x30420001, +0x431024, 0x10400074, 0x2402ffff, 0x8e230000, +0x14620004, 0x3402ffff, 0x96230004, 0x1062006f, +0x24140002, 0x3c020001, 0x571021, 0x904283b2, +0x1440006a, 0x24140003, 0x92e204d8, 0x14400067, +0x0, 0x3c020001, 0x571021, 0x8c4283b4, +0x28420005, 0x10400020, 0x3821, 0x3c020001, +0x571021, 0x8c4283b4, 0x18400016, 0x2821, +0x96260000, 0x520c0, 0x971021, 0x9442777e, +0x14460009, 0x971021, 0x94437780, 0x96220002, +0x14620005, 0x971021, 0x94437782, 0x96220004, +0x50620008, 0x24070001, 0x3c020001, 0x571021, +0x8c4283b4, 0x24a50001, 0xa2102a, 0x5440ffee, +0x520c0, 0x30e200ff, 0x14400044, 0x24140003, +0x800384e, 0x0, 0x2402021, 0xc0022fe, +0x24050006, 0x3044001f, 0x428c0, 0x2e51021, +0x9442727c, 0x30424000, 0x144001ea, 0xb71021, +0x9443727e, 0x96220000, 0x1462000b, 0x418c0, +0xb71021, 0x94437280, 0x96220002, 0x14620006, +0x418c0, 0xb71021, 0x94437282, 0x96220004, +0x10620027, 0x418c0, 0x2e31021, 0x9442727c, +0x30428000, 0x144001d7, 0x2e31021, 0x9448727c, +0x96270000, 0x828c0, 0xb71021, 0x9442737e, +0x8003689, 0x3021, 0x420c0, 0x2e41021, +0x9443737c, 0x2e41021, 0x9448737c, 0x30638000, +0x14600010, 0x828c0, 0xb71021, 0x9442737e, +0x1447fff5, 0x1002021, 0xb71021, 0x94437380, +0x96220002, 0x5462fff1, 0x420c0, 0xb71021, +0x94437382, 0x96220004, 0x5462ffec, 0x420c0, +0x24060001, 0x30c200ff, 0x104001b6, 0x0, +0x800369c, 0x24140003, 0x24140001, 0x8f420260, +0x53102b, 0x10400049, 0x0, 0x8f8300e4, +0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4, +0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2601821, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, +0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, +0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845048, +0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, +0xc002407, 0x34a5f003, 0x8003854, 0x0, +0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, +0x24845054, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0xc002407, 0x34a5f002, 0x8ee201c0, 0x24420001, +0xaee201c0, 0x8ee20000, 0x8ee301c0, 0x2403ffbf, +0x431024, 0x80037fc, 0xaee20000, 0x8ee25240, +0xafa20010, 0x8ee25244, 0x3c040001, 0x24845054, +0xafa20014, 0x8ee60e10, 0x8ee70e18, 0x3c050006, +0xc002407, 0x34a5f002, 0x8ee201c0, 0x24420001, +0xaee201c0, 0x80037fc, 0x8ee201c0, 0x96e20468, +0x53102b, 0x54400001, 0x3c158000, 0x12600131, +0x3c0c001f, 0x358cffff, 0x8ee2724c, 0x8f430280, +0x24420001, 0x304207ff, 0x10620108, 0x0, +0x12a00014, 0x0, 0x8ee35240, 0x8ee25244, +0x10620009, 0x26ee5244, 0x8eeb5244, 0x8ee35244, +0x21140, 0x24425248, 0x2e28021, 0x24630001, +0x8003716, 0x306800ff, 0x92e27248, 0x1440ffc0, +0x3c050006, 0x8ee201e0, 0x24420001, 0xaee201e0, +0x8ee201e0, 0x8ee30e10, 0x8ee20e18, 0x1062ffcb, +0x26ee0e18, 0x8eeb0e18, 0xa821, 0x8ee30e18, +0x21140, 0x24420e20, 0x2e28021, 0x24630001, +0x306801ff, 0x96e2046a, 0x30420010, 0x10400017, +0x34028100, 0x9643000c, 0x14620014, 0x0, +0x3c020001, 0x571021, 0x904283c0, 0x1440000f, +0x0, 0x9642000e, 0xa6020016, 0x8e420008, +0x8e430004, 0x8e440000, 0x2673fffc, 0xae42000c, +0xae430008, 0xae440004, 0x9602000e, 0x26310004, +0x24160001, 0x34420200, 0xa602000e, 0x9603000a, +0x2605021, 0x73102b, 0x10400002, 0x2606821, +0x605021, 0x2d42003d, 0x1040002a, 0x3821, +0x9623000c, 0x24020800, 0x54620027, 0xae110018, +0x3c020001, 0x571021, 0x904283c0, 0x54400022, +0xae110018, 0x26220017, 0x182102b, 0x10400013, +0x0, 0x3c02fff5, 0x511021, 0x90421017, +0x38430006, 0x2c630001, 0x38420011, 0x2c420001, +0x621825, 0x10600013, 0x26220010, 0x182102b, +0x1040000e, 0x0, 0x3c07fff5, 0xf13821, +0x94e71010, 0x8003762, 0x24e7000e, 0x92220017, +0x38430006, 0x2c630001, 0x38420011, 0x2c420001, +0x621825, 0x50600004, 0xae110018, 0x96270010, +0x24e7000e, 0xae110018, 0x3c020001, 0x571021, +0x904283c0, 0x2102b, 0x14e00002, 0x24ec0, +0x1403821, 0x8f830120, 0x27623800, 0x24660020, +0xc2102b, 0x50400001, 0x27663000, 0x8f820128, +0x10c20004, 0x0, 0x8f820124, 0x14c20007, +0x2402000b, 0x8ee201a4, 0x4821, 0x24420001, +0xaee201a4, 0x80037c3, 0x8ee201a4, 0x8e040000, +0x8e050004, 0xac620018, 0x1751025, 0x491025, +0xac710008, 0xa467000e, 0xac62001c, 0xac640000, +0xac650004, 0x8ee204c0, 0xac620010, 0xaf860120, +0x92e24e20, 0x14400038, 0x24090001, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020007, 0x14620020, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001c, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee34e34, 0x8ee54e30, +0x24020040, 0x24630001, 0x10620007, 0x0, +0x8ee24e34, 0x24420001, 0x10a20005, 0x0, +0x80037ad, 0x0, 0x14a00005, 0x0, +0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, +0x8c820004, 0x2c420011, 0x50400013, 0xac800000, +0x80037c3, 0x0, 0x8ee24e30, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020007, 0xac820000, +0x24020001, 0xac820004, 0x15200018, 0x3c050006, +0x8e020018, 0x3c040001, 0x24845060, 0xafa20010, +0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021, +0xc002407, 0xafa30014, 0x32c200ff, 0x1040002b, +0x34028100, 0x8e430004, 0x8e440008, 0x8e45000c, +0xa642000c, 0xae430000, 0xae440004, 0xae450008, +0x96020016, 0x80037fc, 0xa642000e, 0x154d000a, +0x0, 0x9602000e, 0xa613000a, 0x34420004, +0xa602000e, 0x3c010001, 0x370821, 0xa02083c0, +0x80037fa, 0x9821, 0x9604000a, 0x93102b, +0x10400002, 0x2601821, 0x801821, 0x24020001, +0xa603000a, 0x3c010001, 0x370821, 0xa02283c0, +0x9604000a, 0x2248821, 0x191102b, 0x10400003, +0x3c02fff5, 0x34421000, 0x2228821, 0x2649823, +0xa821, 0x1660fef4, 0xadc80000, 0x12600021, +0x32c200ff, 0x3c010001, 0x370821, 0xac3383c4, +0x3c010001, 0x370821, 0xac3183c8, 0x3c010001, +0x370821, 0x10400008, 0xac3283cc, 0x3c020001, +0x571021, 0x8c4283cc, 0x24420004, 0x3c010001, +0x370821, 0xac2283cc, 0x8ee2724c, 0x8f430280, +0x24420001, 0x14620006, 0x0, 0x8ee201c4, +0x24420001, 0xaee201c4, 0x8003854, 0x8ee201c4, +0x8ee201bc, 0x24420001, 0xaee201bc, 0x8003854, +0x8ee201bc, 0x97a4001e, 0x2484fffc, 0x801821, +0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0x24020002, +0xaee400c0, 0xaee500c4, 0x1282000f, 0x2a820003, +0x14400017, 0x24020003, 0x16820015, 0x0, +0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001, +0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, +0x800384e, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc, +0x24630001, 0x2c640001, 0x441021, 0xaee200d8, +0xaee300dc, 0x8ee200d8, 0x800384e, 0x8ee300dc, +0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001, +0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8, +0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, +0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf004c, +0x8fb60048, 0x8fb50044, 0x8fb40040, 0x8fb3003c, +0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, +0x27bd0050, 0x27bdff90, 0xafb60060, 0xb021, +0xafbf0068, 0xafbe0064, 0xafb5005c, 0xafb40058, +0xafb30054, 0xafb20050, 0xafb1004c, 0xafb00048, +0x8ee204d4, 0x8821, 0x24150001, 0x30420001, +0x1440002a, 0xa3a0002f, 0x8f8700e0, 0x8f8800c4, +0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, +0x24841000, 0x420c2, 0x801821, 0x8ee400c8, +0x8ee500cc, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xaee400c8, 0xaee500cc, +0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023, +0x44102b, 0x10400003, 0x3c02000a, 0x3442f000, +0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8, +0xaf8700e4, 0x8003c5f, 0xaf8700e8, 0x3c020001, +0x571021, 0x904283c0, 0x1040000b, 0x0, +0x3c130001, 0x2779821, 0x8e7383c4, 0x3c100001, +0x2178021, 0x8e1083c8, 0x3c120001, 0x2579021, +0x8003a5d, 0x8e5283cc, 0x8f8300e0, 0x8f8200e4, +0x10430007, 0x3821, 0x8f8200e4, 0x24070001, +0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, +0x14e0000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, +0x8f8200c8, 0x3c040001, 0x24845084, 0xafa20014, +0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002407, +0x34a5f200, 0x8003c5f, 0x0, 0x8fa3001c, +0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024, +0x10400058, 0x2408021, 0x3c020080, 0x621024, +0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001, +0xaee2007c, 0x8ee2007c, 0x8ee201fc, 0x24420001, +0xaee201fc, 0x8003c59, 0x8ee201fc, 0x3c060004, +0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008, +0x8ee20080, 0x3c080020, 0x34078000, 0x24420001, +0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, +0x10660021, 0xc3102b, 0x14400007, 0x0, +0x106b0011, 0x0, 0x106a0015, 0x0, +0x800391a, 0x42042, 0x10650023, 0xa3102b, +0x14400005, 0x0, 0x10690019, 0x0, +0x800391a, 0x42042, 0x10680021, 0x0, +0x800391a, 0x42042, 0x8ee20034, 0x24420001, +0xaee20034, 0x8ee20034, 0x800391a, 0x42042, +0x8ee201ec, 0x24420001, 0xaee201ec, 0x8ee201ec, +0x800391a, 0x42042, 0x8ee201f0, 0x24420001, +0xaee201f0, 0x8ee201f0, 0x800391a, 0x42042, +0x8ee201f4, 0x24420001, 0xaee201f4, 0x8ee201f4, +0x800391a, 0x42042, 0x8ee20030, 0x24420001, +0xaee20030, 0x8ee20030, 0x800391a, 0x42042, +0x8ee201f8, 0x24420001, 0xaee201f8, 0x8ee201f8, +0x42042, 0x1087033e, 0x0, 0x80038df, +0x0, 0x3c020001, 0x571021, 0x904283b2, +0x14400084, 0x24020001, 0x3c030001, 0x771821, +0x906383b3, 0x1462007f, 0x3c020100, 0x8e430000, +0x621024, 0x1040006f, 0x2402ffff, 0x14620005, +0x24110001, 0x96430004, 0x3402ffff, 0x10620075, +0x0, 0x92e204d8, 0x14400072, 0x0, +0x3c020001, 0x571021, 0x8c4283b4, 0x28420005, +0x10400020, 0x3821, 0x3c020001, 0x571021, +0x8c4283b4, 0x18400016, 0x2821, 0x96060000, +0x520c0, 0x971021, 0x9442777e, 0x14460009, +0x971021, 0x94437780, 0x96020002, 0x14620005, +0x971021, 0x94437782, 0x96020004, 0x50620008, +0x24070001, 0x3c020001, 0x571021, 0x8c4283b4, +0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, +0x30e200ff, 0x10400302, 0x0, 0x80039a6, +0x0, 0x2402021, 0xc0022fe, 0x24050006, +0x3044001f, 0x428c0, 0x2e51021, 0x9442727c, +0x30424000, 0x144002f6, 0xb71021, 0x9443727e, +0x96020000, 0x1462000b, 0x418c0, 0xb71021, +0x94437280, 0x96020002, 0x14620006, 0x418c0, +0xb71021, 0x94437282, 0x96020004, 0x10620035, +0x418c0, 0x2e31021, 0x9442727c, 0x30428000, +0x144002e3, 0x2e31021, 0x944d727c, 0x96070000, +0xd28c0, 0xb71021, 0x9442737e, 0x8003988, +0x3021, 0x420c0, 0x2e41021, 0x9443737c, +0x2e41021, 0x944d737c, 0x30638000, 0x14600010, +0xd28c0, 0xb71021, 0x9442737e, 0x1447fff5, +0x1a02021, 0xb71021, 0x94437380, 0x96020002, +0x5462fff1, 0x420c0, 0xb71021, 0x94437382, +0x96020004, 0x5462ffec, 0x420c0, 0x24060001, +0x30c200ff, 0x104002c2, 0x0, 0x80039a6, +0x0, 0x97430202, 0x96420000, 0x146202bc, +0x0, 0x97430204, 0x96420002, 0x146202b8, +0x0, 0x97430206, 0x96420004, 0x146202b4, +0x0, 0x92420000, 0x3a230001, 0x30420001, +0x431024, 0x10400074, 0x2402ffff, 0x8e030000, +0x14620004, 0x3402ffff, 0x96030004, 0x1062006f, +0x24150002, 0x3c020001, 0x571021, 0x904283b2, +0x1440006a, 0x24150003, 0x92e204d8, 0x14400067, +0x0, 0x3c020001, 0x571021, 0x8c4283b4, +0x28420005, 0x10400020, 0x3821, 0x3c020001, +0x571021, 0x8c4283b4, 0x18400016, 0x2821, +0x96060000, 0x520c0, 0x971021, 0x9442777e, +0x14460009, 0x971021, 0x94437780, 0x96020002, +0x14620005, 0x971021, 0x94437782, 0x96020004, +0x50620008, 0x24070001, 0x3c020001, 0x571021, +0x8c4283b4, 0x24a50001, 0xa2102a, 0x5440ffee, +0x520c0, 0x30e200ff, 0x14400044, 0x24150003, +0x8003c59, 0x0, 0x2402021, 0xc0022fe, +0x24050006, 0x3044001f, 0x428c0, 0x2e51021, +0x9442727c, 0x30424000, 0x14400271, 0xb71021, +0x9443727e, 0x96020000, 0x1462000b, 0x418c0, +0xb71021, 0x94437280, 0x96020002, 0x14620006, +0x418c0, 0xb71021, 0x94437282, 0x96020004, +0x10620027, 0x418c0, 0x2e31021, 0x9442727c, +0x30428000, 0x1440025e, 0x2e31021, 0x944d727c, +0x96070000, 0xd28c0, 0xb71021, 0x9442737e, +0x8003a0d, 0x3021, 0x420c0, 0x2e41021, +0x9443737c, 0x2e41021, 0x944d737c, 0x30638000, +0x14600010, 0xd28c0, 0xb71021, 0x9442737e, +0x1447fff5, 0x1a02021, 0xb71021, 0x94437380, +0x96020002, 0x5462fff1, 0x420c0, 0xb71021, +0x94437382, 0x96020004, 0x5462ffec, 0x420c0, +0x24060001, 0x30c200ff, 0x1040023d, 0x0, +0x8003a20, 0x24150003, 0x24150001, 0x8f420260, +0x53102b, 0x10400036, 0x0, 0x8f8300e4, +0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4, +0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2601821, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, +0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, +0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845090, +0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, +0xc002407, 0x34a5f203, 0x8003c5f, 0x0, +0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, +0x2484509c, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0x3c050006, 0xc002407, 0x34a5f202, 0x8ee201c0, +0x24420001, 0xaee201c0, 0x8003c06, 0x8ee201c0, +0x96e20468, 0x53102b, 0x54400001, 0x3c168000, +0x126001cb, 0x3c0e001f, 0x35ceffff, 0x3c0ffff5, +0x35ef1000, 0x241e0040, 0x8ee2724c, 0x8f430280, +0x24420001, 0x304207ff, 0x1062019e, 0x0, +0x12c00012, 0x0, 0x8ee35240, 0x8ee25244, +0x1062000a, 0x26f85244, 0x8ef45244, 0xafb80024, +0x8ee35244, 0x21140, 0x24425248, 0x2e28821, +0x24630001, 0x8003a89, 0x306d00ff, 0x8ee201e0, +0x24420001, 0xaee201e0, 0x8ee201e0, 0x8ee30e10, +0x8ee20e18, 0x1062ffca, 0x26f80e18, 0x8ef40e18, +0xb021, 0xafb80024, 0x8ee30e18, 0x21140, +0x24420e20, 0x2e28821, 0x24630001, 0x306d01ff, +0x96e2046a, 0x30420010, 0x10400018, 0x34028100, +0x9643000c, 0x14620015, 0x0, 0x3c020001, +0x571021, 0x904283c0, 0x14400010, 0x0, +0x9642000e, 0xa6220016, 0x8e420008, 0x8e430004, +0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008, +0xae440004, 0x9622000e, 0x26100004, 0x24180001, +0xa3b8002f, 0x34420200, 0xa622000e, 0x8e220000, +0x8e230004, 0x3c040001, 0x34843800, 0x2003021, +0x306a0007, 0x20a8023, 0x3641021, 0x202102b, +0x10400005, 0x26a9821, 0x2041023, 0x3621823, +0x3c020020, 0x438023, 0x26620007, 0x9623000a, +0x2418fff8, 0x58c824, 0x6a1821, 0x79102b, +0x10400002, 0x3206021, 0x606021, 0x1801821, +0x24620007, 0x2418fff8, 0x586024, 0x26c102b, +0x14400004, 0x1932823, 0x1832823, 0x8003ac7, +0xc31021, 0xd31021, 0x4a2023, 0x1c4102b, +0x54400001, 0x8f2021, 0x25420040, 0x4c102b, +0x14400035, 0x5821, 0x94c3000c, 0x24020800, +0x54620032, 0xae260018, 0x3c020001, 0x571021, +0x904283c0, 0x5440002d, 0xae260018, 0x24c20017, +0x1c2102b, 0x10400013, 0x0, 0x3c02fff5, +0x461021, 0x90421017, 0x38430006, 0x2c630001, +0x38420011, 0x2c420001, 0x621825, 0x10600014, +0x24c20010, 0x1c2102b, 0x1040000e, 0x0, +0x3c0bfff5, 0x1665821, 0x956b1010, 0x8003af8, +0x2562000e, 0x90c20017, 0x38430006, 0x2c630001, +0x38420011, 0x2c420001, 0x621825, 0x10600005, +0x1601821, 0x94cb0010, 0x2562000e, 0x4a5821, +0x1601821, 0x24620007, 0x2418fff8, 0x585824, +0xc31021, 0x4a2023, 0x1c4102b, 0x10400002, +0x1632823, 0x8f2021, 0xae260018, 0x3c020001, +0x571021, 0x904283c0, 0x2102b, 0x216c0, +0x15600002, 0xafa20044, 0x1805821, 0x30820001, +0x10400007, 0x4021, 0x90880000, 0x24840001, +0x1c4102b, 0x10400002, 0x24a5ffff, 0x8f2021, +0x50a00012, 0x81c02, 0x2ca20002, 0x54400009, +0x24a5ffff, 0x94820000, 0x24840002, 0x1024021, +0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b25, +0x8f2021, 0x90820000, 0x21200, 0x1024021, +0x14a0fff2, 0x2ca20002, 0x81c02, 0x3102ffff, +0x624021, 0x3108ffff, 0x1402821, 0x11400011, +0x2002021, 0x2ca20002, 0x54400009, 0x24a5ffff, +0x94820000, 0x24840002, 0x1024021, 0x1c4102b, +0x10400006, 0x24a5fffe, 0x8003b3c, 0x8f2021, +0x90820000, 0x21200, 0x1024021, 0x14a0fff2, +0x2ca20002, 0x81c02, 0x3102ffff, 0x624021, +0x81c02, 0x3102ffff, 0x8f890120, 0x624021, +0x27623800, 0x25230020, 0x62102b, 0x14400002, +0x3108ffff, 0x27633000, 0x8f820128, 0x10620004, +0x0, 0x8f820124, 0x14620007, 0x1402821, +0x8ee201a4, 0x3821, 0x24420001, 0xaee201a4, +0x8003bcd, 0x8ee201a4, 0x8e260000, 0x8e270004, +0x81400, 0x3448000b, 0xad300008, 0xa52b000e, +0xad280018, 0x8fb80044, 0x2021, 0x2961025, +0x581025, 0xad22001c, 0xe5102b, 0xe53823, +0xc43023, 0xc23023, 0xad260000, 0xad270004, +0x8ee204c0, 0xad220010, 0xaf830120, 0x92e24e20, +0x1440005f, 0x24070001, 0x2502ffee, 0x2c420002, +0x14400003, 0x24020011, 0x15020024, 0x0, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c830000, 0x24020012, 0x1462000f, 0x0, +0x8ee34e30, 0x8ee24e34, 0x1062000b, 0x0, +0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34, +0x8ee34e30, 0x24420001, 0x105e002a, 0x0, +0x8003bac, 0x0, 0x8ee24e30, 0x24420001, +0x505e0003, 0x1021, 0x8ee24e30, 0x24420001, +0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8003bca, 0x24020012, 0x8ee24e30, +0x210c0, 0x24425038, 0x2e22021, 0x8c830000, +0x24020007, 0x1462001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x105e0007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8003bb8, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400012, 0xac800000, 0x8003bcd, +0x0, 0x8ee24e30, 0x24420001, 0x505e0003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020007, 0xac820000, 0x24020001, 0xac820004, +0x14e00019, 0x3c050006, 0x3c040001, 0x24845060, +0x8e220018, 0x34a5f209, 0xafa20010, 0x8e220000, +0x8e230004, 0x2203021, 0x1603821, 0xc002407, +0xafa30014, 0x93a2002f, 0x1040002a, 0x34028100, +0x8e430004, 0x8e440008, 0x8e45000c, 0xa642000c, +0xae430000, 0xae440004, 0xae450008, 0x96220016, +0x8003c06, 0xa642000e, 0x1599000a, 0x26a1823, +0x9622000e, 0xa623000a, 0x34420004, 0xa622000e, +0x3c010001, 0x370821, 0xa02083c0, 0x8003c03, +0x9821, 0x9624000a, 0x83102b, 0x54400001, +0x801821, 0x24020001, 0xa623000a, 0x3c010001, +0x370821, 0xa02283c0, 0x9622000a, 0x4a1821, +0x2038021, 0x1d0102b, 0x54400001, 0x20f8021, +0x2639823, 0xb021, 0x8fb80024, 0x1660fe5e, +0xaf0d0000, 0x12600022, 0x0, 0x3c010001, +0x370821, 0xac3383c4, 0x3c010001, 0x370821, +0xac3083c8, 0x3c010001, 0x370821, 0xac3283cc, +0x93a2002f, 0x10400008, 0x0, 0x3c020001, +0x571021, 0x8c4283cc, 0x24420004, 0x3c010001, +0x370821, 0xac2283cc, 0x8f430280, 0x8ee2724c, +0x14620006, 0x0, 0x8ee201c4, 0x24420001, +0xaee201c4, 0x8003c5f, 0x8ee201c4, 0x8ee201bc, +0x24420001, 0xaee201bc, 0x8003c5f, 0x8ee201bc, +0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0, +0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0x24020002, 0xaee400c0, +0xaee500c4, 0x12a2000f, 0x2aa20003, 0x14400017, +0x24020003, 0x16a20015, 0x0, 0x8ee200d0, +0x8ee300d4, 0x24630001, 0x2c640001, 0x441021, +0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x8003c59, +0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001, +0x2c640001, 0x441021, 0xaee200d8, 0xaee300dc, +0x8ee200d8, 0x8003c59, 0x8ee300dc, 0x8ee200c8, +0x8ee300cc, 0x24630001, 0x2c640001, 0x441021, +0xaee200c8, 0xaee300cc, 0x8ee200c8, 0x8ee300cc, +0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008, +0xaf8300e4, 0xaf8300e8, 0x8fbf0068, 0x8fbe0064, +0x8fb60060, 0x8fb5005c, 0x8fb40058, 0x8fb30054, +0x8fb20050, 0x8fb1004c, 0x8fb00048, 0x3e00008, +0x27bd0070, 0x27bdffe0, 0xafbf0018, 0x8ee30e14, +0x8ee20e0c, 0x10620074, 0x0, 0x8ee30e0c, +0x8ee20e14, 0x622023, 0x4820001, 0x24840200, +0x8ee30e18, 0x8ee20e14, 0x43102b, 0x14400004, +0x24020200, 0x8ee30e14, 0x8003c81, 0x431823, +0x8ee20e18, 0x8ee30e14, 0x431023, 0x2443ffff, +0x804821, 0x69102a, 0x54400001, 0x604821, +0x8f870100, 0x27623000, 0x24e80020, 0x102102b, +0x50400001, 0x27682800, 0x8f820108, 0x11020004, +0x0, 0x8f820104, 0x15020007, 0x1021, +0x8ee201a8, 0x2021, 0x24420001, 0xaee201a8, +0x8003cc3, 0x8ee201a8, 0x8ee40e14, 0x42140, +0x801821, 0x8ee40460, 0x8ee50464, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xace40000, +0xace50004, 0x8ee30e14, 0x91140, 0xa4e2000e, +0x24020002, 0xace20018, 0x31940, 0x24630e20, +0x2e31021, 0xace20008, 0x8ee20e14, 0xace2001c, +0x8ee204cc, 0xace20010, 0xaf880100, 0x92e204ec, +0x14400011, 0x24040001, 0x8ee24e28, 0x24030040, +0x24420001, 0x50430003, 0x1021, 0x8ee24e28, +0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, +0x24424e38, 0x2e21821, 0x24020002, 0xac620000, +0x24020001, 0xac620004, 0x1480000e, 0x24030040, +0x8ee20e14, 0xafa20010, 0x8ee20e18, 0x3c050007, +0xafa20014, 0x8ee60e0c, 0x8ee70e10, 0x3c040001, +0x248450a4, 0xc002407, 0x34a5f001, 0x8003ce1, +0x0, 0x8ee20500, 0x24420001, 0x50430003, +0x1021, 0x8ee20500, 0x24420001, 0xaee20500, +0x8ee20500, 0x21080, 0x571021, 0xac490508, +0x8ee20e14, 0x491021, 0x304201ff, 0xaee20e14, +0x8ee30e14, 0x8ee20e0c, 0x14620005, 0x0, +0x8f820060, 0x2403fdff, 0x431024, 0xaf820060, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, +0xafbf0018, 0x8ee3523c, 0x8ee25238, 0x10620074, +0x0, 0x8ee35238, 0x8ee2523c, 0x622023, +0x4820001, 0x24840100, 0x8ee35244, 0x8ee2523c, +0x43102b, 0x14400004, 0x24020100, 0x8ee3523c, +0x8003d03, 0x431823, 0x8ee25244, 0x8ee3523c, +0x431023, 0x2443ffff, 0x804821, 0x69102a, +0x54400001, 0x604821, 0x8f870100, 0x27623000, +0x24e80020, 0x102102b, 0x50400001, 0x27682800, +0x8f820108, 0x11020004, 0x0, 0x8f820104, +0x15020007, 0x1021, 0x8ee201a8, 0x2021, +0x24420001, 0xaee201a8, 0x8003d45, 0x8ee201a8, +0x8ee4523c, 0x42140, 0x801821, 0x8ee40470, +0x8ee50474, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xace40000, 0xace50004, 0x8ee3523c, +0x91140, 0xa4e2000e, 0x24020003, 0xace20018, +0x31940, 0x24635248, 0x2e31021, 0xace20008, +0x8ee2523c, 0xace2001c, 0x8ee204cc, 0xace20010, +0xaf880100, 0x92e204ec, 0x14400011, 0x24040001, +0x8ee24e28, 0x24030040, 0x24420001, 0x50430003, +0x1021, 0x8ee24e28, 0x24420001, 0xaee24e28, +0x8ee24e28, 0x210c0, 0x24424e38, 0x2e21821, +0x24020003, 0xac620000, 0x24020001, 0xac620004, +0x1480000e, 0x24030040, 0x8ee2523c, 0xafa20010, +0x8ee25244, 0x3c050007, 0xafa20014, 0x8ee65238, +0x8ee75240, 0x3c040001, 0x248450b0, 0xc002407, +0x34a5f010, 0x8003d63, 0x0, 0x8ee20500, +0x24420001, 0x50430003, 0x1021, 0x8ee20500, +0x24420001, 0xaee20500, 0x8ee20500, 0x21080, +0x571021, 0xac490508, 0x8ee2523c, 0x491021, +0x304200ff, 0xaee2523c, 0x8ee3523c, 0x8ee25238, +0x14620005, 0x0, 0x8f820060, 0x2403feff, +0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008, +0x27bd0020, 0x8f820120, 0x8ee34e34, 0x8f820124, +0x8f860128, 0x24020040, 0x24630001, 0x50620003, +0x1021, 0x8ee24e34, 0x24420001, 0xaee24e34, +0x8ee24e34, 0x8ee44e34, 0x8ee34e30, 0x210c0, +0x24425038, 0x14830007, 0x2e22821, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8003d96, +0xaca00000, 0x8ee24e34, 0x24030040, 0x24420001, +0x50430003, 0x1021, 0x8ee24e34, 0x24420001, +0x210c0, 0x24425038, 0x2e22821, 0x8ca20004, +0x8f830128, 0x21140, 0x621821, 0xaf830128, +0xaca00000, 0x8cc20018, 0x2443fffe, 0x2c620012, +0x10400008, 0x31080, 0x3c010001, 0x220821, +0x8c2250c0, 0x400008, 0x0, 0x24020001, +0xaee24e24, 0x3e00008, 0x0, 0x27bdffc8, +0xafbf0030, 0xafb5002c, 0xafb40028, 0xafb30024, +0xafb20020, 0xafb1001c, 0xafb00018, 0x8f830128, +0x8f820124, 0x106202b0, 0x9821, 0x3c11001f, +0x3631ffff, 0x3c12fff5, 0x36521000, 0x24150012, +0x24140040, 0x8f8c0128, 0x8f820128, 0x24420020, +0xaf820128, 0x9182001b, 0x8f830128, 0x2443fffe, +0x2c620012, 0x1040029c, 0x31080, 0x3c010001, +0x220821, 0x8c225118, 0x400008, 0x0, +0x8f420218, 0x30420100, 0x10400007, 0x0, +0x95830016, 0x95820018, 0x621823, 0x31402, +0x431021, 0xa5820016, 0x8d82001c, 0x3c038000, +0x3044ffff, 0x436824, 0x3c030800, 0x431824, +0x11a00004, 0xad84001c, 0x41140, 0x8003ddc, +0x24425248, 0x41140, 0x24420e20, 0x2e25821, +0x9562000e, 0x3042fffc, 0x10600004, 0xa562000e, +0x95840016, 0x8003ec4, 0x0, 0x8d690018, +0x4021, 0x952a0000, 0x25290002, 0x95270000, +0x25290002, 0x95260000, 0x25290002, 0x95250000, +0x25290002, 0x95240000, 0x25290002, 0x95230000, +0x25290002, 0x95220000, 0x25290002, 0x1475021, +0x1465021, 0x1455021, 0x1445021, 0x1435021, +0x1425021, 0xa1c02, 0x3142ffff, 0x625021, +0xa1c02, 0x3142ffff, 0x625021, 0x96e2046a, +0x314effff, 0x30420002, 0x10400044, 0x5021, +0x25220014, 0x222102b, 0x10400014, 0x1201821, +0x2405000a, 0x2021, 0x223102b, 0x54400001, +0x721821, 0x94620000, 0x24630002, 0x24a5ffff, +0x14a0fff9, 0x822021, 0x41c02, 0x3082ffff, +0x622021, 0x41402, 0x3083ffff, 0x431021, +0x3042ffff, 0x8003e37, 0x1425021, 0x952a0000, +0x25290002, 0x95280000, 0x25290002, 0x95270000, +0x25290002, 0x95260000, 0x25290002, 0x95250000, +0x25290002, 0x95230000, 0x25290002, 0x95220000, +0x25290002, 0x95240000, 0x25290002, 0x1485021, +0x1475021, 0x1465021, 0x1455021, 0x1435021, +0x1425021, 0x95220000, 0x95230002, 0x1445021, +0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, +0x625021, 0xa1c02, 0x3142ffff, 0x625021, +0x3148ffff, 0x51000001, 0x3408ffff, 0x8d620018, +0x9443000c, 0x24020800, 0x54620005, 0xa5680010, +0x9562000e, 0x34420002, 0xa562000e, 0xa5680010, +0x96e2046a, 0x2821, 0x30420008, 0x14400056, +0x3021, 0x8d630018, 0x24620024, 0x222102b, +0x10400034, 0x24690010, 0x229102b, 0x54400001, +0x1324821, 0x95250000, 0x24690014, 0x229102b, +0x10400002, 0x24a5ffec, 0x1324821, 0x95220000, +0x30420fff, 0x14400003, 0x25290002, 0x8003e64, +0x24130001, 0x9821, 0xa03021, 0x229102b, +0x54400001, 0x1324821, 0x91220001, 0x25290002, +0xa22821, 0x229102b, 0x54400001, 0x1324821, +0x25290002, 0x229102b, 0x54400001, 0x1324821, +0x95220000, 0x25290002, 0xa22821, 0x229102b, +0x54400001, 0x1324821, 0x95220000, 0x25290002, +0xa22821, 0x229102b, 0x54400001, 0x1324821, +0x95220000, 0x25290002, 0xa22821, 0x229102b, +0x54400001, 0x1324821, 0x95220000, 0x8003e9d, +0xa22821, 0x94650010, 0x94620014, 0x24690016, +0x30420fff, 0x14400003, 0x24a5ffec, 0x8003e90, +0x24130001, 0x9821, 0xa03021, 0x91230001, +0x25290004, 0x95220000, 0x25290002, 0x95240000, +0x25290002, 0xa32821, 0xa22821, 0x95220000, +0x95230002, 0xa42821, 0xa22821, 0xa32821, +0x51c02, 0x30a2ffff, 0x622821, 0x51c02, +0x30a2ffff, 0x622821, 0x96e2046a, 0x30420001, +0x1040001e, 0x2021, 0x95820016, 0x4e2023, +0x41402, 0x822021, 0x326200ff, 0x50400002, +0x862021, 0x852021, 0x41402, 0x822021, +0x3084ffff, 0x50800001, 0x3404ffff, 0x8d620018, +0x24430017, 0x223102b, 0x54400001, 0x721821, +0x90620000, 0x38430011, 0x2c630001, 0x38420006, +0x2c420001, 0x621825, 0x10600004, 0x0, +0x9562000e, 0x34420001, 0xa562000e, 0x9562000e, +0x240a0002, 0x30420004, 0x10400002, 0xa5640012, +0x240a0004, 0x8f880120, 0x27623800, 0x25090020, +0x122102b, 0x50400001, 0x27693000, 0x8f820128, +0x11220004, 0x0, 0x8f820124, 0x15220007, +0x24040020, 0x8ee201a4, 0x8021, 0x24420001, +0xaee201a4, 0x8003f53, 0x8ee201a4, 0x8ee5724c, +0x8ee60490, 0x8ee70494, 0xad0b0008, 0xa504000e, +0xad0a0018, 0x52940, 0xa01821, 0x1021, +0xe33821, 0xe3202b, 0xc23021, 0xc43021, +0xad060000, 0xad070004, 0x8ee2724c, 0x4d1025, +0xad02001c, 0x8ee204c4, 0xad020010, 0xaf890120, +0x92e24e20, 0x14400060, 0x24100001, 0x2543ffee, +0x2c630002, 0x39420011, 0x2c420001, 0x621825, +0x10600024, 0x0, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x1455000f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062000b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x1054002b, +0x0, 0x8003f32, 0x0, 0x8ee24e30, +0x24420001, 0x50540003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020001, 0x8003f52, +0xac950000, 0x8ee24e30, 0x210c0, 0x24425038, +0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10540007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x8003f3e, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400012, +0xac800000, 0x8003f53, 0x0, 0x8ee24e30, +0x24420001, 0x50540003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020007, 0xac820000, +0x24020001, 0xac820004, 0x1600000d, 0x0, +0x8f820120, 0x3c040001, 0x24845108, 0xafa00014, +0xafa20010, 0x8d86001c, 0x8f870124, 0x3c050008, +0xc002407, 0x34a50001, 0x800405b, 0x0, +0x8ee2724c, 0x24420001, 0x304207ff, 0x11a00006, +0xaee2724c, 0x8ee201d0, 0x2442ffff, 0xaee201d0, +0x8003f6f, 0x8ee201d0, 0x8ee201cc, 0x2442ffff, +0xaee201cc, 0x8ee201cc, 0x8ee201d8, 0x2442ffff, +0xaee201d8, 0x800405b, 0x8ee201d8, 0x8f420240, +0x104000e5, 0x0, 0x8ee20e1c, 0x24420001, +0x800405b, 0xaee20e1c, 0x9582001e, 0xad82001c, +0x8f420240, 0x10400072, 0x0, 0x8ee20e1c, +0x24420001, 0xaee20e1c, 0x8f430240, 0x43102b, +0x144000d5, 0x0, 0x8f830120, 0x27623800, +0x24660020, 0xc2102b, 0x50400001, 0x27663000, +0x8f820128, 0x10c20004, 0x0, 0x8f820124, +0x14c20007, 0x0, 0x8ee201a4, 0x8021, +0x24420001, 0xaee201a4, 0x8003fde, 0x8ee201a4, +0x8ee2724c, 0xac62001c, 0x8ee404a8, 0x8ee504ac, +0x2462001c, 0xac620008, 0x24020008, 0xa462000e, +0x24020011, 0xac620018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400034, 0x24100001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x1455001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10540007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x8003fca, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400011, +0xac800000, 0x8003fde, 0x0, 0x8ee24e30, +0x24420001, 0x50540003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x24020001, 0xac950000, +0xac820004, 0x5600000b, 0x24100001, 0x8ee2724c, +0x3c040001, 0x24845078, 0xafa00014, 0xafa20010, +0x8ee6724c, 0x8f470280, 0x3c050009, 0xc002407, +0x34a5f008, 0x56000001, 0xaee00e1c, 0x8ee20188, +0x24420001, 0xaee20188, 0x8004054, 0x8ee20188, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4, +0x8004048, 0x8ee201a4, 0x8ee2724c, 0xac62001c, +0x8ee404a8, 0x8ee504ac, 0x2462001c, 0xac620008, +0x24020008, 0xa462000e, 0x24020011, 0xac620018, +0xac640000, 0xac650004, 0x8ee204c4, 0xac620010, +0xaf860120, 0x92e24e20, 0x14400034, 0x24100001, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x8c820000, 0x1455001f, 0x0, 0x8ee34e30, +0x8ee24e34, 0x1062001b, 0x0, 0x8c820004, +0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30, +0x24420001, 0x10540007, 0x0, 0x8ee24e34, +0x24420001, 0x10620005, 0x0, 0x8004034, +0x0, 0x14600005, 0x0, 0x8f820128, +0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, +0x2c420011, 0x50400011, 0xac800000, 0x8004048, +0x0, 0x8ee24e30, 0x24420001, 0x50540003, +0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, +0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, +0x24020001, 0xac950000, 0xac820004, 0x1600000b, +0x0, 0x8ee2724c, 0x3c040001, 0x24845078, +0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, +0x3c050009, 0xc002407, 0x34a5f008, 0x8ee20174, +0x24420001, 0xaee20174, 0x800405b, 0x8ee20174, +0x24020001, 0xaee24e24, 0x8f830128, 0x8f820124, +0x1462fd58, 0x0, 0x8fbf0030, 0x8fb5002c, +0x8fb40028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, +0x8fb00018, 0x3e00008, 0x27bd0038, 0x27bdffe8, +0x27840208, 0x27450200, 0x24060008, 0xafbf0014, +0xc00249e, 0xafb00010, 0x2021, 0x24100001, +0x2402241f, 0xaf900210, 0xaf900200, 0xaf800204, +0xaf820214, 0x8f460248, 0x24030004, 0x3c020040, +0x3c010001, 0xac235474, 0x3c010001, 0xac235478, +0x3c010001, 0xac20552c, 0x3c010001, 0xac225470, +0x3c010001, 0xac235478, 0xc004fa4, 0x24050004, +0xc004784, 0x0, 0x8ee20000, 0x3c03feff, +0x3463fffd, 0x431024, 0xaee20000, 0x3c023c00, +0xaf82021c, 0x3c010001, 0x370821, 0xac3083ac, +0x8fbf0014, 0x8fb00010, 0x3e00008, 0x27bd0018, +0x27bdffe0, 0x3c050008, 0x34a50400, 0xafbf0018, +0xafa00010, 0xafa00014, 0x8f860200, 0x3c040001, +0x248451c0, 0xc002407, 0x3821, 0x8ee20280, +0x24420001, 0xaee20280, 0x8ee20280, 0x8f830200, +0x3c023f00, 0x621824, 0x8fbf0018, 0x3c020400, +0x3e00008, 0x27bd0020, 0x27bdffd8, 0xafbf0020, +0xafb1001c, 0xafb00018, 0x8f900220, 0x8ee20214, +0x3821, 0x24420001, 0xaee20214, 0x8ee20214, +0x3c020300, 0x2021024, 0x10400027, 0x3c110400, +0xc00429f, 0x0, 0x3c020100, 0x2021024, +0x10400007, 0x0, 0x8ee20218, 0x24420001, +0xaee20218, 0x8ee20218, 0x80040ca, 0x3c03fdff, +0x8ee2021c, 0x24420001, 0xaee2021c, 0x8ee2021c, +0x3c03fdff, 0x3463ffff, 0x3c0808ff, 0x3508ffff, +0x8ee20000, 0x3c040001, 0x248451cc, 0x3c050008, +0x2003021, 0x431024, 0xaee20000, 0x8f820220, +0x3821, 0x3c030300, 0x481024, 0x431025, +0xaf820220, 0xafa00010, 0xc002407, 0xafa00014, +0x800429a, 0x0, 0x2111024, 0x1040001f, +0x3c024000, 0x8f830224, 0x24021402, 0x1462000b, +0x3c03fdff, 0x3c040001, 0x248451d8, 0x3c050008, +0xafa00010, 0xafa00014, 0x8f860224, 0x34a5ffff, +0xc002407, 0x3821, 0x3c03fdff, 0x8ee20000, +0x3463ffff, 0x2002021, 0x431024, 0xc004cf0, +0xaee20000, 0x8ee20220, 0x24420001, 0xaee20220, +0x8ee20220, 0x8f820220, 0x3c0308ff, 0x3463ffff, +0x431024, 0x8004299, 0x511025, 0x2021024, +0x10400142, 0x0, 0x8ee2022c, 0x24420001, +0xaee2022c, 0x8ee2022c, 0x8f820220, 0x3c0308ff, +0x3463ffff, 0x431024, 0x34420004, 0xaf820220, +0x8f830054, 0x8f820054, 0x8004112, 0x24630002, +0x8f820054, 0x621023, 0x2c420003, 0x1440fffc, +0x0, 0x8f8600e0, 0x8f8400e4, 0x30c20007, +0x10400012, 0x0, 0x8f8300e4, 0x2402fff8, +0xc21024, 0x1043000d, 0x0, 0x8f820054, +0x8f8300e0, 0x14c30009, 0x24440050, 0x8f820054, +0x821023, 0x2c420051, 0x10400004, 0x0, +0x8f8200e0, 0x10c2fff9, 0x0, 0x8f820220, +0x3c0308ff, 0x3463fffd, 0x431024, 0xaf820220, +0x8f8600e0, 0x30c20007, 0x10400003, 0x2402fff8, +0xc23024, 0xaf8600e0, 0x8f8300c4, 0x3c02001f, +0x3442ffff, 0x24680008, 0x48102b, 0x10400003, +0x3c02fff5, 0x34421000, 0x1024021, 0x8f8b00c8, +0x8f850120, 0x8f840124, 0x8004149, 0x6021, +0x27623800, 0x82102b, 0x50400001, 0x27643000, +0x10a40010, 0x318200ff, 0x8c820018, 0x38430007, +0x2c630001, 0x3842000b, 0x2c420001, 0x621825, +0x5060fff3, 0x24840020, 0x8ee20240, 0x240c0001, +0x24420001, 0xaee20240, 0x8ee20240, 0x8c8b0008, +0x318200ff, 0x14400065, 0x0, 0x3c020001, +0x571021, 0x904283c0, 0x14400060, 0x0, +0x8f8400e4, 0xc41023, 0x218c3, 0x4620001, +0x24630200, 0x8f8900c4, 0x10600005, 0x24020001, +0x10620009, 0x0, 0x800418b, 0x0, +0x8ee20230, 0x1205821, 0x24420001, 0xaee20230, +0x80041c0, 0x8ee20230, 0x8ee20234, 0x3c05000a, +0x24420001, 0xaee20234, 0x8c8b0000, 0x34a5f000, +0x8ee20234, 0x12b1823, 0xa3102b, 0x54400001, +0x651821, 0x2c62233f, 0x14400040, 0x0, +0x8f8200e8, 0x24420008, 0xaf8200e8, 0x8f8200e8, +0x8f8200e4, 0x1205821, 0x24420008, 0xaf8200e4, +0x80041c0, 0x8f8200e4, 0x8ee20238, 0x3c03000a, +0x24420001, 0xaee20238, 0x8c840000, 0x3463f000, +0x8ee20238, 0x883823, 0x67102b, 0x54400001, +0xe33821, 0x3c020003, 0x34420d40, 0x47102b, +0x10400003, 0x0, 0x80041c0, 0x805821, +0x8f8200e4, 0x24440008, 0xaf8400e4, 0x8f8400e4, +0x10860018, 0x3c05000a, 0x34a5f000, 0x3c0a0003, +0x354a0d40, 0x8ee2007c, 0x24420001, 0xaee2007c, +0x8c830000, 0x8ee2007c, 0x683823, 0xa7102b, +0x54400001, 0xe53821, 0x147102b, 0x54400007, +0x605821, 0x8f8200e4, 0x24440008, 0xaf8400e4, +0x8f8400e4, 0x1486ffef, 0x0, 0x14860005, +0x0, 0x1205821, 0xaf8600e4, 0x80041c0, +0xaf8600e8, 0xaf8400e4, 0xaf8400e8, 0x8f8200c8, +0x3c03000a, 0x3463f000, 0x483823, 0x67102b, +0x54400001, 0xe33821, 0x3c020003, 0x34420d3f, +0x47102b, 0x54400007, 0x6021, 0x1683823, +0x67102b, 0x54400003, 0xe33821, 0x80041d3, +0x3c020003, 0x3c020003, 0x34420d3f, 0x47102b, +0x14400016, 0x318200ff, 0x14400006, 0x0, +0x3c020001, 0x571021, 0x904283c0, 0x1040000f, +0x0, 0x8ee2023c, 0x3c04fdff, 0x8ee30000, +0x3484ffff, 0x24420001, 0xaee2023c, 0x8ee2023c, +0x24020001, 0x641824, 0x3c010001, 0x370821, +0xa02283b8, 0x8004230, 0xaee30000, 0xaf8b00c8, +0x8f8300c8, 0x8f8200c4, 0x3c04000a, 0x3484f000, +0x623823, 0x87102b, 0x54400001, 0xe43821, +0x3c020003, 0x34420d40, 0x47102b, 0x2ce30001, +0x431025, 0x10400008, 0x0, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x3c034000, +0x431025, 0xaf820220, 0x8f8600e0, 0x8f8400e4, +0x10c4002a, 0x0, 0x8ee2007c, 0x24420001, +0xaee2007c, 0x8ee2007c, 0x24c2fff8, 0xaf8200e0, +0x3c020001, 0x8c4275b0, 0x3c030008, 0x8f8600e0, +0x431024, 0x1040001d, 0x0, 0x10c4001b, +0x240dfff8, 0x3c0a000a, 0x354af000, 0x3c0c0080, +0x24850008, 0x27622800, 0x50a20001, 0x27651800, +0x8c880004, 0x8c820000, 0x8ca90000, 0x3103ffff, +0x431021, 0x4d1024, 0x24430010, 0x6b102b, +0x54400001, 0x6a1821, 0x12b102b, 0x54400001, +0x12a4821, 0x10690002, 0x10c1025, 0xac820004, +0xa02021, 0x14c4ffeb, 0x24850008, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x34420002, +0xaf820220, 0x8f830054, 0x8f820054, 0x800423b, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820220, 0x3c0308ff, +0x3463fffb, 0x431024, 0xaf820220, 0x6010055, +0x0, 0x8ee20228, 0x24420001, 0xaee20228, +0x8ee20228, 0x8f820220, 0x3c0308ff, 0x3463ffff, +0x431024, 0x34420004, 0xaf820220, 0x8f830054, +0x8f820054, 0x8004255, 0x24630002, 0x8f820054, +0x621023, 0x2c420003, 0x1440fffc, 0x0, +0x8f8600e0, 0x30c20007, 0x10400012, 0x0, +0x8f8300e4, 0x2402fff8, 0xc21024, 0x1043000d, +0x0, 0x8f820054, 0x8f8300e0, 0x14c30009, +0x24440032, 0x8f820054, 0x821023, 0x2c420033, +0x10400004, 0x0, 0x8f8200e0, 0x10c2fff9, +0x0, 0x8f820220, 0x3c0308ff, 0x3463fffd, +0x431024, 0xaf820220, 0x8f8600e0, 0x30c20007, +0x10400003, 0x2402fff8, 0xc23024, 0xaf8600e0, +0x240301f5, 0x8f8200e8, 0x673823, 0x718c0, +0x431021, 0xaf8200e8, 0x8f8200e8, 0xaf8200e4, +0x8ee2007c, 0x3c0408ff, 0x3484ffff, 0x471021, +0xaee2007c, 0x8f820220, 0x3c038000, 0x34630002, +0x441024, 0x431025, 0xaf820220, 0x8f830054, +0x8f820054, 0x8004291, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, +0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0x3e00008, 0x27bd0028, 0x3c020001, 0x8c425488, +0x27bdffd8, 0x10400012, 0xafbf0020, 0x3c040001, +0x248451e4, 0x3c050008, 0x24020001, 0x3c010001, +0x370821, 0xac2283ac, 0xafa00010, 0xafa00014, +0x8f860220, 0x34a50498, 0x3c010001, 0xac205488, +0x3c010001, 0xac22547c, 0xc002407, 0x3821, +0x8f420268, 0x3c037fff, 0x3463ffff, 0x431024, +0xaf420268, 0x8ee204d0, 0x8ee404d4, 0x2403fffe, +0x431024, 0x30840002, 0x1080011e, 0xaee204d0, +0x8ee204d4, 0x2403fffd, 0x431024, 0xaee204d4, +0x8f820044, 0x3c030600, 0x34632000, 0x34420020, +0xaf820044, 0xafa30018, 0x8ee20608, 0x8f430228, +0x24420001, 0x304a00ff, 0x514300fe, 0xafa00010, +0x8ee20608, 0x210c0, 0x571021, 0x8fa30018, +0x8fa4001c, 0xac43060c, 0xac440610, 0x8f830054, +0x8f820054, 0x24690032, 0x1221023, 0x2c420033, +0x1040006a, 0x5821, 0x24180008, 0x240f000d, +0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120, +0x27623800, 0x24e80020, 0x102102b, 0x50400001, +0x27683000, 0x8f820128, 0x11020004, 0x0, +0x8f820124, 0x15020007, 0x1021, 0x8ee201a4, +0x2821, 0x24420001, 0xaee201a4, 0x8004341, +0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821, +0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xace40000, 0xace50004, +0x8ee20608, 0xa4f8000e, 0xacef0018, 0xacea001c, +0x210c0, 0x2442060c, 0x2e21021, 0xace20008, +0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20, +0x14400033, 0x24050001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x144d001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x104c0007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x800432e, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, +0xac800000, 0x8004341, 0x0, 0x8ee24e30, +0x24420001, 0x504c0003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0xac8d0000, 0xac8e0004, +0x54a00006, 0x240b0001, 0x8f820054, 0x1221023, +0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, +0x24020001, 0x54620079, 0xafa00010, 0xaeea0608, +0x8f830054, 0x8f820054, 0x24690032, 0x1221023, +0x2c420033, 0x10400061, 0x5821, 0x240d0008, +0x240c0011, 0x24080012, 0x24070040, 0x240a0001, +0x8f830120, 0x27623800, 0x24660020, 0xc2102b, +0x50400001, 0x27663000, 0x8f820128, 0x10c20004, +0x0, 0x8f820124, 0x14c20007, 0x0, +0x8ee201a4, 0x2821, 0x24420001, 0xaee201a4, +0x80043ad, 0x8ee201a4, 0x8ee20608, 0xac62001c, +0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008, +0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004, +0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20, +0x14400033, 0x24050001, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0x8c820000, 0x1448001f, +0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b, +0x0, 0x8c820004, 0x24420001, 0xac820004, +0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10470007, +0x0, 0x8ee24e34, 0x24420001, 0x10620005, +0x0, 0x800439a, 0x0, 0x14600005, +0x0, 0x8f820128, 0x24420020, 0xaf820128, +0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, +0xac800000, 0x80043ad, 0x0, 0x8ee24e30, +0x24420001, 0x50470003, 0x1021, 0x8ee24e30, +0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, +0x24425038, 0x2e22021, 0xac880000, 0xac8a0004, +0x54a00006, 0x240b0001, 0x8f820054, 0x1221023, +0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, +0x24020001, 0x54620003, 0xafa00010, 0x80043da, +0x0, 0x3c040001, 0x248451f0, 0xafa00014, +0x8f860120, 0x8f870124, 0x3c050009, 0xc002407, +0x34a5f011, 0x80043da, 0x0, 0x3c040001, +0x248451fc, 0xafa00014, 0x8f860120, 0x8f870124, +0x3c050009, 0xc002407, 0x34a5f010, 0x80043da, +0x0, 0x3c040001, 0x24845208, 0xafa00014, +0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407, +0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, +0x8ee201ac, 0x8ee2015c, 0x24420001, 0xaee2015c, +0x8ee2015c, 0x8fbf0020, 0x3e00008, 0x27bd0028, +0x3c020001, 0x8c425488, 0x27bdffe0, 0x1440000d, +0xafbf0018, 0x3c040001, 0x24845214, 0x3c050008, +0xafa00010, 0xafa00014, 0x8f860220, 0x34a50499, +0x24020001, 0x3c010001, 0xac225488, 0xc002407, +0x3821, 0x8ee204d0, 0x3c030001, 0x771821, +0x946383b2, 0x34420001, 0x10600007, 0xaee204d0, +0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, +0x34420008, 0xaf820220, 0x2021, 0xc0050af, +0x24050004, 0xaf420268, 0x8fbf0018, 0x3e00008, +0x27bd0020, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x3c120001, +0x26521200, 0x3c140001, 0x8e945400, 0x3c100001, +0x26101120, 0x3c15c000, 0x36b50060, 0x8e8a0000, +0x8eb30000, 0x26a400b, 0x248000a, 0x200f821, +0x0, 0xd, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x80014d6, +0x0, 0x80014d8, 0x3c0a0001, 0x80014d8, +0x3c0a0002, 0x80014d8, 0x0, 0x80024aa, +0x0, 0x80014d8, 0x3c0a0003, 0x80014d8, +0x3c0a0004, 0x8002f90, 0x0, 0x80014d8, +0x3c0a0005, 0x8003cec, 0x0, 0x8003c6a, +0x0, 0x80014d8, 0x3c0a0006, 0x80014d8, +0x3c0a0007, 0x80014d8, 0x0, 0x80014d8, +0x0, 0x80014d8, 0x0, 0x8002a79, +0x0, 0x80014d8, 0x3c0a000b, 0x80014d8, +0x3c0a000c, 0x80014d8, 0x3c0a000d, 0x800237c, +0x0, 0x8002339, 0x0, 0x80014d8, +0x3c0a000e, 0x8001b3c, 0x0, 0x80024a8, +0x0, 0x80014d8, 0x3c0a000f, 0x80040ab, +0x0, 0x8004095, 0x0, 0x80014d8, +0x3c0a0010, 0x80014ee, 0x0, 0x80014d8, +0x3c0a0011, 0x80014d8, 0x3c0a0012, 0x80014d8, +0x3c0a0013, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x3c030001, +0x34633800, 0x24050080, 0x2404001f, 0x2406ffff, +0x24020001, 0xaf80021c, 0xaf820200, 0xaf820220, +0x3631021, 0xaf8200c0, 0x3631021, 0xaf8200c4, +0x3631021, 0xaf8200c8, 0x27623800, 0xaf8200d0, +0x27623800, 0xaf8200d4, 0x27623800, 0xaf8200d8, +0x27621800, 0xaf8200e0, 0x27621800, 0xaf8200e4, +0x27621800, 0xaf8200e8, 0x27621000, 0xaf8200f0, +0x27621000, 0xaf8200f4, 0x27621000, 0xaf8200f8, +0xaca00000, 0x2484ffff, 0x1486fffd, 0x24a50004, +0x8f830040, 0x3c02f000, 0x621824, 0x3c025000, +0x1062000c, 0x43102b, 0x14400006, 0x3c026000, +0x3c024000, 0x10620008, 0x24020800, 0x8004539, +0x0, 0x10620004, 0x24020800, 0x8004539, +0x0, 0x24020700, 0x3c010001, 0xac22548c, +0x3e00008, 0x0, 0x27bdffd0, 0xafbf0028, +0x3c010001, 0xc004ccd, 0xac205474, 0x24040001, +0x2821, 0x27a60020, 0x34028000, 0xc0048ea, +0xa7a20020, 0x8f830054, 0x8f820054, 0x800454b, +0x24630064, 0x8f820054, 0x621023, 0x2c420065, +0x1440fffc, 0x24040001, 0x24050001, 0xc0048a8, +0x27a60020, 0x8f830054, 0x8f820054, 0x8004557, +0x24630064, 0x8f820054, 0x621023, 0x2c420065, +0x1440fffc, 0x24040001, 0x24050001, 0xc0048a8, +0x27a60020, 0x8f830054, 0x8f820054, 0x8004563, +0x24630064, 0x8f820054, 0x621023, 0x2c420065, +0x1440fffc, 0x24040001, 0x24050002, 0xc0048a8, +0x27a60018, 0x8f830054, 0x8f820054, 0x800456f, +0x24630064, 0x8f820054, 0x621023, 0x2c420065, +0x1440fffc, 0x24040001, 0x24050003, 0xc0048a8, +0x27a6001a, 0x97a20020, 0x10400027, 0x24030001, +0x3c020001, 0x8c425474, 0x97a30018, 0x34420001, +0x3c010001, 0xac225474, 0x24020015, 0x1462000d, +0x0, 0x97a2001a, 0x3843f423, 0x2c630001, +0x3842f430, 0x2c420001, 0x621825, 0x10600005, +0x24020003, 0x3c010001, 0xac225540, 0x80045a7, +0x3c08fff0, 0x97a30018, 0x24027810, 0x1462000a, +0x24020002, 0x97a3001a, 0x24020001, 0x14620006, +0x24020002, 0x24020004, 0x3c010001, 0xac225540, +0x80045a7, 0x3c08fff0, 0x3c010001, 0xac225540, +0x80045a7, 0x3c08fff0, 0x3c020001, 0x8c425474, +0x3c010001, 0xac235540, 0x34420004, 0x3c010001, +0xac225474, 0x3c08fff0, 0x3508bdc0, 0x8f830054, +0x97a60018, 0x3c070001, 0x8ce75540, 0x3c040001, +0x24845280, 0x24020001, 0x3c010001, 0xac22547c, +0xafa60010, 0x3c060001, 0x8cc65474, 0x97a2001a, +0x3c05000d, 0x34a50100, 0x3c010001, 0xac205478, +0x681821, 0x3c010001, 0xac235538, 0xc002407, +0xafa20014, 0x8fbf0028, 0x3e00008, 0x27bd0030, +0x27bdffe8, 0x24070004, 0x3c040001, 0x8c845478, +0x3021, 0x24020001, 0x1482000a, 0xafbf0010, +0x3c020001, 0x8c4275bc, 0x3c050004, 0x30428000, +0x1040000c, 0x34a593e0, 0x3c05000f, 0x80045da, +0x34a54240, 0x3c020001, 0x8c4275bc, 0x3c05000f, +0x30428000, 0x10400003, 0x34a54240, 0x3c05001e, +0x34a58480, 0x3c020001, 0x8c425538, 0x8f830054, +0x451021, 0x431023, 0x45102b, 0x1440002e, +0x0, 0x3c020001, 0x8c425480, 0x1440002a, +0x2cc20001, 0x7182b, 0x431024, 0x1040001d, +0x0, 0x3c090001, 0x8d295474, 0x240b0001, +0x3c054000, 0x3c080001, 0x250875bc, 0x250afffc, +0x42042, 0x14800002, 0x24e7ffff, 0x24040008, +0x891024, 0x5040000b, 0x2cc20001, 0x148b0004, +0x0, 0x8d020000, 0x80045ff, 0x451024, +0x8d420000, 0x451024, 0x54400001, 0x24060001, +0x2cc20001, 0x7182b, 0x431024, 0x5440ffed, +0x42042, 0x3c010001, 0x10c00024, 0xac245478, +0x8f830054, 0x24020001, 0x3c010001, 0xac22547c, +0x3c010001, 0xac235538, 0x3c020001, 0x8c42547c, +0x10400006, 0x24020001, 0x3c010001, 0xac20547c, +0x3c010001, 0x370821, 0xac2283ac, 0x3c030001, +0x771821, 0x8c6383ac, 0x24020008, 0x10620005, +0x24020001, 0xc00462f, 0x0, 0x800462c, +0x0, 0x3c030001, 0x8c635478, 0x10620007, +0x2402000e, 0x3c030001, 0x8c637550, 0x10620003, +0x0, 0xc004cf0, 0x8f840220, 0x8fbf0010, +0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c02fdff, +0xafbf0018, 0x8ee30000, 0x3c050001, 0x8ca55478, +0x3c040001, 0x8c845498, 0x3442ffff, 0x621824, +0x14a40008, 0xaee30000, 0x3c030001, 0x771821, +0x8c6383ac, 0x3c020001, 0x8c42549c, 0x10620008, +0x0, 0x3c020001, 0x571021, 0x8c4283ac, +0x3c010001, 0xac255498, 0x3c010001, 0xac22549c, +0x3c030001, 0x8c635478, 0x24020002, 0x10620131, +0x2c620003, 0x10400005, 0x24020001, 0x10620008, +0x0, 0x800477e, 0x0, 0x24020004, +0x10620079, 0x24020001, 0x800477f, 0x0, +0x3c020001, 0x571021, 0x8c4283ac, 0x2443ffff, +0x2c620008, 0x10400122, 0x31080, 0x3c010001, +0x220821, 0x8c225298, 0x400008, 0x0, +0xc004784, 0x0, 0x3c020001, 0x8c425484, +0x3c010001, 0xac205410, 0x104000bd, 0x24020002, +0x3c010001, 0x370821, 0xac2283ac, 0x3c010001, +0x8004781, 0xac205484, 0xc00492b, 0x0, +0x3c030001, 0x8c6354a0, 0x80046f0, 0x24020011, +0x3c050001, 0x8ca55478, 0x3c060001, 0x8cc675bc, +0xc004fa4, 0x2021, 0x24020005, 0x3c010001, +0xac205484, 0x3c010001, 0x370821, 0x8004781, +0xac2283ac, 0x3c040001, 0x2484528c, 0x3c05000f, +0x34a50100, 0x3021, 0x3821, 0xafa00010, +0xc002407, 0xafa00014, 0x8004781, 0x0, +0x8f820220, 0x3c03f700, 0x431025, 0x8004719, +0xaf820220, 0x8f820220, 0x3c030004, 0x431024, +0x14400090, 0x24020007, 0x8f830054, 0x3c020001, +0x8c425530, 0x2463d8f0, 0x431023, 0x2c422710, +0x144000df, 0x24020001, 0x800477f, 0x0, +0x3c050001, 0x8ca55478, 0xc0050af, 0x2021, +0xc00517a, 0x2021, 0x3c030001, 0x8c6375b4, +0x46100d1, 0x24020001, 0x3c020008, 0x621024, +0x10400006, 0x0, 0x8f820214, 0x3c03ffff, +0x431024, 0x80046bc, 0x3442251f, 0x8f820214, +0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214, +0x8ee20000, 0x3c030200, 0x431025, 0xaee20000, +0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, +0x8f820220, 0x34420002, 0xaf820220, 0x24020008, +0x3c010001, 0x370821, 0xc0043e1, 0xac2283ac, +0x8004781, 0x0, 0x3c020001, 0x571021, +0x8c4283ac, 0x2443ffff, 0x2c620008, 0x104000ac, +0x31080, 0x3c010001, 0x220821, 0x8c2252b8, +0x400008, 0x0, 0xc00429f, 0x0, +0x3c010001, 0xac20547c, 0xaf800204, 0x3c010001, +0xc004784, 0xac2075a0, 0x24020001, 0x3c010001, +0xac225490, 0x24020002, 0x3c010001, 0x370821, +0x8004781, 0xac2283ac, 0xc004801, 0x0, +0x3c030001, 0x8c635490, 0x24020009, 0x14620090, +0x24020003, 0x3c010001, 0x370821, 0x8004781, +0xac2283ac, 0x3c020001, 0x8c4275b8, 0x30424000, +0x10400005, 0x0, 0x8f820044, 0x3c03ffff, +0x8004701, 0x34637fff, 0x8f820044, 0x2403ff7f, +0x431024, 0xaf820044, 0x8f830054, 0x800471b, +0x24020004, 0x8f830054, 0x3c020001, 0x8c425530, +0x2463d8f0, 0x431023, 0x2c422710, 0x14400074, +0x24020005, 0x3c010001, 0x370821, 0x8004781, +0xac2283ac, 0x8f820220, 0x3c03f700, 0x431025, +0xaf820220, 0xaf800204, 0x3c010001, 0xac2075a0, +0x8f830054, 0x24020006, 0x3c010001, 0x370821, +0xac2283ac, 0x3c010001, 0x8004781, 0xac235530, +0x8f830054, 0x3c020001, 0x8c425530, 0x2463fff6, +0x431023, 0x2c42000a, 0x14400059, 0x0, +0x24020007, 0x3c010001, 0x370821, 0x8004781, +0xac2283ac, 0x8f820220, 0x3c04f700, 0x441025, +0xaf820220, 0x8f820220, 0x3c030300, 0x431024, +0x14400005, 0x1821, 0x8f820220, 0x24030001, +0x441025, 0xaf820220, 0x10600043, 0x24020001, +0x8f820214, 0x3c03ffff, 0x3c040001, 0x8c845528, +0x431024, 0x3442251f, 0xaf820214, 0x24020008, +0x3c010001, 0x370821, 0x1080000b, 0xac2283ac, +0x3c020001, 0x8c425504, 0x14400007, 0x24020001, +0x3c010001, 0xac227550, 0xc004cf0, 0x8f840220, +0x800476e, 0x0, 0x8f820220, 0x3c030008, +0x431024, 0x14400017, 0x2402000e, 0x3c010001, +0xac227550, 0x8ee20000, 0x2021, 0x3c030200, +0x431025, 0xc00517a, 0xaee20000, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x34420002, 0xc0043e1, 0xaf820220, 0x3c050001, +0x8ca55478, 0xc0050af, 0x2021, 0x8004781, +0x0, 0x3c020001, 0x8c425504, 0x10400010, +0x0, 0x3c020001, 0x8c425500, 0x2442ffff, +0x3c010001, 0xac225500, 0x14400009, 0x24020002, +0x3c010001, 0xac205504, 0x3c010001, 0x8004781, +0xac225500, 0x24020001, 0x3c010001, 0xac22547c, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8f820200, +0x8f820220, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820200, 0x3c060001, 0x8cc65478, 0x34420004, +0xaf820200, 0x24020002, 0x10c2003a, 0x2cc20003, +0x10400005, 0x24020001, 0x10c20008, 0x0, +0x80047ca, 0x0, 0x24020004, 0x10c20013, +0x24020001, 0x80047ca, 0x0, 0x3c030001, +0x8c635468, 0x3c020001, 0x8c425470, 0x3c040001, +0x8c84548c, 0x3c050001, 0x8ca5546c, 0xaf860200, +0xaf860220, 0x34630022, 0x441025, 0x451025, +0x34420002, 0x80047c9, 0xaf830200, 0x3c030001, +0x8c635528, 0xaf820200, 0x10600009, 0xaf820220, +0x3c020001, 0x8c425504, 0x14400005, 0x3c033f00, +0x3c020001, 0x8c425460, 0x80047bd, 0x346300e0, +0x3c020001, 0x8c425460, 0x3c033f00, 0x346300e2, +0x431025, 0xaf820200, 0x3c030001, 0x8c635464, +0x3c04f700, 0x3c020001, 0x8c425470, 0x3c050001, +0x8ca5548c, 0x641825, 0x431025, 0x451025, +0xaf820220, 0x3e00008, 0x0, 0x8f820220, +0x3c030001, 0x8c635478, 0x34420004, 0xaf820220, +0x24020001, 0x1062000f, 0x0, 0x8f830054, +0x8f820054, 0x24630002, 0x621023, 0x2c420003, +0x10400011, 0x0, 0x8f820054, 0x621023, +0x2c420003, 0x1040000c, 0x0, 0x80047db, +0x0, 0x8f830054, 0x8f820054, 0x80047e7, +0x24630007, 0x8f820054, 0x621023, 0x2c420008, +0x1440fffc, 0x0, 0x8f8400e0, 0x30820007, +0x1040000d, 0x0, 0x8f820054, 0x8f8300e0, +0x14830009, 0x24450032, 0x8f820054, 0xa21023, +0x2c420033, 0x10400004, 0x0, 0x8f8200e0, +0x1082fff9, 0x0, 0x8f820220, 0x2403fffd, +0x431024, 0xaf820220, 0x3e00008, 0x0, +0x3c030001, 0x8c635490, 0x3c020001, 0x8c425494, +0x50620004, 0x2463ffff, 0x3c010001, 0xac235494, +0x2463ffff, 0x2c620009, 0x10400099, 0x31080, +0x3c010001, 0x220821, 0x8c2252d8, 0x400008, +0x0, 0x8f820044, 0x34428080, 0xaf820044, +0x8f830054, 0x8004896, 0x24020002, 0x8f830054, +0x3c020001, 0x8c425534, 0x2463d8f0, 0x431023, +0x2c422710, 0x14400086, 0x24020003, 0x80048a3, +0x0, 0x8f820044, 0x3c03ffff, 0x34637fff, +0x431024, 0xaf820044, 0x8f830054, 0x8004896, +0x24020004, 0x8f830054, 0x3c020001, 0x8c425534, +0x2463fff6, 0x431023, 0x2c42000a, 0x14400074, +0x24020005, 0x80048a3, 0x0, 0x8f820220, +0x3c03f700, 0x431025, 0xaf820220, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x34420002, 0xaf820220, 0x3c023f00, 0x344200e0, +0xaf820200, 0x8f820200, 0x2403fffd, 0x431024, +0xaf820200, 0x24040001, 0x3405ffff, 0xaf840204, +0x8f830054, 0x8f820054, 0x800484e, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820224, 0x42040, 0xa4102b, +0x1040fff2, 0x0, 0x8f820220, 0x3c03f700, +0x431025, 0xaf820220, 0x8f820214, 0x3c03ffff, +0x431024, 0x3442251f, 0xaf820214, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x3c04f700, 0x34840008, 0x34420002, 0xaf820220, +0x8f820220, 0x3c033f00, 0x346300e2, 0x441025, +0xaf820220, 0xaf830200, 0x8f8400f0, 0x276217f8, +0x14820002, 0x24850008, 0x27651000, 0x8f8200f4, +0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, +0x24425420, 0xac820000, 0xac830004, 0xaf8500f0, +0x8f830054, 0x8004896, 0x24020006, 0x8f830054, +0x3c020001, 0x8c425534, 0x2463fff6, 0x431023, +0x2c42000a, 0x1440001e, 0x24020007, 0x80048a3, +0x0, 0x8f8200e0, 0xaf8200e4, 0x8f8200e0, +0xaf8200e8, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820044, 0x34428080, 0xaf820044, 0x8f830054, +0x24020008, 0x3c010001, 0xac225490, 0x3c010001, +0x80048a5, 0xac235534, 0x8f830054, 0x3c020001, +0x8c425534, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400003, 0x24020009, 0x3c010001, 0xac225490, +0x3e00008, 0x0, 0x0, 0x27bdffd8, +0xafb20018, 0x809021, 0xafb3001c, 0xa09821, +0xafb10014, 0xc08821, 0xafb00010, 0x8021, +0xafbf0020, 0xa6200000, 0xc004ca7, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004ca7, 0x2021, 0xc004ca7, 0x24040001, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x24100010, 0x2501024, 0x10400002, 0x2021, +0x24040001, 0xc004ca7, 0x108042, 0x1600fffa, +0x2501024, 0x24100010, 0x2701024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fffa, 0x2701024, 0xc004ccd, 0x34108000, +0xc004ccd, 0x0, 0xc004c87, 0x0, +0x50400005, 0x108042, 0x96220000, 0x501025, +0xa6220000, 0x108042, 0x1600fff7, 0x0, +0xc004ccd, 0x0, 0x8fbf0020, 0x8fb3001c, +0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, +0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821, +0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, +0xafb00010, 0x8021, 0xafbf0020, 0xc004ca7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0x24100010, 0x2301024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fffa, 0x2301024, 0x24100010, 0x2501024, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x2501024, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0x34108000, +0x96620000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc004ca7, 0x108042, 0x1600fff8, +0x0, 0xc004ccd, 0x0, 0x8fbf0020, +0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, +0x3e00008, 0x27bd0028, 0x3c030001, 0x8c6354a0, +0x3c020001, 0x8c4254e4, 0x27bdffd8, 0xafbf0020, +0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001, +0xac2354e4, 0x2463ffff, 0x2c620013, 0x10400349, +0x31080, 0x3c010001, 0x220821, 0x8c225300, +0x400008, 0x0, 0xc004ccd, 0x8021, +0x34028000, 0xa7a20010, 0x27b10010, 0xc004ca7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0xc004ca7, +0x2021, 0x108042, 0x1600fffc, 0x0, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8004c80, 0x24020002, 0x27b10010, 0xa7a00010, +0x8021, 0xc004ca7, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004ca7, +0x2021, 0xc004ca7, 0x24040001, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0xc004ca7, 0x2021, 0x108042, +0x1600fffc, 0x0, 0xc004ccd, 0x34108000, +0xc004ccd, 0x0, 0xc004c87, 0x0, +0x50400005, 0x108042, 0x96220000, 0x501025, +0xa6220000, 0x108042, 0x1600fff7, 0x0, +0xc004ccd, 0x0, 0x97a20010, 0x30428000, +0x144002dc, 0x24020003, 0x8004c80, 0x0, +0x24021200, 0xa7a20010, 0x27b10010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0xc004ca7, 0x2021, 0x108042, 0x1600fffc, +0x0, 0xc004ca7, 0x24040001, 0xc004ca7, +0x2021, 0x34108000, 0x96220000, 0x501024, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fff8, 0x0, 0xc004ccd, +0x0, 0x8f830054, 0x8004c72, 0x24020004, +0x8f830054, 0x3c020001, 0x8c42553c, 0x2463ff9c, +0x431023, 0x2c420064, 0x1440029e, 0x24020002, +0x3c030001, 0x8c635540, 0x10620297, 0x2c620003, +0x14400296, 0x24020011, 0x24020003, 0x10620005, +0x24020004, 0x10620291, 0x2402000f, 0x8004c80, +0x24020011, 0x8004c80, 0x24020005, 0x24020014, +0xa7a20010, 0x27b10010, 0x8021, 0xc004ca7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020012, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020012, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0x34108000, +0x96220000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc004ca7, 0x108042, 0x1600fff8, +0x0, 0xc004ccd, 0x0, 0x8f830054, +0x8004c72, 0x24020006, 0x8f830054, 0x3c020001, +0x8c42553c, 0x2463ff9c, 0x431023, 0x2c420064, +0x14400250, 0x24020007, 0x8004c80, 0x0, +0x24020006, 0xa7a20010, 0x27b10010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020013, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020013, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8f830054, 0x8004c72, 0x24020008, 0x8f830054, +0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440020f, 0x24020009, 0x8004c80, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001, +0xc004ca7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020018, +0xc004ccd, 0x34108000, 0xc004ccd, 0x0, +0xc004c87, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc004ccd, 0x8021, +0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020018, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8f830054, 0x8004c72, 0x2402000a, 0x8f830054, +0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440019b, 0x2402000b, 0x8004c80, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001, +0xc004ca7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020017, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020017, +0xc004ccd, 0x34108000, 0xc004ccd, 0x0, +0xc004c87, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc004ccd, 0x8021, +0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020017, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020017, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8f830054, 0x8004c72, 0x2402000c, 0x8f830054, +0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023, +0x2c420064, 0x14400127, 0x24020012, 0x8004c80, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001, +0xc004ca7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020014, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020014, +0xc004ccd, 0x34108000, 0xc004ccd, 0x0, +0xc004c87, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc004ccd, 0x8021, +0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020014, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020014, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8f830054, 0x8004c72, 0x24020013, 0x8f830054, +0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023, +0x2c420064, 0x144000b3, 0x2402000d, 0x8004c80, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001, +0xc004ca7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020018, +0xc004ccd, 0x34108000, 0xc004ccd, 0x0, +0xc004c87, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc004ccd, 0x8021, +0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, +0xc004ca7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0xc004ca7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc004ca7, 0x108042, 0x1600fffa, 0x32020018, +0xc004ca7, 0x24040001, 0xc004ca7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fff8, 0x0, 0xc004ccd, 0x0, +0x8f830054, 0x8004c72, 0x2402000e, 0x24020840, +0xa7a20010, 0x27b10010, 0x8021, 0xc004ca7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0xc004ca7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004ca7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020013, +0x10400002, 0x2021, 0x24040001, 0xc004ca7, +0x108042, 0x1600fffa, 0x32020013, 0xc004ca7, +0x24040001, 0xc004ca7, 0x2021, 0x34108000, +0x96220000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc004ca7, 0x108042, 0x1600fff8, +0x0, 0xc004ccd, 0x0, 0x8f830054, +0x24020010, 0x3c010001, 0xac2254a0, 0x3c010001, +0x8004c82, 0xac23553c, 0x8f830054, 0x3c020001, +0x8c42553c, 0x2463ff9c, 0x431023, 0x2c420064, +0x14400004, 0x0, 0x24020011, 0x3c010001, +0xac2254a0, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044, +0x3c030001, 0x431025, 0x3c030008, 0xaf820044, +0x8f840054, 0x8f820054, 0xa32824, 0x8004c93, +0x24840001, 0x8f820054, 0x821023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, +0x8f820054, 0x8004ca1, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0, +0x3442ffff, 0x42480, 0x621824, 0x3c020002, +0x822025, 0x641825, 0xaf830044, 0x8f820044, +0x3c030001, 0x431025, 0xaf820044, 0x8f830054, +0x8f820054, 0x8004cb9, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, +0xaf820044, 0x8f830054, 0x8f820054, 0x8004cc7, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x3e00008, 0x0, +0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024, +0xaf820044, 0x8f820044, 0x3c030001, 0x431025, +0xaf820044, 0x8f830054, 0x8f820054, 0x8004cdb, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, +0x8f820054, 0x8004ce9, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x3e00008, 0x0, 0x0, 0x27bdffe8, +0xafbf0010, 0x3c030001, 0x771821, 0x8c6383ac, +0x24020008, 0x1462022c, 0x803021, 0x3c020001, +0x8c425528, 0x14400033, 0x0, 0x8f850224, +0x38a30020, 0x2c630001, 0x38a20010, 0x2c420001, +0x621825, 0x1460000d, 0x38a30030, 0x2c630001, +0x38a20400, 0x2c420001, 0x621825, 0x14600007, +0x38a30402, 0x2c630001, 0x38a20404, 0x2c420001, +0x621825, 0x10600005, 0x0, 0xc00429f, +0x0, 0x8004d29, 0x2402000e, 0xc0043e1, +0x0, 0x3c050001, 0x8ca55478, 0xc0050af, +0x2021, 0x3c030001, 0x8c635478, 0x24020004, +0x14620005, 0x2403fffb, 0x3c020001, 0x8c425474, +0x8004d25, 0x2403fff7, 0x3c020001, 0x8c425474, +0x431024, 0x3c010001, 0xac225474, 0x2402000e, +0x3c010001, 0xc00429f, 0xac227550, 0x8004f23, +0x0, 0x8f820220, 0x3c030400, 0x431024, +0x10400027, 0x2403ffbf, 0x8f850224, 0x3c020001, +0x8c42755c, 0xa32024, 0x431024, 0x1482000c, +0x0, 0x3c020001, 0x8c427560, 0x24420001, +0x3c010001, 0xac227560, 0x2c420002, 0x14400008, +0x24020001, 0x3c010001, 0x8004d49, 0xac227580, +0x3c010001, 0xac207560, 0x3c010001, 0xac207580, +0x3c020001, 0x8c427580, 0x10400006, 0x30a20040, +0x10400004, 0x24020001, 0x3c010001, 0x8004d54, +0xac227584, 0x3c010001, 0xac207584, 0x3c010001, +0xac25755c, 0x3c010001, 0x8004d64, 0xac207590, +0x24020001, 0x3c010001, 0xac227590, 0x3c010001, +0xac207580, 0x3c010001, 0xac207560, 0x3c010001, +0xac207584, 0x3c010001, 0xac20755c, 0x3c030001, +0x8c637550, 0x3c020001, 0x8c427554, 0x10620003, +0x3c020200, 0x3c010001, 0xac237554, 0xc21024, +0x10400007, 0x2463ffff, 0x8f820220, 0x24030001, +0x3c010001, 0xac23547c, 0x8004f21, 0x3c03f700, +0x2c62000e, 0x104001a8, 0x31080, 0x3c010001, +0x220821, 0x8c225350, 0x400008, 0x0, +0x3c010001, 0xac207580, 0x3c010001, 0xac207560, +0x3c010001, 0xac20755c, 0x3c010001, 0xac207584, +0x3c010001, 0xac207578, 0x3c010001, 0xac207570, +0xc0047cc, 0xaf800224, 0x24020002, 0x3c010001, +0xac227550, 0x3c020001, 0x8c427590, 0x14400056, +0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024, +0xc00429f, 0xaee20000, 0xaf800204, 0x8f820200, +0x2403fffd, 0x431024, 0xaf820200, 0x3c010001, +0xac2075a0, 0x8f830054, 0x3c020001, 0x8c427578, +0x24040001, 0x3c010001, 0xac24758c, 0x24420001, +0x3c010001, 0xac227578, 0x2c420004, 0x3c010001, +0xac237574, 0x14400006, 0x24020003, 0x3c010001, +0xac24547c, 0x3c010001, 0x8004f1f, 0xac207578, +0x3c010001, 0x8004f1f, 0xac227550, 0x8f830054, +0x3c020001, 0x8c427574, 0x2463d8f0, 0x431023, +0x2c422710, 0x14400003, 0x24020004, 0x3c010001, +0xac227550, 0x3c020001, 0x8c427590, 0x14400026, +0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024, +0x8004f1f, 0xaee20000, 0x3c040001, 0x8c84552c, +0x3c010001, 0xc004f26, 0xac207568, 0x3c020001, +0x8c42759c, 0xaf820204, 0x3c020001, 0x8c427590, +0x14400015, 0x3c03fdff, 0x8ee20000, 0x3463ffff, +0x431024, 0xaee20000, 0x8f820204, 0x30420030, +0x1440013c, 0x24020002, 0x3c030001, 0x8c63759c, +0x24020005, 0x3c010001, 0xac227550, 0x3c010001, +0x8004f1f, 0xac2375a0, 0x3c020001, 0x8c427590, +0x10400010, 0x3c03fdff, 0x3c020001, 0x8c4254fc, +0x24420001, 0x3c010001, 0xac2254fc, 0x2c420002, +0x14400131, 0x24020001, 0x3c010001, 0xac225504, +0x3c010001, 0xac2054fc, 0x3c010001, 0x8004f1f, +0xac22547c, 0x8ee20000, 0x3463ffff, 0x431024, +0xaee20000, 0x3c020001, 0x8c427580, 0x10400122, +0x0, 0x3c020001, 0x8c42755c, 0x1040011e, +0x0, 0x3c010001, 0xac227588, 0x24020003, +0x3c010001, 0xac227560, 0x8004ec0, 0x24020006, +0x3c010001, 0xac207568, 0x8f820204, 0x34420040, +0xaf820204, 0x3c020001, 0x8c4275a0, 0x24030007, +0x3c010001, 0xac237550, 0x34420040, 0x3c010001, +0xac2275a0, 0x3c020001, 0x8c427580, 0x10400005, +0x0, 0x3c020001, 0x8c42755c, 0x104000f9, +0x24020002, 0x3c050001, 0x24a57560, 0x8ca20000, +0x2c424e21, 0x104000f3, 0x24020002, 0x3c020001, +0x8c427584, 0x104000f8, 0x2404ffbf, 0x3c020001, +0x8c42755c, 0x3c030001, 0x8c637588, 0x441024, +0x641824, 0x10430004, 0x24020001, 0x3c010001, +0x8004f1f, 0xac227550, 0x24020003, 0xaca20000, +0x24020008, 0x3c010001, 0xac227550, 0x3c020001, +0x8c42758c, 0x1040000c, 0x24020001, 0x3c040001, +0xc004f33, 0x8c84755c, 0x3c020001, 0x8c4275a8, +0x14400005, 0x24020001, 0x3c020001, 0x8c4275a4, +0x10400006, 0x24020001, 0x3c010001, 0xac22547c, +0x3c010001, 0x8004f1f, 0xac207578, 0x3c020001, +0x8c427570, 0x3c030001, 0x8c63755c, 0x2c420001, +0x210c0, 0x30630008, 0x3c010001, 0xac227570, +0x3c010001, 0xac23756c, 0x8f830054, 0x24020009, +0x3c010001, 0xac227550, 0x3c010001, 0x8004f1f, +0xac237574, 0x8f830054, 0x3c020001, 0x8c427574, +0x2463d8f0, 0x431023, 0x2c422710, 0x144000a8, +0x0, 0x3c020001, 0x8c427580, 0x10400005, +0x0, 0x3c020001, 0x8c42755c, 0x104000a9, +0x24020002, 0x3c030001, 0x24637560, 0x8c620000, +0x2c424e21, 0x104000a3, 0x24020002, 0x3c020001, +0x8c42758c, 0x1040000e, 0x0, 0x3c020001, +0x8c42755c, 0x3c010001, 0xac20758c, 0x30420080, +0x1040002f, 0x2402000c, 0x8f820204, 0x30420080, +0x1440000c, 0x24020003, 0x8004ead, 0x2402000c, +0x3c020001, 0x8c42755c, 0x30420080, 0x14400005, +0x24020003, 0x8f820204, 0x30420080, 0x1040001f, +0x24020003, 0xac620000, 0x2402000a, 0x3c010001, +0xac227550, 0x3c040001, 0x24847598, 0x8c820000, +0x3c030001, 0x8c637570, 0x431025, 0xaf820204, +0x8c830000, 0x3c040001, 0x8c847570, 0x2402000b, +0x3c010001, 0xac227550, 0x641825, 0x3c010001, +0xac2375a0, 0x3c050001, 0x24a57560, 0x8ca20000, +0x2c424e21, 0x1040006f, 0x24020002, 0x3c020001, +0x8c427590, 0x10400005, 0x0, 0x2402000c, +0x3c010001, 0x8004f1f, 0xac227550, 0x3c020001, +0x8c427580, 0x1040006c, 0x0, 0x3c040001, +0x8c84755c, 0x1080005e, 0x30820008, 0x3c030001, +0x8c63756c, 0x10620064, 0x24020003, 0x3c010001, +0xac247588, 0xaca20000, 0x24020006, 0x3c010001, +0x8004f1f, 0xac227550, 0x8f820200, 0x34420002, +0xaf820200, 0x8f830054, 0x2402000d, 0x3c010001, +0xac227550, 0x3c010001, 0xac237574, 0x8f830054, +0x3c020001, 0x8c427574, 0x2463d8f0, 0x431023, +0x2c422710, 0x1440003a, 0x0, 0x3c020001, +0x8c427590, 0x10400029, 0x2402000e, 0x3c030001, +0x8c6375a4, 0x3c010001, 0x14600015, 0xac227550, +0xc0043e1, 0x0, 0x3c050001, 0x8ca55478, +0xc0050af, 0x2021, 0x3c030001, 0x8c635478, +0x24020004, 0x14620005, 0x2403fffb, 0x3c020001, +0x8c425474, 0x8004eee, 0x2403fff7, 0x3c020001, +0x8c425474, 0x431024, 0x3c010001, 0xac225474, +0x8ee20000, 0x3c030200, 0x431025, 0xaee20000, +0x8f820224, 0x3c010001, 0xac2275ac, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x34420002, 0x8004f1f, 0xaf820220, 0x3c020001, +0x8c427580, 0x10400005, 0x0, 0x3c020001, +0x8c42755c, 0x1040000f, 0x24020002, 0x3c020001, +0x8c427560, 0x2c424e21, 0x1040000a, 0x24020002, +0x3c020001, 0x8c427580, 0x1040000f, 0x0, +0x3c020001, 0x8c42755c, 0x1440000b, 0x0, +0x24020002, 0x3c010001, 0x8004f1f, 0xac227550, +0x3c020001, 0x8c427580, 0x10400003, 0x0, +0xc00429f, 0x0, 0x8f820220, 0x3c03f700, +0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, +0x27bd0018, 0x3c030001, 0x246375a8, 0x8c620000, +0x10400005, 0x34422000, 0x3c010001, 0xac22759c, +0x8004f31, 0xac600000, 0x3c010001, 0xac24759c, +0x3e00008, 0x0, 0x27bdffe0, 0x30820030, +0xafbf0018, 0x3c010001, 0xac2275a4, 0x14400067, +0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, +0x24020030, 0x30822000, 0x1040005d, 0x30838000, +0x31a02, 0x30820001, 0x21200, 0x3c040001, +0x8c84552c, 0x621825, 0x331c2, 0x3c030001, +0x24635508, 0x30828000, 0x21202, 0x30840001, +0x42200, 0x441025, 0x239c2, 0x61080, +0x431021, 0x471021, 0x90430000, 0x24020001, +0x10620025, 0x0, 0x10600007, 0x24020002, +0x10620013, 0x24020003, 0x1062002c, 0x3c05000f, +0x8004f95, 0x0, 0x8f820200, 0x2403feff, +0x431024, 0xaf820200, 0x8f820220, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820220, 0x3c010001, +0xac2075c4, 0x3c010001, 0x8004fa0, 0xac2075cc, +0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, +0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220, +0x24020100, 0x3c010001, 0xac2275c4, 0x3c010001, +0x8004fa0, 0xac2075cc, 0x8f820200, 0x2403feff, +0x431024, 0xaf820200, 0x8f820220, 0x3c030001, +0x431025, 0xaf820220, 0x3c010001, 0xac2075c4, +0x3c010001, 0x8004fa0, 0xac2375cc, 0x8f820200, +0x34420100, 0xaf820200, 0x8f820220, 0x3c030001, +0x431025, 0xaf820220, 0x24020100, 0x3c010001, +0xac2275c4, 0x3c010001, 0x8004fa0, 0xac2375cc, +0x34a5ffff, 0x3c040001, 0x24845388, 0xafa30010, +0xc002407, 0xafa00014, 0x8004fa0, 0x0, +0x24020030, 0x3c010001, 0xac2275a8, 0x8fbf0018, +0x3e00008, 0x27bd0020, 0x0, 0x27bdffc8, +0xafb10024, 0x808821, 0xafb3002c, 0xa09821, +0xafb00020, 0xc08021, 0x3c040001, 0x248453a0, +0x3c050009, 0x3c020001, 0x8c425478, 0x34a59001, +0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, +0xa7a0001a, 0xafb00014, 0xc002407, 0xafa20010, +0x24020002, 0x126200ed, 0x2e620003, 0x10400005, +0x24020001, 0x1262000a, 0x3c02fffb, 0x80050a8, +0x0, 0x24020004, 0x1262006d, 0x24020008, +0x1262006c, 0x3c02ffec, 0x80050a8, 0x0, +0x3442ffff, 0x2028024, 0x119140, 0x3c010001, +0x320821, 0xac3075bc, 0x3c024000, 0x2021024, +0x10400046, 0x1023c2, 0x30840030, 0x101382, +0x3042000c, 0x3c030001, 0x246354a4, 0x431021, +0x823821, 0x3c020020, 0x2021024, 0x10400006, +0x24020100, 0x3c010001, 0x320821, 0xac2275c0, +0x8004fe7, 0x3c020080, 0x3c010001, 0x320821, +0xac2075c0, 0x3c020080, 0x2021024, 0x10400006, +0x111940, 0x3c020001, 0x3c010001, 0x230821, +0x8004ff3, 0xac2275c8, 0x111140, 0x3c010001, +0x220821, 0xac2075c8, 0x94e30000, 0x32024000, +0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018, +0x24040001, 0x94e20002, 0x24050004, 0x24e60002, +0x34420001, 0xc0048ea, 0xa4e20002, 0x24040001, +0x2821, 0xc0048ea, 0x27a60018, 0x3c020001, +0x8c425478, 0x24110001, 0x3c010001, 0xac315484, +0x14530004, 0x32028000, 0xc00429f, 0x0, +0x32028000, 0x10400099, 0x0, 0xc00429f, +0x0, 0x24020002, 0x3c010001, 0xac31547c, +0x3c010001, 0x80050a8, 0xac225478, 0x24040001, +0x24050004, 0x27b0001a, 0xc0048ea, 0x2003021, +0x24040001, 0x2821, 0xc0048ea, 0x2003021, +0x3c020001, 0x521021, 0x8c4275b4, 0x3c040001, +0x8c845478, 0x3c03bfff, 0x3463ffff, 0x3c010001, +0xac335484, 0x431024, 0x3c010001, 0x320821, +0x10930078, 0xac2275b4, 0x80050a8, 0x0, +0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008, +0x2028025, 0x111140, 0x3c010001, 0x220821, +0xac3075b8, 0x3c022000, 0x2021024, 0x10400009, +0x0, 0x3c020001, 0x8c425504, 0x14400005, +0x24020001, 0x3c010001, 0xac225528, 0x8005049, +0x3c024000, 0x3c010001, 0xac205528, 0x3c024000, +0x2021024, 0x1440001c, 0x0, 0x3c020001, +0x8c425528, 0x10400007, 0x24022020, 0x3c010001, +0xac22552c, 0x24020001, 0x3c010001, 0x370821, +0xac2283ac, 0x3c04bfff, 0x111940, 0x3c020001, +0x431021, 0x8c4275b0, 0x3c050001, 0x8ca55478, +0x3484ffff, 0x441024, 0x3c010001, 0x230821, +0xac2275b0, 0x24020001, 0x10a20044, 0x0, +0x80050a6, 0x0, 0x3c020001, 0x8c425528, +0x1040001c, 0x24022000, 0x3c010001, 0xac22552c, +0x3c0300a0, 0x2031024, 0x14430005, 0x111140, +0x3402a000, 0x3c010001, 0x80050a1, 0xac22552c, +0x3c030001, 0x621821, 0x8c6375b8, 0x3c020020, +0x621024, 0x10400004, 0x24022001, 0x3c010001, +0x80050a1, 0xac22552c, 0x3c020080, 0x621024, +0x1040001f, 0x3402a001, 0x3c010001, 0x80050a1, +0xac22552c, 0x3c020020, 0x2021024, 0x10400007, +0x111940, 0x24020100, 0x3c010001, 0x230821, +0xac2275c4, 0x8005095, 0x3c020080, 0x111140, +0x3c010001, 0x220821, 0xac2075c4, 0x3c020080, +0x2021024, 0x10400006, 0x111940, 0x3c020001, +0x3c010001, 0x230821, 0x80050a1, 0xac2275cc, +0x111140, 0x3c010001, 0x220821, 0xac2075cc, +0x3c030001, 0x8c635478, 0x24020001, 0x10620003, +0x0, 0xc00429f, 0x0, 0x8fbf0030, +0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020, +0x3e00008, 0x27bd0038, 0x27bdffd0, 0xafb40028, +0x80a021, 0xafb20020, 0x9021, 0xafb30024, +0x9821, 0xafb1001c, 0x8821, 0x24020002, +0xafbf002c, 0xafb00018, 0xa7a00012, 0x10a20068, +0xa7a00010, 0x2ca20003, 0x10400005, 0x24020001, +0x10a2000a, 0x148140, 0x8005172, 0x2201021, +0x24020004, 0x10a2005e, 0x24020008, 0x10a2005d, +0x142940, 0x8005172, 0x2201021, 0x3c030001, +0x701821, 0x8c6375bc, 0x3c024000, 0x621024, +0x14400009, 0x24040001, 0x3c027fff, 0x3442ffff, +0x628824, 0x3c010001, 0x300821, 0xac3175b4, +0x8005172, 0x2201021, 0x24050001, 0xc0048a8, +0x27a60010, 0x24040001, 0x24050001, 0xc0048a8, +0x27a60010, 0x97a20010, 0x30420004, 0x10400034, +0x3c114000, 0x3c030001, 0x8c635540, 0x24020003, +0x10620008, 0x2c620004, 0x14400029, 0x3c028000, +0x24020004, 0x10620014, 0x24040001, 0x8005115, +0x3c028000, 0x24040001, 0x24050011, 0x27b00012, +0xc0048a8, 0x2003021, 0x24040001, 0x24050011, +0xc0048a8, 0x2003021, 0x97a30012, 0x30624000, +0x10400002, 0x3c130010, 0x3c130008, 0x3c120001, +0x8005112, 0x30628000, 0x24050014, 0x27b00012, +0xc0048a8, 0x2003021, 0x24040001, 0x24050014, +0xc0048a8, 0x2003021, 0x97a30012, 0x30621000, +0x10400002, 0x3c130010, 0x3c130008, 0x3c120001, +0x30620800, 0x54400001, 0x3c120002, 0x3c028000, +0x2221025, 0x2531825, 0x800511f, 0x438825, +0x3c110001, 0x2308821, 0x8e3175bc, 0x3c027fff, +0x3442ffff, 0x2228824, 0x141140, 0x3c010001, +0x220821, 0xac3175b4, 0x8005172, 0x2201021, +0x142940, 0x3c030001, 0x651821, 0x8c6375b8, +0x3c024000, 0x621024, 0x14400008, 0x3c027fff, +0x3442ffff, 0x628824, 0x3c010001, 0x250821, +0xac3175b0, 0x8005172, 0x2201021, 0x3c020001, +0x8c425488, 0x10400033, 0x3c11c00c, 0x3c020001, +0x8c425504, 0x3c04c00c, 0x34842000, 0x3c030001, +0x8c635528, 0x2102b, 0x21023, 0x441024, +0x10600003, 0x518825, 0x3c022000, 0x2228825, +0x3c020001, 0x451021, 0x8c4275c4, 0x10400003, +0x3c020020, 0x800514f, 0x2228825, 0x3c02ffdf, +0x3442ffff, 0x2228824, 0x141140, 0x3c010001, +0x220821, 0x8c2275cc, 0x10400003, 0x3c020080, +0x800515a, 0x2228825, 0x3c02ff7f, 0x3442ffff, +0x2228824, 0x3c020001, 0x8c4254f0, 0x10400002, +0x3c020800, 0x2228825, 0x3c020001, 0x8c4254f4, +0x10400002, 0x3c020400, 0x2228825, 0x3c020001, +0x8c4254f8, 0x10400006, 0x3c020100, 0x800516d, +0x2228825, 0x3c027fff, 0x3442ffff, 0x628824, +0x141140, 0x3c010001, 0x220821, 0xac3175b0, +0x2201021, 0x8fbf002c, 0x8fb40028, 0x8fb30024, +0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, +0x27bd0030, 0x27bdffd8, 0xafb40020, 0x80a021, +0xafbf0024, 0xafb3001c, 0xafb20018, 0xafb10014, +0xafb00010, 0x8f900200, 0x3c030001, 0x8c635478, +0x8f930220, 0x24020002, 0x106200b4, 0x2c620003, +0x10400005, 0x24020001, 0x1062000a, 0x141940, +0x800523c, 0x0, 0x24020004, 0x1062005a, +0x24020008, 0x10620059, 0x149140, 0x800523c, +0x0, 0x3c040001, 0x832021, 0x8c8475bc, +0x3c110001, 0x2238821, 0x8e3175b4, 0x3c024000, +0x821024, 0x1040003e, 0x3c020008, 0x2221024, +0x10400020, 0x36100002, 0x3c020001, 0x431021, +0x8c4275c0, 0x10400005, 0x36100020, 0x36100100, +0x3c020020, 0x80051b1, 0x2228825, 0x2402feff, +0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824, +0x141140, 0x3c010001, 0x220821, 0x8c2275c8, +0x10400005, 0x3c020001, 0x2629825, 0x3c020080, +0x80051d0, 0x2228825, 0x3c02fffe, 0x3442ffff, +0x2629824, 0x3c02ff7f, 0x3442ffff, 0x80051d0, +0x2228824, 0x2402fedf, 0x2028024, 0x3c02fffe, +0x3442ffff, 0x2629824, 0x3c02ff5f, 0x3442ffff, +0x2228824, 0x3c010001, 0x230821, 0xac2075c0, +0x3c010001, 0x230821, 0xac2075c8, 0xc0047cc, +0x0, 0xaf900200, 0xaf930220, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x34420002, 0xaf820220, 0x80051e7, 0x141140, +0x8f820200, 0x2403fffd, 0x431024, 0xc0047cc, +0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429f, +0x2228824, 0x141140, 0x3c010001, 0x220821, +0x800523c, 0xac3175b4, 0x149140, 0x3c040001, +0x922021, 0x8c8475b8, 0x3c110001, 0x2328821, +0x8e3175b0, 0x3c024000, 0x821024, 0x14400011, +0x0, 0x3c020001, 0x8c425528, 0x14400006, +0x3c02bfff, 0x8f820200, 0x34420002, 0xc0047cc, +0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429f, +0x2228824, 0x3c010001, 0x320821, 0x800523c, +0xac3175b0, 0x3c020001, 0x8c425528, 0x10400005, +0x3c020020, 0x3c020001, 0x8c425504, 0x1040002b, +0x3c020020, 0x821024, 0x10400007, 0x36100020, +0x24020100, 0x3c010001, 0x320821, 0xac2275c4, +0x800521c, 0x36100100, 0x3c010001, 0x320821, +0xac2075c4, 0x2402feff, 0x2028024, 0x3c020080, +0x821024, 0x10400007, 0x141940, 0x3c020001, +0x3c010001, 0x230821, 0xac2275cc, 0x800522d, +0x2629825, 0x141140, 0x3c010001, 0x220821, +0xac2075cc, 0x3c02fffe, 0x3442ffff, 0x2629824, +0xc0047cc, 0x0, 0xaf900200, 0xaf930220, +0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, +0x8f820220, 0x34420002, 0xaf820220, 0x141140, +0x3c010001, 0x220821, 0xac3175b0, 0x8fbf0024, +0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, +0x8fb00010, 0x3e00008, 0x27bd0028, 0x0 }; u32 tigonFwRodata[(MAX_RODATA_LEN/4) + 1] __initdata = { -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f66, 0x776d6169, -0x6e2e632c, 0x7620312e, 0x312e322e, 0x31312031, 0x3939382f, 0x30342f32, -0x37203232, 0x3a31333a, 0x34322073, 0x6875616e, 0x67204578, 0x70202400, -0x7468655f, 0x4441574e, 0x0, 0x53544143, 0x4b5f3120, 0x0, -0x42616453, 0x6e64526e, 0x67000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, -0x64457650, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x496c6c43, -0x6f6e6652, 0x78000000, 0x53656e64, 0x436b5375, 0x6d000000, 0x52656376, -0x566c616e, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f66772f, 0x636f6d6d, 0x6f6e2f74, 0x696d6572, 0x2e632c76, 0x20312e31, -0x2e322e37, 0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, 0x333a3439, -0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x542d446d, 0x61526431, -0x0, 0x542d446d, 0x61424200, 0x542d446d, 0x61320000, 0x3f6e6f51, -0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x656e714d, -0x45765046, 0x61696c00, 0x656e714d, 0x45764661, 0x696c0000, 0x6661696c, -0x456e454d, 0x0, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, -0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x0, 0x0, -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63, 0x6f6d6d61, -0x6e642e63, 0x2c762031, 0x2e312e31, 0x362e3120, 0x31393938, 0x2f31312f, -0x31392030, 0x323a3339, 0x3a323520, 0x73687561, 0x6e672045, 0x78702024, -0x0, 0x3f4d626f, 0x78457674, 0x0, 0x4e4f636f, 0x6d616e64, -0x0, 0x68737465, 0x5f455252, 0x0, 0x412d4572, 0x72427563, -0x0, 0x4552524f, 0x522d4164, 0x64000000, 0x656e714d, 0x45765046, -0x61696c00, 0x656e714d, 0x45764661, 0x696c0000, 0x6661696c, 0x456e454d, -0x0, 0x442d4572, 0x724c6173, 0x74000000, 0x442d4572, 0x72320000, -0x6d437374, 0x4d644552, 0x52000000, 0x70726f6d, 0x4d644552, 0x52000000, -0x46696c74, 0x4d644552, 0x52000000, 0x636d645f, 0x45525200, 0x3f456e71, -0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6576526e, 0x6746756c, -0x6c000000, 0x0, 0x6e90, 0x7fac, 0x6e28, 0x871c, -0x8298, 0x8768, 0x8768, 0x6f44, 0x7684, 0x7efc, -0x8098, 0x8064, 0x8768, 0x7e60, 0x80bc, 0x6e54, -0x81bc, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f64, 0x6d612e63, 0x2c762031, 0x2e312e32, 0x2e332031, 0x3939382f, -0x30342f32, 0x37203232, 0x3a31333a, 0x34312073, 0x6875616e, 0x67204578, -0x70202400, 0x646d6172, 0x6441544e, 0x0, 0x646d6177, 0x7241544e, -0x0, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f66772f, 0x636f6d6d, 0x6f6e2f74, 0x72616365, 0x2e632c76, 0x20312e31, -0x2e322e32, 0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, 0x333a3530, -0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f66772f, 0x636f6d6d, 0x6f6e2f64, 0x6174612e, 0x632c7620, 0x312e312e, -0x322e3220, 0x31393938, 0x2f30342f, 0x32372032, 0x323a3133, 0x3a343020, -0x73687561, 0x6e672045, 0x78702024, 0x0, 0x46575f56, 0x45525349, -0x4f4e3a20, 0x2331204d, 0x6f6e2044, 0x65632037, 0x2031343a, 0x35363a33, -0x30205053, 0x54203139, 0x39380000, 0x46575f43, 0x4f4d5049, 0x4c455f54, -0x494d453a, 0x2031343a, 0x35363a33, 0x30000000, 0x46575f43, 0x4f4d5049, -0x4c455f42, 0x593a2064, 0x65767263, 0x73000000, 0x46575f43, 0x4f4d5049, -0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465, 0x0, 0x46575f43, -0x4f4d5049, 0x4c455f44, 0x4f4d4149, 0x4e3a2065, 0x6e672e61, 0x6374656f, -0x6e2e636f, 0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a, 0x20676363, -0x20766572, 0x73696f6e, 0x20322e37, 0x2e320000, 0x0, 0x0, -0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f6d, 0x656d2e63, 0x2c762031, 0x2e312e32, 0x2e322031, 0x3939382f, -0x30342f32, 0x37203232, 0x3a31333a, 0x34342073, 0x6875616e, 0x67204578, -0x70202400, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f73, 0x656e642e, 0x632c7620, 0x312e312e, 0x322e3820, 0x31393938, -0x2f30342f, 0x32372032, 0x323a3133, 0x3a343820, 0x73687561, 0x6e672045, -0x78702024, 0x0, 0x736e6464, 0x654e6f51, 0x20000000, 0x6e6f454e, -0x515f5458, 0x0, 0x736e6464, 0x744e6f51, 0x20000000, 0x3f6e6f51, -0x64547845, 0x0, 0x756e6b72, 0x64747970, 0x65000000, 0x0, -0xbc88, 0xbc88, 0xbd30, 0xae2c, 0xb038, 0xbd30, -0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, -0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, -0xbd30, 0xb020, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f72, 0x6563762e, 0x632c7620, 0x312e312e, 0x322e3139, 0x20313939, -0x382f3037, 0x2f323420, 0x32313a33, 0x303a3035, 0x20736875, 0x616e6720, -0x45787020, 0x24000000, 0x706b5278, 0x45525200, 0x66726d32, 0x4c617267, -0x65000000, 0x72784e6f, 0x52784264, 0x0, 0x72785144, 0x6d614446, -0x0, 0x72785144, 0x6d614246, 0x0, 0x3f6e6f51, 0x64527845, -0x0, 0x706b5278, 0x45525273, 0x0, 0x66726d32, 0x4c726753, -0x0, 0x72784e6f, 0x42645300, 0x3f724264, 0x446d6146, 0x0, -0x3f724a42, 0x64446d46, 0x0, 0x0, 0xf638, 0xf638, -0xf638, 0xf638, 0xf638, 0xf638, 0xf638, 0xf638, -0xf638, 0xf638, 0xf638, 0xf638, 0xf638, 0xf638, -0xf638, 0xf630, 0xf630, 0xf630, 0x572d444d, 0x41456e46, -0x0, 0x0, 0xfd80, 0x1011c, 0xfd9c, 0x1011c, -0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x1011c, 0xf6c4, -0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x10114, -0x10114, 0x10114, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f6d, 0x61632e63, 0x2c762031, 0x2e312e32, 0x2e313220, 0x31393938, -0x2f30342f, 0x32372032, 0x323a3133, 0x3a343220, 0x73687561, 0x6e672045, -0x78702024, 0x0, 0x6d616374, 0x7841544e, 0x0, 0x4e745379, -0x6e264c6b, 0x0, 0x72656d61, 0x73737274, 0x0, 0x6c696e6b, -0x444f574e, 0x0, 0x656e714d, 0x45765046, 0x61696c00, 0x656e714d, -0x45764661, 0x696c0000, 0x6661696c, 0x456e454d, 0x0, 0x6c696e6b, -0x55500000, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, -0x6f6e2f63, 0x6b73756d, 0x2e632c76, 0x20312e31, 0x2e322e32, 0x20313939, -0x382f3034, 0x2f323720, 0x32323a31, 0x333a3339, 0x20736875, 0x616e6720, -0x45787020, 0x24000000, 0x50726f62, 0x65506879, 0x0, 0x6c6e6b41, -0x53535254, 0x0, 0x11880, 0x118b8, 0x118dc, 0x11910, -0x1193c, 0x11950, 0x1198c, 0x11cc4, 0x11a64, 0x11aa4, -0x11ad4, 0x11b14, 0x11b44, 0x11b80, 0x11bc4, 0x11cc4, -0x0, 0x0, 0x1215c, 0x1222c, 0x12304, 0x123d4, -0x12430, 0x1250c, 0x12534, 0x12610, 0x12638, 0x127e0, -0x12808, 0x129b0, 0x12ba8, 0x12e3c, 0x12d50, 0x12e3c, -0x12e68, 0x129d8, 0x12b80, 0x0, 0x13254, 0x132b4, -0x13330, 0x1335c, 0x133ac, 0x133e8, 0x1341c, 0x134a8, -0x13560, 0x13630, 0x13670, 0x136f4, 0x13750, 0x13884, -0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0, -0x73746d61, 0x634c4e4b, 0x0, 0x0, 0x0 }; +0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f66, +0x776d6169, 0x6e2e632c, 0x7620312e, 0x312e322e, +0x31312031, 0x3939382f, 0x30342f32, 0x37203232, +0x3a31333a, 0x34322073, 0x6875616e, 0x67204578, +0x70202400, 0x7468655f, 0x4441574e, 0x0, +0x53544143, 0x4b5f3120, 0x0, 0x42616453, +0x6e64526e, 0x67000000, 0x3f456e71, 0x45767400, +0x3f6e6f51, 0x64457650, 0x0, 0x6576526e, +0x6746756c, 0x6c000000, 0x496c6c43, 0x6f6e6652, +0x78000000, 0x53656e64, 0x436b5375, 0x6d000000, +0x52656376, 0x566c616e, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f74, +0x696d6572, 0x2e632c76, 0x20312e31, 0x2e322e38, +0x20313939, 0x382f3037, 0x2f333120, 0x31373a35, +0x383a3435, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x542d446d, 0x61526431, 0x0, +0x542d446d, 0x61424200, 0x542d446d, 0x61320000, +0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, +0x64527845, 0x0, 0x656e714d, 0x45765046, +0x61696c00, 0x656e714d, 0x45764661, 0x696c0000, +0x6661696c, 0x456e454d, 0x0, 0x3f456e71, +0x45767400, 0x3f6e6f51, 0x64457650, 0x0, +0x6576526e, 0x6746756c, 0x6c000000, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63, +0x6f6d6d61, 0x6e642e63, 0x2c762031, 0x2e312e32, +0x2e313020, 0x31393938, 0x2f31312f, 0x31382031, +0x373a3131, 0x3a313820, 0x73687561, 0x6e672045, +0x78702024, 0x0, 0x3f4d626f, 0x78457674, +0x0, 0x4e4f636f, 0x6d616e64, 0x0, +0x68737465, 0x5f455252, 0x0, 0x412d4572, +0x72427563, 0x0, 0x4552524f, 0x522d4164, +0x64000000, 0x656e714d, 0x45765046, 0x61696c00, +0x656e714d, 0x45764661, 0x696c0000, 0x6661696c, +0x456e454d, 0x0, 0x442d4572, 0x724c6173, +0x74000000, 0x442d4572, 0x72320000, 0x6d437374, +0x4d644552, 0x52000000, 0x70726f6d, 0x4d644552, +0x52000000, 0x46696c74, 0x4d644552, 0x52000000, +0x636d645f, 0x45525200, 0x3f456e71, 0x45767400, +0x3f6e6f51, 0x64457650, 0x0, 0x6576526e, +0x6746756c, 0x6c000000, 0x0, 0x6ea0, +0x7fbc, 0x6e38, 0x8734, 0x82b0, +0x8780, 0x8780, 0x6f54, 0x7694, +0x7f0c, 0x80a8, 0x8074, 0x8780, +0x7e70, 0x80cc, 0x6e64, 0x81cc, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f64, +0x6d612e63, 0x2c762031, 0x2e312e32, 0x2e332031, +0x3939382f, 0x30342f32, 0x37203232, 0x3a31333a, +0x34312073, 0x6875616e, 0x67204578, 0x70202400, +0x646d6172, 0x6441544e, 0x0, 0x646d6177, +0x7241544e, 0x0, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f74, +0x72616365, 0x2e632c76, 0x20312e31, 0x2e322e32, +0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, +0x333a3530, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f64, +0x6174612e, 0x632c7620, 0x312e312e, 0x322e3220, +0x31393938, 0x2f30342f, 0x32372032, 0x323a3133, +0x3a343020, 0x73687561, 0x6e672045, 0x78702024, +0x0, 0x46575f56, 0x45525349, 0x4f4e3a20, +0x2331204d, 0x6f6e2046, 0x65622031, 0x2031363a, +0x35393a30, 0x31205053, 0x54203139, 0x39390000, +0x46575f43, 0x4f4d5049, 0x4c455f54, 0x494d453a, +0x2031363a, 0x35393a30, 0x31000000, 0x46575f43, +0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, +0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48, +0x4f53543a, 0x20636f6d, 0x70757465, 0x0, +0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149, +0x4e3a2065, 0x6e672e61, 0x6374656f, 0x6e2e636f, +0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a, +0x20676363, 0x20766572, 0x73696f6e, 0x20322e37, +0x2e320000, 0x0, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f6d, +0x656d2e63, 0x2c762031, 0x2e312e32, 0x2e322031, +0x3939382f, 0x30342f32, 0x37203232, 0x3a31333a, +0x34342073, 0x6875616e, 0x67204578, 0x70202400, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f73, +0x656e642e, 0x632c7620, 0x312e312e, 0x322e3131, +0x20313939, 0x382f3132, 0x2f323220, 0x31373a31, +0x373a3535, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x736e6464, 0x654e6f51, 0x20000000, +0x6e6f454e, 0x515f5458, 0x0, 0x736e6464, +0x744e6f51, 0x20000000, 0x3f6e6f51, 0x64547845, +0x0, 0x756e6b72, 0x64747970, 0x65000000, +0x0, 0xacdc, 0xacdc, 0xadac, +0xaac0, 0xaac0, 0xadac, 0xadac, +0xadac, 0xadac, 0xadac, 0xadac, +0xadac, 0xadac, 0xadac, 0xadac, +0xadac, 0xadac, 0xadac, 0xad8c, +0x0, 0xbcb8, 0xbcb8, 0xbd80, +0xae5c, 0xb068, 0xbd80, 0xbd80, +0xbd80, 0xbd80, 0xbd80, 0xbd80, +0xbd80, 0xbd80, 0xbd80, 0xbd80, +0xbd80, 0xbd80, 0xbd80, 0xbd64, +0xb050, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f72, +0x6563762e, 0x632c7620, 0x312e312e, 0x322e3139, +0x20313939, 0x382f3037, 0x2f323420, 0x32313a33, +0x303a3035, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x706b5278, 0x45525200, 0x66726d32, +0x4c617267, 0x65000000, 0x72784e6f, 0x52784264, +0x0, 0x72785144, 0x6d614446, 0x0, +0x72785144, 0x6d614246, 0x0, 0x3f6e6f51, +0x64527845, 0x0, 0x706b5278, 0x45525273, +0x0, 0x66726d32, 0x4c726753, 0x0, +0x72784e6f, 0x42645300, 0x3f724264, 0x446d6146, +0x0, 0x3f724a42, 0x64446d46, 0x0, +0x0, 0xf688, 0xf688, 0xf688, +0xf688, 0xf688, 0xf688, 0xf688, +0xf688, 0xf688, 0xf688, 0xf688, +0xf688, 0xf688, 0xf688, 0xf688, +0xf680, 0xf680, 0xf680, 0x572d444d, +0x41456e46, 0x0, 0x0, 0xfdd0, +0x1016c, 0xfdec, 0x1016c, 0x1016c, +0x1016c, 0x1016c, 0x1016c, 0x1016c, +0xf714, 0x1016c, 0x1016c, 0x1016c, +0x1016c, 0x1016c, 0x10164, 0x10164, +0x10164, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f6d, +0x61632e63, 0x2c762031, 0x2e312e32, 0x2e313220, +0x31393938, 0x2f30342f, 0x32372032, 0x323a3133, +0x3a343220, 0x73687561, 0x6e672045, 0x78702024, +0x0, 0x6d616374, 0x7841544e, 0x0, +0x4e745379, 0x6e264c6b, 0x0, 0x72656d61, +0x73737274, 0x0, 0x6c696e6b, 0x444f574e, +0x0, 0x656e714d, 0x45765046, 0x61696c00, +0x656e714d, 0x45764661, 0x696c0000, 0x6661696c, +0x456e454d, 0x0, 0x6c696e6b, 0x55500000, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63, +0x6b73756d, 0x2e632c76, 0x20312e31, 0x2e322e32, +0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, +0x333a3339, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x50726f62, 0x65506879, 0x0, +0x6c6e6b41, 0x53535254, 0x0, 0x11994, +0x119cc, 0x119e4, 0x11a18, 0x11a44, +0x11a58, 0x11a94, 0x11e04, 0x11b6c, +0x11bac, 0x11bd8, 0x11c18, 0x11c48, +0x11c84, 0x11cb8, 0x11e04, 0x12048, +0x12060, 0x12088, 0x120a8, 0x120d0, +0x12200, 0x12228, 0x1226c, 0x12294, +0x0, 0x124fc, 0x125cc, 0x126a4, +0x12774, 0x127d0, 0x128ac, 0x128d4, +0x129b0, 0x129d8, 0x12b80, 0x12ba8, +0x12d50, 0x12f48, 0x131dc, 0x130f0, +0x131dc, 0x13208, 0x12d78, 0x12f20, +0x0, 0x135f4, 0x13638, 0x136d0, +0x1371c, 0x1378c, 0x13824, 0x13858, +0x138e0, 0x13978, 0x13a48, 0x13a88, +0x13b0c, 0x13b30, 0x13c64, 0x646f4261, +0x73655067, 0x0, 0x0, 0x0, +0x0, 0x73746d61, 0x634c4e4b, 0x0, +0x0, 0x0 }; +u32 tigonFwData[(MAX_DATA_LEN/4) + 1] __initdata = { +0x416c7465, +0x6f6e2041, 0x63654e49, 0x43205600, 0x416c7465, +0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242, +0x0, 0x0, 0x0, 0x135418, +0x13e7fc, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x60cf00, +0x60, 0xcf000000, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x3, 0x0, +0x1, 0x0, 0x0, 0x1, +0x0, 0x0, 0x0, 0x1, +0x0, 0x0, 0x0, 0x0, +0x0, 0x1000000, 0x21000000, 0x12000140, +0x0, 0x0, 0x20000000, 0x120000a0, +0x0, 0x12000060, 0x12000180, 0x120001e0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x2, +0x0, 0x0, 0x30001, 0x1, +0x30201, 0x0, 0x0, 0x0 }; /* Generated by genfw.c */ int tigon2FwReleaseMajor = 0xc; -int tigon2FwReleaseMinor = 0x1; -int tigon2FwReleaseFix = 0x6; -u32 tigon2FwStartAddr = 0x4000; -u32 tigon2FwTextAddr = 0x4000; -int tigon2FwTextLen = 0xe5b0; -u32 tigon2FwDataAddr = 0x13330; +int tigon2FwReleaseMinor = 0x3; +int tigon2FwReleaseFix = 0x5; +u32 tigon2FwStartAddr = 0x00004000; +u32 tigon2FwTextAddr = 0x00004000; +int tigon2FwTextLen = 0xec80; +u32 tigon2FwRodataAddr = 0x00012c80; +int tigon2FwRodataLen = 0xfb0; +u32 tigon2FwDataAddr = 0x00013c50; int tigon2FwDataLen = 0x170; -u32 tigon2FwRodataAddr = 0x125b0; -int tigon2FwRodataLen = 0xd60; -u32 tigon2FwBssAddr = 0x13550; +u32 tigon2FwSbssAddr = 0x00013dc0; +int tigon2FwSbssLen = 0xbc; +u32 tigon2FwBssAddr = 0x00013e80; int tigon2FwBssLen = 0x20c0; -u32 tigon2FwSbssAddr = 0x134a0; -int tigon2FwSbssLen = 0xa8; u32 tigon2FwText[(MAX_TEXT_LEN/4) + 1] __initdata = { -0x0, 0x10000003, 0x0, 0xd, 0xd, 0x3c1d0001, -0x8fbd3380, 0x3a0f021, 0x3c100000, 0x26104000, 0xc0010c0, 0x0, -0xd, 0x3c1d0001, 0x8fbd3384, 0x3a0f021, 0x3c100000, 0x26104000, -0xc0016fe, 0x0, 0xd, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x2000008, 0x0, -0x8001671, 0x3c0a0001, 0x8001671, 0x3c0a0002, 0x8001671, 0x0, -0x80029b8, 0x0, 0x8001671, 0x3c0a0003, 0x8001671, 0x3c0a0004, -0x8003134, 0x0, 0x80019ba, 0x0, 0x8003653, 0x0, -0x80035e2, 0x0, 0x8001671, 0x3c0a0006, 0x8001671, 0x3c0a0007, -0x8001671, 0x3c0a0008, 0x8001671, 0x3c0a0009, 0x80036c4, 0x0, -0x8002bf9, 0x0, 0x8001671, 0x3c0a000b, 0x8001671, 0x3c0a000c, -0x8001671, 0x3c0a000d, 0x80026ee, 0x0, 0x80026ad, 0x0, -0x8001671, 0x3c0a000e, 0x8001f40, 0x0, 0x80018c9, 0x0, -0x800196b, 0x0, 0x8003943, 0x0, 0x800392d, 0x0, -0x8001671, 0x0, 0x800184d, 0x0, 0x8001893, 0x0, -0x8001671, 0x3c0a0013, 0x8001671, 0x3c0a0014, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xc0028f4, 0xd021, 0x8f820040, -0x3c03f000, 0x431824, 0x3c025000, 0x10620005, 0x3c026000, 0x1062001a, -0x24020003, 0x10000030, 0x0, 0x8f820050, 0x3c030010, 0x431024, -0x50400013, 0x24020003, 0x3c030001, 0x2463c360, 0x3c020001, 0x2442c3e4, -0x431023, 0x3c010001, 0xac233518, 0x8f830140, 0x3c040001, 0x2484c3ec, -0x3c010001, 0xac223504, 0x3c020001, 0x2442c454, 0x3c010001, 0xac203338, -0x10000013, 0x441023, 0x3c030001, 0x2463c45c, 0xaf8200ec, 0x3c020001, -0x2442c498, 0x431023, 0x3c010001, 0xac233518, 0x8f830140, 0x3c040001, -0x2484c4a0, 0x3c010001, 0xac223504, 0x3c020001, 0x2442c4c8, 0x441023, -0x3c0100c0, 0xac203ffc, 0x3c010001, 0xac243510, 0x3c010001, 0xac22350c, -0x34630004, 0xaf830140, 0xc00169c, 0x0, 0x402821, 0x3c010001, -0xac2534b0, 0x3c020008, 0x10a2002c, 0x45102b, 0x14400006, 0x3c020010, -0x3c020004, 0x10a20007, 0x3c02ffff, 0x1000005b, 0x0, 0x10a20045, -0x3c030003, 0x10000057, 0x0, 0x34422e10, 0x3c030001, 0x24635610, -0x3c040001, 0x8c843334, 0xa31823, 0x14800002, 0x622821, 0x24a5faa8, -0x2403f000, 0xa32824, 0x51082, 0x431024, 0x3c010001, 0xac2234a0, -0xa21023, 0x3c010001, 0xac2234a8, 0x3402a000, 0x3c010001, 0xac2234b8, -0x24020008, 0x3c010001, 0xac2234c0, 0x2402001f, 0x3c010001, 0xac2234c8, -0x24020016, 0x3c010001, 0xac2234ac, 0x10000041, 0x3c08ffff, 0x3c02ffff, -0x34422e10, 0x3c030001, 0x24635610, 0x3c040001, 0x8c843334, 0xa31823, -0x14800002, 0x622821, 0x24a5faa8, 0x2403f000, 0xa32824, 0x3c040003, -0x34842000, 0x510c2, 0x431024, 0x3c010001, 0xac2234a0, 0xa21023, -0x3c010001, 0xac2234a8, 0x24020008, 0x3c010001, 0xac2234c0, 0x2402001f, -0x3c010001, 0xac2234c8, 0x24020016, 0x3c010001, 0xac2434b8, 0x3c010001, -0xac2234ac, 0x1000001f, 0x3c08ffff, 0x34632000, 0x3c020001, 0x3c010001, -0xac2234a0, 0x3c020007, 0x3c010001, 0xac2234a8, 0x24020008, 0x3c010001, -0xac2234c0, 0x2402001f, 0x3c010001, 0xac2234c8, 0x24020016, 0x3c010001, -0xac2334b8, 0x3c010001, 0xac2234ac, 0x1000000b, 0x3c08ffff, 0x3c040001, -0x24842670, 0x3c050001, 0x8ca534b0, 0x3021, 0x3821, 0xafa00010, -0xc00290f, 0xafa00014, 0x3c08ffff, 0x35087e10, 0x3c0500bf, 0x34a5f000, -0x3c0600bf, 0x34c6e000, 0x3c070001, 0x8ce734a0, 0x3c040001, 0x8c8434a8, -0x3c030020, 0x3c090001, 0x8d293330, 0x671023, 0x441023, 0x245bb000, -0x641823, 0x3c010001, 0xac2334b4, 0x671823, 0x27620ffc, 0x3c010001, -0xac223380, 0x27621ffc, 0xbb2823, 0xdb3023, 0x3c010001, 0xac2334a4, -0x3c010001, 0xac223384, 0xaf850150, 0xaf860250, 0x1120001b, 0x368b821, -0x33620fff, 0x10400008, 0x24050019, 0x3c040001, 0x2484267c, 0x3603021, -0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x3c1d0001, 0x8fbd333c, -0x3a0f021, 0xc001684, 0x0, 0x3c020001, 0x8c423340, 0x3c030001, -0x8c633344, 0x2442fe00, 0x24630200, 0x3c010001, 0xac223340, 0x3c010001, -0x10000004, 0xac233344, 0x3c1d0001, 0x8fbd3380, 0x3a0f021, 0x3c020001, -0x8c423334, 0x1040000d, 0x26f6faa8, 0x3c020001, 0x8c423340, 0x3c030001, -0x8c633344, 0x3c160001, 0x8ed63344, 0x2442faa8, 0x24630558, 0x3c010001, -0xac223340, 0x3c010001, 0xac233344, 0x3c020001, 0x8c423338, 0x14400003, -0x0, 0x3c010001, 0xac203340, 0xc0011ca, 0x0, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb50058, -0xafb30054, 0xafb10050, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240, -0x3c020001, 0x8c423340, 0x3c030001, 0x8c633344, 0xaf800048, 0x8f840048, -0x3c120000, 0x26524100, 0xa3a00047, 0xafa20034, 0x14800005, 0xafa30030, -0xaf800048, 0x8f820048, 0x10400004, 0x0, 0xaf800048, 0x10000003, -0x2e02021, 0xaf80004c, 0x2e02021, 0xc002990, 0x340581f0, 0x2c02021, -0xc002990, 0x24050558, 0x3c020001, 0x8c4234a4, 0x3c030001, 0x8c6334a0, -0x3c040001, 0x8c8434a8, 0x3c050001, 0x8ca534b8, 0x3c060001, 0x8cc634c0, -0x3c070001, 0x8ce734c8, 0x3c080001, 0x8d0834ac, 0xaec20534, 0x3c020001, -0x8c4234b4, 0x8ec90534, 0xaec50544, 0x3c050001, 0x8ca534b0, 0xaec00000, -0xaec3053c, 0xaec40540, 0xaec60548, 0xaec7054c, 0xaec80550, 0xaec20538, -0xafa90010, 0x8ec20538, 0xafa20014, 0x8ec6053c, 0x8ec70540, 0x3c040001, -0xc00290f, 0x24842688, 0xafb70010, 0xafb60014, 0x8ec60544, 0x8ec70548, -0x3c040001, 0x24842690, 0xc00290f, 0x24050001, 0x3c040001, 0x24842698, -0x24050001, 0x24060001, 0x24070001, 0xafa00010, 0xc00290f, 0xafa00014, -0x3c020001, 0x8c4234b0, 0x3603821, 0x3c060001, 0x24c65610, 0x2448ffff, -0x1061824, 0xe81024, 0x43102b, 0x10400006, 0x24050002, 0x3c040001, -0x248426a0, 0xafa80010, 0xc00290f, 0xafa00014, 0x24020001, 0xa2c20529, -0xaf800054, 0xaf80011c, 0x8f420218, 0x30420002, 0x10400009, 0x0, -0x8f420220, 0x3c030002, 0x34630004, 0x431025, 0xaec20008, 0x8f42021c, -0x10000008, 0x34420004, 0x8f420220, 0x3c030002, 0x34630006, 0x431025, -0xaec20008, 0x8f42021c, 0x34420006, 0xaec20010, 0x8f420218, 0x30420010, -0x1040000a, 0x0, 0x8f42021c, 0x34420004, 0xaec2000c, 0x8f420220, -0x3c03000a, 0x34630004, 0x431025, 0x10000009, 0xaec20004, 0x8f420220, -0x3c03000a, 0x34630006, 0x431025, 0xaec20004, 0x8f42021c, 0x34420006, -0xaec2000c, 0x8f420218, 0x30420200, 0x10400003, 0x24020001, 0x10000002, -0xa2c20064, 0xa2c00064, 0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054, -0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, 0x2c420065, -0x1440fffc, 0x0, 0x8f440208, 0x8f45020c, 0x26e20028, 0xaee20020, -0x24020480, 0xaee20010, 0xaee40008, 0xaee5000c, 0x26e40008, 0x8c820000, -0x8c830004, 0x3802821, 0xaf820090, 0xaf830094, 0x8c820018, 0xaca200b4, -0x9482000a, 0xaca2009c, 0x8ca200b0, 0x8ec30010, 0x431025, 0xaca200b0, -0x8f8200b0, 0x30420004, 0x1440fffd, 0x0, 0x8ee20448, 0x8ee3044c, -0xaee304bc, 0x8ee204bc, 0x2442e000, 0x2c422001, 0x1440000d, 0x26c40128, -0x8ee20448, 0x8ee3044c, 0x3c040001, 0x248426ac, 0x3c050001, 0xafa00010, -0xafa00014, 0x8ee704bc, 0x34a5f000, 0xc00290f, 0x603021, 0x26c40128, -0xc002990, 0x24050400, 0x27440080, 0xc002990, 0x24050080, 0x8f42025c, -0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200, 0x24060008, 0xc0029a2, -0xaec20160, 0x3c043b9a, 0x3484ca00, 0x2821, 0x24020006, 0x24030002, -0xaec2015c, 0x240203e8, 0xaec3016c, 0xaec30168, 0xaec40164, 0xaec201fc, -0x24020001, 0xaec301f8, 0xaec20204, 0x3c030001, 0x651821, 0x90633348, -0x2c51021, 0x24a50001, 0xa0430194, 0x2ca2000f, 0x1440fff8, 0x2c51821, -0x8f820040, 0x24a50001, 0x21702, 0x24420030, 0xa0620194, 0x2c51021, -0xa0400194, 0xafa00010, 0x8fa20034, 0x3c040001, 0x248426b8, 0xafa20014, -0x8fa60030, 0x3821, 0xc00290f, 0x2821, 0x3c040000, 0x24845990, -0x24050010, 0x27b30030, 0x2603021, 0x27b10034, 0xc0016be, 0x2203821, -0x3c030001, 0x8c633338, 0x3c15f000, 0x1060000a, 0xafa2003c, 0x8fa30030, -0x2405ff00, 0x8fa20034, 0x246400ff, 0x852024, 0x831823, 0x431023, -0xafa20034, 0xafa40030, 0x3c040000, 0x24844100, 0x24050108, 0x2603021, -0xc0016be, 0x2203821, 0x96e30452, 0x30630003, 0x1060005f, 0x409021, -0x8f820050, 0x3c030010, 0x431024, 0x10400021, 0x0, 0x8f820040, -0x3c035000, 0x551024, 0x14430009, 0x0, 0x96e60452, 0x8f820050, -0xafa00014, 0xafa20010, 0x8f870040, 0x3c040001, 0x1000000d, 0x248426c4, -0x8f420218, 0x30420040, 0x1040000d, 0x24020001, 0x8f820050, 0x96e60452, -0xafa20010, 0x8f420218, 0xafa20014, 0x8f870040, 0x3c040001, 0x248426cc, -0xc00290f, 0x2821, 0x10000004, 0x0, 0x3c010001, 0x370821, -0xa02281ec, 0x3c040001, 0x24849a34, 0x3c050001, 0x24a59aac, 0xa42823, -0x27b30030, 0x2603021, 0x8ec3000c, 0x27b10034, 0x2203821, 0x24020001, -0xa2c20020, 0xa2c20021, 0x34630a00, 0xc0016be, 0xaec3000c, 0x3c040001, -0x2484abf4, 0x3c050001, 0x24a5afdc, 0xa42823, 0x2603021, 0x2203821, -0xc0016be, 0xaec200a4, 0x3c040001, 0x2484b4a8, 0x3c050001, 0x24a5c358, -0xa42823, 0x2603021, 0x3c010001, 0xac2234fc, 0xc0016be, 0x2203821, -0x3c040001, 0x2484dbf8, 0x3c050001, 0x24a5e3bc, 0xa42823, 0x2603021, -0x3c010001, 0xac223500, 0xc0016be, 0x2203821, 0x3c040001, 0x248426d4, -0x96e60452, 0x24050011, 0x3821, 0x3c010001, 0xac22351c, 0xafa00010, -0xc00290f, 0xafa00014, 0x10000028, 0x0, 0x3c040001, 0x24849890, -0x3c050001, 0x24a59a2c, 0xa42823, 0x2603021, 0xc0016be, 0x2203821, -0x3c040001, 0x2484a6e0, 0x3c050001, 0x24a5abec, 0xa42823, 0x2603021, -0x2203821, 0xc0016be, 0xaec200a4, 0x3c040001, 0x2484afe4, 0x3c050001, -0x24a5b4a0, 0xa42823, 0x2603021, 0x3c010001, 0xac2234fc, 0xc0016be, -0x2203821, 0x3c040001, 0x2484db10, 0x3c050001, 0x24a5dbf0, 0xa42823, -0x2603021, 0x3c010001, 0xac223500, 0xc0016be, 0x2203821, 0x3c010001, -0xac22351c, 0x3c020001, 0x8c4234fc, 0x3c050fff, 0x34a5ffff, 0x3c030001, -0x8c633500, 0x3c040800, 0x451024, 0x21082, 0x441025, 0x651824, -0xae420020, 0x3c020001, 0x8c42351c, 0x31882, 0x641825, 0xae430080, -0x451024, 0x21082, 0x441025, 0xae420078, 0x96e20462, 0x30420003, -0x14400009, 0x0, 0x96e20472, 0x30420003, 0x1040007f, 0x27b30030, -0x96e20462, 0x30420003, 0x1040006d, 0x3c020700, 0x96e20472, 0x30420003, -0x10400069, 0x3c020700, 0x96e30472, 0x96e20462, 0x14620065, 0x3c020700, -0x8f82005c, 0x3c030080, 0x431024, 0x1040000b, 0x0, 0x8f820050, -0x96e60462, 0xafa20010, 0x8f82005c, 0xafa20014, 0x8f870040, 0x3c040001, -0x248426e0, 0xc00290f, 0x24051977, 0x8f820050, 0x3c030010, 0x431024, -0x10400022, 0x0, 0x8f820040, 0x3c03f000, 0x431024, 0x3c035000, -0x14430009, 0x0, 0x96e60462, 0x8f820050, 0xafa00014, 0xafa20010, -0x8f870040, 0x3c040001, 0x1000000d, 0x248426c4, 0x8f420218, 0x30420040, -0x1040000d, 0x24020001, 0x8f820050, 0x96e60462, 0xafa20010, 0x8f420218, -0xafa20014, 0x8f870040, 0x3c040001, 0x248426cc, 0xc00290f, 0x24050001, -0x10000004, 0x0, 0x3c010001, 0x370821, 0xa02281ec, 0x3c040001, -0x24849810, 0x3c050001, 0x24a59888, 0xa42823, 0x27b30030, 0x2603021, -0x8ec30004, 0x27b10034, 0x2203821, 0x24020001, 0xa2c2004c, 0x34630e00, -0xc0016be, 0xaec30004, 0x3c040001, 0x2484d058, 0x3c050001, 0x24a5d780, -0xa42823, 0x2603021, 0x2203821, 0xc0016be, 0xaec200a8, 0x3c040001, -0x2484dbf8, 0x3c050001, 0x24a5e3bc, 0xa42823, 0x2603021, 0x3c010001, -0xac223514, 0xc0016be, 0x2203821, 0x3c040001, 0x248426ec, 0x21900, -0x31982, 0x3c050800, 0x651825, 0xae430078, 0x96e60462, 0x24050012, -0x3c010001, 0xac22351c, 0x1000000a, 0x3821, 0x34423000, 0x240a0001, -0x3c040001, 0x248426f8, 0x3405f001, 0x3021, 0x3821, 0xa3aa0047, -0xafa20020, 0xafa00010, 0xc00290f, 0xafa00014, 0x10000015, 0x0, -0x3c040001, 0x2484960c, 0x3c050001, 0x24a59808, 0xa42823, 0x2603021, -0x27b10034, 0xc0016be, 0x2203821, 0x3c040001, 0x2484c57c, 0x3c050001, -0x24a5d050, 0xa42823, 0x2603021, 0x2203821, 0xc0016be, 0xaec200a8, -0x3c010001, 0xac223514, 0x3c020001, 0x8c423514, 0x3c030800, 0x21100, -0x21182, 0x431025, 0xae420038, 0x8f420218, 0x30420040, 0x14400004, -0x24020001, 0x3c010001, 0x370821, 0xa02281ec, 0x96e20462, 0x30420010, -0x14400009, 0x0, 0x96e20472, 0x30420010, 0x10400021, 0x0, -0x96e20462, 0x30420010, 0x10400005, 0x3c020700, 0x96e20472, 0x30420010, -0x14400011, 0x3c020700, 0x34423000, 0x240a0001, 0xa3aa0047, 0xafa20020, -0x8ee20154, 0x96e60462, 0x96e70472, 0x24420001, 0xaee20154, 0x8ee20154, -0x3c040001, 0x24842704, 0x3405f002, 0xafa00010, 0xc00290f, 0xafa00014, -0x96e60472, 0x96e70462, 0x3c040001, 0x2484270c, 0x24050012, 0xafa00010, -0xc00290f, 0xafa00014, 0x3c040001, 0x2484d788, 0x3c050001, 0x24a5d944, -0xa42823, 0x27b30030, 0x2603021, 0x27b10034, 0xc0016be, 0x2203821, -0x3c1e0fff, 0x37deffff, 0x3c040001, 0x2484d94c, 0x3c050001, 0x24a5db08, -0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac223508, 0x5e1024, -0x21082, 0x3c150800, 0x551025, 0xc0016be, 0xae420050, 0x3c040000, -0x24847d00, 0x3c050000, 0x24a57f50, 0xa42823, 0x2603021, 0x2203821, -0x3c010001, 0xac223520, 0x5e1024, 0x21082, 0x551025, 0xc0016be, -0xae420048, 0x3c040000, 0x24846134, 0x3c050000, 0x24a56244, 0xa42823, -0x2603021, 0x2203821, 0x3c010001, 0xac2234e8, 0x5e1024, 0x21082, -0x551025, 0xc0016be, 0xae4200b8, 0x3c040000, 0x2484624c, 0x3c050000, -0x24a5631c, 0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac2234dc, -0x5e1024, 0x21082, 0x551025, 0xc0016be, 0xae4200e8, 0x3c040000, -0x24846324, 0x3c050000, 0x24a565a4, 0xa42823, 0x2603021, 0x2203821, -0x3c010001, 0xac2234cc, 0x5e1024, 0x21082, 0x551025, 0xc0016be, -0xae4200f0, 0x3c040000, 0x248465ac, 0x3c050000, 0x24a566e0, 0xa42823, -0x2603021, 0x2203821, 0x3c010001, 0xac2234d4, 0x5e1024, 0x21082, -0x551025, 0xc0016be, 0xae4200c0, 0x3c040001, 0x2484e50c, 0x3c050001, -0x24a5eabc, 0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac2234e0, -0x5e1024, 0x21082, 0x551025, 0xc0016be, 0xae4200c8, 0x3c040001, -0x2484ee30, 0x3c050001, 0x24a5ef08, 0xa42823, 0x2603021, 0x2203821, -0x3c010001, 0xac223524, 0x5e1024, 0x21082, 0x551025, 0xc0016be, -0xae4200d0, 0x3c040001, 0x8c843518, 0x3c050001, 0x8ca53504, 0x2603021, -0x2203821, 0xc0016be, 0xaec200ac, 0x3c040001, 0x8c843510, 0x3c050001, -0x8ca5350c, 0x2603021, 0x3c010001, 0xac223518, 0xc0016be, 0x2203821, -0x3c010001, 0xac223510, 0x3c070001, 0xf73821, 0x90e781ec, 0xafa00010, -0x8fa20034, 0xafa20014, 0x8fa60030, 0x3c040001, 0x24842718, 0xc00290f, -0x2821, 0x8faa003c, 0xc003c37, 0x1408021, 0xc0038f4, 0x0, -0xc002548, 0x0, 0xaec0002c, 0xaf400228, 0xaf40022c, 0xaee004a8, -0xaec00014, 0xaec00018, 0xaec00024, 0x96e20450, 0x2442ffff, 0xaec20028, -0x3c010001, 0x370821, 0xac2081d4, 0xaec00038, 0xaec00044, 0xaec0003c, -0xaec00040, 0xaec00048, 0x96e20480, 0x2442ffff, 0xaec2006c, 0x3c010001, -0x370821, 0xac2081e0, 0x8ec20534, 0x8ec30534, 0x8ec40534, 0x8ec50538, -0xaec00068, 0xaec00060, 0xaec0005c, 0xaec00058, 0xa2c000ed, 0xaec00078, -0xaec00084, 0xaec20074, 0xaec3007c, 0xaec40080, 0xaec5008c, 0xc002298, -0xa2c00115, 0x3c1433d8, 0x3694c348, 0x3c020800, 0x34420080, 0x3c040000, -0x248459dc, 0x3c050000, 0x24a55a08, 0xa42823, 0x2603021, 0x2203821, -0xaf820060, 0x2402ffff, 0xaec00030, 0xaec00034, 0xc0016be, 0xaf820064, -0x3c010001, 0xac2234c4, 0x5e1024, 0x21082, 0x551025, 0xc00181c, -0xae420000, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240, 0x3c020000, -0x24424034, 0xaf820244, 0xaf800240, 0x8f820060, 0x551024, 0x14400005, -0x3c030800, 0x8f820060, 0x431024, 0x1040fffd, 0x0, 0xc003901, -0x0, 0x3c020100, 0xafa20028, 0x8ec3002c, 0x240200ff, 0x10620003, -0x8821, 0x8ec2002c, 0x24510001, 0x8f420228, 0x1622000f, 0x24070008, -0x3c040001, 0x2484262c, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0, -0x10000046, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8fa30028, -0x8fa4002c, 0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, -0x8ec6002c, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0, -0x604821, 0x4021, 0xa92821, 0xa9182b, 0x882021, 0x832021, -0x630c0, 0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, -0x5440000c, 0xaed1002c, 0x3c040001, 0x24842638, 0xafa00010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d, -0x0, 0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, -0x24020011, 0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, -0x40f809, 0x24c6001c, 0x1440000e, 0x0, 0x3c040001, 0x24842640, -0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, -0x34a5f001, 0x8ec202a4, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x8ec20248, -0x24420001, 0xaec20248, 0x8ec20248, 0x93a20047, 0x10400070, 0x240200ff, -0x8ec3002c, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24510001, -0x8821, 0x8f420228, 0x1622000f, 0x4021, 0x3c040001, 0x2484262c, -0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, -0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x10000046, 0x8ec202a0, -0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, -0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, -0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0, 0x604821, -0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0, 0xafa20018, -0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c, 0xaed1002c, -0x3c040001, 0x24842638, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d, 0x0, 0x8ee40488, -0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011, 0xafa20010, -0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, -0x1440000e, 0x0, 0x3c040001, 0x24842640, 0xafa00010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001, 0x8ec202a4, -0x24420001, 0xaec202a4, 0x8ec202a4, 0x3c040001, 0x24842724, 0x8ec20254, -0x3c050009, 0x34a59999, 0x24420001, 0xaec20254, 0x8ec20254, 0x3021, -0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x10000004, 0x0, -0x8f420264, 0x10400005, 0x0, 0x8f8200a0, 0x30420004, 0x1440fffa, -0x0, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c, 0x24420001, -0xaec2026c, 0x8ec2026c, 0x8f8200d8, 0x8f8300d4, 0x431023, 0x2442fff8, -0xaec20088, 0x8ec20088, 0x4410006, 0x24020001, 0x8ec20088, 0x8ec3053c, -0x431021, 0xaec20088, 0x24020001, 0xaec20070, 0x96e20452, 0x30420010, -0x10400005, 0x0, 0x8f820214, 0x3c038100, 0x431025, 0xaf820214, -0x3c020001, 0x8c423408, 0x30420001, 0x10400007, 0x0, 0x3c040000, -0x24846bb4, 0x3c050000, 0x24a570e8, 0x10000006, 0xa42823, 0x3c040000, -0x248466e8, 0x3c050000, 0x24a56bac, 0xa42823, 0x27a60030, 0xc0016be, -0x27a70034, 0x3c010001, 0xac2234d8, 0x3c020001, 0x8c4234d8, 0x3c030800, -0x21100, 0x21182, 0x431025, 0xae420040, 0x8f830060, 0x74100b, -0x242000a, 0x200f821, 0x0, 0xd, 0x8fbf0060, 0x8fbe005c, -0x8fb50058, 0x8fb30054, 0x8fb10050, 0x3e00008, 0x27bd0068, 0x3e00008, -0x0, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x3e00008, 0x0, 0x3e00008, 0x0, -0x27bdfde0, 0x27a70018, 0x3c02dead, 0x3442beef, 0xafbf0218, 0x8f830150, -0x3c04001f, 0x3484ffff, 0xafa20018, 0xe33823, 0xe43824, 0x8ce30000, -0x10620008, 0x0, 0xafa30010, 0xafa00014, 0x8f860150, 0x3c040001, -0x24842730, 0xc00290f, 0x24050020, 0x8fbf0218, 0x3e00008, 0x27bd0220, -0x27bdffe0, 0x3c06abba, 0x34c6babe, 0xafb10018, 0x3c110004, 0x3c07007f, -0x34e7ffff, 0xafbf001c, 0x112840, 0x8e240000, 0x8ca30000, 0xaca00000, -0xae260000, 0x8ca20000, 0xaca30000, 0x10460005, 0xae240000, 0xa08821, -0xf1102b, 0x1040fff5, 0x112840, 0x3c040001, 0x2484273c, 0x2202821, -0x3021, 0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x2201021, -0x8fbf001c, 0x8fb10018, 0x3e00008, 0x27bd0020, 0x27bdffc8, 0xafb30024, -0x809821, 0xafbe002c, 0xafb50028, 0xe0a821, 0x24a50003, 0xafbf0030, -0xafb10020, 0x8ea20000, 0x2403fffc, 0xa38824, 0x51102b, 0x14400020, -0xc0f021, 0x8fc80000, 0xafa00010, 0xafa8001c, 0x8ea20000, 0x3c040001, -0x24842748, 0xafa20014, 0x8fc60000, 0x2602821, 0xc00290f, 0x2203821, -0x8fc60000, 0x111882, 0x2463ffff, 0x2402ffff, 0x10620008, 0x2602021, -0x2405ffff, 0x8c820000, 0x24840004, 0x2463ffff, 0xacc20000, 0x1465fffb, -0x24c60004, 0x8ea20000, 0x511023, 0xaea20000, 0x8fc20000, 0x511021, -0x1000000b, 0xafc20000, 0xafa00010, 0x8ea20000, 0x3c040001, 0x24842750, -0xafa20014, 0x8fc60000, 0x2602821, 0x2203821, 0xc00290f, 0xafa5001c, -0x8fa2001c, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024, 0x8fb10020, -0x3e00008, 0x27bd0038, 0x27bdffe8, 0x3c1cc000, 0xd021, 0x3c05ffff, -0x3c030001, 0x8c6334a0, 0x3c040001, 0x8c8434a8, 0x34a57e10, 0x24021ffc, -0x3c010001, 0xac223340, 0x3c0200c0, 0x3c010001, 0xac223344, 0x3c020020, -0xafbf0010, 0x3c0100c0, 0xac201ffc, 0x431023, 0x441023, 0x245bb000, -0x365b821, 0x3c1d0001, 0x8fbd333c, 0x3a0f021, 0x3c0400c0, 0x34840200, -0x3c1600c0, 0x3c0300c0, 0x34630758, 0x24021dfc, 0x3c010001, 0xac223340, -0x240218a4, 0x3c010001, 0xac243344, 0x3c010001, 0xac223340, 0x3c010001, -0xac233344, 0xc00172c, 0x36d60200, 0x8fbf0010, 0x3e00008, 0x27bd0018, -0x27bdffc8, 0x3c040001, 0x24842758, 0x2821, 0x3c020001, 0x8c423340, -0x3c030001, 0x8c633344, 0x3021, 0x3603821, 0xafbf0030, 0xafbe002c, -0xafb50028, 0xafb30024, 0xafb10020, 0xafa2001c, 0xafa30018, 0xafb70010, -0xc00290f, 0xafb60014, 0xc001849, 0x0, 0x8f820240, 0x34420004, -0xaf820240, 0x24020001, 0xaec20000, 0x3c020001, 0x571021, 0x904281ec, -0x10400090, 0x2402fffc, 0x3c110001, 0x2631a3c3, 0x3c150001, 0x26b59f70, -0x2351823, 0x8fa6001c, 0x628824, 0xd1102b, 0x1440001e, 0x27be0018, -0x8fb30018, 0x3c040001, 0x24842748, 0x2a02821, 0x2203821, 0xafa00010, -0xafa60014, 0xc00290f, 0x2603021, 0x8fa40018, 0x111882, 0x2463ffff, -0x2402ffff, 0x10620008, 0x2a02821, 0x2406ffff, 0x8ca20000, 0x24a50004, -0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x511023, -0xafa2001c, 0x8fc20000, 0x511021, 0x1000000a, 0xafc20000, 0x3c040001, -0x24842750, 0x2a02821, 0xafa00010, 0xafa60014, 0x8fa60018, 0x2203821, -0xc00290f, 0xa09821, 0x8fa3001c, 0x24150020, 0x3c010001, 0xac3334bc, -0x2c620020, 0x1440001d, 0x27b30018, 0x8fb10018, 0x3c040001, 0x24842748, -0x3c050001, 0x24a53550, 0x24070020, 0xafa00010, 0xafa30014, 0xc00290f, -0x2203021, 0x3c050001, 0x24a53550, 0x8fa40018, 0x24030007, 0x2406ffff, -0x8ca20000, 0x24a50004, 0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, -0x8fa2001c, 0x551023, 0xafa2001c, 0x8e620000, 0x551021, 0x1000000c, -0xae620000, 0x3c040001, 0x24842750, 0x3c050001, 0x24a53550, 0xafa00010, -0xafa30014, 0x8fa60018, 0x3c110001, 0x26313550, 0xc00290f, 0x24070020, -0x8fa3001c, 0x24150020, 0x3c010001, 0xac3134f0, 0x2c620020, 0x1440001d, -0x27b30018, 0x8fb10018, 0x3c040001, 0x24842748, 0x3c050001, 0x24a53570, -0x24070020, 0xafa00010, 0xafa30014, 0xc00290f, 0x2203021, 0x3c050001, -0x24a53570, 0x8fa40018, 0x24030007, 0x2406ffff, 0x8ca20000, 0x24a50004, -0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x551023, -0xafa2001c, 0x8e620000, 0x551021, 0x1000000c, 0xae620000, 0x3c040001, -0x24842750, 0x3c050001, 0x24a53570, 0xafa00010, 0xafa30014, 0x8fa60018, -0x3c110001, 0x26313570, 0xc00290f, 0x24070020, 0x3c010001, 0x10000033, -0xac3134ec, 0x3c110000, 0x26317cef, 0x3c150000, 0x26b57b3c, 0x2351823, -0x8fa6001c, 0x628824, 0xd1102b, 0x1440001e, 0x27be0018, 0x8fb30018, -0x3c040001, 0x24842748, 0x2a02821, 0x2203821, 0xafa00010, 0xafa60014, -0xc00290f, 0x2603021, 0x8fa40018, 0x111882, 0x2463ffff, 0x2402ffff, -0x10620008, 0x2a02821, 0x2406ffff, 0x8ca20000, 0x24a50004, 0x2463ffff, -0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x511023, 0xafa2001c, -0x8fc20000, 0x511021, 0x1000000a, 0xafc20000, 0x3c040001, 0x24842750, -0x2a02821, 0xafa00010, 0xafa60014, 0x8fa60018, 0x2203821, 0xc00290f, -0xa09821, 0x3c010001, 0xac3334bc, 0x3c030001, 0x8c6334bc, 0x24020400, -0x60f809, 0xaf820070, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024, -0x8fb10020, 0x3e00008, 0x27bd0038, 0x0, 0x0, 0x0, -0x8f820040, 0x3c03f000, 0x431824, 0x3c025000, 0x10620005, 0x3c026000, -0x10620012, 0x0, 0x10000015, 0x0, 0x8f820050, 0x3c030010, -0x431024, 0x10400006, 0x0, 0x8f820050, 0x2403ff80, 0x431024, -0x1000000a, 0x34420063, 0x8f820050, 0x2403ff80, 0x431024, 0x10000005, -0x3442004f, 0x8f820050, 0x2403ff80, 0x431024, 0x34420055, 0xaf820050, -0x8f820054, 0x244203e8, 0xaf820058, 0x240201f4, 0xaec200c8, 0x24020004, -0xaec200d0, 0x24020002, 0xaec000a0, 0xaec000cc, 0xaec200c4, 0xaec000c0, -0xaec000bc, 0x3e00008, 0xaec000b8, 0x8f820054, 0x24420005, 0x3e00008, -0xaf820078, 0x27bdffe8, 0xafbf0010, 0x8f820054, 0x3c030001, 0x8c63341c, -0x244203e8, 0x1060001d, 0xaf820058, 0x3c020001, 0x8c423408, 0x30420001, -0x1440000c, 0x0, 0x3c020001, 0x8c423528, 0x10400008, 0x0, -0x8f830224, 0x3c020001, 0x8c4255ec, 0x10620003, 0x0, 0xc003ab1, -0x0, 0x92c200ec, 0x10400003, 0x3c0208ff, 0x1000000a, 0xa2c000ec, -0x3442fffb, 0x8f830220, 0x3c040200, 0x284a025, 0x621824, 0x10000003, -0xaf830220, 0xc003db9, 0x0, 0x8f420238, 0x1040000a, 0x0, -0x8ec200a0, 0x244203e8, 0xaec200a0, 0x8f430238, 0x43102b, 0x14400003, -0x0, 0xc001c3c, 0x0, 0x8f420218, 0x30420100, 0x10400003, -0x0, 0xc001e07, 0x0, 0x8ec200c0, 0x8ec300c4, 0x24420001, -0xaec200c0, 0x43102b, 0x14400003, 0x0, 0xaec000c0, 0x36940080, -0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3e00008, 0x0, 0x8f820040, -0x30420001, 0x14400008, 0x2021, 0x8f430104, 0x24020001, 0x50620005, -0x24040001, 0x8f420264, 0x10400003, 0x801021, 0x24040001, 0x801021, -0x10400006, 0x0, 0x8ec20270, 0x24420001, 0xaec20270, 0x10000008, -0x8ec20270, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c, 0x24420001, -0xaec2026c, 0x8ec2026c, 0x8ec20000, 0x3c03dfff, 0x10400007, 0x3463ffff, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, -0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, -0xaf800048, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x27bdffd8, -0xafbf0024, 0xafb10020, 0x8ec30018, 0x8ec20028, 0x10620056, 0x0, -0x3c020001, 0x571021, 0x8c4281d4, 0x10400023, 0x24070008, 0x8ed10018, -0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, -0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, -0x24020001, 0x3c040001, 0x248427c0, 0xafb10010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400005, -0x24020001, 0x3c010001, 0x370821, 0x1000005c, 0xac2281d4, 0x3c010001, -0x370821, 0x10000022, 0xac2081d0, 0x8ed10018, 0x8ee40498, 0x8ee5049c, -0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, 0xafb10014, 0xafa30018, -0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001, -0x248427c0, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, -0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001, 0x3c010001, -0x370821, 0x1000003a, 0xac2281d8, 0x3c010001, 0x370821, 0xac2281d0, -0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821, 0xac2081d4, -0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264, 0x1000002a, -0x8ec20264, 0x3c020001, 0x571021, 0x8c4281d0, 0x1040001f, 0x0, -0x8f820040, 0x30420001, 0x14400008, 0x2021, 0x8f430104, 0x24020001, -0x50620005, 0x24040001, 0x8f420264, 0x10400003, 0x801021, 0x24040001, -0x801021, 0x10400006, 0x0, 0x8ec20270, 0x24420001, 0xaec20270, -0x10000008, 0x8ec20270, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c, -0x24420001, 0xaec2026c, 0x8ec2026c, 0x3c010001, 0x370821, 0xac2081d0, -0x3c010001, 0x370821, 0xac2081d4, 0x3c010001, 0x370821, 0xac2081d8, -0x8ec20000, 0x3c03ff7f, 0x10400007, 0x3463ffff, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060, 0x8ec20000, -0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf0024, -0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0, 0x27bdffd8, -0xafbf0024, 0xafb10020, 0x8ec30068, 0x8ec2006c, 0x10620029, 0x24070008, -0x8ed10068, 0x8ee40490, 0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013, -0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, -0x1440000b, 0x24020001, 0x3c040001, 0x248427cc, 0xafb10010, 0xafa00014, -0x8ec60068, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021, -0x14400005, 0x24020001, 0x3c010001, 0x370821, 0x1000000e, 0xac2281e0, -0x3c010001, 0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c, -0x24420001, 0xaec20268, 0x10000004, 0x8ec20268, 0x3c010001, 0x370821, -0xac2081e0, 0x8ec20000, 0x3c03feff, 0x10400007, 0x3463ffff, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, -0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060, -0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, -0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x3c020001, 0x8c42341c, 0x27bdffc0, 0xafbf0038, 0xafbe0034, 0xafb50030, -0xafb3002c, 0x104000fe, 0xafb10028, 0x8ec200b8, 0x24430001, 0x2842000b, -0x1440011b, 0xaec300b8, 0xaec000b8, 0x8ee204a8, 0x30420002, 0x14400096, -0x0, 0x8ee204a8, 0x3c030001, 0x8c63340c, 0x34420002, 0xaee204a8, -0x24020001, 0x14620003, 0x3c020600, 0x10000002, 0x34423000, 0x34421000, -0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, -0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, 0x0, -0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0, -0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, -0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8, -0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000c, 0x8ec8002c, -0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014, -0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, 0xa3482b, -0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0, -0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, 0x2221023, -0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, 0xaed3002c, -0x3c040001, 0x24842804, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, -0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001, -0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff, 0x8f830054, 0x8f820054, -0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017, 0xa821, 0x3c1e0020, -0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8f860120, -0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018, 0x8ec200a8, 0x24070008, -0x40f809, 0x24c6001c, 0x1440ffe2, 0x0, 0x8f820054, 0x2221023, -0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff, 0x1440000f, 0x0, -0x3c040001, 0x24842810, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, -0x3c050009, 0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0, 0x24420001, -0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001, 0xaec20250, 0x8ec20250, -0x8ee204a8, 0x30420001, 0x10400054, 0x0, 0x8f420218, 0x30420080, -0x1040002b, 0x0, 0x8f820044, 0x34420040, 0xaf820044, 0x8ec200b0, -0x402821, 0x8ec201b8, 0x8ec301bc, 0x24060000, 0x2407ffff, 0x2021, -0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0, 0x8ec200b4, -0x402821, 0x8ec201d8, 0x8ec301dc, 0x2021, 0x461024, 0x14440003, -0x671824, 0x1065000c, 0x0, 0x8ec201b8, 0x8ec301bc, 0x8ec401d8, -0x8ec501dc, 0xaec300b0, 0xaec500b4, 0x8f820044, 0x38420020, 0xaf820044, -0x10000056, 0x2402ff7f, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, -0x10000050, 0x2402ff7f, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, -0x8ec200b0, 0x402821, 0x8ec201b8, 0x8ec301bc, 0x24060000, 0x2407ffff, -0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0, -0x8ec200b4, 0x402821, 0x8ec201d8, 0x8ec301dc, 0x2021, 0x461024, -0x14440003, 0x671824, 0x1065001f, 0x0, 0x8ec201b8, 0x8ec301bc, -0x8ec401d8, 0x8ec501dc, 0xaec300b0, 0xaec500b4, 0x8f820044, 0x38420040, -0xaf820044, 0x1000002b, 0x2402ff7f, 0x8f820044, 0x34420040, 0xaf820044, -0x8ec200bc, 0x24430001, 0x1000001d, 0x28420033, 0x8ee204a8, 0x30420001, -0x10400013, 0x0, 0x8f420218, 0x30420080, 0x1040000a, 0x0, -0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, 0x8f820044, 0x34420040, -0xaf820044, 0x10000013, 0x2402ff7f, 0x8f820044, 0x34420060, 0xaf820044, -0x1000000e, 0x2402ff7f, 0x8f820044, 0x34420040, 0xaf820044, 0x8ec200bc, -0x24430001, 0x284201f5, 0x14400005, 0xaec300bc, 0x8f820044, 0x38420020, -0xaf820044, 0xaec000bc, 0x2402ff7f, 0x282a024, 0x8fbf0038, 0x8fbe0034, -0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0040, 0x3e00008, -0x0, 0x3c020001, 0x8c42341c, 0x27bdffc0, 0xafbf0038, 0xafbe0034, -0xafb50030, 0xafb3002c, 0x10400100, 0xafb10028, 0x8ec200b8, 0x3c040001, -0x8c84340c, 0x24430001, 0x2842000b, 0xaec400d0, 0x14400127, 0xaec300b8, -0xaec000b8, 0x8ee204a8, 0x30420002, 0x14400094, 0x0, 0x8ee204a8, -0x34420002, 0xaee204a8, 0x24020001, 0x14820003, 0x3c020600, 0x10000002, -0x34423000, 0x34421000, 0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, -0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, -0x1662000f, 0x0, 0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, -0x24420001, 0xaec202a0, 0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0, -0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, -0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, -0x241e000c, 0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, -0xafbe0010, 0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008, -0xa32821, 0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018, -0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001, -0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, -0x54400011, 0xaed3002c, 0x3c040001, 0x24842804, 0xafa00010, 0xafa00014, -0x8f860120, 0x8f870124, 0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c, -0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff, -0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017, -0xa821, 0x3c1e0020, 0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c, -0x8ec3002c, 0x8f860120, 0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018, -0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe2, 0x0, -0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff, -0x1440000f, 0x0, 0x3c040001, 0x24842810, 0xafa00010, 0xafa00014, -0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0, -0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001, -0xaec20250, 0x8ec20250, 0x8ee204a8, 0x30420001, 0x10400055, 0x0, -0x8f420218, 0x30420080, 0x10400027, 0x0, 0x8ec200b0, 0x3c040001, -0x908434d0, 0x24080000, 0x2409ffff, 0x403821, 0x8ec201b8, 0x8ec301bc, -0x3021, 0x34840020, 0x3c010001, 0xa02434d0, 0x481024, 0x1446000d, -0x691824, 0x1467000b, 0x0, 0x8ec200b4, 0x403821, 0x8ec201d8, -0x8ec301dc, 0x3021, 0x481024, 0x14460003, 0x691824, 0x10670009, -0x308200bf, 0x8ec201b8, 0x8ec301bc, 0x3c040001, 0x908434d0, 0x8ec601d8, -0x8ec701dc, 0x10000026, 0x38840040, 0x3c010001, 0x10000061, 0xa02234d0, -0x8ec200b0, 0x3c040001, 0x908434d0, 0x24080000, 0x2409ffff, 0x403821, -0x8ec201b8, 0x8ec301bc, 0x3021, 0x308400bf, 0x3c010001, 0xa02434d0, -0x481024, 0x1446000d, 0x691824, 0x1467000b, 0x0, 0x8ec200b4, -0x403821, 0x8ec201d8, 0x8ec301dc, 0x3021, 0x481024, 0x14460003, -0x691824, 0x1067000d, 0x34820020, 0x8ec201b8, 0x8ec301bc, 0x3c040001, -0x908434d0, 0x8ec601d8, 0x8ec701dc, 0x38840020, 0xaec300b0, 0xaec700b4, -0x3c010001, 0x1000003a, 0xa02434d0, 0x3c010001, 0x10000037, 0xa02234d0, -0x3c020001, 0x904234d0, 0x8ec300bc, 0x34440020, 0x24620001, 0x10000028, -0x28630033, 0x8ec200cc, 0x8ec300c8, 0x24420001, 0xaec200cc, 0x43102a, -0x14400006, 0x24030001, 0x8ec200d0, 0x14430002, 0xaec000cc, 0x24030004, -0xaec300d0, 0x8ee204a8, 0x30420001, 0x10400012, 0x0, 0x8f420218, -0x30420080, 0x10400008, 0x0, 0x3c020001, 0x904234d0, 0x34420040, -0x304200df, 0x3c010001, 0x10000015, 0xa02234d0, 0x3c020001, 0x904234d0, -0x34420060, 0x3c010001, 0x1000000f, 0xa02234d0, 0x3c020001, 0x904234d0, -0x8ec300bc, 0x34440020, 0x24620001, 0x286300fb, 0x3c010001, 0xa02434d0, -0x14600005, 0xaec200bc, 0x38820040, 0x3c010001, 0xa02234d0, 0xaec000bc, -0x3c020001, 0x904234d0, 0x8ec300d0, 0x3044007f, 0x24020001, 0x3c010001, -0xa02434d0, 0x54620003, 0x3484000f, 0x42102, 0x348400f0, 0xc004950, -0x0, 0x2402ff7f, 0x282a024, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, -0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0040, 0x3e00008, 0x0, -0x27bdffc0, 0xafbf0038, 0xafbe0034, 0xafb50030, 0xafb3002c, 0xafb10028, -0x92c20528, 0x144001bc, 0x26c50128, 0x26e40028, 0x240300ff, 0x2406ffff, -0x8ca20000, 0x24a50004, 0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, -0x8f420080, 0xaee20044, 0x8f4200c0, 0xaee20040, 0x8f420084, 0xaee20030, -0x8f420084, 0xaee2022c, 0x8f420088, 0xaee20230, 0x8f42008c, 0xaee20234, -0x8f420090, 0xaee20238, 0x8f420094, 0xaee2023c, 0x8f420098, 0xaee20240, -0x8f42009c, 0xaee20244, 0x8f4200a0, 0xaee20248, 0x8f4200a4, 0xaee2024c, -0x8f4200a8, 0xaee20250, 0x8f4200ac, 0xaee20254, 0x8f4200b0, 0xaee20258, -0x8f4200b4, 0xaee2025c, 0x8f4200b8, 0xaee20260, 0x8f4200bc, 0x24040001, -0xaee20264, 0xaee00034, 0x41080, 0x571021, 0x8ee30034, 0x8c42022c, -0x24840001, 0x621821, 0x2c82000f, 0xaee30034, 0x1440fff8, 0x41080, -0x8f4200cc, 0xaee20048, 0x8f4200d0, 0xaee2004c, 0x8f4200e0, 0xaee201e8, -0x8f4200e4, 0xaee201ec, 0x8f4200e8, 0xaee201f0, 0x8f4200ec, 0xaee201f4, -0x8f4200f0, 0xaee201f8, 0x8f4200fc, 0x402821, 0x8ee200c0, 0x2021, -0x82102b, 0x1440000a, 0x0, 0x8ee200c0, 0x14440011, 0x0, -0x8ee200c4, 0xa2102b, 0x14400003, 0x0, 0x1000000b, 0x8ee200c4, -0x8ee200c0, 0x8ee300c4, 0x24040001, 0x24050000, 0x651821, 0x65302b, -0x441021, 0x461021, 0xaee200c0, 0xaee300c4, 0x8f4200fc, 0x8ee400c0, -0x8ee500c4, 0x2406ffff, 0x24070000, 0x401821, 0x1021, 0x862024, -0xa72824, 0x822025, 0xa32825, 0xaee400c0, 0xaee500c4, 0x8f4200f4, -0x402821, 0x8ee200d0, 0x2021, 0x82102b, 0x1440000a, 0x0, -0x8ee200d0, 0x14440011, 0x0, 0x8ee200d4, 0xa2102b, 0x14400003, -0x0, 0x1000000b, 0x8ee200d4, 0x8ee200d0, 0x8ee300d4, 0x24040001, -0x24050000, 0x651821, 0x65302b, 0x441021, 0x461021, 0xaee200d0, -0xaee300d4, 0x8f4200f4, 0x8ee400d0, 0x8ee500d4, 0x2406ffff, 0x24070000, -0x401821, 0x1021, 0x862024, 0xa72824, 0x822025, 0xa32825, -0xaee400d0, 0xaee500d4, 0x8f4200f8, 0x402821, 0x8ee200c8, 0x2021, -0x82102b, 0x1440000a, 0x0, 0x8ee200c8, 0x14440011, 0x0, -0x8ee200cc, 0xa2102b, 0x14400003, 0x0, 0x1000000b, 0x8ee200cc, -0x8ee200c8, 0x8ee300cc, 0x24040001, 0x24050000, 0x651821, 0x65302b, -0x441021, 0x461021, 0xaee200c8, 0xaee300cc, 0x8f4200f8, 0x8ee400c8, -0x8ee500cc, 0x2406ffff, 0x24070000, 0x401821, 0x1021, 0x862024, -0xa72824, 0x822025, 0xa32825, 0xaee400c8, 0xaee500cc, 0x8f440208, -0x8f45020c, 0x2402000f, 0xafa20010, 0xafa00014, 0x8ec20008, 0xafa20018, -0x8ec200a8, 0x26e60028, 0x40f809, 0x24070400, 0x104000f1, 0x3c020400, -0xafa20020, 0x92c20115, 0x10400080, 0x240200ff, 0x8ec3002c, 0x10620004, -0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, -0x1662000a, 0x0, 0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0x1000007f, 0x34a5f00f, 0x8ec2002c, -0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, -0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, -0xa821, 0x241e000d, 0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, -0x24070008, 0xafbe0010, 0xafb30014, 0x840c0, 0x1001821, 0x1021, -0x8ec80008, 0xa32821, 0xa3482b, 0x822021, 0x892021, 0x630c0, -0xafa80018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, -0x24150001, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, -0x32a200ff, 0x54400018, 0xaed3002c, 0x3c040001, 0x24842804, 0xafa00010, -0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f010, 0xc00290f, -0x0, 0x8ec202d0, 0x1821, 0x24420001, 0xaec202d0, 0x1000008f, -0x8ec202d0, 0x8ec2026c, 0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c, -0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, -0x2c4203e9, 0x10400015, 0xa821, 0x24130011, 0x8ec30008, 0x8ee40488, -0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010, 0xafa20014, 0xafa30018, -0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe4, 0x0, -0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee, 0x0, 0x32a200ff, -0x1440006a, 0x24030001, 0x3c040001, 0x24842810, 0xafa00010, 0xafa00014, -0x8f860120, 0x8f870124, 0x3c050009, 0x1000ffcb, 0x34a5f011, 0x8ec3002c, -0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24510001, 0x8821, -0x8f420228, 0x16220011, 0x4021, 0x3c040001, 0x248427d8, 0xafa00010, -0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0x34a5f005, 0xc00290f, -0x0, 0x8ec202a0, 0x1821, 0x24420001, 0xaec202a0, 0x10000047, -0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, -0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, -0x24070008, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0, -0x604821, 0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0, -0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c, -0xaed1002c, 0x3c040001, 0x248427e4, 0xafa00010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001e, 0x1821, -0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011, -0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809, -0x24c6001c, 0x1440000f, 0x24030001, 0x3c040001, 0x248427ec, 0xafa00010, -0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001, -0x8ec202a4, 0x1821, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x1060000d, -0x24020001, 0x8ec2024c, 0xa2c00115, 0xaec000a0, 0x24420001, 0xaec2024c, -0x8ec2024c, 0x8ee2014c, 0x24420001, 0xaee2014c, 0x10000003, 0x8ee2014c, -0x24020001, 0xa2c20115, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, -0x8fb10028, 0x3e00008, 0x27bd0040, 0x27bdffd8, 0xafbf0020, 0x8f8200b0, -0x30420004, 0x1040005e, 0x0, 0x8ec30104, 0x8f820104, 0x14620005, -0x0, 0x8ec3010c, 0x8f8200b4, 0x10620006, 0x0, 0x8f820104, -0xaec20104, 0x8f8200b4, 0x10000051, 0xaec2010c, 0x8f8200b0, 0x3c030080, -0x431024, 0x1040000d, 0x0, 0x8f82011c, 0x34420002, 0xaf82011c, -0x8f8200b0, 0x2403fffb, 0x431024, 0xaf8200b0, 0x8f82011c, 0x2403fffd, -0x431024, 0x10000040, 0xaf82011c, 0x8ec30104, 0x8f820104, 0x14620005, -0x0, 0x8ec3010c, 0x8f8200b4, 0x5062000a, 0x3c050005, 0x8f820104, -0xaec20104, 0x8f8200b4, 0xaec2010c, 0x8ec2010c, 0x3c040001, 0x2484281c, -0x10000029, 0xafa00014, 0x8ec2010c, 0x3c040001, 0x24842828, 0xafa00014, -0xafa20010, 0x8f8600b0, 0x8ec70104, 0xc00290f, 0x34a50900, 0x8f82011c, -0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0, -0xaf830104, 0x8f440208, 0x8f45020c, 0x2402000f, 0xafa20010, 0xafa00014, -0x8ec20008, 0xafa20018, 0x8ec200a8, 0x26e60028, 0x40f809, 0x24070400, -0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201cc, 0x24420001, -0xaee201cc, 0x8ee201cc, 0x8ec2010c, 0x3c040001, 0x24842834, 0xafa00014, -0xafa20010, 0x8f8600b0, 0x8ec70104, 0x3c050005, 0xc00290f, 0x34a50900, -0x8f8200a0, 0x30420004, 0x1040005f, 0x0, 0x8ec30108, 0x8f820124, -0x14620005, 0x0, 0x8ec30110, 0x8f8200a4, 0x10620006, 0x0, -0x8f820124, 0xaec20108, 0x8f8200a4, 0x10000052, 0xaec20110, 0x8f8200a0, -0x3c030080, 0x431024, 0x1040000d, 0x0, 0x8f82011c, 0x34420002, -0xaf82011c, 0x8f8200a0, 0x2403fffb, 0x431024, 0xaf8200a0, 0x8f82011c, -0x2403fffd, 0x431024, 0x10000041, 0xaf82011c, 0x8ec30108, 0x8f820124, -0x14620005, 0x0, 0x8ec30110, 0x8f8200a4, 0x5062000a, 0x3c050005, -0x8f820124, 0xaec20108, 0x8f8200a4, 0xaec20110, 0x8ec20110, 0x3c040001, -0x24842840, 0x1000002a, 0xafa00014, 0x8ec20110, 0x3c040001, 0x2484284c, -0xafa00014, 0xafa20010, 0x8f8600a0, 0x8ec70108, 0xc00290f, 0x34a50900, -0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001, -0xaf8200a0, 0xaf830124, 0x8f440208, 0x8f45020c, 0x24020010, 0xafa20010, -0xafa00014, 0x8ec20010, 0xafa20018, 0x8ec200a4, 0x3c060001, 0x24c634e4, -0x40f809, 0x24070004, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, -0x8ee201cc, 0x24420001, 0xaee201cc, 0x8ee201cc, 0x8ec20110, 0x3c040001, -0x24842858, 0xafa00014, 0xafa20010, 0x8f8600a0, 0x8ec70108, 0x3c050005, -0xc00290f, 0x34a50900, 0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3c091000, -0x24080001, 0x3c070080, 0x3c050100, 0x3c062000, 0x8f820070, 0x491024, -0x1040fffd, 0x0, 0x8f820054, 0x24420005, 0xaf820078, 0x8f420234, -0x10400017, 0x2021, 0x3c020001, 0x571021, 0x8c4281dc, 0x24420005, -0x3c010001, 0x370821, 0xac2281dc, 0x3c020001, 0x571021, 0x8c4281dc, -0x8f430234, 0x43102b, 0x14400009, 0x0, 0x3c040080, 0x3c010001, -0x370821, 0xac2881d4, 0x3c010001, 0x370821, 0x1000000b, 0xac2081dc, -0x3c020001, 0x571021, 0x8c4281d4, 0x54400006, 0x872025, 0x3c020001, -0x571021, 0x8c4281d8, 0x54400001, 0x872025, 0x8f420230, 0x10400014, -0x0, 0x3c020001, 0x571021, 0x8c4281e4, 0x24420005, 0x3c010001, -0x370821, 0xac2281e4, 0x3c020001, 0x571021, 0x8c4281e4, 0x8f430230, -0x43102b, 0x14400006, 0x0, 0x3c010001, 0x370821, 0xac2081e4, -0x10000006, 0x852025, 0x3c020001, 0x571021, 0x8c4281e0, 0x54400001, -0x852025, 0x3c020001, 0x571021, 0x8c4281e8, 0x10400005, 0x0, -0x862025, 0x3c010001, 0x370821, 0xac2081e8, 0x1080ffb1, 0x0, -0x8ec20000, 0x10400007, 0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, -0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x441025, 0xaf820060, 0x8ec20000, 0x10400003, -0x0, 0x1000ff9c, 0xaf80004c, 0x1000ff9a, 0xaf800048, 0x3e00008, -0x0, 0x0, 0x0, 0x0, 0x27bdffe0, 0xafbf0018, -0x8f860064, 0x30c20004, 0x1040001e, 0x24020004, 0xaf820064, 0x8f420114, -0x8ec30000, 0x10600007, 0xaec20014, 0xaf80004c, 0x8f82004c, 0x1040fffd, -0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x34420008, 0xaf820060, 0x8ec20000, 0x10400003, -0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec20260, 0x24420001, -0xaec20260, 0x1000006f, 0x8ec20260, 0x30c20001, 0x10400004, 0x24020001, -0xaf820064, 0x10000069, 0x0, 0x30c20002, 0x1440000b, 0x3c050003, -0x3c040001, 0x24842930, 0x34a50001, 0x3821, 0xafa00010, 0xc00290f, -0xafa00014, 0x2402fff8, 0x1000005c, 0xaf820064, 0x8f43022c, 0x8f42010c, -0x1062004c, 0x0, 0x8f42022c, 0x21080, 0x5a1021, 0x8c440300, -0x8f42022c, 0x24420001, 0x3042003f, 0x41e02, 0xaf42022c, 0x24020003, -0x10620005, 0x24020010, 0x1062001f, 0x30830fff, 0x1000003a, 0x0, -0x8ec30000, 0x30820fff, 0x10600007, 0xaec20038, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x34420200, 0xaf820060, 0x8ec20000, -0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec20210, -0x24420001, 0xaec20210, 0x10000020, 0x8ec20210, 0x8ec20000, 0xaec30054, -0x24030001, 0x10400007, 0xa2c30065, 0xaf80004c, 0x8f82004c, 0x1040fffd, -0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x34420100, 0xaf820060, 0x8ec20000, 0x10400003, -0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec2023c, 0x24420001, -0xaec2023c, 0x10000003, 0x8ec2023c, 0xc001fd6, 0x0, 0x8f43022c, -0x8f42010c, 0x14620002, 0x24020002, 0xaf820064, 0x8f820064, 0x14400005, -0x0, 0x8f43022c, 0x8f42010c, 0x1462ffa6, 0x0, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x3e00008, 0x0, 0x27bdffc0, 0xafb10028, -0x808821, 0x111602, 0x2442ffff, 0x304300ff, 0x2c620011, 0xafbf0038, -0xafbe0034, 0xafb50030, 0x104001ab, 0xafb3002c, 0x31080, 0x3c010001, -0x220821, 0x8c222978, 0x400008, 0x0, 0x111302, 0x30440fff, -0x24020001, 0x10820006, 0x3c030800, 0x24020002, 0x1082000c, 0x3c050003, -0x10000022, 0x0, 0x3c020001, 0x8c423514, 0x21100, 0x21182, -0x431025, 0xae420038, 0x8ee204a8, 0x1000000a, 0x34420001, 0x3c020001, -0x2442c4d0, 0x21100, 0x21182, 0x431025, 0xae420038, 0x8ee204a8, -0x2403fffe, 0x431024, 0xaee204a8, 0xaec40168, 0xaec4016c, 0x8f840054, -0x41442, 0x41c82, 0x431021, 0x41cc2, 0x431023, 0x41d02, -0x431021, 0x41d42, 0x431023, 0x10000009, 0xaec20170, 0x3c040001, -0x2484293c, 0x34a50004, 0x2203021, 0x3821, 0xafa00010, 0xc00290f, -0xafa00014, 0x8ec20208, 0x24420001, 0xaec20208, 0x100001e1, 0x8ec20208, -0xc0022fe, 0x0, 0x100001dd, 0x0, 0xc002419, 0x0, -0x100001d9, 0x0, 0x111302, 0x30430fff, 0x24020001, 0x10620005, -0x24020002, 0x10620016, 0x3c050003, 0x10000021, 0x0, 0x92c2011c, -0x1440000f, 0x24020001, 0x8f820228, 0xaee204ac, 0x8f82022c, 0xaee204b0, -0x8f820230, 0xaee204b4, 0x8f820234, 0xaee204b8, 0x2402ffff, 0xaf820228, -0xaf82022c, 0xaf820230, 0xaf820234, 0x24020001, 0x10000016, 0xa2c2011c, -0x92c2011c, 0x50400013, 0xa2c0011c, 0x8ee204ac, 0xaf820228, 0x8ee204b0, -0xaf82022c, 0x8ee204b4, 0xaf820230, 0x8ee204b8, 0xaf820234, 0x10000009, -0xa2c0011c, 0x3c040001, 0x24842948, 0x34a5f009, 0x2203021, 0x3821, -0xafa00010, 0xc00290f, 0xafa00014, 0x8ec20234, 0x24420001, 0xaec20234, -0x100001a3, 0x8ec20234, 0x111302, 0x30440fff, 0x24020001, 0x10820005, -0x24020002, 0x1082000d, 0x3c050003, 0x10000013, 0x0, 0x8f820220, -0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24020001, -0xa2c2011d, 0x10000011, 0xaec40200, 0x8f820220, 0x3c0308ff, 0x3463fff7, -0x431024, 0xaf820220, 0xa2c0011d, 0x10000009, 0xaec40200, 0x3c040001, -0x24842954, 0x34a5f00a, 0x2203021, 0x3821, 0xafa00010, 0xc00290f, -0xafa00014, 0x8ec20224, 0x24420001, 0xaec20224, 0x1000017b, 0x8ec20224, -0x27840208, 0x27450200, 0xc0029a2, 0x24060008, 0x26c4018c, 0x27450200, -0xc0029a2, 0x24060008, 0x8ec2022c, 0x24420001, 0xaec2022c, 0x1000016e, -0x8ec2022c, 0x111302, 0x30430fff, 0x24020001, 0x10620011, 0x28620002, -0x50400005, 0x24020002, 0x10600007, 0x0, 0x10000017, 0x0, -0x1062000f, 0x0, 0x10000013, 0x0, 0x8f460248, 0x24040001, -0xc0046cc, 0x24050004, 0x10000007, 0x0, 0x8f460248, 0x24040001, -0xc0046cc, 0x24050004, 0x10000010, 0x0, 0x8f46024c, 0x24040001, -0xc0046cc, 0x24050001, 0x1000000a, 0x0, 0x3c040001, 0x24842960, -0x3c050003, 0x34a50005, 0x2203021, 0x3821, 0xafa00010, 0xc00290f, -0xafa00014, 0x8ec20228, 0x24420001, 0xaec20228, 0x1000013f, 0x8ec20228, -0xc002221, 0x0, 0x1000013b, 0x0, 0x24020001, 0xa2c20528, -0x24110014, 0x8ee404a0, 0x8ee504a4, 0xafb10010, 0xafa00014, 0x8ec20010, -0xafa20018, 0x8ec200a4, 0x26e60028, 0x40f809, 0x24070400, 0x1040fff5, -0x0, 0x1000012a, 0x0, 0x3c020900, 0xaec00054, 0xaec00058, -0xaec0005c, 0xaec00060, 0xaec002c0, 0xa2c00065, 0xafa20020, 0x8ec3002c, -0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001, -0x9821, 0x8f420228, 0x1662000f, 0x0, 0x3c040001, 0x2484290c, -0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, -0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x1000006b, 0x8ec202a0, -0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, -0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, -0x1040001e, 0xa821, 0x241e000d, 0x8ec8002c, 0x8ee40428, 0x8ee5042c, -0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014, 0x840c0, 0x1001821, -0x1021, 0x8ec80008, 0xa32821, 0xa3482b, 0x822021, 0x892021, -0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, -0x54400006, 0x24150001, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5, -0x0, 0x32a200ff, 0x54400011, 0xaed3002c, 0x3c040001, 0x24842918, -0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x1000002e, -0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c, -0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, -0x2c4203e9, 0x10400015, 0xa821, 0x24130011, 0x8ec30008, 0x8ee40488, -0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010, 0xafa20014, 0xafa30018, -0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe4, 0x0, -0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee, 0x0, 0x32a200ff, -0x1440000f, 0x0, 0x3c040001, 0x24842924, 0xafa00010, 0xafa00014, -0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0, -0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20218, 0x24420001, -0xaec20218, 0x8ec20218, 0x8ec2025c, 0x24420001, 0xaec2025c, 0x10000096, -0x8ec2025c, 0x8f42025c, 0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200, -0x24060008, 0xc0029a2, 0xaec20160, 0x8f820220, 0x30420008, 0x14400002, -0x24020001, 0x24020002, 0xaec20200, 0x8ec20214, 0x24420001, 0xaec20214, -0x10000083, 0x8ec20214, 0x3c0200ff, 0x96e30462, 0x3442ffff, 0x2222024, -0x3402fffb, 0x44102b, 0x38420001, 0x30630003, 0x2c630001, 0x621824, -0x10600003, 0x0, 0x10000075, 0xaec40050, 0x3c040001, 0x2484296c, -0x3c050003, 0x34a5f00f, 0x2203021, 0x3821, 0xafa00010, 0xc00290f, -0xafa00014, 0x3c030700, 0x34631000, 0x111602, 0x431025, 0xafa20020, -0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, -0x24510001, 0x8821, 0x8f420228, 0x1622000f, 0x4021, 0x3c040001, -0x248428ec, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, -0xc00290f, 0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x10000046, -0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, -0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, -0x24070008, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0, -0x604821, 0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0, -0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c, -0xaed1002c, 0x3c040001, 0x248428f8, 0xafa00010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d, 0x0, -0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011, -0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809, -0x24c6001c, 0x1440000e, 0x0, 0x3c040001, 0x24842900, 0xafa00010, -0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001, -0x8ec202a4, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x8ec20244, 0x24420001, -0xaec20244, 0x8ec20244, 0x8ec20254, 0x24420001, 0xaec20254, 0x8ec20254, -0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008, -0x27bd0040, 0x27bdfff8, 0x2408ffff, 0x10a00014, 0x4821, 0x3c0aedb8, -0x354a8320, 0x90870000, 0x24840001, 0x3021, 0x1071026, 0x30420001, -0x10400002, 0x81842, 0x6a1826, 0x604021, 0x24c60001, 0x2cc20008, -0x1440fff7, 0x73842, 0x25290001, 0x125102b, 0x1440fff0, 0x0, -0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffb8, 0xafbf0040, 0xafbe003c, -0xafb50038, 0xafb30034, 0xafb10030, 0x8f870220, 0xafa70024, 0x8f870200, -0xafa7002c, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004, -0xaf820220, 0x8f820200, 0x3c03c0ff, 0x3463ffff, 0x431024, 0x34420004, -0xaf820200, 0x8ede02bc, 0x8ec702c0, 0xafa70014, 0x8ec702c4, 0xafa7001c, -0x8ec20238, 0x26c40128, 0x24420001, 0xaec20238, 0x8ed10238, 0x8ed3016c, -0x8ed50168, 0xc002990, 0x24050400, 0xaede02bc, 0x8fa70014, 0xaec702c0, -0x8fa7001c, 0xaec702c4, 0xaed10238, 0xaed3016c, 0xaed50168, 0x8f42025c, -0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200, 0x24060008, 0xaec20160, -0x24020006, 0xc0029a2, 0xaec2015c, 0x3c023b9a, 0x3442ca00, 0xaec20164, -0x240203e8, 0x24040002, 0x24030001, 0xaec201fc, 0xaec401f8, 0xaec30204, -0x8f820220, 0x30420008, 0x10400004, 0x0, 0xaec30200, 0x10000003, -0x3021, 0xaec40200, 0x3021, 0x3c030001, 0x661821, 0x90633360, -0x2c61021, 0x24c60001, 0xa0430194, 0x2cc2000f, 0x1440fff8, 0x2c61821, -0x24c60001, 0x8f820040, 0x27440080, 0x24050080, 0x21702, 0x24420030, -0xa0620194, 0x2c61021, 0xc002990, 0xa0400194, 0x8fa70024, 0x30e20004, -0x14400006, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, -0xaf820220, 0x8fa7002c, 0x30e20004, 0x14400006, 0x0, 0x8f820200, -0x3c03c0ff, 0x3463fffb, 0x431024, 0xaf820200, 0x8fbf0040, 0x8fbe003c, -0x8fb50038, 0x8fb30034, 0x8fb10030, 0x3e00008, 0x27bd0048, 0x0, -0x0, 0x0, 0x24040001, 0xa2c0011d, 0xa2c0011c, 0xaec00120, -0x410c0, 0x2e21821, 0x24820001, 0xa46275c0, 0x402021, 0x2c820080, -0x1440fffa, 0x410c0, 0x24020001, 0xa6e079c0, 0xaec20124, 0xaf800228, -0xaf80022c, 0xaf800230, 0xaf800234, 0x3e00008, 0x0, 0x27bdffe0, -0xafbf001c, 0xafb10018, 0x8ec20120, 0x28420005, 0x10400021, 0x808821, -0x8ec20120, 0x3021, 0x18400015, 0x26e371c0, 0x96270000, 0x24640006, -0x9482fffc, 0x14470009, 0x2821, 0x9483fffe, 0x96220002, 0x14620006, -0xa01021, 0x94820000, 0x96230004, 0x431026, 0x2c450001, 0xa01021, -0x1440000b, 0x24c60001, 0x8ec20120, 0xc2102a, 0x1440ffef, 0x24840008, -0x1021, 0x304200ff, 0x14400029, 0x24020001, 0x10000027, 0x1021, -0x1000fffa, 0x24020001, 0x2202021, 0xc002207, 0x24050006, 0x3042007f, -0x218c0, 0x2e31021, 0x944271c0, 0x1040fff4, 0x2e31021, 0x944671c0, -0x10c00019, 0x1021, 0x96270000, 0x610c0, 0x572021, 0x248475c2, -0x94820000, 0x14470009, 0x2821, 0x94830002, 0x96220002, 0x14620006, -0xa01021, 0x94820004, 0x96230004, 0x431026, 0x2c450001, 0xa01021, -0x14400005, 0x610c0, 0x2e21021, 0x944675c0, 0x14c0ffed, 0x610c0, -0x10c0ffd9, 0x24020001, 0x8fbf001c, 0x8fb10018, 0x3e00008, 0x27bd0020, -0x3e00008, 0x0, 0x27bdffc0, 0x27440212, 0x24050006, 0xafbf0038, -0xafbe0034, 0xafb50030, 0xafb3002c, 0xc002207, 0xafb10028, 0x3048007f, -0x810c0, 0x2e21021, 0x944571c0, 0x10a00017, 0x27470212, 0x94e90000, -0x510c0, 0x572021, 0x248475c2, 0x94820000, 0x14490009, 0x3021, -0x94830002, 0x94e20002, 0x14620006, 0xc01021, 0x94820004, 0x94e30004, -0x431026, 0x2c460001, 0xc01021, 0x14400005, 0x510c0, 0x2e21021, -0x944575c0, 0x14a0ffed, 0x510c0, 0xa03021, 0x10c00010, 0x610c0, -0x571821, 0x8c6375c0, 0x571021, 0xafa30010, 0x8c4275c4, 0x3c040001, -0x24842a7c, 0xafa20014, 0x8f460210, 0x8f470214, 0x3c050003, 0xc00290f, -0x34a5f012, 0x10000051, 0x3c020800, 0x8ec50124, 0x10a00004, 0x510c0, -0x2e21021, 0x944275c0, 0xaec20124, 0xa03021, 0x14c0000f, 0x27440212, -0x810c0, 0x2e21021, 0xafa80010, 0x944271c0, 0x3c040001, 0x24842a88, -0xafa20014, 0x8f460210, 0x8f470214, 0x3c050003, 0xc00290f, 0x34a5f013, -0x1000003a, 0x3c020800, 0x628c0, 0x94830000, 0xb71021, 0x244275c2, -0xa4430000, 0x8c830002, 0x820c0, 0xac430002, 0x2e41021, 0x944371c0, -0x2e51021, 0xa44375c0, 0x2e41021, 0xa44671c0, 0x8ec20120, 0x24420001, -0x28420080, 0x1040000c, 0x27440212, 0x8ec20120, 0x94830000, 0x210c0, -0x571021, 0x244271c2, 0xa4430000, 0x8c830002, 0xac430002, 0x8ec20120, -0x24420001, 0xaec20120, 0x92c2011c, 0x1040000d, 0x81942, 0x24020003, -0x431023, 0x21080, 0x572821, 0x571021, 0x3104001f, 0x8c4304ac, -0x24020001, 0x821004, 0x621825, 0x1000000c, 0xaca304ac, 0x24020003, -0x431023, 0x21080, 0x5c2821, 0x5c1021, 0x3104001f, 0x8c430228, -0x24020001, 0x821004, 0x621825, 0xaca30228, 0x3c020800, 0x34421000, -0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, -0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, 0x0, -0x3c040001, 0x24842a58, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0, -0x1000006b, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, -0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8, -0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000d, 0x8ec8002c, -0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014, -0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, 0xa3482b, -0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0, -0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, 0x2221023, -0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, 0xaed3002c, -0x3c040001, 0x24842a64, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, -0x3c050009, 0x1000002e, 0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001, -0xaec2026c, 0x8ec2026c, 0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054, -0x247103e8, 0x2221023, 0x2c4203e9, 0x10400015, 0xa821, 0x24130011, -0x8ec30008, 0x8ee40488, 0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010, -0xafa20014, 0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, -0x1440ffe4, 0x0, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee, -0x0, 0x32a200ff, 0x1440000f, 0x0, 0x3c040001, 0x24842a70, -0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011, -0xc00290f, 0x0, 0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0, -0x8ec2021c, 0x24420001, 0xaec2021c, 0x8ec2021c, 0x8ec20258, 0x24420001, -0xaec20258, 0x8ec20258, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, -0x8fb10028, 0x3e00008, 0x27bd0040, 0x27bdffb0, 0x27440212, 0x24050006, -0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c, 0xc002207, 0xafb10038, -0x3044007f, 0x410c0, 0x2e21021, 0x944771c0, 0x4021, 0x10e00018, -0x27490212, 0x952a0000, 0x710c0, 0x572821, 0x24a575c2, 0x94a20000, -0x144a0009, 0x3021, 0x94a30002, 0x95220002, 0x14620006, 0xc01021, -0x94a20004, 0x95230004, 0x431026, 0x2c460001, 0xc01021, 0x14400006, -0x710c0, 0xe04021, 0x2e21021, 0x944775c0, 0x14e0ffec, 0x710c0, -0xe02821, 0x14a0000f, 0xafa80028, 0x410c0, 0x2e21021, 0xafa40010, -0x944271c0, 0x3c040001, 0x24842a94, 0xafa20014, 0x8f460210, 0x8f470214, -0x3c050003, 0xc00290f, 0x34a5f01c, 0x10000062, 0x3c020800, 0x11000007, -0x510c0, 0x2e21021, 0x944375c0, 0x810c0, 0x2e21021, 0x10000006, -0xa44375c0, 0x2e21021, 0x944375c0, 0x410c0, 0x2e21021, 0xa44371c0, -0x8ec30124, 0x510c0, 0x2e21021, 0x26e871c0, 0xa44375c0, 0x8ec20120, -0x3021, 0x27490212, 0x18400029, 0xaec50124, 0x25070006, 0x94e3fffc, -0x95220000, 0x14620009, 0x2821, 0x94e3fffe, 0x95220002, 0x14620006, -0xa01021, 0x94e20000, 0x95230004, 0x431026, 0x2c450001, 0xa01021, -0x50400014, 0x24c60001, 0x8ec20120, 0x2442ffff, 0xc2102a, 0x1040000b, -0x25050004, 0x94a20006, 0x8ca30008, 0xa4a2fffe, 0xaca30000, 0x8ec20120, -0x24c60001, 0x2442ffff, 0xc2102a, 0x1440fff7, 0x24a50008, 0x8ec20120, -0x2442ffff, 0x10000006, 0xaec20120, 0x8ec20120, 0x24e70008, 0xc2102a, -0x1440ffda, 0x25080008, 0x410c0, 0x2e21021, 0x944271c0, 0x1440001e, -0x3c020800, 0x92c2011c, 0x1040000e, 0x41942, 0x24020003, 0x431023, -0x21080, 0x572821, 0x571021, 0x3084001f, 0x24030001, 0x8c4204ac, -0x831804, 0x31827, 0x431024, 0x1000000d, 0xaca204ac, 0x24020003, -0x431023, 0x21080, 0x5c2821, 0x5c1021, 0x3084001f, 0x24030001, -0x8c420228, 0x831804, 0x31827, 0x431024, 0xaca20228, 0x3c020800, -0x34422000, 0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, -0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, -0x0, 0x3c040001, 0x24842a58, 0xafa00010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, -0xaec202a0, 0x1000006b, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, -0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, -0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000d, -0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, -0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, -0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, -0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, -0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, -0xaed3002c, 0x3c040001, 0x24842a64, 0xafa00010, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0x1000002e, 0x34a5f010, 0x8ec2026c, 0x24150001, -0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001d, 0x32a200ff, 0x8f830054, -0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400015, 0xa821, -0x24130011, 0x8ec30008, 0x8ee40488, 0x8ee5048c, 0x8ec2002c, 0x8f860120, -0xafb30010, 0xafa20014, 0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809, -0x24c6001c, 0x1440ffe4, 0x0, 0x8f820054, 0x2221023, 0x2c4203e9, -0x1440ffee, 0x0, 0x32a200ff, 0x1440000f, 0x0, 0x3c040001, -0x24842a70, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, -0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0, 0x24420001, 0xaec202d0, -0x8ec202d0, 0x8ec20220, 0x24420001, 0xaec20220, 0x8ec20220, 0x8ec20258, -0x24420001, 0xaec20258, 0x8ec20258, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, -0x8fb3003c, 0x8fb10038, 0x3e00008, 0x27bd0050, 0x0, 0x0, -0x27bdffe8, 0x27644000, 0xafbf0010, 0xc002990, 0x24051000, 0x24020020, -0xaf82011c, 0xaf800100, 0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114, -0xaf800118, 0xaf800120, 0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134, -0xaf800138, 0xaec000dc, 0xaec000e0, 0xaec000e4, 0xaec000e8, 0x3c020001, -0x571021, 0x904281ec, 0x1440001d, 0x0, 0x8f82011c, 0x34420001, -0xaf82011c, 0x8f830040, 0x3c02f000, 0x621824, 0x3c025000, 0x10620005, -0x3c026000, 0x1062000b, 0x0, 0x10000010, 0x0, 0x8f420218, -0x30420040, 0x14400009, 0x0, 0x8f820050, 0x3c030010, 0x10000003, -0x431024, 0x8f420218, 0x30420040, 0x10400004, 0x0, 0x8f82011c, -0x34420004, 0xaf82011c, 0x8fbf0010, 0x3e00008, 0x27bd0018, 0x8fa90010, -0x8f83012c, 0x8faa0014, 0x8fab0018, 0x1060000a, 0x24680020, 0x8ec20534, -0x51020001, 0x27684800, 0x8f820128, 0x11020004, 0x0, 0x8f820124, -0x15020007, 0x39220011, 0x8ec30298, 0x1021, 0x24630001, 0xaec30298, -0x10000069, 0x8ec30298, 0xac640000, 0xac650004, 0xac660008, 0xa467000e, -0xac690018, 0xac6a001c, 0xac6b0010, 0x2523ffee, 0x2c630002, 0x2c420001, -0x621825, 0x10600025, 0xaf880120, 0x8ec200e4, 0x210c0, 0x24426fc0, -0x2e22021, 0x8c830000, 0x24020012, 0x1462000f, 0x0, 0x8ec300e4, -0x8ec200e8, 0x1062000b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ec200e8, 0x8ec500e4, 0x24420001, 0x1043002b, 0x0, 0x10000023, -0x0, 0x8ec200e4, 0x24030040, 0x24420001, 0x50430003, 0x1021, -0x8ec200e4, 0x24420001, 0xaec200e4, 0x8ec200e4, 0x210c0, 0x24426fc0, -0x2e22021, 0x10000034, 0x24020012, 0x8ec200e4, 0x210c0, 0x24426fc0, -0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ec300e4, -0x8ec200e8, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, -0x8ec200e8, 0x8ec500e4, 0x24420001, 0x10430007, 0x0, 0x8ec200e8, -0x24420001, 0x10a20005, 0x0, 0x10000007, 0x0, 0x14a00005, -0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, -0x2c420011, 0x50400013, 0xac800000, 0x10000012, 0x24020001, 0x8ec200e4, -0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ec200e4, 0x24420001, -0xaec200e4, 0x8ec200e4, 0x210c0, 0x24426fc0, 0x2e22021, 0x24020007, -0xac820000, 0x24020001, 0xac820004, 0x24020001, 0x3e00008, 0x0, -0x3e00008, 0x0, 0x8faa0010, 0x8fab0014, 0x8f880120, 0x8ec20534, -0x8fac0018, 0x25030020, 0x14620002, 0x604821, 0x27694800, 0x8f820128, -0x1122000c, 0x25030016, 0xad040000, 0xad050004, 0xad060008, 0xa507000e, -0xad0a0018, 0xad0b001c, 0xad030014, 0xad0c0010, 0xaf890120, 0x10000006, -0x24020001, 0x8ec30298, 0x1021, 0x24630001, 0xaec30298, 0x8ec30298, -0x3e00008, 0x0, 0x3e00008, 0x0, 0x8fa90010, 0x8f83010c, -0x8faa0014, 0x8fab0018, 0x1060000a, 0x24680020, 0x27624800, 0x51020001, -0x27684000, 0x8f820108, 0x11020004, 0x0, 0x8f820104, 0x15020007, -0x2522fffb, 0x8ec3029c, 0x1021, 0x24630001, 0xaec3029c, 0x10000051, -0x8ec3029c, 0x2c420002, 0xac640000, 0xac650004, 0xac660008, 0xa467000e, -0xac690018, 0xac6a001c, 0xac6b0010, 0xaf880100, 0x10400037, 0x24030040, -0x8ec200dc, 0x210c0, 0x24426dc0, 0x2e22021, 0x8c830000, 0x24020005, -0x1462001f, 0x0, 0x8ec300dc, 0x8ec200e0, 0x1062001b, 0x24030040, -0x8c820004, 0x24420001, 0xac820004, 0x8ec200e0, 0x8ec500dc, 0x24420001, -0x10430007, 0x0, 0x8ec200e0, 0x24420001, 0x10a20005, 0x0, -0x10000007, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020, -0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400021, 0xac800000, -0x10000020, 0x24020001, 0x8ec200dc, 0x24030040, 0x24420001, 0x50430003, -0x1021, 0x8ec200dc, 0x24420001, 0xaec200dc, 0x8ec200dc, 0x210c0, -0x24426dc0, 0x2e22021, 0x24020005, 0xac820000, 0x1000000e, 0x24020001, -0x8ec200dc, 0x24420001, 0x50430003, 0x1021, 0x8ec200dc, 0x24420001, -0xaec200dc, 0x8ec200dc, 0x210c0, 0x24426dc0, 0x2e22021, 0x24020001, -0xac890000, 0xac820004, 0x24020001, 0x3e00008, 0x0, 0x3e00008, -0x0, 0x8fab0010, 0x8f880100, 0x8faa0014, 0x8fac0018, 0x27624800, -0x25030020, 0x14620002, 0x604821, 0x27694000, 0x8f820108, 0x1122000c, -0x25030016, 0xad040000, 0xad050004, 0xad060008, 0xa507000e, 0xad0b0018, -0xad0a001c, 0xad030014, 0xad0c0010, 0xaf890100, 0x10000006, 0x24020001, -0x8ec3029c, 0x1021, 0x24630001, 0xaec3029c, 0x8ec3029c, 0x3e00008, -0x0, 0x3e00008, 0x0, 0x27bdffe0, 0xafbf0018, 0x8f820104, -0xafa20010, 0x8f820100, 0x3c040001, 0x24842b5c, 0xafa20014, 0x8f8600b0, -0x8f87011c, 0x3c050002, 0xc00290f, 0x34a5f000, 0x8f420218, 0x30420100, -0x10400017, 0x0, 0x8f8200b0, 0x3c030200, 0x431024, 0x10400012, -0x0, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, -0x34420001, 0xaf8200b0, 0xaf830104, 0x8f82011c, 0x2403fffd, 0x431024, -0xaf82011c, 0x8ec20294, 0x24420001, 0xaec20294, 0x10000018, 0x8ec20294, -0x3c040001, 0x24842b68, 0x3405dead, 0x3021, 0x3c070001, 0x24e72b70, -0x24020287, 0xafa20010, 0xc00290f, 0xafa00014, 0x8f82011c, 0x34420002, -0xaf82011c, 0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001, -0x431025, 0xaf820140, 0x8f8200b0, 0x34420001, 0xaf8200b0, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf0018, 0x8f820120, 0xafa20010, -0x8f820124, 0x3c040001, 0x24842b98, 0xafa20014, 0x8f8600a0, 0x8f87011c, -0x3c050001, 0xc00290f, 0x34a5f000, 0x8f420218, 0x30420100, 0x10400017, -0x0, 0x8f8200a0, 0x3c030200, 0x431024, 0x10400012, 0x0, -0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001, -0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, -0x8ec20290, 0x24420001, 0xaec20290, 0x10000018, 0x8ec20290, 0x3c040001, -0x24842b68, 0x3405dead, 0x3021, 0x3c070001, 0x24e72b70, 0x240202a3, -0xafa20010, 0xc00290f, 0xafa00014, 0x8f82011c, 0x34420002, 0xaf82011c, -0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001, 0x431025, -0xaf820140, 0x8f8200a0, 0x34420001, 0xaf8200a0, 0x8fbf0018, 0x3e00008, -0x27bd0020, 0x6021, 0x5021, 0x3021, 0x2821, 0x6821, -0x4821, 0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x1580002e, -0x8f8b011c, 0x11a00014, 0x31620800, 0x8f820120, 0x10460029, 0x0, -0x3c040001, 0x8c8434f0, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004, -0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001, -0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, 0x10400017, 0x0, -0x3c040001, 0x8c8434f0, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004, -0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020, -0xac820010, 0x8d020014, 0x240c0001, 0xc01821, 0xac820014, 0x27624fe0, -0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1540002f, 0x31620100, -0x11200014, 0x31628000, 0x8f820100, 0x1045002a, 0x31620100, 0x3c040001, -0x8c8434ec, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008, -0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240a0001, 0xac820010, -0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, 0x31620100, 0x3c040001, -0x8c8434ec, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008, -0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010, -0x8ce20014, 0x240a0001, 0xa01821, 0xac820014, 0x276247e0, 0x43102b, -0x54400001, 0x27634000, 0x602821, 0x31620100, 0x5440001d, 0x31621000, -0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000, -0x25020020, 0xaf820124, 0x8f880124, 0x6821, 0x11800011, 0x31621000, -0x3c040001, 0x8c8434f0, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084, -0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021, -0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31621000, 0x1440ff82, 0x0, -0x1120000f, 0x31220800, 0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000, -0x3c020002, 0x1221024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4, -0x24e20020, 0xaf820104, 0x8f870104, 0x4821, 0x1140ff70, 0x0, -0x3c040001, 0x8c8434ec, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, -0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5021, -0xaf8200b0, 0x8c890010, 0x1000ff60, 0x8c8e0014, 0x3e00008, 0x0, -0x6021, 0x5821, 0x3021, 0x2821, 0x6821, 0x5021, -0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x3c180100, 0x1580002e, -0x8f89011c, 0x11a00014, 0x31220800, 0x8f820120, 0x10460029, 0x0, -0x3c040001, 0x8c8434f0, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004, -0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001, -0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, 0x10400017, 0x0, -0x3c040001, 0x8c8434f0, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004, -0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020, -0xac820010, 0x8d020014, 0x240c0001, 0xc01821, 0xac820014, 0x27624fe0, -0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1560002f, 0x31220100, -0x11400014, 0x31228000, 0x8f820100, 0x1045002a, 0x31220100, 0x3c040001, -0x8c8434ec, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008, -0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240b0001, 0xac820010, -0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, 0x31220100, 0x3c040001, -0x8c8434ec, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008, -0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010, -0x8ce20014, 0x240b0001, 0xa01821, 0xac820014, 0x276247e0, 0x43102b, -0x54400001, 0x27634000, 0x602821, 0x31220100, 0x5440001d, 0x31221000, -0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000, -0x25020020, 0xaf820124, 0x8f880124, 0x6821, 0x11800011, 0x31221000, -0x3c040001, 0x8c8434f0, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084, -0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021, -0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31221000, 0x14400022, 0x0, -0x1140000f, 0x31420800, 0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000, -0x3c020002, 0x1421024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4, -0x24e20020, 0xaf820104, 0x8f870104, 0x5021, 0x11600010, 0x0, -0x3c040001, 0x8c8434ec, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, -0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5821, -0xaf8200b0, 0x8c8a0010, 0x8c8e0014, 0x8f820070, 0x3c031000, 0x431024, -0x1040ff5c, 0x0, 0x8f820054, 0x24420005, 0xaf820078, 0x8f420234, -0x10400017, 0x2021, 0x3c020001, 0x571021, 0x8c4281dc, 0x24420005, -0x3c010001, 0x370821, 0xac2281dc, 0x3c020001, 0x571021, 0x8c4281dc, -0x8f430234, 0x43102b, 0x14400009, 0x24020001, 0x3c040080, 0x3c010001, -0x370821, 0xac2281d4, 0x3c010001, 0x370821, 0x1000000c, 0xac2081dc, -0x3c020001, 0x571021, 0x8c4281d4, 0x14400006, 0x3c020080, 0x3c020001, -0x571021, 0x8c4281d8, 0x10400002, 0x3c020080, 0x822025, 0x8f420230, -0x10400014, 0x0, 0x3c020001, 0x571021, 0x8c4281e4, 0x24420005, -0x3c010001, 0x370821, 0xac2281e4, 0x3c020001, 0x571021, 0x8c4281e4, -0x8f430230, 0x43102b, 0x14400006, 0x0, 0x3c010001, 0x370821, -0xac2081e4, 0x10000006, 0x982025, 0x3c020001, 0x571021, 0x8c4281e0, -0x54400001, 0x982025, 0x3c020001, 0x571021, 0x8c4281e8, 0x10400005, -0x3c022000, 0x822025, 0x3c010001, 0x370821, 0xac2081e8, 0x1080ff0f, -0x0, 0x8ec20000, 0x10400007, 0x0, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x441025, 0xaf820060, 0x8ec20000, -0x10400003, 0x0, 0x1000fefa, 0xaf80004c, 0x1000fef8, 0xaf800048, -0x3e00008, 0x0, 0x0, 0x0, 0x3c020001, 0x8c423388, -0x27bdffe8, 0xafbf0014, 0x14400012, 0xafb10010, 0x3c110001, 0x26313590, -0x2202021, 0xc002990, 0x24052000, 0x26221fe0, 0x3c010001, 0xac2234f8, -0x3c010001, 0xac2234f4, 0xaf420250, 0x24022000, 0xaf510254, 0xaf420258, -0x24020001, 0x3c010001, 0xac223388, 0x8fbf0014, 0x8fb10010, 0x3e00008, -0x27bd0018, 0x3c030001, 0x8c6334f8, 0x8c820000, 0x8fa80010, 0x8fa90014, -0xac620000, 0x3c020001, 0x8c4234f8, 0x8c830004, 0xac430004, 0xac450008, -0x8f840054, 0x2443ffe0, 0xac460010, 0xac470014, 0xac480018, 0xac49001c, -0x3c010001, 0xac2334f8, 0xac44000c, 0x3c020001, 0x24423590, 0x62182b, -0x10600005, 0x0, 0x3c020001, 0x8c4234f4, 0x3c010001, 0xac2234f8, -0x3c030001, 0x8c6334f8, 0x3c020001, 0x8c423370, 0xac620000, 0x3c030001, -0x8c6334f8, 0x3c020001, 0x8c423370, 0xac620004, 0x3e00008, 0xaf430250, -0x27bdffd8, 0xafb10010, 0x808821, 0x3c030001, 0x8c6334f8, 0x3c020001, -0x8c423370, 0x8fa40040, 0xafb30014, 0xa09821, 0xafbf0020, 0xafbe001c, -0xafb50018, 0xac620000, 0x3c050001, 0x8ca534f8, 0x3c020001, 0x8c423370, -0xc0a821, 0xe0f021, 0x10800006, 0xaca20004, 0x24a50008, 0xc002998, -0x24060018, 0x10000004, 0x0, 0x24a40008, 0xc002990, 0x24050018, -0x3c020001, 0x8c4234f8, 0x3c050001, 0x24a53590, 0x2442ffe0, 0x3c010001, -0xac2234f8, 0x45102b, 0x10400005, 0x0, 0x3c020001, 0x8c4234f4, -0x3c010001, 0xac2234f8, 0x3c030001, 0x8c6334f8, 0x8e220000, 0xac620000, -0x3c030001, 0x8c6334f8, 0x8e220004, 0xac620004, 0xac730008, 0x8f840054, -0xac750010, 0xac7e0014, 0x8fa80038, 0xac680018, 0x8fa8003c, 0x2462ffe0, -0x3c010001, 0xac2234f8, 0x45102b, 0xac68001c, 0x10400005, 0xac64000c, -0x3c020001, 0x8c4234f4, 0x3c010001, 0xac2234f8, 0x3c030001, 0x8c6334f8, -0x3c020001, 0x8c423370, 0xac620000, 0x3c030001, 0x8c6334f8, 0x3c020001, -0x8c423370, 0xac620004, 0xaf430250, 0x8fbf0020, 0x8fbe001c, 0x8fb50018, -0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0028, 0x10a00005, 0x0, -0xac800000, 0x24a5fffc, 0x14a0fffd, 0x24840004, 0x3e00008, 0x0, -0x10c00007, 0x0, 0x8c820000, 0x24840004, 0x24c6fffc, 0xaca20000, -0x14c0fffb, 0x24a50004, 0x3e00008, 0x0, 0x10c00007, 0x0, -0x8ca20000, 0x24a50004, 0x24c6fffc, 0xac820000, 0x14c0fffb, 0x24840004, -0x3e00008, 0x0, 0x63080, 0x861821, 0x83102b, 0x10400006, -0x0, 0xac850000, 0x24840004, 0x83102b, 0x5440fffd, 0xac850000, -0x3e00008, 0x0, 0x27bdffc0, 0xafbf0038, 0xafb30034, 0xafb10030, -0x8ec3001c, 0x8ec20014, 0x10620137, 0x0, 0x8ec2001c, 0x8ee304bc, -0x21100, 0x622021, 0x9493000a, 0x8c880000, 0x8c890004, 0x1312c2, -0x30460001, 0xafa80028, 0xafa9002c, 0x94910008, 0x8ec20078, 0x8ec30088, -0x3225ffff, 0x451021, 0x62182b, 0x10600017, 0x0, 0x8f8200d8, -0x8ec30074, 0x431023, 0x2442fff8, 0xaec20088, 0x8ec20088, 0x4410004, -0x0, 0x8ec3053c, 0x431021, 0xaec20088, 0x8ec20078, 0x8ec30088, -0x451021, 0x62182b, 0x10600006, 0x0, 0x8ec202ac, 0x24420001, -0xaec202ac, 0x1000010e, 0x8ec202ac, 0x8f8200fc, 0x14400006, 0x0, -0x8ec202a8, 0x24420001, 0xaec202a8, 0x10000106, 0x8ec202a8, 0x92c20529, -0x1040000b, 0x32620200, 0x1040000a, 0x32620004, 0x96e20452, 0x30420010, -0x10400005, 0x3c028000, 0xaec2052c, 0x9482000e, 0x21400, 0xaec20530, -0x32620004, 0x104000a8, 0x30c200ff, 0x10400003, 0x3227ffff, 0x10000002, -0x24020017, 0x24020006, 0xafa20010, 0x8ec2001c, 0xafa20014, 0x8ec2000c, -0x8fa40028, 0x8fa5002c, 0x3c030002, 0x431025, 0xafa20018, 0x8ec60080, -0x8ec200a4, 0x40f809, 0x0, 0x5440000b, 0x3225ffff, 0x8fa9002c, -0xafa90010, 0x8ec20080, 0x3c040001, 0x24842e5c, 0x3c050004, 0xafa20014, -0x8ec6001c, 0x100000a5, 0x34a5f004, 0x8ec20078, 0x451021, 0xaec20078, -0x8ec2001c, 0x8ee304bc, 0x8ec40074, 0x21100, 0x431021, 0xac44000c, -0x8ec30074, 0xafa30020, 0x8ec40078, 0xafa40024, 0x8ec2052c, 0x10400006, -0x3c024000, 0x621025, 0xafa20020, 0x8ec20530, 0x821025, 0xafa20024, -0x8ec20080, 0x8ec30078, 0x2406fff8, 0x451021, 0x24420007, 0x461024, -0x24630007, 0xaec20074, 0x8ec20088, 0x8ec40074, 0x8ec50538, 0x661824, -0x431023, 0x85202b, 0x14800005, 0xaec20088, 0x8ec20074, 0x8ec3053c, -0x431023, 0xaec20074, 0x8ec20074, 0xaec20080, 0x8f8600fc, 0x14c00007, -0x0, 0x8ec202a8, 0x1821, 0x24420001, 0xaec202a8, 0x10000008, -0x8ec202a8, 0x8fa20020, 0x8fa30024, 0xacc20000, 0xacc30004, 0x24c20008, -0xaf8200f0, 0x24030001, 0x14600012, 0x131142, 0x8f8200f0, 0xafa20010, -0x8f8200f4, 0x3c040001, 0x24842e68, 0xafa20014, 0x8fa60020, 0x8fa70024, -0x3c050004, 0xc00290f, 0x34a5f005, 0x8ec20180, 0x24420001, 0xaec20180, -0x8ec20180, 0x10000039, 0x24020001, 0x30430003, 0x24020002, 0x10620016, -0x28620003, 0x10400005, 0x24020001, 0x10620008, 0x0, 0x10000023, -0x0, 0x24020003, 0x10620017, 0x0, 0x1000001e, 0x0, -0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001, 0x441021, 0xaec201e0, -0xaec301e4, 0x8ec201e0, 0x10000014, 0x8ec301e4, 0x8ec201e8, 0x8ec301ec, -0x24630001, 0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8, -0x1000000a, 0x8ec301ec, 0x8ec201f0, 0x8ec301f4, 0x24630001, 0x2c640001, -0x441021, 0xaec201f0, 0xaec301f4, 0x8ec201f0, 0x8ec301f4, 0x8ec20078, -0x8ec401d8, 0x8ec501dc, 0x401821, 0x1021, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0xaec401d8, 0xaec501dc, 0x24020001, 0xaec00078, -0x1000002f, 0xa2c20529, 0x3227ffff, 0x10e0002c, 0x0, 0x14400002, -0x24020016, 0x24020005, 0xafa20010, 0x8ec2001c, 0x8fa40028, 0x8fa5002c, -0xafa20014, 0x8ec2000c, 0xafa20018, 0x8ec60080, 0x8ec200a4, 0x40f809, -0x0, 0x1440000d, 0x3225ffff, 0x3c040001, 0x24842e74, 0x8fa8002c, -0x3c050004, 0xafa00014, 0xafa80010, 0x8ec6001c, 0x34a5f007, 0xc00290f, -0x2203821, 0x10000030, 0x0, 0x8ec20080, 0x8ec40538, 0x451021, -0xaec20080, 0x8ec20078, 0x8ec30080, 0x451021, 0x64182b, 0x14600005, -0xaec20078, 0x8ec20080, 0x8ec3053c, 0x431023, 0xaec20080, 0xa2c00529, -0x8ec3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824, 0xaec3001c, -0x8ec3001c, 0x8ec20014, 0x14620017, 0x0, 0x8ec20000, 0x10400007, -0x2403fff7, 0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, -0x0, 0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060, -0x431024, 0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002, -0xaf80004c, 0xaf800048, 0x8fbf0038, 0x8fb30034, 0x8fb10030, 0x3e00008, -0x27bd0040, 0x3e00008, 0x0, 0x27bdffd0, 0xafbf002c, 0xafb10028, -0x8ec3001c, 0x8ec20014, 0x106200f0, 0x0, 0x8ec2001c, 0x8ee304bc, -0x21100, 0x622821, 0x8caa0000, 0x8cab0004, 0x94a7000a, 0xafaa0020, -0xafab0024, 0x94b10008, 0x71ac2, 0x8ec20088, 0x3224ffff, 0x44102a, -0x10400017, 0x30680001, 0x8f8200d8, 0x8ec30080, 0x431023, 0x2442fff8, -0xaec20088, 0x8ec20088, 0x2842fff9, 0x10400005, 0x0, 0x8ec20088, -0x8ec3053c, 0x431021, 0xaec20088, 0x8ec20088, 0x44102a, 0x10400006, -0x0, 0x8ec202ac, 0x24420001, 0xaec202ac, 0x100000ca, 0x8ec202ac, -0x8f8400fc, 0x1080000c, 0x0, 0x8f8200f4, 0x2403fff8, 0x431024, -0x441023, 0x218c3, 0x50600001, 0x24030100, 0x8ec20070, 0x43102b, -0x14400006, 0x0, 0x8ec202a8, 0x24420001, 0xaec202a8, 0x100000b7, -0x8ec202a8, 0x92c20021, 0x1040000f, 0x0, 0x8ec2000c, 0x34460400, -0x30e20200, 0x1040000b, 0x0, 0x96e20452, 0x30420010, 0x10400007, -0x3c028000, 0xaec2052c, 0x94a2000e, 0x21400, 0x10000002, 0xaec20530, -0x8ec6000c, 0x8ec2001c, 0x8ee304bc, 0x8ec40074, 0x21100, 0x431021, -0xac44000c, 0x30e20004, 0x50400050, 0x3227ffff, 0x8ec2052c, 0x10400013, -0x0, 0x11000003, 0x3227ffff, 0x10000002, 0x24020018, 0x24020015, -0xafa20010, 0x8ec3001c, 0x8ec40530, 0x3c020002, 0xc21025, 0xafa20018, -0x641825, 0xafa30014, 0x8ec60080, 0x8ec200a4, 0x8fa40020, 0x10000010, -0x8fa50024, 0x11000003, 0x3227ffff, 0x10000002, 0x24020017, 0x24020006, -0xafa20010, 0x8ec2001c, 0x8fa40020, 0x8fa50024, 0x3c030002, 0xc31825, -0xafa30018, 0xafa20014, 0x8ec60080, 0x8ec200a4, 0x40f809, 0x0, -0x1440000b, 0x24030001, 0x8fab0024, 0xafab0010, 0x8ec20080, 0x3c040001, -0x24842e5c, 0x3c050004, 0xafa20014, 0x8ec60018, 0x10000037, 0x34a5f004, -0x8ec40070, 0x8ec20080, 0x8ec50538, 0x2406fff8, 0xa2c30021, 0xaec0052c, -0xaec00530, 0x24840001, 0xaec40070, 0x3224ffff, 0x441021, 0x24420007, -0x461024, 0x24840007, 0xaec20074, 0x8ec20088, 0x8ec30074, 0x862024, -0x441023, 0x65182b, 0x14600005, 0xaec20088, 0x8ec20074, 0x8ec3053c, -0x431023, 0xaec20074, 0x8ec20074, 0x1000002d, 0xaec20080, 0x10e0002b, -0x0, 0x15000002, 0x24020016, 0x24020005, 0xafa20010, 0x8ec2001c, -0x8fa40020, 0x8fa50024, 0xafa60018, 0xafa20014, 0x8ec60080, 0x8ec200a4, -0x40f809, 0x0, 0x1440000d, 0x3225ffff, 0x3c040001, 0x24842e74, -0x8faa0024, 0x3c050004, 0xafa00014, 0xafaa0010, 0x8ec60018, 0x34a5f007, -0xc00290f, 0x2203821, 0x10000030, 0x0, 0x8ec20080, 0x8ec40538, -0x451021, 0xaec20080, 0x8ec20088, 0x8ec30080, 0xa2c00021, 0x451023, -0x64182b, 0x14600005, 0xaec20088, 0x8ec20080, 0x8ec3053c, 0x431023, -0xaec20080, 0x8ec3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824, -0xaec3001c, 0x8ec3001c, 0x8ec20014, 0x14620017, 0x0, 0x8ec20000, -0x10400007, 0x2403fff7, 0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x431024, 0xaf820060, 0x8ec20000, 0x10400003, 0x0, -0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf002c, 0x8fb10028, 0x3e00008, -0x27bd0030, 0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020, -0x8f820100, 0x8ec300e0, 0x8f820104, 0x8f850108, 0x24020040, 0x24630001, -0x50620003, 0x1021, 0x8ec200e0, 0x24420001, 0xaec200e0, 0x8ec200e0, -0x8ec300e0, 0x210c0, 0x24426dc0, 0x2e22021, 0x8ec200dc, 0x8c870004, -0x14620007, 0xa03021, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, -0x10000011, 0xac800000, 0x8ec200e0, 0x24030040, 0x24420001, 0x50430003, -0x1021, 0x8ec200e0, 0x24420001, 0x210c0, 0x24426dc0, 0x2e22021, -0x8c820004, 0x8f830108, 0x21140, 0x621821, 0xaf830108, 0xac800000, -0x8cc50018, 0x24a2fffb, 0x2c420002, 0x1040004c, 0x24a2ffea, 0x8cc2001c, -0x96e30450, 0x8ec40024, 0x24420001, 0x2463ffff, 0x431024, 0x872021, -0xaec20018, 0xaec40024, 0x8ec20024, 0x8f43023c, 0x43102b, 0x144000ec, -0x0, 0x96e20452, 0x8ed10018, 0x30420020, 0x1040001e, 0x24070008, -0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, -0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, -0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x1040004a, -0x24020001, 0x3c010001, 0x370821, 0x1000006f, 0xac2281d0, 0x8ee40498, -0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, -0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, -0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x1040004f, 0x24020001, -0x10000051, 0x0, 0x2c420002, 0x10400062, 0x24a2fffe, 0x8cc2001c, -0x96e30450, 0x8ec40024, 0x24420001, 0x2463ffff, 0x431024, 0x872021, -0xaec20018, 0xaec40024, 0x96e20452, 0x8ed10018, 0x30420020, 0x10400023, -0x24070008, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019, -0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, -0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, -0x14400006, 0x24020001, 0x24020001, 0x3c010001, 0x370821, 0x10000031, -0xac2281d8, 0x3c010001, 0x370821, 0x10000021, 0xac2281d0, 0x8ee40498, -0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, -0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, -0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, -0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001, -0x3c010001, 0x370821, 0x10000010, 0xac2281d4, 0x3c010001, 0x370821, -0xac2081d0, 0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821, -0xac2081d4, 0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264, -0x8ec20264, 0x8ec20278, 0x24420001, 0xaec20278, 0x1000004b, 0x8ec20278, -0x2c420002, 0x10400027, 0x24030040, 0x8ec20034, 0x24420001, 0x50430003, -0x1021, 0x8ec20034, 0x24420001, 0xaec20034, 0x8ec20034, 0x21080, -0x571021, 0x8c440cc0, 0x24020003, 0x14a2000d, 0x0, 0x92c20065, -0x50400037, 0x36940040, 0x8ec202c0, 0x8ec3005c, 0x441021, 0xaec202c0, -0x8ec202c4, 0x641821, 0x306300ff, 0x10000009, 0xaec3005c, 0x8ec202bc, -0x8ec3003c, 0x441021, 0xaec202bc, 0x8ec202c4, 0x641821, 0x306301ff, -0xaec3003c, 0x441021, 0xaec202c4, 0x10000022, 0x36940040, 0x24020014, -0x14a20014, 0x24020010, 0x3c020001, 0x8c423334, 0x1040000a, 0x26e50028, -0x26c40128, 0x240300ff, 0x2406ffff, 0x8ca20000, 0x24a50004, 0x2463ffff, -0xac820000, 0x1466fffb, 0x24840004, 0x8ec20240, 0xa2c00528, 0x24420001, -0xaec20240, 0x1000000c, 0x8ec20240, 0x10a2000a, 0x3c050008, 0x94c7000e, -0x8cc2001c, 0x3c040001, 0x24842e80, 0xafa60014, 0xafa20010, 0x8cc60018, -0xc00290f, 0x34a50910, 0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, -0x3e00008, 0x0, 0x27bdff80, 0xafbf0078, 0xafbe0074, 0xafb50070, -0xafb3006c, 0xafb10068, 0x8f820104, 0x8f950108, 0xafa00034, 0x12a2039b, -0xafa0003c, 0x8f820108, 0x24420020, 0xaf820108, 0x8ead0018, 0xafad0044, -0x8f820108, 0x39a30015, 0x2c630001, 0x39a20018, 0x2c420001, 0x621825, -0x10600009, 0x3c0d8000, 0x8ea2001c, 0x3c03ffff, 0xafad0034, 0x431824, -0x3042ffff, 0xafa3003c, 0x10000009, 0xaea2001c, 0x8fad0044, 0x39a30006, -0x2c630001, 0x39a20017, 0x2c420001, 0x621825, 0x1060028d, 0x24020005, -0x96a20016, 0x8ead001c, 0xaea20014, 0xafad0054, 0x8ee204bc, 0xd1900, -0x8ee404bc, 0x621021, 0x9442000a, 0xafa2004c, 0x92c20090, 0x641821, -0x14400003, 0x8c71000c, 0xaed1009c, 0xaecd0094, 0x8ec20538, 0x2625000c, -0xa2102b, 0x14400003, 0x0, 0x8ec2053c, 0xa22823, 0x94a30000, -0x24020800, 0x1462014c, 0x0, 0x8fad004c, 0x31a20002, 0x10400045, -0x9821, 0x96e20452, 0x30420002, 0x10400041, 0x2629000e, 0x8ec60538, -0x8ec7053c, 0x126102b, 0x50400001, 0x1274823, 0x25220014, 0x46102b, -0x10400027, 0x24030005, 0x91220000, 0x3042000f, 0x14430024, 0x1202021, -0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000, 0x25290002, -0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000, 0x25290002, -0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021, 0x1475021, -0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000, 0x95230002, -0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, 0x625021, -0xa1c02, 0x3142ffff, 0x10000008, 0x625021, 0x1202021, 0x90850000, -0x8ec200ac, 0x30a5000f, 0x40f809, 0x52840, 0x304affff, 0x8ec20538, -0x26250018, 0xa2102b, 0x14400003, 0x3153ffff, 0x8ec2053c, 0xa22823, -0x131027, 0xa4a20000, 0x8fad004c, 0x31a20001, 0x10400101, 0x0, -0x96e20452, 0x30420001, 0x104000fd, 0x31a20080, 0x10400008, 0x0, -0x92c20090, 0x14400005, 0x24020001, 0xa2c20090, 0x8fad0054, 0xaed1009c, -0xaecd0094, 0x8ec3009c, 0x8ec20538, 0x24650017, 0xa2102b, 0x14400003, -0x0, 0x8ec2053c, 0xa22823, 0x90a50000, 0xa3a5005f, 0x93a6005f, -0x38c30006, 0x3182b, 0x38c20011, 0x2102b, 0x621824, 0x1060000c, -0x3c050008, 0x8fad0054, 0xafad0010, 0x8ec2009c, 0x3c040001, 0x24842e8c, -0xafa20014, 0x8ec70094, 0xc00290f, 0x34a5f055, 0x100000d7, 0x0, -0x96e20452, 0x30420008, 0x1040000c, 0x2625000e, 0x8ec20538, 0xa2102b, -0x14400003, 0xf021, 0x8ec2053c, 0xa22823, 0x90a20000, 0x3042000f, -0x21080, 0x10000068, 0xafa20028, 0x8ec20094, 0x8fad0054, 0x11a20013, -0x26240010, 0x8ec30538, 0x8ec5053c, 0x83102b, 0x14400002, 0x2626000e, -0x852023, 0x94870000, 0xc02021, 0x83102b, 0x50400001, 0x852023, -0x90820000, 0x3042000f, 0x21080, 0xe21823, 0x307effff, 0x10000052, -0xafa20028, 0x8ec30538, 0x2625000e, 0x8ec4053c, 0xa3102b, 0x50400001, -0xa42823, 0x24a20014, 0x43102b, 0x10400015, 0xa03821, 0x90a20000, -0x94a30002, 0x3042000f, 0x21080, 0x623023, 0xafa20028, 0x90a30009, -0x24a5000c, 0x94a20000, 0x24a50002, 0x94a40000, 0x24a50002, 0xc33021, -0xc23021, 0x94a20000, 0x94a30002, 0xc43021, 0xc23021, 0x1000002d, -0xc33021, 0x24a50002, 0xa3102b, 0x50400001, 0xa42823, 0x94a60000, -0xe02821, 0xa3102b, 0x50400001, 0xa42823, 0x90a20000, 0x24e50009, -0x3042000f, 0x21080, 0xc23023, 0xafa20028, 0xa3102b, 0x50400001, -0xa42823, 0x90a20000, 0x24e5000c, 0xc23021, 0xa3102b, 0x50400001, -0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001, -0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001, -0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001, -0xa42823, 0x94a20000, 0xc23021, 0x61c02, 0x30c2ffff, 0x623021, -0x61402, 0x30c3ffff, 0x431021, 0x305effff, 0x8ec60538, 0x8ec7053c, -0x226102b, 0x14400002, 0x2204021, 0x2274023, 0x2502000e, 0x46102b, -0x1040001a, 0x1002021, 0x95060000, 0x25080002, 0x95050000, 0x25080002, -0x95030000, 0x25080002, 0x95020000, 0x25080002, 0x95040000, 0x25080002, -0xc53021, 0xc33021, 0xc23021, 0x95020000, 0x95030002, 0xc43021, -0xc23021, 0xc33021, 0x61c02, 0x30c2ffff, 0x623021, 0x61c02, -0x30c2ffff, 0x10000005, 0x623021, 0x8ec200ac, 0x40f809, 0x24050007, -0x3046ffff, 0x30c2ffff, 0x2629821, 0x131c02, 0x3262ffff, 0x629821, -0x131c02, 0x8ea40014, 0x3262ffff, 0x629821, 0x9e2021, 0x41c02, -0x3082ffff, 0x622021, 0x932023, 0x41402, 0x822021, 0x3084ffff, -0x50800001, 0x3404ffff, 0x93a3005f, 0x24020006, 0x14620006, 0x0, -0x8fa20028, 0x8ec3009c, 0x431021, 0x10000005, 0x2445001e, 0x8fa20028, -0x8ec3009c, 0x431021, 0x24450014, 0x8ec20538, 0xa2102b, 0x14400003, -0x0, 0x8ec2053c, 0xa22823, 0x8ec20094, 0x8fad0054, 0x11a20006, -0x0, 0x94a20000, 0x822021, 0x41c02, 0x3082ffff, 0x622021, -0x8fad004c, 0x31a20100, 0x14400005, 0x41027, 0x92c20090, 0x54400004, -0xa4a40000, 0x41027, 0x3044ffff, 0xa4a40000, 0x96a3000e, 0x8ec20078, -0x431021, 0xaec20078, 0xafb10020, 0x8ec30078, 0x8fad0034, 0x11a00007, -0xafa30024, 0x8fad003c, 0x3c024000, 0x2221025, 0xafa20020, 0x6d1025, -0xafa20024, 0x8fad004c, 0x31a20080, 0x1040000c, 0x31a20100, 0x8ee279cc, -0x24430001, 0x210c0, 0x571021, 0xaee379cc, 0x8fa30020, 0x8fa40024, -0xac4379d0, 0xac4479d4, 0x100000ba, 0xaec00078, 0x1040006b, 0x0, -0x8ee279cc, 0x24430001, 0x210c0, 0x571021, 0xaee379cc, 0x8fa30020, -0x8fa40024, 0xac4379d0, 0xac4479d4, 0x8ee279cc, 0x10400058, 0x4821, -0x3c0a001f, 0x354affff, 0x240cffff, 0x340bffff, 0x4021, 0x8f8700fc, -0x1173021, 0x14e00007, 0x24c679d0, 0x8ec202a8, 0x1821, 0x24420001, -0xaec202a8, 0x10000008, 0x8ec202a8, 0x8cc20000, 0x8cc30004, 0xace20000, -0xace30004, 0x24e20008, 0xaf8200f0, 0x24030001, 0x14600006, 0x2e81021, -0x8ec20180, 0x24420001, 0xaec20180, 0x10000036, 0x8ec20180, 0x944279d6, -0x8ec401d8, 0x8ec501dc, 0x401821, 0x1021, 0xa32821, 0xa3302b, -0x822021, 0x862021, 0x2e81021, 0xaec401d8, 0xaec501dc, 0x8c4279d0, -0x4a1824, 0x90620000, 0x30420001, 0x1040001b, 0x0, 0x8c620000, -0x144c000e, 0x0, 0x94620004, 0x144b000b, 0x0, 0x8ec201f0, -0x8ec301f4, 0x24630001, 0x2c640001, 0x441021, 0xaec201f0, 0xaec301f4, -0x8ec201f0, 0x10000014, 0x8ec301f4, 0x8ec201e8, 0x8ec301ec, 0x24630001, -0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8, 0x1000000a, -0x8ec301ec, 0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001, 0x441021, -0xaec201e0, 0xaec301e4, 0x8ec201e0, 0x8ec301e4, 0x8ee279cc, 0x25290001, -0x122102b, 0x1440ffaf, 0x25080008, 0x8ec20070, 0xa2c00090, 0x8ee379cc, -0x431023, 0xaec20070, 0x1000004d, 0xaee079cc, 0x8f8600fc, 0x14c00007, -0x0, 0x8ec202a8, 0x1821, 0x24420001, 0xaec202a8, 0x10000008, -0x8ec202a8, 0x8fa20020, 0x8fa30024, 0xacc20000, 0xacc30004, 0x24c20008, -0xaf8200f0, 0x24030001, 0x14600006, 0x0, 0x8ec20180, 0x24420001, -0xaec20180, 0x10000033, 0x8ec20180, 0x8ec20078, 0x8ec401d8, 0x8ec501dc, -0x401821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, -0xaec401d8, 0xaec501dc, 0x92220000, 0x30420001, 0x1040001b, 0x2402ffff, -0x8e230000, 0x1462000e, 0x3402ffff, 0x96230004, 0x1462000b, 0x0, -0x8ec201f0, 0x8ec301f4, 0x24630001, 0x2c640001, 0x441021, 0xaec201f0, -0xaec301f4, 0x8ec201f0, 0x10000014, 0x8ec301f4, 0x8ec201e8, 0x8ec301ec, -0x24630001, 0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8, -0x1000000a, 0x8ec301ec, 0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001, -0x441021, 0xaec201e0, 0xaec301e4, 0x8ec201e0, 0x8ec301e4, 0x8ec20070, -0x2442ffff, 0xaec20070, 0xaec00078, 0x8ea2001c, 0x96e30450, 0x8ec40024, -0x24420001, 0x2463ffff, 0x431024, 0x24840001, 0xaec20018, 0xaec40024, -0x8f42023c, 0x82202b, 0x10800006, 0x0, 0x8fad0044, 0x25a2ffe9, -0x2c420002, 0x1040012f, 0x0, 0x96e20452, 0x8ed10018, 0x30420020, -0x1040001e, 0x24070008, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, -0x24020019, 0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, -0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, -0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, -0x1021, 0x1040008f, 0x24020001, 0x3c010001, 0x370821, 0x100000b4, -0xac2281d0, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, -0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, -0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, -0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, -0x10400094, 0x24020001, 0x10000096, 0x0, 0x15a20043, 0x24020016, -0x96a3000e, 0x8ec20078, 0x8ec40024, 0x431021, 0xaec20078, 0x8ea3001c, -0x96e20450, 0x24840001, 0xaec40024, 0x24630001, 0x2442ffff, 0x621824, -0xaec30018, 0x8f42023c, 0x82202b, 0x148000df, 0x0, 0x96e20452, -0x8ed10018, 0x30420020, 0x1040001e, 0x24070008, 0x8ee40498, 0x8ee5049c, -0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, 0xafb10014, 0xafa30018, -0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001, -0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, -0xc00290f, 0x34a5f006, 0x1021, 0x1040003f, 0x24020001, 0x3c010001, -0x370821, 0x10000064, 0xac2281d0, 0x8ee40498, 0x8ee5049c, 0x8ec30008, -0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, -0x40f809, 0x24c6001c, 0x1040ffb1, 0x0, 0x1000ffb9, 0x24020001, -0x8fad0044, 0x15a20063, 0x25a2fffe, 0x96a3000e, 0x8ec20078, 0x431021, -0xaec20078, 0x8ea3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824, -0xaec30018, 0x96e20452, 0x8ed10018, 0x30420020, 0x10400023, 0x24070008, -0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, -0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, -0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400006, -0x24020001, 0x24020001, 0x3c010001, 0x370821, 0x10000031, 0xac2281d8, -0x3c010001, 0x370821, 0x10000021, 0xac2281d0, 0x8ee40498, 0x8ee5049c, -0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, 0xafa30018, -0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001, -0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, -0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001, 0x3c010001, -0x370821, 0x10000010, 0xac2281d4, 0x3c010001, 0x370821, 0xac2081d0, -0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821, 0xac2081d4, -0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264, 0x8ec20264, -0x8ec20278, 0x24420001, 0xaec20278, 0x10000049, 0x8ec20278, 0x2c420002, -0x10400028, 0x24030040, 0x8ec20034, 0x24420001, 0x50430003, 0x1021, -0x8ec20034, 0x24420001, 0xaec20034, 0x8ec20034, 0x8ea30018, 0x21080, -0x571021, 0x8c440cc0, 0x24020003, 0x1462000d, 0x0, 0x92c20065, -0x50400034, 0x36940040, 0x8ec202c0, 0x8ec3005c, 0x441021, 0xaec202c0, -0x8ec202c4, 0x641821, 0x306300ff, 0x10000009, 0xaec3005c, 0x8ec202bc, -0x8ec3003c, 0x441021, 0xaec202bc, 0x8ec202c4, 0x641821, 0x306301ff, -0xaec3003c, 0x441021, 0xaec202c4, 0x1000001f, 0x36940040, 0x8fad0044, -0x24020014, 0x15a20010, 0x24020010, 0x3c020001, 0x8c423334, 0x10400017, -0x26e50028, 0x26c40128, 0x240300ff, 0x2406ffff, 0x8ca20000, 0x24a50004, -0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x1000000c, 0x0, -0x11a2000a, 0x3c050008, 0x96a7000e, 0x8ea2001c, 0x3c040001, 0x24842e80, -0xafb50014, 0xafa20010, 0x8ea60018, 0xc00290f, 0x34a50910, 0x8fbf0078, -0x8fbe0074, 0x8fb50070, 0x8fb3006c, 0x8fb10068, 0x3e00008, 0x27bd0080, -0x3e00008, 0x0, 0x803821, 0x8f8600e4, 0x8f8400e0, 0x2402fff8, -0x8cc30004, 0x822024, 0x10c4000d, 0x3c020100, 0x3c050100, 0x651024, -0x1040000c, 0x27623ff8, 0x14c20002, 0x24c20008, 0x27623000, 0x403021, -0x8cc30004, 0x14c4fff8, 0x651024, 0x3c020100, 0x621024, 0x14400007, -0x0, 0x8cc20000, 0x8cc30004, 0xace20000, 0xace30004, 0x10000003, -0x24020001, 0xaf8600e8, 0x1021, 0x3e00008, 0x0, 0x3e00008, -0x0, 0x8f8300e4, 0x8f8500e0, 0x2402fff8, 0x8c640004, 0xa22824, -0x1065000d, 0x3c020100, 0x3c060100, 0x861024, 0x10400008, 0x27623ff8, -0x14620002, 0x24620008, 0x27623000, 0x401821, 0x8c640004, 0x1465fff8, -0x861024, 0x3c020100, 0xac620004, 0xaf8300e8, 0x54650001, 0x24630008, -0xaf8300e4, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8600e4, -0x8f8200e0, 0x2403fff8, 0x431024, 0x14c20003, 0x803821, 0x10000006, -0x1021, 0x8cc20000, 0x8cc30004, 0xace20000, 0xace30004, 0x24020001, -0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8300e4, 0x27623ff8, -0x14620002, 0x24620008, 0x27623000, 0x401821, 0xaf8300e8, 0xaf8300e4, -0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8400e0, 0x8f8800c4, -0x8f8300e8, 0x2402fff8, 0x823824, 0xe32023, 0x2c821000, 0x50400001, -0x24841000, 0x420c2, 0x801821, 0x8ec401c0, 0x8ec501c4, 0x1021, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaec401c0, 0xaec501c4, -0x8f8300c8, 0x8ec20540, 0x1032023, 0x82102b, 0x14400004, 0x801821, -0x8ec20540, 0x822021, 0x801821, 0x8ec401b8, 0x8ec501bc, 0x1021, -0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaec401b8, 0xaec501bc, -0xaf8800c8, 0xaf8700e4, 0xaf8700e8, 0x3e00008, 0x0, 0x27bdff70, -0xafbf0088, 0xafbe0084, 0xafb50080, 0xafb3007c, 0xafb10078, 0x92c200ed, -0xa3a0004f, 0x1040000b, 0xa3a00067, 0x8ecd00f0, 0xafad0034, 0x8ece00f4, -0xafae002c, 0x8ecd00fc, 0x8ed500f8, 0xafad006c, 0x8ece0100, 0x100000e9, -0xafae003c, 0x3c020001, 0x8c423518, 0x40f809, 0x27a40020, 0x10400295, -0x0, 0x8fa30024, 0x8fb50020, 0x306dffff, 0x25adfffc, 0xafad0034, -0x92a20000, 0xafb5002c, 0x30420001, 0x10400017, 0xafa3006c, 0x8ec2011c, -0x3c03ffff, 0x431024, 0x14400012, 0x2402ffff, 0x8ea30000, 0x14620004, -0x3402ffff, 0x96a30004, 0x1062000c, 0x0, 0xc0022ad, 0x2a02021, -0x304200ff, 0x14400007, 0x0, 0x3c020001, 0x8c423510, 0x40f809, -0x0, 0x10000275, 0x0, 0x8fa20024, 0x3c03ffbf, 0x3463ffff, -0x431024, 0x3c03ffff, 0x432824, 0x14a00003, 0xafa20024, 0x10000053, -0x1821, 0x3c020080, 0xa21024, 0x50400007, 0x3c040040, 0x8ec202e4, -0x24420001, 0xaec202e4, 0x8ec202e4, 0x10000049, 0x24030001, 0x3c070004, -0x3c0c0001, 0x3c0b0002, 0x3c060010, 0x3c0a0008, 0x8ec20178, 0x3c090020, -0x34088000, 0x24420001, 0xaec20178, 0x8ec20178, 0x851824, 0x10670021, -0xe3102b, 0x14400007, 0x0, 0x106c0011, 0x0, 0x106b0015, -0x0, 0x10000030, 0x42042, 0x10660023, 0xc3102b, 0x14400005, -0x0, 0x106a0019, 0x0, 0x10000028, 0x42042, 0x10690021, -0x0, 0x10000024, 0x42042, 0x8ec2012c, 0x24420001, 0xaec2012c, -0x8ec2012c, 0x1000001e, 0x42042, 0x8ec202d4, 0x24420001, 0xaec202d4, -0x8ec202d4, 0x10000018, 0x42042, 0x8ec202d8, 0x24420001, 0xaec202d8, -0x8ec202d8, 0x10000012, 0x42042, 0x8ec202dc, 0x24420001, 0xaec202dc, -0x8ec202dc, 0x1000000c, 0x42042, 0x8ec20128, 0x24420001, 0xaec20128, -0x8ec20128, 0x10000006, 0x42042, 0x8ec202e0, 0x24420001, 0xaec202e0, -0x8ec202e0, 0x42042, 0x1488ffc6, 0x851824, 0x24030001, 0x8f420260, -0x8fae0034, 0x4e102b, 0x10400015, 0x306400ff, 0x8f8200e0, 0xafa20010, -0x8f8200e4, 0x3c040001, 0x24842f5c, 0xafa20014, 0x8fa60020, 0x8fa70024, -0x3c050006, 0xc00290f, 0x34a5f003, 0x8ec30150, 0x8fad006c, 0x3c020100, -0x24040001, 0x1a26825, 0x24630001, 0xafad006c, 0xaec30150, 0x8ec20150, -0x1080000f, 0x0, 0x8f420218, 0x30420800, 0x1440000b, 0x3c020180, -0x8fae006c, 0x1c21024, 0x10400005, 0x0, 0x8ec20174, 0x24420001, -0xaec20174, 0x8ec20174, 0x100001e4, 0x8fa30034, 0x8f420218, 0x30420400, -0x10400004, 0x0, 0x8fad0034, 0x25ad0004, 0xafad0034, 0x8ec20050, -0x5040002d, 0xafa0003c, 0x8fae0034, 0x4e102b, 0x50400029, 0xafa0003c, -0x8ec20050, 0x1c21023, 0xafa2003c, 0x8ecd0050, 0x10000023, 0xafad0034, -0x8ec2005c, 0xafa20010, 0x8ec20060, 0x3c040001, 0x24842f68, 0xafa20014, -0x8ec6003c, 0x8ec70044, 0x3c050006, 0xc00290f, 0x34a5f002, 0x8ec202b4, -0x2403ffbf, 0x283a024, 0x24420001, 0xaec202b4, 0x10000199, 0x8ec202b4, -0x8e220018, 0x8fa70034, 0x3c040001, 0x24842f74, 0xafa20010, 0x8e220000, -0x8e230004, 0x34a5f709, 0x2203021, 0xc00290f, 0xafa30014, 0x8ec20298, -0x24420001, 0xaec20298, 0x10000189, 0x8ec20298, 0x96e20460, 0x8fae0034, -0x4e102b, 0x10400004, 0x0, 0x240d0001, 0xa3ad004f, 0x8fae0034, -0x11c001a0, 0x3c02ffff, 0x8fad006c, 0x1a21024, 0xafa20074, 0x8ec20068, -0x8f430280, 0x24420001, 0x304203ff, 0x10620176, 0x0, 0x93a2004f, -0x10400015, 0x0, 0x8ec3005c, 0x8ec20060, 0x1062000a, 0x26ce0060, -0x8ec60060, 0xafae0054, 0x8ec30060, 0x21140, 0x24424dc0, 0x2e28821, -0x24630001, 0x10000014, 0x306300ff, 0x92c20064, 0x1440ffb9, 0x0, -0x8ec202c8, 0x24420001, 0xaec202c8, 0x8ec202c8, 0x8ec3003c, 0x8ec20044, -0x1062ffb1, 0x26cd0044, 0x8ec60044, 0xafad0054, 0x8ec30044, 0x21140, -0x24420dc0, 0x2e28821, 0x24630001, 0x306301ff, 0xafa3005c, 0x8f83012c, -0x10600011, 0x24040002, 0x8f820124, 0x431023, 0x21143, 0x58400001, -0x24420040, 0x82102a, 0x1040000a, 0x1021, 0x8f820128, 0x431023, -0x21143, 0x58400001, 0x24420040, 0x82102a, 0x14400002, 0x24020001, -0x1021, 0x304200ff, 0x1040ffa3, 0x3c050006, 0x96e20462, 0x30420010, -0x1040001a, 0x340e8100, 0x96a2000c, 0x144e0017, 0x0, 0x92c200ed, -0x14400014, 0x0, 0x96a2000e, 0xa6220016, 0x8ea20008, 0x8ea30004, -0x8fad0034, 0x8ea40000, 0x25adfffc, 0xafad0034, 0xaea2000c, 0xaea30008, -0xaea40004, 0x9622000e, 0x8fae002c, 0x240d0001, 0xa3ad0067, 0x25ce0004, -0x34420200, 0xafae002c, 0xa622000e, 0x9627000a, 0x8fae0034, 0xee102b, -0x14400002, 0x30f3fff8, 0x8fb30034, 0x8e240000, 0x8e250004, 0x8fad002c, -0x24020007, 0xae2d0018, 0xafa20010, 0xafa60014, 0x8ec20004, 0x8fa6002c, -0xafa20018, 0x8ec200a8, 0x40f809, 0x2603821, 0x1440001a, 0x3c050006, -0x3c040001, 0x24842f80, 0x8e220018, 0x34a5f009, 0xafa20010, 0x8e220000, -0x8e230004, 0x2203021, 0x2603821, 0xc00290f, 0xafa30014, 0x93a20067, -0x104000fb, 0x0, 0x8ea20004, 0x8ea30008, 0x8ea4000c, 0x340e8100, -0xa6ae000c, 0xaea20000, 0xaea30004, 0xaea40008, 0x96220016, 0x100000f0, -0xa6a2000e, 0x8fad0034, 0x166d0089, 0x0, 0x962e000a, 0xafae0044, -0x8fae003c, 0x9623000e, 0x1ae1021, 0xa622000a, 0x34620004, 0xa622000e, -0x8fad0074, 0x11a00006, 0x307effff, 0x34620404, 0xa622000e, 0x8fae006c, -0xe1402, 0xa6220014, 0x8ec30068, 0x8ee40478, 0x8ee5047c, 0x24020004, -0xafa20010, 0x8ec20068, 0x2203021, 0x24070020, 0xafa20014, 0x8ec20008, -0x31940, 0x604821, 0xafa20018, 0x8ec200a8, 0x4021, 0xa92821, -0xa9182b, 0x882021, 0x40f809, 0x832021, 0x54400018, 0xa2c000ed, -0x97ad0046, 0xa63e000e, 0xa62d000a, 0x8f820100, 0xafa20010, 0x8f820104, -0x3c040001, 0x24842f8c, 0x3c050006, 0xafa20014, 0x8ec60068, 0x34a5f00b, -0xc00290f, 0x2203821, 0x93a20067, 0x104000b6, 0x0, 0x8ea20004, -0x8ea30008, 0x8ea4000c, 0x340e8100, 0x10000083, 0xa6ae000c, 0x8fae005c, -0x8fad0054, 0xadae0000, 0x8ec202c4, 0x8ec30068, 0x2442ffff, 0xaec202c4, -0x8ec202c4, 0x24630001, 0x306303ff, 0x26c20060, 0x15a20006, 0xaec30068, -0x8ec202c0, 0x2442ffff, 0xaec202c0, 0x10000005, 0x8ec202c0, 0x8ec202bc, -0x2442ffff, 0xaec202bc, 0x8ec202bc, 0x8ec20048, 0x24420001, 0xaec20048, -0x8f430240, 0x43102b, 0x54400090, 0xafa00034, 0x8ed10068, 0x8ee40490, -0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013, 0xafa20010, 0xafb10014, -0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440000b, -0x24020001, 0x3c040001, 0x24842f0c, 0xafb10010, 0xafa00014, 0x8ec60068, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021, 0x14400005, -0x24020001, 0x3c010001, 0x370821, 0x1000000a, 0xac2281e0, 0x3c010001, -0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c, 0x24420001, -0xaec20268, 0x8ec20268, 0x8ec2027c, 0x24420001, 0xaec2027c, 0x8ec2027c, -0x10000062, 0xafa00034, 0x962d000a, 0xafad0044, 0x9622000e, 0xa633000a, -0x8fae0074, 0x11c00006, 0x305effff, 0x34420400, 0xa622000e, 0x8fad006c, -0xd1402, 0xa6220014, 0x8ec30068, 0x8ee40478, 0x8ee5047c, 0x24020004, -0xafa20010, 0x8ec20068, 0x2203021, 0x24070020, 0xafa20014, 0x8ec20008, -0x31940, 0x604821, 0xafa20018, 0x8ec200a8, 0x4021, 0xa92821, -0xa9182b, 0x882021, 0x40f809, 0x832021, 0x1440001f, 0x3c04001f, -0x97ae0046, 0xa63e000e, 0xa62e000a, 0x8f820100, 0xafa20010, 0x8f820104, -0x3c040001, 0x24842f8c, 0x3c050006, 0xafa20014, 0x8ec60068, 0x34a5f00d, -0xc00290f, 0x2203821, 0x93a20067, 0x10400032, 0x340d8100, 0x8ea20004, -0x8ea30008, 0x8ea4000c, 0xa6ad000c, 0xaea20000, 0xaea30004, 0xaea40008, -0x96220016, 0xa6a2000e, 0x9622000e, 0x3042fdff, 0x10000025, 0xa622000e, -0x8ec202c4, 0x8fae002c, 0x3484ffff, 0x1d37021, 0x2442ffff, 0xafae002c, -0xaec202c4, 0x8ec202c4, 0x8ec302bc, 0x24020001, 0x8e202b, 0xa2c200ed, -0x2463ffff, 0xaec302bc, 0x10800004, 0x8ec202bc, 0x8ec20540, 0x1c27023, -0xafae002c, 0x8fad0034, 0x8fae0054, 0x1b36823, 0xafad0034, 0x8fad005c, -0xadcd0000, 0x8ec20068, 0xa3a0004f, 0x8ec30048, 0x24420001, 0x304203ff, -0x24630001, 0xaec20068, 0xaec30048, 0x8fae0034, 0x15c0fe86, 0x0, -0x8fad0034, 0x11a0001f, 0x0, 0xaecd00f0, 0x8fae002c, 0xaece00f4, -0xaed500f8, 0x93a20067, 0x10400004, 0x0, 0x8ec200f8, 0x24420004, -0xaec200f8, 0x8fad006c, 0x8ec20068, 0xaecd00fc, 0x8fae003c, 0xaece0100, -0x8f430280, 0x24420001, 0x304203ff, 0x14620006, 0x0, 0x8ec202b8, -0x24420001, 0xaec202b8, 0x10000016, 0x8ec202b8, 0x8ec202b0, 0x24420001, -0xaec202b0, 0x10000011, 0x8ec202b0, 0x8fad006c, 0x31a4ffff, 0x2484fffc, -0x801821, 0x8ec401b8, 0x8ec501bc, 0x3c060001, 0x8cc63510, 0x1021, -0xa32821, 0xa3382b, 0x822021, 0x872021, 0xaec401b8, 0xc0f809, -0xaec501bc, 0x8fbf0088, 0x8fbe0084, 0x8fb50080, 0x8fb3007c, 0x8fb10078, -0x3e00008, 0x27bd0090, 0x3e00008, 0x0, 0x27bdff90, 0xafbf0068, -0xafbe0064, 0xafb50060, 0xafb3005c, 0xafb10058, 0x92c200ed, 0xafa0002c, -0x10400007, 0xa3a00037, 0x8ecf00fc, 0x8ec800f0, 0x8ec900f4, 0x8ed500f8, -0x100000d1, 0xafaf003c, 0x3c020001, 0x8c423518, 0x40f809, 0x27a40020, -0x104001ae, 0x0, 0x8fa30024, 0x8fb50020, 0x3068ffff, 0x92a20000, -0x2508fffc, 0x2a04821, 0x30420001, 0x1040001a, 0xafa3003c, 0x8ec2011c, -0x3c03ffff, 0x431024, 0x14400015, 0x2402ffff, 0x8ea30000, 0x14620005, -0x2a02021, 0x96a30004, 0x3402ffff, 0x1062000e, 0x0, 0xafa80048, -0xc0022ad, 0xafa9004c, 0x304200ff, 0x8fa80048, 0x14400007, 0x8fa9004c, -0x3c020001, 0x8c423510, 0x40f809, 0x0, 0x1000018c, 0x0, -0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024, 0x3c03ffff, 0x432824, -0x14a00003, 0xafa20024, 0x10000053, 0x1821, 0x3c020080, 0xa21024, -0x50400007, 0x3c040040, 0x8ec202e4, 0x24420001, 0xaec202e4, 0x8ec202e4, -0x10000049, 0x24030001, 0x3c070004, 0x3c0e0001, 0x3c0d0002, 0x3c060010, -0x3c0c0008, 0x8ec20178, 0x3c0b0020, 0x340a8000, 0x24420001, 0xaec20178, -0x8ec20178, 0x851824, 0x10670021, 0xe3102b, 0x14400007, 0x0, -0x106e0011, 0x0, 0x106d0015, 0x0, 0x10000030, 0x42042, -0x10660023, 0xc3102b, 0x14400005, 0x0, 0x106c0019, 0x0, -0x10000028, 0x42042, 0x106b0021, 0x0, 0x10000024, 0x42042, -0x8ec2012c, 0x24420001, 0xaec2012c, 0x8ec2012c, 0x1000001e, 0x42042, -0x8ec202d4, 0x24420001, 0xaec202d4, 0x8ec202d4, 0x10000018, 0x42042, -0x8ec202d8, 0x24420001, 0xaec202d8, 0x8ec202d8, 0x10000012, 0x42042, -0x8ec202dc, 0x24420001, 0xaec202dc, 0x8ec202dc, 0x1000000c, 0x42042, -0x8ec20128, 0x24420001, 0xaec20128, 0x8ec20128, 0x10000006, 0x42042, -0x8ec202e0, 0x24420001, 0xaec202e0, 0x8ec202e0, 0x42042, 0x148affc6, -0x851824, 0x24030001, 0x8f420260, 0x48102b, 0x10400019, 0x306400ff, -0x8f8200e0, 0xafa20010, 0x8f8200e4, 0x3c040001, 0x24842f5c, 0xafa20014, -0x8fa60020, 0x8fa70024, 0x3c050006, 0x34a5f003, 0xafa80048, 0xc00290f, -0xafa9004c, 0x8ec30150, 0x8faf003c, 0x3c020100, 0x24040001, 0x1e27825, -0x24630001, 0xafaf003c, 0xaec30150, 0x8ec20150, 0x8fa9004c, 0x8fa80048, -0x10800025, 0x0, 0x8f420218, 0x30420800, 0x14400021, 0x3c020180, -0x8faf003c, 0x1e21024, 0x104000fe, 0x1001821, 0x8ec20174, 0x24420001, -0xaec20174, 0x8ec20174, 0x100000f8, 0x1001821, 0x8ec2005c, 0xafa20010, -0x8ec20060, 0x3c040001, 0x24842f68, 0xafa20014, 0x8ec6003c, 0x8ec70044, -0x3c050006, 0x34a5f002, 0xafa80048, 0xc00290f, 0xafa9004c, 0x8ec202b4, -0x2403ffbf, 0x283a024, 0x24420001, 0xaec202b4, 0x8ec202b4, 0x8fa80048, -0x100000c2, 0x8fa9004c, 0x8f420218, 0x30420400, 0x54400001, 0x25080004, -0x96e20460, 0x48102b, 0x10400003, 0x0, 0x3c0f8000, 0xafaf002c, -0x110000d2, 0x3c02ffff, 0x8faf003c, 0x1e21024, 0xafa20044, 0x8ec20068, -0x8f430280, 0x24420001, 0x304203ff, 0x106200ad, 0x0, 0x8faf002c, -0x11e00014, 0x0, 0x8ec3005c, 0x8ec20060, 0x10620009, 0x26cb0060, -0x8ec60060, 0x8ec30060, 0x21140, 0x24424dc0, 0x2e28821, 0x24630001, -0x10000014, 0x306a00ff, 0x92c20064, 0x1440ffc4, 0x0, 0x8ec202c8, -0x24420001, 0xaec202c8, 0x8ec202c8, 0x8ec3003c, 0x8ec20044, 0x1062ffbc, -0x26cb0044, 0x8ec60044, 0xafa0002c, 0x8ec30044, 0x21140, 0x24420dc0, -0x2e28821, 0x24630001, 0x306a01ff, 0x96e20462, 0x30420010, 0x10400017, -0x0, 0x96a2000c, 0x340f8100, 0x144f0013, 0x0, 0x92c200ed, -0x14400010, 0x0, 0x96a2000e, 0xa6220016, 0x8ea20008, 0x8ea30004, -0x8ea40000, 0x2508fffc, 0xaea2000c, 0xaea30008, 0xaea40004, 0x9622000e, -0x25290004, 0x240f0001, 0xa3af0037, 0x34420200, 0xa622000e, 0x9623000a, -0x68102b, 0x14400002, 0x3073fff8, 0x1009821, 0x92c200ed, 0x14400012, -0x260f021, 0x9523000c, 0x24020800, 0x5462000f, 0xae290018, 0x91220017, -0x38430006, 0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x50600007, -0xae290018, 0x95220010, 0x2443000e, 0x73102b, 0x54400001, 0x60f021, -0xae290018, 0x92c300ed, 0x8e240000, 0x8e250004, 0x8faf002c, 0x2402000b, -0xafa20010, 0x3182b, 0x31ec0, 0xcf1025, 0x431025, 0xafa20014, -0x8ec20004, 0xafa20018, 0x8ec200a8, 0x3c03821, 0x1203021, 0xafa80048, -0xafa9004c, 0xafaa0050, 0x40f809, 0xafab0054, 0x8fa80048, 0x8fa9004c, -0x8faa0050, 0x8fab0054, 0x1440001d, 0x3c050006, 0x3c040001, 0x24842f80, -0x8e220018, 0x34a5f009, 0xafa20010, 0x8e220000, 0x8e230004, 0x2203021, -0x3c03821, 0xafa80048, 0xafa9004c, 0xc00290f, 0xafa30014, 0x93a20037, -0x8fa80048, 0x8fa9004c, 0x1040002a, 0x340f8100, 0x8ea20004, 0x8ea30008, -0x8ea4000c, 0xa6af000c, 0xaea20000, 0xaea30004, 0xaea40008, 0x96220016, -0x10000020, 0xa6a2000e, 0x8faf0044, 0x11e00007, 0x0, 0x8faf003c, -0x9623000e, 0xf1402, 0x34630400, 0xa6220014, 0xa623000e, 0x56680008, -0x1334821, 0x9622000e, 0xa628000a, 0x4021, 0x34420004, 0xa622000e, -0x1000000c, 0xa2c000ed, 0x3c03001f, 0x3463ffff, 0x24020001, 0x69182b, -0xa633000a, 0x10600003, 0xa2c200ed, 0x8ec20540, 0x1224823, 0x1134023, -0xafa0002c, 0x1500ff4f, 0xad6a0000, 0x1100001b, 0x0, 0xaec800f0, -0xaec900f4, 0xaed500f8, 0x93a20037, 0x10400004, 0x0, 0x8ec200f8, -0x24420004, 0xaec200f8, 0x8faf003c, 0x8ec20068, 0xaecf00fc, 0x8f430280, -0x24420001, 0x14620006, 0x0, 0x8ec202b8, 0x24420001, 0xaec202b8, -0x10000016, 0x8ec202b8, 0x8ec202b0, 0x24420001, 0xaec202b0, 0x10000011, -0x8ec202b0, 0x8faf003c, 0x31e4ffff, 0x2484fffc, 0x801821, 0x8ec401b8, -0x8ec501bc, 0x3c060001, 0x8cc63510, 0x1021, 0xa32821, 0xa3382b, -0x822021, 0x872021, 0xaec401b8, 0xc0f809, 0xaec501bc, 0x8fbf0068, -0x8fbe0064, 0x8fb50060, 0x8fb3005c, 0x8fb10058, 0x3e00008, 0x27bd0070, -0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020, 0x8ec30040, -0x8ec20038, 0x1062004d, 0x0, 0x8ec30038, 0x8ec20040, 0x623823, -0x4e20001, 0x24e70200, 0x8ec30044, 0x8ec20040, 0x43102b, 0x14400004, -0x24020200, 0x8ec30040, 0x10000005, 0x431823, 0x8ec20044, 0x8ec30040, -0x431023, 0x2443ffff, 0xe08821, 0x71102a, 0x54400001, 0x608821, -0x8ec90040, 0x8ee40458, 0x8ee5045c, 0x8ec60040, 0x113940, 0x24080002, -0xafa80010, 0x8ec80040, 0x94940, 0x1201821, 0x1021, 0xafa80014, -0x8ec80010, 0xa32821, 0xa3482b, 0x822021, 0x892021, 0x63140, -0xafa80018, 0x8ec200a4, 0x24c60dc0, 0x40f809, 0x2e63021, 0x1440000e, -0x24030040, 0x8ec20040, 0xafa20010, 0x8ec20044, 0x3c040001, 0x24842f98, -0xafa20014, 0x8ec60038, 0x8ec7003c, 0x3c050007, 0xc00290f, 0x34a5f001, -0x10000010, 0x0, 0x8ec20030, 0x24420001, 0x50430003, 0x1021, -0x8ec20030, 0x24420001, 0xaec20030, 0x8ec20030, 0x21080, 0x571021, -0xac510cc0, 0x8ec20040, 0x511021, 0x304201ff, 0xaec20040, 0x8ec30040, -0x8ec20038, 0x14620017, 0x0, 0x8ec20000, 0x10400007, 0x2403fdff, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, -0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, -0xaf800048, 0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, -0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020, 0x8ec30058, 0x8ec20054, -0x1062004d, 0x0, 0x8ec30054, 0x8ec20058, 0x623823, 0x4e20001, -0x24e70100, 0x8ec30060, 0x8ec20058, 0x43102b, 0x14400004, 0x24020100, -0x8ec30058, 0x10000005, 0x431823, 0x8ec20060, 0x8ec30058, 0x431023, -0x2443ffff, 0xe08821, 0x71102a, 0x54400001, 0x608821, 0x8ec90058, -0x8ee40468, 0x8ee5046c, 0x8ec60058, 0x113940, 0x24080003, 0xafa80010, -0x8ec80058, 0x94940, 0x1201821, 0x1021, 0xafa80014, 0x8ec80010, -0xa32821, 0xa3482b, 0x822021, 0x892021, 0x63140, 0xafa80018, -0x8ec200a4, 0x24c64dc0, 0x40f809, 0x2e63021, 0x1440000e, 0x24030040, -0x8ec20058, 0xafa20010, 0x8ec20060, 0x3c040001, 0x24842fa4, 0xafa20014, -0x8ec60054, 0x8ec7005c, 0x3c050007, 0xc00290f, 0x34a5f010, 0x10000010, -0x0, 0x8ec20030, 0x24420001, 0x50430003, 0x1021, 0x8ec20030, -0x24420001, 0xaec20030, 0x8ec20030, 0x21080, 0x571021, 0xac510cc0, -0x8ec20058, 0x511021, 0x304200ff, 0xaec20058, 0x8ec30058, 0x8ec20054, -0x14620017, 0x0, 0x8ec20000, 0x10400007, 0x2403feff, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, -0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060, -0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, -0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x8f820120, 0x8ec300e8, 0x8f820124, 0x8f860128, 0x24020040, 0x24630001, -0x50620003, 0x1021, 0x8ec200e8, 0x24420001, 0xaec200e8, 0x8ec200e8, -0x8ec400e8, 0x8ec300e4, 0x210c0, 0x24426fc0, 0x14830007, 0x2e22821, -0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x10000011, 0xaca00000, -0x8ec200e8, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ec200e8, -0x24420001, 0x220c0, 0x2e41021, 0x8c426fc4, 0x8f830128, 0x21140, -0x621821, 0x2e41021, 0xaf830128, 0xac406fc0, 0x8cc20018, 0x2443fffe, -0x2c620018, 0x1040000a, 0x31080, 0x3c010001, 0x220821, 0x8c222fb0, -0x400008, 0x0, 0x24020001, 0x3c010001, 0x370821, 0xac2281e8, -0x3e00008, 0x0, 0x3e00008, 0x0, 0x27bdffa8, 0xafbf0050, -0xafbe004c, 0xafb50048, 0xafb30044, 0xafb10040, 0x8f830128, 0x8f820124, -0x106201e1, 0x0, 0x8f9e0128, 0x8f820128, 0x24420020, 0xaf820128, -0x8fc40018, 0x8f820128, 0x2402000b, 0x1482018f, 0x24020002, 0x8fc3001c, -0x97c20016, 0x3064ffff, 0xafc20014, 0x3c028000, 0x621024, 0xafc4001c, -0xafa2002c, 0x8fab002c, 0x3c020800, 0x11600004, 0x622824, 0x41140, -0x10000003, 0x24424dc0, 0x41140, 0x24420dc0, 0x2e2a821, 0x96a2000e, -0x3043fffc, 0x30420400, 0x10400003, 0xa6a3000e, 0x10000137, 0x8821, -0x10a00004, 0x8821, 0x97d10016, 0x10000132, 0x0, 0x8eab0018, -0xafab0034, 0x9563000c, 0x96eb0462, 0x24020800, 0x1462012b, 0xafab003c, -0x8fab0034, 0x2573000e, 0x8fab003c, 0x31620002, 0x1040003f, 0x3c030020, -0x8ec70540, 0x263102b, 0x14400002, 0x2604821, 0x2674823, 0x25220014, -0x43102b, 0x10400027, 0x24030005, 0x91220000, 0x3042000f, 0x14430024, -0x1202021, 0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000, -0x25290002, 0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000, -0x25290002, 0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021, -0x1475021, 0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000, -0x95230002, 0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, -0x625021, 0xa1c02, 0x3142ffff, 0x10000009, 0x625021, 0x1202021, -0x90850000, 0x3c060020, 0x8ec200ac, 0x30a5000f, 0x40f809, 0x52840, -0x304affff, 0x3143ffff, 0x50600001, 0x3403ffff, 0x96a2000e, 0x34420002, -0x10000002, 0xa6a2000e, 0x1821, 0xa6a30010, 0x8fab003c, 0x31620001, -0x104000e1, 0x0, 0x92620009, 0x38430006, 0x2c630001, 0x38420011, -0x2c420001, 0x621825, 0x106000d9, 0x3c030020, 0x8fa60034, 0x8ec70540, -0xc3102b, 0x50400001, 0xc73023, 0x24c2000e, 0x43102b, 0x1040001a, -0xc02021, 0x94c70000, 0x24c60002, 0x94c50000, 0x24c60002, 0x94c30000, -0x24c60002, 0x94c20000, 0x24c60002, 0x94c40000, 0x24c60002, 0xe53821, -0xe33821, 0xe23821, 0x94c20000, 0x94c30002, 0xe43821, 0xe23821, -0xe33821, 0x71c02, 0x30e2ffff, 0x623821, 0x71c02, 0x30e2ffff, -0x10000006, 0x623821, 0x8ec200ac, 0x24050007, 0x40f809, 0x3c060020, -0x3047ffff, 0x8fab003c, 0x31620008, 0x10400003, 0x30e8ffff, 0x1000005b, -0x4821, 0x96620006, 0x30421fff, 0x10400007, 0x2602821, 0x92620000, -0x96630002, 0x3042000f, 0x21080, 0x10000051, 0x624823, 0x3c070020, -0x8ec30540, 0xa7102b, 0x50400001, 0xa32823, 0x24a20014, 0x47102b, -0x10400015, 0xa02021, 0x90a20000, 0x94a30002, 0x3042000f, 0x21080, -0x623023, 0xafa20020, 0x90a30009, 0x24a5000c, 0x94a20000, 0x24a50002, -0x94a40000, 0x24a50002, 0xc33021, 0xc23021, 0x94a20000, 0x94a30002, -0xc43021, 0xc23021, 0x1000002d, 0xc33021, 0x24a50002, 0xa7102b, -0x50400001, 0xa32823, 0x94a60000, 0x802821, 0xa7102b, 0x50400001, -0xa32823, 0x90a20000, 0x24850009, 0x3042000f, 0x21080, 0xc23023, -0xafa20020, 0xa7102b, 0x50400001, 0xa32823, 0x90a20000, 0x2485000c, -0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002, -0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002, -0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002, -0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0xc23021, -0x61c02, 0x30c2ffff, 0x623021, 0x61402, 0x30c3ffff, 0x431021, -0x3049ffff, 0x96a2000e, 0x30420004, 0x10400041, 0x0, 0x8f420218, -0x30420400, 0x1040003d, 0x3c070020, 0x97c2000e, 0x8fc30008, 0x8ec60540, -0x621821, 0x2463fffc, 0x67102b, 0x50400001, 0x661823, 0x602821, -0x24a20004, 0x47102b, 0x5040000a, 0xa7102b, 0x90a20000, 0x90a40001, -0x90a30002, 0x21200, 0x441021, 0x90a40003, 0x31a00, 0x10000017, -0x431021, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x22200, -0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x822021, -0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x21200, -0x822021, 0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x822021, -0x41c02, 0x3082ffff, 0x622021, 0x41402, 0x3083ffff, 0x431021, -0x3042ffff, 0x1024021, 0x81c02, 0x3102ffff, 0x624021, 0x81c02, -0x3102ffff, 0x624021, 0x3108ffff, 0x8fc20014, 0x488823, 0x111402, -0x2228821, 0x2298821, 0x111402, 0x2228821, 0x3231ffff, 0x52200001, -0x3411ffff, 0x96a2000e, 0x34420001, 0xa6a2000e, 0x96a2000e, 0x24080002, -0x30420004, 0x10400002, 0xa6b10012, 0x24080004, 0x8ec90068, 0x8ee40478, -0x8ee5047c, 0xafa80010, 0x8ec80068, 0x8fab002c, 0x2a03021, 0x24070020, -0x10b4025, 0xafa80014, 0x8ec80008, 0x94940, 0x1201821, 0xafa80018, -0x8ec800a8, 0x1021, 0xa32821, 0xa3482b, 0x822021, 0x100f809, -0x892021, 0x1440000e, 0x0, 0x8f820120, 0xafa20010, 0x8f820128, -0x3c040001, 0x24843010, 0xafa20014, 0x8fc6001c, 0x8f870124, 0x3c050008, -0xc00290f, 0x34a50001, 0x1000005f, 0x0, 0x8ec20068, 0x24420001, -0x304203ff, 0xaec20068, 0x8fab002c, 0x11600006, 0x0, 0x8ec202c0, -0x2442ffff, 0xaec202c0, 0x10000005, 0x8ec202c0, 0x8ec202bc, 0x2442ffff, -0xaec202bc, 0x8ec202bc, 0x8ec202c4, 0x2442ffff, 0xaec202c4, 0x1000004a, -0x8ec202c4, 0x14820005, 0x24020004, 0x8ec20048, 0x24420001, 0x10000044, -0xaec20048, 0x14820036, 0x38830011, 0x97c2001e, 0xafc2001c, 0x8ec20048, -0x24420001, 0xaec20048, 0x8f430240, 0x43102b, 0x14400039, 0x24070008, -0x8ed10068, 0x8ee40490, 0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013, -0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, -0x1440000b, 0x24020001, 0x3c040001, 0x24842f0c, 0xafb10010, 0xafa00014, -0x8ec60068, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021, -0x14400005, 0x24020001, 0x3c010001, 0x370821, 0x1000000a, 0xac2281e0, -0x3c010001, 0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c, -0x24420001, 0xaec20268, 0x8ec20268, 0x8ec2027c, 0x24420001, 0xaec2027c, -0x1000000d, 0x8ec2027c, 0x2c630001, 0x38820013, 0x2c420001, 0x621825, -0x14600004, 0x24020001, 0x24020012, 0x14820004, 0x24020001, 0x3c010001, -0x370821, 0xac2281e8, 0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, -0x8fb10040, 0x3e00008, 0x27bd0058, 0x3e00008, 0x0, 0x0, -0x0, 0x0, 0x8ec20538, 0xaf8200c0, 0x8ec20538, 0xaf8200c4, -0x8ec20538, 0xaf8200c8, 0x8ec20534, 0xaf8200d0, 0x8ec20534, 0xaf8200d4, -0x8ec20534, 0x3e00008, 0xaf8200d8, 0x27bdffe8, 0x27840208, 0x27450200, -0xafbf0010, 0xc0029a2, 0x24060008, 0x8f420204, 0xc003c86, 0xaf820210, -0x24040001, 0x8f460248, 0x24020004, 0x3c010001, 0xac22340c, 0xc0046cc, -0x24050004, 0x3c020001, 0x8c423408, 0x30420001, 0x10400007, 0x24020001, -0x3c010001, 0xac22340c, 0x24040001, 0x24050001, 0xc0046cc, 0x3c06601b, -0x8ec20548, 0x8ec4054c, 0x8ec30550, 0x3c010001, 0xac203404, 0x3c010001, -0xac20341c, 0x21640, 0x42140, 0x34840403, 0x441025, 0x31bc0, -0x431025, 0xaf82021c, 0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, -0x3c050008, 0x34a50400, 0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, -0x3c040001, 0x248430dc, 0xc00290f, 0x3821, 0x8ec20368, 0x24420001, -0xaec20368, 0x8ec20368, 0x8f830200, 0x3c023f00, 0x621824, 0x8fbf0018, -0x3c020400, 0x3e00008, 0x27bd0020, 0x27bdffd8, 0xafbf0020, 0xafb3001c, -0xafb10018, 0x8f910220, 0x8ec202fc, 0x24420001, 0xaec202fc, 0x8ec202fc, -0x8ec30310, 0x3c020001, 0x8c42341c, 0x3c040001, 0x248430e8, 0xafa20014, -0xafa30010, 0x8ec70314, 0x3c050008, 0xc00290f, 0x2203021, 0x3c024000, -0x2221024, 0x104000e5, 0x3c040100, 0x8ec20314, 0x24420001, 0xaec20314, -0x8ec20314, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004, -0xaf820220, 0x8f8200e0, 0x8f8300c4, 0x3c02001f, 0x3442ffff, 0x24690008, -0x49102b, 0x10400003, 0x0, 0x8ec20540, 0x1224823, 0x8f8700c8, -0x8f850120, 0x8f840124, 0x10000005, 0x5821, 0x8ec20534, 0x82102b, -0x50400001, 0x27644800, 0x10a40010, 0x316200ff, 0x8c820018, 0x38430007, -0x2c630001, 0x3842000b, 0x2c420001, 0x621825, 0x5060fff3, 0x24840020, -0x8ec20328, 0x240b0001, 0x24420001, 0xaec20328, 0x8ec20328, 0x8c870008, -0x316200ff, 0x14400078, 0x0, 0x92c200ed, 0x14400075, 0x0, -0x8f8500e4, 0x8f8200e0, 0x2403fff8, 0x433024, 0xc51023, 0x218c3, -0x4620001, 0x24630100, 0x8f8a00c4, 0x10600005, 0x24020001, 0x10620009, -0x0, 0x10000021, 0x0, 0x8ec20318, 0x1403821, 0x24420001, -0xaec20318, 0x10000060, 0x8ec20318, 0x8ec2031c, 0x24420001, 0xaec2031c, -0x8ca70000, 0x8ec20540, 0x8ec3031c, 0x1471823, 0x43102b, 0x10400004, -0x2c62233f, 0x8ec20540, 0x621821, 0x2c62233f, 0x14400051, 0x3c020100, -0xaca20004, 0x8f8200e8, 0x24420008, 0xaf8200e8, 0x8f8200e8, 0x8f8200e4, -0x1403821, 0x24420008, 0xaf8200e4, 0x10000046, 0x8f8200e4, 0x8ec20320, -0x24420001, 0xaec20320, 0x8ca80000, 0x8ec20540, 0x8ec30320, 0x1092023, -0x44102b, 0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544, -0x44102b, 0x10400003, 0x3c030100, 0x10000034, 0x1003821, 0x8ca20004, -0x431025, 0xaca20004, 0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4, -0x10a60025, 0x3c080100, 0x8ec20174, 0x24420001, 0xaec20174, 0x8ca20004, -0x8ec30174, 0x481024, 0x1440000e, 0x0, 0x8ca30000, 0x8ec20540, -0x692023, 0x44102b, 0x10400003, 0x0, 0x8ec20540, 0x822021, -0x8ec20544, 0x44102b, 0x10400006, 0x0, 0x603821, 0x8ec20544, -0x44102b, 0x1440000a, 0x0, 0x8ca20004, 0x481025, 0xaca20004, -0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4, 0x14a6ffdf, 0x0, -0x14a60005, 0x0, 0x1403821, 0xaf8600e4, 0x10000003, 0xaf8600e8, -0xaf8500e4, 0xaf8500e8, 0x8f8300c8, 0x8ec20540, 0x692023, 0x44102b, -0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x82102b, -0x50400008, 0x5821, 0x8ec20540, 0xe92023, 0x44102b, 0x10400003, -0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x82102b, 0x10400006, -0x316200ff, 0x1440001c, 0x3c02fdff, 0x92c200ed, 0x14400019, 0x3c02fdff, -0xaf8700c8, 0x8f8400c8, 0x8f8300c4, 0x8ec20540, 0x832023, 0x44102b, -0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x2c830001, -0x44102b, 0x431025, 0x10400009, 0x3c02fdff, 0x8f820220, 0x3c0308ff, -0x3463fffb, 0x431024, 0x3c034000, 0x431025, 0x10000075, 0xaf820220, -0x3442ffff, 0x8ec30324, 0x282a024, 0x24020001, 0xa2c200ec, 0x24630001, -0xaec30324, 0x1000006c, 0x8ec20324, 0x2241024, 0x10400013, 0x3c130200, -0x8ec20300, 0x24420001, 0xaec20300, 0x8ec20300, 0x8f820220, 0x3c0308ff, -0x3463ffff, 0x431024, 0x441025, 0xaf820220, 0x3c020004, 0x2221024, -0x14400005, 0x3c130200, 0xc003ab1, 0x0, 0x10000057, 0x0, -0x2331024, 0x50400008, 0x3c130400, 0x8ec20304, 0x24420001, 0xaec20304, -0xc003ab1, 0x8ec20304, 0x10000019, 0x0, 0x2331024, 0x1040001d, -0x3c020800, 0x8f830224, 0x24021402, 0x14620009, 0x3c050008, 0x3c040001, -0x248430f4, 0xafa00010, 0xafa00014, 0x8f860224, 0x34a5ffff, 0xc00290f, -0x3821, 0x8ec20308, 0x24420001, 0xaec20308, 0x8ec20308, 0x8f820220, -0x2202021, 0x34420002, 0xc00447c, 0xaf820220, 0x8f820220, 0x3c0308ff, -0x3463ffff, 0x431024, 0x531025, 0x1000002e, 0xaf820220, 0x2221024, -0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014, -0x8f860220, 0x34a50403, 0xc00290f, 0x3821, 0x3c021000, 0x2221024, -0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014, -0x8f860220, 0x34a50401, 0xc00290f, 0x3821, 0x3c022000, 0x2221024, -0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014, -0x8f860220, 0x34a50402, 0xc00290f, 0x3821, 0x6210009, 0x3c050008, -0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014, 0x8f860220, 0x34a50404, -0xc00290f, 0x3821, 0x8fbf0020, 0x8fb3001c, 0x8fb10018, 0x3e00008, -0x27bd0028, 0x3e00008, 0x0, 0x3c020001, 0x8c42341c, 0x27bdffc0, -0xafbf0038, 0xafbe0034, 0xafb50030, 0xafb3002c, 0x1040000f, 0xafb10028, -0x3c040001, 0x24843100, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220, -0x34a50498, 0x24020001, 0x3c010001, 0xac20341c, 0x3c010001, 0xac223410, -0xc00290f, 0x3821, 0x3c037fff, 0x8f420268, 0x3463ffff, 0x3c04fdff, -0x431024, 0xaf420268, 0x8ee204a8, 0x3484ffff, 0x30420002, 0x10400091, -0x284a024, 0x3c040600, 0x8ee204a8, 0x34842000, 0x2403fffd, 0x431024, -0xaee204a8, 0xafa40020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, -0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, -0x0, 0x3c040001, 0x248430b8, 0xafa00010, 0xafa00014, 0x8ec6002c, -0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, -0xaec202a0, 0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, -0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, -0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000c, -0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, -0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, -0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, -0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, -0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, -0xaed3002c, 0x3c040001, 0x248430c4, 0xafa00010, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c, 0x24150001, -0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff, 0x8f830054, -0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017, 0xa821, -0x3c1e0020, 0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c, 0x8ec3002c, -0x8f860120, 0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018, 0x8ec200a8, -0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe2, 0x0, 0x8f820054, -0x2221023, 0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff, 0x1440000f, -0x0, 0x3c040001, 0x248430d0, 0xafa00010, 0xafa00014, 0x8f860120, -0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0, -0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001, 0xaec20250, -0x8ec20250, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, 0x8fb10028, -0x3e00008, 0x27bd0040, 0x3c020001, 0x8c42341c, 0x27bdffe0, 0x1440000d, -0xafbf0018, 0x3c040001, 0x2484310c, 0x3c050008, 0xafa00010, 0xafa00014, -0x8f860220, 0x34a50499, 0x24020001, 0x3c010001, 0xac22341c, 0xc00290f, -0x3821, 0x92c2011d, 0x10400008, 0x24040001, 0x8f820220, 0x3c0308ff, -0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24040001, 0xc0047d1, -0x24050004, 0xaf420268, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, -0x86102b, 0x50400001, 0x872023, 0xc41023, 0x24843, 0x125102b, -0x1040001b, 0x91040, 0x824021, 0x88102b, 0x10400007, 0x1821, -0x94820000, 0x24840002, 0x621821, 0x88102b, 0x1440fffb, 0x0, -0x602021, 0xc73023, 0xa91023, 0x21040, 0xc22821, 0xc5102b, -0x10400007, 0x1821, 0x94c20000, 0x24c60002, 0x621821, 0xc5102b, -0x1440fffb, 0x0, 0x1000000d, 0x832021, 0x51040, 0x822821, -0x85102b, 0x10400007, 0x1821, 0x94820000, 0x24840002, 0x621821, -0x85102b, 0x1440fffb, 0x0, 0x602021, 0x41c02, 0x3082ffff, -0x622021, 0x41c02, 0x3082ffff, 0x622021, 0x3e00008, 0x3082ffff, -0x3e00008, 0x0, 0x8f820220, 0x34420002, 0xaf820220, 0x3c020001, -0x8c425618, 0x30424000, 0x10400054, 0x24040001, 0x8f820200, 0x24067fff, -0x8f830200, 0x30450002, 0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, -0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820224, 0x1444004d, 0x42040, -0xc4102b, 0x1040fff1, 0x0, 0x8f820200, 0x451025, 0xaf820200, -0x8f820220, 0x34428000, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002, -0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x8f820220, 0x3c030004, 0x431024, 0x1440000f, 0x0, 0x8f820220, -0x3c03ffff, 0x34637fff, 0x431024, 0xaf820220, 0x8f830054, 0x8f820054, -0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, -0x0, 0x8f820220, 0x3c030004, 0x431024, 0x1440000d, 0x0, -0x8f820220, 0x34428000, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002, -0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x8f820220, 0x3c030004, 0x431024, 0x1040001b, 0x1021, 0x8f830220, -0x24020001, 0x10000015, 0x3c04f700, 0x8f820220, 0x3c04f700, 0x441025, -0xaf820220, 0x8f820220, 0x2403fffd, 0x431024, 0xaf820220, 0x8f820220, -0x3c030300, 0x431024, 0x14400003, 0x0, 0x10000008, 0x1021, -0x8f820220, 0x34420002, 0xaf820220, 0x8f830220, 0x24020001, 0x641825, -0xaf830220, 0x3e00008, 0x0, 0x2021, 0x3c050100, 0x24020001, -0xaf80021c, 0xaf820200, 0xaf820220, 0x27625000, 0xaf8200c0, 0x27625000, -0xaf8200c4, 0x27625000, 0xaf8200c8, 0x27625000, 0xaf8200d0, 0x27625000, -0xaf8200d4, 0x27625000, 0xaf8200d8, 0x27623000, 0xaf8200e0, 0x27623000, -0xaf8200e4, 0x27623000, 0xaf8200e8, 0x27622800, 0xaf8200f0, 0x27622800, -0xaf8200f4, 0x27622800, 0xaf8200f8, 0x418c0, 0x24840001, 0x3631021, -0xac453004, 0x3631021, 0xac403000, 0x28820200, 0x1440fff9, 0x418c0, -0x2021, 0x418c0, 0x24840001, 0x3631021, 0xac402804, 0x3631021, -0xac402800, 0x28820100, 0x1440fff9, 0x418c0, 0xaf80023c, 0x24030080, -0x24040100, 0xac600000, 0x24630004, 0x64102b, 0x5440fffd, 0xac600000, -0x8f830040, 0x3c02f000, 0x621824, 0x3c025000, 0x1062000c, 0x43102b, -0x14400006, 0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x10000008, -0x0, 0x10620004, 0x24020800, 0x10000004, 0x0, 0x24020700, -0x3c010001, 0xac223420, 0x3e00008, 0x0, 0x27bdffc8, 0xafbf0034, -0xafb50030, 0xafb3002c, 0xafb10028, 0x3c010001, 0xc004459, 0xac203408, -0x24040001, 0x2821, 0x27a60020, 0x34028000, 0xc004076, 0xa7a20020, -0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, -0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, 0xc004034, 0x27a60020, -0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, -0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, 0xc004034, 0x27a60020, -0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, -0x2c420065, 0x1440fffc, 0x24040001, 0x24050002, 0xc004034, 0x27a60018, -0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, -0x2c420065, 0x1440fffc, 0x24040001, 0x24050003, 0xc004034, 0x27a6001a, -0x97a20020, 0x10400024, 0x24020001, 0x3c020001, 0x8c423408, 0x97a30018, -0x34420001, 0x3c010001, 0xac223408, 0x24020015, 0x14620004, 0x3402f423, -0x97a3001a, 0x10620018, 0x24020003, 0x97a30018, 0x24027810, 0x14620014, -0x24020002, 0x97a3001a, 0x24020001, 0x14620010, 0x24020002, 0x1000000e, -0x24020004, 0x3c020001, 0x8c423408, 0x34420008, 0x3c010001, 0xac223408, -0x10000058, 0x24020004, 0x3c020001, 0x8c423408, 0x34420004, 0x3c010001, -0x100000a8, 0xac223408, 0x3c010001, 0xac22353c, 0x24020e00, 0xaf820238, -0x8f840054, 0x8f820054, 0x24030008, 0x3c010001, 0xac23340c, 0x10000002, -0x248401f4, 0x8f820054, 0x821023, 0x2c4201f5, 0x1440fffc, 0x3c0200c8, -0x344201fb, 0xaf820238, 0x8f830054, 0x8f820054, 0x10000002, 0x246301f4, -0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc, 0x8821, 0x3c1300c8, -0x367301f6, 0x2415fffd, 0xc003f77, 0x0, 0x8f830054, 0x8f820054, -0x10000002, 0x246301f4, 0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc, -0x0, 0xaf930238, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, -0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820220, -0x34420002, 0xaf820220, 0x8f820200, 0x24040001, 0x24057fff, 0x551024, -0xaf820200, 0xaf840204, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820224, -0x14440005, 0x34028000, 0x42040, 0xa4102b, 0x1040fff0, 0x34028000, -0x1082ffa6, 0x26310001, 0x2e220014, 0x1440ffce, 0x24020004, 0x3c010001, -0xac22340c, 0x8821, 0x3c13ffff, 0x36733f7f, 0xc003f77, 0x0, -0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x531024, 0x34425080, -0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, 0x8f820054, -0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820044, 0x531024, -0x3442f080, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, -0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002, -0x24630064, 0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x0, -0x8f820220, 0x24040001, 0x34420002, 0xaf820220, 0x8f830200, 0x24057fff, -0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054, -0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, -0x0, 0x8f820224, 0x14440005, 0x34028000, 0x42040, 0xa4102b, -0x1040fff0, 0x34028000, 0x1082ff57, 0x26310001, 0x2e220064, 0x1440ffb0, -0x0, 0x3c020001, 0x8c423408, 0x30420004, 0x14400007, 0x3c08fff0, -0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, 0xaf820044, 0x3c08fff0, -0x3508bdc0, 0x8f830054, 0x97a60018, 0x3c070001, 0x8ce7353c, 0x3c040001, -0x248431e0, 0x24020001, 0x3c010001, 0xac223410, 0xafa60010, 0x3c060001, -0x8cc63408, 0x97a2001a, 0x3c05000d, 0x34a50100, 0x3c010001, 0xac20340c, -0x681821, 0x3c010001, 0xac233534, 0xc00290f, 0xafa20014, 0x8fbf0034, -0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0038, 0x27bdffe8, -0x24070004, 0x3c040001, 0x8c84340c, 0x3021, 0x24020001, 0x1482000a, -0xafbf0010, 0x3c020001, 0x8c42561c, 0x3c050004, 0x30428000, 0x1040000c, -0x34a593e0, 0x3c05000f, 0x10000009, 0x34a54240, 0x3c020001, 0x8c42561c, -0x3c05000f, 0x30428000, 0x10400003, 0x34a54240, 0x3c05001e, 0x34a58480, -0x3c020001, 0x8c423534, 0x8f830054, 0x451021, 0x431023, 0x45102b, -0x1440002e, 0x0, 0x3c020001, 0x8c423414, 0x1440002a, 0x2cc20001, -0x7182b, 0x431024, 0x1040001d, 0x0, 0x3c090001, 0x8d293408, -0x240b0001, 0x3c054000, 0x3c080001, 0x2508561c, 0x250afffc, 0x42042, -0x14800002, 0x24e7ffff, 0x24040008, 0x891024, 0x5040000b, 0x2cc20001, -0x148b0004, 0x0, 0x8d020000, 0x10000003, 0x451024, 0x8d420000, -0x451024, 0x54400001, 0x24060001, 0x2cc20001, 0x7182b, 0x431024, -0x5440ffed, 0x42042, 0x3c010001, 0x10c00020, 0xac24340c, 0x8f830054, -0x24020001, 0x3c010001, 0xac223410, 0x3c010001, 0xac233534, 0x3c020001, -0x8c423410, 0x10400004, 0x24020001, 0x3c010001, 0xac203410, 0xaee279c8, -0x8ee379c8, 0x24020008, 0x10620005, 0x24020001, 0xc003e23, 0x0, -0x1000000b, 0x0, 0x3c030001, 0x8c63340c, 0x10620007, 0x2402000e, -0x3c030001, 0x8c635590, 0x10620003, 0x0, 0xc00447c, 0x8f840220, -0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c03fdff, 0x3c040001, -0x8c84340c, 0x3c020001, 0x8c423424, 0x3463ffff, 0x283a024, 0x14820006, -0xafbf0018, 0x8ee379c8, 0x3c020001, 0x8c423428, 0x10620006, 0x0, -0x8ee279c8, 0x3c010001, 0xac243424, 0x3c010001, 0xac223428, 0x3c030001, -0x8c63340c, 0x24020002, 0x10620139, 0x2c620003, 0x10400005, 0x24020001, -0x1062000a, 0x0, 0x10000131, 0x0, 0x24020004, 0x10620070, -0x24020008, 0x106200ac, 0x24020001, 0x1000012a, 0x0, 0x8ee279c8, -0x2443ffff, 0x2c620008, 0x10400127, 0x31080, 0x3c010001, 0x220821, -0x8c2231f8, 0x400008, 0x0, 0xc003f77, 0x0, 0x3c020001, -0x8c423418, 0x3c010001, 0xac2033a0, 0x104000e8, 0x24020002, 0xaee279c8, -0x3c010001, 0x10000116, 0xac203418, 0xc0040b7, 0x0, 0x3c030001, -0x8c633430, 0x24020011, 0x1462010f, 0x24020003, 0x100000aa, 0x0, -0x3c050001, 0x8ca5340c, 0x3c060001, 0x8cc6561c, 0xc0046cc, 0x24040001, -0x24020005, 0x3c010001, 0xac203418, 0x10000102, 0xaee279c8, 0x3c040001, -0x248431ec, 0x3c05000f, 0x34a50100, 0x3021, 0x3821, 0xafa00010, -0xc00290f, 0xafa00014, 0x100000f7, 0x0, 0x8f820220, 0x3c03f700, -0x431025, 0x100000ae, 0xaf820220, 0x8f820220, 0x3c030004, 0x431024, -0x144000bc, 0x24020007, 0x8f830054, 0x3c020001, 0x8c423530, 0x2463d8f0, -0x431023, 0x2c422710, 0x144000e5, 0x24020001, 0x100000e1, 0x0, -0x3c050001, 0x8ca5340c, 0xc0047d1, 0x24040001, 0xc004899, 0x24040001, -0x3c030001, 0x8c635614, 0x46100d7, 0x24020001, 0x3c020008, 0x621024, -0x10400006, 0x0, 0x8f820214, 0x3c03ffff, 0x431024, 0x10000005, -0x3442251f, 0x8f820214, 0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214, -0x8f820220, 0x3c030200, 0x283a025, 0x34420002, 0xaf820220, 0x24020008, -0xc003b6a, 0xaee279c8, 0x100000c1, 0x0, 0x8ee279c8, 0x2443ffff, -0x2c620008, 0x104000bc, 0x31080, 0x3c010001, 0x220821, 0x8c223218, -0x400008, 0x0, 0xc003ab1, 0x0, 0x3c010001, 0xac203410, -0xaf800204, 0x3c010001, 0xc003f77, 0xac2055e0, 0x8f820044, 0x3c03ffff, -0x34633f7f, 0x431024, 0x34425080, 0xaf820044, 0x8f830054, 0x3c010001, -0xac2033a0, 0x10000062, 0x24020002, 0x3c020001, 0x8c425618, 0x30424000, -0x10400004, 0x0, 0x8f820044, 0x10000006, 0x3442f080, 0x8f820044, -0x3c03ffff, 0x34633f7f, 0x431024, 0x3442a080, 0xaf820044, 0x8f830054, -0x10000051, 0x24020004, 0xc003bc4, 0x0, 0x1040008d, 0x24020001, -0x8f820214, 0x3c03ffff, 0x3c040001, 0x8c843528, 0x431024, 0x3442251f, -0xaf820214, 0x24020008, 0x14800067, 0xaee279c8, 0x1000006c, 0x0, -0x8ee279c8, 0x2443ffff, 0x2c620007, 0x1040007e, 0x31080, 0x3c010001, -0x220821, 0x8c223238, 0x400008, 0x0, 0xc003ab1, 0x0, -0x3c010001, 0xac203410, 0xaf800204, 0x3c010001, 0xc003f77, 0xac2055e0, -0x8f830054, 0x3c010001, 0xac2033a0, 0x1000002a, 0x24020002, 0x8f830054, -0x3c020001, 0x8c423530, 0x2463d8f0, 0x431023, 0x2c422710, 0x14400064, -0x24020003, 0x10000062, 0xaee279c8, 0x3c020001, 0x8c425618, 0x30424000, -0x10400003, 0x3c0200c8, 0x10000002, 0x344201f6, 0x344201fe, 0xaf820238, -0x8f830054, 0x10000014, 0x24020004, 0x8f830054, 0x3c020001, 0x8c423530, -0x2463d8f0, 0x431023, 0x2c422710, 0x1440004e, 0x24020005, 0x1000004c, -0xaee279c8, 0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, 0xaf800204, -0x3c010001, 0xac2055e0, 0x8f830054, 0x24020006, 0xaee279c8, 0x3c010001, -0x1000003f, 0xac233530, 0x3c05fffe, 0x34a57960, 0x3c040001, 0x8f820054, -0x3c030001, 0x8c633530, 0x3484869f, 0x451021, 0x621823, 0x83202b, -0x10800033, 0x0, 0x24020007, 0x10000030, 0xaee279c8, 0xc003bc4, -0x0, 0x1040002a, 0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001, -0x8c843528, 0x431024, 0x3442251f, 0xaf820214, 0x24020008, 0x1080000b, -0xaee279c8, 0x8f820220, 0x34420002, 0xaf820220, 0x24020001, 0x3c010001, -0xac225590, 0xc00447c, 0x8f840220, 0x10000018, 0x0, 0x8f820220, -0x3c030008, 0x431024, 0x14400013, 0x3c020200, 0x282a025, 0x2402000e, -0x3c010001, 0xac225590, 0xc004899, 0x24040001, 0x8f820220, 0x34420002, -0xc003b6a, 0xaf820220, 0x3c050001, 0x8ca5340c, 0xc0047d1, 0x24040001, -0x10000003, 0x0, 0x3c010001, 0xac223410, 0x8fbf0018, 0x3e00008, -0x27bd0020, 0x8f820200, 0x8f820220, 0x8f820220, 0x34420004, 0xaf820220, -0x8f820200, 0x3c040001, 0x8c84340c, 0x34420004, 0xaf820200, 0x24020002, -0x1082003a, 0x2c820003, 0x10400005, 0x24020001, 0x1082000a, 0x3c03f0ff, -0x100000a8, 0x0, 0x24020004, 0x10820055, 0x24020008, 0x10820074, -0x3c02f0ff, 0x100000a1, 0x0, 0x8f820050, 0x3463ffff, 0x3c05ffff, -0x34a53f7f, 0x431024, 0x3c030700, 0x431025, 0xaf820050, 0x24020e00, -0xaf840200, 0xaf840220, 0xaf820238, 0x8f820044, 0x3c030001, 0x8c6333f8, -0x3c040001, 0x8c84353c, 0x451024, 0x34630022, 0xaf820044, 0x24020004, -0x1082000c, 0xaf830200, 0x3c020001, 0x8c423420, 0x3c030001, 0x8c633404, -0x3c040001, 0x8c8433fc, 0x34428000, 0x621825, 0x641825, 0x1000007e, -0x34620002, 0x3c020001, 0x8c423404, 0x3c030001, 0x8c633420, 0x3c040001, -0x8c8433fc, 0x431025, 0x441025, 0x10000074, 0x34420002, 0x8f830050, -0x3c02f0ff, 0x3442ffff, 0x3c040001, 0x8c843528, 0x621824, 0x3c020d00, -0x621825, 0x24020001, 0xaf830050, 0xaf820200, 0xaf820220, 0x24020e00, -0xaf820238, 0x10800005, 0x3c033f00, 0x3c020001, 0x8c4233f0, 0x10000004, -0x34630070, 0x3c020001, 0x8c4233f0, 0x34630072, 0x431025, 0xaf820200, -0x3c030001, 0x8c6333f4, 0x3c04f700, 0x3c020001, 0x8c423404, 0x3c050001, -0x8ca53420, 0x641825, 0x431025, 0x10000050, 0x451025, 0x3c03f0ff, -0x8f820050, 0x3463ffff, 0x3c04ffff, 0x431024, 0x3c030a00, 0x431025, -0xaf820050, 0x24020001, 0xaf820200, 0xaf820220, 0x24020e01, 0xaf820238, -0x8f820044, 0x34843f7f, 0x3c030001, 0x8c633528, 0x441024, 0x34420080, -0xaf820044, 0x10600005, 0x3c033f00, 0x3c020001, 0x8c4233f0, 0x10000004, -0x346300e0, 0x3c020001, 0x8c4233f0, 0x346300e2, 0x431025, 0xaf820200, -0x10000025, 0x3c05f700, 0x8f830050, 0x3c040001, 0x8c843528, 0x3442ffff, -0x621824, 0xaf830050, 0x10800013, 0x3c0500c8, 0x34a501fb, 0x3c063f00, -0x3c030001, 0x8c633400, 0x3c040001, 0x8c8433f0, 0x34c600e0, 0x24020001, -0xaf820200, 0xaf820220, 0xaf850238, 0x24630001, 0x862025, 0x3c010001, -0xac233400, 0xaf840200, 0x1000000b, 0x3c05f700, 0x3c0200c8, 0x344201fb, -0x3c030001, 0x8c6333f0, 0x3c043f00, 0x348400e2, 0xaf820238, 0x641825, -0xaf830200, 0x3c05f700, 0x34a58000, 0x3c030001, 0x8c6333f4, 0x3c020001, -0x8c423404, 0x3c040001, 0x8c843420, 0x651825, 0x431025, 0x441025, -0xaf820220, 0x3e00008, 0x0, 0x0, 0x27bdffd8, 0xafb50018, -0x80a821, 0xafbe001c, 0xa0f021, 0xafb30014, 0xc09821, 0xafb10010, -0x8821, 0xafbf0020, 0xa6600000, 0xc004433, 0x24040001, 0x26310001, -0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x24110010, -0x2b11024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fffa, 0x2b11024, 0x24110010, 0x3d11024, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x3d11024, 0xc004459, -0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005, -0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7, -0x0, 0xc004459, 0x0, 0x8fbf0020, 0x8fbe001c, 0x8fb50018, -0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb30014, -0x809821, 0xafb50018, 0xa0a821, 0xafbe001c, 0xc0f021, 0xafb10010, -0x8821, 0xafbf0020, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, -0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, -0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010, 0x2711024, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, -0x2711024, 0x24110010, 0x2b11024, 0x10400002, 0x2021, 0x24040001, -0xc004433, 0x118842, 0x1620fffa, 0x2b11024, 0xc004433, 0x24040001, -0xc004433, 0x2021, 0x34118000, 0x97c20000, 0x511024, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0, -0xc004459, 0x0, 0x8fbf0020, 0x8fbe001c, 0x8fb50018, 0x8fb30014, -0x8fb10010, 0x3e00008, 0x27bd0028, 0x3c030001, 0x8c633430, 0x3c020001, -0x8c423474, 0x27bdffd8, 0xafbf0020, 0xafb3001c, 0x10620003, 0xafb10018, -0x3c010001, 0xac233474, 0x2463ffff, 0x2c620013, 0x10400349, 0x31080, -0x3c010001, 0x220821, 0x8c223260, 0x400008, 0x0, 0xc004459, -0x8821, 0x34028000, 0xa7a20010, 0x27b30010, 0xc004433, 0x24040001, -0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, -0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, -0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0xc004433, 0x2021, -0x118842, 0x1620fffc, 0x0, 0xc004433, 0x24040001, 0xc004433, -0x2021, 0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459, -0x0, 0x1000030e, 0x24020002, 0x27b30010, 0xa7a00010, 0x8821, -0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, -0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, 0x24040001, -0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, -0xc004433, 0x2021, 0x118842, 0x1620fffc, 0x0, 0xc004459, -0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005, -0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7, -0x0, 0xc004459, 0x0, 0x97a20010, 0x30428000, 0x144002dc, -0x24020003, 0x100002d8, 0x0, 0x24021200, 0xa7a20010, 0x27b30010, -0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, -0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, -0x2021, 0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, -0x24110010, 0xc004433, 0x2021, 0x118842, 0x1620fffc, 0x0, -0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, -0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, 0x10000296, -0x24020004, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, -0x2c420064, 0x1440029e, 0x24020002, 0x3c030001, 0x8c63353c, 0x10620297, -0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, 0x24020004, -0x10620291, 0x2402000f, 0x1000028f, 0x24020011, 0x1000028d, 0x24020005, -0x24020014, 0xa7a20010, 0x27b30010, 0x8821, 0xc004433, 0x24040001, -0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, -0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, -0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220012, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220012, -0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, -0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, 0x10000248, -0x24020006, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, -0x2c420064, 0x14400250, 0x24020007, 0x1000024c, 0x0, 0x24020006, -0xa7a20010, 0x27b30010, 0x8821, 0xc004433, 0x24040001, 0x26310001, -0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010, -0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fffa, 0x32220001, 0x24110010, 0x32220013, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220013, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, 0x511024, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8, -0x0, 0xc004459, 0x0, 0x8f830054, 0x10000207, 0x24020008, -0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064, -0x1440020f, 0x24020009, 0x1000020b, 0x0, 0x27b30010, 0xa7a00010, -0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, -0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, -0x24110010, 0x32220018, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fffa, 0x32220018, 0xc004459, 0x34118000, 0xc004459, -0x0, 0xc004413, 0x0, 0x50400005, 0x118842, 0x96620000, -0x511025, 0xa6620000, 0x118842, 0x1620fff7, 0x0, 0xc004459, -0x8821, 0x97a20010, 0x27b30010, 0x34420001, 0xa7a20010, 0xc004433, -0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, -0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, -0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220018, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, -0x32220018, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, -0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, -0x10000193, 0x2402000a, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, -0x431023, 0x2c420064, 0x1440019b, 0x2402000b, 0x10000197, 0x0, -0x27b30010, 0xa7a00010, 0x8821, 0xc004433, 0x24040001, 0x26310001, -0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x24110010, -0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fffa, 0x32220001, 0x24110010, 0x32220017, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220017, 0xc004459, -0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005, -0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7, -0x0, 0xc004459, 0x8821, 0x97a20010, 0x27b30010, 0x34420700, -0xa7a20010, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, -0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, -0x2021, 0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, -0x24110010, 0x32220017, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fffa, 0x32220017, 0xc004433, 0x24040001, 0xc004433, -0x2021, 0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459, -0x0, 0x8f830054, 0x1000011f, 0x2402000c, 0x8f830054, 0x3c020001, -0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400127, 0x24020012, -0x10000123, 0x0, 0x27b30010, 0xa7a00010, 0x8821, 0xc004433, -0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, -0x2021, 0xc004433, 0x24040001, 0xc004433, 0x24040001, 0xc004433, -0x2021, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, -0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220014, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, -0x32220014, 0xc004459, 0x34118000, 0xc004459, 0x0, 0xc004413, -0x0, 0x50400005, 0x118842, 0x96620000, 0x511025, 0xa6620000, -0x118842, 0x1620fff7, 0x0, 0xc004459, 0x8821, 0x97a20010, -0x27b30010, 0x34420010, 0xa7a20010, 0xc004433, 0x24040001, 0x26310001, -0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010, -0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fffa, 0x32220001, 0x24110010, 0x32220014, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220014, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, 0x511024, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8, -0x0, 0xc004459, 0x0, 0x8f830054, 0x100000ab, 0x24020013, -0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064, -0x144000b3, 0x2402000d, 0x100000af, 0x0, 0x27b30010, 0xa7a00010, -0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, -0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, -0x24040001, 0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002, -0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, -0x24110010, 0x32220018, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fffa, 0x32220018, 0xc004459, 0x34118000, 0xc004459, -0x0, 0xc004413, 0x0, 0x50400005, 0x118842, 0x96620000, -0x511025, 0xa6620000, 0x118842, 0x1620fff7, 0x0, 0xc004459, -0x8821, 0x97a20010, 0x27b30010, 0x3042fffe, 0xa7a20010, 0xc004433, -0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, -0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, -0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, -0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220018, -0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, -0x32220018, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, -0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, -0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, -0x10000037, 0x2402000e, 0x24020840, 0xa7a20010, 0x27b30010, 0x8821, -0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, -0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021, -0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021, -0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, -0x32220013, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, -0x1620fffa, 0x32220013, 0xc004433, 0x24040001, 0xc004433, 0x2021, -0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001, -0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0, -0x8f830054, 0x24020010, 0x3c010001, 0xac223430, 0x3c010001, 0x1000000c, -0xac233538, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, -0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, 0xac223430, -0x8fbf0020, 0x8fb3001c, 0x8fb10018, 0x3e00008, 0x27bd0028, 0x8f850044, -0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, 0x8f840054, -0x8f820054, 0xa32824, 0x10000002, 0x24840001, 0x8f820054, 0x821023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, -0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, -0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824, -0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, 0x3c030001, -0x431025, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044, -0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, 0x8f820054, -0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, -0x0, 0x3e00008, 0x0, 0x8f820044, 0x3c03fff0, 0x3463ffff, -0x431024, 0xaf820044, 0x8f820044, 0x3c030001, 0x431025, 0xaf820044, -0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, -0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, -0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, -0x0, 0x0, 0x27bdffe8, 0xafbf0010, 0x8ee379c8, 0x24020008, -0x146201ca, 0x0, 0x3c020001, 0x8c423528, 0x14400005, 0x0, -0xc003ab1, 0x8f840224, 0x100001c2, 0x0, 0x8f820220, 0x3c030008, -0x431024, 0x10400026, 0x24020001, 0x8f840224, 0x8f820220, 0x3c030400, -0x431024, 0x10400006, 0x0, 0x3c010001, 0xac2055a0, 0x3c010001, -0x1000000b, 0xac2055c0, 0x3c030001, 0x246355a0, 0x8c620000, 0x24420001, -0xac620000, 0x2c420002, 0x14400003, 0x24020001, 0x3c010001, 0xac2255c0, -0x3c020001, 0x8c4255c0, 0x10400006, 0x30820040, 0x10400004, 0x24020001, -0x3c010001, 0x10000003, 0xac2255c4, 0x3c010001, 0xac2055c4, 0x3c010001, -0xac24559c, 0x3c010001, 0x1000000b, 0xac2055d0, 0x3c010001, 0xac2255d0, -0x3c010001, 0xac2055c0, 0x3c010001, 0xac2055a0, 0x3c010001, 0xac2055c4, -0x3c010001, 0xac20559c, 0x3c030001, 0x8c635590, 0x3c020001, 0x8c425594, -0x50620004, 0x2463ffff, 0x3c010001, 0xac235594, 0x2463ffff, 0x2c62000e, -0x1040017e, 0x31080, 0x3c010001, 0x220821, 0x8c2232b0, 0x400008, -0x0, 0x3c02fdff, 0x3442ffff, 0x282a024, 0x24020002, 0x3c010001, -0xac2055c0, 0x3c010001, 0xac2055a0, 0x3c010001, 0xac2055d0, 0x3c010001, -0xac20559c, 0x3c010001, 0xac2055c4, 0x3c010001, 0xac2055b8, 0x3c010001, -0xac2055b0, 0xaf800224, 0x3c010001, 0xac225590, 0xc003ab1, 0x0, -0xaf800204, 0x8f820200, 0x2403fffd, 0x431024, 0xaf820200, 0x3c010001, -0xac2055e0, 0x8f830054, 0x3c020001, 0x8c4255b8, 0x24040001, 0x3c010001, -0xac2455cc, 0x24420001, 0x3c010001, 0xac2255b8, 0x2c420004, 0x3c010001, -0xac2355b4, 0x14400006, 0x24020003, 0x3c010001, 0xac243410, 0x3c010001, -0x10000148, 0xac2055b8, 0x3c010001, 0x10000145, 0xac225590, 0x8f830054, -0x3c020001, 0x8c4255b4, 0x2463d8f0, 0x431023, 0x2c422710, 0x1440013d, -0x24020004, 0x3c010001, 0x1000013a, 0xac225590, 0x3c040001, 0x8c84352c, -0x3c010001, 0xc00464e, 0xac2055a8, 0x3c020001, 0x8c4255dc, 0xaf820204, -0x8f820204, 0x30420030, 0x14400125, 0x24020002, 0x3c030001, 0x8c6355dc, -0x24020005, 0x3c010001, 0xac225590, 0x3c010001, 0x10000126, 0xac2355e0, -0x3c020001, 0x8c4255c0, 0x10400122, 0x0, 0x3c020001, 0x8c42559c, -0x1040011e, 0x0, 0x3c010001, 0xac2255c8, 0x24020003, 0x3c010001, -0xac2255a0, 0x100000c1, 0x24020006, 0x3c010001, 0xac2055a8, 0x8f820204, -0x34420040, 0xaf820204, 0x3c020001, 0x8c4255e0, 0x24030007, 0x3c010001, -0xac235590, 0x34420040, 0x3c010001, 0xac2255e0, 0x3c020001, 0x8c4255c0, -0x10400005, 0x0, 0x3c020001, 0x8c42559c, 0x104000f9, 0x24020002, -0x3c050001, 0x24a555a0, 0x8ca20000, 0x2c424e21, 0x104000f3, 0x24020002, -0x3c020001, 0x8c4255c4, 0x104000f8, 0x2404ffbf, 0x3c020001, 0x8c42559c, -0x3c030001, 0x8c6355c8, 0x441024, 0x641824, 0x14430007, 0x24020001, -0x24020003, 0xaca20000, 0x24020008, 0x3c010001, 0x100000ea, 0xac225590, -0x3c010001, 0x100000e7, 0xac225590, 0x3c020001, 0x8c4255cc, 0x1040000c, -0x24020001, 0x3c040001, 0xc00465b, 0x8c84559c, 0x3c020001, 0x8c4255e8, -0x14400005, 0x24020001, 0x3c020001, 0x8c4255e4, 0x10400006, 0x24020001, -0x3c010001, 0xac223410, 0x3c010001, 0x100000d3, 0xac2055b8, 0x8f820204, -0x34420040, 0xaf820204, 0x3c020001, 0x8c4255e0, 0x3c030001, 0x8c6355b0, -0x34420040, 0x3c010001, 0xac2255e0, 0x3c020001, 0x8c42559c, 0x2c630001, -0x318c0, 0x3c010001, 0xac2355b0, 0x30420008, 0x3c010001, 0xac2255ac, -0x8f830054, 0x24020009, 0x3c010001, 0xac225590, 0x3c010001, 0x100000b9, -0xac2355b4, 0x8f830054, 0x3c020001, 0x8c4255b4, 0x2463d8f0, 0x431023, -0x2c422710, 0x1440009f, 0x0, 0x3c020001, 0x8c4255c0, 0x10400005, -0x0, 0x3c020001, 0x8c42559c, 0x104000a0, 0x24020002, 0x3c030001, -0x246355a0, 0x8c620000, 0x2c424e21, 0x1040009a, 0x24020002, 0x3c020001, -0x8c4255cc, 0x1040000e, 0x0, 0x3c020001, 0x8c42559c, 0x3c010001, -0xac2055cc, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204, 0x30420080, -0x1440000c, 0x24020003, 0x10000029, 0x2402000c, 0x3c020001, 0x8c42559c, -0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080, 0x1040001f, -0x24020003, 0xac620000, 0x2402000a, 0x3c010001, 0xac225590, 0x3c040001, -0x248455d8, 0x8c820000, 0x3c030001, 0x8c6355b0, 0x431025, 0xaf820204, -0x8c830000, 0x3c040001, 0x8c8455b0, 0x2402000b, 0x3c010001, 0xac225590, -0x641825, 0x3c010001, 0xac2355e0, 0x3c050001, 0x24a555a0, 0x8ca20000, -0x2c424e21, 0x10400066, 0x24020002, 0x3c020001, 0x8c4255d0, 0x10400005, -0x0, 0x2402000c, 0x3c010001, 0x10000067, 0xac225590, 0x3c020001, -0x8c4255c0, 0x10400063, 0x0, 0x3c040001, 0x8c84559c, 0x10800055, -0x30820008, 0x3c030001, 0x8c6355ac, 0x1062005b, 0x24020003, 0x3c010001, -0xac2455c8, 0xaca20000, 0x24020006, 0x3c010001, 0x10000054, 0xac225590, -0x8f820200, 0x34420002, 0xaf820200, 0x8f830054, 0x2402000d, 0x3c010001, -0xac225590, 0x3c010001, 0xac2355b4, 0x8f830054, 0x3c020001, 0x8c4255b4, -0x2463d8f0, 0x431023, 0x2c422710, 0x14400031, 0x0, 0x3c020001, -0x8c4255d0, 0x10400020, 0x2402000e, 0x3c030001, 0x8c6355e4, 0x3c010001, -0x14600015, 0xac225590, 0xc003b6a, 0x0, 0x3c050001, 0x8ca5340c, -0xc0047d1, 0x24040001, 0x3c030001, 0x8c63340c, 0x24020004, 0x14620005, -0x2403fffb, 0x3c020001, 0x8c423408, 0x10000003, 0x2403fff7, 0x3c020001, -0x8c423408, 0x431024, 0x3c010001, 0xac223408, 0x8f830224, 0x3c020200, -0x3c010001, 0xac2355ec, 0x10000020, 0x282a025, 0x3c020001, 0x8c4255c0, -0x10400005, 0x0, 0x3c020001, 0x8c42559c, 0x1040000f, 0x24020002, -0x3c020001, 0x8c4255a0, 0x2c424e21, 0x1040000a, 0x24020002, 0x3c020001, -0x8c4255c0, 0x1040000f, 0x0, 0x3c020001, 0x8c42559c, 0x1440000b, -0x0, 0x24020002, 0x3c010001, 0x10000007, 0xac225590, 0x3c020001, -0x8c4255c0, 0x10400003, 0x0, 0xc003ab1, 0x0, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, 0x27bd0018, -0x3c030001, 0x246355e8, 0x8c620000, 0x10400005, 0x34422000, 0x3c010001, -0xac2255dc, 0x10000003, 0xac600000, 0x3c010001, 0xac2455dc, 0x3e00008, -0x0, 0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, 0xac2255e4, -0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030, -0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, 0x21200, -0x3c040001, 0x8c84352c, 0x621825, 0x331c2, 0x3c030001, 0x2463348c, -0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2, -0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025, -0x0, 0x10600007, 0x24020002, 0x10620013, 0x24020003, 0x1062002c, -0x3c05000f, 0x10000037, 0x0, 0x8f820200, 0x2403feff, 0x431024, -0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220, -0x3c010001, 0xac205624, 0x3c010001, 0x10000034, 0xac20562c, 0x8f820200, -0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, -0xaf820220, 0x24020100, 0x3c010001, 0xac225624, 0x3c010001, 0x10000026, -0xac20562c, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, -0x3c030001, 0x431025, 0xaf820220, 0x3c010001, 0xac205624, 0x3c010001, -0x10000019, 0xac23562c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, -0x3c030001, 0x431025, 0xaf820220, 0x24020100, 0x3c010001, 0xac225624, -0x3c010001, 0x1000000c, 0xac23562c, 0x34a5ffff, 0x3c040001, 0x248432e8, -0xafa30010, 0xc00290f, 0xafa00014, 0x10000004, 0x0, 0x24020030, -0x3c010001, 0xac2255e8, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, -0x27bdffc8, 0xafb30024, 0x809821, 0xafbe002c, 0xa0f021, 0xafb10020, -0xc08821, 0x3c040001, 0x24843300, 0x3c050009, 0x3c020001, 0x8c42340c, -0x34a59001, 0x2603021, 0x3c03821, 0xafbf0030, 0xafb50028, 0xa7a0001a, -0xafb10014, 0xc00290f, 0xafa20010, 0x24020002, 0x13c200e7, 0x2fc20003, -0x10400005, 0x24020001, 0x13c2000a, 0x3c02fffb, 0x100000e1, 0x0, -0x24020004, 0x13c2006d, 0x24020008, 0x13c2006c, 0x3c02ffec, 0x100000da, -0x0, 0x3442ffff, 0x2228824, 0x13a940, 0x3c010001, 0x350821, -0xac3155fc, 0x3c024000, 0x2221024, 0x10400046, 0x1123c2, 0x30840030, -0x111382, 0x3042000c, 0x3c030001, 0x24633434, 0x431021, 0x823821, -0x3c020020, 0x2221024, 0x10400006, 0x24020100, 0x3c010001, 0x350821, -0xac225600, 0x10000005, 0x3c020080, 0x3c010001, 0x350821, 0xac205600, -0x3c020080, 0x2221024, 0x10400006, 0x131940, 0x3c020001, 0x3c010001, -0x230821, 0x10000005, 0xac225608, 0x131140, 0x3c010001, 0x220821, -0xac205608, 0x94e30000, 0x32224000, 0x10400003, 0xa7a30018, 0x34624000, -0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, 0x24e60002, 0x34420001, -0xc004076, 0xa4e20002, 0x24040001, 0x2821, 0xc004076, 0x27a60018, -0x3c020001, 0x8c42340c, 0x24130001, 0x3c010001, 0xac333418, 0x145e0004, -0x32228000, 0xc003ab1, 0x0, 0x32228000, 0x10400093, 0x0, -0xc003ab1, 0x0, 0x24020002, 0x3c010001, 0xac333410, 0x3c010001, -0x1000008b, 0xac22340c, 0x24040001, 0x24050004, 0x27b1001a, 0xc004076, -0x2203021, 0x24040001, 0x2821, 0xc004076, 0x2203021, 0x3c020001, -0x551021, 0x8c4255f4, 0x3c040001, 0x8c84340c, 0x3c03bfff, 0x3463ffff, -0x3c010001, 0xac3e3418, 0x431024, 0x3c010001, 0x350821, 0x109e0072, -0xac2255f4, 0x10000072, 0x0, 0x3c02ffec, 0x3442ffff, 0x2228824, -0x3c020008, 0x2228825, 0x131140, 0x3c010001, 0x220821, 0xac3155f8, -0x3c022000, 0x2221024, 0x10400005, 0x24020001, 0x3c010001, 0xac223528, -0x10000004, 0x3c024000, 0x3c010001, 0xac203528, 0x3c024000, 0x2221024, -0x1440001a, 0x0, 0x3c020001, 0x8c423528, 0x10400005, 0x24022020, -0x3c010001, 0xac22352c, 0x24020001, 0xaee279c8, 0x3c04bfff, 0x131940, -0x3c020001, 0x431021, 0x8c4255f0, 0x3c050001, 0x8ca5340c, 0x3484ffff, -0x441024, 0x3c010001, 0x230821, 0xac2255f0, 0x24020001, 0x10a20044, -0x0, 0x10000040, 0x0, 0x3c020001, 0x8c423528, 0x1040001c, -0x24022000, 0x3c010001, 0xac22352c, 0x3c0300a0, 0x2231024, 0x14430005, -0x131140, 0x3402a000, 0x3c010001, 0x1000002d, 0xac22352c, 0x3c030001, -0x621821, 0x8c6355f8, 0x3c020020, 0x621024, 0x10400004, 0x24022001, -0x3c010001, 0x10000023, 0xac22352c, 0x3c020080, 0x621024, 0x1040001f, -0x3402a001, 0x3c010001, 0x1000001c, 0xac22352c, 0x3c020020, 0x2221024, -0x10400007, 0x131940, 0x24020100, 0x3c010001, 0x230821, 0xac225604, -0x10000006, 0x3c020080, 0x131140, 0x3c010001, 0x220821, 0xac205604, -0x3c020080, 0x2221024, 0x10400006, 0x131940, 0x3c020001, 0x3c010001, -0x230821, 0x10000005, 0xac22560c, 0x131140, 0x3c010001, 0x220821, -0xac20560c, 0x3c030001, 0x8c63340c, 0x24020001, 0x10620003, 0x0, -0xc003ab1, 0x0, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024, -0x8fb10020, 0x3e00008, 0x27bd0038, 0x27bdffc8, 0xafb50028, 0xa821, -0xafbe002c, 0xf021, 0xafb30024, 0x9821, 0x24020002, 0xafbf0030, -0xafb10020, 0xafa4001c, 0xa7a00012, 0x10a2006a, 0xa7a00010, 0x2ca20003, -0x10400005, 0x24020001, 0x10a2000a, 0x3c024000, 0x100000ad, 0x2601021, -0x24020004, 0x10a20060, 0x24020008, 0x10a2005e, 0x2601021, 0x100000a6, -0x0, 0x8fa7001c, 0x78940, 0x3c030001, 0x711821, 0x8c6355fc, -0x621024, 0x14400009, 0x24040001, 0x3c027fff, 0x3442ffff, 0x629824, -0x3c010001, 0x310821, 0xac3355f4, 0x10000096, 0x2601021, 0x24050001, -0xc004034, 0x27a60010, 0x24040001, 0x24050001, 0xc004034, 0x27a60010, -0x97a20010, 0x30420004, 0x10400034, 0x3c134000, 0x3c030001, 0x8c63353c, -0x24020003, 0x10620008, 0x2c620004, 0x14400029, 0x3c028000, 0x24020004, -0x10620014, 0x24040001, 0x10000024, 0x3c028000, 0x24040001, 0x24050011, -0x27b10012, 0xc004034, 0x2203021, 0x24040001, 0x24050011, 0xc004034, -0x2203021, 0x97a30012, 0x30624000, 0x10400002, 0x3c1e0010, 0x3c1e0008, -0x3c150001, 0x10000010, 0x30628000, 0x24050014, 0x27b10012, 0xc004034, -0x2203021, 0x24040001, 0x24050014, 0xc004034, 0x2203021, 0x97a30012, -0x30621000, 0x10400002, 0x3c1e0010, 0x3c1e0008, 0x3c150001, 0x30620800, -0x54400001, 0x3c150002, 0x3c028000, 0x2621025, 0x2be1825, 0x10000007, -0x439825, 0x3c130001, 0x2719821, 0x8e7355fc, 0x3c027fff, 0x3442ffff, -0x2629824, 0x8fa7001c, 0x71140, 0x3c010001, 0x220821, 0xac3355f4, -0x1000004b, 0x2601021, 0x8fa7001c, 0x72140, 0x3c030001, 0x641821, -0x8c6355f8, 0x3c024000, 0x621024, 0x14400008, 0x3c027fff, 0x3442ffff, -0x629824, 0x3c010001, 0x240821, 0xac3355f0, 0x1000003b, 0x2601021, -0x3c020001, 0x8c42341c, 0x1040002e, 0x3c13c00c, 0x3c020001, 0x8c423528, -0x3c03e00c, 0x3c010001, 0x240821, 0x8c245604, 0x2102b, 0x21023, -0x431024, 0x10800004, 0x539825, 0x3c020020, 0x10000004, 0x2629825, -0x3c02ffdf, 0x3442ffff, 0x2629824, 0x8fa7001c, 0x71140, 0x3c010001, -0x220821, 0x8c22560c, 0x10400003, 0x3c020080, 0x10000004, 0x2629825, -0x3c02ff7f, 0x3442ffff, 0x2629824, 0x3c020001, 0x8c423480, 0x10400002, -0x3c020800, 0x2629825, 0x3c020001, 0x8c423484, 0x10400002, 0x3c020400, -0x2629825, 0x3c020001, 0x8c423488, 0x10400006, 0x3c020100, 0x10000004, -0x2629825, 0x3c027fff, 0x3442ffff, 0x629824, 0x8fa7001c, 0x71140, -0x3c010001, 0x220821, 0xac3355f0, 0x2601021, 0x8fbf0030, 0x8fbe002c, -0x8fb50028, 0x8fb30024, 0x8fb10020, 0x3e00008, 0x27bd0038, 0x27bdffe0, -0xafb50018, 0x80a821, 0xafbf001c, 0xafb30014, 0xafb10010, 0x8f840200, -0x3c030001, 0x8c63340c, 0x8f860220, 0x24020002, 0x106200a3, 0x2c620003, -0x10400005, 0x24020001, 0x1062000a, 0x151940, 0x1000009d, 0x0, -0x24020004, 0x10620053, 0x24020008, 0x10620052, 0x159940, 0x10000096, -0x0, 0x3c050001, 0xa32821, 0x8ca555fc, 0x3c110001, 0x2238821, -0x8e3155f4, 0x3c024000, 0xa21024, 0x10400038, 0x3c020008, 0x2221024, -0x10400020, 0x34840002, 0x3c020001, 0x431021, 0x8c425600, 0x10400005, -0x34840020, 0x34840100, 0x3c020020, 0x10000006, 0x2228825, 0x2402feff, -0x822024, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x151140, 0x3c010001, -0x220821, 0x8c225608, 0x10400005, 0x3c020001, 0xc23025, 0x3c020080, -0x10000016, 0x2228825, 0x3c02fffe, 0x3442ffff, 0xc23024, 0x3c02ff7f, -0x3442ffff, 0x1000000f, 0x2228824, 0x2402fedf, 0x822024, 0x3c02fffe, -0x3442ffff, 0xc23024, 0x3c02ff5f, 0x3442ffff, 0x2228824, 0x3c010001, -0x230821, 0xac205600, 0x3c010001, 0x230821, 0xac205608, 0xaf840200, -0xaf860220, 0x8f820220, 0x34420002, 0xaf820220, 0x1000000a, 0x151140, -0x3c02bfff, 0x3442ffff, 0x8f830200, 0x2228824, 0x2402fffd, 0x621824, -0xc003ab1, 0xaf830200, 0x151140, 0x3c010001, 0x220821, 0x10000048, -0xac3155f4, 0x159940, 0x3c050001, 0xb32821, 0x8ca555f8, 0x3c110001, -0x2338821, 0x8e3155f0, 0x3c024000, 0xa21024, 0x14400010, 0x0, -0x3c020001, 0x8c423528, 0x14400005, 0x3c02bfff, 0x8f820200, 0x34420002, -0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc003ab1, 0x2228824, 0x3c010001, -0x330821, 0x1000002e, 0xac3155f0, 0x3c020001, 0x8c423528, 0x14400027, -0x151140, 0x3c020020, 0xa21024, 0x10400007, 0x34840020, 0x24020100, -0x3c010001, 0x330821, 0xac225604, 0x10000006, 0x34840100, 0x3c010001, -0x330821, 0xac205604, 0x2402feff, 0x822024, 0x3c020080, 0xa21024, -0x10400007, 0x151940, 0x3c020001, 0x3c010001, 0x230821, 0xac22560c, -0x10000008, 0xc23025, 0x151140, 0x3c010001, 0x220821, 0xac20560c, -0x3c02fffe, 0x3442ffff, 0xc23024, 0xaf840200, 0xaf860220, 0x8f820220, -0x34420002, 0xaf820220, 0x151140, 0x3c010001, 0x220821, 0xac3155f0, -0x8fbf001c, 0x8fb50018, 0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0020, -0x0, 0x0, 0x1821, 0x308400ff, 0x2405ffdf, 0x2406ffbf, -0x641007, 0x30420001, 0x10400004, 0x0, 0x8f820044, 0x10000003, -0x34420040, 0x8f820044, 0x461024, 0xaf820044, 0x8f820044, 0x34420020, -0xaf820044, 0x8f820044, 0x451024, 0xaf820044, 0x24630001, 0x28620008, -0x5440ffee, 0x641007, 0x3e00008, 0x0, 0x0, 0x0, -0x0 }; -u32 tigon2FwData[(MAX_DATA_LEN/4) + 1] __initdata = { -0x1, 0x1, 0x1, 0xc001fc, 0x3ffc, 0xc00000, -0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x0, 0x0, -0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242, 0x0, -0x0, 0x0, 0x1ffffc, 0x1fff7c, 0x0, 0x0, -0x1, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x60cf00, 0x60, 0xcf000000, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x3, 0x0, 0x1, 0x0, -0x0, 0x0, 0x0, 0x0, 0x1, 0x0, -0x0, 0x0, 0x0, 0x0, 0x1000000, 0x21000000, -0x12000140, 0x0, 0x0, 0x20000000, 0x120000a0, 0x0, -0x12000060, 0x12000180, 0x120001e0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x0, 0x0, 0x30001, 0x1, -0x30201, 0x0, 0x0 }; +0x0, +0x10000003, 0x0, 0xd, 0xd, +0x3c1d0001, 0x8fbd3ca0, 0x3a0f021, 0x3c100000, +0x26104000, 0xc0010c0, 0x0, 0xd, +0x3c1d0001, 0x8fbd3ca4, 0x3a0f021, 0x3c100000, +0x26104000, 0xc00178d, 0x0, 0xd, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x2000008, +0x0, 0x80016de, 0x3c0a0001, 0x80016de, +0x3c0a0002, 0x80016de, 0x0, 0x8002acd, +0x0, 0x8002a70, 0x0, 0x80016de, +0x3c0a0004, 0x8003095, 0x0, 0x8001a0e, +0x0, 0x800373f, 0x0, 0x80036e6, +0x0, 0x80016de, 0x3c0a0006, 0x80037ad, +0x3c0a0007, 0x80016de, 0x3c0a0008, 0x80016de, +0x3c0a0009, 0x8003805, 0x0, 0x8002cc0, +0x0, 0x80016de, 0x3c0a000b, 0x80016de, +0x3c0a000c, 0x80016de, 0x3c0a000d, 0x80027ac, +0x0, 0x800275a, 0x0, 0x80016de, +0x3c0a000e, 0x8001f28, 0x0, 0x8001920, +0x0, 0x80019c0, 0x0, 0x8003a70, +0x0, 0x8003a5e, 0x0, 0x80016de, +0x0, 0x80018c6, 0x0, 0x80016de, +0x0, 0x80016de, 0x3c0a0013, 0x80016de, +0x3c0a0014, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x27bdffe0, +0x3c1cc000, 0xafbf001c, 0xafb00018, 0x8f820140, +0x24030003, 0xaf8300ec, 0x34420004, 0xc0029b8, +0xaf820140, 0x3c0100c0, 0xc001712, 0xac203ffc, +0x403021, 0x3c020008, 0x3c010001, 0xac263dd8, +0x50c2000d, 0x3c020003, 0x3c100010, 0x10d00009, +0x24050100, 0x3c040001, 0x24842d34, 0x3821, +0xafa00010, 0xc0029d3, 0xafa00014, 0x3c010001, +0xac303dd8, 0x3c020003, 0x34422000, 0x3c010001, +0xac223de8, 0x24020008, 0x3c010001, 0xac223df0, +0x2402001f, 0x3c010001, 0xac223e00, 0x24020016, +0x3c010001, 0xac223dd4, 0x3c05fffe, 0x34a56f08, +0x3c020001, 0x8c423dd8, 0x3c030001, 0x24635f40, +0x3c040001, 0x8c843c54, 0x431023, 0x14800002, +0x458021, 0x2610fa48, 0x2402f000, 0x2028024, +0xc001734, 0x2002021, 0x2022823, 0x3c040020, +0x821823, 0x651823, 0x247bb000, 0x3c03fffe, +0x3463bf08, 0x363b821, 0x3c0600bf, 0x34c6f000, +0x3c070001, 0x8ce73c50, 0x3c0300bf, 0x3463e000, +0x852023, 0x3c010001, 0xac243de4, 0x822023, +0x3c010001, 0xac223dc0, 0x27620ffc, 0x3c010001, +0xac223ca0, 0x27621ffc, 0xdb3023, 0x7b1823, +0x3c010001, 0xac253dcc, 0x3c010001, 0xac243dc4, +0x3c010001, 0xac223ca4, 0xaf860150, 0x10e00011, +0xaf830250, 0x3c1d0001, 0x8fbd3c5c, 0x3a0f021, +0xc0016f8, 0x0, 0x3c020001, 0x8c423c60, +0x3c030001, 0x8c633c64, 0x2442fe00, 0x24630200, +0x3c010001, 0xac223c60, 0x3c010001, 0x10000004, +0xac233c64, 0x3c1d0001, 0x8fbd3ca0, 0x3a0f021, +0x3c020001, 0x8c423c54, 0x1040000d, 0x26fafa48, +0x3c020001, 0x8c423c60, 0x3c030001, 0x8c633c64, +0x3c1a0001, 0x8f5a3c64, 0x2442fa48, 0x246305b8, +0x3c010001, 0xac223c60, 0x3c010001, 0xac233c64, +0x3c020001, 0x8c423c58, 0x14400003, 0x0, +0x3c010001, 0xac203c60, 0xc00114d, 0x0, +0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, +0x3c020001, 0x8c423c60, 0x3c030001, 0x8c633c64, +0x27bdffa0, 0xafb00040, 0x3c100001, 0x8e1036f4, +0x3c040001, 0x24842d40, 0xafbf0058, 0xafbe0054, +0xafb50050, 0xafb3004c, 0xafb20048, 0xafb10044, +0xafa20034, 0xafa30030, 0xafa00010, 0xafa00014, +0x8f860040, 0x24050200, 0xc0029d3, 0x2003821, +0x8f830040, 0x3c02f000, 0x621824, 0x3c026000, +0x1062000b, 0xa3a0003f, 0x240e0001, 0x3c040001, +0x24842d48, 0xa3ae003f, 0xafa00010, 0xafa00014, +0x8f860040, 0x24050300, 0xc0029d3, 0x2003821, +0x8f820240, 0x3c030001, 0x431025, 0xaf820240, +0xaf800048, 0x8f820048, 0x14400005, 0x0, +0xaf800048, 0x8f820048, 0x10400004, 0x0, +0xaf800048, 0x10000003, 0x2e02021, 0xaf80004c, +0x2e02021, 0x3c050001, 0xc002a40, 0x34a540f8, +0x3402021, 0xc002a40, 0x240505b8, 0x3c020001, +0x8c423de4, 0x3c0d0001, 0x8dad3dc4, 0x3c030001, +0x8c633dc0, 0x3c080001, 0x8d083dcc, 0x3c090001, +0x8d293de8, 0x3c0a0001, 0x8d4a3df0, 0x3c0b0001, +0x8d6b3e00, 0x3c0c0001, 0x8d8c3dd4, 0x3c040001, +0x24842d54, 0x24050400, 0xaf420130, 0x8f420130, +0x24060001, 0x24070001, 0xaf400000, 0xaf4d012c, +0xaf430138, 0xaf48013c, 0xaf490140, 0xaf4a0144, +0xaf4b0148, 0xaf4c014c, 0x2442ff80, 0xaf420134, +0x24020001, 0xafa20010, 0xc0029d3, 0xafa00014, +0x8f42012c, 0xafa20010, 0x8f420130, 0xafa20014, +0x8f460138, 0x8f47013c, 0x3c040001, 0x24842d60, +0xc0029d3, 0x24050500, 0xafb70010, 0xafba0014, +0x8f460140, 0x8f470144, 0x3c040001, 0x24842d6c, +0xc0029d3, 0x24050600, 0x3c020001, 0x8c423dd8, +0x3603821, 0x3c060001, 0x24c65f40, 0x2448ffff, +0x1061824, 0xe81024, 0x43102b, 0x10400006, +0x24050900, 0x3c040001, 0x24842d78, 0xafa80010, +0xc0029d3, 0xafa00014, 0x8f82000c, 0xafa20010, +0x8f82003c, 0xafa20014, 0x8f860000, 0x8f870004, +0x3c040001, 0x24842d84, 0xc0029d3, 0x24051000, +0x8c020220, 0x8c030224, 0x8c060218, 0x8c07021c, +0x3c040001, 0x24842d8c, 0x24051100, 0xafa20010, +0xc0029d3, 0xafa30014, 0xaf800054, 0xaf80011c, +0x8c020218, 0x30420002, 0x10400009, 0x0, +0x8c020220, 0x3c030002, 0x34630004, 0x431025, +0xaf42000c, 0x8c02021c, 0x10000008, 0x34420004, +0x8c020220, 0x3c030002, 0x34630006, 0x431025, +0xaf42000c, 0x8c02021c, 0x34420006, 0xaf420014, +0x8c020218, 0x30420010, 0x1040000a, 0x0, +0x8c02021c, 0x34420004, 0xaf420010, 0x8c020220, +0x3c03000a, 0x34630004, 0x431025, 0x10000009, +0xaf420008, 0x8c020220, 0x3c03000a, 0x34630006, +0x431025, 0xaf420008, 0x8c02021c, 0x34420006, +0xaf420010, 0x24020001, 0xaf8200a0, 0xaf8200b0, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, +0x0, 0x8c040208, 0x8c05020c, 0x26e20028, +0xaee20020, 0x24020490, 0xaee20010, 0xaee40008, +0xaee5000c, 0x26e40008, 0x8c820000, 0x8c830004, +0xaf820090, 0xaf830094, 0x8c820018, 0xaf8200b4, +0x9482000a, 0xaf82009c, 0x8f8200b0, 0x8f430014, +0x431025, 0xaf8200b0, 0x8f8200b0, 0x30420004, +0x1440fffd, 0x24051200, 0x96e20472, 0x96e60452, +0x96e70462, 0xafa20010, 0x96e20482, 0x3c040001, +0x24842d94, 0xc0029d3, 0xafa20014, 0x96f00452, +0x32020001, 0x10400002, 0xb021, 0x24160001, +0x32020002, 0x54400001, 0x36d60002, 0x32020008, +0x54400001, 0x36d60004, 0x32020010, 0x54400001, +0x36d60008, 0x32020020, 0x54400001, 0x36d60010, +0x32020040, 0x54400001, 0x36d60020, 0x32020080, +0x54400001, 0x36d60040, 0x96e60482, 0x30c20200, +0x54400001, 0x36d64000, 0x96e30472, 0x30620200, +0x10400003, 0x30620100, 0x10000003, 0x36d62000, +0x54400001, 0x36d61000, 0x96f00462, 0x32c24000, +0x14400004, 0x3207009b, 0x30c2009b, 0x14e20007, +0x240e0001, 0x32c22000, 0x1440000d, 0x32020001, +0x3062009b, 0x10e20009, 0x240e0001, 0x3c040001, +0x24842da0, 0x24051300, 0x2003821, 0xa3ae003f, +0xafa30010, 0xc0029d3, 0xafa00014, 0x32020001, +0x54400001, 0x36d60080, 0x32020002, 0x54400001, +0x36d60100, 0x32020008, 0x54400001, 0x36d60200, +0x32020010, 0x54400001, 0x36d60400, 0x32020080, +0x54400001, 0x36d60800, 0x8c020218, 0x30420200, +0x10400002, 0x3c020008, 0x2c2b025, 0x8c020218, +0x30420800, 0x10400002, 0x3c020080, 0x2c2b025, +0x8c020218, 0x30420400, 0x10400002, 0x3c020100, +0x2c2b025, 0x8c020218, 0x30420100, 0x10400002, +0x3c020200, 0x2c2b025, 0x8c020218, 0x30420080, +0x10400002, 0x3c020400, 0x2c2b025, 0x8c020218, +0x30422000, 0x10400002, 0x3c020010, 0x2c2b025, +0x8c020218, 0x30424000, 0x10400002, 0x3c020020, +0x2c2b025, 0x8c020218, 0x30421000, 0x10400002, +0x3c020040, 0x2c2b025, 0x8ee20498, 0x8ee3049c, +0xaf420150, 0xaf430154, 0x8ee204a0, 0x8ee304a4, +0xaf420158, 0xaf43015c, 0x8ee204a8, 0x8ee304ac, +0xaf420160, 0xaf430164, 0x8ee20428, 0x8ee3042c, +0xaf420168, 0xaf43016c, 0x8ee20448, 0x8ee3044c, +0xaf420170, 0xaf430174, 0x8ee20458, 0x8ee3045c, +0xaf420178, 0xaf43017c, 0x8ee20468, 0x8ee3046c, +0xaf420180, 0xaf430184, 0x8ee20478, 0x8ee3047c, +0xaf420188, 0xaf43018c, 0x8ee20488, 0x8ee3048c, +0xaf420190, 0xaf430194, 0x8ee204b0, 0x8ee304b4, +0x24040080, 0xaf420198, 0xaf43019c, 0xc002a40, +0x24050080, 0x8c02025c, 0x27440214, 0xaf4201e0, +0x8c020260, 0x24050200, 0x24060008, 0xc002a57, +0xaf4201e8, 0x3c043b9a, 0x3484ca00, 0x3821, +0x24020006, 0x24030002, 0xaf4201e4, 0x240203e8, +0xaf4301f4, 0xaf4301f0, 0xaf4401ec, 0xaf420284, +0x24020001, 0xaf430280, 0xaf42028c, 0x3c030001, +0x671821, 0x90633c68, 0x3471021, 0x24e70001, +0xa043021c, 0x2ce2000f, 0x1440fff8, 0x3471821, +0x24e70001, 0x3c080001, 0x350840f8, 0x8f820040, +0x3c040001, 0x24842dac, 0x24051400, 0x21702, +0x24420030, 0xa062021c, 0x3471021, 0xa040021c, +0x8c070218, 0x2c03021, 0x240205b8, 0xafa20010, +0xc0029d3, 0xafa80014, 0x3c040001, 0x24842db8, +0x3c050000, 0x24a55b3c, 0x24060010, 0x27b10030, +0x2203821, 0x27b30034, 0xc001750, 0xafb30010, +0x3c030001, 0x8c633c58, 0x1060000a, 0x408021, +0x8fa30030, 0x2405ff00, 0x8fa20034, 0x246400ff, +0x852024, 0x831823, 0x431023, 0xafa20034, +0xafa40030, 0xafb30010, 0x3c040001, 0x24842dc4, +0x3c050000, 0x24a54100, 0x24060108, 0xc001750, +0x2203821, 0x409021, 0x32c20003, 0x50400045, +0x2203821, 0x8f820050, 0x3c030010, 0x431024, +0x10400016, 0x0, 0x8c020218, 0x30420040, +0x1040000f, 0x24020001, 0x8f820050, 0x8c030218, +0x240e0001, 0x3c040001, 0x24842dd0, 0xa3ae003f, +0xafa20010, 0xafa30014, 0x8f870040, 0x24051500, +0xc0029d3, 0x2c03021, 0x10000004, 0x0, +0x3c010001, 0x370821, 0xa02240f4, 0x3c040001, +0x24842ddc, 0x3c050001, 0x24a59ce8, 0x3c060001, +0x24c69d60, 0xc53023, 0x8f420010, 0x27b30030, +0x2603821, 0x27b10034, 0x34420a00, 0xaf420010, +0xc001750, 0xafb10010, 0x3c040001, 0x24842df0, +0x3c050001, 0x24a5af7c, 0x3c060001, 0x24c6b2f8, +0xc53023, 0x2603821, 0xaf420108, 0xc001750, +0xafb10010, 0x3c040001, 0x24842e0c, 0x3c050001, +0x24a5b714, 0x3c060001, 0x24c6c1d4, 0xc53023, +0x2603821, 0x3c010001, 0xac223e30, 0xc001750, +0xafb10010, 0x3c040001, 0x24842e24, 0x10000024, +0x24051600, 0x3c040001, 0x24842e2c, 0x3c050001, +0x24a59bb4, 0x3c060001, 0x24c69ce0, 0xc53023, +0xc001750, 0xafb30010, 0x3c040001, 0x24842e3c, +0x3c050001, 0x24a5ab34, 0x3c060001, 0x24c6af74, +0xc53023, 0x2203821, 0xaf420108, 0xc001750, +0xafb30010, 0x3c040001, 0x24842e50, 0x3c050001, +0x24a5b300, 0x3c060001, 0x24c6b70c, 0xc53023, +0x2203821, 0x3c010001, 0xac223e30, 0xc001750, +0xafb30010, 0x3c040001, 0x24842e64, 0x24051650, +0x2c03021, 0x3821, 0x3c010001, 0xac223e34, +0xafa00010, 0xc0029d3, 0xafa00014, 0x32c20020, +0x10400021, 0x27a70030, 0x3c040001, 0x24842e70, +0x3c050001, 0x24a5a9c0, 0x3c060001, 0x24c6ab2c, +0xc53023, 0x24022000, 0xaf42001c, 0x27a20034, +0xc001750, 0xafa20010, 0x21900, 0x31982, +0x3c040800, 0x641825, 0xae430028, 0x24030010, +0xaf43003c, 0x96e30450, 0xaf430040, 0x8f430040, +0x3c040001, 0x24842e84, 0xafa00014, 0xafa30010, +0x8f47001c, 0x24051660, 0x3c010001, 0xac223e2c, +0x10000025, 0x32c60020, 0x8ee20448, 0x8ee3044c, +0xaf43001c, 0x8f42001c, 0x2442e000, 0x2c422001, +0x1440000a, 0x240e0001, 0x3c040001, 0x24842e90, +0xa3ae003f, 0xafa00010, 0xafa00014, 0x8f46001c, +0x24051700, 0xc0029d3, 0x3821, 0x3c020000, +0x24425b78, 0x21100, 0x21182, 0x3c030800, +0x431025, 0xae420028, 0x24020008, 0xaf42003c, +0x96e20450, 0xaf420040, 0x8f420040, 0x3c040001, +0x24842e9c, 0xafa00014, 0xafa20010, 0x8f47001c, +0x24051800, 0x32c60020, 0xc0029d3, 0x0, +0x3c030001, 0x8c633e30, 0x3c050fff, 0x34a5ffff, +0x3c020001, 0x8c423e34, 0x3c040800, 0x651824, +0x31882, 0x641825, 0x451024, 0x21082, +0x441025, 0xae420080, 0x32c20180, 0x10400056, +0xae430020, 0x8f82005c, 0x3c030080, 0x431024, +0x1040000d, 0x0, 0x8f820050, 0xafa20010, +0x8f82005c, 0x240e0001, 0x3c040001, 0x24842ea8, +0xa3ae003f, 0xafa20014, 0x8f870040, 0x24051900, +0xc0029d3, 0x2c03021, 0x8f820050, 0x3c030010, +0x431024, 0x10400016, 0x0, 0x8c020218, +0x30420040, 0x1040000f, 0x24020001, 0x8f820050, +0x8c030218, 0x240e0001, 0x3c040001, 0x24842dd0, +0xa3ae003f, 0xafa20010, 0xafa30014, 0x8f870040, +0x24052000, 0xc0029d3, 0x2c03021, 0x10000004, +0x0, 0x3c010001, 0x370821, 0xa02240f4, +0x3c040001, 0x24842eb4, 0x3c050001, 0x24a59b2c, +0x3c060001, 0x24c69bac, 0xc53023, 0x8f420008, +0x27b30030, 0x2603821, 0x27b10034, 0x34420e00, +0xaf420008, 0xc001750, 0xafb10010, 0x3c040001, +0x24842ecc, 0x3c050001, 0x24a5d090, 0x3c060001, +0x24c6db90, 0xc53023, 0x2603821, 0xaf42010c, +0xc001750, 0xafb10010, 0x3c040001, 0x24842ee4, +0x3c050001, 0x24a5e174, 0x3c060001, 0x24c6e860, +0xc53023, 0x2603821, 0x3c010001, 0xac223e40, +0xc001750, 0xafb10010, 0x3c040001, 0x24842efc, +0x10000027, 0x24052100, 0x3c040001, 0x24842f04, +0x3c050001, 0x24a599e8, 0x3c060001, 0x24c69b24, +0xc53023, 0x27b10030, 0x2203821, 0x27b30034, +0xc001750, 0xafb30010, 0x3c040001, 0x24842f14, +0x3c050001, 0x24a5c300, 0x3c060001, 0x24c6d088, +0xc53023, 0x2203821, 0xaf42010c, 0xc001750, +0xafb30010, 0x3c040001, 0x24842f24, 0x3c050001, +0x24a5e014, 0x3c060001, 0x24c6e16c, 0xc53023, +0x2203821, 0x3c010001, 0xac223e40, 0xc001750, +0xafb30010, 0x3c040001, 0x24842f38, 0x24052150, +0x2c03021, 0x3821, 0x3c010001, 0xac223e4c, +0xafa00010, 0xc0029d3, 0xafa00014, 0x3c030001, +0x8c633e40, 0x3c110fff, 0x3631ffff, 0x3c020001, +0x8c423e4c, 0x3c1e0800, 0x711824, 0x31882, +0x7e1825, 0x511024, 0x21082, 0x5e1025, +0xae430038, 0xae420078, 0x8c020218, 0x30420040, +0x14400004, 0x24020001, 0x3c010001, 0x370821, +0xa02240f4, 0x3c040001, 0x24842f44, 0x3c050001, +0x24a5db98, 0x3c060001, 0x24c6dcf4, 0xc53023, +0x27b50030, 0x2a03821, 0x27b30034, 0xc001750, +0xafb30010, 0x3c010001, 0xac223e38, 0x511024, +0x21082, 0x5e1025, 0xae420050, 0x32c22000, +0x10400005, 0x2a03821, 0x3c020000, 0x24425b78, +0x1000000d, 0x511024, 0x3c040001, 0x24842f58, +0x3c050001, 0x24a5dcfc, 0x3c060001, 0x24c6deac, +0xc53023, 0xc001750, 0xafb30010, 0x3c010001, +0xac223e50, 0x511024, 0x21082, 0x5e1025, +0xae420048, 0x32c24000, 0x10400005, 0x27a70030, +0x3c020000, 0x24425b78, 0x1000000e, 0x21100, +0x3c040001, 0x24842f70, 0x3c050001, 0x24a5deb4, +0x3c060001, 0x24c6e00c, 0xc53023, 0x27a20034, +0xc001750, 0xafa20010, 0x3c010001, 0xac223e44, +0x21100, 0x21182, 0x3c030800, 0x431025, +0xae420060, 0x3c040001, 0x24842f88, 0x3c050000, +0x24a57ca0, 0x3c060001, 0x24c680c4, 0xc53023, +0x27b10030, 0x2203821, 0x27b30034, 0xc001750, +0xafb30010, 0x3c1e0fff, 0x37deffff, 0x3c040001, +0x24842f94, 0x3c050000, 0x24a56318, 0x3c060000, +0x24c66478, 0xc53023, 0x2203821, 0x3c010001, +0xac223e18, 0x5e1024, 0x21082, 0x3c150800, +0x551025, 0xae4200b8, 0xc001750, 0xafb30010, +0x3c040001, 0x24842fa0, 0x3c050000, 0x24a56480, +0x3c060000, 0x24c666f8, 0xc53023, 0x2203821, +0x3c010001, 0xac223e0c, 0x5e1024, 0x21082, +0x551025, 0xae4200e8, 0xc001750, 0xafb30010, +0x3c040001, 0x24842fb8, 0x3c050000, 0x24a56700, +0x3c060000, 0x24c66830, 0xc53023, 0x2203821, +0x3c010001, 0xac223e04, 0x5e1024, 0x21082, +0x551025, 0xae4200c0, 0xc001750, 0xafb30010, +0x3c040001, 0x24842fd0, 0x3c050001, 0x24a5f240, +0x3c060001, 0x24c6f318, 0xc53023, 0x2203821, +0x3c010001, 0xac223e10, 0x5e1024, 0x21082, +0x551025, 0xae4200c8, 0xc001750, 0xafb30010, +0x3c040001, 0x24842fdc, 0x3c050001, 0x24a5c1e0, +0x3c060001, 0x24c6c21c, 0xc53023, 0x2203821, +0xaf420110, 0xc001750, 0xafb30010, 0x3c040001, +0x24842fec, 0x3c050001, 0x24a5c224, 0x3c060001, +0x24c6c24c, 0xc53023, 0x2203821, 0xaf420114, +0xc001750, 0xafb30010, 0x3c040001, 0x24842ff8, +0x3c050001, 0x24a5e9c0, 0x3c060001, 0x24c6eeac, +0xc53023, 0x2203821, 0xaf420118, 0xc001750, +0xafb30010, 0x3c010001, 0xac223e54, 0x5e1024, +0x21082, 0x551025, 0xc003d9f, 0xae4200d0, +0xc003a1c, 0x0, 0xc002630, 0x0, +0xac000228, 0xac00022c, 0x96e20450, 0x2442ffff, +0xaf420038, 0x96e20460, 0xaf420080, 0x32c24000, +0x14400003, 0x0, 0x96e20480, 0xaf420084, +0x96e70490, 0x50e00001, 0x24070800, 0x24e2ffff, +0xaf420088, 0xaf42007c, 0x24020800, 0x10e2000f, +0x32c24000, 0x10400003, 0x24020400, 0x10e2000b, +0x0, 0x240e0001, 0x3c040001, 0x24843008, +0xa3ae003f, 0x96e60490, 0x24052170, 0x2c03821, +0xafa00010, 0xc0029d3, 0xafa00014, 0x8f43012c, +0x8f44012c, 0x24020001, 0xa34205b3, 0xaf430094, +0xaf440098, 0xafa00010, 0xafa00014, 0x8f460080, +0x8f470084, 0x3c040001, 0x24843014, 0xc0029d3, +0x24052200, 0xc00232c, 0x3c110800, 0x3c1433d8, +0x3694cb58, 0x3c020800, 0x34420080, 0x3c040001, +0x24843020, 0x3c050000, 0x24a55bbc, 0x3c060000, +0x24c65bd8, 0xc53023, 0x27a70030, 0xaf820060, +0x2402ffff, 0xaf820064, 0x27a20034, 0xc001750, +0xafa20010, 0x3c010001, 0xac223df4, 0x21100, +0x21182, 0x511025, 0xc0018a8, 0xae420000, +0x8f820240, 0x3c030001, 0x431025, 0xaf820240, +0x3c020000, 0x24424034, 0xaf820244, 0xaf800240, +0x8f820060, 0x511024, 0x14400005, 0x3c030800, +0x8f820060, 0x431024, 0x1040fffd, 0x0, +0xc003a29, 0x8821, 0x3c020100, 0xafa20020, +0x8f530018, 0x240200ff, 0x56620001, 0x26710001, +0x8c020228, 0x1622000e, 0x1330c0, 0x8f42032c, +0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, +0x3c040001, 0x24842ce4, 0x3c050009, 0xafa00014, +0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100, +0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, +0xac4404c4, 0xc01821, 0x8f440168, 0x8f45016c, +0x1021, 0x24070004, 0xafa70010, 0xafb10014, +0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, +0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, +0x822021, 0x100f809, 0x892021, 0x1440000b, +0x24070008, 0x8f820120, 0xafa20010, 0x8f820124, +0x3c040001, 0x24842cec, 0x3c050009, 0xafa20014, +0x8fa60020, 0x1000001c, 0x34a50200, 0x8f440150, +0x8f450154, 0x8f43000c, 0xaf510018, 0x8f860120, +0x24020010, 0xafa20010, 0xafb10014, 0xafa30018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010, +0x0, 0x8f420330, 0x24420001, 0xaf420330, +0x8f420330, 0x8f820120, 0xafa20010, 0x8f820124, +0x3c040001, 0x24842cf4, 0x3c050009, 0xafa20014, +0x8fa60020, 0x34a50300, 0xc0029d3, 0x2603821, +0x8f4202d4, 0x24420001, 0xaf4202d4, 0x8f4202d4, +0x93a2003f, 0x10400069, 0x3c020700, 0x34423000, +0xafa20028, 0x8f530018, 0x240200ff, 0x12620002, +0x8821, 0x26710001, 0x8c020228, 0x1622000e, +0x1330c0, 0x8f42032c, 0x24420001, 0xaf42032c, +0x8f42032c, 0x8c020228, 0x3c040001, 0x24842ce4, +0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60028, +0x1000003f, 0x34a50100, 0xd71021, 0x8fa30028, +0x8fa4002c, 0xac4304c0, 0xac4404c4, 0xc01821, +0x8f440168, 0x8f45016c, 0x1021, 0x24070004, +0xafa70010, 0xafb10014, 0x8f48000c, 0x24c604c0, +0x2e63021, 0xafa80018, 0x8f48010c, 0x24070008, +0xa32821, 0xa3482b, 0x822021, 0x100f809, +0x892021, 0x1440000b, 0x24070008, 0x8f820120, +0xafa20010, 0x8f820124, 0x3c040001, 0x24842cec, +0x3c050009, 0xafa20014, 0x8fa60028, 0x1000001c, +0x34a50200, 0x8f440150, 0x8f450154, 0x8f43000c, +0xaf510018, 0x8f860120, 0x24020010, 0xafa20010, +0xafb10014, 0xafa30018, 0x8f42010c, 0x40f809, +0x24c6001c, 0x14400010, 0x0, 0x8f420330, +0x24420001, 0xaf420330, 0x8f420330, 0x8f820120, +0xafa20010, 0x8f820124, 0x3c040001, 0x24842cf4, +0x3c050009, 0xafa20014, 0x8fa60028, 0x34a50300, +0xc0029d3, 0x2603821, 0x8f4202e0, 0x24420001, +0xaf4202e0, 0x8f4202e0, 0x3c040001, 0x24843030, +0xafa00010, 0xafa00014, 0x8fa60028, 0x24052300, +0xc0029d3, 0x3821, 0x10000004, 0x0, +0x8c020264, 0x10400005, 0x0, 0x8f8200a0, +0x30420004, 0x1440fffa, 0x0, 0x8f820044, +0x34420004, 0xaf820044, 0x8f4202f8, 0x24420001, +0xaf4202f8, 0x8f4202f8, 0x8f8200d8, 0x8f8300d4, +0x431023, 0x2442ff80, 0xaf420090, 0x8f420090, +0x2842ff81, 0x10400006, 0x24020001, 0x8f420090, +0x8f430138, 0x431021, 0xaf420090, 0x24020001, +0xaf42008c, 0x32c20008, 0x10400006, 0x0, +0x8f820214, 0x3c038100, 0x3042ffff, 0x431025, +0xaf820214, 0x3c020001, 0x8c423d14, 0x30420001, +0x10400009, 0x0, 0x3c040001, 0x2484303c, +0x3c050000, 0x24a56c40, 0x3c060000, 0x24c670e8, +0x10000008, 0xc53023, 0x3c040001, 0x2484304c, +0x3c050000, 0x24a56838, 0x3c060000, 0x24c66c38, +0xc53023, 0x27a70030, 0x27a20034, 0xc001750, +0xafa20010, 0x3c010001, 0xac223e08, 0x3c020001, +0x8c423e08, 0x3c030800, 0x21100, 0x21182, +0x431025, 0xae420040, 0x8f8200a0, 0xafa20010, +0x8f8200b0, 0xafa20014, 0x8f86005c, 0x8f87011c, +0x3c040001, 0x2484305c, 0x3c010001, 0xac363de0, +0x3c010001, 0xac203dd0, 0x3c010001, 0xac3c3dc8, +0x3c010001, 0xac3b3df8, 0x3c010001, 0xac373dfc, +0x3c010001, 0xac3a3ddc, 0xc0029d3, 0x24052400, +0x8f820200, 0xafa20010, 0x8f820220, 0xafa20014, +0x8f860044, 0x8f870050, 0x3c040001, 0x24843068, +0xc0029d3, 0x24052500, 0x8f830060, 0x74100b, +0x242000a, 0x200f821, 0x0, 0xd, +0x8fbf0058, 0x8fbe0054, 0x8fb50050, 0x8fb3004c, +0x8fb20048, 0x8fb10044, 0x8fb00040, 0x3e00008, +0x27bd0060, 0x27bdffe0, 0x3c040001, 0x24843074, +0x24052600, 0x3021, 0x3821, 0xafbf0018, +0xafa00010, 0xc0029d3, 0xafa00014, 0x8fbf0018, +0x3e00008, 0x27bd0020, 0x3e00008, 0x0, +0x3e00008, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x3e00008, +0x0, 0x3e00008, 0x0, 0x27bdfde0, +0x27a50018, 0x3c04dead, 0x3484beef, 0xafbf0218, +0x8f820150, 0x3c03001f, 0x3463ffff, 0xafa40018, +0xa22823, 0xa32824, 0x8ca20000, 0x1044000a, +0x0, 0xafa50010, 0x8ca20000, 0xafa20014, +0x8f860150, 0x8f870250, 0x3c040001, 0x2484307c, +0xc0029d3, 0x24052700, 0x8fbf0218, 0x3e00008, +0x27bd0220, 0x27bdffe0, 0x3c06abba, 0x34c6babe, +0xafb00018, 0x3c100004, 0x3c07007f, 0x34e7ffff, +0xafbf001c, 0x102840, 0x8e040000, 0x8ca30000, +0xaca00000, 0xae060000, 0x8ca20000, 0xaca30000, +0x10460005, 0xae040000, 0xa08021, 0xf0102b, +0x1040fff5, 0x102840, 0x3c040001, 0x24843088, +0x24052800, 0x2003021, 0x3821, 0xafa00010, +0xc0029d3, 0xafa00014, 0x2001021, 0x8fbf001c, +0x8fb00018, 0x3e00008, 0x27bd0020, 0x8c020224, +0x3047003f, 0x10e00010, 0x803021, 0x2821, +0x24030020, 0xe31024, 0x10400002, 0x63042, +0xa62821, 0x31842, 0x1460fffb, 0xe31024, +0x2402f000, 0xa22824, 0x3403ffff, 0x65102b, +0x14400003, 0x851023, 0x10000006, 0x3c020001, +0x62102b, 0x14400003, 0xa01021, 0x3c02ffff, +0x821021, 0x3e00008, 0x0, 0x27bdffd0, +0xafb50028, 0x8fb50040, 0xafb20020, 0xa09021, +0xafb1001c, 0x24c60003, 0xafbf002c, 0xafb30024, +0xafb00018, 0x8ea20000, 0x2403fffc, 0xc38024, +0x50102b, 0x1440001b, 0xe08821, 0x8e330000, +0xafb00010, 0x8ea20000, 0xafa20014, 0x8e270000, +0x24053000, 0xc0029d3, 0x2403021, 0x8e230000, +0x702021, 0x64102b, 0x10400007, 0x2402821, +0x8ca20000, 0xac620000, 0x24630004, 0x64102b, +0x1440fffb, 0x24a50004, 0x8ea20000, 0x501023, +0xaea20000, 0x8e220000, 0x501021, 0x1000000b, +0xae220000, 0x2402002d, 0xa0820000, 0xafb00010, +0x8ea20000, 0x2409821, 0xafa20014, 0x8e270000, +0x24053100, 0xc0029d3, 0x2603021, 0x2601021, +0x8fbf002c, 0x8fb50028, 0x8fb30024, 0x8fb20020, +0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0030, +0x27bdffe8, 0x3c1cc000, 0x3c05fffe, 0x3c030001, +0x8c633dc0, 0x3c040001, 0x8c843dcc, 0x34a5bf08, +0x24021ffc, 0x3c010001, 0xac223c60, 0x3c0200c0, +0x3c010001, 0xac223c64, 0x3c020020, 0xafbf0010, +0x3c0100c0, 0xac201ffc, 0x431023, 0x441023, +0x245bb000, 0x365b821, 0x3c1d0001, 0x8fbd3c5c, +0x3a0f021, 0x3c0400c0, 0x34840200, 0x3c1a00c0, +0x3c0300c0, 0x346307b8, 0x24021dfc, 0x3c010001, +0xac223c60, 0x24021844, 0x3c010001, 0xac243c64, +0x3c010001, 0xac223c60, 0x3c010001, 0xac233c64, +0xc0017ba, 0x375a0200, 0x8fbf0010, 0x3e00008, +0x27bd0018, 0x27bdffc8, 0x3c040001, 0x24843094, +0x24053200, 0x3c020001, 0x8c423c60, 0x3c030001, +0x8c633c64, 0x3021, 0x3603821, 0xafbf0030, +0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, +0xafa2001c, 0xafa30018, 0xafb70010, 0xc0029d3, +0xafba0014, 0xc0018c2, 0x0, 0x8f820240, +0x34420004, 0xaf820240, 0x24020001, 0xaf420000, +0x3c020001, 0x571021, 0x904240f4, 0x10400092, +0x2403fffc, 0x3c100001, 0x2610a6d3, 0x3c120001, +0x2652a2ac, 0x2121023, 0x438024, 0x8fa3001c, +0x3c040001, 0x248430a0, 0x70102b, 0x1440001a, +0x27b30018, 0x8fb10018, 0x24053000, 0x2403021, +0xafb00010, 0xafa30014, 0xc0029d3, 0x2203821, +0x8fa30018, 0x702021, 0x64102b, 0x10400007, +0x2403021, 0x8cc20000, 0xac620000, 0x24630004, +0x64102b, 0x1440fffb, 0x24c60004, 0x8fa2001c, +0x501023, 0xafa2001c, 0x8e620000, 0x501021, +0x1000000a, 0xae620000, 0x2408821, 0x24053100, +0xafb00010, 0xafa30014, 0x8fa70018, 0x2203021, +0x2402002d, 0xc0029d3, 0xa0820000, 0x24070020, +0x8fa3001c, 0x3c040001, 0x248430bc, 0x24120020, +0x3c010001, 0xac313dec, 0x2c620020, 0x1440001d, +0x27b10018, 0x8fb00018, 0x24053000, 0x3c060001, +0x24c63e80, 0xafa70010, 0xafa30014, 0xc0029d3, +0x2003821, 0x8fa30018, 0x3c040001, 0x24843e80, +0x24650020, 0x65102b, 0x10400007, 0x0, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8fa2001c, 0x521023, +0xafa2001c, 0x8e220000, 0x521021, 0x1000000b, +0xae220000, 0x3c100001, 0x26103e80, 0x24053100, +0xafa70010, 0xafa30014, 0x8fa70018, 0x2003021, +0x2402002d, 0xc0029d3, 0xa0820000, 0x24070020, +0x3c040001, 0x248430d0, 0x8fa3001c, 0x24120020, +0x3c010001, 0xac303e20, 0x2c620020, 0x1440001d, +0x27b10018, 0x8fb00018, 0x24053000, 0x3c060001, +0x24c63ea0, 0xafa70010, 0xafa30014, 0xc0029d3, +0x2003821, 0x8fa30018, 0x3c040001, 0x24843ea0, +0x24650020, 0x65102b, 0x10400007, 0x0, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8fa2001c, 0x521023, +0xafa2001c, 0x8e220000, 0x521021, 0x1000000b, +0xae220000, 0x3c100001, 0x26103ea0, 0x24053100, +0xafa70010, 0xafa30014, 0x8fa70018, 0x2003021, +0x2402002d, 0xc0029d3, 0xa0820000, 0x3c010001, +0x10000031, 0xac303e1c, 0x3c100000, 0x26107c8f, +0x3c120000, 0x26527b0c, 0x2121023, 0x438024, +0x8fa3001c, 0x3c040001, 0x248430e4, 0x70102b, +0x1440001a, 0x27b30018, 0x8fb10018, 0x24053000, +0x2403021, 0xafb00010, 0xafa30014, 0xc0029d3, +0x2203821, 0x8fa30018, 0x702021, 0x64102b, +0x10400007, 0x2403021, 0x8cc20000, 0xac620000, +0x24630004, 0x64102b, 0x1440fffb, 0x24c60004, +0x8fa2001c, 0x501023, 0xafa2001c, 0x8e620000, +0x501021, 0x1000000a, 0xae620000, 0x2408821, +0x24053100, 0xafb00010, 0xafa30014, 0x8fa70018, +0x2203021, 0x2402002d, 0xc0029d3, 0xa0820000, +0x3c010001, 0xac313dec, 0x3c030001, 0x8c633dec, +0x24020400, 0x60f809, 0xaf820070, 0x8fbf0030, +0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020, +0x3e00008, 0x27bd0038, 0x0, 0x8f820040, +0x3c03f000, 0x431024, 0x3c036000, 0x14430006, +0x0, 0x8f820050, 0x2403ff80, 0x431024, +0x34420055, 0xaf820050, 0x8f820054, 0x244203e8, +0xaf820058, 0x240201f4, 0xaf4200e0, 0x24020004, +0xaf4200e8, 0x24020002, 0xaf4001a0, 0xaf4000e4, +0xaf4200dc, 0xaf4000d8, 0xaf4000d4, 0x3e00008, +0xaf4000d0, 0x8f820054, 0x24420005, 0x3e00008, +0xaf820078, 0x27bdffe8, 0xafbf0010, 0x8f820054, +0x244203e8, 0xaf820058, 0x3c020800, 0x2c21024, +0x10400004, 0x3c02f7ff, 0x3442ffff, 0x2c2b024, +0x36940040, 0x3c020001, 0x8c423d28, 0x10400027, +0x0, 0x3c020001, 0x8c423d14, 0x30420001, +0x14400010, 0x0, 0x3c020001, 0x8c423e58, +0x1040000c, 0x0, 0x3c020001, 0x8c423da4, +0x14400008, 0x0, 0x8f830224, 0x3c020001, +0x8c425f1c, 0x10620003, 0x0, 0xc003bad, +0x0, 0x934205b1, 0x10400012, 0x24020001, +0x934305b1, 0x14620004, 0x3c0208ff, 0x24020002, +0x1000000c, 0xa34205b1, 0x3442fffb, 0xa34005b1, +0x8f830220, 0x3c040200, 0x284a025, 0x621824, +0xaf830220, 0x10000004, 0x3c020200, 0xc003f27, +0x0, 0x3c020200, 0x2c21024, 0x10400003, +0x0, 0xc001de7, 0x0, 0x8f4200d8, +0x8f4300dc, 0x24420001, 0xaf4200d8, 0x43102b, +0x14400003, 0x0, 0xaf4000d8, 0x36940080, +0x8c030238, 0x1060000c, 0x0, 0x8f4201a0, +0x244203e8, 0xaf4201a0, 0x43102b, 0x14400006, +0x0, 0x934205b6, 0x14400003, 0x0, +0xc001c3c, 0x0, 0x8fbf0010, 0x3e00008, +0x27bd0018, 0x3e00008, 0x0, 0x27bdffd8, +0xafbf0020, 0x8f43002c, 0x8f420038, 0x10620059, +0x0, 0x3c020001, 0x571021, 0x904240f0, +0x10400026, 0x24070008, 0x8f440160, 0x8f450164, +0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010, +0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, +0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, +0x370821, 0xa02240f0, 0x8f820124, 0xafa20010, +0x8f820128, 0x3c040001, 0x24843184, 0xafa20014, +0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3, +0x34a50900, 0x1000005c, 0x0, 0x8f4202f0, +0x24420001, 0xaf4202f0, 0x8f4202f0, 0x8f42002c, +0xa34005b2, 0x10000027, 0xaf420038, 0x8f440160, +0x8f450164, 0x8f43002c, 0x8f48000c, 0x8f860120, +0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, +0x24020001, 0x3c010001, 0x370821, 0xa02240f1, +0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001, +0x24843190, 0xafa20014, 0x8f46002c, 0x8f870120, +0x3c050009, 0xc0029d3, 0x34a51100, 0x10000036, +0x0, 0x8f4202f0, 0x8f43002c, 0x24420001, +0xaf4202f0, 0x8f4202f0, 0x24020001, 0xa34205b2, +0xaf430038, 0x3c010001, 0x370821, 0xa02040f1, +0x3c010001, 0x370821, 0xa02040f0, 0x10000026, +0xaf400034, 0x934205b2, 0x1040001d, 0x0, +0xa34005b2, 0x8f820040, 0x30420001, 0x14400008, +0x2021, 0x8c030104, 0x24020001, 0x50620005, +0x24040001, 0x8c020264, 0x10400003, 0x801021, +0x24040001, 0x801021, 0x10400006, 0x0, +0x8f4202fc, 0x24420001, 0xaf4202fc, 0x10000008, +0x8f4202fc, 0x8f820044, 0x34420004, 0xaf820044, +0x8f4202f8, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x3c010001, 0x370821, 0xa02040f0, 0x3c010001, +0x370821, 0xa02040f1, 0x8f420000, 0x10400007, +0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, +0x0, 0x10000005, 0x0, 0xaf800048, +0x8f820048, 0x1040fffd, 0x0, 0x8f820060, +0x3c03ff7f, 0x3463ffff, 0x431024, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000002, +0xaf80004c, 0xaf800048, 0x8fbf0020, 0x3e00008, +0x27bd0028, 0x3e00008, 0x0, 0x27bdffd8, +0xafbf0020, 0x8f430044, 0x8f42007c, 0x10620029, +0x24070008, 0x8f440158, 0x8f45015c, 0x8f48000c, +0x8f860120, 0x24020040, 0xafa20010, 0xafa30014, +0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x14400011, 0x24020001, 0x3c010001, 0x370821, +0xa02240f2, 0x8f820124, 0xafa20010, 0x8f820128, +0x3c040001, 0x24843198, 0xafa20014, 0x8f460044, +0x8f870120, 0x3c050009, 0xc0029d3, 0x34a51300, +0x1000000f, 0x0, 0x8f4202f4, 0x24420001, +0xaf4202f4, 0x8f4202f4, 0x8f420044, 0xaf42007c, +0x3c010001, 0x370821, 0xa02040f2, 0x10000004, +0xaf400078, 0x3c010001, 0x370821, 0xa02040f2, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x3c03feff, 0x3463ffff, +0x431024, 0xaf820060, 0x8f420000, 0x10400003, +0x0, 0x10000002, 0xaf80004c, 0xaf800048, +0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3e00008, +0x0, 0x3c020001, 0x8c423d28, 0x27bdffa8, +0xafbf0050, 0xafbe004c, 0xafb50048, 0xafb30044, +0xafb20040, 0xafb1003c, 0xafb00038, 0x104000d5, +0x8f900044, 0x8f4200d0, 0x24430001, 0x2842000b, +0x144000e4, 0xaf4300d0, 0x8f420004, 0x30420002, +0x1440009c, 0xaf4000d0, 0x8f420004, 0x3c030001, +0x8c633d18, 0x34420002, 0xaf420004, 0x24020001, +0x14620003, 0x3c020600, 0x10000002, 0x34423000, +0x34421000, 0xafa20020, 0x8f4a0018, 0xafaa0034, +0x27aa0020, 0xafaa002c, 0x8faa0034, 0x240200ff, +0x11420002, 0x1821, 0x25430001, 0x8c020228, +0x609821, 0x1662000e, 0x3c050009, 0x8f42032c, +0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, +0x8fa70034, 0x3c040001, 0x24843168, 0xafa00014, +0xafa20010, 0x8fa60020, 0x10000070, 0x34a50500, +0x8faa0034, 0xa38c0, 0xf71021, 0x8fa30020, +0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, +0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, +0x1040001b, 0xa821, 0xe09021, 0x265e04c0, +0x8f440168, 0x8f45016c, 0x2401821, 0x240a0004, +0xafaa0010, 0xafb30014, 0x8f48000c, 0x1021, +0x2fe3021, 0xafa80018, 0x8f48010c, 0x24070008, +0xa32821, 0xa3482b, 0x822021, 0x100f809, +0x892021, 0x54400006, 0x24150001, 0x8f820054, +0x2221023, 0x2c4203e9, 0x1440ffe9, 0x0, +0x32a200ff, 0x54400018, 0xaf530018, 0x8f420368, +0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x8faa002c, 0x8fa70034, 0xafa20010, 0x8f820124, +0x3c040001, 0x24843174, 0xafa20014, 0x8d460000, +0x3c050009, 0x10000035, 0x34a50600, 0x8f4202f8, +0x24150001, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x1000001e, 0x32a200ff, 0x8f830054, 0x8f820054, +0x247103e8, 0x2221023, 0x2c4203e9, 0x10400016, +0xa821, 0x3c1e0020, 0x24120010, 0x8f42000c, +0x8f440150, 0x8f450154, 0x8f860120, 0xafb20010, +0xafb30014, 0x5e1025, 0xafa20018, 0x8f42010c, +0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3, +0x0, 0x8f820054, 0x2221023, 0x2c4203e9, +0x1440ffee, 0x0, 0x32a200ff, 0x14400011, +0x3c050009, 0x8f420368, 0x24420001, 0xaf420368, +0x8f420368, 0x8f820120, 0x8faa002c, 0x8fa70034, +0xafa20010, 0x8f820124, 0x3c040001, 0x2484317c, +0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3, +0x0, 0x8f4202dc, 0x24420001, 0xaf4202dc, +0x8f4202dc, 0x8f420004, 0x30420001, 0x50400029, +0x36100040, 0x3c020400, 0x2c21024, 0x10400013, +0x2404ffdf, 0x8f420240, 0x8f430244, 0x8f4401a4, +0x14640006, 0x36100040, 0x8f420260, 0x8f430264, +0x8f4401a8, 0x10640007, 0x2402ffdf, 0x8f420240, +0x8f430244, 0x8f440260, 0x8f450264, 0x10000012, +0x3a100020, 0x1000002b, 0x2028024, 0x8f420240, +0x8f430244, 0x8f4501a4, 0x14650006, 0x2048024, +0x8f420260, 0x8f430264, 0x8f4401a8, 0x50640021, +0x36100040, 0x8f420240, 0x8f430244, 0x8f440260, +0x8f450264, 0x3a100040, 0xaf4301a4, 0x10000019, +0xaf4501a8, 0x8f4200d4, 0x24430001, 0x10000011, +0x28420033, 0x8f420004, 0x30420001, 0x10400009, +0x3c020400, 0x2c21024, 0x10400004, 0x2402ffdf, +0x2028024, 0x1000000b, 0x36100040, 0x10000009, +0x36100060, 0x8f4200d4, 0x36100040, 0x24430001, +0x284201f5, 0x14400003, 0xaf4300d4, 0xaf4000d4, +0x3a100020, 0xaf900044, 0x2402ff7f, 0x282a024, +0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, +0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008, +0x27bd0058, 0x3e00008, 0x0, 0x3c020001, +0x8c423d28, 0x27bdffb0, 0xafbf0048, 0xafbe0044, +0xafb50040, 0xafb3003c, 0xafb20038, 0xafb10034, +0x104000de, 0xafb00030, 0x8f4200d0, 0x3c040001, +0x8c843d18, 0x24430001, 0x2842000b, 0xaf4400e8, +0x144000fe, 0xaf4300d0, 0x8f420004, 0x30420002, +0x14400095, 0xaf4000d0, 0x8f420004, 0x34420002, +0xaf420004, 0x24020001, 0x14820003, 0x3c020600, +0x10000002, 0x34423000, 0x34421000, 0xafa20020, +0x1821, 0x8f5e0018, 0x27aa0020, 0x240200ff, +0x13c20002, 0xafaa002c, 0x27c30001, 0x8c020228, +0x609021, 0x1642000e, 0x1e38c0, 0x8f42032c, +0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, +0x3c040001, 0x24843168, 0x3c050009, 0xafa00014, +0xafa20010, 0x8fa60020, 0x1000006d, 0x34a50500, +0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, +0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, +0x2021023, 0x2c4203e9, 0x1040001b, 0x9821, +0xe08821, 0x263504c0, 0x8f440168, 0x8f45016c, +0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014, +0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, +0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, +0x822021, 0x100f809, 0x892021, 0x54400006, +0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, +0x1440ffe9, 0x0, 0x326200ff, 0x54400017, +0xaf520018, 0x8f420368, 0x24420001, 0xaf420368, +0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x24843174, 0x3c050009, +0xafa20014, 0x8d460000, 0x10000035, 0x34a50600, +0x8f4202f8, 0x24130001, 0x24420001, 0xaf4202f8, +0x8f4202f8, 0x1000001e, 0x326200ff, 0x8f830054, +0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, +0x10400016, 0x9821, 0x3c150020, 0x24110010, +0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120, +0xafb10010, 0xafb20014, 0x551025, 0xafa20018, +0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, +0x1440ffe3, 0x0, 0x8f820054, 0x2021023, +0x2c4203e9, 0x1440ffee, 0x0, 0x326200ff, +0x14400011, 0x0, 0x8f420368, 0x24420001, +0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, +0xafa20010, 0x8f820124, 0x3c040001, 0x2484317c, +0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700, +0xc0029d3, 0x3c03821, 0x8f4202dc, 0x24420001, +0xaf4202dc, 0x8f4202dc, 0x8f420004, 0x30420001, +0x10400033, 0x3c020400, 0x2c21024, 0x10400017, +0x0, 0x934205b0, 0x8f440240, 0x8f450244, +0x8f4301a4, 0x34420020, 0x14a30006, 0xa34205b0, +0x8f420260, 0x8f430264, 0x8f4401a8, 0x10640008, +0x0, 0x8f420240, 0x8f430244, 0x934405b0, +0x8f460260, 0x8f470264, 0x10000016, 0x38840040, +0x934205b0, 0x10000048, 0x304200bf, 0x934205b0, +0x8f440240, 0x8f450244, 0x8f4301a4, 0x304200bf, +0x14a30006, 0xa34205b0, 0x8f420260, 0x8f430264, +0x8f4401a8, 0x1064000b, 0x0, 0x8f420240, +0x8f430244, 0x934405b0, 0x8f460260, 0x8f470264, +0x38840020, 0xaf4301a4, 0xaf4701a8, 0x10000033, +0xa34405b0, 0x934205b0, 0x1000002f, 0x34420020, +0x934205b0, 0x8f4300d4, 0x34420020, 0xa34205b0, +0x24620001, 0x10000023, 0x28630033, 0x8f4200e4, +0x8f4300e0, 0x24420001, 0xaf4200e4, 0x43102a, +0x14400006, 0x24030001, 0x8f4200e8, 0x14430002, +0xaf4000e4, 0x24030004, 0xaf4300e8, 0x8f420004, +0x30420001, 0x1040000d, 0x3c020400, 0x2c21024, +0x10400007, 0x0, 0x934205b0, 0x34420040, +0xa34205b0, 0x934205b0, 0x1000000f, 0x304200df, +0x934205b0, 0x1000000c, 0x34420060, 0x934205b0, +0x8f4300d4, 0x34420020, 0xa34205b0, 0x24620001, +0x286300fb, 0x14600005, 0xaf4200d4, 0x934205b0, +0xaf4000d4, 0x38420040, 0xa34205b0, 0x934205b0, +0x8f4300e8, 0x3042007f, 0xa34205b0, 0x24020001, +0x14620005, 0x0, 0x934405b0, 0x42102, +0x10000003, 0x348400f0, 0x934405b0, 0x3484000f, +0xc004b04, 0x0, 0x2402ff7f, 0x282a024, +0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, +0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, +0x27bd0050, 0x3e00008, 0x0, 0x27bdffb0, +0x274401b0, 0x26e30028, 0x24650400, 0x65102b, +0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c, +0xafb20038, 0xafb10034, 0x10400007, 0xafb00030, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8c020080, 0xaee20044, +0x8c0200c0, 0xaee20040, 0x8c020084, 0xaee20030, +0x8c020084, 0xaee2023c, 0x8c020088, 0xaee20240, +0x8c02008c, 0xaee20244, 0x8c020090, 0xaee20248, +0x8c020094, 0xaee2024c, 0x8c020098, 0xaee20250, +0x8c02009c, 0xaee20254, 0x8c0200a0, 0xaee20258, +0x8c0200a4, 0xaee2025c, 0x8c0200a8, 0xaee20260, +0x8c0200ac, 0xaee20264, 0x8c0200b0, 0xaee20268, +0x8c0200b4, 0xaee2026c, 0x8c0200b8, 0xaee20270, +0x8c0200bc, 0x24040001, 0xaee20274, 0xaee00034, +0x41080, 0x571021, 0x8ee30034, 0x8c42023c, +0x24840001, 0x621821, 0x2c82000f, 0xaee30034, +0x1440fff8, 0x41080, 0x8c0200cc, 0xaee20048, +0x8c0200d0, 0xaee2004c, 0x8c0200e0, 0xaee201f8, +0x8c0200e4, 0xaee201fc, 0x8c0200e8, 0xaee20200, +0x8c0200ec, 0xaee20204, 0x8c0200f0, 0xaee20208, +0x8ee400c0, 0x8ee500c4, 0x8c0200fc, 0x45102b, +0x1040000b, 0x0, 0x8ee200c0, 0x8ee300c4, +0x24040001, 0x24050000, 0x651821, 0x65302b, +0x441021, 0x461021, 0xaee200c0, 0xaee300c4, +0x8c0200fc, 0x8ee400c0, 0x8ee500c4, 0x2408ffff, +0x24090000, 0x401821, 0x1021, 0x882024, +0xa92824, 0x822025, 0xa32825, 0xaee400c0, +0xaee500c4, 0x8ee400d0, 0x8ee500d4, 0x8c0200f4, +0x45102b, 0x1040000b, 0x0, 0x8ee200d0, +0x8ee300d4, 0x24040001, 0x24050000, 0x651821, +0x65302b, 0x441021, 0x461021, 0xaee200d0, +0xaee300d4, 0x8c0200f4, 0x8ee400d0, 0x8ee500d4, +0x401821, 0x1021, 0x882024, 0xa92824, +0x822025, 0xa32825, 0xaee400d0, 0xaee500d4, +0x8ee400c8, 0x8ee500cc, 0x8c0200f8, 0x45102b, +0x1040000b, 0x0, 0x8ee200c8, 0x8ee300cc, +0x24040001, 0x24050000, 0x651821, 0x65302b, +0x441021, 0x461021, 0xaee200c8, 0xaee300cc, +0x8c0200f8, 0x8ee400c8, 0x8ee500cc, 0x401821, +0x1021, 0x882024, 0xa92824, 0x822025, +0xa32825, 0x24020008, 0xaee400c8, 0xaee500cc, +0xafa20010, 0xafa00014, 0x8f42000c, 0x8c040208, +0x8c05020c, 0xafa20018, 0x8f42010c, 0x26e60028, +0x40f809, 0x24070400, 0x104000f0, 0x3c020400, +0xafa20020, 0x934205b7, 0x10400089, 0x1821, +0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, +0xafaa002c, 0x27c30001, 0x8c020228, 0x609021, +0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001, +0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001, +0x24843168, 0x3c050009, 0xafa00014, 0xafa20010, +0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, +0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, +0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, +0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, +0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821, +0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, +0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, +0x24070008, 0xa32821, 0xa3482b, 0x822021, +0x100f809, 0x892021, 0x54400006, 0x24130001, +0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, +0x0, 0x326200ff, 0x54400017, 0xaf520018, +0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, +0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, +0x3c040001, 0x24843174, 0x3c050009, 0xafa20014, +0x8d460000, 0x10000033, 0x34a50600, 0x8f4202f8, +0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, +0x9821, 0x24110010, 0x8f42000c, 0x8f440150, +0x8f450154, 0x8f860120, 0xafb10010, 0xafb20014, +0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, +0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, +0x2021023, 0x2c4203e9, 0x1440ffef, 0x0, +0x326200ff, 0x54400012, 0x24020001, 0x8f420368, +0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x8faa002c, 0xafa20010, 0x8f820124, 0x3c040001, +0x2484317c, 0x3c050009, 0xafa20014, 0x8d460000, +0x34a50700, 0xc0029d3, 0x3c03821, 0x1021, +0x1440005b, 0x24020001, 0x10000065, 0x0, +0x8f510018, 0x240200ff, 0x12220002, 0x8021, +0x26300001, 0x8c020228, 0x1602000e, 0x1130c0, +0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, +0x8c020228, 0x3c040001, 0x24843150, 0x3c050009, +0xafa00014, 0xafa20010, 0x8fa60020, 0x1000003f, +0x34a50100, 0xd71021, 0x8fa30020, 0x8fa40024, +0xac4304c0, 0xac4404c4, 0xc01821, 0x8f440168, +0x8f45016c, 0x1021, 0x24070004, 0xafa70010, +0xafb00014, 0x8f48000c, 0x24c604c0, 0x2e63021, +0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, +0xa3482b, 0x822021, 0x100f809, 0x892021, +0x1440000b, 0x24070008, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c040001, 0x24843158, 0x3c050009, +0xafa20014, 0x8fa60020, 0x1000001c, 0x34a50200, +0x8f440150, 0x8f450154, 0x8f43000c, 0xaf500018, +0x8f860120, 0x24020010, 0xafa20010, 0xafb00014, +0xafa30018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x54400011, 0x24020001, 0x8f420330, 0x24420001, +0xaf420330, 0x8f420330, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c040001, 0x24843160, 0x3c050009, +0xafa20014, 0x8fa60020, 0x34a50300, 0xc0029d3, +0x2203821, 0x1021, 0x1040000d, 0x24020001, +0x8f4202d8, 0xa34005b7, 0xaf4001a0, 0x24420001, +0xaf4202d8, 0x8f4202d8, 0x8ee20150, 0x24420001, +0xaee20150, 0x10000003, 0x8ee20150, 0x24020001, +0xa34205b7, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, +0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, +0x3e00008, 0x27bd0050, 0x27bdffd8, 0xafbf0020, +0x8f8200b0, 0x30420004, 0x10400068, 0x0, +0x8f43011c, 0x8f820104, 0x14620005, 0x0, +0x8f430124, 0x8f8200b4, 0x10620006, 0x0, +0x8f820104, 0xaf42011c, 0x8f8200b4, 0x1000005b, +0xaf420124, 0x8f8200b0, 0x3c030080, 0x431024, +0x1040000d, 0x0, 0x8f82011c, 0x34420002, +0xaf82011c, 0x8f8200b0, 0x2403fffb, 0x431024, +0xaf8200b0, 0x8f82011c, 0x2403fffd, 0x431024, +0x1000004a, 0xaf82011c, 0x8f43011c, 0x8f820104, +0x14620005, 0x0, 0x8f430124, 0x8f8200b4, +0x10620010, 0x0, 0x8f820104, 0xaf42011c, +0x8f8200b4, 0x8f43011c, 0xaf420124, 0xafa30010, +0x8f420124, 0x3c040001, 0x248431a0, 0xafa20014, +0x8f86011c, 0x8f8700b0, 0x3c050005, 0x10000031, +0x34a50900, 0x8f42011c, 0xafa20010, 0x8f420124, +0x3c040001, 0x248431ac, 0xafa20014, 0x8f86011c, +0x8f8700b0, 0x3c050005, 0xc0029d3, 0x34a51000, +0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, +0x8f8200b0, 0x34420001, 0xaf8200b0, 0x24020008, +0xaf830104, 0xafa20010, 0xafa00014, 0x8f42000c, +0x8c040208, 0x8c05020c, 0xafa20018, 0x8f42010c, +0x26e60028, 0x40f809, 0x24070400, 0x8f82011c, +0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc, +0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f42011c, +0xafa20010, 0x8f420124, 0x3c040001, 0x248431b8, +0xafa20014, 0x8f86011c, 0x8f8700b0, 0x3c050005, +0x34a51100, 0xc0029d3, 0x0, 0x8f8200a0, +0x30420004, 0x10400069, 0x0, 0x8f430120, +0x8f820124, 0x14620005, 0x0, 0x8f430128, +0x8f8200a4, 0x10620006, 0x0, 0x8f820124, +0xaf420120, 0x8f8200a4, 0x1000005c, 0xaf420128, +0x8f8200a0, 0x3c030080, 0x431024, 0x1040000d, +0x0, 0x8f82011c, 0x34420002, 0xaf82011c, +0x8f8200a0, 0x2403fffb, 0x431024, 0xaf8200a0, +0x8f82011c, 0x2403fffd, 0x431024, 0x1000004b, +0xaf82011c, 0x8f430120, 0x8f820124, 0x14620005, +0x0, 0x8f430128, 0x8f8200a4, 0x10620010, +0x0, 0x8f820124, 0xaf420120, 0x8f8200a4, +0x8f430120, 0xaf420128, 0xafa30010, 0x8f420128, +0x3c040001, 0x248431c4, 0xafa20014, 0x8f86011c, +0x8f8700a0, 0x3c050005, 0x10000032, 0x34a51200, +0x8f420120, 0xafa20010, 0x8f420128, 0x3c040001, +0x248431d0, 0xafa20014, 0x8f86011c, 0x8f8700a0, +0x3c050005, 0xc0029d3, 0x34a51300, 0x8f82011c, +0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, +0x34420001, 0xaf8200a0, 0x24020080, 0xaf830124, +0xafa20010, 0xafa00014, 0x8f420014, 0x8c040208, +0x8c05020c, 0xafa20018, 0x8f420108, 0x3c060001, +0x24c63e14, 0x40f809, 0x24070004, 0x8f82011c, +0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc, +0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f420120, +0xafa20010, 0x8f420128, 0x3c040001, 0x248431dc, +0xafa20014, 0x8f86011c, 0x8f8700a0, 0x3c050005, +0x34a51400, 0xc0029d3, 0x0, 0x8fbf0020, +0x3e00008, 0x27bd0028, 0x3c081000, 0x24070001, +0x3c060080, 0x3c050100, 0x8f820070, 0x481024, +0x1040fffd, 0x0, 0x8f820054, 0x24420005, +0xaf820078, 0x8c040234, 0x10800016, 0x1821, +0x3c020001, 0x571021, 0x8c4240e8, 0x24420005, +0x3c010001, 0x370821, 0xac2240e8, 0x3c020001, +0x571021, 0x8c4240e8, 0x44102b, 0x14400009, +0x0, 0x3c030080, 0x3c010001, 0x370821, +0xac2040e8, 0x3c010001, 0x370821, 0x1000000b, +0xa02740f0, 0x3c020001, 0x571021, 0x904240f0, +0x54400006, 0x661825, 0x3c020001, 0x571021, +0x904240f1, 0x54400001, 0x661825, 0x8c040230, +0x10800013, 0x0, 0x3c020001, 0x571021, +0x8c4240ec, 0x24420005, 0x3c010001, 0x370821, +0xac2240ec, 0x3c020001, 0x571021, 0x8c4240ec, +0x44102b, 0x14400006, 0x0, 0x3c010001, +0x370821, 0xac2040ec, 0x10000006, 0x651825, +0x3c020001, 0x571021, 0x904240f2, 0x54400001, +0x651825, 0x1060ffbc, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x431025, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x1000ffa7, 0xaf80004c, +0x1000ffa5, 0xaf800048, 0x3e00008, 0x0, +0x0, 0x0, 0x0, 0x27bdffe0, +0xafbf001c, 0xafb00018, 0x8f860064, 0x30c20004, +0x10400025, 0x24040004, 0x8c020114, 0xaf420020, +0xaf840064, 0x8f4202ec, 0x24420001, 0xaf4202ec, +0x8f4202ec, 0x8f820064, 0x30420004, 0x14400005, +0x0, 0x8c030114, 0x8f420020, 0x1462fff2, +0x0, 0x8f420000, 0x10400007, 0x8f43003c, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x431025, +0xaf820060, 0x8f420000, 0x10400073, 0x0, +0x1000006f, 0x0, 0x30c20008, 0x10400020, +0x24040008, 0x8c02011c, 0xaf420048, 0xaf840064, +0x8f420298, 0x24420001, 0xaf420298, 0x8f420298, +0x8f820064, 0x30420008, 0x14400005, 0x0, +0x8c03011c, 0x8f420048, 0x1462fff2, 0x0, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x1000ffd9, 0x34420200, +0x30c20020, 0x10400023, 0x24040020, 0x8c02012c, +0xaf420068, 0xaf840064, 0x8f4202c8, 0x24420001, +0xaf4202c8, 0x8f4202c8, 0x8f820064, 0x30420020, +0x14400005, 0x32c24000, 0x8c03012c, 0x8f420068, +0x1462fff2, 0x32c24000, 0x14400002, 0x3c020001, +0x2c2b025, 0x8f420000, 0x10400007, 0x0, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x1000ffb4, +0x34420800, 0x30c20010, 0x10400029, 0x24040010, +0x8c020124, 0xaf420058, 0xaf840064, 0x8f4202c4, +0x24420001, 0xaf4202c4, 0x8f4202c4, 0x8f820064, +0x30420010, 0x14400005, 0x32c22000, 0x8c030124, +0x8f420058, 0x1462fff2, 0x32c22000, 0x50400001, +0x36d68000, 0x8f420000, 0x10400007, 0x0, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x34420100, +0xaf820060, 0x8f420000, 0x10400003, 0x0, +0x1000006b, 0xaf80004c, 0x10000069, 0xaf800048, +0x30c20001, 0x10400004, 0x24020001, 0xaf820064, +0x10000063, 0x0, 0x30c20002, 0x1440000b, +0x3c050003, 0x3c040001, 0x248432a4, 0x34a50500, +0x3821, 0xafa00010, 0xc0029d3, 0xafa00014, +0x2402ffc0, 0x10000056, 0xaf820064, 0x8c10022c, +0x8c02010c, 0x12020047, 0x101080, 0x8c450300, +0x26020001, 0x3050003f, 0x24020003, 0xac10022c, +0x51e02, 0x10620005, 0x24020010, 0x1062001d, +0x30a20fff, 0x10000039, 0x0, 0x8f430298, +0x8f440000, 0x30a20fff, 0xaf420048, 0x24630001, +0xaf430298, 0x10800007, 0x8f420298, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x34420200, 0xaf820060, +0x8f420000, 0x1040001f, 0x0, 0x1000001b, +0x0, 0xaf420058, 0x32c22000, 0x50400001, +0x36d68000, 0x8f4202c4, 0x8f430000, 0x24420001, +0xaf4202c4, 0x10600007, 0x8f4202c4, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x34420100, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000005, +0xaf80004c, 0x10000003, 0xaf800048, 0xc002033, +0xa02021, 0x8c02010c, 0x16020002, 0x24020002, +0xaf820064, 0x8f820064, 0x30420002, 0x14400004, +0x0, 0x8c02010c, 0x1602ffad, 0x0, +0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, +0x3e00008, 0x0, 0x27bdffa8, 0xafb00038, +0x808021, 0x101602, 0x2442ffff, 0x304300ff, +0x2c620013, 0xafbf0050, 0xafbe004c, 0xafb50048, +0xafb30044, 0xafb20040, 0x104001e6, 0xafb1003c, +0x31080, 0x3c010001, 0x220821, 0x8c2232e8, +0x400008, 0x0, 0x101302, 0x30440fff, +0x24020001, 0x10820005, 0x24020002, 0x1082000a, +0x2402fffe, 0x10000021, 0x3c050003, 0x8f430004, +0x3c020001, 0x8c423e40, 0xaf4401f0, 0xaf4401f4, +0x10000007, 0x34630001, 0x8f430004, 0xaf4401f0, +0xaf4401f4, 0x621824, 0x3c020001, 0x2442c254, +0x21100, 0x21182, 0xaf430004, 0x3c030800, +0x431025, 0x3c010000, 0xac224138, 0x8f840054, +0x41442, 0x41c82, 0x431021, 0x41cc2, +0x431023, 0x41d02, 0x431021, 0x41d42, +0x431023, 0x10000009, 0xaf4201f8, 0x3c040001, +0x248432b0, 0x34a51000, 0x2003021, 0x3821, +0xafa00010, 0xc0029d3, 0xafa00014, 0x8f420290, +0x24420001, 0xaf420290, 0x10000215, 0x8f420290, +0x27b00028, 0x2002021, 0x24050210, 0xc002a57, +0x24060008, 0xc0023a0, 0x2002021, 0x1000020c, +0x0, 0x8c06022c, 0x27a40028, 0x61880, +0x24c20001, 0x3046003f, 0x8c650300, 0x61080, +0x8c430300, 0x24c20001, 0x3042003f, 0xac02022c, +0xafa50028, 0xc0023a0, 0xafa3002c, 0x100001fc, +0x0, 0x27b00028, 0x2002021, 0x24050210, +0xc002a57, 0x24060008, 0xc0024df, 0x2002021, +0x100001f3, 0x0, 0x8c06022c, 0x27a40028, +0x61880, 0x24c20001, 0x3046003f, 0x8c650300, +0x61080, 0x8c430300, 0x24c20001, 0x3042003f, +0xac02022c, 0xafa50028, 0xc0024df, 0xafa3002c, +0x100001e3, 0x0, 0x101302, 0x30430fff, +0x24020001, 0x10620005, 0x24020002, 0x1062001e, +0x3c020002, 0x10000033, 0x3c050003, 0x3c030002, +0x2c31024, 0x54400037, 0x2c3b025, 0x8f820228, +0x3c010001, 0x370821, 0xac2238d8, 0x8f82022c, +0x3c010001, 0x370821, 0xac2238dc, 0x8f820230, +0x3c010001, 0x370821, 0xac2238e0, 0x8f820234, +0x3c010001, 0x370821, 0xac2238e4, 0x2402ffff, +0xaf820228, 0xaf82022c, 0xaf820230, 0xaf820234, +0x10000020, 0x2c3b025, 0x2c21024, 0x10400012, +0x3c02fffd, 0x3c020001, 0x571021, 0x8c4238d8, +0xaf820228, 0x3c020001, 0x571021, 0x8c4238dc, +0xaf82022c, 0x3c020001, 0x571021, 0x8c4238e0, +0xaf820230, 0x3c020001, 0x571021, 0x8c4238e4, +0xaf820234, 0x3c02fffd, 0x3442ffff, 0x10000009, +0x2c2b024, 0x3c040001, 0x248432bc, 0x34a51100, +0x2003021, 0x3821, 0xafa00010, 0xc0029d3, +0xafa00014, 0x8f4202bc, 0x24420001, 0xaf4202bc, +0x1000019b, 0x8f4202bc, 0x101302, 0x30450fff, +0x24020001, 0x10a20005, 0x24020002, 0x10a2000d, +0x3c0408ff, 0x10000014, 0x3c050003, 0x3c0208ff, +0x3442ffff, 0x8f830220, 0x3c040004, 0x2c4b025, +0x621824, 0x34630008, 0xaf830220, 0x10000012, +0xaf450288, 0x3484fff7, 0x3c03fffb, 0x8f820220, +0x3463ffff, 0x2c3b024, 0x441024, 0xaf820220, +0x10000009, 0xaf450288, 0x3c040001, 0x248432c8, +0x34a51200, 0x2003021, 0x3821, 0xafa00010, +0xc0029d3, 0xafa00014, 0x8f4202ac, 0x24420001, +0xaf4202ac, 0x10000172, 0x8f4202ac, 0x27840208, +0x24050200, 0xc002a57, 0x24060008, 0x27440214, +0x24050200, 0xc002a57, 0x24060008, 0x8f4202b4, +0x24420001, 0xaf4202b4, 0x10000165, 0x8f4202b4, +0x101302, 0x30430fff, 0x24020001, 0x10620011, +0x28620002, 0x50400005, 0x24020002, 0x10600007, +0x0, 0x10000017, 0x0, 0x1062000f, +0x0, 0x10000013, 0x0, 0x8c060248, +0x2021, 0xc004878, 0x24050004, 0x10000007, +0x0, 0x8c060248, 0x2021, 0xc004878, +0x24050004, 0x10000010, 0x0, 0x8c06024c, +0x2021, 0xc004878, 0x24050001, 0x1000000a, +0x0, 0x3c040001, 0x248432d4, 0x3c050003, +0x34a51300, 0x2003021, 0x3821, 0xafa00010, +0xc0029d3, 0xafa00014, 0x8f4202b0, 0x24420001, +0xaf4202b0, 0x10000136, 0x8f4202b0, 0xc0022b4, +0x0, 0x10000132, 0x0, 0x24020001, +0xa34205b6, 0x24100100, 0x8f440198, 0x8f45019c, +0xafb00010, 0xafa00014, 0x8f420014, 0xafa20018, +0x8f420108, 0x26e60028, 0x40f809, 0x24070400, +0x1040fff5, 0x0, 0x10000121, 0x0, +0x3c02ffff, 0x34427fff, 0x2c2b024, 0x1821, +0x3c020900, 0xaf400058, 0xaf40005c, 0xaf400060, +0xaf400064, 0xaf400350, 0xafa20020, 0x8f5e0018, +0x27aa0020, 0x240200ff, 0x13c20002, 0xafaa0034, +0x27c30001, 0x8c020228, 0x609021, 0x1642000e, +0x1e38c0, 0x8f42032c, 0x24420001, 0xaf42032c, +0x8f42032c, 0x8c020228, 0x3c040001, 0x2484326c, +0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, +0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020, +0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, +0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, +0x1040001b, 0x9821, 0xe08821, 0x263504c0, +0x8f440168, 0x8f45016c, 0x2201821, 0x240a0004, +0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021, +0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, +0xa32821, 0xa3482b, 0x822021, 0x100f809, +0x892021, 0x54400006, 0x24130001, 0x8f820054, +0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, +0x326200ff, 0x54400017, 0xaf520018, 0x8f420368, +0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x8faa0034, 0xafa20010, 0x8f820124, 0x3c040001, +0x24843278, 0x3c050009, 0xafa20014, 0x8d460000, +0x10000033, 0x34a50600, 0x8f4202f8, 0x24130001, +0x24420001, 0xaf4202f8, 0x8f4202f8, 0x1000001c, +0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, +0x2021023, 0x2c4203e9, 0x10400014, 0x9821, +0x24110010, 0x8f42000c, 0x8f440150, 0x8f450154, +0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, +0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, +0x1440ffe5, 0x0, 0x8f820054, 0x2021023, +0x2c4203e9, 0x1440ffef, 0x0, 0x326200ff, +0x14400011, 0x0, 0x8f420368, 0x24420001, +0xaf420368, 0x8f420368, 0x8f820120, 0x8faa0034, +0xafa20010, 0x8f820124, 0x3c040001, 0x24843280, +0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700, +0xc0029d3, 0x3c03821, 0x8f4202a0, 0x24420001, +0xaf4202a0, 0x8f4202a0, 0x8f4202e8, 0x24420001, +0xaf4202e8, 0x1000008a, 0x8f4202e8, 0x8c02025c, +0x27440214, 0xaf4201e0, 0x8c020260, 0x24050200, +0x24060008, 0xc002a57, 0xaf4201e8, 0x8f820220, +0x30420008, 0x14400002, 0x24020001, 0x24020002, +0xaf420288, 0x8f42029c, 0x24420001, 0xaf42029c, +0x10000077, 0x8f42029c, 0x3c0200ff, 0x3442ffff, +0x2021824, 0x32c20180, 0x14400006, 0x3402fffb, +0x43102b, 0x14400003, 0x0, 0x1000006c, +0xaf4300bc, 0x3c040001, 0x248432e0, 0x3c050003, +0x34a51500, 0x2003021, 0x3821, 0xafa00010, +0xc0029d3, 0xafa00014, 0x3c020700, 0x34421000, +0x101e02, 0x621825, 0xafa30020, 0x8f510018, +0x240200ff, 0x12220002, 0x8021, 0x26300001, +0x8c020228, 0x1602000e, 0x1130c0, 0x8f42032c, +0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, +0x3c040001, 0x24843254, 0x3c050009, 0xafa00014, +0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100, +0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, +0xac4404c4, 0xc01821, 0x8f440168, 0x8f45016c, +0x1021, 0x24070004, 0xafa70010, 0xafb00014, +0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, +0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, +0x822021, 0x100f809, 0x892021, 0x1440000b, +0x24070008, 0x8f820120, 0xafa20010, 0x8f820124, +0x3c040001, 0x2484325c, 0x3c050009, 0xafa20014, +0x8fa60020, 0x1000001c, 0x34a50200, 0x8f440150, +0x8f450154, 0x8f43000c, 0xaf500018, 0x8f860120, +0x24020010, 0xafa20010, 0xafb00014, 0xafa30018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010, +0x0, 0x8f420330, 0x24420001, 0xaf420330, +0x8f420330, 0x8f820120, 0xafa20010, 0x8f820124, +0x3c040001, 0x24843264, 0x3c050009, 0xafa20014, +0x8fa60020, 0x34a50300, 0xc0029d3, 0x2203821, +0x8f4202d0, 0x24420001, 0xaf4202d0, 0x8f4202d0, +0x8f4202e0, 0x24420001, 0xaf4202e0, 0x8f4202e0, +0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, +0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008, +0x27bd0058, 0x27bdfff8, 0x2408ffff, 0x10a00014, +0x4821, 0x3c0aedb8, 0x354a8320, 0x90870000, +0x24840001, 0x3021, 0x1071026, 0x30420001, +0x10400002, 0x81842, 0x6a1826, 0x604021, +0x24c60001, 0x2cc20008, 0x1440fff7, 0x73842, +0x25290001, 0x125102b, 0x1440fff0, 0x0, +0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffb8, +0xafbf0040, 0xafbe003c, 0xafb50038, 0xafb30034, +0xafb20030, 0xafb1002c, 0xafb00028, 0x8f870220, +0xafa7001c, 0x8f870200, 0xafa70024, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004, +0xaf820220, 0x8f820200, 0x3c03c0ff, 0x3463ffff, +0x431024, 0x34420004, 0xaf820200, 0x8f53034c, +0x8f550350, 0x8f5e0354, 0x8f470358, 0xafa70014, +0x8f4202c0, 0x274401b0, 0x24420001, 0xaf4202c0, +0x8f5002c0, 0x8f5101f4, 0x8f5201f0, 0xc002a40, +0x24050400, 0xaf53034c, 0xaf550350, 0xaf5e0354, +0x8fa70014, 0xaf470358, 0xaf5002c0, 0xaf5101f4, +0xaf5201f0, 0x8c02025c, 0x27440214, 0xaf4201e0, +0x8c020260, 0x24050200, 0x24060008, 0xaf4201e8, +0x24020006, 0xc002a57, 0xaf4201e4, 0x3c023b9a, +0x3442ca00, 0xaf4201ec, 0x240203e8, 0x24040002, +0x24030001, 0xaf420284, 0xaf440280, 0xaf43028c, +0x8f820220, 0x30420008, 0x10400004, 0x0, +0xaf430288, 0x10000003, 0x3021, 0xaf440288, +0x3021, 0x3c030001, 0x661821, 0x90633c80, +0x3461021, 0x24c60001, 0xa043021c, 0x2cc2000f, +0x1440fff8, 0x3461821, 0x24c60001, 0x8f820040, +0x24040080, 0x24050080, 0x21702, 0x24420030, +0xa062021c, 0x3461021, 0xc002a40, 0xa040021c, +0x8fa7001c, 0x30e20004, 0x14400006, 0x0, +0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, +0xaf820220, 0x8fa70024, 0x30e20004, 0x14400006, +0x0, 0x8f820200, 0x3c03c0ff, 0x3463fffb, +0x431024, 0xaf820200, 0x8fbf0040, 0x8fbe003c, +0x8fb50038, 0x8fb30034, 0x8fb20030, 0x8fb1002c, +0x8fb00028, 0x3e00008, 0x27bd0048, 0xaf400104, +0x24040001, 0x410c0, 0x2e21821, 0x24820001, +0x3c010001, 0x230821, 0xa42234d0, 0x402021, +0x2c820080, 0x1440fff8, 0x410c0, 0x24020001, +0x3c010001, 0x370821, 0xa42038d0, 0xaf420100, +0xaf800228, 0xaf80022c, 0xaf800230, 0xaf800234, +0x3e00008, 0x0, 0x27bdffe8, 0xafbf0014, +0xafb00010, 0x8f420104, 0x28420005, 0x10400026, +0x808021, 0x3c020001, 0x8f430104, 0x344230d0, +0x2e22021, 0x318c0, 0x621821, 0x2e31821, +0x83102b, 0x10400015, 0x1021, 0x96070000, +0x24840006, 0x24660006, 0x9482fffc, 0x14470009, +0x2821, 0x9483fffe, 0x96020002, 0x14620006, +0xa01021, 0x94820000, 0x96030004, 0x431026, +0x2c450001, 0xa01021, 0x14400009, 0x24840008, +0x86102b, 0x1440fff0, 0x1021, 0x304200ff, +0x14400030, 0x24020001, 0x1000002e, 0x1021, +0x1000fffa, 0x24020001, 0x2002021, 0xc00229a, +0x24050006, 0x3042007f, 0x218c0, 0x2e31021, +0x3c010001, 0x220821, 0x942230d0, 0x1040fff2, +0x2e31021, 0x3c060001, 0xc23021, 0x94c630d0, +0x10c0ffed, 0x3c080001, 0x350834d2, 0x96070000, +0x610c0, 0x572021, 0x882021, 0x94820000, +0x14470009, 0x2821, 0x94830002, 0x96020002, +0x14620006, 0xa01021, 0x94820004, 0x96030004, +0x431026, 0x2c450001, 0xa01021, 0x14400007, +0x610c0, 0x2e21021, 0x3c060001, 0xc23021, +0x94c634d0, 0x14c0ffeb, 0x610c0, 0x10c0ffd2, +0x24020001, 0x8fbf0014, 0x8fb00010, 0x3e00008, +0x27bd0018, 0x3e00008, 0x0, 0x27bdffb0, +0x801021, 0xafb00030, 0x24500002, 0x2002021, +0x24050006, 0xafb10034, 0x408821, 0xafbf0048, +0xafbe0044, 0xafb50040, 0xafb3003c, 0xc00229a, +0xafb20038, 0x3047007f, 0x710c0, 0x2e21021, +0x3c050001, 0xa22821, 0x94a530d0, 0x50a0001c, +0xa03021, 0x3c090001, 0x352934d2, 0x96280002, +0x510c0, 0x572021, 0x892021, 0x94820000, +0x14480009, 0x3021, 0x94830002, 0x96020002, +0x14620006, 0xc01021, 0x94820004, 0x96030004, +0x431026, 0x2c460001, 0xc01021, 0x14400007, +0x510c0, 0x2e21021, 0x3c050001, 0xa22821, +0x94a534d0, 0x14a0ffeb, 0x510c0, 0xa03021, +0x10c00014, 0x610c0, 0x571821, 0x3c010001, +0x230821, 0x8c2334d0, 0x571021, 0xafa30010, +0x3c010001, 0x220821, 0x8c2234d4, 0x3c040001, +0x248433f0, 0xafa20014, 0x8e260000, 0x8e270004, +0x3c050004, 0xc0029d3, 0x34a50400, 0x10000063, +0x3c020800, 0x8f450100, 0x10a00006, 0x510c0, +0x2e21021, 0x3c010001, 0x220821, 0x942234d0, +0xaf420100, 0xa03021, 0x14c00011, 0x628c0, +0x710c0, 0x2e21021, 0xafa70010, 0x3c010001, +0x220821, 0x942230d0, 0x3c040001, 0x248433fc, +0xafa20014, 0x8e260000, 0x8e270004, 0x3c050004, +0xc0029d3, 0x34a50500, 0x10000048, 0x3c020800, +0xb71821, 0x3c020001, 0x96040000, 0x344234d2, +0x621821, 0xa4640000, 0x8e020002, 0x720c0, +0xac620002, 0x2e41021, 0x3c030001, 0x621821, +0x946330d0, 0x2e51021, 0x3c010001, 0x220821, +0xa42334d0, 0x2e41021, 0x3c010001, 0x220821, +0xa42630d0, 0x8f420104, 0x24420001, 0x28420080, +0x1040000f, 0x3c020002, 0x8f420104, 0x3c040001, +0x348430d2, 0x96030000, 0x210c0, 0x571021, +0x441021, 0xa4430000, 0x8e030002, 0xac430002, +0x8f420104, 0x24420001, 0xaf420104, 0x3c020002, +0x2c21024, 0x10400011, 0x72142, 0x3c030001, +0x346338d8, 0x24020003, 0x441023, 0x21080, +0x572021, 0x832021, 0x571021, 0x431021, +0x30e5001f, 0x8c430000, 0x24020001, 0xa21004, +0x621825, 0x1000000c, 0xac830000, 0x24020003, +0x441023, 0x21080, 0x5c2821, 0x5c1021, +0x30e4001f, 0x8c430228, 0x24020001, 0x821004, +0x621825, 0xaca30228, 0x3c020800, 0x34421000, +0x1821, 0xafa20020, 0x8f5e0018, 0x27aa0020, +0x240200ff, 0x13c20002, 0xafaa002c, 0x27c30001, +0x8c020228, 0x609021, 0x1642000e, 0x1e38c0, +0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, +0x8c020228, 0x3c040001, 0x248433b8, 0x3c050009, +0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006b, +0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, +0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, +0x9821, 0xe08821, 0x263504c0, 0x8f440168, +0x8f45016c, 0x2201821, 0x240a0004, 0xafaa0010, +0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, +0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, +0xa3482b, 0x822021, 0x100f809, 0x892021, +0x54400006, 0x24130001, 0x8f820054, 0x2021023, +0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, +0x54400017, 0xaf520018, 0x8f420368, 0x24420001, +0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, +0xafa20010, 0x8f820124, 0x3c040001, 0x248433c4, +0x3c050009, 0xafa20014, 0x8d460000, 0x10000033, +0x34a50600, 0x8f4202f8, 0x24130001, 0x24420001, +0xaf4202f8, 0x8f4202f8, 0x1000001c, 0x326200ff, +0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, +0x2c4203e9, 0x10400014, 0x9821, 0x24110010, +0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120, +0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c, +0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe5, +0x0, 0x8f820054, 0x2021023, 0x2c4203e9, +0x1440ffef, 0x0, 0x326200ff, 0x14400011, +0x0, 0x8f420368, 0x24420001, 0xaf420368, +0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x248433cc, 0x3c050009, +0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3, +0x3c03821, 0x8f4202a4, 0x24420001, 0xaf4202a4, +0x8f4202a4, 0x8f4202e4, 0x24420001, 0xaf4202e4, +0x8f4202e4, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, +0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, +0x3e00008, 0x27bd0050, 0x27bdffa0, 0x801021, +0xafb00040, 0x24500002, 0x2002021, 0x24050006, +0xafb10044, 0x408821, 0xafbf0058, 0xafbe0054, +0xafb50050, 0xafb3004c, 0xc00229a, 0xafb20048, +0x3048007f, 0x810c0, 0x2e21021, 0x3c060001, +0xc23021, 0x94c630d0, 0x10c0001c, 0x3821, +0x3c0a0001, 0x354a34d2, 0x96290002, 0x610c0, +0x572021, 0x8a2021, 0x94820000, 0x14490009, +0x2821, 0x94830002, 0x96020002, 0x14620006, +0xa01021, 0x94820004, 0x96030004, 0x431026, +0x2c450001, 0xa01021, 0x14400008, 0x610c0, +0xc03821, 0x2e21021, 0x3c060001, 0xc23021, +0x94c634d0, 0x14c0ffea, 0x610c0, 0x14c00011, +0xafa70028, 0x810c0, 0x2e21021, 0xafa80010, +0x3c010001, 0x220821, 0x942230d0, 0x3c040001, +0x24843408, 0xafa20014, 0x8e260000, 0x8e270004, +0x3c050004, 0xc0029d3, 0x34a50900, 0x10000075, +0x3c020800, 0x10e0000c, 0x610c0, 0x2e21021, +0x3c030001, 0x621821, 0x946334d0, 0x710c0, +0x2e21021, 0x3c010001, 0x220821, 0xa42334d0, +0x1000000b, 0x3c040001, 0x2e21021, 0x3c030001, +0x621821, 0x946334d0, 0x810c0, 0x2e21021, +0x3c010001, 0x220821, 0xa42330d0, 0x3c040001, +0x348430d0, 0x8f430100, 0x610c0, 0x2e21021, +0x3c010001, 0x220821, 0xa42334d0, 0x8f420104, +0x2e43821, 0x2821, 0x18400029, 0xaf460100, +0x24e60006, 0x94c3fffc, 0x96020000, 0x14620009, +0x2021, 0x94c3fffe, 0x96020002, 0x14620006, +0x801021, 0x94c20000, 0x96030004, 0x431026, +0x2c440001, 0x801021, 0x50400014, 0x24a50001, +0x8f420104, 0x2442ffff, 0xa2102a, 0x1040000b, +0x24e40004, 0x94820006, 0x8c830008, 0xa482fffe, +0xac830000, 0x8f420104, 0x24a50001, 0x2442ffff, +0xa2102a, 0x1440fff7, 0x24840008, 0x8f420104, +0x2442ffff, 0x10000006, 0xaf420104, 0x8f420104, +0x24c60008, 0xa2102a, 0x1440ffda, 0x24e70008, +0x810c0, 0x2e21021, 0x3c010001, 0x220821, +0x942230d0, 0x14400023, 0x3c020800, 0x3c020002, +0x2c21024, 0x10400012, 0x82142, 0x3c030001, +0x346338d8, 0x24020003, 0x441023, 0x21080, +0x572021, 0x832021, 0x571021, 0x431021, +0x3105001f, 0x24030001, 0x8c420000, 0xa31804, +0x31827, 0x431024, 0x1000000d, 0xac820000, +0x24020003, 0x441023, 0x21080, 0x5c2821, +0x5c1021, 0x3104001f, 0x24030001, 0x8c420228, +0x831804, 0x31827, 0x431024, 0xaca20228, +0x3c020800, 0x34422000, 0x1821, 0xafa20020, +0x8f5e0018, 0x27ab0020, 0x240200ff, 0x13c20002, +0xafab0034, 0x27c30001, 0x8c020228, 0x609021, +0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001, +0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001, +0x248433b8, 0x3c050009, 0xafa00014, 0xafa20010, +0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, +0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, +0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, +0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, +0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821, +0x240b0004, 0xafab0010, 0xafb20014, 0x8f48000c, +0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, +0x24070008, 0xa32821, 0xa3482b, 0x822021, +0x100f809, 0x892021, 0x54400006, 0x24130001, +0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, +0x0, 0x326200ff, 0x54400017, 0xaf520018, +0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, +0x8f820120, 0x8fab0034, 0xafa20010, 0x8f820124, +0x3c040001, 0x248433c4, 0x3c050009, 0xafa20014, +0x8d660000, 0x10000033, 0x34a50600, 0x8f4202f8, +0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, +0x9821, 0x24110010, 0x8f42000c, 0x8f440150, +0x8f450154, 0x8f860120, 0xafb10010, 0xafb20014, +0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, +0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, +0x2021023, 0x2c4203e9, 0x1440ffef, 0x0, +0x326200ff, 0x14400011, 0x0, 0x8f420368, +0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x8fab0034, 0xafa20010, 0x8f820124, 0x3c040001, +0x248433cc, 0x3c050009, 0xafa20014, 0x8d660000, +0x34a50700, 0xc0029d3, 0x3c03821, 0x8f4202a8, +0x24420001, 0xaf4202a8, 0x8f4202a8, 0x8f4202e4, +0x24420001, 0xaf4202e4, 0x8f4202e4, 0x8fbf0058, +0x8fbe0054, 0x8fb50050, 0x8fb3004c, 0x8fb20048, +0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0060, +0x0, 0x0, 0x0, 0x27bdffe0, +0x27644000, 0xafbf0018, 0xc002a40, 0x24051000, +0x3c030001, 0x34632cc0, 0x3c040001, 0x34842ec8, +0x24020020, 0xaf82011c, 0x2e31021, 0xaf800100, +0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114, +0xaf800118, 0xaf800120, 0xaf800124, 0xaf800128, +0xaf800130, 0xaf800134, 0xaf800138, 0xaf4200ec, +0x2e31021, 0xaf4200f0, 0x2e41021, 0xaf4200f4, +0x2e41021, 0xaf4200f8, 0x3c020001, 0x571021, +0x904240f4, 0x1440001c, 0x3c050001, 0x8f82011c, +0x3c040001, 0x248434d0, 0x3c050001, 0x34420001, +0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c, +0x34a50100, 0xc0029d3, 0x3821, 0x8c020218, +0x30420040, 0x10400014, 0x0, 0x8f82011c, +0x3c040001, 0x248434dc, 0x3c050001, 0x34420004, +0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c, +0x10000007, 0x34a50200, 0x3c040001, 0x248434e4, +0xafa00010, 0xafa00014, 0x8f86011c, 0x34a50300, +0xc0029d3, 0x3821, 0x8fbf0018, 0x3e00008, +0x27bd0020, 0x8fa90010, 0x8f83012c, 0x8faa0014, +0x8fab0018, 0x1060000a, 0x27624fe0, 0x14620002, +0x24680020, 0x27684800, 0x8f820128, 0x11020004, +0x0, 0x8f820124, 0x15020007, 0x0, +0x8f430324, 0x1021, 0x24630001, 0xaf430324, +0x10000039, 0x8f430324, 0xac640000, 0xac650004, +0xac660008, 0xa467000e, 0xac690018, 0xac6a001c, +0xac6b0010, 0xac620014, 0xaf880120, 0x8f4200fc, +0x8f4400f4, 0x2442ffff, 0xaf4200fc, 0x8c820000, +0x10490005, 0x3042ff8f, 0x10400019, 0x3122ff8f, +0x10400018, 0x3c020001, 0x8c830004, 0x2c620010, +0x10400013, 0x3c020001, 0x24630001, 0xac830004, +0x8f4300f8, 0x344230c8, 0x2e21021, 0x54620004, +0x24620008, 0x3c020001, 0x34422ec8, 0x2e21021, +0x14440015, 0x24020001, 0x8f820128, 0x24420020, +0xaf820128, 0x8f820128, 0x1000000f, 0x24020001, +0x3c020001, 0x344230c8, 0x2e21021, 0x54820004, +0x24820008, 0x3c020001, 0x34422ec8, 0x2e21021, +0x402021, 0x24020001, 0xaf4400f4, 0xac890000, +0xac820004, 0x24020001, 0x3e00008, 0x0, +0x3e00008, 0x0, 0x8fa90010, 0x8faa0014, +0x8f830120, 0x8fab0018, 0x27624fe0, 0x14620002, +0x24680020, 0x27684800, 0x8f820128, 0x1102000f, +0x24620016, 0xac640000, 0xac650004, 0xac660008, +0xa467000e, 0xac690018, 0xac6a001c, 0xac620014, +0xac6b0010, 0xaf880120, 0x8f4300fc, 0x24020001, +0x2463ffff, 0x10000006, 0xaf4300fc, 0x8f430324, +0x1021, 0x24630001, 0xaf430324, 0x8f430324, +0x3e00008, 0x0, 0x3e00008, 0x0, +0x8fa90010, 0x8f83010c, 0x8faa0014, 0x8fab0018, +0x1060000a, 0x276247e0, 0x14620002, 0x24680020, +0x27684000, 0x8f820108, 0x11020004, 0x0, +0x8f820104, 0x15020007, 0x0, 0x8f430328, +0x1021, 0x24630001, 0xaf430328, 0x10000035, +0x8f430328, 0xac640000, 0xac650004, 0xac660008, +0xa467000e, 0xac690018, 0xac6a001c, 0xac6b0010, +0xac620014, 0xaf880100, 0x8f4400ec, 0x8c820000, +0x30420006, 0x10400019, 0x31220006, 0x10400018, +0x3c020001, 0x8c830004, 0x2c620010, 0x10400013, +0x3c020001, 0x24630001, 0xac830004, 0x8f4300f0, +0x34422ec0, 0x2e21021, 0x54620004, 0x24620008, +0x3c020001, 0x34422cc0, 0x2e21021, 0x14440015, +0x24020001, 0x8f820108, 0x24420020, 0xaf820108, +0x8f820108, 0x1000000f, 0x24020001, 0x3c020001, +0x34422ec0, 0x2e21021, 0x54820004, 0x24820008, +0x3c020001, 0x34422cc0, 0x2e21021, 0x402021, +0x24020001, 0xaf4400ec, 0xac890000, 0xac820004, +0x24020001, 0x3e00008, 0x0, 0x3e00008, +0x0, 0x8fa30010, 0x8faa0014, 0x8f880100, +0x8fab0018, 0x276247e0, 0x15020002, 0x25090020, +0x27694000, 0x8f820108, 0x1122000d, 0x0, +0xad030018, 0x25030016, 0xad040000, 0xad050004, +0xad060008, 0xa507000e, 0xad0a001c, 0xad030014, +0xad0b0010, 0xaf890100, 0x10000006, 0x24020001, +0x8f430328, 0x1021, 0x24630001, 0xaf430328, +0x8f430328, 0x3e00008, 0x0, 0x3e00008, +0x0, 0x27bdffd8, 0x3c040001, 0x248434ec, +0x3c050001, 0xafbf0024, 0xafb20020, 0xafb1001c, +0xafb00018, 0x8f900104, 0x8f9100b0, 0x8f92011c, +0x34a52500, 0x8f820100, 0x2403021, 0x2203821, +0xafa20010, 0xc0029d3, 0xafb00014, 0x8e020008, +0xafa20010, 0x8e02000c, 0x3c040001, 0x248434f8, +0xafa20014, 0x8e060000, 0x8e070004, 0x3c050001, +0xc0029d3, 0x34a52510, 0x8e020018, 0xafa20010, +0x8e02001c, 0x3c040001, 0x24843504, 0xafa20014, +0x8e060010, 0x8e070014, 0x3c050001, 0xc0029d3, +0x34a52520, 0x3c030200, 0x2c31024, 0x1040000d, +0x2231024, 0x1040000b, 0x36420002, 0xaf82011c, +0x36220001, 0xaf8200b0, 0xaf900104, 0xaf92011c, +0x8f420320, 0x24420001, 0xaf420320, 0x10000015, +0x8f420320, 0x3c040001, 0x24843510, 0x24020290, +0xafa20010, 0xafa00014, 0x8f860144, 0x3c070001, +0x24e73518, 0xc0029d3, 0x3405dead, 0x8f82011c, +0x34420002, 0xaf82011c, 0x8f820220, 0x34420004, +0xaf820220, 0x8f820140, 0x3c030001, 0x431025, +0xaf820140, 0x8fbf0024, 0x8fb20020, 0x8fb1001c, +0x8fb00018, 0x3e00008, 0x27bd0028, 0x27bdffd8, +0x3c040001, 0x24843540, 0x3c050001, 0xafbf0024, +0xafb20020, 0xafb1001c, 0xafb00018, 0x8f900124, +0x8f9100a0, 0x8f92011c, 0x34a52600, 0x8f820120, +0x2403021, 0x2203821, 0xafa20010, 0xc0029d3, +0xafb00014, 0x8e020008, 0xafa20010, 0x8e02000c, +0x3c040001, 0x2484354c, 0xafa20014, 0x8e060000, +0x8e070004, 0x3c050001, 0xc0029d3, 0x34a52610, +0x8e020018, 0xafa20010, 0x8e02001c, 0x3c040001, +0x24843558, 0xafa20014, 0x8e060010, 0x8e070014, +0x3c050001, 0xc0029d3, 0x34a52620, 0x3c030200, +0x2c31024, 0x1040000d, 0x2231024, 0x1040000b, +0x36420002, 0xaf82011c, 0x36220001, 0xaf8200a0, +0xaf900124, 0xaf92011c, 0x8f42031c, 0x24420001, +0xaf42031c, 0x10000015, 0x8f42031c, 0x3c040001, +0x24843510, 0x240202bc, 0xafa20010, 0xafa00014, +0x8f860144, 0x3c070001, 0x24e73518, 0xc0029d3, +0x3405dead, 0x8f82011c, 0x34420002, 0xaf82011c, +0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, +0x3c030001, 0x431025, 0xaf820140, 0x8fbf0024, +0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, +0x27bd0028, 0x6021, 0x5021, 0x3021, +0x2821, 0x6821, 0x4821, 0x7821, +0x7021, 0x8f880124, 0x8f870104, 0x1580002e, +0x8f8b011c, 0x11a00014, 0x31620800, 0x8f820120, +0x10460029, 0x0, 0x3c040001, 0x8c843e20, +0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004, +0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, +0x8cc20010, 0x240c0001, 0xac820010, 0x8cc20014, +0x10000012, 0x24c60020, 0x10400017, 0x0, +0x3c040001, 0x8c843e20, 0x8d020000, 0x8d030004, +0xac820000, 0xac830004, 0x8d020008, 0xac820008, +0x9502000e, 0xa482000e, 0x8d020010, 0x25060020, +0xac820010, 0x8d020014, 0x240c0001, 0xc01821, +0xac820014, 0x27624fe0, 0x43102b, 0x54400001, +0x27634800, 0x603021, 0x1540002f, 0x31620100, +0x11200014, 0x31628000, 0x8f820100, 0x1045002a, +0x31620100, 0x3c040001, 0x8c843e1c, 0x8ca20000, +0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008, +0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, +0x240a0001, 0xac820010, 0x8ca20014, 0x10000012, +0x24a50020, 0x10400018, 0x31620100, 0x3c040001, +0x8c843e1c, 0x8ce20000, 0x8ce30004, 0xac820000, +0xac830004, 0x8ce20008, 0xac820008, 0x94e2000e, +0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010, +0x8ce20014, 0x240a0001, 0xa01821, 0xac820014, +0x276247e0, 0x43102b, 0x54400001, 0x27634000, +0x602821, 0x31620100, 0x5440001d, 0x31621000, +0x11a00009, 0x31a20800, 0x10400004, 0x25020020, +0x8f8200a8, 0xa5e20000, 0x25020020, 0xaf820124, +0x8f880124, 0x6821, 0x11800011, 0x31621000, +0x3c040001, 0x8c843e20, 0x8c820000, 0x8c830004, +0xaf820080, 0xaf830084, 0x8c820008, 0xaf8200a4, +0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021, +0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31621000, +0x1440ff82, 0x0, 0x1120000f, 0x31220800, +0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000, +0x3c020002, 0x1221024, 0x10400004, 0x24e20020, +0x8f8200b4, 0xaf8200d4, 0x24e20020, 0xaf820104, +0x8f870104, 0x4821, 0x1140ff70, 0x0, +0x3c040001, 0x8c843e1c, 0x8c820000, 0x8c830004, +0xaf820090, 0xaf830094, 0x8c820008, 0xaf8200b4, +0x9482000e, 0xaf82009c, 0x8c820010, 0x5021, +0xaf8200b0, 0x8c890010, 0x1000ff60, 0x8c8e0014, +0x3e00008, 0x0, 0x6021, 0x5821, +0x3021, 0x2821, 0x6821, 0x5021, +0x7821, 0x7021, 0x8f880124, 0x8f870104, +0x3c180100, 0x1580002e, 0x8f89011c, 0x11a00014, +0x31220800, 0x8f820120, 0x10460029, 0x0, +0x3c040001, 0x8c843e20, 0x8cc20000, 0x8cc30004, +0xac820000, 0xac830004, 0x8cc20008, 0xac820008, +0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001, +0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, +0x10400017, 0x0, 0x3c040001, 0x8c843e20, +0x8d020000, 0x8d030004, 0xac820000, 0xac830004, +0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, +0x8d020010, 0x25060020, 0xac820010, 0x8d020014, +0x240c0001, 0xc01821, 0xac820014, 0x27624fe0, +0x43102b, 0x54400001, 0x27634800, 0x603021, +0x1560002f, 0x31220100, 0x11400014, 0x31228000, +0x8f820100, 0x1045002a, 0x31220100, 0x3c040001, +0x8c843e1c, 0x8ca20000, 0x8ca30004, 0xac820000, +0xac830004, 0x8ca20008, 0xac820008, 0x94a2000e, +0xa482000e, 0x8ca20010, 0x240b0001, 0xac820010, +0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, +0x31220100, 0x3c040001, 0x8c843e1c, 0x8ce20000, +0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008, +0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, +0x24e50020, 0xac820010, 0x8ce20014, 0x240b0001, +0xa01821, 0xac820014, 0x276247e0, 0x43102b, +0x54400001, 0x27634000, 0x602821, 0x31220100, +0x5440001d, 0x31221000, 0x11a00009, 0x31a20800, +0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000, +0x25020020, 0xaf820124, 0x8f880124, 0x6821, +0x11800011, 0x31221000, 0x3c040001, 0x8c843e20, +0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084, +0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, +0x8c820010, 0x6021, 0xaf8200a0, 0x8c8d0010, +0x8c8f0014, 0x31221000, 0x14400022, 0x0, +0x1140000f, 0x31420800, 0x10400004, 0x3c020002, +0x8f8200b8, 0xa5c20000, 0x3c020002, 0x1421024, +0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4, +0x24e20020, 0xaf820104, 0x8f870104, 0x5021, +0x11600010, 0x0, 0x3c040001, 0x8c843e1c, +0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, +0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, +0x8c820010, 0x5821, 0xaf8200b0, 0x8c8a0010, +0x8c8e0014, 0x8f820070, 0x3c031000, 0x431024, +0x1040ff5c, 0x0, 0x8f820054, 0x24420005, +0xaf820078, 0x8c040234, 0x10800016, 0x1821, +0x3c020001, 0x571021, 0x8c4240e8, 0x24420005, +0x3c010001, 0x370821, 0xac2240e8, 0x3c020001, +0x571021, 0x8c4240e8, 0x44102b, 0x14400009, +0x24020001, 0x3c030080, 0x3c010001, 0x370821, +0xac2040e8, 0x3c010001, 0x370821, 0x1000000c, +0xa02240f0, 0x3c020001, 0x571021, 0x904240f0, +0x14400006, 0x3c020080, 0x3c020001, 0x571021, +0x904240f1, 0x10400002, 0x3c020080, 0x621825, +0x8c040230, 0x10800013, 0x0, 0x3c020001, +0x571021, 0x8c4240ec, 0x24420005, 0x3c010001, +0x370821, 0xac2240ec, 0x3c020001, 0x571021, +0x8c4240ec, 0x44102b, 0x14400006, 0x0, +0x3c010001, 0x370821, 0xac2040ec, 0x10000006, +0x781825, 0x3c020001, 0x571021, 0x904240f2, +0x54400001, 0x781825, 0x1060ff1a, 0x0, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x431025, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x1000ff05, +0xaf80004c, 0x1000ff03, 0xaf800048, 0x3e00008, +0x0, 0x0, 0x0, 0x3c020001, +0x8c423ca8, 0x27bdffe8, 0xafbf0014, 0x14400012, +0xafb00010, 0x3c100001, 0x26103ec0, 0x2002021, +0xc002a40, 0x24052000, 0x26021fe0, 0x3c010001, +0xac223e28, 0x3c010001, 0xac223e24, 0xac020250, +0x24022000, 0xac100254, 0xac020258, 0x24020001, +0x3c010001, 0xac223ca8, 0x8fbf0014, 0x8fb00010, +0x3e00008, 0x27bd0018, 0x3c090001, 0x8d293e28, +0x8c820000, 0x8fa30010, 0x8fa80014, 0xad220000, +0x8c820004, 0xad250008, 0xad220004, 0x8f820054, +0xad260010, 0xad270014, 0xad230018, 0xad28001c, +0xad22000c, 0x2529ffe0, 0x3c020001, 0x24423ec0, +0x122102b, 0x10400003, 0x0, 0x3c090001, +0x8d293e24, 0x3c020001, 0x8c423c90, 0xad220000, +0x3c020001, 0x8c423c90, 0x3c010001, 0xac293e28, +0xad220004, 0xac090250, 0x3e00008, 0x0, +0x27bdffd0, 0xafb00010, 0x3c100001, 0x8e103e28, +0x3c020001, 0x8c423c90, 0xafb10014, 0x808821, +0xafbe0024, 0x8fbe0040, 0x8fa40048, 0xafb20018, +0xa09021, 0xafbf0028, 0xafb50020, 0xafb3001c, +0xae020000, 0x3c020001, 0x8c423c90, 0xc09821, +0xe0a821, 0x10800006, 0xae020004, 0x26050008, +0xc002a4b, 0x24060018, 0x10000005, 0x2610ffe0, +0x26040008, 0xc002a40, 0x24050018, 0x2610ffe0, +0x3c030001, 0x24633ec0, 0x203102b, 0x10400003, +0x0, 0x3c100001, 0x8e103e24, 0x8e220000, +0xae020000, 0x8e220004, 0xae120008, 0xae020004, +0x8f820054, 0xae130010, 0xae150014, 0xae1e0018, +0x8fa80044, 0xae08001c, 0xae02000c, 0x2610ffe0, +0x203102b, 0x10400003, 0x0, 0x3c100001, +0x8e103e24, 0x3c020001, 0x8c423c90, 0xae020000, +0x3c020001, 0x8c423c90, 0x3c010001, 0xac303e28, +0xae020004, 0xac100250, 0x8fbf0028, 0x8fbe0024, +0x8fb50020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, +0x8fb00010, 0x3e00008, 0x27bd0030, 0x851821, +0x83102b, 0x10400006, 0x0, 0xac800000, +0x24840004, 0x83102b, 0x5440fffd, 0xac800000, +0x3e00008, 0x0, 0xa61821, 0xa3102b, +0x10400007, 0x0, 0x8c820000, 0xaca20000, +0x24a50004, 0xa3102b, 0x1440fffb, 0x24840004, +0x3e00008, 0x0, 0x861821, 0x83102b, +0x10400007, 0x0, 0x8ca20000, 0xac820000, +0x24840004, 0x83102b, 0x1440fffb, 0x24a50004, +0x3e00008, 0x0, 0x63080, 0x861821, +0x83102b, 0x10400006, 0x0, 0xac850000, +0x24840004, 0x83102b, 0x5440fffd, 0xac850000, +0x3e00008, 0x0, 0x0, 0x27bdffd8, +0xafbf0024, 0xafb00020, 0x8f430024, 0x8f420020, +0x10620038, 0x0, 0x8f430020, 0x8f420024, +0x622023, 0x4810003, 0x0, 0x8f420040, +0x822021, 0x8f430030, 0x8f420024, 0x43102b, +0x14400005, 0x0, 0x8f430040, 0x8f420024, +0x10000005, 0x621023, 0x8f420030, 0x8f430024, +0x431023, 0x2442ffff, 0x406021, 0x8c102a, +0x54400001, 0x806021, 0x8f4a0024, 0x8f490040, +0x8f480024, 0x8f440170, 0x8f450174, 0x8f460024, +0x8f4b001c, 0x24070001, 0xafa70010, 0x84100, +0x1001821, 0x14c5021, 0x2529ffff, 0x1498024, +0xafb00014, 0x8f470014, 0x1021, 0x63100, +0xafa70018, 0xa32821, 0xa3382b, 0x822021, +0x872021, 0x8f420108, 0x1663021, 0x40f809, +0xc3900, 0x54400001, 0xaf500024, 0x8f430024, +0x8f420020, 0x14620018, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x2403ffef, 0x431024, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000002, +0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, +0x3e00008, 0x27bd0028, 0x3e00008, 0x0, +0x27bdffc0, 0x32c20020, 0xafbf0038, 0xafb30034, +0xafb20030, 0xafb1002c, 0x10400004, 0xafb00028, +0x8f530028, 0x10000002, 0x0, 0x8f530020, +0x8f420030, 0x105300e4, 0x21100, 0x8f43001c, +0x628021, 0x8e040000, 0x8e050004, 0x96120008, +0x8f420090, 0x9611000a, 0x3246ffff, 0x46102a, +0x10400017, 0x0, 0x8f8200d8, 0x8f430098, +0x431023, 0x2442fff8, 0xaf420090, 0x8f420090, +0x2842fff9, 0x10400005, 0x0, 0x8f420090, +0x8f430138, 0x431021, 0xaf420090, 0x8f420090, +0x46102a, 0x10400006, 0x0, 0x8f420338, +0x24420001, 0xaf420338, 0x100000da, 0x8f420338, +0x8f8200fc, 0x14400006, 0x32c20008, 0x8f420334, +0x24420001, 0xaf420334, 0x100000d2, 0x8f420334, +0x5040000c, 0xaf4000ac, 0x934205b3, 0x10400008, +0x32220200, 0x10400006, 0x3c034000, 0x9602000e, +0xaf4300ac, 0x21400, 0x10000002, 0xaf4200b0, +0xaf4000ac, 0x32220004, 0x1040007f, 0x32220800, +0x10400003, 0x3247ffff, 0x10000002, 0x24020020, +0x24020004, 0xafa20010, 0x8f420030, 0xafa20014, +0x8f420010, 0x3c030002, 0x431025, 0xafa20018, +0x8f460098, 0x8f420108, 0x40f809, 0x0, +0x104000b0, 0x0, 0x8f42009c, 0x8f430094, +0x2421021, 0xaf42009c, 0xae03000c, 0x8f4200ac, +0x10400008, 0x3c034000, 0x8f420094, 0x431025, +0xafa20020, 0x8f42009c, 0x8f4300b0, 0x10000004, +0x431025, 0x8f420094, 0xafa20020, 0x8f42009c, +0xafa20024, 0x8f8200fc, 0x8fa30020, 0x8fa40024, +0xac430000, 0xac440004, 0x24420008, 0xaf8200f0, +0x8f42009c, 0x8f440260, 0x8f450264, 0x401821, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0x32230060, 0x24020040, 0xaf440260, +0xaf450264, 0x10620017, 0x2c620041, 0x10400005, +0x24020020, 0x10620008, 0x24020001, 0x10000026, +0x0, 0x24020060, 0x10620019, 0x24020001, +0x10000021, 0x0, 0x8f420268, 0x8f43026c, +0x24630001, 0x2c640001, 0x441021, 0xaf420268, +0xaf43026c, 0x8f420268, 0x8f43026c, 0x10000016, +0x24020001, 0x8f420270, 0x8f430274, 0x24630001, +0x2c640001, 0x441021, 0xaf420270, 0xaf430274, +0x8f420270, 0x8f430274, 0x1000000b, 0x24020001, +0x8f420278, 0x8f43027c, 0x24630001, 0x2c640001, +0x441021, 0xaf420278, 0xaf43027c, 0x8f420278, +0x8f43027c, 0x24020001, 0xa34205b3, 0x8f420098, +0x3244ffff, 0x2406fff8, 0x8f450130, 0x441021, +0x24420007, 0x461024, 0x24840007, 0xaf420094, +0x8f420090, 0x8f430094, 0x862024, 0x441023, +0x65182b, 0x14600005, 0xaf420090, 0x8f420094, +0x8f430138, 0x431023, 0xaf420094, 0x8f420094, +0x10000023, 0xaf40009c, 0x3247ffff, 0x10e00021, +0x0, 0x14400002, 0x24020010, 0x24020002, +0xafa20010, 0x8f420030, 0xafa20014, 0x8f420010, +0xafa20018, 0x8f460098, 0x8f420108, 0x40f809, +0x0, 0x10400033, 0x3245ffff, 0x8f420098, +0x8f430090, 0x8f460130, 0x451021, 0xaf420098, +0x8f42009c, 0x8f440098, 0xa34005b3, 0x651823, +0xaf430090, 0x451021, 0x86202b, 0x14800005, +0xaf42009c, 0x8f420098, 0x8f430138, 0x431023, +0xaf420098, 0x8f420030, 0x8f430040, 0x24420001, +0x2463ffff, 0x431024, 0xaf420030, 0x8f420030, +0x14530018, 0x0, 0x8f420000, 0x10400007, +0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, +0x0, 0x10000005, 0x0, 0xaf800048, +0x8f820048, 0x1040fffd, 0x0, 0x8f820060, +0x2403fff7, 0x431024, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x10000002, 0xaf80004c, +0xaf800048, 0x8fbf0038, 0x8fb30034, 0x8fb20030, +0x8fb1002c, 0x8fb00028, 0x3e00008, 0x27bd0040, +0x3e00008, 0x0, 0x27bdffd0, 0x32c20020, +0xafbf002c, 0xafb20028, 0xafb10024, 0x10400004, +0xafb00020, 0x8f520028, 0x10000002, 0x0, +0x8f520020, 0x8f420030, 0x105200b5, 0x21100, +0x8f43001c, 0x628021, 0x8e040000, 0x8e050004, +0x96110008, 0x8f420090, 0x9607000a, 0x3226ffff, +0x46102a, 0x10400017, 0x0, 0x8f8200d8, +0x8f430098, 0x431023, 0x2442ff80, 0xaf420090, +0x8f420090, 0x2842ff81, 0x10400005, 0x0, +0x8f420090, 0x8f430138, 0x431021, 0xaf420090, +0x8f420090, 0x46102a, 0x10400006, 0x0, +0x8f420338, 0x24420001, 0xaf420338, 0x100000ab, +0x8f420338, 0x8f8600fc, 0x10c0000c, 0x0, +0x8f8200f4, 0x2403fff8, 0x431024, 0x461023, +0x218c3, 0x50600001, 0x24030100, 0x8f42008c, +0x43102b, 0x14400006, 0x712c2, 0x8f420334, +0x24420001, 0xaf420334, 0x10000098, 0x8f420334, +0x934305b3, 0x1060000f, 0x30460001, 0x8f420010, +0x34480400, 0x32c20008, 0x10400008, 0x30e20200, +0x10400006, 0x3c034000, 0x9602000e, 0xaf4300ac, +0x21400, 0x10000004, 0xaf4200b0, 0x10000002, +0xaf4000ac, 0x8f480010, 0x30e20004, 0x10400045, +0x3227ffff, 0x8f4900ac, 0x11200005, 0x30c200ff, +0x14400006, 0x24020040, 0x10000004, 0x24020008, +0x14400002, 0x24020020, 0x24020004, 0xafa20010, +0x8f430030, 0x11200004, 0xafa30014, 0x8f4200b0, +0x621025, 0xafa20014, 0x3c020002, 0x1021025, +0xafa20018, 0x8f460098, 0x8f420108, 0x40f809, +0x0, 0x10400069, 0x3224ffff, 0x8f42008c, +0x8f430094, 0x24420001, 0xaf42008c, 0x24020001, +0xae03000c, 0xa34205b3, 0x8f420098, 0x2406fff8, +0x8f450130, 0x441021, 0x24420007, 0x461024, +0x24840007, 0xaf420094, 0x8f420090, 0x8f430094, +0x862024, 0x441023, 0x65182b, 0x14600005, +0xaf420090, 0x8f420094, 0x8f430138, 0x431023, +0xaf420094, 0x8f430094, 0x8f420134, 0x43102b, +0x10400009, 0x0, 0x8f430130, 0x8f440094, +0x8f420090, 0x8f45012c, 0x641823, 0x431023, +0xaf420090, 0xaf450094, 0x8f420094, 0x1000001f, +0xaf420098, 0x10e0001d, 0x30c200ff, 0x14400002, +0x24020010, 0x24020002, 0xafa20010, 0x8f420030, +0xafa80018, 0xafa20014, 0x8f460098, 0x8f420108, +0x40f809, 0x0, 0x10400030, 0x3225ffff, +0x8f420098, 0x8f440130, 0x451021, 0xaf420098, +0x8f420090, 0x8f430098, 0xa34005b3, 0x451023, +0x64182b, 0x14600005, 0xaf420090, 0x8f420098, +0x8f430138, 0x431023, 0xaf420098, 0x8f420030, +0x8f430040, 0x24420001, 0x2463ffff, 0x431024, +0xaf420030, 0x8f420030, 0x14520018, 0x0, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x2403fff7, 0x431024, +0xaf820060, 0x8f420000, 0x10400003, 0x0, +0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf002c, +0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008, +0x27bd0030, 0x3e00008, 0x0, 0x27bdffd8, +0x3c020001, 0x34422ec0, 0xafbf0020, 0x8f4300f0, +0x8f840108, 0x2e21021, 0x54620004, 0x24620008, +0x3c020001, 0x34422cc0, 0x2e21021, 0x401821, +0xaf4300f0, 0xac600000, 0x8f4200ec, 0x8c660004, +0x14620004, 0x3c020001, 0x24820020, 0x1000000f, +0xaf820108, 0x8f4300f0, 0x34422ec0, 0x2e21021, +0x54620004, 0x24620008, 0x3c020001, 0x34422cc0, +0x2e21021, 0x401821, 0x8c620004, 0x21140, +0x821021, 0xaf820108, 0xac600000, 0x8c850018, +0x30a20036, 0x1040006c, 0x30a20001, 0x8c82001c, +0x8f430040, 0x8f440034, 0x24420001, 0x2463ffff, +0x431024, 0x862021, 0xaf42002c, 0x30a20030, +0x14400006, 0xaf440034, 0x8f420034, 0x8c03023c, +0x43102b, 0x144000c9, 0x0, 0x32c20010, +0x10400028, 0x24070008, 0x8f440160, 0x8f450164, +0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020080, +0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, +0x40f809, 0x24c6001c, 0x14400011, 0x24020001, +0x3c010001, 0x370821, 0xa02240f1, 0x8f820124, +0xafa20010, 0x8f820128, 0x3c040001, 0x24843800, +0xafa20014, 0x8f46002c, 0x8f870120, 0x3c050009, +0xc0029d3, 0x34a51100, 0x10000036, 0x0, +0x8f4202f0, 0x8f43002c, 0x24420001, 0xaf4202f0, +0x8f4202f0, 0x24020001, 0xa34205b2, 0x10000026, +0xaf430038, 0x8f440160, 0x8f450164, 0x8f43002c, +0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010, +0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, +0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, +0x370821, 0xa02240f0, 0x8f820124, 0xafa20010, +0x8f820128, 0x3c040001, 0x248437f4, 0xafa20014, +0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3, +0x34a50900, 0x1000000f, 0x0, 0x8f4202f0, +0x24420001, 0xaf4202f0, 0x8f4202f0, 0x8f42002c, +0xa34005b2, 0xaf420038, 0x3c010001, 0x370821, +0xa02040f1, 0x3c010001, 0x370821, 0xa02040f0, +0xaf400034, 0x8f420304, 0x24420001, 0xaf420304, +0x1000006e, 0x8f420304, 0x10400025, 0x30a27000, +0x8c85001c, 0x8f420028, 0xa22023, 0x4810003, +0x0, 0x8f420040, 0x822021, 0x8f420348, +0x8f430000, 0x441021, 0xaf420348, 0x8f42035c, +0xaf450028, 0x441021, 0x10600007, 0xaf42035c, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x34420008, +0xaf820060, 0x8f420000, 0x10400003, 0x0, +0x1000004a, 0xaf80004c, 0x10000048, 0xaf800048, +0x1040002f, 0x30a21000, 0x1040000c, 0x30a24000, +0x8c83001c, 0x8f420050, 0x622023, 0x4820001, +0x24840200, 0x8f42034c, 0x441021, 0xaf42034c, +0x8f420358, 0x1000001a, 0xaf430050, 0x1040000c, +0x32c28000, 0x8c83001c, 0x8f420070, 0x622023, +0x4820001, 0x24840400, 0x8f420354, 0x441021, +0xaf420354, 0x8f420358, 0x1000000d, 0xaf430070, +0x1040000e, 0x3c020800, 0x8c83001c, 0x8f420060, +0x622023, 0x4820001, 0x24840100, 0x8f420350, +0x441021, 0xaf420350, 0x8f420358, 0xaf430060, +0x441021, 0xaf420358, 0x3c020800, 0x2c21024, +0x5040001a, 0x36940040, 0x10000018, 0x0, +0x30a20100, 0x10400015, 0x0, 0x3c020001, +0x8c423c54, 0x1040000c, 0x0, 0x274301b0, +0x24650400, 0x65102b, 0x10400007, 0x26e40028, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8f4202cc, 0xa34005b6, +0x24420001, 0xaf4202cc, 0x8f4202cc, 0x8fbf0020, +0x3e00008, 0x27bd0028, 0x3e00008, 0x0, +0x27bdffa8, 0xafbf0050, 0xafbe004c, 0xafb50048, +0xafb30044, 0xafb20040, 0xafb1003c, 0xafb00038, +0x8f910108, 0x26220020, 0xaf820108, 0x8e320018, +0xa821, 0x32420024, 0x104001b1, 0xf021, +0x8e26001c, 0x8f42001c, 0x61900, 0x431021, +0x8c50000c, 0x9603000c, 0x962d0016, 0x9453000a, +0x2c6205dd, 0x10400015, 0x2821, 0x32c20040, +0x10400015, 0x24020800, 0x96030014, 0x14620012, +0x3402aaaa, 0x9603000e, 0x14620007, 0x2021, +0x96030010, 0x24020300, 0x14620004, 0x801021, +0x96020012, 0x2c440001, 0x801021, 0x54400006, +0x24050016, 0x10000004, 0x0, 0x24020800, +0x50620001, 0x2405000e, 0x934205b4, 0x14400008, +0x5821, 0x240b0001, 0x32620180, 0xaf4500a8, +0xaf5000a0, 0x10400002, 0xaf4600a4, 0xa34b05b4, +0x10a00085, 0x2054021, 0x91020000, 0x3821, +0x3042000f, 0x25080, 0x32c20002, 0x10400012, +0x10a1821, 0x32620002, 0x10400010, 0x32c20001, +0x1002021, 0x94820000, 0x24840002, 0xe23821, +0x83102b, 0x1440fffb, 0x30e2ffff, 0x71c02, +0x623821, 0x71c02, 0x30e2ffff, 0x623821, +0x71027, 0xa502000a, 0x32c20001, 0x1040006a, +0x32620001, 0x10400068, 0x0, 0x8f4200a8, +0x10400065, 0x0, 0x8f4200a0, 0x8f4300a8, +0x431021, 0x904c0009, 0x318900ff, 0x39230006, +0x3182b, 0x39220011, 0x2102b, 0x621824, +0x1060000c, 0x3c050006, 0x8f4200a4, 0x3c040001, +0x24843810, 0xafa20010, 0x8f4200a0, 0x34a54600, +0x1203821, 0xc0029d3, 0xafa20014, 0x1000004e, +0x0, 0x32c20004, 0x14400013, 0x2821, +0x316200ff, 0x14400004, 0x0, 0x95020002, +0x1000000d, 0x4a2823, 0x9505000c, 0x9502000e, +0x95030010, 0xa22821, 0xa32821, 0x95030012, +0x91040009, 0x95020002, 0xa32821, 0xa42821, +0x4a1023, 0xa22821, 0x2002021, 0x94820000, +0x24840002, 0xe23821, 0x88102b, 0x1440fffb, +0x71c02, 0x30e2ffff, 0x623821, 0x71c02, +0x30e2ffff, 0x623821, 0x1a52821, 0x51c02, +0x30a2ffff, 0x622821, 0x51c02, 0x30a2ffff, +0x622821, 0xa72823, 0x51402, 0xa22821, +0x30a5ffff, 0x50a00001, 0x3405ffff, 0x316200ff, +0x14400008, 0x318300ff, 0x8f4300a0, 0x8f4200a8, +0x624021, 0x91020000, 0x3042000f, 0x25080, +0x318300ff, 0x24020006, 0x14620003, 0x10a1021, +0x10000002, 0x24440010, 0x24440006, 0x316200ff, +0x14400006, 0x0, 0x94820000, 0xa22821, +0x51c02, 0x30a2ffff, 0x622821, 0x934205b4, +0x10400003, 0x32620100, 0x50400003, 0xa4850000, +0x52827, 0xa4850000, 0x9622000e, 0x8f43009c, +0x621821, 0x32a200ff, 0x10400007, 0xaf43009c, +0x3c024000, 0x2021025, 0xafa20020, 0x8f42009c, +0x10000003, 0x5e1025, 0xafb00020, 0x8f42009c, +0xafa20024, 0x32620080, 0x10400010, 0x32620100, +0x8f4200b4, 0x24430001, 0x210c0, 0x571021, +0xaf4300b4, 0x8fa30020, 0x8fa40024, 0x3c010001, +0x220821, 0xac2338e8, 0x3c010001, 0x220821, +0xac2438ec, 0x100000a5, 0xaf40009c, 0x10400064, +0x0, 0x8f4200b4, 0x24430001, 0x210c0, +0x571021, 0xaf4300b4, 0x8fa30020, 0x8fa40024, +0x3c010001, 0x220821, 0xac2338e8, 0x3c010001, +0x220821, 0xac2438ec, 0x8f4200b4, 0x10400051, +0x3821, 0x3c090001, 0x352938e8, 0x3c08001f, +0x3508ffff, 0x240bffff, 0x340affff, 0x710c0, +0x571021, 0x491021, 0x8c430000, 0x8c440004, +0xafa30028, 0xafa4002c, 0x8f8200fc, 0x8fa30028, +0x8fa4002c, 0xac430000, 0xac440004, 0x24420008, +0xaf8200f0, 0x8f42008c, 0x2442ffff, 0xaf42008c, +0x97a2002e, 0x8f440260, 0x8f450264, 0x401821, +0x1021, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaf440260, 0xaf450264, 0x8fa20028, +0x481024, 0x90430000, 0x30630001, 0x1460000b, +0x402021, 0x8f420268, 0x8f43026c, 0x24630001, +0x2c640001, 0x441021, 0xaf420268, 0xaf43026c, +0x8f420268, 0x1000001a, 0x8f43026c, 0x8c820000, +0x144b000e, 0x0, 0x94820004, 0x144a000b, +0x0, 0x8f420278, 0x8f43027c, 0x24630001, +0x2c640001, 0x441021, 0xaf420278, 0xaf43027c, +0x8f420278, 0x1000000a, 0x8f43027c, 0x8f420270, +0x8f430274, 0x24630001, 0x2c640001, 0x441021, +0xaf420270, 0xaf430274, 0x8f420270, 0x8f430274, +0x8f4200b4, 0x24e70001, 0xe2102b, 0x1440ffb8, +0x710c0, 0xa34005b4, 0x1000003f, 0xaf4000b4, +0x8f8200fc, 0x8fa30020, 0x8fa40024, 0xac430000, +0xac440004, 0x24420008, 0xaf8200f0, 0x8f42009c, +0x8f46008c, 0x8f440260, 0x8f450264, 0x401821, +0x1021, 0x24c6ffff, 0xaf46008c, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xaf440260, +0xaf450264, 0x92020000, 0x30420001, 0x1440000c, +0x2402ffff, 0x8f420268, 0x8f43026c, 0x24630001, +0x2c640001, 0x441021, 0xaf420268, 0xaf43026c, +0x8f420268, 0x8f43026c, 0x1000001c, 0xaf40009c, +0x8e030000, 0x1462000f, 0x3402ffff, 0x96030004, +0x1462000c, 0x0, 0x8f420278, 0x8f43027c, +0x24630001, 0x2c640001, 0x441021, 0xaf420278, +0xaf43027c, 0x8f420278, 0x8f43027c, 0x1000000b, +0xaf40009c, 0x8f420270, 0x8f430274, 0x24630001, +0x2c640001, 0x441021, 0xaf420270, 0xaf430274, +0x8f420270, 0x8f430274, 0xaf40009c, 0x8e22001c, +0x8f430040, 0x24420001, 0x2463ffff, 0x431024, +0xaf42002c, 0x32420060, 0x14400008, 0x32c20010, +0x8f420034, 0x24420001, 0xaf420034, 0x8c03023c, +0x43102b, 0x14400111, 0x32c20010, 0x10400018, +0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c, +0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010, +0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, +0x24c6001c, 0x10400041, 0x24020001, 0x8f4202f0, +0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0, +0x24020001, 0xa34205b2, 0x10000076, 0xaf430038, +0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c, +0x8f860120, 0x24020020, 0xafa20010, 0xafa30014, +0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x10400051, 0x24020001, 0x1000005f, 0x0, +0x32420012, 0x1040006f, 0x32420001, 0x9623000e, +0x8f42009c, 0x431021, 0xaf42009c, 0x8e23001c, +0x8f420040, 0x24630001, 0x2442ffff, 0x621824, +0x32420010, 0x14400008, 0xaf43002c, 0x8f420034, +0x24420001, 0xaf420034, 0x8c03023c, 0x43102b, +0x144000d2, 0x0, 0x32c20010, 0x10400028, +0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c, +0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010, +0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, +0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, +0x370821, 0xa02240f1, 0x8f820124, 0xafa20010, +0x8f820128, 0x3c040001, 0x24843800, 0xafa20014, +0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3, +0x34a51100, 0x10000036, 0x0, 0x8f4202f0, +0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0, +0x24020001, 0xa34205b2, 0x10000026, 0xaf430038, +0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c, +0x8f860120, 0x24020020, 0xafa20010, 0xafa30014, +0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x14400011, 0x24020001, 0x3c010001, 0x370821, +0xa02240f0, 0x8f820124, 0xafa20010, 0x8f820128, +0x3c040001, 0x248437f4, 0xafa20014, 0x8f46002c, +0x8f870120, 0x3c050009, 0xc0029d3, 0x34a50900, +0x1000000f, 0x0, 0x8f4202f0, 0x24420001, +0xaf4202f0, 0x8f4202f0, 0x8f42002c, 0xa34005b2, +0xaf420038, 0x3c010001, 0x370821, 0xa02040f1, +0x3c010001, 0x370821, 0xa02040f0, 0xaf400034, +0x8f420304, 0x24420001, 0xaf420304, 0x10000077, +0x8f420304, 0x10400025, 0x32427000, 0x8e25001c, +0x8f420028, 0xa22023, 0x4810003, 0x0, +0x8f420040, 0x822021, 0x8f420348, 0x8f430000, +0x441021, 0xaf420348, 0x8f42035c, 0xaf450028, +0x441021, 0x10600007, 0xaf42035c, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x34420008, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000053, +0xaf80004c, 0x10000051, 0xaf800048, 0x1040002f, +0x32421000, 0x1040000c, 0x32424000, 0x8e23001c, +0x8f420050, 0x622023, 0x4820001, 0x24840200, +0x8f42034c, 0x441021, 0xaf42034c, 0x8f420358, +0x1000001a, 0xaf430050, 0x1040000c, 0x32c28000, +0x8e23001c, 0x8f420070, 0x622023, 0x4820001, +0x24840400, 0x8f420354, 0x441021, 0xaf420354, +0x8f420358, 0x1000000d, 0xaf430070, 0x1040000e, +0x3c020800, 0x8e23001c, 0x8f420060, 0x622023, +0x4820001, 0x24840100, 0x8f420350, 0x441021, +0xaf420350, 0x8f420358, 0xaf430060, 0x441021, +0xaf420358, 0x3c020800, 0x2c21024, 0x50400023, +0x36940040, 0x10000021, 0x0, 0x32420048, +0x10400007, 0x24150001, 0x8e22001c, 0x3c03ffff, +0x43f024, 0x3042ffff, 0x1000fd81, 0xae22001c, +0x32420100, 0x10400015, 0x0, 0x3c020001, +0x8c423c54, 0x1040000c, 0x0, 0x274301b0, +0x24650400, 0x65102b, 0x10400007, 0x26e40028, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8f4202cc, 0xa34005b6, +0x24420001, 0xaf4202cc, 0x8f4202cc, 0x8fbf0050, +0x8fbe004c, 0x8fb50048, 0x8fb30044, 0x8fb20040, +0x8fb1003c, 0x8fb00038, 0x3e00008, 0x27bd0058, +0x3e00008, 0x0, 0x0, 0x8f8600e4, +0x8f8200e0, 0x2403fff8, 0x431024, 0x10c20007, +0x803821, 0x8cc20000, 0x8cc30004, 0xace20000, +0xace30004, 0x10000002, 0x24020001, 0x1021, +0x3e00008, 0x0, 0x3e00008, 0x0, +0x8f8300e4, 0x27623ff8, 0x14620002, 0x24620008, +0x27623000, 0x401821, 0xaf8300e8, 0xaf8300e4, +0x3e00008, 0x0, 0x3e00008, 0x0, +0x8f8400e0, 0x8f8800c4, 0x8f8300e8, 0x2402fff8, +0x823824, 0xe32023, 0x2c821000, 0x50400001, +0x24841000, 0x420c2, 0x801821, 0x8f440248, +0x8f45024c, 0x1021, 0xa32821, 0xa3302b, +0x822021, 0x862021, 0xaf440248, 0xaf45024c, +0x8f8300c8, 0x8f42013c, 0x1032023, 0x82102b, +0x14400004, 0x801821, 0x8f42013c, 0x822021, +0x801821, 0x8f440240, 0x8f450244, 0x1021, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0xaf440240, 0xaf450244, 0xaf8800c8, 0xaf8700e4, +0xaf8700e8, 0x3e00008, 0x0, 0x27bdff30, +0x240a0001, 0xafbf00c8, 0xafbe00c4, 0xafb500c0, +0xafb300bc, 0xafb200b8, 0xafb100b4, 0xafb000b0, +0xa3a00097, 0xafa00044, 0xafaa005c, 0x934205b5, +0xa7a0008e, 0x1040000a, 0xa7a00086, 0x8f4b00c4, +0xafab0064, 0x8f4a00c0, 0xafaa006c, 0x8f4b00cc, +0xafab0074, 0x8f4a00c8, 0x10000125, 0xafaa007c, +0x8f420114, 0x40f809, 0x27a40020, 0x304200ff, +0x1040033b, 0x0, 0x8fab0024, 0x8faa0020, +0x3162ffff, 0x2442fffc, 0xafa2006c, 0x3c020006, +0x2c21024, 0xafab007c, 0x14400015, 0xafaa0064, +0x91420000, 0x30420001, 0x10400011, 0x2402ffff, +0x8d430000, 0x14620004, 0x3402ffff, 0x95430004, +0x1062000b, 0x0, 0xc002343, 0x8fa40064, +0x304200ff, 0x14400006, 0x0, 0x8f420118, +0x40f809, 0x0, 0x1000031d, 0x0, +0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024, +0x3c03ffff, 0x431824, 0x14600003, 0xafa20024, +0x10000040, 0x1821, 0x3c020080, 0x621024, +0x10400007, 0x0, 0x8f42037c, 0x24420001, +0xaf42037c, 0x8f42037c, 0x10000036, 0x24030001, +0x8f420200, 0x24420001, 0xaf420200, 0x8f420200, +0x3c020001, 0x621024, 0x10400006, 0x3c020002, +0x8f4201b4, 0x24420001, 0xaf4201b4, 0x8f4201b4, +0x3c020002, 0x621024, 0x10400006, 0x3c020004, +0x8f42036c, 0x24420001, 0xaf42036c, 0x8f42036c, +0x3c020004, 0x621024, 0x10400006, 0x3c020008, +0x8f420370, 0x24420001, 0xaf420370, 0x8f420370, +0x3c020008, 0x621024, 0x10400006, 0x3c020010, +0x8f420374, 0x24420001, 0xaf420374, 0x8f420374, +0x3c020010, 0x621024, 0x10400006, 0x3c020020, +0x8f4201b0, 0x24420001, 0xaf4201b0, 0x8f4201b0, +0x3c020020, 0x621024, 0x10400006, 0x24030001, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, +0x24030001, 0x8c020260, 0x8fab006c, 0x4b102b, +0x10400014, 0x307000ff, 0x8f4201d8, 0x24420001, +0xaf4201d8, 0x8f4201d8, 0x8faa007c, 0x8f8200e0, +0x354a0100, 0xafaa007c, 0xafa20010, 0x8f8200e4, +0x24100001, 0x3c040001, 0x248438d0, 0xafa20014, +0x8fa60020, 0x8fa70024, 0x3c050007, 0xc0029d3, +0x34a50800, 0x12000010, 0x3c020080, 0x2c21024, +0x1440000e, 0x32c20400, 0x8fab007c, 0x3c020080, +0x34420100, 0x1621024, 0x10400005, 0x0, +0x8f4201fc, 0x24420001, 0xaf4201fc, 0x8f4201fc, +0x100002a0, 0x8fa3006c, 0x32c20400, 0x10400015, +0x34028100, 0x8faa0064, 0x9543000c, 0x14620012, +0x3c020100, 0x240b0200, 0xa7ab008e, 0x9542000e, +0x8d430008, 0x8d440004, 0x8d450000, 0x8faa006c, +0x8fab0064, 0x254afffc, 0xafaa006c, 0xa7a20086, +0xad63000c, 0xad640008, 0xad650004, 0x256b0004, +0xafab0064, 0x3c020100, 0x2c21024, 0x10400004, +0x0, 0x8faa006c, 0x254a0004, 0xafaa006c, +0x8f4200bc, 0x5040000a, 0xafa00074, 0x8fab006c, +0x4b102b, 0x50400006, 0xafa00074, 0x8f4200bc, +0x1621023, 0xafa20074, 0x8f4a00bc, 0xafaa006c, +0x8f420080, 0x8fab006c, 0x4b102b, 0x10400056, +0x32c28000, 0x1040005e, 0x240a0003, 0x32c21000, +0x1040005b, 0xafaa005c, 0x10000058, 0x240b0004, +0x8f420340, 0x2403ffbf, 0x283a024, 0x24420001, +0xaf420340, 0x1000023f, 0x8f420340, 0x2c2b025, +0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001, +0x24843900, 0x26620001, 0xafa20014, 0xafa30010, +0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3, +0x34a52250, 0x1000022f, 0x0, 0x2c2b025, +0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001, +0x24843900, 0x24020002, 0xafa20014, 0xafa30010, +0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3, +0x34a52450, 0x1000021f, 0x0, 0x8ea20000, +0x8ea30004, 0x3c040001, 0x24843918, 0xafb00010, +0xafbe0014, 0x8ea70018, 0x34a52800, 0xc0029d3, +0x603021, 0x10000213, 0x0, 0xa6b1000a, +0x8f820124, 0x3c040001, 0x24843920, 0xafbe0014, +0xafa20010, 0x8f460044, 0x8f870120, 0x3c050007, +0xc0029d3, 0x34a53000, 0x10000206, 0x0, +0xa6b1000a, 0xa6b2000e, 0x8f820124, 0x3c040001, +0x2484392c, 0xafbe0014, 0xafa20010, 0x8f460044, +0x8f870120, 0x3c050007, 0xc0029d3, 0x34a53200, +0x100001f8, 0x0, 0x8f420084, 0x8faa006c, +0x4a102b, 0x14400007, 0x3c020001, 0x2c21024, +0x10400004, 0x0, 0x240b0002, 0xafab005c, +0x8faa006c, 0x1140020b, 0x27ab0020, 0xafab00a4, +0x3c0a001f, 0x354affff, 0xafaa009c, 0x8fab005c, +0x240a0001, 0x156a0021, 0x24020002, 0x8f430054, +0x8f420050, 0x1062000b, 0x274b0054, 0x8f5e0054, +0x3403ecc0, 0xafab004c, 0x27c20001, 0x304201ff, +0xafa20054, 0x1e1140, 0x431021, 0x1000006b, +0x2e2a821, 0x8f420044, 0x8faa006c, 0x3c040001, +0x248438dc, 0xafaa0014, 0xafa20010, 0x8f460054, +0x8f470050, 0x3c050007, 0xc0029d3, 0x34a51300, +0x8f430340, 0x2402ffbf, 0x282a024, 0x24630001, +0xaf430340, 0x100001c3, 0x8f420340, 0x1562001d, +0x0, 0x8f430074, 0x8f420070, 0x1062000a, +0x274a0074, 0x8f5e0074, 0xafaa004c, 0x27c20001, +0x304203ff, 0xafa20054, 0x1e1140, 0x24426cc0, +0x1000004a, 0x2e2a821, 0x8f420044, 0x8fab006c, +0x3c040001, 0x248438e8, 0x3c050007, 0xafab0014, +0xafa20010, 0x8f460074, 0x8f470070, 0x34a51500, +0x240a0001, 0xc0029d3, 0xafaa005c, 0x1000ffc3, +0x0, 0x8f430064, 0x8f420060, 0x1062001a, +0x274b0064, 0x8f5e0064, 0x8faa005c, 0xafab004c, +0x27c20001, 0x304200ff, 0xafa20054, 0x24020004, +0x1542000e, 0x1e1140, 0x1e1180, 0x24420cc0, +0x2e21021, 0xafa20044, 0x9442002a, 0x8fab0044, +0x8faa006c, 0x4a102b, 0x10400024, 0x25750020, +0x240b0001, 0x10000021, 0xa3ab0097, 0x24424cc0, +0x1000001e, 0x2e2a821, 0x8f420044, 0x8faa006c, +0x3c040001, 0x248438f4, 0xafaa0014, 0xafa20010, +0x8f460064, 0x8f470060, 0x3c050007, 0xc0029d3, +0x34a51800, 0x3c020008, 0x2c21024, 0x1440ff34, +0x0, 0x8f420360, 0x240b0001, 0xafab005c, +0x24420001, 0xaf420360, 0x1000ff90, 0x8f420360, +0x27a30036, 0x131040, 0x621821, 0x94620000, +0x441021, 0x10000020, 0xa4620000, 0x8faa0064, +0xaeaa0018, 0x93a20097, 0x10400072, 0x9821, +0x8fab0044, 0x8fa4006c, 0x8fa300a4, 0x25620020, +0xafa20028, 0x25620008, 0xafa20030, 0x25620010, +0xafab002c, 0xafa20034, 0x9562002a, 0xa7a20038, +0x95620018, 0xa7a2003a, 0x9562001a, 0xa7a2003c, +0x9562001c, 0xa7a2003e, 0x94620018, 0x24630002, +0x822023, 0x1880ffde, 0x26730001, 0x2e620004, +0x1440fff9, 0x0, 0x8f4200fc, 0x26650001, +0xa2102a, 0x1440002b, 0x24030001, 0x8f83012c, +0x10600023, 0x0, 0x8f820124, 0x431023, +0x22143, 0x58800001, 0x24840040, 0x8f820128, +0x431023, 0x21943, 0x58600001, 0x24630040, +0x64102a, 0x54400001, 0x602021, 0xaf4400fc, +0x8f4200fc, 0xa2102a, 0x10400011, 0x24030001, +0x10000015, 0x306200ff, 0x8faa0064, 0x96070018, +0xafaa0010, 0x8e220008, 0x3c040001, 0x2484390c, +0x8c430004, 0x8c420000, 0x34a52400, 0x2403021, +0xc0029d3, 0xafa30014, 0x1000002b, 0x0, +0x8f420324, 0x1821, 0x24420001, 0xaf420324, +0x8f420324, 0x306200ff, 0x5040fedc, 0x3c020800, +0x12600021, 0x9021, 0x8fb100a4, 0x2208021, +0x8e220008, 0x96070018, 0x8fa60064, 0x8c440000, +0x8c450004, 0x240b0001, 0xafab0010, 0xafbe0014, +0x8f420008, 0xafa20018, 0x8f42010c, 0x40f809, +0x0, 0x1040ffd8, 0x3c050007, 0x96020018, +0x8faa0064, 0x8fab009c, 0x1425021, 0x16a102b, +0x10400004, 0xafaa0064, 0x8f42013c, 0x1425023, +0xafaa0064, 0x26100002, 0x26520001, 0x253102b, +0x1440ffe3, 0x26310004, 0x8fb0006c, 0x10000036, +0x97b10038, 0x8f4200fc, 0x24050002, 0xa2102a, +0x1440001b, 0x24030001, 0x8f83012c, 0x10600013, +0x0, 0x8f820124, 0x431023, 0x22143, +0x58800001, 0x24840040, 0x8f820128, 0x431023, +0x21943, 0x58600001, 0x24630040, 0x64102a, +0x54400001, 0x602021, 0xaf4400fc, 0x8f4200fc, +0xa2102a, 0x14400006, 0x24030001, 0x8f420324, +0x1821, 0x24420001, 0xaf420324, 0x8f420324, +0x306200ff, 0x1040fea5, 0x3c020800, 0x96b1000a, +0x8fb0006c, 0x3223ffff, 0x70102b, 0x54400001, +0x608021, 0x8ea40000, 0x8ea50004, 0x240a0001, +0xafaa0010, 0xafbe0014, 0x8f420008, 0x8fa60064, +0xafa20018, 0x8f42010c, 0x40f809, 0x2003821, +0x1040fea2, 0x3c050007, 0x96a3000e, 0x97ab008e, +0x11600007, 0x609021, 0x934205b5, 0x14400004, +0x0, 0x97aa0086, 0x6b1825, 0xa6aa0016, +0x8fab007c, 0x3c02ffff, 0x1621024, 0x10400003, +0xb1402, 0x34630400, 0xa6a20014, 0x8faa006c, +0x560a0072, 0xa6a3000e, 0x34620004, 0xa6a2000e, +0x8fab0074, 0x14b1021, 0xa6a2000a, 0x8f430044, +0x8f440190, 0x8f450194, 0x34028000, 0xafa20010, +0x8f420044, 0x2a03021, 0x24070020, 0xafa20014, +0x8f42000c, 0x31940, 0x604821, 0xafa20018, +0x8f42010c, 0x4021, 0xa92821, 0xa9182b, +0x882021, 0x40f809, 0x832021, 0x5040fe7f, +0xa6b2000e, 0x8f420358, 0xafa0006c, 0xa34005b5, +0x2442ffff, 0xaf420358, 0x8faa005c, 0x240b0001, +0x8f420358, 0x154b0006, 0x24020002, 0x8f42034c, +0x2442ffff, 0xaf42034c, 0x1000000c, 0x8f42034c, +0x15420006, 0x0, 0x8f420354, 0x2442ffff, +0xaf420354, 0x10000005, 0x8f420354, 0x8f420350, +0x2442ffff, 0xaf420350, 0x8f420350, 0x8faa0054, +0x8fab004c, 0xad6a0000, 0x8f420044, 0x8f440088, +0x8f430078, 0x24420001, 0x441024, 0x24630001, +0xaf420044, 0xaf430078, 0x8c020240, 0x62182b, +0x14600065, 0x24070008, 0x8f440158, 0x8f45015c, +0x8f430044, 0x8f48000c, 0x8f860120, 0x24020040, +0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, +0x40f809, 0x24c6001c, 0x14400011, 0x240b0001, +0x3c010001, 0x370821, 0xa02b40f2, 0x8f820124, +0xafa20010, 0x8f820128, 0x3c040001, 0x248438c8, +0xafa20014, 0x8f460044, 0x8f870120, 0x3c050009, +0xc0029d3, 0x34a51300, 0x1000000b, 0x0, +0x8f4202f4, 0x24420001, 0xaf4202f4, 0x8f4202f4, +0x8f420044, 0xaf42007c, 0x3c010001, 0x370821, +0xa02040f2, 0xaf400078, 0x8f420308, 0x24420001, +0xaf420308, 0x10000038, 0x8f420308, 0xa6b0000a, +0x8f430044, 0x8f440190, 0x8f450194, 0x34028000, +0xafa20010, 0x8f420044, 0x2a03021, 0x24070020, +0xafa20014, 0x8f42000c, 0x31940, 0x604821, +0xafa20018, 0x8f42010c, 0x4021, 0xa92821, +0xa9182b, 0x882021, 0x40f809, 0x832021, +0x1040fe1f, 0x240a0001, 0xa34a05b5, 0x8fab006c, +0x8faa0064, 0x1705823, 0xafab006c, 0x8fab009c, +0x1505021, 0x16a102b, 0x10400004, 0xafaa0064, +0x8f42013c, 0x1425023, 0xafaa0064, 0x8f420358, +0x2442ffff, 0xaf420358, 0x8f420358, 0x8f42034c, +0x2442ffff, 0xaf42034c, 0x8fab0054, 0x8faa004c, +0x8f42034c, 0xad4b0000, 0x8f420044, 0x8f440088, +0x8f430078, 0x24420001, 0x441024, 0x24630001, +0xaf420044, 0xaf430078, 0x8faa006c, 0x1540fe1b, +0x0, 0x8fab006c, 0x1160001e, 0x0, +0x934205b5, 0x10400009, 0x0, 0x8faa0064, +0xaf4a00c4, 0xaf4b00c0, 0x8fab007c, 0xaf4b00c8, +0x8faa0074, 0x1000000e, 0xaf4a00cc, 0x97ab008e, +0x1160000b, 0x34038100, 0x8fa20020, 0x8c46000c, +0xa443000c, 0x97aa0086, 0x8c440004, 0x8c450008, +0xa44a000e, 0xac440000, 0xac450004, 0xac460008, +0x8f42033c, 0x24420001, 0xaf42033c, 0x10000010, +0x8f42033c, 0x8fab007c, 0x3164ffff, 0x2484fffc, +0x801821, 0x8f440240, 0x8f450244, 0x8f460118, +0x1021, 0xa32821, 0xa3382b, 0x822021, +0x872021, 0xaf440240, 0xc0f809, 0xaf450244, +0x8fbf00c8, 0x8fbe00c4, 0x8fb500c0, 0x8fb300bc, +0x8fb200b8, 0x8fb100b4, 0x8fb000b0, 0x3e00008, +0x27bd00d0, 0x3e00008, 0x0, 0x27bdff38, +0x240b0001, 0xafbf00c0, 0xafbe00bc, 0xafb500b8, +0xafb300b4, 0xafb200b0, 0xafb100ac, 0xafb000a8, +0xa3a00087, 0xafa00044, 0xafab005c, 0x934205b5, +0xa7a00076, 0x10400007, 0xa7a0007e, 0x8f4c00c0, +0xafac0064, 0x8f4b00c8, 0x8f5e00c4, 0x10000129, +0xafab006c, 0x8f420114, 0x40f809, 0x27a40020, +0x304200ff, 0x1040029c, 0x0, 0x8fac0024, +0x8fbe0020, 0x3182ffff, 0x2442fffc, 0xafa20064, +0x3c020006, 0x2c21024, 0x14400015, 0xafac006c, +0x93c20000, 0x30420001, 0x10400011, 0x2402ffff, +0x8fc30000, 0x14620004, 0x3402ffff, 0x97c30004, +0x1062000b, 0x0, 0xc002343, 0x3c02021, +0x304200ff, 0x14400006, 0x0, 0x8f420118, +0x40f809, 0x0, 0x1000027f, 0x0, +0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024, +0x3c03ffff, 0x431824, 0x14600003, 0xafa20024, +0x10000040, 0x8021, 0x3c020080, 0x621024, +0x10400007, 0x0, 0x8f42037c, 0x24420001, +0xaf42037c, 0x8f42037c, 0x10000036, 0x24100001, +0x8f420200, 0x24420001, 0xaf420200, 0x8f420200, +0x3c020001, 0x621024, 0x10400006, 0x3c020002, +0x8f4201b4, 0x24420001, 0xaf4201b4, 0x8f4201b4, +0x3c020002, 0x621024, 0x10400006, 0x3c020004, +0x8f42036c, 0x24420001, 0xaf42036c, 0x8f42036c, +0x3c020004, 0x621024, 0x10400006, 0x3c020008, +0x8f420370, 0x24420001, 0xaf420370, 0x8f420370, +0x3c020008, 0x621024, 0x10400006, 0x3c020010, +0x8f420374, 0x24420001, 0xaf420374, 0x8f420374, +0x3c020010, 0x621024, 0x10400006, 0x3c020020, +0x8f4201b0, 0x24420001, 0xaf4201b0, 0x8f4201b0, +0x3c020020, 0x621024, 0x10400006, 0x24100001, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, +0x24100001, 0x8c020260, 0x8fab0064, 0x4b102b, +0x10400015, 0x320200ff, 0x8f4201d8, 0x24420001, +0xaf4201d8, 0x8f4201d8, 0x8fac006c, 0x8f8200e0, +0x358c0100, 0xafac006c, 0xafa20010, 0x8f8200e4, +0x24100001, 0x3c040001, 0x248438d0, 0xafa20014, +0x8fa60020, 0x8fa70024, 0x3c050007, 0xc0029d3, +0x34a53600, 0x320200ff, 0x10400010, 0x3c020080, +0x2c21024, 0x1440000e, 0x32c20400, 0x8fab006c, +0x3c020080, 0x34420100, 0x1621024, 0x10400005, +0x0, 0x8f4201fc, 0x24420001, 0xaf4201fc, +0x8f4201fc, 0x10000201, 0x8fa30064, 0x32c20400, +0x10400012, 0x34028100, 0x97c3000c, 0x1462000f, +0x0, 0x240c0200, 0xa7ac0076, 0x97c2000e, +0x8fc30008, 0x8fc40004, 0x8fab0064, 0x8fc50000, +0x256bfffc, 0xafab0064, 0xa7a2007e, 0xafc3000c, +0xafc40008, 0xafc50004, 0x27de0004, 0x8fa70064, +0x320200ff, 0x14400031, 0x3c020100, 0x97c3000c, +0x2c6205dd, 0x10400015, 0x2821, 0x32c20800, +0x10400015, 0x24020800, 0x97c30014, 0x14620012, +0x3402aaaa, 0x97c3000e, 0x14620007, 0x2021, +0x97c30010, 0x24020300, 0x14620004, 0x801021, +0x97c20012, 0x2c440001, 0x801021, 0x54400006, +0x24050016, 0x10000004, 0x0, 0x24020800, +0x50620001, 0x2405000e, 0x10a00013, 0x3c52021, +0x24830009, 0x3c02001f, 0x3442ffff, 0x43102b, +0x10400003, 0x0, 0x8f42013c, 0x621823, +0x90620000, 0x38430006, 0x2c630001, 0x38420011, +0x2c420001, 0x621825, 0x10600004, 0x3c020100, +0x94820002, 0x453821, 0x3c020100, 0x2c21024, +0x5040000e, 0xafa70064, 0x8fac0064, 0x10ec0008, +0x3c050007, 0x3c040001, 0x24843938, 0x8fa60064, +0x34a54000, 0xafa00010, 0xc0029d3, 0xafa00014, +0x8fab0064, 0x256b0004, 0xafab0064, 0x8f420080, +0x8fac0064, 0x4c102b, 0x1040002c, 0x32c28000, +0x10400034, 0x240b0003, 0x32c21000, 0x10400031, +0xafab005c, 0x1000002e, 0x240c0004, 0x8f420340, +0x2403ffbf, 0x283a024, 0x24420001, 0xaf420340, +0x10000175, 0x8f420340, 0x3c020800, 0x2c2b025, +0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001, +0x24843900, 0x26620001, 0xafa20014, 0xafa30010, +0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3, +0x34a55300, 0x10000164, 0x0, 0x8ea20000, +0x8ea30004, 0x3c040001, 0x24843918, 0xafb00010, +0xafb20014, 0x8ea70018, 0x34a55900, 0xc0029d3, +0x603021, 0x10000158, 0x0, 0x8f420084, +0x8fab0064, 0x4b102b, 0x14400007, 0x3c020001, +0x2c21024, 0x10400004, 0x0, 0x240c0002, +0xafac005c, 0x8fab0064, 0x11600168, 0x27ac0020, +0xafac008c, 0x8fab005c, 0x240c0001, 0x556c0021, +0x240c0002, 0x8f430054, 0x8f420050, 0x1062000b, +0x274b0054, 0x8f520054, 0x3403ecc0, 0xafab004c, +0x26420001, 0x304201ff, 0xafa20054, 0x121140, +0x431021, 0x1000006b, 0x2e2a821, 0x8f420044, +0x8fac0064, 0x3c040001, 0x248438dc, 0xafac0014, +0xafa20010, 0x8f460054, 0x8f470050, 0x3c050007, +0xc0029d3, 0x34a54300, 0x8f430340, 0x2402ffbf, +0x282a024, 0x24630001, 0xaf430340, 0x10000126, +0x8f420340, 0x156c001d, 0x0, 0x8f430074, +0x8f420070, 0x1062000a, 0x274b0074, 0x8f520074, +0xafab004c, 0x26420001, 0x304203ff, 0xafa20054, +0x121140, 0x24426cc0, 0x1000004a, 0x2e2a821, +0x8f420044, 0x8fac0064, 0x3c040001, 0x248438e8, +0x3c050007, 0xafac0014, 0xafa20010, 0x8f460074, +0x8f470070, 0x34a54500, 0x240b0001, 0xc0029d3, +0xafab005c, 0x1000ffc3, 0x0, 0x8f430064, +0x8f420060, 0x1062001a, 0x274c0064, 0x8f520064, +0x8fab005c, 0xafac004c, 0x26420001, 0x304200ff, +0xafa20054, 0x24020004, 0x1562000e, 0x121140, +0x121180, 0x24420cc0, 0x2e21021, 0xafa20044, +0x9442002a, 0x8fac0044, 0x8fab0064, 0x4b102b, +0x10400024, 0x25950020, 0x240c0001, 0x10000021, +0xa3ac0087, 0x24424cc0, 0x1000001e, 0x2e2a821, +0x8f420044, 0x8fab0064, 0x3c040001, 0x248438f4, +0xafab0014, 0xafa20010, 0x8f460064, 0x8f470060, +0x3c050007, 0xc0029d3, 0x34a54800, 0x3c020008, +0x2c21024, 0x1440ff61, 0x0, 0x8f420360, +0x240c0001, 0xafac005c, 0x24420001, 0xaf420360, +0x1000ff90, 0x8f420360, 0x27a30036, 0x131040, +0x621821, 0x94620000, 0x441021, 0x1000001f, +0xa4620000, 0xaebe0018, 0x93a20087, 0x10400086, +0x9821, 0x8fab0044, 0x8fa40064, 0x8fa3008c, +0x25620020, 0xafa20028, 0x25620008, 0xafa20030, +0x25620010, 0xafab002c, 0xafa20034, 0x9562002a, +0xa7a20038, 0x95620018, 0xa7a2003a, 0x9562001a, +0xa7a2003c, 0x9562001c, 0xa7a2003e, 0x94620018, +0x24630002, 0x822023, 0x1880ffdf, 0x26730001, +0x2e620004, 0x1440fff9, 0x0, 0x8f4200fc, +0x262102a, 0x14400030, 0x24030001, 0x8f83012c, +0x10600028, 0x0, 0x8f820124, 0x431023, +0x22143, 0x58800001, 0x24840040, 0x8f820128, +0x431023, 0x21943, 0x58600001, 0x24630040, +0x64102a, 0x54400001, 0x602021, 0xaf4400fc, +0x8f4200fc, 0x262102a, 0x10400016, 0x24030001, +0x1000001a, 0x306200ff, 0x8fac008c, 0x111040, +0x4c1021, 0x94470018, 0x111080, 0x4c1021, +0xafbe0010, 0x8c420008, 0x3c040001, 0x2484390c, +0x3c050007, 0x8c430004, 0x8c420000, 0x34a55500, +0x2203021, 0xc0029d3, 0xafa30014, 0x1000003b, +0x0, 0x8f420324, 0x1821, 0x24420001, +0xaf420324, 0x8f420324, 0x306200ff, 0x1040ff06, +0x8821, 0x8f430008, 0x2402fbff, 0x621824, +0x605021, 0x1260002d, 0xaf430008, 0x2669ffff, +0x8fb0008c, 0x3c0b4000, 0x24b4025, 0x2009021, +0x8e420008, 0x96070018, 0x8c440000, 0x8c450004, +0x56290004, 0x240b0001, 0x240c0002, 0x10000002, +0xafac0010, 0xafab0010, 0x16200004, 0xafa80014, +0x8f420008, 0x10000002, 0xafa20018, 0xafaa0018, +0x8f42010c, 0x3c03021, 0xafa80098, 0xafa9009c, +0x40f809, 0xafaa00a0, 0x8fa80098, 0x8fa9009c, +0x8faa00a0, 0x1040ffc0, 0x3c02001f, 0x96030018, +0x3442ffff, 0x3c3f021, 0x5e102b, 0x10400003, +0x26100002, 0x8f42013c, 0x3c2f023, 0x26310001, +0x233102b, 0x1440ffda, 0x26520004, 0x8fb00064, +0x1000001a, 0x0, 0x96a3000a, 0x8fb00064, +0x70102b, 0x54400001, 0x608021, 0x8ea40000, +0x8ea50004, 0x8fab005c, 0x240c0002, 0xafac0010, +0x934305b5, 0xb1700, 0x10600003, 0x2423025, +0x3c020800, 0xc23025, 0xafa60014, 0x8f420008, +0xafa20018, 0x8f42010c, 0x3c03021, 0x40f809, +0x2003821, 0x1040fec9, 0x3c050007, 0x97ac0076, +0x11800007, 0x96a3000e, 0x934205b5, 0x14400004, +0x0, 0x97ab007e, 0x6c1825, 0xa6ab0016, +0x8fac006c, 0x3c02ffff, 0x1821024, 0x10400003, +0xc1402, 0x34630400, 0xa6a20014, 0xa6b0000a, +0x8fab0064, 0x560b0006, 0x3d0f021, 0x34620004, +0xafa00064, 0xa6a2000e, 0x1000000d, 0xa34005b5, +0x8fac0064, 0x3c02001f, 0x3442ffff, 0x5e102b, +0x1906023, 0xafac0064, 0xa6a3000e, 0x240b0001, +0x10400003, 0xa34b05b5, 0x8f42013c, 0x3c2f023, +0x8fab0054, 0x8fac004c, 0xad8b0000, 0x8fac0064, +0x1580feb8, 0x0, 0x8fab0064, 0x1160001b, +0x0, 0x934205b5, 0x10400006, 0x0, +0xaf5e00c4, 0xaf4b00c0, 0x8fac006c, 0x1000000e, +0xaf4c00c8, 0x97ab0076, 0x1160000b, 0x34038100, +0x8fa20020, 0x8c46000c, 0xa443000c, 0x97ac007e, +0x8c440004, 0x8c450008, 0xa44c000e, 0xac440000, +0xac450004, 0xac460008, 0x8f42033c, 0x24420001, +0xaf42033c, 0x10000010, 0x8f42033c, 0x8fab006c, +0x3164ffff, 0x2484fffc, 0x801821, 0x8f440240, +0x8f450244, 0x8f460118, 0x1021, 0xa32821, +0xa3382b, 0x822021, 0x872021, 0xaf440240, +0xc0f809, 0xaf450244, 0x8fbf00c0, 0x8fbe00bc, +0x8fb500b8, 0x8fb300b4, 0x8fb200b0, 0x8fb100ac, +0x8fb000a8, 0x3e00008, 0x27bd00c8, 0x3e00008, +0x0, 0x27bdffd8, 0xafbf0024, 0xafb00020, +0x8f43004c, 0x8f420048, 0x10620034, 0x0, +0x8f430048, 0x8f42004c, 0x622023, 0x4820001, +0x24840200, 0x8f430054, 0x8f42004c, 0x43102b, +0x14400004, 0x24020200, 0x8f43004c, 0x10000005, +0x431023, 0x8f420054, 0x8f43004c, 0x431023, +0x2442ffff, 0x405021, 0x8a102a, 0x54400001, +0x805021, 0x8f49004c, 0x8f48004c, 0x8f440178, +0x8f45017c, 0x8f46004c, 0x24071000, 0xafa70010, +0x84140, 0x1001821, 0x12a4821, 0x313001ff, +0xafb00014, 0x8f470014, 0x1021, 0x63140, +0xafa70018, 0xa32821, 0xa3382b, 0x822021, +0x872021, 0x3402ecc0, 0xc23021, 0x8f420108, +0x2e63021, 0x40f809, 0xa3940, 0x54400001, +0xaf50004c, 0x8f43004c, 0x8f420048, 0x14620018, +0x0, 0x8f420000, 0x10400007, 0x0, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x2403fdff, +0x431024, 0xaf820060, 0x8f420000, 0x10400003, +0x0, 0x10000002, 0xaf80004c, 0xaf800048, +0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028, +0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, +0xafb00020, 0x8f43005c, 0x8f420058, 0x10620049, +0x0, 0x8f430058, 0x8f42005c, 0x622023, +0x4820001, 0x24840100, 0x8f430064, 0x8f42005c, +0x43102b, 0x14400004, 0x24020100, 0x8f43005c, +0x10000005, 0x431023, 0x8f420064, 0x8f43005c, +0x431023, 0x2442ffff, 0x403821, 0x87102a, +0x54400001, 0x803821, 0x8f42005c, 0x471021, +0x305000ff, 0x32c21000, 0x10400015, 0x24082000, +0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c, +0x73980, 0xafa80010, 0xafb00014, 0x8f480014, +0x94980, 0x1201821, 0x1021, 0xa32821, +0xa3482b, 0x822021, 0x892021, 0x63180, +0xafa80018, 0x8f420108, 0x10000014, 0x24c60cc0, +0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c, +0x73940, 0xafa80010, 0xafb00014, 0x8f480014, +0x94940, 0x1201821, 0x1021, 0xa32821, +0xa3482b, 0x822021, 0x892021, 0x63140, +0xafa80018, 0x8f420108, 0x24c64cc0, 0x40f809, +0x2e63021, 0x54400001, 0xaf50005c, 0x8f43005c, +0x8f420058, 0x14620018, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x2403feff, 0x431024, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000002, +0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, +0x3e00008, 0x27bd0028, 0x3e00008, 0x0, +0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f43006c, +0x8f420068, 0x10620033, 0x0, 0x8f430068, +0x8f42006c, 0x622023, 0x4820001, 0x24840400, +0x8f430074, 0x8f42006c, 0x43102b, 0x14400004, +0x24020400, 0x8f43006c, 0x10000005, 0x431023, +0x8f420074, 0x8f43006c, 0x431023, 0x2442ffff, +0x405021, 0x8a102a, 0x54400001, 0x805021, +0x8f49006c, 0x8f48006c, 0x8f440188, 0x8f45018c, +0x8f46006c, 0x24074000, 0xafa70010, 0x84140, +0x1001821, 0x12a4821, 0x313003ff, 0xafb00014, +0x8f470014, 0x1021, 0x63140, 0x24c66cc0, +0xafa70018, 0xa32821, 0xa3382b, 0x822021, +0x872021, 0x8f420108, 0x2e63021, 0x40f809, +0xa3940, 0x54400001, 0xaf50006c, 0x8f43006c, +0x8f420068, 0x14620018, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x2403f7ff, 0x431024, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000002, +0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, +0x3e00008, 0x27bd0028, 0x3e00008, 0x0, +0x8f4200fc, 0x3c030001, 0x8f4400f8, 0x346330c8, +0x24420001, 0xaf4200fc, 0x8f850128, 0x2e31021, +0x54820004, 0x24820008, 0x3c020001, 0x34422ec8, +0x2e21021, 0x401821, 0xaf4300f8, 0xac600000, +0x8f4200f4, 0x14620004, 0x3c020001, 0x24a20020, +0x1000000f, 0xaf820128, 0x8f4300f8, 0x344230c8, +0x2e21021, 0x54620004, 0x24620008, 0x3c020001, +0x34422ec8, 0x2e21021, 0x401821, 0x8c620004, +0x21140, 0xa21021, 0xaf820128, 0xac600000, +0x8ca30018, 0x30620070, 0x1040002d, 0x30620020, +0x10400004, 0x3c020010, 0x2c21024, 0x1040000d, +0x0, 0x30620040, 0x10400004, 0x3c020020, +0x2c21024, 0x10400007, 0x0, 0x30620010, +0x1040001f, 0x3c020040, 0x2c21024, 0x1440001c, +0x0, 0x8f820040, 0x30420001, 0x14400008, +0x2021, 0x8c030104, 0x24020001, 0x50620005, +0x24040001, 0x8c020264, 0x10400003, 0x801021, +0x24040001, 0x801021, 0x10400006, 0x0, +0x8f4202fc, 0x24420001, 0xaf4202fc, 0x10000008, +0x8f4202fc, 0x8f820044, 0x34420004, 0xaf820044, +0x8f4202f8, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x3e00008, 0x0, 0x3e00008, 0x0, +0x27bdffa0, 0xafbf0058, 0xafbe0054, 0xafb50050, +0xafb3004c, 0xafb20048, 0xafb10044, 0xafb00040, +0x8f4200fc, 0x24420001, 0xaf4200fc, 0x8f880128, +0x25020020, 0xaf820128, 0x8d030018, 0x30620070, +0x1040002e, 0x30620020, 0x10400004, 0x3c020010, +0x2c21024, 0x1040000d, 0x0, 0x30620040, +0x10400004, 0x3c020020, 0x2c21024, 0x10400007, +0x0, 0x30620010, 0x10400193, 0x3c020040, +0x2c21024, 0x14400190, 0x0, 0x8f820040, +0x30420001, 0x14400008, 0x2021, 0x8c030104, +0x24020001, 0x50620005, 0x24040001, 0x8c020264, +0x10400003, 0x801021, 0x24040001, 0x801021, +0x10400006, 0x0, 0x8f4202fc, 0x24420001, +0xaf4202fc, 0x1000017c, 0x8f4202fc, 0x8f820044, +0x34420004, 0xaf820044, 0x8f4202f8, 0x24420001, +0xaf4202f8, 0x10000174, 0x8f4202f8, 0x30620002, +0x10400135, 0x3c020800, 0x8d0a001c, 0x1422024, +0xafaa0024, 0xa5702, 0xafaa0034, 0x8faa0024, +0x314affff, 0xafaa0024, 0x950a0016, 0xafaa002c, +0x8faa0034, 0x24020001, 0x15420007, 0x24020002, +0x8faa0024, 0xa1140, 0x3403ecc0, 0x431021, +0x10000014, 0x2e2a821, 0x15420006, 0x24020003, +0x8faa0024, 0xa1140, 0x24426cc0, 0x1000000d, +0x2e2a821, 0x8faa0034, 0x15420006, 0x0, +0x8faa0024, 0xa1140, 0x24424cc0, 0x10000005, +0x2e2a821, 0x8faa0024, 0xa1180, 0x571021, +0x24550ce0, 0x96a2000e, 0x305efffc, 0x30420400, +0x144000c5, 0x8821, 0x10800004, 0x24091000, +0x97b1002e, 0x100000c1, 0x0, 0x8eb30018, +0x9663000c, 0x2c6205dd, 0x10400015, 0x2021, +0x32c20800, 0x10400015, 0x24020800, 0x96630014, +0x14620012, 0x3402aaaa, 0x9663000e, 0x14620007, +0x2821, 0x96630010, 0x24020300, 0x14620004, +0xa01021, 0x96620012, 0x2c450001, 0xa01021, +0x54400006, 0x24040016, 0x10000004, 0x0, +0x24020800, 0x50620001, 0x2404000e, 0x108000a2, +0x2649021, 0x92420000, 0x3042000f, 0x28080, +0x32c20100, 0x1040001e, 0x2501821, 0x3c020020, +0x43102b, 0x1440000e, 0x2402021, 0x2821, +0x94820000, 0x24840002, 0xa22821, 0x83102b, +0x1440fffb, 0x30a2ffff, 0x51c02, 0x622821, +0x51c02, 0x30a2ffff, 0x10000009, 0x622821, +0x8f47013c, 0x8f420110, 0x102842, 0x3c060020, +0x40f809, 0xafa80038, 0x3045ffff, 0x8fa80038, +0x50a00001, 0x3405ffff, 0x10000002, 0x37de0002, +0x2821, 0x32c20080, 0x1040007b, 0xa6a50010, +0x26430009, 0x3c02001f, 0x3442ffff, 0x43102b, +0x10400003, 0x0, 0x8f42013c, 0x621823, +0x90660000, 0x30c200ff, 0x38430006, 0x2c630001, +0x38420011, 0x2c420001, 0x621825, 0x1060006b, +0x24091000, 0x8821, 0x2602021, 0x94820000, +0x24840002, 0x2228821, 0x92102b, 0x1440fffb, +0x111c02, 0x3222ffff, 0x628821, 0x111c02, +0x3222ffff, 0x628821, 0x32c20200, 0x10400003, +0x26440006, 0x1000003e, 0x8021, 0x3c05001f, +0x34a5ffff, 0xa4102b, 0x10400003, 0x0, +0x8f42013c, 0x822023, 0x94820000, 0x30421fff, +0x10400004, 0x2644000c, 0x96420002, 0x10000030, +0x508023, 0x96420002, 0x26430014, 0x508023, +0x3c020020, 0x43102b, 0x1440000a, 0xd08021, +0x9642000c, 0x2028021, 0x9642000e, 0x96430010, +0x96440012, 0x2028021, 0x2038021, 0x10000020, +0x2048021, 0xa4102b, 0x10400003, 0x0, +0x8f42013c, 0x822023, 0x94820000, 0x24840002, +0x2028021, 0xa4102b, 0x10400003, 0x0, +0x8f42013c, 0x822023, 0x94820000, 0x24840002, +0x2028021, 0xa4102b, 0x10400003, 0x0, +0x8f42013c, 0x822023, 0x94820000, 0x24840002, +0x2028021, 0xa4102b, 0x10400003, 0x0, +0x8f42013c, 0x822023, 0x94820000, 0x2028021, +0x3c020100, 0x2c21024, 0x1040000c, 0x33c20004, +0x1040000a, 0x0, 0x9504000e, 0x2642021, +0xc003cc8, 0x2484fffc, 0x3042ffff, 0x2228821, +0x111c02, 0x3222ffff, 0x628821, 0x8faa002c, +0x1518823, 0x111402, 0x2228821, 0x2308821, +0x111402, 0x2228821, 0x3231ffff, 0x52200001, +0x3411ffff, 0x37de0001, 0x24091000, 0x33c20004, +0xa6b10012, 0x10400002, 0xa6be000e, 0x34098000, +0x8f480044, 0x8f440190, 0x8f450194, 0xafa90010, +0x8f490044, 0x84140, 0x1001821, 0xafa90014, +0x8f48000c, 0x2a03021, 0x24070020, 0xafa80018, +0x8f48010c, 0x1021, 0xa32821, 0xa3482b, +0x822021, 0x100f809, 0x892021, 0x1440000c, +0x0, 0x8f820128, 0x8faa0024, 0x3c040001, +0x24843944, 0xafaa0014, 0xafa20010, 0x8f860124, +0x8f870120, 0x3c050007, 0xc0029d3, 0x34a59920, +0x8f420358, 0x2442ffff, 0xaf420358, 0x8f420044, +0x8f430088, 0x24420001, 0x431024, 0xaf420044, +0x8faa0034, 0x8f440358, 0x24020001, 0x15420006, +0x24020002, 0x8f42034c, 0x2442ffff, 0xaf42034c, +0x10000049, 0x8f42034c, 0x15420006, 0x0, +0x8f420354, 0x2442ffff, 0xaf420354, 0x10000042, +0x8f420354, 0x8f420350, 0x2442ffff, 0xaf420350, +0x1000003d, 0x8f420350, 0x30621000, 0x10400005, +0x30628000, 0x8f420078, 0x24420001, 0x10000036, +0xaf420078, 0x10400034, 0x0, 0x8f420078, +0x24420001, 0xaf420078, 0x8c030240, 0x43102b, +0x1440002d, 0x24070008, 0x8f440158, 0x8f45015c, +0x8f430044, 0x8f48000c, 0x8f860120, 0x24020040, +0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, +0x40f809, 0x24c6001c, 0x14400011, 0x24020001, +0x3c010001, 0x370821, 0xa02240f2, 0x8f820124, +0xafa20010, 0x8f820128, 0x3c040001, 0x248438c8, +0xafa20014, 0x8f460044, 0x8f870120, 0x3c050009, +0xc0029d3, 0x34a51300, 0x1000000b, 0x0, +0x8f4202f4, 0x24420001, 0xaf4202f4, 0x8f4202f4, +0x8f420044, 0xaf42007c, 0x3c010001, 0x370821, +0xa02040f2, 0xaf400078, 0x8f420308, 0x24420001, +0xaf420308, 0x8f420308, 0x8fbf0058, 0x8fbe0054, +0x8fb50050, 0x8fb3004c, 0x8fb20048, 0x8fb10044, +0x8fb00040, 0x3e00008, 0x27bd0060, 0x3e00008, +0x0, 0x0, 0x0, 0x8f420130, +0xaf8200c0, 0x8f420130, 0xaf8200c4, 0x8f420130, +0xaf8200c8, 0x8f42012c, 0xaf8200d0, 0x8f42012c, +0xaf8200d4, 0x8f42012c, 0x3e00008, 0xaf8200d8, +0x27bdffe0, 0x27840208, 0x24050200, 0xafbf0018, +0xc002a57, 0x24060008, 0x8c020204, 0xc003dee, +0xaf820210, 0x2021, 0x8c060248, 0x24020004, +0x3c010001, 0xac223d18, 0xc004878, 0x24050004, +0x3c020001, 0x8c423d14, 0x30420001, 0x10400007, +0x24020001, 0x3c010001, 0xac223d18, 0x2021, +0x24050001, 0xc004878, 0x3c06601b, 0x3c040001, +0x24843a00, 0x8f420144, 0x8f430148, 0x3c050008, +0x8f46014c, 0x21640, 0x31940, 0x34630403, +0x431025, 0x633c0, 0x461025, 0xaf82021c, +0xafa00010, 0xafa00014, 0x8f86021c, 0x34a50200, +0xc0029d3, 0x3821, 0x3c010001, 0xac203d10, +0x3c010001, 0xac203d28, 0x8fbf0018, 0x3e00008, +0x27bd0020, 0x27bdffe0, 0x3c050008, 0x34a50300, +0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, +0x3c040001, 0x24843a0c, 0xc0029d3, 0x3821, +0x8f420400, 0x24420001, 0xaf420400, 0x8f420400, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffd8, +0xafbf0020, 0xafb1001c, 0xafb00018, 0x8f420394, +0x24420001, 0xaf420394, 0x8f420394, 0x8f900220, +0x8f4303a8, 0x3c020001, 0x8c423d28, 0x3c040001, +0x24843a18, 0x3c050008, 0xafa20014, 0xafa30010, +0x8f4703ac, 0x34a50400, 0xc0029d3, 0x2003021, +0x3c024000, 0x2021024, 0x104000e1, 0x3c040100, +0x8f4203ac, 0x24420001, 0xaf4203ac, 0x8f4203ac, +0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, +0x34420004, 0xaf820220, 0x8f8200e0, 0x8f8300c4, +0x3c02001f, 0x3442ffff, 0x24690008, 0x49102b, +0x10400003, 0x0, 0x8f42013c, 0x1224823, +0x8f8700c8, 0x8f840120, 0x8f830124, 0x10000005, +0x5821, 0x8f42012c, 0x62102b, 0x50400001, +0x27634800, 0x1083000d, 0x316200ff, 0x8c620018, +0x2442ffff, 0x2c420002, 0x5040fff6, 0x24630020, +0x8f4203c0, 0x240b0001, 0x24420001, 0xaf4203c0, +0x8f4203c0, 0x8c670008, 0x316200ff, 0x14400078, +0x0, 0x934205b5, 0x14400075, 0x0, +0x8f8500e4, 0x8f8200e0, 0x2403fff8, 0x433024, +0xc51023, 0x218c3, 0x4620001, 0x24630100, +0x8f8a00c4, 0x10600005, 0x24020001, 0x10620009, +0x0, 0x10000021, 0x0, 0x8f4203b0, +0x1403821, 0x24420001, 0xaf4203b0, 0x10000060, +0x8f4203b0, 0x8f4203b4, 0x24420001, 0xaf4203b4, +0x8ca70000, 0x8f42013c, 0x8f4303b4, 0x1471823, +0x43102b, 0x10400004, 0x2c62233f, 0x8f42013c, +0x621821, 0x2c62233f, 0x14400051, 0x3c020100, +0xaca20004, 0x8f8200e8, 0x24420008, 0xaf8200e8, +0x8f8200e8, 0x8f8200e4, 0x1403821, 0x24420008, +0xaf8200e4, 0x10000046, 0x8f8200e4, 0x8f4203b8, +0x24420001, 0xaf4203b8, 0x8ca80000, 0x8f42013c, +0x8f4303b8, 0x1092023, 0x44102b, 0x10400003, +0x0, 0x8f42013c, 0x822021, 0x8f420140, +0x44102b, 0x10400003, 0x3c030100, 0x10000034, +0x1003821, 0x8ca20004, 0x431025, 0xaca20004, +0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4, +0x10a60025, 0x3c080100, 0x8f4201fc, 0x24420001, +0xaf4201fc, 0x8ca20004, 0x8f4301fc, 0x481024, +0x1440000e, 0x0, 0x8ca30000, 0x8f42013c, +0x692023, 0x44102b, 0x10400003, 0x0, +0x8f42013c, 0x822021, 0x8f420140, 0x44102b, +0x10400006, 0x0, 0x603821, 0x8f420140, +0x44102b, 0x1440000a, 0x0, 0x8ca20004, +0x481025, 0xaca20004, 0x8f8200e4, 0x24450008, +0xaf8500e4, 0x8f8500e4, 0x14a6ffdf, 0x0, +0x14a60005, 0x0, 0x1403821, 0xaf8600e4, +0x10000003, 0xaf8600e8, 0xaf8500e4, 0xaf8500e8, +0x8f8300c8, 0x8f42013c, 0x692023, 0x44102b, +0x10400003, 0x0, 0x8f42013c, 0x822021, +0x8f420140, 0x82102b, 0x50400008, 0x5821, +0x8f42013c, 0xe92023, 0x44102b, 0x10400003, +0x0, 0x8f42013c, 0x822021, 0x8f420140, +0x82102b, 0x10400006, 0x316200ff, 0x1440001b, +0x3c02fdff, 0x934205b5, 0x14400018, 0x3c02fdff, +0xaf8700c8, 0x8f8400c8, 0x8f8300c4, 0x8f42013c, +0x832023, 0x44102b, 0x10400003, 0x0, +0x8f42013c, 0x822021, 0x8f420140, 0x2c830001, +0x44102b, 0x431025, 0x50400008, 0x3c02fdff, +0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, +0x3c034000, 0x10000046, 0x431025, 0x3442ffff, +0x8f4303bc, 0x282a024, 0x24020001, 0xa34205b1, +0x24630001, 0xaf4303bc, 0x1000003e, 0x8f4203bc, +0x2041024, 0x10400013, 0x3c110200, 0x8f420398, +0x24420001, 0xaf420398, 0x8f420398, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x441025, +0xaf820220, 0x3c020004, 0x2021024, 0x14400005, +0x3c110200, 0xc003bad, 0x0, 0x10000029, +0x0, 0x2111024, 0x50400008, 0x3c110400, +0x8f42039c, 0x24420001, 0xaf42039c, 0xc003bad, +0x8f42039c, 0x10000019, 0x0, 0x2111024, +0x1040001c, 0x0, 0x8f830224, 0x24021402, +0x14620009, 0x3c050008, 0x3c040001, 0x24843a24, +0xafa00010, 0xafa00014, 0x8f860224, 0x34a50500, +0xc0029d3, 0x3821, 0x8f4203a0, 0x24420001, +0xaf4203a0, 0x8f4203a0, 0x8f820220, 0x2002021, +0x34420002, 0xc004610, 0xaf820220, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x511025, +0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0x3e00008, 0x27bd0028, 0x3e00008, 0x0, +0x3c020001, 0x8c423d28, 0x27bdffb0, 0xafbf0048, +0xafbe0044, 0xafb50040, 0xafb3003c, 0xafb20038, +0xafb10034, 0x1040000f, 0xafb00030, 0x3c040001, +0x24843a30, 0x3c050008, 0xafa00010, 0xafa00014, +0x8f860220, 0x34a50600, 0x24020001, 0x3c010001, +0xac203d28, 0x3c010001, 0xac223d1c, 0xc0029d3, +0x3821, 0x3c037fff, 0x8c020268, 0x3463ffff, +0x3c04fdff, 0x431024, 0xac020268, 0x8f420004, +0x3484ffff, 0x30420002, 0x10400092, 0x284a024, +0x3c040600, 0x34842000, 0x8f420004, 0x2821, +0x2403fffd, 0x431024, 0xaf420004, 0xafa40020, +0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, +0xafaa002c, 0x27c50001, 0x8c020228, 0xa09021, +0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001, +0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001, +0x248439c8, 0x3c050009, 0xafa00014, 0xafa20010, +0x8fa60020, 0x1000006d, 0x34a50500, 0xf71021, +0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, +0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, +0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, +0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821, +0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, +0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, +0x24070008, 0xa32821, 0xa3482b, 0x822021, +0x100f809, 0x892021, 0x54400006, 0x24130001, +0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, +0x0, 0x326200ff, 0x54400017, 0xaf520018, +0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, +0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, +0x3c040001, 0x248439d4, 0x3c050009, 0xafa20014, +0x8d460000, 0x10000035, 0x34a50600, 0x8f4202f8, +0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x1000001e, 0x326200ff, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x10400016, +0x9821, 0x3c150020, 0x24110010, 0x8f42000c, +0x8f440150, 0x8f450154, 0x8f860120, 0xafb10010, +0xafb20014, 0x551025, 0xafa20018, 0x8f42010c, +0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3, +0x0, 0x8f820054, 0x2021023, 0x2c4203e9, +0x1440ffee, 0x0, 0x326200ff, 0x14400011, +0x0, 0x8f420368, 0x24420001, 0xaf420368, +0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x248439dc, 0x3c050009, +0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3, +0x3c03821, 0x8f4202dc, 0x24420001, 0xaf4202dc, +0x8f4202dc, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, +0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, +0x3e00008, 0x27bd0050, 0x3c020001, 0x8c423d28, +0x27bdffe0, 0x1440000d, 0xafbf0018, 0x3c040001, +0x24843a3c, 0x3c050008, 0xafa00010, 0xafa00014, +0x8f860220, 0x34a50700, 0x24020001, 0x3c010001, +0xac223d28, 0xc0029d3, 0x3821, 0x3c020004, +0x2c21024, 0x10400008, 0x2021, 0x8f820220, +0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, +0xaf820220, 0x2021, 0xc004981, 0x24050004, +0xac020268, 0x8fbf0018, 0x3e00008, 0x27bd0020, +0x0, 0x0, 0x0, 0x86102b, +0x50400001, 0x872023, 0xc41023, 0x24843, +0x125102b, 0x1040001b, 0x91040, 0x824021, +0x88102b, 0x10400007, 0x1821, 0x94820000, +0x24840002, 0x621821, 0x88102b, 0x1440fffb, +0x0, 0x602021, 0xc73023, 0xa91023, +0x21040, 0xc22821, 0xc5102b, 0x10400007, +0x1821, 0x94c20000, 0x24c60002, 0x621821, +0xc5102b, 0x1440fffb, 0x0, 0x1000000d, +0x832021, 0x51040, 0x822821, 0x85102b, +0x10400007, 0x1821, 0x94820000, 0x24840002, +0x621821, 0x85102b, 0x1440fffb, 0x0, +0x602021, 0x41c02, 0x3082ffff, 0x622021, +0x41c02, 0x3082ffff, 0x622021, 0x3e00008, +0x3082ffff, 0x3e00008, 0x0, 0x802821, +0x30a20001, 0x1040002b, 0x3c03001f, 0x3463ffff, +0x24a20004, 0x62102b, 0x54400007, 0x65102b, +0x90a20001, 0x90a40003, 0x90a30000, 0x90a50002, +0x1000002a, 0x441021, 0x10400003, 0x0, +0x8f42013c, 0xa22823, 0x90a40000, 0x24a50001, +0x65102b, 0x10400003, 0x0, 0x8f42013c, +0xa22823, 0x90a20000, 0x24a50001, 0x21200, +0x822021, 0x65102b, 0x10400003, 0x0, +0x8f42013c, 0xa22823, 0x90a20000, 0x24a50001, +0x822021, 0x65102b, 0x10400003, 0x0, +0x8f42013c, 0xa22823, 0x90a20000, 0x1000002d, +0x21200, 0x3463ffff, 0x24a20004, 0x62102b, +0x5440000a, 0x65102b, 0x90a20000, 0x90a40002, +0x90a30001, 0x90a50003, 0x441021, 0x21200, +0x651821, 0x10000020, 0x432021, 0x10400003, +0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x24a50001, 0x22200, 0x65102b, 0x10400003, +0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x24a50001, 0x822021, 0x65102b, 0x10400003, +0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x24a50001, 0x21200, 0x822021, 0x65102b, +0x10400003, 0x0, 0x8f42013c, 0xa22823, +0x90a20000, 0x822021, 0x41c02, 0x3082ffff, +0x622021, 0x41c02, 0x3082ffff, 0x622021, +0x3e00008, 0x3082ffff, 0x0, 0x8f820220, +0x34420002, 0xaf820220, 0x3c020001, 0x8c425f28, +0x30424000, 0x10400054, 0x24040001, 0x8f820200, +0x24067fff, 0x8f830200, 0x30450002, 0x2402fffd, +0x621824, 0xaf830200, 0xaf840204, 0x8f830054, +0x8f820054, 0x10000002, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x8f820224, 0x1444004d, 0x42040, 0xc4102b, +0x1040fff1, 0x0, 0x8f820200, 0x451025, +0xaf820200, 0x8f820220, 0x34428000, 0xaf820220, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820220, 0x3c030004, 0x431024, +0x1440000f, 0x0, 0x8f820220, 0x3c03ffff, +0x34637fff, 0x431024, 0xaf820220, 0x8f830054, +0x8f820054, 0x10000002, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x8f820220, 0x3c030004, 0x431024, 0x1440000d, +0x0, 0x8f820220, 0x34428000, 0xaf820220, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820220, 0x3c030004, 0x431024, +0x1040001b, 0x1021, 0x8f830220, 0x24020001, +0x10000015, 0x3c04f700, 0x8f820220, 0x3c04f700, +0x441025, 0xaf820220, 0x8f820220, 0x2403fffd, +0x431024, 0xaf820220, 0x8f820220, 0x3c030300, +0x431024, 0x14400003, 0x0, 0x10000008, +0x1021, 0x8f820220, 0x34420002, 0xaf820220, +0x8f830220, 0x24020001, 0x641825, 0xaf830220, +0x3e00008, 0x0, 0x2021, 0x3c050100, +0x24020001, 0xaf80021c, 0xaf820200, 0xaf820220, +0x27625000, 0xaf8200c0, 0x27625000, 0xaf8200c4, +0x27625000, 0xaf8200c8, 0x27625000, 0xaf8200d0, +0x27625000, 0xaf8200d4, 0x27625000, 0xaf8200d8, +0x27623000, 0xaf8200e0, 0x27623000, 0xaf8200e4, +0x27623000, 0xaf8200e8, 0x27622800, 0xaf8200f0, +0x27622800, 0xaf8200f4, 0x27622800, 0xaf8200f8, +0x418c0, 0x24840001, 0x3631021, 0xac453004, +0x3631021, 0xac403000, 0x28820200, 0x1440fff9, +0x418c0, 0x2021, 0x418c0, 0x24840001, +0x3631021, 0xac402804, 0x3631021, 0xac402800, +0x28820100, 0x1440fff9, 0x418c0, 0xaf80023c, +0x24030080, 0x24040100, 0xac600000, 0x24630004, +0x64102b, 0x5440fffd, 0xac600000, 0x8f830040, +0x3c02f000, 0x621824, 0x3c025000, 0x1062000c, +0x43102b, 0x14400006, 0x3c026000, 0x3c024000, +0x10620008, 0x24020800, 0x10000008, 0x0, +0x10620004, 0x24020800, 0x10000004, 0x0, +0x24020700, 0x3c010001, 0xac223d2c, 0x3e00008, +0x0, 0x27bdffc8, 0xafbf0034, 0xafb20030, +0xafb1002c, 0xafb00028, 0x3c010001, 0xc0045ed, +0xac203d14, 0x24040001, 0x2821, 0x27a60020, +0x34028000, 0xc00420a, 0xa7a20020, 0x8f830054, +0x8f820054, 0x10000002, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050001, 0xc0041c8, 0x27a60020, 0x8f830054, +0x8f820054, 0x10000002, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050001, 0xc0041c8, 0x27a60020, 0x8f830054, +0x8f820054, 0x10000002, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050002, 0xc0041c8, 0x27a60018, 0x8f830054, +0x8f820054, 0x10000002, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050003, 0xc0041c8, 0x27a6001a, 0x97a20020, +0x10400029, 0x24020001, 0x3c020001, 0x8c423d14, +0x97a30018, 0x34420001, 0x3c010001, 0xac223d14, +0x24020015, 0x14620009, 0x0, 0x97a2001a, +0x3843f423, 0x2c630001, 0x3842f430, 0x2c420001, +0x621825, 0x14600018, 0x24020003, 0x97a30018, +0x24027810, 0x14620014, 0x24020002, 0x97a3001a, +0x24020001, 0x14620010, 0x24020002, 0x1000000e, +0x24020004, 0x3c020001, 0x8c423d14, 0x34420008, +0x3c010001, 0xac223d14, 0x10000058, 0x24020004, +0x3c020001, 0x8c423d14, 0x34420004, 0x3c010001, +0x100000a9, 0xac223d14, 0x3c010001, 0xac223e70, +0x24020e00, 0xaf820238, 0x8f840054, 0x8f820054, +0x24030008, 0x3c010001, 0xac233d18, 0x10000002, +0x248401f4, 0x8f820054, 0x821023, 0x2c4201f5, +0x1440fffc, 0x3c0200c8, 0x344201fb, 0xaf820238, +0x8f830054, 0x8f820054, 0x10000002, 0x246301f4, +0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc, +0x8021, 0x24120001, 0x24110009, 0xc0040e8, +0x0, 0x3c010001, 0xac323d30, 0xc004194, +0x0, 0x3c020001, 0x8c423d30, 0x1451fffb, +0x3c0200c8, 0x344201f6, 0xaf820238, 0x8f830054, +0x8f820054, 0x10000002, 0x2463000a, 0x8f820054, +0x621023, 0x2c42000b, 0x1440fffc, 0x0, +0x8f820220, 0x24040001, 0x34420002, 0xaf820220, +0x8f830200, 0x24057fff, 0x2402fffd, 0x621824, +0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054, +0x10000002, 0x24630001, 0x8f820054, 0x621023, +0x2c420002, 0x1440fffc, 0x0, 0x8f820224, +0x14440005, 0x34028000, 0x42040, 0xa4102b, +0x1040fff0, 0x34028000, 0x1082ffa6, 0x26100001, +0x2e020014, 0x1440ffcd, 0x24020004, 0x3c010001, +0xac223d18, 0x8021, 0x24120009, 0x3c11ffff, +0x36313f7f, 0xc0040e8, 0x0, 0x24020001, +0x3c010001, 0xac223d30, 0xc004194, 0x0, +0x3c020001, 0x8c423d30, 0x1452fffb, 0x0, +0x8f820044, 0x511024, 0x34425080, 0xaf820044, +0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, +0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, +0x0, 0x8f820044, 0x511024, 0x3442f080, +0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, +0x2463000a, 0x8f820054, 0x621023, 0x2c42000b, +0x1440fffc, 0x0, 0x8f820220, 0x3c03f700, +0x431025, 0xaf820220, 0x8f830054, 0x8f820054, +0x10000002, 0x24630064, 0x8f820054, 0x621023, +0x2c420065, 0x1440fffc, 0x0, 0x8f820220, +0x24040001, 0x34420002, 0xaf820220, 0x8f830200, +0x24057fff, 0x2402fffd, 0x621824, 0xaf830200, +0xaf840204, 0x8f830054, 0x8f820054, 0x10000002, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820224, 0x14440005, +0x34028000, 0x42040, 0xa4102b, 0x1040fff0, +0x34028000, 0x1082ff56, 0x26100001, 0x2e020064, +0x1440ffb0, 0x0, 0x3c020001, 0x8c423d14, +0x30420004, 0x14400007, 0x3c08fff0, 0x8f820044, +0x3c03ffff, 0x34633f7f, 0x431024, 0xaf820044, +0x3c08fff0, 0x3508bdc0, 0x8f830054, 0x97a60018, +0x3c070001, 0x8ce73e70, 0x3c040001, 0x24843b00, +0x24020001, 0x3c010001, 0xac223d1c, 0xafa60010, +0x3c060001, 0x8cc63d14, 0x97a2001a, 0x3c05000d, +0x34a50100, 0x3c010001, 0xac203d18, 0x681821, +0x3c010001, 0xac233e68, 0xc0029d3, 0xafa20014, +0x8fbf0034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, +0x3e00008, 0x27bd0038, 0x27bdffe8, 0x24070004, +0x3c040001, 0x8c843d18, 0x3021, 0x24020001, +0x1482000a, 0xafbf0010, 0x3c020001, 0x8c425f2c, +0x3c050004, 0x30428000, 0x1040000c, 0x34a593e0, +0x3c05000f, 0x10000009, 0x34a54240, 0x3c020001, +0x8c425f2c, 0x3c05000f, 0x30428000, 0x10400003, +0x34a54240, 0x3c05001e, 0x34a58480, 0x3c020001, +0x8c423e68, 0x8f830054, 0x451021, 0x431023, +0x45102b, 0x1440002e, 0x0, 0x3c020001, +0x8c423d20, 0x1440002a, 0x2cc20001, 0x7182b, +0x431024, 0x1040001d, 0x0, 0x3c090001, +0x8d293d14, 0x240b0001, 0x3c054000, 0x3c080001, +0x25085f2c, 0x250afffc, 0x42042, 0x14800002, +0x24e7ffff, 0x24040008, 0x891024, 0x5040000b, +0x2cc20001, 0x148b0004, 0x0, 0x8d020000, +0x10000003, 0x451024, 0x8d420000, 0x451024, +0x54400001, 0x24060001, 0x2cc20001, 0x7182b, +0x431024, 0x5440ffed, 0x42042, 0x3c010001, +0x10c00020, 0xac243d18, 0x8f830054, 0x24020001, +0x3c010001, 0xac223d1c, 0x3c010001, 0xac233e68, +0x3c020001, 0x8c423d1c, 0x10400004, 0x24020001, +0x3c010001, 0xac203d1c, 0xaee204b8, 0x8ee304b8, +0x24020008, 0x10620005, 0x24020001, 0xc003f91, +0x0, 0x1000000b, 0x0, 0x3c030001, +0x8c633d18, 0x10620007, 0x2402000e, 0x3c030001, +0x8c635ec0, 0x10620003, 0x0, 0xc004610, +0x8f840220, 0x8fbf0010, 0x3e00008, 0x27bd0018, +0x27bdffe0, 0x3c03fdff, 0x3c040001, 0x8c843d18, +0x3c020001, 0x8c423d38, 0x3463ffff, 0x283a024, +0x14820006, 0xafbf0018, 0x8ee304b8, 0x3c020001, +0x8c423d3c, 0x10620006, 0x0, 0x8ee204b8, +0x3c010001, 0xac243d38, 0x3c010001, 0xac223d3c, +0x3c030001, 0x8c633d18, 0x24020002, 0x1062013c, +0x2c620003, 0x10400005, 0x24020001, 0x1062000a, +0x0, 0x10000134, 0x0, 0x24020004, +0x1062006d, 0x24020008, 0x1062009f, 0x24020001, +0x1000012d, 0x0, 0x8ee204b8, 0x2443ffff, +0x2c620008, 0x1040012a, 0x31080, 0x3c010001, +0x220821, 0x8c223b18, 0x400008, 0x0, +0xc0040e8, 0x0, 0x3c020001, 0x8c423d24, +0x3c010001, 0xac203cb0, 0x104000d7, 0x24020002, +0xaee204b8, 0x3c010001, 0x10000119, 0xac203d24, +0xc00424b, 0x0, 0x3c030001, 0x8c633d40, +0x1000009e, 0x24020011, 0x3c050001, 0x8ca53d18, +0x3c060001, 0x8cc65f2c, 0xc004878, 0x2021, +0x24020005, 0x3c010001, 0xac203d24, 0x10000108, +0xaee204b8, 0x3c040001, 0x24843b0c, 0x3c05000f, +0x34a50100, 0x3021, 0x3821, 0xafa00010, +0xc0029d3, 0xafa00014, 0x100000fd, 0x0, +0x8f820220, 0x3c03f700, 0x431025, 0x100000a4, +0xaf820220, 0x8f820220, 0x3c030004, 0x431024, +0x144000ae, 0x24020007, 0x8f830054, 0x3c020001, +0x8c423e60, 0x2463d8f0, 0x431023, 0x2c422710, +0x144000eb, 0x24020001, 0x100000e7, 0x0, +0x3c050001, 0x8ca53d18, 0xc004981, 0x2021, +0xc004a4c, 0x2021, 0x3c030001, 0x8c635f24, +0x46100dd, 0x24020001, 0x3c020008, 0x621024, +0x10400006, 0x0, 0x8f820214, 0x3c03ffff, +0x431024, 0x10000005, 0x3442251f, 0x8f820214, +0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214, +0x8f820220, 0x3c030200, 0x283a025, 0x34420002, +0xaf820220, 0x24020008, 0xc003c6b, 0xaee204b8, +0x100000c7, 0x0, 0x8ee204b8, 0x2443ffff, +0x2c620008, 0x104000c2, 0x31080, 0x3c010001, +0x220821, 0x8c223b38, 0x400008, 0x0, +0x3c020001, 0x8c425f28, 0x30424000, 0x10400004, +0x0, 0x8f820044, 0x10000006, 0x3442f080, +0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, +0x3442a080, 0xaf820044, 0x8f830054, 0x1000005a, +0x24020004, 0xc003d2c, 0x0, 0x104000a6, +0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001, +0x8c843e58, 0x431024, 0x3442251f, 0xaf820214, +0x24020008, 0x10800005, 0xaee204b8, 0x3c020001, +0x8c423da4, 0x1040006d, 0x24020001, 0x8f820220, +0x3c030008, 0x431024, 0x10400073, 0x3c020200, +0x10000081, 0x0, 0x8ee204b8, 0x2443ffff, +0x2c620007, 0x1040008e, 0x31080, 0x3c010001, +0x220821, 0x8c223b58, 0x400008, 0x0, +0xc003bad, 0x0, 0x3c010001, 0xac203d1c, +0xaf800204, 0x3c010001, 0xc0040e8, 0xac205f10, +0x24020001, 0x3c010001, 0xac223d30, 0x24020002, +0x1000007b, 0xaee204b8, 0xc004194, 0x0, +0x3c030001, 0x8c633d30, 0x24020009, 0x14620074, +0x24020003, 0x10000072, 0xaee204b8, 0x3c020001, +0x8c425f28, 0x30424000, 0x10400003, 0x3c0200c8, +0x10000002, 0x344201f6, 0x344201fe, 0xaf820238, +0x8f830054, 0x10000014, 0x24020004, 0x8f830054, +0x3c020001, 0x8c423e60, 0x2463d8f0, 0x431023, +0x2c422710, 0x1440005e, 0x24020005, 0x1000005c, +0xaee204b8, 0x8f820220, 0x3c03f700, 0x431025, +0xaf820220, 0xaf800204, 0x3c010001, 0xac205f10, +0x8f830054, 0x24020006, 0xaee204b8, 0x3c010001, +0x1000004f, 0xac233e60, 0x8f830054, 0x3c020001, +0x8c423e60, 0x2463fff6, 0x431023, 0x2c42000a, +0x14400047, 0x0, 0x24020007, 0x10000044, +0xaee204b8, 0xc003d2c, 0x0, 0x1040003e, +0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001, +0x8c843e58, 0x431024, 0x3442251f, 0xaf820214, +0x24020008, 0x1080000f, 0xaee204b8, 0x3c020001, +0x8c423da4, 0x1440000b, 0x0, 0x8f820220, +0x34420002, 0xaf820220, 0x24020001, 0x3c010001, +0xac225ec0, 0xc004610, 0x8f840220, 0x10000016, +0x0, 0x8f820220, 0x3c030008, 0x431024, +0x14400011, 0x3c020200, 0x282a025, 0x2402000e, +0x3c010001, 0xac225ec0, 0xc004a4c, 0x2021, +0x8f820220, 0x34420002, 0xc003c6b, 0xaf820220, +0x3c050001, 0x8ca53d18, 0xc004981, 0x2021, +0x10000013, 0x0, 0x3c020001, 0x8c423da4, +0x1040000f, 0x0, 0x3c020001, 0x8c423da0, +0x2442ffff, 0x3c010001, 0xac223da0, 0x14400008, +0x24020002, 0x3c010001, 0xac203da4, 0x3c010001, +0x10000003, 0xac223da0, 0x3c010001, 0xac223d1c, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8f820200, +0x8f820220, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820200, 0x3c040001, 0x8c843d18, 0x34420004, +0xaf820200, 0x24020002, 0x1082003a, 0x2c820003, +0x10400005, 0x24020001, 0x1082000a, 0x3c03f0ff, +0x10000098, 0x0, 0x24020004, 0x10820059, +0x24020008, 0x1082006c, 0x3c02f0ff, 0x10000091, +0x0, 0x8f820050, 0x3463ffff, 0x3c05ffff, +0x34a53f7f, 0x431024, 0x3c030700, 0x431025, +0xaf820050, 0x24020e00, 0xaf840200, 0xaf840220, +0xaf820238, 0x8f820044, 0x3c030001, 0x8c633d08, +0x3c040001, 0x8c843e70, 0x451024, 0x34630022, +0xaf820044, 0x24020004, 0x1082000c, 0xaf830200, +0x3c020001, 0x8c423d2c, 0x3c030001, 0x8c633d10, +0x3c040001, 0x8c843d0c, 0x34428000, 0x621825, +0x641825, 0x1000006e, 0x34620002, 0x3c020001, +0x8c423d10, 0x3c030001, 0x8c633d2c, 0x3c040001, +0x8c843d0c, 0x431025, 0x441025, 0x10000064, +0x34420002, 0x8f830050, 0x3c02f0ff, 0x3442ffff, +0x3c040001, 0x8c843e58, 0x621824, 0x3c020d00, +0x621825, 0x24020001, 0xaf830050, 0xaf820200, +0xaf820220, 0x24020e00, 0x10800009, 0xaf820238, +0x3c020001, 0x8c423da4, 0x14400005, 0x3c033f00, +0x3c020001, 0x8c423d00, 0x10000005, 0x34630070, +0x3c020001, 0x8c423d00, 0x3c033f00, 0x34630072, +0x431025, 0xaf820200, 0x3c030001, 0x8c633d04, +0x3c04f700, 0x3c020001, 0x8c423d10, 0x3c050001, +0x8ca53d2c, 0x641825, 0x431025, 0x1000003c, +0x451025, 0x8f830050, 0x3c02f0ff, 0x3442ffff, +0x3c040001, 0x8c843e58, 0x621824, 0x3c020a00, +0x621825, 0x24020001, 0xaf830050, 0xaf820200, +0x1080001e, 0xaf820220, 0x3c020001, 0x8c423da4, +0x1440001a, 0x3c033f00, 0x3c020001, 0x8c423d00, +0x1000001a, 0x346300e0, 0x8f830050, 0x3c040001, +0x8c843e58, 0x3442ffff, 0x621824, 0x1080000f, +0xaf830050, 0x3c020001, 0x8c423da4, 0x1440000b, +0x3c043f00, 0x3c030001, 0x8c633d00, 0x348400e0, +0x24020001, 0xaf820200, 0xaf820220, 0x641825, +0xaf830200, 0x10000008, 0x3c05f700, 0x3c020001, +0x8c423d00, 0x3c033f00, 0x346300e2, 0x431025, +0xaf820200, 0x3c05f700, 0x34a58000, 0x3c030001, +0x8c633d04, 0x3c020001, 0x8c423d10, 0x3c040001, +0x8c843d2c, 0x651825, 0x431025, 0x441025, +0xaf820220, 0x3e00008, 0x0, 0x3c030001, +0x8c633d30, 0x3c020001, 0x8c423d34, 0x10620003, +0x24020002, 0x3c010001, 0xac233d34, 0x1062001d, +0x2c620003, 0x10400025, 0x24020001, 0x14620023, +0x24020004, 0x3c030001, 0x8c633d18, 0x10620006, +0x24020008, 0x1462000c, 0x3c0200c8, 0x344201fb, +0x10000009, 0xaf820238, 0x24020e01, 0xaf820238, +0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, +0x34420080, 0xaf820044, 0x8f830054, 0x24020002, +0x3c010001, 0xac223d30, 0x3c010001, 0x1000000b, +0xac233e64, 0x8f830054, 0x3c020001, 0x8c423e64, +0x2463d8f0, 0x431023, 0x2c422710, 0x14400003, +0x24020009, 0x3c010001, 0xac223d30, 0x3e00008, +0x0, 0x0, 0x0, 0x27bdffd8, +0xafb20018, 0x809021, 0xafb3001c, 0xa09821, +0xafb10014, 0xc08821, 0xafb00010, 0x8021, +0xafbf0020, 0xa6200000, 0xc0045c7, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc0045c7, 0x2021, 0xc0045c7, 0x24040001, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x24100010, 0x2501024, 0x10400002, 0x2021, +0x24040001, 0xc0045c7, 0x108042, 0x1600fffa, +0x2501024, 0x24100010, 0x2701024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fffa, 0x2701024, 0xc0045ed, 0x34108000, +0xc0045ed, 0x0, 0xc0045a7, 0x0, +0x50400005, 0x108042, 0x96220000, 0x501025, +0xa6220000, 0x108042, 0x1600fff7, 0x0, +0xc0045ed, 0x0, 0x8fbf0020, 0x8fb3001c, +0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, +0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821, +0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, +0xafb00010, 0x8021, 0xafbf0020, 0xc0045c7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0x24100010, 0x2301024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fffa, 0x2301024, 0x24100010, 0x2501024, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x2501024, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0x34108000, +0x96620000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc0045c7, 0x108042, 0x1600fff8, +0x0, 0xc0045ed, 0x0, 0x8fbf0020, +0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, +0x3e00008, 0x27bd0028, 0x3c030001, 0x8c633d40, +0x3c020001, 0x8c423d84, 0x27bdffd8, 0xafbf0020, +0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001, +0xac233d84, 0x2463ffff, 0x2c620013, 0x10400349, +0x31080, 0x3c010001, 0x220821, 0x8c223b80, +0x400008, 0x0, 0xc0045ed, 0x8021, +0x34028000, 0xa7a20010, 0x27b10010, 0xc0045c7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0xc0045c7, +0x2021, 0x108042, 0x1600fffc, 0x0, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x1000030e, 0x24020002, 0x27b10010, 0xa7a00010, +0x8021, 0xc0045c7, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc0045c7, +0x2021, 0xc0045c7, 0x24040001, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0xc0045c7, 0x2021, 0x108042, +0x1600fffc, 0x0, 0xc0045ed, 0x34108000, +0xc0045ed, 0x0, 0xc0045a7, 0x0, +0x50400005, 0x108042, 0x96220000, 0x501025, +0xa6220000, 0x108042, 0x1600fff7, 0x0, +0xc0045ed, 0x0, 0x97a20010, 0x30428000, +0x144002dc, 0x24020003, 0x100002d8, 0x0, +0x24021200, 0xa7a20010, 0x27b10010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0xc0045c7, 0x2021, 0x108042, 0x1600fffc, +0x0, 0xc0045c7, 0x24040001, 0xc0045c7, +0x2021, 0x34108000, 0x96220000, 0x501024, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fff8, 0x0, 0xc0045ed, +0x0, 0x8f830054, 0x10000296, 0x24020004, +0x8f830054, 0x3c020001, 0x8c423e6c, 0x2463ff9c, +0x431023, 0x2c420064, 0x1440029e, 0x24020002, +0x3c030001, 0x8c633e70, 0x10620297, 0x2c620003, +0x14400296, 0x24020011, 0x24020003, 0x10620005, +0x24020004, 0x10620291, 0x2402000f, 0x1000028f, +0x24020011, 0x1000028d, 0x24020005, 0x24020014, +0xa7a20010, 0x27b10010, 0x8021, 0xc0045c7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020012, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020012, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0x34108000, +0x96220000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc0045c7, 0x108042, 0x1600fff8, +0x0, 0xc0045ed, 0x0, 0x8f830054, +0x10000248, 0x24020006, 0x8f830054, 0x3c020001, +0x8c423e6c, 0x2463ff9c, 0x431023, 0x2c420064, +0x14400250, 0x24020007, 0x1000024c, 0x0, +0x24020006, 0xa7a20010, 0x27b10010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020013, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020013, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x8f830054, 0x10000207, 0x24020008, 0x8f830054, +0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440020f, 0x24020009, 0x1000020b, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001, +0xc0045c7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020018, +0xc0045ed, 0x34108000, 0xc0045ed, 0x0, +0xc0045a7, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc0045ed, 0x8021, +0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020018, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x8f830054, 0x10000193, 0x2402000a, 0x8f830054, +0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440019b, 0x2402000b, 0x10000197, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001, +0xc0045c7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020017, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020017, +0xc0045ed, 0x34108000, 0xc0045ed, 0x0, +0xc0045a7, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc0045ed, 0x8021, +0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020017, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020017, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x8f830054, 0x1000011f, 0x2402000c, 0x8f830054, +0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023, +0x2c420064, 0x14400127, 0x24020012, 0x10000123, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001, +0xc0045c7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020014, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020014, +0xc0045ed, 0x34108000, 0xc0045ed, 0x0, +0xc0045a7, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc0045ed, 0x8021, +0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020014, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020014, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x8f830054, 0x100000ab, 0x24020013, 0x8f830054, +0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023, +0x2c420064, 0x144000b3, 0x2402000d, 0x100000af, +0x0, 0x27b10010, 0xa7a00010, 0x8021, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001, +0xc0045c7, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020018, +0xc0045ed, 0x34108000, 0xc0045ed, 0x0, +0xc0045a7, 0x0, 0x50400005, 0x108042, +0x96220000, 0x501025, 0xa6220000, 0x108042, +0x1600fff7, 0x0, 0xc0045ed, 0x8021, +0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, +0xc0045c7, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0xc0045c7, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020018, 0x10400002, 0x2021, 0x24040001, +0xc0045c7, 0x108042, 0x1600fffa, 0x32020018, +0xc0045c7, 0x24040001, 0xc0045c7, 0x2021, +0x34108000, 0x96220000, 0x501024, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fff8, 0x0, 0xc0045ed, 0x0, +0x8f830054, 0x10000037, 0x2402000e, 0x24020840, +0xa7a20010, 0x27b10010, 0x8021, 0xc0045c7, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0xc0045c7, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc0045c7, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020013, +0x10400002, 0x2021, 0x24040001, 0xc0045c7, +0x108042, 0x1600fffa, 0x32020013, 0xc0045c7, +0x24040001, 0xc0045c7, 0x2021, 0x34108000, +0x96220000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc0045c7, 0x108042, 0x1600fff8, +0x0, 0xc0045ed, 0x0, 0x8f830054, +0x24020010, 0x3c010001, 0xac223d40, 0x3c010001, +0x1000000c, 0xac233e6c, 0x8f830054, 0x3c020001, +0x8c423e6c, 0x2463ff9c, 0x431023, 0x2c420064, +0x14400004, 0x0, 0x24020011, 0x3c010001, +0xac223d40, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044, +0x3c030001, 0x431025, 0x3c030008, 0xaf820044, +0x8f840054, 0x8f820054, 0xa32824, 0x10000002, +0x24840001, 0x8f820054, 0x821023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, +0x8f820054, 0x10000002, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0, +0x3442ffff, 0x42480, 0x621824, 0x3c020002, +0x822025, 0x641825, 0xaf830044, 0x8f820044, +0x3c030001, 0x431025, 0xaf820044, 0x8f830054, +0x8f820054, 0x10000002, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, +0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x3e00008, 0x0, +0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024, +0xaf820044, 0x8f820044, 0x3c030001, 0x431025, +0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, +0x24630001, 0x8f820054, 0x621023, 0x2c420002, +0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, +0x8f820054, 0x10000002, 0x24630001, 0x8f820054, +0x621023, 0x2c420002, 0x1440fffc, 0x0, +0x3e00008, 0x0, 0x0, 0x27bdffe8, +0xafbf0010, 0x8ee304b8, 0x24020008, 0x146201e0, +0x0, 0x3c020001, 0x8c423e58, 0x14400005, +0x0, 0xc003bad, 0x8f840224, 0x100001d8, +0x0, 0x8f820220, 0x3c030008, 0x431024, +0x10400026, 0x24020001, 0x8f840224, 0x8f820220, +0x3c030400, 0x431024, 0x10400006, 0x0, +0x3c010001, 0xac205ed0, 0x3c010001, 0x1000000b, +0xac205ef0, 0x3c030001, 0x24635ed0, 0x8c620000, +0x24420001, 0xac620000, 0x2c420002, 0x14400003, +0x24020001, 0x3c010001, 0xac225ef0, 0x3c020001, +0x8c425ef0, 0x10400006, 0x30820040, 0x10400004, +0x24020001, 0x3c010001, 0x10000003, 0xac225ef4, +0x3c010001, 0xac205ef4, 0x3c010001, 0xac245ecc, +0x3c010001, 0x1000000b, 0xac205f00, 0x3c010001, +0xac225f00, 0x3c010001, 0xac205ef0, 0x3c010001, +0xac205ed0, 0x3c010001, 0xac205ef4, 0x3c010001, +0xac205ecc, 0x3c030001, 0x8c635ec0, 0x3c020001, +0x8c425ec4, 0x50620004, 0x2463ffff, 0x3c010001, +0xac235ec4, 0x2463ffff, 0x2c62000e, 0x10400194, +0x31080, 0x3c010001, 0x220821, 0x8c223bd0, +0x400008, 0x0, 0x24020002, 0x3c010001, +0xac205ef0, 0x3c010001, 0xac205ed0, 0x3c010001, +0xac205ecc, 0x3c010001, 0xac205ef4, 0x3c010001, +0xac205ee8, 0x3c010001, 0xac205ee0, 0xaf800224, +0x3c010001, 0xac225ec0, 0x3c020001, 0x8c425f00, +0x1440004f, 0x3c02fdff, 0x3442ffff, 0xc003bad, +0x282a024, 0xaf800204, 0x8f820200, 0x2403fffd, +0x431024, 0xaf820200, 0x3c010001, 0xac205f10, +0x8f830054, 0x3c020001, 0x8c425ee8, 0x24040001, +0x3c010001, 0xac245efc, 0x24420001, 0x3c010001, +0xac225ee8, 0x2c420004, 0x3c010001, 0xac235ee4, +0x14400006, 0x24020003, 0x3c010001, 0xac243d1c, +0x3c010001, 0x1000015e, 0xac205ee8, 0x3c010001, +0x1000015b, 0xac225ec0, 0x8f830054, 0x3c020001, +0x8c425ee4, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400003, 0x24020004, 0x3c010001, 0xac225ec0, +0x3c020001, 0x8c425f00, 0x14400021, 0x3c02fdff, +0x3442ffff, 0x1000014a, 0x282a024, 0x3c040001, +0x8c843e5c, 0x3c010001, 0xc0047f8, 0xac205ed8, +0x3c020001, 0x8c425f0c, 0xaf820204, 0x3c020001, +0x8c425f00, 0x14400012, 0x3c03fdff, 0x8f820204, +0x3463ffff, 0x30420030, 0x1440012f, 0x283a024, +0x3c030001, 0x8c635f0c, 0x24020005, 0x3c010001, +0xac225ec0, 0x3c010001, 0x10000131, 0xac235f10, +0x3c020001, 0x8c425f00, 0x10400010, 0x3c02fdff, +0x3c020001, 0x8c423d9c, 0x24420001, 0x3c010001, +0xac223d9c, 0x2c420002, 0x14400125, 0x24020001, +0x3c010001, 0xac223da4, 0x3c010001, 0xac203d9c, +0x3c010001, 0x1000011e, 0xac223d1c, 0x3c030001, +0x8c635ef0, 0x3442ffff, 0x10600119, 0x282a024, +0x3c020001, 0x8c425ecc, 0x10400115, 0x0, +0x3c010001, 0xac225ef8, 0x24020003, 0x3c010001, +0xac225ed0, 0x100000b8, 0x24020006, 0x3c010001, +0xac205ed8, 0x8f820204, 0x34420040, 0xaf820204, +0x3c020001, 0x8c425f10, 0x24030007, 0x3c010001, +0xac235ec0, 0x34420040, 0x3c010001, 0xac225f10, +0x3c020001, 0x8c425ef0, 0x10400005, 0x0, +0x3c020001, 0x8c425ecc, 0x104000f0, 0x24020002, +0x3c050001, 0x24a55ed0, 0x8ca20000, 0x2c424e21, +0x104000ea, 0x24020002, 0x3c020001, 0x8c425ef4, +0x104000ef, 0x2404ffbf, 0x3c020001, 0x8c425ecc, +0x3c030001, 0x8c635ef8, 0x441024, 0x641824, +0x10430004, 0x24020001, 0x3c010001, 0x100000e4, +0xac225ec0, 0x24020003, 0xaca20000, 0x24020008, +0x3c010001, 0xac225ec0, 0x3c020001, 0x8c425efc, +0x1040000c, 0x24020001, 0x3c040001, 0xc004805, +0x8c845ecc, 0x3c020001, 0x8c425f18, 0x14400005, +0x24020001, 0x3c020001, 0x8c425f14, 0x10400006, +0x24020001, 0x3c010001, 0xac223d1c, 0x3c010001, +0x100000cb, 0xac205ee8, 0x3c020001, 0x8c425ee0, +0x3c030001, 0x8c635ecc, 0x2c420001, 0x210c0, +0x30630008, 0x3c010001, 0xac225ee0, 0x3c010001, +0xac235edc, 0x8f830054, 0x24020009, 0x3c010001, +0xac225ec0, 0x3c010001, 0x100000b9, 0xac235ee4, +0x8f830054, 0x3c020001, 0x8c425ee4, 0x2463d8f0, +0x431023, 0x2c422710, 0x1440009f, 0x0, +0x3c020001, 0x8c425ef0, 0x10400005, 0x0, +0x3c020001, 0x8c425ecc, 0x104000a0, 0x24020002, +0x3c030001, 0x24635ed0, 0x8c620000, 0x2c424e21, +0x1040009a, 0x24020002, 0x3c020001, 0x8c425efc, +0x1040000e, 0x0, 0x3c020001, 0x8c425ecc, +0x3c010001, 0xac205efc, 0x30420080, 0x1040002f, +0x2402000c, 0x8f820204, 0x30420080, 0x1440000c, +0x24020003, 0x10000029, 0x2402000c, 0x3c020001, +0x8c425ecc, 0x30420080, 0x14400005, 0x24020003, +0x8f820204, 0x30420080, 0x1040001f, 0x24020003, +0xac620000, 0x2402000a, 0x3c010001, 0xac225ec0, +0x3c040001, 0x24845f08, 0x8c820000, 0x3c030001, +0x8c635ee0, 0x431025, 0xaf820204, 0x8c830000, +0x3c040001, 0x8c845ee0, 0x2402000b, 0x3c010001, +0xac225ec0, 0x641825, 0x3c010001, 0xac235f10, +0x3c050001, 0x24a55ed0, 0x8ca20000, 0x2c424e21, +0x10400066, 0x24020002, 0x3c020001, 0x8c425f00, +0x10400005, 0x0, 0x2402000c, 0x3c010001, +0x10000067, 0xac225ec0, 0x3c020001, 0x8c425ef0, +0x10400063, 0x0, 0x3c040001, 0x8c845ecc, +0x10800055, 0x30820008, 0x3c030001, 0x8c635edc, +0x1062005b, 0x24020003, 0x3c010001, 0xac245ef8, +0xaca20000, 0x24020006, 0x3c010001, 0x10000054, +0xac225ec0, 0x8f820200, 0x34420002, 0xaf820200, +0x8f830054, 0x2402000d, 0x3c010001, 0xac225ec0, +0x3c010001, 0xac235ee4, 0x8f830054, 0x3c020001, +0x8c425ee4, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400031, 0x0, 0x3c020001, 0x8c425f00, +0x10400020, 0x2402000e, 0x3c030001, 0x8c635f14, +0x3c010001, 0x14600015, 0xac225ec0, 0xc003c6b, +0x0, 0x3c050001, 0x8ca53d18, 0xc004981, +0x2021, 0x3c030001, 0x8c633d18, 0x24020004, +0x14620005, 0x2403fffb, 0x3c020001, 0x8c423d14, +0x10000003, 0x2403fff7, 0x3c020001, 0x8c423d14, +0x431024, 0x3c010001, 0xac223d14, 0x8f830224, +0x3c020200, 0x3c010001, 0xac235f1c, 0x10000020, +0x282a025, 0x3c020001, 0x8c425ef0, 0x10400005, +0x0, 0x3c020001, 0x8c425ecc, 0x1040000f, +0x24020002, 0x3c020001, 0x8c425ed0, 0x2c424e21, +0x1040000a, 0x24020002, 0x3c020001, 0x8c425ef0, +0x1040000f, 0x0, 0x3c020001, 0x8c425ecc, +0x1440000b, 0x0, 0x24020002, 0x3c010001, +0x10000007, 0xac225ec0, 0x3c020001, 0x8c425ef0, +0x10400003, 0x0, 0xc003bad, 0x0, +0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, +0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3c030001, +0x24635f18, 0x8c620000, 0x10400005, 0x34422000, +0x3c010001, 0xac225f0c, 0x10000003, 0xac600000, +0x3c010001, 0xac245f0c, 0x3e00008, 0x0, +0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, +0xac225f14, 0x14400067, 0x3c02ffff, 0x34421f0e, +0x821024, 0x14400061, 0x24020030, 0x30822000, +0x1040005d, 0x30838000, 0x31a02, 0x30820001, +0x21200, 0x3c040001, 0x8c843e5c, 0x621825, +0x331c2, 0x3c030001, 0x24633da8, 0x30828000, +0x21202, 0x30840001, 0x42200, 0x441025, +0x239c2, 0x61080, 0x431021, 0x471021, +0x90430000, 0x24020001, 0x10620025, 0x0, +0x10600007, 0x24020002, 0x10620013, 0x24020003, +0x1062002c, 0x3c05000f, 0x10000037, 0x0, +0x8f820200, 0x2403feff, 0x431024, 0xaf820200, +0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, +0xaf820220, 0x3c010001, 0xac205f34, 0x3c010001, +0x10000034, 0xac205f3c, 0x8f820200, 0x34420100, +0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, +0x431024, 0xaf820220, 0x24020100, 0x3c010001, +0xac225f34, 0x3c010001, 0x10000026, 0xac205f3c, +0x8f820200, 0x2403feff, 0x431024, 0xaf820200, +0x8f820220, 0x3c030001, 0x431025, 0xaf820220, +0x3c010001, 0xac205f34, 0x3c010001, 0x10000019, +0xac235f3c, 0x8f820200, 0x34420100, 0xaf820200, +0x8f820220, 0x3c030001, 0x431025, 0xaf820220, +0x24020100, 0x3c010001, 0xac225f34, 0x3c010001, +0x1000000c, 0xac235f3c, 0x34a5ffff, 0x3c040001, +0x24843c08, 0xafa30010, 0xc0029d3, 0xafa00014, +0x10000004, 0x0, 0x24020030, 0x3c010001, +0xac225f18, 0x8fbf0018, 0x3e00008, 0x27bd0020, +0x0, 0x0, 0x0, 0x27bdffc8, +0xafb10024, 0x808821, 0xafb3002c, 0xa09821, +0xafb00020, 0xc08021, 0x3c040001, 0x24843c20, +0x3c050009, 0x3c020001, 0x8c423d18, 0x34a59001, +0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, +0xa7a0001a, 0xafb00014, 0xc0029d3, 0xafa20010, +0x24020002, 0x126200eb, 0x2e620003, 0x10400005, +0x24020001, 0x1262000a, 0x3c02fffb, 0x100000e5, +0x0, 0x24020004, 0x1262006d, 0x24020008, +0x1262006c, 0x3c02ffec, 0x100000de, 0x0, +0x3442ffff, 0x2028024, 0x119140, 0x3c010001, +0x320821, 0xac305f2c, 0x3c024000, 0x2021024, +0x10400046, 0x1023c2, 0x30840030, 0x101382, +0x3042000c, 0x3c030001, 0x24633d44, 0x431021, +0x823821, 0x3c020020, 0x2021024, 0x10400006, +0x24020100, 0x3c010001, 0x320821, 0xac225f30, +0x10000005, 0x3c020080, 0x3c010001, 0x320821, +0xac205f30, 0x3c020080, 0x2021024, 0x10400006, +0x111940, 0x3c020001, 0x3c010001, 0x230821, +0x10000005, 0xac225f38, 0x111140, 0x3c010001, +0x220821, 0xac205f38, 0x94e30000, 0x32024000, +0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018, +0x24040001, 0x94e20002, 0x24050004, 0x24e60002, +0x34420001, 0xc00420a, 0xa4e20002, 0x24040001, +0x2821, 0xc00420a, 0x27a60018, 0x3c020001, +0x8c423d18, 0x24110001, 0x3c010001, 0xac313d24, +0x14530004, 0x32028000, 0xc003bad, 0x0, +0x32028000, 0x10400097, 0x0, 0xc003bad, +0x0, 0x24020002, 0x3c010001, 0xac313d1c, +0x3c010001, 0x1000008f, 0xac223d18, 0x24040001, +0x24050004, 0x27b0001a, 0xc00420a, 0x2003021, +0x24040001, 0x2821, 0xc00420a, 0x2003021, +0x3c020001, 0x521021, 0x8c425f24, 0x3c040001, +0x8c843d18, 0x3c03bfff, 0x3463ffff, 0x3c010001, +0xac333d24, 0x431024, 0x3c010001, 0x320821, +0x10930076, 0xac225f24, 0x10000076, 0x0, +0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008, +0x2028025, 0x111140, 0x3c010001, 0x220821, +0xac305f28, 0x3c022000, 0x2021024, 0x10400009, +0x0, 0x3c020001, 0x8c423da4, 0x14400005, +0x24020001, 0x3c010001, 0xac223e58, 0x10000004, +0x3c024000, 0x3c010001, 0xac203e58, 0x3c024000, +0x2021024, 0x1440001a, 0x0, 0x3c020001, +0x8c423e58, 0x10400005, 0x24022020, 0x3c010001, +0xac223e5c, 0x24020001, 0xaee204b8, 0x3c04bfff, +0x111940, 0x3c020001, 0x431021, 0x8c425f20, +0x3c050001, 0x8ca53d18, 0x3484ffff, 0x441024, +0x3c010001, 0x230821, 0xac225f20, 0x24020001, +0x10a20044, 0x0, 0x10000040, 0x0, +0x3c020001, 0x8c423e58, 0x1040001c, 0x24022000, +0x3c010001, 0xac223e5c, 0x3c0300a0, 0x2031024, +0x14430005, 0x111140, 0x3402a000, 0x3c010001, +0x1000002d, 0xac223e5c, 0x3c030001, 0x621821, +0x8c635f28, 0x3c020020, 0x621024, 0x10400004, +0x24022001, 0x3c010001, 0x10000023, 0xac223e5c, +0x3c020080, 0x621024, 0x1040001f, 0x3402a001, +0x3c010001, 0x1000001c, 0xac223e5c, 0x3c020020, +0x2021024, 0x10400007, 0x111940, 0x24020100, +0x3c010001, 0x230821, 0xac225f34, 0x10000006, +0x3c020080, 0x111140, 0x3c010001, 0x220821, +0xac205f34, 0x3c020080, 0x2021024, 0x10400006, +0x111940, 0x3c020001, 0x3c010001, 0x230821, +0x10000005, 0xac225f3c, 0x111140, 0x3c010001, +0x220821, 0xac205f3c, 0x3c030001, 0x8c633d18, +0x24020001, 0x10620003, 0x0, 0xc003bad, +0x0, 0x8fbf0030, 0x8fb3002c, 0x8fb20028, +0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0038, +0x27bdffd0, 0xafb50028, 0x80a821, 0xafb20020, +0x9021, 0xafb30024, 0x9821, 0xafb1001c, +0x8821, 0x24020002, 0xafbf002c, 0xafb00018, +0xa7a00012, 0x10a20068, 0xa7a00010, 0x2ca20003, +0x10400005, 0x24020001, 0x10a2000a, 0x158140, +0x100000ae, 0x2201021, 0x24020004, 0x10a2005e, +0x24020008, 0x10a2005d, 0x152940, 0x100000a7, +0x2201021, 0x3c030001, 0x701821, 0x8c635f2c, +0x3c024000, 0x621024, 0x14400009, 0x24040001, +0x3c027fff, 0x3442ffff, 0x628824, 0x3c010001, +0x300821, 0xac315f24, 0x10000098, 0x2201021, +0x24050001, 0xc0041c8, 0x27a60010, 0x24040001, +0x24050001, 0xc0041c8, 0x27a60010, 0x97a20010, +0x30420004, 0x10400034, 0x3c114000, 0x3c030001, +0x8c633e70, 0x24020003, 0x10620008, 0x2c620004, +0x14400029, 0x3c028000, 0x24020004, 0x10620014, +0x24040001, 0x10000024, 0x3c028000, 0x24040001, +0x24050011, 0x27b00012, 0xc0041c8, 0x2003021, +0x24040001, 0x24050011, 0xc0041c8, 0x2003021, +0x97a30012, 0x30624000, 0x10400002, 0x3c130010, +0x3c130008, 0x3c120001, 0x10000010, 0x30628000, +0x24050014, 0x27b00012, 0xc0041c8, 0x2003021, +0x24040001, 0x24050014, 0xc0041c8, 0x2003021, +0x97a30012, 0x30621000, 0x10400002, 0x3c130010, +0x3c130008, 0x3c120001, 0x30620800, 0x54400001, +0x3c120002, 0x3c028000, 0x2221025, 0x2531825, +0x10000007, 0x438825, 0x3c110001, 0x2308821, +0x8e315f2c, 0x3c027fff, 0x3442ffff, 0x2228824, +0x151140, 0x3c010001, 0x220821, 0xac315f24, +0x1000004e, 0x2201021, 0x152940, 0x3c030001, +0x651821, 0x8c635f28, 0x3c024000, 0x621024, +0x14400008, 0x3c027fff, 0x3442ffff, 0x628824, +0x3c010001, 0x250821, 0xac315f20, 0x1000003f, +0x2201021, 0x3c020001, 0x8c423d28, 0x10400033, +0x3c11c00c, 0x3c020001, 0x8c423da4, 0x3c04c00c, +0x34842000, 0x3c030001, 0x8c633e58, 0x2102b, +0x21023, 0x441024, 0x10600003, 0x518825, +0x3c022000, 0x2228825, 0x3c020001, 0x451021, +0x8c425f34, 0x10400003, 0x3c020020, 0x10000004, +0x2228825, 0x3c02ffdf, 0x3442ffff, 0x2228824, +0x151140, 0x3c010001, 0x220821, 0x8c225f3c, +0x10400003, 0x3c020080, 0x10000004, 0x2228825, +0x3c02ff7f, 0x3442ffff, 0x2228824, 0x3c020001, +0x8c423d90, 0x10400002, 0x3c020800, 0x2228825, +0x3c020001, 0x8c423d94, 0x10400002, 0x3c020400, +0x2228825, 0x3c020001, 0x8c423d98, 0x10400006, +0x3c020100, 0x10000004, 0x2228825, 0x3c027fff, +0x3442ffff, 0x628824, 0x151140, 0x3c010001, +0x220821, 0xac315f20, 0x2201021, 0x8fbf002c, +0x8fb50028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, +0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffe0, +0xafb20018, 0x809021, 0xafbf001c, 0xafb10014, +0xafb00010, 0x8f840200, 0x3c030001, 0x8c633d18, +0x8f860220, 0x24020002, 0x106200a6, 0x2c620003, +0x10400005, 0x24020001, 0x1062000a, 0x121940, +0x100000a0, 0x0, 0x24020004, 0x10620053, +0x24020008, 0x10620052, 0x128940, 0x10000099, +0x0, 0x3c050001, 0xa32821, 0x8ca55f2c, +0x3c100001, 0x2038021, 0x8e105f24, 0x3c024000, +0xa21024, 0x10400038, 0x3c020008, 0x2021024, +0x10400020, 0x34840002, 0x3c020001, 0x431021, +0x8c425f30, 0x10400005, 0x34840020, 0x34840100, +0x3c020020, 0x10000006, 0x2028025, 0x2402feff, +0x822024, 0x3c02ffdf, 0x3442ffff, 0x2028024, +0x121140, 0x3c010001, 0x220821, 0x8c225f38, +0x10400005, 0x3c020001, 0xc23025, 0x3c020080, +0x10000016, 0x2028025, 0x3c02fffe, 0x3442ffff, +0xc23024, 0x3c02ff7f, 0x3442ffff, 0x1000000f, +0x2028024, 0x2402fedf, 0x822024, 0x3c02fffe, +0x3442ffff, 0xc23024, 0x3c02ff5f, 0x3442ffff, +0x2028024, 0x3c010001, 0x230821, 0xac205f30, +0x3c010001, 0x230821, 0xac205f38, 0xaf840200, +0xaf860220, 0x8f820220, 0x34420002, 0xaf820220, +0x1000000a, 0x121140, 0x3c02bfff, 0x3442ffff, +0x8f830200, 0x2028024, 0x2402fffd, 0x621824, +0xc003bad, 0xaf830200, 0x121140, 0x3c010001, +0x220821, 0x1000004b, 0xac305f24, 0x128940, +0x3c050001, 0xb12821, 0x8ca55f28, 0x3c100001, +0x2118021, 0x8e105f20, 0x3c024000, 0xa21024, +0x14400010, 0x0, 0x3c020001, 0x8c423e58, +0x14400005, 0x3c02bfff, 0x8f820200, 0x34420002, +0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc003bad, +0x2028024, 0x3c010001, 0x310821, 0x10000031, +0xac305f20, 0x3c020001, 0x8c423e58, 0x10400005, +0x3c020020, 0x3c020001, 0x8c423da4, 0x10400025, +0x3c020020, 0xa21024, 0x10400007, 0x34840020, +0x24020100, 0x3c010001, 0x310821, 0xac225f34, +0x10000006, 0x34840100, 0x3c010001, 0x310821, +0xac205f34, 0x2402feff, 0x822024, 0x3c020080, +0xa21024, 0x10400007, 0x121940, 0x3c020001, +0x3c010001, 0x230821, 0xac225f3c, 0x10000008, +0xc23025, 0x121140, 0x3c010001, 0x220821, +0xac205f3c, 0x3c02fffe, 0x3442ffff, 0xc23024, +0xaf840200, 0xaf860220, 0x8f820220, 0x34420002, +0xaf820220, 0x121140, 0x3c010001, 0x220821, +0xac305f20, 0x8fbf001c, 0x8fb20018, 0x8fb10014, +0x8fb00010, 0x3e00008, 0x27bd0020, 0x1821, +0x308400ff, 0x2405ffdf, 0x2406ffbf, 0x641007, +0x30420001, 0x10400004, 0x0, 0x8f820044, +0x10000003, 0x34420040, 0x8f820044, 0x461024, +0xaf820044, 0x8f820044, 0x34420020, 0xaf820044, +0x8f820044, 0x451024, 0xaf820044, 0x24630001, +0x28620008, 0x5440ffee, 0x641007, 0x3e00008, +0x0, 0x0, 0x0, 0x0 }; u32 tigon2FwRodata[(MAX_RODATA_LEN/4) + 1] __initdata = { -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x66776d61, -0x696e2e63, 0x2c762031, 0x2e312e34, 0x372e3420, 0x31393938, 0x2f31302f, -0x31342031, 0x393a3330, 0x3a323920, 0x73687561, 0x6e672045, 0x78702024, -0x0, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845, -0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400, -0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0, -0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00, -0x3f6d656d, 0x53697a65, 0x0, 0x65787453, 0x746b5067, 0x0, -0x4441574e, 0x2d310000, 0x4441574e, 0x2d320000, 0x4441574e, 0x2d330000, -0x5245445a, 0x4f4e4531, 0x0, 0x42616453, 0x6e64526e, 0x67000000, -0x496e666f, 0x2d336d42, 0x0, 0x76357373, 0x72616d00, 0x3f737731, -0x646d6100, 0x536e6443, 0x6b53756d, 0x0, 0x646d6141, 0x6c69676e, -0x0, 0x52637643, 0x6b53756d, 0x0, 0x496c6c43, 0x6f6e6652, -0x78000000, 0x766c616e, 0x52434200, 0x52656376, 0x566c616e, 0x0, -0x496e666f, 0x2d336d45, 0x0, 0x66774f50, 0x6661696c, 0x0, -0x696e7453, 0x746b4572, 0x0, 0x70726f62, 0x654d656d, 0x0, -0x436f7079, 0x0, 0x4e6f7443, 0x6f707900, 0x4441574e, 0x2d420000, -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x74696d65, -0x722e632c, 0x7620312e, 0x312e3139, 0x2e332031, 0x3939382f, 0x31302f30, -0x37203233, 0x3a34333a, 0x30302066, 0x6877616e, 0x67204578, 0x70202400, -0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0, -0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, -0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0, 0x656e714d, -0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00, 0x542d446d, -0x61526432, 0x0, 0x542d446d, 0x61526431, 0x0, 0x542d446d, -0x61526442, 0x0, 0x542d446d, 0x61577232, 0x0, 0x542d446d, -0x61577231, 0x0, 0x542d446d, 0x61577242, 0x0, 0x0, -0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, -0x6d6f6e2f, 0x636f6d6d, 0x616e642e, 0x632c7620, 0x312e312e, 0x322e3232, -0x20313939, 0x382f3037, 0x2f323920, 0x32323a33, 0x313a3030, 0x20736875, -0x616e6720, 0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0, -0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, -0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, -0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, -0x45765046, 0x61696c00, 0x3f4d626f, 0x78457674, 0x0, 0x68737465, -0x5f455252, 0x0, 0x6d437374, 0x4d644552, 0x52000000, 0x70726f6d, -0x4d644552, 0x52000000, 0x6c6e6b43, 0x6d644572, 0x72000000, 0x636d645f, -0x45525200, 0x0, 0x7fa0, 0x8630, 0x8630, 0x85ac, -0x835c, 0x85f8, 0x8630, 0x8080, 0x8090, 0x8178, -0x824c, 0x8218, 0x8630, 0x80a0, 0x8308, 0x8630, -0x8318, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, -0x6d6f6e2f, 0x6d636173, 0x742e632c, 0x7620312e, 0x312e322e, 0x35203139, -0x39382f30, 0x342f3234, 0x2030303a, 0x30303a33, 0x39206861, 0x79657320, -0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, -0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, -0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d, -0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046, -0x61696c00, 0x4d634164, 0x64447570, 0x0, 0x4d634164, 0x6446756c, -0x0, 0x4d634465, 0x6c4e6f45, 0x0, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x646d612e, 0x632c7620, 0x312e312e, -0x31322e33, 0x20313939, 0x382f3132, 0x2f303420, 0x32323a35, 0x313a3135, -0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, -0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c, -0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0, -0x6661696c, 0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000, -0x656e714d, 0x45765046, 0x61696c00, 0x646d6172, 0x6441544e, 0x0, -0x2a50414e, 0x49432a00, 0x2e2e2f2e, 0x2e2f2e2e, 0x2f2e2e2f, 0x2e2e2f73, -0x72632f6e, 0x69632f66, 0x77322f63, 0x6f6d6d6f, 0x6e2f646d, 0x612e6300, -0x646d6177, 0x7241544e, 0x0, 0x0, 0x0, 0x0, -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x74726163, -0x652e632c, 0x7620312e, 0x312e322e, 0x34203139, 0x39382f30, 0x342f3234, -0x2030303a, 0x30303a34, 0x35206861, 0x79657320, 0x45787020, 0x24000000, -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x64617461, -0x2e632c76, 0x20312e31, 0x2e322e34, 0x20313939, 0x382f3036, 0x2f323320, -0x30313a32, 0x393a3330, 0x20736875, 0x616e6720, 0x45787020, 0x24000000, -0x46575f56, 0x45525349, 0x4f4e3a20, 0x2331204d, 0x6f6e2044, 0x65632037, -0x2031343a, 0x35383a32, 0x34205053, 0x54203139, 0x39380000, 0x46575f43, -0x4f4d5049, 0x4c455f54, 0x494d453a, 0x2031343a, 0x35383a32, 0x34000000, -0x46575f43, 0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, 0x73000000, -0x46575f43, 0x4f4d5049, 0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465, -0x0, 0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149, 0x4e3a2065, -0x6e672e61, 0x6374656f, 0x6e2e636f, 0x6d000000, 0x46575f43, 0x4f4d5049, -0x4c45523a, 0x20676363, 0x20766572, 0x73696f6e, 0x20322e37, 0x2e320000, -0x0, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x6d656d2e, 0x632c7620, 0x312e312e, -0x322e3420, 0x31393938, 0x2f30342f, 0x32342030, 0x303a3030, 0x3a343020, -0x68617965, 0x73204578, 0x70202400, 0x0, 0x24486561, 0x6465723a, -0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, -0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x73656e64, 0x2e632c76, 0x20312e31, -0x2e32322e, 0x33203139, 0x39382f30, 0x392f3137, 0x2032313a, 0x32343a33, -0x38207368, 0x75616e67, 0x20457870, 0x20240000, 0x3f6e6f51, 0x64547845, -0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c, -0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0, -0x6661696c, 0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000, -0x656e714d, 0x45765046, 0x61696c00, 0x736e6464, 0x654e6f51, 0x20000000, -0x6e6f454e, 0x515f5458, 0x0, 0x736e6464, 0x744e6f51, 0x20000000, -0x756e6b72, 0x64747970, 0x65000000, 0x3f546370, 0x436b7375, 0x6d000000, -0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, -0x6d6f6e2f, 0x72656376, 0x2e632c76, 0x20312e31, 0x2e34322e, 0x33203139, -0x39382f31, 0x322f3034, 0x2030303a, 0x31303a33, 0x38207368, 0x75616e67, -0x20457870, 0x20240000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, -0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, -0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d, -0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046, -0x61696c00, 0x66726d32, 0x4c617267, 0x65000000, 0x72784e6f, 0x52784264, -0x0, 0x72785144, 0x6d447446, 0x0, 0x72785144, 0x6d614446, -0x0, 0x72785144, 0x6d614246, 0x0, 0x3f724264, 0x446d6146, -0x0, 0x3f724a42, 0x64446d46, 0x0, 0xdbe8, 0xdbe8, -0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, -0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, -0xdbe8, 0xdbd8, 0xdbd8, 0xdbd8, 0xdbe8, 0xdbe8, -0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0x572d444d, 0x41456e46, -0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, -0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, -0x6d6f6e2f, 0x6d61632e, 0x632c7620, 0x312e312e, 0x31372e31, 0x20313939, -0x382f3038, 0x2f323720, 0x32323a31, 0x333a3230, 0x20736875, 0x616e6720, -0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, -0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, -0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d, -0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046, -0x61696c00, 0x6d616374, 0x7841544e, 0x0, 0x684d6352, 0x7841746e, -0x0, 0x72656d61, 0x73737274, 0x0, 0x6c696e6b, 0x444f574e, -0x0, 0x6c696e6b, 0x55500000, 0x0, 0x0, 0x0, -0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, -0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x636b7375, -0x6d2e632c, 0x7620312e, 0x312e322e, 0x36203139, 0x39382f30, 0x362f3233, -0x2030313a, 0x32393a32, 0x37207368, 0x75616e67, 0x20457870, 0x20240000, -0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0, -0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, -0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0, 0x656e714d, -0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00, 0x0, -0x50726f62, 0x65506879, 0x0, 0x6c6e6b41, 0x53535254, 0x0, -0xf94c, 0xf97c, 0xf9a0, 0xf9cc, 0xf9f8, 0xfa0c, -0xfa48, 0xfdd0, 0xfaf8, 0xfc24, 0xfb44, 0xfc7c, -0xfca4, 0xfcd8, 0xfb88, 0xfdd0, 0xfbf0, 0xfc24, -0xfc4c, 0xfc7c, 0xfca4, 0xfcd8, 0xfd14, 0x0, -0x0, 0x0, 0x1032c, 0x103fc, 0x104d4, 0x105a4, -0x10600, 0x106dc, 0x10704, 0x107e0, 0x10808, 0x109b0, -0x109d8, 0x10b80, 0x10d78, 0x1100c, 0x10f20, 0x1100c, -0x11038, 0x10ba8, 0x10d50, 0x0, 0x1133c, 0x11390, -0x1140c, 0x11438, 0x11488, 0x114c4, 0x114f8, 0x11584, -0x1163c, 0x1170c, 0x1174c, 0x117d0, 0x117f4, 0x11904, -0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0, -0x73746d61, 0x634c4e4b, 0x0, 0x0, 0x0 }; +0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x66776d61, 0x696e2e63, 0x2c762031, 0x2e312e32, +0x2e343520, 0x31393939, 0x2f30312f, 0x32342030, +0x303a3130, 0x3a353520, 0x73687561, 0x6e672045, +0x78702024, 0x0, 0x65767452, 0x6e674600, +0x51657674, 0x46000000, 0x51657674, 0x505f4600, +0x4d657674, 0x526e6746, 0x0, 0x4d516576, +0x74460000, 0x4d516576, 0x505f4600, 0x5173436f, +0x6e495f46, 0x0, 0x5173436f, 0x6e734600, +0x51725072, 0x6f644600, 0x6261644d, 0x656d537a, +0x0, 0x68774677, 0x56657200, 0x62616448, +0x77566572, 0x0, 0x2a2a4441, 0x574e5f41, +0x0, 0x74785278, 0x4266537a, 0x0, +0x62664174, 0x6e4d726b, 0x0, 0x7265645a, +0x6f6e6531, 0x0, 0x70636943, 0x6f6e6600, +0x67656e43, 0x6f6e6600, 0x72636246, 0x6c616773, +0x0, 0x62616452, 0x78526362, 0x0, +0x676c6f62, 0x466c6773, 0x0, 0x2b5f6469, +0x73705f6c, 0x6f6f7000, 0x2b65765f, 0x68616e64, +0x6c657200, 0x63616e74, 0x31446d61, 0x0, +0x2b715f64, 0x6d615f74, 0x6f5f6e69, 0x635f636b, +0x73756d00, 0x2b685f73, 0x656e645f, 0x64617461, +0x5f726561, 0x64795f63, 0x6b73756d, 0x0, +0x2b685f64, 0x6d615f72, 0x645f6173, 0x73697374, +0x5f636b73, 0x756d0000, 0x74436b73, 0x6d4f6e00, +0x2b715f64, 0x6d615f74, 0x6f5f6e69, 0x63000000, +0x2b685f73, 0x656e645f, 0x64617461, 0x5f726561, +0x64790000, 0x2b685f64, 0x6d615f72, 0x645f6173, +0x73697374, 0x0, 0x74436b73, 0x6d4f6666, +0x0, 0x2b685f73, 0x656e645f, 0x62645f72, +0x65616479, 0x0, 0x68737453, 0x52696e67, +0x0, 0x62616453, 0x52696e67, 0x0, +0x6e696353, 0x52696e67, 0x0, 0x77446d61, +0x416c6c41, 0x0, 0x2b715f64, 0x6d615f74, +0x6f5f686f, 0x73745f63, 0x6b73756d, 0x0, +0x2b685f6d, 0x61635f72, 0x785f636f, 0x6d705f63, +0x6b73756d, 0x0, 0x2b685f64, 0x6d615f77, +0x725f6173, 0x73697374, 0x5f636b73, 0x756d0000, +0x72436b73, 0x6d4f6e00, 0x2b715f64, 0x6d615f74, +0x6f5f686f, 0x73740000, 0x2b685f6d, 0x61635f72, +0x785f636f, 0x6d700000, 0x2b685f64, 0x6d615f77, +0x725f6173, 0x73697374, 0x0, 0x72436b73, +0x6d4f6666, 0x0, 0x2b685f72, 0x6563765f, +0x62645f72, 0x65616479, 0x0, 0x2b685f72, +0x6563765f, 0x6a756d62, 0x6f5f6264, 0x5f726561, +0x64790000, 0x2b685f72, 0x6563765f, 0x6d696e69, +0x5f62645f, 0x72656164, 0x79000000, 0x2b6d685f, +0x636f6d6d, 0x616e6400, 0x2b685f74, 0x696d6572, +0x0, 0x2b685f64, 0x6f5f7570, 0x64617465, +0x5f74785f, 0x636f6e73, 0x0, 0x2b685f64, +0x6f5f7570, 0x64617465, 0x5f72785f, 0x70726f64, +0x0, 0x2b636b73, 0x756d3136, 0x0, +0x2b706565, 0x6b5f6d61, 0x635f7278, 0x0, +0x2b646571, 0x5f6d6163, 0x5f727800, 0x2b685f6d, +0x61635f72, 0x785f6174, 0x746e0000, 0x62616452, +0x6574537a, 0x0, 0x72784264, 0x4266537a, +0x0, 0x2b6e756c, 0x6c5f6861, 0x6e646c65, +0x72000000, 0x66774f70, 0x4661696c, 0x0, +0x2b685f75, 0x70646174, 0x655f6c65, 0x64360000, +0x2b685f75, 0x70646174, 0x655f6c65, 0x64320000, +0x696e7453, 0x74617465, 0x0, 0x2a2a696e, +0x69744370, 0x0, 0x23736372, 0x65616d00, +0x69537461, 0x636b4572, 0x0, 0x70726f62, +0x654d656d, 0x0, 0x2a2a4441, 0x574e5f42, +0x0, 0x2b73775f, 0x646d615f, 0x61737369, +0x73745f70, 0x6c75735f, 0x74696d65, 0x72000000, +0x2b267072, 0x656c6f61, 0x645f7772, 0x5f646573, +0x63720000, 0x2b267072, 0x656c6f61, 0x645f7264, +0x5f646573, 0x63720000, 0x2b685f68, 0x665f7469, +0x6d657200, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x74696d65, 0x722e632c, 0x7620312e, 0x312e322e, +0x33352031, 0x3939392f, 0x30312f32, 0x37203139, +0x3a30393a, 0x35302068, 0x61796573, 0x20457870, +0x20240000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x542d446d, 0x61526432, 0x0, +0x542d446d, 0x61526431, 0x0, 0x542d446d, +0x61526442, 0x0, 0x542d446d, 0x61577232, +0x0, 0x542d446d, 0x61577231, 0x0, +0x542d446d, 0x61577242, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x636f6d6d, 0x616e642e, 0x632c7620, 0x312e312e, +0x322e3238, 0x20313939, 0x392f3031, 0x2f323020, +0x31393a34, 0x393a3439, 0x20736875, 0x616e6720, +0x45787020, 0x24000000, 0x65767452, 0x6e674600, +0x51657674, 0x46000000, 0x51657674, 0x505f4600, +0x4d657674, 0x526e6746, 0x0, 0x4d516576, +0x74460000, 0x4d516576, 0x505f4600, 0x5173436f, +0x6e495f46, 0x0, 0x5173436f, 0x6e734600, +0x51725072, 0x6f644600, 0x3f48636d, 0x644d6278, +0x0, 0x3f636d64, 0x48737453, 0x0, +0x3f636d64, 0x4d634d64, 0x0, 0x3f636d64, +0x50726f6d, 0x0, 0x3f636d64, 0x4c696e6b, +0x0, 0x3f636d64, 0x45727200, 0x811c, +0x8898, 0x8898, 0x8820, 0x85c4, +0x886c, 0x8898, 0x81f4, 0x8258, +0x83dc, 0x84b4, 0x8480, 0x8898, +0x82bc, 0x8570, 0x8898, 0x8580, +0x8218, 0x827c, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x6d636173, 0x742e632c, 0x7620312e, 0x312e322e, +0x38203139, 0x39382f31, 0x322f3038, 0x2030323a, +0x33363a33, 0x36207368, 0x75616e67, 0x20457870, +0x20240000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x6164644d, 0x63447570, 0x0, +0x6164644d, 0x6346756c, 0x0, 0x64656c4d, +0x634e6f45, 0x0, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x646d612e, 0x632c7620, 0x312e312e, 0x322e3234, +0x20313939, 0x382f3132, 0x2f323120, 0x30303a33, +0x333a3039, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x7377446d, 0x614f6666, 0x0, +0x31446d61, 0x4f6e0000, 0x7377446d, 0x614f6e00, +0x2372446d, 0x6141544e, 0x0, 0x72446d61, +0x41544e30, 0x0, 0x72446d61, 0x41544e31, +0x0, 0x2a50414e, 0x49432a00, 0x2e2e2f2e, +0x2e2f2e2e, 0x2f2e2e2f, 0x2e2e2f73, 0x72632f6e, +0x69632f66, 0x77322f63, 0x6f6d6d6f, 0x6e2f646d, +0x612e6300, 0x2377446d, 0x6141544e, 0x0, +0x77446d61, 0x41544e30, 0x0, 0x77446d61, +0x41544e31, 0x0, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x74726163, 0x652e632c, 0x7620312e, 0x312e322e, +0x35203139, 0x39382f30, 0x392f3330, 0x2031383a, +0x35303a32, 0x38207368, 0x75616e67, 0x20457870, +0x20240000, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x64617461, 0x2e632c76, 0x20312e31, 0x2e322e31, +0x32203139, 0x39392f30, 0x312f3230, 0x2031393a, +0x34393a35, 0x31207368, 0x75616e67, 0x20457870, +0x20240000, 0x46575f56, 0x45525349, 0x4f4e3a20, +0x2331204d, 0x6f6e2046, 0x65622031, 0x2031373a, +0x30313a30, 0x36205053, 0x54203139, 0x39390000, +0x46575f43, 0x4f4d5049, 0x4c455f54, 0x494d453a, +0x2031373a, 0x30313a30, 0x36000000, 0x46575f43, +0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, +0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48, +0x4f53543a, 0x20636f6d, 0x70757465, 0x0, +0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149, +0x4e3a2065, 0x6e672e61, 0x6374656f, 0x6e2e636f, +0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a, +0x20676363, 0x20766572, 0x73696f6e, 0x20322e37, +0x2e320000, 0x0, 0x12030303, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x6d656d2e, 0x632c7620, 0x312e312e, 0x322e3520, +0x31393938, 0x2f30392f, 0x33302031, 0x383a3530, +0x3a303820, 0x73687561, 0x6e672045, 0x78702024, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x73656e64, 0x2e632c76, 0x20312e31, 0x2e322e34, +0x34203139, 0x39382f31, 0x322f3231, 0x2030303a, +0x33333a31, 0x38207368, 0x75616e67, 0x20457870, +0x20240000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x69736e74, 0x54637055, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x72656376, 0x2e632c76, 0x20312e31, 0x2e322e35, +0x33203139, 0x39392f30, 0x312f3136, 0x2030323a, +0x35353a34, 0x33207368, 0x75616e67, 0x20457870, +0x20240000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x72784672, 0x6d324c67, 0x0, +0x72784e6f, 0x53744264, 0x0, 0x72784e6f, +0x4d694264, 0x0, 0x72784e6f, 0x4a6d4264, +0x0, 0x7278436b, 0x446d6146, 0x0, +0x72785144, 0x6d457846, 0x0, 0x72785144, +0x6d614600, 0x72785144, 0x4c426446, 0x0, +0x72785144, 0x6d426446, 0x0, 0x72784372, +0x63506164, 0x0, 0x72536d51, 0x446d6146, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x6d61632e, 0x632c7620, 0x312e312e, 0x322e3232, +0x20313939, 0x382f3132, 0x2f303820, 0x30323a33, +0x363a3330, 0x20736875, 0x616e6720, 0x45787020, +0x24000000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x6d616354, 0x68726573, 0x0, +0x23744d61, 0x6341544e, 0x0, 0x23724d61, +0x6341544e, 0x0, 0x72656d41, 0x73737274, +0x0, 0x6c696e6b, 0x444f574e, 0x0, +0x6c696e6b, 0x55500000, 0x0, 0x0, +0x0, 0x24486561, 0x6465723a, 0x202f7072, +0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, +0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, +0x636b7375, 0x6d2e632c, 0x7620312e, 0x312e322e, +0x39203139, 0x39392f30, 0x312f3134, 0x2030303a, +0x30333a34, 0x38207368, 0x75616e67, 0x20457870, +0x20240000, 0x65767452, 0x6e674600, 0x51657674, +0x46000000, 0x51657674, 0x505f4600, 0x4d657674, +0x526e6746, 0x0, 0x4d516576, 0x74460000, +0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, +0x0, 0x5173436f, 0x6e734600, 0x51725072, +0x6f644600, 0x50726f62, 0x65506879, 0x0, +0x6c6e6b41, 0x53535254, 0x0, 0xff04, +0xff34, 0xff4c, 0xff78, 0xffa4, +0xffb8, 0xfff4, 0x10394, 0x10174, +0x101ac, 0x100a4, 0x10200, 0x10228, +0x1025c, 0x100e8, 0x10394, 0x10174, +0x101ac, 0x101d0, 0x10200, 0x10228, +0x1025c, 0x10288, 0x0, 0x0, +0x0, 0x1097c, 0x10a4c, 0x10b24, +0x10bf4, 0x10c50, 0x10d2c, 0x10d54, +0x10e30, 0x10e58, 0x11000, 0x11028, +0x111d0, 0x113c8, 0x1165c, 0x11570, +0x1165c, 0x11688, 0x111f8, 0x113a0, +0x0, 0x1198c, 0x119cc, 0x11a5c, +0x11aa0, 0x11b04, 0x11b90, 0x11bc4, +0x11c4c, 0x11ce4, 0x11db4, 0x11df4, +0x11e78, 0x11e9c, 0x11fac, 0x646f4261, +0x73655067, 0x0, 0x0, 0x0, +0x0, 0x73746d61, 0x634c4e4b, 0x0, +0x0, 0x0 }; +u32 tigon2FwData[(MAX_DATA_LEN/4) + 1] __initdata = { +0x1, +0x1, 0x1, 0xc001fc, 0x3ffc, +0xc00000, 0x416c7465, 0x6f6e2041, 0x63654e49, +0x43205600, 0x0, 0x0, 0x416c7465, +0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242, +0x0, 0x0, 0x0, 0x1ffffc, +0x1fff7c, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x60cf00, +0x60, 0xcf000000, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x3, 0x0, +0x1, 0x0, 0x0, 0x1, +0x0, 0x0, 0x0, 0x1, +0x0, 0x0, 0x0, 0x0, +0x0, 0x1000000, 0x21000000, 0x12000140, +0x0, 0x0, 0x20000000, 0x120000a0, +0x0, 0x12000060, 0x12000180, 0x120001e0, +0x0, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x2, +0x0, 0x0, 0x30001, 0x1, +0x30201, 0x0, 0x0, 0x0 }; diff --git a/drivers/net/ariadne.c b/drivers/net/ariadne.c index baaa59692..8a1cd4e9d 100644 --- a/drivers/net/ariadne.c +++ b/drivers/net/ariadne.c @@ -171,6 +171,8 @@ __initfunc(int ariadne_probe(struct device *dev)) init_etherdev(dev, 0); dev->priv = kmalloc(sizeof(struct ariadne_private), GFP_KERNEL); + if (dev->priv == NULL) + return -ENOMEM; priv = (struct ariadne_private *)dev->priv; memset(priv, 0, sizeof(struct ariadne_private)); diff --git a/drivers/net/bsd_comp.c b/drivers/net/bsd_comp.c index aab014bc1..073a7392a 100644 --- a/drivers/net/bsd_comp.c +++ b/drivers/net/bsd_comp.c @@ -70,7 +70,6 @@ #include #include #include -#include /* to get the struct task_struct */ #include /* used in new tty drivers */ #include /* used in new tty drivers */ diff --git a/drivers/net/cosa.c b/drivers/net/cosa.c index 5c76aa0d4..69f8bb0d8 100644 --- a/drivers/net/cosa.c +++ b/drivers/net/cosa.c @@ -1,4 +1,4 @@ -/* $Id: cosa.c,v 1.11 1998/12/24 23:44:23 kas Exp $ */ +/* $Id: cosa.c,v 1.21 1999/02/06 19:49:18 kas Exp $ */ /* * Copyright (C) 1995-1997 Jan "Yenya" Kasprzak @@ -27,7 +27,7 @@ * Masaryk University (http://www.ics.muni.cz/). The hardware is * developed by Jiri Novotny . More information * and the photo of both cards is available at - * http://www.kozakmartin.cz/cosa.html. The card documentation, firmwares + * http://www.pavoucek.cz/cosa.html. The card documentation, firmwares * and other goods can be downloaded from ftp://ftp.ics.muni.cz/pub/cosa/. * For Linux-specific utilities, see below in the "Software info" section. * If you want to order the card, contact Jiri Novotny. @@ -141,11 +141,13 @@ struct cosa_data { unsigned int datareg, statusreg; /* I/O ports */ unsigned short irq, dma; /* IRQ and DMA number */ unsigned short startaddr; /* Firmware start address */ + unsigned short busmaster; /* Use busmastering? */ int nchannels; /* # of channels on this card */ int driver_status; /* For communicating with firware */ int firmware_status; /* Downloaded, reseted, etc. */ int rxbitmap, txbitmap; /* Bitmap of channels who are willing to send/receive data */ int rxtx; /* RX or TX in progress? */ + int enabled; int usage; /* usage count */ int txchan, txsize, rxsize; struct channel_data *rxchan; @@ -331,9 +333,8 @@ static int cosa_reset_and_read_id(struct cosa_data *cosa, char *id); static int get_wait_data(struct cosa_data *cosa); static int put_wait_data(struct cosa_data *cosa, int data); static int puthexnumber(struct cosa_data *cosa, int number); -static void put_driver_status_common(struct cosa_data *cosa, int nolock); -#define put_driver_status(x) put_driver_status_common((x), 0) -#define put_driver_status_nolock(x) put_driver_status_common((x), 1) +static void put_driver_status(struct cosa_data *cosa); +static void put_driver_status_nolock(struct cosa_data *cosa); /* Interrupt handling */ static void cosa_interrupt(int irq, void *cosa, struct pt_regs *regs); @@ -357,7 +358,7 @@ __initfunc(static int cosa_init(void)) #endif { int i; - printk(KERN_INFO "cosa v1.03 (c) 1997-8 Jan Kasprzak \n"); + printk(KERN_INFO "cosa v1.04 (c) 1997-8 Jan Kasprzak \n"); #ifdef __SMP__ printk(KERN_INFO "cosa: SMP found. Please mail any success/failure reports to the author.\n"); #endif @@ -630,9 +631,14 @@ static int cosa_sppp_tx(struct sk_buff *skb, struct device *dev) if (dev->tbusy) { if (time_before(jiffies, dev->trans_start+2*HZ)) return 1; /* Two seconds timeout */ + if (test_bit(RXBIT, &chan->cosa->rxtx)) { + chan->stats.rx_errors++; + chan->stats.rx_missed_errors++; + } else { + chan->stats.tx_errors++; + chan->stats.tx_aborted_errors++; + } cosa_kick(chan->cosa); - chan->stats.tx_errors++; - chan->stats.tx_aborted_errors++; if (chan->tx_skb) { dev_kfree_skb(chan->tx_skb); chan->tx_skb = 0; @@ -659,6 +665,14 @@ static int cosa_sppp_close(struct device *d) d->tbusy = 1; cosa_disable_rx(chan); spin_lock_irqsave(&chan->cosa->lock, flags); + if (chan->rx_skb) { + kfree_skb(chan->rx_skb); + chan->rx_skb = 0; + } + if (chan->tx_skb) { + kfree_skb(chan->tx_skb); + chan->tx_skb = 0; + } chan->usage=0; chan->cosa->usage--; MOD_DEC_USE_COUNT; @@ -1128,6 +1142,17 @@ static int cosa_ioctl_common(struct cosa_data *cosa, return nr_cards; case COSAIONRCHANS: return cosa->nchannels; + case COSAIOBMSET: + if (!suser()) + return -EACCES; + if (is_8bit(cosa)) + return -EINVAL; + if (arg != COSA_BM_OFF && arg != COSA_BM_ON) + return -EINVAL; + cosa->busmaster = arg; + return 0; + case COSAIOBMGET: + return cosa->busmaster; } return -ENOIOCTLCMD; } @@ -1208,37 +1233,67 @@ static int cosa_start_tx(struct channel_data *chan, char *buf, int len) return 0; } -static void put_driver_status_common(struct cosa_data *cosa, int nolock) +static void put_driver_status(struct cosa_data *cosa) { unsigned flags=0; int status; - if (!nolock) - spin_lock_irqsave(&cosa->lock, flags); + spin_lock_irqsave(&cosa->lock, flags); status = (cosa->rxbitmap ? DRIVER_RX_READY : 0) | (cosa->txbitmap ? DRIVER_TX_READY : 0) | (cosa->txbitmap? ~(cosa->txbitmap<rxtx || nolock) { -#ifdef DEBUG_IO - debug_data_cmd(cosa, status); -#endif - cosa_putdata8(cosa, status); + if (!cosa->rxtx) { if (cosa->rxbitmap|cosa->txbitmap) { - cosa_putstatus(cosa, SR_RX_INT_ENA); + if (!cosa->enabled) { + cosa_putstatus(cosa, SR_RX_INT_ENA); #ifdef DEBUG_IO - debug_status_out(cosa, SR_RX_INT_ENA); + debug_status_out(cosa, SR_RX_INT_ENA); #endif - } else { + cosa->enabled = 1; + } + } else if (cosa->enabled) { + cosa->enabled = 0; cosa_putstatus(cosa, 0); #ifdef DEBUG_IO debug_status_out(cosa, 0); #endif } + cosa_putdata8(cosa, status); +#ifdef DEBUG_IO + debug_data_cmd(cosa, status); +#endif } - if (!nolock) - spin_unlock_irqrestore(&cosa->lock, flags); + spin_unlock_irqrestore(&cosa->lock, flags); +} + +static void put_driver_status_nolock(struct cosa_data *cosa) +{ + int status; + + status = (cosa->rxbitmap ? DRIVER_RX_READY : 0) + | (cosa->txbitmap ? DRIVER_TX_READY : 0) + | (cosa->txbitmap? ~(cosa->txbitmap<rxbitmap|cosa->txbitmap) { + cosa_putstatus(cosa, SR_RX_INT_ENA); +#ifdef DEBUG_IO + debug_status_out(cosa, SR_RX_INT_ENA); +#endif + cosa->enabled = 1; + } else { + cosa_putstatus(cosa, 0); +#ifdef DEBUG_IO + debug_status_out(cosa, 0); +#endif + cosa->enabled = 0; + } + cosa_putdata8(cosa, status); +#ifdef DEBUG_IO + debug_data_cmd(cosa, status); +#endif } /* @@ -1249,9 +1304,14 @@ static void put_driver_status_common(struct cosa_data *cosa, int nolock) static void cosa_kick(struct cosa_data *cosa) { unsigned flags, flags1; + char *s = "Unknown"; - printk(KERN_INFO "%s: DMA timeout - restarting.\n", cosa->name); + if (test_bit(RXBIT, &cosa->rxtx)) + s = "RX"; + if (test_bit(TXBIT, &cosa->rxtx)) + s = "TX"; + printk(KERN_INFO "%s: %s DMA timeout - restarting.\n", cosa->name, s); spin_lock_irqsave(&cosa->lock, flags); cosa->rxtx = 0; @@ -1261,6 +1321,13 @@ static void cosa_kick(struct cosa_data *cosa) release_dma_lock(flags1); /* FIXME: Anything else? */ + udelay(100); + cosa_putstatus(cosa, 0); + udelay(100); + (void) cosa_getdata8(cosa); + udelay(100); + cosa_putdata8(cosa, 0); + udelay(100); put_driver_status_nolock(cosa); spin_unlock_irqrestore(&cosa->lock, flags); } @@ -1556,6 +1623,10 @@ static int puthexnumber(struct cosa_data *cosa, int number) * COSA status byte. I have moved the rx/tx/eot interrupt handling into * separate functions to make it more readable. These functions are inline, * so there should be no overhead of function call. + * + * In the COSA bus-master mode, we need to tell the card the address of a + * buffer. Unfortunately, COSA may be too slow for us, so we must busy-wait. + * It's time to use the bottom half :-( */ /* @@ -1606,13 +1677,13 @@ static inline void tx_interrupt(struct cosa_data *cosa, int status) if (is_8bit(cosa)) { if (!test_bit(IRQBIT, &cosa->rxtx)) { + cosa_putstatus(cosa, SR_TX_INT_ENA); cosa_putdata8(cosa, ((cosa->txchan << 5) & 0xe0)| ((cosa->txsize >> 8) & 0x1f)); - cosa_putstatus(cosa, SR_TX_INT_ENA); #ifdef DEBUG_IO + debug_status_out(cosa, SR_TX_INT_ENA); debug_data_out(cosa, ((cosa->txchan << 5) & 0xe0)| ((cosa->txsize >> 8) & 0x1f)); - debug_status_out(cosa, SR_TX_INT_ENA); debug_data_in(cosa, cosa_getdata8(cosa)); #else cosa_getdata8(cosa); @@ -1630,27 +1701,57 @@ static inline void tx_interrupt(struct cosa_data *cosa, int status) #endif } } else { + cosa_putstatus(cosa, SR_TX_INT_ENA); cosa_putdata16(cosa, ((cosa->txchan<<13) & 0xe000) | (cosa->txsize & 0x1fff)); - cosa_getdata16(cosa); #ifdef DEBUG_IO - debug_status_out(cosa, ((cosa->txchan<<13) & 0xe000) + debug_status_out(cosa, SR_TX_INT_ENA); + debug_data_out(cosa, ((cosa->txchan<<13) & 0xe000) | (cosa->txsize & 0x1fff)); - debug_data_in(cosa, cosa_getdata16(cosa)); + debug_data_in(cosa, cosa_getdata8(cosa)); + debug_status_out(cosa, 0); #else - cosa_getdata16(cosa); + cosa_getdata8(cosa); #endif + cosa_putstatus(cosa, 0); } - /* start the DMA */ - flags1 = claim_dma_lock(); - disable_dma(cosa->dma); - clear_dma_ff(cosa->dma); - set_dma_mode(cosa->dma, DMA_MODE_WRITE); - set_dma_addr(cosa->dma, virt_to_bus(cosa->txbuf)); - set_dma_count(cosa->dma, cosa->txsize); - enable_dma(cosa->dma); - release_dma_lock(flags1); + if (cosa->busmaster) { + unsigned long addr = virt_to_bus(cosa->txbuf); + int count=0; + printk(KERN_INFO "busmaster IRQ\n"); + while (!(cosa_getstatus(cosa)&SR_TX_RDY)) { + count++; + udelay(10); + if (count > 1000) break; + } + printk(KERN_INFO "status %x\n", cosa_getstatus(cosa)); + printk(KERN_INFO "ready after %d loops\n", count); + cosa_putdata16(cosa, (addr >> 16)&0xffff); + + count = 0; + while (!(cosa_getstatus(cosa)&SR_TX_RDY)) { + count++; + if (count > 1000) break; + udelay(10); + } + printk(KERN_INFO "ready after %d loops\n", count); + cosa_putdata16(cosa, addr &0xffff); + flags1 = claim_dma_lock(); + set_dma_mode(cosa->dma, DMA_MODE_CASCADE); + enable_dma(cosa->dma); + release_dma_lock(flags1); + } else { + /* start the DMA */ + flags1 = claim_dma_lock(); + disable_dma(cosa->dma); + clear_dma_ff(cosa->dma); + set_dma_mode(cosa->dma, DMA_MODE_WRITE); + set_dma_addr(cosa->dma, virt_to_bus(cosa->txbuf)); + set_dma_count(cosa->dma, cosa->txsize); + enable_dma(cosa->dma); + release_dma_lock(flags1); + } cosa_putstatus(cosa, SR_TX_DMA_ENA|SR_USR_INT_ENA); #ifdef DEBUG_IO debug_status_out(cosa, SR_TX_DMA_ENA|SR_USR_INT_ENA); @@ -1671,21 +1772,16 @@ static inline void rx_interrupt(struct cosa_data *cosa, int status) if (is_8bit(cosa)) { if (!test_bit(IRQBIT, &cosa->rxtx)) { set_bit(IRQBIT, &cosa->rxtx); - cosa_putstatus(cosa, 0); cosa->rxsize = cosa_getdata8(cosa) <<8; #ifdef DEBUG_IO - debug_status_out(cosa, 0); debug_data_in(cosa, cosa->rxsize >> 8); #endif - put_driver_status_nolock(cosa); spin_unlock_irqrestore(&cosa->lock, flags); return; } else { clear_bit(IRQBIT, &cosa->rxtx); - cosa_putstatus(cosa, 0); cosa->rxsize |= cosa_getdata8(cosa) & 0xff; #ifdef DEBUG_IO - debug_status_out(cosa, 0); debug_data_in(cosa, cosa->rxsize & 0xff); #endif #if 0 @@ -1695,12 +1791,8 @@ static inline void rx_interrupt(struct cosa_data *cosa, int status) } } else { cosa->rxsize = cosa_getdata16(cosa); - cosa_putstatus(cosa, 0); - cosa_putdata8(cosa, DRIVER_RX_READY); #ifdef DEBUG_IO debug_data_in(cosa, cosa->rxsize); - debug_status_out(cosa, 0); - debug_cmd_out(cosa, DRIVER_RX_READY); #endif #if 0 printk(KERN_INFO "cosa%d: receive rxsize = (0x%04x).\n", @@ -1725,10 +1817,7 @@ static inline void rx_interrupt(struct cosa_data *cosa, int status) reject: /* Reject the packet */ printk(KERN_INFO "cosa%d: rejecting packet on channel %d\n", cosa->num, cosa->rxchan->num); - /* FIXME: This works for COSA only (not SRP) */ - cosa->rxtx = 0; - put_driver_status(cosa); - return; + cosa->rxbuf = cosa->bouncebuf; } /* start the DMA */ @@ -1746,8 +1835,12 @@ reject: /* Reject the packet */ release_dma_lock(flags); spin_lock_irqsave(&cosa->lock, flags); cosa_putstatus(cosa, SR_RX_DMA_ENA|SR_USR_INT_ENA); + if (!is_8bit(cosa) && (status & SR_TX_RDY)) + cosa_putdata8(cosa, DRIVER_RX_READY); #ifdef DEBUG_IO debug_status_out(cosa, SR_RX_DMA_ENA|SR_USR_INT_ENA); + if (!is_8bit(cosa) && (status & SR_TX_RDY)) + debug_data_cmd(cosa, DRIVER_RX_READY); #endif spin_unlock_irqrestore(&cosa->lock, flags); } @@ -1756,11 +1849,12 @@ static void inline eot_interrupt(struct cosa_data *cosa, int status) { unsigned long flags, flags1; spin_lock_irqsave(&cosa->lock, flags); + flags1 = claim_dma_lock(); + disable_dma(cosa->dma); + clear_dma_ff(cosa->dma); + release_dma_lock(flags1); if (test_bit(TXBIT, &cosa->rxtx)) { struct channel_data *chan = cosa->chan+cosa->txchan; -#ifdef DEBUG_IRQS - printk(KERN_INFO "cosa%d: end of transfer.\n", cosa->num); -#endif if (chan->tx_done) if (chan->tx_done(chan, cosa->txsize)) clear_bit(chan->num, &cosa->txbitmap); @@ -1775,6 +1869,9 @@ static void inline eot_interrupt(struct cosa_data *cosa, int status) printk("\n"); } #endif + /* Packet for unknown channel? */ + if (cosa->rxbuf == cosa->bouncebuf) + goto out; if (!cosa_dma_able(cosa->rxchan, cosa->rxbuf, cosa->rxsize)) memcpy(cosa->rxbuf, cosa->bouncebuf, cosa->rxsize); if (cosa->rxchan->rx_done) @@ -1786,12 +1883,11 @@ static void inline eot_interrupt(struct cosa_data *cosa, int status) } /* * Clear the RXBIT, TXBIT and IRQBIT (the latest should be - * cleared anyway). + * cleared anyway). We should do it as soon as possible + * so that we can tell the COSA we are done and to give it a time + * for recovery. */ - flags1 = claim_dma_lock(); - disable_dma(cosa->dma); - clear_dma_ff(cosa->dma); - release_dma_lock(flags1); +out: cosa->rxtx = 0; put_driver_status_nolock(cosa); spin_unlock_irqrestore(&cosa->lock, flags); @@ -1799,7 +1895,7 @@ static void inline eot_interrupt(struct cosa_data *cosa, int status) static void cosa_interrupt(int irq, void *cosa_, struct pt_regs *regs) { - int status; + unsigned status; int count = 0; struct cosa_data *cosa = cosa_; again: diff --git a/drivers/net/cosa.h b/drivers/net/cosa.h index 09f2e243d..7b5a39018 100644 --- a/drivers/net/cosa.h +++ b/drivers/net/cosa.h @@ -1,4 +1,4 @@ -/* $Id: cosa.h,v 1.5 1998/12/24 12:40:18 kas Exp $ */ +/* $Id: cosa.h,v 1.6 1999/01/06 14:02:44 kas Exp $ */ /* * Copyright (C) 1995-1997 Jan "Yenya" Kasprzak @@ -99,4 +99,13 @@ struct cosa_download { /* Get the number of channels on this card */ #define COSAIONRCHANS _IO('C',0xf8) +/* Set the driver for the bus-master operations */ +#define COSAIOBMSET _IOW('C', 0xf9, sizeof(unsigned short)) + +#define COSA_BM_OFF 0 /* Bus-mastering off - use ISA DMA (default) */ +#define COSA_BM_ON 1 /* Bus-mastering on - faster but untested */ + +/* Gets the busmaster status */ +#define COSAIOBMGET _IO('C', 0xfa) + #endif /* !COSA_H__ */ diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index a5e0c68b2..94fb660a7 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c @@ -991,22 +991,26 @@ static struct device dev_cs89x0 = { 0, 0, 0, 0, 0, NULL, NULL }; -int io=0; -int irq=0; -#endif -#ifdef MODULE -int debug=1; -char *media="auto"; -char *duplex="f"; +static int io=0; +static int irq=0; +static int debug=0; +static char media[8]; +static int duplex=-1; + +MODULE_PARM(io, "i"); +MODULE_PARM(irq, "i"); +MODULE_PARM(debug, "i"); +MODULE_PARM(media, "s"); +MODULE_PARM(duplex, "i"); + +EXPORT_NO_SYMBOLS; /* * media=t - specify media type or media=2 or media=aui or medai=auto -* duplex=f - specify forced half/full/autonegotiate duplex - or duplex=h - or duplex=auto +* duplex=0 - specify forced half/full/autonegotiate duplex * debug=# - debug level @@ -1044,12 +1048,14 @@ init_module(void) /* boy, they'd better get these right */ if (!strcmp(media, "rj45")) lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T; - if (!strcmp(media, "aui")) + else if (!strcmp(media, "aui")) lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI; - if (!strcmp(media, "bnc")) + else if (!strcmp(media, "bnc")) lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2; + else + lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T; - if (!strcmp(duplex, "auto")) + if (duplex==-1) lp->auto_neg_cnf = AUTO_NEG_ENABLE; if (io == 0) { diff --git a/drivers/net/de4x5.c b/drivers/net/de4x5.c index 0ce0e89f9..f0edae261 100644 --- a/drivers/net/de4x5.c +++ b/drivers/net/de4x5.c @@ -225,12 +225,19 @@ to determine this in advance other than by trial and error and common sense, e.g. call a BNC connectored port 'BNC', not '10Mb'. - TO DO: + Changed the bus probing. EISA used to be done first, followed by PCI. + Most people probably don't even know what a de425 is today and the EISA + probe has messed up some SCSI cards in the past, so now PCI is always + probed first followed by EISA if a) the architecture allows EISA and + either b) there have been no PCI cards detected or c) an EISA probe is + forced by the user. To force a probe include "force_eisa" in your + insmod "args" line; for built-in kernels either change the driver to do + this automatically or include #define DE4X5_FORCE_EISA on or before + line 1040 in the driver. + + TO DO: ------ - o check what revision numbers the 21142 and 21143 have - o - Revision History ---------------- @@ -416,11 +423,14 @@ access traps. This flag is merely for log messages: should do something more definitive though... 0.543 30-Dec-98 Add SMP spin locking. - + 0.544 8-May-99 Fix for buggy SROM in Motorola embedded boards using + a 21143 by . + Change PCI/EISA bus probing order. + ========================================================================= */ -static const char *version = "de4x5.c:V0.543 1998/12/30 davies@maniac.ultranet.com\n"; +static const char *version = "de4x5.c:V0.544 1999/5/8 davies@maniac.ultranet.com\n"; #include #include @@ -1027,8 +1037,11 @@ static char name[DE4X5_NAME_LENGTH + 1]; #if !defined(__sparc_v9__) && !defined(__powerpc__) && !defined(__alpha__) static u_char de4x5_irq[] = EISA_ALLOWED_IRQ_LIST; static int lastEISA = 0; -#else -static int lastEISA = MAX_EISA_SLOTS; /* Only PCI probes */ +# ifdef DE4X5_FORCE_EISA /* Force an EISA bus probe or not */ +static int forceEISA = 1; +# else +static int forceEISA = 0; +# endif #endif static int num_de4x5s = 0; static int cfrv = 0, useSROM = 0; @@ -1098,12 +1111,12 @@ de4x5_probe(struct device *dev)) { u_long iobase = dev->base_addr; + pci_probe(dev, iobase); #if !defined(__sparc_v9__) && !defined(__powerpc__) && !defined(__alpha__) - eisa_probe(dev, iobase); -#endif - if (lastEISA == MAX_EISA_SLOTS) { - pci_probe(dev, iobase); + if ((lastPCI == NO_MORE_PCI) && ((num_de4x5s == 0) || forceEISA)) { + eisa_probe(dev, iobase); } +#endif return (dev->priv ? 0 : -ENODEV); } @@ -1230,6 +1243,7 @@ de4x5_hw_init(struct device *dev, u_long iobase)) if ((tmp = (void *)kmalloc(RX_BUFF_SZ * NUM_RX_DESC + ALIGN, GFP_KERNEL)) == NULL) { kfree(lp->cache.priv); + lp->cache.priv = NULL; return -ENOMEM; } @@ -2066,38 +2080,36 @@ eisa_probe(struct device *dev, u_long ioaddr)) } for (status = -ENODEV; (i> 8) & 0x00ffff00; - vendor = (u_short) cfid; + if (check_region(iobase, DE4X5_EISA_TOTAL_SIZE)) continue; + if (!EISA_signature(name, EISA_ID)) continue; + + cfid = (u32) inl(PCI_CFID); + cfrv = (u_short) inl(PCI_CFRV); + device = (cfid >> 8) & 0x00ffff00; + vendor = (u_short) cfid; - /* Read the EISA Configuration Registers */ - irq = inb(EISA_REG0); - irq = de4x5_irq[(irq >> 1) & 0x03]; + /* Read the EISA Configuration Registers */ + irq = inb(EISA_REG0); + irq = de4x5_irq[(irq >> 1) & 0x03]; - if (is_DC2114x) { - device = ((cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143); - } - lp->chipset = device; + if (is_DC2114x) { + device = ((cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143); + } + lp->chipset = device; - /* Write the PCI Configuration Registers */ - outl(PCI_COMMAND_IO | PCI_COMMAND_MASTER, PCI_CFCS); - outl(0x00006000, PCI_CFLT); - outl(iobase, PCI_CBIO); + /* Write the PCI Configuration Registers */ + outl(PCI_COMMAND_IO | PCI_COMMAND_MASTER, PCI_CFCS); + outl(0x00006000, PCI_CFLT); + outl(iobase, PCI_CBIO); - DevicePresent(EISA_APROM); - if (check_region(iobase, DE4X5_EISA_TOTAL_SIZE) == 0) { - dev->irq = irq; - if ((status = de4x5_hw_init(dev, iobase)) == 0) { - num_de4x5s++; - if (loading_module) link_modules(lastModule, dev); - lastEISA = i; - return; - } - } else if (ioaddr != 0) { - printk("%s: region already allocated at 0x%04lx.\n", dev->name,iobase); - } + DevicePresent(EISA_APROM); + + dev->irq = irq; + if ((status = de4x5_hw_init(dev, iobase)) == 0) { + num_de4x5s++; + if (loading_module) link_modules(lastModule, dev); + lastEISA = i; + return; } } @@ -4794,6 +4806,7 @@ type3_infoblock(struct device *dev, u_char count, u_char *p) if (lp->state == INITIALISED) { lp->ibn = 3; lp->active = *p++; + if (MOTO_SROM_BUG) lp->active = 0; lp->phy[lp->active].gep = (*p ? p : 0); p += (2 * (*p) + 1); lp->phy[lp->active].rst = (*p ? p : 0); p += (2 * (*p) + 1); lp->phy[lp->active].mc = TWIDDLE(p); p += 2; @@ -5326,6 +5339,9 @@ de4x5_parse_params(struct device *dev) t = *q; *q = '\0'; +#if !defined(__sparc_v9__) && !defined(__powerpc__) && !defined(__alpha__) + if (strstr(p, "force_eisa") || strstr(p, "FORCE_EISA")) forceEISA = 1; +#endif if (strstr(p, "fdx") || strstr(p, "FDX")) lp->params.fdx = 1; if (strstr(p, "autosense") || strstr(p, "AUTOSENSE")) { @@ -5766,6 +5782,12 @@ init_module(void) release_region(p->base_addr, (lp->bus == PCI ? DE4X5_PCI_TOTAL_SIZE : DE4X5_EISA_TOTAL_SIZE)); + if (lp->cache.buf) { /* MAC buffers allocated? */ + kfree(lp->cache.buf); /* Free the MAC buffers */ + } + if (lp->cache.priv) { /* Private area allocated? */ + kfree(lp->cache.priv); /* Free the private area */ + } } kfree(p); } else { @@ -5799,10 +5821,10 @@ unlink_modules(struct device *p) if (lp->cache.buf) { /* MAC buffers allocated? */ kfree(lp->cache.buf); /* Free the MAC buffers */ } - kfree(lp->cache.priv); /* Free the private area */ release_region(p->base_addr, (lp->bus == PCI ? DE4X5_PCI_TOTAL_SIZE : DE4X5_EISA_TOTAL_SIZE)); + kfree(lp->cache.priv); /* Free the private area */ } unregister_netdev(p); kfree(p); /* Free the device structure */ @@ -5867,6 +5889,9 @@ insert_device(struct device *dev, u_long iobase, int (*init)(struct device *))) * Local variables: * compile-command: "gcc -D__KERNEL__ -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c de4x5.c" * - * compile-command: "gcc -D__KERNEL__ -DMODULE -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -c de4x5.c" + * Delete -D__SMP__ below if you didn't define this in your kernel + * Delete -DMODVERSIONS below if you didn't define this in your kernel + * + * compile-command: "gcc -D__KERNEL__ -DMODULE -I/linux/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 -O2 -m486 -DMODVERSIONS -include /linux/include/linux/modversions.h -c de4x5.c" * End: */ diff --git a/drivers/net/de4x5.h b/drivers/net/de4x5.h index 6e5aeae0f..9e40adc74 100644 --- a/drivers/net/de4x5.h +++ b/drivers/net/de4x5.h @@ -1027,3 +1027,5 @@ struct de4x5_ioctl { #define DE4X5_GET_REG 0x0e /* Get the DE4X5 Registers */ #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s)) + +#define MOTO_SROM_BUG ((lp->active == 8) && (((le32_to_cpu(get_unaligned(((s32 *)dev->dev_addr))))&0x00ffffff)==0x3e0008)) diff --git a/drivers/net/defxx.c b/drivers/net/defxx.c index abca38d83..3a3dd6af8 100644 --- a/drivers/net/defxx.c +++ b/drivers/net/defxx.c @@ -1911,6 +1911,8 @@ void dfx_interrupt( } bp = (DFX_board_t *) dev->priv; + spin_lock(&bp->lock); + /* See if we're already servicing an interrupt */ if (dev->interrupt) @@ -1955,6 +1957,7 @@ void dfx_interrupt( } dev->interrupt = DFX_UNMASK_INTERRUPTS; + spin_unlock(&bp->lock); return; } @@ -2881,6 +2884,22 @@ int dfx_hw_dma_uninit( return(DFX_K_SUCCESS); } + +/* + * Align an sk_buff to a boundary power of 2 + * + */ + +void my_skb_align(struct sk_buff *skb, int n) +{ + u32 x=(u32)skb->data; /* We only want the low bits .. */ + u32 v; + + v=(x+n-1)&~(n-1); /* Where we want to be */ + + skb_reserve(skb, v-x); +} + /* * ================ @@ -2950,8 +2969,8 @@ void dfx_rcv_init( * align to 128 bytes for compatibility with * the old EISA boards. */ - newskb->data = (char *)((unsigned long) - (newskb->data+127) & ~127); + + my_skb_align(newskb,128); bp->descr_block_virt->rcv_data[i+j].long_1 = virt_to_bus(newskb->data); /* * p_rcv_buff_va is only used inside the @@ -3062,10 +3081,10 @@ void dfx_rcv_queue_process( newskb = dev_alloc_skb(NEW_SKB_SIZE); if (newskb){ rx_in_place = 1; - - newskb->data = (char *)((unsigned long)(newskb->data+127) & ~127); + + my_skb_align(newskb, 128); skb = (struct sk_buff *)bp->p_rcv_buff_va[entry]; - skb->data += RCV_BUFF_K_PADDING; + skb_reserve(skb, RCV_BUFF_K_PADDING); bp->p_rcv_buff_va[entry] = (char *)newskb; bp->descr_block_virt->rcv_data[entry].long_1 = virt_to_bus(newskb->data); } else @@ -3088,9 +3107,9 @@ void dfx_rcv_queue_process( memcpy(skb->data, p_buff + RCV_BUFF_K_PADDING, pkt_len+3); } - - skb->data += 3; /* adjust data field so that it points to FC byte */ - skb->len = pkt_len; /* pass up packet length, NOT including CRC */ + + skb_reserve(skb,3); /* adjust data field so that it points to FC byte */ + skb_put(skb, pkt_len); /* pass up packet length, NOT including CRC */ skb->dev = bp->dev; /* pass up device pointer */ skb->protocol = fddi_type_trans(skb, bp->dev); @@ -3189,10 +3208,11 @@ int dfx_xmt_queue_pkt( ) { - DFX_board_t *bp = (DFX_board_t *) dev->priv; - u8 prod; /* local transmit producer index */ + DFX_board_t *bp = (DFX_board_t *) dev->priv; + u8 prod; /* local transmit producer index */ PI_XMT_DESCR *p_xmt_descr; /* ptr to transmit descriptor block entry */ XMT_DRIVER_DESCR *p_xmt_drv_descr; /* ptr to transmit driver descriptor */ + unsigned long flags; /* * Verify that incoming transmit request is OK @@ -3236,6 +3256,8 @@ int dfx_xmt_queue_pkt( } } + spin_lock_irqsave(&bp->lock, flags); + /* Get the current producer and the next free xmt data descriptor */ prod = bp->rcv_xmt_reg.index.xmt_prod; @@ -3256,9 +3278,10 @@ int dfx_xmt_queue_pkt( /* Write the three PRH bytes immediately before the FC byte */ - *((char *)skb->data - 3) = DFX_PRH0_BYTE; /* these byte values are defined */ - *((char *)skb->data - 2) = DFX_PRH1_BYTE; /* in the Motorola FDDI MAC chip */ - *((char *)skb->data - 1) = DFX_PRH2_BYTE; /* specification */ + skb_push(skb,3); + skb->data[0] = DFX_PRH0_BYTE; /* these byte values are defined */ + skb->data[1] = DFX_PRH1_BYTE; /* in the Motorola FDDI MAC chip */ + skb->data[2] = DFX_PRH2_BYTE; /* specification */ /* * Write the descriptor with buffer info and bump producer @@ -3288,7 +3311,7 @@ int dfx_xmt_queue_pkt( */ p_xmt_descr->long_0 = (u32) (PI_XMT_DESCR_M_SOP | PI_XMT_DESCR_M_EOP | ((skb->len + 3) << PI_XMT_DESCR_V_SEG_LEN)); - p_xmt_descr->long_1 = (u32) virt_to_bus(skb->data - 3); + p_xmt_descr->long_1 = (u32) virt_to_bus(skb->data); /* * Verify that descriptor is actually available @@ -3302,7 +3325,11 @@ int dfx_xmt_queue_pkt( */ if (prod == bp->rcv_xmt_reg.index.xmt_comp) + { + skb_pull(skb,3); + spin_unlock_irqrestore(&bp->lock, flags); return(1); /* requeue packet for later */ + } /* * Save info for this packet for xmt done indication routine @@ -3326,6 +3353,7 @@ int dfx_xmt_queue_pkt( bp->rcv_xmt_reg.index.xmt_prod = prod; dfx_port_write_long(bp, PI_PDQ_K_REG_TYPE_2_PROD, bp->rcv_xmt_reg.lword); + spin_unlock_irqrestore(&bp->lock, flags); return(0); /* packet queued to adapter */ } diff --git a/drivers/net/defxx.h b/drivers/net/defxx.h index a1b4b579a..2681188d4 100644 --- a/drivers/net/defxx.h +++ b/drivers/net/defxx.h @@ -1748,6 +1748,10 @@ typedef struct DFX_board_tag /* Store pointers to transmit buffers for transmit completion code */ XMT_DRIVER_DESCR xmt_drv_descr_blk[PI_XMT_DATA_K_NUM_ENTRIES]; + + /* Transmit spinlocks */ + + spinlock_t lock; /* Store device, bus-specific, and parameter information for this adapter */ diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c index 94546d995..56858bc45 100644 --- a/drivers/net/eepro100.c +++ b/drivers/net/eepro100.c @@ -842,9 +842,6 @@ speedo_open(struct device *dev) wait_for_cmd_done(ioaddr + SCBCmd); outw(CU_DUMPSTATS, ioaddr + SCBCmd); - /* No need to wait for the command unit to accept here. */ - if ((sp->phy[0] & 0x8000) == 0) - mdio_read(ioaddr, sp->phy[0] & 0x1f, 0); /* * Request the IRQ last, after we have set up all data structures. @@ -855,6 +852,10 @@ speedo_open(struct device *dev) return -EAGAIN; } + /* No need to wait for the command unit to accept here. */ + if ((sp->phy[0] & 0x8000) == 0) + mdio_read(ioaddr, sp->phy[0] & 0x1f, 0); + MOD_INC_USE_COUNT; /* Set the timer. The timer serves a dual purpose: diff --git a/drivers/net/eexpress.c b/drivers/net/eexpress.c index 005c574df..d94e0efd6 100644 --- a/drivers/net/eexpress.c +++ b/drivers/net/eexpress.c @@ -83,6 +83,7 @@ * practice. */ +#include #include #include @@ -107,6 +108,8 @@ #include #include +#include + #ifndef NET_DEBUG #define NET_DEBUG 4 #endif @@ -141,6 +144,7 @@ struct net_local unsigned char width; /* 0 for 16bit, 1 for 8bit */ unsigned char was_promisc; unsigned char old_mc_count; + spinlock_t lock; }; /* This is the code and data that is downloaded to the EtherExpress card's @@ -502,6 +506,7 @@ static void unstick_cu(struct device *dev) static int eexp_xmit(struct sk_buff *buf, struct device *dev) { struct net_local *lp = (struct net_local *)dev->priv; + unsigned long flags; #if NET_DEBUG > 6 printk(KERN_DEBUG "%s: eexp_xmit()\n", dev->name); @@ -509,6 +514,15 @@ static int eexp_xmit(struct sk_buff *buf, struct device *dev) disable_irq(dev->irq); + /* + * Best would be to use synchronize_irq(); spin_lock() here + * lets make it work first.. + */ + +#ifdef CONFIG_SMP + spin_lock_irqsave(&lp->lock, flags); +#endif + /* If dev->tbusy is set, all our tx buffers are full but the kernel * is calling us anyway. Check that nothing bad is happening. */ @@ -516,7 +530,13 @@ static int eexp_xmit(struct sk_buff *buf, struct device *dev) int status = scb_status(dev); unstick_cu(dev); if ((jiffies - lp->last_tx) < HZ) + { +#ifdef CONFIG_SMP + spin_unlock_irqrestore(&lp->lock, flags); +#endif + return 1; + } printk(KERN_INFO "%s: transmit timed out, %s?", dev->name, (SCB_complete(status)?"lost interrupt": "board on fire")); @@ -544,6 +564,9 @@ static int eexp_xmit(struct sk_buff *buf, struct device *dev) eexp_hw_tx_pio(dev,data,length); } dev_kfree_skb(buf); +#ifdef CONFIG_SMP + spin_unlock_irqrestore(&lp->lock, flags); +#endif enable_irq(dev->irq); return 0; } @@ -646,11 +669,14 @@ static void eexp_irq(int irq, void *dev_info, struct pt_regs *regs) lp = (struct net_local *)dev->priv; ioaddr = dev->base_addr; + spin_lock(&lp->lock); + old_read_ptr = inw(ioaddr+READ_PTR); old_write_ptr = inw(ioaddr+WRITE_PTR); outb(SIRQ_dis|irqrmap[irq],ioaddr+SET_IRQ); + dev->interrupt = 1; status = scb_status(dev); @@ -726,6 +752,8 @@ static void eexp_irq(int irq, void *dev_info, struct pt_regs *regs) #endif outw(old_read_ptr, ioaddr+READ_PTR); outw(old_write_ptr, ioaddr+WRITE_PTR); + + spin_unlock(&lp->lock); return; } diff --git a/drivers/net/epic100.c b/drivers/net/epic100.c index e56ddf5b0..1c5d85721 100644 --- a/drivers/net/epic100.c +++ b/drivers/net/epic100.c @@ -1106,6 +1106,7 @@ static int epic_rx(struct device *dev) memcpy(skb_put(skb, pkt_len), bus_to_virt(ep->rx_ring[entry].bufaddr), pkt_len); #endif + ep->rx_ring[entry].status = 0x8000; } else { skb_put(skb = ep->rx_skbuff[entry], pkt_len); ep->rx_skbuff[entry] = NULL; diff --git a/drivers/net/eql.c b/drivers/net/eql.c index abb7e6c78..165d4fefe 100644 --- a/drivers/net/eql.c +++ b/drivers/net/eql.c @@ -363,8 +363,8 @@ static int eql_slave_xmit(struct sk_buff *skb, struct device *dev) eql_schedule_slaves (eql->queue); - slave_dev = eql_best_slave_dev (eql->queue); slave = eql_best_slave (eql->queue); + slave_dev = slave ? slave->dev : 0; if ( slave_dev != 0 ) { diff --git a/drivers/net/ethertap.c b/drivers/net/ethertap.c index 46b7babd4..cc478fb2e 100644 --- a/drivers/net/ethertap.c +++ b/drivers/net/ethertap.c @@ -177,11 +177,21 @@ static int ethertap_start_xmit(struct sk_buff *skb, struct device *dev) #endif if (skb_headroom(skb) < 2) { - printk(KERN_DEBUG "%s : bug --- xmit with head<2\n", dev->name); + static int once; + struct sk_buff *skb2; + + if (!once) { + once = 1; + printk(KERN_DEBUG "%s: not aligned xmit by protocol %04x\n", dev->name, skb->protocol); + } + + skb2 = skb_realloc_headroom(skb, 2); dev_kfree_skb(skb); - return 0; + if (skb2 == NULL) + return 0; + skb = skb2; } - skb_push(skb, 2); + __skb_push(skb, 2); /* Make the same thing, which loopback does. */ if (skb_shared(skb)) { diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c index f7b3156fc..d72719e5c 100644 --- a/drivers/net/hamradio/baycom_epp.c +++ b/drivers/net/hamradio/baycom_epp.c @@ -48,7 +48,6 @@ #include #include #include -#include #include #include #include @@ -1075,6 +1074,7 @@ static int epp_open(struct device *dev) if (!(pp->modes & (PARPORT_MODE_PCECPEPP|PARPORT_MODE_PCEPP))) { printk(KERN_ERR "%s: parport at 0x%lx does not support any EPP mode\n", bc_drvname, pp->base); + parport_release(bc->pdev); parport_unregister_device(bc->pdev); return -EIO; } diff --git a/drivers/net/hostess_sv11.c b/drivers/net/hostess_sv11.c index 8317d37e0..fe20840a4 100644 --- a/drivers/net/hostess_sv11.c +++ b/drivers/net/hostess_sv11.c @@ -416,10 +416,8 @@ static struct sv11_device *sv11_unit; int init_module(void) { - printk(KERN_INFO "SV-11 Z85230 Synchronous Driver v 0.01.\n"); + printk(KERN_INFO "SV-11 Z85230 Synchronous Driver v 0.02.\n"); printk(KERN_INFO "(c) Copyright 1998, Building Number Three Ltd.\n"); - if(dma) - printk(KERN_WARNING "DMA mode probably wont work right now.\n"); if((sv11_unit=sv11_init(io,irq))==NULL) return -ENODEV; return 0; diff --git a/drivers/net/ibmtr.c b/drivers/net/ibmtr.c index 990610648..780b8a938 100644 --- a/drivers/net/ibmtr.c +++ b/drivers/net/ibmtr.c @@ -70,6 +70,15 @@ * Changes by Joel Sloan (jjs@c-me.com) : * + disable verbose debug messages by default - to enable verbose * debugging, edit the IBMTR_DEBUG_MESSAGES define below + * + * Changes by Mike Phillips : + * + Added extra #ifdef's to work with new PCMCIA Token Ring Code. + * The PCMCIA code now just sets up the card so it can be recognized + * by ibmtr_probe. Also checks allocated memory vs. on-board memory + * for correct figure to use. + * + * Changes by Tim Hockin (thockin@isunix.it.ilstu.edu) : + * + added spinlocks for SMP sanity (10 March 1999) */ /* change the define of IBMTR_DEBUG_MESSAGES to a nonzero value @@ -91,6 +100,7 @@ in the event that chatty debug messages are desired - jjs 12/30/98 */ #undef NO_AUTODETECT #undef ENABLE_PAGING + #define FALSE 0 #define TRUE (!FALSE) @@ -144,6 +154,7 @@ static char mcchannelid[] = { #include #include +#include #include #include @@ -187,6 +198,9 @@ unsigned char ibmtr_debug_trace=0; int ibmtr_probe(struct device *dev); static int ibmtr_probe1(struct device *dev, int ioaddr); static unsigned char get_sram_size(struct tok_info *adapt_info); +#ifdef PCMCIA +extern unsigned char pcmcia_reality_check(unsigned char gss); +#endif static int tok_init_card(struct device *dev); void tok_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int trdev_init(struct device *dev); @@ -252,7 +266,9 @@ __initfunc(int ibmtr_probe(struct device *dev)) if (ibmtr_probe1(dev, base_addr)) { #ifndef MODULE +#ifndef PCMCIA tr_freedev(dev); +#endif #endif return -ENODEV; } else @@ -268,7 +284,9 @@ __initfunc(int ibmtr_probe(struct device *dev)) continue; if (ibmtr_probe1(dev, ioaddr)) { #ifndef MODULE +#ifndef PCMCIA tr_freedev(dev); +#endif #endif } else return 0; @@ -287,7 +305,9 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) unsigned long timeout; #ifndef MODULE +#ifndef PCMCIA dev = init_trdev(dev,0); +#endif #endif /* Query the adapter PIO base port which will return @@ -296,7 +316,7 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) */ segment = inb(PIOaddr); - + /* * Out of range values so we'll assume non-existent IO device */ @@ -369,12 +389,19 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) } /* Now, allocate some of the pl0 buffers for this driver.. */ + + /* If called from PCMCIA, ti is already set up, so no need to + waste the memory, just use the existing structure */ + +#ifndef PCMCIA ti = (struct tok_info *)kmalloc(sizeof(struct tok_info), GFP_KERNEL); if (ti == NULL) return -ENOMEM; memset(ti, 0, sizeof(struct tok_info)); - +#else + ti = dev->priv ; +#endif ti->mmio= t_mmio; ti->readlog_pending = 0; @@ -384,6 +411,10 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) should fit with out future hope of multiple adapter support as well /dwm */ + /* if PCMCIA, then the card is recognized as TR_ISAPNP + * and there is no need to set up the interrupt, it is already done. */ + +#ifndef PCMCIA switch (cardpresent) { case TR_ISA: @@ -424,7 +455,6 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) irq=10; if (intr==3) irq=11; - timeout = jiffies + TR_SPIN_INTERVAL; while(!readb(ti->mmio + ACA_OFFSET + ACA_RW + RRR_EVEN)) if (time_after(jiffies, timeout)) { @@ -432,11 +462,13 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) kfree_s(ti, sizeof(struct tok_info)); return -ENODEV; } + ti->sram=((__u32)readb(ti->mmio + ACA_OFFSET + ACA_RW + RRR_EVEN)<<12); ti->global_int_enable=PIOaddr+ADAPTINTREL; ti->adapter_int_enable=PIOaddr+ADAPTINTREL; break; } +#endif if (ibmtr_debug_trace & TRC_INIT) { /* just report int */ DPRINTK("irq=%d",irq); @@ -479,8 +511,12 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) ti->token_release = readb(ti->mmio + AIPEARLYTOKEN); /* How much shared RAM is on adapter ? */ +#ifdef PCMCIA + ti->avail_shared_ram = pcmcia_reality_check(get_sram_size(ti)); + ibmtr_mem_base = ti->sram_base ; +#else ti->avail_shared_ram = get_sram_size(ti); - +#endif /* We need to set or do a bunch of work here based on previous results.. */ /* Support paging? What sizes?: F=no, E=16k, D=32k, C=16 & 32k */ ti->shared_ram_paging = readb(ti->mmio + AIPSHRAMPAGE); @@ -589,7 +625,6 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) } #endif } - /* finish figuring the shared RAM address */ if (cardpresent==TR_ISA) { static __u32 ram_bndry_mask[]={0xffffe000, 0xffffc000, 0xffff8000, 0xffff0000}; @@ -615,15 +650,20 @@ __initfunc(static int ibmtr_probe1(struct device *dev, int PIOaddr)) DPRINTK("Using %dK shared RAM\n",ti->mapped_ram_size/2); #endif + /* The PCMCIA has already got the interrupt line and the io port, + so no chance of anybody else getting it - MLP */ + +#ifndef PCMCIA if (request_irq (dev->irq = irq, &tok_interrupt,0,"ibmtr", dev) != 0) { DPRINTK("Could not grab irq %d. Halting Token Ring driver.\n",irq); kfree_s(ti, sizeof(struct tok_info)); return -ENODEV; } + + /*?? Now, allocate some of the PIO PORTs for this driver.. */ + request_region(PIOaddr,IBMTR_IO_EXTENT,"ibmtr"); /* record PIOaddr range as busy */ +#endif - /*?? Now, allocate some of the PIO PORTs for this driver.. */ - request_region(PIOaddr,IBMTR_IO_EXTENT,"ibmtr"); /* record PIOaddr range - as busy */ #if !TR_NEWFORMAT DPRINTK("%s",version); /* As we have passed card identification, let the world know we're here! */ @@ -713,7 +753,6 @@ __initfunc(static unsigned char get_sram_size(struct tok_info *adapt_info)) unsigned char avail_sram_code; static unsigned char size_code[]={ 0,16,32,64,127,128 }; - /* Adapter gives 'F' -- use RRR bits 3,2 'E' -- 8kb 'D' -- 16kb @@ -743,7 +782,9 @@ __initfunc(static int trdev_init(struct device *dev)) dev->change_mtu = ibmtr_change_mtu; #ifndef MODULE +#ifndef PCMCIA tr_setup(dev); +#endif #endif return 0; } @@ -754,6 +795,9 @@ static int tok_open(struct device *dev) { struct tok_info *ti=(struct tok_info *)dev->priv; + /* init the spinlock */ + ti->lock = (spinlock_t) SPIN_LOCK_UNLOCKED; + if (ti->open_status==CLOSED) tok_init_card(dev); if (ti->open_status==IN_PROGRESS) sleep_on(&ti->wait_for_reset); @@ -806,6 +850,7 @@ void tok_interrupt (int irq, void *dev_id, struct pt_regs *regs) DPRINTK("Int from tok_driver, dev : %p\n",dev); #endif ti = (struct tok_info *) dev->priv; + spin_lock(&(ti->lock)); /* Disable interrupts till processing is finished */ dev->interrupt=1; @@ -832,14 +877,16 @@ void tok_interrupt (int irq, void *dev_id, struct pt_regs *regs) if (status == 0xFF) { DPRINTK("PCMCIA card removed.\n"); + spin_unlock(&(ti->lock)); dev->interrupt = 0; - return; + return; } /* Check ISRP EVEN too. */ if ( readb (ti->mmio + ACA_OFFSET + ACA_RW + ISRP_EVEN) == 0xFF) { DPRINTK("PCMCIA card removed.\n"); + spin_unlock(&(ti->lock)); dev->interrupt = 0; return; } @@ -1167,6 +1214,7 @@ void tok_interrupt (int irq, void *dev_id, struct pt_regs *regs) DPRINTK("Unexpected interrupt from tr adapter\n"); } + spin_unlock(&(ti->lock)); } static void initial_tok_int(struct device *dev) @@ -1175,7 +1223,6 @@ static void initial_tok_int(struct device *dev) __u32 encoded_addr; __u32 hw_encoded_addr; struct tok_info *ti; - ti=(struct tok_info *) dev->priv; ti->do_tok_int=NOT_FIRST; @@ -1452,6 +1499,7 @@ static void tr_rx(struct device *dev) ti->asb + offsetof(struct asb_rec, rec_buf_addr)); lan_hdr_len=readb(ti->arb + offsetof(struct arb_rec_req, lan_hdr_len)); + hdr_len = lan_hdr_len + sizeof(struct trllc) + sizeof(struct iphdr); llc=(rbuffer + offsetof(struct rec_buf, data) + lan_hdr_len); @@ -1478,8 +1526,10 @@ static void tr_rx(struct device *dev) return; } + length = ntohs(readw(ti->arb+offsetof(struct arb_rec_req, frame_len))); if ((readb(llc + offsetof(struct trllc, dsap))==EXTENDED_SAP) && - (readb(llc + offsetof(struct trllc, ssap))==EXTENDED_SAP)) { + (readb(llc + offsetof(struct trllc, ssap))==EXTENDED_SAP) && + (length>=hdr_len)) { IPv4_p = 1; } @@ -1510,7 +1560,6 @@ static void tr_rx(struct device *dev) } #endif - length = ntohs(readw(ti->arb+offsetof(struct arb_rec_req, frame_len))); skb_size = length-lan_hdr_len+sizeof(struct trh_hdr)+sizeof(struct trllc); if (!(skb=dev_alloc_skb(skb_size))) { @@ -1530,7 +1579,6 @@ static void tr_rx(struct device *dev) if (IPv4_p) { /* Copy the headers without checksumming */ - hdr_len = lan_hdr_len + sizeof(struct trllc) + sizeof(struct iphdr); memcpy_fromio(data, rbufdata, hdr_len); /* Watch for padded packets and bogons */ @@ -1598,12 +1646,19 @@ static int tok_send_packet(struct sk_buff *skb, struct device *dev) if (test_and_set_bit(0,(void *)&dev->tbusy)!=0) DPRINTK("Transmitter access conflict\n"); else { + int flags; + + /* lock against other CPUs */ + spin_lock_irqsave(&(ti->lock), flags); + /* Save skb; we'll need it when the adapter asks for the data */ ti->current_skb=skb; writeb(XMIT_UI_FRAME, ti->srb + offsetof(struct srb_xmit, command)); writew(ti->exsap_station_id, ti->srb +offsetof(struct srb_xmit, station_id)); writeb(CMD_IN_SRB, (ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD)); + spin_unlock_irqrestore(&(ti->lock), flags); + dev->trans_start=jiffies; } diff --git a/drivers/net/ibmtr.h b/drivers/net/ibmtr.h index 079907731..4708366c7 100644 --- a/drivers/net/ibmtr.h +++ b/drivers/net/ibmtr.h @@ -217,6 +217,7 @@ struct tok_info { unsigned char ring_speed; __u32 func_addr; unsigned int retry_count; + spinlock_t lock; /* SMP protection */ }; /* token ring adapter commands */ diff --git a/drivers/net/irda/Config.in b/drivers/net/irda/Config.in index c40b6f5c8..64f6c327e 100644 --- a/drivers/net/irda/Config.in +++ b/drivers/net/irda/Config.in @@ -9,6 +9,7 @@ if [ "$CONFIG_IRTTY_SIR" != "n" ]; then dep_tristate ' ESI JetEye PC dongle' CONFIG_ESI_DONGLE $CONFIG_IRTTY_SIR dep_tristate ' ACTiSYS IR-220L and IR220L+ dongle' CONFIG_ACTISYS_DONGLE $CONFIG_IRTTY_SIR dep_tristate ' Tekram IrMate 210B dongle' CONFIG_TEKRAM_DONGLE $CONFIG_IRTTY_SIR + dep_tristate ' Greenwich GIrBIL dongle' CONFIG_GIRBIL_DONGLE $CONFIG_IRTTY_SIR fi fi dep_tristate ' NSC PC87108' CONFIG_NSC_FIR $CONFIG_IRDA diff --git a/drivers/net/irda/Makefile b/drivers/net/irda/Makefile index 05880d5e1..6a7920a6e 100644 --- a/drivers/net/irda/Makefile +++ b/drivers/net/irda/Makefile @@ -10,7 +10,7 @@ ALL_SUB_DIRS := $(SUB_DIRS) L_TARGET := irda_drivers.a L_OBJS := M_OBJS := -MOD_LIST_NAME := IRDA_MODULES +MOD_LIST_NAME := IRDA_DRIVERS_MODULES ifeq ($(CONFIG_IRTTY_SIR),y) L_OBJS += irtty.o @@ -68,6 +68,14 @@ else endif endif +ifeq ($(CONFIG_GIRBIL_DONGLE),y) +L_OBJS += girbil.o +else + ifeq ($(CONFIG_GIRBIL_DONGLE),m) + M_OBJS += girbil.o + endif +endif + include $(TOPDIR)/Rules.make clean: diff --git a/drivers/net/irda/actisys.c b/drivers/net/irda/actisys.c index 97fb5fa27..46ce2badf 100644 --- a/drivers/net/irda/actisys.c +++ b/drivers/net/irda/actisys.c @@ -1,13 +1,13 @@ /********************************************************************* * * Filename: actisys.c - * Version: 0.4 + * Version: 0.5 * Description: Implementation for the ACTiSYS IR-220L and IR-220L+ * dongles * Status: Experimental. * Author: Dag Brattli * Created at: Wed Oct 21 20:02:35 1998 - * Modified at: Mon Jan 18 11:30:25 1999 + * Modified at: Mon Apr 12 11:56:35 1999 * Modified by: Dag Brattli * * Copyright (c) 1998 Dag Brattli, All Rights Reserved. @@ -70,9 +70,10 @@ void actisys_cleanup(void) static void actisys_open( struct irda_device *idev, int type) { - strcat( idev->name, " <-> actisys"); + strcat(idev->description, " <-> actisys"); idev->io.dongle_id = type; + idev->flags |= IFF_DONGLE; MOD_INC_USE_COUNT; } @@ -85,24 +86,20 @@ static void actisys_close( struct irda_device *dev) /* * Function actisys_change_speed (tty, baud) * - * Change speed of the ACTiSYS IR-220L and IR-220L+ type IrDA dongles. - * To cycle through the available baud rates, pulse RTS low for a few ms. - * To be compatible with the new IR-220L+, we have to reset the dongle - * first since its not possible cycle around anymore and still be - * compatible with both dongles :-( + * Change speed of the ACTiSYS IR-220L and IR-220L+ type IrDA dongles. + * To cycle through the available baud rates, pulse RTS low for a few + * ms. */ static void actisys_change_speed( struct irda_device *idev, int baudrate) { struct irtty_cb *self; struct tty_struct *tty; - int arg; struct termios old_termios; int cflag; int current_baudrate; int index = 0; - mm_segment_t fs; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG( 4, __FUNCTION__ "()\n"); ASSERT( idev != NULL, return;); ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); @@ -115,10 +112,10 @@ static void actisys_change_speed( struct irda_device *idev, int baudrate) current_baudrate = idev->qos.baud_rate.value; /* Find the correct baudrate index for the currently used baudrate */ - while ( current_baudrate != baud_rates[index]) + while (current_baudrate != baud_rates[index]) index++; - DEBUG( 0, __FUNCTION__ "(), index=%d\n", index); + DEBUG( 4, __FUNCTION__ "(), index=%d\n", index); if ( !self->tty) return; @@ -127,38 +124,18 @@ static void actisys_change_speed( struct irda_device *idev, int baudrate) /* Cycle through avaiable baudrates until we reach the correct one */ while ( current_baudrate != baudrate) { - DEBUG( 0, __FUNCTION__ "(), current baudrate = %d\n", + DEBUG( 4, __FUNCTION__ "(), current baudrate = %d\n", baud_rates[index]); - DEBUG( 0, __FUNCTION__ "(), Clearing RTS\n"); /* Set DTR, clear RTS */ - arg = TIOCM_DTR|TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) { - DEBUG( 0, __FUNCTION__ - "Error clearing RTS!\n"); - } - set_fs(fs); + irtty_set_dtr_rts(tty, TRUE, FALSE); /* Wait at a few ms */ current->state = TASK_INTERRUPTIBLE; schedule_timeout(2); /* Set DTR, Set RTS */ - arg = TIOCM_DTR | TIOCM_RTS |TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) { - DEBUG( 0, __FUNCTION__ "Error setting RTS!\n"); - } - set_fs(fs); + irtty_set_dtr_rts(tty, TRUE, TRUE); /* Wait at a few ms again */ current->state = TASK_INTERRUPTIBLE; @@ -172,8 +149,8 @@ static void actisys_change_speed( struct irda_device *idev, int baudrate) current_baudrate = baud_rates[index]; } - DEBUG( 0, __FUNCTION__ "(), current baudrate = %d\n", - baud_rates[index]); + DEBUG(4, __FUNCTION__ "(), current baudrate = %d\n", + baud_rates[index]); /* Now change the speed of the serial port */ old_termios = *(tty->termios); @@ -200,9 +177,8 @@ static void actisys_change_speed( struct irda_device *idev, int baudrate) break; } + /* Change speed of serial port */ tty->termios->c_cflag = cflag; - - DEBUG( 0, __FUNCTION__ "(), Setting the speed of the serial port\n"); tty->driver.set_termios( tty, &old_termios); } @@ -219,10 +195,6 @@ static void actisys_reset( struct irda_device *idev, int unused) { struct irtty_cb *self; struct tty_struct *tty; - int arg = 0; - mm_segment_t fs; - - DEBUG( 4, __FUNCTION__ "()\n"); ASSERT( idev != NULL, return;); ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); @@ -236,36 +208,16 @@ static void actisys_reset( struct irda_device *idev, int unused) if ( !tty) return; - DEBUG( 0, __FUNCTION__ "(), Clearing DTR\n"); - arg = TIOCM_RTS | TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) - { - DEBUG( 0, __FUNCTION__"(), ioctl error!\n"); - } - set_fs(fs); + /* Clear DTR */ + irtty_set_dtr_rts(tty, FALSE, TRUE); /* Sleep 10-20 ms*/ current->state = TASK_INTERRUPTIBLE; schedule_timeout(2); - DEBUG( 0, __FUNCTION__ "(), Setting DTR\n"); - arg = TIOCM_RTS | TIOCM_DTR | TIOCM_OUT2; + /* Go back to normal mode */ + irtty_set_dtr_rts(tty, TRUE, TRUE); - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) - { - DEBUG( 0, __FUNCTION__"(), ioctl error!\n"); - } - set_fs(fs); - idev->qos.baud_rate.value = 9600; } @@ -282,11 +234,14 @@ static void actisys_init_qos( struct irda_device *idev, struct qos_info *qos) /* Remove support for 38400 if this is not a 220L+ dongle */ if ( idev->io.dongle_id == ACTISYS_DONGLE) qos->baud_rate.bits &= ~IR_38400; - - qos->min_turn_time.bits &= 0xfe; /* All except 0 ms */ + + qos->min_turn_time.bits &= 0x40; /* Needs 0.01 ms */ } #ifdef MODULE + +MODULE_AUTHOR("Dag Brattli "); +MODULE_DESCRIPTION("ACTiSYS IR-220L and IR-220L+ dongle driver"); /* * Function init_module (void) diff --git a/drivers/net/irda/esi.c b/drivers/net/irda/esi.c index a93e167aa..5395d2829 100644 --- a/drivers/net/irda/esi.c +++ b/drivers/net/irda/esi.c @@ -1,12 +1,12 @@ /********************************************************************* * * Filename: esi.c - * Version: 1.1 - * Description: Driver for the Extended Systems JetEye PC + * Version: 1.2 + * Description: Driver for the Extended Systems JetEye PC dongle * Status: Experimental. * Author: Thomas Davis, * Created at: Sat Feb 21 18:54:38 1998 - * Modified at: Mon Jan 18 11:30:32 1999 + * Modified at: Mon Apr 12 11:55:30 1999 * Modified by: Dag Brattli * Sources: esi.c * @@ -56,9 +56,9 @@ static struct dongle dongle = { esi_qos_init, }; -__initfunc(void esi_init(void)) +__initfunc(int esi_init(void)) { - irtty_register_dongle( &dongle); + return irtty_register_dongle(&dongle); } void esi_cleanup(void) @@ -71,6 +71,7 @@ static void esi_open( struct irda_device *idev, int type) strcat( idev->description, " <-> esi"); idev->io.dongle_id = type; + idev->flags |= IFF_DONGLE; MOD_INC_USE_COUNT; } @@ -90,10 +91,9 @@ static void esi_change_speed( struct irda_device *idev, int baud) { struct irtty_cb *self; struct tty_struct *tty; - int arg = TIOCM_OUT2; + int dtr, rts; struct termios old_termios; int cflag; - mm_segment_t fs; ASSERT( idev != NULL, return;); ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); @@ -116,37 +116,25 @@ static void esi_change_speed( struct irda_device *idev, int baud) switch (baud) { case 19200: cflag |= B19200; - arg |= TIOCM_DTR; + dtr = TRUE; + rts = FALSE; break; case 115200: cflag |= B115200; - arg |= TIOCM_RTS | TIOCM_DTR; + dtr = rts = TRUE; break; case 9600: default: cflag |= B9600; - arg |= TIOCM_RTS; + dtr = FALSE; + rts = TRUE; break; } - + /* Change speed of serial driver */ tty->termios->c_cflag = cflag; - tty->driver.set_termios( tty, &old_termios); - - /* - * The ioctl function, or actually set_modem_info in serial.c - * expects a pointer to the argument in user space. To hack us - * around this we use the set_fs function to fool the routines - * that check if they are called from user space. We also need - * to send a pointer to the argument so get_user() gets happy. - * DB. - */ - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, (unsigned long) &arg)) { - DEBUG( 0, __FUNCTION__ "(), error setting ESI speed!\n"); - } - set_fs(fs); + tty->driver.set_termios(tty, &old_termios); + + irtty_set_dtr_rts(tty, dtr, rts); } static void esi_reset( struct irda_device *idev, int unused) @@ -163,6 +151,7 @@ static void esi_reset( struct irda_device *idev, int unused) static void esi_qos_init( struct irda_device *idev, struct qos_info *qos) { qos->baud_rate.bits &= IR_9600|IR_19200|IR_115200; + qos->min_turn_time.bits &= 0x01; /* Needs at least 10 ms */ } #ifdef MODULE @@ -175,8 +164,7 @@ static void esi_qos_init( struct irda_device *idev, struct qos_info *qos) */ int init_module(void) { - esi_init(); - return(0); + return esi_init(); } /* diff --git a/drivers/net/irda/girbil.c b/drivers/net/irda/girbil.c new file mode 100644 index 000000000..128b32a23 --- /dev/null +++ b/drivers/net/irda/girbil.c @@ -0,0 +1,276 @@ +/********************************************************************* + * + * Filename: girbil.c + * Version: 1.0 + * Description: Implementation for the Greenwich GIrBIL dongle + * Status: Experimental. + * Author: Dag Brattli + * Created at: Sat Feb 6 21:02:33 1999 + * Modified at: Sat Apr 10 19:53:12 1999 + * Modified by: Dag Brattli + * + * Copyright (c) 1999 Dag Brattli, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * Neither Dag Brattli nor University of Tromsø admit liability nor + * provide warranty for any of this software. This material is + * provided "AS-IS" and at no charge. + * + ********************************************************************/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +static void girbil_reset(struct irda_device *dev, int unused); +static void girbil_open(struct irda_device *dev, int type); +static void girbil_close(struct irda_device *dev); +static void girbil_change_speed(struct irda_device *dev, int baud); +static void girbil_init_qos(struct irda_device *idev, struct qos_info *qos); + +/* Control register 1 */ +#define GIRBIL_TXEN 0x01 /* Enable transmitter */ +#define GIRBIL_RXEN 0x02 /* Enable receiver */ +#define GIRBIL_ECAN 0x04 /* Cancel self emmited data */ +#define GIRBIL_ECHO 0x08 /* Echo control characters */ + +/* LED Current Register (0x2) */ +#define GIRBIL_HIGH 0x20 +#define GIRBIL_MEDIUM 0x21 +#define GIRBIL_LOW 0x22 + +/* Baud register (0x3) */ +#define GIRBIL_2400 0x30 +#define GIRBIL_4800 0x31 +#define GIRBIL_9600 0x32 +#define GIRBIL_19200 0x33 +#define GIRBIL_38400 0x34 +#define GIRBIL_57600 0x35 +#define GIRBIL_115200 0x36 + +/* Mode register (0x4) */ +#define GIRBIL_IRDA 0x40 +#define GIRBIL_ASK 0x41 + +/* Control register 2 (0x5) */ +#define GIRBIL_LOAD 0x51 /* Load the new baud rate value */ + +static struct dongle dongle = { + GIRBIL_DONGLE, + girbil_open, + girbil_close, + girbil_reset, + girbil_change_speed, + girbil_init_qos, +}; + +__initfunc(void girbil_init(void)) +{ + irtty_register_dongle(&dongle); +} + +void girbil_cleanup(void) +{ + irtty_unregister_dongle(&dongle); +} + +static void girbil_open(struct irda_device *idev, int type) +{ + strcat( idev->description, " <-> girbil"); + + idev->io.dongle_id = type; + idev->flags |= IFF_DONGLE; + + MOD_INC_USE_COUNT; +} + +static void girbil_close(struct irda_device *dev) +{ + MOD_DEC_USE_COUNT; +} + +/* + * Function girbil_change_speed (dev, speed) + * + * Set the speed for the Girbil type dongle. Warning, this + * function must be called with a process context! + * + */ +static void girbil_change_speed(struct irda_device *idev, int speed) +{ + struct irtty_cb *self; + struct tty_struct *tty; + struct termios old_termios; + int cflag; + __u8 control[2]; + + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); + + self = (struct irtty_cb *) idev->priv; + + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); + + if (!self->tty) + return; + + tty = self->tty; + + old_termios = *(tty->termios); + cflag = tty->termios->c_cflag; + + cflag &= ~CBAUD; + + switch (speed) { + case 9600: + default: + cflag |= B9600; + control[0] = GIRBIL_9600; + break; + case 19200: + cflag |= B19200; + control[0] = GIRBIL_19200; + break; + case 34800: + cflag |= B38400; + control[0] = GIRBIL_38400; + break; + case 57600: + cflag |= B57600; + control[0] = GIRBIL_57600; + break; + case 115200: + cflag |= B115200; + control[0] = GIRBIL_115200; + break; + } + control[1] = GIRBIL_LOAD; + + /* Set DTR and Clear RTS to enter command mode */ + irtty_set_dtr_rts(tty, FALSE, TRUE); + + /* Write control bytes */ + if (tty->driver.write) + tty->driver.write(self->tty, 0, control, 2); + + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(2); + + /* Go back to normal mode */ + irtty_set_dtr_rts(tty, TRUE, TRUE); + + /* Now change the speed of the serial port */ + tty->termios->c_cflag = cflag; + tty->driver.set_termios(tty, &old_termios); +} + +/* + * Function girbil_reset (driver) + * + * This function resets the girbil dongle. Warning, this function + * must be called with a process context!! + * + * Algorithm: + * 0. set RTS, and wait at least 5 ms + * 1. clear RTS + */ +void girbil_reset(struct irda_device *idev, int unused) +{ + struct irtty_cb *self; + struct tty_struct *tty; + __u8 control = GIRBIL_TXEN | GIRBIL_RXEN; + + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); + + self = (struct irtty_cb *) idev->priv; + + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); + + tty = self->tty; + if (!tty) + return; + + /* Reset dongle */ + irtty_set_dtr_rts(tty, TRUE, FALSE); + + /* Sleep at least 5 ms */ + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(2); + + /* Set DTR and clear RTS to enter command mode */ + irtty_set_dtr_rts(tty, FALSE, TRUE); + + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(2); + + /* Write control byte */ + if (tty->driver.write) + tty->driver.write(self->tty, 0, &control, 1); + + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(2); + + /* Go back to normal mode */ + irtty_set_dtr_rts(tty, TRUE, TRUE); +} + +/* + * Function girbil_init_qos (qos) + * + * Initialize QoS capabilities + * + */ +static void girbil_init_qos(struct irda_device *idev, struct qos_info *qos) +{ + qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200; + qos->min_turn_time.bits &= 0xfe; /* All except 0 ms */ +} + +#ifdef MODULE + +MODULE_AUTHOR("Dag Brattli "); +MODULE_DESCRIPTION("Greenwich GIrBIL dongle driver"); + +/* + * Function init_module (void) + * + * Initialize Girbil module + * + */ +int init_module(void) +{ + girbil_init(); + return(0); +} + +/* + * Function cleanup_module (void) + * + * Cleanup Girbil module + * + */ +void cleanup_module(void) +{ + girbil_cleanup(); +} + +#endif /* MODULE */ diff --git a/drivers/net/irda/irport.c b/drivers/net/irda/irport.c index ae8bcb27b..5ea6dba73 100644 --- a/drivers/net/irda/irport.c +++ b/drivers/net/irda/irport.c @@ -1,7 +1,7 @@ /********************************************************************* * * Filename: irport.c - * Version: 0.8 + * Version: 0.9 * Description: Serial driver for IrDA. * Status: Experimental. * Author: Dag Brattli @@ -9,7 +9,6 @@ * Modified at: Sat May 23 23:15:20 1998 * Modified by: Dag Brattli * Sources: serial.c by Linus Torvalds - * serial_serial.c by Aage Kvalnes * * Copyright (c) 1997,1998 Dag Brattli * All Rights Reserved. @@ -25,10 +24,10 @@ * * NOTICE: * - * This driver is ment to be a small serial driver to be used for - * IR-chipsets that has a UART (16550) compatibility mode. If your - * chipset is is UART only, you should probably use IrTTY instead since - * the Linux serial driver is probably more robust and optimized. + * This driver is ment to be a small half duplex serial driver to be + * used for IR-chipsets that has a UART (16550) compatibility mode. If + * your chipset is is UART only, you should probably use IrTTY instead + * since the Linux serial driver is probably more robust and optimized. * * The functions in this file may be used by FIR drivers, but this * driver knows nothing about FIR drivers so don't ever insert such @@ -65,12 +64,12 @@ #define IO_EXTENT 8 -static unsigned int io[] = { 0x3e8, ~0, ~0, ~0 }; -static unsigned int irq[] = { 11, 0, 0, 0 }; +/* static unsigned int io[] = { 0x3e8, ~0, ~0, ~0 }; */ +/* static unsigned int irq[] = { 11, 0, 0, 0 }; */ -static void irport_write_wakeup( struct irda_device *idev); -static int irport_write( int iobase, int fifo_size, __u8 *buf, int len); -static void irport_receive( struct irda_device *idev); +static void irport_write_wakeup(struct irda_device *idev); +static int irport_write(int iobase, int fifo_size, __u8 *buf, int len); +static void irport_receive(struct irda_device *idev); __initfunc(int irport_init(void)) { @@ -96,7 +95,7 @@ __initfunc(int irport_init(void)) #ifdef MODULE static void irport_cleanup(void) { - int i; +/* int i; */ DEBUG( 4, __FUNCTION__ "()\n"); @@ -113,17 +112,17 @@ static void irport_cleanup(void) * Start IO port * */ -int irport_open( int iobase) +int irport_open(int iobase) { - DEBUG( 0, __FUNCTION__ "(), iobase=%#x\n", iobase); + DEBUG(4, __FUNCTION__ "(), iobase=%#x\n", iobase); /* Initialize UART */ - outb( UART_LCR_WLEN8, iobase+UART_LCR); /* Reset DLAB */ - outb(( UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase+UART_MCR); + outb(UART_LCR_WLEN8, iobase+UART_LCR); /* Reset DLAB */ + outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase+UART_MCR); /* Turn on interrups */ - outb(( UART_IER_THRI |UART_IER_RLSI | UART_IER_RDI), iobase+UART_IER); - + outb((UART_IER_RLSI | UART_IER_RDI), iobase+UART_IER); + return 0; } @@ -133,15 +132,15 @@ int irport_open( int iobase) * Stop IO port * */ -void irport_close( int iobase) +void irport_close(int iobase) { - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); /* Reset UART */ - outb( 0, iobase+UART_MCR); + outb(0, iobase+UART_MCR); /* Turn off interrupts */ - outb( 0, iobase+UART_IER); + outb(0, iobase+UART_IER); } /* @@ -158,10 +157,8 @@ void irport_change_speed( int iobase, int speed) DEBUG( 0, __FUNCTION__ "(), Setting speed to: %d\n", speed); - DEBUG( 0, __FUNCTION__ "(), iobase=%#x\n", iobase); - /* Turn off interrupts */ - outb( 0, iobase+UART_IER); + outb(0, iobase+UART_IER); divisor = SPEED_MAX/speed; @@ -170,55 +167,14 @@ void irport_change_speed( int iobase, int speed) /* IrDA ports use 8N1 */ lcr = UART_LCR_WLEN8; - outb( UART_LCR_DLAB | lcr, iobase+UART_LCR); /* Set DLAB */ - outb( divisor & 0xff, iobase+UART_DLL); /* Set speed */ - outb( divisor >> 8, iobase+UART_DLM); - outb( lcr, iobase+UART_LCR); /* Set 8N1 */ - outb( fcr, iobase+UART_FCR); /* Enable FIFO's */ - - /* Turn on interrups */ - outb( UART_IER_THRI|UART_IER_RLSI|UART_IER_RDI, iobase+UART_IER); -} - -/* - * Function irport_interrupt (irq, dev_id, regs) - * - * - */ -void irport_interrupt( int irq, void *dev_id, struct pt_regs *regs) -{ - struct irda_device *idev = (struct irda_device *) dev_id; - - int iobase, status; - int iir; - - DEBUG( 4, __FUNCTION__ "(), irq %d\n", irq); - - if ( !idev) { - printk( KERN_WARNING __FUNCTION__ - "() irq %d for unknown device.\n", irq); - return; - } - - idev->netdev.interrupt = 1; - - iobase = idev->io.iobase2; - - iir = inb(iobase + UART_IIR); - do { - status = inb( iobase+UART_LSR); - - if (status & UART_LSR_DR) { - /* Receive interrupt */ - irport_receive(idev); - } - if (status & UART_LSR_THRE) { - /* Transmitter ready for data */ - irport_write_wakeup(idev); - } - } while (!(inb(iobase+UART_IIR) & UART_IIR_NO_INT)); - - idev->netdev.interrupt = 0; + outb(UART_LCR_DLAB | lcr, iobase+UART_LCR); /* Set DLAB */ + outb(divisor & 0xff, iobase+UART_DLL); /* Set speed */ + outb(divisor >> 8, iobase+UART_DLM); + outb(lcr, iobase+UART_LCR); /* Set 8N1 */ + outb(fcr, iobase+UART_FCR); /* Enable FIFO's */ + + /* Turn on receive interrups */ + outb(UART_IER_RLSI|UART_IER_RDI, iobase+UART_IER); } /* @@ -228,39 +184,40 @@ void irport_interrupt( int irq, void *dev_id, struct pt_regs *regs) * more packets to send, we send them here. * */ -static void irport_write_wakeup( struct irda_device *idev) +static void irport_write_wakeup(struct irda_device *idev) { - int actual = 0, count; - - DEBUG( 4, __FUNCTION__ "() <%ld>\n", jiffies); - - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + int actual = 0; + int iobase; - /* Finished with frame? */ - if ( idev->tx_buff.offset == idev->tx_buff.len) { + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); + /* Finished with frame? */ + if (idev->tx_buff.len > 0) { + /* Write data left in transmit buffer */ + actual = irport_write(idev->io.iobase2, idev->io.fifo_size, + idev->tx_buff.data, idev->tx_buff.len); + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; + } else { + iobase = idev->io.iobase2; /* * Now serial buffer is almost free & we can start * transmission of another packet */ - DEBUG( 4, __FUNCTION__ "(), finished with frame!\n"); - idev->netdev.tbusy = 0; /* Unlock */ idev->stats.tx_packets++; /* Schedule network layer, so we can get some more frames */ - mark_bh( NET_BH); + mark_bh(NET_BH); - return; - } + outb(UART_FCR_ENABLE_FIFO | + UART_FCR_TRIGGER_14 | + UART_FCR_CLEAR_RCVR, iobase+UART_FCR); /* Enable FIFO's */ - /* Write data left in transmit buffer */ - count = idev->tx_buff.len - idev->tx_buff.offset; - actual = irport_write( idev->io.iobase2, idev->io.fifo_size, - idev->tx_buff.head, count); - idev->tx_buff.offset += actual; - idev->tx_buff.head += actual; + /* Turn on receive interrupts */ + outb(UART_IER_RLSI|UART_IER_RDI, iobase+UART_IER); + } } /* @@ -269,12 +226,12 @@ static void irport_write_wakeup( struct irda_device *idev) * * */ -static int irport_write( int iobase, int fifo_size, __u8 *buf, int len) +static int irport_write(int iobase, int fifo_size, __u8 *buf, int len) { int actual = 0; /* Tx FIFO should be empty! */ - if (!(inb( iobase+UART_LSR) & UART_LSR_THRE)) { + if (!(inb(iobase+UART_LSR) & UART_LSR_THRE)) { DEBUG( 0, __FUNCTION__ "(), failed, fifo not empty!\n"); return -1; } @@ -287,8 +244,8 @@ static int irport_write( int iobase, int fifo_size, __u8 *buf, int len) actual++; } - DEBUG( 4, __FUNCTION__ "(), fifo_size %d ; %d sent of %d\n", - fifo_size, actual, len); + DEBUG(4, __FUNCTION__ "(), fifo_size %d ; %d sent of %d\n", + fifo_size, actual, len); return actual; } @@ -300,44 +257,41 @@ static int irport_write( int iobase, int fifo_size, __u8 *buf, int len) * waits until the next transmitt interrupt, and continues until the * frame is transmited. */ -int irport_hard_xmit( struct sk_buff *skb, struct device *dev) +int irport_hard_xmit(struct sk_buff *skb, struct device *dev) { struct irda_device *idev; - int xbofs; - int actual; - - DEBUG( 4, __FUNCTION__ "()\n"); + int actual = 0; + int iobase; - ASSERT( dev != NULL, return -1;); + DEBUG(5, __FUNCTION__ "(), dev=%p\n", dev); - if ( dev->tbusy) { - DEBUG( 4, __FUNCTION__ "(), tbusy==TRUE\n"); - - return -EBUSY; - } + ASSERT(dev != NULL, return 0;); idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return -1;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); + + iobase = idev->io.iobase2; /* Lock transmit buffer */ - if ( irda_lock( (void *) &dev->tbusy) == FALSE) + if (irda_lock((void *) &dev->tbusy) == FALSE) return -EBUSY; - /* - * Transfer skb to tx_buff while wrapping, stuffing and making CRC - */ - idev->tx_buff.len = async_wrap_skb( skb, idev->tx_buff.data, - idev->tx_buff.truesize); - - actual = irport_write( idev->io.iobase2, idev->io.fifo_size, - idev->tx_buff.data, idev->tx_buff.len); - - idev->tx_buff.offset = actual; - idev->tx_buff.head = idev->tx_buff.data + actual; + /* Init tx buffer */ + idev->tx_buff.data = idev->tx_buff.head; + + /* Copy skb to tx_buff while wrapping, stuffing and making CRC */ + idev->tx_buff.len = async_wrap_skb(skb, idev->tx_buff.data, + idev->tx_buff.truesize); - dev_kfree_skb( skb); + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; + + /* Turn on transmit finished interrupt. Will fire immediately! */ + outb(UART_IER_THRI, iobase+UART_IER); + + dev_kfree_skb(skb); return 0; } @@ -348,28 +302,75 @@ int irport_hard_xmit( struct sk_buff *skb, struct device *dev) * Receive one frame from the infrared port * */ -static void irport_receive( struct irda_device *idev) +static void irport_receive(struct irda_device *idev) { int iobase; + int boguscount = 0; - if ( !idev) + if (!idev) return; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); iobase = idev->io.iobase2; - if ( idev->rx_buff.len == 0) - idev->rx_buff.head = idev->rx_buff.data; - /* * Receive all characters in Rx FIFO, unwrap and unstuff them. * async_unwrap_char will deliver all found frames */ do { - async_unwrap_char( idev, inb( iobase+UART_RX)); + async_unwrap_char(idev, inb(iobase+UART_RX)); + + /* Make sure we don't stay here to long */ + if (boguscount++ > 32) { + DEBUG(0,__FUNCTION__ "(), breaking!\n"); + break; + } + } while (inb(iobase+UART_LSR) & UART_LSR_DR); +} + +/* + * Function irport_interrupt (irq, dev_id, regs) + * + * Interrupt handler + */ +void irport_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct irda_device *idev = (struct irda_device *) dev_id; + int iobase; + int iir, lsr; + int boguscount = 0; + + if (!idev) { + printk(KERN_WARNING __FUNCTION__ + "() irq %d for unknown device.\n", irq); + return; + } + + idev->netdev.interrupt = 1; + + iobase = idev->io.iobase2; + + iir = inb(iobase + UART_IIR) & UART_IIR_ID; + while (iir) { + /* Clear interrupt */ + lsr = inb(iobase+UART_LSR); + + if ((iir & UART_IIR_THRI) && (lsr & UART_LSR_THRE)) { + /* Transmitter ready for data */ + irport_write_wakeup(idev); + } else if ((iir & UART_IIR_RDI) && (lsr & UART_LSR_DR)) { + /* Receive interrupt */ + irport_receive(idev); + } - } while ( inb( iobase+UART_LSR) & UART_LSR_DR); + /* Make sure we don't stay here to long */ + if (boguscount++ > 32) + break; + + iir = inb(iobase + UART_IIR) & UART_IIR_ID; + } + idev->netdev.interrupt = 0; } #ifdef MODULE diff --git a/drivers/net/irda/irtty.c b/drivers/net/irda/irtty.c index 09853b5b6..cc7ab91a4 100644 --- a/drivers/net/irda/irtty.c +++ b/drivers/net/irda/irtty.c @@ -1,12 +1,12 @@ /********************************************************************* * * Filename: irtty.c - * Version: 1.0 + * Version: 1.1 * Description: IrDA line discipline implementation * Status: Experimental. * Author: Dag Brattli * Created at: Tue Dec 9 21:18:38 1997 - * Modified at: Mon Jan 18 15:32:03 1999 + * Modified at: Thu Apr 22 09:20:24 1999 * Modified by: Dag Brattli * Sources: slip.c by Laurence Culhane, * Fred N. van Kempen, @@ -33,7 +33,6 @@ #include #include -#include #include #include #include @@ -46,22 +45,22 @@ static hashbin_t *dongles = NULL; static struct tty_ldisc irda_ldisc; -static int irtty_hard_xmit( struct sk_buff *skb, struct device *dev); -static void irtty_wait_until_sent( struct irda_device *driver); -static int irtty_is_receiving( struct irda_device *idev); -static int irtty_net_init( struct device *dev); +static int irtty_hard_xmit(struct sk_buff *skb, struct device *dev); +static void irtty_wait_until_sent(struct irda_device *driver); +static int irtty_is_receiving(struct irda_device *idev); +static int irtty_net_init(struct device *dev); static int irtty_net_open(struct device *dev); static int irtty_net_close(struct device *dev); -static int irtty_open( struct tty_struct *tty); -static void irtty_close( struct tty_struct *tty); -static int irtty_ioctl( struct tty_struct *, void *, int, void *); -static int irtty_receive_room( struct tty_struct *tty); -static void irtty_change_speed( struct irda_device *dev, int baud); -static void irtty_write_wakeup( struct tty_struct *tty); +static int irtty_open(struct tty_struct *tty); +static void irtty_close(struct tty_struct *tty); +static int irtty_ioctl(struct tty_struct *, void *, int, void *); +static int irtty_receive_room(struct tty_struct *tty); +static void irtty_change_speed(struct irda_device *dev, int baud); +static void irtty_write_wakeup(struct tty_struct *tty); -static void irtty_receive_buf( struct tty_struct *, const unsigned char *, - char *, int); +static void irtty_receive_buf(struct tty_struct *, const unsigned char *, + char *, int); char *driver_name = "irtty"; __initfunc(int irtty_init(void)) @@ -74,15 +73,15 @@ __initfunc(int irtty_init(void)) return -ENOMEM; } - dongles = hashbin_new( HB_LOCAL); - if ( dongles == NULL) { - printk( KERN_WARNING - "IrDA: Can't allocate dongles hashbin!\n"); + dongles = hashbin_new(HB_LOCAL); + if (dongles == NULL) { + printk(KERN_WARNING + "IrDA: Can't allocate dongles hashbin!\n"); return -ENOMEM; } /* Fill in our line protocol discipline, and register it */ - memset( &irda_ldisc, 0, sizeof( irda_ldisc)); + memset(&irda_ldisc, 0, sizeof( irda_ldisc)); irda_ldisc.magic = TTY_LDISC_MAGIC; irda_ldisc.name = "irda"; @@ -98,10 +97,10 @@ __initfunc(int irtty_init(void)) irda_ldisc.receive_room = irtty_receive_room; irda_ldisc.write_wakeup = irtty_write_wakeup; - if (( status = tty_register_ldisc( N_IRDA, &irda_ldisc)) != 0) { - printk( KERN_ERR - "IrDA: can't register line discipline (err = %d)\n", - status); + if (( status = tty_register_ldisc(N_IRDA, &irda_ldisc)) != 0) { + printk(KERN_ERR + "IrDA: can't register line discipline (err = %d)\n", + status); } return status; @@ -121,10 +120,10 @@ static void irtty_cleanup(void) /* * Unregister tty line-discipline */ - if (( ret = tty_register_ldisc( N_IRDA, NULL))) { - printk( KERN_ERR - "IrTTY: can't unregister line discipline (err = %d)\n", - ret); + if ((ret = tty_register_ldisc(N_IRDA, NULL))) { + ERROR(__FUNCTION__ + "(), can't unregister line discipline (err = %d)\n", + ret); } /* @@ -132,8 +131,8 @@ static void irtty_cleanup(void) * callback to irtty_close(), therefore we do give any deallocation * function to hashbin_destroy(). */ - hashbin_delete( irtty, NULL); - hashbin_delete( dongles, NULL); + hashbin_delete(irtty, NULL); + hashbin_delete(dongles, NULL); } #endif /* MODULE */ @@ -144,54 +143,51 @@ static void irtty_cleanup(void) * discipline is called for. Because we are sure the tty line exists, * we only have to link it to a free IrDA channel. */ -static int irtty_open( struct tty_struct *tty) +static int irtty_open(struct tty_struct *tty) { struct irtty_cb *self; char name[16]; - ASSERT( tty != NULL, return -EEXIST;); + ASSERT(tty != NULL, return -EEXIST;); /* First make sure we're not already connected. */ self = (struct irtty_cb *) tty->disc_data; - if ( self != NULL && self->magic == IRTTY_MAGIC) + if (self != NULL && self->magic == IRTTY_MAGIC) return -EEXIST; /* * Allocate new instance of the driver */ - self = kmalloc( sizeof(struct irtty_cb), GFP_KERNEL); - if ( self == NULL) { - printk( KERN_ERR "IrDA: Can't allocate memory for " - "IrDA control block!\n"); + self = kmalloc(sizeof(struct irtty_cb), GFP_KERNEL); + if (self == NULL) { + printk(KERN_ERR "IrDA: Can't allocate memory for " + "IrDA control block!\n"); return -ENOMEM; } - memset( self, 0, sizeof(struct irtty_cb)); + memset(self, 0, sizeof(struct irtty_cb)); self->tty = tty; tty->disc_data = self; /* Give self a name */ - sprintf( name, "%s%d", tty->driver.name, - MINOR(tty->device) - tty->driver.minor_start + - tty->driver.name_base); - + sprintf(name, "%s%d", tty->driver.name, + MINOR(tty->device) - tty->driver.minor_start + + tty->driver.name_base); + /* hashbin_insert( irtty, (QUEUE*) self, 0, self->name); */ - hashbin_insert( irtty, (QUEUE*) self, (int) self, NULL); + hashbin_insert(irtty, (QUEUE*) self, (int) self, NULL); - if (tty->driver.flush_buffer) { + if (tty->driver.flush_buffer) tty->driver.flush_buffer(tty); - } - - if (tty->ldisc.flush_buffer) { + + if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty); - } self->magic = IRTTY_MAGIC; /* * Initialize driver */ - /* self->idev.flags |= SIR_MODE | IO_PIO; */ self->idev.rx_buff.state = OUTSIDE_FRAME; /* @@ -200,13 +196,14 @@ static int irtty_open( struct tty_struct *tty) * that are not device dependent (such as link disconnect time) so * this parameter can be set by IrLAP (or the user) instead. DB */ - irda_init_max_qos_capabilies( &self->idev.qos); + irda_init_max_qos_capabilies(&self->idev.qos); /* The only value we must override it the baudrate */ self->idev.qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| IR_115200; - self->idev.qos.min_turn_time.bits = 0x03; - irda_qos_bits_to_value( &self->idev.qos); + self->idev.qos.min_turn_time.bits = 0x0f; + self->idev.flags = IFF_SIR | IFF_PIO; + irda_qos_bits_to_value(&self->idev.qos); /* Specify which buffer allocation policy we need */ self->idev.rx_buff.flags = GFP_KERNEL; @@ -229,7 +226,7 @@ static int irtty_open( struct tty_struct *tty) self->idev.netdev.stop = irtty_net_close; /* Open the IrDA device */ - irda_device_open( &self->idev, name, self); + irda_device_open(&self->idev, name, self); MOD_INC_USE_COUNT; @@ -237,26 +234,26 @@ static int irtty_open( struct tty_struct *tty) } /* - * Function irtty_close ( tty) + * Function irtty_close (tty) * * Close down a IrDA channel. This means flushing out any pending queues, * and then restoring the TTY line discipline to what it was before it got * hooked to IrDA (which usually is TTY again). */ -static void irtty_close( struct tty_struct *tty) +static void irtty_close(struct tty_struct *tty) { struct irtty_cb *self = (struct irtty_cb *) tty->disc_data; /* First make sure we're connected. */ - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); /* We are not using any dongle anymore! */ - if ( self->dongle_q) - self->dongle_q->dongle->close( &self->idev); + if (self->dongle_q) + self->dongle_q->dongle->close(&self->idev); /* Remove driver */ - irda_device_close( &self->idev); + irda_device_close(&self->idev); /* Stop tty */ tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); @@ -265,46 +262,71 @@ static void irtty_close( struct tty_struct *tty) self->tty = NULL; self->magic = 0; - /* hashbin_remove( irtty, 0, self->name); */ - self = hashbin_remove( irtty, (int) self, NULL); + self = hashbin_remove(irtty, (int) self, NULL); - if ( self != NULL) - kfree( self); + if (self != NULL) + kfree(self); MOD_DEC_USE_COUNT; +} + +/* + * Function irtty_stop_receiver (irda_device, stop) + * + * + * + */ +static void irtty_stop_receiver(struct irda_device *idev, int stop) +{ + struct termios old_termios; + struct irtty_cb *self; + int cflag; + + self = (struct irtty_cb *) idev->priv; - DEBUG( 4, "IrTTY: close() -->\n"); + old_termios = *(self->tty->termios); + cflag = self->tty->termios->c_cflag; + + if (stop) + cflag &= ~CREAD; + else + cflag |= CREAD; + + self->tty->termios->c_cflag = cflag; + self->tty->driver.set_termios(self->tty, &old_termios); } /* - * Function irtty_change_speed ( self, baud) + * Function irtty_change_speed (self, baud) * * Change the speed of the serial port. The driver layer must check that * all transmission has finished using the irtty_wait_until_sent() * function. */ -static void irtty_change_speed( struct irda_device *idev, int baud) +static void irtty_change_speed(struct irda_device *idev, int baud) { struct termios old_termios; struct irtty_cb *self; int cflag; - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + DEBUG(4,__FUNCTION__ "(), <%ld>\n", jiffies); + + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); self = (struct irtty_cb *) idev->priv; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); old_termios = *(self->tty->termios); cflag = self->tty->termios->c_cflag; cflag &= ~CBAUD; - DEBUG( 4, __FUNCTION__ "(), Setting speed to %d\n", baud); + DEBUG(4, __FUNCTION__ "(), Setting speed to %d\n", baud); - switch( baud) { + switch (baud) { case 1200: cflag |= B1200; break; @@ -333,7 +355,7 @@ static void irtty_change_speed( struct irda_device *idev, int baud) } self->tty->termios->c_cflag = cflag; - self->tty->driver.set_termios( self->tty, &old_termios); + self->tty->driver.set_termios(self->tty, &old_termios); } /* @@ -342,39 +364,42 @@ static void irtty_change_speed( struct irda_device *idev, int baud) * Initialize attached dongle. Warning, must be called with a process * context! */ -static void irtty_init_dongle( struct irtty_cb *self, int type) +static void irtty_init_dongle(struct irtty_cb *self, int type) { struct dongle_q *node; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); #ifdef CONFIG_KMOD /* Try to load the module needed */ switch( type) { case ESI_DONGLE: - DEBUG( 0, __FUNCTION__ "(), ESI dongle!\n"); - request_module( "esi"); + MESSAGE("IrDA: Trying to initialize ESI dongle!\n"); + request_module("esi"); break; case TEKRAM_DONGLE: - DEBUG( 0, __FUNCTION__ "(), Tekram dongle!\n"); - request_module( "tekram"); + MESSAGE("IrDA: Trying to initialize Tekram dongle!\n"); + request_module("tekram"); break; - case ACTISYS_DONGLE: - DEBUG( 0, __FUNCTION__ "(), ACTiSYS dongle!\n"); - request_module( "actisys"); + case ACTISYS_DONGLE: /* FALLTHROUGH */ + case ACTISYS_PLUS_DONGLE: + MESSAGE("IrDA: Trying to initialize ACTiSYS dongle!\n"); + request_module("actisys"); + break; + case GIRBIL_DONGLE: + MESSAGE("IrDA: Trying to initialize GIrBIL dongle!\n"); + request_module("girbil"); break; default: - DEBUG( 0, __FUNCTION__ "(), Unknown dongle type!\n"); + ERROR("Unknown dongle type!\n"); return; - break; } #endif /* CONFIG_KMOD */ - node = hashbin_find( dongles, type, NULL); + node = hashbin_find(dongles, type, NULL); if ( !node) { - DEBUG( 0, __FUNCTION__ - "(), Unable to find requested dongle\n"); + ERROR("Unable to find requested dongle\n"); return; } self->dongle_q = node; @@ -385,14 +410,14 @@ static void irtty_init_dongle( struct irtty_cb *self, int type) /* * Now initialize the dongle! */ - node->dongle->open( &self->idev, type); - node->dongle->qos_init( &self->idev, &self->idev.qos); + node->dongle->open(&self->idev, type); + node->dongle->qos_init(&self->idev, &self->idev.qos); /* Reset dongle */ - node->dongle->reset( &self->idev, 0); + node->dongle->reset(&self->idev, 0); /* Set to default baudrate */ - node->dongle->change_speed( &self->idev, 9600); + node->dongle->change_speed(&self->idev, 9600); } /* @@ -401,8 +426,7 @@ static void irtty_init_dongle( struct irtty_cb *self, int type) * The Swiss army knife of system calls :-) * */ -static int irtty_ioctl( struct tty_struct *tty, void *file, int cmd, - void *arg) +static int irtty_ioctl(struct tty_struct *tty, void *file, int cmd, void *arg) { struct irtty_cb *self; int err = 0; @@ -410,25 +434,25 @@ static int irtty_ioctl( struct tty_struct *tty, void *file, int cmd, self = (struct irtty_cb *) tty->disc_data; - ASSERT( self != NULL, return -ENODEV;); - ASSERT( self->magic == IRTTY_MAGIC, return -EBADR;); + ASSERT(self != NULL, return -ENODEV;); + ASSERT(self->magic == IRTTY_MAGIC, return -EBADR;); - if ( _IOC_DIR(cmd) & _IOC_READ) + if (_IOC_DIR(cmd) & _IOC_READ) err = verify_area( VERIFY_WRITE, (void *) arg, size); - else if ( _IOC_DIR(cmd) & _IOC_WRITE) + else if (_IOC_DIR(cmd) & _IOC_WRITE) err = verify_area( VERIFY_READ, (void *) arg, size); - if ( err) + if (err) return err; switch(cmd) { case TCGETS: case TCGETA: - return n_tty_ioctl( tty, (struct file *) file, cmd, - (unsigned long) arg); + return n_tty_ioctl(tty, (struct file *) file, cmd, + (unsigned long) arg); break; case IRTTY_IOCTDONGLE: /* Initialize dongle */ - irtty_init_dongle( self, (int) arg); + irtty_init_dongle(self, (int) arg); break; default: return -ENOIOCTLCMD; @@ -444,13 +468,13 @@ static int irtty_ioctl( struct tty_struct *tty, void *file, int cmd, * been received, which can now be decapsulated and delivered for * further processing */ -static void irtty_receive_buf( struct tty_struct *tty, const unsigned - char *cp, char *fp, int count) +static void irtty_receive_buf(struct tty_struct *tty, const unsigned char *cp, + char *fp, int count) { struct irtty_cb *self = (struct irtty_cb *) tty->disc_data; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); /* Read the characters out of the buffer */ while (count--) { @@ -460,83 +484,75 @@ static void irtty_receive_buf( struct tty_struct *tty, const unsigned if (fp && *fp++) { DEBUG( 0, "Framing or parity error!\n"); irda_device_set_media_busy( &self->idev, TRUE); - /* sl->rx_errors++; */ + cp++; continue; } - /* - * Unwrap and destuff one byte - */ - async_unwrap_char( &self->idev, *cp++); - /* self->rx_over_errors++; */ + /* Unwrap and destuff one byte */ + async_unwrap_char(&self->idev, *cp++); } } /* * Function irtty_hard_xmit (skb, dev) * - * Transmit skb + * Transmit frame * */ -static int irtty_hard_xmit( struct sk_buff *skb, struct device *dev) +static int irtty_hard_xmit(struct sk_buff *skb, struct device *dev) { struct irtty_cb *self; struct irda_device *idev; int actual = 0; - ASSERT( dev != NULL, return 0;); - ASSERT( skb != NULL, return 0;); - - if ( dev->tbusy) { - DEBUG( 4, __FUNCTION__ "(), tbusy==TRUE\n"); - - return -EBUSY; - } - idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return -1;); self = (struct irtty_cb *) idev->priv; - ASSERT( self != NULL, return 0;); - ASSERT( self->magic == IRTTY_MAGIC, return 0;); + ASSERT(self != NULL, return 0;); + ASSERT(self->magic == IRTTY_MAGIC, return 0;); /* Lock transmit buffer */ - if ( irda_lock( (void *) &dev->tbusy) == FALSE) - return 0; - - /* - * Transfer skb to tx_buff while wrapping, stuffing and making CRC - */ - idev->tx_buff.len = async_wrap_skb( skb, idev->tx_buff.data, - idev->tx_buff.truesize); + if (irda_lock((void *) &dev->tbusy) == FALSE) + return -EBUSY; + + /* Init tx buffer*/ + idev->tx_buff.data = idev->tx_buff.head; + + /* Copy skb to tx_buff while wrapping, stuffing and making CRC */ + idev->tx_buff.len = async_wrap_skb(skb, idev->tx_buff.data, + idev->tx_buff.truesize); self->tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); dev->trans_start = jiffies; - if ( self->tty->driver.write) - actual = self->tty->driver.write( self->tty, 0, - idev->tx_buff.data, - idev->tx_buff.len); + if (self->tty->driver.write) + actual = self->tty->driver.write(self->tty, 0, + idev->tx_buff.data, + idev->tx_buff.len); + + /* Hide the part we just transmitted */ + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; - idev->tx_buff.offset = actual; - idev->tx_buff.head = idev->tx_buff.data + actual; + idev->stats.tx_packets++; + idev->stats.tx_bytes += idev->tx_buff.len; #if 0 /* * Did we transmit the whole frame? Commented out for now since * I must check if this optimalization really works. DB. */ - if (( idev->tx.count - idev->tx.ptr) <= 0) { + if ((idev->tx_buff.len) == 0) { DEBUG( 4, "irtty_xmit_buf: finished with frame!\n"); self->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); irda_unlock( &self->tbusy); } #endif - - dev_kfree_skb( skb); + dev_kfree_skb(skb); return 0; } @@ -547,8 +563,9 @@ static int irtty_hard_xmit( struct sk_buff *skb, struct device *dev) * Used by the TTY to find out how much data we can receive at a time * */ -static int irtty_receive_room( struct tty_struct *tty) +static int irtty_receive_room(struct tty_struct *tty) { + DEBUG(0, __FUNCTION__ "()\n"); return 65536; /* We can handle an infinite amount of data. :-) */ } @@ -559,51 +576,42 @@ static int irtty_receive_room( struct tty_struct *tty) * more packets to send, we send them here. * */ -static void irtty_write_wakeup( struct tty_struct *tty) +static void irtty_write_wakeup(struct tty_struct *tty) { - int actual = 0, count; struct irtty_cb *self = (struct irtty_cb *) tty->disc_data; struct irda_device *idev; + int actual = 0; /* * First make sure we're connected. */ - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); idev = &self->idev; - /* - * Finished with frame? - */ - if ( idev->tx_buff.offset == idev->tx_buff.len) { + /* Finished with frame? */ + if (idev->tx_buff.len > 0) { + /* Write data left in transmit buffer */ + actual = tty->driver.write(tty, 0, idev->tx_buff.data, + idev->tx_buff.len); + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; + } else { /* * Now serial buffer is almost free & we can start * transmission of another packet */ - DEBUG( 4, __FUNCTION__ "(), finished with frame!\n"); - + DEBUG(5, __FUNCTION__ "(), finished with frame!\n"); + tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); idev->netdev.tbusy = 0; /* Unlock */ - idev->stats.tx_packets++; - idev->stats.tx_bytes += idev->tx_buff.len; - + /* Tell network layer that we want more frames */ - mark_bh( NET_BH); - - return; + mark_bh(NET_BH); } - /* - * Write data left in transmit buffer - */ - count = idev->tx_buff.len - idev->tx_buff.offset; - actual = tty->driver.write( tty, 0, idev->tx_buff.head, count); - idev->tx_buff.offset += actual; - idev->tx_buff.head += actual; - - DEBUG( 4, "actual=%d, sent %d\n", actual, count); } /* @@ -612,9 +620,9 @@ static void irtty_write_wakeup( struct tty_struct *tty) * Return TRUE is we are currently receiving a frame * */ -static int irtty_is_receiving( struct irda_device *idev) +static int irtty_is_receiving(struct irda_device *idev) { - return ( idev->rx_buff.state != OUTSIDE_FRAME); + return (idev->rx_buff.state != OUTSIDE_FRAME); } /* @@ -624,20 +632,20 @@ static int irtty_is_receiving( struct irda_device *idev) * to change the speed of the serial port. Warning this function must * be called with a process context! */ -static void irtty_wait_until_sent( struct irda_device *idev) +static void irtty_wait_until_sent(struct irda_device *idev) { struct irtty_cb *self = (struct irtty_cb *) idev->priv; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); - DEBUG( 4, "Chars in buffer %d\n", - self->tty->driver.chars_in_buffer( self->tty)); + DEBUG(4, "Chars in buffer %d\n", + self->tty->driver.chars_in_buffer(self->tty)); - tty_wait_until_sent( self->tty, 0); + tty_wait_until_sent(self->tty, 0); } -int irtty_register_dongle( struct dongle *dongle) +int irtty_register_dongle(struct dongle *dongle) { struct dongle_q *new; @@ -648,47 +656,81 @@ int irtty_register_dongle( struct dongle *dongle) } /* Make new IrDA dongle */ - new = (struct dongle_q *) kmalloc (sizeof (struct dongle_q), - GFP_KERNEL); - if (new == NULL) { - return 1; + new = (struct dongle_q *) kmalloc(sizeof(struct dongle_q), GFP_KERNEL); + if (new == NULL) + return -1; - } - memset( new, 0, sizeof( struct dongle_q)); + memset(new, 0, sizeof( struct dongle_q)); new->dongle = dongle; - /* Insert IrDA compressor into hashbin */ - hashbin_insert( dongles, (QUEUE *) new, dongle->type, NULL); + /* Insert IrDA dongle into hashbin */ + hashbin_insert(dongles, (QUEUE *) new, dongle->type, NULL); return 0; } -void irtty_unregister_dongle( struct dongle *dongle) +void irtty_unregister_dongle(struct dongle *dongle) { struct dongle_q *node; - node = hashbin_remove( dongles, dongle->type, NULL); - if ( !node) { - DEBUG( 0, __FUNCTION__ "(), dongle not found!\n"); + node = hashbin_remove(dongles, dongle->type, NULL); + if (!node) { + ERROR(__FUNCTION__ "(), dongle not found!\n"); return; } - kfree( node); + kfree(node); } -static int irtty_net_init( struct device *dev) + +/* + * Function irtty_set_dtr_rts (tty, dtr, rts) + * + * This function can be used by dongles etc. to set or reset the status + * of the dtr and rts lines + */ +void irtty_set_dtr_rts(struct tty_struct *tty, int dtr, int rts) +{ + mm_segment_t fs; + int arg = 0; + +#ifdef TIOCM_OUT2 /* Not defined for ARM */ + arg = TIOCM_OUT2; +#endif + if (rts) + arg |= TIOCM_RTS; + if (dtr) + arg |= TIOCM_DTR; + + /* + * The ioctl() function, or actually set_modem_info() in serial.c + * expects a pointer to the argument in user space. To hack us + * around this, we use the set_fs() function to fool the routines + * that check if they are called from user space. We also need + * to send a pointer to the argument so get_user() gets happy. DB. + */ + + fs = get_fs(); + set_fs(get_ds()); + + if (tty->driver.ioctl(tty, NULL, TIOCMSET, (unsigned long) &arg)) { + ERROR(__FUNCTION__ "(), error doing ioctl!\n"); + } + set_fs(fs); +} + +static int irtty_net_init(struct device *dev) { /* Set up to be a normal IrDA network device driver */ - irda_device_setup( dev); + irda_device_setup(dev); /* Insert overrides below this line! */ return 0; } - -static int irtty_net_open( struct device *dev) +static int irtty_net_open(struct device *dev) { - ASSERT( dev != NULL, return -1;); + ASSERT(dev != NULL, return -1;); /* Ready to play! */ dev->tbusy = 0; @@ -702,7 +744,7 @@ static int irtty_net_open( struct device *dev) static int irtty_net_close(struct device *dev) { - ASSERT( dev != NULL, return -1;); + ASSERT(dev != NULL, return -1;); /* Stop device */ dev->tbusy = 1; @@ -715,6 +757,9 @@ static int irtty_net_close(struct device *dev) #ifdef MODULE +MODULE_AUTHOR("Dag Brattli "); +MODULE_DESCRIPTION("IrDA TTY device driver"); + /* * Function init_module (void) * @@ -723,8 +768,7 @@ static int irtty_net_close(struct device *dev) */ int init_module(void) { - irtty_init(); - return(0); + return irtty_init(); } /* diff --git a/drivers/net/irda/pc87108.c b/drivers/net/irda/pc87108.c index faf9eea33..878b2e33a 100644 --- a/drivers/net/irda/pc87108.c +++ b/drivers/net/irda/pc87108.c @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sat Nov 7 21:43:15 1998 - * Modified at: Mon Dec 28 08:46:16 1998 + * Modified at: Tue Apr 20 11:11:39 1999 * Modified by: Dag Brattli * * Copyright (c) 1998 Dag Brattli @@ -50,7 +50,6 @@ #include #include #include -#include #include #include @@ -100,7 +99,9 @@ static char *dongle_types[] = { /* Some prototypes */ static int pc87108_open( int i, unsigned int iobase, unsigned int board_addr, unsigned int irq, unsigned int dma); +#ifdef MODULE static int pc87108_close( struct irda_device *idev); +#endif /* MODULE */ static int pc87108_probe( int iobase, int board_addr, int irq, int dma); static void pc87108_pio_receive( struct irda_device *idev); static int pc87108_dma_receive( struct irda_device *idev); @@ -131,7 +132,7 @@ __initfunc(int pc87108_init(void)) for ( i=0; (io[i] < 2000) && (i < 4); i++) { int ioaddr = io[i]; - if (check_region(ioaddr, CHIP_IO_EXTENT)) + if (check_region(ioaddr, CHIP_IO_EXTENT) < 0) continue; if (pc87108_open( i, io[i], io2[i], irq[i], dma[i]) == 0) return 0; @@ -150,11 +151,11 @@ static void pc87108_cleanup(void) { int i; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - for ( i=0; i < 4; i++) { - if ( dev_self[i]) - pc87108_close( &(dev_self[i]->idev)); + for (i=0; i < 4; i++) { + if (dev_self[i]) + pc87108_close(&(dev_self[i]->idev)); } } #endif /* MODULE */ @@ -221,6 +222,8 @@ static int pc87108_open( int i, unsigned int iobase, unsigned int board_addr, idev->qos.min_turn_time.bits = 0x07; irda_qos_bits_to_value( &idev->qos); + idev->flags = IFF_FIR|IFF_MIR|IFF_SIR|IFF_DMA|IFF_PIO|IFF_DONGLE; + /* Specify which buffer allocation policy we need */ idev->rx_buff.flags = GFP_KERNEL | GFP_DMA; idev->tx_buff.flags = GFP_KERNEL | GFP_DMA; @@ -230,7 +233,6 @@ static int pc87108_open( int i, unsigned int iobase, unsigned int board_addr, idev->tx_buff.truesize = 4000; /* Initialize callbacks */ - idev->hard_xmit = pc87108_hard_xmit; idev->change_speed = pc87108_change_speed; idev->wait_until_sent = pc87108_wait_until_sent; idev->is_receiving = pc87108_is_receiving; @@ -250,6 +252,7 @@ static int pc87108_open( int i, unsigned int iobase, unsigned int board_addr, return 0; } +#ifdef MODULE /* * Function pc87108_close (idev) * @@ -276,6 +279,7 @@ static int pc87108_close( struct irda_device *idev) return 0; } +#endif /* MODULE */ /* * Function pc87108_probe (iobase, board_addr, irq, dma) @@ -666,7 +670,7 @@ static void pc87108_change_speed( struct irda_device *idev, int speed) /* Set appropriate speed mode */ switch_bank(iobase, BANK0); - outb( mcr|MCR_TX_DFR, iobase+MCR); + outb(mcr | MCR_TX_DFR, iobase+MCR); /* Give some hits to the transceiver */ pc87108_change_dongle_speed( iobase, speed, idev->io.dongle_id); @@ -720,12 +724,6 @@ static int pc87108_hard_xmit( struct sk_buff *skb, struct device *dev) iobase = idev->io.iobase; DEBUG(4, __FUNCTION__ "(%ld), skb->len=%d\n", jiffies, (int) skb->len); - - if ( dev->tbusy) { - DEBUG( 4, __FUNCTION__ "(), tbusy==TRUE\n"); - - return -EBUSY; - } /* Lock transmit buffer */ if ( irda_lock( (void *) &dev->tbusy) == FALSE) @@ -736,10 +734,9 @@ static int pc87108_hard_xmit( struct sk_buff *skb, struct device *dev) /* Decide if we should use PIO or DMA transfer */ if ( idev->io.baudrate > 115200) { - memcpy( idev->tx_buff.data, skb->data, skb->len); + idev->tx_buff.data = idev->tx_buff.head; + memcpy(idev->tx_buff.data, skb->data, skb->len); idev->tx_buff.len = skb->len; - idev->tx_buff.head = idev->tx_buff.data; - idev->tx_buff.offset = 0; mtt = irda_get_mtt( skb); if ( mtt > 50) { @@ -769,11 +766,10 @@ static int pc87108_hard_xmit( struct sk_buff *skb, struct device *dev) pc87108_dma_write( idev, iobase); } } else { - idev->tx_buff.len = async_wrap_skb( skb, idev->tx_buff.data, - idev->tx_buff.truesize); + idev->tx_buff.len = async_wrap_skb(skb, idev->tx_buff.data, + idev->tx_buff.truesize); - idev->tx_buff.offset = 0; - idev->tx_buff.head = idev->tx_buff.data; + idev->tx_buff.data = idev->tx_buff.head; /* Add interrupt on tx low level (will fire immediately) */ switch_bank( iobase, BANK0); @@ -806,8 +802,8 @@ static void pc87108_dma_write( struct irda_device *idev, int iobase) switch_bank(iobase, BANK0); outb( inb( iobase+MCR) & ~MCR_DMA_EN, iobase+MCR); - setup_dma( idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, - DMA_MODE_WRITE); + setup_dma(idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, + DMA_MODE_WRITE); /* idev->media_busy = TRUE; */ idev->io.direction = IO_XMIT; @@ -921,52 +917,51 @@ static void pc87108_dma_xmit_complete( struct irda_device *idev) * if it starts to receive a frame. * */ -static int pc87108_dma_receive( struct irda_device *idev) +static int pc87108_dma_receive(struct irda_device *idev) { struct pc87108 *self; int iobase; __u8 bsr; - ASSERT( idev != NULL, return -1;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return -1;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return -1;); - DEBUG( 4, __FUNCTION__ "\n"); + DEBUG(4, __FUNCTION__ "\n"); self = idev->priv; - iobase= idev->io.iobase; + iobase = idev->io.iobase; /* Save current bank */ - bsr = inb( iobase+BSR); + bsr = inb(iobase+BSR); /* Disable DMA */ - switch_bank( iobase, BANK0); - outb( inb(iobase+MCR) & ~MCR_DMA_EN, iobase+MCR); + switch_bank(iobase, BANK0); + outb(inb(iobase+MCR) & ~MCR_DMA_EN, iobase+MCR); - setup_dma( idev->io.dma, idev->rx_buff.data, idev->rx_buff.truesize, - DMA_MODE_READ); + setup_dma(idev->io.dma, idev->rx_buff.data, + idev->rx_buff.truesize, DMA_MODE_READ); /* driver->media_busy = FALSE; */ idev->io.direction = IO_RECV; - idev->rx_buff.head = idev->rx_buff.data; - idev->rx_buff.offset = 0; + idev->rx_buff.data = idev->rx_buff.head; /* Reset Rx FIFO. This will also flush the ST_FIFO */ - outb( FCR_RXTH|FCR_TXTH|FCR_RXSR|FCR_FIFO_EN, iobase+FCR); + outb(FCR_RXTH|FCR_TXTH|FCR_RXSR|FCR_FIFO_EN, iobase+FCR); self->st_fifo.len = self->st_fifo.tail = self->st_fifo.head = 0; /* Choose DMA Rx, DMA Fairness, and Advanced mode */ switch_bank(iobase, BANK2); - outb(( inb( iobase+ECR1) & ~ECR1_DMASWP)|ECR1_DMANF|ECR1_EXT_SL, - iobase+ECR1); + outb((inb( iobase+ECR1) & ~ECR1_DMASWP)|ECR1_DMANF|ECR1_EXT_SL, + iobase+ECR1); /* enable DMA */ switch_bank(iobase, BANK0); - outb( inb( iobase+MCR)|MCR_DMA_EN, iobase+MCR); + outb(inb(iobase+MCR)|MCR_DMA_EN, iobase+MCR); /* Restore bank register */ - outb( bsr, iobase+BSR); + outb(bsr, iobase+BSR); - DEBUG( 4, __FUNCTION__ "(), done!\n"); + DEBUG(4, __FUNCTION__ "(), done!\n"); return 0; } @@ -1026,42 +1021,41 @@ static int pc87108_dma_receive_complete( struct irda_device *idev, int iobase) /* Skip frame */ idev->stats.rx_errors++; - idev->rx_buff.offset += len; - idev->rx_buff.head += len; + idev->rx_buff.data += len; - if ( status & FRM_ST_MAX_LEN) + if (status & FRM_ST_MAX_LEN) idev->stats.rx_length_errors++; - if ( status & FRM_ST_PHY_ERR) + if (status & FRM_ST_PHY_ERR) idev->stats.rx_frame_errors++; - if ( status & FRM_ST_BAD_CRC) + if (status & FRM_ST_BAD_CRC) idev->stats.rx_crc_errors++; } /* The errors below can be reported in both cases */ - if ( status & FRM_ST_OVR1) + if (status & FRM_ST_OVR1) idev->stats.rx_fifo_errors++; - if ( status & FRM_ST_OVR2) + if (status & FRM_ST_OVR2) idev->stats.rx_fifo_errors++; } else { /* Check if we have transfered all data to memory */ - if ( inb( iobase+LSR) & LSR_RXDA) { + if (inb(iobase+LSR) & LSR_RXDA) { /* Put this entry back in fifo */ st_fifo->head--; st_fifo->len++; st_fifo->entries[st_fifo->head].status = status; - st_fifo->entries[ st_fifo->head].len = len; + st_fifo->entries[st_fifo->head].len = len; /* Restore bank register */ - outb( bank, iobase+BSR); + outb(bank, iobase+BSR); return FALSE; /* I'll be back! */ } /* Should be OK then */ - skb = dev_alloc_skb( len+1); + skb = dev_alloc_skb(len+1); if (skb == NULL) { printk( KERN_INFO __FUNCTION__ "(), memory squeeze, dropping frame.\n"); @@ -1072,20 +1066,19 @@ static int pc87108_dma_receive_complete( struct irda_device *idev, int iobase) } /* Make sure IP header gets aligned */ - skb_reserve( skb, 1); + skb_reserve(skb, 1); /* Copy frame without CRC */ - if ( idev->io.baudrate < 4000000) { - skb_put( skb, len-2); - memcpy( skb->data, idev->rx_buff.head, len-2); + if (idev->io.baudrate < 4000000) { + skb_put(skb, len-2); + memcpy(skb->data, idev->rx_buff.data, len-2); } else { - skb_put( skb, len-4); - memcpy( skb->data, idev->rx_buff.head, len-4); + skb_put(skb, len-4); + memcpy(skb->data, idev->rx_buff.data, len-4); } /* Move to next frame */ - idev->rx_buff.offset += len; - idev->rx_buff.head += len; + idev->rx_buff.data += len; idev->stats.rx_packets++; skb->dev = &idev->netdev; @@ -1095,7 +1088,7 @@ static int pc87108_dma_receive_complete( struct irda_device *idev, int iobase) } } /* Restore bank register */ - outb( bank, iobase+BSR); + outb(bank, iobase+BSR); return TRUE; } @@ -1111,23 +1104,19 @@ static void pc87108_pio_receive( struct irda_device *idev) __u8 byte = 0x00; int iobase; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); iobase = idev->io.iobase; - if ( idev->rx_buff.len == 0) { - idev->rx_buff.head = idev->rx_buff.data; - } - /* Receive all characters in Rx FIFO */ do { - byte = inb( iobase+RXD); - async_unwrap_char( idev, byte); + byte = inb(iobase+RXD); + async_unwrap_char(idev, byte); - } while ( inb( iobase+LSR) & LSR_RXDA); /* Data available */ + } while (inb(iobase+LSR) & LSR_RXDA); /* Data available */ } /* @@ -1136,38 +1125,35 @@ static void pc87108_pio_receive( struct irda_device *idev) * Handle SIR interrupt * */ -static __u8 pc87108_sir_interrupt( struct irda_device *idev, int eir) +static __u8 pc87108_sir_interrupt(struct irda_device *idev, int eir) { - int len; int actual; __u8 new_ier = 0; /* Transmit FIFO low on data */ if ( eir & EIR_TXLDL_EV) { /* Write data left in transmit buffer */ - len = idev->tx_buff.len - idev->tx_buff.offset; - - ASSERT( len > 0, return 0;); - actual = pc87108_pio_write( idev->io.iobase, - idev->tx_buff.head, - len, idev->io.fifo_size); - idev->tx_buff.offset += actual; - idev->tx_buff.head += actual; + actual = pc87108_pio_write(idev->io.iobase, + idev->tx_buff.data, + idev->tx_buff.len, + idev->io.fifo_size); + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; idev->io.direction = IO_XMIT; - ASSERT( actual <= len, return 0;); /* Check if finished */ - if ( actual == len) { - DEBUG( 4, __FUNCTION__ "(), finished with frame!\n"); + if (idev->tx_buff.len > 0) + new_ier |= IER_TXLDL_IE; + else { idev->netdev.tbusy = 0; /* Unlock */ idev->stats.tx_packets++; - + mark_bh(NET_BH); new_ier |= IER_TXEMP_IE; - } else - new_ier |= IER_TXLDL_IE; + } + } /* Check if transmission has completed */ if ( eir & EIR_TXEMP_EV) { @@ -1482,9 +1468,7 @@ static int pc87108_net_close(struct device *dev) */ int init_module(void) { - pc87108_init(); - - return(0); + return pc87108_init(); } /* @@ -1497,6 +1481,5 @@ void cleanup_module(void) { pc87108_cleanup(); } - -#endif +#endif /* MODULE */ diff --git a/drivers/net/irda/tekram.c b/drivers/net/irda/tekram.c index bdada4afa..de1a553a4 100644 --- a/drivers/net/irda/tekram.c +++ b/drivers/net/irda/tekram.c @@ -1,12 +1,12 @@ /********************************************************************* * * Filename: tekram.c - * Version: 0.4 + * Version: 1.0 * Description: Implementation of the Tekram IrMate IR-210B dongle * Status: Experimental. * Author: Dag Brattli * Created at: Wed Oct 21 20:02:35 1998 - * Modified at: Mon Jan 18 11:30:38 1999 + * Modified at: Tue Apr 13 16:33:54 1999 * Modified by: Dag Brattli * * Copyright (c) 1998 Dag Brattli, All Rights Reserved. @@ -33,16 +33,23 @@ #include #include -#include #include #include #include -static void tekram_reset( struct irda_device *dev, int unused); -static void tekram_open( struct irda_device *dev, int type); -static void tekram_close( struct irda_device *dev); -static void tekram_change_speed( struct irda_device *dev, int baud); -static void tekram_init_qos( struct irda_device *idev, struct qos_info *qos); +static void tekram_reset(struct irda_device *dev, int unused); +static void tekram_open(struct irda_device *dev, int type); +static void tekram_close(struct irda_device *dev); +static void tekram_change_speed(struct irda_device *dev, int baud); +static void tekram_init_qos(struct irda_device *idev, struct qos_info *qos); + +#define TEKRAM_115200 0x00 +#define TEKRAM_57600 0x01 +#define TEKRAM_38400 0x02 +#define TEKRAM_19200 0x03 +#define TEKRAM_9600 0x04 + +#define TEKRAM_PW 0x10 /* Pulse select bit */ static struct dongle dongle = { TEKRAM_DONGLE, @@ -53,9 +60,9 @@ static struct dongle dongle = { tekram_init_qos, }; -__initfunc(void tekram_init(void)) +__initfunc(int tekram_init(void)) { - irtty_register_dongle( &dongle); + return irtty_register_dongle(&dongle); } void tekram_cleanup(void) @@ -63,9 +70,12 @@ void tekram_cleanup(void) irtty_unregister_dongle( &dongle); } -static void tekram_open( struct irda_device *dev, int type) +static void tekram_open( struct irda_device *idev, int type) { - strcat( dev->name, " <-> tekram"); + strcat(idev->description, " <-> tekram"); + + idev->io.dongle_id = type; + idev->flags |= IFF_DONGLE; MOD_INC_USE_COUNT; } @@ -96,23 +106,20 @@ static void tekram_change_speed( struct irda_device *dev, int baud) struct irtty_cb *self; struct tty_struct *tty; struct termios old_termios; - int arg = 0; int cflag; __u8 byte; - int actual; - mm_segment_t fs; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( dev != NULL, return;); - ASSERT( dev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(dev != NULL, return;); + ASSERT(dev->magic == IRDA_DEVICE_MAGIC, return;); self = (struct irtty_cb *) dev->priv; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); - if ( !self->tty) + if (!self->tty) return; tty = self->tty; @@ -123,71 +130,50 @@ static void tekram_change_speed( struct irda_device *dev, int baud) cflag &= ~CBAUD; switch (baud) { - case 9600: default: + /* FALLTHROUGH */ + case 9600: cflag |= B9600; - byte = 4; + byte = TEKRAM_PW|TEKRAM_9600; break; case 19200: cflag |= B19200; - byte = 3; + byte = TEKRAM_PW|TEKRAM_19200; break; case 34800: cflag |= B38400; - byte = 2; + byte = TEKRAM_PW|TEKRAM_38400; break; case 57600: cflag |= B57600; - byte = 1; + byte = TEKRAM_PW|TEKRAM_57600; break; case 115200: cflag |= B115200; - byte = 0; + byte = TEKRAM_PW|TEKRAM_115200; break; } /* Set DTR, Clear RTS */ - DEBUG( 0, __FUNCTION__ "(), Setting DTR, Clearing RTS\n"); - arg = TIOCM_DTR | TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) { - DEBUG( 0, "error setting Tekram speed!\n"); - } - set_fs(fs); + irtty_set_dtr_rts(tty, TRUE, FALSE); /* Wait at least 7us */ - udelay( 7); + udelay(7); - DEBUG( 0, __FUNCTION__ "(), Writing control byte\n"); /* Write control byte */ - if ( tty->driver.write) - actual = tty->driver.write( self->tty, 0, &byte, 1); + if (tty->driver.write) + tty->driver.write(self->tty, 0, &byte, 1); /* Wait at least 100 ms */ current->state = TASK_INTERRUPTIBLE; - schedule_timeout( 10); + schedule_timeout(MSECS_TO_JIFFIES(100)); /* Set DTR, Set RTS */ - DEBUG( 0, __FUNCTION__ "(), Setting DTR, Setting RTS\n"); - arg = TIOCM_DTR | TIOCM_RTS | TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) { - DEBUG( 0, "error setting Tekram speed!\n"); - } - set_fs(fs); + irtty_set_dtr_rts(tty, TRUE, TRUE); - DEBUG( 0, __FUNCTION__ "(), Setting new speed on serial port\n"); /* Now change the speed of the serial port */ tty->termios->c_cflag = cflag; - tty->driver.set_termios( tty, &old_termios); + tty->driver.set_termios(tty, &old_termios); } /* @@ -197,80 +183,50 @@ static void tekram_change_speed( struct irda_device *dev, int baud) * must be called with a process context!! * * Algorithm: - * 0. set RTS and DTR, and wait 50 ms - * ( power off the IR-210 ) + * 0. Clear RTS and DTR, and wait 50 ms (power off the IR-210 ) * 1. clear RTS * 2. set DTR, and wait at least 1 ms * 3. clear DTR to SPACE state, wait at least 50 us for further * operation */ -void tekram_reset( struct irda_device *dev, int unused) +void tekram_reset(struct irda_device *dev, int unused) { struct irtty_cb *self; struct tty_struct *tty; - int arg = 0; - mm_segment_t fs; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( dev != NULL, return;); - ASSERT( dev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(dev != NULL, return;); + ASSERT(dev->magic == IRDA_DEVICE_MAGIC, return;); self = (struct irtty_cb *) dev->priv; - ASSERT( self != NULL, return;); - ASSERT( self->magic == IRTTY_MAGIC, return;); + ASSERT(self != NULL, return;); + ASSERT(self->magic == IRTTY_MAGIC, return;); tty = self->tty; - if ( !tty) + if (!tty) return; - DEBUG( 0, __FUNCTION__ "(), Power off dongle\n"); - arg = TIOCM_RTS | TIOCM_DTR | TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) - { - DEBUG(0, "error setting ESI speed!\n"); - } - set_fs(fs); + /* Power off dongle */ + irtty_set_dtr_rts(tty, FALSE, FALSE); /* Sleep 50 ms */ current->state = TASK_INTERRUPTIBLE; - schedule_timeout(5); - - DEBUG( 0, __FUNCTION__ "(), Set DTR, clear RTS\n"); - /* Set DTR, clear RTS */ - arg = TIOCM_DTR | TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, - (unsigned long) &arg)) { - DEBUG( 0, "Error setting Tekram speed!\n"); - } - set_fs(fs); + schedule_timeout(MSECS_TO_JIFFIES(50)); + + /* Clear DTR, Set RTS */ + irtty_set_dtr_rts(tty, FALSE, TRUE); /* Should sleep 1 ms, but 10-20 should not do any harm */ current->state = TASK_INTERRUPTIBLE; - schedule_timeout(2); + schedule_timeout(MSECS_TO_JIFFIES(20)); - DEBUG( 0, __FUNCTION__ "(), STATE3\n"); - /* Clear DTR, clear RTS */ - arg = TIOCM_OUT2; - - fs = get_fs(); - set_fs( get_ds()); - - if ( tty->driver.ioctl( tty, NULL, TIOCMSET, (unsigned long) &arg)) { - DEBUG( 0, "error setting Tekram speed!\n"); - } - set_fs(fs); + /* Set DTR, Set RTS */ + irtty_set_dtr_rts(tty, TRUE, TRUE); + udelay(50); + /* Finished! */ } @@ -280,13 +236,17 @@ void tekram_reset( struct irda_device *dev, int unused) * Initialize QoS capabilities * */ -static void tekram_init_qos( struct irda_device *idev, struct qos_info *qos) +static void tekram_init_qos(struct irda_device *idev, struct qos_info *qos) { qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200; - qos->min_turn_time.bits &= 0xfe; /* All except 0 ms */ + qos->min_turn_time.bits &= 0x01; /* Needs at least 10 ms */ + irda_qos_bits_to_value(qos); } #ifdef MODULE + +MODULE_AUTHOR("Dag Brattli "); +MODULE_DESCRIPTION("Tekram IrMate IR-210B dongle driver"); /* * Function init_module (void) @@ -296,8 +256,7 @@ static void tekram_init_qos( struct irda_device *idev, struct qos_info *qos) */ int init_module(void) { - tekram_init(); - return(0); + return tekram_init(); } /* @@ -311,4 +270,4 @@ void cleanup_module(void) tekram_cleanup(); } -#endif +#endif /* MODULE */ diff --git a/drivers/net/irda/uircc.c b/drivers/net/irda/uircc.c index 05da78a00..60c8e024a 100644 --- a/drivers/net/irda/uircc.c +++ b/drivers/net/irda/uircc.c @@ -1,13 +1,13 @@ /********************************************************************* * * Filename: uircc.c - * Version: 0.1 + * Version: 0.3 * Description: Driver for the Sharp Universal Infrared - * Communications Controller (UIRCC) + * Communications Controller (UIRCC v 1.3) * Status: Experimental. * Author: Dag Brattli * Created at: Sat Dec 26 10:59:03 1998 - * Modified at: Tue Jan 19 23:54:04 1999 + * Modified at: Tue Apr 20 11:15:52 1999 * Modified by: Dag Brattli * * Copyright (c) 1998 Dag Brattli, All Rights Reserved. @@ -25,10 +25,6 @@ * 740CDT, Portege 300CT, 660CDT, Satellite 220C Series, * Satellite Pro, 440C Series, 470CDT, 460C Series, 480C Series * - * Notice that FIR mode is not working yet, since I don't know - * how to make the UIRCC drive the interrupt line, and not the - * UART (which is used for SIR speeds). Please mail me if you know! - * ********************************************************************/ #include @@ -69,22 +65,24 @@ static unsigned int dma[] = { 5, 0, 0, 0 }; static struct uircc_cb *dev_self[] = { NULL, NULL, NULL, NULL}; /* Some prototypes */ -static int uircc_open( int i, unsigned int iobase, unsigned int board_addr, - unsigned int irq, unsigned int dma); -static int uircc_close( struct irda_device *idev); -static int uircc_probe( int iobase, int board_addr, int irq, int dma); -static int uircc_dma_receive( struct irda_device *idev); +static int uircc_open(int i, unsigned int iobase, unsigned int board_addr, + unsigned int irq, unsigned int dma); +#ifdef MODULE +static int uircc_close(struct irda_device *idev); +#endif /* MODULE */ +static int uircc_probe(int iobase, int board_addr, int irq, int dma); +static int uircc_dma_receive(struct irda_device *idev); static int uircc_dma_receive_complete(struct irda_device *idev, int iobase); -static int uircc_hard_xmit( struct sk_buff *skb, struct device *dev); -static void uircc_dma_write( struct irda_device *idev, int iobase); -static void uircc_change_speed( struct irda_device *idev, int baud); +static int uircc_hard_xmit(struct sk_buff *skb, struct device *dev); +static void uircc_dma_write(struct irda_device *idev, int iobase); +static void uircc_change_speed(struct irda_device *idev, int baud); static void uircc_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static void uircc_wait_until_sent( struct irda_device *idev); -static int uircc_is_receiving( struct irda_device *idev); - -static int uircc_net_init( struct device *dev); -static int uircc_net_open( struct device *dev); -static int uircc_net_close( struct device *dev); +static void uircc_wait_until_sent(struct irda_device *idev); +static int uircc_is_receiving(struct irda_device *idev); +static int uircc_toshiba_cmd(int *retval, int arg0, int arg1, int arg2); +static int uircc_net_init(struct device *dev); +static int uircc_net_open(struct device *dev); +static int uircc_net_close(struct device *dev); /* * Function uircc_init () @@ -98,9 +96,9 @@ __initfunc(int uircc_init(void)) for ( i=0; (io[i] < 2000) && (i < 4); i++) { int ioaddr = io[i]; - if (check_region(ioaddr, CHIP_IO_EXTENT)) + if (check_region(ioaddr, CHIP_IO_EXTENT) < 0) continue; - if (uircc_open( i, io[i], io2[i], irq[i], dma[i]) == 0) + if (uircc_open(i, io[i], io2[i], irq[i], dma[i]) == 0) return 0; } return -ENODEV; @@ -117,11 +115,11 @@ static void uircc_cleanup(void) { int i; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - for ( i=0; i < 4; i++) { - if ( dev_self[i]) - uircc_close( &(dev_self[i]->idev)); + for (i=0; i < 4; i++) { + if (dev_self[i]) + uircc_close(&(dev_self[i]->idev)); } } #endif /* MODULE */ @@ -132,28 +130,28 @@ static void uircc_cleanup(void) * Open driver instance * */ -static int uircc_open( int i, unsigned int iobase, unsigned int iobase2, - unsigned int irq, unsigned int dma) +static int uircc_open(int i, unsigned int iobase, unsigned int iobase2, + unsigned int irq, unsigned int dma) { struct uircc_cb *self; struct irda_device *idev; int ret; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - if (( uircc_probe( iobase, iobase2, irq, dma)) == -1) + if ((uircc_probe(iobase, iobase2, irq, dma)) == -1) return -1; /* * Allocate new instance of the driver */ self = kmalloc( sizeof(struct uircc_cb), GFP_KERNEL); - if ( self == NULL) { - printk( KERN_ERR "IrDA: Can't allocate memory for " - "IrDA control block!\n"); + if (self == NULL) { + printk(KERN_ERR "IrDA: Can't allocate memory for " + "IrDA control block!\n"); return -ENOMEM; } - memset( self, 0, sizeof(struct uircc_cb)); + memset(self, 0, sizeof(struct uircc_cb)); /* Need to store self somewhere */ dev_self[i] = self; @@ -170,32 +168,34 @@ static int uircc_open( int i, unsigned int iobase, unsigned int iobase2, idev->io.fifo_size = 16; /* Lock the port that we need */ - ret = check_region( idev->io.iobase, idev->io.io_ext); - if ( ret < 0) { - DEBUG( 0, __FUNCTION__ "(), can't get iobase of 0x%03x\n", - idev->io.iobase); + ret = check_region(idev->io.iobase, idev->io.io_ext); + if (ret < 0) { + DEBUG(0, __FUNCTION__ "(), can't get iobase of 0x%03x\n", + idev->io.iobase); /* uircc_cleanup( self->idev); */ return -ENODEV; } - ret = check_region( idev->io.iobase2, idev->io.io_ext2); - if ( ret < 0) { - DEBUG( 0, __FUNCTION__ "(), can't get iobase of 0x%03x\n", - idev->io.iobase2); + ret = check_region(idev->io.iobase2, idev->io.io_ext2); + if (ret < 0) { + DEBUG(0, __FUNCTION__ "(), can't get iobase of 0x%03x\n", + idev->io.iobase2); /* uircc_cleanup( self->idev); */ return -ENODEV; } - request_region( idev->io.iobase, idev->io.io_ext, idev->name); - request_region( idev->io.iobase2, idev->io.io_ext2, idev->name); + request_region(idev->io.iobase, idev->io.io_ext, idev->name); + request_region(idev->io.iobase2, idev->io.io_ext2, idev->name); /* Initialize QoS for this device */ - irda_init_max_qos_capabilies( &idev->qos); + irda_init_max_qos_capabilies(&idev->qos); /* The only value we must override it the baudrate */ idev->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| - IR_115200|IR_576000|IR_1152000|(IR_4000000 << 8); + IR_115200/*IR_576000|IR_1152000 |(IR_4000000 << 8)*/; + + idev->qos.min_turn_time.bits = 0x0f; + irda_qos_bits_to_value(&idev->qos); - idev->qos.min_turn_time.bits = 0x07; - irda_qos_bits_to_value( &idev->qos); + idev->flags = IFF_FIR|IFF_SIR|IFF_DMA|IFF_PIO; /* Specify which buffer allocation policy we need */ idev->rx_buff.flags = GFP_KERNEL | GFP_DMA; @@ -206,7 +206,6 @@ static int uircc_open( int i, unsigned int iobase, unsigned int iobase2, idev->tx_buff.truesize = 4000; /* Initialize callbacks */ - idev->hard_xmit = uircc_hard_xmit; idev->change_speed = uircc_change_speed; idev->wait_until_sent = uircc_wait_until_sent; idev->is_receiving = uircc_is_receiving; @@ -217,10 +216,10 @@ static int uircc_open( int i, unsigned int iobase, unsigned int iobase2, idev->netdev.open = uircc_net_open; idev->netdev.stop = uircc_net_close; - irport_open( iobase2); + irport_open(iobase2); /* Open the IrDA device */ - irda_device_open( idev, driver_name, self); + irda_device_open(idev, driver_name, self); return 0; } @@ -231,36 +230,41 @@ static int uircc_open( int i, unsigned int iobase, unsigned int iobase2, * Close driver instance * */ -static int uircc_close( struct irda_device *idev) +#ifdef MODULE +static int uircc_close(struct irda_device *idev) { int iobase; + int status; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return -1;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return -1;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return -1;); iobase = idev->io.iobase; + /* Some magic to disable FIR and enable SIR */ + uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0000); + /* Disable modem */ - outb( 0x00, iobase+UIRCC_CR10); + outb(0x00, iobase+UIRCC_CR10); - irport_close( idev->io.iobase2); + irport_close(idev->io.iobase2); /* Release the PORT that this driver is using */ - DEBUG( 4, __FUNCTION__ "(), Releasing Region %03x\n", idev->io.iobase); - release_region( idev->io.iobase, idev->io.io_ext); + DEBUG(4, __FUNCTION__ "(), Releasing Region %03x\n", idev->io.iobase); + release_region(idev->io.iobase, idev->io.io_ext); - if ( idev->io.iobase2) { - DEBUG( 4, __FUNCTION__ "(), Releasing Region %03x\n", - idev->io.iobase2); - release_region( idev->io.iobase2, idev->io.io_ext2); + if (idev->io.iobase2) { + DEBUG(4, __FUNCTION__ "(), Releasing Region %03x\n", + idev->io.iobase2); + release_region(idev->io.iobase2, idev->io.io_ext2); } - - irda_device_close( idev); + irda_device_close(idev); return 0; } +#endif /* MODULE */ /* * Function uircc_probe (iobase, board_addr, irq, dma) @@ -268,81 +272,38 @@ static int uircc_close( struct irda_device *idev) * Returns non-negative on success. * */ -static int uircc_probe( int iobase, int iobase2, int irq, int dma) +static int uircc_probe(int iobase, int iobase2, int irq, int dma) { int version; - int probe_irq=0; - unsigned long mask; - int i; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); /* read the chip version, should be 0x03 */ - version = inb( iobase+UIRCC_SR8); + version = inb(iobase+UIRCC_SR8); - if ( version != 0x03) { - DEBUG( 0, __FUNCTION__ "(), Wrong chip version"); + if (version != 0x03) { + DEBUG(0, __FUNCTION__ "(), Wrong chip version"); return -1; } - DEBUG( 0, "UIRCC driver loaded. Version: 0x%02x\n", version); + printk(KERN_INFO "Sharp UIRCC IrDA driver loaded. Version: 0x%02x\n", + version); /* Reset chip */ - outb( UIRCC_CR0_SYS_RST, iobase+UIRCC_CR0); + outb(UIRCC_CR0_SYS_RST, iobase+UIRCC_CR0); /* Initialize some registers */ - outb( 0, iobase+UIRCC_CR11); - outb( 0, iobase+UIRCC_CR9); + outb(0x03, iobase+UIRCC_CR15); + outb(0, iobase+UIRCC_CR11); + outb(0, iobase+UIRCC_CR9); - /* Enable DMA single mode */ - outb( UIRCC_CR1_RX_DMA|UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, - iobase+UIRCC_CR1); - - /* Disable interrupts */ - outb( 0xff, iobase+UIRCC_CR2); - -#if 0 - irport_close( iobase2); - - for (i=0;i<1;i++) { - - /* Set appropriate speed mode */ - outb( UIRCC_CR10_FIR, iobase+UIRCC_CR10); + DEBUG(0, __FUNCTION__ "(), sr15=%#x\n", inb(iobase+UIRCC_SR15)); /* Enable DMA single mode */ - outb( UIRCC_CR1_RX_DMA|UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, - iobase+UIRCC_CR1); - - /* Set up timer */ - outb( 0x01, iobase+UIRCC_CR12); - outb( 0x00, iobase+UIRCC_CR13); - - /* Set interrupt mask */ - outb( 0x82, iobase+UIRCC_CR2); + outb(UIRCC_CR1_RX_DMA|UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, + iobase+UIRCC_CR1); - DEBUG( 0, __FUNCTION__ "(*), sr3=%#x, sr2=%#x, sr10=%#x, sr12=%#x\n", - inb( iobase+UIRCC_SR3), inb( iobase+UIRCC_SR2), - inb( iobase+UIRCC_SR10), inb( iobase+UIRCC_SR12)); - - mask = probe_irq_on(); - - /* Enable timer */ - outb( 0x08, iobase+UIRCC_CR11); - - udelay( 10000); /* Wait for interrupt! */ - - probe_irq = probe_irq_off( mask); - - DEBUG( 0, "Found irq=%d\n", probe_irq); - - DEBUG( 0, __FUNCTION__ "(), sr3=%#x, sr2=%#x, sr10=%#x, sr12=%#x\n", - inb( iobase+UIRCC_SR3), inb( iobase+UIRCC_SR2), - inb( iobase+UIRCC_SR10), inb( iobase+UIRCC_SR12)); - - - /* Diable timer */ - outb( 0x00, iobase+UIRCC_CR11); - } -#endif + /* Disable interrupts */ + outb(0xff, iobase+UIRCC_CR2); /* Set self poll address */ @@ -355,16 +316,20 @@ static int uircc_probe( int iobase, int iobase2, int irq, int dma) * Change the speed of the device * */ -static void uircc_change_speed( struct irda_device *idev, int speed) +static void uircc_change_speed(struct irda_device *idev, int speed) { struct uircc_cb *self; int iobase; int modem = UIRCC_CR10_SIR; + int status; + + DEBUG(0, __FUNCTION__ "()\n"); - DEBUG( 0, __FUNCTION__ "()\n"); + /* Just test the high speed stuff */ + /*speed = 4000000;*/ - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); self = idev->priv; iobase = idev->io.iobase; @@ -373,16 +338,20 @@ static void uircc_change_speed( struct irda_device *idev, int speed) idev->io.baudrate = speed; /* Disable interrupts */ - outb( 0xff, iobase+UIRCC_CR2); + outb(0xff, iobase+UIRCC_CR2); - switch ( speed) { + switch (speed) { case 9600: case 19200: case 37600: case 57600: case 115200: -/* irport_open( idev->io.iobase2); */ + irport_open(idev->io.iobase2); irport_change_speed( idev->io.iobase2, speed); + + /* Some magic to disable FIR and enable SIR */ + uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0000); + modem = UIRCC_CR10_SIR; break; case 576000: @@ -394,9 +363,18 @@ static void uircc_change_speed( struct irda_device *idev, int speed) DEBUG(0, __FUNCTION__ "(), handling baud of 1152000\n"); break; case 4000000: - irport_close( idev->io.iobase2); + irport_close(idev->io.iobase2); + + /* Some magic to disable SIR and enable FIR */ + uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0001); + modem = UIRCC_CR10_FIR; DEBUG(0, __FUNCTION__ "(), handling baud of 4000000\n"); + + /* Set self pole address */ + //outb(0xfe, iobase+UIRCC_CR8); + + /* outb(0x10, iobase+UIRCC_CR11); */ break; default: DEBUG( 0, __FUNCTION__ "(), unknown baud rate of %d\n", speed); @@ -404,19 +382,19 @@ static void uircc_change_speed( struct irda_device *idev, int speed) } /* Set appropriate speed mode */ - outb( modem, iobase+UIRCC_CR10); + outb(modem, iobase+UIRCC_CR10); idev->netdev.tbusy = 0; /* Enable some interrupts so we can receive frames */ - if ( speed > 115200) { + if (speed > 115200) { /* Enable DMA single mode */ - outb( UIRCC_CR1_RX_DMA|UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, - iobase+UIRCC_CR1); + outb(UIRCC_CR1_RX_DMA|UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, + iobase+UIRCC_CR1); - /* outb( UIRCC_CR2_RECV_MASK, iobase+UIRCC_CR2); */ - outb( 0, iobase+UIRCC_CR2); - uircc_dma_receive( idev); + /* Enable all interrupts */ + outb(0, iobase+UIRCC_CR2); + uircc_dma_receive(idev); } } @@ -426,7 +404,7 @@ static void uircc_change_speed( struct irda_device *idev, int speed) * Transmit the frame! * */ -static int uircc_hard_xmit( struct sk_buff *skb, struct device *dev) +static int uircc_hard_xmit(struct sk_buff *skb, struct device *dev) { struct irda_device *idev; int iobase; @@ -434,94 +412,96 @@ static int uircc_hard_xmit( struct sk_buff *skb, struct device *dev) idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return 0;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); iobase = idev->io.iobase; - DEBUG(0, __FUNCTION__ "(%ld), skb->len=%d\n", jiffies, (int) skb->len); + DEBUG(4, __FUNCTION__ "(%ld), skb->len=%d\n", jiffies, (int) skb->len); + + /* Reset carrier latch */ + /*outb(0x02, iobase+UIRCC_CR0);*/ /* Use irport for SIR speeds */ - if ( idev->io.baudrate <= 115200) { - return irport_hard_xmit( skb, dev); - } - - if ( dev->tbusy) { - __u8 sr3; - - DEBUG( 4, __FUNCTION__ "(), tbusy==TRUE\n"); - - return -EBUSY; + if (idev->io.baudrate <= 115200) { + return irport_hard_xmit(skb, dev); } + DEBUG(0, __FUNCTION__ "(), sr0=%#x, sr1=%#x, sr2=%#x, sr3=%#x, sr10=%#x, sr11=%#x\n", + inb(iobase+UIRCC_SR0), inb(iobase+UIRCC_SR3), + inb(iobase+UIRCC_SR2), inb(iobase+UIRCC_SR3), + inb(iobase+UIRCC_SR10), inb(iobase+UIRCC_SR11)); + /* Lock transmit buffer */ - if ( irda_lock( (void *) &dev->tbusy) == FALSE) + if (irda_lock((void *) &dev->tbusy) == FALSE) return -EBUSY; - memcpy( idev->tx_buff.data, skb->data, skb->len); + memcpy(idev->tx_buff.data, skb->data, skb->len); /* Make sure that the length is a multiple of 16 bits */ - if ( skb->len & 0x01) + if (skb->len & 0x01) skb->len++; idev->tx_buff.len = skb->len; - idev->tx_buff.head = idev->tx_buff.data; - idev->tx_buff.offset = 0; + idev->tx_buff.data = idev->tx_buff.head; - mtt = irda_get_mtt( skb); + mtt = irda_get_mtt(skb); /* Use udelay for delays less than 50 us. */ if (mtt) - udelay( mtt); + udelay(mtt); /* Enable transmit interrupts */ - /* outb( UIRCC_CR2_XMIT_MASK, iobase+UIRCC_CR2); */ - outb( 0, iobase+UIRCC_CR2); + outb(0, iobase+UIRCC_CR2); - uircc_dma_write( idev, iobase); + uircc_dma_write(idev, iobase); - dev_kfree_skb( skb); + dev_kfree_skb(skb); return 0; } /* - * Function uircc_dma_xmit (idev, iobase) + * Function uircc_dma_write (idev, iobase) * * Transmit data using DMA * */ -static void uircc_dma_write( struct irda_device *idev, int iobase) +static void uircc_dma_write(struct irda_device *idev, int iobase) { struct uircc_cb *self; - int i; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); self = idev->priv; /* Receiving disable */ self->cr3 &= ~UIRCC_CR3_RECV_EN; - outb( self->cr3, iobase+UIRCC_CR3); + outb(self->cr3, iobase+UIRCC_CR3); - setup_dma( idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, - DMA_MODE_WRITE); - - DEBUG( 0, __FUNCTION__ "residue=%d\n", - get_dma_residue( idev->io.dma)); + /* Set modem */ + outb(0x80, iobase+UIRCC_CR10); + + /* Enable transmit DMA */ + outb(UIRCC_CR1_TX_DMA|UIRCC_CR1_MUST_SET, iobase+UIRCC_CR1); + + ASSERT((((__u32)(idev->tx_buff.data)) & 0x01) != 0x01, return;); + setup_dma(idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, + DMA_MODE_WRITE); + idev->io.direction = IO_XMIT; - /* Set frame length */ - outb( idev->tx_buff.len & 0xff, iobase+UIRCC_CR4); /* Low byte */ - outb( idev->tx_buff.len >> 8, iobase+UIRCC_CR5); /* High byte */ + /* Set frame length (should be the real length without padding */ + outb(idev->tx_buff.len & 0xff, iobase+UIRCC_CR4); /* Low byte */ + outb(idev->tx_buff.len >> 8, iobase+UIRCC_CR5); /* High byte */ /* Enable transmit and transmit CRC */ self->cr3 |= (UIRCC_CR3_XMIT_EN|UIRCC_CR3_TX_CRC_EN); - outb( self->cr3, iobase+UIRCC_CR3); + outb(self->cr3, iobase+UIRCC_CR3); } /* @@ -537,33 +517,38 @@ static void uircc_dma_xmit_complete( struct irda_device *idev, int underrun) int iobase; int len; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); self = idev->priv; iobase = idev->io.iobase; /* Select TX counter */ - outb( UIRCC_CR0_CNT_SWT, iobase+UIRCC_CR0); + outb(UIRCC_CR0_CNT_SWT, iobase+UIRCC_CR0); /* Read TX length counter */ - len = inb( iobase+UIRCC_SR4); /* Low byte */ - len |= inb( iobase+UIRCC_SR5) << 8; /* High byte */ + len = inb(iobase+UIRCC_SR4); /* Low byte */ + len |= inb(iobase+UIRCC_SR5) << 8; /* High byte */ + + DEBUG(4, __FUNCTION__ "(), sent %d bytes\n", len); /* Disable transmit */ self->cr3 &= ~UIRCC_CR3_XMIT_EN; - outb( self->cr3, iobase+UIRCC_CR3); + outb(self->cr3, iobase+UIRCC_CR3); + + /* Transmit reset (just to be sure) */ + outb(UIRCC_CR0_XMIT_RST, iobase+UIRCC_CR0); /* Check for underrrun! */ - if ( underrun) { + if (underrun) { idev->stats.tx_errors++; idev->stats.tx_fifo_errors++; } else { idev->stats.tx_packets++; - idev->stats.tx_bytes += idev->tx_buff.len; + idev->stats.tx_bytes += idev->tx_buff.len; } /* Unlock tx_buff and request another frame */ @@ -571,7 +556,7 @@ static void uircc_dma_xmit_complete( struct irda_device *idev, int underrun) idev->media_busy = FALSE; /* Tell the network layer, that we can accept more frames */ - mark_bh( NET_BH); + mark_bh(NET_BH); } /* @@ -581,37 +566,56 @@ static void uircc_dma_xmit_complete( struct irda_device *idev, int underrun) * if it starts to receive a frame. * */ -static int uircc_dma_receive( struct irda_device *idev) +static int uircc_dma_receive(struct irda_device *idev) { struct uircc_cb *self; int iobase; - ASSERT( idev != NULL, return -1;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return -1;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return -1;); - DEBUG( 0, __FUNCTION__ "\n"); + DEBUG(4, __FUNCTION__ "\n"); self = idev->priv; iobase= idev->io.iobase; - /* Disable DMA */ - - setup_dma( idev->io.dma, idev->rx_buff.data, idev->rx_buff.truesize, - DMA_MODE_READ); + /* Transmit disable */ + /* self->cr3 &= ~UIRCC_CR3_XMIT_EN; */ + self->cr3 = 0; + outb(self->cr3, iobase+UIRCC_CR3); + + /* Transmit reset (just in case) */ + outb(UIRCC_CR0_XMIT_RST|0x17, iobase+UIRCC_CR0); + + /* Set modem */ + outb(0x08, iobase+UIRCC_CR10); + + /* Enable receiving with CRC */ + self->cr3 = (UIRCC_CR3_RECV_EN|UIRCC_CR3_RX_CRC_EN); + outb(self->cr3, iobase+UIRCC_CR3); + + /* Make sure Rx DMA is set */ + outb(UIRCC_CR1_RX_DMA|UIRCC_CR1_MUST_SET, iobase+UIRCC_CR1); + + /* Rx reset */ + /* outb(UIRCC_CR0_RECV_RST, iobase+UIRCC_CR0); */ + + setup_dma(idev->io.dma, idev->rx_buff.data, + idev->rx_buff.truesize, DMA_MODE_READ); /* driver->media_busy = FALSE; */ idev->io.direction = IO_RECV; - idev->rx_buff.head = idev->rx_buff.data; - idev->rx_buff.offset = 0; + idev->rx_buff.data = idev->rx_buff.head; +#if 0 /* Enable receiving with CRC */ - self->cr3 |= (UIRCC_CR3_RECV_EN|UIRCC_CR3_RX_CRC_EN); - outb( self->cr3, iobase+UIRCC_CR3); + self->cr3 = (UIRCC_CR3_RECV_EN|UIRCC_CR3_RX_CRC_EN); + outb(self->cr3, iobase+UIRCC_CR3); +#endif + DEBUG(4, __FUNCTION__ "(), cr3=%#x\n", self->cr3); /* Address check? */ - DEBUG( 4, __FUNCTION__ "(), done!\n"); - return 0; } @@ -622,7 +626,7 @@ static int uircc_dma_receive( struct irda_device *idev) * * */ -static int uircc_dma_receive_complete( struct irda_device *idev, int iobase) +static int uircc_dma_receive_complete(struct irda_device *idev, int iobase) { struct sk_buff *skb; struct uircc_cb *self; @@ -630,37 +634,37 @@ static int uircc_dma_receive_complete( struct irda_device *idev, int iobase) self = idev->priv; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(0, __FUNCTION__ "()\n"); /* Check for CRC or framing error */ - if ( inb( iobase+UIRCC_SR0) & UIRCC_SR0_RX_CRCFRM) { - DEBUG( 0, __FUNCTION__ "(), crc or frm error\n"); + if (inb(iobase+UIRCC_SR0) & UIRCC_SR0_RX_CRCFRM) { + DEBUG(0, __FUNCTION__ "(), CRC or FRAME error\n"); return -1; } /* Select receive length counter */ - outb( 0x00, iobase+UIRCC_CR0); + outb(0x00, iobase+UIRCC_CR0); /* Read frame length */ - len = inb( iobase+UIRCC_SR4); /* Low byte */ - len |= inb( iobase+UIRCC_SR5) << 8; /* High byte */ + len = inb(iobase+UIRCC_SR4); /* Low byte */ + len |= inb(iobase+UIRCC_SR5) << 8; /* High byte */ - DEBUG( 0, __FUNCTION__ "(), len=%d\n", len); + DEBUG(0, __FUNCTION__ "(), len=%d\n", len); /* Receiving disable */ self->cr3 &= ~UIRCC_CR3_RECV_EN; - outb( self->cr3, iobase+UIRCC_CR3); + outb(self->cr3, iobase+UIRCC_CR3); - skb = dev_alloc_skb( len+1); + skb = dev_alloc_skb(len+1); if (skb == NULL) { - printk( KERN_INFO __FUNCTION__ - "(), memory squeeze, dropping frame.\n"); + printk(KERN_INFO __FUNCTION__ + "(), memory squeeze, dropping frame.\n"); /* Restore bank register */ return FALSE; } /* Make sure IP header gets aligned */ - skb_reserve( skb, 1); + skb_reserve(skb, 1); /* Copy frame without CRC */ /* if ( idev->io.baudrate < 4000000) { */ @@ -671,14 +675,14 @@ static int uircc_dma_receive_complete( struct irda_device *idev, int iobase) /* memcpy( skb->data, idev->rx_buff.head, len-4); */ /* } */ - skb_put( skb, len); - memcpy( skb->data, idev->rx_buff.head, len); + skb_put(skb, len); + memcpy(skb->data, idev->rx_buff.data, len); idev->stats.rx_packets++; skb->dev = &idev->netdev; skb->mac.raw = skb->data; skb->protocol = htons(ETH_P_IRDA); - netif_rx( skb); + netif_rx(skb); return TRUE; } @@ -710,40 +714,44 @@ static void uircc_interrupt(int irq, void *dev_id, struct pt_regs *regs) /* Read interrupt status */ sr3 = inb( iobase+UIRCC_SR3); if (!sr3) { + DEBUG(4,"**\n"); return; } - idev->netdev.interrupt = 1; - DEBUG( 4, __FUNCTION__ "(), sr3=%#x, sr2=%#x, sr10=%#x\n", - inb( iobase+UIRCC_SR3), inb( iobase+UIRCC_SR2), - inb( iobase+UIRCC_SR10)); + DEBUG(4, __FUNCTION__ "(), sr3=%#x, sr2=%#x, sr10=%#x\n", + inb( iobase+UIRCC_SR3), inb( iobase+UIRCC_SR2), + inb( iobase+UIRCC_SR10)); /* * Check what interrupt this is. The UIRCC will not report two * different interrupts at the same time! */ - switch( sr3) { - case UIRCC_SR3_RX_EOF: /* Check of end of frame */ - uircc_dma_receive_complete( idev, iobase); + switch(sr3) { + case UIRCC_SR3_RX_EOF: /* Check for end of frame */ + uircc_dma_receive_complete(idev, iobase); break; case UIRCC_SR3_TXUR: /* Check for transmit underrun */ - uircc_dma_xmit_complete( idev, TRUE); + uircc_dma_xmit_complete(idev, TRUE); + uircc_dma_receive(idev); + outb(0, iobase+UIRCC_CR2); break; case UIRCC_SR3_TX_DONE: - uircc_dma_xmit_complete( idev, FALSE); + uircc_dma_xmit_complete(idev, FALSE); + uircc_dma_receive(idev); + + outb(0x0d, iobase+UIRCC_CR2); break; case UIRCC_SR3_TMR_OUT: /* Disable timer */ - outb( inb( iobase+UIRCC_CR11) & ~UIRCC_CR11_TMR_EN, - iobase+UIRCC_CR11); + outb(inb(iobase+UIRCC_CR11) & ~UIRCC_CR11_TMR_EN, + iobase+UIRCC_CR11); break; default: - DEBUG( 0, __FUNCTION__ "(), unknown interrupt status=%#x\n", - sr3); + DEBUG(0, __FUNCTION__ "(), unknown interrupt status=%#x\n", + sr3); break; - } - + } idev->netdev.interrupt = 0; } @@ -771,13 +779,13 @@ static int uircc_is_receiving( struct irda_device *idev) int status = FALSE; /* int iobase; */ - ASSERT( idev != NULL, return FALSE;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return FALSE;); + ASSERT(idev != NULL, return FALSE;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return FALSE;); - if ( idev->io.baudrate > 115200) { + if (idev->io.baudrate > 115200) { } else - status = ( idev->rx_buff.state != OUTSIDE_FRAME); + status = (idev->rx_buff.state != OUTSIDE_FRAME); return status; } @@ -793,7 +801,7 @@ static int uircc_net_init( struct device *dev) DEBUG( 4, __FUNCTION__ "()\n"); /* Setup to be a normal IrDA network device driver */ - irda_device_setup( dev); + irda_device_setup(dev); /* Insert overrides below this line! */ @@ -807,23 +815,23 @@ static int uircc_net_init( struct device *dev) * Start the device * */ -static int uircc_net_open( struct device *dev) +static int uircc_net_open(struct device *dev) { struct irda_device *idev; int iobase; DEBUG( 4, __FUNCTION__ "()\n"); - ASSERT( dev != NULL, return -1;); + ASSERT(dev != NULL, return -1;); idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return 0;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); iobase = idev->io.iobase; - if (request_irq( idev->io.irq, uircc_interrupt, 0, idev->name, - (void *) idev)) { + if (request_irq(idev->io.irq, uircc_interrupt, 0, idev->name, + (void *) idev)) { return -EAGAIN; } /* @@ -831,7 +839,7 @@ static int uircc_net_open( struct device *dev) * and clean up on failure. */ if (request_dma(idev->io.dma, idev->name)) { - free_irq( idev->io.irq, idev); + free_irq(idev->io.irq, idev); return -EAGAIN; } @@ -858,32 +866,62 @@ static int uircc_net_close(struct device *dev) struct irda_device *idev; int iobase; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); /* Stop device */ dev->tbusy = 1; dev->start = 0; - ASSERT( dev != NULL, return -1;); + ASSERT(dev != NULL, return -1;); idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return 0;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); iobase = idev->io.iobase; - disable_dma( idev->io.dma); + disable_dma(idev->io.dma); /* Disable interrupts */ - free_irq( idev->io.irq, idev); - free_dma( idev->io.dma); + free_irq(idev->io.irq, idev); + free_dma(idev->io.dma); MOD_DEC_USE_COUNT; return 0; } +/* + * Function uircc_toshiba_cmd (arg0, arg1, arg2) + * + * disable FIR: uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0000); + * enable FIR: uircc_toshiba_cmd(&status, 0xffff, 0x001b, 0x0001); + * IRDA status: uircc_toshiba_cmd(&status, 0xfefe, 0x001b, 0x0000); + */ +static int uircc_toshiba_cmd(int *retval, int arg0, int arg1, int arg2) +{ + char return_code = 0; + + __asm__ volatile ("inb $0xb2,%%al; " + "movb %%ah,%%al; " + : /* Output */ + "=al" (return_code), + "=ecx" (*retval) + : /* Input */ + "ax" (arg0), + "bx" (arg1), + "cx" (arg2) + ); + /* + * Return + * 0x00 = OK + * 0x80 = Function not supported by system + * 0x83 = Input data error + */ + return (int) return_code; +} + #ifdef MODULE /* @@ -894,9 +932,7 @@ static int uircc_net_close(struct device *dev) */ int init_module(void) { - uircc_init(); - - return(0); + return uircc_init(); } /* @@ -909,6 +945,5 @@ void cleanup_module(void) { uircc_cleanup(); } - -#endif +#endif /* MODULE */ diff --git a/drivers/net/irda/w83977af_ir.c b/drivers/net/irda/w83977af_ir.c index 5a7995ef7..9234c4a82 100644 --- a/drivers/net/irda/w83977af_ir.c +++ b/drivers/net/irda/w83977af_ir.c @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Paul VanderSpek * Created at: Wed Nov 4 11:46:16 1998 - * Modified at: Mon Dec 14 21:51:53 1998 + * Modified at: Tue Apr 20 11:15:00 1999 * Modified by: Dag Brattli * * Copyright (c) 1998 Corel Computer Corp. @@ -22,7 +22,7 @@ * provided "AS-IS" and at no charge. * * If you find bugs in this file, its very likely that the same bug - * will also be in w83977af_ir.c since the implementations is quite + * will also be in pc87108.c since the implementations is quite * similar. * * Notice that all functions that needs to access the chip in _any_ @@ -67,8 +67,8 @@ static char *driver_name = "w83977af_ir"; #define CHIP_IO_EXTENT 8 -static unsigned int io[] = { 0x400, ~0, ~0, ~0 }; -static unsigned int irq[] = { 22, 0, 0, 0 }; +static unsigned int io[] = { 0x180, ~0, ~0, ~0 }; +static unsigned int irq[] = { 6, 0, 0, 0 }; static unsigned int dma[] = { 0, 0, 0, 0 }; static struct irda_device *dev_self[] = { NULL, NULL, NULL, NULL}; @@ -116,7 +116,7 @@ __initfunc(int w83977af_init(void)) for ( i=0; (io[i] < 2000) && (i < 4); i++) { int ioaddr = io[i]; - if (check_region(ioaddr, CHIP_IO_EXTENT)) + if (check_region(ioaddr, CHIP_IO_EXTENT) < 0) continue; if (w83977af_open( i, io[i], irq[i], dma[i]) == 0) return 0; @@ -204,6 +204,8 @@ int w83977af_open( int i, unsigned int iobase, unsigned int irq, /* The HP HDLS-1100 needs 1 ms according to the specs */ idev->qos.min_turn_time.bits = 0x03; /* 1ms and more */ irda_qos_bits_to_value( &idev->qos); + + idev->flags = IFF_FIR|IFF_MIR|IFF_SIR|IFF_DMA|IFF_PIO; /* Specify which buffer allocation policy we need */ idev->rx_buff.flags = GFP_KERNEL | GFP_DMA; @@ -214,7 +216,6 @@ int w83977af_open( int i, unsigned int iobase, unsigned int irq, idev->tx_buff.truesize = 4000; /* Initialize callbacks */ - idev->hard_xmit = w83977af_hard_xmit; idev->change_speed = w83977af_change_speed; idev->wait_until_sent = w83977af_wait_until_sent; idev->is_receiving = w83977af_is_receiving; @@ -288,9 +289,10 @@ int w83977af_probe( int iobase, int irq, int dma) /* Configure PnP port, IRQ, and DMA channel */ w977_write_reg(0x60, (iobase >> 8) & 0xff); w977_write_reg(0x61, (iobase) & 0xff); - w977_write_reg(0x70, 0x06); + /* w977_write_reg(0x70, 0x06); */ + w977_write_reg(0x70, irq); #ifdef NETWINDER - w977_write_reg(0x74, dma+1); /* Netwinder uses 1 higher than Linux */ + w977_write_reg(0x74, dma+1); /* Netwinder uses one higher than Linux */ #else w977_write_reg(0x74, dma); #endif @@ -431,7 +433,7 @@ void w83977af_change_speed( struct irda_device *idev, int speed) /* set FIFO threshold to TX17, RX16 */ switch_bank(iobase, SET0); - outb( UFR_RXTL|UFR_TXTL|UFR_TXF_RST|UFR_RXF_RST|UFR_EN_FIFO, iobase+UFR); + outb(UFR_RXTL|UFR_TXTL|UFR_TXF_RST|UFR_RXF_RST|UFR_EN_FIFO, iobase+UFR); idev->netdev.tbusy = 0; @@ -462,74 +464,65 @@ int w83977af_hard_xmit( struct sk_buff *skb, struct device *dev) idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return 0;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); iobase = idev->io.iobase; DEBUG(4, __FUNCTION__ "(%ld), skb->len=%d\n", jiffies, (int) skb->len); - - if ( dev->tbusy) { - DEBUG( 4, __FUNCTION__ "(), tbusy==TRUE\n"); - - return -EBUSY; - } /* Lock transmit buffer */ - if ( irda_lock( (void *) &dev->tbusy) == FALSE) + if (irda_lock((void *) &dev->tbusy) == FALSE) return -EBUSY; - + /* Save current set */ - set = inb( iobase+SSR); + set = inb(iobase+SSR); /* Decide if we should use PIO or DMA transfer */ - if ( idev->io.baudrate > 115200) { - memcpy( idev->tx_buff.data, skb->data, skb->len); + if (idev->io.baudrate > 115200) { + memcpy(idev->tx_buff.data, skb->data, skb->len); idev->tx_buff.len = skb->len; - idev->tx_buff.head = idev->tx_buff.data; - idev->tx_buff.offset = 0; + idev->tx_buff.data = idev->tx_buff.head; - mtt = irda_get_mtt( skb); - if ( mtt > 50) { + mtt = irda_get_mtt(skb); + if (mtt > 50) { /* Adjust for timer resolution */ - mtt /= 1000+1; + mtt = mtt / 1000 + 1; /* Setup timer */ - switch_bank( iobase, SET4); - outb( mtt & 0xff, iobase+TMRL); - outb(( mtt >> 8) & 0x0f, iobase+TMRH); + switch_bank(iobase, SET4); + outb(mtt & 0xff, iobase+TMRL); + outb((mtt >> 8) & 0x0f, iobase+TMRH); /* Start timer */ - outb( IR_MSL_EN_TMR, iobase+IR_MSL); + outb(IR_MSL_EN_TMR, iobase+IR_MSL); idev->io.direction = IO_XMIT; /* Enable timer interrupt */ - switch_bank( iobase, SET0); - outb( ICR_ETMRI, iobase+ICR); + switch_bank(iobase, SET0); + outb(ICR_ETMRI, iobase+ICR); } else { - if ( mtt) - udelay( mtt); + if (mtt) + udelay(mtt); /* Enable DMA interrupt */ - switch_bank( iobase, SET0); - outb( ICR_EDMAI, iobase+ICR); - w83977af_dma_write( idev, iobase); + switch_bank(iobase, SET0); + outb(ICR_EDMAI, iobase+ICR); + w83977af_dma_write(idev, iobase); } } else { - idev->tx_buff.len = async_wrap_skb( skb, idev->tx_buff.data, - idev->tx_buff.truesize); - - idev->tx_buff.offset = 0; - idev->tx_buff.head = idev->tx_buff.data; + idev->tx_buff.data = idev->tx_buff.head; + idev->tx_buff.len = async_wrap_skb(skb, idev->tx_buff.data, + idev->tx_buff.truesize); /* Add interrupt on tx low level (will fire immediately) */ - switch_bank( iobase, SET0); - outb( ICR_ETXTHI, iobase+ICR); + switch_bank(iobase, SET0); + outb(ICR_ETXTHI, iobase+ICR); } - dev_kfree_skb( skb); + dev_kfree_skb(skb); /* Restore set register */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); return 0; } @@ -554,23 +547,23 @@ static void w83977af_dma_write( struct irda_device *idev, int iobase) switch_bank(iobase, SET0); outb( inb( iobase+HCR) & ~HCR_EN_DMA, iobase+HCR); - setup_dma( idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, - DMA_MODE_WRITE); + setup_dma(idev->io.dma, idev->tx_buff.data, idev->tx_buff.len, + DMA_MODE_WRITE); /* idev->media_busy = TRUE; */ idev->io.direction = IO_XMIT; /* Choose transmit DMA channel */ switch_bank(iobase, SET2); - outb( inb( iobase+ADCR1) | ADCR1_D_CHSW|ADCR1_DMA_F|ADCR1_ADV_SL, - iobase+ADCR1); + outb(inb(iobase+ADCR1) | ADCR1_D_CHSW|ADCR1_DMA_F|ADCR1_ADV_SL, + iobase+ADCR1); /* Enable DMA */ - switch_bank( iobase, SET0); - outb( inb( iobase+HCR) | HCR_EN_DMA, iobase+HCR); + switch_bank(iobase, SET0); + outb(inb(iobase+HCR) | HCR_EN_DMA, iobase+HCR); /* Restore set register */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); } /* @@ -579,7 +572,7 @@ static void w83977af_dma_write( struct irda_device *idev, int iobase) * * */ -static int w83977af_pio_write( int iobase, __u8 *buf, int len, int fifo_size) +static int w83977af_pio_write(int iobase, __u8 *buf, int len, int fifo_size) { int actual = 0; __u8 set; @@ -590,7 +583,7 @@ static int w83977af_pio_write( int iobase, __u8 *buf, int len, int fifo_size) set = inb( iobase+SSR); switch_bank( iobase, SET0); - if (!( inb_p( iobase+USR) & USR_TSRE)) { + if (!(inb_p(iobase+USR) & USR_TSRE)) { DEBUG( 4, __FUNCTION__ "(), warning, FIFO not empty yet!\n"); fifo_size -= 17; @@ -598,16 +591,16 @@ static int w83977af_pio_write( int iobase, __u8 *buf, int len, int fifo_size) } /* Fill FIFO with current frame */ - while (( fifo_size-- > 0) && (actual < len)) { + while ((fifo_size-- > 0) && (actual < len)) { /* Transmit next byte */ - outb( buf[actual++], iobase+TBR); + outb(buf[actual++], iobase+TBR); } - DEBUG( 4, __FUNCTION__ "(), fifo_size %d ; %d sent of %d\n", - fifo_size, actual, len); + DEBUG(4, __FUNCTION__ "(), fifo_size %d ; %d sent of %d\n", + fifo_size, actual, len); /* Restore bank */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); return actual; } @@ -619,34 +612,34 @@ static int w83977af_pio_write( int iobase, __u8 *buf, int len, int fifo_size) * * */ -void w83977af_dma_xmit_complete( struct irda_device *idev) +void w83977af_dma_xmit_complete(struct irda_device *idev) { int iobase; __u8 set; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); iobase = idev->io.iobase; /* Save current set */ - set = inb( iobase+SSR); + set = inb(iobase+SSR); /* Disable DMA */ switch_bank(iobase, SET0); - outb( inb(iobase+HCR) & ~HCR_EN_DMA, iobase+HCR); + outb(inb(iobase+HCR) & ~HCR_EN_DMA, iobase+HCR); /* Check for underrrun! */ - if ( inb( iobase+AUDR) & AUDR_UNDR) { - DEBUG( 0, __FUNCTION__ "(), Transmit underrun!\n"); + if (inb(iobase+AUDR) & AUDR_UNDR) { + DEBUG(0, __FUNCTION__ "(), Transmit underrun!\n"); idev->stats.tx_errors++; idev->stats.tx_fifo_errors++; /* Clear bit, by writing 1 to it */ - outb( AUDR_UNDR, iobase+AUDR); + outb(AUDR_UNDR, iobase+AUDR); } else idev->stats.tx_packets++; @@ -655,10 +648,10 @@ void w83977af_dma_xmit_complete( struct irda_device *idev) idev->media_busy = FALSE; /* Tell the network layer, that we want more frames */ - mark_bh( NET_BH); + mark_bh(NET_BH); /* Restore set */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); } /* @@ -668,7 +661,7 @@ void w83977af_dma_xmit_complete( struct irda_device *idev) * if it starts to receive a frame. * */ -int w83977af_dma_receive( struct irda_device *idev) +int w83977af_dma_receive(struct irda_device *idev) { int iobase; __u8 set; @@ -677,10 +670,10 @@ int w83977af_dma_receive( struct irda_device *idev) __u8 hcr; #endif - ASSERT( idev != NULL, return -1;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return -1;); + ASSERT(idev != NULL, return -1;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return -1;); - DEBUG( 0, __FUNCTION__ "\n"); + DEBUG(0, __FUNCTION__ "\n"); iobase= idev->io.iobase; @@ -701,13 +694,12 @@ int w83977af_dma_receive( struct irda_device *idev) set_dma_addr( idev->io.dma, virt_to_bus(idev->rx_buff.data)); set_dma_count( idev->io.dma, idev->rx_buff.truesize); #else - setup_dma( idev->io.dma, idev->rx_buff.data, idev->rx_buff.truesize, - DMA_MODE_READ); + setup_dma(idev->io.dma, idev->rx_buff.data, + idev->rx_buff.truesize, DMA_MODE_READ); #endif /* driver->media_busy = FALSE; */ idev->io.direction = IO_RECV; - idev->rx_buff.head = idev->rx_buff.data; - idev->rx_buff.offset = 0; + idev->rx_buff.data = idev->rx_buff.head; /* * Reset Rx FIFO. This will also flush the ST_FIFO, it's very @@ -755,30 +747,30 @@ int w83977af_dma_receive_complete(struct irda_device *idev) __u8 set; __u8 status; - DEBUG( 0, __FUNCTION__ "\n"); + DEBUG(0, __FUNCTION__ "\n"); iobase = idev->io.iobase; /* Save current set */ - set = inb( iobase+SSR); + set = inb(iobase+SSR); iobase = idev->io.iobase; switch_bank(iobase, SET5); - if ( prev.status & FS_FO_FSFDR) { + if (prev.status & FS_FO_FSFDR) { status = prev.status; len = prev.len; - + prev.status = 0; } else { - status = inb( iobase+FS_FO); - len = inb( iobase+RFLFL); - len |= inb( iobase+RFLFH) << 8; + status = inb(iobase+FS_FO); + len = inb(iobase+RFLFL); + len |= inb(iobase+RFLFH) << 8; } - while ( status & FS_FO_FSFDR) { + while (status & FS_FO_FSFDR) { /* Check for errors */ - if ( status & FS_FO_ERR_MSK) { + if (status & FS_FO_ERR_MSK) { if ( status & FS_FO_LST_FR) { /* Add number of lost frames to stats */ idev->stats.rx_errors += len; @@ -786,29 +778,28 @@ int w83977af_dma_receive_complete(struct irda_device *idev) /* Skip frame */ idev->stats.rx_errors++; - idev->rx_buff.offset += len; - idev->rx_buff.head += len; + idev->rx_buff.data += len; - if ( status & FS_FO_MX_LEX) + if (status & FS_FO_MX_LEX) idev->stats.rx_length_errors++; - if ( status & FS_FO_PHY_ERR) + if (status & FS_FO_PHY_ERR) idev->stats.rx_frame_errors++; - if ( status & FS_FO_CRC_ERR) + if (status & FS_FO_CRC_ERR) idev->stats.rx_crc_errors++; } /* The errors below can be reported in both cases */ - if ( status & FS_FO_RX_OV) + if (status & FS_FO_RX_OV) idev->stats.rx_fifo_errors++; - if ( status & FS_FO_FSF_OV) + if (status & FS_FO_FSF_OV) idev->stats.rx_fifo_errors++; } else { /* Check if we have transfered all data to memory */ switch_bank(iobase, SET0); - if ( inb( iobase+USR) & USR_RDR) { + if (inb(iobase+USR) & USR_RDR) { /* Put this entry back in fifo */ prev.status = status; prev.len = len; @@ -819,31 +810,30 @@ int w83977af_dma_receive_complete(struct irda_device *idev) return FALSE; /* I'll be back! */ } - skb = dev_alloc_skb( len+1); + skb = dev_alloc_skb(len+1); if (skb == NULL) { - printk( KERN_INFO __FUNCTION__ - "(), memory squeeze, dropping frame.\n"); + printk(KERN_INFO __FUNCTION__ + "(), memory squeeze, dropping frame.\n"); /* Restore set register */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); return FALSE; } /* Align to 20 bytes */ - skb_reserve( skb, 1); + skb_reserve(skb, 1); /* Copy frame without CRC */ if ( idev->io.baudrate < 4000000) { skb_put( skb, len-2); - memcpy( skb->data, idev->rx_buff.head, len-2); + memcpy( skb->data, idev->rx_buff.data, len-2); } else { skb_put( skb, len-4); - memcpy( skb->data, idev->rx_buff.head, len-4); + memcpy( skb->data, idev->rx_buff.data, len-4); } /* Move to next frame */ - idev->rx_buff.offset += len; - idev->rx_buff.head += len; + idev->rx_buff.data += len; skb->dev = &idev->netdev; skb->mac.raw = skb->data; @@ -858,7 +848,7 @@ int w83977af_dma_receive_complete(struct irda_device *idev) len |= inb( iobase+RFLFH) << 8; } /* Restore set register */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); return TRUE; } @@ -869,28 +859,24 @@ int w83977af_dma_receive_complete(struct irda_device *idev) * Receive all data in receiver FIFO * */ -static void w83977af_pio_receive( struct irda_device *idev) +static void w83977af_pio_receive(struct irda_device *idev) { __u8 byte = 0x00; int iobase; - DEBUG( 4, __FUNCTION__ "()\n"); + DEBUG(4, __FUNCTION__ "()\n"); - ASSERT( idev != NULL, return;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return;); + ASSERT(idev != NULL, return;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return;); iobase = idev->io.iobase; - if ( idev->rx_buff.len == 0) { - idev->rx_buff.head = idev->rx_buff.data; - } - /* Receive all characters in Rx FIFO */ do { - byte = inb( iobase+RBR); - async_unwrap_char( idev, byte); + byte = inb(iobase+RBR); + async_unwrap_char(idev, byte); - } while ( inb( iobase+USR) & USR_RDR); /* Data available */ + } while (inb(iobase+USR) & USR_RDR); /* Data available */ } /* @@ -899,30 +885,29 @@ static void w83977af_pio_receive( struct irda_device *idev) * Handle SIR interrupt * */ -static __u8 w83977af_sir_interrupt( struct irda_device *idev, int isr) +static __u8 w83977af_sir_interrupt(struct irda_device *idev, int isr) { - int len; int actual; __u8 new_icr = 0; - DEBUG( 4, __FUNCTION__ "(), isr=%#x\n", isr); + DEBUG(4, __FUNCTION__ "(), isr=%#x\n", isr); /* Transmit FIFO low on data */ - if ( isr & ISR_TXTH_I) { + if (isr & ISR_TXTH_I) { /* Write data left in transmit buffer */ - len = idev->tx_buff.len - idev->tx_buff.offset; - - ASSERT( len > 0, return 0;); - actual = w83977af_pio_write( idev->io.iobase, - idev->tx_buff.head, - len, idev->io.fifo_size); - idev->tx_buff.offset += actual; - idev->tx_buff.head += actual; + actual = w83977af_pio_write(idev->io.iobase, + idev->tx_buff.data, + idev->tx_buff.len, + idev->io.fifo_size); + idev->tx_buff.data += actual; + idev->tx_buff.len -= actual; idev->io.direction = IO_XMIT; - ASSERT( actual <= len, return 0;); + /* Check if finished */ - if ( actual == len) { + if (idev->tx_buff.len > 0) + new_icr |= ICR_ETXTHI; + else { DEBUG( 4, __FUNCTION__ "(), finished with frame!\n"); idev->netdev.tbusy = 0; /* Unlock */ idev->stats.tx_packets++; @@ -931,11 +916,11 @@ static __u8 w83977af_sir_interrupt( struct irda_device *idev, int isr) mark_bh(NET_BH); new_icr |= ICR_ETBREI; - } else - new_icr |= ICR_ETXTHI; + } + } /* Check if transmission has completed */ - if ( isr & ISR_TXEMP_I) { + if (isr & ISR_TXEMP_I) { /* Turn around and get ready to receive some data */ idev->io.direction = IO_RECV; @@ -943,8 +928,8 @@ static __u8 w83977af_sir_interrupt( struct irda_device *idev, int isr) } /* Rx FIFO threshold or timeout */ - if ( isr & ISR_RXTH_I) { - w83977af_pio_receive( idev); + if (isr & ISR_RXTH_I) { + w83977af_pio_receive(idev); /* Keep receiving */ new_icr |= ICR_ERBRI; @@ -968,64 +953,64 @@ static __u8 w83977af_fir_interrupt( struct irda_device *idev, int isr) iobase = idev->io.iobase; - set = inb( iobase+SSR); + set = inb(iobase+SSR); /* End of frame detected in FIFO */ - if ( isr & (ISR_FEND_I|ISR_FSF_I)) { - if ( w83977af_dma_receive_complete( idev)) { + if (isr & (ISR_FEND_I|ISR_FSF_I)) { + if (w83977af_dma_receive_complete(idev)) { new_icr |= ICR_EFSFI; } else { /* DMA not finished yet */ /* Set timer value, resolution 1 ms */ - switch_bank( iobase, SET4); - outb( 0x01, iobase+TMRL); /* 1 ms */ - outb( 0x00, iobase+TMRH); + switch_bank(iobase, SET4); + outb(0x01, iobase+TMRL); /* 1 ms */ + outb(0x00, iobase+TMRH); /* Start timer */ - outb( IR_MSL_EN_TMR, iobase+IR_MSL); + outb(IR_MSL_EN_TMR, iobase+IR_MSL); new_icr |= ICR_ETMRI; } } /* Timer finished */ - if ( isr & ISR_TMR_I) { + if (isr & ISR_TMR_I) { /* Disable timer */ - switch_bank( iobase, SET4); - outb( 0, iobase+IR_MSL); + switch_bank(iobase, SET4); + outb(0, iobase+IR_MSL); /* Clear timer event */ /* switch_bank(iobase, SET0); */ /* outb( ASCR_CTE, iobase+ASCR); */ /* Check if this is a TX timer interrupt */ - if ( idev->io.direction == IO_XMIT) { - w83977af_dma_write( idev, iobase); + if (idev->io.direction == IO_XMIT) { + w83977af_dma_write(idev, iobase); new_icr |= ICR_EDMAI; } else { /* Check if DMA has now finished */ - w83977af_dma_receive_complete( idev); + w83977af_dma_receive_complete(idev); new_icr |= ICR_EFSFI; } } /* Finished with DMA */ - if ( isr & ISR_DMA_I) { + if (isr & ISR_DMA_I) { w83977af_dma_xmit_complete( idev); - + /* Check if there are more frames to be transmitted */ - if ( irda_device_txqueue_empty( idev)) { + if (irda_device_txqueue_empty( idev)) { /* Prepare for receive */ - w83977af_dma_receive( idev); + w83977af_dma_receive(idev); new_icr = ICR_EFSFI; } } /* Restore set */ - outb( set, iobase+SSR); + outb(set, iobase+SSR); return new_icr; } @@ -1043,9 +1028,9 @@ static void w83977af_interrupt(int irq, void *dev_id, struct pt_regs *regs) struct irda_device *idev = (struct irda_device *) dev_id; - if ( idev == NULL) { - printk( KERN_WARNING "%s: irq %d for unknown device.\n", - driver_name, irq); + if (idev == NULL) { + printk(KERN_WARNING "%s: irq %d for unknown device.\n", + driver_name, irq); return; } @@ -1054,24 +1039,24 @@ static void w83977af_interrupt(int irq, void *dev_id, struct pt_regs *regs) iobase = idev->io.iobase; /* Save current bank */ - set = inb( iobase+SSR); - switch_bank( iobase, SET0); + set = inb(iobase+SSR); + switch_bank(iobase, SET0); - icr = inb( iobase+ICR); - isr = inb( iobase+ISR) & icr; /* Mask out the interesting ones */ + icr = inb(iobase+ICR); + isr = inb(iobase+ISR) & icr; /* Mask out the interesting ones */ - outb( 0, iobase+ICR); /* Disable interrupts */ + outb(0, iobase+ICR); /* Disable interrupts */ - if ( isr) { + if (isr) { /* Dispatch interrupt handler for the current speed */ if ( idev->io.baudrate > 115200) - icr = w83977af_fir_interrupt( idev, isr); + icr = w83977af_fir_interrupt(idev, isr); else - icr = w83977af_sir_interrupt( idev, isr); + icr = w83977af_sir_interrupt(idev, isr); } - outb( icr, iobase+ICR); /* Restore (new) interrupts */ - outb( set, iobase+SSR); /* Restore bank register */ + outb(icr, iobase+ICR); /* Restore (new) interrupts */ + outb(set, iobase+SSR); /* Restore bank register */ idev->netdev.interrupt = 0; } @@ -1082,7 +1067,7 @@ static void w83977af_interrupt(int irq, void *dev_id, struct pt_regs *regs) * This function should put the current thread to sleep until all data * have been sent, so it is safe to f.eks. change the speed. */ -static void w83977af_wait_until_sent( struct irda_device *idev) +static void w83977af_wait_until_sent(struct irda_device *idev) { current->state = TASK_INTERRUPTIBLE; schedule_timeout(6); @@ -1094,7 +1079,7 @@ static void w83977af_wait_until_sent( struct irda_device *idev) * Return TRUE is we are currently receiving a frame * */ -static int w83977af_is_receiving( struct irda_device *idev) +static int w83977af_is_receiving(struct irda_device *idev) { int status = FALSE; int iobase; @@ -1107,15 +1092,15 @@ static int w83977af_is_receiving( struct irda_device *idev) iobase = idev->io.iobase; /* Check if rx FIFO is not empty */ - set = inb( iobase+SSR); + set = inb(iobase+SSR); switch_bank( iobase, SET2); if (( inb( iobase+RXFDTH) & 0x3f) != 0) { /* We are receiving something */ status = TRUE; } - outb( set, iobase+SSR); + outb(set, iobase+SSR); } else - status = ( idev->rx_buff.state != OUTSIDE_FRAME); + status = (idev->rx_buff.state != OUTSIDE_FRAME); return status; } @@ -1128,7 +1113,7 @@ static int w83977af_is_receiving( struct irda_device *idev) */ static int w83977af_net_init( struct device *dev) { - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(0, __FUNCTION__ "()\n"); /* Set up to be a normal IrDA network device driver */ irda_device_setup( dev); @@ -1151,18 +1136,18 @@ static int w83977af_net_open( struct device *dev) int iobase; __u8 set; - DEBUG( 0, __FUNCTION__ "()\n"); + DEBUG(0, __FUNCTION__ "()\n"); - ASSERT( dev != NULL, return -1;); + ASSERT(dev != NULL, return -1;); idev = (struct irda_device *) dev->priv; - ASSERT( idev != NULL, return 0;); - ASSERT( idev->magic == IRDA_DEVICE_MAGIC, return 0;); + ASSERT(idev != NULL, return 0;); + ASSERT(idev->magic == IRDA_DEVICE_MAGIC, return 0;); iobase = idev->io.iobase; - if (request_irq( idev->io.irq, w83977af_interrupt, 0, idev->name, - (void *) idev)) { + if (request_irq(idev->io.irq, w83977af_interrupt, 0, idev->name, + (void *) idev)) { return -EAGAIN; } /* @@ -1170,7 +1155,7 @@ static int w83977af_net_open( struct device *dev) * and clean up on failure. */ if (request_dma(idev->io.dma, idev->name)) { - free_irq( idev->io.irq, idev); + free_irq(idev->io.irq, idev); return -EAGAIN; } @@ -1180,11 +1165,11 @@ static int w83977af_net_open( struct device *dev) dev->start = 1; /* Save current set */ - set = inb( iobase+SSR); + set = inb(iobase+SSR); /* Enable some interrupts so we can receive frames again */ switch_bank(iobase, SET0); - if ( idev->io.baudrate > 115200) { + if (idev->io.baudrate > 115200) { outb( ICR_EFSFI, iobase+ICR); w83977af_dma_receive( idev); } else @@ -1254,9 +1239,7 @@ static int w83977af_net_close(struct device *dev) */ int init_module(void) { - w83977af_init(); - - return(0); + return w83977af_init(); } /* @@ -1269,5 +1252,4 @@ void cleanup_module(void) { w83977af_cleanup(); } - -#endif +#endif /* MODULE */ diff --git a/drivers/net/mace.c b/drivers/net/mace.c index ed653ce16..8d433d6b1 100644 --- a/drivers/net/mace.c +++ b/drivers/net/mace.c @@ -4,6 +4,12 @@ * * Copyright (C) 1996 Paul Mackerras. */ + +#ifdef MODULE +#include +#include +#endif + #include #include #include @@ -16,6 +22,10 @@ #include #include "mace.h" +#ifdef MODULE +static struct device *mace_devs = NULL; +#endif + #define N_RX_RING 8 #define N_TX_RING 6 #define MAX_TX_ACTIVE 1 @@ -71,6 +81,9 @@ static void mace_txdma_intr(int irq, void *dev_id, struct pt_regs *regs); static void mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs); static void mace_set_timeout(struct device *dev); static void mace_tx_timeout(unsigned long data); +static inline void dbdma_reset(volatile struct dbdma_regs *dma); +static inline void mace_clean_rings(struct mace_data *mp); +static void __mace_set_address(struct device *dev, void *addr); /* * If we can't get a skbuff when we need it, we use this area for DMA. @@ -78,7 +91,7 @@ static void mace_tx_timeout(unsigned long data); static unsigned char dummy_buf[RX_BUFLEN+2]; /* Bit-reverse one byte of an ethernet hardware address. */ -static int +static inline int bitrev(int b) { int d = 0, i; @@ -144,7 +157,8 @@ mace_probe(struct device *dev) dev->dev_addr[j] = rev? bitrev(addr[j]): addr[j]; printk("%c%.2x", (j? ':': ' '), dev->dev_addr[j]); } - printk("\n"); + printk(", chip revision %d.%d\n", + in_8(&mp->mace->chipid_hi), in_8(&mp->mace->chipid_lo)); mp = (struct mace_data *) dev->priv; mp->maccc = ENXMT | ENRCV; @@ -193,6 +207,21 @@ mace_probe(struct device *dev) return 0; } +static void dbdma_reset(volatile struct dbdma_regs *dma) +{ + int i; + + out_le32(&dma->control, (WAKE|FLUSH|PAUSE|RUN) << 16); + + /* + * Yes this looks peculiar, but apparently it needs to be this + * way on some machines. + */ + for (i = 200; i > 0; --i) + if (ld_le32(&dma->control) & RUN) + udelay(1); +} + static void mace_reset(struct device *dev) { struct mace_data *mp = (struct mace_data *) dev->priv; @@ -203,14 +232,14 @@ static void mace_reset(struct device *dev) i = 200; while (--i) { out_8(&mb->biucc, SWRST); - if (mb->biucc & SWRST) { - udelay(20); + if (in_8(&mb->biucc) & SWRST) { + udelay(10); continue; } break; } if (!i) { - printk("mace: cannot reset chip!\n"); + printk(KERN_ERR "mace: cannot reset chip!\n"); return; } @@ -218,19 +247,14 @@ static void mace_reset(struct device *dev) i = in_8(&mb->ir); out_8(&mb->maccc, 0); /* turn off tx, rx */ - mb->biucc = XMTSP_64; - mb->utr = RTRD; - mb->fifocc = RCVFW_32 | XMTFW_16 | XMTFWU | RCVFWU | XMTBRST; - mb->xmtfc = AUTO_PAD_XMIT; /* auto-pad short frames */ - mb->rcvfc = 0; + out_8(&mb->biucc, XMTSP_64); + out_8(&mb->utr, RTRD); + out_8(&mb->fifocc, RCVFW_32 | XMTFW_16 | XMTFWU | RCVFWU | XMTBRST); + out_8(&mb->xmtfc, AUTO_PAD_XMIT); /* auto-pad short frames */ + out_8(&mb->rcvfc, 0); /* load up the hardware address */ - out_8(&mb->iac, ADDRCHG | PHYADDR); - while ((in_8(&mb->iac) & ADDRCHG) != 0) - ; - for (i = 0; i < 6; ++i) { - out_8(&mb->padr, dev->dev_addr[i]); - } + __mace_set_address(dev, dev->dev_addr); /* clear the multicast filter */ out_8(&mb->iac, ADDRCHG | LOGADDR); @@ -245,23 +269,30 @@ static void mace_reset(struct device *dev) out_8(&mb->plscc, PORTSEL_GPSI + ENPLSIO); } -static int mace_set_address(struct device *dev, void *addr) +static void __mace_set_address(struct device *dev, void *addr) { + volatile struct mace *mb = ((struct mace_data *) dev->priv)->mace; unsigned char *p = addr; - struct mace_data *mp = (struct mace_data *) dev->priv; - volatile struct mace *mb = mp->mace; int i; - unsigned long flags; - - save_flags(flags); cli(); /* load up the hardware address */ out_8(&mb->iac, ADDRCHG | PHYADDR); while ((in_8(&mb->iac) & ADDRCHG) != 0) ; - for (i = 0; i < 6; ++i) { + for (i = 0; i < 6; ++i) out_8(&mb->padr, dev->dev_addr[i] = p[i]); - } +} + +static int mace_set_address(struct device *dev, void *addr) +{ + struct mace_data *mp = (struct mace_data *) dev->priv; + volatile struct mace *mb = mp->mace; + unsigned long flags; + + save_flags(flags); cli(); + + __mace_set_address(dev, addr); + out_8(&mb->iac, 0); /* note: setting ADDRCHG clears ENRCV */ out_8(&mb->maccc, mp->maccc); @@ -285,6 +316,7 @@ static int mace_open(struct device *dev) mace_reset(dev); /* initialize list of sk_buffs for receiving and set up recv dma */ + mace_clean_rings(mp); memset((char *)mp->rx_cmds, 0, N_RX_RING * sizeof(struct dbdma_cmd)); cp = mp->rx_cmds; for (i = 0; i < N_RX_RING - 1; ++i) { @@ -335,25 +367,17 @@ static int mace_open(struct device *dev) out_8(&mb->maccc, mp->maccc); /* enable all interrupts except receive interrupts */ out_8(&mb->imr, RCVINT); + +#ifdef MOD_INC_USE_COUNT + MOD_INC_USE_COUNT; +#endif return 0; } -static int mace_close(struct device *dev) +static inline void mace_clean_rings(struct mace_data *mp) { - struct mace_data *mp = (struct mace_data *) dev->priv; - volatile struct mace *mb = mp->mace; - volatile struct dbdma_regs *rd = mp->rx_dma; - volatile struct dbdma_regs *td = mp->tx_dma; int i; - /* disable rx and tx */ - mb->maccc = 0; - mb->imr = 0xff; /* disable all intrs */ - - /* disable rx and tx dma */ - st_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */ - st_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */ - /* free some skb's */ for (i = 0; i < N_RX_RING; ++i) { if (mp->rx_bufs[i] != 0) { @@ -366,6 +390,28 @@ static int mace_close(struct device *dev) if (++i >= N_TX_RING) i = 0; } +} + +static int mace_close(struct device *dev) +{ + struct mace_data *mp = (struct mace_data *) dev->priv; + volatile struct mace *mb = mp->mace; + volatile struct dbdma_regs *rd = mp->rx_dma; + volatile struct dbdma_regs *td = mp->tx_dma; + + /* disable rx and tx */ + out_8(&mb->maccc, 0); + out_8(&mb->imr, 0xff); /* disable all intrs */ + + /* disable rx and tx dma */ + st_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */ + st_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */ + + mace_clean_rings(mp); + +#ifdef MOD_DEC_USE_COUNT + MOD_DEC_USE_COUNT; +#endif return 0; } @@ -517,10 +563,10 @@ static void mace_handle_misc_intrs(struct mace_data *mp, int intr) if (intr & MPCO) mp->stats.rx_missed_errors += 256; - mp->stats.rx_missed_errors += mb->mpc; /* reading clears it */ + mp->stats.rx_missed_errors += in_8(&mb->mpc); /* reading clears it */ if (intr & RNTPCO) mp->stats.rx_length_errors += 256; - mp->stats.rx_length_errors += mb->rntpc; /* reading clears it */ + mp->stats.rx_length_errors += in_8(&mb->rntpc); /* reading clears it */ if (intr & CERR) ++mp->stats.tx_heartbeat_errors; if (intr & BABBLE) @@ -547,7 +593,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) mace_handle_misc_intrs(mp, intr); i = mp->tx_empty; - while (mb->pr & XMTSV) { + while (in_8(&mb->pr) & XMTSV) { del_timer(&mp->tx_timeout); mp->timeout_active = 0; /* @@ -555,13 +601,13 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) * word. This appears to unlatch any error indication from * the DMA controller. */ - intr = mb->ir; + intr = in_8(&mb->ir); if (intr != 0) mace_handle_misc_intrs(mp, intr); if (mp->tx_bad_runt) { fs = in_8(&mb->xmtfs); mp->tx_bad_runt = 0; - mb->xmtfc = AUTO_PAD_XMIT; + out_8(&mb->xmtfc, AUTO_PAD_XMIT); continue; } dstat = ld_le32(&td->status); @@ -571,7 +617,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) * xcount is the number of complete frames which have been * written to the fifo but for which status has not been read. */ - xcount = (mb->fifofc >> XMTFC_SH) & XMTFC_MASK; + xcount = (in_8(&mb->fifofc) >> XMTFC_SH) & XMTFC_MASK; if (xcount == 0 || (dstat & DEAD)) { /* * If a packet was aborted before the DMA controller has @@ -586,11 +632,15 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) */ out_8(&mb->xmtfc, DXMTFCS); } - fs = mb->xmtfs; + fs = in_8(&mb->xmtfs); if ((fs & XMTSV) == 0) { printk(KERN_ERR "mace: xmtfs not valid! (fs=%x xc=%d ds=%x)\n", fs, xcount, dstat); - return; + mace_reset(dev); + /* + * XXX mace likes to hang the machine after a xmtfs error. + * This is hard to reproduce, reseting *may* help + */ } cp = mp->tx_cmds + NCMDS_TX * i; stat = ld_le16(&cp->xfer_status); @@ -600,7 +650,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) * the transmit FIFO. */ udelay(1); - x = (mb->fifofc >> XMTFC_SH) & XMTFC_MASK; + x = (in_8(&mb->fifofc) >> XMTFC_SH) & XMTFC_MASK; if (x != 0) { /* there were two bytes with an end-of-packet indication */ mp->tx_bad_runt = 1; @@ -612,10 +662,10 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) * We flush the transmit FIFO just in case (by setting the * XMTFWU bit with the transmitter disabled). */ - out_8(&mb->maccc, mb->maccc & ~ENXMT); - out_8(&mb->fifocc, mb->fifocc | XMTFWU); + out_8(&mb->maccc, in_8(&mb->maccc) & ~ENXMT); + out_8(&mb->fifocc, in_8(&mb->fifocc) | XMTFWU); udelay(1); - out_8(&mb->maccc, mb->maccc | ENXMT); + out_8(&mb->maccc, in_8(&mb->maccc) | ENXMT); out_8(&mb->xmtfc, AUTO_PAD_XMIT); } } @@ -632,7 +682,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++mp->stats.tx_carrier_errors; if (fs & (UFLO|LCOL|RTRY)) ++mp->stats.tx_aborted_errors; - } else + } else ++mp->stats.tx_packets; dev_kfree_skb(mp->tx_bufs[i]); --mp->tx_active; @@ -686,19 +736,19 @@ static void mace_tx_timeout(unsigned long data) goto out; /* update various counters */ - mace_handle_misc_intrs(mp, mb->ir); + mace_handle_misc_intrs(mp, in_8(&mb->ir)); cp = mp->tx_cmds + NCMDS_TX * mp->tx_empty; /* turn off both tx and rx and reset the chip */ out_8(&mb->maccc, 0); - out_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16); printk(KERN_ERR "mace: transmit timeout - resetting\n"); + dbdma_reset(td); mace_reset(dev); /* restart rx dma */ cp = bus_to_virt(ld_le32(&rd->cmdptr)); - out_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16); + dbdma_reset(rd); out_le16(&cp->xfer_status, 0); out_le32(&rd->cmdptr, virt_to_bus(cp)); out_le32(&rd->control, (RUN << 16) | RUN); @@ -786,8 +836,8 @@ static void mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs) ++mp->stats.rx_crc_errors; } else { /* Mace feature AUTO_STRIP_RCV is on by default, dropping the - * FCS on frames with 802.3 headers. This means that Ethernet - * frames have 8 extra octets at the end, while 802.3 frames + * FCS on frames with 802.3 headers. This means that Ethernet + * frames have 8 extra octets at the end, while 802.3 frames * have only 4. We need to correctly account for this. */ if (*(unsigned short *)(data+12) < 1536) /* 802.3 header */ nb -= 4; @@ -846,3 +896,35 @@ static void mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs) mp->rx_fill = i; } } + +#ifdef MODULE + +#if LINUX_VERSION_CODE > 0x20118 +MODULE_AUTHOR("Paul Mackerras"); +MODULE_DESCRIPTION("PowerMac MACE driver."); +#endif + +int init_module(void) +{ + int res; + + if(mace_devs != NULL) + return -EBUSY; + res = mace_probe(NULL); + return res; +} + +void cleanup_module(void) +{ + struct mace_data *mp = (struct mace_data *) mace_devs->priv; + unregister_netdev(mace_devs); + + free_irq(mace_devs->irq, mace_interrupt); + free_irq(mp->tx_dma_intr, mace_txdma_intr); + free_irq(mp->rx_dma_intr, mace_rxdma_intr); + + kfree(mace_devs); + mace_devs = NULL; +} + +#endif diff --git a/drivers/net/myri_sbus.c b/drivers/net/myri_sbus.c index bdc46d635..659824e92 100644 --- a/drivers/net/myri_sbus.c +++ b/drivers/net/myri_sbus.c @@ -34,7 +34,6 @@ static char *version = #include #include #include -#include #include #include @@ -278,7 +277,7 @@ static void myri_init_rings(struct myri_eth *mp, int from_irq) mp->rx_skbs[i] = skb; skb->dev = dev; skb_put(skb, RX_ALLOC_SIZE); - rxd[i].myri_scatters[0].addr = (u32) ((unsigned long)skb->data); + rxd[i].myri_scatters[0].addr = sbus_dvma_addr(skb->data); rxd[i].myri_scatters[0].len = RX_ALLOC_SIZE; rxd[i].ctx = i; rxd[i].num_sg = 1; @@ -340,12 +339,6 @@ static inline void myri_tx(struct myri_eth *mp, struct device *dev) dev_kfree_skb(skb); mp->tx_skbs[entry] = NULL; mp->enet_stats.tx_packets++; - -#ifdef NEED_DMA_SYNCHRONIZATION - mmu_sync_dma(((u32)((unsigned long)skb->data)), - skb->len, mp->myri_sbus_dev->my_bus); -#endif - entry = NEXT_TX(entry); } mp->tx_old = entry; @@ -437,8 +430,7 @@ static inline void myri_rx(struct myri_eth *mp, struct device *dev) drops++; DRX(("DROP ")); mp->enet_stats.rx_dropped++; - rxd->myri_scatters[0].addr = - (u32) ((unsigned long)skb->data); + rxd->myri_scatters[0].addr = sbus_dvma_addr(skb->data); rxd->myri_scatters[0].len = RX_ALLOC_SIZE; rxd->ctx = index; rxd->num_sg = 1; @@ -447,7 +439,7 @@ static inline void myri_rx(struct myri_eth *mp, struct device *dev) } #ifdef NEED_DMA_SYNCHRONIZATION - mmu_sync_dma(((u32)((unsigned long)skb->data)), + mmu_sync_dma(sbus_dvma_addr(skb->data), skb->len, mp->myri_sbus_dev->my_bus); #endif @@ -464,8 +456,7 @@ static inline void myri_rx(struct myri_eth *mp, struct device *dev) mp->rx_skbs[index] = new_skb; new_skb->dev = dev; skb_put(new_skb, RX_ALLOC_SIZE); - rxd->myri_scatters[0].addr = - (u32) ((unsigned long)new_skb->data); + rxd->myri_scatters[0].addr = sbus_dvma_addr(new_skb->data); rxd->myri_scatters[0].len = RX_ALLOC_SIZE; rxd->ctx = index; rxd->num_sg = 1; @@ -489,8 +480,7 @@ static inline void myri_rx(struct myri_eth *mp, struct device *dev) /* Reuse original ring buffer. */ DRX(("reuse ")); - rxd->myri_scatters[0].addr = - (u32) ((unsigned long)skb->data); + rxd->myri_scatters[0].addr = sbus_dvma_addr(skb->data); rxd->myri_scatters[0].len = RX_ALLOC_SIZE; rxd->ctx = index; rxd->num_sg = 1; @@ -600,6 +590,12 @@ static int myri_start_xmit(struct sk_buff *skb, struct device *dev) return 1; } + +#ifdef NEED_DMA_SYNCHRONIZATION + mmu_sync_dma(sbus_dvma_addr(skb->data), + skb->len, mp->myri_sbus_dev->my_bus); +#endif + /* This is just to prevent multiple PIO reads for TX_BUFFS_AVAIL. */ head = sq->head; tail = sq->tail; @@ -628,8 +624,7 @@ static int myri_start_xmit(struct sk_buff *skb, struct device *dev) txd = &sq->myri_txd[entry]; mp->tx_skbs[entry] = skb; - txd->myri_gathers[0].addr = - (unsigned int) ((unsigned long)skb->data); + txd->myri_gathers[0].addr = sbus_dvma_addr(skb->data); txd->myri_gathers[0].len = len; txd->num_sg = 1; txd->chan = KERNEL_CHANNEL; diff --git a/drivers/net/ne.c b/drivers/net/ne.c index 36b9123e8..9bbf753c5 100644 --- a/drivers/net/ne.c +++ b/drivers/net/ne.c @@ -105,6 +105,7 @@ bad_clone_list[] __initdata = { {"ET-100","ET-200", {0x00, 0x45, 0x54}}, /* YANG and YA clone */ {"COMPEX","COMPEX16",{0x00,0x80,0x48}}, /* Broken ISA Compex cards */ {"E-LAN100", "E-LAN200", {0x00, 0x00, 0x5d}}, /* Broken ne1000 clones */ + {"PCM-4823", "PCM-4823", {0x00, 0xc0, 0x6c}}, /* Broken Advantech MoBo */ {0,} }; #endif diff --git a/drivers/net/ne2.c b/drivers/net/ne2.c index 60a729f24..3fabee261 100644 --- a/drivers/net/ne2.c +++ b/drivers/net/ne2.c @@ -75,7 +75,6 @@ static const char *version = "ne2.c:v0.91 Nov 16 1998 Wim Dumon #include #include -#include #include #include diff --git a/drivers/net/net_init.c b/drivers/net/net_init.c index edb41febb..4391bb68f 100644 --- a/drivers/net/net_init.c +++ b/drivers/net/net_init.c @@ -252,6 +252,22 @@ hipfound: /* From the double loop above. */ return dev; } + +void unregister_hipdev(struct device *dev) +{ + int i; + rtnl_lock(); + unregister_netdevice(dev); + for (i = 0; i < MAX_HIP_CARDS; ++i) { + if (hipdev_index[i] == dev) { + hipdev_index[i] = NULL; + break; + } + } + rtnl_unlock(); +} + + static int hippi_neigh_setup_dev(struct device *dev, struct neigh_parms *p) { /* Never send broadcast/multicast ARP messages */ diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 0e3b0c109..8f13de814 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c @@ -13,7 +13,7 @@ * This driver is for PCnet32 and PCnetPCI based ethercards */ -static const char *version = "pcnet32.c:v1.11 17.1.99 tsbogend@alpha.franken.de\n"; +static const char *version = "pcnet32.c:v1.21 31.3.99 tsbogend@alpha.franken.de\n"; #include #include @@ -63,9 +63,36 @@ static const int rx_copybreak = 200; #define PORT_PORTSEL 0x03 #define PORT_ASEL 0x04 +#define PORT_100 0x40 #define PORT_FD 0x80 -static int options = PORT_ASEL; /* port selection */ + +/* + * table to translate option values from tulip + * to internal options + */ +static unsigned char options_mapping[] = { + PORT_ASEL, /* 0 Auto-select */ + PORT_AUI, /* 1 BNC/AUI */ + PORT_AUI, /* 2 AUI/BNC */ + PORT_ASEL, /* 3 not supported */ + PORT_10BT | PORT_FD, /* 4 10baseT-FD */ + PORT_ASEL, /* 5 not supported */ + PORT_ASEL, /* 6 not supported */ + PORT_ASEL, /* 7 not supported */ + PORT_ASEL, /* 8 not supported */ + PORT_MII, /* 9 MII 10baseT */ + PORT_MII | PORT_FD, /* 10 MII 10baseT-FD */ + PORT_MII, /* 11 MII (autosel) */ + PORT_10BT, /* 12 10BaseT */ + PORT_MII | PORT_100, /* 13 MII 100BaseTx */ + PORT_MII | PORT_100 | PORT_FD, /* 14 MII 100BaseTx-FD */ + PORT_ASEL /* 15 not supported */ +}; + +#define MAX_UNITS 8 +static int options[MAX_UNITS] = {0, }; +static int full_duplex[MAX_UNITS] = {0, }; /* * Theory of Operation @@ -121,6 +148,12 @@ static int options = PORT_ASEL; /* port selection */ * added port selection for modules * detect special T1/E1 WAN card and setup port selection * v1.11: fixed wrong checking of Tx errors + * v1.20: added check of return value kmalloc (cpeterso@cs.washington.edu) + * added save original kmalloc addr for freeing (mcr@solidum.com) + * added support for PCnetHome chip (joe@MIT.EDU) + * rewritten PCI card detection + * added dwio mode to get driver working on some PPC machines + * v1.21: added mii selection and mii ioctl */ @@ -145,207 +178,407 @@ static int options = PORT_ASEL; /* port selection */ #define PKT_BUF_SZ 1544 /* Offsets from base I/O address. */ -#define PCNET32_DATA 0x10 -#define PCNET32_ADDR 0x12 -#define PCNET32_RESET 0x14 -#define PCNET32_BUS_IF 0x16 -#define PCNET32_TOTAL_SIZE 0x18 +#define PCNET32_WIO_RDP 0x10 +#define PCNET32_WIO_RAP 0x12 +#define PCNET32_WIO_RESET 0x14 +#define PCNET32_WIO_BDP 0x16 + +#define PCNET32_DWIO_RDP 0x10 +#define PCNET32_DWIO_RAP 0x14 +#define PCNET32_DWIO_RESET 0x18 +#define PCNET32_DWIO_BDP 0x1C + +#define PCNET32_TOTAL_SIZE 0x20 #define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */ /* The PCNET32 Rx and Tx ring descriptors. */ struct pcnet32_rx_head { - u32 base; - s16 buf_length; - s16 status; - u32 msg_length; - u32 reserved; + u32 base; + s16 buf_length; + s16 status; + u32 msg_length; + u32 reserved; }; struct pcnet32_tx_head { - u32 base; - s16 length; - s16 status; - u32 misc; - u32 reserved; + u32 base; + s16 length; + s16 status; + u32 misc; + u32 reserved; }; - /* The PCNET32 32-Bit initialization block, described in databook. */ struct pcnet32_init_block { - u16 mode; - u16 tlen_rlen; - u8 phys_addr[6]; - u16 reserved; - u32 filter[2]; - /* Receive and transmit ring base, along with extra bits. */ - u32 rx_ring; - u32 tx_ring; + u16 mode; + u16 tlen_rlen; + u8 phys_addr[6]; + u16 reserved; + u32 filter[2]; + /* Receive and transmit ring base, along with extra bits. */ + u32 rx_ring; + u32 tx_ring; +}; + +/* PCnet32 access functions */ +struct pcnet32_access { + u16 (*read_csr)(unsigned long, int); + void (*write_csr)(unsigned long, int, u16); + u16 (*read_bcr)(unsigned long, int); + void (*write_bcr)(unsigned long, int, u16); + u16 (*read_rap)(unsigned long); + void (*write_rap)(unsigned long, u16); + void (*reset)(unsigned long); }; struct pcnet32_private { - /* The Tx and Rx ring entries must be aligned on 16-byte boundaries in 32bit mode. */ - struct pcnet32_rx_head rx_ring[RX_RING_SIZE]; - struct pcnet32_tx_head tx_ring[TX_RING_SIZE]; - struct pcnet32_init_block init_block; - const char *name; - /* The saved address of a sent-in-place packet/buffer, for skfree(). */ - struct sk_buff *tx_skbuff[TX_RING_SIZE]; - struct sk_buff *rx_skbuff[RX_RING_SIZE]; - int cur_rx, cur_tx; /* The next free ring entry */ - int dirty_rx, dirty_tx; /* The ring entries to be free()ed. */ - struct net_device_stats stats; - char tx_full; - int options; - int shared_irq:1, /* shared irq possible */ - full_duplex:1; /* full duplex possible */ + /* The Tx and Rx ring entries must be aligned on 16-byte boundaries in 32bit mode. */ + struct pcnet32_rx_head rx_ring[RX_RING_SIZE]; + struct pcnet32_tx_head tx_ring[TX_RING_SIZE]; + struct pcnet32_init_block init_block; + const char *name; + /* The saved address of a sent-in-place packet/buffer, for skfree(). */ + struct sk_buff *tx_skbuff[TX_RING_SIZE]; + struct sk_buff *rx_skbuff[RX_RING_SIZE]; + struct pcnet32_access a; + void *origmem; + int cur_rx, cur_tx; /* The next free ring entry */ + int dirty_rx, dirty_tx; /* The ring entries to be free()ed. */ + struct net_device_stats stats; + char tx_full; + int options; + int shared_irq:1, /* shared irq possible */ + full_duplex:1, /* full duplex possible */ + mii:1; /* mii port available */ #ifdef MODULE - struct device *next; + struct device *next; #endif }; -int pcnet32_probe(struct device *dev); -static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, unsigned char irq_line, int shared); -static int pcnet32_open(struct device *dev); -static int pcnet32_init_ring(struct device *dev); -static int pcnet32_start_xmit(struct sk_buff *skb, struct device *dev); -static int pcnet32_rx(struct device *dev); -static void pcnet32_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static int pcnet32_close(struct device *dev); -static struct net_device_stats *pcnet32_get_stats(struct device *dev); -static void pcnet32_set_multicast_list(struct device *dev); +int pcnet32_probe(struct device *); +static int pcnet32_probe1(struct device *, unsigned long, unsigned char, int, int); +static int pcnet32_open(struct device *); +static int pcnet32_init_ring(struct device *); +static int pcnet32_start_xmit(struct sk_buff *, struct device *); +static int pcnet32_rx(struct device *); +static void pcnet32_interrupt(int, void *, struct pt_regs *); +static int pcnet32_close(struct device *); +static struct net_device_stats *pcnet32_get_stats(struct device *); +static void pcnet32_set_multicast_list(struct device *); +#ifdef HAVE_PRIVATE_IOCTL +static int pcnet32_mii_ioctl(struct device *, struct ifreq *, int); +#endif + +enum pci_flags_bit { + PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4, + PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3, +}; + +struct pcnet32_pci_id_info { + const char *name; + u16 vendor_id, device_id, device_id_mask, flags; + int io_size; + int (*probe1) (struct device *, unsigned long, unsigned char, int, int); +}; + +static struct pcnet32_pci_id_info pcnet32_tbl[] = { + { "AMD PCnetPCI series", + 0x1022, 0x2000, 0xfffe, PCI_USES_IO|PCI_USES_MASTER, PCNET32_TOTAL_SIZE, + pcnet32_probe1}, + {0,} +}; + +static u16 pcnet32_wio_read_csr (unsigned long addr, int index) +{ + outw (index, addr+PCNET32_WIO_RAP); + return inw (addr+PCNET32_WIO_RDP); +} + +static void pcnet32_wio_write_csr (unsigned long addr, int index, u16 val) +{ + outw (index, addr+PCNET32_WIO_RAP); + outw (val, addr+PCNET32_WIO_RDP); +} + +static u16 pcnet32_wio_read_bcr (unsigned long addr, int index) +{ + outw (index, addr+PCNET32_WIO_RAP); + return inw (addr+PCNET32_WIO_BDP); +} + +static void pcnet32_wio_write_bcr (unsigned long addr, int index, u16 val) +{ + outw (index, addr+PCNET32_WIO_RAP); + outw (val, addr+PCNET32_WIO_BDP); +} + +static u16 pcnet32_wio_read_rap (unsigned long addr) +{ + return inw (addr+PCNET32_WIO_RAP); +} + +static void pcnet32_wio_write_rap (unsigned long addr, u16 val) +{ + outw (val, addr+PCNET32_WIO_RAP); +} + +static void pcnet32_wio_reset (unsigned long addr) +{ + inw (addr+PCNET32_WIO_RESET); +} + +static int pcnet32_wio_check (unsigned long addr) +{ + outw (88, addr+PCNET32_WIO_RAP); + return (inw (addr+PCNET32_WIO_RAP) == 88); +} + +static struct pcnet32_access pcnet32_wio = { + pcnet32_wio_read_csr, + pcnet32_wio_write_csr, + pcnet32_wio_read_bcr, + pcnet32_wio_write_bcr, + pcnet32_wio_read_rap, + pcnet32_wio_write_rap, + pcnet32_wio_reset +}; + +static u16 pcnet32_dwio_read_csr (unsigned long addr, int index) +{ + outl (index, addr+PCNET32_DWIO_RAP); + return (inl (addr+PCNET32_DWIO_RDP) & 0xffff); +} + +static void pcnet32_dwio_write_csr (unsigned long addr, int index, u16 val) +{ + outl (index, addr+PCNET32_DWIO_RAP); + outl (val, addr+PCNET32_DWIO_RDP); +} + +static u16 pcnet32_dwio_read_bcr (unsigned long addr, int index) +{ + outl (index, addr+PCNET32_DWIO_RAP); + return (inl (addr+PCNET32_DWIO_BDP) & 0xffff); +} + +static void pcnet32_dwio_write_bcr (unsigned long addr, int index, u16 val) +{ + outl (index, addr+PCNET32_DWIO_RAP); + outl (val, addr+PCNET32_DWIO_BDP); +} + +static u16 pcnet32_dwio_read_rap (unsigned long addr) +{ + return (inl (addr+PCNET32_DWIO_RAP) & 0xffff); +} + +static void pcnet32_dwio_write_rap (unsigned long addr, u16 val) +{ + outl (val, addr+PCNET32_DWIO_RAP); +} + +static void pcnet32_dwio_reset (unsigned long addr) +{ + inl (addr+PCNET32_DWIO_RESET); +} + +static int pcnet32_dwio_check (unsigned long addr) +{ + outl (88, addr+PCNET32_DWIO_RAP); + return (inl (addr+PCNET32_DWIO_RAP) == 88); +} + +static struct pcnet32_access pcnet32_dwio = { + pcnet32_dwio_read_csr, + pcnet32_dwio_write_csr, + pcnet32_dwio_read_bcr, + pcnet32_dwio_write_bcr, + pcnet32_dwio_read_rap, + pcnet32_dwio_write_rap, + pcnet32_dwio_reset + +}; -__initfunc(int pcnet32_probe (struct device *dev)) +int __init pcnet32_probe (struct device *dev) { - unsigned int ioaddr = dev ? dev->base_addr: 0; + unsigned long ioaddr = dev ? dev->base_addr: 0; unsigned int irq_line = dev ? dev->irq : 0; int *port; + int cards_found = 0; - if (ioaddr > 0x1ff) - return pcnet32_probe1(dev, ioaddr, irq_line, 0); - else if(ioaddr != 0) - return ENXIO; + +#ifndef __powerpc__ + if (ioaddr > 0x1ff) { + if (check_region(ioaddr, PCNET32_TOTAL_SIZE) == 0) + return pcnet32_probe1(dev, ioaddr, irq_line, 0, 0); + else + return ENODEV; + } else +#endif + if(ioaddr != 0) + return ENXIO; #if defined(CONFIG_PCI) if (pci_present()) { - struct pci_dev *pdev = NULL; + struct pci_dev *pdev; + unsigned char pci_bus, pci_device_fn; + int pci_index; printk("pcnet32.c: PCI bios is present, checking for devices...\n"); - while ((pdev = pci_find_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, pdev))) { - unsigned short pci_command; + for (pci_index = 0; pci_index < 0xff; pci_index++) { + u16 vendor, device, pci_command; + int chip_idx; - irq_line = pdev->irq; + if (pcibios_find_class (PCI_CLASS_NETWORK_ETHERNET << 8, + pci_index, &pci_bus, &pci_device_fn) != PCIBIOS_SUCCESSFUL) + break; + + pcibios_read_config_word(pci_bus, pci_device_fn, PCI_VENDOR_ID, &vendor); + pcibios_read_config_word(pci_bus, pci_device_fn, PCI_DEVICE_ID, &device); + + for (chip_idx = 0; pcnet32_tbl[chip_idx].vendor_id; chip_idx++) + if (vendor == pcnet32_tbl[chip_idx].vendor_id && + (device & pcnet32_tbl[chip_idx].device_id_mask) == pcnet32_tbl[chip_idx].device_id) + break; + if (pcnet32_tbl[chip_idx].vendor_id == 0) + continue; + + pdev = pci_find_slot(pci_bus, pci_device_fn); ioaddr = pdev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK; +#if defined(ADDR_64BITS) && defined(__alpha__) + ioaddr |= ((long)pdev->base_address[1]) << 32; +#endif + irq_line = pdev->irq; + + /* Avoid already found cards from previous pcnet32_probe() calls */ + if ((pcnet32_tbl[chip_idx].flags & PCI_USES_IO) && + check_region(ioaddr, pcnet32_tbl[chip_idx].io_size)) + continue; + /* PCI Spec 2.1 states that it is either the driver or PCI card's * responsibility to set the PCI Master Enable Bit if needed. * (From Mark Stockton ) */ pci_read_config_word(pdev, PCI_COMMAND, &pci_command); - - /* Avoid already found cards from previous pcnet32_probe() calls */ - if (check_region(ioaddr, PCNET32_TOTAL_SIZE)) - continue; - if ( ! (pci_command & PCI_COMMAND_MASTER)) { printk("PCI Master Bit has not been set. Setting...\n"); pci_command |= PCI_COMMAND_MASTER|PCI_COMMAND_IO; pci_write_config_word(pdev, PCI_COMMAND, pci_command); } #ifdef CONFIG_SNI_RM200_PCI - if (mips_machgroup == MACH_GROUP_SNI_RM - && mips_machtype == MACH_SNI_RM200_PCI) - irq_line = PCIMT_IRQ_ETHERNET; + if (mips_machgroup == MACH_GROUP_SNI_RM + && mips_machtype == MACH_SNI_RM200_PCI) + irq_line = PCIMT_IRQ_ETHERNET; #endif + printk("Found PCnet/PCI at %#lx, irq %d.\n", ioaddr, irq_line); - printk("Found PCnet/PCI at %#x, irq %d.\n", - ioaddr, irq_line); - - if (pcnet32_probe1(dev, ioaddr, irq_line, 1) != 0) { /* Shouldn't happen. */ - printk(KERN_ERR "pcnet32.c: Probe of PCI card at %#x failed.\n", ioaddr); - break; + if (pcnet32_tbl[chip_idx].probe1(dev, ioaddr, irq_line, 1, cards_found) == 0) { + cards_found++; + dev = NULL; } - return 0; } } else #endif /* defined(CONFIG_PCI) */ /* now look for PCnet32 VLB cards */ for (port = pcnet32_portlist; *port; port++) { - unsigned int ioaddr = *port; + unsigned long ioaddr = *port; if ( check_region(ioaddr, PCNET32_TOTAL_SIZE) == 0) { /* check if there is really a pcnet chip on that ioaddr */ if ((inb(ioaddr + 14) == 0x57) && (inb(ioaddr + 15) == 0x57) && - (pcnet32_probe1(dev, ioaddr, 0, 0) == 0)) - return 0; + (pcnet32_probe1(dev, ioaddr, 0, 0, 0) == 0)) + cards_found++; } } - return ENODEV; + return cards_found ? 0: ENODEV; } /* pcnet32_probe1 */ -__initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, unsigned char irq_line, int shared)) +static int __init +pcnet32_probe1(struct device *dev, unsigned long ioaddr, unsigned char irq_line, int shared, int card_idx) { struct pcnet32_private *lp; - int i,full_duplex = 0; + int i,media,fdx = 0, mii = 0; + int chip_version; char *chipname; + char *priv; + struct pcnet32_access *a; + + /* reset the chip */ + pcnet32_dwio_reset(ioaddr); + pcnet32_wio_reset(ioaddr); + + if (pcnet32_wio_read_csr (ioaddr, 0) == 4 && pcnet32_wio_check (ioaddr)) { + a = &pcnet32_wio; + } else { + if (pcnet32_dwio_read_csr (ioaddr, 0) == 4 && pcnet32_dwio_check(ioaddr)) { + a = &pcnet32_dwio; + } else + return ENODEV; + } - inw(ioaddr+PCNET32_RESET); /* Reset the PCNET32 */ - - outw(0x0000, ioaddr+PCNET32_ADDR); /* Switch to window 0 */ - if (inw(ioaddr+PCNET32_DATA) != 0x0004) - return ENODEV; - - /* Get the version of the chip. */ - outw(88, ioaddr+PCNET32_ADDR); - if (inw(ioaddr+PCNET32_ADDR) != 88) { - /* should never happen */ + chip_version = a->read_csr (ioaddr, 88) | (a->read_csr (ioaddr,89) << 16); + if (pcnet32_debug > 2) + printk(" PCnet chip version is %#x.\n", chip_version); + if ((chip_version & 0xfff) != 0x003) return ENODEV; - } else { /* Good, it's a newer chip. */ - int chip_version = inw(ioaddr+PCNET32_DATA); - outw(89, ioaddr+PCNET32_ADDR); - chip_version |= inw(ioaddr+PCNET32_DATA) << 16; + chip_version = (chip_version >> 12) & 0xffff; + switch (chip_version) { + case 0x2420: + chipname = "PCnet/PCI 79C970"; + break; + case 0x2430: + if (shared) + chipname = "PCnet/PCI 79C970"; /* 970 gives the wrong chip id back */ + else + chipname = "PCnet/32 79C965"; + break; + case 0x2621: + chipname = "PCnet/PCI II 79C970A"; + fdx = 1; + break; + case 0x2623: + chipname = "PCnet/FAST 79C971"; + fdx = 1; mii = 1; + break; + case 0x2624: + chipname = "PCnet/FAST+ 79C972"; + fdx = 1; mii = 1; + break; + case 0x2626: + chipname = "PCnet/Home 79C978"; + fdx = 1; + /* + * This is based on specs published at www.amd.com. This section + * assumes that a card with a 79C978 wants to go into 1Mb HomePNA + * mode. The 79C978 can also go into standard ethernet, and there + * probably should be some sort of module option to select the + * mode by which the card should operate + */ + /* switch to home wiring mode */ + media = a->read_bcr (ioaddr, 49); if (pcnet32_debug > 2) - printk(" PCnet chip version is %#x.\n", chip_version); - if ((chip_version & 0xfff) != 0x003) - return ENODEV; - chip_version = (chip_version >> 12) & 0xffff; - switch (chip_version) { - case 0x2420: - chipname = "PCnet/PCI 79C970"; - break; - case 0x2430: - if (shared) - chipname = "PCnet/PCI 79C970"; /* 970 gives the wrong chip id back */ - else - chipname = "PCnet/32 79C965"; - break; - case 0x2621: - chipname = "PCnet/PCI II 79C970A"; - full_duplex = 1; - break; - case 0x2623: - chipname = "PCnet/FAST 79C971"; - full_duplex = 1; - break; - case 0x2624: - chipname = "PCnet/FAST+ 79C972"; - full_duplex = 1; - break; - default: - printk("pcnet32: PCnet version %#x, no PCnet32 chip.\n",chip_version); - return ENODEV; - } + printk("pcnet32: pcnet32 media value %#x.\n", media); + media &= ~3; + media |= 1; + if (pcnet32_debug > 2) + printk("pcnet32: pcnet32 media reset to %#x.\n", media); + a->write_bcr (ioaddr, 49, media); + break; + default: + printk("pcnet32: PCnet version %#x, no PCnet32 chip.\n",chip_version); + return ENODEV; } - if (dev == NULL) - dev = init_etherdev(0, 0); + dev = init_etherdev(dev, 0); - printk("%s: %s at %#3x,", dev->name, chipname, ioaddr); + printk(KERN_INFO "%s: %s at %#3lx,", dev->name, chipname, ioaddr); /* There is a 16 byte station address PROM at the base address. The first six bytes are the station address. */ @@ -355,8 +588,14 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un dev->base_addr = ioaddr; request_region(ioaddr, PCNET32_TOTAL_SIZE, chipname); - /* Make certain the data structures used by the PCnet32 are 16byte aligned and DMAble. */ - lp = (struct pcnet32_private *) (((unsigned long)kmalloc(sizeof(*lp)+15, GFP_DMA | GFP_KERNEL)+15) & ~15); + if ((priv = kmalloc(sizeof(*lp)+15,GFP_KERNEL)) == NULL) + return ENOMEM; + + /* + * Make certain the data structures used by + * the PCnet32 are 16byte aligned + */ + lp = (struct pcnet32_private *)(((unsigned long)priv+15) & ~15); dma_cache_inv(lp, sizeof(*lp)+15); #ifdef __mips__ /* XXX Maybe modify kmalloc() to return KSEG1 memory? This would @@ -372,8 +611,18 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un dev->priv = lp; lp->name = chipname; lp->shared_irq = shared; - lp->full_duplex = full_duplex; - lp->options = options; + lp->full_duplex = fdx; + lp->mii = mii; + if (options[card_idx] > sizeof (options_mapping)) + lp->options = PORT_ASEL; + else + lp->options = options_mapping[options[card_idx]]; + + if (fdx && !(lp->options & PORT_ASEL) && full_duplex[card_idx]) + lp->options |= PORT_FD; + + lp->origmem = priv; + lp->a = *a; /* detect special T1/E1 WAN card by checking for MAC address */ if (dev->dev_addr[0] == 0x00 && dev->dev_addr[1] == 0xe0 && dev->dev_addr[2] == 0x75) @@ -389,24 +638,17 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un lp->init_block.tx_ring = (u32)le32_to_cpu(virt_to_bus(lp->tx_ring)); /* switch pcnet32 to 32bit mode */ - outw(0x0014, ioaddr+PCNET32_ADDR); - outw(0x0002, ioaddr+PCNET32_BUS_IF); - - outw(0x0001, ioaddr+PCNET32_ADDR); - inw(ioaddr+PCNET32_ADDR); - outw(virt_to_bus(&lp->init_block) & 0xffff, ioaddr+PCNET32_DATA); - outw(0x0002, ioaddr+PCNET32_ADDR); - inw(ioaddr+PCNET32_ADDR); - outw(virt_to_bus(&lp->init_block) >> 16, ioaddr+PCNET32_DATA); - outw(0x0000, ioaddr+PCNET32_ADDR); - inw(ioaddr+PCNET32_ADDR); + a->write_bcr (ioaddr, 20, 2); + + a->write_csr (ioaddr, 1, virt_to_bus(&lp->init_block) & 0xffff); + a->write_csr (ioaddr, 2, virt_to_bus(&lp->init_block) >> 16); if (irq_line) { dev->irq = irq_line; } if (dev->irq >= 2) - printk(" assigned IRQ %d.\n", dev->irq); + printk(" assigned IRQ %d.\n", dev->irq); else { unsigned long irq_mask = probe_irq_on(); @@ -416,7 +658,7 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un * boards will work. */ /* Trigger an initialization just for the interrupt. */ - outw(0x0041, ioaddr+PCNET32_DATA); + a->write_csr (ioaddr, 0, 0x41); mdelay (1); dev->irq = probe_irq_off (irq_mask); @@ -429,7 +671,7 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un } if (pcnet32_debug > 0) - printk(version); + printk(version); /* The PCNET32-specific entries in the device structure. */ dev->open = &pcnet32_open; @@ -437,6 +679,10 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un dev->stop = &pcnet32_close; dev->get_stats = &pcnet32_get_stats; dev->set_multicast_list = &pcnet32_set_multicast_list; +#ifdef HAVE_PRIVATE_IOCTL + dev->do_ioctl = &pcnet32_mii_ioctl; +#endif + #ifdef MODULE lp->next = pcnet32_dev; @@ -452,95 +698,96 @@ __initfunc(static int pcnet32_probe1(struct device *dev, unsigned int ioaddr, un static int pcnet32_open(struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - unsigned int ioaddr = dev->base_addr; - unsigned short val; - int i; - - if (dev->irq == 0 || - request_irq(dev->irq, &pcnet32_interrupt, - lp->shared_irq ? SA_SHIRQ : 0, lp->name, (void *)dev)) { - return -EAGAIN; - } - - /* Reset the PCNET32 */ - inw(ioaddr+PCNET32_RESET); + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + unsigned long ioaddr = dev->base_addr; + u16 val; + int i; + + if (dev->irq == 0 || + request_irq(dev->irq, &pcnet32_interrupt, + lp->shared_irq ? SA_SHIRQ : 0, lp->name, (void *)dev)) { + return -EAGAIN; + } - /* switch pcnet32 to 32bit mode */ - outw(0x0014, ioaddr+PCNET32_ADDR); - outw(0x0002, ioaddr+PCNET32_BUS_IF); + /* Reset the PCNET32 */ + lp->a.reset (ioaddr); - if (pcnet32_debug > 1) - printk("%s: pcnet32_open() irq %d tx/rx rings %#x/%#x init %#x.\n", - dev->name, dev->irq, - (u32) virt_to_bus(lp->tx_ring), - (u32) virt_to_bus(lp->rx_ring), - (u32) virt_to_bus(&lp->init_block)); + /* switch pcnet32 to 32bit mode */ + lp->a.write_csr (ioaddr, 20, 2); + + if (pcnet32_debug > 1) + printk("%s: pcnet32_open() irq %d tx/rx rings %#x/%#x init %#x.\n", + dev->name, dev->irq, + (u32) virt_to_bus(lp->tx_ring), + (u32) virt_to_bus(lp->rx_ring), + (u32) virt_to_bus(&lp->init_block)); - /* set/reset autoselect bit */ - outw(0x0002, ioaddr+PCNET32_ADDR); - val = inw(ioaddr+PCNET32_BUS_IF) & ~2; - if (lp->options & PORT_ASEL) - val |= 2; - outw(val, ioaddr+PCNET32_BUS_IF); - - /* handle full duplex setting */ - if (lp->full_duplex) { - outw (0x0009, ioaddr+PCNET32_ADDR); - val = inw(ioaddr+PCNET32_BUS_IF) & ~3; - if (lp->options & PORT_FD) { - val |= 1; - if (lp->options == (PORT_FD | PORT_AUI)) - val |= 2; - } - outw(val, ioaddr+PCNET32_BUS_IF); + /* set/reset autoselect bit */ + val = lp->a.read_bcr (ioaddr, 2) & ~2; + if (lp->options & PORT_ASEL) + val |= 2; + lp->a.write_bcr (ioaddr, 2, val); + + /* handle full duplex setting */ + if (lp->full_duplex) { + val = lp->a.read_bcr (ioaddr, 9) & ~3; + if (lp->options & PORT_FD) { + val |= 1; + if (lp->options == (PORT_FD | PORT_AUI)) + val |= 2; } + lp->a.write_bcr (ioaddr, 9, val); + } - /* set/reset GPSI bit in test register */ - outw (0x007c, ioaddr+PCNET32_ADDR); - val = inw(ioaddr+PCNET32_DATA) & ~0x10; - if ((lp->options & PORT_PORTSEL) == PORT_GPSI) - val |= 0x10; - outw(val, ioaddr+PCNET32_DATA); - - lp->init_block.mode = le16_to_cpu((lp->options & PORT_PORTSEL) << 7); - lp->init_block.filter[0] = 0x00000000; - lp->init_block.filter[1] = 0x00000000; - if (pcnet32_init_ring(dev)) - return -ENOMEM; + /* set/reset GPSI bit in test register */ + val = lp->a.read_csr (ioaddr, 124) & ~0x10; + if ((lp->options & PORT_PORTSEL) == PORT_GPSI) + val |= 0x10; + lp->a.write_csr (ioaddr, 124, val); - /* Re-initialize the PCNET32, and start it when done. */ - outw(0x0001, ioaddr+PCNET32_ADDR); - outw(virt_to_bus(&lp->init_block) &0xffff, ioaddr+PCNET32_DATA); - outw(0x0002, ioaddr+PCNET32_ADDR); - outw(virt_to_bus(&lp->init_block) >> 16, ioaddr+PCNET32_DATA); - - outw(0x0004, ioaddr+PCNET32_ADDR); - outw(0x0915, ioaddr+PCNET32_DATA); - - outw(0x0000, ioaddr+PCNET32_ADDR); - outw(0x0001, ioaddr+PCNET32_DATA); - - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - i = 0; - while (i++ < 100) - if (inw(ioaddr+PCNET32_DATA) & 0x0100) - break; - /* - * We used to clear the InitDone bit, 0x0100, here but Mark Stockton - * reports that doing so triggers a bug in the '974. - */ - outw(0x0042, ioaddr+PCNET32_DATA); + if (lp->mii & (lp->options & PORT_ASEL)) { + val = lp->a.read_bcr (ioaddr, 32) & ~0x38; /* disable Auto Negotiation, set 10Mpbs, HD */ + if (lp->options & PORT_FD) + val |= 0x10; + if (lp->options & PORT_100) + val |= 0x08; + lp->a.write_bcr (ioaddr, 32, val); + } + + lp->init_block.mode = le16_to_cpu((lp->options & PORT_PORTSEL) << 7); + lp->init_block.filter[0] = 0x00000000; + lp->init_block.filter[1] = 0x00000000; + if (pcnet32_init_ring(dev)) + return -ENOMEM; + + /* Re-initialize the PCNET32, and start it when done. */ + lp->a.write_csr (ioaddr, 1, virt_to_bus(&lp->init_block) &0xffff); + lp->a.write_csr (ioaddr, 2, virt_to_bus(&lp->init_block) >> 16); + + lp->a.write_csr (ioaddr, 4, 0x0915); + lp->a.write_csr (ioaddr, 0, 0x0001); + + dev->tbusy = 0; + dev->interrupt = 0; + dev->start = 1; + i = 0; + while (i++ < 100) + if (lp->a.read_csr (ioaddr, 0) & 0x0100) + break; + /* + * We used to clear the InitDone bit, 0x0100, here but Mark Stockton + * reports that doing so triggers a bug in the '974. + */ + lp->a.write_csr (ioaddr, 0, 0x0042); - if (pcnet32_debug > 2) - printk("%s: PCNET32 open after %d ticks, init block %#x csr0 %4.4x.\n", - dev->name, i, (u32) virt_to_bus(&lp->init_block), inw(ioaddr+PCNET32_DATA)); + if (pcnet32_debug > 2) + printk("%s: PCNET32 open after %d ticks, init block %#x csr0 %4.4x.\n", + dev->name, i, (u32) virt_to_bus(&lp->init_block), + lp->a.read_csr (ioaddr, 0)); - MOD_INC_USE_COUNT; + MOD_INC_USE_COUNT; - return 0; /* Always succeed */ + return 0; /* Always succeed */ } /* @@ -559,15 +806,15 @@ pcnet32_open(struct device *dev) static void pcnet32_purge_tx_ring(struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - int i; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + int i; - for (i = 0; i < TX_RING_SIZE; i++) { - if (lp->tx_skbuff[i]) { - dev_kfree_skb(lp->tx_skbuff[i]); - lp->tx_skbuff[i] = NULL; - } + for (i = 0; i < TX_RING_SIZE; i++) { + if (lp->tx_skbuff[i]) { + dev_kfree_skb(lp->tx_skbuff[i]); + lp->tx_skbuff[i] = NULL; } + } } @@ -575,449 +822,442 @@ pcnet32_purge_tx_ring(struct device *dev) static int pcnet32_init_ring(struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - int i; - - lp->tx_full = 0; - lp->cur_rx = lp->cur_tx = 0; - lp->dirty_rx = lp->dirty_tx = 0; - - for (i = 0; i < RX_RING_SIZE; i++) { - if (lp->rx_skbuff[i] == NULL) { - if (!(lp->rx_skbuff[i] = dev_alloc_skb (PKT_BUF_SZ))) { - /* there is not much, we can do at this point */ - printk ("%s: pcnet32_init_ring dev_alloc_skb failed.\n",dev->name); - return -1; - } - skb_reserve (lp->rx_skbuff[i], 2); + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + int i; + + lp->tx_full = 0; + lp->cur_rx = lp->cur_tx = 0; + lp->dirty_rx = lp->dirty_tx = 0; + + for (i = 0; i < RX_RING_SIZE; i++) { + if (lp->rx_skbuff[i] == NULL) { + if (!(lp->rx_skbuff[i] = dev_alloc_skb (PKT_BUF_SZ))) { + /* there is not much, we can do at this point */ + printk ("%s: pcnet32_init_ring dev_alloc_skb failed.\n",dev->name); + return -1; } - lp->rx_ring[i].base = (u32)le32_to_cpu(virt_to_bus(lp->rx_skbuff[i]->tail)); - lp->rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ); - lp->rx_ring[i].status = le16_to_cpu(0x8000); - } - /* The Tx buffer address is filled in as needed, but we do need to clear - the upper ownership bit. */ - for (i = 0; i < TX_RING_SIZE; i++) { - lp->tx_ring[i].base = 0; - lp->tx_ring[i].status = 0; + skb_reserve (lp->rx_skbuff[i], 2); } + lp->rx_ring[i].base = (u32)le32_to_cpu(virt_to_bus(lp->rx_skbuff[i]->tail)); + lp->rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ); + lp->rx_ring[i].status = le16_to_cpu(0x8000); + } + /* The Tx buffer address is filled in as needed, but we do need to clear + the upper ownership bit. */ + for (i = 0; i < TX_RING_SIZE; i++) { + lp->tx_ring[i].base = 0; + lp->tx_ring[i].status = 0; + } - lp->init_block.tlen_rlen = TX_RING_LEN_BITS | RX_RING_LEN_BITS; - for (i = 0; i < 6; i++) - lp->init_block.phys_addr[i] = dev->dev_addr[i]; - lp->init_block.rx_ring = (u32)le32_to_cpu(virt_to_bus(lp->rx_ring)); - lp->init_block.tx_ring = (u32)le32_to_cpu(virt_to_bus(lp->tx_ring)); - return 0; + lp->init_block.tlen_rlen = TX_RING_LEN_BITS | RX_RING_LEN_BITS; + for (i = 0; i < 6; i++) + lp->init_block.phys_addr[i] = dev->dev_addr[i]; + lp->init_block.rx_ring = (u32)le32_to_cpu(virt_to_bus(lp->rx_ring)); + lp->init_block.tx_ring = (u32)le32_to_cpu(virt_to_bus(lp->tx_ring)); + return 0; } static void pcnet32_restart(struct device *dev, unsigned int csr0_bits) { - int i; - unsigned int ioaddr = dev->base_addr; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + unsigned long ioaddr = dev->base_addr; + int i; - pcnet32_purge_tx_ring(dev); - if (pcnet32_init_ring(dev)) - return; + pcnet32_purge_tx_ring(dev); + if (pcnet32_init_ring(dev)) + return; - outw(0x0000, ioaddr + PCNET32_ADDR); - /* ReInit Ring */ - outw(0x0001, ioaddr + PCNET32_DATA); - i = 0; - while (i++ < 100) - if (inw(ioaddr+PCNET32_DATA) & 0x0100) - break; - - outw(csr0_bits, ioaddr + PCNET32_DATA); + /* ReInit Ring */ + lp->a.write_csr (ioaddr, 0, 1); + i = 0; + while (i++ < 100) + if (lp->a.read_csr (ioaddr, 0) & 0x0100) + break; + + lp->a.write_csr (ioaddr, 0, csr0_bits); } static int pcnet32_start_xmit(struct sk_buff *skb, struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - unsigned int ioaddr = dev->base_addr; - int entry; - unsigned long flags; - - /* Transmitter timeout, serious problems. */ - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < HZ/2) - return 1; - outw(0, ioaddr+PCNET32_ADDR); - printk("%s: transmit timed out, status %4.4x, resetting.\n", - dev->name, inw(ioaddr+PCNET32_DATA)); - outw(0x0004, ioaddr+PCNET32_DATA); - lp->stats.tx_errors++; - if (pcnet32_debug > 2) { - int i; - printk(" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.", - lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "", - lp->cur_rx); - for (i = 0 ; i < RX_RING_SIZE; i++) - printk("%s %08x %04x %08x %04x", i & 1 ? "" : "\n ", - lp->rx_ring[i].base, -lp->rx_ring[i].buf_length, - lp->rx_ring[i].msg_length, (unsigned)lp->rx_ring[i].status); - for (i = 0 ; i < TX_RING_SIZE; i++) - printk("%s %08x %04x %08x %04x", i & 1 ? "" : "\n ", - lp->tx_ring[i].base, -lp->tx_ring[i].length, - lp->tx_ring[i].misc, (unsigned)lp->tx_ring[i].status); - printk("\n"); - } - pcnet32_restart(dev, 0x0042); - - dev->tbusy = 0; - dev->trans_start = jiffies; - dev_kfree_skb(skb); - return 0; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + unsigned int ioaddr = dev->base_addr; + int entry; + unsigned long flags; + + /* Transmitter timeout, serious problems. */ + if (dev->tbusy) { + int tickssofar = jiffies - dev->trans_start; + if (tickssofar < HZ/2) + return 1; + printk("%s: transmit timed out, status %4.4x, resetting.\n", + dev->name, lp->a.read_csr (ioaddr, 0)); + lp->a.write_csr (ioaddr, 0, 0x0004); + lp->stats.tx_errors++; + if (pcnet32_debug > 2) { + int i; + printk(" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.", + lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "", + lp->cur_rx); + for (i = 0 ; i < RX_RING_SIZE; i++) + printk("%s %08x %04x %08x %04x", i & 1 ? "" : "\n ", + lp->rx_ring[i].base, -lp->rx_ring[i].buf_length, + lp->rx_ring[i].msg_length, (unsigned)lp->rx_ring[i].status); + for (i = 0 ; i < TX_RING_SIZE; i++) + printk("%s %08x %04x %08x %04x", i & 1 ? "" : "\n ", + lp->tx_ring[i].base, -lp->tx_ring[i].length, + lp->tx_ring[i].misc, (unsigned)lp->tx_ring[i].status); + printk("\n"); } + pcnet32_restart(dev, 0x0042); - if (pcnet32_debug > 3) { - outw(0x0000, ioaddr+PCNET32_ADDR); - printk("%s: pcnet32_start_xmit() called, csr0 %4.4x.\n", dev->name, - inw(ioaddr+PCNET32_DATA)); - } + dev->tbusy = 0; + dev->trans_start = jiffies; + dev_kfree_skb(skb); + return 0; + } - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk("%s: Transmitter access conflict.\n", dev->name); - return 1; - } + if (pcnet32_debug > 3) { + printk("%s: pcnet32_start_xmit() called, csr0 %4.4x.\n", + dev->name, lp->a.read_csr (ioaddr, 0)); + } - save_flags (flags); - cli (); + /* Block a timer-based transmit from overlapping. This could better be + done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ + if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { + printk("%s: Transmitter access conflict.\n", dev->name); + return 1; + } - /* Fill in a Tx ring entry */ + save_flags (flags); + cli (); - /* Mask to ring buffer boundary. */ - entry = lp->cur_tx & TX_RING_MOD_MASK; + /* Fill in a Tx ring entry */ - /* Caution: the write order is important here, set the base address - with the "ownership" bits last. */ + /* Mask to ring buffer boundary. */ + entry = lp->cur_tx & TX_RING_MOD_MASK; - lp->tx_ring[entry].length = le16_to_cpu(-skb->len); + /* Caution: the write order is important here, set the base address + with the "ownership" bits last. */ - lp->tx_ring[entry].misc = 0x00000000; + lp->tx_ring[entry].length = le16_to_cpu(-skb->len); - lp->tx_skbuff[entry] = skb; - lp->tx_ring[entry].base = (u32)le32_to_cpu(virt_to_bus(skb->data)); - lp->tx_ring[entry].status = le16_to_cpu(0x8300); + lp->tx_ring[entry].misc = 0x00000000; - dma_cache_wback_inv((void *)skb->data, - (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len); + lp->tx_skbuff[entry] = skb; + lp->tx_ring[entry].base = (u32)le32_to_cpu(virt_to_bus(skb->data)); + lp->tx_ring[entry].status = le16_to_cpu(0x8300); - lp->cur_tx++; - lp->stats.tx_bytes += skb->len; + dma_cache_wback_inv((void *)skb->data, + (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len); - /* Trigger an immediate send poll. */ - outw(0x0000, ioaddr+PCNET32_ADDR); - outw(0x0048, ioaddr+PCNET32_DATA); + lp->cur_tx++; + lp->stats.tx_bytes += skb->len; - dev->trans_start = jiffies; + /* Trigger an immediate send poll. */ + lp->a.write_csr (ioaddr, 0, 0x0048); - if (lp->tx_ring[(entry+1) & TX_RING_MOD_MASK].base == 0) - clear_bit (0, (void *)&dev->tbusy); - else - lp->tx_full = 1; - restore_flags(flags); - return 0; + dev->trans_start = jiffies; + + if (lp->tx_ring[(entry+1) & TX_RING_MOD_MASK].base == 0) + clear_bit (0, (void *)&dev->tbusy); + else + lp->tx_full = 1; + restore_flags(flags); + return 0; } /* The PCNET32 interrupt handler. */ static void pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs) { - struct device *dev = (struct device *)dev_id; - struct pcnet32_private *lp; - unsigned int csr0, ioaddr; - int boguscnt = max_interrupt_work; - int must_restart; - - if (dev == NULL) { - printk ("pcnet32_interrupt(): irq %d for unknown device.\n", irq); - return; - } + struct device *dev = (struct device *)dev_id; + struct pcnet32_private *lp; + unsigned long ioaddr; + u16 csr0; + int boguscnt = max_interrupt_work; + int must_restart; + + if (dev == NULL) { + printk ("pcnet32_interrupt(): irq %d for unknown device.\n", irq); + return; + } - ioaddr = dev->base_addr; - lp = (struct pcnet32_private *)dev->priv; - if (dev->interrupt) - printk("%s: Re-entering the interrupt handler.\n", dev->name); + ioaddr = dev->base_addr; + lp = (struct pcnet32_private *)dev->priv; + if (dev->interrupt) + printk("%s: Re-entering the interrupt handler.\n", dev->name); - dev->interrupt = 1; + dev->interrupt = 1; - outw(0x00, dev->base_addr + PCNET32_ADDR); - while ((csr0 = inw(dev->base_addr + PCNET32_DATA)) & 0x8600 && --boguscnt >= 0) { - /* Acknowledge all of the current interrupt sources ASAP. */ - outw(csr0 & ~0x004f, dev->base_addr + PCNET32_DATA); + while ((csr0 = lp->a.read_csr (ioaddr, 0)) & 0x8600 && --boguscnt >= 0) { + /* Acknowledge all of the current interrupt sources ASAP. */ + lp->a.write_csr (ioaddr, 0, csr0 & ~0x004f); - must_restart = 0; + must_restart = 0; - if (pcnet32_debug > 5) - printk("%s: interrupt csr0=%#2.2x new csr=%#2.2x.\n", - dev->name, csr0, inw(dev->base_addr + PCNET32_DATA)); + if (pcnet32_debug > 5) + printk("%s: interrupt csr0=%#2.2x new csr=%#2.2x.\n", + dev->name, csr0, lp->a.read_csr (ioaddr, 0)); - if (csr0 & 0x0400) /* Rx interrupt */ - pcnet32_rx(dev); + if (csr0 & 0x0400) /* Rx interrupt */ + pcnet32_rx(dev); - if (csr0 & 0x0200) { /* Tx-done interrupt */ - int dirty_tx = lp->dirty_tx; + if (csr0 & 0x0200) { /* Tx-done interrupt */ + int dirty_tx = lp->dirty_tx; - while (dirty_tx < lp->cur_tx) { - int entry = dirty_tx & TX_RING_MOD_MASK; - int status = (short)le16_to_cpu(lp->tx_ring[entry].status); + while (dirty_tx < lp->cur_tx) { + int entry = dirty_tx & TX_RING_MOD_MASK; + int status = (short)le16_to_cpu(lp->tx_ring[entry].status); - if (status < 0) - break; /* It still hasn't been Txed */ - - lp->tx_ring[entry].base = 0; - - if (status & 0x4000) { - /* There was an major error, log it. */ - int err_status = le32_to_cpu(lp->tx_ring[entry].misc); - lp->stats.tx_errors++; - if (err_status & 0x04000000) lp->stats.tx_aborted_errors++; - if (err_status & 0x08000000) lp->stats.tx_carrier_errors++; - if (err_status & 0x10000000) lp->stats.tx_window_errors++; - if (err_status & 0x40000000) { - /* Ackk! On FIFO errors the Tx unit is turned off! */ - lp->stats.tx_fifo_errors++; - /* Remove this verbosity later! */ - printk("%s: Tx FIFO error! Status %4.4x.\n", - dev->name, csr0); - must_restart = 1; + if (status < 0) + break; /* It still hasn't been Txed */ + + lp->tx_ring[entry].base = 0; + + if (status & 0x4000) { + /* There was an major error, log it. */ + int err_status = le32_to_cpu(lp->tx_ring[entry].misc); + lp->stats.tx_errors++; + if (err_status & 0x04000000) lp->stats.tx_aborted_errors++; + if (err_status & 0x08000000) lp->stats.tx_carrier_errors++; + if (err_status & 0x10000000) lp->stats.tx_window_errors++; + if (err_status & 0x40000000) { + /* Ackk! On FIFO errors the Tx unit is turned off! */ + lp->stats.tx_fifo_errors++; + /* Remove this verbosity later! */ + printk("%s: Tx FIFO error! Status %4.4x.\n", + dev->name, csr0); + must_restart = 1; } - } else { - if (status & 0x1800) - lp->stats.collisions++; - lp->stats.tx_packets++; - } - - /* We must free the original skb */ - if (lp->tx_skbuff[entry]) { - dev_kfree_skb(lp->tx_skbuff[entry]); - lp->tx_skbuff[entry] = 0; - } - dirty_tx++; - } + } else { + if (status & 0x1800) + lp->stats.collisions++; + lp->stats.tx_packets++; + } + + /* We must free the original skb */ + if (lp->tx_skbuff[entry]) { + dev_kfree_skb(lp->tx_skbuff[entry]); + lp->tx_skbuff[entry] = 0; + } + dirty_tx++; + } #ifndef final_version - if (lp->cur_tx - dirty_tx >= TX_RING_SIZE) { - printk("out-of-sync dirty pointer, %d vs. %d, full=%d.\n", - dirty_tx, lp->cur_tx, lp->tx_full); - dirty_tx += TX_RING_SIZE; - } + if (lp->cur_tx - dirty_tx >= TX_RING_SIZE) { + printk("out-of-sync dirty pointer, %d vs. %d, full=%d.\n", + dirty_tx, lp->cur_tx, lp->tx_full); + dirty_tx += TX_RING_SIZE; + } #endif + if (lp->tx_full && dev->tbusy + && dirty_tx > lp->cur_tx - TX_RING_SIZE + 2) { + /* The ring is no longer full, clear tbusy. */ + lp->tx_full = 0; + clear_bit(0, (void *)&dev->tbusy); + mark_bh(NET_BH); + } + lp->dirty_tx = dirty_tx; + } - if (lp->tx_full && dev->tbusy - && dirty_tx > lp->cur_tx - TX_RING_SIZE + 2) { - /* The ring is no longer full, clear tbusy. */ - lp->tx_full = 0; - clear_bit(0, (void *)&dev->tbusy); - mark_bh(NET_BH); - } - lp->dirty_tx = dirty_tx; - } - - /* Log misc errors. */ - if (csr0 & 0x4000) lp->stats.tx_errors++; /* Tx babble. */ - if (csr0 & 0x1000) { - /* - * this happens when our receive ring is full. This shouldn't - * be a problem as we will see normal rx interrupts for the frames - * in the receive ring. But there are some PCI chipsets (I can reproduce - * this on SP3G with Intel saturn chipset) which have sometimes problems - * and will fill up the receive ring with error descriptors. In this - * situation we don't get a rx interrupt, but a missed frame interrupt sooner - * or later. So we try to clean up our receive ring here. - */ - pcnet32_rx(dev); - lp->stats.rx_errors++; /* Missed a Rx frame. */ - } - if (csr0 & 0x0800) { - printk("%s: Bus master arbitration failure, status %4.4x.\n", - dev->name, csr0); - /* unlike for the lance, there is no restart needed */ - } + /* Log misc errors. */ + if (csr0 & 0x4000) lp->stats.tx_errors++; /* Tx babble. */ + if (csr0 & 0x1000) { + /* + * this happens when our receive ring is full. This shouldn't + * be a problem as we will see normal rx interrupts for the frames + * in the receive ring. But there are some PCI chipsets (I can reproduce + * this on SP3G with Intel saturn chipset) which have sometimes problems + * and will fill up the receive ring with error descriptors. In this + * situation we don't get a rx interrupt, but a missed frame interrupt sooner + * or later. So we try to clean up our receive ring here. + */ + pcnet32_rx(dev); + lp->stats.rx_errors++; /* Missed a Rx frame. */ + } + if (csr0 & 0x0800) { + printk("%s: Bus master arbitration failure, status %4.4x.\n", + dev->name, csr0); + /* unlike for the lance, there is no restart needed */ + } - if (must_restart) { - /* stop the chip to clear the error condition, then restart */ - outw(0x0000, dev->base_addr + PCNET32_ADDR); - outw(0x0004, dev->base_addr + PCNET32_DATA); - pcnet32_restart(dev, 0x0002); - } + if (must_restart) { + /* stop the chip to clear the error condition, then restart */ + lp->a.write_csr (ioaddr, 0, 0x0004); + pcnet32_restart(dev, 0x0002); } + } /* Clear any other interrupt, and set interrupt enable. */ - outw(0x0000, dev->base_addr + PCNET32_ADDR); - outw(0x7940, dev->base_addr + PCNET32_DATA); + lp->a.write_csr (ioaddr, 0, 0x7940); - if (pcnet32_debug > 4) - printk("%s: exiting interrupt, csr%d=%#4.4x.\n", - dev->name, inw(ioaddr + PCNET32_ADDR), - inw(dev->base_addr + PCNET32_DATA)); + if (pcnet32_debug > 4) + printk("%s: exiting interrupt, csr0=%#4.4x.\n", + dev->name, lp->a.read_csr (ioaddr, 0)); - dev->interrupt = 0; - return; + dev->interrupt = 0; + return; } static int pcnet32_rx(struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - int entry = lp->cur_rx & RX_RING_MOD_MASK; - int i; - - /* If we own the next entry, it's a new packet. Send it up. */ - while ((short)le16_to_cpu(lp->rx_ring[entry].status) >= 0) { - int status = (short)le16_to_cpu(lp->rx_ring[entry].status) >> 8; - - if (status != 0x03) { /* There was an error. */ - /* There is a tricky error noted by John Murphy, - to Russ Nelson: Even with full-sized - buffers it's possible for a jabber packet to use two - buffers, with only the last correctly noting the error. */ - if (status & 0x01) /* Only count a general error at the */ - lp->stats.rx_errors++; /* end of a packet.*/ - if (status & 0x20) lp->stats.rx_frame_errors++; - if (status & 0x10) lp->stats.rx_over_errors++; - if (status & 0x08) lp->stats.rx_crc_errors++; - if (status & 0x04) lp->stats.rx_fifo_errors++; - lp->rx_ring[entry].status &= le16_to_cpu(0x03ff); - } - else - { - /* Malloc up new buffer, compatible with net-2e. */ - short pkt_len = (le32_to_cpu(lp->rx_ring[entry].msg_length) & 0xfff)-4; - struct sk_buff *skb; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + int entry = lp->cur_rx & RX_RING_MOD_MASK; + int i; + + /* If we own the next entry, it's a new packet. Send it up. */ + while ((short)le16_to_cpu(lp->rx_ring[entry].status) >= 0) { + int status = (short)le16_to_cpu(lp->rx_ring[entry].status) >> 8; + + if (status != 0x03) { /* There was an error. */ + /* + * There is a tricky error noted by John Murphy, + * to Russ Nelson: Even with full-sized + * buffers it's possible for a jabber packet to use two + * buffers, with only the last correctly noting the error. + */ + if (status & 0x01) /* Only count a general error at the */ + lp->stats.rx_errors++; /* end of a packet.*/ + if (status & 0x20) lp->stats.rx_frame_errors++; + if (status & 0x10) lp->stats.rx_over_errors++; + if (status & 0x08) lp->stats.rx_crc_errors++; + if (status & 0x04) lp->stats.rx_fifo_errors++; + lp->rx_ring[entry].status &= le16_to_cpu(0x03ff); + } else { + /* Malloc up new buffer, compatible with net-2e. */ + short pkt_len = (le32_to_cpu(lp->rx_ring[entry].msg_length) & 0xfff)-4; + struct sk_buff *skb; - if(pkt_len < 60) { - printk("%s: Runt packet!\n",dev->name); - lp->stats.rx_errors++; - } else { - int rx_in_place = 0; + if(pkt_len < 60) { + printk("%s: Runt packet!\n",dev->name); + lp->stats.rx_errors++; + } else { + int rx_in_place = 0; - if (pkt_len > rx_copybreak) { - struct sk_buff *newskb; + if (pkt_len > rx_copybreak) { + struct sk_buff *newskb; - if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) { - skb_reserve (newskb, 2); - skb = lp->rx_skbuff[entry]; - skb_put (skb, pkt_len); - lp->rx_skbuff[entry] = newskb; - newskb->dev = dev; - lp->rx_ring[entry].base = le32_to_cpu(virt_to_bus(newskb->tail)); - rx_in_place = 1; - } else - skb = NULL; - } else - skb = dev_alloc_skb(pkt_len+2); + if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) { + skb_reserve (newskb, 2); + skb = lp->rx_skbuff[entry]; + skb_put (skb, pkt_len); + lp->rx_skbuff[entry] = newskb; + newskb->dev = dev; + lp->rx_ring[entry].base = le32_to_cpu(virt_to_bus(newskb->tail)); + rx_in_place = 1; + } else + skb = NULL; + } else + skb = dev_alloc_skb(pkt_len+2); - if (skb == NULL) { - printk("%s: Memory squeeze, deferring packet.\n", dev->name); - for (i=0; i < RX_RING_SIZE; i++) - if ((short)le16_to_cpu(lp->rx_ring[(entry+i) & RX_RING_MOD_MASK].status) < 0) - break; - - if (i > RX_RING_SIZE -2) { - lp->stats.rx_dropped++; - lp->rx_ring[entry].status |= le16_to_cpu(0x8000); - lp->cur_rx++; - } - break; - } - skb->dev = dev; - if (!rx_in_place) { - skb_reserve(skb,2); /* 16 byte align */ - skb_put(skb,pkt_len); /* Make room */ - eth_copy_and_sum(skb, - (unsigned char *)bus_to_virt(le32_to_cpu(lp->rx_ring[entry].base)), - pkt_len,0); - } - lp->stats.rx_bytes += skb->len; - skb->protocol=eth_type_trans(skb,dev); - netif_rx(skb); - dma_cache_inv(bus_to_virt(le32_to_cpu(lp->rx_ring[entry].base)), pkt_len); - lp->stats.rx_packets++; - } + if (skb == NULL) { + printk("%s: Memory squeeze, deferring packet.\n", dev->name); + for (i=0; i < RX_RING_SIZE; i++) + if ((short)le16_to_cpu(lp->rx_ring[(entry+i) & RX_RING_MOD_MASK].status) < 0) + break; + + if (i > RX_RING_SIZE -2) { + lp->stats.rx_dropped++; + lp->rx_ring[entry].status |= le16_to_cpu(0x8000); + lp->cur_rx++; + } + break; } - /* The docs say that the buffer length isn't touched, but Andrew Boyd - of QNX reports that some revs of the 79C965 clear it. */ - lp->rx_ring[entry].buf_length = le16_to_cpu(-PKT_BUF_SZ); - lp->rx_ring[entry].status |= le16_to_cpu(0x8000); - entry = (++lp->cur_rx) & RX_RING_MOD_MASK; + skb->dev = dev; + if (!rx_in_place) { + skb_reserve(skb,2); /* 16 byte align */ + skb_put(skb,pkt_len); /* Make room */ + eth_copy_and_sum(skb, + (unsigned char *)bus_to_virt(le32_to_cpu(lp->rx_ring[entry].base)), + pkt_len,0); + } + lp->stats.rx_bytes += skb->len; + skb->protocol=eth_type_trans(skb,dev); + netif_rx(skb); + dma_cache_inv(bus_to_virt(le32_to_cpu(lp->rx_ring[entry].base)), + pkt_len); + lp->stats.rx_packets++; + } } + /* + * The docs say that the buffer length isn't touched, but Andrew Boyd + * of QNX reports that some revs of the 79C965 clear it. + */ + lp->rx_ring[entry].buf_length = le16_to_cpu(-PKT_BUF_SZ); + lp->rx_ring[entry].status |= le16_to_cpu(0x8000); + entry = (++lp->cur_rx) & RX_RING_MOD_MASK; + } - /* We should check that at least two ring entries are free. If not, - we should free one and mark stats->rx_dropped++. */ - - return 0; + return 0; } static int pcnet32_close(struct device *dev) { - unsigned int ioaddr = dev->base_addr; - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - int i; + unsigned long ioaddr = dev->base_addr; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + int i; - dev->start = 0; - set_bit (0, (void *)&dev->tbusy); + dev->start = 0; + set_bit (0, (void *)&dev->tbusy); - outw(112, ioaddr+PCNET32_ADDR); - lp->stats.rx_missed_errors = inw(ioaddr+PCNET32_DATA); + lp->stats.rx_missed_errors = lp->a.read_csr (ioaddr, 112); - outw(0, ioaddr+PCNET32_ADDR); + if (pcnet32_debug > 1) + printk("%s: Shutting down ethercard, status was %2.2x.\n", + dev->name, lp->a.read_csr (ioaddr, 0)); - if (pcnet32_debug > 1) - printk("%s: Shutting down ethercard, status was %2.2x.\n", - dev->name, inw(ioaddr+PCNET32_DATA)); + /* We stop the PCNET32 here -- it occasionally polls memory if we don't. */ + lp->a.write_csr (ioaddr, 0, 0x0004); - /* We stop the PCNET32 here -- it occasionally polls - memory if we don't. */ - outw(0x0004, ioaddr+PCNET32_DATA); + /* + * Switch back to 16bit mode to avoid problems with dumb + * DOS packet driver after a warm reboot + */ + lp->a.write_bcr (ioaddr, 20, 4); - free_irq(dev->irq, dev); + free_irq(dev->irq, dev); - /* free all allocated skbuffs */ - for (i = 0; i < RX_RING_SIZE; i++) { - lp->rx_ring[i].status = 0; - if (lp->rx_skbuff[i]) - dev_kfree_skb(lp->rx_skbuff[i]); - lp->rx_skbuff[i] = NULL; - } + /* free all allocated skbuffs */ + for (i = 0; i < RX_RING_SIZE; i++) { + lp->rx_ring[i].status = 0; + if (lp->rx_skbuff[i]) + dev_kfree_skb(lp->rx_skbuff[i]); + lp->rx_skbuff[i] = NULL; + } - for (i = 0; i < TX_RING_SIZE; i++) { - if (lp->tx_skbuff[i]) - dev_kfree_skb(lp->tx_skbuff[i]); - lp->rx_skbuff[i] = NULL; - } + for (i = 0; i < TX_RING_SIZE; i++) { + if (lp->tx_skbuff[i]) + dev_kfree_skb(lp->tx_skbuff[i]); + lp->rx_skbuff[i] = NULL; + } - MOD_DEC_USE_COUNT; + MOD_DEC_USE_COUNT; - return 0; + return 0; } static struct net_device_stats * pcnet32_get_stats(struct device *dev) { - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - unsigned int ioaddr = dev->base_addr; - unsigned short saved_addr; - unsigned long flags; - - save_flags(flags); - cli(); - saved_addr = inw(ioaddr+PCNET32_ADDR); - outw(112, ioaddr+PCNET32_ADDR); - lp->stats.rx_missed_errors = inw(ioaddr+PCNET32_DATA); - outw(saved_addr, ioaddr+PCNET32_ADDR); - restore_flags(flags); - - return &lp->stats; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + unsigned long ioaddr = dev->base_addr; + u16 saved_addr; + unsigned long flags; + + save_flags(flags); + cli(); + saved_addr = lp->a.read_rap(ioaddr); + lp->stats.rx_missed_errors = lp->a.read_csr (ioaddr, 112); + lp->a.write_rap(ioaddr, saved_addr); + restore_flags(flags); + + return &lp->stats; } - /* taken from the sunlance driver, which it took from the depca driver */ static void pcnet32_load_multicast (struct device *dev) { @@ -1068,34 +1308,68 @@ static void pcnet32_load_multicast (struct device *dev) } -/* Set or clear the multicast filter for this adaptor. +/* + * Set or clear the multicast filter for this adaptor. */ - static void pcnet32_set_multicast_list(struct device *dev) { - unsigned int ioaddr = dev->base_addr; - struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; - - if (dev->flags&IFF_PROMISC) { - /* Log any net taps. */ - printk("%s: Promiscuous mode enabled.\n", dev->name); - lp->init_block.mode = le16_to_cpu(0x8000 | (lp->options & PORT_PORTSEL) << 7); - } else { - lp->init_block.mode = le16_to_cpu((lp->options & PORT_PORTSEL) << 7); - pcnet32_load_multicast (dev); - } + unsigned long ioaddr = dev->base_addr; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + + if (dev->flags&IFF_PROMISC) { + /* Log any net taps. */ + printk("%s: Promiscuous mode enabled.\n", dev->name); + lp->init_block.mode = le16_to_cpu(0x8000 | (lp->options & PORT_PORTSEL) << 7); + } else { + lp->init_block.mode = le16_to_cpu((lp->options & PORT_PORTSEL) << 7); + pcnet32_load_multicast (dev); + } - outw(0, ioaddr+PCNET32_ADDR); - outw(0x0004, ioaddr+PCNET32_DATA); /* Temporarily stop the lance. */ + lp->a.write_csr (ioaddr, 0, 0x0004); /* Temporarily stop the lance. */ - pcnet32_restart(dev, 0x0042); /* Resume normal operation */ + pcnet32_restart(dev, 0x0042); /* Resume normal operation */ } +#ifdef HAVE_PRIVATE_IOCTL +static int pcnet32_mii_ioctl(struct device *dev, struct ifreq *rq, int cmd) +{ + unsigned long ioaddr = dev->base_addr; + struct pcnet32_private *lp = (struct pcnet32_private *)dev->priv; + u16 *data = (u16 *)&rq->ifr_data; + int phyaddr = lp->a.read_bcr (ioaddr, 33); + + if (lp->mii) { + switch(cmd) { + case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */ + data[0] = (phyaddr >> 5) & 0x1f; + /* Fall Through */ + case SIOCDEVPRIVATE+1: /* Read the specified MII register. */ + lp->a.write_bcr (ioaddr, 33, ((data[0] & 0x1f) << 5) | (data[1] & 0x1f)); + data[3] = lp->a.read_bcr (ioaddr, 34); + lp->a.write_bcr (ioaddr, 33, phyaddr); + return 0; + case SIOCDEVPRIVATE+2: /* Write the specified MII register */ + if (!suser()) + return -EPERM; + lp->a.write_bcr (ioaddr, 33, ((data[0] & 0x1f) << 5) | (data[1] & 0x1f)); + lp->a.write_bcr (ioaddr, 34, data[2]); + lp->a.write_bcr (ioaddr, 33, phyaddr); + return 0; + default: + return -EOPNOTSUPP; + } + } + return -EOPNOTSUPP; +} +#endif /* HAVE_PRIVATE_IOCTL */ + #ifdef MODULE MODULE_PARM(debug, "i"); -MODULE_PARM(options, "i"); MODULE_PARM(max_interrupt_work, "i"); MODULE_PARM(rx_copybreak, "i"); +MODULE_PARM(options, "1-" __MODULE_STRING(MAX_UNITS) "i"); +MODULE_PARM(full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i"); + /* An additional parameter that may be passed in... */ static int debug = -1; @@ -1103,27 +1377,27 @@ static int debug = -1; int init_module(void) { - if (debug > 0) - pcnet32_debug = debug; + if (debug > 0) + pcnet32_debug = debug; - pcnet32_dev = NULL; - return pcnet32_probe(NULL); + pcnet32_dev = NULL; + return pcnet32_probe(NULL); } void cleanup_module(void) { - struct device *next_dev; - - /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ - while (pcnet32_dev) { - next_dev = ((struct pcnet32_private *) pcnet32_dev->priv)->next; - unregister_netdev(pcnet32_dev); - release_region(pcnet32_dev->base_addr, PCNET32_TOTAL_SIZE); - kfree(pcnet32_dev->priv); - kfree(pcnet32_dev); - pcnet32_dev = next_dev; - } + struct device *next_dev; + + /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ + while (pcnet32_dev) { + next_dev = ((struct pcnet32_private *) pcnet32_dev->priv)->next; + unregister_netdev(pcnet32_dev); + release_region(pcnet32_dev->base_addr, PCNET32_TOTAL_SIZE); + kfree(((struct pcnet32_private *)pcnet32_dev->priv)->origmem); + kfree(pcnet32_dev); + pcnet32_dev = next_dev; + } } #endif /* MODULE */ diff --git a/drivers/net/plip.c b/drivers/net/plip.c index c41da1866..4bf73f81e 100644 --- a/drivers/net/plip.c +++ b/drivers/net/plip.c @@ -1217,7 +1217,7 @@ static int inline plip_searchfor(int list[], int a) { int i; - for (i = 0; i < 3 && list[i] != -1; i++) { + for (i = 0; i < PLIP_MAX && list[i] != -1; i++) { if (list[i] == a) return 1; } return 0; @@ -1240,7 +1240,7 @@ plip_init(void)) /* If the user feeds parameters, use them */ while (pb) { if ((parport[0] == -1 && (!timid || !pb->devices)) || - plip_searchfor(parport, i)) { + plip_searchfor(parport, pb->number)) { if (i == PLIP_MAX) { printk(KERN_ERR "plip: too many devices\n"); break; diff --git a/drivers/net/ppp.c b/drivers/net/ppp.c index b2c07b3fa..069195628 100644 --- a/drivers/net/ppp.c +++ b/drivers/net/ppp.c @@ -4,7 +4,7 @@ * Al Longyear * Extensively rewritten by Paul Mackerras * - * ==FILEVERSION 990114== + * ==FILEVERSION 990510== * * NOTE TO MAINTAINERS: * If you modify this file at all, please set the number above to the @@ -45,9 +45,8 @@ #define PPP_MAX_RCV_QLEN 32 /* max # frames we queue up for pppd */ -/* $Id: ppp.c,v 1.19 1998/07/07 04:27:37 paulus Exp $ */ +/* $Id: ppp.c,v 1.24 1999/03/31 06:07:57 paulus Exp $ */ -#include #include #include #include @@ -102,9 +101,12 @@ static void ppp_unregister_compressor (struct compressor *cp); static void ppp_async_init(struct ppp *ppp); static void ppp_async_release(struct ppp *ppp); +static int ppp_tty_sync_push(struct ppp *ppp); static int ppp_tty_push(struct ppp *ppp); static int ppp_async_encode(struct ppp *ppp); static int ppp_async_send(struct ppp *, struct sk_buff *); +static int ppp_sync_send(struct ppp *, struct sk_buff *); +static void ppp_tty_flush_output(struct ppp *); static int ppp_ioctl(struct ppp *, unsigned int, unsigned long); static int ppp_set_compression (struct ppp *ppp, struct ppp_option_data *odp); @@ -442,6 +444,7 @@ ppp_tty_close (struct tty_struct *tty) ppp->tty = ppp->backup_tty; if (ppp_tty_push(ppp)) ppp_output_wakeup(ppp); + wake_up_interruptible(&ppp->read_wait); } else { ppp->tty = 0; ppp->sc_xfer = 0; @@ -720,6 +723,21 @@ ppp_tty_ioctl (struct tty_struct *tty, struct file * file, error = n_tty_ioctl (tty, file, param2, param3); break; + case TCFLSH: + /* + * Flush our buffers, then call the generic code to + * flush the serial port's buffer. + */ + if (param3 == TCIFLUSH || param3 == TCIOFLUSH) { + struct sk_buff *skb; + while ((skb = skb_dequeue(&ppp->rcv_q)) != NULL) + kfree_skb(skb); + } + if (param3 == TCIOFLUSH || param3 == TCOFLUSH) + ppp_tty_flush_output(ppp); + error = n_tty_ioctl (tty, file, param2, param3); + break; + case FIONREAD: /* * Returns how many bytes are available for a read(). @@ -799,6 +817,135 @@ ppp_tty_wakeup (struct tty_struct *tty) ppp_output_wakeup(ppp); } +/* + * Send a packet to the peer over a synchronous tty line. + * All encoding and FCS are handled by hardware. + * Addr/Ctrl and Protocol field compression implemented. + * Returns -1 iff the packet could not be accepted at present, + * 0 if the packet was accepted but we can't accept another yet, or + * 1 if we can accept another packet immediately. + * If this procedure returns 0, ppp_output_wakeup will be called + * exactly once. + */ +static int +ppp_sync_send(struct ppp *ppp, struct sk_buff *skb) +{ + unsigned char *data; + int islcp; + + CHECK_PPP(0); + + if (ppp->tpkt != NULL) + return -1; + ppp->tpkt = skb; + + data = ppp->tpkt->data; + + /* + * LCP packets with code values between 1 (configure-reqest) + * and 7 (code-reject) must be sent as though no options + * had been negotiated. + */ + islcp = PPP_PROTOCOL(data) == PPP_LCP + && 1 <= data[PPP_HDRLEN] && data[PPP_HDRLEN] <= 7; + + /* only reset idle time for data packets */ + if (PPP_PROTOCOL(data) < 0x8000) + ppp->last_xmit = jiffies; + ++ppp->stats.ppp_opackets; + ppp->stats.ppp_ooctects += ppp->tpkt->len; + + if ( !(data[2]) && (ppp->flags & SC_COMP_PROT) ) { + /* compress protocol field */ + data[2] = data[1]; + data[1] = data[0]; + skb_pull(ppp->tpkt,1); + data = ppp->tpkt->data; + } + + /* + * Do address/control compression + */ + if ((ppp->flags & SC_COMP_AC) && !islcp + && PPP_ADDRESS(data) == PPP_ALLSTATIONS + && PPP_CONTROL(data) == PPP_UI) { + /* strip addr and control field */ + skb_pull(ppp->tpkt,2); + } + + return ppp_tty_sync_push(ppp); +} + +/* + * Push a synchronous frame out to the tty. + * Returns 1 if frame accepted (or discarded), 0 otherwise. + */ +static int +ppp_tty_sync_push(struct ppp *ppp) +{ + int sent; + struct tty_struct *tty = ppp2tty(ppp); + unsigned long flags; + + CHECK_PPP(0); + + if (ppp->tpkt == NULL) + return 0; + + /* prevent reentrancy with tty_pushing flag */ + save_flags(flags); + cli(); + if (ppp->tty_pushing) { + /* record wakeup attempt so we don't lose */ + /* a wakeup call while doing push processing */ + ppp->woke_up=1; + restore_flags(flags); + return 0; + } + ppp->tty_pushing = 1; + restore_flags(flags); + + if (tty == NULL || tty->disc_data != (void *) ppp) + goto flush; + + for(;;){ + ppp->woke_up=0; + + /* Note: Sync driver accepts complete frame or nothing */ + tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); + sent = tty->driver.write(tty, 0, ppp->tpkt->data, ppp->tpkt->len); + if (sent < 0) { + /* write error (possible loss of CD) */ + /* record error and discard current packet */ + ppp->stats.ppp_oerrors++; + break; + } + ppp->stats.ppp_obytes += sent; + if (sent < ppp->tpkt->len) { + /* driver unable to accept frame just yet */ + save_flags(flags); + cli(); + if (ppp->woke_up) { + /* wake up called while processing */ + /* try to send the frame again */ + restore_flags(flags); + continue; + } + /* wait for wakeup callback to try send again */ + ppp->tty_pushing = 0; + restore_flags(flags); + return 0; + } + break; + } +flush: + /* done with current packet (sent or discarded) */ + kfree_skb(ppp->tpkt); + ppp->tpkt = 0; + ppp->tty_pushing = 0; + return 1; +} + /* * Send a packet to the peer over an async tty line. * Returns -1 iff the packet could not be accepted at present, @@ -831,14 +978,21 @@ ppp_tty_push(struct ppp *ppp) { int avail, sent, done = 0; struct tty_struct *tty = ppp2tty(ppp); + + if (ppp->flags & SC_SYNC) + return ppp_tty_sync_push(ppp); CHECK_PPP(0); - if (ppp->tty_pushing) + if (ppp->tty_pushing) { + ppp->woke_up = 1; return 0; + } if (tty == NULL || tty->disc_data != (void *) ppp) goto flush; while (ppp->optr < ppp->olim || ppp->tpkt != 0) { ppp->tty_pushing = 1; + mb(); + ppp->woke_up = 0; avail = ppp->olim - ppp->optr; if (avail > 0) { tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); @@ -848,18 +1002,24 @@ ppp_tty_push(struct ppp *ppp) ppp->stats.ppp_obytes += sent; ppp->optr += sent; if (sent < avail) { + wmb(); ppp->tty_pushing = 0; + mb(); + if (ppp->woke_up) + continue; return done; } } if (ppp->tpkt != 0) done = ppp_async_encode(ppp); + wmb(); ppp->tty_pushing = 0; } return done; flush: ppp->tty_pushing = 1; + mb(); ppp->stats.ppp_oerrors++; if (ppp->tpkt != 0) { kfree_skb(ppp->tpkt); @@ -867,6 +1027,7 @@ flush: done = 1; } ppp->optr = ppp->olim; + wmb(); ppp->tty_pushing = 0; return done; } @@ -980,6 +1141,32 @@ ppp_async_encode(struct ppp *ppp) return 0; } +/* + * Flush output from our internal buffers. + * Called for the TCFLSH ioctl. + */ +static void +ppp_tty_flush_output(struct ppp *ppp) +{ + struct sk_buff *skb; + int done = 0; + + while ((skb = skb_dequeue(&ppp->xmt_q)) != NULL) + kfree_skb(skb); + ppp->tty_pushing = 1; + mb(); + ppp->optr = ppp->olim; + if (ppp->tpkt != NULL) { + kfree_skb(ppp->tpkt); + ppp->tpkt = 0; + done = 1; + } + wmb(); + ppp->tty_pushing = 0; + if (done) + ppp_output_wakeup(ppp); +} + /* * Callback function from tty driver. Return the amount of space left * in the receiver's buffer to decide if remote transmitter is to be @@ -1029,6 +1216,73 @@ ppp_tty_receive (struct tty_struct *tty, const __u8 * data, ppp->stats.ppp_ibytes += count; skb = ppp->rpkt; + + if ( ppp->flags & SC_SYNC ) { + /* synchronous mode */ + + if (ppp->toss==0xE0) { + /* this is the 1st frame, reset vj comp */ + ppp_receive_error(ppp); + ppp->toss = 0; + } + + /* + * Allocate an skbuff for frame. + * The 128 is room for VJ header expansion. + */ + + if (skb == NULL) + skb = dev_alloc_skb(ppp->mru + 128 + PPP_HDRLEN); + + if (skb == NULL) { + if (ppp->flags & SC_DEBUG) + printk(KERN_DEBUG "couldn't " + "alloc skb for recv\n"); + } else { + /* + * Decompress A/C and protocol compression here. + */ + p = skb_put(skb, 2); + p[0] = PPP_ALLSTATIONS; + p[1] = PPP_UI; + if (*data == PPP_ALLSTATIONS) { + data += 2; + count -= 2; + } + if ((*data & 1) != 0) { + p = skb_put(skb, 1); + p[0] = 0; + } + + /* copy frame to socket buffer */ + p = skb_put(skb, count); + memcpy(p,data,count); + + /* + * Check if we've overflowed the MRU + */ + if (skb->len >= ppp->mru + PPP_HDRLEN + 2 + || skb_tailroom(skb) <= 0) { + ++ppp->estats.rx_length_errors; + if (ppp->flags & SC_DEBUG) + printk(KERN_DEBUG "rcv frame too long: " + "len=%d mru=%d hroom=%d troom=%d\n", + skb->len, ppp->mru, skb_headroom(skb), + skb_tailroom(skb)); + } else { + if (!ppp_receive_frame(ppp, skb)) { + kfree_skb(skb); + ppp_receive_error(ppp); + } + } + + /* Reset for the next frame */ + skb = NULL; + } + ppp->rpkt = skb; + return; + } + while (count-- > 0) { /* * Collect the character and error condition for the character. @@ -1292,9 +1546,6 @@ ppp_dev_close (struct device *dev) CHECK_PPP_MAGIC(ppp); - /* ppp_dev_close may be called with tbusy==1 so we must set it to 0 */ - dev->tbusy=0; - MOD_DEC_USE_COUNT; return 0; @@ -1851,23 +2102,25 @@ ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb) return 0; } - /* - * Verify the FCS of the frame and discard the FCS characters - * from the end of the buffer. - */ - if (ppp->rfcs != PPP_GOODFCS) { - if (ppp->flags & SC_DEBUG) { - printk(KERN_DEBUG - "ppp: frame with bad fcs, length = %d\n", - count); - ppp_print_buffer("bad frame", data, count); + if ( !(ppp->flags & SC_SYNC) ) { + /* + * Verify the FCS of the frame and discard the FCS characters + * from the end of the buffer. + */ + if (ppp->rfcs != PPP_GOODFCS) { + if (ppp->flags & SC_DEBUG) { + printk(KERN_DEBUG + "ppp: frame with bad fcs, length = %d\n", + count); + ppp_print_buffer("bad frame", data, count); + } + ++ppp->estats.rx_crc_errors; + return 0; } - ++ppp->estats.rx_crc_errors; - return 0; + count -= 2; /* ignore the fcs characters */ + skb_trim(skb, count); } - count -= 2; /* ignore the fcs characters */ - skb_trim(skb, count); - + /* * Process the active decompressor. */ @@ -2056,13 +2309,17 @@ rcv_proto_vjc_comp(struct ppp *ppp, struct sk_buff *skb) return 0; new_count = slhc_uncompress(ppp->slcomp, skb->data + PPP_HDRLEN, skb->len - PPP_HDRLEN); - if (new_count<=0) { + if (new_count <= 0) { if (ppp->flags & SC_DEBUG) printk(KERN_NOTICE "ppp: error in VJ decompression\n"); return 0; } - skb_put(skb, new_count + PPP_HDRLEN - skb->len); + new_count += PPP_HDRLEN; + if (new_count > skb->len) + skb_put(skb, new_count - skb->len); + else + skb_trim(skb, new_count); return rcv_proto_ip(ppp, skb); } @@ -2231,7 +2488,10 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) /* * Send the frame */ - ret = ppp_async_send(ppp, skb); + if ( ppp->flags & SC_SYNC ) + ret = ppp_sync_send(ppp, skb); + else + ret = ppp_async_send(ppp, skb); if (ret > 0) { /* we can release the lock */ ppp->xmit_busy = 0; diff --git a/drivers/net/ppp_deflate.c b/drivers/net/ppp_deflate.c index 4862b9398..3ef379ab2 100644 --- a/drivers/net/ppp_deflate.c +++ b/drivers/net/ppp_deflate.c @@ -43,7 +43,6 @@ #include #include #include -#include /* to get the struct task_struct */ #include /* used in new tty drivers */ #include /* used in new tty drivers */ diff --git a/drivers/net/rclanmtl.c b/drivers/net/rclanmtl.c index 971fb49b6..504cd865e 100644 --- a/drivers/net/rclanmtl.c +++ b/drivers/net/rclanmtl.c @@ -2,7 +2,7 @@ ** ************************************************************************* ** ** -** R C L A N M T L . C $Revision: 5 $ +** R C L A N M T L . C $Revision: 6 $ ** ** ** RedCreek I2O LAN Message Transport Layer program module. @@ -29,6 +29,10 @@ ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +** +** 1998-1999, LAN API was modified and enhanced by Alice Hennessy. +** +** Sometime in 1997, LAN API was written from scratch by Wendell Nichols. ** ************************************************************************* */ @@ -200,7 +204,7 @@ extern int printk(const char * fmt, ...); /* Special TID Assignments */ #define I2O_IOP_TID 0 -#define I2O_HOST_TID 1 +#define I2O_HOST_TID 0xB91 /* RedCreek I2O private message codes */ #define RC_PRIVATE_GET_MAC_ADDR 0x0001/**/ /* OBSOLETE */ diff --git a/drivers/net/rclanmtl.h b/drivers/net/rclanmtl.h index 2521b1cee..2e594440c 100644 --- a/drivers/net/rclanmtl.h +++ b/drivers/net/rclanmtl.h @@ -2,7 +2,7 @@ ** ************************************************************************* ** ** -** R C L A N M T L . H $Revision: 5 $ +** R C L A N M T L . H $Revision: 6 $ ** ** ** RedCreek I2O LAN Message Transport Layer header file. diff --git a/drivers/net/rcpci45.c b/drivers/net/rcpci45.c index 2c5a070ee..0aa979bc1 100644 --- a/drivers/net/rcpci45.c +++ b/drivers/net/rcpci45.c @@ -1,4 +1,5 @@ /* +** ** RCpci45.c ** ** @@ -36,16 +37,18 @@ ** ** ** Pete Popov, January 11,99: Fixed a couple of 2.1.x problems -** (virt_to_bus() not called), tested it under 2.2pre5, and added a -** #define to enable the use of the same file for both, the 2.0.x kernels -** as well as the 2.1.x. +** (virt_to_bus() not called), tested it under 2.2pre5 (as a module), and +** added a #define(s) to enable the use of the same file for both, the 2.0.x +** kernels as well as the 2.1.x. ** ** Ported to 2.1.x by Alan Cox 1998/12/9. ** +** Sometime in mid 1998, written by Pete Popov and Brian Moyle. +** ***************************************************************************/ static char *version = -"RedCreek Communications PCI linux driver version 2.00\n"; +"RedCreek Communications PCI linux driver version 2.02\n"; #include @@ -155,11 +158,10 @@ static PDPA PCIAdapters[MAX_ADAPTERS] = }; -static int RCscan(void); -static struct device -*RCfound_device(struct device *, int, int, int, int, int, int); +static int RCinit(struct device *dev); +static int RCscan(struct device *dev); +static int RCfound_device(struct device *, int, int, int, int, int, int); -static int RCprobe1(struct device *); static int RCopen(struct device *); static int RC_xmit_packet(struct sk_buff *, struct device *); static void RCinterrupt(int, void *, struct pt_regs *); @@ -180,134 +182,143 @@ static struct device *root_RCdev = NULL; #ifdef MODULE int init_module(void) #else -int rcpci_probe(struct netdevice *dev) +int rcpci_probe(struct device *dev) #endif { int cards_found; - printk(version); - - root_RCdev = NULL; - cards_found = RCscan(); #ifdef MODULE - return cards_found ? 0 : -ENODEV; + cards_found = RCscan(NULL); #else - return -1; + cards_found = RCscan(dev); #endif + if (cards_found) + printk(version); + return cards_found ? 0 : -ENODEV; } -static int RCscan() +static int RCscan(struct device *dev) { int cards_found = 0; - struct device *dev = 0; + static int pci_index = 0; + + if (!pcibios_present()) + return cards_found; - if (pcibios_present()) + for (;pci_index < 0x8; pci_index++) { - static int pci_index = 0; unsigned char pci_bus, pci_device_fn; int scan_status; int board_index = 0; - - for (;pci_index < 0xff; pci_index++) - { - unsigned char pci_irq_line; - unsigned short pci_command, vendor, device, class; - unsigned int pci_ioaddr; + unsigned char pci_irq_line; + unsigned short pci_command, vendor, device, class; + unsigned int pci_ioaddr; - scan_status = - (pcibios_find_device (RC_PCI45_VENDOR_ID, - RC_PCI45_DEVICE_ID, - pci_index, - &pci_bus, - &pci_device_fn)); + scan_status = + (pcibios_find_device (RC_PCI45_VENDOR_ID, + RC_PCI45_DEVICE_ID, + pci_index, + &pci_bus, + &pci_device_fn)); #ifdef RCDEBUG - printk("rc scan_status = 0x%X\n", scan_status); + printk("rc scan_status = 0x%X\n", scan_status); #endif - if (scan_status != PCIBIOS_SUCCESSFUL) - break; - pcibios_read_config_word(pci_bus, - pci_device_fn, - PCI_VENDOR_ID, &vendor); - pcibios_read_config_word(pci_bus, - pci_device_fn, - PCI_DEVICE_ID, &device); - pcibios_read_config_byte(pci_bus, - pci_device_fn, - PCI_INTERRUPT_LINE, &pci_irq_line); - pcibios_read_config_dword(pci_bus, - pci_device_fn, - PCI_BASE_ADDRESS_0, &pci_ioaddr); - pcibios_read_config_word(pci_bus, - pci_device_fn, - PCI_CLASS_DEVICE, &class); - - pci_ioaddr &= ~0xf; + if (scan_status != PCIBIOS_SUCCESSFUL) + break; + pcibios_read_config_word(pci_bus, + pci_device_fn, + PCI_VENDOR_ID, &vendor); + pcibios_read_config_word(pci_bus, + pci_device_fn, + PCI_DEVICE_ID, &device); + pcibios_read_config_byte(pci_bus, + pci_device_fn, + PCI_INTERRUPT_LINE, &pci_irq_line); + pcibios_read_config_dword(pci_bus, + pci_device_fn, + PCI_BASE_ADDRESS_0, &pci_ioaddr); + pcibios_read_config_word(pci_bus, + pci_device_fn, + PCI_CLASS_DEVICE, &class); + + pci_ioaddr &= ~0xf; #ifdef RCDEBUG - printk("rc: Found RedCreek PCI adapter\n"); - printk("rc: pci class = 0x%x 0x%x \n", class, class>>8); - printk("rc: pci_bus = %d, pci_device_fn = %d\n", pci_bus, pci_device_fn); - printk("rc: pci_irq_line = 0x%x \n", pci_irq_line); - printk("rc: pci_ioaddr = 0x%x\n", pci_ioaddr); + printk("rc: Found RedCreek PCI adapter\n"); + printk("rc: pci class = 0x%x 0x%x \n", class, class>>8); + printk("rc: pci_bus = %d, pci_device_fn = %d\n", pci_bus, pci_device_fn); + printk("rc: pci_irq_line = 0x%x \n", pci_irq_line); + printk("rc: pci_ioaddr = 0x%x\n", pci_ioaddr); #endif -#if 1 - if (check_region(pci_ioaddr, 2*32768)) - { - printk("rc: check_region failed\n"); - continue; - } - else - { - printk("rc: check_region passed\n"); - } + if (check_region(pci_ioaddr, 2*32768)) + { + printk("rc: check_region failed\n"); + continue; + } +#ifdef RCDEBUG + else + { + printk("rc: check_region passed\n"); + } #endif - + + /* + * Get and check the bus-master and latency values. + * Some PCI BIOSes fail to set the master-enable bit. + */ + + pcibios_read_config_word(pci_bus, + pci_device_fn, + PCI_COMMAND, + &pci_command); + if ( ! (pci_command & PCI_COMMAND_MASTER)) { + printk("rc: PCI Master Bit has not been set!\n"); + + pci_command |= PCI_COMMAND_MASTER; + pcibios_write_config_word(pci_bus, + pci_device_fn, + PCI_COMMAND, + pci_command); + } + if ( ! (pci_command & PCI_COMMAND_MEMORY)) { /* - * Get and check the bus-master and latency values. - * Some PCI BIOSes fail to set the master-enable bit. + * If the BIOS did not set the memory enable bit, what else + * did it not initialize? Skip this adapter. */ - - pcibios_read_config_word(pci_bus, - pci_device_fn, - PCI_COMMAND, - &pci_command); - if ( ! (pci_command & PCI_COMMAND_MASTER)) { - printk("rc: PCI Master Bit has not been set!\n"); - - pci_command |= PCI_COMMAND_MASTER; - pcibios_write_config_word(pci_bus, - pci_device_fn, - PCI_COMMAND, - pci_command); - } - if ( ! (pci_command & PCI_COMMAND_MEMORY)) { - /* - * If the BIOS did not set the memory enable bit, what else - * did it not initialize? Skip this adapter. - */ - printk("rc: Adapter %d, PCI Memory Bit has not been set!\n", - cards_found); - printk("rc: Bios problem? \n"); - continue; - } - - dev = RCfound_device(dev, pci_ioaddr, pci_irq_line, - pci_bus, pci_device_fn, - board_index++, cards_found); - - if (dev) { - dev = 0; - cards_found++; - } + printk("rc: Adapter %d, PCI Memory Bit has not been set!\n", + cards_found); + printk("rc: Bios problem? \n"); + continue; + } + + if (!RCfound_device(dev, pci_ioaddr, pci_irq_line, + pci_bus, pci_device_fn, + board_index++, cards_found)) + { + dev = 0; + cards_found++; } } +#ifdef RCDEBUG printk("rc: found %d cards \n", cards_found); +#endif return cards_found; } -static struct device * +static int RCinit(struct device *dev) +{ + dev->open = &RCopen; + dev->hard_start_xmit = &RC_xmit_packet; + dev->stop = &RCclose; + dev->get_stats = &RCget_stats; + dev->do_ioctl = &RCioctl; + dev->set_config = &RCconfig; + return 0; +} + +static int RCfound_device(struct device *dev, int memaddr, int irq, int bus, int function, int product_index, int card_idx) { @@ -324,18 +335,37 @@ RCfound_device(struct device *dev, int memaddr, int irq, * assigned to DPA; and finally, the rest will be assigned to the * the LAN API layer. */ + +#ifdef MODULE dev = (struct device *) kmalloc(dev_size, GFP_DMA | GFP_KERNEL |GFP_ATOMIC); + if (!dev) + { + printk("rc: unable to kmalloc dev\n"); + return 1; + } memset(dev, 0, dev_size); -#ifdef RCDEBUG - printk("rc: dev = 0x%08X\n", (uint)dev); -#endif - /* * dev->priv will point to the start of DPA. */ dev->priv = (void *)(((long)dev + sizeof(struct device) + 15) & ~15); +#else + dev->priv = 0; + dev->priv = (struct device *) kmalloc(dev_size, GFP_DMA | GFP_KERNEL |GFP_ATOMIC); + if (!dev->priv) + { + printk("rc: unable to kmalloc private area\n"); + return 1; + } + memset(dev->priv, 0, dev_size); +#endif + +#ifdef RCDEBUG + printk("rc: dev = 0x%x, dev->priv = 0x%x\n", (uint)dev, (uint)dev->priv); +#endif + pDpa = dev->priv; - dev->name = pDpa->devname; + if (!dev->name) + dev->name = pDpa->devname; pDpa->dev = dev; /* this is just for easy reference */ pDpa->function = function; @@ -378,24 +408,21 @@ RCfound_device(struct device *dev, int memaddr, int irq, printk( "RC PCI 45: %s: unable to get IRQ %d\n", (PU8)dev->name, (uint)dev->irq ); iounmap(vaddr); kfree(dev); - return 0; + return 1; } init_status = RCInitI2OMsgLayer(pDpa->id, dev->base_addr, - pDpa->PLanApiPA, (PU8)virt_to_bus((void *)pDpa->PLanApiPA), - (PFNTXCALLBACK)RCxmit_callback, - (PFNRXCALLBACK)RCrecv_callback, - (PFNCALLBACK)RCreboot_callback); -#ifdef RCDEBUG - printk("rc: I2O msg initted: status = 0x%x\n", init_status); -#endif + pDpa->PLanApiPA, (PU8)virt_to_bus((void *)pDpa->PLanApiPA), + (PFNTXCALLBACK)RCxmit_callback, + (PFNRXCALLBACK)RCrecv_callback, + (PFNCALLBACK)RCreboot_callback); if (init_status) { printk("rc: Unable to initialize msg layer\n"); free_irq(dev->irq, dev); iounmap(vaddr); kfree(dev); - return 0; + return 1; } if (RCGetMAC(pDpa->id, dev->dev_addr, NULL)) { @@ -403,38 +430,34 @@ RCfound_device(struct device *dev, int memaddr, int irq, free_irq(dev->irq, dev); iounmap(vaddr); kfree(dev); - return 0; + return 1; } DriverControlWord |= WARM_REBOOT_CAPABLE; RCReportDriverCapability(pDpa->id, DriverControlWord); - dev->init = RCprobe1; + dev->init = &RCinit; ether_setup(dev); /* linux kernel interface */ pDpa->next = root_RCdev; root_RCdev = dev; +#ifdef MODULE if (register_netdev(dev) != 0) /* linux kernel interface */ { printk("rc: unable to register device \n"); free_irq(dev->irq, dev); iounmap(vaddr); kfree(dev); - return 0; + return 1; } - return dev; -} +#else + RCinit(dev); +#endif + printk("%s: RedCreek Communications IPSEC VPN adapter\n", + dev->name); -static int RCprobe1(struct device *dev) -{ - dev->open = RCopen; - dev->hard_start_xmit = RC_xmit_packet; - dev->stop = RCclose; - dev->get_stats = RCget_stats; - dev->do_ioctl = RCioctl; - dev->set_config = RCconfig; - return 0; + return 0; /* success */ } static int @@ -516,6 +539,7 @@ RC_xmit_packet(struct sk_buff *skb, struct device *dev) #ifdef RCDEBUG printk("rc: RC_xmit_packet: tbusy!\n"); #endif + dev->tbusy = 1; return 1; } @@ -658,7 +682,7 @@ RCreset_callback(U32 Status, U32 p1, U32 p2, U16 AdapterID) RCShutdownLANCard(pDpa->id,0,0,0); printk("rc: scheduling timer...\n"); init_timer(&pDpa->timer); - pDpa->timer.expires = RUN_AT((30*HZ)/10); /* 3 sec. */ + pDpa->timer.expires = RUN_AT((40*HZ)/10); /* 4 sec. */ pDpa->timer.data = (unsigned long)dev; pDpa->timer.function = &rc_timer; /* timer handler */ add_timer(&pDpa->timer); @@ -757,9 +781,11 @@ RCrecv_callback(U32 Status, if (!pDpa->shutdown && !pDpa->reboot) printk("rc: RCrecv error: status = 0x%x\n", (uint)Status); +#ifdef RCDEBUG else printk("rc: Returning %d buffers, status = 0x%x\n", PktCount, (uint)Status); +#endif /* * TO DO: check the nature of the failure and put the adapter in * failed mode if it's a hard failure. Send a reset to the adapter @@ -808,6 +834,8 @@ RCrecv_callback(U32 Status, (uint)skb->data[0], (uint)skb->data[1], (uint)skb->data[2], (uint)skb->data[3], (uint)skb->data[4], (uint)skb->data[5]); #endif + +#ifdef PROMISCUOUS_BY_DEFAULT /* early 2.x firmware */ if ( (memcmp(dev->dev_addr, skb->data, 6)) && (!broadcast_packet(skb->data))) { @@ -838,6 +866,7 @@ RCrecv_callback(U32 Status, } } else +#endif /* PROMISCUOUS_BY_DEFAULT */ { len = PacketDescBlock[2]; skb->dev = dev; @@ -883,10 +912,10 @@ RCinterrupt(int irq, void *dev_id, struct pt_regs *regs) pDpa = (PDPA) (dev->priv); +#ifdef RCDEBUG if (pDpa->shutdown) printk("rc: shutdown: service irq\n"); -#ifdef RCDEBUG printk("RC irq: pDpa = 0x%x, dev = 0x%x, id = %d\n", (uint)pDpa, (uint)dev, (uint)pDpa->id); printk("dev = 0x%x\n", (uint)dev); @@ -901,7 +930,8 @@ RCinterrupt(int irq, void *dev_id, struct pt_regs *regs) return; } -#define REBOOT_REINIT_RETRY_LIMIT 10 + +#define REBOOT_REINIT_RETRY_LIMIT 4 static void rc_timer(unsigned long data) { struct device *dev = (struct device *)data; @@ -914,12 +944,12 @@ static void rc_timer(unsigned long data) if (pDpa->reboot) { - init_status = RCInitI2OMsgLayer(pDpa->id, dev->base_addr, - pDpa->PLanApiPA, pDpa->PLanApiPA, - (PFNTXCALLBACK)RCxmit_callback, - (PFNRXCALLBACK)RCrecv_callback, - (PFNCALLBACK)RCreboot_callback); + pDpa->PLanApiPA, + (PU8)virt_to_bus((void *)pDpa->PLanApiPA), + (PFNTXCALLBACK)RCxmit_callback, + (PFNRXCALLBACK)RCrecv_callback, + (PFNCALLBACK)RCreboot_callback); switch(init_status) { @@ -949,14 +979,16 @@ static void rc_timer(unsigned long data) (uint)pDpa->numOutRcvBuffers); } printk("rc: Initialization done.\n"); + dev->tbusy=0; + retry=0; return; case RC_RTN_FREE_Q_EMPTY: retry++; - printk("rc: inbound free q emtpy\n"); + printk("rc: inbound free q empty\n"); break; default: retry++; - printk("rc: unexpected bad status after reboot\n"); + printk("rc: bad status after reboot: %d\n", init_status); break; } @@ -972,7 +1004,7 @@ static void rc_timer(unsigned long data) { printk("rc: rescheduling timer...\n"); init_timer(&pDpa->timer); - pDpa->timer.expires = RUN_AT((30*HZ)/10); /* 3 sec. */ + pDpa->timer.expires = RUN_AT((40*HZ)/10); /* 3 sec. */ pDpa->timer.data = (unsigned long)dev; pDpa->timer.function = &rc_timer; /* timer handler */ add_timer(&pDpa->timer); @@ -1286,6 +1318,8 @@ static int RCconfig(struct device *dev, struct ifmap *map) return 0; } + +#ifdef MODULE void cleanup_module(void) { @@ -1315,6 +1349,8 @@ cleanup_module(void) root_RCdev = next; } } +#endif + static int RC_allocate_and_post_buffers(struct device *dev, int numBuffers) diff --git a/drivers/net/rrunner.c b/drivers/net/rrunner.c index 9b175bffa..4016cf60f 100644 --- a/drivers/net/rrunner.c +++ b/drivers/net/rrunner.c @@ -59,15 +59,7 @@ * stack will need to know about I/O vectors or something similar. */ -static const char *version = "rrunner.c: v0.09 12/14/98 Jes Sorensen (Jes.Sorensen@cern.ch)\n"; - -static unsigned int read_eeprom(struct rr_private *rrpriv, - unsigned long offset, - unsigned char *buf, - unsigned long length); -static u32 read_eeprom_word(struct rr_private *rrpriv, - void * offset); -static int rr_load_firmware(struct device *dev); +static const char __initdata *version = "rrunner.c: v0.17 03/09/99 Jes Sorensen (Jes.Sorensen@cern.ch)\n"; /* @@ -78,44 +70,32 @@ static int rr_load_firmware(struct device *dev); extern __u32 sysctl_wmem_max; extern __u32 sysctl_rmem_max; +static int probed __initdata = 0; + __initfunc(int rr_hippi_probe (struct device *dev)) { - static int i = 0; int boards_found = 0; int version_disp; /* was version info already displayed? */ - u8 pci_bus; /* PCI bus number (0-255) */ - u8 pci_dev_fun; /* PCI device and function numbers (0-255) */ + struct pci_dev *pdev = NULL; + struct pci_dev *opdev = NULL; u8 pci_latency; - u16 command; /* PCI Configuration space Command register */ - unsigned int tmp; - u8 irq; struct rr_private *rrpriv; + if (probed) + return -ENODEV; + probed++; + if (!pci_present()) /* is PCI BIOS even present? */ return -ENODEV; version_disp = 0; - for (; i < 255; i++) + while((pdev = pci_find_device(PCI_VENDOR_ID_ESSENTIAL, + PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER, + pdev))) { - if (pcibios_find_device(PCI_VENDOR_ID_ESSENTIAL, - PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER, - i, &pci_bus, &pci_dev_fun) != 0) - break; - - pcibios_read_config_word(pci_bus, pci_dev_fun, - PCI_COMMAND, &command); - - /* Enable mastering */ - - command |= PCI_COMMAND_MASTER; - pcibios_write_config_word(pci_bus, pci_dev_fun, - PCI_COMMAND, command); - - if (!(command & PCI_COMMAND_MEMORY)){ - printk("shared mem not enabled - unable to configure RoadRunner\n"); - break; - } + if (pdev == opdev) + return 0; /* * So we found our HIPPI ... time to tell the system. @@ -123,31 +103,24 @@ __initfunc(int rr_hippi_probe (struct device *dev)) dev = init_hippi_dev(dev, sizeof(struct rr_private)); - if (dev == NULL) + if (!dev) break; if (!dev->priv) dev->priv = kmalloc(sizeof(*rrpriv), GFP_KERNEL); - rrpriv = (struct rr_private *)dev->priv; - - /* Read register base address from - PCI Configuration Space */ - - pcibios_read_config_dword(pci_bus, pci_dev_fun, - PCI_BASE_ADDRESS_0, &tmp); + if (!dev->priv) + return -ENOMEM; - pcibios_read_config_byte(pci_bus, pci_dev_fun, - PCI_INTERRUPT_LINE, &irq); + rrpriv = (struct rr_private *)dev->priv; + memset(rrpriv, 0, sizeof(*rrpriv)); - dev->irq = irq; - rrpriv->pci_bus = pci_bus; - rrpriv->pci_dev_fun = pci_dev_fun; - sprintf(rrpriv->name, "RoadRunner serial HIPPI"); #ifdef __SMP__ spin_lock_init(&rrpriv->lock); #endif + sprintf(rrpriv->name, "RoadRunner serial HIPPI"); + dev->irq = pdev->irq; dev->open = &rr_open; dev->hard_start_xmit = &rr_start_xmit; dev->stop = &rr_close; @@ -168,29 +141,30 @@ __initfunc(int rr_hippi_probe (struct device *dev)) printk(version); } - printk(KERN_INFO "%s: Essential RoadRunner serial HIPPI at 0x%08x, irq %i\n", - dev->name, tmp, dev->irq); - - pcibios_read_config_byte(pci_bus, pci_dev_fun, - PCI_LATENCY_TIMER, &pci_latency); -#if 0 - if (pci_latency <= 48){ - printk(" PCI latency counter too low (%i), setting to 48 clocks\n", pci_latency); - pcibios_write_config_byte(pci_bus, pci_dev_fun, - PCI_LATENCY_TIMER, 48); + pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency); + if (pci_latency <= 0x58){ + pci_latency = 0x58; + pci_write_config_byte(pdev, PCI_LATENCY_TIMER, + pci_latency); } -#else - if (pci_latency <= 0x58) - pcibios_write_config_byte(pci_bus, pci_dev_fun, - PCI_LATENCY_TIMER, 0x58); -#endif + + pci_set_master(pdev); + + printk(KERN_INFO "%s: Essential RoadRunner serial HIPPI " + "at 0x%08lx, irq %i, PCI latency %i\n", dev->name, + pdev->base_address[0], dev->irq, pci_latency); + /* * Remap the regs into kernel space. */ - rrpriv->regs = (struct rr_regs *)ioremap(tmp, 0x1000); + rrpriv->regs = (struct rr_regs *) + ioremap(pdev->base_address[0], 0x1000); + if (!rrpriv->regs){ - printk(KERN_ERR "%s: Unable to map I/O register, RoadRunner %i will be disabled.\n", dev->name, i); + printk(KERN_ERR "%s: Unable to map I/O register, " + "RoadRunner %i will be disabled.\n", + dev->name, boards_found); break; } @@ -198,7 +172,7 @@ __initfunc(int rr_hippi_probe (struct device *dev)) * Don't access any registes before this point! */ #ifdef __BIG_ENDIAN - regs->HostCtrl |= NO_SWAP; + writel(readl(®s->HostCtrl) | NO_SWAP, ®s->HostCtrl); #endif /* * Need to add a case for little-endian 64-bit hosts here. @@ -209,6 +183,7 @@ __initfunc(int rr_hippi_probe (struct device *dev)) boards_found++; dev->base_addr = 0; dev = NULL; + opdev = pdev; } /* @@ -217,12 +192,59 @@ __initfunc(int rr_hippi_probe (struct device *dev)) * 1 or more boards. Otherwise, return failure (-ENODEV). */ +#ifdef MODULE + return boards_found; +#else if (boards_found > 0) return 0; else return -ENODEV; +#endif } +static struct device *root_dev = NULL; + +#ifdef MODULE +#if LINUX_VERSION_CODE > 0x20118 +MODULE_AUTHOR("Jes Sorensen "); +MODULE_DESCRIPTION("Essential RoadRunner HIPPI driver"); +#endif + + +int init_module(void) +{ + int cards; + + root_dev = NULL; + + cards = rr_hippi_probe(NULL); + return cards ? 0 : -ENODEV; +} + +void cleanup_module(void) +{ + struct rr_private *rr; + struct device *next; + + while (root_dev) { + next = ((struct rr_private *)root_dev->priv)->next; + rr = (struct rr_private *)root_dev->priv; + + if (!(readl(&rr->regs->HostCtrl) & NIC_HALTED)){ + printk(KERN_ERR "%s: trying to unload running NIC\n", + root_dev->name); + writel(HALT_NIC, &rr->regs->HostCtrl); + } + + iounmap(rr->regs); + unregister_hipdev(root_dev); + kfree(root_dev); + + root_dev = next; + } +} +#endif + /* * Commands are considered to be slow, thus there is no reason to @@ -238,21 +260,25 @@ static void rr_issue_cmd(struct rr_private *rrpriv, struct cmd *cmd) * This is temporary - it will go away in the final version. * We probably also want to make this function inline. */ - if (regs->HostCtrl & NIC_HALTED){ - printk("issuing command for halted NIC, code 0x%x, HostCtrl %08x\n", cmd->code, regs->HostCtrl); - if (regs->Mode & FATAL_ERR) - printk("error code %02x\n", regs->Fail1); + if (readl(®s->HostCtrl) & NIC_HALTED){ + printk("issuing command for halted NIC, code 0x%x, " + "HostCtrl %08x\n", cmd->code, readl(®s->HostCtrl)); + if (readl(®s->Mode) & FATAL_ERR) + printk("error codes Fail1 %02x, Fail2 %02x\n", + readl(®s->Fail1), readl(®s->Fail2)); } idx = rrpriv->info->cmd_ctrl.pi; - regs->CmdRing[idx] = *(u32*)(cmd); + writel(*(u32*)(cmd), ®s->CmdRing[idx]); + mb(); idx = (idx - 1) % CMD_RING_ENTRIES; rrpriv->info->cmd_ctrl.pi = idx; + mb(); - if (regs->Mode & FATAL_ERR) - printk("error code %02x\n", regs->Fail1); + if (readl(®s->Mode) & FATAL_ERR) + printk("error code %02x\n", readl(®s->Fail1)); } @@ -273,85 +299,97 @@ static int rr_reset(struct device *dev) rr_load_firmware(dev); - regs->TX_state = 0x01000000; - regs->RX_state = 0xff800000; - regs->AssistState = 0; - regs->LocalCtrl = CLEAR_INTA; - regs->BrkPt = 0x01; - regs->Timer = 0; - regs->TimerRef = 0; - regs->DmaReadState = RESET_DMA; - regs->DmaWriteState = RESET_DMA; - regs->DmaWriteHostHi = 0; - regs->DmaWriteHostLo = 0; - regs->DmaReadHostHi = 0; - regs->DmaReadHostLo = 0; - regs->DmaReadLen = 0; - regs->DmaWriteLen = 0; - regs->DmaWriteLcl = 0; - regs->DmaWriteIPchecksum = 0; - regs->DmaReadLcl = 0; - regs->DmaReadIPchecksum = 0; - regs->PciState = 0; /* 0x90 for GE? */ - regs->Mode = SWAP_DATA; + writel(0x01000000, ®s->TX_state); + writel(0xff800000, ®s->RX_state); + writel(0, ®s->AssistState); + writel(CLEAR_INTA, ®s->LocalCtrl); + writel(0x01, ®s->BrkPt); + writel(0, ®s->Timer); + writel(0, ®s->TimerRef); + writel(RESET_DMA, ®s->DmaReadState); + writel(RESET_DMA, ®s->DmaWriteState); + writel(0, ®s->DmaWriteHostHi); + writel(0, ®s->DmaWriteHostLo); + writel(0, ®s->DmaReadHostHi); + writel(0, ®s->DmaReadHostLo); + writel(0, ®s->DmaReadLen); + writel(0, ®s->DmaWriteLen); + writel(0, ®s->DmaWriteLcl); + writel(0, ®s->DmaWriteIPchecksum); + writel(0, ®s->DmaReadLcl); + writel(0, ®s->DmaReadIPchecksum); + writel(0, ®s->PciState); +#if (BITS_PER_LONG == 64) && defined __LITTLE_ENDIAN + writel(SWAP_DATA | PTR64BIT | PTR_WD_SWAP, ®s->Mode); +#elif (BITS_PER_LONG == 64) + writel(SWAP_DATA | PTR64BIT | PTR_WD_NOSWAP, ®s->Mode); +#else + writel(SWAP_DATA | PTR32BIT | PTR_WD_NOSWAP, ®s->Mode); +#endif #if 0 /* * Don't worry, this is just black magic. */ - regs->RxBase = 0xdf000; - regs->RxPrd = 0xdf000; - regs->RxCon = 0xdf000; - regs->TxBase = 0xce000; - regs->TxPrd = 0xce000; - regs->TxCon = 0xce000; - regs->RxIndPro = 0; - regs->RxIndCon = 0; - regs->RxIndRef = 0; - regs->TxIndPro = 0; - regs->TxIndCon = 0; - regs->TxIndRef = 0; - regs->pad10[0] = 0xcc000; - regs->DrCmndPro = 0; - regs->DrCmndCon = 0; - regs->DwCmndPro = 0; - regs->DwCmndCon = 0; - regs->DwCmndRef = 0; - regs->DrDataPro = 0; - regs->DrDataCon = 0; - regs->DrDataRef = 0; - regs->DwDataPro = 0; - regs->DwDataCon = 0; - regs->DwDataRef = 0; + writel(0xdf000, ®s->RxBase); + writel(0xdf000, ®s->RxPrd); + writel(0xdf000, ®s->RxCon); + writel(0xce000, ®s->TxBase); + writel(0xce000, ®s->TxPrd); + writel(0xce000, ®s->TxCon); + writel(0, ®s->RxIndPro); + writel(0, ®s->RxIndCon); + writel(0, ®s->RxIndRef); + writel(0, ®s->TxIndPro); + writel(0, ®s->TxIndCon); + writel(0, ®s->TxIndRef); + writel(0xcc000, ®s->pad10[0]); + writel(0, ®s->DrCmndPro); + writel(0, ®s->DrCmndCon); + writel(0, ®s->DwCmndPro); + writel(0, ®s->DwCmndCon); + writel(0, ®s->DwCmndRef); + writel(0, ®s->DrDataPro); + writel(0, ®s->DrDataCon); + writel(0, ®s->DrDataRef); + writel(0, ®s->DwDataPro); + writel(0, ®s->DwDataCon); + writel(0, ®s->DwDataRef); #endif - regs->MbEvent = 0xffffffff; - regs->Event = 0; + writel(0xffffffff, ®s->MbEvent); + writel(0, ®s->Event); - regs->TxPi = 0; - regs->IpRxPi = 0; + writel(0, ®s->TxPi); + writel(0, ®s->IpRxPi); - regs->EvtCon = 0; - regs->EvtPrd = 0; + writel(0, ®s->EvtCon); + writel(0, ®s->EvtPrd); rrpriv->info->evt_ctrl.pi = 0; for (i = 0; i < CMD_RING_ENTRIES; i++) - regs->CmdRing[i] = 0; + writel(0, ®s->CmdRing[i]); - regs->PciState = 0; +/* + * Why 32 ? is this not cache line size dependant? + */ + writel(WBURST_32, ®s->PciState); + mb(); - start_pc = read_eeprom_word(rrpriv, &hw->rncd_info.FwStart); + start_pc = rr_read_eeprom_word(rrpriv, &hw->rncd_info.FwStart); #if (DEBUG > 1) printk("%s: Executing firmware at address 0x%06x\n", dev->name, start_pc); #endif - regs->Pc = start_pc + 0x800; + writel(start_pc + 0x800, ®s->Pc); + mb(); udelay(5); - regs->Pc = start_pc; + writel(start_pc, ®s->Pc); + mb(); return 0; } @@ -360,7 +398,7 @@ static int rr_reset(struct device *dev) /* * Read a string from the EEPROM. */ -static unsigned int read_eeprom(struct rr_private *rrpriv, +static unsigned int rr_read_eeprom(struct rr_private *rrpriv, unsigned long offset, unsigned char *buf, unsigned long length) @@ -368,22 +406,25 @@ static unsigned int read_eeprom(struct rr_private *rrpriv, struct rr_regs *regs = rrpriv->regs; u32 misc, io, host, i; - io = regs->ExtIo; - regs->ExtIo = 0; - misc = regs->LocalCtrl; - regs->LocalCtrl = 0; - host = regs->HostCtrl; - regs->HostCtrl |= HALT_NIC; + io = readl(®s->ExtIo); + writel(0, ®s->ExtIo); + misc = readl(®s->LocalCtrl); + writel(0, ®s->LocalCtrl); + host = readl(®s->HostCtrl); + writel(host | HALT_NIC, ®s->HostCtrl); + mb(); for (i = 0; i < length; i++){ - regs->WinBase = (EEPROM_BASE + ((offset+i) << 3)); - buf[i] = (regs->WinData >> 24) & 0xff; + writel((EEPROM_BASE + ((offset+i) << 3)), ®s->WinBase); + mb(); + buf[i] = (readl(®s->WinData) >> 24) & 0xff; + mb(); } - regs->HostCtrl = host; - regs->LocalCtrl = misc; - regs->ExtIo = io; - + writel(host, ®s->HostCtrl); + writel(misc, ®s->LocalCtrl); + writel(io, ®s->ExtIo); + mb(); return i; } @@ -392,13 +433,13 @@ static unsigned int read_eeprom(struct rr_private *rrpriv, * Shortcut to read one word (4 bytes) out of the EEPROM and convert * it to our CPU byte-order. */ -static u32 read_eeprom_word(struct rr_private *rrpriv, +static u32 rr_read_eeprom_word(struct rr_private *rrpriv, void * offset) { u32 word; - if ((read_eeprom(rrpriv, (unsigned long)offset, - (char *)&word, 4) == 4)) + if ((rr_read_eeprom(rrpriv, (unsigned long)offset, + (char *)&word, 4) == 4)) return be32_to_cpu(word); return 0; } @@ -410,38 +451,42 @@ static u32 read_eeprom_word(struct rr_private *rrpriv, * This is only called when the firmware is not running. */ static unsigned int write_eeprom(struct rr_private *rrpriv, - unsigned long offset, - unsigned char *buf, - unsigned long length) + unsigned long offset, + unsigned char *buf, + unsigned long length) { struct rr_regs *regs = rrpriv->regs; u32 misc, io, data, i, j, ready, error = 0; - io = regs->ExtIo; - regs->ExtIo = 0; - misc = regs->LocalCtrl; - regs->LocalCtrl = ENABLE_EEPROM_WRITE; + io = readl(®s->ExtIo); + writel(0, ®s->ExtIo); + misc = readl(®s->LocalCtrl); + writel(ENABLE_EEPROM_WRITE, ®s->LocalCtrl); + mb(); for (i = 0; i < length; i++){ - regs->WinBase = (EEPROM_BASE + ((offset+i) << 3)); + writel((EEPROM_BASE + ((offset+i) << 3)), ®s->WinBase); + mb(); data = buf[i] << 24; /* * Only try to write the data if it is not the same * value already. */ - if ((regs->WinData & 0xff000000) != data){ - regs->WinData = data; + if ((readl(®s->WinData) & 0xff000000) != data){ + writel(data, ®s->WinData); ready = 0; j = 0; mb(); while(!ready){ - udelay(1000); - if ((regs->WinData & 0xff000000) == data) + udelay(20); + if ((readl(®s->WinData) & 0xff000000) == + data) ready = 1; + mb(); if (j++ > 5000){ printk("data mismatch: %08x, " "WinData %08x\n", data, - regs->WinData); + readl(®s->WinData)); ready = 1; error = 1; } @@ -449,8 +494,9 @@ static unsigned int write_eeprom(struct rr_private *rrpriv, } } - regs->LocalCtrl = misc; - regs->ExtIo = io; + writel(misc, ®s->LocalCtrl); + writel(io, ®s->ExtIo); + mb(); return error; } @@ -465,7 +511,8 @@ __initfunc(static int rr_init(struct device *dev)) rrpriv = (struct rr_private *)dev->priv; regs = rrpriv->regs; - rev = regs->FwRev; + rev = readl(®s->FwRev); + rrpriv->fw_rev = rev; if (rev > 0x00020024) printk(" Firmware revision: %i.%i.%i\n", (rev >> 16), ((rev >> 8) & 0xff), (rev & 0xff)); @@ -477,13 +524,13 @@ __initfunc(static int rr_init(struct device *dev)) printk(" Firmware revision too old: %i.%i.%i, please " "upgrade to 2.0.37 or later.\n", (rev >> 16), ((rev >> 8) & 0xff), (rev & 0xff)); - return -EFAULT; - } - printk(" Maximum receive rings %i\n", regs->MaxRxRng); +#if (DEBUG > 2) + printk(" Maximum receive rings %i\n", readl(®s->MaxRxRng)); +#endif - sram_size = read_eeprom_word(rrpriv, (void *)8); + sram_size = rr_read_eeprom_word(rrpriv, (void *)8); printk(" SRAM size 0x%06x\n", sram_size); if (sysctl_rmem_max < 262144){ @@ -498,6 +545,9 @@ __initfunc(static int rr_init(struct device *dev)) sysctl_wmem_max = 262144; } + rrpriv->next = root_dev; + root_dev = dev; + return 0; } @@ -507,7 +557,7 @@ static int rr_init1(struct device *dev) struct rr_private *rrpriv; struct rr_regs *regs; u32 hostctrl; - unsigned long myjif, flags, tmp_ptr; + unsigned long myjif, flags; struct cmd cmd; short i; @@ -516,8 +566,9 @@ static int rr_init1(struct device *dev) spin_lock_irqsave(&rrpriv->lock, flags); - hostctrl = regs->HostCtrl; - regs->HostCtrl |= HALT_NIC; + hostctrl = readl(®s->HostCtrl); + writel(hostctrl | HALT_NIC | RR_CLEAR_INT, ®s->HostCtrl); + mb(); if (hostctrl & PARITY_ERR){ printk("%s: Parity error halting NIC - this is serious!\n", @@ -526,31 +577,14 @@ static int rr_init1(struct device *dev) return -EFAULT; } - - memset(rrpriv->rx_ctrl, 0, 256 * sizeof(struct ring_ctrl)); - memset(rrpriv->info, 0, sizeof(struct rr_info)); - - tmp_ptr = virt_to_bus((void *)rrpriv->rx_ctrl); -#if (BITS_PER_LONG == 64) - regs->RxRingHi = (tmp_ptr >> 32); -#else - regs->RxRingHi = 0; -#endif - regs->RxRingLo = ((tmp_ptr) & 0xffffffff); - - tmp_ptr = virt_to_bus((void *)rrpriv->info); -#if (BITS_PER_LONG == 64) - regs->InfoPtrHi = (tmp_ptr >> 32); -#else - regs->InfoPtrHi = 0; -#endif - regs->InfoPtrLo = ((tmp_ptr) & 0xffffffff); + set_rxaddr(regs, rrpriv->rx_ctrl); + set_infoaddr(regs, rrpriv->info); rrpriv->info->evt_ctrl.entry_size = sizeof(struct event); rrpriv->info->evt_ctrl.entries = EVT_RING_ENTRIES; rrpriv->info->evt_ctrl.mode = 0; rrpriv->info->evt_ctrl.pi = 0; - rrpriv->info->evt_ctrl.rngptr = virt_to_bus(rrpriv->evt_ring); + set_rraddr(&rrpriv->info->evt_ctrl.rngptr, rrpriv->evt_ring); rrpriv->info->cmd_ctrl.entry_size = sizeof(struct cmd); rrpriv->info->cmd_ctrl.entries = CMD_RING_ENTRIES; @@ -558,20 +592,19 @@ static int rr_init1(struct device *dev) rrpriv->info->cmd_ctrl.pi = 15; for (i = 0; i < CMD_RING_ENTRIES; i++) { - regs->CmdRing[i] = 0; + writel(0, ®s->CmdRing[i]); } for (i = 0; i < TX_RING_ENTRIES; i++) { rrpriv->tx_ring[i].size = 0; - rrpriv->tx_ring[i].addr = 0; + set_rraddr(&rrpriv->tx_ring[i].addr, 0); rrpriv->tx_skbuff[i] = 0; } - rrpriv->info->tx_ctrl.entry_size = sizeof(struct tx_desc); rrpriv->info->tx_ctrl.entries = TX_RING_ENTRIES; rrpriv->info->tx_ctrl.mode = 0; rrpriv->info->tx_ctrl.pi = 0; - rrpriv->info->tx_ctrl.rngptr = virt_to_bus(rrpriv->tx_ring); + set_rraddr(&rrpriv->info->tx_ctrl.rngptr, rrpriv->tx_ring); /* * Set dirty_tx before we start receiving interrupts, otherwise @@ -585,14 +618,20 @@ static int rr_init1(struct device *dev) rr_reset(dev); - regs->IntrTmr = 0x60; - regs->WriteDmaThresh = 0x80 | 0x1f; - regs->ReadDmaThresh = 0x80 | 0x1f; + writel(0x60, ®s->IntrTmr); + /* + * These seem to have no real effect as the Firmware sets + * it's own default values + */ + writel(0x10, ®s->WriteDmaThresh); + writel(0x20, ®s->ReadDmaThresh); rrpriv->fw_running = 0; + mb(); hostctrl &= ~(HALT_NIC | INVALID_INST_B | PARITY_ERR); - regs->HostCtrl = hostctrl; + writel(hostctrl, ®s->HostCtrl); + mb(); spin_unlock_irqrestore(&rrpriv->lock, flags); @@ -626,10 +665,7 @@ static int rr_init1(struct device *dev) if ((((unsigned long)skb->data) & 0xfff) > ~65320) printk("skb alloc error\n"); -#if (BITS_PER_LONG == 32) - rrpriv->rx_ring[i].zero = 0; -#endif - rrpriv->rx_ring[i].addr = virt_to_bus(skb->data); + set_rraddr(&rrpriv->rx_ring[i].addr, skb->data); rrpriv->rx_ring[i].size = dev->mtu + HIPPI_HLEN; } @@ -637,7 +673,8 @@ static int rr_init1(struct device *dev) rrpriv->rx_ctrl[4].entries = RX_RING_ENTRIES; rrpriv->rx_ctrl[4].mode = 8; rrpriv->rx_ctrl[4].pi = 0; - rrpriv->rx_ctrl[4].rngptr = virt_to_bus(rrpriv->rx_ring); + mb(); + set_rraddr(&rrpriv->rx_ctrl[4].rngptr, rrpriv->rx_ring); cmd.code = C_NEW_RNG; cmd.ring = 4; @@ -647,18 +684,15 @@ static int rr_init1(struct device *dev) #if 0 { u32 tmp; - tmp = regs->ExtIo; - regs->ExtIo = 0x80; + tmp = readl(®s->ExtIo); + writel(0x80, ®s->ExtIo); i = jiffies + 1 * HZ; while (jiffies < i); - regs->ExtIo = tmp; + writel(tmp, ®s->ExtIo); } #endif dev->tbusy = 0; -#if 0 - dev->interrupt = 0; -#endif dev->start = 1; return 0; } @@ -669,24 +703,24 @@ static int rr_init1(struct device *dev) * events) and are handled here, outside the main interrupt handler, * to reduce the size of the handler. */ -static u32 rr_handle_event(struct device *dev, u32 prodidx) +static u32 rr_handle_event(struct device *dev, u32 prodidx, u32 eidx) { struct rr_private *rrpriv; struct rr_regs *regs; - u32 tmp, eidx; + u32 tmp; rrpriv = (struct rr_private *)dev->priv; regs = rrpriv->regs; - eidx = rrpriv->info->evt_ctrl.pi; while (prodidx != eidx){ switch (rrpriv->evt_ring[eidx].code){ case E_NIC_UP: - tmp = regs->FwRev; + tmp = readl(®s->FwRev); printk("%s: Firmware revision %i.%i.%i up and running\n", dev->name, (tmp >> 16), ((tmp >> 8) & 0xff), (tmp & 0xff)); rrpriv->fw_running = 1; + mb(); break; case E_LINK_ON: printk("%s: Optical link ON\n", dev->name); @@ -729,7 +763,7 @@ static u32 rr_handle_event(struct device *dev, u32 prodidx) #if (DEBUG > 2) printk("%s: RX ring valid event\n", dev->name); #endif - regs->IpRxPi = RX_RING_ENTRIES - 1; + writel(RX_RING_ENTRIES - 1, ®s->IpRxPi); break; case E_INV_RNG: printk("%s: RX ring invalid event\n", dev->name); @@ -756,35 +790,24 @@ static u32 rr_handle_event(struct device *dev, u32 prodidx) } rrpriv->info->evt_ctrl.pi = eidx; + mb(); return eidx; } -static int rx_int(struct device *dev, u32 rxlimit) +static void rx_int(struct device *dev, u32 rxlimit, u32 index) { struct rr_private *rrpriv = (struct rr_private *)dev->priv; - u32 index, pkt_len; + u32 pkt_len; struct rr_regs *regs = rrpriv->regs; - index = rrpriv->cur_rx; - - while(index != rxlimit){ + do { pkt_len = rrpriv->rx_ring[index].size; #if (DEBUG > 2) printk("index %i, rxlimit %i\n", index, rxlimit); printk("len %x, mode %x\n", pkt_len, rrpriv->rx_ring[index].mode); #endif -#if 0 -/* - * I have never seen this occur - */ - if(!(rrpriv->rx_skbuff[index])){ - printk("Trying to receive in empty skbuff\n"); - goto out; - } -#endif - if (pkt_len > 0){ struct sk_buff *skb; @@ -808,7 +831,7 @@ static int rx_int(struct device *dev, u32 rxlimit) skb = rrpriv->rx_skbuff[index]; skb_put(skb, pkt_len); rrpriv->rx_skbuff[index] = newskb; - rrpriv->rx_ring[index].addr = virt_to_bus(newskb->data); + set_rraddr(&rrpriv->rx_ring[index].addr, newskb->data); }else{ printk("%s: Out of memory, deferring " "packet\n", dev->name); @@ -829,13 +852,13 @@ static int rx_int(struct device *dev, u32 rxlimit) rrpriv->rx_ring[index].size = dev->mtu + HIPPI_HLEN; if ((index & 7) == 7) - regs->IpRxPi = index; + writel(index, ®s->IpRxPi); index = (index + 1) % RX_RING_ENTRIES; - } + } while(index != rxlimit); rrpriv->cur_rx = index; - return index; + mb(); } @@ -844,25 +867,18 @@ static void rr_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) struct rr_private *rrpriv; struct rr_regs *regs; struct device *dev = (struct device *)dev_id; - u32 prodidx, eidx, txcsmr, rxlimit, txcon; + u32 prodidx, rxindex, eidx, txcsmr, rxlimit, txcon; unsigned long flags; rrpriv = (struct rr_private *)dev->priv; regs = rrpriv->regs; - if (!(regs->HostCtrl & RR_INT)) + if (!(readl(®s->HostCtrl) & RR_INT)) return; -#if 0 - if (test_and_set_bit(0, (void*)&dev->interrupt) != 0) { - printk("%s: Re-entering the interrupt handler.\n", dev->name); - return; - } -#endif - spin_lock_irqsave(&rrpriv->lock, flags); - prodidx = regs->EvtPrd; + prodidx = readl(®s->EvtPrd); txcsmr = (prodidx >> 8) & 0xff; rxlimit = (prodidx >> 16) & 0xff; prodidx &= 0xff; @@ -872,6 +888,10 @@ static void rr_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) prodidx, rrpriv->info->evt_ctrl.pi); #endif + rxindex = rrpriv->cur_rx; + if (rxindex != rxlimit) + rx_int(dev, rxlimit, rxindex); + txcon = rrpriv->dirty_tx; if (txcsmr != txcon) { do { @@ -881,11 +901,12 @@ static void rr_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) rrpriv->tx_skbuff[txcon] = NULL; rrpriv->tx_ring[txcon].size = 0; - rrpriv->tx_ring[txcon].addr = 0; + set_rraddr(&rrpriv->tx_ring[txcon].addr, 0); rrpriv->tx_ring[txcon].mode = 0; txcon = (txcon + 1) % TX_RING_ENTRIES; } while (txcsmr != txcon); + mb(); rrpriv->dirty_tx = txcon; if (rrpriv->tx_full && dev->tbusy && @@ -897,21 +918,15 @@ static void rr_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) } } - rx_int(dev, rxlimit); - eidx = rrpriv->info->evt_ctrl.pi; - if (prodidx != eidx) - eidx = rr_handle_event(dev, prodidx); + eidx = rr_handle_event(dev, prodidx, eidx); eidx |= ((txcsmr << 8) | (rxlimit << 16)); - regs->EvtCon = eidx; + writel(eidx, ®s->EvtCon); + mb(); spin_unlock_irqrestore(&rrpriv->lock, flags); - -#if 0 - dev->interrupt = 0; -#endif } @@ -919,35 +934,64 @@ static int rr_open(struct device *dev) { struct rr_private *rrpriv; struct rr_regs *regs; + int ecode = 0; + unsigned long flags; rrpriv = (struct rr_private *)dev->priv; regs = rrpriv->regs; -#if 0 - regs->HostCtrl |= (HALT_NIC | RR_CLEAR_INT); -#endif + if (rrpriv->fw_rev < 0x00020000) { + printk(KERN_WARNING "%s: trying to configure device with " + "obsolete firmware\n", dev->name); + ecode = -EBUSY; + goto error; + } + + rrpriv->rx_ctrl = kmalloc(256*sizeof(struct ring_ctrl), + GFP_KERNEL | GFP_DMA); + if (!rrpriv->rx_ctrl) { + ecode = -ENOMEM; + goto error; + } + + rrpriv->info = kmalloc(sizeof(struct rr_info), GFP_KERNEL | GFP_DMA); + if (!rrpriv->info){ + kfree(rrpriv->rx_ctrl); + ecode = -ENOMEM; + goto error; + } + memset(rrpriv->rx_ctrl, 0, 256 * sizeof(struct ring_ctrl)); + memset(rrpriv->info, 0, sizeof(struct rr_info)); + mb(); + + spin_lock_irqsave(&rrpriv->lock, flags); + writel(readl(®s->HostCtrl)|HALT_NIC|RR_CLEAR_INT, ®s->HostCtrl); + spin_unlock_irqrestore(&rrpriv->lock, flags); if (request_irq(dev->irq, rr_interrupt, SA_SHIRQ, rrpriv->name, dev)) { printk(KERN_WARNING "%s: Requested IRQ %d is busy\n", dev->name, dev->irq); - return -EAGAIN; + ecode = -EAGAIN; + goto error; } - rrpriv->rx_ctrl = kmalloc(256*sizeof(struct ring_ctrl), - GFP_KERNEL | GFP_DMA); - rrpriv->info = kmalloc(sizeof(struct rr_info), GFP_KERNEL | GFP_DMA); - rr_init1(dev); dev->tbusy = 0; -#if 0 - dev->interrupt = 0; -#endif dev->start = 1; MOD_INC_USE_COUNT; return 0; + + error: + spin_lock_irqsave(&rrpriv->lock, flags); + writel(readl(®s->HostCtrl)|HALT_NIC|RR_CLEAR_INT, ®s->HostCtrl); + spin_unlock_irqrestore(&rrpriv->lock, flags); + + dev->tbusy = 1; + dev->start = 0; + return -ENOMEM; } @@ -965,12 +1009,13 @@ static void rr_dump(struct device *dev) printk("%s: dumping NIC TX rings\n", dev->name); printk("RxPrd %08x, TxPrd %02x, EvtPrd %08x, TxPi %02x, TxCtrlPi %02x\n", - regs->RxPrd, regs->TxPrd, regs->EvtPrd, regs->TxPi, + readl(®s->RxPrd), readl(®s->TxPrd), + readl(®s->EvtPrd), readl(®s->TxPi), rrpriv->info->tx_ctrl.pi); - printk("Error code 0x%x\n", regs->Fail1); + printk("Error code 0x%x\n", readl(®s->Fail1)); - index = (((regs->EvtPrd >> 8) & 0xff ) - 1) % EVT_RING_ENTRIES; + index = (((readl(®s->EvtPrd) >> 8) & 0xff ) - 1) % EVT_RING_ENTRIES; cons = rrpriv->dirty_tx; printk("TX ring index %i, TX consumer %i\n", index, cons); @@ -989,12 +1034,12 @@ static void rr_dump(struct device *dev) if (rrpriv->tx_skbuff[cons]){ len = min(0x80, rrpriv->tx_skbuff[cons]->len); printk("skbuff for cons %i is valid - dumping data (0x%x bytes - skbuff len 0x%x)\n", cons, len, rrpriv->tx_skbuff[cons]->len); - printk("mode 0x%x, size 0x%x,\n phys %08x (virt %08x), skbuff-addr %08x, truesize 0x%x\n", + printk("mode 0x%x, size 0x%x,\n phys %08x (virt %08lx), skbuff-addr %08lx, truesize 0x%x\n", rrpriv->tx_ring[cons].mode, rrpriv->tx_ring[cons].size, - rrpriv->tx_ring[cons].addr, - (unsigned int)bus_to_virt(rrpriv->tx_ring[cons].addr), - (unsigned int)rrpriv->tx_skbuff[cons]->data, + rrpriv->tx_ring[cons].addr.addrlo, + (unsigned long)bus_to_virt(rrpriv->tx_ring[cons].addr.addrlo), + (unsigned long)rrpriv->tx_skbuff[cons]->data, (unsigned int)rrpriv->tx_skbuff[cons]->truesize); for (i = 0; i < len; i++){ if (!(i & 7)) @@ -1009,7 +1054,7 @@ static void rr_dump(struct device *dev) printk("mode 0x%x, size 0x%x, phys-addr %08x\n", rrpriv->tx_ring[i].mode, rrpriv->tx_ring[i].size, - rrpriv->tx_ring[i].addr); + rrpriv->tx_ring[i].addr.addrlo); } @@ -1033,24 +1078,26 @@ static int rr_close(struct device *dev) */ spin_lock(&rrpriv->lock); - tmp = regs->HostCtrl; + tmp = readl(®s->HostCtrl); if (tmp & NIC_HALTED){ printk("%s: NIC already halted\n", dev->name); rr_dump(dev); - }else - tmp |= HALT_NIC; - regs->HostCtrl = tmp; + }else{ + tmp |= HALT_NIC | RR_CLEAR_INT; + writel(tmp, ®s->HostCtrl); + mb(); + } rrpriv->fw_running = 0; - regs->TxPi = 0; - regs->IpRxPi = 0; + writel(0, ®s->TxPi); + writel(0, ®s->IpRxPi); - regs->EvtCon = 0; - regs->EvtPrd = 0; + writel(0, ®s->EvtCon); + writel(0, ®s->EvtPrd); for (i = 0; i < CMD_RING_ENTRIES; i++) - regs->CmdRing[i] = 0; + writel(0, ®s->CmdRing[i]); rrpriv->info->tx_ctrl.entries = 0; rrpriv->info->cmd_ctrl.pi = 0; @@ -1060,7 +1107,7 @@ static int rr_close(struct device *dev) for (i = 0; i < TX_RING_ENTRIES; i++) { if (rrpriv->tx_skbuff[i]) { rrpriv->tx_ring[i].size = 0; - rrpriv->tx_ring[i].addr = 0; + set_rraddr(&rrpriv->tx_ring[i].addr, 0); dev_kfree_skb(rrpriv->tx_skbuff[i]); } } @@ -1068,7 +1115,7 @@ static int rr_close(struct device *dev) for (i = 0; i < RX_RING_ENTRIES; i++) { if (rrpriv->rx_skbuff[i]) { rrpriv->rx_ring[i].size = 0; - rrpriv->rx_ring[i].addr = 0; + set_rraddr(&rrpriv->rx_ring[i].addr, 0); dev_kfree_skb(rrpriv->rx_skbuff[i]); } } @@ -1094,6 +1141,10 @@ static int rr_start_xmit(struct sk_buff *skb, struct device *dev) u32 *ifield; struct sk_buff *new_skb; + if (readl(®s->Mode) & FATAL_ERR) + printk("error codes Fail1 %02x, Fail2 %02x\n", + readl(®s->Fail1), readl(®s->Fail2)); + /* * We probably need to deal with tbusy here to prevent overruns. */ @@ -1128,11 +1179,11 @@ static int rr_start_xmit(struct sk_buff *skb, struct device *dev) index = txctrl->pi; rrpriv->tx_skbuff[index] = skb; - rrpriv->tx_ring[index].addr = virt_to_bus(skb->data); + set_rraddr(&rrpriv->tx_ring[index].addr, skb->data); rrpriv->tx_ring[index].size = len + 8; /* include IFIELD */ rrpriv->tx_ring[index].mode = PACKET_START | PACKET_END; txctrl->pi = (index + 1) % TX_RING_ENTRIES; - regs->TxPi = txctrl->pi; + writel(txctrl->pi, ®s->TxPi); if (txctrl->pi == rrpriv->dirty_tx){ rrpriv->tx_full = 1; @@ -1167,8 +1218,9 @@ static int rr_load_firmware(struct device *dev) { struct rr_private *rrpriv; struct rr_regs *regs; + unsigned long eptr, segptr; int i, j; - u32 localctrl, eptr, sptr, segptr, len, tmp; + u32 localctrl, sptr, len, tmp; u32 p2len, p2size, nr_seg, revision, io, sram_size; struct eeprom *hw = NULL; @@ -1178,40 +1230,44 @@ static int rr_load_firmware(struct device *dev) if (dev->flags & IFF_UP) return -EBUSY; - if (!(regs->HostCtrl & NIC_HALTED)){ + if (!(readl(®s->HostCtrl) & NIC_HALTED)){ printk("%s: Trying to load firmware to a running NIC.\n", dev->name); return -EBUSY; } - localctrl = regs->LocalCtrl; - regs->LocalCtrl = 0; + localctrl = readl(®s->LocalCtrl); + writel(0, ®s->LocalCtrl); - regs->EvtPrd = 0; - regs->RxPrd = 0; - regs->TxPrd = 0; + writel(0, ®s->EvtPrd); + writel(0, ®s->RxPrd); + writel(0, ®s->TxPrd); /* * First wipe the entire SRAM, otherwise we might run into all * kinds of trouble ... sigh, this took almost all afternoon * to track down ;-( */ - io = regs->ExtIo; - regs->ExtIo = 0; - sram_size = read_eeprom_word(rrpriv, (void *)8); + io = readl(®s->ExtIo); + writel(0, ®s->ExtIo); + sram_size = rr_read_eeprom_word(rrpriv, (void *)8); for (i = 200; i < sram_size / 4; i++){ - regs->WinBase = i * 4; - regs->WinData = 0; + writel(i * 4, ®s->WinBase); + mb(); + writel(0, ®s->WinData); + mb(); } - regs->ExtIo = io; + writel(io, ®s->ExtIo); + mb(); - eptr = read_eeprom_word(rrpriv, &hw->rncd_info.AddrRunCodeSegs); + eptr = (unsigned long)rr_read_eeprom_word(rrpriv, + &hw->rncd_info.AddrRunCodeSegs); eptr = ((eptr & 0x1fffff) >> 3); - p2len = read_eeprom_word(rrpriv, (void *)(0x83*4)); + p2len = rr_read_eeprom_word(rrpriv, (void *)(0x83*4)); p2len = (p2len << 2); - p2size = read_eeprom_word(rrpriv, (void *)(0x84*4)); + p2size = rr_read_eeprom_word(rrpriv, (void *)(0x84*4)); p2size = ((p2size & 0x1fffff) >> 3); if ((eptr < p2size) || (eptr > (p2size + p2len))){ @@ -1219,7 +1275,7 @@ static int rr_load_firmware(struct device *dev) goto out; } - revision = read_eeprom_word(rrpriv, &hw->manf.HeaderFmt); + revision = rr_read_eeprom_word(rrpriv, &hw->manf.HeaderFmt); if (revision != 1){ printk("%s: invalid firmware format (%i)\n", @@ -1227,18 +1283,18 @@ static int rr_load_firmware(struct device *dev) goto out; } - nr_seg = read_eeprom_word(rrpriv, (void *)eptr); + nr_seg = rr_read_eeprom_word(rrpriv, (void *)eptr); eptr +=4; #if (DEBUG > 1) printk("%s: nr_seg %i\n", dev->name, nr_seg); #endif for (i = 0; i < nr_seg; i++){ - sptr = read_eeprom_word(rrpriv, (void *)eptr); + sptr = rr_read_eeprom_word(rrpriv, (void *)eptr); eptr += 4; - len = read_eeprom_word(rrpriv, (void *)eptr); + len = rr_read_eeprom_word(rrpriv, (void *)eptr); eptr += 4; - segptr = read_eeprom_word(rrpriv, (void *)eptr); + segptr = (unsigned long)rr_read_eeprom_word(rrpriv, (void *)eptr); segptr = ((segptr & 0x1fffff) >> 3); eptr += 4; #if (DEBUG > 1) @@ -1246,16 +1302,19 @@ static int rr_load_firmware(struct device *dev) dev->name, i, sptr, len, segptr); #endif for (j = 0; j < len; j++){ - tmp = read_eeprom_word(rrpriv, (void *)segptr); - regs->WinBase = sptr; - regs->WinData = tmp; + tmp = rr_read_eeprom_word(rrpriv, (void *)segptr); + writel(sptr, ®s->WinBase); + mb(); + writel(tmp, ®s->WinData); + mb(); segptr += 4; sptr += 4; } } out: - regs->LocalCtrl = localctrl; + writel(localctrl, ®s->LocalCtrl); + mb(); return 0; } @@ -1291,7 +1350,7 @@ static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd) error = -ENOMEM; goto out; } - i = read_eeprom(rrpriv, 0, image, EEPROM_BYTES); + i = rr_read_eeprom(rrpriv, 0, image, EEPROM_BYTES); if (i != EEPROM_BYTES){ kfree(image); printk(KERN_ERR "%s: Error reading EEPROM\n", @@ -1325,7 +1384,7 @@ static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd) } oldimage = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); - if (!image){ + if (!oldimage){ printk(KERN_ERR "%s: Unable to allocate memory " "for old EEPROM image\n", dev->name); error = -ENOMEM; @@ -1343,7 +1402,7 @@ static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd) printk(KERN_ERR "%s: Error writing EEPROM\n", dev->name); - i = read_eeprom(rrpriv, 0, oldimage, EEPROM_BYTES); + i = rr_read_eeprom(rrpriv, 0, oldimage, EEPROM_BYTES); if (i != EEPROM_BYTES) printk(KERN_ERR "%s: Error reading back EEPROM " "image\n", dev->name); @@ -1354,7 +1413,6 @@ static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd) dev->name); error = -EFAULT; } - kfree(image); kfree(oldimage); break; @@ -1374,6 +1432,6 @@ static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd) /* * Local variables: - * compile-command: "gcc -D__SMP__ -D__KERNEL__ -I../../include -Wall -Wstrict-prototypes -O2 -pipe -fomit-frame-pointer -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -c rrunner.c" + * compile-command: "gcc -D__SMP__ -D__KERNEL__ -I../../include -Wall -Wstrict-prototypes -O2 -pipe -fomit-frame-pointer -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -DMODULE -DMODVERSIONS -include ../../include/linux/modversions.h -c rrunner.c" * End: */ diff --git a/drivers/net/rrunner.h b/drivers/net/rrunner.h index d47513700..e274efa39 100644 --- a/drivers/net/rrunner.h +++ b/drivers/net/rrunner.h @@ -278,7 +278,6 @@ struct rr_regs { #define TRACE_ON_WHAT_BIT 0x00020000 /* Traces on */ #define ONEM_BUF_WHAT_BIT 0x00040000 /* 1Meg vs 256K */ #define CHAR_API_WHAT_BIT 0x00080000 /* Char API vs network only */ -#define MS_DOS_WHAT_BIT 0x00100000 /* MS_DOS */ #define CMD_EVT_WHAT_BIT 0x00200000 /* Command event */ #define LONG_TX_WHAT_BIT 0x00400000 #define LONG_RX_WHAT_BIT 0x00800000 @@ -486,6 +485,63 @@ struct cmd { #define SAME_IFIELD 0x80 +typedef struct { +#if (BITS_PER_LONG == 64) + u64 addrlo; +#else + u32 addrhi; + u32 addrlo; +#endif +} rraddr; + + +static inline void set_rraddr(rraddr *ra, volatile void *addr) +{ + unsigned long baddr = virt_to_bus((void *)addr); +#if (BITS_PER_LONG == 64) + ra->addrlo = baddr; +#else + /* Don't bother setting zero every time */ + ra->addrlo = baddr; +#endif + mb(); +} + + +static inline void set_rxaddr(struct rr_regs *regs, volatile void *addr) +{ + unsigned long baddr = virt_to_bus((void *)addr); +#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) + writel(baddr & 0xffffffff, ®s->RxRingHi); + writel(baddr >> 32, ®s->RxRingLo); +#elif (BITS_PER_LONG == 64) + writel(baddr >> 32, ®s->RxRingHi); + writel(baddr & 0xffffffff, ®s->RxRingLo); +#else + writel(0, ®s->RxRingHi); + writel(baddr, ®s->RxRingLo); +#endif + mb(); +} + + +static inline void set_infoaddr(struct rr_regs *regs, volatile void *addr) +{ + unsigned long baddr = virt_to_bus((void *)addr); +#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) + writel(baddr & 0xffffffff, ®s->InfoPtrHi); + writel(baddr >> 32, ®s->InfoPtrLo); +#elif (BITS_PER_LONG == 64) + writel(baddr >> 32, ®s->InfoPtrHi); + writel(baddr & 0xffffffff, ®s->InfoPtrLo); +#else + writel(0, ®s->InfoPtrHi); + writel(baddr, ®s->InfoPtrLo); +#endif + mb(); +} + + /* * TX ring */ @@ -498,12 +554,7 @@ struct cmd { #define TX_RING_SIZE (TX_RING_ENTRIES * sizeof(struct tx_desc)) struct tx_desc{ -#if (BITS_PER_LONG == 64) - u64 addr; -#else - u32 zero; - u32 addr; -#endif + rraddr addr; u32 res; #ifdef __LITTLE_ENDIAN u16 size; @@ -525,12 +576,7 @@ struct tx_desc{ #define RX_RING_SIZE (RX_RING_ENTRIES * sizeof(struct rx_desc)) struct rx_desc{ -#if (BITS_PER_LONG == 64) - u64 addr; -#else - u32 zero; - u32 addr; -#endif + rraddr addr; u32 res; #ifdef __LITTLE_ENDIAN u16 size; @@ -714,12 +760,7 @@ struct rr_stats { * This struct is shared with the NIC firmware. */ struct ring_ctrl { -#if (BITS_PER_LONG == 64) - u64 rngptr; -#else - u32 zero; - u32 rngptr; -#endif + rraddr rngptr; #ifdef __LITTLE_ENDIAN u16 entries; u8 pad; @@ -759,19 +800,19 @@ struct rr_private struct rx_desc rx_ring[RX_RING_ENTRIES]; struct tx_desc tx_ring[TX_RING_ENTRIES]; struct event evt_ring[EVT_RING_ENTRIES]; - struct sk_buff *tx_skbuff[TX_RING_ENTRIES]; struct sk_buff *rx_skbuff[RX_RING_ENTRIES]; + struct sk_buff *tx_skbuff[TX_RING_ENTRIES]; struct rr_regs *regs; /* Register base */ struct ring_ctrl *rx_ctrl; /* Receive ring control */ struct rr_info *info; /* Shared info page */ + struct device *next; spinlock_t lock; struct timer_list timer; u32 cur_rx, cur_cmd, cur_evt; u32 dirty_rx, dirty_tx; u32 tx_full; + u32 fw_rev; short fw_running; - u8 pci_bus; /* PCI bus number */ - u8 pci_dev_fun; /* PCI device numbers */ char name[24]; /* The assigned name */ struct net_device_stats stats; }; @@ -789,5 +830,11 @@ static int rr_start_xmit(struct sk_buff *skb, struct device *dev); static int rr_close(struct device *dev); static struct net_device_stats *rr_get_stats(struct device *dev); static int rr_ioctl(struct device *dev, struct ifreq *rq, int cmd); +static unsigned int rr_read_eeprom(struct rr_private *rrpriv, + unsigned long offset, + unsigned char *buf, + unsigned long length); +static u32 rr_read_eeprom_word(struct rr_private *rrpriv, void * offset); +static int rr_load_firmware(struct device *dev); #endif /* _RRUNNER_H_ */ diff --git a/drivers/net/shaper.c b/drivers/net/shaper.c index ab82b9d2b..2519ff89c 100644 --- a/drivers/net/shaper.c +++ b/drivers/net/shaper.c @@ -53,13 +53,19 @@ * This will be fixed in BETA4 */ +/* + * bh_atomic() SMP races fixes and rewritten the locking code to be SMP safe + * and irq-mask friendly. NOTE: we can't use start_bh_atomic() in kick_shaper() + * because it's going to be recalled from an irq handler, and synchronize_bh() + * is a nono if called from irq context. + * 1999 Andrea Arcangeli + */ #include #include #include #include #include -#include #include #include #include @@ -83,21 +89,17 @@ int sh_debug; /* Debug flag */ static int shaper_lock(struct shaper *sh) { - unsigned long flags; - save_flags(flags); - cli(); /* - * Lock in an interrupt may fail + * Lock in an interrupt must fail */ - if(sh->locked && in_interrupt()) + while (test_and_set_bit(0, &sh->locked)) { - restore_flags(flags); - return 0; + if (!in_interrupt()) + sleep_on(&sh->wait_queue); + else + return 0; + } - while(sh->locked) - sleep_on(&sh->wait_queue); - sh->locked=1; - restore_flags(flags); return 1; } @@ -105,7 +107,7 @@ static void shaper_kick(struct shaper *sh); static void shaper_unlock(struct shaper *sh) { - sh->locked=0; + clear_bit(0, &sh->locked); wake_up(&sh->wait_queue); shaper_kick(sh); } @@ -240,7 +242,6 @@ static int shaper_qframe(struct shaper *shaper, struct sk_buff *skb) dev_kfree_skb(ptr); } shaper_unlock(shaper); - shaper_kick(shaper); return 0; } @@ -285,24 +286,16 @@ static void shaper_timer(unsigned long data) static void shaper_kick(struct shaper *shaper) { struct sk_buff *skb; - unsigned long flags; - save_flags(flags); - cli(); - - del_timer(&shaper->timer); - /* * Shaper unlock will kick */ - if(shaper->locked) - { + if (test_and_set_bit(0, &shaper->locked)) + { if(sh_debug) printk("Shaper locked.\n"); - shaper->timer.expires=jiffies+1; - add_timer(&shaper->timer); - restore_flags(flags); + mod_timer(&shaper->timer, jiffies); return; } @@ -320,7 +313,7 @@ static void shaper_kick(struct shaper *shaper) if(sh_debug) printk("Clock = %d, jiffies = %ld\n", skb->shapeclock, jiffies); - if(skb->shapeclock - jiffies <= SHAPER_BURST) + if(time_before_eq(skb->shapeclock - jiffies, SHAPER_BURST)) { /* * Pull the frame and get interrupts back on. @@ -329,8 +322,6 @@ static void shaper_kick(struct shaper *shaper) skb_unlink(skb); if (shaper->recovery < skb->shapeclock + skb->shapelen) shaper->recovery = skb->shapeclock + skb->shapelen; - restore_flags(flags); - /* * Pass on to the physical target device via * our low level packet thrower. @@ -338,7 +329,6 @@ static void shaper_kick(struct shaper *shaper) skb->shapepend=0; shaper_queue_xmit(shaper, skb); /* Fire */ - cli(); } else break; @@ -349,17 +339,9 @@ static void shaper_kick(struct shaper *shaper) */ if(skb!=NULL) - { - del_timer(&shaper->timer); - shaper->timer.expires=skb->shapeclock; - add_timer(&shaper->timer); - } - - /* - * Interrupts on, mission complete - */ - - restore_flags(flags); + mod_timer(&shaper->timer, skb->shapeclock); + + clear_bit(0, &shaper->locked); } @@ -370,8 +352,14 @@ static void shaper_kick(struct shaper *shaper) static void shaper_flush(struct shaper *shaper) { struct sk_buff *skb; + if(!shaper_lock(shaper)) + { + printk(KERN_ERR "shaper: shaper_flush() called by an irq!\n"); + return; + } while((skb=skb_dequeue(&shaper->sendq))!=NULL) dev_kfree_skb(skb); + shaper_unlock(shaper); } /* @@ -405,7 +393,9 @@ static int shaper_close(struct device *dev) { struct shaper *shaper=dev->priv; shaper_flush(shaper); + start_bh_atomic(); del_timer(&shaper->timer); + end_bh_atomic(); MOD_DEC_USE_COUNT; return 0; } diff --git a/drivers/net/sk_g16.c b/drivers/net/sk_g16.c index ac6736cab..244df7544 100644 --- a/drivers/net/sk_g16.c +++ b/drivers/net/sk_g16.c @@ -733,7 +733,7 @@ __initfunc(int SK_probe(struct device *dev, short ioaddr)) SK_print_pos(dev, "POS registers after ROM, RAM config"); #endif - board = (SK_RAM *) rom_addr; + board = (SK_RAM *) bus_to_virt(rom_addr); /* Read in station address */ for (i = 0, j = 0; i < ETH_ALEN; i++, j+=2) diff --git a/drivers/net/smc-ultra.c b/drivers/net/smc-ultra.c index dbb30af09..560af8eee 100644 --- a/drivers/net/smc-ultra.c +++ b/drivers/net/smc-ultra.c @@ -2,7 +2,7 @@ /* This is a driver for the SMC Ultra and SMC EtherEZ ISA ethercards. - Written 1993-1996 by Donald Becker. + Written 1993-1998 by Donald Becker. Copyright 1993 United States Government as represented by the Director, National Security Agency. @@ -14,7 +14,7 @@ Center of Excellence in Space Data and Information Sciences Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771 - This driver uses the cards in the 8390-compatible, shared memory mode. + This driver uses the cards in the 8390-compatible mode. Most of the run-time complexity is handled by the generic code in 8390.c. The code in this file is responsible for @@ -27,6 +27,8 @@ ultra_block_input() Routines for reading and writing blocks of ultra_block_output() packet buffer memory. + ultra_pio_input() + ultra_pio_output() This driver enables the shared memory only when doing the actual data transfers to avoid a bug in early version of the card that corrupted @@ -34,7 +36,7 @@ This driver now supports the programmed-I/O (PIO) data transfer mode of the EtherEZ. It does not use the non-8390-compatible "Altego" mode. - That support (if available) is smc-ez.c. + That support (if available) is in smc-ez.c. Changelog: @@ -44,8 +46,7 @@ */ static const char *version = - "smc-ultra.c:v2.00 6/6/96 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n"; - + "smc-ultra.c:v2.02 2/3/98 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n"; #include @@ -75,13 +76,13 @@ static void ultra_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr, static void ultra_block_input(struct device *dev, int count, struct sk_buff *skb, int ring_offset); static void ultra_block_output(struct device *dev, int count, - const unsigned char *buf, int start_page); + const unsigned char *buf, const int start_page); static void ultra_pio_get_hdr(struct device *dev, struct e8390_pkt_hdr *hdr, int ring_page); static void ultra_pio_input(struct device *dev, int count, struct sk_buff *skb, int ring_offset); static void ultra_pio_output(struct device *dev, int count, - const unsigned char *buf, int start_page); + const unsigned char *buf, const int start_page); static int ultra_close_card(struct device *dev); @@ -155,11 +156,8 @@ __initfunc(int ultra_probe1(struct device *dev, int ioaddr)) if (load_8390_module("smc-ultra.c")) return -ENOSYS; - /* We should have a "dev" from Space.c or the static module table. */ - if (dev == NULL) { - printk("smc-ultra.c: Passed a NULL device.\n"); + if (dev == NULL) dev = init_etherdev(0, 0); - } if (ei_debug && version_printed++ == 0) printk(version); @@ -255,12 +253,19 @@ static int ultra_open(struct device *dev) { int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */ + unsigned char irq2reg[] = {0, 0, 0x04, 0x08, 0, 0x0C, 0, 0x40, + 0, 0x04, 0x44, 0x48, 0, 0, 0, 0x4C, }; if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev)) return -EAGAIN; outb(0x00, ioaddr); /* Disable shared memory for safety. */ outb(0x80, ioaddr + 5); + /* Set the IRQ line. */ + outb(inb(ioaddr + 4) | 0x80, ioaddr + 4); + outb((inb(ioaddr + 13) & ~0x4C) | irq2reg[dev->irq], ioaddr + 13); + outb(inb(ioaddr + 4) & 0x7f, ioaddr + 4); + if (ei_status.block_input == &ultra_pio_input) { outb(0x11, ioaddr + 6); /* Enable interrupts and PIO. */ outb(0x01, ioaddr + 0x19); /* Enable ring read auto-wrap. */ @@ -358,7 +363,7 @@ ultra_block_output(struct device *dev, int count, const unsigned char *buf, byte-sequentially to IOPA, with no intervening I/O operations, and the data is read or written to the IOPD data port. The only potential complication is that the address register is shared - must be always be rewritten between each read/write direction change. + and must be always be rewritten between each read/write direction change. This is no problem for us, as the 8390 code ensures that we are single threaded. */ static void ultra_pio_get_hdr(struct device *dev, struct e8390_pkt_hdr *hdr, @@ -379,20 +384,17 @@ static void ultra_pio_input(struct device *dev, int count, /* For now set the address again, although it should already be correct. */ outb(ring_offset, ioaddr + IOPA); /* Set the address, LSB first. */ outb(ring_offset >> 8, ioaddr + IOPA); + /* We know skbuffs are padded to at least word alignment. */ insw(ioaddr + IOPD, buf, (count+1)>>1); -#ifdef notdef - /* We don't need this -- skbuffs are padded to at least word alignment. */ - if (count & 0x01) { - buf[count-1] = inb(ioaddr + IOPD); -#endif } static void ultra_pio_output(struct device *dev, int count, - const unsigned char *buf, int start_page) + const unsigned char *buf, const int start_page) { int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */ outb(0x00, ioaddr + IOPA); /* Set the address, LSB first. */ outb(start_page, ioaddr + IOPA); + /* An extra odd byte is OK here as well. */ outsw(ioaddr + IOPD, buf, (count+1)>>1); } @@ -440,6 +442,8 @@ static int irq[MAX_ULTRA_CARDS] = { 0, }; MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ULTRA_CARDS) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_ULTRA_CARDS) "i"); +EXPORT_NO_SYMBOLS; + /* This is set up so that only a single autoprobe takes place per call. ISA device autoprobes on a running machine are not recommended. */ int @@ -459,15 +463,12 @@ init_module(void) } if (register_netdev(dev) != 0) { printk(KERN_WARNING "smc-ultra.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]); - if (found != 0) { /* Got at least one. */ - lock_8390_module(); - return 0; - } + if (found != 0) return 0; /* Got at least one. */ return -ENXIO; } found++; } - lock_8390_module(); + return 0; } @@ -479,15 +480,14 @@ cleanup_module(void) for (this_dev = 0; this_dev < MAX_ULTRA_CARDS; this_dev++) { struct device *dev = &dev_ultra[this_dev]; if (dev->priv != NULL) { + /* NB: ultra_close_card() does free_irq + irq2dev */ int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; - void *priv = dev->priv; - /* NB: ultra_close_card() does free_irq */ + kfree(dev->priv); + dev->priv = NULL; release_region(ioaddr, ULTRA_IO_EXTENT); unregister_netdev(dev); - kfree(priv); } } - unlock_8390_module(); } #endif /* MODULE */ @@ -498,6 +498,7 @@ cleanup_module(void) * version-control: t * kept-new-versions: 5 * c-indent-level: 4 + * c-basic-offset: 4 * tab-width: 4 * End: */ diff --git a/drivers/net/smc9194.c b/drivers/net/smc9194.c index 43cc54640..7f7a99ab7 100644 --- a/drivers/net/smc9194.c +++ b/drivers/net/smc9194.c @@ -65,7 +65,6 @@ static const char *version = #include #include #include -#include #include #include #include diff --git a/drivers/net/sunbmac.c b/drivers/net/sunbmac.c new file mode 100644 index 000000000..772f50649 --- /dev/null +++ b/drivers/net/sunbmac.c @@ -0,0 +1,1557 @@ +/* sunbmac.c: Driver for Sparc BigMAC 100baseT ethernet adapters. + * + * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu) + */ + +static char *version = + "sunbmac.c:v1.1 8/Dec/98 David S. Miller (davem@caipfs.rutgers.edu)\n"; + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "sunbmac.h" + +#undef DEBUG_PROBE +#undef DEBUG_TX +#undef DEBUG_IRQ + +#ifdef DEBUG_PROBE +#define DP(x) printk x +#else +#define DP(x) +#endif + +#ifdef DEBUG_TX +#define DTX(x) printk x +#else +#define DTX(x) +#endif + +#ifdef DEBUG_IRQ +#define DIRQ(x) printk x +#else +#define DIRQ(x) +#endif + +#ifdef MODULE +static struct bigmac *root_bigmac_dev = NULL; +#endif + +#define DEFAULT_JAMSIZE 4 /* Toe jam */ + +#define QEC_RESET_TRIES 200 + +static inline int qec_global_reset(struct qe_globreg *gregs) +{ + int tries = QEC_RESET_TRIES; + + gregs->ctrl = GLOB_CTRL_RESET; + while(--tries) { + if(gregs->ctrl & GLOB_CTRL_RESET) { + udelay(20); + continue; + } + break; + } + if(tries) + return 0; + printk("BigMAC: Cannot reset the QEC.\n"); + return -1; +} + +static void qec_init(struct bigmac *bp) +{ + struct qe_globreg *gregs = bp->gregs; + struct linux_sbus_device *qec_sdev = bp->qec_sbus_dev; + unsigned char bsizes = bp->bigmac_bursts; + unsigned int regval; + + /* 64byte bursts do not work at the moment, do + * not even try to enable them. -DaveM + */ + if(bsizes & DMA_BURST32) + regval = GLOB_CTRL_B32; + else + regval = GLOB_CTRL_B16; + gregs->ctrl = regval | GLOB_CTRL_BMODE; + + gregs->psize = GLOB_PSIZE_2048; + + /* All of memsize is given to bigmac. */ + gregs->msize = qec_sdev->reg_addrs[1].reg_size; + + /* Half to the transmitter, half to the receiver. */ + gregs->rsize = gregs->tsize = qec_sdev->reg_addrs[1].reg_size >> 1; +} + +/* XXX auto negotiation on these things might not be pleasant... */ + +#define TX_RESET_TRIES 32 +#define RX_RESET_TRIES 32 + +static inline void bigmac_tx_reset(struct BIG_MAC_regs *bregs) +{ + int tries = TX_RESET_TRIES; + + bregs->tx_cfg = 0; + + /* The fifo threshold bit is read-only and does + * not clear. -DaveM + */ + while((bregs->tx_cfg & ~(BIGMAC_TXCFG_FIFO)) != 0 && + --tries != 0) + udelay(20); + + if(!tries) { + printk("BIGMAC: Transmitter will not reset.\n"); + printk("BIGMAC: tx_cfg is %08x\n", bregs->tx_cfg); + } +} + +static inline void bigmac_rx_reset(struct BIG_MAC_regs *bregs) +{ + int tries = RX_RESET_TRIES; + + bregs->rx_cfg = 0; + while((bregs->rx_cfg) && --tries) + udelay(20); + + if(!tries) { + printk("BIGMAC: Receiver will not reset.\n"); + printk("BIGMAC: rx_cfg is %08x\n", bregs->rx_cfg); + } +} + +/* Reset the transmitter and receiver. */ +static void bigmac_stop(struct bigmac *bp) +{ + bigmac_tx_reset(bp->bregs); + bigmac_rx_reset(bp->bregs); +} + +static void bigmac_get_counters(struct bigmac *bp, struct BIG_MAC_regs *bregs) +{ + struct enet_statistics *stats = &bp->enet_stats; + + stats->rx_crc_errors += bregs->rcrce_ctr; + bregs->rcrce_ctr = 0; + + stats->rx_frame_errors += bregs->unale_ctr; + bregs->unale_ctr = 0; + + stats->rx_length_errors += bregs->gle_ctr; + bregs->gle_ctr = 0; + + stats->tx_aborted_errors += bregs->ex_ctr; + + stats->collisions += (bregs->ex_ctr + bregs->lt_ctr); + bregs->ex_ctr = bregs->lt_ctr = 0; +} + +static inline void bigmac_clean_rings(struct bigmac *bp) +{ + int i; + + for(i = 0; i < RX_RING_SIZE; i++) { + if(bp->rx_skbs[i] != NULL) { + dev_kfree_skb(bp->rx_skbs[i]); + bp->rx_skbs[i] = NULL; + } + } + + for(i = 0; i < TX_RING_SIZE; i++) { + if(bp->tx_skbs[i] != NULL) { + dev_kfree_skb(bp->tx_skbs[i]); + bp->tx_skbs[i] = NULL; + } + } +} + +static void bigmac_init_rings(struct bigmac *bp, int from_irq) +{ + struct bmac_init_block *bb = bp->bmac_block; + struct device *dev = bp->dev; + int i, gfp_flags = GFP_KERNEL; + + if(from_irq || in_interrupt()) + gfp_flags = GFP_ATOMIC; + + bp->rx_new = bp->rx_old = bp->tx_new = bp->tx_old = 0; + + /* Free any skippy bufs left around in the rings. */ + bigmac_clean_rings(bp); + + /* Now get new skippy bufs for the receive ring. */ + for(i = 0; i < RX_RING_SIZE; i++) { + struct sk_buff *skb; + + skb = big_mac_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags); + if(!skb) + continue; + + bp->rx_skbs[i] = skb; + skb->dev = dev; + + /* Because we reserve afterwards. */ + skb_put(skb, ETH_FRAME_LEN); + skb_reserve(skb, 34); + + bb->be_rxd[i].rx_addr = sbus_dvma_addr(skb->data); + bb->be_rxd[i].rx_flags = + (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); + } + + for(i = 0; i < TX_RING_SIZE; i++) + bb->be_txd[i].tx_flags = bb->be_txd[i].tx_addr = 0; +} + +#ifndef __sparc_v9__ +static void sun4c_bigmac_init_rings(struct bigmac *bp) +{ + struct bmac_init_block *bb = bp->bmac_block; + __u32 bbufs_dvma = bp->s4c_buf_dvma; + int i; + + bp->rx_new = bp->rx_old = bp->tx_new = bp->tx_old = 0; + + for(i = 0; i < RX_RING_SIZE; i++) { + bb->be_rxd[i].rx_addr = bbufs_dvma + bbuf_offset(rx_buf, i); + bb->be_rxd[i].rx_flags = + (RXD_OWN | (SUN4C_RX_BUFF_SIZE & RXD_LENGTH)); + } + + for(i = 0; i < TX_RING_SIZE; i++) + bb->be_txd[i].tx_flags = bb->be_txd[i].tx_addr = 0; +} +#endif + +#define MGMT_CLKON (MGMT_PAL_INT_MDIO|MGMT_PAL_EXT_MDIO|MGMT_PAL_OENAB|MGMT_PAL_DCLOCK) +#define MGMT_CLKOFF (MGMT_PAL_INT_MDIO|MGMT_PAL_EXT_MDIO|MGMT_PAL_OENAB) + +static inline void idle_transceiver(struct bmac_tcvr *tregs) +{ + volatile unsigned int garbage; + int i = 20; + + while(i--) { + tregs->mgmt_pal = MGMT_CLKOFF; + garbage = tregs->mgmt_pal; + tregs->mgmt_pal = MGMT_CLKON; + garbage = tregs->mgmt_pal; + } +} + +static void write_tcvr_bit(struct bigmac *bp, struct bmac_tcvr *tregs, int bit) +{ + volatile unsigned int garbage; + + if(bp->tcvr_type == internal) { + bit = (bit & 1) << 3; + tregs->mgmt_pal = bit | (MGMT_PAL_OENAB | MGMT_PAL_EXT_MDIO); + garbage = tregs->mgmt_pal; + tregs->mgmt_pal = bit | (MGMT_PAL_OENAB | + MGMT_PAL_EXT_MDIO | + MGMT_PAL_DCLOCK); + garbage = tregs->mgmt_pal; + } else if(bp->tcvr_type == external) { + bit = (bit & 1) << 2; + tregs->mgmt_pal = bit | (MGMT_PAL_INT_MDIO | MGMT_PAL_OENAB); + garbage = tregs->mgmt_pal; + tregs->mgmt_pal = bit | (MGMT_PAL_INT_MDIO | + MGMT_PAL_OENAB | + MGMT_PAL_DCLOCK); + garbage = tregs->mgmt_pal; + } else { + printk("write_tcvr_bit: No transceiver type known!\n"); + } +} + +static int read_tcvr_bit(struct bigmac *bp, struct bmac_tcvr *tregs) +{ + volatile unsigned int garbage; + int retval = 0; + + if(bp->tcvr_type == internal) { + tregs->mgmt_pal = MGMT_PAL_EXT_MDIO; + garbage = tregs->mgmt_pal; + tregs->mgmt_pal = MGMT_PAL_EXT_MDIO | MGMT_PAL_DCLOCK; + garbage = tregs->mgmt_pal; + retval = (tregs->mgmt_pal & MGMT_PAL_INT_MDIO) >> 3; + } else if(bp->tcvr_type == external) { + tregs->mgmt_pal = MGMT_PAL_INT_MDIO; + garbage = tregs->mgmt_pal; + tregs->mgmt_pal = MGMT_PAL_INT_MDIO | MGMT_PAL_DCLOCK; + garbage = tregs->mgmt_pal; + retval = (tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) >> 2; + } else { + printk("read_tcvr_bit: No transceiver type known!\n"); + } + return retval; +} + +static int read_tcvr_bit2(struct bigmac *bp, struct bmac_tcvr *tregs) +{ + volatile unsigned int garbage; + int retval = 0; + + if(bp->tcvr_type == internal) { + tregs->mgmt_pal = MGMT_PAL_EXT_MDIO; + garbage = tregs->mgmt_pal; + retval = (tregs->mgmt_pal & MGMT_PAL_INT_MDIO) >> 3; + tregs->mgmt_pal = (MGMT_PAL_EXT_MDIO | MGMT_PAL_DCLOCK); + garbage = tregs->mgmt_pal; + } else if(bp->tcvr_type == external) { + tregs->mgmt_pal = MGMT_PAL_INT_MDIO; + garbage = tregs->mgmt_pal; + retval = (tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) >> 2; + tregs->mgmt_pal = (MGMT_PAL_INT_MDIO | MGMT_PAL_DCLOCK); + garbage = tregs->mgmt_pal; + } else { + printk("read_tcvr_bit2: No transceiver type known!\n"); + } + return retval; +} + +static inline void put_tcvr_byte(struct bigmac *bp, + struct bmac_tcvr *tregs, + unsigned int byte) +{ + int shift = 4; + + do { + write_tcvr_bit(bp, tregs, ((byte >> shift) & 1)); + shift -= 1; + } while (shift >= 0); +} + +static void bigmac_tcvr_write(struct bigmac *bp, struct bmac_tcvr *tregs, + int reg, unsigned short val) +{ + int shift; + + reg &= 0xff; + val &= 0xffff; + switch(bp->tcvr_type) { + case internal: + case external: + break; + + default: + printk("bigmac_tcvr_read: Whoops, no known transceiver type.\n"); + return; + }; + + idle_transceiver(tregs); + write_tcvr_bit(bp, tregs, 0); + write_tcvr_bit(bp, tregs, 1); + write_tcvr_bit(bp, tregs, 0); + write_tcvr_bit(bp, tregs, 1); + + put_tcvr_byte(bp, tregs, + ((bp->tcvr_type == internal) ? + BIGMAC_PHY_INTERNAL : BIGMAC_PHY_EXTERNAL)); + + put_tcvr_byte(bp, tregs, reg); + + write_tcvr_bit(bp, tregs, 1); + write_tcvr_bit(bp, tregs, 0); + + shift = 15; + do { + write_tcvr_bit(bp, tregs, (val >> shift) & 1); + shift -= 1; + } while(shift >= 0); +} + +static unsigned short bigmac_tcvr_read(struct bigmac *bp, + struct bmac_tcvr *tregs, + int reg) +{ + unsigned short retval = 0; + + reg &= 0xff; + switch(bp->tcvr_type) { + case internal: + case external: + break; + + default: + printk("bigmac_tcvr_read: Whoops, no known transceiver type.\n"); + return 0xffff; + }; + + idle_transceiver(tregs); + write_tcvr_bit(bp, tregs, 0); + write_tcvr_bit(bp, tregs, 1); + write_tcvr_bit(bp, tregs, 1); + write_tcvr_bit(bp, tregs, 0); + + put_tcvr_byte(bp, tregs, + ((bp->tcvr_type == internal) ? + BIGMAC_PHY_INTERNAL : BIGMAC_PHY_EXTERNAL)); + + put_tcvr_byte(bp, tregs, reg); + + if(bp->tcvr_type == external) { + int shift = 15; + + (void) read_tcvr_bit2(bp, tregs); + (void) read_tcvr_bit2(bp, tregs); + + do { + int tmp; + + tmp = read_tcvr_bit2(bp, tregs); + retval |= ((tmp & 1) << shift); + shift -= 1; + } while(shift >= 0); + + (void) read_tcvr_bit2(bp, tregs); + (void) read_tcvr_bit2(bp, tregs); + (void) read_tcvr_bit2(bp, tregs); + } else { + int shift = 15; + + (void) read_tcvr_bit(bp, tregs); + (void) read_tcvr_bit(bp, tregs); + + do { + int tmp; + + tmp = read_tcvr_bit(bp, tregs); + retval |= ((tmp & 1) << shift); + shift -= 1; + } while(shift >= 0); + + (void) read_tcvr_bit(bp, tregs); + (void) read_tcvr_bit(bp, tregs); + (void) read_tcvr_bit(bp, tregs); + } + return retval; +} + +static void bigmac_tcvr_init(struct bigmac *bp) +{ + volatile unsigned int garbage; + struct bmac_tcvr *tregs = bp->tregs; + + idle_transceiver(tregs); + tregs->mgmt_pal = (MGMT_PAL_INT_MDIO | + MGMT_PAL_EXT_MDIO | + MGMT_PAL_DCLOCK); + garbage = tregs->mgmt_pal; + + /* Only the bit for the present transceiver (internal or + * external) will stick, set them both and see what stays. + */ + tregs->mgmt_pal = (MGMT_PAL_INT_MDIO | + MGMT_PAL_EXT_MDIO); + garbage = tregs->mgmt_pal; + udelay(20); + + if(tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) { + bp->tcvr_type = external; + tregs->tcvr_pal = ~(TCVR_PAL_EXTLBACK | + TCVR_PAL_MSENSE | + TCVR_PAL_LTENABLE); + garbage = tregs->tcvr_pal; + } else if(tregs->mgmt_pal & MGMT_PAL_INT_MDIO) { + bp->tcvr_type = internal; + tregs->tcvr_pal = ~(TCVR_PAL_SERIAL | + TCVR_PAL_EXTLBACK | + TCVR_PAL_MSENSE | + TCVR_PAL_LTENABLE); + garbage = tregs->tcvr_pal; + } else { + printk("BIGMAC: AIEEE, neither internal nor " + "external MDIO available!\n"); + printk("BIGMAC: mgmt_pal[%08x] tcvr_pal[%08x]\n", + tregs->mgmt_pal, tregs->tcvr_pal); + } +} + +static int bigmac_init(struct bigmac *, int); + +static int try_next_permutation(struct bigmac *bp, struct bmac_tcvr *tregs) +{ + if(bp->sw_bmcr & BMCR_SPEED100) { + int timeout; + + /* Reset the PHY. */ + bp->sw_bmcr = (BMCR_ISOLATE | BMCR_PDOWN | BMCR_LOOPBACK); + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + bp->sw_bmcr = (BMCR_RESET); + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + + timeout = 64; + while(--timeout) { + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + if((bp->sw_bmcr & BMCR_RESET) == 0) + break; + udelay(20); + } + if(timeout == 0) + printk("%s: PHY reset failed.\n", bp->dev->name); + + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + + /* Now we try 10baseT. */ + bp->sw_bmcr &= ~(BMCR_SPEED100); + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + return 0; + } + + /* We've tried them all. */ + return -1; +} + +static void bigmac_timer(unsigned long data) +{ + struct bigmac *bp = (struct bigmac *) data; + struct bmac_tcvr *tregs = bp->tregs; + int restart_timer = 0; + + bp->timer_ticks++; + if(bp->timer_state == ltrywait) { + bp->sw_bmsr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMSR); + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + if(bp->sw_bmsr & BMSR_LSTATUS) { + printk("%s: Link is now up at %s.\n", + bp->dev->name, + (bp->sw_bmcr & BMCR_SPEED100) ? + "100baseT" : "10baseT"); + bp->timer_state = asleep; + restart_timer = 0; + } else { + if(bp->timer_ticks >= 4) { + int ret; + + ret = try_next_permutation(bp, tregs); + if(ret == -1) { + printk("%s: Link down, cable problem?\n", + bp->dev->name); + ret = bigmac_init(bp, 0); + if(ret) { + printk("%s: Error, cannot re-init the " + "BigMAC.\n", bp->dev->name); + } + return; + } + bp->timer_ticks = 0; + restart_timer = 1; + } else { + restart_timer = 1; + } + } + } else { + /* Can't happens.... */ + printk("%s: Aieee, link timer is asleep but we got one anyways!\n", + bp->dev->name); + restart_timer = 0; + bp->timer_ticks = 0; + bp->timer_state = asleep; /* foo on you */ + } + + if(restart_timer != 0) { + bp->bigmac_timer.expires = jiffies + ((12 * HZ)/10); /* 1.2 sec. */ + add_timer(&bp->bigmac_timer); + } +} + +/* Well, really we just force the chip into 100baseT then + * 10baseT, each time checking for a link status. + */ +static void bigmac_begin_auto_negotiation(struct bigmac *bp) +{ + struct bmac_tcvr *tregs = bp->tregs; + int timeout; + + /* Grab new software copies of PHY registers. */ + bp->sw_bmsr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMSR); + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + + /* Reset the PHY. */ + bp->sw_bmcr = (BMCR_ISOLATE | BMCR_PDOWN | BMCR_LOOPBACK); + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + bp->sw_bmcr = (BMCR_RESET); + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + + timeout = 64; + while(--timeout) { + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + if((bp->sw_bmcr & BMCR_RESET) == 0) + break; + udelay(20); + } + if(timeout == 0) + printk("%s: PHY reset failed.\n", bp->dev->name); + + bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR); + + /* First we try 100baseT. */ + bp->sw_bmcr |= BMCR_SPEED100; + bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr); + + bp->timer_state = ltrywait; + bp->timer_ticks = 0; + bp->bigmac_timer.expires = jiffies + (12 * HZ) / 10; + bp->bigmac_timer.data = (unsigned long) bp; + bp->bigmac_timer.function = &bigmac_timer; + add_timer(&bp->bigmac_timer); +} + +static int bigmac_init(struct bigmac *bp, int from_irq) +{ + struct qe_globreg *gregs = bp->gregs; + struct qe_creg *cregs = bp->creg; + struct BIG_MAC_regs *bregs = bp->bregs; + unsigned char *e = &bp->dev->dev_addr[0]; + + /* Latch current counters into statistics. */ + bigmac_get_counters(bp, bregs); + + /* Reset QEC. */ + qec_global_reset(gregs); + + /* Init QEC. */ + qec_init(bp); + + /* Alloc and reset the tx/rx descriptor chains. */ +#ifndef __sparc_v9__ + if(sparc_cpu_model == sun4c) + sun4c_bigmac_init_rings(bp); + else +#endif + bigmac_init_rings(bp, from_irq); + + /* Initialize the PHY. */ + bigmac_tcvr_init(bp); + + /* Stop transmitter and receiver. */ + bigmac_stop(bp); + + /* Set hardware ethernet address. */ + bregs->mac_addr2 = ((e[4] << 8) | e[5]); + bregs->mac_addr1 = ((e[2] << 8) | e[3]); + bregs->mac_addr0 = ((e[0] << 8) | e[1]); + + /* Clear the hash table until mc upload occurs. */ + bregs->htable3 = 0; + bregs->htable2 = 0; + bregs->htable1 = 0; + bregs->htable0 = 0; + + /* Enable Big Mac hash table filter. */ + bregs->rx_cfg = (BIGMAC_RXCFG_HENABLE | BIGMAC_RXCFG_FIFO); + + udelay(20); + + /* Ok, configure the Big Mac transmitter. */ + bregs->tx_cfg = BIGMAC_TXCFG_FIFO; + + /* The HME docs recommend to use the 10LSB of our MAC here. */ + bregs->rand_seed = ((e[5] | e[4] << 8) & 0x3ff); + + /* Enable the output drivers no matter what. */ + bregs->xif_cfg = (BIGMAC_XCFG_ODENABLE | BIGMAC_XCFG_RESV); + + /* Tell the QEC where the ring descriptors are. */ + cregs->rxds = bp->bblock_dvma + bib_offset(be_rxd, 0); + cregs->txds = bp->bblock_dvma + bib_offset(be_txd, 0); + + /* Setup the FIFO pointers into QEC local memory. */ + cregs->rxwbufptr = cregs->rxrbufptr = 0; + cregs->txwbufptr = cregs->txrbufptr = gregs->rsize; + + /* Tell bigmac what interrupts we don't want to hear about. */ + bregs->imask = (BIGMAC_IMASK_GOTFRAME | BIGMAC_IMASK_SENTFRAME); + + /* Enable the various other irq's. */ + cregs->rimask = 0; + cregs->timask = 0; + cregs->qmask = 0; + cregs->bmask = 0; + + /* Set jam size to a reasonable default. */ + bregs->jsize = DEFAULT_JAMSIZE; + + /* Clear collision counter. */ + cregs->ccnt = 0; + + /* Enable transmitter and receiver. */ + bregs->tx_cfg |= BIGMAC_TXCFG_ENABLE; + bregs->rx_cfg |= BIGMAC_RXCFG_ENABLE; + + /* Ok, start detecting link speed/duplex. */ + bigmac_begin_auto_negotiation(bp); + + /* Success. */ + return 0; +} + +/* Error interrupts get sent here. */ +static void bigmac_is_medium_rare(struct bigmac *bp, + unsigned int qec_status, + unsigned int bmac_status) +{ + printk("bigmac_is_medium_rare: "); + if(qec_status & (GLOB_STAT_ER | GLOB_STAT_BM)) { + if(qec_status & GLOB_STAT_ER) + printk("QEC_ERROR, "); + if(qec_status & GLOB_STAT_BM) + printk("QEC_BMAC_ERROR, "); + } + if(bmac_status & CREG_STAT_ERRORS) { + if(bmac_status & CREG_STAT_BERROR) + printk("BMAC_ERROR, "); + if(bmac_status & CREG_STAT_TXDERROR) + printk("TXD_ERROR, "); + if(bmac_status & CREG_STAT_TXLERR) + printk("TX_LATE_ERROR, "); + if(bmac_status & CREG_STAT_TXPERR) + printk("TX_PARITY_ERROR, "); + if(bmac_status & CREG_STAT_TXSERR) + printk("TX_SBUS_ERROR, "); + + if(bmac_status & CREG_STAT_RXDROP) + printk("RX_DROP_ERROR, "); + + if(bmac_status & CREG_STAT_RXSMALL) + printk("RX_SMALL_ERROR, "); + if(bmac_status & CREG_STAT_RXLERR) + printk("RX_LATE_ERROR, "); + if(bmac_status & CREG_STAT_RXPERR) + printk("RX_PARITY_ERROR, "); + if(bmac_status & CREG_STAT_RXSERR) + printk("RX_SBUS_ERROR, "); + } + + printk(" RESET\n"); + bigmac_init(bp, 1); +} + +/* BigMAC transmit complete service routines. */ +static inline void bigmac_tx(struct bigmac *bp) +{ + struct be_txd *txbase = &bp->bmac_block->be_txd[0]; + struct be_txd *this; + int elem = bp->tx_old; + + DTX(("bigmac_tx: tx_old[%d] ", elem)); + while(elem != bp->tx_new) { + struct sk_buff *skb; + + this = &txbase[elem]; + + DTX(("this(%p) [flags(%08x)addr(%08x)]", + this, this->tx_flags, this->tx_addr)); + + if(this->tx_flags & TXD_OWN) + break; + skb = bp->tx_skbs[elem]; + DTX(("skb(%p) ", skb)); + bp->tx_skbs[elem] = NULL; + dev_kfree_skb(skb); + + bp->enet_stats.tx_packets++; + elem = NEXT_TX(elem); + } + DTX((" DONE, tx_old=%d\n", elem)); + bp->tx_old = elem; +} + +#ifndef __sparc_v9__ +static inline void sun4c_bigmac_tx(struct bigmac *bp) +{ + struct be_txd *txbase = &bp->bmac_block->be_txd[0]; + struct be_txd *this; + int elem = bp->tx_old; + + while(elem != bp->tx_new) { + this = &txbase[elem]; + if(this->tx_flags & TXD_OWN) + break; + bp->enet_stats.tx_packets++; + elem = NEXT_TX(elem); + } + bp->tx_old = elem; +} +#endif + +/* BigMAC receive complete service routines. */ +static inline void bigmac_rx(struct bigmac *bp) +{ + struct be_rxd *rxbase = &bp->bmac_block->be_rxd[0]; + struct be_rxd *this; + int elem = bp->rx_new, drops = 0; + + this = &rxbase[elem]; + while(!(this->rx_flags & RXD_OWN)) { + struct sk_buff *skb; + unsigned int flags = this->rx_flags; + int len = (flags & RXD_LENGTH); /* FCS not included */ + + /* Check for errors. */ + if(len < ETH_ZLEN) { + bp->enet_stats.rx_errors++; + bp->enet_stats.rx_length_errors++; + + drop_it: + /* Return it to the BigMAC. */ + bp->enet_stats.rx_dropped++; + this->rx_addr = sbus_dvma_addr(bp->rx_skbs[elem]->data); + this->rx_flags = + (RXD_OWN | (RX_BUF_ALLOC_SIZE & RXD_LENGTH)); + goto next; + } + skb = bp->rx_skbs[elem]; +#ifdef NEED_DMA_SYNCHRONIZATION +#ifdef __sparc_v9__ + if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) { + printk("sunbmac: Bogus DMA buffer address " + "[%016lx]\n", ((unsigned long) skb->data)); + panic("DMA address too large, tell DaveM"); + } +#endif + mmu_sync_dma(sbus_dvma_addr(skb->data), + skb->len, bp->bigmac_sbus_dev->my_bus); +#endif + if(len > RX_COPY_THRESHOLD) { + struct sk_buff *new_skb; + + /* Now refill the entry, if we can. */ + new_skb = big_mac_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC); + if(!new_skb) { + drops++; + goto drop_it; + } + bp->rx_skbs[elem] = new_skb; + new_skb->dev = bp->dev; + skb_put(new_skb, ETH_FRAME_LEN); + skb_reserve(new_skb, 34); + rxbase[elem].rx_addr = sbus_dvma_addr(new_skb->data); + rxbase[elem].rx_flags = + (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); + + /* Trim the original skb for the netif. */ + skb_trim(skb, len); + } else { + struct sk_buff *copy_skb = dev_alloc_skb(len + 2); + + if(!copy_skb) { + drops++; + goto drop_it; + } + copy_skb->dev = bp->dev; + skb_reserve(copy_skb, 2); + skb_put(copy_skb, len); + eth_copy_and_sum(copy_skb, (unsigned char *)skb->data, len, 0); + + /* Reuse otiginal ring buffer. */ + rxbase[elem].rx_addr = sbus_dvma_addr(skb->data); + rxbase[elem].rx_flags = + (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); + + skb = copy_skb; + } + + /* No checksums done by the BigMAC ;-( */ + skb->protocol = eth_type_trans(skb, bp->dev); + netif_rx(skb); + bp->enet_stats.rx_packets++; + next: + elem = NEXT_RX(elem); + this = &rxbase[elem]; + } + bp->rx_new = elem; + if(drops) + printk("%s: Memory squeeze, deferring packet.\n", bp->dev->name); +} + +#ifndef __sparc_v9__ +static inline void sun4c_bigmac_rx(struct bigmac *bp) +{ + struct be_rxd *rxbase = &bp->bmac_block->be_rxd[0]; + struct be_rxd *this; + struct bigmac_buffers *bbufs = bp->sun4c_buffers; + __u32 bbufs_dvma = bp->s4c_buf_dvma; + int elem = bp->rx_new, drops = 0; + + this = &rxbase[elem]; + while(!(this->rx_flags & RXD_OWN)) { + struct sk_buff *skb; + unsigned char *this_bbuf = + bbufs->rx_buf[elem & (SUN4C_RX_RING_SIZE - 1)]; + __u32 this_bbuf_dvma = bbufs_dvma + + bbuf_offset(rx_buf, (elem & (SUN4C_RX_RING_SIZE - 1))); + struct be_rxd *end_rxd = + &rxbase[(elem+SUN4C_RX_RING_SIZE)&(RX_RING_SIZE-1)]; + unsigned int flags = this->rx_flags; + int len = (flags & RXD_LENGTH) - 4; /* FCS not included */ + + /* Check for errors. */ + if(len < ETH_ZLEN) { + bp->enet_stats.rx_errors++; + bp->enet_stats.rx_length_errors++; + bp->enet_stats.rx_dropped++; + } else { + skb = dev_alloc_skb(len + 2); + if(skb == 0) { + drops++; + bp->enet_stats.rx_dropped++; + } else { + skb->dev = bp->dev; + skb_reserve(skb, 2); + skb_put(skb, len); + eth_copy_and_sum(skb, (unsigned char *)this_bbuf, + len, 0); + skb->protocol = eth_type_trans(skb, bp->dev); + netif_rx(skb); + bp->enet_stats.rx_packets++; + } + } + end_rxd->rx_addr = this_bbuf_dvma; + end_rxd->rx_flags = (RXD_OWN | (SUN4C_RX_BUFF_SIZE & RXD_LENGTH)); + + elem = NEXT_RX(elem); + this = &rxbase[elem]; + } + bp->rx_new = elem; + if(drops) + printk("%s: Memory squeeze, deferring packet.\n", bp->dev->name); +} +#endif + +static void bigmac_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct bigmac *bp = (struct bigmac *) dev_id; + unsigned int qec_status, bmac_status; + + DIRQ(("bigmac_interrupt: ")); + + /* Latch status registers now. */ + bmac_status = bp->creg->stat; + qec_status = bp->gregs->stat; + + bp->dev->interrupt = 1; + + DIRQ(("qec_status=%08x bmac_status=%08x\n", qec_status, bmac_status)); + if((qec_status & (GLOB_STAT_ER | GLOB_STAT_BM)) || + (bmac_status & CREG_STAT_ERRORS)) + bigmac_is_medium_rare(bp, qec_status, bmac_status); + + if(bmac_status & CREG_STAT_TXIRQ) + bigmac_tx(bp); + + if(bmac_status & CREG_STAT_RXIRQ) + bigmac_rx(bp); + + if(bp->dev->tbusy && (TX_BUFFS_AVAIL(bp) >= 0)) { + bp->dev->tbusy = 0; + mark_bh(NET_BH); + } + + bp->dev->interrupt = 0; +} + +#ifndef __sparc_v9__ +static void sun4c_bigmac_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct bigmac *bp = (struct bigmac *) dev_id; + unsigned int qec_status, bmac_status; + + /* Latch status registers now. */ + bmac_status = bp->creg->stat; + qec_status = bp->gregs->stat; + + bp->dev->interrupt = 1; + + if(qec_status & (GLOB_STAT_ER | GLOB_STAT_BM) || + (bmac_status & CREG_STAT_ERRORS)) + bigmac_is_medium_rare(bp, qec_status, bmac_status); + + if(bmac_status & CREG_STAT_TXIRQ) + sun4c_bigmac_tx(bp); + + if(bmac_status & CREG_STAT_RXIRQ) + sun4c_bigmac_rx(bp); + + if(bp->dev->tbusy && (SUN4C_TX_BUFFS_AVAIL(bp) >= 0)) { + bp->dev->tbusy = 0; + mark_bh(NET_BH); + } + + bp->dev->interrupt = 0; +} +#endif + +static int bigmac_open(struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + int res; + +#ifndef __sparc_v9__ + if(sparc_cpu_model == sun4c) { + if(request_irq(dev->irq, &sun4c_bigmac_interrupt, + SA_SHIRQ, "BIG MAC", (void *) bp)) { + printk("BIGMAC: Can't order irq %d to go.\n", dev->irq); + return -EAGAIN; + } + } else +#endif + if(request_irq(dev->irq, &bigmac_interrupt, + SA_SHIRQ, "BIG MAC", (void *) bp)) { + printk("BIGMAC: Can't order irq %d to go.\n", dev->irq); + return -EAGAIN; + } + init_timer(&bp->bigmac_timer); + res = bigmac_init(bp, 0); + if(!res) { + MOD_INC_USE_COUNT; + } + return res; +} + +static int bigmac_close(struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + + del_timer(&bp->bigmac_timer); + bp->timer_state = asleep; + bp->timer_ticks = 0; + + bigmac_stop(bp); + bigmac_clean_rings(bp); + free_irq(dev->irq, (void *)bp); + MOD_DEC_USE_COUNT; + return 0; +} + +/* Put a packet on the wire. */ +static int bigmac_start_xmit(struct sk_buff *skb, struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + int len, entry; + + if(dev->tbusy) { + int tickssofar = jiffies - dev->trans_start; + + if (tickssofar < 40) { + return 1; + } else { + printk ("%s: transmit timed out, resetting\n", dev->name); + bp->enet_stats.tx_errors++; + bigmac_init(bp, 0); + dev->tbusy = 0; + dev->trans_start = jiffies; + dev_kfree_skb(skb); + return 0; + } + } + + if(test_and_set_bit(0, (void *) &dev->tbusy) != 0) { + printk("%s: Transmitter access conflict.\n", dev->name); + return 1; + } + + if(!TX_BUFFS_AVAIL(bp)) + return 1; + +#ifdef NEED_DMA_SYNCHRONIZATION +#ifdef __sparc_v9__ + if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) { + struct sk_buff *new_skb = skb_copy(skb, GFP_DMA | GFP_ATOMIC); + if(!new_skb) + return 1; + dev_kfree_skb(skb); + skb = new_skb; + } +#endif + mmu_sync_dma(sbus_dvma_addr(skb->data), + skb->len, bp->bigmac_sbus_dev->my_bus); +#endif + len = skb->len; + entry = bp->tx_new; + DTX(("bigmac_start_xmit: len(%d) entry(%d)\n", len, entry)); + + /* Avoid a race... */ + bp->bmac_block->be_txd[entry].tx_flags = TXD_UPDATE; + + bp->tx_skbs[entry] = skb; + bp->bmac_block->be_txd[entry].tx_addr = sbus_dvma_addr(skb->data); + bp->bmac_block->be_txd[entry].tx_flags = + (TXD_OWN | TXD_SOP | TXD_EOP | (len & TXD_LENGTH)); + dev->trans_start = jiffies; + bp->tx_new = NEXT_TX(entry); + + /* Get it going. */ + bp->creg->ctrl = CREG_CTRL_TWAKEUP; + + if(TX_BUFFS_AVAIL(bp)) + dev->tbusy = 0; + + return 0; +} + +#ifndef __sparc_v9__ +static int sun4c_bigmac_start_xmit(struct sk_buff *skb, struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + struct bigmac_buffers *bbufs = bp->sun4c_buffers; + __u32 txbuf_dvma, bbufs_dvma = bp->s4c_buf_dvma; + unsigned char *txbuf; + int len, entry; + + if(dev->tbusy) { + int tickssofar = jiffies - dev->trans_start; + + if (tickssofar < 40) { + return 1; + } else { + printk ("%s: transmit timed out, resetting\n", dev->name); + bp->enet_stats.tx_errors++; + bigmac_init(bp, 0); + dev->tbusy = 0; + dev->trans_start = jiffies; + return 0; + } + } + + if(test_and_set_bit(0, (void *) &dev->tbusy) != 0) { + printk("%s: Transmitter access conflict.\n", dev->name); + return 1; + } + + if(!SUN4C_TX_BUFFS_AVAIL(bp)) + return 1; + + len = skb->len; + entry = bp->tx_new; + + txbuf = &bbufs->tx_buf[entry][0]; + txbuf_dvma = bbufs_dvma + bbuf_offset(tx_buf, entry); + memcpy(txbuf, skb->data, len); + + /* Avoid a race... */ + bp->bmac_block->be_txd[entry].tx_flags = TXD_UPDATE; + + bp->bmac_block->be_txd[entry].tx_addr = txbuf_dvma; + bp->bmac_block->be_txd[entry].tx_flags = + (TXD_OWN | TXD_SOP | TXD_EOP | (len & TXD_LENGTH)); + bp->tx_new = NEXT_TX(entry); + + /* Get it going. */ + dev->trans_start = jiffies; + bp->creg->ctrl = CREG_CTRL_TWAKEUP; + + dev_kfree_skb(skb); + + if(SUN4C_TX_BUFFS_AVAIL(bp)) + dev->tbusy = 0; + + return 0; +} +#endif + +static struct enet_statistics *bigmac_get_stats(struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + + bigmac_get_counters(bp, bp->bregs); + return &bp->enet_stats; +} + +#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */ +#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */ + +static void bigmac_set_multicast(struct device *dev) +{ + struct bigmac *bp = (struct bigmac *) dev->priv; + struct BIG_MAC_regs *bregs = bp->bregs; + struct dev_mc_list *dmi = dev->mc_list; + char *addrs; + int i, j, bit, byte; + u32 crc, poly = CRC_POLYNOMIAL_LE; + + /* Disable the receiver. The bit self-clears when + * the operation is complete. + */ + bregs->rx_cfg &= ~(BIGMAC_RXCFG_ENABLE); + while((bregs->rx_cfg & BIGMAC_RXCFG_ENABLE) != 0) + udelay(20); + + if((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) { + bregs->htable0 = 0xffff; + bregs->htable1 = 0xffff; + bregs->htable2 = 0xffff; + bregs->htable3 = 0xffff; + } else if(dev->flags & IFF_PROMISC) { + bregs->rx_cfg |= BIGMAC_RXCFG_PMISC; + } else { + u16 hash_table[4]; + + for(i = 0; i < 4; i++) + hash_table[i] = 0; + + for(i = 0; i < dev->mc_count; i++) { + addrs = dmi->dmi_addr; + dmi = dmi->next; + + if(!(*addrs & 1)) + continue; + + crc = 0xffffffffU; + for(byte = 0; byte < 6; byte++) { + for(bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) { + int test; + + test = ((bit ^ crc) & 0x01); + crc >>= 1; + if(test) + crc = crc ^ poly; + } + } + crc >>= 26; + hash_table[crc >> 4] |= 1 << (crc & 0xf); + } + bregs->htable0 = hash_table[0]; + bregs->htable1 = hash_table[1]; + bregs->htable2 = hash_table[2]; + bregs->htable3 = hash_table[3]; + } + + /* Re-enable the receiver. */ + bregs->rx_cfg |= BIGMAC_RXCFG_ENABLE; +} + +__initfunc(static int bigmac_ether_init(struct device *dev, struct linux_sbus_device *qec_sdev)) +{ + static unsigned version_printed = 0; + struct bigmac *bp = 0; + unsigned char bsizes, bsizes_more; + int i, j, num_qranges, res = ENOMEM; + struct linux_prom_ranges qranges[8]; + + /* Get a new device struct for this interface. */ + dev = init_etherdev(0, sizeof(struct bigmac)); + + if(version_printed++ == 0) + printk(version); + + /* Report what we have found to the user. */ + printk("%s: BigMAC 100baseT Ethernet ", dev->name); + dev->base_addr = (long) qec_sdev; + for(i = 0; i < 6; i++) + printk("%2.2x%c", dev->dev_addr[i] = idprom->id_ethaddr[i], + i == 5 ? ' ' : ':'); + printk("\n"); + + /* Setup softc, with backpointers to QEC and BigMAC SBUS device structs. */ + bp = (struct bigmac *) dev->priv; + bp->qec_sbus_dev = qec_sdev; + bp->bigmac_sbus_dev = qec_sdev->child; + + /* All further failures we find return this. */ + res = ENODEV; + + /* Verify the registers we expect, are actually there. */ + if((bp->bigmac_sbus_dev->num_registers != 3) || + (bp->qec_sbus_dev->num_registers != 2)) { + printk("BIGMAC: Device does not have 2 and 3 regs, it has %d and %d.\n", + bp->qec_sbus_dev->num_registers, + bp->bigmac_sbus_dev->num_registers); + printk("BIGMAC: Would you like that for here or to go?\n"); + goto fail_and_cleanup; + } + + /* Fun with QEC ranges... */ + if(bp->bigmac_sbus_dev->ranges_applied == 0) { + i = prom_getproperty(bp->qec_sbus_dev->prom_node, "ranges", + (char *)&qranges[0], sizeof(qranges)); + num_qranges = (i / sizeof(struct linux_prom_ranges)); + + /* Now, apply all the ranges for the BigMAC. */ + for(j = 0; j < bp->bigmac_sbus_dev->num_registers; j++) { + int k; + + for(k = 0; k < num_qranges; k++) + if(bp->bigmac_sbus_dev->reg_addrs[j].which_io == + qranges[k].ot_child_space) + break; + if(k >= num_qranges) { + printk("BigMAC: Aieee, bogus QEC range for space %08x\n", + bp->bigmac_sbus_dev->reg_addrs[j].which_io); + goto fail_and_cleanup; + } + bp->bigmac_sbus_dev->reg_addrs[j].which_io = qranges[k].ot_parent_space; + bp->bigmac_sbus_dev->reg_addrs[j].phys_addr += qranges[k].ot_parent_base; + } + + /* Next, apply SBUS ranges on top of what we just changed. */ + prom_apply_sbus_ranges(bp->bigmac_sbus_dev->my_bus, + &bp->bigmac_sbus_dev->reg_addrs[0], + bp->bigmac_sbus_dev->num_registers, + bp->bigmac_sbus_dev); + } + + /* Apply SBUS ranges for the QEC parent. */ + prom_apply_sbus_ranges(bp->qec_sbus_dev->my_bus, + &bp->qec_sbus_dev->reg_addrs[0], + bp->qec_sbus_dev->num_registers, + bp->qec_sbus_dev); + + /* Map in QEC global control registers. */ + bp->gregs = sparc_alloc_io(bp->qec_sbus_dev->reg_addrs[0].phys_addr, + 0, + sizeof(struct qe_globreg), + "BigMAC QEC Global Regs", + bp->qec_sbus_dev->reg_addrs[0].which_io, + 0); + if(!bp->gregs) { + printk("BIGMAC: Cannot map QEC global registers.\n"); + goto fail_and_cleanup; + } + + /* Make sure QEC is in BigMAC mode. */ + if((bp->gregs->ctrl & 0xf0000000) != GLOB_CTRL_BMODE) { + printk("BigMAC: AIEEE, QEC is not in BigMAC mode!\n"); + goto fail_and_cleanup; + } + + /* Reset the QEC. */ + if(qec_global_reset(bp->gregs)) + goto fail_and_cleanup; + + /* Get supported SBUS burst sizes. */ + bsizes = prom_getintdefault(bp->qec_sbus_dev->prom_node, + "burst-sizes", + 0xff); + + bsizes_more = prom_getintdefault(bp->qec_sbus_dev->my_bus->prom_node, + "burst-sizes", + 0xff); + + bsizes &= 0xff; + if(bsizes_more != 0xff) + bsizes &= bsizes_more; + if(bsizes == 0xff || (bsizes & DMA_BURST16) == 0 || + (bsizes & DMA_BURST32) == 0) + bsizes = (DMA_BURST32 - 1); + bp->bigmac_bursts = bsizes; + + /* Perform QEC initialization. */ + qec_init(bp); + + /* Map in the BigMAC channel registers. */ + bp->creg = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[0].phys_addr, + 0, + sizeof(struct qe_creg), + "BigMAC QEC Channel Regs", + bp->bigmac_sbus_dev->reg_addrs[0].which_io, + 0); + if(!bp->creg) { + printk("BIGMAC: Cannot map QEC channel registers.\n"); + goto fail_and_cleanup; + } + + /* Map in the BigMAC control registers. */ + bp->bregs = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[1].phys_addr, + 0, + sizeof(struct BIG_MAC_regs), + "BigMAC Primary Regs", + bp->bigmac_sbus_dev->reg_addrs[1].which_io, + 0); + if(!bp->bregs) { + printk("BIGMAC: Cannot map BigMAC primary registers.\n"); + goto fail_and_cleanup; + } + + /* Map in the BigMAC transceiver registers, this is how you poke at + * the BigMAC's PHY. + */ + bp->tregs = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[2].phys_addr, + 0, + sizeof(struct bmac_tcvr), + "BigMAC Transceiver Regs", + bp->bigmac_sbus_dev->reg_addrs[2].which_io, + 0); + if(!bp->tregs) { + printk("BIGMAC: Cannot map BigMAC transceiver registers.\n"); + goto fail_and_cleanup; + } + + /* Stop the BigMAC. */ + bigmac_stop(bp); + + /* Allocate transmit/receive descriptor DVMA block. */ + bp->bmac_block = (struct bmac_init_block *) + sparc_dvma_malloc(PAGE_SIZE, "BigMAC Init Block", + &bp->bblock_dvma); + + /* Get the board revision of this BigMAC. */ + bp->board_rev = prom_getintdefault(bp->bigmac_sbus_dev->prom_node, + "board-version", 1); + + /* If on sun4c, we use a static buffer pool, on sun4m we DMA directly + * in and out of sk_buffs instead for speed and one copy to userspace. + */ +#ifndef __sparc_v9__ + if(sparc_cpu_model == sun4c) + bp->sun4c_buffers = (struct bigmac_buffers *) + sparc_dvma_malloc(sizeof(struct bigmac_buffers), + "BigMAC Bufs", + &bp->s4c_buf_dvma); + else +#endif + bp->sun4c_buffers = 0; + + /* Init auto-negotiation timer state. */ + init_timer(&bp->bigmac_timer); + bp->timer_state = asleep; + bp->timer_ticks = 0; + + /* Backlink to generic net device struct. */ + bp->dev = dev; + + /* Set links to our BigMAC open and close routines. */ + dev->open = &bigmac_open; + dev->stop = &bigmac_close; + + /* Choose transmit routine based upon buffering scheme. */ +#ifndef __sparc_v9__ + if(sparc_cpu_model == sun4c) + dev->hard_start_xmit = &sun4c_bigmac_start_xmit; + else +#endif + dev->hard_start_xmit = &bigmac_start_xmit; + + /* Set links to BigMAC statistic and multi-cast loading code. */ + dev->get_stats = &bigmac_get_stats; + dev->set_multicast_list = &bigmac_set_multicast; + + /* Finish net device registration. */ + dev->irq = bp->bigmac_sbus_dev->irqs[0]; + dev->dma = 0; + ether_setup(dev); + +#ifdef MODULE + /* Put us into the list of instances attached for later module unloading. */ + bp->next_module = root_bigmac_dev; + root_bigmac_dev = bp; +#endif + return 0; + +fail_and_cleanup: + /* Something went wrong, undo whatever we did so far. */ + if(bp) { + /* Free register mappings if any. */ + if(bp->gregs) + sparc_free_io(bp->gregs, sizeof(struct qe_globreg)); + if(bp->creg) + sparc_free_io(bp->creg, sizeof(struct qe_creg)); + if(bp->bregs) + sparc_free_io(bp->bregs, sizeof(struct BIG_MAC_regs)); + if(bp->tregs) + sparc_free_io(bp->tregs, sizeof(struct bmac_tcvr)); + + /* XXX todo, bmac_block and sun4c_buffers */ + + /* Free the BigMAC softc. */ + kfree(bp); + dev->priv = 0; + } + return res; /* Return error code. */ +} + +__initfunc(int bigmac_probe(struct device *dev)) +{ + struct linux_sbus *bus; + struct linux_sbus_device *sdev = 0; + static int called = 0; + int cards = 0, v; + + if(called) + return ENODEV; + called++; + + for_each_sbus(bus) { + for_each_sbusdev(sdev, bus) { + if(cards) dev = NULL; + + /* QEC can be the parent of either QuadEthernet or + * a BigMAC. We want the latter. + */ + if(!strcmp(sdev->prom_name, "qec") && sdev->child && + !strcmp(sdev->child->prom_name, "be")) { + cards++; + if((v = bigmac_ether_init(dev, sdev))) + return v; + } + } + } + if(!cards) + return ENODEV; + return 0; +} + +#ifdef MODULE + +int +init_module(void) +{ + root_bigmac_dev = NULL; + return bigmac_probe(NULL); +} + +void +cleanup_module(void) +{ + /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ + while (root_bigmac_dev) { + struct bigmac *bp = root_bigmac_dev; + struct bigmac *bp_nxt = root_bigmac_dev->next_module; + + sparc_free_io(bp->gregs, sizeof(struct qe_globreg)); + sparc_free_io(bp->creg, sizeof(struct qe_creg)); + sparc_free_io(bp->bregs, sizeof(struct BIG_MAC_regs)); + sparc_free_io(bp->tregs, sizeof(struct bmac_tcvr)); + + /* XXX todo, bmac_block and sun4c_buffers */ + + unregister_netdev(bp->dev); + kfree(bp->dev); + root_bigmac_dev = bp_nxt; + } +} + +#endif /* MODULE */ diff --git a/drivers/net/sunbmac.h b/drivers/net/sunbmac.h new file mode 100644 index 000000000..9284654fc --- /dev/null +++ b/drivers/net/sunbmac.h @@ -0,0 +1,381 @@ +/* sunbmac.h: Defines for the Sun "Big MAC" 100baseT ethernet cards. + * + * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + */ + +#ifndef _SUNBMAC_H +#define _SUNBMAC_H + +/* QEC global registers. */ +struct qe_globreg { + volatile unsigned int ctrl; /* Control */ + volatile unsigned int stat; /* Status */ + volatile unsigned int psize; /* Packet Size */ + volatile unsigned int msize; /* Local-mem size (64K) */ + volatile unsigned int rsize; /* Receive partition size */ + volatile unsigned int tsize; /* Transmit partition size */ +}; + +#define GLOB_CTRL_MMODE 0x40000000 /* MACE qec mode */ +#define GLOB_CTRL_BMODE 0x10000000 /* BigMAC qec mode */ +#define GLOB_CTRL_EPAR 0x00000020 /* Enable parity */ +#define GLOB_CTRL_ACNTRL 0x00000018 /* SBUS arbitration control */ +#define GLOB_CTRL_B64 0x00000004 /* 64 byte dvma bursts */ +#define GLOB_CTRL_B32 0x00000002 /* 32 byte dvma bursts */ +#define GLOB_CTRL_B16 0x00000000 /* 16 byte dvma bursts */ +#define GLOB_CTRL_RESET 0x00000001 /* Reset the QEC */ + +#define GLOB_STAT_TX 0x00000008 /* BigMAC Transmit IRQ */ +#define GLOB_STAT_RX 0x00000004 /* BigMAC Receive IRQ */ +#define GLOB_STAT_BM 0x00000002 /* BigMAC Global IRQ */ +#define GLOB_STAT_ER 0x00000001 /* BigMAC Error IRQ */ + +#define GLOB_PSIZE_2048 0x00 /* 2k packet size */ +#define GLOB_PSIZE_4096 0x01 /* 4k packet size */ +#define GLOB_PSIZE_6144 0x10 /* 6k packet size */ +#define GLOB_PSIZE_8192 0x11 /* 8k packet size */ + +/* QEC BigMAC channel registers. */ +struct qe_creg { + volatile unsigned int ctrl; /* Control */ + volatile unsigned int stat; /* Status */ + volatile unsigned int rxds; /* RX descriptor ring ptr */ + volatile unsigned int txds; /* TX descriptor ring ptr */ + volatile unsigned int rimask; /* RX Interrupt Mask */ + volatile unsigned int timask; /* TX Interrupt Mask */ + volatile unsigned int qmask; /* QEC Error Interrupt Mask */ + volatile unsigned int bmask; /* BigMAC Error Interrupt Mask */ + volatile unsigned int rxwbufptr; /* Local memory rx write ptr */ + volatile unsigned int rxrbufptr; /* Local memory rx read ptr */ + volatile unsigned int txwbufptr; /* Local memory tx write ptr */ + volatile unsigned int txrbufptr; /* Local memory tx read ptr */ + volatile unsigned int ccnt; /* Collision Counter */ +}; + +#define CREG_CTRL_TWAKEUP 0x00000001 /* Transmitter Wakeup, 'go'. */ + +#define CREG_STAT_BERROR 0x80000000 /* BigMAC error */ +#define CREG_STAT_TXIRQ 0x00200000 /* Transmit Interrupt */ +#define CREG_STAT_TXDERROR 0x00080000 /* TX Descriptor is bogus */ +#define CREG_STAT_TXLERR 0x00040000 /* Late Transmit Error */ +#define CREG_STAT_TXPERR 0x00020000 /* Transmit Parity Error */ +#define CREG_STAT_TXSERR 0x00010000 /* Transmit SBUS error ack */ +#define CREG_STAT_RXIRQ 0x00000020 /* Receive Interrupt */ +#define CREG_STAT_RXDROP 0x00000010 /* Dropped a RX'd packet */ +#define CREG_STAT_RXSMALL 0x00000008 /* Receive buffer too small */ +#define CREG_STAT_RXLERR 0x00000004 /* Receive Late Error */ +#define CREG_STAT_RXPERR 0x00000002 /* Receive Parity Error */ +#define CREG_STAT_RXSERR 0x00000001 /* Receive SBUS Error ACK */ + +#define CREG_STAT_ERRORS (CREG_STAT_BERROR|CREG_STAT_TXDERROR|CREG_STAT_TXLERR| \ + CREG_STAT_TXPERR|CREG_STAT_TXSERR|CREG_STAT_RXDROP| \ + CREG_STAT_RXSMALL|CREG_STAT_RXLERR|CREG_STAT_RXPERR| \ + CREG_STAT_RXSERR) + +#define CREG_QMASK_TXDERROR 0x00080000 /* TXD error */ +#define CREG_QMASK_TXLERR 0x00040000 /* TX late error */ +#define CREG_QMASK_TXPERR 0x00020000 /* TX parity error */ +#define CREG_QMASK_TXSERR 0x00010000 /* TX sbus error ack */ +#define CREG_QMASK_RXDROP 0x00000010 /* RX drop */ +#define CREG_QMASK_RXBERROR 0x00000008 /* RX buffer error */ +#define CREG_QMASK_RXLEERR 0x00000004 /* RX late error */ +#define CREG_QMASK_RXPERR 0x00000002 /* RX parity error */ +#define CREG_QMASK_RXSERR 0x00000001 /* RX sbus error ack */ + +struct BIG_MAC_regs { + volatile unsigned int xif_cfg; /* XIF config register */ + volatile unsigned int _unused[63]; /* Reserved... */ + volatile unsigned int status; /* Status register, clear on read */ + volatile unsigned int imask; /* Interrupt mask register */ + volatile unsigned int _unused2[64]; /* Reserved... */ + volatile unsigned int tx_swreset; /* Transmitter software reset */ + volatile unsigned int tx_cfg; /* Transmitter config register */ + volatile unsigned int ipkt_gap1; /* Inter-packet gap 1 */ + volatile unsigned int ipkt_gap2; /* Inter-packet gap 2 */ + volatile unsigned int attempt_limit; /* Transmit attempt limit */ + volatile unsigned int stime; /* Transmit slot time */ + volatile unsigned int preamble_len; /* Size of transmit preamble */ + volatile unsigned int preamble_pattern; /* Pattern for transmit preamble */ + volatile unsigned int tx_sframe_delim; /* Transmit delimiter */ + volatile unsigned int jsize; /* Toe jam... */ + volatile unsigned int tx_pkt_max; /* Transmit max pkt size */ + volatile unsigned int tx_pkt_min; /* Transmit min pkt size */ + volatile unsigned int peak_attempt; /* Count of transmit peak attempts */ + volatile unsigned int dt_ctr; /* Transmit defer timer */ + volatile unsigned int nc_ctr; /* Transmit normal-collision counter */ + volatile unsigned int fc_ctr; /* Transmit first-collision counter */ + volatile unsigned int ex_ctr; /* Transmit excess-collision counter */ + volatile unsigned int lt_ctr; /* Transmit late-collision counter */ + volatile unsigned int rand_seed; /* Transmit random number seed */ + volatile unsigned int tx_smachine; /* Transmit state machine */ + volatile unsigned int _unused3[44]; /* Reserved */ + volatile unsigned int rx_swreset; /* Receiver software reset */ + volatile unsigned int rx_cfg; /* Receiver config register */ + volatile unsigned int rx_pkt_max; /* Receive max pkt size */ + volatile unsigned int rx_pkt_min; /* Receive min pkt size */ + volatile unsigned int mac_addr2; /* Ether address register 2 */ + volatile unsigned int mac_addr1; /* Ether address register 1 */ + volatile unsigned int mac_addr0; /* Ether address register 0 */ + volatile unsigned int fr_ctr; /* Receive frame receive counter */ + volatile unsigned int gle_ctr; /* Receive giant-length error counter */ + volatile unsigned int unale_ctr; /* Receive unaligned error counter */ + volatile unsigned int rcrce_ctr; /* Receive CRC error counter */ + volatile unsigned int rx_smachine; /* Receiver state machine */ + volatile unsigned int rx_cvalid; /* Receiver code violation */ + volatile unsigned int _unused4; /* Reserved... */ + volatile unsigned int htable3; /* Hash table 3 */ + volatile unsigned int htable2; /* Hash table 2 */ + volatile unsigned int htable1; /* Hash table 1 */ + volatile unsigned int htable0; /* Hash table 0 */ + volatile unsigned int afilter2; /* Address filter 2 */ + volatile unsigned int afilter1; /* Address filter 1 */ + volatile unsigned int afilter0; /* Address filter 0 */ + volatile unsigned int afilter_mask; /* Address filter mask */ +}; + +/* BigMac XIF config register. */ +#define BIGMAC_XCFG_ODENABLE 0x00000001 /* Output driver enable */ +#define BIGMAC_XCFG_RESV 0x00000002 /* Reserved, write always as 1 */ +#define BIGMAC_XCFG_MLBACK 0x00000004 /* Loopback-mode MII enable */ +#define BIGMAC_XCFG_SMODE 0x00000008 /* Enable serial mode */ + +/* BigMAC status register. */ +#define BIGMAC_STAT_GOTFRAME 0x00000001 /* Received a frame */ +#define BIGMAC_STAT_RCNTEXP 0x00000002 /* Receive frame counter expired */ +#define BIGMAC_STAT_ACNTEXP 0x00000004 /* Align-error counter expired */ +#define BIGMAC_STAT_CCNTEXP 0x00000008 /* CRC-error counter expired */ +#define BIGMAC_STAT_LCNTEXP 0x00000010 /* Length-error counter expired */ +#define BIGMAC_STAT_RFIFOVF 0x00000020 /* Receive FIFO overflow */ +#define BIGMAC_STAT_CVCNTEXP 0x00000040 /* Code-violation counter expired */ +#define BIGMAC_STAT_SENTFRAME 0x00000100 /* Transmitted a frame */ +#define BIGMAC_STAT_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */ +#define BIGMAC_STAT_MAXPKTERR 0x00000400 /* Max-packet size error */ +#define BIGMAC_STAT_NCNTEXP 0x00000800 /* Normal-collision counter expired */ +#define BIGMAC_STAT_ECNTEXP 0x00001000 /* Excess-collision counter expired */ +#define BIGMAC_STAT_LCCNTEXP 0x00002000 /* Late-collision counter expired */ +#define BIGMAC_STAT_FCNTEXP 0x00004000 /* First-collision counter expired */ +#define BIGMAC_STAT_DTIMEXP 0x00008000 /* Defer-timer expired */ + +/* BigMAC interrupt mask register. */ +#define BIGMAC_IMASK_GOTFRAME 0x00000001 /* Received a frame */ +#define BIGMAC_IMASK_RCNTEXP 0x00000002 /* Receive frame counter expired */ +#define BIGMAC_IMASK_ACNTEXP 0x00000004 /* Align-error counter expired */ +#define BIGMAC_IMASK_CCNTEXP 0x00000008 /* CRC-error counter expired */ +#define BIGMAC_IMASK_LCNTEXP 0x00000010 /* Length-error counter expired */ +#define BIGMAC_IMASK_RFIFOVF 0x00000020 /* Receive FIFO overflow */ +#define BIGMAC_IMASK_CVCNTEXP 0x00000040 /* Code-violation counter expired */ +#define BIGMAC_IMASK_SENTFRAME 0x00000100 /* Transmitted a frame */ +#define BIGMAC_IMASK_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */ +#define BIGMAC_IMASK_MAXPKTERR 0x00000400 /* Max-packet size error */ +#define BIGMAC_IMASK_NCNTEXP 0x00000800 /* Normal-collision counter expired */ +#define BIGMAC_IMASK_ECNTEXP 0x00001000 /* Excess-collision counter expired */ +#define BIGMAC_IMASK_LCCNTEXP 0x00002000 /* Late-collision counter expired */ +#define BIGMAC_IMASK_FCNTEXP 0x00004000 /* First-collision counter expired */ +#define BIGMAC_IMASK_DTIMEXP 0x00008000 /* Defer-timer expired */ + +/* BigMac transmit config register. */ +#define BIGMAC_TXCFG_ENABLE 0x00000001 /* Enable the transmitter */ +#define BIGMAC_TXCFG_FIFO 0x00000010 /* Default tx fthresh... */ +#define BIGMAC_TXCFG_SMODE 0x00000020 /* Enable slow transmit mode */ +#define BIGMAC_TXCFG_CIGN 0x00000040 /* Ignore transmit collisions */ +#define BIGMAC_TXCFG_FCSOFF 0x00000080 /* Do not emit FCS */ +#define BIGMAC_TXCFG_DBACKOFF 0x00000100 /* Disable backoff */ +#define BIGMAC_TXCFG_FULLDPLX 0x00000200 /* Enable full-duplex */ + +/* BigMac receive config register. */ +#define BIGMAC_RXCFG_ENABLE 0x00000001 /* Enable the receiver */ +#define BIGMAC_RXCFG_FIFO 0x0000000e /* Default rx fthresh... */ +#define BIGMAC_RXCFG_PSTRIP 0x00000020 /* Pad byte strip enable */ +#define BIGMAC_RXCFG_PMISC 0x00000040 /* Enable promiscous mode */ +#define BIGMAC_RXCFG_DERR 0x00000080 /* Disable error checking */ +#define BIGMAC_RXCFG_DCRCS 0x00000100 /* Disable CRC stripping */ +#define BIGMAC_RXCFG_ME 0x00000200 /* Receive packets addressed to me */ +#define BIGMAC_RXCFG_PGRP 0x00000400 /* Enable promisc group mode */ +#define BIGMAC_RXCFG_HENABLE 0x00000800 /* Enable the hash filter */ +#define BIGMAC_RXCFG_AENABLE 0x00001000 /* Enable the address filter */ + +/* The BigMAC PHY transceiver. Not nearly as sophisticated as the happy meal + * one. But it does have the "bit banger", oh baby. + */ +struct bmac_tcvr { + unsigned int tcvr_pal; + unsigned int mgmt_pal; +}; + +/* Frame commands. */ +#define FRAME_WRITE 0x50020000 +#define FRAME_READ 0x60020000 + +/* Tranceiver registers. */ +#define TCVR_PAL_SERIAL 0x00000001 /* Enable serial mode */ +#define TCVR_PAL_EXTLBACK 0x00000002 /* Enable external loopback */ +#define TCVR_PAL_MSENSE 0x00000004 /* Media sense */ +#define TCVR_PAL_LTENABLE 0x00000008 /* Link test enable */ +#define TCVR_PAL_LTSTATUS 0x00000010 /* Link test status (P1 only) */ + +/* Management PAL. */ +#define MGMT_PAL_DCLOCK 0x00000001 /* Data clock */ +#define MGMT_PAL_OENAB 0x00000002 /* Output enabler */ +#define MGMT_PAL_MDIO 0x00000004 /* MDIO Data/attached */ +#define MGMT_PAL_TIMEO 0x00000008 /* Transmit enable timeout error */ +#define MGMT_PAL_EXT_MDIO MGMT_PAL_MDIO +#define MGMT_PAL_INT_MDIO MGMT_PAL_TIMEO + +/* Here are some PHY addresses. */ +#define BIGMAC_PHY_EXTERNAL 0 /* External transceiver */ +#define BIGMAC_PHY_INTERNAL 1 /* Internal transceiver */ + +/* PHY registers */ +#define BIGMAC_BMCR 0x00 /* Basic mode control register */ +#define BIGMAC_BMSR 0x01 /* Basic mode status register */ + +/* BMCR bits */ +#define BMCR_ISOLATE 0x0400 /* Disconnect DP83840 from MII */ +#define BMCR_PDOWN 0x0800 /* Powerdown the DP83840 */ +#define BMCR_ANENABLE 0x1000 /* Enable auto negotiation */ +#define BMCR_SPEED100 0x2000 /* Select 100Mbps */ +#define BMCR_LOOPBACK 0x4000 /* TXD loopback bits */ +#define BMCR_RESET 0x8000 /* Reset the DP83840 */ + +/* BMSR bits */ +#define BMSR_ERCAP 0x0001 /* Ext-reg capability */ +#define BMSR_JCD 0x0002 /* Jabber detected */ +#define BMSR_LSTATUS 0x0004 /* Link status */ + +/* Ring descriptors and such, same as Quad Ethernet. */ +struct be_rxd { + unsigned int rx_flags; + unsigned int rx_addr; +}; + +#define RXD_OWN 0x80000000 /* Ownership. */ +#define RXD_UPDATE 0x10000000 /* Being Updated? */ +#define RXD_LENGTH 0x000007ff /* Packet Length. */ + +struct be_txd { + unsigned int tx_flags; + unsigned int tx_addr; +}; + +#define TXD_OWN 0x80000000 /* Ownership. */ +#define TXD_SOP 0x40000000 /* Start Of Packet */ +#define TXD_EOP 0x20000000 /* End Of Packet */ +#define TXD_UPDATE 0x10000000 /* Being Updated? */ +#define TXD_LENGTH 0x000007ff /* Packet Length. */ + +#define TX_RING_MAXSIZE 256 +#define RX_RING_MAXSIZE 256 + +#define TX_RING_SIZE 256 +#define RX_RING_SIZE 256 + +#define NEXT_RX(num) (((num) + 1) & (RX_RING_SIZE - 1)) +#define NEXT_TX(num) (((num) + 1) & (TX_RING_SIZE - 1)) +#define PREV_RX(num) (((num) - 1) & (RX_RING_SIZE - 1)) +#define PREV_TX(num) (((num) - 1) & (TX_RING_SIZE - 1)) + +#define TX_BUFFS_AVAIL(bp) \ + (((bp)->tx_old <= (bp)->tx_new) ? \ + (bp)->tx_old + (TX_RING_SIZE - 1) - (bp)->tx_new : \ + (bp)->tx_old - (bp)->tx_new - 1) + + +#define SUN4C_TX_BUFFS_AVAIL(bp) \ + (((bp)->tx_old <= (bp)->tx_new) ? \ + (bp)->tx_old + (SUN4C_TX_RING_SIZE - 1) - (bp)->tx_new : \ + (bp)->tx_old - (bp)->tx_new - (TX_RING_SIZE - SUN4C_TX_RING_SIZE)) + + +#define RX_COPY_THRESHOLD 128 +#define RX_BUF_ALLOC_SIZE (ETH_FRAME_LEN + (64 * 3)) + +struct bmac_init_block { + struct be_rxd be_rxd[RX_RING_MAXSIZE]; + struct be_txd be_txd[TX_RING_MAXSIZE]; +}; + +#define bib_offset(mem, elem) \ +((__u32)((unsigned long)(&(((struct bmac_init_block *)0)->mem[elem])))) + +#define SUN4C_PKT_BUF_SZ 1546 +#define SUN4C_RX_BUFF_SIZE SUN4C_PKT_BUF_SZ +#define SUN4C_TX_BUFF_SIZE SUN4C_PKT_BUF_SZ + +#define SUN4C_RX_RING_SIZE 16 +#define SUN4C_TX_RING_SIZE 16 + +struct bigmac_buffers { + char tx_buf[SUN4C_TX_RING_SIZE][SUN4C_TX_BUFF_SIZE]; + char pad[2]; /* Align rx_buf for copy_and_sum(). */ + char rx_buf[SUN4C_RX_RING_SIZE][SUN4C_RX_BUFF_SIZE]; +}; + +#define bbuf_offset(mem, elem) \ +((__u32)((unsigned long)(&(((struct bigmac_buffers *)0)->mem[elem][0])))) + +/* Now software state stuff. */ +enum bigmac_transceiver { + external = 0, + internal = 1, + none = 2, +}; + +/* Timer state engine. */ +enum bigmac_timer_state { + ltrywait = 1, /* Forcing try of all modes, from fastest to slowest. */ + asleep = 2, /* Timer inactive. */ +}; + +struct bigmac { + struct qe_globreg *gregs; /* QEC Global Registers */ + struct qe_creg *creg; /* QEC BigMAC Channel Registers */ + struct BIG_MAC_regs *bregs; /* BigMAC Registers */ + struct bmac_tcvr *tregs; /* BigMAC Transceiver */ + struct bmac_init_block *bmac_block; /* RX and TX descriptors */ + __u32 bblock_dvma; /* RX and TX descriptors */ + + struct sk_buff *rx_skbs[RX_RING_SIZE]; + struct sk_buff *tx_skbs[TX_RING_SIZE]; + + int rx_new, tx_new, rx_old, tx_old; + + struct bigmac_buffers *sun4c_buffers; + __u32 s4c_buf_dvma; + + int board_rev; /* BigMAC board revision. */ + + enum bigmac_transceiver tcvr_type; + unsigned int bigmac_bursts; + unsigned int paddr; + unsigned short sw_bmsr; /* SW copy of PHY BMSR */ + unsigned short sw_bmcr; /* SW copy of PHY BMCR */ + struct timer_list bigmac_timer; + enum bigmac_timer_state timer_state; + unsigned int timer_ticks; + + struct enet_statistics enet_stats; + struct linux_sbus_device *qec_sbus_dev; + struct linux_sbus_device *bigmac_sbus_dev; + struct device *dev; + struct bigmac *next_module; +}; + +/* We use this to acquire receive skb's that we can DMA directly into. */ +#define ALIGNED_RX_SKB_ADDR(addr) \ + ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr)) + +static inline struct sk_buff *big_mac_alloc_skb(unsigned int length, int gfp_flags) +{ + struct sk_buff *skb; + + skb = alloc_skb(length + 64, gfp_flags); + if(skb) { + int offset = ALIGNED_RX_SKB_ADDR(skb->data); + + if(offset) + skb_reserve(skb, offset); + } + return skb; +} + +#endif /* !(_SUNBMAC_H) */ diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 0b2eb82fc..580fb2dca 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c @@ -2,11 +2,11 @@ * auto carrier detecting ethernet driver. Also known as the * "Happy Meal Ethernet" found on SunSwift SBUS cards. * - * Copyright (C) 1996 David S. Miller (davem@caipfs.rutgers.edu) + * Copyright (C) 1996, 1998 David S. Miller (davem@caipfs.rutgers.edu) */ static char *version = - "sunhme.c:v1.2 10/Oct/96 David S. Miller (davem@caipfs.rutgers.edu)\n"; + "sunhme.c:v1.10 27/Jan/99 David S. Miller (davem@caipfs.rutgers.edu)\n"; #include @@ -35,12 +35,13 @@ static char *version = #include #include #include -#include #include #include #ifndef __sparc_v9__ #include #endif +#include +#include #include #include @@ -57,6 +58,11 @@ static char *version = static struct happy_meal *root_happy_dev = NULL; #endif +static struct quattro *qfe_sbus_list = NULL; +#ifdef CONFIG_PCI +static struct quattro *qfe_pci_list = NULL; +#endif + #undef HMEDEBUG #undef SXDEBUG #undef RXDEBUG @@ -363,6 +369,15 @@ static int try_next_permutation(struct happy_meal *hp, struct hmeal_tcvregs *tre { hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR); + /* Downgrade from full to half duplex. Only possible + * via ethtool. + */ + if(hp->sw_bmcr & BMCR_FULLDPLX) { + hp->sw_bmcr &= ~(BMCR_FULLDPLX); + happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); + return 0; + } + /* Downgrade from 100 to 10. */ if(hp->sw_bmcr & BMCR_SPEED100) { hp->sw_bmcr &= ~(BMCR_SPEED100); @@ -1049,7 +1064,7 @@ static void happy_meal_init_rings(struct happy_meal *hp, int from_irq) for(i = 0; i < RX_RING_SIZE; i++) { struct sk_buff *skb; - skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags); + skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags | GFP_DMA); if(!skb) continue; hp->rx_skbs[i] = skb; @@ -1077,7 +1092,7 @@ static void happy_meal_init_rings(struct happy_meal *hp, int from_irq) } else #endif { - hb->happy_meal_rxd[i].rx_addr = (u32)((unsigned long) skb->data); + hb->happy_meal_rxd[i].rx_addr = sbus_dvma_addr(skb->data); hb->happy_meal_rxd[i].rx_flags = (RXFLAG_OWN | ((RX_BUF_ALLOC_SIZE - RX_OFFSET) << 16)); } @@ -1115,7 +1130,8 @@ static void sun4c_happy_meal_init_rings(struct happy_meal *hp) #endif static void happy_meal_begin_auto_negotiation(struct happy_meal *hp, - struct hmeal_tcvregs *tregs) + struct hmeal_tcvregs *tregs, + struct ethtool_cmd *ep) { int timeout; @@ -1124,93 +1140,108 @@ static void happy_meal_begin_auto_negotiation(struct happy_meal *hp, hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR); hp->sw_physid1 = happy_meal_tcvr_read(hp, tregs, DP83840_PHYSID1); hp->sw_physid2 = happy_meal_tcvr_read(hp, tregs, DP83840_PHYSID2); - hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, DP83840_ADVERTISE); /* XXX Check BMSR_ANEGCAPABLE, should not be necessary though. */ - /* Advertise everything we can support. */ - if(hp->sw_bmsr & BMSR_10HALF) - hp->sw_advertise |= (ADVERTISE_10HALF); - else - hp->sw_advertise &= ~(ADVERTISE_10HALF); + hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, DP83840_ADVERTISE); + if(ep == NULL || ep->autoneg == AUTONEG_ENABLE) { + /* Advertise everything we can support. */ + if(hp->sw_bmsr & BMSR_10HALF) + hp->sw_advertise |= (ADVERTISE_10HALF); + else + hp->sw_advertise &= ~(ADVERTISE_10HALF); - if(hp->sw_bmsr & BMSR_10FULL) - hp->sw_advertise |= (ADVERTISE_10FULL); - else - hp->sw_advertise &= ~(ADVERTISE_10FULL); - if(hp->sw_bmsr & BMSR_100HALF) - hp->sw_advertise |= (ADVERTISE_100HALF); - else - hp->sw_advertise &= ~(ADVERTISE_100HALF); - if(hp->sw_bmsr & BMSR_100FULL) - hp->sw_advertise |= (ADVERTISE_100FULL); - else - hp->sw_advertise &= ~(ADVERTISE_100FULL); + if(hp->sw_bmsr & BMSR_10FULL) + hp->sw_advertise |= (ADVERTISE_10FULL); + else + hp->sw_advertise &= ~(ADVERTISE_10FULL); + if(hp->sw_bmsr & BMSR_100HALF) + hp->sw_advertise |= (ADVERTISE_100HALF); + else + hp->sw_advertise &= ~(ADVERTISE_100HALF); + if(hp->sw_bmsr & BMSR_100FULL) + hp->sw_advertise |= (ADVERTISE_100FULL); + else + hp->sw_advertise &= ~(ADVERTISE_100FULL); + happy_meal_tcvr_write(hp, tregs, DP83840_ADVERTISE, hp->sw_advertise); - /* XXX Currently no Happy Meal cards I know off support 100BaseT4, - * XXX and this is because the DP83840 does not support it, changes - * XXX would need to be made to the tx/rx logic in the driver as well - * XXX so I completely skip checking for it in the BMSR for now. - */ + /* XXX Currently no Happy Meal cards I know off support 100BaseT4, + * XXX and this is because the DP83840 does not support it, changes + * XXX would need to be made to the tx/rx logic in the driver as well + * XXX so I completely skip checking for it in the BMSR for now. + */ #ifdef AUTO_SWITCH_DEBUG - ASD(("%s: Advertising [ ", hp->dev->name)); - if(hp->sw_advertise & ADVERTISE_10HALF) - ASD(("10H ")); - if(hp->sw_advertise & ADVERTISE_10FULL) - ASD(("10F ")); - if(hp->sw_advertise & ADVERTISE_100HALF) - ASD(("100H ")); - if(hp->sw_advertise & ADVERTISE_100FULL) - ASD(("100F ")); + ASD(("%s: Advertising [ ", hp->dev->name)); + if(hp->sw_advertise & ADVERTISE_10HALF) + ASD(("10H ")); + if(hp->sw_advertise & ADVERTISE_10FULL) + ASD(("10F ")); + if(hp->sw_advertise & ADVERTISE_100HALF) + ASD(("100H ")); + if(hp->sw_advertise & ADVERTISE_100FULL) + ASD(("100F ")); #endif - happy_meal_tcvr_write(hp, tregs, DP83840_ADVERTISE, hp->sw_advertise); + /* Enable Auto-Negotiation, this is usually on already... */ + hp->sw_bmcr |= BMCR_ANENABLE; + happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); - /* Enable Auto-Negotiation, this is usually on already... */ - hp->sw_bmcr |= BMCR_ANENABLE; - happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); + /* Restart it to make sure it is going. */ + hp->sw_bmcr |= BMCR_ANRESTART; + happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); - /* Restart it to make sure it is going. */ - hp->sw_bmcr |= BMCR_ANRESTART; - happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); + /* BMCR_ANRESTART self clears when the process has begun. */ - /* BMCR_ANRESTART self clears when the process has begun. */ + timeout = 64; /* More than enough. */ + while(--timeout) { + hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR); + if(!(hp->sw_bmcr & BMCR_ANRESTART)) + break; /* got it. */ + udelay(10); + } + if(!timeout) { + printk("%s: Happy Meal would not start auto negotiation " + "BMCR=0x%04x\n", hp->dev->name, hp->sw_bmcr); + printk("%s: Performing force link detection.\n", + hp->dev->name); + goto force_link; + } else { + hp->timer_state = arbwait; + } + } else { +force_link: + /* Force the link up, trying first a particular mode. + * Either we are here at the request of ethtool or + * because the Happy Meal would not start to autoneg. + */ - timeout = 64; /* More than enough. */ - while(--timeout) { - hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR); - if(!(hp->sw_bmcr & BMCR_ANRESTART)) - break; /* got it. */ - udelay(10); - } - if(!timeout) { - printk("%s: Happy Meal would not start auto negotiation BMCR=0x%04x\n", - hp->dev->name, hp->sw_bmcr); - printk("%s: Performing force link detection.\n", hp->dev->name); - - /* Disable auto-negotiation in BMCR, enable FULL duplex and 100mb/s, - * setup the timer state machine, and fire it off. - * - * XXX Should probably reset the DP83840 first - * XXX as this is a gross fatal error... + /* Disable auto-negotiation in BMCR, enable the duplex and + * speed setting, init the timer state machine, and fire it off. */ - hp->sw_bmcr = BMCR_SPEED100; + if(ep == NULL || ep->autoneg == AUTONEG_ENABLE) { + hp->sw_bmcr = BMCR_SPEED100; + } else { + if(ep->speed == SPEED_100) + hp->sw_bmcr = BMCR_SPEED100; + else + hp->sw_bmcr = 0; + if(ep->duplex == DUPLEX_FULL) + hp->sw_bmcr |= BMCR_FULLDPLX; + } happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr); /* OK, seems we need do disable the transceiver for the first * tick to make sure we get an accurate link state at the * second tick. */ - hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs, DP83840_CSCONFIG); - printk("%s: CSCONFIG [%04x], disabling transceiver\n", hp->dev->name, - hp->sw_csconfig); + hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs, + DP83840_CSCONFIG); hp->sw_csconfig &= ~(CSCONFIG_TCVDISAB); - happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG, hp->sw_csconfig); + happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG, + hp->sw_csconfig); hp->timer_state = ltrywait; - } else { - hp->timer_state = arbwait; } hp->timer_ticks = 0; @@ -1220,6 +1251,9 @@ static void happy_meal_begin_auto_negotiation(struct happy_meal *hp, add_timer(&hp->happy_timer); } +#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */ +#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */ + static int happy_meal_init(struct happy_meal *hp, int from_irq) { struct hmeal_gregs *gregs = hp->gregs; @@ -1227,9 +1261,12 @@ static int happy_meal_init(struct happy_meal *hp, int from_irq) struct hmeal_erxregs *erxregs = hp->erxregs; struct hmeal_bigmacregs *bregs = hp->bigmacregs; struct hmeal_tcvregs *tregs = hp->tcvregs; - unsigned long regtmp; + unsigned long regtmp, rxcfg; unsigned char *e = &hp->dev->dev_addr[0]; + /* If auto-negotiation timer is running, kill it. */ + del_timer(&hp->happy_timer); + HMD(("happy_meal_init: happy_flags[%08x] ", hp->happy_flags)); if(!(hp->happy_flags & HFLAG_INIT)) { @@ -1322,12 +1359,54 @@ static int happy_meal_init(struct happy_meal *hp, int from_irq) hme_write32(hp, &bregs->mac_addr1, ((e[2] << 8) | e[3])); hme_write32(hp, &bregs->mac_addr0, ((e[0] << 8) | e[1])); - /* Ick, figure out how to properly program the hash table later... */ HMD(("htable, ")); - hme_write32(hp, &bregs->htable3, 0); - hme_write32(hp, &bregs->htable2, 0); - hme_write32(hp, &bregs->htable1, 0); - hme_write32(hp, &bregs->htable0, 0); + if((hp->dev->flags & IFF_ALLMULTI) || + (hp->dev->mc_count > 64)) { + hme_write32(hp, &bregs->htable0, 0xffff); + hme_write32(hp, &bregs->htable1, 0xffff); + hme_write32(hp, &bregs->htable2, 0xffff); + hme_write32(hp, &bregs->htable3, 0xffff); + } else if((hp->dev->flags & IFF_PROMISC) == 0) { + u16 hash_table[4]; + struct dev_mc_list *dmi = hp->dev->mc_list; + char *addrs; + int i, j, bit, byte; + u32 crc, poly = CRC_POLYNOMIAL_LE; + + for(i = 0; i < 4; i++) + hash_table[i] = 0; + + for(i = 0; i < hp->dev->mc_count; i++) { + addrs = dmi->dmi_addr; + dmi = dmi->next; + + if(!(*addrs & 1)) + continue; + + crc = 0xffffffffU; + for(byte = 0; byte < 6; byte++) { + for(bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) { + int test; + + test = ((bit ^ crc) & 0x01); + crc >>= 1; + if(test) + crc = crc ^ poly; + } + } + crc >>= 26; + hash_table[crc >> 4] |= 1 << (crc & 0xf); + } + hme_write32(hp, &bregs->htable0, hash_table[0]); + hme_write32(hp, &bregs->htable1, hash_table[1]); + hme_write32(hp, &bregs->htable2, hash_table[2]); + hme_write32(hp, &bregs->htable3, hash_table[3]); + } else { + hme_write32(hp, &bregs->htable3, 0); + hme_write32(hp, &bregs->htable2, 0); + hme_write32(hp, &bregs->htable1, 0); + hme_write32(hp, &bregs->htable0, 0); + } /* Set the RX and TX ring ptrs. */ HMD(("ring ptrs rxr[%08x] txr[%08x]\n", @@ -1343,9 +1422,22 @@ static int happy_meal_init(struct happy_meal *hp, int from_irq) hme_read32(hp, &gregs->cfg))); #ifdef __sparc_v9__ + /* XXX Can sun4d do these too? */ if(hp->happy_bursts & DMA_BURST64) { + u32 gcfg = GREG_CFG_BURST64; + + /* I have no idea if I should set the extended + * transfer mode bit for Cheerio, so for now I + * do not. -DaveM + */ + if((hp->happy_flags & HFLAG_PCI) == 0) { + mmu_set_sbus64(hp->happy_sbus_dev, + hp->happy_bursts); + gcfg |= GREG_CFG_64BIT; + } + HMD(("64>")); - hme_write32(hp, &gregs->cfg, GREG_CFG_BURST64); + hme_write32(hp, &gregs->cfg, gcfg); } else #endif if(hp->happy_bursts & DMA_BURST32) { @@ -1396,7 +1488,10 @@ static int happy_meal_init(struct happy_meal *hp, int from_irq) /* Enable Big Mac hash table filter. */ HMD(("happy_meal_init: enable hash rx_cfg_old[%08x], ", hme_read32(hp, &bregs->rx_cfg))); - hme_write32(hp, &bregs->rx_cfg, BIGMAC_RXCFG_HENABLE); + rxcfg = BIGMAC_RXCFG_HENABLE; + if(hp->dev->flags & IFF_PROMISC) + rxcfg |= BIGMAC_RXCFG_PMISC; + hme_write32(hp, &bregs->rx_cfg, rxcfg); /* Let the bits settle in the chip. */ udelay(10); @@ -1433,7 +1528,7 @@ static int happy_meal_init(struct happy_meal *hp, int from_irq) hme_read32(hp, &bregs->rx_cfg) | BIGMAC_RXCFG_ENABLE); /* Get the autonegotiation started, and the watch timer ticking. */ - happy_meal_begin_auto_negotiation(hp, tregs); + happy_meal_begin_auto_negotiation(hp, tregs, NULL); /* Success. */ return 0; @@ -1505,7 +1600,7 @@ static int happy_meal_is_not_so_happy(struct happy_meal *hp, /* Only print messages for non-counter related interrupts. */ if(status & (GREG_STAT_RFIFOVF | GREG_STAT_STSTERR | GREG_STAT_TFIFO_UND | - GREG_STAT_MAXPKTERR | GREG_STAT_NORXD | GREG_STAT_RXERR | + GREG_STAT_MAXPKTERR | GREG_STAT_RXERR | GREG_STAT_RXPERR | GREG_STAT_RXTERR | GREG_STAT_EOPERR | GREG_STAT_MIFIRQ | GREG_STAT_TXEACK | GREG_STAT_TXLERR | GREG_STAT_TXPERR | GREG_STAT_TXTERR | GREG_STAT_SLVERR | @@ -1541,13 +1636,14 @@ static int happy_meal_is_not_so_happy(struct happy_meal *hp, } if(status & GREG_STAT_NORXD) { - /* AIEEE, out of receive descriptors. Check out our drop - * processing in happy_meal_rx to see how we try very hard - * to avoid this situation. + /* This is harmless, it just means the system is + * quite loaded and the incomming packet rate was + * faster than the interrupt handler could keep up + * with. */ - printk("%s: Happy Meal out of receive descriptors, aieee!\n", + printk(KERN_INFO "%s: Happy Meal out of receive " + "descriptors, packet dropped.\n", hp->dev->name); - reset = 1; } if(status & (GREG_STAT_RXERR|GREG_STAT_RXPERR|GREG_STAT_RXTERR)) { @@ -1662,13 +1758,6 @@ static inline void happy_meal_tx(struct happy_meal *hp) hp->tx_skbs[elem] = NULL; hp->net_stats.tx_bytes+=skb->len; -#ifdef NEED_DMA_SYNCHRONIZATION -#ifdef CONFIG_PCI - if(!(hp->happy_flags & HFLAG_PCI)) -#endif - mmu_sync_dma(kva_to_hva(hp, skb->data), - skb->len, hp->happy_sbus_dev->my_bus); -#endif dev_kfree_skb(skb); hp->net_stats.tx_packets++; @@ -1797,7 +1886,8 @@ static inline void happy_meal_rx(struct happy_meal *hp, struct device *dev, struct sk_buff *new_skb; /* Now refill the entry, if we can. */ - new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC); + new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, + (GFP_DMA|GFP_ATOMIC)); if(!new_skb) { drops++; goto drop_it; @@ -1814,7 +1904,7 @@ static inline void happy_meal_rx(struct happy_meal *hp, struct device *dev, /* Trim the original skb for the netif. */ skb_trim(skb, len); } else { - struct sk_buff *copy_skb = dev_alloc_skb(len+2); + struct sk_buff *copy_skb = dev_alloc_skb(len + 2); if(!copy_skb) { drops++; @@ -1908,7 +1998,8 @@ static inline void pci_happy_meal_rx(struct happy_meal *hp, struct device *dev, struct sk_buff *new_skb; /* Now refill the entry, if we can. */ - new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC); + new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, + (GFP_DMA|GFP_ATOMIC)); if(!new_skb) { drops++; goto drop_it; @@ -1925,7 +2016,7 @@ static inline void pci_happy_meal_rx(struct happy_meal *hp, struct device *dev, /* Trim the original skb for the netif. */ skb_trim(skb, len); } else { - struct sk_buff *copy_skb = dev_alloc_skb(len+2); + struct sk_buff *copy_skb = dev_alloc_skb(len + 2); if(!copy_skb) { drops++; @@ -2083,7 +2174,8 @@ static inline void sun4d_happy_meal_rx(struct happy_meal *hp, struct device *dev struct sk_buff *new_skb; /* Now refill the entry, if we can. */ - new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC); + new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, + (GFP_DMA | GFP_ATOMIC)); if(!new_skb) { drops++; goto drop_it; @@ -2103,7 +2195,7 @@ static inline void sun4d_happy_meal_rx(struct happy_meal *hp, struct device *dev /* Trim the original skb for the netif. */ skb_trim(skb, len); } else { - struct sk_buff *copy_skb = dev_alloc_skb(len+2); + struct sk_buff *copy_skb = dev_alloc_skb(len + 2); if(!copy_skb) { drops++; @@ -2328,12 +2420,39 @@ static void sun4d_happy_meal_interrupt(int irq, void *dev_id, struct pt_regs *re } #endif +static void quattro_sbus_interrupt(int irq, void *cookie, struct pt_regs *ptregs) +{ + struct quattro *qp = (struct quattro *)cookie; + int i; + + for(i = 0; i < 4; i++) { + struct device *hdev = qp->happy_meals[i]; + struct happy_meal *hp = (struct happy_meal *) hdev->priv; + volatile u32 *sreg = qp->irq_status[i]; + + if(sreg && + (hme_read32(hp, sreg) & (GREG_STAT_ERRORS | + GREG_STAT_MIFIRQ | + GREG_STAT_TXALL | + GREG_STAT_RXTOHOST)) != 0) + qp->handler(irq, hdev, ptregs); + } +} + static int happy_meal_open(struct device *dev) { struct happy_meal *hp = (struct happy_meal *) dev->priv; int res; HMD(("happy_meal_open: ")); + + /* On SBUS Quattro QFE cards, all hme interrupts are concentrated + * into a single source which we register handling at probe time. + */ + if((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) == HFLAG_QUATTRO) { + hp->qfe_parent->irq_status[hp->qfe_ent] = &hp->gregs->stat; + goto after_request_irq; + } #ifndef __sparc_v9__ if(sparc_cpu_model == sun4c) { if(request_irq(dev->irq, &sun4c_happy_meal_interrupt, @@ -2370,8 +2489,8 @@ static int happy_meal_open(struct device *dev) __irq_itoa(dev->irq)); return -EAGAIN; } - HMD(("Init happy timer\n")); - init_timer(&hp->happy_timer); + +after_request_irq: HMD(("to happy_meal_init\n")); res = happy_meal_init(hp, 0); if(!res) { @@ -2390,7 +2509,17 @@ static int happy_meal_close(struct device *dev) /* If auto-negotiation timer is running, kill it. */ del_timer(&hp->happy_timer); - free_irq(dev->irq, (void *)dev); + /* On Quattro QFE cards, all hme interrupts are concentrated + * into a single source which we register handling at probe + * time and never unregister. + */ + if((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO) { + free_irq(dev->irq, (void *)dev); + } else { + /* Zap the status register pointer. */ + hp->qfe_parent->irq_status[hp->qfe_ent] = NULL; + } + MOD_DEC_USE_COUNT; return 0; } @@ -2429,10 +2558,23 @@ static int happy_meal_start_xmit(struct sk_buff *skb, struct device *dev) tx_add_log(hp, TXLOG_ACTION_TXMIT|TXLOG_ACTION_NBUFS, 0); return 1; } +#ifdef __sparc_v9__ + if ((unsigned long)(skb->data + skb->len) >= MAX_DMA_ADDRESS) { + struct sk_buff *new_skb = skb_copy(skb, GFP_DMA | GFP_ATOMIC); + if (!new_skb) + return 1; + dev_kfree_skb(skb); + skb = new_skb; + } +#endif len = skb->len; entry = hp->tx_new; SXD(("SX", len, entry)); +#ifdef NEED_DMA_SYNCHRONIZATION + mmu_sync_dma(kva_to_hva(hp, skb->data), + skb->len, hp->happy_sbus_dev->my_bus); +#endif hp->tx_skbs[entry] = skb; hp->happy_block->happy_meal_txd[entry].tx_addr = kva_to_hva(hp, skb->data); hp->happy_block->happy_meal_txd[entry].tx_flags = @@ -2622,9 +2764,6 @@ static struct net_device_stats *happy_meal_get_stats(struct device *dev) return &hp->net_stats; } -#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */ -#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */ - static void happy_meal_set_multicast(struct device *dev) { struct happy_meal *hp = (struct happy_meal *) dev->priv; @@ -2634,10 +2773,6 @@ static void happy_meal_set_multicast(struct device *dev) int i, j, bit, byte; u32 crc, poly = CRC_POLYNOMIAL_LE; - /* Let the transmits drain. */ - while(dev->tbusy) - schedule(); - /* Lock out others. */ set_bit(0, (void *) &dev->tbusy); @@ -2686,13 +2821,262 @@ static void happy_meal_set_multicast(struct device *dev) dev->tbusy = 0; } +/* Ethtool support... */ +static int happy_meal_ioctl(struct device *dev, + struct ifreq *rq, int cmd) +{ + struct happy_meal *hp = (struct happy_meal *) dev->priv; + struct ethtool_cmd *ep_user = (struct ethtool_cmd *) rq->ifr_data; + struct ethtool_cmd ecmd; + + if(cmd != SIOCETHTOOL) + return -EOPNOTSUPP; + if(copy_from_user(&ecmd, ep_user, sizeof(ecmd))) + return -EFAULT; + + if(ecmd.cmd == SPARC_ETH_GSET) { + ecmd.supported = + (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full | + SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII); + + /* XXX hardcoded stuff for now */ + ecmd.port = PORT_TP; /* XXX no MII support */ + ecmd.transceiver = XCVR_INTERNAL; /* XXX no external xcvr support */ + ecmd.phy_address = 0; /* XXX fixed PHYAD */ + + /* Record PHY settings. */ + hp->sw_bmcr = happy_meal_tcvr_read(hp, hp->tcvregs, DP83840_BMCR); + hp->sw_lpa = happy_meal_tcvr_read(hp, hp->tcvregs, DP83840_LPA); + if(hp->sw_bmcr & BMCR_ANENABLE) { + ecmd.autoneg = AUTONEG_ENABLE; + ecmd.speed = + (hp->sw_lpa & (LPA_100HALF | LPA_100FULL)) ? + SPEED_100 : SPEED_10; + if(ecmd.speed == SPEED_100) + ecmd.duplex = + (hp->sw_lpa & (LPA_100FULL)) ? + DUPLEX_FULL : DUPLEX_HALF; + else + ecmd.duplex = + (hp->sw_lpa & (LPA_10FULL)) ? + DUPLEX_FULL : DUPLEX_HALF; + } else { + ecmd.autoneg = AUTONEG_DISABLE; + ecmd.speed = + (hp->sw_bmcr & BMCR_SPEED100) ? + SPEED_100 : SPEED_10; + ecmd.duplex = + (hp->sw_bmcr & BMCR_FULLDPLX) ? + DUPLEX_FULL : DUPLEX_HALF; + } + if(copy_to_user(ep_user, &ecmd, sizeof(ecmd))) + return -EFAULT; + return 0; + } else if(ecmd.cmd == SPARC_ETH_SSET) { + if(!capable(CAP_NET_ADMIN)) + return -EPERM; + + /* Verify the settings we care about. */ + if(ecmd.autoneg != AUTONEG_ENABLE && + ecmd.autoneg != AUTONEG_DISABLE) + return -EINVAL; + if(ecmd.autoneg == AUTONEG_DISABLE && + ((ecmd.speed != SPEED_100 && + ecmd.speed != SPEED_10) || + (ecmd.duplex != DUPLEX_HALF && + ecmd.duplex != DUPLEX_FULL))) + return -EINVAL; + + /* Ok, do it to it. */ + del_timer(&hp->happy_timer); + happy_meal_begin_auto_negotiation(hp, + hp->tcvregs, + &ecmd); + + return 0; + } else + return -EOPNOTSUPP; +} + +void __init quattro_get_ranges(struct quattro *qp) +{ + int err; + + err = prom_getproperty(qp->quattro_sbus_dev->prom_node, + "ranges", + (char *)&qp->ranges[0], + sizeof(qp->ranges)); + if(err == 0 || err == -1) { + qp->nranges = 0; + return; + } + qp->nranges = (err / sizeof(struct linux_prom_ranges)); +} + +static void __init quattro_apply_ranges(struct quattro *qp, struct happy_meal *hp) +{ + struct linux_sbus_device *sdev = hp->happy_sbus_dev; + int rng; + + for(rng = 0; rng < qp->nranges; rng++) { + struct linux_prom_ranges *rngp = &qp->ranges[rng]; + int reg; + + for(reg = 0; reg < 5; reg++) { + if(sdev->reg_addrs[reg].which_io == + rngp->ot_child_space) + break; + } + if(reg == 5) + continue; + + sdev->reg_addrs[reg].which_io = rngp->ot_parent_space; + sdev->reg_addrs[reg].phys_addr += rngp->ot_parent_base; + } +} + +/* Given a happy meal sbus device, find it's quattro parent. + * If none exist, allocate and return a new one. + * + * Return NULL on failure. + */ +static struct quattro * __init quattro_sbus_find(struct linux_sbus_device *goal_sdev) +{ + struct linux_sbus *sbus; + struct linux_sbus_device *sdev; + struct quattro *qp; + + for(qp = qfe_sbus_list; qp != NULL; qp = qp->next) { + for(sdev = qp->quattro_sbus_dev->child; + sdev != NULL; + sdev = sdev->next) { + if(sdev == goal_sdev) + return qp; + } + } + for_each_sbus(sbus) { + for_each_sbusdev(sdev, sbus) { + if(sdev->child != NULL) { + struct linux_sbus_device *p; + + for(p = sdev->child; p != NULL; p = p->next) + if(p == goal_sdev) + goto found; + } + } + } + + /* Cannot find quattro parent, fail. */ + return NULL; + +found: + qp = kmalloc(sizeof(struct quattro), GFP_KERNEL); + if(qp != NULL) { + int i; + + for(i = 0; i < 4; i++) { + qp->irq_status[i] = NULL; + qp->happy_meals[i] = NULL; + } + qp->handler = NULL; + qp->quattro_sbus_dev = sdev; +#ifdef CONFIG_PCI + qp->quattro_pci_dev = NULL; +#endif + qp->next = qfe_sbus_list; + qfe_sbus_list = qp; + quattro_get_ranges(qp); + } + return qp; +} + +#ifdef CONFIG_PCI +static struct quattro * __init quattro_pci_find(struct pci_dev *pdev) +{ + struct pci_dev *bdev = pdev->bus->self; + struct quattro *qp; + + if (!bdev) return NULL; + for(qp = qfe_pci_list; qp != NULL; qp = qp->next) { + if(qp->quattro_pci_dev == bdev) + return qp; + } + qp = kmalloc(sizeof(struct quattro), GFP_KERNEL); + if(qp != NULL) { + int i; + + for(i = 0; i < 4; i++) { + qp->irq_status[i] = NULL; + qp->happy_meals[i] = NULL; + } + qp->handler = NULL; + qp->quattro_sbus_dev = NULL; + qp->quattro_pci_dev = bdev; + qp->next = qfe_pci_list; + qfe_pci_list = qp; + + /* No range tricks necessary on PCI. */ + qp->nranges = 0; + } + return qp; +} +#endif + +/* After all quattro cards have been probed, we call these functions + * to register the IRQ handlers. + */ +static void __init quattro_sbus_register_irqs(void) +{ + struct quattro *qp; + + for(qp = qfe_sbus_list; qp != NULL; qp = qp->next) { + int err; + + /* Set the handler. */ +#ifndef __sparc_v9__ + if(sparc_cpu_model == sun4c) + qp->handler = sun4c_happy_meal_interrupt; + else if(sparc_cpu_model == sun4c) + qp->handler = sun4d_happy_meal_interrupt; + else +#endif +#ifdef CONFIG_PCI + if(qp->quattro_pci_dev != NULL) + panic("QFE: PCI qfe in sbus_register_irqs!"); + else +#endif + qp->handler = happy_meal_interrupt; + + err = request_irq(qp->quattro_sbus_dev->irqs[0], + quattro_sbus_interrupt, + SA_SHIRQ, "Quattro", + qp); + if(err != 0) { + printk("Quattro: Fatal IRQ registery error %d.\n", err); + panic("QFE request irq"); + } + } +} + static unsigned hme_version_printed = 0; -static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_device *sdev) +static int __init happy_meal_ether_init(struct device *dev, struct linux_sbus_device *sdev, int is_qfe) { + struct quattro *qp = NULL; struct happy_meal *hp; - int i; - + int i, qfe_slot = -1; + + if(is_qfe) { + qp = quattro_sbus_find(sdev); + if(qp == NULL) + return ENODEV; + for(qfe_slot = 0; qfe_slot < 4; qfe_slot++) + if(qp->happy_meals[qfe_slot] == NULL) + break; + if(qfe_slot == 4) + return ENODEV; + } if(dev == NULL) { dev = init_etherdev(0, sizeof(struct happy_meal)); } else { @@ -2703,9 +3087,16 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de if(hme_version_printed++ == 0) printk(version); - printk("%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet ", dev->name); + if(qfe_slot != -1) + printk("%s: Quattro HME slot %d (SBUS) 10/100baseT Ethernet", + dev->name, qfe_slot); + else + printk("%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet ", + dev->name); dev->base_addr = (long) sdev; + + /* XXX Check for local-mac-address property on Quattro... -DaveM */ for(i = 0; i < 6; i++) printk("%2.2x%c", dev->dev_addr[i] = idprom->id_ethaddr[i], @@ -2727,6 +3118,13 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de return ENODEV; } + if(qp != NULL) { + hp->qfe_parent = qp; + hp->qfe_ent = qfe_slot; + qp->happy_meals[qfe_slot] = dev; + quattro_apply_ranges(qp, hp); + } + prom_apply_sbus_ranges(sdev->my_bus, &sdev->reg_addrs[0], sdev->num_registers, sdev); hp->gregs = sparc_alloc_io(sdev->reg_addrs[0].phys_addr, 0, @@ -2784,6 +3182,9 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de else if(hp->hm_revision != 0xa0) hp->happy_flags = HFLAG_NOT_A0; + if(qp != NULL) + hp->happy_flags |= HFLAG_QUATTRO; + /* Get the supported DVMA burst sizes from our Happy SBUS. */ hp->happy_bursts = prom_getintdefault(hp->happy_sbus_dev->my_bus->prom_node, "burst-sizes", 0x00); @@ -2817,6 +3218,8 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de */ happy_meal_set_initial_advertisement(hp); + init_timer(&hp->happy_timer); + hp->dev = dev; dev->open = &happy_meal_open; dev->stop = &happy_meal_close; @@ -2830,6 +3233,7 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de dev->hard_start_xmit = &happy_meal_start_xmit; dev->get_stats = &happy_meal_get_stats; dev->set_multicast_list = &happy_meal_set_multicast; + dev->do_ioctl = &happy_meal_ioctl; dev->irq = sdev->irqs[0]; dev->dma = 0; @@ -2846,14 +3250,35 @@ static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_de } #ifdef CONFIG_PCI -__initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) +static int __init happy_meal_pci_init(struct device *dev, struct pci_dev *pdev) { + struct quattro *qp = NULL; struct pcidev_cookie *pcp; struct happy_meal *hp; unsigned long hpreg_base; unsigned short pci_command; - int i, node; + int i, node, qfe_slot = -1; + char prom_name[64]; + /* Now make sure pci_dev cookie is there. */ + pcp = pdev->sysdata; + if(pcp == NULL || pcp->prom_node == -1) { + printk("happymeal(PCI): Some PCI device info missing\n"); + return ENODEV; + } + node = pcp->prom_node; + + prom_getstring(node, "name", prom_name, sizeof(prom_name)); + if (!strcmp(prom_name, "SUNW,qfe") || !strcmp(prom_name, "qfe")) { + qp = quattro_pci_find(pdev); + if(qp == NULL) + return ENODEV; + for(qfe_slot = 0; qfe_slot < 4; qfe_slot++) + if(qp->happy_meals[qfe_slot] == NULL) + break; + if(qfe_slot == 4) + return ENODEV; + } if(dev == NULL) { dev = init_etherdev(0, sizeof(struct happy_meal)); } else { @@ -2864,15 +3289,28 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) if(hme_version_printed++ == 0) printk(version); - printk("%s: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet ", dev->name); + if (!qfe_slot) { + prom_name[0] = 0; + if (!strncmp(dev->name, "eth", 3)) { + int i = simple_strtoul(dev->name + 3, NULL, 10); + sprintf(prom_name, "-%d", i + 3); + } + printk("%s%s: Quattro HME (PCI/CheerIO) 10/100baseT Ethernet ", dev->name, prom_name); + if (qp->quattro_pci_dev->vendor == PCI_VENDOR_ID_DEC && + qp->quattro_pci_dev->device == PCI_DEVICE_ID_DEC_21153) + printk("DEC 21153 PCI Bridge\n"); + else + printk("unknown bridge %04x.%04x\n", + qp->quattro_pci_dev->vendor, qp->quattro_pci_dev->device); + } + if(qfe_slot != -1) + printk("%s: Quattro HME slot %d (PCI/CheerIO) 10/100baseT Ethernet ", + dev->name, qfe_slot); + else + printk("%s: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet ", + dev->name); dev->base_addr = (long) pdev; - for(i = 0; i < 6; i++) - printk("%2.2x%c", - dev->dev_addr[i] = idprom->id_ethaddr[i], - i == 5 ? ' ' : ':'); - - printk("\n"); hp = (struct happy_meal *)dev->priv; memset(hp, 0, sizeof(*hp)); @@ -2880,6 +3318,12 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) hp->happy_sbus_dev = NULL; hp->happy_pci_dev = pdev; + if(qp != NULL) { + hp->qfe_parent = qp; + hp->qfe_ent = qfe_slot; + qp->happy_meals[qfe_slot] = dev; + } + hpreg_base = pdev->base_address[0]; if((hpreg_base & PCI_BASE_ADDRESS_SPACE) != PCI_BASE_ADDRESS_SPACE_MEMORY) { printk("happymeal(PCI): Cannot find proper PCI device base address.\n"); @@ -2887,13 +3331,14 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) } hpreg_base &= PCI_BASE_ADDRESS_MEM_MASK; - /* Now make sure pci_dev cookie is there. */ - pcp = pdev->sysdata; - if(pcp == NULL || pcp->prom_node == -1) { - printk("happymeal(PCI): Some PCI device info missing\n"); - return ENODEV; - } - node = pcp->prom_node; + if (qfe_slot != -1 && prom_getproplen(node, "local-mac-address") == 6) + prom_getproperty(node, "local-mac-address", dev->dev_addr, 6); + else + memcpy(dev->dev_addr, idprom->id_ethaddr, 6); + for(i = 0; i < 6; i++) + printk("%2.2x%c", dev->dev_addr[i], i == 5 ? ' ' : ':'); + + printk("\n"); /* Layout registers. */ hp->gregs = (struct hmeal_gregs *) (hpreg_base + 0x0000); @@ -2912,6 +3357,9 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) else if(hp->hm_revision != 0xa0) hp->happy_flags = HFLAG_NOT_A0; + if(qp != NULL) + hp->happy_flags |= HFLAG_QUATTRO; + /* And of course, indicate this is PCI. */ hp->happy_flags |= HFLAG_PCI; @@ -2937,29 +3385,32 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) hp->timer_ticks = 0; happy_meal_set_initial_advertisement(hp); + init_timer(&hp->happy_timer); + hp->dev = dev; dev->open = &happy_meal_open; dev->stop = &happy_meal_close; dev->hard_start_xmit = &pci_happy_meal_start_xmit; dev->get_stats = &happy_meal_get_stats; dev->set_multicast_list = &happy_meal_set_multicast; + dev->do_ioctl = &happy_meal_ioctl; dev->irq = pdev->irq; dev->dma = 0; ether_setup(dev); /* If we don't do this, nothing works. */ - pcibios_read_config_word(pdev->bus->number, - pdev->devfn, - PCI_COMMAND, &pci_command); + pci_read_config_word(pdev, PCI_COMMAND, &pci_command); pci_command |= PCI_COMMAND_MASTER; - pcibios_write_config_word(pdev->bus->number, - pdev->devfn, - PCI_COMMAND, pci_command); + pci_write_config_word(pdev, PCI_COMMAND, pci_command); - /* Set the latency timer as well, PROM leaves it at zero. */ - pcibios_write_config_byte(pdev->bus->number, - pdev->devfn, - PCI_LATENCY_TIMER, 240); + /* Set the latency timer and cache line size as well, + * PROM leaves it at zero. + */ + pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 128); +#ifdef __sparc_v9__ + /* NOTE: Cache line size is in 32-bit word units. */ + pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x10); +#endif #ifdef MODULE /* We are home free at this point, link us in to the happy @@ -2973,7 +3424,7 @@ __initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)) } #endif -__initfunc(int happy_meal_probe(struct device *dev)) +int __init happy_meal_probe(struct device *dev) { struct linux_sbus *bus; struct linux_sbus_device *sdev = 0; @@ -2990,11 +3441,18 @@ __initfunc(int happy_meal_probe(struct device *dev)) dev = NULL; if(!strcmp(sdev->prom_name, "SUNW,hme")) { cards++; - if((v = happy_meal_ether_init(dev, sdev))) + if((v = happy_meal_ether_init(dev, sdev, 0))) + return v; + } else if(!strcmp(sdev->prom_name, "qfe") || + !strcmp(sdev->prom_name, "SUNW,qfe")) { + cards++; + if((v = happy_meal_ether_init(dev, sdev, 1))) return v; } } } + if(cards != 0) + quattro_sbus_register_irqs(); #ifdef CONFIG_PCI if(pci_present()) { struct pci_dev *pdev; diff --git a/drivers/net/sunhme.h b/drivers/net/sunhme.h index c7d2bc813..b6b1b8b63 100644 --- a/drivers/net/sunhme.h +++ b/drivers/net/sunhme.h @@ -507,6 +507,8 @@ enum happy_timer_state { asleep = 3, /* Time inactive. */ }; +struct quattro; + /* Happy happy, joy joy! */ struct happy_meal { struct hmeal_gregs *gregs; /* Happy meal global registers */ @@ -559,6 +561,8 @@ struct happy_meal { struct pci_dev *happy_pci_dev; #endif struct device *dev; /* Backpointer */ + struct quattro *qfe_parent; /* For Quattro cards */ + int qfe_ent; /* Which instance on quattro */ struct happy_meal *next_module; }; @@ -575,10 +579,28 @@ struct happy_meal { #define HFLAG_INIT 0x00000200 /* Init called at least once */ #define HFLAG_LINKUP 0x00000400 /* 1 = Link is up */ #define HFLAG_PCI 0x00000800 /* PCI based Happy Meal */ +#define HFLAG_QUATTRO 0x00001000 /* On QFE/Quattro card */ #define HFLAG_20_21 (HFLAG_POLLENABLE | HFLAG_FENABLE) #define HFLAG_NOT_A0 (HFLAG_POLLENABLE | HFLAG_FENABLE | HFLAG_LANCE | HFLAG_RXCV) +/* Support for QFE/Quattro cards. */ +struct quattro { + volatile u32 *irq_status[4]; + struct device *happy_meals[4]; + void (*handler)(int, void *, struct pt_regs *); + + struct linux_sbus_device *quattro_sbus_dev; +#ifdef CONFIG_PCI + struct pci_dev *quattro_pci_dev; +#endif + struct quattro *next; + + /* PROM ranges, if any. */ + struct linux_prom_ranges ranges[8]; + int nranges; +}; + /* We use this to acquire receive skb's that we can DMA directly into. */ #define ALIGNED_RX_SKB_ADDR(addr) \ ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr)) @@ -606,7 +628,16 @@ extern inline u32 kva_to_hva(struct happy_meal *hp, char *addr) return (u32) virt_to_bus((volatile void *)addr); else #endif - return (u32) ((unsigned long)addr); + { +#ifdef __sparc_v9__ + if (((unsigned long) addr) >= MAX_DMA_ADDRESS) { + printk("sunhme: Bogus DMA buffer address " + "[%016lx]\n", ((unsigned long) addr)); + panic("DMA address too large, tell DaveM"); + } +#endif + return sbus_dvma_addr(addr); + } } extern inline unsigned int hme_read32(struct happy_meal *hp, diff --git a/drivers/net/sunlance.c b/drivers/net/sunlance.c index 6901c7103..3485a2a84 100644 --- a/drivers/net/sunlance.c +++ b/drivers/net/sunlance.c @@ -1,4 +1,4 @@ -/* $Id: sunlance.c,v 1.81 1998/08/10 09:08:23 jj Exp $ +/* $Id: sunlance.c,v 1.85 1999/03/21 05:22:05 davem Exp $ * lance.c: Linux/Sparc/Lance driver * * Written 1995, 1996 by Miguel de Icaza @@ -56,12 +56,16 @@ * * 1.11: * 12/27/97: Added sun4d support. (jj@sunsite.mff.cuni.cz) + * + * 1.12: + * 11/3/99: Fixed SMP race in lance_start_xmit found by davem. + * Anton Blanchard (anton@progsoc.uts.edu.au) */ #undef DEBUG_DRIVER static char *version = - "sunlance.c:v1.11 27/Dec/97 Miguel de Icaza (miguel@nuclecu.unam.mx)\n"; + "sunlance.c:v1.12 11/Mar/99 Miguel de Icaza (miguel@nuclecu.unam.mx)\n"; static char *lancestr = "LANCE"; static char *lancedma = "LANCE DMA"; @@ -252,6 +256,7 @@ struct lance_private { struct device *dev; /* Backpointer */ struct lance_private *next_module; struct linux_sbus *sbus; + struct timer_list multicast_timer; }; #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\ @@ -326,8 +331,6 @@ static void lance_init_ring (struct device *dev) lp->rx_new = lp->tx_new = 0; lp->rx_old = lp->tx_old = 0; - ib->mode = 0; - /* Copy the ethernet address to the lance init block * Note that on the sparc you need to swap the ethernet address. * Note also we want the CPU ptr of the init_block here. @@ -384,10 +387,6 @@ static void lance_init_ring (struct device *dev) ib->tx_ptr = leptr; if (ZERO) printk ("TX ptr: %8.8x\n", leptr); - - /* Clear the multicast filter */ - ib->filter [0] = 0; - ib->filter [1] = 0; } static int init_restart_lance (struct lance_private *lp) @@ -668,6 +667,7 @@ static int lance_open (struct device *dev) { struct lance_private *lp = (struct lance_private *)dev->priv; volatile struct lance_regs *ll = lp->ll; + volatile struct lance_init_block *ib = lp->init_block; int status = 0; last_dev = dev; @@ -686,6 +686,16 @@ static int lance_open (struct device *dev) if (lp->ledma) lp->ledma->regs->dma_test = ((__u32) lp->init_block_dvma) & 0xff000000; + /* Set mode and clear multicast filter only at device open, + so that lance_init_ring() called at any error will not + forget multicast filters. + + BTW it is common bug in all lance drivers! --ANK + */ + ib->mode = 0; + ib->filter [0] = 0; + ib->filter [1] = 0; + lance_init_ring (dev); load_csrs (lp); @@ -742,6 +752,7 @@ static int lance_close (struct device *dev) dev->start = 0; dev->tbusy = 1; + del_timer(&lp->multicast_timer); /* Stop the card */ ll->rap = LE_CSR0; @@ -791,27 +802,19 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev) volatile unsigned long flush; unsigned long flags; int entry, skblen, len; - int status = 0; - static int outs; - /* Transmitter timeout, serious problems */ - if (dev->tbusy) { + if (test_and_set_bit (0, (void *) &dev->tbusy) != 0) { int tickssofar = jiffies - dev->trans_start; - - if (tickssofar < 100) { - status = -1; - } else { - printk ("%s: transmit timed out, status %04x, reset\n", - dev->name, ll->rdp); - lance_reset (dev); - } - return status; - } - /* Block a timer-based transmit from overlapping. */ - if (test_and_set_bit (0, (void *) &dev->tbusy) != 0) { - printk ("Transmitter access conflict.\n"); - return -1; + if (tickssofar < 100) + return 1; + + printk ("%s: transmit timed out, status %04x, reset\n", + dev->name, ll->rdp); + lp->stats.tx_errors++; + lance_reset (dev); + + return 1; } skblen = skb->len; @@ -820,13 +823,13 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev) if (!TX_BUFFS_AVAIL) { restore_flags(flags); - return -1; + return 1; } len = (skblen <= ETH_ZLEN) ? ETH_ZLEN : skblen; - + lp->stats.tx_bytes += len; - + entry = lp->tx_new & TX_RING_MOD_MASK; ib->btx_ring [entry].length = (-len) | 0xf000; ib->btx_ring [entry].misc = 0; @@ -842,7 +845,6 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev) ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN); lp->tx_new = (lp->tx_new+1) & TX_RING_MOD_MASK; - outs++; /* Kick the lance: transmit now */ ll->rdp = LE_C0_INEA | LE_C0_TDMD; dev->trans_start = jiffies; @@ -857,7 +859,7 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev) flush = ll->rdp; restore_flags(flags); - return status; + return 0; } static struct net_device_stats *lance_get_stats (struct device *dev) @@ -879,7 +881,7 @@ static void lance_load_multicast (struct device *dev) u32 crc, poly = CRC_POLYNOMIAL_LE; /* set all multicast bits */ - if (dev->flags & IFF_ALLMULTI){ + if (dev->flags & IFF_ALLMULTI) { ib->filter [0] = 0xffffffff; ib->filter [1] = 0xffffffff; return; @@ -889,31 +891,29 @@ static void lance_load_multicast (struct device *dev) ib->filter [1] = 0; /* Add addresses */ - for (i = 0; i < dev->mc_count; i++){ + for (i = 0; i < dev->mc_count; i++) { addrs = dmi->dmi_addr; dmi = dmi->next; /* multicast address? */ if (!(*addrs & 1)) continue; - + crc = 0xffffffff; - for (byte = 0; byte < 6; byte++) + for (byte = 0; byte < 6; byte++) { for (bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) { int test; test = ((bit ^ crc) & 0x01); crc >>= 1; - if (test) { + if (test) crc = crc ^ poly; - } } - + } crc = crc >> 26; mcast_table [crc >> 4] |= 1 << (crc & 0xf); } - return; } static void lance_set_multicast (struct device *dev) @@ -922,12 +922,33 @@ static void lance_set_multicast (struct device *dev) volatile struct lance_init_block *ib = lp->init_block; volatile struct lance_regs *ll = lp->ll; - while (dev->tbusy) - schedule(); + if (!dev->start) + return; + + if (dev->tbusy) { + mod_timer(&lp->multicast_timer, jiffies + 2); + return; + } + /* This CANNOT be correct. Chip is running + and dev->tbusy may change any moment. + It is useless to set it. + + Generally, usage of dev->tbusy in this driver is completely + wrong. + + I protected calls to this function + with start_bh_atomic, so that set_multicast_list + and hard_start_xmit are serialized now by top level. --ANK + + The same is true about a2065. + */ set_bit (0, (void *) &dev->tbusy); - while (lp->tx_old != lp->tx_new) - schedule(); + if (lp->tx_old != lp->tx_new) { + mod_timer(&lp->multicast_timer, jiffies + 4); + dev->tbusy = 0; + return; + } ll->rap = LE_CSR0; ll->rdp = LE_C0_STOP; @@ -942,6 +963,7 @@ static void lance_set_multicast (struct device *dev) load_csrs (lp); init_restart_lance (lp); dev->tbusy = 0; + mark_bh(NET_BH); } __initfunc(static int @@ -1101,6 +1123,16 @@ no_link_test: dev->dma = 0; ether_setup (dev); + /* We cannot sleep if the chip is busy during a + * multicast list update event, because such events + * can occur from interrupts (ex. IPv6). So we + * use a timer to try again later when necessary. -DaveM + */ + init_timer(&lp->multicast_timer); + lp->multicast_timer.data = (unsigned long) dev; + lp->multicast_timer.function = + (void (*)(unsigned long)) &lance_set_multicast; + #ifdef MODULE dev->ifindex = dev_new_index(); lp->next_module = root_lance_dev; diff --git a/drivers/net/sunqe.c b/drivers/net/sunqe.c index 83b95a72a..4b126e3c6 100644 --- a/drivers/net/sunqe.c +++ b/drivers/net/sunqe.c @@ -36,7 +36,6 @@ static char *version = #include #include #include -#include #include #include @@ -145,7 +144,7 @@ static void qe_init_rings(struct sunqe *qep, int from_irq) for(i = 0; i < RX_RING_SIZE; i++) { struct sk_buff *skb; - skb = qe_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags); + skb = qe_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags | GFP_DMA); if(!skb) continue; @@ -155,8 +154,7 @@ static void qe_init_rings(struct sunqe *qep, int from_irq) skb_put(skb, ETH_FRAME_LEN); skb_reserve(skb, 34); - qb->qe_rxd[i].rx_addr = - (u32) ((unsigned long)skb->data); + qb->qe_rxd[i].rx_addr = sbus_dvma_addr(skb->data); qb->qe_rxd[i].rx_flags = (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); } @@ -447,10 +445,6 @@ static inline void qe_tx(struct sunqe *qep) skb = qep->tx_skbs[elem]; qep->tx_skbs[elem] = NULL; qep->net_stats.tx_bytes+=skb->len; -#ifdef NEED_DMA_SYNCHRONIZATION - mmu_sync_dma(((u32)((unsigned long)skb->data)), - skb->len, qep->qe_sbusdev->my_bus); -#endif dev_kfree_skb(skb); qep->net_stats.tx_packets++; @@ -498,22 +492,28 @@ static inline void qe_rx(struct sunqe *qep) drop_it: /* Return it to the QE. */ qep->net_stats.rx_dropped++; - this->rx_addr = - (u32) ((unsigned long)qep->rx_skbs[elem]->data); + this->rx_addr = sbus_dvma_addr(qep->rx_skbs[elem]->data); this->rx_flags = (RXD_OWN | (RX_BUF_ALLOC_SIZE & RXD_LENGTH)); goto next; } skb = qep->rx_skbs[elem]; #ifdef NEED_DMA_SYNCHRONIZATION - mmu_sync_dma(((u32)((unsigned long)skb->data)), +#ifdef __sparc_v9__ + if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) { + printk("sunqe: Bogus DMA buffer address " + "[%016lx]\n", ((unsigned long) skb->data)); + panic("DMA address too large, tell DaveM"); + } +#endif + mmu_sync_dma(sbus_dvma_addr(skb->data), skb->len, qep->qe_sbusdev->my_bus); #endif if(len > RX_COPY_THRESHOLD) { struct sk_buff *new_skb; /* Now refill the entry, if we can. */ - new_skb = qe_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC); + new_skb = qe_alloc_skb(RX_BUF_ALLOC_SIZE, (GFP_DMA|GFP_ATOMIC)); if(!new_skb) { drops++; goto drop_it; @@ -524,8 +524,7 @@ static inline void qe_rx(struct sunqe *qep) skb_put(new_skb, ETH_FRAME_LEN); skb_reserve(new_skb, 34); - rxbase[elem].rx_addr = - (u32) ((unsigned long)new_skb->data); + rxbase[elem].rx_addr = sbus_dvma_addr(new_skb->data); rxbase[elem].rx_flags = (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); @@ -545,8 +544,7 @@ static inline void qe_rx(struct sunqe *qep) eth_copy_and_sum(copy_skb, (unsigned char *)skb->data, len, 0); /* Reuse original ring buffer. */ - rxbase[elem].rx_addr = - (u32) ((unsigned long)skb->data); + rxbase[elem].rx_addr = sbus_dvma_addr(skb->data); rxbase[elem].rx_flags = (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH)); @@ -741,6 +739,19 @@ static int qe_start_xmit(struct sk_buff *skb, struct device *dev) if(!TX_BUFFS_AVAIL(qep)) return 1; +#ifdef NEED_DMA_SYNCHRONIZATION +#ifdef __sparc_v9__ + if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) { + struct sk_buff *new_skb = skb_copy(skb, GFP_DMA | GFP_ATOMIC); + if(!new_skb) + return 1; + dev_kfree_skb(skb); + skb = new_skb; + } +#endif + mmu_sync_dma(sbus_dvma_addr(skb->data), + skb->len, qep->qe_sbusdev->my_bus); +#endif len = skb->len; entry = qep->tx_new; @@ -749,7 +760,7 @@ static int qe_start_xmit(struct sk_buff *skb, struct device *dev) qep->tx_skbs[entry] = skb; - qep->qe_block->qe_txd[entry].tx_addr = (u32) ((unsigned long) skb->data); + qep->qe_block->qe_txd[entry].tx_addr = sbus_dvma_addr(skb->data); qep->qe_block->qe_txd[entry].tx_flags = (TXD_OWN | TXD_SOP | TXD_EOP | (len & TXD_LENGTH)); qep->tx_new = NEXT_TX(entry); diff --git a/drivers/net/syncppp.c b/drivers/net/syncppp.c index 328878c73..c741b6287 100644 --- a/drivers/net/syncppp.c +++ b/drivers/net/syncppp.c @@ -51,7 +51,7 @@ #include #include "syncppp.h" -#define MAXALIVECNT 3 /* max. alive packets */ +#define MAXALIVECNT 6 /* max. alive packets */ #define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */ #define PPP_UI 0x03 /* Unnumbered Information */ @@ -121,6 +121,7 @@ struct cisco_packet { u16 time1; }; #define CISCO_PACKET_LEN 18 +#define CISCO_BIG_PACKET_LEN 20 static struct sppp *spppq; static struct timer_list sppp_keepalive_timer; @@ -380,6 +381,7 @@ static void sppp_keepalive (unsigned long dummy) if_down (dev); if (! (sp->pp_flags & PP_CISCO)) { /* Shut down the PPP link. */ + sp->lcp.magic = jiffies; sp->lcp.state = LCP_STATE_CLOSED; sp->ipcp.state = IPCP_STATE_CLOSED; sppp_clear_timeout (sp); @@ -648,7 +650,7 @@ static void sppp_cisco_input (struct sppp *sp, struct sk_buff *skb) struct cisco_packet *h; struct device *dev = sp->pp_if; - if (skb->len != CISCO_PACKET_LEN) { + if (skb->len != CISCO_PACKET_LEN && skb->len != CISCO_BIG_PACKET_LEN) { if (sp->pp_flags & PP_DEBUG) printk (KERN_WARNING "%s: invalid cisco packet length: %d bytes\n", dev->name, skb->len); @@ -842,6 +844,25 @@ int sppp_open (struct device *dev) EXPORT_SYMBOL(sppp_open); +int sppp_reopen (struct device *dev) +{ + struct sppp *sp = &((struct ppp_device *)dev)->sppp; + sppp_close(dev); + dev->flags |= IFF_RUNNING; + if (!(sp->pp_flags & PP_CISCO)) + { + sp->lcp.magic = jiffies; + ++sp->pp_seq; + sp->lcp.state = LCP_STATE_CLOSED; + sp->ipcp.state = IPCP_STATE_CLOSED; + /* Give it a moment for the line to settle then go */ + sppp_set_timeout (sp, 1); + } + return 0; +} + +EXPORT_SYMBOL(sppp_reopen); + int sppp_change_mtu(struct device *dev, int new_mtu) { if(new_mtu<128||new_mtu>PPP_MTU||(dev->flags&IFF_UP)) diff --git a/drivers/net/syncppp.h b/drivers/net/syncppp.h index 1309bc972..98f16aa0c 100644 --- a/drivers/net/syncppp.h +++ b/drivers/net/syncppp.h @@ -80,6 +80,7 @@ struct sk_buff *sppp_dequeue (struct device *dev); int sppp_isempty (struct device *dev); void sppp_flush (struct device *dev); int sppp_open (struct device *dev); +int sppp_reopen (struct device *dev); int sppp_close (struct device *dev); #endif diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index d3d2fba46..f476b6259 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c @@ -29,6 +29,8 @@ * * Tigran Aivazian : TLan_PciProbe() now uses * new PCI BIOS interface. + * Alan Cox : Fixed the out of memory + * handling. * ********************************************************************/ @@ -1250,28 +1252,36 @@ u32 TLan_HandleRxEOF( struct device *dev, u16 host_int ) netif_rx( skb ); } } else { - skb = (struct sk_buff *) head_list->buffer[9].address; - head_list->buffer[9].address = 0; - skb_trim( skb, head_list->frameSize ); - + struct sk_buff *new_skb; + + /* + * I changed the algorithm here. What we now do + * is allocate the new frame. If this fails we + * simply recycle the frame. + */ + + new_skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); + if ( new_skb != NULL ) { + /* If this ever happened it would be a problem */ + /* not any more - ac */ + skb = (struct sk_buff *) head_list->buffer[9].address; + head_list->buffer[9].address = 0; + skb_trim( skb, head_list->frameSize ); #if LINUX_KERNEL_VERSION > 0x20100 priv->stats->rx_bytes += head_list->frameSize; #endif - skb->protocol = eth_type_trans( skb, dev ); - netif_rx( skb ); - - skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); - if ( skb == NULL ) { - printk( "TLAN: Couldn't allocate memory for received data.\n" ); - /* If this ever happened it would be a problem */ - } else { - skb->dev = dev; - skb_reserve( skb, 2 ); - t = (void *) skb_put( skb, TLAN_MAX_FRAME_SIZE ); + skb->protocol = eth_type_trans( skb, dev ); + netif_rx( skb ); + + new_skb->dev = dev; + skb_reserve( new_skb, 2 ); + t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE ); head_list->buffer[0].address = virt_to_bus( t ); - head_list->buffer[9].address = (u32) skb; + head_list->buffer[9].address = (u32) new_skb; } + else + printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" ); } head_list->forward = 0; @@ -1867,6 +1877,7 @@ TLan_ResetAdapter( struct device *dev ) u8 data8; priv->tlanFullDuplex = FALSE; + priv->phyOnline=0; /* 1. Assert reset bit. */ data = inl(dev->base_addr + TLAN_HOST_CMD); diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index 19a937c41..3b22143ea 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c @@ -456,9 +456,9 @@ static int pci_etherdev_probe(struct device *dev, struct pci_id_info pci_tbl[]) pci_tbl[chip_idx].name, pciaddr, irq); if (pci_tbl[chip_idx].flags & PCI_USES_IO) { - if (check_region(pciaddr, pci_tbl[chip_idx].io_size)) - continue; ioaddr = pciaddr & ~3; + if (check_region(ioaddr, pci_tbl[chip_idx].io_size)) + continue; } else if ((ioaddr = (long)ioremap(pciaddr & ~0xf, pci_tbl[chip_idx].io_size)) == 0) { printk(KERN_INFO "Failed to map PCI address %#lx.\n", @@ -1053,6 +1053,7 @@ static int netdev_rx(struct device *dev) skb->protocol = eth_type_trans(skb, dev); netif_rx(skb); dev->last_rx = jiffies; + np->stats.rx_bytes += pkt_len; np->stats.rx_packets++; } entry = (++np->cur_rx) % RX_RING_SIZE; diff --git a/drivers/net/wavelan.c b/drivers/net/wavelan.c index 6e1cb958f..e175eb0e6 100644 --- a/drivers/net/wavelan.c +++ b/drivers/net/wavelan.c @@ -290,24 +290,26 @@ psa_write(u_long ioaddr, wv_16_on(ioaddr, hacr); } /* psa_write */ -#ifdef PSA_CRC +#ifdef SET_PSA_CRC /*------------------------------------------------------------------*/ /* - * Calculate the PSA CRC (not tested yet) - * As the WaveLAN drivers don't use the CRC, I won't use it either. - * Thanks to Nico Valster for the code + * Calculate the PSA CRC + * Thanks to Valster, Nico for the code * NOTE: By specifying a length including the CRC position the - * returned value should be zero. (i.e. a correct checksum in the PSA). + * returned value should be zero. (i.e. a correct checksum in the PSA) + * + * The Windows drivers don't use the CRC, but the AP and the PtP tool + * depend on it. */ -static u_short -psa_crc(u_short * psa, /* The PSA */ +static inline u_short +psa_crc(u_char * psa, /* The PSA */ int size) /* Number of short for CRC */ { int byte_cnt; /* Loop on the PSA */ u_short crc_bytes = 0; /* Data in the PSA */ int bit_cnt; /* Loop on the bits of the short */ - for(byte_cnt = 0; byte_cnt <= size; byte_cnt++ ) + for(byte_cnt = 0; byte_cnt < size; byte_cnt++ ) { crc_bytes ^= psa[byte_cnt]; /* Its an xor */ @@ -322,7 +324,49 @@ psa_crc(u_short * psa, /* The PSA */ return crc_bytes; } /* psa_crc */ -#endif /* PSA_CRC */ +#endif /* SET_PSA_CRC */ + +/*------------------------------------------------------------------*/ +/* + * update the checksum field in the Wavelan's PSA + */ +static void +update_psa_checksum(device * dev, + u_long ioaddr, + u_short hacr) +{ +#ifdef SET_PSA_CRC + psa_t psa; + u_short crc; + + /* read the parameter storage area */ + psa_read(ioaddr, hacr, 0, (unsigned char *) &psa, sizeof(psa)); + + /* update the checksum */ + crc = psa_crc((unsigned char *) &psa, + sizeof(psa) - sizeof(psa.psa_crc[0]) - sizeof(psa.psa_crc[1]) + - sizeof(psa.psa_crc_status)); + + psa.psa_crc[0] = crc & 0xFF; + psa.psa_crc[1] = (crc & 0xFF00) >> 8; + + /* Write it ! */ + psa_write(ioaddr, hacr, (char *)&psa.psa_crc - (char *)&psa, + (unsigned char *)&psa.psa_crc, 2); + +#ifdef DEBUG_IOCTL_INFO + printk (KERN_DEBUG "%s: update_psa_checksum(): crc = 0x%02x%02x\n", + dev->name, psa.psa_crc[0], psa.psa_crc[1]); + + /* Check again (luxury !) */ + crc = psa_crc ((unsigned char *) &psa, + sizeof(psa) - sizeof(psa.psa_crc_status)); + + if(crc != 0) + printk(KERN_WARNING "%s: update_psa_checksum(): CRC does not agree with PSA data (even after recalculating)\n", dev->name); +#endif /* DEBUG_IOCTL_INFO */ +#endif /* SET_PSA_CRC */ +} /* update_psa_checksum */ /*------------------------------------------------------------------*/ /* @@ -706,23 +750,23 @@ wv_config_complete(device * dev, unsigned short ias_addr; /* Check mc_config command */ - if(status & AC_SFLD_OK != 0) - printk(KERN_INFO "wv_config_complete(): set_multicast_address failed; status = 0x%x\n", - dev->name, str, status); + if((status & AC_SFLD_OK) != AC_SFLD_OK) + printk(KERN_INFO "%s: wv_config_complete(): set_multicast_address failed; status = 0x%x\n", + dev->name, status); /* check ia-config command */ ias_addr = mcs_addr - sizeof(ac_ias_t); obram_read(ioaddr, acoff(ias_addr, ac_status), (unsigned char *)&status, sizeof(status)); - if(status & AC_SFLD_OK != 0) - printk(KERN_INFO "wv_config_complete(): set_MAC_address; status = 0x%x\n", - dev->name, str, status); + if((status & AC_SFLD_OK) != AC_SFLD_OK) + printk(KERN_INFO "%s: wv_config_complete(): set_MAC_address failed; status = 0x%x\n", + dev->name, status); /* Check config command. */ cfg_addr = ias_addr - sizeof(ac_cfg_t); obram_read(ioaddr, acoff(cfg_addr, ac_status), (unsigned char *)&status, sizeof(status)); - if(status & AC_SFLD_OK != 0) - printk(KERN_INFO "wv_config_complete(): configure; status = 0x%x\n", - dev->name, str, status); + if((status & AC_SFLD_OK) != AC_SFLD_OK) + printk(KERN_INFO "%s: wv_config_complete(): configure failed; status = 0x%x\n", + dev->name, status); #endif /* DEBUG_CONFIG_ERROR */ ret = 1; /* Ready to be scrapped */ @@ -758,15 +802,15 @@ wv_complete(device * dev, /* Read the first transmit buffer */ obram_read(ioaddr, acoff(lp->tx_first_in_use, ac_status), (unsigned char *)&tx_status, sizeof(tx_status)); + /* If not completed -> exit */ + if((tx_status & AC_SFLD_C) == 0) + break; + /* Hack for reconfiguration */ if(tx_status == 0xFFFF) if(!wv_config_complete(dev, ioaddr, lp)) break; /* Not completed */ - /* If not completed -> exit */ - if((tx_status & AC_SFLD_C) == 0) - break; - /* We now remove this buffer */ nreaped++; --lp->tx_n_in_use; @@ -799,7 +843,7 @@ if (lp->tx_n_in_use > 0) lp->stats.tx_packets++; ncollisions = tx_status & AC_SFLD_MAXCOL; lp->stats.collisions += ncollisions; -#ifdef DEBUG_INTERRUPT_INFO +#ifdef DEBUG_TX_INFO if(ncollisions > 0) printk(KERN_DEBUG "%s: wv_complete(): tx completed after %d collisions.\n", dev->name, ncollisions); @@ -808,53 +852,49 @@ if (lp->tx_n_in_use > 0) else { lp->stats.tx_errors++; -#ifndef IGNORE_NORMAL_XMIT_ERRS if(tx_status & AC_SFLD_S10) { lp->stats.tx_carrier_errors++; -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_complete(): tx error: no CS.\n", +#ifdef DEBUG_TX_FAIL + printk(KERN_DEBUG "%s: wv_complete(): tx error: no CS.\n", dev->name); #endif } -#endif /* IGNORE_NORMAL_XMIT_ERRS */ if(tx_status & AC_SFLD_S9) { lp->stats.tx_carrier_errors++; -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_complete(): tx error: lost CTS.\n", +#ifdef DEBUG_TX_FAIL + printk(KERN_DEBUG "%s: wv_complete(): tx error: lost CTS.\n", dev->name); #endif } if(tx_status & AC_SFLD_S8) { lp->stats.tx_fifo_errors++; -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_complete(): tx error: slow DMA.\n", +#ifdef DEBUG_TX_FAIL + printk(KERN_DEBUG "%s: wv_complete(): tx error: slow DMA.\n", dev->name); #endif } -#ifndef IGNORE_NORMAL_XMIT_ERRS if(tx_status & AC_SFLD_S6) { lp->stats.tx_heartbeat_errors++; -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_complete(): tx error: heart beat.\n", +#ifdef DEBUG_TX_FAIL + printk(KERN_DEBUG "%s: wv_complete(): tx error: heart beat.\n", dev->name); #endif } if(tx_status & AC_SFLD_S5) { lp->stats.tx_aborted_errors++; -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_complete(): tx error: too many collisions.\n", +#ifdef DEBUG_TX_FAIL + printk(KERN_DEBUG "%s: wv_complete(): tx error: too many collisions.\n", dev->name); #endif } -#endif /* IGNORE_NORMAL_XMIT_ERRS */ } -#ifdef DEBUG_INTERRUPT_INFO +#ifdef DEBUG_TX_INFO printk(KERN_DEBUG "%s: wv_complete(): tx completed, tx_status 0x%04x\n", dev->name, tx_status); #endif @@ -1281,21 +1321,21 @@ wv_packet_info(u_char * p, /* Packet to dump */ char * msg1, /* Name of the device */ char * msg2) /* Name of the function */ { -#ifndef DEBUG_PACKET_DUMP + int i; + int maxi; + printk(KERN_DEBUG "%s: %s(): dest %02X:%02X:%02X:%02X:%02X:%02X, length %d\n", msg1, msg2, p[0], p[1], p[2], p[3], p[4], p[5], length); printk(KERN_DEBUG "%s: %s(): src %02X:%02X:%02X:%02X:%02X:%02X, type 0x%02X%02X\n", msg1, msg2, p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13]); -#else /* DEBUG_PACKET_DUMP */ - int i; - int maxi; +#ifdef DEBUG_PACKET_DUMP - printk(KERN_DEBUG "%s: %s(): len=%d, data=\"", msg1, msg2, length); + printk(KERN_DEBUG "data=\""); if((maxi = length) > DEBUG_PACKET_DUMP) maxi = DEBUG_PACKET_DUMP; - for(i = 0; i < maxi; i++) + for(i = 14; i < maxi; i++) if(p[i] >= ' ' && p[i] <= '~') printk(" %c", p[i]); else @@ -1522,7 +1562,9 @@ wavelan_set_multicast_list(device * dev) /*------------------------------------------------------------------*/ /* * This function doesn't exist. + * (Note : it was a nice way to test the reconfigure stuff...) */ +#ifdef SET_MAC_ADDRESS static int wavelan_set_mac_address(device * dev, void * addr) @@ -1537,6 +1579,7 @@ wavelan_set_mac_address(device * dev, return 0; } +#endif /* SET_MAC_ADDRESS */ #ifdef WIRELESS_EXT /* if wireless extensions exist in the kernel */ @@ -1890,6 +1933,8 @@ wavelan_ioctl(struct device * dev, /* device on which the ioctl is applied */ /* Disable NWID in the mmc (no filtering). */ mmc_out(ioaddr, mmwoff(0, mmw_loopt_sel), MMW_LOOPT_SEL_DIS_NWID); } + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, lp->hacr); break; case SIOCGIWNWID: @@ -1946,6 +1991,8 @@ wavelan_ioctl(struct device * dev, /* device on which the ioctl is applied */ psa.psa_thr_pre_set = wrq->u.sensitivity & 0x3F; psa_write(ioaddr, lp->hacr, (char *)&psa.psa_thr_pre_set - (char *)&psa, (unsigned char *) &psa.psa_thr_pre_set, 1); + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, lp->hacr); mmc_out(ioaddr, mmwoff(0, mmw_thr_pre_set), psa.psa_thr_pre_set); break; @@ -1993,6 +2040,8 @@ wavelan_ioctl(struct device * dev, /* device on which the ioctl is applied */ mmc_out(ioaddr, mmwoff(0, mmw_encr_enable), 0); } + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, lp->hacr); break; case SIOCGIWENCODE: @@ -2206,6 +2255,8 @@ wavelan_ioctl(struct device * dev, /* device on which the ioctl is applied */ psa.psa_quality_thr = *(wrq->u.name) & 0x0F; psa_write(ioaddr, lp->hacr, (char *)&psa.psa_quality_thr - (char *)&psa, (unsigned char *)&psa.psa_quality_thr, 1); + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, lp->hacr); mmc_out(ioaddr, mmwoff(0, mmw_quality_thr), psa.psa_quality_thr); break; @@ -2316,7 +2367,7 @@ wavelan_get_wireless_stats(device * dev) mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0); /* Copy data to wireless stuff. */ - wstats->status = m.mmr_dce_status; + wstats->status = m.mmr_dce_status & MMR_DCE_STATUS; wstats->qual.qual = m.mmr_sgnl_qual & MMR_SGNL_QUAL; wstats->qual.level = m.mmr_signal_lvl & MMR_SIGNAL_LVL; wstats->qual.noise = m.mmr_silence_lvl & MMR_SILENCE_LVL; @@ -2368,7 +2419,7 @@ wv_packet_read(device * dev, #ifdef DEBUG_RX_TRACE printk(KERN_DEBUG "%s: ->wv_packet_read(0x%X, %d)\n", - dev->name, fd_p, sksize); + dev->name, buf_off, sksize); #endif /* Allocate buffer for the data */ @@ -2456,6 +2507,8 @@ wv_receive(device * dev) { u_long ioaddr = dev->base_addr; net_local * lp = (net_local *)dev->priv; + fd_t fd; + rbd_t rbd; int nreaped = 0; #ifdef DEBUG_RX_TRACE @@ -2465,12 +2518,17 @@ wv_receive(device * dev) /* Loop on each received packet. */ for(;;) { - fd_t fd; - rbd_t rbd; - ushort pkt_len; - obram_read(ioaddr, lp->rx_head, (unsigned char *) &fd, sizeof(fd)); + /* Note about the status : + * It start up to be 0 (the value we set). Then, when the RU + * grab the buffer to prepare for reception, it sets the + * FD_STATUS_B flag. When the RU has finished receiving the + * frame, it clears FD_STATUS_B, set FD_STATUS_C to indicate + * completion and set the other flags to indicate the eventual + * errors. FD_STATUS_OK indicates that the reception was OK. + */ + /* If the current frame is not complete, we have reached the end. */ if((fd.fd_status & FD_STATUS_C) != FD_STATUS_C) break; /* This is how we exit the loop. */ @@ -2478,35 +2536,44 @@ wv_receive(device * dev) nreaped++; /* Check whether frame was correctly received. */ - if((fd.fd_status & (FD_STATUS_B | FD_STATUS_OK)) != - (FD_STATUS_B | FD_STATUS_OK)) + if((fd.fd_status & FD_STATUS_OK) == FD_STATUS_OK) { - /* - * Not sure about this one -- it does not seem - * to be an error so we will keep quiet about it. - */ -#ifndef IGNORE_NORMAL_XMIT_ERRS -#ifdef DEBUG_RX_ERROR - if((fd.fd_status & FD_STATUS_B) != FD_STATUS_B) - printk(KERN_INFO "%s: wv_receive(): frame not consumed by RU.\n", - dev->name); -#endif -#endif /* IGNORE_NORMAL_XMIT_ERRS */ + /* Does the frame contain a pointer to the data? Let's check. */ + if(fd.fd_rbd_offset != I82586NULL) + { + /* Read the receive buffer descriptor */ + obram_read(ioaddr, fd.fd_rbd_offset, + (unsigned char *) &rbd, sizeof(rbd)); #ifdef DEBUG_RX_ERROR - if((fd.fd_status & FD_STATUS_OK) != FD_STATUS_OK) - printk(KERN_INFO "%s: wv_receive(): frame not received successfully.\n", + if((rbd.rbd_status & RBD_STATUS_EOF) != RBD_STATUS_EOF) + printk(KERN_INFO "%s: wv_receive(): missing EOF flag.\n", + dev->name); + + if((rbd.rbd_status & RBD_STATUS_F) != RBD_STATUS_F) + printk(KERN_INFO "%s: wv_receive(): missing F flag.\n", + dev->name); +#endif /* DEBUG_RX_ERROR */ + + /* Read the packet and transmit to Linux */ + wv_packet_read(dev, rbd.rbd_bufl, + rbd.rbd_status & RBD_STATUS_ACNT); + } +#ifdef DEBUG_RX_ERROR + else /* if frame has no data */ + printk(KERN_INFO "%s: wv_receive(): frame has no data.\n", dev->name); #endif } - - /* Were there problems in processing the frame? Let's check. */ - if((fd.fd_status & (FD_STATUS_S6 | FD_STATUS_S7 | FD_STATUS_S8 | - FD_STATUS_S9 | FD_STATUS_S10 | FD_STATUS_S11)) - != 0) + else /* If reception was no successful */ { lp->stats.rx_errors++; +#ifdef DEBUG_RX_INFO + printk(KERN_DEBUG "%s: wv_receive(): frame not received successfully (%X).\n", + dev->name, fd.fd_status); +#endif + #ifdef DEBUG_RX_ERROR if((fd.fd_status & FD_STATUS_S6) != 0) printk(KERN_INFO "%s: wv_receive(): no EOF flag.\n", dev->name); @@ -2515,8 +2582,8 @@ wv_receive(device * dev) if((fd.fd_status & FD_STATUS_S7) != 0) { lp->stats.rx_length_errors++; -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): frame too short.\n", +#ifdef DEBUG_RX_FAIL + printk(KERN_DEBUG "%s: wv_receive(): frame too short.\n", dev->name); #endif } @@ -2524,8 +2591,8 @@ wv_receive(device * dev) if((fd.fd_status & FD_STATUS_S8) != 0) { lp->stats.rx_over_errors++; -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): rx DMA overrun.\n", +#ifdef DEBUG_RX_FAIL + printk(KERN_DEBUG "%s: wv_receive(): rx DMA overrun.\n", dev->name); #endif } @@ -2533,8 +2600,8 @@ wv_receive(device * dev) if((fd.fd_status & FD_STATUS_S9) != 0) { lp->stats.rx_fifo_errors++; -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): ran out of resources.\n", +#ifdef DEBUG_RX_FAIL + printk(KERN_DEBUG "%s: wv_receive(): ran out of resources.\n", dev->name); #endif } @@ -2542,8 +2609,8 @@ wv_receive(device * dev) if((fd.fd_status & FD_STATUS_S10) != 0) { lp->stats.rx_frame_errors++; -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): alignment error.\n", +#ifdef DEBUG_RX_FAIL + printk(KERN_DEBUG "%s: wv_receive(): alignment error.\n", dev->name); #endif } @@ -2551,38 +2618,12 @@ wv_receive(device * dev) if((fd.fd_status & FD_STATUS_S11) != 0) { lp->stats.rx_crc_errors++; -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): CRC error.\n", dev->name); +#ifdef DEBUG_RX_FAIL + printk(KERN_DEBUG "%s: wv_receive(): CRC error.\n", dev->name); #endif } } - /* Does the frame contain a pointer to the data? Let's check. */ - if(fd.fd_rbd_offset == I82586NULL) -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_receive(): frame has no data.\n", dev->name); -#endif - else - { - obram_read(ioaddr, fd.fd_rbd_offset, - (unsigned char *) &rbd, sizeof(rbd)); - -#ifdef DEBUG_RX_ERROR - if((rbd.rbd_status & RBD_STATUS_EOF) != RBD_STATUS_EOF) - printk(KERN_INFO "%s: wv_receive(): missing EOF flag.\n", - dev->name); - - if((rbd.rbd_status & RBD_STATUS_F) != RBD_STATUS_F) - printk(KERN_INFO "%s: wv_receive(): missing F flag.\n", - dev->name); -#endif - - pkt_len = rbd.rbd_status & RBD_STATUS_ACNT; - - /* Read the packet and transmit to Linux */ - wv_packet_read(dev, rbd.rbd_bufl, pkt_len); - } /* if frame has data */ - fd.fd_status = 0; obram_write(ioaddr, fdoff(lp->rx_head, fd_status), (unsigned char *) &fd.fd_status, sizeof(fd.fd_status)); @@ -2717,7 +2758,7 @@ if (lp->tx_n_in_use > 0) /* * Data */ - obram_write(ioaddr, buf_addr, buf, clen); + obram_write(ioaddr, buf_addr, buf, length); /* * Overwrite the predecessor NOP link @@ -2892,6 +2933,8 @@ wv_mmc_init(device * dev) (unsigned char *)&psa.psa_quality_thr, 1); psa_write(ioaddr, lp->hacr, (char *)&psa.psa_conf_status - (char *)&psa, (unsigned char *)&psa.psa_conf_status, 1); + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, lp->hacr); #endif } @@ -2918,21 +2961,18 @@ wv_mmc_init(device * dev) m.mmw_thr_pre_set = psa.psa_thr_pre_set & 0x3F; m.mmw_quality_thr = psa.psa_quality_thr & 0x0F; - /* Encryption stuff is missing. */ - /* * Set default modem control parameters. * See NCR document 407-0024326 Rev. A. */ m.mmw_jabber_enable = 0x01; + m.mmw_freeze = 0; m.mmw_anten_sel = MMW_ANTEN_SEL_ALG_EN; m.mmw_ifs = 0x20; m.mmw_mod_delay = 0x04; m.mmw_jam_time = 0x38; - m.mmw_encr_enable = 0; m.mmw_des_io_invert = 0; - m.mmw_freeze = 0; m.mmw_decay_prm = 0; m.mmw_decay_updat_prm = 0; @@ -3066,7 +3106,7 @@ wv_ru_start(device * dev) if(i <= 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wavelan_ru_start(): board not accepting command.\n", dev->name); #endif @@ -3170,7 +3210,7 @@ wv_cu_start(device * dev) if(i <= 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wavelan_cu_start(): board not accepting command.\n", dev->name); #endif @@ -3257,7 +3297,7 @@ wv_82586_start(device * dev) if(i <= 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wv_82586_start(): iscp_busy timeout.\n", dev->name); #endif @@ -3277,7 +3317,7 @@ wv_82586_start(device * dev) if (i <= 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wv_82586_start(): status: expected 0x%02x, got 0x%02x.\n", dev->name, SCB_ST_CX | SCB_ST_CNA, scb.scb_status); #endif @@ -3298,7 +3338,7 @@ wv_82586_start(device * dev) obram_read(ioaddr, OFFSET_CU, (unsigned char *)&cb, sizeof(cb)); if(cb.ac_status & AC_SFLD_FAIL) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wv_82586_start(): i82586 Self Test failed.\n", dev->name); #endif @@ -3398,39 +3438,29 @@ wv_82586_config(device * dev) /* Create a configure action. */ memset(&cfg, 0x00, sizeof(cfg)); -#if 0 - /* - * The default board configuration - */ - cfg.fifolim_bytecnt = 0x080c; - cfg.addrlen_mode = 0x2600; - cfg.linprio_interframe = 0x7820; /* IFS=120, ACS=2 */ - cfg.slot_time = 0xf00c; /* slottime=12 */ - cfg.hardware = 0x0008; /* tx even without CD */ - cfg.min_frame_len = 0x0040; -#endif /* 0 */ - /* * For Linux we invert AC_CFG_ALOC() so as to conform * to the way that net packets reach us from above. * (See also ac_tx_t.) + * + * Updated from Wavelan Manual WCIN085B */ cfg.cfg_byte_cnt = AC_CFG_BYTE_CNT(sizeof(ac_cfg_t) - sizeof(ach_t)); - cfg.cfg_fifolim = AC_CFG_FIFOLIM(8); - cfg.cfg_byte8 = AC_CFG_SAV_BF(0) | + cfg.cfg_fifolim = AC_CFG_FIFOLIM(4); + cfg.cfg_byte8 = AC_CFG_SAV_BF(1) | AC_CFG_SRDY(0); cfg.cfg_byte9 = AC_CFG_ELPBCK(0) | AC_CFG_ILPBCK(0) | AC_CFG_PRELEN(AC_CFG_PLEN_2) | AC_CFG_ALOC(1) | AC_CFG_ADDRLEN(WAVELAN_ADDR_SIZE); - cfg.cfg_byte10 = AC_CFG_BOFMET(0) | - AC_CFG_ACR(0) | + cfg.cfg_byte10 = AC_CFG_BOFMET(1) | + AC_CFG_ACR(6) | AC_CFG_LINPRIO(0); - cfg.cfg_ifs = 32; - cfg.cfg_slotl = 0; + cfg.cfg_ifs = 0x20; + cfg.cfg_slotl = 0x0C; cfg.cfg_byte13 = AC_CFG_RETRYNUM(15) | - AC_CFG_SLTTMHI(2); + AC_CFG_SLTTMHI(0); cfg.cfg_byte14 = AC_CFG_FLGPAD(0) | AC_CFG_BTSTF(0) | AC_CFG_CRC16(0) | @@ -3589,13 +3619,16 @@ wv_hw_reset(device * dev) wv_ints_on(dev); /* Start card functions */ - if((wv_ru_start(dev) < 0) || - (wv_cu_start(dev) < 0)) + if(wv_cu_start(dev) < 0) return -1; - /* Finish configuration. */ + /* Setup the controller and parameters */ wv_82586_config(dev); + /* Finish configuration with the receive unit */ + if(wv_ru_start(dev) < 0) + return -1; + #ifdef DEBUG_CONFIG_TRACE printk(KERN_DEBUG "%s: <-wv_hw_reset()\n", dev->name); #endif @@ -3896,7 +3929,7 @@ wavelan_open(device * dev) /* Check irq */ if(dev->irq == 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_WARNING "%s: wavelan_open(): no IRQ\n", dev->name); #endif return -ENXIO; @@ -3904,7 +3937,7 @@ wavelan_open(device * dev) if(request_irq(dev->irq, &wavelan_interrupt, 0, "WaveLAN", dev) != 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_WARNING "%s: wavelan_open(): invalid IRQ\n", dev->name); #endif return -EAGAIN; @@ -3919,7 +3952,7 @@ wavelan_open(device * dev) else { free_irq(dev->irq, dev); -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_INFO "%s: wavelan_open(): impossible to start the card\n", dev->name); #endif @@ -4016,6 +4049,8 @@ wavelan_config(device * dev)) #endif psa_write(ioaddr, HACR_DEFAULT, psaoff(0, psa_int_req_no), &irq_mask, 1); + /* update the Wavelan checksum */ + update_psa_checksum(dev, ioaddr, HACR_DEFAULT); wv_hacr_reset(ioaddr); } } @@ -4069,7 +4104,9 @@ wavelan_config(device * dev)) dev->hard_start_xmit = wavelan_packet_xmit; dev->get_stats = wavelan_get_stats; dev->set_multicast_list = &wavelan_set_multicast_list; +#ifdef SET_MAC_ADDRESS dev->set_mac_address = &wavelan_set_mac_address; +#endif /* SET_MAC_ADDRESS */ #ifdef WIRELESS_EXT /* if wireless extension exists in the kernel */ dev->do_ioctl = wavelan_ioctl; @@ -4123,7 +4160,7 @@ wavelan_probe(device * dev)) /* Don't probe at all. */ if(base_addr < 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_WARNING "%s: wavelan_probe(): invalid base address\n", dev->name); #endif @@ -4196,7 +4233,7 @@ int init_module(void) { mac_addr mac; /* MAC address (check WaveLAN existence) */ - int ret = 0; + int ret = -EIO; /* Return error if no cards found */ int i; #ifdef DEBUG_MODULE_TRACE @@ -4206,7 +4243,7 @@ init_module(void) /* If probing is asked */ if(io[0] == 0) { -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR printk(KERN_WARNING "WaveLAN init_module(): doing device probing (bad !)\n"); printk(KERN_WARNING "Specify base addresses while loading module to correct the problem\n"); #endif @@ -4241,12 +4278,16 @@ init_module(void) /* Deallocate everything. */ /* Note: if dev->priv is mallocated, there is no way to fail. */ kfree_s(dev, sizeof(struct device)); - ret = -EIO; + } + else + { + /* If at least one device OK, we do not fail */ + ret = 0; } } /* if there is something at the address */ } /* Loop on all addresses. */ -#ifdef DEBUG_CONFIG_ERRORS +#ifdef DEBUG_CONFIG_ERROR if(wavelan_list == (net_local *) NULL) printk(KERN_WARNING "WaveLAN init_module(): no device found\n"); #endif diff --git a/drivers/net/wavelan.h b/drivers/net/wavelan.h index ca67dbf66..df9c49344 100644 --- a/drivers/net/wavelan.h +++ b/drivers/net/wavelan.h @@ -28,6 +28,8 @@ const char MAC_ADDRESSES[][3] = { { 0x08, 0x00, 0x0E }, /* AT&T WaveLAN (standard) & DEC RoamAbout */ { 0x08, 0x00, 0x6A }, /* AT&T WaveLAN (alternate) */ + { 0x00, 0x00, 0xE1 }, /* Hitachi Wavelan */ + { 0x00, 0x60, 0x1D } /* Lucent Wavelan (another one) */ /* Add your card here and send me the patch! */ }; @@ -293,6 +295,7 @@ struct mmr_t #define MMR_DCE_STATUS_LOOPT_IND 0x02 /* loop test indicated */ #define MMR_DCE_STATUS_TX_BUSY 0x04 /* transmitter on */ #define MMR_DCE_STATUS_JBR_EXPIRED 0x08 /* jabber timer expired */ +#define MMR_DCE_STATUS 0x0F /* mask to get the bits */ unsigned char mmr_dsp_id; /* DSP ID (AA = Daedalus rev A) */ unsigned char mmr_unused2[2]; /* unused */ unsigned char mmr_correct_nwid_l; /* # of correct NWIDs rxd (low) */ diff --git a/drivers/net/wavelan.p.h b/drivers/net/wavelan.p.h index 251f2b98e..9a2f16847 100644 --- a/drivers/net/wavelan.p.h +++ b/drivers/net/wavelan.p.h @@ -18,13 +18,7 @@ * This driver provides a Linux interface to the WaveLAN ISA hardware. * The WaveLAN is a product of Lucent (http://www.wavelan.com/). * This division was formerly part of NCR and then AT&T. - * WaveLANs are also distributed by DEC (RoamAbout), Digital Ocean and - * Aironet (Arlan). If you have one of those products, you will need to - * make some changes below. - * - * This driver is still beta software. A lot of bugs have been corrected, - * a lot of functionality is implemented, and the whole appears stable, - * but there is still room for improvement (encryption, performance). + * WaveLANs are also distributed by DEC (RoamAbout DS) and Digital Ocean. * * To learn how to use this driver, read the NET3 HOWTO. * If you want to exploit the many other functionalities, read the comments @@ -35,11 +29,27 @@ /* ------------------------ SPECIFIC NOTES ------------------------ */ /* + * Web page + * -------- + * I try to maintain a web page with the Wireless LAN Howto at : + * http://www-uk.hpl.hp.com/people/jt/Linux/Wavelan.html + * + * Debugging and options + * --------------------- + * You will find below a set of '#define" allowing a very fine control + * on the driver behaviour and the debug messages printed. + * The main options are : + * o SET_PSA_CRC, to have your card correctly recognised by + * an access point and the Point-to-Point diagnostic tool. + * o USE_PSA_CONFIG, to read configuration from the PSA (EEprom) + * (otherwise we always start afresh with some defaults) + * * wavelan.o is too darned big * --------------------------- * That's true! There is a very simple way to reduce the driver * object by 33%! Comment out the following line: * #include + * Other compile options can also reduce the size of it... * * MAC address and hardware detection: * ----------------------------------- @@ -60,23 +70,6 @@ * 3) Compile and verify * 4) Send me the MAC code. I will include it in the next version. * - * "CU Inactive" message at boot up: - * ----------------------------------- - * It seems that there is some weird timing problem with the - * Intel microcontroller. In fact, this message is triggered by a - * bad reading of the onboard RAM the first time we read the - * control block. If you ignore this message, all is OK (but in - * fact, currently, it resets the WaveLAN hardware). - * - * There are two ways to get rid of that problem. The first - * is to add a dummy read of the scb at the end of - * wv_82586_config. The second is to add the timers - * wv_synchronous_cmd and wv_ack (the udelay just after the - * waiting loops--it seems that the controller is not totally ready - * when it says it is). - * - * In the current code, I use the second solution (to be - * consistent with the original solution of Bruce Janson). */ /* --------------------- WIRELESS EXTENSIONS --------------------- */ @@ -273,6 +266,32 @@ * - encryption setting from Brent Elphick (thanks a lot!) * - 'ioaddr' to 'u_long' for the Alpha (thanks to Stanislav Sinyagin) * + * Other changes (not by me) : + * ------------------------- + * - Spelling and gramar "rectification". + * + * Changes made for release in 2.0.37 & 2.2.2 : + * ------------------------------------------ + * - Correct status in /proc/net/wireless + * - Set PSA CRC to make PtP diagnostic tool happy (Bob Gray) + * - Module init code don't fail if we found at least one card in + * the address list (Karlis Peisenieks) + * - Missing parenthesis (Christopher Peterson) + * - Correct i82586 configuration parameters + * - Encryption initialisation bug (Robert McCormack) + * - New mac addresses detected in the probe + * - Increase watchdog for busy environments + * + * Changes made for release in 2.0.38 & 2.2.7 : + * ------------------------------------------ + * - Correct the reception logic to better report errors and avoid + * sending bogus packet up the stack + * - Delay RU config to avoid corrupting first received packet + * - Change config completion code (to actually check something) + * - Avoid reading out of bound in skbuf to transmit + * - Rectify a lot of (useless) debugging code + * - Change the way to `#ifdef SET_PSA_CRC' + * * Wishes & dreams: * ---------------- * - roaming @@ -312,6 +331,24 @@ #include "i82586.h" #include "wavelan.h" +/************************** DRIVER OPTIONS **************************/ +/* + * `#define' or `#undef' the following constant to change the behaviour + * of the driver... + */ +#undef SET_PSA_CRC /* Calculate and set the CRC on PSA (slower) */ +#define USE_PSA_CONFIG /* Use info from the PSA. */ +#undef STRUCT_CHECK /* Verify padding of structures. */ +#undef EEPROM_IS_PROTECTED /* doesn't seem to be necessary */ +#define MULTICAST_AVOID /* Avoid extra multicast (I'm sceptical). */ +#undef SET_MAC_ADDRESS /* Experimental */ + +#ifdef WIRELESS_EXT /* If wireless extensions exist in the kernel */ +/* Warning: this stuff will slow down the driver. */ +#define WIRELESS_SPY /* Enable spying addresses. */ +#undef HISTOGRAM /* Enable histogram of signal level. */ +#endif + /****************************** DEBUG ******************************/ #undef DEBUG_MODULE_TRACE /* module insertion/removal */ @@ -321,14 +358,16 @@ #define DEBUG_INTERRUPT_ERROR /* problems */ #undef DEBUG_CONFIG_TRACE /* Trace the config functions. */ #undef DEBUG_CONFIG_INFO /* what's going on */ -#define DEBUG_CONFIG_ERRORS /* errors on configuration */ +#define DEBUG_CONFIG_ERROR /* errors on configuration */ #undef DEBUG_TX_TRACE /* transmission calls */ #undef DEBUG_TX_INFO /* header of the transmitted packet */ -#define DEBUG_TX_ERROR /* unexpected conditions */ +#undef DEBUG_TX_FAIL /* Normal failure conditions */ +#define DEBUG_TX_ERROR /* Unexpected conditions */ #undef DEBUG_RX_TRACE /* transmission calls */ -#undef DEBUG_RX_INFO /* header of the transmitted packet */ -#define DEBUG_RX_ERROR /* unexpected conditions */ -#undef DEBUG_PACKET_DUMP 16 /* Dump packet on the screen. */ +#undef DEBUG_RX_INFO /* header of the received packet */ +#undef DEBUG_RX_FAIL /* Normal failure conditions */ +#define DEBUG_RX_ERROR /* Unexpected conditions */ +#undef DEBUG_PACKET_DUMP 32 /* Dump packet on the screen. */ #undef DEBUG_IOCTL_TRACE /* misc. call by Linux */ #undef DEBUG_IOCTL_INFO /* various debugging info */ #define DEBUG_IOCTL_ERROR /* what's going wrong */ @@ -340,30 +379,14 @@ #undef DEBUG_I82586_SHOW /* Show i82586 status. */ #undef DEBUG_DEVICE_SHOW /* Show device parameters. */ -/* Options */ -#define USE_PSA_CONFIG /* Use info from the PSA. */ -#define IGNORE_NORMAL_XMIT_ERRS /* Don't bother with normal conditions. */ -#undef STRUCT_CHECK /* Verify padding of structures. */ -#undef PSA_CRC /* Check CRC in PSA. */ -#undef OLDIES /* old code (to redo) */ -#undef RECORD_SNR /* to redo */ -#undef EEPROM_IS_PROTECTED /* doesn't seem to be necessary */ -#define MULTICAST_AVOID /* Avoid extra multicast (I'm sceptical). */ - -#ifdef WIRELESS_EXT /* If wireless extensions exist in the kernel */ -/* Warning: this stuff will slow down the driver. */ -#define WIRELESS_SPY /* Enable spying addresses. */ -#undef HISTOGRAM /* Enable histogram of signal level. */ -#endif - /************************ CONSTANTS & MACROS ************************/ #ifdef DEBUG_VERSION_SHOW -static const char *version = "wavelan.c : v16 (wireless extensions) 17/4/97\n"; +static const char *version = "wavelan.c : v19 (wireless extensions) 20/4/99\n"; #endif /* Watchdog temporisation */ -#define WATCHDOG_JIFFIES 32 /* TODO: express in HZ. */ +#define WATCHDOG_JIFFIES 256 /* TODO: express in HZ. */ /* Macro to get the number of elements in an array */ #define NELS(a) (sizeof(a) / sizeof(a[0])) diff --git a/drivers/net/z85230.c b/drivers/net/z85230.c index 7e7cc5d14..889a82d90 100644 --- a/drivers/net/z85230.c +++ b/drivers/net/z85230.c @@ -48,6 +48,7 @@ #include #include "z85230.h" +#include "syncppp.h" static spinlock_t z8530_buffer_lock = SPIN_LOCK_UNLOCKED; @@ -349,6 +350,7 @@ static void z8530_status(struct z8530_channel *chan) if(status&TxEOM) { /* printk("%s: Tx underrun.\n", chan->dev->name); */ + chan->stats.tx_fifo_errors++; write_zsctrl(chan, ERR_RES); z8530_tx_done(chan); } @@ -359,6 +361,8 @@ static void z8530_status(struct z8530_channel *chan) { printk(KERN_INFO "%s: DCD raised\n", chan->dev->name); write_zsreg(chan, R3, chan->regs[3]|RxENABLE); + if(chan->netdevice) + sppp_reopen(chan->netdevice); } else { @@ -413,8 +417,9 @@ static void z8530_dma_rx(struct z8530_channel *chan) static void z8530_dma_tx(struct z8530_channel *chan) { - if(!chan->txdma_on) + if(!chan->dma_tx) { + printk("Hey who turned the DMA off?\n"); z8530_tx(chan); return; } @@ -431,7 +436,7 @@ static void z8530_dma_status(struct z8530_channel *chan) chan->status=status; - if(chan->txdma_on) + if(chan->dma_tx) { if(status&TxEOM) { @@ -450,6 +455,8 @@ static void z8530_dma_status(struct z8530_channel *chan) { printk(KERN_INFO "%s: DCD raised\n", chan->dev->name); write_zsreg(chan, R3, chan->regs[3]|RxENABLE); + if(chan->netdevice) + sppp_reopen(chan->netdevice); } else { @@ -614,6 +621,9 @@ int z8530_sync_open(struct device *dev, struct z8530_channel *c) z8530_rx_done(c); /* Load the frame ring */ z8530_rx_done(c); /* Load the backup frame */ z8530_rtsdtr(c,1); + c->dma_tx = 0; + c->regs[R1]|=TxINT_ENAB; + write_zsreg(c, R1, c->regs[R1]); write_zsreg(c, R3, c->regs[R3]|RxENABLE); return 0; } @@ -701,6 +711,9 @@ int z8530_sync_dma_open(struct device *dev, struct z8530_channel *c) c->regs[R14]|= DTRREQ; write_zsreg(c, R14, c->regs[R14]); + c->regs[R1]&= ~TxINT_ENAB; + write_zsreg(c, R1, c->regs[R1]); + /* * RX DMA via W/Req */ @@ -708,6 +721,7 @@ int z8530_sync_dma_open(struct device *dev, struct z8530_channel *c) c->regs[R1]|= WT_FN_RDYFN; c->regs[R1]|= WT_RDY_RT; c->regs[R1]|= INT_ERR_Rx; + c->regs[R1]&= ~TxINT_ENAB; write_zsreg(c, R1, c->regs[R1]); c->regs[R1]|= WT_RDY_ENAB; write_zsreg(c, R1, c->regs[R1]); @@ -967,7 +981,7 @@ void z8530_describe(struct z8530_dev *dev, char *mapping, int io) dev->name, z8530_type_name[dev->type], mapping, - io, + Z8530_PORT_OF(io), dev->irq); } @@ -986,7 +1000,7 @@ int z8530_init(struct z8530_dev *dev) dev->chanB.irqs=&z8530_nop; /* Reset the chip */ write_zsreg(&dev->chanA, R9, 0xC0); - udelay(100); + udelay(200); /* Now check its valid */ write_zsreg(&dev->chanA, R12, 0xAA); if(read_zsreg(&dev->chanA, R12)!=0xAA) @@ -1103,17 +1117,24 @@ static void z8530_tx_begin(struct z8530_channel *c) if(c->tx_skb==NULL) { /* Idle on */ - if(c->txdma) + if(c->dma_tx) { flags=claim_dma_lock(); disable_dma(c->txdma); + /* + * Check if we crapped out. + */ + if(get_dma_residue(c->txdma)) + { + c->stats.tx_dropped++; + c->stats.tx_fifo_errors++; + } release_dma_lock(flags); } c->txcount=0; } else { - c->tx_ptr=c->tx_next_ptr; c->txcount=c->tx_skb->len; @@ -1128,11 +1149,24 @@ static void z8530_tx_begin(struct z8530_channel *c) flags=claim_dma_lock(); disable_dma(c->txdma); + + /* + * These two are needed by the 8530/85C30 + * and must be issued when idling. + */ + + if(c->dev->type!=Z85230) + { + write_zsctrl(c, RES_Tx_CRC); + write_zsctrl(c, RES_EOM_L); + } + write_zsreg(c, R10, c->regs[10]&~ABUNDER); clear_dma_ff(c->txdma); set_dma_addr(c->txdma, virt_to_bus(c->tx_ptr)); set_dma_count(c->txdma, c->txcount); enable_dma(c->txdma); release_dma_lock(flags); + write_zsctrl(c, RES_EOM_L); write_zsreg(c, R5, c->regs[R5]|TxENAB); } else @@ -1142,7 +1176,7 @@ static void z8530_tx_begin(struct z8530_channel *c) /* ABUNDER off */ write_zsreg(c, R10, c->regs[10]); write_zsctrl(c, RES_Tx_CRC); - write_zsctrl(c, RES_EOM_L); +//??? write_zsctrl(c, RES_EOM_L); while(c->txcount && (read_zsreg(c,R0)&Tx_BUF_EMP)) { @@ -1162,17 +1196,18 @@ static void z8530_tx_done(struct z8530_channel *c) spin_lock_irqsave(&z8530_buffer_lock, flags); c->netdevice->tbusy=0; - /* Can't happen */ + /* Actually this can happen.*/ if(c->tx_skb==NULL) { spin_unlock_irqrestore(&z8530_buffer_lock, flags); - printk(KERN_WARNING "%s: spurious tx done\n", c->dev->name); return; } skb=c->tx_skb; c->tx_skb=NULL; z8530_tx_begin(c); spin_unlock_irqrestore(&z8530_buffer_lock, flags); + c->stats.tx_packets++; + c->stats.tx_bytes+=skb->len; dev_kfree_skb(skb); } @@ -1255,11 +1290,16 @@ static void z8530_rx_done(struct z8530_channel *c) skb=dev_alloc_skb(ct); if(skb==NULL) - printk("%s: Memory squeeze.\n", c->netdevice->name); + { + c->stats.rx_dropped++; + printk(KERN_WARNING "%s: Memory squeeze.\n", c->netdevice->name); + } else { skb_put(skb, ct); memcpy(skb->data, rxb, ct); + c->stats.rx_packets++; + c->stats.rx_bytes+=ct; } c->dma_ready=1; } @@ -1305,6 +1345,9 @@ static void z8530_rx_done(struct z8530_channel *c) { skb_put(c->skb2,c->mtu); } + c->stats.rx_packets++; + c->stats.rx_bytes+=ct; + } /* * If we received a frame we must now process it. @@ -1315,7 +1358,10 @@ static void z8530_rx_done(struct z8530_channel *c) c->rx_function(c,skb); } else - printk("Lost a frame\n"); + { + c->stats.rx_dropped++; + printk(KERN_ERR "%s: Lost a frame\n", c->netdevice->name); + } } /* -- cgit v1.2.3