Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Jan 2010 15:33:28 +0700
From:      Yohanes Nugroho <yohanes@gmail.com>
To:        Rui Paulo <rpaulo@freebsd.org>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: CNS11XX FreeBSD port completed
Message-ID:  <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com>
In-Reply-To: <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org>
References:  <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com>  <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com>  <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0016e64b95e4b77980047c3e7633
Content-Type: text/plain; charset=UTF-8

On Tue, Dec 29, 2009 at 8:53 PM, Rui Paulo <rpaulo@freebsd.org> wrote:

Hi Rui,

Thank you for spending some time to read my code. Here is the new patch.

> Some comments:
> * please read style(9) and try to follow these guidelines on your code

ok, I just found out about this (I should have read this earlier).

>
> * did you forget to add a kernel config file for this board?

it is in sys/arm/conf/CNS11XXNAS

> * I would like for you to reconsider the code that's under C++ comments. Either remove it or please use ANSI-style /* */ C comments. This is a style issue.


ok, i have fixed this

> * please add your email to all the files you are adding (like you do on if_ecereg.h, for example)

ok, done

> * econa_machdep.c is a 4-claus BSD license. Can you check if we already include "This product includes software developed by Brini." on our documentation/marketing material?

every *_machep.c in sys/arm was derived from the same file with the
same license. So I guess it is already been taken care.

> * there are some lines that go beyond 80 columns. Can you fix them?

ok, done

> * in if_ece.c::poweron(), can't you use bus_read_4 instead of using a volatile and pointing it to some specific memory address?

Looking a the implementation of other ports, I have moved this to
econa.c because the memory address space is far apart.

> * please avoid doing in-code variable declarations like "for (int i = 0 ..."

ok. I am working as a C++ programmer, and forgot about  that one loop.

> * what about the #if 0's ?

It has been removed. It was used for testing which one is faster,
sending framented or non-fragmented packets. Sending defragmented
packet is slower for this SoC (takes too much CPU time).

> * do you have the specs of the ethernet controller ? stuff like "mac_port_config |= ((0x1 << 18));" would be better if "18" was a define with an indication of what the bit actually does. Something like "mac_port_config |= ((0x1 << MAC_PORT_0_DISABLE));"
>
> * there are many white lines that you can remove

ok, I have used whiltespace-mode in emacs to help me with this.

> * defines should be like "#define<tab>...". This is especially visible in econa_reg.h

fixed.

Thanks for your help.

-- 
Regards
Yohanes
http://yohan.es/

--0016e64b95e4b77980047c3e7633
Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx_20090103.diff"
Content-Disposition: attachment; filename="cns11xx_20090103.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g3zk54s10

