Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 02 Apr 2008 09:49:05 +0300
From:      Alexander Shulikov <shulikov@i.ua>
To:        freebsd-ipfw@freebsd.org
Subject:   dummynet panics after 6.2 (kern/121955)
Message-ID:  <E1JgwmP-0004UL-Eo@web06.mi6.kiev.ua>

next in thread | raw e-mail | index | archive | help
--8323328-408138819-1207118945=:31340
Content-Type: TEXT/PLAIN; CHARSET=windows-1251
Content-Transfer-Encoding: QUOTED-PRINTABLE

See bug: kern/121955

I have received panics with the same configuration of ipfw and dummynet in =
6.3, 7.0-RELEASE, 7.0-STABLE.
But I don't received it in 6.2.
In all panics was corrupted stack.
I use mpd-5.0 for pptp connections and shape traffic with ng_car or dummyne=
t for different clients.
In 7.0-STABLE on netgraph was added patches, that decreasing using stack by=
 netgraph. And when I updated from 7.0-RELEASE to 7.0-STABLE, I received pa=
nic rare. Not after 3-5 minutes, but after minimum 3 hours, maximum 2,5 day=
s.

I saw cvsweb, and ip_dummynet in 6.2 and in 6.3.
Between it's two releases was done next changes:

Revision 1.93.2.6: download - view: text, markup, annotated - select for di=
ffs
Wed Mar 21 17:25:15 2007 UTC (12 months, 1 week ago) by oleg
Branches: RELENG_6
CVS tags: RELENG_6_3_BP, RELENG_6_3_0_RELEASE, RELENG_6_3
Diff to: previous 1.93.2.5: preferred, colored; branchpoint 1.93: preferred=
, colored; next MAIN 1.94: preferred, colored
Changes since revision 1.93.2.5: +481 -375 lines

MFC rev. 1.102-1.105

- style(9) cleanup
- Use separate thread for servicing dummynet(4).
Utilize taskqueue(9) API.
- Convert
net.inet.ip.dummynet.curr_time
net.inet.ip.dummynet.searches
net.inet.ip.dummynet.search_steps
to SYSCTL_LONG nodes. It will prevent frequent wrap around on 64bit archs.
- Implement simple mechanics for dummynet(4) internal time correction.
Under certain circumstances (system high load, dummynet lock contention, et=
c)
dummynet's tick counter can be significantly slower than it should be.
(I've observed up to 25% difference on one of my production servers).
Since this counter used for packet scheduling, it's accuracy is vital for
precise bandwidth limitation.

Introduce new sysctl nodes:
net.inet.ip.dummynet.
tick_lost - number of ticks coalesced by taskqueue thread.
tick_adjustment - number of time corrections done.
tick_diff - adjusted vs non-adjusted tick counter difference
tick_delta - last vs 'standard' tick differnece (usec).
tick_delta_sum - accumulated (and not corrected yet) time
difference (usec).
- Use non-recursive mutex. MTX_RECURSE is unnecessary since rev. 1.70
- Pay respect to net.isr.direct: use netisr_dispatch() instead of ip_input(=
)
- purge_flow_set():
Do not leak memory while purging queues which are not bound to pipe.

Diff between files see in file.

After this changes (that mfced from 1.102-1.105) system became working unst=
able.
I think, that it's changes must be rereaded, because panics on my server wi=
th 6.3 or 7.0, 7.0-STABLE don't repeated in 6.2 with same configuration.

Last panics was:
# kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.11
kgdb: kvm_nlist(_stopped_cpus):
kgdb: kvm_nlist(_stoppcbs):
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:=
 Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you ar=
e
welcome to change it and/or distribute copies of it under certain condition=
s.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address   =3D 0xf2a9864
fault code              =3D supervisor read, page not present
instruction pointer     =3D 0x20:0xc3f96a9f
stack pointer           =3D 0x28:0xe4614a88
frame pointer           =3D 0x28:0xe4614b7c
code segment            =3D base 0x0, limit 0xfffff, type 0x1b
                        =3D DPL 0, pres 1, def32 1, gran 1
processor eflags        =3D interrupt enabled, resume, IOPL =3D 0
current process         =3D 40 (dummynet)
trap number             =3D 12
panic: page fault
Uptime: 3h55m10s
Physical memory: 1015 MB
Dumping 173 MB: 158 142 126 110 94 78 62 46 30 14

#0  doadump () at pcpu.h:195
195     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4=
09
#2  0xc056ddef in panic (fmt=3DVariable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3  0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D254449764) at /usr/=
src/sys/i386/i386/trap.c:899
#4  0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D2544=
49764) at /usr/src/sys/i386/i386/trap.c:812
#5  0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.=
c:490
#6  0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc3f96a9f in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)

# kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.10
kgdb: kvm_nlist(_stopped_cpus):
kgdb: kvm_nlist(_stoppcbs):
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:=
 Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you ar=
e
welcome to change it and/or distribute copies of it under certain condition=
s.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address   =3D 0xcd
fault code              =3D supervisor read, page not present
instruction pointer     =3D 0x20:0xc3f8ba9f
stack pointer           =3D 0x28:0xe4614a88
frame pointer           =3D 0x28:0xe4614b7c
code segment            =3D base 0x0, limit 0xfffff, type 0x1b
                        =3D DPL 0, pres 1, def32 1, gran 1
processor eflags        =3D interrupt enabled, resume, IOPL =3D 0
current process         =3D 40 (dummynet)
trap number             =3D 12
panic: page fault
Uptime: 3h21m49s
Physical memory: 1015 MB
Dumping 171 MB: 156 140 124 108 92 76 60 44 28 12

#0  doadump () at pcpu.h:195
195     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4=
09
#2  0xc056ddef in panic (fmt=3DVariable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3  0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D205) at /usr/src/sy=
s/i386/i386/trap.c:899
#4  0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D205)=
 at /usr/src/sys/i386/i386/trap.c:812
#5  0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.=
c:490
#6  0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc3f8ba9f in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)

# kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.9
kgdb: kvm_nlist(_stopped_cpus):
kgdb: kvm_nlist(_stoppcbs):
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:=
 Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you ar=
e
welcome to change it and/or distribute copies of it under certain condition=
s.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address   =3D 0xf4
fault code              =3D supervisor read, page not present
instruction pointer     =3D 0x20:0xc3f8ca9f
stack pointer           =3D 0x28:0xe4614a88
frame pointer           =3D 0x28:0xe4614b7c
code segment            =3D base 0x0, limit 0xfffff, type 0x1b
                        =3D DPL 0, pres 1, def32 1, gran 1
processor eflags        =3D interrupt enabled, resume, IOPL =3D 0
current process         =3D 40 (dummynet)
trap number             =3D 12
panic: page fault
Uptime: 2d19h13m24s
Physical memory: 1015 MB
Dumping 199 MB: 184 168 152 136 120 104 88 72 56 40 24 8

#0  doadump () at pcpu.h:195
195     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4=
09
#2  0xc056ddef in panic (fmt=3DVariable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3  0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D244) at /usr/src/sy=
s/i386/i386/trap.c:899
#4  0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D244)=
 at /usr/src/sys/i386/i386/trap.c:812
#5  0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.=
c:490
#6  0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc3f8ca9f in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)

# kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.8
kgdb: kvm_nlist(_stopped_cpus):
kgdb: kvm_nlist(_stoppcbs):
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:=
 Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you ar=
e
welcome to change it and/or distribute copies of it under certain condition=
s.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address   =3D 0xc2
fault code              =3D supervisor read, page not present
instruction pointer     =3D 0x20:0xc3f93a9f
stack pointer           =3D 0x28:0xe4614a88
frame pointer           =3D 0x28:0xe4614b7c
code segment            =3D base 0x0, limit 0xfffff, type 0x1b
                        =3D DPL 0, pres 1, def32 1, gran 1
processor eflags        =3D interrupt enabled, resume, IOPL =3D 0
current process         =3D 40 (dummynet)
trap number             =3D 12
panic: page fault
Uptime: 11h35m35s
Physical memory: 1015 MB
Dumping 217 MB: 202 186 170 154 138 122 106 90 74 58 42 26 10

#0  doadump () at pcpu.h:195
195     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4=
09
#2  0xc056ddef in panic (fmt=3DVariable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3  0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D194) at /usr/src/sy=
s/i386/i386/trap.c:899
#4  0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D194)=
 at /usr/src/sys/i386/i386/trap.c:812
#5  0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.=
c:490
#6  0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc3f93a9f in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)

# kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.7
kgdb: kvm_nlist(_stopped_cpus):
kgdb: kvm_nlist(_stoppcbs):
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:=
 Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you ar=
e
welcome to change it and/or distribute copies of it under certain condition=
s.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address   =3D 0xef
fault code              =3D supervisor read, page not present
instruction pointer     =3D 0x20:0xc3f85a9f
stack pointer           =3D 0x28:0xe4614a88
frame pointer           =3D 0x28:0xe4614b7c
code segment            =3D base 0x0, limit 0xfffff, type 0x1b
                        =3D DPL 0, pres 1, def32 1, gran 1
processor eflags        =3D interrupt enabled, resume, IOPL =3D 0
current process         =3D 40 (dummynet)
trap number             =3D 12
panic: page fault
Uptime: 1d1h54m1s
Physical memory: 1015 MB
Dumping 227 MB: 212 196 180 164 148 132 116 100 84 68 52 36 20 4

#0  doadump () at pcpu.h:195
195     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4=
09
#2  0xc056ddef in panic (fmt=3DVariable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:563
#3  0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D239) at /usr/src/sy=
s/i386/i386/trap.c:899
#4  0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D239)=
 at /usr/src/sys/i386/i386/trap.c:812
#5  0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.=
c:490
#6  0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc3f85a9f in ?? ()
Previous frame inner to this frame (corrupt stack?)
(kgdb)




My sysctl.conf:
# cat /etc/sysctl.conf
net.inet.ip.fw.autoinc_step=3D1
net.inet.ip.intr_queue_maxlen=3D256
net.inet.ip.dummynet.hash_size=3D16384
net.inet.ip.fw.dyn_buckets=3D1024
net.inet.ip.fastforwarding=3D1
kern.ipc.somaxconn=3D2048
kern.ipc.nmbclusters=3D32768
net.inet.tcp.recvspace=3D65536
net.inet.tcp.sendspace=3D131072
net.inet.ip.fw.one_pass=3D0


Between panic I try change variables:
net.inet.ip.fw.one_pass to 1, but panic repetated after this

My system now:
FreeBSD myhost.mydom 7.0-STABLE FreeBSD 7.0-STABLE #0: Wed Mar 26 07:56:32 =
EET 2008     root@myhost.mydom:/usr/obj/usr/src/sys/myhost  i386

-- =F0=E5=EA=EB=E0=EC=E0 --------------------------------------------------=
---------
http://FREEhost.com.ua - =E4=EE=F1=F2=F3=EF=ED=FB=E9 =F5=EE=F1=F2=E8=ED=E3,=
 =E4=EE=EC=E5=ED =E2 =EF=EE=E4=E0=F0=EE=EA
--8323328-408138819-1207118945=:31340
Content-Type: TEXT/x-patch; name=ip_dummynet.c.diff
Content-Transfer-Encoding: BASE64
Content-Disposition: attachment; filename=ip_dummynet.c.diff

