3C359: use request_firmware

Signed-off-by: default avatarJaswinder Singh Rajput <jaswinderrajput@gmail.com>
parent a7a5eb9d
......@@ -62,6 +62,7 @@
#include <linux/pci.h>
#include <linux/spinlock.h>
#include <linux/bitops.h>
#include <linux/firmware.h>
#include <net/checksum.h>
......@@ -73,8 +74,10 @@
static char version[] __devinitdata =
"3c359.c v1.2.0 2/17/01 - Mike Phillips (mikep@linuxtr.net)" ;
#define FW_NAME "3com/3C359.bin"
MODULE_AUTHOR("Mike Phillips <mikep@linuxtr.net>") ;
MODULE_DESCRIPTION("3Com 3C359 Velocity XL Token Ring Adapter Driver \n") ;
MODULE_FIRMWARE(FW_NAME);
/* Module paramters */
......@@ -114,8 +117,6 @@ MODULE_PARM_DESC(message_level, "3c359: Level of reported messages") ;
* will be stuck with 1555 lines of hex #'s in the code.
*/
#include "3c359_microcode.h"
static struct pci_device_id xl_pci_tbl[] =
{
{PCI_VENDOR_ID_3COM,PCI_DEVICE_ID_3COM_3C359, PCI_ANY_ID, PCI_ANY_ID, },
......@@ -364,10 +365,30 @@ static int __devinit xl_probe(struct pci_dev *pdev,
return 0;
}
static int xl_init_firmware(struct xl_private *xl_priv)
{
int err;
err = request_firmware(&xl_priv->fw, FW_NAME, &xl_priv->pdev->dev);
if (err) {
printk(KERN_ERR "Failed to load firmware \"%s\"\n", FW_NAME);
return err;
}
if (xl_priv->fw->size < 16) {
printk(KERN_ERR "Bogus length %zu in \"%s\"\n",
xl_priv->fw->size, FW_NAME);
release_firmware(xl_priv->fw);
err = -EINVAL;
}
return err;
}
static int __devinit xl_init(struct net_device *dev)
{
struct xl_private *xl_priv = netdev_priv(dev);
int err;
printk(KERN_INFO "%s \n", version);
printk(KERN_INFO "%s: I/O at %hx, MMIO at %p, using irq %d\n",
......@@ -375,8 +396,11 @@ static int __devinit xl_init(struct net_device *dev)
spin_lock_init(&xl_priv->xl_lock) ;
return xl_hw_reset(dev) ;
err = xl_init_firmware(xl_priv);
if (err == 0)
err = xl_hw_reset(dev);
return err;
}
......@@ -386,7 +410,7 @@ static int __devinit xl_init(struct net_device *dev)
*/
static int xl_hw_reset(struct net_device *dev)
{
{
struct xl_private *xl_priv = netdev_priv(dev);
u8 __iomem *xl_mmio = xl_priv->xl_mmio ;
unsigned long t ;
......@@ -396,6 +420,9 @@ static int xl_hw_reset(struct net_device *dev)
u16 start ;
int j ;
if (xl_priv->fw == NULL)
return -EINVAL;
/*
* Reset the card. If the card has got the microcode on board, we have
* missed the initialization interrupt, so we must always do this.
......@@ -458,25 +485,30 @@ static int xl_hw_reset(struct net_device *dev)
/*
* Now to write the microcode into the shared ram
* The microcode must finish at position 0xFFFF, so we must subtract
* to get the start position for the code
* The microcode must finish at position 0xFFFF,
* so we must subtract to get the start position for the code
*
* Looks strange but ensures compiler only uses
* 16 bit unsigned int
*/
start = (0xFFFF - (xl_priv->fw->size) + 1) ;
start = (0xFFFF - (mc_size) + 1 ) ; /* Looks strange but ensures compiler only uses 16 bit unsigned int for this */
printk(KERN_INFO "3C359: Uploading Microcode: ");
for (i = start, j = 0; j < mc_size; i++, j++) {
writel(MEM_BYTE_WRITE | 0XD0000 | i, xl_mmio + MMIO_MAC_ACCESS_CMD) ;
writeb(microcode[j],xl_mmio + MMIO_MACDATA) ;
for (i = start, j = 0; j < xl_priv->fw->size; i++, j++) {
writel(MEM_BYTE_WRITE | 0XD0000 | i,
xl_mmio + MMIO_MAC_ACCESS_CMD);
writeb(xl_priv->fw->data[j], xl_mmio + MMIO_MACDATA);
if (j % 1024 == 0)
printk(".");
}
printk("\n") ;
for (i=0;i < 16; i++) {
writel( (MEM_BYTE_WRITE | 0xDFFF0) + i, xl_mmio + MMIO_MAC_ACCESS_CMD) ;
writeb(microcode[mc_size - 16 + i], xl_mmio + MMIO_MACDATA) ;
for (i = 0; i < 16; i++) {
writel((MEM_BYTE_WRITE | 0xDFFF0) + i,
xl_mmio + MMIO_MAC_ACCESS_CMD);
writeb(xl_priv->fw->data[xl_priv->fw->size - 16 + i],
xl_mmio + MMIO_MACDATA);
}
/*
......@@ -1782,6 +1814,7 @@ static void __devexit xl_remove_one (struct pci_dev *pdev)
struct net_device *dev = pci_get_drvdata(pdev);
struct xl_private *xl_priv=netdev_priv(dev);
release_firmware(xl_priv->fw);
unregister_netdev(dev);
iounmap(xl_priv->xl_mmio) ;
pci_release_regions(pdev) ;
......
......@@ -284,5 +284,8 @@ struct xl_private {
u8 xl_laa[6] ;
u32 rx_ring_dma_addr ;
u32 tx_ring_dma_addr ;
/* firmware section */
const struct firmware *fw;
};
This source diff could not be displayed because it is too large. You can view the blob instead.
:10000000FE3A0000000000000000000000000000B8
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000030332F30322F39392031CA
:10005000373A3133000000000000000000000000CB
:1000600030313233343536373839414243444546EE
:10007000000007FF0200FE9F0600007C48000070A1
:100080008200FFFF8600FFFF8800FFFF9A00FFFF4E
:10009000FFFF1100C000FFFFFFFF11223344556630
:1000A00033434F4D20424142451140C000FFFFFF06
:1000B000FF1122334455665374617274206F6620B9
:1000C0004C4C43206672616D652E2020546F746124
:1000D0006C20646174612073697A6520697320788B
:1000E000787820202042414245E8D201833EF7340F
:1000F000007521E84100833EF734007517E882005F
:10010000833EF73400750DE8BF00833EF734007579
:1001100003E84102C31EB800F08ED833F6B9008060
:1001200033DBAD03D8E2FB1FB8000083FB00740390
:10013000B82200A3F734C3FABA5600B0FFEE33C0BA
:100140008EC033F6B9FF7F833EFF340074088D3EC6
:100150003061D1EF2BCF268B1C26C704FFFF2683EF
:100160003CFF751726C704000026833C00750C264B
:10017000891C4646E2E0B80000EB03B82400A3F770
:1001800034C3FAB4D79E733A753879367B349FB14D
:1001900005D2EC732DB040D0E071277925D0E07303
:1001A000217B1F32C0751B32E49E721674147812C4
:1001B0007A109FD2EC720BD0E470077505B800007E
:1001C000EB03B82600A3F734C3FABA5A0033C0EFE2
:1001D000EFEFEFB000E656B000E654BA5200B801B7
:1001E00001EFE8CA003C01757FE88300BA5200B80D
:1001F0000202EFE8B9003C02756EE87A00BA5200DC
:10020000B80404EFE8A8003C04755DE87100BA5238
:1002100000B80808EFE897003C08754CE86800BA99
:100220005200B81010EFE886003C10753BE85F0004
:10023000BA5200B82020EFE875003C20752AE85635
:1002400000BA5200B84040EFE864003C407519E83D
:100250004D00BA5200B88080EFE853003C8075082A
:10026000E84400B80000EB03B82800A3F734C3BA91
:100270005A00B80080EFC3BA5A00B80180EFC3BA81
:100280005A00B80280EFC3BA5A00B80380EFC3BA6D
:100290005A00B80480EFC3BA5A00B80580EFC3BA59
:1002A0005A00B80680EFC3BA5A00B80780EFC3B946
:1002B000FFFFE458E4543C0075034975F7C3FA3274
:1002C000C0E656E4563C007403E98200B0FFE656EF
:1002D000E4563CFF7578BA5200B8FFFFEFED3CFFE3
:1002E000756CB800FFEFED3C007563B0FFE654E4B9
:1002F000543CFF755932C0E654E4543C00754FB08D
:100300000FE650E450240F3C0F7543B000E650E474
:1003100050240F3C0075378CC88EC0BE7000268BF1
:1003200014268B5C02B80000EFED23C33D0000757E
:100330001DB8FFFF23C3EF8BC8ED23C33BC1750E70
:1003400083C60426833CFF75D5B80000EB03B82AAA
:1003500000A3F734C3FA33C0BF0020B91700F3ABD2
:10036000BF0030B91700F3ABBF0022B94000F3ABB8
:10037000BF0032B94000F3ABFC1E8CC88ED833C02E
:100380008EC0BE9200BF0020B91700F3A4BEA90022
:10039000BF0022B94000F3A41FC706FB346400BAB3
:1003A0000800B80F00EFE88201E89B01720DC70654
:1003B000F7342C00C706F9340400C3BA0A0033C06E
:1003C000EFE89801E8B501B81700BA9C00EFB80053
:1003D00010BA9A00EFB81700A90100740140BA8C56
:1003E00000EFB80018BA8600EFB80C00BA8200EF30
:1003F000BA0200ED25F9FF0D0200EFBA060033C086
:10040000EFBA0400B86000EFBA0000B81800EFBA05
:100410008000B9FFFFEDA901007504E2F8EB3EBAD8
:100420000A00EDA900407435A90020743033C0EFF4
:1004300051B9C800E2FE591E061F268B0E023083FA
:10044000F91775184949BE0220BF0630F3A61F23CD
:10045000C9750AFF0EFB347412E94DFF1FB82C005A
:10046000BB0000A3F734891EF934C3C706FB34640C
:1004700000E8D300720DC706F7342C00C706F93424
:100480000400C3E8D600E8F300B80300BA8200EF26
:10049000B84080BA9800EFB80011BA9600EFB840A3
:1004A00000A90100740140BA9200EFB80019BA8E99
:1004B00000EFBA0200ED25F9FF0D0600EFBA0600C5
:1004C00033C0EFBA0000B81800EFBA8000B9FFFFE0
:1004D000EDA920007504E2F8EB43BA0A00EDA9008B
:1004E00040743AA90020743533C0EF51B9C800E216
:1004F000FE591E061F268B0E023283F940751D49D8
:1005000049BE0222BF0632F3A61F23C9750FFF0E94
:10051000FB347403E95AFFB80000EB0B1FB82C0042
:10052000BB0200891EF934A3F734C3BA0200B80035
:100530009CEFBA0000B80084EF33C0EFBA0A00EFB6
:10054000BA0E0033C0EFC3BA0A00B9FFFFED2500B1
:10055000603D00607404E2F5F8C3F9C3B000E656EC
:10056000B800FFBA5200EFB9FFFFBA5800ED25EF0F
:10057000007408BA5A0033C0EFE2EFC3BA8000ED4E
:10058000BA8400EFBA8000EDC30000000000000054
:10059000C606EC341533C08ED88EC01E8CC8BE4043
:1005A00054BF60FE8ED8B91000F3A41FC706803672
:1005B0001035C7068C3630358D063835A33035A357
:1005C0003235053301A33435C70636355001C70629
:1005D000843680FEC7068836C0FEC606C2FEFFC649
:1005E00006933680C606923600C60680FE80C70691
:1005F00082FE5450C70684FE2B4DE5CEA90200753D
:1006000008C60681FE23E90500C60681FE22A1F781
:1006100034A386FEB8483486E0A388FE8D064E34A7
:1006200086E0A38AFEB8583486E0A38CFEB89C34DA
:1006300086E0A38EFE8D06200386E0A390FE33C0E5
:10064000BA7200EF33C0BA7400EFBA7600EFB88028
:10065000FE86E0BA7200EFE8BF07BA0C01B840406E
:10066000EFEDBA6A00B80300C1E0080D0300EFB96E
:100670000A00E89400BA6A00B80300C1E008EFA1DC
:100680003234A3A233C706A63304008D06A033C1BB
:10069000E804CD39C7069036FFFFE9E300630D6635
:1006A0000D660D8A0DE60E75122E0F030F500F60AA
:1006B0000D600D600DED0FE912600D600D600D60B5
:1006C0000D600D2210600D600D600D600DFE10605C
:1006D0000D600D600D600D600D600DAF0F321037B5
:1006E0000D600D600D600D600D600D600D600D60A2
:1006F0000D600D600D600D600D600D600D600D6092
:100700000D640E000F9509600A49BBFFFFBA6A002D
:10071000EDA900207438803E80FE127531E84A0051
:10072000A13234A3A233C706A63304008D06A0333A
:10073000C1E804CD39E82200C706F3344600C706F5
:10074000F534FFFFC7069036FFFF58E932004B83B0
:10075000FB0075B983F90075B0C352BA6A00B803DB
:1007600000C1E0080D0300EF5AC352BA6A00B80393
:1007700000C1E008EF5AC3000000000000000000C4
:10078000688007A19036CD358B3624022EFFA43524
:100790000AFA8A2694368826E834C606943600FB80
:1007A00022E47501C3F6C420747DF6C40874058084
:1007B0000E9236048026E834D7C41E8436268B3742
:1007C00081E6FF0083FE207605B001E9280053068C
:1007D000D1E62EFF949D06075B268847023CFF74F6
:1007E000073CFE7511E93B00F6069236087534F6B3
:1007F00006923604742D80269236F3803E9536009C
:10080000752126803F057513C60695360026807F24
:1008100006007407268B4704A29536BA0C01B8402F
:1008200040EFED8A26E834F6C4107503E95B00F664
:10083000C4047405800E9236018026E834EBC43E71
:100840008836268B3583E67F83FE12720826C645DE
:100850000201E9240083C620D1E62EFF949D06C440
:100860003E8836268845023CFF750EF60692360114
:100870007414F606923602750D80269236FCBA0C78
:1008800001B82020EFED8A26E834F6C408742280EF
:1008900026E834F7800E923604F606923608741174
:1008A00080269236F3BA0C01B84040EFED8A26E874
:1008B00034F6C40474228026E834FB800E9236019C
:1008C000F606923602751180269236FEBA0C01B8F1
:1008D0002020EFED8A26E834F6C40174678026E80C
:1008E00034FE803EE8FF007439803EE8FF04743235
:1008F000803EE8FF017521E580A90007740ABA9ED1
:1009000000B80002EFE9EFFFC606E8FF03BA0C01EA
:10091000B80808EFEDE92800803EE8FF037406E917
:100920001E00E90000BA1001B80202EFEDE5000D6B
:100930001800E700E5820D0200E782C606E8FF0422
:100940008A26E834F6C402740D8026E834FD802639
:100950009236BFE84F0BFAA0E83408069436C60674
:10096000E83400FBC3E8E70FC41E84362EFF1601EF
:100970000726884702E97EFEE82D10C41E84362E25
:10098000FF16030726884702E96BFE8E0626022E15
:10099000FF160707C3C3833EF53400740FFF0EF341
:1009A000347509E8C4FDC706F5340000F606933631
:1009B000207430A1C2343B06E934A3E934742480A6
:1009C0003E953600751DF706E63420007412A92006
:1009D00000740D8326C234DF8326E934DFE9030087
:1009E000E8DD09BA0601ED8BD081E200C0C1EA0E54
:1009F00003167434C1E002110672347304FF0674E6
:100A000034BA0201ED8BD081E200C0C1EA0E0316B8
:100A10007034C1E00211066E347304FF067034C7EF
:100A200006A6330400C706AA3300008D06A033C112
:100A3000E804CD39C39509950965097809950995A3
:100A4000099107950996098B0995099509950995C5
:100A500009950995098BC08BC08BC08BC08BC0904A
:100A6000F6069336207503E9CC008CC0408EC02674
:100A70008B0E060086E926890E06008CC2C1E204B0
:100A8000BE0E0026A10400D0E024C08AE0C0EC0421
:100A90000AC426A2050026A10800A900C07403E923
:100AA0009E0026F6061000807503E90A0026A016AF
:100AB00000241F32E403F0803EEC3406725C803E7A
:100AC00095360075668BFA33DB8EC326891D268822
:100AD0005D045150C41E8C36B90F0033C0E82109A3
:100AE00058590BDB7434FE0EE63A26C6078126C63B
:100AF00047010026C64702FF26C747040000268993
:100B00004F0A86F2268957062689770826C647099E
:100B10000026C6470C02E88C09C3FF06EC338CC0E4
:100B2000488EC0FAE89710FBE9EBFF8CC0488EC0F6
:100B3000FAE88A10FBC38CC08EC0FAE88010FBC3B1
:100B4000803E9536007503E9C200BF080026F60610
:100B5000100080750503FEE90C0026A01600241F76
:100B600032E403F003FEA095363C007503E99C00D7
:100B70003C01740B3C0274143C03741DE98D00C6E7
:100B800006963601E83C017227E98000C6069636D3
:100B900002E88300721AE97300C606963601E8225D
:100BA00001720DC606963602E86C007203E95C001D
:100BB000530650C41E8C36B90B0033C0E8420858A7
:100BC00026C6078226C64702FF8D06E0FE86C4269B
:100BD000894706A0963626884708E8C808075B8339
:100BE00026AD36FEA1AD36E704BA1001B88080EF1D
:100BF000EDBA1001B80202EFED52BAE000B84110B0
:100C0000EF5AB89C03CD39C6069536008CC0488E85
:100C1000C0FAE8A90FFBC31E061F0633C08EC08BA7
:100C2000F08D3E20F351B10A26837D0C01752A57C1
:100C300026837D0E007406E82F00E90300E86607AE
:100C40005F731633C08ED8268B4D128D75208D3E66
:100C5000E0FEF3A459071FF9C3FEC9740781C7203A
:100C600001E9C4FF59071FF8C35150535652573377
:100C7000DB268A5D0E268B4D128D7D205A87D72666
:100C80008A451487D74232FF80FF087508FECB22C1
:100C9000DB75EA33DB23DB7406FEC7D0C8730C5068
:100CA000268A053804587403E90A0049464723C9CF
:100CB000740AE9D3FF5A5E5B5859F8C35A5E5B5811
:100CC00059F9C31E061F0633C08EC086CD2BCE8BAE
:100CD000F78BC133C9803CFF741680F90673093263
:100CE000C94648742EE9EDFF3D6000730CE923000E
:100CF000FEC14648741DE9DCFFB810008D3E183473
:100D000032EDB106F3A67403E908004823C0740766
:100D1000E9E9FF071FF8C38D36183433C08ED88D2C
:100D20003EE0FEB81000B9060056F3A45E483D0050
:100D30000075F3071FF9C3FF06E433C606EB340062
:100D4000268B450686E0C1E80448068EC0FE06E60E
:100D50003AFAE8690EFB07B0FFC30000000000008C
:100D6000B001C3B000C3F6069336207503B004C3C8
:100D70008B0E973681E18030268B4704257FCF0B81
:100D8000C1A39736A3E634B000C3F60693362074A9
:100D900003B003C3268B4708A39736A3E634268AFD
:100DA0004720A2FD343C017506C706A13600002687
:100DB0008A4721A2FE34268B470AA31834A358344D
:100DC000268B470CA31A34A35A34268B470EA31C38
:100DD00034A35C34C6062A34C0268B4714257FFF13
:100DE00009062C34268B471625FFFE25FFFC090635
:100DF0002E34C6060034C0268B4710A30234268B3F
:100E00004712A304340653E8840A5B073D000075CB
:100E100007800E923608B0FEC3B90001A1AC33338F
:100E2000D2F7F9A3AE33914933D2F7E905003BA3DA
:100E30004634BF003B893E4434BA6800B8E0E0EF76
:100E4000A1AE33E762A1AE33BA0801EFA14434E7A3
:100E500064A14434BA0A01EFB800012D04000D006A
:100E600010E792C33D0000740A26894707E8833AD9
:100E7000B007C3A1AE332689472BA1443426894746
:100E80002DA146342689472F800E933620A188361F
:100E900086E026894708A1843686E02689470AA18C
:100EA000803686E02689470CB860FE86E0268947B2
:100EB0000EA0A136268847108B36883626C64402F7
:100EC000FFE59EA90008740CBA8400ED0D0800EF40
:100ED000BA8E00EFE50225F9FFE702BA1001B80269
:100EE00002EFEDB000C3F6069336207503B001C3E0
:100EF000802693369FE88D0A800E923608B0FEC396
:100F0000B000C3F6069336207503B004C3C6062AA4
:100F100034C0268B4706257FFFA32C34268B470839
:100F200025FFFE25FFFCA32E34CD52B000C3F606EC
:100F30009336207503B004C3C6060034C0268B4721
:100F400006A30234268B4708A30434CD52B000C355
:100F5000F6069336207503B004C3578D7F0651B94A
:100F6000070033C0F3AB598D7F06A17A34030639ED
:100F700037268805A1953726884502A180340306C7
:100F8000763426884507A1C63426884509A1D8337A
:100F90002688450A33C0A37A34A33937A39537A3EB
:100FA0008034A37634A3C634A3D8335FB000C3F62D
:100FB000069336207503B004C3268B4F0483F906CD
:100FC000741283F904740D83F900740883F90274B0
:100FD00003B001C3890EE83A8326AB36F9090EAB9C
:100FE00036E50225F9FF0BC1E702B000C3F6069310
:100FF00036207503B004C3268B4F0480F9FF7408B4
:1010000080F9007410B001C3830EAD3602A1AD3675
:10101000E704E90A008326AD36FDA1AD36E704B04A
:1010200000C3F6069336207503B004C3E8D504B0B8
:1010300000C3F6069336807503B001C326837F068E
:10104000057503E99D00268B5704268B47082681EA
:101050007F0600807508ED2689470AE99D002683F2
:101060007F06017504EFE9920026817F06018075F5
:1010700009EFED2689470AE9810026837F0602757C
:101080000726214704E9730026817F060280750C3C
:1010900026214704ED2689470AE95F0026837F065B
:1010A00003750726094704E9510026817F0603805E
:1010B000750C26094704ED2689470AE93D00268379
:1010C0007F0604750726314704E92F0026817F0635
:1010D0000480750C26314704ED2689470AE91B0078
:1010E000B001C3FA53268B4F080BC9740C8D1EE058
:1010F000FEE852FF83C308E2F85BFBB000C3F606CC
:10110000933680750AF6069336207503B001C38DB9
:101110003EE0FEE500268905E50226894502A1ADEF
:101120003626894504E50626894506E508268945CB
:1011300008E50A2689450AE50E2689450CE5482674
:1011400089450EE54A26894510E54C26894512A1B8
:10115000B73626894514E55026894516E552268975
:101160004518E5542689451AE5562689451CE55853
:101170002689451EE56226894520E56426894522A3
:10118000E56626894524E56826894526E56A268997
:101190004528E56C2689452AE5702689452CE572A7
:1011A0002689452EE57426894530E576268945321F
:1011B000E57C26894534E57E26894536E580268905
:1011C0004538E5822689453AE5862689453CE58805
:1011D0002689453EE59A26894540E59E2689454271
:1011E000E5CC26894544E5CE26894546E5D02689C5
:1011F0004548E5D22689454ABA0001ED1106663414
:101200007304FF0668342689454CBA0201EDC1E03B
:101210000211066E347304FF0670342689454EBAF7
:101220000401ED11066A347304FF066C3426894507
:1012300050BA0601EDC1E002110672347304FF06D4
:10124000743426894552BA0801ED26894554BA0AF4
:1012500001ED26894556BA0C01ED26894558BA0E8E
:1012600001ED01067A342689455EBA1001ED268922
:10127000455CB000C3F6069336807407F6069336D5
:10128000207503B001C326807F06007530803E952F
:1012900036007452C6069536008326AD36FEA1ADE3
:1012A00036E704BA1001B88080EFEDBA1001B80239
:1012B00002EFEDBAE000B80010EFB000C3268B4794
:1012C000043D000074203D0300771BBA1001B802F2
:1012D00000EFBAE000B80110EF830EAD3601A1AD0A
:1012E00036E704B000C3B006C3F606933680750334
:1012F000B001C326837F0401740A26837F0402742D
:1013000019B006C326837F060C77F626837F0A6012
:1013100077EFE81000720BB046C3E84E007203B0DE
:1013200046C3B000C351B10A8B3E20F326837D0C27
:10133000027503E90E00FEC9740781C72001E9EBBD
:10134000FF59F8C3578D7D0E8D7706B91200F3A4AF
:101350008D7D208D36E0FE268B4D12F3A4FF060115
:10136000355F26C7450C010059F9C351B10A8D3EBE
:1013700020F38D36E0FE26837D0C01751B57E82592
:10138000005F731433C0B92001F3AA26C7450C02CD
:1013900000FF0E013559F9C3FEC9740781C720014A
:1013A000E9D3FF59F8C351268B4D128D7D20F3A64A
:1013B000740359F8C359F9C300000000000000008D
:1013C000803EEC34067233FF06F03350C41E8C3678
:1013D000B90F0033C0E82900588126C234DF7F816D
:1013E00026E934DF7F0BDB741126C6078426C64747
:1013F00002FF26894706E8AC00C3FF06EA33E9F599
:10140000FF57268B3F03F9263B7F027416263B7F4E
:10141000047C2A3D000075138D7F0803F9263B7F6D
:10142000027C14FF06DE3333DB5FC3268B7F02268C
:10143000893F03F9E9060026893F26290F26C705BB
:10144000FFFF26873F26890D8D5D02508BFB83E9C8
:101450000233C0F3AA58FE0EEC345FC38B7C023B10
:101460003C742F833DFF750B8D7C08897C02833D86
:10147000FF741E8A45023C81750C803EEB3400747B
:101480000533C0E90B008B0D014C028D750283E919
:1014900002C3803EEC3406720533C0E9F3FFFF0659
:1014A000EE33E9BEFFF6069236407401C35756513B
:1014B000528B368C36E8A4FF7503E91A00E91C004C
:1014C000FE06EC34C43E8036F3A4800E923640BA59
:1014D0000C01B88080EFED5A595E5FC3FF06E03320
:1014E000803C81750CFF06E233C606EB3401E9CF80
:1014F000FF803C847507FF06E633E9C3FFFF06E87B
:1015000033E9BCFF8D3EE0FEA17234C706723400A1
:10151000008905A17434C70674340000894502BAF5
:101520000401ED894504C745060000A16E34C706D5
:101530006E340000894508A17034C706703400007D
:1015400089450ABA0001ED89450CC7450E000032F5
:10155000E4BA0E01EC894510A17E34C7067E340042
:1015600000894512A18C34C7068C340000894514CB
:10157000A18A34C7068A340000894516A17C34C785
:10158000067C340000894518A18834C706883400D9
:101590000089451AA1CA33C706CA33000089451C11
:1015A000A17834C7067834000089451EA1C634C727
:1015B00006C6340000894520C3000000000000007A
:1015C000FA33C08ED88EC0B8A001C1E8048ED08D89
:1015D000268000E80001E810EB8B1EF7348B16F92B
:1015E000348B36FF3433C0B9EFFF8D3E14002BCF60
:1015F0002BCED1E9F3AB891EF7348916F93483FE7B
:1016000000740CB9EFFFBF80FE2BCFD1E9F3ABB96B
:10161000FFFF81E9003B83FE007403E91B00511EBC
:10162000B800E08ED833F68D3E00D8B9000CF3A593
:101630001F59BEFFFF81EE00D82BCE81E100FF894C
:101640000EAC338D062002C1E804A332348ED036AE
:10165000C7061E00801836C7062200FF7F36C70661
:101660000A00FFFF36C7061C0080008D06A002C1DD
:10167000E804A330348ED036C7061E00502836C783
:10168000060A00FFFF36C7061C008000B8A001C193
:10169000E804A33434A3F2338ED08D268000B80042
:1016A00090E7028D3E70018BC7C1E804B903008941
:1016B000450E894502C705FFFF83C710050100E2FB
:1016C000EEE85B01E5CEA3B536E82100E84501A1CF
:1016D00032348CCBCD370E58A900F0740733F6891D
:1016E00036FF34C38D3630618936FF34C333C08B47
:1016F000D08BF2B968002E80BCAC17807501EF83E7
:10170000C20246E2F1B80200E750B95A0033FFC7FF
:101710000565188C4D0283C704E2F433C08EC08C7B
:10172000C88ED88D3E80008D369C17B90800E837EA
:10173000008D3620218D3EC000B90D00E829008DB6
:101740003E4001B90A00E81F00E84B0E33C08ED8B6
:10175000C7064E376F17E748E74CB8409CE74AE5A5
:101760004890B80070E748C3A583C702E2FAC3E512
:101770004CC35051565752061E33C08ED8E558D12F
:10178000E073118BF0D1E633C08ED88BB480008328
:10179000C60BFFE61F075A5F5E5958CF581CE41C62
:1017A0006C1C8E1AC01F401A441C6518808080FF74
:1017B00080030280FFFFFFFFFFFFFFFFFFFFFFFF30
:1017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29
:1017D0008003034380800280420302FF0301030170
:1017E00001030203FFFFFFFFFFFFFFFF02030103EF
:1017F00003FF0101FF01FF0101030303FFFFFFFFDF
:10180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8
:10181000FFFFFF02B80F00E784B80FF8E782C3B9F3
:101820000800890EE63A8D0620038BD0C1E804A398
:1018300090018BC28BD8C1E8048EC005610026A33D
:101840000000A1303426A3020083C314D1EB268903
:101850001E080081C21006E2D926C7060000FFFF5D
:101860008C069201C35051565752061E33C08ED873
:10187000E75AFF06BE33BAD200EDCF0000000000E9
:101880008CCBA13034CD37E906EDB83200C3E88CFB
:1018900001FE06E234E8210175F0E8530E810EAF37
:1018A0003600C0C706AD366000F706E63480007526
:1018B0001AF706E63400087409C706AB360B00E9D0
:1018C0000F00C706AB360300E90600C706AB3611AA
:1018D0009CC706A9361800F706E6348000750DF798
:1018E00006B53602007405830EA93620A1A936E795
:1018F00000A1AB36E702F706E6348000742EE8F26A
:101900002F33C00D4100E756A1B1360D0010E70896
:10191000A1B336E70AA1AF36E706B84000E74E3379
:10192000C0E70EC70626020000E92300C7064E37AF
:101930003F208E06303426F7060A00008074072602
:10194000810E08000080C606E03401B80000C3FE26
:1019500006E134C606E03400A126020BC07401C3C0
:10196000E80400B80000C3A1A936E7008B1EAB361F
:1019700083E306E50225F9FF0BC30D1000E702A182
:10198000AD36E704C3B80A00E784FE06E534C606B0
:10199000E334018E06303426F7060A00004074074F
:1019A00026810E08000040C3C7064E376F17FE069B
:1019B000E434C606E33400C3C3F606183480750D5C
:1019C000A118340B061A340B061C347501C3A12E62
:1019D0003425FFFE8B16E73681E200010BC2A32EF1
:1019E000348D161000BF0000B908008B850034EF5D
:1019F00083C2108B850234EF83C2108B850434EFD1
:101A000083C2E283C7064975E2B800008EC0BE00FB
:101A100034BFB936B91800F3A5B80000C333C08E7F
:101A2000C08D3EB033B90800F3AB8D3E3E34B903F0
:101A300000F3ABC300000000000000000000000045
:101A40005051565752061E33C08ED8E75AFF06BA79
:101A500033E5560D2000E756BA7A00ED0826943695
:101A600033C0B10832ED068EC08D3EE0FFF3AA8E82
:101A700006323426810E0800000207E55625DFFFF6
:101A8000E756E9F8FC00BD1B101BD91AF31A505198
:101A9000565752061E33C08ED8E75AFF06B6335348
:101AA0000651E580A3B4338BD88BC8251000A3ED75
:101AB000340BC07414FF068034803EFE340074037F
:101AC000E90600B88000E89D0483E303D1E32EFF1C
:101AD00097861A59075BE9A4FCBA20008E063C34AD
:101AE000833E3C34007503E9F000C7063C34000037
:101AF000E92A00BA10008E063A34833E3A34007563
:101B000003E9D5FFC7063A340000E81000E9C9FF31
:101B1000BA10008E063A34C7063A34000026A114E3
:101B20000026A30C0026A1160026A30E0026C6063A
:101B30000A0000C1EA0223D1741CBA200026C7069D
:101B40000E00EA05260B160C002689160C00FF066F
:101B50008634FF06DC3326A10C00A9003774162654
:101B6000C6060A0002A900307404FF067A34FF0694
:101B7000DA33E94900C0EC0783168A340024073CB5
:101B8000077504FF068C34FF067E34A130348CC305
:101B90008EC08EDB26830E0800408CD82687061662
:101BA0000026833E1400FF740A8EC0268C1E00009F
:101BB000E90500268C1E140033C08ED8C3C38CC028
:101BC000870692013DFFFF740D8ED88C060000330E
:101BD000C08ED8E904008C069001E80100C306839A
:101BE0003E9001FF7429833E3A34007511BA860095
:101BF000E81E008C063A34833E9001FF7411833E48
:101C00003C3400750ABA8800E806008C063C3407AC
:101C1000C3A190018EC026A10800EF26A1000026D6
:101C2000C7060000FFFFA390013DFFFF7503A392CD
:101C300001833EED3400740BB81000E784C706ED55
:101C4000340000C35051565752061E33C08ED8E799
:101C50005AFF06BC33E925FB5051565752061E3336
:101C6000C08ED8E75AFF06B033E911FB50515657E2
:101C700052061E33C08ED8E75AFF06B43306FF065D
:101C80007634803EFE3400740407E9F0FAB8800030
:101C9000E8D30207E9E6FA000000000000000000B7
:101CA000C61D081D911E5D1E731E891E911EA81D56
:101CB000911E911EAF1EAF1E151D151D911E991F61
:101CC000000000000000000000040000000200000E
:101CD00000010010000100400000000000010000B1
:101CE00007E999FA5051565752061E33C08ED8E76D
:101CF0005AFF06B2330668F61CE506A3B2338BF032
:101D000083E61E2EFFA4A01CE50CA980007406E843
:101D1000A401E506C353E50C8BD8A9010074148314
:101D20003EE03A00740D8E063834E8BF06C706E080
:101D30003A0000E5000D1800E700E5020D1100E78C
:101D4000028BC35BA901007401C38BD0B80008E704
:101D5000848BC28E06383426A30C008BD0C1E003DE
:101D60008316883400FF067C3426833E06000A75FD
:101D7000218BC22540183D4000740C3D00107512A7
:101D800026FE0E0A00740BF706EF3420007503E9F7
:101D90005A068CC0268E06020026830E08002026D6
:101DA000A3120026A31000C3FF06C433E50CA9014B
:101DB000007501C3A9F0077401C3FF06D433E50021
:101DC0000D1800E700C3FF06CA33803EA036087531
:101DD000148E06303426F7060A00000874072681A0
:101DE0000E08000008E58225FDFFE782E50C50E5BE
:101DF00080250007A3E43AE58C250080A3E23A5849
:101E0000A902007525833EE23A00751E833EE43A3E
:101E1000007517E5080D000425FF04E708E86A01CE
:101E2000E5820D0200E782E92100E81A06803EE81B
:101E3000FF00740A803EE8FF047403E90D00C60643
:101E4000E8FF01BA0C01B80808EFED803E9F3606A6
:101E50007505830E993640B80001E90901FF06CCEB
:101E6000338126AF36FFF7A1AF36E706FF06C6344B
:101E7000E91E00FF06CE33FF0695378126AF36FFF9
:101E8000EFA1AF36E706E90800FF06D033FF067A78
:101E900034FF06D233D1E68E0630342E8B84C01C3C
:101EA00026090608002E8B84C21C09066637C3E586
:101EB0000CA98000745650E8F00058A9000175077D
:101EC000FF06C633E90800FF067834FF06C833E58D
:101ED0008225FDFFE782E86E05BA1001ED803EE83D
:101EE000FF00740A803EE8FF047403E91D00C60683
:101EF000E8FF01BA0C01B80808EFEDE90D00C606CD
:101F0000E8FF03BA0C01B80808EFEDC3A90100749B
:101F10001CE82C00833EE03A00740F068E0638342D
:101F2000E8C904C706E03A000007E95D008BD08EDF
:101F300006383426A30C00E8060068691DE94A004B
:101F4000A90004740AB80004FF06D833E91700A9F1
:101F50000001740AFF063937B80001E90800A9102A
:101F600000B81000741D090666378CC08E06303428
:101F700026F7060A000001740726810E08000001FA
:101F80008EC0C3FF06C233E9F8FFE5000D1800E775
:101F900000E5020D1100E702C358E943FDE5080D15
:101FA000000425FF04E708E9E0FFE50EA900087535
:101FB00001C3E9F5FF000000000000000000000080
:101FC0005051565752061E33C08ED8E75AFF06B8F6
:101FD00033E548065357FF164E375F5B833E80015B
:101FE000FF74588E06800126FF0E0800754D26A14D
:101FF0000000A3800126C7060000FFFF8CC0268ECC
:1020000006020026810E080080008BD02687061A63
:102010000026833E1800FF740A8EC0268916000031
:10202000E905002689161800833E8001FF740C8E96
:1020300006800126833E08000074B307E93EF7E5F9
:102040004C90E502A90020740D25FFDF0D0100E78B
:10205000020D0020E702E50A8BD8A3F43325C3570D
:102060000D0010E70AF7069B3600807437F7C300AF
:10207000807406F7C30008745D8126C2347FFFC7F1
:102080000635370500B88003CD3981269B36FF7FA2
:10209000C7060F370400F7069B3640007506C706D3
:1020A0000F370300F7069B360020742AF7C3000899
:1020B0007424803E9D36067C1DFF069434830E6694
:1020C00037208E06303426F7060A000001740726F2
:1020D000810E08000001F7C30020753BF7069A3710
:1020E0008000740BFF06893733C0E70EE90400FF58
:1020F000063B37F7069B360020741C80269E36FF71
:1021000075158E06303426F7060A00000874072677
:10211000810E08000008C3C300000000000000009A
:1021200002230223022302230323DD220223FD21B3
:102130000223A424F32402238D227A23022397244A
:102140001B247524022302238E25FB8E067E01FBB1
:1021500026833E0000FF74F2268E060000FA268BCE
:102160001E080026231E0A0074E58CC08ED0268B24
:102170002602008C16F23322FF756A26A11C008A03
:10218000E38ADC22D8750DD0E824F80AC075F2B0D5
:1021900080E9EDFFD0E824F80AC07502B08032E48F
:1021A00026A31C00F7C3080075472E8A9FC5252E5D
:1021B0008BBFC52680C310268E1D268C1E06008B65
:1021C000160000C7060000FFFF26891583FAFF7579
:1021D0000A2E8B97CD26262116080033C08ED826CE
:1021E000891E0400C38ADFB7002E8A9FC525E9E057
:1021F000FF2683260800F783C310E9DEFF60061E72
:102200006887256A001F8E06F2338B0E3434390E30
:10221000F233740E26810E0A00000226810E080099
:1022200000022689260200A3F2338ED08D2680007C
:10223000368926020036891E200036C706080000AF
:1022400000B90400BE00002E8BBCC52636C705FFB2
:10225000FF36C74502FFFF83C602E2EB8E067E0112
:10226000368B0E22008CC026833E0000FF268E0691
:1022700000007407263B0E22007DEA368C06000023
:102280008EC0268C160000FB36FF2E1E00061E6830
:102290008B256A001F2609360800F7C600FF740167
:1022A000C356522E8BB4C52581E6FF002E8BB4C5D4
:1022B000268CC28EC026C7060000FFFF8EC2268372
:1022C0003CFF740F8BD0268754028EC226A30000D9
:1022D000E90700268944022689045A5EC3061E685F
:1022E0008B256A001F8E06F23326A30A0026892654
:1022F0000200A134348ED08D2680008C16F233E992
:102300004DFECF501E525333C08ED826833E04005C
:10231000FF26C706040000007403E91A00833EE6A6
:102320003A027613FF06D6338CC08E063234BE4096
:1023300000683A23E95EFFE884F85B5A1F58CFE84B
:10234000E10026C606180010268A1E2900881E1BDA
:102350003726C7060C00FF7F26A10E00E79C26A1AA
:102360000800E79AE50080FB0874090D18ACE70047
:10237000071F58CF0D1800E9F4FF501E0633C08E1A
:10238000D8833EA1360075B7268B3606002EFF9403
:10239000DC23071F58CFE88A00E5000D1800E7008E
:1023A000E84900C353F706EF342000752DE58C256E
:1023B00000708BD8E58C2500703BC374058BD8E981
:1023C000F2FF3D00307510E50225EFFFE702C7067A
:1023D000E03AFFFFE90300E812005BC3A323962362
:1023E000A423A4239623A4239623962326A029007E
:1023F000A21B3726C7060C00FF7F26A10E00E79C14
:1024000026A10800E79AE50025FF53268B36060033
:1024100083E60E2E0B84AD25E700C3061E688B25D0
:102420006A001F830EEF3420830E9B3608E50025DB
:10243000EFFF0D0800E700E500A910007501C3E5F6
:1024400000A9100075F9C350535156061E33C08EB3
:10245000D8B80500E784E5080D000425FF04E70867
:10246000E5000D1800E700E5020D1100E7021F0767
:102470005E595B58C3501E33C08ED8C706EF340078
:102480000083269B36F7E5000D1800E700E5020DF6
:102490001100E7021F58CF60061E6887256A001FDB
:1024A000E816F5C3061E688B256A001F8EC02683BA
:1024B0003E0A00007403E8430026C7060A00FFFF37
:1024C000268B1606008E1E8E018CD88BCA833E008A
:1024D00000FF8E1E0000740A2B16080073EB290EF5
:1024E000080026890E0800268C1E00008ED88C0657
:1024F0000000C360061E6887256A001F8EC08BC857
:102500008E1E8E0126C7060A0000008CD8833E006E
:1025100000FF74253B0E00008E1E000075ED8ED866
:1025200026A10000A300003DFFFF74568ED826A10F
:10253000080001060800E94900268E1E0200BE18A8
:1025400000833CFF743C390C74198E1CBE00008360
:102550003E0000FF742C390E000074078E1E000030
:10256000E9ECFF26A10000890433C98ED93DFFFFA5
:10257000751083FE18750B268E1E0200812608003A
:102580007FFF33C08ED8C31F0761CF1F07CF600600
:102590001E6887256A001FE506251E003D1E007582
:1025A000F6B90800E558E75A23C0E0F8C300000078
:1025B000000000000000AC000000A8008C02040035
:1025C0000008102000FF0E0C0C0A0A0A0A0808086E
:1025D0000808080808060606060606060606060691
:1025E00006060606060404040404040404040404A1
:1025F000040404040404040404040404040404049B
:1026000004040404040202020202020202020202A0
:10261000020202020202020202020202020202029A
:10262000020202020202020202020202020202028A
:10263000020202020202020202020202020202027A
:102640000202020202000000000000000000000080
:10265000000000000000000000000000000000007A
:10266000000000000000000000000000000000006A
:10267000000000000000000000000000000000005A
:10268000000000000000000000000000000000004A
:10269000000000000000000000000000000000003A