SW5kZXg6IGFybS9hcm0vZWxmX3RyYW1wb2xpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vYXJtL2Vs
Zl90cmFtcG9saW5lLmMJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9hcm0vZWxmX3RyYW1wb2xp
bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBjcHVfaWRjYWNo
ZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVkKENQVV9BUk05KQog
I2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3diaW52X2FsbAorI2Vs
aWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlmYTUy
Nl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUpCiAjZGVmaW5lIGNw
dV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVm
aW5lZChDUFVfQVJNMTApCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vYXJtL2NwdWZ1bmMuYwkocmV2aXNpb24gMjAxMzU4KQorKysgYXJtL2FybS9jcHVmdW5jLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMgQEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBj
cHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9YU0NBTEVfODEzNDIgKi8KKworCisjaWYg
ZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9
IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisKKwkuY2ZfaWQJCQk9IGNwdWZ1bmNfaWQsCisJLmNm
X2Nwd2FpdAkJPSBjcHVmdW5jX251bGxvcCwKKworCS8qIE1NVSBmdW5jdGlvbnMgKi8KKworCS5j
Zl9jb250cm9sCQk9IGNwdWZ1bmNfY29udHJvbCwKKwkuY2ZfZG9tYWlucwkJPSBjcHVmdW5jX2Rv
bWFpbnMsCisJLmNmX3NldHR0YgkJPSBmYTUyNl9zZXR0dGIsCisJLmNmX2ZhdWx0c3RhdHVzCQk9
IGNwdWZ1bmNfZmF1bHRzdGF0dXMsCisJLmNmX2ZhdWx0YWRkcmVzcwk9IGNwdWZ1bmNfZmF1bHRh
ZGRyZXNzLAorCisJLyogVExCIGZ1bmN0aW9ucyAqLworCisJLmNmX3RsYl9mbHVzaElECQk9IGFy
bXY0X3RsYl9mbHVzaElELAorCS5jZl90bGJfZmx1c2hJRF9TRQk9IGZhNTI2X3RsYl9mbHVzaElE
X1NFLAorCS5jZl90bGJfZmx1c2hJCQk9IGFybXY0X3RsYl9mbHVzaEksCisJLmNmX3RsYl9mbHVz
aElfU0UJPSBmYTUyNl90bGJfZmx1c2hJX1NFLAorCS5jZl90bGJfZmx1c2hECQk9IGFybXY0X3Rs
Yl9mbHVzaEQsCisJLmNmX3RsYl9mbHVzaERfU0UJPSBhcm12NF90bGJfZmx1c2hEX1NFLAorCisJ
LyogQ2FjaGUgb3BlcmF0aW9ucyAqLworCisJLmNmX2ljYWNoZV9zeW5jX2FsbAk9IGZhNTI2X2lj
YWNoZV9zeW5jX2FsbCwKKwkuY2ZfaWNhY2hlX3N5bmNfcmFuZ2UJPSBmYTUyNl9pY2FjaGVfc3lu
Y19yYW5nZSwKKworCS5jZl9kY2FjaGVfd2JpbnZfYWxsCT0gZmE1MjZfZGNhY2hlX3diaW52X2Fs
bCwKKwkuY2ZfZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diaW52X3JhbmdlLAor
CS5jZl9kY2FjaGVfaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX2ludl9yYW5nZSwKKwkuY2ZfZGNh
Y2hlX3diX3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diX3JhbmdlLAorCisJLmNmX2lkY2FjaGVfd2Jp
bnZfYWxsCT0gZmE1MjZfaWRjYWNoZV93Ymludl9hbGwsCisJLmNmX2lkY2FjaGVfd2JpbnZfcmFu
Z2UJPSBmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlLAorCisKKwkuY2ZfbDJjYWNoZV93Ymludl9h
bGwgPSBjcHVmdW5jX251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Ymludl9yYW5nZSA9ICh2b2lkICop
Y3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfaW52X3JhbmdlID0gKHZvaWQgKiljcHVmdW5j
X251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Yl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3As
CisKKworCS8qIE90aGVyIGZ1bmN0aW9ucyAqLworCisJLmNmX2ZsdXNoX3ByZWZldGNoYnVmCT0g
ZmE1MjZfZmx1c2hfcHJlZmV0Y2hidWYsCisJLmNmX2RyYWluX3dyaXRlYnVmCT0gYXJtdjRfZHJh
aW5fd3JpdGVidWYsCisJLmNmX2ZsdXNoX2JybmNodGd0X0MJPSBjcHVmdW5jX251bGxvcCwKKwku
Y2ZfZmx1c2hfYnJuY2h0Z3RfRQk9IGZhNTI2X2ZsdXNoX2JybmNodGd0X0UsCisKKwkuY2Zfc2xl
ZXAJCT0gZmE1MjZfY3B1X3NsZWVwLAorCisJLyogU29mdCBmdW5jdGlvbnMgKi8KKworCS5jZl9k
YXRhYWJ0X2ZpeHVwCT0gY3B1ZnVuY19udWxsX2ZpeHVwLAorCS5jZl9wcmVmZXRjaGFidF9maXh1
cAk9IGNwdWZ1bmNfbnVsbF9maXh1cCwKKworCS5jZl9jb250ZXh0X3N3aXRjaAk9IGZhNTI2X2Nv
bnRleHRfc3dpdGNoLAorCisJLmNmX3NldHVwCQk9IGZhNTI2X3NldHVwCit9OworI2VuZGlmCS8q
IENQVV9GQTUyNiAqLworCisKIC8qCiAgKiBHbG9iYWwgY29uc3RhbnRzIGFsc28gdXNlZCBieSBs
b2NvcmUucwogICovCkBAIC03OTMsNiArODYwLDcgQEAKICAgZGVmaW5lZCAoQ1BVX0FSTTlFKSB8
fCBkZWZpbmVkIChDUFVfQVJNMTApIHx8CQkJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxF
XzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODAzMjEpIHx8CSAgICAgICBcCiAgIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpIHx8CSAg
ICAgICBcCisgIGRlZmluZWQoQ1BVX0ZBNTI2KSB8fAkJCQkJICAgICAgIFwKICAgZGVmaW5lZChD
UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAKIHN0YXRpYyB2
b2lkIGdldF9jYWNoZXR5cGVfY3AxNSh2b2lkKTsKQEAgLTEwNzMsNiArMTE0MSwxOSBAQAogCQln
b3RvIG91dDsKIAl9CiAjZW5kaWYJLyogQ1BVX1NBMTExMCAqLworI2lmZGVmIENQVV9GQTUyNgor
CWlmIChjcHV0eXBlID09IENQVV9JRF9GQTUyNikgeworCQljcHVmdW5jcyA9IGZhNTI2X2NwdWZ1
bmNzOworCQljcHVfcmVzZXRfbmVlZHNfdjRfTU1VX2Rpc2FibGUgPSAxOwkvKiBTQSBuZWVkcyBp
dAkqLworCQlnZXRfY2FjaGV0eXBlX2NwMTUoKTsKKwkJcG1hcF9wdGVfaW5pdF9nZW5lcmljKCk7
CisKKwkJLyogVXNlIHBvd2Vyc2F2ZSBvbiB0aGlzIENQVS4gKi8KKwkJY3B1X2RvX3Bvd2Vyc2F2
ZSA9IDE7CisKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENQVV9GQTUyNiAqLwogI2lmZGVm
IENQVV9JWFAxMlgwCiAgICAgICAgIGlmIChjcHV0eXBlID09IENQVV9JRF9JWFAxMjAwKSB7CiAg
ICAgICAgICAgICAgICAgY3B1ZnVuY3MgPSBpeHAxMngwX2NwdWZ1bmNzOwpAQCAtMTU0Nyw3ICsx
NjI4LDggQEAKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NB
TEVfODAzMjEpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQo
Q1BVX1hTQ0FMRV9JWFA0MjUpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwg
ZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKSB8fCBcCi0gIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAg
ZGVmaW5lZChDUFVfQVJNMTEpCisgIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAgZGVmaW5lZChDUFVf
QVJNMTEpIHx8IFwKKyAgZGVmaW5lZChDUFVfRkE1MjYpCiAKICNkZWZpbmUgSUdOCTAKICNkZWZp
bmUgT1IJMQpAQCAtMjAxMyw2ICsyMDk1LDYyIEBACiB9CiAjZW5kaWYJLyogQ1BVX1NBMTEwMCB8
fCBDUFVfU0ExMTEwICovCiAKKyNpZiBkZWZpbmVkKENQVV9GQTUyNikKK3N0cnVjdCBjcHVfb3B0
aW9uIGZhNTI2X29wdGlvbnNbXSA9IHsKKyNpZmRlZiBDT01QQVRfMTIKKwl7ICJub2NhY2hlIiwJ
CUlHTiwgQklDLCAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xf
RENfRU5BQkxFKSB9LAorCXsgIm5vd3JpdGVidWYiLAkJSUdOLCBCSUMsIENQVV9DT05UUk9MX1dC
VUZfRU5BQkxFIH0sCisjZW5kaWYJLyogQ09NUEFUXzEyICovCisJeyAiY3B1LmNhY2hlIiwJCUJJ
QywgT1IsICAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xfRENf
RU5BQkxFKSB9LAorCXsgImNwdS5ub2NhY2hlIiwJT1IsICBCSUMsIChDUFVfQ09OVFJPTF9JQ19F
TkFCTEUgfAorCQkJCQkgICBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1LndyaXRl
YnVmIiwJQklDLCBPUiwgIENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIH0sCisJeyAiY3B1Lm5vd3Jp
dGVidWYiLAlPUiwgIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7IE5VTEwsCQkJ
SUdOLCBJR04sIDAgfQorfTsKKwordm9pZAorZmE1MjZfc2V0dXAoY2hhciAqYXJncykKK3sKKwlp
bnQgY3B1Y3RybCwgY3B1Y3RybG1hc2s7CisKKwljcHVjdHJsID0gQ1BVX0NPTlRST0xfTU1VX0VO
QUJMRSB8IENQVV9DT05UUk9MXzMyQlBfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MXzMyQkRfRU5B
QkxFIHwgQ1BVX0NPTlRST0xfU1lTVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfSUNfRU5BQkxF
IHwgQ1BVX0NPTlRST0xfRENfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfTEFCVF9FTkFCTEU7CisJY3B1Y3RybG1hc2sgPSBDUFVfQ09OVFJPTF9NTVVf
RU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfMzJCRF9F
TkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9JQ19FTkFC
TEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUg
fCBDUFVfQ09OVFJPTF9ST01fRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0JFTkRfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfQUZMVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfTEFCVF9FTkFCTEUgfCBD
UFVfQ09OVFJPTF9CUFJEX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9DUENMSyB8IENQVV9DT05U
Uk9MX1ZFQ1JFTE9DOworCisjaWZuZGVmIEFSTTMyX0RJU0FCTEVfQUxJR05NRU5UX0ZBVUxUUwor
CWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQUZMVF9FTkFCTEU7CisjZW5kaWYKKworCWNwdWN0cmwg
PSBwYXJzZV9jcHVfb3B0aW9ucyhhcmdzLCBmYTUyNl9vcHRpb25zLCBjcHVjdHJsKTsKKworI2lm
ZGVmIF9fQVJNRUJfXworCWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQkVORF9FTkFCTEU7CisjZW5k
aWYKKworCWlmICh2ZWN0b3JfcGFnZSA9PSBBUk1fVkVDVE9SU19ISUdIKQorCQljcHVjdHJsIHw9
IENQVV9DT05UUk9MX1ZFQ1JFTE9DOworCisJLyogQ2xlYXIgb3V0IHRoZSBjYWNoZSAqLworCWNw
dV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyICov
CisJY3RybCA9IGNwdWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9
CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBz
dHJ1Y3QgY3B1X29wdGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJ
QklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUp
IH0sCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt
L2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQorKysgYXJtL2FybS9jcHVmdW5j
X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLyoJJE5ldEJTRDog
Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQq
LworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBN
YXR0IFRob21hcyA8bWF0dEAzYW0tc29mdHdhcmUuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD
T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB
VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUJQ0FDSEVMSU5FX1NJWkUJ
MTYKKworRU5UUlkoZmE1MjZfc2V0dHRiKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwg
YzcsIGMxNCwgMAkvKiBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIx
LCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUs
IDYJLyogaW52YWxpZGF0ZSBCVEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkvKiBk
cmFpbiB3cml0ZSBhbmQgZmlsbCBidWZmZXIgKi8KKworCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAs
IDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1cGRhdGVkIHRoZSBUVEIg
d2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkvKiBp
bnZhbGlkYXRlIEkrRCBUTEIgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVt
cHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIwLCByMAorCW1vdglwYywgbHIKKworLyoKKyAq
IFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNoSURfU0UpCisJbWNyCXAx
NSwgMCwgcjAsIGM4LCBjNywgMQkvKiBmbHVzaCBVdGxiIHNpbmdsZSBlbnRyeSAqLworCW1vdglw
YywgbHIKKworLyoKKyAqIFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNo
SV9TRSkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCS8qIGZsdXNoIEl0bGIgc2luZ2xlIGVu
dHJ5ICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jcHVfc2xlZXApCisJbW92CXIwLCAj
MAorLyoJbm9wCisJbm9wKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CS8qIFdhaXQgZm9y
IGludGVycnVwKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2X2ZsdXNoX3ByZWZldGNoYnVm
KQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CS8qIFByZS1mZXRjaCBm
bHVzaCAqLworCW1vdglwYywgbHIKKworLyoKKyAqIENhY2hlIGZ1bmN0aW9ucworICovCitFTlRS
WShmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAs
IGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCBy
MCwgYzcsIGM1LCAwCS8qIGludmFsaWRhdGUgSSQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMx
MCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2
X2ljYWNoZV9zeW5jX2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwg
MAkvKiBpbnZhbGlkYXRlIEkkICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9kY2FjaGVf
d2JpbnZfYWxsKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMAkvKiBj
bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8q
IGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworLyoKKyAqIFNvZnQgZnVuY3Rp
b25zCisgKi8KK0VOVFJZKGZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSkKKwljbXAJcjEsICMweDQw
MDAKKwliaHMJX0NfTEFCRUwoZmE1MjZfZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwgcjAs
ICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FD
SEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJLyogY2xlYW4g
YW5kIGludmFsaWRhdGUgRCQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUK
KwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKwltY3IJcDE1LCAwLCBy
MCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VO
VFJZKGZhNTI2X2RjYWNoZV93Yl9yYW5nZSkKKwljbXAJcjEsICMweDQwMDAKKwlibHMJMWYKKwor
CW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMAkvKiBjbGVhbiBlbnRpcmUg
RCQgKi8KKwliCTNmCisKKzE6CWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJ
cjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMjoJbWNyCXAx
NSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAj
Q0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTJiCisK
KzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLwor
CW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlhbmQJcjIsIHIw
LCAjKENBQ0hFTElORV9TSVpFLTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENB
Q0hFTElORV9TSVpFLTEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJLyogaW52YWxp
ZGF0ZSBEJCBzaW5nbGUgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlz
dWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKwltb3YJcGMsIGxyCisKK0VO
VFJZKGZhNTI2X2lkY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9D
X0xBQkVMKGZhNTI2X2lkY2FjaGVfd2JpbnZfYWxsKQorCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJ
TkVfU0laRS0xKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0la
RS0xKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBjbGVhbiBhbmQgaW52YWxp
ZGF0ZSBEJCBlbnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0
ZSBJJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIx
LCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAs
IDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9p
Y2FjaGVfc3luY19yYW5nZSkKKwljbXAJcjEsICMweDQwMDAKKwliaHMJX0NfTEFCRUwoZmE1MjZf
aWNhY2hlX3N5bmNfYWxsKQorCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQorCWFk
ZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQorCisxOgltY3IJ
cDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBlbnRyeSAqLworCW1jcglwMTUsIDAs
IHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICND
QUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKwor
MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJ
bW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5jaHRndF9FKQorCW1vdglyMCwgIzAK
KwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFsaWRhdGUgQlRCIGNhY2hlICovCisJ
bW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3aXRjaCkKKwkvKgorCSAqIENGX0NB
Q0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVkIHByaW9yIHRvIHRoaXMuCisJICog
VGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25seSBrZXJuZWwgZGF0YSBhbmQgdGhl
CisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWluIG9ubHkga2VybmVsIGNvZGUsIGFu
ZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJlZCBieSBhbGwgcHJvY2Vzc2VzLgor
CSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkvKiBXcml0ZSB0aGUgVFRCICovCisK
KwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBtdXN0IGZsdXNoIHRoZSBUTEIgKi8K
Kwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB0aGUgSStE
IHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxpbmUgaXMgZW1wdGllZCAqLworCW1v
dglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgorCkluZGV4OiBhcm0vaW5jbHVkZS9j
cHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUvY3B1Y29uZi5oCShyZXZpc2lvbiAy
MDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApICsJCQlcCiAJCQkgZGVmaW5l
ZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDAp
ICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJXAogCQkJIGRlZmluZWQoQ1BVX1hT
Q0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBAQAogICovCiAjaWYgKGRlZmluZWQo
Q1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8
fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZpbmVkKENQVV9TQTExMDApIHx8IGRl
ZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQoQ1BVX0lYUDEyWDApIHx8IGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVkKENQVV9JWFAxMlgwKSB8fCBkZWZp
bmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQVV9GQTUyNikpCiAjZGVmaW5lCUFS
TV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hfNAkwCkBAIC0xMjUsNyArMTI2LDcg
QEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZpbmVkKENQVV9BUk03KSB8fCBkZWZp
bmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVkKENQVV9BUk04KSB8fCBkZWZpbmVk
KENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJXAotICAgICBkZWZpbmVkKENQVV9B
Uk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwg
ZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZBNTI2KSkKICNkZWZpbmUJQVJNX01N
VV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1VX0dFTkVSSUMJCTAKSW5kZXg6IGFy
bS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vaW5jbHVkZS9jcHVmdW5jLmgJ
KHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2NwdWZ1bmMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9jbG9ja19jb25maWcJKHVfaW50LCB1
X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2Cit2b2lkCWZhNTI2X3NldHVwCQko
Y2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9pbnQgdHRiKTsKK3ZvaWQJZmE1MjZf
Y29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9jcHVfc2xlZXAJCShpbnQpOwordm9p
ZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X3RsYl9mbHVzaElEX1NF
CSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNoYnVmCSh2b2lkKTsKK3ZvaWQJZmE1
MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX2Fs
bAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKHZtX29mZnNldF90IHN0YXJ0
LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3diaW52X2FsbAkodm9pZCk7Cit2
b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90
IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJKHZtX29mZnNldF90IHN0YXJ0LCB2
bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3diX3JhbmdlCSh2bV9vZmZzZXRfdCBz
dGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lkY2FjaGVfd2JpbnZfYWxsKHZvaWQp
Owordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9z
aXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVfU0ExMTAKIHZvaWQJc2ExMTBfc2V0
dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250ZXh0X3N3aXRjaAkodm9pZCk7CkBA
IC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9B
Uk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAgZGVmaW5lZChDUFVfU0ExMTApIHx8
IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVfU0ExMTEwKSB8fCBcCiAgIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSB8fAkgICAg
IFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfUFhB
MlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fAkgICAgIFwKICAgZGVmaW5lZChD
UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAgIApJbmRleDog
YXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYV92YXIu
aAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv
IDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9BUk1f
RUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJfSAorCitleHRlcm4gYnVzX3NwYWNl
X3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29mdGMgeworCWRldmljZV90IGRldjsK
KwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3NoOworCWJ1
c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3N5c3Rl
bV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlzdHJ1Y3Qgcm1hbiBlY19tZW1fcm1h
bjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCByZXNv
dXJjZXM7Cit9OworCit2b2lkIHBvd2VyX29uX25ldHdvcmtfaW50ZXJmYWNlKHZvaWQpOwordW5z
aWduZWQgaW50IGdldF90Y2xrKHZvaWQpOworCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2Zp
bGVzLmVjb25hCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24g
MCkKKysrIGFybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBA
QAorIyAkRnJlZUJTRCAkCithcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMJc3RhbmRhcmQKK2Fy
bS9lY29uYS9lY29uYV9tYWNoZGVwLmMJCXN0YW5kYXJkCithcm0vZWNvbmEvZWNvbmEuYwkJCXN0
YW5kYXJkCithcm0vZWNvbmEvdGltZXIuYwkJCXN0YW5kYXJkCithcm0vZWNvbmEvdWFydF9idXNf
ZWMuYwkJb3B0aW9uYWwJdWFydAorYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJCW9wdGlvbmFsCXVh
cnQKK2Rldi91YXJ0L3VhcnRfZGV2X25zODI1MC5jCW9wdGlvbmFsCXVhcnQKK2FybS9hcm0vaXJx
X2Rpc3BhdGNoLlMJCXN0YW5kYXJkCithcm0vYXJtL2J1c19zcGFjZV9nZW5lcmljLmMJCXN0YW5k
YXJkCithcm0vZWNvbmEvZWhjaV9lYnVzLmMJc3RhbmRhcmQJZWhjaQorYXJtL2Vjb25hL29oY2lf
ZWMuYwlzdGFuZGFyZAlvaGNpCithcm0vZWNvbmEvaWZfZWNlLmMJCXN0YW5kYXJkCithcm0vZWNv
bmEvY2ZpX2J1c19lY29uYS5jCQlvcHRpb25hbAljZmkKSW5kZXg6IGFybS9lY29uYS9lY29uYV9t
YWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkocmV2aXNp
b24gMCkKKysrIGFybS9lY29uYS9lY29uYV9tYWNoZGVwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDA5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlv
aGFuZXNAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAxOTk0LTE5OTggTWFyayBCcmluaWNv
bWJlLgorICogQ29weXJpZ2h0IChjKSAxOTk0IEJyaW5pLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIHdyaXR0ZW4gZm9y
IEJyaW5pIGJ5IE1hcmsgQnJpbmljb21iZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5n
IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisg
KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAg
IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgQnJpbmkuCisgKiA0
LiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBub3IgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkg
YmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEJSSU5JIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBCUklOSSBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAib3B0X21zZ2J1
Zi5oIgorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisK
KyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJVkFURQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgor
I2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgorI2luY2x1
ZGUgPHN5cy9zaWduYWx2YXIuaD4KKyNpbmNsdWRlIDxzeXMvaW1nYWN0Lmg+CisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2Vy
Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5j
bHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNsdWRlIDxzeXMv
cHJvYy5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyNpbmNsdWRlIDxzeXMvY29ucy5oPgor
I2luY2x1ZGUgPHN5cy9iaW8uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lz
L2J1Zi5oPgorI2luY2x1ZGUgPHN5cy9leGVjLmg+CisjaW5jbHVkZSA8c3lzL2tkYi5oPgorI2lu
Y2x1ZGUgPHN5cy9tc2didWYuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgorI2luY2x1ZGUg
PG1hY2hpbmUvY3B1Lmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAu
aD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+Cisj
aW5jbHVkZSA8dm0vdm1fcGFnZXIuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNpbmNsdWRl
IDx2bS92bm9kZV9wYWdlci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcG1hcC5oPgorI2luY2x1ZGUg
PG1hY2hpbmUvdm1wYXJhbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CisjaW5jbHVkZSA8
bWFjaGluZS91bmRlZmluZWQuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL21hY2hkZXAuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL21ldGFkYXRhLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hcm1yZWcuaD4KKyNp
bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KKyNpbmNsdWRl
ICJlY29uYV9yZWcuaCIKKworLyogUGFnZSB0YWJsZSBmb3IgbWFwcGluZyBwcm9jMCB6ZXJvIHBh
Z2UgKi8KKyNkZWZpbmUJIEtFUk5FTF9QVF9TWVMJCTAKKyNkZWZpbmUJS0VSTkVMX1BUX0tFUk4J
CTEKKyNkZWZpbmUJS0VSTkVMX1BUX0tFUk5fTlVNCTIyCisvKiBMMiB0YWJsZSBmb3IgbWFwcGlu
ZyBhZnRlciBrZXJuZWwgKi8KKyNkZWZpbmUJS0VSTkVMX1BUX0FGS0VSTkVMCUtFUk5FTF9QVF9L
RVJOICsgS0VSTkVMX1BUX0tFUk5fTlVNCisjZGVmaW5lCUtFUk5FTF9QVF9BRktFUk5FTF9OVU0J
NQorCisvKiB0aGlzIHNob3VsZCBiZSBldmVubHkgZGl2aXNhYmxlIGJ5IFBBR0VfU0laRSAvIEwy
X1RBQkxFX1NJWkVfUkVBTCAob3IgNCkgKi8KKyNkZWZpbmUJTlVNX0tFUk5FTF9QVFMJKEtFUk5F
TF9QVF9BRktFUk5FTCArIEtFUk5FTF9QVF9BRktFUk5FTF9OVU0pCisKKy8qIERlZmluZSB2YXJp
b3VzIHN0YWNrIHNpemVzIGluIHBhZ2VzICovCisjZGVmaW5lCUlSUV9TVEFDS19TSVpFCTEKKyNk
ZWZpbmUJQUJUX1NUQUNLX1NJWkUJMQorI2RlZmluZQlVTkRfU1RBQ0tfU0laRQkxCisKK2V4dGVy
biB1X2ludCBkYXRhX2Fib3J0X2hhbmRsZXJfYWRkcmVzczsKK2V4dGVybiB1X2ludCBwcmVmZXRj
aF9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7CitleHRlcm4gdV9pbnQgdW5kZWZpbmVkX2hhbmRsZXJf
YWRkcmVzczsKKworc3RydWN0IHB2X2FkZHIga2VybmVsX3B0X3RhYmxlW05VTV9LRVJORUxfUFRT
XTsKKworZXh0ZXJuIHZvaWQgKl9lbmQ7CisKK2V4dGVybiBpbnQgKmVuZDsKKworc3RydWN0IHBj
cHUgX19wY3B1Oworc3RydWN0IHBjcHUgKnBjcHVwID0gJl9fcGNwdTsKKworLyogUGh5c2ljYWwg
YW5kIHZpcnR1YWwgYWRkcmVzc2VzIGZvciBzb21lIGdsb2JhbCBwYWdlcyAqLworCit2bV9wYWRk
cl90IHBoeXNfYXZhaWxbMTBdOwordm1fcGFkZHJfdCBkdW1wX2F2YWlsWzRdOwordm1fb2Zmc2V0
X3QgcGh5c2ljYWxfcGFnZXM7CisKK3N0cnVjdCBwdl9hZGRyIHN5c3RlbXBhZ2U7CitzdHJ1Y3Qg
cHZfYWRkciBtc2didWZwdjsKK3N0cnVjdCBwdl9hZGRyIGlycXN0YWNrOworc3RydWN0IHB2X2Fk
ZHIgdW5kc3RhY2s7CitzdHJ1Y3QgcHZfYWRkciBhYnRzdGFjazsKK3N0cnVjdCBwdl9hZGRyIGtl
cm5lbHN0YWNrOworCitzdGF0aWMgdm9pZCAqYm9vdF9hcmcxOworc3RhdGljIHZvaWQgKmJvb3Rf
YXJnMjsKKworc3RhdGljIHN0cnVjdCB0cmFwZnJhbWUgcHJvYzBfdGY7CisKKy8qIFN0YXRpYyBk
ZXZpY2UgbWFwcGluZ3MuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtYXBfZGV2bWFwIGVjb25h
X2Rldm1hcFtdID0geworCXsKKwkJLyoKKwkJICogVGhpcyBtYXBzIEREUiBTRFJBTQorCQkgKi8K
KwkJRUNPTkFfU0RSQU1fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfU0RSQU1fQkFTRSwgLypw
aHlzaWNhbCovCisJCUVDT05BX1NEUkFNX1NJWkUsIC8qc2l6ZSovCisJCVZNX1BST1RfUkVBRHxW
TV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCS8qCisJICogTWFwIHRoZSBvbi1i
b2FyZCBkZXZpY2VzIFZBID09IFBBIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVtCisJICogd2l0
aCB0aGUgTU1VIG9uIG9yIG9mZi4KKwkgKi8KKwl7CisJCS8qCisJCSAqIFRoaXMgbWFwcyB0aGUg
aW50ZXJydXB0IGNvbnRyb2xsZXIsIHRoZSBVQVJUCisJCSAqIGFuZCB0aGUgdGltZXIuCisJCSAq
LworCQlFQ09OQV9JT19CQVNFLCAvKnZpcnR1YWwqLworCQlFQ09OQV9JT19CQVNFLCAvKnBoeXNp
Y2FsKi8KKwkJRUNPTkFfSU9fU0laRSwgLypzaXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1Rf
V1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkvKgorCQkgKiBPSENJICsgRUhDSQor
CQkgKi8KKwkJRUNPTkFfT0hDSV9WQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfT0hDSV9QQkFT
RSwgLypwaHlzaWNhbCovCisJCUVDT05BX1VTQl9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JF
QUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwKKwl7CisJCS8qCisJCSAqIENG
SQorCQkgKi8KKwkJRUNPTkFfQ0ZJX1ZCQVNFLCAvKnZpcnR1YWwqLworCQlFQ09OQV9DRklfUEJB
U0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9DRklfU0laRSwKKwkJVk1fUFJPVF9SRUFEfFZNX1BS
T1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkwLAorCQkwLAorCQkwLAorCQkw
LAorCQkwLAorCX0KK307CisKKwordm9pZCAqCitpbml0YXJtKHZvaWQgKmFyZywgdm9pZCAqYXJn
MikKK3sKKwlzdHJ1Y3QgcHZfYWRkciAga2VybmVsX2wxcHQ7CisJaW50IGxvb3AsIGk7CisJdV9p
bnQgbDFwYWdldGFibGU7CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBh
ZnRlcmtlcm47CisJdWludDMyX3QgbWVtc2l6ZTsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl2
b2xhdGlsZSB1aW50MzJfdCAqIGRkciA9ICh1aW50MzJfdCAqKTB4NDAwMDAwMEM7CisJaW50IG1l
bV9pbmZvOworCisJYm9vdF9hcmcxID0gYXJnOworCWJvb3RfYXJnMiA9IGFyZzI7CisJYm9vdGhv
d3RvID0gUkJfVkVSQk9TRTsKKwlib290aG93dG8gfD0gIFJCX1NJTkdMRTsKKworCXNldF9jcHVm
dW5jcygpOworCWxhc3RhZGRyID0gZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0
KHBjcHVwLCAwLCBzaXplb2Yoc3RydWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0
aHJlYWQwKTsKKworCisJZnJlZW1lbXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFH
RV9NQVNLOworCS8qIERlZmluZSBhIG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9u
ICovCisjZGVmaW5lCXZhbGxvY19wYWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJ
YWxsb2NfcGFnZXMoKHZhcikucHZfdmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9
ICh2YXIpLnB2X3ZhICsgKEtFUk5QSFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJ
YWxsb2NfcGFnZXModmFyLCBucCkJCQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVt
ZW1wb3MgKz0gKG5wICogUEFHRV9TSVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwg
KChucCkgKiBQQUdFX1NJWkUpKTsKKworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9T
SVpFKSAmIChMMV9UQUJMRV9TSVpFIC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9T
SVpFOworCXZhbGxvY19wYWdlcyhrZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0la
RSk7CisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJ
aWYgKCEobG9vcCAlIChQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFs
bG9jX3BhZ2VzKGtlcm5lbF9wdF90YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8g
UEFHRV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9
IGZyZWVtZW1wb3MgLQorCQkJICAgIChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVf
UkVBTCkpICoKKwkJCSAgICBMMl9UQUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVb
bG9vcF0ucHZfcGEgPQorCQkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5W
SVJUQUREUiArCisJCQkgICAgS0VSTlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisKKworCS8q
CisJICogQWxsb2NhdGUgYSBwYWdlIGZvciB0aGUgc3lzdGVtIHBhZ2UgbWFwcGVkIHRvIFYweDAw
MDAwMDAwCisJICogVGhpcyBwYWdlIHdpbGwganVzdCBjb250YWluIHRoZSBzeXN0ZW0gdmVjdG9y
cyBhbmQgY2FuIGJlCisJICogc2hhcmVkIGJ5IGFsbCBwcm9jZXNzZXMuCisJICovCisJdmFsbG9j
X3BhZ2VzKHN5c3RlbXBhZ2UsIDEpOworCisJLyogQWxsb2NhdGUgc3RhY2tzIGZvciBhbGwgbW9k
ZXMgKi8KKwl2YWxsb2NfcGFnZXMoaXJxc3RhY2ssIElSUV9TVEFDS19TSVpFKTsKKwl2YWxsb2Nf
cGFnZXMoYWJ0c3RhY2ssIEFCVF9TVEFDS19TSVpFKTsKKwl2YWxsb2NfcGFnZXModW5kc3RhY2ss
IFVORF9TVEFDS19TSVpFKTsKKwl2YWxsb2NfcGFnZXMoa2VybmVsc3RhY2ssIEtTVEFDS19QQUdF
Uyk7CisJdmFsbG9jX3BhZ2VzKG1zZ2J1ZnB2LCByb3VuZF9wYWdlKE1TR0JVRl9TSVpFKSAvIFBB
R0VfU0laRSk7CisKKwkvKgorCSAqIE5vdyB3ZSBzdGFydCBjb25zdHJ1Y3Rpb24gb2YgdGhlIEwx
IHBhZ2UgdGFibGUKKwkgKiBXZSBzdGFydCBieSBtYXBwaW5nIHRoZSBMMiBwYWdlIHRhYmxlcyBp
bnRvIHRoZSBMMS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIHJlcGxhY2UgTDEgbWFwcGlu
Z3MgbGF0ZXIgb24gaWYgbmVjZXNzYXJ5CisJICovCisJbDFwYWdldGFibGUgPSBrZXJuZWxfbDFw
dC5wdl92YTsKKworCS8qIE1hcCB0aGUgTDIgcGFnZXMgdGFibGVzIGluIHRoZSBMMSBwYWdlIHRh
YmxlICovCisJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIEFSTV9WRUNUT1JTX0hJR0gsCisJ
ICAgICZrZXJuZWxfcHRfdGFibGVbS0VSTkVMX1BUX1NZU10pOworCWZvciAoaSA9IDA7IGkgPCBL
RVJORUxfUFRfS0VSTl9OVU07IGkrKykKKwkJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIEtF
Uk5CQVNFICsgaSAqIEwxX1NfU0laRSwKKwkJICAgICZrZXJuZWxfcHRfdGFibGVbS0VSTkVMX1BU
X0tFUk4gKyBpXSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIEtFUk5CQVNFLCBQSFlT
QUREUiwKKwkgICAoKCh1aW50MzJfdClsYXN0YWRkciAtIEtFUk5CQVNFKSArIFBBR0VfU0laRSkg
JiB+KFBBR0VfU0laRSAtIDEpLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRF
X0NBQ0hFKTsKKwlhZnRlcmtlcm4gPSByb3VuZF9wYWdlKChsYXN0YWRkciArIEwxX1NfU0laRSkg
JiB+KEwxX1NfU0laRSAtIDEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgS0VSTkVMX1BUX0FGS0VSTkVM
X05VTTsgaSsrKSB7CisJCXBtYXBfbGlua19sMnB0KGwxcGFnZXRhYmxlLCBhZnRlcmtlcm4gKyBp
ICogTDFfU19TSVpFLAorCQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfQUZLRVJORUwg
KyBpXSk7CisJfQorCisJLyogTWFwIHRoZSB2ZWN0b3IgcGFnZS4gKi8KKwlwbWFwX21hcF9lbnRy
eShsMXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwgc3lzdGVtcGFnZS5wdl9wYSwKKwkgICAg
Vk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKworCS8qIE1hcCB0aGUg
c3RhY2sgcGFnZXMgKi8KKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgaXJxc3RhY2sucHZf
dmEsIGlycXN0YWNrLnB2X3BhLAorCSAgICBJUlFfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1f
UFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFw
YWdldGFibGUsIGFidHN0YWNrLnB2X3ZhLCBhYnRzdGFjay5wdl9wYSwKKwkgICAgQUJUX1NUQUNL
X1NJWkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUp
OworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCB1bmRzdGFjay5wdl92YSwgdW5kc3RhY2su
cHZfcGEsCisJICAgIFVORF9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1f
UFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwga2Vy
bmVsc3RhY2sucHZfdmEsIGtlcm5lbHN0YWNrLnB2X3BhLAorCSAgICBLU1RBQ0tfUEFHRVMgKiBQ
QUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJcG1h
cF9tYXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9sMXB0LnB2X3ZhLCBrZXJuZWxfbDFwdC5w
dl9wYSwKKwkgICAgTDFfVEFCTEVfU0laRSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBU
RV9QQUdFVEFCTEUpOworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBtc2didWZwdi5wdl92
YSwgbXNnYnVmcHYucHZfcGEsCisJICAgIE1TR0JVRl9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJP
VF9XUklURSwgUFRFX0NBQ0hFKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBOVU1fS0VSTkVM
X1BUUzsgKytsb29wKSB7CisJCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxfcHRf
dGFibGVbbG9vcF0ucHZfdmEsCisJCSAgICBrZXJuZWxfcHRfdGFibGVbbG9vcF0ucHZfcGEsIEwy
X1RBQkxFX1NJWkUsCisJCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VU
QUJMRSk7CisJfQorCisKKwlwbWFwX2Rldm1hcF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25h
X2Rldm1hcCk7CisKKwljcHVfZG9tYWlucygoRE9NQUlOX0NMSUVOVCA8PCAoUE1BUF9ET01BSU5f
S0VSTkVMKjIpKSB8IERPTUFJTl9DTElFTlQpOworCisJc2V0dHRiKGtlcm5lbF9sMXB0LnB2X3Bh
KTsKKworCWNwdV90bGJfZmx1c2hJRCgpOworCisJY3B1X2RvbWFpbnMoRE9NQUlOX0NMSUVOVCA8
PCAoUE1BUF9ET01BSU5fS0VSTkVMKjIpKTsKKworCWNuaW5pdCgpOworCisJbWVtX2luZm8gPSAo
KCpkZHIpID4+IDQpICYgMHgzOworCisJbWVtc2l6ZSA9ICg4PDxtZW1faW5mbykqMTAyNCoxMDI0
OworCisJcGh5c21lbSA9IG1lbXNpemUgLyBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFBhZ2VzIHdl
cmUgYWxsb2NhdGVkIGR1cmluZyB0aGUgc2Vjb25kYXJ5IGJvb3RzdHJhcCBmb3IgdGhlCisJICog
c3RhY2tzIGZvciBkaWZmZXJlbnQgQ1BVIG1vZGVzLgorCSAqIFdlIG11c3Qgbm93IHNldCB0aGUg
cjEzIHJlZ2lzdGVycyBpbiB0aGUgZGlmZmVyZW50IENQVSBtb2RlcyB0bworCSAqIHBvaW50IHRv
IHRoZXNlIHN0YWNrcy4KKwkgKiBTaW5jZSB0aGUgQVJNIHN0YWNrcyB1c2UgU1RNRkQgZXRjLiB3
ZSBtdXN0IHNldCByMTMgdG8gdGhlIHRvcCBlbmQKKwkgKiBvZiB0aGUgc3RhY2sgbWVtb3J5Lgor
CSAqLworCWNwdV9jb250cm9sKENQVV9DT05UUk9MX01NVV9FTkFCTEUsIENQVV9DT05UUk9MX01N
VV9FTkFCTEUpOworCisJc2V0X3N0YWNrcHRyKFBTUl9JUlEzMl9NT0RFLAorCSAgICBpcnFzdGFj
ay5wdl92YSArIElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFKTsKKwlzZXRfc3RhY2twdHIoUFNS
X0FCVDMyX01PREUsCisJICAgIGFidHN0YWNrLnB2X3ZhICsgQUJUX1NUQUNLX1NJWkUgKiBQQUdF
X1NJWkUpOworCXNldF9zdGFja3B0cihQU1JfVU5EMzJfTU9ERSwKKwkgICAgdW5kc3RhY2sucHZf
dmEgKyBVTkRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSk7CisKKwkvKgorCSAqIFdlIG11c3Qgbm93
IGNsZWFuIHRoZSBjYWNoZSBhZ2Fpbi4uLi4KKwkgKiBDbGVhbmluZyBtYXkgYmUgZG9uZSBieSBy
ZWFkaW5nIG5ldyBkYXRhIHRvIGRpc3BsYWNlIGFueQorCSAqIGRpcnR5IGRhdGEgaW4gdGhlIGNh
Y2hlLiBUaGlzIHdpbGwgaGF2ZSBoYXBwZW5lZCBpbiBzZXR0dGIoKQorCSAqIGJ1dCBzaW5jZSB3
ZSBhcmUgYm9vdCBzdHJhcHBpbmcgdGhlIGFkZHJlc3NlcyB1c2VkIGZvciB0aGUgcmVhZAorCSAq
IG1heSBoYXZlIGp1c3QgYmVlbiByZW1hcHBlZCBhbmQgdGh1cyB0aGUgY2FjaGUgY291bGQgYmUg
b3V0CisJICogb2Ygc3luYy4gQSByZS1jbGVhbiBhZnRlciB0aGUgc3dpdGNoIHdpbGwgY3VyZSB0
aGlzLgorCSAqIEFmdGVyIGJvb3RpbmcgdGhlcmUgYXJlIG5vIGdyb3NzIHJlbG9jYXRpb25zIG9m
IHRoZSBrZXJuZWwgdGh1cworCSAqIHRoaXMgcHJvYmxlbSB3aWxsIG5vdCBvY2N1ciBhZnRlciBp
bml0YXJtKCkuCisJICovCisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgc3Rh
Y2sgZm9yIGV4Y2VwdGlvbiBoYW5kbGVycyAqLworCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJl
c3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJf
YWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5k
bGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVm
aW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFk
MC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1
Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0la
RSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJh
bWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisK
Kwlhcm1fdmVjdG9yX2luaXQoQVJNX1ZFQ1RPUlNfSElHSCwgQVJNX1ZFQ19BTEwpOworCisJcG1h
cF9jdXJtYXhrdmFkZHIgPSBhZnRlcmtlcm4gKyBMMV9TX1NJWkUgKiAoS0VSTkVMX1BUX0tFUk5f
TlVNIC0gMSk7CisKKwkvKgorCSAqIEFSTV9VU0VfU01BTExfQUxMT0MgdXNlcyBkdW1wX2F2YWls
LCBzbyBpdCBtdXN0IGJlIGZpbGxlZCBiZWZvcmUKKwkgKiBjYWxsaW5nIHBtYXBfYm9vdHN0cmFw
LgorCSAqLworCWR1bXBfYXZhaWxbMF0gPSBQSFlTQUREUjsKKwlkdW1wX2F2YWlsWzFdID0gUEhZ
U0FERFIgKyBtZW1zaXplOworCWR1bXBfYXZhaWxbMl0gPSAwOworCWR1bXBfYXZhaWxbM10gPSAw
OworCisJcG1hcF9ib290c3RyYXAoZnJlZW1lbXBvcywKKwkgICAgS0VSTlZJUlRBRERSICsgMyAq
IG1lbXNpemUsCisJICAgICZrZXJuZWxfbDFwdCk7CisKKwltc2didWZwID0gKHZvaWQqKW1zZ2J1
ZnB2LnB2X3ZhOworCW1zZ2J1ZmluaXQobXNnYnVmcCwgTVNHQlVGX1NJWkUpOworCisJbXV0ZXhf
aW5pdCgpOworCisJaSA9IDA7CisjaWYgUEhZU0FERFIgIT0gS0VSTlBIWVNBRERSCisJcGh5c19h
dmFpbFtpKytdID0gUEhZU0FERFI7CisJcGh5c19hdmFpbFtpKytdID0gS0VSTlBIWVNBRERSOwor
I2VuZGlmCisJcGh5c19hdmFpbFtpKytdID0gdmlydHVhbF9hdmFpbCAtIEtFUk5WSVJUQUREUiAr
IEtFUk5QSFlTQUREUjsKKworCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsK
KwlwaHlzX2F2YWlsW2krK10gPSAwOworCXBoeXNfYXZhaWxbaSsrXSA9IDA7CisJLyogRG8gYmFz
aWMgdHVuaW5nLCBoeiBldGMgKi8KKwlpbml0X3BhcmFtMSgpOworCWluaXRfcGFyYW0yKHBoeXNt
ZW0pOworCWtkYl9pbml0KCk7CisKKwlyZXR1cm4gKCh2b2lkICopKGtlcm5lbHN0YWNrLnB2X3Zh
ICsgVVNQQUNFX1NWQ19TVEFDS19UT1AgLQorCSAgICBzaXplb2Yoc3RydWN0IHBjYikpKTsKK30K
SW5kZXg6IGFybS9lY29uYS9pZl9lY2UuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvaWZfZWNl
LmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvaWZfZWNlLmMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTkzOSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv
IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPHN5
cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2FybS9lY29uYS9pZl9lY2Uu
YyQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgor
I2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8
c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVs
ZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lu
Y2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8
bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxu
ZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJw
Lmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+Cisj
aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisK
KyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQv
aW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9i
cGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkv
bWlpdmFyLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXJlZy5oPgorI2luY2x1ZGUgPGFy
bS9lY29uYS9pZl9lY2V2YXIuaD4KKyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+Cisj
aW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKyNpbmNsdWRlICJtaWlidXNfaWYuaCIKKworc3Rh
dGljIHVpbnQ4X3QKK3ZsYW4wX21hY1tFVEhFUl9BRERSX0xFTl0gPSB7MHgwMCwgMHhhYSwgMHhi
YiwgMHhjYywgMHhkZCwgMHgxOX07CisKKy8qCisgKiBCb290IGxvYWRlciBleHBlY3RzIHRoZSBo
YXJkd2FyZSBzdGF0ZSB0byBiZSB0aGUgc2FtZSB3aGVuIHdlCisgKiByZXN0YXJ0IHRoZSBkZXZp
Y2UgKHdhcm0gYm9vdCksIHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGUgaW5pdGlhbAorICogY29uZmln
IHZhbHVlcy4KKyAqLworaW50IGluaXRpYWxfc3dpdGNoX2NvbmZpZzsKK2ludCBpbml0aWFsX2Nw
dV9jb25maWc7CitpbnQgaW5pdGlhbF9wb3J0MF9jb25maWc7CitpbnQgaW5pdGlhbF9wb3J0MV9j
b25maWc7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK1JENChzdHJ1Y3QgZWNlX3NvZnRjICpz
YywgYnVzX3NpemVfdCBvZmYpCit7CisJcmV0dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBv
ZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitXUjQoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms
IGJ1c19zaXplX3Qgb2ZmLCB1aW50MzJfdCB2YWwpCit7CisJYnVzX3dyaXRlXzQoc2MtPm1lbV9y
ZXMsIG9mZiwgdmFsKTsKK30KKworI2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9z
YyktPnNjX210eCkKKyNkZWZpbmUJRUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+
c2NfbXR4KQorI2RlZmluZQlFQ0VfTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNj
X210eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xP
Q0ssIE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYykt
PnNjX210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2Mp
LT5zY19tdHhfdHgpCisjZGVmaW5lCUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgm
X3NjLT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNF
IFRYIExvY2siLCBNVFhfREVGKQorCisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9s
b2NrKCYoX3NjKS0+c2NfbXR4X2NsZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9z
YykJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5V
UExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNl
X2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RF
RikKKworI2RlZmluZQlFQ0VfUlhMT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4
KQorI2RlZmluZQlFQ0VfUlhVTkxPQ0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9y
eCkKKyNkZWZpbmUJRUNFX1JYTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210
eF9yeCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIs
IE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZf
c2MtPnNjX210eCk7CisjZGVmaW5lCUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95
KCZfc2MtPnNjX210eF90eCk7CisjZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9k
ZXN0cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9Z
KF9zYykJXAorCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlF
Q0VfQVNTRVJUX0xPQ0tFRChfc2MpCW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7
CisjZGVmaW5lCUVDRV9BU1NFUlRfVU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210
eCwgTUFfTk9UT1dORUQpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8q
IGlmbmV0IGVudHJ5IHBvaW50cyAqLworCitzdGF0aWMgdm9pZCBlY2Vpbml0X2xvY2tlZCh2b2lk
ICopOworc3RhdGljIHZvaWQgZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3Rh
dGljIHZvaWQgZWNlaW5pdCh2b2lkICopOworc3RhdGljIHZvaWQgZWNlc3RhcnQoc3RydWN0IGlm
bmV0ICopOworc3RhdGljIHZvaWQgZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGlj
IGludCBlY2Vpb2N0bChzdHJ1Y3QgaWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8q
IGJ1cyBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIGludCBlY2VfcHJvYmUoZGV2aWNlX3QgZGV2
KTsKK3N0YXRpYyBpbnQgZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBlY2Vf
ZGV0YWNoKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfaW50cih2b2lkICopOworc3Rh
dGljIHZvaWQgZWNlX2ludHJfcWYodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3N0YXR1
cyh2b2lkICp4c2MpOworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgZWNlX2Fj
dGl2YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfZGVhY3RpdmF0ZShkZXZpY2Vf
dCBkZXYpOworc3RhdGljIGludCBlY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOwor
c3RhdGljIHZvaWQgZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZt
ZWRpYXJlcSAqaWZtcik7CitzdGF0aWMgaW50IGVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMg
KnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIGVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vf
c29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyBpbnQgY29uZmlndXJlX2NwdV9wb3J0
KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgY29uZmlndXJlX2xhbl9wb3J0KHN0
cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQgc2V0X3B2aWQo
c3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0
YXRpYyB2b2lkIHNldF92bGFuX3ZpZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOwor
c3RhdGljIHZvaWQgc2V0X3ZsYW5fbWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxh
bik7CitzdGF0aWMgdm9pZCBzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2
bGFuKTsKK3N0YXRpYyBpbnQgaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7Citz
dGF0aWMgdm9pZCBlY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBj
b3VudCk7CisKK3N0YXRpYyB2b2lkIGVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29m
dGMgKnNjKTsKK3N0YXRpYyB2b2lkIGVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29m
dGMgKnNjKTsKKworc3RhdGljIHZvaWQgZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5k
aW5nIF9fdW51c2VkKTsKK3N0YXRpYyB2b2lkIGVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBl
bmRpbmcgX191bnVzZWQpOworc3RhdGljIHZvaWQgZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcs
IGludCBwZW5kaW5nIF9fdW51c2VkKTsKKworc3RhdGljIGludCBlY2VfYWxsb2NhdGVfZG1hKHN0
cnVjdCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZvaWQgZWNlX2ludHJfdHgodm9pZCAqeHNj
KTsKKworc3RhdGljIHZvaWQgY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMs
IGludCBpbmNsdWRlX3RoaXNfbWFjKTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5
KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkgICAgdWludDhfdCAqbWFjX3Jlc3VsdCwKKwkJICAg
IGludCBmaXJzdCk7CisKKy8qUEhZIHJlbGF0ZWQgZnVuY3Rpb25zKi8KKworc3RhdGljIGlubGlu
ZSBpbnQKK3BoeV9yZWFkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5LCBpbnQgcmVnKQor
eworCWludCB2YWw7CisJaW50IGlpOworCWludCBzdGF0dXM7CisKKwlXUjQoc2MsIFBIWV9DT05U
Uk9MLCBQSFlfUldfT0spOworCVdSNChzYywgUEhZX0NPTlRST0wsCisJICAgIChQSFlfQUREUkVT
UyhwaHkpfFBIWV9SRUFEX0NPTU1BTkQgfAorCSAgICBQSFlfUkVHSVNURVIocmVnKSkpOworCisJ
Zm9yIChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKSB7CisJCXN0YXR1cyA9IFJENChzYywgUEhZ
X0NPTlRST0wpOworCQlpZiAoc3RhdHVzICYgUEhZX1JXX09LKSB7CisJCQkvKiBjbGVhciB0aGUg
cndfb2sgc3RhdHVzLCBhbmQgY2xlYXIgb3RoZXIKKwkJCSAqIGJpdHMgdmFsdWUgKi8KKwkJCVdS
NChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VUX0RBVEEoc3Rh
dHVzKTsKKwkJCXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwg
aW50IHJlZywgaW50IGRhdGEpCit7CisJaW50IGlpOworCisJV1I0KHNjLCBQSFlfQ09OVFJPTCwg
UEhZX1JXX09LKTsKKwlXUjQoc2MsIFBIWV9DT05UUk9MLAorCSAgICBQSFlfQUREUkVTUyhwaHkp
IHwgUEhZX1JFR0lTVEVSKHJlZykgfAorCSAgICBQSFlfV1JJVEVfQ09NTUFORCB8IFBIWV9EQVRB
KGRhdGEpKTsKKwlmb3IgKGlpID0gMDsgaWkgPCAweDEwMDA7IGlpKyspIHsKKwkJaWYgKFJENChz
YywgUEhZX0NPTlRST0wpICYgUEhZX1JXX09LKSB7CisJCQkvKiBjbGVhciB0aGUgcndfb2sgc3Rh
dHVzLCBhbmQgY2xlYXIgb3RoZXIKKwkJCSAqIGJpdHMgdmFsdWUKKwkJCSAqLworCQkJV1I0KHNj
LCBQSFlfQ09OVFJPTCwgUEhZX1JXX09LKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworLypj
dXJyZW50bHkgb25seSBpY19wbHVzIHBoeSBpcyBzdXBwb3J0ZWQqLworc3RhdGljIGludCBnZXRf
cGh5X3R5cGUoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJdWludDE2X3QgcGh5MF9pZCA9IDAs
IHBoeTFfaWQgPSAwOworCisJLyoKKwkgKiBVc2UgU01JIChNREMvTURJTykgdG8gcmVhZCBMaW5r
IFBhcnRuZXIncyBQSFkgSWRlbnRpZmllcgorCSAqIFJlZ2lzdGVyIDEKKwkgKi8KKwlwaHkwX2lk
ID0gcGh5X3JlYWQoc2MsIDAsIDB4Mik7CisJcGh5MV9pZCA9IHBoeV9yZWFkKHNjLCAxLCAweDIp
OworCisJaWYgKChwaHkwX2lkID09IDB4RkZGRikgJiYgKHBoeTFfaWQgPT0gMHgwMDBGKSkKKwkJ
cmV0dXJuIChBU0lYX0dJR0FfUEhZKTsKKwllbHNlIGlmICgocGh5MF9pZCA9PSAweDAyNDMpICYm
IChwaHkxX2lkID09IDB4MDI0MykpCisJCXJldHVybiAoVFdPX1NJTkdMRV9QSFkpOworCWVsc2Ug
aWYgKChwaHkwX2lkID09IDB4RkZGRikgJiYgKHBoeTFfaWQgPT0gMHgwMDA3KSkKKwkJcmV0dXJu
IChWU0M4NjAxX0dJR0FfUEhZKTsKKwllbHNlIGlmICgocGh5MV9pZCA9PSAweEZGRkYpICYmIChw
aHkwX2lkID09IDB4MDI0MykpCisJCXJldHVybiAoSUNfUExVU19QSFkpOworCisJcmV0dXJuIChO
T1RfRk9VTkRfUEhZKTsKK30KKworc3RhdGljIGludAorZWNlX3Byb2JlKGRldmljZV90IGRldikK
K3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgRXRoZXJuZXQgQ29udHJvbGxlciIpOwor
CXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludAorZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYp
Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3Ry
dWN0IGlmbmV0ICppZnAgPSBOVUxMOworCXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKnNjdHg7CisJ
c3RydWN0IHN5c2N0bF9vaWQgKnNvaWQ7CisJaW50IGVyciA9IDA7CisJdV9jaGFyIGVhZGRyW0VU
SEVSX0FERFJfTEVOXTsKKwl1aW50MzJfdCBybmQ7CisJaW50IGksIHJpZDsKKworCXNjLT5kZXYg
PSBkZXY7CisKKwlyaWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu
eShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKworCWlmIChz
Yy0+bWVtX3JlcyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXBvd2VyX29uX25ldHdvcmtfaW50
ZXJmYWNlKCk7CisKKwlyaWQgPSAwOworCXNjLT5pcnFfcmVzX3N0YXR1cyA9IGJ1c19hbGxvY19y
ZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJICAgIFJGX0FDVElWRSk7CisJ
aWYgKHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7
IC8qVFNUQzogRm0tU3dpdGNoLVR4LUNvbXBsZXRlKi8KKwlzYy0+aXJxX3Jlc190eCA9IGJ1c19h
bGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCVJGX0FDVElW
RSk7CisJaWYgKHNjLT5pcnFfcmVzX3R4ID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0g
MjsgLypGU1JDOiBGbS1Td2l0Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1
c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCSBSRl9B
Q1RJVkUpOworCWlmIChzYy0+aXJxX3Jlc19yZWMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwly
aWQgPSA0OyAvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9
IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCVJG
X0FDVElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3FmID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJ
ZXJyID0gZWNlX2FjdGl2YXRlKGRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBT
eXNjdGxzICovCisJc2N0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0eChkZXYpOworCXNvaWQgPSBk
ZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisKKwlFQ0VfTE9DS19JTklUKHNjKTsKKworCWNh
bGxvdXRfaW5pdF9tdHgoJnNjLT50aWNrX2NoLCAmc2MtPnNjX210eCwgMCk7CisKKwlpZiAoKGVy
ciA9IGVjZV9nZXRfbWFjKHNjLCBlYWRkcikpICE9IDApIHsKKwkJLyoKKwkJICogTm8gTUFDIGFk
ZHJlc3MgY29uZmlndXJlZC4gR2VuZXJhdGUgdGhlIHJhbmRvbSBvbmUuCisJCSAqLworCQlpZiAo
Ym9vdHZlcmJvc2UpCisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAiR2VuZXJhdGluZyBy
YW5kb20gZXRoZXJuZXQgYWRkcmVzcy5cbiIpOworCQlybmQgPSBhcmM0cmFuZG9tKCk7CisKKwkJ
Lypmcm9tIGlmX2FlLmMvaWZfYXRlLmMqLworCQkvKgorCQkgKiBTZXQgT1VJIHRvIGNvbnZlbmll
bnQgbG9jYWxseSBhc3NpZ25lZCBhZGRyZXNzLiAnYicKKwkJICogaXMgMHg2Miwgd2hpY2ggaGFz
IHRoZSBsb2NhbGx5IGFzc2lnbmVkIGJpdCBzZXQsIGFuZAorCQkgKiB0aGUgYnJvYWRjYXN0L211
bHRpY2FzdCBiaXQgY2xlYXIuCisJCSAqLworCQllYWRkclswXSA9ICdiJzsKKwkJZWFkZHJbMV0g
PSAncyc7CisJCWVhZGRyWzJdID0gJ2QnOworCQllYWRkclszXSA9IChybmQgPj4gMTYpICYgMHhm
ZjsKKwkJZWFkZHJbNF0gPSAocm5kID4+IDgpICYgMHhmZjsKKwkJZWFkZHJbNV0gPSBybmQgJiAw
eGZmOworCisJCWZvciAoaT0wOyBpPEVUSEVSX0FERFJfTEVOOyBpKyspCisJCQllYWRkcltpXSA9
IHZsYW4wX21hY1tpXTsKKwl9CisJZWNlX3NldF9tYWMoc2MsIGVhZGRyKTsKKwlzYy0+aWZwID0g
aWZwID0gaWZfYWxsb2MoSUZUX0VUSEVSKTsKKwlpZiAobWlpX3BoeV9wcm9iZShkZXYsICZzYy0+
bWlpYnVzLCBlY2VfaWZtZWRpYV91cGQsCisJCQkgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2
aWNlX3ByaW50ZihkZXYsICJDYW5ub3QgZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87
CisJCWdvdG8gb3V0OworCX0KKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZw
LCBkZXZpY2VfZ2V0X25hbWUoZGV2KSwgZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZf
ZmxhZ3MgPSBJRkZfQlJPQURDQVNUIHwgSUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJ
aWZwLT5pZl9jYXBhYmlsaXRpZXMgPSBJRkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0
ID0gKENTVU1fSVAgfCBDU1VNX1RDUCB8IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9
IGlmcC0+aWZfY2FwYWJpbGl0aWVzOworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAt
PmlmX2lvY3RsID0gZWNlaW9jdGw7CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlm
X3NuZC5pZnFfZHJ2X21heGxlbiA9IEVDRV9NQVhfVFhfQlVGRkVSUy0xOworCUlGUV9TRVRfTUFY
TEVOKCZpZnAtPmlmX3NuZCwgRUNFX01BWF9UWF9CVUZGRVJTLTEpOworCUlGUV9TRVRfUkVBRFko
JmlmcC0+aWZfc25kKTsKKworCS8qIENyZWF0ZSBsb2NhbCB0YXNrcS4gKi8KKworCVRBU0tfSU5J
VCgmc2MtPnNjX2ludHJfdGFzaywgMCwgZWNlX2ludHJfdGFzaywgc2MpOworCVRBU0tfSU5JVCgm
c2MtPnNjX3R4X3Rhc2ssIDEsIGVjZV90eF90YXNrLCBpZnApOworCVRBU0tfSU5JVCgmc2MtPnNj
X2NsZWFudXBfdGFzaywgMiwgZWNlX2NsZWFudXBfdGFzaywgc2MpOworCXNjLT5zY190cSA9IHRh
c2txdWV1ZV9jcmVhdGVfZmFzdCgiZWNlX3Rhc2txIiwgTV9XQUlUT0ssCisJCQkJCSAgdGFza3F1
ZXVlX3RocmVhZF9lbnF1ZXVlLAorCQkJCQkgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEg
PT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRh
c2txdWV1ZVxuIik7CisJCWdvdG8gb3V0OworCisJfQorCisJZXRoZXJfaWZhdHRhY2goaWZwLCBl
YWRkcik7CisKKwkvKgorCSAqIEFjdGl2YXRlIGludGVycnVwdHMKKwkgKi8KKwllcnIgPSBidXNf
c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3JlYywgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBT
QUZFLAorCQkgICAgTlVMTCwgZWNlX2ludHIsIHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJy
KSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQln
b3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0
YXR1cywKKwkJICAgIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkJICAgIE5VTEwsIGVj
ZV9pbnRyX3N0YXR1cywgc2MsICZzYy0+aW50cmhhbmRfc3RhdHVzKTsKKwlpZiAoZXJyKSB7CisJ
CWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91
dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3FmLCBJTlRS
X1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJCSAgICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNj
LT5pbnRyaGFuZF9xZik7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJ
CUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0
dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3R4LCBJTlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUs
CisJCSAgICBOVUxMLCBlY2VfaW50cl90eCwgc2MsICZzYy0+aW50cmhhbmRfdHgpOworCisJaWYg
KGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsK
KwkJZ290byBvdXQ7CisJfQorCisJRUNFX1RYTE9DS19JTklUKHNjKTsKKwlFQ0VfUlhMT0NLX0lO
SVQoc2MpOworCUVDRV9DTEVBTlVQTE9DS19JTklUKHNjKTsKKworCS8qZW5hYmxlIGFsbCBpbnRl
cnJ1cHQgc291cmNlcyovCisJV1I0KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisK
KwkvKmVuYWJsZSBwb3J0IDAqLworCVdSNChzYywgUE9SVF8wX0NPTkZJRywgUkQ0KHNjLCBQT1JU
XzBfQ09ORklHKSAmIH4oUE9SVF9ESVNBQkxFKSk7CisKKwl0YXNrcXVldWVfc3RhcnRfdGhyZWFk
cygmc2MtPnNjX3RxLCAxLCBQSV9ORVQsICIlcyB0YXNrcSIsCisJCSAgICBkZXZpY2VfZ2V0X25h
bWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0ZShk
ZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIpOwor
fQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwkvKlRPRE86IHJl
bGVhc2UgcmVzb3VyY2VzKi8KKworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gZGV2aWNlX2dldF9z
b2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKworCWVjZXN0b3Aoc2Mp
OworCWlmIChpZnAgIT0gTlVMTCkgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlpZl9mcmVl
KGlmcCk7CisJfQorCWVjZV9kZWFjdGl2YXRlKGRldik7CisJcmV0dXJuICgwKTsKK30KKworc3Rh
dGljIHZvaWQKK2VjZV9nZXRhZGRyKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms
IGludCBuc2VncywgaW50IGVycm9yKQoreworCXVfaW50MzJfdCAqcGFkZHI7CisJS0FTU0VSVChu
c2VncyA9PSAxLCAoIndyb25nIG51bWJlciBvZiBzZWdtZW50cywgc2hvdWxkIGJlIDEiKSk7CisJ
cGFkZHIgPSBhcmc7CisJKnBhZGRyID0gc2Vncy0+ZHNfYWRkcjsKK30KKworc3RhdGljIGludAor
ZWNlX2FsbG9jX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBpOwor
CWludCBlcnJvcjsKKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBhbmQgRE1BIHNhZmUgbWVt
b3J5IGZvciBUWC9SWCBkZXNjcmlwdG9ycy4gKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0
ZShzYy0+c2NfcGFyZW50X3RhZywJLyogcGFyZW50ICovCisJCSAgICAxNiwgMCwgLyogYWxpZ25t
ZW50LCBib3VuZGFyeSAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCS8qIGxvd2Fk
ZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkvKiBoaWdoYWRkciAqLworCQkgICAgTlVM
TCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJCSAgICBzaXplb2YoZXRoX3R4
X2Rlc2NfdCkqRUNFX01BWF9UWF9CVUZGRVJTLCAvKm1heCBzaXplKi8KKwkJICAgIDEsLypuc2Vn
bWVudHMqLworCQkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKkVDRV9NQVhfVFhfQlVGRkVSUywK
KwkJICAgIDAsLypmbGFncyovCisJCSAgICBOVUxMLCBOVUxMLAkvKiBsb2NrZnVuYywgbG9ja2Z1
bmNhcmcgKi8KKwkJICAgICZzYy0+ZG1hdGFnX2RhdGFfdHgpOwkvKiBkbWF0ICovCisKKwkvKiBh
bGxvY2F0ZSBtZW1vcnkgZm9yIHR4IHJpbmcgKi8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Mo
c2MtPmRtYXRhZ19kYXRhX3R4LAorCQkgICAgKHZvaWQqKikmKHNjLT5kZXNjX3R4KSwKKwkJICAg
IEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkJICAgIEJVU19ETUFfQ09IRVJFTlQs
CisJCSAgICAmKHNjLT5kbWFtYXBfcmluZ190eCkpOworCisJaWYgKGVycm9yKSB7CisJCWlmX3By
aW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBtZW1vcnlcbiIpOworCQlidXNf
ZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90
eCA9IDA7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIGxvYWQgcmluZyBkbWEgKi8KKwll
cnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmlu
Z190eCwKKwkJICAgIHNjLT5kZXNjX3R4LAorCQkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKkVD
RV9NQVhfVFhfQlVGRkVSUywKKwkJICAgIGVjZV9nZXRhZGRyLAorCQkgICAgJihzYy0+cmluZ19w
YWRkcl90eCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYo
c2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJCWJ1c19kbWFtZW1fZnJlZShz
Yy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kZXNjX3R4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3R4
KTsKKwkJc2MtPmRlc2NfdHggPSBOVUxMOworCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0
YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90eCA9IDA7CisJCXJldHVybiAoRU5YSU8p
OworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuIEFsaWdubWVudCBp
cyAyIGJ5dGVzICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90
YWcsCS8qIHBhcmVudCAqLworCQkgICAgMSwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov
CisJCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCQkgICAgQlVT
X1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGZp
bHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCQkgICBNQ0xCWVRFUypNQVhfRlJBR01FTlQsCS8qbWF4
c2l6ZSovCisJCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMgKi8KKwkJICAgIE1DTEJZ
VEVTLCAwLAkJLyogbWF4c2Vnc3osIGZsYWdzICovCisJCSAgICBOVUxMLCBOVUxMLAkJLyogbG9j
a2Z1bmMsIGxvY2tmdW5jYXJnICovCisJCSAgICAmc2MtPmRtYXRhZ19yaW5nX3R4KTsJLyogZG1h
dCAqLworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNy
ZWF0ZSBidXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor
CWZvciAoaT0wOyBpPEVDRV9NQVhfVFhfQlVGRkVSUzsgaSsrKSB7CisJCS8qIGNyZWF0ZSBkbWEg
bWFwIGZvciBlYWNoIGRlc2NyaXB0b3IgKi8KKwkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShz
Yy0+ZG1hdGFnX3JpbmdfdHgsIDAsCisJCQkJCSAgJihzYy0+dHhfZGVzY1tpXS5kbWFtYXApKTsK
KwkJaWYgKGVycm9yKSB7CisJCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUg
bWFwIGZvciBtYnVmXG4iKTsKKwkJCXJldHVybiAoRU5YSU8pOworCQl9CisJfQorCXJldHVybiAo
MCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZF
UlM7IGkrKykgeworCQlpZiAoc2MtPnR4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+
dHhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT50eF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisK
KwlpZiAoc2MtPmRtYW1hcF9yaW5nX3R4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0
YWdfZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJaWYgKHNjLT5kZXNjX3R4KSB7CisJ
CQlidXNfZG1hbWVtX2ZyZWUoc2MtPmRtYXRhZ19kYXRhX3R4LAorCQkJCQlzYy0+ZGVzY190eCwg
c2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFwX3JpbmdfdHggPSAwOworCX0K
KworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+
ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCX0KKworCWlmIChz
Yy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxFQ0VfTUFYX1RYX0JVRkZFUlM7
IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCwKKwkJCQkJ
ICAgc2MtPnR4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJCXNjLT50eF9kZXNjW2ldLmRtYW1hcCA9IDA7
CisJCX0KKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfdHgpOworCQlzYy0+
ZG1hdGFnX3JpbmdfdHggPSAwOworCX0KK30KKworc3RhdGljIGludAorZWNlX2FsbG9jX2Rlc2Nf
ZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBlcnJvcjsKKwlpbnQgaTsKKwor
CS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBhbmQgRE1BIHNhZmUgbWVtb3J5IGZvciBSWCBkZXNj
cmlwdG9ycy4gKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZShzYy0+c2NfcGFyZW50X3Rh
ZywJLyogcGFyZW50ICovCisJCSAgICAxNiwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov
CisJCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCQkgICAgQlVT
X1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGZp
bHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCQkgICAvKiBtYXhzaXplLCBuc2VnbWVudHMgKi8KKwkJ
ICAgIHNpemVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDEsCisJCSAgIC8q
IG1heHNlZ3N6LCBmbGFncyAqLworCQkgICAgc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKkVDRV9NQVhf
UlhfQlVGRkVSUywgMCwKKwkJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2NrZnVuYywgbG9ja2Z1bmNh
cmcgKi8KKwkJICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisKKwkvKmFsbG9j
YXRlIHJpbmcqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfcngs
CisJCQkJICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJCQkJIEJVU19ETUFfTk9XQUlUIHwgQlVT
X0RNQV9aRVJPIHwKKwkJCQkgQlVTX0RNQV9DT0hFUkVOVCwKKwkJCQkgJihzYy0+ZG1hbWFwX3Jp
bmdfcngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0
byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJLyog
bG9hZCBkbWFtYXAgKi8KKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+ZG1hdGFnX2RhdGFf
cngsIHNjLT5kbWFtYXBfcmluZ19yeCwKKwkJICAgIHNjLT5kZXNjX3J4LAorCQkgICAgc2l6ZW9m
KGV0aF9yeF9kZXNjX3QpKkVDRV9NQVhfUlhfQlVGRkVSUywKKwkJICAgIGVjZV9nZXRhZGRyLAor
CQkgICAgJihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJv
cikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJ
CWJ1c19kbWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNjX3J4LAorCQkJCXNj
LT5kbWFtYXBfcmluZ19yeCk7CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19kYXRh
X3J4KTsKKwkJc2MtPmRlc2NfcnggPSBOVUxMOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkv
KiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9yIG1idWZzLiAqLworCWVycm9yID0gYnVzX2RtYV90
YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFnLC8qIHBhcmVudCAqLworCQkgICAgMTYsIDAsCQkJ
LyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQs
CS8qIGxvd2FkZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8K
KwkJICAgIE5VTEwsIE5VTEwsCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkJICAgIE1D
TEJZVEVTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJCSAgICBNQ0xCWVRFUywgMCwJ
CS8qIG1heHNlZ3N6LCBmbGFncyAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGxvY2tmdW5jLCBs
b2NrZnVuY2FyZyAqLworCQkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQgKi8KKwor
CWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVz
ZG1hIHRhZyBmb3IgbWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlmb3IgKGkg
PTA7IGk8RUNFX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2Ny
ZWF0ZShzYy0+ZG1hdGFnX3JpbmdfcngsIDAsCisJCQkgICAgJnNjLT5yeF9kZXNjW2ldLmRtYW1h
cCk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3Jl
YXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWVy
cm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2MtPnJ4X3Nw
YXJlbWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8g
Y3JlYXRlIHNwYXJlIG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJldHVybiAo
MCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZF
UlM7IGkrKykgeworCQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+
cnhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisK
KwlpZiAoc2MtPmRtYXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0
YWdfZGF0YV9yeCwgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5k
bWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngpOwor
CQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdf
ZGF0YV9yeCA9IDA7CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0g
MDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNF
X01BWF9SWF9CVUZGRVJTOyBpKyspCisJCQlidXNfZG1hbWFwX2Rlc3Ryb3koc2MtPmRtYXRhZ19y
aW5nX3J4LAorCQkJICAgIHNjLT5yeF9kZXNjW2ldLmRtYW1hcCk7CisJCWJ1c19kbWFtYXBfZGVz
dHJveShzYy0+ZG1hdGFnX3JpbmdfcngsIHNjLT5yeF9zcGFyZW1hcCk7CisJCWJ1c19kbWFfdGFn
X2Rlc3Ryb3koc2MtPmRtYXRhZ19yaW5nX3J4KTsKKwkJc2MtPmRtYXRhZ19yaW5nX3J4ID0gMDsK
Kwl9Cit9CisKK3N0YXRpYyBpbnQKK2VjZV9uZXdfcnhidWYoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms
IHN0cnVjdCByeF9kZXNjX2luZm8qIGRlc2NpbmZvKQoreworCXN0cnVjdCBtYnVmICpuZXdfbWJ1
ZjsKKwlidXNfZG1hX3NlZ21lbnRfdCBzZWdbMV07CisJYnVzX2RtYW1hcF90IG1hcDsKKwlpbnQg
ZXJyb3I7CisJaW50IG5zZWdzOworCWJ1c19kbWFfdGFnX3QgdGFnOworCisJdGFnID0gc2MtPmRt
YXRhZ19yaW5nX3J4OworCisJbmV3X21idWYgPSBtX2dldGNsKE1fRE9OVFdBSVQsIE1UX0RBVEEs
IE1fUEtUSERSKTsKKworCWlmIChuZXdfbWJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT0JVRlMp
OworCisJbmV3X21idWYtPm1fbGVuID0gbmV3X21idWYtPm1fcGt0aGRyLmxlbiA9IE1DTEJZVEVT
OworCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyh0YWcsIHNjLT5yeF9zcGFyZW1h
cCwgbmV3X21idWYsCisJCSAgICBzZWcsICZuc2VncywgQlVTX0RNQV9OT1dBSVQpOworCisJS0FT
U0VSVChuc2VncyA9PSAxLCAoIlRvbyBtYW55IHNlZ21lbnRzIHJldHVybmVkISIpKTsKKworCWlm
IChuc2VncyAhPSAxIHx8IGVycm9yKSB7CisJCW1fZnJlZShuZXdfbWJ1Zik7CisJCXJldHVybiAo
RU5PQlVGUyk7CisJfQorCisJaWYgKGRlc2NpbmZvLT5idWZmICE9IE5VTEwpIHsKKwkJYnVzX2Rt
YW1hcF9zeW5jKHRhZywgZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwor
CQlidXNfZG1hbWFwX3VubG9hZCh0YWcsIGRlc2NpbmZvLT5kbWFtYXApOworCX0KKworCW1hcCA9
IGRlc2NpbmZvLT5kbWFtYXA7CisJZGVzY2luZm8tPmRtYW1hcCA9IHNjLT5yeF9zcGFyZW1hcDsK
KwlzYy0+cnhfc3BhcmVtYXAgPSBtYXA7CisKKwlidXNfZG1hbWFwX3N5bmModGFnLCBkZXNjaW5m
by0+ZG1hbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKworCWRlc2NpbmZvLT5idWZmID0gbmV3
X21idWY7CisJZGVzY2luZm8tPmRlc2MtPmRhdGFfcHRyID0gc2VnLT5kc19hZGRyOworCWRlc2Np
bmZvLT5kZXNjLT5sZW5ndGggPSBzZWctPmRzX2xlbi0yOworCisJcmV0dXJuICgwKTsKK30KKwor
c3RhdGljIGludAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwll
dGhfdHhfZGVzY190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOwor
CWludCBlcnJvcjsKKworCS8qY3JlYXRlIHBhcmVudCB0YWcgZm9yIHR4IGFuZCByeCovCisJZXJy
b3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoCisJCSAgICBidXNfZ2V0X2RtYV90YWcoc2MtPmRldiks
LyogcGFyZW50ICovCisJCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCQkg
ICAgQlVTX1NQQUNFX01BWEFERFIsCS8qIGxvd2FkZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhB
RERSLAkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBmaWx0ZXJh
cmcgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULCAwLC8qIG1heHNpemUsIG5zZWdt
ZW50cyAqLworCQkgICAgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsCS8qIG1heHNlZ3NpemUgKi8K
KwkJICAgIDAsCQkJLyogZmxhZ3MgKi8KKwkJICAgIE5VTEwsIE5VTEwsCS8qIGxvY2tmdW5jLCBs
b2NrYXJnICovCisJCSAgICAmc2MtPnNjX3BhcmVudF90YWcpOworCisJZWNlX2FsbG9jX2Rlc2Nf
ZG1hX3R4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykg
eworCQlkZXNjdHggPSAoZXRoX3R4X2Rlc2NfdCAqKSgmc2MtPmRlc2NfdHhbaV0pOworCQltZW1z
ZXQoZGVzY3R4LCAwLCBzaXplb2YoZXRoX3R4X2Rlc2NfdCkpOworCQlkZXNjdHgtPmxlbmd0aCA9
IE1BWF9QQUNLRVRfTEVOOworCQlkZXNjdHgtPmNvd24gPSAxOworCQlpZiAoaT09RUNFX01BWF9U
WF9CVUZGRVJTLTEpCisJCQlkZXNjdHgtPmVvciA9IDE7CisJfQorCisJZWNlX2FsbG9jX2Rlc2Nf
ZG1hX3J4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykg
eworCQlkZXNjcnggPSAmKHNjLT5kZXNjX3J4W2ldKTsKKwkJbWVtc2V0KGRlc2NyeCwgMCwgc2l6
ZW9mKGV0aF9yeF9kZXNjX3QpKTsKKwkJc2MtPnJ4X2Rlc2NbaV0uZGVzYyA9IGRlc2NyeDsKKwkJ
c2MtPnJ4X2Rlc2NbaV0uYnVmZiA9IDA7CisJCWVjZV9uZXdfcnhidWYoc2MsICYoc2MtPnJ4X2Rl
c2NbaV0pKTsKKworCQlpZiAoaT09RUNFX01BWF9SWF9CVUZGRVJTLTEpCisJCQlkZXNjcngtPmVv
ciA9IDE7CisJfQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7CisJc2MtPmxh
c3RfcnggPSAwOworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgwKTsKK30KKwor
c3RhdGljIGludAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYzsKKwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKwlzdHJ1Y3Qg
aWZuZXQgKmlmcDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmcCA9IHNjLT5p
ZnA7CisKKwlpbml0aWFsX3N3aXRjaF9jb25maWcgPSBSRDQoc2MsIFNXSVRDSF9DT05GSUcpOwor
CWluaXRpYWxfY3B1X2NvbmZpZyA9IFJENChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwlpbml0aWFs
X3BvcnQwX2NvbmZpZyA9IFJENChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCWluaXRpYWxfcG9y
dDFfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisKKwkvKkRpc2FibGUgUG9y
dCAwICovCisJbWFjX3BvcnRfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisJ
bWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCVdSNChzYywgTUFDX1BPUlRfMF9D
T05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKkRpc2FibGUgUG9ydCAxICovCisJbWFjX3Bv
cnRfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmln
IHw9IChQT1JUX0RJU0FCTEUpOworCVdSNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIG1hY19wb3J0
X2NvbmZpZyk7CisKKwllcnIgPSBlY2VfYWxsb2NhdGVfZG1hKHNjKTsKKwlpZiAoZXJyKSB7CisJ
CWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIGFsbG9jYXRpbmcgZG1hXG4iKTsKKwkJZ290byBv
dXQ7CisJfQorCisJV1I0KHNjLCBUU19ERVNDUklQVE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRy
X3R4KTsKKwlXUjQoc2MsIFRTX0RFU0NSSVBUT1JfQkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90
eCk7CisKKwlXUjQoc2MsIEZTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfcngp
OworCVdSNChzYywgRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIsIHNjLT5yaW5nX3BhZGRyX3J4KTsK
KworCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwly
ZXR1cm4gKEVOWElPKTsKKworfQorCitzdGF0aWMgdm9pZAorZWNlX2RlYWN0aXZhdGUoZGV2aWNl
X3QgZGV2KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisKKwlpZiAoc2MtPmludHJoYW5kKQorCQlidXNfdGVhcmRvd25faW50cihkZXYs
IHNjLT5pcnFfcmVzX3JlYywgc2MtPmludHJoYW5kKTsKKworCXNjLT5pbnRyaGFuZCA9IDA7CisK
KwlpZiAoc2MtPmludHJoYW5kX3FmKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFf
cmVzX3FmLCBzYy0+aW50cmhhbmRfcWYpOworCisJc2MtPmludHJoYW5kX3FmID0gMDsKKworCWJ1
c19nZW5lcmljX2RldGFjaChzYy0+ZGV2KTsKKwlpZiAoc2MtPm1paWJ1cykKKwkJZGV2aWNlX2Rl
bGV0ZV9jaGlsZChzYy0+ZGV2LCBzYy0+bWlpYnVzKTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1
c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsCisJCSAgICBybWFuX2dldF9y
aWQoc2MtPm1lbV9yZXMpLCBzYy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCisJaWYg
KHNjLT5pcnFfcmVzX3JlYykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lS
USwKKwkJICAgIHJtYW5fZ2V0X3JpZChzYy0+aXJxX3Jlc19yZWMpLCBzYy0+aXJxX3Jlc19yZWMp
OworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ
U19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3FmKSwgc2MtPmlycV9y
ZXNfcWYpOworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShk
ZXYsIFNZU19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3N0YXR1cyks
IHNjLT5pcnFfcmVzX3N0YXR1cyk7CisKKwlzYy0+aXJxX3Jlc19yZWMgPSAwOworCXNjLT5pcnFf
cmVzX3FmID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSAwOworCUVDRV9UWExPQ0tfREVTVFJP
WShzYyk7CisJRUNFX1JYTE9DS19ERVNUUk9ZKHNjKTsKKworCWVjZV9mcmVlX2Rlc2NfZG1hX3R4
KHNjKTsKKwllY2VfZnJlZV9kZXNjX2RtYV9yeChzYyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisg
KiBDaGFuZ2UgbWVkaWEgYWNjb3JkaW5nIHRvIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK2Vj
ZV9pZm1lZGlhX3VwZChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpz
YyA9IGlmcC0+aWZfc29mdGM7CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJaW50IGVycm9yOwor
CisJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlFQ0VfTE9DSyhzYyk7CisJ
ZXJyb3IgPSBtaWlfbWVkaWFjaGcobWlpKTsKKwlFQ0VfVU5MT0NLKHNjKTsKKwlyZXR1cm4gKGVy
cm9yKTsKK30KKworLyoKKyAqIE5vdGlmeSB0aGUgd29ybGQgd2hpY2ggbWVkaWEgd2UncmUgdXNp
bmcuCisgKi8KK3N0YXRpYyB2b2lkCitlY2VfaWZtZWRpYV9zdHMoc3RydWN0IGlmbmV0ICppZnAs
IHN0cnVjdCBpZm1lZGlhcmVxICppZm1yKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gaWZw
LT5pZl9zb2Z0YzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKworCW1paSA9IGRldmljZV9nZXRf
c29mdGMoc2MtPm1paWJ1cyk7CisJRUNFX0xPQ0soc2MpOworCW1paV9wb2xsc3RhdChtaWkpOwor
CWlmbXItPmlmbV9hY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJaWZtci0+aWZtX3N0
YXR1cyA9IG1paS0+bWlpX21lZGlhX3N0YXR1czsKKwlFQ0VfVU5MT0NLKHNjKTsKK30KKworc3Rh
dGljIHZvaWQKK2VjZV90aWNrKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9
IHhzYzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2
aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3Rp
dmU7CisJbWlpX3RpY2sobWlpKTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0
IG9uZSBzZWNvbmQgZnJvbSBub3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gs
IGh6LCBlY2VfdGljaywgc2MpOworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfbWFjX2VudHJ5
KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkJICAgICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisJ
aW50IGZpcnN0KQoreworCXVpbnQzMl90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBl
bnRyeTsKKwl1aW50MzJfdCAqZW50cnlfdmFsOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19D
T05UUk9MXzAsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzEsIDApOwor
CVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChmaXJzdCkKKwkJ
V1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgxKTsKKwllbHNlCisJCVdSNChl
YywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4Mik7CisKKwlmb3IgKGlpID0gMDsgaWkg
PCAweDEwMDA7IGlpKyspCisJCWlmIChSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8x
KSAmICgweDEpKQorCQkJYnJlYWs7CisKKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5
KTsKKwllbnRyeV92YWxbMF0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKTsK
KwllbnRyeV92YWxbMV0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yKTsKKwor
CWlmIChtYWNfcmVzdWx0KQorCQltZW1jcHkobWFjX3Jlc3VsdCwgZW50cnkubWFjX2FkZHIsIEVU
SEVSX0FERFJfTEVOKTsKKworCXJldHVybiAoZW50cnkudGFibGVfZW5kKTsKK30KKworc3RhdGlj
IHVpbnQzMl90Cit3cml0ZV9hcmxfdGFibGVfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqZWMsCisJ
ICAgIHVpbnQzMl90IGZpbHRlciwKKwkgICAgdWludDMyX3Qgdmxhbl9tYWMsCisJICAgIHVpbnQz
Ml90IHZsYW5fZ2lkLAorCSAgICB1aW50MzJfdCBhZ2VfZmllbGQsCisJICAgIHVpbnQzMl90IHBv
cnRfbWFwLAorCSAgICBjb25zdCB1aW50OF90ICptYWNfYWRkcikKK3sKKwl1aW50MzJfdCBpaTsK
Kwl1aW50MzJfdCAqZW50cnlfdmFsOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRyeTsK
KworCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCisJZW50cnkuZmlsdGVyID0g
ZmlsdGVyOworCWVudHJ5LnZsYW5fbWFjID0gdmxhbl9tYWM7CisJZW50cnkudmxhbl9naWQgPSB2
bGFuX2dpZDsKKwllbnRyeS5hZ2VfZmllbGQgPSBhZ2VfZmllbGQ7CisJZW50cnkucG9ydF9tYXAg
PSBwb3J0X21hcDsKKwltZW1jcHkoZW50cnkubWFjX2FkZHIsIG1hY19hZGRyLCBFVEhFUl9BRERS
X0xFTik7CisKKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5KTsKKworCVdSNChlYywg
QVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VT
U19DT05UUk9MXzEsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDAp
OworCisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgZW50cnlfdmFsWzBdKTsK
KwlXUjQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yLCBlbnRyeV92YWxbMV0pOworCisJ
V1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgQVJMX1dSSVRFX0NPTU1BTkQpOwor
CisJZm9yIChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKQorCQlpZiAoUkQ0KGVjLCBBUkxfVEFC
TEVfQUNDRVNTX0NPTlRST0xfMSkgJiBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAo
MSk7IC8qd3JpdGUgb2sqLworCisJLyogd3JpdGUgZmFpbGVkKi8KKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgdm9pZAorcmVtb3ZlX21hY19lbnRyeShzdHJ1Y3QgZWNlX3NvZnRjICpzYywKKwkg
ICAgdWludDhfdCAqbWFjKQoreworCS8qIGludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhp
cyBlbnRyeSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9J
RCwKKwkgICAgSU5WQUxJRF9FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAgIG1hYyk7Cit9CisKK3N0
YXRpYyB2b2lkCithZGRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorCSAgICB1aW50
OF90ICptYWMpCit7CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9V
UF9JRCwKKwkJICAgIE5FV19FTlRSWSwgVkxBTjBfR1JPVVAsCisJCSAgICBtYWMpOworfQorCisv
KioKKyAqIFRoZSBiZWhhdmlvciBvZiBBUkwgdGFibGUgcmVhZGluZyBhbmQgZGVsZXRpb24gaXMg
bm90IHdlbGwgZGVmaW5lZAorICogaW4gdGhlIGRvY3VtZW50YXRpb24uIFRvIGJlIHNhZmUsIGFs
bCBtYWMgYWRkcmVzc2VzIGFyZSBwdXQgdG8gYQorICogbGlzdCwgdGhlbiBkZWxldGVkLgorICoK
KyAqLworc3RhdGljIHZvaWQKK2NsZWFyX21hY19lbnRyaWVzKHN0cnVjdCBlY2Vfc29mdGMgKmVj
LCBpbnQgaW5jbHVkZV90aGlzX21hYykKK3sKKwlpbnQgdGFibGVfZW5kOworCXN0cnVjdCBtYWNf
bGlzdCAqIHRlbXA7CisJc3RydWN0IG1hY19saXN0ICogbWFjX2xpc3RfaGVhZGVyOworCXN0cnVj
dCBtYWNfbGlzdCAqIGN1cnJlbnQ7CisJY2hhciBtYWNbRVRIRVJfQUREUl9MRU5dOworCisJY3Vy
cmVudCA9IDA7CisJbWFjX2xpc3RfaGVhZGVyID0gMDsKKworCXRhYmxlX2VuZCA9IHJlYWRfbWFj
X2VudHJ5KGVjLCBtYWMsIDEpOworCXdoaWxlICghdGFibGVfZW5kKSB7CisJCWlmICghaW5jbHVk
ZV90aGlzX21hYyAmJgorCQkgICAgbWVtY21wKG1hYywgdmxhbjBfbWFjLCBFVEhFUl9BRERSX0xF
Tik9PTApIHsKKwkJCS8qIHJlYWQgbmV4dCBlbnRyeSAqLworCQkJdGFibGVfZW5kID0gcmVhZF9t
YWNfZW50cnkoZWMsIG1hYywgMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXRlbXAgPSAoc3Ry
dWN0IG1hY19saXN0KiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYWNfbGlzdCksCisJCQkgICAgTV9E
RVZCVUYsCisJCQkgICAgTV9OT1dBSVQgfCBNX1pFUk8pOworCQltZW1jcHkodGVtcC0+bWFjX2Fk
ZHIsIG1hYywgRVRIRVJfQUREUl9MRU4pOworCQl0ZW1wLT5uZXh0ID0gMDsKKwkJaWYgKG1hY19s
aXN0X2hlYWRlcikgeworCQkJY3VycmVudC0+bmV4dCA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVt
cDsKKwkJfSBlbHNlIHsKKwkJCW1hY19saXN0X2hlYWRlciA9IHRlbXA7CisJCQljdXJyZW50ID0g
dGVtcDsKKwkJfQorCQkvKnJlYWQgbmV4dCAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRy
eShlYywgbWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hp
bGUgKGN1cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIp
OworCQl0ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUo
dGVtcCwgTV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmlndXJlX2xhbl9wb3J0
KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29u
ZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICogQ29uZmlndXJlCisJ
ICovCisJc3dfY29uZmlnID0gUkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKwkvKiBlbmFibGUgZmFz
dCBhZ2luZyAqLworCXN3X2NvbmZpZyB8PSBGQVNUX0FHSU5HOworCS8qIEVuYWJsZSBJVkwgbGVh
cm5pbmcgKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJOSU5HOworCS8qIGRpc2FibGUgaGFyZHdh
cmUgTkFUICovCisJc3dfY29uZmlnICY9IH4oSEFSRFdBUkVfTkFUKTsKKworCXN3X2NvbmZpZyB8
PSBTS0lQX0wyX0xPT0tVUF9QT1JUXzAgfCBTS0lQX0wyX0xPT0tVUF9QT1JUXzF8IE5JQ19NT0RF
OworCisJV1I0KHNjLCBTV0lUQ0hfQ09ORklHLCBzd19jb25maWcpOworCisJc3dfY29uZmlnID0g
UkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKworCW1hY19wb3J0X2NvbmZpZyA9IFJENChzYywgTUFD
X1BPUlRfMF9DT05GSUcpOworCisJaWYgKCEobWFjX3BvcnRfY29uZmlnICYgMHgxKSB8fCAobWFj
X3BvcnRfY29uZmlnICYgMHgyKSkKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJMaW5rIERvd25cbiIp
OworCWVsc2UKKwkJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0
YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KQoreworCXVpbnQzMl90IHZhbDsK
Kwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCAwKSk7CisJV1I0KHNj
LCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8
ICgocG9ydDApICYgMHgwNyk7CisJV1I0KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwg
PSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCA0KSk7CisJV1I0KHNjLCBWTEFO
X1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgoKHBv
cnQxKSAmIDB4MDcpIDw8IDQpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisKKwl2
YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCA4KSk7CisJV1I0KHNjLCBW
TEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgo
KGNwdSkgJiAweDA3KSA8PCA4KTsKKwlXUjQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCit9
CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCitzZXRfdmxhbl92
aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCWNvbnN0IHVpbnQzMl90IHJl
Z3NbXSA9IHsKKwkJVkxBTl9WSURfMF8xLAorCQlWTEFOX1ZJRF8wXzEsCisJCVZMQU5fVklEXzJf
MywKKwkJVkxBTl9WSURfMl8zLAorCQlWTEFOX1ZJRF80XzUsCisJCVZMQU5fVklEXzRfNSwKKwkJ
VkxBTl9WSURfNl83LAorCQlWTEFOX1ZJRF82XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9
IHsKKwkJVkxBTjBfVklELAorCQlWTEFOMV9WSUQsCisJCVZMQU4yX1ZJRCwKKwkJVkxBTjNfVklE
LAorCQlWTEFONF9WSUQsCisJCVZMQU41X1ZJRCwKKwkJVkxBTjZfVklELAorCQlWTEFON19WSUQK
Kwl9OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdmlkOworCisJcmVn
ID0gcmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYgKHZsYW4gJiAxKSB7CisJ
CXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbCAmICh+KDB4RkZGIDw8IDAp
KSk7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbHwoKHZpZCAmIDB4
RkZGKSA8PCAwKSk7CisJfSBlbHNlIHsKKwkJdmFsID0gUkQ0KHNjLCByZWcpOworCQlXUjQoc2Ms
IHJlZywgdmFsICYgKH4oMHhGRkYgPDwgMTIpKSk7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJ
V1I0KHNjLCByZWcsIHZhbHwoKHZpZCAmIDB4RkZGKSA8PCAxMikpOworCX0KK30KKworc3RhdGlj
IHZvaWQKK3NldF92bGFuX21lbWJlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pCit7
CisJdW5zaWduZWQgY2hhciBzaGlmdDsKKwl1aW50MzJfdCB2YWw7CisJaW50IGdyb3VwOworCWNv
bnN0IGludCBncm91cHNbXSA9IHsKKwkJVkxBTjBfR1JPVVAsCisJCVZMQU4xX0dST1VQLAorCQlW
TEFOMl9HUk9VUCwKKwkJVkxBTjNfR1JPVVAsCisJCVZMQU40X0dST1VQLAorCQlWTEFONV9HUk9V
UCwKKwkJVkxBTjZfR1JPVVAsCisJCVZMQU43X0dST1VQCisJfTsKKworCWdyb3VwID0gZ3JvdXBz
W3ZsYW5dOworCisJc2hpZnQgPSB2bGFuKjM7CisJdmFsID0gUkQ0KHNjLCBWTEFOX01FTUJFUl9Q
T1JUX01BUCkgJiAofigweDcgPDwgc2hpZnQpKTsKKwlXUjQoc2MsIFZMQU5fTUVNQkVSX1BPUlRf
TUFQLCB2YWwpOworCXZhbCA9IFJENChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVApOworCVdSNChz
YywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7
Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGlu
dCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOworCisJaW50
IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fVEFHX1BP
UlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOworCVdSNChzYywgVkxBTl9UQUdfUE9SVF9NQVAs
IHZhbCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1RBR19QT1JUX01BUCk7CisJV1I0KHNjLCBWTEFO
X1RBR19QT1JUX01BUCwgdmFsIHwgKCh0YWcgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKK3N0YXRp
YyBpbnQKK2NvbmZpZ3VyZV9jcHVfcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwl1aW50
MzJfdCBjcHVfcG9ydF9jb25maWc7CisJaW50IGk7CisKKwljcHVfcG9ydF9jb25maWcgPSBSRDQo
c2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLypTQSBsZWFybmluZyBEaXNhYmxlICovCisJY3B1X3Bv
cnRfY29uZmlnIHw9IChTQV9MRUFSTklOR19ESVNBQkxFKTsKKwkvKm9mZnNldCA0Ynl0ZSArMiAq
LworCWNwdV9wb3J0X2NvbmZpZyAmPSB+KDEgPDwgMzEpOworCisJV1I0KHNjLCBDUFVfUE9SVF9D
T05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShz
YywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCSAgICBTVEFUSUNfRU5UUlksIFZMQU4wX0dST1VQ
LAorCQkgICAgdmxhbjBfbWFjKSkKKwkJcmV0dXJuICgxKTsKKworCXNldF9wdmlkKHNjLCBQT1JU
MF9QVklELCBQT1JUMV9QVklELCBDUFVfUE9SVF9QVklEKTsKKworCWZvciAoaT0wOyBpPDg7IGkr
KykgeworCQlzZXRfdmxhbl92aWQoc2MsIGkpOworCQlzZXRfdmxhbl9tZW1iZXIoc2MsIGkpOwor
CQlzZXRfdmxhbl90YWcoc2MsIGkpOworCX0KKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdCBz
dGF0dXMgc291cmNlcyAqLworCVdSNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOwor
CisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlXUjQoc2MsIElOVEVS
UlVQVF9TVEFUVVMsIDB4MDAwMDFGRkYpOworCisJV1I0KHNjLCBUU19ETUFfQ09OVFJPTCwgMCk7
CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj
IGludAoraGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVz
ID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5
X3R5cGUoc2MpOworCWlmIChnd19waHlfdHlwZSAhPSBJQ19QTFVTX1BIWSkgeworCQlkZXZpY2Vf
cHJpbnRmKHNjLT5kZXYsICJQSFkgdHlwZSBpcyBub3QgcmVjb2duaXplZCAoJWQpXG4iLAorCQkg
ICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmlndXJl
X2xhbl9wb3J0KHNjLCBnd19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vf
c29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCS8qIGludmFsaWQg
YWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRyeSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5
KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dS
T1VQLAorCQkgICAgbWFjKTsKKwltZW1jcHkodmxhbjBfbWFjLCBtYWMsIEVUSEVSX0FERFJfTEVO
KTsKKworCXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJ
CSAgICBTVEFUSUNfRU5UUlksIFZMQU4wX0dST1VQLAorCQkgICAgbWFjKTsKK30KKworc3RhdGlj
IHZvaWQKK2VjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQor
eworCW1lbWNweSh2bGFuMF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21hY19h
ZGRyZXNzKHNjLCBlYWRkciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKiBUT0RPOiB0aGUgZGV2
aWNlIGRvZXNuJ3QgaGF2ZSBNQUMsCisgKiBzaG91bGQgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBz
dG9yZWQgaW4gRkxBU0gKKyAqLworc3RhdGljIGludAorZWNlX2dldF9tYWMoc3RydWN0IGVjZV9z
b2Z0YyAqc2MsIHVfY2hhciAqZWFkZHIpCit7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKKy8qdmVy
c2lvbiBmb3Igb25lIHNlZ21lbnQgb25seSovCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcnhfbG9j
a2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpCit7CisJc3RydWN0IGlmbmV0ICpp
ZnAgPSBzYy0+aWZwOworCXN0cnVjdCByeF9kZXNjX2luZm8gKnJ4ZGVzYzsKKworCXVpbnQzMl90
IHN0YXR1czsKKworCWludCBmc3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IHJ4Y291bnQ7CisJ
aW50IGk7CisJaW50IGlkeDsKKwlzdHJ1Y3QgbWJ1ZiAqbWI7CisJZXRoX3J4X2Rlc2NfdCAqZGVz
YzsKKworCWZzc2RfY3VyciA9IFJENChzYywgRlNfREVTQ1JJUFRPUl9QT0lOVEVSKTsKKworCWZz
c2QgPSAoZnNzZF9jdXJyIC0gKHVpbnQzMl90KXNjLT5yaW5nX3BhZGRyX3J4KT4+NDsKKworCWRl
c2MgPSBzYy0+cnhfZGVzY1tzYy0+bGFzdF9yeF0uZGVzYzsKKworCS8qcHJlcGFyZSB0byByZWFk
IHRoZSBkYXRhIGluIHRoZSByaW5nKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5n
X3J4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFE
IHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCWlmIChmc3NkID4gc2MtPmxhc3RfcngpCisJ
CXJ4Y291bnQgPSBmc3NkIC0gc2MtPmxhc3Rfcng7CisJZWxzZSBpZiAoZnNzZCA8IHNjLT5sYXN0
X3J4KQorCQlyeGNvdW50ID0gKEVDRV9NQVhfUlhfQlVGRkVSUyAtIHNjLT5sYXN0X3J4KSArIGZz
c2Q7CisJZWxzZSB7CisJCWlmIChkZXNjLT5jb3duID09IDApCisJCQlyZXR1cm47CisJCWVsc2UK
KwkJCXJ4Y291bnQgPSBFQ0VfTUFYX1JYX0JVRkZFUlM7CisJfQorCisJZm9yIChpPSAwOyBpPHJ4
Y291bnQ7IGkrKykgeworCQkvKiBHZXQgc3RhdHVzICovCisJCXN0YXR1cyA9IGRlc2MtPmNvd247
CisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJaWR4ID0gc2MtPmxhc3Rfcng7CisJCXJ4
ZGVzYyA9ICZzYy0+cnhfZGVzY1tpZHhdOworCQltYiA9IHJ4ZGVzYy0+YnVmZjsKKworCQlpZiAo
ZGVzYy0+bGVuZ3RoIDwgRVRIRVJfTUlOX0xFTiAtIEVUSEVSX0NSQ19MRU4gfHwKKwkJICAgIGRl
c2MtPmxlbmd0aCA+IEVUSEVSX01BWF9MRU4gLSBFVEhFUl9DUkNfTEVOICsKKwkJICAgIEVUSEVS
X1ZMQU5fRU5DQVBfTEVOKSB7CisJCQlpZnAtPmlmX2llcnJvcnMrKzsKKwkJCWRlc2MtPmNvd24g
PSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJLypwcm9jZXNzIG5leHQg
cGFja2V0Ki8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGVjZV9uZXdfcnhidWYoc2MsIHJ4
ZGVzYykhPTApIHsKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCQkJZGVzYy0+Y293biA9IDA7CisJ
CQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUyAtIDI7CisJCQlicmVhazsKKwkJfQorCisJCS8qKgor
CQkgKiB0aGUgZGV2aWNlIHdpbGwgd3JpdGUgdG8gWCsyIFNvIHdlIG5lZWQgdG8gYWRqdXN0CisJ
CSAqIHRoaXMgYWZ0ZXIgdGhlIHBhY2tldCBpcyByZWNlaXZlZC4KKwkJICovCisKKwkJbWItPm1f
ZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVuID0gZGVzYy0+bGVuZ3Ro
OworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9wa3RoZHIucmN2aWYgPSBp
ZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENTVU0pICE9IDApIHsKKwkJ
CS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFkZXNjLT5sNGYpICAmJiAo
ZGVzYy0+cHJvdCE9MykpIHsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9mbGFncyB8PSBDU1VNX0lQ
X0NIRUNLRUQ7CisJCQkJbWItPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0gQ1NVTV9JUF9WQUxJRDsK
KwkJCQltYi0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMHhmZmZmOworCQkJfQorCQl9CisJCUVDRV9S
WFVOTE9DSyhzYyk7CisJCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtYik7CisJCUVDRV9SWExPQ0so
c2MpOworCisJCWRlc2MtPmNvd24gPSAwOworCQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUy0yOwor
CisJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJCQkJc2MtPmRtYW1hcF9y
aW5nX3J4LAorCQkJCUJVU19ETUFTWU5DX1BSRVJFQUQgfCBCVVNfRE1BU1lOQ19QUkVXUklURSk7
CisKKwkJaWYgKHNjLT5sYXN0X3J4PT1FQ0VfTUFYX1JYX0JVRkZFUlMtMSkKKwkJCXNjLT5sYXN0
X3J4ID0gMDsKKwkJZWxzZQorCQkJc2MtPmxhc3RfcngrKzsKKworCQlkZXNjID0gc2MtPnJ4X2Rl
c2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJfQorCisJLyogc3luYyB1cGRhdGVkIGZsYWdzICovCisJ
YnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRtYW1hcF9yaW5n
X3J4LAorCSAgICBCVVNfRE1BU1lOQ19QUkVSRUFEIHwgQlVTX0RNQVNZTkNfUFJFV1JJVEUpOwor
CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGlu
dCBwZW5kaW5nIF9fdW51c2VkKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVD
RV9SWExPQ0soc2MpOworCWVjZV9pbnRyX3J4X2xvY2tlZChzYywgLTEpOworCUVDRV9SWFVOTE9D
SyhzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfaW50cih2b2lkICp4c2MpCit7CisJc3RydWN0
IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJ
aWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkgeworCQlXUjQo
c2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXRhc2txdWV1ZV9lbnF1
ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCisJaWYgKCFJRlFfRFJWX0lTX0VN
UFRZKCZpZnAtPmlmX3NuZCkpCisJCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5z
Y190eF90YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2Mp
Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBz
Yy0+aWZwOworCWludCBzdGF0OworCisJc3RhdCA9IFJENChzYywgSU5URVJSVVBUX1NUQVRVUyk7
CisKKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Ry
dl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgIT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9N
QVNLKSE9MCkKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCX0KK30KKworc3RhdGljIHZvaWQKK2Vj
ZV9jbGVhbnVwX2xvY2tlZChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVzY190
ICpkZXNjOworCisJaWYgKHNjLT50eF9jb25zPT1zYy0+dHhfcHJvZCkgcmV0dXJuOworCisJLypw
cmVwYXJlIHRvIHJlYWQgdGhlIHJpbmcgKG93bmVyIGJpdCkqLworCWJ1c19kbWFtYXBfc3luYyhz
Yy0+ZG1hdGFnX3JpbmdfdHgsCisJICAgIHNjLT5kbWFtYXBfcmluZ190eCwKKwkgICAgQlVTX0RN
QVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCisJd2hpbGUgKHNjLT50
eF9jb25zIT1zYy0+dHhfcHJvZCkgeworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNd
LmRlc2M7CisJCWlmIChkZXNjLT5jb3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8g
KnRkID0gJihzYy0+dHhfZGVzY1tzYy0+dHhfY29uc10pOworCQkJLyp3ZSBhcmUgZmluaXNoZWQg
d2l0aCB0aGlzIGRlc2NyaXB0b3IqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0
YV90eCwgdGQtPmRtYW1hcCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJLyph
bmQgdW5sb2FkLCBzbyB3ZSBjYW4gcmV1c2UgKi8KKwkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5k
bWF0YWdfZGF0YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZmKTsKKwkJCXRk
LT5idWZmID0gMDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkgJSBFQ0VfTUFY
X1RYX0JVRkZFUlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworfQorCitzdGF0
aWMgdm9pZAorZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2Vk
KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQTE9DSyhzYyk7
CisJZWNlX2NsZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhzYyk7Cit9CisK
K3N0YXRpYyB2b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0
YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlmICgoaWZwLT5p
Zl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyp0aGlzIHNob3VsZCBu
b3QgaGFwcGVuLCBzdG9wIERNQSovCisJCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQly
ZXR1cm47CisJfQorCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19jbGVhbnVw
X3Rhc2spOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcWYodm9pZCAqeHNjKQoreworCXN0
cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsK
KwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8q
dGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc3RvcCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05U
Uk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZz
Yy0+c2NfaW50cl90YXNrKTsKKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoK
KyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vp
bml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXVp
bnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1X3BvcnRfY29uZmlnOworCXVpbnQzMl90IG1h
Y19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7CisJCWNmZ19yZWcgPSBSRDQoc2MsIEJJU1Rf
UkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2ZnX3JlZyAmICgxPDwxNykpKQorCQkJYnJlYWs7CisJ
CURFTEFZKDEwMCk7CisJfQorCS8qIHNldCB0byBkZWZhdWx0IHZhbHVlcyAqLworCVdSNChzYywg
U1dJVENIX0NPTkZJRywgMHgwMDdBQTdBMSk7CisJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywg
MHgwMDQyM0QwMCk7CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgMHgwMDQyM0Q4MCk7CisJ
V1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIDB4MDA0QzAwMDApOworCisJaGFyZHdhcmVfaW5pdChz
Yyk7CisKKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsKKwlt
YWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7IC8qIEVuYWJsZSBQb3J0IDAgKi8K
KwlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJY3B1X3Bv
cnRfY29uZmlnID0gUkQ0KHNjLCBDUFVfUE9SVF9DT05GSUcpOworCS8qIGVuYWJsZSBDUFUgKi8K
KwljcHVfcG9ydF9jb25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCVdSNChzYywgQ1BVX1BPUlRf
Q09ORklHLCBjcHVfcG9ydF9jb25maWcpOworCisJLyoKKwkgKiBTZXQgJ3J1bm5pbmcnIGZsYWcs
IGFuZCBjbGVhciBvdXRwdXQgYWN0aXZlIGZsYWcKKwkgKiBhbmQgYXR0ZW1wdCB0byBzdGFydCB0
aGUgb3V0cHV0CisJICovCisJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9SVU5OSU5HOwor
CWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisKKwltaWkgPSBkZXZpY2Vf
Z2V0X3NvZnRjKHNjLT5taWlidXMpOworCW1paV9wb2xsc3RhdChtaWkpOworCS8qIGVuYWJsZSBk
bWEgKi8KKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNhbGxvdXRfcmVzZXQoJnNj
LT50aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Vj
ZV9lbmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVj
dCBpZm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwli
dXNfZG1hbWFwX3QgbWFwcDsKKwlpbnQgZXJyb3I7CisJaW50IHNlZzsKKwlpbnQgbnNlZ3M7CisJ
aW50IGRlc2Nfbm87CisJZXRoX3R4X2Rlc2NfdCAqZGVzYyA9IDA7CisKKwlpbnQgY3N1bV9mbGFn
czsKKworCWlmcCA9IHNjLT5pZnA7CisKKwkvKiBGZXRjaCB1bnVzZWQgbWFwICovCisJbWFwcCA9
IHNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kbWFtYXA7CisKKwllcnJvciA9IGJ1c19kbWFtYXBf
bG9hZF9tYnVmX3NnKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCwKKwkJICAgIG0wLCBzZWdzLCAm
bnNlZ3MsCisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWJ1
c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJCXJldHVybiAoKGVy
cm9yICE9IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2MtPmRlc2NfdHhbc2Mt
PmRlc2NfY3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjID0gZGVzYzsK
KwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nfbm8gPSBzYy0+ZGVz
Y19jdXJyX3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJaWYg
KGRlc2MtPmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRv
ciBpcyBzdGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJZGVzYy0+bGVu
Z3RoID0gc2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBzZWdzW3NlZ10uZHNf
YWRkcjsKKworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsKKwkJfSBlbHNlIHsK
KwkJCWRlc2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnPT1uc2Vncy0xKSB7CisJCQlkZXNjLT5s
cyA9IDE7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5scyA9IDA7CisJCX0KKworCQljc3VtX2ZsYWdz
ID0gbTAtPm1fcGt0aGRyLmNzdW1fZmxhZ3M7CisKKwkJZGVzYy0+ZnIgPSAgMTsKKwkJZGVzYy0+
cG1hcCA9ICAxOworCQlkZXNjLT5pbnN2ID0gIDA7CisJCWRlc2MtPmljbyA9IDA7CisJCWRlc2Mt
PnRjbyA9IDA7CisJCWRlc2MtPnVjbyA9IDA7CisJCWRlc2MtPmludGVycnVwdCA9IDE7CisKKwkJ
aWYgKGNzdW1fZmxhZ3MgJiBDU1VNX0lQKSB7CisJCQlkZXNjLT5pY28gPSAxOworCQkJaWYgKGNz
dW1fZmxhZ3MgJiBDU1VNX1RDUCkKKwkJCQlkZXNjLT50Y28gPSAxOworCQkJaWYgKGNzdW1fZmxh
Z3MgJiBDU1VNX1VEUCkKKwkJCQlkZXNjLT51Y28gPSAxOworCQl9CisKKwkJZGVzYysrOworCQlz
Yy0+ZGVzY19jdXJyX3R4ID0gKHNjLT5kZXNjX2N1cnJfdHgrMSkgJSBFQ0VfTUFYX1RYX0JVRkZF
UlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4PT0wKSB7CisJCQlkZXNjID0gKGV0aF90eF9kZXNj
X3QgKikmKHNjLT5kZXNjX3R4WzBdKTsKKwkJfQorCX0KKworCWRlc2MgPSBzYy0+dHhfZGVzY1tz
Yy0+dHhfcHJvZF0uZGVzYzsKKworCXNjLT50eF9wcm9kID0gKHNjLT50eF9wcm9kKzEpICUgRUNF
X01BWF9UWF9CVUZGRVJTOworCisJLyogYWZ0ZXIgYWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdl
IHNldCB0aGUgZmxhZyB0byBzdGFydCB0aGUKKwkgKiBzZW5kaW5nIHByb2Nlc3MKKwkgKi8KKwlm
b3IgKHNlZyA9IDA7IHNlZyA8IG5zZWdzOyBzZWcrKykgeworCQlkZXNjLT5jb3duID0gMDsKKwkJ
ZGVzYysrOworCQlkZXNjX25vID0gKGRlc2Nfbm8rMSkgJSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJ
CWlmIChkZXNjX25vPT0wKQorCQkJZGVzYyA9IChldGhfdHhfZGVzY190ICopJihzYy0+ZGVzY190
eFswXSk7CisJfQorCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0YV90eCwgbWFwcCwg
QlVTX0RNQVNZTkNfUFJFV1JJVEUpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBkZXF1ZXUg
cGFja2V0cyBhbmQgdHJhbnNtaXQKKyAqLworc3RhdGljIHZvaWQKK2VjZXN0YXJ0X2xvY2tlZChz
dHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbWJ1
ZiAqbTA7CisJdWludDMyX3QgcXVldWVkID0gMDsKKworCXNjID0gaWZwLT5pZl9zb2Z0YzsKKwlp
ZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgKElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElW
RSkpICE9CisJICAgIElGRl9EUlZfUlVOTklORykKKwkJcmV0dXJuOworCisJYnVzX2RtYW1hcF9z
eW5jKHNjLT5kbWF0YWdfcmluZ190eCwKKwkgICAgc2MtPmRtYW1hcF9yaW5nX3R4LAorCSAgICBC
VVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RXUklURSk7CisKKwlmb3IgKDs7
KSB7CisJCS8qIEdldCBwYWNrZXQgZnJvbSB0aGUgcXVldWUgKi8KKwkJSUZfREVRVUVVRSgmaWZw
LT5pZl9zbmQsIG0wKTsKKwkJaWYgKG0wID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGVjZV9l
bmNhcChzYywgbTApKSB7CisJCQlJRl9QUkVQRU5EKCZpZnAtPmlmX3NuZCwgbTApOworCQkJaWZw
LT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZFOworCQkJYnJlYWs7CisJCX0KKwkJcXVl
dWVkKys7CisJCUJQRl9NVEFQKGlmcCwgbTApOworCX0KKwlpZiAocXVldWVkKSB7CisJCS8qc3lu
YyB0aGUgcmluZyovCisJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfdHgsIHNjLT5k
bWFtYXBfcmluZ190eCwKKwkJICAgIEJVU19ETUFTWU5DX1BSRVJFQUR8QlVTX0RNQVNZTkNfUFJF
V1JJVEUpOworCQlXUjQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsK
KwlFQ0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVDRV9VTkxPQ0soc2MpOwor
fQorCitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3Vu
dXNlZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3RydWN0IGlmbmV0ICopYXJn
OworCWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZu
ZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNF
X1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsK
K30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4g
YmUgY2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0
aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmlnOworCisJV1I0KHNjLCBU
U19ETUFfQ09OVFJPTCwgMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisKKwlpZiAo
aWZwKQorCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+KElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZf
T0FDVElWRSk7CisKKwljYWxsb3V0X3N0b3AoJnNjLT50aWNrX2NoKTsKKworCS8qRGlzYWJsZSBQ
b3J0IDAgKi8KKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsK
KwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJV1I0KHNjLCBNQUNfUE9SVF8w
X0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNf
cG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25m
aWcgfD0gKFBPUlRfRElTQUJMRSk7CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgbWFjX3Bv
cnRfY29uZmlnKTsKKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdCBzdGF0dXMgc291cmNlcyAq
LworCVdSNChzYywgSU5URVJSVVBUX01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogY2xlYXIgcHJl
dmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIDB4
MDAwMDFGRkYpOworCisJV1I0KHNjLCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25m
aWcpOworCVdSNChzYywgQ1BVX1BPUlRfQ09ORklHLCBpbml0aWFsX2NwdV9jb25maWcpOworCVdS
NChzYywgTUFDX1BPUlRfMF9DT05GSUcsIGluaXRpYWxfcG9ydDBfY29uZmlnKTsKKwlXUjQoc2Ms
IE1BQ19QT1JUXzFfQ09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNf
ZW50cmllcyhzYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1Y3QgZWNl
X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlpZnAtPmlm
X2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklG
Rl9EUlZfT0FDVElWRTsKKwkvKmVuYWJsZSBwb3J0IDAqLworCVdSNChzYywgUE9SVF8wX0NPTkZJ
RywKKwkgICAgUkQ0KHNjLCBQT1JUXzBfQ09ORklHKSAmIH4oUE9SVF9ESVNBQkxFKSk7CisJV1I0
KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJP
TCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2MpOwor
fQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlz
dHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVsdGlhZGRyCSppZm1hOworCXVpbnQzMl90
IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5pZnA7CisKKwljbGVhcl9tYWNfZW50cmll
cyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgaWZwLT5pZl9m
bGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0X2NvbmZpZyA9IFJENChzYywgTUFDX1BP
UlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX0JST0FEQ0FTVF9Q
QUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQp
OworCQlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCQlyZXR1
cm47CisJfQorCWlmX21hZGRyX3Jsb2NrKGlmcCk7CisJVEFJTFFfRk9SRUFDSChpZm1hLCAmaWZw
LT5pZl9tdWx0aWFkZHJzLCBpZm1hX2xpbmspIHsKKwkJaWYgKGlmbWEtPmlmbWFfYWRkci0+c2Ff
ZmFtaWx5ICE9IEFGX0xJTkspCisJCQljb250aW51ZTsKKwkJYWRkX21hY19lbnRyeShzYywKKwkJ
ICAgIExMQUREUigoc3RydWN0IHNvY2thZGRyX2RsICopaWZtYS0+aWZtYV9hZGRyKSk7CisJfQor
CWlmX21hZGRyX3J1bmxvY2soaWZwKTsKK30KKworc3RhdGljIGludAorZWNlaW9jdGwoc3RydWN0
IGlmbmV0ICppZnAsIHVfbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJc3RydWN0
IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICopZGF0YTsKKwlpbnQgbWFzaywgZXJyb3IgPSAw
OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJRUNFX0xPQ0soc2Mp
OworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApID09IDAgJiYKKwkJICAgIGlmcC0+aWZf
ZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSB7CisJCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+
SUZGX0RSVl9SVU5OSU5HOworCQkJZWNlc3RvcChzYyk7CisJCX0gZWxzZSB7CisJCQkvKiByZWlu
aXRpYWxpemUgY2FyZCBvbiBhbnkgcGFyYW1ldGVyIGNoYW5nZSAqLworCQkJaWYgKChpZnAtPmlm
X2ZsYWdzICYgSUZGX1VQKSAmJgorCQkJICAgICEoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJW
X1JVTk5JTkcpCisJCQkgICAgKQorCQkJCWVjZV9yZXN0YXJ0KHNjKTsKKwkJfQorCQlFQ0VfVU5M
T0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NBRERNVUxUSToKKwljYXNlIFNJT0NERUxN
VUxUSToKKwkJRUNFX0xPQ0soc2MpOworCQlzZXRfZmlsdGVyKHNjKTsKKwkJRUNFX1VOTE9DSyhz
Yyk7CisJCWJyZWFrOworCisJY2FzZSBTSU9DU0lGTUVESUE6CisJY2FzZSBTSU9DR0lGTUVESUE6
CisJCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7CisJCWVycm9yID0gaWZtZWRp
YV9pb2N0bChpZnAsIGlmciwgJm1paS0+bWlpX21lZGlhLCBjbWQpOworCQlicmVhazsKKwljYXNl
IFNJT0NTSUZDQVA6CisJCW1hc2sgPSBpZnAtPmlmX2NhcGVuYWJsZSBeIGlmci0+aWZyX3JlcWNh
cDsKKwkJaWYgKG1hc2sgJiBJRkNBUF9WTEFOX01UVSkgeworCQkJRUNFX0xPQ0soc2MpOworCQkJ
RUNFX1VOTE9DSyhzYyk7CisJCX0KKwlkZWZhdWx0OgorCQllcnJvciA9IGV0aGVyX2lvY3RsKGlm
cCwgY21kLCBkYXRhKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0
aWMgdm9pZAorZWNlX2NoaWxkX2RldGFjaGVkKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQp
Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKKwlpZiAoY2hpbGQgPT0gc2MtPm1paWJ1cykKKwkJc2MtPm1paWJ1cyA9IE5VTEw7Cit9CisK
Ky8qCisgKiBNSUkgYnVzIHN1cHBvcnQgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9t
aWlidXNfcmVhZHJlZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcpCit7CisJc3RydWN0
IGVjZV9zb2Z0YyAqc2M7CisJLypvbmx5IG9uZSBwaHkqLworCWlmIChwaHk+MCkKKwkJcmV0dXJu
ICgwKTsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlyZXR1cm4gKHBoeV9yZWFkKHNj
LCBwaHksIHJlZykpOworfQorCitzdGF0aWMgaW50CitlY2VfbWlpYnVzX3dyaXRlcmVnKGRldmlj
ZV90IGRldiwgaW50IHBoeSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJc3RydWN0IGVjZV9zb2Z0
YyAqc2M7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJcGh5X3dyaXRlKHNjLCBwaHks
IHJlZywgZGF0YSk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBl
Y2VfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2
aWNlX3Byb2JlLAllY2VfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAllY2VfYXR0
YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZWNlX2RldGFjaCksCisKKwkvKiBCdXMg
aW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19jaGlsZF9kZXRhY2hlZCwJZWNlX2NoaWxkX2Rl
dGFjaGVkKSwKKworCS8qIE1JSSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QobWlpYnVzX3JlYWRy
ZWcsCWVjZV9taWlidXNfcmVhZHJlZyksCisJREVWTUVUSE9EKG1paWJ1c193cml0ZXJlZywJZWNl
X21paWJ1c193cml0ZXJlZyksCisKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90IGVj
ZV9kcml2ZXIgPSB7CisJImVjZSIsCisJZWNlX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBlY2Vf
c29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShlY2UsIGVjb25hYXJtLCBlY2VfZHJpdmVyLCBl
Y2VfZGV2Y2xhc3MsIDAsIDApOworRFJJVkVSX01PRFVMRShtaWlidXMsIGVjZSwgbWlpYnVzX2Ry
aXZlciwgbWlpYnVzX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9ERVBFTkQoZWNlLCBtaWlidXMs
IDEsIDEsIDEpOworTU9EVUxFX0RFUEVORChlY2UsIGV0aGVyLCAxLCAxLCAxKTsKSW5kZXg6IGFy
bS9lY29uYS9pZl9lY2VyZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvaWZfZWNlcmVnLmgJ
KHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvaWZfZWNlcmVnLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTU0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSwgWW9oYW5lcyBOdWdyb2hv
IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICoKKyAqICRGcmVlQlNEICQKKyAqLworCisjaWZuZGVmCV9JRl9FQ0VSRUdfSAorI2Rl
ZmluZQlfSUZfRUNFUkVHX0gKKworI2RlZmluZQlFVEhfQ0ZHCQkweDA4CisjZGVmaW5lCUVUSF9D
RkdfUk1JSQkJKDEgPDwgMTUpCisjZGVmaW5lCVBIWV9DT05UUk9MCQkweDAwCisjZGVmaW5lCVBI
WV9SV19PSwkJKDE8PDE1KQorCisjZGVmaW5lCVBIWV9BRERSRVNTKHgpCQkoKHgpICYgMHgxKQor
I2RlZmluZQlQSFlfUkVHSVNURVIocikJKCgocikgJiAweDFGKSA8PCA4KQorI2RlZmluZQlQSFlf
V1JJVEVfQ09NTUFORAkoMTw8MTMpCisjZGVmaW5lCVBIWV9SRUFEX0NPTU1BTkQJKDE8PDE0KQor
I2RlZmluZQlQSFlfR0VUX0RBVEEoZCkJKCgoZCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZQlQ
SFlfREFUQShkKQkJKCgoZCkgJiAweEZGRkYpIDw8IDE2KQorCisjZGVmaW5lCVBPUlRfMF9DT05G
SUcJCTB4MDgKKworI2RlZmluZQlBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMAkweDA1MAorI2Rl
ZmluZQlBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMQkweDA1NAorI2RlZmluZQlBUkxfVEFCTEVf
QUNDRVNTX0NPTlRST0xfMgkweDA1OAorCisjZGVmaW5lCUFSTF9XUklURV9DT01NQU5ECSgxPDwz
KQorI2RlZmluZQlBUkxfTE9PS1VQX0NPTU1BTkQJKDE8PDIpCisjZGVmaW5lCUFSTF9DT01NQU5E
X0NPTVBMRVRFCSgxKQorCisKKyNkZWZpbmUJUE9SVDAJCQkoMSA8PCAwKQorI2RlZmluZQlQT1JU
MQkJCSgxIDw8IDEpCisjZGVmaW5lCUNQVV9QT1JUCQkoMSA8PCAyKQorCisKKyNkZWZpbmUJVkxB
TjBfR1JPVVBfSUQJCSgwKQorI2RlZmluZQlWTEFOMV9HUk9VUF9JRAkJKDEpCisjZGVmaW5lCVZM
QU4yX0dST1VQX0lECQkoMikKKyNkZWZpbmUJVkxBTjNfR1JPVVBfSUQJCSgzKQorI2RlZmluZQlW
TEFONF9HUk9VUF9JRAkJKDQpCisjZGVmaW5lCVZMQU41X0dST1VQX0lECQkoNSkKKyNkZWZpbmUJ
VkxBTjZfR1JPVVBfSUQJCSg2KQorI2RlZmluZQlWTEFON19HUk9VUF9JRAkJKDcpCisKKyNkZWZp
bmUJUE9SVDBfUFZJRAkJKFZMQU4xX0dST1VQX0lEKQorI2RlZmluZQlQT1JUMV9QVklECQkoVkxB
TjJfR1JPVVBfSUQpCisjZGVmaW5lCUNQVV9QT1JUX1BWSUQJCShWTEFOMF9HUk9VUF9JRCkKKwor
I2RlZmluZQlWTEFOMF9WSUQJCSgweDExMSkKKyNkZWZpbmUJVkxBTjFfVklECQkoMHgyMjIpCisj
ZGVmaW5lCVZMQU4yX1ZJRAkJKDB4MzMzKQorI2RlZmluZQlWTEFOM19WSUQJCSgweDQ0NCkKKyNk
ZWZpbmUJVkxBTjRfVklECQkoMHg1NTUpCisjZGVmaW5lCVZMQU41X1ZJRAkJKDB4NjY2KQorI2Rl
ZmluZQlWTEFONl9WSUQJCSgweDc3NykKKyNkZWZpbmUJVkxBTjdfVklECQkoMHg4ODgpCisKKyNk
ZWZpbmUJVkxBTjBfR1JPVVAJCShQT1JUMCB8IFBPUlQxIHwgQ1BVX1BPUlQpCisjZGVmaW5lCVZM
QU4xX0dST1VQCQkoUE9SVDAgfCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjJfR1JPVVAJCShQT1JU
MSB8IENQVV9QT1JUKQorI2RlZmluZQlWTEFOM19HUk9VUAkJKDApCisjZGVmaW5lCVZMQU40X0dS
T1VQCQkoMCkKKyNkZWZpbmUJVkxBTjVfR1JPVVAJCSgwKQorI2RlZmluZQlWTEFONl9HUk9VUAkJ
KDApCisjZGVmaW5lCVZMQU43X0dST1VQCQkoMCkKKworI2RlZmluZQlTV0lUQ0hfQ09ORklHCQkw
eDAwNAorI2RlZmluZQlNQUNfUE9SVF8wX0NPTkZJRwkweDAwOAorI2RlZmluZQlNQUNfUE9SVF8x
X0NPTkZJRwkweDAwQworI2RlZmluZQlDUFVfUE9SVF9DT05GSUcJMHgwMTAKKyNkZWZpbmUJQklT
VF9SRVNVTFRfVEVTVF8wCTB4MDk0CisKKyNkZWZpbmUJRlNfRE1BX0NPTlRST0wJCTB4MTA0Cisj
ZGVmaW5lCVRTX0RNQV9DT05UUk9MCQkweDEwMAorCisjZGVmaW5lCUlOVEVSUlVQVF9NQVNLCQkw
eDA4QworI2RlZmluZQlJTlRFUlJVUFRfU1RBVFVTCTB4MDg4CisKKyNkZWZpbmUJVFNfREVTQ1JJ
UFRPUl9QT0lOVEVSCQkweDEwOAorI2RlZmluZQlUU19ERVNDUklQVE9SX0JBU0VfQUREUgkweDEx
MAorI2RlZmluZQlGU19ERVNDUklQVE9SX1BPSU5URVIJCTB4MTBDCisjZGVmaW5lCUZTX0RFU0NS
SVBUT1JfQkFTRV9BRERSCTB4MTE0CisKKworI2RlZmluZQlWTEFOX1ZJRF8wXzEJCTB4MDYwCisj
ZGVmaW5lCVZMQU5fVklEXzJfMwkJMHgwNjQKKyNkZWZpbmUJVkxBTl9WSURfNF81CQkweDA2OAor
I2RlZmluZQlWTEFOX1ZJRF82XzcJCTB4MDZDCisKKyNkZWZpbmUJVkxBTl9QT1JUX1BWSUQJCTB4
MDVDCisjZGVmaW5lCVZMQU5fTUVNQkVSX1BPUlRfTUFQCQkweDA3MAorI2RlZmluZQlWTEFOX1RB
R19QT1JUX01BUAkJMHgwNzQKKworCisjZGVmaW5lCUFTSVhfR0lHQV9QSFkJCTEKKyNkZWZpbmUJ
VFdPX1NJTkdMRV9QSFkJCTIKKyNkZWZpbmUJQUdFUkVfR0lHQV9QSFkJCTMKKyNkZWZpbmUJVlND
ODYwMV9HSUdBX1BIWQk0CisjZGVmaW5lCUlDX1BMVVNfUEhZCQk1CisjZGVmaW5lCU5PVF9GT1VO
RF9QSFkJCSgtMSkKKworI2RlZmluZQlNQVhfUEFDS0VUX0xFTgkJKDE1MzYpCisKKyNkZWZpbmUJ
SU5WQUxJRF9FTlRSWQkJMAorI2RlZmluZQlORVdfRU5UUlkJCTB4MQorI2RlZmluZQlTVEFUSUNf
RU5UUlkJCTB4NworCisvKm1hc2sgc3RhdHVzIGV4Y2VwdCBmb3IgbGluayBjaGFuZ2UqLworI2Rl
ZmluZQlFUlJPUl9NQVNLCQkweEZGRkZGRjdGCisKKy8qaGFyZHdhcmUgaW50ZXJmYWNlIGZsYWdz
Ki8KKworI2RlZmluZQlGQVNUX0FHSU5HCQkoMHhmKQorI2RlZmluZQlJVkxfTEVBUk5JTkcJCSgw
eDEgPDwgMjIpCisvKmhhcmR3YXJlIE5BVCBhY2NlbGVyYXRvciovCisjZGVmaW5lCUhBUkRXQVJF
X05BVAkJKDB4MSA8PCAyMykKKy8qYWdpbmcJCXRpbWUJCXNldHRpbmcqLworCisvKnNraXAgbG9v
a3VwKi8KKyNkZWZpbmUJU0tJUF9MMl9MT09LVVBfUE9SVF8xCSgxIDw8IDI5KQorI2RlZmluZQlT
S0lQX0wyX0xPT0tVUF9QT1JUXzAJKDEgPDwgMjgpCisKKyNkZWZpbmUJTklDX01PREUJCSgxIDw8
IDMwKQorI2RlZmluZQlQT1JUX0RJU0FCTEUJCSgxIDw8IDE4KQorI2RlZmluZQlTQV9MRUFSTklO
R19ESVNBQkxFCQkoMSA8PCAxOSkKKyNkZWZpbmUJRElTQUJMRV9CUk9BRENBU1RfUEFDS0VUCSgx
IDw8IDI3KQorI2RlZmluZQlESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQJKCAxIDw8IDI2KQorCisj
ZW5kaWYKSW5kZXg6IGFybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt
L2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9jZmlfYnVz
X2Vjb25hLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
CisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZz
Lmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNp
bmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lz
L2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5o
PgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1
ZGUgPHN5cy9zeXNjdGwuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisKKyNpbmNsdWRl
IDxkZXYvY2ZpL2NmaV92YXIuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4K
KyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+CisKK3N0YXRpYyBpbnQKK2NmaV9lY29u
YV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJcmV0dXJuIGNmaV9wcm9iZShkZXYpOworfQorCitz
dGF0aWMgZGV2aWNlX21ldGhvZF90IGNmaV9lY29uYV9tZXRob2RzW10gPSB7CisJLyogZGV2aWNl
IGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQljZmlfZWNvbmFfcHJvYmUp
LAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAljZmlfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2
aWNlX2RldGFjaCwJY2ZpX2RldGFjaCksCisKKwl7MCwgMH0KK307CisKK3N0YXRpYyBkcml2ZXJf
dCBjZmlfZWNvbmFfZHJpdmVyID0geworCWNmaV9kcml2ZXJfbmFtZSwKKwljZmlfZWNvbmFfbWV0
aG9kcywKKwlzaXplb2Yoc3RydWN0IGNmaV9zb2Z0YyksCit9OworRFJJVkVSX01PRFVMRShjZmks
IGVjb25hYXJtLCBjZmlfZWNvbmFfZHJpdmVyLCBjZmlfZGV2Y2xhc3MsIDAsIDApOwpJbmRleDog
YXJtL2Vjb25hL3RpbWVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3RpbWVyLmMJKHJldmlz
aW9uIDApCisrKyBhcm0vZWNvbmEvdGltZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzIg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0Bn
bWFpbC5jb20+LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRCAkIik7CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8
c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwu
aD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3RpbWV0Yy5oPgorI2luY2x1ZGUgPHN5
cy93YXRjaGRvZy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9jcHUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CisjaW5jbHVkZSA8bWFjaGluZS9p
bnRyLmg+CisKKyNpbmNsdWRlICJlY29uYV9yZWcuaCIKKyNpbmNsdWRlICJlY29uYV92YXIuaCIK
KworI2RlZmluZQlJTklUSUFMX1RJTUVDT1VOVEVSCSgweGZmZmZmZmZmKQorCitzdGF0aWMgaW50
IHRpbWVyc19pbml0aWFsaXplZCA9IDA7CisKKyNkZWZpbmUJSFoJMTAwCisKK2V4dGVybiB1bnNp
Z25lZCBpbnQgQ1BVX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGludCBBSEJfY2xvY2s7CitleHRl
cm4gdW5zaWduZWQgaW50IEFQQl9jbG9jazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJf
Y291bnRlciA9IDA7CisKK3N0cnVjdCBlY190aW1lcl9zb2Z0YyB7CisJc3RydWN0IHJlc291cmNl
CSoJdGltZXJfcmVzWzNdOworCWJ1c19zcGFjZV90YWdfdAkJdGltZXJfYnN0OworCWJ1c19zcGFj
ZV9oYW5kbGVfdAl0aW1lcl9ic2g7CisJc3RydWN0IG10eAkJdGltZXJfbXR4OworfTsKKworc3Rh
dGljIHN0cnVjdCByZXNvdXJjZV9zcGVjIGVjX3RpbWVyX3NwZWNbXSA9IHsKKwl7IFNZU19SRVNf
TUVNT1JZLAkwLAlSRl9BQ1RJVkUgfSwKKwl7IFNZU19SRVNfSVJRLAkJMCwJUkZfQUNUSVZFIH0s
CisJeyBTWVNfUkVTX0lSUSwJCTEsCVJGX0FDVElWRSB9LAorCXsgLTEsIDAgfQorfTsKKworc3Rh
dGljIHVuc2lnbmVkIGVjX3RpbWVyX2dldF90aW1lY291bnQoc3RydWN0IHRpbWVjb3VudGVyICop
OworCitzdGF0aWMgc3RydWN0IHRpbWVjb3VudGVyIGVjX3RpbWVjb3VudGVyID0geworCS50Y19n
ZXRfdGltZWNvdW50ID0gZWNfdGltZXJfZ2V0X3RpbWVjb3VudCwKKwkudGNfbmFtZSA9ICJDUFUg
VGltZXIiLAorCS8qIFRoaXMgaXMgYXNzaWduZWQgb24gdGhlIGZseSBpbiB0aGUgaW5pdCBzZXF1
ZW5jZSAqLworCS50Y19mcmVxdWVuY3kgPSAwLAorCS50Y19jb3VudGVyX21hc2sgPSB+MHUsCisJ
LnRjX3F1YWxpdHkgPSAxMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBlY190aW1lcl9zb2Z0YyAq
dGltZXJfc29mdGMgPSBOVUxMOworCitzdGF0aWMgaW5saW5lCit2b2lkIFdSNCh1bnNpZ25lZCBp
bnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlidXNfc3BhY2Vfd3JpdGVfNCh0aW1lcl9z
b2Z0Yy0+dGltZXJfYnN0LAorCQkJICB0aW1lcl9zb2Z0Yy0+dGltZXJfYnNoLCBhZGRyLCB2YWwp
OworCit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGludCBSRDQodW5zaWduZWQgaW50IGFk
ZHIpCit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQodGltZXJfc29mdGMtPnRpbWVyX2JzdCwK
KwkgICAgdGltZXJfc29mdGMtPnRpbWVyX2JzaCwgYWRkcik7Cit9CisKKyNkZWZpbmUJdVNFQ1Nf
UEVSX1RJQ0sJKDEwMDAwMDAgLyBBUEJfY2xvY2spCisjZGVmaW5lCVRJQ0tTMlVTRUNTKHgpCSgo
eCkgKiB1U0VDU19QRVJfVElDSykKKworc3RhdGljIHVuc2lnbmVkCityZWFkX3RpbWVyX2NvdW50
ZXJfbm9pbnQodm9pZCkKK3sKKwlhcm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSBS
RDQoVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4g
djsKK30KKwordm9pZAorREVMQVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVt
cDsKKwlpbnQgbnRpY2tzOworCisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7
IHVzZWMgPiAwOyB1c2VjLS0pCisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJ
CQkJOworCQlyZXR1cm47CisJfQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7
CisJbnRpY2tzID0gKCgoQVBCX2Nsb2NrLzEwMDApICogdXNlYykgLyAxMDAwKSsxMDA7CisKKwl3
aGlsZSAobnRpY2tzID4gMCkgeworCQl2YWxfdGVtcCA9IHJlYWRfdGltZXJfY291bnRlcl9ub2lu
dCgpOworCQlpZiAodmFsID4gdmFsX3RlbXApCisJCQludGlja3MgLT0gKHZhbCAtIHZhbF90ZW1w
KTsKKwkJZWxzZQorCQkJbnRpY2tzIC09ICh2YWwgKyAodGltZXJfY291bnRlciAtIHZhbF90ZW1w
KSk7CisKKwkJdmFsID0gdmFsX3RlbXA7CisJfQorCit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgor
ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldHVwX3RpbWVyKHVuc2lnbmVkIGludCBjb3VudGVy
X3ZhbHVlKQoreworCXVuc2lnbmVkIGludCBjb250cm9sX3ZhbHVlOworCXVuc2lnbmVkIGludCBt
YXNrX3ZhbHVlOworCisJY29udHJvbF92YWx1ZSA9IFJENChUSU1FUl9UTV9DUl9SRUcpOworCisJ
bWFza192YWx1ZSA9IFJENChUSU1FUl9UTV9JTlRSX01BU0tfUkVHKTsKKwlXUjQoY291bnRlcl92
YWx1ZSwgVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlXUjQoY291bnRlcl92YWx1ZSwgVElNRVJf
VE0xX0xPQURfUkVHKTsKKwlXUjQoMCwgVElNRVJfVE0xX01BVENIMV9SRUcpOworCVdSNCgwLFRJ
TUVSX1RNMV9NQVRDSDJfUkVHKTsKKworCWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjFfQ0xPQ0tf
U09VUkNFKTsKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMV9VUF9ET1dOX0NPVU5UOworCisJV1I0
KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7CisJV1I0KDAsIFRJTUVSX1RNMl9MT0FEX1JFRyk7
CisJV1I0KH4wdSwgVElNRVJfVE0yX01BVENIMV9SRUcpOworCVdSNCh+MHUsVElNRVJfVE0yX01B
VENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9DTE9DS19TT1VSQ0UpOwor
CWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjJfVVBfRE9XTl9DT1VOVCk7CisKKwltYXNrX3ZhbHVl
ICY9IH4oNjMpOworCisJV1I0KGNvbnRyb2xfdmFsdWUsIFRJTUVSX1RNX0NSX1JFRyk7CisJV1I0
KG1hc2tfdmFsdWUsIFRJTUVSX1RNX0lOVFJfTUFTS19SRUcpOworfQorCisvKgorICogRW5hYmxl
IHRpbWVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZXJfZW5hYmxlKHZvaWQpCit7CisJ
dW5zaWduZWQgaW50IGNvbnRyb2xfdmFsdWU7CisKKwljb250cm9sX3ZhbHVlID0gUkQ0KFRJTUVS
X1RNX0NSX1JFRyk7CisKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMV9PVkVSRkxPV19FTkFCTEU7
CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjFfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElN
RVIyX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMl9FTkFCTEU7CisK
KwlXUjQoY29udHJvbF92YWx1ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKwlyZXR1
cm4gUkQ0KFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7Cit9CisKKy8qCisgKiBHZXQgdGltZXIgaW50
ZXJydXB0IHN0YXR1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcmVhZF90aW1l
cl9pbnRlcnJ1cHRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIFJENChUSU1FUl9UTV9JTlRSX1NU
QVRVU19SRUcpOworfQorCisvKgorICogQ2xlYXIgdGltZXIgaW50ZXJydXB0IHN0YXR1cworICov
CitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyX3RpbWVyX2ludGVycnVwdF9zdGF0dXModW5zaWdu
ZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXR1czsKKworCWludGVy
cnVwdF9zdGF0dXMgPSAgIFJENChUSU1FUl9UTV9JTlRSX1NUQVRVU19SRUcpOworCWlmIChpcnE9
PTApIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01BVENIMV9JTlRSKSkKKwkJ
CWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIpOworCQlpZiAoaW50ZXJy
dXB0X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAm
PSB+KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVS
MV9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfT1ZFUkZM
T1dfSU5UUik7CisJfQorCWlmIChpcnE9PTEpIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAo
VElNRVIyX01BVENIMV9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjJfTUFU
Q0gxX0lOVFIpOworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfTUFUQ0gyX0lOVFIp
KQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9NQVRDSDJfSU5UUik7CisJCWlmIChp
bnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9z
dGF0dXMgJj0gfihUSU1FUjJfT1ZFUkZMT1dfSU5UUik7CisJfQorCisJV1I0KGludGVycnVwdF9z
dGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAor
ZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNvdW50ZXIgKmEpCit7CisJdW5zaWdu
ZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJdGlja3MxID0gcmVhZF9zZWNvbmRf
dGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEpOworCXJldHVybiB0aWNrczE7Cit9
CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3NldHVw
X3RpbWVyKHZvaWQpCit7CisJdGltZXJfY291bnRlciA9IEFQQl9jbG9jay9IWjsKKwkvKgorCSAq
IHNldHVwIHRpbWVyLXJlbGF0ZWQgdmFsdWVzCisJICovCisJc2V0dXBfdGltZXIodGltZXJfY291
bnRlcik7Cit9CisKK3ZvaWQKK2NwdV9pbml0Y2xvY2tzKHZvaWQpCit7CisJZWNfdGltZWNvdW50
ZXIudGNfZnJlcXVlbmN5ID0gQVBCX2Nsb2NrOworCXRjX2luaXQoJmVjX3RpbWVjb3VudGVyKTsK
Kwl0aW1lcl9lbmFibGUoKTsKKwl0aW1lcnNfaW5pdGlhbGl6ZWQgPSAxOworfQorCit2b2lkCitj
cHVfc3RhcnRwcm9mY2xvY2sodm9pZCkKK3sKKworfQorCit2b2lkCitjcHVfc3RvcHByb2ZjbG9j
ayh2b2lkKQoreworCit9CisKK3N0YXRpYyBpbnQKK2VjX3RpbWVyX3Byb2JlKGRldmljZV90IGRl
dikKK3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgQ1BVIFRpbWVyIik7CisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVzZXQodm9pZCAqYXJnKQoreworCWFybV9tYXNr
X2lycSgxKTsKKwljbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKDEpOworCWFybV91bm1hc2tf
aXJxKDEpOworCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50CitlY19o
YXJkY2xvY2sodm9pZCAqYXJnKQoreworCXN0cnVjdAl0cmFwZnJhbWUgKmZyYW1lOworCXVuc2ln
bmVkIGludCB2YWw7CisJLypjbGVhciB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzKi8KKworCWFybV9t
YXNrX2lycSgwKTsKKworCXZhbCA9IFJENChUSU1FUl9JTlRFUlJVUFRfU1RBVFVTX1JFRyk7CisJ
dmFsICY9IH4oVElNRVIxX09WRVJGTE9XX0lOVEVSUlVQVCk7CisJV1I0KHZhbCwgVElNRVJfSU5U
RVJSVVBUX1NUQVRVU19SRUcpOworCisJZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsK
KwloYXJkY2xvY2soVFJBUEZfVVNFUk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJ
YXJtX3VubWFza19pcnEoMCk7CisKKwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworc3Rh
dGljIGludAorZWNfdGltZXJfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlpbnQJZXJyb3I7CisJ
dm9pZAkqaWhsOworCXN0cnVjdAllY190aW1lcl9zb2Z0YyAqc2M7CisKKwlpZiAodGltZXJfc29m
dGMgIT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlzYyA9IChzdHJ1Y3QgZWNfdGltZXJf
c29mdGMgKilkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwl0aW1lcl9zb2Z0YyA9IHNjOworCisJ
ZXJyb3IgPSBidXNfYWxsb2NfcmVzb3VyY2VzKGRldiwgZWNfdGltZXJfc3BlYywgc2MtPnRpbWVy
X3Jlcyk7CisJaWYgKGVycm9yKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFs
bG9jYXRlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXNjLT50aW1l
cl9ic3QgPSBybWFuX2dldF9idXN0YWcoc2MtPnRpbWVyX3Jlc1swXSk7CisJc2MtPnRpbWVyX2Jz
aCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+dGltZXJfcmVzWzBdKTsKKworCWRvX3NldHVwX3Rp
bWVyKCk7CisKKwlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+dGltZXJfcmVzWzFdLCBJTlRS
X1RZUEVfQ0xLLAorCSAgICBlY19oYXJkY2xvY2ssIE5VTEwsIE5VTEwsICZpaGwpICE9IDApIHsK
KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwgZWNfdGltZXJfc3BlYywgc2MtPnRpbWVyX3Jl
cyk7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldHVwIGhhcmRjbG9jayBpbnRl
cnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlpZiAoYnVzX3NldHVwX2ludHIo
ZGV2LCBzYy0+dGltZXJfcmVzWzJdLCBJTlRSX1RZUEVfQ0xLLAorCSAgICBlY19yZXNldCwgTlVM
TCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBlY190
aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBu
b3Qgc2V0dXAgdGltZXIgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJ
cmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBlY190aW1lcl9tZXRob2Rz
W10gPSB7CisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWNfdGltZXJfcHJvYmUpLAorCURFVk1F
VEhPRChkZXZpY2VfYXR0YWNoLCBlY190aW1lcl9hdHRhY2gpLAorCXsgMCwgMCB9Cit9OworCitz
dGF0aWMgZHJpdmVyX3QgZWNfdGltZXJfZHJpdmVyID0geworCSJ0aW1lciIsCisJZWNfdGltZXJf
bWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjX3RpbWVyX3NvZnRjKSwKK307CisKK3N0YXRpYyBk
ZXZjbGFzc190IGVjX3RpbWVyX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRpbWVyLCBlY29u
YWFybSwgZWNfdGltZXJfZHJpdmVyLCBlY190aW1lcl9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBh
cm0vZWNvbmEvZWNvbmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvZWNvbmEuYwkocmV2aXNp
b24gMCkKKysrIGFybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0MiBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdt
YWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRCAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl
IDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNp
bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDx2
bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KKyNpbmNsdWRlIDx2bS9wbWFwLmg+Cisj
aW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorCisjZGVm
aW5lCV9BUk0zMl9CVVNfRE1BX1BSSVZBVEUKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2lu
Y2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKwor
I2luY2x1ZGUgImVjb25hX3JlZy5oIgorI2luY2x1ZGUgImVjb25hX3Zhci5oIgorCitzdGF0aWMg
c3RydWN0IGVjb25hX3NvZnRjICplY29uYV9zb2Z0YzsKKwordW5zaWduZWQgaW50IENQVV9jbG9j
ayA9IDIwMDAwMDAwMDsKK3Vuc2lnbmVkIGludCBBSEJfY2xvY2s7Cit1bnNpZ25lZCBpbnQgQVBC
X2Nsb2NrOworCitic19wcm90b3MoZ2VuZXJpYyk7Citic19wcm90b3MoZ2VuZXJpY19hcm12NCk7
CisKK3N0cnVjdCBidXNfc3BhY2UgZWNvbmFfYnNfdGFnID0geworCS8qIGNvb2tpZSAqLworCSh2
b2lkICopIDAsCisKKwkvKiBtYXBwaW5nL3VubWFwcGluZyAqLworCWdlbmVyaWNfYnNfbWFwLAor
CWdlbmVyaWNfYnNfdW5tYXAsCisJZ2VuZXJpY19ic19zdWJyZWdpb24sCisKKwkvKiBhbGxvY2F0
aW9uL2RlYWxsb2NhdGlvbiAqLworCWdlbmVyaWNfYnNfYWxsb2MsCisJZ2VuZXJpY19ic19mcmVl
LAorCisJLyogYmFycmllciAqLworCWdlbmVyaWNfYnNfYmFycmllciwKKworCS8qIHJlYWQgKHNp
bmdsZSkgKi8KKwlnZW5lcmljX2JzX3JfMSwKKwlnZW5lcmljX2FybXY0X2JzX3JfMiwKKwlnZW5l
cmljX2JzX3JfNCwKKwlOVUxMLAorCisJLyogcmVhZCBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNf
cm1fMSwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJZ2VuZXJpY19ic19ybV80LAorCU5VTEws
CisKKwkvKiByZWFkIHJlZ2lvbiAqLworCWdlbmVyaWNfYnNfcnJfMSwKKwlnZW5lcmljX2FybXY0
X2JzX3JyXzIsCisJZ2VuZXJpY19ic19ycl80LAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xl
KSAqLworCWdlbmVyaWNfYnNfd18xLAorCWdlbmVyaWNfYXJtdjRfYnNfd18yLAorCWdlbmVyaWNf
YnNfd180LAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNfd21f
MSwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJZ2VuZXJpY19ic193bV80LAorCU5VTEwsCisK
KwkvKiB3cml0ZSByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJ
Lyogc2V0IG11bHRpcGxlICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8q
IHNldCByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogY29w
eSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIChzaW5nbGUp
IHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIG11
bHRpcGxlIHN0cmVhbSAqLworCU5VTEwsCisJZ2VuZXJpY19hcm12NF9ic19ybV8yLAorCU5VTEws
CisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlO
VUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xlKSBzdHJlYW0gKi8KKwlOVUxMLAorCU5V
TEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUgbXVsdGlwbGUgc3RyZWFtICovCisJTlVM
TCwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUg
cmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwKK307CisKK2J1
c19zcGFjZV90YWdfdCBvYmlvX3RhZyA9ICZlY29uYV9ic190YWc7CisKK3N0YXRpYyBpbnQKK2Vj
b25hX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRUNPTkEg
ZGV2aWNlIGJ1cyIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY29uYV9pZGVu
dGlmeShkcml2ZXJfdCAqZHJ2LCBkZXZpY2VfdCBwYXJlbnQpCit7CisJQlVTX0FERF9DSElMRChw
YXJlbnQsIDAsICJlY29uYWFybSIsIDApOworfQorCitzdHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoK
K2J1c19kbWFfZ2V0X3JhbmdlKHZvaWQpCit7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQK
K2J1c19kbWFfZ2V0X3JhbmdlX25iKHZvaWQpCit7CisJcmV0dXJuICgwKTsKK30KKworZXh0ZXJu
IHZvaWQgaXJxX2VudHJ5KHZvaWQpOworCitzdGF0aWMgdm9pZAorZWNvbmFfYWRkX2NoaWxkKGRl
dmljZV90IGRldiwgaW50IHByaW8sIGNvbnN0IGNoYXIgKm5hbWUsIGludCB1bml0LAorCQlidXNf
YWRkcl90IGFkZHIsIGJ1c19zaXplX3Qgc2l6ZSwKKwkJaW50IGlycTAsIGludCBpcnExLAorCQlp
bnQgaXJxMiwgaW50IGlycTMsIGludCBpcnE0KQoreworCWRldmljZV90IGtpZDsKKwlzdHJ1Y3Qg
ZWNvbmFfaXZhciAqaXZhcjsKKworCWtpZCA9IGRldmljZV9hZGRfY2hpbGRfb3JkZXJlZChkZXYs
IHByaW8sIG5hbWUsIHVuaXQpOworCWlmIChraWQgPT0gTlVMTCkgeworCSAgICBwcmludGYoIkNh
bid0IGFkZCBjaGlsZCAlcyVkIG9yZGVyZWRcbiIsIG5hbWUsIHVuaXQpOworCSAgICByZXR1cm47
CisJfQorCWl2YXIgPSBtYWxsb2Moc2l6ZW9mKCppdmFyKSwgTV9ERVZCVUYsIE1fTk9XQUlUIHwg
TV9aRVJPKTsKKwlpZiAoaXZhciA9PSBOVUxMKSB7CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2
LCBraWQpOworCQlyZXR1cm47CisJfQorCWRldmljZV9zZXRfaXZhcnMoa2lkLCBpdmFyKTsKKwly
ZXNvdXJjZV9saXN0X2luaXQoJml2YXItPnJlc291cmNlcyk7CisJaWYgKGlycTAgIT0gLTEpCisJ
CWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMCwgaXJxMCwgMSk7CisJaWYgKGly
cTEgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAxLCBpcnExLCAx
KTsKKwlpZiAoaXJxMiAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEs
IDIsIGlycTIsIDEpOworCWlmIChpcnEzICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBT
WVNfUkVTX0lSUSwgMywgaXJxMywgMSk7CisJaWYgKGlycTQgIT0gMCkKKwkJYnVzX3NldF9yZXNv
dXJjZShraWQsIFNZU19SRVNfSVJRLCA0LCBpcnE0LCAxKTsKKworCWlmIChhZGRyICE9IDApCisJ
CWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX01FTU9SWSwgMCwgYWRkciwgc2l6ZSk7CisK
K30KKworc3RydWN0IGNwdV9kZXZzCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdW5pdDsK
KwlidXNfYWRkcl90IG1lbV9iYXNlOworCWJ1c19zaXplX3QgbWVtX2xlbjsKKwlpbnQgaXJxMDsK
KwlpbnQgaXJxMTsKKwlpbnQgaXJxMjsKKwlpbnQgaXJxMzsKKwlpbnQgaXJxNDsKK307CisKK3N0
cnVjdCBjcHVfZGV2cyBlY29uYXJtX2RldnNbXSA9Cit7CisJeworCQkiZWNvbmFfaWMiLCAwLAor
CQlFQ09OQV9JT19CQVNFICsgRUNPTkFfUElDX0JBU0UsIEVDT05BX1BJQ19TSVpFLAorCQkwCisJ
fSwKKwl7CisJCSJzeXN0ZW0iLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfU1lTVEVNX0JB
U0UsIEVDT05BX1NZU1RFTV9TSVpFLAorCQkwCisJfSwKKwl7CisJCSJ1YXJ0IiwgMCwKKwkJRUNP
TkFfSU9fQkFTRSArIEVDT05BX1VBUlRfQkFTRSwgRUNPTkFfVUFSVF9TSVpFLAorCQlFQ09OQV9J
UlFfVUFSVAorCX0sCisJeworCQkidGltZXIiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFf
VElNRVJfQkFTRSwgRUNPTkFfVElNRVJfU0laRSwKKwkJRUNPTkFfSVJRX1RJTUVSXzEsIEVDT05B
X0lSUV9USU1FUl8yCisJfSwKKwl7CisJCSJvaGNpIiwgMCwKKwkJRUNPTkFfT0hDSV9WQkFTRSwg
RUNPTkFfT0hDSV9TSVpFLAorCQlFQ09OQV9JUlFfT0hDSQorCQl9LAorCXsKKwkJImVoY2kiLCAw
LAorCQlFQ09OQV9FSENJX1ZCQVNFLCBFQ09OQV9FSENJX1NJWkUsCisJCUVDT05BX0lSUV9FSENJ
CisJfSwKKwl7CisJCSJjZmkiLCAwLAorCQlFQ09OQV9DRklfVkJBU0UsIEVDT05BX0NGSV9TSVpF
LAorCQkwCisJfSwKKwl7CisJCSJlY2UiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfTkVU
X0JBU0UsIEVDT05BX05FVF9TSVpFLAorCQlFQ09OQV9JUlFfU1RBVFVTLAorCQlFQ09OQV9JUlFf
VFNUQywgRUNPTkFfSVJRX0ZTUkMsCisJCUVDT05BX0lSUV9UU1FFLCBFQ09OQV9JUlFfRlNRRiwK
Kwl9LAorCXsJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZAor
ZWNvbmFfY3B1X2FkZF9idWlsdGluX2NoaWxkcmVuKGRldmljZV90IGRldiwgc3RydWN0IGVjb25h
X3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3B1X2RldnMgKndhbGtlcjsKKworCWZv
ciAoaSA9IDAsIHdhbGtlciA9IGVjb25hcm1fZGV2czsgd2Fsa2VyLT5uYW1lOyBpKyssIHdhbGtl
cisrKSB7CisJCWVjb25hX2FkZF9jaGlsZChkZXYsIGksIHdhbGtlci0+bmFtZSwgd2Fsa2VyLT51
bml0LAorCQkJCXdhbGtlci0+bWVtX2Jhc2UsIHdhbGtlci0+bWVtX2xlbiwKKwkJCQl3YWxrZXIt
PmlycTAsd2Fsa2VyLT5pcnExLCB3YWxrZXItPmlycTIsCisJCQkJd2Fsa2VyLT5pcnEzLCB3YWxr
ZXItPmlycTQpOworCX0KKworfQorCitzdHJ1Y3QgaW50Y190cmlnZ2VyX3QgeworCWludCBtb2Rl
OworCWludCBsZXZlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y190cmlnZ2VyX3QgaW50Y190
cmlnZ2VyX3RhYmxlW10gPSB7CisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdF
fSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0Vf
VFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19S
SVNJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9X
Tn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZF
TF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENf
QUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05P
V059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xF
VkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElO
VENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9
LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRD
X0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwg
SU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VS
X1VOS05PV059LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059
LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0VER0Vf
VFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJ
U0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJ
TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfTEVWRUxfVFJJR0dF
UiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9M
T1d9LAorfTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdAorUkQ0KHN0cnVjdCBlY29uYV9zb2Z0
YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHNjLT5l
Y19zdCwgc2MtPmVjX3N5c19zaCwgb2ZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitXUjQo
c3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sK
KwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzX3NoLCBvZmYs
IHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK1JENF9TWVNURU0oc3RydWN0IGVj
b25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYpCit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFk
XzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQKK1dSNF9TWVNURU0oc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYs
IHVpbnQzMl90IHZhbCkKK3sKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBz
Yy0+ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0aWMgaW5saW5lIHZvaWQK
K2Vjb25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywgdW5zaWduZWQgaW50
IGlycSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwor
CWlmICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2RlICE9IElOVENfRURHRV9U
UklHR0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JUkQ0KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklH
R0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJTlRDX0xFVkVMX1RSSUdHRVIp
IHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7
CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULCB2YWwp
OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEodmFsICYgKDFVTCA8PCBpcnEpKSkgeworCQkJdmFs
IHw9ICgxVUwgPDwgaXJxKTsKKwkJCVdSNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9NT0RF
X1JFR19PRkZTRVQsIHZhbCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmUgaW50ZXJy
dXB0IHRyaWdnZXIgbGV2ZWwgdG8gYmUgQWN0aXZlIEhpZ2gvTG93CisgKiBvciBSaXNpbmcvRmFs
bGluZyBFZGdlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWNvbmFfc2V0X2lycV9sZXZlbChz
dHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywKKwkJICAgIHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVk
IGludCBsZXZlbCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKChsZXZlbCAhPSBJTlRD
X0FDVElWRV9ISUdIKSAmJgorCSAgICAobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfTE9XKSAmJgorCSAg
ICAobGV2ZWwgIT0gSU5UQ19SSVNJTkdfRURHRSkgJiYKKwkgICAgKGxldmVsICE9IElOVENfRkFM
TElOR19FREdFKSkgeworCQlyZXR1cm47CisJfQorCisJdmFsID0gUkQ0KHNjLCBJTlRDX0lOVEVS
UlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQpOworCisJaWYgKChsZXZlbCA9PSBJTlRDX0FD
VElWRV9ISUdIKSB8fCAobGV2ZWwgPT0gSU5UQ19SSVNJTkdfRURHRSkpIHsKKwkJaWYgKHZhbCAm
ICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7CisJCQlXUjQoc2MsIElO
VENfSU5URVJSVVBUX1RSSUdHRVJfTEVWRUxfUkVHX09GRlNFVCwgdmFsKTsKKwkJfQorCX0gZWxz
ZSB7CisJCWlmICghKHZhbCAmICgxVUwgPDwgaXJxKSkpIHsKKwkJCXZhbCB8PSAoMVVMIDw8IGly
cSk7CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTEVWRUxfUkVHX09GRlNFVCwg
dmFsKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2dldF9zeXN0ZW1fY2xvY2sodm9pZCkK
K3sKKwl1aW50MzJfdCBzY2xvY2sgPSBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBTWVNURU1fQ0xP
Q0spOworCisJc2Nsb2NrID0gKHNjbG9jayA+PiA2KSAmIDB4MDM7CisKKwlzd2l0Y2ggKHNjbG9j
aykgeworCWNhc2UgMDoKKwkJQ1BVX2Nsb2NrID0gMTc1MDAwMDAwOworCQlicmVhazsKKwljYXNl
IDE6CisJCUNQVV9jbG9jayA9IDIwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlDUFVf
Y2xvY2sgPSAyMjUwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJQ1BVX2Nsb2NrID0gMjUw
MDAwMDAwOworCQlicmVhazsKKwl9CisJQUhCX2Nsb2NrID0gQ1BVX2Nsb2NrID4+IDE7CisJQVBC
X2Nsb2NrID0gQUhCX2Nsb2NrID4+IDE7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX2F0dGFjaChk
ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjb25hX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKwlpbnQgaTsKKworCWVjb25hX3NvZnRjID0gc2M7CisJc2MtPmVjX3N0ID0gJmVj
b25hX2JzX3RhZzsKKwlzYy0+ZWNfc2ggPSBFQ09OQV9JT19CQVNFOworCXNjLT5kZXYgPSBkZXY7
CisJaWYgKGJ1c19zcGFjZV9zdWJyZWdpb24oc2MtPmVjX3N0LCBzYy0+ZWNfc2gsIEVDT05BX1BJ
Q19CQVNFLAorCSAgICBFQ09OQV9QSUNfU0laRSwgJnNjLT5lY19zeXNfc2gpICE9IDApCisJCXBh
bmljKCJVbmFibGUgdG8gbWFwIElSUSByZWdpc3RlcnMiKTsKKworCWlmIChidXNfc3BhY2Vfc3Vi
cmVnaW9uKHNjLT5lY19zdCwgc2MtPmVjX3NoLCBFQ09OQV9TWVNURU1fQkFTRSwKKwkgICAgRUNP
TkFfU1lTVEVNX1NJWkUsICZzYy0+ZWNfc3lzdGVtX3NoKSAhPSAwKQorCQlwYW5pYygiVW5hYmxl
IHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlzYy0+ZWNfaXJxX3JtYW4ucm1fdHlwZSA9IFJN
QU5fQVJSQVk7CisJc2MtPmVjX2lycV9ybWFuLnJtX2Rlc2NyID0gIkVDT05BIElSUXMiOworCXNj
LT5lY19tZW1fcm1hbi5ybV90eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+ZWNfbWVtX3JtYW4ucm1f
ZGVzY3IgPSAiRUNPTkEgTWVtb3J5IjsKKwlpZiAocm1hbl9pbml0KCZzYy0+ZWNfaXJxX3JtYW4p
ICE9IDAgfHwKKwkgICAgcm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+ZWNfaXJxX3JtYW4sIDAsIDMx
KSAhPSAwKQorCQlwYW5pYygiZWNvbmFfYXR0YWNoOiBmYWlsZWQgdG8gc2V0IHVwIElSUSBybWFu
Iik7CisJaWYgKHJtYW5faW5pdCgmc2MtPmVjX21lbV9ybWFuKSAhPSAwIHx8CisJICAgIHJtYW5f
bWFuYWdlX3JlZ2lvbigmc2MtPmVjX21lbV9ybWFuLCAwLAorCSAgICB+MCkgIT0gMCkKKwkJcGFu
aWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNldCB1cCBtZW1vcnkgcm1hbiIpOworCisJV1I0
KHNjLCBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09GRlNFVCwgMHhmZmZm
ZmZmZik7CisKKwlXUjQoc2MsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgMHhmZmZm
ZmZmZik7CisKKwlXUjQoc2MsIElOVENfRklRX01PREVfU0VMRUNUX1JFR19PRkZTRVQsIDApOwor
CisJLyppbml0aWFsaXplIGlycSovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYg
KGludGNfdHJpZ2dlcl90YWJsZVtpXS5tb2RlICE9IElOVENfVFJJR0dFUl9VTktOT1dOKSB7CisJ
CQllY29uYV9zZXRfaXJxX21vZGUoc2MsaSwgaW50Y190cmlnZ2VyX3RhYmxlW2ldLm1vZGUpOwor
CQkJZWNvbmFfc2V0X2lycV9sZXZlbChzYywgaSwgaW50Y190cmlnZ2VyX3RhYmxlW2ldLmxldmVs
KTsKKwkJfQorCX0KKworCWdldF9zeXN0ZW1fY2xvY2soKTsKKworCWVjb25hX2NwdV9hZGRfYnVp
bHRpbl9jaGlsZHJlbihkZXYsIHNjKTsKKworCWJ1c19nZW5lcmljX3Byb2JlKGRldik7CisJYnVz
X2dlbmVyaWNfYXR0YWNoKGRldik7CisJZW5hYmxlX2ludGVycnVwdHMoSTMyX2JpdCB8IEYzMl9i
aXQpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqCitlY29u
YV9hbGxvY19yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwg
aW50ICpyaWQsCisgICAgdV9sb25nIHN0YXJ0LCB1X2xvbmcgZW5kLCB1X2xvbmcgY291bnQsIHVf
aW50IGZsYWdzKQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisJc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKwlzdHJ1Y3QgZWNvbmFf
aXZhciAqaXZhciA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXN0cnVjdCByZXNvdXJjZV9s
aXN0ICpybCA9ICZpdmFyLT5yZXNvdXJjZXM7CisKKwlpZiAoZGV2aWNlX2dldF9wYXJlbnQoY2hp
bGQpICE9IGRldikKKwkJcmV0dXJuIChCVVNfQUxMT0NfUkVTT1VSQ0UoZGV2aWNlX2dldF9wYXJl
bnQoZGV2KSwgY2hpbGQsCisJCQkgICB0eXBlLCByaWQsIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFn
cykpOworCisJcmxlID0gcmVzb3VyY2VfbGlzdF9maW5kKHJsLCB0eXBlLCAqcmlkKTsKKwlpZiAo
cmxlID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHJsZS0+cmVzKQorCQlw
YW5pYygiUmVzb3VyY2UgcmlkICVkIHR5cGUgJWQgYWxyZWFkeSBpbiB1c2UiLCAqcmlkLCB0eXBl
KTsKKwlpZiAoc3RhcnQgPT0gMFVMICYmIGVuZCA9PSB+MFVMKSB7CisJCXN0YXJ0ID0gcmxlLT5z
dGFydDsKKwkJY291bnQgPSB1bG1heChjb3VudCwgcmxlLT5jb3VudCk7CisJCWVuZCA9IHVsbWF4
KHJsZS0+ZW5kLCBzdGFydCArIGNvdW50IC0gMSk7CisJfQorCXN3aXRjaCAodHlwZSkKKwl7CisJ
Y2FzZSBTWVNfUkVTX0lSUToKKwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNj
LT5lY19pcnFfcm1hbiwKKwkJICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOwor
CQlicmVhazsKKwljYXNlIFNZU19SRVNfTUVNT1JZOgorCQlybGUtPnJlcyA9IHJtYW5fcmVzZXJ2
ZV9yZXNvdXJjZSgmc2MtPmVjX21lbV9ybWFuLAorCQkgICAgc3RhcnQsIGVuZCwgY291bnQsIGZs
YWdzLCBjaGlsZCk7CisJCWlmIChybGUtPnJlcyAhPSBOVUxMKSB7CisJCQlybWFuX3NldF9idXN0
YWcocmxlLT5yZXMsICZlY29uYV9ic190YWcpOworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKHJsZS0+
cmVzLCBzdGFydCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChybGUtPnJlcykgeworCQlybGUt
PnN0YXJ0ID0gcm1hbl9nZXRfc3RhcnQocmxlLT5yZXMpOworCQlybGUtPmVuZCA9IHJtYW5fZ2V0
X2VuZChybGUtPnJlcyk7CisJCXJsZS0+Y291bnQgPSBjb3VudDsKKwkJcm1hbl9zZXRfcmlkKHJs
ZS0+cmVzLCAqcmlkKTsKKwl9CisJcmV0dXJuIChybGUtPnJlcyk7Cit9CisKK3N0YXRpYyBzdHJ1
Y3QgcmVzb3VyY2VfbGlzdCAqCitlY29uYV9nZXRfcmVzb3VyY2VfbGlzdChkZXZpY2VfdCBkZXYs
IGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29uYV9pdmFyICppdmFyOworCWl2YXIgPSBk
ZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlyZXR1cm4gKCYoaXZhci0+cmVzb3VyY2VzKSk7Cit9
CisKK3N0YXRpYyBpbnQKK2Vjb25hX3JlbGVhc2VfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCwgaW50IHR5cGUsCisgICAgaW50IHJpZCwgc3RydWN0IHJlc291cmNlICpyKQor
eworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpybDsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRy
eSAqcmxlOworCisJcmwgPSBlY29uYV9nZXRfcmVzb3VyY2VfbGlzdChkZXYsIGNoaWxkKTsKKwlp
ZiAocmwgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCXJsZSA9IHJlc291cmNlX2xpc3Rf
ZmluZChybCwgdHlwZSwgcmlkKTsKKwlpZiAocmxlID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM
KTsKKwlybWFuX3JlbGVhc2VfcmVzb3VyY2Uocik7CisJcmxlLT5yZXMgPSBOVUxMOworCXJldHVy
biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3NldHVwX2ludHIoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMsIGludCBmbGFncywgZHJp
dmVyX2ZpbHRlcl90ICpmaWx0LAorICAgIGRyaXZlcl9pbnRyX3QgKmludHIsIHZvaWQgKmFyZywg
dm9pZCAqKmNvb2tpZXApCit7CisJaWYgKHJtYW5fZ2V0X3N0YXJ0KGlyZXMpID09IEVDT05BX0lS
UV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlwYW5pYygiQWxsIHN5c3RlbSBpbnRlcnJ1cHQg
SVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVTX1NFVFVQX0lOVFIoZGV2aWNlX2dldF9wYXJl
bnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBmaWx0LAorCSAgICBpbnRyLCBhcmcsIGNvb2tp
ZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9nZXRfc3RhcnQoaXJlcykpOworCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFfdGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYs
IGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKyAgICB2b2lkICpjb29raWUp
Cit7CisJcmV0dXJuIChCVVNfVEVBUkRPV05fSU5UUihkZXZpY2VfZ2V0X3BhcmVudChkZXYpLCBj
aGlsZCwgcmVzLCBjb29raWUpKTsKK30KKworc3RhdGljIGludAorZWNvbmFfYWN0aXZhdGVfcmVz
b3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsCisg
ICAgc3RydWN0IHJlc291cmNlICpyKQoreworCXJldHVybiAocm1hbl9hY3RpdmF0ZV9yZXNvdXJj
ZShyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3ByaW50X2NoaWxkKGRldmljZV90IGRldiwg
ZGV2aWNlX3QgY2hpbGQpCit7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXJzOworCXN0cnVjdCBy
ZXNvdXJjZV9saXN0ICpybDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWl2YXJzID0gZGV2aWNlX2dl
dF9pdmFycyhjaGlsZCk7CisJcmwgPSAmaXZhcnMtPnJlc291cmNlczsKKworCXJldHZhbCArPSBi
dXNfcHJpbnRfY2hpbGRfaGVhZGVyKGRldiwgY2hpbGQpOworCisJcmV0dmFsICs9IHJlc291cmNl
X2xpc3RfcHJpbnRfdHlwZShybCwgInBvcnQiLCBTWVNfUkVTX0lPUE9SVCwgIiUjbHgiKTsKKwly
ZXR2YWwgKz0gcmVzb3VyY2VfbGlzdF9wcmludF90eXBlKHJsLCAibWVtIiwgU1lTX1JFU19NRU1P
UlksICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZShybCwgImly
cSIsIFNZU19SRVNfSVJRLCAiJWxkIik7CisJaWYgKGRldmljZV9nZXRfZmxhZ3MoZGV2KSkKKwkJ
cmV0dmFsICs9IHByaW50ZigiIGZsYWdzICUjeCIsIGRldmljZV9nZXRfZmxhZ3MoZGV2KSk7CisK
KwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2Zvb3RlcihkZXYsIGNoaWxkKTsKKworCXJldHVy
biAocmV0dmFsKTsKK30KKwordm9pZAorYXJtX21hc2tfaXJxKHVpbnRwdHJfdCBuYikKK3sKKwl1
bnNpZ25lZCBpbnQgdmFsdWU7CisKKwl2YWx1ZSA9IFJENChlY29uYV9zb2Z0YyxJTlRDX0lOVEVS
UlVQVF9NQVNLX1JFR19PRkZTRVQpIHwgMTw8bmI7CisJV1I0KGVjb25hX3NvZnRjLCBJTlRDX0lO
VEVSUlVQVF9NQVNLX1JFR19PRkZTRVQsIHZhbHVlKTsKK30KKwordm9pZAorYXJtX3VubWFza19p
cnEodWludHB0cl90IG5iKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXZhbHVlID0JUkQ0
KGVjb25hX3NvZnRjLAorCQkgICAgSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JF
R19PRkZTRVQpIHwgKDEgPDwgbmIpOworCVdSNChlY29uYV9zb2Z0YywKKwkgICAgSU5UQ19JTlRF
UlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQsIHZhbHVlKTsKKwl2YWx1ZSA9CVJE
NChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSYgfigxIDw8IG5i
KTsKKwlXUjQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFs
dWUpOworfQorCitpbnQKK2FybV9nZXRfbmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKwor
CWlycSA9IFJENChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQp
ICYKKwkJfihSRDQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCkp
OworCisJaWYgKGlycSE9MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJcmV0
dXJuICgtMSk7Cit9CisKK3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNvbnRy
b2wgPSBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljb250cm9sIHw9
IEdMT0JBTF9SRVNFVDsKKwlXUjRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBj
b250cm9sKTsKKwljb250cm9sID0gUkQ0X1NZU1RFTShlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJP
TCk7CisJY29udHJvbCAmPSAofihHTE9CQUxfUkVTRVQpKTsKKwlXUjRfU1lTVEVNKGVjb25hX3Nv
ZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9sKTsKKwl3aGlsZSAoMSk7Cit9CisKKworCit2b2lk
Citwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSh2b2lkKQoreworCXVpbnQzMl90IGNmZ19yZWc7
CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9D
T05UUk9MKTsKKwljZmdfcmVnIHw9IE5FVF9JTlRFUkZBQ0VfUkVTRVQ7CisJLyogc2V0IHJlc2V0
IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwlXUjRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9D
T05UUk9MLCBjZmdfcmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0gMDsgaWkg
PCAweEZGRjsgaWkrKykKKwkJREVMQVkoMTAwKTsKKwkvKiBzZXQgcmVzZXQgYml0IHRvIExPVyBh
Y3RpdmU7ICovCisJY2ZnX3JlZyA9ICBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05U
Uk9MKTsKKwljZmdfcmVnICY9IH4oTkVUX0lOVEVSRkFDRV9SRVNFVCk7CisJV1I0X1NZU1RFTShl
Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisKKwkvKnB1bHNlIGRlbGF5ICov
CisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURFTEFZKDEwMCk7CisJY2ZnX3Jl
ZyA9IFJENF9TWVNURU0oZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wpOworCWNmZ19yZWcgfD0g
TkVUX0lOVEVSRkFDRV9SRVNFVDsKKwkvKiBzZXQgcmVzZXQgYml0IHRvIEhJR0ggYWN0aXZlOyAq
LworCVdSNF9TWVNURU0oZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQor
Cit1bnNpZ25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisJcmV0dXJuIENQVV9jbG9jazsKK30K
KworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRI
T0QoZGV2aWNlX3Byb2JlLCAgICAgICAgICAgIGVjb25hX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2
aWNlX2F0dGFjaCwgICAgICAgICAgIGVjb25hX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9p
ZGVudGlmeSwgICAgICAgICBlY29uYV9pZGVudGlmeSksCisJREVWTUVUSE9EKGJ1c19hbGxvY19y
ZXNvdXJjZSwgICAgICBlY29uYV9hbGxvY19yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19zZXR1
cF9pbnRyLCAgICAgICAgICBlY29uYV9zZXR1cF9pbnRyKSwKKwlERVZNRVRIT0QoYnVzX3RlYXJk
b3duX2ludHIsICAgICAgIGVjb25hX3RlYXJkb3duX2ludHIpLAorCURFVk1FVEhPRChidXNfYWN0
aXZhdGVfcmVzb3VyY2UsICAgZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1FVEhPRChi
dXNfZGVhY3RpdmF0ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNvdXJjZSks
CisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwgICBlY29uYV9nZXRfcmVzb3VyY2Vf
bGlzdCksCisJREVWTUVUSE9EKGJ1c19zZXRfcmVzb3VyY2UsCSAgIGJ1c19nZW5lcmljX3JsX3Nl
dF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2UsCSAgIGJ1c19nZW5lcmlj
X3JsX2dldF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAkgICBl
Y29uYV9yZWxlYXNlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkgICBl
Y29uYV9wcmludF9jaGlsZCksCisJezAsIDB9LAorfTsKKworc3RhdGljIGRyaXZlcl90IGVjb25h
X2RyaXZlciA9IHsKKwkiZWNvbmFhcm0iLAorCWVjb25hX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVj
dCBlY29uYV9zb2Z0YyksCit9Oworc3RhdGljIGRldmNsYXNzX3QgZWNvbmFfZGV2Y2xhc3M7CisK
K0RSSVZFUl9NT0RVTEUoZWNvbmFhcm0sIG5leHVzLCBlY29uYV9kcml2ZXIsIGVjb25hX2RldmNs
YXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9laGNpX2VidXMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vZWNvbmEvZWhjaV9lYnVzLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvZWhjaV9lYnVz
LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAwIEBACisvKi0KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogYmFzZWQgb24gZWhj
aV9tYnVzLmMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNQVJWRUxMIElOVEVSTkFUSU9OQUwgTFRE
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAib3B0
X2J1cy5oIgorCisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8c3lz
L3N0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lz
L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL21vZHVs
ZS5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5j
bHVkZSA8c3lzL2NvbmR2YXIuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8
c3lzL3N4Lmg+CisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9jYWxsb3V0
Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+CisKKyNp
bmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRl
IDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5j
bHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vz
cy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2Iv
dXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRl
IDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxl
ci9laGNpcmVnLmg+CisKKworc3RhdGljIGRldmljZV9hdHRhY2hfdCBlaGNpX2VidXNfYXR0YWNo
Oworc3RhdGljIGRldmljZV9kZXRhY2hfdCBlaGNpX2VidXNfZGV0YWNoOworc3RhdGljIGRldmlj
ZV9zaHV0ZG93bl90IGVoY2lfZWJ1c19zaHV0ZG93bjsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90
IGVoY2lfZWJ1c19zdXNwZW5kOworc3RhdGljIGRldmljZV9yZXN1bWVfdCBlaGNpX2VidXNfcmVz
dW1lOworCisKK3N0YXRpYyB2b2lkICppaF9lcnI7CisKKyNkZWZpbmUJRUhDSV9IQ19ERVZTVFIg
IkNOUzExWFggVVNCIEVIQ0kiCisjZGVmaW5lCVVTQl9CUklER0VfSU5UUl9NQVNLICAgMHgyMTQK
Kworc3RhdGljIGludAorZWhjaV9lYnVzX3N1c3BlbmQoZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp
X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJy
ID0gYnVzX2dlbmVyaWNfc3VzcGVuZChzZWxmKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gKGVycik7
CisJZWhjaV9zdXNwZW5kKHNjKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlaGNp
X2VidXNfcmVzdW1lKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmlj
ZV9nZXRfc29mdGMoc2VsZik7CisKKwllaGNpX3Jlc3VtZShzYyk7CisKKwlidXNfZ2VuZXJpY19y
ZXN1bWUoc2VsZik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNf
c2h1dGRvd24oZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX2dlbmVyaWNfc2h1dGRvd24o
c2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVoY2lfc2h1dGRvd24oc2MpOwor
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3Byb2JlKGRldmljZV90
IHNlbGYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2Moc2VsZiwgRUhDSV9IQ19ERVZTVFIpOworCisJ
cmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19h
dHRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9z
b2Z0YyhzZWxmKTsKKwlidXNfc3BhY2VfaGFuZGxlX3QgYnNoOworCWludCBlcnI7CisJaW50IHJp
ZDsKKworCS8qIGluaXRpYWxpc2Ugc29tZSBidXMgZmllbGRzICovCisJc2MtPnNjX2J1cy5wYXJl
bnQgPSBzZWxmOworCXNjLT5zY19idXMuZGV2aWNlcyA9IHNjLT5zY19kZXZpY2VzOworCXNjLT5z
Y19idXMuZGV2aWNlc19tYXggPSBFSENJX01BWF9ERVZJQ0VTOworCisJLyogZ2V0IGFsbCBETUEg
bWVtb3J5ICovCisJaWYgKHVzYl9idXNfbWVtX2FsbG9jX2FsbCgmc2MtPnNjX2J1cywKKwkgICAg
VVNCX0dFVF9ETUFfVEFHKHNlbGYpLCAmZWhjaV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1
cm4gKEVOT01FTSk7CisJfQorCisJc2MtPnNjX2J1cy51c2JyZXYgPSBVU0JfUkVWXzJfMDsKKwor
CXJpZCA9IDA7CisJc2MtPnNjX2lvX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2VsZiwg
U1lTX1JFU19NRU1PUlksCisJCQkJCSAgICAgICAmcmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2Mt
PnNjX2lvX3JlcykgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9y
eVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNjLT5zY19pb190YWcgPSBybWFuX2dldF9idXN0
YWcoc2MtPnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19y
ZXMpOworCisJLyptYWdpYywgdW5kb2N1bWVudGVkIGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3Bh
Y2Vfd3JpdGVfNCgoc2MpLT5zY19pb190YWcsIGJzaCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3Nw
YWNlX3dyaXRlXzQoKHNjKS0+c2NfaW9fdGFnLCBic2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7
CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19pb19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVz
X3NwYWNlX3N1YnJlZ2lvbihzYy0+c2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2Mt
PnNjX2lvX3NpemUsICZzYy0+c2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0
byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShz
ZWxmKSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNl
X2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNU
SVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNl
bGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4iKTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxm
KTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2Fk
ZF9jaGlsZChzZWxmLCAidXNidXMiLCAtMSk7CisJaWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJ
ZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290
byBlcnJvcjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2Nf
YnVzKTsKKwlkZXZpY2Vfc2V0X2Rlc2Moc2MtPnNjX2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7
CisKKwlzcHJpbnRmKHNjLT5zY192ZW5kb3IsICJDYXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1
cF9pbnRyKHNlbGYsc2MtPnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9CSU8gfCBJTlRS
X01QU0FGRSwgTlVMTCwKKwkJCSAgICAgKGRyaXZlcl9pbnRyX3QgKillaGNpX2ludGVycnVwdCwg
c2MsCisJCQkgICAgICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChlcnIpIHsKKwkJZGV2aWNlX3By
aW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwgJWRcbiIsIGVycik7CisJCWlo
X2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gZWhjaV9pbml0KHNjKTsK
KwlpZiAoIWVycikgeworCQllcnIgPSBkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChzYy0+c2NfYnVz
LmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIlVTQiBpbml0
IGZhaWxlZCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7
CisKK2Vycm9yOgorCWVoY2lfZWJ1c19kZXRhY2goc2VsZik7CisJcmV0dXJuIChFTlhJTyk7Cit9
CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19kZXRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp
X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlkZXZpY2VfdCBiZGV2Owor
CWludCBlcnI7CisKKwlpZiAoc2MtPnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2NfYnVz
LmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoc2Vs
ZiwgYmRldik7CisJfQorCS8qIGR1cmluZyBtb2R1bGUgdW5sb2FkIHRoZXJlIGFyZSBsb3RzIG9m
IGNoaWxkcmVuIGxlZnRvdmVyICovCisJZGV2aWNlX2RlbGV0ZV9hbGxfY2hpbGRyZW4oc2VsZik7
CisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBzd2l0
Y2hlZCBvbiBpbiBlaGNpX2luaXQKKwkgKi8KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlFV1JJ
VEU0KHNjLCBFSENJX1VTQklOVFIsIDApOworCQlFV1JJVEU0KHNjLCBVU0JfQlJJREdFX0lOVFJf
TUFTSywgMCk7CisJfQorCWlmIChzYy0+c2NfaXJxX3JlcyAmJiBzYy0+c2NfaW50cl9oZGwpIHsK
KwkJLyoKKwkJICogb25seSBjYWxsIGVoY2lfZGV0YWNoKCkgYWZ0ZXIgZWhjaV9pbml0KCkKKwkJ
ICovCisJCWVoY2lfZGV0YWNoKHNjKTsKKworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihzZWxm
LCBzYy0+c2NfaXJxX3Jlcywgc2MtPnNjX2ludHJfaGRsKTsKKworCQlpZiAoZXJyKQorCQkJLyog
WFhYIG9yIHNob3VsZCB3ZSBwYW5pYz8gKi8KKwkJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxk
IG5vdCB0ZWFyIGRvd24gaXJxLCAlZFxuIiwKKwkJCSAgICBlcnIpOworCQlzYy0+c2NfaW50cl9o
ZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lycV9yZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVz
b3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX2ly
cV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlidXNfcmVsZWFzZV9y
ZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwKKwkJICAgIHNjLT5zY19pb19yZXMpOwor
CQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNiX2J1c19tZW1fZnJlZV9hbGwoJnNjLT5z
Y19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3Rh
dGljIGRldmljZV9tZXRob2RfdCBlaGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJm
YWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWhjaV9lYnVzX3Byb2JlKSwKKwlERVZN
RVRIT0QoZGV2aWNlX2F0dGFjaCwgZWhjaV9lYnVzX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmlj
ZV9kZXRhY2gsIGVoY2lfZWJ1c19kZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwg
ZWhjaV9lYnVzX3N1c3BlbmQpLAorCURFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCBlaGNpX2VidXNf
cmVzdW1lKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBlaGNpX2VidXNfc2h1dGRvd24p
LAorCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChidXNfcHJpbnRfY2hpbGQsIGJ1
c19nZW5lcmljX3ByaW50X2NoaWxkKSwKKworCXswLCAwfQorfTsKKworc3RhdGljIGRyaXZlcl90
IGVoY2lfZHJpdmVyID0geworCSJlaGNpIiwKKwllaGNpX21ldGhvZHMsCisJc2l6ZW9mKGVoY2lf
c29mdGNfdCksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBlaGNpX2RldmNsYXNzOworCitEUklW
RVJfTU9EVUxFKGVoY2ksIGVjb25hYXJtLCBlaGNpX2RyaXZlciwgZWhjaV9kZXZjbGFzcywgMCwg
MCk7CitNT0RVTEVfREVQRU5EKGVoY2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBhcm0vZWNvbmEv
ZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lv
biAwKQorKysgYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3
OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz
QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmCV9BUk1fRUNPTkFfUkVHX0gK
KyNkZWZpbmUJX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lCUVDT05BX1NSQU1fU0laRQkweDEw
MDAwMDAwCisjZGVmaW5lCUVDT05BX0RSQU1fQkFTRQkweDAwMDAwMDAwIC8qIERSQU0gKHZpYSBE
RFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUJRUNPTkFfU0RSQU1fQkFTRQkweDQwMDAw
MDAwCisjZGVmaW5lCUVDT05BX1NEUkFNX1NJWkUJMHgxMDAwMDAwCisKKworI2RlZmluZQlFQ09O
QV9JT19CQVNFCQkweDcwMDAwMDAwCisjZGVmaW5lCUVDT05BX0lPX1NJWkUJCTB4MEUwMDAwMDAK
KyNkZWZpbmUJRUNPTkFfUElDX0JBU0UJCTB4MEQwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX1NJ
WkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9VQVJUX0JBU0UJMHgwODAwMDAwMAorI2Rl
ZmluZQlFQ09OQV9VQVJUX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVUFSVAkJ
MHhBCisKKyNkZWZpbmUJRUNPTkFfVElNRVJfQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lCUVDT05B
X1RJTUVSX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVElNRVJfMQkwCisjZGVm
aW5lCUVDT05BX0lSUV9USU1FUl8yCTEKKyNkZWZpbmUJRUNPTkFfSVJRX09IQ0kJCTIzCisjZGVm
aW5lCUVDT05BX0lSUV9FSENJCQkyNAorCisjZGVmaW5lCUVDT05BX05FVF9CQVNFCQkweDAwMDAw
MDAwCisKKyNkZWZpbmUJRUNPTkFfU1lTVEVNX0JBU0UJMHgwNzAwMDAwMAorI2RlZmluZQlFQ09O
QV9TWVNURU1fU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfTkVUX1NJWkUJCTB4MDEw
MDAwMDAKKworI2RlZmluZQlFQ09OQV9DRklfUEJBU0UJMHgxMDAwMDAwMAorI2RlZmluZQlFQ09O
QV9DRklfVkJBU0UJMHhEMDAwMDAwMAorI2RlZmluZQlFQ09OQV9DRklfU0laRQkJMHgxMDAwMDAw
MAorCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMJMTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMJ
CTE5CisjZGVmaW5lCUVDT05BX0lSUV9GU1JDCQkyMAorI2RlZmluZQlFQ09OQV9JUlFfVFNRRQkJ
MjEKKyNkZWZpbmUJRUNPTkFfSVJRX0ZTUUYJCTIyCisKKyNkZWZpbmUJRUNPTkFfSVJRX1NZU1RF
TQkwCisKKyNkZWZpbmUJRUNPTkFfRUhDSV9QQkFTRQkweEM4MDAwMDAwCisjZGVmaW5lCUVDT05B
X0VIQ0lfVkJBU0UJMHhGODAwMDAwMAorI2RlZmluZQlFQ09OQV9FSENJX1NJWkUJMHg4MDAwMDAw
CisKKyNkZWZpbmUJRUNPTkFfT0hDSV9QQkFTRQkweEMwMDAwMDAwCisjZGVmaW5lCUVDT05BX09I
Q0lfVkJBU0UJMHhGMDAwMDAwMAorI2RlZmluZQlFQ09OQV9PSENJX1NJWkUJMHg4MDAwMDAwCisK
KyNkZWZpbmUJRUNPTkFfVVNCX1NJWkUJCTB4ZjAwMDAwMAorCisvKkludGVycnVwdCBjb250cm9s
bGVyKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCTAKKyNkZWZpbmUJSU5UQ19FREdFX1RS
SUdHRVIJMQorI2RlZmluZQlJTlRDX0FDVElWRV9ISUdICTAKKyNkZWZpbmUJSU5UQ19BQ1RJVkVf
TE9XCTEKKy8qCisgKiBkZWZpbmUgcmlzaW5nL2ZhbGxpbmcgZWRnZSBmb3IgZWRnZSB0cmlnZ2Vy
IG1vZGUKKyAqLworI2RlZmluZQlJTlRDX1JJU0lOR19FREdFCTAKKyNkZWZpbmUJSU5UQ19GQUxM
SU5HX0VER0UJMQorCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX1NPVVJDRV9SRUdfT0ZGU0VUCQkw
eDAwCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVAkJCTB4MDQKKyNkZWZp
bmUJSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQJMHgwOAorI2Rl
ZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVAkJMHgwQworI2RlZmlu
ZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQJMHgxMAorI2RlZmluZQlJ
TlRDX0lOVEVSUlVQVF9TVEFUVVNfUkVHX09GRlNFVAkJMHgxNAorI2RlZmluZQlJTlRDX0ZJUV9N
T0RFX1NFTEVDVF9SRUdfT0ZGU0VUCQkweDE4CisjZGVmaW5lCUlOVENfU09GVFdBUkVfSU5URVJS
VVBUX1JFR19PRkZTRVQJCTB4MUMKKworCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxsaW5nIGVk
Z2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19SSVNJTkdfRURHRQkw
CisjZGVmaW5lCUlOVENfRkFMTElOR19FREdFCTEKKworCisjZGVmaW5lCVRJTUVSX1RNMV9DT1VO
VEVSX1JFRwkJMHgwMAorI2RlZmluZQlUSU1FUl9UTTFfTE9BRF9SRUcJCTB4MDQKKyNkZWZpbmUJ
VElNRVJfVE0xX01BVENIMV9SRUcJCTB4MDgKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMl9SRUcJ
CTB4MEMKKworI2RlZmluZQlUSU1FUl9UTTJfQ09VTlRFUl9SRUcJCTB4MTAKKyNkZWZpbmUJVElN
RVJfVE0yX0xPQURfUkVHCQkweDE0CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDFfUkVHCQkweDE4
CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDJfUkVHCQkweDFDCisKKyNkZWZpbmUJVElNRVJfVE1f
Q1JfUkVHCQkweDMwCisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRwkweDM0CisjZGVm
aW5lCVRJTUVSX1RNX0lOVFJfTUFTS19SRUcJCTB4MzgKKworI2RlZmluZQlUSU1FUl9UTV9SRVZJ
U0lPTl9SRUcJCTB4M0MKKworCisjZGVmaW5lCUlOVENfVElNRVIxX0JJVF9JTkRFWAkJMAorCisj
ZGVmaW5lCVRJTUVSMV9VUF9ET1dOX0NPVU5UCQkoMTw8OSkKKyNkZWZpbmUJVElNRVIyX1VQX0RP
V05fQ09VTlQJCSgxPDwxMCkKKworI2RlZmluZQlUSU1FUjFfTUFUQ0gxX0lOVFIJCSgxPDwwKQor
I2RlZmluZQlUSU1FUjFfTUFUQ0gyX0lOVFIJCSgxPDwxKQorI2RlZmluZQlUSU1FUjFfT1ZFUkZM
T1dfSU5UUgkJKDE8PDIpCisKKworI2RlZmluZQlUSU1FUjJfTUFUQ0gxX0lOVFIJCSgxPDwzKQor
I2RlZmluZQlUSU1FUjJfTUFUQ0gyX0lOVFIJCSgxPDw0KQorI2RlZmluZQlUSU1FUjJfT1ZFUkZM
T1dfSU5UUgkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl9DTE9DS19TT1VSQ0VfUENMSwkwCisj
ZGVmaW5lCVRJTUVSX0NMT0NLX1NPVVJDRV9FWFRfQ0xLCTEKKworLyoKKyAqIGRlZmluZSBpbnRl
cnJ1cHQgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCQkwCisj
ZGVmaW5lCUlOVENfRURHRV9UUklHR0VSCQkxCisKKworI2RlZmluZQlJTlRDX1RSSUdHRVJfVU5L
Tk9XTiAtMQorCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDIpCisjZGVm
aW5lCVRJTUVSMl9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDUpCisjZGVmaW5lCVRJTUVSX0lOVEVS
UlVQVF9TVEFUVVNfUkVHCTB4MzQKKworCisjZGVmaW5lCVRJTUVSMV9FTkFCTEUJCQkoMTw8MCkK
KyNkZWZpbmUJVElNRVIxX0NMT0NLX1NPVVJDRQkJKDE8PDEpCisjZGVmaW5lCVRJTUVSMV9PVkVS
RkxPV19FTkFCTEUJCSgxPDwyKQorCisKKyNkZWZpbmUJVElNRVIyX0VOQUJMRQkJCSgxPDwzKQor
I2RlZmluZQlUSU1FUjJfQ0xPQ0tfU09VUkNFCQkoMTw8NCkKKyNkZWZpbmUJVElNRVIyX09WRVJG
TE9XX0VOQUJMRQkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl8xCQkJMQorCisjZGVmaW5lCUVD
X1VBUlRfQ0xPQ0sJCQkxNDc2OTIwMAorI2RlZmluZQlFQ19VQVJUX1JFR1NISUZUCQkyCisKKyNk
ZWZpbmUJU1lTVEVNX0NMT0NLCQkJMHgxNAorI2RlZmluZQlSRVNFVF9DT05UUk9MCQkJMHg0Cisj
ZGVmaW5lCUdMT0JBTF9SRVNFVAkJCTB4MQorI2RlZmluZQlORVRfSU5URVJGQUNFX1JFU0VUCQko
MHgxIDw8IDQpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXZhci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9p
Zl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTEgQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmCV9JRkVDRVZBUl9ICisjZGVmaW5lCV9JRkVDRVZBUl9ICisK
KyNkZWZpbmUJRUNFX01BWF9UWF9CVUZGRVJTCTEyOAorI2RlZmluZQlFQ0VfTUFYX1JYX0JVRkZF
UlMJMTI4CisjZGVmaW5lCU1BWF9GUkFHTUVOVAkJMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8q
IDFzdCAzMkJpdHMgKi8KKwl1aW50MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJ
dWludDMyX3QJCWxlbmd0aDoxNjsKKworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0g
b2ZmbG9hZCovCisJdWludDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1
aW50MzJfdAkJaWNvOjE7IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVf
cG9ydF9tYXAqLworCXVpbnQzMl90CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50
MzJfdAkJZnI6MTsKKwkvKiBmb3JjZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6
MzsKKwkvKiBmb3JjZV9wcmlvcml0eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0
X2JpdCovCisJdWludDMyX3QJCWludGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90
CQlsczoxOworCS8qZmlyc3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICov
CisJdWludDMyX3QJCWVvcjoxOworCS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkv
KiAzcmQgMzJCaXRzKi8KKwkvKnZpZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5z
ZXJ0X3ZpZF90YWcqLworCXVpbnQzMl90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4
Ki8KKwl1aW50MzJfdAkJc2lkOjM7CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMy
X3QJCWluc3M6MTsKKwl1aW50MzJfdAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVp
bnQzMl90CQl1bnVzZWQyOworCit9IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0ewor
CXVpbnQzMl90CQlkYXRhX3B0cjsKKwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQls
NGY6MTsKKwl1aW50MzJfdAkJaXBmOjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJ
aHI6NjsKKwl1aW50MzJfdAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6
MTsKKwl1aW50MzJfdAkJZW9yOjE7CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51
c2VkOworCXVpbnQzMl90CQl1bnVzZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCBy
eF9kZXNjX2luZm8geworCXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsK
KwlldGhfcnhfZGVzY190ICpkZXNjOworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3Ry
dWN0IG1idWYqYnVmZjsKKwlidXNfZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRl
c2M7Cit9OworCisKK3N0cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8q
IGlmbmV0IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAq
LworCXN0cnVjdCBtdHggc2NfbXR4X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNj
X210eF9yeDsJCS8qIHJ4IG11dGV4ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyog
cnggbXV0ZXggKi8KKworCWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1
cyBETUEgdGFnICovCisKKwlkZXZpY2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3Qg
bWlpYnVzOwkJLyogTXkgY2hpbGQgbWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50
ZXJydXB0IGhhbmRsZSAqLworCXZvaWQgKmludHJoYW5kX3FmOwkJLyogcXVldWUgZnVsbCAqLwor
CXZvaWQgKmludHJoYW5kX3R4OwkJLyogdHggY29tcGxldGUgKi8KKwl2b2lkICppbnRyaGFuZF9z
dGF0dXM7CQkvKiBlcnJvciBzdGF0dXMgKi8KKworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190
eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNl
aXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJ
c3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1czsgLyogc3RhdHVzICovCisKKwlzdHJ1Y3Qg
cmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSByZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxv
dXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAqLworCisJc3RydWN0IHRhc2txdWV1ZSAqc2Nf
dHE7CisJc3RydWN0IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBf
dGFzazsKKwlzdHJ1Y3QgdGFzawlzY190eF90YXNrOworCisJYnVzX2RtYW1hcF90CWRtYW1hcF9y
aW5nX3R4OworCWJ1c19kbWFtYXBfdAlkbWFtYXBfcmluZ19yeDsKKwlidXNfZG1hbWFwX3QJcnhf
c3BhcmVtYXA7CisKKwkvKmRtYSB0YWcgZm9yIHJpbmcqLworCWJ1c19kbWFfdGFnX3QJZG1hdGFn
X3JpbmdfdHg7CisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ19yeDsKKworCS8qZG1hIHRhZyBm
b3IgZGF0YSovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfZGF0YV90eDsKKwlidXNfZG1hX3RhZ190
CWRtYXRhZ19kYXRhX3J4OworCisJLyp0aGUgcmluZyovCisJZXRoX3R4X2Rlc2NfdCoJZGVzY190
eDsKKwlldGhfcnhfZGVzY190KglkZXNjX3J4OworCisJLypyaW5nIHBoeXNpY2FsIGFkZHJlc3Mq
LworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl90eDsKKwlidXNfYWRkcl90CXJpbmdfcGFkZHJfcng7
CisKKwkvKmluZGV4IG9mIGxhc3QgcmVjZWl2ZWQgZGVzY3JpcHRvciovCisJdWludDMyX3QgbGFz
dF9yeDsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvIHJ4X2Rlc2NbRUNFX01BWF9SWF9CVUZGRVJTXTsK
KworCS8qIHR4IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBj
b25zdW1lciBpbmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCov
CisJdWludDMyX3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNj
W0VDRV9NQVhfVFhfQlVGRkVSU107Cit9OworCisKK3N0cnVjdCBhcmxfdGFibGVfZW50cnlfdCB7
CisJdWludDMyX3QgY21kX2NvbXBsZXRlOiAxOworCXVpbnQzMl90IHRhYmxlX2VuZDogMTsKKwl1
aW50MzJfdCBzZWFyY2hfbWF0Y2g6IDE7CisJdWludDMyX3QgZmlsdGVyOjE7IC8qaWYgc2V0LCBw
YWNrZXQgd2lsbCBiZSBkcm9wcGVkICovCisJdWludDMyX3Qgdmxhbl9tYWM6MTsgLyppbmRpY2F0
ZXMgdGhhdCB0aGlzIGlzIHRoZSBnYXRld2F5IG1hYyBhZGRyZXNzKi8KKwl1aW50MzJfdCB2bGFu
X2dpZDozOyAvKnZsYW4gaWQqLworCXVpbnQzMl90IGFnZV9maWVsZDozOworCXVpbnQzMl90IHBv
cnRfbWFwOjM7CisJIC8qNDggYml0IG1hYyBhZGRyZXNzKi8KKwl1aW50OF90IG1hY19hZGRyWzZd
OworCXVpbnQ4X3QgcGFkWzJdOworfTsKKworc3RydWN0IG1hY19saXN0eworCWNoYXIgbWFjX2Fk
ZHJbNl07CisJc3RydWN0IG1hY19saXN0ICpuZXh0OworfTsKKworI2VuZGlmCkluZGV4OiBhcm0v
ZWNvbmEvb2hjaV9lYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9vaGNpX2VjLmMJKHJldmlz
aW9uIDApCisrKyBhcm0vZWNvbmEvb2hjaV9lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0
NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz
QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2lu
Y2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8
c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2lu
Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUg
PHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRl
eC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgor
I2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxz
eXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJp
di5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRp
Lmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91
c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUg
PGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIu
aD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRy
b2xsZXIvb2hjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxlci9vaGNpcmVnLmg+CisK
KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5o
PgorCisjZGVmaW5lCU1FTV9SSUQJMAorCitzdGF0aWMgZGV2aWNlX3Byb2JlX3Qgb2hjaV9lY19w
cm9iZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3Qgb2hjaV9lY19hdHRhY2g7CitzdGF0aWMgZGV2
aWNlX2RldGFjaF90IG9oY2lfZWNfZGV0YWNoOworCitzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyB7CisJ
c3RydWN0IG9oY2lfc29mdGMgc2Nfb2hjaTsJLyogbXVzdCBiZSBmaXJzdCAqLworfTsKKworc3Rh
dGljIGludAorb2hjaV9lY19wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNj
KGRldiwgIkVjb25hIGludGVncmF0ZWQgT0hDSSBjb250cm9sbGVyIik7CisJcmV0dXJuIChCVVNf
UFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfYXR0YWNoKGRldmljZV90
IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkv
KiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19vaGNpLnNjX2J1cy5wYXJl
bnQgPSBkZXY7CisJc2MtPnNjX29oY2kuc2NfYnVzLmRldmljZXMgPSBzYy0+c2Nfb2hjaS5zY19k
ZXZpY2VzOworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2VzX21heCA9IE9IQ0lfTUFYX0RFVklD
RVM7CisKKwkvKiBnZXQgYWxsIERNQSBtZW1vcnkgKi8KKwlpZiAodXNiX2J1c19tZW1fYWxsb2Nf
YWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhkZXYpLCAmb2hj
aV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCXNjLT5zY19v
aGNpLnNjX2RldiA9IGRldjsKKworCXJpZCA9IE1FTV9SSUQ7CisKKwlzYy0+c2Nfb2hjaS5zY19p
b19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJICAg
ICZyaWQsIFJGX0FDVElWRSk7CisKKwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pb19yZXMpKSB7CisJ
CWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfaW9fdGFn
ID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9n
ZXRfYnVzaGFuZGxlKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnVzX3NwYWNlX3dyaXRlXzQo
CisJCShzYyktPnNjX29oY2kuc2NfaW9fdGFnLCBic2gsCisJCTB4MDQsIDB4MTQ2KTsKKworCWJ1
c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNoLAorCQkweDQ0
LCAweDAyMDApOworCisJREVMQVkoMTAwMCk7CisKKwlzYy0+c2Nfb2hjaS5zY19pb19zaXplID0g
cm1hbl9nZXRfc2l6ZShzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCisJaWYgKGJ1c19zcGFjZV9z
dWJyZWdpb24oc2MtPnNjX29oY2kuc2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2Mt
PnNjX29oY2kuc2NfaW9fc2l6ZSwgJnNjLT5zY19vaGNpLnNjX2lvX2hkbCkgIT0gMCkKKwkJcGFu
aWMoIiVzOiB1bmFibGUgdG8gc3VicmVnaW9uIFVTQiBob3N0IHJlZ2lzdGVycyIsCisJCSAgICBk
ZXZpY2VfZ2V0X25hbWUoZGV2KSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19vaGNpLnNjX2lycV9y
ZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAg
IFJGX0FDVElWRSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykpIHsKKwkJZ290byBl
cnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYgPSBkZXZpY2VfYWRkX2NoaWxkKGRl
diwgInVzYnVzIiwgLTEpOworCWlmICghKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSkgeworCQln
b3RvIGVycm9yOworCX0KKwlkZXZpY2Vfc2V0X2l2YXJzKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2
LCAmc2MtPnNjX29oY2kuc2NfYnVzKTsKKworCXN0cmxjcHkoc2MtPnNjX29oY2kuc2NfdmVuZG9y
LCAiQ2F2aXVtIiwKKwkJc2l6ZW9mKHNjLT5zY19vaGNpLnNjX3ZlbmRvcikpOworCisjaWYgKF9f
RnJlZUJTRF92ZXJzaW9uID49IDcwMDAzMSkKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNj
LT5zY19vaGNpLnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FG
RSwgIE5VTEwsCisJCQkgICAgIChkcml2ZXJfaW50cl90ICopb2hjaV9pbnRlcnJ1cHQsIHNjLAor
CQkJICAgICAmc2MtPnNjX29oY2kuc2NfaW50cl9oZGwpOworI2Vsc2UKKwllcnIgPSBidXNfc2V0
dXBfaW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9C
SU8gfCBJTlRSX01QU0FGRSwKKwkJCSAgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVw
dCwgc2MsCisJCQkgICAgICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZW5kaWYKKwlpZiAo
ZXJyKSB7CisJCXNjLT5zY19vaGNpLnNjX2ludHJfaGRsID0gTlVMTDsKKwkJZ290byBlcnJvcjsK
Kwl9CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNjLT5zY19v
aGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWVyciA9IG9oY2lfaW5p
dCgmc2MtPnNjX29oY2kpOworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRf
YXR0YWNoKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KTsKKwl9CisJaWYgKGVycikgeworCQlnb3Rv
IGVycm9yOworCX0KKwlyZXR1cm4gKDApOworCitlcnJvcjoKKwlvaGNpX2VjX2RldGFjaChkZXYp
OworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50CitvaGNpX2VjX2RldGFjaChkZXZp
Y2VfdCBkZXYpCit7CisJc3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOworCWRldmljZV90IGJkZXY7CisJaW50IGVycjsKKworCWlmIChzYy0+c2Nfb2hjaS5z
Y19idXMuYmRldikgeworCQliZGV2ID0gc2MtPnNjX29oY2kuc2NfYnVzLmJkZXY7CisJCWRldmlj
ZV9kZXRhY2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBiZGV2KTsKKwl9CisJ
LyogZHVyaW5nIG1vZHVsZSB1bmxvYWQgdGhlcmUgYXJlIGxvdHMgb2YgY2hpbGRyZW4gbGVmdG92
ZXIgKi8KKwlkZXZpY2VfZGVsZXRlX2FsbF9jaGlsZHJlbihkZXYpOworCisJYnVzX3NwYWNlX3dy
aXRlXzQoc2MtPnNjX29oY2kuc2NfaW9fdGFnLCBzYy0+c2Nfb2hjaS5zY19pb19oZGwsCisJICAg
IE9IQ0lfQ09OVFJPTCwgMCk7CisKKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcyAmJiBzYy0+
c2Nfb2hjaS5zY19pbnRyX2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgb2hjaV9kZXRhY2go
KSBhZnRlciBvaGNpX2luaXQoKQorCQkgKi8KKwkJb2hjaV9kZXRhY2goJnNjLT5zY19vaGNpKTsK
KworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMs
CisJCQkJCXNjLT5zY19vaGNpLnNjX2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9o
ZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVs
ZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAwLAorCQkJCSAgICAgc2MtPnNjX29oY2ku
c2NfaXJxX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAo
c2MtPnNjX29oY2kuc2NfaW9fcmVzKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lT
X1JFU19NRU1PUlksIE1FTV9SSUQsCisJCSAgICBzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCQlz
Yy0+c2Nfb2hjaS5zY19pb19yZXMgPSBOVUxMOworCX0KKwl1c2JfYnVzX21lbV9mcmVlX2FsbCgm
c2MtPnNjX29oY2kuc2NfYnVzLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKTsKKworCXJldHVybiAo
MCk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3Qgb2hjaV9tZXRob2RzW10gPSB7CisJLyog
RGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJv
YmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBvaGNpX2VjX2F0dGFjaCksCisJREVWTUVU
SE9EKGRldmljZV9kZXRhY2gsIG9oY2lfZWNfZGV0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX3No
dXRkb3duLCBidXNfZ2VuZXJpY19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJ
REVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJ
ezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3Qgb2hjaV9kcml2ZXIgPSB7CisJIm9oY2kiLAor
CW9oY2lfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjX29oY2lfc29mdGMpLAorfTsKKworc3Rh
dGljIGRldmNsYXNzX3Qgb2hjaV9kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShvaGNpLCBlY29u
YWFybSwgb2hjaV9kcml2ZXIsIG9oY2lfZGV2Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChv
aGNpLCB1c2IsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNv
bmEvdWFydF9jcHVfZWMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyotCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5
cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L3Vh
cnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxz
eXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUg
PGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNl
X2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX21lbTsKKworaW50Cit1YXJ0X2Nw
dV9lcXJlcyhzdHJ1Y3QgdWFydF9iYXMgKmIxLCBzdHJ1Y3QgdWFydF9iYXMgKmIyKQoreworCisJ
cmV0dXJuICgoYjEtPmJzaCA9PSBiMi0+YnNoICYmIGIxLT5ic3QgPT0gYjItPmJzdCkgPyAxIDog
MCk7Cit9CisKK2ludAordWFydF9jcHVfZ2V0ZGV2KGludCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9k
ZXZpbmZvICpkaSkKK3sKKwlzdHJ1Y3QgdWFydF9jbGFzcyAqY2xhc3MgPSAmdWFydF9uczgyNTBf
Y2xhc3M7CisKKwlkaS0+b3BzID0gdWFydF9nZXRvcHMoY2xhc3MpOworCWRpLT5iYXMuY2hhbiA9
IDA7CisJZGktPmJhcy5ic3QgPSBvYmlvX3RhZzsKKworCWlmIChidXNfc3BhY2VfbWFwKGRpLT5i
YXMuYnN0LCBFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLAorCQkJICBFQ09OQV9VQVJU
X1NJWkUsCisJCQkgIDAsICZkaS0+YmFzLmJzaCkgIT0gMCkgeworCQlyZXR1cm4gKEVOWElPKTsK
Kwl9CisKKwlkaS0+YmF1ZHJhdGUgPSAwOworCWRpLT5iYXMucmVnc2hmdCA9IEVDX1VBUlRfUkVH
U0hJRlQ7CisJZGktPmJhcy5yY2xrID0gRUNfVUFSVF9DTE9DSyA7CisJZGktPmRhdGFiaXRzID0g
ODsKKwlkaS0+c3RvcGJpdHMgPSAxOworCWRpLT5wYXJpdHkgPSBVQVJUX1BBUklUWV9OT05FOwor
CXVhcnRfYnVzX3NwYWNlX21lbSA9IG9iaW9fdGFnOworCXVhcnRfYnVzX3NwYWNlX2lvID0gTlVM
TDsKKworCXJldHVybiAoMCk7Cit9CkluZGV4OiBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwkocmV2aXNpb24gMCkKKysrIGFybS9l
Y29uYS91YXJ0X2J1c19lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKi0KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJh
bS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNs
dWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMv
bW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFu
Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQv
dWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3Vh
cnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4KKworc3Rh
dGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRpYyBkZXZpY2VfbWV0
aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURF
Vk1FVEhPRChkZXZpY2VfcHJvYmUsCQl1YXJ0X2VjX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNl
X2F0dGFjaCwJdWFydF9idXNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJdWFy
dF9idXNfZGV0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90IHVhcnRfZWNf
ZHJpdmVyID0geworCXVhcnRfZHJpdmVyX25hbWUsCisJdWFydF9lY19tZXRob2RzLAorCXNpemVv
ZihzdHJ1Y3QgdWFydF9zb2Z0YyksCit9OworCitzdGF0aWMgaW50Cit1YXJ0X2VjX3Byb2JlKGRl
dmljZV90IGRldikKK3sKKwlzdHJ1Y3QJdWFydF9zb2Z0YyAqc2M7CisJaW50IHN0YXR1czsKKwor
CXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5zY19jbGFzcyA9ICZ1YXJ0X25zODI1
MF9jbGFzczsKKwlzdGF0dXMgPSB1YXJ0X2J1c19wcm9iZShkZXYsIEVDX1VBUlRfUkVHU0hJRlQs
IEVDX1VBUlRfQ0xPQ0sgLCAwLCAwKTsKKwlyZXR1cm4gKHN0YXR1cyk7Cit9CisKK0RSSVZFUl9N
T0RVTEUodWFydCwgZWNvbmFhcm0sIHVhcnRfZWNfZHJpdmVyLCB1YXJ0X2RldmNsYXNzLCAwLCAw
KTsKSW5kZXg6IGFybS9lY29uYS9zdGQuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3N0
ZC5lY29uYQkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQgQEAKKyMgJEZyZWVCU0QkCisKK2ZpbGVzCSIuLi9lY29uYS9maWxlcy5l
Y29uYSIKK2NwdQkJQ1BVX0ZBNTI2CittYWtlb3B0aW9ucwlDT05GX0NGTEFHUz0tbWFyY2g9YXJt
djQKK29wdGlvbnMJUEhZU0FERFI9MHgwMDAwMDAwMAorbWFrZW9wdGlvbnMJS0VSTlBIWVNBRERS
PTB4MDEwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCisKK29wdGlv
bnMJS0VSTlBIWVNBRERSPTB4MDEwMDAwMDAKK29wdGlvbnMJS0VSTlZJUlRBRERSPTB4YzEwMDAw
MDAJIyBVc2VkIGluIGxkc2NyaXB0LmFybQorb3B0aW9ucwlGTEFTSEFERFI9MHhEMDAwMDAwMAor
b3B0aW9ucwlMT0FERVJSQU1BRERSPTB4MDAwMDAwMDAKK29wdGlvbnMJU1RBUlRVUF9QQUdFVEFC
TEVfQUREUj0weDAwMTAwMDAwCkluZGV4OiBjb25mL01ha2VmaWxlLmFybQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjb25mL01ha2VmaWxlLmFybQkocmV2aXNpb24gMjAxMzU4KQorKysgY29uZi9NYWtlZmlsZS5h
cm0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAKIAkkUy8kTS8kTS9jcHVmdW5jX2Fz
bV9zYTEuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm0xMC5TIFwKIAkkUy8kTS8kTS9jcHVmdW5j
X2FzbV94c2NhbGUuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbS5TIFwKIAkkUy8kTS8kTS9jcHVmdW5j
X2FzbV94c2NhbGVfYzMuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm12NV9lYy5TIFwKLQkkUy8k
TS8kTS9jcHVmdW5jX2FzbV9zaGVldmEuUworCSRTLyRNLyRNL2NwdWZ1bmNfYXNtX3NoZWV2YS5T
ICRTLyRNLyRNL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKIEtFUk5FTF9FWFRSQT10cmFtcG9saW5lCiBL
RVJORUxfRVhUUkFfSU5TVEFMTD1rZXJuZWwuZ3oudHJhbXAKIHRyYW1wb2xpbmU6ICR7S0VSTkVM
X0tPfS50cmFtcApJbmRleDogY29uZi9vcHRpb25zLmFybQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25mL29w
dGlvbnMuYXJtCShyZXZpc2lvbiAyMDEzNTgpCisrKyBjb25mL29wdGlvbnMuYXJtCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwzICszNiw0IEBACiBBVDkxX0JXQ1QJCW9wdF9hdDkxLmgKIEFUOTFfVFND
CQlvcHRfYXQ5MS5oCiBBVDkxX0tXSUtCWVRFCQlvcHRfYXQ5MS5oCitDUFVfRkE1MjYJCW9wdF9n
bG9iYWwuaApJbmRleDoga2Vybi92ZnNfbW91bnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZXJuL3Zmc19t
b3VudC5jCShyZXZpc2lvbiAyMDEzNTgpCisrKyBrZXJuL3Zmc19tb3VudC5jCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAzLDYgKzE0MDMsMTEgQEAKIAlzdHJ1Y3QgdGltZXZhbCBsYXN0ZmFpbDsKIAlp
bnQgY3VyZmFpbCA9IDA7CiAKKwkvKiB0ZW1wb3Jhcnkgc29sdXRpb24gZm9yIHRpbWVvdXQgd2Fp
dGluZyBmb3IgVVNCIGRpc2sgcm9vdAorCSAqIGZpbGVzeXN0ZW0KKwkgKi8KKwlwYXVzZSgiV0FJ
VCIsIGh6ICogMTApOworCiAJZm9yICg7OykgewogCQlEUk9QX0dJQU5UKCk7CiAJCWdfd2FpdGlk
bGUoKTsK
--0016e64b95e4b77980047c3e7633--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?260bb65e1001030033s9782689xedfd54520c62b01d>