<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>68421</bug_id>
          
          <creation_ts>2004-10-21 10:23 0000</creation_ts>
          <short_desc>Local Kernel DoS (CAN-2004-0814)</short_desc>
          <delta_ts>2009-05-03 21:42:41 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Security</product>
          <component>Kernel</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          <bug_file_loc>http://www.securityfocus.com/archive/1/379005/2004-10-18/2004-10-24/0</bug_file_loc>
          <status_whiteboard>[linux &lt;2.4.28] [linux &gt;=2.6 &lt;2.6.9]</status_whiteboard>
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>hanno@gentoo.org</reporter>
          <assigned_to>security@gentoo.org</assigned_to>
          <cc>dsd@gentoo.org</cc>
    
    <cc>hardened-kernel@gentoo.org</cc>
    
    <cc>hp-cluster@gentoo.org</cc>
    
    <cc>kang@gentoo.org</cc>
    
    <cc>plasmaroo@gentoo.org</cc>
    
    <cc>scox@sig11.org</cc>

      

      
          <long_desc isprivate="0">
            <who>hanno@gentoo.org</who>
            <bug_when>2004-10-21 10:23:50 0000</bug_when>
            <thetext>Alan Cox reported two kernel-bugs in &lt; 2.6.9 (reported as CAN-2004-0814, but that isn&apos;t public yet).
It can be used to crash the system as a local user and can cause a lock through ppp.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2004-11-09 08:33:49 0000</bug_when>
            <thetext>Moving to newly-created kernel-specific category</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>plasmaroo@gentoo.org</who>
            <bug_when>2004-11-09 14:31:15 0000</bug_when>
            <thetext>Ok, all patched. The following are externally maintained, so I&apos;m CCing the relevant maintainers. Patches are at http://dev.gentoo.org/~plasmaroo/patches/kernel/misc/security...

grsec-sources -- Adding solar.
hardened-dev-sources -- Adding Gentoo/Hardened team.
hardened-sources -- Adding scox.
hppa(-dev)-sources -- Adding GMSoft.
mips-sources -- Adding `Kumba.
openmosix-sources -- Adding cluster herd.
rsbac(-dev)-sources -- Adding kang.
selinux-sources -- Adding pebenito.
sparc-sources -- Adding Joker.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2004-11-09 23:57:45 0000</bug_when>
            <thetext>I get patch failures with these and the places where it fails I&apos;m not sure I&apos;m the best man for editing and ensureing that said code will function correctly. When it comes time for a GLSA. I guess you can mask grsec-sources or something cuz I&apos;m going to wait for 2.4.28 and let this bug resolve itself... Oh hurry up 2.4.28 tree I&apos;m sick of patching 2.4.27...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>voxus@gentoo.org</who>
            <bug_when>2004-11-10 01:30:14 0000</bug_when>
            <thetext>openmosix-sources patched.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>joker@gentoo.org</who>
            <bug_when>2004-11-10 09:27:19 0000</bug_when>
            <thetext>Fixed in sparc-sources-2.4.27-r2</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pebenito@gentoo.org</who>
            <bug_when>2004-11-10 09:47:55 0000</bug_when>
            <thetext>selinux-sources p.mask&apos;ed as it will be removed soon</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2004-11-11 12:59:57 0000</bug_when>
            <thetext>grsec kernel patched as sys-kernel/grsec-sources-2.4.27.2.0.1-r3
Sent the patch to the mirrors as 22860b67a043f4f2d601eab21fb3cfaf  /usr/portage/distfiles/grsec-sources-2.4.27-CAN-2004-0814.patch.bz2

scox: the above patch should work for hardened-sources as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kumba@gentoo.org</who>
            <bug_when>2004-11-19 18:07:11 0000</bug_when>
            <thetext>mips-sources updated.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>eradicator@gentoo.org</who>
            <bug_when>2004-11-23 13:52:18 0000</bug_when>
            <thetext>plasmaroo, your linux-2.6.7-CAN-2004-0814.patch is missing this:
--- linux-2.6.7-1140_CAN-2004-0814/drivers/char/tty_ioctl.c     2004-11-23 13:23:23.000000000 -0800
+++ linux-2.6.7-1140_CAN-2004-0814.fixed/drivers/char/tty_ioctl.c       2004-11-23 13:24:43.123269616 -0800
@@ -293,6 +293,7 @@
        int retval;
        struct sgttyb tmp;
        struct termios termios;
+       unsigned long flags;
 
        retval = tty_check_change(tty);
        if (retval)
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>eradicator@gentoo.org</who>
            <bug_when>2004-11-23 13:53:03 0000</bug_when>
            <thetext>Created an attachment (id=44603)
1140_CAN-2004-0814.patch-r1 - 2.6.7 patch with added hunk

This applies cleanly against vanilla 2.6.7 and was updated from the 
patch in genpatches-2.6-7.47</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>plasmaroo@gentoo.org</who>
            <bug_when>2004-11-23 14:13:37 0000</bug_when>
            <thetext>Kumba, you will need to add the updated 2.6.7 patch (on this bug or on my devspace) to the 2.6.7 mips-sources. Thanks for the update, Jeremy.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>gmsoft@gentoo.org</who>
            <bug_when>2004-11-24 09:39:02 0000</bug_when>
            <thetext>hppa-(dev-)sources done.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jaervosz@gentoo.org</who>
            <bug_when>2004-11-27 07:12:28 0000</bug_when>
            <thetext>Kumba please see comment #11</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>eradicator@gentoo.org</who>
            <bug_when>2004-11-28 04:54:11 0000</bug_when>
            <thetext>Created an attachment (id=44858)
ditto for the 2.6.8 patch

I was just messing around with g-d-s-2.6.8, and I noticed the same thing with
your  2.6.8.1 patch...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>tocharian@gentoo.org</who>
            <bug_when>2004-11-28 11:50:15 0000</bug_when>
            <thetext>hardened-sources-2.4.28 ~arch in tree</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kang@gentoo.org</who>
            <bug_when>2004-11-28 15:52:39 0000</bug_when>
            <thetext>rsba-sources bumped to 2.4.28 (~x86)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kumba@gentoo.org</who>
            <bug_when>2004-12-01 03:24:28 0000</bug_when>
            <thetext>mips-sources fixed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>plasmaroo@gentoo.org</who>
            <bug_when>2004-12-01 11:49:32 0000</bug_when>
            <thetext>GMSoft: 2.6.8.1 needs an updated patch, please see attachment #44858 on this bug.

Hardened herd: Only hardened-dev-sources is left for this bug. Some swift action would be appreciated since this is blocking the GLSA. We may need to mask if this issue is not dealt with quickly. Thanks!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>tocharian@gentoo.org</who>
            <bug_when>2004-12-01 13:08:16 0000</bug_when>
            <thetext>Fixed in stable hardened-dev-sources-r16</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>gmsoft@gentoo.org</who>
            <bug_when>2004-12-08 09:14:35 0000</bug_when>
            <thetext>Patch updated for hppa-dev-sources.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>plasmaroo@gentoo.org</who>
            <bug_when>2004-12-20 14:31:09 0000</bug_when>
            <thetext>Kang: rsbac-dev-sources still needs fixing on this one...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>kang@gentoo.org</who>
            <bug_when>2005-01-13 16:00:18 0000</bug_when>
            <thetext>rsbac-dev-sources was fixed too</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>plasmaroo@gentoo.org</who>
            <bug_when>2005-01-15 14:36:52 0000</bug_when>
            <thetext>All kernels fixed, closing bug; notifications are being migrated away from GLSAs for kernels, more news coming soon so stay tuned :-]</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44603</attachid>
            <date>2004-11-23 13:53 0000</date>
            <desc>1140_CAN-2004-0814.patch-r1 - 2.6.7 patch with added hunk</desc>
            <filename>1140_CAN-2004-0814.patch-r1</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9Eb2N1bWVudGF0aW9uL3R0eS50eHQgbGludXgtMi42Ljct
MTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL0RvY3VtZW50YXRpb24vdHR5LnR4dAotLS0gbGludXgt
Mi42LjcvRG9jdW1lbnRhdGlvbi90dHkudHh0CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAw
IC0wODAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvRG9jdW1lbnRh
dGlvbi90dHkudHh0CTIwMDQtMTEtMjMgMTM6MjM6MjIuMDAwMDAwMDAwIC0wODAwCkBAIC0wLDAg
KzEsMTk0IEBACisKKwkJCVRoZSBMb2Nrcm9ub21pY29uCisKK1lvdXIgZ3VpZGUgdG8gdGhlIGFu
Y2llbnQgYW5kIHR3aXN0ZWQgbG9ja2luZyBwb2xpY2llcyBvZiB0aGUgdHR5IGxheWVyIGFuZAor
dGhlIHdhcnBlZCBsb2dpYyBiZWhpbmQgdGhlbS4gQmV3YXJlIGFsbCB5ZSB3aG8gcmVhZCBvbi4K
KworRklYTUU6IHN0aWxsIG5lZWQgdG8gd29yayBvdXQgdGhlIGZ1bGwgc2V0IG9mIEJLTCBhc3N1
bXB0aW9ucyBhbmQgZG9jdW1lbnQKK3RoZW0gc28gdGhleSBjYW4gZXZlbnR1YWxseSBiZSBraWxs
ZWQgb2ZmLgorCisKK0xpbmUgRGlzY2lwbGluZQorLS0tLS0tLS0tLS0tLS0tCisKK0xpbmUgZGlz
Y2lwbGluZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0dHlfcmVnaXN0ZXJfbGRpc2MoKSBwYXNzaW5n
IHRoZQorZGlzY2lwbGluZSBudW1iZXIgYW5kIHRoZSBsZGlzYyBzdHJ1Y3R1cmUuIEF0IHRoZSBw
b2ludCBvZiByZWdpc3RyYXRpb24gdGhlIAorZGlzY2lwbGluZSBtdXN0IGJlIHJlYWR5IHRvIHVz
ZSBhbmQgaXQgaXMgcG9zc2libGUgaXQgd2lsbCBnZXQgdXNlZCBiZWZvcmUKK3RoZSBjYWxsIHJl
dHVybnMgc3VjY2Vzcy4gSWYgdGhlIGNhbGwgcmV0dXJucyBhbiBlcnJvciB0aGVuIGl0IHdvbid0
IGdldAorY2FsbGVkLiBEbyBub3QgcmUtdXNlIGxkaXNjIG51bWJlcnMgYXMgdGhleSBhcmUgcGFy
dCBvZiB0aGUgdXNlcnNwYWNlIEFCSQorYW5kIHdyaXRpbmcgb3ZlciBhbiBleGlzdGluZyBsZGlz
YyB3aWxsIGNhdXNlIGRlbW9ucyB0byBlYXQgeW91ciBjb21wdXRlci4KK0FmdGVyIHRoZSByZXR1
cm4gdGhlIGxkaXNjIGRhdGEgaGFzIGJlZW4gY29waWVkIHNvIHlvdSBtYXkgZnJlZSB5b3VyIG93
biAKK2NvcHkgb2YgdGhlIHN0cnVjdHVyZS4gWW91IG11c3Qgbm90IHJlLXJlZ2lzdGVyIG92ZXIg
dGhlIHRvcCBvZiB0aGUgbGluZQorZGlzY2lwbGluZSBldmVuIHdpdGggdGhlIHNhbWUgZGF0YSBv
ciB5b3VyIGNvbXB1dGVyIGFnYWluIHdpbGwgYmUgZWF0ZW4gYnkKK2RlbW9ucy4KKworSW4gb3Jk
ZXIgdG8gcmVtb3ZlIGEgbGluZSBkaXNjaXBsaW5lIGNhbGwgdHR5X3JlZ2lzdGVyX2xkaXNjIHBh
c3NpbmcgTlVMTC4KK0luIGFuY2llbnQgdGltZXMgdGhpcyBhbHdheXMgd29ya2VkLiBJbiBtb2Rl
cm4gdGltZXMgdGhlIGZ1bmN0aW9uIHdpbGwKK3JldHVybiAtRUJVU1kgaWYgdGhlIGxkaXNjIGlz
IGN1cnJlbnRseSBpbiB1c2UuIFNpbmNlIHRoZSBsZGlzYyByZWZlcmVuY2luZworY29kZSBtYW5h
Z2VzIHRoZSBtb2R1bGUgY291bnRzIHRoaXMgc2hvdWxkIG5vdCB1c3VhbGx5IGJlIGEgY29uY2Vy
bi4KKworSGVlZCB0aGlzIHdhcm5pbmc6IHRoZSByZWZlcmVuY2UgY291bnQgZmllbGQgb2YgdGhl
IHJlZ2lzdGVyZWQgY29waWVzIG9mIHRoZQordHR5X2xkaXNjIHN0cnVjdHVyZSBpbiB0aGUgbGRp
c2MgdGFibGUgY291bnRzIHRoZSBudW1iZXIgb2YgbGluZXMgdXNpbmcgdGhpcworZGlzY2lwbGlu
ZS4gVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgdHR5X2xkaXNjIHN0cnVjdHVyZSB3aXRoaW4g
YSB0dHkgCitjb3VudHMgdGhlIG51bWJlciBvZiBhY3RpdmUgdXNlcnMgb2YgdGhlIGxkaXNjIGF0
IHRoaXMgaW5zdGFudC4gSW4gZWZmZWN0IGl0Citjb3VudHMgdGhlIG51bWJlciBvZiB0aHJlYWRz
IG9mIGV4ZWN1dGlvbiB3aXRoaW4gYW4gbGRpc2MgbWV0aG9kIChwbHVzIHRob3NlCithYm91dCB0
byBlbnRlciBhbmQgZXhpdCBhbHRob3VnaCB0aGlzIGRldGFpbCBtYXR0ZXJzIG5vdCkuCisKK0xp
bmUgRGlzY2lwbGluZSBNZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUVFkgc2lk
ZSBpbnRlcmZhY2VzOgorCitjbG9zZSgpCQktCVRoaXMgaXMgY2FsbGVkIG9uIGEgdGVybWluYWwg
d2hlbiB0aGUgbGluZQorCQkJZGlzY2lwbGluZSBpcyBiZWluZyB1bnBsdWdnZWQuIEF0IHRoZSBw
b2ludCBvZgorCQkJZXhlY3V0aW9uIG5vIGZ1cnRoZXIgdXNlcnMgd2lsbCBlbnRlciB0aGUKKwkJ
CWxkaXNjIGNvZGUgZm9yIHRoaXMgdHR5LiBDYW4gc2xlZXAuCisKK29wZW4oKQkJLQlDYWxsZWQg
d2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkIHRvCisJCQl0aGUgdGVybWluYWwu
IE5vIG90aGVyIGNhbGwgaW50byB0aGUgbGluZQorCQkJZGlzY2lwbGluZSBmb3IgdGhpcyB0dHkg
d2lsbCBvY2N1ciB1bnRpbCBpdAorCQkJY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4gQ2FuIHNsZWVw
LgorCit3cml0ZSgpCQktCUEgcHJvY2VzcyBpcyB3cml0aW5nIGRhdGEgZnJvbSB1c2VyIHNwYWNl
CisJCQl0aHJvdWdoIHRoZSBsaW5lIGRpc2NpcGxpbmUuIE11bHRpcGxlIHdyaXRlIGNhbGxzCisJ
CQlhcmUgc2VyaWFsaXplZCBieSB0aGUgdHR5IGxheWVyIGZvciB0aGUgbGRpc2MuIE1heQorCQkJ
c2xlZXAuCisKK2ZsdXNoX2J1ZmZlcigpCS0JTWF5IGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYmV0
d2VlbiBvcGVuIGFuZCBjbG9zZS4KKworY2hhcnNfaW5fYnVmZmVyKCkgLQlSZXBvcnQgdGhlIG51
bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLgorCitzZXRfdGVybWlvcygpCS0JQ2FsbGVkIG9u
IHRlcm1pb3Mgc3RydWN0dXJlIGNoYW5nZXMuIFRoZSBjYWxsZXIKKwkJCXBhc3NlcyB0aGUgb2xk
IHRlcm1pb3MgZGF0YSBhbmQgdGhlIGN1cnJlbnQgZGF0YQorCQkJaXMgaW4gdGhlIHR0eS4gQ2Fs
bGVkIHVuZGVyIHRoZSB0ZXJtaW9zIGxvY2sgc28KKwkJCW1heSBub3Qgc2xlZXAuIFNlcmlhbGl6
ZWQgYWdhaW5zdCBpdHNlbGYgb25seS4KKworcmVhZCgpCQktCU1vdmUgZGF0YSBmcm9tIHRoZSBs
aW5lIGRpc2NpcGxpbmUgdG8gdGhlIHVzZXIuCisJCQlNdWx0aXBsZSByZWFkIGNhbGxzIG1heSBv
Y2N1ciBpbiBwYXJhbGxlbCBhbmQgdGhlCisJCQlsZGlzYyBtdXN0IGRlYWwgd2l0aCBzZXJpYWxp
emF0aW9uIGlzc3Vlcy4gTWF5IAorCQkJc2xlZXAuCisKK3BvbGwoKQkJLQlDaGVjayB0aGUgc3Rh
dHVzIGZvciB0aGUgcG9sbC9zZWxlY3QgY2FsbHMuIE11bHRpcGxlCisJCQlwb2xsIGNhbGxzIG1h
eSBvY2N1ciBpbiBwYXJhbGxlbC4gTWF5IHNsZWVwLgorCitpb2N0bCgpCQktCUNhbGxlZCB3aGVu
IGFuIGlvY3RsIGlzIGhhbmRlZCB0byB0aGUgdHR5IGxheWVyCisJCQl0aGF0IG1pZ2h0IGJlIGZv
ciB0aGUgbGRpc2MuIE11bHRpcGxlIGlvY3RsIGNhbGxzCisJCQltYXkgb2NjdXIgaW4gcGFyYWxs
ZWwuIE1heSBzbGVlcC4gCisKK0RyaXZlciBTaWRlIEludGVyZmFjZXM6CisKK3JlY2VpdmVfYnVm
KCkJLQlIYW5kIGJ1ZmZlcnMgb2YgYnl0ZXMgZnJvbSB0aGUgZHJpdmVyIHRvIHRoZSBsZGlzYwor
CQkJZm9yIHByb2Nlc3NpbmcuIFNlbWFudGljcyBjdXJyZW50bHkgcmF0aGVyCisJCQlteXN0ZXJp
b3VzIDgoCisKK3JlY2VpdmVfcm9vbSgpCS0JQ2FuIGJlIGNhbGxlZCBieSB0aGUgZHJpdmVyIGxh
eWVyIGF0IGFueSB0aW1lIHdoZW4KKwkJCXRoZSBsZGlzYyBpcyBvcGVuZWQuIFRoZSBsZGlzYyBt
dXN0IGJlIGFibGUgdG8KKwkJCWhhbmRsZSB0aGUgcmVwb3J0ZWQgYW1vdW50IG9mIGRhdGEgYXQg
dGhhdCBpbnN0YW50LgorCQkJU3luY2hyb25pemF0aW9uIGJldHdlZW4gYWN0aXZlIHJlY2VpdmVf
YnVmIGFuZAorCQkJcmVjZWl2ZV9yb29tIGNhbGxzIGlzIGRvd24gdG8gdGhlIGRyaXZlciBub3Qg
dGhlCisJCQlsZGlzYy4gTXVzdCBub3Qgc2xlZXAuCisKK3dyaXRlX3dha2V1cCgpCS0JTWF5IGJl
IGNhbGxlZCBhdCBhbnkgcG9pbnQgYmV0d2VlbiBvcGVuIGFuZCBjbG9zZS4KKwkJCVRoZSBUVFlf
RE9fV1JJVEVfV0FLRVVQIGZsYWcgaW5kaWNhdGVzIGlmIGEgY2FsbAorCQkJaXMgbmVlZGVkIGJ1
dCBhbHdheXMgcmFjZXMgdmVyc3VzIGNhbGxzLiBUaHVzIHRoZQorCQkJbGRpc2MgbXVzdCBiZSBj
YXJlZnVsIGFib3V0IHNldHRpbmcgb3JkZXIgYW5kIHRvCisJCQloYW5kbGUgdW5leHBlY3RlZCBj
YWxscy4gTXVzdCBub3Qgc2xlZXAuCisKKworTG9ja2luZworCitDYWxsZXJzIHRvIHRoZSBsaW5l
IGRpc2NpcGxpbmUgZnVuY3Rpb25zIGZyb20gdGhlIHR0eSBsYXllciBhcmUgcmVxdWlyZWQgdG8K
K3Rha2UgbGluZSBkaXNjaXBsaW5lIGxvY2tzLiBUaGUgc2FtZSBpcyB0cnVlIG9mIGNhbGxzIGZy
b20gdGhlIGRyaXZlciBzaWRlCitidXQgbm90IHlldCBlbmZvcmNlZC4KKworVGhyZWUgY2FsbHMg
YXJlIG5vdyBwcm92aWRlZAorCisJbGRpc2MgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisKK3Rha2Vz
IGEgaGFuZGxlIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUgaW4gdGhlIHR0eSBhbmQgcmV0dXJucyBp
dC4gSWYgbm8gbGRpc2MKK2lzIGN1cnJlbnRseSBhdHRhY2hlZCBvciB0aGUgbGRpc2MgaXMgYmVp
bmcgY2xvc2VkIGFuZCByZS1vcGVuZWQgYXQgdGhpcworcG9pbnQgdGhlbiBOVUxMIGlzIHJldHVy
bmVkLiBXaGlsZSB0aGlzIGhhbmRsZSBpcyBoZWxkIHRoZSBsZGlzYyB3aWxsIG5vdAorY2hhbmdl
IG9yIGdvIGF3YXkuCisKKwl0dHlfbGRpc2NfZGVyZWYobGRpc2MpCisKK1JldHVybnMgdGhlIGxk
aXNjIHJlZmVyZW5jZSBhbmQgYWxsb3dzIHRoZSBsZGlzYyB0byBiZSBjbG9zZWQuIFJldHVybmlu
ZyB0aGUKK3JlZmVyZW5jZSB0YWtlcyBhd2F5IHlvdXIgcmlnaHQgdG8gY2FsbCB0aGUgbGRpc2Mg
ZnVuY3Rpb25zIHVudGlsIHlvdSB0YWtlCithIG5ldyByZWZlcmVuY2UuCisKKwlsZGlzYyA9IHR0
eV9sZGlzY19yZWZfd2FpdCh0dHkpOworCitQZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyB0
dHlfbGRpc2NfcmVmIGV4Y2VwdCB0aGF0IGl0IHdpbGwgd2FpdCBmb3IgYW4KK2xkaXNjIGNoYW5n
ZSB0byBjb21wbGV0ZSBhbmQgdGhlbiByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIG5ldyBsZGlz
Yy4gCisKK1doaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhl
IG9sZCBjb2RlIHRoZXkgc2hvdWxkIGhhdmUKK21pbmltYWwgaW1wYWN0IGFzIG1vc3QgcmVjZWl2
ZSBsb2dpYyB1c2VzIHRoZSBmbGlwIGJ1ZmZlcnMgYW5kIHRoZXkgb25seQorbmVlZCB0byB0YWtl
IGEgcmVmZXJlbmNlIHdoZW4gdGhleSBwdXNoIGJpdHMgdXAgdGhyb3VnaCB0aGUgZHJpdmVyLgor
CitBIGNhdXRpb246IFRoZSBsZGlzYy0+b3BlbigpLCBsZGlzYy0+Y2xvc2UoKSBhbmQgZHJpdmVy
LT5zZXRfbGRpc2MgCitmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRoZSBsZGlzYyB1bmF2YWls
YWJsZS4gVGh1cyB0dHlfbGRpc2NfcmVmIHdpbGwKK2ZhaWwgaW4gdGhpcyBzaXR1YXRpb24gaWYg
dXNlZCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBMZGlzYyBhbmQgZHJpdmVyCitjb2RlIGNhbGxp
bmcgaXRzIG93biBmdW5jdGlvbnMgbXVzdCBiZSBjYXJlZnVsIGluIHRoaXMgY2FzZS4gCisKKwor
RHJpdmVyIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLQorCitvcGVuKCkJCS0JQ2FsbGVkIHdo
ZW4gYSBkZXZpY2UgaXMgb3BlbmVkLiBNYXkgc2xlZXAKKworY2xvc2UoKQkJLQlDYWxsZWQgd2hl
biBhIGRldmljZSBpcyBjbG9zZWQuIEF0IHRoZSBwb2ludCBvZgorCQkJcmV0dXJuIGZyb20gdGhp
cyBjYWxsIHRoZSBkcml2ZXIgbXVzdCBtYWtlIG5vIAorCQkJZnVydGhlciBsZGlzYyBjYWxscyBv
ZiBhbnkga2luZC4gTWF5IHNsZWVwCisKK3dyaXRlKCkJCS0JQ2FsbGVkIHRvIHdyaXRlIGJ5dGVz
IHRvIHRoZSBkZXZpY2UuIE1heSBub3QKKwkJCXNsZWVwLiBNYXkgb2NjdXIgaW4gcGFyYWxsZWwg
aW4gc3BlY2lhbCBjYXNlcy4gCisJCQlCZWNhdXNlIHRoaXMgaW5jbHVkZXMgcGFuaWMgcGF0aHMg
ZHJpdmVycyBnZW5lcmFsbHkKKwkJCXNob3VsZG4ndCB0cnkgYW5kIGRvIGNsZXZlciBsb2NraW5n
IGhlcmUuCisKK3B1dF9jaGFyKCkJLQlTdHVmZiBhIHNpbmdsZSBjaGFyYWN0ZXIgb250byB0aGUg
cXVldWUuIFRoZQorCQkJZHJpdmVyIGlzIGd1YXJhbnRlZWQgZm9sbG93aW5nIHVwIGNhbGxzIHRv
CisJCQlmbHVzaF9jaGFycy4KKworZmx1c2hfY2hhcnMoKQktCUFzayB0aGUga2VybmVsIHRvIHdy
aXRlIHB1dF9jaGFyIHF1ZXVlCisKK3dyaXRlX3Jvb20oKQktCVJldHVybiB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgdGh0IGNhbiBiZSBzdHVmZmVkCisJCQlpbnRvIHRoZSBwb3J0IGJ1ZmZlcnMg
d2l0aG91dCBvdmVyZmxvdyAob3IgbGVzcykuCisJCQlUaGUgbGRpc2MgaXMgcmVzcG9uc2libGUg
Zm9yIGJlaW5nIGludGVsbGlnZW50CisgCQkJYWJvdXQgbXVsdGktdGhyZWFkaW5nIG9mIHdyaXRl
X3Jvb20vd3JpdGUgY2FsbHMKKworaW9jdGwoKQkJLQlDYWxsZWQgd2hlbiBhbiBpb2N0bCBtYXkg
YmUgZm9yIHRoZSBkcml2ZXIKKworc2V0X3Rlcm1pb3MoKQktCUNhbGxlZCBvbiB0ZXJtaW9zIGNo
YW5nZSwgbWF5IGdldCBwYXJhbGxlbCBjYWxscywKKwkJCW1heSBibG9jayBmb3Igbm93IChtYXkg
Y2hhbmdlIHRoYXQpCisKK3NldF9sZGlzYygpCS0JTm90aWZpZXIgZm9yIGRpc2NpcGxpbmUgY2hh
bmdlLiBBdCB0aGUgcG9pbnQgdGhpcyAKKwkJCWlzIGRvbmUgdGhlIGRpc2NpcGxpbmUgaXMgbm90
IHlldCB1c2FibGUuIENhbiBub3cKKwkJCXNsZWVwIChJIHRoaW5rKQorCit0aHJvdHRsZSgpCS0J
Q2FsbGVkIGJ5IHRoZSBsZGlzYyB0byBhc2sgdGhlIGRyaXZlciB0byBkbyBmbG93CisJCQljb250
cm9sLiAgU2VyaWFsaXphdGlvbiBpbmNsdWRpbmcgd2l0aCB1bnRocm90dGxlCisJCQlpcyB0aGUg
am9iIG9mIHRoZSBsZGlzYyBsYXllci4KKwordW50aHJvdHRsZSgpCS0JQ2FsbGVkIGJ5IHRoZSBs
ZGlzYyB0byBhc2sgdGhlIGRyaXZlciB0byBzdG9wIGZsb3cKKwkJCWNvbnRyb2wuCisKK3N0b3Ao
KQkJLQlMZGlzYyBub3RpZmllciB0byB0aGUgZHJpdmVyIHRvIHN0b3Agb3V0cHV0LiBBcyB3aXRo
CisJCQl0aHJvdHRsZSB0aGUgc2VyaWFsaXphdGlvbnMgd2l0aCBzdGFydCgpIGFyZSBkb3duCisJ
CQl0byB0aGUgbGRpc2MgbGF5ZXIuCisKK3N0YXJ0KCkJCS0JTGRpc2Mgbm90aWZpZXIgdG8gdGhl
IGRyaXZlciB0byBzdGFydCBvdXRwdXQuCisKK2hhbmd1cCgpCS0JQXNrIHRoZSB0dHkgZHJpdmVy
IHRvIGNhdXNlIGEgaGFuZ3VwIGluaXRpYXRlZAorCQkJZnJvbSB0aGUgaG9zdCBzaWRlLiBbQ2Fu
IHNsZWVwID8/XQorCiticmVha19jdGwoKQktCVNlbmQgUlMyMzIgYnJlYWsuIENhbiBzbGVlcC4g
Q2FuIGdldCBjYWxsZWQgaW4KKwkJCXBhcmFsbGVsLCBkcml2ZXIgbXVzdCBzZXJpYWxpemUgKGZv
ciBub3cpLCBhbmQKKwkJCXdpdGggd3JpdGUgY2FsbHMuCisKK3dhaXRfdW50aWxfc2VudCgpIC0J
V2FpdCBmb3IgY2hhcmFjdGVycyB0byBleGl0IHRoZSBoYXJkd2FyZSBxdWV1ZQorCQkJb2YgdGhl
IGRyaXZlci4gQ2FuIHNsZWVwCisKK3NlbmRfeGNoYXIoKQkgIC0JU2VuZCBYT04vWE9GRiBhbmQg
aWYgcG9zc2libGUganVtcCB0aGUgcXVldWUgd2l0aAorCQkJaXQgaW4gb3JkZXIgdG8gZ2V0IGZh
c3QgZmxvdyBjb250cm9sIHJlc3BvbnNlcy4KKwkJCUNhbm5vdCBzbGVlcCA/PworCmRpZmYgLU5h
dXIgbGludXgtMi42LjcvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMgbGludXgtMi42Ljct
MTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCi0t
LSBsaW51eC0yLjYuNy9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwkyMDA0LTA2LTE1IDIy
OjE5OjQ0LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0
LmZpeGVkL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCTIwMDQtMTEtMjMgMTM6MjM6MjIu
OTkxNDUxMDAwIC0wODAwCkBAIC0xODgsOSArMTg4LDcgQEAKIAl9CiAKIAkvKiBGbHVzaCBhbnkg
cGVuZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBkcml2ZXIgYW5kIGRpc2NpcGxpbmUuICovCi0JaWYg
KHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkp
OwotCisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZm
ZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKIApAQCAtMjgwLDcgKzI3OCw5
IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmaHUtPnJ4X2xvY2spOwogCi0JLyogRmx1c2ggYW55IHBl
bmRpbmcgY2hhcmFjdGVycyBpbiB0aGUgZHJpdmVyIGFuZCBsaW5lIGRpc2NpcGxpbmUgKi8KKwkv
KiBGbHVzaCBhbnkgcGVuZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBkcml2ZXIgYW5kIGxpbmUgZGlz
Y2lwbGluZS4gKi8KKwkvKiBGSVhNRTogd2h5IGlzIHRoaXMgbmVlZGVkLiBOb3RlIGRvbid0IHVz
ZSBsZGlzY19yZWYgaGVyZSBhcyB0aGUKKwkgICBvcGVuIHBhdGggaXMgYmVmb3JlIHRoZSBsZGlz
YyBpcyByZWZlcmVuY2FibGUgKi8KIAlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCiAJCXR0
eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2
ZXJzL2NoYXIvYW1pc2VyaWFsLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVk
L2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL2Ft
aXNlcmlhbC5jCTIwMDQtMDYtMTUgMjI6MjA6MjYuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y
LjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCTIw
MDQtMTEtMjMgMTM6MjM6MjIuOTk4NDUwMDAwIC0wODAwCkBAIC01NTcsOSArNTU3LDcgQEAKIAkJ
cmV0dXJuOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAs
ICZpbmZvLT5ldmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRF
X1dBS0VVUCkpICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxk
aXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2lu
dGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAJfQogfQpAQCAtMTAyMyw5ICsxMDIxLDcg
QEAKIAlpbmZvLT54bWl0LmhlYWQgPSBpbmZvLT54bWl0LnRhaWwgPSAwOwogCWxvY2FsX2lycV9y
ZXN0b3JlKGZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7
Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAg
IHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0
eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTU2NCw4ICsxNTYwLDggQEAKIAlz
aHV0ZG93bihpbmZvKTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5k
cml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikK
LQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwkJCisJdHR5X2xkaXNjX2ZsdXNoKHR0
eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0g
MDsKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBsaW51eC0y
LjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKLS0t
IGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCTIwMDQtMDYtMTUgMjI6MTk6MDEu
MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQv
ZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4wMTQ0NDgwMDAgLTA4
MDAKQEAgLTk3MiwxMCArOTcyLDcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRl
bHRhX21zcl93YWl0KTsKICAgICB9CiAgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVO
VF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpIHsKLSAgICAgICAgaWYoKHR0eS0+ZmxhZ3Mg
JiAoMTw8IFRUWV9ET19XUklURV9XQUtFVVApKQotICAgICAgICAmJiB0dHktPmxkaXNjLndyaXRl
X3dha2V1cCl7Ci0gICAgICAgICAgICAodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgdHR5X3dha2V1cCh0dHkpOwogICAgICAgICB3YWtlX3VwX2ludGVy
cnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAgICAgfQogI2lmZGVmIFpfV0FLRQpAQCAtMjg1
Miw4ICsyODQ5LDcgQEAKICAgICBzaHV0ZG93bihpbmZvKTsKICAgICBpZiAodHR5LT5kcml2ZXIt
PmZsdXNoX2J1ZmZlcikKICAgICAgICAgdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwot
ICAgIGlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLSAgICAgICAgdHR5LT5sZGlzYy5mbHVz
aF9idWZmZXIodHR5KTsKKyAgICB0dHlfbGRpc2NfZmx1c2godHR5KTsgICAgICAgIAogICAgIENZ
X0xPQ0soaW5mbywgZmxhZ3MpOwogCiAgICAgdHR5LT5jbG9zaW5nID0gMDsKQEAgLTQ1NTUsMTAg
KzQ1NTEsOCBAQAogCX0KIAlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwogICAgIH0KKyAgICB0dHlf
d2FrZXVwKHR0eSk7CiAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQp
OwotICAgIGlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKQotCSYm
IHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCSAgICAodHR5LT5sZGlzYy53cml0ZV93YWtldXAp
KHR0eSk7CiB9IC8qIGN5X2ZsdXNoX2J1ZmZlciAqLwogCiAKZGlmZiAtTmF1ciBsaW51eC0yLjYu
Ny9kcml2ZXJzL2NoYXIvZXBjYS5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhl
ZC9kcml2ZXJzL2NoYXIvZXBjYS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvZXBjYS5j
CTIwMDQtMDYtMTUgMjI6MTk6MzYuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQw
X0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL2VwY2EuYwkyMDA0LTExLTIzIDEzOjIz
OjIzLjAyNjQ0NjAwMCAtMDgwMApAQCAtNTUxLDkgKzU1MSw3IEBACiAJCWlmICh0dHktPmRyaXZl
ci0+Zmx1c2hfYnVmZmVyKQogCQkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwogCi0J
CWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVy
KHR0eSk7Ci0KKwkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJCXNodXRkb3duKGNoKTsKIAkJdHR5
LT5jbG9zaW5nID0gMDsKIAkJY2gtPmV2ZW50ID0gMDsKQEAgLTY1NywxMCArNjU1LDcgQEAKIAkJ
Y2xpKCk7CiAJCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQkJdHR5LT5kcml2ZXIt
PmZsdXNoX2J1ZmZlcih0dHkpOwotCi0JCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJ
CXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7Ci0KKwkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7
CiAJCXNodXRkb3duKGNoKTsKIAogCQljaC0+dHR5ICAgPSBOVUxMOwpAQCAtMTEyOSw4ICsxMTI0
LDcgQEAKIAlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVf
V0FLRVVQKSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRl
X3dha2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiAKIH0gLyogRW5kIHBjX2ZsdXNoX2J1
ZmZlciAqLwogCkBAIC0yMjcxLDkgKzIyNjUsNyBAQAogCQkJCXsgLyogQmVnaW4gaWYgTE9XV0FJ
VCAqLwogCiAJCQkJCWNoLT5zdGF0dXNmbGFncyAmPSB+TE9XV0FJVDsKLQkJCQkJaWYgKCh0dHkt
PmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCQkJCQkgIHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKQotCQkJCQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwor
CQkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53
cml0ZV93YWl0KTsKIAogCQkJCX0gLyogRW5kIGlmIExPV1dBSVQgKi8KQEAgLTIyOTAsOSArMjI4
Miw3IEBACiAJCQkJeyAvKiBCZWdpbiBpZiBFTVBUWVdBSVQgKi8KIAogCQkJCQljaC0+c3RhdHVz
ZmxhZ3MgJj0gfkVNUFRZV0FJVDsKLQkJCQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RP
X1dSSVRFX1dBS0VVUCkpICYmCi0JCQkJCQkgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJ
CQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOworCQkJCQl0dHlfd2FrZXVwKHR0eSk7
CiAKIAkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCkBAIC0z
MTU3LDYgKzMxNDcsNyBAQAogCQkJfQogCQkJZWxzZSAKIAkJCXsKKwkJCQkvKiBsZGlzYyBsb2Nr
IGFscmVhZHkgaGVsZCBpbiBpb2N0bCAqLwogCQkJCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cikKIAkJCQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKIAkJCX0KZGlmZiAtTmF1ciBs
aW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvZXNwLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0w
ODE0LmZpeGVkL2RyaXZlcnMvY2hhci9lc3AuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFy
L2VzcC5jCTIwMDQtMDYtMTUgMjI6MTg6MzguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu
Ny0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL2VzcC5jCTIwMDQtMTEtMjMg
MTM6MjM6MjMuMDMzNDQ1MDAwIC0wODAwCkBAIC03NjIsMTAgKzc2Miw3IEBACiAJCXJldHVybjsK
IAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVNQX0VWRU5UX1dSSVRFX1dBS0VVUCwgJmluZm8t
PmV2ZW50KSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7CisJCXR0eV93YWtldXAodHR5KTsKIAl9CiB9CiAKQEAgLTEzNzAsMTAgKzEzNjcsNyBAQAog
CWNsaSgpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90
YWlsID0gMDsKIAlzdGkoKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0J
ICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXAp
KHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMjA3Myw4ICsyMDY3LDcgQEAK
IAlzaHV0ZG93bihpbmZvKTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5
LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5
KTsKIAl0dHktPmNsb3NpbmcgPSAwOwogCWluZm8tPmV2ZW50ID0gMDsKIAlpbmZvLT50dHkgPSAw
OwpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jIGxp
bnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvZ2VuZXJpY19z
ZXJpYWwuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMJMjAw
NC0wNi0xNSAyMjoxOToyMy4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYwkyMDA0LTExLTIz
IDEzOjIzOjIzLjAzNzQ0NDAwMCAtMDgwMApAQCAtNDM2LDkgKzQzNiw3IEBACiAJcmVzdG9yZV9m
bGFncyhmbGFncyk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7
Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAg
IHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0
eSk7CisJdHR5X3dha2V1cCh0dHkpOwogCWZ1bmNfZXhpdCAoKTsKIH0KIApAQCAtNTc4LDkgKzU3
Niw3IEBACiAJaWYgKCF0dHkpIHJldHVybjsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUlNf
RVZFTlRfV1JJVEVfV0FLRVVQLCAmcG9ydC0+ZXZlbnQpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAm
ICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93
YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJCXR0eV93YWtldXAo
dHR5KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCX0KIAlm
dW5jX2V4aXQgKCk7CkBAIC02OTQsOCArNjkwLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdz
OwogCXN0cnVjdCBnc19wb3J0ICpwb3J0OwotCi0JZnVuY19lbnRlciAoKTsKKwkKKwlmdW5jX2Vu
dGVyICgpCiAKIAlpZiAoIXR0eSkgcmV0dXJuOwogCkBAIC03NjAsOCArNzU2LDggQEAKIAogCWlm
ICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcih0dHkpOworCQkKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHktPmNsb3Npbmcg
PSAwOwogCiAJcG9ydC0+ZXZlbnQgPSAwOwpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMv
Y2hhci9odmNfY29uc29sZS5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9k
cml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL2h2
Y19jb25zb2xlLmMJMjAwNC0wNi0xNSAyMjoxOTo1Mi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4
LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUu
YwkyMDA0LTExLTIzIDEzOjIzOjIzLjAzOTQ0NDAwMCAtMDgwMApAQCAtMjQ4LDEwICsyNDgsNyBA
QAogCiAJCWlmIChocC0+ZG9fd2FrZXVwKSB7CiAJCQlocC0+ZG9fd2FrZXVwID0gMDsKLQkJCWlm
ICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKQotCQkJICAgICYmIHR0
eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5
KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwkJCXR0eV93
YWtldXAodHR5KTsKIAkJfQogCX0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hh
ci9pc2ljb20uYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9j
aGFyL2lzaWNvbS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvaXNpY29tLmMJMjAwNC0w
Ni0xNSAyMjoxODo1NS4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIw
MDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvaXNpY29tLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4w
NDU0NDMwMDAgLTA4MDAKQEAgLTQ4MywxMCArNDgzLDggQEAKIAkKIAlpZiAoIXR0eSkKIAkJcmV0
dXJuOwotCQotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAm
JgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSh0dHkpOworCisJdHR5X3dha2V1cCh0dHkpOwkKIAl3YWtlX3VwX2ludGVycnVwdGlibGUo
JnR0eS0+d3JpdGVfd2FpdCk7CiB9IAkJCiAgCQkKQEAgLTExMTgsOCArMTExNiw4IEBACiAJaXNp
Y29tX3NodXRkb3duX3BvcnQocG9ydCk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIp
CiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVz
aF9idWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCQorCXR0eV9sZGlz
Y19mbHVzaCh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJcG9ydC0+dHR5ID0gMDsKIAlpZiAo
cG9ydC0+YmxvY2tlZF9vcGVuKSB7CkBAIC0xNTYzLDkgKzE1NjEsNyBAQAogCXJlc3RvcmVfZmxh
Z3MoZmxhZ3MpOwogCQogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
LQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAg
dHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5
KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZl
cnMvY2hhci9tb3hhLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZl
cnMvY2hhci9tb3hhLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9tb3hhLmMJMjAwNC0w
Ni0xNSAyMjoyMDowMy4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIw
MDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvbW94YS5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuMDU0
NDQxMDAwIC0wODAwCkBAIC02MTMsOCArNjEzLDggQEAKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1
c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+
bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0
eV9sZGlzY19mbHVzaCh0dHkpOworCQkJCiAJdHR5LT5jbG9zaW5nID0gMDsKIAljaC0+ZXZlbnQg
PSAwOwogCWNoLT50dHkgPSAwOwpAQCAtNjg4LDkgKzY4OCw3IEBACiAJaWYgKGNoID09IE5VTEwp
CiAJCXJldHVybjsKIAlNb3hhUG9ydEZsdXNoRGF0YShjaC0+cG9ydCwgMSk7Ci0JaWYgKCh0dHkt
PmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCXR0eV93
YWtldXAodHR5KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiB9
CiAKQEAgLTk0OCw5ICs5NDYsNyBAQAogCQkJCWlmIChNb3hhUG9ydFR4UXVldWUoY2gtPnBvcnQp
IDw9IFdBS0VVUF9DSEFSUykgewogCQkJCQlpZiAoIXRwLT5zdG9wcGVkKSB7CiAJCQkJCQljaC0+
c3RhdHVzZmxhZ3MgJj0gfkxPV1dBSVQ7Ci0JCQkJCQlpZiAoKHRwLT5mbGFncyAmICgxIDw8IFRU
WV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCQkJICB0cC0+bGRpc2Mud3JpdGVfd2FrZXVwKQot
CQkJCQkJCSh0cC0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHApOworCQkJCQkJdHR5X3dha2V1cCh0
dHkpOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cC0+d3JpdGVfd2FpdCk7CiAJCQkJ
CX0KIAkJCQl9CkBAIC0xMTE3LDkgKzExMTMsNyBAQAogCWlmIChjaC0+dHR5ICYmIChjaC0+c3Rh
dHVzZmxhZ3MgJiBFTVBUWVdBSVQpKSB7CiAJCWlmIChNb3hhUG9ydFR4UXVldWUoY2gtPnBvcnQp
ID09IDApIHsKIAkJCWNoLT5zdGF0dXNmbGFncyAmPSB+RU1QVFlXQUlUOwotCQkJaWYgKChjaC0+
dHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJICAgIGNoLT50
dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkoY2gtPnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVw
KSAoY2gtPnR0eSk7CisJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGli
bGUoJmNoLT50dHktPndyaXRlX3dhaXQpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLU5hdXIgbGlu
dXgtMi42LjcvZHJpdmVycy9jaGFyL214c2VyLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0w
ODE0LmZpeGVkL2RyaXZlcnMvY2hhci9teHNlci5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2No
YXIvbXhzZXIuYwkyMDA0LTA2LTE1IDIyOjE5OjQyLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgt
Mi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9teHNlci5jCTIwMDQt
MTEtMjMgMTM6MjM6MjMuMDYxNDQwMDAwIC0wODAwCkBAIC02NzYsOSArNjc2LDcgQEAKIAl0dHkg
PSBpbmZvLT50dHk7CiAJaWYgKHR0eSkgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1YU0VS
X0VWRU5UX1RYTE9XLCAmaW5mby0+ZXZlbnQpKSB7Ci0JCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8
PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1
cCkKLQkJCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCQkJdHR5X3dha2V1cCh0
dHkpOwogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCQl9CiAJ
CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVhTRVJfRVZFTlRfSEFOR1VQLCAmaW5mby0+ZXZlbnQp
KSB7CkBAIC04MTUsOCArODEzLDggQEAKIAlteHNlcl9zaHV0ZG93bihpbmZvKTsKIAlpZiAodHR5
LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkp
OwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZm
ZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKKwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJ
aW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPnR0eSA9IDA7CkBAIC05NzQsOSArOTcyLDcgQEAKIAlp
bmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAJ
cmVzdG9yZV9mbGFncyhmbGFncyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRl
X3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAm
JgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSAodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIHN0YXRpYyBpbnQgbXhzZXJfaW9j
dGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLU5hdXIg
bGludXgtMi42LjcvZHJpdmVycy9jaGFyL25fdHR5LmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAw
NC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9uX3R0eS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJz
L2NoYXIvbl90dHkuYwkyMDA0LTA2LTE1IDIyOjE4OjUyLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9uX3R0eS5jCTIw
MDQtMTEtMjMgMTM6MjM6MjMuMDcxNDM5MDAwIC0wODAwCkBAIC0xMDQsMTEgKzEwNCwxOCBAQAog
CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+cmVhZF9sb2NrLCBmbGFncyk7CiB9CiAKLS8q
IAotICogQ2hlY2sgd2hldGhlciB0byBjYWxsIHRoZSBkcml2ZXIudW50aHJvdHRsZSBmdW5jdGlv
bi4KLSAqIFdlIHRlc3QgdGhlIFRUWV9USFJPVFRMRUQgYml0IGZpcnN0IHNvIHRoYXQgaXQgYWx3
YXlzCi0gKiBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUuCisvKioKKyAqCWNoZWNrX3VudGhy
b3R0bGUJLQlhbGxvdyBuZXcgcmVjZWl2ZSBkYXRhCisgKglAdHR5OyB0dHkgZGV2aWNlCisgKgor
ICoJQ2hlY2sgd2hldGhlciB0byBjYWxsIHRoZSBkcml2ZXIudW50aHJvdHRsZSBmdW5jdGlvbi4K
KyAqCVdlIHRlc3QgdGhlIFRUWV9USFJPVFRMRUQgYml0IGZpcnN0IHNvIHRoYXQgaXQgYWx3YXlz
CisgKglpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBkZWNpc2lvbiBhYm91dCB3aGV0
aGVyCisgKglpdCBpcyB3b3J0aCBhbGxvd2luZyBtb3JlIGlucHV0IGhhcyBiZWVuIHRha2VuIGJ5
IHRoZSBjYWxsZXIuCisgKglDYW4gc2xlZXAsIG1heSBiZSBjYWxsZWQgdW5kZXIgdGhlIGF0b21p
Y19yZWFkIHNlbWFwaG9yZSBidXQKKyAqCXRoaXMgaXMgbm90IGd1YXJhbnRlZWQuCiAgKi8KKyAK
IHN0YXRpYyB2b2lkIGNoZWNrX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCiB7
CiAJaWYgKHR0eS0+Y291bnQgJiYKQEAgLTExNywxMCArMTI0LDEzIEBACiAJCXR0eS0+ZHJpdmVy
LT51bnRocm90dGxlKHR0eSk7CiB9CiAKLS8qCi0gKiBSZXNldCB0aGUgcmVhZCBidWZmZXIgY291
bnRlcnMsIGNsZWFyIHRoZSBmbGFncywgCi0gKiBhbmQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMg
dW50aHJvdHRsZWQuIENhbGxlZAotICogZnJvbSBuX3R0eV9vcGVuKCkgYW5kIG5fdHR5X2ZsdXNo
X2J1ZmZlcigpLgorLyoqCisgKglyZXNldF9idWZmZXJfZmxhZ3MJLQlyZXNldCBidWZmZXIgc3Rh
dGUKKyAqCUB0dHk6IHRlcm1pbmFsIHRvIHJlc2V0CisgKgorICoJUmVzZXQgdGhlIHJlYWQgYnVm
ZmVyIGNvdW50ZXJzLCBjbGVhciB0aGUgZmxhZ3MsIAorICoJYW5kIG1ha2Ugc3VyZSB0aGUgZHJp
dmVyIGlzIHVudGhyb3R0bGVkLiBDYWxsZWQKKyAqCWZyb20gbl90dHlfb3BlbigpIGFuZCBuX3R0
eV9mbHVzaF9idWZmZXIoKS4KICAqLwogc3RhdGljIHZvaWQgcmVzZXRfYnVmZmVyX2ZsYWdzKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CkBAIC0xMzQsOSArMTQ0LDE5IEBACiAJY2hlY2tfdW50
aHJvdHRsZSh0dHkpOwogfQogCi0vKgotICogRmx1c2ggdGhlIGlucHV0IGJ1ZmZlcgorLyoqCisg
KgluX3R0eV9mbHVzaF9idWZmZXIJLQljbGVhbiBpbnB1dCBxdWV1ZQorICoJQHR0eToJdGVybWlu
YWwgZGV2aWNlCisgKgorICoJRmx1c2ggdGhlIGlucHV0IGJ1ZmZlci4gQ2FsbGVkIHdoZW4gdGhl
IGxpbmUgZGlzY2lwbGluZSBpcworICoJYmVpbmcgY2xvc2VkLCB3aGVuIHRoZSB0dHkgbGF5ZXIg
d2FudHMgdGhlIGJ1ZmZlciBmbHVzaGVkIChlZworICoJYXQgaGFuZ3VwKSBvciB3aGVuIHRoZSBO
X1RUWSBsaW5lIGRpc2NpcGxpbmUgaW50ZXJuYWxseSBoYXMgdG8KKyAqCWNsZWFuIHRoZSBwZW5k
aW5nIHF1ZXVlIChmb3IgZXhhbXBsZSBzb21lIHNpZ25hbHMpLgorICoKKyAqCUZJWE1FOiB0dHkt
PmN0cmxfc3RhdHVzIGlzIG5vdCBzcGlubG9ja2VkIGFuZCByZWxpZXMgb24KKyAqCWxvY2tfa2Vy
bmVsKCkgc3RpbGwuCiAgKi8KKyAKIHZvaWQgbl90dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlf
c3RydWN0ICogdHR5KQogewogCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgYW5kIHVudGhyb3R0bGUgdGhl
IGRyaXZlciAqLwpAQCAtMTUxLDkgKzE3MSwxNCBAQAogCX0KIH0KIAotLyoKLSAqIFJldHVybiBu
dW1iZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCB0byBiZSBkZWxpdmVyZWQgdG8gdXNlcgorLyoq
CisgKgluX3R0eV9jaGFyc19pbl9idWZmZXIJLQlyZXBvcnQgYXZhaWxhYmxlIGJ5dGVzCisgKglA
dHR5OiB0dHkgZGV2aWNlCisgKgorICoJUmVwb3J0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBi
dWZmZXJlZCB0byBiZSBkZWxpdmVyZWQgdG8gdXNlcgorICoJYXQgdGhpcyBpbnN0YW50IGluIHRp
bWUuIAogICovCisgCiBzc2l6ZV90IG5fdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0
cnVjdCAqdHR5KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNzEsMjAgKzE5Niw0NyBA
QAogCXJldHVybiBuOwogfQogCisvKioKKyAqCWlzX3V0ZjhfY29udGludWF0aW9uCS0JdXRmOCBt
dWx0aWJ5dGUgY2hlY2sKKyAqCUBjOiBieXRlIHRvIGNoZWNrCisgKgorICoJUmV0dXJucyB0cnVl
IGlmIHRoZSB1dGY4IGNoYXJhY3RlciAnYycgaXMgYSBtdWx0aWJ5dGUgY29udGludWF0aW9uCisg
KgljaGFyYWN0ZXIuIFdlIHVzZSB0aGlzIHRvIGNvcnJlY3RseSBjb21wdXRlIHRoZSBvbiBzY3Jl
ZW4gc2l6ZQorICoJb2YgdGhlIGNoYXJhY3RlciB3aGVuIHByaW50aW5nCisgKi8KKyAKIHN0YXRp
YyBpbmxpbmUgaW50IGlzX3V0ZjhfY29udGludWF0aW9uKHVuc2lnbmVkIGNoYXIgYykKIHsKIAly
ZXR1cm4gKGMgJiAweGMwKSA9PSAweDgwOwogfQogCisvKioKKyAqCWlzX2NvbnRpbnVhdGlvbgkJ
LQltdWx0aWJ5dGUgY2hlY2sKKyAqCUBjOiBieXRlIHRvIGNoZWNrCisgKgorICoJUmV0dXJucyB0
cnVlIGlmIHRoZSB1dGY4IGNoYXJhY3RlciAnYycgaXMgYSBtdWx0aWJ5dGUgY29udGludWF0aW9u
CisgKgljaGFyYWN0ZXIgYW5kIHRoZSB0ZXJtaW5hbCBpcyBpbiB1bmljb2RlIG1vZGUuCisgKi8K
KyAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NvbnRpbnVhdGlvbih1bnNpZ25lZCBjaGFyIGMsIHN0
cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJcmV0dXJuIElfSVVURjgodHR5KSAmJiBpc191dGY4
X2NvbnRpbnVhdGlvbihjKTsKIH0KIAotLyoKLSAqIFBlcmZvcm0gT1BPU1QgcHJvY2Vzc2luZy4g
IFJldHVybnMgLTEgd2hlbiB0aGUgb3V0cHV0IGRldmljZSBpcwotICogZnVsbCBhbmQgdGhlIGNo
YXJhY3RlciBtdXN0IGJlIHJldHJpZWQuCisvKioKKyAqCW9wb3N0CQkJLQlvdXRwdXQgcG9zdCBw
cm9jZXNzb3IKKyAqCUBjOiBjaGFyYWN0ZXIgKG9yIHBhcnRpYWwgdW5pY29kZSBzeW1ib2wpCisg
KglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKKyAqCisgKglQZXJmb3JtIE9QT1NUIHByb2Nlc3Npbmcu
ICBSZXR1cm5zIC0xIHdoZW4gdGhlIG91dHB1dCBkZXZpY2UgaXMKKyAqCWZ1bGwgYW5kIHRoZSBj
aGFyYWN0ZXIgbXVzdCBiZSByZXRyaWVkLiBOb3RlIHRoYXQgTGludXggY3VycmVudGx5CisgKglp
Z25vcmVzIFRBQkRMWSwgQ1JETFksIFZURExZLCBGRkRMWSBhbmQgTkxETFkuIFRoZXkgc2ltcGx5
IGFyZW4ndAorICoJcmVsZXZhbnQgaW4gdGhlIHdvcmxkIHRvZGF5LiBJZiB5b3UgZXZlciBuZWVk
IHRoZW0sIGFkZCB0aGVtIGhlcmUuCisgKgorICoJQ2FsbGVkIGZyb20gYm90aCB0aGUgcmVjZWl2
ZSBhbmQgdHJhbnNtaXQgc2lkZXMgYW5kIGNhbiBiZSBjYWxsZWQKKyAqCXJlLWVudHJhbnRseS4g
UmVsaWVzIG9uIGxvY2tfa2VybmVsKCkgc3RpbGwuCiAgKi8KKyAKIHN0YXRpYyBpbnQgb3Bvc3Qo
dW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWludAlzcGFjZSwg
c3BhY2VzOwpAQCAtMjQ0LDEwICsyOTYsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIG9w
b3N0X2Jsb2NrIC0tLSB0byBzcGVlZCB1cCBibG9jayBjb25zb2xlIHdyaXRlcywgYW1vbmcgb3Ro
ZXIKLSAqIHRoaW5ncy4KKy8qKgorICoJb3Bvc3RfYmxvY2sJCS0JYmxvY2sgcG9zdHByb2Nlc3MK
KyAqCUB0dHk6IHRlcm1pbmFsIGRldmljZQorICoJQGluYnVmOiB1c2VyIGJ1ZmZlcgorICoJQG5y
OiBudW1iZXIgb2YgYnl0ZXMKKyAqCisgKglUaGlzIHBhdGggaXMgdXNlZCB0byBzcGVlZCB1cCBi
bG9jayBjb25zb2xlIHdyaXRlcywgYW1vbmcgb3RoZXIKKyAqCXRoaW5ncyB3aGVuIHByb2Nlc3Np
bmcgYmxvY2tzIG9mIG91dHB1dCBkYXRhLiBJdCBoYW5kbGVzIG9ubHkKKyAqCXRoZSBzaW1wbGUg
Y2FzZXMgbm9ybWFsbHkgZm91bmQgYW5kIGhlbHBzIHRvIGdlbmVyYXRlIGJsb2NrcyBvZgorICoJ
c3ltYm9scyBmb3IgdGhlIGNvbnNvbGUgZHJpdmVyIGFuZCB0aHVzIGltcHJvdmUgcGVyZm9ybWFu
Y2UuCisgKgorICoJQ2FsbGVkIGZyb20gd3JpdGVfY2hhbiB1bmRlciB0aGUgdHR5IGxheWVyIHdy
aXRlIGxvY2suCiAgKi8KKyAKIHN0YXRpYyBzc2l6ZV90IG9wb3N0X2Jsb2NrKHN0cnVjdCB0dHlf
c3RydWN0ICogdHR5LAogCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKiBpbmJ1
ZiwgdW5zaWduZWQgaW50IG5yKQogewpAQCAtMzA5LDEzICszNzEsMjcgQEAKIH0KIAogCi0KKy8q
KgorICoJcHV0X2NoYXIJLQl3cml0ZSBjaGFyYWN0ZXIgdG8gZHJpdmVyCisgKglAYzogY2hhcmFj
dGVyIChvciBwYXJ0IG9mIHVuaWNvZGUgc3ltYm9sKQorICoJQHR0eTogdGVybWluYWwgZGV2aWNl
CisgKgorICoJUXVldWUgYSBieXRlIHRvIHRoZSBkcml2ZXIgbGF5ZXIgZm9yIG91dHB1dAorICov
CisgCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2NoYXIodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3Qg
dHR5X3N0cnVjdCAqdHR5KQogewogCXR0eS0+ZHJpdmVyLT5wdXRfY2hhcih0dHksIGMpOwogfQog
Ci0vKiBNdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gTF9FQ0hPKHR0eSkgaXMgdHJ1ZS4gKi8KKy8q
KgorICoJZWNob19jaGFyCS0JZWNobyBjaGFyYWN0ZXJzCisgKglAYzogdW5pY29kZSBieXRlIHRv
IGVjaG8KKyAqCUB0dHk6IHRlcm1pbmFsIGRldmljZQorICoKKyAqCUVjaG8gdXNlciBpbnB1dCBi
YWNrIG9udG8gdGhlIHNjcmVlbi4gVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gCisgKglM
X0VDSE8odHR5KSBpcyB0cnVlLiBDYWxsZWQgZnJvbSB0aGUgZHJpdmVyIHJlY2VpdmVfYnVmIHBh
dGguCisgKi8KIAogc3RhdGljIHZvaWQgZWNob19jaGFyKHVuc2lnbmVkIGNoYXIgYywgc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTMzNiw2ICs0MTIsMTYgQEAKIAl9CiB9CiAKKy8qKgor
ICoJZXJhc2VyCQktCWhhbmRsZSBlcmFzZSBmdW5jdGlvbgorICoJQGM6IGNoYXJhY3RlciBpbnB1
dAorICoJQHR0eTogdGVybWluYWwgZGV2aWNlCisgKgorICoJUGVyZm9ybSBlcmFzZSBhbmQgbmVj
Y2Vzc2FyeSBvdXRwdXQgd2hlbiBhbiBlcmFzZSBjaGFyYWN0ZXIgaXMKKyAqCXByZXNlbnQgaW4g
dGhlIHN0cmVhbSBmcm9tIHRoZSBkcml2ZXIgbGF5ZXIuIEhhbmRsZXMgdGhlIGNvbXBsZXhpdGll
cworICoJb2YgVVRGLTggbXVsdGlieXRlIHN5bWJvbHMuCisgKi8KKyAKIHN0YXRpYyB2b2lkIGVy
YXNlcih1bnNpZ25lZCBjaGFyIGMsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJZW51bSB7
IEVSQVNFLCBXRVJBU0UsIEtJTEwgfSBraWxsX3R5cGU7CkBAIC00NjgsNiArNTU0LDE4IEBACiAJ
CWZpbmlzaF9lcmFzaW5nKHR0eSk7CiB9CiAKKy8qKgorICoJaXNpZwkJLQloYW5kbGUgdGhlIElT
SUcgb3B0aW8KKyAqCUBzaWc6IHNpZ25hbAorICoJQHR0eTogdGVybWluYWwKKyAqCUBmbHVzaDog
Zm9yY2UgZmx1c2gKKyAqCisgKglDYWxsZWQgd2hlbiBhIHNpZ25hbCBpcyBiZWluZyBzZW50IGR1
ZSB0byB0ZXJtaW5hbCBpbnB1dC4gVGhpcworICoJbWF5IGNhdXMgdGVybWluYWwgZmx1c2hpbmcg
dG8gdGFrZSBwbGFjZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1pb3MKKyAqCXNldHRpbmdzIGFuZCBj
aGFyYWN0ZXIgdXNlZC4gQ2FsbGVkIGZyb20gdGhlIGRyaXZlciByZWNlaXZlX2J1ZgorICoJcGF0
aCBzbyBzZXJpYWxpemVkLgorICovCisgCiBzdGF0aWMgaW5saW5lIHZvaWQgaXNpZyhpbnQgc2ln
LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZmx1c2gpCiB7CiAJaWYgKHR0eS0+cGdycCA+
IDApCkBAIC00NzksNiArNTc3LDE2IEBACiAJfQogfQogCisvKioKKyAqCW5fdHR5X3JlY2VpdmVf
YnJlYWsJLQloYW5kbGUgYnJlYWsKKyAqCUB0dHk6IHRlcm1pbmFsCisgKgorICoJQW4gUlMyMzIg
YnJlYWsgZXZlbnQgaGFzIGJlZW4gaGl0IGluIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uIFRoaXMK
KyAqCWNhbiBjYXVzZSBhIHZhcmlldHkgb2YgZXZlbnRzIGRlcGVuZGluZyB1cG9uIHRoZSB0ZXJt
aW9zIHNldHRpbmdzLgorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSByZWNlaXZlX2J1ZiBwYXRoIHNv
IHNpbmdsZSB0aHJlYWRlZC4KKyAqLworIAogc3RhdGljIGlubGluZSB2b2lkIG5fdHR5X3JlY2Vp
dmVfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAoSV9JR05CUksodHR5KSkK
QEAgLTQ5NSwxOSArNjAzLDQwIEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRf
d2FpdCk7CiB9CiAKKy8qKgorICoJbl90dHlfcmVjZWl2ZV9vdmVycnVuCS0JaGFuZGxlIG92ZXJy
dW4gcmVwb3J0aW5nCisgKglAdHR5OiB0ZXJtaW5hbAorICoKKyAqCURhdGEgYXJyaXZlZCBmYXN0
ZXIgdGhhbiB3ZSBjb3VsZCBwcm9jZXNzIGl0LiBXaGlsZSB0aGUgdHR5CisgKglkcml2ZXIgaGFz
IGZsYWdnZWQgdGhpcyB0aGUgYml0cyB0aGF0IHdlcmUgbWlzc2VkIGFyZSBnb25lCisgKglmb3Jl
dmVyLgorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSByZWNlaXZlX2J1ZiBwYXRoIHNvIHNpbmdsZSB0
aHJlYWRlZC4gRG9lcyBub3QKKyAqCW5lZWQgbG9ja2luZyBhcyBudW1fb3ZlcnJ1biBhbmQgb3Zl
cnJ1bl90aW1lIGFyZSBmdW5jdGlvbgorICoJcHJpdmF0ZS4KKyAqLworIAogc3RhdGljIGlubGlu
ZSB2b2lkIG5fdHR5X3JlY2VpdmVfb3ZlcnJ1bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewog
CWNoYXIgYnVmWzY0XTsKIAogCXR0eS0+bnVtX292ZXJydW4rKzsKIAlpZiAodGltZV9iZWZvcmUo
dHR5LT5vdmVycnVuX3RpbWUsIGppZmZpZXMgLSBIWikpIHsKLQkJcHJpbnRrKCIlczogJWQgaW5w
dXQgb3ZlcnJ1bihzKVxuIiwgdHR5X25hbWUodHR5LCBidWYpLAorCQlwcmludGsoS0VSTl9XQVJO
SU5HICIlczogJWQgaW5wdXQgb3ZlcnJ1bihzKVxuIiwgdHR5X25hbWUodHR5LCBidWYpLAogCQkg
ICAgICAgdHR5LT5udW1fb3ZlcnJ1bik7CiAJCXR0eS0+b3ZlcnJ1bl90aW1lID0gamlmZmllczsK
IAkJdHR5LT5udW1fb3ZlcnJ1biA9IDA7CiAJfQogfQogCisvKioKKyAqCW5fdHR5X3JlY2VpdmVf
cGFyaXR5X2Vycm9yCS0JZXJyb3Igbm90aWZpZXIKKyAqCUB0dHk6IHRlcm1pbmFsIGRldmljZQor
ICoJQGM6IGNoYXJhY3RlcgorICoKKyAqCVByb2Nlc3MgYSBwYXJpdHkgZXJyb3IgYW5kIHF1ZXVl
IHRoZSByaWdodCBkYXRhIHRvIGluZGljYXRlCisgKgl0aGUgZXJyb3IgY2FzZSBpZiBuZWNjZXNz
YXJ5LiBMb2NraW5nIGFzIHBlciBuX3R0eV9yZWNlaXZlX2J1Zi4KKyAqLwogc3RhdGljIGlubGlu
ZSB2b2lkIG5fdHR5X3JlY2VpdmVfcGFyaXR5X2Vycm9yKHN0cnVjdCB0dHlfc3RydWN0ICp0dHks
CiAJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgYykKIHsKQEAgLTUyNSw2ICs2NTQsMTYgQEAKIAl3
YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cmVhZF93YWl0KTsKIH0KIAorLyoqCisgKgluX3R0
eV9yZWNlaXZlX2NoYXIJLQlwZXJmb3JtIHByb2Nlc3NpbmcKKyAqCUB0dHk6IHRlcm1pbmFsIGRl
dmljZQorICoJQGM6IGNoYXJhY3RlcgorICoKKyAqCVByb2Nlc3MgYW4gaW5kaXZpZHVhbCBjaGFy
YWN0ZXIgb2YgaW5wdXQgcmVjZWl2ZWQgZnJvbSB0aGUgZHJpdmVyLgorICoJVGhpcyBpcyBzZXJp
YWxpemVkIHdpdGggcmVzcGVjdCB0byBpdHNlbGYgYnkgdGhlIHJ1bGVzIGZvciB0aGUgCisgKglk
cml2ZXIgYWJvdmUuCisgKi8KKwogc3RhdGljIGlubGluZSB2b2lkIG5fdHR5X3JlY2VpdmVfY2hh
cihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGMpCiB7CiAJdW5zaWduZWQg
bG9uZyBmbGFnczsKQEAgLTcxNiw2ICs4NTUsMTYgQEAKIAlwdXRfdHR5X3F1ZXVlKGMsIHR0eSk7
CiB9CQogCisvKioKKyAqCW5fdHR5X3JlY2VpdmVfcm9vbQktCXJlY2VpdmUgc3BhY2UKKyAqCUB0
dHk6IHRlcm1pbmFsCisgKgorICoJQ2FsbGVkIGJ5IHRoZSBkcml2ZXIgdG8gZmluZCBvdXQgaG93
IG11Y2ggZGF0YSBpdCBpcworICoJcGVybWl0dGVkIHRvIGZlZWQgdG8gdGhlIGxpbmUgZGlzY2lw
bGluZSB3aXRob3V0IGFueSBiZWluZyBsb3N0CisgKglhbmQgdGh1cyB0byBtYW5hZ2UgZmxvdyBj
b250cm9sLiBOb3Qgc2VyaWFsaXplZC4gQW5zd2VycyBmb3IgdGhlCisgKgkiaW5zdGFudCIuCisg
Ki8KKyAKIHN0YXRpYyBpbnQgbl90dHlfcmVjZWl2ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0
dHkpCiB7CiAJaW50CWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOwpA
QCAtNzM0LDEwICs4ODMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlcXVpcmVkIGZv
ciB0aGUgcHR5cywgc2VyaWFsIGRyaXZlciBldGMuIHNpbmNlIHByb2Nlc3NlcwotICogdGhhdCBh
dHRhY2ggdGhlbXNlbHZlcyB0byB0aGUgbWFzdGVyIGFuZCByZWx5IG9uIEFTWU5DCi0gKiBJTyBt
dXN0IGJlIHdva2VuIHVwCisvKioKKyAqCW5fdHR5X3dyaXRlX3dha2V1cAktCWFzeW5jaHJvbm91
cyBJL08gbm90aWZpZXIKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCisgKglSZXF1aXJlZCBmb3Ig
dGhlIHB0eXMsIHNlcmlhbCBkcml2ZXIgZXRjLiBzaW5jZSBwcm9jZXNzZXMKKyAqCXRoYXQgYXR0
YWNoIHRoZW1zZWx2ZXMgdG8gdGhlIG1hc3RlciBhbmQgcmVseSBvbiBBU1lOQworICoJSU8gbXVz
dCBiZSB3b2tlbiB1cAogICovCiAKIHN0YXRpYyB2b2lkIG5fdHR5X3dyaXRlX3dha2V1cChzdHJ1
Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNzUwLDYgKzkwMiwxOSBAQAogCXJldHVybjsKIH0KIAor
LyoqCisgKgluX3R0eV9yZWNlaXZlX2J1ZgktCWRhdGEgcmVjZWl2ZQorICoJQHR0eTogdGVybWlu
YWwgZGV2aWNlCisgKglAY3A6IGJ1ZmZlcgorICoJQGZwOiBmbGFnIGJ1ZmZlcgorICoJQGNvdW50
OiBjaGFyYWN0ZXJzCisgKgorICoJQ2FsbGVkIGJ5IHRoZSB0ZXJtaW5hbCBkcml2ZXIgd2hlbiBh
IGJsb2NrIG9mIGNoYXJhY3RlcnMgaGFzCisgKgliZWVuIHJlY2VpdmVkLiBUaGlzIGZ1bmN0aW9u
IG11c3QgYmUgY2FsbGVkIGZyb20gc29mdCBjb250ZXh0cworICoJbm90IGZyb20gaW50ZXJydXB0
IGNvbnRleHQuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZworICoJY2FsbHMg
b25lIGF0IGEgdGltZSBhbmQgaW4gb3JkZXIgKG9yIHVzaW5nIGZsdXNoX3RvX2xkaXNjKQorICov
CisgCiBzdGF0aWMgdm9pZCBuX3R0eV9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5
LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKIAkJCSAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQp
CiB7CkBAIC04MzMsNiArOTk4LDE4IEBACiAJICAgICAgICBjdXJyZW50LT5zaWdoYW5kLT5hY3Rp
b25bc2lnLTFdLnNhLnNhX2hhbmRsZXIgPT0gU0lHX0lHTik7CiB9CiAKKy8qKgorICoJbl90dHlf
c2V0X3Rlcm1pb3MJLQl0ZXJtaW9zIGRhdGEgY2hhbmdlZAorICoJQHR0eTogdGVybWluYWwKKyAq
CUBvbGQ6IHByZXZpb3VzIGRhdGEKKyAqCisgKglDYWxsZWQgYnkgdGhlIHR0eSBsYXllciB3aGVu
IHRoZSB1c2VyIGNoYW5nZXMgdGVybWlvcyBmbGFncyBzbworICoJdGhhdCB0aGUgbGluZSBkaXNj
aXBsaW5lIGNhbiBwbGFuIGFoZWFkLiBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBzbGVlcAorICoJYW5k
IGlzIHByb3RlY3RlZCBmcm9tIHJlLWVudHJ5IGJ5IHRoZSB0dHkgbGF5ZXIuIFRoZSB1c2VyIGlz
IAorICoJZ3VhcmFudGVlZCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgcmUtZW50ZXJl
ZCBvciBpbiBwcm9ncmVzcworICoJd2hlbiB0aGUgbGRpc2MgaXMgY2xvc2VkLgorICovCisgCiBz
dGF0aWMgdm9pZCBuX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1
Y3QgdGVybWlvcyAqIG9sZCkKIHsKIAlpZiAoIXR0eSkKQEAgLTg0OCw3ICsxMDI1LDYgQEAKIAkg
ICAgSV9JQ1JOTCh0dHkpIHx8IElfSU5MQ1IodHR5KSB8fCBMX0lDQU5PTih0dHkpIHx8CiAJICAg
IElfSVhPTih0dHkpIHx8IExfSVNJRyh0dHkpIHx8IExfRUNITyh0dHkpIHx8CiAJICAgIElfUEFS
TVJLKHR0eSkpIHsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsgLy8gRklYTUU6IGlzIHRoaXMgc2Fm
ZT8KIAkJbWVtc2V0KHR0eS0+cHJvY2Vzc19jaGFyX21hcCwgMCwgMjU2LzgpOwogCiAJCWlmIChJ
X0lHTkNSKHR0eSkgfHwgSV9JQ1JOTCh0dHkpKQpAQCAtODg0LDcgKzEwNjAsNiBAQAogCQkJc2V0
X2JpdChTVVNQX0NIQVIodHR5KSwgdHR5LT5wcm9jZXNzX2NoYXJfbWFwKTsKIAkJfQogCQljbGVh
cl9iaXQoX19ESVNBQkxFRF9DSEFSLCB0dHktPnByb2Nlc3NfY2hhcl9tYXApOwotCQlsb2NhbF9p
cnFfZW5hYmxlKCk7IC8vIEZJWE1FOiBpcyB0aGlzIHNhZmU/CiAJCXR0eS0+cmF3ID0gMDsKIAkJ
dHR5LT5yZWFsX3JhdyA9IDA7CiAJfSBlbHNlIHsKQEAgLTg5OCw2ICsxMDczLDE2IEBACiAJfQog
fQogCisvKioKKyAqCW5fdHR5X2Nsb3NlCQktCWNsb3NlIHRoZSBsZGlzYyBmb3IgdGhpcyB0dHkK
KyAqCUB0dHk6IGRldmljZQorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSB0ZXJtaW5hbCBsYXllciB3
aGVuIHRoaXMgbGluZSBkaXNjaXBsaW5lIGlzIAorICoJYmVpbmcgc2h1dCBkb3duLCBlaXRoZXIg
YmVjYXVzZSBvZiBhIGNsb3NlIG9yIGJlY3N1c2Ugb2YgYSAKKyAqCWRpc2NpcGxpbmUgY2hhbmdl
LiBUaGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkIHdoaWxlIG90aGVyCisgKglsZGlzYyBt
ZXRob2RzIGFyZSBpbiBwcm9ncmVzcy4KKyAqLworIAogc3RhdGljIHZvaWQgbl90dHlfY2xvc2Uo
c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAluX3R0eV9mbHVzaF9idWZmZXIodHR5KTsKQEAg
LTkwNywxMSArMTA5MiwyMiBAQAogCX0KIH0KIAorLyoqCisgKgluX3R0eV9vcGVuCQktCW9wZW4g
YW4gbGRpc2MKKyAqCUB0dHk6IHRlcm1pbmFsIHRvIG9wZW4KKyAqCisgKglDYWxsZWQgd2hlbiB0
aGlzIGxpbmUgZGlzY2lwbGluZSBpcyBiZWluZyBhdHRhY2hlZCB0byB0aGUgCisgKgl0ZXJtaW5h
bCBkZXZpY2UuIENhbiBzbGVlcC4gQ2FsbGVkIHNlcmlhbGl6ZWQgc28gdGhhdCBubworICoJb3Ro
ZXIgZXZlbnRzIHdpbGwgb2NjdXIgaW4gcGFyYWxsZWwuIE5vIGZ1cnRoZXIgb3BlbiB3aWxsIG9j
Y3VyCisgKgl1bnRpbCBhIGNsb3NlLgorICovCisKIHN0YXRpYyBpbnQgbl90dHlfb3BlbihzdHJ1
Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICghdHR5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAor
CS8qIFRoaXMgb25lIGlzIHVnbHkuIEN1cnJlbnRseSBhIG1hbGxvYyBmYWlsdXJlIGhlcmUgY2Fu
IHBhbmljICovCiAJaWYgKCF0dHktPnJlYWRfYnVmKSB7CiAJCXR0eS0+cmVhZF9idWYgPSBhbGxv
Y19idWYoKTsKIAkJaWYgKCF0dHktPnJlYWRfYnVmKQpAQCAtOTM3LDE0ICsxMTMzLDIzIEBACiAJ
cmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc3BlZWQgdXAgcmVhZF9j
aGFuLiAgSXQgaXMgb25seSBjYWxsZWQgd2hlbgotICogSUNBTk9OIGlzIG9mZjsgaXQgY29waWVz
IGNoYXJhY3RlcnMgc3RyYWlnaHQgZnJvbSB0aGUgdHR5IHF1ZXVlIHRvCi0gKiB1c2VyIHNwYWNl
IGRpcmVjdGx5LiAgSXQgY2FuIGJlIHByb2ZpdGFibHkgY2FsbGVkIHR3aWNlOyBvbmNlIHRvCi0g
KiBkcmFpbiB0aGUgc3BhY2UgZnJvbSB0aGUgdGFpbCBwb2ludGVyIHRvIHRoZSAocGh5c2ljYWwp
IGVuZCBvZiB0aGUKLSAqIGJ1ZmZlciwgYW5kIG9uY2UgdG8gZHJhaW4gdGhlIHNwYWNlIGZyb20g
dGhlIChwaHlzaWNhbCkgYmVnaW5uaW5nIG9mCi0gKiB0aGUgYnVmZmVyIHRvIGhlYWQgcG9pbnRl
ci4KKy8qKgorICogCWNvcHlfZnJvbV9yZWFkX2J1ZgktCWNvcHkgcmVhZCBkYXRhIGRpcmVjdGx5
CisgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKKyAqCUBiOiB1c2VyIGRhdGEKKyAqCUBucjogc2l6
ZSBvZiBkYXRhCisgKgorICoJSGVscGVyIGZ1bmN0aW9uIHRvIHNwZWVkIHVwIHJlYWRfY2hhbi4g
IEl0IGlzIG9ubHkgY2FsbGVkIHdoZW4KKyAqCUlDQU5PTiBpcyBvZmY7IGl0IGNvcGllcyBjaGFy
YWN0ZXJzIHN0cmFpZ2h0IGZyb20gdGhlIHR0eSBxdWV1ZSB0bworICoJdXNlciBzcGFjZSBkaXJl
Y3RseS4gIEl0IGNhbiBiZSBwcm9maXRhYmx5IGNhbGxlZCB0d2ljZTsgb25jZSB0bworICoJZHJh
aW4gdGhlIHNwYWNlIGZyb20gdGhlIHRhaWwgcG9pbnRlciB0byB0aGUgKHBoeXNpY2FsKSBlbmQg
b2YgdGhlCisgKglidWZmZXIsIGFuZCBvbmNlIHRvIGRyYWluIHRoZSBzcGFjZSBmcm9tIHRoZSAo
cGh5c2ljYWwpIGJlZ2lubmluZyBvZgorICoJdGhlIGJ1ZmZlciB0byBoZWFkIHBvaW50ZXIuCisg
KgorICoJQ2FsbGVkIHVuZGVyIHRoZSB0dHktPmF0b21pY19yZWFkIHNlbSBhbmQgd2l0aCBUVFlf
RE9OVF9GTElQIHNldAorICoKICAqLworIAogc3RhdGljIGlubGluZSBpbnQgY29weV9mcm9tX3Jl
YWRfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJICAgICAgdW5zaWduZWQgY2hhciBf
X3VzZXIgKipiLAogCQkJCSAgICAgIHNpemVfdCAqbnIpCkBAIC05NzUsMjUgKzExODAsMTggQEAK
IAogZXh0ZXJuIHNzaXplX3QgcmVkaXJlY3RlZF90dHlfd3JpdGUoc3RydWN0IGZpbGUgKixjb25z
dCBjaGFyICosc2l6ZV90LGxvZmZfdCAqKTsKIAotc3RhdGljIHNzaXplX3QgcmVhZF9jaGFuKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJIHVuc2lnbmVkIGNo
YXIgX191c2VyICpidWYsIHNpemVfdCBucikKKy8qKgorICoJam9iX2NvbnRyb2wJCS0JY2hlY2sg
am9iIGNvbnRyb2wKKyAqCUB0dHk6IHR0eQorICoJQGZpbGU6IGZpbGUgaGFuZGxlCisgKgorICoJ
UGVyZm9ybSBqb2IgY29udHJvbCBtYW5hZ2VtZW50IGNoZWNrcyBvbiB0aGlzIGZpbGUvdHR5IGRl
c2NyaXB0b3IKKyAqCWFuZCBpZiBhcHByb3ByaWF0ZSBzZW5kIGFueSBuZWVkZWQgc2lnbmFscyBh
bmQgcmV0dXJuIGEgbmVnYXRpdmUgCisgKgllcnJvciBjb2RlIGlmIGFjdGlvbiBzaG91bGQgYmUg
dGFrZW4uCisgKi8KKyAKK3N0YXRpYyBpbnQgam9iX2NvbnRyb2woc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdW5zaWduZWQgY2hhciBfX3VzZXIgKmIgPSBi
dWY7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JaW50IGM7Ci0JaW50IG1p
bmltdW0sIHRpbWU7Ci0Jc3NpemVfdCByZXR2YWwgPSAwOwotCXNzaXplX3Qgc2l6ZTsKLQlsb25n
IHRpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotZG9faXRfYWdhaW46Ci0KLQlpZiAo
IXR0eS0+cmVhZF9idWYpIHsKLQkJcHJpbnRrKCJuX3R0eV9yZWFkX2NoYW46IGNhbGxlZCB3aXRo
IHJlYWRfYnVmID09IE5VTEw/IT9cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KIAkvKiBKb2Ig
Y29udHJvbCBjaGVjayAtLSBtdXN0IGJlIGRvbmUgYXQgc3RhcnQgYW5kIGFmdGVyCiAJICAgZXZl
cnkgc2xlZXAgKFBPU0lYLjEgNy4xLjEuNCkuICovCiAJLyogTk9URTogbm90IHlldCBkb25lIGFm
dGVyIGV2ZXJ5IHNsZWVwIHBlbmRpbmcgYSB0aG9yb3VnaApAQCAtMTAxMSw3ICsxMjA5LDQ4IEBA
CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJfQorCXJldHVybiAwOworfQorIAorCisv
KioKKyAqCXJlYWRfY2hhbgkJLQlyZWFkIGZ1bmN0aW9uIGZvciB0dHkKKyAqCUB0dHk6IHR0eSBk
ZXZpY2UKKyAqCUBmaWxlOiBmaWxlIG9iamVjdAorICoJQGJ1ZjogdXNlcnNwYWNlIGJ1ZmZlciBw
b2ludGVyCisgKglAbnI6IHNpemUgb2YgSS9PCisgKgorICoJUGVyZm9ybSByZWFkcyBmb3IgdGhl
IGxpbmUgZGlzY2lwbGluZS4gV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKKyAqCWxpbmUgZGlz
Y2lwbGluZSB3aWxsIG5vdCBiZSBjbG9zZWQgdW5kZXIgdXMgYnV0IHdlIG1heSBnZXQgbXVsdGlw
bGUKKyAqCXBhcmFsbGVsIHJlYWRlcnMgYW5kIG11c3QgaGFuZGxlIHRoaXMgb3Vyc2VsdmVzLiBX
ZSBtYXkgYWxzbyBnZXQKKyAqCWEgaGFuZ3VwLiBBbHdheXMgY2FsbGVkIGluIHVzZXIgY29udGV4
dCwgbWF5IHNsZWVwLgorICoKKyAqCVRoaXMgY29kZSBtdXN0IGJlIHN1cmUgbmV2ZXIgdG8gc2xl
ZXAgdGhyb3VnaCBhIGhhbmd1cC4KKyAqLworIAorc3RhdGljIHNzaXplX3QgcmVhZF9jaGFuKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGNo
YXIgX191c2VyICpidWYsIHNpemVfdCBucikKK3sKKwl1bnNpZ25lZCBjaGFyIF9fdXNlciAqYiA9
IGJ1ZjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlpbnQgYzsKKwlpbnQg
bWluaW11bSwgdGltZTsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisJc3NpemVfdCBzaXplOworCWxv
bmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCitkb19pdF9hZ2FpbjoKKworCWlm
ICghdHR5LT5yZWFkX2J1ZikgeworCQlwcmludGsoIm5fdHR5X3JlYWRfY2hhbjogY2FsbGVkIHdp
dGggcmVhZF9idWYgPT0gTlVMTD8hP1xuIik7CisJCXJldHVybiAtRUlPOworCX0KIAorCWMgPSBq
b2JfY29udHJvbCh0dHksIGZpbGUpOworCWlmKGMgPCAwKQorCQlyZXR1cm4gYzsKKwkKIAltaW5p
bXVtID0gdGltZSA9IDA7CiAJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCWlmICgh
dHR5LT5pY2Fub24pIHsKQEAgLTEwMzMsNiArMTI3Miw5IEBACiAJCX0KIAl9CiAKKwkvKgorCSAq
CUludGVybmFsIHNlcmlhbGl6YXRpb24gb2YgcmVhZHMuCisJICovCiAJaWYgKGZpbGUtPmZfZmxh
Z3MgJiBPX05PTkJMT0NLKSB7CiAJCWlmIChkb3duX3RyeWxvY2soJnR0eS0+YXRvbWljX3JlYWQp
KQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0xMTgyLDYgKzE0MjQsMjEgQEAKIAlyZXR1cm4gcmV0
dmFsOwogfQogCisvKioKKyAqCXdyaXRlX2NoYW4JCS0Jd3JpdGUgZnVuY3Rpb24gZm9yIHR0eQor
ICoJQHR0eTogdHR5IGRldmljZQorICoJQGZpbGU6IGZpbGUgb2JqZWN0CisgKglAYnVmOiB1c2Vy
c3BhY2UgYnVmZmVyIHBvaW50ZXIKKyAqCUBucjogc2l6ZSBvZiBJL08KKyAqCisgKglXcml0ZSBm
dW5jdGlvbiBvZiB0aGUgdGVybWluYWwgZGV2aWNlLiBUaGlzIGlzIHNlcmlhbGl6ZWQgd2l0aAor
ICoJcmVzcGVjdCB0byBvdGhlciB3cml0ZSBjYWxsZXJzIGJ1dCBub3QgdG8gdGVybWlvcyBjaGFu
Z2VzLCByZWFkcworICoJYW5kIG90aGVyIHN1Y2ggZXZlbnRzLiBXZSBtdXN0IGJlIGNhcmVmdWwg
d2l0aCBOX1RUWSBhcyB0aGUgcmVjZWl2ZQorICoJY29kZSB3aWxsIGVjaG8gY2hhcmFjdGVycywg
dGh1cyBjYWxsaW5nIGRyaXZlciB3cml0ZSBtZXRob2RzLgorICoKKyAqCVRoaXMgY29kZSBtdXN0
IGJlIHN1cmUgbmV2ZXIgdG8gc2xlZXAgdGhyb3VnaCBhIGhhbmd1cC4KKyAqLworIAogc3RhdGlj
IHNzaXplX3Qgd3JpdGVfY2hhbihzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUg
KiBmaWxlLAogCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IG5y
KQogewpAQCAtMTI1MSw3ICsxNTA4LDI1IEBACiAJcmV0dXJuIChiIC0gYnVmKSA/IGIgLSBidWYg
OiByZXR2YWw7CiB9CiAKLS8qIENhbGxlZCB3aXRob3V0IHRoZSBrZXJuZWwgbG9jayBoZWxkIC0g
ZmluZSAqLworLyoqCisgKglub3JtYWxfcG9sbAkJLQlwb2xsIG1ldGhvZCBmb3IgTl9UVFkKKyAq
CUB0dHk6IHRlcm1pbmFsIGRldmljZQorICoJQGZpbGU6IGZpbGUgYWNjZXNzaW5nIGl0CisgKglA
d2FpdDogcG9sbCB0YWJsZQorICoKKyAqCUNhbGxlZCB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUg
aXMgYXNrZWQgdG8gcG9sbCgpIGZvciBkYXRhIG9yCisgKglmb3Igc3BlY2lhbCBldmVudHMuIFRo
aXMgY29kZSBpcyBub3Qgc2VyaWFsaXplZCB3aXRoIHJlc3BlY3QgdG8KKyAqCW90aGVyIGV2ZW50
cyBzYXZlIG9wZW4vY2xvc2UuCisgKgorICoJVGhpcyBjb2RlIG11c3QgYmUgc3VyZSBuZXZlciB0
byBzbGVlcCB0aHJvdWdoIGEgaGFuZ3VwLgorICoJQ2FsbGVkIHdpdGhvdXQgdGhlIGtlcm5lbCBs
b2NrIGhlbGQgLSBmaW5lCisgKgorICoJRklYTUU6IGlmIHNvbWVvbmUgY2hhbmdlcyB0aGUgVk1J
TiBvciBkaXNjaXBsaW5lIHNldHRpbmdzIGZvciB0aGUKKyAqCXRlcm1pbmFsIHdoaWxlIGFub3Ro
ZXIgcHJvY2VzcyBpcyBpbiBwb2xsKCkgdGhlIHBvbGwgZG9lcyBub3QKKyAqCXJlY29tcHV0ZSB0
aGUgbmV3IGxpbWl0cy4gUG9zc2libHkgc2V0X3Rlcm1pb3Mgc2hvdWxkIGlzc3VlCisgKglhIHJl
YWQgd2FrZXVwIHRvIGZpeCB0aGlzIGJ1Zy4KKyAqLworIAogc3RhdGljIHVuc2lnbmVkIGludCBu
b3JtYWxfcG9sbChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLCBw
b2xsX3RhYmxlICp3YWl0KQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTEyOTIsNiAr
MTU2Nyw3IEBACiAJbl90dHlfaW9jdGwsCQkvKiBpb2N0bCAqLwogCW5fdHR5X3NldF90ZXJtaW9z
LAkvKiBzZXRfdGVybWlvcyAqLwogCW5vcm1hbF9wb2xsLAkJLyogcG9sbCAqLworCU5VTEwsCQkJ
LyogaGFuZ3VwICovCiAJbl90dHlfcmVjZWl2ZV9idWYsCS8qIHJlY2VpdmVfYnVmICovCiAJbl90
dHlfcmVjZWl2ZV9yb29tLAkvKiByZWNlaXZlX3Jvb20gKi8KIAluX3R0eV93cml0ZV93YWtldXAJ
Lyogd3JpdGVfd2FrZXVwICovCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9jaGFyL3Bj
bWNpYS9zeW5jbGlua19jcy5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9k
cml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMv
Y2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwkyMDA0LTA2LTE1IDIyOjE5OjEzLjAwMDAwMDAwMCAt
MDcwMAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hh
ci9wY21jaWEvc3luY2xpbmtfY3MuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjA4MjQzNzAwMCAtMDgw
MApAQCAtNTI2LDYgKzUyNiw0MCBAQAogCXJldHVybiBtZ3NscGNfZ2V0X3RleHRfcHRyOwogfQog
CisvKioKKyAqIGxpbmUgZGlzY2lwbGluZSBjYWxsYmFjayB3cmFwcGVycworICoKKyAqIFRoZSB3
cmFwcGVycyBtYWludGFpbiBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlcworICogd2hpbGUgY2Fs
bGluZyBpbnRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuCisgKgorICogbGRpc2NfZmx1c2hfYnVmZmVy
IC0gZmx1c2ggbGluZSBkaXNjaXBsaW5lIHJlY2VpdmUgYnVmZmVycworICogbGRpc2NfcmVjZWl2
ZV9idWYgIC0gcGFzcyByZWNlaXZlIGRhdGEgdG8gbGluZSBkaXNjaXBsaW5lCisgKi8KKworc3Rh
dGljIHZvaWQgbGRpc2NfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJ
c3RydWN0IHR0eV9sZGlzYyAqbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYgKGxkKSB7CisJ
CWlmIChsZC0+Zmx1c2hfYnVmZmVyKQorCQkJbGQtPmZsdXNoX2J1ZmZlcih0dHkpOworCQl0dHlf
bGRpc2NfZGVyZWYobGQpOworCX0KK30KKworc3RhdGljIHZvaWQgbGRpc2NfcmVjZWl2ZV9idWYo
c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCSAgICAgIGNvbnN0IF9fdTggKmRhdGEsIGNoYXIg
KmZsYWdzLCBpbnQgY291bnQpCit7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaWYgKCF0dHkp
CisJCXJldHVybjsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAobGQpIHsKKwkJaWYg
KGxkLT5yZWNlaXZlX2J1ZikKKwkJCWxkLT5yZWNlaXZlX2J1Zih0dHksIGRhdGEsIGZsYWdzLCBj
b3VudCk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJfQorfQorCiBzdGF0aWMgZGV2X2xpbmtf
dCAqbWdzbHBjX2F0dGFjaCh2b2lkKQogewogICAgIE1HU0xQQ19JTkZPICppbmZvOwpAQCAtOTgw
LDEzICsxMDE0LDcgQEAKIAkJcHJpbnRrKCJiaF90cmFuc21pdCgpIGVudHJ5IG9uICVzXG4iLCBp
bmZvLT5kZXZpY2VfbmFtZSk7CiAKIAlpZiAodHR5KSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgx
IDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtl
dXApIHsKLQkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfQkggKQotCQkJCXByaW50
ayggIiVzKCVkKTpjYWxsaW5nIGxkaXNjLndyaXRlX3dha2V1cCBvbiAlc1xuIiwKLQkJCQkJX19G
SUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUpOwotCQkJKHR0eS0+bGRpc2Mud3JpdGVf
d2FrZXVwKSh0dHkpOwotCQl9CisJCXR0eV93YWtldXAodHR5KTsKIAkJd2FrZV91cF9pbnRlcnJ1
cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCX0KIH0KQEAgLTE4NzEsMTEgKzE4OTksOSBAQAog
CWluZm8tPnR4X2NvdW50ID0gaW5mby0+dHhfcHV0ID0gaW5mby0+dHhfZ2V0ID0gMDsKIAlkZWxf
dGltZXIoJmluZm8tPnR4X3RpbWVyKTsJCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+
bG9jayxmbGFncyk7Ci0JCisKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0J
ICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXAp
KHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKiBTZW5kIGEgaGlnaC1wcmlvcml0eSBY
T04vWE9GRiBjaGFyYWN0ZXIKQEAgLTI1ODQsOSArMjYxMCw4IEBACiAKIAlpZiAodHR5LT5kcml2
ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCQkK
LQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVy
KHR0eSk7CisKKwlsZGlzY19mbHVzaF9idWZmZXIodHR5KTsKIAkJCiAJc2h1dGRvd24oaW5mbyk7
CiAJCkBAIC00MDU1LDExICs0MDgwLDcgQEAKIAkJCX0gCiAJCQllbHNlCiAjZW5kaWYKLQkJCXsK
LQkJCQkvKiBDYWxsIHRoZSBsaW5lIGRpc2NpcGxpbmUgcmVjZWl2ZSBjYWxsYmFjayBkaXJlY3Rs
eS4gKi8KLQkJCQlpZiAodHR5ICYmIHR0eS0+bGRpc2MucmVjZWl2ZV9idWYpCi0JCQkJCXR0eS0+
bGRpc2MucmVjZWl2ZV9idWYodHR5LCBidWYtPmRhdGEsIGluZm8tPmZsYWdfYnVmLCBmcmFtZXNp
emUpOwotCQkJfQorCQkJCWxkaXNjX3JlY2VpdmVfYnVmKHR0eSwgYnVmLT5kYXRhLCBpbmZvLT5m
bGFnX2J1ZiwgZnJhbWVzaXplKTsKIAkJfQogCX0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2Ry
aXZlcnMvY2hhci9wY3h4LmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2Ry
aXZlcnMvY2hhci9wY3h4LmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9wY3h4LmMJMjAw
NC0wNi0xNSAyMjoxOTozNi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvcGN4eC5jCTIwMDQtMTEtMjMgMTM6MjM6MjMu
MDkwNDM2MDAwIC0wODAwCkBAIC01MzgsMjggKzUzOCwxMSBAQAogCQogCQlpZih0dHktPmRyaXZl
ci0+Zmx1c2hfYnVmZmVyKQogCQkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCQlp
Zih0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0
eSk7CisJCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCQlzaHV0ZG93bihpbmZvKTsKIAkJdHR5LT5j
bG9zaW5nID0gMDsKIAkJaW5mby0+ZXZlbnQgPSAwOwogCQlpbmZvLT50dHkgPSBOVUxMOwotI2lm
bmRlZiBNT0RVTEUKLS8qIGxkaXNjc1tdIGlzIG5vdCBhdmFpbGFibGUgaW4gYSBNT0RVTEUKLSoq
IHdvcnRoIG5vdGluZyB0aGF0IHdoaWxlIEknbSBub3Qgc3VyZSB3aGF0IHRoaXMgaHVuayBvZiBj
b2RlIGlzIHN1cHBvc2VkCi0qKiB0byBkbywgaXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNlcmlh
bC5jIGRyaXZlci4gIEhtbW0uICBJZiB5b3Uga25vdywKLSoqIHBsZWFzZSBzZW5kIG1lIGEgbm90
ZS4gIGJyaWFuQGlsaW54LmNvbQotKiogRG9uJ3Qga25vdyBlaXRoZXIgd2hhdCB0aGlzIGlzIHN1
cHBvc2VkIHRvIGRvIGNocmlzdG9waEBsYW1ldGVyLmNvbS4KLSovCi0JCWlmKHR0eS0+bGRpc2Mu
bnVtICE9IGxkaXNjc1tOX1RUWV0ubnVtKSB7Ci0JCQlpZih0dHktPmxkaXNjLmNsb3NlKQotCQkJ
CSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCQkJdHR5LT5sZGlzYyA9IGxkaXNjc1tOX1RUWV07
Ci0JCQl0dHktPnRlcm1pb3MtPmNfbGluZSA9IE5fVFRZOwotCQkJaWYodHR5LT5sZGlzYy5vcGVu
KQotCQkJCSh0dHktPmxkaXNjLm9wZW4pKHR0eSk7Ci0JCX0KLSNlbmRpZgogCQlpZihpbmZvLT5i
bG9ja2VkX29wZW4pIHsKIAkJCWlmKGluZm8tPmNsb3NlX2RlbGF5KSB7CiAJCQkJY3VycmVudC0+
c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CkBAIC04MDAsOSArNzgzLDcgQEAKIAltZW1vZmYo
Y2gpOwogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0
dHktPndyaXRlX3dhaXQpOwotCWlmKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dB
S0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93
YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBwY3hlX2Zs
dXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0xNjc1LDEwICsxNjU2LDcgQEAK
IAkJCWlmIChldmVudCAmIExPV1RYX0lORCkgewogCQkJCWlmIChjaC0+c3RhdHVzZmxhZ3MgJiBM
T1dXQUlUKSB7CiAJCQkJCWNoLT5zdGF0dXNmbGFncyAmPSB+TE9XV0FJVDsKLQkJCQkJaWYgKCh0
dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCQkJCQl0dHktPmxk
aXNjLndyaXRlX3dha2V1cCkKLQkJCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsK
LQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCQkJCQl0dHlf
d2FrZXVwKHR0eSk7CiAJCQkJfQogCQkJfQogCkBAIC0xNjg2LDEwICsxNjY0LDcgQEAKIAkJCQlj
aC0+c3RhdHVzZmxhZ3MgJj0gflRYQlVTWTsKIAkJCQlpZiAoY2gtPnN0YXR1c2ZsYWdzICYgRU1Q
VFlXQUlUKSB7CiAJCQkJCWNoLT5zdGF0dXNmbGFncyAmPSB+RU1QVFlXQUlUOwotCQkJCQlpZiAo
KHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJCQkJCXR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJCQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkp
OwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJCQkJCXR0
eV93YWtldXAodHR5KTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIxNjUsOCArMjE0MCw3IEBACiAJ
CQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwogCQkJfQogCQkJZWxzZSB7Ci0JCQkJaWYo
dHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQkJCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0
eSk7CisJCQkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJCQl9CiAKIAkJCS8qIEZhbGwgVGhydSAq
LwpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9wdHkuYyBsaW51eC0yLjYuNy0x
MTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3B0eS5jCi0tLSBsaW51eC0yLjYu
Ny9kcml2ZXJzL2NoYXIvcHR5LmMJMjAwNC0wNi0xNSAyMjoxOToxMC4wMDAwMDAwMDAgLTA3MDAK
KysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvcHR5
LmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4wOTI0MzYwMDAgLTA4MDAKQEAgLTkxLDEwICs5MSw3IEBA
CiAJaWYgKCFvX3R0eSkKIAkJcmV0dXJuOwogCi0JaWYgKChvX3R0eS0+ZmxhZ3MgJiAoMSA8PCBU
VFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgb190dHktPmxkaXNjLndyaXRlX3dha2V1cCkK
LQkJKG9fdHR5LT5sZGlzYy53cml0ZV93YWtldXApKG9fdHR5KTsKLQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJm9fdHR5LT53cml0ZV93YWl0KTsKKwl0dHlfd2FrZXVwKG9fdHR5KTsKIAlzZXRfYml0
KFRUWV9USFJPVFRMRUQsICZ0dHktPmZsYWdzKTsKIH0KIApAQCAtMTA3LDYgKzEwNCwxMCBAQAog
ICogICAoMikgYXZvaWQgcmVkdW5kYW50IGNvcHlpbmcgZm9yIGNhc2VzIHdoZXJlIGNvdW50ID4+
IHJlY2VpdmVfcm9vbQogICogTi5CLiBDYWxscyBmcm9tIHVzZXIgc3BhY2UgbWF5IG5vdyByZXR1
cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mCiAgKiBhIGNvdW50LgorICoKKyAqIEZJWE1FOiBP
dXIgcHR5X3dyaXRlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBvdXIgbGRpc2MgbG9jayBoZWxkIGJ1
dAorICogbm90IG91ciBwYXJ0bmVycy4gV2UgY2FuJ3QganVzdCB0YWtlIHRoZSBvdGhlciBvbmUg
YmxpbmRseSB3aXRob3V0CisgKiByaXNraW5nIGRlYWRsb2Nrcy4gIFRoZXJlIGlzIGFsc28gdGhl
IHNtYWxsIG1hdHRlciBvZiBUVFlfRE9OVF9GTElQCiAgKi8KIHN0YXRpYyBpbnQgcHR5X3dyaXRl
KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBpbnQgZnJvbV91c2VyLAogCQkgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJp
dmVycy9jaGFyL3Jpc2NvbTguYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQv
ZHJpdmVycy9jaGFyL3Jpc2NvbTguYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL3Jpc2Nv
bTguYwkyMDA0LTA2LTE1IDIyOjE5OjIyLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42Ljct
MTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9yaXNjb204LmMJMjAwNC0xMS0y
MyAxMzoyMzoyMy4wOTg0MzUwMDAgLTA4MDAKQEAgLTExMjcsOCArMTEyNyw4IEBACiAJcmNfc2h1
dGRvd25fcG9ydChicCwgcG9ydCk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJ
CXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9i
dWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNo
KHR0eSk7CisKIAl0dHktPmNsb3NpbmcgPSAwOwogCXBvcnQtPmV2ZW50ID0gMDsKIAlwb3J0LT50
dHkgPSAwOwpAQCAtMTMwMSw5ICsxMzAxLDcgQEAKIAlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAkK
IAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZs
YWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1
cCh0dHkpOwogfQogCiBzdGF0aWMgaW50IHJjX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0
dHksIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTY0Myw5ICsxNjQxLDcgQEAKIAkJcmV0dXJuOwog
CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZwb3J0LT5l
dmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkp
ICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRl
X3dha2V1cCkodHR5KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2ludGVycnVwdGli
bGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAJfQogfQpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZl
cnMvY2hhci9yb2NrZXQuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJp
dmVycy9jaGFyL3JvY2tldC5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvcm9ja2V0LmMJ
MjAwNC0wNi0xNSAyMjoxOTo0Mi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvcm9ja2V0LmMJMjAwNC0xMS0yMyAxMzoy
MzoyMy4xMDg0MzMwMDAgLTA4MDAKQEAgLTI1MCwxMiArMjUwLDE2IEBACiAJCQkgIENIQU5ORUxf
dCAqIGNwLCB1bnNpZ25lZCBpbnQgQ2hhblN0YXR1cykKIHsKIAl1bnNpZ25lZCBpbnQgQ2hhck5T
dGF0OwotCWludCBUb1JlY3YsIHdSZWN2LCBzcGFjZSwgY291bnQ7CisJaW50IFRvUmVjdiwgd1Jl
Y3YsIHNwYWNlID0gMCwgY291bnQ7CiAJdW5zaWduZWQgY2hhciAqY2J1ZjsKIAljaGFyICpmYnVm
OworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAK
IAlUb1JlY3YgPSBzR2V0UnhDbnQoY3ApOwotCXNwYWNlID0gdHR5LT5sZGlzYy5yZWNlaXZlX3Jv
b20odHR5KTsKKwlpZiAobGQpCisJCXNwYWNlID0gbGQtPnJlY2VpdmVfcm9vbSh0dHkpOwogCWlm
IChzcGFjZSA+IDIgKiBUVFlfRkxJUEJVRl9TSVpFKQogCQlzcGFjZSA9IDIgKiBUVFlfRkxJUEJV
Rl9TSVpFOwogCWNidWYgPSB0dHktPmZsaXAuY2hhcl9idWY7CkBAIC0zNTQsNyArMzU4LDggQEAK
IAkJY291bnQgKz0gVG9SZWN2OwogCX0KIAkvKiAgUHVzaCB0aGUgZGF0YSB1cCB0byB0aGUgdHR5
IGxheWVyICovCi0JdHR5LT5sZGlzYy5yZWNlaXZlX2J1Zih0dHksIHR0eS0+ZmxpcC5jaGFyX2J1
ZiwgdHR5LT5mbGlwLmZsYWdfYnVmLCBjb3VudCk7CisJbGQtPnJlY2VpdmVfYnVmKHR0eSwgdHR5
LT5mbGlwLmNoYXJfYnVmLCB0dHktPmZsaXAuZmxhZ19idWYsIGNvdW50KTsKKwl0dHlfbGRpc2Nf
ZGVyZWYobGQpOwogfQogCiAvKgpAQCAtNDA4LDggKzQxMyw3IEBACiAJCWNsZWFyX2JpdCgoaW5m
by0+YWlvcCAqIDgpICsgaW5mby0+Y2hhbiwgKHZvaWQgKikgJnhtaXRfZmxhZ3NbaW5mby0+Ym9h
cmRdKTsKIAogCWlmIChpbmZvLT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykgewotCQlpZiAoKHR0
eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgdHR5LT5sZGlzYy53cml0
ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCQl0dHlfd2Fr
ZXVwKHR0eSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKICNp
ZmRlZiBST0NLRVRQT1JUX0hBVkVfUE9MTF9XQUlUCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT5wb2xsX3dhaXQpOwpAQCAtMTAyMiw3ICsxMDI2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZs
YWdzOwogCWludCB0aW1lb3V0OwogCUNIQU5ORUxfdCAqY3A7Ci0KKwkKIAlpZiAocm9ja2V0X3Bh
cmFub2lhX2NoZWNrKGluZm8sICJycF9jbG9zZSIpKQogCQlyZXR1cm47CiAKQEAgLTExMDEsOCAr
MTEwNSw4IEBACiAKIAlpZiAoVFRZX0RSSVZFUl9GTFVTSF9CVUZGRVJfRVhJU1RTKHR0eSkpCiAJ
CVRUWV9EUklWRVJfRkxVU0hfQlVGRkVSKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVm
ZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQkKKwl0dHlfbGRpc2NfZmx1
c2godHR5KTsKIAogCWNsZWFyX2JpdCgoaW5mby0+YWlvcCAqIDgpICsgaW5mby0+Y2hhbiwgKHZv
aWQgKikgJnhtaXRfZmxhZ3NbaW5mby0+Ym9hcmRdKTsKIApAQCAtMTczMCw4ICsxNzM0LDcgQEAK
IAkKIGVuZDoKICAJaWYgKGluZm8tPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTKSB7Ci0JCWlmICgo
dHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAgJiYgdHR5LT5sZGlzYy53
cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworIAkJdHR5
X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7
CiAjaWZkZWYgUk9DS0VUUE9SVF9IQVZFX1BPTExfV0FJVAogCQl3YWtlX3VwX2ludGVycnVwdGli
bGUoJnR0eS0+cG9sbF93YWl0KTsKQEAgLTE4MDUsOCArMTgwOCw3IEBACiAjaWZkZWYgUk9DS0VU
UE9SVF9IQVZFX1BPTExfV0FJVAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dh
aXQpOwogI2VuZGlmCi0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtl
dXApICh0dHkpOworCXR0eV93YWtldXAodHR5KTsKIAogCWNwID0gJmluZm8tPmNoYW5uZWw7CiAJ
c0ZsdXNoVHhGSUZPKGNwKTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvc2Vs
ZWN0aW9uLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hh
ci9zZWxlY3Rpb24uYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCTIw
MDQtMDYtMTUgMjI6MjA6MDQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NB
Ti0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCTIwMDQtMTEtMjMgMTM6
MjM6MjMuMTEwNDMzMDAwIC0wODAwCkBAIC0yODEsMTIgKzI4MSwxNSBAQAogewogCXN0cnVjdCB2
dF9zdHJ1Y3QgKnZ0ID0gKHN0cnVjdCB2dF9zdHJ1Y3QgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlp
bnQJcGFzdGVkID0gMCwgY291bnQ7CisJc3RydWN0ICB0dHlfbGRpc2MgKmxkOwogCURFQ0xBUkVf
V0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXBv
a2VfYmxhbmtlZF9jb25zb2xlKCk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCisJbGQgPSB0
dHlfbGRpc2NfcmVmX3dhaXQodHR5KTsKKwkKIAlhZGRfd2FpdF9xdWV1ZSgmdnQtPnBhc3RlX3dh
aXQsICZ3YWl0KTsKIAl3aGlsZSAoc2VsX2J1ZmZlciAmJiBzZWxfYnVmZmVyX2x0aCA+IHBhc3Rl
ZCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMzAxLDYg
KzMwNCw4IEBACiAJfQogCXJlbW92ZV93YWl0X3F1ZXVlKCZ2dC0+cGFzdGVfd2FpdCwgJndhaXQp
OwogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCisJdHR5X2xkaXNjX2RlcmVmKGxk
KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9z
ZXJfYTIyMzIuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9j
aGFyL3Nlcl9hMjIzMi5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMJ
MjAwNC0wNi0xNSAyMjoxOTowMy4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMJMjAwNC0xMS0yMyAx
MzoyMzoyMy4xMTM0MzIwMDAgLTA4MDAKQEAgLTYwMywxMCArNjAzLDcgQEAKIAkJCQkJCiAJCQkJ
LyogV2FrZVVwIGlmIG91dHB1dCBidWZmZXIgcnVucyBsb3cgKi8KIAkJCQlpZiAoKHBvcnQtPmdz
LnhtaXRfY250IDw9IHBvcnQtPmdzLndha2V1cF9jaGFycykgJiYgcG9ydC0+Z3MudHR5KSB7Ci0J
CQkJCWlmICgocG9ydC0+Z3MudHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVAp
KSAmJiBwb3J0LT5ncy50dHktPmxkaXNjLndyaXRlX3dha2V1cCl7Ci0JCQkJCQkocG9ydC0+Z3Mu
dHR5LT5sZGlzYy53cml0ZV93YWtldXApKHBvcnQtPmdzLnR0eSk7Ci0JCQkJCX0KLQkJCQkJd2Fr
ZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5ncy50dHktPndyaXRlX3dhaXQpOworCQkJCQl0dHlf
d2FrZXVwKHBvcnQtPmdzLnR0eSk7CiAJCQkJfQogCQkJfSAvLyBpZiB0aGUgcG9ydCBpcyB1c2Vk
CiAJCX0gLy8gZm9yIGV2ZXJ5IHBvcnQgb24gdGhlIGJvYXJkCmRpZmYgLU5hdXIgbGludXgtMi42
LjcvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgx
NC5maXhlZC9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMv
Y2hhci9zZXJpYWwxNjcuYwkyMDA0LTA2LTE1IDIyOjE5OjIyLjAwMDAwMDAwMCAtMDcwMAorKysg
bGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9zZXJpYWwx
NjcuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjEyMTQzMTAwMCAtMDgwMApAQCAtNzYwLDExICs3NjAs
NyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKICAgICB9CiAg
ICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9XUklURV9XQUtFVVAsICZpbmZvLT5l
dmVudCkpIHsKLQlpZigodHR5LT5mbGFncyAmICgxPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpCi0J
JiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApewotCSAgICAodHR5LT5sZGlzYy53cml0ZV93YWtl
dXApKHR0eSk7Ci0JfQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
KyAgICAJdHR5X3dha2V1cCh0dHkpOwogICAgIH0KIH0gLyogZG9fc29mdGludCAqLwogCkBAIC0x
MzQzLDEwICsxMzM5LDcgQEAKICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaW5mby0+eG1p
dF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogICAgIGxvY2Fs
X2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3Jp
dGVfd2FpdCk7Ci0gICAgaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpCi0gICAgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JKHR0eS0+bGRpc2Mud3JpdGVf
d2FrZXVwKSh0dHkpOworICAgIHR0eV93YWtldXAodHR5KTsKIH0gLyogY3lfZmx1c2hfYnVmZmVy
ICovCiAKIApAQCAtMTg0NiwxOCArMTgzOSw5IEBACiAgICAgc2h1dGRvd24oaW5mbyk7CiAgICAg
aWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZl
cih0dHkpOwotICAgIGlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQl0dHktPmxkaXNjLmZs
dXNoX2J1ZmZlcih0dHkpOworICAgIHR0eV9sZGlzY19mbHVzaCh0dHkpOwogICAgIGluZm8tPmV2
ZW50ID0gMDsKICAgICBpbmZvLT50dHkgPSAwOwotICAgIGlmICh0dHktPmxkaXNjLm51bSAhPSBs
ZGlzY3NbTl9UVFldLm51bSkgewotCWlmICh0dHktPmxkaXNjLmNsb3NlKQotCSAgICAodHR5LT5s
ZGlzYy5jbG9zZSkodHR5KTsKLQl0dHktPmxkaXNjID0gbGRpc2NzW05fVFRZXTsKLQl0dHktPnRl
cm1pb3MtPmNfbGluZSA9IE5fVFRZOwotCWlmICh0dHktPmxkaXNjLm9wZW4pCi0JICAgICh0dHkt
PmxkaXNjLm9wZW4pKHR0eSk7Ci0gICAgfQogICAgIGlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsK
IAlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKIAkgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lO
VEVSUlVQVElCTEU7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9jaGFyL3NlcmlhbF90
eDM5MTIuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFy
L3NlcmlhbF90eDM5MTIuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFyL3NlcmlhbF90eDM5
MTIuYwkyMDA0LTA2LTE1IDIyOjE5OjI2LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42Ljct
MTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9zZXJpYWxfdHgzOTEyLmMJMjAw
NC0xMS0yMyAxMzoyMzoyMy4xMjU0MzEwMDAgLTA4MDAKQEAgLTE5MSwxMiArMTkxLDkgQEAKIAl9
CiAJCiAgICAgICAgIGlmIChwb3J0LT5ncy54bWl0X2NudCA8PSBwb3J0LT5ncy53YWtldXBfY2hh
cnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBvcnQtPmdzLnR0eS0+ZmxhZ3MgJiAoMSA8PCBU
VFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgcG9ydC0+Z3MudHR5
LT5sZGlzYy53cml0ZV93YWtldXApCi0gICAgICAgICAgICAgICAgICAgICAgICAocG9ydC0+Z3Mu
dHR5LT5sZGlzYy53cml0ZV93YWtldXApKHBvcnQtPmdzLnR0eSk7CisgICAgICAgIAl0dHlfd2Fr
ZXVwKHBvcnQtPmdzLnR0eSk7CiAgICAgICAgICAgICAgICAgcnNfZHByaW50ayAoVFgzOTEyX1VB
UlRfREVCVUdfVFJBTlNNSVQsICJXYWtpbmcgdXAuLi4uIGxkaXNjICglZCkuLi4uXG4iLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQtPmdzLndha2V1cF9jaGFycyk7IAotICAgICAg
ICAgICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Z3MudHR5LT53cml0ZV93YWl0
KTsKICAgICAgICAJfQkKIH0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9z
cGVjaWFsaXguYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9j
aGFyL3NwZWNpYWxpeC5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMJ
MjAwNC0wNi0xNSAyMjoxOTo1My4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMJMjAwNC0xMS0yMyAx
MzoyMzoyMy4xMzE0MzAwMDAgLTA4MDAKQEAgLTE0NjgsOCArMTQ2OCw3IEBACiAJc3hfc2h1dGRv
d25fcG9ydChicCwgcG9ydCk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0
eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZm
ZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNoKHR0
eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlwb3J0LT5ldmVudCA9IDA7CiAJcG9ydC0+dHR5ID0g
MDsKQEAgLTE2NDYsMTAgKzE2NDUsOCBAQAogCXBvcnQtPnhtaXRfY250ID0gcG9ydC0+eG1pdF9o
ZWFkID0gcG9ydC0+eG1pdF90YWlsID0gMDsKIAlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAkKKwl0
dHlfd2FrZXVwKHR0eSk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQp
OwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0
dHkpOwogfQogCiAKQEAgLTIwNjQsMTIgKzIwNjEsOCBAQAogCWlmKCEodHR5ID0gcG9ydC0+dHR5
KSkgCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUlNfRVZFTlRfV1JJVEVf
V0FLRVVQLCAmcG9ydC0+ZXZlbnQpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9E
T19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQko
dHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT53cml0ZV93YWl0KTsKLQl9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9X
UklURV9XQUtFVVAsICZwb3J0LT5ldmVudCkpCisJCXR0eV93YWtldXAodHR5KTsKIH0KIAogc3Rh
dGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzeF9vcHMgPSB7CmRpZmYgLU5hdXIgbGludXgtMi42
LjcvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0
LmZpeGVkL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2No
YXIvc3RhbGxpb24uYwkyMDA0LTA2LTE1IDIyOjE5OjQ0LjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5j
CTIwMDQtMTEtMjMgMTM6MjM6MjMuMTQ0NDI4MDAwIC0wODAwCkBAIC0xMTk3LDggKzExOTcsNyBA
QAogCQlwb3J0cC0+dHgudGFpbCA9IChjaGFyICopIE5VTEw7CiAJfQogCXNldF9iaXQoVFRZX0lP
X0VSUk9SLCAmdHR5LT5mbGFncyk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQko
dHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAK
IAl0dHktPmNsb3NpbmcgPSAwOwogCXBvcnRwLT50dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikg
TlVMTDsKQEAgLTE4MTgsMTAgKzE4MTcsNyBAQAogCQlyZXR1cm47CiAKIAlzdGxfZmx1c2gocG9y
dHApOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0
eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlz
Yy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlf
d2FrZXVwKHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMDIsMTAgKzIx
OTgsNyBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAodGVzdF9iaXQoQVNZSV9UWExPVywgJnBv
cnRwLT5pc3RhdGUpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9X
QUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlz
Yy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0
ZV93YWl0KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCX0KIAlpZiAodGVzdF9iaXQoQVNZSV9EQ0RD
SEFOR0UsICZwb3J0cC0+aXN0YXRlKSkgewogCQljbGVhcl9iaXQoQVNZSV9EQ0RDSEFOR0UsICZw
b3J0cC0+aXN0YXRlKTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvc3guYyBs
aW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3N4LmMKLS0t
IGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci9zeC5jCTIwMDQtMDYtMTUgMjI6MTk6MTMuMDAwMDAw
MDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVy
cy9jaGFyL3N4LmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4xNTI0MjcwMDAgLTA4MDAKQEAgLTEwNDQs
MTIgKzEwNDQsOSBAQAogCX0KIAogCWlmICgocG9ydC0+Z3MueG1pdF9jbnQgPD0gcG9ydC0+Z3Mu
d2FrZXVwX2NoYXJzKSAmJiBwb3J0LT5ncy50dHkpIHsKLQkJaWYgKChwb3J0LT5ncy50dHktPmZs
YWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAgICBwb3J0LT5ncy50dHkt
PmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCShwb3J0LT5ncy50dHktPmxkaXNjLndyaXRlX3dha2V1
cCkocG9ydC0+Z3MudHR5KTsKKwkJdHR5X3dha2V1cChwb3J0LT5ncy50dHkpOwogCQlzeF9kcHJp
bnRrIChTWF9ERUJVR19UUkFOU01JVCwgIldha2luZyB1cC4uLi4gbGRpc2MgKCVkKS4uLi5cbiIs
CiAJCSAgICAgICAgICAgIHBvcnQtPmdzLndha2V1cF9jaGFycyk7IAotCQl3YWtlX3VwX2ludGVy
cnVwdGlibGUoJnBvcnQtPmdzLnR0eS0+d3JpdGVfd2FpdCk7CiAJfQogCiAJY2xlYXJfYml0IChT
WF9QT1JUX1RSQU5TTUlUX0xPQ0ssICZwb3J0LT5sb2Nrcyk7CmRpZmYgLU5hdXIgbGludXgtMi42
LjcvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0
LmZpeGVkL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL2No
YXIvc3luY2xpbmsuYwkyMDA0LTA2LTE1IDIyOjE5OjEzLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci9zeW5jbGluay5j
CTIwMDQtMTEtMjMgMTM6MjM6MjMuMTczNDIzMDAwIC0wODAwCkBAIC05OTMsNiArOTkzLDI5IEBA
CiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbGluZSBkaXNjaXBsaW5lIGNhbGxiYWNrIHdyYXBw
ZXJzCisgKgorICogVGhlIHdyYXBwZXJzIG1haW50YWluIGxpbmUgZGlzY2lwbGluZSByZWZlcmVu
Y2VzCisgKiB3aGlsZSBjYWxsaW5nIGludG8gdGhlIGxpbmUgZGlzY2lwbGluZS4KKyAqCisgKiBs
ZGlzY19yZWNlaXZlX2J1ZiAgLSBwYXNzIHJlY2VpdmUgZGF0YSB0byBsaW5lIGRpc2NpcGxpbmUK
KyAqLworCitzdGF0aWMgdm9pZCBsZGlzY19yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5LAorCQkJICAgICAgY29uc3QgX191OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkK
K3sKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwlpZiAoIXR0eSkKKwkJcmV0dXJuOworCWxkID0g
dHR5X2xkaXNjX3JlZih0dHkpOworCWlmIChsZCkgeworCQlpZiAobGQtPnJlY2VpdmVfYnVmKQor
CQkJbGQtPnJlY2VpdmVfYnVmKHR0eSwgZGF0YSwgZmxhZ3MsIGNvdW50KTsKKwkJdHR5X2xkaXNj
X2RlcmVmKGxkKTsKKwl9Cit9CisKIC8qIG1nc2xfc3RvcCgpCQl0aHJvdHRsZSAoc3RvcCkgdHJh
bnNtaXR0ZXIKICAqIAkKICAqIEFyZ3VtZW50czoJCXR0eQlwb2ludGVyIHRvIHR0eSBpbmZvIHN0
cnVjdHVyZQpAQCAtMTE1MywxMyArMTE3Niw3IEBACiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZv
LT5kZXZpY2VfbmFtZSk7CiAKIAlpZiAodHR5KSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXAp
IHsKLQkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfQkggKQotCQkJCXByaW50aygg
IiVzKCVkKTpjYWxsaW5nIGxkaXNjLndyaXRlX3dha2V1cCBvbiAlc1xuIiwKLQkJCQkJX19GSUxF
X18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUpOwotCQkJKHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSh0dHkpOwotCQl9CisJCXR0eV93YWtldXAodHR5KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRp
YmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCX0KIApAQCAtMjQxNSwxMSArMjQzMiw4IEBACiAJc3Bp
bl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+aXJxX3NwaW5sb2NrLGZsYWdzKTsKIAkKIAl3YWtl
X3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYg
KDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCQotfQkvKiBlbmQgb2Yg
bWdzbF9mbHVzaF9idWZmZXIoKSAqLworCXR0eV93YWtldXAodHR5KTsKK30KIAogLyogbWdzbF9z
ZW5kX3hjaGFyKCkKICAqCkBAIC0zMjUzLDkgKzMyNjcsOCBAQAogCiAJaWYgKHR0eS0+ZHJpdmVy
LT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQkJCi0J
aWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0
dHkpOworCisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJCQogCXNodXRkb3duKGluZm8pOwogCQpA
QCAtNjgzMCwxMSArNjg0Myw3IEBACiAJCQl9IAogCQkJZWxzZQogI2VuZGlmCi0JCQl7Ci0JCQkJ
LyogQ2FsbCB0aGUgbGluZSBkaXNjaXBsaW5lIHJlY2VpdmUgY2FsbGJhY2sgZGlyZWN0bHkuICov
Ci0JCQkJaWYgKCB0dHkgJiYgdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZiApCi0JCQkJdHR5LT5sZGlz
Yy5yZWNlaXZlX2J1Zih0dHksIGluZm8tPmludGVybWVkaWF0ZV9yeGJ1ZmZlciwgaW5mby0+Zmxh
Z19idWYsIGZyYW1lc2l6ZSk7Ci0JCQl9CisJCQkJbGRpc2NfcmVjZWl2ZV9idWYodHR5LCBpbmZv
LT5pbnRlcm1lZGlhdGVfcnhidWZmZXIsIGluZm8tPmZsYWdfYnVmLCBmcmFtZXNpemUpOwogCQl9
CiAJfQogCS8qIEZyZWUgdGhlIGJ1ZmZlcnMgdXNlZCBieSB0aGlzIGZyYW1lLiAqLwpAQCAtNzAw
Niw5ICs3MDE1LDcgQEAKIAkJCW1lbWNweSggaW5mby0+aW50ZXJtZWRpYXRlX3J4YnVmZmVyLCBw
QnVmRW50cnktPnZpcnRfYWRkciwgZnJhbWVzaXplKTsKIAkJCWluZm8tPmljb3VudC5yeG9rKys7
CiAKLQkJCS8qIENhbGwgdGhlIGxpbmUgZGlzY2lwbGluZSByZWNlaXZlIGNhbGxiYWNrIGRpcmVj
dGx5LiAqLwotCQkJaWYgKCB0dHkgJiYgdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZiApCi0JCQkJdHR5
LT5sZGlzYy5yZWNlaXZlX2J1Zih0dHksIGluZm8tPmludGVybWVkaWF0ZV9yeGJ1ZmZlciwgaW5m
by0+ZmxhZ19idWYsIGZyYW1lc2l6ZSk7CisJCQlsZGlzY19yZWNlaXZlX2J1Zih0dHksIGluZm8t
PmludGVybWVkaWF0ZV9yeGJ1ZmZlciwgaW5mby0+ZmxhZ19idWYsIGZyYW1lc2l6ZSk7CiAJCX0K
IAogCQkvKiBGcmVlIHRoZSBidWZmZXJzIHVzZWQgYnkgdGhpcyBmcmFtZS4gKi8KZGlmZiAtTmF1
ciBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCi0tLSBsaW51eC0y
LjYuNy9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCTIwMDQtMDYtMTUgMjI6MTk6MDEuMDAwMDAw
MDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVy
cy9jaGFyL3N5bmNsaW5rbXAuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjE5MDQyMTAwMCAtMDgwMApA
QCAtNzE4LDYgKzcxOCwyOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxpbmUgZGlzY2lw
bGluZSBjYWxsYmFjayB3cmFwcGVycworICoKKyAqIFRoZSB3cmFwcGVycyBtYWludGFpbiBsaW5l
IGRpc2NpcGxpbmUgcmVmZXJlbmNlcworICogd2hpbGUgY2FsbGluZyBpbnRvIHRoZSBsaW5lIGRp
c2NpcGxpbmUuCisgKgorICogbGRpc2NfcmVjZWl2ZV9idWYgIC0gcGFzcyByZWNlaXZlIGRhdGEg
dG8gbGluZSBkaXNjaXBsaW5lCisgKi8KKworc3RhdGljIHZvaWQgbGRpc2NfcmVjZWl2ZV9idWYo
c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCSAgICAgIGNvbnN0IF9fdTggKmRhdGEsIGNoYXIg
KmZsYWdzLCBpbnQgY291bnQpCit7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaWYgKCF0dHkp
CisJCXJldHVybjsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAobGQpIHsKKwkJaWYg
KGxkLT5yZWNlaXZlX2J1ZikKKwkJCWxkLT5yZWNlaXZlX2J1Zih0dHksIGRhdGEsIGZsYWdzLCBj
b3VudCk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJfQorfQorCiAvKiB0dHkgY2FsbGJhY2tz
ICovCiAKIC8qIENhbGxlZCB3aGVuIGEgcG9ydCBpcyBvcGVuZWQuICBJbml0IGFuZCBlbmFibGUg
cG9ydC4KQEAgLTg2NSw4ICs4ODgsNyBAQAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAKLQlpZiAodHR5LT5sZGlzYy5m
bHVzaF9idWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNj
X2ZsdXNoKHR0eSk7CiAKIAlzaHV0ZG93bihpbmZvKTsKIApAQCAtMTI3MSw5ICsxMjkzLDcgQEAK
IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAogCXdha2VfdXBf
aW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8
PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXAp
Ci0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9
CiAKIC8qIHRocm90dGxlIChzdG9wKSB0cmFuc21pdHRlcgpAQCAtMTkzNiwxMyArMTk1Niw3IEBA
CiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSk7CiAKIAlpZiAodHR5KSB7
Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkg
ICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVC
VUdfTEVWRUxfQkggKQotCQkJCXByaW50ayggIiVzKCVkKTolcyBjYWxsaW5nIGxkaXNjLndyaXRl
X3dha2V1cFxuIiwKLQkJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUpOwot
CQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCQl9CisJCXR0eV93YWtldXAodHR5
KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCX0KIH0KQEAg
LTQ4NjQsMTUgKzQ4NzgsOCBAQAogCQkJfQogCQkJZWxzZQogI2VuZGlmCi0JCQl7Ci0JCQkJaWYg
KCB0dHkgJiYgdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZiApIHsKLQkJCQkJLyogQ2FsbCB0aGUgbGlu
ZSBkaXNjaXBsaW5lIHJlY2VpdmUgY2FsbGJhY2sgZGlyZWN0bHkuICovCi0JCQkJCXR0eS0+bGRp
c2MucmVjZWl2ZV9idWYodHR5LAotCQkJCQkJaW5mby0+dG1wX3J4X2J1ZiwKLQkJCQkJCWluZm8t
PmZsYWdfYnVmLAotCQkJCQkJZnJhbWVzaXplKTsKLQkJCQl9Ci0JCQl9CisJCQkJbGRpc2NfcmVj
ZWl2ZV9idWYodHR5LGluZm8tPnRtcF9yeF9idWYsCisJCQkJCQkgIGluZm8tPmZsYWdfYnVmLCBm
cmFtZXNpemUpOwogCQl9CiAJfQogCS8qIEZyZWUgdGhlIGJ1ZmZlcnMgdXNlZCBieSB0aGlzIGZy
YW1lLiAqLwpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci90dHlfaW8uYyBsaW51
eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3R0eV9pby5jCi0t
LSBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvdHR5X2lvLmMJMjAwNC0wNi0xNSAyMjoxOTozNi4w
MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9k
cml2ZXJzL2NoYXIvdHR5X2lvLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yMDc0MTgwMDAgLTA4MDAK
QEAgLTkxLDYgKzkxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxs
aW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxp
bnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5
c3RlbS5oPgpAQCAtMTE5LDExICsxMjAsMTcgQEAKIAogRVhQT1JUX1NZTUJPTCh0dHlfc3RkX3Rl
cm1pb3MpOwogCisvKiBUaGlzIGxpc3QgZ2V0cyBwb2tlZCBhdCBieSBwcm9jZnMgYW5kIHZhcmlv
dXMgYml0cyBvZiBib290IHVwIGNvZGUuIFRoaXMKKyAgIGNvdWxkIGRvIHdpdGggc29tZSByYXRp
b25hbGlzYXRpb24gc3VjaCBhcyBwdWxsaW5nIHRoZSB0dHkgcHJvYyBmdW5jdGlvbgorICAgaW50
byB0aGlzIGZpbGUgKi8KKyAgIAogTElTVF9IRUFEKHR0eV9kcml2ZXJzKTsJCQkvKiBsaW5rZWQg
bGlzdCBvZiB0dHkgZHJpdmVycyAqLwotc3RydWN0IHR0eV9sZGlzYyBsZGlzY3NbTlJfTERJU0NT
XTsJLyogbGluZSBkaXNjIGRpc3BhdGNoIHRhYmxlCSovCiAKLS8qIFNlbWFwaG9yZSB0byBwcm90
ZWN0IGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSB0dHkgKi8KKy8qIFNlbWFwaG9yZSB0byBwcm90
ZWN0IGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSB0dHkuIFRoaXMgaXMgc2hhcmVkIHdpdGgKKyAg
IHZ0LmMgZm9yIGRlZXBseSBkaXNndXN0aW5nIGhhY2sgcmVhc29ucyAqLwogREVDTEFSRV9NVVRF
WCh0dHlfc2VtKTsKKy8qIExvY2sgZm9yIHR0eV90ZXJtaW9zIGNoYW5nZXMgLSBwcml2YXRlIHRv
IHR0eV9pby90dHlfaW9jdGwgKi8KK3NwaW5sb2NrX3QgdHR5X3Rlcm1pb3NfbG9jayA9IFNQSU5f
TE9DS19VTkxPQ0tFRDsKIAogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwogZXh0ZXJuIHN0cnVj
dCB0dHlfZHJpdmVyICpwdG1fZHJpdmVyOwkvKiBVbml4OTggcHR5IG1hc3RlcnM7IGZvciAvZGV2
L3B0bXggKi8KQEAgLTIyMCw2NSArMjI3LDMyNCBAQAogCXJldHVybiAwOwogfQogCisvKgorICoJ
VGhpcyBpcyBwcm9iYWJseSBvdmVya2lsbCBmb3IgcmVhbCB3b3JsZCBwcm9jZXNzb3JzIGJ1dAor
ICoJdGhleSBhcmUgbm90IG9uIGhvdCBwYXRocyBzbyBhIGxpdHRsZSBkaXNjaXBsaW5lIHdvbid0
IGRvIAorICoJYW55IGhhcm0uCisgKi8KKyAKK3N0YXRpYyB2b2lkIHR0eV9zZXRfdGVybWlvc19s
ZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbnVtKQoreworCXVuc2lnbmVkIGxvbmcg
ZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKKwl0
dHktPnRlcm1pb3MtPmNfbGluZSA9IG51bTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlf
dGVybWlvc19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKglUaGlzIGd1YXJkcyB0aGUgcmVmY291
bnRlZCBsaW5lIGRpc2NpcGxpbmUgbGlzdHMuIFRoZSBsb2NrCisgKgltdXN0IGJlIHRha2VuIHdp
dGggaXJxcyBvZmYgYmVjYXVzZSB0aGVyZSBhcmUgaGFuZ3VwIHBhdGgKKyAqCWNhbGxlcnMgd2hv
IHdpbGwgZG8gbGRpc2MgbG9va3VwcyBhbmQgY2Fubm90IHNsZWVwLgorICovCisgCitzdGF0aWMg
c3BpbmxvY2tfdCB0dHlfbGRpc2NfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBE
RUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0dHlfbGRpc2Nfd2FpdCk7CitzdGF0aWMgc3RydWN0IHR0
eV9sZGlzYyB0dHlfbGRpc2NzW05SX0xESVNDU107CS8qIGxpbmUgZGlzYyBkaXNwYXRjaCB0YWJs
ZQkqLworCiBpbnQgdHR5X3JlZ2lzdGVyX2xkaXNjKGludCBkaXNjLCBzdHJ1Y3QgdHR5X2xkaXNj
ICpuZXdfbGRpc2MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwkK
IAlpZiAoZGlzYyA8IE5fVFRZIHx8IGRpc2MgPj0gTlJfTERJU0NTKQogCQlyZXR1cm4gLUVJTlZB
TDsKIAkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKIAlpZiAo
bmV3X2xkaXNjKSB7Ci0JCWxkaXNjc1tkaXNjXSA9ICpuZXdfbGRpc2M7Ci0JCWxkaXNjc1tkaXNj
XS5mbGFncyB8PSBMRElTQ19GTEFHX0RFRklORUQ7Ci0JCWxkaXNjc1tkaXNjXS5udW0gPSBkaXNj
OwotCX0gZWxzZQotCQltZW1zZXQoJmxkaXNjc1tkaXNjXSwgMCwgc2l6ZW9mKHN0cnVjdCB0dHlf
bGRpc2MpKTsKKwkJdHR5X2xkaXNjc1tkaXNjXSA9ICpuZXdfbGRpc2M7CisJCXR0eV9sZGlzY3Nb
ZGlzY10ubnVtID0gZGlzYzsKKwkJdHR5X2xkaXNjc1tkaXNjXS5mbGFncyB8PSBMRElTQ19GTEFH
X0RFRklORUQ7CisJCXR0eV9sZGlzY3NbZGlzY10ucmVmY291bnQgPSAwOworCX0gZWxzZSB7CisJ
CWlmKHR0eV9sZGlzY3NbZGlzY10ucmVmY291bnQpCisJCQlyZXQgPSAtRUJVU1k7CisJCWVsc2UK
KwkJCXR0eV9sZGlzY3NbZGlzY10uZmxhZ3MgJj0gfkxESVNDX0ZMQUdfREVGSU5FRDsKKwl9CisJ
c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKIAkKLQlyZXR1
cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKHR0eV9yZWdpc3Rlcl9sZGlz
Yyk7CiAKLS8qIFNldCB0aGUgZGlzY2lwbGluZSBvZiBhIHR0eSBsaW5lLiAqLworc3RydWN0IHR0
eV9sZGlzYyAqdHR5X2xkaXNjX2dldChpbnQgZGlzYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdz
OworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCisJaWYgKGRpc2MgPCBOX1RUWSB8fCBkaXNjID49
IE5SX0xESVNDUykKKwkJcmV0dXJuIE5VTEw7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9s
ZGlzY19sb2NrLCBmbGFncyk7CisKKwlsZCA9ICZ0dHlfbGRpc2NzW2Rpc2NdOworCS8qIENoZWNr
IHRoZSBlbnRyeSBpcyBkZWZpbmVkICovCisJaWYobGQtPmZsYWdzICYgTERJU0NfRkxBR19ERUZJ
TkVEKQorCXsKKwkJLyogSWYgdGhlIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCB3ZSBjYW4ndCB1
c2UgaXQgKi8KKwkJaWYgKCF0cnlfbW9kdWxlX2dldChsZC0+b3duZXIpKQorCQkgICAgICAgCWxk
ID0gTlVMTDsKKwkJZWxzZSAvKiBsb2NrIGl0ICovCisJCQlsZC0+cmVmY291bnQrKzsKKwl9CisJ
ZWxzZQorCQlsZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xv
Y2ssIGZsYWdzKTsKKwlyZXR1cm4gbGQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlz
Y19nZXQpOworCit2b2lkIHR0eV9sZGlzY19wdXQoaW50IGRpc2MpCit7CisJc3RydWN0IHR0eV9s
ZGlzYyAqbGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlpZiAoZGlzYyA8IE5fVFRZIHx8
IGRpc2MgPj0gTlJfTERJU0NTKQorCQlCVUcoKTsKKwkJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0
eV9sZGlzY19sb2NrLCBmbGFncyk7CisJbGQgPSAmdHR5X2xkaXNjc1tkaXNjXTsKKwlpZihsZC0+
cmVmY291bnQgPT0gMCkKKwkJQlVHKCk7CisJbGQtPnJlZmNvdW50IC0tOworCW1vZHVsZV9wdXQo
bGQtPm93bmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxh
Z3MpOworfQorCQorRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3B1dCk7CisKK3ZvaWQgdHR5
X2xkaXNjX2Fzc2lnbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICps
ZCkKK3sKKwl0dHktPmxkaXNjID0gKmxkOworCXR0eS0+bGRpc2MucmVmY291bnQgPSAwOworfQor
CisvKioKKyAqCXR0eV9sZGlzY190cnkJCS0JaW50ZXJuYWwgaGVscGVyCisgKglAdHR5OiB0aGUg
dHR5CisgKgorICoJTWFrZSBhIHNpbmdsZSBhdHRlbXB0IHRvIGdyYWIgYW5kIGJ1bXAgdGhlIHJl
ZmNvdW50IG9uCisgKgl0aGUgdHR5IGxkaXNjLiBSZXR1cm4gMCBvbiBmYWlsdXJlIG9yIDEgb24g
c3VjY2Vzcy4gVGhpcyBpcworICoJdXNlZCB0byBpbXBsZW1lbnQgYm90aCB0aGUgd2FpdGluZyBh
bmQgbm9uIHdhaXRpbmcgdmVyc2lvbnMKKyAqCW9mIHR0eV9sZGlzY19yZWYKKyAqLworCitzdGF0
aWMgaW50IHR0eV9sZGlzY190cnkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25l
ZCBsb25nIGZsYWdzOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCWludCByZXQgPSAwOworCQor
CXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCWxkID0gJnR0eS0+
bGRpc2M7CisJaWYodGVzdF9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncykpCisJeworCQlsZC0+
cmVmY291bnQrKzsKKwkJcmV0ID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5
X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXR0eV9sZGlz
Y19yZWZfd2FpdAktCXdhaXQgZm9yIHRoZSB0dHkgbGRpc2MKKyAqCUB0dHk6IHR0eSBkZXZpY2UK
KyAqCisgKglEZXJlZmVyZW5jZSB0aGUgbGluZSBkaXNjaXBsaW5lIGZvciB0aGUgdGVybWluYWwg
YW5kIHRha2UgYSAKKyAqCXJlZmVyZW5jZSB0byBpdC4gSWYgdGhlIGxpbmUgZGlzY2lwbGluZSBp
cyBpbiBmbHV4IHRoZW4gCisgKgl3YWl0IHBhdGllbnRseSB1bnRpbCBpdCBjaGFuZ2VzLgorICoK
KyAqCU5vdGU6IE11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGFuIElSUS90aW1lciBjb250ZXh0LiBU
aGUgY2FsbGVyCisgKgltdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gaG9sZCBvdGhlciBsb2Nr
cyB0aGF0IHdpbGwgZGVhZGxvY2sKKyAqCWFnYWluc3QgYSBkaXNjaXBsaW5lIGNoYW5nZSwgc3Vj
aCBhcyBhbiBleGlzdGluZyBsZGlzYyByZWZlcmVuY2UKKyAqCSh3aGljaCB3ZSBjaGVjayBmb3Ip
CisgKi8KKyAKK3N0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5KQoreworCS8qIHdhaXRfZXZlbnQgaXMgYSBtYWNybyAqLworCXdhaXRfZXZl
bnQodHR5X2xkaXNjX3dhaXQsIHR0eV9sZGlzY190cnkodHR5KSk7CisJaWYodHR5LT5sZGlzYy5y
ZWZjb3VudCA9PSAwKQorCQlwcmludGsoS0VSTl9FUlIgInR0eV9sZGlzY19yZWZfd2FpdFxuIik7
CisJcmV0dXJuICZ0dHktPmxkaXNjOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh0dHlfbGRpc2Nf
cmVmX3dhaXQpOworCisvKioKKyAqCXR0eV9sZGlzY19yZWYJCS0JZ2V0IHRoZSB0dHkgbGRpc2MK
KyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCisgKglEZXJlZmVyZW5jZSB0aGUgbGluZSBkaXNjaXBs
aW5lIGZvciB0aGUgdGVybWluYWwgYW5kIHRha2UgYSAKKyAqCXJlZmVyZW5jZSB0byBpdC4gSWYg
dGhlIGxpbmUgZGlzY2lwbGluZSBpcyBpbiBmbHV4IHRoZW4gCisgKglyZXR1cm4gTlVMTC4gQ2Fu
IGJlIGNhbGxlZCBmcm9tIElSUSBhbmQgdGltZXIgZnVuY3Rpb25zLgorICovCisgCitzdHJ1Y3Qg
dHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJaWYo
dHR5X2xkaXNjX3RyeSh0dHkpKQorCQlyZXR1cm4gJnR0eS0+bGRpc2M7CisJcmV0dXJuIE5VTEw7
Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19yZWYpOworCisvKioKKyAqCXR0eV9s
ZGlzY19kZXJlZgkJLQlmcmVlIGEgdHR5IGxkaXNjIHJlZmVyZW5jZQorICoJQGxkOiByZWZlcmVu
Y2UgdG8gZnJlZSB1cAorICoKKyAqCVVuZG9lcyB0aGUgZWZmZWN0IG9mIHR0eV9sZGlzY19yZWYg
b3IgdHR5X2xkaXNjX3JlZl93YWl0LiBNYXkKKyAqCWJlIGNhbGxlZCBpbiBJUlEgY29udGV4dC4K
KyAqLworIAordm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqbGQpCit7CisJ
dW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmKGxkID09IE5VTEwpCisJCUJVRygpOworCQkKKwlz
cGluX2xvY2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlpZihsZC0+cmVmY291
bnQgPT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ0dHlfbGRpc2NfZGVyZWY6IG5vIHJlZmVyZW5j
ZXMuXG4iKTsKKwllbHNlCisJCWxkLT5yZWZjb3VudC0tOworCWlmKGxkLT5yZWZjb3VudCA9PSAw
KQorCQl3YWtlX3VwKCZ0dHlfbGRpc2Nfd2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm
dHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNj
X2RlcmVmKTsKKworLyoqCisgKgl0dHlfbGRpc2NfZW5hYmxlCS0JYWxsb3cgbGRpc2MgdXNlCisg
KglAdHR5OiB0ZXJtaW5hbCB0byBhY3RpdmF0ZSBsZGlzYyBvbgorICoKKyAqCVNldCB0aGUgVFRZ
X0xESVNDIGZsYWcgd2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGNhbiBiZSBjYWxsZWQKKyAqCWFn
YWluLiBEbyBuZWNjZXNzYXJ5IHdha2V1cHMgZm9yIGV4aXN0aW5nIHNsZWVwZXJzLgorICoKKyAq
CU5vdGU6IG5vYm9keSBzaG91bGQgc2V0IHRoaXMgYml0IGV4Y2VwdCB2aWEgdGhpcyBmdW5jdGlv
bi4gQ2xlYXJpbmcKKyAqCWRpcmVjdGx5IGlzIGFsbG93ZWQuCisgKi8KKworc3RhdGljIHZvaWQg
dHR5X2xkaXNjX2VuYWJsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXNldF9iaXQoVFRZ
X0xESVNDLCAmdHR5LT5mbGFncyk7CisJd2FrZV91cCgmdHR5X2xkaXNjX3dhaXQpOworfQorCQor
LyoqCisgKgl0dHlfc2V0X2xkaXNjCQktCXNldCBsaW5lIGRpc2NpcGxpbmUKKyAqCUB0dHk6IHRo
ZSB0ZXJtaW5hbCB0byBzZXQKKyAqCUBsZGlzYzogdGhlIGxpbmUgZGlzY2lwbGluZQorICoKKyAq
CVNldCB0aGUgZGlzY2lwbGluZSBvZiBhIHR0eSBsaW5lLiBNdXN0IGJlIGNhbGxlZCBmcm9tIGEg
cHJvY2VzcworICoJY29udGV4dC4KKyAqLworIAogc3RhdGljIGludCB0dHlfc2V0X2xkaXNjKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBsZGlzYykKIHsKIAlpbnQJcmV0dmFsID0gMDsKIAlz
dHJ1Y3QJdHR5X2xkaXNjIG9fbGRpc2M7CiAJY2hhciBidWZbNjRdOworCWludCB3b3JrOworCXVu
c2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CiAKIAlpZiAoKGxkaXNj
IDwgTl9UVFkpIHx8IChsZGlzYyA+PSBOUl9MRElTQ1MpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwor
cmVzdGFydDoKKworCWlmICh0dHktPmxkaXNjLm51bSA9PSBsZGlzYykKKwkJcmV0dXJuIDA7CS8q
IFdlIGFyZSBhbHJlYWR5IGluIHRoZSBkZXNpcmVkIGRpc2NpcGxpbmUgKi8KKwkKKwlsZCA9IHR0
eV9sZGlzY19nZXQobGRpc2MpOwogCS8qIEVkdWFyZG8gQmxhbmNvIDxlamJzQGNzLmNzLmNvbS51
eT4gKi8KIAkvKiBDeXJ1cyBEdXJnaW4gPGNpZGVyQHNwZWFrZWFzeS5vcmc+ICovCi0JaWYgKCEo
bGRpc2NzW2xkaXNjXS5mbGFncyAmIExESVNDX0ZMQUdfREVGSU5FRCkpIHsKKwlpZiAobGQgPT0g
TlVMTCkgewogCQlyZXF1ZXN0X21vZHVsZSgidHR5LWxkaXNjLSVkIiwgbGRpc2MpOworCQlsZCA9
IHR0eV9sZGlzY19nZXQobGRpc2MpOwogCX0KLQlpZiAoIShsZGlzY3NbbGRpc2NdLmZsYWdzICYg
TERJU0NfRkxBR19ERUZJTkVEKSkKKwlpZiAobGQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7
CiAKLQlpZiAodHR5LT5sZGlzYy5udW0gPT0gbGRpc2MpCi0JCXJldHVybiAwOwkvKiBXZSBhcmUg
YWxyZWFkeSBpbiB0aGUgZGVzaXJlZCBkaXNjaXBsaW5lICovCi0KLQlpZiAoIXRyeV9tb2R1bGVf
Z2V0KGxkaXNjc1tsZGlzY10ub3duZXIpKQotCSAgICAgICAJcmV0dXJuIC1FSU5WQUw7Ci0JCiAJ
b19sZGlzYyA9IHR0eS0+bGRpc2M7CiAKIAl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CisK
KwkvKgorCSAqCU1ha2Ugc3VyZSB3ZSBkb24ndCBjaGFuZ2Ugd2hpbGUgc29tZW9uZSBob2xkcyBh
CisJICoJcmVmZXJlbmNlIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuIFRoZSBUVFlfTERJU0MgYml0
CisJICoJcHJldmVudHMgYW55b25lIHRha2luZyBhIHJlZmVyZW5jZSBvbmNlIGl0IGlzIGNsZWFy
LgorCSAqCVdlIG5lZWQgdGhlIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHJlZmVyZW5jZSB0YWtlcnMu
CisJICovCisJIAorCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwor
CWlmKHR0eS0+bGRpc2MucmVmY291bnQpCisJeworCQkvKiBGcmVlIHRoZSBuZXcgbGRpc2Mgd2Ug
Z3JhYmJlZC4gTXVzdCBkcm9wIHRoZSBsb2NrCisJCSAgIGZpcnN0LiAqLworCQlzcGluX3VubG9j
a19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCQl0dHlfbGRpc2NfcHV0KGxk
aXNjKTsKKwkJLyoKKwkJICogVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyB3ZSBtYXkgYmUgYnVz
eSwgaW5jbHVkaW5nCisJCSAqIHJhbmRvbSBtb21lbnRhcnkgSS9PIHRyYWZmaWMuIFdlIG11c3Qg
dGhlcmVmb3JlCisJCSAqIHJldHJ5LiBXZSBjb3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGJsb2Nr
aW5nIG9wcworCQkgKiBhbmQgcmV0cmllcyBpZiB3ZSBtYWRlIHR0eV9sZGlzY193YWl0KCkgc21h
cnRlci4gVGhhdAorCQkgKiBpcyB1cCBmb3IgZGlzY3Vzc2lvbi4KKwkJICovCisJCWlmKHdhaXRf
ZXZlbnRfaW50ZXJydXB0aWJsZSh0dHlfbGRpc2Nfd2FpdCwgdHR5LT5sZGlzYy5yZWZjb3VudCA9
PSAwKSA8IDApCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwkJCQorCQlnb3RvIHJlc3RhcnQ7CisJ
fQorCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsJCisJY2xlYXJfYml0KFRUWV9E
T05UX0ZMSVAsICZ0dHktPmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRp
c2NfbG9jaywgZmxhZ3MpOwogCQorCS8qCisJICoJRnJvbSB0aGlzIHBvaW50IG9uIHdlIGtub3cg
bm9ib2R5IGhhcyBhbiBsZGlzYworCSAqCXVzYWdlIHJlZmVyZW5jZSwgbm9yIGNhbiB0aGV5IG9i
dGFpbiBvbmUgdW50aWwKKwkgKgl3ZSBzYXkgc28gbGF0ZXIgb24uCisJICovCisJIAorCXdvcmsg
PSBjYW5jZWxfZGVsYXllZF93b3JrKCZ0dHktPmZsaXAud29yayk7CisJLyoKKwkgKiBXYWl0IGZv
ciAtPmhhbmd1cF93b3JrIGFuZCAtPmZsaXAud29yayBoYW5kbGVycyB0byB0ZXJtaW5hdGUKKwkg
Ki8KKwkgCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAkvKiBTaHV0ZG93biB0aGUgY3VycmVu
dCBkaXNjaXBsaW5lLiAqLwogCWlmICh0dHktPmxkaXNjLmNsb3NlKQogCQkodHR5LT5sZGlzYy5j
bG9zZSkodHR5KTsKIAogCS8qIE5vdyBzZXQgdXAgdGhlIG5ldyBsaW5lIGRpc2NpcGxpbmUuICov
Ci0JdHR5LT5sZGlzYyA9IGxkaXNjc1tsZGlzY107Ci0JdHR5LT50ZXJtaW9zLT5jX2xpbmUgPSBs
ZGlzYzsKKwl0dHlfbGRpc2NfYXNzaWduKHR0eSwgbGQpOworCXR0eV9zZXRfdGVybWlvc19sZGlz
Yyh0dHksIGxkaXNjKTsKIAlpZiAodHR5LT5sZGlzYy5vcGVuKQogCQlyZXR2YWwgPSAodHR5LT5s
ZGlzYy5vcGVuKSh0dHkpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXR0eS0+bGRpc2MgPSBvX2xk
aXNjOwotCQl0dHktPnRlcm1pb3MtPmNfbGluZSA9IHR0eS0+bGRpc2MubnVtOworCQl0dHlfbGRp
c2NfcHV0KGxkaXNjKTsKKwkJLyogVGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgcmVmZXJlbmNlIGhl
cmUgc28gdGhpcyBpcyBzYWZlICovCisJCXR0eV9sZGlzY19hc3NpZ24odHR5LCB0dHlfbGRpc2Nf
Z2V0KG9fbGRpc2MubnVtKSk7CisJCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIHR0eS0+bGRp
c2MubnVtKTsKIAkJaWYgKHR0eS0+bGRpc2Mub3BlbiAmJiAodHR5LT5sZGlzYy5vcGVuKHR0eSkg
PCAwKSkgewotCQkJdHR5LT5sZGlzYyA9IGxkaXNjc1tOX1RUWV07Ci0JCQl0dHktPnRlcm1pb3Mt
PmNfbGluZSA9IE5fVFRZOworCQkJdHR5X2xkaXNjX3B1dChvX2xkaXNjLm51bSk7CisJCQkvKiBU
aGlzIGRyaXZlciBpcyBhbHdheXMgcHJlc2VudCAqLworCQkJdHR5X2xkaXNjX2Fzc2lnbih0dHks
IHR0eV9sZGlzY19nZXQoTl9UVFkpKTsKKwkJCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIE5f
VFRZKTsKIAkJCWlmICh0dHktPmxkaXNjLm9wZW4pIHsKIAkJCQlpbnQgciA9IHR0eS0+bGRpc2Mu
b3Blbih0dHkpOwogCkBAIC0yODgsMTIgKzU1NCwyNyBAQAogCQkJCQkgICAgICB0dHlfbmFtZSh0
dHksIGJ1ZiksIHIpOwogCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJbW9kdWxlX3B1dChvX2xkaXNj
Lm93bmVyKTsKIAl9CisJLyogQXQgdGhpcyBwb2ludCB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRo
ZSBuZXcgbGRpc2MgYW5kIGEKKwkgICBhIHJlZmVyZW5jZSB0byB0aGUgb2xkIGxkaXNjLiBJZiB3
ZSBlbmRlZCB1cCBmbGlwcGluZyBiYWNrCisJICAgdG8gdGhlIGV4aXN0aW5nIGxkaXNjIHdlIGhh
dmUgdHdvIHJlZmVyZW5jZXMgdG8gaXQgKi8KIAkKIAlpZiAodHR5LT5sZGlzYy5udW0gIT0gb19s
ZGlzYy5udW0gJiYgdHR5LT5kcml2ZXItPnNldF9sZGlzYykKIAkJdHR5LT5kcml2ZXItPnNldF9s
ZGlzYyh0dHkpOworCQkKKwl0dHlfbGRpc2NfcHV0KG9fbGRpc2MubnVtKTsKKwkKKwkvKgorCSAq
CUFsbG93IGxkaXNjIHJlZmVyZW5jaW5nIHRvIG9jY3VyIGFzIHNvb24gYXMgdGhlIGRyaXZlcgor
CSAqCWxkaXNjIGNhbGxiYWNrIGNvbXBsZXRlcy4KKwkgKi8KKwkgCisJdHR5X2xkaXNjX2VuYWJs
ZSh0dHkpOworCQorCS8qIFJlc3RhcnQgaXQgaW4gY2FzZSBubyBjaGFyYWN0ZXJzIGtpY2sgaXQg
b2ZmLiBTYWZlIGlmCisJICAgYWxyZWFkeSBydW5uaW5nICovCisJaWYod29yaykKKwkJc2NoZWR1
bGVfZGVsYXllZF93b3JrKCZ0dHktPmZsaXAud29yaywgMSk7CiAJcmV0dXJuIHJldHZhbDsKIH0K
IApAQCAtNDAyLDYgKzY4Myw1MyBAQAogCiBzdGF0aWMgc3BpbmxvY2tfdCByZWRpcmVjdF9sb2Nr
ID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogc3RhdGljIHN0cnVjdCBmaWxlICpyZWRpcmVjdDsKKwor
LyoqCisgKgl0dHlfd2FrZXVwCS0JcmVxdWVzdCBtb3JlIGRhdGEKKyAqCUB0dHk6IHRlcm1pbmFs
CisgKgorICoJSW50ZXJuYWwgYW5kIGV4dGVybmFsIGhlbHBlciBmb3Igd2FrZXVwcyBvZiB0dHku
IFRoaXMgZnVuY3Rpb24KKyAqCWluZm9ybXMgdGhlIGxpbmUgZGlzY2lwbGluZSBpZiBwcmVzZW50
IHRoYXQgdGhlIGRyaXZlciBpcyByZWFkeQorICoJdG8gcmVjZWl2ZSBtb3JlIG91dHB1dCBkYXRh
LgorICovCisgCit2b2lkIHR0eV93YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlz
dHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwkKKwlpZiAodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VV
UCwgJnR0eS0+ZmxhZ3MpKSB7CisJCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOworCQlpZihsZCkg
eworCQkJaWYobGQtPndyaXRlX3dha2V1cCkKKwkJCQlsZC0+d3JpdGVfd2FrZXVwKHR0eSk7CisJ
CQl0dHlfbGRpc2NfZGVyZWYobGQpOworCQl9CisJfQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT53cml0ZV93YWl0KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHR5X3dha2V1cCk7CisK
Ky8qKgorICoJdHR5X2xkaXNjX2ZsdXNoCS0JZmx1c2ggbGluZSBkaXNjaXBsaW5lIHF1ZXVlCisg
KglAdHR5OiB0dHkKKyAqCisgKglGbHVzaCB0aGUgbGluZSBkaXNjaXBsaW5lIHF1ZXVlIChpZiBh
bnkpIGZvciB0aGlzIHR0eS4gSWYgdGhlcmUKKyAqCWlzIG5vIGxpbmUgZGlzY2lwbGluZSBhY3Rp
dmUgdGhpcyBpcyBhIG5vLW9wLgorICovCisgCit2b2lkIHR0eV9sZGlzY19mbHVzaChzdHJ1Y3Qg
dHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB0dHlfbGRpc2MgKmxkID0gdHR5X2xkaXNjX3Jl
Zih0dHkpOworCWlmKGxkKSB7CisJCWlmKGxkLT5mbHVzaF9idWZmZXIpCisJCQlsZC0+Zmx1c2hf
YnVmZmVyKHR0eSk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJfQorfQorCitFWFBPUlRfU1lN
Qk9MX0dQTCh0dHlfbGRpc2NfZmx1c2gpOworCQogLyoKICAqIFRoaXMgY2FuIGJlIGNhbGxlZCBi
eSB0aGUgImV2ZW50ZCIga2VybmVsIHRocmVhZC4gIFRoYXQgaXMgcHJvY2VzcyBzeW5jaHJvbm91
cywKICAqIGJ1dCBkb2Vzbid0IGhvbGQgYW55IGxvY2tzLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB3ZSBoYXZlIHRoZSBhcHByb3ByaWF0ZQpAQCAtNDEzLDYgKzc0MSw3IEBACiAJc3RydWN0IGZp
bGUgKiBjb25zX2ZpbHAgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpmaWxwLCAqZiA9IE5VTEw7CiAJ
c3RydWN0IHRhc2tfc3RydWN0ICpwOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCXN0cnVjdCBw
aWQgKnBpZDsKIAlpbnQgICAgY2xvc2Vjb3VudCA9IDAsIG47CiAKQEAgLTQzMSw2ICs3NjAsNyBA
QAogCQogCWNoZWNrX3R0eV9jb3VudCh0dHksICJkb190dHlfaGFuZ3VwIik7CiAJZmlsZV9saXN0
X2xvY2soKTsKKwkvKiBUaGlzIGJyZWFrcyBmb3IgZmlsZSBoYW5kbGVzIGJlaW5nIHNlbnQgb3Zl
ciBBRl9VTklYIHNvY2tldHMgPyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmlscCwgJnR0eS0+
dHR5X2ZpbGVzLCBmX2xpc3QpIHsKIAkJaWYgKGZpbHAtPmZfb3AtPndyaXRlID09IHJlZGlyZWN0
ZWRfdHR5X3dyaXRlKQogCQkJY29uc19maWxwID0gZmlscDsKQEAgLTQ0MywyMSArNzczLDI1IEBA
CiAJZmlsZV9saXN0X3VubG9jaygpOwogCQogCS8qIEZJWE1FISBXaGF0IGFyZSB0aGUgbG9ja2lu
ZyBpc3N1ZXMgaGVyZT8gVGhpcyBtYXkgbWUgb3ZlcmRvaW5nIHRoaW5ncy4uCi0JKiB0aGlzIHF1
ZXN0aW9uIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IG5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQgdGhl
IGlycWxvY2suICovCi0JewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCSAqIHRoaXMgcXVlc3Rp
b24gaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgbm93IHRoYXQgd2UndmUgcmVtb3ZlZCB0aGUgaXJx
bG9jay4gKi8KIAotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IC8vIEZJWE1FOiBpcyB0aGlzIHNh
ZmU/Ci0JCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJCXR0eS0+bGRpc2MuZmx1c2hf
YnVmZmVyKHR0eSk7CisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYobGQgIT0gTlVMTCkJ
LyogV2UgbWF5IGhhdmUgbm8gbGluZSBkaXNjaXBsaW5lIGF0IHRoaXMgcG9pbnQgKi8KKwl7CisJ
CWlmIChsZC0+Zmx1c2hfYnVmZmVyKQorCQkJbGQtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQlpZiAo
dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIo
dHR5KTsKIAkJaWYgKCh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncykp
ICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRl
X3dha2V1cCkodHR5KTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvLyBGSVhNRTogaXMg
dGhpcyBzYWZlPworCQkgICAgbGQtPndyaXRlX3dha2V1cCkKKwkJCWxkLT53cml0ZV93YWtldXAo
dHR5KTsKKwkJaWYgKGxkLT5oYW5ndXApCisJCQlsZC0+aGFuZ3VwKHR0eSk7CiAJfQogCisJLyog
RklYTUU6IE9uY2Ugd2UgdHJ1c3QgdGhlIExESVNDIGNvZGUgYmV0dGVyIHdlIGNhbiB3YWl0IGhl
cmUgZm9yCisJICAgbGRpc2MgY29tcGxldGlvbiBhbmQgZml4IHRoZSBkcml2ZXIgY2FsbCByYWNl
ICovCisJICAgCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCXdh
a2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5yZWFkX3dhaXQpOwogCkBAIC00NjYsMjIgKzgwMCwx
OSBAQAogCSAqIE5fVFRZLgogCSAqLwogCWlmICh0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJ
VkVSX1JFU0VUX1RFUk1JT1MpCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xv
Y2tfaXJxc2F2ZSgmdHR5X3Rlcm1pb3NfbG9jaywgZmxhZ3MpOwogCQkqdHR5LT50ZXJtaW9zID0g
dHR5LT5kcml2ZXItPmluaXRfdGVybWlvczsKLQlpZiAodHR5LT5sZGlzYy5udW0gIT0gbGRpc2Nz
W05fVFRZXS5udW0pIHsKLQkJaWYgKHR0eS0+bGRpc2MuY2xvc2UpCi0JCQkodHR5LT5sZGlzYy5j
bG9zZSkodHR5KTsKLQkJbW9kdWxlX3B1dCh0dHktPmxkaXNjLm93bmVyKTsKLQkJCi0JCXR0eS0+
bGRpc2MgPSBsZGlzY3NbTl9UVFldOwotCQl0dHktPnRlcm1pb3MtPmNfbGluZSA9IE5fVFRZOwot
CQlpZiAodHR5LT5sZGlzYy5vcGVuKSB7Ci0JCQlpbnQgaSA9ICh0dHktPmxkaXNjLm9wZW4pKHR0
eSk7Ci0JCQlpZiAoaSA8IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJkb190dHlfaGFuZ3VwOiBO
X1RUWSBvcGVuOiAiCi0JCQkJCQkiZXJyb3IgJWRcbiIsIC1pKTsKLQkJfQorCQlzcGluX3VubG9j
a19pcnFyZXN0b3JlKCZ0dHlfdGVybWlvc19sb2NrLCBmbGFncyk7CiAJfQogCQorCS8qIERlZmVy
IGxkaXNjIHN3aXRjaCAqLworCS8qIHR0eV9kZWZlcnJlZF9sZGlzY19zd2l0Y2goTl9UVFkpOwor
CQorCSAgVGhpcyBzaG91bGQgZ2V0IGRvbmUgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwb3J0IGNs
b3NlcyBhbmQKKwkgIHR0eV9yZWxlYXNlIGlzIGNhbGxlZCAqLworCQogCXJlYWRfbG9jaygmdGFz
a2xpc3RfbG9jayk7CiAJaWYgKHR0eS0+c2Vzc2lvbiA+IDApIHsKIAkJc3RydWN0IGxpc3RfaGVh
ZCAqbDsKQEAgLTUxNCw2ICs4NDUsMTcgQEAKIAkJCQl0dHktPmRyaXZlci0+Y2xvc2UodHR5LCBj
b25zX2ZpbHApOwogCX0gZWxzZSBpZiAodHR5LT5kcml2ZXItPmhhbmd1cCkKIAkJKHR0eS0+ZHJp
dmVyLT5oYW5ndXApKHR0eSk7CisJCQorCS8qIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSBkcml2ZXIv
bGRpc2MgaW50ZXJhY3Rpb25zIGJleW9uZAorCSAgIHRoZSBvbmVzIHdlIGRpZCBoZXJlLiBUaGUg
ZHJpdmVyIGxheWVyIGV4cGVjdHMgbm8KKwkgICBjYWxscyBhZnRlciAtPmhhbmd1cCgpIGZyb20g
dGhlIGxkaXNjIHNpZGUuIEhvd2V2ZXIgd2UKKwkgICBjYW4ndCB5ZXQgZ3VhcmFudGVlIGFsbCB0
aGF0ICovCisKKwlzZXRfYml0KFRUWV9IVVBQRUQsICZ0dHktPmZsYWdzKTsKKwlpZiAobGQpIHsK
KwkJdHR5X2xkaXNjX2VuYWJsZSh0dHkpOworCQl0dHlfbGRpc2NfZGVyZWYobGQpOworCX0KIAl1
bmxvY2tfa2VybmVsKCk7CiAJaWYgKGYpCiAJCWZwdXQoZik7CkBAIC02MzAsOSArOTcyLDkgQEAK
IAl9CiAJaWYgKHR0eS0+ZHJpdmVyLT5zdGFydCkKIAkJKHR0eS0+ZHJpdmVyLT5zdGFydCkodHR5
KTsKLQlpZiAoKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSkgJiYK
LQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1
cCkodHR5KTsKKworCS8qIElmIHdlIGhhdmUgYSBydW5uaW5nIGxpbmUgZGlzY2lwbGluZSBpdCBt
YXkgbmVlZCBraWNraW5nICovCisJdHR5X3dha2V1cCh0dHkpOwogCXdha2VfdXBfaW50ZXJydXB0
aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKIH0KIApAQCAtNjQ0LDYgKzk4Niw3IEBACiAJaW50IGk7
CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1
Y3QgdHR5X2xkaXNjICpsZDsKIAogCS8qIENhbid0IHNlZWsgKHByZWFkKSBvbiB0dHlzLiAgKi8K
IAlpZiAocHBvcyAhPSAmZmlsZS0+Zl9wb3MpCkBAIC02NTYsMTEgKzk5OSwxNSBAQAogCWlmICgh
dHR5IHx8ICh0ZXN0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKSkpCiAJCXJldHVybiAt
RUlPOwogCisJLyogV2Ugd2FudCB0byB3YWl0IGZvciB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIHNv
cnQgb3V0IGluIHRoaXMKKwkgICBzaXR1YXRpb24gKi8KKwlsZCA9IHR0eV9sZGlzY19yZWZfd2Fp
dCh0dHkpOwogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKHR0eS0+bGRpc2MucmVhZCkKLQkJaSA9ICh0
dHktPmxkaXNjLnJlYWQpKHR0eSxmaWxlLGJ1Zixjb3VudCk7CisJaWYgKGxkLT5yZWFkKQorCQlp
ID0gKGxkLT5yZWFkKSh0dHksZmlsZSxidWYsY291bnQpOwogCWVsc2UKIAkJaSA9IC1FSU87CisJ
dHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJaWYgKGkgPiAwKQogCQlp
bm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTcyMiw2ICsxMDY5LDggQEAKIHsKIAlz
dHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9k
ZW50cnktPmRfaW5vZGU7CisgCXNzaXplX3QgcmV0OworIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsK
IAogCS8qIENhbid0IHNlZWsgKHB3cml0ZSkgb24gdHR5cy4gICovCiAJaWYgKHBwb3MgIT0gJmZp
bGUtPmZfcG9zKQpAQCAtNzMyLDEwICsxMDgxLDE2IEBACiAJCXJldHVybiAtRUlPOwogCWlmICgh
dHR5IHx8ICF0dHktPmRyaXZlci0+d3JpdGUgfHwgKHRlc3RfYml0KFRUWV9JT19FUlJPUiwgJnR0
eS0+ZmxhZ3MpKSkKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKCF0dHktPmxkaXNjLndyaXRlKQotCQly
ZXR1cm4gLUVJTzsKLQlyZXR1cm4gZG9fdHR5X3dyaXRlKHR0eS0+bGRpc2Mud3JpdGUsIHR0eSwg
ZmlsZSwKKworIAlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwkJCisgCWlmICghbGQtPndy
aXRlKQorIAkJcmV0ID0gLUVJTzsKKyAJZWxzZQorIAkJcmV0ID0gZG9fdHR5X3dyaXRlKGxkLT53
cml0ZSwgdHR5LCBmaWxlLAogCQkJICAgIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKWJ1
ZiwgY291bnQpOworCisgCXR0eV9sZGlzY19kZXJlZihsZCk7CisgCXJldHVybiByZXQ7CiB9CiAK
IHNzaXplX3QgcmVkaXJlY3RlZF90dHlfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBj
aGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LApAQCAtOTI0LDYgKzEyNzksNyBAQAogCSAq
IElmIHdlIGZhaWwgaGVyZSBqdXN0IGNhbGwgcmVsZWFzZV9tZW0gdG8gY2xlYW4gdXAuICBObyBu
ZWVkCiAJICogdG8gZGVjcmVtZW50IHRoZSB1c2UgY291bnRzLCBhcyByZWxlYXNlX21lbSBkb2Vz
bid0IGNhcmUuCiAJICovCisKIAlpZiAodHR5LT5sZGlzYy5vcGVuKSB7CiAJCXJldHZhbCA9ICh0
dHktPmxkaXNjLm9wZW4pKHR0eSk7CiAJCWlmIChyZXR2YWwpCkBAIC05MzYsNyArMTI5Miw5IEBA
CiAJCQkJKHR0eS0+bGRpc2MuY2xvc2UpKHR0eSk7CiAJCQlnb3RvIHJlbGVhc2VfbWVtX291dDsK
IAkJfQorCQl0dHlfbGRpc2NfZW5hYmxlKG9fdHR5KTsKIAl9CisJdHR5X2xkaXNjX2VuYWJsZSh0
dHkpOwogCWdvdG8gc3VjY2VzczsKIAogCS8qCkBAIC05NjUsNiArMTMyMyw5IEBACiAJdHR5LT5j
b3VudCsrOwogCXR0eS0+ZHJpdmVyID0gZHJpdmVyOyAvKiBOLkIuIHdoeSBkbyB0aGlzIGV2ZXJ5
IHRpbWU/PyAqLwogCisJLyogRklYTUUgKi8KKwlpZighdGVzdF9iaXQoVFRZX0xESVNDLCAmdHR5
LT5mbGFncykpCisJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9kZXYgYnV0IG5vIGxkaXNjXG4iKTsK
IHN1Y2Nlc3M6CiAJKnJldF90dHkgPSB0dHk7CiAJCkBAIC0xMDY3LDYgKzE0MjgsNyBAQAogCWlu
dAlwdHlfbWFzdGVyLCB0dHlfY2xvc2luZywgb190dHlfY2xvc2luZywgZG9fc2xlZXA7CiAJaW50
CWlkeDsKIAljaGFyCWJ1Zls2NF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkKIAl0dHkgPSAo
c3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJaWYgKHR0eV9wYXJhbm9p
YV9jaGVjayh0dHksIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCAicmVsZWFzZV9kZXYiKSkKQEAg
LTExNDEsNyArMTUwMyw2IEBACiAJCX0KIAl9CiAjZW5kaWYKLQogCWlmICh0dHktPmRyaXZlci0+
Y2xvc2UpCiAJCXR0eS0+ZHJpdmVyLT5jbG9zZSh0dHksIGZpbHApOwogCkBAIC0xMjY4LDggKzE2
MjksMTAgQEAKIAogCS8qCiAJICogUHJldmVudCBmbHVzaF90b19sZGlzYygpIGZyb20gcmVzY2hl
ZHVsaW5nIHRoZSB3b3JrIGZvciBsYXRlci4gIFRoZW4KLQkgKiBraWxsIGFueSBkZWxheWVkIHdv
cmsuCisgCSAqIGtpbGwgYW55IGRlbGF5ZWQgd29yay4gQXMgdGhpcyBpcyB0aGUgZmluYWwgY2xv
c2UgaXQgZG9lcyBub3QKKyAJICogcmFjZSB3aXRoIHRoZSBzZXRfbGRpc2MgY29kZSBwYXRoLgog
CSAqLworIAljbGVhcl9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7CiAJY2xlYXJfYml0KFRU
WV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZ0dHktPmZs
aXAud29yayk7CiAKQEAgLTEyNzgsMjEgKzE2NDEsNDIgQEAKIAkgKi8KIAlmbHVzaF9zY2hlZHVs
ZWRfd29yaygpOwogCisgCS8qCisgCSAqIFdhaXQgZm9yIGFueSBzaG9ydCB0ZXJtIHVzZXJzICh3
ZSBrbm93IHRoZXkgYXJlIGp1c3QgZHJpdmVyCisgCSAqIHNpZGUgd2FpdGVycyBhcyB0aGUgZmls
ZSBpcyBjbG9zaW5nIHNvIHVzZXIgY291bnQgb24gdGhlIGZpbGUKKyAJICogc2lkZSBpcyB6ZXJv
LgorIAkgKi8KKyAJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Cisg
CXdoaWxlKHR0eS0+bGRpc2MucmVmY291bnQpCisgCXsKKyAJCXNwaW5fdW5sb2NrX2lycXJlc3Rv
cmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisgCQl3YWl0X2V2ZW50KHR0eV9sZGlzY193YWl0
LCB0dHktPmxkaXNjLnJlZmNvdW50ID09IDApOworIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9s
ZGlzY19sb2NrLCBmbGFncyk7CisgCX0KKyAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xk
aXNjX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlz
Y2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvIE5fVFRZLgogCSAqIE4uQi4gd2h5IHJlc2V0IGxkaXNj
IHdoZW4gd2UncmUgcmVsZWFzaW5nIHRoZSBtZW1vcnk/PworIAkgKgorIAkgKiBGSVhNRTogdGhp
cyBNVVNUIGdldCBmaXhlZCBmb3IgdGhlIG5ldyByZWZsb2NraW5nCiAJICovCiAJaWYgKHR0eS0+
bGRpc2MuY2xvc2UpCiAJCSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCW1vZHVsZV9wdXQodHR5
LT5sZGlzYy5vd25lcik7CisgCXR0eV9sZGlzY19wdXQodHR5LT5sZGlzYy5udW0pOwogCQotCXR0
eS0+bGRpc2MgPSBsZGlzY3NbTl9UVFldOwotCXR0eS0+dGVybWlvcy0+Y19saW5lID0gTl9UVFk7
CisgCS8qCisgCSAqCVN3aXRjaCB0aGUgbGluZSBkaXNjaXBsaW5lIGJhY2sKKyAJICovCisgCXR0
eV9sZGlzY19hc3NpZ24odHR5LCB0dHlfbGRpc2NfZ2V0KE5fVFRZKSk7CisgCXR0eV9zZXRfdGVy
bWlvc19sZGlzYyh0dHksTl9UVFkpOyAKIAlpZiAob190dHkpIHsKKyAJCS8qIEZJWE1FOiBjb3Vs
ZCBvX3R0eSBiZSBpbiBzZXRsZGlzYyBoZXJlID8gKi8KKyAJCWNsZWFyX2JpdChUVFlfTERJU0Ms
ICZvX3R0eS0+ZmxhZ3MpOwogCQlpZiAob190dHktPmxkaXNjLmNsb3NlKQogCQkJKG9fdHR5LT5s
ZGlzYy5jbG9zZSkob190dHkpOwotCQltb2R1bGVfcHV0KG9fdHR5LT5sZGlzYy5vd25lcik7Ci0J
CW9fdHR5LT5sZGlzYyA9IGxkaXNjc1tOX1RUWV07CisgCQl0dHlfbGRpc2NfcHV0KG9fdHR5LT5s
ZGlzYy5udW0pOworIAkJdHR5X2xkaXNjX2Fzc2lnbihvX3R0eSwgdHR5X2xkaXNjX2dldChOX1RU
WSkpOworIAkJdHR5X3NldF90ZXJtaW9zX2xkaXNjKG9fdHR5LE5fVFRZKTsgCiAJfQogCiAJLyog
CkBAIC0xNDU0LDE0ICsxODM4LDE4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHR0eV9wb2xsKHN0
cnVjdCBmaWxlICogZmlscCwgcG9sbF90YWJsZSAqIHdhaXQpCiB7CiAJc3RydWN0IHR0eV9zdHJ1
Y3QgKiB0dHk7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaW50IHJldCA9IDA7CiAKIAl0dHkg
PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJaWYgKHR0eV9wYXJh
bm9pYV9jaGVjayh0dHksIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCAidHR5X3BvbGwiKSkKIAkJ
cmV0dXJuIDA7Ci0KLQlpZiAodHR5LT5sZGlzYy5wb2xsKQotCQlyZXR1cm4gKHR0eS0+bGRpc2Mu
cG9sbCkodHR5LCBmaWxwLCB3YWl0KTsKLQlyZXR1cm4gMDsKKwkJCisJbGQgPSB0dHlfbGRpc2Nf
cmVmX3dhaXQodHR5KTsKKwlpZiAobGQtPnBvbGwpCisJCXJldCA9IChsZC0+cG9sbCkodHR5LCBm
aWxwLCB3YWl0KTsKKwl0dHlfbGRpc2NfZGVyZWYobGQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0
YXRpYyBpbnQgdHR5X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgaW50IG9uKQpA
QCAtMTQ5MywxMiArMTg4MSwxNSBAQAogc3RhdGljIGludCB0aW9jc3RpKHN0cnVjdCB0dHlfc3Ry
dWN0ICp0dHksIGNoYXIgX191c2VyICpwKQogewogCWNoYXIgY2gsIG1ieiA9IDA7Ci0KKwlzdHJ1
Y3QgdHR5X2xkaXNjICpsZDsKKwkKIAlpZiAoKGN1cnJlbnQtPnNpZ25hbC0+dHR5ICE9IHR0eSkg
JiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKGdldF91
c2VyKGNoLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JdHR5LT5sZGlzYy5yZWNlaXZlX2J1Zih0
dHksICZjaCwgJm1ieiwgMSk7CisJbGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTsKKwlsZC0+
cmVjZWl2ZV9idWYodHR5LCAmY2gsICZtYnosIDEpOworCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJ
cmV0dXJuIDA7CiB9CiAKQEAgLTE3NDcsNiArMjEzOCw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSwgKnJlYWxfdHR5OwogCXZvaWQgX191c2VyICpwID0gKHZvaWQgX191c2VyICopYXJnOwog
CWludCByZXR2YWw7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CiAJCiAJdHR5ID0gKHN0cnVjdCB0
dHlfc3RydWN0ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2so
dHR5LCBpbm9kZSwgInR0eV9pb2N0bCIpKQpAQCAtMTgzNiw2ICsyMjI4LDcgQEAKIAkJY2FzZSBU
SU9DR1NJRDoKIAkJCXJldHVybiB0aW9jZ3NpZCh0dHksIHJlYWxfdHR5LCBwKTsKIAkJY2FzZSBU
SU9DR0VURDoKKwkJCS8qIEZJWE1FOiBjaGVjayB0aGlzIGlzIG9rICovCiAJCQlyZXR1cm4gcHV0
X3VzZXIodHR5LT5sZGlzYy5udW0sIChpbnQgX191c2VyICopcCk7CiAJCWNhc2UgVElPQ1NFVEQ6
CiAJCQlyZXR1cm4gdGlvY3NldGQodHR5LCBwKTsKQEAgLTE4NzQsMTYgKzIyNjcsMTkgQEAKIAkJ
CXJldHVybiB0dHlfdGlvY21zZXQodHR5LCBmaWxlLCBjbWQsIHApOwogCX0KIAlpZiAodHR5LT5k
cml2ZXItPmlvY3RsKSB7Ci0JCWludCByZXR2YWwgPSAodHR5LT5kcml2ZXItPmlvY3RsKSh0dHks
IGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0dmFsID0gKHR0eS0+ZHJpdmVyLT5pb2N0bCkodHR5LCBm
aWxlLCBjbWQsIGFyZyk7CiAJCWlmIChyZXR2YWwgIT0gLUVOT0lPQ1RMQ01EKQogCQkJcmV0dXJu
IHJldHZhbDsKIAl9Ci0JaWYgKHR0eS0+bGRpc2MuaW9jdGwpIHsKLQkJaW50IHJldHZhbCA9ICh0
dHktPmxkaXNjLmlvY3RsKSh0dHksIGZpbGUsIGNtZCwgYXJnKTsKLQkJaWYgKHJldHZhbCAhPSAt
RU5PSU9DVExDTUQpCi0JCQlyZXR1cm4gcmV0dmFsOworCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0
KHR0eSk7CisJcmV0dmFsID0gLUVJTlZBTDsKKwlpZiAobGQtPmlvY3RsKSB7CisJCXJldHZhbCA9
IGxkLT5pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwkJaWYgKHJldHZhbCA9PSAtRU5PSU9D
VExDTUQpCisJCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKKwl0dHlf
bGRpc2NfZGVyZWYobGQpOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtMTkxOCwxNCArMjMx
NCwyMSBAQAogCWludCBzZXNzaW9uOwogCWludAkJaTsKIAlzdHJ1Y3QgZmlsZQkqZmlscDsKKwlz
dHJ1Y3QgdHR5X2xkaXNjICpkaXNjOwogCQogCWlmICghdHR5KQogCQlyZXR1cm47CiAJc2Vzc2lv
biAgPSB0dHktPnNlc3Npb247Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHkt
PmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQorCS8qIFdlIGRvbid0IHdhbnQgYW4gbGRpc2Mg
c3dpdGNoIGR1cmluZyB0aGlzICovCisJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAo
ZGlzYyAmJiBkaXNjLT5mbHVzaF9idWZmZXIpCisJCWRpc2MtPmZsdXNoX2J1ZmZlcih0dHkpOwor
CXR0eV9sZGlzY19kZXJlZihkaXNjKTsKKwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7CisJCiAJcmVhZF9sb2NrKCZ0YXNr
bGlzdF9sb2NrKTsKIAlmb3JfZWFjaF90YXNrX3BpZChzZXNzaW9uLCBQSURUWVBFX1NJRCwgcCwg
bCwgcGlkKSB7CiAJCWlmIChwLT5zaWduYWwtPnR0eSA9PSB0dHkgfHwgc2Vzc2lvbiA+IDApIHsK
QEAgLTE5NzcsMjQgKzIzODAsMjkgQEAKIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQg
b3V0IG9mIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgdG8gZmx1c2ggZGF0YQotICogZnJvbSB0aGUg
ZmxpcCBidWZmZXIgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4KKyAqIGZyb20gdGhlIGZsaXAgYnVm
ZmVyIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuIAogICovCisgCiBzdGF0aWMgdm9pZCBmbHVzaF90
b19sZGlzYyh2b2lkICpwcml2YXRlXykKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gKHN0
cnVjdCB0dHlfc3RydWN0ICopIHByaXZhdGVfOwogCXVuc2lnbmVkIGNoYXIJKmNwOwogCWNoYXIJ
CSpmcDsKIAlpbnQJCWNvdW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9u
ZyAJZmxhZ3M7CisJc3RydWN0IHR0eV9sZGlzYyAqZGlzYzsKKworCWRpc2MgPSB0dHlfbGRpc2Nf
cmVmKHR0eSk7CisJaWYgKGRpc2MgPT0gTlVMTCkJLyogICFUVFlfTERJU0MgKi8KKwkJcmV0dXJu
OwogCiAJaWYgKHRlc3RfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKSkgewogCQkvKgog
CQkgKiBEbyBpdCBhZnRlciB0aGUgbmV4dCB0aW1lciB0aWNrOgogCQkgKi8KIAkJc2NoZWR1bGVf
ZGVsYXllZF93b3JrKCZ0dHktPmZsaXAud29yaywgMSk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7
CiAJfQotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+cmVhZF9sb2NrLCBmbGFncyk7CiAJaWYg
KHR0eS0+ZmxpcC5idWZfbnVtKSB7CiAJCWNwID0gdHR5LT5mbGlwLmNoYXJfYnVmICsgVFRZX0ZM
SVBCVUZfU0laRTsKQEAgLTIwMTMsNyArMjQyMSwzMSBAQAogCXR0eS0+ZmxpcC5jb3VudCA9IDA7
CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKIAotCXR0
eS0+bGRpc2MucmVjZWl2ZV9idWYodHR5LCBjcCwgZnAsIGNvdW50KTsKKwlkaXNjLT5yZWNlaXZl
X2J1Zih0dHksIGNwLCBmcCwgY291bnQpOworb3V0OgorCXR0eV9sZGlzY19kZXJlZihkaXNjKTsK
K30KKworLyoKKyAqCUNhbGwgdGhlIGxkaXNjIGZsdXNoIGRpcmVjdGx5IGZyb20gYSBkcml2ZXIu
IFRoaXMgZnVuY3Rpb24gbWF5CisgKglyZXR1cm4gYW4gZXJyb3IgYW5kIG5lZWQgcmV0cnlpbmcg
YnkgdGhlIHVzZXIuCisgKi8KKworaW50IHR0eV9wdXNoX2RhdGEoc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSwgdW5zaWduZWQgY2hhciAqY3AsIHVuc2lnbmVkIGNoYXIgKmZwLCBpbnQgY291bnQpCit7
CisJaW50IHJldCA9IDA7CisJc3RydWN0IHR0eV9sZGlzYyAqZGlzYzsKKwkKKwlkaXNjID0gdHR5
X2xkaXNjX3JlZih0dHkpOworCWlmKHRlc3RfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdz
KSkKKwkJcmV0ID0gLUVBR0FJTjsKKwllbHNlIGlmKGRpc2MgPT0gTlVMTCkKKwkJcmV0ID0gLUVJ
TzsKKwllbHNlCisJCWRpc2MtPnJlY2VpdmVfYnVmKHR0eSwgY3AsIGZwLCBjb3VudCk7CisJdHR5
X2xkaXNjX2RlcmVmKGRpc2MpOworCXJldHVybiByZXQ7CisJCiB9CiAKIC8qCkBAIC0yMDM1LDkg
KzI0NjcsMjAgQEAKIAogc3RhdGljIGludCBuX2JhdWRfdGFibGUgPSBBUlJBWV9TSVpFKGJhdWRf
dGFibGUpOwogCisvKioKKyAqCXR0eV90ZXJtaW9zX2JhdWRfcmF0ZQorICoJQHRlcm1pb3M6IHRl
cm1pb3Mgc3RydWN0dXJlCisgKgorICoJQ29udmVydCB0ZXJtaW9zIGJhdWQgcmF0ZSBkYXRhIGlu
dG8gYSBzcGVlZC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKgl3aXRoIHRoZSB0ZXJtaW9zIGxv
Y2sgaGVsZCBpZiB0aGlzIHRlcm1pb3MgaXMgYSB0ZXJtaW5hbCB0ZXJtaW9zCisgKglzdHJ1Y3R1
cmUuIE1heSBjaGFuZ2UgdGhlIHRlcm1pb3MgZGF0YS4KKyAqLworIAogaW50IHR0eV90ZXJtaW9z
X2JhdWRfcmF0ZShzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcykKIHsKLQl1bnNpZ25lZCBpbnQgY2Jh
dWQgPSB0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQ7CisJdW5zaWduZWQgaW50IGNiYXVkOworCQor
CWNiYXVkID0gdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEOwogCiAJaWYgKGNiYXVkICYgQ0JBVURF
WCkgewogCQljYmF1ZCAmPSB+Q0JBVURFWDsKQEAgLTIwNDcsMTIgKzI0OTAsMjAgQEAKIAkJZWxz
ZQogCQkJY2JhdWQgKz0gMTU7CiAJfQotCiAJcmV0dXJuIGJhdWRfdGFibGVbY2JhdWRdOwogfQog
CiBFWFBPUlRfU1lNQk9MKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSk7CiAKKy8qKgorICoJdHR5X2dl
dF9iYXVkX3JhdGUJLQlnZXQgdHR5IGJpdCByYXRlcworICoJQHR0eTogdHR5IHRvIHF1ZXJ5Cisg
KgorICoJUmV0dXJucyB0aGUgYmF1ZCByYXRlIGFzIGFuIGludGVnZXIgZm9yIHRoaXMgdGVybWlu
YWwuIFRoZQorICoJdGVybWlvcyBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB0
aGUgdGVybWluYWwgYml0CisgKglmbGFncyBtYXkgYmUgdXBkYXRlZC4KKyAqLworIAogaW50IHR0
eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaW50IGJhdWQgPSB0
dHlfdGVybWlvc19iYXVkX3JhdGUodHR5LT50ZXJtaW9zKTsKQEAgLTIwNzEsNiArMjUyMiwxNyBA
QAogCiBFWFBPUlRfU1lNQk9MKHR0eV9nZXRfYmF1ZF9yYXRlKTsKIAorLyoqCisgKgl0dHlfZmxp
cF9idWZmZXJfcHVzaAktCXRlcm1pbmFsCisgKglAdHR5OiB0dHkgdG8gcHVzaAorICoKKyAqCVF1
ZXVlIGEgcHVzaCBvZiB0aGUgdGVybWluYWwgZmxpcCBidWZmZXJzIHRvIHRoZSBsaW5lIGRpc2Np
cGxpbmUuIFRoaXMKKyAqCWZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIElSUSBjb250
ZXh0IGlmIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0LgorICoKKyAqCUluIHRoZSBldmVudCBvZiB0
aGUgcXVldWUgYmVpbmcgYnVzeSBmb3IgZmxpcHBpbmcgdGhlIHdvcmsgd2lsbCBiZQorICoJaGVs
ZCBvZmYgYW5kIHJldHJpZWQgbGF0ZXIuCisgKi8KKwogdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVz
aChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHktPmxvd19sYXRlbmN5KQpAQCAt
MjA4OCw3ICsyNTUwLDcgQEAKIHsKIAltZW1zZXQodHR5LCAwLCBzaXplb2Yoc3RydWN0IHR0eV9z
dHJ1Y3QpKTsKIAl0dHktPm1hZ2ljID0gVFRZX01BR0lDOwotCXR0eS0+bGRpc2MgPSBsZGlzY3Nb
Tl9UVFldOworCXR0eV9sZGlzY19hc3NpZ24odHR5LCB0dHlfbGRpc2NfZ2V0KE5fVFRZKSk7CiAJ
dHR5LT5wZ3JwID0gLTE7CiAJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciA9IHR0eS0+ZmxpcC5jaGFy
X2J1ZjsKIAl0dHktPmZsaXAuZmxhZ19idWZfcHRyID0gdHR5LT5mbGlwLmZsYWdfYnVmOwpkaWZm
IC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYyBsaW51eC0yLjYuNy0x
MTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCi0tLSBsaW51
eC0yLjYuNy9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMJMjAwNC0wNi0xNSAyMjoyMDoyNi4wMDAw
MDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2
ZXJzL2NoYXIvdHR5X2lvY3RsLmMJMjAwNC0xMS0yMyAxMzoyNDo0My4xMjMyNjk2MTYgLTA4MDAK
QEAgLTI5LDYgKzI5LDggQEAKIAogI3VuZGVmCURFQlVHCiAKK2V4dGVybiBzcGlubG9ja190IHR0
eV90ZXJtaW9zX2xvY2s7CisKIC8qCiAgKiBJbnRlcm5hbCBmbGFnIG9wdGlvbnMgZm9yIHRlcm1p
b3Mgc2V0dGluZyBiZWhhdmlvcgogICovCkBAIC05OCw4ICsxMDAsMTggQEAKIHsKIAlpbnQgY2Fu
b25fY2hhbmdlOwogCXN0cnVjdCB0ZXJtaW9zIG9sZF90ZXJtaW9zID0gKnR0eS0+dGVybWlvczsK
KwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCS8qCisJ
ICoJUGVyZm9ybSB0aGUgYWN0dWFsIHRlcm1pb3MgaW50ZXJuYWwgY2hhbmdlcyB1bmRlciBsb2Nr
LgorCSAqLworCSAKKworCS8qIEZJWE1FOiB3ZSBuZWVkIHRvIGRlY2lkZSBvbiBzb21lIGxvY2tp
bmcvb3JkZXJpbmcgc2VtYW50aWNzCisJICAgZm9yIHRoZSBzZXRfdGVybWlvcyBub3RpZmljYXRp
b24gZXZlbnR1YWxseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfdGVybWlvc19sb2NrLCBm
bGFncyk7CiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOyAvLyBGSVhNRTogaXMgdGhpcyBzYWZlPwog
CSp0dHktPnRlcm1pb3MgPSAqbmV3X3Rlcm1pb3M7CiAJdW5zZXRfbG9ja2VkX3Rlcm1pb3ModHR5
LT50ZXJtaW9zLCAmb2xkX3Rlcm1pb3MsIHR0eS0+dGVybWlvc19sb2NrZWQpOwogCWNhbm9uX2No
YW5nZSA9IChvbGRfdGVybWlvcy5jX2xmbGFnIF4gdHR5LT50ZXJtaW9zLT5jX2xmbGFnKSAmIElD
QU5PTjsKQEAgLTEwOSwxMiArMTIxLDEzIEBACiAJCXR0eS0+Y2Fub25fZGF0YSA9IDA7CiAJCXR0
eS0+ZXJhc2luZyA9IDA7CiAJfQotCWxvY2FsX2lycV9lbmFibGUoKTsgLy8gRklYTUU6IGlzIHRo
aXMgc2FmZT8KKwkKKwkKIAlpZiAoY2Fub25fY2hhbmdlICYmICFMX0lDQU5PTih0dHkpICYmIHR0
eS0+cmVhZF9jbnQpCiAJCS8qIEdldCBjaGFyYWN0ZXJzIGxlZnQgb3ZlciBmcm9tIGNhbm9uaWNh
bCBtb2RlLiAqLwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cmVhZF93YWl0KTsKIAot
CS8qIHNlZSBpZiBwYWNrZXQgbW9kZSBjaGFuZ2Ugb2Ygc3RhdGUgKi8KKwkvKiBTZWUgaWYgcGFj
a2V0IG1vZGUgY2hhbmdlIG9mIHN0YXRlLiAqLwogCiAJaWYgKHR0eS0+bGluayAmJiB0dHktPmxp
bmstPnBhY2tldCkgewogCQlpbnQgb2xkX2Zsb3cgPSAoKG9sZF90ZXJtaW9zLmNfaWZsYWcgJiBJ
WE9OKSAmJgpAQCAtMTM2LDEzICsxNDksMTkgQEAKIAlpZiAodHR5LT5kcml2ZXItPnNldF90ZXJt
aW9zKQogCQkoKnR0eS0+ZHJpdmVyLT5zZXRfdGVybWlvcykodHR5LCAmb2xkX3Rlcm1pb3MpOwog
Ci0JaWYgKHR0eS0+bGRpc2Muc2V0X3Rlcm1pb3MpCi0JCSgqdHR5LT5sZGlzYy5zZXRfdGVybWlv
cykodHR5LCAmb2xkX3Rlcm1pb3MpOworIAlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKyAJaWYg
KGxkICE9IE5VTEwpIHsKKyAJCWlmIChsZC0+c2V0X3Rlcm1pb3MpCisgCQkJKGxkLT5zZXRfdGVy
bWlvcykodHR5LCAmb2xkX3Rlcm1pb3MpOworIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKyAJfQor
IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfdGVybWlvc19sb2NrLCBmbGFncyk7CiB9CiAK
IHN0YXRpYyBpbnQgc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHZvaWQgX191
c2VyICphcmcsIGludCBvcHQpCiB7CiAJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7CisgCXN0
cnVjdCB0dHlfbGRpc2MgKmxkOwogCWludCByZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7
CiAKIAlpZiAocmV0dmFsKQpAQCAtMTU5LDkgKzE3OCwxNCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7
CiAJfQogCi0JaWYgKChvcHQgJiBURVJNSU9TX0ZMVVNIKSAmJiB0dHktPmxkaXNjLmZsdXNoX2J1
ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKLQorCWxkID0gdHR5X2xkaXNj
X3JlZih0dHkpOworCQorCWlmIChsZCAhPSBOVUxMKSB7CisJCWlmICgob3B0ICYgVEVSTUlPU19G
TFVTSCkgJiYgbGQtPmZsdXNoX2J1ZmZlcikKKwkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJ
dHR5X2xkaXNjX2RlcmVmKGxkKTsKKwl9CisJCiAJaWYgKG9wdCAmIFRFUk1JT1NfV0FJVCkgewog
CQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJy
ZW50KSkKQEAgLTIyNSwxMiArMjQ5LDE2IEBACiBzdGF0aWMgaW50IGdldF9zZ3R0eWIoc3RydWN0
IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBzZ3R0eWIgX191c2VyICogc2d0dHliKQogewogCXN0
cnVjdCBzZ3R0eWIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJx
c2F2ZSgmdHR5X3Rlcm1pb3NfbG9jaywgZmxhZ3MpOwogCXRtcC5zZ19pc3BlZWQgPSAwOwogCXRt
cC5zZ19vc3BlZWQgPSAwOwogCXRtcC5zZ19lcmFzZSA9IHR0eS0+dGVybWlvcy0+Y19jY1tWRVJB
U0VdOwogCXRtcC5zZ19raWxsID0gdHR5LT50ZXJtaW9zLT5jX2NjW1ZLSUxMXTsKIAl0bXAuc2df
ZmxhZ3MgPSBnZXRfc2dmbGFncyh0dHkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV90
ZXJtaW9zX2xvY2ssIGZsYWdzKTsKKwkKIAlyZXR1cm4gY29weV90b191c2VyKHNndHR5YiwgJnRt
cCwgc2l6ZW9mKHRtcCkpID8gLUVGQVVMVCA6IDA7CiB9CiAKQEAgLTI2NSwxNiArMjkzLDIxIEBA
CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3Qgc2d0dHliIHRtcDsKIAlzdHJ1Y3QgdGVybWlvcyB0ZXJt
aW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdl
KHR0eSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQl0ZXJtaW9zID0gICp0dHkt
PnRlcm1pb3M7CisJCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHNndHR5Yiwgc2l6ZW9mKHRt
cCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwkJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV90ZXJt
aW9zX2xvY2ssIGZsYWdzKTsKKwl0ZXJtaW9zID0gICp0dHktPnRlcm1pb3M7CiAJdGVybWlvcy5j
X2NjW1ZFUkFTRV0gPSB0bXAuc2dfZXJhc2U7CiAJdGVybWlvcy5jX2NjW1ZLSUxMXSA9IHRtcC5z
Z19raWxsOwogCXNldF9zZ2ZsYWdzKCZ0ZXJtaW9zLCB0bXAuc2dfZmxhZ3MpOworCXNwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKIAljaGFuZ2VfdGVybWlv
cyh0dHksICZ0ZXJtaW9zKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM2NSw2ICszOTgsOCBAQAogCXN0
cnVjdCB0dHlfc3RydWN0ICogcmVhbF90dHk7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3Vz
ZXIgKilhcmc7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwl1bnNpZ25l
ZCBsb25nIGZsYWdzOwogCiAJaWYgKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQ
RV9QVFkgJiYKIAkgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQpA
QCAtNDQzLDIyICs0NzgsMjYgQEAKIAkJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsK
IAkJCWlmIChyZXR2YWwpCiAJCQkJcmV0dXJuIHJldHZhbDsKKwkJCQkKKwkJCWxkID0gdHR5X2xk
aXNjX3JlZih0dHkpOwogCQkJc3dpdGNoIChhcmcpIHsKIAkJCWNhc2UgVENJRkxVU0g6Ci0JCQkJ
aWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQkJCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cih0dHkpOworCQkJCWlmIChsZC0+Zmx1c2hfYnVmZmVyKQorCQkJCQlsZC0+Zmx1c2hfYnVmZmVy
KHR0eSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRDSU9GTFVTSDoKLQkJCQlpZiAodHR5LT5sZGlz
Yy5mbHVzaF9idWZmZXIpCi0JCQkJCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCQkJ
aWYgKGxkLT5mbHVzaF9idWZmZXIpCisJCQkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKIAkJCQkv
KiBmYWxsIHRocm91Z2ggKi8KIAkJCWNhc2UgVENPRkxVU0g6CiAJCQkJaWYgKHR0eS0+ZHJpdmVy
LT5mbHVzaF9idWZmZXIpCiAJCQkJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKIAkJ
CQlicmVhazsKIAkJCWRlZmF1bHQ6CisJCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAkJCQlyZXR1
cm4gLUVJTlZBTDsKIAkJCX0KKwkJCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJCQlyZXR1cm4gMDsK
IAkJY2FzZSBUSU9DT1VUUToKIAkJCXJldHVybiBwdXRfdXNlcih0dHktPmRyaXZlci0+Y2hhcnNf
aW5fYnVmZmVyID8KQEAgLTUwNCw5ICs1NDMsMTEgQEAKIAkJY2FzZSBUSU9DU1NPRlRDQVI6CiAJ
CQlpZiAoZ2V0X3VzZXIoYXJnLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpKQogCQkJCXJl
dHVybiAtRUZBVUxUOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZs
YWdzKTsKIAkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9CiAJCQkJKCh0dHktPnRlcm1pb3MtPmNf
Y2ZsYWcgJiB+Q0xPQ0FMKSB8CiAJCQkJIChhcmcgPyBDTE9DQUwgOiAwKSk7CisJCQlzcGluX3Vu
bG9ja19pcnFyZXN0b3JlKCZ0dHlfdGVybWlvc19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMDsK
IAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7CmRpZmYgLU5hdXIgbGludXgtMi42
LjcvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQu
Zml4ZWQvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9jaGFy
L3Zpb2NvbnMuYwkyMDA0LTA2LTE1IDIyOjE4OjM3LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgt
Mi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci92aW9jb25zLmMJMjAw
NC0xMS0yMyAxMzoyMzoyMy4yMTY0MTcwMDAgLTA4MDAKQEAgLTQyMiwxMCArNDIyLDcgQEAKIAkJ
CXBpLT5vdmVyZmxvd01lc3NhZ2UgPSAwOwogCiAJCWlmIChwaS0+dHR5KSB7Ci0JCQlpZiAoKHBp
LT50dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCQkgICAgKHBp
LT50dHktPmxkaXNjLndyaXRlX3dha2V1cCkpCi0JCQkJKHBpLT50dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkocGktPnR0eSk7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBpLT50dHktPndyaXRl
X3dhaXQpOworCQkJdHR5X3dha2V1cChwaS0+dHR5KTsKIAkJfQogCX0KIApkaWZmIC1OYXVyIGxp
bnV4LTIuNi43L2RyaXZlcnMvY2hhci92bWVfc2NjLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAw
NC0wODE0LmZpeGVkL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZl
cnMvY2hhci92bWVfc2NjLmMJMjAwNC0wNi0xNSAyMjoxODo1MC4wMDAwMDAwMDAgLTA3MDAKKysr
IGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2NoYXIvdm1lX3Nj
Yy5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuMjE5NDE2MDAwIC0wODAwCkBAIC01NDQsMTIgKzU0NCw4
IEBACiAJCVNDQ3dyaXRlKENPTU1BTkRfUkVHLCBDUl9UWF9QRU5ESU5HX1JFU0VUKTsgICAvKiBk
aXNhYmxlIHR4X2ludCBvbiBuZXh0IHR4IHVuZGVycnVuPyAqLwogCQlwb3J0LT5ncy5mbGFncyAm
PSB+R1NfVFhfSU5URU47CiAJfQotCWlmIChwb3J0LT5ncy50dHkgJiYgcG9ydC0+Z3MueG1pdF9j
bnQgPD0gcG9ydC0+Z3Mud2FrZXVwX2NoYXJzKSB7Ci0JCWlmICgocG9ydC0+Z3MudHR5LT5mbGFn
cyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCXBvcnQtPmdzLnR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKQotCQkJKHBvcnQtPmdzLnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKShw
b3J0LT5ncy50dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmdzLnR0eS0+d3Jp
dGVfd2FpdCk7Ci0JfQorCWlmIChwb3J0LT5ncy50dHkgJiYgcG9ydC0+Z3MueG1pdF9jbnQgPD0g
cG9ydC0+Z3Mud2FrZXVwX2NoYXJzKQorCQl0dHlfd2FrZXVwKHBvcnQtPmdzLnR0eSk7CiAKIAlT
Q0N3cml0ZV9OQihDT01NQU5EX1JFRywgQ1JfSElHSEVTVF9JVVNfUkVTRVQpOwogCXJldHVybiBJ
UlFfSEFORExFRDsKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL2NoYXIvdnRfaW9jdGwu
YyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9jaGFyL3Z0X2lv
Y3RsLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCTIwMDQtMDYtMTUg
MjI6MTk6NDIuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4
MTQuZml4ZWQvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yMjM0
MTYwMDAgLTA4MDAKQEAgLTUzNiw4ICs1MzYsNyBAQAogCQkgIGRlZmF1bHQ6CiAJCQlyZXR1cm4g
LUVJTlZBTDsKIAkJfQotCQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQl0dHktPmxk
aXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAkJcmV0dXJu
IDA7CiAKIAljYXNlIEtER0tCTU9ERToKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL2lz
ZG4vY2FwaS9jYXBpLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZl
cnMvaXNkbi9jYXBpL2NhcGkuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9pc2RuL2NhcGkvY2Fw
aS5jCTIwMDQtMDYtMTUgMjI6MjA6MDQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0x
MTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCTIwMDQtMTEt
MjMgMTM6MjM6MjMuMjI5NDE1MDAwIC0wODAwCkBAIC00MzYsNTEgKzQzNiw2MiBAQAogCXN0cnVj
dCBza19idWZmICpuc2tiOwogCWludCBkYXRhbGVuOwogCXUxNiBlcnJjb2RlLCBkYXRhaGFuZGxl
OworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCiAJZGF0YWxlbiA9IHNrYi0+bGVuIC0gQ0FQSU1T
R19MRU4oc2tiLT5kYXRhKTsKLQlpZiAobXAtPnR0eSkgewotCQlpZiAobXAtPnR0eS0+bGRpc2Mu
cmVjZWl2ZV9idWYgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBsZGlzYyBoYXMg
bm8gcmVjZWl2ZV9idWYgZnVuY3Rpb25cbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmICht
cC0+dHR5aW5zdG9wKSB7CisJaWYgKG1wLT50dHkgPT0gTlVMTCkKKwl7CisjaWZkZWYgX0RFQlVH
X0RBVEFGTE9XCisJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBjdXJyZW50bHkgbm8gcmVjZWl2
ZXJcbiIpOworI2VuZGlmCisJCXJldHVybiAtMTsKKwl9CisJCisJbGQgPSB0dHlfbGRpc2NfcmVm
KG1wLT50dHkpOworCWlmIChsZCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJaWYgKGxkLT5yZWNl
aXZlX2J1ZiA9PSBOVUxMKSB7CiAjaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmlu
ZWQoX0RFQlVHX1RUWUZVTkNTKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IHJlY3YgdHR5
IHRocm90dGxlZFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBsZGlzYyBoYXMgbm8g
cmVjZWl2ZV9idWYgZnVuY3Rpb25cbiIpOwogI2VuZGlmCi0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJ
aWYgKG1wLT50dHktPmxkaXNjLnJlY2VpdmVfcm9vbSAmJgotCQkgICAgbXAtPnR0eS0+bGRpc2Mu
cmVjZWl2ZV9yb29tKG1wLT50dHkpIDwgZGF0YWxlbikgeworCQlnb3RvIGJhZDsKKwl9CisJaWYg
KG1wLT50dHlpbnN0b3ApIHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5l
ZChfREVCVUdfVFRZRlVOQ1MpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogbm8gcm9vbSBp
biB0dHlcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogcmVjdiB0dHkgdGhyb3R0bGVk
XG4iKTsKICNlbmRpZgotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmICgobnNrYiA9IGdlbl9kYXRh
X2IzX3Jlc3BfZm9yKG1wLCBza2IpKSA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNhcGk6
IGdlbl9kYXRhX2IzX3Jlc3AgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlkYXRh
aGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLENBUElNU0dfQkFTRUxFTis0KTsKLQkJZXJy
Y29kZSA9IGNhcGkyMF9wdXRfbWVzc2FnZShtcC0+YXAsIG5za2IpOwotCQlpZiAoZXJyY29kZSAh
PSBDQVBJX05PRVJST1IpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FwaTogc2VuZCBEQVRBX0Iz
X1JFU1AgZmFpbGVkPSV4XG4iLAotCQkJCQllcnJjb2RlKTsKLQkJCWtmcmVlX3NrYihuc2tiKTsK
LQkJCXJldHVybiAtMTsKLQkJfQotCQkodm9pZClza2JfcHVsbChza2IsIENBUElNU0dfTEVOKHNr
Yi0+ZGF0YSkpOwotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCQlwcmludGsoS0VSTl9ERUJVRyAi
Y2FwaTogREFUQV9CM19SRVNQICV1IGxlbj0lZCA9PiBsZGlzY1xuIiwKLQkJCQkJZGF0YWhhbmRs
ZSwgc2tiLT5sZW4pOworCQlnb3RvIGJhZDsKKwl9CisJaWYgKGxkLT5yZWNlaXZlX3Jvb20gJiYK
KwkgICAgbGQtPnJlY2VpdmVfcm9vbShtcC0+dHR5KSA8IGRhdGFsZW4pIHsKKyNpZiBkZWZpbmVk
KF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCisJCXByaW50ayhL
RVJOX0RFQlVHICJjYXBpOiBubyByb29tIGluIHR0eVxuIik7CiAjZW5kaWYKLQkJbXAtPnR0eS0+
bGRpc2MucmVjZWl2ZV9idWYobXAtPnR0eSwgc2tiLT5kYXRhLCAwLCBza2ItPmxlbik7Ci0JCWtm
cmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKLQorCQlnb3RvIGJhZDsKKwl9CisJaWYgKChuc2ti
ID0gZ2VuX2RhdGFfYjNfcmVzcF9mb3IobXAsIHNrYikpID09IDApIHsKKwkJcHJpbnRrKEtFUk5f
RVJSICJjYXBpOiBnZW5fZGF0YV9iM19yZXNwIGZhaWxlZFxuIik7CisJCWdvdG8gYmFkOworCX0K
KwlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLENBUElNU0dfQkFTRUxFTis0KTsK
KwllcnJjb2RlID0gY2FwaTIwX3B1dF9tZXNzYWdlKG1wLT5hcCwgbnNrYik7CisJaWYgKGVycmNv
ZGUgIT0gQ0FQSV9OT0VSUk9SKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FwaTogc2VuZCBEQVRB
X0IzX1JFU1AgZmFpbGVkPSV4XG4iLAorCQkJCWVycmNvZGUpOworCQlrZnJlZV9za2IobnNrYik7
CisJCWdvdG8gYmFkOwogCX0KKwkodm9pZClza2JfcHVsbChza2IsIENBUElNU0dfTEVOKHNrYi0+
ZGF0YSkpOwogI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBp
OiBjdXJyZW50bHkgbm8gcmVjZWl2ZXJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBE
QVRBX0IzX1JFU1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAorCQkJCWRhdGFoYW5kbGUsIHNrYi0+
bGVuKTsKICNlbmRpZgorCWxkLT5yZWNlaXZlX2J1ZihtcC0+dHR5LCBza2ItPmRhdGEsIE5VTEws
IHNrYi0+bGVuKTsKKwlrZnJlZV9za2Ioc2tiKTsKKwl0dHlfbGRpc2NfZGVyZWYobGQpOworCXJl
dHVybiAwOworYmFkOgorCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJcmV0dXJuIC0xOwogfQogCkBA
IC02MTQsNiArNjI1LDcgQEAKIAogCiAJaWYgKENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEp
ID09IENBUElfSU5EKSB7CisJCQogCQlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRh
LCBDQVBJTVNHX0JBU0VMRU4rNCs0KzIpOwogI2lmZGVmIF9ERUJVR19EQVRBRkxPVwogCQlwcmlu
dGsoS0VSTl9ERUJVRyAiY2FwaV9zaWduYWw6IERBVEFfQjNfSU5EICV1IGxlbj0lZFxuIiwKQEAg
LTYzMywxMCArNjQ1LDggQEAKICNlbmRpZgogCQlrZnJlZV9za2Ioc2tiKTsKIAkJKHZvaWQpY2Fw
aW1pbm9yX2RlbF9hY2sobXAsIGRhdGFoYW5kbGUpOwotCQlpZiAobXAtPnR0eSkgewotCQkJaWYg
KG1wLT50dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQltcC0+dHR5LT5sZGlzYy53cml0ZV93
YWtldXAobXAtPnR0eSk7Ci0JCX0KKwkJaWYgKG1wLT50dHkpCisJCQl0dHlfd2FrZXVwKHR0eSk7
CiAJCSh2b2lkKWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKIAogCX0gZWxzZSB7CmRpZmYgLU5hdXIg
bGludXgtMi42LjcvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKLS0tIGxpbnV4
LTIuNi43L2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwkyMDA0LTA2LTE1IDIyOjE5OjQzLjAw
MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2Ry
aXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjIzOTQxMzAwMCAt
MDgwMApAQCAtMjk2LDEwICsyOTYsNyBAQAogCQlpbmZvLT5zZW5kX291dHN0YW5kaW5nKys7CiAJ
CWluZm8tPm1zciAmPSB+VUFSVF9NU1JfQ1RTOwogCQlpbmZvLT5sc3IgJj0gflVBUlRfTFNSX1RF
TVQ7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgot
CQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtl
dXApICh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJ
CXR0eV93YWtldXAodHR5KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2xlbiA8IDApIHsKQEAgLTEx
NzQsMTAgKzExNzEsNyBAQAogCQkJCQkJLyogSWYgRExFIGRlY29kaW5nIHJlc3VsdHMgaW4gemVy
by10cmFuc21pdCwgYnV0CiAJCQkJCQkgKiBjIG9yaWdpbmFsbHkgd2FzIG5vbi16ZXJvLCBkbyBh
IHdha2V1cC4KIAkJCQkJCSAqLwotCQkJCQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RP
X1dSSVRFX1dBS0VVUCkpICYmCi0JCQkJCQkgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkJ
CQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKLQkJCQkJCXdha2VfdXBfaW50ZXJy
dXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwkJCQkJCXR0eV93YWtldXAodHR5KTsKIAkJCQkJ
CWluZm8tPm1zciB8PSBVQVJUX01TUl9DVFM7CiAJCQkJCQlpbmZvLT5sc3IgfD0gVUFSVF9MU1Jf
VEVNVDsKIAkJCQkJfQpAQCAtMTI5MCw5ICsxMjg0LDcgQEAKIAlpc2RuX3R0eV9jbGVhbnVwX3ht
aXQoaW5mbyk7CiAJaW5mby0+eG1pdF9jb3VudCA9IDA7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxl
KCZ0dHktPndyaXRlX3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIHN0YXRpYyB2
b2lkCkBAIC0xNzQ5LDggKzE3NDEsNyBAQAogCWlzZG5fdHR5X3NodXRkb3duKGluZm8pOwogCWlm
ICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCWluZm8tPnR0eSA9IDA7CiAJ
aW5mby0+bmNhcnJpZXIgPSAwOwogCXR0eS0+Y2xvc2luZyA9IDA7CkBAIC0yNjgxLDggKzI2NzIs
NyBAQAogCQlpZiAoKGluZm8tPmZsYWdzICYgSVNETl9BU1lOQ19DTE9TSU5HKSB8fCAoIWluZm8t
PnR0eSkpIHsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAoaW5mby0+dHR5LT5sZGlzYy5mbHVzaF9i
dWZmZXIpCi0JCQlpbmZvLT50dHktPmxkaXNjLmZsdXNoX2J1ZmZlcihpbmZvLT50dHkpOworCQl0
dHlfbGRpc2NfZmx1c2godHR5KTsKIAkJaWYgKChpbmZvLT5mbGFncyAmIElTRE5fQVNZTkNfQ0hF
Q0tfQ0QpICYmCiAJCSAgICAoISgoaW5mby0+ZmxhZ3MgJiBJU0ROX0FTWU5DX0NBTExPVVRfQUNU
SVZFKSAmJgogCQkgICAgICAgKGluZm8tPmZsYWdzICYgSVNETl9BU1lOQ19DQUxMT1VUX05PSFVQ
KSkpKSB7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9tYWNpbnRvc2gvbWFjc2VyaWFs
LmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbWFjaW50b3No
L21hY3NlcmlhbC5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL21hY2ludG9zaC9tYWNzZXJpYWwu
YwkyMDA0LTA2LTE1IDIyOjIwOjA0LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0
MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbWFjaW50b3NoL21hY3NlcmlhbC5jCTIwMDQt
MTEtMjMgMTM6MjM6MjMuMjQ3NDEyMDAwIC0wODAwCkBAIC03MTcsMTIgKzcxNyw4IEBACiAJaWYg
KCF0dHkpCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUlNfRVZFTlRfV1JJ
VEVfV0FLRVVQLCAmaW5mby0+ZXZlbnQpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRU
WV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0J
CQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJs
ZSgmdHR5LT53cml0ZV93YWl0KTsKLQl9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVO
VF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpCisJCXR0eV93YWtldXAodHR5KTsKIH0KIAog
c3RhdGljIGludCBzdGFydHVwKHN0cnVjdCBtYWNfc2VyaWFsICogaW5mbykKQEAgLTE1NzAsMTAg
KzE1NjYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJaW5m
by0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogCXNw
aW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX2ludGVy
cnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZ
X0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQko
dHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAv
KgpAQCAtMjAwMCw4ICsxOTkzLDcgQEAKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1
c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19m
bHVzaCh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8t
PnR0eSA9IDA7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtp
c3MuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9uZXQvaGFt
cmFkaW8vbWtpc3MuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3Mu
YwkyMDA0LTA2LTE1IDIyOjIwOjA0LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0
MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMJMjAwNC0x
MS0yMyAxMzoyMzoyMy4yNTE0MTEwMDAgLTA4MDAKQEAgLTYwMiw4ICs2MDIsNiBAQAogCiAJaWYg
KHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIo
dHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hf
YnVmZmVyKHR0eSk7CiAKIAkvKiBSZXN0b3JlIGRlZmF1bHQgc2V0dGluZ3MgKi8KIAlheC0+ZGV2
LT50eXBlID0gQVJQSFJEX0FYMjU7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9uZXQv
aXJkYS9pcnR0eS1zaXIuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJp
dmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9uZXQvaXJk
YS9pcnR0eS1zaXIuYwkyMDA0LTA2LTE1IDIyOjE4OjM3LjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHkt
c2lyLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yNTM0MTEwMDAgLTA4MDAKQEAgLTUxNywxMyArNTE3
LDYgQEAKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcih0dHkpOwogCQotLyogZnJvbSBvbGQgaXJ0dHkgLSBidXQgd2hhdCBpcyBpdCBn
b29kIGZvcj8KLSAqIHdlIF9hcmVfIHRoZSBsZGlzYyBhbmQgd2UgX2Rvbid0XyBpbXBsZW1lbnQg
Zmx1c2hfYnVmZmVyIQotICoKLSAqCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLSAqCQl0
dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOwotICovCi0KIAkvKiBhcHBseSBtdHQgb3ZlcnJp
ZGUgKi8KIAlzaXJfdHR5X2Rydi5xb3NfbXR0X2JpdHMgPSBxb3NfbXR0X2JpdHM7CiAKZGlmZiAt
TmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBsaW51eC0yLjYuNy0xMTQw
X0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKLS0tIGxpbnV4LTIu
Ni43L2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCTIwMDQtMDYtMTUgMjI6MTk6NDMuMDAwMDAwMDAw
IC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9u
ZXQvcHBwX2FzeW5jLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yNTc0MTEwMDAgLTA4MDAKQEAgLTEy
MSw2ICsxMjEsOSBAQAogICogZnJlZXMgdGhlIG1lbW9yeSB0aGF0IHBwcF9hc3luY3R0eV9yZWNl
aXZlIGlzIHVzaW5nLiAgVGhlIGJlc3QKICAqIHdheSB0byBmaXggdGhpcyBpcyB0byB1c2UgYSBy
d2xvY2sgaW4gdGhlIHR0eSBzdHJ1Y3QsIGJ1dCBmb3Igbm93CiAgKiB3ZSB1c2UgYSBzaW5nbGUg
Z2xvYmFsIHJ3bG9jayBmb3IgYWxsIHR0eXMgaW4gcHBwIGxpbmUgZGlzY2lwbGluZS4KKyAqCisg
KiBGSVhNRTogdGhpcyBpcyBubyBsb25nZXIgdHJ1ZS4gVGhlIF9jbG9zZSBwYXRoIGZvciB0aGUg
bGRpc2MgaXMgCisgKiBub3cgZ3VhcmFudGVlZCB0byBiZSBzYW5lLiAKICAqLwogc3RhdGljIHJ3
bG9ja190IGRpc2NfZGF0YV9sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsKIApAQCAtMTQzLDcgKzE0
Niw4IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgd2hlbiBhIHR0eSBpcyBwdXQgaW50byBQUFAgbGlu
ZSBkaXNjaXBsaW5lLgorICogQ2FsbGVkIHdoZW4gYSB0dHkgaXMgcHV0IGludG8gUFBQIGxpbmUg
ZGlzY2lwbGluZS4gQ2FsbGVkIGluIHByb2Nlc3MKKyAqIGNvbnRleHQuCiAgKi8KIHN0YXRpYyBp
bnQKIHBwcF9hc3luY3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0yNTQsNiAr
MjU4LDExIEBACiAJcmV0dXJuIC1FQUdBSU47CiB9CiAKKy8qCisgKiBDYWxsZWQgaW4gcHJvY2Vz
cyBjb250ZXh0IG9ubHkuIE1heSBiZSByZS1lbnRlcmVkIGJ5IG11bHRpcGxlCisgKiBpb2N0bCBj
YWxsaW5nIHRocmVhZHMuCisgKi8KKyAKIHN0YXRpYyBpbnQKIHBwcF9hc3luY3R0eV9pb2N0bChz
dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgdW5zaWduZWQg
aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC03NDksNyArNzU4LDggQEAKIAogLyoKICAq
IEZsdXNoIG91dHB1dCBmcm9tIG91ciBpbnRlcm5hbCBidWZmZXJzLgotICogQ2FsbGVkIGZvciB0
aGUgVENGTFNIIGlvY3RsLgorICogQ2FsbGVkIGZvciB0aGUgVENGTFNIIGlvY3RsLiBDYW4gYmUg
ZW50ZXJlZCBpbiBwYXJhbGxlbAorICogYnV0IHRoaXMgaXMgY292ZXJlZCBieSB0aGUgeG1pdF9s
b2NrLgogICovCiBzdGF0aWMgdm9pZAogcHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5
bmNwcHAgKmFwKQpAQCAtODQ5LDcgKzg1OSw5IEBACiAJCXNrYl90cmltKHNrYiwgMCk7CiB9CiAK
LS8qIGNhbGxlZCB3aGVuIHRoZSB0dHkgZHJpdmVyIGhhcyBkYXRhIGZvciB1cy4gKi8KKy8qIENh
bGxlZCB3aGVuIHRoZSB0dHkgZHJpdmVyIGhhcyBkYXRhIGZvciB1cy4gUnVucyBwYXJhbGxlbCB3
aXRoIHRoZQorICAgb3RoZXIgbGRpc2MgZnVuY3Rpb25zIGJ1dCB3aWxsIG5vdCBiZSByZS1lbnRl
cmVkICovCisKIHN0YXRpYyB2b2lkCiBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICph
cCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQljaGFyICpmbGFncywgaW50IGNvdW50KQpk
aWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMgbGludXgtMi42
LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKLS0t
IGxpbnV4LTIuNi43L2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMJMjAwNC0wNi0xNSAyMjoxOToy
Mi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhl
ZC9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuMjYwNDEwMDAw
IC0wODAwCkBAIC0xNzIsNiArMTcyLDggQEAKICAqIGZyZWVzIHRoZSBtZW1vcnkgdGhhdCBwcHBf
c3luY3R0eV9yZWNlaXZlIGlzIHVzaW5nLiAgVGhlIGJlc3QKICAqIHdheSB0byBmaXggdGhpcyBp
cyB0byB1c2UgYSByd2xvY2sgaW4gdGhlIHR0eSBzdHJ1Y3QsIGJ1dCBmb3Igbm93CiAgKiB3ZSB1
c2UgYSBzaW5nbGUgZ2xvYmFsIHJ3bG9jayBmb3IgYWxsIHR0eXMgaW4gcHBwIGxpbmUgZGlzY2lw
bGluZS4KKyAqCisgKiBGSVhNRTogRml4ZWQgaW4gdHR5X2lvIG5vd2RheXMuCiAgKi8KIHN0YXRp
YyByd2xvY2tfdCBkaXNjX2RhdGFfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CiAKZGlmZiAtTmF1
ciBsaW51eC0yLjYuNy9kcml2ZXJzL25ldC9zbGlwLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAw
NC0wODE0LmZpeGVkL2RyaXZlcnMvbmV0L3NsaXAuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9u
ZXQvc2xpcC5jCTIwMDQtMDYtMTUgMjI6MjA6MjYuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y
LjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9uZXQvc2xpcC5jCTIwMDQtMTEt
MjMgMTM6MjM6MjMuMjY1NDA5MDAwIC0wODAwCkBAIC02NzIsNyArNjcyLDkgQEAKICAqIEhhbmRs
ZSB0aGUgJ3JlY2VpdmVyIGRhdGEgcmVhZHknIGludGVycnVwdC4KICAqIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSAndHR5X2lvJyBtb2R1bGUgaW4gdGhlIGtlcm5lbCB3aGVuCiAgKiBh
IGJsb2NrIG9mIFNMSVAgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBk
ZWNhcHN1bGF0ZWQKLSAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIg
cHJvY2Vzc2luZy4KKyAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIg
cHJvY2Vzc2luZy4gVGhpcyB3aWxsIG5vdAorICogYmUgcmUtZW50ZXJlZCB3aGlsZSBydW5uaW5n
IGJ1dCBvdGhlciBsZGlzYyBmdW5jdGlvbnMgbWF5IGJlIGNhbGxlZAorICogaW4gcGFyYWxsZWwK
ICAqLwogIAogc3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKQEAgLTg0
MSw5ICs4NDMsMTEgQEAKICAqIFNMSVAgbGluZSBkaXNjaXBsaW5lIGlzIGNhbGxlZCBmb3IuICBC
ZWNhdXNlIHdlIGFyZQogICogc3VyZSB0aGUgdHR5IGxpbmUgZXhpc3RzLCB3ZSBvbmx5IGhhdmUg
dG8gbGluayBpdCB0bwogICogYSBmcmVlIFNMSVAgY2hhbm5lbC4uLgorICoKKyAqIENhbGxlZCBp
biBwcm9jZXNzIGNvbnRleHQgc2VyaWFsaXplZCBmcm9tIG90aGVyIGxkaXNjIGNhbGxzLgogICov
Ci1zdGF0aWMgaW50Ci1zbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKKworc3RhdGlj
IGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc2xpcCAq
c2w7CiAJaW50IGVycjsKQEAgLTg3NiwxMSArODgwLDExIEBACiAJdHR5LT5kaXNjX2RhdGEgPSBz
bDsKIAlzbC0+bGluZSA9IHR0eV9kZXZudW0odHR5KTsKIAlzbC0+cGlkID0gY3VycmVudC0+cGlk
OworCQorCS8qIEZJWE1FOiBhbHJlYWR5IGRvbmUgYmVmb3JlIHdlIHdlcmUgY2FsbGVkIC0gc2Vl
bXMgdGhpcyBjYW4gZ28gKi8KIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5
LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKLQorCQkKIAlpZiAoIXRlc3RfYml0
KFNMRl9JTlVTRSwgJnNsLT5mbGFncykpIHsKIAkJLyogUGVyZm9ybSB0aGUgbG93LWxldmVsIFNM
SVAgaW5pdGlhbGl6YXRpb24uICovCiAJCWlmICgoZXJyID0gc2xfYWxsb2NfYnVmcyhzbCwgU0xf
TVRVKSkgIT0gMCkKQEAgLTkyMyw2ICs5MjcsOSBAQAogfQogCiAvKgorCisgIEZJWE1FOiAxLDIg
YXJlIGZpeGVkIDMgd2FzIG5ldmVyIHRydWUgYW55d2F5LgorICAKICAgIExldCBtZSB0byBibGFt
ZSBhIGJpdC4KICAgIDEuIFRUWSBtb2R1bGUgY2FsbHMgdGhpcyBmdW5zdGlvbiBvbiBzb2Z0IGlu
dGVycnVwdC4KICAgIDIuIFRUWSBtb2R1bGUgY2FsbHMgdGhpcyBmdW5jdGlvbiBXSVRIIE1BU0tF
RCBJTlRFUlJVUFRTIQpAQCAtOTQxLDkgKzk0OCw4IEBACiAKIC8qCiAgKiBDbG9zZSBkb3duIGEg
U0xJUCBjaGFubmVsLgotICogVGhpcyBtZWFucyBmbHVzaGluZyBvdXQgYW55IHBlbmRpbmcgcXVl
dWVzLCBhbmQgdGhlbiByZXN0b3JpbmcgdGhlCi0gKiBUVFkgbGluZSBkaXNjaXBsaW5lIHRvIHdo
YXQgaXQgd2FzIGJlZm9yZSBpdCBnb3QgaG9va2VkIHRvIFNMSVAKLSAqICh3aGljaCB1c3VhbGx5
IGlzIFRUWSBhZ2FpbikuCisgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBx
dWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpcworICogY2FsbCBpcyBzZXJpYWxpemVkIGFn
YWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLgogICovCiBzdGF0aWMgdm9pZAogc2xpcF9jbG9z
ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMv
bmV0L3dhbi9wYzMwMF90dHkuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQv
ZHJpdmVycy9uZXQvd2FuL3BjMzAwX3R0eS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL25ldC93
YW4vcGMzMDBfdHR5LmMJMjAwNC0wNi0xNSAyMjoxOToyMi4wMDAwMDAwMDAgLTA3MDAKKysrIGxp
bnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL25ldC93YW4vcGMzMDBf
dHR5LmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yNzA0MDkwMDAgLTA4MDAKQEAgLTYzNCwxNCArNjM0
LDggQEAKIAl9CiAKIAlDUENfVFRZX0RCRygiJXM6IGNhbGwgd2FrZV91cF9pbnRlcnJ1cHRpYmxl
XG4iLGNwY190dHktPm5hbWUpOwotCQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0
ZV93YWl0KTsgCi0KLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApewotCQlDUENfVFRZX0RCRygiJXM6IGNhbGwg
bGluZSBkaXNjLiB3YWtlIHVwXG4iLGNwY190dHktPm5hbWUpOwotCQl0dHktPmxkaXNjLndyaXRl
X3dha2V1cCh0dHkpOyAKLQl9IAogCisJdHR5X3dha2V1cCh0dHkpOwkKIAlyZXR1cm47IAogfSAK
IApAQCAtNjkyLDkgKzY4NiwxMSBAQAogCXN0X2NwY190dHlfYXJlYSAqY3BjX3R0eTsgCiAJdm9s
YXRpbGUgc3RfY3BjX3J4X2J1ZiAqIGJ1ZjsKIAljaGFyIGZsYWdzPTAsZmxnX3J4PTE7IAorCXN0
cnVjdCB0dHlfbGRpc2MgKmxkOwogCiAJaWYgKGNwY190dHlfY250ID09IDApIHJldHVybjsKIAor
CQogCWZvciAoaT0wOyAoaSA8IDQpICYmIGZsZ19yeCA7IGkrKykgewogCQlmbGdfcnggPSAwOwog
CQlwb3J0ID0gKGludCkgZGF0YTsKQEAgLTcwMiwxMSArNjk4LDE4IEBACiAJCQljcGNfdHR5ID0g
JmNwY190dHlfYXJlYVtwb3J0XTsKIAkJCiAJCQlpZiAoKGJ1Zj1jcGNfdHR5LT5idWZfcnguZmly
c3QpICE9IDApIHsKLQkJCQkJCQkJCQkJCQkJCQotCQkJCWlmIChjcGNfdHR5LT50dHkgJiYgKGNw
Y190dHktPnR0eS0+bGRpc2MucmVjZWl2ZV9idWYpKSB7IAotCQkJCQlDUENfVFRZX0RCRygiJXM6
IGNhbGwgbGluZSBkaXNjLiByZWNlaXZlX2J1ZlxuIixjcGNfdHR5LT5uYW1lKTsKLQkJCQkJY3Bj
X3R0eS0+dHR5LT5sZGlzYy5yZWNlaXZlX2J1ZihjcGNfdHR5LT50dHksIChjaGFyICopKGJ1Zi0+
ZGF0YSksIAotCQkJCQkmZmxhZ3MsIGJ1Zi0+c2l6ZSk7CisJCQkJCisJCQkJaWYoY3BjX3R0eS0+
dHR5KQorCQkJCXsJCQkJCQkJCQkJCQorCQkJCQlsZCA9IHR0eV9sZGlzY19yZWYoY3BjX3R0eSk7
CisJCQkJCWlmKGxkKQorCQkJCQl7CisJCQkJCQlpZiAobGQtPnJlY2VpdmVfYnVmKSkgeworCQkJ
CQkJCUNQQ19UVFlfREJHKCIlczogY2FsbCBsaW5lIGRpc2MuIHJlY2VpdmVfYnVmXG4iLGNwY190
dHktPm5hbWUpOworCQkJCQkJCWxkLT5yZWNlaXZlX2J1ZihjcGNfdHR5LT50dHksIChjaGFyICop
KGJ1Zi0+ZGF0YSksICZmbGFncywgYnVmLT5zaXplKTsKKwkJCQkJCX0KKwkJCQkJCXR0eV9sZGlz
Y19kZXJlZihsZCk7CisJCQkJCX0KIAkJCQl9CQogCQkJCWNwY190dHktPmJ1Zl9yeC5maXJzdCA9
IGNwY190dHktPmJ1Zl9yeC5maXJzdC0+bmV4dDsKIAkJCQlrZnJlZSgodW5zaWduZWQgY2hhciAq
KWJ1Zik7CkBAIC05MTAsMTMgKzkxMyw3IEBACiAJCUNQQ19UVFlfREJHKCIlczogdGhlIGludGVy
ZmFjZSBpcyBub3Qgb3BlbmVkXG4iLGNwY190dHktPm5hbWUpOwogCQlyZXR1cm47IAogCX0KLQot
CWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJiB0dHktPmxk
aXNjLndyaXRlX3dha2V1cCl7Ci0JCUNQQ19UVFlfREJHKCIlczpjYWxsIGxpbmUgZGlzYy4gd2Fr
ZXVwXG4iLGNwY190dHktPm5hbWUpOwotCQl0dHktPmxkaXNjLndyaXRlX3dha2V1cCAodHR5KTsg
Ci0JfQotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOyAKKwl0dHlf
d2FrZXVwKHR0eSk7CiB9CiAKIC8qCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9uZXQv
d2FuL3NkbGFfY2hkbGMuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJp
dmVycy9uZXQvd2FuL3NkbGFfY2hkbGMuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9uZXQvd2Fu
L3NkbGFfY2hkbGMuYwkyMDA0LTA2LTE1IDIyOjE5OjIzLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2No
ZGxjLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4yODE0MDcwMDAgLTA4MDAKQEAgLTM2MjgsMTEgKzM2
MjgsNyBAQAogCWlmICgodHR5PWNhcmQtPnR0eSk9PU5VTEwpCiAJCXJldHVybjsKIAkKLQlpZiAo
KHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5s
ZGlzYy53cml0ZV93YWtldXApewotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0J
fQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl0dHlfd2FrZXVw
KHR0eSk7CiAjaWYgZGVmaW5lZChTRVJJQUxfSEFWRV9QT0xMX1dBSVQpCiAJd2FrZV91cF9pbnRl
cnJ1cHRpYmxlKCZ0dHktPnBvbGxfd2FpdCk7CiAjZW5kaWYJCkBAIC0zODU3LDYgKzM4NTMsNyBA
QAogCWNoYXIgZnA9MDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBpOworCXN0cnVj
dCB0dHlfbGRpc2MgKmxkOwogCQogCWlmICghY2FyZC0+dHR5X29wZW4pewogCQlkYmdfcHJpbnRr
KEtFUk5fSU5GTyAiJXM6IFRUWSBub3Qgb3BlbiBkdXJpbmcgcmVjZWl2ZVxuIiwKQEAgLTM5NDQs
OCArMzk0MSwxMSBAQAogCQkJbGVuIC09IG9mZnNldDsKIAkJfQogCQlzZGxhX3BlZWsoJmNhcmQt
Pmh3LCBhZGRyLCBjYXJkLT50dHlfcngrb2Zmc2V0LCBsZW4pOwotCQlpZiAodHR5LT5sZGlzYy5y
ZWNlaXZlX2J1Zil7Ci0JCQl0dHktPmxkaXNjLnJlY2VpdmVfYnVmKHR0eSxjYXJkLT50dHlfcngs
JmZwLG9sZW4pOworCQlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwkJaWYgKGxkKSB7CisJCQlp
ZiAobGQtPnJlY2VpdmVfYnVmKQorCQkJCWxkLT5yZWNlaXZlX2J1Zih0dHksY2FyZC0+dHR5X3J4
LCZmcCxvbGVuKTsKKwkJCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJCX1lbHNlewogCQkJaWYgKG5l
dF9yYXRlbGltaXQoKSl7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAKQEAgLTQyNTIsMTQgKzQyNTIs
MTAgQEAKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT53cml0ZV93YWl0KTsKICNpZiBkZWZpbmVkKFNFUklBTF9IQVZFX1BPTExfV0FJVCkKIAl3
YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cG9sbF93YWl0KTsKICNlbmRpZgotCWlmICgodHR5
LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAgICB0dHktPmxkaXNj
LndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCisJdHR5
X3dha2V1cCh0dHkpOwogCXJldHVybjsKIH0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZl
cnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZp
eGVkL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMv
bmV0L3dpcmVsZXNzL3N0cmlwLmMJMjAwNC0wNi0xNSAyMjoxOTo0My4wMDAwMDAwMDAgLTA3MDAK
KysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL25ldC93aXJl
bGVzcy9zdHJpcC5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuMjg4NDA2MDAwIC0wODAwCkBAIC0yNjYx
LDggKzI2NjEsNiBAQAogCXR0eS0+ZGlzY19kYXRhID0gc3RyaXBfaW5mbzsKIAlpZiAodHR5LT5k
cml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwot
CWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIo
dHR5KTsKIAogCS8qCiAJICogUmVzdG9yZSBkZWZhdWx0IHNldHRpbmdzCmRpZmYgLU5hdXIgbGlu
dXgtMi42LjcvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKLS0tIGxpbnV4LTIu
Ni43L2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYwkyMDA0LTA2LTE1IDIyOjE5OjQyLjAwMDAw
MDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZl
cnMvczM5MC9jaGFyL2NvbjMyMTUuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjI5MzQwNTAwMCAtMDgw
MApAQCAtMzY2LDEwICszNjYsNyBAQAogCXR0eSA9IHJhdy0+dHR5OwogCWlmICh0dHkgIT0gTlVM
TCAmJgogCSAgICBSQVczMjE1X0JVRkZFUl9TSVpFIC0gcmF3LT5jb3VudCA+PSBSQVczMjE1X01J
Tl9TUEFDRSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7CisJICAgIAl0dHlfd2FrZXVwKHR0eSk7CiAJfQogfQogCkBAIC0xMDU1LDEwICsxMDUyLDcg
QEAKIAogCXJhdyA9IChzdHJ1Y3QgcmF3MzIxNV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJ
cmF3MzIxNV9mbHVzaF9idWZmZXIocmF3KTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0
ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpkaWZmIC1OYXVyIGxp
bnV4LTIuNi43L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMgbGludXgtMi42LjctMTE0MF9D
QU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMKLS0tIGxpbnV4
LTIuNi43L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMJMjAwNC0wNi0xNSAyMjoxODo1OC4w
MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9k
cml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuMjk2NDA1MDAw
IC0wODAwCkBAIC0yNzcsMTAgKzI3Nyw3IEBACiAJd2FrZV91cCgmc2NscF90dHlfd2FpdHEpOwog
CS8qIGNoZWNrIGlmIHRoZSB0dHkgbmVlZHMgYSB3YWtlIHVwIGNhbGwgKi8KIAlpZiAoc2NscF90
dHkgIT0gTlVMTCkgewotCQlpZiAoKHNjbHBfdHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKSAmJgotCQkgICAgc2NscF90dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCShz
Y2xwX3R0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKShzY2xwX3R0eSk7Ci0JCXdha2VfdXBfaW50ZXJy
dXB0aWJsZSgmc2NscF90dHktPndyaXRlX3dhaXQpOworCQl0dHlfd2FrZXVwKHR0eSk7CiAJfQog
fQogCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5j
IGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3MzOTAvY2hhci9z
Y2xwX3Z0MjIwLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAu
YwkyMDA0LTA2LTE1IDIyOjE5OjA5LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0
MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwkyMDA0
LTExLTIzIDEzOjIzOjIzLjI5OTQwNDAwMCAtMDgwMApAQCAtMTM5LDEwICsxMzksNyBAQAogCXdh
a2VfdXAoJnNjbHBfdnQyMjBfd2FpdHEpOwogCS8qIENoZWNrIGlmIHRoZSB0dHkgbmVlZHMgYSB3
YWtlIHVwIGNhbGwgKi8KIAlpZiAoc2NscF92dDIyMF90dHkgIT0gTlVMTCkgewotCQlpZiAoKHNj
bHBfdnQyMjBfdHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkg
ICAgKHNjbHBfdnQyMjBfdHR5LT5sZGlzYy53cml0ZV93YWtldXAgIT0gTlVMTCkpCi0JCQkoc2Ns
cF92dDIyMF90dHktPmxkaXNjLndyaXRlX3dha2V1cCkoc2NscF92dDIyMF90dHkpOwotCQl3YWtl
X3VwX2ludGVycnVwdGlibGUoJnNjbHBfdnQyMjBfdHR5LT53cml0ZV93YWl0KTsKKwkJdHR5X3dh
a2V1cCh0dHkpOwogCX0KIH0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvczM5MC9u
ZXQvY3RjdHR5LmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMv
czM5MC9uZXQvY3RjdHR5LmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5
LmMJMjAwNC0wNi0xNSAyMjoxOTozNS4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTEx
NDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3MzOTAvbmV0L2N0Y3R0eS5jCTIwMDQtMTEt
MjMgMTM6MjM6MjMuMzAzNDA0MDAwIC0wODAwCkBAIC0zMDAsMTAgKzMwMCw3IEBACiAKIAkJaW5m
by0+ZmxhZ3MgJj0gfkNUQ19BU1lOQ19UWF9MSU5FU1RBVDsKIAkJaWYgKHR0eSkgewotCQkJaWYg
KHdha2UgJiYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJ
CSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkodHR5LT5sZGlzYy53cml0ZV93YWtl
dXApKHR0eSk7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJ
CQl0dHlfd2FrZXVwKHR0eSk7CiAJCX0KIAl9CiAJcmV0dXJuIChza2JfcXVldWVfZW1wdHkoJmlu
Zm8tPnR4X3F1ZXVlKSA/IDAgOiAxKTsKQEAgLTU3MSw5ICs1NjgsNyBAQAogCWluZm8tPmxzciB8
PSBVQVJUX0xTUl9URU1UOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywg
ZmxhZ3MpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAo
KHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5s
ZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgKHR0eSk7CisJ
dHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAzNCw4ICsxMDI5LDcgQEAK
IAljdGNfdHR5X3NodXRkb3duKGluZm8pOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1
c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19m
bHVzaCh0dHkpOwogCWluZm8tPnR0eSA9IDA7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpZiAoaW5m
by0+YmxvY2tlZF9vcGVuKSB7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9zYnVzL2No
YXIvYXVyb3JhLmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMv
c2J1cy9jaGFyL2F1cm9yYS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL3NidXMvY2hhci9hdXJv
cmEuYwkyMDA0LTA2LTE1IDIyOjE4OjU5LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42Ljct
MTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvc2J1cy9jaGFyL2F1cm9yYS5jCTIwMDQt
MTEtMjMgMTM6MjM6MjMuMzEwNDAzMDAwIC0wODAwCkBAIC0xNTMxLDggKzE1MzEsNyBAQAogCWF1
cm9yYV9zaHV0ZG93bl9wb3J0KGJwLCBwb3J0KTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1
ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNj
LmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRp
c2NfZmx1c2godHR5KTsKIAl0dHktPmNsb3NpbmcgPSAwOwogCXBvcnQtPmV2ZW50ID0gMDsKIAlw
b3J0LT50dHkgPSAwOwpAQCAtMTc0MywxMCArMTc0Miw3IEBACiAJcG9ydC0+eG1pdF9jbnQgPSBw
b3J0LT54bWl0X2hlYWQgPSBwb3J0LT54bWl0X3RhaWwgPSAwOwogCXJlc3RvcmVfZmxhZ3MoZmxh
Z3MpOwogCQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAo
KHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5s
ZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0
dHlfd2FrZXVwKHR0eSk7CiAjaWZkZWYgQVVST1JBX0RFQlVHCiAJcHJpbnRrKCJhdXJvcmFfZmx1
c2hfYnVmZmVyOiBlbmRcbiIpOwogI2VuZGlmCkBAIC0yMjIzLDEwICsyMjE5LDcgQEAKIAkJcmV0
dXJuOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZw
b3J0LT5ldmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dB
S0VVUCkpICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNj
LndyaXRlX3dha2V1cCkodHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRl
X3dhaXQpOworCQl0dHlfd2FrZXVwKHR0eSk7CiAJfQogI2lmZGVmIEFVUk9SQV9ERUJVRwogCXBy
aW50aygiZG9fc29mdGludDogZW5kXG4iKTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJz
L3NlcmlhbC82ODMyOHNlcmlhbC5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhl
ZC9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL3Nl
cmlhbC82ODMyOHNlcmlhbC5jCTIwMDQtMDYtMTUgMjI6MjA6MDQuMDAwMDAwMDAwIC0wNzAwCisr
KyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9zZXJpYWwvNjgz
MjhzZXJpYWwuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjMxNDQwMjAwMCAtMDgwMApAQCAtNDM1LDEw
ICs0MzUsNyBAQAogCQlyZXR1cm47CiAjaWYgMAogCWlmIChjbGVhcl9iaXQoUlNfRVZFTlRfV1JJ
VEVfV0FLRVVQLCAmaW5mby0+ZXZlbnQpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRU
WV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0J
CQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJs
ZSgmdHR5LT53cml0ZV93YWl0KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCX0KICNlbmRpZiAgIAog
fQpAQCAtODU4LDEwICs4NTUsNyBAQAogCWNsaSgpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+
eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAlzdGkoKTsKLQl3YWtlX3VwX2ludGVy
cnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZ
X0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQko
dHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAv
KgpAQCAtMTE4NSwxMSArMTE3OSwxMyBAQAogCXNodXRkb3duKGluZm8pOwogCWlmICh0dHktPmRy
aXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0J
aWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0
dHkpOworCQkKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHktPmNsb3NpbmcgPSAwOwogCWlu
Zm8tPmV2ZW50ID0gMDsKIAlpbmZvLT50dHkgPSAwOworI3dhcm5pbmcgIlRoaXMgaXMgbm90IGFu
ZCBoYXMgbmV2ZXIgYmVlbiB2YWxpZCBzbyBmaXggaXQiCQorI2lmIDAKIAlpZiAodHR5LT5sZGlz
Yy5udW0gIT0gbGRpc2NzW05fVFRZXS5udW0pIHsKIAkJaWYgKHR0eS0+bGRpc2MuY2xvc2UpCiAJ
CQkodHR5LT5sZGlzYy5jbG9zZSkodHR5KTsKQEAgLTExOTgsNiArMTE5NCw3IEBACiAJCWlmICh0
dHktPmxkaXNjLm9wZW4pCiAJCQkodHR5LT5sZGlzYy5vcGVuKSh0dHkpOwogCX0KKyNlbmRpZgkK
IAlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7CiAJCWlmIChpbmZvLT5jbG9zZV9kZWxheSkgewog
CQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CmRpZmYgLU5hdXIgbGludXgt
Mi42LjcvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0y
MDA0LTA4MTQuZml4ZWQvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwotLS0gbGludXgtMi42
LjcvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwkyMDA0LTA2LTE1IDIyOjIwOjA0LjAwMDAw
MDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZl
cnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4zNDEzOTgwMDAgLTA4
MDAKQEAgLTcwMCwxMiArNzAwLDggQEAKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCi0JaWYgKHRl
c3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpIHsK
LQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCX0KKwlp
ZiAodGVzdF9hbmRfY2xlYXJfYml0KFJTX0VWRU5UX1dSSVRFX1dBS0VVUCwgJmluZm8tPmV2ZW50
KSkKKwkJdHR5X3dha2V1cCh0dHkpOwogfQogCiAKQEAgLTExNTIsMTAgKzExNDgsNyBAQAogCS8q
IFRoZXJlIGlzIG5vdGhpbmcgdG8gImZsdXNoIiwgd2hhdGV2ZXIgd2UgZ2F2ZSB0aGUgQ1BNCiAJ
ICogaXMgb24gaXRzIHdheSBvdXQuCiAJICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHkt
PndyaXRlX3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtF
VVApKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOworCXR0eV93YWtldXAodHR5KTsKIAlpbmZvLT5mbGFncyAmPSB+VFhf
V0FLRVVQOwogfQogCkBAIC0xNzE2LDggKzE3MDksNyBAQAogCXNodXRkb3duKGluZm8pOwogCWlm
ICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVy
KHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwkJCiAJdHR5LT5jbG9zaW5nID0g
MDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gMDsKZGlmZiAtTmF1ciBsaW51eC0y
LjYuNy9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0
LTA4MTQuZml4ZWQvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKLS0tIGxpbnV4LTIuNi43L2Ry
aXZlcnMvc2VyaWFsL21jZnNlcmlhbC5jCTIwMDQtMDYtMTUgMjI6MTk6MjIuMDAwMDAwMDAwIC0w
NzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9zZXJp
YWwvbWNmc2VyaWFsLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4zNDgzOTcwMDAgLTA4MDAKQEAgLTQy
NCwxMSArNDI0LDcgQEAKIAl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsK
LQotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0
dHkpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl0dHlfd2Fr
ZXVwKHR0eSk7CiB9CiAKIApAQCAtODM1LDEwICs4MzEsNyBAQAogCWluZm8tPnhtaXRfY250ID0g
aW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAlsb2NhbF9pcnFfcmVzdG9y
ZShmbGFncyk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0J
aWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0
eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7
CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTIzMiwxMSArMTIyNSwxMiBAQAogCXNo
dXRkb3duKGluZm8pOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRy
aXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQot
CQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwor
CQogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPnR0eSA9IDA7
CisjaWYgMAkKIAlpZiAodHR5LT5sZGlzYy5udW0gIT0gbGRpc2NzW05fVFRZXS5udW0pIHsKIAkJ
aWYgKHR0eS0+bGRpc2MuY2xvc2UpCiAJCQkodHR5LT5sZGlzYy5jbG9zZSkodHR5KTsKQEAgLTEy
NDUsNiArMTIzOSw3IEBACiAJCWlmICh0dHktPmxkaXNjLm9wZW4pCiAJCQkodHR5LT5sZGlzYy5v
cGVuKSh0dHkpOwogCX0KKyNlbmRpZgkKIAlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7CiAJCWlm
IChpbmZvLT5jbG9zZV9kZWxheSkgewogCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQ
VElCTEU7CmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUu
YyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy9zZXJpYWwvc2Vy
aWFsX2NvcmUuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwky
MDA0LTA2LTE1IDIyOjE5OjAxLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjctMTE0MF9D
QU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMJMjAwNC0xMS0y
MyAxMzoyMzoyMy4zNTUzOTYwMDAgLTA4MDAKQEAgLTEwNywxNSArMTA3LDcgQEAKIHN0YXRpYyB2
b2lkIHVhcnRfdGFza2xldF9hY3Rpb24odW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB1
YXJ0X3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgdWFydF9zdGF0ZSAqKWRhdGE7Ci0Jc3RydWN0IHR0
eV9zdHJ1Y3QgKnR0eTsKLQotCXR0eSA9IHN0YXRlLT5pbmZvLT50dHk7Ci0JaWYgKHR0eSkgewot
CQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJICAg
IHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJdHR5LT5sZGlzYy53cml0ZV93YWtldXAodHR5
KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCX0KKwl0dHlf
d2FrZXVwKHN0YXRlLT5pbmZvLT50dHkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTU4
MSwxMCArNTczLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwog
CXVhcnRfY2lyY19jbGVhcigmc3RhdGUtPmluZm8tPnhtaXQpOwogCXNwaW5fdW5sb2NrX2lycXJl
c3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0
ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTIxNiw3ICsx
MjA1LDcgQEAKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRh
OwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7Ci0KKwkKIAlCVUdfT04oIWtlcm5lbF9sb2NrZWQo
KSk7CiAKIAlpZiAoIXN0YXRlIHx8ICFzdGF0ZS0+cG9ydCkKQEAgLTEyMzksMTIgKzEyMjgsMTIg
QEAKIAkJICogb25lLCB3ZSd2ZSBnb3QgcmVhbCBwcm9ibGVtcywgc2luY2UgaXQgbWVhbnMgdGhl
CiAJCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgogCQkgKi8KLQkJcHJpbnRrKCJ1
YXJ0X2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQ7IHR0eS0+Y291bnQgaXMgMSwgIgorCQlw
cmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgdHR5LT5j
b3VudCBpcyAxLCAiCiAJCSAgICAgICAic3RhdGUtPmNvdW50IGlzICVkXG4iLCBzdGF0ZS0+Y291
bnQpOwogCQlzdGF0ZS0+Y291bnQgPSAxOwogCX0KIAlpZiAoLS1zdGF0ZS0+Y291bnQgPCAwKSB7
Ci0JCXByaW50aygicnNfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudCBmb3IgJXM6ICVkXG4i
LAorCQlwcmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudCBm
b3IgJXM6ICVkXG4iLAogCQkgICAgICAgdHR5LT5uYW1lLCBzdGF0ZS0+Y291bnQpOwogCQlzdGF0
ZS0+Y291bnQgPSAwOwogCX0KQEAgLTEyODAsOCArMTI2OSw5IEBACiAKIAl1YXJ0X3NodXRkb3du
KHN0YXRlKTsKIAl1YXJ0X2ZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKworCXR0eV9sZGlzY19m
bHVzaCh0dHkpOwkKKwkKIAl0dHktPmNsb3NpbmcgPSAwOwogCXN0YXRlLT5pbmZvLT50dHkgPSBO
VUxMOwogCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVycy90Yy96cy5jIGxpbnV4LTIuNi43
LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3RjL3pzLmMKLS0tIGxpbnV4LTIuNi43
L2RyaXZlcnMvdGMvenMuYwkyMDA0LTA2LTE1IDIyOjE5OjUyLjAwMDAwMDAwMCAtMDcwMAorKysg
bGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvdGMvenMuYwkyMDA0
LTExLTIzIDEzOjIzOjIzLjM2MjM5NTAwMCAtMDgwMApAQCAtNjgzLDEwICs2ODMsNyBAQAogCQly
ZXR1cm47CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJTX0VWRU5UX1dSSVRFX1dBS0VVUCwg
JmluZm8tPmV2ZW50KSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVf
V0FLRVVQKSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3Jp
dGVfd2FpdCk7CisJCXR0eV93YWtldXAodHR5KTsKIAl9CiB9CiAKQEAgLTEwMTAsMTAgKzEwMDcs
NyBAQAogCWNsaSgpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+
eG1pdF90YWlsID0gMDsKIAlzdGkoKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3Jp
dGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkp
ICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93
YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTQwNyw4ICsxNDAx
LDcgQEAKIAlzaHV0ZG93bihpbmZvKTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikK
IAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1
c2godHR5KTsKIAl0dHktPmNsb3NpbmcgPSAwOwogCWluZm8tPmV2ZW50ID0gMDsKIAlpbmZvLT50
dHkgPSAwOwpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvdXNiL2NsYXNzL2JsdWV0dHku
YyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2IvY2xhc3Mv
Ymx1ZXR0eS5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMJMjAw
NC0wNi0xNSAyMjoxOTo0NC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMJMjAwNC0xMS0yMyAx
MzoyMzoyMy4zNjYzOTQwMDAgLTA4MDAKQEAgLTk5MiwxNyArOTkyLDEwIEBACiAKIAlkYmcoIiVz
IiwgX19GVU5DVElPTl9fKTsKIAotCWlmICghYmx1ZXRvb3RoKSB7CisJaWYgKCFibHVldG9vdGgp
CiAJCXJldHVybjsKLQl9Ci0KLQl0dHkgPSBibHVldG9vdGgtPnR0eTsKLQlpZiAoKHR0eS0+Zmxh
Z3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtl
dXApIHsKLQkJZGJnKCIlcyAtIHdyaXRlIHdha2V1cCBjYWxsLiIsIF9fRlVOQ1RJT05fXyk7Ci0J
CSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQl9CiAKLQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJdHR5X3dha2V1cCgmYmx1ZXRvb3RoLT50dHkpOwog
fQogCiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMg
bGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvdXNiL2NsYXNzL2Nk
Yy1hY20uYwotLS0gbGludXgtMi42LjcvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCTIwMDQt
MDYtMTUgMjI6MTk6MzcuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0y
MDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCTIwMDQtMTEtMjMgMTM6
MjM6MjMuMzY5Mzk0MDAwIC0wODAwCkBAIC0zMjEsMTUgKzMyMSwxMSBAQAogc3RhdGljIHZvaWQg
YWNtX3NvZnRpbnQodm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSBwcml2YXRl
OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBhY20tPnR0eTsKIAogCWlmICghQUNNX1JFQURZ
KGFjbSkpCiAJCXJldHVybjsKIAotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKSAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dh
aXQpOworCXR0eV93YWtldXAoYWNtLT50dHkpOwogfQogCiAvKgpkaWZmIC1OYXVyIGxpbnV4LTIu
Ni43L2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBsaW51eC0yLjYuNy0xMTQw
X0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5j
Ci0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMJMjAw
NC0wNi0xNSAyMjoxOToyMi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMJMjAw
NC0xMS0yMyAxMzoyMzoyMy4zNzYzOTIwMDAgLTA4MDAKQEAgLTYzMCwxNCArNjMwLDcgQEAKIAl3
YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CiAKIAkvKiB3YWtlIHVw
IGxpbmUgZGlzY2lwbGluZSAqLwotCWlmKCAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKQotCSYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwICkKLQkJKHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSh0dHkpOwotCi0JLyogd2FrZSB1cCBvdGhlciB0dHkgcHJvY2Vzc2VzICov
Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmdHR5LT53cml0ZV93YWl0ICk7Ci0JLyogRm9yIDIu
Mi4xNiBiYWNrcG9ydCAtLSB3YWtlX3VwX2ludGVycnVwdGlibGUoICZ0dHktPnBvbGxfd2FpdCAp
OyAqLwotCisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAKQEAgLTE1NzUsOCArMTU2OCw3IEBACiAJ
LyogZmx1c2ggZHJpdmVyIGFuZCBsaW5lIGRpc2NpcGxpbmUgYnVmZmVycyAqLwogCWlmKCB0dHkt
PmRyaXZlci0+Zmx1c2hfYnVmZmVyICkKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlciggdHR5
ICk7Ci0JaWYoIHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyICkKLQkJdHR5LT5sZGlzYy5mbHVzaF9i
dWZmZXIoIHR0eSApOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCiAJaWYgKHBvcnQtPnNlcmlh
bC0+ZGV2KSB7CiAJCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGlkbGUgKi8KZGlmZiAtTmF1ciBsaW51
eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBsaW51eC0yLjYuNy0xMTQwX0NBTi0y
MDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKLS0tIGxpbnV4LTIuNi43
L2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCTIwMDQtMDYtMTUgMjI6MjA6MjAuMDAwMDAwMDAw
IC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy91
c2Ivc2VyaWFsL2VtcGVnLmMJMjAwNC0xMS0yMyAxMzoyMzoyMy4zNzgzOTIwMDAgLTA4MDAKQEAg
LTUyMSw3ICs1MjEsOSBAQAogCSAqLwogCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOwogCi0J
LyogTm90aWZ5IHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLiAq
LworCS8qIE5vdGlmeSB0aGUgdHR5IGRyaXZlciB0aGF0IHRoZSB0ZXJtaW9zIGhhdmUgY2hhbmdl
ZC4KKwkgICBGSVhNRTogV2h5IC0gdGhlIGxkaXNjIHdpbGwgZG8gdGhpcyBhbnl3YXkgYW5kIE5V
TEwgaXMgbm90CisJICAgYSB2YWxpZCBwcmV2aW91cyBzdGF0ZSAqLwogCXBvcnQtPnR0eS0+bGRp
c2Muc2V0X3Rlcm1pb3MocG9ydC0+dHR5LCBOVUxMKTsKIAogCXJldHVybjsKZGlmZiAtTmF1ciBs
aW51eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBsaW51eC0yLjYuNy0x
MTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMK
LS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCTIwMDQtMDYt
MTUgMjI6MTg6NTcuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0
LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMJMjAwNC0xMS0yMyAx
MzoyMzoyMy4zODczOTEwMDAgLTA4MDAKQEAgLTkxNCwxMiArOTE0LDcgQEAKIAogCWlmICh0dHkg
JiYgZWRnZV9wb3J0LT5vcGVuKSB7CiAJCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYg
aXQgaGFzIGEgc3BlY2lhbCB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KLQkJaWYgKCh0dHktPmZs
YWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSB7Ci0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCX0KLQotCQkvKiB0
ZWxsIHRoZSB0dHkgZHJpdmVyIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkICovCi0JCXdha2Vf
dXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwkJdHR5X3dha2V1cCh0dHkpOwog
CX0KIAogCS8vIFJlbGVhc2UgdGhlIFdyaXRlIFVSQgpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2Ry
aXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5m
aXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy91
c2Ivc2VyaWFsL2lvX3RpLmMJMjAwNC0wNi0xNSAyMjoyMDowNC4wMDAwMDAwMDAgLTA3MDAKKysr
IGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwv
aW9fdGkuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjM5NDM5MDAwMCAtMDgwMApAQCAtMTgxMCwxMiAr
MTgxMCw3IEBACiAJdHR5ID0gcG9ydC0+dHR5OwogCWlmICh0dHkpIHsKIAkJLyogbGV0IHRoZSB0
dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsIHdyaXRlX3dha2V1cCBmdW5jdGlv
biAqLwotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYg
dHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKLQkJfQotCi0JCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFz
IGNoYW5nZWQgKi8KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwor
CQl0dHlfd2FrZXVwKHR0eSk7CiAJfQogfQogCmRpZmYgLU5hdXIgbGludXgtMi42LjcvZHJpdmVy
cy91c2Ivc2VyaWFsL2lyLXVzYi5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhl
ZC9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKLS0tIGxpbnV4LTIuNi43L2RyaXZlcnMvdXNi
L3NlcmlhbC9pci11c2IuYwkyMDA0LTA2LTE1IDIyOjE5OjIyLjAwMDAwMDAwMCAtMDcwMAorKysg
bGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvdXNiL3NlcmlhbC9p
ci11c2IuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjM5NzM4OTAwMCAtMDgwMApAQCAtNDUyLDYgKzQ1
MiwxMCBAQAogCQkJICovCiAJCQl0dHkgPSBwb3J0LT50dHk7CiAKKwkJCS8qCisJCQkgKglGSVhN
RTogbXVzdCBub3QgZG8gdGhpcyBpbiBJUlEgY29udGV4dCwKKwkJCSAqCW11c3QgaG9ub3VyIFRU
WV9ET05UX0ZMSVAKKwkJCSAqLwogCQkJdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZigKIAkJCQl0dHks
CiAJCQkJZGF0YSsxLApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvdXNiL3NlcmlhbC9r
ZXlzcGFuX3BkYS5jIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJz
L3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy91c2Ivc2Vy
aWFsL2tleXNwYW5fcGRhLmMJMjAwNC0wNi0xNSAyMjoxOTozNy4wMDAwMDAwMDAgLTA3MDAKKysr
IGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwv
a2V5c3Bhbl9wZGEuYwkyMDA0LTExLTIzIDEzOjIzOjIzLjQwMTM4OTAwMCAtMDgwMApAQCAtMTkx
LDEzICsxOTEsNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnBvcnQtPndyaXRlX3dhaXQg
KTsKIAogCS8qIHdha2UgdXAgbGluZSBkaXNjaXBsaW5lICovCi0JaWYoICh0dHktPmZsYWdzICYg
KDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpCi0JJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXAg
KQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0KLQkvKiB3YWtlIHVwIG90aGVy
IHR0eSBwcm9jZXNzZXMgKi8KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZ0dHktPndyaXRlX3dh
aXQgKTsKLQkvKiBGb3IgMi4yLjE2IGJhY2twb3J0IC0tIHdha2VfdXBfaW50ZXJydXB0aWJsZSgg
JnR0eS0+cG9sbF93YWl0ICk7ICovCisJdHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0aWMgdm9p
ZCBrZXlzcGFuX3BkYV9yZXF1ZXN0X3VudGhyb3R0bGUoIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJp
YWwgKQpkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5j
IGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwv
bWN0X3UyMzIuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMJ
MjAwNC0wNi0xNSAyMjoxOTo0Mi4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBf
Q0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwkyMDA0LTEx
LTIzIDEzOjIzOjIzLjQwNDM4ODAwMCAtMDgwMApAQCAtNTg1LDExICs1ODUsNyBAQAogCiAJaWYg
KHdyaXRlX2Jsb2NraW5nKSB7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d3JpdGVf
d2FpdCk7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAm
JgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93
YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
LQkJCisJCXR0eV93YWtldXAodHR5KTsKIAl9IGVsc2UgewogCQkvKiBmcm9tIGdlbmVyaWNfd3Jp
dGVfYnVsa19jYWxsYmFjayAqLwogCQlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKZGlmZiAt
TmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGxpbnV4LTIu
Ni43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlh
bC5jCi0tLSBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCTIwMDQt
MDYtMTUgMjI6MTk6MTcuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuNy0xMTQwX0NBTi0y
MDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwkyMDA0LTExLTIz
IDEzOjIzOjIzLjQwOTM4NzAwMCAtMDgwMApAQCAtNzc3LDEyICs3NzcsNyBAQAogCWlmICghdHR5
KQogCQlyZXR1cm47CiAKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FL
RVVQKSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJZGJnKCIlcyAtIHdyaXRlIHdh
a2V1cCBjYWxsLiIsIF9fRlVOQ1RJT05fXyk7Ci0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKLQl9Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJ
dHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3NlcmlhbChzdHJ1Y3Qg
a3JlZiAqa3JlZikKZGlmZiAtTmF1ciBsaW51eC0yLjYuNy9kcml2ZXJzL3VzYi9zZXJpYWwvd2hp
dGVoZWF0LmMgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2RyaXZlcnMvdXNi
L3NlcmlhbC93aGl0ZWhlYXQuYwotLS0gbGludXgtMi42LjcvZHJpdmVycy91c2Ivc2VyaWFsL3do
aXRlaGVhdC5jCTIwMDQtMDYtMTUgMjI6MTk6MTIuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y
LjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVh
dC5jCTIwMDQtMTEtMjMgMTM6MjM6MjMuNDEzMzg3MDAwIC0wODAwCkBAIC02NzMsOCArNjczLDcg
QEAKIAogCWlmIChwb3J0LT50dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQlwb3J0LT50dHkt
PmRyaXZlci0+Zmx1c2hfYnVmZmVyKHBvcnQtPnR0eSk7Ci0JaWYgKHBvcnQtPnR0eS0+bGRpc2Mu
Zmx1c2hfYnVmZmVyKQotCQlwb3J0LT50dHktPmxkaXNjLmZsdXNoX2J1ZmZlcihwb3J0LT50dHkp
OworCXR0eV9sZGlzY19mbHVzaChwb3J0LT50dHkpOwogCiAJZmlybV9yZXBvcnRfdHhfZG9uZShw
b3J0KTsKIApkaWZmIC1OYXVyIGxpbnV4LTIuNi43L2ZzL3Byb2MvcHJvY190dHkuYyBsaW51eC0y
LjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvZnMvcHJvYy9wcm9jX3R0eS5jCi0tLSBsaW51
eC0yLjYuNy9mcy9wcm9jL3Byb2NfdHR5LmMJMjAwNC0wNi0xNSAyMjoxOToxMy4wMDAwMDAwMDAg
LTA3MDAKKysrIGxpbnV4LTIuNi43LTExNDBfQ0FOLTIwMDQtMDgxNC5maXhlZC9mcy9wcm9jL3By
b2NfdHR5LmMJMjAwNC0xMS0yMyAxMzoyMzoyMy40MTUzODcwMDAgLTA4MDAKQEAgLTE1LDkgKzE1
LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMu
aD4KIAotZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2NzW107Ci0KLQogc3RhdGljIGludCB0
dHlfbGRpc2NzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwK
IAkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIApAQCAtMTU5LDEyICsxNTYs
MTUgQEAKIAlpbnQJaTsKIAlpbnQJbGVuID0gMDsKIAlvZmZfdAliZWdpbiA9IDA7Ci0KKwlzdHJ1
Y3QgdHR5X2xkaXNjICpsZDsKKwkKIAlmb3IgKGk9MDsgaSA8IE5SX0xESVNDUzsgaSsrKSB7Ci0J
CWlmICghKGxkaXNjc1tpXS5mbGFncyAmIExESVNDX0ZMQUdfREVGSU5FRCkpCisJCWxkID0gdHR5
X2xkaXNjX2dldChpKTsKKwkJaWYgKGxkID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJbGVuICs9
IHNwcmludGYocGFnZStsZW4sICIlLTEwcyAlMmRcbiIsCi0JCQkgICAgICAgbGRpc2NzW2ldLm5h
bWUgPyBsZGlzY3NbaV0ubmFtZSA6ICI/Pz8iLCBpKTsKKwkJCSAgICAgICBsZC0+bmFtZSA/IGxk
LT5uYW1lIDogIj8/PyIsIGkpOworCQl0dHlfbGRpc2NfcHV0KGkpOwogCQlpZiAobGVuK2JlZ2lu
ID4gb2ZmK2NvdW50KQogCQkJYnJlYWs7CiAJCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKZGlmZiAt
TmF1ciBsaW51eC0yLjYuNy9pbmNsdWRlL2xpbnV4L3R0eS5oIGxpbnV4LTIuNi43LTExNDBfQ0FO
LTIwMDQtMDgxNC5maXhlZC9pbmNsdWRlL2xpbnV4L3R0eS5oCi0tLSBsaW51eC0yLjYuNy9pbmNs
dWRlL2xpbnV4L3R0eS5oCTIwMDQtMDYtMTUgMjI6MTk6MjMuMDAwMDAwMDAwIC0wNzAwCisrKyBs
aW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0LTA4MTQuZml4ZWQvaW5jbHVkZS9saW51eC90dHkuaAky
MDA0LTExLTIzIDEzOjIzOjIzLjAwMDAwMDAwMCAtMDgwMApAQCAtMzA2LDI2ICszMDYsMjcgQEAK
ICAqIHR0eS0+d3JpdGUuICBUaHVzLCB5b3UgbXVzdCB1c2UgdGhlIGlubGluZSBmdW5jdGlvbnMg
c2V0X2JpdCgpIGFuZAogICogY2xlYXJfYml0KCkgdG8gbWFrZSB0aGluZ3MgYXRvbWljLgogICov
Ci0jZGVmaW5lIFRUWV9USFJPVFRMRUQgMAotI2RlZmluZSBUVFlfSU9fRVJST1IgMQotI2RlZmlu
ZSBUVFlfT1RIRVJfQ0xPU0VEIDIKLSNkZWZpbmUgVFRZX0VYQ0xVU0lWRSAzCi0jZGVmaW5lIFRU
WV9ERUJVRyA0Ci0jZGVmaW5lIFRUWV9ET19XUklURV9XQUtFVVAgNQotI2RlZmluZSBUVFlfUFVT
SCA2Ci0jZGVmaW5lIFRUWV9DTE9TSU5HIDcKLSNkZWZpbmUgVFRZX0RPTlRfRkxJUCA4Ci0jZGVm
aW5lIFRUWV9IV19DT09LX09VVCAxNAotI2RlZmluZSBUVFlfSFdfQ09PS19JTiAxNQotI2RlZmlu
ZSBUVFlfUFRZX0xPQ0sgMTYKLSNkZWZpbmUgVFRZX05PX1dSSVRFX1NQTElUIDE3CisjZGVmaW5l
IFRUWV9USFJPVFRMRUQgCQkwCS8qIENhbGwgdW50aHJvdHRsZSgpIGF0IHRocmVzaG9sZCBtaW4g
Ki8KKyNkZWZpbmUgVFRZX0lPX0VSUk9SIAkJMQkvKiBDYW5zZSBhbiBJL08gZXJyb3IgKG1heSBi
ZSBubyBsZGlzYyB0b28pICovCisjZGVmaW5lIFRUWV9PVEhFUl9DTE9TRUQgCTIJLyogT3RoZXIg
c2lkZSAoaWYgYW55KSBoYXMgY2xvc2VkICovCisjZGVmaW5lIFRUWV9FWENMVVNJVkUgCQkzCS8q
IEV4Y2x1c2l2ZSBvcGVuIG1vZGUgKi8KKyNkZWZpbmUgVFRZX0RFQlVHIAkJNAkvKiBEZWJ1Z2dp
bmcgKi8KKyNkZWZpbmUgVFRZX0RPX1dSSVRFX1dBS0VVUCAJNQkvKiBDYWxsIHdyaXRlX3dha2V1
cCBhZnRlciBxdWV1aW5nIG5ldyAqLworI2RlZmluZSBUVFlfUFVTSCAJCTYJLyogbl90dHkgcHJp
dmF0ZSAqLworI2RlZmluZSBUVFlfQ0xPU0lORyAJCTcJLyogLT5jbG9zZSgpIGluIHByb2dyZXNz
ICovCisjZGVmaW5lIFRUWV9ET05UX0ZMSVAgCQk4CS8qIERlZmVyIGJ1ZmZlciBmbGlwICovCisj
ZGVmaW5lIFRUWV9MRElTQyAJCTkJLyogTGluZSBkaXNjaXBsaW5lIGF0dGFjaGVkICovCisjZGVm
aW5lIFRUWV9IV19DT09LX09VVCAJMTQJLyogSGFyZHdhcmUgY2FuIGRvIG91dHB1dCBjb29raW5n
ICovCisjZGVmaW5lIFRUWV9IV19DT09LX0lOIAkJMTUJLyogSGFyZHdhcmUgY2FuIGRvIGlucHV0
IGNvb2tpbmcgKi8KKyNkZWZpbmUgVFRZX1BUWV9MT0NLIAkJMTYJLyogcHR5IHByaXZhdGUgKi8K
KyNkZWZpbmUgVFRZX05PX1dSSVRFX1NQTElUIAkxNwkvKiBQcmVzZXJ2ZSB3cml0ZSBib3VuZGFy
aWVzIHRvIGRyaXZlciAqLworI2RlZmluZSBUVFlfSFVQUEVEIAkJMTgJLyogUG9zdCBkcml2ZXIt
Pmhhbmd1cCgpICovCiAKICNkZWZpbmUgVFRZX1dSSVRFX0ZMVVNIKHR0eSkgdHR5X3dyaXRlX2Zs
dXNoKCh0dHkpKQogCiBleHRlcm4gdm9pZCB0dHlfd3JpdGVfZmx1c2goc3RydWN0IHR0eV9zdHJ1
Y3QgKik7CiAKIGV4dGVybiBzdHJ1Y3QgdGVybWlvcyB0dHlfc3RkX3Rlcm1pb3M7Ci1leHRlcm4g
c3RydWN0IHR0eV9sZGlzYyBsZGlzY3NbXTsKIGV4dGVybiBpbnQgZmdfY29uc29sZSwgbGFzdF9j
b25zb2xlLCB3YW50X2NvbnNvbGU7CiAKIGV4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKQEAgLTM2
NSw2ICszNjYsMTYgQEAKIHN0cnVjdCBzZW1hcGhvcmU7CiBleHRlcm4gc3RydWN0IHNlbWFwaG9y
ZSB0dHlfc2VtOwogCitleHRlcm4gc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZihzdHJ1
Y3QgdHR5X3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHR0eV9sZGlzY19kZXJlZihzdHJ1Y3QgdHR5
X2xkaXNjICopOworZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChz
dHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKworZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlz
Y19nZXQoaW50KTsKK2V4dGVybiB2b2lkIHR0eV9sZGlzY19wdXQoaW50KTsKKworZXh0ZXJuIHZv
aWQgdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV9s
ZGlzY19mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwogLyogbl90dHkuYyAqLwogZXh0
ZXJuIHN0cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZOwogCmRpZmYgLU5hdXIgbGludXgt
Mi42LjcvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBsaW51eC0yLjYuNy0xMTQwX0NBTi0yMDA0
LTA4MTQuZml4ZWQvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAotLS0gbGludXgtMi42LjcvaW5j
bHVkZS9saW51eC90dHlfbGRpc2MuaAkyMDA0LTA2LTE1IDIyOjIwOjI2LjAwMDAwMDAwMCAtMDcw
MAorKysgbGludXgtMi42LjctMTE0MF9DQU4tMjAwNC0wODE0LmZpeGVkL2luY2x1ZGUvbGludXgv
dHR5X2xkaXNjLmgJMjAwNC0xMS0yMyAxMzoyMzoyMy4wMDAwMDAwMDAgLTA4MDAKQEAgLTk1LDYg
Kzk1LDEzIEBACiAgKiAJdGhhdCBsaW5lIGRpc2NwbGluZSBzaG91bGQgdHJ5IHRvIHNlbmQgbW9y
ZSBjaGFyYWN0ZXJzIHRvIHRoZQogICogCWxvdy1sZXZlbCBkcml2ZXIgZm9yIHRyYW5zbWlzc2lv
bi4gIElmIHRoZSBsaW5lIGRpc2NwbGluZSBkb2VzCiAgKiAJbm90IGhhdmUgYW55IG1vcmUgZGF0
YSB0byBzZW5kLCBpdCBjYW4ganVzdCByZXR1cm4uCisgKgorICogaW50ICgqaGFuZ3VwKShzdHJ1
Y3QgdHR5X3N0cnVjdCAqKQorICoKKyAqCUNhbGxlZCBvbiBhIGhhbmd1cC4gVGVsbHMgdGhlIGRp
c2NpcGxpbmUgdGhhdCBpdCBzaG91bGQKKyAqCWNlYXNlIEkvTyB0byB0aGUgdHR5IGRyaXZlci4g
Q2FuIHNsZWVwLiBUaGUgZHJpdmVyIHNob3VsZAorICoJc2VlayB0byBwZXJmb3JtIHRoaXMgYWN0
aW9uIHF1aWNrbHkgYnV0IHNob3VsZCB3YWl0IHVudGlsCisgKglhbnkgcGVuZGluZyBkcml2ZXIg
SS9PIGlzIGNvbXBsZXRlZC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTEyMiw2
ICsxMjksNyBAQAogCXZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwg
c3RydWN0IHRlcm1pb3MgKiBvbGQpOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlf
c3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVj
dCAqKTsKKwlpbnQJKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCQogCS8qCiAJ
ICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgY2FsbGVkIGZyb20gYmVsb3cuCkBAIC0xMzIs
NiArMTQwLDggQEAKIAl2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsK
IAogCXN0cnVjdCAgbW9kdWxlICpvd25lcjsKKwkKKwlpbnQgcmVmY291bnQ7CiB9OwogCiAjZGVm
aW5lIFRUWV9MRElTQ19NQUdJQwkweDU0MDMK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44858</attachid>
            <date>2004-11-28 04:54 0000</date>
            <desc>ditto for the 2.6.8 patch</desc>
            <filename>linux-2.6.8.1-CAN-2004-0814.patch-r1</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL0RvY3VtZW50YXRpb24vdHR5LnR4dCBsaW51eC0y
LjYuOC9Eb2N1bWVudGF0aW9uL3R0eS50eHQKLS0tIGxpbnV4LTIuNi44Lm9yaWcvRG9jdW1lbnRh
dGlvbi90dHkudHh0CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBsaW51
eC0yLjYuOC9Eb2N1bWVudGF0aW9uL3R0eS50eHQJMjAwNC0xMS0yOCAwNDo0OTo0Mi4xODI0OTc0
NDIgLTA4MDAKQEAgLTAsMCArMSwxOTQgQEAKKworCQkJVGhlIExvY2tyb25vbWljb24KKworWW91
ciBndWlkZSB0byB0aGUgYW5jaWVudCBhbmQgdHdpc3RlZCBsb2NraW5nIHBvbGljaWVzIG9mIHRo
ZSB0dHkgbGF5ZXIgYW5kCit0aGUgd2FycGVkIGxvZ2ljIGJlaGluZCB0aGVtLiBCZXdhcmUgYWxs
IHllIHdobyByZWFkIG9uLgorCitGSVhNRTogc3RpbGwgbmVlZCB0byB3b3JrIG91dCB0aGUgZnVs
bCBzZXQgb2YgQktMIGFzc3VtcHRpb25zIGFuZCBkb2N1bWVudAordGhlbSBzbyB0aGV5IGNhbiBl
dmVudHVhbGx5IGJlIGtpbGxlZCBvZmYuCisKKworTGluZSBEaXNjaXBsaW5lCistLS0tLS0tLS0t
LS0tLS0KKworTGluZSBkaXNjaXBsaW5lcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHR0eV9yZWdpc3Rl
cl9sZGlzYygpIHBhc3NpbmcgdGhlCitkaXNjaXBsaW5lIG51bWJlciBhbmQgdGhlIGxkaXNjIHN0
cnVjdHVyZS4gQXQgdGhlIHBvaW50IG9mIHJlZ2lzdHJhdGlvbiB0aGUgCitkaXNjaXBsaW5lIG11
c3QgYmUgcmVhZHkgdG8gdXNlIGFuZCBpdCBpcyBwb3NzaWJsZSBpdCB3aWxsIGdldCB1c2VkIGJl
Zm9yZQordGhlIGNhbGwgcmV0dXJucyBzdWNjZXNzLiBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIGVy
cm9yIHRoZW4gaXQgd29uJ3QgZ2V0CitjYWxsZWQuIERvIG5vdCByZS11c2UgbGRpc2MgbnVtYmVy
cyBhcyB0aGV5IGFyZSBwYXJ0IG9mIHRoZSB1c2Vyc3BhY2UgQUJJCithbmQgd3JpdGluZyBvdmVy
IGFuIGV4aXN0aW5nIGxkaXNjIHdpbGwgY2F1c2UgZGVtb25zIHRvIGVhdCB5b3VyIGNvbXB1dGVy
LgorQWZ0ZXIgdGhlIHJldHVybiB0aGUgbGRpc2MgZGF0YSBoYXMgYmVlbiBjb3BpZWQgc28geW91
IG1heSBmcmVlIHlvdXIgb3duIAorY29weSBvZiB0aGUgc3RydWN0dXJlLiBZb3UgbXVzdCBub3Qg
cmUtcmVnaXN0ZXIgb3ZlciB0aGUgdG9wIG9mIHRoZSBsaW5lCitkaXNjaXBsaW5lIGV2ZW4gd2l0
aCB0aGUgc2FtZSBkYXRhIG9yIHlvdXIgY29tcHV0ZXIgYWdhaW4gd2lsbCBiZSBlYXRlbiBieQor
ZGVtb25zLgorCitJbiBvcmRlciB0byByZW1vdmUgYSBsaW5lIGRpc2NpcGxpbmUgY2FsbCB0dHlf
cmVnaXN0ZXJfbGRpc2MgcGFzc2luZyBOVUxMLgorSW4gYW5jaWVudCB0aW1lcyB0aGlzIGFsd2F5
cyB3b3JrZWQuIEluIG1vZGVybiB0aW1lcyB0aGUgZnVuY3Rpb24gd2lsbAorcmV0dXJuIC1FQlVT
WSBpZiB0aGUgbGRpc2MgaXMgY3VycmVudGx5IGluIHVzZS4gU2luY2UgdGhlIGxkaXNjIHJlZmVy
ZW5jaW5nCitjb2RlIG1hbmFnZXMgdGhlIG1vZHVsZSBjb3VudHMgdGhpcyBzaG91bGQgbm90IHVz
dWFsbHkgYmUgYSBjb25jZXJuLgorCitIZWVkIHRoaXMgd2FybmluZzogdGhlIHJlZmVyZW5jZSBj
b3VudCBmaWVsZCBvZiB0aGUgcmVnaXN0ZXJlZCBjb3BpZXMgb2YgdGhlCit0dHlfbGRpc2Mgc3Ry
dWN0dXJlIGluIHRoZSBsZGlzYyB0YWJsZSBjb3VudHMgdGhlIG51bWJlciBvZiBsaW5lcyB1c2lu
ZyB0aGlzCitkaXNjaXBsaW5lLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0dHlfbGRpc2Mg
c3RydWN0dXJlIHdpdGhpbiBhIHR0eSAKK2NvdW50cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1c2Vy
cyBvZiB0aGUgbGRpc2MgYXQgdGhpcyBpbnN0YW50LiBJbiBlZmZlY3QgaXQKK2NvdW50cyB0aGUg
bnVtYmVyIG9mIHRocmVhZHMgb2YgZXhlY3V0aW9uIHdpdGhpbiBhbiBsZGlzYyBtZXRob2QgKHBs
dXMgdGhvc2UKK2Fib3V0IHRvIGVudGVyIGFuZCBleGl0IGFsdGhvdWdoIHRoaXMgZGV0YWlsIG1h
dHRlcnMgbm90KS4KKworTGluZSBEaXNjaXBsaW5lIE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1RUWSBzaWRlIGludGVyZmFjZXM6CisKK2Nsb3NlKCkJCS0JVGhpcyBpcyBjYWxs
ZWQgb24gYSB0ZXJtaW5hbCB3aGVuIHRoZSBsaW5lCisJCQlkaXNjaXBsaW5lIGlzIGJlaW5nIHVu
cGx1Z2dlZC4gQXQgdGhlIHBvaW50IG9mCisJCQlleGVjdXRpb24gbm8gZnVydGhlciB1c2VycyB3
aWxsIGVudGVyIHRoZQorCQkJbGRpc2MgY29kZSBmb3IgdGhpcyB0dHkuIENhbiBzbGVlcC4KKwor
b3BlbigpCQktCUNhbGxlZCB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgYXR0YWNoZWQgdG8K
KwkJCXRoZSB0ZXJtaW5hbC4gTm8gb3RoZXIgY2FsbCBpbnRvIHRoZSBsaW5lCisJCQlkaXNjaXBs
aW5lIGZvciB0aGlzIHR0eSB3aWxsIG9jY3VyIHVudGlsIGl0CisJCQljb21wbGV0ZXMgc3VjY2Vz
c2Z1bGx5LiBDYW4gc2xlZXAuCisKK3dyaXRlKCkJCS0JQSBwcm9jZXNzIGlzIHdyaXRpbmcgZGF0
YSBmcm9tIHVzZXIgc3BhY2UKKwkJCXRocm91Z2ggdGhlIGxpbmUgZGlzY2lwbGluZS4gTXVsdGlw
bGUgd3JpdGUgY2FsbHMKKwkJCWFyZSBzZXJpYWxpemVkIGJ5IHRoZSB0dHkgbGF5ZXIgZm9yIHRo
ZSBsZGlzYy4gTWF5CisJCQlzbGVlcC4KKworZmx1c2hfYnVmZmVyKCkJLQlNYXkgYmUgY2FsbGVk
IGF0IGFueSBwb2ludCBiZXR3ZWVuIG9wZW4gYW5kIGNsb3NlLgorCitjaGFyc19pbl9idWZmZXIo
KSAtCVJlcG9ydCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIuCisKK3NldF90ZXJt
aW9zKCkJLQlDYWxsZWQgb24gdGVybWlvcyBzdHJ1Y3R1cmUgY2hhbmdlcy4gVGhlIGNhbGxlcgor
CQkJcGFzc2VzIHRoZSBvbGQgdGVybWlvcyBkYXRhIGFuZCB0aGUgY3VycmVudCBkYXRhCisJCQlp
cyBpbiB0aGUgdHR5LiBDYWxsZWQgdW5kZXIgdGhlIHRlcm1pb3MgbG9jayBzbworCQkJbWF5IG5v
dCBzbGVlcC4gU2VyaWFsaXplZCBhZ2FpbnN0IGl0c2VsZiBvbmx5LgorCityZWFkKCkJCS0JTW92
ZSBkYXRhIGZyb20gdGhlIGxpbmUgZGlzY2lwbGluZSB0byB0aGUgdXNlci4KKwkJCU11bHRpcGxl
IHJlYWQgY2FsbHMgbWF5IG9jY3VyIGluIHBhcmFsbGVsIGFuZCB0aGUKKwkJCWxkaXNjIG11c3Qg
ZGVhbCB3aXRoIHNlcmlhbGl6YXRpb24gaXNzdWVzLiBNYXkgCisJCQlzbGVlcC4KKworcG9sbCgp
CQktCUNoZWNrIHRoZSBzdGF0dXMgZm9yIHRoZSBwb2xsL3NlbGVjdCBjYWxscy4gTXVsdGlwbGUK
KwkJCXBvbGwgY2FsbHMgbWF5IG9jY3VyIGluIHBhcmFsbGVsLiBNYXkgc2xlZXAuCisKK2lvY3Rs
KCkJCS0JQ2FsbGVkIHdoZW4gYW4gaW9jdGwgaXMgaGFuZGVkIHRvIHRoZSB0dHkgbGF5ZXIKKwkJ
CXRoYXQgbWlnaHQgYmUgZm9yIHRoZSBsZGlzYy4gTXVsdGlwbGUgaW9jdGwgY2FsbHMKKwkJCW1h
eSBvY2N1ciBpbiBwYXJhbGxlbC4gTWF5IHNsZWVwLiAKKworRHJpdmVyIFNpZGUgSW50ZXJmYWNl
czoKKworcmVjZWl2ZV9idWYoKQktCUhhbmQgYnVmZmVycyBvZiBieXRlcyBmcm9tIHRoZSBkcml2
ZXIgdG8gdGhlIGxkaXNjCisJCQlmb3IgcHJvY2Vzc2luZy4gU2VtYW50aWNzIGN1cnJlbnRseSBy
YXRoZXIKKwkJCW15c3RlcmlvdXMgOCgKKworcmVjZWl2ZV9yb29tKCkJLQlDYW4gYmUgY2FsbGVk
IGJ5IHRoZSBkcml2ZXIgbGF5ZXIgYXQgYW55IHRpbWUgd2hlbgorCQkJdGhlIGxkaXNjIGlzIG9w
ZW5lZC4gVGhlIGxkaXNjIG11c3QgYmUgYWJsZSB0bworCQkJaGFuZGxlIHRoZSByZXBvcnRlZCBh
bW91bnQgb2YgZGF0YSBhdCB0aGF0IGluc3RhbnQuCisJCQlTeW5jaHJvbml6YXRpb24gYmV0d2Vl
biBhY3RpdmUgcmVjZWl2ZV9idWYgYW5kCisJCQlyZWNlaXZlX3Jvb20gY2FsbHMgaXMgZG93biB0
byB0aGUgZHJpdmVyIG5vdCB0aGUKKwkJCWxkaXNjLiBNdXN0IG5vdCBzbGVlcC4KKword3JpdGVf
d2FrZXVwKCkJLQlNYXkgYmUgY2FsbGVkIGF0IGFueSBwb2ludCBiZXR3ZWVuIG9wZW4gYW5kIGNs
b3NlLgorCQkJVGhlIFRUWV9ET19XUklURV9XQUtFVVAgZmxhZyBpbmRpY2F0ZXMgaWYgYSBjYWxs
CisJCQlpcyBuZWVkZWQgYnV0IGFsd2F5cyByYWNlcyB2ZXJzdXMgY2FsbHMuIFRodXMgdGhlCisJ
CQlsZGlzYyBtdXN0IGJlIGNhcmVmdWwgYWJvdXQgc2V0dGluZyBvcmRlciBhbmQgdG8KKwkJCWhh
bmRsZSB1bmV4cGVjdGVkIGNhbGxzLiBNdXN0IG5vdCBzbGVlcC4KKworCitMb2NraW5nCisKK0Nh
bGxlcnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBmdW5jdGlvbnMgZnJvbSB0aGUgdHR5IGxheWVy
IGFyZSByZXF1aXJlZCB0bwordGFrZSBsaW5lIGRpc2NpcGxpbmUgbG9ja3MuIFRoZSBzYW1lIGlz
IHRydWUgb2YgY2FsbHMgZnJvbSB0aGUgZHJpdmVyIHNpZGUKK2J1dCBub3QgeWV0IGVuZm9yY2Vk
LgorCitUaHJlZSBjYWxscyBhcmUgbm93IHByb3ZpZGVkCisKKwlsZGlzYyA9IHR0eV9sZGlzY19y
ZWYodHR5KTsKKwordGFrZXMgYSBoYW5kbGUgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBpbiB0aGUg
dHR5IGFuZCByZXR1cm5zIGl0LiBJZiBubyBsZGlzYworaXMgY3VycmVudGx5IGF0dGFjaGVkIG9y
IHRoZSBsZGlzYyBpcyBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBhdCB0aGlzCitwb2ludCB0
aGVuIE5VTEwgaXMgcmV0dXJuZWQuIFdoaWxlIHRoaXMgaGFuZGxlIGlzIGhlbGQgdGhlIGxkaXNj
IHdpbGwgbm90CitjaGFuZ2Ugb3IgZ28gYXdheS4KKworCXR0eV9sZGlzY19kZXJlZihsZGlzYykK
KworUmV0dXJucyB0aGUgbGRpc2MgcmVmZXJlbmNlIGFuZCBhbGxvd3MgdGhlIGxkaXNjIHRvIGJl
IGNsb3NlZC4gUmV0dXJuaW5nIHRoZQorcmVmZXJlbmNlIHRha2VzIGF3YXkgeW91ciByaWdodCB0
byBjYWxsIHRoZSBsZGlzYyBmdW5jdGlvbnMgdW50aWwgeW91IHRha2UKK2EgbmV3IHJlZmVyZW5j
ZS4KKworCWxkaXNjID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7CisKK1BlcmZvcm1zIHRoZSBz
YW1lIGZ1bmN0aW9uIGFzIHR0eV9sZGlzY19yZWYgZXhjZXB0IHRoYXQgaXQgd2lsbCB3YWl0IGZv
ciBhbgorbGRpc2MgY2hhbmdlIHRvIGNvbXBsZXRlIGFuZCB0aGVuIHJldHVybiBhIHJlZmVyZW5j
ZSB0byB0aGUgbmV3IGxkaXNjLiAKKworV2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzbGlnaHRs
eSBzbG93ZXIgdGhhbiB0aGUgb2xkIGNvZGUgdGhleSBzaG91bGQgaGF2ZQorbWluaW1hbCBpbXBh
Y3QgYXMgbW9zdCByZWNlaXZlIGxvZ2ljIHVzZXMgdGhlIGZsaXAgYnVmZmVycyBhbmQgdGhleSBv
bmx5CituZWVkIHRvIHRha2UgYSByZWZlcmVuY2Ugd2hlbiB0aGV5IHB1c2ggYml0cyB1cCB0aHJv
dWdoIHRoZSBkcml2ZXIuCisKK0EgY2F1dGlvbjogVGhlIGxkaXNjLT5vcGVuKCksIGxkaXNjLT5j
bG9zZSgpIGFuZCBkcml2ZXItPnNldF9sZGlzYyAKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGgg
dGhlIGxkaXNjIHVuYXZhaWxhYmxlLiBUaHVzIHR0eV9sZGlzY19yZWYgd2lsbAorZmFpbCBpbiB0
aGlzIHNpdHVhdGlvbiBpZiB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIExkaXNjIGFuZCBk
cml2ZXIKK2NvZGUgY2FsbGluZyBpdHMgb3duIGZ1bmN0aW9ucyBtdXN0IGJlIGNhcmVmdWwgaW4g
dGhpcyBjYXNlLiAKKworCitEcml2ZXIgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCisKK29w
ZW4oKQkJLQlDYWxsZWQgd2hlbiBhIGRldmljZSBpcyBvcGVuZWQuIE1heSBzbGVlcAorCitjbG9z
ZSgpCQktCUNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIGNsb3NlZC4gQXQgdGhlIHBvaW50IG9mCisJ
CQlyZXR1cm4gZnJvbSB0aGlzIGNhbGwgdGhlIGRyaXZlciBtdXN0IG1ha2Ugbm8gCisJCQlmdXJ0
aGVyIGxkaXNjIGNhbGxzIG9mIGFueSBraW5kLiBNYXkgc2xlZXAKKword3JpdGUoKQkJLQlDYWxs
ZWQgdG8gd3JpdGUgYnl0ZXMgdG8gdGhlIGRldmljZS4gTWF5IG5vdAorCQkJc2xlZXAuIE1heSBv
Y2N1ciBpbiBwYXJhbGxlbCBpbiBzcGVjaWFsIGNhc2VzLiAKKwkJCUJlY2F1c2UgdGhpcyBpbmNs
dWRlcyBwYW5pYyBwYXRocyBkcml2ZXJzIGdlbmVyYWxseQorCQkJc2hvdWxkbid0IHRyeSBhbmQg
ZG8gY2xldmVyIGxvY2tpbmcgaGVyZS4KKworcHV0X2NoYXIoKQktCVN0dWZmIGEgc2luZ2xlIGNo
YXJhY3RlciBvbnRvIHRoZSBxdWV1ZS4gVGhlCisJCQlkcml2ZXIgaXMgZ3VhcmFudGVlZCBmb2xs
b3dpbmcgdXAgY2FsbHMgdG8KKwkJCWZsdXNoX2NoYXJzLgorCitmbHVzaF9jaGFycygpCS0JQXNr
IHRoZSBrZXJuZWwgdG8gd3JpdGUgcHV0X2NoYXIgcXVldWUKKword3JpdGVfcm9vbSgpCS0JUmV0
dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aHQgY2FuIGJlIHN0dWZmZWQKKwkJCWludG8g
dGhlIHBvcnQgYnVmZmVycyB3aXRob3V0IG92ZXJmbG93IChvciBsZXNzKS4KKwkJCVRoZSBsZGlz
YyBpcyByZXNwb25zaWJsZSBmb3IgYmVpbmcgaW50ZWxsaWdlbnQKKyAJCQlhYm91dCBtdWx0aS10
aHJlYWRpbmcgb2Ygd3JpdGVfcm9vbS93cml0ZSBjYWxscworCitpb2N0bCgpCQktCUNhbGxlZCB3
aGVuIGFuIGlvY3RsIG1heSBiZSBmb3IgdGhlIGRyaXZlcgorCitzZXRfdGVybWlvcygpCS0JQ2Fs
bGVkIG9uIHRlcm1pb3MgY2hhbmdlLCBtYXkgZ2V0IHBhcmFsbGVsIGNhbGxzLAorCQkJbWF5IGJs
b2NrIGZvciBub3cgKG1heSBjaGFuZ2UgdGhhdCkKKworc2V0X2xkaXNjKCkJLQlOb3RpZmllciBm
b3IgZGlzY2lwbGluZSBjaGFuZ2UuIEF0IHRoZSBwb2ludCB0aGlzIAorCQkJaXMgZG9uZSB0aGUg
ZGlzY2lwbGluZSBpcyBub3QgeWV0IHVzYWJsZS4gQ2FuIG5vdworCQkJc2xlZXAgKEkgdGhpbmsp
CisKK3Rocm90dGxlKCkJLQlDYWxsZWQgYnkgdGhlIGxkaXNjIHRvIGFzayB0aGUgZHJpdmVyIHRv
IGRvIGZsb3cKKwkJCWNvbnRyb2wuICBTZXJpYWxpemF0aW9uIGluY2x1ZGluZyB3aXRoIHVudGhy
b3R0bGUKKwkJCWlzIHRoZSBqb2Igb2YgdGhlIGxkaXNjIGxheWVyLgorCit1bnRocm90dGxlKCkJ
LQlDYWxsZWQgYnkgdGhlIGxkaXNjIHRvIGFzayB0aGUgZHJpdmVyIHRvIHN0b3AgZmxvdworCQkJ
Y29udHJvbC4KKworc3RvcCgpCQktCUxkaXNjIG5vdGlmaWVyIHRvIHRoZSBkcml2ZXIgdG8gc3Rv
cCBvdXRwdXQuIEFzIHdpdGgKKwkJCXRocm90dGxlIHRoZSBzZXJpYWxpemF0aW9ucyB3aXRoIHN0
YXJ0KCkgYXJlIGRvd24KKwkJCXRvIHRoZSBsZGlzYyBsYXllci4KKworc3RhcnQoKQkJLQlMZGlz
YyBub3RpZmllciB0byB0aGUgZHJpdmVyIHRvIHN0YXJ0IG91dHB1dC4KKworaGFuZ3VwKCkJLQlB
c2sgdGhlIHR0eSBkcml2ZXIgdG8gY2F1c2UgYSBoYW5ndXAgaW5pdGlhdGVkCisJCQlmcm9tIHRo
ZSBob3N0IHNpZGUuIFtDYW4gc2xlZXAgPz9dCisKK2JyZWFrX2N0bCgpCS0JU2VuZCBSUzIzMiBi
cmVhay4gQ2FuIHNsZWVwLiBDYW4gZ2V0IGNhbGxlZCBpbgorCQkJcGFyYWxsZWwsIGRyaXZlciBt
dXN0IHNlcmlhbGl6ZSAoZm9yIG5vdyksIGFuZAorCQkJd2l0aCB3cml0ZSBjYWxscy4KKword2Fp
dF91bnRpbF9zZW50KCkgLQlXYWl0IGZvciBjaGFyYWN0ZXJzIHRvIGV4aXQgdGhlIGhhcmR3YXJl
IHF1ZXVlCisJCQlvZiB0aGUgZHJpdmVyLiBDYW4gc2xlZXAKKworc2VuZF94Y2hhcigpCSAgLQlT
ZW5kIFhPTi9YT0ZGIGFuZCBpZiBwb3NzaWJsZSBqdW1wIHRoZSBxdWV1ZSB3aXRoCisJCQlpdCBp
biBvcmRlciB0byBnZXQgZmFzdCBmbG93IGNvbnRyb2wgcmVzcG9uc2VzLgorCQkJQ2Fubm90IHNs
ZWVwID8/CisKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvYmx1ZXRvb3RoL2hj
aV9sZGlzYy5jIGxpbnV4LTIuNi44L2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCi0tLSBs
aW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCTIwMDQtMDgtMTMg
MjI6Mzc6MzguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2JsdWV0b290
aC9oY2lfbGRpc2MuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjE5MjQ5NTgxOCAtMDgwMApAQCAtMTg4
LDkgKzE4OCw3IEBACiAJfQogCiAJLyogRmx1c2ggYW55IHBlbmRpbmcgY2hhcmFjdGVycyBpbiB0
aGUgZHJpdmVyIGFuZCBkaXNjaXBsaW5lLiAqLwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKLQorCXR0eV9sZGlzY19mbHVzaCh0
dHkpOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1
c2hfYnVmZmVyKHR0eSk7CiAKQEAgLTI4MCw3ICsyNzgsOSBAQAogCiAJc3Bpbl9sb2NrX2luaXQo
Jmh1LT5yeF9sb2NrKTsKIAotCS8qIEZsdXNoIGFueSBwZW5kaW5nIGNoYXJhY3RlcnMgaW4gdGhl
IGRyaXZlciBhbmQgbGluZSBkaXNjaXBsaW5lICovCisJLyogRmx1c2ggYW55IHBlbmRpbmcgY2hh
cmFjdGVycyBpbiB0aGUgZHJpdmVyIGFuZCBsaW5lIGRpc2NpcGxpbmUuICovCisJLyogRklYTUU6
IHdoeSBpcyB0aGlzIG5lZWRlZC4gTm90ZSBkb24ndCB1c2UgbGRpc2NfcmVmIGhlcmUgYXMgdGhl
CisJICAgb3BlbiBwYXRoIGlzIGJlZm9yZSB0aGUgbGRpc2MgaXMgcmVmZXJlbmNhYmxlICovCiAJ
aWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQogCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0
dHkpOwogCmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvYW1pc2VyaWFs
LmMgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCi0tLSBsaW51eC0yLjYuOC5v
cmlnL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwkyMDA0LTA4LTEzIDIyOjM4OjEwLjAwMDAwMDAw
MCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCTIwMDQtMTEt
MjggMDQ6NDk6NDIuMjEwNDkyODk0IC0wODAwCkBAIC01NTcsOSArNTU3LDcgQEAKIAkJcmV0dXJu
OwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZpbmZv
LT5ldmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndy
aXRlX3dha2V1cCkodHR5KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAJfQogfQpAQCAtMTAyMyw5ICsxMDIxLDcgQEAKIAlp
bmZvLT54bWl0LmhlYWQgPSBpbmZvLT54bWl0LnRhaWwgPSAwOwogCWxvY2FsX2lycV9yZXN0b3Jl
KGZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYg
KCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJ
dHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTU2NCw4ICsxNTYwLDggQEAKIAlzaHV0ZG93
bihpbmZvKTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXIt
PmZsdXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5
LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwkJCisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJ
dHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gMDsKZGlm
ZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGxpbnV4LTIu
Ni44L2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMv
Y2hhci9jeWNsYWRlcy5jCTIwMDQtMDgtMTMgMjI6MzY6MzIuMDAwMDAwMDAwIC0wNzAwCisrKyBs
aW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjIy
NzQ5MDEzMiAtMDgwMApAQCAtOTcwLDEwICs5NzAsNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJs
ZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwogICAgIH0KICAgICBpZiAodGVzdF9hbmRfY2xlYXJf
Yml0KEN5X0VWRU5UX1dSSVRFX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkgewotICAgICAgICBpZigo
dHR5LT5mbGFncyAmICgxPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpCi0gICAgICAgICYmIHR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKXsKLSAgICAgICAgICAgICh0dHktPmxkaXNjLndyaXRlX3dha2V1
cCkodHR5KTsKLSAgICAgICAgfQorICAgICAgICB0dHlfd2FrZXVwKHR0eSk7CiAgICAgICAgIHdh
a2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKICAgICB9CiAjaWZkZWYgWl9X
QUtFCkBAIC0yODUwLDggKzI4NDcsNyBAQAogICAgIHNodXRkb3duKGluZm8pOwogICAgIGlmICh0
dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogICAgICAgICB0dHktPmRyaXZlci0+Zmx1c2hfYnVm
ZmVyKHR0eSk7Ci0gICAgaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotICAgICAgICB0dHkt
PmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworICAgIHR0eV9sZGlzY19mbHVzaCh0dHkpOyAgICAg
ICAgCiAgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7CiAKICAgICB0dHktPmNsb3NpbmcgPSAwOwpA
QCAtNDU1NCwxMCArNDU1MCw4IEBACiAJfQogCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CiAgICAg
fQorICAgIHR0eV93YWtldXAodHR5KTsKICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7Ci0gICAgaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dB
S0VVUCkpCi0JJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JICAgICh0dHktPmxkaXNjLndy
aXRlX3dha2V1cCkodHR5KTsKIH0gLyogY3lfZmx1c2hfYnVmZmVyICovCiAKIApkaWZmIC1OYXVy
IGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL2VwY2EuYyBsaW51eC0yLjYuOC9kcml2ZXJz
L2NoYXIvZXBjYS5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9lcGNhLmMJMjAw
NC0wOC0xMyAyMjozNzoxNC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMv
Y2hhci9lcGNhLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi4yNzk0ODE2ODUgLTA4MDAKQEAgLTU1MSw5
ICs1NTEsNyBAQAogCQlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJCXR0eS0+ZHJp
dmVyLT5mbHVzaF9idWZmZXIodHR5KTsKIAotCQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIp
Ci0JCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOwotCisJCXR0eV9sZGlzY19mbHVzaCh0
dHkpOwogCQlzaHV0ZG93bihjaCk7CiAJCXR0eS0+Y2xvc2luZyA9IDA7CiAJCWNoLT5ldmVudCA9
IDA7CkBAIC02NTcsMTAgKzY1NSw3IEBACiAJCWNsaSgpOwogCQlpZiAodHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcikKIAkJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQotCQlpZiAo
dHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkp
OwotCisJCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCQlzaHV0ZG93bihjaCk7CiAKIAkJY2gtPnR0
eSAgID0gTlVMTDsKQEAgLTExMjAsOCArMTExNSw3IEBACiAJcmVzdG9yZV9mbGFncyhmbGFncyk7
CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHkt
PmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVf
d2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0
dHkpOwogCiB9IC8qIEVuZCBwY19mbHVzaF9idWZmZXIgKi8KIApAQCAtMjI2Miw5ICsyMjU2LDcg
QEAKIAkJCQl7IC8qIEJlZ2luIGlmIExPV1dBSVQgKi8KIAogCQkJCQljaC0+c3RhdHVzZmxhZ3Mg
Jj0gfkxPV1dBSVQ7Ci0JCQkJCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9X
QUtFVVApKSAmJgotCQkJCQkJICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkJCSh0dHkt
PmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwkJCQkJdHR5X3dha2V1cCh0dHkpOwogCQkJCQl3
YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CiAKIAkJCQl9IC8qIEVuZCBp
ZiBMT1dXQUlUICovCkBAIC0yMjgxLDkgKzIyNzMsNyBAQAogCQkJCXsgLyogQmVnaW4gaWYgRU1Q
VFlXQUlUICovCiAKIAkJCQkJY2gtPnN0YXR1c2ZsYWdzICY9IH5FTVBUWVdBSVQ7Ci0JCQkJCWlm
ICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCQkJICB0
dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKKwkJCQkJdHR5X3dha2V1cCh0dHkpOwogCiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJs
ZSgmdHR5LT53cml0ZV93YWl0KTsKIApAQCAtMzEzNiw2ICszMTI2LDcgQEAKIAkJCX0KIAkJCWVs
c2UgCiAJCQl7CisJCQkJLyogbGRpc2MgbG9jayBhbHJlYWR5IGhlbGQgaW4gaW9jdGwgKi8KIAkJ
CQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCiAJCQkJCXR0eS0+bGRpc2MuZmx1c2hfYnVm
ZmVyKHR0eSk7CiAJCQl9CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIv
ZXNwLmMgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL2VzcC5jCi0tLSBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci9lc3AuYwkyMDA0LTA4LTEzIDIyOjM2OjExLjAwMDAwMDAwMCAtMDcwMAor
KysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL2VzcC5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMzA0
NDc3NjIzIC0wODAwCkBAIC03NjIsMTAgKzc2Miw3IEBACiAJCXJldHVybjsKIAogCWlmICh0ZXN0
X2FuZF9jbGVhcl9iaXQoRVNQX0VWRU5UX1dSSVRFX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkgewot
CQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJICAg
IHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0
dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJCXR0eV93
YWtldXAodHR5KTsKIAl9CiB9CiAKQEAgLTEzNzAsMTAgKzEzNjcsNyBAQAogCWNsaSgpOwogCWlu
Zm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAlz
dGkoKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0
dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5
X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMjA2OSw4ICsyMDYzLDcgQEAKIAlzaHV0ZG93bihp
bmZvKTsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5s
ZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHktPmNs
b3NpbmcgPSAwOwogCWluZm8tPmV2ZW50ID0gMDsKIAlpbmZvLT50dHkgPSBOVUxMOwpkaWZmIC1O
YXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMgbGludXgt
Mi42LjgvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcv
ZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMJMjAwNC0wOC0xMyAyMjozNjo1OC4wMDAwMDAw
MDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCTIw
MDQtMTEtMjggMDQ6NDk6NDIuMzUwNDcwMTUxIC0wODAwCkBAIC00MzYsOSArNDM2LDcgQEAKIAly
ZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0
ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkg
JiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiAJZnVuY19leGl0ICgpOwogfQogCkBAIC01
NzgsOSArNTc2LDcgQEAKIAlpZiAoIXR0eSkgcmV0dXJuOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFy
X2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZwb3J0LT5ldmVudCkpIHsKLQkJaWYgKCh0dHkt
PmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAgICB0dHktPmxkaXNj
LndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwkJdHR5
X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7
CiAJfQogCWZ1bmNfZXhpdCAoKTsKQEAgLTY5NCw4ICs2OTAsOCBAQAogewogCXVuc2lnbmVkIGxv
bmcgZmxhZ3M7CiAJc3RydWN0IGdzX3BvcnQgKnBvcnQ7Ci0KLQlmdW5jX2VudGVyICgpOworCQor
CWZ1bmNfZW50ZXIgKCkKIAogCWlmICghdHR5KSByZXR1cm47CiAKQEAgLTc2MCw4ICs3NTYsOCBA
QAogCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVz
aF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCXR0eS0+bGRp
c2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCQorCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXR0eS0+
Y2xvc2luZyA9IDA7CiAKIAlwb3J0LT5ldmVudCA9IDA7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgu
b3JpZy9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIv
aHZjX2NvbnNvbGUuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvaHZjX2NvbnNv
bGUuYwkyMDA0LTA4LTEzIDIyOjM3OjM5LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42Ljgv
ZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi4zODE0NjUxMTUg
LTA4MDAKQEAgLTI0OCwxMCArMjQ4LDcgQEAKIAogCQlpZiAoaHAtPmRvX3dha2V1cCkgewogCQkJ
aHAtPmRvX3dha2V1cCA9IDA7Ci0JCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJ
VEVfV0FLRVVQKSkKLQkJCSAgICAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkodHR5
LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0
eS0+d3JpdGVfd2FpdCk7CisJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCX0KIAl9CiAKZGlmZiAtTmF1
ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9odmNzLmMgbGludXgtMi42LjgvZHJpdmVy
cy9jaGFyL2h2Y3MuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvaHZjcy5jCTIw
MDQtMDgtMTMgMjI6Mzc6MTQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJz
L2NoYXIvaHZjcy5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMzg1NDY0NDY1IC0wODAwCkBAIC0zOTMs
MTAgKzM5Myw3IEBACiAJCQkgKiBhIG5vbi1leGlzdGVudCB0dHkuCiAJCQkgKi8KIAkJCWlmICh0
dHkpIHsKLQkJCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkK
LQkJCQkJCSYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJCQkodHR5LT5sZGlzYy53cml0
ZV93YWtldXApICh0dHkpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93
YWl0KTsKKwkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLU5hdXIgbGlu
dXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvaXNpY29tLmMgbGludXgtMi42LjgvZHJpdmVycy9j
aGFyL2lzaWNvbS5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9pc2ljb20uYwky
MDA0LTA4LTEzIDIyOjM2OjEyLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVy
cy9jaGFyL2lzaWNvbS5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuNDI0NDU4MTI5IC0wODAwCkBAIC00
ODQsMTAgKzQ4NCw4IEBACiAJCiAJaWYgKCF0dHkpCiAJCXJldHVybjsKLQkKLQlpZiAoKHR0eS0+
ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53
cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKworCXR0eV93
YWtldXAodHR5KTsJCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwog
fSAJCQogIAkJCkBAIC0xMTE5LDggKzExMTcsOCBAQAogCWlzaWNvbV9zaHV0ZG93bl9wb3J0KHBv
cnQpOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1
c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxk
aXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQkKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHkt
PmNsb3NpbmcgPSAwOwogCXBvcnQtPnR0eSA9IE5VTEw7CiAJaWYgKHBvcnQtPmJsb2NrZWRfb3Bl
bikgewpAQCAtMTU2Myw5ICsxNTYxLDcgQEAKIAlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAkKIAl3
YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdz
ICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVf
d2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0
dHkpOwogfQogCiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9tb3hh
LmMgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL21veGEuYwotLS0gbGludXgtMi42Ljgub3JpZy9k
cml2ZXJzL2NoYXIvbW94YS5jCTIwMDQtMDgtMTMgMjI6Mzg6MDQuMDAwMDAwMDAwIC0wNzAwCisr
KyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvbW94YS5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuNDQ1
NDU0NzE4IC0wODAwCkBAIC02MTgsOCArNjE4LDggQEAKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1
c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+
bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0
eV9sZGlzY19mbHVzaCh0dHkpOworCQkJCiAJdHR5LT5jbG9zaW5nID0gMDsKIAljaC0+ZXZlbnQg
PSAwOwogCWNoLT50dHkgPSBOVUxMOwpAQCAtNjkzLDkgKzY5Myw3IEBACiAJaWYgKGNoID09IE5V
TEwpCiAJCXJldHVybjsKIAlNb3hhUG9ydEZsdXNoRGF0YShjaC0+cG9ydCwgMSk7Ci0JaWYgKCh0
dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCXR0
eV93YWtldXAodHR5KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7
CiB9CiAKQEAgLTk1NCw5ICs5NTIsNyBAQAogCQkJCWlmIChNb3hhUG9ydFR4UXVldWUoY2gtPnBv
cnQpIDw9IFdBS0VVUF9DSEFSUykgewogCQkJCQlpZiAoIXRwLT5zdG9wcGVkKSB7CiAJCQkJCQlj
aC0+c3RhdHVzZmxhZ3MgJj0gfkxPV1dBSVQ7Ci0JCQkJCQlpZiAoKHRwLT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCQkJICB0cC0+bGRpc2Mud3JpdGVfd2FrZXVw
KQotCQkJCQkJCSh0cC0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHApOworCQkJCQkJdHR5X3dha2V1
cCh0dHkpOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cC0+d3JpdGVfd2FpdCk7CiAJ
CQkJCX0KIAkJCQl9CkBAIC0xMTIzLDkgKzExMTksNyBAQAogCWlmIChjaC0+dHR5ICYmIChjaC0+
c3RhdHVzZmxhZ3MgJiBFTVBUWVdBSVQpKSB7CiAJCWlmIChNb3hhUG9ydFR4UXVldWUoY2gtPnBv
cnQpID09IDApIHsKIAkJCWNoLT5zdGF0dXNmbGFncyAmPSB+RU1QVFlXQUlUOwotCQkJaWYgKChj
aC0+dHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJICAgIGNo
LT50dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkoY2gtPnR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSAoY2gtPnR0eSk7CisJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJmNoLT50dHktPndyaXRlX3dhaXQpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLU5hdXIg
bGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvbXhzZXIuYyBsaW51eC0yLjYuOC9kcml2ZXJz
L2NoYXIvbXhzZXIuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvbXhzZXIuYwky
MDA0LTA4LTEzIDIyOjM3OjI2LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVy
cy9jaGFyL214c2VyLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi40NTY0NTI5MzEgLTA4MDAKQEAgLTY3
OCw5ICs2NzgsNyBAQAogCXR0eSA9IGluZm8tPnR0eTsKIAlpZiAodHR5KSB7CiAJCWlmICh0ZXN0
X2FuZF9jbGVhcl9iaXQoTVhTRVJfRVZFTlRfVFhMT1csICZpbmZvLT5ldmVudCkpIHsKLQkJCWlm
ICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJICAgIHR0
eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgKHR0
eSk7CisJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7CiAJCX0KIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNWFNFUl9FVkVOVF9I
QU5HVVAsICZpbmZvLT5ldmVudCkpIHsKQEAgLTgxNyw4ICs4MTUsOCBAQAogCW14c2VyX3NodXRk
b3duKGluZm8pOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZl
ci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0
dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOworCiAJ
dHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gTlVMTDsK
QEAgLTk3Niw5ICs5NzQsNyBAQAogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0g
aW5mby0+eG1pdF90YWlsID0gMDsKIAlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAl3YWtlX3VwX2lu
dGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwg
VFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQot
CQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCXR0eV93YWtldXAodHR5KTsKIH0K
IAogc3RhdGljIGludCBteHNlcl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qg
ZmlsZSAqZmlsZSwKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9uX3R0
eS5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9uX3R0eS5jCi0tLSBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci9uX3R0eS5jCTIwMDQtMDgtMTMgMjI6MzY6MTEuMDAwMDAwMDAwIC0wNzAw
CisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvbl90dHkuYwkyMDA0LTExLTI4IDA0OjQ5OjQy
LjQ2OTQ1MDgxOSAtMDgwMApAQCAtOTksMTEgKzk5LDE4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVz
dG9yZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKIH0KIAotLyogCi0gKiBDaGVjayB3aGV0aGVy
IHRvIGNhbGwgdGhlIGRyaXZlci51bnRocm90dGxlIGZ1bmN0aW9uLgotICogV2UgdGVzdCB0aGUg
VFRZX1RIUk9UVExFRCBiaXQgZmlyc3Qgc28gdGhhdCBpdCBhbHdheXMKLSAqIGluZGljYXRlcyB0
aGUgY3VycmVudCBzdGF0ZS4KKy8qKgorICoJY2hlY2tfdW50aHJvdHRsZQktCWFsbG93IG5ldyBy
ZWNlaXZlIGRhdGEKKyAqCUB0dHk7IHR0eSBkZXZpY2UKKyAqCisgKglDaGVjayB3aGV0aGVyIHRv
IGNhbGwgdGhlIGRyaXZlci51bnRocm90dGxlIGZ1bmN0aW9uLgorICoJV2UgdGVzdCB0aGUgVFRZ
X1RIUk9UVExFRCBiaXQgZmlyc3Qgc28gdGhhdCBpdCBhbHdheXMKKyAqCWluZGljYXRlcyB0aGUg
Y3VycmVudCBzdGF0ZS4gVGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIKKyAqCWl0IGlzIHdvcnRo
IGFsbG93aW5nIG1vcmUgaW5wdXQgaGFzIGJlZW4gdGFrZW4gYnkgdGhlIGNhbGxlci4KKyAqCUNh
biBzbGVlcCwgbWF5IGJlIGNhbGxlZCB1bmRlciB0aGUgYXRvbWljX3JlYWQgc2VtYXBob3JlIGJ1
dAorICoJdGhpcyBpcyBub3QgZ3VhcmFudGVlZC4KICAqLworIAogc3RhdGljIHZvaWQgY2hlY2tf
dW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKIHsKIAlpZiAodHR5LT5jb3VudCAm
JgpAQCAtMTEyLDEwICsxMTksMTMgQEAKIAkJdHR5LT5kcml2ZXItPnVudGhyb3R0bGUodHR5KTsK
IH0KIAotLyoKLSAqIFJlc2V0IHRoZSByZWFkIGJ1ZmZlciBjb3VudGVycywgY2xlYXIgdGhlIGZs
YWdzLCAKLSAqIGFuZCBtYWtlIHN1cmUgdGhlIGRyaXZlciBpcyB1bnRocm90dGxlZC4gQ2FsbGVk
Ci0gKiBmcm9tIG5fdHR5X29wZW4oKSBhbmQgbl90dHlfZmx1c2hfYnVmZmVyKCkuCisvKioKKyAq
CXJlc2V0X2J1ZmZlcl9mbGFncwktCXJlc2V0IGJ1ZmZlciBzdGF0ZQorICoJQHR0eTogdGVybWlu
YWwgdG8gcmVzZXQKKyAqCisgKglSZXNldCB0aGUgcmVhZCBidWZmZXIgY291bnRlcnMsIGNsZWFy
IHRoZSBmbGFncywgCisgKglhbmQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgdW50aHJvdHRsZWQu
IENhbGxlZAorICoJZnJvbSBuX3R0eV9vcGVuKCkgYW5kIG5fdHR5X2ZsdXNoX2J1ZmZlcigpLgog
ICovCiBzdGF0aWMgdm9pZCByZXNldF9idWZmZXJfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0
eSkKIHsKQEAgLTEyOSw5ICsxMzksMTkgQEAKIAljaGVja191bnRocm90dGxlKHR0eSk7CiB9CiAK
LS8qCi0gKiBGbHVzaCB0aGUgaW5wdXQgYnVmZmVyCisvKioKKyAqCW5fdHR5X2ZsdXNoX2J1ZmZl
cgktCWNsZWFuIGlucHV0IHF1ZXVlCisgKglAdHR5Ogl0ZXJtaW5hbCBkZXZpY2UKKyAqCisgKglG
bHVzaCB0aGUgaW5wdXQgYnVmZmVyLiBDYWxsZWQgd2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGlz
CisgKgliZWluZyBjbG9zZWQsIHdoZW4gdGhlIHR0eSBsYXllciB3YW50cyB0aGUgYnVmZmVyIGZs
dXNoZWQgKGVnCisgKglhdCBoYW5ndXApIG9yIHdoZW4gdGhlIE5fVFRZIGxpbmUgZGlzY2lwbGlu
ZSBpbnRlcm5hbGx5IGhhcyB0bworICoJY2xlYW4gdGhlIHBlbmRpbmcgcXVldWUgKGZvciBleGFt
cGxlIHNvbWUgc2lnbmFscykuCisgKgorICoJRklYTUU6IHR0eS0+Y3RybF9zdGF0dXMgaXMgbm90
IHNwaW5sb2NrZWQgYW5kIHJlbGllcyBvbgorICoJbG9ja19rZXJuZWwoKSBzdGlsbC4KICAqLwor
IAogdm9pZCBuX3R0eV9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCiB7CiAJ
LyogY2xlYXIgZXZlcnl0aGluZyBhbmQgdW50aHJvdHRsZSB0aGUgZHJpdmVyICovCkBAIC0xNDYs
OSArMTY2LDE0IEBACiAJfQogfQogCi0vKgotICogUmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJz
IGJ1ZmZlcmVkIHRvIGJlIGRlbGl2ZXJlZCB0byB1c2VyCisvKioKKyAqCW5fdHR5X2NoYXJzX2lu
X2J1ZmZlcgktCXJlcG9ydCBhdmFpbGFibGUgYnl0ZXMKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAq
CisgKglSZXBvcnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZlcmVkIHRvIGJlIGRlbGl2
ZXJlZCB0byB1c2VyCisgKglhdCB0aGlzIGluc3RhbnQgaW4gdGltZS4gCiAgKi8KKyAKIHNzaXpl
X3Qgbl90dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJdW5z
aWduZWQgbG9uZyBmbGFnczsKQEAgLTE2NiwyMCArMTkxLDQ3IEBACiAJcmV0dXJuIG47CiB9CiAK
Ky8qKgorICoJaXNfdXRmOF9jb250aW51YXRpb24JLQl1dGY4IG11bHRpYnl0ZSBjaGVjaworICoJ
QGM6IGJ5dGUgdG8gY2hlY2sKKyAqCisgKglSZXR1cm5zIHRydWUgaWYgdGhlIHV0ZjggY2hhcmFj
dGVyICdjJyBpcyBhIG11bHRpYnl0ZSBjb250aW51YXRpb24KKyAqCWNoYXJhY3Rlci4gV2UgdXNl
IHRoaXMgdG8gY29ycmVjdGx5IGNvbXB1dGUgdGhlIG9uIHNjcmVlbiBzaXplCisgKglvZiB0aGUg
Y2hhcmFjdGVyIHdoZW4gcHJpbnRpbmcKKyAqLworIAogc3RhdGljIGlubGluZSBpbnQgaXNfdXRm
OF9jb250aW51YXRpb24odW5zaWduZWQgY2hhciBjKQogewogCXJldHVybiAoYyAmIDB4YzApID09
IDB4ODA7CiB9CiAKKy8qKgorICoJaXNfY29udGludWF0aW9uCQktCW11bHRpYnl0ZSBjaGVjawor
ICoJQGM6IGJ5dGUgdG8gY2hlY2sKKyAqCisgKglSZXR1cm5zIHRydWUgaWYgdGhlIHV0ZjggY2hh
cmFjdGVyICdjJyBpcyBhIG11bHRpYnl0ZSBjb250aW51YXRpb24KKyAqCWNoYXJhY3RlciBhbmQg
dGhlIHRlcm1pbmFsIGlzIGluIHVuaWNvZGUgbW9kZS4KKyAqLworIAogc3RhdGljIGlubGluZSBp
bnQgaXNfY29udGludWF0aW9uKHVuc2lnbmVkIGNoYXIgYywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0
eSkKIHsKIAlyZXR1cm4gSV9JVVRGOCh0dHkpICYmIGlzX3V0ZjhfY29udGludWF0aW9uKGMpOwog
fQogCi0vKgotICogUGVyZm9ybSBPUE9TVCBwcm9jZXNzaW5nLiAgUmV0dXJucyAtMSB3aGVuIHRo
ZSBvdXRwdXQgZGV2aWNlIGlzCi0gKiBmdWxsIGFuZCB0aGUgY2hhcmFjdGVyIG11c3QgYmUgcmV0
cmllZC4KKy8qKgorICoJb3Bvc3QJCQktCW91dHB1dCBwb3N0IHByb2Nlc3NvcgorICoJQGM6IGNo
YXJhY3RlciAob3IgcGFydGlhbCB1bmljb2RlIHN5bWJvbCkKKyAqCUB0dHk6IHRlcm1pbmFsIGRl
dmljZQorICoKKyAqCVBlcmZvcm0gT1BPU1QgcHJvY2Vzc2luZy4gIFJldHVybnMgLTEgd2hlbiB0
aGUgb3V0cHV0IGRldmljZSBpcworICoJZnVsbCBhbmQgdGhlIGNoYXJhY3RlciBtdXN0IGJlIHJl
dHJpZWQuIE5vdGUgdGhhdCBMaW51eCBjdXJyZW50bHkKKyAqCWlnbm9yZXMgVEFCRExZLCBDUkRM
WSwgVlRETFksIEZGRExZIGFuZCBOTERMWS4gVGhleSBzaW1wbHkgYXJlbid0CisgKglyZWxldmFu
dCBpbiB0aGUgd29ybGQgdG9kYXkuIElmIHlvdSBldmVyIG5lZWQgdGhlbSwgYWRkIHRoZW0gaGVy
ZS4KKyAqCisgKglDYWxsZWQgZnJvbSBib3RoIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBzaWRl
cyBhbmQgY2FuIGJlIGNhbGxlZAorICoJcmUtZW50cmFudGx5LiBSZWxpZXMgb24gbG9ja19rZXJu
ZWwoKSBzdGlsbC4KICAqLworIAogc3RhdGljIGludCBvcG9zdCh1bnNpZ25lZCBjaGFyIGMsIHN0
cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaW50CXNwYWNlLCBzcGFjZXM7CkBAIC0yMzksMTAg
KzI5MSwyMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogb3Bvc3RfYmxvY2sgLS0tIHRvIHNw
ZWVkIHVwIGJsb2NrIGNvbnNvbGUgd3JpdGVzLCBhbW9uZyBvdGhlcgotICogdGhpbmdzLgorLyoq
CisgKglvcG9zdF9ibG9jawkJLQlibG9jayBwb3N0cHJvY2VzcworICoJQHR0eTogdGVybWluYWwg
ZGV2aWNlCisgKglAaW5idWY6IHVzZXIgYnVmZmVyCisgKglAbnI6IG51bWJlciBvZiBieXRlcwor
ICoKKyAqCVRoaXMgcGF0aCBpcyB1c2VkIHRvIHNwZWVkIHVwIGJsb2NrIGNvbnNvbGUgd3JpdGVz
LCBhbW9uZyBvdGhlcgorICoJdGhpbmdzIHdoZW4gcHJvY2Vzc2luZyBibG9ja3Mgb2Ygb3V0cHV0
IGRhdGEuIEl0IGhhbmRsZXMgb25seQorICoJdGhlIHNpbXBsZSBjYXNlcyBub3JtYWxseSBmb3Vu
ZCBhbmQgaGVscHMgdG8gZ2VuZXJhdGUgYmxvY2tzIG9mCisgKglzeW1ib2xzIGZvciB0aGUgY29u
c29sZSBkcml2ZXIgYW5kIHRodXMgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAqCisgKglDYWxsZWQg
ZnJvbSB3cml0ZV9jaGFuIHVuZGVyIHRoZSB0dHkgbGF5ZXIgd3JpdGUgbG9jay4KICAqLworIAog
c3RhdGljIHNzaXplX3Qgb3Bvc3RfYmxvY2soc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCiAJCSAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqIGluYnVmLCB1bnNpZ25lZCBpbnQgbnIp
CiB7CkBAIC0zMDQsMTMgKzM2NiwyNyBAQAogfQogCiAKLQorLyoqCisgKglwdXRfY2hhcgktCXdy
aXRlIGNoYXJhY3RlciB0byBkcml2ZXIKKyAqCUBjOiBjaGFyYWN0ZXIgKG9yIHBhcnQgb2YgdW5p
Y29kZSBzeW1ib2wpCisgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKKyAqCisgKglRdWV1ZSBhIGJ5
dGUgdG8gdGhlIGRyaXZlciBsYXllciBmb3Igb3V0cHV0CisgKi8KKyAKIHN0YXRpYyBpbmxpbmUg
dm9pZCBwdXRfY2hhcih1bnNpZ25lZCBjaGFyIGMsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7
CiAJdHR5LT5kcml2ZXItPnB1dF9jaGFyKHR0eSwgYyk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVk
IG9ubHkgd2hlbiBMX0VDSE8odHR5KSBpcyB0cnVlLiAqLworLyoqCisgKgllY2hvX2NoYXIJLQll
Y2hvIGNoYXJhY3RlcnMKKyAqCUBjOiB1bmljb2RlIGJ5dGUgdG8gZWNobworICoJQHR0eTogdGVy
bWluYWwgZGV2aWNlCisgKgorICoJRWNobyB1c2VyIGlucHV0IGJhY2sgb250byB0aGUgc2NyZWVu
LiBUaGlzIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiAKKyAqCUxfRUNITyh0dHkpIGlzIHRydWUu
IENhbGxlZCBmcm9tIHRoZSBkcml2ZXIgcmVjZWl2ZV9idWYgcGF0aC4KKyAqLwogCiBzdGF0aWMg
dm9pZCBlY2hvX2NoYXIodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQog
ewpAQCAtMzMxLDYgKzQwNywxNiBAQAogCX0KIH0KIAorLyoqCisgKgllcmFzZXIJCS0JaGFuZGxl
IGVyYXNlIGZ1bmN0aW9uCisgKglAYzogY2hhcmFjdGVyIGlucHV0CisgKglAdHR5OiB0ZXJtaW5h
bCBkZXZpY2UKKyAqCisgKglQZXJmb3JtIGVyYXNlIGFuZCBuZWNjZXNzYXJ5IG91dHB1dCB3aGVu
IGFuIGVyYXNlIGNoYXJhY3RlciBpcworICoJcHJlc2VudCBpbiB0aGUgc3RyZWFtIGZyb20gdGhl
IGRyaXZlciBsYXllci4gSGFuZGxlcyB0aGUgY29tcGxleGl0aWVzCisgKglvZiBVVEYtOCBtdWx0
aWJ5dGUgc3ltYm9scy4KKyAqLworIAogc3RhdGljIHZvaWQgZXJhc2VyKHVuc2lnbmVkIGNoYXIg
Yywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAllbnVtIHsgRVJBU0UsIFdFUkFTRSwgS0lM
TCB9IGtpbGxfdHlwZTsKQEAgLTQ2Myw2ICs1NDksMTggQEAKIAkJZmluaXNoX2VyYXNpbmcodHR5
KTsKIH0KIAorLyoqCisgKglpc2lnCQktCWhhbmRsZSB0aGUgSVNJRyBvcHRpbworICoJQHNpZzog
c2lnbmFsCisgKglAdHR5OiB0ZXJtaW5hbAorICoJQGZsdXNoOiBmb3JjZSBmbHVzaAorICoKKyAq
CUNhbGxlZCB3aGVuIGEgc2lnbmFsIGlzIGJlaW5nIHNlbnQgZHVlIHRvIHRlcm1pbmFsIGlucHV0
LiBUaGlzCisgKgltYXkgY2F1cyB0ZXJtaW5hbCBmbHVzaGluZyB0byB0YWtlIHBsYWNlIGFjY29y
ZGluZyB0byB0aGUgdGVybWlvcworICoJc2V0dGluZ3MgYW5kIGNoYXJhY3RlciB1c2VkLiBDYWxs
ZWQgZnJvbSB0aGUgZHJpdmVyIHJlY2VpdmVfYnVmCisgKglwYXRoIHNvIHNlcmlhbGl6ZWQuCisg
Ki8KKyAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpc2lnKGludCBzaWcsIHN0cnVjdCB0dHlfc3RydWN0
ICp0dHksIGludCBmbHVzaCkKIHsKIAlpZiAodHR5LT5wZ3JwID4gMCkKQEAgLTQ3NCw2ICs1NzIs
MTYgQEAKIAl9CiB9CiAKKy8qKgorICoJbl90dHlfcmVjZWl2ZV9icmVhawktCWhhbmRsZSBicmVh
aworICoJQHR0eTogdGVybWluYWwKKyAqCisgKglBbiBSUzIzMiBicmVhayBldmVudCBoYXMgYmVl
biBoaXQgaW4gdGhlIGluY29taW5nIGJpdHN0cmVhbS4gVGhpcworICoJY2FuIGNhdXNlIGEgdmFy
aWV0eSBvZiBldmVudHMgZGVwZW5kaW5nIHVwb24gdGhlIHRlcm1pb3Mgc2V0dGluZ3MuCisgKgor
ICoJQ2FsbGVkIGZyb20gdGhlIHJlY2VpdmVfYnVmIHBhdGggc28gc2luZ2xlIHRocmVhZGVkLgor
ICovCisgCiBzdGF0aWMgaW5saW5lIHZvaWQgbl90dHlfcmVjZWl2ZV9icmVhayhzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5KQogewogCWlmIChJX0lHTkJSSyh0dHkpKQpAQCAtNDkwLDE5ICs1OTgsNDAg
QEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+cmVhZF93YWl0KTsKIH0KIAorLyoqCisg
KgluX3R0eV9yZWNlaXZlX292ZXJydW4JLQloYW5kbGUgb3ZlcnJ1biByZXBvcnRpbmcKKyAqCUB0
dHk6IHRlcm1pbmFsCisgKgorICoJRGF0YSBhcnJpdmVkIGZhc3RlciB0aGFuIHdlIGNvdWxkIHBy
b2Nlc3MgaXQuIFdoaWxlIHRoZSB0dHkKKyAqCWRyaXZlciBoYXMgZmxhZ2dlZCB0aGlzIHRoZSBi
aXRzIHRoYXQgd2VyZSBtaXNzZWQgYXJlIGdvbmUKKyAqCWZvcmV2ZXIuCisgKgorICoJQ2FsbGVk
IGZyb20gdGhlIHJlY2VpdmVfYnVmIHBhdGggc28gc2luZ2xlIHRocmVhZGVkLiBEb2VzIG5vdAor
ICoJbmVlZCBsb2NraW5nIGFzIG51bV9vdmVycnVuIGFuZCBvdmVycnVuX3RpbWUgYXJlIGZ1bmN0
aW9uCisgKglwcml2YXRlLgorICovCisgCiBzdGF0aWMgaW5saW5lIHZvaWQgbl90dHlfcmVjZWl2
ZV9vdmVycnVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJY2hhciBidWZbNjRdOwogCiAJ
dHR5LT5udW1fb3ZlcnJ1bisrOwogCWlmICh0aW1lX2JlZm9yZSh0dHktPm92ZXJydW5fdGltZSwg
amlmZmllcyAtIEhaKSkgewotCQlwcmludGsoIiVzOiAlZCBpbnB1dCBvdmVycnVuKHMpXG4iLCB0
dHlfbmFtZSh0dHksIGJ1ZiksCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlZCBpbnB1dCBv
dmVycnVuKHMpXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCiAJCSAgICAgICB0dHktPm51bV9vdmVy
cnVuKTsKIAkJdHR5LT5vdmVycnVuX3RpbWUgPSBqaWZmaWVzOwogCQl0dHktPm51bV9vdmVycnVu
ID0gMDsKIAl9CiB9CiAKKy8qKgorICoJbl90dHlfcmVjZWl2ZV9wYXJpdHlfZXJyb3IJLQllcnJv
ciBub3RpZmllcgorICoJQHR0eTogdGVybWluYWwgZGV2aWNlCisgKglAYzogY2hhcmFjdGVyCisg
KgorICoJUHJvY2VzcyBhIHBhcml0eSBlcnJvciBhbmQgcXVldWUgdGhlIHJpZ2h0IGRhdGEgdG8g
aW5kaWNhdGUKKyAqCXRoZSBlcnJvciBjYXNlIGlmIG5lY2Nlc3NhcnkuIExvY2tpbmcgYXMgcGVy
IG5fdHR5X3JlY2VpdmVfYnVmLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbl90dHlfcmVjZWl2
ZV9wYXJpdHlfZXJyb3Ioc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJICAgICAgdW5zaWdu
ZWQgY2hhciBjKQogewpAQCAtNTIwLDYgKzY0OSwxNiBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJs
ZSgmdHR5LT5yZWFkX3dhaXQpOwogfQogCisvKioKKyAqCW5fdHR5X3JlY2VpdmVfY2hhcgktCXBl
cmZvcm0gcHJvY2Vzc2luZworICoJQHR0eTogdGVybWluYWwgZGV2aWNlCisgKglAYzogY2hhcmFj
dGVyCisgKgorICoJUHJvY2VzcyBhbiBpbmRpdmlkdWFsIGNoYXJhY3RlciBvZiBpbnB1dCByZWNl
aXZlZCBmcm9tIHRoZSBkcml2ZXIuCisgKglUaGlzIGlzIHNlcmlhbGl6ZWQgd2l0aCByZXNwZWN0
IHRvIGl0c2VsZiBieSB0aGUgcnVsZXMgZm9yIHRoZSAKKyAqCWRyaXZlciBhYm92ZS4KKyAqLwor
CiBzdGF0aWMgaW5saW5lIHZvaWQgbl90dHlfcmVjZWl2ZV9jaGFyKHN0cnVjdCB0dHlfc3RydWN0
ICp0dHksIHVuc2lnbmVkIGNoYXIgYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzEx
LDYgKzg1MCwxNiBAQAogCXB1dF90dHlfcXVldWUoYywgdHR5KTsKIH0JCiAKKy8qKgorICoJbl90
dHlfcmVjZWl2ZV9yb29tCS0JcmVjZWl2ZSBzcGFjZQorICoJQHR0eTogdGVybWluYWwKKyAqCisg
KglDYWxsZWQgYnkgdGhlIGRyaXZlciB0byBmaW5kIG91dCBob3cgbXVjaCBkYXRhIGl0IGlzCisg
KglwZXJtaXR0ZWQgdG8gZmVlZCB0byB0aGUgbGluZSBkaXNjaXBsaW5lIHdpdGhvdXQgYW55IGJl
aW5nIGxvc3QKKyAqCWFuZCB0aHVzIHRvIG1hbmFnZSBmbG93IGNvbnRyb2wuIE5vdCBzZXJpYWxp
emVkLiBBbnN3ZXJzIGZvciB0aGUKKyAqCSJpbnN0YW50Ii4KKyAqLworIAogc3RhdGljIGludCBu
X3R0eV9yZWNlaXZlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpbnQJbGVmdCA9
IE5fVFRZX0JVRl9TSVpFIC0gdHR5LT5yZWFkX2NudCAtIDE7CkBAIC03MjksMTAgKzg3OCwxMyBA
QAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVxdWlyZWQgZm9yIHRoZSBwdHlzLCBzZXJpYWwg
ZHJpdmVyIGV0Yy4gc2luY2UgcHJvY2Vzc2VzCi0gKiB0aGF0IGF0dGFjaCB0aGVtc2VsdmVzIHRv
IHRoZSBtYXN0ZXIgYW5kIHJlbHkgb24gQVNZTkMKLSAqIElPIG11c3QgYmUgd29rZW4gdXAKKy8q
KgorICoJbl90dHlfd3JpdGVfd2FrZXVwCS0JYXN5bmNocm9ub3VzIEkvTyBub3RpZmllcgorICoJ
QHR0eTogdHR5IGRldmljZQorICoKKyAqCVJlcXVpcmVkIGZvciB0aGUgcHR5cywgc2VyaWFsIGRy
aXZlciBldGMuIHNpbmNlIHByb2Nlc3NlcworICoJdGhhdCBhdHRhY2ggdGhlbXNlbHZlcyB0byB0
aGUgbWFzdGVyIGFuZCByZWx5IG9uIEFTWU5DCisgKglJTyBtdXN0IGJlIHdva2VuIHVwCiAgKi8K
IAogc3RhdGljIHZvaWQgbl90dHlfd3JpdGVfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkp
CkBAIC03NDUsNiArODk3LDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqCW5fdHR5X3JlY2Vp
dmVfYnVmCS0JZGF0YSByZWNlaXZlCisgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKKyAqCUBjcDog
YnVmZmVyCisgKglAZnA6IGZsYWcgYnVmZmVyCisgKglAY291bnQ6IGNoYXJhY3RlcnMKKyAqCisg
KglDYWxsZWQgYnkgdGhlIHRlcm1pbmFsIGRyaXZlciB3aGVuIGEgYmxvY2sgb2YgY2hhcmFjdGVy
cyBoYXMKKyAqCWJlZW4gcmVjZWl2ZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJv
bSBzb2Z0IGNvbnRleHRzCisgKglub3QgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gVGhlIGRyaXZl
ciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nCisgKgljYWxscyBvbmUgYXQgYSB0aW1lIGFuZCBp
biBvcmRlciAob3IgdXNpbmcgZmx1c2hfdG9fbGRpc2MpCisgKi8KKyAKIHN0YXRpYyB2b2lkIG5f
dHR5X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKmNwLAogCQkJICAgICAgY2hhciAqZnAsIGludCBjb3VudCkKIHsKQEAgLTgyOCw2ICs5OTMs
MTggQEAKIAkgICAgICAgIGN1cnJlbnQtPnNpZ2hhbmQtPmFjdGlvbltzaWctMV0uc2Euc2FfaGFu
ZGxlciA9PSBTSUdfSUdOKTsKIH0KIAorLyoqCisgKgluX3R0eV9zZXRfdGVybWlvcwktCXRlcm1p
b3MgZGF0YSBjaGFuZ2VkCisgKglAdHR5OiB0ZXJtaW5hbAorICoJQG9sZDogcHJldmlvdXMgZGF0
YQorICoKKyAqCUNhbGxlZCBieSB0aGUgdHR5IGxheWVyIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0
ZXJtaW9zIGZsYWdzIHNvCisgKgl0aGF0IHRoZSBsaW5lIGRpc2NpcGxpbmUgY2FuIHBsYW4gYWhl
YWQuIFRoaXMgZnVuY3Rpb24gY2Fubm90IHNsZWVwCisgKglhbmQgaXMgcHJvdGVjdGVkIGZyb20g
cmUtZW50cnkgYnkgdGhlIHR0eSBsYXllci4gVGhlIHVzZXIgaXMgCisgKglndWFyYW50ZWVkIHRo
YXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSByZS1lbnRlcmVkIG9yIGluIHByb2dyZXNzCisg
Kgl3aGVuIHRoZSBsZGlzYyBpcyBjbG9zZWQuCisgKi8KKyAKIHN0YXRpYyB2b2lkIG5fdHR5X3Nl
dF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKQog
ewogCWlmICghdHR5KQpAQCAtODQzLDcgKzEwMjAsNiBAQAogCSAgICBJX0lDUk5MKHR0eSkgfHwg
SV9JTkxDUih0dHkpIHx8IExfSUNBTk9OKHR0eSkgfHwKIAkgICAgSV9JWE9OKHR0eSkgfHwgTF9J
U0lHKHR0eSkgfHwgTF9FQ0hPKHR0eSkgfHwKIAkgICAgSV9QQVJNUksodHR5KSkgewotCQlsb2Nh
bF9pcnFfZGlzYWJsZSgpOyAvLyBGSVhNRTogaXMgdGhpcyBzYWZlPwogCQltZW1zZXQodHR5LT5w
cm9jZXNzX2NoYXJfbWFwLCAwLCAyNTYvOCk7CiAKIAkJaWYgKElfSUdOQ1IodHR5KSB8fCBJX0lD
Uk5MKHR0eSkpCkBAIC04NzksNyArMTA1NSw2IEBACiAJCQlzZXRfYml0KFNVU1BfQ0hBUih0dHkp
LCB0dHktPnByb2Nlc3NfY2hhcl9tYXApOwogCQl9CiAJCWNsZWFyX2JpdChfX0RJU0FCTEVEX0NI
QVIsIHR0eS0+cHJvY2Vzc19jaGFyX21hcCk7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsgLy8gRklY
TUU6IGlzIHRoaXMgc2FmZT8KIAkJdHR5LT5yYXcgPSAwOwogCQl0dHktPnJlYWxfcmF3ID0gMDsK
IAl9IGVsc2UgewpAQCAtODkzLDYgKzEwNjgsMTYgQEAKIAl9CiB9CiAKKy8qKgorICoJbl90dHlf
Y2xvc2UJCS0JY2xvc2UgdGhlIGxkaXNjIGZvciB0aGlzIHR0eQorICoJQHR0eTogZGV2aWNlCisg
KgorICoJQ2FsbGVkIGZyb20gdGhlIHRlcm1pbmFsIGxheWVyIHdoZW4gdGhpcyBsaW5lIGRpc2Np
cGxpbmUgaXMgCisgKgliZWluZyBzaHV0IGRvd24sIGVpdGhlciBiZWNhdXNlIG9mIGEgY2xvc2Ug
b3IgYmVjc3VzZSBvZiBhIAorICoJZGlzY2lwbGluZSBjaGFuZ2UuIFRoZSBmdW5jdGlvbiB3aWxs
IG5vdCBiZSBjYWxsZWQgd2hpbGUgb3RoZXIKKyAqCWxkaXNjIG1ldGhvZHMgYXJlIGluIHByb2dy
ZXNzLgorICovCisgCiBzdGF0aWMgdm9pZCBuX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5KQogewogCW5fdHR5X2ZsdXNoX2J1ZmZlcih0dHkpOwpAQCAtOTAyLDExICsxMDg3LDIyIEBA
CiAJfQogfQogCisvKioKKyAqCW5fdHR5X29wZW4JCS0Jb3BlbiBhbiBsZGlzYworICoJQHR0eTog
dGVybWluYWwgdG8gb3BlbgorICoKKyAqCUNhbGxlZCB3aGVuIHRoaXMgbGluZSBkaXNjaXBsaW5l
IGlzIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSAKKyAqCXRlcm1pbmFsIGRldmljZS4gQ2FuIHNsZWVw
LiBDYWxsZWQgc2VyaWFsaXplZCBzbyB0aGF0IG5vCisgKglvdGhlciBldmVudHMgd2lsbCBvY2N1
ciBpbiBwYXJhbGxlbC4gTm8gZnVydGhlciBvcGVuIHdpbGwgb2NjdXIKKyAqCXVudGlsIGEgY2xv
c2UuCisgKi8KKwogc3RhdGljIGludCBuX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkp
CiB7CiAJaWYgKCF0dHkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVGhpcyBvbmUgaXMgdWds
eS4gQ3VycmVudGx5IGEgbWFsbG9jIGZhaWx1cmUgaGVyZSBjYW4gcGFuaWMgKi8KIAlpZiAoIXR0
eS0+cmVhZF9idWYpIHsKIAkJdHR5LT5yZWFkX2J1ZiA9IGFsbG9jX2J1ZigpOwogCQlpZiAoIXR0
eS0+cmVhZF9idWYpCkBAIC05MzIsMTQgKzExMjgsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoK
LSAqIEhlbHBlciBmdW5jdGlvbiB0byBzcGVlZCB1cCByZWFkX2NoYW4uICBJdCBpcyBvbmx5IGNh
bGxlZCB3aGVuCi0gKiBJQ0FOT04gaXMgb2ZmOyBpdCBjb3BpZXMgY2hhcmFjdGVycyBzdHJhaWdo
dCBmcm9tIHRoZSB0dHkgcXVldWUgdG8KLSAqIHVzZXIgc3BhY2UgZGlyZWN0bHkuICBJdCBjYW4g
YmUgcHJvZml0YWJseSBjYWxsZWQgdHdpY2U7IG9uY2UgdG8KLSAqIGRyYWluIHRoZSBzcGFjZSBm
cm9tIHRoZSB0YWlsIHBvaW50ZXIgdG8gdGhlIChwaHlzaWNhbCkgZW5kIG9mIHRoZQotICogYnVm
ZmVyLCBhbmQgb25jZSB0byBkcmFpbiB0aGUgc3BhY2UgZnJvbSB0aGUgKHBoeXNpY2FsKSBiZWdp
bm5pbmcgb2YKLSAqIHRoZSBidWZmZXIgdG8gaGVhZCBwb2ludGVyLgorLyoqCisgKiAJY29weV9m
cm9tX3JlYWRfYnVmCS0JY29weSByZWFkIGRhdGEgZGlyZWN0bHkKKyAqCUB0dHk6IHRlcm1pbmFs
IGRldmljZQorICoJQGI6IHVzZXIgZGF0YQorICoJQG5yOiBzaXplIG9mIGRhdGEKKyAqCisgKglI
ZWxwZXIgZnVuY3Rpb24gdG8gc3BlZWQgdXAgcmVhZF9jaGFuLiAgSXQgaXMgb25seSBjYWxsZWQg
d2hlbgorICoJSUNBTk9OIGlzIG9mZjsgaXQgY29waWVzIGNoYXJhY3RlcnMgc3RyYWlnaHQgZnJv
bSB0aGUgdHR5IHF1ZXVlIHRvCisgKgl1c2VyIHNwYWNlIGRpcmVjdGx5LiAgSXQgY2FuIGJlIHBy
b2ZpdGFibHkgY2FsbGVkIHR3aWNlOyBvbmNlIHRvCisgKglkcmFpbiB0aGUgc3BhY2UgZnJvbSB0
aGUgdGFpbCBwb2ludGVyIHRvIHRoZSAocGh5c2ljYWwpIGVuZCBvZiB0aGUKKyAqCWJ1ZmZlciwg
YW5kIG9uY2UgdG8gZHJhaW4gdGhlIHNwYWNlIGZyb20gdGhlIChwaHlzaWNhbCkgYmVnaW5uaW5n
IG9mCisgKgl0aGUgYnVmZmVyIHRvIGhlYWQgcG9pbnRlci4KKyAqCisgKglDYWxsZWQgdW5kZXIg
dGhlIHR0eS0+YXRvbWljX3JlYWQgc2VtIGFuZCB3aXRoIFRUWV9ET05UX0ZMSVAgc2V0CisgKgog
ICovCisgCiBzdGF0aWMgaW5saW5lIGludCBjb3B5X2Zyb21fcmVhZF9idWYoc3RydWN0IHR0eV9z
dHJ1Y3QgKnR0eSwKIAkJCQkgICAgICB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKmIsCiAJCQkJICAg
ICAgc2l6ZV90ICpucikKQEAgLTk3MCwyNSArMTE3NSwxOCBAQAogCiBleHRlcm4gc3NpemVfdCBy
ZWRpcmVjdGVkX3R0eV93cml0ZShzdHJ1Y3QgZmlsZSAqLGNvbnN0IGNoYXIgKixzaXplX3QsbG9m
Zl90ICopOwogCi1zdGF0aWMgc3NpemVfdCByZWFkX2NoYW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0
eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6
ZV90IG5yKQorLyoqCisgKglqb2JfY29udHJvbAkJLQljaGVjayBqb2IgY29udHJvbAorICoJQHR0
eTogdHR5CisgKglAZmlsZTogZmlsZSBoYW5kbGUKKyAqCisgKglQZXJmb3JtIGpvYiBjb250cm9s
IG1hbmFnZW1lbnQgY2hlY2tzIG9uIHRoaXMgZmlsZS90dHkgZGVzY3JpcHRvcgorICoJYW5kIGlm
IGFwcHJvcHJpYXRlIHNlbmQgYW55IG5lZWRlZCBzaWduYWxzIGFuZCByZXR1cm4gYSBuZWdhdGl2
ZSAKKyAqCWVycm9yIGNvZGUgaWYgYWN0aW9uIHNob3VsZCBiZSB0YWtlbi4KKyAqLworIAorc3Rh
dGljIGludCBqb2JfY29udHJvbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAq
ZmlsZSkKIHsKLQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqYiA9IGJ1ZjsKLQlERUNMQVJFX1dBSVRR
VUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQgYzsKLQlpbnQgbWluaW11bSwgdGltZTsKLQlzc2l6
ZV90IHJldHZhbCA9IDA7Ci0Jc3NpemVfdCBzaXplOwotCWxvbmcgdGltZW91dDsKLQl1bnNpZ25l
ZCBsb25nIGZsYWdzOwotCi1kb19pdF9hZ2FpbjoKLQotCWlmICghdHR5LT5yZWFkX2J1Zikgewot
CQlwcmludGsoIm5fdHR5X3JlYWRfY2hhbjogY2FsbGVkIHdpdGggcmVhZF9idWYgPT0gTlVMTD8h
P1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCS8qIEpvYiBjb250cm9sIGNoZWNrIC0tIG11
c3QgYmUgZG9uZSBhdCBzdGFydCBhbmQgYWZ0ZXIKIAkgICBldmVyeSBzbGVlcCAoUE9TSVguMSA3
LjEuMS40KS4gKi8KIAkvKiBOT1RFOiBub3QgeWV0IGRvbmUgYWZ0ZXIgZXZlcnkgc2xlZXAgcGVu
ZGluZyBhIHRob3JvdWdoCkBAIC0xMDA2LDcgKzEyMDQsNDggQEAKIAkJCXJldHVybiAtRVJFU1RB
UlRTWVM7CiAJCX0KIAl9CisJcmV0dXJuIDA7Cit9CisgCisKKy8qKgorICoJcmVhZF9jaGFuCQkt
CXJlYWQgZnVuY3Rpb24gZm9yIHR0eQorICoJQHR0eTogdHR5IGRldmljZQorICoJQGZpbGU6IGZp
bGUgb2JqZWN0CisgKglAYnVmOiB1c2Vyc3BhY2UgYnVmZmVyIHBvaW50ZXIKKyAqCUBucjogc2l6
ZSBvZiBJL08KKyAqCisgKglQZXJmb3JtIHJlYWRzIGZvciB0aGUgbGluZSBkaXNjaXBsaW5lLiBX
ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZQorICoJbGluZSBkaXNjaXBsaW5lIHdpbGwgbm90IGJl
IGNsb3NlZCB1bmRlciB1cyBidXQgd2UgbWF5IGdldCBtdWx0aXBsZQorICoJcGFyYWxsZWwgcmVh
ZGVycyBhbmQgbXVzdCBoYW5kbGUgdGhpcyBvdXJzZWx2ZXMuIFdlIG1heSBhbHNvIGdldAorICoJ
YSBoYW5ndXAuIEFsd2F5cyBjYWxsZWQgaW4gdXNlciBjb250ZXh0LCBtYXkgc2xlZXAuCisgKgor
ICoJVGhpcyBjb2RlIG11c3QgYmUgc3VyZSBuZXZlciB0byBzbGVlcCB0aHJvdWdoIGEgaGFuZ3Vw
LgorICovCisgCitzdGF0aWMgc3NpemVfdCByZWFkX2NoYW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0
eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6
ZV90IG5yKQoreworCXVuc2lnbmVkIGNoYXIgX191c2VyICpiID0gYnVmOworCURFQ0xBUkVfV0FJ
VFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWludCBjOworCWludCBtaW5pbXVtLCB0aW1lOworCXNz
aXplX3QgcmV0dmFsID0gMDsKKwlzc2l6ZV90IHNpemU7CisJbG9uZyB0aW1lb3V0OworCXVuc2ln
bmVkIGxvbmcgZmxhZ3M7CisKK2RvX2l0X2FnYWluOgorCisJaWYgKCF0dHktPnJlYWRfYnVmKSB7
CisJCXByaW50aygibl90dHlfcmVhZF9jaGFuOiBjYWxsZWQgd2l0aCByZWFkX2J1ZiA9PSBOVUxM
PyE/XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCisJYyA9IGpvYl9jb250cm9sKHR0eSwgZmls
ZSk7CisJaWYoYyA8IDApCisJCXJldHVybiBjOworCQogCW1pbmltdW0gPSB0aW1lID0gMDsKIAl0
aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CiAJaWYgKCF0dHktPmljYW5vbikgewpAQCAt
MTAyOCw2ICsxMjY3LDkgQEAKIAkJfQogCX0KIAorCS8qCisJICoJSW50ZXJuYWwgc2VyaWFsaXph
dGlvbiBvZiByZWFkcy4KKwkgKi8KIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsK
IAkJaWYgKGRvd25fdHJ5bG9jaygmdHR5LT5hdG9taWNfcmVhZCkpCiAJCQlyZXR1cm4gLUVBR0FJ
TjsKQEAgLTExNzcsNiArMTQxOSwyMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICoJ
d3JpdGVfY2hhbgkJLQl3cml0ZSBmdW5jdGlvbiBmb3IgdHR5CisgKglAdHR5OiB0dHkgZGV2aWNl
CisgKglAZmlsZTogZmlsZSBvYmplY3QKKyAqCUBidWY6IHVzZXJzcGFjZSBidWZmZXIgcG9pbnRl
cgorICoJQG5yOiBzaXplIG9mIEkvTworICoKKyAqCVdyaXRlIGZ1bmN0aW9uIG9mIHRoZSB0ZXJt
aW5hbCBkZXZpY2UuIFRoaXMgaXMgc2VyaWFsaXplZCB3aXRoCisgKglyZXNwZWN0IHRvIG90aGVy
IHdyaXRlIGNhbGxlcnMgYnV0IG5vdCB0byB0ZXJtaW9zIGNoYW5nZXMsIHJlYWRzCisgKglhbmQg
b3RoZXIgc3VjaCBldmVudHMuIFdlIG11c3QgYmUgY2FyZWZ1bCB3aXRoIE5fVFRZIGFzIHRoZSBy
ZWNlaXZlCisgKgljb2RlIHdpbGwgZWNobyBjaGFyYWN0ZXJzLCB0aHVzIGNhbGxpbmcgZHJpdmVy
IHdyaXRlIG1ldGhvZHMuCisgKgorICoJVGhpcyBjb2RlIG11c3QgYmUgc3VyZSBuZXZlciB0byBz
bGVlcCB0aHJvdWdoIGEgaGFuZ3VwLgorICovCisgCiBzdGF0aWMgc3NpemVfdCB3cml0ZV9jaGFu
KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCQkgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgbnIpCiB7CkBAIC0xMjQ2LDcgKzE1
MDMsMjUgQEAKIAlyZXR1cm4gKGIgLSBidWYpID8gYiAtIGJ1ZiA6IHJldHZhbDsKIH0KIAotLyog
Q2FsbGVkIHdpdGhvdXQgdGhlIGtlcm5lbCBsb2NrIGhlbGQgLSBmaW5lICovCisvKioKKyAqCW5v
cm1hbF9wb2xsCQktCXBvbGwgbWV0aG9kIGZvciBOX1RUWQorICoJQHR0eTogdGVybWluYWwgZGV2
aWNlCisgKglAZmlsZTogZmlsZSBhY2Nlc3NpbmcgaXQKKyAqCUB3YWl0OiBwb2xsIHRhYmxlCisg
KgorICoJQ2FsbGVkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBhc2tlZCB0byBwb2xsKCkg
Zm9yIGRhdGEgb3IKKyAqCWZvciBzcGVjaWFsIGV2ZW50cy4gVGhpcyBjb2RlIGlzIG5vdCBzZXJp
YWxpemVkIHdpdGggcmVzcGVjdCB0bworICoJb3RoZXIgZXZlbnRzIHNhdmUgb3Blbi9jbG9zZS4K
KyAqCisgKglUaGlzIGNvZGUgbXVzdCBiZSBzdXJlIG5ldmVyIHRvIHNsZWVwIHRocm91Z2ggYSBo
YW5ndXAuCisgKglDYWxsZWQgd2l0aG91dCB0aGUga2VybmVsIGxvY2sgaGVsZCAtIGZpbmUKKyAq
CisgKglGSVhNRTogaWYgc29tZW9uZSBjaGFuZ2VzIHRoZSBWTUlOIG9yIGRpc2NpcGxpbmUgc2V0
dGluZ3MgZm9yIHRoZQorICoJdGVybWluYWwgd2hpbGUgYW5vdGhlciBwcm9jZXNzIGlzIGluIHBv
bGwoKSB0aGUgcG9sbCBkb2VzIG5vdAorICoJcmVjb21wdXRlIHRoZSBuZXcgbGltaXRzLiBQb3Nz
aWJseSBzZXRfdGVybWlvcyBzaG91bGQgaXNzdWUKKyAqCWEgcmVhZCB3YWtldXAgdG8gZml4IHRo
aXMgYnVnLgorICovCisgCiBzdGF0aWMgdW5zaWduZWQgaW50IG5vcm1hbF9wb2xsKHN0cnVjdCB0
dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7
CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtMTI4Nyw2ICsxNTYyLDcgQEAKIAluX3R0eV9p
b2N0bCwJCS8qIGlvY3RsICovCiAJbl90dHlfc2V0X3Rlcm1pb3MsCS8qIHNldF90ZXJtaW9zICov
CiAJbm9ybWFsX3BvbGwsCQkvKiBwb2xsICovCisJTlVMTCwJCQkvKiBoYW5ndXAgKi8KIAluX3R0
eV9yZWNlaXZlX2J1ZiwJLyogcmVjZWl2ZV9idWYgKi8KIAluX3R0eV9yZWNlaXZlX3Jvb20sCS8q
IHJlY2VpdmVfcm9vbSAqLwogCW5fdHR5X3dyaXRlX3dha2V1cAkvKiB3cml0ZV93YWtldXAgKi8K
ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtf
Y3MuYyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKLS0tIGxp
bnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCTIwMDQtMDgt
MTMgMjI6MzY6NDUuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIv
cGNtY2lhL3N5bmNsaW5rX2NzLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi41MDk0NDQzMjEgLTA4MDAK
QEAgLTUzMSw2ICs1MzEsNDAgQEAKIAlyZXR1cm4gbWdzbHBjX2dldF90ZXh0X3B0cjsKIH0KIAor
LyoqCisgKiBsaW5lIGRpc2NpcGxpbmUgY2FsbGJhY2sgd3JhcHBlcnMKKyAqCisgKiBUaGUgd3Jh
cHBlcnMgbWFpbnRhaW4gbGluZSBkaXNjaXBsaW5lIHJlZmVyZW5jZXMKKyAqIHdoaWxlIGNhbGxp
bmcgaW50byB0aGUgbGluZSBkaXNjaXBsaW5lLgorICoKKyAqIGxkaXNjX2ZsdXNoX2J1ZmZlciAt
IGZsdXNoIGxpbmUgZGlzY2lwbGluZSByZWNlaXZlIGJ1ZmZlcnMKKyAqIGxkaXNjX3JlY2VpdmVf
YnVmICAtIHBhc3MgcmVjZWl2ZSBkYXRhIHRvIGxpbmUgZGlzY2lwbGluZQorICovCisKK3N0YXRp
YyB2b2lkIGxkaXNjX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0
cnVjdCB0dHlfbGRpc2MgKmxkID0gdHR5X2xkaXNjX3JlZih0dHkpOworCWlmIChsZCkgeworCQlp
ZiAobGQtPmZsdXNoX2J1ZmZlcikKKwkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJdHR5X2xk
aXNjX2RlcmVmKGxkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxkaXNjX3JlY2VpdmVfYnVmKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkgICAgICBjb25zdCBfX3U4ICpkYXRhLCBjaGFyICpm
bGFncywgaW50IGNvdW50KQoreworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCWlmICghdHR5KQor
CQlyZXR1cm47CisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYgKGxkKSB7CisJCWlmIChs
ZC0+cmVjZWl2ZV9idWYpCisJCQlsZC0+cmVjZWl2ZV9idWYodHR5LCBkYXRhLCBmbGFncywgY291
bnQpOworCQl0dHlfbGRpc2NfZGVyZWYobGQpOworCX0KK30KKwogc3RhdGljIGRldl9saW5rX3Qg
Km1nc2xwY19hdHRhY2godm9pZCkKIHsKICAgICBNR1NMUENfSU5GTyAqaW5mbzsKQEAgLTk4NCwx
MyArMTAxOCw3IEBACiAJCXByaW50aygiYmhfdHJhbnNtaXQoKSBlbnRyeSBvbiAlc1xuIiwgaW5m
by0+ZGV2aWNlX25hbWUpOwogCiAJaWYgKHR0eSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8
PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVw
KSB7Ci0JCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0JIICkKLQkJCQlwcmludGso
ICIlcyglZCk6Y2FsbGluZyBsZGlzYy53cml0ZV93YWtldXAgb24gJXNcbiIsCi0JCQkJCV9fRklM
RV9fLF9fTElORV9fLGluZm8tPmRldmljZV9uYW1lKTsKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkodHR5KTsKLQkJfQorCQl0dHlfd2FrZXVwKHR0eSk7CiAJCXdha2VfdXBfaW50ZXJydXB0
aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKIAl9CiB9CkBAIC0xODc1LDExICsxOTAzLDkgQEAKIAlp
bmZvLT50eF9jb3VudCA9IGluZm8tPnR4X3B1dCA9IGluZm8tPnR4X2dldCA9IDA7CiAJZGVsX3Rp
bWVyKCZpbmZvLT50eF90aW1lcik7CQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxv
Y2ssZmxhZ3MpOwotCQorCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQp
OwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0
dHkpOworCXR0eV93YWtldXAodHR5KTsKIH0KIAogLyogU2VuZCBhIGhpZ2gtcHJpb3JpdHkgWE9O
L1hPRkYgY2hhcmFjdGVyCkBAIC0yNTg4LDkgKzI2MTQsOCBAQAogCiAJaWYgKHR0eS0+ZHJpdmVy
LT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQkJCi0J
aWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0
dHkpOworCisJbGRpc2NfZmx1c2hfYnVmZmVyKHR0eSk7CiAJCQogCXNodXRkb3duKGluZm8pOwog
CQpAQCAtNDA1OSwxMSArNDA4NCw3IEBACiAJCQl9IAogCQkJZWxzZQogI2VuZGlmCi0JCQl7Ci0J
CQkJLyogQ2FsbCB0aGUgbGluZSBkaXNjaXBsaW5lIHJlY2VpdmUgY2FsbGJhY2sgZGlyZWN0bHku
ICovCi0JCQkJaWYgKHR0eSAmJiB0dHktPmxkaXNjLnJlY2VpdmVfYnVmKQotCQkJCQl0dHktPmxk
aXNjLnJlY2VpdmVfYnVmKHR0eSwgYnVmLT5kYXRhLCBpbmZvLT5mbGFnX2J1ZiwgZnJhbWVzaXpl
KTsKLQkJCX0KKwkJCQlsZGlzY19yZWNlaXZlX2J1Zih0dHksIGJ1Zi0+ZGF0YSwgaW5mby0+Zmxh
Z19idWYsIGZyYW1lc2l6ZSk7CiAJCX0KIAl9CiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci9wY3h4LmMgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3BjeHguYwotLS0g
bGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvcGN4eC5jCTIwMDQtMDgtMTMgMjI6Mzc6MTUu
MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvcGN4eC5jCTIwMDQt
MTEtMjggMDQ6NDk6NDIuNTMyNDQwNTg0IC0wODAwCkBAIC01MzgsMjggKzUzOCwxMSBAQAogCQog
CQlpZih0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQkJdHR5LT5kcml2ZXItPmZsdXNoX2J1
ZmZlcih0dHkpOwotCQlpZih0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJCXR0eS0+bGRpc2Mu
Zmx1c2hfYnVmZmVyKHR0eSk7CisJCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCQlzaHV0ZG93bihp
bmZvKTsKIAkJdHR5LT5jbG9zaW5nID0gMDsKIAkJaW5mby0+ZXZlbnQgPSAwOwogCQlpbmZvLT50
dHkgPSBOVUxMOwotI2lmbmRlZiBNT0RVTEUKLS8qIGxkaXNjc1tdIGlzIG5vdCBhdmFpbGFibGUg
aW4gYSBNT0RVTEUKLSoqIHdvcnRoIG5vdGluZyB0aGF0IHdoaWxlIEknbSBub3Qgc3VyZSB3aGF0
IHRoaXMgaHVuayBvZiBjb2RlIGlzIHN1cHBvc2VkCi0qKiB0byBkbywgaXQgaXMgbm90IHByZXNl
bnQgaW4gdGhlIHNlcmlhbC5jIGRyaXZlci4gIEhtbW0uICBJZiB5b3Uga25vdywKLSoqIHBsZWFz
ZSBzZW5kIG1lIGEgbm90ZS4gIGJyaWFuQGlsaW54LmNvbQotKiogRG9uJ3Qga25vdyBlaXRoZXIg
d2hhdCB0aGlzIGlzIHN1cHBvc2VkIHRvIGRvIGNocmlzdG9waEBsYW1ldGVyLmNvbS4KLSovCi0J
CWlmKHR0eS0+bGRpc2MubnVtICE9IGxkaXNjc1tOX1RUWV0ubnVtKSB7Ci0JCQlpZih0dHktPmxk
aXNjLmNsb3NlKQotCQkJCSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCQkJdHR5LT5sZGlzYyA9
IGxkaXNjc1tOX1RUWV07Ci0JCQl0dHktPnRlcm1pb3MtPmNfbGluZSA9IE5fVFRZOwotCQkJaWYo
dHR5LT5sZGlzYy5vcGVuKQotCQkJCSh0dHktPmxkaXNjLm9wZW4pKHR0eSk7Ci0JCX0KLSNlbmRp
ZgogCQlpZihpbmZvLT5ibG9ja2VkX29wZW4pIHsKIAkJCWlmKGluZm8tPmNsb3NlX2RlbGF5KSB7
CiAJCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CkBAIC04MDAsOSArNzgz
LDcgQEAKIAltZW1vZmYoY2gpOwogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCi0Jd2FrZV91cF9p
bnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCWlmKCh0dHktPmZsYWdzICYgKDEgPDwg
VFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5
LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0
aWMgdm9pZCBwY3hlX2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0xNjc1
LDEwICsxNjU2LDcgQEAKIAkJCWlmIChldmVudCAmIExPV1RYX0lORCkgewogCQkJCWlmIChjaC0+
c3RhdHVzZmxhZ3MgJiBMT1dXQUlUKSB7CiAJCQkJCWNoLT5zdGF0dXNmbGFncyAmPSB+TE9XV0FJ
VDsKLQkJCQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYm
Ci0JCQkJCQl0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCQkJCSh0dHktPmxkaXNjLndyaXRl
X3dha2V1cCkodHR5KTsKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dh
aXQpOworCQkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQkJfQogCQkJfQogCkBAIC0xNjg2LDEwICsx
NjY0LDcgQEAKIAkJCQljaC0+c3RhdHVzZmxhZ3MgJj0gflRYQlVTWTsKIAkJCQlpZiAoY2gtPnN0
YXR1c2ZsYWdzICYgRU1QVFlXQUlUKSB7CiAJCQkJCWNoLT5zdGF0dXNmbGFncyAmPSB+RU1QVFlX
QUlUOwotCQkJCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkg
JiYKLQkJCQkJCXR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJCQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOwotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVf
d2FpdCk7CisJCQkJCXR0eV93YWtldXAodHR5KTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIxNjUs
OCArMjE0MCw3IEBACiAJCQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwogCQkJfQogCQkJ
ZWxzZSB7Ci0JCQkJaWYodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQkJCXR0eS0+bGRpc2Mu
Zmx1c2hfYnVmZmVyKHR0eSk7CisJCQkJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJCQl9CiAKIAkJ
CS8qIEZhbGwgVGhydSAqLwpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFy
L3B0eS5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9wdHkuYwotLS0gbGludXgtMi42Ljgub3Jp
Zy9kcml2ZXJzL2NoYXIvcHR5LmMJMjAwNC0wOC0xMyAyMjozNjo0NC4wMDAwMDAwMDAgLTA3MDAK
KysrIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9wdHkuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjU0
NjQzODMxMCAtMDgwMApAQCAtOTEsMTAgKzkxLDcgQEAKIAlpZiAoIW9fdHR5KQogCQlyZXR1cm47
CiAKLQlpZiAoKG9fdHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgot
CSAgICBvX3R0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkob190dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkob190dHkpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb190dHktPndyaXRlX3dhaXQp
OworCXR0eV93YWtldXAob190dHkpOwogCXNldF9iaXQoVFRZX1RIUk9UVExFRCwgJnR0eS0+Zmxh
Z3MpOwogfQogCkBAIC0xMDcsNiArMTA0LDEwIEBACiAgKiAgICgyKSBhdm9pZCByZWR1bmRhbnQg
Y29weWluZyBmb3IgY2FzZXMgd2hlcmUgY291bnQgPj4gcmVjZWl2ZV9yb29tCiAgKiBOLkIuIENh
bGxzIGZyb20gdXNlciBzcGFjZSBtYXkgbm93IHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQg
b2YKICAqIGEgY291bnQuCisgKgorICogRklYTUU6IE91ciBwdHlfd3JpdGUgbWV0aG9kIGlzIGNh
bGxlZCB3aXRoIG91ciBsZGlzYyBsb2NrIGhlbGQgYnV0CisgKiBub3Qgb3VyIHBhcnRuZXJzLiBX
ZSBjYW4ndCBqdXN0IHRha2UgdGhlIG90aGVyIG9uZSBibGluZGx5IHdpdGhvdXQKKyAqIHJpc2tp
bmcgZGVhZGxvY2tzLiAgVGhlcmUgaXMgYWxzbyB0aGUgc21hbGwgbWF0dGVyIG9mIFRUWV9ET05U
X0ZMSVAKICAqLwogc3RhdGljIGludCBwdHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHks
IGludCBmcm9tX3VzZXIsCiAJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBj
b3VudCkKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9yaXNjb204LmMg
bGludXgtMi42LjgvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwotLS0gbGludXgtMi42Ljgub3JpZy9k
cml2ZXJzL2NoYXIvcmlzY29tOC5jCTIwMDQtMDgtMTMgMjI6MzY6NTcuMDAwMDAwMDAwIC0wNzAw
CisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCTIwMDQtMTEtMjggMDQ6NDk6
NDIuNTYyNDM1NzExIC0wODAwCkBAIC0xMTI3LDggKzExMjcsOCBAQAogCXJjX3NodXRkb3duX3Bv
cnQoYnAsIHBvcnQpOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRy
aXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQot
CQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwor
CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlwb3J0LT5ldmVudCA9IDA7CiAJcG9ydC0+dHR5ID0gTlVM
TDsKQEAgLTEzMDEsOSArMTMwMSw3IEBACiAJcmVzdG9yZV9mbGFncyhmbGFncyk7CiAJCiAJd2Fr
ZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAm
ICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOworCXR0eV93YWtldXAodHR5
KTsKIH0KIAogc3RhdGljIGludCByY190aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBz
dHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE2NDQsOSArMTY0Miw3IEBACiAJCXJldHVybjsKIAogCWlm
ICh0ZXN0X2FuZF9jbGVhcl9iaXQoUlNfRVZFTlRfV1JJVEVfV0FLRVVQLCAmcG9ydC0+ZXZlbnQp
KSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgot
CQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtl
dXApKHR0eSk7CisJCXR0eV93YWtldXAodHR5KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0
dHktPndyaXRlX3dhaXQpOwogCX0KIH0KZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZl
cnMvY2hhci9yb2NrZXQuYyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKLS0tIGxp
bnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3JvY2tldC5jCTIwMDQtMDgtMTMgMjI6Mzc6MjYu
MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvcm9ja2V0LmMJMjAw
NC0xMS0yOCAwNDo0OTo0Mi41Nzc0MzMyNzQgLTA4MDAKQEAgLTI1MCwxMiArMjUwLDE2IEBACiAJ
CQkgIENIQU5ORUxfdCAqIGNwLCB1bnNpZ25lZCBpbnQgQ2hhblN0YXR1cykKIHsKIAl1bnNpZ25l
ZCBpbnQgQ2hhck5TdGF0OwotCWludCBUb1JlY3YsIHdSZWN2LCBzcGFjZSwgY291bnQ7CisJaW50
IFRvUmVjdiwgd1JlY3YsIHNwYWNlID0gMCwgY291bnQ7CiAJdW5zaWduZWQgY2hhciAqY2J1ZjsK
IAljaGFyICpmYnVmOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCisJbGQgPSB0dHlfbGRpc2Nf
cmVmKHR0eSk7CiAKIAlUb1JlY3YgPSBzR2V0UnhDbnQoY3ApOwotCXNwYWNlID0gdHR5LT5sZGlz
Yy5yZWNlaXZlX3Jvb20odHR5KTsKKwlpZiAobGQpCisJCXNwYWNlID0gbGQtPnJlY2VpdmVfcm9v
bSh0dHkpOwogCWlmIChzcGFjZSA+IDIgKiBUVFlfRkxJUEJVRl9TSVpFKQogCQlzcGFjZSA9IDIg
KiBUVFlfRkxJUEJVRl9TSVpFOwogCWNidWYgPSB0dHktPmZsaXAuY2hhcl9idWY7CkBAIC0zNTQs
NyArMzU4LDggQEAKIAkJY291bnQgKz0gVG9SZWN2OwogCX0KIAkvKiAgUHVzaCB0aGUgZGF0YSB1
cCB0byB0aGUgdHR5IGxheWVyICovCi0JdHR5LT5sZGlzYy5yZWNlaXZlX2J1Zih0dHksIHR0eS0+
ZmxpcC5jaGFyX2J1ZiwgdHR5LT5mbGlwLmZsYWdfYnVmLCBjb3VudCk7CisJbGQtPnJlY2VpdmVf
YnVmKHR0eSwgdHR5LT5mbGlwLmNoYXJfYnVmLCB0dHktPmZsaXAuZmxhZ19idWYsIGNvdW50KTsK
Kwl0dHlfbGRpc2NfZGVyZWYobGQpOwogfQogCiAvKgpAQCAtNDA4LDggKzQxMyw3IEBACiAJCWNs
ZWFyX2JpdCgoaW5mby0+YWlvcCAqIDgpICsgaW5mby0+Y2hhbiwgKHZvaWQgKikgJnhtaXRfZmxh
Z3NbaW5mby0+Ym9hcmRdKTsKIAogCWlmIChpbmZvLT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykg
ewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgdHR5
LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkp
OworCQl0dHlfd2FrZXVwKHR0eSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0
ZV93YWl0KTsKICNpZmRlZiBST0NLRVRQT1JUX0hBVkVfUE9MTF9XQUlUCiAJCXdha2VfdXBfaW50
ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwpAQCAtMTAyMiw3ICsxMDI2LDcgQEAKIAl1bnNp
Z25lZCBsb25nIGZsYWdzOwogCWludCB0aW1lb3V0OwogCUNIQU5ORUxfdCAqY3A7Ci0KKwkKIAlp
ZiAocm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF9jbG9zZSIpKQogCQlyZXR1cm47CiAK
QEAgLTExMDEsOCArMTEwNSw4IEBACiAKIAlpZiAoVFRZX0RSSVZFUl9GTFVTSF9CVUZGRVJfRVhJ
U1RTKHR0eSkpCiAJCVRUWV9EUklWRVJfRkxVU0hfQlVGRkVSKHR0eSk7Ci0JaWYgKHR0eS0+bGRp
c2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQkKKwl0
dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCWNsZWFyX2JpdCgoaW5mby0+YWlvcCAqIDgpICsgaW5m
by0+Y2hhbiwgKHZvaWQgKikgJnhtaXRfZmxhZ3NbaW5mby0+Ym9hcmRdKTsKIApAQCAtMTczMSw4
ICsxNzM1LDcgQEAKIAkKIGVuZDoKICAJaWYgKGluZm8tPnhtaXRfY250IDwgV0FLRVVQX0NIQVJT
KSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAgJiYg
dHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0
dHkpOworIAkJdHR5X3dha2V1cCh0dHkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7CiAjaWZkZWYgUk9DS0VUUE9SVF9IQVZFX1BPTExfV0FJVAogCQl3YWtlX3Vw
X2ludGVycnVwdGlibGUoJnR0eS0+cG9sbF93YWl0KTsKQEAgLTE4MDYsOCArMTgwOSw3IEBACiAj
aWZkZWYgUk9DS0VUUE9SVF9IQVZFX1BPTExfV0FJVAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm
dHR5LT5wb2xsX3dhaXQpOwogI2VuZGlmCi0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RP
X1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlz
Yy53cml0ZV93YWtldXApICh0dHkpOworCXR0eV93YWtldXAodHR5KTsKIAogCWNwID0gJmluZm8t
PmNoYW5uZWw7CiAJc0ZsdXNoVHhGSUZPKGNwKTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvc2VsZWN0
aW9uLmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCTIwMDQt
MDgtMTMgMjI6Mzg6MDQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL2No
YXIvc2VsZWN0aW9uLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi41ODQ0MzIxMzcgLTA4MDAKQEAgLTI4
MSwxMiArMjgxLDE1IEBACiB7CiAJc3RydWN0IHZ0X3N0cnVjdCAqdnQgPSAoc3RydWN0IHZ0X3N0
cnVjdCAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWludAlwYXN0ZWQgPSAwLCBjb3VudDsKKwlzdHJ1
Y3QgIHR0eV9sZGlzYyAqbGQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAK
IAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJcG9rZV9ibGFua2VkX2NvbnNvbGUoKTsKIAlyZWxl
YXNlX2NvbnNvbGVfc2VtKCk7CiAKKwlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOworCQog
CWFkZF93YWl0X3F1ZXVlKCZ2dC0+cGFzdGVfd2FpdCwgJndhaXQpOwogCXdoaWxlIChzZWxfYnVm
ZmVyICYmIHNlbF9idWZmZXJfbHRoID4gcGFzdGVkKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRB
U0tfSU5URVJSVVBUSUJMRSk7CkBAIC0zMDEsNiArMzA0LDggQEAKIAl9CiAJcmVtb3ZlX3dhaXRf
cXVldWUoJnZ0LT5wYXN0ZV93YWl0LCAmd2FpdCk7CiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JV
Tk5JTkc7CisKKwl0dHlfbGRpc2NfZGVyZWYobGQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLU5h
dXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMgbGludXgtMi42Ljgv
ZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hh
ci9zZXJfYTIyMzIuYwkyMDA0LTA4LTEzIDIyOjM2OjMzLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjgvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuNjA1
NDI4NzI1IC0wODAwCkBAIC01OTksMTAgKzU5OSw3IEBACiAJCQkJCQogCQkJCS8qIFdha2VVcCBp
ZiBvdXRwdXQgYnVmZmVyIHJ1bnMgbG93ICovCiAJCQkJaWYgKChwb3J0LT5ncy54bWl0X2NudCA8
PSBwb3J0LT5ncy53YWtldXBfY2hhcnMpICYmIHBvcnQtPmdzLnR0eSkgewotCQkJCQlpZiAoKHBv
cnQtPmdzLnR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgcG9ydC0+
Z3MudHR5LT5sZGlzYy53cml0ZV93YWtldXApewotCQkJCQkJKHBvcnQtPmdzLnR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKShwb3J0LT5ncy50dHkpOwotCQkJCQl9Ci0JCQkJCXdha2VfdXBfaW50ZXJy
dXB0aWJsZSgmcG9ydC0+Z3MudHR5LT53cml0ZV93YWl0KTsKKwkJCQkJdHR5X3dha2V1cChwb3J0
LT5ncy50dHkpOwogCQkJCX0KIAkJCX0gLy8gaWYgdGhlIHBvcnQgaXMgdXNlZAogCQl9IC8vIGZv
ciBldmVyeSBwb3J0IG9uIHRoZSBib2FyZApkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJp
dmVycy9jaGFyL3NlcmlhbDE2Ny5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9zZXJpYWwxNjcu
YwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMJMjAwNC0wOC0x
MyAyMjozNjo1Ni4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9z
ZXJpYWwxNjcuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjYxMTQyNzc1MSAtMDgwMApAQCAtNzYwLDEx
ICs3NjAsNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKICAg
ICB9CiAgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9XUklURV9XQUtFVVAsICZp
bmZvLT5ldmVudCkpIHsKLQlpZigodHR5LT5mbGFncyAmICgxPDwgVFRZX0RPX1dSSVRFX1dBS0VV
UCkpCi0JJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApewotCSAgICAodHR5LT5sZGlzYy53cml0
ZV93YWtldXApKHR0eSk7Ci0JfQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93
YWl0KTsKKyAgICAJdHR5X3dha2V1cCh0dHkpOwogICAgIH0KIH0gLyogZG9fc29mdGludCAqLwog
CkBAIC0xMzQzLDEwICsxMzM5LDcgQEAKICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaW5m
by0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogICAg
IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0
eS0+d3JpdGVfd2FpdCk7Ci0gICAgaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRF
X1dBS0VVUCkpCi0gICAgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JKHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSh0dHkpOworICAgIHR0eV93YWtldXAodHR5KTsKIH0gLyogY3lfZmx1c2hf
YnVmZmVyICovCiAKIApAQCAtMTg0NiwxOCArMTgzOSw5IEBACiAgICAgc2h1dGRvd24oaW5mbyk7
CiAgICAgaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJdHR5LT5kcml2ZXItPmZsdXNo
X2J1ZmZlcih0dHkpOwotICAgIGlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQl0dHktPmxk
aXNjLmZsdXNoX2J1ZmZlcih0dHkpOworICAgIHR0eV9sZGlzY19mbHVzaCh0dHkpOwogICAgIGlu
Zm8tPmV2ZW50ID0gMDsKICAgICBpbmZvLT50dHkgPSAwOwotICAgIGlmICh0dHktPmxkaXNjLm51
bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewotCWlmICh0dHktPmxkaXNjLmNsb3NlKQotCSAgICAo
dHR5LT5sZGlzYy5jbG9zZSkodHR5KTsKLQl0dHktPmxkaXNjID0gbGRpc2NzW05fVFRZXTsKLQl0
dHktPnRlcm1pb3MtPmNfbGluZSA9IE5fVFRZOwotCWlmICh0dHktPmxkaXNjLm9wZW4pCi0JICAg
ICh0dHktPmxkaXNjLm9wZW4pKHR0eSk7Ci0gICAgfQogICAgIGlmIChpbmZvLT5ibG9ja2VkX29w
ZW4pIHsKIAlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKIAkgICAgY3VycmVudC0+c3RhdGUgPSBU
QVNLX0lOVEVSUlVQVElCTEU7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2No
YXIvc2VyaWFsX3R4MzkxMi5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9zZXJpYWxfdHgzOTEy
LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3NlcmlhbF90eDM5MTIuYwkyMDA0
LTA4LTEzIDIyOjM2OjU4LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9j
aGFyL3NlcmlhbF90eDM5MTIuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjYyMTQyNjEyNiAtMDgwMApA
QCAtMTkxLDEyICsxOTEsOSBAQAogCX0KIAkKICAgICAgICAgaWYgKHBvcnQtPmdzLnhtaXRfY250
IDw9IHBvcnQtPmdzLndha2V1cF9jaGFycykgewotICAgICAgICAgICAgICAgIGlmICgocG9ydC0+
Z3MudHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotICAgICAgICAg
ICAgICAgICAgICBwb3J0LT5ncy50dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIChwb3J0LT5ncy50dHktPmxkaXNjLndyaXRlX3dha2V1cCkocG9ydC0+Z3Mu
dHR5KTsKKyAgICAgICAgCXR0eV93YWtldXAocG9ydC0+Z3MudHR5KTsKICAgICAgICAgICAgICAg
ICByc19kcHJpbnRrIChUWDM5MTJfVUFSVF9ERUJVR19UUkFOU01JVCwgIldha2luZyB1cC4uLi4g
bGRpc2MgKCVkKS4uLi5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC0+Z3Mu
d2FrZXVwX2NoYXJzKTsgCi0gICAgICAgICAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZw
b3J0LT5ncy50dHktPndyaXRlX3dhaXQpOwogICAgICAgIAl9CQogfQogCmRpZmYgLU5hdXIgbGlu
dXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgbGludXgtMi42LjgvZHJpdmVy
cy9jaGFyL3NwZWNpYWxpeC5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9zcGVj
aWFsaXguYwkyMDA0LTA4LTEzIDIyOjM3OjQwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42
LjgvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuNjI1NDI1NDc2
IC0wODAwCkBAIC0xNDY4LDggKzE0NjgsNyBAQAogCXN4X3NodXRkb3duX3BvcnQoYnAsIHBvcnQp
OwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hf
YnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNj
LmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXR0eS0+Y2xvc2lu
ZyA9IDA7CiAJcG9ydC0+ZXZlbnQgPSAwOwogCXBvcnQtPnR0eSA9IE5VTEw7CkBAIC0xNjQ2LDEw
ICsxNjQ1LDggQEAKIAlwb3J0LT54bWl0X2NudCA9IHBvcnQtPnhtaXRfaGVhZCA9IHBvcnQtPnht
aXRfdGFpbCA9IDA7CiAJcmVzdG9yZV9mbGFncyhmbGFncyk7CiAJCisJdHR5X3dha2V1cCh0dHkp
OwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+
ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53
cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKIH0KIAogCkBA
IC0yMDUyLDEyICsyMDQ5LDggQEAKIAlpZighKHR0eSA9IHBvcnQtPnR0eSkpIAogCQlyZXR1cm47
CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJTX0VWRU5UX1dSSVRFX1dBS0VVUCwgJnBvcnQt
PmV2ZW50KSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRpc2Mud3Jp
dGVfd2FrZXVwKSh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7Ci0JfQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUlNfRVZFTlRfV1JJVEVfV0FLRVVQLCAm
cG9ydC0+ZXZlbnQpKQorCQl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5
X29wZXJhdGlvbnMgc3hfb3BzID0gewpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVy
cy9jaGFyL3N0YWxsaW9uLmMgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKLS0t
IGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMJMjAwNC0wOC0xMyAyMjoz
NzozNy4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9zdGFsbGlv
bi5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuNjU3NDIwMjc4IC0wODAwCkBAIC0xMTk3LDggKzExOTcs
NyBAQAogCQlwb3J0cC0+dHgudGFpbCA9IChjaGFyICopIE5VTEw7CiAJfQogCXNldF9iaXQoVFRZ
X0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQot
CQkodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7
CiAKIAl0dHktPmNsb3NpbmcgPSAwOwogCXBvcnRwLT50dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3Qg
KikgTlVMTDsKQEAgLTE4MDksMTAgKzE4MDgsNyBAQAogCQlyZXR1cm47CiAKIAlzdGxfZmx1c2go
cG9ydHApOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAo
KHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5s
ZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0
dHlfd2FrZXVwKHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIxOTMsMTAg
KzIxODksNyBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAodGVzdF9iaXQoQVNZSV9UWExPVywg
JnBvcnRwLT5pc3RhdGUpKSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5s
ZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53
cml0ZV93YWl0KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCX0KIAlpZiAodGVzdF9iaXQoQVNZSV9E
Q0RDSEFOR0UsICZwb3J0cC0+aXN0YXRlKSkgewogCQljbGVhcl9iaXQoQVNZSV9EQ0RDSEFOR0Us
ICZwb3J0cC0+aXN0YXRlKTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hh
ci9zeC5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9zeC5jCi0tLSBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci9zeC5jCTIwMDQtMDgtMTMgMjI6MzY6NTYuMDAwMDAwMDAwIC0wNzAwCisr
KyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvc3guYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjY2MTQx
OTYyOCAtMDgwMApAQCAtMTA0NiwxMiArMTA0Niw5IEBACiAJfQogCiAJaWYgKChwb3J0LT5ncy54
bWl0X2NudCA8PSBwb3J0LT5ncy53YWtldXBfY2hhcnMpICYmIHBvcnQtPmdzLnR0eSkgewotCQlp
ZiAoKHBvcnQtPmdzLnR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYK
LQkJICAgIHBvcnQtPmdzLnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHBvcnQtPmdzLnR0
eS0+bGRpc2Mud3JpdGVfd2FrZXVwKShwb3J0LT5ncy50dHkpOworCQl0dHlfd2FrZXVwKHBvcnQt
PmdzLnR0eSk7CiAJCXN4X2RwcmludGsgKFNYX0RFQlVHX1RSQU5TTUlULCAiV2FraW5nIHVwLi4u
LiBsZGlzYyAoJWQpLi4uLlxuIiwKIAkJICAgICAgICAgICAgcG9ydC0+Z3Mud2FrZXVwX2NoYXJz
KTsgCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Z3MudHR5LT53cml0ZV93YWl0KTsK
IAl9CiAKIAljbGVhcl9iaXQgKFNYX1BPUlRfVFJBTlNNSVRfTE9DSywgJnBvcnQtPmxvY2tzKTsK
ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGxpbnV4
LTIuNi44L2RyaXZlcnMvY2hhci9zeW5jbGluay5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZl
cnMvY2hhci9zeW5jbGluay5jCTIwMDQtMDgtMTMgMjI6MzY6NDYuMDAwMDAwMDAwIC0wNzAwCisr
KyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwkyMDA0LTExLTI4IDA0OjQ5OjQy
LjY3NzQxNzAyOSAtMDgwMApAQCAtOTkzLDYgKzk5MywyOSBAQAogCXJldHVybiAwOwogfQogCisv
KioKKyAqIGxpbmUgZGlzY2lwbGluZSBjYWxsYmFjayB3cmFwcGVycworICoKKyAqIFRoZSB3cmFw
cGVycyBtYWludGFpbiBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlcworICogd2hpbGUgY2FsbGlu
ZyBpbnRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuCisgKgorICogbGRpc2NfcmVjZWl2ZV9idWYgIC0g
cGFzcyByZWNlaXZlIGRhdGEgdG8gbGluZSBkaXNjaXBsaW5lCisgKi8KKworc3RhdGljIHZvaWQg
bGRpc2NfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCSAgICAgIGNvbnN0
IF9fdTggKmRhdGEsIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCit7CisJc3RydWN0IHR0eV9sZGlz
YyAqbGQ7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsK
KwlpZiAobGQpIHsKKwkJaWYgKGxkLT5yZWNlaXZlX2J1ZikKKwkJCWxkLT5yZWNlaXZlX2J1Zih0
dHksIGRhdGEsIGZsYWdzLCBjb3VudCk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJfQorfQor
CiAvKiBtZ3NsX3N0b3AoKQkJdGhyb3R0bGUgKHN0b3ApIHRyYW5zbWl0dGVyCiAgKiAJCiAgKiBB
cmd1bWVudHM6CQl0dHkJcG9pbnRlciB0byB0dHkgaW5mbyBzdHJ1Y3R1cmUKQEAgLTExNTMsMTMg
KzExNzYsNyBAQAogCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUpOwogCiAJ
aWYgKHR0eSkgewotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSB7Ci0JCQlpZiAoIGRlYnVnX2xl
dmVsID49IERFQlVHX0xFVkVMX0JIICkKLQkJCQlwcmludGsoICIlcyglZCk6Y2FsbGluZyBsZGlz
Yy53cml0ZV93YWtldXAgb24gJXNcbiIsCi0JCQkJCV9fRklMRV9fLF9fTElORV9fLGluZm8tPmRl
dmljZV9uYW1lKTsKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQkJfQorCQl0
dHlfd2FrZXVwKHR0eSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0
KTsKIAl9CiAKQEAgLTI0MTUsMTEgKzI0MzIsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo
JmluZm8tPmlycV9zcGlubG9jayxmbGFncyk7CiAJCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0
dHktPndyaXRlX3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9X
QUtFVVApKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSh0dHkpOwotCQkKLX0JLyogZW5kIG9mIG1nc2xfZmx1c2hfYnVmZmVyKCkg
Ki8KKwl0dHlfd2FrZXVwKHR0eSk7Cit9CiAKIC8qIG1nc2xfc2VuZF94Y2hhcigpCiAgKgpAQCAt
MzI1Myw5ICszMjY3LDggQEAKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0
dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JCQotCWlmICh0dHktPmxkaXNjLmZsdXNo
X2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKworCXR0eV9sZGlzY19m
bHVzaCh0dHkpOwogCQkKIAlzaHV0ZG93bihpbmZvKTsKIAkKQEAgLTY4MzAsMTEgKzY4NDMsNyBA
QAogCQkJfSAKIAkJCWVsc2UKICNlbmRpZgotCQkJewotCQkJCS8qIENhbGwgdGhlIGxpbmUgZGlz
Y2lwbGluZSByZWNlaXZlIGNhbGxiYWNrIGRpcmVjdGx5LiAqLwotCQkJCWlmICggdHR5ICYmIHR0
eS0+bGRpc2MucmVjZWl2ZV9idWYgKQotCQkJCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYodHR5LCBp
bmZvLT5pbnRlcm1lZGlhdGVfcnhidWZmZXIsIGluZm8tPmZsYWdfYnVmLCBmcmFtZXNpemUpOwot
CQkJfQorCQkJCWxkaXNjX3JlY2VpdmVfYnVmKHR0eSwgaW5mby0+aW50ZXJtZWRpYXRlX3J4YnVm
ZmVyLCBpbmZvLT5mbGFnX2J1ZiwgZnJhbWVzaXplKTsKIAkJfQogCX0KIAkvKiBGcmVlIHRoZSBi
dWZmZXJzIHVzZWQgYnkgdGhpcyBmcmFtZS4gKi8KQEAgLTcwMDYsOSArNzAxNSw3IEBACiAJCQlt
ZW1jcHkoIGluZm8tPmludGVybWVkaWF0ZV9yeGJ1ZmZlciwgcEJ1ZkVudHJ5LT52aXJ0X2FkZHIs
IGZyYW1lc2l6ZSk7CiAJCQlpbmZvLT5pY291bnQucnhvaysrOwogCi0JCQkvKiBDYWxsIHRoZSBs
aW5lIGRpc2NpcGxpbmUgcmVjZWl2ZSBjYWxsYmFjayBkaXJlY3RseS4gKi8KLQkJCWlmICggdHR5
ICYmIHR0eS0+bGRpc2MucmVjZWl2ZV9idWYgKQotCQkJCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYo
dHR5LCBpbmZvLT5pbnRlcm1lZGlhdGVfcnhidWZmZXIsIGluZm8tPmZsYWdfYnVmLCBmcmFtZXNp
emUpOworCQkJbGRpc2NfcmVjZWl2ZV9idWYodHR5LCBpbmZvLT5pbnRlcm1lZGlhdGVfcnhidWZm
ZXIsIGluZm8tPmZsYWdfYnVmLCBmcmFtZXNpemUpOwogCQl9CiAKIAkJLyogRnJlZSB0aGUgYnVm
ZmVycyB1c2VkIGJ5IHRoaXMgZnJhbWUuICovCmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9k
cml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci9zeW5jbGlu
a21wLmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwkyMDA0
LTA4LTEzIDIyOjM2OjMyLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9j
aGFyL3N5bmNsaW5rbXAuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjY5MzQxNDQzMCAtMDgwMApAQCAt
NzIyLDYgKzcyMiwyOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxpbmUgZGlzY2lwbGlu
ZSBjYWxsYmFjayB3cmFwcGVycworICoKKyAqIFRoZSB3cmFwcGVycyBtYWludGFpbiBsaW5lIGRp
c2NpcGxpbmUgcmVmZXJlbmNlcworICogd2hpbGUgY2FsbGluZyBpbnRvIHRoZSBsaW5lIGRpc2Np
cGxpbmUuCisgKgorICogbGRpc2NfcmVjZWl2ZV9idWYgIC0gcGFzcyByZWNlaXZlIGRhdGEgdG8g
bGluZSBkaXNjaXBsaW5lCisgKi8KKworc3RhdGljIHZvaWQgbGRpc2NfcmVjZWl2ZV9idWYoc3Ry
dWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCSAgICAgIGNvbnN0IF9fdTggKmRhdGEsIGNoYXIgKmZs
YWdzLCBpbnQgY291bnQpCit7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaWYgKCF0dHkpCisJ
CXJldHVybjsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAobGQpIHsKKwkJaWYgKGxk
LT5yZWNlaXZlX2J1ZikKKwkJCWxkLT5yZWNlaXZlX2J1Zih0dHksIGRhdGEsIGZsYWdzLCBjb3Vu
dCk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJfQorfQorCiAvKiB0dHkgY2FsbGJhY2tzICov
CiAKIC8qIENhbGxlZCB3aGVuIGEgcG9ydCBpcyBvcGVuZWQuICBJbml0IGFuZCBlbmFibGUgcG9y
dC4KQEAgLTg2OSw4ICs4OTIsNyBAQAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQog
CQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAKLQlpZiAodHR5LT5sZGlzYy5mbHVz
aF9idWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNjX2Zs
dXNoKHR0eSk7CiAKIAlzaHV0ZG93bihpbmZvKTsKIApAQCAtMTI3NSw5ICsxMjk3LDcgQEAKIAlz
cGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAogCXdha2VfdXBfaW50
ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBU
VFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0J
CSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAK
IC8qIHRocm90dGxlIChzdG9wKSB0cmFuc21pdHRlcgpAQCAtMTk0MSwxMyArMTk2MSw3IEBACiAJ
CQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSk7CiAKIAlpZiAodHR5KSB7Ci0J
CWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAg
dHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdf
TEVWRUxfQkggKQotCQkJCXByaW50ayggIiVzKCVkKTolcyBjYWxsaW5nIGxkaXNjLndyaXRlX3dh
a2V1cFxuIiwKLQkJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUpOwotCQkJ
KHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCQl9CisJCXR0eV93YWtldXAodHR5KTsK
IAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCX0KIH0KQEAgLTQ4
NjksMTUgKzQ4ODMsOCBAQAogCQkJfQogCQkJZWxzZQogI2VuZGlmCi0JCQl7Ci0JCQkJaWYgKCB0
dHkgJiYgdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZiApIHsKLQkJCQkJLyogQ2FsbCB0aGUgbGluZSBk
aXNjaXBsaW5lIHJlY2VpdmUgY2FsbGJhY2sgZGlyZWN0bHkuICovCi0JCQkJCXR0eS0+bGRpc2Mu
cmVjZWl2ZV9idWYodHR5LAotCQkJCQkJaW5mby0+dG1wX3J4X2J1ZiwKLQkJCQkJCWluZm8tPmZs
YWdfYnVmLAotCQkJCQkJZnJhbWVzaXplKTsKLQkJCQl9Ci0JCQl9CisJCQkJbGRpc2NfcmVjZWl2
ZV9idWYodHR5LGluZm8tPnRtcF9yeF9idWYsCisJCQkJCQkgIGluZm8tPmZsYWdfYnVmLCBmcmFt
ZXNpemUpOwogCQl9CiAJfQogCS8qIEZyZWUgdGhlIGJ1ZmZlcnMgdXNlZCBieSB0aGlzIGZyYW1l
LiAqLwpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3R0eV9pby5jIGxp
bnV4LTIuNi44L2RyaXZlcnMvY2hhci90dHlfaW8uYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2
ZXJzL2NoYXIvdHR5X2lvLmMJMjAwNC0wOC0xMyAyMjozNzoxNS4wMDAwMDAwMDAgLTA3MDAKKysr
IGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci90dHlfaW8uYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjcz
MzQwNzkzMSAtMDgwMApAQCAtOTIsNiArOTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2Nr
Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+Cisj
aW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNs
dWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMjAsMTEgKzEyMSwxNyBAQAogCiBFWFBPUlRfU1lNQk9M
KHR0eV9zdGRfdGVybWlvcyk7CiAKKy8qIFRoaXMgbGlzdCBnZXRzIHBva2VkIGF0IGJ5IHByb2Nm
cyBhbmQgdmFyaW91cyBiaXRzIG9mIGJvb3QgdXAgY29kZS4gVGhpcworICAgY291bGQgZG8gd2l0
aCBzb21lIHJhdGlvbmFsaXNhdGlvbiBzdWNoIGFzIHB1bGxpbmcgdGhlIHR0eSBwcm9jIGZ1bmN0
aW9uCisgICBpbnRvIHRoaXMgZmlsZSAqLworICAgCiBMSVNUX0hFQUQodHR5X2RyaXZlcnMpOwkJ
CS8qIGxpbmtlZCBsaXN0IG9mIHR0eSBkcml2ZXJzICovCi1zdHJ1Y3QgdHR5X2xkaXNjIGxkaXNj
c1tOUl9MRElTQ1NdOwkvKiBsaW5lIGRpc2MgZGlzcGF0Y2ggdGFibGUJKi8KIAotLyogU2VtYXBo
b3JlIHRvIHByb3RlY3QgY3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHR0eSAqLworLyogU2VtYXBo
b3JlIHRvIHByb3RlY3QgY3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHR0eS4gVGhpcyBpcyBzaGFy
ZWQgd2l0aAorICAgdnQuYyBmb3IgZGVlcGx5IGRpc2d1c3RpbmcgaGFjayByZWFzb25zICovCiBE
RUNMQVJFX01VVEVYKHR0eV9zZW0pOworLyogTG9jayBmb3IgdHR5X3Rlcm1pb3MgY2hhbmdlcyAt
IHByaXZhdGUgdG8gdHR5X2lvL3R0eV9pb2N0bCAqLworc3BpbmxvY2tfdCB0dHlfdGVybWlvc19s
b2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogCiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiBl
eHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKnB0bV9kcml2ZXI7CS8qIFVuaXg5OCBwdHkgbWFzdGVy
czsgZm9yIC9kZXYvcHRteCAqLwpAQCAtMjIzLDY1ICsyMzAsMzI0IEBACiAJcmV0dXJuIDA7CiB9
CiAKKy8qCisgKglUaGlzIGlzIHByb2JhYmx5IG92ZXJraWxsIGZvciByZWFsIHdvcmxkIHByb2Nl
c3NvcnMgYnV0CisgKgl0aGV5IGFyZSBub3Qgb24gaG90IHBhdGhzIHNvIGEgbGl0dGxlIGRpc2Np
cGxpbmUgd29uJ3QgZG8gCisgKglhbnkgaGFybS4KKyAqLworIAorc3RhdGljIHZvaWQgdHR5X3Nl
dF90ZXJtaW9zX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBudW0pCit7CisJdW5z
aWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X3Rlcm1pb3NfbG9jaywg
ZmxhZ3MpOworCXR0eS0+dGVybWlvcy0+Y19saW5lID0gbnVtOworCXNwaW5fdW5sb2NrX2lycXJl
c3RvcmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqCVRoaXMgZ3VhcmRz
IHRoZSByZWZjb3VudGVkIGxpbmUgZGlzY2lwbGluZSBsaXN0cy4gVGhlIGxvY2sKKyAqCW11c3Qg
YmUgdGFrZW4gd2l0aCBpcnFzIG9mZiBiZWNhdXNlIHRoZXJlIGFyZSBoYW5ndXAgcGF0aAorICoJ
Y2FsbGVycyB3aG8gd2lsbCBkbyBsZGlzYyBsb29rdXBzIGFuZCBjYW5ub3Qgc2xlZXAuCisgKi8K
KyAKK3N0YXRpYyBzcGlubG9ja190IHR0eV9sZGlzY19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VE
Oworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHR0eV9sZGlzY193YWl0KTsKK3N0YXRp
YyBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY3NbTlJfTERJU0NTXTsJLyogbGluZSBkaXNjIGRp
c3BhdGNoIHRhYmxlCSovCisKIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVj
dCB0dHlfbGRpc2MgKm5ld19sZGlzYykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBy
ZXQgPSAwOworCQogCWlmIChkaXNjIDwgTl9UVFkgfHwgZGlzYyA+PSBOUl9MRElTQ1MpCiAJCXJl
dHVybiAtRUlOVkFMOwogCQorCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxh
Z3MpOwogCWlmIChuZXdfbGRpc2MpIHsKLQkJbGRpc2NzW2Rpc2NdID0gKm5ld19sZGlzYzsKLQkJ
bGRpc2NzW2Rpc2NdLmZsYWdzIHw9IExESVNDX0ZMQUdfREVGSU5FRDsKLQkJbGRpc2NzW2Rpc2Nd
Lm51bSA9IGRpc2M7Ci0JfSBlbHNlCi0JCW1lbXNldCgmbGRpc2NzW2Rpc2NdLCAwLCBzaXplb2Yo
c3RydWN0IHR0eV9sZGlzYykpOworCQl0dHlfbGRpc2NzW2Rpc2NdID0gKm5ld19sZGlzYzsKKwkJ
dHR5X2xkaXNjc1tkaXNjXS5udW0gPSBkaXNjOworCQl0dHlfbGRpc2NzW2Rpc2NdLmZsYWdzIHw9
IExESVNDX0ZMQUdfREVGSU5FRDsKKwkJdHR5X2xkaXNjc1tkaXNjXS5yZWZjb3VudCA9IDA7CisJ
fSBlbHNlIHsKKwkJaWYodHR5X2xkaXNjc1tkaXNjXS5yZWZjb3VudCkKKwkJCXJldCA9IC1FQlVT
WTsKKwkJZWxzZQorCQkJdHR5X2xkaXNjc1tkaXNjXS5mbGFncyAmPSB+TERJU0NfRkxBR19ERUZJ
TkVEOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3Mp
OwogCQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0wodHR5X3Jl
Z2lzdGVyX2xkaXNjKTsKIAotLyogU2V0IHRoZSBkaXNjaXBsaW5lIG9mIGEgdHR5IGxpbmUuICov
CitzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfZ2V0KGludCBkaXNjKQoreworCXVuc2lnbmVk
IGxvbmcgZmxhZ3M7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisKKwlpZiAoZGlzYyA8IE5fVFRZ
IHx8IGRpc2MgPj0gTlJfTERJU0NTKQorCQlyZXR1cm4gTlVMTDsKKwkKKwlzcGluX2xvY2tfaXJx
c2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKworCWxkID0gJnR0eV9sZGlzY3NbZGlzY107
CisJLyogQ2hlY2sgdGhlIGVudHJ5IGlzIGRlZmluZWQgKi8KKwlpZihsZC0+ZmxhZ3MgJiBMRElT
Q19GTEFHX0RFRklORUQpCisJeworCQkvKiBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVk
IHdlIGNhbid0IHVzZSBpdCAqLworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGxkLT5vd25lcikpCisJ
CSAgICAgICAJbGQgPSBOVUxMOworCQllbHNlIC8qIGxvY2sgaXQgKi8KKwkJCWxkLT5yZWZjb3Vu
dCsrOworCX0KKwllbHNlCisJCWxkID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0
dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCXJldHVybiBsZDsKK30KKworRVhQT1JUX1NZTUJPTF9H
UEwodHR5X2xkaXNjX2dldCk7CisKK3ZvaWQgdHR5X2xkaXNjX3B1dChpbnQgZGlzYykKK3sKKwlz
dHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWlmIChkaXNj
IDwgTl9UVFkgfHwgZGlzYyA+PSBOUl9MRElTQ1MpCisJCUJVRygpOworCQkKKwlzcGluX2xvY2tf
aXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwlsZCA9ICZ0dHlfbGRpc2NzW2Rpc2Nd
OworCWlmKGxkLT5yZWZjb3VudCA9PSAwKQorCQlCVUcoKTsKKwlsZC0+cmVmY291bnQgLS07CisJ
bW9kdWxlX3B1dChsZC0+b3duZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlz
Y19sb2NrLCBmbGFncyk7Cit9CisJCitFWFBPUlRfU1lNQk9MX0dQTCh0dHlfbGRpc2NfcHV0KTsK
Kwordm9pZCB0dHlfbGRpc2NfYXNzaWduKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0
dHlfbGRpc2MgKmxkKQoreworCXR0eS0+bGRpc2MgPSAqbGQ7CisJdHR5LT5sZGlzYy5yZWZjb3Vu
dCA9IDA7Cit9CisKKy8qKgorICoJdHR5X2xkaXNjX3RyeQkJLQlpbnRlcm5hbCBoZWxwZXIKKyAq
CUB0dHk6IHRoZSB0dHkKKyAqCisgKglNYWtlIGEgc2luZ2xlIGF0dGVtcHQgdG8gZ3JhYiBhbmQg
YnVtcCB0aGUgcmVmY291bnQgb24KKyAqCXRoZSB0dHkgbGRpc2MuIFJldHVybiAwIG9uIGZhaWx1
cmUgb3IgMSBvbiBzdWNjZXNzLiBUaGlzIGlzCisgKgl1c2VkIHRvIGltcGxlbWVudCBib3RoIHRo
ZSB3YWl0aW5nIGFuZCBub24gd2FpdGluZyB2ZXJzaW9ucworICoJb2YgdHR5X2xkaXNjX3JlZgor
ICovCisKK3N0YXRpYyBpbnQgdHR5X2xkaXNjX3RyeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQor
eworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaW50IHJl
dCA9IDA7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJ
bGQgPSAmdHR5LT5sZGlzYzsKKwlpZih0ZXN0X2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKSkK
Kwl7CisJCWxkLT5yZWZjb3VudCsrOworCQlyZXQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFy
ZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgor
ICoJdHR5X2xkaXNjX3JlZl93YWl0CS0Jd2FpdCBmb3IgdGhlIHR0eSBsZGlzYworICoJQHR0eTog
dHR5IGRldmljZQorICoKKyAqCURlcmVmZXJlbmNlIHRoZSBsaW5lIGRpc2NpcGxpbmUgZm9yIHRo
ZSB0ZXJtaW5hbCBhbmQgdGFrZSBhIAorICoJcmVmZXJlbmNlIHRvIGl0LiBJZiB0aGUgbGluZSBk
aXNjaXBsaW5lIGlzIGluIGZsdXggdGhlbiAKKyAqCXdhaXQgcGF0aWVudGx5IHVudGlsIGl0IGNo
YW5nZXMuCisgKgorICoJTm90ZTogTXVzdCBub3QgYmUgY2FsbGVkIGZyb20gYW4gSVJRL3RpbWVy
IGNvbnRleHQuIFRoZSBjYWxsZXIKKyAqCW11c3QgYWxzbyBiZSBjYXJlZnVsIG5vdCB0byBob2xk
IG90aGVyIGxvY2tzIHRoYXQgd2lsbCBkZWFkbG9jaworICoJYWdhaW5zdCBhIGRpc2NpcGxpbmUg
Y2hhbmdlLCBzdWNoIGFzIGFuIGV4aXN0aW5nIGxkaXNjIHJlZmVyZW5jZQorICoJKHdoaWNoIHdl
IGNoZWNrIGZvcikKKyAqLworIAorc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0
KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJLyogd2FpdF9ldmVudCBpcyBhIG1hY3JvICov
CisJd2FpdF9ldmVudCh0dHlfbGRpc2Nfd2FpdCwgdHR5X2xkaXNjX3RyeSh0dHkpKTsKKwlpZih0
dHktPmxkaXNjLnJlZmNvdW50ID09IDApCisJCXByaW50ayhLRVJOX0VSUiAidHR5X2xkaXNjX3Jl
Zl93YWl0XG4iKTsKKwlyZXR1cm4gJnR0eS0+bGRpc2M7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BM
KHR0eV9sZGlzY19yZWZfd2FpdCk7CisKKy8qKgorICoJdHR5X2xkaXNjX3JlZgkJLQlnZXQgdGhl
IHR0eSBsZGlzYworICoJQHR0eTogdHR5IGRldmljZQorICoKKyAqCURlcmVmZXJlbmNlIHRoZSBs
aW5lIGRpc2NpcGxpbmUgZm9yIHRoZSB0ZXJtaW5hbCBhbmQgdGFrZSBhIAorICoJcmVmZXJlbmNl
IHRvIGl0LiBJZiB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIGluIGZsdXggdGhlbiAKKyAqCXJldHVy
biBOVUxMLiBDYW4gYmUgY2FsbGVkIGZyb20gSVJRIGFuZCB0aW1lciBmdW5jdGlvbnMuCisgKi8K
KyAKK3N0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0
eSkKK3sKKwlpZih0dHlfbGRpc2NfdHJ5KHR0eSkpCisJCXJldHVybiAmdHR5LT5sZGlzYzsKKwly
ZXR1cm4gTlVMTDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZik7CisKKy8q
KgorICoJdHR5X2xkaXNjX2RlcmVmCQktCWZyZWUgYSB0dHkgbGRpc2MgcmVmZXJlbmNlCisgKglA
bGQ6IHJlZmVyZW5jZSB0byBmcmVlIHVwCisgKgorICoJVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5
X2xkaXNjX3JlZiBvciB0dHlfbGRpc2NfcmVmX3dhaXQuIE1heQorICoJYmUgY2FsbGVkIGluIElS
USBjb250ZXh0LgorICovCisgCit2b2lkIHR0eV9sZGlzY19kZXJlZihzdHJ1Y3QgdHR5X2xkaXNj
ICpsZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYobGQgPT0gTlVMTCkKKwkJQlVH
KCk7CisJCQorCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCWlm
KGxkLT5yZWZjb3VudCA9PSAwKQorCQlwcmludGsoS0VSTl9FUlIgInR0eV9sZGlzY19kZXJlZjog
bm8gcmVmZXJlbmNlcy5cbiIpOworCWVsc2UKKwkJbGQtPnJlZmNvdW50LS07CisJaWYobGQtPnJl
ZmNvdW50ID09IDApCisJCXdha2VfdXAoJnR0eV9sZGlzY193YWl0KTsKKwlzcGluX3VubG9ja19p
cnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQ
TCh0dHlfbGRpc2NfZGVyZWYpOworCisvKioKKyAqCXR0eV9sZGlzY19lbmFibGUJLQlhbGxvdyBs
ZGlzYyB1c2UKKyAqCUB0dHk6IHRlcm1pbmFsIHRvIGFjdGl2YXRlIGxkaXNjIG9uCisgKgorICoJ
U2V0IHRoZSBUVFlfTERJU0MgZmxhZyB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgY2FuIGJlIGNh
bGxlZAorICoJYWdhaW4uIERvIG5lY2Nlc3Nhcnkgd2FrZXVwcyBmb3IgZXhpc3Rpbmcgc2xlZXBl
cnMuCisgKgorICoJTm90ZTogbm9ib2R5IHNob3VsZCBzZXQgdGhpcyBiaXQgZXhjZXB0IHZpYSB0
aGlzIGZ1bmN0aW9uLiBDbGVhcmluZworICoJZGlyZWN0bHkgaXMgYWxsb3dlZC4KKyAqLworCitz
dGF0aWMgdm9pZCB0dHlfbGRpc2NfZW5hYmxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJ
c2V0X2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKKwl3YWtlX3VwKCZ0dHlfbGRpc2Nfd2Fp
dCk7Cit9CisJCisvKioKKyAqCXR0eV9zZXRfbGRpc2MJCS0Jc2V0IGxpbmUgZGlzY2lwbGluZQor
ICoJQHR0eTogdGhlIHRlcm1pbmFsIHRvIHNldAorICoJQGxkaXNjOiB0aGUgbGluZSBkaXNjaXBs
aW5lCisgKgorICoJU2V0IHRoZSBkaXNjaXBsaW5lIG9mIGEgdHR5IGxpbmUuIE11c3QgYmUgY2Fs
bGVkIGZyb20gYSBwcm9jZXNzCisgKgljb250ZXh0LgorICovCisgCiBzdGF0aWMgaW50IHR0eV9z
ZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkaXNjKQogewogCWludAlyZXR2
YWwgPSAwOwogCXN0cnVjdAl0dHlfbGRpc2Mgb19sZGlzYzsKIAljaGFyIGJ1Zls2NF07CisJaW50
IHdvcms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAog
CWlmICgobGRpc2MgPCBOX1RUWSkgfHwgKGxkaXNjID49IE5SX0xESVNDUykpCiAJCXJldHVybiAt
RUlOVkFMOworCityZXN0YXJ0OgorCisJaWYgKHR0eS0+bGRpc2MubnVtID09IGxkaXNjKQorCQly
ZXR1cm4gMDsJLyogV2UgYXJlIGFscmVhZHkgaW4gdGhlIGRlc2lyZWQgZGlzY2lwbGluZSAqLwor
CQorCWxkID0gdHR5X2xkaXNjX2dldChsZGlzYyk7CiAJLyogRWR1YXJkbyBCbGFuY28gPGVqYnNA
Y3MuY3MuY29tLnV5PiAqLwogCS8qIEN5cnVzIER1cmdpbiA8Y2lkZXJAc3BlYWtlYXN5Lm9yZz4g
Ki8KLQlpZiAoIShsZGlzY3NbbGRpc2NdLmZsYWdzICYgTERJU0NfRkxBR19ERUZJTkVEKSkgewor
CWlmIChsZCA9PSBOVUxMKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJ0dHktbGRpc2MtJWQiLCBsZGlz
Yyk7CisJCWxkID0gdHR5X2xkaXNjX2dldChsZGlzYyk7CiAJfQotCWlmICghKGxkaXNjc1tsZGlz
Y10uZmxhZ3MgJiBMRElTQ19GTEFHX0RFRklORUQpKQorCWlmIChsZCA9PSBOVUxMKQogCQlyZXR1
cm4gLUVJTlZBTDsKIAotCWlmICh0dHktPmxkaXNjLm51bSA9PSBsZGlzYykKLQkJcmV0dXJuIDA7
CS8qIFdlIGFyZSBhbHJlYWR5IGluIHRoZSBkZXNpcmVkIGRpc2NpcGxpbmUgKi8KLQotCWlmICgh
dHJ5X21vZHVsZV9nZXQobGRpc2NzW2xkaXNjXS5vd25lcikpCi0JICAgICAgIAlyZXR1cm4gLUVJ
TlZBTDsKLQkKIAlvX2xkaXNjID0gdHR5LT5sZGlzYzsKIAogCXR0eV93YWl0X3VudGlsX3NlbnQo
dHR5LCAwKTsKKworCS8qCisJICoJTWFrZSBzdXJlIHdlIGRvbid0IGNoYW5nZSB3aGlsZSBzb21l
b25lIGhvbGRzIGEKKwkgKglyZWZlcmVuY2UgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhlIFRU
WV9MRElTQyBiaXQKKwkgKglwcmV2ZW50cyBhbnlvbmUgdGFraW5nIGEgcmVmZXJlbmNlIG9uY2Ug
aXQgaXMgY2xlYXIuCisJICoJV2UgbmVlZCB0aGUgbG9jayB0byBhdm9pZCByYWNpbmcgcmVmZXJl
bmNlIHRha2Vycy4KKwkgKi8KKwkgCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2Nr
LCBmbGFncyk7CisJaWYodHR5LT5sZGlzYy5yZWZjb3VudCkKKwl7CisJCS8qIEZyZWUgdGhlIG5l
dyBsZGlzYyB3ZSBncmFiYmVkLiBNdXN0IGRyb3AgdGhlIGxvY2sKKwkJICAgZmlyc3QuICovCisJ
CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CisJCXR0eV9s
ZGlzY19wdXQobGRpc2MpOworCQkvKgorCQkgKiBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHdl
IG1heSBiZSBidXN5LCBpbmNsdWRpbmcKKwkJICogcmFuZG9tIG1vbWVudGFyeSBJL08gdHJhZmZp
Yy4gV2UgbXVzdCB0aGVyZWZvcmUKKwkJICogcmV0cnkuIFdlIGNvdWxkIGRpc3Rpbmd1aXNoIGJl
dHdlZW4gYmxvY2tpbmcgb3BzCisJCSAqIGFuZCByZXRyaWVzIGlmIHdlIG1hZGUgdHR5X2xkaXNj
X3dhaXQoKSBzbWFydGVyLiBUaGF0CisJCSAqIGlzIHVwIGZvciBkaXNjdXNzaW9uLgorCQkgKi8K
KwkJaWYod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHR0eV9sZGlzY193YWl0LCB0dHktPmxkaXNj
LnJlZmNvdW50ID09IDApIDwgMCkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CQkJCisJCWdvdG8g
cmVzdGFydDsKKwl9CisJY2xlYXJfYml0KFRUWV9MRElTQywgJnR0eS0+ZmxhZ3MpOwkKKwljbGVh
cl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3Rv
cmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7CiAJCisJLyoKKwkgKglGcm9tIHRoaXMgcG9pbnQg
b24gd2Uga25vdyBub2JvZHkgaGFzIGFuIGxkaXNjCisJICoJdXNhZ2UgcmVmZXJlbmNlLCBub3Ig
Y2FuIHRoZXkgb2J0YWluIG9uZSB1bnRpbAorCSAqCXdlIHNheSBzbyBsYXRlciBvbi4KKwkgKi8K
KwkgCisJd29yayA9IGNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+ZmxpcC53b3JrKTsKKwkvKgor
CSAqIFdhaXQgZm9yIC0+aGFuZ3VwX3dvcmsgYW5kIC0+ZmxpcC53b3JrIGhhbmRsZXJzIHRvIHRl
cm1pbmF0ZQorCSAqLworCSAKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCS8qIFNodXRkb3du
IHRoZSBjdXJyZW50IGRpc2NpcGxpbmUuICovCiAJaWYgKHR0eS0+bGRpc2MuY2xvc2UpCiAJCSh0
dHktPmxkaXNjLmNsb3NlKSh0dHkpOwogCiAJLyogTm93IHNldCB1cCB0aGUgbmV3IGxpbmUgZGlz
Y2lwbGluZS4gKi8KLQl0dHktPmxkaXNjID0gbGRpc2NzW2xkaXNjXTsKLQl0dHktPnRlcm1pb3Mt
PmNfbGluZSA9IGxkaXNjOworCXR0eV9sZGlzY19hc3NpZ24odHR5LCBsZCk7CisJdHR5X3NldF90
ZXJtaW9zX2xkaXNjKHR0eSwgbGRpc2MpOwogCWlmICh0dHktPmxkaXNjLm9wZW4pCiAJCXJldHZh
bCA9ICh0dHktPmxkaXNjLm9wZW4pKHR0eSk7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJdHR5LT5s
ZGlzYyA9IG9fbGRpc2M7Ci0JCXR0eS0+dGVybWlvcy0+Y19saW5lID0gdHR5LT5sZGlzYy5udW07
CisJCXR0eV9sZGlzY19wdXQobGRpc2MpOworCQkvKiBUaGVyZSBpcyBhbiBvdXRzdGFuZGluZyBy
ZWZlcmVuY2UgaGVyZSBzbyB0aGlzIGlzIHNhZmUgKi8KKwkJdHR5X2xkaXNjX2Fzc2lnbih0dHks
IHR0eV9sZGlzY19nZXQob19sZGlzYy5udW0pKTsKKwkJdHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0
eSwgdHR5LT5sZGlzYy5udW0pOwogCQlpZiAodHR5LT5sZGlzYy5vcGVuICYmICh0dHktPmxkaXNj
Lm9wZW4odHR5KSA8IDApKSB7Ci0JCQl0dHktPmxkaXNjID0gbGRpc2NzW05fVFRZXTsKLQkJCXR0
eS0+dGVybWlvcy0+Y19saW5lID0gTl9UVFk7CisJCQl0dHlfbGRpc2NfcHV0KG9fbGRpc2MubnVt
KTsKKwkJCS8qIFRoaXMgZHJpdmVyIGlzIGFsd2F5cyBwcmVzZW50ICovCisJCQl0dHlfbGRpc2Nf
YXNzaWduKHR0eSwgdHR5X2xkaXNjX2dldChOX1RUWSkpOworCQkJdHR5X3NldF90ZXJtaW9zX2xk
aXNjKHR0eSwgTl9UVFkpOwogCQkJaWYgKHR0eS0+bGRpc2Mub3BlbikgewogCQkJCWludCByID0g
dHR5LT5sZGlzYy5vcGVuKHR0eSk7CiAKQEAgLTI5MSwxMiArNTU3LDI3IEBACiAJCQkJCSAgICAg
IHR0eV9uYW1lKHR0eSwgYnVmKSwgcik7CiAJCQl9CiAJCX0KLQl9IGVsc2UgewotCQltb2R1bGVf
cHV0KG9fbGRpc2Mub3duZXIpOwogCX0KKwkvKiBBdCB0aGlzIHBvaW50IHdlIGhvbGQgYSByZWZl
cmVuY2UgdG8gdGhlIG5ldyBsZGlzYyBhbmQgYQorCSAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQg
bGRpc2MuIElmIHdlIGVuZGVkIHVwIGZsaXBwaW5nIGJhY2sKKwkgICB0byB0aGUgZXhpc3Rpbmcg
bGRpc2Mgd2UgaGF2ZSB0d28gcmVmZXJlbmNlcyB0byBpdCAqLwogCQogCWlmICh0dHktPmxkaXNj
Lm51bSAhPSBvX2xkaXNjLm51bSAmJiB0dHktPmRyaXZlci0+c2V0X2xkaXNjKQogCQl0dHktPmRy
aXZlci0+c2V0X2xkaXNjKHR0eSk7CisJCQorCXR0eV9sZGlzY19wdXQob19sZGlzYy5udW0pOwor
CQorCS8qCisJICoJQWxsb3cgbGRpc2MgcmVmZXJlbmNpbmcgdG8gb2NjdXIgYXMgc29vbiBhcyB0
aGUgZHJpdmVyCisJICoJbGRpc2MgY2FsbGJhY2sgY29tcGxldGVzLgorCSAqLworCSAKKwl0dHlf
bGRpc2NfZW5hYmxlKHR0eSk7CisJCisJLyogUmVzdGFydCBpdCBpbiBjYXNlIG5vIGNoYXJhY3Rl
cnMga2ljayBpdCBvZmYuIFNhZmUgaWYKKwkgICBhbHJlYWR5IHJ1bm5pbmcgKi8KKwlpZih3b3Jr
KQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+ZmxpcC53b3JrLCAxKTsKIAlyZXR1cm4g
cmV0dmFsOwogfQogCkBAIC0zOTksNiArNjgwLDUzIEBACiAKIHN0YXRpYyBzcGlubG9ja190IHJl
ZGlyZWN0X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiBzdGF0aWMgc3RydWN0IGZpbGUgKnJl
ZGlyZWN0OworCisvKioKKyAqCXR0eV93YWtldXAJLQlyZXF1ZXN0IG1vcmUgZGF0YQorICoJQHR0
eTogdGVybWluYWwKKyAqCisgKglJbnRlcm5hbCBhbmQgZXh0ZXJuYWwgaGVscGVyIGZvciB3YWtl
dXBzIG9mIHR0eS4gVGhpcyBmdW5jdGlvbgorICoJaW5mb3JtcyB0aGUgbGluZSBkaXNjaXBsaW5l
IGlmIHByZXNlbnQgdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5CisgKgl0byByZWNlaXZlIG1vcmUg
b3V0cHV0IGRhdGEuCisgKi8KKyAKK3ZvaWQgdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5KQoreworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCQorCWlmICh0ZXN0X2JpdChUVFlfRE9f
V1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncykpIHsKKwkJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7
CisJCWlmKGxkKSB7CisJCQlpZihsZC0+d3JpdGVfd2FrZXVwKQorCQkJCWxkLT53cml0ZV93YWtl
dXAodHR5KTsKKwkJCXR0eV9sZGlzY19kZXJlZihsZCk7CisJCX0KKwl9CisJd2FrZV91cF9pbnRl
cnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh0dHlf
d2FrZXVwKTsKKworLyoqCisgKgl0dHlfbGRpc2NfZmx1c2gJLQlmbHVzaCBsaW5lIGRpc2NpcGxp
bmUgcXVldWUKKyAqCUB0dHk6IHR0eQorICoKKyAqCUZsdXNoIHRoZSBsaW5lIGRpc2NpcGxpbmUg
cXVldWUgKGlmIGFueSkgZm9yIHRoaXMgdHR5LiBJZiB0aGVyZQorICoJaXMgbm8gbGluZSBkaXNj
aXBsaW5lIGFjdGl2ZSB0aGlzIGlzIGEgbm8tb3AuCisgKi8KKyAKK3ZvaWQgdHR5X2xkaXNjX2Zs
dXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQgPSB0
dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYobGQpIHsKKwkJaWYobGQtPmZsdXNoX2J1ZmZlcikKKwkJ
CWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwl9Cit9CisK
K0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19mbHVzaCk7CisJCiAvKgogICogVGhpcyBjYW4g
YmUgY2FsbGVkIGJ5IHRoZSAiZXZlbnRkIiBrZXJuZWwgdGhyZWFkLiAgVGhhdCBpcyBwcm9jZXNz
IHN5bmNocm9ub3VzLAogICogYnV0IGRvZXNuJ3QgaG9sZCBhbnkgbG9ja3MsIHNvIHdlIG5lZWQg
dG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlCkBAIC00MTAsNiArNzM4LDcgQEAK
IAlzdHJ1Y3QgZmlsZSAqIGNvbnNfZmlscCA9IE5VTEw7CiAJc3RydWN0IGZpbGUgKmZpbHAsICpm
ID0gTlVMTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7
CiAJc3RydWN0IHBpZCAqcGlkOwogCWludCAgICBjbG9zZWNvdW50ID0gMCwgbjsKIApAQCAtNDI4
LDYgKzc1Nyw3IEBACiAJCiAJY2hlY2tfdHR5X2NvdW50KHR0eSwgImRvX3R0eV9oYW5ndXAiKTsK
IAlmaWxlX2xpc3RfbG9jaygpOworCS8qIFRoaXMgYnJlYWtzIGZvciBmaWxlIGhhbmRsZXMgYmVp
bmcgc2VudCBvdmVyIEFGX1VOSVggc29ja2V0cyA/ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShm
aWxwLCAmdHR5LT50dHlfZmlsZXMsIGZfbGlzdCkgewogCQlpZiAoZmlscC0+Zl9vcC0+d3JpdGUg
PT0gcmVkaXJlY3RlZF90dHlfd3JpdGUpCiAJCQljb25zX2ZpbHAgPSBmaWxwOwpAQCAtNDQwLDIx
ICs3NzAsMjUgQEAKIAlmaWxlX2xpc3RfdW5sb2NrKCk7CiAJCiAJLyogRklYTUUhIFdoYXQgYXJl
IHRoZSBsb2NraW5nIGlzc3VlcyBoZXJlPyBUaGlzIG1heSBtZSBvdmVyZG9pbmcgdGhpbmdzLi4K
LQkqIHRoaXMgcXVlc3Rpb24gaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgbm93IHRoYXQgd2UndmUg
cmVtb3ZlZCB0aGUgaXJxbG9jay4gKi8KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJICog
dGhpcyBxdWVzdGlvbiBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBub3cgdGhhdCB3ZSd2ZSByZW1v
dmVkIHRoZSBpcnFsb2NrLiAqLwogCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgLy8gRklYTUU6
IGlzIHRoaXMgc2FmZT8KLQkJaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQkJdHR5LT5s
ZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZihs
ZCAhPSBOVUxMKQkvKiBXZSBtYXkgaGF2ZSBubyBsaW5lIGRpc2NpcGxpbmUgYXQgdGhpcyBwb2lu
dCAqLworCXsKKwkJaWYgKGxkLT5mbHVzaF9idWZmZXIpCisJCQlsZC0+Zmx1c2hfYnVmZmVyKHR0
eSk7CiAJCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQkJdHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcih0dHkpOwogCQlpZiAoKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0
dHktPmZsYWdzKSkgJiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IC8v
IEZJWE1FOiBpcyB0aGlzIHNhZmU/CisJCSAgICBsZC0+d3JpdGVfd2FrZXVwKQorCQkJbGQtPndy
aXRlX3dha2V1cCh0dHkpOworCQlpZiAobGQtPmhhbmd1cCkKKwkJCWxkLT5oYW5ndXAodHR5KTsK
IAl9CiAKKwkvKiBGSVhNRTogT25jZSB3ZSB0cnVzdCB0aGUgTERJU0MgY29kZSBiZXR0ZXIgd2Ug
Y2FuIHdhaXQgaGVyZSBmb3IKKwkgICBsZGlzYyBjb21wbGV0aW9uIGFuZCBmaXggdGhlIGRyaXZl
ciBjYWxsIHJhY2UgKi8KKwkgICAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVf
d2FpdCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRfd2FpdCk7CiAKQEAgLTQ2
MywyMiArNzk3LDE5IEBACiAJICogTl9UVFkuCiAJICovCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbGFn
cyAmIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUykKKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7
CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfdGVybWlvc19sb2NrLCBmbGFncyk7CiAJCSp0dHkt
PnRlcm1pb3MgPSB0dHktPmRyaXZlci0+aW5pdF90ZXJtaW9zOwotCWlmICh0dHktPmxkaXNjLm51
bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewotCQlpZiAodHR5LT5sZGlzYy5jbG9zZSkKLQkJCSh0
dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCQltb2R1bGVfcHV0KHR0eS0+bGRpc2Mub3duZXIpOwot
CQkKLQkJdHR5LT5sZGlzYyA9IGxkaXNjc1tOX1RUWV07Ci0JCXR0eS0+dGVybWlvcy0+Y19saW5l
ID0gTl9UVFk7Ci0JCWlmICh0dHktPmxkaXNjLm9wZW4pIHsKLQkJCWludCBpID0gKHR0eS0+bGRp
c2Mub3BlbikodHR5KTsKLQkJCWlmIChpIDwgMCkKLQkJCQlwcmludGsoS0VSTl9FUlIgImRvX3R0
eV9oYW5ndXA6IE5fVFRZIG9wZW46ICIKLQkJCQkJCSJlcnJvciAlZFxuIiwgLWkpOwotCQl9CisJ
CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKIAl9CiAJ
CisJLyogRGVmZXIgbGRpc2Mgc3dpdGNoICovCisJLyogdHR5X2RlZmVycmVkX2xkaXNjX3N3aXRj
aChOX1RUWSk7CisJCisJICBUaGlzIHNob3VsZCBnZXQgZG9uZSBhdXRvbWF0aWNhbGx5IHdoZW4g
dGhlIHBvcnQgY2xvc2VzIGFuZAorCSAgdHR5X3JlbGVhc2UgaXMgY2FsbGVkICovCisJCiAJcmVh
ZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlpZiAodHR5LT5zZXNzaW9uID4gMCkgewogCQlzdHJ1
Y3QgbGlzdF9oZWFkICpsOwpAQCAtNTExLDYgKzg0MiwxNyBAQAogCQkJCXR0eS0+ZHJpdmVyLT5j
bG9zZSh0dHksIGNvbnNfZmlscCk7CiAJfSBlbHNlIGlmICh0dHktPmRyaXZlci0+aGFuZ3VwKQog
CQkodHR5LT5kcml2ZXItPmhhbmd1cCkodHR5KTsKKwkJCisJLyogV2UgZG9uJ3Qgd2FudCB0byBo
YXZlIGRyaXZlci9sZGlzYyBpbnRlcmFjdGlvbnMgYmV5b25kCisJICAgdGhlIG9uZXMgd2UgZGlk
IGhlcmUuIFRoZSBkcml2ZXIgbGF5ZXIgZXhwZWN0cyBubworCSAgIGNhbGxzIGFmdGVyIC0+aGFu
Z3VwKCkgZnJvbSB0aGUgbGRpc2Mgc2lkZS4gSG93ZXZlciB3ZQorCSAgIGNhbid0IHlldCBndWFy
YW50ZWUgYWxsIHRoYXQgKi8KKworCXNldF9iaXQoVFRZX0hVUFBFRCwgJnR0eS0+ZmxhZ3MpOwor
CWlmIChsZCkgeworCQl0dHlfbGRpc2NfZW5hYmxlKHR0eSk7CisJCXR0eV9sZGlzY19kZXJlZihs
ZCk7CisJfQogCXVubG9ja19rZXJuZWwoKTsKIAlpZiAoZikKIAkJZnB1dChmKTsKQEAgLTYyNyw5
ICs5NjksOSBAQAogCX0KIAlpZiAodHR5LT5kcml2ZXItPnN0YXJ0KQogCQkodHR5LT5kcml2ZXIt
PnN0YXJ0KSh0dHkpOwotCWlmICgodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+
ZmxhZ3MpKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSh0dHkpOworCisJLyogSWYgd2UgaGF2ZSBhIHJ1bm5pbmcgbGluZSBkaXNj
aXBsaW5lIGl0IG1heSBuZWVkIGtpY2tpbmcgKi8KKwl0dHlfd2FrZXVwKHR0eSk7CiAJd2FrZV91
cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogfQogCkBAIC02NDEsNiArOTgzLDcg
QEAKIAlpbnQgaTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eTsKIAlzdHJ1Y3QgaW5vZGUgKmlu
b2RlOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCiAJdHR5ID0gKHN0cnVjdCB0dHlfc3RydWN0
ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7
CkBAIC02NDksMTEgKzk5MiwxNSBAQAogCWlmICghdHR5IHx8ICh0ZXN0X2JpdChUVFlfSU9fRVJS
T1IsICZ0dHktPmZsYWdzKSkpCiAJCXJldHVybiAtRUlPOwogCisJLyogV2Ugd2FudCB0byB3YWl0
IGZvciB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIHNvcnQgb3V0IGluIHRoaXMKKwkgICBzaXR1YXRp
b24gKi8KKwlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwogCWxvY2tfa2VybmVsKCk7Ci0J
aWYgKHR0eS0+bGRpc2MucmVhZCkKLQkJaSA9ICh0dHktPmxkaXNjLnJlYWQpKHR0eSxmaWxlLGJ1
Zixjb3VudCk7CisJaWYgKGxkLT5yZWFkKQorCQlpID0gKGxkLT5yZWFkKSh0dHksZmlsZSxidWYs
Y291bnQpOwogCWVsc2UKIAkJaSA9IC1FSU87CisJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl1bmxv
Y2tfa2VybmVsKCk7CiAJaWYgKGkgPiAwKQogCQlpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElN
RTsKQEAgLTcxNSwxNiArMTA2MiwyMyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICogdHR5Owog
CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQorCXNzaXpl
X3QgcmV0OworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCQogCXR0eSA9IChzdHJ1Y3QgdHR5X3N0
cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwg
aW5vZGUsICJ0dHlfd3JpdGUiKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKCF0dHkgfHwgIXR0eS0+
ZHJpdmVyLT53cml0ZSB8fCAodGVzdF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncykpKQog
CQlyZXR1cm4gLUVJTzsKLQlpZiAoIXR0eS0+bGRpc2Mud3JpdGUpCi0JCXJldHVybiAtRUlPOwot
CXJldHVybiBkb190dHlfd3JpdGUodHR5LT5sZGlzYy53cml0ZSwgdHR5LCBmaWxlLAorCisJbGQg
PSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTsJCQorCWlmICghbGQtPndyaXRlKQorCQlyZXQgPSAt
RUlPOworCWVsc2UKKwkJcmV0ID0gZG9fdHR5X3dyaXRlKGxkLT53cml0ZSwgdHR5LCBmaWxlLAog
CQkJICAgIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqKWJ1ZiwgY291bnQpOworCXR0eV9s
ZGlzY19kZXJlZihsZCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3NpemVfdCByZWRpcmVjdGVkX3R0
eV93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLCBzaXpl
X3QgY291bnQsCkBAIC05MTAsNiArMTI2NCw3IEBACiAJICogSWYgd2UgZmFpbCBoZXJlIGp1c3Qg
Y2FsbCByZWxlYXNlX21lbSB0byBjbGVhbiB1cC4gIE5vIG5lZWQKIAkgKiB0byBkZWNyZW1lbnQg
dGhlIHVzZSBjb3VudHMsIGFzIHJlbGVhc2VfbWVtIGRvZXNuJ3QgY2FyZS4KIAkgKi8KKwogCWlm
ICh0dHktPmxkaXNjLm9wZW4pIHsKIAkJcmV0dmFsID0gKHR0eS0+bGRpc2Mub3BlbikodHR5KTsK
IAkJaWYgKHJldHZhbCkKQEAgLTkyMiw3ICsxMjc3LDkgQEAKIAkJCQkodHR5LT5sZGlzYy5jbG9z
ZSkodHR5KTsKIAkJCWdvdG8gcmVsZWFzZV9tZW1fb3V0OwogCQl9CisJCXR0eV9sZGlzY19lbmFi
bGUob190dHkpOwogCX0KKwl0dHlfbGRpc2NfZW5hYmxlKHR0eSk7CiAJZ290byBzdWNjZXNzOwog
CiAJLyoKQEAgLTk1MSw2ICsxMzA4LDkgQEAKIAl0dHktPmNvdW50Kys7CiAJdHR5LT5kcml2ZXIg
PSBkcml2ZXI7IC8qIE4uQi4gd2h5IGRvIHRoaXMgZXZlcnkgdGltZT8/ICovCiAKKwkvKiBGSVhN
RSAqLworCWlmKCF0ZXN0X2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKSkKKwkJcHJpbnRrKEtF
Uk5fRVJSICJpbml0X2RldiBidXQgbm8gbGRpc2NcbiIpOwogc3VjY2VzczoKIAkqcmV0X3R0eSA9
IHR0eTsKIAkKQEAgLTEwNTQsNiArMTQxNCw3IEBACiAJaW50CWRldnB0c19tYXN0ZXIsIGRldnB0
czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQog
CXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZiAodHR5
X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsICJyZWxlYXNlX2Rl
diIpKQpAQCAtMTEzMCw3ICsxNDkxLDYgQEAKIAkJfQogCX0KICNlbmRpZgotCiAJaWYgKHR0eS0+
ZHJpdmVyLT5jbG9zZSkKIAkJdHR5LT5kcml2ZXItPmNsb3NlKHR0eSwgZmlscCk7CiAKQEAgLTEy
NTQsMzYgKzE2MTQsNTggQEAKICNpZmRlZiBUVFlfREVCVUdfSEFOR1VQCiAJcHJpbnRrKEtFUk5f
REVCVUcgImZyZWVpbmcgdHR5IHN0cnVjdHVyZS4uLiIpOwogI2VuZGlmCi0KIAkvKgogCSAqIFBy
ZXZlbnQgZmx1c2hfdG9fbGRpc2MoKSBmcm9tIHJlc2NoZWR1bGluZyB0aGUgd29yayBmb3IgbGF0
ZXIuICBUaGVuCi0JICoga2lsbCBhbnkgZGVsYXllZCB3b3JrLgorCSAqIGtpbGwgYW55IGRlbGF5
ZWQgd29yay4gQXMgdGhpcyBpcyB0aGUgZmluYWwgY2xvc2UgaXQgZG9lcyBub3QKKwkgKiByYWNl
IHdpdGggdGhlIHNldF9sZGlzYyBjb2RlIHBhdGguCiAJICovCisJY2xlYXJfYml0KFRUWV9MRElT
QywgJnR0eS0+ZmxhZ3MpOwogCWNsZWFyX2JpdChUVFlfRE9OVF9GTElQLCAmdHR5LT5mbGFncyk7
CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmdHR5LT5mbGlwLndvcmspOwogCiAJLyoKIAkgKiBXYWl0
IGZvciAtPmhhbmd1cF93b3JrIGFuZCAtPmZsaXAud29yayBoYW5kbGVycyB0byB0ZXJtaW5hdGUK
IAkgKi8KKwkgCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQorCQorCS8qCisJICogV2FpdCBm
b3IgYW55IHNob3J0IHRlcm0gdXNlcnMgKHdlIGtub3cgdGhleSBhcmUganVzdCBkcml2ZXIKKwkg
KiBzaWRlIHdhaXRlcnMgYXMgdGhlIGZpbGUgaXMgY2xvc2luZyBzbyB1c2VyIGNvdW50IG9uIHRo
ZSBmaWxlCisJICogc2lkZSBpcyB6ZXJvLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlf
bGRpc2NfbG9jaywgZmxhZ3MpOworCXdoaWxlKHR0eS0+bGRpc2MucmVmY291bnQpCisJeworCQlz
cGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCQl3YWl0X2V2
ZW50KHR0eV9sZGlzY193YWl0LCB0dHktPmxkaXNjLnJlZmNvdW50ID09IDApOworCQlzcGluX2xv
Y2tfaXJxc2F2ZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJx
cmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIFNodXRkb3duIHRoZSBj
dXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvIE5fVFRZLgogCSAqIE4uQi4g
d2h5IHJlc2V0IGxkaXNjIHdoZW4gd2UncmUgcmVsZWFzaW5nIHRoZSBtZW1vcnk/PworCSAqCisJ
ICogRklYTUU6IHRoaXMgTVVTVCBnZXQgZml4ZWQgZm9yIHRoZSBuZXcgcmVmbG9ja2luZwogCSAq
LwogCWlmICh0dHktPmxkaXNjLmNsb3NlKQogCQkodHR5LT5sZGlzYy5jbG9zZSkodHR5KTsKLQlt
b2R1bGVfcHV0KHR0eS0+bGRpc2Mub3duZXIpOworCXR0eV9sZGlzY19wdXQodHR5LT5sZGlzYy5u
dW0pOwogCQotCXR0eS0+bGRpc2MgPSBsZGlzY3NbTl9UVFldOwotCXR0eS0+dGVybWlvcy0+Y19s
aW5lID0gTl9UVFk7CisJLyoKKwkgKglTd2l0Y2ggdGhlIGxpbmUgZGlzY2lwbGluZSBiYWNrCisJ
ICovCisJdHR5X2xkaXNjX2Fzc2lnbih0dHksIHR0eV9sZGlzY19nZXQoTl9UVFkpKTsKKwl0dHlf
c2V0X3Rlcm1pb3NfbGRpc2ModHR5LE5fVFRZKTsgCiAJaWYgKG9fdHR5KSB7CisJCS8qIEZJWE1F
OiBjb3VsZCBvX3R0eSBiZSBpbiBzZXRsZGlzYyBoZXJlID8gKi8KKwkJY2xlYXJfYml0KFRUWV9M
RElTQywgJm9fdHR5LT5mbGFncyk7CiAJCWlmIChvX3R0eS0+bGRpc2MuY2xvc2UpCiAJCQkob190
dHktPmxkaXNjLmNsb3NlKShvX3R0eSk7Ci0JCW1vZHVsZV9wdXQob190dHktPmxkaXNjLm93bmVy
KTsKLQkJb190dHktPmxkaXNjID0gbGRpc2NzW05fVFRZXTsKKwkJdHR5X2xkaXNjX3B1dChvX3R0
eS0+bGRpc2MubnVtKTsKKwkJdHR5X2xkaXNjX2Fzc2lnbihvX3R0eSwgdHR5X2xkaXNjX2dldChO
X1RUWSkpOworCQl0dHlfc2V0X3Rlcm1pb3NfbGRpc2Mob190dHksTl9UVFkpOyAKIAl9Ci0KIAkv
KgogCSAqIFRoZSByZWxlYXNlX21lbSBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoZSBkZXRhaWxz
IG9mIGNsZWFyaW5nCiAJICogdGhlIHNsb3RzIGFuZCBwcmVzZXJ2aW5nIHRoZSB0ZXJtaW9zIHN0
cnVjdHVyZS4KQEAgLTEzMjMsNiArMTcwNSw3IEBACiAJdW5zaWduZWQgc2hvcnQgc2F2ZWRfZmxh
Z3MgPSBmaWxwLT5mX2ZsYWdzOwogCiAJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CisJ
CiByZXRyeV9vcGVuOgogCW5vY3R0eSA9IGZpbHAtPmZfZmxhZ3MgJiBPX05PQ1RUWTsKIAlpbmRl
eCAgPSAtMTsKQEAgLTE0NzksMTQgKzE4NjIsMTggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHR5
X3BvbGwoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKIAlzdHJ1Y3Qg
dHR5X3N0cnVjdCAqIHR0eTsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwlpbnQgcmV0ID0gMDsK
IAogCXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZiAo
dHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsICJ0dHlfcG9s
bCIpKQogCQlyZXR1cm4gMDsKLQotCWlmICh0dHktPmxkaXNjLnBvbGwpCi0JCXJldHVybiAodHR5
LT5sZGlzYy5wb2xsKSh0dHksIGZpbHAsIHdhaXQpOwotCXJldHVybiAwOworCQkKKwlsZCA9IHR0
eV9sZGlzY19yZWZfd2FpdCh0dHkpOworCWlmIChsZC0+cG9sbCkKKwkJcmV0ID0gKGxkLT5wb2xs
KSh0dHksIGZpbHAsIHdhaXQpOworCXR0eV9sZGlzY19kZXJlZihsZCk7CisJcmV0dXJuIHJldDsK
IH0KIAogc3RhdGljIGludCB0dHlfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxwLCBp
bnQgb24pCkBAIC0xNTE4LDEyICsxOTA1LDE1IEBACiBzdGF0aWMgaW50IHRpb2NzdGkoc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBfX3VzZXIgKnApCiB7CiAJY2hhciBjaCwgbWJ6ID0gMDsK
LQorCXN0cnVjdCB0dHlfbGRpc2MgKmxkOworCQogCWlmICgoY3VycmVudC0+c2lnbmFsLT50dHkg
IT0gdHR5KSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlp
ZiAoZ2V0X3VzZXIoY2gsIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl0dHktPmxkaXNjLnJlY2Vp
dmVfYnVmKHR0eSwgJmNoLCAmbWJ6LCAxKTsKKwlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkp
OworCWxkLT5yZWNlaXZlX2J1Zih0dHksICZjaCwgJm1ieiwgMSk7CisJdHR5X2xkaXNjX2RlcmVm
KGxkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc3Miw2ICsyMTYyLDcgQEAKIAlzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5LCAqcmVhbF90dHk7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIg
Kilhcmc7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAkKIAl0dHkgPSAo
c3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKHR0eV9wYXJhbm9p
YV9jaGVjayh0dHksIGlub2RlLCAidHR5X2lvY3RsIikpCkBAIC0xODYxLDYgKzIyNTIsNyBAQAog
CQljYXNlIFRJT0NHU0lEOgogCQkJcmV0dXJuIHRpb2Nnc2lkKHR0eSwgcmVhbF90dHksIHApOwog
CQljYXNlIFRJT0NHRVREOgorCQkJLyogRklYTUU6IGNoZWNrIHRoaXMgaXMgb2sgKi8KIAkJCXJl
dHVybiBwdXRfdXNlcih0dHktPmxkaXNjLm51bSwgKGludCBfX3VzZXIgKilwKTsKIAkJY2FzZSBU
SU9DU0VURDoKIAkJCXJldHVybiB0aW9jc2V0ZCh0dHksIHApOwpAQCAtMTg5OSwxNiArMjI5MSwx
OSBAQAogCQkJcmV0dXJuIHR0eV90aW9jbXNldCh0dHksIGZpbGUsIGNtZCwgcCk7CiAJfQogCWlm
ICh0dHktPmRyaXZlci0+aW9jdGwpIHsKLQkJaW50IHJldHZhbCA9ICh0dHktPmRyaXZlci0+aW9j
dGwpKHR0eSwgZmlsZSwgY21kLCBhcmcpOworCQlyZXR2YWwgPSAodHR5LT5kcml2ZXItPmlvY3Rs
KSh0dHksIGZpbGUsIGNtZCwgYXJnKTsKIAkJaWYgKHJldHZhbCAhPSAtRU5PSU9DVExDTUQpCiAJ
CQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpZiAodHR5LT5sZGlzYy5pb2N0bCkgewotCQlpbnQgcmV0
dmFsID0gKHR0eS0+bGRpc2MuaW9jdGwpKHR0eSwgZmlsZSwgY21kLCBhcmcpOwotCQlpZiAocmV0
dmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCXJldHVybiByZXR2YWw7CisJbGQgPSB0dHlfbGRpc2Nf
cmVmX3dhaXQodHR5KTsKKwlyZXR2YWwgPSAtRUlOVkFMOworCWlmIChsZC0+aW9jdGwpIHsKKwkJ
cmV0dmFsID0gbGQtPmlvY3RsKHR0eSwgZmlsZSwgY21kLCBhcmcpOworCQlpZiAocmV0dmFsID09
IC1FTk9JT0NUTENNRCkKKwkJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQotCXJldHVybiAtRUlOVkFM
OworCXR0eV9sZGlzY19kZXJlZihsZCk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC0xOTQz
LDE0ICsyMzM4LDIxIEBACiAJaW50IHNlc3Npb247CiAJaW50CQlpOwogCXN0cnVjdCBmaWxlCSpm
aWxwOworCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7CiAJCiAJaWYgKCF0dHkpCiAJCXJldHVybjsK
IAlzZXNzaW9uICA9IHR0eS0+c2Vzc2lvbjsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIp
Ci0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCisJLyogV2UgZG9uJ3Qgd2FudCBh
biBsZGlzYyBzd2l0Y2ggZHVyaW5nIHRoaXMgKi8KKwlkaXNjID0gdHR5X2xkaXNjX3JlZih0dHkp
OworCWlmIChkaXNjICYmIGRpc2MtPmZsdXNoX2J1ZmZlcikKKwkJZGlzYy0+Zmx1c2hfYnVmZmVy
KHR0eSk7CisJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOworCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVz
aF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKKwkKIAlyZWFkX2xv
Y2soJnRhc2tsaXN0X2xvY2spOwogCWZvcl9lYWNoX3Rhc2tfcGlkKHNlc3Npb24sIFBJRFRZUEVf
U0lELCBwLCBsLCBwaWQpIHsKIAkJaWYgKHAtPnNpZ25hbC0+dHR5ID09IHR0eSB8fCBzZXNzaW9u
ID4gMCkgewpAQCAtMjAwMiwyNCArMjQwNCwyOSBAQAogCiAvKgogICogVGhpcyByb3V0aW5lIGlz
IGNhbGxlZCBvdXQgb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCB0byBmbHVzaCBkYXRhCi0gKiBm
cm9tIHRoZSBmbGlwIGJ1ZmZlciB0byB0aGUgbGluZSBkaXNjaXBsaW5lLgorICogZnJvbSB0aGUg
ZmxpcCBidWZmZXIgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4gCiAgKi8KKyAKIHN0YXRpYyB2b2lk
IGZsdXNoX3RvX2xkaXNjKHZvaWQgKnByaXZhdGVfKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0
dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgcHJpdmF0ZV87CiAJdW5zaWduZWQgY2hhcgkqY3A7
CiAJY2hhcgkJKmZwOwogCWludAkJY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNp
Z25lZCBsb25nIAlmbGFnczsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpkaXNjOworCisJZGlzYyA9IHR0
eV9sZGlzY19yZWYodHR5KTsKKwlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLwor
CQlyZXR1cm47CiAKIAlpZiAodGVzdF9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpKSB7
CiAJCS8qCiAJCSAqIERvIGl0IGFmdGVyIHRoZSBuZXh0IHRpbWVyIHRpY2s6CiAJCSAqLwogCQlz
Y2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+ZmxpcC53b3JrLCAxKTsKLQkJcmV0dXJuOworCQln
b3RvIG91dDsKIAl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdz
KTsKIAlpZiAodHR5LT5mbGlwLmJ1Zl9udW0pIHsKIAkJY3AgPSB0dHktPmZsaXAuY2hhcl9idWYg
KyBUVFlfRkxJUEJVRl9TSVpFOwpAQCAtMjAzOCw3ICsyNDQ1LDMxIEBACiAJdHR5LT5mbGlwLmNv
dW50ID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPnJlYWRfbG9jaywgZmxhZ3Mp
OwogCi0JdHR5LT5sZGlzYy5yZWNlaXZlX2J1Zih0dHksIGNwLCBmcCwgY291bnQpOworCWRpc2Mt
PnJlY2VpdmVfYnVmKHR0eSwgY3AsIGZwLCBjb3VudCk7CitvdXQ6CisJdHR5X2xkaXNjX2RlcmVm
KGRpc2MpOworfQorCisvKgorICoJQ2FsbCB0aGUgbGRpc2MgZmx1c2ggZGlyZWN0bHkgZnJvbSBh
IGRyaXZlci4gVGhpcyBmdW5jdGlvbiBtYXkKKyAqCXJldHVybiBhbiBlcnJvciBhbmQgbmVlZCBy
ZXRyeWluZyBieSB0aGUgdXNlci4KKyAqLworCitpbnQgdHR5X3B1c2hfZGF0YShzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpjcCwgdW5zaWduZWQgY2hhciAqZnAsIGludCBj
b3VudCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpkaXNjOworCQorCWRp
c2MgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYodGVzdF9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0
eS0+ZmxhZ3MpKQorCQlyZXQgPSAtRUFHQUlOOworCWVsc2UgaWYoZGlzYyA9PSBOVUxMKQorCQly
ZXQgPSAtRUlPOworCWVsc2UKKwkJZGlzYy0+cmVjZWl2ZV9idWYodHR5LCBjcCwgZnAsIGNvdW50
KTsKKwl0dHlfbGRpc2NfZGVyZWYoZGlzYyk7CisJcmV0dXJuIHJldDsKKwkKIH0KIAogLyoKQEAg
LTIwNjAsOSArMjQ5MSwyMCBAQAogCiBzdGF0aWMgaW50IG5fYmF1ZF90YWJsZSA9IEFSUkFZX1NJ
WkUoYmF1ZF90YWJsZSk7CiAKKy8qKgorICoJdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlCisgKglAdGVy
bWlvczogdGVybWlvcyBzdHJ1Y3R1cmUKKyAqCisgKglDb252ZXJ0IHRlcm1pb3MgYmF1ZCByYXRl
IGRhdGEgaW50byBhIHNwZWVkLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQKKyAqCXdpdGggdGhlIHRl
cm1pb3MgbG9jayBoZWxkIGlmIHRoaXMgdGVybWlvcyBpcyBhIHRlcm1pbmFsIHRlcm1pb3MKKyAq
CXN0cnVjdHVyZS4gTWF5IGNoYW5nZSB0aGUgdGVybWlvcyBkYXRhLgorICovCisgCiBpbnQgdHR5
X3Rlcm1pb3NfYmF1ZF9yYXRlKHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zKQogewotCXVuc2lnbmVk
IGludCBjYmF1ZCA9IHRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRDsKKwl1bnNpZ25lZCBpbnQgY2Jh
dWQ7CisJCisJY2JhdWQgPSB0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQ7CiAKIAlpZiAoY2JhdWQg
JiBDQkFVREVYKSB7CiAJCWNiYXVkICY9IH5DQkFVREVYOwpAQCAtMjA3MiwxMiArMjUxNCwyMCBA
QAogCQllbHNlCiAJCQljYmF1ZCArPSAxNTsKIAl9Ci0KIAlyZXR1cm4gYmF1ZF90YWJsZVtjYmF1
ZF07CiB9CiAKIEVYUE9SVF9TWU1CT0wodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKTsKIAorLyoqCisg
Kgl0dHlfZ2V0X2JhdWRfcmF0ZQktCWdldCB0dHkgYml0IHJhdGVzCisgKglAdHR5OiB0dHkgdG8g
cXVlcnkKKyAqCisgKglSZXR1cm5zIHRoZSBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlciBmb3IgdGhp
cyB0ZXJtaW5hbC4gVGhlCisgKgl0ZXJtaW9zIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxs
ZXIgYW5kIHRoZSB0ZXJtaW5hbCBiaXQKKyAqCWZsYWdzIG1heSBiZSB1cGRhdGVkLgorICovCisg
CiBpbnQgdHR5X2dldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpbnQg
YmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0dHktPnRlcm1pb3MpOwpAQCAtMjA5Niw2ICsy
NTQ2LDE3IEBACiAKIEVYUE9SVF9TWU1CT0wodHR5X2dldF9iYXVkX3JhdGUpOwogCisvKioKKyAq
CXR0eV9mbGlwX2J1ZmZlcl9wdXNoCS0JdGVybWluYWwKKyAqCUB0dHk6IHR0eSB0byBwdXNoCisg
KgorICoJUXVldWUgYSBwdXNoIG9mIHRoZSB0ZXJtaW5hbCBmbGlwIGJ1ZmZlcnMgdG8gdGhlIGxp
bmUgZGlzY2lwbGluZS4gVGhpcworICoJZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGZyb20g
SVJRIGNvbnRleHQgaWYgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQuCisgKgorICoJSW4gdGhlIGV2
ZW50IG9mIHRoZSBxdWV1ZSBiZWluZyBidXN5IGZvciBmbGlwcGluZyB0aGUgd29yayB3aWxsIGJl
CisgKgloZWxkIG9mZiBhbmQgcmV0cmllZCBsYXRlci4KKyAqLworCiB2b2lkIHR0eV9mbGlwX2J1
ZmZlcl9wdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaWYgKHR0eS0+bG93X2xhdGVu
Y3kpCkBAIC0yMTEzLDcgKzI1NzQsNyBAQAogewogCW1lbXNldCh0dHksIDAsIHNpemVvZihzdHJ1
Y3QgdHR5X3N0cnVjdCkpOwogCXR0eS0+bWFnaWMgPSBUVFlfTUFHSUM7Ci0JdHR5LT5sZGlzYyA9
IGxkaXNjc1tOX1RUWV07CisJdHR5X2xkaXNjX2Fzc2lnbih0dHksIHR0eV9sZGlzY19nZXQoTl9U
VFkpKTsKIAl0dHktPnBncnAgPSAtMTsKIAl0dHktPmZsaXAuY2hhcl9idWZfcHRyID0gdHR5LT5m
bGlwLmNoYXJfYnVmOwogCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgPSB0dHktPmZsaXAuZmxhZ19i
dWY7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMg
bGludXgtMi42LjgvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCi0tLSBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwkyMDA0LTA4LTEzIDIyOjM4OjEwLjAwMDAwMDAwMCAt
MDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCTIwMDQtMTEtMjgg
MDQ6NDk6NTQuNTkxNDgxMjMzIC0wODAwCkBAIC0yOSw2ICsyOSw4IEBACiAKICN1bmRlZglERUJV
RwogCitleHRlcm4gc3BpbmxvY2tfdCB0dHlfdGVybWlvc19sb2NrOworCiAvKgogICogSW50ZXJu
YWwgZmxhZyBvcHRpb25zIGZvciB0ZXJtaW9zIHNldHRpbmcgYmVoYXZpb3IKICAqLwpAQCAtOTgs
OCArMTAwLDE4IEBACiB7CiAJaW50IGNhbm9uX2NoYW5nZTsKIAlzdHJ1Y3QgdGVybWlvcyBvbGRf
dGVybWlvcyA9ICp0dHktPnRlcm1pb3M7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJdW5zaWdu
ZWQgbG9uZyBmbGFnczsKKwkKKwkvKgorCSAqCVBlcmZvcm0gdGhlIGFjdHVhbCB0ZXJtaW9zIGlu
dGVybmFsIGNoYW5nZXMgdW5kZXIgbG9jay4KKwkgKi8KKwkgCisKKwkvKiBGSVhNRTogd2UgbmVl
ZCB0byBkZWNpZGUgb24gc29tZSBsb2NraW5nL29yZGVyaW5nIHNlbWFudGljcworCSAgIGZvciB0
aGUgc2V0X3Rlcm1pb3Mgbm90aWZpY2F0aW9uIGV2ZW50dWFsbHkgKi8KKwlzcGluX2xvY2tfaXJx
c2F2ZSgmdHR5X3Rlcm1pb3NfbG9jaywgZmxhZ3MpOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsg
Ly8gRklYTUU6IGlzIHRoaXMgc2FmZT8KIAkqdHR5LT50ZXJtaW9zID0gKm5ld190ZXJtaW9zOwog
CXVuc2V0X2xvY2tlZF90ZXJtaW9zKHR0eS0+dGVybWlvcywgJm9sZF90ZXJtaW9zLCB0dHktPnRl
cm1pb3NfbG9ja2VkKTsKIAljYW5vbl9jaGFuZ2UgPSAob2xkX3Rlcm1pb3MuY19sZmxhZyBeIHR0
eS0+dGVybWlvcy0+Y19sZmxhZykgJiBJQ0FOT047CkBAIC0xMDksMTIgKzEyMSwxMyBAQAogCQl0
dHktPmNhbm9uX2RhdGEgPSAwOwogCQl0dHktPmVyYXNpbmcgPSAwOwogCX0KLQlsb2NhbF9pcnFf
ZW5hYmxlKCk7IC8vIEZJWE1FOiBpcyB0aGlzIHNhZmU/CisJCisJCiAJaWYgKGNhbm9uX2NoYW5n
ZSAmJiAhTF9JQ0FOT04odHR5KSAmJiB0dHktPnJlYWRfY250KQogCQkvKiBHZXQgY2hhcmFjdGVy
cyBsZWZ0IG92ZXIgZnJvbSBjYW5vbmljYWwgbW9kZS4gKi8KIAkJd2FrZV91cF9pbnRlcnJ1cHRp
YmxlKCZ0dHktPnJlYWRfd2FpdCk7CiAKLQkvKiBzZWUgaWYgcGFja2V0IG1vZGUgY2hhbmdlIG9m
IHN0YXRlICovCisJLyogU2VlIGlmIHBhY2tldCBtb2RlIGNoYW5nZSBvZiBzdGF0ZS4gKi8KIAog
CWlmICh0dHktPmxpbmsgJiYgdHR5LT5saW5rLT5wYWNrZXQpIHsKIAkJaW50IG9sZF9mbG93ID0g
KChvbGRfdGVybWlvcy5jX2lmbGFnICYgSVhPTikgJiYKQEAgLTEzMiwxNyArMTQ1LDIzIEBACiAJ
CQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+bGluay0+cmVhZF93YWl0KTsKIAkJfQogCX0K
LQorCSAgIAogCWlmICh0dHktPmRyaXZlci0+c2V0X3Rlcm1pb3MpCiAJCSgqdHR5LT5kcml2ZXIt
PnNldF90ZXJtaW9zKSh0dHksICZvbGRfdGVybWlvcyk7CiAKLQlpZiAodHR5LT5sZGlzYy5zZXRf
dGVybWlvcykKLQkJKCp0dHktPmxkaXNjLnNldF90ZXJtaW9zKSh0dHksICZvbGRfdGVybWlvcyk7
CisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYgKGxkICE9IE5VTEwpIHsKKwkJaWYgKGxk
LT5zZXRfdGVybWlvcykKKwkJCShsZC0+c2V0X3Rlcm1pb3MpKHR0eSwgJm9sZF90ZXJtaW9zKTsK
KwkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5
X3Rlcm1pb3NfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHNldF90ZXJtaW9zKHN0cnVj
dCB0dHlfc3RydWN0ICogdHR5LCB2b2lkIF9fdXNlciAqYXJnLCBpbnQgb3B0KQogewogCXN0cnVj
dCB0ZXJtaW9zIHRtcF90ZXJtaW9zOworCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCWludCByZXR2
YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7CiAKIAlpZiAocmV0dmFsKQpAQCAtMTU5LDkgKzE3
OCwxNCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JaWYgKChvcHQgJiBURVJNSU9TX0ZM
VVNIKSAmJiB0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZm
ZXIodHR5KTsKLQorCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOworCQorCWlmIChsZCAhPSBOVUxM
KSB7CisJCWlmICgob3B0ICYgVEVSTUlPU19GTFVTSCkgJiYgbGQtPmZsdXNoX2J1ZmZlcikKKwkJ
CWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwl9CisJCiAJ
aWYgKG9wdCAmIFRFUk1JT1NfV0FJVCkgewogCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7
CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTIyNSwxMiArMjQ5LDE2IEBACiBz
dGF0aWMgaW50IGdldF9zZ3R0eWIoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBzZ3R0
eWIgX191c2VyICogc2d0dHliKQogewogCXN0cnVjdCBzZ3R0eWIgdG1wOworCXVuc2lnbmVkIGxv
bmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5X3Rlcm1pb3NfbG9jaywgZmxhZ3Mp
OwogCXRtcC5zZ19pc3BlZWQgPSAwOwogCXRtcC5zZ19vc3BlZWQgPSAwOwogCXRtcC5zZ19lcmFz
ZSA9IHR0eS0+dGVybWlvcy0+Y19jY1tWRVJBU0VdOwogCXRtcC5zZ19raWxsID0gdHR5LT50ZXJt
aW9zLT5jX2NjW1ZLSUxMXTsKIAl0bXAuc2dfZmxhZ3MgPSBnZXRfc2dmbGFncyh0dHkpOworCXNw
aW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKKwkKIAlyZXR1
cm4gY29weV90b191c2VyKHNndHR5YiwgJnRtcCwgc2l6ZW9mKHRtcCkpID8gLUVGQVVMVCA6IDA7
CiB9CiAKQEAgLTI2NSwxNiArMjkzLDIxIEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3Qgc2d0dHli
IHRtcDsKIAlzdHJ1Y3QgdGVybWlvcyB0ZXJtaW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAK
IAlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJu
IHJldHZhbDsKLQl0ZXJtaW9zID0gICp0dHktPnRlcm1pb3M7CisJCiAJaWYgKGNvcHlfZnJvbV91
c2VyKCZ0bXAsIHNndHR5Yiwgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwkJCisJ
c3Bpbl9sb2NrX2lycXNhdmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKKwl0ZXJtaW9zID0g
ICp0dHktPnRlcm1pb3M7CiAJdGVybWlvcy5jX2NjW1ZFUkFTRV0gPSB0bXAuc2dfZXJhc2U7CiAJ
dGVybWlvcy5jX2NjW1ZLSUxMXSA9IHRtcC5zZ19raWxsOwogCXNldF9zZ2ZsYWdzKCZ0ZXJtaW9z
LCB0bXAuc2dfZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eV90ZXJtaW9zX2xv
Y2ssIGZsYWdzKTsKIAljaGFuZ2VfdGVybWlvcyh0dHksICZ0ZXJtaW9zKTsKIAlyZXR1cm4gMDsK
IH0KQEAgLTM2NSw2ICszOTgsOCBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICogcmVhbF90dHk7CiAJ
dm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHJldHZhbDsKKwlzdHJ1
Y3QgdHR5X2xkaXNjICpsZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHR0eS0+ZHJp
dmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkgICAgdHR5LT5kcml2ZXItPnN1
YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQpAQCAtNDQzLDIyICs0NzgsMjYgQEAKIAkJCXJldHZh
bCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKIAkJCWlmIChyZXR2YWwpCiAJCQkJcmV0dXJuIHJl
dHZhbDsKKwkJCQkKKwkJCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCQkJc3dpdGNoIChhcmcp
IHsKIAkJCWNhc2UgVENJRkxVU0g6Ci0JCQkJaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQot
CQkJCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQkJCWlmIChsZC0+Zmx1c2hfYnVm
ZmVyKQorCQkJCQlsZC0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRD
SU9GTFVTSDoKLQkJCQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQkJCXR0eS0+bGRp
c2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCQkJaWYgKGxkLT5mbHVzaF9idWZmZXIpCisJCQkJCWxk
LT5mbHVzaF9idWZmZXIodHR5KTsKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJCWNhc2UgVENP
RkxVU0g6CiAJCQkJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCQkJCXR0eS0+ZHJp
dmVyLT5mbHVzaF9idWZmZXIodHR5KTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CisJCQkJdHR5
X2xkaXNjX2RlcmVmKGxkKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KKwkJCXR0eV9sZGlz
Y19kZXJlZihsZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBUSU9DT1VUUToKIAkJCXJldHVybiBw
dXRfdXNlcih0dHktPmRyaXZlci0+Y2hhcnNfaW5fYnVmZmVyID8KQEAgLTUwNCw5ICs1NDMsMTEg
QEAKIAkJY2FzZSBUSU9DU1NPRlRDQVI6CiAJCQlpZiAoZ2V0X3VzZXIoYXJnLCAodW5zaWduZWQg
aW50IF9fdXNlciAqKSBhcmcpKQogCQkJCXJldHVybiAtRUZBVUxUOworCQkJc3Bpbl9sb2NrX2ly
cXNhdmUoJnR0eV90ZXJtaW9zX2xvY2ssIGZsYWdzKTsKIAkJCXR0eS0+dGVybWlvcy0+Y19jZmxh
ZyA9CiAJCQkJKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8CiAJCQkJIChhcmcg
PyBDTE9DQUwgOiAwKSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfdGVybWlvc19s
b2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PSU9D
VExDTUQ7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvdmlvY29ucy5j
IGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci92aW9jb25zLmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcv
ZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwkyMDA0LTA4LTEzIDIyOjM2OjEwLjAwMDAwMDAwMCAtMDcw
MAorKysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwkyMDA0LTExLTI4IDA0OjQ5
OjQyLjc2NzQwMjQwOCAtMDgwMApAQCAtNDIyLDEwICs0MjIsNyBAQAogCQkJcGktPm92ZXJmbG93
TWVzc2FnZSA9IDA7CiAKIAkJaWYgKHBpLT50dHkpIHsKLQkJCWlmICgocGktPnR0eS0+ZmxhZ3Mg
JiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJCSAgICAocGktPnR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSkKLQkJCQkocGktPnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKShwaS0+dHR5
KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGktPnR0eS0+d3JpdGVfd2FpdCk7CisJCQl0
dHlfd2FrZXVwKHBpLT50dHkpOwogCQl9CiAJfQogCmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3Jp
Zy9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jIGxpbnV4LTIuNi44L2RyaXZlcnMvY2hhci92bWVfc2Nj
LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwkyMDA0LTA4LTEz
IDIyOjM2OjExLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3Zt
ZV9zY2MuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjc3OTQwMDQ1OSAtMDgwMApAQCAtNTQ0LDEyICs1
NDQsOCBAQAogCQlTQ0N3cml0ZShDT01NQU5EX1JFRywgQ1JfVFhfUEVORElOR19SRVNFVCk7ICAg
LyogZGlzYWJsZSB0eF9pbnQgb24gbmV4dCB0eCB1bmRlcnJ1bj8gKi8KIAkJcG9ydC0+Z3MuZmxh
Z3MgJj0gfkdTX1RYX0lOVEVOOwogCX0KLQlpZiAocG9ydC0+Z3MudHR5ICYmIHBvcnQtPmdzLnht
aXRfY250IDw9IHBvcnQtPmdzLndha2V1cF9jaGFycykgewotCQlpZiAoKHBvcnQtPmdzLnR0eS0+
ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkJCQlwb3J0LT5ncy50dHkt
PmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCShwb3J0LT5ncy50dHktPmxkaXNjLndyaXRlX3dha2V1
cCkocG9ydC0+Z3MudHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5ncy50dHkt
PndyaXRlX3dhaXQpOwotCX0KKwlpZiAocG9ydC0+Z3MudHR5ICYmIHBvcnQtPmdzLnhtaXRfY250
IDw9IHBvcnQtPmdzLndha2V1cF9jaGFycykKKwkJdHR5X3dha2V1cChwb3J0LT5ncy50dHkpOwog
CiAJU0NDd3JpdGVfTkIoQ09NTUFORF9SRUcsIENSX0hJR0hFU1RfSVVTX1JFU0VUKTsKIAlyZXR1
cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL2NoYXIv
dnRfaW9jdGwuYyBsaW51eC0yLjYuOC9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwotLS0gbGludXgt
Mi42Ljgub3JpZy9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwkyMDA0LTA4LTEzIDIyOjM3OjI2LjAw
MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMJMjAw
NC0xMS0yOCAwNDo0OTo0Mi43ODUzOTk0ODQgLTA4MDAKQEAgLTUzNiw4ICs1MzYsNyBAQAogCQkg
IGRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAodHR5LT5sZGlzYy5mbHVz
aF9idWZmZXIpCi0JCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCQl0dHlfbGRpc2Nf
Zmx1c2godHR5KTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIEtER0tCTU9ERToKZGlmZiAtTmF1ciBs
aW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBsaW51eC0yLjYuOC9kcml2
ZXJzL2lzZG4vY2FwaS9jYXBpLmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9pc2RuL2Nh
cGkvY2FwaS5jCTIwMDQtMDgtMTMgMjI6Mzg6MDQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y
LjYuOC9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi43OTczOTc1
MzUgLTA4MDAKQEAgLTQzNiw1MSArNDM2LDYyIEBACiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJ
aW50IGRhdGFsZW47CiAJdTE2IGVycmNvZGUsIGRhdGFoYW5kbGU7Ci0KKwlzdHJ1Y3QgdHR5X2xk
aXNjICpsZDsKKwkKIAlkYXRhbGVuID0gc2tiLT5sZW4gLSBDQVBJTVNHX0xFTihza2ItPmRhdGEp
OwotCWlmIChtcC0+dHR5KSB7Ci0JCWlmIChtcC0+dHR5LT5sZGlzYy5yZWNlaXZlX2J1ZiA9PSAw
KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IGxkaXNjIGhhcyBubyByZWNlaXZlX2J1ZiBm
dW5jdGlvblxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYgKG1wLT50dHlpbnN0b3ApIHsK
KwlpZiAobXAtPnR0eSA9PSBOVUxMKQorCXsKKyNpZmRlZiBfREVCVUdfREFUQUZMT1cKKwkJcHJp
bnRrKEtFUk5fREVCVUcgImNhcGk6IGN1cnJlbnRseSBubyByZWNlaXZlclxuIik7CisjZW5kaWYK
KwkJcmV0dXJuIC0xOworCX0KKwkKKwlsZCA9IHR0eV9sZGlzY19yZWYobXAtPnR0eSk7CisJaWYg
KGxkID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlpZiAobGQtPnJlY2VpdmVfYnVmID09IE5VTEwp
IHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVO
Q1MpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogcmVjdiB0dHkgdGhyb3R0bGVkXG4iKTsK
KwkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IGxkaXNjIGhhcyBubyByZWNlaXZlX2J1ZiBmdW5j
dGlvblxuIik7CiAjZW5kaWYKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAobXAtPnR0eS0+bGRp
c2MucmVjZWl2ZV9yb29tICYmCi0JCSAgICBtcC0+dHR5LT5sZGlzYy5yZWNlaXZlX3Jvb20obXAt
PnR0eSkgPCBkYXRhbGVuKSB7CisJCWdvdG8gYmFkOworCX0KKwlpZiAobXAtPnR0eWluc3RvcCkg
ewogI2lmIGRlZmluZWQoX0RFQlVHX0RBVEFGTE9XKSB8fCBkZWZpbmVkKF9ERUJVR19UVFlGVU5D
UykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBubyByb29tIGluIHR0eVxuIik7CisJCXBy
aW50ayhLRVJOX0RFQlVHICJjYXBpOiByZWN2IHR0eSB0aHJvdHRsZWRcbiIpOwogI2VuZGlmCi0J
CQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYgKChuc2tiID0gZ2VuX2RhdGFfYjNfcmVzcF9mb3IobXAs
IHNrYikpID09IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FwaTogZ2VuX2RhdGFfYjNfcmVz
cCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWRhdGFoYW5kbGUgPSBDQVBJTVNH
X1UxNihza2ItPmRhdGEsQ0FQSU1TR19CQVNFTEVOKzQpOwotCQllcnJjb2RlID0gY2FwaTIwX3B1
dF9tZXNzYWdlKG1wLT5hcCwgbnNrYik7Ci0JCWlmIChlcnJjb2RlICE9IENBUElfTk9FUlJPUikg
ewotCQkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBzZW5kIERBVEFfQjNfUkVTUCBmYWlsZWQ9JXhc
biIsCi0JCQkJCWVycmNvZGUpOwotCQkJa2ZyZWVfc2tiKG5za2IpOwotCQkJcmV0dXJuIC0xOwot
CQl9Ci0JCSh2b2lkKXNrYl9wdWxsKHNrYiwgQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7Ci0jaWZk
ZWYgX0RFQlVHX0RBVEFGTE9XCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBEQVRBX0IzX1JF
U1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAotCQkJCQlkYXRhaGFuZGxlLCBza2ItPmxlbik7CisJ
CWdvdG8gYmFkOworCX0KKwlpZiAobGQtPnJlY2VpdmVfcm9vbSAmJgorCSAgICBsZC0+cmVjZWl2
ZV9yb29tKG1wLT50dHkpIDwgZGF0YWxlbikgeworI2lmIGRlZmluZWQoX0RFQlVHX0RBVEFGTE9X
KSB8fCBkZWZpbmVkKF9ERUJVR19UVFlGVU5DUykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6
IG5vIHJvb20gaW4gdHR5XG4iKTsKICNlbmRpZgotCQltcC0+dHR5LT5sZGlzYy5yZWNlaXZlX2J1
ZihtcC0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKLQkJa2ZyZWVfc2tiKHNrYik7
Ci0JCXJldHVybiAwOwotCisJCWdvdG8gYmFkOworCX0KKwlpZiAoKG5za2IgPSBnZW5fZGF0YV9i
M19yZXNwX2ZvcihtcCwgc2tiKSkgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IGdl
bl9kYXRhX2IzX3Jlc3AgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCWRhdGFoYW5kbGUg
PSBDQVBJTVNHX1UxNihza2ItPmRhdGEsQ0FQSU1TR19CQVNFTEVOKzQpOworCWVycmNvZGUgPSBj
YXBpMjBfcHV0X21lc3NhZ2UobXAtPmFwLCBuc2tiKTsKKwlpZiAoZXJyY29kZSAhPSBDQVBJX05P
RVJST1IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBzZW5kIERBVEFfQjNfUkVTUCBmYWls
ZWQ9JXhcbiIsCisJCQkJZXJyY29kZSk7CisJCWtmcmVlX3NrYihuc2tiKTsKKwkJZ290byBiYWQ7
CiAJfQorCSh2b2lkKXNrYl9wdWxsKHNrYiwgQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7CiAjaWZk
ZWYgX0RFQlVHX0RBVEFGTE9XCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IGN1cnJlbnRseSBu
byByZWNlaXZlclxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IERBVEFfQjNfUkVTUCAl
dSBsZW49JWQgPT4gbGRpc2NcbiIsCisJCQkJZGF0YWhhbmRsZSwgc2tiLT5sZW4pOwogI2VuZGlm
CisJbGQtPnJlY2VpdmVfYnVmKG1wLT50dHksIHNrYi0+ZGF0YSwgTlVMTCwgc2tiLT5sZW4pOwor
CWtmcmVlX3NrYihza2IpOworCXR0eV9sZGlzY19kZXJlZihsZCk7CisJcmV0dXJuIDA7CitiYWQ6
CisJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTYxNCw2ICs2MjUs
NyBAQAogCiAKIAlpZiAoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9JTkQp
IHsKKwkJCiAJCWRhdGFoYW5kbGUgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElNU0dfQkFT
RUxFTis0KzQrMik7CiAjaWZkZWYgX0RFQlVHX0RBVEFGTE9XCiAJCXByaW50ayhLRVJOX0RFQlVH
ICJjYXBpX3NpZ25hbDogREFUQV9CM19JTkQgJXUgbGVuPSVkXG4iLApAQCAtNjMzLDEwICs2NDUs
OCBAQAogI2VuZGlmCiAJCWtmcmVlX3NrYihza2IpOwogCQkodm9pZCljYXBpbWlub3JfZGVsX2Fj
ayhtcCwgZGF0YWhhbmRsZSk7Ci0JCWlmIChtcC0+dHR5KSB7Ci0JCQlpZiAobXAtPnR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKQotCQkJCW1wLT50dHktPmxkaXNjLndyaXRlX3dha2V1cChtcC0+dHR5
KTsKLQkJfQorCQlpZiAobXAtPnR0eSkKKwkJCXR0eV93YWtldXAodHR5KTsKIAkJKHZvaWQpaGFu
ZGxlX21pbm9yX3NlbmQobXApOwogCiAJfSBlbHNlIHsKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5v
cmlnL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYyBsaW51eC0yLjYuOC9kcml2ZXJzL2lzZG4v
aTRsL2lzZG5fdHR5LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9pc2RuL2k0bC9pc2Ru
X3R0eS5jCTIwMDQtMDgtMTMgMjI6Mzc6MjcuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu
OC9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi44MTQzOTQ3
NzMgLTA4MDAKQEAgLTI5NiwxMCArMjk2LDcgQEAKIAkJaW5mby0+c2VuZF9vdXRzdGFuZGluZysr
OwogCQlpbmZvLT5tc3IgJj0gflVBUlRfTVNSX0NUUzsKIAkJaW5mby0+bHNyICY9IH5VQVJUX0xT
Ul9URU1UOwotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkg
JiYKLQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJKHR0eS0+bGRpc2Mud3JpdGVf
d2FrZXVwKSAodHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQp
OworCQl0dHlfd2FrZXVwKHR0eSk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNsZW4gPCAwKSB7CkBA
IC0xMTc0LDEwICsxMTcxLDcgQEAKIAkJCQkJCS8qIElmIERMRSBkZWNvZGluZyByZXN1bHRzIGlu
IHplcm8tdHJhbnNtaXQsIGJ1dAogCQkJCQkJICogYyBvcmlnaW5hbGx5IHdhcyBub24temVybywg
ZG8gYSB3YWtldXAuCiAJCQkJCQkgKi8KLQkJCQkJCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRU
WV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCQkJIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQot
CQkJCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgKHR0eSk7Ci0JCQkJCQl3YWtlX3VwX2lu
dGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJCQkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJ
CQkJCQlpbmZvLT5tc3IgfD0gVUFSVF9NU1JfQ1RTOwogCQkJCQkJaW5mby0+bHNyIHw9IFVBUlRf
TFNSX1RFTVQ7CiAJCQkJCX0KQEAgLTEyOTAsOSArMTI4NCw3IEBACiAJaXNkbl90dHlfY2xlYW51
cF94bWl0KGluZm8pOwogCWluZm8tPnhtaXRfY291bnQgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0
aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9f
V1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHkt
PmxkaXNjLndyaXRlX3dha2V1cCkgKHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0
aWMgdm9pZApAQCAtMTc0NywxMCArMTczOSwxMCBAQAogCX0KIAlkZXYtPm1vZGVtcG9sbC0tOwog
CWlzZG5fdHR5X3NodXRkb3duKGluZm8pOworCQogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVm
ZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2Mu
Zmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlz
Y19mbHVzaCh0dHkpOwogCWluZm8tPnR0eSA9IE5VTEw7CiAJaW5mby0+bmNhcnJpZXIgPSAwOwog
CXR0eS0+Y2xvc2luZyA9IDA7CkBAIC0yNjgxLDggKzI2NzMsNyBAQAogCQlpZiAoKGluZm8tPmZs
YWdzICYgSVNETl9BU1lOQ19DTE9TSU5HKSB8fCAoIWluZm8tPnR0eSkpIHsKIAkJCXJldHVybjsK
IAkJfQotCQlpZiAoaW5mby0+dHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCQlpbmZvLT50dHkt
PmxkaXNjLmZsdXNoX2J1ZmZlcihpbmZvLT50dHkpOworCQl0dHlfbGRpc2NfZmx1c2godHR5KTsK
IAkJaWYgKChpbmZvLT5mbGFncyAmIElTRE5fQVNZTkNfQ0hFQ0tfQ0QpICYmCiAJCSAgICAoISgo
aW5mby0+ZmxhZ3MgJiBJU0ROX0FTWU5DX0NBTExPVVRfQUNUSVZFKSAmJgogCQkgICAgICAgKGlu
Zm8tPmZsYWdzICYgSVNETl9BU1lOQ19DQUxMT1VUX05PSFVQKSkpKSB7CmRpZmYgLU5hdXIgbGlu
dXgtMi42Ljgub3JpZy9kcml2ZXJzL21hY2ludG9zaC9tYWNzZXJpYWwuYyBsaW51eC0yLjYuOC9k
cml2ZXJzL21hY2ludG9zaC9tYWNzZXJpYWwuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJz
L21hY2ludG9zaC9tYWNzZXJpYWwuYwkyMDA0LTA4LTEzIDIyOjM4OjA4LjAwMDAwMDAwMCAtMDcw
MAorKysgbGludXgtMi42LjgvZHJpdmVycy9tYWNpbnRvc2gvbWFjc2VyaWFsLmMJMjAwNC0xMS0y
OCAwNDo0OTo0Mi4wMDAwMDAwMDAgLTA4MDAKQEAgLTcxMywxMiArNzEzLDggQEAKIAlpZiAoIXR0
eSkKIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9X
QUtFVVAsICZpbmZvLT5ldmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RP
X1dSSVRFX1dBS0VVUCkpICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0
dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0
dHktPndyaXRlX3dhaXQpOwotCX0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJTX0VWRU5UX1dS
SVRFX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkKKwkJdHR5X3dha2V1cCh0dHkpOwogfQogCiBzdGF0
aWMgaW50IHN0YXJ0dXAoc3RydWN0IG1hY19zZXJpYWwgKiBpbmZvKQpAQCAtMTU2NCwxMCArMTU2
MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAlpbmZvLT54
bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAJc3Bpbl91
bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwotCXdha2VfdXBfaW50ZXJydXB0
aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9f
V1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHkt
PmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIC8qCkBA
IC0xOTk0LDggKzE5ODcsNyBAQAogCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJ
CXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9i
dWZmZXIpCi0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNo
KHR0eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5
ID0gMDsKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21r
aXNzLmMgbGludXgtMi42LjgvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwotLS0gbGludXgt
Mi42Ljgub3JpZy9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCTIwMDQtMDgtMTMgMjI6Mzg6
MDguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL25ldC9oYW1yYWRpby9t
a2lzcy5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMDAwMDAwMDAwIC0wODAwCkBAIC02MDIsOCArNjAy
LDYgQEAKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+
Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHkt
PmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOwogCiAJLyogUmVzdG9yZSBkZWZhdWx0IHNldHRpbmdz
ICovCiAJYXgtPmRldi0+dHlwZSA9IEFSUEhSRF9BWDI1OwpkaWZmIC1OYXVyIGxpbnV4LTIuNi44
Lm9yaWcvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYyBsaW51eC0yLjYuOC9kcml2ZXJzL25l
dC9pcmRhL2lydHR5LXNpci5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvbmV0L2lyZGEv
aXJ0dHktc2lyLmMJMjAwNC0wOC0xMyAyMjozNjoxMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4
LTIuNi44L2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMJMjAwNC0xMS0yOCAwNDo0OTo0Mi4w
MDAwMDAwMDAgLTA4MDAKQEAgLTUwOSwxMyArNTA5LDYgQEAKIAlpZiAodHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwogCQotLyogZnJv
bSBvbGQgaXJ0dHkgLSBidXQgd2hhdCBpcyBpdCBnb29kIGZvcj8KLSAqIHdlIF9hcmVfIHRoZSBs
ZGlzYyBhbmQgd2UgX2Rvbid0XyBpbXBsZW1lbnQgZmx1c2hfYnVmZmVyIQotICoKLSAqCWlmICh0
dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLSAqCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkp
OwotICovCi0KIAkvKiBhcHBseSBtdHQgb3ZlcnJpZGUgKi8KIAlzaXJfdHR5X2Rydi5xb3NfbXR0
X2JpdHMgPSBxb3NfbXR0X2JpdHM7CiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZl
cnMvbmV0L3BwcF9hc3luYy5jIGxpbnV4LTIuNi44L2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCi0t
LSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCTIwMDQtMDgtMTMgMjI6
Mzc6MzcuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL25ldC9wcHBfYXN5
bmMuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjAwMDAwMDAwMCAtMDgwMApAQCAtMTIyLDYgKzEyMiw5
IEBACiAgKiBmcmVlcyB0aGUgbWVtb3J5IHRoYXQgcHBwX2FzeW5jdHR5X3JlY2VpdmUgaXMgdXNp
bmcuICBUaGUgYmVzdAogICogd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHVzZSBhIHJ3bG9jayBpbiB0
aGUgdHR5IHN0cnVjdCwgYnV0IGZvciBub3cKICAqIHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgcnds
b2NrIGZvciBhbGwgdHR5cyBpbiBwcHAgbGluZSBkaXNjaXBsaW5lLgorICoKKyAqIEZJWE1FOiB0
aGlzIGlzIG5vIGxvbmdlciB0cnVlLiBUaGUgX2Nsb3NlIHBhdGggZm9yIHRoZSBsZGlzYyBpcyAK
KyAqIG5vdyBndWFyYW50ZWVkIHRvIGJlIHNhbmUuIAogICovCiBzdGF0aWMgcndsb2NrX3QgZGlz
Y19kYXRhX2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOwogCkBAIC0xNDQsNyArMTQ3LDggQEAKIH0K
IAogLyoKLSAqIENhbGxlZCB3aGVuIGEgdHR5IGlzIHB1dCBpbnRvIFBQUCBsaW5lIGRpc2NpcGxp
bmUuCisgKiBDYWxsZWQgd2hlbiBhIHR0eSBpcyBwdXQgaW50byBQUFAgbGluZSBkaXNjaXBsaW5l
LiBDYWxsZWQgaW4gcHJvY2VzcworICogY29udGV4dC4KICAqLwogc3RhdGljIGludAogcHBwX2Fz
eW5jdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTI1NSw2ICsyNTksMTEgQEAK
IAlyZXR1cm4gLUVBR0FJTjsKIH0KIAorLyoKKyAqIENhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQg
b25seS4gTWF5IGJlIHJlLWVudGVyZWQgYnkgbXVsdGlwbGUKKyAqIGlvY3RsIGNhbGxpbmcgdGhy
ZWFkcy4KKyAqLworIAogc3RhdGljIGludAogcHBwX2FzeW5jdHR5X2lvY3RsKHN0cnVjdCB0dHlf
c3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1
bnNpZ25lZCBsb25nIGFyZykKQEAgLTcxNiw3ICs3MjUsOCBAQAogCiAvKgogICogRmx1c2ggb3V0
cHV0IGZyb20gb3VyIGludGVybmFsIGJ1ZmZlcnMuCi0gKiBDYWxsZWQgZm9yIHRoZSBUQ0ZMU0gg
aW9jdGwuCisgKiBDYWxsZWQgZm9yIHRoZSBUQ0ZMU0ggaW9jdGwuIENhbiBiZSBlbnRlcmVkIGlu
IHBhcmFsbGVsCisgKiBidXQgdGhpcyBpcyBjb3ZlcmVkIGJ5IHRoZSB4bWl0X2xvY2suCiAgKi8K
IHN0YXRpYyB2b2lkCiBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXAp
CkBAIC04MTYsNyArODI2LDkgQEAKIAkJc2tiX3RyaW0oc2tiLCAwKTsKIH0KIAotLyogY2FsbGVk
IHdoZW4gdGhlIHR0eSBkcml2ZXIgaGFzIGRhdGEgZm9yIHVzLiAqLworLyogQ2FsbGVkIHdoZW4g
dGhlIHR0eSBkcml2ZXIgaGFzIGRhdGEgZm9yIHVzLiBSdW5zIHBhcmFsbGVsIHdpdGggdGhlCisg
ICBvdGhlciBsZGlzYyBmdW5jdGlvbnMgYnV0IHdpbGwgbm90IGJlIHJlLWVudGVyZWQgKi8KKwog
c3RhdGljIHZvaWQKIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1
bnNpZ25lZCBjaGFyICpidWYsCiAJCWNoYXIgKmZsYWdzLCBpbnQgY291bnQpCmRpZmYgLU5hdXIg
bGludXgtMi42Ljgub3JpZy9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jIGxpbnV4LTIuNi44L2Ry
aXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9uZXQv
cHBwX3N5bmN0dHkuYwkyMDA0LTA4LTEzIDIyOjM2OjU2LjAwMDAwMDAwMCAtMDcwMAorKysgbGlu
dXgtMi42LjgvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwkyMDA0LTExLTI4IDA0OjQ5OjQyLjAw
MDAwMDAwMCAtMDgwMApAQCAtMTc1LDYgKzE3NSw4IEBACiAgKiBmcmVlcyB0aGUgbWVtb3J5IHRo
YXQgcHBwX3N5bmN0dHlfcmVjZWl2ZSBpcyB1c2luZy4gIFRoZSBiZXN0CiAgKiB3YXkgdG8gZml4
IHRoaXMgaXMgdG8gdXNlIGEgcndsb2NrIGluIHRoZSB0dHkgc3RydWN0LCBidXQgZm9yIG5vdwog
ICogd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCByd2xvY2sgZm9yIGFsbCB0dHlzIGluIHBwcCBsaW5l
IGRpc2NpcGxpbmUuCisgKgorICogRklYTUU6IEZpeGVkIGluIHR0eV9pbyBub3dkYXlzLgogICov
CiBzdGF0aWMgcndsb2NrX3QgZGlzY19kYXRhX2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOwogCmRp
ZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL25ldC9zbGlwLmMgbGludXgtMi42Ljgv
ZHJpdmVycy9uZXQvc2xpcC5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvbmV0L3NsaXAu
YwkyMDA0LTA4LTEzIDIyOjM4OjEwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJp
dmVycy9uZXQvc2xpcC5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMDAwMDAwMDAwIC0wODAwCkBAIC02
NzIsNyArNjcyLDkgQEAKICAqIEhhbmRsZSB0aGUgJ3JlY2VpdmVyIGRhdGEgcmVhZHknIGludGVy
cnVwdC4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSAndHR5X2lvJyBtb2R1bGUg
aW4gdGhlIGtlcm5lbCB3aGVuCiAgKiBhIGJsb2NrIG9mIFNMSVAgZGF0YSBoYXMgYmVlbiByZWNl
aXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBkZWNhcHN1bGF0ZWQKLSAqIGFuZCBzZW50IG9uIHRvIHNv
bWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKyAqIGFuZCBzZW50IG9uIHRvIHNv
bWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gVGhpcyB3aWxsIG5vdAorICogYmUg
cmUtZW50ZXJlZCB3aGlsZSBydW5uaW5nIGJ1dCBvdGhlciBsZGlzYyBmdW5jdGlvbnMgbWF5IGJl
IGNhbGxlZAorICogaW4gcGFyYWxsZWwKICAqLwogIAogc3RhdGljIHZvaWQgc2xpcF9yZWNlaXZl
X2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hh
ciAqZnAsIGludCBjb3VudCkKQEAgLTg0MSw5ICs4NDMsMTEgQEAKICAqIFNMSVAgbGluZSBkaXNj
aXBsaW5lIGlzIGNhbGxlZCBmb3IuICBCZWNhdXNlIHdlIGFyZQogICogc3VyZSB0aGUgdHR5IGxp
bmUgZXhpc3RzLCB3ZSBvbmx5IGhhdmUgdG8gbGluayBpdCB0bwogICogYSBmcmVlIFNMSVAgY2hh
bm5lbC4uLgorICoKKyAqIENhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgc2VyaWFsaXplZCBmcm9t
IG90aGVyIGxkaXNjIGNhbGxzLgogICovCi1zdGF0aWMgaW50Ci1zbGlwX29wZW4oc3RydWN0IHR0
eV9zdHJ1Y3QgKnR0eSkKKworc3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSkKIHsKIAlzdHJ1Y3Qgc2xpcCAqc2w7CiAJaW50IGVycjsKQEAgLTg3NiwxMSArODgwLDEx
IEBACiAJdHR5LT5kaXNjX2RhdGEgPSBzbDsKIAlzbC0+bGluZSA9IHR0eV9kZXZudW0odHR5KTsK
IAlzbC0+cGlkID0gY3VycmVudC0+cGlkOworCQorCS8qIEZJWE1FOiBhbHJlYWR5IGRvbmUgYmVm
b3JlIHdlIHdlcmUgY2FsbGVkIC0gc2VlbXMgdGhpcyBjYW4gZ28gKi8KIAlpZiAodHR5LT5kcml2
ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlm
ICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5
KTsKLQorCQkKIAlpZiAoIXRlc3RfYml0KFNMRl9JTlVTRSwgJnNsLT5mbGFncykpIHsKIAkJLyog
UGVyZm9ybSB0aGUgbG93LWxldmVsIFNMSVAgaW5pdGlhbGl6YXRpb24uICovCiAJCWlmICgoZXJy
ID0gc2xfYWxsb2NfYnVmcyhzbCwgU0xfTVRVKSkgIT0gMCkKQEAgLTkyMyw2ICs5MjcsOSBAQAog
fQogCiAvKgorCisgIEZJWE1FOiAxLDIgYXJlIGZpeGVkIDMgd2FzIG5ldmVyIHRydWUgYW55d2F5
LgorICAKICAgIExldCBtZSB0byBibGFtZSBhIGJpdC4KICAgIDEuIFRUWSBtb2R1bGUgY2FsbHMg
dGhpcyBmdW5zdGlvbiBvbiBzb2Z0IGludGVycnVwdC4KICAgIDIuIFRUWSBtb2R1bGUgY2FsbHMg
dGhpcyBmdW5jdGlvbiBXSVRIIE1BU0tFRCBJTlRFUlJVUFRTIQpAQCAtOTQxLDkgKzk0OCw4IEBA
CiAKIC8qCiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLgotICogVGhpcyBtZWFucyBmbHVz
aGluZyBvdXQgYW55IHBlbmRpbmcgcXVldWVzLCBhbmQgdGhlbiByZXN0b3JpbmcgdGhlCi0gKiBU
VFkgbGluZSBkaXNjaXBsaW5lIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSBpdCBnb3QgaG9va2VkIHRv
IFNMSVAKLSAqICh3aGljaCB1c3VhbGx5IGlzIFRUWSBhZ2FpbikuCisgKiBUaGlzIG1lYW5zIGZs
dXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpcwor
ICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLgogICov
CiBzdGF0aWMgdm9pZAogc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpkaWZmIC1O
YXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9uZXQvd2FuL3BjMzAwX3R0eS5jIGxpbnV4LTIu
Ni44L2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2
ZXJzL25ldC93YW4vcGMzMDBfdHR5LmMJMjAwNC0wOC0xMyAyMjozNjo1Ny4wMDAwMDAwMDAgLTA3
MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYwkyMDA0LTExLTI4
IDA0OjQ5OjQyLjAwMDAwMDAwMCAtMDgwMApAQCAtNjM0LDE0ICs2MzQsOCBAQAogCX0KIAogCUNQ
Q19UVFlfREJHKCIlczogY2FsbCB3YWtlX3VwX2ludGVycnVwdGlibGVcbiIsY3BjX3R0eS0+bmFt
ZSk7Ci0JCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOyAKLQotCWlm
ICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJiB0dHktPmxkaXNj
LndyaXRlX3dha2V1cCl7Ci0JCUNQQ19UVFlfREJHKCIlczogY2FsbCBsaW5lIGRpc2MuIHdha2Ug
dXBcbiIsY3BjX3R0eS0+bmFtZSk7Ci0JCXR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKHR0eSk7IAot
CX0gCiAKKwl0dHlfd2FrZXVwKHR0eSk7CQogCXJldHVybjsgCiB9IAogCkBAIC02OTIsOSArNjg2
LDExIEBACiAJc3RfY3BjX3R0eV9hcmVhICpjcGNfdHR5OyAKIAl2b2xhdGlsZSBzdF9jcGNfcnhf
YnVmICogYnVmOwogCWNoYXIgZmxhZ3M9MCxmbGdfcng9MTsgCisJc3RydWN0IHR0eV9sZGlzYyAq
bGQ7CiAKIAlpZiAoY3BjX3R0eV9jbnQgPT0gMCkgcmV0dXJuOwogCisJCiAJZm9yIChpPTA7IChp
IDwgNCkgJiYgZmxnX3J4IDsgaSsrKSB7CiAJCWZsZ19yeCA9IDA7CiAJCXBvcnQgPSAoaW50KSBk
YXRhOwpAQCAtNzAyLDExICs2OTgsMTggQEAKIAkJCWNwY190dHkgPSAmY3BjX3R0eV9hcmVhW3Bv
cnRdOwogCQkKIAkJCWlmICgoYnVmPWNwY190dHktPmJ1Zl9yeC5maXJzdCkgIT0gMCkgewotCQkJ
CQkJCQkJCQkJCQkJCi0JCQkJaWYgKGNwY190dHktPnR0eSAmJiAoY3BjX3R0eS0+dHR5LT5sZGlz
Yy5yZWNlaXZlX2J1ZikpIHsgCi0JCQkJCUNQQ19UVFlfREJHKCIlczogY2FsbCBsaW5lIGRpc2Mu
IHJlY2VpdmVfYnVmXG4iLGNwY190dHktPm5hbWUpOwotCQkJCQljcGNfdHR5LT50dHktPmxkaXNj
LnJlY2VpdmVfYnVmKGNwY190dHktPnR0eSwgKGNoYXIgKikoYnVmLT5kYXRhKSwgCi0JCQkJCSZm
bGFncywgYnVmLT5zaXplKTsKKwkJCQkKKwkJCQlpZihjcGNfdHR5LT50dHkpCisJCQkJewkJCQkJ
CQkJCQkJCisJCQkJCWxkID0gdHR5X2xkaXNjX3JlZihjcGNfdHR5KTsKKwkJCQkJaWYobGQpCisJ
CQkJCXsKKwkJCQkJCWlmIChsZC0+cmVjZWl2ZV9idWYpKSB7CisJCQkJCQkJQ1BDX1RUWV9EQkco
IiVzOiBjYWxsIGxpbmUgZGlzYy4gcmVjZWl2ZV9idWZcbiIsY3BjX3R0eS0+bmFtZSk7CisJCQkJ
CQkJbGQtPnJlY2VpdmVfYnVmKGNwY190dHktPnR0eSwgKGNoYXIgKikoYnVmLT5kYXRhKSwgJmZs
YWdzLCBidWYtPnNpemUpOworCQkJCQkJfQorCQkJCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwkJ
CQkJfQogCQkJCX0JCiAJCQkJY3BjX3R0eS0+YnVmX3J4LmZpcnN0ID0gY3BjX3R0eS0+YnVmX3J4
LmZpcnN0LT5uZXh0OwogCQkJCWtmcmVlKCh1bnNpZ25lZCBjaGFyICopYnVmKTsKQEAgLTkxMCwx
MyArOTEzLDcgQEAKIAkJQ1BDX1RUWV9EQkcoIiVzOiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVu
ZWRcbiIsY3BjX3R0eS0+bmFtZSk7CiAJCXJldHVybjsgCiAJfQotCi0JaWYgKCh0dHktPmZsYWdz
ICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVw
KXsKLQkJQ1BDX1RUWV9EQkcoIiVzOmNhbGwgbGluZSBkaXNjLiB3YWtldXBcbiIsY3BjX3R0eS0+
bmFtZSk7Ci0JCXR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwICh0dHkpOyAKLQl9Ci0KLQl3YWtlX3Vw
X2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7IAorCXR0eV93YWtldXAodHR5KTsKIH0K
IAogLyoKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2No
ZGxjLmMgbGludXgtMi42LjgvZHJpdmVycy9uZXQvd2FuL3NkbGFfY2hkbGMuYwotLS0gbGludXgt
Mi42Ljgub3JpZy9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jCTIwMDQtMDgtMTMgMjI6MzY6
NTguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL25ldC93YW4vc2RsYV9j
aGRsYy5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMDAwMDAwMDAwIC0wODAwCkBAIC0zNjI4LDExICsz
NjI4LDcgQEAKIAlpZiAoKHR0eT1jYXJkLT50dHkpPT1OVUxMKQogCQlyZXR1cm47CiAJCi0JaWYg
KCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKXsKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwot
CX0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJdHR5X3dha2V1
cCh0dHkpOwogI2lmIGRlZmluZWQoU0VSSUFMX0hBVkVfUE9MTF9XQUlUKQogCXdha2VfdXBfaW50
ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwogI2VuZGlmCQpAQCAtMzg1Nyw2ICszODUzLDcg
QEAKIAljaGFyIGZwPTA7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgaTsKKwlzdHJ1
Y3QgdHR5X2xkaXNjICpsZDsKIAkKIAlpZiAoIWNhcmQtPnR0eV9vcGVuKXsKIAkJZGJnX3ByaW50
ayhLRVJOX0lORk8gIiVzOiBUVFkgbm90IG9wZW4gZHVyaW5nIHJlY2VpdmVcbiIsCkBAIC0zOTQ0
LDggKzM5NDEsMTEgQEAKIAkJCWxlbiAtPSBvZmZzZXQ7CiAJCX0KIAkJc2RsYV9wZWVrKCZjYXJk
LT5odywgYWRkciwgY2FyZC0+dHR5X3J4K29mZnNldCwgbGVuKTsKLQkJaWYgKHR0eS0+bGRpc2Mu
cmVjZWl2ZV9idWYpewotCQkJdHR5LT5sZGlzYy5yZWNlaXZlX2J1Zih0dHksY2FyZC0+dHR5X3J4
LCZmcCxvbGVuKTsKKwkJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJCWlmIChsZCkgeworCQkJ
aWYgKGxkLT5yZWNlaXZlX2J1ZikKKwkJCQlsZC0+cmVjZWl2ZV9idWYodHR5LGNhcmQtPnR0eV9y
eCwmZnAsb2xlbik7CisJCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCQl9ZWxzZXsKIAkJCWlmIChu
ZXRfcmF0ZWxpbWl0KCkpewogCQkJCXByaW50ayhLRVJOX0lORk8gCkBAIC00MjUyLDE0ICs0MjUy
LDEwIEBACiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIAkKLQl3YWtlX3VwX2ludGVycnVwdGlibGUo
JnR0eS0+d3JpdGVfd2FpdCk7CiAjaWYgZGVmaW5lZChTRVJJQUxfSEFWRV9QT0xMX1dBSVQpCiAJ
d2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnBvbGxfd2FpdCk7CiAjZW5kaWYKLQlpZiAoKHR0
eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlz
Yy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQorCXR0
eV93YWtldXAodHR5KTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgbGludXgtMi42LjgvZHJpdmVycy9uZXQvd2ly
ZWxlc3Mvc3RyaXAuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL25ldC93aXJlbGVzcy9z
dHJpcC5jCTIwMDQtMDgtMTMgMjI6Mzc6MjYuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu
OC9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCTIwMDQtMTEtMjggMDQ6NDk6NDIuMDAwMDAw
MDAwIC0wODAwCkBAIC0yNjYxLDggKzI2NjEsNiBAQAogCXR0eS0+ZGlzY19kYXRhID0gc3RyaXBf
aW5mbzsKIAlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZs
dXNoX2J1ZmZlcih0dHkpOwotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5s
ZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKIAogCS8qCiAJICogUmVzdG9yZSBkZWZhdWx0IHNldHRp
bmdzCmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1
LmMgbGludXgtMi42LjgvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCi0tLSBsaW51eC0yLjYu
OC5vcmlnL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYwkyMDA0LTA4LTEzIDIyOjM3OjI2LjAw
MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5j
CTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAwMDAwIC0wODAwCkBAIC0zNjYsMTAgKzM2Niw3IEBA
CiAJdHR5ID0gcmF3LT50dHk7CiAJaWYgKHR0eSAhPSBOVUxMICYmCiAJICAgIFJBVzMyMTVfQlVG
RkVSX1NJWkUgLSByYXctPmNvdW50ID49IFJBVzMyMTVfTUlOX1NQQUNFKSB7Ci0JCWlmICgodHR5
LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlz
Yy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdh
a2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwkgICAgCXR0eV93YWtldXAo
dHR5KTsKIAl9CiB9CiAKQEAgLTEwNTUsMTAgKzEwNTIsNyBAQAogCiAJcmF3ID0gKHN0cnVjdCBy
YXczMjE1X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlyYXczMjE1X2ZsdXNoX2J1ZmZlcihy
YXcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0
eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlz
Yy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlf
d2FrZXVwKHR0eSk7CiB9CiAKIC8qCmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJz
L3MzOTAvY2hhci9zY2xwX3R0eS5jIGxpbnV4LTIuNi44L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBf
dHR5LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYwky
MDA0LTA4LTEzIDIyOjM4OjExLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVy
cy9zMzkwL2NoYXIvc2NscF90dHkuYwkyMDA0LTExLTI4IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgw
MApAQCAtMjc3LDEwICsyNzcsNyBAQAogCXdha2VfdXAoJnNjbHBfdHR5X3dhaXRxKTsKIAkvKiBj
aGVjayBpZiB0aGUgdHR5IG5lZWRzIGEgd2FrZSB1cCBjYWxsICovCiAJaWYgKHNjbHBfdHR5ICE9
IE5VTEwpIHsKLQkJaWYgKChzY2xwX3R0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FL
RVVQKSkgJiYKLQkJICAgIHNjbHBfdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkoc2NscF90
dHktPmxkaXNjLndyaXRlX3dha2V1cCkoc2NscF90dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGli
bGUoJnNjbHBfdHR5LT53cml0ZV93YWl0KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCX0KIH0KIApk
aWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5j
IGxpbnV4LTIuNi44L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwotLS0gbGludXgtMi42
Ljgub3JpZy9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMJMjAwNC0wOC0xMyAyMjozNjo0
NC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvczM5MC9jaGFyL3NjbHBf
dnQyMjAuYwkyMDA0LTExLTI4IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtMTM5LDEwICsx
MzksNyBAQAogCXdha2VfdXAoJnNjbHBfdnQyMjBfd2FpdHEpOwogCS8qIENoZWNrIGlmIHRoZSB0
dHkgbmVlZHMgYSB3YWtlIHVwIGNhbGwgKi8KIAlpZiAoc2NscF92dDIyMF90dHkgIT0gTlVMTCkg
ewotCQlpZiAoKHNjbHBfdnQyMjBfdHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtF
VVApKSAmJgotCQkgICAgKHNjbHBfdnQyMjBfdHR5LT5sZGlzYy53cml0ZV93YWtldXAgIT0gTlVM
TCkpCi0JCQkoc2NscF92dDIyMF90dHktPmxkaXNjLndyaXRlX3dha2V1cCkoc2NscF92dDIyMF90
dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNjbHBfdnQyMjBfdHR5LT53cml0ZV93YWl0
KTsKKwkJdHR5X3dha2V1cCh0dHkpOwogCX0KIH0KIApkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9y
aWcvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYyBsaW51eC0yLjYuOC9kcml2ZXJzL3MzOTAvbmV0
L2N0Y3R0eS5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMJ
MjAwNC0wOC0xMyAyMjozNzoxNC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZl
cnMvczM5MC9uZXQvY3RjdHR5LmMJMjAwNC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAK
QEAgLTMwNywxMCArMzA3LDcgQEAKIAogCQlpbmZvLT5mbGFncyAmPSB+Q1RDX0FTWU5DX1RYX0xJ
TkVTVEFUOwogCQlpZiAodHR5KSB7Ci0JCQlpZiAod2FrZSAmJiAodHR5LT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVw
KQotCQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQkJCXdha2VfdXBfaW50ZXJy
dXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwkJCXR0eV93YWtldXAodHR5KTsKIAkJfQogCX0K
IAlyZXR1cm4gKHNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+dHhfcXVldWUpID8gMCA6IDEpOwpAQCAt
NTg5LDkgKzU4Niw3IEBACiAJaW5mby0+bHNyIHw9IFVBUlRfTFNSX1RFTVQ7CiAJc3Bpbl91bmxv
Y2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRp
YmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19X
UklURV9XQUtFVVApKSAmJgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+
bGRpc2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiBleDoKIAlEQkZf
VEVYVF8odHJhY2UsIDIsICJleDogJXMgIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm47CkBAIC0x
MDY2LDggKzEwNjEsNyBAQAogCQlza2JfcXVldWVfcHVyZ2UoJmluZm8tPnR4X3F1ZXVlKTsKIAkJ
aW5mby0+bHNyIHw9IFVBUlRfTFNSX1RFTVQ7CiAJfQotCWlmICh0dHktPmxkaXNjLmZsdXNoX2J1
ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2go
dHR5KTsKIAlpbmZvLT50dHkgPSAwOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaWYgKGluZm8tPmJs
b2NrZWRfb3BlbikgewpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9zYnVzL2No
YXIvYXVyb3JhLmMgbGludXgtMi42LjgvZHJpdmVycy9zYnVzL2NoYXIvYXVyb3JhLmMKLS0tIGxp
bnV4LTIuNi44Lm9yaWcvZHJpdmVycy9zYnVzL2NoYXIvYXVyb3JhLmMJMjAwNC0wOC0xMyAyMjoz
NjoxNy4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44L2RyaXZlcnMvc2J1cy9jaGFyL2F1
cm9yYS5jCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAwMDAwIC0wODAwCkBAIC0xNTMxLDggKzE1
MzEsNyBAQAogCWF1cm9yYV9zaHV0ZG93bl9wb3J0KGJwLCBwb3J0KTsKIAlpZiAodHR5LT5kcml2
ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlm
ICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5
KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAl0dHktPmNsb3NpbmcgPSAwOwogCXBvcnQtPmV2
ZW50ID0gMDsKIAlwb3J0LT50dHkgPSAwOwpAQCAtMTc0MywxMCArMTc0Miw3IEBACiAJcG9ydC0+
eG1pdF9jbnQgPSBwb3J0LT54bWl0X2hlYWQgPSBwb3J0LT54bWl0X3RhaWwgPSAwOwogCXJlc3Rv
cmVfZmxhZ3MoZmxhZ3MpOwogCQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93
YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYK
LQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1
cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiAjaWZkZWYgQVVST1JBX0RFQlVHCiAJcHJpbnRr
KCJhdXJvcmFfZmx1c2hfYnVmZmVyOiBlbmRcbiIpOwogI2VuZGlmCkBAIC0yMjIzLDEwICsyMjE5
LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklU
RV9XQUtFVVAsICZwb3J0LT5ldmVudCkpIHsKLQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZ
X0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJ
CSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxl
KCZ0dHktPndyaXRlX3dhaXQpOworCQl0dHlfd2FrZXVwKHR0eSk7CiAJfQogI2lmZGVmIEFVUk9S
QV9ERUJVRwogCXByaW50aygiZG9fc29mdGludDogZW5kXG4iKTsKZGlmZiAtTmF1ciBsaW51eC0y
LjYuOC5vcmlnL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMgbGludXgtMi42LjgvZHJpdmVy
cy9zZXJpYWwvNjgzMjhzZXJpYWwuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3Nlcmlh
bC82ODMyOHNlcmlhbC5jCTIwMDQtMDgtMTMgMjI6Mzg6MDguMDAwMDAwMDAwIC0wNzAwCisrKyBs
aW51eC0yLjYuOC9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCTIwMDQtMTEtMjggMDQ6NDk6
NDMuMDAwMDAwMDAwIC0wODAwCkBAIC00MzUsMTAgKzQzNSw3IEBACiAJCXJldHVybjsKICNpZiAw
CiAJaWYgKGNsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpIHsK
LQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCQl0dHlf
d2FrZXVwKHR0eSk7CiAJfQogI2VuZGlmICAgCiB9CkBAIC04NTgsMTAgKzg1NSw3IEBACiAJY2xp
KCk7CiAJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwg
PSAwOwogCXN0aSgpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
LQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAg
dHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5
KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIC8qCkBAIC0xMTg1LDExICsxMTc5LDEzIEBACiAJ
c2h1dGRvd24oaW5mbyk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+
ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIp
Ci0JCXR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJCQorCXR0eV9sZGlzY19mbHVzaCh0
dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPnR0eSA9
IDA7Cisjd2FybmluZyAiVGhpcyBpcyBub3QgYW5kIGhhcyBuZXZlciBiZWVuIHZhbGlkIHNvIGZp
eCBpdCIJCisjaWYgMAogCWlmICh0dHktPmxkaXNjLm51bSAhPSBsZGlzY3NbTl9UVFldLm51bSkg
ewogCQlpZiAodHR5LT5sZGlzYy5jbG9zZSkKIAkJCSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwpA
QCAtMTE5OCw2ICsxMTk0LDcgQEAKIAkJaWYgKHR0eS0+bGRpc2Mub3BlbikKIAkJCSh0dHktPmxk
aXNjLm9wZW4pKHR0eSk7CiAJfQorI2VuZGlmCQogCWlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsK
IAkJaWYgKGluZm8tPmNsb3NlX2RlbGF5KSB7CiAJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5U
RVJSVVBUSUJMRTsKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvc2VyaWFsLzY4
MzYwc2VyaWFsLmMgbGludXgtMi42LjgvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwotLS0g
bGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCTIwMDQtMDgtMTMg
MjI6Mzg6MDQuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3NlcmlhbC82
ODM2MHNlcmlhbC5jCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAwMDAwIC0wODAwCkBAIC03MDAs
MTIgKzcwMCw4IEBACiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X2FuZF9jbGVh
cl9iaXQoUlNfRVZFTlRfV1JJVEVfV0FLRVVQLCAmaW5mby0+ZXZlbnQpKSB7Ci0JCWlmICgodHR5
LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlz
Yy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCXdh
a2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQl9CisJaWYgKHRlc3RfYW5k
X2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpCisJCXR0eV93
YWtldXAodHR5KTsKIH0KIAogCkBAIC0xMTUyLDEwICsxMTQ4LDcgQEAKIAkvKiBUaGVyZSBpcyBu
b3RoaW5nIHRvICJmbHVzaCIsIHdoYXRldmVyIHdlIGdhdmUgdGhlIENQTQogCSAqIGlzIG9uIGl0
cyB3YXkgb3V0LgogCSAqLwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0
KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkg
ICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiAJaW5mby0+ZmxhZ3MgJj0gflRYX1dBS0VVUDsKIH0K
IApAQCAtMTcxNiw4ICsxNzA5LDcgQEAKIAlzaHV0ZG93bihpbmZvKTsKIAlpZiAodHR5LT5kcml2
ZXItPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotCWlm
ICh0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJdHR5LT5sZGlzYy5mbHVzaF9idWZmZXIodHR5
KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsJCQogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+
ZXZlbnQgPSAwOwogCWluZm8tPnR0eSA9IDA7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9k
cml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYyBsaW51eC0yLjYuOC9kcml2ZXJzL3NlcmlhbC9tY2Zz
ZXJpYWwuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYwky
MDA0LTA4LTEzIDIyOjM2OjU2LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVy
cy9zZXJpYWwvbWNmc2VyaWFsLmMJMjAwNC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAK
QEAgLTQyNCwxMSArNDI0LDcgQEAKIAl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJl
dHVybjsKLQotCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAm
JgotCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2Fr
ZXVwKSh0dHkpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl0
dHlfd2FrZXVwKHR0eSk7CiB9CiAKIApAQCAtODM1LDEwICs4MzEsNyBAQAogCWluZm8tPnhtaXRf
Y250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKIAlsb2NhbF9pcnFf
cmVzdG9yZShmbGFncyk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2Fp
dCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0J
ICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXAp
KHR0eSk7CisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAvKgpAQCAtMTIzMiwxMSArMTIyNSwxMiBA
QAogCXNodXRkb3duKGluZm8pOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0
dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVm
ZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZlcih0dHkpOworCXR0eV9sZGlzY19mbHVzaCh0
dHkpOworCQogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPnR0
eSA9IDA7CisjaWYgMAkKIAlpZiAodHR5LT5sZGlzYy5udW0gIT0gbGRpc2NzW05fVFRZXS5udW0p
IHsKIAkJaWYgKHR0eS0+bGRpc2MuY2xvc2UpCiAJCQkodHR5LT5sZGlzYy5jbG9zZSkodHR5KTsK
QEAgLTEyNDUsNiArMTIzOSw3IEBACiAJCWlmICh0dHktPmxkaXNjLm9wZW4pCiAJCQkodHR5LT5s
ZGlzYy5vcGVuKSh0dHkpOwogCX0KKyNlbmRpZgkKIAlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7
CiAJCWlmIChpbmZvLT5jbG9zZV9kZWxheSkgewogCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lO
VEVSUlVQVElCTEU7CmRpZmYgLU5hdXIgbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3NlcmlhbC9z
ZXJpYWxfY29yZS5jIGxpbnV4LTIuNi44L2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKLS0t
IGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwkyMDA0LTA4LTEz
IDIyOjM2OjMyLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy9zZXJpYWwv
c2VyaWFsX2NvcmUuYwkyMDA0LTExLTI4IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtMTA3
LDE1ICsxMDcsNyBAQAogc3RhdGljIHZvaWQgdWFydF90YXNrbGV0X2FjdGlvbih1bnNpZ25lZCBs
b25nIGRhdGEpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB1YXJ0X3N0
YXRlICopZGF0YTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCi0JdHR5ID0gc3RhdGUtPmlu
Zm8tPnR0eTsKLQlpZiAodHR5KSB7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19X
UklURV9XQUtFVVApKSAmJgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQl0dHkt
PmxkaXNjLndyaXRlX3dha2V1cCh0dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+
d3JpdGVfd2FpdCk7Ci0JfQorCXR0eV93YWtldXAoc3RhdGUtPmluZm8tPnR0eSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZApAQCAtNTgxLDEwICs1NzMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZl
KCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJdWFydF9jaXJjX2NsZWFyKCZzdGF0ZS0+aW5mby0+eG1p
dCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCXdha2Vf
dXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlpZiAoKHR0eS0+ZmxhZ3MgJiAo
MSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYKLQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtl
dXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKKwl0dHlfd2FrZXVwKHR0eSk7
CiB9CiAKIC8qCkBAIC0xMjE2LDcgKzEyMDUsNyBAQAogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpz
dGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKLQorCQog
CUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKIAogCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0
KQpAQCAtMTIzOSwxMiArMTIyOCwxMiBAQAogCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2Js
ZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRv
d24uCiAJCSAqLwotCQlwcmludGsoInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsg
dHR5LT5jb3VudCBpcyAxLCAiCisJCXByaW50ayhLRVJOX0VSUiAidWFydF9jbG9zZTogYmFkIHNl
cmlhbCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsICIKIAkJICAgICAgICJzdGF0ZS0+Y291
bnQgaXMgJWRcbiIsIHN0YXRlLT5jb3VudCk7CiAJCXN0YXRlLT5jb3VudCA9IDE7CiAJfQogCWlm
ICgtLXN0YXRlLT5jb3VudCA8IDApIHsKLQkJcHJpbnRrKCJyc19jbG9zZTogYmFkIHNlcmlhbCBw
b3J0IGNvdW50IGZvciAlczogJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAidWFydF9jbG9zZTog
YmFkIHNlcmlhbCBwb3J0IGNvdW50IGZvciAlczogJWRcbiIsCiAJCSAgICAgICB0dHktPm5hbWUs
IHN0YXRlLT5jb3VudCk7CiAJCXN0YXRlLT5jb3VudCA9IDA7CiAJfQpAQCAtMTI4MCw4ICsxMjY5
LDkgQEAKIAogCXVhcnRfc2h1dGRvd24oc3RhdGUpOwogCXVhcnRfZmx1c2hfYnVmZmVyKHR0eSk7
Ci0JaWYgKHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyKQotCQl0dHktPmxkaXNjLmZsdXNoX2J1ZmZl
cih0dHkpOworCisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CQorCQogCXR0eS0+Y2xvc2luZyA9IDA7
CiAJc3RhdGUtPmluZm8tPnR0eSA9IE5VTEw7CiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmln
L2RyaXZlcnMvdGMvenMuYyBsaW51eC0yLjYuOC9kcml2ZXJzL3RjL3pzLmMKLS0tIGxpbnV4LTIu
Ni44Lm9yaWcvZHJpdmVycy90Yy96cy5jCTIwMDQtMDgtMTMgMjI6Mzc6MzkuMDAwMDAwMDAwIC0w
NzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3RjL3pzLmMJMjAwNC0xMS0yOCAwNDo0OTo0My4w
MDAwMDAwMDAgLTA4MDAKQEAgLTY4MywxMCArNjgzLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHRl
c3RfYW5kX2NsZWFyX2JpdChSU19FVkVOVF9XUklURV9XQUtFVVAsICZpbmZvLT5ldmVudCkpIHsK
LQkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JCSAg
ICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCko
dHR5KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCQl0dHlf
d2FrZXVwKHR0eSk7CiAJfQogfQogCkBAIC0xMDEwLDEwICsxMDA3LDcgQEAKIAljbGkoKTsKIAlp
bmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAJ
c3RpKCk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCWlmICgo
dHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCSAgICB0dHktPmxk
aXNjLndyaXRlX3dha2V1cCkKLQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOworCXR0
eV93YWtldXAodHR5KTsKIH0KIAogLyoKQEAgLTE0MDcsOCArMTQwMSw3IEBACiAJc2h1dGRvd24o
aW5mbyk7CiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5m
bHVzaF9idWZmZXIodHR5KTsKLQlpZiAodHR5LT5sZGlzYy5mbHVzaF9idWZmZXIpCi0JCXR0eS0+
bGRpc2MuZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJdHR5LT5j
bG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gMDsKZGlmZiAtTmF1
ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL2NsYXNzL2JsdWV0dHkuYyBsaW51eC0yLjYu
OC9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVy
cy91c2IvY2xhc3MvYmx1ZXR0eS5jCTIwMDQtMDgtMTMgMjI6Mzc6MzcuMDAwMDAwMDAwIC0wNzAw
CisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMJMjAwNC0xMS0yOCAw
NDo0OTo0My4wMDAwMDAwMDAgLTA4MDAKQEAgLTk5MiwxNyArOTkyLDEwIEBACiAKIAlkYmcoIiVz
IiwgX19GVU5DVElPTl9fKTsKIAotCWlmICghYmx1ZXRvb3RoKSB7CisJaWYgKCFibHVldG9vdGgp
CiAJCXJldHVybjsKLQl9Ci0KLQl0dHkgPSBibHVldG9vdGgtPnR0eTsKLQlpZiAoKHR0eS0+Zmxh
Z3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtl
dXApIHsKLQkJZGJnKCIlcyAtIHdyaXRlIHdha2V1cCBjYWxsLiIsIF9fRlVOQ1RJT05fXyk7Ci0J
CSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKLQl9CiAKLQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJdHR5X3dha2V1cCgmYmx1ZXRvb3RoLT50dHkpOwog
fQogCiAKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1h
Y20uYyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKLS0tIGxpbnV4LTIu
Ni44Lm9yaWcvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCTIwMDQtMDgtMTMgMjI6Mzc6MTUu
MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNt
LmMJMjAwNC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAKQEAgLTI0OCwxNiArMjQ4LDEx
IEBACiBzdGF0aWMgdm9pZCBhY21fc29mdGludCh2b2lkICpwcml2YXRlKQogewogCXN0cnVjdCBh
Y20gKmFjbSA9IHByaXZhdGU7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGFjbS0+dHR5Owog
CWRiZygiRW50ZXJpbmcgYWNtX3NvZnRpbnQuXG4iKTsKIAkKIAlpZiAoIUFDTV9SRUFEWShhY20p
KQogCQlyZXR1cm47Ci0KLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FL
RVVQKSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCSh0dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkodHR5KTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
Kwl0dHlfd2FrZXVwKGFjbS0+dHR5KTsKIH0KIAogLyoKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5v
cmlnL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBsaW51eC0yLjYuOC9kcml2
ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJp
dmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCTIwMDQtMDgtMTMgMjI6MzY6NTcuMDAw
MDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2Nl
bGVwb3J0LmMJMjAwNC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAKQEAgLTYyNCwxNCAr
NjI0LDcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CiAK
IAkvKiB3YWtlIHVwIGxpbmUgZGlzY2lwbGluZSAqLwotCWlmKCAodHR5LT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKQotCSYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwICkKLQkJ
KHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCi0JLyogd2FrZSB1cCBvdGhlciB0dHkg
cHJvY2Vzc2VzICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmdHR5LT53cml0ZV93YWl0ICk7
Ci0JLyogRm9yIDIuMi4xNiBiYWNrcG9ydCAtLSB3YWtlX3VwX2ludGVycnVwdGlibGUoICZ0dHkt
PnBvbGxfd2FpdCApOyAqLwotCisJdHR5X3dha2V1cCh0dHkpOwogfQogCiAKQEAgLTE1NjksOCAr
MTU2Miw3IEBACiAJLyogZmx1c2ggZHJpdmVyIGFuZCBsaW5lIGRpc2NpcGxpbmUgYnVmZmVycyAq
LwogCWlmKCB0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyICkKIAkJdHR5LT5kcml2ZXItPmZsdXNo
X2J1ZmZlciggdHR5ICk7Ci0JaWYoIHR0eS0+bGRpc2MuZmx1c2hfYnVmZmVyICkKLQkJdHR5LT5s
ZGlzYy5mbHVzaF9idWZmZXIoIHR0eSApOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCiAJaWYg
KHBvcnQtPnNlcmlhbC0+ZGV2KSB7CiAJCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGlkbGUgKi8KZGlm
ZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGxpbnV4
LTIuNi44L2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2Ry
aXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCTIwMDQtMDgtMTMgMjI6Mzg6MDguMDAwMDAwMDAwIC0w
NzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwkyMDA0LTExLTI4
IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtNTE2LDcgKzUxNiw5IEBACiAJICovCiAJcG9y
dC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQkvKiBOb3RpZnkgdGhlIHR0eSBkcml2ZXIgdGhh
dCB0aGUgdGVybWlvcyBoYXZlIGNoYW5nZWQuICovCisJLyogTm90aWZ5IHRoZSB0dHkgZHJpdmVy
IHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLgorCSAgIEZJWE1FOiBXaHkgLSB0aGUgbGRp
c2Mgd2lsbCBkbyB0aGlzIGFueXdheSBhbmQgTlVMTCBpcyBub3QKKwkgICBhIHZhbGlkIHByZXZp
b3VzIHN0YXRlICovCiAJcG9ydC0+dHR5LT5sZGlzYy5zZXRfdGVybWlvcyhwb3J0LT50dHksIE5V
TEwpOwogCiAJcmV0dXJuOwpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy91c2Iv
c2VyaWFsL2lvX2VkZ2Vwb3J0LmMgbGludXgtMi42LjgvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Vk
Z2Vwb3J0LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vw
b3J0LmMJMjAwNC0wOC0xMyAyMjozNjoxNC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi44
L2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAw
MDAwMDAwIC0wODAwCkBAIC05MDAsMTIgKzkwMCw3IEBACiAKIAlpZiAodHR5ICYmIGVkZ2VfcG9y
dC0+b3BlbikgewogCQkvKiBsZXQgdGhlIHR0eSBkcml2ZXIgd2FrZXVwIGlmIGl0IGhhcyBhIHNw
ZWNpYWwgd3JpdGVfd2FrZXVwIGZ1bmN0aW9uICovCi0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKSAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgewotCQkJ
KHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCQl9Ci0KLQkJLyogdGVsbCB0aGUgdHR5
IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwotCQl3YWtlX3VwX2ludGVycnVw
dGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJCXR0eV93YWtldXAodHR5KTsKIAl9CiAKIAkvLyBS
ZWxlYXNlIHRoZSBXcml0ZSBVUkIKZGlmZiAtTmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMv
dXNiL3NlcmlhbC9pb190aS5jIGxpbnV4LTIuNi44L2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5j
Ci0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCTIwMDQtMDgt
MTMgMjI6Mzg6MDguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9z
ZXJpYWwvaW9fdGkuYwkyMDA0LTExLTI4IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtMTgw
NCwxMiArMTgwNCw3IEBACiAJdHR5ID0gcG9ydC0+dHR5OwogCWlmICh0dHkpIHsKIAkJLyogbGV0
IHRoZSB0dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsIHdyaXRlX3dha2V1cCBm
dW5jdGlvbiAqLwotCQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQ
KSkgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApIHsKLQkJCSh0dHktPmxkaXNjLndyaXRlX3dh
a2V1cCkodHR5KTsKLQkJfQotCi0JCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhp
bmcgaGFzIGNoYW5nZWQgKi8KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dh
aXQpOworCQl0dHlfd2FrZXVwKHR0eSk7CiAJfQogfQogCmRpZmYgLU5hdXIgbGludXgtMi42Ljgu
b3JpZy9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMgbGludXgtMi42LjgvZHJpdmVycy91c2Iv
c2VyaWFsL2lyLXVzYi5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL3NlcmlhbC9p
ci11c2IuYwkyMDA0LTA4LTEzIDIyOjM2OjU3LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42
LjgvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAw
MDAwIC0wODAwCkBAIC00NDksNiArNDQ5LDEwIEBACiAJCQkgKi8KIAkJCXR0eSA9IHBvcnQtPnR0
eTsKIAorCQkJLyoKKwkJCSAqCUZJWE1FOiBtdXN0IG5vdCBkbyB0aGlzIGluIElSUSBjb250ZXh0
LAorCQkJICoJbXVzdCBob25vdXIgVFRZX0RPTlRfRkxJUAorCQkJICovCiAJCQl0dHktPmxkaXNj
LnJlY2VpdmVfYnVmKAogCQkJCXR0eSwKIAkJCQlkYXRhKzEsCmRpZmYgLU5hdXIgbGludXgtMi42
Ljgub3JpZy9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBsaW51eC0yLjYuOC9kcml2
ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJz
L3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwkyMDA0LTA4LTEzIDIyOjM3OjI1LjAwMDAwMDAwMCAt
MDcwMAorKysgbGludXgtMi42LjgvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMJMjAw
NC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAKQEAgLTE4NiwxMyArMTg2LDcgQEAKIAl3
YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CiAKIAkvKiB3YWtlIHVw
IGxpbmUgZGlzY2lwbGluZSAqLwotCWlmKCAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklU
RV9XQUtFVVApKQotCSYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwICkKLQkJKHR0eS0+bGRpc2Mu
d3JpdGVfd2FrZXVwKSh0dHkpOwotCi0JLyogd2FrZSB1cCBvdGhlciB0dHkgcHJvY2Vzc2VzICov
Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmdHR5LT53cml0ZV93YWl0ICk7Ci0JLyogRm9yIDIu
Mi4xNiBiYWNrcG9ydCAtLSB3YWtlX3VwX2ludGVycnVwdGlibGUoICZ0dHktPnBvbGxfd2FpdCAp
OyAqLworCXR0eV93YWtldXAodHR5KTsKIH0KIAogc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcmVx
dWVzdF91bnRocm90dGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICkKZGlmZiAtTmF1ciBs
aW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGxpbnV4LTIuNi44
L2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCi0tLSBsaW51eC0yLjYuOC5vcmlnL2RyaXZl
cnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCTIwMDQtMDgtMTMgMjI6Mzc6MjUuMDAwMDAwMDAwIC0w
NzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwkyMDA0LTEx
LTI4IDA0OjQ5OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtNTc5LDExICs1NzksNyBAQAogCiAJaWYg
KHdyaXRlX2Jsb2NraW5nKSB7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d3JpdGVf
d2FpdCk7Ci0JCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAm
JgotCQkgICAgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCi0JCQkodHR5LT5sZGlzYy53cml0ZV93
YWtldXApKHR0eSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsK
LQkJCisJCXR0eV93YWtldXAodHR5KTsKIAl9IGVsc2UgewogCQkvKiBmcm9tIGdlbmVyaWNfd3Jp
dGVfYnVsa19jYWxsYmFjayAqLwogCQlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKZGlmZiAt
TmF1ciBsaW51eC0yLjYuOC5vcmlnL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgbGlu
dXgtMi42LjgvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwotLS0gbGludXgtMi42Ljgu
b3JpZy9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCTIwMDQtMDgtMTMgMjI6Mzg6MTEu
MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNl
cmlhbC5jCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAwMDAwIC0wODAwCkBAIC03NTUsMTIgKzc1
NSw3IEBACiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIAotCWlmICgodHR5LT5mbGFncyAmICgxIDw8
IFRUWV9ET19XUklURV9XQUtFVVApKSAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgewotCQlk
YmcoIiVzIC0gd3JpdGUgd2FrZXVwIGNhbGwuIiwgX19GVU5DVElPTl9fKTsKLQkJKHR0eS0+bGRp
c2Mud3JpdGVfd2FrZXVwKSh0dHkpOwotCX0KLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5
LT53cml0ZV93YWl0KTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ry
b3lfc2VyaWFsKHN0cnVjdCBrcmVmICprcmVmKQpkaWZmIC1OYXVyIGxpbnV4LTIuNi44Lm9yaWcv
ZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGxpbnV4LTIuNi44L2RyaXZlcnMvdXNiL3Nl
cmlhbC93aGl0ZWhlYXQuYwotLS0gbGludXgtMi42Ljgub3JpZy9kcml2ZXJzL3VzYi9zZXJpYWwv
d2hpdGVoZWF0LmMJMjAwNC0wOC0xMyAyMjozNjo0NS4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4
LTIuNi44L2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwkyMDA0LTExLTI4IDA0OjQ5OjQz
LjAwMDAwMDAwMCAtMDgwMApAQCAtNjY4LDggKzY2OCw3IEBACiAKIAlpZiAocG9ydC0+dHR5LT5k
cml2ZXItPmZsdXNoX2J1ZmZlcikKIAkJcG9ydC0+dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcihw
b3J0LT50dHkpOwotCWlmIChwb3J0LT50dHktPmxkaXNjLmZsdXNoX2J1ZmZlcikKLQkJcG9ydC0+
dHR5LT5sZGlzYy5mbHVzaF9idWZmZXIocG9ydC0+dHR5KTsKKwl0dHlfbGRpc2NfZmx1c2gocG9y
dC0+dHR5KTsKIAogCWZpcm1fcmVwb3J0X3R4X2RvbmUocG9ydCk7CiAKZGlmZiAtTmF1ciBsaW51
eC0yLjYuOC5vcmlnL2ZzL3Byb2MvcHJvY190dHkuYyBsaW51eC0yLjYuOC9mcy9wcm9jL3Byb2Nf
dHR5LmMKLS0tIGxpbnV4LTIuNi44Lm9yaWcvZnMvcHJvYy9wcm9jX3R0eS5jCTIwMDQtMDgtMTMg
MjI6MzY6NTYuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9mcy9wcm9jL3Byb2NfdHR5
LmMJMjAwNC0xMS0yOCAwNDo0OTo0My4wMDAwMDAwMDAgLTA4MDAKQEAgLTE1LDkgKzE1LDYgQEAK
ICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAot
ZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2NzW107Ci0KLQogc3RhdGljIGludCB0dHlfbGRp
c2NzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCQlp
bnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIApAQCAtMTU5LDEyICsxNTYsMTUgQEAK
IAlpbnQJaTsKIAlpbnQJbGVuID0gMDsKIAlvZmZfdAliZWdpbiA9IDA7Ci0KKwlzdHJ1Y3QgdHR5
X2xkaXNjICpsZDsKKwkKIAlmb3IgKGk9MDsgaSA8IE5SX0xESVNDUzsgaSsrKSB7Ci0JCWlmICgh
KGxkaXNjc1tpXS5mbGFncyAmIExESVNDX0ZMQUdfREVGSU5FRCkpCisJCWxkID0gdHR5X2xkaXNj
X2dldChpKTsKKwkJaWYgKGxkID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJbGVuICs9IHNwcmlu
dGYocGFnZStsZW4sICIlLTEwcyAlMmRcbiIsCi0JCQkgICAgICAgbGRpc2NzW2ldLm5hbWUgPyBs
ZGlzY3NbaV0ubmFtZSA6ICI/Pz8iLCBpKTsKKwkJCSAgICAgICBsZC0+bmFtZSA/IGxkLT5uYW1l
IDogIj8/PyIsIGkpOworCQl0dHlfbGRpc2NfcHV0KGkpOwogCQlpZiAobGVuK2JlZ2luID4gb2Zm
K2NvdW50KQogCQkJYnJlYWs7CiAJCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKZGlmZiAtTmF1ciBs
aW51eC0yLjYuOC5vcmlnL2luY2x1ZGUvbGludXgvdHR5LmggbGludXgtMi42LjgvaW5jbHVkZS9s
aW51eC90dHkuaAotLS0gbGludXgtMi42Ljgub3JpZy9pbmNsdWRlL2xpbnV4L3R0eS5oCTIwMDQt
MDgtMTMgMjI6MzY6NTguMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuOC9pbmNsdWRlL2xp
bnV4L3R0eS5oCTIwMDQtMTEtMjggMDQ6NDk6NDMuMDAwMDAwMDAwIC0wODAwCkBAIC0zMDYsMjYg
KzMwNiwyNyBAQAogICogdHR5LT53cml0ZS4gIFRodXMsIHlvdSBtdXN0IHVzZSB0aGUgaW5saW5l
IGZ1bmN0aW9ucyBzZXRfYml0KCkgYW5kCiAgKiBjbGVhcl9iaXQoKSB0byBtYWtlIHRoaW5ncyBh
dG9taWMuCiAgKi8KLSNkZWZpbmUgVFRZX1RIUk9UVExFRCAwCi0jZGVmaW5lIFRUWV9JT19FUlJP
UiAxCi0jZGVmaW5lIFRUWV9PVEhFUl9DTE9TRUQgMgotI2RlZmluZSBUVFlfRVhDTFVTSVZFIDMK
LSNkZWZpbmUgVFRZX0RFQlVHIDQKLSNkZWZpbmUgVFRZX0RPX1dSSVRFX1dBS0VVUCA1Ci0jZGVm
aW5lIFRUWV9QVVNIIDYKLSNkZWZpbmUgVFRZX0NMT1NJTkcgNwotI2RlZmluZSBUVFlfRE9OVF9G
TElQIDgKLSNkZWZpbmUgVFRZX0hXX0NPT0tfT1VUIDE0Ci0jZGVmaW5lIFRUWV9IV19DT09LX0lO
IDE1Ci0jZGVmaW5lIFRUWV9QVFlfTE9DSyAxNgotI2RlZmluZSBUVFlfTk9fV1JJVEVfU1BMSVQg
MTcKKyNkZWZpbmUgVFRZX1RIUk9UVExFRCAJCTAJLyogQ2FsbCB1bnRocm90dGxlKCkgYXQgdGhy
ZXNob2xkIG1pbiAqLworI2RlZmluZSBUVFlfSU9fRVJST1IgCQkxCS8qIENhbnNlIGFuIEkvTyBl
cnJvciAobWF5IGJlIG5vIGxkaXNjIHRvbykgKi8KKyNkZWZpbmUgVFRZX09USEVSX0NMT1NFRCAJ
MgkvKiBPdGhlciBzaWRlIChpZiBhbnkpIGhhcyBjbG9zZWQgKi8KKyNkZWZpbmUgVFRZX0VYQ0xV
U0lWRSAJCTMJLyogRXhjbHVzaXZlIG9wZW4gbW9kZSAqLworI2RlZmluZSBUVFlfREVCVUcgCQk0
CS8qIERlYnVnZ2luZyAqLworI2RlZmluZSBUVFlfRE9fV1JJVEVfV0FLRVVQIAk1CS8qIENhbGwg
d3JpdGVfd2FrZXVwIGFmdGVyIHF1ZXVpbmcgbmV3ICovCisjZGVmaW5lIFRUWV9QVVNIIAkJNgkv
KiBuX3R0eSBwcml2YXRlICovCisjZGVmaW5lIFRUWV9DTE9TSU5HIAkJNwkvKiAtPmNsb3NlKCkg
aW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVFRZX0RPTlRfRkxJUCAJCTgJLyogRGVmZXIgYnVmZmVy
IGZsaXAgKi8KKyNkZWZpbmUgVFRZX0xESVNDIAkJOQkvKiBMaW5lIGRpc2NpcGxpbmUgYXR0YWNo
ZWQgKi8KKyNkZWZpbmUgVFRZX0hXX0NPT0tfT1VUIAkxNAkvKiBIYXJkd2FyZSBjYW4gZG8gb3V0
cHV0IGNvb2tpbmcgKi8KKyNkZWZpbmUgVFRZX0hXX0NPT0tfSU4gCQkxNQkvKiBIYXJkd2FyZSBj
YW4gZG8gaW5wdXQgY29va2luZyAqLworI2RlZmluZSBUVFlfUFRZX0xPQ0sgCQkxNgkvKiBwdHkg
cHJpdmF0ZSAqLworI2RlZmluZSBUVFlfTk9fV1JJVEVfU1BMSVQgCTE3CS8qIFByZXNlcnZlIHdy
aXRlIGJvdW5kYXJpZXMgdG8gZHJpdmVyICovCisjZGVmaW5lIFRUWV9IVVBQRUQgCQkxOAkvKiBQ
b3N0IGRyaXZlci0+aGFuZ3VwKCkgKi8KIAogI2RlZmluZSBUVFlfV1JJVEVfRkxVU0godHR5KSB0
dHlfd3JpdGVfZmx1c2goKHR0eSkpCiAKIGV4dGVybiB2b2lkIHR0eV93cml0ZV9mbHVzaChzdHJ1
Y3QgdHR5X3N0cnVjdCAqKTsKIAogZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHR0eV9zdGRfdGVybWlv
czsKLWV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjc1tdOwogZXh0ZXJuIGludCBmZ19jb25z
b2xlLCBsYXN0X2NvbnNvbGUsIHdhbnRfY29uc29sZTsKIAogZXh0ZXJuIGludCBrbXNnX3JlZGly
ZWN0OwpAQCAtMzYyLDYgKzM2MywxNiBAQAogZXh0ZXJuIGludCB0dHlfZ2V0X2JhdWRfcmF0ZShz
dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgdHR5X3Rlcm1pb3NfYmF1ZF9yYXRl
KHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zKTsKIAorZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgKnR0
eV9sZGlzY19yZWYoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB0dHlfbGRpc2Nf
ZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqKTsKK2V4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlf
bGRpc2NfcmVmX3dhaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CisKK2V4dGVybiBzdHJ1Y3QgdHR5
X2xkaXNjICp0dHlfbGRpc2NfZ2V0KGludCk7CitleHRlcm4gdm9pZCB0dHlfbGRpc2NfcHV0KGlu
dCk7CisKK2V4dGVybiB2b2lkIHR0eV93YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Citl
eHRlcm4gdm9pZCB0dHlfbGRpc2NfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisKIHN0
cnVjdCBzZW1hcGhvcmU7CiBleHRlcm4gc3RydWN0IHNlbWFwaG9yZSB0dHlfc2VtOwogCmRpZmYg
LU5hdXIgbGludXgtMi42Ljgub3JpZy9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIGxpbnV4LTIu
Ni44L2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKLS0tIGxpbnV4LTIuNi44Lm9yaWcvaW5jbHVk
ZS9saW51eC90dHlfbGRpc2MuaAkyMDA0LTA4LTEzIDIyOjM4OjA5LjAwMDAwMDAwMCAtMDcwMAor
KysgbGludXgtMi42LjgvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAkyMDA0LTExLTI4IDA0OjQ5
OjQzLjAwMDAwMDAwMCAtMDgwMApAQCAtOTUsNiArOTUsMTMgQEAKICAqIAl0aGF0IGxpbmUgZGlz
Y3BsaW5lIHNob3VsZCB0cnkgdG8gc2VuZCBtb3JlIGNoYXJhY3RlcnMgdG8gdGhlCiAgKiAJbG93
LWxldmVsIGRyaXZlciBmb3IgdHJhbnNtaXNzaW9uLiAgSWYgdGhlIGxpbmUgZGlzY3BsaW5lIGRv
ZXMKICAqIAlub3QgaGF2ZSBhbnkgbW9yZSBkYXRhIHRvIHNlbmQsIGl0IGNhbiBqdXN0IHJldHVy
bi4KKyAqCisgKiBpbnQgKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICopCisgKgorICoJQ2Fs
bGVkIG9uIGEgaGFuZ3VwLiBUZWxscyB0aGUgZGlzY2lwbGluZSB0aGF0IGl0IHNob3VsZAorICoJ
Y2Vhc2UgSS9PIHRvIHRoZSB0dHkgZHJpdmVyLiBDYW4gc2xlZXAuIFRoZSBkcml2ZXIgc2hvdWxk
CisgKglzZWVrIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24gcXVpY2tseSBidXQgc2hvdWxkIHdhaXQg
dW50aWwKKyAqCWFueSBwZW5kaW5nIGRyaXZlciBJL08gaXMgY29tcGxldGVkLgogICovCiAKICNp
bmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTIyLDYgKzEyOSw3IEBACiAJdm9pZAkoKnNldF90ZXJt
aW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CiAJdW5z
aWduZWQgaW50ICgqcG9sbCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJ
CSAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworCWludAkoKmhhbmd1cCkoc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFy
ZSBjYWxsZWQgZnJvbSBiZWxvdy4KQEAgLTEzMiw2ICsxNDAsOCBAQAogCXZvaWQJKCp3cml0ZV93
YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwogCiAJc3RydWN0ICBtb2R1bGUgKm93bmVyOwor
CQorCWludCByZWZjb3VudDsKIH07CiAKICNkZWZpbmUgVFRZX0xESVNDX01BR0lDCTB4NTQwMwo=
</data>        

          </attachment>
    </bug>

</bugzilla>