Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Jan 2010 20:43:13 +0700
From:      Yohanes Nugroho <yohanes@gmail.com>
To:        Stanislav Sedov <stas@freebsd.org>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: CNS11XX FreeBSD port completed
Message-ID:  <260bb65e1001030543y35fc278bo8dc73d265542bb77@mail.gmail.com>
In-Reply-To: <20100103030926.18ca3fca.stas@FreeBSD.org>
References:  <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com>  <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com>  <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org> <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com>  <20100103030926.18ca3fca.stas@FreeBSD.org>

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

On Sun, Jan 3, 2010 at 6:09 PM, Stanislav Sedov <stas@freebsd.org> wrote:

Hi Stanislav,

Thank you for looking so thoroughly at my code. Here is my latest patch att=
empt.

>> +void *
>> +initarm(void *arg, void *arg2)
>> +{
>> + =C2=A0 =C2=A0 struct pv_addr =C2=A0kernel_l1pt;
>> + =C2=A0 =C2=A0 int loop, i;
>> + =C2=A0 =C2=A0 u_int l1pagetable;
>> + =C2=A0 =C2=A0 vm_offset_t freemempos;
>> + =C2=A0 =C2=A0 vm_offset_t afterkern;
>> + =C2=A0 =C2=A0 uint32_t memsize;
>> + =C2=A0 =C2=A0 vm_offset_t lastaddr;
>> + =C2=A0 =C2=A0 volatile uint32_t * ddr =3D (uint32_t *)0x4000000C;
>> + =C2=A0 =C2=A0 int mem_info;
>
> Style(9) recommends sorting local variable declarations by size, then
> alphabetically. =C2=A0This makes reading easier.

actually, i just added the last 2 variables. Almost all of the
*_machdep in sys/arm is copied from one source. But I have reordered
them in my latest patch. I ordered the size from large to small.
Reading some random kernel code, it doesn't seem to be consistent
(some orders from small to large, and I think most doesn't order them
alphabetically).

>> +
>> + =C2=A0 =C2=A0 boot_arg1 =3D arg;
>> + =C2=A0 =C2=A0 boot_arg2 =3D arg2;
>> + =C2=A0 =C2=A0 boothowto =3D RB_VERBOSE;
>> + =C2=A0 =C2=A0 boothowto |=3D =C2=A0RB_SINGLE;
>
> Why are you setting boothowto here? =C2=A0Is it possible for the board to=
 boot
> to multiuser?

I looked at sa11x0/assabet_machdep.c, and it is how they initialize
the boot flags.

The device can boot to multi user, so I have removed the line (the
single user mode was good for testing).

>> +static inline uint32_t
>> +RD4(struct ece_softc *sc, bus_size_t off)
>> +{
>> + =C2=A0 =C2=A0 return (bus_read_4(sc->mem_res, off));
>> +}
>> +
>> +static inline void
>> +WR4(struct ece_softc *sc, bus_size_t off, uint32_t val)
>> +{
>> + =C2=A0 =C2=A0 bus_write_4(sc->mem_res, off, val);
>> +}
>
> Funcctions without local variable should have an extra blank line at the
> beginning, per style(9). =C2=A0Also, all-capitals names are usually used =
for macros,
> not function names.

ok, about the naming. When creating the code, I was copying the style
from arm at91 source code where all of the files uses WR4 and RD4
*function*, the same style is also used in dev/mwl/mwlhal.c. I have
replaced the names, and added the whitespace.

>> +static int eceioctl(struct ifnet * ifp, u_long, caddr_t);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^^
> Use TAB after the return value type in prototypes.

I thought that was only for prototypes in header. When I looked at
most networking code, it just uses space for internal prototypes
(if_jme.c, if_age.c, if_dc.c, etc). I was again wrong in looking the
styles of other code. I have added the tabs as you suggested.

> Missing spaces. =C2=A0The same for other parts of code.
> Can you, please, review your code considering these
> comments and send the patch again? =C2=A0In gerneal, the
> code looks great, but there're some minor nits that
> should be fixed before it hits the base.

Ok, I have tried to read the latest patch several times, I hope I got
it right this time.

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

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

SW5kZXg6IGFybS9hcm0vZWxmX3RyYW1wb2xpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vYXJtL2Vs
Zl90cmFtcG9saW5lLmMJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9hcm0vZWxmX3RyYW1wb2xp
bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBjcHVfaWRjYWNo
ZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVkKENQVV9BUk05KQog
I2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3diaW52X2FsbAorI2Vs
aWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlmYTUy
Nl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUpCiAjZGVmaW5lIGNw
dV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVm
aW5lZChDUFVfQVJNMTApCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vYXJtL2NwdWZ1bmMuYwkocmV2aXNpb24gMjAxMzU4KQorKysgYXJtL2FybS9jcHVmdW5jLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMgQEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBj
cHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9YU0NBTEVfODEzNDIgKi8KKworCisjaWYg
ZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9
IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisKKwkuY2ZfaWQJCQk9IGNwdWZ1bmNfaWQsCisJLmNm
X2Nwd2FpdAkJPSBjcHVmdW5jX251bGxvcCwKKworCS8qIE1NVSBmdW5jdGlvbnMgKi8KKworCS5j
Zl9jb250cm9sCQk9IGNwdWZ1bmNfY29udHJvbCwKKwkuY2ZfZG9tYWlucwkJPSBjcHVmdW5jX2Rv
bWFpbnMsCisJLmNmX3NldHR0YgkJPSBmYTUyNl9zZXR0dGIsCisJLmNmX2ZhdWx0c3RhdHVzCQk9
IGNwdWZ1bmNfZmF1bHRzdGF0dXMsCisJLmNmX2ZhdWx0YWRkcmVzcwk9IGNwdWZ1bmNfZmF1bHRh
ZGRyZXNzLAorCisJLyogVExCIGZ1bmN0aW9ucyAqLworCisJLmNmX3RsYl9mbHVzaElECQk9IGFy
bXY0X3RsYl9mbHVzaElELAorCS5jZl90bGJfZmx1c2hJRF9TRQk9IGZhNTI2X3RsYl9mbHVzaElE
X1NFLAorCS5jZl90bGJfZmx1c2hJCQk9IGFybXY0X3RsYl9mbHVzaEksCisJLmNmX3RsYl9mbHVz
aElfU0UJPSBmYTUyNl90bGJfZmx1c2hJX1NFLAorCS5jZl90bGJfZmx1c2hECQk9IGFybXY0X3Rs
Yl9mbHVzaEQsCisJLmNmX3RsYl9mbHVzaERfU0UJPSBhcm12NF90bGJfZmx1c2hEX1NFLAorCisJ
LyogQ2FjaGUgb3BlcmF0aW9ucyAqLworCisJLmNmX2ljYWNoZV9zeW5jX2FsbAk9IGZhNTI2X2lj
YWNoZV9zeW5jX2FsbCwKKwkuY2ZfaWNhY2hlX3N5bmNfcmFuZ2UJPSBmYTUyNl9pY2FjaGVfc3lu
Y19yYW5nZSwKKworCS5jZl9kY2FjaGVfd2JpbnZfYWxsCT0gZmE1MjZfZGNhY2hlX3diaW52X2Fs
bCwKKwkuY2ZfZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diaW52X3JhbmdlLAor
CS5jZl9kY2FjaGVfaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX2ludl9yYW5nZSwKKwkuY2ZfZGNh
Y2hlX3diX3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diX3JhbmdlLAorCisJLmNmX2lkY2FjaGVfd2Jp
bnZfYWxsCT0gZmE1MjZfaWRjYWNoZV93Ymludl9hbGwsCisJLmNmX2lkY2FjaGVfd2JpbnZfcmFu
Z2UJPSBmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlLAorCisKKwkuY2ZfbDJjYWNoZV93Ymludl9h
bGwgPSBjcHVmdW5jX251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Ymludl9yYW5nZSA9ICh2b2lkICop
Y3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfaW52X3JhbmdlID0gKHZvaWQgKiljcHVmdW5j
X251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Yl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3As
CisKKworCS8qIE90aGVyIGZ1bmN0aW9ucyAqLworCisJLmNmX2ZsdXNoX3ByZWZldGNoYnVmCT0g
ZmE1MjZfZmx1c2hfcHJlZmV0Y2hidWYsCisJLmNmX2RyYWluX3dyaXRlYnVmCT0gYXJtdjRfZHJh
aW5fd3JpdGVidWYsCisJLmNmX2ZsdXNoX2JybmNodGd0X0MJPSBjcHVmdW5jX251bGxvcCwKKwku
Y2ZfZmx1c2hfYnJuY2h0Z3RfRQk9IGZhNTI2X2ZsdXNoX2JybmNodGd0X0UsCisKKwkuY2Zfc2xl
ZXAJCT0gZmE1MjZfY3B1X3NsZWVwLAorCisJLyogU29mdCBmdW5jdGlvbnMgKi8KKworCS5jZl9k
YXRhYWJ0X2ZpeHVwCT0gY3B1ZnVuY19udWxsX2ZpeHVwLAorCS5jZl9wcmVmZXRjaGFidF9maXh1
cAk9IGNwdWZ1bmNfbnVsbF9maXh1cCwKKworCS5jZl9jb250ZXh0X3N3aXRjaAk9IGZhNTI2X2Nv
bnRleHRfc3dpdGNoLAorCisJLmNmX3NldHVwCQk9IGZhNTI2X3NldHVwCit9OworI2VuZGlmCS8q
IENQVV9GQTUyNiAqLworCisKIC8qCiAgKiBHbG9iYWwgY29uc3RhbnRzIGFsc28gdXNlZCBieSBs
b2NvcmUucwogICovCkBAIC03OTMsNiArODYwLDcgQEAKICAgZGVmaW5lZCAoQ1BVX0FSTTlFKSB8
fCBkZWZpbmVkIChDUFVfQVJNMTApIHx8CQkJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxF
XzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODAzMjEpIHx8CSAgICAgICBcCiAgIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpIHx8CSAg
ICAgICBcCisgIGRlZmluZWQoQ1BVX0ZBNTI2KSB8fAkJCQkJICAgICAgIFwKICAgZGVmaW5lZChD
UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAKIHN0YXRpYyB2
b2lkIGdldF9jYWNoZXR5cGVfY3AxNSh2b2lkKTsKQEAgLTEwNzMsNiArMTE0MSwxOSBAQAogCQln
b3RvIG91dDsKIAl9CiAjZW5kaWYJLyogQ1BVX1NBMTExMCAqLworI2lmZGVmIENQVV9GQTUyNgor
CWlmIChjcHV0eXBlID09IENQVV9JRF9GQTUyNikgeworCQljcHVmdW5jcyA9IGZhNTI2X2NwdWZ1
bmNzOworCQljcHVfcmVzZXRfbmVlZHNfdjRfTU1VX2Rpc2FibGUgPSAxOwkvKiBTQSBuZWVkcyBp
dAkqLworCQlnZXRfY2FjaGV0eXBlX2NwMTUoKTsKKwkJcG1hcF9wdGVfaW5pdF9nZW5lcmljKCk7
CisKKwkJLyogVXNlIHBvd2Vyc2F2ZSBvbiB0aGlzIENQVS4gKi8KKwkJY3B1X2RvX3Bvd2Vyc2F2
ZSA9IDE7CisKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENQVV9GQTUyNiAqLwogI2lmZGVm
IENQVV9JWFAxMlgwCiAgICAgICAgIGlmIChjcHV0eXBlID09IENQVV9JRF9JWFAxMjAwKSB7CiAg
ICAgICAgICAgICAgICAgY3B1ZnVuY3MgPSBpeHAxMngwX2NwdWZ1bmNzOwpAQCAtMTU0Nyw3ICsx
NjI4LDggQEAKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NB
TEVfODAzMjEpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQo
Q1BVX1hTQ0FMRV9JWFA0MjUpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwg
ZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKSB8fCBcCi0gIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAg
ZGVmaW5lZChDUFVfQVJNMTEpCisgIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAgZGVmaW5lZChDUFVf
QVJNMTEpIHx8IFwKKyAgZGVmaW5lZChDUFVfRkE1MjYpCiAKICNkZWZpbmUgSUdOCTAKICNkZWZp
bmUgT1IJMQpAQCAtMjAxMyw2ICsyMDk1LDYyIEBACiB9CiAjZW5kaWYJLyogQ1BVX1NBMTEwMCB8
fCBDUFVfU0ExMTEwICovCiAKKyNpZiBkZWZpbmVkKENQVV9GQTUyNikKK3N0cnVjdCBjcHVfb3B0
aW9uIGZhNTI2X29wdGlvbnNbXSA9IHsKKyNpZmRlZiBDT01QQVRfMTIKKwl7ICJub2NhY2hlIiwJ
CUlHTiwgQklDLCAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xf
RENfRU5BQkxFKSB9LAorCXsgIm5vd3JpdGVidWYiLAkJSUdOLCBCSUMsIENQVV9DT05UUk9MX1dC
VUZfRU5BQkxFIH0sCisjZW5kaWYJLyogQ09NUEFUXzEyICovCisJeyAiY3B1LmNhY2hlIiwJCUJJ
QywgT1IsICAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xfRENf
RU5BQkxFKSB9LAorCXsgImNwdS5ub2NhY2hlIiwJT1IsICBCSUMsIChDUFVfQ09OVFJPTF9JQ19F
TkFCTEUgfAorCQkJCQkgICBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1LndyaXRl
YnVmIiwJQklDLCBPUiwgIENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIH0sCisJeyAiY3B1Lm5vd3Jp
dGVidWYiLAlPUiwgIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7IE5VTEwsCQkJ
SUdOLCBJR04sIDAgfQorfTsKKwordm9pZAorZmE1MjZfc2V0dXAoY2hhciAqYXJncykKK3sKKwlp
bnQgY3B1Y3RybCwgY3B1Y3RybG1hc2s7CisKKwljcHVjdHJsID0gQ1BVX0NPTlRST0xfTU1VX0VO
QUJMRSB8IENQVV9DT05UUk9MXzMyQlBfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MXzMyQkRfRU5B
QkxFIHwgQ1BVX0NPTlRST0xfU1lTVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfSUNfRU5BQkxF
IHwgQ1BVX0NPTlRST0xfRENfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfTEFCVF9FTkFCTEU7CisJY3B1Y3RybG1hc2sgPSBDUFVfQ09OVFJPTF9NTVVf
RU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfMzJCRF9F
TkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9JQ19FTkFC
TEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUg
fCBDUFVfQ09OVFJPTF9ST01fRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0JFTkRfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfQUZMVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfTEFCVF9FTkFCTEUgfCBD
UFVfQ09OVFJPTF9CUFJEX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9DUENMSyB8IENQVV9DT05U
Uk9MX1ZFQ1JFTE9DOworCisjaWZuZGVmIEFSTTMyX0RJU0FCTEVfQUxJR05NRU5UX0ZBVUxUUwor
CWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQUZMVF9FTkFCTEU7CisjZW5kaWYKKworCWNwdWN0cmwg
PSBwYXJzZV9jcHVfb3B0aW9ucyhhcmdzLCBmYTUyNl9vcHRpb25zLCBjcHVjdHJsKTsKKworI2lm
ZGVmIF9fQVJNRUJfXworCWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQkVORF9FTkFCTEU7CisjZW5k
aWYKKworCWlmICh2ZWN0b3JfcGFnZSA9PSBBUk1fVkVDVE9SU19ISUdIKQorCQljcHVjdHJsIHw9
IENQVV9DT05UUk9MX1ZFQ1JFTE9DOworCisJLyogQ2xlYXIgb3V0IHRoZSBjYWNoZSAqLworCWNw
dV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyICov
CisJY3RybCA9IGNwdWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9
CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBz
dHJ1Y3QgY3B1X29wdGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJ
QklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUp
IH0sCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt
L2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQorKysgYXJtL2FybS9jcHVmdW5j
X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLyoJJE5ldEJTRDog
Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQq
LworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBN
YXR0IFRob21hcyA8bWF0dEAzYW0tc29mdHdhcmUuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD
T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB
VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUJQ0FDSEVMSU5FX1NJWkUJ
MTYKKworRU5UUlkoZmE1MjZfc2V0dHRiKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwg
YzcsIGMxNCwgMAkvKiBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIx
LCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUs
IDYJLyogaW52YWxpZGF0ZSBCVEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkvKiBk
cmFpbiB3cml0ZSBhbmQgZmlsbCBidWZmZXIgKi8KKworCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAs
IDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1cGRhdGVkIHRoZSBUVEIg
d2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkvKiBp
bnZhbGlkYXRlIEkrRCBUTEIgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVt
cHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIwLCByMAorCW1vdglwYywgbHIKKworLyoKKyAq
IFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNoSURfU0UpCisJbWNyCXAx
NSwgMCwgcjAsIGM4LCBjNywgMQkvKiBmbHVzaCBVdGxiIHNpbmdsZSBlbnRyeSAqLworCW1vdglw
YywgbHIKKworLyoKKyAqIFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNo
SV9TRSkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCS8qIGZsdXNoIEl0bGIgc2luZ2xlIGVu
dHJ5ICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jcHVfc2xlZXApCisJbW92CXIwLCAj
MAorLyoJbm9wCisJbm9wKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CS8qIFdhaXQgZm9y
IGludGVycnVwdCovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1
ZikKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2gg
Zmx1c2ggKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5U
UlkoZmE1MjZfaWRjYWNoZV93Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIw
LCBjNywgYzE0LCAwCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwg
cjAsIGM3LCBjNSwgMAkvKiBpbnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj
MTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUy
Nl9pY2FjaGVfc3luY19hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUs
IDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hl
X3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyog
Y2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkv
KiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0
aW9ucworICovCitFTlRSWShmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0
MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIw
LCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMo
Q0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBj
bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVf
U0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworCW1jcglwMTUs
IDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIK
KworRU5UUlkoZmE1MjZfZGNhY2hlX3diX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJscwkx
ZgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAwCS8qIGNsZWFuIGVu
dGlyZSBEJCAqLworCWIJM2YKKworMToJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRSAtIDEp
CisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwor
MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJ
cjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJ
YmhpCTJiCisKKzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1
ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlh
bmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwly
MCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2
LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hF
TElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92
CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4
NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwg
cjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwg
IyhDQUNIRUxJTkVfU0laRSAtIDEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8q
IGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkIGVudHJ5ICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj
NSwgMQkvKiBpbnZhbGlkYXRlIEkkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9T
SVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisyOgltY3IJcDE1
LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxy
CisKK0VOVFJZKGZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJo
cwlfQ19MQUJFTChmYTUyNl9pY2FjaGVfc3luY19hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hF
TElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5F
X1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBl
bnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRy
eSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVM
SU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJh
aW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5j
aHRndF9FKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFs
aWRhdGUgQlRCIGNhY2hlICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3
aXRjaCkKKwkvKgorCSAqIENGX0NBQ0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVk
IHByaW9yIHRvIHRoaXMuCisJICogVGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25s
eSBrZXJuZWwgZGF0YSBhbmQgdGhlCisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWlu
IG9ubHkga2VybmVsIGNvZGUsIGFuZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJl
ZCBieSBhbGwgcHJvY2Vzc2VzLgorCSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkv
KiBXcml0ZSB0aGUgVFRCICovCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBt
dXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBj
NywgMAkvKiBmbHVzaCB0aGUgSStEIHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxp
bmUgaXMgZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgor
CkluZGV4OiBhcm0vaW5jbHVkZS9jcHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUv
Y3B1Y29uZi5oCShyZXZpc2lvbiAyMDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAy
MDApICsJCQlcCiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJ
XAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBA
QAogICovCiAjaWYgKGRlZmluZWQoQ1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8
fCBkZWZpbmVkKENQVV9BUk05KSB8fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZp
bmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQo
Q1BVX0lYUDEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVk
KENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQ
VV9GQTUyNikpCiAjZGVmaW5lCUFSTV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hf
NAkwCkBAIC0xMjUsNyArMTI2LDcgQEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZp
bmVkKENQVV9BUk03KSB8fCBkZWZpbmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVk
KENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJ
XAotICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBk
ZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZB
NTI2KSkKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1V
X0dFTkVSSUMJCTAKSW5kZXg6IGFybS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vaW5jbHVkZS9jcHVmdW5jLmgJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2Nw
dWZ1bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9j
bG9ja19jb25maWcJKHVfaW50LCB1X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2
Cit2b2lkCWZhNTI2X3NldHVwCQkoY2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9p
bnQgdHRiKTsKK3ZvaWQJZmE1MjZfY29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9j
cHVfc2xlZXAJCShpbnQpOwordm9pZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lk
CWZhNTI2X3RsYl9mbHVzaElEX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNo
YnVmCSh2b2lkKTsKK3ZvaWQJZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lk
CWZhNTI2X2ljYWNoZV9zeW5jX2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3Jh
bmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hl
X3diaW52X2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZz
ZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJ
KHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3di
X3JhbmdlCSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lk
Y2FjaGVfd2JpbnZfYWxsKHZvaWQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZt
X29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVf
U0ExMTAKIHZvaWQJc2ExMTBfc2V0dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250
ZXh0X3N3aXRjaAkodm9pZCk7CkBAIC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9B
Uk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAg
ZGVmaW5lZChDUFVfU0ExMTApIHx8IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVf
U0ExMTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVf
WFNDQUxFXzgwMzIxKSB8fAkgICAgIFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBk
ZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8
fAkgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NB
TEVfODEzNDIpCiAgIApJbmRleDogYXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92
YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmCV9BUk1fRUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJf
SAorCitleHRlcm4gYnVzX3NwYWNlX3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29m
dGMgeworCWRldmljZV90IGRldjsKKwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNl
X2hhbmRsZV90IGVjX3NoOworCWJ1c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3Nw
YWNlX2hhbmRsZV90IGVjX3N5c3RlbV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlz
dHJ1Y3Qgcm1hbiBlY19tZW1fcm1hbjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1
Y3QgcmVzb3VyY2VfbGlzdCByZXNvdXJjZXM7Cit9OworCit2b2lkCXBvd2VyX29uX25ldHdvcmtf
aW50ZXJmYWNlCSh2b2lkKTsKK3Vuc2lnbmVkIGludAlnZXRfdGNsawkodm9pZCk7CisKKworI2Vu
ZGlmCkluZGV4OiBhcm0vZWNvbmEvZmlsZXMuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25h
L2ZpbGVzLmVjb25hCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACisjICRGcmVlQlNEICQKK2FybS9hcm0vY3B1ZnVuY19h
c21fZmE1MjYuUwlzdGFuZGFyZAorYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkJc3RhbmRhcmQK
K2FybS9lY29uYS9lY29uYS5jCQkJc3RhbmRhcmQKK2FybS9lY29uYS90aW1lci5jCQkJc3RhbmRh
cmQKK2FybS9lY29uYS91YXJ0X2J1c19lYy5jCQlvcHRpb25hbAl1YXJ0Cithcm0vZWNvbmEvdWFy
dF9jcHVfZWMuYwkJb3B0aW9uYWwJdWFydAorZGV2L3VhcnQvdWFydF9kZXZfbnM4MjUwLmMJb3B0
aW9uYWwJdWFydAorYXJtL2FybS9pcnFfZGlzcGF0Y2guUwkJc3RhbmRhcmQKK2FybS9hcm0vYnVz
X3NwYWNlX2dlbmVyaWMuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9laGNpX2VidXMuYwlzdGFuZGFy
ZAllaGNpCithcm0vZWNvbmEvb2hjaV9lYy5jCXN0YW5kYXJkCW9oY2kKK2FybS9lY29uYS9pZl9l
Y2UuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJCW9wdGlvbmFsCWNmaQpJ
bmRleDogYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEv
ZWNvbmFfbWFjaGRlcC5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAu
YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAy
MDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMp
IDE5OTQtMTk5OCBNYXJrIEJyaW5pY29tYmUuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgQnJpbmku
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgd3JpdHRlbiBmb3IgQnJpbmkgYnkgTWFyayBCcmluaWNvbWJlCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig
dXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj
a25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSBCcmluaS4KKyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwor
ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQlJJTkkgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisg
KiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEJSSU5J
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICov
CisKKyNpbmNsdWRlICJvcHRfbXNnYnVmLmgiCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2RlZmluZQlfQVJNMzJfQlVTX0RNQV9QUklWQVRFCisj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8
c3lzL3N5c3Byb3RvLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbHZhci5oPgorI2luY2x1ZGUgPHN5
cy9pbWdhY3QuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2t0ci5o
PgorI2luY2x1ZGUgPHN5cy9saW5rZXIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1
ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMv
cGNwdS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgor
I2luY2x1ZGUgPHN5cy9jb25zLmg+CisjaW5jbHVkZSA8c3lzL2Jpby5oPgorI2luY2x1ZGUgPHN5
cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvYnVmLmg+CisjaW5jbHVkZSA8c3lzL2V4ZWMuaD4KKyNp
bmNsdWRlIDxzeXMva2RiLmg+CisjaW5jbHVkZSA8c3lzL21zZ2J1Zi5oPgorI2luY2x1ZGUgPG1h
Y2hpbmUvcmVnLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4KKworI2luY2x1ZGUgPHZtL3Zt
Lmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2lu
Y2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUg
PHZtL3ZtX21hcC5oPgorI2luY2x1ZGUgPHZtL3Zub2RlX3BhZ2VyLmg+CisjaW5jbHVkZSA8bWFj
aGluZS9wbWFwLmg+CisjaW5jbHVkZSA8bWFjaGluZS92bXBhcmFtLmg+CisjaW5jbHVkZSA8bWFj
aGluZS9wY2IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3VuZGVmaW5lZC5oPgorI2luY2x1ZGUgPG1h
Y2hpbmUvbWFjaGRlcC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWV0YWRhdGEuaD4KKyNpbmNsdWRl
IDxtYWNoaW5lL2FybXJlZy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8
c3lzL3JlYm9vdC5oPgorI2luY2x1ZGUgImVjb25hX3JlZy5oIgorCisvKiBQYWdlIHRhYmxlIGZv
ciBtYXBwaW5nIHByb2MwIHplcm8gcGFnZSAqLworI2RlZmluZQlLRVJORUxfUFRfU1lTCQkwCisj
ZGVmaW5lCUtFUk5FTF9QVF9LRVJOCQkxCisjZGVmaW5lCUtFUk5FTF9QVF9LRVJOX05VTQkyMgor
LyogTDIgdGFibGUgZm9yIG1hcHBpbmcgYWZ0ZXIga2VybmVsICovCisjZGVmaW5lCUtFUk5FTF9Q
VF9BRktFUk5FTAlLRVJORUxfUFRfS0VSTiArIEtFUk5FTF9QVF9LRVJOX05VTQorI2RlZmluZQlL
RVJORUxfUFRfQUZLRVJORUxfTlVNCTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlz
YWJsZSBieSBQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5l
CU5VTV9LRVJORUxfUFRTCShLRVJORUxfUFRfQUZLRVJORUwgKyBLRVJORUxfUFRfQUZLRVJORUxf
TlVNKQorCisvKiBEZWZpbmUgdmFyaW91cyBzdGFjayBzaXplcyBpbiBwYWdlcyAqLworI2RlZmlu
ZQlJUlFfU1RBQ0tfU0laRQkxCisjZGVmaW5lCUFCVF9TVEFDS19TSVpFCTEKKyNkZWZpbmUJVU5E
X1NUQUNLX1NJWkUJMQorCitleHRlcm4gdV9pbnQgZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7
CitleHRlcm4gdV9pbnQgcHJlZmV0Y2hfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVf
aW50IHVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3M7CisKK3N0cnVjdCBwdl9hZGRyIGtlcm5lbF9w
dF90YWJsZVtOVU1fS0VSTkVMX1BUU107CisKK2V4dGVybiB2b2lkICpfZW5kOworCitleHRlcm4g
aW50ICplbmQ7CisKK3N0cnVjdCBwY3B1IF9fcGNwdTsKK3N0cnVjdCBwY3B1ICpwY3B1cCA9ICZf
X3BjcHU7CisKKy8qIFBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc29tZSBnbG9i
YWwgcGFnZXMgKi8KKwordm1fcGFkZHJfdCBwaHlzX2F2YWlsWzEwXTsKK3ZtX3BhZGRyX3QgZHVt
cF9hdmFpbFs0XTsKK3ZtX29mZnNldF90IHBoeXNpY2FsX3BhZ2VzOworCitzdHJ1Y3QgcHZfYWRk
ciBzeXN0ZW1wYWdlOworc3RydWN0IHB2X2FkZHIgbXNnYnVmcHY7CitzdHJ1Y3QgcHZfYWRkciBp
cnFzdGFjazsKK3N0cnVjdCBwdl9hZGRyIHVuZHN0YWNrOworc3RydWN0IHB2X2FkZHIgYWJ0c3Rh
Y2s7CitzdHJ1Y3QgcHZfYWRkciBrZXJuZWxzdGFjazsKKworc3RhdGljIHZvaWQgKmJvb3RfYXJn
MTsKK3N0YXRpYyB2b2lkICpib290X2FyZzI7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhcGZyYW1lIHBy
b2MwX3RmOworCisvKiBTdGF0aWMgZGV2aWNlIG1hcHBpbmdzLiAqLworc3RhdGljIGNvbnN0IHN0
cnVjdCBwbWFwX2Rldm1hcCBlY29uYV9kZXZtYXBbXSA9IHsKKwl7CisJCS8qCisJCSAqIFRoaXMg
bWFwcyBERFIgU0RSQU0KKwkJICovCisJCUVDT05BX1NEUkFNX0JBU0UsIC8qdmlydHVhbCovCisJ
CUVDT05BX1NEUkFNX0JBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9TRFJBTV9TSVpFLCAvKnNp
emUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwK
KwkvKgorCSAqIE1hcCB0aGUgb24tYm9hcmQgZGV2aWNlcyBWQSA9PSBQQSBzbyB0aGF0IHdlIGNh
biBhY2Nlc3MgdGhlbQorCSAqIHdpdGggdGhlIE1NVSBvbiBvciBvZmYuCisJICovCisJeworCQkv
KgorCQkgKiBUaGlzIG1hcHMgdGhlIGludGVycnVwdCBjb250cm9sbGVyLCB0aGUgVUFSVAorCQkg
KiBhbmQgdGhlIHRpbWVyLgorCQkgKi8KKwkJRUNPTkFfSU9fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJ
RUNPTkFfSU9fQkFTRSwgLypwaHlzaWNhbCovCisJCUVDT05BX0lPX1NJWkUsIC8qc2l6ZSovCisJ
CVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJ
LyoKKwkJICogT0hDSSArIEVIQ0kKKwkJICovCisJCUVDT05BX09IQ0lfVkJBU0UsIC8qdmlydHVh
bCovCisJCUVDT05BX09IQ0lfUEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9VU0JfU0laRSwg
LypzaXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAor
CX0sCisJeworCQkvKgorCQkgKiBDRkkKKwkJICovCisJCUVDT05BX0NGSV9WQkFTRSwgLyp2aXJ0
dWFsKi8KKwkJRUNPTkFfQ0ZJX1BCQVNFLCAvKnBoeXNpY2FsKi8KKwkJRUNPTkFfQ0ZJX1NJWkUs
CisJCVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsK
KwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwl9Cit9OworCisKK3ZvaWQgKgoraW5pdGFy
bSh2b2lkICphcmcsIHZvaWQgKmFyZzIpCit7CisJc3RydWN0IHB2X2FkZHIgIGtlcm5lbF9sMXB0
OworCXZvbGF0aWxlIHVpbnQzMl90ICogZGRyID0gKHVpbnQzMl90ICopMHg0MDAwMDAwQzsKKwlp
bnQgbG9vcCwgaTsKKwl1X2ludCBsMXBhZ2V0YWJsZTsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47
CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl1aW50
MzJfdCBtZW1zaXplOworCWludCBtZW1faW5mbzsKKworCisJYm9vdF9hcmcxID0gYXJnOworCWJv
b3RfYXJnMiA9IGFyZzI7CisJYm9vdGhvd3RvID0gUkJfVkVSQk9TRTsKKworCXNldF9jcHVmdW5j
cygpOworCWxhc3RhZGRyID0gZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0KHBj
cHVwLCAwLCBzaXplb2Yoc3RydWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0aHJl
YWQwKTsKKworCisJZnJlZW1lbXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9N
QVNLOworCS8qIERlZmluZSBhIG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9uICov
CisjZGVmaW5lCXZhbGxvY19wYWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJYWxs
b2NfcGFnZXMoKHZhcikucHZfdmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9ICh2
YXIpLnB2X3ZhICsgKEtFUk5QSFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJYWxs
b2NfcGFnZXModmFyLCBucCkJCQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVtZW1w
b3MgKz0gKG5wICogUEFHRV9TSVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwgKChu
cCkgKiBQQUdFX1NJWkUpKTsKKworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9TSVpF
KSAmIChMMV9UQUJMRV9TSVpFIC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9TSVpF
OworCXZhbGxvY19wYWdlcyhrZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0laRSk7
CisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJaWYg
KCEobG9vcCAlIChQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFsbG9j
X3BhZ2VzKGtlcm5lbF9wdF90YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8gUEFH
RV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9IGZy
ZWVtZW1wb3MgLQorCQkJICAgIChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVfUkVB
TCkpICoKKwkJCSAgICBMMl9UQUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVbbG9v
cF0ucHZfcGEgPQorCQkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5WSVJU
QUREUiArCisJCQkgICAgS0VSTlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisJLyoKKwkgKiBB
bGxvY2F0ZSBhIHBhZ2UgZm9yIHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAK
KwkgKiBUaGlzIHBhZ2Ugd2lsbCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBj
YW4gYmUKKwkgKiBzaGFyZWQgYnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMo
c3lzdGVtcGFnZSwgMSk7CisKKwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLwor
CXZhbGxvY19wYWdlcyhpcnFzdGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhh
YnRzdGFjaywgQUJUX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NU
QUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2
YWxsb2NfcGFnZXMobXNnYnVmcHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpF
KTsKKworCS8qCisJICogTm93IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0
YWJsZQorCSAqIFdlIHN0YXJ0IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhl
IEwxLgorCSAqIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRl
ciBvbiBpZiBuZWNlc3NhcnkKKwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3Zh
OworCisJLyogTWFwIHRoZSBMMiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8K
KwlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtl
cm5lbF9wdF90YWJsZVtLRVJORUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9Q
VF9LRVJOX05VTTsgaSsrKQorCQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0Ug
KyBpICogTDFfU19TSVpFLAorCQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiAr
IGldKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAor
CSAgICgoKHVpbnQzMl90KWxhc3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFH
RV9TSVpFIC0gMSksCisJICAgIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUp
OworCWFmdGVya2VybiA9IHJvdW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFf
U19TSVpFIC0gMSkpOworCWZvciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBp
KyspIHsKKwkJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9T
X1NJWkUsCisJCSAgICAma2VybmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsK
Kwl9CisKKwkvKiBNYXAgdGhlIHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFn
ZXRhYmxlLCBBUk1fVkVDVE9SU19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9U
X1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBw
YWdlcyAqLworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJx
c3RhY2sucHZfcGEsCisJICAgIElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JF
QUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJs
ZSwgYWJ0c3RhY2sucHZfdmEsIGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAq
IFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1h
cF9tYXBfY2h1bmsobDFwYWdldGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwK
KwkgICAgVU5EX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dS
SVRFLCBQVEVfQ0FDSEUpOworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFj
ay5wdl92YSwga2VybmVsc3RhY2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0la
RSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9j
aHVuayhsMXBhZ2V0YWJsZSwga2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAor
CSAgICBMMV9UQUJMRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VU
QUJMRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2di
dWZwdi5wdl9wYSwKKwkgICAgTVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRF
LCBQVEVfQ0FDSEUpOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyAr
K2xvb3ApIHsKKwkJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVts
b29wXS5wdl92YSwKKwkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVf
U0laRSwKKwkJICAgIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsK
Kwl9CisKKwlwbWFwX2Rldm1hcF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25hX2Rldm1hcCk7
CisJY3B1X2RvbWFpbnMoKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSkg
fCBET01BSU5fQ0xJRU5UKTsKKwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCWNwdV90bGJf
Zmx1c2hJRCgpOworCWNwdV9kb21haW5zKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tF
Uk5FTCoyKSk7CisJY25pbml0KCk7CisJbWVtX2luZm8gPSAoKCpkZHIpID4+IDQpICYgMHgzOwor
CW1lbXNpemUgPSAoODw8bWVtX2luZm8pKjEwMjQqMTAyNDsKKwlwaHlzbWVtID0gbWVtc2l6ZSAv
IFBBR0VfU0laRTsKKworCS8qCisJICogUGFnZXMgd2VyZSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBz
ZWNvbmRhcnkgYm9vdHN0cmFwIGZvciB0aGUKKwkgKiBzdGFja3MgZm9yIGRpZmZlcmVudCBDUFUg
bW9kZXMuCisJICogV2UgbXVzdCBub3cgc2V0IHRoZSByMTMgcmVnaXN0ZXJzIGluIHRoZSBkaWZm
ZXJlbnQgQ1BVIG1vZGVzIHRvCisJICogcG9pbnQgdG8gdGhlc2Ugc3RhY2tzLgorCSAqIFNpbmNl
IHRoZSBBUk0gc3RhY2tzIHVzZSBTVE1GRCBldGMuIHdlIG11c3Qgc2V0IHIxMyB0byB0aGUgdG9w
IGVuZAorCSAqIG9mIHRoZSBzdGFjayBtZW1vcnkuCisJICovCisJY3B1X2NvbnRyb2woQ1BVX0NP
TlRST0xfTU1VX0VOQUJMRSwgQ1BVX0NPTlRST0xfTU1VX0VOQUJMRSk7CisKKwlzZXRfc3RhY2tw
dHIoUFNSX0lSUTMyX01PREUsCisJICAgIGlycXN0YWNrLnB2X3ZhICsgSVJRX1NUQUNLX1NJWkUg
KiBQQUdFX1NJWkUpOworCXNldF9zdGFja3B0cihQU1JfQUJUMzJfTU9ERSwKKwkgICAgYWJ0c3Rh
Y2sucHZfdmEgKyBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSk7CisJc2V0X3N0YWNrcHRyKFBT
Ul9VTkQzMl9NT0RFLAorCSAgICB1bmRzdGFjay5wdl92YSArIFVORF9TVEFDS19TSVpFICogUEFH
RV9TSVpFKTsKKworCS8qCisJICogV2UgbXVzdCBub3cgY2xlYW4gdGhlIGNhY2hlIGFnYWluLi4u
LgorCSAqIENsZWFuaW5nIG1heSBiZSBkb25lIGJ5IHJlYWRpbmcgbmV3IGRhdGEgdG8gZGlzcGxh
Y2UgYW55CisJICogZGlydHkgZGF0YSBpbiB0aGUgY2FjaGUuIFRoaXMgd2lsbCBoYXZlIGhhcHBl
bmVkIGluIHNldHR0YigpCisJICogYnV0IHNpbmNlIHdlIGFyZSBib290IHN0cmFwcGluZyB0aGUg
YWRkcmVzc2VzIHVzZWQgZm9yIHRoZSByZWFkCisJICogbWF5IGhhdmUganVzdCBiZWVuIHJlbWFw
cGVkIGFuZCB0aHVzIHRoZSBjYWNoZSBjb3VsZCBiZSBvdXQKKwkgKiBvZiBzeW5jLiBBIHJlLWNs
ZWFuIGFmdGVyIHRoZSBzd2l0Y2ggd2lsbCBjdXJlIHRoaXMuCisJICogQWZ0ZXIgYm9vdGluZyB0
aGVyZSBhcmUgbm8gZ3Jvc3MgcmVsb2NhdGlvbnMgb2YgdGhlIGtlcm5lbCB0aHVzCisJICogdGhp
cyBwcm9ibGVtIHdpbGwgbm90IG9jY3VyIGFmdGVyIGluaXRhcm0oKS4KKwkgKi8KKwljcHVfaWRj
YWNoZV93Ymludl9hbGwoKTsKKworCS8qIFNldCBzdGFjayBmb3IgZXhjZXB0aW9uIGhhbmRsZXJz
ICovCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5k
bGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9h
Ym9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZp
bmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1
cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5w
dl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tz
dGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5w
Y2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBj
X2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisJYXJtX3ZlY3Rvcl9pbml0KEFSTV9WRUNUT1JT
X0hJR0gsIEFSTV9WRUNfQUxMKTsKKworCXBtYXBfY3VybWF4a3ZhZGRyID0gYWZ0ZXJrZXJuICsg
TDFfU19TSVpFICogKEtFUk5FTF9QVF9LRVJOX05VTSAtIDEpOworCisJLyoKKwkgKiBBUk1fVVNF
X1NNQUxMX0FMTE9DIHVzZXMgZHVtcF9hdmFpbCwgc28gaXQgbXVzdCBiZSBmaWxsZWQgYmVmb3Jl
CisJICogY2FsbGluZyBwbWFwX2Jvb3RzdHJhcC4KKwkgKi8KKwlkdW1wX2F2YWlsWzBdID0gUEhZ
U0FERFI7CisJZHVtcF9hdmFpbFsxXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlkdW1wX2F2YWls
WzJdID0gMDsKKwlkdW1wX2F2YWlsWzNdID0gMDsKKworCXBtYXBfYm9vdHN0cmFwKGZyZWVtZW1w
b3MsCisJICAgIEtFUk5WSVJUQUREUiArIDMgKiBtZW1zaXplLAorCSAgICAma2VybmVsX2wxcHQp
OworCisJbXNnYnVmcCA9ICh2b2lkKiltc2didWZwdi5wdl92YTsKKwltc2didWZpbml0KG1zZ2J1
ZnAsIE1TR0JVRl9TSVpFKTsKKworCW11dGV4X2luaXQoKTsKKworCWkgPSAwOworI2lmIFBIWVNB
RERSICE9IEtFUk5QSFlTQUREUgorCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSOworCXBoeXNf
YXZhaWxbaSsrXSA9IEtFUk5QSFlTQUREUjsKKyNlbmRpZgorCXBoeXNfYXZhaWxbaSsrXSA9IHZp
cnR1YWxfYXZhaWwgLSBLRVJOVklSVEFERFIgKyBLRVJOUEhZU0FERFI7CisKKwlwaHlzX2F2YWls
W2krK10gPSBQSFlTQUREUiArIG1lbXNpemU7CisJcGh5c19hdmFpbFtpKytdID0gMDsKKwlwaHlz
X2F2YWlsW2krK10gPSAwOworCS8qIERvIGJhc2ljIHR1bmluZywgaHogZXRjICovCisJaW5pdF9w
YXJhbTEoKTsKKwlpbml0X3BhcmFtMihwaHlzbWVtKTsKKwlrZGJfaW5pdCgpOworCisJcmV0dXJu
ICgodm9pZCAqKShrZXJuZWxzdGFjay5wdl92YSArIFVTUEFDRV9TVkNfU1RBQ0tfVE9QIC0KKwkg
ICAgc2l6ZW9mKHN0cnVjdCBwY2IpKSk7Cit9CkluZGV4OiBhcm0vZWNvbmEvaWZfZWNlLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYXJtL2Vjb25hL2lmX2VjZS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25h
L2lmX2VjZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NDggQEAKKy8qLQorICogQ29weXJp
Z2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6
IHNyYy9zeXMvYXJtL2Vjb25hL2lmX2VjZS5jJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg
PHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxs
b2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNp
bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUg
PHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxu
ZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJw
Lmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+Cisj
aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisK
KyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQv
aW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9i
cGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkv
bWlpdmFyLmg+CisKKyNpbmNsdWRlIDxhcm0vZWNvbmEvaWZfZWNlcmVnLmg+CisjaW5jbHVkZSA8
YXJtL2Vjb25hL2lmX2VjZXZhci5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4K
KworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisK
Ky8qICJkZXZpY2UgbWlpYnVzIiByZXF1aXJlZC4gIFNlZSBHRU5FUklDIGlmIHlvdSBnZXQgZXJy
b3JzIGhlcmUuICovCisjaW5jbHVkZSAibWlpYnVzX2lmLmgiCisKK3N0YXRpYyB1aW50OF90Cit2
bGFuMF9tYWNbRVRIRVJfQUREUl9MRU5dID0gezB4MDAsIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQs
IDB4MTl9OworCisvKgorICogQm9vdCBsb2FkZXIgZXhwZWN0cyB0aGUgaGFyZHdhcmUgc3RhdGUg
dG8gYmUgdGhlIHNhbWUgd2hlbiB3ZQorICogcmVzdGFydCB0aGUgZGV2aWNlICh3YXJtIGJvb3Qp
LCBzbyB3ZSBuZWVkIHRvIHNhdmUgdGhlIGluaXRpYWwKKyAqIGNvbmZpZyB2YWx1ZXMuCisgKi8K
K2ludCBpbml0aWFsX3N3aXRjaF9jb25maWc7CitpbnQgaW5pdGlhbF9jcHVfY29uZmlnOworaW50
IGluaXRpYWxfcG9ydDBfY29uZmlnOworaW50IGluaXRpYWxfcG9ydDFfY29uZmlnOworCitzdGF0
aWMgaW5saW5lIHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1c19zaXpl
X3Qgb2ZmKQoreworCisJcmV0dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkCit3cml0ZV80KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBidXNf
c2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQoreworCisJYnVzX3dyaXRlXzQoc2MtPm1lbV9yZXMs
IG9mZiwgdmFsKTsKK30KKworI2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYykt
PnNjX210eCkKKyNkZWZpbmUJRUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+c2Nf
bXR4KQorI2RlZmluZQlFQ0VfTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210
eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xPQ0ss
IE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj
X210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z
Y19tdHhfdHgpCisjZGVmaW5lCUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj
LT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNFIFRY
IExvY2siLCBNVFhfREVGKQorCisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9sb2Nr
KCYoX3NjKS0+c2NfbXR4X2NsZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9zYykJ
bXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5VUExP
Q0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNlX2dl
dF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RFRikK
KworI2RlZmluZQlFQ0VfUlhMT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4KQor
I2RlZmluZQlFQ0VfUlhVTkxPQ0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9yeCkK
KyNkZWZpbmUJRUNFX1JYTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eF9y
eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIsIE1U
WF9ERUYpCisKKyNkZWZpbmUJRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2Mt
PnNjX210eCk7CisjZGVmaW5lCUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZf
c2MtPnNjX210eF90eCk7CisjZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0
cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9ZKF9z
YykJXAorCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlFQ0Vf
QVNTRVJUX0xPQ0tFRChfc2MpCW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7Cisj
ZGVmaW5lCUVDRV9BU1NFUlRfVU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210eCwg
TUFfTk9UT1dORUQpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8qIGlm
bmV0IGVudHJ5IHBvaW50cyAqLworCitzdGF0aWMgdm9pZAllY2Vpbml0X2xvY2tlZCh2b2lkICop
Oworc3RhdGljIHZvaWQJZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3RhdGlj
IHZvaWQJZWNlaW5pdCh2b2lkICopOworc3RhdGljIHZvaWQJZWNlc3RhcnQoc3RydWN0IGlmbmV0
ICopOworc3RhdGljIHZvaWQJZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGljIGlu
dAllY2Vpb2N0bChzdHJ1Y3QgaWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8qIGJ1
cyBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIGludAllY2VfcHJvYmUoZGV2aWNlX3QgZGV2KTsK
K3N0YXRpYyBpbnQJZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAllY2VfZGV0
YWNoKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZAllY2VfaW50cih2b2lkICopOworc3RhdGlj
IHZvaWQJZWNlX2ludHJfcWYodm9pZCAqKTsKK3N0YXRpYyB2b2lkCWVjZV9pbnRyX3N0YXR1cyh2
b2lkICp4c2MpOworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQJZWNlX2FjdGl2
YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZAllY2VfZGVhY3RpdmF0ZShkZXZpY2VfdCBk
ZXYpOworc3RhdGljIGludAllY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOworc3Rh
dGljIHZvaWQJZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRp
YXJlcSAqaWZtcik7CitzdGF0aWMgaW50CWVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNj
LCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkCWVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29m
dGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2NwdV9wb3J0KHN0
cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2xhbl9wb3J0KHN0cnVj
dCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQJc2V0X3B2aWQoc3Ry
dWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0YXRp
YyB2b2lkCXNldF92bGFuX3ZpZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3Rh
dGljIHZvaWQJc2V0X3ZsYW5fbWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7
CitzdGF0aWMgdm9pZAlzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFu
KTsKK3N0YXRpYyBpbnQJaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0
aWMgdm9pZAllY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBjb3Vu
dCk7CisKK3N0YXRpYyB2b2lkCWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMg
KnNjKTsKK3N0YXRpYyB2b2lkCWVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMg
KnNjKTsKKworc3RhdGljIHZvaWQJZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5n
IF9fdW51c2VkKTsKK3N0YXRpYyB2b2lkCWVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRp
bmcgX191bnVzZWQpOworc3RhdGljIHZvaWQJZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGlu
dCBwZW5kaW5nIF9fdW51c2VkKTsKKworc3RhdGljIGludAllY2VfYWxsb2NhdGVfZG1hKHN0cnVj
dCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZvaWQJZWNlX2ludHJfdHgodm9pZCAqeHNjKTsK
Kworc3RhdGljIHZvaWQJY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGlu
dCBpbmNsdWRlX3RoaXNfbWFjKTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0
cnVjdCBlY2Vfc29mdGMgKmVjLAorCSAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCSAgICBpbnQg
Zmlyc3QpOworCisvKlBIWSByZWxhdGVkIGZ1bmN0aW9ucyovCitzdGF0aWMgaW5saW5lIGludAor
cGh5X3JlYWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcpCit7CisJaW50
IHZhbDsKKwlpbnQgaWk7CisJaW50IHN0YXR1czsKKworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9M
LCBQSFlfUldfT0spOworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9MLAorCSAgICAoUEhZX0FERFJF
U1MocGh5KXxQSFlfUkVBRF9DT01NQU5EIHwKKwkgICAgUEhZX1JFR0lTVEVSKHJlZykpKTsKKwor
CWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykgeworCQlzdGF0dXMgPSByZWFkXzQoc2Ms
IFBIWV9DT05UUk9MKTsKKwkJaWYgKHN0YXR1cyAmIFBIWV9SV19PSykgeworCQkJLyogQ2xlYXIg
dGhlIHJ3X29rIHN0YXR1cywgYW5kIGNsZWFyIG90aGVyCisJCQkgKiBiaXRzIHZhbHVlLiAqLwor
CQkJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VU
X0RBVEEoc3RhdHVzKTsKKwkJCXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywg
aW50IHBoeSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJaW50IGlpOworCisJd3JpdGVfNChzYywg
UEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsCisJICAg
IFBIWV9BRERSRVNTKHBoeSkgfCBQSFlfUkVHSVNURVIocmVnKSB8CisJICAgIFBIWV9XUklURV9D
T01NQU5EIHwgUEhZX0RBVEEoZGF0YSkpOworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkr
KykgeworCQlpZiAocmVhZF80KHNjLCBQSFlfQ09OVFJPTCkgJiBQSFlfUldfT0spIHsKKwkJCS8q
IENsZWFyIHRoZSByd19vayBzdGF0dXMsIGFuZCBjbGVhciBvdGhlcgorCQkJICogYml0cyB2YWx1
ZS4KKwkJCSAqLworCQkJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQly
ZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BoeV90eXBlKHN0cnVjdCBlY2Vf
c29mdGMgKnNjKQoreworCXVpbnQxNl90IHBoeTBfaWQgPSAwLCBwaHkxX2lkID0gMDsKKworCS8q
CisJICogVXNlIFNNSSAoTURDL01ESU8pIHRvIHJlYWQgTGluayBQYXJ0bmVyJ3MgUEhZIElkZW50
aWZpZXIKKwkgKiBSZWdpc3RlciAxLgorCSAqLworCXBoeTBfaWQgPSBwaHlfcmVhZChzYywgMCwg
MHgyKTsKKwlwaHkxX2lkID0gcGh5X3JlYWQoc2MsIDEsIDB4Mik7CisKKwlpZiAoKHBoeTBfaWQg
PT0gMHhGRkZGKSAmJiAocGh5MV9pZCA9PSAweDAwMEYpKQorCQlyZXR1cm4gKEFTSVhfR0lHQV9Q
SFkpOworCWVsc2UgaWYgKChwaHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHgwMjQz
KSkKKwkJcmV0dXJuIChUV09fU0lOR0xFX1BIWSk7CisJZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhG
RkZGKSAmJiAocGh5MV9pZCA9PSAweDAwMDcpKQorCQlyZXR1cm4gKFZTQzg2MDFfR0lHQV9QSFkp
OworCWVsc2UgaWYgKChwaHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHhGRkZGKSkK
KwkJcmV0dXJuIChJQ19QTFVTX1BIWSk7CisKKwlyZXR1cm4gKE5PVF9GT1VORF9QSFkpOworfQor
CitzdGF0aWMgaW50CitlY2VfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNlX3NldF9k
ZXNjKGRldiwgIkVjb25hIEV0aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQor
CisKK3N0YXRpYyBpbnQKK2VjZV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY2Vf
c29mdGMgKnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzY3RsX2N0
eF9saXN0ICpzY3R4OworCXN0cnVjdCBzeXNjdGxfb2lkICpzb2lkOworCXVfY2hhciBlYWRkcltF
VEhFUl9BRERSX0xFTl07CisJaW50IGVycjsKKwlpbnQgaSwgcmlkOworCXVpbnQzMl90IHJuZDsK
KworCWVyciA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXNjLT5kZXYg
PSBkZXY7CisKKwlyaWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu
eShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2Mt
Pm1lbV9yZXMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlwb3dlcl9vbl9uZXR3b3JrX2ludGVy
ZmFjZSgpOworCisJcmlkID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBidXNfYWxsb2NfcmVz
b3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYg
KHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7CisJ
LypUU1RDOiBGbS1Td2l0Y2gtVHgtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3R4ID0gYnVzX2Fs
bG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUp
OworCWlmIChzYy0+aXJxX3Jlc190eCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDI7
CisJLypGU1JDOiBGbS1Td2l0Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1
c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNU
SVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcmVjID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlk
ID0gNDsKKwkvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9
IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZf
QUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwll
cnIgPSBlY2VfYWN0aXZhdGUoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFN5
c2N0bHMgKi8KKwlzY3R4ID0gZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7CisJc29pZCA9IGRl
dmljZV9nZXRfc3lzY3RsX3RyZWUoZGV2KTsKKworCUVDRV9MT0NLX0lOSVQoc2MpOworCisJY2Fs
bG91dF9pbml0X210eCgmc2MtPnRpY2tfY2gsICZzYy0+c2NfbXR4LCAwKTsKKworCWlmICgoZXJy
ID0gZWNlX2dldF9tYWMoc2MsIGVhZGRyKSkgIT0gMCkgeworCQkvKiBObyBNQUMgYWRkcmVzcyBj
b25maWd1cmVkLiBHZW5lcmF0ZSB0aGUgcmFuZG9tIG9uZS4gKi8KKwkJaWYgKGJvb3R2ZXJib3Nl
KQorCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVy
bmV0IGFkZHJlc3MuXG4iKTsKKwkJcm5kID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9h
ZS5jL2lmX2F0ZS5jKi8KKwkJLyoKKwkJICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkg
YXNzaWduZWQgYWRkcmVzcy4gJ2InCisJCSAqIGlzIDB4NjIsIHdoaWNoIGhhcyB0aGUgbG9jYWxs
eSBhc3NpZ25lZCBiaXQgc2V0LCBhbmQKKwkJICogdGhlIGJyb2FkY2FzdC9tdWx0aWNhc3QgYml0
IGNsZWFyLgorCQkgKi8KKwkJZWFkZHJbMF0gPSAnYic7CisJCWVhZGRyWzFdID0gJ3MnOworCQll
YWRkclsyXSA9ICdkJzsKKwkJZWFkZHJbM10gPSAocm5kID4+IDE2KSAmIDB4ZmY7CisJCWVhZGRy
WzRdID0gKHJuZCA+PiA4KSAmIDB4ZmY7CisJCWVhZGRyWzVdID0gcm5kICYgMHhmZjsKKworCQlm
b3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCWVhZGRyW2ldID0gdmxhbjBf
bWFjW2ldOworCX0KKwllY2Vfc2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBp
Zl9hbGxvYyhJRlRfRVRIRVIpOworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMs
IGVjZV9pZm1lZGlhX3VwZCwKKwkJICAgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2aWNlX3By
aW50ZihkZXYsICJDYW5ub3QgZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87CisJCWdv
dG8gb3V0OworCX0KKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZwLCBkZXZp
Y2VfZ2V0X25hbWUoZGV2KSwgZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZfZmxhZ3Mg
PSBJRkZfQlJPQURDQVNUIHwgSUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJaWZwLT5p
Zl9jYXBhYmlsaXRpZXMgPSBJRkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0ID0gKENT
VU1fSVAgfCBDU1VNX1RDUCB8IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+
aWZfY2FwYWJpbGl0aWVzOworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lv
Y3RsID0gZWNlaW9jdGw7CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5p
ZnFfZHJ2X21heGxlbiA9IEVDRV9NQVhfVFhfQlVGRkVSUyAtIDE7CisJSUZRX1NFVF9NQVhMRU4o
JmlmcC0+aWZfc25kLCBFQ0VfTUFYX1RYX0JVRkZFUlMgLSAxKTsKKwlJRlFfU0VUX1JFQURZKCZp
ZnAtPmlmX3NuZCk7CisKKwkvKiBDcmVhdGUgbG9jYWwgdGFza3EuICovCisKKwlUQVNLX0lOSVQo
JnNjLT5zY19pbnRyX3Rhc2ssIDAsIGVjZV9pbnRyX3Rhc2ssIHNjKTsKKwlUQVNLX0lOSVQoJnNj
LT5zY190eF90YXNrLCAxLCBlY2VfdHhfdGFzaywgaWZwKTsKKwlUQVNLX0lOSVQoJnNjLT5zY19j
bGVhbnVwX3Rhc2ssIDIsIGVjZV9jbGVhbnVwX3Rhc2ssIHNjKTsKKwlzYy0+c2NfdHEgPSB0YXNr
cXVldWVfY3JlYXRlX2Zhc3QoImVjZV90YXNrcSIsIE1fV0FJVE9LLAorCSAgICB0YXNrcXVldWVf
dGhyZWFkX2VucXVldWUsCisJICAgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEgPT0gTlVM
TCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRhc2txdWV1
ZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOwor
CisJLyoKKwkgKiBBY3RpdmF0ZSBpbnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2lu
dHIoZGV2LCBzYy0+aXJxX3Jlc19yZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkg
ICAgTlVMTCwgZWNlX2ludHIsIHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0
aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsK
Kwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywKKwkg
ICAgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLCBlY2VfaW50cl9zdGF0
dXMsIHNjLCAmc2MtPmludHJoYW5kX3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRl
dGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJ
ZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8
IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNjLT5pbnRyaGFuZF9x
Zik7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RF
U1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYs
IHNjLT5pcnFfcmVzX3R4LCBJTlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEws
IGVjZV9pbnRyX3R4LCBzYywgJnNjLT5pbnRyaGFuZF90eCk7CisKKwlpZiAoZXJyKSB7CisJCWV0
aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsK
Kwl9CisKKwlFQ0VfVFhMT0NLX0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNF
X0NMRUFOVVBMT0NLX0lOSVQoc2MpOworCisJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNl
cy4gKi8KKwl3cml0ZV80KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisKKwkvKiBF
bmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsIHJlYWRfNChzYywg
UE9SVF8wX0NPTkZJRykgJiB+KFBPUlRfRElTQUJMRSkpOworCisJdGFza3F1ZXVlX3N0YXJ0X3Ro
cmVhZHMoJnNjLT5zY190cSwgMSwgUElfTkVULCAiJXMgdGFza3EiLAorCSAgICBkZXZpY2VfZ2V0
X25hbWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0
ZShkZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIp
OworfQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg
ZWNlX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IHNjLT5pZnA7CisKKwllY2VzdG9wKHNjKTsKKwlpZiAoaWZwICE9IE5VTEwpIHsKKwkJZXRo
ZXJfaWZkZXRhY2goaWZwKTsKKwkJaWZfZnJlZShpZnApOworCX0KKwllY2VfZGVhY3RpdmF0ZShk
ZXYpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICph
cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1
X2ludDMyX3QgKnBhZGRyOworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Yg
c2VnbWVudHMsIHNob3VsZCBiZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3Mt
PmRzX2FkZHI7Cit9CisKK3N0YXRpYyBpbnQKK2VjZV9hbGxvY19kZXNjX2RtYV90eChzdHJ1Y3Qg
ZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwkvKiBBbGxvY2F0ZSBh
IGJ1c2RtYSB0YWcgYW5kIERNQSBzYWZlIG1lbW9yeSBmb3IgVFgvUlggZGVzY3JpcHRvcnMuICov
CisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsCS8qIHBhcmVu
dCAqLworCSAgICAxNiwgMCwgLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BB
Q0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJ
LyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJn
ICovCisJICAgIHNpemVvZihldGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIC8qIG1h
eCBzaXplICovCisJICAgIDEsIC8qbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhfZGVz
Y190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsCisJICAgIDAsIC8qIGZsYWdzICovCisJICAgIE5VTEws
IE5VTEwsCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19kYXRh
X3R4KTsgLyogZG1hdCAqLworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBUWCByaW5nLiAqLwor
CWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfdHgsCisJICAgICh2b2lk
KiopJihzYy0+ZGVzY190eCksCisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwK
KwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3JpbmdfdHgpKTsKKwor
CWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBE
TUEgbWVtb3J5XG4iKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgp
OworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkv
KiBMb2FkIFJpbmcgRE1BLiAqLworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5kbWF0YWdf
ZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCSAgICBzYy0+ZGVzY190eCwKKwkgICAgc2l6
ZW9mKGV0aF90eF9kZXNjX3QpKkVDRV9NQVhfVFhfQlVGRkVSUywKKwkgICAgZWNlX2dldGFkZHIs
CisJICAgICYoc2MtPnJpbmdfcGFkZHJfdHgpLCBCVVNfRE1BX05PV0FJVCk7CisKKwlpZiAoZXJy
b3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJjYW4ndCBsb2FkIGRlc2NyaXB0b3JcbiIpOwor
CQlidXNfZG1hbWVtX2ZyZWUoc2MtPmRtYXRhZ19kYXRhX3R4LCBzYy0+ZGVzY190eCwKKwkJICAg
IHNjLT5kbWFtYXBfcmluZ190eCk7CisJCXNjLT5kZXNjX3R4ID0gTlVMTDsKKwkJYnVzX2RtYV90
YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAw
OworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9y
IG1idWZzLiBBbGlnbm1lbnQgaXMgMiBieXRlcyAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3Jl
YXRlKHNjLT5zY19wYXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMSwgMCwJCQkvKiBhbGln
bm1lbnQsIGJvdW5kYXJ5ICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkvKiBsb3dh
ZGRyICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVM
TCwgTlVMTCwJCS8qIGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgIE1DTEJZVEVTKk1BWF9G
UkFHTUVOVCwJLyogbWF4c2l6ZSAqLworCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMg
Ki8KKwkgICAgTUNMQllURVMsIDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkgICAgTlVMTCwg
TlVMTCwJCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19yaW5n
X3R4KTsJLyogZG1hdCAqLworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAi
ZmFpbGVkIHRvIGNyZWF0ZSBidXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5Y
SU8pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgewor
CQkvKiBDcmVhdGUgZG1hIG1hcCBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLworCQllcnJvciA9IGJ1
c19kbWFtYXBfY3JlYXRlKHNjLT5kbWF0YWdfcmluZ190eCwgMCwKKwkJICAgICYoc2MtPnR4X2Rl
c2NbaV0uZG1hbWFwKSk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJm
YWlsZWQgdG8gY3JlYXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJ
fQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ZyZWVfZGVzY19kbWFf
dHgoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg
RUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsK
KwkJCW1fZnJlZW0oc2MtPnR4X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZm
PSAwOworCQl9CisJfQorCisJaWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFw
X3VubG9hZChzYy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChz
Yy0+ZGVzY190eCkgeworCQkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJ
CSAgICBzYy0+ZGVzY190eCwgc2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFw
X3JpbmdfdHggPSAwOworCX0KKworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2Rt
YV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHgg
PSAwOworCX0KKworCWlmIChzYy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxF
Q0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0
YWdfcmluZ190eCwKKwkJCSAgICBzYy0+dHhfZGVzY1tpXS5kbWFtYXApOworCQkJc2MtPnR4X2Rl
c2NbaV0uZG1hbWFwID0gMDsKKwkJfQorCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdf
cmluZ190eCk7CisJCXNjLT5kbWF0YWdfcmluZ190eCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50
CitlY2VfYWxsb2NfZGVzY19kbWFfcngoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGVy
cm9yOworCWludCBpOworCisJLyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBt
ZW1vcnkgZm9yIFJYIGRlc2NyaXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRl
KHNjLT5zY19wYXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJLyogYWxpZ25t
ZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRk
ciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEws
IE5VTEwsCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgLyogbWF4c2l6ZSwgbnNl
Z21lbnRzICovCisJICAgIHNpemVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMs
IDEsCisJICAgIC8qIG1heHNlZ3N6LCBmbGFncyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2Nf
dCkqRUNFX01BWF9SWF9CVUZGRVJTLCAwLAorCSAgICBOVUxMLCBOVUxMLAkJLyogbG9ja2Z1bmMs
IGxvY2tmdW5jYXJnICovCisJICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisK
KwkvKiBBbGxvY2F0ZSBSWCByaW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+
ZG1hdGFnX2RhdGFfcngsCisJICAgICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJICAgIEJVU19E
TUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAg
JihzYy0+ZG1hbWFwX3JpbmdfcngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2Mt
PmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJ
Tyk7CisJfQorCisJLyogTG9hZCBkbWFtYXAuICovCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQo
c2MtPmRtYXRhZ19kYXRhX3J4LCBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIHNjLT5kZXNjX3J4
LAorCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZGRVJTLAorCSAgICBl
Y2VfZ2V0YWRkciwKKwkgICAgJihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsK
KworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3Jp
cHRvclxuIik7CisJCWJ1c19kbWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNj
X3J4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShz
Yy0+ZG1hdGFnX2RhdGFfcngpOworCQlzYy0+ZGVzY19yeCA9IE5VTEw7CisJCXJldHVybiAoRU5Y
SU8pOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuICovCisJZXJy
b3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsLyogcGFyZW50ICovCisJ
ICAgIDE2LCAwLAkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01B
WEFERFJfMzJCSVQsCS8qIGxvd2FkZHIgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBo
aWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxMLAkJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICov
CisJICAgIE1DTEJZVEVTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZ
VEVTLCAwLAkJLyogbWF4c2Vnc3osIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2Nr
ZnVuYywgbG9ja2Z1bmNhcmcgKi8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQg
Ki8KKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVh
dGUgYnVzZG1hIHRhZyBmb3IgbWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlm
b3IgKGkgPSAwOyBpPEVDRV9NQVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWVycm9yID0gYnVzX2Rt
YW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLAorCQkgICAgJnNjLT5yeF9kZXNjW2ld
LmRtYW1hcCk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQg
dG8gY3JlYXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0K
KworCWVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2Mt
PnJ4X3NwYXJlbWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWls
ZWQgdG8gY3JlYXRlIHNwYXJlIG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJl
dHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3Qg
ZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JY
X0JVRkZFUlM7IGkrKykgeworCQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVl
bShzYy0+cnhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0K
Kwl9CisKKwlpZiAoc2MtPmRtYXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNj
LT5kbWF0YWdfZGF0YV9yeCwgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVl
KHNjLT5kbWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3Jpbmdf
cngpOworCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5k
bWF0YWdfZGF0YV9yeCA9IDA7CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNj
X3J4ID0gMDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7
IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+
ZG1hdGFnX3JpbmdfcngsCisJCQkgICAgc2MtPnJ4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJYnVzX2Rt
YW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVz
X2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3Jpbmdf
cnggPSAwOworCX0KK30KKworc3RhdGljIGludAorZWNlX25ld19yeGJ1ZihzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYywgc3RydWN0IHJ4X2Rlc2NfaW5mbyogZGVzY2luZm8pCit7CisJc3RydWN0IG1idWYg
Km5ld19tYnVmOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ1sxXTsKKwlidXNfZG1hbWFwX3QgbWFw
OworCWludCBlcnJvcjsKKwlpbnQgbnNlZ3M7CisJYnVzX2RtYV90YWdfdCB0YWc7CisKKwl0YWcg
PSBzYy0+ZG1hdGFnX3Jpbmdfcng7CisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwg
TVRfREFUQSwgTV9QS1RIRFIpOworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAo
RU5PQlVGUyk7CisKKwluZXdfbWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0g
TUNMQllURVM7CisKKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHRhZywgc2MtPnJ4
X3NwYXJlbWFwLCBuZXdfbWJ1ZiwKKwkgICAgc2VnLCAmbnNlZ3MsIEJVU19ETUFfTk9XQUlUKTsK
KworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJUb28gbWFueSBzZWdtZW50cyByZXR1cm5lZCEiKSk7
CisKKwlpZiAobnNlZ3MgIT0gMSB8fCBlcnJvcikgeworCQltX2ZyZWUobmV3X21idWYpOworCQly
ZXR1cm4gKEVOT0JVRlMpOworCX0KKworCWlmIChkZXNjaW5mby0+YnVmZiAhPSBOVUxMKSB7CisJ
CWJ1c19kbWFtYXBfc3luYyh0YWcsIGRlc2NpbmZvLT5kbWFtYXAsIEJVU19ETUFTWU5DX1BPU1RS
RUFEKTsKKwkJYnVzX2RtYW1hcF91bmxvYWQodGFnLCBkZXNjaW5mby0+ZG1hbWFwKTsKKwl9CisK
KwltYXAgPSBkZXNjaW5mby0+ZG1hbWFwOworCWRlc2NpbmZvLT5kbWFtYXAgPSBzYy0+cnhfc3Bh
cmVtYXA7CisJc2MtPnJ4X3NwYXJlbWFwID0gbWFwOworCisJYnVzX2RtYW1hcF9zeW5jKHRhZywg
ZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUFJFUkVBRCk7CisKKwlkZXNjaW5mby0+YnVm
ZiA9IG5ld19tYnVmOworCWRlc2NpbmZvLT5kZXNjLT5kYXRhX3B0ciA9IHNlZy0+ZHNfYWRkcjsK
KwlkZXNjaW5mby0+ZGVzYy0+bGVuZ3RoID0gc2VnLT5kc19sZW4gLSAyOworCisJcmV0dXJuICgw
KTsKK30KKworc3RhdGljIGludAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpz
YykKK3sKKwlldGhfdHhfZGVzY190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4Owor
CWludCBpOworCWludCBlcnJvcjsKKworCS8qIENyZWF0ZSBwYXJlbnQgdGFnIGZvciB0eCBhbmQg
cnggKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkgICAgYnVzX2dldF9kbWFfdGFn
KHNjLT5kZXYpLC8qIHBhcmVudCAqLworCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFy
eSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BB
Q0VfTUFYQUREUiwJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBm
aWx0ZXJhcmcgKi8KKwkgICAgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIDAsLyogbWF4c2l6ZSwg
bnNlZ21lbnRzICovCisJICAgIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULAkvKiBtYXhzZWdzaXpl
ICovCisJICAgIDAsCQkJLyogZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogbG9ja2Z1bmMs
IGxvY2thcmcgKi8KKwkgICAgJnNjLT5zY19wYXJlbnRfdGFnKTsKKworCWVjZV9hbGxvY19kZXNj
X2RtYV90eChzYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJTOyBpKysp
IHsKKwkJZGVzY3R4ID0gKGV0aF90eF9kZXNjX3QgKikoJnNjLT5kZXNjX3R4W2ldKTsKKwkJbWVt
c2V0KGRlc2N0eCwgMCwgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKTsKKwkJZGVzY3R4LT5sZW5ndGgg
PSBNQVhfUEFDS0VUX0xFTjsKKwkJZGVzY3R4LT5jb3duID0gMTsKKwkJaWYgKGkgPT0gRUNFX01B
WF9UWF9CVUZGRVJTIC0gMSkKKwkJCWRlc2N0eC0+ZW9yID0gMTsKKwl9CisKKwllY2VfYWxsb2Nf
ZGVzY19kbWFfcngoc2MpOworCisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfUlhfQlVGRkVSUzsg
aSsrKSB7CisJCWRlc2NyeCA9ICYoc2MtPmRlc2NfcnhbaV0pOworCQltZW1zZXQoZGVzY3J4LCAw
LCBzaXplb2YoZXRoX3J4X2Rlc2NfdCkpOworCQlzYy0+cnhfZGVzY1tpXS5kZXNjID0gZGVzY3J4
OworCQlzYy0+cnhfZGVzY1tpXS5idWZmID0gMDsKKwkJZWNlX25ld19yeGJ1ZihzYywgJihzYy0+
cnhfZGVzY1tpXSkpOworCisJCWlmIChpID09IEVDRV9NQVhfUlhfQlVGRkVSUyAtIDEpCisJCQlk
ZXNjcngtPmVvciA9IDE7CisJfQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7
CisJc2MtPmxhc3RfcnggPSAwOworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgw
KTsKK30KKworc3RhdGljIGludAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1
Y3QgZWNlX3NvZnRjICpzYzsKKwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsK
KwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlm
cCA9IHNjLT5pZnA7CisKKwlpbml0aWFsX3N3aXRjaF9jb25maWcgPSByZWFkXzQoc2MsIFNXSVRD
SF9DT05GSUcpOworCWluaXRpYWxfY3B1X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09O
RklHKTsKKwlpbml0aWFsX3BvcnQwX2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05G
SUcpOworCWluaXRpYWxfcG9ydDFfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJ
Ryk7CisKKwkvKiBEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChz
YywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxF
KTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwor
CS8qIERpc2FibGUgUG9ydCAxICovCisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNf
UE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCXdy
aXRlXzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJZXJyID0g
ZWNlX2FsbG9jYXRlX2RtYShzYyk7CisJaWYgKGVycikgeworCQlpZl9wcmludGYoc2MtPmlmcCwg
ImZhaWxlZCBhbGxvY2F0aW5nIGRtYVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdyaXRlXzQo
c2MsIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCXdyaXRlXzQo
c2MsIFRTX0RFU0NSSVBUT1JfQkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90eCk7CisKKwl3cml0
ZV80KHNjLCBGU19ERVNDUklQVE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRyX3J4KTsKKwl3cml0
ZV80KHNjLCBGU19ERVNDUklQVE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisJ
d3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwly
ZXR1cm4gKEVOWElPKTsKKworfQorCitzdGF0aWMgdm9pZAorZWNlX2RlYWN0aXZhdGUoZGV2aWNl
X3QgZGV2KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisKKwlpZiAoc2MtPmludHJoYW5kKQorCQlidXNfdGVhcmRvd25faW50cihkZXYs
IHNjLT5pcnFfcmVzX3JlYywgc2MtPmludHJoYW5kKTsKKworCXNjLT5pbnRyaGFuZCA9IDA7CisK
KwlpZiAoc2MtPmludHJoYW5kX3FmKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFf
cmVzX3FmLCBzYy0+aW50cmhhbmRfcWYpOworCisJc2MtPmludHJoYW5kX3FmID0gMDsKKworCWJ1
c19nZW5lcmljX2RldGFjaChzYy0+ZGV2KTsKKwlpZiAoc2MtPm1paWJ1cykKKwkJZGV2aWNlX2Rl
bGV0ZV9jaGlsZChzYy0+ZGV2LCBzYy0+bWlpYnVzKTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1
c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsCisJCSAgICBybWFuX2dldF9y
aWQoc2MtPm1lbV9yZXMpLCBzYy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCisJaWYg
KHNjLT5pcnFfcmVzX3JlYykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lS
USwKKwkJICAgIHJtYW5fZ2V0X3JpZChzYy0+aXJxX3Jlc19yZWMpLCBzYy0+aXJxX3Jlc19yZWMp
OworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ
U19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3FmKSwgc2MtPmlycV9y
ZXNfcWYpOworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShk
ZXYsIFNZU19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3N0YXR1cyks
IHNjLT5pcnFfcmVzX3N0YXR1cyk7CisKKwlzYy0+aXJxX3Jlc19yZWMgPSAwOworCXNjLT5pcnFf
cmVzX3FmID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSAwOworCUVDRV9UWExPQ0tfREVTVFJP
WShzYyk7CisJRUNFX1JYTE9DS19ERVNUUk9ZKHNjKTsKKworCWVjZV9mcmVlX2Rlc2NfZG1hX3R4
KHNjKTsKKwllY2VfZnJlZV9kZXNjX2RtYV9yeChzYyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisg
KiBDaGFuZ2UgbWVkaWEgYWNjb3JkaW5nIHRvIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK2Vj
ZV9pZm1lZGlhX3VwZChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpz
YyA9IGlmcC0+aWZfc29mdGM7CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJaW50IGVycm9yOwor
CisJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlFQ0VfTE9DSyhzYyk7CisJ
ZXJyb3IgPSBtaWlfbWVkaWFjaGcobWlpKTsKKwlFQ0VfVU5MT0NLKHNjKTsKKwlyZXR1cm4gKGVy
cm9yKTsKK30KKworLyoKKyAqIE5vdGlmeSB0aGUgd29ybGQgd2hpY2ggbWVkaWEgd2UncmUgdXNp
bmcuCisgKi8KK3N0YXRpYyB2b2lkCitlY2VfaWZtZWRpYV9zdHMoc3RydWN0IGlmbmV0ICppZnAs
IHN0cnVjdCBpZm1lZGlhcmVxICppZm1yKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gaWZw
LT5pZl9zb2Z0YzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKworCW1paSA9IGRldmljZV9nZXRf
c29mdGMoc2MtPm1paWJ1cyk7CisJRUNFX0xPQ0soc2MpOworCW1paV9wb2xsc3RhdChtaWkpOwor
CWlmbXItPmlmbV9hY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJaWZtci0+aWZtX3N0
YXR1cyA9IG1paS0+bWlpX21lZGlhX3N0YXR1czsKKwlFQ0VfVU5MT0NLKHNjKTsKK30KKworc3Rh
dGljIHZvaWQKK2VjZV90aWNrKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9
IHhzYzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2
aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3Rp
dmU7CisJbWlpX3RpY2sobWlpKTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0
IG9uZSBzZWNvbmQgZnJvbSBub3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gs
IGh6LCBlY2VfdGljaywgc2MpOworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfbWFjX2VudHJ5
KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisgICAgaW50
IGZpcnN0KQoreworCXVpbnQzMl90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRy
eTsKKwl1aW50MzJfdCAqZW50cnlfdmFsOworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf
Q09OVFJPTF8wLCAwKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwg
MCk7CisJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChm
aXJzdCkKKwkJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4MSk7CisJ
ZWxzZQorCQl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKwor
CWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykKKwkJaWYgKHJlYWRfNChlYywgQVJMX1RB
QkxFX0FDQ0VTU19DT05UUk9MXzEpICYgKDB4MSkpCisJCQlicmVhazsKKworCWVudHJ5X3ZhbCA9
ICh1aW50MzJfdCopICgmZW50cnkpOworCWVudHJ5X3ZhbFswXSA9IHJlYWRfNChlYywgQVJMX1RB
QkxFX0FDQ0VTU19DT05UUk9MXzEpOworCWVudHJ5X3ZhbFsxXSA9IHJlYWRfNChlYywgQVJMX1RB
QkxFX0FDQ0VTU19DT05UUk9MXzIpOworCisJaWYgKG1hY19yZXN1bHQpCisJCW1lbWNweShtYWNf
cmVzdWx0LCBlbnRyeS5tYWNfYWRkciwgRVRIRVJfQUREUl9MRU4pOworCisJcmV0dXJuIChlbnRy
eS50YWJsZV9lbmQpOworfQorCitzdGF0aWMgdWludDMyX3QKK3dyaXRlX2FybF90YWJsZV9lbnRy
eShzdHJ1Y3QgZWNlX3NvZnRjICplYywKKyAgICB1aW50MzJfdCBmaWx0ZXIsCisgICAgdWludDMy
X3Qgdmxhbl9tYWMsCisgICAgdWludDMyX3Qgdmxhbl9naWQsCisgICAgdWludDMyX3QgYWdlX2Zp
ZWxkLAorICAgIHVpbnQzMl90IHBvcnRfbWFwLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hY19hZGRy
KQoreworCXVpbnQzMl90IGlpOworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0IGFybF90
YWJsZV9lbnRyeV90IGVudHJ5OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7
CisKKwllbnRyeS5maWx0ZXIgPSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFuX21hYzsK
KwllbnRyeS52bGFuX2dpZCA9IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFnZV9maWVs
ZDsKKwllbnRyeS5wb3J0X21hcCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNfYWRkciwg
bWFjX2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgm
ZW50cnkpOworCisJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOwor
CXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xLCAwKTsKKwl3cml0ZV80KGVj
LCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisKKwl3cml0ZV80KGVjLCBBUkxfVEFC
TEVfQUNDRVNTX0NPTlRST0xfMSwgZW50cnlfdmFsWzBdKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFC
TEVfQUNDRVNTX0NPTlRST0xfMiwgZW50cnlfdmFsWzFdKTsKKworCXdyaXRlXzQoZWMsIEFSTF9U
QUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCBBUkxfV1JJVEVfQ09NTUFORCk7CisKKwlmb3IgKGlpID0g
MDsgaWkgPCAweDEwMDA7IGlpKyspCisJCWlmIChyZWFkXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf
Q09OVFJPTF8xKSAmCisJCSAgICBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAoMSk7
IC8qIFdyaXRlIE9LLiAqLworCisJLyogV3JpdGUgZmFpbGVkLiAqLworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyB2b2lkCityZW1vdmVfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAor
ICAgIHVpbnQ4X3QgKm1hYykKK3sKKworCS8qIEludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2Ug
dGhpcyBlbnRyeS4gKi8KKwl3cml0ZV9hcmxfdGFibGVfZW50cnkoc2MsIDAsIDEsIFZMQU4wX0dS
T1VQX0lELAorCSAgICBJTlZBTElEX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30K
Kworc3RhdGljIHZvaWQKK2FkZF9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisgICAg
dWludDhfdCAqbWFjKQoreworCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFO
MF9HUk9VUF9JRCwKKwkgICAgTkVXX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30K
KworLyoqCisgKiBUaGUgYmVoYXZpb3Igb2YgQVJMIHRhYmxlIHJlYWRpbmcgYW5kIGRlbGV0aW9u
IGlzIG5vdCB3ZWxsIGRlZmluZWQKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUbyBiZSBzYWZl
LCBhbGwgbWFjIGFkZHJlc3NlcyBhcmUgcHV0IHRvIGEKKyAqIGxpc3QsIHRoZW4gZGVsZXRlZC4K
KyAqCisgKi8KK3N0YXRpYyB2b2lkCitjbGVhcl9tYWNfZW50cmllcyhzdHJ1Y3QgZWNlX3NvZnRj
ICplYywgaW50IGluY2x1ZGVfdGhpc19tYWMpCit7CisJaW50IHRhYmxlX2VuZDsKKwlzdHJ1Y3Qg
bWFjX2xpc3QgKiB0ZW1wOworCXN0cnVjdCBtYWNfbGlzdCAqIG1hY19saXN0X2hlYWRlcjsKKwlz
dHJ1Y3QgbWFjX2xpc3QgKiBjdXJyZW50OworCWNoYXIgbWFjW0VUSEVSX0FERFJfTEVOXTsKKwor
CWN1cnJlbnQgPSAwOworCW1hY19saXN0X2hlYWRlciA9IDA7CisKKwl0YWJsZV9lbmQgPSByZWFk
X21hY19lbnRyeShlYywgbWFjLCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlpZiAoIWlu
Y2x1ZGVfdGhpc19tYWMgJiYKKwkJICAgIG1lbWNtcChtYWMsIHZsYW4wX21hYywgRVRIRVJfQURE
Ul9MRU4pID09IDApIHsKKwkJCS8qIFJlYWQgbmV4dCBlbnRyeS4gKi8KKwkJCXRhYmxlX2VuZCA9
IHJlYWRfbWFjX2VudHJ5KGVjLCBtYWMsIDApOworCQkJY29udGludWU7CisJCX0KKworCQl0ZW1w
ID0gKHN0cnVjdCBtYWNfbGlzdCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFjX2xpc3QpLAorCQkg
ICAgTV9ERVZCVUYsCisJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCW1lbWNweSh0ZW1wLT5t
YWNfYWRkciwgbWFjLCBFVEhFUl9BRERSX0xFTik7CisJCXRlbXAtPm5leHQgPSAwOworCQlpZiAo
bWFjX2xpc3RfaGVhZGVyKSB7CisJCQljdXJyZW50LT5uZXh0ID0gdGVtcDsKKwkJCWN1cnJlbnQg
PSB0ZW1wOworCQl9IGVsc2UgeworCQkJbWFjX2xpc3RfaGVhZGVyID0gdGVtcDsKKwkJCWN1cnJl
bnQgPSB0ZW1wOworCQl9CisJCS8qIFJlYWQgbmV4dCBFbnRyeSAqLworCQl0YWJsZV9lbmQgPSBy
ZWFkX21hY19lbnRyeShlYywgbWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVh
ZGVyOworCisJd2hpbGUgKGN1cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVu
dC0+bWFjX2FkZHIpOworCQl0ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5l
eHQ7CisJCWZyZWUodGVtcCwgTV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmln
dXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWlu
dDMyX3Qgc3dfY29uZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICog
Q29uZmlndXJlIHN3aXRjaAorCSAqLworCXN3X2NvbmZpZyA9IHJlYWRfNChzYywgU1dJVENIX0NP
TkZJRyk7CisJLyogRW5hYmxlIGZhc3QgYWdpbmcuICovCisJc3dfY29uZmlnIHw9IEZBU1RfQUdJ
Tkc7CisJLyogRW5hYmxlIElWTCBsZWFybmluZy4gKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJO
SU5HOworCS8qIERpc2FibGUgaGFyZHdhcmUgTkFULiAqLworCXN3X2NvbmZpZyAmPSB+KEhBUkRX
QVJFX05BVCk7CisKKwlzd19jb25maWcgfD0gU0tJUF9MMl9MT09LVVBfUE9SVF8wIHwgU0tJUF9M
Ml9MT09LVVBfUE9SVF8xfCBOSUNfTU9ERTsKKworCXdyaXRlXzQoc2MsIFNXSVRDSF9DT05GSUcs
IHN3X2NvbmZpZyk7CisKKwlzd19jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOwor
CisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisKKwlp
ZiAoIShtYWNfcG9ydF9jb25maWcgJiAweDEpIHx8IChtYWNfcG9ydF9jb25maWcgJiAweDIpKQor
CQlpZl9wcmludGYoc2MtPmlmcCwgIkxpbmsgRG93blxuIik7CisJZWxzZQorCQl3cml0ZV80KHNj
LCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgdm9pZAorc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwg
aW50IHBvcnQxLCBpbnQgY3B1KQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSByZWFkXzQoc2Ms
IFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCAwKSk7CisJd3JpdGVfNChzYywgVkxBTl9QT1JU
X1BWSUQsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQw
KSAmIDB4MDcpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJl
YWRfNChzYywgVkxBTl9QT1JUX1BWSUQpICYgKH4oMHg3IDw8IDQpKTsKKwl3cml0ZV80KHNjLCBW
TEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSB8
ICgoKHBvcnQxKSAmIDB4MDcpIDw8IDQpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2
YWwpOworCisJdmFsID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgJiAofigweDcgPDwgOCkp
OworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywg
VkxBTl9QT1JUX1BWSUQpIHwgKCgoY3B1KSAmIDB4MDcpIDw8IDgpOworCXdyaXRlXzQoc2MsIFZM
QU5fUE9SVF9QVklELCB2YWwpOworCit9CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8K
K3N0YXRpYyB2b2lkCitzZXRfdmxhbl92aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFu
KQoreworCWNvbnN0IHVpbnQzMl90IHJlZ3NbXSA9IHsKKwkgICAgVkxBTl9WSURfMF8xLAorCSAg
ICBWTEFOX1ZJRF8wXzEsCisJICAgIFZMQU5fVklEXzJfMywKKwkgICAgVkxBTl9WSURfMl8zLAor
CSAgICBWTEFOX1ZJRF80XzUsCisJICAgIFZMQU5fVklEXzRfNSwKKwkgICAgVkxBTl9WSURfNl83
LAorCSAgICBWTEFOX1ZJRF82XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9IHsKKwkgICAg
VkxBTjBfVklELAorCSAgICBWTEFOMV9WSUQsCisJICAgIFZMQU4yX1ZJRCwKKwkgICAgVkxBTjNf
VklELAorCSAgICBWTEFONF9WSUQsCisJICAgIFZMQU41X1ZJRCwKKwkgICAgVkxBTjZfVklELAor
CSAgICBWTEFON19WSUQKKwl9OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlp
bnQgdmlkOworCisJcmVnID0gcmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYg
KHZsYW4gJiAxKSB7CisJCXZhbCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVn
LCB2YWwgJiAofigweEZGRiA8PCAwKSkpOworCQl2YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdy
aXRlXzQoc2MsIHJlZywgdmFsfCgodmlkICYgMHhGRkYpIDw8IDApKTsKKwl9IGVsc2UgeworCQl2
YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFsICYgKH4oMHhGRkYg
PDwgMTIpKSk7CisJCXZhbCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2
YWx8KCh2aWQgJiAweEZGRikgPDwgMTIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxh
bl9tZW1iZXIoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNo
YXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOworCWludCBncm91cDsKKwljb25zdCBpbnQgZ3JvdXBz
W10gPSB7CisJICAgIFZMQU4wX0dST1VQLAorCSAgICBWTEFOMV9HUk9VUCwKKwkgICAgVkxBTjJf
R1JPVVAsCisJICAgIFZMQU4zX0dST1VQLAorCSAgICBWTEFONF9HUk9VUCwKKwkgICAgVkxBTjVf
R1JPVVAsCisJICAgIFZMQU42X0dST1VQLAorCSAgICBWTEFON19HUk9VUAorCX07CisKKwlncm91
cCA9IGdyb3Vwc1t2bGFuXTsKKworCXNoaWZ0ID0gdmxhbiozOworCXZhbCA9IHJlYWRfNChzYywg
VkxBTl9NRU1CRVJfUE9SVF9NQVApICYgKH4oMHg3IDw8IHNoaWZ0KSk7CisJd3JpdGVfNChzYywg
VkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX01FTUJF
Ul9QT1JUX01BUCk7CisJd3JpdGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgo
Z3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWco
c3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7
CisJdWludDMyX3QgdmFsOworCisJaW50IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2
YWwgPSByZWFkXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOwor
CXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywg
VkxBTl9UQUdfUE9SVF9NQVApOworCXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwg
fCAoKHRhZyAmIDB4NykgPDwgc2hpZnQpKTsKK30KKworc3RhdGljIGludAorY29uZmlndXJlX2Nw
dV9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZp
ZzsKKwlpbnQgaTsKKworCWNwdV9wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09O
RklHKTsKKwkvKiBTQSBsZWFybmluZyBEaXNhYmxlICovCisJY3B1X3BvcnRfY29uZmlnIHw9IChT
QV9MRUFSTklOR19ESVNBQkxFKTsKKwkvKiBzZXQgZGF0YSBvZmZzZXQgKyAyICovCisJY3B1X3Bv
cnRfY29uZmlnICY9IH4oMSA8PCAzMSk7CisKKwl3cml0ZV80KHNjLCBDUFVfUE9SVF9DT05GSUcs
IGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwg
MSwgVkxBTjBfR1JPVVBfSUQsCisJICAgIFNUQVRJQ19FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAg
IHZsYW4wX21hYykpCisJCXJldHVybiAoMSk7CisKKwlzZXRfcHZpZChzYywgUE9SVDBfUFZJRCwg
UE9SVDFfUFZJRCwgQ1BVX1BPUlRfUFZJRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7
CisJCXNldF92bGFuX3ZpZChzYywgaSk7CisJCXNldF92bGFuX21lbWJlcihzYywgaSk7CisJCXNl
dF92bGFuX3RhZyhzYywgaSk7CisJfQorCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IHN0YXR1
cyBzb3VyY2VzICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOwor
CisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwl3cml0ZV80KHNjLCBJ
TlRFUlJVUFRfU1RBVFVTLCAweDAwMDAxRkZGKTsKKworCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05U
Uk9MLCAwKTsKKwl3cml0ZV80KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIGludAoraGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK
KwlpbnQgc3RhdHVzID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5
cGUgPSBnZXRfcGh5X3R5cGUoc2MpOworCS8qIEN1cnJlbnRseSBvbmx5IGljX3BsdXMgcGh5IGlz
IHN1cHBvcnRlZC4gKi8KKwlpZiAoZ3dfcGh5X3R5cGUgIT0gSUNfUExVU19QSFkpIHsKKwkJZGV2
aWNlX3ByaW50ZihzYy0+ZGV2LCAiUEhZIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAoJWQpXG4iLAor
CQkgICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmln
dXJlX2xhbl9wb3J0KHNjLCBnd19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBl
Y2Vfc29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCisJLyogSW52
YWxpZCBhZ2VfZmllbGQgbWVhbiBlcmFzZSB0aGlzIGVudHJ5LiAqLworCXdyaXRlX2FybF90YWJs
ZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJICAgIElOVkFMSURfRU5UUlksIFZM
QU4wX0dST1VQLAorCSAgICBtYWMpOworCW1lbWNweSh2bGFuMF9tYWMsIG1hYywgRVRIRVJfQURE
Ul9MRU4pOworCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9J
RCwKKwkgICAgU1RBVElDX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3Rh
dGljIHZvaWQKK2VjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRy
KQoreworCW1lbWNweSh2bGFuMF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21h
Y19hZGRyZXNzKHNjLCBlYWRkciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKgorICogVE9ETzog
dGhlIGRldmljZSBkb2Vzbid0IGhhdmUgTUFDIHN0b3JlZCwgd2Ugc2hvdWxkIHJlYWQgdGhlCisg
KiBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBGTEFTSCwgYnV0IHRoZSBmb3JtYXQgZGVwZW5kcyBv
biB0aGUKKyAqIGJvb3Rsb2FkZXIgdXNlZC4qCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9nZXRfbWFj
KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQoreworCXJldHVybiAoRU5YSU8p
OworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMg
KnNjLCBpbnQgY291bnQpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVj
dCBtYnVmICptYjsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvICpyeGRlc2M7CisJZXRoX3J4X2Rlc2Nf
dCAqZGVzYzsKKworCWludCBmc3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IGk7CisJaW50IGlk
eDsKKwlpbnQgcnhjb3VudDsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlmc3NkX2N1cnIgPSByZWFk
XzQoc2MsIEZTX0RFU0NSSVBUT1JfUE9JTlRFUik7CisKKwlmc3NkID0gKGZzc2RfY3VyciAtICh1
aW50MzJfdClzYy0+cmluZ19wYWRkcl9yeCk+PjQ7CisKKwlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2Mt
Pmxhc3RfcnhdLmRlc2M7CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIHJp
bmcuICovCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRt
YW1hcF9yaW5nX3J4LAorCSAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BP
U1RXUklURSk7CisKKwlpZiAoZnNzZCA+IHNjLT5sYXN0X3J4KQorCQlyeGNvdW50ID0gZnNzZCAt
IHNjLT5sYXN0X3J4OworCWVsc2UgaWYgKGZzc2QgPCBzYy0+bGFzdF9yeCkKKwkJcnhjb3VudCA9
IChFQ0VfTUFYX1JYX0JVRkZFUlMgLSBzYy0+bGFzdF9yeCkgKyBmc3NkOworCWVsc2UgeworCQlp
ZiAoZGVzYy0+Y293biA9PSAwKQorCQkJcmV0dXJuOworCQllbHNlCisJCQlyeGNvdW50ID0gRUNF
X01BWF9SWF9CVUZGRVJTOworCX0KKworCWZvciAoaT0gMDsgaSA8IHJ4Y291bnQ7IGkrKykgewor
CQlzdGF0dXMgPSBkZXNjLT5jb3duOworCQlpZiAoIXN0YXR1cykKKwkJCWJyZWFrOworCisJCWlk
eCA9IHNjLT5sYXN0X3J4OworCQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSBy
eGRlc2MtPmJ1ZmY7CisKKwkJaWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhF
Ul9DUkNfTEVOIHx8CisJCSAgICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJf
Q1JDX0xFTiArCisJCSAgICBFVEhFUl9WTEFOX0VOQ0FQX0xFTikgeworCQkJaWZwLT5pZl9pZXJy
b3JzKys7CisJCQlkZXNjLT5jb3duID0gMDsKKwkJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVTIC0g
MjsKKwkJCS8qIEludmFsaWQgcGFja2V0LCBza2lwIGFuZCBwcm9jZXNzIG5leHQKKwkJCSAqIHBh
Y2tldC4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZWNlX25ld19yeGJ1Zihz
YywgcnhkZXNjKSAhPSAwKSB7CisJCQlpZnAtPmlmX2lxZHJvcHMrKzsKKwkJCWRlc2MtPmNvd24g
PSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJYnJlYWs7CisJCX0KKwor
CQkvKioKKwkJICogVGhlIGRldmljZSB3aWxsIHdyaXRlIHRvIGFkZHJyZXNzICsgMiBTbyB3ZSBu
ZWVkIHRvIGFkanVzdAorCQkgKiB0aGUgYWRkcmVzcyBhZnRlciB0aGUgcGFja2V0IGlzIHJlY2Vp
dmVkLgorCQkgKi8KKwkJbWItPm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3Ro
ZHIubGVuID0gZGVzYy0+bGVuZ3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQlt
Yi0+bV9wa3RoZHIucmN2aWYgPSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB
UF9SWENTVU0pICE9IDApIHsKKwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlm
ICggKCFkZXNjLT5sNGYpICAmJiAoZGVzYy0+cHJvdCAhPSAzKSkgeworCQkJCW1iLT5tX3BrdGhk
ci5jc3VtX2ZsYWdzIHw9IENTVU1fSVBfQ0hFQ0tFRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9m
bGFncyB8PSBDU1VNX0lQX1ZBTElEOworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweGZm
ZmY7CisJCQl9CisJCX0KKwkJRUNFX1JYVU5MT0NLKHNjKTsKKwkJKCppZnAtPmlmX2lucHV0KShp
ZnAsIG1iKTsKKwkJRUNFX1JYTE9DSyhzYyk7CisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2Mt
Pmxlbmd0aCA9IE1DTEJZVEVTIC0gMjsKKworCQlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19y
aW5nX3J4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3J4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJF
UkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3RfcnggPT0gRUNF
X01BWF9SWF9CVUZGRVJTIC0gMSkKKwkJCXNjLT5sYXN0X3J4ID0gMDsKKwkJZWxzZQorCQkJc2Mt
Pmxhc3RfcngrKzsKKworCQlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJ
fQorCisJLyogU3luYyB1cGRhdGVkIGZsYWdzLiAqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1h
dGFnX3JpbmdfcngsCisJICAgIHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNf
UFJFUkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKworCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK2VjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sK
KwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50
cl9yeF9sb2NrZWQoc2MsIC0xKTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9p
ZAorZWNlX2ludHIodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOwor
CXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3Mg
JiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJd3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0ws
IDApOworCQlyZXR1cm47CisJfQorCisJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2Mt
PnNjX2ludHJfdGFzayk7CisKKwlpZiAoIUlGUV9EUlZfSVNfRU1QVFkoJmlmcC0+aWZfc25kKSkK
KwkJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX3R4X3Rhc2spOworfQorCitz
dGF0aWMgdm9pZAorZWNlX2ludHJfc3RhdHVzKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJaW50IHN0YXQ7
CisKKwlzdGF0ID0gcmVhZF80KHNjLCBJTlRFUlJVUFRfU1RBVFVTKTsKKworCXdyaXRlXzQoc2Ms
IElOVEVSUlVQVF9TVEFUVVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElG
Rl9EUlZfUlVOTklORykgIT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSAhPSAwKQor
CQkJaWZwLT5pZl9pcWRyb3BzKys7CisJfQorfQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBf
bG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWV0aF90eF9kZXNjX3QgKmRlc2M7CisK
KwlpZiAoc2MtPnR4X2NvbnMgPT0gc2MtPnR4X3Byb2QpIHJldHVybjsKKworCS8qIFByZXBhcmUg
dG8gcmVhZCB0aGUgcmluZyAob3duZXIgYml0KS4gKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRt
YXRhZ19yaW5nX3R4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5D
X1BPU1RSRUFEIHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCXdoaWxlIChzYy0+dHhfY29u
cyAhPSBzYy0+dHhfcHJvZCkgeworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRl
c2M7CisJCWlmIChkZXNjLT5jb3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRk
ID0gJihzYy0+dHhfZGVzY1tzYy0+dHhfY29uc10pOworCQkJLyogV2UgYXJlIGZpbmlzaGVkIHdp
dGggdGhpcyBkZXNjcmlwdG9yIC4uLiAqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdf
ZGF0YV90eCwgdGQtPmRtYW1hcCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJ
LyogLi4uIGFuZCB1bmxvYWQsIHNvIHdlIGNhbiByZXVzZS4gKi8KKwkJCWJ1c19kbWFtYXBfdW5s
b2FkKHNjLT5kbWF0YWdfZGF0YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZm
KTsKKwkJCXRkLT5idWZmID0gMDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkg
JSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKwor
fQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5n
IF9fdW51c2VkKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQ
TE9DSyhzYyk7CisJZWNlX2NsZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhz
Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0
IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlm
ICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyogVGhp
cyBzaG91bGQgbm90IGhhcHBlbiwgc3RvcCBETUEuICovCisJCXdyaXRlXzQoc2MsIEZTX0RNQV9D
T05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEs
ICZzYy0+c2NfY2xlYW51cF90YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3FmKHZv
aWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IHNjLT5pZnA7CisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklO
RykgPT0gMCkgeworCQkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBzdG9wIERNQS4gKi8KKwkJ
d3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQlyZXR1cm47CisJfQorCXRhc2txdWV1
ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCXdyaXRlXzQoc2MsIEZT
X0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoKKyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBj
aGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vpbml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3Ry
dWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOwor
CXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1
X3BvcnRfY29uZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7
CisJCWNmZ19yZWcgPSByZWFkXzQoc2MsIEJJU1RfUkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2Zn
X3JlZyAmICgxPDwxNykpKQorCQkJYnJlYWs7CisJCURFTEFZKDEwMCk7CisJfQorCS8qIFNldCB0
byBkZWZhdWx0IHZhbHVlcy4gKi8KKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCAweDAwN0FB
N0ExKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgMHgwMDQyM0QwMCk7CisJd3Jp
dGVfNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIDB4MDA0MjNEODApOworCXdyaXRlXzQoc2MsIENQ
VV9QT1JUX0NPTkZJRywgMHgwMDRDMDAwMCk7CisKKwloYXJkd2FyZV9pbml0KHNjKTsKKworCW1h
Y19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCisJIC8qIEVu
YWJsZSBQb3J0IDAgKi8KKwltYWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7CisJ
d3JpdGVfNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwljcHVf
cG9ydF9jb25maWcgPSByZWFkXzQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogRW5hYmxlIENQ
VS4gKi8KKwljcHVfcG9ydF9jb25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2Ms
IENQVV9QT1JUX0NPTkZJRywgY3B1X3BvcnRfY29uZmlnKTsKKworCS8qCisJICogU2V0ICdydW5u
aW5nJyBmbGFnLCBhbmQgY2xlYXIgb3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQg
dG8gc3RhcnQgdGhlIG91dHB1dAorCSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZf
UlVOTklORzsKKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlp
ID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkv
KiBFbmFibGUgRE1BLiAqLworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNh
bGxvdXRfcmVzZXQoJnNjLT50aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGlj
IGlubGluZSBpbnQKK2VjZV9lbmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYg
Km0wKQoreworCXN0cnVjdCBpZm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFY
X0ZSQUdNRU5UXTsKKwlidXNfZG1hbWFwX3QgbWFwcDsKKwlldGhfdHhfZGVzY190ICpkZXNjID0g
MDsKKwlpbnQgY3N1bV9mbGFnczsKKwlpbnQgZGVzY19ubzsKKwlpbnQgZXJyb3I7CisJaW50IG5z
ZWdzOworCWludCBzZWc7CisKKwlpZnAgPSBzYy0+aWZwOworCisJLyogRmV0Y2ggdW51c2VkIG1h
cCAqLworCW1hcHAgPSBzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uZG1hbWFwOworCisJZXJyb3Ig
PSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyhzYy0+ZG1hdGFnX3JpbmdfdHgsIG1hcHAsCisJICAg
IG0wLCBzZWdzLCAmbnNlZ3MsCisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAh
PSAwKSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJ
CXJldHVybiAoKGVycm9yICE9IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2Mt
PmRlc2NfdHhbc2MtPmRlc2NfY3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5k
ZXNjID0gZGVzYzsKKwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nf
bm8gPSBzYy0+ZGVzY19jdXJyX3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2Vn
KyspIHsKKwkJaWYgKGRlc2MtPmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJP
UjogZGVzY3JpcHRvciBpcyBzdGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisK
KwkJZGVzYy0+bGVuZ3RoID0gc2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBz
ZWdzW3NlZ10uZHNfYWRkcjsKKworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsK
KwkJfSBlbHNlIHsKKwkJCWRlc2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnID09IG5zZWdzIC0g
MSkgeworCQkJZGVzYy0+bHMgPSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+bHMgPSAwOworCQl9
CisKKwkJY3N1bV9mbGFncyA9IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOworCisJCWRlc2MtPmZy
ID0gIDE7CisJCWRlc2MtPnBtYXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAwOworCQlkZXNjLT5p
Y28gPSAwOworCQlkZXNjLT50Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOworCQlkZXNjLT5pbnRl
cnJ1cHQgPSAxOworCisJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgeworCQkJZGVzYy0+aWNv
ID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVzYy0+dGNvID0gMTsK
KwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNvID0gMTsKKwkJfQor
CisJCWRlc2MrKzsKKwkJc2MtPmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19jdXJyX3R4ICsgMSkg
JSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4ID09IDApIHsKKwkJ
CWRlc2MgPSAoZXRoX3R4X2Rlc2NfdCAqKSYoc2MtPmRlc2NfdHhbMF0pOworCQl9CisJfQorCisJ
ZGVzYyA9IHNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjOworCisJc2MtPnR4X3Byb2QgPSAo
c2MtPnR4X3Byb2QgKyAxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qCisJICogQWZ0ZXIg
YWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdlIHNldCB0aGUgZmxhZ3MgdG8gc3RhcnQgdGhlCisJ
ICogc2VuZGluZyBwcm9jZXMuCisJICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2Vn
KyspIHsKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25v
ICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCWlmIChkZXNjX25vID09IDApCisJCQlkZXNj
ID0gKGV0aF90eF9kZXNjX3QgKikmKHNjLT5kZXNjX3R4WzBdKTsKKwl9CisKKwlidXNfZG1hbWFw
X3N5bmMoc2MtPmRtYXRhZ19kYXRhX3R4LCBtYXBwLCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJ
cmV0dXJuICgwKTsKK30KKworLyoKKyAqIGRlcXVldSBwYWNrZXRzIGFuZCB0cmFuc21pdAorICov
CitzdGF0aWMgdm9pZAorZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0
cnVjdCBlY2Vfc29mdGMgKnNjOworCXN0cnVjdCBtYnVmICptMDsKKwl1aW50MzJfdCBxdWV1ZWQg
PSAwOworCisJc2MgPSBpZnAtPmlmX3NvZnRjOworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiAo
SUZGX0RSVl9SVU5OSU5HIHwgSUZGX0RSVl9PQUNUSVZFKSkgIT0KKwkgICAgSUZGX0RSVl9SVU5O
SU5HKQorCQlyZXR1cm47CisKKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAor
CSAgICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVT
X0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCWZvciAoOzspIHsKKwkJLyogR2V0IHBhY2tldCBmcm9t
IHRoZSBxdWV1ZSAqLworCQlJRl9ERVFVRVVFKCZpZnAtPmlmX3NuZCwgbTApOworCQlpZiAobTAg
PT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoZWNlX2VuY2FwKHNjLCBtMCkpIHsKKwkJCUlGX1BS
RVBFTkQoJmlmcC0+aWZfc25kLCBtMCk7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJW
X09BQ1RJVkU7CisJCQlicmVhazsKKwkJfQorCQlxdWV1ZWQrKzsKKwkJQlBGX01UQVAoaWZwLCBt
MCk7CisJfQorCWlmIChxdWV1ZWQpIHsKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmlu
Z190eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNf
RE1BU1lOQ19QUkVXUklURSk7CisJCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3Nv
ZnRjICpzYyA9IHhzYzsKKwlFQ0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVD
RV9VTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBp
bnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3Ry
dWN0IGlmbmV0ICopYXJnOworCWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2Vz
dGFydChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+
aWZfc29mdGM7CisJRUNFX1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNF
X1RYVU5MT0NLKHNjKTsKK30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9w
IHRoZSBuaWMuICBDYW4gYmUgY2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJl
ZnVsLgorICovCitzdGF0aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK
KwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmln
OworCisJd3JpdGVfNChzYywgVFNfRE1BX0NPTlRST0wsIDApOworCXdyaXRlXzQoc2MsIEZTX0RN
QV9DT05UUk9MLCAwKTsKKworCWlmIChpZnApCisJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZG
X0RSVl9SVU5OSU5HIHwgSUZGX0RSVl9PQUNUSVZFKTsKKworCWNhbGxvdXRfc3RvcCgmc2MtPnRp
Y2tfY2gpOworCisJLypEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRf
NChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNB
QkxFKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsK
KworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSByZWFkXzQoc2MsIE1B
Q19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJ
d3JpdGVfNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKiBE
aXNhYmxlIGFsbCBpbnRlcnJ1cHQgc3RhdHVzIHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5U
RVJSVVBUX01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogQ2xlYXIgcHJldmlvdXMgaW50ZXJydXB0
IHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX1NUQVRVUywgMHgwMDAwMUZGRik7
CisKKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOwor
CXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywgaW5pdGlhbF9jcHVfY29uZmlnKTsKKwl3cml0
ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXdyaXRl
XzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVh
cl9tYWNfZW50cmllcyhzYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1
Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlp
ZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3Mg
Jj0gfklGRl9EUlZfT0FDVElWRTsKKwkvKiBFbmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2Ms
IFBPUlRfMF9DT05GSUcsCisJICAgIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+KFBPUlRf
RElTQUJMRSkpOworCXdyaXRlXzQoc2MsIElOVEVSUlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKwl3
cml0ZV80KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tf
Y2gsIGh6LCBlY2VfdGljaywgc2MpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1
Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVs
dGlhZGRyCSppZm1hOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5p
ZnA7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJ
RkZfQUxMTVVMVEkgfHwgaWZwLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0
X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25m
aWcgJj0gfihESVNBQkxFX0JST0FEQ0FTVF9QQUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0g
fihESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQpOworCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NP
TkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwkJcmV0dXJuOworCX0KKwlpZl9tYWRkcl9ybG9jayhp
ZnApOworCVRBSUxRX0ZPUkVBQ0goaWZtYSwgJmlmcC0+aWZfbXVsdGlhZGRycywgaWZtYV9saW5r
KSB7CisJCWlmIChpZm1hLT5pZm1hX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LKQorCQkJY29u
dGludWU7CisJCWFkZF9tYWNfZW50cnkoc2MsCisJCSAgICBMTEFERFIoKHN0cnVjdCBzb2NrYWRk
cl9kbCAqKWlmbWEtPmlmbWFfYWRkcikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9
CisKK3N0YXRpYyBpbnQKK2VjZWlvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBj
YWRkcl90IGRhdGEpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOwor
CXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXN0cnVjdCBpZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJl
cSAqKWRhdGE7CisJaW50IG1hc2ssIGVycm9yID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2Fz
ZSBTSU9DU0lGRkxBR1M6CisJCUVDRV9MT0NLKHNjKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYg
SUZGX1VQKSA9PSAwICYmCisJCSAgICBpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklO
RykgeworCQkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfUlVOTklORzsKKwkJCWVjZXN0
b3Aoc2MpOworCQl9IGVsc2UgeworCQkJLyogUmVpbml0aWFsaXplIGNhcmQgb24gYW55IHBhcmFt
ZXRlciBjaGFuZ2UuICovCisJCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApICYmCisJCQkg
ICAgIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCQkJZWNlX3Jlc3Rh
cnQoc2MpOworCQl9CisJCUVDRV9VTkxPQ0soc2MpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0FE
RE1VTFRJOgorCWNhc2UgU0lPQ0RFTE1VTFRJOgorCQlFQ0VfTE9DSyhzYyk7CisJCXNldF9maWx0
ZXIoc2MpOworCQlFQ0VfVU5MT0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTSUZNRURJ
QToKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlp
YnVzKTsKKwkJZXJyb3IgPSBpZm1lZGlhX2lvY3RsKGlmcCwgaWZyLCAmbWlpLT5taWlfbWVkaWEs
IGNtZCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZfY2Fw
ZW5hYmxlIF4gaWZyLT5pZnJfcmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRVKSB7
CisJCQlFQ0VfTE9DSyhzYyk7CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6CisJ
CWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJcmV0
dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNj
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQorCQlz
Yy0+bWlpYnVzID0gTlVMTDsKK30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5lcy4K
KyAqLworc3RhdGljIGludAorZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50IHBo
eSwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKiBPbmx5IG9uZSBwaHkg
aW4gdGhpcyBkZXZpY2UuICovCisJaWYgKHBoeT4wKQorCQlyZXR1cm4gKDApOworCXNjID0gZGV2
aWNlX2dldF9zb2Z0YyhkZXYpOworCXJldHVybiAocGh5X3JlYWQoc2MsIHBoeSwgcmVnKSk7Cit9
CisKK3N0YXRpYyBpbnQKK2VjZV9taWlidXNfd3JpdGVyZWcoZGV2aWNlX3QgZGV2LCBpbnQgcGh5
LCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKwlwaHlfd3JpdGUoc2MsIHBoeSwgcmVnLCBkYXRhKTsKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7
CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCWVjZV9w
cm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWVjZV9hdHRhY2gpLAorCURFVk1FVEhP
RChkZXZpY2VfZGV0YWNoLAllY2VfZGV0YWNoKSwKKworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlE
RVZNRVRIT0QoYnVzX2NoaWxkX2RldGFjaGVkLAllY2VfY2hpbGRfZGV0YWNoZWQpLAorCisJLyog
TUlJIGludGVyZmFjZSAqLworCURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJZWNlX21paWJ1c19y
ZWFkcmVnKSwKKwlERVZNRVRIT0QobWlpYnVzX3dyaXRlcmVnLAllY2VfbWlpYnVzX3dyaXRlcmVn
KSwKKworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgZWNlX2RyaXZlciA9IHsKKwki
ZWNlIiwKKwllY2VfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjZV9zb2Z0YyksCit9OworCitE
UklWRVJfTU9EVUxFKGVjZSwgZWNvbmFhcm0sIGVjZV9kcml2ZXIsIGVjZV9kZXZjbGFzcywgMCwg
MCk7CitEUklWRVJfTU9EVUxFKG1paWJ1cywgZWNlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2
Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChlY2UsIG1paWJ1cywgMSwgMSwgMSk7CitNT0RV
TEVfREVQRU5EKGVjZSwgZXRoZXIsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXJl
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysr
IGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAyMDA5LCBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwu
Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZy
ZWVCU0QgJAorICovCisKKyNpZm5kZWYJX0lGX0VDRVJFR19ICisjZGVmaW5lCV9JRl9FQ0VSRUdf
SAorCisjZGVmaW5lCUVUSF9DRkcJCTB4MDgKKyNkZWZpbmUJRVRIX0NGR19STUlJCQkoMSA8PCAx
NSkKKyNkZWZpbmUJUEhZX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJUEhZX1JXX09LCQkoMTw8MTUp
CisKKyNkZWZpbmUJUEhZX0FERFJFU1MoeCkJCSgoeCkgJiAweDEpCisjZGVmaW5lCVBIWV9SRUdJ
U1RFUihyKQkoKChyKSAmIDB4MUYpIDw8IDgpCisjZGVmaW5lCVBIWV9XUklURV9DT01NQU5ECSgx
PDwxMykKKyNkZWZpbmUJUEhZX1JFQURfQ09NTUFORAkoMTw8MTQpCisjZGVmaW5lCVBIWV9HRVRf
REFUQShkKQkoKChkKSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lCVBIWV9EQVRBKGQpCQkoKChk
KSAmIDB4RkZGRikgPDwgMTYpCisKKyNkZWZpbmUJUE9SVF8wX0NPTkZJRwkJMHgwOAorCisjZGVm
aW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wCTB4MDUwCisjZGVmaW5lCUFSTF9UQUJMRV9B
Q0NFU1NfQ09OVFJPTF8xCTB4MDU0CisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8y
CTB4MDU4CisKKyNkZWZpbmUJQVJMX1dSSVRFX0NPTU1BTkQJKDE8PDMpCisjZGVmaW5lCUFSTF9M
T09LVVBfQ09NTUFORAkoMTw8MikKKyNkZWZpbmUJQVJMX0NPTU1BTkRfQ09NUExFVEUJKDEpCisK
KworI2RlZmluZQlQT1JUMAkJCSgxIDw8IDApCisjZGVmaW5lCVBPUlQxCQkJKDEgPDwgMSkKKyNk
ZWZpbmUJQ1BVX1BPUlQJCSgxIDw8IDIpCisKKworI2RlZmluZQlWTEFOMF9HUk9VUF9JRAkJKDAp
CisjZGVmaW5lCVZMQU4xX0dST1VQX0lECQkoMSkKKyNkZWZpbmUJVkxBTjJfR1JPVVBfSUQJCSgy
KQorI2RlZmluZQlWTEFOM19HUk9VUF9JRAkJKDMpCisjZGVmaW5lCVZMQU40X0dST1VQX0lECQko
NCkKKyNkZWZpbmUJVkxBTjVfR1JPVVBfSUQJCSg1KQorI2RlZmluZQlWTEFONl9HUk9VUF9JRAkJ
KDYpCisjZGVmaW5lCVZMQU43X0dST1VQX0lECQkoNykKKworI2RlZmluZQlQT1JUMF9QVklECQko
VkxBTjFfR1JPVVBfSUQpCisjZGVmaW5lCVBPUlQxX1BWSUQJCShWTEFOMl9HUk9VUF9JRCkKKyNk
ZWZpbmUJQ1BVX1BPUlRfUFZJRAkJKFZMQU4wX0dST1VQX0lEKQorCisjZGVmaW5lCVZMQU4wX1ZJ
RAkJKDB4MTExKQorI2RlZmluZQlWTEFOMV9WSUQJCSgweDIyMikKKyNkZWZpbmUJVkxBTjJfVklE
CQkoMHgzMzMpCisjZGVmaW5lCVZMQU4zX1ZJRAkJKDB4NDQ0KQorI2RlZmluZQlWTEFONF9WSUQJ
CSgweDU1NSkKKyNkZWZpbmUJVkxBTjVfVklECQkoMHg2NjYpCisjZGVmaW5lCVZMQU42X1ZJRAkJ
KDB4Nzc3KQorI2RlZmluZQlWTEFON19WSUQJCSgweDg4OCkKKworI2RlZmluZQlWTEFOMF9HUk9V
UAkJKFBPUlQwIHwgUE9SVDEgfCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjFfR1JPVVAJCShQT1JU
MCB8IENQVV9QT1JUKQorI2RlZmluZQlWTEFOMl9HUk9VUAkJKFBPUlQxIHwgQ1BVX1BPUlQpCisj
ZGVmaW5lCVZMQU4zX0dST1VQCQkoMCkKKyNkZWZpbmUJVkxBTjRfR1JPVVAJCSgwKQorI2RlZmlu
ZQlWTEFONV9HUk9VUAkJKDApCisjZGVmaW5lCVZMQU42X0dST1VQCQkoMCkKKyNkZWZpbmUJVkxB
TjdfR1JPVVAJCSgwKQorCisjZGVmaW5lCVNXSVRDSF9DT05GSUcJCTB4MDA0CisjZGVmaW5lCU1B
Q19QT1JUXzBfQ09ORklHCTB4MDA4CisjZGVmaW5lCU1BQ19QT1JUXzFfQ09ORklHCTB4MDBDCisj
ZGVmaW5lCUNQVV9QT1JUX0NPTkZJRwkweDAxMAorI2RlZmluZQlCSVNUX1JFU1VMVF9URVNUXzAJ
MHgwOTQKKworI2RlZmluZQlGU19ETUFfQ09OVFJPTAkJMHgxMDQKKyNkZWZpbmUJVFNfRE1BX0NP
TlRST0wJCTB4MTAwCisKKyNkZWZpbmUJSU5URVJSVVBUX01BU0sJCTB4MDhDCisjZGVmaW5lCUlO
VEVSUlVQVF9TVEFUVVMJMHgwODgKKworI2RlZmluZQlUU19ERVNDUklQVE9SX1BPSU5URVIJCTB4
MTA4CisjZGVmaW5lCVRTX0RFU0NSSVBUT1JfQkFTRV9BRERSCTB4MTEwCisjZGVmaW5lCUZTX0RF
U0NSSVBUT1JfUE9JTlRFUgkJMHgxMEMKKyNkZWZpbmUJRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIJ
MHgxMTQKKworCisjZGVmaW5lCVZMQU5fVklEXzBfMQkJMHgwNjAKKyNkZWZpbmUJVkxBTl9WSURf
Ml8zCQkweDA2NAorI2RlZmluZQlWTEFOX1ZJRF80XzUJCTB4MDY4CisjZGVmaW5lCVZMQU5fVklE
XzZfNwkJMHgwNkMKKworI2RlZmluZQlWTEFOX1BPUlRfUFZJRAkJMHgwNUMKKyNkZWZpbmUJVkxB
Tl9NRU1CRVJfUE9SVF9NQVAJCTB4MDcwCisjZGVmaW5lCVZMQU5fVEFHX1BPUlRfTUFQCQkweDA3
NAorCisKKyNkZWZpbmUJQVNJWF9HSUdBX1BIWQkJMQorI2RlZmluZQlUV09fU0lOR0xFX1BIWQkJ
MgorI2RlZmluZQlBR0VSRV9HSUdBX1BIWQkJMworI2RlZmluZQlWU0M4NjAxX0dJR0FfUEhZCTQK
KyNkZWZpbmUJSUNfUExVU19QSFkJCTUKKyNkZWZpbmUJTk9UX0ZPVU5EX1BIWQkJKC0xKQorCisj
ZGVmaW5lCU1BWF9QQUNLRVRfTEVOCQkoMTUzNikKKworI2RlZmluZQlJTlZBTElEX0VOVFJZCQkw
CisjZGVmaW5lCU5FV19FTlRSWQkJMHgxCisjZGVmaW5lCVNUQVRJQ19FTlRSWQkJMHg3CisKKy8q
bWFzayBzdGF0dXMgZXhjZXB0IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lCUVSUk9SX01BU0sJ
CTB4RkZGRkZGN0YKKworLypoYXJkd2FyZSBpbnRlcmZhY2UgZmxhZ3MqLworCisjZGVmaW5lCUZB
U1RfQUdJTkcJCSgweGYpCisjZGVmaW5lCUlWTF9MRUFSTklORwkJKDB4MSA8PCAyMikKKy8qaGFy
ZHdhcmUgTkFUIGFjY2VsZXJhdG9yKi8KKyNkZWZpbmUJSEFSRFdBUkVfTkFUCQkoMHgxIDw8IDIz
KQorLyphZ2luZwkJdGltZQkJc2V0dGluZyovCisKKy8qc2tpcCBsb29rdXAqLworI2RlZmluZQlT
S0lQX0wyX0xPT0tVUF9QT1JUXzEJKDEgPDwgMjkpCisjZGVmaW5lCVNLSVBfTDJfTE9PS1VQX1BP
UlRfMAkoMSA8PCAyOCkKKworI2RlZmluZQlOSUNfTU9ERQkJKDEgPDwgMzApCisjZGVmaW5lCVBP
UlRfRElTQUJMRQkJKDEgPDwgMTgpCisjZGVmaW5lCVNBX0xFQVJOSU5HX0RJU0FCTEUJCSgxIDw8
IDE5KQorI2RlZmluZQlESVNBQkxFX0JST0FEQ0FTVF9QQUNLRVQJKDEgPDwgMjcpCisjZGVmaW5l
CURJU0FCTEVfTVVMVElDQVNUX1BBQ0tFVAkoIDEgPDwgMjYpCisKKyNlbmRpZgpJbmRleDogYXJt
L2Vjb25hL2NmaV9idXNfZWNvbmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvY2ZpX2J1c19l
Y29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l
cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0
bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5o
PgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKworI2luY2x1ZGUgPGRldi9jZmkvY2ZpX3Zh
ci5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9l
Y29uYS9lY29uYV92YXIuaD4KKworc3RhdGljIGludAorY2ZpX2Vjb25hX3Byb2JlKGRldmljZV90
IGRldikKK3sKKworCXJldHVybiBjZmlfcHJvYmUoZGV2KTsKK30KKworc3RhdGljIGRldmljZV9t
ZXRob2RfdCBjZmlfZWNvbmFfbWV0aG9kc1tdID0geworCS8qIGRldmljZSBpbnRlcmZhY2UgKi8K
KwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJY2ZpX2Vjb25hX3Byb2JlKSwKKwlERVZNRVRIT0Qo
ZGV2aWNlX2F0dGFjaCwJY2ZpX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWNm
aV9kZXRhY2gpLAorCisJezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgY2ZpX2Vjb25hX2Ry
aXZlciA9IHsKKwljZmlfZHJpdmVyX25hbWUsCisJY2ZpX2Vjb25hX21ldGhvZHMsCisJc2l6ZW9m
KHN0cnVjdCBjZmlfc29mdGMpLAorfTsKK0RSSVZFUl9NT0RVTEUoY2ZpLCBlY29uYWFybSwgY2Zp
X2Vjb25hX2RyaXZlciwgY2ZpX2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS90aW1l
ci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS90aW1lci5jCShyZXZpc2lvbiAwKQorKysgYXJt
L2Vjb25hL3RpbWVyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgxIEBACisvKi0KKyAqIENv
cHlyaWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPi4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVC
U0QgJCIpOworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgor
I2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8
c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1h
bi5oPgorI2luY2x1ZGUgPHN5cy90aW1ldGMuaD4KKyNpbmNsdWRlIDxzeXMvd2F0Y2hkb2cuaD4K
KyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5j
bHVkZSA8bWFjaGluZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5j
bHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKKyNkZWZpbmUJSU5J
VElBTF9USU1FQ09VTlRFUgkoMHhmZmZmZmZmZikKKworc3RhdGljIGludCB0aW1lcnNfaW5pdGlh
bGl6ZWQgPSAwOworCisjZGVmaW5lCUhaCTEwMAorCitleHRlcm4gdW5zaWduZWQgaW50IENQVV9j
bG9jazsKK2V4dGVybiB1bnNpZ25lZCBpbnQgQUhCX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGlu
dCBBUEJfY2xvY2s7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2NvdW50ZXIgPSAwOwor
CitzdHJ1Y3QgZWNfdGltZXJfc29mdGMgeworCXN0cnVjdCByZXNvdXJjZQkqCXRpbWVyX3Jlc1sz
XTsKKwlidXNfc3BhY2VfdGFnX3QJCXRpbWVyX2JzdDsKKwlidXNfc3BhY2VfaGFuZGxlX3QJdGlt
ZXJfYnNoOworCXN0cnVjdCBtdHgJCXRpbWVyX210eDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVz
b3VyY2Vfc3BlYyBlY190aW1lcl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZf
QUNUSVZFIH0sCisJeyBTWVNfUkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsgU1lTX1JFU19J
UlEsCQkxLAlSRl9BQ1RJVkUgfSwKKwl7IC0xLCAwIH0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBl
Y190aW1lcl9nZXRfdGltZWNvdW50KHN0cnVjdCB0aW1lY291bnRlciAqKTsKKworc3RhdGljIHN0
cnVjdCB0aW1lY291bnRlciBlY190aW1lY291bnRlciA9IHsKKwkudGNfZ2V0X3RpbWVjb3VudCA9
IGVjX3RpbWVyX2dldF90aW1lY291bnQsCisJLnRjX25hbWUgPSAiQ1BVIFRpbWVyIiwKKwkvKiBU
aGlzIGlzIGFzc2lnbmVkIG9uIHRoZSBmbHkgaW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNf
ZnJlcXVlbmN5ID0gMCwKKwkudGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19xdWFsaXR5ID0g
MTAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWNfdGltZXJfc29mdGMgKnRpbWVyX3NvZnRjID0g
TlVMTDsKKworc3RhdGljIGlubGluZQordm9pZCB3cml0ZV80KHVuc2lnbmVkIGludCB2YWwsIHVu
c2lnbmVkIGludCBhZGRyKQoreworCWJ1c19zcGFjZV93cml0ZV80KHRpbWVyX3NvZnRjLT50aW1l
cl9ic3QsCisJCQkgIHRpbWVyX3NvZnRjLT50aW1lcl9ic2gsIGFkZHIsIHZhbCk7CisKK30KKwor
c3RhdGljIGlubGluZQordW5zaWduZWQgaW50IHJlYWRfNCh1bnNpZ25lZCBpbnQgYWRkcikKK3sK
KworCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJICAg
IHRpbWVyX3NvZnRjLT50aW1lcl9ic2gsIGFkZHIpOworfQorCisjZGVmaW5lCXVTRUNTX1BFUl9U
SUNLCSgxMDAwMDAwIC8gQVBCX2Nsb2NrKQorI2RlZmluZQlUSUNLUzJVU0VDUyh4KQkoKHgpICog
dVNFQ1NfUEVSX1RJQ0spCisKK3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9jb3VudGVyX25v
aW50KHZvaWQpCit7CisKKwlhcm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSByZWFk
XzQoVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4g
djsKK30KKwordm9pZAorREVMQVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVt
cDsKKwlpbnQgbnRpY2tzOworCisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7
IHVzZWMgPiAwOyB1c2VjLS0pCisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJ
CQkJOworCQlyZXR1cm47CisJfQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7
CisJbnRpY2tzID0gKCgoQVBCX2Nsb2NrIC8gMTAwMCkgKiB1c2VjKSAvIDEwMDApICsgMTAwOwor
CisJd2hpbGUgKG50aWNrcyA+IDApIHsKKwkJdmFsX3RlbXAgPSByZWFkX3RpbWVyX2NvdW50ZXJf
bm9pbnQoKTsKKwkJaWYgKHZhbCA+IHZhbF90ZW1wKQorCQkJbnRpY2tzIC09ICh2YWwgLSB2YWxf
dGVtcCk7CisJCWVsc2UKKwkJCW50aWNrcyAtPSAodmFsICsgKHRpbWVyX2NvdW50ZXIgLSB2YWxf
dGVtcCkpOworCisJCXZhbCA9IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICogU2V0dXAgdGlt
ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25lZCBpbnQgY291
bnRlcl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1bnNpZ25lZCBp
bnQgbWFza192YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVH
KTsKKworCW1hc2tfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7CisJd3Jp
dGVfNChjb3VudGVyX3ZhbHVlLCBUSU1FUl9UTTFfQ09VTlRFUl9SRUcpOworCXdyaXRlXzQoY291
bnRlcl92YWx1ZSwgVElNRVJfVE0xX0xPQURfUkVHKTsKKwl3cml0ZV80KDAsIFRJTUVSX1RNMV9N
QVRDSDFfUkVHKTsKKwl3cml0ZV80KDAsVElNRVJfVE0xX01BVENIMl9SRUcpOworCisJY29udHJv
bF92YWx1ZSAmPSB+KFRJTUVSMV9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgfD0gVElN
RVIxX1VQX0RPV05fQ09VTlQ7CisKKwl3cml0ZV80KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7
CisJd3JpdGVfNCgwLCBUSU1FUl9UTTJfTE9BRF9SRUcpOworCXdyaXRlXzQofjB1LCBUSU1FUl9U
TTJfTUFUQ0gxX1JFRyk7CisJd3JpdGVfNCh+MHUsVElNRVJfVE0yX01BVENIMl9SRUcpOworCisJ
Y29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUg
Jj0gfihUSU1FUjJfVVBfRE9XTl9DT1VOVCk7CisKKwltYXNrX3ZhbHVlICY9IH4oNjMpOworCisJ
d3JpdGVfNChjb250cm9sX3ZhbHVlLCBUSU1FUl9UTV9DUl9SRUcpOworCXdyaXRlXzQobWFza192
YWx1ZSwgVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7Cit9CisKKy8qCisgKiBFbmFibGUgdGltZXIK
KyAqLworc3RhdGljIGlubGluZSB2b2lkCit0aW1lcl9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25l
ZCBpbnQgY29udHJvbF92YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1f
Q1JfUkVHKTsKKworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwlj
b250cm9sX3ZhbHVlIHw9IFRJTUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJf
T1ZFUkZMT1dfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCXdy
aXRlXzQoY29udHJvbF92YWx1ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKworCXJl
dHVybiByZWFkXzQoVElNRVJfVE0yX0NPVU5URVJfUkVHKTsKK30KKworLyoKKyAqIEdldCB0aW1l
ciBpbnRlcnJ1cHQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFk
X3RpbWVyX2ludGVycnVwdF9zdGF0dXModm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJf
VE1fSU5UUl9TVEFUVVNfUkVHKTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVycnVwdCBz
dGF0dXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3Rh
dHVzKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0dXM7
CisKKwlpbnRlcnJ1cHRfc3RhdHVzID0gICByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVH
KTsKKwlpZiAoaXJxID09IDApIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01B
VENIMV9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIp
OworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50
ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRf
c3RhdHVzICYgKFRJTUVSMV9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0g
fihUSU1FUjFfT1ZFUkZMT1dfSU5UUik7CisJfQorCWlmIChpcnEgPT0gMSkgeworCQlpZiAoaW50
ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1
cyAmPSB+KFRJTUVSMl9NQVRDSDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJ
TUVSMl9NQVRDSDJfSU5UUikpCisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENI
Ml9JTlRSKTsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIyX09WRVJGTE9XX0lOVFIp
KQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9PVkVSRkxPV19JTlRSKTsKKwl9CisK
Kwl3cml0ZV80KGludGVycnVwdF9zdGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9
CisKK3N0YXRpYyB1bnNpZ25lZAorZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNv
dW50ZXIgKmEpCit7CisJdW5zaWduZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJ
dGlja3MxID0gcmVhZF9zZWNvbmRfdGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEp
OworCXJldHVybiB0aWNrczE7Cit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMg
aW5saW5lIHZvaWQKK2RvX3NldHVwX3RpbWVyKHZvaWQpCit7CisKKwl0aW1lcl9jb3VudGVyID0g
QVBCX2Nsb2NrL0haOworCS8qCisJICogc2V0dXAgdGltZXItcmVsYXRlZCB2YWx1ZXMKKwkgKi8K
KwlzZXR1cF90aW1lcih0aW1lcl9jb3VudGVyKTsKK30KKwordm9pZAorY3B1X2luaXRjbG9ja3Mo
dm9pZCkKK3sKKworCWVjX3RpbWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9IEFQQl9jbG9jazsKKwl0
Y19pbml0KCZlY190aW1lY291bnRlcik7CisJdGltZXJfZW5hYmxlKCk7CisJdGltZXJzX2luaXRp
YWxpemVkID0gMTsKK30KKwordm9pZAorY3B1X3N0YXJ0cHJvZmNsb2NrKHZvaWQpCit7CisKK30K
Kwordm9pZAorY3B1X3N0b3Bwcm9mY2xvY2sodm9pZCkKK3sKKworfQorCitzdGF0aWMgaW50Citl
Y190aW1lcl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAi
RWNvbmEgQ1BVIFRpbWVyIik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVz
ZXQodm9pZCAqYXJnKQoreworCisJYXJtX21hc2tfaXJxKDEpOworCWNsZWFyX3RpbWVyX2ludGVy
cnVwdF9zdGF0dXMoMSk7CisJYXJtX3VubWFza19pcnEoMSk7CisJcmV0dXJuIChGSUxURVJfSEFO
RExFRCk7Cit9CisKK3N0YXRpYyBpbnQKK2VjX2hhcmRjbG9jayh2b2lkICphcmcpCit7CisJc3Ry
dWN0CXRyYXBmcmFtZSAqZnJhbWU7CisJdW5zaWduZWQgaW50IHZhbDsKKwkvKmNsZWFyIHRpbWVy
IGludGVycnVwdCBzdGF0dXMqLworCisJYXJtX21hc2tfaXJxKDApOworCisJdmFsID0gcmVhZF80
KFRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHKTsKKwl2YWwgJj0gfihUSU1FUjFfT1ZFUkZMT1df
SU5URVJSVVBUKTsKKwl3cml0ZV80KHZhbCwgVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOwor
CisJZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsKKwloYXJkY2xvY2soVFJBUEZfVVNF
Uk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7CisK
KwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfdGltZXJfYXR0
YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QJZWNfdGltZXJfc29mdGMgKnNjOworCWludAll
cnJvcjsKKwl2b2lkCSppaGw7CisKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQlyZXR1
cm4gKEVOWElPKTsKKworCXNjID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9nZXRf
c29mdGMoZGV2KTsKKworCXRpbWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxvY19y
ZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJyb3Ip
IHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2VzXG4i
KTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0X2J1
c3RhZyhzYy0+dGltZXJfcmVzWzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVzaGFu
ZGxlKHNjLT50aW1lcl9yZXNbMF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChidXNf
c2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAgIGVj
X2hhcmRjbG9jaywgTlVMTCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNv
dXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50
ZihkZXYsICJjb3VsZCBub3Qgc2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJldHVy
biAoRU5YSU8pOworCX0KKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNb
Ml0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAhPSAw
KSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50aW1l
cl9yZXMpOworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBpbnRl
cnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjX3RpbWVyX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0Qo
ZGV2aWNlX3Byb2JlLCBlY190aW1lcl9wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gs
IGVjX3RpbWVyX2F0dGFjaCksCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY190
aW1lcl9kcml2ZXIgPSB7CisJInRpbWVyIiwKKwllY190aW1lcl9tZXRob2RzLAorCXNpemVvZihz
dHJ1Y3QgZWNfdGltZXJfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3QgZWNfdGltZXJf
ZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RVTEUodGltZXIsIGVjb25hYXJtLCBlY190aW1lcl9kcml2
ZXIsIGVjX3RpbWVyX2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9lY29uYS5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25h
L2Vjb25hLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzU4IEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQi
KTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2lu
Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv
a2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUu
aD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8
dm0vdm1fa2Vybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdl
Lmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFf
UFJJVkFURQorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRy
Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVn
LmgiCisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMg
KmVjb25hX3NvZnRjOworCit1bnNpZ25lZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5z
aWduZWQgaW50IEFIQl9jbG9jazsKK3Vuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK2JzX3Byb3Rv
cyhnZW5lcmljKTsKK2JzX3Byb3RvcyhnZW5lcmljX2FybXY0KTsKKworc3RydWN0IGJ1c19zcGFj
ZSBlY29uYV9ic190YWcgPSB7CisJLyogY29va2llICovCisJKHZvaWQgKikgMCwKKworCS8qIG1h
cHBpbmcvdW5tYXBwaW5nICovCisJZ2VuZXJpY19ic19tYXAsCisJZ2VuZXJpY19ic191bm1hcCwK
KwlnZW5lcmljX2JzX3N1YnJlZ2lvbiwKKworCS8qIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uICov
CisJZ2VuZXJpY19ic19hbGxvYywKKwlnZW5lcmljX2JzX2ZyZWUsCisKKwkvKiBiYXJyaWVyICov
CisJZ2VuZXJpY19ic19iYXJyaWVyLAorCisJLyogcmVhZCAoc2luZ2xlKSAqLworCWdlbmVyaWNf
YnNfcl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcl8yLAorCWdlbmVyaWNfYnNfcl80LAorCU5VTEws
CisKKwkvKiByZWFkIG11bHRpcGxlICovCisJZ2VuZXJpY19ic19ybV8xLAorCWdlbmVyaWNfYXJt
djRfYnNfcm1fMiwKKwlnZW5lcmljX2JzX3JtXzQsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9u
ICovCisJZ2VuZXJpY19ic19ycl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcnJfMiwKKwlnZW5lcmlj
X2JzX3JyXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIChzaW5nbGUpICovCisJZ2VuZXJpY19ic193
XzEsCisJZ2VuZXJpY19hcm12NF9ic193XzIsCisJZ2VuZXJpY19ic193XzQsCisJTlVMTCwKKwor
CS8qIHdyaXRlIG11bHRpcGxlICovCisJZ2VuZXJpY19ic193bV8xLAorCWdlbmVyaWNfYXJtdjRf
YnNfd21fMiwKKwlnZW5lcmljX2JzX3dtXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIHJlZ2lvbiAq
LworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiBzZXQgbXVsdGlwbGUgKi8K
KwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogc2V0IHJlZ2lvbiAqLworCU5V
TEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiBjb3B5ICovCisJTlVMTCwKKwlOVUxM
LAorCU5VTEwsCisJTlVMTCwKKworCS8qIHJlYWQgKHNpbmdsZSkgc3RyZWFtICovCisJTlVMTCwK
KwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8qIHJlYWQgbXVsdGlwbGUgc3RyZWFtICovCisJ
TlVMTCwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogcmVh
ZCByZWdpb24gc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8q
IHdyaXRlIChzaW5nbGUpIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEws
CisKKwkvKiB3cml0ZSBtdWx0aXBsZSBzdHJlYW0gKi8KKwlOVUxMLAorCWdlbmVyaWNfYXJtdjRf
YnNfd21fMiwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSByZWdpb24gc3RyZWFtICovCisJ
TlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTAorfTsKKworYnVzX3NwYWNlX3RhZ190IG9iaW9f
dGFnID0gJmVjb25hX2JzX3RhZzsKKworc3RhdGljIGludAorZWNvbmFfcHJvYmUoZGV2aWNlX3Qg
ZGV2KQoreworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVDT05BIGRldmljZSBidXMiKTsKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorZWNvbmFfaWRlbnRpZnkoZHJpdmVyX3QgKmRy
diwgZGV2aWNlX3QgcGFyZW50KQoreworCisJQlVTX0FERF9DSElMRChwYXJlbnQsIDAsICJlY29u
YWFybSIsIDApOworfQorCitzdHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoKK2J1c19kbWFfZ2V0X3Jh
bmdlKHZvaWQpCit7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK2J1c19kbWFfZ2V0X3Jh
bmdlX25iKHZvaWQpCit7CisKKwlyZXR1cm4gKDApOworfQorCitleHRlcm4gdm9pZCBpcnFfZW50
cnkodm9pZCk7CisKK3N0YXRpYyB2b2lkCitlY29uYV9hZGRfY2hpbGQoZGV2aWNlX3QgZGV2LCBp
bnQgcHJpbywgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuaXQsCisgICAgYnVzX2FkZHJfdCBhZGRy
LCBidXNfc2l6ZV90IHNpemUsCisgICAgaW50IGlycTAsIGludCBpcnExLAorICAgIGludCBpcnEy
LCBpbnQgaXJxMywgaW50IGlycTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVjdCBlY29uYV9p
dmFyICppdmFyOworCisJa2lkID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRldiwgcHJpbywg
bmFtZSwgdW5pdCk7CisJaWYgKGtpZCA9PSBOVUxMKSB7CisJCXByaW50ZigiQ2FuJ3QgYWRkIGNo
aWxkICVzJWQgb3JkZXJlZFxuIiwgbmFtZSwgdW5pdCk7CisJCXJldHVybjsKKwl9CisJaXZhciA9
IG1hbGxvYyhzaXplb2YoKml2YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlm
IChpdmFyID09IE5VTEwpIHsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGtpZCk7CisJCXJl
dHVybjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhraWQsIGl2YXIpOworCXJlc291cmNlX2xpc3Rf
aW5pdCgmaXZhci0+cmVzb3VyY2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkKKwkJYnVzX3NldF9yZXNv
dXJjZShraWQsIFNZU19SRVNfSVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAoaXJxMSAhPSAwKQorCQli
dXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDEsIGlycTEsIDEpOworCWlmIChpcnEy
ICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMiwgaXJxMiwgMSk7
CisJaWYgKGlycTMgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAz
LCBpcnEzLCAxKTsKKwlpZiAoaXJxNCAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lT
X1JFU19JUlEsIDQsIGlycTQsIDEpOworCisJaWYgKGFkZHIgIT0gMCkKKwkJYnVzX3NldF9yZXNv
dXJjZShraWQsIFNZU19SRVNfTUVNT1JZLCAwLCBhZGRyLCBzaXplKTsKKworfQorCitzdHJ1Y3Qg
Y3B1X2RldnMKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCB1bml0OworCWJ1c19hZGRyX3Qg
bWVtX2Jhc2U7CisJYnVzX3NpemVfdCBtZW1fbGVuOworCWludCBpcnEwOworCWludCBpcnExOwor
CWludCBpcnEyOworCWludCBpcnEzOworCWludCBpcnE0OworfTsKKworc3RydWN0IGNwdV9kZXZz
IGVjb25hcm1fZGV2c1tdID0KK3sKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JB
U0UgKyBFQ09OQV9QSUNfQkFTRSwgRUNPTkFfUElDX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInN5
c3RlbSIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9TWVNURU1fQkFTRSwgRUNPTkFfU1lT
VEVNX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInVhcnQiLCAwLAorCQlFQ09OQV9JT19CQVNFICsg
RUNPTkFfVUFSVF9CQVNFLCBFQ09OQV9VQVJUX1NJWkUsCisJCUVDT05BX0lSUV9VQVJUCisJfSwK
Kwl7CisJCSJ0aW1lciIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9USU1FUl9CQVNFLCBF
Q09OQV9USU1FUl9TSVpFLAorCQlFQ09OQV9JUlFfVElNRVJfMSwgRUNPTkFfSVJRX1RJTUVSXzIK
Kwl9LAorCXsKKwkJIm9oY2kiLCAwLAorCQlFQ09OQV9PSENJX1ZCQVNFLCBFQ09OQV9PSENJX1NJ
WkUsCisJCUVDT05BX0lSUV9PSENJCisJCX0sCisJeworCQkiZWhjaSIsIDAsCisJCUVDT05BX0VI
Q0lfVkJBU0UsIEVDT05BX0VIQ0lfU0laRSwKKwkJRUNPTkFfSVJRX0VIQ0kKKwl9LAorCXsKKwkJ
ImNmaSIsIDAsCisJCUVDT05BX0NGSV9WQkFTRSwgRUNPTkFfQ0ZJX1NJWkUsCisJCTAKKwl9LAor
CXsKKwkJImVjZSIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9ORVRfQkFTRSwgRUNPTkFf
TkVUX1NJWkUsCisJCUVDT05BX0lSUV9TVEFUVVMsCisJCUVDT05BX0lSUV9UU1RDLCBFQ09OQV9J
UlFfRlNSQywKKwkJRUNPTkFfSVJRX1RTUUUsIEVDT05BX0lSUV9GU1FGLAorCX0sCisJewkwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkCitlY29uYV9jcHVfYWRk
X2J1aWx0aW5fY2hpbGRyZW4oZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjKQor
eworCWludCBpOworCXN0cnVjdCBjcHVfZGV2cyAqd2Fsa2VyOworCisJZm9yIChpID0gMCwgd2Fs
a2VyID0gZWNvbmFybV9kZXZzOyB3YWxrZXItPm5hbWU7IGkrKywgd2Fsa2VyKyspIHsKKwkJZWNv
bmFfYWRkX2NoaWxkKGRldiwgaSwgd2Fsa2VyLT5uYW1lLCB3YWxrZXItPnVuaXQsCisJCSAgICB3
YWxrZXItPm1lbV9iYXNlLCB3YWxrZXItPm1lbV9sZW4sCisJCSAgICB3YWxrZXItPmlycTAsd2Fs
a2VyLT5pcnExLCB3YWxrZXItPmlycTIsCisJCSAgICB3YWxrZXItPmlycTMsIHdhbGtlci0+aXJx
NCk7CisJfQorCit9CisKK3N0cnVjdCBpbnRjX3RyaWdnZXJfdCB7CisJaW50IG1vZGU7CisJaW50
IGxldmVsOworfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3RyaWdnZXJfdCBpbnRjX3RyaWdnZXJf
dGFibGVbXSA9IHsKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJ
TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VS
LCBJTlRDX0ZBTExJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19F
REdFfSwKKwl7SU5UQ19UUklHR0VSX1VOS05PV04sIElOVENfVFJJR0dFUl9VTktOT1dOfSwKKwl7
SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdH
RVIsIElOVENfQUNUSVZFX0xPV30sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVf
SElHSH0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJ
e0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJ
R0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJ
VkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lO
VENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxf
VFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZB
TExJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9X
Tn0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lO
VENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VS
LCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VE
R0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURH
RV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRD
X0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xPV30sCit9
OworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjb25hX3NvZnRjICpz
YywgYnVzX3NpemVfdCBvZmYpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3JlYWRfNChzYy0+ZWNf
c3QsIHNjLT5lY19zeXNfc2gsIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3JpdGVf
NChzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQor
eworCisJcmV0dXJuIGJ1c19zcGFjZV93cml0ZV80KHNjLT5lY19zdCwgc2MtPmVjX3N5c19zaCwg
b2ZmLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitzeXN0ZW1fcmVhZF80KHN0
cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0dXJuIGJ1c19z
cGFjZV9yZWFkXzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQKK3N5c3RlbV93cml0ZV80KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1
c19zaXplX3Qgb2ZmLCB1aW50MzJfdCB2YWwpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRl
XzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0
aWMgaW5saW5lIHZvaWQKK2Vjb25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBz
YywgdW5zaWduZWQgaW50IGlycSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWdu
ZWQgaW50IHZhbDsKKworCWlmICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2Rl
ICE9IElOVENfRURHRV9UUklHR0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JcmVhZF80KHNjLCBJ
TlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJ
TlRDX0xFVkVMX1RSSUdHRVIpIHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFs
ICY9IH4oMVVMIDw8IGlycSk7CisJCQl3cml0ZV80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklHR0VS
X01PREVfUkVHX09GRlNFVCwKKwkJCSAgICB2YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEo
dmFsICYgKDFVTCA8PCBpcnEpKSkgeworCQkJdmFsIHw9ICgxVUwgPDwgaXJxKTsKKwkJCXdyaXRl
XzQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULAorCQkJICAgIHZh
bCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmUgaW50ZXJydXB0IHRyaWdnZXIgbGV2
ZWwgdG8gYmUgQWN0aXZlIEhpZ2gvTG93CisgKiBvciBSaXNpbmcvRmFsbGluZyBFZGdlCisgKi8K
K3N0YXRpYyBpbmxpbmUgdm9pZAorZWNvbmFfc2V0X2lycV9sZXZlbChzdHJ1Y3QgZWNvbmFfc29m
dGMgKiBzYywKKyAgICB1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJ
dW5zaWduZWQgaW50IHZhbDsKKworCWlmICgobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfSElHSCkgJiYK
KwkgICAgKGxldmVsICE9IElOVENfQUNUSVZFX0xPVykgJiYKKwkgICAgKGxldmVsICE9IElOVENf
UklTSU5HX0VER0UpICYmCisJICAgIChsZXZlbCAhPSBJTlRDX0ZBTExJTkdfRURHRSkpIHsKKwkJ
cmV0dXJuOworCX0KKworCXZhbCA9IHJlYWRfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9M
RVZFTF9SRUdfT0ZGU0VUKTsKKworCWlmICgobGV2ZWwgPT0gSU5UQ19BQ1RJVkVfSElHSCkgfHwg
KGxldmVsID09IElOVENfUklTSU5HX0VER0UpKSB7CisJCWlmICh2YWwgJiAoMVVMIDw8IGlycSkp
IHsKKwkJCXZhbCAmPSB+KDFVTCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJV
UFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9IGVsc2Ug
eworCQlpZiAoISh2YWwgJiAoMVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8PCBpcnEp
OworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VU
LAorCQkJICAgIHZhbCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfc3lzdGVtX2Ns
b2NrKHZvaWQpCit7CisJdWludDMyX3Qgc2Nsb2NrID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0
YywgU1lTVEVNX0NMT0NLKTsKKworCXNjbG9jayA9IChzY2xvY2sgPj4gNikgJiAweDAzOworCisJ
c3dpdGNoIChzY2xvY2spIHsKKwljYXNlIDA6CisJCUNQVV9jbG9jayA9IDE3NTAwMDAwMDsKKwkJ
YnJlYWs7CisJY2FzZSAxOgorCQlDUFVfY2xvY2sgPSAyMDAwMDAwMDA7CisJCWJyZWFrOworCWNh
c2UgMjoKKwkJQ1BVX2Nsb2NrID0gMjI1MDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCUNQ
VV9jbG9jayA9IDI1MDAwMDAwMDsKKwkJYnJlYWs7CisJfQorCUFIQl9jbG9jayA9IENQVV9jbG9j
ayA+PiAxOworCUFQQl9jbG9jayA9IEFIQl9jbG9jayA+PiAxOworfQorCitzdGF0aWMgaW50Citl
Y29uYV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaW50IGk7CisKKwllY29uYV9zb2Z0YyA9IHNjOworCXNj
LT5lY19zdCA9ICZlY29uYV9ic190YWc7CisJc2MtPmVjX3NoID0gRUNPTkFfSU9fQkFTRTsKKwlz
Yy0+ZGV2ID0gZGV2OworCWlmIChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5lY19zdCwgc2MtPmVj
X3NoLCBFQ09OQV9QSUNfQkFTRSwKKwkgICAgRUNPTkFfUElDX1NJWkUsICZzYy0+ZWNfc3lzX3No
KSAhPSAwKQorCQlwYW5pYygiVW5hYmxlIHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlpZiAo
YnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+ZWNfc3QsIHNjLT5lY19zaCwgRUNPTkFfU1lTVEVNX0JB
U0UsCisJICAgIEVDT05BX1NZU1RFTV9TSVpFLCAmc2MtPmVjX3N5c3RlbV9zaCkgIT0gMCkKKwkJ
cGFuaWMoIlVuYWJsZSB0byBtYXAgSVJRIHJlZ2lzdGVycyIpOworCisJc2MtPmVjX2lycV9ybWFu
LnJtX3R5cGUgPSBSTUFOX0FSUkFZOworCXNjLT5lY19pcnFfcm1hbi5ybV9kZXNjciA9ICJFQ09O
QSBJUlFzIjsKKwlzYy0+ZWNfbWVtX3JtYW4ucm1fdHlwZSA9IFJNQU5fQVJSQVk7CisJc2MtPmVj
X21lbV9ybWFuLnJtX2Rlc2NyID0gIkVDT05BIE1lbW9yeSI7CisJaWYgKHJtYW5faW5pdCgmc2Mt
PmVjX2lycV9ybWFuKSAhPSAwIHx8CisJICAgIHJtYW5fbWFuYWdlX3JlZ2lvbigmc2MtPmVjX2ly
cV9ybWFuLCAwLCAzMSkgIT0gMCkKKwkJcGFuaWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNl
dCB1cCBJUlEgcm1hbiIpOworCWlmIChybWFuX2luaXQoJnNjLT5lY19tZW1fcm1hbikgIT0gMCB8
fAorCSAgICBybWFuX21hbmFnZV9yZWdpb24oJnNjLT5lY19tZW1fcm1hbiwgMCwKKwkgICAgfjAp
ICE9IDApCisJCXBhbmljKCJlY29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAgbWVtb3J5IHJt
YW4iKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9S
RUdfT0ZGU0VULCAweGZmZmZmZmZmKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX01B
U0tfUkVHX09GRlNFVCwgMHhmZmZmZmZmZik7CisKKwl3cml0ZV80KHNjLCBJTlRDX0ZJUV9NT0RF
X1NFTEVDVF9SRUdfT0ZGU0VULCAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9
IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJ
TlRDX1RSSUdHRVJfVU5LTk9XTikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNf
dHJpZ2dlcl90YWJsZVtpXS5tb2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGlu
dGNfdHJpZ2dlcl90YWJsZVtpXS5sZXZlbCk7CisJCX0KKwl9CisKKwlnZXRfc3lzdGVtX2Nsb2Nr
KCk7CisKKwllY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRyZW4oZGV2LCBzYyk7CisKKwlidXNf
Z2VuZXJpY19wcm9iZShkZXYpOworCWJ1c19nZW5lcmljX2F0dGFjaChkZXYpOworCWVuYWJsZV9p
bnRlcnJ1cHRzKEkzMl9iaXQgfCBGMzJfYml0KTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBzdHJ1Y3QgcmVzb3VyY2UgKgorZWNvbmFfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBk
ZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9s
b25nIGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWNvbmFfc29m
dGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCByZXNvdXJjZV9saXN0X2Vu
dHJ5ICpybGU7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKGNo
aWxkKTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwgPSAmaXZhci0+cmVzb3VyY2VzOworCisJ
aWYgKGRldmljZV9nZXRfcGFyZW50KGNoaWxkKSAhPSBkZXYpCisJCXJldHVybiAoQlVTX0FMTE9D
X1JFU09VUkNFKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLAorCQkJICAgdHlwZSwgcmlk
LCBzdGFydCwgZW5kLCBjb3VudCwgZmxhZ3MpKTsKKworCXJsZSA9IHJlc291cmNlX2xpc3RfZmlu
ZChybCwgdHlwZSwgKnJpZCk7CisJaWYgKHJsZSA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCWlmIChybGUtPnJlcykKKwkJcGFuaWMoIlJlc291cmNlIHJpZCAlZCB0eXBlICVkIGFs
cmVhZHkgaW4gdXNlIiwgKnJpZCwgdHlwZSk7CisJaWYgKHN0YXJ0ID09IDBVTCAmJiBlbmQgPT0g
fjBVTCkgeworCQlzdGFydCA9IHJsZS0+c3RhcnQ7CisJCWNvdW50ID0gdWxtYXgoY291bnQsIHJs
ZS0+Y291bnQpOworCQllbmQgPSB1bG1heChybGUtPmVuZCwgc3RhcnQgKyBjb3VudCAtIDEpOwor
CX0KKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0g
cm1hbl9yZXNlcnZlX3Jlc291cmNlKCZzYy0+ZWNfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5k
LCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToK
KwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5lY19tZW1fcm1hbiwKKwkJ
ICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0g
TlVMTCkgeworCQkJcm1hbl9zZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJ
CXJtYW5fc2V0X2J1c2hhbmRsZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0K
KwlpZiAocmxlLT5yZXMpIHsKKwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVz
KTsKKwkJcmxlLT5lbmQgPSBybWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0g
Y291bnQ7CisJCXJtYW5fc2V0X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxl
LT5yZXMpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jl
c291cmNlX2xpc3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNv
bmFfaXZhciAqaXZhcjsKKwlpdmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJu
ICgmKGl2YXItPnJlc291cmNlcykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jl
c291cmNlKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCBy
aWQsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJ
c3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291
cmNlX2xpc3QoZGV2LCBjaGlsZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM
KTsKKwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9
PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOwor
CXJsZS0+cmVzID0gTlVMTDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9z
ZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291
cmNlICppcmVzLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJf
aW50cl90ICppbnRyLCB2b2lkICphcmcsIHZvaWQgKipjb29raWVwKQoreworCisJaWYgKHJtYW5f
Z2V0X3N0YXJ0KGlyZXMpID09IEVDT05BX0lSUV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlw
YW5pYygiQWxsIHN5c3RlbSBpbnRlcnJ1cHQgSVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVT
X1NFVFVQX0lOVFIoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBm
aWx0LAorCSAgICBpbnRyLCBhcmcsIGNvb2tpZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9n
ZXRfc3RhcnQoaXJlcykpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFf
dGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3Vy
Y2UgKnJlcywKKyAgICB2b2lkICpjb29raWUpCit7CisKKwlyZXR1cm4gKEJVU19URUFSRE9XTl9J
TlRSKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLCByZXMsIGNvb2tpZSkpOworfQorCitz
dGF0aWMgaW50CitlY29uYV9hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90
IGNoaWxkLCBpbnQgdHlwZSwgaW50IHJpZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisK
KwlyZXR1cm4gKHJtYW5fYWN0aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50Citl
Y29uYV9wcmludF9jaGlsZChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVj
dCBlY29uYV9pdmFyICppdmFyczsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJl
dHZhbCA9IDA7CisKKwlpdmFycyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2
YXJzLT5yZXNvdXJjZXM7CisKKwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYs
IGNoaWxkKTsKKworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0
IiwgU1lTX1JFU19JT1BPUlQsICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJp
bnRfdHlwZShybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSBy
ZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOwor
CWlmIChkZXZpY2VfZ2V0X2ZsYWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAl
I3giLCBkZXZpY2VfZ2V0X2ZsYWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGls
ZF9mb290ZXIoZGV2LCBjaGlsZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2Fy
bV9tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFs
dWUgPSByZWFkXzQoZWNvbmFfc29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8
IDE8PG5iOworCXdyaXRlXzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09G
RlNFVCwgdmFsdWUpOworfQorCit2b2lkCithcm1fdW5tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7
CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFfc29mdGMsCisJ
ICAgIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VUKSB8ICgxIDw8
IG5iKTsKKwl3cml0ZV80KGVjb25hX3NvZnRjLAorCSAgICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9F
REdFX1RSSUdHRVJfUkVHX09GRlNFVCwgdmFsdWUpOworCXZhbHVlID0gcmVhZF80KGVjb25hX3Nv
ZnRjLCBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTRVQpJiB+KDEgPDwgbmIpOworCXdyaXRl
XzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOwor
fQorCitpbnQKK2FybV9nZXRfbmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKworCWlycSA9
IHJlYWRfNChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQpICYK
KwkgICAgfihyZWFkXzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNF
VCkpOworCisJaWYgKGlycSE9MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJ
cmV0dXJuICgtMSk7Cit9CisKK3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNv
bnRyb2w7CisKKwljb250cm9sID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09O
VFJPTCk7CisJY29udHJvbCB8PSBHTE9CQUxfUkVTRVQ7CisJc3lzdGVtX3dyaXRlXzQoZWNvbmFf
c29mdGMsIFJFU0VUX0NPTlRST0wsIGNvbnRyb2wpOworCWNvbnRyb2wgPSBzeXN0ZW1fcmVhZF80
KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljb250cm9sICY9ICh+KEdMT0JBTF9SRVNF
VCkpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9s
KTsKKwl3aGlsZSAoMSk7Cit9CisKKworCit2b2lkCitwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFj
ZSh2b2lkKQoreworCXVpbnQzMl90IGNmZ19yZWc7CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBz
eXN0ZW1fcmVhZF80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljZmdfcmVnIHw9IE5F
VF9JTlRFUkZBQ0VfUkVTRVQ7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8K
KwlzeXN0ZW1fd3JpdGVfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisK
KwkvKnB1bHNlIGRlbGF5ICovCisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURF
TEFZKDEwMCk7CisJLyogc2V0IHJlc2V0IGJpdCB0byBMT1cgYWN0aXZlOyAqLworCWNmZ19yZWcg
PSAgc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyAm
PSB+KE5FVF9JTlRFUkZBQ0VfUkVTRVQpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBS
RVNFVF9DT05UUk9MLCBjZmdfcmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0g
MDsgaWkgPCAweEZGRjsgaWkrKykKKwkJREVMQVkoMTAwKTsKKwljZmdfcmVnID0gc3lzdGVtX3Jl
YWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyB8PSBORVRfSU5URVJG
QUNFX1JFU0VUOworCS8qIHNldCByZXNldCBiaXQgdG8gSElHSCBhY3RpdmU7ICovCisJc3lzdGVt
X3dyaXRlXzQoZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQorCit1bnNp
Z25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisKKwlyZXR1cm4gQ1BVX2Nsb2NrOworfQorCitz
dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2
aWNlX3Byb2JlLAkJZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAkJZWNv
bmFfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2lkZW50aWZ5LAkJZWNvbmFfaWRlbnRpZnkp
LAorCURFVk1FVEhPRChidXNfYWxsb2NfcmVzb3VyY2UsCQllY29uYV9hbGxvY19yZXNvdXJjZSks
CisJREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLAkJZWNvbmFfc2V0dXBfaW50ciksCisJREVWTUVU
SE9EKGJ1c190ZWFyZG93bl9pbnRyLAkJZWNvbmFfdGVhcmRvd25faW50ciksCisJREVWTUVUSE9E
KGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSwJZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1F
VEhPRChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNv
dXJjZSksCisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwJZWNvbmFfZ2V0X3Jlc291
cmNlX2xpc3QpLAorCURFVk1FVEhPRChidXNfc2V0X3Jlc291cmNlLAkJYnVzX2dlbmVyaWNfcmxf
c2V0X3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX2dldF9yZXNvdXJjZSwJCWJ1c19nZW5lcmlj
X3JsX2dldF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAllY29u
YV9yZWxlYXNlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkJZWNvbmFf
cHJpbnRfY2hpbGQpLAorCXswLCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2
ZXIgPSB7CisJImVjb25hYXJtIiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNv
bmFfc29mdGMpLAorfTsKK3N0YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklW
RVJfTU9EVUxFKGVjb25hYXJtLCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywg
MCwgMCk7CkluZGV4OiBhcm0vZWNvbmEvZWhjaV9lYnVzLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj
b25hL2VoY2lfZWJ1cy5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
WW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIGJhc2VkIG9uIGVoY2lfbWJ1
cy5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTUFSVkVMTCBJTlRFUk5BVElPTkFMIExURC4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm9wdF9idXMu
aCIKKworI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKworI2luY2x1ZGUgPHN5cy9zdGRp
bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj
aW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8
c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMu
aD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K
KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg
PHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9z
eC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgor
I2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVk
ZSA8c3lzL3JtYW4uaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5jbHVkZSA8ZGV2
L3VzYi91c2JkaS5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgorI2luY2x1ZGUg
PGRldi91c2IvdXNiX2J1c2RtYS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3Byb2Nlc3MuaD4K
KyNpbmNsdWRlIDxkZXYvdXNiL3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9j
b250cm9sbGVyLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5jbHVkZSA8ZGV2
L3VzYi9jb250cm9sbGVyL2VoY2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhj
aXJlZy5oPgorCisKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3QgZWhjaV9lYnVzX2F0dGFjaDsKK3N0
YXRpYyBkZXZpY2VfZGV0YWNoX3QgZWhjaV9lYnVzX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc2h1
dGRvd25fdCBlaGNpX2VidXNfc2h1dGRvd247CitzdGF0aWMgZGV2aWNlX3N1c3BlbmRfdCBlaGNp
X2VidXNfc3VzcGVuZDsKK3N0YXRpYyBkZXZpY2VfcmVzdW1lX3QgZWhjaV9lYnVzX3Jlc3VtZTsK
KworCitzdGF0aWMgdm9pZCAqaWhfZXJyOworCisjZGVmaW5lCUVIQ0lfSENfREVWU1RSICJDTlMx
MVhYIFVTQiBFSENJIgorI2RlZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKK3N0
YXRpYyBpbnQKK2VoY2lfZWJ1c19zdXNwZW5kKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0
Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1
c19nZW5lcmljX3N1c3BlbmQoc2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVo
Y2lfc3VzcGVuZChzYyk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVz
X3Jlc3VtZShkZXZpY2VfdCBzZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKHNlbGYpOworCisJZWhjaV9yZXN1bWUoc2MpOworCisJYnVzX2dlbmVyaWNfcmVzdW1l
KHNlbGYpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3NodXRk
b3duKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29m
dGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1c19nZW5lcmljX3NodXRkb3duKHNlbGYp
OworCWlmIChlcnIpCisJCXJldHVybiAoZXJyKTsKKwllaGNpX3NodXRkb3duKHNjKTsKKworCXJl
dHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19wcm9iZShkZXZpY2VfdCBzZWxm
KQoreworCisJZGV2aWNlX3NldF9kZXNjKHNlbGYsIEVIQ0lfSENfREVWU1RSKTsKKworCXJldHVy
biAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfYXR0YWNo
KGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMo
c2VsZik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisK
KwkvKiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19idXMucGFyZW50ID0g
c2VsZjsKKwlzYy0+c2NfYnVzLmRldmljZXMgPSBzYy0+c2NfZGV2aWNlczsKKwlzYy0+c2NfYnVz
LmRldmljZXNfbWF4ID0gRUhDSV9NQVhfREVWSUNFUzsKKworCS8qIGdldCBhbGwgRE1BIG1lbW9y
eSAqLworCWlmICh1c2JfYnVzX21lbV9hbGxvY19hbGwoJnNjLT5zY19idXMsCisJICAgIFVTQl9H
RVRfRE1BX1RBRyhzZWxmKSwgJmVoY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChF
Tk9NRU0pOworCX0KKworCXNjLT5zY19idXMudXNicmV2ID0gVVNCX1JFVl8yXzA7CisKKwlyaWQg
PSAwOworCXNjLT5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KHNlbGYsIFNZU19S
RVNfTUVNT1JZLAorCSAgICAmcmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2MtPnNjX2lvX3Jlcykg
eworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCWdv
dG8gZXJyb3I7CisJfQorCXNjLT5zY19pb190YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPnNjX2lv
X3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19yZXMpOworCisJLypt
YWdpYywgdW5kb2N1bWVudGVkIGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3BhY2Vfd3JpdGVfNCgo
c2MpLT5zY19pb190YWcsIGJzaCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQo
KHNjKS0+c2NfaW9fdGFnLCBic2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7CisKKwlERUxBWSgx
MDAwKTsKKworCXNjLT5zY19pb19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJl
Z2lvbihzYy0+c2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2MtPnNjX2lvX3NpemUs
ICZzYy0+c2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24g
VVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShzZWxmKSk7CisKKwly
aWQgPSAwOworCXNjLT5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBT
WVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAo
c2MtPnNjX2lycV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBu
b3QgYWxsb2NhdGUgaXJxXG4iKTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJu
IChFTlhJTyk7CisJfQorCisJc2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChzZWxm
LCAidXNidXMiLCAtMSk7CisJaWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJZGV2aWNlX3ByaW50
ZihzZWxmLCAiQ291bGQgbm90IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9
CisJZGV2aWNlX3NldF9pdmFycyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2NfYnVzKTsKKwlkZXZp
Y2Vfc2V0X2Rlc2Moc2MtPnNjX2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7CisKKwlzcHJpbnRm
KHNjLT5zY192ZW5kb3IsICJDYXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1cF9pbnRyKHNlbGYs
c2MtPnNjX2lycV9yZXMsCisJICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwgTlVMTCwK
KwkgICAgKGRyaXZlcl9pbnRyX3QgKillaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2Nf
aW50cl9oZGwpOworCWlmIChlcnIpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90
IHNldHVwIGVycm9yIGlycSwgJWRcbiIsIGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8g
ZXJyb3I7CisJfQorCisJZXJyID0gZWhjaV9pbml0KHNjKTsKKwlpZiAoIWVycikgeworCQllcnIg
PSBkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChzYy0+c2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJy
KSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIlVTQiBpbml0IGZhaWxlZCBlcnI9JWRcbiIsIGVy
cik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7CisKK2Vycm9yOgorCWVoY2lfZWJ1
c19kZXRhY2goc2VsZik7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lf
ZWJ1c19kZXRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNl
X2dldF9zb2Z0YyhzZWxmKTsKKwlkZXZpY2VfdCBiZGV2OworCWludCBlcnI7CisKKwlpZiAoc2Mt
PnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRh
Y2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoc2VsZiwgYmRldik7CisJfQorCS8qIGR1
cmluZyBtb2R1bGUgdW5sb2FkIHRoZXJlIGFyZSBsb3RzIG9mIGNoaWxkcmVuIGxlZnRvdmVyICov
CisJZGV2aWNlX2RlbGV0ZV9hbGxfY2hpbGRyZW4oc2VsZik7CisKKwkvKgorCSAqIGRpc2FibGUg
aW50ZXJydXB0cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBzd2l0Y2hlZCBvbiBpbiBlaGNpX2luaXQK
KwkgKi8KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlFV1JJVEU0KHNjLCBFSENJX1VTQklOVFIs
IDApOworCQlFV1JJVEU0KHNjLCBVU0JfQlJJREdFX0lOVFJfTUFTSywgMCk7CisJfQorCWlmIChz
Yy0+c2NfaXJxX3JlcyAmJiBzYy0+c2NfaW50cl9oZGwpIHsKKwkJLyoKKwkJICogb25seSBjYWxs
IGVoY2lfZGV0YWNoKCkgYWZ0ZXIgZWhjaV9pbml0KCkKKwkJICovCisJCWVoY2lfZGV0YWNoKHNj
KTsKKworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihzZWxmLCBzYy0+c2NfaXJxX3Jlcywgc2Mt
PnNjX2ludHJfaGRsKTsKKworCQlpZiAoZXJyKQorCQkJLyogWFhYIG9yIHNob3VsZCB3ZSBwYW5p
Yz8gKi8KKwkJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxkIG5vdCB0ZWFyIGRvd24gaXJxLCAl
ZFxuIiwKKwkJCSAgICBlcnIpOworCQlzYy0+c2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAo
c2MtPnNjX2lycV9yZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19J
UlEsIDEsIHNjLT5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlp
ZiAoc2MtPnNjX2lvX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVT
X01FTU9SWSwgMCwKKwkJICAgIHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVM
TDsKKwl9CisJdXNiX2J1c19tZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVf
aHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBl
aGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRl
dmljZV9wcm9iZSwgZWhjaV9lYnVzX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwg
ZWhjaV9lYnVzX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIGVoY2lfZWJ1c19k
ZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwgZWhjaV9lYnVzX3N1c3BlbmQpLAor
CURFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCBlaGNpX2VidXNfcmVzdW1lKSwKKwlERVZNRVRIT0Qo
ZGV2aWNlX3NodXRkb3duLCBlaGNpX2VidXNfc2h1dGRvd24pLAorCisJLyogQnVzIGludGVyZmFj
ZSAqLworCURFVk1FVEhPRChidXNfcHJpbnRfY2hpbGQsIGJ1c19nZW5lcmljX3ByaW50X2NoaWxk
KSwKKworCXswLCAwfQorfTsKKworc3RhdGljIGRyaXZlcl90IGVoY2lfZHJpdmVyID0geworCSJl
aGNpIiwKKwllaGNpX21ldGhvZHMsCisJc2l6ZW9mKGVoY2lfc29mdGNfdCksCit9OworCitzdGF0
aWMgZGV2Y2xhc3NfdCBlaGNpX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVoY2ksIGVjb25h
YXJtLCBlaGNpX2RyaXZlciwgZWhjaV9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGVo
Y2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBhcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vj
b25hX3JlZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmCV9BUk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9S
RUdfSAorCisjZGVmaW5lCUVDT05BX1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lCUVDT05B
X0RSQU1fQkFTRQkweDAwMDAwMDAwIC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICov
CisKKyNkZWZpbmUJRUNPTkFfU0RSQU1fQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lCUVDT05BX1NE
UkFNX1NJWkUJMHgxMDAwMDAwCisKKworI2RlZmluZQlFQ09OQV9JT19CQVNFCQkweDcwMDAwMDAw
CisjZGVmaW5lCUVDT05BX0lPX1NJWkUJCTB4MEUwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX0JB
U0UJCTB4MEQwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX1NJWkUJCTB4MDEwMDAwMDAKKworI2Rl
ZmluZQlFQ09OQV9VQVJUX0JBU0UJMHgwODAwMDAwMAorI2RlZmluZQlFQ09OQV9VQVJUX1NJWkUJ
MHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVUFSVAkJMHhBCisKKyNkZWZpbmUJRUNPTkFf
VElNRVJfQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lCUVDT05BX1RJTUVSX1NJWkUJMHgwMTAwMDAw
MAorI2RlZmluZQlFQ09OQV9JUlFfVElNRVJfMQkwCisjZGVmaW5lCUVDT05BX0lSUV9USU1FUl8y
CTEKKyNkZWZpbmUJRUNPTkFfSVJRX09IQ0kJCTIzCisjZGVmaW5lCUVDT05BX0lSUV9FSENJCQky
NAorCisjZGVmaW5lCUVDT05BX05FVF9CQVNFCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFf
U1lTVEVNX0JBU0UJMHgwNzAwMDAwMAorI2RlZmluZQlFQ09OQV9TWVNURU1fU0laRQkweDAxMDAw
MDAwCisKKyNkZWZpbmUJRUNPTkFfTkVUX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09O
QV9DRklfUEJBU0UJMHgxMDAwMDAwMAorI2RlZmluZQlFQ09OQV9DRklfVkJBU0UJMHhEMDAwMDAw
MAorI2RlZmluZQlFQ09OQV9DRklfU0laRQkJMHgxMDAwMDAwMAorCisjZGVmaW5lCUVDT05BX0lS
UV9TVEFUVVMJMTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMJCTE5CisjZGVmaW5lCUVDT05BX0lS
UV9GU1JDCQkyMAorI2RlZmluZQlFQ09OQV9JUlFfVFNRRQkJMjEKKyNkZWZpbmUJRUNPTkFfSVJR
X0ZTUUYJCTIyCisKKyNkZWZpbmUJRUNPTkFfSVJRX1NZU1RFTQkwCisKKyNkZWZpbmUJRUNPTkFf
RUhDSV9QQkFTRQkweEM4MDAwMDAwCisjZGVmaW5lCUVDT05BX0VIQ0lfVkJBU0UJMHhGODAwMDAw
MAorI2RlZmluZQlFQ09OQV9FSENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfT0hD
SV9QQkFTRQkweEMwMDAwMDAwCisjZGVmaW5lCUVDT05BX09IQ0lfVkJBU0UJMHhGMDAwMDAwMAor
I2RlZmluZQlFQ09OQV9PSENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfVVNCX1NJ
WkUJCTB4ZjAwMDAwMAorCisvKkludGVycnVwdCBjb250cm9sbGVyKi8KKyNkZWZpbmUJSU5UQ19M
RVZFTF9UUklHR0VSCTAKKyNkZWZpbmUJSU5UQ19FREdFX1RSSUdHRVIJMQorI2RlZmluZQlJTlRD
X0FDVElWRV9ISUdICTAKKyNkZWZpbmUJSU5UQ19BQ1RJVkVfTE9XCTEKKy8qCisgKiBkZWZpbmUg
cmlzaW5nL2ZhbGxpbmcgZWRnZSBmb3IgZWRnZSB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZQlJ
TlRDX1JJU0lOR19FREdFCTAKKyNkZWZpbmUJSU5UQ19GQUxMSU5HX0VER0UJMQorCisjZGVmaW5l
CUlOVENfSU5URVJSVVBUX1NPVVJDRV9SRUdfT0ZGU0VUCQkweDAwCisjZGVmaW5lCUlOVENfSU5U
RVJSVVBUX01BU0tfUkVHX09GRlNFVAkJCTB4MDQKKyNkZWZpbmUJSU5UQ19JTlRFUlJVUFRfQ0xF
QVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQJMHgwOAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9U
UklHR0VSX01PREVfUkVHX09GRlNFVAkJMHgwQworI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklH
R0VSX0xFVkVMX1JFR19PRkZTRVQJMHgxMAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9TVEFUVVNf
UkVHX09GRlNFVAkJMHgxNAorI2RlZmluZQlJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VU
CQkweDE4CisjZGVmaW5lCUlOVENfU09GVFdBUkVfSU5URVJSVVBUX1JFR19PRkZTRVQJCTB4MUMK
KworCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxsaW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBt
b2RlCisgKi8KKyNkZWZpbmUJSU5UQ19SSVNJTkdfRURHRQkwCisjZGVmaW5lCUlOVENfRkFMTElO
R19FREdFCTEKKworCisjZGVmaW5lCVRJTUVSX1RNMV9DT1VOVEVSX1JFRwkJMHgwMAorI2RlZmlu
ZQlUSU1FUl9UTTFfTE9BRF9SRUcJCTB4MDQKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMV9SRUcJ
CTB4MDgKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMl9SRUcJCTB4MEMKKworI2RlZmluZQlUSU1F
Ul9UTTJfQ09VTlRFUl9SRUcJCTB4MTAKKyNkZWZpbmUJVElNRVJfVE0yX0xPQURfUkVHCQkweDE0
CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDFfUkVHCQkweDE4CisjZGVmaW5lCVRJTUVSX1RNMl9N
QVRDSDJfUkVHCQkweDFDCisKKyNkZWZpbmUJVElNRVJfVE1fQ1JfUkVHCQkweDMwCisjZGVmaW5l
CVRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRwkweDM0CisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfTUFT
S19SRUcJCTB4MzgKKworI2RlZmluZQlUSU1FUl9UTV9SRVZJU0lPTl9SRUcJCTB4M0MKKworCisj
ZGVmaW5lCUlOVENfVElNRVIxX0JJVF9JTkRFWAkJMAorCisjZGVmaW5lCVRJTUVSMV9VUF9ET1dO
X0NPVU5UCQkoMTw8OSkKKyNkZWZpbmUJVElNRVIyX1VQX0RPV05fQ09VTlQJCSgxPDwxMCkKKwor
I2RlZmluZQlUSU1FUjFfTUFUQ0gxX0lOVFIJCSgxPDwwKQorI2RlZmluZQlUSU1FUjFfTUFUQ0gy
X0lOVFIJCSgxPDwxKQorI2RlZmluZQlUSU1FUjFfT1ZFUkZMT1dfSU5UUgkJKDE8PDIpCisKKwor
I2RlZmluZQlUSU1FUjJfTUFUQ0gxX0lOVFIJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfTUFUQ0gy
X0lOVFIJCSgxPDw0KQorI2RlZmluZQlUSU1FUjJfT1ZFUkZMT1dfSU5UUgkJKDE8PDUpCisKKwor
I2RlZmluZQlUSU1FUl9DTE9DS19TT1VSQ0VfUENMSwkwCisjZGVmaW5lCVRJTUVSX0NMT0NLX1NP
VVJDRV9FWFRfQ0xLCTEKKworLyoKKyAqIGRlZmluZSBpbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCisg
Ki8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCQkwCisjZGVmaW5lCUlOVENfRURHRV9UUklH
R0VSCQkxCisKKworI2RlZmluZQlJTlRDX1RSSUdHRVJfVU5LTk9XTiAtMQorCisjZGVmaW5lCVRJ
TUVSMV9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDIpCisjZGVmaW5lCVRJTUVSMl9PVkVSRkxPV19J
TlRFUlJVUFQJKDE8PDUpCisjZGVmaW5lCVRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHCTB4MzQK
KworCisjZGVmaW5lCVRJTUVSMV9FTkFCTEUJCQkoMTw8MCkKKyNkZWZpbmUJVElNRVIxX0NMT0NL
X1NPVVJDRQkJKDE8PDEpCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19FTkFCTEUJCSgxPDwyKQor
CisKKyNkZWZpbmUJVElNRVIyX0VOQUJMRQkJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfQ0xPQ0tf
U09VUkNFCQkoMTw8NCkKKyNkZWZpbmUJVElNRVIyX09WRVJGTE9XX0VOQUJMRQkJKDE8PDUpCisK
KworI2RlZmluZQlUSU1FUl8xCQkJMQorCisjZGVmaW5lCUVDX1VBUlRfQ0xPQ0sJCQkxNDc2OTIw
MAorI2RlZmluZQlFQ19VQVJUX1JFR1NISUZUCQkyCisKKyNkZWZpbmUJU1lTVEVNX0NMT0NLCQkJ
MHgxNAorI2RlZmluZQlSRVNFVF9DT05UUk9MCQkJMHg0CisjZGVmaW5lCUdMT0JBTF9SRVNFVAkJ
CTB4MQorI2RlZmluZQlORVRfSU5URVJGQUNFX1JFU0VUCQkoMHgxIDw8IDQpCisKKyNlbmRpZgpJ
bmRleDogYXJtL2Vjb25hL2lmX2VjZXZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9l
Y2V2YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMg
TnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
CV9JRkVDRVZBUl9ICisjZGVmaW5lCV9JRkVDRVZBUl9ICisKKyNkZWZpbmUJRUNFX01BWF9UWF9C
VUZGRVJTCTEyOAorI2RlZmluZQlFQ0VfTUFYX1JYX0JVRkZFUlMJMTI4CisjZGVmaW5lCU1BWF9G
UkFHTUVOVAkJMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8KKwl1aW50
MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0aDoxNjsK
KworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWludDMyX3QJ
CXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7IC8qaXAg
Y2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVpbnQzMl90
CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkvKiBmb3Jj
ZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9wcmlvcml0
eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMyX3QJCWlu
dGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmlyc3Rfc2Vn
Ki8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVvcjoxOwor
CS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8KKwkvKnZp
ZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLworCXVpbnQz
Ml90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJc2lkOjM7
CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1aW50MzJf
dAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQyOworCit9
IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRhX3B0cjsK
Kwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJfdAkJaXBm
OjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJfdAkJc3A6
MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJZW9yOjE7
CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90CQl1bnVz
ZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8geworCXN0cnVj
dCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190ICpkZXNj
OworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsKKwlidXNf
ZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0cnVjdCBl
Y2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIgKi8KKwlz
dHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHggc2NfbXR4
X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4IG11dGV4
ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKworCWJ1c19k
bWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisKKwlkZXZp
Y2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkgY2hpbGQg
bWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAqLworCXZv
aWQgKmludHJoYW5kX3FmOwkJLyogcXVldWUgZnVsbCAqLworCXZvaWQgKmludHJoYW5kX3R4OwkJ
LyogdHggY29tcGxldGUgKi8KKwl2b2lkICppbnRyaGFuZF9zdGF0dXM7CQkvKiBlcnJvciBzdGF0
dXMgKi8KKworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlz
dHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291
cmNlICppcnFfcmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFf
cmVzX3N0YXR1czsgLyogc3RhdHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8q
IE1lbW9yeSByZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sg
Y2FsbG91dCAqLworCisJc3RydWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0IHRhc2sJc2Nf
aW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1Y3QgdGFzawlz
Y190eF90YXNrOworCisJYnVzX2RtYW1hcF90CWRtYW1hcF9yaW5nX3R4OworCWJ1c19kbWFtYXBf
dAlkbWFtYXBfcmluZ19yeDsKKwlidXNfZG1hbWFwX3QJcnhfc3BhcmVtYXA7CisKKwkvKmRtYSB0
YWcgZm9yIHJpbmcqLworCWJ1c19kbWFfdGFnX3QJZG1hdGFnX3JpbmdfdHg7CisJYnVzX2RtYV90
YWdfdAlkbWF0YWdfcmluZ19yeDsKKworCS8qZG1hIHRhZyBmb3IgZGF0YSovCisJYnVzX2RtYV90
YWdfdAlkbWF0YWdfZGF0YV90eDsKKwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3J4OworCisJ
Lyp0aGUgcmluZyovCisJZXRoX3R4X2Rlc2NfdCoJZGVzY190eDsKKwlldGhfcnhfZGVzY190Kglk
ZXNjX3J4OworCisJLypyaW5nIHBoeXNpY2FsIGFkZHJlc3MqLworCWJ1c19hZGRyX3QJcmluZ19w
YWRkcl90eDsKKwlidXNfYWRkcl90CXJpbmdfcGFkZHJfcng7CisKKwkvKmluZGV4IG9mIGxhc3Qg
cmVjZWl2ZWQgZGVzY3JpcHRvciovCisJdWludDMyX3QgbGFzdF9yeDsKKwlzdHJ1Y3QgcnhfZGVz
Y19pbmZvIHJ4X2Rlc2NbRUNFX01BWF9SWF9CVUZGRVJTXTsKKworCS8qIHR4IHByb2R1Y2VyIGlu
ZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBpbmRleCAqLworCXVp
bnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCovCisJdWludDMyX3QgZGVzY19jdXJy
X3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhfVFhfQlVGRkVSU107
Cit9OworCisKK3N0cnVjdCBhcmxfdGFibGVfZW50cnlfdCB7CisJdWludDMyX3QgY21kX2NvbXBs
ZXRlOiAxOworCXVpbnQzMl90IHRhYmxlX2VuZDogMTsKKwl1aW50MzJfdCBzZWFyY2hfbWF0Y2g6
IDE7CisJdWludDMyX3QgZmlsdGVyOjE7IC8qaWYgc2V0LCBwYWNrZXQgd2lsbCBiZSBkcm9wcGVk
ICovCisJdWludDMyX3Qgdmxhbl9tYWM6MTsgLyppbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBn
YXRld2F5IG1hYyBhZGRyZXNzKi8KKwl1aW50MzJfdCB2bGFuX2dpZDozOyAvKnZsYW4gaWQqLwor
CXVpbnQzMl90IGFnZV9maWVsZDozOworCXVpbnQzMl90IHBvcnRfbWFwOjM7CisJIC8qNDggYml0
IG1hYyBhZGRyZXNzKi8KKwl1aW50OF90IG1hY19hZGRyWzZdOworCXVpbnQ4X3QgcGFkWzJdOwor
fTsKKworc3RydWN0IG1hY19saXN0eworCWNoYXIgbWFjX2FkZHJbNl07CisJc3RydWN0IG1hY19s
aXN0ICpuZXh0OworfTsKKworI2VuZGlmCkluZGV4OiBhcm0vZWNvbmEvb2hjaV9lYy5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGFybS9lY29uYS9vaGNpX2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEv
b2hjaV9lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0MSBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4K
KyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVk
ZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5
c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNp
bmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNs
dWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9j
b25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgor
I2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1
ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8ZGV2
L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYv
dXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVk
ZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4K
KworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNi
L3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvb2hjaS5oPgorI2luY2x1
ZGUgPGRldi91c2IvY29udHJvbGxlci9vaGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5o
PgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorCisjZGVmaW5lCU1FTV9SSUQJ
MAorCitzdGF0aWMgZGV2aWNlX3Byb2JlX3Qgb2hjaV9lY19wcm9iZTsKK3N0YXRpYyBkZXZpY2Vf
YXR0YWNoX3Qgb2hjaV9lY19hdHRhY2g7CitzdGF0aWMgZGV2aWNlX2RldGFjaF90IG9oY2lfZWNf
ZGV0YWNoOworCitzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyB7CisJc3RydWN0IG9oY2lfc29mdGMgc2Nf
b2hjaTsJLyogbXVzdCBiZSBmaXJzdCAqLworfTsKKworc3RhdGljIGludAorb2hjaV9lY19wcm9i
ZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIGludGVncmF0
ZWQgT0hDSSBjb250cm9sbGVyIik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisK
K3N0YXRpYyBpbnQKK29oY2lfZWNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNf
b2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJYnVzX3NwYWNlX2hhbmRs
ZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNvbWUgYnVz
IGZpZWxkcyAqLworCXNjLT5zY19vaGNpLnNjX2J1cy5wYXJlbnQgPSBkZXY7CisJc2MtPnNjX29o
Y2kuc2NfYnVzLmRldmljZXMgPSBzYy0+c2Nfb2hjaS5zY19kZXZpY2VzOworCXNjLT5zY19vaGNp
LnNjX2J1cy5kZXZpY2VzX21heCA9IE9IQ0lfTUFYX0RFVklDRVM7CisKKwkvKiBnZXQgYWxsIERN
QSBtZW1vcnkgKi8KKwlpZiAodXNiX2J1c19tZW1fYWxsb2NfYWxsKCZzYy0+c2Nfb2hjaS5zY19i
dXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhkZXYpLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKSkg
eworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCXNjLT5zY19vaGNpLnNjX2RldiA9IGRldjsKKwor
CXJpZCA9IE1FTV9SSUQ7CisKKwlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVz
b3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJICAgICZyaWQsIFJGX0FDVElWRSk7CisK
KwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pb19yZXMpKSB7CisJCWVyciA9IEVOT01FTTsKKwkJZ290
byBlcnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfaW9fdGFnID0gcm1hbl9nZXRfYnVzdGFnKHNj
LT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19v
aGNpLnNjX2lvX3Jlcyk7CisJLyogVW5kb2N1bWVudGVkIG1hZ2ljIGluaXRpYWxpemF0aW9uICov
CisJYnVzX3NwYWNlX3dyaXRlXzQoKHNjKS0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwweDA0LCAw
eDE0Nik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNo
LDB4NDQsIDB4MDIwMCk7CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19vaGNpLnNjX2lvX3Np
emUgPSBybWFuX2dldF9zaXplKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisKKwlpZiAoYnVzX3Nw
YWNlX3N1YnJlZ2lvbihzYy0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAg
ICBzYy0+c2Nfb2hjaS5zY19pb19zaXplLCAmc2MtPnNjX29oY2kuc2NfaW9faGRsKSAhPSAwKQor
CQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJ
ICAgIGRldmljZV9nZXRfbmFtZShkZXYpKTsKKworCXJpZCA9IDA7CisJc2MtPnNjX29oY2kuc2Nf
aXJxX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwK
KwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKSkgeworCQln
b3RvIGVycm9yOworCX0KKwlzYy0+c2Nfb2hjaS5zY19idXMuYmRldiA9IGRldmljZV9hZGRfY2hp
bGQoZGV2LCAidXNidXMiLCAtMSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYpKSB7
CisJCWdvdG8gZXJyb3I7CisJfQorCWRldmljZV9zZXRfaXZhcnMoc2MtPnNjX29oY2kuc2NfYnVz
LmJkZXYsICZzYy0+c2Nfb2hjaS5zY19idXMpOworCisJc3RybGNweShzYy0+c2Nfb2hjaS5zY192
ZW5kb3IsICJDYXZpdW0iLAorCQlzaXplb2Yoc2MtPnNjX29oY2kuc2NfdmVuZG9yKSk7CisKKyNp
ZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDMxKQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRl
diwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBT
QUZFLCAgTlVMTCwKKwkgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2MsCisJ
ICAgICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZWxzZQorCWVyciA9IGJ1c19zZXR1cF9p
bnRyKGRldiwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElO
VFJfTVBTQUZFLAorCSAgICAoZHJpdmVyX2ludHJfdCAqKW9oY2lfaW50ZXJydXB0LCBzYywKKwkg
ICAgJnNjLT5zY19vaGNpLnNjX2ludHJfaGRsKTsKKyNlbmRpZgorCWlmIChlcnIpIHsKKwkJc2Mt
PnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1c19z
cGFjZV93cml0ZV80KHNjLT5zY19vaGNpLnNjX2lvX3RhZywgc2MtPnNjX29oY2kuc2NfaW9faGRs
LAorCSAgICBPSENJX0NPTlRST0wsIDApOworCisJZXJyID0gb2hjaV9pbml0KCZzYy0+c2Nfb2hj
aSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goc2MtPnNj
X29oY2kuc2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWdvdG8gZXJyb3I7CisJfQor
CXJldHVybiAoMCk7CisKK2Vycm9yOgorCW9oY2lfZWNfZGV0YWNoKGRldik7CisJcmV0dXJuIChF
TlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfZGV0YWNoKGRldmljZV90IGRldikKK3sK
KwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJZGV2
aWNlX3QgYmRldjsKKwlpbnQgZXJyOworCisJaWYgKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSB7
CisJCWJkZXYgPSBzYy0+c2Nfb2hjaS5zY19idXMuYmRldjsKKwkJZGV2aWNlX2RldGFjaChiZGV2
KTsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9k
dWxlIHVubG9hZCB0aGVyZSBhcmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmlj
ZV9kZWxldGVfYWxsX2NoaWxkcmVuKGRldik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nf
b2hjaS5zY19pb190YWcsIHNjLT5zY19vaGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9M
LCAwKTsKKworCWlmIChzYy0+c2Nfb2hjaS5zY19pcnFfcmVzICYmIHNjLT5zY19vaGNpLnNjX2lu
dHJfaGRsKSB7CisJCS8qCisJCSAqIG9ubHkgY2FsbCBvaGNpX2RldGFjaCgpIGFmdGVyIG9oY2lf
aW5pdCgpCisJCSAqLworCQlvaGNpX2RldGFjaCgmc2MtPnNjX29oY2kpOworCisJCWVyciA9IGJ1
c190ZWFyZG93bl9pbnRyKGRldiwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkJICAgIHNjLT5z
Y19vaGNpLnNjX2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOwor
CX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJj
ZShkZXYsIFNZU19SRVNfSVJRLCAwLAorCQkgICAgc2MtPnNjX29oY2kuc2NfaXJxX3Jlcyk7CisJ
CXNjLT5zY19vaGNpLnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2Nf
aW9fcmVzKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIE1F
TV9SSUQsCisJCSAgICBzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCQlzYy0+c2Nfb2hjaS5zY19p
b19yZXMgPSBOVUxMOworCX0KKwl1c2JfYnVzX21lbV9mcmVlX2FsbCgmc2MtPnNjX29oY2kuc2Nf
YnVzLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBkZXZpY2VfbWV0aG9kX3Qgb2hjaV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFj
ZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJvYmUpLAorCURFVk1FVEhP
RChkZXZpY2VfYXR0YWNoLCBvaGNpX2VjX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRh
Y2gsIG9oY2lfZWNfZGV0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBidXNfZ2Vu
ZXJpY19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19w
cmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAsIDB9Cit9OworCitz
dGF0aWMgZHJpdmVyX3Qgb2hjaV9kcml2ZXIgPSB7CisJIm9oY2kiLAorCW9oY2lfbWV0aG9kcywK
KwlzaXplb2Yoc3RydWN0IGVjX29oY2lfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3Qg
b2hjaV9kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShvaGNpLCBlY29uYWFybSwgb2hjaV9kcml2
ZXIsIG9oY2lfZGV2Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChvaGNpLCB1c2IsIDEsIDEs
IDEpOwpJbmRleDogYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj
b25hL3VhcnRfY3B1X2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvdWFydF9jcHVfZWMu
YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAib3B0X3VhcnQuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo
IiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5
c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNp
bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2lu
Y2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisj
aW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29u
YV92YXIuaD4KKworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNl
X3RhZ190IHVhcnRfYnVzX3NwYWNlX21lbTsKKworaW50Cit1YXJ0X2NwdV9lcXJlcyhzdHJ1Y3Qg
dWFydF9iYXMgKmIxLCBzdHJ1Y3QgdWFydF9iYXMgKmIyKQoreworCisJcmV0dXJuICgoYjEtPmJz
aCA9PSBiMi0+YnNoICYmIGIxLT5ic3QgPT0gYjItPmJzdCkgPyAxIDogMCk7Cit9CisKK2ludAor
dWFydF9jcHVfZ2V0ZGV2KGludCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9kZXZpbmZvICpkaSkKK3sK
KwlzdHJ1Y3QgdWFydF9jbGFzcyAqY2xhc3MgPSAmdWFydF9uczgyNTBfY2xhc3M7CisKKwlkaS0+
b3BzID0gdWFydF9nZXRvcHMoY2xhc3MpOworCWRpLT5iYXMuY2hhbiA9IDA7CisJZGktPmJhcy5i
c3QgPSBvYmlvX3RhZzsKKworCWlmIChidXNfc3BhY2VfbWFwKGRpLT5iYXMuYnN0LCBFQ09OQV9J
T19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLAorCSAgICBFQ09OQV9VQVJUX1NJWkUsCisJICAgIDAs
ICZkaS0+YmFzLmJzaCkgIT0gMCkgeworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlkaS0+YmF1
ZHJhdGUgPSAwOworCWRpLT5iYXMucmVnc2hmdCA9IEVDX1VBUlRfUkVHU0hJRlQ7CisJZGktPmJh
cy5yY2xrID0gRUNfVUFSVF9DTE9DSyA7CisJZGktPmRhdGFiaXRzID0gODsKKwlkaS0+c3RvcGJp
dHMgPSAxOworCWRpLT5wYXJpdHkgPSBVQVJUX1BBUklUWV9OT05FOworCXVhcnRfYnVzX3NwYWNl
X21lbSA9IG9iaW9fdGFnOworCXVhcnRfYnVzX3NwYWNlX2lvID0gTlVMTDsKKworCXJldHVybiAo
MCk7Cit9CkluZGV4OiBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0v
ZWNvbmEvdWFydF9idXNfZWMuYwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS91YXJ0X2J1c19l
Yy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyBy
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
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg
PHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5o
PgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNp
bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8
bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1
ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4K
KworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2Vj
X3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19t
ZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2Vf
cHJvYmUsCXVhcnRfZWNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl1YXJ0X2J1
c19hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAl1YXJ0X2J1c19kZXRhY2gpLAor
CXsgMCwgMCB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgdWFydF9lY19kcml2ZXIgPSB7CisJdWFy
dF9kcml2ZXJfbmFtZSwKKwl1YXJ0X2VjX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB1YXJ0X3Nv
ZnRjKSwKK307CisKK3N0YXRpYyBpbnQKK3VhcnRfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQorewor
CXN0cnVjdAl1YXJ0X3NvZnRjICpzYzsKKwlpbnQgc3RhdHVzOworCisJc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7CisJc2MtPnNjX2NsYXNzID0gJnVhcnRfbnM4MjUwX2NsYXNzOworCXN0YXR1
cyA9IHVhcnRfYnVzX3Byb2JlKGRldiwgRUNfVUFSVF9SRUdTSElGVCwgRUNfVUFSVF9DTE9DSywg
MCwgMCk7CisJcmV0dXJuIChzdGF0dXMpOworfQorCitEUklWRVJfTU9EVUxFKHVhcnQsIGVjb25h
YXJtLCB1YXJ0X2VjX2RyaXZlciwgdWFydF9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0vZWNv
bmEvc3RkLmVjb25hCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9u
IDApCisrKyBhcm0vZWNvbmEvc3RkLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA
CisjICRGcmVlQlNEJAorCitmaWxlcwkiLi4vZWNvbmEvZmlsZXMuZWNvbmEiCitjcHUJCUNQVV9G
QTUyNgorbWFrZW9wdGlvbnMJQ09ORl9DRkxBR1M9LW1hcmNoPWFybXY0CitvcHRpb25zCVBIWVNB
RERSPTB4MDAwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCittYWtl
b3B0aW9ucwlLRVJOVklSVEFERFI9MHhjMTAwMDAwMAorCitvcHRpb25zCUtFUk5QSFlTQUREUj0w
eDAxMDAwMDAwCitvcHRpb25zCUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCSMgVXNlZCBpbiBsZHNj
cmlwdC5hcm0KK29wdGlvbnMJRkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMJTE9BREVSUkFN
QUREUj0weDAwMDAwMDAwCitvcHRpb25zCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgwMDEwMDAw
MApJbmRleDogY29uZi9NYWtlZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9NYWtlZmlsZS5h
cm0JKHJldmlzaW9uIDIwMTM1OCkKKysrIGNvbmYvTWFrZWZpbGUuYXJtCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBACiAJJFMvJE0vJE0vY3B1ZnVuY19hc21fc2ExLlMgJFMvJE0vJE0v
Y3B1ZnVuY19hc21fYXJtMTAuUyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlLlMgJFMv
JE0vJE0vY3B1ZnVuY19hc20uUyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlX2MzLlMg
JFMvJE0vJE0vY3B1ZnVuY19hc21fYXJtdjVfZWMuUyBcCi0JJFMvJE0vJE0vY3B1ZnVuY19hc21f
c2hlZXZhLlMKKwkkUy8kTS8kTS9jcHVmdW5jX2FzbV9zaGVldmEuUyAkUy8kTS8kTS9jcHVmdW5j
X2FzbV9mYTUyNi5TCiBLRVJORUxfRVhUUkE9dHJhbXBvbGluZQogS0VSTkVMX0VYVFJBX0lOU1RB
TEw9a2VybmVsLmd6LnRyYW1wCiB0cmFtcG9saW5lOiAke0tFUk5FTF9LT30udHJhbXAKSW5kZXg6
IGNvbmYvb3B0aW9ucy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9vcHRpb25zLmFybQkocmV2aXNp
b24gMjAxMzU4KQorKysgY29uZi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMzYsMyAr
MzYsNCBAQAogQVQ5MV9CV0NUCQlvcHRfYXQ5MS5oCiBBVDkxX1RTQwkJb3B0X2F0OTEuaAogQVQ5
MV9LV0lLQllURQkJb3B0X2F0OTEuaAorQ1BVX0ZBNTI2CQlvcHRfZ2xvYmFsLmgKSW5kZXg6IGtl
cm4vdmZzX21vdW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Vybi92ZnNfbW91bnQuYwkocmV2aXNpb24g
MjAxMzU4KQorKysga2Vybi92ZnNfbW91bnQuYwkod29ya2luZyBjb3B5KQpAQCAtMTQwMyw2ICsx
NDAzLDExIEBACiAJc3RydWN0IHRpbWV2YWwgbGFzdGZhaWw7CiAJaW50IGN1cmZhaWwgPSAwOwog
CisJLyogdGVtcG9yYXJ5IHNvbHV0aW9uIGZvciB0aW1lb3V0IHdhaXRpbmcgZm9yIFVTQiBkaXNr
IHJvb3QKKwkgKiBmaWxlc3lzdGVtCisJICovCisJcGF1c2UoIldBSVQiLCBoeiAqIDEwKTsKKwog
CWZvciAoOzspIHsKIAkJRFJPUF9HSUFOVCgpOwogCQlnX3dhaXRpZGxlKCk7Cg==
--001636b144537453ad047c42ca50--



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