LS0tIGlwX2R1bW15bmV0LmMJU2F0IEp1bCAyOSAxMToyNDoxMiAyMDA2Cisr
KyBpcF9kdW1teW5ldC5jLjYuMy5jCUZyaSBKYW4gMTggMjI6NTA6NTUgMjAw
OApAQCAtMjQsNyArMjQsNyBAQAogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgogICogU1VDSCBEQU1BR0UuCiAgKgotICogJEZyZWVCU0Q6IHNyYy9z
eXMvbmV0aW5ldC9pcF9kdW1teW5ldC5jLHYgMS45My4yLjUgMjAwNi8wNy8y
OSAwODoyNDoxMiBvbGVnIEV4cCAkCisgKiAkRnJlZUJTRDogc3JjL3N5cy9u
ZXRpbmV0L2lwX2R1bW15bmV0LmMsdiAxLjkzLjIuNiAyMDA3LzAzLzIxIDE3
OjI1OjE1IG9sZWcgRXhwICQKICAqLwogCiAjZGVmaW5lCURVTU1ZTkVUX0RF
QlVHCkBAIC02Niw3ICs2Niw5IEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldHZh
ci5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3N5
c2N0bC5oPgorI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4KICNpbmNsdWRl
IDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0aXNyLmg+CiAjaW5jbHVk
ZSA8bmV0L3JvdXRlLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2lu
Y2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KQEAgLTkxLDcgKzkzLDcgQEAK
IHN0YXRpYyBpbnQgZG5faGFzaF9zaXplID0gNjQgOwkvKiBkZWZhdWx0IGhh
c2ggc2l6ZSAqLwogCiAvKiBzdGF0aXN0aWNzIG9uIG51bWJlciBvZiBxdWV1
ZSBzZWFyY2hlcyBhbmQgc2VhcmNoIHN0ZXBzICovCi1zdGF0aWMgaW50IHNl
YXJjaGVzLCBzZWFyY2hfc3RlcHMgOworc3RhdGljIGxvbmcgc2VhcmNoZXMs
IHNlYXJjaF9zdGVwcyA7CiBzdGF0aWMgaW50IHBpcGVfZXhwaXJlID0gMSA7
ICAgLyogZXhwaXJlIHF1ZXVlIGlmIGVtcHR5ICovCiBzdGF0aWMgaW50IGRu
X21heF9yYXRpbyA9IDE2IDsgLyogbWF4IHF1ZXVlcy9idWNrZXRzIHJhdGlv
ICovCiAKQEAgLTk5LDYgKzEwMSwxNSBAQAogc3RhdGljIGludCByZWRfYXZn
X3BrdF9zaXplID0gNTEyOyAgICAgIC8qIFJFRCAtIGRlZmF1bHQgbWVkaXVt
IHBhY2tldCBzaXplICovCiBzdGF0aWMgaW50IHJlZF9tYXhfcGt0X3NpemUg
PSAxNTAwOyAgICAgLyogUkVEIC0gZGVmYXVsdCBtYXggcGFja2V0IHNpemUg
Ki8KIAorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByZXZfdCwgdDsKK3N0YXRp
YyBsb25nIHRpY2tfbGFzdDsJCQkvKiBMYXN0IHRpY2sgZHVyYXRpb24gKHVz
ZWMpLiAqLworc3RhdGljIGxvbmcgdGlja19kZWx0YTsJCQkvKiBMYXN0IHZz
IHN0YW5kYXJkIHRpY2sgZGlmZiAodXNlYykuICovCitzdGF0aWMgbG9uZyB0
aWNrX2RlbHRhX3N1bTsJCS8qIEFjY3VtdWxhdGVkIHRpY2sgZGlmZmVyZW5j
ZSAodXNlYykuKi8KK3N0YXRpYyBsb25nIHRpY2tfYWRqdXN0bWVudDsJCS8q
IFRpY2sgYWRqdXN0bWVudHMgZG9uZS4gKi8KK3N0YXRpYyBsb25nIHRpY2tf
bG9zdDsJCQkvKiBMb3N0KGNvYWxlc2NlZCkgdGlja3MgbnVtYmVyLiAqLwor
LyogQWRqdXN0ZWQgdnMgbm9uLWFkanVzdGVkIGN1cnJfdGltZSBkaWZmZXJl
bmNlICh0aWNrcykuICovCitzdGF0aWMgbG9uZyB0aWNrX2RpZmY7CisKIC8q
CiAgKiBUaHJlZSBoZWFwcyBjb250YWluIHF1ZXVlcyBhbmQgcGlwZXMgdGhh
dCB0aGUgc2NoZWR1bGVyIGhhbmRsZXM6CiAgKgpAQCAtMTM0LDMxICsxNDUs
NDIgQEAKIGV4dGVybgl2b2lkICgqYnJpZGdlX2RuX3ApKHN0cnVjdCBtYnVm
ICosIHN0cnVjdCBpZm5ldCAqKTsKIAogI2lmZGVmIFNZU0NUTF9OT0RFCi1T
WVNDVExfTk9ERShfbmV0X2luZXRfaXAsIE9JRF9BVVRPLCBkdW1teW5ldCwK
LQkJQ1RMRkxBR19SVywgMCwgIkR1bW15bmV0Iik7CitTWVNDVExfTk9ERShf
bmV0X2luZXRfaXAsIE9JRF9BVVRPLCBkdW1teW5ldCwgQ1RMRkxBR19SVywg
MCwgIkR1bW15bmV0Iik7CiBTWVNDVExfSU5UKF9uZXRfaW5ldF9pcF9kdW1t
eW5ldCwgT0lEX0FVVE8sIGhhc2hfc2l6ZSwKLQkgICAgQ1RMRkxBR19SVywg
JmRuX2hhc2hfc2l6ZSwgMCwgIkRlZmF1bHQgaGFzaCB0YWJsZSBzaXplIik7
Ci1TWVNDVExfSU5UKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lEX0FVVE8s
IGN1cnJfdGltZSwKLQkgICAgQ1RMRkxBR19SRCwgJmN1cnJfdGltZSwgMCwg
IkN1cnJlbnQgdGljayIpOworICAgIENUTEZMQUdfUlcsICZkbl9oYXNoX3Np
emUsIDAsICJEZWZhdWx0IGhhc2ggdGFibGUgc2l6ZSIpOworU1lTQ1RMX0xP
TkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVUTywgY3Vycl90aW1l
LAorICAgIENUTEZMQUdfUkQsICZjdXJyX3RpbWUsIDAsICJDdXJyZW50IHRp
Y2siKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf
QVVUTywgcmVhZHlfaGVhcCwKLQkgICAgQ1RMRkxBR19SRCwgJnJlYWR5X2hl
YXAuc2l6ZSwgMCwgIlNpemUgb2YgcmVhZHkgaGVhcCIpOworICAgIENUTEZM
QUdfUkQsICZyZWFkeV9oZWFwLnNpemUsIDAsICJTaXplIG9mIHJlYWR5IGhl
YXAiKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf
QVVUTywgZXh0cmFjdF9oZWFwLAotCSAgICBDVExGTEFHX1JELCAmZXh0cmFj
dF9oZWFwLnNpemUsIDAsICJTaXplIG9mIGV4dHJhY3QgaGVhcCIpOwotU1lT
Q1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCBzZWFy
Y2hlcywKLQkgICAgQ1RMRkxBR19SRCwgJnNlYXJjaGVzLCAwLCAiTnVtYmVy
IG9mIHF1ZXVlIHNlYXJjaGVzIik7Ci1TWVNDVExfSU5UKF9uZXRfaW5ldF9p
cF9kdW1teW5ldCwgT0lEX0FVVE8sIHNlYXJjaF9zdGVwcywKLQkgICAgQ1RM
RkxBR19SRCwgJnNlYXJjaF9zdGVwcywgMCwgIk51bWJlciBvZiBxdWV1ZSBz
ZWFyY2ggc3RlcHMiKTsKKyAgICBDVExGTEFHX1JELCAmZXh0cmFjdF9oZWFw
LnNpemUsIDAsICJTaXplIG9mIGV4dHJhY3QgaGVhcCIpOworU1lTQ1RMX0xP
TkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVUTywgc2VhcmNoZXMs
CisgICAgQ1RMRkxBR19SRCwgJnNlYXJjaGVzLCAwLCAiTnVtYmVyIG9mIHF1
ZXVlIHNlYXJjaGVzIik7CitTWVNDVExfTE9ORyhfbmV0X2luZXRfaXBfZHVt
bXluZXQsIE9JRF9BVVRPLCBzZWFyY2hfc3RlcHMsCisgICAgQ1RMRkxBR19S
RCwgJnNlYXJjaF9zdGVwcywgMCwgIk51bWJlciBvZiBxdWV1ZSBzZWFyY2gg
c3RlcHMiKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBP
SURfQVVUTywgZXhwaXJlLAotCSAgICBDVExGTEFHX1JXLCAmcGlwZV9leHBp
cmUsIDAsICJFeHBpcmUgcXVldWUgaWYgZW1wdHkiKTsKKyAgICBDVExGTEFH
X1JXLCAmcGlwZV9leHBpcmUsIDAsICJFeHBpcmUgcXVldWUgaWYgZW1wdHki
KTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVU
TywgbWF4X2NoYWluX2xlbiwKLQkgICAgQ1RMRkxBR19SVywgJmRuX21heF9y
YXRpbywgMCwKLQkiTWF4IHJhdGlvIGJldHdlZW4gZHluYW1pYyBxdWV1ZXMg
YW5kIGJ1Y2tldHMiKTsKKyAgICBDVExGTEFHX1JXLCAmZG5fbWF4X3JhdGlv
LCAwLAorICAgICJNYXggcmF0aW8gYmV0d2VlbiBkeW5hbWljIHF1ZXVlcyBh
bmQgYnVja2V0cyIpOwogU1lTQ1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXlu
ZXQsIE9JRF9BVVRPLCByZWRfbG9va3VwX2RlcHRoLAotCUNUTEZMQUdfUkQs
ICZyZWRfbG9va3VwX2RlcHRoLCAwLCAiRGVwdGggb2YgUkVEIGxvb2t1cCB0
YWJsZSIpOworICAgIENUTEZMQUdfUkQsICZyZWRfbG9va3VwX2RlcHRoLCAw
LCAiRGVwdGggb2YgUkVEIGxvb2t1cCB0YWJsZSIpOwogU1lTQ1RMX0lOVChf
bmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCByZWRfYXZnX3BrdF9z
aXplLAotCUNUTEZMQUdfUkQsICZyZWRfYXZnX3BrdF9zaXplLCAwLCAiUkVE
IE1lZGl1bSBwYWNrZXQgc2l6ZSIpOworICAgIENUTEZMQUdfUkQsICZyZWRf
YXZnX3BrdF9zaXplLCAwLCAiUkVEIE1lZGl1bSBwYWNrZXQgc2l6ZSIpOwog
U1lTQ1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCBy
ZWRfbWF4X3BrdF9zaXplLAotCUNUTEZMQUdfUkQsICZyZWRfbWF4X3BrdF9z
aXplLCAwLCAiUkVEIE1heCBwYWNrZXQgc2l6ZSIpOworICAgIENUTEZMQUdf
UkQsICZyZWRfbWF4X3BrdF9zaXplLCAwLCAiUkVEIE1heCBwYWNrZXQgc2l6
ZSIpOworU1lTQ1RMX0xPTkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf
QVVUTywgdGlja19kZWx0YSwKKyAgICBDVExGTEFHX1JELCAmdGlja19kZWx0
YSwgMCwgIkxhc3QgdnMgc3RhbmRhcmQgdGljayBkaWZmZXJlbmNlICh1c2Vj
KS4iKTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lE
X0FVVE8sIHRpY2tfZGVsdGFfc3VtLAorICAgIENUTEZMQUdfUkQsICZ0aWNr
X2RlbHRhX3N1bSwgMCwgIkFjY3VtdWxhdGVkIHRpY2sgZGlmZmVyZW5jZSAo
dXNlYykuIik7CitTWVNDVExfTE9ORyhfbmV0X2luZXRfaXBfZHVtbXluZXQs
IE9JRF9BVVRPLCB0aWNrX2FkanVzdG1lbnQsCisgICAgQ1RMRkxBR19SRCwg
JnRpY2tfYWRqdXN0bWVudCwgMCwgIlRpY2sgYWRqdXN0bWVudHMgZG9uZS4i
KTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lEX0FV
VE8sIHRpY2tfZGlmZiwKKyAgICBDVExGTEFHX1JELCAmdGlja19kaWZmLCAw
LAorICAgICJBZGp1c3RlZCB2cyBub24tYWRqdXN0ZWQgY3Vycl90aW1lIGRp
ZmZlcmVuY2UgKHRpY2tzKS4iKTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9p
cF9kdW1teW5ldCwgT0lEX0FVVE8sIHRpY2tfbG9zdCwKKyAgICBDVExGTEFH
X1JELCAmdGlja19sb3N0LCAwLAorICAgICJOdW1iZXIgb2YgdGlja3MgY29h
bGVzY2VkIGJ5IGR1bW15bmV0IHRhc2txdWV1ZS4iKTsKICNlbmRpZgogCiAj
aWZkZWYgRFVNTVlORVRfREVCVUcKQEAgLTE3MiwxNCArMTk0LDEzIEBACiAj
ZGVmaW5lCURQUklOVEYoWCkKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHRh
c2sJZG5fdGFzazsKK3N0YXRpYyBzdHJ1Y3QgdGFza3F1ZXVlCSpkbl90cSA9
IE5VTEw7CitzdGF0aWMgdm9pZCBkdW1teW5ldF90YXNrKHZvaWQgKiwgaW50
KTsKKwogc3RhdGljIHN0cnVjdCBtdHggZHVtbXluZXRfbXR4OwotLyoKLSAq
IE5COiBSZWN1cnNpb24gaXMgbmVlZGVkIHRvIGRlYWwgd2l0aCByZS1lbnRy
eSB2aWEgSUNNUC4gIFRoYXQgaXMsCi0gKiAgICAgYSBwYWNrZXQgbWF5IGJl
IGRpc3BhdGNoZWQgdmlhIGlwX2lucHV0IGZyb20gZHVtbXluZXRfaW8gYW5k
Ci0gKiAgICAgcmUtZW50ZXIgdGhyb3VnaCBpcF9vdXRwdXQuICBZZWNoLgot
ICovCiAjZGVmaW5lCURVTU1ZTkVUX0xPQ0tfSU5JVCgpIFwKLQltdHhfaW5p
dCgmZHVtbXluZXRfbXR4LCAiZHVtbXluZXQiLCBOVUxMLCBNVFhfREVGIHwg
TVRYX1JFQ1VSU0UpCisJbXR4X2luaXQoJmR1bW15bmV0X210eCwgImR1bW15
bmV0IiwgTlVMTCwgTVRYX0RFRikKICNkZWZpbmUJRFVNTVlORVRfTE9DS19E
RVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJmR1bW15bmV0X210eCkKICNkZWZpbmUJ
RFVNTVlORVRfTE9DSygpCQltdHhfbG9jaygmZHVtbXluZXRfbXR4KQogI2Rl
ZmluZQlEVU1NWU5FVF9VTkxPQ0soKQltdHhfdW5sb2NrKCZkdW1teW5ldF9t
dHgpCkBAIC02OTUsNjQgKzcxNiwxMTggQEAKIH0KIAogLyoKLSAqIFRoaXMg
aXMgY2FsbGVkIG9uY2UgcGVyIHRpY2ssIG9yIEhaIHRpbWVzIHBlciBzZWNv
bmQuIEl0IGlzIHVzZWQgdG8KLSAqIGluY3JlbWVudCB0aGUgY3VycmVudCB0
aWNrIGNvdW50ZXIgYW5kIHNjaGVkdWxlIGV4cGlyZWQgZXZlbnRzLgorICog
VGhpcyBpcyBjYWxsZWQgb25lIHRpY2ssIGFmdGVyIHByZXZpb3VzIHJ1bi4g
SXQgaXMgdXNlZCB0bworICogc2NoZWR1bGUgbmV4dCBydW4uCiAgKi8KIHN0
YXRpYyB2b2lkCiBkdW1teW5ldCh2b2lkICogX191bnVzZWQgdW51c2VkKQog
ewotICAgIHN0cnVjdCBtYnVmICpoZWFkID0gTlVMTCwgKnRhaWwgPSBOVUxM
OwotICAgIHN0cnVjdCBkbl9waXBlICpwaXBlOwotICAgIHN0cnVjdCBkbl9o
ZWFwICpoZWFwc1szXTsKLSAgICBzdHJ1Y3QgZG5faGVhcCAqaDsKLSAgICB2
b2lkICpwOyAvKiBnZW5lcmljIHBhcmFtZXRlciB0byBoYW5kbGVyICovCi0g
ICAgaW50IGk7CisJdGFza3F1ZXVlX2VucXVldWUoZG5fdHEsICZkbl90YXNr
KTsKK30KIAotICAgIGhlYXBzWzBdID0gJnJlYWR5X2hlYXAgOwkJLyogZml4
ZWQtcmF0ZSBxdWV1ZXMgKi8KLSAgICBoZWFwc1sxXSA9ICZ3ZnFfcmVhZHlf
aGVhcCA7CS8qIHdmcSBxdWV1ZXMgKi8KLSAgICBoZWFwc1syXSA9ICZleHRy
YWN0X2hlYXAgOwkJLyogZGVsYXkgbGluZSAqLworLyoKKyAqIFRoZSBtYWlu
IGR1bW15bmV0IHByb2Nlc3NpbmcgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2
b2lkCitkdW1teW5ldF90YXNrKHZvaWQgKmNvbnRleHQsIGludCBwZW5kaW5n
KQorewogCi0gICAgRFVNTVlORVRfTE9DSygpOwotICAgIGN1cnJfdGltZSsr
IDsKLSAgICBmb3IgKGk9MDsgaSA8IDMgOyBpKyspIHsKLQloID0gaGVhcHNb
aV07Ci0Jd2hpbGUgKGgtPmVsZW1lbnRzID4gMCAmJiBETl9LRVlfTEVRKGgt
PnBbMF0ua2V5LCBjdXJyX3RpbWUpICkgewotCSAgICBpZiAoaC0+cFswXS5r
ZXkgPiBjdXJyX3RpbWUpCi0JCXByaW50ZigiZHVtbXluZXQ6IHdhcm5pbmcs
IGhlYXAgJWQgaXMgJWQgdGlja3MgbGF0ZVxuIiwKLQkJICAgIGksIChpbnQp
KGN1cnJfdGltZSAtIGgtPnBbMF0ua2V5KSk7Ci0JICAgIHAgPSBoLT5wWzBd
Lm9iamVjdCA7IC8qIHN0b3JlIGEgY29weSBiZWZvcmUgaGVhcF9leHRyYWN0
ICovCi0JICAgIGhlYXBfZXh0cmFjdChoLCBOVUxMKTsgLyogbmVlZCB0byBl
eHRyYWN0IGJlZm9yZSBwcm9jZXNzaW5nICovCi0JICAgIGlmIChpID09IDAp
Ci0JCXJlYWR5X2V2ZW50KHAsICZoZWFkLCAmdGFpbCk7Ci0JICAgIGVsc2Ug
aWYgKGkgPT0gMSkgewotCQlzdHJ1Y3QgZG5fcGlwZSAqcGlwZSA9IHA7Ci0J
CWlmIChwaXBlLT5pZl9uYW1lWzBdICE9ICdcMCcpCi0JCSAgICBwcmludGYo
ImR1bW15bmV0OiBiYWQgcmVhZHlfZXZlbnRfd2ZxIGZvciBwaXBlICVzXG4i
LAotCQkJcGlwZS0+aWZfbmFtZSk7Ci0JCWVsc2UKLQkJICAgIHJlYWR5X2V2
ZW50X3dmcShwLCAmaGVhZCwgJnRhaWwpOwotCSAgICB9IGVsc2UKLQkJdHJh
bnNtaXRfZXZlbnQocCwgJmhlYWQsICZ0YWlsKTsKLQl9Ci0gICAgfQotICAg
IC8qIFN3ZWVwIHBpcGVzIHRyeWluZyB0byBleHBpcmUgaWRsZSBmbG93X3F1
ZXVlcy4gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgSEFTSFNJWkU7IGkrKykK
LQlTTElTVF9GT1JFQUNIKHBpcGUsICZwaXBlaGFzaFtpXSwgbmV4dCkKLQkJ
aWYgKHBpcGUtPmlkbGVfaGVhcC5lbGVtZW50cyA+IDAgJiYKLQkJICAgIERO
X0tFWV9MVChwaXBlLT5pZGxlX2hlYXAucFswXS5rZXksIHBpcGUtPlYpICkg
ewotCQkJc3RydWN0IGRuX2Zsb3dfcXVldWUgKnEgPSBwaXBlLT5pZGxlX2hl
YXAucFswXS5vYmplY3Q7Ci0KLQkJCWhlYXBfZXh0cmFjdCgmKHBpcGUtPmlk
bGVfaGVhcCksIE5VTEwpOwotCQkJcS0+UyA9IHEtPkYgKyAxOyAvKiBNYXJr
IHRpbWVzdGFtcCBhcyBpbnZhbGlkLiAqLwotCQkJcGlwZS0+c3VtIC09IHEt
PmZzLT53ZWlnaHQ7CisJc3RydWN0IG1idWYgKmhlYWQgPSBOVUxMLCAqdGFp
bCA9IE5VTEw7CisJc3RydWN0IGRuX3BpcGUgKnBpcGU7CisJc3RydWN0IGRu
X2hlYXAgKmhlYXBzWzNdOworCXN0cnVjdCBkbl9oZWFwICpoOworCXZvaWQg
KnA7CS8qIGdlbmVyaWMgcGFyYW1ldGVyIHRvIGhhbmRsZXIgKi8KKwlpbnQg
aTsKKworCU5FVF9MT0NLX0dJQU5UKCk7CisJRFVNTVlORVRfTE9DSygpOwor
CisJaGVhcHNbMF0gPSAmcmVhZHlfaGVhcDsJCQkvKiBmaXhlZC1yYXRlIHF1
ZXVlcyAqLworCWhlYXBzWzFdID0gJndmcV9yZWFkeV9oZWFwOwkJLyogd2Zx
IHF1ZXVlcyAqLworCWhlYXBzWzJdID0gJmV4dHJhY3RfaGVhcDsJCS8qIGRl
bGF5IGxpbmUgKi8KKworIAkvKiBVcGRhdGUgbnVtYmVyIG9mIGxvc3QoY29h
bGVzY2VkKSB0aWNrcy4gKi8KKyAJdGlja19sb3N0ICs9IHBlbmRpbmcgLSAx
OworIAorIAlnZXRtaWNyb3VwdGltZSgmdCk7CisgCS8qIExhc3QgdGljayBk
dXJhdGlvbiAodXNlYykuICovCisgCXRpY2tfbGFzdCA9ICh0LnR2X3NlYyAt
IHByZXZfdC50dl9zZWMpICogMTAwMDAwMCArCisgCSAgICAodC50dl91c2Vj
IC0gcHJldl90LnR2X3VzZWMpOworIAkvKiBMYXN0IHRpY2sgdnMgc3RhbmRh
cmQgdGljayBkaWZmZXJlbmNlICh1c2VjKS4gKi8KKyAJdGlja19kZWx0YSA9
ICh0aWNrX2xhc3QgKiBoeiAtIDEwMDAwMDApIC8gaHo7CisgCS8qIEFjY3Vt
dWxhdGVkIHRpY2sgZGlmZmVyZW5jZSAodXNlYykuICovCisgCXRpY2tfZGVs
dGFfc3VtICs9IHRpY2tfZGVsdGE7CisgCisgCXByZXZfdCA9IHQ7CisgCisg
CS8qCisgCSAqIEFkanVzdCBjdXJyX3RpbWUgaWYgYWNjdW11bGF0ZWQgdGlj
ayBkaWZmZXJlbmNlIGdyZWF0ZXIgdGhhbgorIAkgKiAnc3RhbmRhcmQnIHRp
Y2suIFNpbmNlIGN1cnJfdGltZSBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBp
bmNyZWFzaW5nLAorIAkgKiB3ZSBkbyBwb3NpdGl2ZSBhZGp1c3RtZW50IGFz
IHJlcXVpcmVkIGFuZCB0aHJvdHRsZSBjdXJyX3RpbWUgaW4KKyAJICogY2Fz
ZSBvZiBuZWdhdGl2ZSBhZGp1c3RtZW50LgorIAkgKi8KKyAgCWN1cnJfdGlt
ZSsrOworIAlpZiAodGlja19kZWx0YV9zdW0gLSB0aWNrID49IDApIHsKKyAJ
CWludCBkaWZmID0gdGlja19kZWx0YV9zdW0gLyB0aWNrOworIAorIAkJY3Vy
cl90aW1lICs9IGRpZmY7CisgCQl0aWNrX2RpZmYgKz0gZGlmZjsKKyAJCXRp
Y2tfZGVsdGFfc3VtICU9IHRpY2s7CisgCQl0aWNrX2FkanVzdG1lbnQrKzsK
KyAJfSBlbHNlIGlmICh0aWNrX2RlbHRhX3N1bSArIHRpY2sgPD0gMCkgewor
IAkJY3Vycl90aW1lLS07CisgCQl0aWNrX2RpZmYtLTsKKyAJCXRpY2tfZGVs
dGFfc3VtICs9IHRpY2s7CisgCQl0aWNrX2FkanVzdG1lbnQrKzsKKyAJfQor
CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQloID0gaGVhcHNbaV07
CisJCXdoaWxlIChoLT5lbGVtZW50cyA+IDAgJiYgRE5fS0VZX0xFUShoLT5w
WzBdLmtleSwgY3Vycl90aW1lKSkgeworCQkJaWYgKGgtPnBbMF0ua2V5ID4g
Y3Vycl90aW1lKQorCQkJCXByaW50ZigiZHVtbXluZXQ6IHdhcm5pbmcsICIK
KwkJCQkgICAgImhlYXAgJWQgaXMgJWQgdGlja3MgbGF0ZVxuIiwKKwkJCQkg
ICAgaSwgKGludCkoY3Vycl90aW1lIC0gaC0+cFswXS5rZXkpKTsKKwkJCS8q
IHN0b3JlIGEgY29weSBiZWZvcmUgaGVhcF9leHRyYWN0ICovCisJCQlwID0g
aC0+cFswXS5vYmplY3Q7CisJCQkvKiBuZWVkIHRvIGV4dHJhY3QgYmVmb3Jl
IHByb2Nlc3NpbmcgKi8KKwkJCWhlYXBfZXh0cmFjdChoLCBOVUxMKTsKKwkJ
CWlmIChpID09IDApCisJCQkJcmVhZHlfZXZlbnQocCwgJmhlYWQsICZ0YWls
KTsKKwkJCWVsc2UgaWYgKGkgPT0gMSkgeworCQkJCXN0cnVjdCBkbl9waXBl
ICpwaXBlID0gcDsKKwkJCQlpZiAocGlwZS0+aWZfbmFtZVswXSAhPSAnXDAn
KQorCQkJCQlwcmludGYoImR1bW15bmV0OiBiYWQgcmVhZHlfZXZlbnRfd2Zx
ICIKKwkJCQkJICAgICJmb3IgcGlwZSAlc1xuIiwgcGlwZS0+aWZfbmFtZSk7
CisJCQkJZWxzZQorCQkJCQlyZWFkeV9ldmVudF93ZnEocCwgJmhlYWQsICZ0
YWlsKTsKKwkJCX0gZWxzZQorCQkJCXRyYW5zbWl0X2V2ZW50KHAsICZoZWFk
LCAmdGFpbCk7CiAJCX0KKwl9CiAKLSAgICBEVU1NWU5FVF9VTkxPQ0soKTsK
KwkvKiBTd2VlcCBwaXBlcyB0cnlpbmcgdG8gZXhwaXJlIGlkbGUgZmxvd19x
dWV1ZXMuICovCisJZm9yIChpID0gMDsgaSA8IEhBU0hTSVpFOyBpKyspCisJ
CVNMSVNUX0ZPUkVBQ0gocGlwZSwgJnBpcGVoYXNoW2ldLCBuZXh0KQorCQkJ
aWYgKHBpcGUtPmlkbGVfaGVhcC5lbGVtZW50cyA+IDAgJiYKKwkJCSAgICBE
Tl9LRVlfTFQocGlwZS0+aWRsZV9oZWFwLnBbMF0ua2V5LCBwaXBlLT5WKSkg
eworCQkJCXN0cnVjdCBkbl9mbG93X3F1ZXVlICpxID0KKwkJCQkgICAgcGlw
ZS0+aWRsZV9oZWFwLnBbMF0ub2JqZWN0OworCisJCQkJaGVhcF9leHRyYWN0
KCYocGlwZS0+aWRsZV9oZWFwKSwgTlVMTCk7CisJCQkJLyogTWFyayB0aW1l
c3RhbXAgYXMgaW52YWxpZC4gKi8KKwkJCQlxLT5TID0gcS0+RiArIDE7CisJ
CQkJcGlwZS0+c3VtIC09IHEtPmZzLT53ZWlnaHQ7CisJCQl9CiAKLSAgICBp
ZiAoaGVhZCAhPSBOVUxMKQotCWR1bW15bmV0X3NlbmQoaGVhZCk7CisJRFVN
TVlORVRfVU5MT0NLKCk7CisKKwlpZiAoaGVhZCAhPSBOVUxMKQorCQlkdW1t
eW5ldF9zZW5kKGhlYWQpOworCisJY2FsbG91dF9yZXNldCgmZG5fdGltZW91
dCwgMSwgZHVtbXluZXQsIE5VTEwpOwogCi0gICAgY2FsbG91dF9yZXNldCgm
ZG5fdGltZW91dCwgMSwgZHVtbXluZXQsIE5VTEwpOworCU5FVF9VTkxPQ0tf
R0lBTlQoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc3NCwxMSArODQ5LDEx
IEBACiAJCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOwogCQkJaXAtPmlw
X2xlbiA9IGh0b25zKGlwLT5pcF9sZW4pOwogCQkJaXAtPmlwX29mZiA9IGh0
b25zKGlwLT5pcF9vZmYpOwotCQkJaXBfaW5wdXQobSk7CisJCQluZXRpc3Jf
ZGlzcGF0Y2goTkVUSVNSX0lQLCBtKTsKIAkJCWJyZWFrOwogI2lmZGVmIElO
RVQ2CiAJCWNhc2UgRE5fVE9fSVA2X0lOOgotCQkJaXA2X2lucHV0KG0pOwor
CQkJbmV0aXNyX2Rpc3BhdGNoKE5FVElTUl9JUFY2LCBtKTsKIAkJCWJyZWFr
OwogCiAJCWNhc2UgRE5fVE9fSVA2X09VVDoKQEAgLTEwMjEsMTAzICsxMDk2
LDEwNiBAQAogc3RhdGljIGludAogcmVkX2Ryb3BzKHN0cnVjdCBkbl9mbG93
X3NldCAqZnMsIHN0cnVjdCBkbl9mbG93X3F1ZXVlICpxLCBpbnQgbGVuKQog
ewotICAgIC8qCi0gICAgICogUkVEIGFsZ29yaXRobQotICAgICAqCi0gICAg
ICogUkVEIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgcXVldWUgc2l6ZSAoYXZn
KSB1c2luZyBhIGxvdy1wYXNzIGZpbHRlcgotICAgICAqIHdpdGggYW4gZXhw
b25lbnRpYWwgd2VpZ2h0ZWQgKHdfcSkgbW92aW5nIGF2ZXJhZ2U6Ci0gICAg
ICogCWF2ZyAgPC0gICgxLXdfcSkgKiBhdmcgKyB3X3EgKiBxX3NpemUKLSAg
ICAgKiB3aGVyZSBxX3NpemUgaXMgdGhlIHF1ZXVlIGxlbmd0aCAobWVhc3Vy
ZWQgaW4gYnl0ZXMgb3IgKiBwYWNrZXRzKS4KLSAgICAgKgotICAgICAqIElm
IHFfc2l6ZSA9PSAwLCB3ZSBjb21wdXRlIHRoZSBpZGxlIHRpbWUgZm9yIHRo
ZSBsaW5rLCBhbmQgc2V0Ci0gICAgICoJYXZnID0gKDEgLSB3X3EpXihpZGxl
L3MpCi0gICAgICogd2hlcmUgcyBpcyB0aGUgdGltZSBuZWVkZWQgZm9yIHRy
YW5zbWl0dGluZyBhIG1lZGl1bS1zaXplZCBwYWNrZXQuCi0gICAgICoKLSAg
ICAgKiBOb3csIGlmIGF2ZyA8IG1pbl90aCB0aGUgcGFja2V0IGlzIGVucXVl
dWVkLgotICAgICAqIElmIGF2ZyA+IG1heF90aCB0aGUgcGFja2V0IGlzIGRy
b3BwZWQuIE90aGVyd2lzZSwgdGhlIHBhY2tldCBpcwotICAgICAqIGRyb3Bw
ZWQgd2l0aCBwcm9iYWJpbGl0eSBQIGZ1bmN0aW9uIG9mIGF2Zy4KLSAgICAg
KgotICAgICAqLworCS8qCisJICogUkVEIGFsZ29yaXRobQorCSAqCisJICog
UkVEIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgcXVldWUgc2l6ZSAoYXZnKSB1
c2luZyBhIGxvdy1wYXNzIGZpbHRlcgorCSAqIHdpdGggYW4gZXhwb25lbnRp
YWwgd2VpZ2h0ZWQgKHdfcSkgbW92aW5nIGF2ZXJhZ2U6CisJICogCWF2ZyAg
PC0gICgxLXdfcSkgKiBhdmcgKyB3X3EgKiBxX3NpemUKKwkgKiB3aGVyZSBx
X3NpemUgaXMgdGhlIHF1ZXVlIGxlbmd0aCAobWVhc3VyZWQgaW4gYnl0ZXMg
b3IgKiBwYWNrZXRzKS4KKwkgKgorCSAqIElmIHFfc2l6ZSA9PSAwLCB3ZSBj
b21wdXRlIHRoZSBpZGxlIHRpbWUgZm9yIHRoZSBsaW5rLCBhbmQgc2V0CisJ
ICoJYXZnID0gKDEgLSB3X3EpXihpZGxlL3MpCisJICogd2hlcmUgcyBpcyB0
aGUgdGltZSBuZWVkZWQgZm9yIHRyYW5zbWl0dGluZyBhIG1lZGl1bS1zaXpl
ZCBwYWNrZXQuCisJICoKKwkgKiBOb3csIGlmIGF2ZyA8IG1pbl90aCB0aGUg
cGFja2V0IGlzIGVucXVldWVkLgorCSAqIElmIGF2ZyA+IG1heF90aCB0aGUg
cGFja2V0IGlzIGRyb3BwZWQuIE90aGVyd2lzZSwgdGhlIHBhY2tldCBpcwor
CSAqIGRyb3BwZWQgd2l0aCBwcm9iYWJpbGl0eSBQIGZ1bmN0aW9uIG9mIGF2
Zy4KKwkgKi8KIAotICAgIGludDY0X3QgcF9iID0gMDsKLSAgICAvKiBxdWV1
ZSBpbiBieXRlcyBvciBwYWNrZXRzID8gKi8KLSAgICB1X2ludCBxX3NpemUg
PSAoZnMtPmZsYWdzX2ZzICYgRE5fUVNJWkVfSVNfQllURVMpID8gcS0+bGVu
X2J5dGVzIDogcS0+bGVuOworCWludDY0X3QgcF9iID0gMDsKIAotICAgIERQ
UklOVEYoKCJcbmR1bW15bmV0OiAlZCBxOiAlMnUgIiwgKGludCkgY3Vycl90
aW1lLCBxX3NpemUpKTsKKwkvKiBRdWV1ZSBpbiBieXRlcyBvciBwYWNrZXRz
PyAqLworCXVfaW50IHFfc2l6ZSA9IChmcy0+ZmxhZ3NfZnMgJiBETl9RU0la
RV9JU19CWVRFUykgPworCSAgICBxLT5sZW5fYnl0ZXMgOiBxLT5sZW47CiAK
LSAgICAvKiBhdmVyYWdlIHF1ZXVlIHNpemUgZXN0aW1hdGlvbiAqLwotICAg
IGlmIChxX3NpemUgIT0gMCkgewotCS8qCi0JICogcXVldWUgaXMgbm90IGVt
cHR5LCBhdmcgPC0gYXZnICsgKHFfc2l6ZSAtIGF2ZykgKiB3X3EKLQkgKi8K
LQlpbnQgZGlmZiA9IFNDQUxFKHFfc2l6ZSkgLSBxLT5hdmc7Ci0JaW50NjRf
dCB2ID0gU0NBTEVfTVVMKChpbnQ2NF90KSBkaWZmLCAoaW50NjRfdCkgZnMt
PndfcSk7CisJRFBSSU5URigoIlxuZHVtbXluZXQ6ICVkIHE6ICUydSAiLCAo
aW50KWN1cnJfdGltZSwgcV9zaXplKSk7CiAKLQlxLT5hdmcgKz0gKGludCkg
djsKLSAgICB9IGVsc2UgewotCS8qCi0JICogcXVldWUgaXMgZW1wdHksIGZp
bmQgZm9yIGhvdyBsb25nIHRoZSBxdWV1ZSBoYXMgYmVlbgotCSAqIGVtcHR5
IGFuZCB1c2UgYSBsb29rdXAgdGFibGUgZm9yIGNvbXB1dGluZwotCSAqICgx
IC0gKiB3X3EpXihpZGxlX3RpbWUvcykgd2hlcmUgcyBpcyB0aGUgdGltZSB0
byBzZW5kIGEKLQkgKiAoc21hbGwpIHBhY2tldC4KLQkgKiBYWFggY2hlY2sg
d3JhcHMuLi4KLQkgKi8KLQlpZiAocS0+YXZnKSB7Ci0JICAgIHVfaW50IHQg
PSAoY3Vycl90aW1lIC0gcS0+cV90aW1lKSAvIGZzLT5sb29rdXBfc3RlcDsK
KwkvKiBBdmVyYWdlIHF1ZXVlIHNpemUgZXN0aW1hdGlvbi4gKi8KKwlpZiAo
cV9zaXplICE9IDApIHsKKwkJLyogUXVldWUgaXMgbm90IGVtcHR5LCBhdmcg
PC0gYXZnICsgKHFfc2l6ZSAtIGF2ZykgKiB3X3EgKi8KKwkJaW50IGRpZmYg
PSBTQ0FMRShxX3NpemUpIC0gcS0+YXZnOworCQlpbnQ2NF90IHYgPSBTQ0FM
RV9NVUwoKGludDY0X3QpZGlmZiwgKGludDY0X3QpZnMtPndfcSk7CiAKLQkg
ICAgcS0+YXZnID0gKHQgPCBmcy0+bG9va3VwX2RlcHRoKSA/Ci0JCSAgICBT
Q0FMRV9NVUwocS0+YXZnLCBmcy0+d19xX2xvb2t1cFt0XSkgOiAwOworCQlx
LT5hdmcgKz0gKGludCl2OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFF1ZXVl
IGlzIGVtcHR5LCBmaW5kIGZvciBob3cgbG9uZyB0aGUgcXVldWUgaGFzIGJl
ZW4KKwkJICogZW1wdHkgYW5kIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3IgY29t
cHV0aW5nCisJCSAqICgxIC0gKiB3X3EpXihpZGxlX3RpbWUvcykgd2hlcmUg
cyBpcyB0aGUgdGltZSB0byBzZW5kIGEKKwkJICogKHNtYWxsKSBwYWNrZXQu
CisJCSAqIFhYWCBjaGVjayB3cmFwcy4uLgorCQkgKi8KKwkJaWYgKHEtPmF2
ZykgeworCQkJdV9pbnQgdCA9IChjdXJyX3RpbWUgLSBxLT5xX3RpbWUpIC8g
ZnMtPmxvb2t1cF9zdGVwOworCisJCQlxLT5hdmcgPSAodCA8IGZzLT5sb29r
dXBfZGVwdGgpID8KKwkJCSAgICBTQ0FMRV9NVUwocS0+YXZnLCBmcy0+d19x
X2xvb2t1cFt0XSkgOiAwOworCQl9CiAJfQotICAgIH0KLSAgICBEUFJJTlRG
KCgiZHVtbXluZXQ6IGF2ZzogJXUgIiwgU0NBTEVfVkFMKHEtPmF2ZykpKTsK
KwlEUFJJTlRGKCgiZHVtbXluZXQ6IGF2ZzogJXUgIiwgU0NBTEVfVkFMKHEt
PmF2ZykpKTsKIAotICAgIC8qIHNob3VsZCBpIGRyb3AgPyAqLwotCi0gICAg
aWYgKHEtPmF2ZyA8IGZzLT5taW5fdGgpIHsKLQlxLT5jb3VudCA9IC0xOwot
CXJldHVybiAwOyAvKiBhY2NlcHQgcGFja2V0IDsgKi8KLSAgICB9Ci0gICAg
aWYgKHEtPmF2ZyA+PSBmcy0+bWF4X3RoKSB7IC8qIGF2ZXJhZ2UgcXVldWUg
Pj0gIG1heCB0aHJlc2hvbGQgKi8KLQlpZiAoZnMtPmZsYWdzX2ZzICYgRE5f
SVNfR0VOVExFX1JFRCkgewotCSAgICAvKgotCSAgICAgKiBBY2NvcmRpbmcg
dG8gR2VudGxlLVJFRCwgaWYgYXZnIGlzIGdyZWF0ZXIgdGhhbiBtYXhfdGgg
dGhlCi0JICAgICAqIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYSBwcm9iYWJp
bGl0eQotCSAgICAgKglwX2IgPSBjXzMgKiBhdmcgLSBjXzQKLQkgICAgICog
d2hlcmUgY18zID0gKDEgLSBtYXhfcCkgLyBtYXhfdGgsIGFuZCBjXzQgPSAx
IC0gMiAqIG1heF9wCi0JICAgICAqLwotCSAgICBwX2IgPSBTQ0FMRV9NVUwo
KGludDY0X3QpIGZzLT5jXzMsIChpbnQ2NF90KSBxLT5hdmcpIC0gZnMtPmNf
NDsKLQl9IGVsc2UgewotCSAgICBxLT5jb3VudCA9IC0xOwotCSAgICBEUFJJ
TlRGKCgiZHVtbXluZXQ6IC0gZHJvcCIpKTsKLQkgICAgcmV0dXJuIDEgOwor
CS8qIFNob3VsZCBpIGRyb3A/ICovCisJaWYgKHEtPmF2ZyA8IGZzLT5taW5f
dGgpIHsKKwkJcS0+Y291bnQgPSAtMTsKKwkJcmV0dXJuICgwKTsJLyogYWNj
ZXB0IHBhY2tldCAqLwogCX0KLSAgICB9IGVsc2UgaWYgKHEtPmF2ZyA+IGZz
LT5taW5fdGgpIHsKLQkvKgotCSAqIHdlIGNvbXB1dGUgcF9iIHVzaW5nIHRo
ZSBsaW5lYXIgZHJvcHBpbmcgZnVuY3Rpb24gcF9iID0gY18xICoKLQkgKiBh
dmcgLSBjXzIsIHdoZXJlIGNfMSA9IG1heF9wIC8gKG1heF90aCAtIG1pbl90
aCksIGFuZCBjXzIgPQotCSAqIG1heF9wICogbWluX3RoIC8gKG1heF90aCAt
IG1pbl90aCkKLQkgKi8KLQlwX2IgPSBTQ0FMRV9NVUwoKGludDY0X3QpIGZz
LT5jXzEsIChpbnQ2NF90KSBxLT5hdmcpIC0gZnMtPmNfMjsKLSAgICB9Ci0g
ICAgaWYgKGZzLT5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZVEVTKQotCXBf
YiA9IChwX2IgKiBsZW4pIC8gZnMtPm1heF9wa3Rfc2l6ZTsKLSAgICBpZiAo
KytxLT5jb3VudCA9PSAwKQotCXEtPnJhbmRvbSA9IHJhbmRvbSgpICYgMHhm
ZmZmOwotICAgIGVsc2UgewotCS8qCi0JICogcS0+Y291bnQgY291bnRzIHBh
Y2tldHMgYXJyaXZlZCBzaW5jZSBsYXN0IGRyb3AsIHNvIGEgZ3JlYXRlcgot
CSAqIHZhbHVlIG9mIHEtPmNvdW50IG1lYW5zIGEgZ3JlYXRlciBwYWNrZXQg
ZHJvcCBwcm9iYWJpbGl0eS4KLQkgKi8KLQlpZiAoU0NBTEVfTVVMKHBfYiwg
U0NBTEUoKGludDY0X3QpIHEtPmNvdW50KSkgPiBxLT5yYW5kb20pIHsKLQkg
ICAgcS0+Y291bnQgPSAwOwotCSAgICBEUFJJTlRGKCgiZHVtbXluZXQ6IC0g
cmVkIGRyb3AiKSk7Ci0JICAgIC8qIGFmdGVyIGEgZHJvcCB3ZSBjYWxjdWxh
dGUgYSBuZXcgcmFuZG9tIHZhbHVlICovCi0JICAgIHEtPnJhbmRvbSA9IHJh
bmRvbSgpICYgMHhmZmZmOwotCSAgICByZXR1cm4gMTsgICAgLyogZHJvcCAq
LworCWlmIChxLT5hdmcgPj0gZnMtPm1heF90aCkgewkvKiBhdmVyYWdlIHF1
ZXVlID49ICBtYXggdGhyZXNob2xkICovCisJCWlmIChmcy0+ZmxhZ3NfZnMg
JiBETl9JU19HRU5UTEVfUkVEKSB7CisJCQkvKgorCQkJICogQWNjb3JkaW5n
IHRvIEdlbnRsZS1SRUQsIGlmIGF2ZyBpcyBncmVhdGVyIHRoYW4KKwkJCSAq
IG1heF90aCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBhIHByb2JhYmls
aXR5CisJCQkgKgkgcF9iID0gY18zICogYXZnIC0gY180CisJCQkgKiB3aGVy
ZSBjXzMgPSAoMSAtIG1heF9wKSAvIG1heF90aAorCQkJICogICAgICAgY180
ID0gMSAtIDIgKiBtYXhfcAorCQkJICovCisJCQlwX2IgPSBTQ0FMRV9NVUwo
KGludDY0X3QpZnMtPmNfMywgKGludDY0X3QpcS0+YXZnKSAtCisJCQkgICAg
ZnMtPmNfNDsKKwkJfSBlbHNlIHsKKwkJCXEtPmNvdW50ID0gLTE7CisJCQlE
UFJJTlRGKCgiZHVtbXluZXQ6IC0gZHJvcCIpKTsKKwkJCXJldHVybiAoMSk7
CisJCX0KKwl9IGVsc2UgaWYgKHEtPmF2ZyA+IGZzLT5taW5fdGgpIHsKKwkJ
LyoKKwkJICogV2UgY29tcHV0ZSBwX2IgdXNpbmcgdGhlIGxpbmVhciBkcm9w
cGluZyBmdW5jdGlvbgorCQkgKgkgcF9iID0gY18xICogYXZnIC0gY18yCisJ
CSAqIHdoZXJlIGNfMSA9IG1heF9wIC8gKG1heF90aCAtIG1pbl90aCkKKwkJ
ICogCSBjXzIgPSBtYXhfcCAqIG1pbl90aCAvIChtYXhfdGggLSBtaW5fdGgp
CisJCSAqLworCQlwX2IgPSBTQ0FMRV9NVUwoKGludDY0X3QpZnMtPmNfMSwg
KGludDY0X3QpcS0+YXZnKSAtIGZzLT5jXzI7CiAJfQotICAgIH0KLSAgICAv
KiBlbmQgb2YgUkVEIGFsZ29yaXRobSAqLwotICAgIHJldHVybiAwIDsgLyog
YWNjZXB0ICovCisKKwlpZiAoZnMtPmZsYWdzX2ZzICYgRE5fUVNJWkVfSVNf
QllURVMpCisJCXBfYiA9IChwX2IgKiBsZW4pIC8gZnMtPm1heF9wa3Rfc2l6
ZTsKKwlpZiAoKytxLT5jb3VudCA9PSAwKQorCQlxLT5yYW5kb20gPSByYW5k
b20oKSAmIDB4ZmZmZjsKKwllbHNlIHsKKwkJLyoKKwkJICogcS0+Y291bnQg
Y291bnRzIHBhY2tldHMgYXJyaXZlZCBzaW5jZSBsYXN0IGRyb3AsIHNvIGEg
Z3JlYXRlcgorCQkgKiB2YWx1ZSBvZiBxLT5jb3VudCBtZWFucyBhIGdyZWF0
ZXIgcGFja2V0IGRyb3AgcHJvYmFiaWxpdHkuCisJCSAqLworCQlpZiAoU0NB
TEVfTVVMKHBfYiwgU0NBTEUoKGludDY0X3QpcS0+Y291bnQpKSA+IHEtPnJh
bmRvbSkgeworCQkJcS0+Y291bnQgPSAwOworCQkJRFBSSU5URigoImR1bW15
bmV0OiAtIHJlZCBkcm9wIikpOworCQkJLyogQWZ0ZXIgYSBkcm9wIHdlIGNh
bGN1bGF0ZSBhIG5ldyByYW5kb20gdmFsdWUuICovCisJCQlxLT5yYW5kb20g
PSByYW5kb20oKSAmIDB4ZmZmZjsKKwkJCXJldHVybiAoMSk7CS8qIGRyb3Ag
Ki8KKwkJfQorCX0KKwkvKiBFbmQgb2YgUkVEIGFsZ29yaXRobS4gKi8KKwor
CXJldHVybiAoMCk7CS8qIGFjY2VwdCAqLwogfQogCiBzdGF0aWMgX19pbmxp
bmUgc3RydWN0IGRuX2Zsb3dfc2V0ICoKQEAgLTEzNTMsMzYgKzE0MzEsMzcg
QEAKIHN0YXRpYyB2b2lkCiBwdXJnZV9mbG93X3NldChzdHJ1Y3QgZG5fZmxv
d19zZXQgKmZzLCBpbnQgYWxsKQogewotICAgIHN0cnVjdCBkbl9mbG93X3F1
ZXVlICpxLCAqcW4gOwotICAgIGludCBpIDsKKwlzdHJ1Y3QgZG5fZmxvd19x
dWV1ZSAqcSwgKnFuOworCWludCBpOwogCi0gICAgRFVNTVlORVRfTE9DS19B
U1NFUlQoKTsKKwlEVU1NWU5FVF9MT0NLX0FTU0VSVCgpOwogCi0gICAgZm9y
IChpID0gMCA7IGkgPD0gZnMtPnJxX3NpemUgOyBpKysgKSB7Ci0JZm9yIChx
ID0gZnMtPnJxW2ldIDsgcSA7IHEgPSBxbiApIHsKLQkgICAgc3RydWN0IG1i
dWYgKm0sICptbmV4dDsKLQotCSAgICBtbmV4dCA9IHEtPmhlYWQ7Ci0JICAg
IHdoaWxlICgobSA9IG1uZXh0KSAhPSBOVUxMKSB7Ci0JCW1uZXh0ID0gbS0+
bV9uZXh0cGt0OwotCQlETl9GUkVFX1BLVChtKTsKLQkgICAgfQotCSAgICBx
biA9IHEtPm5leHQgOwotCSAgICBmcmVlKHEsIE1fRFVNTVlORVQpOworCWZv
ciAoaSA9IDA7IGkgPD0gZnMtPnJxX3NpemU7IGkrKykgeworCQlmb3IgKHEg
PSBmcy0+cnFbaV07IHEgIT0gTlVMTDsgcSA9IHFuKSB7CisJCQlzdHJ1Y3Qg
bWJ1ZiAqbSwgKm1uZXh0OworCisJCQltbmV4dCA9IHEtPmhlYWQ7CisJCQl3
aGlsZSAoKG0gPSBtbmV4dCkgIT0gTlVMTCkgeworCQkJCW1uZXh0ID0gbS0+
bV9uZXh0cGt0OworCQkJCUROX0ZSRUVfUEtUKG0pOworCQkJfQorCQkJcW4g
PSBxLT5uZXh0OworCQkJZnJlZShxLCBNX0RVTU1ZTkVUKTsKKwkJfQorCQlm
cy0+cnFbaV0gPSBOVUxMOworCX0KKworCWZzLT5ycV9lbGVtZW50cyA9IDA7
CisJaWYgKGFsbCkgeworCQkvKiBSRUQgLSBmcmVlIGxvb2t1cCB0YWJsZS4g
Ki8KKwkJaWYgKGZzLT53X3FfbG9va3VwICE9IE5VTEwpCisJCQlmcmVlKGZz
LT53X3FfbG9va3VwLCBNX0RVTU1ZTkVUKTsKKwkJaWYgKGZzLT5ycSAhPSBO
VUxMKQorCQkJZnJlZShmcy0+cnEsIE1fRFVNTVlORVQpOworCQkvKiBJZiB0
aGlzIGZzIGlzIG5vdCBwYXJ0IG9mIGEgcGlwZSwgZnJlZSBpdC4gKi8KKwkJ
aWYgKGZzLT5waXBlID09IE5VTEwgfHwgZnMgIT0gJihmcy0+cGlwZS0+ZnMp
KQorCQkJZnJlZShmcywgTV9EVU1NWU5FVCk7CiAJfQotCWZzLT5ycVtpXSA9
IE5VTEwgOwotICAgIH0KLSAgICBmcy0+cnFfZWxlbWVudHMgPSAwIDsKLSAg
ICBpZiAoYWxsKSB7Ci0JLyogUkVEIC0gZnJlZSBsb29rdXAgdGFibGUgKi8K
LQlpZiAoZnMtPndfcV9sb29rdXApCi0JICAgIGZyZWUoZnMtPndfcV9sb29r
dXAsIE1fRFVNTVlORVQpOwotCWlmIChmcy0+cnEpCi0JICAgIGZyZWUoZnMt
PnJxLCBNX0RVTU1ZTkVUKTsKLQkvKiBpZiB0aGlzIGZzIGlzIG5vdCBwYXJ0
IG9mIGEgcGlwZSwgZnJlZSBpdCAqLwotCWlmIChmcy0+cGlwZSAmJiBmcyAh
PSAmKGZzLT5waXBlLT5mcykgKQotCSAgICBmcmVlKGZzLCBNX0RVTU1ZTkVU
KTsKLSAgICB9CiB9CiAKIC8qCkBAIC0xNTAyLDUyICsxNTgxLDU3IEBACiBz
dGF0aWMgaW50CiBjb25maWdfcmVkKHN0cnVjdCBkbl9mbG93X3NldCAqcCwg
c3RydWN0IGRuX2Zsb3dfc2V0ICogeCkKIHsKLSAgICBpbnQgaTsKKwlpbnQg
aTsKIAotICAgIHgtPndfcSA9IHAtPndfcTsKLSAgICB4LT5taW5fdGggPSBT
Q0FMRShwLT5taW5fdGgpOwotICAgIHgtPm1heF90aCA9IFNDQUxFKHAtPm1h
eF90aCk7Ci0gICAgeC0+bWF4X3AgPSBwLT5tYXhfcDsKLQotICAgIHgtPmNf
MSA9IHAtPm1heF9wIC8gKHAtPm1heF90aCAtIHAtPm1pbl90aCk7Ci0gICAg
eC0+Y18yID0gU0NBTEVfTVVMKHgtPmNfMSwgU0NBTEUocC0+bWluX3RoKSk7
Ci0gICAgaWYgKHgtPmZsYWdzX2ZzICYgRE5fSVNfR0VOVExFX1JFRCkgewot
CXgtPmNfMyA9IChTQ0FMRSgxKSAtIHAtPm1heF9wKSAvIHAtPm1heF90aDsK
LQl4LT5jXzQgPSAoU0NBTEUoMSkgLSAyICogcC0+bWF4X3ApOwotICAgIH0K
LQotICAgIC8qIGlmIHRoZSBsb29rdXAgdGFibGUgYWxyZWFkeSBleGlzdCwg
ZnJlZSBhbmQgY3JlYXRlIGl0IGFnYWluICovCi0gICAgaWYgKHgtPndfcV9s
b29rdXApIHsKLQlmcmVlKHgtPndfcV9sb29rdXAsIE1fRFVNTVlORVQpOwot
CXgtPndfcV9sb29rdXAgPSBOVUxMIDsKLSAgICB9Ci0gICAgaWYgKHJlZF9s
b29rdXBfZGVwdGggPT0gMCkgewotCXByaW50ZigiXG5kdW1teW5ldDogbmV0
LmluZXQuaXAuZHVtbXluZXQucmVkX2xvb2t1cF9kZXB0aCBtdXN0IGJlID4g
MFxuIik7Ci0JZnJlZSh4LCBNX0RVTU1ZTkVUKTsKLQlyZXR1cm4gRUlOVkFM
OwotICAgIH0KLSAgICB4LT5sb29rdXBfZGVwdGggPSByZWRfbG9va3VwX2Rl
cHRoOwotICAgIHgtPndfcV9sb29rdXAgPSAodV9pbnQgKikgbWFsbG9jKHgt
Pmxvb2t1cF9kZXB0aCAqIHNpemVvZihpbnQpLAorCXgtPndfcSA9IHAtPndf
cTsKKwl4LT5taW5fdGggPSBTQ0FMRShwLT5taW5fdGgpOworCXgtPm1heF90
aCA9IFNDQUxFKHAtPm1heF90aCk7CisJeC0+bWF4X3AgPSBwLT5tYXhfcDsK
KworCXgtPmNfMSA9IHAtPm1heF9wIC8gKHAtPm1heF90aCAtIHAtPm1pbl90
aCk7CisJeC0+Y18yID0gU0NBTEVfTVVMKHgtPmNfMSwgU0NBTEUocC0+bWlu
X3RoKSk7CisKKwlpZiAoeC0+ZmxhZ3NfZnMgJiBETl9JU19HRU5UTEVfUkVE
KSB7CisJCXgtPmNfMyA9IChTQ0FMRSgxKSAtIHAtPm1heF9wKSAvIHAtPm1h
eF90aDsKKwkJeC0+Y180ID0gU0NBTEUoMSkgLSAyICogcC0+bWF4X3A7CisJ
fQorCisJLyogSWYgdGhlIGxvb2t1cCB0YWJsZSBhbHJlYWR5IGV4aXN0LCBm
cmVlIGFuZCBjcmVhdGUgaXQgYWdhaW4uICovCisJaWYgKHgtPndfcV9sb29r
dXApIHsKKwkJZnJlZSh4LT53X3FfbG9va3VwLCBNX0RVTU1ZTkVUKTsKKwkJ
eC0+d19xX2xvb2t1cCA9IE5VTEw7CisJfQorCWlmIChyZWRfbG9va3VwX2Rl
cHRoID09IDApIHsKKwkJcHJpbnRmKCJcbmR1bW15bmV0OiBuZXQuaW5ldC5p
cC5kdW1teW5ldC5yZWRfbG9va3VwX2RlcHRoIgorCQkgICAgIm11c3QgYmUg
PiAwXG4iKTsKKwkJZnJlZSh4LCBNX0RVTU1ZTkVUKTsKKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKwl4LT5sb29rdXBfZGVwdGggPSByZWRfbG9va3VwX2Rl
cHRoOworCXgtPndfcV9sb29rdXAgPSAodV9pbnQgKiltYWxsb2MoeC0+bG9v
a3VwX2RlcHRoICogc2l6ZW9mKGludCksCiAJICAgIE1fRFVNTVlORVQsIE1f
Tk9XQUlUKTsKLSAgICBpZiAoeC0+d19xX2xvb2t1cCA9PSBOVUxMKSB7Ci0J
cHJpbnRmKCJkdW1teW5ldDogc29ycnksIGNhbm5vdCBhbGxvY2F0ZSByZWQg
bG9va3VwIHRhYmxlXG4iKTsKLQlmcmVlKHgsIE1fRFVNTVlORVQpOwotCXJl
dHVybiBFTk9TUEM7Ci0gICAgfQotCi0gICAgLyogZmlsbCB0aGUgbG9va3Vw
IHRhYmxlIHdpdGggKDEgLSB3X3EpXnggKi8KLSAgICB4LT5sb29rdXBfc3Rl
cCA9IHAtPmxvb2t1cF9zdGVwIDsKLSAgICB4LT5sb29rdXBfd2VpZ2h0ID0g
cC0+bG9va3VwX3dlaWdodCA7Ci0gICAgeC0+d19xX2xvb2t1cFswXSA9IFND
QUxFKDEpIC0geC0+d19xOwotICAgIGZvciAoaSA9IDE7IGkgPCB4LT5sb29r
dXBfZGVwdGg7IGkrKykKLQl4LT53X3FfbG9va3VwW2ldID0gU0NBTEVfTVVM
KHgtPndfcV9sb29rdXBbaSAtIDFdLCB4LT5sb29rdXBfd2VpZ2h0KTsKLSAg
ICBpZiAocmVkX2F2Z19wa3Rfc2l6ZSA8IDEpCi0JcmVkX2F2Z19wa3Rfc2l6
ZSA9IDUxMiA7Ci0gICAgeC0+YXZnX3BrdF9zaXplID0gcmVkX2F2Z19wa3Rf
c2l6ZSA7Ci0gICAgaWYgKHJlZF9tYXhfcGt0X3NpemUgPCAxKQotCXJlZF9t
YXhfcGt0X3NpemUgPSAxNTAwIDsKLSAgICB4LT5tYXhfcGt0X3NpemUgPSBy
ZWRfbWF4X3BrdF9zaXplIDsKLSAgICByZXR1cm4gMCA7CisJaWYgKHgtPndf
cV9sb29rdXAgPT0gTlVMTCkgeworCQlwcmludGYoImR1bW15bmV0OiBzb3Jy
eSwgY2Fubm90IGFsbG9jYXRlIHJlZCBsb29rdXAgdGFibGVcbiIpOworCQlm
cmVlKHgsIE1fRFVNTVlORVQpOworCQlyZXR1cm4oRU5PU1BDKTsKKwl9CisK
KwkvKiBGaWxsIHRoZSBsb29rdXAgdGFibGUgd2l0aCAoMSAtIHdfcSleeCAq
LworCXgtPmxvb2t1cF9zdGVwID0gcC0+bG9va3VwX3N0ZXA7CisJeC0+bG9v
a3VwX3dlaWdodCA9IHAtPmxvb2t1cF93ZWlnaHQ7CisJeC0+d19xX2xvb2t1
cFswXSA9IFNDQUxFKDEpIC0geC0+d19xOworCisJZm9yIChpID0gMTsgaSA8
IHgtPmxvb2t1cF9kZXB0aDsgaSsrKQorCQl4LT53X3FfbG9va3VwW2ldID0K
KwkJICAgIFNDQUxFX01VTCh4LT53X3FfbG9va3VwW2kgLSAxXSwgeC0+bG9v
a3VwX3dlaWdodCk7CisKKwlpZiAocmVkX2F2Z19wa3Rfc2l6ZSA8IDEpCisJ
CXJlZF9hdmdfcGt0X3NpemUgPSA1MTI7CisJeC0+YXZnX3BrdF9zaXplID0g
cmVkX2F2Z19wa3Rfc2l6ZTsKKwlpZiAocmVkX21heF9wa3Rfc2l6ZSA8IDEp
CisJCXJlZF9tYXhfcGt0X3NpemUgPSAxNTAwOworCXgtPm1heF9wa3Rfc2l6
ZSA9IHJlZF9tYXhfcGt0X3NpemU7CisJcmV0dXJuICgwKTsKIH0KIAogc3Rh
dGljIGludApAQCAtMTU3OCwxMzcgKzE2NjIsMTQ2IEBACiBzdGF0aWMgdm9p
ZAogc2V0X2ZzX3Bhcm1zKHN0cnVjdCBkbl9mbG93X3NldCAqeCwgc3RydWN0
IGRuX2Zsb3dfc2V0ICpzcmMpCiB7Ci0gICAgeC0+ZmxhZ3NfZnMgPSBzcmMt
PmZsYWdzX2ZzOwotICAgIHgtPnFzaXplID0gc3JjLT5xc2l6ZTsKLSAgICB4
LT5wbHIgPSBzcmMtPnBscjsKLSAgICB4LT5mbG93X21hc2sgPSBzcmMtPmZs
b3dfbWFzazsKLSAgICBpZiAoeC0+ZmxhZ3NfZnMgJiBETl9RU0laRV9JU19C
WVRFUykgewotCWlmICh4LT5xc2l6ZSA+IDEwMjQqMTAyNCkKLQkgICAgeC0+
cXNpemUgPSAxMDI0KjEwMjQgOwotICAgIH0gZWxzZSB7Ci0JaWYgKHgtPnFz
aXplID09IDApCi0JICAgIHgtPnFzaXplID0gNTAgOwotCWlmICh4LT5xc2l6
ZSA+IDEwMCkKLQkgICAgeC0+cXNpemUgPSA1MCA7Ci0gICAgfQotICAgIC8q
IGNvbmZpZ3VyaW5nIFJFRCAqLwotICAgIGlmICggeC0+ZmxhZ3NfZnMgJiBE
Tl9JU19SRUQgKQotCWNvbmZpZ19yZWQoc3JjLCB4KSA7ICAgIC8qIFhYWCBz
aG91bGQgY2hlY2sgZXJyb3JzICovCisJeC0+ZmxhZ3NfZnMgPSBzcmMtPmZs
YWdzX2ZzOworCXgtPnFzaXplID0gc3JjLT5xc2l6ZTsKKwl4LT5wbHIgPSBz
cmMtPnBscjsKKwl4LT5mbG93X21hc2sgPSBzcmMtPmZsb3dfbWFzazsKKwlp
ZiAoeC0+ZmxhZ3NfZnMgJiBETl9RU0laRV9JU19CWVRFUykgeworCQlpZiAo
eC0+cXNpemUgPiAxMDI0ICogMTAyNCkKKwkJCXgtPnFzaXplID0gMTAyNCAq
IDEwMjQ7CisJfSBlbHNlIHsKKwkJaWYgKHgtPnFzaXplID09IDApCisJCQl4
LT5xc2l6ZSA9IDUwOworCQlpZiAoeC0+cXNpemUgPiAxMDApCisJCQl4LT5x
c2l6ZSA9IDUwOworCX0KKwkvKiBDb25maWd1cmluZyBSRUQuICovCisJaWYg
KHgtPmZsYWdzX2ZzICYgRE5fSVNfUkVEKQorCQljb25maWdfcmVkKHNyYywg
eCk7CS8qIFhYWCBzaG91bGQgY2hlY2sgZXJyb3JzICovCiB9CiAKIC8qCi0g
KiBzZXR1cCBwaXBlIG9yIHF1ZXVlIHBhcmFtZXRlcnMuCisgKiBTZXR1cCBw
aXBlIG9yIHF1ZXVlIHBhcmFtZXRlcnMuCiAgKi8KLQogc3RhdGljIGludAog
Y29uZmlnX3BpcGUoc3RydWN0IGRuX3BpcGUgKnApCiB7Ci0gICAgc3RydWN0
IGRuX2Zsb3dfc2V0ICpwZnMgPSAmKHAtPmZzKTsKLSAgICBzdHJ1Y3QgZG5f
Zmxvd19xdWV1ZSAqcTsKLSAgICBpbnQgaSwgZXJyb3I7Ci0KLSAgICAvKgot
ICAgICAqIFRoZSBjb25maWcgcHJvZ3JhbSBwYXNzZXMgcGFyYW1ldGVycyBh
cyBmb2xsb3dzOgotICAgICAqIGJ3ID0gYml0cy9zZWNvbmQgKDAgbWVhbnMg
bm8gbGltaXRzKSwKLSAgICAgKiBkZWxheSA9IG1zLCBtdXN0IGJlIHRyYW5z
bGF0ZWQgaW50byB0aWNrcy4KLSAgICAgKiBxc2l6ZSA9IHNsb3RzL2J5dGVz
Ci0gICAgICovCi0gICAgcC0+ZGVsYXkgPSAoIHAtPmRlbGF5ICogaHogKSAv
IDEwMDAgOwotICAgIC8qIFdlIG5lZWQgZWl0aGVyIGEgcGlwZSBudW1iZXIg
b3IgYSBmbG93X3NldCBudW1iZXIgKi8KLSAgICBpZiAocC0+cGlwZV9uciA9
PSAwICYmIHBmcy0+ZnNfbnIgPT0gMCkKLQlyZXR1cm4gRUlOVkFMIDsKLSAg
ICBpZiAocC0+cGlwZV9uciAhPSAwICYmIHBmcy0+ZnNfbnIgIT0gMCkKLQly
ZXR1cm4gRUlOVkFMIDsKLSAgICBpZiAocC0+cGlwZV9uciAhPSAwKSB7IC8q
IHRoaXMgaXMgYSBwaXBlICovCi0Jc3RydWN0IGRuX3BpcGUgKnBpcGU7CisJ
c3RydWN0IGRuX2Zsb3dfc2V0ICpwZnMgPSAmKHAtPmZzKTsKKwlzdHJ1Y3Qg
ZG5fZmxvd19xdWV1ZSAqcTsKKwlpbnQgaSwgZXJyb3I7CiAKLQlEVU1NWU5F
VF9MT0NLKCk7Ci0JcGlwZSA9IGxvY2F0ZV9waXBlKHAtPnBpcGVfbnIpOwkv
KiBsb2NhdGUgcGlwZSAqLwotCi0JaWYgKHBpcGUgPT0gTlVMTCkgewkvKiBu
ZXcgcGlwZSAqLwotCSAgICBwaXBlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
ZG5fcGlwZSksIE1fRFVNTVlORVQsCi0JICAgICAgICBNX05PV0FJVCB8IE1f
WkVSTyk7Ci0JICAgIGlmIChwaXBlID09IE5VTEwpIHsKLQkgICAgCURVTU1Z
TkVUX1VOTE9DSygpOwotCQlwcmludGYoImR1bW15bmV0OiBubyBtZW1vcnkg
Zm9yIG5ldyBwaXBlXG4iKTsKLQkJcmV0dXJuIChFTk9NRU0pOwotCSAgICB9
Ci0JICAgIHBpcGUtPnBpcGVfbnIgPSBwLT5waXBlX25yOwotCSAgICBwaXBl
LT5mcy5waXBlID0gcGlwZSA7Ci0JICAgIC8qIGlkbGVfaGVhcCBpcyB0aGUg
b25seSBvbmUgZnJvbSB3aGljaCB3ZSBleHRyYWN0IGZyb20gdGhlIG1pZGRs
ZS4KLQkgICAgICovCi0JICAgIHBpcGUtPmlkbGVfaGVhcC5zaXplID0gcGlw
ZS0+aWRsZV9oZWFwLmVsZW1lbnRzID0gMCA7Ci0JICAgIHBpcGUtPmlkbGVf
aGVhcC5vZmZzZXQ9T0ZGU0VUX09GKHN0cnVjdCBkbl9mbG93X3F1ZXVlLCBo
ZWFwX3Bvcyk7Ci0JfSBlbHNlCi0JICAgIC8qIEZsdXNoIGFjY3VtdWxhdGVk
IGNyZWRpdCBmb3IgYWxsIHF1ZXVlcyAqLwotCSAgICBmb3IgKGkgPSAwOyBp
IDw9IHBpcGUtPmZzLnJxX3NpemU7IGkrKykKLQkJZm9yIChxID0gcGlwZS0+
ZnMucnFbaV07IHE7IHEgPSBxLT5uZXh0KQotCQkgICAgcS0+bnVtYnl0ZXMg
PSAwOwotCi0JcGlwZS0+YmFuZHdpZHRoID0gcC0+YmFuZHdpZHRoIDsKLQlw
aXBlLT5udW1ieXRlcyA9IDA7IC8qIGp1c3QgaW4gY2FzZS4uLiAqLwotCWJj
b3B5KHAtPmlmX25hbWUsIHBpcGUtPmlmX25hbWUsIHNpemVvZihwLT5pZl9u
YW1lKSApOwotCXBpcGUtPmlmcCA9IE5VTEwgOyAvKiByZXNldCBpbnRlcmZh
Y2UgcHRyICovCi0JcGlwZS0+ZGVsYXkgPSBwLT5kZWxheSA7Ci0Jc2V0X2Zz
X3Bhcm1zKCYocGlwZS0+ZnMpLCBwZnMpOwotCi0KLQlpZiAocGlwZS0+ZnMu
cnEgPT0gTlVMTCkgewkvKiBhIG5ldyBwaXBlICovCi0JICAgIGVycm9yID0g
YWxsb2NfaGFzaCgmKHBpcGUtPmZzKSwgcGZzKTsKLQkgICAgaWYgKGVycm9y
KSB7CisJLyoKKwkgKiBUaGUgY29uZmlnIHByb2dyYW0gcGFzc2VzIHBhcmFt
ZXRlcnMgYXMgZm9sbG93czoKKwkgKiBidyA9IGJpdHMvc2Vjb25kICgwIG1l
YW5zIG5vIGxpbWl0cyksCisJICogZGVsYXkgPSBtcywgbXVzdCBiZSB0cmFu
c2xhdGVkIGludG8gdGlja3MuCisJICogcXNpemUgPSBzbG90cy9ieXRlcwor
CSAqLworCXAtPmRlbGF5ID0gKHAtPmRlbGF5ICogaHopIC8gMTAwMDsKKwkv
KiBXZSBuZWVkIGVpdGhlciBhIHBpcGUgbnVtYmVyIG9yIGEgZmxvd19zZXQg
bnVtYmVyLiAqLworCWlmIChwLT5waXBlX25yID09IDAgJiYgcGZzLT5mc19u
ciA9PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJaWYgKHAtPnBpcGVfbnIg
IT0gMCAmJiBwZnMtPmZzX25yICE9IDApCisJCXJldHVybiAoRUlOVkFMKTsK
KwlpZiAocC0+cGlwZV9uciAhPSAwKSB7CQkJLyogdGhpcyBpcyBhIHBpcGUg
Ki8KKwkJc3RydWN0IGRuX3BpcGUgKnBpcGU7CisKKwkJRFVNTVlORVRfTE9D
SygpOworCQlwaXBlID0gbG9jYXRlX3BpcGUocC0+cGlwZV9ucik7CS8qIGxv
Y2F0ZSBwaXBlICovCisKKwkJaWYgKHBpcGUgPT0gTlVMTCkgewkJLyogbmV3
IHBpcGUgKi8KKwkJCXBpcGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbl9w
aXBlKSwgTV9EVU1NWU5FVCwKKwkJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7
CisJCQlpZiAocGlwZSA9PSBOVUxMKSB7CisJCQkJRFVNTVlORVRfVU5MT0NL
KCk7CisJCQkJcHJpbnRmKCJkdW1teW5ldDogbm8gbWVtb3J5IGZvciBuZXcg
cGlwZVxuIik7CisJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJfQorCQkJcGlw
ZS0+cGlwZV9uciA9IHAtPnBpcGVfbnI7CisJCQlwaXBlLT5mcy5waXBlID0g
cGlwZTsKKwkJCS8qCisJCQkgKiBpZGxlX2hlYXAgaXMgdGhlIG9ubHkgb25l
IGZyb20gd2hpY2gKKwkJCSAqIHdlIGV4dHJhY3QgZnJvbSB0aGUgbWlkZGxl
LgorCQkJICovCisJCQlwaXBlLT5pZGxlX2hlYXAuc2l6ZSA9IHBpcGUtPmlk
bGVfaGVhcC5lbGVtZW50cyA9IDA7CisJCQlwaXBlLT5pZGxlX2hlYXAub2Zm
c2V0ID0KKwkJCSAgICBPRkZTRVRfT0Yoc3RydWN0IGRuX2Zsb3dfcXVldWUs
IGhlYXBfcG9zKTsKKwkJfSBlbHNlCisJCQkvKiBGbHVzaCBhY2N1bXVsYXRl
ZCBjcmVkaXQgZm9yIGFsbCBxdWV1ZXMuICovCisJCQlmb3IgKGkgPSAwOyBp
IDw9IHBpcGUtPmZzLnJxX3NpemU7IGkrKykKKwkJCQlmb3IgKHEgPSBwaXBl
LT5mcy5ycVtpXTsgcTsgcSA9IHEtPm5leHQpCisJCQkJCXEtPm51bWJ5dGVz
ID0gMDsKKworCQlwaXBlLT5iYW5kd2lkdGggPSBwLT5iYW5kd2lkdGg7CisJ
CXBpcGUtPm51bWJ5dGVzID0gMDsJCS8qIGp1c3QgaW4gY2FzZS4uLiAqLwor
CQliY29weShwLT5pZl9uYW1lLCBwaXBlLT5pZl9uYW1lLCBzaXplb2YocC0+
aWZfbmFtZSkpOworCQlwaXBlLT5pZnAgPSBOVUxMOwkJLyogcmVzZXQgaW50
ZXJmYWNlIHB0ciAqLworCQlwaXBlLT5kZWxheSA9IHAtPmRlbGF5OworCQlz
ZXRfZnNfcGFybXMoJihwaXBlLT5mcyksIHBmcyk7CisKKwkJaWYgKHBpcGUt
PmZzLnJxID09IE5VTEwpIHsJLyogYSBuZXcgcGlwZSAqLworCQkJZXJyb3Ig
PSBhbGxvY19oYXNoKCYocGlwZS0+ZnMpLCBwZnMpOworCQkJaWYgKGVycm9y
KSB7CisJCQkJRFVNTVlORVRfVU5MT0NLKCk7CisJCQkJZnJlZShwaXBlLCBN
X0RVTU1ZTkVUKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJCVNM
SVNUX0lOU0VSVF9IRUFEKCZwaXBlaGFzaFtIQVNIKHBpcGUtPnBpcGVfbnIp
XSwKKwkJCSAgICBwaXBlLCBuZXh0KTsKKwkJfQogCQlEVU1NWU5FVF9VTkxP
Q0soKTsKLQkJZnJlZShwaXBlLCBNX0RVTU1ZTkVUKTsKLQkJcmV0dXJuIChl
cnJvcik7Ci0JICAgIH0KLQkgICAgU0xJU1RfSU5TRVJUX0hFQUQoJnBpcGVo
YXNoW0hBU0gocGlwZS0+cGlwZV9ucildLCBwaXBlLCBuZXh0KTsKLQl9Ci0J
RFVNTVlORVRfVU5MT0NLKCk7Ci0gICAgfSBlbHNlIHsgLyogY29uZmlnIHF1
ZXVlICovCi0Jc3RydWN0IGRuX2Zsb3dfc2V0ICpmczsKKwl9IGVsc2UgewkJ
CQkvKiBjb25maWcgcXVldWUgKi8KKwkJc3RydWN0IGRuX2Zsb3dfc2V0ICpm
czsKIAotCURVTU1ZTkVUX0xPQ0soKTsKLQlmcyA9IGxvY2F0ZV9mbG93c2V0
KHBmcy0+ZnNfbnIpOyAvKiBsb2NhdGUgZmxvd19zZXQgKi8KKwkJRFVNTVlO
RVRfTE9DSygpOworCQlmcyA9IGxvY2F0ZV9mbG93c2V0KHBmcy0+ZnNfbnIp
OyAvKiBsb2NhdGUgZmxvd19zZXQgKi8KIAotCWlmIChmcyA9PSBOVUxMKSB7
CS8qIG5ldyAqLwotCSAgICBpZiAocGZzLT5wYXJlbnRfbnIgPT0gMCkgewkv
KiBuZWVkIGxpbmsgdG8gYSBwaXBlICovCi0JICAgIAlEVU1NWU5FVF9VTkxP
Q0soKTsKLQkJcmV0dXJuIEVJTlZBTCA7Ci0JICAgIH0KLQkgICAgZnMgPSBt
YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbl9mbG93X3NldCksIE1fRFVNTVlORVQs
Ci0JCU1fTk9XQUlUfE1fWkVSTyk7Ci0JICAgIGlmIChmcyA9PSBOVUxMKSB7
Ci0JCURVTU1ZTkVUX1VOTE9DSygpOwotCQlwcmludGYoImR1bW15bmV0OiBu
byBtZW1vcnkgZm9yIG5ldyBmbG93X3NldFxuIik7Ci0JCXJldHVybiAoRU5P
TUVNKTsKLQkgICAgfQotCSAgICBmcy0+ZnNfbnIgPSBwZnMtPmZzX25yOwot
CSAgICBmcy0+cGFyZW50X25yID0gcGZzLT5wYXJlbnRfbnI7Ci0JICAgIGZz
LT53ZWlnaHQgPSBwZnMtPndlaWdodDsKLQkgICAgaWYgKGZzLT53ZWlnaHQg
PT0gMCkKLQkJZnMtPndlaWdodCA9IDE7Ci0JICAgIGVsc2UgaWYgKGZzLT53
ZWlnaHQgPiAxMDApCi0JCWZzLT53ZWlnaHQgPSAxMDA7Ci0JfSBlbHNlIHsK
LQkgICAgLyogQ2hhbmdlIHBhcmVudCBwaXBlIG5vdCBhbGxvd2VkOyBtdXN0
IGRlbGV0ZSBhbmQgcmVjcmVhdGUgKi8KLQkgICAgaWYgKHBmcy0+cGFyZW50
X25yICE9IDAgJiYgZnMtPnBhcmVudF9uciAhPSBwZnMtPnBhcmVudF9ucikg
ewotCSAgICAJRFVNTVlORVRfVU5MT0NLKCk7Ci0JCXJldHVybiBFSU5WQUwg
OwotCSAgICB9Ci0JfQotCXNldF9mc19wYXJtcyhmcywgcGZzKTsKKwkJaWYg
KGZzID09IE5VTEwpIHsJCS8qIG5ldyAqLworCQkJaWYgKHBmcy0+cGFyZW50
X25yID09IDApIHsgLyogbmVlZCBsaW5rIHRvIGEgcGlwZSAqLworCQkJCURV
TU1ZTkVUX1VOTE9DSygpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0K
KwkJCWZzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG5fZmxvd19zZXQpLCBN
X0RVTU1ZTkVULAorCQkJICAgIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJCWlm
IChmcyA9PSBOVUxMKSB7CisJCQkJRFVNTVlORVRfVU5MT0NLKCk7CisJCQkJ
cHJpbnRmKAorCQkJCSAgICAiZHVtbXluZXQ6IG5vIG1lbW9yeSBmb3IgbmV3
IGZsb3dfc2V0XG4iKTsKKwkJCQlyZXR1cm4gKEVOT01FTSk7CisJCQl9CisJ
CQlmcy0+ZnNfbnIgPSBwZnMtPmZzX25yOworCQkJZnMtPnBhcmVudF9uciA9
IHBmcy0+cGFyZW50X25yOworCQkJZnMtPndlaWdodCA9IHBmcy0+d2VpZ2h0
OworCQkJaWYgKGZzLT53ZWlnaHQgPT0gMCkKKwkJCQlmcy0+d2VpZ2h0ID0g
MTsKKwkJCWVsc2UgaWYgKGZzLT53ZWlnaHQgPiAxMDApCisJCQkJZnMtPndl
aWdodCA9IDEwMDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2Ug
cGFyZW50IHBpcGUgbm90IGFsbG93ZWQ7CisJCQkgKiBtdXN0IGRlbGV0ZSBh
bmQgcmVjcmVhdGUuCisJCQkgKi8KKwkJCWlmIChwZnMtPnBhcmVudF9uciAh
PSAwICYmCisJCQkgICAgZnMtPnBhcmVudF9uciAhPSBwZnMtPnBhcmVudF9u
cikgeworCQkJCURVTU1ZTkVUX1VOTE9DSygpOworCQkJCXJldHVybiAoRUlO
VkFMKTsKKwkJCX0KKwkJfQorCisJCXNldF9mc19wYXJtcyhmcywgcGZzKTsK
IAotCWlmIChmcy0+cnEgPT0gTlVMTCkgewkvKiBhIG5ldyBmbG93X3NldCAq
LwotCSAgICBlcnJvciA9IGFsbG9jX2hhc2goZnMsIHBmcyk7Ci0JICAgIGlm
IChlcnJvcikgeworCQlpZiAoZnMtPnJxID09IE5VTEwpIHsJCS8qIGEgbmV3
IGZsb3dfc2V0ICovCisJCQllcnJvciA9IGFsbG9jX2hhc2goZnMsIHBmcyk7
CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlEVU1NWU5FVF9VTkxPQ0soKTsKKwkJ
CQlmcmVlKGZzLCBNX0RVTU1ZTkVUKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsK
KwkJCX0KKwkJCVNMSVNUX0lOU0VSVF9IRUFEKCZmbG93c2V0aGFzaFtIQVNI
KGZzLT5mc19ucildLAorCQkJICAgIGZzLCBuZXh0KTsKKwkJfQogCQlEVU1N
WU5FVF9VTkxPQ0soKTsKLQkJZnJlZShmcywgTV9EVU1NWU5FVCk7Ci0JCXJl
dHVybiAoZXJyb3IpOwotCSAgICB9Ci0JICAgIFNMSVNUX0lOU0VSVF9IRUFE
KCZmbG93c2V0aGFzaFtIQVNIKGZzLT5mc19ucildLCBmcywgbmV4dCk7CiAJ
fQotCURVTU1ZTkVUX1VOTE9DSygpOwotICAgIH0KLSAgICByZXR1cm4gMCA7
CisJcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTIwNDYsNDYgKzIxMzksNTkg
QEAKIHN0YXRpYyB2b2lkCiBpcF9kbl9pbml0KHZvaWQpCiB7Ci0gICAgaW50
IGk7CisJaW50IGk7CiAKLSAgICBpZiAoYm9vdHZlcmJvc2UpCi0JICAgIHBy
aW50ZigiRFVNTVlORVQgd2l0aCBJUHY2IGluaXRpYWxpemVkICgwNDA4MjYp
XG4iKTsKKwlpZiAoYm9vdHZlcmJvc2UpCisJCXByaW50ZigiRFVNTVlORVQg
d2l0aCBJUHY2IGluaXRpYWxpemVkICgwNDA4MjYpXG4iKTsKIAotICAgIERV
TU1ZTkVUX0xPQ0tfSU5JVCgpOworCURVTU1ZTkVUX0xPQ0tfSU5JVCgpOwog
Ci0gICAgZm9yIChpID0gMDsgaSA8IEhBU0hTSVpFOyBpKyspIHsKLQlTTElT
VF9JTklUKCZwaXBlaGFzaFtpXSk7Ci0JU0xJU1RfSU5JVCgmZmxvd3NldGhh
c2hbaV0pOwotICAgIH0KLSAgICByZWFkeV9oZWFwLnNpemUgPSByZWFkeV9o
ZWFwLmVsZW1lbnRzID0gMCA7Ci0gICAgcmVhZHlfaGVhcC5vZmZzZXQgPSAw
IDsKKwlmb3IgKGkgPSAwOyBpIDwgSEFTSFNJWkU7IGkrKykgeworCQlTTElT
VF9JTklUKCZwaXBlaGFzaFtpXSk7CisJCVNMSVNUX0lOSVQoJmZsb3dzZXRo
YXNoW2ldKTsKKwl9CisJcmVhZHlfaGVhcC5zaXplID0gcmVhZHlfaGVhcC5l
bGVtZW50cyA9IDA7CisJcmVhZHlfaGVhcC5vZmZzZXQgPSAwOworCisJd2Zx
X3JlYWR5X2hlYXAuc2l6ZSA9IHdmcV9yZWFkeV9oZWFwLmVsZW1lbnRzID0g
MDsKKwl3ZnFfcmVhZHlfaGVhcC5vZmZzZXQgPSAwOwogCi0gICAgd2ZxX3Jl
YWR5X2hlYXAuc2l6ZSA9IHdmcV9yZWFkeV9oZWFwLmVsZW1lbnRzID0gMCA7
Ci0gICAgd2ZxX3JlYWR5X2hlYXAub2Zmc2V0ID0gMCA7CisJZXh0cmFjdF9o
ZWFwLnNpemUgPSBleHRyYWN0X2hlYXAuZWxlbWVudHMgPSAwOworCWV4dHJh
Y3RfaGVhcC5vZmZzZXQgPSAwOwogCi0gICAgZXh0cmFjdF9oZWFwLnNpemUg
PSBleHRyYWN0X2hlYXAuZWxlbWVudHMgPSAwIDsKLSAgICBleHRyYWN0X2hl
YXAub2Zmc2V0ID0gMCA7CisJaXBfZG5fY3RsX3B0ciA9IGlwX2RuX2N0bDsK
KwlpcF9kbl9pb19wdHIgPSBkdW1teW5ldF9pbzsKKwlpcF9kbl9ydWxlZGVs
X3B0ciA9IGRuX3J1bGVfZGVsZXRlOwogCi0gICAgaXBfZG5fY3RsX3B0ciA9
IGlwX2RuX2N0bDsKLSAgICBpcF9kbl9pb19wdHIgPSBkdW1teW5ldF9pbzsK
LSAgICBpcF9kbl9ydWxlZGVsX3B0ciA9IGRuX3J1bGVfZGVsZXRlOworCVRB
U0tfSU5JVCgmZG5fdGFzaywgMCwgZHVtbXluZXRfdGFzaywgTlVMTCk7CisJ
ZG5fdHEgPSB0YXNrcXVldWVfY3JlYXRlX2Zhc3QoImR1bW15bmV0IiwgTV9O
T1dBSVQsCisJICAgIHRhc2txdWV1ZV90aHJlYWRfZW5xdWV1ZSwgJmRuX3Rx
KTsKKwl0YXNrcXVldWVfc3RhcnRfdGhyZWFkcygmZG5fdHEsIDEsIFBJX05F
VCwgImR1bW15bmV0Iik7CiAKLSAgICBjYWxsb3V0X2luaXQoJmRuX3RpbWVv
dXQsIE5FVF9DQUxMT1VUX01QU0FGRSk7Ci0gICAgY2FsbG91dF9yZXNldCgm
ZG5fdGltZW91dCwgMSwgZHVtbXluZXQsIE5VTEwpOworCWNhbGxvdXRfaW5p
dCgmZG5fdGltZW91dCwgTkVUX0NBTExPVVRfTVBTQUZFKTsKKwljYWxsb3V0
X3Jlc2V0KCZkbl90aW1lb3V0LCAxLCBkdW1teW5ldCwgTlVMTCk7CisKKwkv
KiBJbml0aWFsaXplIGN1cnJfdGltZSBhZGp1c3RtZW50IG1lY2hhbmljcy4g
Ki8KKwlnZXRtaWNyb3VwdGltZSgmcHJldl90KTsKIH0KIAogI2lmZGVmIEtM
RF9NT0RVTEUKIHN0YXRpYyB2b2lkCiBpcF9kbl9kZXN0cm95KHZvaWQpCiB7
Ci0gICAgaXBfZG5fY3RsX3B0ciA9IE5VTEw7Ci0gICAgaXBfZG5faW9fcHRy
ID0gTlVMTDsKLSAgICBpcF9kbl9ydWxlZGVsX3B0ciA9IE5VTEw7CisJaXBf
ZG5fY3RsX3B0ciA9IE5VTEw7CisJaXBfZG5faW9fcHRyID0gTlVMTDsKKwlp
cF9kbl9ydWxlZGVsX3B0ciA9IE5VTEw7CisKKwlEVU1NWU5FVF9MT0NLKCk7
CisJY2FsbG91dF9zdG9wKCZkbl90aW1lb3V0KTsKKwlEVU1NWU5FVF9VTkxP
Q0soKTsKKwl0YXNrcXVldWVfZHJhaW4oZG5fdHEsICZkbl90YXNrKTsKKwl0
YXNrcXVldWVfZnJlZShkbl90cSk7CiAKLSAgICBjYWxsb3V0X3N0b3AoJmRu
X3RpbWVvdXQpOwotICAgIGR1bW15bmV0X2ZsdXNoKCk7CisJZHVtbXluZXRf
Zmx1c2goKTsKIAotICAgIERVTU1ZTkVUX0xPQ0tfREVTVFJPWSgpOworCURV
TU1ZTkVUX0xPQ0tfREVTVFJPWSgpOwogfQogI2VuZGlmIC8qIEtMRF9NT0RV
TEUgKi8KIAo=

--8323328-408138819-1207118945=:31340--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1JgwmP-0004UL-Eo>