Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Apr 2011 08:34:33 -0700
From:      "Achim Leubner" <Achim_Leubner@pmc-sierra.com>
To:        "Ed Maste" <emaste@phaedrus.sandvine.ca>, "Scott Long" <scottl@samsco.org>
Cc:        freebsd-scsi@FreeBSD.org
Subject:   aac driver patch for FreeBSD 8.2
Message-ID:  <FD2BDBE06AC58549AE9E16C08B45675D04F88AD6@BBY1EXM10.pmc_nt.nt.pmc-sierra.bc.ca>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

------_=_NextPart_001_01CBF3A6.F7D71E12
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi Ed, Hi Scott,

=20

Attached you find an aac driver patch to support PMC-Sierra's SRC based =
controller family. It includes the following changes:

-          New hardware device id 0x28b interface=20

-          New XPORT header required

-          Sync. command interface: small changes, doorbell bits shifted

-          Async. Interface: different inbound queue handling, no =
outbound I2O queue available, using doorbell and response buffer in host =
memory for status

-          Changed AIF (adapter initiated FIB) interface=20

-          Passthrough (raw_srb) IOCTL handling changed

=20

The driver package shipped with the new controller family  is tested in =
an release cycle and I adapted the changes to the FreeBSD 8.2 inbox =
driver because we want to become inbox with that driver as soon as =
possible.=20

Any comments are greatly appreciated.

=20

Thanks,

Achim

=20

Achim Leubner

Firmware Design Engineer

PMC-Sierra Germany GmbH

Sitz/Registered Office: Ismaning bei Muenchen

Amtsgericht/Local Court Muenchen, HRB 189193

Gesch=E4ftsf=FChrer/Managing Director: Michael W. Zellner

=20


------_=_NextPart_001_01CBF3A6.F7D71E12
Content-Type: text/plain;
	name="fb82_aac.txt"
Content-Transfer-Encoding: base64
Content-Description: fb82_aac.txt
Content-Disposition: attachment;
	filename="fb82_aac.txt"

