Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Dec 2009 00:48:17 +0700
From:      Yohanes Nugroho <yohanes@gmail.com>
To:        freebsd-arm@freebsd.org
Subject:   Re: CNS11XX FreeBSD port completed
Message-ID:  <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com>
In-Reply-To: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com>
References:  <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001636b2adb14f1efd047b912a10
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hi,

To make it easy for others to read the changes I have made, attached
is the diff version against SVN head. There is one change that may be
should not be commited. In vfs_mount.c, I added

pause("WAIT", hz * 10);

That line can be removed if the patch from this:

http://lists.freebsd.org/pipermail/freebsd-current/2009-October/012361.html

is applied

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


On Fri, Dec 11, 2009 at 9:27 PM, Yohanes Nugroho <yohanes@gmail.com> wrote:
> Hi,
>
> Today I have "completed" the CNS11XX (Cavium Econa ARM formerly known
> as StarSemi STR9104) FreeBSD ARM Port. By "complete" I mean I have
> written all the drivers (usb, network, and flash). I haven't checked
> the correctness of the implementation. The device is a network
> attached storage, Emprex NSD-100, sent to me by Bruce Simpson.
>
> This is my first FreeBSD port, so I think there will be mistakes on my
> code. So I am requesting anyone who have time to have a look at the
> code, or if you have the same device, may be you can try it. You will
> need to solder a serial port to the device to try it.
>
> From the usability point of view, the port is usable. I can put the
> FreeBSD kernel to the flash, and boot it from there with the root
> filesystem on a USB disk (the boot loader also supports booting from
> tftp, and during the development I boot using tftp). The device can
> enter multi user mode, and I can ssh/ftp to the device, and compile
> some things on the device itself.
>
> The only problem left (at least what is visible from user space) is
> the slow network speed (2 megabyte per second, while the linux version
> is around 3.8 megabyte per second). Pyun YongHyeon have helped me a
> lot with the network driver (I am currently asking him to have a final
> look at the driver). I have tried following all of his suggestions to
> make a better (more correct driver), and I suspect the problem is not
> on the network driver itself.
>
> I am suspecting that the problem is in pmap. There has been several
> pmap related problems lately (see
> http://lists.freebsd.org/pipermail/freebsd-arm/2009-October/002030.html).
> It is also possible that the pmap code is now fine, and I have made
> errors when porting the NetBSD CPU code for FA526 to FreeBSD.
>
> If I compile my current code with the latest code from HEAD, and
> activated WITNESS and DIAGNOSTIC i will get the error at err-1.txt,
> and =C2=A0If I activated WITNESS, DIAGNOSTIC and INVARIANT i got this the
> message in err-2.txt. With the same options I didn't get this error
> several months ago .
>
> My code is available at
>
> http://p4db.freebsd.org/depotTreeBrowser.cgi?FSPC=3D//depot/projects/str9=
1xx/src/sys/arm/econa&HIDEDEL=3DNO
>
> plus additional code from to support FA526 CPU adapted from NetBSD:
>
> http://p4db.freebsd.org/fileLogView.cgi?FSPC=3D//depot/projects/str91xx/s=
rc/sys/arm/arm/cpufunc_asm_fa526.S
> http://p4db.freebsd.org/fileViewer.cgi?FSPC=3D//depot/projects/str91xx/sr=
c/sys/arm/arm/cpufunc.c
>
> Instruction to compile, and write to flash using dd to cfi0 is available =
at:
>
> http://tinyhack.com/2009/09/28/cnx11xxstr91xx-freebsd-progress/
> http://tinyhack.com/2009/12/11/cns11xx-freebsd-port-completed/
>
> --
> Regards
> Yohanes
> http://yohan.es/
>

--001636b2adb14f1efd047b912a10
Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx.diff"
Content-Disposition: attachment; filename="cns11xx.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g3n98p8t2

SW5kZXg6IHN5cy9hcm0vYXJtL2VsZl90cmFtcG9saW5lLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Fy
bS9hcm0vZWxmX3RyYW1wb2xpbmUuYwkocmV2aXNpb24gMjAwOTg4KQorKysgc3lzL2FybS9hcm0v
ZWxmX3RyYW1wb2xpbmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmlu
ZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVk
KENQVV9BUk05KQogI2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3di
aW52X2FsbAorI2VsaWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3di
aW52X2FsbAlmYTUyNl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUp
CiAjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2Fs
bAogI2VsaWYgZGVmaW5lZChDUFVfQVJNMTApCkluZGV4OiBzeXMvYXJtL2FybS9jcHVmdW5jLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3lzL2FybS9hcm0vY3B1ZnVuYy5jCShyZXZpc2lvbiAyMDA5ODgpCisr
KyBzeXMvYXJtL2FybS9jcHVmdW5jLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMg
QEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBjcHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9Y
U0NBTEVfODEzNDIgKi8KKworCisjaWYgZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1
bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisJCisJLmNm
X2lkCQkJPSBjcHVmdW5jX2lkLAorCS5jZl9jcHdhaXQJCT0gY3B1ZnVuY19udWxsb3AsCisKKwkv
KiBNTVUgZnVuY3Rpb25zICovCisKKwkuY2ZfY29udHJvbAkJPSBjcHVmdW5jX2NvbnRyb2wsCisJ
LmNmX2RvbWFpbnMJCT0gY3B1ZnVuY19kb21haW5zLAorCS5jZl9zZXR0dGIJCT0gZmE1MjZfc2V0
dHRiLAorCS5jZl9mYXVsdHN0YXR1cwkJPSBjcHVmdW5jX2ZhdWx0c3RhdHVzLAorCS5jZl9mYXVs
dGFkZHJlc3MJPSBjcHVmdW5jX2ZhdWx0YWRkcmVzcywKKworCS8qIFRMQiBmdW5jdGlvbnMgKi8K
KworCS5jZl90bGJfZmx1c2hJRAkJPSBhcm12NF90bGJfZmx1c2hJRCwKKwkuY2ZfdGxiX2ZsdXNo
SURfU0UJPSBmYTUyNl90bGJfZmx1c2hJRF9TRSwKKwkuY2ZfdGxiX2ZsdXNoSQkJPSBhcm12NF90
bGJfZmx1c2hJLAorCS5jZl90bGJfZmx1c2hJX1NFCT0gZmE1MjZfdGxiX2ZsdXNoSV9TRSwKKwku
Y2ZfdGxiX2ZsdXNoRAkJPSBhcm12NF90bGJfZmx1c2hELAorCS5jZl90bGJfZmx1c2hEX1NFCT0g
YXJtdjRfdGxiX2ZsdXNoRF9TRSwKKworCS8qIENhY2hlIG9wZXJhdGlvbnMgKi8KKworCS5jZl9p
Y2FjaGVfc3luY19hbGwJPSBmYTUyNl9pY2FjaGVfc3luY19hbGwsCisJLmNmX2ljYWNoZV9zeW5j
X3JhbmdlCT0gZmE1MjZfaWNhY2hlX3N5bmNfcmFuZ2UsCisKKwkuY2ZfZGNhY2hlX3diaW52X2Fs
bAk9IGZhNTI2X2RjYWNoZV93Ymludl9hbGwsCisJLmNmX2RjYWNoZV93Ymludl9yYW5nZQk9IGZh
NTI2X2RjYWNoZV93Ymludl9yYW5nZSwKKwkuY2ZfZGNhY2hlX2ludl9yYW5nZQk9IGZhNTI2X2Rj
YWNoZV9pbnZfcmFuZ2UsCisJLmNmX2RjYWNoZV93Yl9yYW5nZQk9IGZhNTI2X2RjYWNoZV93Yl9y
YW5nZSwKKworCS5jZl9pZGNhY2hlX3diaW52X2FsbAk9IGZhNTI2X2lkY2FjaGVfd2JpbnZfYWxs
LAorCS5jZl9pZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfaWRjYWNoZV93Ymludl9yYW5nZSwK
KworCisJLmNmX2wyY2FjaGVfd2JpbnZfYWxsID0gY3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2Fj
aGVfd2JpbnZfcmFuZ2UgPSAodm9pZCAqKWNwdWZ1bmNfbnVsbG9wLAorCS5jZl9sMmNhY2hlX2lu
dl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfd2JfcmFuZ2Ug
PSAodm9pZCAqKWNwdWZ1bmNfbnVsbG9wLAorCisKKwkvKiBPdGhlciBmdW5jdGlvbnMgKi8KKwor
CS5jZl9mbHVzaF9wcmVmZXRjaGJ1Zgk9IGZhNTI2X2ZsdXNoX3ByZWZldGNoYnVmLAorCS5jZl9k
cmFpbl93cml0ZWJ1Zgk9IGFybXY0X2RyYWluX3dyaXRlYnVmLAorCS5jZl9mbHVzaF9icm5jaHRn
dF9DCT0gY3B1ZnVuY19udWxsb3AsCisJLmNmX2ZsdXNoX2JybmNodGd0X0UJPSBmYTUyNl9mbHVz
aF9icm5jaHRndF9FLAorCisJLmNmX3NsZWVwCQk9IGZhNTI2X2NwdV9zbGVlcCwKKworCS8qIFNv
ZnQgZnVuY3Rpb25zICovCisKKwkuY2ZfZGF0YWFidF9maXh1cAk9IGNwdWZ1bmNfbnVsbF9maXh1
cCwKKwkuY2ZfcHJlZmV0Y2hhYnRfZml4dXAJPSBjcHVmdW5jX251bGxfZml4dXAsCisKKwkuY2Zf
Y29udGV4dF9zd2l0Y2gJPSBmYTUyNl9jb250ZXh0X3N3aXRjaCwKKworCS5jZl9zZXR1cAkJPSBm
YTUyNl9zZXR1cAorfTsgICAgICAgICAgCisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogLyoK
ICAqIEdsb2JhbCBjb25zdGFudHMgYWxzbyB1c2VkIGJ5IGxvY29yZS5zCiAgKi8KQEAgLTc5Myw2
ICs4NjAsNyBAQAogICBkZWZpbmVkIChDUFVfQVJNOUUpIHx8IGRlZmluZWQgKENQVV9BUk0xMCkg
fHwJCQkgICAgICAgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BV
X1hTQ0FMRV84MDMyMSkgfHwJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFX1BYQTJYMCkg
fHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJICAgICAgIFwKKyAgZGVmaW5lZChDUFVf
RkE1MjYpIHx8CQkJCQkgICAgICAgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMTkpIHx8IGRl
ZmluZWQoQ1BVX1hTQ0FMRV84MTM0MikKIAogc3RhdGljIHZvaWQgZ2V0X2NhY2hldHlwZV9jcDE1
KHZvaWQpOwpAQCAtMTA3Myw2ICsxMTQxLDE5IEBACiAJCWdvdG8gb3V0OwogCX0KICNlbmRpZgkv
KiBDUFVfU0ExMTEwICovCisjaWZkZWYgQ1BVX0ZBNTI2CisJaWYgKGNwdXR5cGUgPT0gQ1BVX0lE
X0ZBNTI2KSB7CisJCWNwdWZ1bmNzID0gZmE1MjZfY3B1ZnVuY3M7CisJCWNwdV9yZXNldF9uZWVk
c192NF9NTVVfZGlzYWJsZSA9IDE7CS8qIFNBIG5lZWRzIGl0CSovCisJCWdldF9jYWNoZXR5cGVf
Y3AxNSgpOworCQlwbWFwX3B0ZV9pbml0X2dlbmVyaWMoKTsKKworCQkvKiBVc2UgcG93ZXJzYXZl
IG9uIHRoaXMgQ1BVLiAqLworCQljcHVfZG9fcG93ZXJzYXZlID0gMTsKKworCQlnb3RvIG91dDsK
Kwl9CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCiAjaWZkZWYgQ1BVX0lYUDEyWDAKICAgICAgICAg
aWYgKGNwdXR5cGUgPT0gQ1BVX0lEX0lYUDEyMDApIHsKICAgICAgICAgICAgICAgICBjcHVmdW5j
cyA9IGl4cDEyeDBfY3B1ZnVuY3M7CkBAIC0xNTQ3LDcgKzE2MjgsOCBAQAogICBkZWZpbmVkKENQ
VV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV84MDMyMSkgfHwJCVwKICAgZGVm
aW5lZChDUFVfWFNDQUxFX1BYQTJYMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJ
CVwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEz
NDIpIHx8IFwKLSAgZGVmaW5lZChDUFVfQVJNMTApIHx8ICBkZWZpbmVkKENQVV9BUk0xMSkKKyAg
ZGVmaW5lZChDUFVfQVJNMTApIHx8ICBkZWZpbmVkKENQVV9BUk0xMSkgfHwgXAorICBkZWZpbmVk
KENQVV9GQTUyNikKIAogI2RlZmluZSBJR04JMAogI2RlZmluZSBPUgkxCkBAIC0yMDEzLDYgKzIw
OTUsNjAgQEAKIH0KICNlbmRpZgkvKiBDUFVfU0ExMTAwIHx8IENQVV9TQTExMTAgKi8KIAorI2lm
IGRlZmluZWQoQ1BVX0ZBNTI2KQorc3RydWN0IGNwdV9vcHRpb24gZmE1MjZfb3B0aW9uc1tdID0g
eworI2lmZGVmIENPTVBBVF8xMgorCXsgIm5vY2FjaGUiLAkJSUdOLCBCSUMsIChDUFVfQ09OVFJP
TF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAibm93cml0ZWJ1ZiIs
CQlJR04sIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKyNlbmRpZgkvKiBDT01QQVRf
MTIgKi8KKwl7ICJjcHUuY2FjaGUiLAkJQklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUg
fCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1Lm5vY2FjaGUiLAlPUiwgIEJJQywg
KENQVV9DT05UUk9MX0lDX0VOQUJMRSB8IENQVV9DT05UUk9MX0RDX0VOQUJMRSkgfSwKKwl7ICJj
cHUud3JpdGVidWYiLAlCSUMsIE9SLCAgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7ICJj
cHUubm93cml0ZWJ1ZiIsCU9SLCAgQklDLCBDUFVfQ09OVFJPTF9XQlVGX0VOQUJMRSB9LAorCXsg
TlVMTCwJCQlJR04sIElHTiwgMCB9Cit9OworCit2b2lkCitmYTUyNl9zZXR1cChjaGFyICphcmdz
KQoreworCWludCBjcHVjdHJsLCBjcHVjdHJsbWFzazsKKworCWNwdWN0cmwgPSBDUFVfQ09OVFJP
TF9NTVVfRU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xf
MzJCRF9FTkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9J
Q19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9F
TkFCTEUgfCBDUFVfQ09OVFJPTF9MQUJUX0VOQUJMRTsKKwljcHVjdHJsbWFzayA9IENQVV9DT05U
Uk9MX01NVV9FTkFCTEUgfCBDUFVfQ09OVFJPTF8zMkJQX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJP
TF8zMkJEX0VOQUJMRSB8IENQVV9DT05UUk9MX1NZU1RfRU5BQkxFCisJCSB8IENQVV9DT05UUk9M
X0lDX0VOQUJMRSB8IENQVV9DT05UUk9MX0RDX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9XQlVG
X0VOQUJMRSB8IENQVV9DT05UUk9MX1JPTV9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfQkVORF9F
TkFCTEUgfCBDUFVfQ09OVFJPTF9BRkxUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9MQUJUX0VO
QUJMRSB8IENQVV9DT05UUk9MX0JQUkRfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0NQQ0xLIHwg
Q1BVX0NPTlRST0xfVkVDUkVMT0M7CisKKyNpZm5kZWYgQVJNMzJfRElTQUJMRV9BTElHTk1FTlRf
RkFVTFRTCisJY3B1Y3RybCB8PSBDUFVfQ09OVFJPTF9BRkxUX0VOQUJMRTsKKyNlbmRpZgorCisJ
Y3B1Y3RybCA9IHBhcnNlX2NwdV9vcHRpb25zKGFyZ3MsIGZhNTI2X29wdGlvbnMsIGNwdWN0cmwp
OworCisjaWZkZWYgX19BUk1FQl9fCisJY3B1Y3RybCB8PSBDUFVfQ09OVFJPTF9CRU5EX0VOQUJM
RTsKKyNlbmRpZgorCisJaWYgKHZlY3Rvcl9wYWdlID09IEFSTV9WRUNUT1JTX0hJR0gpCisJCWNw
dWN0cmwgfD0gQ1BVX0NPTlRST0xfVkVDUkVMT0M7CisKKwkvKiBDbGVhciBvdXQgdGhlIGNhY2hl
ICovCisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgdGhlIGNvbnRyb2wgcmVn
aXN0ZXIgKi8gICAgCisJLy9jdXJjcHUoKS0+Y2lfY3RybCA9IGNwdWN0cmw7CisJY3RybCA9IGNw
dWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9CisjZW5kaWYJLyog
Q1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBzdHJ1Y3QgY3B1X29w
dGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJQklDLCBPUiwgIChD
UFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCkluZGV4OiBz
eXMvYXJtL2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJt
L2NwdWZ1bmNfYXNtX2ZhNTI2LlMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2FybS9jcHVmdW5j
X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOSBAQAorLyoJJE5ldEJTRDog
Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQJ
Ki8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBm
cm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkg
TWF0dCBUaG9tYXMgPG1hdHRAM2FtLXNvZnR3YXJlLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQg
Q09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5E
QVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjZGVmaW5lCUNBQ0hFTElORV9TSVpF
CTE2CisKK0VOVFJZKGZhNTI2X3NldHR0YikKKwltb3YJcjEsICMwCisJbWNyCXAxNSwgMCwgcjEs
IGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCBy
MSwgYzcsIGM1LCAwCS8qIGludmFsaWRhdGUgSSQgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGM1
LCA2CS8qIGludmFsaWRhdGUgQlRCICovCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJLyog
ZHJhaW4gd3JpdGUgYW5kIGZpbGwgYnVmZmVyICovCisKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMw
LCAwCS8qIFdyaXRlIHRoZSBUVEIgKi8gCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRU
QiB3ZSBtdXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCS8q
IGludmFsaWRhdGUgSStEIFRMQiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxpbmUgaXMg
ZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgorCisvKgor
ICogVExCIGZ1bmN0aW9ucworICovCitFTlRSWShmYTUyNl90bGJfZmx1c2hJRF9TRSkKKwltY3IJ
cDE1LCAwLCByMCwgYzgsIGM3LCAxCS8qIGZsdXNoIFV0bGIgc2luZ2xlIGVudHJ5ICovCisJbW92
CXBjLCBscgorCisvKgorICogVExCIGZ1bmN0aW9ucworICovCitFTlRSWShmYTUyNl90bGJfZmx1
c2hJX1NFKQorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzUsIDEJLyogZmx1c2ggSXRsYiBzaW5nbGUg
ZW50cnkgKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2X2NwdV9zbGVlcCkKKwltb3YJcjAs
ICMwCisvKglub3AKKwlub3AqLworCS8vbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNQkvLyBFbnRl
ciBzbGVlcCBtb2RlID8gaW52YWxpZGF0ZSBpc2NyYXRjcGFkIHJhbSovCisJbWNyCXAxNSwgMCwg
cjAsIGM3LCBjMCwgNAkJLyogV2FpdCBmb3IgaW50ZXJydXB0IChJRExFIG1vZGUpCSovCisJbW92
CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1ZikKKwltb3YJcjAsICMwCisJ
bWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2ggZmx1c2ggKi8KKwltb3YJcGMs
IGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfaWRjYWNoZV93
Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCS8qIGNs
ZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkvKiBp
bnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJhaW4gd3Jp
dGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9pY2FjaGVfc3luY19hbGwp
CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJ
JCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX3diaW52X2FsbCkKKwltb3YJ
cjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRh
dGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZm
ZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0aW9ucworICovCitFTlRSWShm
YTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9DX0xBQkVM
KGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpF
LTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisK
KzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQk
IGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJc3VicwlyMSwgcjEsICND
QUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyog
ZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9kY2FjaGVf
d2JfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmxzCTFmCisKKwltb3YJcjAsICMwCisJbWNy
CXAxNSwgMCwgcjAsIGM3LCBjMTAsIDAJLyogY2xlYW4gZW50aXJlIEQkICovCisJYgkzZgorCisx
OglhbmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJ
cjAsIHIwLCAjKENBQ0hFTElORV9TSVpFLTEpCisKKzI6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEw
LCAxCS8qIGNsZWFuIEQkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJ
c3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkyYgorCiszOgltY3IJcDE1LCAwLCBy
MCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VO
VFJZKGZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UpCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0la
RS0xKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQor
CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVu
dHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNI
RUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hl
X3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNh
Y2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJ
cjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAx
NSwgMCwgcjAsIGM3LCBjMTQsIDEJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgZW50cnkgKi8K
KwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCS8qIGludmFsaWRhdGUgSSQgZW50cnkgKi8KKwlh
ZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpF
CisJYmhpCTFiCisKKzI6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRl
IGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfaWNhY2hlX3N5bmNfcmFuZ2Up
CisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2ljYWNoZV9zeW5jX2FsbCkK
KworCWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJcjEsIHIxLCByMgorCWJp
YwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBj
MTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCS8q
IGludmFsaWRhdGUgSSQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlz
dWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKzI6CW1jcglwMTUsIDAsIHIw
LCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworRU5U
UlkoZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRSkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAs
IGM3LCBjNSwgNgkvKiBpbnZhbGlkYXRlIEJUQiBjYWNoZSAqLworCW1vdglwYywgbHIKKworRU5U
UlkoZmE1MjZfY29udGV4dF9zd2l0Y2gpCisJLyoKKwkgKiBDRl9DQUNIRV9QVVJHRV9JRCB3aWxs
ICpBTFdBWVMqIGJlIGNhbGxlZCBwcmlvciB0byB0aGlzLgorCSAqIFRodXMgdGhlIGRhdGEgY2Fj
aGUgd2lsbCBjb250YWluIG9ubHkga2VybmVsIGRhdGEgYW5kIHRoZQorCSAqIGluc3RydWN0aW9u
IGNhY2hlIHdpbGwgY29udGFpbiBvbmx5IGtlcm5lbCBjb2RlLCBhbmQgYWxsCisJICoga2VybmVs
IG1hcHBpbmdzIGFyZSBzaGFyZWQgYnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKworCW1jcglwMTUs
IDAsIHIwLCBjMiwgYzAsIDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1
cGRhdGVkIHRoZSBUVEIgd2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbW92CXIwLCAjMAorCW1j
cglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdGhlIEkrRCB0bGIgKi8KKworCS8qIE1h
a2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVtcHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIw
LCByMAorCW1vdglwYywgbHIKKwpJbmRleDogc3lzL2FybS9pbmNsdWRlL2NwdWNvbmYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvY3B1Y29uZi5oCShyZXZpc2lvbiAyMDA5ODgpCisr
KyBzeXMvYXJtL2luY2x1ZGUvY3B1Y29uZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSArCQkJXAogCQkJIGRlZmluZWQoQ1BV
X1hTQ0FMRV84MDMyMSkgKwkJCVwKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSArCQkJ
XAorCQkJIGRlZmluZWQoQ1BVX0ZBNTI2KSArCQkJCVwKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVf
SVhQNDI1KSkKIAogLyoKQEAgLTY4LDcgKzY5LDcgQEAKICAqLwogI2lmIChkZWZpbmVkKENQVV9B
Uk03VERNSSkgfHwgZGVmaW5lZChDUFVfQVJNOCkgfHwgZGVmaW5lZChDUFVfQVJNOSkgfHwJXAog
ICAgICBkZWZpbmVkKENQVV9TQTExMCkgfHwgZGVmaW5lZChDUFVfU0ExMTAwKSB8fCBkZWZpbmVk
KENQVV9TQTExMTApIHx8IFwKLSAgICBkZWZpbmVkKENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQ
VV9YU0NBTEVfSVhQNDI1KSkKKyAgICAgZGVmaW5lZChDUFVfSVhQMTJYMCkgfHwgZGVmaW5lZChD
UFVfWFNDQUxFX0lYUDQyNSkgfHwgZGVmaW5lZChDUFVfRkE1MjYpKQogI2RlZmluZQlBUk1fQVJD
SF80CTEKICNlbHNlCiAjZGVmaW5lCUFSTV9BUkNIXzQJMApAQCAtMTI1LDcgKzEyNiw3IEBACiAK
ICNpZiAoZGVmaW5lZChDUFVfQVJNNikgfHwgZGVmaW5lZChDUFVfQVJNNykgfHwgZGVmaW5lZChD
UFVfQVJNN1RETUkpIHx8CVwKICAgICAgZGVmaW5lZChDUFVfQVJNOCkgfHwgZGVmaW5lZChDUFVf
QVJNOSkgfHwgZGVmaW5lZChDUFVfQVJNOUUpIHx8CVwKLSAgICAgZGVmaW5lZChDUFVfQVJNMTAp
IHx8IGRlZmluZWQoQ1BVX0FSTTExKSkKKyAgICAgZGVmaW5lZChDUFVfQVJNMTApIHx8IGRlZmlu
ZWQoQ1BVX0FSTTExKSB8fCBkZWZpbmVkKENQVV9GQTUyNikpCiAjZGVmaW5lCUFSTV9NTVVfR0VO
RVJJQwkJMQogI2Vsc2UKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkwCkluZGV4OiBzeXMvYXJt
L2luY2x1ZGUvY3B1ZnVuYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vaW5jbHVkZS9jcHVmdW5j
LmgJKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9hcm0vaW5jbHVkZS9jcHVmdW5jLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4Myw2ICsyODMsMjggQEAKIHVfaW50CWFybThfY2xvY2tfY29uZmlnCSh1
X2ludCwgdV9pbnQpOwogI2VuZGlmCiAKKworI2lmZGVmIENQVV9GQTUyNgordm9pZAlmYTUyNl9z
ZXR1cAkJKGNoYXIgKmFyZyk7Cit2b2lkCWZhNTI2X3NldHR0YgkJKHVfaW50IHR0Yik7Cit2b2lk
CWZhNTI2X2NvbnRleHRfc3dpdGNoCSh2b2lkKTsKK3ZvaWQJZmE1MjZfY3B1X3NsZWVwCQkoaW50
KTsKK3ZvaWQJZmE1MjZfdGxiX2ZsdXNoSV9TRQkodV9pbnQpOwordm9pZAlmYTUyNl90bGJfZmx1
c2hJRF9TRQkodV9pbnQpOwordm9pZAlmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1Zgkodm9pZCk7Cit2
b2lkCWZhNTI2X2ZsdXNoX2JybmNodGd0X0UJKHVfaW50KTsKKwordm9pZAlmYTUyNl9pY2FjaGVf
c3luY19hbGwJKHZvaWQpOwordm9pZAlmYTUyNl9pY2FjaGVfc3luY19yYW5nZSh2bV9vZmZzZXRf
dCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9hbGwJKHZv
aWQpOwordm9pZAlmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2Uodm1fb2Zmc2V0X3Qgc3RhcnQsIHZt
X3NpemVfdCBlbmQpOwordm9pZAlmYTUyNl9kY2FjaGVfaW52X3JhbmdlCSh2bV9vZmZzZXRfdCBz
dGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Yl9yYW5nZQkodm1fb2Zm
c2V0X3Qgc3RhcnQsIHZtX3NpemVfdCBlbmQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X2Fs
bCh2b2lkKTsKK3ZvaWQJZmE1MjZfaWRjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZzZXRfdCBzdGFy
dCwgdm1fc2l6ZV90IGVuZCk7CisjZW5kaWYKKworCiAjaWZkZWYgQ1BVX1NBMTEwCiB2b2lkCXNh
MTEwX3NldHVwCQkoY2hhciAqc3RyaW5nKTsKIHZvaWQJc2ExMTBfY29udGV4dF9zd2l0Y2gJKHZv
aWQpOwpAQCAtNDQ1LDYgKzQ2Nyw3IEBACiAjaWYgZGVmaW5lZChDUFVfQVJNOSkgfHwgZGVmaW5l
ZChDUFVfQVJNOUUpIHx8IGRlZmluZWQoQ1BVX0FSTTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1NB
MTEwKSB8fCBkZWZpbmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAog
ICBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV84MDMyMSkg
fHwJICAgICBcCisgICAgZGVmaW5lZChDUFVfRkE1MjYpIHx8IFwKICAgZGVmaW5lZChDUFVfWFND
QUxFX1BYQTJYMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFX0lYUDQyNSkgfHwJICAgICBcCiAgIGRl
ZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwgZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKQogICAK
SW5kZXg6IHN5cy9hcm0vZWNvbmEvZWNvbmFfdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9l
Y29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvZWNvbmFfdmFy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAy
MDA5IFlvaGFuZXMgTnVncm9obyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVJNX0VDT05B
X1ZBUl9ICisjZGVmaW5lIF9BUk1fRUNPTkFfVkFSX0gKKworZXh0ZXJuIGJ1c19zcGFjZV90YWdf
dCBvYmlvX3RhZzsKKworc3RydWN0IGVjb25hX3NvZnRjIHsKKwlkZXZpY2VfdCBkZXY7CisJYnVz
X3NwYWNlX3RhZ190IHNjX3N0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19zaDsKKwlidXNfc3Bh
Y2VfaGFuZGxlX3Qgc2Nfc3lzX3NoOworCXN0cnVjdCBybWFuIHNjX2lycV9ybWFuOworCXN0cnVj
dCBybWFuIHNjX21lbV9ybWFuOworfTsKKworc3RydWN0IGVjb25hX2l2YXIgeworCXN0cnVjdCBy
ZXNvdXJjZV9saXN0IHJlc291cmNlczsKK307CisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29u
YS9maWxlcy5lY29uYQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShy
ZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNCBAQAorIyAkRnJlZUJTRCAkCithcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMJ
c3RhbmRhcmQKK2FybS9lY29uYS9lY29uYV9tYWNoZGVwLmMJCXN0YW5kYXJkCithcm0vZWNvbmEv
ZWNvbmEuYwkJCXN0YW5kYXJkCithcm0vZWNvbmEvdGltZXIuYwkJCXN0YW5kYXJkCithcm0vZWNv
bmEvdWFydF9idXNfZWMuYwkJb3B0aW9uYWwJdWFydAorYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJ
CW9wdGlvbmFsCXVhcnQKK2Rldi91YXJ0L3VhcnRfZGV2X25zODI1MC5jCW9wdGlvbmFsCXVhcnQK
K2FybS9hcm0vaXJxX2Rpc3BhdGNoLlMJCXN0YW5kYXJkCithcm0vYXJtL2J1c19zcGFjZV9nZW5l
cmljLmMJCXN0YW5kYXJkCithcm0vZWNvbmEvZWhjaV9lYnVzLmMJc3RhbmRhcmQJZWhjaQorYXJt
L2Vjb25hL29oY2lfZWMuYwlzdGFuZGFyZAlvaGNpCithcm0vZWNvbmEvaWZfZWNlLmMJCXN0YW5k
YXJkCithcm0vZWNvbmEvY2ZpX2J1c19lY29uYS5jCQlvcHRpb25hbAljZmkKSW5kZXg6IHN5cy9h
cm0vZWNvbmEvZWNvbmFfbWFjaGRlcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vZWNvbmEvZWNv
bmFfbWFjaGRlcC5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS9lY29uYV9tYWNoZGVw
LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAwOSBZb2hhbmVzIE51Z3JvaG8KKyAqIENvcHlyaWdodCAoYykgMTk5NC0xOTk4IE1hcmsgQnJp
bmljb21iZS4KKyAqIENvcHlyaWdodCAoYykgMTk5NCBCcmluaS4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVu
IGZvciBCcmluaSBieSBNYXJrIEJyaW5pY29tYmUKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRp
c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2Fy
ZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICog
ICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEJyaW5pLgor
ICogNC4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Ig
bWF5IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgKiAgICBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBCUklOSSBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgQlJJTkkgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgIm9wdF9t
c2didWYuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIp
OworCisjZGVmaW5lIF9BUk0zMl9CVVNfRE1BX1BSSVZBVEUKKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNp
bmNsdWRlIDxzeXMvc2lnbmFsdmFyLmg+CisjaW5jbHVkZSA8c3lzL2ltZ2FjdC5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+CisjaW5jbHVkZSA8c3lzL2xp
bmtlci5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgor
I2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8
c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL2NvbnMu
aD4KKyNpbmNsdWRlIDxzeXMvYmlvLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg
PHN5cy9idWYuaD4KKyNpbmNsdWRlIDxzeXMvZXhlYy5oPgorI2luY2x1ZGUgPHN5cy9rZGIuaD4K
KyNpbmNsdWRlIDxzeXMvbXNnYnVmLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZWcuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL2NwdS5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS9w
bWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fb2JqZWN0Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5o
PgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2VyLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5j
bHVkZSA8dm0vdm5vZGVfcGFnZXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BtYXAuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BjYi5oPgorI2luY2x1
ZGUgPG1hY2hpbmUvdW5kZWZpbmVkLmg+CisjaW5jbHVkZSA8bWFjaGluZS9tYWNoZGVwLmg+Cisj
aW5jbHVkZSA8bWFjaGluZS9tZXRhZGF0YS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXJtcmVnLmg+
CisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvcmVib290Lmg+CisjaW5j
bHVkZSAiZWNvbmFfcmVnLmgiCisKKyNkZWZpbmUgS0VSTkVMX1BUX1NZUwkJMAkvKiBQYWdlIHRh
YmxlIGZvciBtYXBwaW5nIHByb2MwIHplcm8gcGFnZSAqLworI2RlZmluZSBLRVJORUxfUFRfS0VS
TgkJMQorI2RlZmluZSBLRVJORUxfUFRfS0VSTl9OVU0JMjIKKyNkZWZpbmUgS0VSTkVMX1BUX0FG
S0VSTkVMCUtFUk5FTF9QVF9LRVJOICsgS0VSTkVMX1BUX0tFUk5fTlVNCS8qIEwyIHRhYmxlIGZv
ciBtYXBwaW5nIGFmdGVyIGtlcm5lbCAqLworI2RlZmluZQlLRVJORUxfUFRfQUZLRVJORUxfTlVN
CTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlzYWJsZSBieSBQQUdFX1NJWkUgLyBM
Ml9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5lIE5VTV9LRVJORUxfUFRTCQkoS0VS
TkVMX1BUX0FGS0VSTkVMICsgS0VSTkVMX1BUX0FGS0VSTkVMX05VTSkKKworLyogRGVmaW5lIHZh
cmlvdXMgc3RhY2sgc2l6ZXMgaW4gcGFnZXMgKi8KKyNkZWZpbmUgSVJRX1NUQUNLX1NJWkUJMQor
I2RlZmluZSBBQlRfU1RBQ0tfU0laRQkxCisjZGVmaW5lIFVORF9TVEFDS19TSVpFCTEKKworZXh0
ZXJuIHVfaW50IGRhdGFfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVfaW50IHByZWZl
dGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzczsKK2V4dGVybiB1X2ludCB1bmRlZmluZWRfaGFuZGxl
cl9hZGRyZXNzOworCitzdHJ1Y3QgcHZfYWRkciBrZXJuZWxfcHRfdGFibGVbTlVNX0tFUk5FTF9Q
VFNdOworCitleHRlcm4gdm9pZCAqX2VuZDsKKworZXh0ZXJuIGludCAqZW5kOworCitzdHJ1Y3Qg
cGNwdSBfX3BjcHU7CitzdHJ1Y3QgcGNwdSAqcGNwdXAgPSAmX19wY3B1OworCisvKiBQaHlzaWNh
bCBhbmQgdmlydHVhbCBhZGRyZXNzZXMgZm9yIHNvbWUgZ2xvYmFsIHBhZ2VzICovCisKK3ZtX3Bh
ZGRyX3QgcGh5c19hdmFpbFsxMF07Cit2bV9wYWRkcl90IGR1bXBfYXZhaWxbNF07Cit2bV9vZmZz
ZXRfdCBwaHlzaWNhbF9wYWdlczsKKworc3RydWN0IHB2X2FkZHIgc3lzdGVtcGFnZTsKK3N0cnVj
dCBwdl9hZGRyIG1zZ2J1ZnB2Oworc3RydWN0IHB2X2FkZHIgaXJxc3RhY2s7CitzdHJ1Y3QgcHZf
YWRkciB1bmRzdGFjazsKK3N0cnVjdCBwdl9hZGRyIGFidHN0YWNrOworc3RydWN0IHB2X2FkZHIg
a2VybmVsc3RhY2s7CisKK3N0YXRpYyB2b2lkICpib290X2FyZzE7CitzdGF0aWMgdm9pZCAqYm9v
dF9hcmcyOworCitzdGF0aWMgc3RydWN0IHRyYXBmcmFtZSBwcm9jMF90ZjsKKworLyogU3RhdGlj
IGRldmljZSBtYXBwaW5ncy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1hcF9kZXZtYXAgZWNv
bmFfZGV2bWFwW10gPSB7CisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMgRERSIFNEUkFNCisJCSAq
LworCQkweDQwMDAwMDAwLCAvKnZpcnR1YWwqLworCQkweDQwMDAwMDAwLCAvKnBoeXNpY2FsKi8K
KwkJMHgxMDAwMDAwLCAvKnNpemUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJ
UFRFX05PQ0FDSEUsCisJfSwKKwkvKgorCSAqIE1hcCB0aGUgb24tYm9hcmQgZGV2aWNlcyBWQSA9
PSBQQSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbQorCSAqIHdpdGggdGhlIE1NVSBvbiBvciBv
ZmYuCisJICovCisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMgdGhlIGludGVycnVwdCBjb250cm9s
bGVyLCB0aGUgVUFSVAorCQkgKiBhbmQgdGhlIHRpbWVyLgorCQkgKi8KKwkJMHg3MDAwMDAwMCwg
Lyp2aXJ0dWFsKi8KKwkJMHg3MDAwMDAwMCwgLypwaHlzaWNhbCovCisJCTB4RTAwMDAwMCwgLypz
aXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0s
CisJeworCQkvKgorCQkgKiBPSENJICsgRUhDSQorCQkgKi8KKwkJRUNPTkFfT0hDSV9WQkFTRSwg
Lyp2aXJ0dWFsKi8KKwkJRUNPTkFfT0hDSV9QQkFTRSwgLypwaHlzaWNhbCovCisJCUVDT05BX1VT
Ql9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05P
Q0FDSEUsCisJfSwKKwl7CisJCS8qCisJCSAqIE5FVAorCQkgKi8KKwkJRUNPTkFfTkVUX1ZCQVNF
LCAvKnZpcnR1YWwqLworCQlFQ09OQV9ORVRfUEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9O
RVRfU0laRSwgLypzaXplIDE2TSovCisJCVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQ
VEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJLyoKKwkJICogQ0ZJCisJCSAqLworCQlFQ09OQV9DRklf
VkJBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX0NGSV9QQkFTRSwgLypwaHlzaWNhbCovCisJCUVD
T05BX0NGSV9TSVpFLCAvKnNpemUgMTZNKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUs
CisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAor
CX0KK307CisKKwordm9pZCAqCitpbml0YXJtKHZvaWQgKmFyZywgdm9pZCAqYXJnMikKK3sKKwlz
dHJ1Y3QgcHZfYWRkciAga2VybmVsX2wxcHQ7CisJaW50IGxvb3AsIGk7CisJdV9pbnQgbDFwYWdl
dGFibGU7CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47
CisJdWludDMyX3QgbWVtc2l6ZTsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl2b2xhdGlsZSB1
aW50MzJfdCAqIGRkciA9ICh1aW50MzJfdCAqKTB4NDAwMDAwMEM7CisKKwlib290X2FyZzEgPSBh
cmc7CisJYm9vdF9hcmcyID0gYXJnMjsKKwlib290aG93dG8gPSBSQl9WRVJCT1NFOworCWJvb3Ro
b3d0byB8PSAgUkJfU0lOR0xFOworCisJc2V0X2NwdWZ1bmNzKCk7CisJbGFzdGFkZHIgPSBmYWtl
X3ByZWxvYWRfbWV0YWRhdGEoKTsKKwlwY3B1X2luaXQocGNwdXAsIDAsIHNpemVvZihzdHJ1Y3Qg
cGNwdSkpOworCVBDUFVfU0VUKGN1cnRocmVhZCwgJnRocmVhZDApOworCisKKwlmcmVlbWVtcG9z
ID0gKGxhc3RhZGRyICsgUEFHRV9NQVNLKSAmIH5QQUdFX01BU0s7CisJLyogRGVmaW5lIGEgbWFj
cm8gdG8gc2ltcGxpZnkgbWVtb3J5IGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgdmFsbG9jX3BhZ2Vz
KHZhciwgbnApICAgICAgICAgICAgICAgICAgIFwKKwlhbGxvY19wYWdlcygodmFyKS5wdl92YSwg
KG5wKSk7ICAgICAgICAgXAorCSh2YXIpLnB2X3BhID0gKHZhcikucHZfdmEgKyAoS0VSTlBIWVNB
RERSIC0gS0VSTlZJUlRBRERSKTsKKworI2RlZmluZSBhbGxvY19wYWdlcyh2YXIsIG5wKQkJCVwK
KwkodmFyKSA9IGZyZWVtZW1wb3M7CQlcCisJZnJlZW1lbXBvcyArPSAobnAgKiBQQUdFX1NJWkUp
OwkJXAorCW1lbXNldCgoY2hhciAqKSh2YXIpLCAwLCAoKG5wKSAqIFBBR0VfU0laRSkpOworCisJ
d2hpbGUgKCgoZnJlZW1lbXBvcyAtIEwxX1RBQkxFX1NJWkUpICYgKEwxX1RBQkxFX1NJWkUgLSAx
KSkgIT0gMCkKKwkJZnJlZW1lbXBvcyArPSBQQUdFX1NJWkU7CisJdmFsbG9jX3BhZ2VzKGtlcm5l
bF9sMXB0LCBMMV9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKTsKKwlmb3IgKGxvb3AgPSAwOyBsb29w
IDwgTlVNX0tFUk5FTF9QVFM7ICsrbG9vcCkgeworCQlpZiAoIShsb29wICUgKFBBR0VfU0laRSAv
IEwyX1RBQkxFX1NJWkVfUkVBTCkpKSB7CisJCQl2YWxsb2NfcGFnZXMoa2VybmVsX3B0X3RhYmxl
W2xvb3BdLAorCQkJICAgIEwyX1RBQkxFX1NJWkUgLyBQQUdFX1NJWkUpOworCQl9IGVsc2Ugewor
CQkJa2VybmVsX3B0X3RhYmxlW2xvb3BdLnB2X3ZhID0gZnJlZW1lbXBvcyAtCisJCQkgICAgKGxv
b3AgJSAoUEFHRV9TSVpFIC8gTDJfVEFCTEVfU0laRV9SRUFMKSkgKgorCQkJICAgIEwyX1RBQkxF
X1NJWkVfUkVBTDsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSA9CisJCQkgICAga2Vy
bmVsX3B0X3RhYmxlW2xvb3BdLnB2X3ZhIC0gS0VSTlZJUlRBRERSICsKKwkJCSAgICBLRVJOUEhZ
U0FERFI7CisJCX0KKwkJaSsrOworCX0KKworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIHBhZ2UgZm9y
IHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAKKwkgKiBUaGlzIHBhZ2Ugd2ls
bCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBjYW4gYmUKKwkgKiBzaGFyZWQg
YnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMoc3lzdGVtcGFnZSwgMSk7CisK
KwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLworCXZhbGxvY19wYWdlcyhpcnFz
dGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhhYnRzdGFjaywgQUJUX1NUQUNL
X1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NUQUNLX1NJWkUpOworCXZhbGxv
Y19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2YWxsb2NfcGFnZXMobXNnYnVm
cHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpFKTsKKworCS8qCisJICogTm93
IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0YWJsZQorCSAqIFdlIHN0YXJ0
IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhlIEwxLgorCSAqIFRoaXMgbWVh
bnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRlciBvbiBpZiBuZWNlc3NhcnkK
KwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3ZhOworCisJLyogTWFwIHRoZSBM
MiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8KKwlwbWFwX2xpbmtfbDJwdChs
MXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJO
RUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9QVF9LRVJOX05VTTsgaSsrKQor
CQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0UgKyBpICogTDFfU19TSVpFLAor
CQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiArIGldKTsKKwlwbWFwX21hcF9j
aHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAorCSAgICgoKHVpbnQzMl90KWxh
c3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFHRV9TSVpFIC0gMSksCisJICAg
IFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCWFmdGVya2VybiA9IHJv
dW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFfU19TSVpFIC0gMSkpOworCWZv
ciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBpKyspIHsKKwkJcG1hcF9saW5r
X2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9TX1NJWkUsCisJCSAgICAma2Vy
bmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsKKwl9CisKKwkvKiBNYXAgdGhl
IHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFnZXRhYmxlLCBBUk1fVkVDVE9S
U19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklU
RSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBwYWdlcyAqLworCXBtYXBfbWFw
X2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJxc3RhY2sucHZfcGEsCisJICAg
IElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwg
UFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgYWJ0c3RhY2sucHZfdmEs
IGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1fUFJP
VF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdl
dGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwKKwkgICAgVU5EX1NUQUNLX1NJ
WkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOwor
CXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFjay5wdl92YSwga2VybmVsc3Rh
Y2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZN
X1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwg
a2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAorCSAgICBMMV9UQUJMRV9TSVpF
LCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VUQUJMRSk7CisJcG1hcF9tYXBf
Y2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2didWZwdi5wdl9wYSwKKwkgICAg
TVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJ
Zm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJcG1hcF9t
YXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSwKKwkJICAg
IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVfU0laRSwKKwkJICAgIFZNX1BS
T1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsKKwl9CisKKworCXBtYXBfZGV2
bWFwX2Jvb3RzdHJhcChsMXBhZ2V0YWJsZSwgZWNvbmFfZGV2bWFwKTsKKworCWNwdV9kb21haW5z
KChET01BSU5fQ0xJRU5UIDw8IChQTUFQX0RPTUFJTl9LRVJORUwqMikpIHwgRE9NQUlOX0NMSUVO
VCk7CisKKwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCisJY3B1X3RsYl9mbHVzaElEKCk7
CisKKwljcHVfZG9tYWlucyhET01BSU5fQ0xJRU5UIDw8IChQTUFQX0RPTUFJTl9LRVJORUwqMikp
OworCisJY25pbml0KCk7CisKKwltZW1zaXplID0gMzIqMTAyNCoxMDI0OworCisJc3dpdGNoICgo
KCpkZHIpID4+IDQpICYgMHgzKSB7CisJY2FzZSAwOgorCQltZW1zaXplID0gOCoxMDI0KjEwMjQ7
CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWVtc2l6ZSA9IDE2KjEwMjQqMTAyNDsKKwkJYnJlYWs7
CisJY2FzZSAyOgorCQltZW1zaXplID0gMzIqMTAyNCoxMDI0OworCQlicmVhazsKKwljYXNlIDM6
CisJCW1lbXNpemUgPSA2NCoxMDI0KjEwMjQ7CisJCWJyZWFrOworCX0KKworCisJcGh5c21lbSA9
IG1lbXNpemUgLyBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFBhZ2VzIHdlcmUgYWxsb2NhdGVkIGR1
cmluZyB0aGUgc2Vjb25kYXJ5IGJvb3RzdHJhcCBmb3IgdGhlCisJICogc3RhY2tzIGZvciBkaWZm
ZXJlbnQgQ1BVIG1vZGVzLgorCSAqIFdlIG11c3Qgbm93IHNldCB0aGUgcjEzIHJlZ2lzdGVycyBp
biB0aGUgZGlmZmVyZW50IENQVSBtb2RlcyB0bworCSAqIHBvaW50IHRvIHRoZXNlIHN0YWNrcy4K
KwkgKiBTaW5jZSB0aGUgQVJNIHN0YWNrcyB1c2UgU1RNRkQgZXRjLiB3ZSBtdXN0IHNldCByMTMg
dG8gdGhlIHRvcCBlbmQKKwkgKiBvZiB0aGUgc3RhY2sgbWVtb3J5LgorCSAqLworCWNwdV9jb250
cm9sKENQVV9DT05UUk9MX01NVV9FTkFCTEUsIENQVV9DT05UUk9MX01NVV9FTkFCTEUpOworCisJ
c2V0X3N0YWNrcHRyKFBTUl9JUlEzMl9NT0RFLAorCSAgICBpcnFzdGFjay5wdl92YSArIElSUV9T
VEFDS19TSVpFICogUEFHRV9TSVpFKTsKKwlzZXRfc3RhY2twdHIoUFNSX0FCVDMyX01PREUsCisJ
ICAgIGFidHN0YWNrLnB2X3ZhICsgQUJUX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpOworCXNldF9z
dGFja3B0cihQU1JfVU5EMzJfTU9ERSwKKwkgICAgdW5kc3RhY2sucHZfdmEgKyBVTkRfU1RBQ0tf
U0laRSAqIFBBR0VfU0laRSk7CisKKwkvKgorCSAqIFdlIG11c3Qgbm93IGNsZWFuIHRoZSBjYWNo
ZSBhZ2Fpbi4uLi4KKwkgKiBDbGVhbmluZyBtYXkgYmUgZG9uZSBieSByZWFkaW5nIG5ldyBkYXRh
IHRvIGRpc3BsYWNlIGFueQorCSAqIGRpcnR5IGRhdGEgaW4gdGhlIGNhY2hlLiBUaGlzIHdpbGwg
aGF2ZSBoYXBwZW5lZCBpbiBzZXR0dGIoKQorCSAqIGJ1dCBzaW5jZSB3ZSBhcmUgYm9vdCBzdHJh
cHBpbmcgdGhlIGFkZHJlc3NlcyB1c2VkIGZvciB0aGUgcmVhZAorCSAqIG1heSBoYXZlIGp1c3Qg
YmVlbiByZW1hcHBlZCBhbmQgdGh1cyB0aGUgY2FjaGUgY291bGQgYmUgb3V0CisJICogb2Ygc3lu
Yy4gQSByZS1jbGVhbiBhZnRlciB0aGUgc3dpdGNoIHdpbGwgY3VyZSB0aGlzLgorCSAqIEFmdGVy
IGJvb3RpbmcgdGhlcmUgYXJlIG5vIGdyb3NzIHJlbG9jYXRpb25zIG9mIHRoZSBrZXJuZWwgdGh1
cworCSAqIHRoaXMgcHJvYmxlbSB3aWxsIG5vdCBvY2N1ciBhZnRlciBpbml0YXJtKCkuCisJICov
CisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgc3RhY2sgZm9yIGV4Y2VwdGlv
biBoYW5kbGVycyAqLworCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0
YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2lu
dClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAo
dV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisK
Kwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBr
ZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0
aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVh
ZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7
CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisKKwlhcm1fdmVjdG9yX2lu
aXQoQVJNX1ZFQ1RPUlNfSElHSCwgQVJNX1ZFQ19BTEwpOworCisJcG1hcF9jdXJtYXhrdmFkZHIg
PSBhZnRlcmtlcm4gKyBMMV9TX1NJWkUgKiAoS0VSTkVMX1BUX0tFUk5fTlVNIC0gMSk7CisKKwkv
KgorCSAqIEFSTV9VU0VfU01BTExfQUxMT0MgdXNlcyBkdW1wX2F2YWlsLCBzbyBpdCBtdXN0IGJl
IGZpbGxlZCBiZWZvcmUKKwkgKiBjYWxsaW5nIHBtYXBfYm9vdHN0cmFwLgorCSAqLworCWR1bXBf
YXZhaWxbMF0gPSBQSFlTQUREUjsKKwlkdW1wX2F2YWlsWzFdID0gUEhZU0FERFIgKyBtZW1zaXpl
OworCWR1bXBfYXZhaWxbMl0gPSAwOworCWR1bXBfYXZhaWxbM10gPSAwOworCisJcG1hcF9ib290
c3RyYXAoZnJlZW1lbXBvcywKKwkgICAgS0VSTlZJUlRBRERSICsgMyAqIG1lbXNpemUsCisJICAg
ICZrZXJuZWxfbDFwdCk7CisKKwltc2didWZwID0gKHZvaWQqKW1zZ2J1ZnB2LnB2X3ZhOworCW1z
Z2J1ZmluaXQobXNnYnVmcCwgTVNHQlVGX1NJWkUpOworCisJbXV0ZXhfaW5pdCgpOworCisJaSA9
IDA7CisjaWYgUEhZU0FERFIgIT0gS0VSTlBIWVNBRERSCisJcGh5c19hdmFpbFtpKytdID0gUEhZ
U0FERFI7CisJcGh5c19hdmFpbFtpKytdID0gS0VSTlBIWVNBRERSOworI2VuZGlmCisJcGh5c19h
dmFpbFtpKytdID0gdmlydHVhbF9hdmFpbCAtIEtFUk5WSVJUQUREUiArIEtFUk5QSFlTQUREUjsK
KworCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlwaHlzX2F2YWlsW2kr
K10gPSAwOworCXBoeXNfYXZhaWxbaSsrXSA9IDA7CisJLyogRG8gYmFzaWMgdHVuaW5nLCBoeiBl
dGMgKi8KKwlpbml0X3BhcmFtMSgpOworCWluaXRfcGFyYW0yKHBoeXNtZW0pOworCWtkYl9pbml0
KCk7CisKKwlyZXR1cm4gKCh2b2lkICopKGtlcm5lbHN0YWNrLnB2X3ZhICsgVVNQQUNFX1NWQ19T
VEFDS19UT1AgLQorCSAgICBzaXplb2Yoc3RydWN0IHBjYikpKTsKK30KSW5kZXg6IHN5cy9hcm0v
ZWNvbmEvaWZfZWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9pZl9lY2UuYwkocmV2
aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvaWZfZWNlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjA2MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2FybS9lY29u
YS9pZl9lY2UuYyQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9z
eXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+Cisj
aW5jbHVkZSA8c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8
c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Cisj
aW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNp
bmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxu
ZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21l
ZGlhLmg+CisjaW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5f
dmFyLmg+CisKKyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUg
PG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1
ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1
ZGUgPG5ldC9icGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUg
PGRldi9taWkvbWlpdmFyLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXJlZy5oPgorI2lu
Y2x1ZGUgPGFybS9lY29uYS9pZl9lY2V2YXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4K
KworI2luY2x1ZGUgIm1paWJ1c19pZi5oIgorCitzdGF0aWMgdWludDhfdCBteV92bGFuMF9tYWNb
RVRIRVJfQUREUl9MRU5dID0geyAweDAwLCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweDE5IH07
CisKKworLypib290IGxvYWRlciBleHBlY3RzIHRoZSBoYXJkd2FyZSBzdGF0ZSB0byBiZSB0aGUg
c2FtZSovCitpbnQgaW5pdGlhbF9zd2l0Y2hfY29uZmlnOworaW50IGluaXRpYWxfY3B1X2NvbmZp
ZzsKK2ludCBpbml0aWFsX3BvcnQwX2NvbmZpZzsKK2ludCBpbml0aWFsX3BvcnQxX2NvbmZpZzsK
KworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitSRDQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1
c19zaXplX3Qgb2ZmKQoreworCXJldHVybiBidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1dSNChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgYnVzX3Np
emVfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlidXNfd3JpdGVfNChzYy0+bWVtX3Jlcywgb2Zm
LCB2YWwpOworfQorCisjZGVmaW5lIEVDRV9MT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2Nf
bXR4KQorI2RlZmluZQlFQ0VfVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHgp
CisjZGVmaW5lIEVDRV9MT0NLX0lOSVQoX3NjKSBcCisJbXR4X2luaXQoJl9zYy0+c2NfbXR4LCBk
ZXZpY2VfZ2V0X25hbWV1bml0KF9zYy0+ZGV2KSwgXAorCSAgICBNVFhfTkVUV09SS19MT0NLLCBN
VFhfREVGKQorCisKKyNkZWZpbmUgRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj
X210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z
Y19tdHhfdHgpCisjZGVmaW5lIEVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj
LT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLCBcCisJICAgICJFQ0Ug
VFggTG9jayIsIE1UWF9ERUYpCisKKworI2RlZmluZSBFQ0VfQ0xFQU5VUExPQ0soX3NjKQkJbXR4
X2xvY2soJihfc2MpLT5zY19tdHhfY2xlYW51cCkKKyNkZWZpbmUJRUNFX0NMRUFOVVBVTkxPQ0so
X3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZSBFQ0VfQ0xF
QU5VUExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2
aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksIFwKKwkgICAgIkVDRSBjbGVhbnVwIExvY2siLCBN
VFhfREVGKQorCisKKyNkZWZpbmUgRUNFX1JYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj
X210eF9yeCkKKyNkZWZpbmUJRUNFX1JYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z
Y19tdHhfcngpCisjZGVmaW5lIEVDRV9SWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj
LT5zY19tdHhfcngsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLCBcCisJICAgICJFQ0Ug
UlggTG9jayIsIE1UWF9ERUYpCisKKyNkZWZpbmUgRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9k
ZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5lIEVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10
eF9kZXN0cm95KCZfc2MtPnNjX210eF90eCk7CisjZGVmaW5lIEVDRV9SWExPQ0tfREVTVFJPWShf
c2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lIEVDRV9DTEVBTlVQTE9D
S19ERVNUUk9ZKF9zYykJbXR4X2Rlc3Ryb3koJl9zYy0+c2NfbXR4X2NsZWFudXApOworCisjZGVm
aW5lIEVDRV9BU1NFUlRfTE9DS0VEKF9zYykJbXR4X2Fzc2VydCgmX3NjLT5zY19tdHgsIE1BX09X
TkVEKTsKKyNkZWZpbmUgRUNFX0FTU0VSVF9VTkxPQ0tFRChfc2MpIG10eF9hc3NlcnQoJl9zYy0+
c2NfbXR4LCBNQV9OT1RPV05FRCk7CisKKworc3RhdGljIGRldmNsYXNzX3QgZWNlX2RldmNsYXNz
OworCisvKiBpZm5ldCBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIHZvaWQgZWNlaW5pdF9sb2Nr
ZWQodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKik7
CisKK3N0YXRpYyB2b2lkIGVjZWluaXQodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0YXJ0KHN0
cnVjdCBpZm5ldCAqKTsKK3N0YXRpYyB2b2lkIGVjZXN0b3Aoc3RydWN0IGVjZV9zb2Z0YyAqKTsK
K3N0YXRpYyBpbnQgZWNlaW9jdGwoc3RydWN0IGlmbmV0ICogaWZwLCB1X2xvbmcsIGNhZGRyX3Qp
OworCisvKiBidXMgZW50cnkgcG9pbnRzICovCisKK3N0YXRpYyBpbnQgZWNlX3Byb2JlKGRldmlj
ZV90IGRldik7CitzdGF0aWMgaW50IGVjZV9hdHRhY2goZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBp
bnQgZWNlX2RldGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIHZvaWQgZWNlX2ludHIodm9pZCAq
KTsKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3FmKHZvaWQgKik7CitzdGF0aWMgdm9pZCBlY2VfaW50
cl9zdGF0dXModm9pZCAqeHNjKTsKKworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBp
bnQgZWNlX2FjdGl2YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfZGVhY3RpdmF0
ZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBlY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0
ICppZnApOworc3RhdGljIHZvaWQgZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBz
dHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcik7CitzdGF0aWMgaW50IGVjZV9nZXRfbWFjKHN0cnVjdCBl
Y2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIGVjZV9zZXRfbWFjKHN0
cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIHBvd2Vyb24o
dm9pZCk7CitzdGF0aWMgaW50IGNvbmZpZ3VyZV9jcHVfcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpz
Yyk7CitzdGF0aWMgaW50IGNvbmZpZ3VyZV9sYW5fcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpzYywg
aW50IHBoeV90eXBlKTsKK3N0YXRpYyB2b2lkIHNldF9wdmlkKHN0cnVjdCBlY2Vfc29mdGMgKnNj
LCBpbnQgcG9ydDAsIGludCBwb3J0MSwgaW50IGNwdSk7CitzdGF0aWMgdm9pZCBzZXRfdmxhbl92
aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKTsKK3N0YXRpYyB2b2lkIHNldF92bGFu
X21lbWJlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3RhdGljIHZvaWQgc2V0
X3ZsYW5fdGFnKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7CitzdGF0aWMgaW50IGhh
cmR3YXJlX2luaXQoc3RydWN0IGVjZV9zb2Z0YyAqc2MpOworc3RhdGljIHZvaWQgZWNlX2ludHJf
cnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpOworCitzdGF0aWMgdm9p
ZCBlY2VfZnJlZV9kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0aWMgdm9p
ZCBlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CisKK3N0YXRpYyB2
b2lkIGVjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCk7CitzdGF0
aWMgdm9pZCBlY2VfdHhfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKTsKK3N0
YXRpYyB2b2lkIGVjZV9jbGVhbnVwX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNl
ZCk7CisKK3N0YXRpYyBpbnQgZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7
CisKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3R4KHZvaWQgKnhzYyk7CisKK3N0YXRpYyB2b2lkIGNs
ZWFyX21hY19lbnRyaWVzKHN0cnVjdCBlY2Vfc29mdGMgKmVjLCBpbnQgaW5jbHVkZV90aGlzX21h
Yyk7CisKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMg
KmVjLAorCQkJICAgICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisJCQkgICAgICAgaW50IGZpcnN0
KTsKKworCisvKlBIWSByZWxhdGVkIGZ1bmN0aW9ucyovCisKK3N0YXRpYyBpbmxpbmUgaW50Citw
aHlfcmVhZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwgaW50IHJlZykKK3sKKwlpbnQg
dmFsOworCWludCBpaTsKKwlpbnQgc3RhdHVzOworCisJV1I0KHNjLCBQSFlfQ09OVFJPTCwgMSA8
PCAxNSk7CisJV1I0KHNjLCBQSFlfQ09OVFJPTCwgKChwaHkgJiAweDEpIHwKKwkJCSAgICAgICgo
cmVnICYgMHgxRikgPDwgOCkgfCAoMHgxIDw8IDE0KSkpOworCisJZm9yIChpaSA9IDA7IGlpIDwg
MHgxMDAwOyBpaSsrKSB7CisJCXN0YXR1cyA9IFJENChzYywgUEhZX0NPTlRST0wpOworCQlpZiAo
c3RhdHVzICYgKDB4MSA8PCAxNSkpIHsKKwkJCS8qIGNsZWFyIHRoZSByd19vayBzdGF0dXMsIGFu
ZCBjbGVhciBvdGhlciBiaXRzIHZhbHVlICovCisJCQlXUjQoc2MsIFBIWV9DT05UUk9MLCAoMHgx
IDw8IDE1KSk7CisJCQl2YWwgPSAgKChzdGF0dXMgPj4gMTYpICYgMHhGRkZGKTsKKwkJCXJldHVy
biB2YWw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitw
aHlfd3JpdGUoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcsIGludCBkYXRh
KQoreworCWludCBpaTsKKworCVdSNChzYywgUEhZX0NPTlRST0wsIDEgPDwgMTUpOworCVdSNChz
YywgUEhZX0NPTlRST0wsCisJICAgICgocGh5ICYgMHgxKSB8ICAoKHJlZyAmIDB4MUYpIDw8IDgp
IHwKKwkgICAgICgweDEgPDwgMTMpIHwgKChkYXRhICYgMHhGRkZGKSA8PCAxNikpKTsKKwlmb3Ig
KGlpID0gMDsgaWkgPCAweDEwMDA7IGlpKyspIHsKKwkJaWYgKFJENChzYywgUEhZX0NPTlRST0wp
ICYgKDB4MSA8PCAxNSkpIHsKKwkJCS8qIGNsZWFyIHRoZSByd19vayBzdGF0dXMsIGFuZCBjbGVh
ciBvdGhlciBiaXRzIHZhbHVlICovCisJCQlXUjQoc2MsIFBIWV9DT05UUk9MLCAoMHgxIDw8IDE1
KSk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKworLypjdXJyZW50bHkgb25seSBpY19wbHVz
IHBoeSBpcyBzdXBwb3J0ZWQqLworc3RhdGljIGludCBnZXRfcGh5X3R5cGUoc3RydWN0IGVjZV9z
b2Z0YyAqc2MpCit7CisJdWludDE2X3QgcGh5MF9pZCA9IDAsIHBoeTFfaWQgPSAwOworCisJLyoK
KwkgKiBVc2UgU01JIChNREMvTURJTykgdG8gcmVhZCBMaW5rIFBhcnRuZXIncyBQSFkgSWRlbnRp
ZmllciBSZWdpc3RlciAxCisJICovCisJcGh5MF9pZCA9IHBoeV9yZWFkKHNjLCAwLCAweDIpOwor
CXBoeTFfaWQgPSBwaHlfcmVhZChzYywgMSwgMHgyKTsKKworCWlmICgocGh5MF9pZCA9PSAweEZG
RkYpICYmIChwaHkxX2lkID09IDB4MDAwRikpIHsKKwkJcmV0dXJuIEFTSVhfR0lHQV9QSFk7CisJ
fSBlbHNlIGlmICgocGh5MF9pZCA9PSAweDAyNDMpICYmIChwaHkxX2lkID09IDB4MDI0MykpIHsK
KwkJcmV0dXJuIFRXT19TSU5HTEVfUEhZOworCX0gZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhGRkZG
KSAmJiAocGh5MV9pZCA9PSAweDAwMDcpKSB7CisJCXJldHVybiBWU0M4NjAxX0dJR0FfUEhZOwor
CX0gZWxzZSBpZiAoKHBoeTFfaWQgPT0gMHhGRkZGKSAmJiAocGh5MF9pZCA9PSAweDAyNDMpKSB7
CisJCXJldHVybiBJQ19QTFVTX1BIWTsKKwl9CisJcmV0dXJuIE5PVF9GT1VORF9QSFk7Cit9CisK
K3N0YXRpYyBpbnQKK2VjZV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNj
KGRldiwgIkVjb25hIEV0aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQorCisv
Km1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgbm90IHBvd2VyZWQgb2ZmKi8KK3N0YXRp
YyB2b2lkCitwb3dlcm9uKHZvaWQpCit7CisJaW50IGlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJ
LypUT0RPOiBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBwcm9wZXJseSovCisJdm9sYXRpbGUgdWlu
dDMyX3QgKiBwb3dlciA9ICh1aW50MzJfdCAqKTB4NzcwMDAwMDQ7CisKKwljZmdfcmVnID0gKihw
b3dlcik7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwljZmdfcmVnIHw9
IDB4MTA7CisJKCpwb3dlcikgPSBjZmdfcmVnOworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlp
ID0gMDsgaWkgPCAweEZGRjsgaWkrKykKKwlERUxBWSgxMDApOwkJOworCS8qIHNldCByZXNldCBi
aXQgdG8gTE9XIGFjdGl2ZTsgKi8KKwljZmdfcmVnICY9IH4weDEwOworCSgqcG93ZXIpID0gY2Zn
X3JlZzsKKwkvKnB1bHNlIGRlbGF5ICovCisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKysp
CisJCURFTEFZKDEwMCk7CQk7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8K
KwljZmdfcmVnIHw9IDB4MTA7CisJKCpwb3dlcikgPSBjZmdfcmVnOworCit9CisKKworc3RhdGlj
IGludAorZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOworCXN0
cnVjdCBzeXNjdGxfY3R4X2xpc3QgKnNjdHg7CisJc3RydWN0IHN5c2N0bF9vaWQgKnNvaWQ7CisJ
aW50IGVyciA9IDA7CisJdV9jaGFyIGVhZGRyW0VUSEVSX0FERFJfTEVOXTsKKwl1aW50MzJfdCBy
bmQ7CisJaW50IGksIHJpZDsKKworCXBvd2Vyb24oKTsKKworCXNjLT5kZXYgPSBkZXY7CisKKwly
aWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19S
RVNfTUVNT1JZLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCisJaWYgKHNjLT5tZW1fcmVzID09
IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBi
dXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FD
VElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKwor
CXJpZCA9IDE7IC8qVFNUQzogRm0tU3dpdGNoLVR4LUNvbXBsZXRlKi8KKwlzYy0+aXJxX3Jlc190
eCA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAg
UkZfQUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfdHggPT0gTlVMTCkKKwkJZ290byBvdXQ7CisK
KwlyaWQgPSAyOyAvKkZTUkM6IEZtLVN3aXRjaC1SeC1Db21wbGV0ZSovCisJc2MtPmlycV9yZXNf
cmVjID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAg
ICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXJxX3Jlc19yZWMgPT0gTlVMTCkKKwkJZ290byBvdXQ7
CisKKwlyaWQgPSA0OyAvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jl
c19xZiA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkg
ICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7
CisKKwllcnIgPSBlY2VfYWN0aXZhdGUoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwor
CXNjLT51c2Vfcm1paSA9IChSRDQoc2MsIEVUSF9DRkcpICYgRVRIX0NGR19STUlJKSA9PSBFVEhf
Q0ZHX1JNSUk7CisKKwkvKiBTeXNjdGxzICovCisJc2N0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0
eChkZXYpOworCXNvaWQgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJU1lTQ1RMX0FE
RF9VSU5UKHNjdHgsIFNZU0NUTF9DSElMRFJFTihzb2lkKSwgT0lEX0FVVE8sICJybWlpIiwKKwkg
ICAgQ1RMRkxBR19SRCwgJnNjLT51c2Vfcm1paSwgMCwgInJtaWkgaW4gdXNlIik7CisKKwlFQ0Vf
TE9DS19JTklUKHNjKTsKKworCWNhbGxvdXRfaW5pdF9tdHgoJnNjLT50aWNrX2NoLCAmc2MtPnNj
X210eCwgMCk7CisKKwlpZiAoKGVyciA9IGVjZV9nZXRfbWFjKHNjLCBlYWRkcikpICE9IDApIHsK
KwkJLyoKKwkJICogTm8gTUFDIGFkZHJlc3MgY29uZmlndXJlZC4gR2VuZXJhdGUgdGhlIHJhbmRv
bSBvbmUuCisJCSAqLworCQlpZiAgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50ZihkZXYs
CisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVybmV0IGFkZHJlc3MuXG4iKTsKKwkJcm5k
ID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9hZS5jL2lmX2F0ZS5jKi8KKwkJLyoKKwkJ
ICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkgYXNzaWduZWQgYWRkcmVzcy4gICdiJwor
CQkgKiBpcyAweDYyLCB3aGljaCBoYXMgdGhlIGxvY2FsbHkgYXNzaWduZWQgYml0IHNldCwgYW5k
CisJCSAqIHRoZSBicm9hZGNhc3QvbXVsdGljYXN0IGJpdCBjbGVhci4KKwkJICovCisJCWVhZGRy
WzBdID0gJ2InOworCQllYWRkclsxXSA9ICdzJzsKKwkJZWFkZHJbMl0gPSAnZCc7CisJCWVhZGRy
WzNdID0gKHJuZCA+PiAxNikgJiAweGZmOworCQllYWRkcls0XSA9IChybmQgPj4gOCkgJiAweGZm
OworCQllYWRkcls1XSA9IHJuZCAmIDB4ZmY7CisKKwkJZm9yIChpPTA7IGk8RVRIRVJfQUREUl9M
RU47IGkrKykgeworCQkJZWFkZHJbaV0gPSBteV92bGFuMF9tYWNbaV07CisJCX0KKworCX0KKwll
Y2Vfc2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRI
RVIpOworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMsIGVjZV9pZm1lZGlhX3Vw
ZCwgZWNlX2lmbWVkaWFfc3RzKSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNhbm5vdCBmaW5k
IG15IFBIWS5cbiIpOworCQllcnIgPSBFTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlmcC0+aWZf
c29mdGMgPSBzYzsKKwlpZl9pbml0bmFtZShpZnAsIGRldmljZV9nZXRfbmFtZShkZXYpLCBkZXZp
Y2VfZ2V0X3VuaXQoZGV2KSk7CisJaWZwLT5pZl9mbGFncyA9IElGRl9CUk9BRENBU1QgfCBJRkZf
U0lNUExFWCB8IElGRl9NVUxUSUNBU1Q7CisKKwlpZnAtPmlmX2NhcGFiaWxpdGllcyA9IElGQ0FQ
X0hXQ1NVTTsKKworCWlmcC0+aWZfaHdhc3Npc3QgPSAoQ1NVTV9JUCB8IENTVU1fVENQIHwgQ1NV
TV9VRFApOworCWlmcC0+aWZfY2FwZW5hYmxlID0gaWZwLT5pZl9jYXBhYmlsaXRpZXM7IC8qICAq
LworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lvY3RsID0gZWNlaW9jdGw7
CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5pZnFfZHJ2X21heGxlbiA9
IEVDRV9NQVhfVFhfQlVGRkVSUy0xOworCUlGUV9TRVRfTUFYTEVOKCZpZnAtPmlmX3NuZCwgRUNF
X01BWF9UWF9CVUZGRVJTLTEpOworCUlGUV9TRVRfUkVBRFkoJmlmcC0+aWZfc25kKTsKKworCisJ
LyogQ3JlYXRlIGxvY2FsIHRhc2txLiAqLworCisJVEFTS19JTklUKCZzYy0+c2NfaW50cl90YXNr
LCAwLCBlY2VfaW50cl90YXNrLCBzYyk7CisJVEFTS19JTklUKCZzYy0+c2NfdHhfdGFzaywgMSwg
ZWNlX3R4X3Rhc2ssIGlmcCk7CisJVEFTS19JTklUKCZzYy0+c2NfY2xlYW51cF90YXNrLCAyLCBl
Y2VfY2xlYW51cF90YXNrLCBzYyk7CisJc2MtPnNjX3RxID0gdGFza3F1ZXVlX2NyZWF0ZV9mYXN0
KCJlY2VfdGFza3EiLCBNX1dBSVRPSywKKwkgICAgdGFza3F1ZXVlX3RocmVhZF9lbnF1ZXVlLCAm
c2MtPnNjX3RxKTsKKwlpZiAoc2MtPnNjX3RxID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50Zihz
Yy0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSB0YXNrcXVldWVcbiIpOworCQlnb3RvIG91dDsKKwor
CX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOworCisJLyoKKwkgKiBBY3RpdmF0ZSBp
bnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19y
ZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkJCSAgICAgTlVMTCwgZWNlX2ludHIs
IHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7
CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNf
c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywgSU5UUl9UWVBFX05FVCB8IElOVFJf
TVBTQUZFLAorCQkJICAgICBOVUxMLCBlY2VfaW50cl9zdGF0dXMsIHNjLCAmc2MtPmludHJoYW5k
X3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9D
S19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2ludHIo
ZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBO
VUxMLGVjZV9pbnRyX3FmLCAgc2MsICZzYy0+aW50cmhhbmRfcWYpOworCisJaWYgKGVycikgewor
CQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBv
dXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc190eCwgSU5U
Ul9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLGVjZV9pbnRyX3R4LCAgc2MsICZz
Yy0+aW50cmhhbmRfdHgpOworCisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOwor
CQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlFQ0VfVFhMT0NL
X0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNFX0NMRUFOVVBMT0NLX0lOSVQo
c2MpOworCisJLyplbmFibGUgYWxsIGludGVycnVwdCBzb3VyY2VzKi8KKwlXUjQoc2MsIElOVEVS
UlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qZW5hYmxlIHBvcnQgMCovCisJV1I0KHNjLCBQ
T1JUXzBfQ09ORklHLCBSRDQoc2MsIFBPUlRfMF9DT05GSUcpICYgfigoMHgxIDw8IDE4KSkpOwor
CisJdGFza3F1ZXVlX3N0YXJ0X3RocmVhZHMoJnNjLT5zY190cSwgMSwgUElfTkVULCAiJXMgdGFz
a3EiLAorCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAo
ZXJyKQorCQllY2VfZGVhY3RpdmF0ZShkZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVl
KGlmcCk7CisJcmV0dXJuIChlcnIpOworfQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmlj
ZV90IGRldikKK3sKKwkvKlRPRE86IHJlbGVhc2UgcmVzb3VyY2VzKi8KKworCXN0cnVjdCBlY2Vf
c29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0g
c2MtPmlmcDsKKworCWVjZXN0b3Aoc2MpOworCWlmIChpZnAgIT0gTlVMTCkgeworCQlldGhlcl9p
ZmRldGFjaChpZnApOworCQlpZl9mcmVlKGlmcCk7CisJfQorCisJZWNlX2RlYWN0aXZhdGUoZGV2
KTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICph
cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1
X2ludDMyX3QgKnBhZGRyOworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Yg
c2VnbWVudHMsIHNob3VsZCBiZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3Mt
PmRzX2FkZHI7Cit9CisKKworc3RhdGljIGludAorZWNlX2FsbG9jX2Rlc2NfZG1hX3R4KHN0cnVj
dCBlY2Vfc29mdGMgKnNjKQoreworCisJaW50IGk7CisJaW50IGVycm9yOworCisJLyogQWxsb2Nh
dGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFRYL1JYIGRlc2NyaXB0b3Jz
LiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFnLAkvKiBw
YXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAg
QlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJICAgIEJVU19TUEFDRV9N
QVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGZpbHRmdW5j
LCBmaWx0ZnVuY2FyZyAqLworCSAgICBzaXplb2YoZXRoX3R4X2Rlc2NfdCkqRUNFX01BWF9UWF9C
VUZGRVJTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhf
ZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkg
ICAgTlVMTCwgTlVMTCwJCQkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJICAgICZzYy0+
ZG1hdGFnX2RhdGFfdHgpOwkJLyogZG1hdCAqLworCisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9y
IHR4IHJpbmcgKi8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmRtYXRhZ19kYXRhX3R4
LAorCQkJCSAodm9pZCoqKSYoc2MtPmRlc2NfdHgpLAorCQkJCSBCVVNfRE1BX05PV0FJVCB8IEJV
U19ETUFfWkVSTyB8IEJVU19ETUFfQ09IRVJFTlQsCisJCQkJICYoc2MtPmRtYW1hcF9yaW5nX3R4
KSk7CisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gYWxs
b2NhdGUgRE1BIG1lbW9yeVxuIik7CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19k
YXRhX3R4KTsKKwkJc2MtPmRtYXRhZ19kYXRhX3R4ID0gMDsKKwkJcmV0dXJuIChFTlhJTyk7CisJ
fQorCisJLyogbG9hZCByaW5nIGRtYSAqLworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5k
bWF0YWdfZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCQkJCXNjLT5kZXNjX3R4LCBzaXpl
b2YoZXRoX3R4X2Rlc2NfdCkqRUNFX01BWF9UWF9CVUZGRVJTLCBlY2VfZ2V0YWRkciwKKwkJCQkm
KHNjLT5yaW5nX3BhZGRyX3R4KSwgQlVTX0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yKSB7CisJ
CWlmX3ByaW50ZihzYy0+aWZwLCAiY2FuJ3QgbG9hZCBkZXNjcmlwdG9yXG4iKTsKKwkJYnVzX2Rt
YW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwgc2MtPmRlc2NfdHgsCisJCQkJc2MtPmRtYW1h
cF9yaW5nX3R4KTsKKwkJc2MtPmRlc2NfdHggPSBOVUxMOworCQlidXNfZG1hX3RhZ19kZXN0cm95
KHNjLT5kbWF0YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90eCA9IDA7CisJCXJldHVy
biAoRU5YSU8pOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuIEFs
aWdubWVudCBpcyAyIGJ5dGVzICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNj
X3BhcmVudF90YWcsCS8qIHBhcmVudCAqLworCSAgICAxLCAwLAkJCQkvKiBhbGlnbm1lbnQsIGJv
dW5kYXJ5ICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkJLyogbG93YWRkciAqLwor
CSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCQkvKiBoaWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxM
LAkJCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgTUNMQllURVMqTUFYX0ZSQUdN
RU5ULCBNQVhfRlJBR01FTlQsCQkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZ
VEVTLCAwLAkJCS8qIG1heHNlZ3N6LCBmbGFncyAqLworCSAgICBOVUxMLCBOVUxMLAkJCQkvKiBs
b2NrZnVuYywgbG9ja2Z1bmNhcmcgKi8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ190eCk7CQkJLyog
ZG1hdCAqLworCisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQg
dG8gY3JlYXRlIGJ1c2RtYSB0YWcgZm9yIG1idWZzXG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJ
fQorCisJZm9yIChpPTA7IGk8RUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJLyogY3JlYXRl
IGRtYSBtYXAgZm9yIGVhY2ggZGVzY3JpcHRvciAqLworCQllcnJvciA9IGJ1c19kbWFtYXBfY3Jl
YXRlKHNjLT5kbWF0YWdfcmluZ190eCwgMCwKKwkJCQkJICAmKHNjLT50eF9kZXNjW2ldLmRtYW1h
cCkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNy
ZWF0ZSBtYXAgZm9yIG1idWZcbiIpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisJcmV0
dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK2VjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBl
Y2Vfc29mdGMgKnNjKQoreworCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9U
WF9CVUZGRVJTOyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsKKwkJCW1fZnJl
ZW0oc2MtPnR4X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZmPSAwOworCQl9
CisJfQorCisJaWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFwX3VubG9hZChz
Yy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChzYy0+ZGVzY190
eCkgeworCQkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJCQkJc2MtPmRl
c2NfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCX0KKwkJc2MtPmRtYW1hcF9yaW5nX3R4ID0g
MDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19kYXRhX3R4KSB7CisJCWJ1c19kbWFfdGFnX2Rlc3Ry
b3koc2MtPmRtYXRhZ19kYXRhX3R4KTsKKwkJc2MtPmRtYXRhZ19kYXRhX3R4ID0gMDsKKwl9CisK
KwlpZiAoc2MtPmRtYXRhZ19yaW5nX3R4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNFX01BWF9UWF9C
VUZGRVJTOyBpKyspIHsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfdHgs
CisJCQkJCSAgIHNjLT50eF9kZXNjW2ldLmRtYW1hcCk7CisJCQlzYy0+dHhfZGVzY1tpXS5kbWFt
YXAgPSAwOworCQl9CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19yaW5nX3R4KTsK
KwkJc2MtPmRtYXRhZ19yaW5nX3R4ID0gMDsKKwl9Cit9CisKKworc3RhdGljIGludAorZWNlX2Fs
bG9jX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBlcnJvcjsKKwor
CisJLyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFJYIGRl
c2NyaXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRf
dGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkg
Ki8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJICAgIEJV
U19TUEFDRV9NQVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8q
IGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNF
X01BWF9SWF9CVUZGRVJTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNpemVv
ZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDAsCQkvKiBtYXhzZWdzeiwgZmxh
Z3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJCQkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJ
ICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkJLyogZG1hdCAqLworCisJLyphbGxvY2F0ZSByaW5n
Ki8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmRtYXRhZ19kYXRhX3J4LAorCQkJCSAo
dm9pZCoqKSYoc2MtPmRlc2NfcngpLAorCQkJCSBCVVNfRE1BX05PV0FJVCB8IEJVU19ETUFfWkVS
TyB8IEJVU19ETUFfQ09IRVJFTlQsCisJCQkJICYoc2MtPmRtYW1hcF9yaW5nX3J4KSk7CisKKwlp
ZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1B
IG1lbW9yeVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIGxvYWQgZG1hbWFwICov
CisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmRtYXRhZ19kYXRhX3J4LCBzYy0+ZG1hbWFw
X3JpbmdfcngsCisJCQkJc2MtPmRlc2NfcngsCisJCQkJc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKkVD
RV9NQVhfUlhfQlVGRkVSUywKKwkJCQllY2VfZ2V0YWRkciwKKwkJCQkmKHNjLT5yaW5nX3BhZGRy
X3J4KSwgQlVTX0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+
aWZwLCAiY2FuJ3QgbG9hZCBkZXNjcmlwdG9yXG4iKTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5k
bWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCQkJc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJ
YnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfcngpOworCQlzYy0+ZGVzY19yeCA9
IE5VTEw7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2Rt
YSB0YWcgZm9yIG1idWZzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19w
YXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91
bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCQkvKiBsb3dhZGRyICovCisJ
ICAgIEJVU19TUEFDRV9NQVhBRERSLAkJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEws
CQkJCS8qIGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgICBNQ0xCWVRFUywgMSwJCQkvKiBt
YXhzaXplLCBuc2VnbWVudHMgKi8KKwkgICAgTUNMQllURVMsIDAsCQkJLyogbWF4c2Vnc3osIGZs
YWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLwor
CSAgICAmc2MtPmRtYXRhZ19yaW5nX3J4KTsJCQkvKiBkbWF0ICovCisKKworCWlmIChlcnJvcikg
eworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVzZG1hIHRhZyBmb3Ig
bWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKworCWZvciAoaW50IGkgPTA7IGk8
RUNFX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShz
Yy0+ZG1hdGFnX3JpbmdfcngsIDAsICZzYy0+cnhfZGVzY1tpXS5kbWFtYXApOworCQlpZiAoZXJy
b3IpIHsKKwkJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBtYXAgZm9yIG1i
dWZcbiIpOworCQkJcmV0dXJuIChFTlhJTyk7CisJCX0KKwl9CisKKwllcnJvciA9IGJ1c19kbWFt
YXBfY3JlYXRlKHNjLT5kbWF0YWdfcmluZ19yeCwgMCwgJnNjLT5yeF9zcGFyZW1hcCk7CisJaWYg
KGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBzcGFyZSBt
YXBcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCisKK3N0
YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK
KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykgewor
CQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+cnhfZGVzY1tpXS5i
dWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisKKwlpZiAoc2MtPmRt
YXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0YV9yeCwg
c2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV9y
eCwgc2MtPmRlc2NfcngsCisJCQlzYy0+ZG1hbWFwX3JpbmdfcngpOworCQlidXNfZG1hX3RhZ19k
ZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdfZGF0YV9yeCA9IDA7CisJ
CXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0gMDsKKwl9CisKKwlpZiAo
c2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNFX01BWF9SWF9CVUZGRVJT
OyBpKyspIHsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngsIHNjLT5y
eF9kZXNjW2ldLmRtYW1hcCk7CisJCX0KKwkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdf
cmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1h
dGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3JpbmdfcnggPSAwOworCX0KKworfQorCisKK3N0
YXRpYyBpbnQKK2VjZV9uZXdfcnhidWYoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIHN0cnVjdCByeF9k
ZXNjX2luZm8qIGRlc2NpbmZvKQoreworCXN0cnVjdCBtYnVmICpuZXdfbWJ1ZjsKKwlidXNfZG1h
X3NlZ21lbnRfdCBzZWdbMV07CisJYnVzX2RtYW1hcF90IG1hcDsKKwlpbnQgZXJyb3I7CisJaW50
IG5zZWdzOworCWJ1c19kbWFfdGFnX3QgdGFnOworCisJdGFnID0gc2MtPmRtYXRhZ19yaW5nX3J4
OworCisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIp
OworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7CisKKwluZXdf
bWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0gTUNMQllURVM7CisKKworCWVy
cm9yID0gYnVzX2RtYW1hcF9sb2FkX21idWZfc2codGFnLCBzYy0+cnhfc3BhcmVtYXAsIG5ld19t
YnVmLCBzZWcsICZuc2VncywKKwkgICAgQlVTX0RNQV9OT1dBSVQpOworCisJS0FTU0VSVChuc2Vn
cyA9PSAxLCAoIlRvbyBtYW55IHNlZ21lbnRzIHJldHVybmVkISIpKTsKKworCWlmIChuc2VncyAh
PSAxIHx8IGVycm9yKSB7CisJCW1fZnJlZShuZXdfbWJ1Zik7CisJCXJldHVybiAoRU5PQlVGUyk7
CisJfQorCisJaWYgKGRlc2NpbmZvLT5idWZmICE9IE5VTEwpIHsKKwkJYnVzX2RtYW1hcF9zeW5j
KHRhZywgZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOworCQlidXNfZG1h
bWFwX3VubG9hZCh0YWcsIGRlc2NpbmZvLT5kbWFtYXApOworCX0KKworCW1hcCA9IGRlc2NpbmZv
LT5kbWFtYXA7CisJZGVzY2luZm8tPmRtYW1hcCA9IHNjLT5yeF9zcGFyZW1hcDsKKwlzYy0+cnhf
c3BhcmVtYXAgPSBtYXA7CisKKwlidXNfZG1hbWFwX3N5bmModGFnLCBkZXNjaW5mby0+ZG1hbWFw
LCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKworCWRlc2NpbmZvLT5idWZmID0gbmV3X21idWY7CisJ
ZGVzY2luZm8tPmRlc2MtPmRhdGFfcHRyID0gc2VnLT5kc19hZGRyOworCWRlc2NpbmZvLT5kZXNj
LT5sZW5ndGggPSBzZWctPmRzX2xlbi0yOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVz
Y190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOworCWludCBlcnJv
cjsKKworCS8qY3JlYXRlIHBhcmVudCB0YWcgZm9yIHR4IGFuZCByeCovCisJZXJyb3IgPSBidXNf
ZG1hX3RhZ19jcmVhdGUoCisJICAgIGJ1c19nZXRfZG1hX3RhZyhzYy0+ZGV2KSwJLyogcGFyZW50
ICovCisJICAgIDEsIDAsCQkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQ
QUNFX01BWEFERFIsCQkJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCQkv
KiBoaWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxMLAkJCQkvKiBmaWx0ZXIsIGZpbHRlcmFyZyAq
LworCSAgICBCVVNfU1BBQ0VfTUFYU0laRV8zMkJJVCwgMCwJCS8qIG1heHNpemUsIG5zZWdtZW50
cyAqLworCSAgICBCVVNfU1BBQ0VfTUFYU0laRV8zMkJJVCwJCS8qIG1heHNlZ3NpemUgKi8KKwkg
ICAgMCwJCQkJCS8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBs
b2NrYXJnICovCisJICAgICZzYy0+c2NfcGFyZW50X3RhZyk7CisKKwllY2VfYWxsb2NfZGVzY19k
bWFfdHgoc2MpOworCisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfVFhfQlVGRkVSUzsgaSsrKSB7
CisJCWRlc2N0eCA9IChldGhfdHhfZGVzY190ICopKCZzYy0+ZGVzY190eFtpXSk7CisJCW1lbXNl
dChkZXNjdHgsIDAsIHNpemVvZihldGhfdHhfZGVzY190KSk7CisJCWRlc2N0eC0+bGVuZ3RoID0g
TUFYX1BBQ0tFVF9MRU47CisJCWRlc2N0eC0+Y293biA9IDE7CisJCWlmIChpPT1FQ0VfTUFYX1RY
X0JVRkZFUlMtMSkgeworCQkJZGVzY3R4LT5lb3IgPSAxOworCQl9CisJfQorCisJZWNlX2FsbG9j
X2Rlc2NfZG1hX3J4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7
IGkrKykgeworCQlkZXNjcnggPSAmKHNjLT5kZXNjX3J4W2ldKTsKKwkJbWVtc2V0KGRlc2NyeCwg
MCwgc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKTsKKwkJc2MtPnJ4X2Rlc2NbaV0uZGVzYyA9IGRlc2Ny
eDsKKwkJc2MtPnJ4X2Rlc2NbaV0uYnVmZiA9IDA7CisJCWVjZV9uZXdfcnhidWYoc2MsICYoc2Mt
PnJ4X2Rlc2NbaV0pKTsKKworCQlpZiAoaT09RUNFX01BWF9SWF9CVUZGRVJTLTEpIHsKKwkJCWRl
c2NyeC0+ZW9yID0gMTsKKwkJfQorCX0KKwlzYy0+dHhfcHJvZCA9IDA7CisJc2MtPnR4X2NvbnMg
PSAwOworCXNjLT5sYXN0X3J4ID0gMDsKKwlzYy0+ZGVzY19jdXJyX3R4ID0gMDsKKworCXJldHVy
biAoMCk7Cit9CisKKworCitzdGF0aWMgaW50CitlY2VfYWN0aXZhdGUoZGV2aWNlX3QgZGV2KQor
eworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCWludCBlcnI7CisJdWludDMyX3QgbWFjX3BvcnRf
Y29uZmlnOworI2lmIDAKKwlpbnQgaTsKKwlpbnQgdGFibGVfZW5kOworCWNoYXIgbWFjW0VUSEVS
X0FERFJfTEVOXTsKKyNlbmRpZgorCisJc3RydWN0IGlmbmV0ICppZnA7CisKKwlzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKKwlpZnAgPSBzYy0+aWZwOworCisJaW5pdGlhbF9zd2l0Y2hfY29u
ZmlnID0gUkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKwlpbml0aWFsX2NwdV9jb25maWcgPSBSRDQo
c2MsIENQVV9QT1JUX0NPTkZJRyk7CisJaW5pdGlhbF9wb3J0MF9jb25maWcgPSBSRDQoc2MsIE1B
Q19QT1JUXzBfQ09ORklHKTsKKwlpbml0aWFsX3BvcnQxX2NvbmZpZyA9IFJENChzYywgTUFDX1BP
UlRfMV9DT05GSUcpOworCisjaWYgMAorCXByaW50ZigiaW5pdGlhbF9zd2l0Y2hfY29uZmlnICUw
OHhcbiIsIGluaXRpYWxfc3dpdGNoX2NvbmZpZyk7CisJcHJpbnRmKCJpbml0aWFsX2NwdV9jb25m
aWcgJTA4eFxuIiwgCWluaXRpYWxfY3B1X2NvbmZpZyk7CisJcHJpbnRmKCJpbml0aWFsX3BvcnQw
X2NvbmZpZyAlMDh4XG4iLCAJaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXByaW50ZigiaW5pdGlh
bF9wb3J0MV9jb25maWcgJTA4eFxuIiwgCWluaXRpYWxfcG9ydDFfY29uZmlnKTsKKworCVdSNChz
YywgU1dJVENIX0NPTkZJRywgMHgzYWE3MzApOworCVdSNChzYywgQ1BVX1BPUlRfQ09ORklHLCAw
eDgwNGMwMDAwKTsKKwlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCAweGU2NDYzZDk0KTsKKwlX
UjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCAweDQ2M2Q5Nik7CisKKwl0YWJsZV9lbmQgPSByZWFk
X21hY19lbnRyeShzYywgbWFjLCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlmb3IgKGkg
PSAwOyBpPEVUSEVSX0FERFJfTEVOOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCBtYWNbaV0p
OworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJdGFibGVfZW5kID0gcmVhZF9tYWNfZW50cnkoc2Ms
IG1hYywgMCk7CisJfQorCisjZW5kaWYKKwkvKkRpc2FibGUgUG9ydCAwICovCisJbWFjX3BvcnRf
Y29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9
ICgoMHgxIDw8IDE4KSk7CisJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29u
ZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2Ms
IE1BQ19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25maWcgfD0gKCgweDEgPDwgMTgpKTsK
KwlXUjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisKKwllcnIg
PSBlY2VfYWxsb2NhdGVfZG1hKHNjKTsKKwlpZiAoZXJyKSB7CisJCWlmX3ByaW50ZihzYy0+aWZw
LCAiZmFpbGVkIGFsbG9jYXRpbmcgZG1hXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwlXUjQo
c2MsIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCVdSNChzYywg
VFNfREVTQ1JJUFRPUl9CQVNFX0FERFIsIHNjLT5yaW5nX3BhZGRyX3R4KTsKKworCVdSNChzYywg
RlNfREVTQ1JJUFRPUl9QT0lOVEVSLCBzYy0+cmluZ19wYWRkcl9yeCk7CisJV1I0KHNjLCBGU19E
RVNDUklQVE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisKKwlXUjQoc2MsIEZT
X0RNQV9DT05UUk9MLCAxKTsKKworCXJldHVybiAoMCk7CitvdXQ6CisJcmV0dXJuIChFTlhJTyk7
CisKK30KKworc3RhdGljIHZvaWQKK2VjZV9kZWFjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlz
dHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJ
aWYgKHNjLT5pbnRyaGFuZCkKKwkJYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19y
ZWMsIHNjLT5pbnRyaGFuZCk7CisKKwlzYy0+aW50cmhhbmQgPSAwOworCisJaWYgKHNjLT5pbnRy
aGFuZF9xZikKKwkJYnVzX3RlYXJkb3duX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgc2MtPmlu
dHJoYW5kX3FmKTsKKworCXNjLT5pbnRyaGFuZF9xZiA9IDA7CisKKwlidXNfZ2VuZXJpY19kZXRh
Y2goc2MtPmRldik7CisJaWYgKHNjLT5taWlidXMpCisJCWRldmljZV9kZWxldGVfY2hpbGQoc2Mt
PmRldiwgc2MtPm1paWJ1cyk7CisJaWYgKHNjLT5tZW1fcmVzKQorCQlidXNfcmVsZWFzZV9yZXNv
dXJjZShkZXYsIFNZU19SRVNfSU9QT1JULAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5tZW1fcmVz
KSwgc2MtPm1lbV9yZXMpOworCXNjLT5tZW1fcmVzID0gMDsKKwlpZiAoc2MtPmlycV9yZXNfcmVj
KQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAorCQkgICAgcm1hbl9n
ZXRfcmlkKHNjLT5pcnFfcmVzX3JlYyksIHNjLT5pcnFfcmVzX3JlYyk7CisKKwlpZiAoc2MtPmly
cV9yZXNfcWYpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsCisJCSAg
ICBybWFuX2dldF9yaWQoc2MtPmlycV9yZXNfcWYpLCBzYy0+aXJxX3Jlc19xZik7CisKKwlpZiAo
c2MtPmlycV9yZXNfcWYpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEs
CisJCSAgICBybWFuX2dldF9yaWQoc2MtPmlycV9yZXNfc3RhdHVzKSwgc2MtPmlycV9yZXNfc3Rh
dHVzKTsKKworCXNjLT5pcnFfcmVzX3JlYyA9IDA7CisJc2MtPmlycV9yZXNfcWYgPSAwOworCXNj
LT5pcnFfcmVzX3N0YXR1cyA9IDA7CisJRUNFX1RYTE9DS19ERVNUUk9ZKHNjKTsKKwlFQ0VfUlhM
T0NLX0RFU1RST1koc2MpOworCisJZWNlX2ZyZWVfZGVzY19kbWFfdHgoc2MpOworCWVjZV9mcmVl
X2Rlc2NfZG1hX3J4KHNjKTsKKworCisJcmV0dXJuOworfQorCisvKgorICogQ2hhbmdlIG1lZGlh
IGFjY29yZGluZyB0byByZXF1ZXN0LgorICovCitzdGF0aWMgaW50CitlY2VfaWZtZWRpYV91cGQo
c3RydWN0IGlmbmV0ICppZnApCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3Nv
ZnRjOworCXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCWludAllcnJvcjsKKworCW1paSA9IGRldmlj
ZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7CisJRUNFX0xPQ0soc2MpOworCWVycm9yID0gbWlpX21l
ZGlhY2hnKG1paSk7CisJRUNFX1VOTE9DSyhzYyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8q
CisgKiBOb3RpZnkgdGhlIHdvcmxkIHdoaWNoIG1lZGlhIHdlJ3JlIHVzaW5nLgorICovCitzdGF0
aWMgdm9pZAorZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRp
YXJlcSAqaWZtcikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJ
c3RydWN0IG1paV9kYXRhICptaWk7CisKKwltaWkgPSBkZXZpY2VfZ2V0X3NvZnRjKHNjLT5taWli
dXMpOworCUVDRV9MT0NLKHNjKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwlpZm1yLT5pZm1fYWN0
aXZlID0gbWlpLT5taWlfbWVkaWFfYWN0aXZlOworCWlmbXItPmlmbV9zdGF0dXMgPSBtaWktPm1p
aV9tZWRpYV9zdGF0dXM7CisJRUNFX1VOTE9DSyhzYyk7Cit9CisKKworc3RhdGljIHZvaWQKK2Vj
ZV90aWNrKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1
Y3QgbWlpX2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0
YyhzYy0+bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJbWlpX3Rp
Y2sobWlpKTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0IG9uZSBzZWNvbmQg
ZnJvbSBub3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGlj
aywgc2MpOworfQorCisKK3N0YXRpYyB1aW50MzJfdCByZWFkX21hY19lbnRyeShzdHJ1Y3QgZWNl
X3NvZnRjICplYywKKwkJCSAgICAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCWludCBmaXJzdCkK
K3sKKwl1aW50MzJfdCAgaWk7CisJc3RydWN0IGFybF90YWJsZV9lbnRyeV90IGVudHJ5OworCXVp
bnQzMl90ICplbnRyeV92YWw7CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwg
MCk7CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJV1I0KGVjLCBB
UkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisJaWYgKGZpcnN0KQorCQlXUjQoZWMsIEFS
TF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCAweDEpOworCWVsc2UKKwkJV1I0KGVjLCBBUkxfVEFC
TEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsg
aWkrKykgeworCQlpZiAoUkQ0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSkgJiAoMHgx
KSkKKwkJCWJyZWFrOworCX0KKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5KTsKKwll
bnRyeV92YWxbMF0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKTsKKwllbnRy
eV92YWxbMV0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yKTsKKworCWlmICht
YWNfcmVzdWx0KQorCQltZW1jcHkobWFjX3Jlc3VsdCwgZW50cnkubWFjX2FkZHIsIEVUSEVSX0FE
RFJfTEVOKTsKKworCisJcmV0dXJuIGVudHJ5LnRhYmxlX2VuZDsKK30KKworCitzdGF0aWMgdWlu
dDMyX3Qgd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkJCSAg
ICAgIHVpbnQzMl90IGZpbHRlciwKKwkJCQkgICAgICB1aW50MzJfdCB2bGFuX21hYywKKwkJCQkg
ICAgICB1aW50MzJfdCB2bGFuX2dpZCwKKwkJCQkgICAgICB1aW50MzJfdCBhZ2VfZmllbGQsCisJ
CQkJICAgICAgdWludDMyX3QgcG9ydF9tYXAsCisJCQkJICAgICAgY29uc3QgdWludDhfdCAqbWFj
X2FkZHIpCit7CisJdWludDMyX3QgIGlpOworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0
IGFybF90YWJsZV9lbnRyeV90IGVudHJ5OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVu
dHJ5KSk7CisKKwllbnRyeS5maWx0ZXIgPSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFu
X21hYzsKKwllbnRyeS52bGFuX2dpZCA9IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFn
ZV9maWVsZDsKKwllbnRyeS5wb3J0X21hcCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNf
YWRkciwgbWFjX2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJf
dCopICgmZW50cnkpOworCisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMCk7
CisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJV1I0KGVjLCBBUkxf
VEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisKKwlXUjQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf
Q09OVFJPTF8xLCBlbnRyeV92YWxbMF0pOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05U
Uk9MXzIsIGVudHJ5X3ZhbFsxXSk7CisKKwkvKiBpc3N1ZSB0aGUgd3JpdGUgY29tbWFuZCAqLwor
CVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsICgweDEgPDwgMykpOworCisJZm9y
IChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKSB7CisJCWlmIChSRDQoZWMsIEFSTF9UQUJMRV9B
Q0NFU1NfQ09OVFJPTF8xKSAmICgweDEpKQorCQkJcmV0dXJuIDE7IC8qd3JpdGUgb2sqLworCX0K
KwkvKiB3cml0ZSBmYWlsZWQqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHJlbW92
ZV9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisJCQkJIHVpbnQ4X3QgKm1hYykKK3sK
KwkvKiBpbnZhbGlkIGFnZV9maWVsZCBtZWFuIGVyYXNlIHRoaXMgZW50cnkqLworCXdyaXRlX2Fy
bF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkgICAgICBJTlZBTElE
X0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkJCSAgICAgIG1hYyk7CisKK30KKworCitzdGF0aWMgdm9p
ZCBhZGRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorCQkJICB1aW50OF90ICptYWMp
Cit7CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJ
CSAgICAgIE5FV19FTlRSWSwgVkxBTjBfR1JPVVAsCisJCQkgICAgICBtYWMpOworfQorCisvKioK
KyAqIFRoZSBiZWhhdmlvciBvZiBBUkwgdGFibGUgcmVhZGluZyBhbmQgZGVsZXRpb24gaXMgbm90
IHdlbGwgZGVmaW5lZAorICogaW4gdGhlIGRvY3VtZW50YXRpb24uIFRvIGJlIHNhZmUsIGFsbCBt
YWMgYWRkcmVzc2VzIGFyZSBwdXQgdG8gYQorICogbGlzdCwgdGhlbiBkZWxldGVkLgorICoKKyAq
Lworc3RhdGljIHZvaWQgY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGlu
dCBpbmNsdWRlX3RoaXNfbWFjKQoreworCWludCB0YWJsZV9lbmQ7CisJc3RydWN0IG1hY19saXN0
ICogdGVtcDsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiBtYWNfbGlzdF9oZWFkZXI7CisJc3RydWN0IG1h
Y19saXN0ICogY3VycmVudDsKKwljaGFyIG1hY1tFVEhFUl9BRERSX0xFTl07CisKKwljdXJyZW50
ID0gMDsKKwltYWNfbGlzdF9oZWFkZXIgPSAwOworCisJdGFibGVfZW5kID0gcmVhZF9tYWNfZW50
cnkoZWMsIG1hYywgMSk7CisJd2hpbGUgKCF0YWJsZV9lbmQpIHsKKwkJaWYgKCFpbmNsdWRlX3Ro
aXNfbWFjICYmCisJCSAgICBtZW1jbXAobWFjLCBteV92bGFuMF9tYWMsIEVUSEVSX0FERFJfTEVO
KT09MCkgeworCQkJLyogcmVhZCBuZXh0IGVudHJ5ICovCisJCQl0YWJsZV9lbmQgPSByZWFkX21h
Y19lbnRyeShlYywgbWFjLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGVtcCA9IChzdHJ1
Y3QgbWFjX2xpc3QqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG1hY19saXN0KSxNX0RFVkJVRiwgTV9O
T1dBSVQgfCBNX1pFUk8pOworCQltZW1jcHkodGVtcC0+bWFjX2FkZHIsIG1hYywgRVRIRVJfQURE
Ul9MRU4pOworCQl0ZW1wLT5uZXh0ID0gMDsKKwkJaWYgKG1hY19saXN0X2hlYWRlcikgeworCQkJ
Y3VycmVudC0+bmV4dCA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVtcDsKKwkJfSBlbHNlIHsKKwkJ
CW1hY19saXN0X2hlYWRlciA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVtcDsKKwkJfQorCQkvKnJl
YWQgbmV4dCAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywgbWFjLCAwKTsKKwl9
CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hpbGUgKGN1cnJlbnQpIHsKKwkJ
cmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIpOworCQl0ZW1wID0gY3VycmVu
dDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUodGVtcCwgTV9ERVZCVUYpOwor
CX0KK30KKworCisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29m
dGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29uZmlnOworCXVpbnQzMl90
IG1hY19wb3J0X2NvbmZpZzsKKworCisJLyoKKwkgKiBDb25maWd1cmUKKwkgKi8KKwlzd19jb25m
aWcgPSBSRDQoc2MsIFNXSVRDSF9DT05GSUcpOworCS8qIGVuYWJsZSBmYXN0IGFnaW5nICovCisJ
c3dfY29uZmlnIHw9ICgweEYpOworCS8qIENSQyBzdHJpcHBpbmcgKi8KKwkvL3N3X2NvbmZpZyB8
PSAoMHgxIDw8IDIxKTsKKwkvKiBJVkwgbGVhcm5pbmcgKi8KKwlzd19jb25maWcgfD0gKDB4MSA8
PCAyMik7CisJLyogSE5BVCBkaXNhYmxlICovCisJc3dfY29uZmlnICY9IH4oMHgxIDw8IDIzKTsK
KworCXN3X2NvbmZpZyB8PSAoMSA8PCAyOSB8IDEgPDwgMzAgfCAxIDw8IDI4KTsKKworCVdSNChz
YywgU1dJVENIX0NPTkZJRywgc3dfY29uZmlnKTsKKworCXN3X2NvbmZpZyA9IFJENChzYywgU1dJ
VENIX0NPTkZJRyk7CisKKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09O
RklHKTsKKworCWlmICghKG1hY19wb3J0X2NvbmZpZyAmIDB4MSkgfHwgKG1hY19wb3J0X2NvbmZp
ZyAmIDB4MikpCisJCWlmX3ByaW50ZihzYy0+aWZwLCAiU1RSOTEwNDogTGluayBEb3duLCAweCUw
OHghXG4iLAorCQkgICAgICAgbWFjX3BvcnRfY29uZmlnKTsKKwllbHNlIHsKKwkJV1I0KHNjLCBN
QUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyB2b2lkIHNldF9wdmlkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcG9ydDAsIGlu
dCBwb3J0MSwgaW50IGNwdSkKK3sKKwl1aW50MzJfdCB2YWw7CisJdmFsID0gUkQ0KHNjLCBWTEFO
X1BPUlRfUFZJRCkgJiAofigweDcgPDwgMCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZh
bCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQwKSAmIDB4MDcpOwor
CVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRf
UFZJRCkgJiAofigweDcgPDwgNCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJ
dmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKChwb3J0MSkgJiAweDA3KSA8PCA0KTsK
KwlXUjQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCisJdmFsID0gUkQ0KHNjLCBWTEFOX1BP
UlRfUFZJRCkgJiAofigweDcgPDwgOCkpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7
CisJdmFsID0gUkQ0KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKChjcHUpICYgMHgwNykgPDwgOCk7
CisJV1I0KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKworfQorCisKKy8qIFZMQU4gcmVsYXRl
ZCBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgc2V0X3ZsYW5fdmlkKHN0cnVjdCBlY2Vfc29m
dGMgKnNjLCBpbnQgdmxhbikKK3sKKwljb25zdCB1aW50MzJfdCByZWdzW10gPSB7CisJCVZMQU5f
VklEXzBfMSwKKwkJVkxBTl9WSURfMF8xLAorCQlWTEFOX1ZJRF8yXzMsCisJCVZMQU5fVklEXzJf
MywKKwkJVkxBTl9WSURfNF81LAorCQlWTEFOX1ZJRF80XzUsCisJCVZMQU5fVklEXzZfNywKKwkJ
VkxBTl9WSURfNl83CisJfTsKKworCWNvbnN0IGludCB2aWRzW10gPSB7CisJCVZMQU4wX1ZJRCwK
KwkJVkxBTjFfVklELAorCQlWTEFOMl9WSUQsCisJCVZMQU4zX1ZJRCwKKwkJVkxBTjRfVklELAor
CQlWTEFONV9WSUQsCisJCVZMQU42X1ZJRCwKKwkJVkxBTjdfVklECisJfTsKKworCXVpbnQzMl90
IHZhbDsKKwl1aW50MzJfdCByZWc7CisJaW50IHZpZDsKKworCXJlZyA9IHJlZ3Nbdmxhbl07CisJ
dmlkID0gdmlkc1t2bGFuXTsKKworCWlmICh2bGFuICYgMSkgeworCQl2YWwgPSBSRDQoc2MsIHJl
Zyk7CisJCVdSNChzYywgcmVnLCB2YWwgJiAofigweEZGRiA8PCAwKSkpOworCQl2YWwgPSBSRDQo
c2MsIHJlZyk7CisJCVdSNChzYywgcmVnLCB2YWx8KCh2aWQgJiAweEZGRikgPDwgMCkpOworCX0g
ZWxzZSB7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbCAmICh+KDB4
RkZGIDw8IDEyKSkpOworCQl2YWwgPSBSRDQoc2MsIHJlZyk7CisJCVdSNChzYywgcmVnLCB2YWx8
KCh2aWQgJiAweEZGRikgPDwgMTIpKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3ZsYW5f
bWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbikKK3sKKwl1bnNpZ25lZCBjaGFy
IHNoaWZ0OworCXVpbnQzMl90IHZhbDsKKwlpbnQgZ3JvdXA7CisJY29uc3QgaW50IGdyb3Vwc1td
ID0geworCQlWTEFOMF9HUk9VUCwKKwkJVkxBTjFfR1JPVVAsCisJCVZMQU4yX0dST1VQLAorCQlW
TEFOM19HUk9VUCwKKwkJVkxBTjRfR1JPVVAsCisJCVZMQU41X0dST1VQLAorCQlWTEFONl9HUk9V
UCwKKwkJVkxBTjdfR1JPVVAKKwl9OworCisJZ3JvdXAgPSBncm91cHNbdmxhbl07CisKKwlzaGlm
dCA9IHZsYW4qMzsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fTUVNQkVSX1BPUlRfTUFQKSAmICAofigw
eDcgPDwgc2hpZnQpKTsKKwlXUjQoc2MsIFZMQU5fTUVNQkVSX1BPUlRfTUFQLCB2YWwpOworCXZh
bCA9IFJENChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVApOworCVdSNChzYywgVkxBTl9NRU1CRVJf
UE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKKworc3RhdGlj
IHZvaWQgc2V0X3ZsYW5fdGFnKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbikKK3sKKwl1
bnNpZ25lZCBjaGFyIHNoaWZ0OworCXVpbnQzMl90IHZhbDsKKworCWludCB0YWcgPSAwOyAvKiBW
TEFOMF9WTEFOX1RBRyAuLiBWTEFON19WTEFOX1RBRyovCisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2
YWwgPSBSRDQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQKSAmICAofigweDcgPDwgc2hpZnQpKTsKKwlX
UjQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IFJENChzYywgVkxBTl9UQUdf
UE9SVF9NQVApOworCVdSNChzYywgVkxBTl9UQUdfUE9SVF9NQVAsIHZhbCB8ICgodGFnICYgMHg3
KSA8PCBzaGlmdCkpOworfQorCisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2NwdV9wb3J0KHN0cnVj
dCBlY2Vfc29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwlpbnQgaTsK
KworCWNwdV9wb3J0X2NvbmZpZyA9IFJENChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwkvKlNBIGxl
YXJuaW5nIERpc2FibGUgKi8KKwljcHVfcG9ydF9jb25maWcgfD0gKDB4MSA8PCAxOSk7CisJLypv
ZmZzZXQgNGJ5dGUgKzIgKi8KKwljcHVfcG9ydF9jb25maWcgJj0gfigxIDw8IDMxKTsKKworCisJ
V1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRl
X2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkJICAgU1RBVElD
X0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkJCQkgICBteV92bGFuMF9tYWMpKSB7CisJCXJldHVybiAx
OworCX0KKworCXNldF9wdmlkKHNjLCAgUE9SVDBfUFZJRCwgUE9SVDFfUFZJRCwgQ1BVX1BPUlRf
UFZJRCk7CisKKwlmb3IgKGk9MDsgaTw4OyBpKyspIHsKKwkJc2V0X3ZsYW5fdmlkKHNjLCBpKTsK
KwkJc2V0X3ZsYW5fbWVtYmVyKHNjLCBpKTsKKwkJc2V0X3ZsYW5fdGFnKHNjLCBpKTsKKwl9CisK
KwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgc3RhdHVzIHNvdXJjZXMgKi8KKwlXUjQoc2MsIElO
VEVSUlVQVF9NQVNLLCAweGZmZmYxZmZmKTsKKworCS8qIGNsZWFyIHByZXZpb3VzIGludGVycnVw
dCBzb3VyY2VzICovCisJV1I0KHNjLCBJTlRFUlJVUFRfU1RBVFVTLCAweDAwMDAxRkZGKTsKKwor
CVdSNChzYywgVFNfRE1BX0NPTlRST0wsIDApOworCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDAp
OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNl
X3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBl
OworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5X3R5cGUoc2MpOworCWlmIChnd19waHlfdHlwZSAh
PSBJQ19QTFVTX1BIWSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJQSFkgdHlwZSBpcyBu
b3QgcmVjb2duaXplZCAoJWQpXG4iLAorCQkgICAgICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4g
LTE7CisJfQorCXN0YXR1cyA9IGNvbmZpZ3VyZV9sYW5fcG9ydChzYywgZ3dfcGh5X3R5cGUpOwor
CWNvbmZpZ3VyZV9jcHVfcG9ydChzYyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQg
c2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGlu
dCBtYWNfbGVuKQoreworCS8qIGludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRy
eSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJ
CSAgICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dST1VQLAorCQkJICAgICAgbWFjKTsKKwltZW1j
cHkobXlfdmxhbjBfbWFjLCBtYWMsIEVUSEVSX0FERFJfTEVOKTsKKworCXdyaXRlX2FybF90YWJs
ZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCQkgICAgICBTVEFUSUNfRU5UUlks
IFZMQU4wX0dST1VQLAorCQkJICAgICAgbWFjKTsKK30KKworCitzdGF0aWMgdm9pZAorZWNlX3Nl
dF9tYWMoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIHVfY2hhciAqZWFkZHIpCit7CisJbWVtY3B5KG15
X3ZsYW4wX21hYywgZWFkZHIsIEVUSEVSX0FERFJfTEVOKTsKKwlzZXRfbWFjX2FkZHJlc3Moc2Ms
IGVhZGRyLCBFVEhFUl9BRERSX0xFTik7Cit9CisKKy8qIFRPRE86IHRoZSBkZXZpY2UgZG9lc24n
dCBoYXZlIE1BQywKKyAqIHNob3VsZCByZWFkIHRoZSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBG
TEFTSAorICovCitzdGF0aWMgaW50CitlY2VfZ2V0X21hYyhzdHJ1Y3QgZWNlX3NvZnRjICpzYywg
dV9jaGFyICplYWRkcikKK3sKKwlyZXR1cm4gKEVOWElPKTsKK30KKworLyp2ZXJzaW9uIGZvciBv
bmUgc2VnbWVudCBvbmx5Ki8KK3N0YXRpYyB2b2lkCitlY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0
IGVjZV9zb2Z0YyAqc2MsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5p
ZnA7CisJc3RydWN0IHJ4X2Rlc2NfaW5mbyAqcnhkZXNjOworCisJdWludDMyX3Qgc3RhdHVzOwor
CisJaW50IGZzc2RfY3VycjsKKwlpbnQgZnNzZDsKKwlpbnQgcnhjb3VudDsKKwlpbnQgaTsKKwlp
bnQgaWR4OworCXN0cnVjdCBtYnVmICptYjsKKwlldGhfcnhfZGVzY190ICpkZXNjOworCisJZnNz
ZF9jdXJyID0gUkQ0KHNjLCBGU19ERVNDUklQVE9SX1BPSU5URVIpOworCisJZnNzZCA9IChmc3Nk
X2N1cnIgLSAodWludDMyX3Qpc2MtPnJpbmdfcGFkZHJfcngpPj40OworCisJZGVzYyA9IHNjLT5y
eF9kZXNjW3NjLT5sYXN0X3J4XS5kZXNjOworCisJLypwcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEg
aW4gdGhlIHJpbmcqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJICAg
IHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1B
U1lOQ19QT1NUV1JJVEUpOworCisKKwlpZiAoZnNzZCA+IHNjLT5sYXN0X3J4KSB7CisJCXJ4Y291
bnQgPSBmc3NkIC0gc2MtPmxhc3Rfcng7CisJfSBlbHNlIGlmIChmc3NkIDwgc2MtPmxhc3Rfcngp
IHsKKwkJcnhjb3VudCA9IChFQ0VfTUFYX1JYX0JVRkZFUlMgLSBzYy0+bGFzdF9yeCkgKyBmc3Nk
OworCX0gZWxzZSB7CisKKwkJaWYgKGRlc2MtPmNvd24gPT0gMCkgeworCQkJcmV0dXJuOworCQl9
IGVsc2UgeworCQkJcnhjb3VudCA9IEVDRV9NQVhfUlhfQlVGRkVSUzsKKwkJfQorCX0KKworCisJ
Zm9yIChpPSAwOyBpPHJ4Y291bnQ7IGkrKykgeworCQkvKiBHZXQgc3RhdHVzICovCisJCXN0YXR1
cyA9IGRlc2MtPmNvd247CisJCWlmICghc3RhdHVzKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlk
eCA9IHNjLT5sYXN0X3J4OworCQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSBy
eGRlc2MtPmJ1ZmY7CisKKwkJaWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhF
Ul9DUkNfTEVOIHx8CisJCSAgICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJf
Q1JDX0xFTiArIEVUSEVSX1ZMQU5fRU5DQVBfTEVOKSB7CisJCQlpZnAtPmlmX2llcnJvcnMrKzsK
KwkJCWRlc2MtPmNvd24gPSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJ
Lypwcm9jZXNzIG5leHQgcGFja2V0Ki8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGVjZV9u
ZXdfcnhidWYoc2MsIHJ4ZGVzYykhPTApIHsKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCQkJZGVz
Yy0+Y293biA9IDA7CisJCQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUyAtIDI7CisJCQlicmVhazsK
KwkJfQorCisJCS8qKgorCQkgKiB0aGUgZGV2aWNlIHdpbGwgd3JpdGUgdG8gWCsyIFNvIHdlIG5l
ZWQgdG8gYWRqdXN0CisJCSAqIHRoaXMgYWZ0ZXIgdGhlIHBhY2tldCBpcyByZWNlaXZlZC4KKwkJ
ICovCisKKwkJbWItPm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVu
ID0gZGVzYy0+bGVuZ3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9w
a3RoZHIucmN2aWYgPSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENT
VU0pICE9IDApIHsKKwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFk
ZXNjLT5sNGYpICAmJiAoZGVzYy0+cHJvdCE9MykpIHsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9m
bGFncyB8PSBDU1VNX0lQX0NIRUNLRUQ7CisJCQkJbWItPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0g
Q1NVTV9JUF9WQUxJRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMHhmZmZmOworCQkJ
fQorCQl9CisJCUVDRV9SWFVOTE9DSyhzYyk7CisJCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtYik7
CisJCUVDRV9SWExPQ0soc2MpOworCisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MtPmxlbmd0
aCA9IE1DTEJZVEVTLTI7CisKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwK
KwkJCQlzYy0+ZG1hbWFwX3JpbmdfcngsCisJCQkJQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19E
TUFTWU5DX1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3Rfcng9PUVDRV9NQVhfUlhfQlVGRkVS
Uy0xKSB7CisJCQlzYy0+bGFzdF9yeCA9IDA7CisJCX0gZWxzZSB7CisJCQlzYy0+bGFzdF9yeCsr
OworCQl9CisJCWRlc2MgPSBzYy0+cnhfZGVzY1tzYy0+bGFzdF9yeF0uZGVzYzsKKwl9CisKKwkv
KiBzeW5jIHVwZGF0ZWQgZmxhZ3MgKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5n
X3J4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIEJVU19ETUFTWU5DX1BSRVJFQUQg
fCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQK
K2VjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1
Y3QgZWNlX3NvZnRjICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50cl9yeF9s
b2NrZWQoc2MsIC0xKTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCisKK3N0YXRpYyB2b2lkCitl
Y2VfaW50cih2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3Ry
dWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElG
Rl9EUlZfUlVOTklORykgPT0gMCkgeworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJ
cmV0dXJuOworCX0KKworCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRy
X3Rhc2spOworCisJaWYgKCFJRlFfRFJWX0lTX0VNUFRZKCZpZnAtPmlmX3NuZCkpCisJCXRhc2tx
dWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY190eF90YXNrKTsKK30KKworc3RhdGljIHZv
aWQKK2VjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg
PSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWludCBzdGF0OworCisJc3Rh
dCA9IFJENChzYywgSU5URVJSVVBUX1NUQVRVUyk7CisKKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFU
VVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykg
IT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSE9MCkKKwkJCWlmcC0+aWZfaXFkcm9w
cysrOworCX0KK30KKworc3RhdGljIHZvaWQKK2VjZV9jbGVhbnVwX2xvY2tlZChzdHJ1Y3QgZWNl
X3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVzY190ICpkZXNjOworCisJaWYgKHNjLT50eF9jb25z
PT1zYy0+dHhfcHJvZCkgcmV0dXJuOworCisJLypwcmVwYXJlIHRvIHJlYWQgdGhlIHJpbmcgKG93
bmVyIGJpdCkqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfdHgsCisJICAgIHNj
LT5kbWFtYXBfcmluZ190eCwKKwkgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1BU1lO
Q19QT1NUV1JJVEUpOworCisJd2hpbGUgKHNjLT50eF9jb25zIT1zYy0+dHhfcHJvZCkgeworCQlk
ZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRlc2M7CisJCWlmIChkZXNjLT5jb3duICE9
IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRkID0gJihzYy0+dHhfZGVzY1tzYy0+dHhf
Y29uc10pOworCQkJLyp3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGlzIGRlc2NyaXB0b3IqLworCQkJ
LypzeW5jKi8KKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX2RhdGFfdHgsIHRkLT5kbWFt
YXAsCisJCQkJCUJVU19ETUFTWU5DX1BPU1RXUklURSk7CisJCQkvKmFuZCB1bmxvYWQsIHNvIHdl
IGNhbiByZXVzZSAqLworCQkJYnVzX2RtYW1hcF91bmxvYWQoc2MtPmRtYXRhZ19kYXRhX3R4LCB0
ZC0+ZG1hbWFwKTsKKwkJCW1fZnJlZW0odGQtPmJ1ZmYpOworCQkJdGQtPmJ1ZmYgPSAwOworCQkJ
c2MtPnR4X2NvbnMgPSAoc2MtPnR4X2NvbnMgKyAxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKwkJ
fSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2xl
YW51cF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpCit7CisJc3RydWN0IGVj
ZV9zb2Z0YyAqc2MgPSBhcmc7CisJRUNFX0NMRUFOVVBMT0NLKHNjKTsKKwllY2VfY2xlYW51cF9s
b2NrZWQoc2MpOworCUVDRV9DTEVBTlVQVU5MT0NLKHNjKTsKK30KKworCitzdGF0aWMgdm9pZAor
ZWNlX2ludHJfdHgodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYg
SUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8qdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc3Rv
cCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0
YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfY2xlYW51cF90YXNrKTsKK30KKwor
CitzdGF0aWMgdm9pZAorZWNlX2ludHJfcWYodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29m
dGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKwlpZiAoKGlmcC0+
aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8qdGhpcyBzaG91bGQg
bm90IGhhcHBlbiwgc3RvcCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJ
cmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfaW50cl90
YXNrKTsKKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoKKyAqIFJlc2V0IGFu
ZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vpbml0X2xvY2tlZCh2
b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0
ICppZnAgPSBzYy0+aWZwOworIAlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKwl1aW50MzJfdCBjZmdf
cmVnOworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwl1aW50MzJfdCBtYWNfcG9ydF9jb25m
aWc7CisKKwl3aGlsZSAoMSkgeworCQljZmdfcmVnID0gUkQ0KHNjLCBCSVNUX1JFU1VMVF9URVNU
XzApOworCQlpZiAoKGNmZ19yZWcgJiAoMTw8MTcpKSkKKwkJCWJyZWFrOworCQlERUxBWSgxMDAp
OworCX0KKwkvKiBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KKwlXUjQoc2MsIFNXSVRDSF9DT05G
SUcsIDB4MDA3QUE3QTEpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIDB4MDA0MjNEMDAp
OworCVdSNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIDB4MDA0MjNEODApOworCVdSNChzYywgQ1BV
X1BPUlRfQ09ORklHLCAweDAwNEMwMDAwKTsKKworCisJaGFyZHdhcmVfaW5pdChzYyk7CisKKwlt
YWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsKKwltYWNfcG9ydF9j
b25maWcgJj0gKH4oMHgxIDw8IDE4KSk7CS8qIEVuYWJsZSBQb3J0IDAgKi8KKwlXUjQoc2MsIE1B
Q19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisKKwljcHVfcG9ydF9jb25maWcg
PSBSRDQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogZW5hYmxlIENQVSAqLworCWNwdV9wb3J0
X2NvbmZpZyAmPSB+KDB4MSA8PCAxOCk7CisJV1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9w
b3J0X2NvbmZpZyk7CisKKworCS8qCisJICogU2V0ICdydW5uaW5nJyBmbGFnLCBhbmQgY2xlYXIg
b3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQgdG8gc3RhcnQgdGhlIG91dHB1dAor
CSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklORzsKKwlpZnAtPmlmX2Ry
dl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0Yyhz
Yy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkvKiBlbmFibGUgZG1hICovCisJV1I0
KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisKKwljYWxsb3V0X3Jlc2V0KCZzYy0+dGlja19jaCwg
aHosIGVjZV90aWNrLCBzYyk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQKK2VjZV9lbmNhcChz
dHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVjdCBpZm5ldCAq
aWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwlidXNfZG1hbWFw
X3QgbWFwcDsKKwlpbnQgZXJyb3I7CisJaW50IHNlZzsKKwlpbnQgbnNlZ3M7CisJaW50IGRlc2Nf
bm87CisJZXRoX3R4X2Rlc2NfdCAqZGVzYyA9IDA7CisKKwlpbnQgY3N1bV9mbGFnczsKKworCWlm
cCA9IHNjLT5pZnA7CisKKwkvKiBGZXRjaCB1bnVzZWQgbWFwICovCisJbWFwcCA9IHNjLT50eF9k
ZXNjW3NjLT50eF9wcm9kXS5kbWFtYXA7CisKKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVm
X3NnKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCwgbTAsIHNlZ3MsICZuc2VncywKKwkgICAgQlVT
X0RNQV9OT1dBSVQpOworCisJaWYgKGVycm9yICE9IDApIHsKKwkJYnVzX2RtYW1hcF91bmxvYWQo
c2MtPmRtYXRhZ19yaW5nX3R4LCBtYXBwKTsKKwkJcmV0dXJuICgoZXJyb3IgIT0gMCkgPyBlcnJv
ciA6IC0xKTsKKwl9CisKKworCWRlc2MgPSAmKHNjLT5kZXNjX3R4W3NjLT5kZXNjX2N1cnJfdHhd
KTsKKwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uZGVzYyA9IGRlc2M7CisJc2MtPnR4X2Rlc2Nb
c2MtPnR4X3Byb2RdLmJ1ZmYgPSBtMDsKKwlkZXNjX25vID0gc2MtPmRlc2NfY3Vycl90eDsKKwor
CWZvciAoc2VnID0gMDsgc2VnIDwgbnNlZ3M7IHNlZysrKSB7CisKKwkJaWYgKGRlc2MtPmNvd24g
PT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRvciBpcyBzdGlsbCB1
c2VkXG4iKTsKKwkJfQorCisJCWRlc2MtPmxlbmd0aCA9IHNlZ3Nbc2VnXS5kc19sZW47CisJCWRl
c2MtPmRhdGFfcHRyID0gc2Vnc1tzZWddLmRzX2FkZHI7CisKKwkJaWYgKHNlZyA9PSAwKSB7CisJ
CQlkZXNjLT5mcyA9IDE7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5mcyA9IDA7CisJCX0KKwkJaWYg
KHNlZz09bnNlZ3MtMSkgeworCQkJZGVzYy0+bHMgPSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+
bHMgPSAwOworCQl9CisKKwkJY3N1bV9mbGFncyA9IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOwor
CisJCWRlc2MtPmZyID0gIDE7CisJCWRlc2MtPnBtYXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAw
OworCQlkZXNjLT5pY28gPSAwOworCQlkZXNjLT50Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOwor
CQlkZXNjLT5pbnRlcnJ1cHQgPSAxOworCisJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgewor
CQkJZGVzYy0+aWNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVz
Yy0+dGNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNv
ID0gMTsKKwkJfQorCisJCWRlc2MrKzsKKwkJc2MtPmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19j
dXJyX3R4KzEpICUgRUNFX01BWF9UWF9CVUZGRVJTOworCQlpZiAoc2MtPmRlc2NfY3Vycl90eD09
MCkgeworCQkJZGVzYyA9IChldGhfdHhfZGVzY190ICopJihzYy0+ZGVzY190eFswXSk7CisJCX0K
Kwl9CisKKwlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X3Byb2RdLmRlc2M7CisKKwlzYy0+dHhf
cHJvZCA9IChzYy0+dHhfcHJvZCsxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qYWZ0ZXIg
YWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdlIHNldCB0aGUgZmxhZyB0byBzdGFydCB0aGUgc2Vu
ZGluZyBwcm9jZXNzICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJ
ZGVzYy0+Y293biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25vKzEpICUgRUNF
X01BWF9UWF9CVUZGRVJTOworCQlpZiAoZGVzY19ubz09MCkgeworCQkJZGVzYyA9IChldGhfdHhf
ZGVzY190ICopJihzYy0+ZGVzY190eFswXSk7CisJCX0KKworCX0KKworCWJ1c19kbWFtYXBfc3lu
YyhzYy0+ZG1hdGFnX2RhdGFfdHgsIG1hcHAsICAgIEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKwor
CXJldHVybiAoMCk7Cit9CisKKworCisKKy8qCisgKiBkZXF1ZXUgcGFja2V0cyBhbmQgdHJhbnNt
aXQKKyAqLworc3RhdGljIHZvaWQKK2VjZXN0YXJ0X2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCkK
K3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbWJ1ZiAqbTA7CisjaWYgMAorCXN0
cnVjdCBtYnVmICptZGVmOworI2VuZGlmCisJdWludDMyX3QgcXVldWVkID0gMDsKKworCXNjID0g
aWZwLT5pZl9zb2Z0YzsKKwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgKElGRl9EUlZfUlVOTklO
RyB8IElGRl9EUlZfT0FDVElWRSkpICE9CisJICAgIElGRl9EUlZfUlVOTklORykKKwkJcmV0dXJu
OworCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ190eCwKKwkgICAgc2MtPmRtYW1h
cF9yaW5nX3R4LAorCSAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RX
UklURSk7CisKKwlmb3IgKDs7KSB7CisJCS8qIEdldCBwYWNrZXQgZnJvbSB0aGUgcXVldWUgKi8K
KwkJSUZfREVRVUVVRSgmaWZwLT5pZl9zbmQsIG0wKTsKKwkJaWYgKG0wID09IE5VTEwpCisJCQli
cmVhazsKKyNpZiAwCisJCWlmIChtMC0+bV9uZXh0ICE9IE5VTEwpIHsKKwkJCW1kZWYgPSBtX2Rl
ZnJhZyhtMCwgTV9ET05UV0FJVCk7CisJCQlpZiAobWRlZikgeworCQkJCW0wID0gbWRlZjsKKwkJ
CX0KKwkJfQorI2VuZGlmCisJCWlmIChlY2VfZW5jYXAoc2MsIG0wKSkgeworCQkJSUZfUFJFUEVO
RCgmaWZwLT5pZl9zbmQsIG0wKTsKKwkJCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfT0FD
VElWRTsKKwkJCWJyZWFrOworCQl9CisJCXF1ZXVlZCsrOworCQlCUEZfTVRBUChpZnAsIG0wKTsK
Kwl9CisJaWYgKHF1ZXVlZCkgeworCQkvKnN5bmMgdGhlIHJpbmcqLworCQlidXNfZG1hbWFwX3N5
bmMoc2MtPmRtYXRhZ19yaW5nX3R4LCBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJCQkJQlVTX0RNQVNZ
TkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJCVdSNChzYywgVFNfRE1BX0NPTlRS
T0wsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2VjZWluaXQodm9pZCAqeHNjKQoreworCXN0
cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCUVDRV9MT0NLKHNjKTsKKwllY2Vpbml0X2xvY2tl
ZChzYyk7CisJRUNFX1VOTE9DSyhzYyk7Cit9CisKKworc3RhdGljIHZvaWQKK2VjZV90eF90YXNr
KHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpCit7CisJc3RydWN0IGlmbmV0ICppZnA7
CisJaWZwID0gKHN0cnVjdCBpZm5ldCAqKWFyZzsKKwllY2VzdGFydChpZnApOworfQorCisKK3N0
YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNFX1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9j
a2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsKK30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVy
cnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4gYmUgY2FsbGVkIHdpdGggc2MtPmlmcCBOVUxM
CisgKiBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNl
X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3Qg
bWFjX3BvcnRfY29uZmlnOworCisKKwlXUjQoc2MsIFRTX0RNQV9DT05UUk9MLCAwKTsKKwlXUjQo
c2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKworCWlmIChpZnApIHsKKwkJaWZwLT5pZl9kcnZfZmxh
Z3MgJj0gfihJRkZfRFJWX1JVTk5JTkcgfCBJRkZfRFJWX09BQ1RJVkUpOworCX0KKworCWNhbGxv
dXRfc3RvcCgmc2MtPnRpY2tfY2gpOworCisJLypEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0
X2NvbmZpZyA9IFJENChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8
PSAoKDB4MSA8PCAxOCkpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0X2Nv
bmZpZyk7CisKKwkvKkRpc2FibGUgUG9ydCAxICovCisJbWFjX3BvcnRfY29uZmlnID0gUkQ0KHNj
LCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9ICgoMHgxIDw8IDE4KSk7
CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qIGRp
c2FibGUgYWxsIGludGVycnVwdCBzdGF0dXMgc291cmNlcyAqLworCVdSNChzYywgSU5URVJSVVBU
X01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJj
ZXMgKi8KKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIDB4MDAwMDFGRkYpOworCisJV1I0KHNj
LCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOworCVdSNChzYywgQ1BVX1BP
UlRfQ09ORklHLCBpbml0aWFsX2NwdV9jb25maWcpOworCVdSNChzYywgTUFDX1BPUlRfMF9DT05G
SUcsIGluaXRpYWxfcG9ydDBfY29uZmlnKTsKKwlXUjQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBp
bml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywgMSk7CisKKwor
fQorCitzdGF0aWMgdm9pZAorZWNlX3Jlc3RhcnQoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJ
c3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZG
X0RSVl9SVU5OSU5HOworCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisJ
LyplbmFibGUgcG9ydCAwKi8KKwlXUjQoc2MsIFBPUlRfMF9DT05GSUcsCisJICAgIFJENChzYywg
UE9SVF8wX0NPTkZJRykgJiB+KCgweDEgPDwgMTgpKSk7CisJV1I0KHNjLCBJTlRFUlJVUFRfTUFT
SywgMHgwMDAwMDAwMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisJY2FsbG91dF9y
ZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2MpOworfQorCisKKworc3RhdGljIHZv
aWQKK3NldF9maWx0ZXIoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGlmbmV0CQkq
aWZwOworCXN0cnVjdCBpZm11bHRpYWRkcgkqaWZtYTsKKwl1aW50MzJfdCBtYWNfcG9ydF9jb25m
aWc7CisKKwlpZnAgPSBzYy0+aWZwOworCisJY2xlYXJfbWFjX2VudHJpZXMoc2MsIDApOworCWlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJP
TUlTQykgeworCQltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsK
KwkJbWFjX3BvcnRfY29uZmlnICY9ICh+KDB4MSA8PCAyNykpOworCQltYWNfcG9ydF9jb25maWcg
Jj0gKH4oMHgxIDw8IDI2KSk7CisJCVdSNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0
X2NvbmZpZyk7CisJCXJldHVybjsKKwl9CisJaWZfbWFkZHJfcmxvY2soaWZwKTsKKwlUQUlMUV9G
T1JFQUNIKGlmbWEsICZpZnAtPmlmX211bHRpYWRkcnMsIGlmbWFfbGluaykgeworCQlpZiAoaWZt
YS0+aWZtYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfTElOSykKKwkJCWNvbnRpbnVlOworCQlhZGRf
bWFjX2VudHJ5KHNjLCBMTEFERFIoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKWlmbWEtPmlmbWFfYWRk
cikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9CisKK3N0YXRpYyBpbnQKK2VjZWlv
Y3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpCit7CisJc3Ry
dWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworIAlzdHJ1Y3QgbWlpX2RhdGEgKm1p
aTsKKyAJc3RydWN0IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICopZGF0YTsKKwlpbnQgbWFz
aywgZXJyb3IgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJ
RUNFX0xPQ0soc2MpOworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApID09IDAgJiYKKwkJ
ICAgIGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSB7CisJCQlpZnAtPmlmX2Ry
dl9mbGFncyAmPSB+SUZGX0RSVl9SVU5OSU5HOworCQkJZWNlc3RvcChzYyk7CisJCX0gZWxzZSB7
CisJCQkvKiByZWluaXRpYWxpemUgY2FyZCBvbiBhbnkgcGFyYW1ldGVyIGNoYW5nZSAqLworCQkJ
aWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSAmJgorCQkJICAgICEoaWZwLT5pZl9kcnZfZmxh
Z3MgJiBJRkZfRFJWX1JVTk5JTkcpCisJCQkgICApeworCQkJCWVjZV9yZXN0YXJ0KHNjKTsKKwkJ
CX0KKwkJfQorCQlFQ0VfVU5MT0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NBRERNVUxU
SToKKwljYXNlIFNJT0NERUxNVUxUSToKKwkJRUNFX0xPQ0soc2MpOworCQlzZXRfZmlsdGVyKHNj
KTsKKwkJRUNFX1VOTE9DSyhzYyk7CisJCWJyZWFrOworCisgIAljYXNlIFNJT0NTSUZNRURJQToK
KyAgCWNhc2UgU0lPQ0dJRk1FRElBOgorIAkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlp
YnVzKTsKKyAJCWVycm9yID0gaWZtZWRpYV9pb2N0bChpZnAsIGlmciwgJm1paS0+bWlpX21lZGlh
LCBjbWQpOworICAJCWJyZWFrOworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZf
Y2FwZW5hYmxlIF4gaWZyLT5pZnJfcmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRV
KSB7CisJCQlFQ0VfTE9DSyhzYyk7CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6
CisJCWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJ
cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2
aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwor
CXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQor
CQlzYy0+bWlpYnVzID0gTlVMTDsKK30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5l
cy4KKyAqLworc3RhdGljIGludAorZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50
IHBoeSwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKm9ubHkgb25lIHBo
eSovCisJaWYgKHBoeT4wKSByZXR1cm4gMDsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
KwlyZXR1cm4gcGh5X3JlYWQoc2MsIHBoeSwgcmVnKTsKK30KKworc3RhdGljIGludAorZWNlX21p
aWJ1c193cml0ZXJlZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcsIGludCBkYXRhKQor
eworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor
CXBoeV93cml0ZShzYywgcGh5LCByZWcsIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMg
ZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAq
LworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQllY2VfcHJvYmUpLAorCURFVk1FVEhPRChkZXZp
Y2VfYXR0YWNoLAllY2VfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZWNlX2Rl
dGFjaCksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19jaGlsZF9kZXRh
Y2hlZCwJZWNlX2NoaWxkX2RldGFjaGVkKSwKKworCS8qIE1JSSBpbnRlcmZhY2UgKi8KKwlERVZN
RVRIT0QobWlpYnVzX3JlYWRyZWcsCWVjZV9taWlidXNfcmVhZHJlZyksCisJREVWTUVUSE9EKG1p
aWJ1c193cml0ZXJlZywJZWNlX21paWJ1c193cml0ZXJlZyksCisKKwl7IDAsIDAgfQorfTsKKwor
c3RhdGljIGRyaXZlcl90IGVjZV9kcml2ZXIgPSB7CisJImVjZSIsCisJZWNlX21ldGhvZHMsCisJ
c2l6ZW9mKHN0cnVjdCBlY2Vfc29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShlY2UsIGVjb25h
YXJtLCBlY2VfZHJpdmVyLCBlY2VfZGV2Y2xhc3MsIDAsIDApOworRFJJVkVSX01PRFVMRShtaWli
dXMsIGVjZSwgbWlpYnVzX2RyaXZlciwgbWlpYnVzX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9E
RVBFTkQoZWNlLCBtaWlidXMsIDEsIDEsIDEpOworTU9EVUxFX0RFUEVORChlY2UsIGV0aGVyLCAx
LCAxLCAxKTsKSW5kZXg6IHN5cy9hcm0vZWNvbmEvaWZfZWNlcmVnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c3lzL2FybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEv
aWZfZWNlcmVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAwOSwgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMv
c3lzL2Rldi9qbWUvaWZfam1lcmVnLmgsdiAxLjYgMjAwOC8xMi8wNCAwMjoxNjo1MyB5b25nYXJp
IEV4cCAkCisgKi8KKworI2lmbmRlZglfSUZfRUNFUkVHX0gKKyNkZWZpbmUJX0lGX0VDRVJFR19I
CisKKyNkZWZpbmUgRVRIX0NGRyAweDA4CisjZGVmaW5lIEVUSF9DRkdfUk1JSSAoMSA8PCAxNSkK
KyNkZWZpbmUgUEhZX0NPTlRST0wgMHgwMAorI2RlZmluZSBQT1JUXzBfQ09ORklHIDB4MDgKKwor
I2RlZmluZSBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCAweDA1MAorI2RlZmluZSBBUkxfVEFC
TEVfQUNDRVNTX0NPTlRST0xfMSAweDA1NAorI2RlZmluZSBBUkxfVEFCTEVfQUNDRVNTX0NPTlRS
T0xfMiAweDA1OAorCisKKyNkZWZpbmUgUE9SVDAgICAgICAgICAgICAgICAoMSA8PCAwKSAgICAv
KiBiaXQgbWFwIDogYml0IDAgKi8KKyNkZWZpbmUgUE9SVDEgICAgICAgICAgICAgICAoMSA8PCAx
KSAgICAvKiBiaXQgbWFwIDogYml0IDEgKi8KKyNkZWZpbmUgQ1BVX1BPUlQgICAgICAgICAgICAo
MSA8PCAyKSAgICAvKiBiaXQgbWFwIDogYml0IDIgKi8KKworCisjZGVmaW5lIFZMQU4wX0dST1VQ
X0lEICAgICAgKDApCisjZGVmaW5lIFZMQU4xX0dST1VQX0lEICAgICAgKDEpCisjZGVmaW5lIFZM
QU4yX0dST1VQX0lEICAgICAgKDIpCisjZGVmaW5lIFZMQU4zX0dST1VQX0lEICAgICAgKDMpCisj
ZGVmaW5lIFZMQU40X0dST1VQX0lEICAgICAgKDQpCisjZGVmaW5lIFZMQU41X0dST1VQX0lEICAg
ICAgKDUpCisjZGVmaW5lIFZMQU42X0dST1VQX0lEICAgICAgKDYpCisjZGVmaW5lIFZMQU43X0dS
T1VQX0lEICAgICAgKDcpCisKKyNkZWZpbmUgUE9SVDBfUFZJRCAgICAgICAgICAoVkxBTjFfR1JP
VVBfSUQpCisjZGVmaW5lIFBPUlQxX1BWSUQgICAgICAgICAgKFZMQU4yX0dST1VQX0lEKQorI2Rl
ZmluZSBDUFVfUE9SVF9QVklEICAgICAgIChWTEFOMF9HUk9VUF9JRCkKKworI2RlZmluZSBWTEFO
MF9WSUQgICAgICAgICAgICgweDExMSkKKyNkZWZpbmUgVkxBTjFfVklEICAgICAgICAgICAoMHgy
MjIpCisjZGVmaW5lIFZMQU4yX1ZJRCAgICAgICAgICAgKDB4MzMzKQorI2RlZmluZSBWTEFOM19W
SUQgICAgICAgICAgICgweDQ0NCkKKyNkZWZpbmUgVkxBTjRfVklEICAgICAgICAgICAoMHg1NTUp
CisjZGVmaW5lIFZMQU41X1ZJRCAgICAgICAgICAgKDB4NjY2KQorI2RlZmluZSBWTEFONl9WSUQg
ICAgICAgICAgICgweDc3NykKKyNkZWZpbmUgVkxBTjdfVklEICAgICAgICAgICAoMHg4ODgpCisK
KyNkZWZpbmUgVkxBTjBfR1JPVVAgICAgICAgICAoUE9SVDAgfCBQT1JUMSB8IENQVV9QT1JUKQor
I2RlZmluZSBWTEFOMV9HUk9VUCAgICAgICAgIChQT1JUMCB8IENQVV9QT1JUKQorI2RlZmluZSBW
TEFOMl9HUk9VUCAgICAgICAgIChQT1JUMSB8IENQVV9QT1JUKQorI2RlZmluZSBWTEFOM19HUk9V
UCAgICAgICAgICgwKQorI2RlZmluZSBWTEFONF9HUk9VUCAgICAgICAgICgwKQorI2RlZmluZSBW
TEFONV9HUk9VUCAgICAgICAgICgwKQorI2RlZmluZSBWTEFONl9HUk9VUCAgICAgICAgICgwKQor
I2RlZmluZSBWTEFON19HUk9VUCAgICAgICAgICgwKQorCisKKworI2RlZmluZSBWTEFOMF9WTEFO
X1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFOMV9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBW
TEFOMl9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFOM19WTEFOX1RBRyAgICAgICgwKQor
I2RlZmluZSBWTEFONF9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFONV9WTEFOX1RBRyAg
ICAgICgwKQorI2RlZmluZSBWTEFONl9WTEFOX1RBRyAgICAgICgwKQorI2RlZmluZSBWTEFON19W
TEFOX1RBRyAgICAgICgwKQorCisjZGVmaW5lIFNXSVRDSF9DT05GSUcgMHgwMDQKKyNkZWZpbmUg
TUFDX1BPUlRfMF9DT05GSUcgMHgwMDgKKyNkZWZpbmUgTUFDX1BPUlRfMV9DT05GSUcgMHgwMEMK
KyNkZWZpbmUgQ1BVX1BPUlRfQ09ORklHIDB4MDEwCisjZGVmaW5lIEJJU1RfUkVTVUxUX1RFU1Rf
MCAweDA5NAorCisjZGVmaW5lIEZTX0RNQV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MTA0Cisj
ZGVmaW5lIFRTX0RNQV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MTAwCisKKyNkZWZpbmUgSU5U
RVJSVVBUX01BU0sgMHgwOEMKKyNkZWZpbmUgSU5URVJSVVBUX1NUQVRVUyAweDA4OAorCisjZGVm
aW5lIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiAgICAgMHgxMDgKKyNkZWZpbmUgVFNfREVTQ1JJUFRP
Ul9CQVNFX0FERFIgICAweDExMAorI2RlZmluZSBGU19ERVNDUklQVE9SX1BPSU5URVIgICAgIDB4
MTBDCisjZGVmaW5lIEZTX0RFU0NSSVBUT1JfQkFTRV9BRERSICAgMHgxMTQKKworCisjZGVmaW5l
IFZMQU5fVklEXzBfMSAgICAgIDB4MDYwCisjZGVmaW5lIFZMQU5fVklEXzJfMyAgICAgIDB4MDY0
CisjZGVmaW5lIFZMQU5fVklEXzRfNSAgICAgIDB4MDY4CisjZGVmaW5lIFZMQU5fVklEXzZfNyAg
ICAgIDB4MDZDCisKKyNkZWZpbmUgVkxBTl9QT1JUX1BWSUQgICAgICAgMHgwNUMKKyNkZWZpbmUg
VkxBTl9NRU1CRVJfUE9SVF9NQVAgMHgwNzAKKyNkZWZpbmUgVkxBTl9UQUdfUE9SVF9NQVAgICAg
MHgwNzQKKworCisjZGVmaW5lIEFTSVhfR0lHQV9QSFkgICAxCisjZGVmaW5lIFRXT19TSU5HTEVf
UEhZICAyCisjZGVmaW5lIEFHRVJFX0dJR0FfUEhZIDMKKyNkZWZpbmUgVlNDODYwMV9HSUdBX1BI
WSA0CisjZGVmaW5lIElDX1BMVVNfUEhZCTUKKyNkZWZpbmUgTk9UX0ZPVU5EX1BIWSAtMQorCisj
ZGVmaW5lIE1BWF9QQUNLRVRfTEVOICAgICAgICAgICAoMTUzNikKKworI2RlZmluZSBJTlZBTElE
X0VOVFJZIDAKKyNkZWZpbmUgTkVXX0VOVFJZIDB4MQorI2RlZmluZSBTVEFUSUNfRU5UUlkgMHg3
CisKKy8qbWFzayBzdGF0dXMgZXhjZXB0IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lIEVSUk9S
X01BU0sgMHhGRkZGRkY3RgorCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29uYS9jZmlfYnVz
X2Vjb25hLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJKHJl
dmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdy
b2hvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+
CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk
ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv
cm1hbi5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVz
Lmg+CisKKyNpbmNsdWRlIDxkZXYvY2ZpL2NmaV92YXIuaD4KKworI2luY2x1ZGUgPGFybS9lY29u
YS9lY29uYV9yZWcuaD4KKyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+CisKK3N0YXRp
YyBpbnQKK2NmaV9lY29uYV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJcmV0dXJuIGNmaV9wcm9i
ZShkZXYpOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGNmaV9lY29uYV9tZXRob2RzW10g
PSB7CisJLyogZGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlj
ZmlfZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAljZmlfYXR0YWNoKSwK
KwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJY2ZpX2RldGFjaCksCisKKwl7MCwgMH0KK307CisK
K3N0YXRpYyBkcml2ZXJfdCBjZmlfZWNvbmFfZHJpdmVyID0geworCWNmaV9kcml2ZXJfbmFtZSwK
KwljZmlfZWNvbmFfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGNmaV9zb2Z0YyksCit9OworRFJJ
VkVSX01PRFVMRShjZmksIGVjb25hYXJtLCBjZmlfZWNvbmFfZHJpdmVyLCBjZmlfZGV2Y2xhc3Ms
IDAsIDApOwpJbmRleDogc3lzL2FybS9lY29uYS90aW1lci5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9h
cm0vZWNvbmEvdGltZXIuYwkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEvdGltZXIuYwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5
IFlvaGFuZXMgTnVncm9oby4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0QgJCIpOworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1
ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2Vy
bmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K
KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1ldGMuaD4KKyNpbmNsdWRl
IDxzeXMvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1h
Y2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hp
bmUvaW50ci5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNvbmFfdmFy
LmgiCisKKyNkZWZpbmUgSU5JVElBTF9USU1FQ09VTlRFUgkoMHhmZmZmZmZmZikKKworc3RhdGlj
IGludCB0aW1lcnNfaW5pdGlhbGl6ZWQgPSAwOworCisjZGVmaW5lIEhaIDEwMAorCit1bnNpZ25l
ZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5zaWduZWQgaW50IEFIQl9jbG9jazsKK3Vu
c2lnbmVkIGludCBBUEJfY2xvY2s7CisKK3Vuc2lnbmVkIGludCBnZXRfdGNsayh2b2lkKTsKKwor
c3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfY291bnRlciA9IDAsIHN5c19jbG9jayA9IDEwMDAw
MDAwMDsKKworc3RydWN0IGVjX3RpbWVyX3NvZnRjIHsKKwlzdHJ1Y3QgcmVzb3VyY2UJKgl0aW1l
cl9yZXNbM107CisJYnVzX3NwYWNlX3RhZ190CQl0aW1lcl9ic3Q7CisJYnVzX3NwYWNlX2hhbmRs
ZV90CXRpbWVyX2JzaDsKKwlzdHJ1Y3QgbXR4CQl0aW1lcl9tdHg7Cit9OworCisKK3N0YXRpYyBz
dHJ1Y3QgcmVzb3VyY2Vfc3BlYyBlY190aW1lcl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9S
WSwJMCwJUkZfQUNUSVZFIH0sCisJeyBTWVNfUkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsg
U1lTX1JFU19JUlEsCQkxLAlSRl9BQ1RJVkUgfSwKKwl7IC0xLCAwIH0KK307CisKKworc3RhdGlj
IHVuc2lnbmVkIGVjX3RpbWVyX2dldF90aW1lY291bnQoc3RydWN0IHRpbWVjb3VudGVyICopOwor
CitzdGF0aWMgc3RydWN0IHRpbWVjb3VudGVyIGVjX3RpbWVjb3VudGVyID0geworCS50Y19nZXRf
dGltZWNvdW50ID0gZWNfdGltZXJfZ2V0X3RpbWVjb3VudCwKKwkudGNfbmFtZSA9ICJDUFUgVGlt
ZXIiLAorCS50Y19mcmVxdWVuY3kgPSAwLAkvKiBUaGlzIGlzIGFzc2lnbmVkIG9uIHRoZSBmbHkg
aW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19x
dWFsaXR5ID0gMTAwMCwKK307CisKKworc3RhdGljIHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqdGlt
ZXJfc29mdGMgPSBOVUxMOworCitzdGF0aWMgaW5saW5lCit2b2lkIFdSNCh1bnNpZ25lZCBpbnQg
dmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlidXNfc3BhY2Vfd3JpdGVfNCh0aW1lcl9zb2Z0
Yy0+dGltZXJfYnN0LAorCQkJICB0aW1lcl9zb2Z0Yy0+dGltZXJfYnNoLCBhZGRyLCB2YWwpOwor
Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGludCBSRDQodW5zaWduZWQgaW50IGFkZHIp
Cit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQodGltZXJfc29mdGMtPnRpbWVyX2JzdCwKKwkg
ICAgdGltZXJfc29mdGMtPnRpbWVyX2JzaCwgYWRkcik7Cit9CisKKworCisjZGVmaW5lIHVTRUNT
X1BFUl9USUNLCSgxMDAwMDAwIC8gQVBCX2Nsb2NrKQorI2RlZmluZSBUSUNLUzJVU0VDUyh4KSAg
KCh4KSAqIHVTRUNTX1BFUl9USUNLKQorCisKK3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9j
b3VudGVyX25vaW50KHZvaWQpCit7CisJYXJtX21hc2tfaXJxKDApOworCXVuc2lnbmVkIGludCB2
ID0gUkQ0KFRJTUVSX1RNMV9DT1VOVEVSX1JFR19PRkZTRVQpOworCWFybV91bm1hc2tfaXJxKDAp
OworCXJldHVybiB2OworfQorCit2b2lkCitERUxBWShpbnQgdXNlYykKK3sKKwl1aW50MzJfdCB2
YWwsIHZhbF90ZW1wOworCWludCBudGlja3M7CisKKwlpZiAoIXRpbWVyc19pbml0aWFsaXplZCkg
eworCQlmb3IgKDsgdXNlYyA+IDA7IHVzZWMtLSkKKwkJCWZvciAodmFsID0gMTAwOyB2YWwgPiAw
OyB2YWwtLSkKKwkJCQk7CisJCXJldHVybjsKKwl9CisKKwl2YWwgPSByZWFkX3RpbWVyX2NvdW50
ZXJfbm9pbnQoKTsKKwludGlja3MgPSAoKChBUEJfY2xvY2svMTAwMCkgKiB1c2VjKSAvIDEwMDAp
KzEwMDsKKworCXdoaWxlIChudGlja3MgPiAwKSB7CisJCXZhbF90ZW1wID0gcmVhZF90aW1lcl9j
b3VudGVyX25vaW50KCk7CisJCWlmICh2YWwgPiB2YWxfdGVtcCkKKwkJCW50aWNrcyAtPSAodmFs
IC0gdmFsX3RlbXApOworCQllbHNlCisJCQludGlja3MgLT0gKHZhbCArICh0aW1lcl9jb3VudGVy
IC0gdmFsX3RlbXApKTsKKworCisJCXZhbCA9IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICog
U2V0dXAgdGltZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25l
ZCBpbnQgY291bnRlcl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1
bnNpZ25lZCBpbnQgbWFza192YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSBSRDQoVElNRVJfVE1f
Q1JfUkVHX09GRlNFVCk7CisKKwltYXNrX3ZhbHVlID0gUkQ0KFRJTUVSX1RNX0lOVFJfTUFTS19S
RUdfT0ZGU0VUKTsKKwlXUjQoY291bnRlcl92YWx1ZSwgVElNRVJfVE0xX0NPVU5URVJfUkVHX09G
RlNFVCk7CisJV1I0KGNvdW50ZXJfdmFsdWUsIFRJTUVSX1RNMV9MT0FEX1JFR19PRkZTRVQpOwor
CVdSNCgwLCBUSU1FUl9UTTFfTUFUQ0gxX1JFR19PRkZTRVQpOworCVdSNCgwLFRJTUVSX1RNMV9N
QVRDSDJfUkVHX09GRlNFVCk7CisKKwljb250cm9sX3ZhbHVlICY9IH4oVElNRVIxX0NMT0NLX1NP
VVJDRSk7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjFfVVBfRE9XTl9DT1VOVDsKKworCVdSNCgw
LCBUSU1FUl9UTTJfQ09VTlRFUl9SRUdfT0ZGU0VUKTsKKwlXUjQoMCwgVElNRVJfVE0yX0xPQURf
UkVHX09GRlNFVCk7CisJV1I0KH4wdSwgVElNRVJfVE0yX01BVENIMV9SRUdfT0ZGU0VUKTsKKwlX
UjQofjB1LFRJTUVSX1RNMl9NQVRDSDJfUkVHX09GRlNFVCk7CisKKwljb250cm9sX3ZhbHVlICY9
IH4oVElNRVIyX0NMT0NLX1NPVVJDRSk7CisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9VUF9E
T1dOX0NPVU5UKTsKKworCW1hc2tfdmFsdWUgJj0gfig2Myk7CisKKwlXUjQoY29udHJvbF92YWx1
ZSwgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCk7CisJV1I0KG1hc2tfdmFsdWUsIFRJTUVSX1RNX0lO
VFJfTUFTS19SRUdfT0ZGU0VUKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aW1lcgorICovCitzdGF0
aWMgaW5saW5lIHZvaWQKK3RpbWVyX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjb250
cm9sX3ZhbHVlOworCisJY29udHJvbF92YWx1ZSA9IFJENChUSU1FUl9UTV9DUl9SRUdfT0ZGU0VU
KTsKKworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9s
X3ZhbHVlIHw9IFRJTUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJfT1ZFUkZM
T1dfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCVdSNChjb250
cm9sX3ZhbHVlLCAgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCk7Cit9CisKKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKwlyZXR1
cm4gUkQ0KFRJTUVSX1RNMl9DT1VOVEVSX1JFR19PRkZTRVQpOworfQorCisKKy8qCisgKiBHZXQg
dGltZXIgaW50ZXJydXB0IHN0YXR1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAor
cmVhZF90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIFJENChUSU1FUl9U
TV9JTlRSX1NUQVRVU19SRUdfT0ZGU0VUKTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVy
cnVwdCBzdGF0dXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1
cHRfc3RhdHVzKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9z
dGF0dXM7CisKKwlpbnRlcnJ1cHRfc3RhdHVzID0gICBSRDQoVElNRVJfVE1fSU5UUl9TVEFUVVNf
UkVHX09GRlNFVCk7CisJaWYgKGlycT09MCkgeworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChU
SU1FUjFfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMV9NQVRD
SDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMV9NQVRDSDJfSU5UUikp
CisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIxX01BVENIMl9JTlRSKTsKKwkJaWYgKGlu
dGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX09WRVJGTE9XX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0
YXR1cyAmPSB+KFRJTUVSMV9PVkVSRkxPV19JTlRSKTsKKwl9CisJaWYgKGlycT09MSkgeworCisJ
CWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9NQVRDSDFfSU5UUikpCisJCQlpbnRlcnJ1
cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENIMV9JTlRSKTsKKwkJaWYgKGludGVycnVwdF9zdGF0
dXMgJiAoVElNRVIyX01BVENIMl9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1F
UjJfTUFUQ0gyX0lOVFIpOworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfT1ZFUkZM
T1dfSU5UUikpCisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX09WRVJGTE9XX0lOVFIp
OworCX0KKworCVdSNChpbnRlcnJ1cHRfc3RhdHVzLCBUSU1FUl9UTV9JTlRSX1NUQVRVU19SRUdf
T0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitlY190aW1lcl9nZXRfdGltZWNvdW50KHN0
cnVjdCB0aW1lY291bnRlciAqYSkKK3sKKwl1bnNpZ25lZCBpbnQgdGlja3MxOworCWFybV9tYXNr
X2lycSgxKTsKKwl0aWNrczEgPSByZWFkX3NlY29uZF90aW1lcl9jb3VudGVyKCk7CisJYXJtX3Vu
bWFza19pcnEoMSk7CisJcmV0dXJuIHRpY2tzMTsKK30KKworLyoKKyAgKiAgR2V0IFNUUjkxMDAg
U3lzdGVtIENsb2NrCisqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK2dldF9zeXN0ZW1fY2xvY2so
dm9pZCkKK3sKKwlzeXNfY2xvY2sgPSAxMDAwMDAwMDA7CisKKwlzd2l0Y2ggKCgoKih1bnNpZ25l
ZCBpbnQgKilTWVNURU1fQ0xPQ0tfSU5GTykgPj4gNikgJiAweDMpIHsKKwljYXNlIDA6CisJCXN5
c19jbG9jayA9IDg3NTAwMDAwOworCQlDUFVfY2xvY2sgPSAxNzUwMDAwMDA7CisJCWJyZWFrOwor
CWNhc2UgMToKKwkJc3lzX2Nsb2NrID0gMTAwMDAwMDAwOworCQlDUFVfY2xvY2sgPSAyMDAwMDAw
MDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3lzX2Nsb2NrID0gMTEyNTAwMDAwOworCQlDUFVf
Y2xvY2sgPSAyMjUwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3lzX2Nsb2NrID0gMTI1
MDAwMDAwOworCQlDUFVfY2xvY2sgPSAyNTAwMDAwMDA7CisJCWJyZWFrOworCX0KKwlBSEJfY2xv
Y2sgPSBDUFVfY2xvY2sgPj4gMTsKKwlBUEJfY2xvY2sgPSBBSEJfY2xvY2sgPj4gMTsKKwlyZXR1
cm4gc3lzX2Nsb2NrOworfQorCit1bnNpZ25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisJcmV0
dXJuIENQVV9jbG9jazsKK30KKworLyoKKyAqIFNldHVwIHRpbWVyCisgKi8KK3N0YXRpYyBpbmxp
bmUgdm9pZCAKK2RvX3NldHVwX3RpbWVyKHZvaWQpCit7CisJZ2V0X3N5c3RlbV9jbG9jaygpOwor
CXRpbWVyX2NvdW50ZXIgPSBBUEJfY2xvY2svSFo7CisJLyoKKwkgKiBzZXR1cCB0aW1lci1yZWxh
dGVkIHZhbHVlcworCSAqLworCXNldHVwX3RpbWVyKHRpbWVyX2NvdW50ZXIpOworfQorCit2b2lk
CitjcHVfaW5pdGNsb2Nrcyh2b2lkKQoreworCWVjX3RpbWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9
IEFQQl9jbG9jazsKKwl0Y19pbml0KCZlY190aW1lY291bnRlcik7CisJdGltZXJfZW5hYmxlKCk7
CisJdGltZXJzX2luaXRpYWxpemVkID0gMTsKK30KKwordm9pZAorY3B1X3N0YXJ0cHJvZmNsb2Nr
KHZvaWQpCit7CisKK30KKwordm9pZAorY3B1X3N0b3Bwcm9mY2xvY2sodm9pZCkKK3sKKworfQor
Cit2b2lkCitjcHVfcmVzZXQodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKiBjb250
cm9sID0gKHVuc2lnbmVkIGludCAqIClDUFVfUkVTRVRfUkVHSVNURVI7CisJKmNvbnRyb2wgfD0g
KDEgPDwgMCk7CisJKmNvbnRyb2wgJj0gKH4oMSA8PCAwKSk7CisJd2hpbGUgKDEpOworfQorCitz
dGF0aWMgaW50CitlY190aW1lcl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9k
ZXNjKGRldiwgIkVjb25hIENQVSBUaW1lciIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp
bnQKK2VjX3Jlc2V0KHZvaWQgKmFyZykKK3sKKwlhcm1fbWFza19pcnEoMSk7CisJY2xlYXJfdGlt
ZXJfaW50ZXJydXB0X3N0YXR1cygxKTsKKwlhcm1fdW5tYXNrX2lycSgxKTsKKwlyZXR1cm4gKEZJ
TFRFUl9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfaGFyZGNsb2NrKHZvaWQgKmFyZykK
K3sKKwlzdHJ1Y3QJdHJhcGZyYW1lICpmcmFtZTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCS8qY2xl
YXIgdGltZXIgaW50ZXJydXB0IHN0YXR1cyovCisKKwlhcm1fbWFza19pcnEoMCk7CisKKwl2YWwg
PSBSRDQoVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOworCXZhbCAmPSB+KFRJTUVSMV9PVkVS
RkxPV19JTlRFUlJVUFQpOworCVdSNCh2YWwsIFRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHKTsK
KworCWZyYW1lID0gKHN0cnVjdCB0cmFwZnJhbWUgKilhcmc7CisJICBoYXJkY2xvY2soVFJBUEZf
VVNFUk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7
CisKKwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworCitzdGF0aWMgaW50CitlY190aW1l
cl9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCWludAllcnJvcjsKKwl2b2lkCSppaGw7CisJc3Ry
dWN0CWVjX3RpbWVyX3NvZnRjICpzYzsKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQly
ZXR1cm4gKEVOWElPKTsKKworCXNjID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9n
ZXRfc29mdGMoZGV2KTsKKworCXRpbWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxv
Y19yZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJy
b3IpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2Vz
XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0
X2J1c3RhZyhzYy0+dGltZXJfcmVzWzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVz
aGFuZGxlKHNjLT50aW1lcl9yZXNbMF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChi
dXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAg
IGVjX2hhcmRjbG9jaywgTlVMTCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9y
ZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3By
aW50ZihkZXYsICJjb3VsZCBub3Qgc2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJl
dHVybiAoRU5YSU8pOworCX0KKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9y
ZXNbMl0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAh
PSAwKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50
aW1lcl9yZXMpOworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBp
bnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQor
CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZWNfdGltZXJfbWV0aG9kc1tdID0geworCURFVk1F
VEhPRChkZXZpY2VfcHJvYmUsIGVjX3RpbWVyX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0
dGFjaCwgZWNfdGltZXJfYXR0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90
IGVjX3RpbWVyX2RyaXZlciA9IHsKKwkidGltZXIiLAorCWVjX3RpbWVyX21ldGhvZHMsCisJc2l6
ZW9mKHN0cnVjdCBlY190aW1lcl9zb2Z0YyksCit9OworCisKK3N0YXRpYyBkZXZjbGFzc190IGVj
X3RpbWVyX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRpbWVyLCBlY29uYWFybSwgZWNfdGlt
ZXJfZHJpdmVyLCBlY190aW1lcl9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBzeXMvYXJtL2Vjb25h
L2Vjb25hLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAw
KQorKysgc3lzL2FybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1NiBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQiKTsK
KworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1
ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMva2Vy
bmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K
KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0v
dm1fa2Vybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+
CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJ
VkFURQorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+
CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgi
CisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMgKmVj
b25hX3NvZnRjOworCitic19wcm90b3MoZ2VuZXJpYyk7Citic19wcm90b3MoZ2VuZXJpY19hcm12
NCk7CisKK3N0cnVjdCBidXNfc3BhY2UgZWNvbmFfYnNfdGFnID0geworCS8qIGNvb2tpZSAqLwor
CSh2b2lkICopIDAsCisKKwkvKiBtYXBwaW5nL3VubWFwcGluZyAqLworCWdlbmVyaWNfYnNfbWFw
LAorCWdlbmVyaWNfYnNfdW5tYXAsCisJZ2VuZXJpY19ic19zdWJyZWdpb24sCisKKwkvKiBhbGxv
Y2F0aW9uL2RlYWxsb2NhdGlvbiAqLworCWdlbmVyaWNfYnNfYWxsb2MsCisJZ2VuZXJpY19ic19m
cmVlLAorCisJLyogYmFycmllciAqLworCWdlbmVyaWNfYnNfYmFycmllciwKKworCS8qIHJlYWQg
KHNpbmdsZSkgKi8KKwlnZW5lcmljX2JzX3JfMSwKKwlnZW5lcmljX2FybXY0X2JzX3JfMiwKKwln
ZW5lcmljX2JzX3JfNCwKKwlOVUxMLAorCisJLyogcmVhZCBtdWx0aXBsZSAqLworCWdlbmVyaWNf
YnNfcm1fMSwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJZ2VuZXJpY19ic19ybV80LAorCU5V
TEwsCisKKwkvKiByZWFkIHJlZ2lvbiAqLworCWdlbmVyaWNfYnNfcnJfMSwKKwlnZW5lcmljX2Fy
bXY0X2JzX3JyXzIsCisJZ2VuZXJpY19ic19ycl80LAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2lu
Z2xlKSAqLworCWdlbmVyaWNfYnNfd18xLAorCWdlbmVyaWNfYXJtdjRfYnNfd18yLAorCWdlbmVy
aWNfYnNfd180LAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNf
d21fMSwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJZ2VuZXJpY19ic193bV80LAorCU5VTEws
CisKKwkvKiB3cml0ZSByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAor
CisJLyogc2V0IG11bHRpcGxlICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwor
CS8qIHNldCByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyog
Y29weSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIChzaW5n
bGUpIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFk
IG11bHRpcGxlIHN0cmVhbSAqLworCU5VTEwsCisJZ2VuZXJpY19hcm12NF9ic19ybV8yLAorCU5V
TEwsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwK
KwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xlKSBzdHJlYW0gKi8KKwlOVUxMLAor
CU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUgbXVsdGlwbGUgc3RyZWFtICovCisJ
TlVMTCwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3Jp
dGUgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwKK307CisK
K2J1c19zcGFjZV90YWdfdCBvYmlvX3RhZyA9ICZlY29uYV9ic190YWc7CisKKworc3RhdGljIGlu
dAorZWNvbmFfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCWRldmljZV9zZXRfZGVzYyhkZXYsICJF
Q09OQSBkZXZpY2UgYnVzIik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2Vjb25h
X2lkZW50aWZ5KGRyaXZlcl90ICpkcnYsIGRldmljZV90IHBhcmVudCkKK3sKKwlCVVNfQUREX0NI
SUxEKHBhcmVudCwgMCwgImVjb25hYXJtIiwgMCk7Cit9CisKK3N0cnVjdCBhcm0zMl9kbWFfcmFu
Z2UgKgorYnVzX2RtYV9nZXRfcmFuZ2Uodm9pZCkKK3sKKworCXJldHVybiAoTlVMTCk7Cit9CisK
K2ludAorYnVzX2RtYV9nZXRfcmFuZ2VfbmIodm9pZCkKK3sKKwlyZXR1cm4gKDApOworfQorCitl
eHRlcm4gdm9pZCBpcnFfZW50cnkodm9pZCk7CisKK3N0YXRpYyB2b2lkCitlY29uYV9hZGRfY2hp
bGQoZGV2aWNlX3QgZGV2LCBpbnQgcHJpbywgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuaXQsCisJ
CWJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplLCBpbnQgaXJxMCwgaW50IGlycTEsCisJ
CWludCBpcnEyLCBpbnQgaXJxMywgaW50IGlycTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVj
dCBlY29uYV9pdmFyICppdmFyOworCisJa2lkID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRl
diwgcHJpbywgbmFtZSwgdW5pdCk7CisJaWYgKGtpZCA9PSBOVUxMKSB7CisJICAgIHByaW50Zigi
Q2FuJ3QgYWRkIGNoaWxkICVzJWQgb3JkZXJlZFxuIiwgbmFtZSwgdW5pdCk7CisJICAgIHJldHVy
bjsKKwl9CisJaXZhciA9IG1hbGxvYyhzaXplb2YoKml2YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQg
fCBNX1pFUk8pOworCWlmIChpdmFyID09IE5VTEwpIHsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChk
ZXYsIGtpZCk7CisJCXJldHVybjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhraWQsIGl2YXIpOwor
CXJlc291cmNlX2xpc3RfaW5pdCgmaXZhci0+cmVzb3VyY2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkK
KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAo
aXJxMSAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDEsIGlycTEs
IDEpOworCWlmIChpcnEyICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lS
USwgMiwgaXJxMiwgMSk7CisJaWYgKGlycTMgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQs
IFNZU19SRVNfSVJRLCAzLCBpcnEzLCAxKTsKKwlpZiAoaXJxNCAhPSAwKQorCQlidXNfc2V0X3Jl
c291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDQsIGlycTQsIDEpOworCisJaWYgKGFkZHIgIT0gMCkK
KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfTUVNT1JZLCAwLCBhZGRyLCBzaXplKTsK
K30KKworc3RydWN0IGNwdV9kZXZzCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdW5pdDsK
KwlidXNfYWRkcl90IG1lbV9iYXNlOworCWJ1c19zaXplX3QgbWVtX2xlbjsKKwlpbnQgaXJxMDsK
KwlpbnQgaXJxMTsKKwlpbnQgaXJxMjsKKwlpbnQgaXJxMzsKKwlpbnQgaXJxNDsKK307CisKKwor
c3RydWN0IGNwdV9kZXZzIGVjb25hcm1fZGV2c1tdID0KK3sKKwkvLyBBbGwgdGhlICJzeXN0ZW0i
IGRldmljZXMKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9Q
SUNfQkFTRSwgRUNPTkFfUElDX1NJWkUsCisJCTAJLy8gSW50ZXJydXB0IGNvbnRyb2xsZXIgaGFz
IG5vIGludGVycnVwdHMhCisJfSwKKwl7CisJCSJ1YXJ0IiwgMCwKKwkJRUNPTkFfSU9fQkFTRSAr
IEVDT05BX1VBUlRfQkFTRSwgRUNPTkFfVUFSVF9TSVpFLAorCQlFQ09OQV9JUlFfVUFSVAorCX0s
CisJeworCQkidGltZXIiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfVElNRVJfQkFTRSwg
RUNPTkFfVElNRVJfU0laRSwKKwkJRUNPTkFfSVJRX1RJTUVSXzEsIEVDT05BX0lSUV9USU1FUl8y
CisJfSwKKwl7CisJCSJvaGNpIiwgMCwKKwkJRUNPTkFfT0hDSV9WQkFTRSwgRUNPTkFfT0hDSV9T
SVpFLAorCQlFQ09OQV9JUlFfT0hDSQorCQl9LAorCXsKKwkJImVoY2kiLCAwLAorCQlFQ09OQV9F
SENJX1ZCQVNFLCBFQ09OQV9FSENJX1NJWkUsCisJCUVDT05BX0lSUV9FSENJCisJfSwKKwl7CisJ
CSJjZmkiLCAwLAorCQlFQ09OQV9DRklfVkJBU0UsIEVDT05BX0NGSV9TSVpFLAorCQkwCisJfSwK
Kwl7CisJCSJlY2UiLCAwLAorCQlFQ09OQV9ORVRfVkJBU0UsIEVDT05BX05FVF9TSVpFLAorCQlF
Q09OQV9JUlFfU1RBVFVTLAorCQlFQ09OQV9JUlFfVFNUQywgRUNPTkFfSVJRX0ZTUkMsCisJCUVD
T05BX0lSUV9UU1FFLCBFQ09OQV9JUlFfRlNRRiwKKwl9LAorCXsJMCwgMCwgMCwgMCwgMCB9Cit9
OworCitzdGF0aWMgdm9pZAorZWNvbmFfY3B1X2FkZF9idWlsdGluX2NoaWxkcmVuKGRldmljZV90
IGRldiwgc3RydWN0IGVjb25hX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3B1X2Rl
dnMgKndhbGtlcjsKKworCWZvciAoaSA9IDAsIHdhbGtlciA9IGVjb25hcm1fZGV2czsgd2Fsa2Vy
LT5uYW1lOyBpKyssIHdhbGtlcisrKSB7CisJCWVjb25hX2FkZF9jaGlsZChkZXYsIGksIHdhbGtl
ci0+bmFtZSwgd2Fsa2VyLT51bml0LAorCQkgICAgd2Fsa2VyLT5tZW1fYmFzZSwgd2Fsa2VyLT5t
ZW1fbGVuLCB3YWxrZXItPmlycTAsCisJCQkJd2Fsa2VyLT5pcnExLCB3YWxrZXItPmlycTIsIHdh
bGtlci0+aXJxMywKKwkJCXdhbGtlci0+aXJxNCk7CisJfQorCit9CisKKworc3RydWN0IGludGNf
dHJpZ2dlcl90IHsKKwlpbnQgbW9kZTsKKwlpbnQgbGV2ZWw7Cit9OworCisKK3N0YXRpYyBzdHJ1
Y3QgaW50Y190cmlnZ2VyX3QgaW50Y190cmlnZ2VyX3RhYmxlW10gPSB7CisJe0lOVENfRURHRV9U
UklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklT
SU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJ
TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktO
T1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19B
Q1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJ
TlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5L
Tk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENf
QUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAor
CXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RS
SUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19U
UklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9
LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX1RSSUdH
RVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9X
TiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNU
SVZFX0hJR0h9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lO
VENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIs
IElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURH
RX0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZF
TF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorfTsKKworc3RhdGljIGlubGluZSB1aW50MzJf
dAorUkQ0KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCXJldHVy
biBidXNfc3BhY2VfcmVhZF80KHNjLT5zY19zdCwgc2MtPnNjX3N5c19zaCwgb2ZmKTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkCitXUjQoc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVf
dCBvZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnNj
X3N0LCBzYy0+c2Nfc3lzX3NoLCBvZmYsIHZhbCk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lk
IAorZWNvbmFfc2V0X2lycV9tb2RlKHN0cnVjdCBlY29uYV9zb2Z0YyAqIHNjLCB1bnNpZ25lZCBp
bnQgaXJxLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYg
KChtb2RlICE9IElOVENfTEVWRUxfVFJJR0dFUikgJiYgKG1vZGUgIT0gSU5UQ19FREdFX1RSSUdH
RVIpKQorCQlyZXR1cm47CisKKwl2YWwgPQlSRDQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJf
TU9ERV9SRUdfT0ZGU0VUKTsKKworCWlmIChtb2RlID09IElOVENfTEVWRUxfVFJJR0dFUikgewor
CQlpZiAodmFsICYgKDFVTCA8PCBpcnEpKSB7CisJCQl2YWwgJj0gfigxVUwgPDwgaXJxKTsKKwkJ
CVdSNChzYywgIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULCAgdmFsKTsK
KwkJfQorCX0gZWxzZSB7CisJCWlmICghKHZhbCAmICgxVUwgPDwgaXJxKSkpIHsKKwkJCXZhbCB8
PSAoMVVMIDw8IGlycSk7CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9S
RUdfT0ZGU0VULCAgdmFsKTsKKwkJfQorCX0KK30KKworCisvKgorICogQ29uZmlndXJlIGludGVy
cnVwdCB0cmlnZ2VyIGxldmVsIHRvIGJlIEFjdGl2ZSBIaWdoL0xvdworICogb3IgUmlzaW5nL0Zh
bGxpbmcgRWRnZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgCitlY29uYV9zZXRfaXJxX2xldmVs
KHN0cnVjdCBlY29uYV9zb2Z0YyAqIHNjLAorCQkgICAgdW5zaWduZWQgaW50IGlycSwgdW5zaWdu
ZWQgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKworCWlmICgobGV2ZWwgIT0g
SU5UQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGxldmVsICE9IElOVENfQUNUSVZFX0xPVykgJiYK
KwkgICAgKGxldmVsICE9IElOVENfUklTSU5HX0VER0UpICYmCisJICAgIChsZXZlbCAhPSBJTlRD
X0ZBTExJTkdfRURHRSkpIHsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IFJENChzYywgSU5UQ19J
TlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VUKTsKKworCWlmICgobGV2ZWwgPT0gSU5U
Q19BQ1RJVkVfSElHSCkgfHwgKGxldmVsID09IElOVENfUklTSU5HX0VER0UpKSB7CisJCWlmICh2
YWwgJiAoMVVMIDw8IGlycSkpIHsKKwkJCXZhbCAmPSB+KDFVTCA8PCBpcnEpOworCQkJV1I0KHNj
LCBJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQsIHZhbCk7CisJCX0KKwl9
IGVsc2UgeworCQlpZiAoISh2YWwgJiAoMVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8
PCBpcnEpOworCQkJV1I0KHNjLCAgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZG
U0VULCB2YWwpOworCQl9CisJfQorfQorCisKKworc3RhdGljIGludAorZWNvbmFfYXR0YWNoKGRl
dmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOworCWludCBpOworCisJZWNvbmFfc29mdGMgPSBzYzsKKwlzYy0+c2Nfc3QgPSAmZWNv
bmFfYnNfdGFnOworCXNjLT5zY19zaCA9IEVDT05BX0lPX0JBU0U7CisJc2MtPmRldiA9IGRldjsK
KwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2Nfc3QsIHNjLT5zY19zaCwgRUNPTkFfUElD
X0JBU0UsCisJICAgIEVDT05BX1BJQ19TSVpFLCAmc2MtPnNjX3N5c19zaCkgIT0gMCkKKwkJcGFu
aWMoIlVuYWJsZSB0byBtYXAgSVJRIHJlZ2lzdGVycyIpOworCXNjLT5zY19pcnFfcm1hbi5ybV90
eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+c2NfaXJxX3JtYW4ucm1fZGVzY3IgPSAiRUNPTkEgSVJR
cyI7CisJc2MtPnNjX21lbV9ybWFuLnJtX3R5cGUgPSBSTUFOX0FSUkFZOworCXNjLT5zY19tZW1f
cm1hbi5ybV9kZXNjciA9ICJFQ09OQSBNZW1vcnkiOworCWlmIChybWFuX2luaXQoJnNjLT5zY19p
cnFfcm1hbikgIT0gMCB8fAorCSAgICBybWFuX21hbmFnZV9yZWdpb24oJnNjLT5zY19pcnFfcm1h
biwgMCwgMzEpICE9IDApCisJCXBhbmljKCJlY29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAg
SVJRIHJtYW4iKTsKKwlpZiAocm1hbl9pbml0KCZzYy0+c2NfbWVtX3JtYW4pICE9IDAgfHwKKwkg
ICAgcm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+c2NfbWVtX3JtYW4sIDAsCisJICAgIH4wKSAhPSAw
KQorCQlwYW5pYygiZWNvbmFfYXR0YWNoOiBmYWlsZWQgdG8gc2V0IHVwIG1lbW9yeSBybWFuIik7
CisKKwlXUjQoc2MsICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09GRlNF
VCwgIDB4ZmZmZmZmZmYpOworCisJV1I0KHNjLCAgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZG
U0VULCAgMHhmZmZmZmZmZik7CisKKwlXUjQoc2MsIElOVENfRklRX01PREVfU0VMRUNUX1JFR19P
RkZTRVQsICAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9IDA7IGkgPCAzMjsg
aSsrKSB7CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJTlRDX1RSSUdHRVJf
VU5LTk9XTikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNfdHJpZ2dlcl90YWJs
ZVtpXS5tb2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGludGNfdHJpZ2dlcl90
YWJsZVtpXS5sZXZlbCk7CisJCX0KKwl9CisKKwllY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRy
ZW4oZGV2LCBzYyk7CisKKwlidXNfZ2VuZXJpY19wcm9iZShkZXYpOworCWJ1c19nZW5lcmljX2F0
dGFjaChkZXYpOworCWVuYWJsZV9pbnRlcnJ1cHRzKEkzMl9iaXQgfCBGMzJfYml0KTsKKworCXJl
dHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKgorZWNvbmFfYWxsb2NfcmVz
b3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAor
ICAgIHVfbG9uZyBzdGFydCwgdV9sb25nIGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykK
K3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0
cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpybGU7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXIg
PSBkZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwgPSAm
aXZhci0+cmVzb3VyY2VzOworCisKKwlpZiAoZGV2aWNlX2dldF9wYXJlbnQoY2hpbGQpICE9IGRl
dikKKwkJcmV0dXJuIChCVVNfQUxMT0NfUkVTT1VSQ0UoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwg
Y2hpbGQsCisJCQkJCSAgIHR5cGUsIHJpZCwgc3RhcnQsIGVuZCwgY291bnQsIGZsYWdzKSk7CisK
KwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsICpyaWQpOworCWlmIChybGUgPT0g
TlVMTCkgeworCQkvL3ByaW50ZigicmVzb3VyY2Ugbm90IGZvdW5kXHJcbiIpOworCQlyZXR1cm4g
KE5VTEwpOworCX0KKwlpZiAocmxlLT5yZXMpCisJCXBhbmljKCJSZXNvdXJjZSByaWQgJWQgdHlw
ZSAlZCBhbHJlYWR5IGluIHVzZSIsICpyaWQsIHR5cGUpOworCWlmIChzdGFydCA9PSAwVUwgJiYg
ZW5kID09IH4wVUwpIHsKKwkJc3RhcnQgPSBybGUtPnN0YXJ0OworCQljb3VudCA9IHVsbWF4KGNv
dW50LCBybGUtPmNvdW50KTsKKwkJZW5kID0gdWxtYXgocmxlLT5lbmQsIHN0YXJ0ICsgY291bnQg
LSAxKTsKKwkJLypwcmludGYoImVjb25hX2FsbG9jX3Jlc291cmNlIHN0YXJ0ICUwOGx4IGVuZCAl
MDhseCwgY291bnQgPSAlMDhseCBcclxuIiwKKwkJICBzdGFydCwgZW5kLCBjb3VudCk7Ki8KKwor
CX0KKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0g
cm1hbl9yZXNlcnZlX3Jlc291cmNlKCZzYy0+c2NfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5k
LCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToK
KwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5zY19tZW1fcm1hbiwKKwkJ
ICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0g
TlVMTCkgeworCQkJcm1hbl9zZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJ
CXJtYW5fc2V0X2J1c2hhbmRsZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0K
KwlpZiAocmxlLT5yZXMpIHsKKwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVz
KTsKKwkJcmxlLT5lbmQgPSBybWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0g
Y291bnQ7CisJCXJtYW5fc2V0X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxl
LT5yZXMpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jl
c291cmNlX2xpc3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNv
bmFfaXZhciAqaXZhcjsKKwlpdmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJu
ICgmKGl2YXItPnJlc291cmNlcykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jl
c291cmNlKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCBy
aWQsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJ
c3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291
cmNlX2xpc3QoZGV2LCBjaGlsZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM
KTsKKwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9
PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOwor
CXJsZS0+cmVzID0gTlVMTDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9z
ZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291
cmNlICppcmVzLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJf
aW50cl90ICppbnRyLCB2b2lkICphcmcsIHZvaWQgKipjb29raWVwKQoreworCWlmIChybWFuX2dl
dF9zdGFydChpcmVzKSA9PSBFQ09OQV9JUlFfU1lTVEVNICYmIGZpbHQgPT0gTlVMTCkKKwkJcGFu
aWMoIkFsbCBzeXN0ZW0gaW50ZXJydXB0IElTUnMgbXVzdCBiZSBGSUxURVIiKTsKKworCUJVU19T
RVRVUF9JTlRSKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLCBpcmVzLCBmbGFncywgZmls
dCwKKwkgICAgaW50ciwgYXJnLCBjb29raWVwKTsKKworCWFybV91bm1hc2tfaXJxKHJtYW5fZ2V0
X3N0YXJ0KGlyZXMpKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3Rl
YXJkb3duX2ludHIoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHJlc291cmNl
ICpyZXMsCisgICAgdm9pZCAqY29va2llKQoreworCXJldHVybiAoQlVTX1RFQVJET1dOX0lOVFIo
ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIHJlcywgY29va2llKSk7Cit9CisKK3N0YXRp
YyBpbnQKK2Vjb25hX2FjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hp
bGQsIGludCB0eXBlLCBpbnQgcmlkLAorICAgIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlyZXR1
cm4gKHJtYW5fYWN0aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50CitlY29uYV9w
cmludF9jaGlsZChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29u
YV9pdmFyICppdmFyczsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJldHZhbCA9
IDA7CisKKwlpdmFycyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2YXJzLT5y
ZXNvdXJjZXM7CisKKwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYsIGNoaWxk
KTsKKworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0IiwgU1lT
X1JFU19JT1BPUlQsICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlw
ZShybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSByZXNvdXJj
ZV9saXN0X3ByaW50X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOworCWlmIChk
ZXZpY2VfZ2V0X2ZsYWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAlI3giLCBk
ZXZpY2VfZ2V0X2ZsYWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGlsZF9mb290
ZXIoZGV2LCBjaGlsZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2FybV9tYXNr
X2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSBS
RDQoZWNvbmFfc29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8IDE8PG5iOwor
CVdSNChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VULCB2YWx1ZSk7
Cit9CisKKwordm9pZAorYXJtX3VubWFza19pcnEodWludHB0cl90IG5iKQoreworCXVuc2lnbmVk
IGludCB2YWx1ZTsKKworCXZhbHVlID0JUkQ0KGVjb25hX3NvZnRjLAorCQkgICAgSU5UQ19JTlRF
UlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQpIHwgKDEgPDwgbmIpOworCisJV1I0
KGVjb25hX3NvZnRjLCAgCisJICAgIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9S
RUdfT0ZGU0VULCAgdmFsdWUpOworCisJdmFsdWUgPQlSRDQoZWNvbmFfc29mdGMsIElOVENfSU5U
RVJSVVBUX01BU0tfUkVHX09GRlNFVCkmIH4oMSA8PCBuYik7CisKKwlXUjQoZWNvbmFfc29mdGMs
ICBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTRVQsIHZhbHVlKTsKKworfQorCisKK2ludAor
YXJtX2dldF9uZXh0X2lycShpbnQgeCkKK3sKKworCWludCBpcnE7CisKKwlpcnEgPSBSRDQoZWNv
bmFfc29mdGMsIElOVENfSU5URVJSVVBUX1NUQVRVU19SRUdfT0ZGU0VUKSAmCisJCX4oUkQ0KGVj
b25hX3NvZnRjLCAgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSk7CisKKwlpZiAoaXJx
IT0wKSB7CisJCXJldHVybiAoZmZzKGlycSkgLSAxKTsKKwl9CisKKwlyZXR1cm4gKC0xKTsKK30K
Kworc3RhdGljIGRldmljZV9tZXRob2RfdCBlY29uYV9tZXRob2RzW10gPSB7CisJREVWTUVUSE9E
KGRldmljZV9wcm9iZSwgZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBl
Y29uYV9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfaWRlbnRpZnksIGVjb25hX2lkZW50aWZ5
KSwKKwlERVZNRVRIT0QoYnVzX2FsbG9jX3Jlc291cmNlLCBlY29uYV9hbGxvY19yZXNvdXJjZSks
CisJREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLCBlY29uYV9zZXR1cF9pbnRyKSwKKwlERVZNRVRI
T0QoYnVzX3RlYXJkb3duX2ludHIsIGVjb25hX3RlYXJkb3duX2ludHIpLAorCURFVk1FVEhPRChi
dXNfYWN0aXZhdGVfcmVzb3VyY2UsIGVjb25hX2FjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZNRVRI
T0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2UsIGJ1c19nZW5lcmljX2RlYWN0aXZhdGVfcmVzb3Vy
Y2UpLAorCURFVk1FVEhPRChidXNfZ2V0X3Jlc291cmNlX2xpc3QsZWNvbmFfZ2V0X3Jlc291cmNl
X2xpc3QpLAorCURFVk1FVEhPRChidXNfc2V0X3Jlc291cmNlLAlidXNfZ2VuZXJpY19ybF9zZXRf
cmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfZ2V0X3Jlc291cmNlLAlidXNfZ2VuZXJpY19ybF9n
ZXRfcmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfcmVsZWFzZV9yZXNvdXJjZSwJZWNvbmFfcmVs
ZWFzZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJZWNvbmFfcHJpbnRf
Y2hpbGQpLAorCXswLCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2ZXIgPSB7
CisJImVjb25hYXJtIiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNvbmFfc29m
dGMpLAorfTsKK3N0YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklWRVJfTU9E
VUxFKGVjb25hYXJtLCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywgMCwgMCk7
CkluZGV4OiBzeXMvYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0v
ZWNvbmEvZWhjaV9lYnVzLmMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL2VoY2lfZWJ1
cy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgWW9oYW5lcyBOdWdyb2hvCisgKiBiYXNlZCBvbiBlaGNpX21idXMuYyAKKyAqIENvcHly
aWdodCAoQykgMjAwOCBNQVJWRUxMIElOVEVSTkFUSU9OQUwgTFRELgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwg
bm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgor
X19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAib3B0X2J1cy5oIgorCisjaW5jbHVk
ZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8c3lzL3N0ZGludC5oPgorI2luY2x1
ZGUgPHN5cy9zdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv
cXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4K
KyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg
PHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5
cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL2NvbmR2YXIu
aD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVk
ZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9jYWxsb3V0Lmg+CisjaW5jbHVkZSA8c3lz
L21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5o
PgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+
CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2Jf
YnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRl
di91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xs
ZXIvZWhjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxlci9laGNpcmVnLmg+CisKKwor
c3RhdGljIGRldmljZV9hdHRhY2hfdCBlaGNpX2VidXNfYXR0YWNoOworc3RhdGljIGRldmljZV9k
ZXRhY2hfdCBlaGNpX2VidXNfZGV0YWNoOworc3RhdGljIGRldmljZV9zaHV0ZG93bl90IGVoY2lf
ZWJ1c19zaHV0ZG93bjsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90IGVoY2lfZWJ1c19zdXNwZW5k
Oworc3RhdGljIGRldmljZV9yZXN1bWVfdCBlaGNpX2VidXNfcmVzdW1lOworCisKK3N0YXRpYyB2
b2lkICppaF9lcnI7CisKKyNkZWZpbmUJVVNCX0JSSURHRV9JTlRSX0NBVVNFICAweDIxMAorI2Rl
ZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKKyNkZWZpbmUgRUhDSV9IQ19ERVZT
VFIgIkNOUzExWFggVVNCIEVIQ0kiCisKKworc3RhdGljIGludAorZWhjaV9lYnVzX3N1c3BlbmQo
ZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0Yyhz
ZWxmKTsKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX2dlbmVyaWNfc3VzcGVuZChzZWxmKTsKKwlp
ZiAoZXJyKQorCQlyZXR1cm4gKGVycik7CisJZWhjaV9zdXNwZW5kKHNjKTsKKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfcmVzdW1lKGRldmljZV90IHNlbGYpCit7CisJ
ZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisKKwllaGNpX3Jlc3Vt
ZShzYyk7CisKKwlidXNfZ2VuZXJpY19yZXN1bWUoc2VsZik7CisKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50CitlaGNpX2VidXNfc2h1dGRvd24oZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp
X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJy
ID0gYnVzX2dlbmVyaWNfc2h1dGRvd24oc2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIp
OworCWVoY2lfc2h1dGRvd24oc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor
ZWhjaV9lYnVzX3Byb2JlKGRldmljZV90IHNlbGYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2Moc2Vs
ZiwgRUhDSV9IQ19ERVZTVFIpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisK
K3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19hdHRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3Nv
ZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlidXNfc3BhY2VfaGFuZGxlX3Qg
YnNoOworCWludCBlcnI7CisJaW50IHJpZDsKKworCS8qIGluaXRpYWxpc2Ugc29tZSBidXMgZmll
bGRzICovCisJc2MtPnNjX2J1cy5wYXJlbnQgPSBzZWxmOworCXNjLT5zY19idXMuZGV2aWNlcyA9
IHNjLT5zY19kZXZpY2VzOworCXNjLT5zY19idXMuZGV2aWNlc19tYXggPSBFSENJX01BWF9ERVZJ
Q0VTOworCisJLyogZ2V0IGFsbCBETUEgbWVtb3J5ICovCisJaWYgKHVzYl9idXNfbWVtX2FsbG9j
X2FsbCgmc2MtPnNjX2J1cywKKwkgICAgVVNCX0dFVF9ETUFfVEFHKHNlbGYpLCAmZWhjaV9pdGVy
YXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJc2MtPnNjX2J1cy51
c2JyZXYgPSBVU0JfUkVWXzJfMDsKKworCXJpZCA9IDA7CisJc2MtPnNjX2lvX3JlcyA9IGJ1c19h
bGxvY19yZXNvdXJjZV9hbnkoc2VsZiwgU1lTX1JFU19NRU1PUlksICZyaWQsIFJGX0FDVElWRSk7
CisJaWYgKCFzYy0+c2NfaW9fcmVzKSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxkIG5v
dCBtYXAgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2MtPnNjX2lvX3RhZyA9IHJt
YW5fZ2V0X2J1c3RhZyhzYy0+c2NfaW9fcmVzKTsKKwlic2ggPSBybWFuX2dldF9idXNoYW5kbGUo
c2MtPnNjX2lvX3Jlcyk7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgKKwkJKHNjKS0+c2NfaW9fdGFn
LCBic2gsCisJCTB4MDQsIDB4MTA2KTsKKworCWJ1c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5z
Y19pb190YWcsIGJzaCwKKwkJMHg0MCwgKDMgPDwgNSl8MHgyMDAwKTsKKworCisJREVMQVkoMTAw
MCk7CisJCisKKwkvL3NjLT5zY19pb19zaXplID0gMHg0MDAwMDAwOworCisJc2MtPnNjX2lvX3Np
emUgPSAgNDA5NjsKKworCWlmIChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5zY19pb190YWcsIGJz
aCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2NfaW9fc2l6ZSwgJnNjLT5zY19pb19oZGwpICE9IDAp
CisJCXBhbmljKCIlczogdW5hYmxlIHRvIHN1YnJlZ2lvbiBVU0IgaG9zdCByZWdpc3RlcnMiLAor
CQkgICAgZGV2aWNlX2dldF9uYW1lKHNlbGYpKTsKKworCisKKwlyaWQgPSAwOworCXNjLT5zY19p
cnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwK
KwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0g
TlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4i
KTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisK
KwlzYy0+c2NfYnVzLmJkZXYgPSBkZXZpY2VfYWRkX2NoaWxkKHNlbGYsICJ1c2J1cyIsIC0xKTsK
KwlpZiAoIXNjLT5zY19idXMuYmRldikgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBu
b3QgYWRkIFVTQiBkZXZpY2VcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXZpY2Vfc2V0X2l2
YXJzKHNjLT5zY19idXMuYmRldiwgJnNjLT5zY19idXMpOworCWRldmljZV9zZXRfZGVzYyhzYy0+
c2NfYnVzLmJkZXYsIEVIQ0lfSENfREVWU1RSKTsKKworIAlzcHJpbnRmKHNjLT5zY192ZW5kb3Is
ICJDYXZpdW0iKTsKKworCisJZXJyID0gYnVzX3NldHVwX2ludHIoc2VsZixzYy0+c2NfaXJxX3Jl
cywgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwKKwkgICAgTlVMTCwgKGRyaXZlcl9pbnRy
X3QgKillaGNpX2ludGVycnVwdCwgc2MsICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChlcnIpIHsK
KwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwgJWRcbiIs
IGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisKKwllcnIgPSBl
aGNpX2luaXQoc2MpOworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRfYXR0
YWNoKHNjLT5zY19idXMuYmRldik7CisJfQorCWlmIChlcnIpIHsKKwkJZGV2aWNlX3ByaW50Zihz
ZWxmLCAiVVNCIGluaXQgZmFpbGVkIGVycj0lZFxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9
CisJcmV0dXJuICgwKTsKKworZXJyb3I6CisJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwlyZXR1
cm4gKEVOWElPKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX2RldGFjaChkZXZpY2VfdCBz
ZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHNlbGYpOworCWRl
dmljZV90IGJkZXY7CisJaW50IGVycjsgICAgICAgCisKKyAJaWYgKHNjLT5zY19idXMuYmRldikg
eworCQliZGV2ID0gc2MtPnNjX2J1cy5iZGV2OworCQlkZXZpY2VfZGV0YWNoKGJkZXYpOworCQlk
ZXZpY2VfZGVsZXRlX2NoaWxkKHNlbGYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9kdWxlIHVu
bG9hZCB0aGVyZSBhcmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmljZV9kZWxl
dGVfYWxsX2NoaWxkcmVuKHNlbGYpOworCisJLyoKKwkgKiBkaXNhYmxlIGludGVycnVwdHMgdGhh
dCBtaWdodCBoYXZlIGJlZW4gc3dpdGNoZWQgb24gaW4gZWhjaV9pbml0CisJICovCisJaWYgKHNj
LT5zY19pb19yZXMpIHsKKwkJRVdSSVRFNChzYywgRUhDSV9VU0JJTlRSLCAwKTsKKwkJRVdSSVRF
NChzYywgVVNCX0JSSURHRV9JTlRSX01BU0ssIDApOworCX0KKyAJaWYgKHNjLT5zY19pcnFfcmVz
ICYmIHNjLT5zY19pbnRyX2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgZWhjaV9kZXRhY2go
KSBhZnRlciBlaGNpX2luaXQoKQorCQkgKi8KKwkJZWhjaV9kZXRhY2goc2MpOworCisJCWVyciA9
IGJ1c190ZWFyZG93bl9pbnRyKHNlbGYsIHNjLT5zY19pcnFfcmVzLCBzYy0+c2NfaW50cl9oZGwp
OworCisJCWlmIChlcnIpCisJCQkvKiBYWFggb3Igc2hvdWxkIHdlIHBhbmljPyAqLworCQkJZGV2
aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHRlYXIgZG93biBpcnEsICVkXG4iLAorCQkJICAg
IGVycik7CisJCXNjLT5zY19pbnRyX2hkbCA9IE5VTEw7CisJfQorIAlpZiAoc2MtPnNjX2lycV9y
ZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5z
Y19pcnFfcmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lv
X3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwK
KwkJICAgIHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNi
X2J1c19tZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOwor
CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVoY2lfbWV0aG9k
c1tdID0geworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2Jl
LCBlaGNpX2VidXNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBlaGNpX2VidXNf
YXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgZWhjaV9lYnVzX2RldGFjaCksCisJ
REVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCBlaGNpX2VidXNfc3VzcGVuZCksCisJREVWTUVUSE9E
KGRldmljZV9yZXN1bWUsIGVoY2lfZWJ1c19yZXN1bWUpLAorCURFVk1FVEhPRChkZXZpY2Vfc2h1
dGRvd24sIGVoY2lfZWJ1c19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVW
TUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAs
IDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgZWhjaV9kcml2ZXIgPSB7CisJImVoY2kiLAorCWVo
Y2lfbWV0aG9kcywKKwlzaXplb2YoZWhjaV9zb2Z0Y190KSwKK307CisKK3N0YXRpYyBkZXZjbGFz
c190IGVoY2lfZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RVTEUoZWhjaSwgZWNvbmFhcm0sIGVoY2lf
ZHJpdmVyLCBlaGNpX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9ERVBFTkQoZWhjaSwgdXNiLCAx
LCAxLCAxKTsKSW5kZXg6IHN5cy9hcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c3lzL2FybS9lY29uYS9lY29uYV9yZWcuaAkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vZWNvbmEv
ZWNvbmFfcmVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9B
Uk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUgX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lIEVDT05B
X1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lIEVDT05BX0RSQU1fQkFTRQkweDAwMDAwMDAw
IC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUgRUNPTkFfSU9f
QkFTRSAweDcwMDAwMDAwCisjZGVmaW5lIEVDT05BX1BJQ19CQVNFICAweDBEMDAwMDAwCisjZGVm
aW5lIEVDT05BX1BJQ19TSVpFICAweDAxMDAwMDAwCisKKyNkZWZpbmUgRUNPTkFfVUFSVF9CQVNF
IDB4MDgwMDAwMDAKKyNkZWZpbmUgRUNPTkFfVUFSVF9TSVpFIDB4MDEwMDAwMDAKKyNkZWZpbmUg
RUNPTkFfSVJRX1VBUlQgMHhBCisKKyNkZWZpbmUgRUNPTkFfVElNRVJfQkFTRSAweDA5MDAwMDAw
CisjZGVmaW5lIEVDT05BX1RJTUVSX1NJWkUgMHgwMTAwMDAwMAorI2RlZmluZSBFQ09OQV9JUlFf
VElNRVJfMSAwCisjZGVmaW5lIEVDT05BX0lSUV9USU1FUl8yIDEKKyNkZWZpbmUgRUNPTkFfSVJR
X0VIQ0kgMjQKKyNkZWZpbmUgRUNPTkFfSVJRX09IQ0kgMjMKKworI2RlZmluZSBFQ09OQV9ORVRf
UEJBU0UgMHg3MDAwMDAwMAorI2RlZmluZSBFQ09OQV9ORVRfVkJBU0UgMHhFMDAwMDAwMAorI2Rl
ZmluZSBFQ09OQV9ORVRfU0laRSAweDEwMDAwMDAKKworCisjZGVmaW5lIEVDT05BX0NGSV9QQkFT
RSAweDEwMDAwMDAwCisjZGVmaW5lIEVDT05BX0NGSV9WQkFTRSAweEQwMDAwMDAwCisjZGVmaW5l
IEVDT05BX0NGSV9TSVpFIDB4MTAwMDAwMDAKKworCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMg
MTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMgMTkKKyNkZWZpbmUgRUNPTkFfSVJRX0ZTUkMgMjAK
KyNkZWZpbmUgRUNPTkFfSVJRX1RTUUUgMjEKKyNkZWZpbmUgRUNPTkFfSVJRX0ZTUUYgMjIKKwor
CisjZGVmaW5lIEVDT05BX0lSUV9TWVNURU0gMAorCisjZGVmaW5lIEVDT05BX0VIQ0lfUEJBU0Ug
MHhDODAwMDAwMAorI2RlZmluZSBFQ09OQV9FSENJX1ZCQVNFIDB4RjgwMDAwMDAKKyNkZWZpbmUg
RUNPTkFfRUhDSV9TSVpFIDB4ODAwMDAwMAorCisjZGVmaW5lIEVDT05BX09IQ0lfUEJBU0UgMHhD
MDAwMDAwMAorI2RlZmluZSBFQ09OQV9PSENJX1ZCQVNFIDB4RjAwMDAwMDAKKyNkZWZpbmUgRUNP
TkFfT0hDSV9TSVpFIDB4ODAwMDAwMAorCisjZGVmaW5lIEVDT05BX1VTQl9TSVpFIDB4ZjAwMDAw
MAorCisvKklDKi8KKworI2RlZmluZSBJTlRDX0xFVkVMX1RSSUdHRVIgICAgICAgICAgICAgICAg
ICAwCisjZGVmaW5lIElOVENfRURHRV9UUklHR0VSICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgSU5UQ19BQ1RJVkVfSElHSCAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRDX0FD
VElWRV9MT1cgICAgICAgICAgICAgICAgICAgICAxCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxs
aW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUgSU5UQ19SSVNJTkdf
RURHRSAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRDX0ZBTExJTkdfRURHRSAgICAg
ICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgSU5UQ19JTlRFUlJVUFRfU09VUkNFX1JFR19PRkZT
RVQgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZT
RVQgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0Vf
VFJJR0dFUl9SRUdfT0ZGU0VUIDB4MDgKKyNkZWZpbmUgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9N
T0RFX1JFR19PRkZTRVQgICAgICAgMHgwQworI2RlZmluZSBJTlRDX0lOVEVSUlVQVF9UUklHR0VS
X0xFVkVMX1JFR19PRkZTRVQgICAgICAweDEwCisjZGVmaW5lIElOVENfSU5URVJSVVBUX1NUQVRV
U19SRUdfT0ZGU0VUICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgSU5UQ19GSVFfTU9ERV9TRUxF
Q1RfUkVHX09GRlNFVCAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBJTlRDX1NPRlRXQVJFX0lO
VEVSUlVQVF9SRUdfT0ZGU0VUICAgICAgICAgICAweDFDCisKKworLyoKKyAqIGRlZmluZSByaXNp
bmcvZmFsbGluZyBlZGdlIGZvciBlZGdlIHRyaWdnZXIgbW9kZQorICovCisjZGVmaW5lIElOVENf
UklTSU5HX0VER0UgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UQ19GQUxMSU5HX0VE
R0UgICAgICAgICAgICAgICAgICAgMQorCisKKyNkZWZpbmUgVElNRVJfVE0xX0NPVU5URVJfUkVH
X09GRlNFVCAgICAweDAwCisjZGVmaW5lIFRJTUVSX1RNMV9MT0FEX1JFR19PRkZTRVQgICAgICAg
MHgwNAorI2RlZmluZSBUSU1FUl9UTTFfTUFUQ0gxX1JFR19PRkZTRVQgICAgIDB4MDgKKyNkZWZp
bmUgVElNRVJfVE0xX01BVENIMl9SRUdfT0ZGU0VUICAgICAweDBDCisKKyNkZWZpbmUgVElNRVJf
VE0yX0NPVU5URVJfUkVHX09GRlNFVCAgICAweDEwCisjZGVmaW5lIFRJTUVSX1RNMl9MT0FEX1JF
R19PRkZTRVQgICAgICAgMHgxNAorI2RlZmluZSBUSU1FUl9UTTJfTUFUQ0gxX1JFR19PRkZTRVQg
ICAgIDB4MTgKKyNkZWZpbmUgVElNRVJfVE0yX01BVENIMl9SRUdfT0ZGU0VUICAgICAweDFDCisK
KyNkZWZpbmUgVElNRVJfVE1fQ1JfUkVHX09GRlNFVCAgICAgICAgICAweDMwCisjZGVmaW5lIFRJ
TUVSX1RNX0lOVFJfU1RBVFVTX1JFR19PRkZTRVQgMHgzNAorI2RlZmluZSBUSU1FUl9UTV9JTlRS
X01BU0tfUkVHX09GRlNFVCAgIDB4MzgKKworI2RlZmluZSBUSU1FUl9UTV9SRVZJU0lPTl9SRUdf
T0ZGU0VUICAgIDB4M0MKKworCisjZGVmaW5lIElOVENfVElNRVIxX0JJVF9JTkRFWCAgICAgICAg
ICAgICAgIDAKKworI2RlZmluZSBUSU1FUjFfVVBfRE9XTl9DT1VOVCAgICAgICgxPDw5KQorI2Rl
ZmluZSBUSU1FUjJfVVBfRE9XTl9DT1VOVCAgICAgICgxPDwxMCkKKworI2RlZmluZSBUSU1FUjFf
TUFUQ0gxX0lOVFIgICAgICAgICgxPDwwKQorI2RlZmluZSBUSU1FUjFfTUFUQ0gyX0lOVFIgICAg
ICAgICgxPDwxKQorI2RlZmluZSBUSU1FUjFfT1ZFUkZMT1dfSU5UUiAgICAgICgxPDwyKQorCisK
KyNkZWZpbmUgVElNRVIyX01BVENIMV9JTlRSICAgICAgICAoMTw8MykKKyNkZWZpbmUgVElNRVIy
X01BVENIMl9JTlRSICAgICAgICAoMTw8NCkKKyNkZWZpbmUgVElNRVIyX09WRVJGTE9XX0lOVFIg
ICAgICAoMTw8NSkKKworCisjZGVmaW5lIFRJTUVSX0NMT0NLX1NPVVJDRV9QQ0xLICAgICAgICAg
ICAgIDAKKyNkZWZpbmUgVElNRVJfQ0xPQ0tfU09VUkNFX0VYVF9DTEsgICAgICAgICAgMQorCisv
KgorICogZGVmaW5lIGludGVycnVwdCB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZSBJTlRDX0xF
VkVMX1RSSUdHRVIgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVENfRURHRV9UUklHR0VS
ICAgICAgICAgICAgICAgICAgIDEKKworCisjZGVmaW5lIElOVENfVFJJR0dFUl9VTktOT1dOIC0x
CisKKyNkZWZpbmUJVElNRVIxX09WRVJGTE9XX0lOVEVSUlVQVAkoMTw8MikKKyNkZWZpbmUJVElN
RVIyX09WRVJGTE9XX0lOVEVSUlVQVAkoMTw8NSkKKyNkZWZpbmUJVElNRVJfSU5URVJSVVBUX1NU
QVRVU19SRUcJCTB4MzQKKworCisjZGVmaW5lIFRJTUVSMV9FTkFCTEUgICAoMTw8MCkKKyNkZWZp
bmUgVElNRVIxX0NMT0NLX1NPVVJDRSAgICAgICAoMTw8MSkKKyNkZWZpbmUgVElNRVIxX09WRVJG
TE9XX0VOQUJMRSAgICAoMTw8MikKKworCisjZGVmaW5lIFRJTUVSMl9FTkFCTEUgICAgICAgICAg
ICAgKDE8PDMpCisjZGVmaW5lIFRJTUVSMl9DTE9DS19TT1VSQ0UgICAgICAgKDE8PDQpCisjZGVm
aW5lIFRJTUVSMl9PVkVSRkxPV19FTkFCTEUgICAgKDE8PDUpCisKKworI2RlZmluZSBUSU1FUl8x
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgRUNfVUFSVF9DTE9DSyAx
NDc2OTIwMAorI2RlZmluZSBFQ19VQVJUX1JFR1NISUZUIDIKKworI2RlZmluZSBTWVNURU1fQ0xP
Q0tfSU5GTyAoMHg3NzAwMDAxNCkKKyNkZWZpbmUgQ1BVX1JFU0VUX1JFR0lTVEVSICgweDc3MDAw
MDE0KQorCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9lY29uYS9pZl9lY2V2YXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBzeXMvYXJtL2Vjb25hL2lmX2VjZXZhci5oCShyZXZpc2lvbiAwKQorKysgc3lzL2Fy
bS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTYgQEAKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBfSUZFQ0VWQVJfSAorI2RlZmluZSBfSUZFQ0VWQVJfSAorCisjZGVmaW5lIEVDRV9N
QVhfVFhfQlVGRkVSUyAxMjgKKyNkZWZpbmUgRUNFX01BWF9SWF9CVUZGRVJTIDEyOAorI2RlZmlu
ZSBNQVhfRlJBR01FTlQgMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8K
Kwl1aW50MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0
aDoxNjsKKworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWlu
dDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7
IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVp
bnQzMl90CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkv
KiBmb3JjZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9w
cmlvcml0eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMy
X3QJCWludGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmly
c3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVv
cjoxOworCS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8K
KwkvKnZpZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLwor
CXVpbnQzMl90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJ
c2lkOjM7CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1
aW50MzJfdAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQy
OworCit9IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRh
X3B0cjsKKwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJf
dAkJaXBmOjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJf
dAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJ
ZW9yOjE7CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90
CQl1bnVzZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8gewor
CXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190
ICpkZXNjOworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsK
KwlidXNfZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0
cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIg
Ki8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHgg
c2NfbXR4X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4
IG11dGV4ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKwor
CWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisK
KwlkZXZpY2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkg
Y2hpbGQgbWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAq
LworCXZvaWQgKmludHJoYW5kX3FmOwkJCS8qIEludGVycnVwdCBoYW5kbGU6IHF1ZXVlIGZ1bGwg
Ki8KKwl2b2lkICppbnRyaGFuZF90eDsJCQkvKiBJbnRlcnJ1cHQgaGFuZGxlOiBxdWV1ZSBmdWxs
ICovCisJdm9pZCAqaW50cmhhbmRfc3RhdHVzOwkJCS8qIEludGVycnVwdCBoYW5kbGUgKi8KKwor
CXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVz
b3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFf
cmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1
czsJLyogc3RhdHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSBy
ZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAq
LworCisJaW50IHVzZV9ybWlpOworCisJc3RydWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0
IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1
Y3QgdGFzawlzY190eF90YXNrOworCisKKwlidXNfZG1hbWFwX3QJZG1hbWFwX3JpbmdfdHg7CisJ
YnVzX2RtYW1hcF90CWRtYW1hcF9yaW5nX3J4OworCWJ1c19kbWFtYXBfdAlyeF9zcGFyZW1hcDsK
KworCS8qZG1hIHRhZyBmb3IgcmluZyovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ190eDsK
KwlidXNfZG1hX3RhZ190CWRtYXRhZ19yaW5nX3J4OworCisJLypkbWEgdGFnIGZvciBkYXRhKi8K
KwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3R4OworCWJ1c19kbWFfdGFnX3QJZG1hdGFnX2Rh
dGFfcng7CisKKwkvKnRoZSByaW5nKi8KKwlldGhfdHhfZGVzY190KglkZXNjX3R4OworCWV0aF9y
eF9kZXNjX3QqCWRlc2Nfcng7CisKKwkvKnJpbmcgcGh5c2ljYWwgYWRkcmVzcyovCisJYnVzX2Fk
ZHJfdAlyaW5nX3BhZGRyX3R4OworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl9yeDsKKworCS8qaW5k
ZXggb2YgbGFzdCByZWNlaXZlZCBkZXNjcml0b3IqLworCXVpbnQzMl90IGxhc3Rfcng7CisJc3Ry
dWN0IHJ4X2Rlc2NfaW5mbyByeF9kZXNjW0VDRV9NQVhfUlhfQlVGRkVSU107CisKKworCS8qIHR4
IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBp
bmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCovCisJdWludDMy
X3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhf
VFhfQlVGRkVSU107CisKK307CisKKworc3RydWN0IGFybF90YWJsZV9lbnRyeV90IHsKKwl1aW50
MzJfdCBjbWRfY29tcGxldGU6IDE7CisJdWludDMyX3QgdGFibGVfZW5kOiAxOworCXVpbnQzMl90
IHNlYXJjaF9tYXRjaDogMTsKKwl1aW50MzJfdCBmaWx0ZXI6MTsgLyppZiBzZXQsIHBhY2tldCB3
aWxsIGJlIGRyb3BwZWQgKi8KKwl1aW50MzJfdCB2bGFuX21hYzoxOyAvKmluZGljYXRlcyB0aGF0
IHRoaXMgaXMgdGhlIGdhdGV3YXkgbWFjIGFkZHJlc3MqLworCXVpbnQzMl90IHZsYW5fZ2lkOjM7
IC8qdmxhbiBpZCovCisJdWludDMyX3QgYWdlX2ZpZWxkOjM7CisJdWludDMyX3QgcG9ydF9tYXA6
MzsKKwkgLyo0OCBiaXQgbWFjIGFkZHJlc3MqLworCXVpbnQ4X3QgbWFjX2FkZHJbNl07CisJdWlu
dDhfdCBwYWRbMl07Cit9OworCitzdHJ1Y3QgbWFjX2xpc3R7CisJY2hhciBtYWNfYWRkcls2XTsK
KwlzdHJ1Y3QgbWFjX2xpc3QgKm5leHQ7Cit9OworCisKKyNlbmRpZgpJbmRleDogc3lzL2FybS9l
Y29uYS9vaGNpX2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS9vaGNpX2VjLmMJKHJl
dmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL29oY2lfZWMuYwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvc3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0
ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUg
PHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2xpbmtl
cl9zZXQuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4K
KyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvY29uZHZhci5oPgorI2luY2x1
ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3guaD4KKyNpbmNsdWRlIDxzeXMvdW5p
c3RkLmg+CisjaW5jbHVkZSA8c3lzL2NhbGxvdXQuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+
CisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5j
bHVkZSA8ZGV2L3VzYi91c2JkaS5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgor
I2luY2x1ZGUgPGRldi91c2IvdXNiX2J1c2RtYS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3By
b2Nlc3MuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYv
dXNiL3VzYl9jb250cm9sbGVyLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5j
bHVkZSA8ZGV2L3VzYi9jb250cm9sbGVyL29oY2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRy
b2xsZXIvb2hjaXJlZy5oPgorCisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKworI2luY2x1ZGUgPGFy
bS9lY29uYS9lY29uYV9yZWcuaD4KKworI2RlZmluZQlNRU1fUklECTAKKworc3RhdGljIGRldmlj
ZV9wcm9iZV90IG9oY2lfZWNfcHJvYmU7CitzdGF0aWMgZGV2aWNlX2F0dGFjaF90IG9oY2lfZWNf
YXR0YWNoOworc3RhdGljIGRldmljZV9kZXRhY2hfdCBvaGNpX2VjX2RldGFjaDsKKworc3RydWN0
IGVjX29oY2lfc29mdGMgeworCXN0cnVjdCBvaGNpX3NvZnRjIHNjX29oY2k7CS8qIG11c3QgYmUg
Zmlyc3QgKi8KK307CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQor
eworCWRldmljZV9zZXRfZGVzYyhkZXYsICJFY29uYSBpbnRlZ3JhdGVkIE9IQ0kgY29udHJvbGxl
ciIpOworCXJldHVybiAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitvaGNp
X2VjX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWJ1c19zcGFjZV9oYW5kbGVfdCBic2g7CisJaW50IGVy
cjsKKwlpbnQgcmlkOworCisJLyogaW5pdGlhbGlzZSBzb21lIGJ1cyBmaWVsZHMgKi8KKwlzYy0+
c2Nfb2hjaS5zY19idXMucGFyZW50ID0gZGV2OworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2Vz
ID0gc2MtPnNjX29oY2kuc2NfZGV2aWNlczsKKwlzYy0+c2Nfb2hjaS5zY19idXMuZGV2aWNlc19t
YXggPSBPSENJX01BWF9ERVZJQ0VTOworCisJLyogZ2V0IGFsbCBETUEgbWVtb3J5ICovCisJaWYg
KHVzYl9idXNfbWVtX2FsbG9jX2FsbCgmc2MtPnNjX29oY2kuc2NfYnVzLAorCSAgICBVU0JfR0VU
X0RNQV9UQUcoZGV2KSwgJm9oY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChFTk9N
RU0pOworCX0KKwlzYy0+c2Nfb2hjaS5zY19kZXYgPSBkZXY7CisKKwlyaWQgPSBNRU1fUklEOwor
CisJc2MtPnNjX29oY2kuc2NfaW9fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZ
U19SRVNfTUVNT1JZLAorCSAgICAmcmlkLCBSRl9BQ1RJVkUpOworCisJaWYgKCEoc2MtPnNjX29o
Y2kuc2NfaW9fcmVzKSkgeworCQllcnIgPSBFTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCXNj
LT5zY19vaGNpLnNjX2lvX3RhZyA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+c2Nfb2hjaS5zY19pb19y
ZXMpOworCWJzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+c2Nfb2hjaS5zY19pb19yZXMpOwor
CisKKworCWJ1c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNo
LAorCQkweDA0LCAweDE0Nik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgKKwkJKHNjKS0+c2Nfb2hj
aS5zY19pb190YWcsIGJzaCwKKwkJMHg0NCwgMHgwMjAwKTsKKworCURFTEFZKDEwMDApOworCisK
KwlzYy0+c2Nfb2hjaS5zY19pb19zaXplID0gcm1hbl9nZXRfc2l6ZShzYy0+c2Nfb2hjaS5zY19p
b19yZXMpOworCisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2Nfb2hjaS5zY19pb190
YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2Nfb2hjaS5zY19pb19zaXplLCAmc2MtPnNj
X29oY2kuc2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24g
VVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShkZXYpKTsKKworCisJ
cmlkID0gMDsKKwlzYy0+c2Nfb2hjaS5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu
eShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmICghKHNjLT5z
Y19vaGNpLnNjX2lycV9yZXMpKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCXNjLT5zY19vaGNpLnNj
X2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChkZXYsICJ1c2J1cyIsIC0xKTsKKwlpZiAoIShz
Yy0+c2Nfb2hjaS5zY19idXMuYmRldikpIHsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2aWNlX3Nl
dF9pdmFycyhzYy0+c2Nfb2hjaS5zY19idXMuYmRldiwgJnNjLT5zY19vaGNpLnNjX2J1cyk7CisK
KwlzdHJsY3B5KHNjLT5zY19vaGNpLnNjX3ZlbmRvciwgIkNhdml1bSIsIHNpemVvZihzYy0+c2Nf
b2hjaS5zY192ZW5kb3IpKTsKKworI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMzEpCisJ
ZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+c2Nfb2hjaS5zY19pcnFfcmVzLCBJTlRSX1RZ
UEVfQklPIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEwsIChkcml2ZXJfaW50cl90ICopb2hjaV9p
bnRlcnJ1cHQsIHNjLCAmc2MtPnNjX29oY2kuc2NfaW50cl9oZGwpOworI2Vsc2UKKwllcnIgPSBi
dXNfc2V0dXBfaW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsIElOVFJfVFlQRV9CSU8g
fCBJTlRSX01QU0FGRSwKKwkgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2Ms
ICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZW5kaWYKKwlpZiAoZXJyKSB7CisJCXNjLT5z
Y19vaGNpLnNjX2ludHJfaGRsID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlidXNfc3Bh
Y2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNjLT5zY19vaGNpLnNjX2lvX2hkbCwK
KwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWVyciA9IG9oY2lfaW5pdCgmc2MtPnNjX29oY2kp
OworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRfYXR0YWNoKHNjLT5zY19v
aGNpLnNjX2J1cy5iZGV2KTsKKwl9CisJaWYgKGVycikgeworCQlnb3RvIGVycm9yOworCX0KKwly
ZXR1cm4gKDApOworCitlcnJvcjoKKwlvaGNpX2VjX2RldGFjaChkZXYpOworCXJldHVybiAoRU5Y
SU8pOworfQorCitzdGF0aWMgaW50CitvaGNpX2VjX2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJ
c3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWRldmlj
ZV90IGJkZXY7CisJaW50IGVycjsKKworCWlmIChzYy0+c2Nfb2hjaS5zY19idXMuYmRldikgewor
CQliZGV2ID0gc2MtPnNjX29oY2kuc2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7
CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBiZGV2KTsKKwl9CisJLyogZHVyaW5nIG1vZHVs
ZSB1bmxvYWQgdGhlcmUgYXJlIGxvdHMgb2YgY2hpbGRyZW4gbGVmdG92ZXIgKi8KKwlkZXZpY2Vf
ZGVsZXRlX2FsbF9jaGlsZHJlbihkZXYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnNjX29o
Y2kuc2NfaW9fdGFnLCBzYy0+c2Nfb2hjaS5zY19pb19oZGwsCisJICAgIE9IQ0lfQ09OVFJPTCwg
MCk7CisKKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcyAmJiBzYy0+c2Nfb2hjaS5zY19pbnRy
X2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgb2hjaV9kZXRhY2goKSBhZnRlciBvaGNpX2lu
aXQoKQorCQkgKi8KKwkJb2hjaV9kZXRhY2goJnNjLT5zY19vaGNpKTsKKworCQllcnIgPSBidXNf
dGVhcmRvd25faW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsIHNjLT5zY19vaGNpLnNj
X2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAo
c2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ
U19SRVNfSVJRLCAwLCBzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX29oY2kuc2Nf
aXJxX3JlcyA9IE5VTEw7CisJfQorCWlmIChzYy0+c2Nfb2hjaS5zY19pb19yZXMpIHsKKwkJYnVz
X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgTUVNX1JJRCwKKwkJICAgIHNj
LT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2lvX3JlcyA9IE5VTEw7CisJ
fQorCXVzYl9idXNfbWVtX2ZyZWVfYWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsICZvaGNpX2l0ZXJh
dGVfaHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2Rf
dCBvaGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9E
KGRldmljZV9wcm9iZSwgb2hjaV9lY19wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gs
IG9oY2lfZWNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgb2hjaV9lY19kZXRh
Y2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc2h1dGRvd24sIGJ1c19nZW5lcmljX3NodXRkb3duKSwK
KworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLCBidXNf
Z2VuZXJpY19wcmludF9jaGlsZCksCisKKwl7MCwgMH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBv
aGNpX2RyaXZlciA9IHsKKwkib2hjaSIsCisJb2hjaV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3Qg
ZWNfb2hjaV9zb2Z0YyksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBvaGNpX2RldmNsYXNzOwor
CitEUklWRVJfTU9EVUxFKG9oY2ksIGVjb25hYXJtLCBvaGNpX2RyaXZlciwgb2hjaV9kZXZjbGFz
cywgMCwgMCk7CitNT0RVTEVfREVQRU5EKG9oY2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBzeXMv
YXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9lY29uYS91YXJ0
X2NwdV9lYy5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9lY29uYS91YXJ0X2NwdV9lYy5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBZ
b2hhbmVzIE51Z3JvaG8KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVk
IGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxM
IG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAg
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQuaCIKKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1
cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgor
CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1
Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25h
X3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3NwYWNlX3Rh
Z190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX21l
bTsKKworCitpbnQKK3VhcnRfY3B1X2VxcmVzKHN0cnVjdCB1YXJ0X2JhcyAqYjEsIHN0cnVjdCB1
YXJ0X2JhcyAqYjIpCit7CisKKwlyZXR1cm4gKChiMS0+YnNoID09IGIyLT5ic2ggJiYgYjEtPmJz
dCA9PSBiMi0+YnN0KSA/IDEgOiAwKTsKK30KKworaW50Cit1YXJ0X2NwdV9nZXRkZXYoaW50IGRl
dnR5cGUsIHN0cnVjdCB1YXJ0X2RldmluZm8gKmRpKQoreworCXN0cnVjdCB1YXJ0X2NsYXNzICpj
bGFzcyA9ICZ1YXJ0X25zODI1MF9jbGFzczsKKworCWRpLT5vcHMgPSB1YXJ0X2dldG9wcyhjbGFz
cyk7CisJZGktPmJhcy5jaGFuID0gMDsKKwlkaS0+YmFzLmJzdCA9IG9iaW9fdGFnOworCisJaWYg
KGJ1c19zcGFjZV9tYXAoZGktPmJhcy5ic3QsIEVDT05BX0lPX0JBU0UgKyBFQ09OQV9VQVJUX0JB
U0UsCisJCQkgIEVDT05BX1VBUlRfU0laRSwKKwkJCSAgMCwgJmRpLT5iYXMuYnNoKSAhPSAwKSB7
CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWRpLT5iYXVkcmF0ZSA9IDA7CisJZGktPmJhcy5y
ZWdzaGZ0ID0gRUNfVUFSVF9SRUdTSElGVDsKKwlkaS0+YmFzLnJjbGsgPSBFQ19VQVJUX0NMT0NL
IDsKKwlkaS0+ZGF0YWJpdHMgPSA4OworCWRpLT5zdG9wYml0cyA9IDE7CisJZGktPnBhcml0eSA9
IFVBUlRfUEFSSVRZX05PTkU7CisJdWFydF9idXNfc3BhY2VfbWVtID0gb2Jpb190YWc7CisJdWFy
dF9idXNfc3BhY2VfaW8gPSBOVUxMOworCisJcmV0dXJuICgwKTsKK30KSW5kZXg6IHN5cy9hcm0v
ZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2Vjb25hL3VhcnRfYnVz
X2VjLmMJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vjb25hL3VhcnRfYnVzX2VjLmMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qLQorICogQ29weXJpZ2h0IChDKSAyMDA5IFlvaGFu
ZXMgTnVncm9obworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1
ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9i
dXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNp
bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1
ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVk
ZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5j
bHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9y
ZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRp
YyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVy
ZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQl1YXJ0X2VjX3Byb2JlKSwKKwlERVZN
RVRIT0QoZGV2aWNlX2F0dGFjaCwJdWFydF9idXNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNl
X2RldGFjaCwJdWFydF9idXNfZGV0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZl
cl90IHVhcnRfZWNfZHJpdmVyID0geworCXVhcnRfZHJpdmVyX25hbWUsCisJdWFydF9lY19tZXRo
b2RzLAorCXNpemVvZihzdHJ1Y3QgdWFydF9zb2Z0YyksCit9OworCitzdGF0aWMgaW50Cit1YXJ0
X2VjX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QJdWFydF9zb2Z0YyAqc2M7CisJaW50
IAlzdGF0dXM7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzYy0+c2NfY2xhc3Mg
PSAmdWFydF9uczgyNTBfY2xhc3M7CisJc3RhdHVzID0gdWFydF9idXNfcHJvYmUoZGV2LCBFQ19V
QVJUX1JFR1NISUZULCBFQ19VQVJUX0NMT0NLICwgMCwgMCk7CisKKwlyZXR1cm4oc3RhdHVzKTsK
K30KKworRFJJVkVSX01PRFVMRSh1YXJ0LCBlY29uYWFybSwgdWFydF9lY19kcml2ZXIsIHVhcnRf
ZGV2Y2xhc3MsIDAsIDApOwpJbmRleDogc3lzL2FybS9lY29uYS9zdGQuZWNvbmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc3lzL2FybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDApCisrKyBzeXMvYXJtL2Vj
b25hL3N0ZC5lY29uYQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorIyAkRnJlZUJTRCQK
KworZmlsZXMJIi4uL2Vjb25hL2ZpbGVzLmVjb25hIgorY3B1CQlDUFVfRkE1MjYKK21ha2VvcHRp
b25zCUNPTkZfQ0ZMQUdTPS1tYXJjaD1hcm12NAorb3B0aW9ucyAJUEhZU0FERFI9MHgwMDAwMDAw
MAorbWFrZW9wdGlvbnMJS0VSTlBIWVNBRERSPTB4MDEwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5W
SVJUQUREUj0weGMxMDAwMDAwCisKK29wdGlvbnMgCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCitv
cHRpb25zIAlLRVJOVklSVEFERFI9MHhjMTAwMDAwMAkJIyBVc2VkIGluIGxkc2NyaXB0LmFybQor
b3B0aW9ucyAJRkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMgCUxPQURFUlJBTUFERFI9MHgw
MDAwMDAwMAorb3B0aW9ucyAJU1RBUlRVUF9QQUdFVEFCTEVfQUREUj0weDAwMTAwMDAwCkluZGV4
OiBzeXMvY29uZi9NYWtlZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvTWFrZWZpbGUu
YXJtCShyZXZpc2lvbiAyMDA5ODgpCisrKyBzeXMvY29uZi9NYWtlZmlsZS5hcm0JKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV9zYTEuUyAkUy8k
TS8kTS9jcHVmdW5jX2FzbV9hcm0xMC5TIFwKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV94c2NhbGUu
UyAkUy8kTS8kTS9jcHVmdW5jX2FzbS5TIFwKIAkkUy8kTS8kTS9jcHVmdW5jX2FzbV94c2NhbGVf
YzMuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm12NV9lYy5TIFwKLQkkUy8kTS8kTS9jcHVmdW5j
X2FzbV9zaGVldmEuUworCSRTLyRNLyRNL2NwdWZ1bmNfYXNtX3NoZWV2YS5TICRTLyRNLyRNL2Nw
dWZ1bmNfYXNtX2ZhNTI2LlMKIEtFUk5FTF9FWFRSQT10cmFtcG9saW5lCiBLRVJORUxfRVhUUkFf
SU5TVEFMTD1rZXJuZWwuZ3oudHJhbXAKIHRyYW1wb2xpbmU6ICR7S0VSTkVMX0tPfS50cmFtcApJ
bmRleDogc3lzL2NvbmYvb3B0aW9ucy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvb3B0aW9u
cy5hcm0JKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9jb25mL29wdGlvbnMuYXJtCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwzICszNiw0IEBACiBBVDkxX0JXQ1QJCW9wdF9hdDkxLmgKIEFUOTFfVFND
CQlvcHRfYXQ5MS5oCiBBVDkxX0tXSUtCWVRFCQlvcHRfYXQ5MS5oCitDUFVfRkE1MjYJCW9wdF9n
bG9iYWwuaApJbmRleDogc3lzL2tlcm4vdmZzX21vdW50LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2tl
cm4vdmZzX21vdW50LmMJKHJldmlzaW9uIDIwMDk4OCkKKysrIHN5cy9rZXJuL3Zmc19tb3VudC5j
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAzLDYgKzE0MDMsMTEgQEAKIAlzdHJ1Y3QgdGltZXZhbCBs
YXN0ZmFpbDsKIAlpbnQgY3VyZmFpbCA9IDA7CiAKKwkvKiB0ZW1wb3Jhcnkgc29sdXRpb24gZm9y
IHRpbWVvdXQgd2FpdGluZyBmb3IgVVNCIGRpc2sgcm9vdAorCSAqIGZpbGVzeXN0ZW0KKwkgKi8K
KwlwYXVzZSgiV0FJVCIsIGh6ICogMTApOworCiAJZm9yICg7OykgewogCQlEUk9QX0dJQU5UKCk7
CiAJCWdfd2FpdGlkbGUoKTsK
--001636b2adb14f1efd047b912a10--



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