Bug 115529

Summary: =?iso-8859-5?B?UmU6IGtlcm4vMTE0NDczOiBbc2F0YV0gW3BhdGNoXSBVcGRhdGUgU0FUQS1JRHMgZm9yIElDSDk=?=
Product: Base System Reporter: Andriy Podanenko <podarok>
Component: kernAssignee: Mark Linimon <linimon>
Status: Closed FIXED    
Severity: Affects Only Me CC: michael
Priority: Normal    
Version: 1.0-CURRENT   
Hardware: Any   
OS: Any   

Description Andriy Podanenko 2007-08-14 21:40:03 UTC
 --1421935635-678854362-1187120232=:26064
 Content-Type: TEXT/PLAIN; CHARSET=iso-8859-5
 Content-Transfer-Encoding: QUOTED-PRINTABLE
 
 More complex patch with a large array of ICH9 modifications
 
 this patch give some functionality for
 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D115481
 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D115479
 
 *************************************
 my dmesg after it on Asus P5K SE
 *************************************
 
 Copyright (c) 1992-2007 The FreeBSD Project.
 Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
 =09The Regents of the University of California. All rights reserved.
 FreeBSD is a registered trademark of The FreeBSD Foundation.
 FreeBSD 6.2-RELEASE-p7 #3: Tue Aug 14 18:35:55 UTC 2007
     root@podarok.voliacable.com:/usr/obj/usr/src/sys/GENERIC
 can't re-use a leaf (mddebug)!
 module_register: module g_md already exists!
 Module g_md failed to register: 17
 module_register: module pci/hptmv already exists!
 Module pci/hptmv failed to register: 17
 module_register: module g_bsd already exists!
 Module g_bsd failed to register: 17
 module_register: module g_mbrext already exists!
 Module g_mbrext failed to register: 17
 module_register: module g_mbr already exists!
 Module g_mbr failed to register: 17
 Timecounter "i8254" frequency 1193182 Hz quality 0
 CPU: Intel(R) Core(TM)2 Duo CPU     E6550  @ 2.33GHz (2336.08-MHz K8-class =
 CPU)
   Origin =3D "GenuineIntel"  Id =3D 0x6fb  Stepping =3D 11
   Features=3D0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PG=
 E,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
   Features2=3D0xe3fd<SSE3,RSVD2,MON,DS_CPL,VMX,<b6>,EST,TM2,<b9>,CX16,<b14>=
 ,<b15>>
   AMD Features=3D0x20100800<SYSCALL,NX,LM>
   AMD Features2=3D0x1<LAHF>
   Cores per package: 2
 real memory  =3D 2146959360 (2047 MB)
 avail memory =3D 2060800000 (1965 MB)
 ACPI APIC Table: <A_M_I_ OEMAPIC >
 ioapic0 <Version 2.0> irqs 0-23 on motherboard
 kbd1 at kbdmux0
 ichwd module loaded
 ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
 acpi0: <NEC > on motherboard
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi0: Power Button (fixed)
 Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
 cpu0: <ACPI CPU> on acpi0
 est0: <Enhanced SpeedStep Frequency Control> on cpu0
 p4tcc0: <CPU Frequency Thermal Control> on cpu0
 pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
 pci0: <ACPI PCI bus> on pcib0
 pcib1: <ACPI PCI-PCI bridge> irq 16 at device 1.0 on pci0
 pci1: <ACPI PCI bus> on pcib1
 pci1: <display, VGA> at device 0.0 (no driver attached)
 uhci0: <UHCI (generic) USB controller> port 0xc800-0xc81f irq 16 at device =
 26.0 on pci0
 uhci0: [GIANT-LOCKED]
 usb0: <UHCI (generic) USB controller> on uhci0
 usb0: USB revision 1.0
 uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub0: 2 ports with 2 removable, self powered
 uhci1: <UHCI (generic) USB controller> port 0xc880-0xc89f irq 21 at device =
 26.1 on pci0
 uhci1: [GIANT-LOCKED]
 usb1: <UHCI (generic) USB controller> on uhci1
 usb1: USB revision 1.0
 uhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub1: 2 ports with 2 removable, self powered
 uhci2: <UHCI (generic) USB controller> port 0xcc00-0xcc1f irq 18 at device =
 26.2 on pci0
 uhci2: [GIANT-LOCKED]
 usb2: <UHCI (generic) USB controller> on uhci2
 usb2: USB revision 1.0
 uhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub2: 2 ports with 2 removable, self powered
 ehci0: <EHCI (generic) USB 2.0 controller> mem 0xfbfffc00-0xfbffffff irq 18=
  at device 26.7 on pci0
 ehci0: [GIANT-LOCKED]
 usb3: EHCI version 1.0
 usb3: companion controllers, 2 ports each: usb0 usb1 usb2
 usb3: <EHCI (generic) USB 2.0 controller> on ehci0
 usb3: USB revision 2.0
 uhub3: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
 uhub3: 6 ports with 6 removable, self powered
 pcm0: <Intel (Unknown) High Definition Audio Controller> mem 0xfbff8000-0xf=
 bffbfff irq 22 at device 27.0 on pci0
 pcib2: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0
 pci3: <ACPI PCI bus> on pcib2
 pcib3: <ACPI PCI-PCI bridge> irq 17 at device 28.4 on pci0
 pci2: <ACPI PCI bus> on pcib3
 atapci0: <GENERIC ATA controller> port 0xdc00-0xdc07,0xd880-0xd883,0xd800-0=
 xd807,0xd480-0xd483,0xd400-0xd40f mem 0xfeaffc00-0xfeafffff irq 16 at devic=
 e 0.0 on pci2
 ata2: <ATA channel 0> on atapci0
 ata3: <ATA channel 1> on atapci0
 uhci3: <UHCI (generic) USB controller> port 0xc080-0xc09f irq 23 at device =
 29.0 on pci0
 uhci3: [GIANT-LOCKED]
 usb4: <UHCI (generic) USB controller> on uhci3
 usb4: USB revision 1.0
 uhub4: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub4: 2 ports with 2 removable, self powered
 uhci4: <UHCI (generic) USB controller> port 0xc400-0xc41f irq 19 at device =
 29.1 on pci0
 uhci4: [GIANT-LOCKED]
 usb5: <UHCI (generic) USB controller> on uhci4
 usb5: USB revision 1.0
 uhub5: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub5: 2 ports with 2 removable, self powered
 uhci5: <UHCI (generic) USB controller> port 0xc480-0xc49f irq 18 at device =
 29.2 on pci0
 uhci5: [GIANT-LOCKED]
 usb6: <UHCI (generic) USB controller> on uhci5
 usb6: USB revision 1.0
 uhub6: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub6: 2 ports with 2 removable, self powered
 ehci1: <EHCI (generic) USB 2.0 controller> mem 0xfbfff800-0xfbfffbff irq 23=
  at device 29.7 on pci0
 ehci1: [GIANT-LOCKED]
 usb7: EHCI version 1.0
 usb7: companion controllers, 2 ports each: usb4 usb5 usb6
 usb7: <EHCI (generic) USB 2.0 controller> on ehci1
 usb7: USB revision 2.0
 uhub7: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
 uhub7: 6 ports with 6 removable, self powered
 umass0: Generic Mass Storage Device, rev 2.00/1.27, addr 2
 pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
 pci4: <ACPI PCI bus> on pcib4
 dc0: <Accton EN2242 MiniPCI 10/100BaseTX> port 0xe800-0xe8ff mem 0xfebffc00=
 -0xfebfffff irq 16 at device 0.0 on pci4
 miibus0: <MII bus> on dc0
 ukphy0: <Generic IEEE 802.3u media interface> on miibus0
 ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
 dc0: Ethernet address: 00:c0:49:b3:8a:81
 isab0: <PCI-ISA bridge> at device 31.0 on pci0
 isa0: <ISA bus> on isab0
 atapci1: <Intel ICH9 SATA300 controller> port 0xb000-0xb007,0xac00-0xac03,0=
 xa880-0xa887,0xa800-0xa803,0xa480-0xa48f,0xa400-0xa40f irq 22 at device 31.=
 2 on pci0
 ata4: <ATA channel 0> on atapci1
 ata5: <ATA channel 1> on atapci1
 ichsmb0: <SMBus controller> port 0x400-0x41f mem 0xfbfff400-0xfbfff4ff irq =
 18 at device 31.3 on pci0
 ichsmb0: [GIANT-LOCKED]
 smbus0: <System Management Bus> on ichsmb0
 smb0: <SMBus generic I/O> on smbus0
 atapci2: <Intel ICH9 SATA300 controller> port 0xc000-0xc007,0xbc00-0xbc03,0=
 xb880-0xb887,0xb800-0xb803,0xb480-0xb48f,0xb400-0xb40f irq 22 at device 31.=
 5 on pci0
 ata6: <ATA channel 0> on atapci2
 ata7: <ATA channel 1> on atapci2
 acpi_button0: <Power Button> on acpi0
 speaker0: <PC speaker> port 0x61 on acpi0
 fdc0: <floppy drive controller (FDE)> port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on=
  acpi0
 fdc0: [FAST]
 atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
 atkbd0: <AT Keyboard> irq 1 on atkbdc0
 kbd0 at atkbd0
 atkbd0: [GIANT-LOCKED]
 ppc0: cannot reserve I/O port range
 sc0: <System console> at flags 0x100 on isa0
 sc0: VGA <16 virtual consoles, flags=3D0x300>
 sio0: configured irq 4 not in bitmap of probed irqs 0
 sio0: port may not be enabled
 sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
 sio0: type 8250 or not responding
 sio1: configured irq 3 not in bitmap of probed irqs 0
 sio1: port may not be enabled
 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
 Timecounter "TSC" frequency 2336080971 Hz quality 800
 Timecounters tick every 1.000 msec
 The GEOM class BSD is already loaded.
 The GEOM class MBREXT is already loaded.
 The GEOM class MBR is already loaded.
 The GEOM class MD is already loaded.
 ad8: 114473MB <Seagate ST3120813AS 2AAA> at ata4-master SATA150
 ad10: 190782MB <Seagate ST3200820AS 3.AAD> at ata5-master SATA150
 ad12: 114473MB <Seagate ST3120813AS 2AAA> at ata6-master SATA150
 ad14: 152627MB <Seagate ST3160815AS 3.AAD> at ata7-master SATA150
 pcm0: <HDA Codec: Realtek ALC883>
 pcm0: <HDA Driver Revision: 20061013_0032>
 da0 at umass-sim0 bus 0 target 0 lun 0
 da0: <Generic USB SD Reader 1.00> Removable Direct Access SCSI-0 device=20
 da0: 40.000MB/s transfers
 da0: Attempt to query device size failed: NOT READY, Medium not present
 da1 at umass-sim0 bus 0 target 0 lun 1
 da1: <Generic USB CF Reader 1.01> Removable Direct Access SCSI-0 device=20
 da1: 40.000MB/s transfers
 da1: Attempt to query device size failed: NOT READY, Medium not present
 da2 at umass-sim0 bus 0 target 0 lun 2
 da2: <Generic USB SM Reader 1.02> Removable Direct Access SCSI-0 device=20
 da2: 40.000MB/s transfers
 da2: Attempt to query device size failed: NOT READY, Medium not present
 da3 at umass-sim0 bus 0 target 0 lun 3
 da3: <Generic USB MS Reader 1.03> Removable Direct Access SCSI-0 device=20
 da3: 40.000MB/s transfers
 da3: Attempt to query device size failed: NOT READY, Medium not present
 
 -- =E0=D5=DA=DB=D0=DC=D0 --------------------------------------------------=
 ---------
 http://FREEhost.com.ua - =DF=DE=DA=E3=DF=D0=EF =E5=DE=E1=E2=D8=DD=D3 +10 =
 =E3.=D5. =DA=DE=DD=E2=D5=DA=E1=E2=D0 =DD=D0 Begun =D2 =DF=DE=D4=D0=E0=DE=DA=
 !
 --1421935635-678854362-1187120232=:26064
 Content-Type: APPLICATION/OCTET-STREAM; name="ata-chipset.c"
 Content-Transfer-Encoding: BASE64
 Content-Disposition: attachment; filename="ata-chipset.c"
 
 LyotCiAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDYgU/hyZW4gU2NobWlk
 dCA8c29zQEZyZWVCU0Qub3JnPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
 KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
 YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBh
 cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
 aXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
 b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAq
 ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
 b2xsb3dpbmcgZGlzY2xhaW1lciwKICogICAgd2l0aG91dCBtb2RpZmljYXRp
 b24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUu
 CiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
 cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
 bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoK
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
 QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5U
 SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
 RUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
 U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgog
 KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
 QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUws
 IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
 TkcsIEJVVAogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
 U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERB
 VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
 RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZ
 LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
 T1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
 SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiBUSElTIFNP
 RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
 IFNVQ0ggREFNQUdFLgogKi8KCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KX19G
 QlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLWNoaXBzZXQu
 Yyx2IDEuMTI2LjIuMTUgMjAwNi8xMC8wOSAxNjowMTozNSBzb3MgRXhwICQi
 KTsKCiNpbmNsdWRlICJvcHRfYXRhLmgiCiNpbmNsdWRlIDxzeXMvcGFyYW0u
 aD4KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgojaW5jbHVkZSA8c3lzL2tlcm5l
 bC5oPgojaW5jbHVkZSA8c3lzL2F0YS5oPgojaW5jbHVkZSA8c3lzL2J1cy5o
 PgojaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgojaW5jbHVkZSA8c3lzL21hbGxv
 Yy5oPgojaW5jbHVkZSA8c3lzL2xvY2suaD4KI2luY2x1ZGUgPHN5cy9tdXRl
 eC5oPgojaW5jbHVkZSA8c3lzL3NlbWEuaD4KI2luY2x1ZGUgPHN5cy90YXNr
 cXVldWUuaD4KI2luY2x1ZGUgPHZtL3VtYS5oPgojaW5jbHVkZSA8bWFjaGlu
 ZS9zdGRhcmcuaD4KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KI2lu
 Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiNpbmNsdWRlIDxzeXMvcm1hbi5oPgoj
 aW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KI2luY2x1ZGUgPGRldi9wY2kv
 cGNpcmVnLmg+CiNpbmNsdWRlIDxkZXYvYXRhL2F0YS1hbGwuaD4KI2luY2x1
 ZGUgPGRldi9hdGEvYXRhLXBjaS5oPgojaW5jbHVkZSA8YXRhX2lmLmg+Cgov
 KiBsb2NhbCBwcm90b3R5cGVzICovCi8qIGF0YS1jaGlwc2V0LmMgKi8Kc3Rh
 dGljIGludCBhdGFfZ2VuZXJpY19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgdm9pZCBhdGFfZ2VuZXJpY19pbnRyKHZvaWQgKmRhdGEpOwpzdGF0
 aWMgdm9pZCBhdGFfZ2VuZXJpY19zZXRtb2RlKGRldmljZV90IGRldiwgaW50
 IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlfZW5hYmxlKHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlf
 ZXZlbnQodm9pZCAqY29udGV4dCwgaW50IGR1bW15KTsKc3RhdGljIGludCBh
 dGFfc2F0YV9jb25uZWN0KHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0
 aWMgdm9pZCBhdGFfc2F0YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1v
 ZGUpOwpzdGF0aWMgaW50IGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRl
 dik7CnN0YXRpYyBpbnQgYXRhX2FoY2lfYWxsb2NhdGUoZGV2aWNlX3QgZGV2
 KTsKc3RhdGljIGludCBhdGFfYWhjaV9zdGF0dXMoZGV2aWNlX3QgZGV2KTsK
 c3RhdGljIGludCBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg
 YXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0YV9haGNpX2Vu
 ZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpz
 dGF0aWMgdm9pZCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgdm9pZCBhdGFfYWhjaV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1h
 X3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwpzdGF0
 aWMgdm9pZCBhdGFfYWhjaV9kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp
 YyBpbnQgYXRhX2FoY2lfc2V0dXBfZmlzKHVfaW50OF90ICpmaXMsIHN0cnVj
 dCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWNhcmRf
 ODUwX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyB2
 b2lkIGF0YV9hY2FyZF84Nlhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBt
 b2RlKTsKc3RhdGljIGludCBhdGFfYWxpX2NoaXBpbml0KGRldmljZV90IGRl
 dik7CnN0YXRpYyBpbnQgYXRhX2FsaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 OwpzdGF0aWMgaW50IGF0YV9hbGlfc2F0YV9hbGxvY2F0ZShkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWxpX3Jlc2V0KGRldmljZV90IGRldik7
 CnN0YXRpYyB2b2lkIGF0YV9hbGlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGlu
 dCBtb2RlKTsKc3RhdGljIGludCBhdGFfYW1kX2NoaXBpbml0KGRldmljZV90
 IGRldik7CnN0YXRpYyBpbnQgYXRhX2F0aV9jaGlwaW5pdChkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYXRpX3NldG1vZGUoZGV2aWNlX3QgZGV2
 LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX2N5cml4X2NoaXBpbml0KGRl
 dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXJpeF9zZXRtb2RlKGRl
 dmljZV90IGRldiwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9jeXByZXNz
 X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXBy
 ZXNzX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBp
 bnQgYXRhX2hpZ2hwb2ludF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgaW50IGF0YV9oaWdocG9pbnRfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KTsK
 c3RhdGljIHZvaWQgYXRhX2hpZ2hwb2ludF9zZXRtb2RlKGRldmljZV90IGRl
 diwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9oaWdocG9pbnRfY2hlY2tf
 ODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRh
 X2ludGVsX2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRh
 X2ludGVsX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0
 YV9pbnRlbF9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFf
 aW50ZWxfb2xkX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0
 YXRpYyB2b2lkIGF0YV9pbnRlbF9uZXdfc2V0bW9kZShkZXZpY2VfdCBkZXYs
 IGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRfYWxsb2Nh
 dGUoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRf
 c3RhdHVzKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2ludGVsXzMx
 MjQ0X2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3Rh
 dGljIHZvaWQgYXRhX2ludGVsXzMxMjQ0X3Jlc2V0KGRldmljZV90IGRldik7
 CnN0YXRpYyBpbnQgYXRhX2l0ZV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgdm9pZCBhdGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQg
 bW9kZSk7CnN0YXRpYyBpbnQgYXRhX2ptaWNyb25fY2hpcGluaXQoZGV2aWNl
 X3QgZGV2KTsKc3RhdGljIGludCBhdGFfam1pY3Jvbl9hbGxvY2F0ZShkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9yZXNldChkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9kbWFpbml0KGRl
 dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9qbWljcm9uX3NldG1vZGUo
 ZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX21hcnZl
 bGxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbWFy
 dmVsbF9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t
 YXJ2ZWxsX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t
 YXJ2ZWxsX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAq
 cmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX21hcnZlbGxfZW5kX3RyYW5zYWN0
 aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyB2b2lk
 IGF0YV9tYXJ2ZWxsX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk
 IGF0YV9tYXJ2ZWxsX2RtYXNldHByZCh2b2lkICp4c2MsIGJ1c19kbWFfc2Vn
 bWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcik7CnN0YXRpYyB2
 b2lkIGF0YV9tYXJ2ZWxsX2RtYWluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGlj
 IGludCBhdGFfbmF0aW9uYWxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3Rh
 dGljIHZvaWQgYXRhX25hdGlvbmFsX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBp
 bnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX252aWRpYV9jaGlwaW5pdChkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9udmlkaWFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbnZpZGlhX3N0YXR1cyhkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfbnZpZGlhX3Jlc2V0KGRldmlj
 ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfY2hpcGluaXQoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9hbGxvY2F0ZShk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX3N0YXR1cyhk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX2RtYXN0YXJ0
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfZG1hc3Rv
 cChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9kbWFy
 ZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9k
 bWFpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9wcm9taXNl
 X3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQg
 YXRhX3Byb21pc2VfdHgyX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRp
 YyBpbnQgYXRhX3Byb21pc2VfdHgyX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgaW50IGF0YV9wcm9taXNlX21pb19hbGxvY2F0ZShkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9taW9faW50cih2b2lkICpk
 YXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9taW9fc3RhdHVzKGRldmlj
 ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfbWlvX2NvbW1hbmQo
 c3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3RhdGljIHZvaWQgYXRh
 X3Byb21pc2VfbWlvX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk
 IGF0YV9wcm9taXNlX21pb19kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp
 YyB2b2lkIGF0YV9wcm9taXNlX21pb19zZXRtb2RlKGRldmljZV90IGRldiwg
 aW50IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9zeDRfaW50cih2
 b2lkICpkYXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9zeDRfY29tbWFu
 ZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0
 YV9wcm9taXNlX2Fwa3QodV9pbnQ4X3QgKmJ5dGVwLCBzdHJ1Y3QgYXRhX3Jl
 cXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9xdWV1
 ZV9ocGt0KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIsIHVfaW50
 MzJfdCBocGt0KTsKc3RhdGljIHZvaWQgYXRhX3Byb21pc2VfbmV4dF9ocGt0
 KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIpOwpzdGF0aWMgaW50
 IGF0YV9zZXJ2ZXJ3b3Jrc19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgaW50IGF0YV9zZXJ2ZXJ3b3Jrc19hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 OwpzdGF0aWMgdm9pZCBhdGFfc2VydmVyd29ya3Nfc2V0bW9kZShkZXZpY2Vf
 dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2NoaXBpbml0
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2NtZF9hbGxvY2F0ZShk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9jbWRfc3RhdHVzKGRldmlj
 ZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jbWRfc2V0bW9kZShkZXZpY2Vf
 dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2FsbG9jYXRl
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3NpaV9zdGF0dXMoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3NpaV9yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lpX3NldG1vZGUoZGV2aWNlX3Qg
 ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3Npc19jaGlwaW5pdChk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9zaXNfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3Npc19yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lzX3NldG1vZGUoZGV2aWNlX3Qg
 ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3ZpYV9jaGlwaW5pdChk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV92aWFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3ZpYV9yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfdmlhX3NvdXRoYnJpZGdlX2ZpeHVw
 KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV92aWFfZmFtaWx5X3Nl
 dG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBzdHJ1Y3Qg
 YXRhX2NoaXBfaWQgKmF0YV9tYXRjaF9jaGlwKGRldmljZV90IGRldiwgc3Ry
 dWN0IGF0YV9jaGlwX2lkICppbmRleCk7CnN0YXRpYyBzdHJ1Y3QgYXRhX2No
 aXBfaWQgKmF0YV9maW5kX2NoaXAoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXRh
 X2NoaXBfaWQgKmluZGV4LCBpbnQgc2xvdCk7CnN0YXRpYyBpbnQgYXRhX3Nl
 dHVwX2ludGVycnVwdChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9z
 ZXJpYWxpemUoZGV2aWNlX3QgZGV2LCBpbnQgZmxhZ3MpOwpzdGF0aWMgdm9p
 ZCBhdGFfcHJpbnRfY2FibGUoZGV2aWNlX3QgZGV2LCB1X2ludDhfdCAqd2hv
 KTsKc3RhdGljIGludCBhdGFfYXRhcGkoZGV2aWNlX3QgZGV2KTsKc3RhdGlj
 IGludCBhdGFfY2hlY2tfODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7
 CnN0YXRpYyBpbnQgYXRhX21vZGUyaWR4KGludCBtb2RlKTsKCgovKgogKiBn
 ZW5lcmljIEFUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KaW50CmF0YV9nZW5l
 cmljX2lkZW50KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lf
 Y29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAg
 ICBkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiR0VORVJJQyBBVEEgY29udHJvbGxl
 ciIpOwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfZ2VuZXJpY19jaGlwaW5p
 dDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9nZW5lcmljX2No
 aXBpbml0KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAgICBp
 ZiAoYXRhX3NldHVwX2ludGVycnVwdChkZXYpKQoJcmV0dXJuIEVOWElPOwog
 ICAgY3Rsci0+c2V0bW9kZSA9IGF0YV9nZW5lcmljX3NldG1vZGU7CiAgICBy
 ZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfaW50cih2b2lk
 ICpkYXRhKQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy
 ID0gZGF0YTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2g7CiAgICBpbnQg
 dW5pdDsKCiAgICBmb3IgKHVuaXQgPSAwOyB1bml0IDwgY3Rsci0+Y2hhbm5l
 bHM7IHVuaXQrKykgewoJaWYgKChjaCA9IGN0bHItPmludGVycnVwdFt1bml0
 XS5hcmd1bWVudCkpCgkgICAgY3Rsci0+aW50ZXJydXB0W3VuaXRdLmZ1bmN0
 aW9uKGNoKTsKICAgIH0KfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfc2V0
 bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBzdHJ1Y3QgYXRh
 X2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg
 IG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUsIEFUQV9VRE1BMik7
 CiAgICBtb2RlID0gYXRhX2NoZWNrXzgwcGluKGRldiwgbW9kZSk7CiAgICBp
 ZiAoIWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFf
 U0ZfU0VUWEZFUiwgMCwgbW9kZSkpCglhdGFkZXYtPm1vZGUgPSBtb2RlOwp9
 CgoKLyoKICogU0FUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8Kc3RhdGljIHZv
 aWQKYXRhX3NhdGFfcGh5X2VuYWJsZShzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 KQp7CiAgICBpbnQgbG9vcCwgcmV0cnk7CgogICAgaWYgKChBVEFfSURYX0lO
 TChjaCwgQVRBX1NDT05UUk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gQVRB
 X1NDX0RFVF9JRExFKSB7CglhdGFfc2F0YV9jb25uZWN0KGNoKTsKCXJldHVy
 bjsKICAgIH0KCiAgICBmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAxMDsgcmV0
 cnkrKykgewoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKyspIHsK
 CSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1NDX0RF
 VF9SRVNFVCk7CgkgICAgYXRhX3VkZWxheSgxMDApOwoJICAgIGlmICgoQVRB
 X0lEWF9JTkwoY2gsIEFUQV9TQ09OVFJPTCkgJgoJCSBBVEFfU0NfREVUX01B
 U0spID09IEFUQV9TQ19ERVRfUkVTRVQpCgkJYnJlYWs7Cgl9CglhdGFfdWRl
 bGF5KDUwMDApOwoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKysp
 IHsKCSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1ND
 X0RFVF9JRExFIHwKCQkJCQkgICBBVEFfU0NfSVBNX0RJU19QQVJUSUFMIHwK
 CQkJCQkgICBBVEFfU0NfSVBNX0RJU19TTFVNQkVSKTsKCSAgICBhdGFfdWRl
 bGF5KDEwMCk7CgkgICAgaWYgKChBVEFfSURYX0lOTChjaCwgQVRBX1NDT05U
 Uk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gMCkgewoJCWF0YV9zYXRhX2Nv
 bm5lY3QoY2gpOwoJCXJldHVybjsKCSAgICB9Cgl9CiAgICB9Cn0KCnN0YXRp
 YyB2b2lkCmF0YV9zYXRhX3BoeV9ldmVudCh2b2lkICpjb250ZXh0LCBpbnQg
 ZHVtbXkpCnsKICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cCA9IChz
 dHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAqKWNvbnRleHQ7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyh0cC0+ZGV2KTsK
 ICAgIGRldmljZV90ICpjaGlsZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7
 CgogICAgbXR4X2xvY2soJkdpYW50KTsgICAvKiBuZXdidXMgc3Vja2FnZSBp
 dCBuZWVkcyBHaWFudCAqLwogICAgaWYgKHRwLT5hY3Rpb24gPT0gQVRBX0Nf
 QVRUQUNIKSB7CglpZiAoYm9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50
 Zih0cC0+ZGV2LCAiQ09OTkVDVEVEXG4iKTsKCWF0YV9zYXRhX2Nvbm5lY3Qo
 Y2gpOwoJYXRhX2lkZW50aWZ5KHRwLT5kZXYpOwogICAgfQogICAgaWYgKHRw
 LT5hY3Rpb24gPT0gQVRBX0NfREVUQUNIKSB7CglpZiAoIWRldmljZV9nZXRf
 Y2hpbGRyZW4odHAtPmRldiwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgewoJ
 ICAgIGZvciAoaSA9IDA7IGkgPCBuY2hpbGRyZW47IGkrKykKCQlpZiAoY2hp
 bGRyZW5baV0pCgkJICAgIGRldmljZV9kZWxldGVfY2hpbGQodHAtPmRldiwg
 Y2hpbGRyZW5baV0pOwoJICAgIGZyZWUoY2hpbGRyZW4sIE1fVEVNUCk7Cgl9
 ICAgIAoJbXR4X2xvY2soJmNoLT5zdGF0ZV9tdHgpOwoJY2gtPnN0YXRlID0g
 QVRBX0lETEU7CgltdHhfdW5sb2NrKCZjaC0+c3RhdGVfbXR4KTsKCWlmIChi
 b290dmVyYm9zZSkKCSAgICBkZXZpY2VfcHJpbnRmKHRwLT5kZXYsICJESVND
 T05ORUNURURcbiIpOwogICAgfQogICAgbXR4X3VubG9jaygmR2lhbnQpOyAv
 KiBzdWNrYWdlIGNvZGUgZGVhbHQgd2l0aCwgcmVsZWFzZSBHaWFudCAqLwog
 ICAgZnJlZSh0cCwgTV9BVEEpOwp9CgpzdGF0aWMgaW50CmF0YV9zYXRhX2Nv
 bm5lY3Qoc3RydWN0IGF0YV9jaGFubmVsICpjaCkKewogICAgdV9pbnQzMl90
 IHN0YXR1czsKICAgIGludCB0aW1lb3V0OwoKICAgIC8qIHdhaXQgdXAgdG8g
 MSBzZWNvbmQgZm9yICJjb25uZWN0IHdlbGwiICovCiAgICBmb3IgKHRpbWVv
 dXQgPSAwOyB0aW1lb3V0IDwgMTAwIDsgdGltZW91dCsrKSB7CglzdGF0dXMg
 PSBBVEFfSURYX0lOTChjaCwgQVRBX1NTVEFUVVMpOwoJaWYgKChzdGF0dXMg
 JiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4x
 IHx8CgkgICAgKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFU
 QV9TU19DT05XRUxMX0dFTjIpCgkgICAgYnJlYWs7CglhdGFfdWRlbGF5KDEw
 MDAwKTsKICAgIH0KICAgIGlmICh0aW1lb3V0ID49IDEwMCkgewoJaWYgKGJv
 b3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg
 Y29ubmVjdCBzdGF0dXM9JTA4eFxuIiwgc3RhdHVzKTsKCXJldHVybiAwOwog
 ICAgfQoKICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KICAg
 IEFUQV9JRFhfT1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gs
 IEFUQV9TRVJST1IpKTsKCiAgICAvKiBmaW5kIG91dCB3aGF0IHR5cGUgZGV2
 aWNlIHdlIGdvdCBwb2xsIGZvciBzcGVjJ2QgMzEgc2Vjb25kcyAqLwogICAg
 LyogWFhYIFNPUyAxMCBzZWNzIGZvciBub3cgYXMgSSBoYXZlIGxpdHRsZSBw
 YXRpZW5jZSAqLwogICAgY2gtPmRldmljZXMgPSAwOwogICAgZm9yICh0aW1l
 b3V0ID0gMDsgdGltZW91dCA8IDEwMDA7IHRpbWVvdXQrKykgewoJaWYgKEFU
 QV9JRFhfSU5CKGNoLCBBVEFfU1RBVFVTKSAmIEFUQV9TX0JVU1kpIAoJICAg
 IERFTEFZKDEwMDAwKTsKCWVsc2UKCSAgICBicmVhazsKICAgIH0KICAgIGlm
 IChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg
 Y29ubmVjdCByZWFkeSB0aW1lPSVkbXNcbiIsIHRpbWVvdXQgKiAxMCk7CiAg
 ICBpZiAodGltZW91dCA8IDEwMDApIHsKCWlmICgoQVRBX0lEWF9JTkIoY2gs
 IEFUQV9DWUxfTFNCKSA9PSBBVEFQSV9NQUdJQ19MU0IpICYmCgkgICAgKEFU
 QV9JRFhfSU5CKGNoLCBBVEFfQ1lMX01TQikgPT0gQVRBUElfTUFHSUNfTVNC
 KSkKCSAgICBjaC0+ZGV2aWNlcyA9IEFUQV9BVEFQSV9NQVNURVI7CgllbHNl
 IAoJICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQV9NQVNURVI7CiAgICB9CiAg
 ICBpZiAoYm9vdHZlcmJvc2UpCglkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJz
 YXRhX2Nvbm5lY3QgZGV2aWNlcz0weCViXG4iLAoJCSAgICAgIGNoLT5kZXZp
 Y2VzLCAiXDIwXDNBVEFQSV9NQVNURVJcMUFUQV9NQVNURVIiKTsKICAgIHJl
 dHVybiAxOwp9CgpzdGF0aWMgdm9pZAphdGFfc2F0YV9zZXRtb2RlKGRldmlj
 ZV90IGRldiwgaW50IG1vZGUpCnsKICAgIHN0cnVjdCBhdGFfZGV2aWNlICph
 dGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyoKICAgICAq
 IGlmIHdlIGRldGVjdCB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgYSByZWFsIFNB
 VEEgZGV2aWNlIHdlIGxpbWl0IAogICAgICogdGhlIHRyYW5zZmVyIG1vZGUg
 dG8gVURNQTUvQVRBMTAwLgogICAgICogdGhpcyB3b3JrcyBhcm91bmQgdGhl
 IHByb2JsZW1zIHNvbWUgZGV2aWNlcyBoYXMgd2l0aCB0aGUgCiAgICAgKiBN
 YXJ2ZWxsIDg4U1g4MDMwIFNBVEEtPlBBVEEgY29udmVydGVycyBhbmQgVURN
 QTYvQVRBMTMzLgogICAgICovCiAgICBpZiAoYXRhZGV2LT5wYXJhbS5zYXRh
 Y2FwYWJpbGl0aWVzICE9IDB4MDAwMCAmJgoJYXRhZGV2LT5wYXJhbS5zYXRh
 Y2FwYWJpbGl0aWVzICE9IDB4ZmZmZikgewoJc3RydWN0IGF0YV9jaGFubmVs
 ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2
 KSk7CgoJLyogb24gc29tZSBkcml2ZXMgd2UgbmVlZCB0byBzZXQgdGhlIHRy
 YW5zZmVyIG1vZGUgKi8KCWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZF
 QVRVUkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwKCQkgICAgICAgYXRhX2xpbWl0
 X21vZGUoZGV2LCBtb2RlLCBBVEFfVURNQTYpKTsKCgkvKiBxdWVyeSBTQVRB
 IFNUQVRVUyBmb3IgdGhlIHNwZWVkICovCiAgICAgICAgaWYgKGNoLT5yX2lv
 W0FUQV9TU1RBVFVTXS5yZXMgJiYgCgkgICAoKEFUQV9JRFhfSU5MKGNoLCBB
 VEFfU1NUQVRVUykgJiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PQoJICAgIEFU
 QV9TU19DT05XRUxMX0dFTjIpKQoJICAgIGF0YWRldi0+bW9kZSA9IEFUQV9T
 QTMwMDsKCWVsc2UgCgkgICAgYXRhZGV2LT5tb2RlID0gQVRBX1NBMTUwOwog
 ICAgfQogICAgZWxzZSB7Cgltb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBt
 b2RlLCBBVEFfVURNQTUpOwoJaWYgKCFhdGFfY29udHJvbGNtZChkZXYsIEFU
 QV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUpKQoJICAg
 IGF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBBSENJIHYx
 LjAgY29tcGxpYW50IFNBVEEgY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwog
 Ki8Kc3RydWN0IGF0YV9haGNpX2RtYV9wcmQgewogICAgdV9pbnQ2NF90ICAg
 ICAgICAgICAgICAgICAgIGRiYTsKICAgIHVfaW50MzJfdCAgICAgICAgICAg
 ICAgICAgICByZXNlcnZlZDsKICAgIHVfaW50MzJfdCAgICAgICAgICAgICAg
 ICAgICBkYmM7ICAgICAgICAgICAgLyogMCBiYXNlZCAqLwojZGVmaW5lIEFU
 QV9BSENJX1BSRF9NQVNLICAgICAgIDB4MDAzZmZmZmYgICAgICAvKiBtYXgg
 NE1CICovCiNkZWZpbmUgQVRBX0FIQ0lfUFJEX0lQQyAgICAgICAgKDE8PDMx
 KQp9IF9fcGFja2VkOwoKc3RydWN0IGF0YV9haGNpX2NtZF90YWIgewogICAg
 dV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgIGNmaXNbNjRdOwogICAgdV9p
 bnQ4X3QgICAgICAgICAgICAgICAgICAgIGFjbWRbMzJdOwogICAgdV9pbnQ4
 X3QgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzMyXTsKICAgIHN0cnVj
 dCBhdGFfYWhjaV9kbWFfcHJkICAgICBwcmRfdGFiWzE2XTsKfSBfX3BhY2tl
 ZDsKCnN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCB7CiAgICB1X2ludDE2X3Qg
 ICAgICAgICAgICAgICAgICAgY21kX2ZsYWdzOwogICAgdV9pbnQxNl90ICAg
 ICAgICAgICAgICAgICAgIHByZF9sZW5ndGg7ICAgICAvKiBQUkQgZW50cmll
 cyAqLwogICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgIGJ5dGVjb3Vu
 dDsKICAgIHVfaW50NjRfdCAgICAgICAgICAgICAgICAgICBjbWRfdGFibGVf
 cGh5czsgLyogMTI4Ynl0ZSBhbGlnbmVkICovCn0gX19wYWNrZWQ7CgoKc3Rh
 dGljIGludAphdGFfYWhjaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAg
 IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7CiAgICB1X2ludDMyX3QgdmVyc2lvbjsKCiAgICAvKiBy
 ZXNldCBBSENJIGNvbnRyb2xsZXIgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfR0hDLAoJICAgICBBVEFfSU5MKGN0bHItPnJfcmVz
 MiwgQVRBX0FIQ0lfR0hDKSB8IEFUQV9BSENJX0dIQ19IUik7CiAgICBERUxB
 WSgxMDAwMDAwKTsKICAgIGlmIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB
 X0FIQ0lfR0hDKSAmIEFUQV9BSENJX0dIQ19IUikgewoJYnVzX3JlbGVhc2Vf
 cmVzb3VyY2UoZGV2LCBjdGxyLT5yX3R5cGUyLCBjdGxyLT5yX3JpZDIsIGN0
 bHItPnJfcmVzMik7CglkZXZpY2VfcHJpbnRmKGRldiwgIkFIQ0kgY29udHJv
 bGxlciByZXNldCBmYWlsdXJlXG4iKTsKCXJldHVybiBFTlhJTzsKICAgIH0K
 CiAgICAvKiBlbmFibGUgQUhDSSBtb2RlICovCiAgICBBVEFfT1VUTChjdGxy
 LT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxyLT5y
 X3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfQUUpOwoKICAg
 IC8qIGdldCB0aGUgbnVtYmVyIG9mIEhXIGNoYW5uZWxzICovCiAgICBjdGxy
 LT5jaGFubmVscyA9IChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lf
 Q0FQKSAmIEFUQV9BSENJX05QTUFTSykrMTsKCiAgICAvKiBjbGVhciBpbnRl
 cnJ1cHRzICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ
 X0lTLCBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfSVMpKTsKCiAg
 ICAvKiBlbmFibGUgQUhDSSBpbnRlcnJ1cHRzICovCiAgICBBVEFfT1VUTChj
 dGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxy
 LT5yX3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfSUUpOwoK
 ICAgIGN0bHItPnJlc2V0ID0gYXRhX2FoY2lfcmVzZXQ7CiAgICBjdGxyLT5k
 bWFpbml0ID0gYXRhX2FoY2lfZG1haW5pdDsKICAgIGN0bHItPmFsbG9jYXRl
 ID0gYXRhX2FoY2lfYWxsb2NhdGU7CiAgICBjdGxyLT5zZXRtb2RlID0gYXRh
 X3NhdGFfc2V0bW9kZTsKCiAgICAvKiBlbmFibGUgUENJIGludGVycnVwdCAq
 LwogICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwKCQkg
 ICAgIHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgMikgJiB+
 MHgwNDAwLCAyKTsKCiAgICAvKiBhbm5vdW5jZSB3ZSBzdXBwb3J0IHRoZSBI
 VyAqLwogICAgdmVyc2lvbiA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFf
 QUhDSV9WUyk7CiAgICBkZXZpY2VfcHJpbnRmKGRldiwKCQkgICJBSENJIFZl
 cnNpb24gJXgleC4leCV4IGNvbnRyb2xsZXIgd2l0aCAlZCBwb3J0cyBkZXRl
 Y3RlZFxuIiwKCQkgICh2ZXJzaW9uID4+IDI0KSAmIDB4ZmYsICh2ZXJzaW9u
 ID4+IDE2KSAmIDB4ZmYsCgkJICAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZl
 cnNpb24gJiAweGZmLCBjdGxyLT5jaGFubmVscyk7CiAgICByZXR1cm4gMDsK
 fQoKc3RhdGljIGludAphdGFfYWhjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry
 dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 ICAgIGludCBvZmZzZXQgPSAoY2gtPnVuaXQgPDwgNyk7CgogICAgLyogc2V0
 dXAgbGVnYWN5IGNydWZ0IHdlIG5lZWQgKi8KICAgIGNoLT5yX2lvW0FUQV9D
 WUxfTFNCXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFf
 Q1lMX0xTQl0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TSUcgKyAxICsgb2Zmc2V0
 OwogICAgY2gtPnJfaW9bQVRBX0NZTF9NU0JdLnJlcyA9IGN0bHItPnJfcmVz
 MjsKICAgIGNoLT5yX2lvW0FUQV9DWUxfTVNCXS5vZmZzZXQgPSBBVEFfQUhD
 SV9QX1NJRyArIDMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT
 XS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT
 XS5vZmZzZXQgPSBBVEFfQUhDSV9QX1RGRCArIG9mZnNldDsKICAgIGNoLT5y
 X2lvW0FUQV9BTFRTVEFUXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+
 cl9pb1tBVEFfQUxUU1RBVF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9URkQgKyBv
 ZmZzZXQ7CgogICAgLyogc2V0IHRoZSBTQVRBIHJlc291cmNlcyAqLwogICAg
 Y2gtPnJfaW9bQVRBX1NTVEFUVVNdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAg
 IGNoLT5yX2lvW0FUQV9TU1RBVFVTXS5vZmZzZXQgPSBBVEFfQUhDSV9QX1NT
 VFMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBj
 dGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQg
 PSBBVEFfQUhDSV9QX1NFUlIgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFf
 U0NPTlRST0xdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FU
 QV9TQ09OVFJPTF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TQ1RMICsgb2Zmc2V0
 OwogICAgY2gtPnJfaW9bQVRBX1NBQ1RJVkVdLnJlcyA9IGN0bHItPnJfcmVz
 MjsKICAgIGNoLT5yX2lvW0FUQV9TQUNUSVZFXS5vZmZzZXQgPSBBVEFfQUhD
 SV9QX1NBQ1QgKyBvZmZzZXQ7CgogICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9h
 aGNpX3N0YXR1czsKICAgIGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0
 YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uOwogICAgY2gtPmh3LmVuZF90cmFu
 c2FjdGlvbiA9IGF0YV9haGNpX2VuZF90cmFuc2FjdGlvbjsKICAgIGNoLT5o
 dy5jb21tYW5kID0gTlVMTDsgICAgICAvKiBub3QgdXNlZCBoZXJlICovCgog
 ICAgLyogc2V0dXAgdGhlIHdvcmsgYXJlYXMgKi8KICAgIEFUQV9PVVRMKGN0
 bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEIgKyBvZmZzZXQsCgkgICAgIGNo
 LT5kbWEtPndvcmtfYnVzICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUKTsKICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0
 LCAweDAwMDAwMDAwKTsKCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFU
 QV9BSENJX1BfRkIgKyBvZmZzZXQsCgkgICAgIGNoLT5kbWEtPndvcmtfYnVz
 ICsgQVRBX0FIQ0lfRkJfT0ZGU0VUKTsKICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfUF9GQlUgKyBvZmZzZXQsIDB4MDAwMDAwMDApOwoK
 ICAgIC8qIGVuYWJsZSB3YW50ZWQgcG9ydCBpbnRlcnJ1cHRzICovCiAgICBB
 VEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSUUgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0lYX0NQRCB8IEFUQV9BSENJX1BfSVhfVEZF
 IHwgQVRBX0FIQ0lfUF9JWF9IQkYgfAoJICAgICAgQVRBX0FIQ0lfUF9JWF9I
 QkQgfCBBVEFfQUhDSV9QX0lYX0lGIHwgQVRBX0FIQ0lfUF9JWF9PRiB8Cgkg
 ICAgICBBVEFfQUhDSV9QX0lYX1BSQyB8IEFUQV9BSENJX1BfSVhfUEMgfCBB
 VEFfQUhDSV9QX0lYX0RQIHwKCSAgICAgIEFUQV9BSENJX1BfSVhfVUYgfCBB
 VEFfQUhDSV9QX0lYX1NEQiB8IEFUQV9BSENJX1BfSVhfRFMgfAoJICAgICAg
 QVRBX0FIQ0lfUF9JWF9QUyB8IEFUQV9BSENJX1BfSVhfREhSKSk7CgogICAg
 Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN
 RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf
 UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKICAgIHJldHVybiAw
 Owp9CgpzdGF0aWMgaW50CmF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry
 dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 ICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cDsKICAgIHVfaW50MzJf
 dCBhY3Rpb24sIGlzdGF0dXMsIHNzdGF0dXMsIGVycm9yLCBpc3N1ZWQ7CiAg
 ICBpbnQgb2Zmc2V0ID0gKGNoLT51bml0IDw8IDcpOwogICAgaW50IHRhZyA9
 IDA7CgogICAgYWN0aW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9B
 SENJX0lTKTsKICAgIGlmIChhY3Rpb24gJiAoMSA8PCBjaC0+dW5pdCkpIHsK
 CWlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9J
 UyArIG9mZnNldCk7Cglpc3N1ZWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwg
 QVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7Cglzc3RhdHVzID0gQVRBX0lOTChj
 dGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU1NUUyArIG9mZnNldCk7CgllcnJv
 ciA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1NFUlIgKyBv
 ZmZzZXQpOwoKCS8qIGNsZWFyIGludGVycnVwdChzKSAqLwoJQVRBX09VVEwo
 Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgYWN0aW9uKTsKCUFUQV9PVVRM
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwgaXN0YXR1
 cyk7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU0VSUiAr
 IG9mZnNldCwgZXJyb3IpOwoKCS8qIGRvIHdlIGhhdmUgY29sZCBjb25uZWN0
 IHN1cnByaXNlICovCglpZiAoaXN0YXR1cyAmIEFUQV9BSENJX1BfSVhfQ1BE
 KSB7CgkgICAgcHJpbnRmKCJhdGFfYWhjaV9zdGF0dXMgc3RhdHVzPSUwOHgg
 c3N0YXR1cz0lMDh4IGVycm9yPSUwOHhcbiIsCgkJICAgaXN0YXR1cywgc3N0
 YXR1cywgZXJyb3IpOwoJfQoKCS8qIGNoZWNrIGZvciBhbmQgaGFuZGxlIGNv
 bm5lY3QgZXZlbnRzICovCglpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lY
 X1BDKSAmJgoJICAgICh0cCA9IChzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAq
 KQoJCSAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayks
 CgkJCSBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAo
 Ym9vdHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiQ09OTkVD
 VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19BVFRB
 Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0
 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz
 a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK
 CX0KCgkvKiBjaGVjayBmb3IgYW5kIGhhbmRsZSBkaXNjb25uZWN0IGV2ZW50
 cyAqLwoJZWxzZSBpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lYX1BSQykg
 JiYgCgkgICAgISgoc3N0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09
 IEFUQV9TU19DT05XRUxMX0dFTjEgfHwKCSAgICAgIChzc3RhdHVzICYgQVRB
 X1NTX0NPTldFTExfTUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMikgJiYK
 CSAgICAodHAgPSAoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgKikKCQkgIG1h
 bGxvYyhzaXplb2Yoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2spLAoJCSAgICAg
 ICBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAoYm9v
 dHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVD
 VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19ERVRB
 Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0
 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz
 a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK
 CX0KCgkvKiBkbyB3ZSBoYXZlIGFueSBkZXZpY2UgYWN0aW9uID8gKi8KCWlm
 ICghKGlzc3VlZCAmICgxIDw8IHRhZykpKQoJICAgIHJldHVybiAxOwogICAg
 fQogICAgcmV0dXJuIDA7Cn0KCi8qIG11c3QgYmUgY2FsbGVkIHdpdGggQVRB
 IGNoYW5uZWwgbG9ja2VkIGFuZCBzdGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMg
 aW50CmF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVx
 dWVzdCAqcmVxdWVzdCkKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3Qt
 PmRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CiAg
 ICBzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAqY3RwOwogICAgc3RydWN0IGF0
 YV9haGNpX2NtZF9saXN0ICpjbHA7CiAgICBpbnQgdGFnID0gMCwgZW50cmll
 cyA9IDA7CiAgICBpbnQgZmlzX3NpemU7CgogICAgLyogZ2V0IGEgcGllY2Ug
 b2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgICBjdHAg
 PSAoc3RydWN0IGF0YV9haGNpX2NtZF90YWIgKikKCSAgKGNoLT5kbWEtPndv
 cmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKyAoQVRBX0FIQ0lfQ1RfU0laRSAq
 IHRhZykpOwoKICAgIC8qIHNldHVwIHRoZSBGSVMgZm9yIHRoaXMgcmVxdWVz
 dCAqLyAvKiBYWFggU09TIEFUQVBJIG1pc3Npbmcgc3RpbGwgKi8KICAgIGlm
 ICghKGZpc19zaXplID0gYXRhX2FoY2lfc2V0dXBfZmlzKCZjdHAtPmNmaXNb
 MF0sIHJlcXVlc3QpKSkgewoJZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYs
 ICJzZXR0aW5nIHVwIFNBVEEgRklTIGZhaWxlZFxuIik7CglyZXF1ZXN0LT5y
 ZXN1bHQgPSBFSU87CglyZXR1cm4gQVRBX09QX0ZJTklTSEVEOwogICAgfQoK
 ICAgIC8qIGlmIHJlcXVlc3QgbW92ZXMgZGF0YSBzZXR1cCBhbmQgbG9hZCBT
 RyBsaXN0ICovCiAgICBpZiAocmVxdWVzdC0+ZmxhZ3MgJiAoQVRBX1JfUkVB
 RCB8IEFUQV9SX1dSSVRFKSkgewoJaWYgKGNoLT5kbWEtPmxvYWQoY2gtPmRl
 diwgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+Ynl0ZWNvdW50LAoJCQkgIHJl
 cXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCwKCQkJICBjdHAtPnByZF90YWIs
 ICZlbnRyaWVzKSkgewoJICAgIGRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2
 LCAic2V0dGluZyB1cCBETUEgZmFpbGVkXG4iKTsKCSAgICByZXF1ZXN0LT5y
 ZXN1bHQgPSBFSU87CgkgICAgcmV0dXJuIEFUQV9PUF9GSU5JU0hFRDsKCX0K
 ICAgIH0KCiAgICAvKiBzZXR1cCB0aGUgY29tbWFuZCBsaXN0IGVudHJ5ICov
 CiAgICBjbHAgPSAoc3RydWN0IGF0YV9haGNpX2NtZF9saXN0ICopCgkgIChj
 aC0+ZG1hLT53b3JrICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUICsgKEFUQV9BSENJ
 X0NMX1NJWkUgKiB0YWcpKTsKCiAgICBjbHAtPnByZF9sZW5ndGggPSBlbnRy
 aWVzOwogICAgY2xwLT5jbWRfZmxhZ3MgPSAocmVxdWVzdC0+ZmxhZ3MgJiBB
 VEFfUl9XUklURSA/ICgxPDw2KSA6IDApIHwKCQkgICAgIChyZXF1ZXN0LT5m
 bGFncyAmIEFUQV9SX0FUQVBJID8gKDE8PDUpIDogMCkgfAoJCSAgICAgKGZp
 c19zaXplIC8gc2l6ZW9mKHVfaW50MzJfdCkpOwogICAgY2xwLT5ieXRlY291
 bnQgPSAwOwogICAgY2xwLT5jbWRfdGFibGVfcGh5cyA9IGh0b2xlNjQoY2gt
 PmRtYS0+d29ya19idXMgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKwoJCQkJICAo
 QVRBX0FIQ0lfQ1RfU0laRSAqIHRhZykpOwoKICAgIC8qIGNsZWFyIGV2ZW50
 dWFsIEFDVElWRSBiaXQgKi8KICAgIEFUQV9JRFhfT1VUTChjaCwgQVRBX1NB
 Q1RJVkUsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0FDVElWRSkgJiAoMSA8PCB0
 YWcpKTsKCiAgICAvKiBpc3N1ZSB0aGUgY29tbWFuZCAqLwogICAgQVRBX09V
 VEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NJICsgKGNoLT51bml0IDw8
 IDcpLCAoMSA8PCB0YWcpKTsKCiAgICAvKiBzdGFydCB0aGUgdGltZW91dCAq
 LwogICAgY2FsbG91dF9yZXNldCgmcmVxdWVzdC0+Y2FsbG91dCwgcmVxdWVz
 dC0+dGltZW91dCAqIGh6LAoJCSAgKHRpbWVvdXRfdCopYXRhX3RpbWVvdXQs
 IHJlcXVlc3QpOwogICAgcmV0dXJuIEFUQV9PUF9DT05USU5VRVM7Cn0KCi8q
 IG11c3QgYmUgY2FsbGVkIHdpdGggQVRBIGNoYW5uZWwgbG9ja2VkIGFuZCBz
 dGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMgaW50CmF0YV9haGNpX2VuZF90cmFu
 c2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCnsKICAgIHN0
 cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHI9ZGV2aWNlX2dldF9zb2Z0
 YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpKTsKICAgIHN0cnVjdCBhdGFf
 Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFy
 ZW50KHJlcXVlc3QtPmRldikpOwogICAgc3RydWN0IGF0YV9haGNpX2NtZF9s
 aXN0ICpjbHA7CiAgICB1X2ludDMyX3QgdGZfZGF0YTsKICAgIGludCB0YWcg
 PSAwOwoKICAgIC8qIGtpbGwgdGhlIHRpbWVvdXQgKi8KICAgIGNhbGxvdXRf
 c3RvcCgmcmVxdWVzdC0+Y2FsbG91dCk7CgogICAgLyogZ2V0IHN0YXR1cyAq
 LwogICAgdGZfZGF0YSA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD
 SV9QX1RGRCArIChjaC0+dW5pdCA8PCA3KSk7CiAgICByZXF1ZXN0LT5zdGF0
 dXMgPSB0Zl9kYXRhOwoKICAgIC8qIGlmIGVycm9yIHN0YXR1cyBnZXQgZGV0
 YWlscyAqLwogICAgaWYgKHJlcXVlc3QtPnN0YXR1cyAmIEFUQV9TX0VSUk9S
 KSAgCglyZXF1ZXN0LT5lcnJvciA9IHRmX2RhdGEgPj4gODsKCiAgICAvKiBy
 ZWNvcmQgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBtb3ZlZCAqLwogICAg
 Y2xwID0gKHN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCAqKQoJICAoY2gtPmRt
 YS0+d29yayArIEFUQV9BSENJX0NMX09GRlNFVCArIChBVEFfQUhDSV9DTF9T
 SVpFICogdGFnKSk7CiAgICByZXF1ZXN0LT5kb25lY291bnQgPSBjbHAtPmJ5
 dGVjb3VudDsKCiAgICAvKiByZWxlYXNlIFNHIGxpc3QgZXRjICovCiAgICBj
 aC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CgogICAgcmV0dXJuIEFUQV9PUF9G
 SU5JU0hFRDsKfQoKc3RhdGljIHZvaWQKYXRhX2FoY2lfcmVzZXQoZGV2aWNl
 X3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK
 ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CiAgICB1X2ludDMyX3QgY21kOwogICAgaW50IHRpbWVvdXQsIG9m
 ZnNldCA9IChjaC0+dW5pdCA8PCA3KTsKCiAgICAvKiBraWxsIG9mZiBhbGwg
 YWN0aXZpdHkgb24gdGhpcyBjaGFubmVsICovCiAgICBjbWQgPSBBVEFfSU5M
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwogICAg
 QVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNl
 dCwKCSAgICAgY21kICYgfihBVEFfQUhDSV9QX0NNRF9GUkUgfCBBVEFfQUhD
 SV9QX0NNRF9TVCkpOwoKICAgIC8qIFhYWCBTT1MgdGhpcyBpcyBub3QgZW50
 aXJlbHkgd3JvbmcgKi8KICAgIHRpbWVvdXQgPSAwOwogICAgZG8gewoJREVM
 QVkoMTAwMCk7CglpZiAodGltZW91dCsrID4gNTAwKQoJICAgIGRldmljZV9w
 cmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdpbmUgZmFpbGVkXG4iKTsK
 CSAgICBicmVhazsKCX0KICAgIHdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVz
 MiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpICYgQVRBX0FIQ0lfUF9DTURf
 Q1IpOwoKICAgIC8qIGlzc3VlIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBz
 dXBwb3J0ZWQgKi8gCiAgICBpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFU
 QV9BSENJX0NBUCkgJiBBVEFfQUhDSV9DQVBfQ0xPKSB7CgljbWQgPSBBVEFf
 SU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwoJ
 Y21kIHw9IEFUQV9BSENJX1BfQ01EX0NMTzsKCUFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQsIGNtZCk7Cgl0aW1lb3V0
 ID0gMDsKCWRvIHsKCSAgICBERUxBWSgxMDAwKTsKCSAgICBpZiAodGltZW91
 dCsrID4gNTAwKQoJCWRldmljZV9wcmludGYoZGV2LCAiZXhlY3V0aW5nIENM
 TyBmYWlsZWRcbiIpOwoJCWJyZWFrOwoJICAgIH0KCXdoaWxlIChBVEFfSU5M
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQrb2Zmc2V0KSZBVEFfQUhD
 SV9QX0NNRF9DTE8pOwogICAgfQoKICAgIC8qIHNwaW4gdXAgZGV2aWNlICov
 CiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsg
 b2Zmc2V0LCBBVEFfQUhDSV9QX0NNRF9TVUQpOwoKICAgIGF0YV9zYXRhX3Bo
 eV9lbmFibGUoY2gpOwoKICAgIC8qIGNsZWFyIGFueSBpbnRlcnJ1cHRzIHBl
 bmRpbmcgb24gdGhpcyBjaGFubmVsICovCiAgICBBVEFfT1VUTChjdGxyLT5y
 X3JlczIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQsCgkgICAgIEFUQV9JTkwo
 Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CgogICAg
 Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN
 RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf
 UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKfQoKc3RhdGljIHZv
 aWQKYXRhX2FoY2lfZG1hc2V0cHJkKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdt
 ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQp7ICAgIAogICAg
 c3RydWN0IGF0YV9kbWFzZXRwcmRfYXJncyAqYXJncyA9IHhzYzsKICAgIHN0
 cnVjdCBhdGFfYWhjaV9kbWFfcHJkICpwcmQgPSBhcmdzLT5kbWF0YWI7CiAg
 ICBpbnQgaTsKCiAgICBpZiAoIShhcmdzLT5lcnJvciA9IGVycm9yKSkgewoJ
 Zm9yIChpID0gMDsgaSA8IG5zZWdzOyBpKyspIHsKCSAgICBwcmRbaV0uZGJh
 ID0gaHRvbGU2NChzZWdzW2ldLmRzX2FkZHIpOwoJICAgIHByZFtpXS5kYmMg
 PSBodG9sZTMyKChzZWdzW2ldLmRzX2xlbiAtIDEpICYgQVRBX0FIQ0lfUFJE
 X01BU0spOwoJfQogICAgfQogICAgYXJncy0+bnNlZ3MgPSBuc2VnczsKfQoK
 c3RhdGljIHZvaWQKYXRhX2FoY2lfZG1haW5pdChkZXZpY2VfdCBkZXYpCnsK
 ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CgogICAgYXRhX2RtYWluaXQoZGV2KTsKICAgIGlmIChjaC0+ZG1h
 KSB7CgkvKiBub3RlIHN0YXJ0IGFuZCBzdG9wIGFyZSBub3QgdXNlZCBoZXJl
 ICovCgljaC0+ZG1hLT5zZXRwcmQgPSBhdGFfYWhjaV9kbWFzZXRwcmQ7Cglj
 aC0+ZG1hLT5tYXhfaW9zaXplID0gODE5MiAqIERFVl9CU0laRTsKICAgIH0K
 fQoKc3RhdGljIGludAphdGFfYWhjaV9zZXR1cF9maXModV9pbnQ4X3QgKmZp
 cywgc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQp7CiAgICBzdHJ1Y3Qg
 YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0
 LT5kZXYpOwogICAgaW50IGlkeCA9IDA7CgogICAgLyogWFhYIFNPUyBhZGQg
 QVRBUEkgY29tbWFuZHMgc3VwcG9ydCBsYXRlciAqLwogICAgYXRhX21vZGlm
 eV9pZl80OGJpdChyZXF1ZXN0KTsKCiAgICBmaXNbaWR4KytdID0gMHgyNzsg
 IC8qIGhvc3QgdG8gZGV2aWNlICovCiAgICBmaXNbaWR4KytdID0gMHg4MDsg
 IC8qIGNvbW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KICAgIGZp
 c1tpZHgrK10gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5kOwogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmU7CgogICAgZmlzW2lkeCsr
 XSA9IHJlcXVlc3QtPnUuYXRhLmxiYTsKICAgIGZpc1tpZHgrK10gPSByZXF1
 ZXN0LT51LmF0YS5sYmEgPj4gODsKICAgIGZpc1tpZHgrK10gPSByZXF1ZXN0
 LT51LmF0YS5sYmEgPj4gMTY7CiAgICBmaXNbaWR4XSA9IEFUQV9EX0xCQSB8
 IGF0YWRldi0+dW5pdDsKICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0Rf
 NDhCSVRfQUNUSVZFKQoJaWR4Kys7CiAgICBlbHNlCglmaXNbaWR4KytdIHw9
 IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMjQgJiAweDBmKTsKCiAgICBmaXNb
 aWR4KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDI0OwogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAzMjsgCiAgICBmaXNbaWR4
 KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDQwOyAKICAgIGZpc1tpZHgr
 K10gPSByZXF1ZXN0LT51LmF0YS5mZWF0dXJlID4+IDg7CgogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmNvdW50OwogICAgZmlzW2lkeCsrXSA9
 IHJlcXVlc3QtPnUuYXRhLmNvdW50ID4+IDg7CiAgICBmaXNbaWR4KytdID0g
 MHgwMDsKICAgIGZpc1tpZHgrK10gPSBBVEFfQV80QklUOwoKICAgIGZpc1tp
 ZHgrK10gPSAweDAwOwogICAgZmlzW2lkeCsrXSA9IDB4MDA7CiAgICBmaXNb
 aWR4KytdID0gMHgwMDsKICAgIGZpc1tpZHgrK10gPSAweDAwOwogICAgcmV0
 dXJuIGlkeDsKfQoKCi8qCiAqIEFjYXJkIGNoaXBzZXQgc3VwcG9ydCBmdW5j
 dGlvbnMKICovCmludAphdGFfYWNhcmRfaWRlbnQoZGV2aWNlX3QgZGV2KQp7
 CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNl
 X2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lkICppZHg7
 CiAgICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0KICAgIHt7
 IEFUQV9BVFA4NTBSLCAwLCBBVFBPTEQsIDB4MDAsIEFUQV9VRE1BMiwgIkFU
 UDg1MCIgfSwKICAgICB7IEFUQV9BVFA4NjBBLCAwLCAwLCAgICAgIDB4MDAs
 IEFUQV9VRE1BNCwgIkFUUDg2MEEiIH0sCiAgICAgeyBBVEFfQVRQODYwUiwg
 MCwgMCwgICAgICAweDAwLCBBVEFfVURNQTQsICJBVFA4NjBSIiB9LAogICAg
 IHsgQVRBX0FUUDg2NUEsIDAsIDAsICAgICAgMHgwMCwgQVRBX1VETUE2LCAi
 QVRQODY1QSIgfSwKICAgICB7IEFUQV9BVFA4NjVSLCAwLCAwLCAgICAgIDB4
 MDAsIEFUQV9VRE1BNiwgIkFUUDg2NVIiIH0sCiAgICAgeyAwLCAwLCAwLCAw
 LCAwLCAwfX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlk
 eCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87
 CgogICAgc3ByaW50ZihidWZmZXIsICJBY2FyZCAlcyAlcyBjb250cm9sbGVy
 IiwKCSAgICBpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEp
 KTsKICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVmZmVyKTsKICAg
 IGN0bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9h
 Y2FyZF9jaGlwaW5pdDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0
 YV9hY2FyZF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVy
 biBFTlhJTzsKCiAgICBjdGxyLT5hbGxvY2F0ZSA9IGF0YV9hY2FyZF9hbGxv
 Y2F0ZTsKICAgIGlmIChjdGxyLT5jaGlwLT5jZmcxID09IEFUUE9MRCkgewoJ
 Y3Rsci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84NTBfc2V0bW9kZTsKCWN0bHIt
 PmxvY2tpbmcgPSBhdGFfc2VyaWFsaXplOwogICAgfQogICAgZWxzZQoJY3Rs
 ci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84Nlhfc2V0bW9kZTsKICAgIHJldHVy
 biAwOwp9CgpzdGF0aWMgaW50CmF0YV9hY2FyZF9hbGxvY2F0ZShkZXZpY2Vf
 dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldik7CgogICAgLyogc2V0dXAgdGhlIHVzdWFsIHJlZ2lz
 dGVyIG5vcm1hbCBwY2kgc3R5bGUgKi8KICAgIGlmIChhdGFfcGNpX2FsbG9j
 YXRlKGRldikpCglyZXR1cm4gRU5YSU87CgogICAgY2gtPmh3LnN0YXR1cyA9
 IGF0YV9hY2FyZF9zdGF0dXM7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu
 dAphdGFfYWNhcmRfc3RhdHVzKGRldmljZV90IGRldikKewogICAgc3RydWN0
 IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5u
 ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGlmIChjdGxy
 LT5jaGlwLT5jZmcxID09IEFUUE9MRCAmJgoJQVRBX0xPQ0tJTkcoY2gtPmRl
 diwgQVRBX0xGX1dISUNIKSAhPSBjaC0+dW5pdCkKCSAgICByZXR1cm4gMDsK
 ICAgIGlmIChjaC0+ZG1hICYmIChjaC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFf
 QUNUSVZFKSkgewoJaW50IGJtc3RhdCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFf
 Qk1TVEFUX1BPUlQpICYgQVRBX0JNU1RBVF9NQVNLOwoKCWlmICgoYm1zdGF0
 ICYgKEFUQV9CTVNUQVRfQUNUSVZFIHwgQVRBX0JNU1RBVF9JTlRFUlJVUFQp
 KSAhPQoJICAgIEFUQV9CTVNUQVRfSU5URVJSVVBUKQoJICAgIHJldHVybiAw
 OwoJQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIGJtc3RhdCAm
 IH5BVEFfQk1TVEFUX0VSUk9SKTsKCURFTEFZKDEpOwoJQVRBX0lEWF9PVVRC
 KGNoLCBBVEFfQk1DTURfUE9SVCwKCQkgICAgIEFUQV9JRFhfSU5CKGNoLCBB
 VEFfQk1DTURfUE9SVCkgJiB+QVRBX0JNQ01EX1NUQVJUX1NUT1ApOwoJREVM
 QVkoMSk7CiAgICB9CiAgICBpZiAoQVRBX0lEWF9JTkIoY2gsIEFUQV9BTFRT
 VEFUKSAmIEFUQV9TX0JVU1kpIHsKCURFTEFZKDEwMCk7CglpZiAoQVRBX0lE
 WF9JTkIoY2gsIEFUQV9BTFRTVEFUKSAmIEFUQV9TX0JVU1kpCgkgICAgcmV0
 dXJuIDA7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3RhdGljIHZvaWQKYXRh
 X2FjYXJkXzg1MF9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCnsK
 ICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAg
 c3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf
 c29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0g
 ZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAg
 IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFf
 REVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9kZSA9
 IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwKCQkJICBhdGFfYXRhcGkoZGV2
 KSA/IEFUQV9QSU9fTUFYIDogY3Rsci0+Y2hpcC0+bWF4X2RtYSk7CgogICAg
 LyogWFhYIFNPUyBtaXNzaW5nIFdETUEwKzEgKyBQSU8gbW9kZXMgKi8KICAg
 IGlmIChtb2RlID49IEFUQV9XRE1BMikgewoJZXJyb3IgPSBhdGFfY29udHJv
 bGNtZChkZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAs
 IG1vZGUpOwoJaWYgKGJvb3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYo
 ZGV2LCAiJXNzZXR0aW5nICVzIG9uICVzIGNoaXBcbiIsCgkJCSAgKGVycm9y
 KSA/ICJGQUlMVVJFICIgOiAiIiwKCQkJICBhdGFfbW9kZTJzdHIobW9kZSks
 IGN0bHItPmNoaXAtPnRleHQpOwoJaWYgKCFlcnJvcikgewoJICAgIHVfaW50
 OF90IHJlZzU0ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NTQsIDEp
 OwoJICAgIAoJICAgIHJlZzU0ICY9IH4oMHgwMyA8PCAoZGV2bm8gPDwgMSkp
 OwoJICAgIGlmIChtb2RlID49IEFUQV9VRE1BMCkKCQlyZWc1NCB8PSAoKCht
 b2RlICYgQVRBX01PREVfTUFTSykgKyAxKSA8PCAoZGV2bm8gPDwgMSkpOwoJ
 ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1NCwgcmVnNTQsIDEp
 OwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwgMHhhNiwg
 MSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQwICsgKGRl
 dm5vIDw8IDEpLCAweDAzMDEsIDIpOwoJICAgIGF0YWRldi0+bW9kZSA9IG1v
 ZGU7CgkgICAgcmV0dXJuOwoJfQogICAgfQogICAgLyogd2UgY291bGQgc2V0
 IFBJTyBtb2RlIHRpbWluZ3MsIGJ1dCB3ZSBhc3N1bWUgdGhlIEJJT1MgZGlk
 IHRoYXQgKi8KfQoKc3RhdGljIHZvaWQKYXRhX2FjYXJkXzg2WF9zZXRtb2Rl
 KGRldmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJl
 bnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVudCk7CiAg
 ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfZGV2aWNl
 ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgZGV2
 bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVWKGF0YWRldi0+dW5pdCk7
 CiAgICBpbnQgZXJyb3I7CgoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShk
 ZXYsIG1vZGUsCgkJCSAgYXRhX2F0YXBpKGRldikgPyBBVEFfUElPX01BWCA6
 IGN0bHItPmNoaXAtPm1heF9kbWEpOwoKICAgIG1vZGUgPSBhdGFfY2hlY2tf
 ODBwaW4oZGV2LCBtb2RlKTsKCiAgICAvKiBYWFggU09TIG1pc3NpbmcgV0RN
 QTArMSArIFBJTyBtb2RlcyAqLwogICAgaWYgKG1vZGUgPj0gQVRBX1dETUEy
 KSB7CgllcnJvciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRV
 UkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwgbW9kZSk7CglpZiAoYm9vdHZlcmJv
 c2UpCgkgICAgZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24g
 JXMgY2hpcFxuIiwKCQkJICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAoJ
 CQkgIGF0YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7Cglp
 ZiAoIWVycm9yKSB7CgkgICAgdV9pbnQxNl90IHJlZzQ0ID0gcGNpX3JlYWRf
 Y29uZmlnKGdwYXJlbnQsIDB4NDQsIDIpOwoJICAgIAoJICAgIHJlZzQ0ICY9
 IH4oMHgwMDBmIDw8IChkZXZubyA8PCAyKSk7CgkgICAgaWYgKG1vZGUgPj0g
 QVRBX1VETUEwKQoJCXJlZzQ0IHw9ICgoKG1vZGUgJiBBVEFfTU9ERV9NQVNL
 KSArIDEpIDw8IChkZXZubyA8PCAyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZp
 ZyhncGFyZW50LCAweDQ0LCByZWc0NCwgMik7CgkgICAgcGNpX3dyaXRlX2Nv
 bmZpZyhncGFyZW50LCAweDRhLCAweGE2LCAxKTsKCSAgICBwY2lfd3JpdGVf
 Y29uZmlnKGdwYXJlbnQsIDB4NDAgKyBkZXZubywgMHgzMSwgMSk7CgkgICAg
 YXRhZGV2LT5tb2RlID0gbW9kZTsKCSAgICByZXR1cm47Cgl9CiAgICB9CiAg
 ICAvKiB3ZSBjb3VsZCBzZXQgUElPIG1vZGUgdGltaW5ncywgYnV0IHdlIGFz
 c3VtZSB0aGUgQklPUyBkaWQgdGhhdCAqLwp9CgoKLyoKICogQWNlciBMYWJz
 IEluYyAoQUxJKSBjaGlwc2V0IHN1cHBvcnQgZnVuY3Rpb25zCiAqLwppbnQK
 YXRhX2FsaV9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf
 cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
 CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAgIHN0YXRpYyBzdHJ1
 Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRBX0FMSV81Mjg5LCAw
 eDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4OSIgfSwKICAgICB7
 IEFUQV9BTElfNTI4OCwgMHgwMCwgNCwgQUxJU0FUQSwgQVRBX1NBMzAwLCAi
 TTUyODgiIH0sCiAgICAgeyBBVEFfQUxJXzUyODcsIDB4MDAsIDQsIEFMSVNB
 VEEsIEFUQV9TQTE1MCwgIk01Mjg3IiB9LAogICAgIHsgQVRBX0FMSV81Mjgx
 LCAweDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4MSIgfSwKICAg
 ICB7IEFUQV9BTElfNTIyOSwgMHhjNSwgMCwgQUxJTkVXLCAgQVRBX1VETUE2
 LCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4YzQsIDAsIEFM
 SU5FVywgIEFUQV9VRE1BNSwgIk01MjI5IiB9LAogICAgIHsgQVRBX0FMSV81
 MjI5LCAweGMyLCAwLCBBTElORVcsICBBVEFfVURNQTQsICJNNTIyOSIgfSwK
 ICAgICB7IEFUQV9BTElfNTIyOSwgMHgyMCwgMCwgQUxJT0xELCAgQVRBX1VE
 TUEyLCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4MDAsIDAs
 IEFMSU9MRCwgIEFUQV9XRE1BMiwgIk01MjI5IiB9LAogICAgIHsgMCwgMCwg
 MCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRdOyAKCiAgICBpZiAo
 IShpZHggPSBhdGFfbWF0Y2hfY2hpcChkZXYsIGlkcykpKQoJcmV0dXJuIEVO
 WElPOwoKICAgIHNwcmludGYoYnVmZmVyLCAiQWNlckxhYnMgJXMgJXMgY29u
 dHJvbGxlciIsCgkgICAgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5t
 YXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZl
 cik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQg
 PSBhdGFfYWxpX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp
 bnQKYXRhX2FsaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVj
 dCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJl
 dHVybiBFTlhJTzsKCiAgICBzd2l0Y2ggKGN0bHItPmNoaXAtPmNmZzIpIHsK
 ICAgIGNhc2UgQUxJU0FUQToKCWN0bHItPmNoYW5uZWxzID0gY3Rsci0+Y2hp
 cC0+Y2ZnMTsKCWN0bHItPmFsbG9jYXRlID0gYXRhX2FsaV9zYXRhX2FsbG9j
 YXRlOwoJY3Rsci0+c2V0bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CgoJLyog
 aWYgd2UgaGF2ZSBhIG1lbW9yeSByZXNvdXJjZSB3ZSBjYW4gbGlrZWx5IGRv
 IEFIQ0kgKi8KCWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsKCWN0
 bHItPnJfcmlkMiA9IFBDSVJfQkFSKDUpOwoJaWYgKChjdGxyLT5yX3JlczIg
 PSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBlMiwK
 CQkJCQkJICAgJmN0bHItPnJfcmlkMiwgUkZfQUNUSVZFKSkpCgkgICAgcmV0
 dXJuIGF0YV9haGNpX2NoaXBpbml0KGRldik7CgoJLyogZW5hYmxlIFBDSSBp
 bnRlcnJ1cHQgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1B
 TkQsCgkJCSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIp
 ICYgfjB4MDQwMCwgMik7CglicmVhazsKCiAgICBjYXNlIEFMSU5FVzoKCS8q
 IHVzZSBkZXZpY2UgaW50ZXJydXB0IGFzIGJ5dGUgY291bnQgZW5kICovCglw
 Y2lfd3JpdGVfY29uZmlnKGRldiwgMHg0YSwgcGNpX3JlYWRfY29uZmlnKGRl
 diwgMHg0YSwgMSkgfCAweDIwLCAxKTsKCgkvKiBlbmFibGUgY2FibGUgZGV0
 ZWN0aW9uIGFuZCBVRE1BIHN1cHBvcnQgb24gbmV3ZXIgY2hpcHMgKi8KCXBj
 aV93cml0ZV9jb25maWcoZGV2LCAweDRiLCBwY2lfcmVhZF9jb25maWcoZGV2
 LCAweDRiLCAxKSB8IDB4MDksIDEpOwoKCS8qIGVuYWJsZSBBVEFQSSBVRE1B
 IG1vZGUgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDUzLCBwY2lfcmVh
 ZF9jb25maWcoZGV2LCAweDUzLCAxKSB8IDB4MDEsIDEpOwoKCS8qIG9ubHkg
 Y2hpcHMgd2l0aCByZXZpc2lvbiA+IDB4YzQgY2FuIGRvIDQ4Yml0IERNQSAq
 LwoJaWYgKGN0bHItPmNoaXAtPmNoaXByZXYgPD0gMHhjNCkKCSAgICBkZXZp
 Y2VfcHJpbnRmKGRldiwKCQkJICAidXNpbmcgUElPIHRyYW5zZmVycyBhYm92
 ZSAxMzdHQiBhcyB3b3JrYXJvdW5kIGZvciAiCgkJCSAgIjQ4Yml0IERNQSBh
 Y2Nlc3MgYnVnLCBleHBlY3QgcmVkdWNlZCBwZXJmb3JtYW5jZVxuIik7Cglj
 dGxyLT5hbGxvY2F0ZSA9IGF0YV9hbGlfYWxsb2NhdGU7CgljdGxyLT5yZXNl
 dCA9IGF0YV9hbGlfcmVzZXQ7CgljdGxyLT5zZXRtb2RlID0gYXRhX2FsaV9z
 ZXRtb2RlOwoJYnJlYWs7CgogICAgY2FzZSBBTElPTEQ6CgkvKiBkZWFjdGl2
 YXRlIHRoZSBBVEFQSSBGSUZPIGFuZCBlbmFibGUgQVRBUEkgVURNQSAqLwoJ
 cGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTMsIHBjaV9yZWFkX2NvbmZpZyhk
 ZXYsIDB4NTMsIDEpIHwgMHgwMywgMSk7CgljdGxyLT5zZXRtb2RlID0gYXRh
 X2FsaV9zZXRtb2RlOwoJYnJlYWs7CiAgICB9CiAgICByZXR1cm4gMDsKfQoK
 c3RhdGljIGludAphdGFfYWxpX2FsbG9jYXRlKGRldmljZV90IGRldikKewog
 ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg
 IC8qIHNldHVwIHRoZSB1c3VhbCByZWdpc3RlciBub3JtYWwgcGNpIHN0eWxl
 ICovCiAgICBpZiAoYXRhX3BjaV9hbGxvY2F0ZShkZXYpKQoJcmV0dXJuIEVO
 WElPOwoKICAgIC8qIG9sZGVyIGNoaXBzIGNhbid0IGRvIDQ4Yml0IERNQSB0
 cmFuc2ZlcnMgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jaGlwcmV2IDw9IDB4
 YzQpCgljaC0+ZmxhZ3MgfD0gQVRBX05PXzQ4QklUX0RNQTsKCiAgICByZXR1
 cm4gMDsKfQoKc3RhdGljIGludAphdGFfYWxpX3NhdGFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KQp7CiAgICBkZXZpY2VfdCBwYXJlbnQgPSBkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq
 Y3RsciA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKICAgIHN0cnVjdCBh
 dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBz
 dHJ1Y3QgcmVzb3VyY2UgKmlvID0gTlVMTCwgKmN0bGlvID0gTlVMTDsKICAg
 IGludCB1bml0MDEgPSAoY2gtPnVuaXQgJiAxKSwgdW5pdDEwID0gKGNoLT51
 bml0ICYgMik7CiAgICBpbnQgaSwgcmlkOwoJCQogICAgcmlkID0gUENJUl9C
 QVIoMCkgKyAodW5pdDAxID8gOCA6IDApOwogICAgaW8gPSBidXNfYWxsb2Nf
 cmVzb3VyY2VfYW55KHBhcmVudCwgU1lTX1JFU19JT1BPUlQsICZyaWQsIFJG
 X0FDVElWRSk7CiAgICBpZiAoIWlvKQoJcmV0dXJuIEVOWElPOwoKICAgIHJp
 ZCA9IFBDSVJfQkFSKDEpICsgKHVuaXQwMSA/IDggOiAwKTsKICAgIGN0bGlv
 ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShwYXJlbnQsIFNZU19SRVNfSU9Q
 T1JULCAmcmlkLCBSRl9BQ1RJVkUpOwogICAgaWYgKCFjdGxpbykgewoJYnVz
 X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwgQVRBX0lP
 QUREUl9SSUQsIGlvKTsKCXJldHVybiBFTlhJTzsKICAgIH0KCQkKICAgIGZv
 ciAoaSA9IEFUQV9EQVRBOyBpIDw9IEFUQV9DT01NQU5EOyBpICsrKSB7Cglj
 aC0+cl9pb1tpXS5yZXMgPSBpbzsKCWNoLT5yX2lvW2ldLm9mZnNldCA9IGkg
 KyAodW5pdDEwID8gOCA6IDApOwogICAgfQogICAgY2gtPnJfaW9bQVRBX0NP
 TlRST0xdLnJlcyA9IGN0bGlvOwogICAgY2gtPnJfaW9bQVRBX0NPTlRST0xd
 Lm9mZnNldCA9IDIgKyAodW5pdDEwID8gNCA6IDApOwogICAgY2gtPnJfaW9b
 QVRBX0lEWF9BRERSXS5yZXMgPSBpbzsKICAgIGF0YV9kZWZhdWx0X3JlZ2lz
 dGVycyhkZXYpOwogICAgaWYgKGN0bHItPnJfcmVzMSkgewoJZm9yIChpID0g
 QVRBX0JNQ01EX1BPUlQ7IGkgPD0gQVRBX0JNRFRQX1BPUlQ7IGkrKykgewoJ
 ICAgIGNoLT5yX2lvW2ldLnJlcyA9IGN0bHItPnJfcmVzMTsKCSAgICBjaC0+
 cl9pb1tpXS5vZmZzZXQgPSAoaSAtIEFUQV9CTUNNRF9QT1JUKSsoY2gtPnVu
 aXQgKiBBVEFfQk1JT1NJWkUpOwoJfQogICAgfQogICAgY2gtPmZsYWdzIHw9
 IEFUQV9OT19TTEFWRTsKCiAgICAvKiBYWFggU09TIFBIWSBoYW5kbGluZyBh
 d2t3YXJkIGluIEFMSSBjaGlwIG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAgICBh
 dGFfcGNpX2h3KGRldik7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQK
 YXRhX2FsaV9yZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf
 cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmlj
 ZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpj
 aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGRldmljZV90ICpjaGls
 ZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7CgogICAgYXRhX2dlbmVyaWNf
 cmVzZXQoZGV2KTsKCiAgICAvKgogICAgICogd29ya2Fyb3VuZCBmb3IgZGF0
 YWNvcnJ1cHRpb24gYnVnIGZvdW5kIG9uIGF0IGxlYXN0IFNVTiBCbGFkZS0x
 MDAKICAgICAqIGZpbmQgdGhlIElTQSBmdW5jdGlvbiBvbiB0aGUgc291dGhi
 cmlkZ2UgYW5kIGRpc2FibGUgdGhlbiBlbmFibGUKICAgICAqIHRoZSBBVEEg
 Y2hhbm5lbCB0cmlzdGF0ZSBidWZmZXIKICAgICAqLwogICAgaWYgKGN0bHIt
 PmNoaXAtPmNoaXByZXYgPT0gMHhjMyB8fCBjdGxyLT5jaGlwLT5jaGlwcmV2
 ID09IDB4YzIpIHsKCWlmICghZGV2aWNlX2dldF9jaGlsZHJlbihHUkFORFBB
 UkVOVChkZXYpLCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CgkgICAgZm9y
 IChpID0gMDsgaSA8IG5jaGlsZHJlbjsgaSsrKSB7CgkJaWYgKHBjaV9nZXRf
 ZGV2aWQoY2hpbGRyZW5baV0pID09IEFUQV9BTElfMTUzMykgewoJCSAgICBw
 Y2lfd3JpdGVfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAg
 cGNpX3JlYWRfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSAmCgkJCQkg
 ICAgIH4oMHgwNCA8PCBjaC0+dW5pdCksIDEpOwoJCSAgICBwY2lfd3JpdGVf
 Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAgcGNpX3JlYWRf
 Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSB8CgkJCQkgICAgICgweDA0
 IDw8IGNoLT51bml0KSwgMSk7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9Cgkg
 ICAgZnJlZShjaGlsZHJlbiwgTV9URU1QKTsKCX0KICAgIH0KfQoKc3RhdGlj
 IHZvaWQKYXRhX2FsaV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUp
 CnsKICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwog
 ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
 ZXRfc29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK
 ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBB
 VEFfREVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9k
 ZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4
 X2RtYSk7CgogICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBBTElORVcpIHsK
 CWlmIChtb2RlID4gQVRBX1VETUEyICYmCgkgICAgcGNpX3JlYWRfY29uZmln
 KGdwYXJlbnQsIDB4NGEsIDEpICYgKDEgPDwgY2gtPnVuaXQpKSB7CgkgICAg
 YXRhX3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsKCSAgICBtb2Rl
 ID0gQVRBX1VETUEyOwoJfQogICAgfQogICAgZWxzZQoJbW9kZSA9IGF0YV9j
 aGVja184MHBpbihkZXYsIG1vZGUpOwoKICAgIGlmIChjdGxyLT5jaGlwLT5j
 ZmcyICYgQUxJT0xEKSB7CgkvKiBkb2Vzbid0IHN1cHBvcnQgQVRBUEkgRE1B
 IG9uIHdyaXRlICovCgljaC0+ZmxhZ3MgfD0gQVRBX0FUQVBJX0RNQV9STzsK
 CWlmIChjaC0+ZGV2aWNlcyAmIEFUQV9BVEFQSV9NQVNURVIgJiYgY2gtPmRl
 dmljZXMgJiBBVEFfQVRBUElfU0xBVkUpIHsKCSAgICAvKiBkb2Vzbid0IHN1
 cHBvcnQgQVRBUEkgRE1BIG9uIHR3byBBVEFQSSBkZXZpY2VzICovCgkgICAg
 ZGV2aWNlX3ByaW50ZihkZXYsICJ0d28gYXRhcGkgZGV2aWNlcyBvbiB0aGlz
 IGNoYW5uZWwsIG5vIERNQVxuIik7CgkgICAgbW9kZSA9IGF0YV9saW1pdF9t
 b2RlKGRldiwgbW9kZSwgQVRBX1BJT19NQVgpOwoJfQogICAgfQoKICAgIGVy
 cm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFU
 QV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKCiAgICBpZiAoYm9vdHZlcmJvc2Up
 CglkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlw
 XG4iLAoJCSAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsIAoJCSAgIGF0
 YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7CiAgICBpZiAo
 IWVycm9yKSB7CglpZiAobW9kZSA+PSBBVEFfVURNQTApIHsKCSAgICB1X2lu
 dDhfdCB1ZG1hW10gPSB7MHgwYywgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwg
 MHgwZiwgMHgwZH07CgkgICAgdV9pbnQzMl90IHdvcmQ1NCA9IHBjaV9yZWFk
 X2NvbmZpZyhncGFyZW50LCAweDU0LCA0KTsKCgkgICAgd29yZDU0ICY9IH4o
 MHgwMDBmMDAwZiA8PCAoZGV2bm8gPDwgMikpOwoJICAgIHdvcmQ1NCB8PSAo
 KCh1ZG1hW21vZGUmQVRBX01PREVfTUFTS108PDE2KXwweDA1KTw8KGRldm5v
 PDwyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDU0LCB3
 b3JkNTQsIDQpOwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1
 OCArIChjaC0+dW5pdCA8PCAyKSwKCQkJICAgICAweDAwMzEwMDAxLCA0KTsK
 CX0KCWVsc2UgewoJICAgIHVfaW50MzJfdCBwaW90aW1pbmdzW10gPQoJCXsg
 MHgwMDZkMDAwMywgMHgwMDU4MDAwMiwgMHgwMDQ0MDAwMSwgMHgwMDMzMDAw
 MSwKCQkgIDB4MDAzMTAwMDEsIDB4MDA0NDAwMDEsIDB4MDAzMzAwMDEsIDB4
 MDAzMTAwMDF9OwoKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4
 NTQsIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDU0LCA0KSAmCgkJCQkJ
 ICAgIH4oMHgwMDA4MDAwZiA8PCAoZGV2bm8gPDwgMikpLCA0KTsKCSAgICBw
 Y2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTggKyAoY2gtPnVuaXQgPDwg
 MiksCgkJCSAgICAgcGlvdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldLCA0
 KTsKCX0KCWF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBB
 bWVyaWNhbiBNaWNybyBEZXZpY2VzIChBTUQpIGNoaXBzZXQgc3VwcG9ydCBm
 dW5jdGlvbnMKICovCmludAphdGFfYW1kX2lkZW50KGRldmljZV90IGRldikK
 ewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFfY2hpcF9pZCAqaWR4
 OwogICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9CiAgICB7
 eyBBVEFfQU1ENzU2LCAgMHgwMCwgQU1ETlZJRElBLCAweDAwLCAgICAgICAg
 ICAgIEFUQV9VRE1BNCwgIjc1NiIgfSwKICAgICB7IEFUQV9BTUQ3NjYsICAw
 eDAwLCBBTUROVklESUEsIEFNRENBQkxFfEFNREJVRywgQVRBX1VETUE1LCAi
 NzY2IiB9LAogICAgIHsgQVRBX0FNRDc2OCwgIDB4MDAsIEFNRE5WSURJQSwg
 QU1EQ0FCTEUsICAgICAgICBBVEFfVURNQTUsICI3NjgiIH0sCiAgICAgeyBB
 VEFfQU1EODExMSwgMHgwMCwgQU1ETlZJRElBLCBBTURDQUJMRSwgICAgICAg
 IEFUQV9VRE1BNiwgIjgxMTEiIH0sCiAgICAgeyAwLCAwLCAwLCAwLCAwLCAw
 fX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlkeCA9IGF0
 YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87CgogICAg
 c3ByaW50ZihidWZmZXIsICJBTUQgJXMgJXMgY29udHJvbGxlciIsCgkgICAg
 aWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5tYXhfZG1hKSk7CiAgICBk
 ZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZlcik7CiAgICBjdGxyLT5j
 aGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfYW1kX2NoaXBp
 bml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2FtZF9jaGlw
 aW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy
 b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYg
 KGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAg
 ICAvKiBkaXNhYmxlL3NldCBwcmVmZXRjaCwgcG9zdHdyaXRlICovCiAgICBp
 ZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIEFNREJVRykKCXBjaV93cml0ZV9jb25m
 aWcoZGV2LCAweDQxLCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDQxLCAxKSAm
 IDB4MGYsIDEpOwogICAgZWxzZQoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4
 NDEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEsIDEpIHwgMHhmMCwgMSk7
 CgogICAgY3Rsci0+c2V0bW9kZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7
Comment 1 Mark Linimon freebsd_committer freebsd_triage 2007-08-15 02:22:36 UTC
State Changed
From-To: open->closed

Misfiled followup to kern/114473; content migrated. 


Comment 2 Mark Linimon freebsd_committer freebsd_triage 2007-08-15 02:22:36 UTC
Responsible Changed
From-To: gnats-admin->linimon
Comment 3 Andriy Podanenko 2007-08-15 08:29:07 UTC
Sorry for the bad encoding
to avoid duplication please get files from  =

http://www.freebsd.org/cgi/query-pr.cgi?pr=3D114473

-- =

----------------
Andriy Podanenko
-podarok-
PAK-UANIC
ICQ 1400213	=

YahooIM podarok_ua
MSN podarok_
Jabber podarok@jabber.org
AIM podarokua