ZGlmZiAtcHJ1TiBvbGQvYWFjLmMgbmV3L2FhYy5jCi0tLSBvbGQvYWFjLmMJMjAxMS0wMy0zMSAx
NDo1NzozNC4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWMuYwkyMDExLTA0LTAxIDEyOjQyOjQ5
LjAwMDAwMDAwMCArMDAwMApAQCAtMiw3ICsyLDggQEAKICAqIENvcHlyaWdodCAoYykgMjAwMCBN
aWNoYWVsIFNtaXRoCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgU2NvdHQgTG9uZwogICogQ29weXJp
Z2h0IChjKSAyMDAwIEJTRGkKLSAqIENvcHlyaWdodCAoYykgMjAwMSBBZGFwdGVjLCBJbmMuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAgUE1DLVNpZXJyYSwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTk3LDcgKzk4LDcgQEAgc3RhdGljIGludAlhYWNfY2hlY2tfZmlybXdhcmUo
c3RydWN0IGFhYwogc3RhdGljIGludAlhYWNfaW5pdChzdHJ1Y3QgYWFjX3NvZnRjICpzYyk7CiBz
dGF0aWMgaW50CWFhY19zeW5jX2NvbW1hbmQoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50MzJf
dCBjb21tYW5kLAogCQkJCSB1X2ludDMyX3QgYXJnMCwgdV9pbnQzMl90IGFyZzEsIHVfaW50MzJf
dCBhcmcyLAotCQkJCSB1X2ludDMyX3QgYXJnMywgdV9pbnQzMl90ICpzcCk7CisJCQkJIHVfaW50
MzJfdCBhcmczLCB1X2ludDMyX3QgKnNwLCB1X2ludDMyX3QgKnIxKTsKIHN0YXRpYyBpbnQJYWFj
X3NldHVwX2ludHIoc3RydWN0IGFhY19zb2Z0YyAqc2MpOwogc3RhdGljIGludAlhYWNfZW5xdWV1
ZV9maWIoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBxdWV1ZSwKIAkJCQlzdHJ1Y3QgYWFjX2Nv
bW1hbmQgKmNtKTsKQEAgLTE4Miw2ICsxODMsMzMgQEAgc3RydWN0IGFhY19pbnRlcmZhY2UgYWFj
X3JrdF9pbnRlcmZhY2UgPQogCWFhY19ya3Rfc2V0X291dGJfcXVldWUKIH07CiAKKy8qIFBNQyBT
UkMgaW50ZXJmYWNlICovCitzdGF0aWMgaW50CWFhY19zcmNfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBh
YWNfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfcW5vdGlmeShzdHJ1Y3QgYWFjX3Nv
ZnRjICpzYywgaW50IHFiaXQpOworc3RhdGljIGludAlhYWNfc3JjX2dldF9pc3RhdHVzKHN0cnVj
dCBhYWNfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfY2xlYXJfaXN0YXR1cyhzdHJ1
Y3QgYWFjX3NvZnRjICpzYywgaW50IG1hc2spOworc3RhdGljIHZvaWQJYWFjX3NyY19zZXRfbWFp
bGJveChzdHJ1Y3QgYWFjX3NvZnRjICpzYywgdV9pbnQzMl90IGNvbW1hbmQsCisJCQkJICAgIHVf
aW50MzJfdCBhcmcwLCB1X2ludDMyX3QgYXJnMSwKKwkJCQkgICAgdV9pbnQzMl90IGFyZzIsIHVf
aW50MzJfdCBhcmczKTsKK3N0YXRpYyBpbnQJYWFjX3NyY19nZXRfbWFpbGJveChzdHJ1Y3QgYWFj
X3NvZnRjICpzYywgaW50IG1iKTsKK3N0YXRpYyB2b2lkCWFhY19zcmNfc2V0X2ludGVycnVwdHMo
c3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBlbmFibGUpOworc3RhdGljIGludCBhYWNfc3JjX3Nl
bmRfY29tbWFuZChzdHJ1Y3QgYWFjX3NvZnRjICpzYywgc3RydWN0IGFhY19jb21tYW5kICpjbSk7
CitzdGF0aWMgaW50IGFhY19zcmNfZ2V0X291dGJfcXVldWUoc3RydWN0IGFhY19zb2Z0YyAqc2Mp
Oworc3RhdGljIHZvaWQgYWFjX3NyY19zZXRfb3V0Yl9xdWV1ZShzdHJ1Y3QgYWFjX3NvZnRjICpz
YywgaW50IGluZGV4KTsKKworc3RydWN0IGFhY19pbnRlcmZhY2UgYWFjX3NyY19pbnRlcmZhY2Ug
PSB7CisJYWFjX3NyY19nZXRfZndzdGF0dXMsCisJYWFjX3NyY19xbm90aWZ5LAorCWFhY19zcmNf
Z2V0X2lzdGF0dXMsCisJYWFjX3NyY19jbGVhcl9pc3RhdHVzLAorCWFhY19zcmNfc2V0X21haWxi
b3gsCisJYWFjX3NyY19nZXRfbWFpbGJveCwKKwlhYWNfc3JjX3NldF9pbnRlcnJ1cHRzLAorCWFh
Y19zcmNfc2VuZF9jb21tYW5kLAorCWFhY19zcmNfZ2V0X291dGJfcXVldWUsCisJYWFjX3NyY19z
ZXRfb3V0Yl9xdWV1ZQorfTsKKwogLyogRGVidWdnaW5nIGFuZCBEaWFnbm9zdGljcyAqLwogc3Rh
dGljIHZvaWQJYWFjX2Rlc2NyaWJlX2NvbnRyb2xsZXIoc3RydWN0IGFhY19zb2Z0YyAqc2MpOwog
c3RhdGljIGNoYXIJKmFhY19kZXNjcmliZV9jb2RlKHN0cnVjdCBhYWNfY29kZV9sb29rdXAgKnRh
YmxlLApAQCAtMTk2LDYgKzIyNCw3IEBAIHN0YXRpYyBpbnQJCWFhY19pb2N0bF9zZW5kZmliKHN0
cnVjdCBhYWMKIHN0YXRpYyBpbnQJCWFhY19pb2N0bF9zZW5kX3Jhd19zcmIoc3RydWN0IGFhY19z
b2Z0YyAqc2MsIGNhZGRyX3QgYXJnKTsKIHN0YXRpYyB2b2lkCQlhYWNfaGFuZGxlX2FpZihzdHJ1
Y3QgYWFjX3NvZnRjICpzYywKIAkJCQkJICAgc3RydWN0IGFhY19maWIgKmZpYik7CitzdGF0aWMg
dm9pZAkJYWFjX3JlcXVlc3RfYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjKTsKIHN0YXRpYyBpbnQJ
CWFhY19yZXZfY2hlY2soc3RydWN0IGFhY19zb2Z0YyAqc2MsIGNhZGRyX3QgdWRhdGEpOwogc3Rh
dGljIGludAkJYWFjX29wZW5fYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBjYWRkcl90IGFyZyk7
CiBzdGF0aWMgaW50CQlhYWNfY2xvc2VfYWlmKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBjYWRkcl90
IGFyZyk7CkBAIC0yMDcsOCArMjM2LDExIEBAIHN0YXRpYyBpbnQJCWFhY19nZXRfcGNpX2luZm8o
c3RydWN0IGFhY18KIHN0YXRpYyBpbnQJCWFhY19zdXBwb3J0ZWRfZmVhdHVyZXMoc3RydWN0IGFh
Y19zb2Z0YyAqc2MsIGNhZGRyX3QgdXB0cik7CiBzdGF0aWMgdm9pZAkJYWFjX2lvY3RsX2V2ZW50
KHN0cnVjdCBhYWNfc29mdGMgKnNjLAogCQkJCQlzdHJ1Y3QgYWFjX2V2ZW50ICpldmVudCwgdm9p
ZCAqYXJnKTsKK3N0YXRpYyBpbnQJCWFhY19yZXNldF9hZGFwdGVyKHN0cnVjdCBhYWNfc29mdGMg
KnNjKTsKIHN0YXRpYyBzdHJ1Y3QgYWFjX21udGluZm9yZXNwICoKIAlhYWNfZ2V0X2NvbnRhaW5l
cl9pbmZvKHN0cnVjdCBhYWNfc29mdGMgKnNjLCBzdHJ1Y3QgYWFjX2ZpYiAqZmliLCBpbnQgY2lk
KTsKK3N0YXRpYyB1X2ludDMyX3QKKwlhYWNfY2hlY2tfYWRhcHRlcl9oZWFsdGgoc3RydWN0IGFh
Y19zb2Z0YyAqc2MsIHVfaW50OF90ICpibGVkKTsKIAogc3RhdGljIHN0cnVjdCBjZGV2c3cgYWFj
X2NkZXZzdyA9IHsKIAkuZF92ZXJzaW9uID0JRF9WRVJTSU9OLApAQCAtMjM3LDcgKzI2OSw3IEBA
IGFhY19hdHRhY2goc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJaW50IGVycm9yLCB1bml0OwogCiAJ
ZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwotCisJc2Mt
PmhpbnRfZmxhZ3MgPSBkZXZpY2VfZ2V0X2ZsYWdzKHNjLT5hYWNfZGV2KTsKIAkvKgogCSAqIElu
aXRpYWxpemUgcGVyLWNvbnRyb2xsZXIgcXVldWVzLgogCSAqLwpAQCAtNDg3LDYgKzUxOSw3IEBA
IGFhY19hZGRfY29udGFpbmVyKHN0cnVjdCBhYWNfc29mdGMgKnNjLCAKIHN0YXRpYyBpbnQKIGFh
Y19hbGxvYyhzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIHsKKwlidXNfc2l6ZV90IG1heHNpemU7CiAK
IAlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CiAKQEAg
LTUxNCw2ICs1NDcsMTEgQEAgYWFjX2FsbG9jKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCS8qCiAJ
ICogQ3JlYXRlIERNQSB0YWcgZm9yIG1hcHBpbmcgRklCcyBpbnRvIGNvbnRyb2xsZXItYWRkcmVz
c2FibGUgc3BhY2UuLgogCSAqLworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1f
VFlQRTEpIAorCQltYXhzaXplID0gc2MtPmFhY19tYXhfZmlic19hbGxvYyAqIChzYy0+YWFjX21h
eF9maWJfc2l6ZSArCisJCQlzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsgMzEpOwor
CWVsc2UKKwkJbWF4c2l6ZSA9IHNjLT5hYWNfbWF4X2ZpYnNfYWxsb2MgKiBzYy0+YWFjX21heF9m
aWJfc2l6ZTsKIAlpZiAoYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5hYWNfcGFyZW50X2RtYXQsCS8q
IHBhcmVudCAqLwogCQkJICAgICAgIDEsIDAsIAkJCS8qIGFsZ25tbnQsIGJvdW5kYXJ5ICovCiAJ
CQkgICAgICAgKHNjLT5mbGFncyAmIEFBQ19GTEFHU180R0JfV0lORE9XKSA/CkBAIC01MjEsMTEg
KzU1OSw5IEBAIGFhY19hbGxvYyhzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAkJCSAgICAgICAweDdm
ZmZmZmZmLAkJLyogbG93YWRkciAqLwogCQkJICAgICAgIEJVU19TUEFDRV9NQVhBRERSLCAJLyog
aGlnaGFkZHIgKi8KIAkJCSAgICAgICBOVUxMLCBOVUxMLCAJCS8qIGZpbHRlciwgZmlsdGVyYXJn
ICovCi0JCQkgICAgICAgc2MtPmFhY19tYXhfZmlic19hbGxvYyAqCi0JCQkgICAgICAgc2MtPmFh
Y19tYXhfZmliX3NpemUsICAvKiBtYXhzaXplICovCisJCQkgICAgICAgbWF4c2l6ZSwgIAkJLyog
bWF4c2l6ZSAqLwogCQkJICAgICAgIDEsCQkJLyogbnNlZ21lbnRzICovCi0JCQkgICAgICAgc2Mt
PmFhY19tYXhfZmlic19hbGxvYyAqCi0JCQkgICAgICAgc2MtPmFhY19tYXhfZmliX3NpemUsCS8q
IG1heHNpemUgKi8KKwkJCSAgICAgICBtYXhzaXplLAkJCS8qIG1heHNpemUgKi8KIAkJCSAgICAg
ICAwLAkJCS8qIGZsYWdzICovCiAJCQkgICAgICAgTlVMTCwgTlVMTCwJCS8qIE5vIGxvY2tpbmcg
bmVlZGVkICovCiAJCQkgICAgICAgJnNjLT5hYWNfZmliX2RtYXQpKSB7CkBAIC01MzYsNiArNTcy
LDkgQEAgYWFjX2FsbG9jKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCS8qCiAJICogQ3JlYXRlIERN
QSB0YWcgZm9yIHRoZSBjb21tb24gc3RydWN0dXJlIGFuZCBhbGxvY2F0ZSBpdC4KIAkgKi8KKwlt
YXhzaXplID0gODE5MiArIHNpemVvZihzdHJ1Y3QgYWFjX2NvbW1vbik7CisJaWYgKHNjLT5mbGFn
cyAmIEFBQ19GTEFHU19ORVdfQ09NTV9UWVBFMSkgCisJCW1heHNpemUgKz0gc2MtPmFhY19tYXhf
ZmlicyAqIHNpemVvZih1X2ludDMyX3QpOwogCWlmIChidXNfZG1hX3RhZ19jcmVhdGUoc2MtPmFh
Y19wYXJlbnRfZG1hdCwgCS8qIHBhcmVudCAqLwogCQkJICAgICAgIDEsIDAsCQkJLyogYWxnbm1u
dCwgYm91bmRhcnkgKi8KIAkJCSAgICAgICAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTXzRHQl9XSU5E
T1cpID8KQEAgLTU0Myw5ICs1ODIsOSBAQCBhYWNfYWxsb2Moc3RydWN0IGFhY19zb2Z0YyAqc2Mp
CiAJCQkgICAgICAgMHg3ZmZmZmZmZiwJCS8qIGxvd2FkZHIgKi8KIAkJCSAgICAgICBCVVNfU1BB
Q0VfTUFYQUREUiwgCS8qIGhpZ2hhZGRyICovCiAJCQkgICAgICAgTlVMTCwgTlVMTCwgCQkvKiBm
aWx0ZXIsIGZpbHRlcmFyZyAqLwotCQkJICAgICAgIDgxOTIgKyBzaXplb2Yoc3RydWN0IGFhY19j
b21tb24pLCAvKiBtYXhzaXplICovCisJCQkgICAgICAgbWF4c2l6ZSwgCQkvKiBtYXhzaXplICov
CiAJCQkgICAgICAgMSwJCQkvKiBuc2VnbWVudHMgKi8KLQkJCSAgICAgICBCVVNfU1BBQ0VfTUFY
U0laRV8zMkJJVCwJLyogbWF4c2Vnc2l6ZSAqLworCQkJICAgICAgIG1heHNpemUsCQkJLyogbWF4
c2Vnc2l6ZSAqLwogCQkJICAgICAgIDAsCQkJLyogZmxhZ3MgKi8KIAkJCSAgICAgICBOVUxMLCBO
VUxMLAkJLyogTm8gbG9ja2luZyBuZWVkZWQgKi8KIAkJCSAgICAgICAmc2MtPmFhY19jb21tb25f
ZG1hdCkpIHsKQEAgLTU2Niw3ICs2MDUsNyBAQCBhYWNfYWxsb2Moc3RydWN0IGFhY19zb2Z0YyAq
c2MpCiAJICogb2YgaWdub3JlZD8KIAkgKi8KIAkodm9pZClidXNfZG1hbWFwX2xvYWQoc2MtPmFh
Y19jb21tb25fZG1hdCwgc2MtPmFhY19jb21tb25fZG1hbWFwLAotCQkJc2MtPmFhY19jb21tb24s
IDgxOTIgKyBzaXplb2YoKnNjLT5hYWNfY29tbW9uKSwKKwkJCXNjLT5hYWNfY29tbW9uLCBtYXhz
aXplLAogCQkJYWFjX2NvbW1vbl9tYXAsIHNjLCAwKTsKIAogCWlmIChzYy0+YWFjX2NvbW1vbl9i
dXNhZGRyIDwgODE5MikgewpAQCAtNTc0LDcgKzYxMyw3IEBAIGFhY19hbGxvYyhzdHJ1Y3QgYWFj
X3NvZnRjICpzYykKIAkJICAgICgodWludDhfdCAqKXNjLT5hYWNfY29tbW9uICsgODE5Mik7CiAJ
CXNjLT5hYWNfY29tbW9uX2J1c2FkZHIgKz0gODE5MjsKIAl9Ci0JYnplcm8oc2MtPmFhY19jb21t
b24sIHNpemVvZigqc2MtPmFhY19jb21tb24pKTsKKwliemVybyhzYy0+YWFjX2NvbW1vbiwgbWF4
c2l6ZSAtIDgxOTIpOwogCiAJLyogQWxsb2NhdGUgc29tZSBGSUJzIGFuZCBhc3NvY2lhdGVkIGNv
bW1hbmQgc3RydWN0cyAqLwogCVRBSUxRX0lOSVQoJnNjLT5hYWNfZmlibWFwX3RxaCk7CkBAIC02
NDAsNyArNjc5LDggQEAgYWFjX2ZyZWUoc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJaWYgKHNjLT5h
YWNfcmVnc19yZXMwICE9IE5VTEwpCiAJCWJ1c19yZWxlYXNlX3Jlc291cmNlKHNjLT5hYWNfZGV2
LCBTWVNfUkVTX01FTU9SWSwKIAkJCQkgICAgIHNjLT5hYWNfcmVnc19yaWQwLCBzYy0+YWFjX3Jl
Z3NfcmVzMCk7Ci0JaWYgKHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9OQVJLICYmIHNjLT5hYWNf
cmVnc19yZXMxICE9IE5VTEwpCisJaWYgKChzYy0+YWFjX2h3aWYgPT0gQUFDX0hXSUZfU1JDIHx8
IHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9OQVJLKQorCQkmJiBzYy0+YWFjX3JlZ3NfcmVzMSAh
PSBOVUxMKQogCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzYy0+YWFjX2RldiwgU1lTX1JFU19NRU1P
UlksCiAJCQkJICAgICBzYy0+YWFjX3JlZ3NfcmlkMSwgc2MtPmFhY19yZWdzX3JlczEpOwogfQpA
QCAtODAwLDYgKzg0MCwxMDcgQEAgYWFjX3Jlc3VtZShkZXZpY2VfdCBkZXYpCiB9CiAKIC8qCisg
KiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgTkVXX0NPTU1fVFlQRTEgaW50ZXJmYWNlLgorICovCit2
b2lkCithYWNfbmV3X2ludHJfdHlwZTEodm9pZCAqYXJnKQoreworCXN0cnVjdCBhYWNfc29mdGMg
KnNjOworCXN0cnVjdCBhYWNfY29tbWFuZCAqY207CisJc3RydWN0IGFhY19maWIgKmZpYjsKKwl1
X2ludDMyX3QgYmVsbGJpdHMsIGJlbGxiaXRzX3NoaWZ0ZWQsIGluZGV4LCBoYW5kbGU7CisJaW50
IGlzRmFzdFJlc3BvbnNlLCBpc0FpZiwgbm9Nb3JlQWlmOworCWludCBvdXJfaW50ZXJydXB0ID0g
MDsKKworCXNjID0gKHN0cnVjdCBhYWNfc29mdGMgKilhcmc7CisKKwlmd3ByaW50ZihzYywgSEJB
X0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisJbXR4X2xvY2soJnNjLT5hYWNfaW9f
bG9jayk7CisJYmVsbGJpdHMgPSBBQUNfTUVNMF9HRVRSRUc0KHNjLCBBQUNfU1JDX09EQlJfUik7
CisJaWYgKGJlbGxiaXRzICYgQUFDX0RCX1JFU1BPTlNFX1NFTlRfTlMpIHsKKwkJYmVsbGJpdHMg
PSBBQUNfREJfUkVTUE9OU0VfU0VOVF9OUzsKKwkJLyogaGFuZGxlIGFzeW5jLiBzdGF0dXMgKi8K
KwkJb3VyX2ludGVycnVwdCA9IDE7CisJCWluZGV4ID0gc2MtPmFhY19ob3N0X3JycV9pZHg7CisJ
CWlmIChzYy0+YWFjX2NvbW1vbi0+YWNfaG9zdF9ycnFbaW5kZXhdID09IDApIHsKKwkJCXVfaW50
MzJfdCBvbGRfaW5kZXggPSBpbmRleDsKKwkJCS8qIGFkanVzdCBpbmRleCAqLworCQkJZG8gewor
CQkJCWluZGV4Kys7CisJCQkJaWYgKGluZGV4ID09IHNjLT5hYWNfbWF4X2ZpYnMpIAorCQkJCQlp
bmRleCA9IDA7CisJCQkJaWYgKHNjLT5hYWNfY29tbW9uLT5hY19ob3N0X3JycVtpbmRleF0gIT0g
MCkgCisJCQkJCWJyZWFrOworCQkJfSB3aGlsZSAoaW5kZXggIT0gb2xkX2luZGV4KTsKKwkJCXNj
LT5hYWNfaG9zdF9ycnFfaWR4ID0gaW5kZXg7CisJCX0KKwkJZm9yICg7OykgeworCQkJaXNGYXN0
UmVzcG9uc2UgPSBpc0FpZiA9IG5vTW9yZUFpZiA9IDA7CisJCQkvKiByZW1vdmUgdG9nZ2xlIGJp
dCAoMzEpICovCisJCQloYW5kbGUgPSAoc2MtPmFhY19jb21tb24tPmFjX2hvc3RfcnJxW2luZGV4
XSAmIDB4N2ZmZmZmZmYpOworCQkJLyogY2hlY2sgZmFzdCByZXNwb25zZSBiaXQgKDMwKSAqLwor
CQkJaWYgKGhhbmRsZSAmIDB4NDAwMDAwMDApIAorCQkJCWlzRmFzdFJlc3BvbnNlID0gMTsKKwkJ
CS8qIGNoZWNrIEFJRiBiaXQgKDIzKSAqLworCQkJZWxzZSBpZiAoaGFuZGxlICYgMHgwMDgwMDAw
MCkgCisJCQkJaXNBaWYgPSBUUlVFOworCQkJaGFuZGxlICY9IDB4MDAwMGZmZmY7CisJCQlpZiAo
aGFuZGxlID09IDApIAorCQkJCWJyZWFrOworCisJCQljbSA9IHNjLT5hYWNfY29tbWFuZHMgKyAo
aGFuZGxlIC0gMSk7CisJCQlmaWIgPSBjbS0+Y21fZmliOworCQkJaWYgKGlzQWlmKSB7CisJCQkJ
bm9Nb3JlQWlmID0gKGZpYi0+SGVhZGVyLlhmZXJTdGF0ZSAmIEFBQ19GSUJTVEFURV9OT01PUkVB
SUYpID8gMTowOworCQkJCWlmICghbm9Nb3JlQWlmKSAKKwkJCQkJYWFjX2hhbmRsZV9haWYoc2Ms
IGZpYik7CisJCQkJYWFjX3JlbW92ZV9idXN5KGNtKTsKKwkJCQlhYWNfcmVsZWFzZV9jb21tYW5k
KGNtKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGlzRmFzdFJlc3BvbnNlKSB7CisJCQkJCWZpYi0+
SGVhZGVyLlhmZXJTdGF0ZSB8PSBBQUNfRklCU1RBVEVfRE9ORUFEQVA7CisJCQkJCSooKHVfaW50
MzJfdCAqKShmaWItPmRhdGEpKSA9IEFBQ19FUlJPUl9OT1JNQUw7CisJCQkJfQorCQkJCWFhY19y
ZW1vdmVfYnVzeShjbSk7CisJCQkJYWFjX3VubWFwX2NvbW1hbmQoY20pOworCQkJCWNtLT5jbV9m
bGFncyB8PSBBQUNfQ01EX0NPTVBMRVRFRDsKKworCQkJCS8qIGlzIHRoZXJlIGEgY29tcGxldGlv
biBoYW5kbGVyPyAqLworCQkJCWlmIChjbS0+Y21fY29tcGxldGUgIT0gTlVMTCkgeworCQkJCQlj
bS0+Y21fY29tcGxldGUoY20pOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGFzc3VtZSB0aGF0IHNv
bWVvbmUgaXMgc2xlZXBpbmcgb24gdGhpcyBjb21tYW5kICovCisJCQkJCXdha2V1cChjbSk7CisJ
CQkJfQorCQkJCXNjLT5mbGFncyAmPSB+QUFDX1FVRVVFX0ZSWk47CisJCQl9CisKKwkJCXNjLT5h
YWNfY29tbW9uLT5hY19ob3N0X3JycVtpbmRleCsrXSA9IDA7CisJCQlpZiAoaW5kZXggPT0gc2Mt
PmFhY19tYXhfZmlicykgCisJCQkJaW5kZXggPSAwOworCQkJc2MtPmFhY19ob3N0X3JycV9pZHgg
PSBpbmRleDsKKworCQkJaWYgKChpc0FpZiAmJiAhbm9Nb3JlQWlmKSB8fCBzYy0+YWlmX3BlbmRp
bmcpIAorCQkJCWFhY19yZXF1ZXN0X2FpZihzYyk7CisJCX0KKwl9IGVsc2UgeworCQliZWxsYml0
c19zaGlmdGVkID0gKGJlbGxiaXRzID4+IEFBQ19TUkNfT0RSX1NISUZUKTsKKwkJaWYgKGJlbGxi
aXRzX3NoaWZ0ZWQgJiBBQUNfREJfQUlGX1BFTkRJTkcpIHsKKwkJCW91cl9pbnRlcnJ1cHQgPSAx
OworCQkJLyogaGFuZGxlIEFJRiAqLworCQkJYWFjX3JlcXVlc3RfYWlmKHNjKTsKKwkJfQorICAg
IH0KKwlpZiAob3VyX2ludGVycnVwdCkgCisJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNf
T0RCUl9DLCBiZWxsYml0cyk7CisKKwkvKiBzZWUgaWYgd2UgY2FuIHN0YXJ0IHNvbWUgbW9yZSBJ
L08gKi8KKwlpZiAoKHNjLT5mbGFncyAmIEFBQ19RVUVVRV9GUlpOKSA9PSAwKQorCQlhYWNfc3Rh
cnRpbyhzYyk7CisJbXR4X3VubG9jaygmc2MtPmFhY19pb19sb2NrKTsKK30KKworLyoKICAqIElu
dGVycnVwdCBoYW5kbGVyIGZvciBORVdfQ09NTSBpbnRlcmZhY2UuCiAgKi8KIHZvaWQKQEAgLTk0
NSw2ICsxMDg2LDggQEAgYWFjX3N0YXJ0aW8oc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJZndwcmlu
dGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwogCiAJZm9yICg7Oykg
eworCQlpZiAoc2MtPmFhY19zdGF0ZSAmIEFBQ19TVEFURV9SRVNFVCkKKwkJCWJyZWFrOwogCQkv
KgogCQkgKiBUaGlzIGZsYWcgbWlnaHQgYmUgc2V0IGlmIHRoZSBjYXJkIGlzIG91dCBvZiByZXNv
dXJjZXMuCiAJCSAqIENoZWNraW5nIGl0IGhlcmUgcHJldmVudHMgYW4gaW5maW5pdGUgbG9vcCBv
ZiBkZWZlcnJhbHMuCkBAIC0xMTkwLDYgKzEzMzMsMTYgQEAgYWFjX2Jpb19jb21tYW5kKHN0cnVj
dCBhYWNfc29mdGMgKnNjLCBzdAogCWlmICgoYnAgPSBhYWNfZGVxdWV1ZV9iaW8oc2MpKSA9PSBO
VUxMKQogCQlnb3RvIGZhaWw7CiAKKwlhZCA9IChzdHJ1Y3QgYWFjX2Rpc2sgKilicC0+YmlvX2Rp
c2stPmRfZHJ2MTsKKwkvKiBjb250YWluZXIgc3RpbGwgdmFsaWQ/ICovCisJaWYgKGFkLT5hZF9j
b250YWluZXIgPT0gTlVMTCkgeworCQlicC0+YmlvX2ZsYWdzIHw9IEJJT19FUlJPUjsKKwkJYnAt
PmJpb19lcnJvciA9IEVJTlZBTDsKKwkJYmlvZG9uZShicCk7CisJCWJwID0gTlVMTDsKKwkJZ290
byBmYWlsOworCX0KKwogCS8qIGZpbGwgb3V0IHRoZSBjb21tYW5kICovCiAJY20tPmNtX2RhdGEg
PSAodm9pZCAqKWJwLT5iaW9fZGF0YTsKIAljbS0+Y21fZGF0YWxlbiA9IGJwLT5iaW9fYmNvdW50
OwpAQCAtMTIxMSw4ICsxMzY0LDYgQEAgYWFjX2Jpb19jb21tYW5kKHN0cnVjdCBhYWNfc29mdGMg
KnNjLCBzdAogCQlBQUNfRklCU1RBVEVfRkFTVF9SRVNQT05TRTsKIAogCS8qIGJ1aWxkIHRoZSBy
ZWFkL3dyaXRlIHJlcXVlc3QgKi8KLQlhZCA9IChzdHJ1Y3QgYWFjX2Rpc2sgKilicC0+YmlvX2Rp
c2stPmRfZHJ2MTsKLQogCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfUkFXX0lPKSB7CiAJCXN0
cnVjdCBhYWNfcmF3X2lvICpyYXc7CiAJCXJhdyA9IChzdHJ1Y3QgYWFjX3Jhd19pbyAqKSZmaWIt
PmRhdGFbMF07CkBAIC0xMzA4LDcgKzE0NTksOSBAQCBhYWNfYmlvX2NvbXBsZXRlKHN0cnVjdCBh
YWNfY29tbWFuZCAqY20pCiAKIAkvKiBmZXRjaCByZWxldmFudCBzdGF0dXMgYW5kIHRoZW4gcmVs
ZWFzZSB0aGUgY29tbWFuZCAqLwogCWJwID0gKHN0cnVjdCBiaW8gKiljbS0+Y21fcHJpdmF0ZTsK
LQlpZiAoYnAtPmJpb19jbWQgPT0gQklPX1JFQUQpIHsKKwlpZiAoY20tPmNtX2ZsYWdzICYgQUFD
X0NNRF9SRVNFVCkgeworCQlzdGF0dXMgPSBTVF9CVVNfUkVTRVQ7CisJfSBlbHNlIGlmIChicC0+
YmlvX2NtZCA9PSBCSU9fUkVBRCkgewogCQlicnIgPSAoc3RydWN0IGFhY19ibG9ja3JlYWRfcmVz
cG9uc2UgKikmY20tPmNtX2ZpYi0+ZGF0YVswXTsKIAkJc3RhdHVzID0gYnJyLT5TdGF0dXM7CiAJ
fSBlbHNlIHsKQEAgLTEzMjEsNyArMTQ3NCw3IEBAIGFhY19iaW9fY29tcGxldGUoc3RydWN0IGFh
Y19jb21tYW5kICpjbSkKIAlpZiAoc3RhdHVzID09IFNUX09LKSB7CiAJCWJwLT5iaW9fcmVzaWQg
PSAwOwogCX0gZWxzZSB7Ci0JCWJwLT5iaW9fZXJyb3IgPSBFSU87CisJCWJwLT5iaW9fZXJyb3Ig
PSAoc3RhdHVzID09IFNUX05PVF9SRUFEWSA/IEVCVVNZIDogRUlPKTsKIAkJYnAtPmJpb19mbGFn
cyB8PSBCSU9fRVJST1I7CiAJCS8qIHBhc3MgYW4gZXJyb3Igc3RyaW5nIG91dCB0byB0aGUgZGlz
ayBsYXllciAqLwogCQlicC0+YmlvX2RyaXZlcjEgPSBhYWNfZGVzY3JpYmVfY29kZShhYWNfY29t
bWFuZF9zdGF0dXNfdGFibGUsCkBAIC0xNDAwLDYgKzE1NTMsNyBAQCBhYWNfcmVsZWFzZV9jb21t
YW5kKHN0cnVjdCBhYWNfY29tbWFuZCAqCiAJY20tPmNtX2NvbXBsZXRlID0gTlVMTDsKIAljbS0+
Y21fcHJpdmF0ZSA9IE5VTEw7CiAJY20tPmNtX3F1ZXVlID0gQUFDX0FEQVBfTk9STV9DTURfUVVF
VUU7CisJY20tPmNtX3Bhc3N0aHJfZG1hdCA9IDA7CiAJY20tPmNtX2ZpYi0+SGVhZGVyLlhmZXJT
dGF0ZSA9IEFBQ19GSUJTVEFURV9FTVBUWTsKIAljbS0+Y21fZmliLT5IZWFkZXIuU3RydWN0VHlw
ZSA9IEFBQ19GSUJUWVBFX1RGSUI7CiAJY20tPmNtX2ZpYi0+SGVhZGVyLkZsYWdzID0gMDsKQEAg
LTE0NDgsNiArMTYwMiw3IEBAIGFhY19hbGxvY19jb21tYW5kcyhzdHJ1Y3QgYWFjX3NvZnRjICpz
YykKIAlzdHJ1Y3QgYWFjX2ZpYm1hcCAqZm07CiAJdWludDY0X3QgZmlicGh5czsKIAlpbnQgaSwg
ZXJyb3I7CisJdV9pbnQzMl90IG1heHNpemU7CiAKIAlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RC
R19GVU5DVElPTl9FTlRSWV9CLCAiIik7CiAKQEAgLTE0NjcsMjcgKzE2MjIsNDAgQEAgYWFjX2Fs
bG9jX2NvbW1hbmRzKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCQlyZXR1cm4gKEVOT01FTSk7CiAJ
fQogCisJbWF4c2l6ZSA9IHNjLT5hYWNfbWF4X2ZpYl9zaXplOworCWlmIChzYy0+ZmxhZ3MgJiBB
QUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIAorCQltYXhzaXplICs9IHNpemVvZihzdHJ1Y3QgYWFj
X2ZpYl94cG9ydGhkcikgKyAzMTsKKwogCS8qIElnbm9yZSBlcnJvcnMgc2luY2UgdGhpcyBkb2Vz
bid0IGJvdW5jZSAqLwogCSh2b2lkKWJ1c19kbWFtYXBfbG9hZChzYy0+YWFjX2ZpYl9kbWF0LCBm
bS0+YWFjX2ZpYm1hcCwgZm0tPmFhY19maWJzLAotCQkJICAgICAgc2MtPmFhY19tYXhfZmlic19h
bGxvYyAqIHNjLT5hYWNfbWF4X2ZpYl9zaXplLAorCQkJICAgICAgc2MtPmFhY19tYXhfZmlic19h
bGxvYyAqIG1heHNpemUsCiAJCQkgICAgICBhYWNfbWFwX2NvbW1hbmRfaGVscGVyLCAmZmlicGh5
cywgMCk7CiAKIAkvKiBpbml0aWFsaXplIGNvbnN0YW50IGZpZWxkcyBpbiB0aGUgY29tbWFuZCBz
dHJ1Y3R1cmUgKi8KLQliemVybyhmbS0+YWFjX2ZpYnMsIHNjLT5hYWNfbWF4X2ZpYnNfYWxsb2Mg
KiBzYy0+YWFjX21heF9maWJfc2l6ZSk7CisJYnplcm8oZm0tPmFhY19maWJzLCBzYy0+YWFjX21h
eF9maWJzX2FsbG9jICogbWF4c2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNjLT5hYWNfbWF4X2Zp
YnNfYWxsb2M7IGkrKykgewogCQljbSA9IHNjLT5hYWNfY29tbWFuZHMgKyBzYy0+dG90YWxfZmli
czsKIAkJZm0tPmFhY19jb21tYW5kcyA9IGNtOwogCQljbS0+Y21fc2MgPSBzYzsKIAkJY20tPmNt
X2ZpYiA9IChzdHJ1Y3QgYWFjX2ZpYiAqKQotCQkJKCh1X2ludDhfdCAqKWZtLT5hYWNfZmlicyAr
IGkqc2MtPmFhY19tYXhfZmliX3NpemUpOwotCQljbS0+Y21fZmlicGh5cyA9IGZpYnBoeXMgKyBp
KnNjLT5hYWNfbWF4X2ZpYl9zaXplOworCQkJKCh1X2ludDhfdCAqKWZtLT5hYWNfZmlicyArIGkg
KiBtYXhzaXplKTsKKwkJY20tPmNtX2ZpYnBoeXMgPSBmaWJwaHlzICsgaSAqIG1heHNpemU7CisJ
CWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIHsKKwkJCXVfaW50NjRf
dCBmaWJwaHlzX2FsaWduZWQ7CisJCQlmaWJwaHlzX2FsaWduZWQgPSAKKwkJCQkoY20tPmNtX2Zp
YnBoeXMgKyBzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsgMzEpICYgfjMxOworCQkJ
Y20tPmNtX2ZpYiA9IChzdHJ1Y3QgYWFjX2ZpYiAqKQorCQkJCSgodV9pbnQ4X3QgKiljbS0+Y21f
ZmliICsgKGZpYnBoeXNfYWxpZ25lZCAtIGNtLT5jbV9maWJwaHlzKSk7CisJCQljbS0+Y21fZmli
cGh5cyA9IGZpYnBoeXNfYWxpZ25lZDsKKwkJfQogCQljbS0+Y21faW5kZXggPSBzYy0+dG90YWxf
ZmliczsKIAogCQlpZiAoKGVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmFhY19idWZmZXJf
ZG1hdCwgMCwKIAkJCQkJICAgICAgICZjbS0+Y21fZGF0YW1hcCkpICE9IDApCiAJCQlicmVhazsK
IAkJbXR4X2xvY2soJnNjLT5hYWNfaW9fbG9jayk7Ci0JCWFhY19yZWxlYXNlX2NvbW1hbmQoY20p
OworCQlpZiAoc2MtPmFhY19tYXhfZmlicyA8PSAxIHx8IHNjLT5hYWNfbWF4X2ZpYnMgLSBzYy0+
dG90YWxfZmlicyA+IDEpCisJCQlhYWNfcmVsZWFzZV9jb21tYW5kKGNtKTsKIAkJc2MtPnRvdGFs
X2ZpYnMrKzsKIAkJbXR4X3VubG9jaygmc2MtPmFhY19pb19sb2NrKTsKIAl9CkBAIC0xNTk4LDE0
ICsxNzY2LDE3IEBAIGFhY19tYXBfY29tbWFuZF9zZyh2b2lkICphcmcsIGJ1c19kbWFfc2UKIAlj
bS0+Y21fZmliLT5IZWFkZXIuUmVjZWl2ZXJGaWJBZGRyZXNzID0gKHVfaW50MzJfdCljbS0+Y21f
ZmlicGh5czsKIAogCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGZvciBzcGVlZHkg
cmV2ZXJzZS1sb29rdXAgKi8KLQljbS0+Y21fZmliLT5IZWFkZXIuU2VuZGVyRGF0YSA9IGNtLT5j
bV9pbmRleDsKKwljbS0+Y21fZmliLT5IZWFkZXIuU2VuZGVyRGF0YSArPSBjbS0+Y21faW5kZXg7
CisKKwlpZiAoY20tPmNtX3Bhc3N0aHJfZG1hdCA9PSAwKSB7CisJCWlmIChjbS0+Y21fZmxhZ3Mg
JiBBQUNfQ01EX0RBVEFJTikKKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+YWFjX2J1ZmZlcl9kbWF0
LCBjbS0+Y21fZGF0YW1hcCwKKwkJCQkJCQlCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKwkJaWYgKGNt
LT5jbV9mbGFncyAmIEFBQ19DTURfREFUQU9VVCkKKwkJCWJ1c19kbWFtYXBfc3luYyhzYy0+YWFj
X2J1ZmZlcl9kbWF0LCBjbS0+Y21fZGF0YW1hcCwKKwkJCQkJCQlCVVNfRE1BU1lOQ19QUkVXUklU
RSk7CisJfQogCi0JaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfREFUQUlOKQotCQlidXNfZG1h
bWFwX3N5bmMoc2MtPmFhY19idWZmZXJfZG1hdCwgY20tPmNtX2RhdGFtYXAsCi0JCQkJQlVTX0RN
QVNZTkNfUFJFUkVBRCk7Ci0JaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfREFUQU9VVCkKLQkJ
YnVzX2RtYW1hcF9zeW5jKHNjLT5hYWNfYnVmZmVyX2RtYXQsIGNtLT5jbV9kYXRhbWFwLAotCQkJ
CUJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9NQVBQRUQ7
CiAKIAlpZiAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19DT01NKSB7CkBAIC0xNjQ0LDcgKzE4
MTUsNyBAQCBhYWNfdW5tYXBfY29tbWFuZChzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNtCiAJaWYgKCEo
Y20tPmNtX2ZsYWdzICYgQUFDX0NNRF9NQVBQRUQpKQogCQlyZXR1cm47CiAKLQlpZiAoY20tPmNt
X2RhdGFsZW4gIT0gMCkgeworCWlmIChjbS0+Y21fZGF0YWxlbiAhPSAwICYmIGNtLT5jbV9wYXNz
dGhyX2RtYXQgPT0gMCkgewogCQlpZiAoY20tPmNtX2ZsYWdzICYgQUFDX0NNRF9EQVRBSU4pCiAJ
CQlidXNfZG1hbWFwX3N5bmMoc2MtPmFhY19idWZmZXJfZG1hdCwgY20tPmNtX2RhdGFtYXAsCiAJ
CQkJCUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKQEAgLTE2NzgsNyArMTg0OSw4IEBAIGFhY19jb21t
b25fbWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW4KIHN0YXRpYyBpbnQKIGFhY19jaGVja19m
aXJtd2FyZShzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIHsKLQl1X2ludDMyX3QgY29kZSwgbWFqb3Is
IG1pbm9yLCBvcHRpb25zID0gMCwgYXR1X3NpemUgPSAwOworCXVfaW50MzJfdCBjb2RlLCBtYWpv
ciwgbWlub3IsIG1heHNpemU7CisJdV9pbnQzMl90IG9wdGlvbnMgPSAwLCBhdHVfc2l6ZSA9IDA7
CiAJaW50IHN0YXR1czsKIAl0aW1lX3QgdGhlbjsKIApAQCAtMTcxMiw3ICsxODg0LDcgQEAgYWFj
X2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCSAqLwogCWlmIChzYy0+Zmxh
Z3MgJiBBQUNfRkxBR1NfUEVSQzJRQykgewogCQlpZiAoYWFjX3N5bmNfY29tbWFuZChzYywgQUFD
X01PTktFUl9HRVRLRVJOVkVSLCAwLCAwLCAwLCAwLAotCQkJCSAgICAgTlVMTCkpIHsKKwkJCQkg
ICAgIE5VTEwsIE5VTEwpKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LAogCQkJCSAg
ICAgICJFcnJvciByZWFkaW5nIGZpcm13YXJlIHZlcnNpb25cbiIpOwogCQkJcmV0dXJuIChFSU8p
OwpAQCAtMTcyOCwxMyArMTkwMCwxMiBAQCBhYWNfY2hlY2tfZmlybXdhcmUoc3RydWN0IGFhY19z
b2Z0YyAqc2MpCiAJCQlyZXR1cm4gKEVJTlZBTCk7CiAJCX0KIAl9Ci0KIAkvKgogCSAqIFJldHJp
ZXZlIHRoZSBjYXBhYmlsaXRpZXMvc3VwcG9ydGVkIG9wdGlvbnMgd29yZCBzbyB3ZSBrbm93IHdo
YXQKIAkgKiB3b3JrLWFyb3VuZHMgdG8gZW5hYmxlLiAgU29tZSBmaXJtd2FyZSByZXZzIGRvbid0
IHN1cHBvcnQgdGhpcwogCSAqIGNvbW1hbmQuCiAJICovCi0JaWYgKGFhY19zeW5jX2NvbW1hbmQo
c2MsIEFBQ19NT05LRVJfR0VUSU5GTywgMCwgMCwgMCwgMCwgJnN0YXR1cykpIHsKKwlpZiAoYWFj
X3N5bmNfY29tbWFuZChzYywgQUFDX01PTktFUl9HRVRJTkZPLCAwLCAwLCAwLCAwLCAmc3RhdHVz
LCBOVUxMKSkgewogCQlpZiAoc3RhdHVzICE9IEFBQ19TUkJfU1RTX0lOVkFMSURfUkVRVUVTVCkg
ewogCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwKIAkJCSAgICAgIlJlcXVlc3RBZGFwdGVy
SW5mbyBmYWlsZWRcbiIpOwpAQCAtMTc1MSwxNCArMTkyMiwxOCBAQCBhYWNfY2hlY2tfZmlybXdh
cmUoc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJCWlmIChvcHRpb25zICYgQUFDX1NVUFBPUlRFRF9O
T05EQVNEKQogCQkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19FTkFCTEVfQ0FNOwogCQlpZiAoKG9w
dGlvbnMgJiBBQUNfU1VQUE9SVEVEX1NHTUFQX0hPU1Q2NCkgIT0gMAotCQkgICAgICYmIChzaXpl
b2YoYnVzX2FkZHJfdCkgPiA0KSkgeworCQkJJiYgKHNpemVvZihidXNfYWRkcl90KSA+IDQpCisJ
CQkmJiAoc2MtPmhpbnRfZmxhZ3MgJiAweDEpKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNf
ZGV2LAogCQkJICAgICJFbmFibGluZyA2NC1iaXQgYWRkcmVzcyBzdXBwb3J0XG4iKTsKIAkJCXNj
LT5mbGFncyB8PSBBQUNfRkxBR1NfU0dfNjRCSVQ7CiAJCX0KLQkJaWYgKChvcHRpb25zICYgQUFD
X1NVUFBPUlRFRF9ORVdfQ09NTSkKLQkJICYmIHNjLT5hYWNfaWYuYWlmX3NlbmRfY29tbWFuZCkK
LQkJCXNjLT5mbGFncyB8PSBBQUNfRkxBR1NfTkVXX0NPTU07CisJCWlmIChzYy0+YWFjX2lmLmFp
Zl9zZW5kX2NvbW1hbmQpIHsKKwkJCWlmIChvcHRpb25zICYgQUFDX1NVUFBPUlRFRF9ORVdfQ09N
TV9UWVBFMSkKKwkJCQlzYy0+ZmxhZ3MgfD0gQUFDX0ZMQUdTX05FV19DT01NIHwgQUFDX0ZMQUdT
X05FV19DT01NX1RZUEUxOworCQkJZWxzZSBpZiAob3B0aW9ucyAmIEFBQ19TVVBQT1JURURfTkVX
X0NPTU0pCisJCQkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19ORVdfQ09NTTsKKwkJfQogCQlpZiAo
b3B0aW9ucyAmIEFBQ19TVVBQT1JURURfNjRCSVRfQVJSQVlTSVpFKQogCQkJc2MtPmZsYWdzIHw9
IEFBQ19GTEFHU19BUlJBWV82NEJJVDsKIAl9CkBAIC0xNzY3LDM5ICsxOTQyLDcxIEBAIGFhY19j
aGVja19maXJtd2FyZShzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAlzYy0+YWFjX21heF9maWJzID0g
KHNjLT5mbGFncyAmIEFBQ19GTEFHU18yNTZGSUJTID8gMjU2OjUxMik7CiAKIAkvKiBSZW1hcCBt
ZW0uIHJlc291cmNlLCBpZiByZXF1aXJlZCAqLwotCWlmICgoc2MtPmZsYWdzICYgQUFDX0ZMQUdT
X05FV19DT01NKSAmJgotCQlhdHVfc2l6ZSA+IHJtYW5fZ2V0X3NpemUoc2MtPmFhY19yZWdzX3Jl
czEpKSB7Ci0JCWJ1c19yZWxlYXNlX3Jlc291cmNlKAotCQkJc2MtPmFhY19kZXYsIFNZU19SRVNf
TUVNT1JZLAotCQkJc2MtPmFhY19yZWdzX3JpZDEsIHNjLT5hYWNfcmVnc19yZXMxKTsKLQkJc2Mt
PmFhY19yZWdzX3JlczEgPSBidXNfYWxsb2NfcmVzb3VyY2UoCi0JCQlzYy0+YWFjX2RldiwgU1lT
X1JFU19NRU1PUlksICZzYy0+YWFjX3JlZ3NfcmlkMSwKLQkJCTB1bCwgfjB1bCwgYXR1X3NpemUs
IFJGX0FDVElWRSk7Ci0JCWlmIChzYy0+YWFjX3JlZ3NfcmVzMSA9PSBOVUxMKSB7Ci0JCQlzYy0+
YWFjX3JlZ3NfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoCisJaWYgKHNjLT5hYWNfaHdp
ZiA9PSBBQUNfSFdJRl9OQVJLKSB7CisJCWlmICgoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19D
T01NKSAmJgorCQkJYXR1X3NpemUgPiBybWFuX2dldF9zaXplKHNjLT5hYWNfcmVnc19yZXMxKSkg
eworCQkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoCiAJCQkJc2MtPmFhY19kZXYsIFNZU19SRVNfTUVN
T1JZLAotCQkJCSZzYy0+YWFjX3JlZ3NfcmlkMSwgUkZfQUNUSVZFKTsKKwkJCQlzYy0+YWFjX3Jl
Z3NfcmlkMSwgc2MtPmFhY19yZWdzX3JlczEpOworCQkJc2MtPmFhY19yZWdzX3JlczEgPSBidXNf
YWxsb2NfcmVzb3VyY2UoCisJCQkJc2MtPmFhY19kZXYsIFNZU19SRVNfTUVNT1JZLCAmc2MtPmFh
Y19yZWdzX3JpZDEsCisJCQkJMHVsLCB+MHVsLCBhdHVfc2l6ZSwgUkZfQUNUSVZFKTsKIAkJCWlm
IChzYy0+YWFjX3JlZ3NfcmVzMSA9PSBOVUxMKSB7Ci0JCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFj
X2RldiwKLQkJCQkgICAgImNvdWxkbid0IGFsbG9jYXRlIHJlZ2lzdGVyIHdpbmRvd1xuIik7Ci0J
CQkJcmV0dXJuIChFTlhJTyk7CisJCQkJc2MtPmFhY19yZWdzX3JlczEgPSBidXNfYWxsb2NfcmVz
b3VyY2VfYW55KAorCQkJCQlzYy0+YWFjX2RldiwgU1lTX1JFU19NRU1PUlksCisJCQkJCSZzYy0+
YWFjX3JlZ3NfcmlkMSwgUkZfQUNUSVZFKTsKKwkJCQlpZiAoc2MtPmFhY19yZWdzX3JlczEgPT0g
TlVMTCkgeworCQkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LAorCQkJCQkJImNvdWxkbid0
IGFsbG9jYXRlIHJlZ2lzdGVyIHdpbmRvd1xuIik7CisJCQkJCXJldHVybiAoRU5YSU8pOworCQkJ
CX0KKwkJCQlzYy0+ZmxhZ3MgJj0gfkFBQ19GTEFHU19ORVdfQ09NTTsKIAkJCX0KLQkJCXNjLT5m
bGFncyAmPSB+QUFDX0ZMQUdTX05FV19DT01NOworCQkJc2MtPmFhY19idGFnMSA9IHJtYW5fZ2V0
X2J1c3RhZyhzYy0+YWFjX3JlZ3NfcmVzMSk7CisJCQlzYy0+YWFjX2JoYW5kbGUxID0gcm1hbl9n
ZXRfYnVzaGFuZGxlKHNjLT5hYWNfcmVnc19yZXMxKTsKIAkJfQotCQlzYy0+YWFjX2J0YWcxID0g
cm1hbl9nZXRfYnVzdGFnKHNjLT5hYWNfcmVnc19yZXMxKTsKLQkJc2MtPmFhY19iaGFuZGxlMSA9
IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+YWFjX3JlZ3NfcmVzMSk7Ci0KLQkJaWYgKHNjLT5hYWNf
aHdpZiA9PSBBQUNfSFdJRl9OQVJLKSB7Ci0JCQlzYy0+YWFjX3JlZ3NfcmVzMCA9IHNjLT5hYWNf
cmVnc19yZXMxOwotCQkJc2MtPmFhY19yZWdzX3JpZDAgPSBzYy0+YWFjX3JlZ3NfcmlkMTsKLQkJ
CXNjLT5hYWNfYnRhZzAgPSBzYy0+YWFjX2J0YWcxOwotCQkJc2MtPmFhY19iaGFuZGxlMCA9IHNj
LT5hYWNfYmhhbmRsZTE7CisJfSBlbHNlIHsKKwkJaWYgKChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1Nf
TkVXX0NPTU0pICYmCisJCQlhdHVfc2l6ZSA+IHJtYW5fZ2V0X3NpemUoc2MtPmFhY19yZWdzX3Jl
czApKSB7CisJCQlidXNfcmVsZWFzZV9yZXNvdXJjZSgKKwkJCQlzYy0+YWFjX2RldiwgU1lTX1JF
U19NRU1PUlksCisJCQkJc2MtPmFhY19yZWdzX3JpZDAsIHNjLT5hYWNfcmVnc19yZXMwKTsKKwkJ
CXNjLT5hYWNfcmVnc19yZXMwID0gYnVzX2FsbG9jX3Jlc291cmNlKAorCQkJCXNjLT5hYWNfZGV2
LCBTWVNfUkVTX01FTU9SWSwgJnNjLT5hYWNfcmVnc19yaWQwLAorCQkJCTB1bCwgfjB1bCwgYXR1
X3NpemUsIFJGX0FDVElWRSk7CisJCQlpZiAoc2MtPmFhY19yZWdzX3JlczAgPT0gTlVMTCkgewor
CQkJCXNjLT5hYWNfcmVnc19yZXMwID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueSgKKwkJCQkJc2Mt
PmFhY19kZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCQkmc2MtPmFhY19yZWdzX3JpZDAsIFJGX0FD
VElWRSk7CisJCQkJaWYgKHNjLT5hYWNfcmVnc19yZXMwID09IE5VTEwpIHsKKwkJCQkJZGV2aWNl
X3ByaW50ZihzYy0+YWFjX2RldiwKKwkJCQkJCSJjb3VsZG4ndCBhbGxvY2F0ZSByZWdpc3RlciB3
aW5kb3dcbiIpOworCQkJCQlyZXR1cm4gKEVOWElPKTsKKwkJCQl9CisJCQkJc2MtPmZsYWdzICY9
IH5BQUNfRkxBR1NfTkVXX0NPTU07CisJCQl9CisJCQlzYy0+YWFjX2J0YWcwID0gcm1hbl9nZXRf
YnVzdGFnKHNjLT5hYWNfcmVnc19yZXMwKTsKKwkJCXNjLT5hYWNfYmhhbmRsZTAgPSBybWFuX2dl
dF9idXNoYW5kbGUoc2MtPmFhY19yZWdzX3JlczApOworCQl9CisJCWlmIChzYy0+YWFjX2h3aWYg
IT0gQUFDX0hXSUZfU1JDKSB7CisJCQlzYy0+YWFjX3JlZ3NfcmVzMSA9IHNjLT5hYWNfcmVnc19y
ZXMwOworCQkJc2MtPmFhY19yZWdzX3JpZDEgPSBzYy0+YWFjX3JlZ3NfcmlkMDsKKwkJCXNjLT5h
YWNfYnRhZzEgPSBzYy0+YWFjX2J0YWcwOworCQkJc2MtPmFhY19iaGFuZGxlMSA9IHNjLT5hYWNf
YmhhbmRsZTA7CiAJCX0KIAl9CiAKKwlpZiAoc2MtPmFhY19od2lmID09IEFBQ19IV0lGX1NSQyAm
JiAKKwkJIShzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpKSB7CisJCWRldmlj
ZV9wcmludGYoc2MtPmFhY19kZXYsCisJCQkiaW52YWxpZCBjb21tYW5kIGludGVyZmFjZSBmb3Ig
dGhhdCBjb250cm9sbGVyIGZhbWlseSFcbiIpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCiAJ
LyogUmVhZCBwcmVmZXJyZWQgc2V0dGluZ3MgKi8KIAlzYy0+YWFjX21heF9maWJfc2l6ZSA9IHNp
emVvZihzdHJ1Y3QgYWFjX2ZpYik7CiAJc2MtPmFhY19tYXhfc2VjdG9ycyA9IDEyODsJCQkJLyog
NjRLQiAqLworCXNjLT5hYWNfbWF4X2FpZiA9IDE7CiAJaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFH
U19TR182NEJJVCkKIAkJc2MtPmFhY19zZ190YWJsZXNpemUgPSAoQUFDX0ZJQl9EQVRBU0laRQog
CQkgLSBzaXplb2Yoc3RydWN0IGFhY19ibG9ja3dyaXRlNjQpKQpAQCAtMTgwOSw3ICsyMDE2LDcg
QEAgYWFjX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCQkgLSBzaXplb2Yo
c3RydWN0IGFhY19ibG9ja3dyaXRlKSkKIAkJIC8gc2l6ZW9mKHN0cnVjdCBhYWNfc2dfZW50cnkp
OwogCi0JaWYgKCFhYWNfc3luY19jb21tYW5kKHNjLCBBQUNfTU9OS0VSX0dFVENPTU1QUkVGLCAw
LCAwLCAwLCAwLCBOVUxMKSkgeworCWlmICghYWFjX3N5bmNfY29tbWFuZChzYywgQUFDX01PTktF
Ul9HRVRDT01NUFJFRiwgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCkpIHsKIAkJb3B0aW9ucyA9IEFB
Q19HRVRfTUFJTEJPWChzYywgMSk7CiAJCXNjLT5hYWNfbWF4X2ZpYl9zaXplID0gKG9wdGlvbnMg
JiAweEZGRkYpOwogCQlzYy0+YWFjX21heF9zZWN0b3JzID0gKG9wdGlvbnMgPj4gMTYpIDw8IDE7
CkBAIC0xODE3LDEwICsyMDI0LDE4IEBAIGFhY19jaGVja19maXJtd2FyZShzdHJ1Y3QgYWFjX3Nv
ZnRjICpzYykKIAkJc2MtPmFhY19zZ190YWJsZXNpemUgPSAob3B0aW9ucyA+PiAxNik7CiAJCW9w
dGlvbnMgPSBBQUNfR0VUX01BSUxCT1goc2MsIDMpOwogCQlzYy0+YWFjX21heF9maWJzID0gKG9w
dGlvbnMgJiAweEZGRkYpOworCQlvcHRpb25zID0gQUFDX0dFVF9NQUlMQk9YKHNjLCA0KTsKKwkJ
c2MtPmFhY19tYXhfYWlmID0gKG9wdGlvbnMgJiAweEZGRkYpOworCX0KKworCW1heHNpemUgPSBz
Yy0+YWFjX21heF9maWJfc2l6ZTsKKwlpZiAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX05FV19DT01N
X1RZUEUxKSAKKwkJbWF4c2l6ZSArPSBzaXplb2Yoc3RydWN0IGFhY19maWJfeHBvcnRoZHIpICsg
MzE7CisJaWYgKG1heHNpemUgPiBQQUdFX1NJWkUpIHsKKyAgICAJc2MtPmFhY19tYXhfZmliX3Np
emUgLT0gKG1heHNpemUgLSBQQUdFX1NJWkUpOworCQltYXhzaXplID0gUEFHRV9TSVpFOwogCX0K
LQlpZiAoc2MtPmFhY19tYXhfZmliX3NpemUgPiBQQUdFX1NJWkUpCi0JCXNjLT5hYWNfbWF4X2Zp
Yl9zaXplID0gUEFHRV9TSVpFOwotCXNjLT5hYWNfbWF4X2ZpYnNfYWxsb2MgPSBQQUdFX1NJWkUg
LyBzYy0+YWFjX21heF9maWJfc2l6ZTsKKwlzYy0+YWFjX21heF9maWJzX2FsbG9jID0gUEFHRV9T
SVpFIC8gbWF4c2l6ZTsKIAogCWlmIChzYy0+YWFjX21heF9maWJfc2l6ZSA+IHNpemVvZihzdHJ1
Y3QgYWFjX2ZpYikpIHsKIAkJc2MtPmZsYWdzIHw9IEFBQ19GTEFHU19SQVdfSU87CkBAIC0xODgw
LDEwICsyMDk1LDI4IEBAIGFhY19pbml0KHN0cnVjdCBhYWNfc29mdGMgKnNjKQogCWlwLT5Ib3N0
RWxhcHNlZFNlY29uZHMgPSB0aW1lX3VwdGltZTsJLyogcmVzZXQgbGF0ZXIgaWYgaW52YWxpZCAq
LwogCiAJaXAtPkluaXRGbGFncyA9IDA7Ci0JaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFHU19ORVdf
Q09NTSkgeworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEpIHsKKwkJ
aXAtPkluaXRTdHJ1Y3RSZXZpc2lvbiA9IEFBQ19JTklUX1NUUlVDVF9SRVZJU0lPTl82OworCQlp
cC0+SW5pdEZsYWdzIHw9IEFBQ19JTklURkxBR1NfTkVXX0NPTU1fVFlQRTFfU1VQUE9SVEVEOwor
CQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiTmV3IGNvbW0uIGludGVyZmFjZSB0eXBlMSBl
bmFibGVkXG4iKTsKKwl9IGVsc2UgaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFHU19ORVdfQ09NTSkg
ewogCQlpcC0+SW5pdEZsYWdzIHw9IEFBQ19JTklURkxBR1NfTkVXX0NPTU1fU1VQUE9SVEVEOwog
CQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiTmV3IGNvbW0uIGludGVyZmFjZSBlbmFibGVk
XG4iKTsKIAl9CisJaXAtPk1heE51bUFpZiA9IHNjLT5hYWNfbWF4X2FpZjsKKwlpcC0+SG9zdFJS
UV9BZGRyTG93ID0gCisJCXNjLT5hYWNfY29tbW9uX2J1c2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qg
YWFjX2NvbW1vbiwgYWNfaG9zdF9ycnEpOworCS8qIGFsd2F5cyAzMi1iaXQgYWRkcmVzcyAqLwor
CWlwLT5Ib3N0UlJRX0FkZHJIaWdoID0gMDsKKworCS8qIEFEUG1sMTA4NjM6IERpc2FibGUgUG93
ZXIgTWFuYWdlbWVudCBzdXBwb3J0ICovCisJc2MtPmFhY19zdXBwb3J0X29wdDIgJj0gfkFBQ19T
VVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVDsKKworCWlmIChzYy0+YWFjX3N1cHBvcnRfb3B0MiAm
IEFBQ19TVVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVCkgeworCQlpcC0+SW5pdEZsYWdzIHw9IEFB
Q19JTklURkxBR1NfRFJJVkVSX1NVUFBPUlRTX1BNOworCQlpcC0+SW5pdEZsYWdzIHw9IEFBQ19J
TklURkxBR1NfRFJJVkVSX1VTRVNfVVRDX1RJTUU7CisJCWRldmljZV9wcmludGYoc2MtPmFhY19k
ZXYsICJQb3dlciBNYW5hZ2VtZW50IGVuYWJsZWRcbiIpOworCX0KIAogCWlwLT5NYXhJb0NvbW1h
bmRzID0gc2MtPmFhY19tYXhfZmliczsKIAlpcC0+TWF4SW9TaXplID0gc2MtPmFhY19tYXhfc2Vj
dG9ycyA8PCA5OwpAQCAtMTk3MCw2ICsyMjAzLDkgQEAgYWFjX2luaXQoc3RydWN0IGFhY19zb2Z0
YyAqc2MpCiAJY2FzZSBBQUNfSFdJRl9SS1Q6CiAJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19S
S1RfT0RCUiwgfjApOwogCQlicmVhazsKKwljYXNlIEFBQ19IV0lGX1NSQzoKKwkJQUFDX01FTTBf
U0VUUkVHNChzYywgQUFDX1NSQ19PREJSX0MsIH4wKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJ
YnJlYWs7CiAJfQpAQCAtMTk4MCw3ICsyMjE2LDcgQEAgYWFjX2luaXQoc3RydWN0IGFhY19zb2Z0
YyAqc2MpCiAJaWYgKGFhY19zeW5jX2NvbW1hbmQoc2MsIEFBQ19NT05LRVJfSU5JVFNUUlVDVCwK
IAkJCSAgICAgc2MtPmFhY19jb21tb25fYnVzYWRkciArCiAJCQkgICAgIG9mZnNldG9mKHN0cnVj
dCBhYWNfY29tbW9uLCBhY19pbml0KSwgMCwgMCwgMCwKLQkJCSAgICAgTlVMTCkpIHsKKwkJCSAg
ICAgTlVMTCwgTlVMTCkpIHsKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwKIAkJCSAgICAg
ICJlcnJvciBlc3RhYmxpc2hpbmcgaW5pdCBzdHJ1Y3R1cmVcbiIpOwogCQllcnJvciA9IEVJTzsK
QEAgLTIwMDMsNyArMjIzOSwxNCBAQCBhYWNfc2V0dXBfaW50cihzdHJ1Y3QgYWFjX3NvZnRjICpz
YykKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2RldiwgImNhbid0IGFsbG9jYXRlIGludGVycnVw
dFxuIik7CiAJCXJldHVybiAoRUlOVkFMKTsKIAl9Ci0JaWYgKHNjLT5mbGFncyAmIEFBQ19GTEFH
U19ORVdfQ09NTSkgeworCWlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU1fVFlQRTEp
IHsKKwkJaWYgKGJ1c19zZXR1cF9pbnRyKHNjLT5hYWNfZGV2LCBzYy0+YWFjX2lycSwKKwkJCQkg
ICBJTlRSX01QU0FGRXxJTlRSX1RZUEVfQklPLCBOVUxMLCAKKwkJCQkgICBhYWNfbmV3X2ludHJf
dHlwZTEsIHNjLCAmc2MtPmFhY19pbnRyKSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2Rl
diwgImNhbid0IHNldCB1cCBpbnRlcnJ1cHRcbiIpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9
CisJfSBlbHNlIGlmIChzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU0pIHsKIAkJaWYgKGJ1
c19zZXR1cF9pbnRyKHNjLT5hYWNfZGV2LCBzYy0+YWFjX2lycSwKIAkJCQkgICBJTlRSX01QU0FG
RXxJTlRSX1RZUEVfQklPLCBOVUxMLCAKIAkJCQkgICBhYWNfbmV3X2ludHIsIHNjLCAmc2MtPmFh
Y19pbnRyKSkgewpAQCAtMjAyOSw3ICsyMjcyLDcgQEAgYWFjX3NldHVwX2ludHIoc3RydWN0IGFh
Y19zb2Z0YyAqc2MpCiBzdGF0aWMgaW50CiBhYWNfc3luY19jb21tYW5kKHN0cnVjdCBhYWNfc29m
dGMgKnNjLCB1X2ludDMyX3QgY29tbWFuZCwKIAkJIHVfaW50MzJfdCBhcmcwLCB1X2ludDMyX3Qg
YXJnMSwgdV9pbnQzMl90IGFyZzIsIHVfaW50MzJfdCBhcmczLAotCQkgdV9pbnQzMl90ICpzcCkK
KwkJIHVfaW50MzJfdCAqc3AsIHVfaW50MzJfdCAqcjEpCiB7CiAJdGltZV90IHRoZW47CiAJdV9p
bnQzMl90IHN0YXR1czsKQEAgLTIwNjIsNiArMjMwNSwxMCBAQCBhYWNfc3luY19jb21tYW5kKHN0
cnVjdCBhYWNfc29mdGMgKnNjLCB1CiAJaWYgKHNwICE9IE5VTEwpCiAJCSpzcCA9IHN0YXR1czsK
IAorCS8qIHJldHVybiBwYXJhbWV0ZXIgKi8KKwlpZiAocjEgIT0gTlVMTCkgCisJCSpyMSA9IEFB
Q19HRVRfTUFJTEJPWChzYywgMCk7CisKIAlpZiAoc3RhdHVzICE9IEFBQ19TUkJfU1RTX1NVQ0NF
U1MpCiAJCXJldHVybiAoLTEpOwogCXJldHVybigwKTsKQEAgLTIwOTcsNyArMjM0NCw3IEBAIGFh
Y19zeW5jX2ZpYihzdHJ1Y3QgYWFjX3NvZnRjICpzYywgdV9pbnQKIAkgKiBHaXZlIHRoZSBGSUIg
dG8gdGhlIGNvbnRyb2xsZXIsIHdhaXQgZm9yIGEgcmVzcG9uc2UuCiAJICovCiAJaWYgKGFhY19z
eW5jX2NvbW1hbmQoc2MsIEFBQ19NT05LRVJfU1lOQ0ZJQiwKLQkJCSAgICAgZmliLT5IZWFkZXIu
UmVjZWl2ZXJGaWJBZGRyZXNzLCAwLCAwLCAwLCBOVUxMKSkgeworCQkJICAgICBmaWItPkhlYWRl
ci5SZWNlaXZlckZpYkFkZHJlc3MsIDAsIDAsIDAsIE5VTEwsIE5VTEwpKSB7CiAJCWZ3cHJpbnRm
KHNjLCBIQkFfRkxBR1NfREJHX0VSUk9SX0IsICJJTyBlcnJvciIpOwogCQlyZXR1cm4oRUlPKTsK
IAl9CkBAIC0yMzQ5LDEyICsyNTk2LDExIEBAIGFhY190aW1lb3V0KHN0cnVjdCBhYWNfc29mdGMg
KnNjKQogCWRlYWRsaW5lID0gdGltZV91cHRpbWUgLSBBQUNfQ01EX1RJTUVPVVQ7CiAJVEFJTFFf
Rk9SRUFDSChjbSwgJnNjLT5hYWNfYnVzeSwgY21fbGluaykgewogCQlpZiAoKGNtLT5jbV90aW1l
c3RhbXAgIDwgZGVhZGxpbmUpCi0JCSAgICAmJiAhKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfVElN
RURPVVQpKSB7CisJCQkvKiAmJiAhKGNtLT5jbV9mbGFncyAmIEFBQ19DTURfVElNRURPVVQpICov
KSB7CiAJCQljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9USU1FRE9VVDsKIAkJCWRldmljZV9wcmlu
dGYoc2MtPmFhY19kZXYsCi0JCQkgICAgIkNPTU1BTkQgJXAgKFRZUEUgJWQpIFRJTUVPVVQgQUZU
RVIgJWQgU0VDT05EU1xuIiwKLQkJCSAgICBjbSwgY20tPmNtX2ZpYi0+SGVhZGVyLkNvbW1hbmQs
Ci0JCQkgICAgKGludCkodGltZV91cHRpbWUtY20tPmNtX3RpbWVzdGFtcCkpOworCQkJCSAgICAg
ICJDT01NQU5EICVwIFRJTUVPVVQgQUZURVIgJWQgU0VDT05EU1xuIiwKKwkJCQkgICAgICBjbSwg
KGludCkodGltZV91cHRpbWUtY20tPmNtX3RpbWVzdGFtcCkpOwogCQkJQUFDX1BSSU5UX0ZJQihz
YywgY20tPmNtX2ZpYik7CiAJCQl0aW1lZG91dCsrOwogCQl9CkBAIC0yMzY1LDYgKzI2MTEsNyBA
QCBhYWNfdGltZW91dChzdHJ1Y3QgYWFjX3NvZnRjICpzYykKIAkJaWYgKGNvZGUgIT0gQUFDX1VQ
X0FORF9SVU5OSU5HKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiV0FSTklORyEg
Q29udHJvbGxlciBpcyBubyAiCiAJCQkJICAgICAgImxvbmdlciBydW5uaW5nISBjb2RlPSAweCV4
XG4iLCBjb2RlKTsKKwkJCWFhY19yZXNldF9hZGFwdGVyKHNjKTsKIAkJfQogCX0KIAlyZXR1cm47
CkBAIC0yMzkwLDggKzI2MzcsNyBAQCBhYWNfcnhfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBhYWNfc29m
dGMgKnNjCiB7CiAJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwg
IiIpOwogCi0JcmV0dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIHNjLT5mbGFncyAmIEFBQ19GTEFH
U19ORVdfQ09NTSA/Ci0JICAgIEFBQ19SWF9PTVIwIDogQUFDX1JYX0ZXU1RBVFVTKSk7CisJcmV0
dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIEFBQ19SWF9PTVIwKSk7CiB9CiAKIHN0YXRpYyBpbnQK
QEAgLTIzOTksOCArMjY0NSwxNSBAQCBhYWNfcmt0X2dldF9md3N0YXR1cyhzdHJ1Y3QgYWFjX3Nv
ZnRjICpzCiB7CiAJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwg
IiIpOwogCi0JcmV0dXJuKEFBQ19NRU0wX0dFVFJFRzQoc2MsIHNjLT5mbGFncyAmIEFBQ19GTEFH
U19ORVdfQ09NTSA/Ci0JICAgIEFBQ19SS1RfT01SMCA6IEFBQ19SS1RfRldTVEFUVVMpKTsKKwly
ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1JLVF9PTVIwKSk7Cit9CisKK3N0YXRpYyBp
bnQKK2FhY19zcmNfZ2V0X2Z3c3RhdHVzKHN0cnVjdCBhYWNfc29mdGMgKnNjKQoreworCWZ3cHJp
bnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIiKTsKKworCXJldHVybihB
QUNfTUVNMF9HRVRSRUc0KHNjLCBBQUNfU1JDX09NUikpOwogfQogCiAvKgpAQCAtMjQzMSw2ICsy
Njg0LDE0IEBAIGFhY19ya3RfcW5vdGlmeShzdHJ1Y3QgYWFjX3NvZnRjICpzYywgaW4KIAlBQUNf
TUVNMF9TRVRSRUc0KHNjLCBBQUNfUktUX0lEQlIsIHFiaXQpOwogfQogCitzdGF0aWMgdm9pZAor
YWFjX3NyY19xbm90aWZ5KHN0cnVjdCBhYWNfc29mdGMgKnNjLCBpbnQgcWJpdCkKK3sKKwlmd3By
aW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwlBQUNfTUVN
MF9TRVRSRUc0KHNjLCBBQUNfU1JDX0lEQlIsIHFiaXQgPDwgQUFDX1NSQ19JRFJfU0hJRlQpOwor
fQorCiAvKgogICogR2V0IHRoZSBpbnRlcnJ1cHQgcmVhc29uIGJpdHMKICAqLwpAQCAtMjQ1OCw2
ICsyNzE5LDE0IEBAIGFhY19ya3RfZ2V0X2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MKIAly
ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1JLVF9PREJSKSk7CiB9CiAKK3N0YXRpYyBp
bnQKK2FhY19zcmNfZ2V0X2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MpCit7CisJZndwcmlu
dGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOworCisJcmV0dXJuKEFB
Q19NRU0wX0dFVFJFRzQoc2MsIEFBQ19TUkNfT0RCUl9SKSA+PiBBQUNfU1JDX09EUl9TSElGVCk7
Cit9CisKIC8qCiAgKiBDbGVhciBzb21lIGludGVycnVwdCByZWFzb24gYml0cwogICovCkBAIC0y
NDg1LDYgKzI3NTQsMTQgQEAgYWFjX3JrdF9jbGVhcl9pc3RhdHVzKHN0cnVjdCBhYWNfc29mdGMg
KgogCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19SS1RfT0RCUiwgbWFzayk7CiB9CiAKK3N0YXRp
YyB2b2lkCithYWNfc3JjX2NsZWFyX2lzdGF0dXMoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBt
YXNrKQoreworCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIi
KTsKKworCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfT0RCUl9DLCBtYXNrIDw8IEFBQ19T
UkNfT0RSX1NISUZUKTsKK30KKwogLyoKICAqIFBvcHVsYXRlIHRoZSBtYWlsYm94IGFuZCBzZXQg
dGhlIGNvbW1hbmQgd29yZAogICovCkBAIC0yNTI3LDYgKzI4MDQsMTkgQEAgYWFjX3JrdF9zZXRf
bWFpbGJveChzdHJ1Y3QgYWFjX3NvZnRjICpzYwogCUFBQ19NRU0xX1NFVFJFRzQoc2MsIEFBQ19S
S1RfTUFJTEJPWCArIDE2LCBhcmczKTsKIH0KIAorc3RhdGljIHZvaWQKK2FhY19zcmNfc2V0X21h
aWxib3goc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50MzJfdCBjb21tYW5kLCB1X2ludDMyX3Qg
YXJnMCwKKwkJICAgIHVfaW50MzJfdCBhcmcxLCB1X2ludDMyX3QgYXJnMiwgdV9pbnQzMl90IGFy
ZzMpCit7CisJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIp
OworCisJQUFDX01FTTBfU0VUUkVHNChzYywgQUFDX1NSQ19NQUlMQk9YLCBjb21tYW5kKTsKKwlB
QUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyA0LCBhcmcwKTsKKwlBQUNfTUVN
MF9TRVRSRUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyA4LCBhcmcxKTsKKwlBQUNfTUVNMF9TRVRS
RUc0KHNjLCBBQUNfU1JDX01BSUxCT1ggKyAxMiwgYXJnMik7CisJQUFDX01FTTBfU0VUUkVHNChz
YywgQUFDX1NSQ19NQUlMQk9YICsgMTYsIGFyZzMpOworfQorCiAvKgogICogRmV0Y2ggdGhlIGlt
bWVkaWF0ZSBjb21tYW5kIHN0YXR1cyB3b3JkCiAgKi8KQEAgLTI1NTQsNiArMjg0NCwxNCBAQCBh
YWNfcmt0X2dldF9tYWlsYm94KHN0cnVjdCBhYWNfc29mdGMgKnNjCiAJcmV0dXJuKEFBQ19NRU0x
X0dFVFJFRzQoc2MsIEFBQ19SS1RfTUFJTEJPWCArIChtYiAqIDQpKSk7CiB9CiAKK3N0YXRpYyBp
bnQKK2FhY19zcmNfZ2V0X21haWxib3goc3RydWN0IGFhY19zb2Z0YyAqc2MsIGludCBtYikKK3sK
Kwlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19GVU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwly
ZXR1cm4oQUFDX01FTTBfR0VUUkVHNChzYywgQUFDX1NSQ19NQUlMQk9YICsgKG1iICogNCkpKTsK
K30KKwogLyoKICAqIFNldC9jbGVhciBpbnRlcnJ1cHQgbWFza3MKICAqLwpAQCAtMjU5OSw2ICsy
ODk3LDE4IEBAIGFhY19ya3Rfc2V0X2ludGVycnVwdHMoc3RydWN0IGFhY19zb2Z0YyAKIAl9CiB9
CiAKK3N0YXRpYyB2b2lkCithYWNfc3JjX3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhYWNfc29mdGMg
KnNjLCBpbnQgZW5hYmxlKQoreworCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9O
X0VOVFJZX0IsICIlc2FibGUgaW50ZXJydXB0cyIsIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisK
KwlpZiAoZW5hYmxlKSB7CisJCUFBQ19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfT0lNUiwgfkFB
Q19EQl9JTlRfTkVXX0NPTU1fVFlQRTEpOworCX0gZWxzZSB7CisJCUFBQ19NRU0wX1NFVFJFRzQo
c2MsIEFBQ19TUkNfT0lNUiwgfjApOworCX0KK30KKwogLyoKICAqIE5ldyBjb21tLiBpbnRlcmZh
Y2U6IFNlbmQgY29tbWFuZCBmdW5jdGlvbnMKICAqLwpAQCAtMjY0OCw2ICsyOTU4LDM1IEBAIGFh
Y19ya3Rfc2VuZF9jb21tYW5kKHN0cnVjdCBhYWNfc29mdGMgKnMKIAlyZXR1cm4gMDsKIH0KIAor
c3RhdGljIGludAorYWFjX3NyY19zZW5kX2NvbW1hbmQoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHN0
cnVjdCBhYWNfY29tbWFuZCAqY20pCit7CisJc3RydWN0IGFhY19maWJfeHBvcnRoZHIgKnBGaWJY
OworCXVfaW50MzJfdCBmaWJzaXplOworCXVfaW50NjRfdCBhZGRyZXNzOworCisJZndwcmludGYo
c2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgInNlbmQgY29tbWFuZCAobmV3IGNv
bW0uIHR5cGUxKSIpOworCisJLyogQ2FsY3VsYXRlIHRoZSBhbW91bnQgdG8gdGhlIGZpYnNpemUg
Yml0cyAqLworCWZpYnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBhYWNfZmliX3hwb3J0aGRyKSArIAor
CSAgIGNtLT5jbV9maWItPkhlYWRlci5TaXplICsgMTI3KSAvIDEyOCAtIDE7IAorCWlmIChmaWJz
aXplID4gMzEpIAorCQlmaWJzaXplID0gMzE7CisKKwkvKiBGaWxsIFhQT1JUIGhlYWRlciAqLyAK
KwlwRmliWCA9IChzdHJ1Y3QgYWFjX2ZpYl94cG9ydGhkciAqKQorCQkoKHVuc2lnbmVkIGNoYXIg
KiljbS0+Y21fZmliIC0gc2l6ZW9mKHN0cnVjdCBhYWNfZmliX3hwb3J0aGRyKSk7CisJcEZpYlgt
PkhhbmRsZSA9IGNtLT5jbV9maWItPkhlYWRlci5TZW5kZXJEYXRhICsgMTsKKwlwRmliWC0+SG9z
dEFkZHJlc3MgPSBjbS0+Y21fZmlicGh5czsKKwlwRmliWC0+U2l6ZSA9IGNtLT5jbV9maWItPkhl
YWRlci5TaXplOworCWFkZHJlc3MgPSBjbS0+Y21fZmlicGh5cyAtIHNpemVvZihzdHJ1Y3QgYWFj
X2ZpYl94cG9ydGhkcik7CisKKwlhYWNfZW5xdWV1ZV9idXN5KGNtKTsKKwlBQUNfTUVNMF9TRVRS
RUc0KHNjLCBBQUNfU1JDX0lRVUVfSCwgKHVfaW50MzJfdCkoYWRkcmVzcyA+PiAzMikpOworCUFB
Q19NRU0wX1NFVFJFRzQoc2MsIEFBQ19TUkNfSVFVRV9MLCAodV9pbnQzMl90KWFkZHJlc3MgKyBm
aWJzaXplKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5ldyBjb21tLiBpbnRlcmZhY2U6IGdl
dCwgc2V0IG91dGJvdW5kIHF1ZXVlIGluZGV4CiAgKi8KQEAgLTI2NjcsNiArMzAwNiwxNCBAQCBh
YWNfcmt0X2dldF9vdXRiX3F1ZXVlKHN0cnVjdCBhYWNfc29mdGMgCiAJcmV0dXJuKEFBQ19NRU0w
X0dFVFJFRzQoc2MsIEFBQ19SS1RfT1FVRSkpOwogfQogCitzdGF0aWMgaW50CithYWNfc3JjX2dl
dF9vdXRiX3F1ZXVlKHN0cnVjdCBhYWNfc29mdGMgKnNjKQoreworCWZ3cHJpbnRmKHNjLCBIQkFf
RkxBR1NfREJHX0ZVTkNUSU9OX0VOVFJZX0IsICIiKTsKKworCXJldHVybigtMSk7Cit9CisKIHN0
YXRpYyB2b2lkCiBhYWNfcnhfc2V0X291dGJfcXVldWUoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGlu
dCBpbmRleCkKIHsKQEAgLTI2ODMsNiArMzAzMCwxMiBAQCBhYWNfcmt0X3NldF9vdXRiX3F1ZXVl
KHN0cnVjdCBhYWNfc29mdGMgCiAJQUFDX01FTTBfU0VUUkVHNChzYywgQUFDX1JLVF9PUVVFLCBp
bmRleCk7CiB9CiAKK3N0YXRpYyB2b2lkCithYWNfc3JjX3NldF9vdXRiX3F1ZXVlKHN0cnVjdCBh
YWNfc29mdGMgKnNjLCBpbnQgaW5kZXgpCit7CisJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdf
RlVOQ1RJT05fRU5UUllfQiwgIiIpOworfQorCiAvKgogICogRGVidWdnaW5nIGFuZCBEaWFnbm9z
dGljcwogICovCkBAIC0yNzAyLDYgKzMwNTUsMjQgQEAgYWFjX2Rlc2NyaWJlX2NvbnRyb2xsZXIo
c3RydWN0IGFhY19zb2Z0YwogCW10eF9sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwogCWFhY19hbGxv
Y19zeW5jX2ZpYihzYywgJmZpYik7CiAKKwlpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFD
X1NVUFBPUlRFRF9TVVBQTEVNRU5UX0FEQVBURVJfSU5GTykgeworCQlmaWItPmRhdGFbMF0gPSAw
OworCQlpZiAoYWFjX3N5bmNfZmliKHNjLCBSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJbmZvLCAw
LCBmaWIsIDEpKSAKKwkJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJSZXF1ZXN0U3VwcGxl
bWVudEFkYXB0ZXJJbmZvIGZhaWxlZFxuIik7CisJCWVsc2UgeworCQkJc3RydWN0IGFhY19zdXBw
bGVtZW50X2FkYXB0ZXJfaW5mbyAqc3VwcF9pbmZvOworCisJCQlzdXBwX2luZm8gPSAoKHN0cnVj
dCBhYWNfc3VwcGxlbWVudF9hZGFwdGVyX2luZm8gKikmZmliLT5kYXRhWzBdKTsgCisJCQlhZGFw
dGVyX3R5cGUgPSBzdXBwX2luZm8tPkFkYXB0ZXJUeXBlVGV4dDsKKwkJCXNjLT5hYWNfZmVhdHVy
ZV9iaXRzID0gc3VwcF9pbmZvLT5GZWF0dXJlQml0czsKKwkJCXNjLT5hYWNfc3VwcG9ydF9vcHQy
ID0gc3VwcF9pbmZvLT5TdXBwb3J0ZWRPcHRpb25zMjsKKwkJfQorCX0KKwlkZXZpY2VfcHJpbnRm
KHNjLT5hYWNfZGV2LCAiJXMsIGFhYyBkcml2ZXIgJWQuJWQuJWQtJWRcbiIsCisJCWFkYXB0ZXJf
dHlwZSwKKwkJQUFDX0RSSVZFUl9NQUpPUl9WRVJTSU9OLCBBQUNfRFJJVkVSX01JTk9SX1ZFUlNJ
T04sCisJCUFBQ19EUklWRVJfQlVHRklYX0xFVkVMLCBBQUNfRFJJVkVSX0JVSUxEKTsKKwogCWZp
Yi0+ZGF0YVswXSA9IDA7CiAJaWYgKGFhY19zeW5jX2ZpYihzYywgUmVxdWVzdEFkYXB0ZXJJbmZv
LCAwLCBmaWIsIDEpKSB7CiAJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJSZXF1ZXN0QWRh
cHRlckluZm8gZmFpbGVkXG4iKTsKQEAgLTI3NTYsMjAgKzMxMjcsNiBAQCBhYWNfZGVzY3JpYmVf
Y29udHJvbGxlcihzdHJ1Y3QgYWFjX3NvZnRjCiAJCQkgICAgICAiXDI0SEVBVFNFTlNPUiIpOwog
CX0KIAotCWlmIChzYy0+c3VwcG9ydGVkX29wdGlvbnMgJiBBQUNfU1VQUE9SVEVEX1NVUFBMRU1F
TlRfQURBUFRFUl9JTkZPKSB7Ci0JCWZpYi0+ZGF0YVswXSA9IDA7Ci0JCWlmIChhYWNfc3luY19m
aWIoc2MsIFJlcXVlc3RTdXBwbGVtZW50QWRhcHRlckluZm8sIDAsIGZpYiwgMSkpCi0JCQlkZXZp
Y2VfcHJpbnRmKHNjLT5hYWNfZGV2LAotCQkJICAgICJSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJ
bmZvIGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCWFkYXB0ZXJfdHlwZSA9ICgoc3RydWN0IGFhY19z
dXBwbGVtZW50X2FkYXB0ZXJfaW5mbyAqKQotCQkJICAgICZmaWItPmRhdGFbMF0pLT5BZGFwdGVy
VHlwZVRleHQ7Ci0JfQotCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICIlcywgYWFjIGRyaXZl
ciAlZC4lZC4lZC0lZFxuIiwKLQkJYWRhcHRlcl90eXBlLAotCQlBQUNfRFJJVkVSX01BSk9SX1ZF
UlNJT04sIEFBQ19EUklWRVJfTUlOT1JfVkVSU0lPTiwKLQkJQUFDX0RSSVZFUl9CVUdGSVhfTEVW
RUwsIEFBQ19EUklWRVJfQlVJTEQpOwotCiAJYWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOwogCW10
eF91bmxvY2soJnNjLT5hYWNfaW9fbG9jayk7CiB9CkBAIC0zMDUwLDI1ICszNDA3LDI1IEBAIHN0
YXRpYyBpbnQKIGFhY19pb2N0bF9zZW5kX3Jhd19zcmIoc3RydWN0IGFhY19zb2Z0YyAqc2MsIGNh
ZGRyX3QgYXJnKQogewogCXN0cnVjdCBhYWNfY29tbWFuZCAqY207Ci0Jc3RydWN0IGFhY19ldmVu
dCAqZXZlbnQ7CiAJc3RydWN0IGFhY19maWIgKmZpYjsKLQlzdHJ1Y3QgYWFjX3NyYiAqc3JiY21k
LCAqdXNlcl9zcmI7Ci0Jc3RydWN0IGFhY19zZ19lbnRyeSAqc2dlOwotCXN0cnVjdCBhYWNfc2df
ZW50cnk2NCAqc2dlNjQ7Ci0Jdm9pZCAqc3JiX3NnX2FkZHJlc3MsICp1cmVwbHk7Ci0JdWludDMy
X3QgZmlic2l6ZSwgc3JiX3NnX2J5dGVjb3VudDsKLQlpbnQgZXJyb3IsIHRyYW5zZmVyX2RhdGE7
CisJc3RydWN0IGFhY19zcmIgKnNyYmNtZDsKKwlzdHJ1Y3QgYWFjX3NyYiAqdXNlcl9zcmIgPSAo
c3RydWN0IGFhY19zcmIgKilhcmc7CisJdm9pZCAqdXNlcl9yZXBseTsKKwlpbnQgZXJyb3IsIHRy
YW5zZmVyX2RhdGEgPSAwOworCWJ1c19kbWFtYXBfdCBvcmlnX21hcCA9IDA7CisJdV9pbnQzMl90
IGZpYnNpemUgPSAwOworCXVfaW50NjRfdCBzcmJfc2dfYWRkcmVzczsKKwl1X2ludDMyX3Qgc3Ji
X3NnX2J5dGVjb3VudDsKIAogCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0ZVTkNUSU9OX0VO
VFJZX0IsICIiKTsKIAogCWNtID0gTlVMTDsKLQl0cmFuc2Zlcl9kYXRhID0gMDsKLQlmaWJzaXpl
ID0gMDsKLQl1c2VyX3NyYiA9IChzdHJ1Y3QgYWFjX3NyYiAqKWFyZzsKIAogCW10eF9sb2NrKCZz
Yy0+YWFjX2lvX2xvY2spOwogCWlmIChhYWNfYWxsb2NfY29tbWFuZChzYywgJmNtKSkgewotCQkg
ZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhYWNfZXZlbnQpLCBNX0FBQ0JVRiwKKwkJc3Ry
dWN0IGFhY19ldmVudCAqZXZlbnQ7CisKKwkJZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBh
YWNfZXZlbnQpLCBNX0FBQ0JVRiwKIAkJICAgIE1fTk9XQUlUIHwgTV9aRVJPKTsKIAkJaWYgKGV2
ZW50ID09IE5VTEwpIHsKIAkJCWVycm9yID0gRUJVU1k7CkBAIC0zMDc5LDEwOCArMzQzNiwxNzEg
QEAgYWFjX2lvY3RsX3NlbmRfcmF3X3NyYihzdHJ1Y3QgYWFjX3NvZnRjIAogCQlldmVudC0+ZXZf
Y2FsbGJhY2sgPSBhYWNfaW9jdGxfZXZlbnQ7CiAJCWV2ZW50LT5ldl9hcmcgPSAmY207CiAJCWFh
Y19hZGRfZXZlbnQoc2MsIGV2ZW50KTsKLQkJbXNsZWVwKGNtLCAmc2MtPmFhY19pb19sb2NrLCAw
LCAiYWFjcmF3IiwgMCk7CisJCW1zbGVlcChjbSwgJnNjLT5hYWNfaW9fbG9jaywgMCwgInNuZHJh
dyIsIDApOwogCX0KIAltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwogCiAJY20tPmNtX2Rh
dGEgPSBOVUxMOworCS8qIHNhdmUgb3JpZ2luYWwgZG1hIG1hcCAqLworCW9yaWdfbWFwID0gY20t
PmNtX2RhdGFtYXA7CisKIAlmaWIgPSBjbS0+Y21fZmliOwogCXNyYmNtZCA9IChzdHJ1Y3QgYWFj
X3NyYiAqKWZpYi0+ZGF0YTsKLQllcnJvciA9IGNvcHlpbigmdXNlcl9zcmItPmRhdGFfbGVuLCAm
Zmlic2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JaWYgKGVycm9yICE9IDApCisJaWYgKChlcnJv
ciA9IGNvcHlpbigodm9pZCAqKSZ1c2VyX3NyYi0+ZGF0YV9sZW4sICZmaWJzaXplLCAKKwkJc2l6
ZW9mICh1X2ludDMyX3QpKSAhPSAwKSkgCiAJCWdvdG8gb3V0OwotCWlmIChmaWJzaXplID4gKHNj
LT5hYWNfbWF4X2ZpYl9zaXplIC0gc2l6ZW9mKHN0cnVjdCBhYWNfZmliX2hlYWRlcikpKSB7CisJ
aWYgKGZpYnNpemUgPiAoc2MtPmFhY19tYXhfZmliX3NpemUtc2l6ZW9mKHN0cnVjdCBhYWNfZmli
X2hlYWRlcikpKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3Ig
PSBjb3B5aW4odXNlcl9zcmIsIHNyYmNtZCwgZmlic2l6ZSk7Ci0JaWYgKGVycm9yICE9IDApCisJ
aWYgKChlcnJvciA9IGNvcHlpbigodm9pZCAqKXVzZXJfc3JiLCBzcmJjbWQsIGZpYnNpemUpICE9
IDApKSAKIAkJZ290byBvdXQ7Ci0Jc3JiY21kLT5mdW5jdGlvbiA9IDA7Ci0Jc3JiY21kLT5yZXRy
eV9saW1pdCA9IDA7CisKKwlzcmJjbWQtPmZ1bmN0aW9uID0gMDsJCS8qIFNSQkZfRXhlY3V0ZVNj
c2kgKi8KKwlzcmJjbWQtPnJldHJ5X2xpbWl0ID0gMDsJLyogb2Jzb2xldGUgKi8KKworCS8qIG9u
bHkgb25lIHNnIGVsZW1lbnQgZnJvbSB1c2Vyc3BhY2Ugc3VwcG9ydGVkICovCiAJaWYgKHNyYmNt
ZC0+c2dfbWFwLlNnQ291bnQgPiAxKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIG91dDsK
IAl9Ci0KLQkvKiBSZXRyaWV2ZSBjb3JyZWN0IFNHIGVudHJpZXMuICovCi0JaWYgKGZpYnNpemUg
PT0gKHNpemVvZihzdHJ1Y3QgYWFjX3NyYikgKwotCSAgICBzcmJjbWQtPnNnX21hcC5TZ0NvdW50
ICogc2l6ZW9mKHN0cnVjdCBhYWNfc2dfZW50cnkpKSkgewotCQlzZ2UgPSBzcmJjbWQtPnNnX21h
cC5TZ0VudHJ5OwotCQlzZ2U2NCA9IE5VTEw7Ci0JCXNyYl9zZ19ieXRlY291bnQgPSBzZ2UtPlNn
Qnl0ZUNvdW50OwotCQlzcmJfc2dfYWRkcmVzcyA9ICh2b2lkICopKHVpbnRwdHJfdClzZ2UtPlNn
QWRkcmVzczsKLQl9CisJLyogY2hlY2sgZmlic2l6ZSAqLworCWlmIChmaWJzaXplID09IChzaXpl
b2Yoc3RydWN0IGFhY19zcmIpICsgCisJCXNyYmNtZC0+c2dfbWFwLlNnQ291bnQgKiBzaXplb2Yo
c3RydWN0IGFhY19zZ19lbnRyeSkpKSB7CisJCXN0cnVjdCBhYWNfc2dfZW50cnkgKnNncCA9IHNy
YmNtZC0+c2dfbWFwLlNnRW50cnk7CisJCXNyYl9zZ19ieXRlY291bnQgPSBzZ3AtPlNnQnl0ZUNv
dW50OworCQlzcmJfc2dfYWRkcmVzcyA9ICh1X2ludDY0X3Qpc2dwLT5TZ0FkZHJlc3M7CisJfSBl
bHNlIGlmIChmaWJzaXplID09IChzaXplb2Yoc3RydWN0IGFhY19zcmIpICsgCisJCXNyYmNtZC0+
c2dfbWFwLlNnQ291bnQgKiBzaXplb2Yoc3RydWN0IGFhY19zZ19lbnRyeTY0KSkpIHsKICNpZmRl
ZiBfX2FtZDY0X18KLQllbHNlIGlmIChmaWJzaXplID09IChzaXplb2Yoc3RydWN0IGFhY19zcmIp
ICsKLQkgICAgc3JiY21kLT5zZ19tYXAuU2dDb3VudCAqIHNpemVvZihzdHJ1Y3QgYWFjX3NnX2Vu
dHJ5NjQpKSkgewotCQlzZ2UgPSBOVUxMOwotCQlzZ2U2NCA9IChzdHJ1Y3QgYWFjX3NnX2VudHJ5
NjQgKilzcmJjbWQtPnNnX21hcC5TZ0VudHJ5OwotCQlzcmJfc2dfYnl0ZWNvdW50ID0gc2dlNjQt
PlNnQnl0ZUNvdW50OwotCQlzcmJfc2dfYWRkcmVzcyA9ICh2b2lkICopc2dlNjQtPlNnQWRkcmVz
czsKLQkJaWYgKHNnZTY0LT5TZ0FkZHJlc3MgPiAweGZmZmZmZmZmdWxsICYmCi0JCSAgICAoc2Mt
PmZsYWdzICYgQUFDX0ZMQUdTX1NHXzY0QklUKSA9PSAwKSB7CisJCXN0cnVjdCBhYWNfc2dfZW50
cnk2NCAqc2dwID0gCisJCQkoc3RydWN0IGFhY19zZ19lbnRyeTY0ICopc3JiY21kLT5zZ19tYXAu
U2dFbnRyeTsKKwkJc3JiX3NnX2J5dGVjb3VudCA9IHNncC0+U2dCeXRlQ291bnQ7CisJCXNyYl9z
Z19hZGRyZXNzID0gc2dwLT5TZ0FkZHJlc3M7CisJCWlmIChzcmJfc2dfYWRkcmVzcyA+IDB4ZmZm
ZmZmZmZ1bGwgJiYgCisJCQkhKHNjLT5mbGFncyAmIEFBQ19GTEFHU19TR182NEJJVCkpCisjZW5k
aWYJCisJCXsKIAkJCWVycm9yID0gRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KLQl9Ci0jZW5k
aWYKLQllbHNlIHsKKwl9IGVsc2UgewogCQllcnJvciA9IEVJTlZBTDsKIAkJZ290byBvdXQ7CiAJ
fQotCXVyZXBseSA9IChjaGFyICopYXJnICsgZmlic2l6ZTsKKwl1c2VyX3JlcGx5ID0gKGNoYXIg
KilhcmcgKyBmaWJzaXplOwogCXNyYmNtZC0+ZGF0YV9sZW4gPSBzcmJfc2dfYnl0ZWNvdW50Owot
CWlmIChzcmJjbWQtPnNnX21hcC5TZ0NvdW50ID09IDEpCisJaWYgKHNyYmNtZC0+c2dfbWFwLlNn
Q291bnQgPT0gMSkgCiAJCXRyYW5zZmVyX2RhdGEgPSAxOwogCi0JY20tPmNtX3NndGFibGUgPSAo
c3RydWN0IGFhY19zZ190YWJsZSAqKSZzcmJjbWQtPnNnX21hcDsKIAlpZiAodHJhbnNmZXJfZGF0
YSkgewotCQljbS0+Y21fZGF0YWxlbiA9IHNyYl9zZ19ieXRlY291bnQ7Ci0JCWNtLT5jbV9kYXRh
ID0gbWFsbG9jKGNtLT5jbV9kYXRhbGVuLCBNX0FBQ0JVRiwgTV9OT1dBSVQpOwotCQlpZiAoY20t
PmNtX2RhdGEgPT0gTlVMTCkgeworCQkvKgorCQkgKiBDcmVhdGUgRE1BIHRhZyBmb3IgdGhlIHBh
c3N0aHIuIGRhdGEgYnVmZmVyIGFuZCBhbGxvY2F0ZSBpdC4KKwkJICovCisJCWlmIChidXNfZG1h
X3RhZ19jcmVhdGUoc2MtPmFhY19wYXJlbnRfZG1hdCwgCS8qIHBhcmVudCAqLworCQkJMSwgMCwJ
CQkvKiBhbGdubW50LCBib3VuZGFyeSAqLworCQkJKHNjLT5mbGFncyAmIEFBQ19GTEFHU19TR182
NEJJVCkgPworCQkJQlVTX1NQQUNFX01BWEFERFJfMzJCSVQgOgorCQkJMHg3ZmZmZmZmZiwJCS8q
IGxvd2FkZHIgKi8KKwkJCUJVU19TUEFDRV9NQVhBRERSLCAJLyogaGlnaGFkZHIgKi8KKwkJCU5V
TEwsIE5VTEwsIAkJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KKwkJCXNyYl9zZ19ieXRlY291bnQs
IAkvKiBzaXplICovCisJCQlzYy0+YWFjX3NnX3RhYmxlc2l6ZSwJLyogbnNlZ21lbnRzICovCisJ
CQlzcmJfc2dfYnl0ZWNvdW50LCAJLyogbWF4c2Vnc2l6ZSAqLworCQkJMCwJCQkvKiBmbGFncyAq
LworCQkJTlVMTCwgTlVMTCwJCS8qIE5vIGxvY2tpbmcgbmVlZGVkICovCisJCQkmY20tPmNtX3Bh
c3N0aHJfZG1hdCkpIHsKIAkJCWVycm9yID0gRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJ
aWYgKHNyYmNtZC0+ZmxhZ3MgJiBBQUNfU1JCX0ZMQUdTX0RBVEFfSU4pCisJCWlmIChidXNfZG1h
bWVtX2FsbG9jKGNtLT5jbV9wYXNzdGhyX2RtYXQsICh2b2lkICoqKSZjbS0+Y21fZGF0YSwKKwkJ
CUJVU19ETUFfTk9XQUlULCAmY20tPmNtX2RhdGFtYXApKSB7CisJCQllcnJvciA9IEVOT01FTTsK
KwkJCWdvdG8gb3V0OworCQl9CisJCS8qIGZpbGwgc29tZSBjbSB2YXJpYWJsZXMgKi8KKwkJY20t
PmNtX2RhdGFsZW4gPSBzcmJfc2dfYnl0ZWNvdW50OworCQlpZiAoc3JiY21kLT5mbGFncyAmIEFB
Q19TUkJfRkxBR1NfREFUQV9JTikgCiAJCQljbS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9EQVRBSU47
Ci0JCWlmIChzcmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX09VVCkgeworCQlpZiAo
c3JiY21kLT5mbGFncyAmIEFBQ19TUkJfRkxBR1NfREFUQV9PVVQpCiAJCQljbS0+Y21fZmxhZ3Mg
fD0gQUFDX0NNRF9EQVRBT1VUOwotCQkJZXJyb3IgPSBjb3B5aW4oc3JiX3NnX2FkZHJlc3MsIGNt
LT5jbV9kYXRhLAotCQkJICAgIGNtLT5jbV9kYXRhbGVuKTsKLQkJCWlmIChlcnJvciAhPSAwKQor
CisJCWlmIChzcmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX09VVCkgeworCQkJaWYg
KChlcnJvciA9IGNvcHlpbigKKyNpZmRlZiBfX2FtZDY0X18KKwkJCQkodm9pZCAqKXNyYl9zZ19h
ZGRyZXNzLAorI2Vsc2UKKwkJCQkodm9pZCAqKSh1X2ludDMyX3Qpc3JiX3NnX2FkZHJlc3MsCisj
ZW5kaWYKKwkJCQljbS0+Y21fZGF0YSwgY20tPmNtX2RhdGFsZW4pKSAhPSAwKQogCQkJCWdvdG8g
b3V0OworCQkJLyogc3luYyByZXF1aXJlZCBmb3IgYnVzX2RtYW1lbV9hbGxvYygpIGFsbG9jLiBt
ZW0uPyAqLworCQkJYnVzX2RtYW1hcF9zeW5jKGNtLT5jbV9wYXNzdGhyX2RtYXQsIGNtLT5jbV9k
YXRhbWFwLAorCQkJCUJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAkJfQogCX0KIAotCWZpYi0+SGVh
ZGVyLlNpemUgPSBzaXplb2Yoc3RydWN0IGFhY19maWJfaGVhZGVyKSArCi0JICAgIHNpemVvZihz
dHJ1Y3QgYWFjX3NyYik7CisJLyogYnVpbGQgdGhlIEZJQiAqLworCWZpYi0+SGVhZGVyLlNpemUg
PSBzaXplb2Yoc3RydWN0IGFhY19maWJfaGVhZGVyKSArIAorCQlzaXplb2Yoc3RydWN0IGFhY19z
cmIpOwogCWZpYi0+SGVhZGVyLlhmZXJTdGF0ZSA9Ci0JICAgIEFBQ19GSUJTVEFURV9IT1NUT1dO
RUQgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9JTklUSUFMSVNFRCB8Ci0JICAgIEFBQ19GSUJTVEFU
RV9FTVBUWSAgICAgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9GUk9NSE9TVCAgICB8Ci0JICAgIEFB
Q19GSUJTVEFURV9SRVhQRUNURUQgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9OT1JNICAgICAgICB8
Ci0JICAgIEFBQ19GSUJTVEFURV9BU1lOQyAgICAgICB8Ci0JICAgIEFBQ19GSUJTVEFURV9GQVNU
X1JFU1BPTlNFOwotCWZpYi0+SGVhZGVyLkNvbW1hbmQgPSAoc2MtPmZsYWdzICYgQUFDX0ZMQUdT
X1NHXzY0QklUKSAhPSAwID8KLQkgICAgU2NzaVBvcnRDb21tYW5kVTY0IDogU2NzaVBvcnRDb21t
YW5kOworCQlBQUNfRklCU1RBVEVfSE9TVE9XTkVEICAgfAorCQlBQUNfRklCU1RBVEVfSU5JVElB
TElTRUQgfAorCQlBQUNfRklCU1RBVEVfRU1QVFkJIHwKKwkJQUFDX0ZJQlNUQVRFX0ZST01IT1NU
CSB8CisJCUFBQ19GSUJTVEFURV9SRVhQRUNURUQgICB8CisJCUFBQ19GSUJTVEFURV9OT1JNCSB8
CisJCUFBQ19GSUJTVEFURV9BU1lOQwkgfAorCQlBQUNfRklCU1RBVEVfRkFTVF9SRVNQT05TRTsK
KworCWZpYi0+SGVhZGVyLkNvbW1hbmQgPSAoc2MtPmZsYWdzICYgQUFDX0ZMQUdTX1NHXzY0QklU
KSA/IAorCQlTY3NpUG9ydENvbW1hbmRVNjQgOiBTY3NpUG9ydENvbW1hbmQ7CisJY20tPmNtX3Nn
dGFibGUgPSAoc3RydWN0IGFhY19zZ190YWJsZSAqKSZzcmJjbWQtPnNnX21hcDsKKworCS8qIHNl
bmQgY29tbWFuZCAqLworCWlmICh0cmFuc2Zlcl9kYXRhKSB7CisJCWJ1c19kbWFtYXBfbG9hZChj
bS0+Y21fcGFzc3Rocl9kbWF0LAorCQkJY20tPmNtX2RhdGFtYXAsIGNtLT5jbV9kYXRhLAorCQkJ
Y20tPmNtX2RhdGFsZW4sCisJCQlhYWNfbWFwX2NvbW1hbmRfc2csIGNtLCAwKTsKKwl9IGVsc2Ug
eworCQlhYWNfbWFwX2NvbW1hbmRfc2coY20sIE5VTEwsIDAsIDApOworCX0KIAorCS8qIHdhaXQg
Zm9yIGNvbXBsZXRpb24gKi8KIAltdHhfbG9jaygmc2MtPmFhY19pb19sb2NrKTsKLQlhYWNfd2Fp
dF9jb21tYW5kKGNtKTsKKwl3aGlsZSAoIShjbS0+Y21fZmxhZ3MgJiBBQUNfQ01EX0NPTVBMRVRF
RCkpCisJCW1zbGVlcChjbSwgJnNjLT5hYWNfaW9fbG9jaywgMCwgInNuZHJ3MiIsIDApOwogCW10
eF91bmxvY2soJnNjLT5hYWNfaW9fbG9jayk7CiAKLQlpZiAodHJhbnNmZXJfZGF0YSAmJiAoc3Ji
Y21kLT5mbGFncyAmIEFBQ19TUkJfRkxBR1NfREFUQV9JTikgIT0gMCkgewotCQllcnJvciA9IGNv
cHlvdXQoY20tPmNtX2RhdGEsIHNyYl9zZ19hZGRyZXNzLCBjbS0+Y21fZGF0YWxlbik7Ci0JCWlm
IChlcnJvciAhPSAwKQorCS8qIGNvcHkgZGF0YSAqLworCWlmICh0cmFuc2Zlcl9kYXRhICYmIChz
cmJjbWQtPmZsYWdzICYgQUFDX1NSQl9GTEFHU19EQVRBX0lOKSkgeworCQlpZiAoKGVycm9yID0g
Y29weW91dChjbS0+Y21fZGF0YSwgCisjaWZkZWYgX19hbWQ2NF9fCisJCQkodm9pZCAqKXNyYl9z
Z19hZGRyZXNzLAorI2Vsc2UKKwkJCSh2b2lkICopKHVfaW50MzJfdClzcmJfc2dfYWRkcmVzcywK
KyNlbmRpZgorCQkJY20tPmNtX2RhdGFsZW4pKSAhPSAwKQogCQkJZ290byBvdXQ7CisJCS8qIHN5
bmMgcmVxdWlyZWQgZm9yIGJ1c19kbWFtZW1fYWxsb2MoKSBhbGxvY2F0ZWQgbWVtLj8gKi8KKwkJ
YnVzX2RtYW1hcF9zeW5jKGNtLT5jbV9wYXNzdGhyX2RtYXQsIGNtLT5jbV9kYXRhbWFwLAorCQkJ
CUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKIAl9Ci0JZXJyb3IgPSBjb3B5b3V0KGZpYi0+ZGF0YSwg
dXJlcGx5LCBzaXplb2Yoc3RydWN0IGFhY19zcmJfcmVzcG9uc2UpKTsKKworCS8qIHN0YXR1cyAq
LworCWVycm9yID0gY29weW91dChmaWItPmRhdGEsIHVzZXJfcmVwbHksIHNpemVvZihzdHJ1Y3Qg
YWFjX3NyYl9yZXNwb25zZSkpOworCiBvdXQ6Ci0JaWYgKGNtICE9IE5VTEwpIHsKLQkJaWYgKGNt
LT5jbV9kYXRhICE9IE5VTEwpCi0JCQlmcmVlKGNtLT5jbV9kYXRhLCBNX0FBQ0JVRik7CisJaWYg
KGNtICYmIGNtLT5jbV9kYXRhKSB7CisJCWlmICh0cmFuc2Zlcl9kYXRhKQorCQkJYnVzX2RtYW1h
cF91bmxvYWQoY20tPmNtX3Bhc3N0aHJfZG1hdCwgY20tPmNtX2RhdGFtYXApOworCQlidXNfZG1h
bWVtX2ZyZWUoY20tPmNtX3Bhc3N0aHJfZG1hdCwgY20tPmNtX2RhdGEsIGNtLT5jbV9kYXRhbWFw
KTsKKwkJY20tPmNtX2RhdGFtYXAgPSBvcmlnX21hcDsKKwl9CisJaWYgKGNtICYmIGNtLT5jbV9w
YXNzdGhyX2RtYXQpIAorCQlidXNfZG1hX3RhZ19kZXN0cm95KGNtLT5jbV9wYXNzdGhyX2RtYXQp
OworCWlmIChjbSkgeyAKIAkJbXR4X2xvY2soJnNjLT5hYWNfaW9fbG9jayk7CiAJCWFhY19yZWxl
YXNlX2NvbW1hbmQoY20pOwogCQltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2spOwpAQCAtMzE4
OSw2ICszNjA5LDQyIEBAIG91dDoKIH0KIAogLyoKKyAqIFJlcXVlc3QgYW4gQUlGIGZyb20gdGhl
IGNvbnRyb2xsZXIgKG5ldyBjb21tLiB0eXBlMSkKKyAqLworc3RhdGljIHZvaWQKK2FhY19yZXF1
ZXN0X2FpZihzdHJ1Y3QgYWFjX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNt
OworCXN0cnVjdCBhYWNfZmliICpmaWI7CisKKwlmd3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19G
VU5DVElPTl9FTlRSWV9CLCAiIik7CisKKwlpZiAoYWFjX2FsbG9jX2NvbW1hbmQoc2MsICZjbSkp
IHsKKwkJc2MtPmFpZl9wZW5kaW5nID0gMTsKKwkJcmV0dXJuOworCX0KKwlzYy0+YWlmX3BlbmRp
bmcgPSAwOworICAgIAorCS8qIGJ1aWxkIHRoZSBGSUIgKi8KKwlmaWIgPSBjbS0+Y21fZmliOwor
CWZpYi0+SGVhZGVyLlNpemUgPSBzaXplb2Yoc3RydWN0IGFhY19maWIpOworCWZpYi0+SGVhZGVy
LlhmZXJTdGF0ZSA9CisgICAgICAgIEFBQ19GSUJTVEFURV9IT1NUT1dORUQgICB8CisgICAgICAg
IEFBQ19GSUJTVEFURV9JTklUSUFMSVNFRCB8CisgICAgICAgIEFBQ19GSUJTVEFURV9FTVBUWQkg
fAorICAgICAgICBBQUNfRklCU1RBVEVfRlJPTUhPU1QJIHwKKyAgICAgICAgQUFDX0ZJQlNUQVRF
X1JFWFBFQ1RFRCAgIHwKKyAgICAgICAgQUFDX0ZJQlNUQVRFX05PUk0JIHwKKyAgICAgICAgQUFD
X0ZJQlNUQVRFX0FTWU5DOworCS8qIHNldCBBSUYgbWFya2VyICovCisJZmliLT5IZWFkZXIuU2Vu
ZGVyRGF0YSA9IDB4MDA4MDAwMDA7CisJZmliLT5IZWFkZXIuQ29tbWFuZCA9IEFpZlJlcXVlc3Q7
CisJKChzdHJ1Y3QgYWFjX2FpZl9jb21tYW5kICopZmliLT5kYXRhKS0+Y29tbWFuZCA9IEFpZlJl
cUV2ZW50OworCisJYWFjX21hcF9jb21tYW5kX3NnKGNtLCBOVUxMLCAwLCAwKTsKK30KKworLyoK
ICAqIGNkZXZwcml2IGludGVyZmFjZSBwcml2YXRlIGRlc3RydWN0b3IuCiAgKi8KIHN0YXRpYyB2
b2lkCkBAIC0zMjk1LDYgKzM3NTEsOSBAQCBhYWNfaGFuZGxlX2FpZihzdHJ1Y3QgYWFjX3NvZnRj
ICpzYywgc3RyCiAJCQljbyA9IFRBSUxRX0ZJUlNUKCZzYy0+YWFjX2NvbnRhaW5lcl90cWgpOwog
CQkJd2hpbGUgKGNvICE9IE5VTEwpIHsKIAkJCQlpZiAoY28tPmNvX2ZvdW5kID09IDApIHsKKwkJ
CQkJc3RydWN0IGFhY19kaXNrICphZDsKKwkJCQkJYWQgPSBkZXZpY2VfZ2V0X3NvZnRjKGNvLT5j
b19kaXNrKTsKKwkJCQkJYWQtPmFkX2NvbnRhaW5lciA9IE5VTEw7CiAJCQkJCW10eF91bmxvY2so
JnNjLT5hYWNfaW9fbG9jayk7CiAJCQkJCW10eF9sb2NrKCZHaWFudCk7CiAJCQkJCWRldmljZV9k
ZWxldGVfY2hpbGQoc2MtPmFhY19kZXYsCkBAIC0zNjEyLDYgKzQwNzEsNyBAQCBhYWNfc3VwcG9y
dGVkX2ZlYXR1cmVzKHN0cnVjdCBhYWNfc29mdGMgCiAJIGlmIChmLmZlYXQuZlZhbHVlID09IDAp
IHsKIAkJZi5mZWF0LmZCaXRzLmxhcmdlTEJBID0KIAkJICAgIChzYy0+ZmxhZ3MgJiBBQUNfRkxB
R1NfTEJBXzY0QklUKSA/IDEgOiAwOworCQlmLmZlYXQuZkJpdHMuSkJPRFN1cHBvcnQgPSAxOwog
CQkvKiBUT0RPOiBJbiB0aGUgZnV0dXJlLCBhZGQgb3RoZXIgZmVhdHVyZXMgc3RhdGUgaGVyZSBh
cyB3ZWxsICovCiAJfSBlbHNlIHsKIAkJaWYgKGYuZmVhdC5mQml0cy5sYXJnZUxCQSkKQEAgLTM3
ODMsNiArNDI0Myw3IEBAIGFhY19nZXRfYnVzX2luZm8oc3RydWN0IGFhY19zb2Z0YyAqc2MpCiAJ
CWNhbWluZi0+SW5pdGlhdG9yQnVzSWQgPSBidXNpbmZvLkluaXRpYXRvckJ1c0lkW2ldOwogCQlj
YW1pbmYtPmFhY19zYyA9IHNjOwogCQljYW1pbmYtPnNpbV9kZXYgPSBjaGlsZDsKKwkJY2FtaW5m
LT5hYWNfY2FtID0gTlVMTDsKIAogCQlkZXZpY2Vfc2V0X2l2YXJzKGNoaWxkLCBjYW1pbmYpOwog
CQlkZXZpY2Vfc2V0X2Rlc2MoY2hpbGQsICJTQ1NJIFBhc3N0aHJvdWdoIEJ1cyIpOwpAQCAtMzc5
NiwzICs0MjU3LDE2NCBAQCBhYWNfZ2V0X2J1c19pbmZvKHN0cnVjdCBhYWNfc29mdGMgKnNjKQog
CiAJcmV0dXJuOwogfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBrZXJuZWwgaXMgdXAg
YW5kIHJ1bm5pbmcuIElmIHdlIGFyZSBpbiBhCisgKiBCbGlua0xFRCBzdGF0ZSwgcmV0dXJuIHRo
ZSBCbGlua0xFRCBjb2RlLgorICovCitzdGF0aWMgdV9pbnQzMl90CithYWNfY2hlY2tfYWRhcHRl
cl9oZWFsdGgoc3RydWN0IGFhY19zb2Z0YyAqc2MsIHVfaW50OF90ICpibGVkKQoreworCXVfaW50
MzJfdCByZXQ7CisKKwlyZXQgPSBBQUNfR0VUX0ZXU1RBVFVTKHNjKTsKKworCWlmIChyZXQgJiBB
QUNfVVBfQU5EX1JVTk5JTkcpCisJCXJldCA9IDA7CisJZWxzZSBpZiAocmV0ICYgQUFDX0tFUk5F
TF9QQU5JQyAmJiBibGVkKQorCQkqYmxlZCA9IChyZXQgPj4gMTYpICYgMHhmZjsKKworCXJldHVy
biAocmV0KTsKK30KKworLyoKKyAqIE9uY2UgZG8gYW4gSU9QIHJlc2V0LCBiYXNpY2FsbHkgaGF2
ZSB0byByZS1pbml0aWFsaXplIHRoZSBjYXJkIGFzCisgKiBpZiBjb21pbmcgdXAgZnJvbSBhIGNv
bGQgYm9vdCwgYW5kIHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBhbnkgSU8gdGhh
dCB3YXMgb3V0c3RhbmRpbmcgdG8gdGhlIGFkYXB0ZXIgYXQgdGhlIHRpbWUgb2YgdGhlIElPUAor
ICogUkVTRVQuIEFuZCBwcmVwYXJlIHRoZSBkcml2ZXIgZm9yIElPUCBSRVNFVCBieSBtYWtpbmcg
dGhlIGluaXQgY29kZQorICogbW9kdWxhciB3aXRoIHRoZSBhYmlsaXR5IHRvIGNhbGwgaXQgZnJv
bSBtdWx0aXBsZSBwbGFjZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FhY19yZXNldF9hZGFwdGVyKHN0
cnVjdCBhYWNfc29mdGMgKnNjKQoreworCXN0cnVjdCBhYWNfY29tbWFuZCAqY207CisJc3RydWN0
IGFhY19maWIgKmZpYjsKKwlzdHJ1Y3QgYWFjX3BhdXNlX2NvbW1hbmQgKnBjOworCXVfaW50MzJf
dCBzdGF0dXMsIG9sZF9mbGFncywgcmVzZXRfbWFzaywgd2FpdENvdW50OworCisJZndwcmludGYo
c2MsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOworCisJaWYgKHNjLT5hYWNf
c3RhdGUgJiBBQUNfU1RBVEVfUkVTRVQpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+YWFjX2Rldiwg
ImFhY19yZXNldF9hZGFwdGVyKCkgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAo
RUlOVkFMKTsKKwl9CisJc2MtPmFhY19zdGF0ZSB8PSBBQUNfU1RBVEVfUkVTRVQ7CisKKwkvKiBk
aXNhYmxlIGludGVycnVwdCAqLworCUFBQ19NQVNLX0lOVEVSUlVQVFMoc2MpOworCisJLyoKKwkg
KiBBYm9ydCBhbGwgcGVuZGluZyBjb21tYW5kczoKKwkgKiBhKSBvbiB0aGUgY29udHJvbGxlcgor
CSAqLworCXdoaWxlICgoY20gPSBhYWNfZGVxdWV1ZV9idXN5KHNjKSkgIT0gTlVMTCkgeworCQlj
bS0+Y21fZmxhZ3MgfD0gQUFDX0NNRF9SRVNFVDsKKworCQkvKiBpcyB0aGVyZSBhIGNvbXBsZXRp
b24gaGFuZGxlcj8gKi8KKwkJaWYgKGNtLT5jbV9jb21wbGV0ZSAhPSBOVUxMKSB7CisJCQljbS0+
Y21fY29tcGxldGUoY20pOworCQl9IGVsc2UgeworCQkJLyogYXNzdW1lIHRoYXQgc29tZW9uZSBp
cyBzbGVlcGluZyBvbiB0aGlzCisJCQkgKiBjb21tYW5kCisJCQkgKi8KKwkJCXdha2V1cChjbSk7
CisJCX0KKwl9CisKKwkvKiBiKSBpbiB0aGUgd2FpdGluZyBxdWV1ZXMgKi8KKwl3aGlsZSAoKGNt
ID0gYWFjX2RlcXVldWVfcmVhZHkoc2MpKSAhPSBOVUxMKSB7CisJCWNtLT5jbV9mbGFncyB8PSBB
QUNfQ01EX1JFU0VUOworCisJCS8qIGlzIHRoZXJlIGEgY29tcGxldGlvbiBoYW5kbGVyPyAqLwor
CQlpZiAoY20tPmNtX2NvbXBsZXRlICE9IE5VTEwpIHsKKwkJCWNtLT5jbV9jb21wbGV0ZShjbSk7
CisJCX0gZWxzZSB7CisJCQkvKiBhc3N1bWUgdGhhdCBzb21lb25lIGlzIHNsZWVwaW5nIG9uIHRo
aXMKKwkJCSAqIGNvbW1hbmQKKwkJCSAqLworCQkJd2FrZXVwKGNtKTsKKwkJfQorCX0KKworCS8q
IGZsdXNoIGRyaXZlcyAqLworCWlmIChhYWNfY2hlY2tfYWRhcHRlcl9oZWFsdGgoc2MsIE5VTEwp
ID09IDApCisJCSh2b2lkKSBhYWNfc2h1dGRvd24oc2MtPmFhY19kZXYpOworCisJLyogZXhlY3V0
ZSBJT1AgcmVzZXQgKi8KKwlpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFDX1NVUFBPUlRF
RF9NVV9SRVNFVCkgeworCQlBQUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfSVJDU1IsIEFBQ19JUkNT
Ul9DT1JFU19SU1QpOworCisJCS8qIFdlIG5lZWQgdG8gd2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9y
ZSBhY2Nlc3NpbmcgdGhlIE1VIGFnYWluCisJCSAqIDEwMDAwICogMTAwdXMgPSAxMDAwLDAwMHVz
ID0gMTAwMG1zID0gMXMgIAorCQkgKi8KKwkJd2FpdENvdW50ID0gNSAqIDEwMDAwOworCQl3aGls
ZSAod2FpdENvdW50KSB7CisJCQlERUxBWSgxMDApOwkJCS8qIGRlbGF5IDEwMCBtaWNyb3NlY29u
ZHMgKi8KKwkJCXdhaXRDb3VudC0tOworCQl9CisJfSBlbHNlIGlmICgoYWFjX3N5bmNfY29tbWFu
ZChzYywgCisJCUFBQ19JT1BfUkVTRVRfQUxXQVlTLCAwLCAwLCAwLCAwLCAmc3RhdHVzLCAmcmVz
ZXRfbWFzaykpICE9IDApIHsKKwkJLyogY2FsbCBJT1BfUkVTRVQgZm9yIG9sZGVyIGZpcm13YXJl
ICovCisJCWlmICgoYWFjX3N5bmNfY29tbWFuZChzYywgCisJCQlBQUNfSU9QX1JFU0VULCAwLCAw
LCAwLCAwLCAmc3RhdHVzLCBOVUxMKSkgIT0gMCkgeworCisJCQlpZiAoc3RhdHVzID09IEFBQ19T
UkJfU1RTX0lOVkFMSURfUkVRVUVTVCkKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAi
SU9QX1JFU0VUIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJZWxzZQorCQkJCS8qIHByb2JhYmx5IHRp
bWVvdXQgKi8KKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LCAiSU9QX1JFU0VUIGZhaWxl
ZFxuIik7CisKKwkJCS8qIHVud2luZCBhYWNfc2h1dGRvd24oKSAqLworCQkJYWFjX2FsbG9jX3N5
bmNfZmliKHNjLCAmZmliKTsKKwkJCXBjID0gKHN0cnVjdCBhYWNfcGF1c2VfY29tbWFuZCAqKSZm
aWItPmRhdGFbMF07CisJCQlwYy0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJCXBj
LT5UeXBlID0gQ1RfUEFVU0VfSU87CisJCQlwYy0+VGltZW91dCA9IDE7CisJCQlwYy0+TWluID0g
MTsKKwkJCXBjLT5Ob1Jlc2NhbiA9IDE7CisKKwkJCSh2b2lkKSBhYWNfc3luY19maWIoc2MsIENv
bnRhaW5lckNvbW1hbmQsIDAsIGZpYiwKKwkJCQlzaXplb2YgKHN0cnVjdCBhYWNfcGF1c2VfY29t
bWFuZCkpOworCQkJYWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOworCisJCQlnb3RvIGZpbmlzaDsK
KwkJfQorCX0gZWxzZSBpZiAoc2MtPnN1cHBvcnRlZF9vcHRpb25zICYgQUFDX1NVUFBPUlRFRF9E
T09SQkVMTF9SRVNFVCkgeworCQlBQUNfTUVNMF9TRVRSRUc0KHNjLCBBQUNfU1JDX0lEQlIsIHJl
c2V0X21hc2spOworCQkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIDUgc2Vjb25kcyBiZWZvcmUgYWNj
ZXNzaW5nIHRoZSBkb29yYmVsbCBhZ2FpbgorCQkgKiAxMDAwMCAqIDEwMHVzID0gMTAwMCwwMDB1
cyA9IDEwMDBtcyA9IDFzICAKKwkJICovCisJCXdhaXRDb3VudCA9IDUgKiAxMDAwMDsKKwkJd2hp
bGUgKHdhaXRDb3VudCkgeworCQkJREVMQVkoMTAwKTsJCQkvKiBkZWxheSAxMDAgbWljcm9zZWNv
bmRzICovCisJCQl3YWl0Q291bnQtLTsKKwkJfQorCX0KKworCS8qCisJICogUmUtcmVhZCBhbmQg
cmVuZWdvdGlhdGUgdGhlIEZJQiBwYXJhbWV0ZXJzLCBhcyBvbmUgb2YgdGhlIGFjdGlvbnMKKwkg
KiB0aGF0IGNhbiByZXN1bHQgZnJvbSBhbiBJT1AgcmVzZXQgaXMgdGhlIHJ1bm5pbmcgb2YgYSBu
ZXcgZmlybXdhcmUKKwkgKiBpbWFnZS4KKwkgKi8KKwlvbGRfZmxhZ3MgPSBzYy0+ZmxhZ3M7CisJ
LyoKKwkgKiBJbml0aWFsaXplIHRoZSBhZGFwdGVyLgorCSAqLworCWlmIChhYWNfY2hlY2tfZmly
bXdhcmUoc2MpICE9IDApCisJCWdvdG8gZmluaXNoOworCWlmIChhYWNfaW5pdChzYykgIT0gMCkK
KwkJZ290byBmaW5pc2g7CisKKwlpZiAoKG9sZF9mbGFncyAmIEFBQ19GTEFHU19ORVdfQ09NTSkg
JiYKKwkJIShzYy0+ZmxhZ3MgJiBBQUNfRkxBR1NfTkVXX0NPTU0pKSB7CisJCS8qIHJlbWFwIGlu
dGVycnVwdCBoYW5kbGVyICovCisJCWFhY19zZXR1cF9pbnRyKHNjKTsKKwl9CisKK2ZpbmlzaDoK
KwlzYy0+YWFjX3N0YXRlICY9IH5BQUNfU1RBVEVfUkVTRVQ7CisJQUFDX1VOTUFTS19JTlRFUlJV
UFRTKHNjKTsKKwlhYWNfc3RhcnRpbyhzYyk7CisJcmV0dXJuICgwKTsKK30KKwpkaWZmIC1wcnVO
IG9sZC9hYWNfY2FtLmMgbmV3L2FhY19jYW0uYwotLS0gb2xkL2FhY19jYW0uYwkyMDExLTAzLTMx
IDE0OjU3OjM0LjAwMDAwMDAwMCArMDAwMAorKysgbmV3L2FhY19jYW0uYwkyMDExLTA0LTAxIDEy
OjU3OjAwLjAwMDAwMDAwMCArMDAwMApAQCAtNTM4LDcgKzUzOCw5IEBAIGFhY19jYW1fY29tcGxl
dGUoc3RydWN0IGFhY19jb21tYW5kICpjbSkKIAljY2IgPSBjbS0+Y21fcHJpdmF0ZTsKIAlzcmJy
ID0gKHN0cnVjdCBhYWNfc3JiX3Jlc3BvbnNlICopJmNtLT5jbV9maWItPmRhdGFbMF07CiAKLQlp
ZiAoc3Jici0+ZmliX3N0YXR1cyAhPSAwKSB7CisJaWYgKGNtLT5jbV9mbGFncyAmIEFBQ19DTURf
UkVTRVQpIHsKKwkJY2NiLT5jY2JfaC5zdGF0dXMgPSBDQU1fU0NTSV9CVVNfUkVTRVQ7CisJfSBl
bHNlIGlmIChzcmJyLT5maWJfc3RhdHVzICE9IDApIHsKIAkJZGV2aWNlX3ByaW50ZihzYy0+YWFj
X2RldiwgIlBhc3N0aHJ1IEZJQiBmYWlsZWQhXG4iKTsKIAkJY2NiLT5jY2JfaC5zdGF0dXMgPSBD
QU1fUkVRX0FCT1JURUQ7CiAJfSBlbHNlIHsKQEAgLTU4Myw5ICs1ODUsMTAgQEAgYWFjX2NhbV9j
b21wbGV0ZShzdHJ1Y3QgYWFjX2NvbW1hbmQgKmNtKQogCQkJCSAqIFdlIHdhbnQgREFTRCBhbmQg
UFJPQyBkZXZpY2VzIHRvIG9ubHkgYmUKIAkJCQkgKiB2aXNpYmxlIHRocm91Z2ggdGhlIHBhc3Mg
ZGV2aWNlLgogCQkJCSAqLwotCQkJCWlmICgoZGV2aWNlID09IFRfRElSRUNUKSB8fAotCQkJCSAg
ICAoZGV2aWNlID09IFRfUFJPQ0VTU09SKSB8fAotCQkJCSAgICAoc2MtPmZsYWdzICYgQUFDX0ZM
QUdTX0NBTV9QQVNTT05MWSkpCisJCQkJaWYgKChkZXZpY2UgPT0gVF9ESVJFQ1QgJiYgCisJCQkJ
IAkhKHNjLT5hYWNfZmVhdHVyZV9iaXRzICYgQUFDX1NVUFBMX1NVUFBPUlRFRF9KQk9EKSkgfHwK
KwkJCQkJKGRldmljZSA9PSBUX1BST0NFU1NPUikgfHwKKwkJCQkJKHNjLT5mbGFncyAmIEFBQ19G
TEFHU19DQU1fUEFTU09OTFkpKQogCQkJCQljY2ItPmNzaW8uZGF0YV9wdHJbMF0gPQogCQkJCQkg
ICAgKChkZXZpY2UgJiAweGUwKSB8IFRfTk9ERVZJQ0UpOwogCQkJCX0gZWxzZSBpZiAoY2NiLT5j
Y2JfaC5zdGF0dXMgPT0gQ0FNX1NFTF9USU1FT1VUICYmCmRpZmYgLXBydU4gb2xkL2FhY19kaXNr
LmMgbmV3L2FhY19kaXNrLmMKLS0tIG9sZC9hYWNfZGlzay5jCTIwMTEtMDMtMzEgMTQ6NTc6MzQu
MDAwMDAwMDAwICswMDAwCisrKyBuZXcvYWFjX2Rpc2suYwkyMDExLTA0LTAxIDEzOjMyOjIwLjAw
MDAwMDAwMCArMDAwMApAQCAtOTMsMjYgKzkzLDYwIEBAIERSSVZFUl9NT0RVTEUoYWFjZCwgYWFj
LCBhYWNfZGlza19kcml2ZXIKIHN0YXRpYyBpbnQKIGFhY19kaXNrX29wZW4oc3RydWN0IGRpc2sg
KmRwKQogewotCXN0cnVjdCBhYWNfZGlzawkqc2M7CisJc3RydWN0IGFhY19kaXNrCSpzY2Q7CisJ
c3RydWN0IGFhY19zb2Z0YyAqc2M7CiAKIAlmd3ByaW50ZihOVUxMLCBIQkFfRkxBR1NfREJHX0ZV
TkNUSU9OX0VOVFJZX0IsICIiKTsKIAotCXNjID0gKHN0cnVjdCBhYWNfZGlzayAqKWRwLT5kX2Ry
djE7CisJc2NkID0gKHN0cnVjdCBhYWNfZGlzayAqKWRwLT5kX2RydjE7CiAJCi0JaWYgKHNjID09
IE5VTEwpIHsKKwlpZiAoc2NkID09IE5VTEwpIHsKIAkJcHJpbnRmKCJhYWNfZGlza19vcGVuOiBO
byBTb2Z0Y1xuIik7CiAJCXJldHVybiAoRU5YSU8pOwogCX0KKwlzYyA9IHNjZC0+YWRfY29udHJv
bGxlcjsKIAogCS8qIGNoZWNrIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgdXAgYW5kIHJ1bm5pbmcg
Ki8KLQlpZiAoc2MtPmFkX2NvbnRyb2xsZXItPmFhY19zdGF0ZSAmIEFBQ19TVEFURV9TVVNQRU5E
KSB7Ci0JCWRldmljZV9wcmludGYoc2MtPmFkX2NvbnRyb2xsZXItPmFhY19kZXYsCi0JCSAgICAi
Q29udHJvbGxlciBTdXNwZW5kZWQgY29udHJvbGxlciBzdGF0ZSA9IDB4JXhcbiIsCi0JCSAgICBz
Yy0+YWRfY29udHJvbGxlci0+YWFjX3N0YXRlKTsKLQkJcmV0dXJuKEVOWElPKTsKKwlpZiAoc2Mt
PmFhY19zdGF0ZSAmIEFBQ19TVEFURV9TVVNQRU5EKSB7CisJCWRldmljZV9wcmludGYoc2MtPmFh
Y19kZXYsIAorCQkJIkNvbnRyb2xsZXIgU3VzcGVuZGVkIGNvbnRyb2xsZXIgc3RhdGUgPSAweCV4
XG4iLAorCQkJc2MtPmFhY19zdGF0ZSk7CisJCXJldHVybiAoRU5YSU8pOworCX0gICAgICAgICAg
CisKKwkvKiBhbHJlYWR5IG9wZW5lZD8gKi8KKwlpZiAoc2NkLT5hZF9mbGFncyAmIEFBQ19ESVNL
X09QRU4pIAorCQlyZXR1cm4gKDApOworCisJLyogcG93ZXIgbWFuYWdlbWVudCAqLworCWlmIChz
Yy0+YWFjX3N1cHBvcnRfb3B0MiAmIEFBQ19TVVBQT1JURURfUE9XRVJfTUFOQUdFTUVOVCkgewor
CQlzdHJ1Y3QgYWFjX2ZpYiAqZmliOworCQlzdHJ1Y3QgYWFjX2NudF9jb25maWcgKmNtZDsKKwor
CQltdHhfbG9jaygmc2MtPmFhY19pb19sb2NrKTsKKwkJYWFjX2FsbG9jX3N5bmNfZmliKHNjLCAm
ZmliKTsKKworCQkvKiBTdGFydCB1bml0ICovCisJCWNtZCA9IChzdHJ1Y3QgYWFjX2NudF9jb25m
aWcgKikmZmliLT5kYXRhWzBdOworCQliemVybyhjbWQsIHNpemVvZiAoKmNtZCkgLSBDVF9QQUNL
RVRfU0laRSk7CisJCWNtZC0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJY21kLT5D
VENvbW1hbmQuY29tbWFuZCA9IENUX1BNX0RSSVZFUl9TVVBQT1JUOworCQljbWQtPkNUQ29tbWFu
ZC5wYXJhbVswXSA9IEFBQ19QTV9EUklWRVJTVVBfU1RBUlRfVU5JVDsKKwkJY21kLT5DVENvbW1h
bmQucGFyYW1bMV0gPSBzY2QtPmFkX2NvbnRhaW5lci0+Y29fbW50b2JqLk9iamVjdElkOworCQlj
bWQtPkNUQ29tbWFuZC5wYXJhbVsyXSA9IDA7CS8qIDEgLSBpbW1lZGlhdGUgKi8KKworCQlpZiAo
YWFjX3N5bmNfZmliKHNjLCBDb250YWluZXJDb21tYW5kLCAwLCBmaWIsCisJCQkJIHNpemVvZihz
dHJ1Y3QgYWFjX2NudF9jb25maWcpKSB8fAorCQkJKih1X2ludDMyX3QgKikmZmliLT5kYXRhWzBd
ICE9IDApIHsKKwkJCXByaW50ZigiUG93ZXIgTWFuYWdlbWVudDogRXJyb3Igc3RhcnRpbmcgY29u
dGFpbmVyICVkXG4iLCAKKwkJCQlzY2QtPmFkX2NvbnRhaW5lci0+Y29fbW50b2JqLk9iamVjdElk
KTsKKwkJfQorCisJCWFhY19yZWxlYXNlX3N5bmNfZmliKHNjKTsKKwkJbXR4X3VubG9jaygmc2Mt
PmFhY19pb19sb2NrKTsKIAl9CiAKLQlzYy0+YWRfZmxhZ3MgfD0gQUFDX0RJU0tfT1BFTjsKKwlz
Y2QtPmFkX2ZsYWdzIHw9IEFBQ19ESVNLX09QRU47CiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMTIy
LDE2ICsxNTYsNTAgQEAgYWFjX2Rpc2tfb3BlbihzdHJ1Y3QgZGlzayAqZHApCiBzdGF0aWMgaW50
CiBhYWNfZGlza19jbG9zZShzdHJ1Y3QgZGlzayAqZHApCiB7Ci0Jc3RydWN0IGFhY19kaXNrCSpz
YzsKKwlzdHJ1Y3QgYWFjX2Rpc2sJKnNjZDsKKwlzdHJ1Y3QgYWFjX3NvZnRjICpzYzsKIAogCWZ3
cHJpbnRmKE5VTEwsIEhCQV9GTEFHU19EQkdfRlVOQ1RJT05fRU5UUllfQiwgIiIpOwogCi0Jc2Mg
PSAoc3RydWN0IGFhY19kaXNrICopZHAtPmRfZHJ2MTsKKwlzY2QgPSAoc3RydWN0IGFhY19kaXNr
ICopZHAtPmRfZHJ2MTsKIAkKLQlpZiAoc2MgPT0gTlVMTCkKKwlpZiAoc2NkID09IE5VTEwpCiAJ
CXJldHVybiAoRU5YSU8pOworCXNjID0gc2NkLT5hZF9jb250cm9sbGVyOworCisJLyogYWxyZWFk
eSBjbG9zZWQ/ICovCisJaWYgKCEoc2NkLT5hZF9mbGFncyAmIEFBQ19ESVNLX09QRU4pKSAKKwkJ
cmV0dXJuICgwKTsKKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlpZiAoc2MtPmFhY19zdXBw
b3J0X29wdDIgJiBBQUNfU1VQUE9SVEVEX1BPV0VSX01BTkFHRU1FTlQpIHsKKwkJc3RydWN0IGFh
Y19maWIgKmZpYjsKKwkJc3RydWN0IGFhY19jbnRfY29uZmlnICpjbWQ7CisKKwkJbXR4X2xvY2so
JnNjLT5hYWNfaW9fbG9jayk7CisJCWFhY19hbGxvY19zeW5jX2ZpYihzYywgJmZpYik7CisKKwkJ
LyogU3RvcCB1bml0ICovCisJCWNtZCA9IChzdHJ1Y3QgYWFjX2NudF9jb25maWcgKikmZmliLT5k
YXRhWzBdOworCQliemVybyhjbWQsIHNpemVvZiAoKmNtZCkgLSBDVF9QQUNLRVRfU0laRSk7CisJ
CWNtZC0+Q29tbWFuZCA9IFZNX0NvbnRhaW5lckNvbmZpZzsKKwkJY21kLT5DVENvbW1hbmQuY29t
bWFuZCA9IENUX1BNX0RSSVZFUl9TVVBQT1JUOworCQljbWQtPkNUQ29tbWFuZC5wYXJhbVswXSA9
IEFBQ19QTV9EUklWRVJTVVBfU1RPUF9VTklUOworCQljbWQtPkNUQ29tbWFuZC5wYXJhbVsxXSA9
IHNjZC0+YWRfY29udGFpbmVyLT5jb19tbnRvYmouT2JqZWN0SWQ7CisJCWNtZC0+Q1RDb21tYW5k
LnBhcmFtWzJdID0gMDsJLyogMSAtIGltbWVkaWF0ZSAqLworCisJCWlmIChhYWNfc3luY19maWIo
c2MsIENvbnRhaW5lckNvbW1hbmQsIDAsIGZpYiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBhYWNfY250
X2NvbmZpZykpIHx8CisJCQkqKHVfaW50MzJfdCAqKSZmaWItPmRhdGFbMF0gIT0gMCkgeworCQkJ
cHJpbnRmKCJQb3dlciBNYW5hZ2VtZW50OiBFcnJvciBzdG9wcGluZyBjb250YWluZXIgJWRcbiIs
IAorCQkJCXNjZC0+YWRfY29udGFpbmVyLT5jb19tbnRvYmouT2JqZWN0SWQpOworCQl9CisKKwkJ
YWFjX3JlbGVhc2Vfc3luY19maWIoc2MpOworCQltdHhfdW5sb2NrKCZzYy0+YWFjX2lvX2xvY2sp
OworCX0KIAotCXNjLT5hZF9mbGFncyAmPSB+QUFDX0RJU0tfT1BFTjsKKwlzY2QtPmFkX2ZsYWdz
ICY9IH5BQUNfRElTS19PUEVOOwogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtcHJ1TiBvbGQvYWFj
X2lvY3RsLmggbmV3L2FhY19pb2N0bC5oCi0tLSBvbGQvYWFjX2lvY3RsLmgJMjAxMS0wMy0zMSAx
NTowMDozNS4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWNfaW9jdGwuaAkyMDExLTA0LTAxIDEz
OjMzOjI5LjAwMDAwMDAwMCArMDAwMApAQCAtMTU3LDEyICsxNTcsMTIgQEAgdW5pb24gYWFjX3N0
YXRyZXF1ZXN0IHsKIHN0cnVjdCBhYWNfcmV2X2NoZWNrIHsKIAlSZXZDb21wb25lbnQJCWNhbGxp
bmdDb21wb25lbnQ7CiAJc3RydWN0IEZzYVJldmlzaW9uCWNhbGxpbmdSZXZpc2lvbjsKLX07Cit9
IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWFjX3Jldl9jaGVja19yZXNwIHsKIAlpbnQJCQlwb3NzaWJs
eUNvbXBhdGlibGU7CiAJc3RydWN0IEZzYVJldmlzaW9uCWFkYXB0ZXJTV1JldmlzaW9uOwotfTsK
K30gX19wYWNrZWQ7CiAKIC8qCiAgKiBDb250ZXh0IHBhc3NlZCBpbiBieSBhIGNvbnN1bWVyIGxv
b2tpbmcgdG8gY29sbGVjdCBhbiBBSUYuCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RydWN0IGdldF9h
ZGFwdGVyX2ZpYl9pb2N0bCB7CiAJdV9pbnQzMl90CUFkYXB0ZXJGaWJDb250ZXh0OwogCWludAkg
IAlXYWl0OwogCWNhZGRyX3QJCUFpZkZpYjsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYWFj
X3F1ZXJ5X2Rpc2sgewogCWludDMyX3QJCUNvbnRhaW5lck51bWJlcjsKQEAgLTE4NCw3ICsxODQs
NyBAQCBzdHJ1Y3QgYWFjX3F1ZXJ5X2Rpc2sgewogCWludDMyX3QJCUluc3RhbmNlOwogCWNoYXIJ
CWRpc2tEZXZpY2VOYW1lWzEwXTsKIAl1X2ludDMyX3QJVW5NYXBwZWQ7Ci19OworfSBfX3BhY2tl
ZDsKIAogLyogRmVhdHVyZXMsIGFza2VkIGZyb20gdGhlIHRvb2xzIHRvIGtub3cgaWYgdGhlIGRy
aXZlcgogICogc3VwcG9ydHMgZHJpdmVzID4yVEIKQEAgLTE5Miw3ICsxOTIsMTAgQEAgc3RydWN0
IGFhY19xdWVyeV9kaXNrIHsKIHR5cGVkZWYgdW5pb24gewogCXN0cnVjdCB7CiAJCXVfaW50MzJf
dCBsYXJnZUxCQSAgOiAxOwkvKiBkaXNrIHN1cHBvcnQgZ3JlYXRlciAyVEIgKi8KLQkJdV9pbnQz
Ml90IGZSZXNlcnZlZCA6IDMxOworCQl1X2ludDMyX3QgSW9jdGxCdWYgIDogMTsgICAgLyogQVJD
SU9DVEwgY2FsbCBzdXBwb3J0ICovCisJCXVfaW50MzJfdCBBSUZTdXBwb3J0OiAxOyAgICAvKiBB
SUYgc3VwcG9ydCAqLworCQl1X2ludDMyX3QgSkJPRFN1cHBvcnQ6MTsgICAgLyogZmlybXdhcmUg
KyBkcml2ZXIgYm90aCBzdXBwb3J0IEpCT0QgKi8KKwkJdV9pbnQzMl90IGZSZXNlcnZlZCA6IDI4
OwogCX0gZkJpdHM7CiAJdV9pbnQzMl90IGZWYWx1ZTsKIH0gZmVhdHVyZXNTdGF0ZTsKZGlmZiAt
cHJ1TiBvbGQvYWFjX3BjaS5jIG5ldy9hYWNfcGNpLmMKLS0tIG9sZC9hYWNfcGNpLmMJMjAxMS0w
My0zMSAxNDo1NzozNC4wMDAwMDAwMDAgKzAwMDAKKysrIG5ldy9hYWNfcGNpLmMJMjAxMS0wNC0w
MSAxMzo0MTowMC4wMDAwMDAwMDAgKzAwMDAKQEAgLTIsNyArMiw4IEBACiAgKiBDb3B5cmlnaHQg
KGMpIDIwMDAgTWljaGFlbCBTbWl0aAogICogQ29weXJpZ2h0IChjKSAyMDAxIFNjb3R0IExvbmcK
ICAqIENvcHlyaWdodCAoYykgMjAwMCBCU0RpCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgQWRhcHRl
YywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAgQWRhcHRlYywgSW5jLgorICogQ29w
eXJpZ2h0IChjKSAyMDEwIFBNQy1TaWVycmEsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0yNDMsMTUgKzI0NCw3IEBAIHN0cnVjdCBhYWNfaWRlbnQK
IAl7MHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMmQwLCBBQUNfSFdJRl9JOTYwUlgsIDAsCiAJ
ICJBZGFwdGVjIFJBSUQgNTI0NDUifSwKIAl7MHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMmQx
LCBBQUNfSFdJRl9JOTYwUlgsIDAsCi0JICJBZGFwdGVjIFJBSUQgNTQwNSJ9LAotCXsweDkwMDUs
IDB4MDI4NSwgMHg5MDA1LCAweDAyZDQsIEFBQ19IV0lGX0k5NjBSWCwgMCwKLQkgIkFkYXB0ZWMg
UkFJRCAyMDQ1In0sCi0JezB4OTAwNSwgMHgwMjg1LCAweDkwMDUsIDB4MDJkNSwgQUFDX0hXSUZf
STk2MFJYLCAwLAotCSAiQWRhcHRlYyBSQUlEIDI0MDUifSwKLQl7MHg5MDA1LCAweDAyODUsIDB4
OTAwNSwgMHgwMmQ2LCBBQUNfSFdJRl9JOTYwUlgsIDAsCi0JICJBZGFwdGVjIFJBSUQgMjQ0NSJ9
LAotCXsweDkwMDUsIDB4MDI4NSwgMHg5MDA1LCAweDAyZDcsIEFBQ19IV0lGX0k5NjBSWCwgMCwK
LQkgIkFkYXB0ZWMgUkFJRCAyODA1In0sCisgICAgICAgICJBZGFwdGVjIFJBSUQgNTQwNSJ9LAog
CXsweDkwMDUsIDB4MDI4NiwgMHgxMDE0LCAweDk1ODAsIEFBQ19IV0lGX1JLVCwgMCwKIAkgIklC
TSBTZXJ2ZVJBSUQtOGsifSwKIAl7MHg5MDA1LCAweDAyODUsIDB4MTAxNCwgMHgwMzRkLCBBQUNf
SFdJRl9JOTYwUlgsIDAsCkBAIC0yODQsNiArMjc3LDggQEAgYWFjX2ZhbWlseV9pZGVudGlmaWVy
c1tdID0gewogCSAiQWRhcHRlYyBSQUlEIENvbnRyb2xsZXIifSwKIAl7MHg5MDA1LCAweDAyODYs
IDAsIDAsIEFBQ19IV0lGX1JLVCwgMCwKIAkgIkFkYXB0ZWMgUkFJRCBDb250cm9sbGVyIn0sCisJ
ezB4OTAwNSwgMHgwMjhiLCAwLCAwLCBBQUNfSFdJRl9TUkMsIDAsCisJICJBZGFwdGVjIFJBSUQg
Q29udHJvbGxlciJ9LAogCXswLCAwLCAwLCAwLCAwLCAwLCAwfQogfTsKIApAQCAtMzY5LDYgKzM2
NCw0MCBAQCBhYWNfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAJCWdvdG8gb3V0OwogCX0KIAor
CS8qIAorCSAqIERldGVjdCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHZlcnNpb24sIHNldCB1cCB0
aGUgYnVzIGludGVyZmFjZQorCSAqIGluZGlyZWN0aW9uLgorCSAqLworCWlkID0gYWFjX2ZpbmRf
aWRlbnQoZGV2KTsKKwlzYy0+YWFjX2h3aWYgPSBpZC0+aHdpZjsKKwlzd2l0Y2goc2MtPmFhY19o
d2lmKSB7CisJY2FzZSBBQUNfSFdJRl9JOTYwUlg6CisJY2FzZSBBQUNfSFdJRl9OQVJLOgorCQlm
d3ByaW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIGk5
NjBSeC9OQVJLIik7CisJCXNjLT5hYWNfaWYgPSBhYWNfcnhfaW50ZXJmYWNlOworCQlicmVhazsK
KwljYXNlIEFBQ19IV0lGX1NUUk9OR0FSTToKKwkJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdf
SU5JVF9CLCAic2V0IGhhcmR3YXJlIHVwIGZvciBTdHJvbmdBUk0iKTsKKwkJc2MtPmFhY19pZiA9
IGFhY19zYV9pbnRlcmZhY2U7CisJCWJyZWFrOworCWNhc2UgQUFDX0hXSUZfUktUOgorCQlmd3By
aW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIFJvY2tl
dC9NSVBTIik7CisJCXNjLT5hYWNfaWYgPSBhYWNfcmt0X2ludGVyZmFjZTsKKwkJYnJlYWs7CisJ
Y2FzZSBBQUNfSFdJRl9TUkM6CisJCWZ3cHJpbnRmKHNjLCBIQkFfRkxBR1NfREJHX0lOSVRfQiwg
InNldCBoYXJkd2FyZSB1cCBmb3IgUE1DIFNSQyIpOworCQlzYy0+YWFjX2lmID0gYWFjX3NyY19p
bnRlcmZhY2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNjLT5hYWNfaHdpZiA9IEFBQ19IV0lG
X1VOS05PV047CisJCWRldmljZV9wcmludGYoc2MtPmFhY19kZXYsICJ1bmtub3duIGhhcmR3YXJl
IHR5cGVcbiIpOworCQllcnJvciA9IEVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhc3N1
bWUgZmFpbHVyZSBpcyAnb3V0IG9mIG1lbW9yeScgKi8KKwllcnJvciA9IEVOT01FTTsKKwogCS8q
CiAJICogQWxsb2NhdGUgdGhlIFBDSSByZWdpc3RlciB3aW5kb3cuCiAJICovCkBAIC0zODIsOCAr
NDExLDggQEAgYWFjX3BjaV9hdHRhY2goZGV2aWNlX3QgZGV2KQogCXNjLT5hYWNfYnRhZzAgPSBy
bWFuX2dldF9idXN0YWcoc2MtPmFhY19yZWdzX3JlczApOwogCXNjLT5hYWNfYmhhbmRsZTAgPSBy
bWFuX2dldF9idXNoYW5kbGUoc2MtPmFhY19yZWdzX3JlczApOwogCi0JaWYgKHNjLT5hYWNfaHdp
ZiA9PSBBQUNfSFdJRl9OQVJLKSB7Ci0JCXNjLT5hYWNfcmVnc19yaWQxID0gUENJUl9CQVIoMSk7
CisJaWYgKHNjLT5hYWNfaHdpZiA9PSBBQUNfSFdJRl9TUkMgfHwgc2MtPmFhY19od2lmID09IEFB
Q19IV0lGX05BUkspIHsKKwkJc2MtPmFhY19yZWdzX3JpZDEgPSBQQ0lSX0JBUigyKTsKIAkJaWYg
KChzYy0+YWFjX3JlZ3NfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2MtPmFhY19kZXYs
CiAJCSAgICBTWVNfUkVTX01FTU9SWSwgJnNjLT5hYWNfcmVnc19yaWQxLCBSRl9BQ1RJVkUpKSA9
PSBOVUxMKSB7CiAJCQlkZXZpY2VfcHJpbnRmKHNjLT5hYWNfZGV2LApAQCAtNDE5LDMzICs0NDgs
NiBAQCBhYWNfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAJCWdvdG8gb3V0OwogCX0KIAotCS8q
IAotCSAqIERldGVjdCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHZlcnNpb24sIHNldCB1cCB0aGUg
YnVzIGludGVyZmFjZQotCSAqIGluZGlyZWN0aW9uLgotCSAqLwotCWlkID0gYWFjX2ZpbmRfaWRl
bnQoZGV2KTsKLQlzYy0+YWFjX2h3aWYgPSBpZC0+aHdpZjsKLQlzd2l0Y2goc2MtPmFhY19od2lm
KSB7Ci0JY2FzZSBBQUNfSFdJRl9JOTYwUlg6Ci0JY2FzZSBBQUNfSFdJRl9OQVJLOgotCQlmd3By
aW50ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIGk5NjBS
eC9OQVJLIik7Ci0JCXNjLT5hYWNfaWYgPSBhYWNfcnhfaW50ZXJmYWNlOwotCQlicmVhazsKLQlj
YXNlIEFBQ19IV0lGX1NUUk9OR0FSTToKLQkJZndwcmludGYoc2MsIEhCQV9GTEFHU19EQkdfSU5J
VF9CLCAic2V0IGhhcmR3YXJlIHVwIGZvciBTdHJvbmdBUk0iKTsKLQkJc2MtPmFhY19pZiA9IGFh
Y19zYV9pbnRlcmZhY2U7Ci0JCWJyZWFrOwotCWNhc2UgQUFDX0hXSUZfUktUOgotCQlmd3ByaW50
ZihzYywgSEJBX0ZMQUdTX0RCR19JTklUX0IsICJzZXQgaGFyZHdhcmUgdXAgZm9yIFJvY2tldC9N
SVBTIik7Ci0JCXNjLT5hYWNfaWYgPSBhYWNfcmt0X2ludGVyZmFjZTsKLQkJYnJlYWs7Ci0JZGVm
YXVsdDoKLQkJc2MtPmFhY19od2lmID0gQUFDX0hXSUZfVU5LTk9XTjsKLQkJZGV2aWNlX3ByaW50
ZihzYy0+YWFjX2RldiwgInVua25vd24gaGFyZHdhcmUgdHlwZVxuIik7Ci0JCWVycm9yID0gRU5Y
SU87Ci0JCWdvdG8gb3V0OwotCX0KLQogCS8qIFNldCB1cCBxdWlya3MgKi8KIAlzYy0+ZmxhZ3Mg
PSBpZC0+cXVpcmtzOwogCmRpZmYgLXBydU4gb2xkL2FhY3JlZy5oIG5ldy9hYWNyZWcuaAotLS0g
b2xkL2FhY3JlZy5oCTIwMTEtMDMtMzEgMTQ6NTc6MzQuMDAwMDAwMDAwICswMDAwCisrKyBuZXcv
YWFjcmVnLmgJMjAxMS0wNC0wMSAxMzo0Njo1MS4wMDAwMDAwMDAgKzAwMDAKQEAgLTIsNyArMiw4
IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgTWljaGFlbCBTbWl0aAogICogQ29weXJpZ2h0IChj
KSAyMDAwLTIwMDEgU2NvdHQgTG9uZwogICogQ29weXJpZ2h0IChjKSAyMDAwIEJTRGkKLSAqIENv
cHlyaWdodCAoYykgMjAwMSBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAx
MCBBZGFwdGVjLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUE1DLVNpZXJyYSwgSW5jLgog
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMyw2ICsxMjQs
MTQgQEAgc3RydWN0IGFhY19xdWV1ZV90YWJsZSB7CiAjZGVmaW5lIEFBQ19BREFQX05PUk1fUkVT
UF9RVUVVRQk2CiAjZGVmaW5lIEFBQ19BREFQX0hJR0hfUkVTUF9RVUVVRQk3CiAKKy8qIHRyYW5z
cG9ydCBGSUIgaGVhZGVyIChQTUMpICovCitzdHJ1Y3QgYWFjX2ZpYl94cG9ydGhkciB7CisJdV9p
bnQ2NF90CUhvc3RBZGRyZXNzOwkvKiBGSUIgaG9zdCBhZGRyZXNzIHcvbyB4cG9ydCBoZWFkZXIg
Ki8KKwl1X2ludDMyX3QJU2l6ZTsJCQkvKiBGSUIgc2l6ZSBleGNsdWRpbmcgeHBvcnQgaGVhZGVy
ICovCisJdV9pbnQzMl90CUhhbmRsZTsJCQkvKiBkcml2ZXIgaGFuZGxlIHRvIHJlZmVyZW5jZSB0
aGUgRklCICovCisJdV9pbnQ2NF90CVJlc2VydmVkWzJdOworfSBfX3BhY2tlZDsKKwogLyoKICAq
IExpc3Qgc3RydWN0dXJlIHVzZWQgdG8gY2hhaW4gRklCcyAodXNlZCBieSB0aGUgYWRhcHRlciAt
IHdlIGhhbmcgRklCcyBvZmYKICAqIG91ciBwcml2YXRlIGNvbW1hbmQgc3RydWN0dXJlIGFuZCBk
b24ndCB0b3VjaCB0aGVzZSkKQEAgLTI2OCw2ICsyNzcsNyBAQCB0eXBlZGVmIGVudW0gewogI2Rl
ZmluZSBBQUNfRklCU1RBVEVfQklPU0ZJQgkJKDE8PDE4KQogI2RlZmluZSBBQUNfRklCU1RBVEVf
RkFTVF9SRVNQT05TRQkoMTw8MTkpCS8qIGZhc3QgcmVzcG9uc2UgY2FwYWJsZSAqLwogI2RlZmlu
ZSBBQUNfRklCU1RBVEVfQVBJRklCCQkoMTw8MjApCisjZGVmaW5lIEFBQ19GSUJTVEFURV9OT01P
UkVBSUYJCSgxPDwyMSkKIAogLyoKICAqIEZJQiBlcnJvciB2YWx1ZXMKQEAgLTI5MCw2ICszMDAs
NyBAQCBzdHJ1Y3QgYWFjX2FkYXB0ZXJfaW5pdCB7CiAJdV9pbnQzMl90CUluaXRTdHJ1Y3RSZXZp
c2lvbjsKICNkZWZpbmUgQUFDX0lOSVRfU1RSVUNUX1JFVklTSU9OCQkzCiAjZGVmaW5lIEFBQ19J
TklUX1NUUlVDVF9SRVZJU0lPTl80CQk0CisjZGVmaW5lIEFBQ19JTklUX1NUUlVDVF9SRVZJU0lP
Tl82CQk2CiAJdV9pbnQzMl90CU1pbmlQb3J0UmV2aXNpb247CiAjZGVmaW5lIEFBQ19JTklUX1NU
UlVDVF9NSU5JUE9SVF9SRVZJU0lPTgkxCiAJdV9pbnQzMl90CUZpbGVzeXN0ZW1SZXZpc2lvbjsK
QEAgLTMwNiwxMiArMzE3LDE4IEBAIHN0cnVjdCBhYWNfYWRhcHRlcl9pbml0IHsKIAl1X2ludDMy
X3QJSG9zdEVsYXBzZWRTZWNvbmRzOwogCS8qIEFEQVBURVJfSU5JVF9TVFJVQ1RfUkVWSVNJT05f
NCBiZWdpbnMgaGVyZSAqLwogCXVfaW50MzJfdAlJbml0RmxhZ3M7CQkJLyogZmxhZ3MgZm9yIHN1
cHBvcnRlZCBmZWF0dXJlcyAqLwotI2RlZmluZQlBQUNfSU5JVEZMQUdTX05FV19DT01NX1NVUFBP
UlRFRAkxCi0jZGVmaW5lCUFBQ19JTklURkxBR1NfRFJJVkVSX1VTRVNfVVRDX1RJTUUJMHgxMAot
I2RlZmluZQlBQUNfSU5JVEZMQUdTX0RSSVZFUl9TVVBQT1JUU19QTQkweDIwCisjZGVmaW5lIEFB
Q19JTklURkxBR1NfTkVXX0NPTU1fU1VQUE9SVEVECTEKKyNkZWZpbmUgQUFDX0lOSVRGTEFHU19E
UklWRVJfVVNFU19VVENfVElNRQkweDEwCisjZGVmaW5lIEFBQ19JTklURkxBR1NfRFJJVkVSX1NV
UFBPUlRTX1BNCTB4MjAKKyNkZWZpbmUgQUFDX0lOSVRGTEFHU19ORVdfQ09NTV9UWVBFMV9TVVBQ
T1JURUQgIDB4NDEKIAl1X2ludDMyX3QJTWF4SW9Db21tYW5kczsJCS8qIG1heCBvdXRzdGFuZGlu
ZyBjb21tYW5kcyAqLwogCXVfaW50MzJfdAlNYXhJb1NpemU7CQkJLyogbGFyZ2VzdCBJL08gY29t
bWFuZCAqLwogCXVfaW50MzJfdAlNYXhGaWJTaXplOwkJCS8qIGxhcmdlc3QgRklCIHRvIGFkYXB0
ZXIgKi8KKwkvKiBBREFQVEVSX0lOSVRfU1RSVUNUX1JFVklTSU9OXzUgYmVnaW5zIGhlcmUgKi8K
Kwl1X2ludDMyX3QJTWF4TnVtQWlmOwkgICAgICAgIC8qIG1heCBudW1iZXIgb2YgYWlmICovIAor
CS8qIEFEQVBURVJfSU5JVF9TVFJVQ1RfUkVWSVNJT05fNiBiZWdpbnMgaGVyZSAqLworCXVfaW50
MzJfdAlIb3N0UlJRX0FkZHJMb3c7CisJdV9pbnQzMl90CUhvc3RSUlFfQWRkckhpZ2g7CS8qIEhv
c3QgUlJRIChyZXNwb25zZSBxdWV1ZSkgZm9yIFNSQyAqLwogfSBfX3BhY2tlZDsKIAogLyoKQEAg
LTU3OCw2ICs1OTUsNyBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgQUFDX1NVUFBPUlRFRF9ORVdf
Q09NTQkJMHgyMDAwMAogI2RlZmluZSBBQUNfU1VQUE9SVEVEXzY0QklUX0FSUkFZU0laRQkweDQw
MDAwCiAjZGVmaW5lIEFBQ19TVVBQT1JURURfSEVBVF9TRU5TT1IJMHg4MDAwMAorI2RlZmluZSBB
QUNfU1VQUE9SVEVEX05FV19DT01NX1RZUEUxCTB4MTAwMDAwMDAgIC8qIFBNQyB0eXBlIG5ldyBj
b21tICovCiAKIC8qIAogICogU3RydWN0dXJlIHVzZWQgdG8gcmVzcG9uZCB0byBhIFJlcXVlc3RB
ZGFwdGVySW5mbyBmaWIuCkBAIC02MDYsNiArNjI0LDIwIEBAIHN0cnVjdCBhYWNfYWRhcHRlcl9p
bmZvIHsKIAlBQUNfT2VtRmxhdm9yCU9lbVZhcmlhbnQ7CiB9IF9fcGFja2VkOwogCisvKgorICog
TW9yZSBvcHRpb25zIGZyb20gc3VwcGxlbWVudCBpbmZvIC0gU3VwcG9ydGVkT3B0aW9uczIKKyAq
LworI2RlZmluZSBBQUNfU1VQUE9SVEVEX01VX1JFU0VUCQkJMHgwMQorI2RlZmluZSBBQUNfU1VQ
UE9SVEVEX0lHTk9SRV9SRVNFVAkJMHgwMgorI2RlZmluZSBBQUNfU1VQUE9SVEVEX1BPV0VSX01B
TkFHRU1FTlQJCTB4MDQKKyNkZWZpbmUgQUFDX1NVUFBPUlRFRF9BUkNJT19QSFlERVYJCTB4MDgK
KyNkZWZpbmUgQUFDX1NVUFBPUlRFRF9ET09SQkVMTF9SRVNFVAkJMHg0MDAwCisKKy8qCisgKiBG
ZWF0dXJlQml0cyBvZiBSZXF1ZXN0U3VwcGxlbWVudEFkYXB0ZXJJbmZvIHVzZWQgaW4gdGhlIGRy
aXZlcgorICovCisjZGVmaW5lIEFBQ19TVVBQTF9TVVBQT1JURURfSkJPRAkweDA4MDAwMDAwCisK
IC8qIAogICogU3RydWN0dXJlIHVzZWQgdG8gcmVzcG9uZCB0byBhIFJlcXVlc3RTdXBwbGVtZW50
QWRhcHRlckluZm8gZmliLgogICovCkBAIC02NTQsOCArNjg2LDEyIEBAIHN0cnVjdCBhYWNfc3Vw
cGxlbWVudF9hZGFwdGVyX2luZm8gewogCXVfaW50OF90CQlNZmdQY2JhU2VyaWFsTm9bTUZHX1BD
QkFfU0VSSUFMX05VTUJFUl9XSURUSF07CiAJLyogV1dOIGZyb20gdGhlIE1GRyBzZWN0b3IgKi8K
IAl1X2ludDhfdAkJTWZnV1dOTmFtZVtNRkdfV1dOX1dJRFRIXTsKLQkvKiBHcm93dGggQXJlYSBm
b3IgZnV0dXJlIGV4cGFuc2lvbiAoKDcqNCkgLSAxMiAtIDgpLzQgPSAyIHdvcmRzICovCi0JdV9p
bnQzMl90CVJlc2VydmVkR3Jvd3RoWzJdOworCXVfaW50MzJfdAlTdXBwb3J0ZWRPcHRpb25zMjsJ
CS8qIG1vcmUgc3VwcG9ydGVkIGZlYXR1cmVzICovCisJdV9pbnQzMl90CUV4cGFuc2lvbkZsYWc7
CQkJLyogMSAtIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdV9pbnQzMl90CUZlYXR1
cmVCaXRzMzsKKwl1X2ludDMyX3QJU3VwcG9ydGVkUGVyZm9ybWFuY2VNb2RlOworCS8qIEdyb3d0
aCBBcmVhIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdV9pbnQzMl90CVJlc2VydmVkR3Jvd3Ro
WzgwXTsKIH0gX19wYWNrZWQ7CiAKIC8qCkBAIC02NzUsNiArNzExLDggQEAgc3RydWN0IGFhY19z
dXBwbGVtZW50X2FkYXB0ZXJfaW5mbyB7CiAjZGVmaW5lIEFBQ19NT05LRVJfUkNWVEVNUAkweDI1
CiAjZGVmaW5lIEFBQ19NT05LRVJfR0VUQ09NTVBSRUYJMHgyNgogI2RlZmluZSBBQUNfTU9OS0VS
X1JFSU5JVAkweGVlCisjZGVmaW5lCUFBQ19JT1BfUkVTRVQJCTB4MTAwMAorI2RlZmluZQlBQUNf
SU9QX1JFU0VUX0FMV0FZUwkweDEwMDEKIAogLyoKICAqICBBZGFwdGVyIFN0YXR1cyBSZWdpc3Rl
cgpAQCAtMTAwNCw3ICsxMDQyLDggQEAgdHlwZWRlZiBlbnVtIHsKIAlBaWZSZXFTZW5kQVBJUmVw
b3J0LAkvKiBBUEkgZ2VuZXJpYyByZXBvcnQgcmVxdWVzdHMgKi8KIAlBaWZSZXFBUElKb2JTdGFy
dCwJLyogU3RhcnQgYSBqb2IgZnJvbSB0aGUgQVBJICovCiAJQWlmUmVxQVBJSm9iVXBkYXRlLAkv
KiBVcGRhdGUgYSBqb2IgcmVwb3J0IGZyb20gdGhlIEFQSSAqLwotCUFpZlJlcUFQSUpvYkZpbmlz
aAkvKiBGaW5pc2ggYSBqb2IgZnJvbSB0aGUgQVBJICovCisJQWlmUmVxQVBJSm9iRmluaXNoLAkv
KiBGaW5pc2ggYSBqb2IgZnJvbSB0aGUgQVBJICovCisJQWlmUmVxRXZlbnQgPSAyMDAJLyogUE1D
IE5FVyBDT01NOiBSZXF1ZXN0IHRoZSBldmVudCBkYXRhICovCiB9IEFBQ19BaWZDb21tYW5kOwog
CiBzdHJ1Y3QgYWFjX2FpZl9jb21tYW5kIHsKQEAgLTExNDMsNiArMTE4Miw0MiBAQCB0eXBlZGVm
IGVudW0gX1ZNX0NPTU1BTkRTIHsKIAlWTV9OYW1lU2VydmU2NAkJIAogfSBBQUNfVk1Db21tYW5k
OwogCisvKiBDb250YWluZXIgQ29uZmlndXJhdGlvbiBTdWItQ29tbWFuZHMgKi8KKyNkZWZpbmUg
Q1RfR0VUX1NDU0lfTUVUSE9ECTY0CisjZGVmaW5lCUNUX1BBVVNFX0lPCQkJNjUKKyNkZWZpbmUJ
Q1RfUkVMRUFTRV9JTwkJCTY2CisjZGVmaW5lCUNUX0dFVF9DT05GSUdfU1RBVFVTCQkxNDcKKyNk
ZWZpbmUJQ1RfQ09NTUlUX0NPTkZJRwkJMTUyCisjZGVmaW5lIENUX1BNX0RSSVZFUl9TVVBQT1JU
CQkyNDUKKworLyogQ1RfUE1fRFJJVkVSX1NVUFBPUlQgcGFyYW1ldGVyICovCit0eXBlZGVmIGVu
dW0geworCUFBQ19QTV9EUklWRVJTVVBfR0VUX1NUQVRVUyA9IDEsCisJQUFDX1BNX0RSSVZFUlNV
UF9TVEFSVF9VTklULAorCUFBQ19QTV9EUklWRVJTVVBfU1RPUF9VTklUCit9IEFBQ19DVF9QTV9E
UklWRVJfU1VQUE9SVF9TVUJfQ09NOworCisvKgorICogQ1RfUEFVU0VfSU8gaXMgaW1tZWRpYXRl
IG1pbmltYWwgcnVudGltZSBjb21tYW5kIHRoYXQgaXMgdXNlZAorICogdG8gcmVzdGFydCB0aGUg
YXBwbGljYXRpb25zIGFuZCBjYWNoZS4KKyAqLworc3RydWN0IGFhY19wYXVzZV9jb21tYW5kIHsK
Kwl1X2ludDMyX3QJQ29tbWFuZDsKKwl1X2ludDMyX3QJVHlwZTsKKwl1X2ludDMyX3QJVGltZW91
dDsKKwl1X2ludDMyX3QJTWluOworCXVfaW50MzJfdAlOb1Jlc2NhbjsKKwl1X2ludDMyX3QJUGFy
bTM7CisJdV9pbnQzMl90CVBhcm00OworCXVfaW50MzJfdAlDb3VudDsKK30gX19wYWNrZWQ7CisK
Ky8qIEZsYWcgdmFsdWVzIGZvciBDb250ZW50U3RhdGUgKi8KKyNkZWZpbmUgQUFDX0ZTQ1NfTk9U
Q0xFQU4JMHgxCS8qIGZzY2hlY2sgaXMgbmVjZXNzYXJ5IGJlZm9yZSBtb3VudGluZyAqLworI2Rl
ZmluZSBBQUNfRlNDU19SRUFET05MWQkweDIJLyogcG9zc2libGUgcmVzdWx0IG9mIGJyb2tlbiBt
aXJyb3IgKi8KKyNkZWZpbmUgQUFDX0ZTQ1NfSElEREVOCQkweDQJLyogY29udGFpbmVyIHNob3Vs
ZCBiZSBpZ25vcmVkIGJ5IGRyaXZlciAqLworI2RlZmluZSBBQUNfRlNDU19OT1RfUkVBRFkJMHg4
CS8qIGNudCBpcyBpbiBzcGlubi4gc3RhdGUsIG5vdCByZHkgZm9yIElPJ3MgKi8KKwogLyoKICAq
ICJtb3VudGFibGUgb2JqZWN0IgogICovCkBAIC0xMTg3LDcgKzEyNjIsNiBAQCBzdHJ1Y3QgYWFj
X2Nsb3NlY29tbWFuZCB7CiAvKgogICogQ29udGFpbmVyIENvbmZpZyBDb21tYW5kCiAgKi8KLSNk
ZWZpbmUgQ1RfR0VUX1NDU0lfTUVUSE9ECTY0CiBzdHJ1Y3QgYWFjX2N0Y2ZnIHsKIAl1X2ludDMy
X3QJCUNvbW1hbmQ7CiAJdV9pbnQzMl90CQljbWQ7CkBAIC0xMzA5LDYgKzEzODMsMjQgQEAgdHlw
ZWRlZiBlbnVtIHsKIAlDTVVOU1RBQkxFCiB9IEFBQ19Db21taXRMZXZlbDsKIAorCisjZGVmaW5l
CUNUX0ZJQl9QQVJBTVMJCQk2CisjZGVmaW5lCU1BWF9GSUJfUEFSQU1TCQkJMTAKKyNkZWZpbmUJ
Q1RfUEFDS0VUX1NJWkUgXAorCShBQUNfRklCX0RBVEFTSVpFIC0gc2l6ZW9mICh1X2ludDMyX3Qp
IC0gXAorCSgoc2l6ZW9mICh1X2ludDMyX3QpKSAqIChNQVhfRklCX1BBUkFNUyArIDEpKSkKKwor
c3RydWN0IGFhY19mc2FfY3RtIHsKKwl1X2ludDMyX3QJY29tbWFuZDsKKwl1X2ludDMyX3QJcGFy
YW1bQ1RfRklCX1BBUkFNU107CisJaW50OF90CQlkYXRhW0NUX1BBQ0tFVF9TSVpFXTsKK307CisK
K3N0cnVjdCBhYWNfY250X2NvbmZpZyB7CisJdV9pbnQzMl90CQlDb21tYW5kOworCXN0cnVjdCBh
YWNfZnNhX2N0bQlDVENvbW1hbmQ7Cit9OworCiAvKgogICogQmxvY2sgcmVhZC93cml0ZSBvcGVy
YXRpb25zLgogICogVGhlc2Ugc3RydWN0dXJlcyBhcmUgcGFja2VkIGludG8gdGhlICdkYXRhJyBh
cmVhIGluIHRoZSBGSUIuCkBAIC0xMzc4LDcgKzE0NzAsNyBAQCBzdHJ1Y3QgYWFjX3Jhd19pbyB7
CiBzdHJ1Y3QgYWFjX2Nsb3NlX2NvbW1hbmQgewogCXVfaW50MzJfdAkJQ29tbWFuZDsKIAl1X2lu
dDMyX3QJCUNvbnRhaW5lcklkOwotfTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBTQ1NJIFBhc3N0
aHJvdWdoIHN0cnVjdHVyZXMKQEAgLTEzOTUsNyArMTQ4Nyw3IEBAIHN0cnVjdCBhYWNfc3JiIHsK
IAl1X2ludDMyX3QJCWNkYl9sZW47CiAJdV9pbnQ4X3QJCWNkYlsxNl07CiAJc3RydWN0IGFhY19z
Z190YWJsZQlzZ19tYXA7Ci19OworfSBfX3BhY2tlZDsKIAogZW51bSB7CiAJQUFDX1NSQl9GVU5D
X0VYRUNVVEVfU0NTSQk9IDB4MDAsCkBAIC0xNDM2LDcgKzE1MjgsNyBAQCBzdHJ1Y3QgYWFjX3Ny
Yl9yZXNwb25zZSB7CiAJdV9pbnQzMl90CWRhdGFfbGVuOwogCXVfaW50MzJfdAlzZW5zZV9sZW47
CiAJdV9pbnQ4X3QJc2Vuc2VbQUFDX0hPU1RfU0VOU0VfREFUQV9NQVhdOwotfTsKK30gX19wYWNr
ZWQ7CiAKIC8qCiAgKiBTdGF0dXMgY29kZXMgZm9yIFNDU0kgcGFzc3Rocm91Z2ggY29tbWFuZHMu
ICBTaW5jZSB0aGV5IGFyZSBiYXNlZCBvbiBBU1BJLApAQCAtMTUzMSw2ICsxNjIzLDI5IEBAIGVu
dW0gewogI2RlZmluZSBBQUNfUktUX0ZXU1RBVFVTCTB4MTAxYwkvKiBGaXJtd2FyZSBTdGF0dXMg
KG1haWxib3ggNykgKi8KIAogLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgQWRh
cHRlYyBQTUMgU1JDIGFkYXB0ZXJzLgorICovCisvKiBhY2Nlc3NpYmxlIHZpYSBCQVIwICovCisj
ZGVmaW5lIEFBQ19TUkNfT01SCQkJMHhiYwkvKiBvdXRib3VuZCBtZXNzYWdlIHJlZ2lzdGVyICov
CisjZGVmaW5lIEFBQ19TUkNfSURCUgkJMHgyMAkvKiBpbmJvdW5kIGRvb3JiZWxsIHJlZ2lzdGVy
ICovCisjZGVmaW5lIEFBQ19TUkNfSUlTUgkJMHgyNAkvKiBpbmJvdW5kIGludGVycnVwdCBzdGF0
dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUFDX1NSQ19PREJSX1IJCTB4OWMJLyogb3V0Ym91bmQg
ZG9vcmJlbGwgcmVnaXN0ZXIgcmVhZCAqLworI2RlZmluZSBBQUNfU1JDX09EQlJfQwkJMHhhMAkv
KiBvdXRib3VuZCBkb29yYmVsbCByZWdpc3RlciBjbGVhciAqLworI2RlZmluZSBBQUNfU1JDX09J
TVIJCTB4MzQJLyogb3V0Ym91bmQgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUg
QUFDX1NSQ19JUVVFX0wJCTB4YzAJLyogaW5ib3VuZCBxdWV1ZSBhZGRyZXNzIChsb3cpICovCisj
ZGVmaW5lIEFBQ19TUkNfSVFVRV9ICQkweGM0CS8qIGluYm91bmQgcXVldWUgYWRkcmVzcyAoaGln
aCkgKi8KKworI2RlZmluZSBBQUNfU1JDX01BSUxCT1gJCTB4N2ZjNjAJLyogbWFpbGJveCAoMjAg
Ynl0ZXMpICovCisKKyNkZWZpbmUgQUFDX1NSQ19PRFJfU0hJRlQgCTEyCQkvKiBvdXRib3VuZCBk
b29yYmVsbCBzaGlmdCAqLworI2RlZmluZSBBQUNfU1JDX0lEUl9TSElGVCAJOQkJLyogaW5ib3Vu
ZCBkb29yYmVsbCBzaGlmdCAqLworCisvKiBTdW5yaXNlIExha2UgZHVhbCBjb3JlIHJlc2V0ICov
CisjZGVmaW5lIEFBQ19JUkNTUgkJMHgzOAkvKiBpbmJvdW5kIGR1YWwgY29yZXMgcmVzZXQgKi8K
KyNkZWZpbmUgQUFDX0lSQ1NSX0NPUkVTX1JTVAkzCisKKworLyoKICAqIENvbW1vbiBiaXQgZGVm
aW5pdGlvbnMgZm9yIHRoZSBkb29yYmVsbCByZWdpc3RlcnMuCiAgKi8KIApAQCAtMTU0Miw2ICsx
NjU3LDkgQEAgZW51bSB7CiAjZGVmaW5lIEFBQ19EQl9SRVNQT05TRV9SRUFEWQkoMTw8MikJLyog
b25lIG9yIG1vcmUgY29tbWFuZHMgY29tcGxldGUgKi8KICNkZWZpbmUgQUFDX0RCX0NPTU1BTkRf
Tk9UX0ZVTEwJKDE8PDMpCS8qIGNvbW1hbmQgcXVldWUgbm90IGZ1bGwgKi8KICNkZWZpbmUgQUFD
X0RCX1JFU1BPTlNFX05PVF9GVUxMICgxPDw0KQkvKiByZXNwb25zZSBxdWV1ZSBub3QgZnVsbCAq
LworI2RlZmluZSBBQUNfREJfQUlGX1BFTkRJTkcJCSgxPDw2KQkvKiBwZW5kaW5nIEFJRiAobmV3
IGNvbW0uIHR5cGUxKSAqLworLyogUE1DIHNwZWNpZmljIG91dGJvdW5kIGRvb3JiZWxsIGJpdHMg
Ki8KKyNkZWZpbmUgQUFDX0RCX1JFU1BPTlNFX1NFTlRfTlMJCSgxPDwxKQkvKiByZXNwb25zZSBz
ZW50IChub3Qgc2hpZnRlZCkgKi8KIAogLyoKICAqIFRoZSBhZGFwdGVyIGNhbiByZXF1ZXN0IHRo
ZSBob3N0IHByaW50IGEgbWVzc2FnZSBieSBzZXR0aW5nIHRoZQpAQCAtMTU2MCw1ICsxNjc4LDYg
QEAgZW51bSB7CiAjZGVmaW5lIEFBQ19EQl9JTlRFUlJVUFRTCShBQUNfREJfQ09NTUFORF9SRUFE
WSAgfAlcCiAJCQkJIEFBQ19EQl9SRVNQT05TRV9SRUFEWSB8CVwKIAkJCQkgQUFDX0RCX1BSSU5U
RikKLSNkZWZpbmUgQUFDX0RCX0lOVF9ORVdfQ09NTQkJMHgwOAkJCisjZGVmaW5lIEFBQ19EQl9J
TlRfTkVXX0NPTU0JCTB4MDggIAorI2RlZmluZSBBQUNfREJfSU5UX05FV19DT01NX1RZUEUxCTB4
MDQKIApkaWZmIC1wcnVOIG9sZC9hYWN2YXIuaCBuZXcvYWFjdmFyLmgKLS0tIG9sZC9hYWN2YXIu
aAkyMDExLTAzLTMxIDE0OjU3OjM0LjAwMDAwMDAwMCArMDAwMAorKysgbmV3L2FhY3Zhci5oCTIw
MTEtMDQtMDEgMTQ6MDE6NDguMDAwMDAwMDAwICswMDAwCkBAIC0yLDcgKzIsOCBAQAogICogQ29w
eXJpZ2h0IChjKSAyMDAwIE1pY2hhZWwgU21pdGgKICAqIENvcHlyaWdodCAoYykgMjAwMSBTY290
dCBMb25nCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgQlNEaQotICogQ29weXJpZ2h0IChjKSAyMDAx
IEFkYXB0ZWMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDEwIEFkYXB0ZWMsIEluYy4K
KyAqIENvcHlyaWdodCAoYykgMjAxMCBQTUMtU2llcnJhLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDMsOCArNDQsOCBAQAogI2RlZmluZQlBQUNf
VFlQRV9SRUxFQVNFCQk0CiAKICNkZWZpbmUJQUFDX0RSSVZFUl9NQUpPUl9WRVJTSU9OCTIKLSNk
ZWZpbmUJQUFDX0RSSVZFUl9NSU5PUl9WRVJTSU9OCTEKLSNkZWZpbmUJQUFDX0RSSVZFUl9CVUdG
SVhfTEVWRUwJCTkKKyNkZWZpbmUJQUFDX0RSSVZFUl9NSU5PUl9WRVJTSU9OCTQKKyNkZWZpbmUJ
QUFDX0RSSVZFUl9CVUdGSVhfTEVWRUwJCTEKICNkZWZpbmUJQUFDX0RSSVZFUl9UWVBFCQkJQUFD
X1RZUEVfUkVMRUFTRQogCiAjaWZuZGVmIEFBQ19EUklWRVJfQlVJTEQKQEAgLTU2LDEyICs1Nyw2
IEBACiAgKi8KIAogLyoKLSAqIFRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgYWxsb3dzIGZvciBhIDE2
LWJpdCBzL2cgbGlzdCBsZW5ndGguICBXZSBsaW1pdCAKLSAqIG91cnNlbHZlcyB0byBhIHJlYXNv
bmFibGUgbWF4aW11bSBhbmQgZW5zdXJlIGFsaWdubWVudC4KLSAqLwotI2RlZmluZSBBQUNfTUFY
U0dFTlRSSUVTCTY0CS8qIG1heCBTL0cgZW50cmllcywgbGltaXQgNjU1MzUgKi8JCQotCi0vKgog
ICogV2UgYWxsb2NhdGUgYSBzbWFsbCBzZXQgb2YgRklCcyBmb3IgdGhlIGFkYXB0ZXIgdG8gdXNl
IHRvIHNlbmQgdXMgbWVzc2FnZXMuCiAgKi8KICNkZWZpbmUgQUFDX0FEQVBURVJfRklCUwk4CkBA
IC0xNzYsMTQgKzE3MSwxNSBAQCBzdHJ1Y3QgYWFjX2NvbW1hbmQKICNkZWZpbmUgQUFDX09OX0FB
Q1FfQUlGCQkoMTw8OCkKICNkZWZpbmUgQUFDX09OX0FBQ1FfTk9STQkoMTw8MTApCiAjZGVmaW5l
IEFBQ19PTl9BQUNRX01BU0sJKCgxPDw1KXwoMTw8Nil8KDE8PDcpfCgxPDw4KXwoMTw8MTApKQot
I2RlZmluZSBBQUNfUVVFVUVfRlJaTgkJKDE8PDkpCQkvKiBGcmVlemUgdGhlIHByb2Nlc3Npbmcg
b2YKLQkJCQkJCSAqIGNvbW1hbmRzIG9uIHRoZSBxdWV1ZS4gKi8KKyNkZWZpbmUgQUFDX0NNRF9S
RVNFVAkJKDE8PDkpCiAKIAl2b2lkCQkJKCogY21fY29tcGxldGUpKHN0cnVjdCBhYWNfY29tbWFu
ZCAqY20pOwogCXZvaWQJCQkqY21fcHJpdmF0ZTsKIAl0aW1lX3QJCQljbV90aW1lc3RhbXA7CS8q
IGNvbW1hbmQgY3JlYXRpb24gdGltZSAqLwogCWludAkJCWNtX3F1ZXVlOwogCWludAkJCWNtX2lu
ZGV4OworCWJ1c19kbWFfdGFnX3QJCWNtX3Bhc3N0aHJfZG1hdDsJLyogcGFzc3Rocm91Z2ggYnVm
ZmVyL2NvbW1hbmQKKwkJCQkJCQkgKiBETUEgdGFnICovCiB9OwogCiBzdHJ1Y3QgYWFjX2ZpYm1h
cCB7CkBAIC0yMjIsNiArMjE4LDkgQEAgc3RydWN0IGFhY19jb21tb24gewogCQogCS8qIGZpYiBm
b3Igc3luY2hyb25vdXMgY29tbWFuZHMgKi8KIAlzdHJ1Y3QgYWFjX2ZpYgkJYWNfc3luY19maWI7
CisKKwkvKiByZXNwb25zZSBidWZmZXIgZm9yIFNSQyAobmV3IGNvbW0uIHR5cGUxKSAtIG11c3Qg
YmUgbGFzdCBlbGVtZW50ICovCisJdV9pbnQzMl90ICAgYWNfaG9zdF9ycnFbMF07CiB9OwogCiAv
KgpAQCAtMjQ0LDggKzI0Myw4IEBAIHN0cnVjdCBhYWNfaW50ZXJmYWNlIAogfTsKIGV4dGVybiBz
dHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfcnhfaW50ZXJmYWNlOwogZXh0ZXJuIHN0cnVjdCBhYWNf
aW50ZXJmYWNlCWFhY19zYV9pbnRlcmZhY2U7Ci1leHRlcm4gc3RydWN0IGFhY19pbnRlcmZhY2UJ
YWFjX2ZhX2ludGVyZmFjZTsKIGV4dGVybiBzdHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfcmt0X2lu
dGVyZmFjZTsKK2V4dGVybiBzdHJ1Y3QgYWFjX2ludGVyZmFjZQlhYWNfc3JjX2ludGVyZmFjZTsK
IAogI2RlZmluZSBBQUNfR0VUX0ZXU1RBVFVTKHNjKQkJKChzYyktPmFhY19pZi5haWZfZ2V0X2Z3
c3RhdHVzKChzYykpKQogI2RlZmluZSBBQUNfUU5PVElGWShzYywgcWJpdCkJCSgoc2MpLT5hYWNf
aWYuYWlmX3Fub3RpZnkoKHNjKSwgKHFiaXQpKSkKQEAgLTMyNCw2ICszMjMsNyBAQCBzdHJ1Y3Qg
YWFjX3NvZnRjIAogI2RlZmluZQlBQUNfU1RBVEVfVU5VU0VEMAkoMTw8MSkKICNkZWZpbmUgQUFD
X1NUQVRFX0lOVEVSUlVQVFNfT04JKDE8PDIpCiAjZGVmaW5lIEFBQ19TVEFURV9BSUZfU0xFRVBF
UgkoMTw8MykKKyNkZWZpbmUgQUFDX1NUQVRFX1JFU0VUCQkoMTw8NCkKIAlzdHJ1Y3QgRnNhUmV2
aXNpb24JCWFhY19yZXZpc2lvbjsKIAogCS8qIGNvbnRyb2xsZXIgaGFyZHdhcmUgaW50ZXJmYWNl
ICovCkBAIC0zMzIsNiArMzMyLDcgQEAgc3RydWN0IGFhY19zb2Z0YyAKICNkZWZpbmUgQUFDX0hX
SUZfU1RST05HQVJNCTEKICNkZWZpbmUgQUFDX0hXSUZfUktUCQkzCiAjZGVmaW5lCUFBQ19IV0lG
X05BUksJCTQKKyNkZWZpbmUgQUFDX0hXSUZfU1JDCQk1CiAjZGVmaW5lIEFBQ19IV0lGX1VOS05P
V04JLTEKIAlidXNfZG1hX3RhZ190CQlhYWNfY29tbW9uX2RtYXQ7CS8qIGNvbW1vbiBzdHJ1Y3R1
cmUKIAkJCQkJCQkgKiBETUEgdGFnICovCkBAIC0zMzksNiArMzQwLDcgQEAgc3RydWN0IGFhY19z
b2Z0YyAKIAkJCQkJCQkgKiBETUEgbWFwICovCiAJc3RydWN0IGFhY19jb21tb24JKmFhY19jb21t
b247CiAJdV9pbnQzMl90CQlhYWNfY29tbW9uX2J1c2FkZHI7CisJdV9pbnQzMl90CQlhYWNfaG9z
dF9ycnFfaWR4OwogCXN0cnVjdCBhYWNfaW50ZXJmYWNlCWFhY19pZjsKIAogCS8qIGNvbW1hbmQv
ZmliIHJlc291cmNlcyAqLwpAQCAtMzgxLDYgKzM4Myw3IEBAIHN0cnVjdCBhYWNfc29mdGMgCiAJ
c3RydWN0IGFhY19maWIJCWFhY19haWZxW0FBQ19BSUZRX0xFTkdUSF07CiAJaW50CQkJYWlmcV9p
ZHg7CiAJaW50CQkJYWlmcV9maWxsZWQ7CisJaW50IAkJCWFpZl9wZW5kaW5nOwogCXN0cnVjdCBh
YWNfZmliX2NvbnRleHQgKmZpYmN0eDsKIAlzdHJ1Y3Qgc2VsaW5mbwkJcmN2X3NlbGVjdDsKIAlz
dHJ1Y3QgcHJvYwkJKmFpZnRocmVhZDsKQEAgLTQwOSw4ICs0MTIsMTIgQEAgc3RydWN0IGFhY19z
b2Z0YyAKICNkZWZpbmUgQUFDX0ZMQUdTX05FV19DT01NCSgxIDw8IDExKQkvKiBOZXcgY29tbS4g
aW50ZXJmYWNlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBBQUNfRkxBR1NfUkFXX0lPCSgxIDw8IDEy
KQkvKiBSYXcgSS9PIGludGVyZmFjZSAqLwogI2RlZmluZSBBQUNfRkxBR1NfQVJSQVlfNjRCSVQJ
KDEgPDwgMTMpCS8qIDY0LWJpdCBhcnJheSBzaXplICovCi0jZGVmaW5lCUFBQ19GTEFHU19MQkFf
NjRCSVQJKDEgPDwgMTQpCS8qIDY0LWJpdCBMQkEgc3VwcG9ydCAqLwotCisjZGVmaW5lIEFBQ19G
TEFHU19MQkFfNjRCSVQJKDEgPDwgMTQpCS8qIDY0LWJpdCBMQkEgc3VwcG9ydCAqLworI2RlZmlu
ZSBBQUNfUVVFVUVfRlJaTgkJKDEgPDwgMTUpCS8qIEZyZWV6ZSB0aGUgcHJvY2Vzc2luZyBvZgor
CQkJCQkJICogY29tbWFuZHMgb24gdGhlIHF1ZXVlLiAqLworI2RlZmluZSBBQUNfRkxBR1NfTkVX
X0NPTU1fVFlQRTEgKDEgPDwgMTYpCS8qIE5ldyBjb21tLiB0eXBlMSBzdXBwb3J0ZWQgKi8KKwl1
X2ludDMyX3QJCWhpbnRfZmxhZ3M7CQkvKiBkcml2ZXIgcGFyYW1ldGVycyAqLworCWludAlzaW1f
ZnJlZXplZDsJCQkJLyogZmxhZyBmb3Igc2ltX2ZyZWV6ZS9yZWxlYXNlICovCQkKIAl1X2ludDMy
X3QJCXN1cHBvcnRlZF9vcHRpb25zOwogCXVfaW50MzJfdAkJc2NzaV9tZXRob2RfaWQ7CiAJVEFJ
TFFfSEVBRCgsYWFjX3NpbSkJYWFjX3NpbV90cWg7CkBAIC00MjIsNiArNDI5LDkgQEAgc3RydWN0
IGFhY19zb2Z0YyAKIAl1X2ludDMyX3QJYWFjX21heF9maWJfc2l6ZTsJCS8qIG1heC4gRklCIHNp
emUgKi8KIAl1X2ludDMyX3QJYWFjX3NnX3RhYmxlc2l6ZTsJCS8qIG1heC4gc2cgY291bnQgZnJv
bSBob3N0ICovCiAJdV9pbnQzMl90CWFhY19tYXhfc2VjdG9yczsJCS8qIG1heC4gSS9PIHNpemUg
ZnJvbSBob3N0IChibG9ja3MpICovCisJdV9pbnQzMl90CWFhY19mZWF0dXJlX2JpdHM7CQkvKiBm
ZWF0dXJlIGJpdHMgZnJvbSBzdXBwbC4gaW5mbyAqLworCXVfaW50MzJfdAlhYWNfc3VwcG9ydF9v
cHQyOwkJLyogc3VwcC4gb3B0aW9ucyBmcm9tIHN1cHBsLiBpbmZvICovCisJdV9pbnQzMl90CWFh
Y19tYXhfYWlmOwkJCS8qIG1heC4gQUlGIGNvdW50ICovCiAjZGVmaW5lIEFBQ19DQU1fVEFSR0VU
X1dJTERDQVJEIH4wCiAJdm9pZAkJCSgqY2FtX3Jlc2Nhbl9jYikoc3RydWN0IGFhY19zb2Z0YyAq
LCB1aW50MzJfdCwKIAkJCQkgICAgdWludDMyX3QpOwpAQCAtNDUzLDYgKzQ2Myw3IEBAIGV4dGVy
biBpbnQJCWFhY19kZXRhY2goZGV2aWNlX3QgZGV2KTsKIGV4dGVybiBpbnQJCWFhY19zaHV0ZG93
bihkZXZpY2VfdCBkZXYpOwogZXh0ZXJuIGludAkJYWFjX3N1c3BlbmQoZGV2aWNlX3QgZGV2KTsg
CiBleHRlcm4gaW50CQlhYWNfcmVzdW1lKGRldmljZV90IGRldik7CitleHRlcm4gdm9pZAkJYWFj
X25ld19pbnRyX3R5cGUxKHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZAkJYWFjX25ld19pbnRyKHZv
aWQgKmFyZyk7CiBleHRlcm4gaW50CQlhYWNfZmlsdGVyKHZvaWQgKmFyZyk7CiBleHRlcm4gdm9p
ZAkJYWFjX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYnApOwo=

------_=_NextPart_001_01CBF3A6.F7D71E12--



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