[patch] multipath RAID personality, 2.4.10-pre9

Ingo Molnar (mingo@elte.hu)
Fri, 14 Sep 2001 12:01:44 +0200 (CEST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--8323328-2011292279-1000461704=:2577
Content-Type: TEXT/PLAIN; charset=US-ASCII

the attached patches implement multipath IO for Linux in form of a sw-RAID
personality. Multipath-IO is the ability of certain devices to address the
same physical disk over multiple 'IO paths'. The code ensures that such
paths can be defined and handled runtime, and ensures that a transparent
failover to the backup path(s) happens if a IO errors arrives on the
primary path.

the attached patches add the multipath RAID personality in two stages:

- multipath-generic-2.4.10-A0, generic bits and enhancements to the MD
framework. The patch also fixes some raid-hotadd/hotremove and
autodetection bugs.

- multipath-2.4.10-A0, the multipath personality itself.

multipath-generic-2.4.10-A0 is standalone and results in a functional MD
layer. The multipath-2.4.10-A0 patch must be applied on top of this.

latest raidtools are needed to be able to define multipath devices in
/etc/raidtab. RH 7.1 and other distributions use this new raidtools
package, but the latest version can also be downloaded from:

http://redhat.com/~mingo/raidtools/raidtools-20010914.tar.gz

comments, reports welcome,

Ingo

--8323328-2011292279-1000461704=:2577
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="multipath-generic-2.4.10-A0"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.33.0109141201440.2577@localhost.localdomain>
Content-Description:
Content-Disposition: attachment; filename="multipath-generic-2.4.10-A0"

LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgub3JpZwlGcmkg
U2VwIDE0IDEwOjAwOjE2IDIwMDENCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4
L3JhaWQvbWRfay5oCUZyaSBTZXAgMTQgMTA6Mzc6MzcgMjAwMQ0KQEAgLTE3
LDE3ICsxNywxOCBAQA0KIA0KICNkZWZpbmUgTURfUkVTRVJWRUQgICAgICAg
MFVMDQogI2RlZmluZSBMSU5FQVIgICAgICAgICAgICAxVUwNCi0jZGVmaW5l
IFNUUklQRUQgICAgICAgICAgIDJVTA0KLSNkZWZpbmUgUkFJRDAgICAgICAg
ICAgICAgU1RSSVBFRA0KKyNkZWZpbmUgUkFJRDAgICAgICAgICAgICAgMlVM
DQogI2RlZmluZSBSQUlEMSAgICAgICAgICAgICAzVUwNCiAjZGVmaW5lIFJB
SUQ1ICAgICAgICAgICAgIDRVTA0KICNkZWZpbmUgVFJBTlNMVUNFTlQgICAg
ICAgNVVMDQogI2RlZmluZSBIU00gICAgICAgICAgICAgICA2VUwNCi0jZGVm
aW5lIE1BWF9QRVJTT05BTElUWSAgIDdVTA0KKyNkZWZpbmUgTVVMVElQQVRI
ICAgICAgICAgN1VMDQorI2RlZmluZSBNQVhfUEVSU09OQUxJVFkgICA4VUwN
CiANCiBzdGF0aWMgaW5saW5lIGludCBwZXJzX3RvX2xldmVsIChpbnQgcGVy
cykNCiB7DQogCXN3aXRjaCAocGVycykgew0KKwkJY2FzZSBNVUxUSVBBVEg6
CQlyZXR1cm4gLTQ7DQogCQljYXNlIEhTTToJCXJldHVybiAtMzsNCiAJCWNh
c2UgVFJBTlNMVUNFTlQ6CXJldHVybiAtMjsNCiAJCWNhc2UgTElORUFSOgkJ
cmV0dXJuIC0xOw0KQEAgLTM1LDcgKzM2LDcgQEANCiAJCWNhc2UgUkFJRDE6
CQlyZXR1cm4gMTsNCiAJCWNhc2UgUkFJRDU6CQlyZXR1cm4gNTsNCiAJfQ0K
LQlwYW5pYygicGVyc190b19sZXZlbCgpIik7DQorCUJVRygpOw0KIAlyZXR1
cm4gTURfUkVTRVJWRUQ7DQogfQ0KIA0KQEAgLTE3MSw2ICsxNzIsNyBAQA0K
IAltZHBfc3VwZXJfdCAqc2I7DQogCXVuc2lnbmVkIGxvbmcgc2Jfb2Zmc2V0
Ow0KIA0KKwlpbnQgYWxpYXNfZGV2aWNlOwkJLyogZGV2aWNlIGFsaWFzIHRv
IHRoZSBzYW1lIGRpc2sgKi8NCiAJaW50IGZhdWx0eTsJCQkvKiBpZiBmYXVs
dHkgZG8gbm90IGlzc3VlIElPIHJlcXVlc3RzICovDQogCWludCBkZXNjX25y
OwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8N
CiB9Ow0KQEAgLTI1OCw2ICsyNjAsNyBAQA0KIA0KIGV4dGVybiBtZGtfcmRl
dl90ICogZmluZF9yZGV2KG1kZGV2X3QgKiBtZGRldiwga2Rldl90IGRldik7
DQogZXh0ZXJuIG1ka19yZGV2X3QgKiBmaW5kX3JkZXZfbnIobWRkZXZfdCAq
bWRkZXYsIGludCBucik7DQorZXh0ZXJuIG1kcF9kaXNrX3QgKmdldF9zcGFy
ZShtZGRldl90ICptZGRldik7DQogDQogLyoNCiAgKiBpdGVyYXRlcyB0aHJv
dWdoIHNvbWUgcmRldiByaW5nbGlzdC4gSXQncyBzYWZlIHRvIHJlbW92ZSB0
aGUNCi0tLSBsaW51eC9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oLm9yaWcJ
VHVlIEF1ZyAyMSAxNDoyNjowNCAyMDAxDQorKysgbGludXgvaW5jbHVkZS9s
aW51eC9yYWlkL21kX3UuaAlGcmkgU2VwIDE0IDEwOjAzOjMwIDIwMDENCkBA
IC0zNSw2ICszNSw3IEBADQogI2RlZmluZSBQUk9URUNUX0FSUkFZCQlfSU8g
KE1EX01BSk9SLCAweDI3KQ0KICNkZWZpbmUgSE9UX0FERF9ESVNLCQlfSU8g
KE1EX01BSk9SLCAweDI4KQ0KICNkZWZpbmUgU0VUX0RJU0tfRkFVTFRZCQlf
SU8gKE1EX01BSk9SLCAweDI5KQ0KKyNkZWZpbmUgSE9UX0dFTkVSQVRFX0VS
Uk9SCV9JTyAoTURfTUFKT1IsIDB4MmEpDQogDQogLyogdXNhZ2UgKi8NCiAj
ZGVmaW5lIFJVTl9BUlJBWQkJX0lPVyAoTURfTUFKT1IsIDB4MzAsIG1kdV9w
YXJhbV90KQ0KLS0tIGxpbnV4L2RyaXZlcnMvbWQvbWQuYy5vcmlnCUZyaSBT
ZXAgMTQgMTA6Mzk6MjQgMjAwMQ0KKysrIGxpbnV4L2RyaXZlcnMvbWQvbWQu
YwlGcmkgU2VwIDE0IDEwOjQzOjE3IDIwMDENCkBAIC02NDQsMTAgKzY0NCw5
IEBADQogCWJkZXYgPSBiZGdldChyZGV2LT5kZXYpOw0KIAlpZiAoYmRldiA9
PSBOVUxMKQ0KIAkJcmV0dXJuIC1FTk9NRU07DQotCWVyciA9IGJsa2Rldl9n
ZXQoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSwgMCwgQkRFVl9GSUxF
KTsNCi0JaWYgKCFlcnIpIHsNCisJZXJyID0gYmxrZGV2X2dldChiZGV2LCBG
TU9ERV9SRUFEfEZNT0RFX1dSSVRFLCAwLCBCREVWX1JBVyk7DQorCWlmICgh
ZXJyKQ0KIAkJcmRldi0+YmRldiA9IGJkZXY7DQotCX0NCiAJcmV0dXJuIGVy
cjsNCiB9DQogDQpAQCAtNjU1LDcgKzY1NCw3IEBADQogew0KIAlpZiAoIXJk
ZXYtPmJkZXYpDQogCQlNRF9CVUcoKTsNCi0JYmxrZGV2X3B1dChyZGV2LT5i
ZGV2LCBCREVWX0ZJTEUpOw0KKwlibGtkZXZfcHV0KHJkZXYtPmJkZXYsIEJE
RVZfUkFXKTsNCiAJYmRwdXQocmRldi0+YmRldik7DQogCXJkZXYtPmJkZXYg
PSBOVUxMOw0KIH0NCkBAIC03NzEsOCArNzcwLDEwIEBADQogCQltZHBfZGlz
a190ICpkZXNjOw0KIA0KIAkJZGVzYyA9IHNiLT5kaXNrcyArIGk7DQotCQlw
cmludGsoIm1kOiAgICAgRCAlMmQ6ICIsIGkpOw0KLQkJcHJpbnRfZGVzYyhk
ZXNjKTsNCisJCWlmIChkZXNjLT5udW1iZXIgfHwgZGVzYy0+bWFqb3IgfHwg
ZGVzYy0+bWlub3IgfHwgZGVzYy0+cmFpZF9kaXNrIHx8IChkZXNjLT5zdGF0
ZSAmJiAoZGVzYy0+c3RhdGUgIT0gNCkpKSB7DQorCQkJcHJpbnRrKCIgICAg
IEQgJTJkOiAiLCBpKTsNCisJCQlwcmludF9kZXNjKGRlc2MpOw0KKwkJfQ0K
IAl9DQogCXByaW50aygibWQ6ICAgICBUSElTOiAiKTsNCiAJcHJpbnRfZGVz
Yygmc2ItPnRoaXNfZGlzayk7DQpAQCAtODMwLDYgKzgzMSw3IEBADQogDQog
CWlmICghdG1wMSB8fCAhdG1wMikgew0KIAkJcmV0ID0gMDsNCisJCXByaW50
ayhLRVJOX0lORk8gIm1kLmM6IHNiMSBpcyBub3QgZXF1YWwgdG8gc2IyIVxu
Iik7DQogCQlnb3RvIGFib3J0Ow0KIAl9DQogDQpAQCAtOTEwLDcgKzkxMiw3
IEBADQogCXNiX29mZnNldCA9IGNhbGNfZGV2X3Nib2Zmc2V0KGRldiwgcmRl
di0+bWRkZXYsIDEpOw0KIAlpZiAocmRldi0+c2Jfb2Zmc2V0ICE9IHNiX29m
ZnNldCkgew0KIAkJcHJpbnRrKCIlcydzIHNiIG9mZnNldCBoYXMgY2hhbmdl
ZCBmcm9tICVsZCB0byAlbGQsIHNraXBwaW5nXG4iLA0KLQkJICAgICAgIHBh
cnRpdGlvbl9uYW1lKGRldiksIHJkZXYtPnNiX29mZnNldCwgc2Jfb2Zmc2V0
KTsNCisJCQlwYXJ0aXRpb25fbmFtZShkZXYpLCByZGV2LT5zYl9vZmZzZXQs
IHNiX29mZnNldCk7DQogCQlnb3RvIHNraXA7DQogCX0NCiAJLyoNCkBAIC05
MjEsNyArOTIzLDcgQEANCiAJc2l6ZSA9IGNhbGNfZGV2X3NpemUoZGV2LCBy
ZGV2LT5tZGRldiwgMSk7DQogCWlmIChzaXplICE9IHJkZXYtPnNpemUpIHsN
CiAJCXByaW50aygiJXMncyBzaXplIGhhcyBjaGFuZ2VkIGZyb20gJWxkIHRv
ICVsZCBzaW5jZSBpbXBvcnQsIHNraXBwaW5nXG4iLA0KLQkJICAgICAgIHBh
cnRpdGlvbl9uYW1lKGRldiksIHJkZXYtPnNpemUsIHNpemUpOw0KKwkJCXBh
cnRpdGlvbl9uYW1lKGRldiksIHJkZXYtPnNpemUsIHNpemUpOw0KIAkJZ290
byBza2lwOw0KIAl9DQogDQpAQCAtOTgyLDcgKzk4NCw3IEBADQogCXN0cnVj
dCBtZF9saXN0X2hlYWQgKnRtcDsNCiANCiAJSVRFUkFURV9SREVWKG1kZGV2
LHJkZXYsdG1wKSB7DQotCQlpZiAocmRldi0+ZmF1bHR5KQ0KKwkJaWYgKHJk
ZXYtPmZhdWx0eSB8fCByZGV2LT5hbGlhc19kZXZpY2UpDQogCQkJY29udGlu
dWU7DQogCQlzYiA9IHJkZXYtPnNiOw0KIAkJKnNiID0gKm1kZGV2LT5zYjsN
CkBAIC0xMDI5LDggKzEwMzEsMTEgQEANCiAJCXByaW50aygibWQ6ICIpOw0K
IAkJaWYgKHJkZXYtPmZhdWx0eSkNCiAJCQlwcmludGsoIihza2lwcGluZyBm
YXVsdHkgIik7DQorCQlpZiAocmRldi0+YWxpYXNfZGV2aWNlKQ0KKwkJCXBy
aW50aygiKHNraXBwaW5nIGFsaWFzICIpOw0KKw0KIAkJcHJpbnRrKCIlcyAi
LCBwYXJ0aXRpb25fbmFtZShyZGV2LT5kZXYpKTsNCi0JCWlmICghcmRldi0+
ZmF1bHR5KSB7DQorCQlpZiAoIXJkZXYtPmZhdWx0eSAmJiAhcmRldi0+YWxp
YXNfZGV2aWNlKSB7DQogCQkJcHJpbnRrKCJbZXZlbnRzOiAlMDhseF0iLA0K
IAkJCQkodW5zaWduZWQgbG9uZylyZGV2LT5zYi0+ZXZlbnRzX2xvKTsNCiAJ
CQllcnIgKz0gd3JpdGVfZGlza19zYihyZGV2KTsNCkBAIC0xMTE1LDkgKzEx
MjAsMTQgQEANCiAJCQlnb3RvIGFib3J0X2ZyZWU7DQogCQl9DQogDQotCQly
ZGV2LT5vbGRfZGV2ID0gTUtERVYocmRldi0+c2ItPnRoaXNfZGlzay5tYWpv
ciwNCi0JCQkJCXJkZXYtPnNiLT50aGlzX2Rpc2subWlub3IpOw0KLQkJcmRl
di0+ZGVzY19uciA9IHJkZXYtPnNiLT50aGlzX2Rpc2subnVtYmVyOw0KKwkJ
aWYgKHJkZXYtPnNiLT5sZXZlbCAhPSAtNCkgew0KKwkJCXJkZXYtPm9sZF9k
ZXYgPSBNS0RFVihyZGV2LT5zYi0+dGhpc19kaXNrLm1ham9yLA0KKwkJCQkJ
CXJkZXYtPnNiLT50aGlzX2Rpc2subWlub3IpOw0KKwkJCXJkZXYtPmRlc2Nf
bnIgPSByZGV2LT5zYi0+dGhpc19kaXNrLm51bWJlcjsNCisJCX0gZWxzZSB7
DQorCQkJcmRldi0+b2xkX2RldiA9IE1LREVWKDAsIDApOw0KKwkJCXJkZXYt
PmRlc2NfbnIgPSAtMTsNCisJCX0NCiAJfQ0KIAltZF9saXN0X2FkZCgmcmRl
di0+YWxsLCAmYWxsX3JhaWRfZGlza3MpOw0KIAlNRF9JTklUX0xJU1RfSEVB
RCgmcmRldi0+cGVuZGluZyk7DQpAQCAtMTE1Nyw3ICsxMTY3LDcgQEANCiAN
CiBzdGF0aWMgaW50IGFuYWx5emVfc2JzIChtZGRldl90ICogbWRkZXYpDQog
ew0KLQlpbnQgb3V0X29mX2RhdGUgPSAwLCBpOw0KKwlpbnQgb3V0X29mX2Rh
dGUgPSAwLCBpLCBmaXJzdDsNCiAJc3RydWN0IG1kX2xpc3RfaGVhZCAqdG1w
LCAqdG1wMjsNCiAJbWRrX3JkZXZfdCAqcmRldiwgKnJkZXYyLCAqZnJlc2hl
c3Q7DQogCW1kcF9zdXBlcl90ICpzYjsNCkBAIC0xMjUxLDcgKzEyNjEsNyBA
QA0KIAkgKi8NCiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7DQog
CQkvKg0KLQkJICogS2ljayBhbGwgbm9uLWZyZXNoIGRldmljZXMgZmF1bHR5
DQorCQkgKiBLaWNrIGFsbCBub24tZnJlc2ggZGV2aWNlcw0KIAkJICovDQog
CQlfX3U2NCBldjEsIGV2MjsNCiAJCWV2MSA9IG1kX2V2ZW50KHJkZXYtPnNi
KTsNCkBAIC0xMjY5LDkgKzEyNzksMTAgQEANCiAJICogRml4IHVwIGNoYW5n
ZWQgZGV2aWNlIG5hbWVzIC4uLiBidXQgb25seSBpZiB0aGlzIGRpc2sgaGFz
IGENCiAJICogcmVjZW50IHVwZGF0ZSB0aW1lLiBVc2UgZmF1bHR5IGNoZWNr
c3VtIG9uZXMgdG9vLg0KIAkgKi8NCisJaWYgKG1kZGV2LT5zYi0+bGV2ZWwg
IT0gLTQpDQogCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgew0KIAkJ
X191NjQgZXYxLCBldjIsIGV2MzsNCi0JCWlmIChyZGV2LT5mYXVsdHkpIHsg
LyogUkVNT1ZFTUUgKi8NCisJCWlmIChyZGV2LT5mYXVsdHkgfHwgcmRldi0+
YWxpYXNfZGV2aWNlKSB7DQogCQkJTURfQlVHKCk7DQogCQkJZ290byBhYm9y
dDsNCiAJCX0NCkBAIC0xMjgwLDcgKzEyOTEsNyBAQA0KIAkJZXYzID0gZXYy
Ow0KIAkJLS1ldjM7DQogCQlpZiAoKHJkZXYtPmRldiAhPSByZGV2LT5vbGRf
ZGV2KSAmJg0KLQkJICAgICgoZXYxID09IGV2MikgfHwgKGV2MSA9PSBldjMp
KSkgew0KKwkJCSgoZXYxID09IGV2MikgfHwgKGV2MSA9PSBldjMpKSkgew0K
IAkJCW1kcF9kaXNrX3QgKmRlc2M7DQogDQogCQkJcHJpbnRrKCJtZDogZGV2
aWNlIG5hbWUgaGFzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyBzaW5jZSBsYXN0
IGltcG9ydCFcbiIsIHBhcnRpdGlvbl9uYW1lKHJkZXYtPm9sZF9kZXYpLCBw
YXJ0aXRpb25fbmFtZShyZGV2LT5kZXYpKTsNCkBAIC0xMzE5LDggKzEzMzAs
MTMgQEANCiANCiAJCS8qDQogCQkgKiBXZSBraWNrIGZhdWx0eSBkZXZpY2Vz
L2Rlc2NyaXB0b3JzIGltbWVkaWF0ZWx5Lg0KKwkJICoNCisJCSAqIE5vdGU6
IG11bHRpcGF0aCBkZXZpY2VzIGFyZSBhIHNwZWNpYWwgY2FzZS4gIFNpbmNl
IHdlDQorCQkgKiB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgc3VwZXJibG9jayBv
biB0aGUgcGF0aCwgd2UgZG9uJ3QNCisJCSAqIGNhcmUgaWYgaXQgd2FzIHBy
ZXZpb3VzbHkgbWFya2VkIGFzIGZhdWx0eSwgaXQncyB1cCBub3cNCisJCSAq
IHNvIGVuYWJsZSBpdC4NCiAJCSAqLw0KLQkJaWYgKGRpc2tfZmF1bHR5KGRl
c2MpKSB7DQorCQlpZiAoZGlza19mYXVsdHkoZGVzYykgJiYgbWRkZXYtPnNi
LT5sZXZlbCAhPSAtNCkgew0KIAkJCWZvdW5kID0gMDsNCiAJCQlJVEVSQVRF
X1JERVYobWRkZXYscmRldix0bXApIHsNCiAJCQkJaWYgKHJkZXYtPmRlc2Nf
bnIgIT0gZGVzYy0+bnVtYmVyKQ0KQEAgLTEzMzksNiArMTM1NSwxNSBAQA0K
IAkJCX0NCiAJCQlyZW1vdmVfZGVzY3JpcHRvcihkZXNjLCBzYik7DQogCQkJ
Y29udGludWU7DQorCQl9IGVsc2UgaWYgKGRpc2tfZmF1bHR5KGRlc2MpKSB7
DQorCQkJLyoNCisJCQkgKiBtdWx0aXBhdGggZW50cnkgbWFya2VkIGFzIGZh
dWx0eSwgdW5mYXVsdHkgaXQNCisJCQkgKi8NCisJCQlyZGV2ID0gZmluZF9y
ZGV2KG1kZGV2LCBkZXYpOw0KKwkJCWlmKHJkZXYpDQorCQkJCW1hcmtfZGlz
a19zcGFyZShkZXNjKTsNCisJCQllbHNlDQorCQkJCXJlbW92ZV9kZXNjcmlw
dG9yKGRlc2MsIHNiKTsNCiAJCX0NCiANCiAJCWlmIChkZXYgPT0gTUtERVYo
MCwwKSkNCkBAIC0xMzQ4LDYgKzEzNzMsMTcgQEANCiAJCSAqLw0KIAkJZm91
bmQgPSAwOw0KIAkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7DQor
CQkJLyoNCisJCQkgKiBNdWx0aS1wYXRoIElPIHNwZWNpYWwtY2FzZTogc2lu
Y2Ugd2UgaGF2ZSBubw0KKwkJCSAqIHRoaXNfZGlzayBkZXNjcmlwdG9yIGF0
IGF1dG8tZGV0ZWN0IHRpbWUsDQorCQkJICogd2UgY2Fubm90IGNoZWNrIHJk
ZXYtPm51bWJlci4NCisJCQkgKiBXZSBjYW4gY2hlY2sgdGhlIGRldmljZSB0
aG91Z2guDQorCQkJICovDQorCQkJaWYgKChzYi0+bGV2ZWwgPT0gLTQpICYm
IChyZGV2LT5kZXYgPT0NCisJCQkJCU1LREVWKGRlc2MtPm1ham9yLGRlc2Mt
Pm1pbm9yKSkpIHsNCisJCQkJZm91bmQgPSAxOw0KKwkJCQlicmVhazsNCisJ
CQl9DQogCQkJaWYgKHJkZXYtPmRlc2NfbnIgPT0gZGVzYy0+bnVtYmVyKSB7
DQogCQkJCWZvdW5kID0gMTsNCiAJCQkJYnJlYWs7DQpAQCAtMTM2NCw2ICsx
NDAwLDcgQEANCiAJICogRG91YmxlIGNoZWNrIHdldGhlciBhbGwgZGV2aWNl
cyBtZW50aW9uZWQgaW4gdGhlDQogCSAqIHN1cGVyYmxvY2sgYXJlIGluIHRo
ZSByZGV2IHJpbmcuDQogCSAqLw0KKwlmaXJzdCA9IDE7DQogCWZvciAoaSA9
IDA7IGkgPCBNRF9TQl9ESVNLUzsgaSsrKSB7DQogCQltZHBfZGlza190ICpk
ZXNjOw0KIAkJa2Rldl90IGRldjsNCkBAIC0xMzg0LDM1ICsxNDIxLDYzIEBA
DQogCQkJTURfQlVHKCk7DQogCQkJZ290byBhYm9ydDsNCiAJCX0NCi0JfQ0K
LQ0KLQkvKg0KLQkgKiBEbyBhIGZpbmFsIHJlYWxpdHkgY2hlY2suDQotCSAq
Lw0KLQlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsNCi0JCWlmIChy
ZGV2LT5kZXNjX25yID09IC0xKSB7DQotCQkJTURfQlVHKCk7DQotCQkJZ290
byBhYm9ydDsNCi0JCX0NCiAJCS8qDQotCQkgKiBpcyB0aGUgZGVzY19uciB1
bmlxdWU/DQorCQkgKiBJbiB0aGUgY2FzZSBvZiBNdWx0aXBhdGgtSU8sIHdl
IGhhdmUgbm8NCisJCSAqIG90aGVyIGluZm9ybWF0aW9uIHNvdXJjZSB0byBm
aW5kIG91dCB3aGljaA0KKwkJICogZGlzayBpcyB3aGljaCwgb25seSB0aGUg
cG9zaXRpb24gb2YgdGhlIGRldmljZQ0KKwkJICogaW4gdGhlIHN1cGVyYmxv
Y2s6DQogCQkgKi8NCi0JCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXAy
KSB7DQotCQkJaWYgKChyZGV2MiAhPSByZGV2KSAmJg0KLQkJCQkJKHJkZXYy
LT5kZXNjX25yID09IHJkZXYtPmRlc2NfbnIpKSB7DQorCQlpZiAobWRkZXYt
PnNiLT5sZXZlbCA9PSAtNCkgew0KKwkJCWlmICgocmRldi0+ZGVzY19uciAh
PSAtMSkgJiYgKHJkZXYtPmRlc2NfbnIgIT0gaSkpIHsNCiAJCQkJTURfQlVH
KCk7DQogCQkJCWdvdG8gYWJvcnQ7DQogCQkJfQ0KKwkJCXJkZXYtPmRlc2Nf
bnIgPSBpOw0KKwkJCWlmICghZmlyc3QpDQorCQkJCXJkZXYtPmFsaWFzX2Rl
dmljZSA9IDE7DQorCQkJZWxzZQ0KKwkJCQlmaXJzdCA9IDA7DQogCQl9DQot
CQkvKg0KLQkJICogaXMgdGhlIGRldmljZSB1bmlxdWU/DQotCQkgKi8NCi0J
CUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXAyKSB7DQotCQkJaWYgKChy
ZGV2MiAhPSByZGV2KSAmJg0KLQkJCQkJKHJkZXYyLT5kZXYgPT0gcmRldi0+
ZGV2KSkgew0KKwl9DQorIA0KKwkvKg0KKwkgKiBLaWNrIGFsbCByZGV2cyB0
aGF0IGFyZSBub3QgaW4gdGhlDQorCSAqIGRlc2NyaXB0b3IgYXJyYXk6DQor
CSAqLw0KKwlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsNCisJCWlm
IChyZGV2LT5kZXNjX25yID09IC0xKQ0KKwkJCWtpY2tfcmRldl9mcm9tX2Fy
cmF5KHJkZXYpOw0KKwl9DQorIA0KKwkvKg0KKwkgKiBEbyBhIGZpbmFsIHJl
YWxpdHkgY2hlY2suDQorCSAqLw0KKwlpZiAobWRkZXYtPnNiLT5sZXZlbCAh
PSAtNCkgew0KKwkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7DQor
CQkJaWYgKHJkZXYtPmRlc2NfbnIgPT0gLTEpIHsNCiAJCQkJTURfQlVHKCk7
DQogCQkJCWdvdG8gYWJvcnQ7DQogCQkJfQ0KKwkJCS8qDQorCQkJICogaXMg
dGhlIGRlc2NfbnIgdW5pcXVlPw0KKwkJCSAqLw0KKwkJCUlURVJBVEVfUkRF
VihtZGRldixyZGV2Mix0bXAyKSB7DQorCQkJCWlmICgocmRldjIgIT0gcmRl
dikgJiYNCisJCQkJCQkocmRldjItPmRlc2NfbnIgPT0gcmRldi0+ZGVzY19u
cikpIHsNCisJCQkJCU1EX0JVRygpOw0KKwkJCQkJZ290byBhYm9ydDsNCisJ
CQkJfQ0KKwkJCX0NCisJCQkvKg0KKwkJCSAqIGlzIHRoZSBkZXZpY2UgdW5p
cXVlPw0KKwkJCSAqLw0KKwkJCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0
bXAyKSB7DQorCQkJCWlmICgocmRldjIgIT0gcmRldikgJiYNCisJCQkJCQko
cmRldjItPmRldiA9PSByZGV2LT5kZXYpKSB7DQorCQkJCQlNRF9CVUcoKTsN
CisJCQkJCWdvdG8gYWJvcnQ7DQorCQkJCX0NCisJCQl9DQogCQl9DQogCX0N
CiANCkBAIC0xNDczLDYgKzE1MzgsOSBAQA0KIAl9DQogDQogCXN3aXRjaCAo
c2ItPmxldmVsKSB7DQorCQljYXNlIC00Og0KKwkJCWRhdGFfZGlza3MgPSAx
Ow0KKwkJCWJyZWFrOw0KIAkJY2FzZSAtMzoNCiAJCQlkYXRhX2Rpc2tzID0g
MTsNCiAJCQlicmVhazsNCkBAIC0xNTA3LDYgKzE1NzUsNyBAQA0KIAkJaWYg
KHJlYWRhaGVhZCA8IGRhdGFfZGlza3MgKiAoTUFYX1NFQ1RPUlM+PihQQUdF
X1NISUZULTkpKSoyKQ0KIAkJCXJlYWRhaGVhZCA9IGRhdGFfZGlza3MgKiAo
TUFYX1NFQ1RPUlM+PihQQUdFX1NISUZULTkpKSoyOw0KIAl9IGVsc2Ugew0K
KwkJLy8gKG5vIG11bHRpcGF0aCBicmFuY2ggLSBpdCB1c2VzIHRoZSBkZWZh
dWx0IHNldHRpbmcpDQogCQlpZiAoc2ItPmxldmVsID09IC0zKQ0KIAkJCXJl
YWRhaGVhZCA9IDA7DQogCX0NCkBAIC0xNTY5LDM4ICsxNjM4LDQxIEBADQog
CW1kZGV2LT5wYXJhbS5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsNCiAJbWRk
ZXYtPnBhcmFtLnBlcnNvbmFsaXR5ID0gcG51bTsNCiANCi0JaWYgKGNodW5r
X3NpemUgPiBNQVhfQ0hVTktfU0laRSkgew0KLQkJcHJpbnRrKFRPT19CSUdf
Q0hVTktTSVpFLCBjaHVua19zaXplLCBNQVhfQ0hVTktfU0laRSk7DQotCQly
ZXR1cm4gLUVJTlZBTDsNCi0JfQ0KLQkvKg0KLQkgKiBjaHVuay1zaXplIGhh
cyB0byBiZSBhIHBvd2VyIG9mIDIgYW5kIG11bHRpcGxlcyBvZiBQQUdFX1NJ
WkUNCi0JICovDQotCWlmICggKDEgPDwgZmZ6KH5jaHVua19zaXplKSkgIT0g
Y2h1bmtfc2l6ZSkgew0KLQkJTURfQlVHKCk7DQotCQlyZXR1cm4gLUVJTlZB
TDsNCi0JfQ0KLQlpZiAoY2h1bmtfc2l6ZSA8IFBBR0VfU0laRSkgew0KLQkJ
cHJpbnRrKFRPT19TTUFMTF9DSFVOS1NJWkUsIGNodW5rX3NpemUsIFBBR0Vf
U0laRSk7DQotCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0KKwlpZiAoKHBudW0g
IT0gTVVMVElQQVRIKSAmJiAocG51bSAhPSBSQUlEMSkgJiYgKHBudW0gIT0g
TElORUFSKSkgew0KKwkJaWYgKCFjaHVua19zaXplKSB7DQorCQkJLyoNCisJ
CQkgKiAnZGVmYXVsdCBjaHVua3NpemUnIGluIHRoZSBvbGQgbWQgY29kZSB1
c2VkIHRvDQorCQkJICogYmUgUEFHRV9TSVpFLCBiYWFhZC4NCisJCQkgKiB3
ZSBhYm9ydCBoZXJlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuIFdlIGRvbnQN
CisJCQkgKiB3YW50IHRvIGNvbnRpbnVlIHRoZSBiYWQgcHJhY3RpY2UuDQor
CQkJICovDQorCQkJcHJpbnRrKEJBRF9DSFVOS1NJWkUpOw0KKwkJCXJldHVy
biAtRUlOVkFMOw0KKwkJfQ0KKwkJaWYgKGNodW5rX3NpemUgPiBNQVhfQ0hV
TktfU0laRSkgew0KKwkJCXByaW50ayhUT09fQklHX0NIVU5LU0laRSwgY2h1
bmtfc2l6ZSwgTUFYX0NIVU5LX1NJWkUpOw0KKwkJCXJldHVybiAtRUlOVkFM
Ow0KKwkJfQ0KKwkJLyoNCisJCSAqIGNodW5rLXNpemUgaGFzIHRvIGJlIGEg
cG93ZXIgb2YgMiBhbmQgbXVsdGlwbGVzIG9mIFBBR0VfU0laRQ0KKwkJICov
DQorCQlpZiAoICgxIDw8IGZmeih+Y2h1bmtfc2l6ZSkpICE9IGNodW5rX3Np
emUpIHsNCisJCQlNRF9CVUcoKTsNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJ
CX0NCisJCWlmIChjaHVua19zaXplIDwgUEFHRV9TSVpFKSB7DQorCQkJcHJp
bnRrKFRPT19TTUFMTF9DSFVOS1NJWkUsIGNodW5rX3NpemUsIFBBR0VfU0la
RSk7DQorCQkJcmV0dXJuIC1FSU5WQUw7DQorCQl9DQorCX0gZWxzZQ0KKwkJ
aWYgKGNodW5rX3NpemUpDQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUkFJRCBs
ZXZlbCAlZCBkb2VzIG5vdCBuZWVkIGNodW5rc2l6ZSEgQ29udGludWluZyBh
bnl3YXkuXG4iLCBtZGRldi0+c2ItPmxldmVsKTsNCiANCiAJaWYgKHBudW0g
Pj0gTUFYX1BFUlNPTkFMSVRZKSB7DQogCQlNRF9CVUcoKTsNCiAJCXJldHVy
biAtRUlOVkFMOw0KIAl9DQogDQotCWlmICgocG51bSAhPSBSQUlEMSkgJiYg
KHBudW0gIT0gTElORUFSKSAmJiAhY2h1bmtfc2l6ZSkgew0KLQkJLyoNCi0J
CSAqICdkZWZhdWx0IGNodW5rc2l6ZScgaW4gdGhlIG9sZCBtZCBjb2RlIHVz
ZWQgdG8NCi0JCSAqIGJlIFBBR0VfU0laRSwgYmFhYWQuDQotCQkgKiB3ZSBh
Ym9ydCBoZXJlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuIFdlIGRvbnQNCi0J
CSAqIHdhbnQgdG8gY29udGludWUgdGhlIGJhZCBwcmFjdGljZS4NCi0JCSAq
Lw0KLQkJcHJpbnRrKEJBRF9DSFVOS1NJWkUpOw0KLQkJcmV0dXJuIC1FSU5W
QUw7DQotCX0NCi0NCiAJaWYgKCFwZXJzW3BudW1dKQ0KIAl7DQogI2lmZGVm
IENPTkZJR19LTU9EDQpAQCAtMTYwOSw3ICsxNjgxLDExIEBADQogCQlyZXF1
ZXN0X21vZHVsZSAobW9kdWxlX25hbWUpOw0KIAkJaWYgKCFwZXJzW3BudW1d
KQ0KICNlbmRpZg0KKwkJew0KKwkJCXByaW50ayhLRVJOX0VSUiAibWQuYzog
cGVyc29uYWxpdHkgJWQgaXMgbm90IGxvYWRlZCFcbiIsDQorCQkJCXBudW0p
Ow0KIAkJCXJldHVybiAtRUlOVkFMOw0KKwkJfQ0KIAl9DQogDQogCWlmIChk
ZXZpY2Vfc2l6ZV9jYWxjdWxhdGlvbihtZGRldikpDQpAQCAtMTYyNyw3ICsx
NzAzLDcgQEANCiAJCQljb250aW51ZTsNCiAJCWludmFsaWRhdGVfZGV2aWNl
KHJkZXYtPmRldiwgMSk7DQogCQlpZiAoZ2V0X2hhcmRzZWN0X3NpemUocmRl
di0+ZGV2KQ0KLQkJICAgID4gbWRfaGFyZHNlY3Rfc2l6ZXNbbWRpZHgobWRk
ZXYpXSkgDQorCQkJPiBtZF9oYXJkc2VjdF9zaXplc1ttZGlkeChtZGRldild
KSANCiAJCQltZF9oYXJkc2VjdF9zaXplc1ttZGlkeChtZGRldildID0NCiAJ
CQkJZ2V0X2hhcmRzZWN0X3NpemUocmRldi0+ZGV2KTsNCiAJfQ0KQEAgLTE2
NTIsNyArMTcyOCw3IEBADQogCSAqLw0KIAltZF9oZF9zdHJ1Y3RbbWRpZHgo
bWRkZXYpXS5zdGFydF9zZWN0ID0gMDsNCiAJcmVnaXN0ZXJfZGlzaygmbWRf
Z2VuZGlzaywgTUtERVYoTUFKT1JfTlIsbWRpZHgobWRkZXYpKSwNCi0JCSAg
ICAgIDEsICZtZF9mb3BzLCBtZF9zaXplW21kaWR4KG1kZGV2KV08PDEpOw0K
KwkJCTEsICZtZF9mb3BzLCBtZF9zaXplW21kaWR4KG1kZGV2KV08PDEpOw0K
IA0KIAlyZWFkX2FoZWFkW01EX01BSk9SXSA9IDEwMjQ7DQogCXJldHVybiAo
MCk7DQpAQCAtMTY4OCw4ICsxNzY0LDExIEBADQogCQltZF9yZWNvdmVyX2Fy
cmF5cygpOw0KIAkJaWYgKG1kZGV2LT5wZXJzLT5yZXN0YXJ0X3Jlc3luYykN
CiAJCQltZGRldi0+cGVycy0+cmVzdGFydF9yZXN5bmMobWRkZXYpOw0KLQl9
IGVsc2UNCisJfSBlbHNlIHsNCisJCXByaW50ayAoS0VSTl9FUlIgIm1kLmM6
IG1kJWQgaGFzIG5vIHBlcnNvbmFsaXR5IGFzc2lnbmVkLlxuIiwNCisJCQlt
ZGlkeChtZGRldikpOw0KIAkJZXJyID0gLUVJTlZBTDsNCisJfQ0KIA0KIG91
dDoNCiAJcmV0dXJuIGVycjsNCkBAIC0xODEwLDcgKzE4ODksNyBAQA0KIAlJ
VEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsNCiAJCXByaW50aygiPCVz
PiIsIHBhcnRpdGlvbl9uYW1lKHJkZXYtPmRldikpOw0KIAl9DQotCXByaW50
aygiXG5tZDogbm93IVxuIik7DQorCXByaW50aygiXG4iKTsNCiANCiAJZXJy
ID0gZG9fbWRfcnVuIChtZGRldik7DQogCWlmIChlcnIpIHsNCkBAIC0yMDIx
LDggKzIxMDAsMTAgQEANCiB7DQogCW1kdV9hcnJheV9pbmZvX3QgaW5mbzsN
CiANCi0JaWYgKCFtZGRldi0+c2IpDQorCWlmICghbWRkZXYtPnNiKSB7DQor
CQlNRF9CVUcoKTsNCiAJCXJldHVybiAtRUlOVkFMOw0KKwl9DQogDQogCVNF
VF9GUk9NX1NCKG1ham9yX3ZlcnNpb24pOw0KIAlTRVRfRlJPTV9TQihtaW5v
cl92ZXJzaW9uKTsNCkBAIC0yMTA5LDcgKzIxOTAsNyBAQA0KIAkJfQ0KIAkJ
aWYgKG1kZGV2LT5uYl9kZXYpIHsNCiAJCQltZGtfcmRldl90ICpyZGV2MCA9
IG1kX2xpc3RfZW50cnkobWRkZXYtPmRpc2tzLm5leHQsDQotCQkJCQkJCSAg
bWRrX3JkZXZfdCwgc2FtZV9zZXQpOw0KKwkJCQkJCQltZGtfcmRldl90LCBz
YW1lX3NldCk7DQogCQkJaWYgKCF1dWlkX2VxdWFsKHJkZXYwLCByZGV2KSkg
ew0KIAkJCQlwcmludGsoIm1kOiAlcyBoYXMgZGlmZmVyZW50IFVVSUQgdG8g
JXNcbiIsIHBhcnRpdGlvbl9uYW1lKHJkZXYtPmRldiksIHBhcnRpdGlvbl9u
YW1lKHJkZXYwLT5kZXYpKTsNCiAJCQkJZXhwb3J0X3JkZXYocmRldik7DQpA
QCAtMjEyNiw4ICsyMjA3LDExIEBADQogCX0NCiANCiAJbnIgPSBpbmZvLT5u
dW1iZXI7DQotCWlmIChuciA+PSBtZGRldi0+c2ItPm5yX2Rpc2tzKQ0KKwlp
ZiAobnIgPj0gbWRkZXYtPnNiLT5ucl9kaXNrcykgew0KKwkJTURfQlVHKCk7
DQogCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KIA0KIAlTRVRfU0IobnVt
YmVyKTsNCiAJU0VUX1NCKG1ham9yKTsNCkBAIC0yMTU1LDggKzIyMzksNiBA
QA0KIAkJcGVyc2lzdGVudCA9ICFtZGRldi0+c2ItPm5vdF9wZXJzaXN0ZW50
Ow0KIAkJaWYgKCFwZXJzaXN0ZW50KQ0KIAkJCXByaW50aygibWQ6IG5vbnBl
cnNpc3RlbnQgc3VwZXJibG9jayAuLi5cbiIpOw0KLQkJaWYgKCFtZGRldi0+
c2ItPmNodW5rX3NpemUpDQotCQkJcHJpbnRrKCJtZDogbm8gY2h1bmtzaXpl
P1xuIik7DQogDQogCQlzaXplID0gY2FsY19kZXZfc2l6ZShkZXYsIG1kZGV2
LCBwZXJzaXN0ZW50KTsNCiAJCXJkZXYtPnNiX29mZnNldCA9IGNhbGNfZGV2
X3Nib2Zmc2V0KGRldiwgbWRkZXYsIHBlcnNpc3RlbnQpOw0KQEAgLTIxNzQs
NiArMjI1Niw0MyBAQA0KIH0NCiAjdW5kZWYgU0VUX1NCDQogDQorc3RhdGlj
IGludCBob3RfZ2VuZXJhdGVfZXJyb3IgKG1kZGV2X3QgKiBtZGRldiwga2Rl
dl90IGRldikNCit7DQorCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOw0KKwlt
ZGtfcmRldl90ICpyZGV2Ow0KKwltZHBfZGlza190ICpkaXNrOw0KKyANCisJ
aWYgKCFtZGRldi0+cGVycykNCisJCXJldHVybiAtRU5PREVWOw0KKyANCisJ
cHJpbnRrKCJ0cnlpbmcgdG8gZ2VuZXJhdGUgJXMgZXJyb3IgaW4gbWQlZCAu
Li4gXG4iLA0KKwkJcGFydGl0aW9uX25hbWUoZGV2KSwgbWRpZHgobWRkZXYp
KTsNCisgDQorCXJkZXYgPSBmaW5kX3JkZXYobWRkZXYsIGRldik7DQorCWlm
ICghcmRldikgew0KKwkJTURfQlVHKCk7DQorCQlyZXR1cm4gLUVOWElPOw0K
Kwl9DQorIA0KKwlpZiAocmRldi0+ZGVzY19uciA9PSAtMSkgew0KKwkJTURf
QlVHKCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlkaXNrID0gJm1k
ZGV2LT5zYi0+ZGlza3NbcmRldi0+ZGVzY19ucl07DQorCWlmICghZGlza19h
Y3RpdmUoZGlzaykpDQorCQlyZXR1cm4gLUVOT0RFVjsNCisgDQorCXEgPSBi
bGtfZ2V0X3F1ZXVlKHJkZXYtPmRldik7DQorCWlmICghcSkgew0KKwkJTURf
QlVHKCk7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKwlwcmludGsoIm9r
YXksIGdlbmVyYXRpbmcgZXJyb3IhXG4iKTsNCisvLwlxLT5vbmVzaG90X2Vy
cm9yID0gMTsgLy8gZGlzYWJsZWQgZm9yIG5vdw0KKyANCisJcmV0dXJuIDA7
DQorfQ0KKw0KIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrIChtZGRldl90
ICogbWRkZXYsIGtkZXZfdCBkZXYpDQogew0KIAlpbnQgZXJyOw0KQEAgLTIy
MDEsMTYgKzIzMjAsMjAgQEANCiAJCXJldHVybiAtRUlOVkFMOw0KIAl9DQog
CWRpc2sgPSAmbWRkZXYtPnNiLT5kaXNrc1tyZGV2LT5kZXNjX25yXTsNCi0J
aWYgKGRpc2tfYWN0aXZlKGRpc2spKQ0KKwlpZiAoZGlza19hY3RpdmUoZGlz
aykpIHsNCisJCU1EX0JVRygpOw0KIAkJZ290byBidXN5Ow0KKwl9DQogCWlm
IChkaXNrX3JlbW92ZWQoZGlzaykpIHsNCiAJCU1EX0JVRygpOw0KIAkJcmV0
dXJuIC1FSU5WQUw7DQogCX0NCiAJDQogCWVyciA9IG1kZGV2LT5wZXJzLT5k
aXNrb3AobWRkZXYsICZkaXNrLCBESVNLT1BfSE9UX1JFTU9WRV9ESVNLKTsN
Ci0JaWYgKGVyciA9PSAtRUJVU1kpDQorCWlmIChlcnIgPT0gLUVCVVNZKSB7
DQorCQlNRF9CVUcoKTsNCiAJCWdvdG8gYnVzeTsNCisJfQ0KIAlpZiAoZXJy
KSB7DQogCQlNRF9CVUcoKTsNCiAJCXJldHVybiAtRUlOVkFMOw0KQEAgLTI0
MjUsNyArMjU0OCw2IEBADQogew0KIAlpbnQgcmV0Ow0KIA0KLQlmc3luY19k
ZXYobWRkZXZfdG9fa2RldihtZGRldikpOw0KIAlyZXQgPSBtZF9lcnJvciht
ZGRldiwgZGV2KTsNCiAJcmV0dXJuIHJldDsNCiB9DQpAQCAtMjQ0NCw4ICsy
NTY2LDEwIEBADQogDQogCWRldiA9IGlub2RlLT5pX3JkZXY7DQogCW1pbm9y
ID0gTUlOT1IoZGV2KTsNCi0JaWYgKG1pbm9yID49IE1BWF9NRF9ERVZTKQ0K
KwlpZiAobWlub3IgPj0gTUFYX01EX0RFVlMpIHsNCisJCU1EX0JVRygpOw0K
IAkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCiANCiAJLyoNCiAJICogQ29tbWFu
ZHMgZGVhbGluZyB3aXRoIHRoZSBSQUlEIGRyaXZlciBidXQgbm90IGFueQ0K
QEAgLTI0NjksMTYgKzI1OTMsMTcgQEANCiAJCQlnb3RvIGRvbmU7DQogI2Vu
ZGlmDQogDQotCQljYXNlIEJMS0dFVFNJWkU6ICAgLyogUmV0dXJuIGRldmlj
ZSBzaXplICovDQorCQljYXNlIEJMS0dFVFNJWkU6CS8qIFJldHVybiBkZXZp
Y2Ugc2l6ZSAqLw0KIAkJCWlmICghYXJnKSB7DQogCQkJCWVyciA9IC1FSU5W
QUw7DQorCQkJCU1EX0JVRygpOw0KIAkJCQlnb3RvIGFib3J0Ow0KIAkJCX0N
CiAJCQllcnIgPSBtZF9wdXRfdXNlcihtZF9oZF9zdHJ1Y3RbbWlub3JdLm5y
X3NlY3RzLA0KIAkJCQkJCShsb25nICopIGFyZyk7DQogCQkJZ290byBkb25l
Ow0KIA0KLQkJY2FzZSBCTEtHRVRTSVpFNjQ6ICAgLyogUmV0dXJuIGRldmlj
ZSBzaXplICovDQorCQljYXNlIEJMS0dFVFNJWkU2NDoJLyogUmV0dXJuIGRl
dmljZSBzaXplICovDQogCQkJZXJyID0gbWRfcHV0X3VzZXIoKHU2NCltZF9o
ZF9zdHJ1Y3RbbWlub3JdLm5yX3NlY3RzIDw8IDksDQogCQkJCQkJKHU2NCAq
KSBhcmcpOw0KIAkJCWdvdG8gZG9uZTsNCkBAIC0yNTMzLDcgKzI2NTgsNyBA
QA0KIA0KIAkJCWlmIChtZGRldi0+c2IpIHsNCiAJCQkJcHJpbnRrKCJtZDog
YXJyYXkgbWQlZCBhbHJlYWR5IGhhcyBhIHN1cGVyYmxvY2shXG4iLA0KLQkJ
CQkgICAgICAgbWRpZHgobWRkZXYpKTsNCisJCQkJCW1kaWR4KG1kZGV2KSk7
DQogCQkJCWVyciA9IC1FQlVTWTsNCiAJCQkJZ290byBhYm9ydF91bmxvY2s7
DQogCQkJfQ0KQEAgLTI2NjIsNiArMjc4Nyw5IEBADQogCQkJCWVyciA9IGFk
ZF9uZXdfZGlzayhtZGRldiwgJmluZm8pOw0KIAkJCWdvdG8gZG9uZV91bmxv
Y2s7DQogCQl9DQorCQljYXNlIEhPVF9HRU5FUkFURV9FUlJPUjoNCisJCQll
cnIgPSBob3RfZ2VuZXJhdGVfZXJyb3IobWRkZXYsIChrZGV2X3QpYXJnKTsN
CisJCQlnb3RvIGRvbmVfdW5sb2NrOw0KIAkJY2FzZSBIT1RfUkVNT1ZFX0RJ
U0s6DQogCQkJZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCAoa2Rldl90
KWFyZyk7DQogCQkJZ290byBkb25lX3VubG9jazsNCkBAIC0yODA3LDcgKzI5
MzUsOCBAQA0KIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnRocmVhZC0+d3F1ZXVl
LCAmd2FpdCk7DQogCQljbGVhcl9iaXQoVEhSRUFEX1dBS0VVUCwgJnRocmVh
ZC0+ZmxhZ3MpOw0KIA0KLQkJaWYgKChydW49dGhyZWFkLT5ydW4pKSB7DQor
CQlydW4gPSB0aHJlYWQtPnJ1bjsNCisJCWlmIChydW4pIHsNCiAJCQlydW4o
dGhyZWFkLT5kYXRhKTsNCiAJCQlydW5fdGFza19xdWV1ZSgmdHFfZGlzayk7
DQogCQl9DQpAQCAtMjkwNSw3ICszMDM0LDcgQEANCiAJaWYgKCFycmRldiB8
fCBycmRldi0+ZmF1bHR5KQ0KIAkJcmV0dXJuIDA7DQogCWlmIChtZGRldi0+
cGVycy0+ZXJyb3JfaGFuZGxlciA9PSBOVUxMDQotCSAgICB8fCBtZGRldi0+
cGVycy0+ZXJyb3JfaGFuZGxlcihtZGRldixyZGV2KSA8PSAwKSB7DQorCQkJ
fHwgbWRkZXYtPnBlcnMtPmVycm9yX2hhbmRsZXIobWRkZXYscmRldikgPD0g
MCkgew0KIAkJZnJlZV9kaXNrX3NiKHJyZGV2KTsNCiAJCXJyZGV2LT5mYXVs
dHkgPSAxOw0KIAl9IGVsc2UNCkBAIC0yOTU0LDcgKzMwODMsNyBAQA0KIAl1
bnNpZ25lZCBsb25nIG1heF9ibG9ja3MsIHJlc3luYywgcmVzLCBkdCwgZGIs
IHJ0Ow0KIA0KIAlyZXN5bmMgPSAobWRkZXYtPmN1cnJfcmVzeW5jIC0gYXRv
bWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpKS8yOw0KLQltYXhf
YmxvY2tzID0gbWRkZXYtPnNiLT5zaXplOw0KKwltYXhfYmxvY2tzID0gbWRk
ZXYtPnNiLT5zaXplIDw8IDE7DQogDQogCS8qDQogCSAqIFNob3VsZCBub3Qg
aGFwcGVuLg0KQEAgLTMwODEsMjggKzMyMTAsMzQgQEANCiANCiBpbnQgcmVn
aXN0ZXJfbWRfcGVyc29uYWxpdHkgKGludCBwbnVtLCBtZGtfcGVyc29uYWxp
dHlfdCAqcCkNCiB7DQotCWlmIChwbnVtID49IE1BWF9QRVJTT05BTElUWSkN
CisJaWYgKHBudW0gPj0gTUFYX1BFUlNPTkFMSVRZKSB7DQorCQlNRF9CVUco
KTsNCiAJCXJldHVybiAtRUlOVkFMOw0KKwl9DQogDQotCWlmIChwZXJzW3Bu
dW1dKQ0KKwlpZiAocGVyc1twbnVtXSkgew0KKwkJTURfQlVHKCk7DQogCQly
ZXR1cm4gLUVCVVNZOw0KKwl9DQogDQogCXBlcnNbcG51bV0gPSBwOw0KLQlw
cmludGsoS0VSTl9JTkZPICJtZDogJXMgcGVyc29uYWxpdHkgcmVnaXN0ZXJl
ZFxuIiwgcC0+bmFtZSk7DQorCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBw
ZXJzb25hbGl0eSByZWdpc3RlcmVkIGFzIG5yICVkXG4iLCBwLT5uYW1lLCBw
bnVtKTsNCiAJcmV0dXJuIDA7DQogfQ0KIA0KIGludCB1bnJlZ2lzdGVyX21k
X3BlcnNvbmFsaXR5IChpbnQgcG51bSkNCiB7DQotCWlmIChwbnVtID49IE1B
WF9QRVJTT05BTElUWSkNCisJaWYgKHBudW0gPj0gTUFYX1BFUlNPTkFMSVRZ
KSB7DQorCQlNRF9CVUcoKTsNCiAJCXJldHVybiAtRUlOVkFMOw0KKwl9DQog
DQogCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBwZXJzb25hbGl0eSB1bnJl
Z2lzdGVyZWRcbiIsIHBlcnNbcG51bV0tPm5hbWUpOw0KIAlwZXJzW3BudW1d
ID0gTlVMTDsNCiAJcmV0dXJuIDA7DQogfQ0KIA0KLXN0YXRpYyBtZHBfZGlz
a190ICpnZXRfc3BhcmUobWRkZXZfdCAqbWRkZXYpDQorbWRwX2Rpc2tfdCAq
Z2V0X3NwYXJlKG1kZGV2X3QgKm1kZGV2KQ0KIHsNCiAJbWRwX3N1cGVyX3Qg
KnNiID0gbWRkZXYtPnNiOw0KIAltZHBfZGlza190ICpkaXNrOw0KQEAgLTM0
MzQsNyArMzU2OSw3IEBADQogCW1kZGV2X3QgKm1kZGV2Ow0KIA0KIAlpZiAo
KGNvZGUgPT0gTURfU1lTX0RPV04pIHx8IChjb2RlID09IE1EX1NZU19IQUxU
KQ0KLQkJCQkgIHx8IChjb2RlID09IE1EX1NZU19QT1dFUl9PRkYpKSB7DQor
CQkJCQl8fCAoY29kZSA9PSBNRF9TWVNfUE9XRVJfT0ZGKSkgew0KIA0KIAkJ
cHJpbnRrKEtFUk5fSU5GTyAibWQ6IHN0b3BwaW5nIGFsbCBtZCBkZXZpY2Vz
LlxuIik7DQogDQpAQCAtMzU2NSw3ICszNzAwLDcgQEANCiANCiAJCWlmICht
ZF9pbXBvcnRfZGV2aWNlKGRldiwxKSkgew0KIAkJCXByaW50ayhLRVJOX0FM
RVJUICJtZDogY291bGQgbm90IGltcG9ydCAlcyFcbiIsDQotCQkJICAgICAg
IHBhcnRpdGlvbl9uYW1lKGRldikpOw0KKwkJCQlwYXJ0aXRpb25fbmFtZShk
ZXYpKTsNCiAJCQljb250aW51ZTsNCiAJCX0NCiAJCS8qDQpAQCAtMzYzNCw3
ICszNzY5LDcgQEANCiAJY2FzZSAyOiAvKiBjb3VsZCBiZSAwIG9yIC0xLi4g
Ki8NCiAJCWlmIChsZXZlbCA9PSAwIHx8IGxldmVsID09IC0xKSB7DQogCQkJ
aWYgKGdldF9vcHRpb24oJnN0ciwgJmZhY3RvcikgIT0gMiB8fAkvKiBDaHVu
ayBTaXplICovDQotCQkJICAgIGdldF9vcHRpb24oJnN0ciwgJmZhdWx0KSAh
PSAyKSB7DQorCQkJCQlnZXRfb3B0aW9uKCZzdHIsICZmYXVsdCkgIT0gMikg
ew0KIAkJCQlwcmludGsoIm1kOiBUb28gZmV3IGFyZ3VtZW50cyBzdXBwbGll
ZCB0byBtZD0uXG4iKTsNCiAJCQkJcmV0dXJuIDA7DQogCQkJfQ0KQEAgLTM2
OTgsNyArMzgzMyw3IEBADQogDQogCQkJZGV2ID0gbmFtZV90b19rZGV2X3Qo
ZGV2bmFtZSk7DQogCQkJaGFuZGxlID0gZGV2ZnNfZmluZF9oYW5kbGUoTlVM
TCwgZGV2bmFtZSwgTUFKT1IgKGRldiksIE1JTk9SIChkZXYpLA0KLQkJCQkJ
CSAgICBERVZGU19TUEVDSUFMX0JMSywgMSk7DQorCQkJCQkJCURFVkZTX1NQ
RUNJQUxfQkxLLCAxKTsNCiAJCQlpZiAoaGFuZGxlICE9IDApIHsNCiAJCQkJ
dW5zaWduZWQgbWFqb3IsIG1pbm9yOw0KIAkJCQlkZXZmc19nZXRfbWFqX21p
bihoYW5kbGUsICZtYWpvciwgJm1pbm9yKTsNCkBAIC0zODc2LDQgKzQwMTEs
NSBAQA0KIE1EX0VYUE9SVF9TWU1CT0wobWRfaW50ZXJydXB0X3RocmVhZCk7
DQogTURfRVhQT1JUX1NZTUJPTChtZGRldl9tYXApOw0KIE1EX0VYUE9SVF9T
WU1CT0wobWRfY2hlY2tfb3JkZXJpbmcpOw0KK01EX0VYUE9SVF9TWU1CT0wo
Z2V0X3NwYXJlKTsNCiANCg==
--8323328-2011292279-1000461704=:2577
Content-Type: TEXT/PLAIN; charset=ISO-8859-1; name="multipath-2.4.10-A0"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.33.0109141201441.2577@localhost.localdomain>
Content-Description:
Content-Disposition: attachment; filename="multipath-2.4.10-A0"

LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvcmFpZC9tdWx0aXBhdGguaC5vcmln
CUZyaSBTZXAgMTQgMTA6MDM6MzAgMjAwMQ0KKysrIGxpbnV4L2luY2x1ZGUv
bGludXgvcmFpZC9tdWx0aXBhdGguaAlGcmkgU2VwIDE0IDEwOjU5OjQxIDIw
MDENCkBAIC0wLDAgKzEsODcgQEANCisjaWZuZGVmIF9NVUxUSVBBVEhfSA0K
KyNkZWZpbmUgX01VTFRJUEFUSF9IDQorDQorI2luY2x1ZGUgPGxpbnV4L3Jh
aWQvbWQuaD4NCisNCitzdHJ1Y3QgbXVsdGlwYXRoX2luZm8gew0KKwlpbnQJ
CW51bWJlcjsNCisJaW50CQlyYWlkX2Rpc2s7DQorCWtkZXZfdAkJZGV2Ow0K
KwlpbnQJCXNlY3RfbGltaXQ7DQorCWludAkJaGVhZF9wb3NpdGlvbjsNCisN
CisJLyoNCisJICogU3RhdGUgYml0czoNCisJICovDQorCWludAkJb3BlcmF0
aW9uYWw7DQorCWludAkJd3JpdGVfb25seTsNCisJaW50CQlzcGFyZTsNCisN
CisJaW50CQl1c2VkX3Nsb3Q7DQorfTsNCisNCitzdHJ1Y3QgbXVsdGlwYXRo
X3ByaXZhdGVfZGF0YSB7DQorCW1kZGV2X3QJCQkqbWRkZXY7DQorCXN0cnVj
dCBtdWx0aXBhdGhfaW5mbwltdWx0aXBhdGhzW01EX1NCX0RJU0tTXTsNCisJ
aW50CQkJbnJfZGlza3M7DQorCWludAkJCXJhaWRfZGlza3M7DQorCWludAkJ
CXdvcmtpbmdfZGlza3M7DQorCW1ka190aHJlYWRfdAkJKnRocmVhZDsNCisJ
c3RydWN0IG11bHRpcGF0aF9pbmZvCSpzcGFyZTsNCisJbWRfc3BpbmxvY2tf
dAkJZGV2aWNlX2xvY2s7DQorDQorCS8qIGJ1ZmZlciBwb29sICovDQorCS8q
IGJ1ZmZlcl9oZWFkcyB0aGF0IHdlIGhhdmUgcHJlLWFsbG9jYXRlZCBoYXZl
IGJfcHByZXYgLT4gJmZyZWViaA0KKwkgKiBhbmQgYXJlIGxpbmtlZCBpbnRv
IGEgc3RhY2sgdXNpbmcgYl9uZXh0DQorCSAqIG11bHRpcGF0aF9iaCB0aGF0
IGFyZSBwcmUtYWxsb2NhdGVkIGhhdmUgTVBCSF9QcmVBbGxvYyBzZXQuDQor
CSAqIEFsbCB0aGVzZSB2YXJpYWJsZSBhcmUgcHJvdGVjdGVkIGJ5IGRldmlj
ZV9sb2NrDQorCSAqLw0KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmZyZWViaDsN
CisJaW50CQkJZnJlZWJoX2NudDsJLyogaG93IG1hbnkgYXJlIG9uIHRoZSBs
aXN0ICovDQorCXN0cnVjdCBtdWx0aXBhdGhfYmgJKmZyZWVyMTsNCisJc3Ry
dWN0IG11bHRpcGF0aF9iaAkqZnJlZWJ1ZjsgCS8qIGVhY2ggYmhfcmVxIGhh
cyBhIHBhZ2UgYWxsb2NhdGVkICovDQorCW1kX3dhaXRfcXVldWVfaGVhZF90
CXdhaXRfYnVmZmVyOw0KKw0KKwkvKiBmb3IgdXNlIHdoZW4gc3luY2luZyBt
dWx0aXBhdGhzOiAqLw0KKwl1bnNpZ25lZCBsb25nCXN0YXJ0X2FjdGl2ZSwg
c3RhcnRfcmVhZHksDQorCQlzdGFydF9wZW5kaW5nLCBzdGFydF9mdXR1cmU7
DQorCWludAljbnRfZG9uZSwgY250X2FjdGl2ZSwgY250X3JlYWR5LA0KKwkJ
Y250X3BlbmRpbmcsIGNudF9mdXR1cmU7DQorCWludAlwaGFzZTsNCisJaW50
CXdpbmRvdzsNCisJbWRfd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9kb25lOw0K
KwltZF93YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X3JlYWR5Ow0KKwltZF9zcGlu
bG9ja190CQlzZWdtZW50X2xvY2s7DQorfTsNCisNCit0eXBlZGVmIHN0cnVj
dCBtdWx0aXBhdGhfcHJpdmF0ZV9kYXRhIG11bHRpcGF0aF9jb25mX3Q7DQor
DQorLyoNCisgKiB0aGlzIGlzIHRoZSBvbmx5IHBvaW50IGluIHRoZSBSQUlE
IGNvZGUgd2hlcmUgd2UgdmlvbGF0ZQ0KKyAqIEMgdHlwZSBzYWZldHkuIG1k
ZGV2LT5wcml2YXRlIGlzIGFuICdvcGFxdWUnIHBvaW50ZXIuDQorICovDQor
I2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKG11bHRpcGF0aF9jb25m
X3QgKikgbWRkZXYtPnByaXZhdGUpDQorDQorLyoNCisgKiB0aGlzIGlzIG91
ciAncHJpdmF0ZScgJ2NvbGxlY3RpdmUnIE1VTFRJUEFUSCBidWZmZXIgaGVh
ZC4NCisgKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtp
bmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQNCisgKiBmb3IgdGhp
cyBNVUxUSVBBVEggb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVz
Og0KKyAqLw0KKw0KK3N0cnVjdCBtdWx0aXBhdGhfYmggew0KKwlhdG9taWNf
dAkJcmVtYWluaW5nOyAvKiAnaGF2ZSB3ZSBmaW5pc2hlZCcgY291bnQsDQor
CQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzDQorCQkJCQkgICAg
Ki8NCisJaW50CQkJY21kOw0KKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsNCisJ
bWRkZXZfdAkJCSptZGRldjsNCisJc3RydWN0IGJ1ZmZlcl9oZWFkCSptYXN0
ZXJfYmg7DQorCXN0cnVjdCBidWZmZXJfaGVhZAkqbXVsdGlwYXRoX2JoX2xp
c3Q7DQorCXN0cnVjdCBidWZmZXJfaGVhZAliaF9yZXE7DQorCXN0cnVjdCBt
dWx0aXBhdGhfYmgJKm5leHRfcjE7CS8qIG5leHQgZm9yIHJldHJ5IG9yIGlu
IGZyZWUgbGlzdCAqLw0KK307DQorLyogYml0cyBmb3IgbXVsdGlwYXRoX2Jo
LnN0YXRlICovDQorI2RlZmluZQlNUEJIX1VwdG9kYXRlCTENCisjZGVmaW5l
CU1QQkhfU3luY1BoYXNlCTINCisjZGVmaW5lCU1QQkhfUHJlQWxsb2MJMwkv
KiB0aGlzIHdhcyBwcmUtYWxsb2NhdGVkLCBhZGQgdG8gZnJlZSBsaXN0ICov
DQorI2VuZGlmDQotLS0gbGludXgvZHJpdmVycy9tZC9Db25maWcuaW4ub3Jp
ZwlUdWUgQXVnIDIxIDE0OjI2OjAzIDIwMDENCisrKyBsaW51eC9kcml2ZXJz
L21kL0NvbmZpZy5pbglGcmkgU2VwIDE0IDEwOjAzOjI2IDIwMDENCkBAIC0x
MSw2ICsxMSw3IEBADQogZGVwX3RyaXN0YXRlICcgIFJBSUQtMCAoc3RyaXBp
bmcpIG1vZGUnIENPTkZJR19NRF9SQUlEMCAkQ09ORklHX0JMS19ERVZfTUQN
CiBkZXBfdHJpc3RhdGUgJyAgUkFJRC0xIChtaXJyb3JpbmcpIG1vZGUnIENP
TkZJR19NRF9SQUlEMSAkQ09ORklHX0JMS19ERVZfTUQNCiBkZXBfdHJpc3Rh
dGUgJyAgUkFJRC00L1JBSUQtNSBtb2RlJyBDT05GSUdfTURfUkFJRDUgJENP
TkZJR19CTEtfREVWX01EDQorZGVwX3RyaXN0YXRlICcgIE11bHRpcGF0aCBJ
L08gc3VwcG9ydCcgQ09ORklHX01EX01VTFRJUEFUSCAkQ09ORklHX0JMS19E
RVZfTUQNCiANCiBkZXBfdHJpc3RhdGUgJyBMb2dpY2FsIHZvbHVtZSBtYW5h
Z2VyIChMVk0pIHN1cHBvcnQnIENPTkZJR19CTEtfREVWX0xWTSAkQ09ORklH
X01EDQogDQotLS0gbGludXgvZHJpdmVycy9tZC9NYWtlZmlsZS5vcmlnCUZy
aSBEZWMgMjkgMjM6MDc6MjIgMjAwMA0KKysrIGxpbnV4L2RyaXZlcnMvbWQv
TWFrZWZpbGUJRnJpIFNlcCAxNCAxMDowMzoyNiAyMDAxDQpAQCAtMTcsNiAr
MTcsNyBAQA0KIG9iai0kKENPTkZJR19NRF9SQUlEMCkJCSs9IHJhaWQwLm8N
CiBvYmotJChDT05GSUdfTURfUkFJRDEpCQkrPSByYWlkMS5vDQogb2JqLSQo
Q09ORklHX01EX1JBSUQ1KQkJKz0gcmFpZDUubyB4b3Iubw0KK29iai0kKENP
TkZJR19NRF9NVUxUSVBBVEgpCSs9IG11bHRpcGF0aC5vDQogb2JqLSQoQ09O
RklHX0JMS19ERVZfTUQpCSs9IG1kLm8NCiBvYmotJChDT05GSUdfQkxLX0RF
Vl9MVk0pCSs9IGx2bS1tb2Qubw0KIA0KLS0tIGxpbnV4L2RyaXZlcnMvbWQv
bXVsdGlwYXRoLmMub3JpZwlGcmkgU2VwIDE0IDEwOjAzOjI4IDIwMDENCisr
KyBsaW51eC9kcml2ZXJzL21kL211bHRpcGF0aC5jCUZyaSBTZXAgMTQgMTA6
MDM6MjggMjAwMQ0KQEAgLTAsMCArMSwxMjYxIEBADQorLyoNCisgKiBtdWx0
aXBhdGguYyA6IE11bHRpcGxlIERldmljZXMgZHJpdmVyIGZvciBMaW51eA0K
KyAqDQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIEluZ28g
TW9sbmFyLCBSZWQgSGF0DQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYs
IDE5OTcsIDE5OTggSW5nbyBNb2xuYXIsIE1pZ3VlbCBkZSBJY2F6YSwgR2Fk
aSBPeG1hbg0KKyAqDQorICogTVVMVElQQVRIIG1hbmFnZW1lbnQgZnVuY3Rp
b25zLg0KKyAqDQorICogQmV0dGVyIHJlYWQtYmFsYW5jaW5nIGNvZGUgd3Jp
dHRlbiBieSBNaWthIEt1b3BwYWxhIDxtaWt1QGlraS5maT4sIDIwMDANCisg
Kg0KKyAqIEZpeGVzIHRvIHJlY29uc3RydWN0aW9uIGJ5IEpha29iINhzdGVy
Z2FhcmQiIDxqYWtvYkBvc3RlbmZlbGQuZGs+DQorICogVmFyaW91cyBmaXhl
cyBieSBOZWlsIEJyb3duIDxuZWlsYkBjc2UudW5zdy5lZHUuYXU+DQorICoN
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKyAq
IGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UNCisgKiAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlO
Ryk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUNCisgKiBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEg
MDIxMzksIFVTQS4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvbW9kdWxl
Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGlu
dXgvcmFpZC9tdWx0aXBhdGguaD4NCisjaW5jbHVkZSA8YXNtL2F0b21pYy5o
Pg0KKw0KKyNkZWZpbmUgTUFKT1JfTlIgTURfTUFKT1INCisjZGVmaW5lIE1E
X0RSSVZFUg0KKyNkZWZpbmUgTURfUEVSU09OQUxJVFkNCisNCisjZGVmaW5l
IE1BWF9XT1JLX1BFUl9ESVNLIDEyOA0KKw0KKy8qDQorICogVGhlIGZvbGxv
d2luZyBjYW4gYmUgdXNlZCB0byBkZWJ1ZyB0aGUgZHJpdmVyDQorICovDQor
I2RlZmluZSBNVUxUSVBBVEhfREVCVUcJMA0KKw0KKyNpZiBNVUxUSVBBVEhf
REVCVUcNCisjZGVmaW5lIFBSSU5USyh4Li4uKSAgIHByaW50ayh4KQ0KKyNk
ZWZpbmUgaW5saW5lDQorI2RlZmluZSBfX2lubGluZV9fDQorI2Vsc2UNCisj
ZGVmaW5lIFBSSU5USyh4Li4uKSAgZG8geyB9IHdoaWxlICgwKQ0KKyNlbmRp
Zg0KKw0KKw0KK3N0YXRpYyBtZGtfcGVyc29uYWxpdHlfdCBtdWx0aXBhdGhf
cGVyc29uYWxpdHk7DQorc3RhdGljIG1kX3NwaW5sb2NrX3QgcmV0cnlfbGlz
dF9sb2NrID0gTURfU1BJTl9MT0NLX1VOTE9DS0VEOw0KK3N0cnVjdCBtdWx0
aXBhdGhfYmggKm11bHRpcGF0aF9yZXRyeV9saXN0ID0gTlVMTCwgKiptdWx0
aXBhdGhfcmV0cnlfdGFpbDsNCisNCitzdGF0aWMgaW50IG11bHRpcGF0aF9k
aXNrb3AobWRkZXZfdCAqbWRkZXYsIG1kcF9kaXNrX3QgKipkLCBpbnQgc3Rh
dGUpOw0KKw0KK3N0cnVjdCBidWZmZXJfaGVhZCAqbXVsdGlwYXRoX2FsbG9j
X2JoKG11bHRpcGF0aF9jb25mX3QgKmNvbmYsIGludCBjbnQpDQorew0KKwkv
KiByZXR1cm4gYSBsaW5rZWQgbGlzdCBvZiAiY250IiBzdHJ1Y3QgYnVmZmVy
X2hlYWRzLg0KKwkgKiBkb24ndCB0YWtlIGFueSBvZmYgdGhlIGZyZWUgbGlz
dCB1bmxlc3Mgd2Uga25vdyB3ZSBjYW4NCisJICogZ2V0IGFsbCB3ZSBuZWVk
LCBvdGhlcndpc2Ugd2UgY291bGQgZGVhZGxvY2sNCisJICovDQorCXN0cnVj
dCBidWZmZXJfaGVhZCAqYmg9TlVMTDsNCisNCisJd2hpbGUoY250KSB7DQor
CQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnQ7DQorCQltZF9zcGluX2xvY2tfaXJx
KCZjb25mLT5kZXZpY2VfbG9jayk7DQorCQlpZiAoY29uZi0+ZnJlZWJoX2Nu
dCA+PSBjbnQpDQorCQkJd2hpbGUgKGNudCkgew0KKwkJCQl0ID0gY29uZi0+
ZnJlZWJoOw0KKwkJCQljb25mLT5mcmVlYmggPSB0LT5iX25leHQ7DQorCQkJ
CXQtPmJfbmV4dCA9IGJoOw0KKwkJCQliaCA9IHQ7DQorCQkJCXQtPmJfc3Rh
dGUgPSAwOw0KKwkJCQljb25mLT5mcmVlYmhfY250LS07DQorCQkJCWNudC0t
Ow0KKwkJCX0NCisJCW1kX3NwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNl
X2xvY2spOw0KKwkJaWYgKGNudCA9PSAwKQ0KKwkJCWJyZWFrOw0KKwkJdCA9
IChzdHJ1Y3QgYnVmZmVyX2hlYWQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
YnVmZmVyX2hlYWQpLCBHRlBfTk9JTyk7DQorCQlpZiAodCkgew0KKwkJCW1l
bXNldCh0LCAwLCBzaXplb2YoKnQpKTsNCisJCQl0LT5iX25leHQgPSBiaDsN
CisJCQliaCA9IHQ7DQorCQkJY250LS07DQorCQl9IGVsc2Ugew0KKwkJCVBS
SU5USygid2FpdGluZyBmb3IgJWQgYmhcbiIsIGNudCk7DQorCQkJd2FpdF9l
dmVudChjb25mLT53YWl0X2J1ZmZlciwgY29uZi0+ZnJlZWJoX2NudCA+PSBj
bnQpOw0KKwkJfQ0KKwl9DQorCXJldHVybiBiaDsNCit9DQorDQorc3RhdGlj
IGlubGluZSB2b2lkIG11bHRpcGF0aF9mcmVlX2JoKG11bHRpcGF0aF9jb25m
X3QgKmNvbmYsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpDQorew0KKwl1bnNp
Z25lZCBsb25nIGZsYWdzOw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+
ZGV2aWNlX2xvY2ssIGZsYWdzKTsNCisJd2hpbGUgKGJoKSB7DQorCQlzdHJ1
Y3QgYnVmZmVyX2hlYWQgKnQgPSBiaDsNCisJCWJoPWJoLT5iX25leHQ7DQor
CQlpZiAodC0+Yl9wcHJldiA9PSBOVUxMKQ0KKwkJCWtmcmVlKHQpOw0KKwkJ
ZWxzZSB7DQorCQkJdC0+Yl9uZXh0PSBjb25mLT5mcmVlYmg7DQorCQkJY29u
Zi0+ZnJlZWJoID0gdDsNCisJCQljb25mLT5mcmVlYmhfY250Kys7DQorCQl9
DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNl
X2xvY2ssIGZsYWdzKTsNCisJd2FrZV91cCgmY29uZi0+d2FpdF9idWZmZXIp
Ow0KK30NCisNCitzdGF0aWMgaW50IG11bHRpcGF0aF9ncm93X2JoKG11bHRp
cGF0aF9jb25mX3QgKmNvbmYsIGludCBjbnQpDQorew0KKwkvKiBhbGxvY2F0
ZSBjbnQgYnVmZmVyX2hlYWRzLCBwb3NzaWJseSBsZXNzIGlmIGthbGxvYyBm
YWlscyAqLw0KKwlpbnQgaSA9IDA7DQorDQorCXdoaWxlIChpIDwgY250KSB7
DQorCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOw0KKwkJYmggPSBrbWFsbG9j
KHNpemVvZigqYmgpLCBHRlBfS0VSTkVMKTsNCisJCWlmICghYmgpIGJyZWFr
Ow0KKwkJbWVtc2V0KGJoLCAwLCBzaXplb2YoKmJoKSk7DQorDQorCQltZF9z
cGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorCQliaC0+Yl9w
cHJldiA9ICZjb25mLT5mcmVlYmg7DQorCQliaC0+Yl9uZXh0ID0gY29uZi0+
ZnJlZWJoOw0KKwkJY29uZi0+ZnJlZWJoID0gYmg7DQorCQljb25mLT5mcmVl
YmhfY250Kys7DQorCQltZF9zcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmlj
ZV9sb2NrKTsNCisNCisJCWkrKzsNCisJfQ0KKwlyZXR1cm4gaTsNCit9DQor
DQorc3RhdGljIGludCBtdWx0aXBhdGhfc2hyaW5rX2JoKG11bHRpcGF0aF9j
b25mX3QgKmNvbmYsIGludCBjbnQpDQorew0KKwkvKiBkaXNjYXJkIGNudCBi
dWZmZXJfaGVhZHMsIGlmIHdlIGNhbiBmaW5kIHRoZW0gKi8NCisJaW50IGkg
PSAwOw0KKw0KKwltZF9zcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9j
ayk7DQorCXdoaWxlICgoaSA8IGNudCkgJiYgY29uZi0+ZnJlZWJoKSB7DQor
CQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gY29uZi0+ZnJlZWJoOw0KKwkJ
Y29uZi0+ZnJlZWJoID0gYmgtPmJfbmV4dDsNCisJCWtmcmVlKGJoKTsNCisJ
CWkrKzsNCisJCWNvbmYtPmZyZWViaF9jbnQtLTsNCisJfQ0KKwltZF9zcGlu
X3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisJcmV0dXJuIGk7
DQorfQ0KKwkJDQorDQorc3RhdGljIHN0cnVjdCBtdWx0aXBhdGhfYmggKm11
bHRpcGF0aF9hbGxvY19tcGJoKG11bHRpcGF0aF9jb25mX3QgKmNvbmYpDQor
ew0KKwlzdHJ1Y3QgbXVsdGlwYXRoX2JoICpyMV9iaCA9IE5VTEw7DQorDQor
CWRvIHsNCisJCW1kX3NwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2Nr
KTsNCisJCWlmIChjb25mLT5mcmVlcjEpIHsNCisJCQlyMV9iaCA9IGNvbmYt
PmZyZWVyMTsNCisJCQljb25mLT5mcmVlcjEgPSByMV9iaC0+bmV4dF9yMTsN
CisJCQlyMV9iaC0+bmV4dF9yMSA9IE5VTEw7DQorCQkJcjFfYmgtPnN0YXRl
ID0gMDsNCisJCQlyMV9iaC0+YmhfcmVxLmJfc3RhdGUgPSAwOw0KKwkJfQ0K
KwkJbWRfc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQor
CQlpZiAocjFfYmgpDQorCQkJcmV0dXJuIHIxX2JoOw0KKwkJcjFfYmggPSAo
c3RydWN0IG11bHRpcGF0aF9iaCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
bXVsdGlwYXRoX2JoKSwNCisJCQkJCUdGUF9OT0lPKTsNCisJCWlmIChyMV9i
aCkgew0KKwkJCW1lbXNldChyMV9iaCwgMCwgc2l6ZW9mKCpyMV9iaCkpOw0K
KwkJCXJldHVybiByMV9iaDsNCisJCX0NCisJCXdhaXRfZXZlbnQoY29uZi0+
d2FpdF9idWZmZXIsIGNvbmYtPmZyZWVyMSk7DQorCX0gd2hpbGUgKDEpOw0K
K30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXVsdGlwYXRoX2ZyZWVfbXBi
aChzdHJ1Y3QgbXVsdGlwYXRoX2JoICpyMV9iaCkNCit7DQorCXN0cnVjdCBi
dWZmZXJfaGVhZCAqYmggPSByMV9iaC0+bXVsdGlwYXRoX2JoX2xpc3Q7DQor
CW11bHRpcGF0aF9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKHIxX2Jo
LT5tZGRldik7DQorDQorCXIxX2JoLT5tdWx0aXBhdGhfYmhfbGlzdCA9IE5V
TEw7DQorDQorCWlmICh0ZXN0X2JpdChNUEJIX1ByZUFsbG9jLCAmcjFfYmgt
PnN0YXRlKSkgew0KKwkJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJCXNwaW5f
bG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOw0KKwkJ
cjFfYmgtPm5leHRfcjEgPSBjb25mLT5mcmVlcjE7DQorCQljb25mLT5mcmVl
cjEgPSByMV9iaDsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYt
PmRldmljZV9sb2NrLCBmbGFncyk7DQorCX0gZWxzZSB7DQorCQlrZnJlZShy
MV9iaCk7DQorCX0NCisJbXVsdGlwYXRoX2ZyZWVfYmgoY29uZiwgYmgpOw0K
K30NCisNCitzdGF0aWMgaW50IG11bHRpcGF0aF9ncm93X21wYmggKG11bHRp
cGF0aF9jb25mX3QgKmNvbmYsIGludCBjbnQpDQorew0KKwlpbnQgaSA9IDA7
DQorDQorCXdoaWxlIChpIDwgY250KSB7DQorCQlzdHJ1Y3QgbXVsdGlwYXRo
X2JoICpyMV9iaDsNCisJCXIxX2JoID0gKHN0cnVjdCBtdWx0aXBhdGhfYmgq
KWttYWxsb2Moc2l6ZW9mKCpyMV9iaCksIEdGUF9LRVJORUwpOw0KKwkJaWYg
KCFyMV9iaCkNCisJCQlicmVhazsNCisJCW1lbXNldChyMV9iaCwgMCwgc2l6
ZW9mKCpyMV9iaCkpOw0KKw0KKwkJbWRfc3Bpbl9sb2NrX2lycSgmY29uZi0+
ZGV2aWNlX2xvY2spOw0KKwkJc2V0X2JpdChNUEJIX1ByZUFsbG9jLCAmcjFf
YmgtPnN0YXRlKTsNCisJCXIxX2JoLT5uZXh0X3IxID0gY29uZi0+ZnJlZXIx
Ow0KKwkJY29uZi0+ZnJlZXIxID0gcjFfYmg7DQorCQltZF9zcGluX3VubG9j
a19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisNCisJCWkrKzsNCisJfQ0K
KwlyZXR1cm4gaTsNCit9DQorDQorc3RhdGljIHZvaWQgbXVsdGlwYXRoX3No
cmlua19tcGJoKG11bHRpcGF0aF9jb25mX3QgKmNvbmYpDQorew0KKwltZF9z
cGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorCXdoaWxlIChj
b25mLT5mcmVlcjEpIHsNCisJCXN0cnVjdCBtdWx0aXBhdGhfYmggKnIxX2Jo
ID0gY29uZi0+ZnJlZXIxOw0KKwkJY29uZi0+ZnJlZXIxID0gcjFfYmgtPm5l
eHRfcjE7DQorCQlrZnJlZShyMV9iaCk7DQorCX0NCisJbWRfc3Bpbl91bmxv
Y2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7DQorfQ0KKw0KKw0KKw0KK3N0
YXRpYyBpbmxpbmUgdm9pZCBtdWx0aXBhdGhfZnJlZV9idWYoc3RydWN0IG11
bHRpcGF0aF9iaCAqcjFfYmgpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdz
Ow0KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gcjFfYmgtPm11bHRpcGF0
aF9iaF9saXN0Ow0KKwltdWx0aXBhdGhfY29uZl90ICpjb25mID0gbWRkZXZf
dG9fY29uZihyMV9iaC0+bWRkZXYpOw0KKwlyMV9iaC0+bXVsdGlwYXRoX2Jo
X2xpc3QgPSBOVUxMOw0KKwkNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYt
PmRldmljZV9sb2NrLCBmbGFncyk7DQorCXIxX2JoLT5uZXh0X3IxID0gY29u
Zi0+ZnJlZWJ1ZjsNCisJY29uZi0+ZnJlZWJ1ZiA9IHIxX2JoOw0KKwlzcGlu
X3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3Mp
Ow0KKwltdWx0aXBhdGhfZnJlZV9iaChjb25mLCBiaCk7DQorfQ0KKw0KK3N0
YXRpYyBpbnQgbXVsdGlwYXRoX21hcCAobWRkZXZfdCAqbWRkZXYsIGtkZXZf
dCAqcmRldikNCit7DQorCW11bHRpcGF0aF9jb25mX3QgKmNvbmYgPSBtZGRl
dl90b19jb25mKG1kZGV2KTsNCisJaW50IGksIGRpc2tzID0gTURfU0JfRElT
S1M7DQorDQorCS8qDQorCSAqIExhdGVyIHdlIGRvIHJlYWQgYmFsYW5jaW5n
IG9uIHRoZSByZWFkIHNpZGUgDQorCSAqIG5vdyB3ZSB1c2UgdGhlIGZpcnN0
IGF2YWlsYWJsZSBkaXNrLg0KKwkgKi8NCisNCisJZm9yIChpID0gMDsgaSA8
IGRpc2tzOyBpKyspIHsNCisJCWlmIChjb25mLT5tdWx0aXBhdGhzW2ldLm9w
ZXJhdGlvbmFsKSB7DQorCQkJKnJkZXYgPSBjb25mLT5tdWx0aXBhdGhzW2ld
LmRldjsNCisJCQlyZXR1cm4gKDApOw0KKwkJfQ0KKwl9DQorDQorCXByaW50
ayAoS0VSTl9FUlIgIm11bHRpcGF0aF9tYXAoKTogbm8gbW9yZSBvcGVyYXRp
b25hbCBJTyBwYXRocz9cbiIpOw0KKwlyZXR1cm4gKC0xKTsNCit9DQorDQor
c3RhdGljIHZvaWQgbXVsdGlwYXRoX3Jlc2NoZWR1bGVfcmV0cnkgKHN0cnVj
dCBtdWx0aXBhdGhfYmggKnIxX2JoKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBm
bGFnczsNCisJbWRkZXZfdCAqbWRkZXYgPSByMV9iaC0+bWRkZXY7DQorCW11
bHRpcGF0aF9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsN
CisNCisJbWRfc3Bpbl9sb2NrX2lycXNhdmUoJnJldHJ5X2xpc3RfbG9jaywg
ZmxhZ3MpOw0KKwlpZiAobXVsdGlwYXRoX3JldHJ5X2xpc3QgPT0gTlVMTCkN
CisJCW11bHRpcGF0aF9yZXRyeV90YWlsID0gJm11bHRpcGF0aF9yZXRyeV9s
aXN0Ow0KKwkqbXVsdGlwYXRoX3JldHJ5X3RhaWwgPSByMV9iaDsNCisJbXVs
dGlwYXRoX3JldHJ5X3RhaWwgPSAmcjFfYmgtPm5leHRfcjE7DQorCXIxX2Jo
LT5uZXh0X3IxID0gTlVMTDsNCisJbWRfc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSgmcmV0cnlfbGlzdF9sb2NrLCBmbGFncyk7DQorCW1kX3dha2V1cF90aHJl
YWQoY29uZi0+dGhyZWFkKTsNCit9DQorDQorDQorc3RhdGljIHZvaWQgaW5s
aW5lIGlvX3JlcXVlc3RfZG9uZSh1bnNpZ25lZCBsb25nIHNlY3RvciwgbXVs
dGlwYXRoX2NvbmZfdCAqY29uZiwgaW50IHBoYXNlKQ0KK3sNCisJdW5zaWdu
ZWQgbG9uZyBmbGFnczsNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPnNl
Z21lbnRfbG9jaywgZmxhZ3MpOw0KKwlpZiAoc2VjdG9yIDwgY29uZi0+c3Rh
cnRfYWN0aXZlKQ0KKwkJY29uZi0+Y250X2RvbmUtLTsNCisJZWxzZSBpZiAo
c2VjdG9yID49IGNvbmYtPnN0YXJ0X2Z1dHVyZSAmJiBjb25mLT5waGFzZSA9
PSBwaGFzZSkNCisJCWNvbmYtPmNudF9mdXR1cmUtLTsNCisJZWxzZSBpZiAo
IS0tY29uZi0+Y250X3BlbmRpbmcpDQorCQl3YWtlX3VwKCZjb25mLT53YWl0
X3JlYWR5KTsNCisNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+
c2VnbWVudF9sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlu
bGluZSBzeW5jX3JlcXVlc3RfZG9uZSAodW5zaWduZWQgbG9uZyBzZWN0b3Is
IG11bHRpcGF0aF9jb25mX3QgKmNvbmYpDQorew0KKwl1bnNpZ25lZCBsb25n
IGZsYWdzOw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+c2VnbWVudF9s
b2NrLCBmbGFncyk7DQorCWlmIChzZWN0b3IgPj0gY29uZi0+c3RhcnRfcmVh
ZHkpDQorCQktLWNvbmYtPmNudF9yZWFkeTsNCisJZWxzZSBpZiAoc2VjdG9y
ID49IGNvbmYtPnN0YXJ0X2FjdGl2ZSkgew0KKwkJaWYgKCEtLWNvbmYtPmNu
dF9hY3RpdmUpIHsNCisJCQljb25mLT5zdGFydF9hY3RpdmUgPSBjb25mLT5z
dGFydF9yZWFkeTsNCisJCQl3YWtlX3VwKCZjb25mLT53YWl0X2RvbmUpOw0K
KwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPnNl
Z21lbnRfbG9jaywgZmxhZ3MpOw0KK30NCisNCisvKg0KKyAqIG11bHRpcGF0
aF9lbmRfYmhfaW8oKSBpcyBjYWxsZWQgd2hlbiB3ZSBoYXZlIGZpbmlzaGVk
IHNlcnZpY2luZyBhIG11bHRpcGF0aGVkDQorICogb3BlcmF0aW9uIGFuZCBh
cmUgcmVhZHkgdG8gcmV0dXJuIGEgc3VjY2Vzcy9mYWlsdXJlIGNvZGUgdG8g
dGhlIGJ1ZmZlcg0KKyAqIGNhY2hlIGxheWVyLg0KKyAqLw0KK3N0YXRpYyB2
b2lkIG11bHRpcGF0aF9lbmRfYmhfaW8gKHN0cnVjdCBtdWx0aXBhdGhfYmgg
KnIxX2JoLCBpbnQgdXB0b2RhdGUpDQorew0KKwlzdHJ1Y3QgYnVmZmVyX2hl
YWQgKmJoID0gcjFfYmgtPm1hc3Rlcl9iaDsNCisNCisJaW9fcmVxdWVzdF9k
b25lKGJoLT5iX3JzZWN0b3IsIG1kZGV2X3RvX2NvbmYocjFfYmgtPm1kZGV2
KSwNCisJCQl0ZXN0X2JpdChNUEJIX1N5bmNQaGFzZSwgJnIxX2JoLT5zdGF0
ZSkpOw0KKw0KKwliaC0+Yl9lbmRfaW8oYmgsIHVwdG9kYXRlKTsNCisJbXVs
dGlwYXRoX2ZyZWVfbXBiaChyMV9iaCk7DQorfQ0KKw0KK3ZvaWQgbXVsdGlw
YXRoX2VuZF9yZXF1ZXN0IChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQg
dXB0b2RhdGUpDQorew0KKwlzdHJ1Y3QgbXVsdGlwYXRoX2JoICogcjFfYmgg
PSAoc3RydWN0IG11bHRpcGF0aF9iaCAqKShiaC0+Yl9wcml2YXRlKTsNCisN
CisJLyoNCisJICogdGhpcyBicmFuY2ggaXMgb3VyICdvbmUgbXVsdGlwYXRo
IElPIGhhcyBmaW5pc2hlZCcgZXZlbnQgaGFuZGxlcjoNCisJICovDQorCWlm
ICghdXB0b2RhdGUpDQorCQltZF9lcnJvciAocjFfYmgtPm1kZGV2LCBiaC0+
Yl9kZXYpOw0KKwllbHNlDQorCQkvKg0KKwkJICogU2V0IE1QQkhfVXB0b2Rh
dGUgaW4gb3VyIG1hc3RlciBidWZmZXJfaGVhZCwgc28gdGhhdA0KKwkJICog
d2Ugd2lsbCByZXR1cm4gYSBnb29kIGVycm9yIGNvZGUgZm9yIHRvIHRoZSBo
aWdoZXINCisJCSAqIGxldmVscyBldmVuIGlmIElPIG9uIHNvbWUgb3RoZXIg
bXVsdGlwYXRoZWQgYnVmZmVyIGZhaWxzLg0KKwkJICoNCisJCSAqIFRoZSAn
bWFzdGVyJyByZXByZXNlbnRzIHRoZSBjb21wbGV4IG9wZXJhdGlvbiB0byAN
CisJCSAqIHVzZXItc2lkZS4gU28gaWYgc29tZXRoaW5nIHdhaXRzIGZvciBJ
TywgdGhlbiBpdCB3aWxsDQorCQkgKiB3YWl0IGZvciB0aGUgJ21hc3Rlcicg
YnVmZmVyX2hlYWQuDQorCQkgKi8NCisJCXNldF9iaXQgKE1QQkhfVXB0b2Rh
dGUsICZyMV9iaC0+c3RhdGUpOw0KKw0KKwkJDQorCWlmICh1cHRvZGF0ZSkg
ew0KKwkJbXVsdGlwYXRoX2VuZF9iaF9pbyhyMV9iaCwgdXB0b2RhdGUpOw0K
KwkJcmV0dXJuOw0KKwl9DQorCS8qDQorCSAqIG9vcHMsIElPIGVycm9yOg0K
KwkgKi8NCisJcHJpbnRrKEtFUk5fRVJSICJtdWx0aXBhdGg6ICVzOiByZXNj
aGVkdWxpbmcgYmxvY2sgJWx1XG4iLCANCisJCSBwYXJ0aXRpb25fbmFtZShi
aC0+Yl9kZXYpLCBiaC0+Yl9ibG9ja25yKTsNCisJbXVsdGlwYXRoX3Jlc2No
ZWR1bGVfcmV0cnkocjFfYmgpOw0KKwlyZXR1cm47DQorfQ0KKw0KKy8qDQor
ICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGRpc2sgZnJvbSB3aGljaCB0
aGUgcmVxdWVzdGVkIHJlYWQgc2hvdWxkDQorICogYmUgZG9uZS4gSXQgYm9v
a2tlZXBzIHRoZSBsYXN0IHJlYWQgcG9zaXRpb24gZm9yIGV2ZXJ5IGRpc2sN
CisgKiBpbiBhcnJheSBhbmQgd2hlbiBuZXcgcmVhZCByZXF1ZXN0cyBjb21l
LCB0aGUgZGlzayB3aGljaCBsYXN0DQorICogcG9zaXRpb24gaXMgbmVhcmVz
dCB0byB0aGUgcmVxdWVzdCwgaXMgY2hvc2VuLg0KKyAqDQorICogVE9ETzog
bm93IGlmIHRoZXJlIGFyZSAyIG11bHRpcGF0aHMgaW4gdGhlIHNhbWUgMiBk
ZXZpY2VzLCBwZXJmb3JtYW5jZQ0KKyAqIGRlZ3JhZGVzIGRyYW1hdGljYWxs
eSBiZWNhdXNlIHBvc2l0aW9uIGlzIG11bHRpcGF0aCwgbm90IGRldmljZSBi
YXNlZC4NCisgKiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGJlIGRldmlj
ZSBiYXNlZC4gQWxzbyBhdG9taWMgc2VxdWVudGlhbA0KKyAqIHJlYWRzIHNo
b3VsZCBiZSBzb21laG93IGJhbGFuY2VkLg0KKyAqLw0KKw0KK3N0YXRpYyBp
bnQgbXVsdGlwYXRoX3JlYWRfYmFsYW5jZSAobXVsdGlwYXRoX2NvbmZfdCAq
Y29uZikNCit7DQorCWludCBkaXNrOw0KKw0KKwlmb3IgKGRpc2sgPSAwOyBk
aXNrIDwgY29uZi0+cmFpZF9kaXNrczsgZGlzaysrKQkNCisJCWlmIChjb25m
LT5tdWx0aXBhdGhzW2Rpc2tdLm9wZXJhdGlvbmFsKQ0KKwkJCXJldHVybiBk
aXNrOw0KKwlCVUcoKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp
bnQgbXVsdGlwYXRoX21ha2VfcmVxdWVzdCAobWRkZXZfdCAqbWRkZXYsIGlu
dCBydywNCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpDQor
ew0KKwltdWx0aXBhdGhfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZiht
ZGRldik7DQorCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVxOw0KKwlzdHJ1
Y3QgbXVsdGlwYXRoX2JoICogcjFfYmg7DQorCXN0cnVjdCBtdWx0aXBhdGhf
aW5mbyAqbXVsdGlwYXRoOw0KKw0KKwlpZiAoIWJ1ZmZlcl9sb2NrZWQoYmgp
KQ0KKwkJQlVHKCk7DQorCQ0KKy8qDQorICogbWFrZV9yZXF1ZXN0KCkgY2Fu
IGFib3J0IHRoZSBvcGVyYXRpb24gd2hlbiBSRUFEQSBpcyBiZWluZw0KKyAq
IHVzZWQgYW5kIG5vIGVtcHR5IHJlcXVlc3QgaXMgYXZhaWxhYmxlLg0KKyAq
DQorICogQ3VycmVudGx5LCBqdXN0IHJlcGxhY2UgdGhlIGNvbW1hbmQgd2l0
aCBSRUFEL1dSSVRFLg0KKyAqLw0KKwlpZiAocncgPT0gUkVBREEpDQorCQly
dyA9IFJFQUQ7DQorDQorCXIxX2JoID0gbXVsdGlwYXRoX2FsbG9jX21wYmgg
KGNvbmYpOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZjb25mLT5zZWdtZW50X2xv
Y2spOw0KKwl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfZG9uZSwN
CisJCQliaC0+Yl9yc2VjdG9yIDwgY29uZi0+c3RhcnRfYWN0aXZlIHx8DQor
CQkJYmgtPmJfcnNlY3RvciA+PSBjb25mLT5zdGFydF9mdXR1cmUsDQorCQkJ
Y29uZi0+c2VnbWVudF9sb2NrKTsNCisJaWYgKGJoLT5iX3JzZWN0b3IgPCBj
b25mLT5zdGFydF9hY3RpdmUpIA0KKwkJY29uZi0+Y250X2RvbmUrKzsNCisJ
ZWxzZSB7DQorCQljb25mLT5jbnRfZnV0dXJlKys7DQorCQlpZiAoY29uZi0+
cGhhc2UpDQorCQkJc2V0X2JpdChNUEJIX1N5bmNQaGFzZSwgJnIxX2JoLT5z
dGF0ZSk7DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5zZWdtZW50
X2xvY2spOw0KKwkNCisJLyoNCisJICogaSB0aGluayB0aGUgcmVhZCBhbmQg
d3JpdGUgYnJhbmNoIHNob3VsZCBiZSBzZXBhcmF0ZWQgY29tcGxldGVseSwN
CisJICogc2luY2Ugd2Ugd2FudCB0byBkbyByZWFkIGJhbGFuY2luZyBvbiB0
aGUgcmVhZCBzaWRlIGZvciBleGFtcGxlLg0KKwkgKiBBbHRlcm5hdGl2ZSBp
bXBsZW1lbnRhdGlvbnM/IDopIC0tbWluZ28NCisJICovDQorDQorCXIxX2Jo
LT5tYXN0ZXJfYmggPSBiaDsNCisJcjFfYmgtPm1kZGV2ID0gbWRkZXY7DQor
CXIxX2JoLT5jbWQgPSBydzsNCisNCisJLyoNCisJICogcmVhZCBiYWxhbmNp
bmcgbG9naWM6DQorCSAqLw0KKwltdWx0aXBhdGggPSBjb25mLT5tdWx0aXBh
dGhzICsgbXVsdGlwYXRoX3JlYWRfYmFsYW5jZShjb25mKTsNCisNCisJYmhf
cmVxID0gJnIxX2JoLT5iaF9yZXE7DQorCW1lbWNweShiaF9yZXEsIGJoLCBz
aXplb2YoKmJoKSk7DQorCWJoX3JlcS0+Yl9ibG9ja25yID0gYmgtPmJfcnNl
Y3RvcjsNCisJYmhfcmVxLT5iX2RldiA9IG11bHRpcGF0aC0+ZGV2Ow0KKwli
aF9yZXEtPmJfcmRldiA9IG11bHRpcGF0aC0+ZGV2Ow0KKy8qCWJoX3JlcS0+
Yl9yc2VjdG9yID0gYmgtPm5fcnNlY3RvcjsgKi8NCisJYmhfcmVxLT5iX2Vu
ZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsNCisJYmhfcmVxLT5iX3By
aXZhdGUgPSByMV9iaDsNCisJZ2VuZXJpY19tYWtlX3JlcXVlc3QgKHJ3LCBi
aF9yZXEpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdWx0
aXBhdGhfc3RhdHVzIChjaGFyICpwYWdlLCBtZGRldl90ICptZGRldikNCit7
DQorCW11bHRpcGF0aF9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1k
ZGV2KTsNCisJaW50IHN6ID0gMCwgaTsNCisJDQorCXN6ICs9IHNwcmludGYg
KHBhZ2Urc3osICIgWyVkLyVkXSBbIiwgY29uZi0+cmFpZF9kaXNrcywNCisJ
CQkJCQkgY29uZi0+d29ya2luZ19kaXNrcyk7DQorCWZvciAoaSA9IDA7IGkg
PCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspDQorCQlzeiArPSBzcHJpbnRmIChw
YWdlK3N6LCAiJXMiLA0KKwkJCWNvbmYtPm11bHRpcGF0aHNbaV0ub3BlcmF0
aW9uYWwgPyAiVSIgOiAiXyIpOw0KKwlzeiArPSBzcHJpbnRmIChwYWdlK3N6
LCAiXSIpOw0KKwlyZXR1cm4gc3o7DQorfQ0KKw0KKyNkZWZpbmUgTEFTVF9E
SVNLIEtFUk5fQUxFUlQgXA0KKyJtdWx0aXBhdGg6IG9ubHkgb25lIElPIHBh
dGggbGVmdCBhbmQgSU8gZXJyb3IuXG4iDQorDQorI2RlZmluZSBOT19TUEFS
RV9ESVNLIEtFUk5fQUxFUlQgXA0KKyJtdWx0aXBhdGg6IG5vIHNwYXJlIElP
IHBhdGggbGVmdCFcbiINCisNCisjZGVmaW5lIERJU0tfRkFJTEVEIEtFUk5f
QUxFUlQgXA0KKyJtdWx0aXBhdGg6IElPIGZhaWx1cmUgb24gJXMsIGRpc2Fi
bGluZyBJTyBwYXRoLiBcbiIgXA0KKyIJT3BlcmF0aW9uIGNvbnRpbnVpbmcg
b24gJWQgSU8gcGF0aHMuXG4iDQorDQorc3RhdGljIHZvaWQgbWFya19kaXNr
X2JhZCAobWRkZXZfdCAqbWRkZXYsIGludCBmYWlsZWQpDQorew0KKwltdWx0
aXBhdGhfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7DQor
CXN0cnVjdCBtdWx0aXBhdGhfaW5mbyAqbXVsdGlwYXRoID0gY29uZi0+bXVs
dGlwYXRocytmYWlsZWQ7DQorCW1kcF9zdXBlcl90ICpzYiA9IG1kZGV2LT5z
YjsNCisNCisJbXVsdGlwYXRoLT5vcGVyYXRpb25hbCA9IDA7DQorCW1hcmtf
ZGlza19mYXVsdHkoc2ItPmRpc2tzK211bHRpcGF0aC0+bnVtYmVyKTsNCisJ
bWFya19kaXNrX25vbnN5bmMoc2ItPmRpc2tzK211bHRpcGF0aC0+bnVtYmVy
KTsNCisJbWFya19kaXNrX2luYWN0aXZlKHNiLT5kaXNrcyttdWx0aXBhdGgt
Pm51bWJlcik7DQorCXNiLT5hY3RpdmVfZGlza3MtLTsNCisJc2ItPndvcmtp
bmdfZGlza3MtLTsNCisJc2ItPmZhaWxlZF9kaXNrcysrOw0KKwltZGRldi0+
c2JfZGlydHkgPSAxOw0KKwltZF93YWtldXBfdGhyZWFkKGNvbmYtPnRocmVh
ZCk7DQorCWNvbmYtPndvcmtpbmdfZGlza3MtLTsNCisJcHJpbnRrIChESVNL
X0ZBSUxFRCwgcGFydGl0aW9uX25hbWUgKG11bHRpcGF0aC0+ZGV2KSwNCisJ
CQkJIGNvbmYtPndvcmtpbmdfZGlza3MpOw0KK30NCisNCisvKg0KKyAqIENh
cmVmdWwsIHRoaXMgY2FuIGV4ZWN1dGUgaW4gSVJRIGNvbnRleHRzIGFzIHdl
bGwhDQorICovDQorc3RhdGljIGludCBtdWx0aXBhdGhfZXJyb3IgKG1kZGV2
X3QgKm1kZGV2LCBrZGV2X3QgZGV2KQ0KK3sNCisJbXVsdGlwYXRoX2NvbmZf
dCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOw0KKwlzdHJ1Y3QgbXVs
dGlwYXRoX2luZm8gKiBtdWx0aXBhdGhzID0gY29uZi0+bXVsdGlwYXRoczsN
CisJaW50IGRpc2tzID0gTURfU0JfRElTS1M7DQorCWludCBvdGhlcl9wYXRo
cyA9IDE7DQorCWludCBpOw0KKw0KKwlpZiAoY29uZi0+d29ya2luZ19kaXNr
cyA9PSAxKSB7DQorCQlvdGhlcl9wYXRocyA9IDA7DQorCQlmb3IgKGkgPSAw
OyBpIDwgZGlza3M7IGkrKykgew0KKwkJCWlmIChtdWx0aXBhdGhzW2ldLnNw
YXJlKSB7DQorCQkJCW90aGVyX3BhdGhzID0gMTsNCisJCQkJYnJlYWs7DQor
CQkJfQ0KKwkJfQ0KKwl9DQorDQorCWlmICghb3RoZXJfcGF0aHMpIHsNCisJ
CS8qDQorCQkgKiBVaCBvaCwgd2UgY2FuIGRvIG5vdGhpbmcgaWYgdGhpcyBp
cyBvdXIgbGFzdCBwYXRoLCBidXQNCisJCSAqIGZpcnN0IGNoZWNrIGlmIHRo
aXMgaXMgYSBxdWV1ZWQgcmVxdWVzdCBmb3IgYSBkZXZpY2UNCisJCSAqIHdo
aWNoIGhhcyBqdXN0IGZhaWxlZC4NCisJCSAqLw0KKwkJZm9yIChpID0gMDsg
aSA8IGRpc2tzOyBpKyspIHsNCisJCQlpZiAobXVsdGlwYXRoc1tpXS5kZXY9
PWRldiAmJiAhbXVsdGlwYXRoc1tpXS5vcGVyYXRpb25hbCkNCisJCQkJcmV0
dXJuIDA7DQorCQl9DQorCQlwcmludGsgKExBU1RfRElTSyk7DQorCX0gZWxz
ZSB7DQorCQkvKg0KKwkJICogTWFyayBkaXNrIGFzIHVudXNhYmxlDQorCQkg
Ki8NCisJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7DQorCQkJaWYg
KG11bHRpcGF0aHNbaV0uZGV2PT1kZXYgJiYgbXVsdGlwYXRoc1tpXS5vcGVy
YXRpb25hbCkgew0KKwkJCQltYXJrX2Rpc2tfYmFkKG1kZGV2LCBpKTsNCisJ
CQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKCFjb25mLT53b3JraW5n
X2Rpc2tzKSB7DQorCQkJaW50IGVyciA9IDE7DQorCQkJbWRwX2Rpc2tfdCAq
c3BhcmU7DQorCQkJbWRwX3N1cGVyX3QgKnNiID0gbWRkZXYtPnNiOw0KKw0K
Ky8vCQkJTURfQlVHKCk7DQorCQkJc3BhcmUgPSBnZXRfc3BhcmUobWRkZXYp
Ow0KKwkJCWlmIChzcGFyZSkgew0KKwkJCQllcnIgPSBtdWx0aXBhdGhfZGlz
a29wKG1kZGV2LCAmc3BhcmUsIERJU0tPUF9TUEFSRV9XUklURSk7DQorCQkJ
CXByaW50aygiZ290IERJU0tPUF9TUEFSRV9XUklURSBlcnI6ICVkLiAoc3Bh
cmVfZmF1bHR5KCk6ICVkKVxuIiwgZXJyLCBkaXNrX2ZhdWx0eShzcGFyZSkp
Ow0KKy8vCQkJCU1EX0JVRygpOw0KKwkJCX0NCisJCQlpZiAoIWVyciAmJiAh
ZGlza19mYXVsdHkoc3BhcmUpKSB7DQorCQkJCW11bHRpcGF0aF9kaXNrb3Ao
bWRkZXYsICZzcGFyZSwgRElTS09QX1NQQVJFX0FDVElWRSk7DQorCQkJCW1h
cmtfZGlza19zeW5jKHNwYXJlKTsNCisJCQkJbWFya19kaXNrX2FjdGl2ZShz
cGFyZSk7DQorCQkJCXNiLT5hY3RpdmVfZGlza3MrKzsNCisJCQkJc2ItPnNw
YXJlX2Rpc2tzLS07DQorLy8JCQkJTURfQlVHKCk7DQorCQkJfQ0KKwkJfQ0K
Kwl9DQorCXJldHVybiAwOw0KK30NCisNCisjdW5kZWYgTEFTVF9ESVNLDQor
I3VuZGVmIE5PX1NQQVJFX0RJU0sNCisjdW5kZWYgRElTS19GQUlMRUQNCisN
CisNCitzdGF0aWMgdm9pZCBwcmludF9tdWx0aXBhdGhfY29uZiAobXVsdGlw
YXRoX2NvbmZfdCAqY29uZikNCit7DQorCWludCBpOw0KKwlzdHJ1Y3QgbXVs
dGlwYXRoX2luZm8gKnRtcDsNCisNCisJcHJpbnRrKCJNVUxUSVBBVEggY29u
ZiBwcmludG91dDpcbiIpOw0KKwlpZiAoIWNvbmYpIHsNCisJCXByaW50aygi
KGNvbmY9PU5VTEwpXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKwlwcmludGso
IiAtLS0gd2Q6JWQgcmQ6JWQgbmQ6JWRcbiIsIGNvbmYtPndvcmtpbmdfZGlz
a3MsDQorCQkJIGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPm5yX2Rpc2tzKTsN
CisNCisJZm9yIChpID0gMDsgaSA8IE1EX1NCX0RJU0tTOyBpKyspIHsNCisJ
CXRtcCA9IGNvbmYtPm11bHRpcGF0aHMgKyBpOw0KKwkJaWYgKHRtcC0+c3Bh
cmUgfHwgdG1wLT5vcGVyYXRpb25hbCB8fCB0bXAtPm51bWJlciB8fA0KKwkJ
CQl0bXAtPnJhaWRfZGlzayB8fCB0bXAtPnVzZWRfc2xvdCkNCisJCQlwcmlu
dGsoIiBkaXNrJWQsIHM6JWQsIG86JWQsIG46JWQgcmQ6JWQgdXM6JWQgZGV2
OiVzXG4iLA0KKwkJCQlpLCB0bXAtPnNwYXJlLHRtcC0+b3BlcmF0aW9uYWws
DQorCQkJCXRtcC0+bnVtYmVyLHRtcC0+cmFpZF9kaXNrLHRtcC0+dXNlZF9z
bG90LA0KKwkJCQlwYXJ0aXRpb25fbmFtZSh0bXAtPmRldikpOw0KKwl9DQor
fQ0KKw0KK3N0YXRpYyBpbnQgbXVsdGlwYXRoX2Rpc2tvcChtZGRldl90ICpt
ZGRldiwgbWRwX2Rpc2tfdCAqKmQsIGludCBzdGF0ZSkNCit7DQorCWludCBl
cnIgPSAwOw0KKwlpbnQgaSwgZmFpbGVkX2Rpc2s9LTEsIHNwYXJlX2Rpc2s9
LTEsIHJlbW92ZWRfZGlzaz0tMSwgYWRkZWRfZGlzaz0tMTsNCisJbXVsdGlw
YXRoX2NvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOw0KKwlzdHJ1Y3Qg
bXVsdGlwYXRoX2luZm8gKnRtcCwgKnNkaXNrLCAqZmRpc2ssICpyZGlzaywg
KmFkaXNrOw0KKwltZHBfc3VwZXJfdCAqc2IgPSBtZGRldi0+c2I7DQorCW1k
cF9kaXNrX3QgKmZhaWxlZF9kZXNjLCAqc3BhcmVfZGVzYywgKmFkZGVkX2Rl
c2M7DQorCW1ka19yZGV2X3QgKnNwYXJlX3JkZXYsICpmYWlsZWRfcmRldjsN
CisNCisJcHJpbnRfbXVsdGlwYXRoX2NvbmYoY29uZik7DQorCW1kX3NwaW5f
bG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsNCisJLyoNCisJICogZmlu
ZCB0aGUgZGlzayAuLi4NCisJICovDQorCXN3aXRjaCAoc3RhdGUpIHsNCisN
CisJY2FzZSBESVNLT1BfU1BBUkVfQUNUSVZFOg0KKw0KKwkJLyoNCisJCSAq
IEZpbmQgdGhlIGZhaWxlZCBkaXNrIHdpdGhpbiB0aGUgTVVMVElQQVRIIGNv
bmZpZ3VyYXRpb24gLi4uDQorCQkgKiAodGhpcyBjYW4gb25seSBiZSBpbiB0
aGUgZmlyc3QgY29uZi0+d29ya2luZ19kaXNrcyBwYXJ0KQ0KKwkJICovDQor
CQlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7DQor
CQkJdG1wID0gY29uZi0+bXVsdGlwYXRocyArIGk7DQorCQkJaWYgKCghdG1w
LT5vcGVyYXRpb25hbCAmJiAhdG1wLT5zcGFyZSkgfHwNCisJCQkJCSF0bXAt
PnVzZWRfc2xvdCkgew0KKwkJCQlmYWlsZWRfZGlzayA9IGk7DQorCQkJCWJy
ZWFrOw0KKwkJCX0NCisJCX0NCisJCS8qDQorCQkgKiBXaGVuIHdlIGFjdGl2
YXRlIGEgc3BhcmUgZGlzayB3ZSBfbXVzdF8gaGF2ZSBhIGRpc2sgaW4NCisJ
CSAqIHRoZSBsb3dlciAoYWN0aXZlKSBwYXJ0IG9mIHRoZSBhcnJheSB0byBy
ZXBsYWNlLiANCisJCSAqLw0KKwkJaWYgKChmYWlsZWRfZGlzayA9PSAtMSkg
fHwgKGZhaWxlZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MpKSB7DQorCQkJ
TURfQlVHKCk7DQorCQkJZXJyID0gMTsNCisJCQlnb3RvIGFib3J0Ow0KKwkJ
fQ0KKwkJLyogZmFsbCB0aHJvdWdoICovDQorDQorCWNhc2UgRElTS09QX1NQ
QVJFX1dSSVRFOg0KKwljYXNlIERJU0tPUF9TUEFSRV9JTkFDVElWRToNCisN
CisJCS8qDQorCQkgKiBGaW5kIHRoZSBzcGFyZSBkaXNrIC4uLiAoY2FuIG9u
bHkgYmUgaW4gdGhlICdoaWdoJw0KKwkJICogYXJlYSBvZiB0aGUgYXJyYXkp
DQorCQkgKi8NCisJCWZvciAoaSA9IGNvbmYtPnJhaWRfZGlza3M7IGkgPCBN
RF9TQl9ESVNLUzsgaSsrKSB7DQorCQkJdG1wID0gY29uZi0+bXVsdGlwYXRo
cyArIGk7DQorCQkJaWYgKHRtcC0+c3BhcmUgJiYgdG1wLT5udW1iZXIgPT0g
KCpkKS0+bnVtYmVyKSB7DQorCQkJCXNwYXJlX2Rpc2sgPSBpOw0KKwkJCQli
cmVhazsNCisJCQl9DQorCQl9DQorCQlpZiAoc3BhcmVfZGlzayA9PSAtMSkg
ew0KKwkJCU1EX0JVRygpOw0KKwkJCWVyciA9IDE7DQorCQkJZ290byBhYm9y
dDsNCisJCX0NCisJCWJyZWFrOw0KKw0KKwljYXNlIERJU0tPUF9IT1RfUkVN
T1ZFX0RJU0s6DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgTURfU0JfRElTS1M7
IGkrKykgew0KKwkJCXRtcCA9IGNvbmYtPm11bHRpcGF0aHMgKyBpOw0KKwkJ
CWlmICh0bXAtPnVzZWRfc2xvdCAmJiAodG1wLT5udW1iZXIgPT0gKCpkKS0+
bnVtYmVyKSkgew0KKwkJCQlpZiAodG1wLT5vcGVyYXRpb25hbCkgew0KKwkJ
CQkJcHJpbnRrKEtFUk5fRVJSICJob3QtcmVtb3ZlLWRpc2ssIHNsb3QgJWQg
aXMgaWRlbnRpZmllZCB0byBiZSB0aGUgcmVxdWVzdGVkIGRpc2sgKG51bWJl
ciAlZCksIGJ1dCBpcyBzdGlsbCBvcGVyYXRpb25hbCFcbiIsIGksICgqZCkt
Pm51bWJlcik7DQorCQkJCQllcnIgPSAtRUJVU1k7DQorCQkJCQlnb3RvIGFi
b3J0Ow0KKwkJCQl9DQorCQkJCXJlbW92ZWRfZGlzayA9IGk7DQorCQkJCWJy
ZWFrOw0KKwkJCX0NCisJCX0NCisJCWlmIChyZW1vdmVkX2Rpc2sgPT0gLTEp
IHsNCisJCQlNRF9CVUcoKTsNCisJCQllcnIgPSAxOw0KKwkJCWdvdG8gYWJv
cnQ7DQorCQl9DQorCQlicmVhazsNCisNCisJY2FzZSBESVNLT1BfSE9UX0FE
RF9ESVNLOg0KKw0KKwkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrczsgaSA8
IE1EX1NCX0RJU0tTOyBpKyspIHsNCisJCQl0bXAgPSBjb25mLT5tdWx0aXBh
dGhzICsgaTsNCisJCQlpZiAoIXRtcC0+dXNlZF9zbG90KSB7DQorCQkJCWFk
ZGVkX2Rpc2sgPSBpOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCQlp
ZiAoYWRkZWRfZGlzayA9PSAtMSkgew0KKwkJCU1EX0JVRygpOw0KKwkJCWVy
ciA9IDE7DQorCQkJZ290byBhYm9ydDsNCisJCX0NCisJCWJyZWFrOw0KKwl9
DQorDQorCXN3aXRjaCAoc3RhdGUpIHsNCisJLyoNCisJICogU3dpdGNoIHRo
ZSBzcGFyZSBkaXNrIHRvIHdyaXRlLW9ubHkgbW9kZToNCisJICovDQorCWNh
c2UgRElTS09QX1NQQVJFX1dSSVRFOg0KKwkJc2Rpc2sgPSBjb25mLT5tdWx0
aXBhdGhzICsgc3BhcmVfZGlzazsNCisJCXNkaXNrLT5vcGVyYXRpb25hbCA9
IDE7DQorCQlzZGlzay0+d3JpdGVfb25seSA9IDE7DQorCQlicmVhazsNCisJ
LyoNCisJICogRGVhY3RpdmF0ZSBhIHNwYXJlIGRpc2s6DQorCSAqLw0KKwlj
YXNlIERJU0tPUF9TUEFSRV9JTkFDVElWRToNCisJCXNkaXNrID0gY29uZi0+
bXVsdGlwYXRocyArIHNwYXJlX2Rpc2s7DQorCQlzZGlzay0+b3BlcmF0aW9u
YWwgPSAwOw0KKwkJc2Rpc2stPndyaXRlX29ubHkgPSAwOw0KKwkJYnJlYWs7
DQorCS8qDQorCSAqIEFjdGl2YXRlIChtYXJrIHJlYWQtd3JpdGUpIHRoZSAo
bm93IHN5bmMpIHNwYXJlIGRpc2ssDQorCSAqIHdoaWNoIG1lYW5zIHdlIHN3
aXRjaCBpdCdzICdyYWlkIHBvc2l0aW9uJyAoLT5yYWlkX2Rpc2spDQorCSAq
IHdpdGggdGhlIGZhaWxlZCBkaXNrLiAob25seSB0aGUgZmlyc3QgJ2NvbmYt
Pm5yX2Rpc2tzJw0KKwkgKiBzbG90cyBhcmUgdXNlZCBmb3IgJ3JlYWwnIGRp
c2tzIGFuZCB3ZSBtdXN0IHByZXNlcnZlIHRoaXMNCisJICogcHJvcGVydHkp
DQorCSAqLw0KKwljYXNlIERJU0tPUF9TUEFSRV9BQ1RJVkU6DQorCQlzZGlz
ayA9IGNvbmYtPm11bHRpcGF0aHMgKyBzcGFyZV9kaXNrOw0KKwkJZmRpc2sg
PSBjb25mLT5tdWx0aXBhdGhzICsgZmFpbGVkX2Rpc2s7DQorDQorCQlzcGFy
ZV9kZXNjID0gJnNiLT5kaXNrc1tzZGlzay0+bnVtYmVyXTsNCisJCWZhaWxl
ZF9kZXNjID0gJnNiLT5kaXNrc1tmZGlzay0+bnVtYmVyXTsNCisNCisJCWlm
IChzcGFyZV9kZXNjICE9ICpkKSB7DQorCQkJTURfQlVHKCk7DQorCQkJZXJy
ID0gMTsNCisJCQlnb3RvIGFib3J0Ow0KKwkJfQ0KKw0KKwkJaWYgKHNwYXJl
X2Rlc2MtPnJhaWRfZGlzayAhPSBzZGlzay0+cmFpZF9kaXNrKSB7DQorCQkJ
TURfQlVHKCk7DQorCQkJZXJyID0gMTsNCisJCQlnb3RvIGFib3J0Ow0KKwkJ
fQ0KKwkJCQ0KKwkJaWYgKHNkaXNrLT5yYWlkX2Rpc2sgIT0gc3BhcmVfZGlz
aykgew0KKwkJCU1EX0JVRygpOw0KKwkJCWVyciA9IDE7DQorCQkJZ290byBh
Ym9ydDsNCisJCX0NCisNCisJCWlmIChmYWlsZWRfZGVzYy0+cmFpZF9kaXNr
ICE9IGZkaXNrLT5yYWlkX2Rpc2spIHsNCisJCQlNRF9CVUcoKTsNCisJCQll
cnIgPSAxOw0KKwkJCWdvdG8gYWJvcnQ7DQorCQl9DQorDQorCQlpZiAoZmRp
c2stPnJhaWRfZGlzayAhPSBmYWlsZWRfZGlzaykgew0KKwkJCU1EX0JVRygp
Ow0KKwkJCWVyciA9IDE7DQorCQkJZ290byBhYm9ydDsNCisJCX0NCisNCisJ
CS8qDQorCQkgKiBkbyB0aGUgc3dpdGNoIGZpbmFsbHkNCisJCSAqLw0KKwkJ
c3BhcmVfcmRldiA9IGZpbmRfcmRldl9ucihtZGRldiwgc3BhcmVfZGVzYy0+
bnVtYmVyKTsNCisJCWZhaWxlZF9yZGV2ID0gZmluZF9yZGV2X25yKG1kZGV2
LCBmYWlsZWRfZGVzYy0+bnVtYmVyKTsNCisJCXhjaGdfdmFsdWVzKHNwYXJl
X3JkZXYtPmRlc2NfbnIsIGZhaWxlZF9yZGV2LT5kZXNjX25yKTsNCisvLwkJ
aWYgKGZhaWxlZF9yZGV2LT5hbGlhc19kZXZpY2UpDQorLy8JCQlNRF9CVUco
KTsNCisvLwkJaWYgKCFzcGFyZV9yZGV2LT5hbGlhc19kZXZpY2UpDQorLy8J
CQlNRF9CVUcoKTsNCisJCXNwYXJlX3JkZXYtPmFsaWFzX2RldmljZSA9IDA7
DQorCQlmYWlsZWRfcmRldi0+YWxpYXNfZGV2aWNlID0gMTsNCisNCisJCXhj
aGdfdmFsdWVzKCpzcGFyZV9kZXNjLCAqZmFpbGVkX2Rlc2MpOw0KKwkJeGNo
Z192YWx1ZXMoKmZkaXNrLCAqc2Rpc2spOw0KKw0KKwkJLyoNCisJCSAqIChj
YXJlZnVsLCAnZmFpbGVkJyBhbmQgJ3NwYXJlJyBhcmUgc3dpdGNoZWQgZnJv
bSBub3cgb24pDQorCQkgKg0KKwkJICogd2Ugd2FudCB0byBwcmVzZXJ2ZSBs
aW5lYXIgbnVtYmVyaW5nIGFuZCB3ZSB3YW50IHRvDQorCQkgKiBnaXZlIHRo
ZSBwcm9wZXIgcmFpZF9kaXNrIG51bWJlciB0byB0aGUgbm93IGFjdGl2YXRl
ZA0KKwkJICogZGlzay4gKHRoaXMgbWVhbnMgd2Ugc3dpdGNoIGJhY2sgdGhl
c2UgdmFsdWVzKQ0KKwkJICovDQorCQ0KKwkJeGNoZ192YWx1ZXMoc3BhcmVf
ZGVzYy0+cmFpZF9kaXNrLCBmYWlsZWRfZGVzYy0+cmFpZF9kaXNrKTsNCisJ
CXhjaGdfdmFsdWVzKHNkaXNrLT5yYWlkX2Rpc2ssIGZkaXNrLT5yYWlkX2Rp
c2spOw0KKwkJeGNoZ192YWx1ZXMoc3BhcmVfZGVzYy0+bnVtYmVyLCBmYWls
ZWRfZGVzYy0+bnVtYmVyKTsNCisJCXhjaGdfdmFsdWVzKHNkaXNrLT5udW1i
ZXIsIGZkaXNrLT5udW1iZXIpOw0KKw0KKwkJKmQgPSBmYWlsZWRfZGVzYzsN
CisNCisJCWlmIChzZGlzay0+ZGV2ID09IE1LREVWKDAsMCkpDQorCQkJc2Rp
c2stPnVzZWRfc2xvdCA9IDA7DQorCQkvKg0KKwkJICogdGhpcyByZWFsbHkg
YWN0aXZhdGVzIHRoZSBzcGFyZS4NCisJCSAqLw0KKwkJZmRpc2stPnNwYXJl
ID0gMDsNCisJCWZkaXNrLT53cml0ZV9vbmx5ID0gMDsNCisNCisJCS8qDQor
CQkgKiBpZiB3ZSBhY3RpdmF0ZSBhIHNwYXJlLCB3ZSBkZWZpbml0ZWx5IHJl
cGxhY2UgYQ0KKwkJICogbm9uLW9wZXJhdGlvbmFsIGRpc2sgc2xvdCBpbiB0
aGUgJ2xvdycgYXJlYSBvZg0KKwkJICogdGhlIGRpc2sgYXJyYXkuDQorCQkg
Ki8NCisNCisJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsNCisNCisJCWJyZWFr
Ow0KKw0KKwljYXNlIERJU0tPUF9IT1RfUkVNT1ZFX0RJU0s6DQorCQlyZGlz
ayA9IGNvbmYtPm11bHRpcGF0aHMgKyByZW1vdmVkX2Rpc2s7DQorDQorCQlp
ZiAocmRpc2stPnNwYXJlICYmIChyZW1vdmVkX2Rpc2sgPCBjb25mLT5yYWlk
X2Rpc2tzKSkgew0KKwkJCU1EX0JVRygpOwkNCisJCQllcnIgPSAxOw0KKwkJ
CWdvdG8gYWJvcnQ7DQorCQl9DQorCQlyZGlzay0+ZGV2ID0gTUtERVYoMCww
KTsNCisJCXJkaXNrLT51c2VkX3Nsb3QgPSAwOw0KKwkJY29uZi0+bnJfZGlz
a3MtLTsNCisJCWJyZWFrOw0KKw0KKwljYXNlIERJU0tPUF9IT1RfQUREX0RJ
U0s6DQorCQlhZGlzayA9IGNvbmYtPm11bHRpcGF0aHMgKyBhZGRlZF9kaXNr
Ow0KKwkJYWRkZWRfZGVzYyA9ICpkOw0KKw0KKwkJaWYgKGFkZGVkX2Rpc2sg
IT0gYWRkZWRfZGVzYy0+bnVtYmVyKSB7DQorCQkJTURfQlVHKCk7CQ0KKwkJ
CWVyciA9IDE7DQorCQkJZ290byBhYm9ydDsNCisJCX0NCisNCisJCWFkaXNr
LT5udW1iZXIgPSBhZGRlZF9kZXNjLT5udW1iZXI7DQorCQlhZGlzay0+cmFp
ZF9kaXNrID0gYWRkZWRfZGVzYy0+cmFpZF9kaXNrOw0KKwkJYWRpc2stPmRl
diA9IE1LREVWKGFkZGVkX2Rlc2MtPm1ham9yLGFkZGVkX2Rlc2MtPm1pbm9y
KTsNCisNCisJCWFkaXNrLT5vcGVyYXRpb25hbCA9IDA7DQorCQlhZGlzay0+
d3JpdGVfb25seSA9IDA7DQorCQlhZGlzay0+c3BhcmUgPSAxOw0KKwkJYWRp
c2stPnVzZWRfc2xvdCA9IDE7DQorCQlhZGlzay0+aGVhZF9wb3NpdGlvbiA9
IDA7DQorCQljb25mLT5ucl9kaXNrcysrOw0KKw0KKwkJYnJlYWs7DQorDQor
CWRlZmF1bHQ6DQorCQlNRF9CVUcoKTsJDQorCQllcnIgPSAxOw0KKwkJZ290
byBhYm9ydDsNCisJfQ0KK2Fib3J0Og0KKwltZF9zcGluX3VubG9ja19pcnEo
JmNvbmYtPmRldmljZV9sb2NrKTsNCisNCisJcHJpbnRfbXVsdGlwYXRoX2Nv
bmYoY29uZik7DQorCXJldHVybiBlcnI7DQorfQ0KKw0KKw0KKyNkZWZpbmUg
SU9fRVJST1IgS0VSTl9BTEVSVCBcDQorIm11bHRpcGF0aDogJXM6IHVucmVj
b3ZlcmFibGUgSU8gcmVhZCBlcnJvciBmb3IgYmxvY2sgJWx1XG4iDQorDQor
I2RlZmluZSBSRURJUkVDVF9TRUNUT1IgS0VSTl9FUlIgXA0KKyJtdWx0aXBh
dGg6ICVzOiByZWRpcmVjdGluZyBzZWN0b3IgJWx1IHRvIGFub3RoZXIgSU8g
cGF0aFxuIg0KKw0KKy8qDQorICogVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQg
d2hpY2g6DQorICoNCisgKgkxLglSZXRyaWVzIGZhaWxlZCByZWFkIG9wZXJh
dGlvbnMgb24gd29ya2luZyBtdWx0aXBhdGhzLg0KKyAqCTIuCVVwZGF0ZXMg
dGhlIHJhaWQgc3VwZXJibG9jayB3aGVuIHByb2JsZW1zIGVuY291bnRlci4N
CisgKgkzLglQZXJmb3JtcyB3cml0ZXMgZm9sbG93aW5nIHJlYWRzIGZvciBh
cnJheSBzeW5jcm9uaXNpbmcuDQorICovDQorDQorc3RhdGljIHZvaWQgbXVs
dGlwYXRoZCAodm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBtdWx0aXBhdGhf
YmggKnIxX2JoOw0KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOw0KKwl1bnNp
Z25lZCBsb25nIGZsYWdzOw0KKwltZGRldl90ICptZGRldjsNCisJa2Rldl90
IGRldjsNCisNCisNCisJZm9yICg7Oykgew0KKwkJbWRfc3Bpbl9sb2NrX2ly
cXNhdmUoJnJldHJ5X2xpc3RfbG9jaywgZmxhZ3MpOw0KKwkJcjFfYmggPSBt
dWx0aXBhdGhfcmV0cnlfbGlzdDsNCisJCWlmICghcjFfYmgpDQorCQkJYnJl
YWs7DQorCQltdWx0aXBhdGhfcmV0cnlfbGlzdCA9IHIxX2JoLT5uZXh0X3Ix
Ow0KKwkJbWRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmV0cnlfbGlzdF9s
b2NrLCBmbGFncyk7DQorDQorCQltZGRldiA9IHIxX2JoLT5tZGRldjsNCisJ
CWlmIChtZGRldi0+c2JfZGlydHkpIHsNCisJCQlwcmludGsoS0VSTl9JTkZP
ICJkaXJ0eSBzYiBkZXRlY3RlZCwgdXBkYXRpbmcuXG4iKTsNCisJCQltZGRl
di0+c2JfZGlydHkgPSAwOw0KKwkJCW1kX3VwZGF0ZV9zYihtZGRldik7DQor
CQl9DQorCQliaCA9ICZyMV9iaC0+YmhfcmVxOw0KKwkJZGV2ID0gYmgtPmJf
ZGV2Ow0KKwkJDQorCQltdWx0aXBhdGhfbWFwIChtZGRldiwgJmJoLT5iX2Rl
dik7DQorCQlpZiAoYmgtPmJfZGV2ID09IGRldikgew0KKwkJCXByaW50ayAo
SU9fRVJST1IsIHBhcnRpdGlvbl9uYW1lKGJoLT5iX2RldiksIGJoLT5iX2Js
b2NrbnIpOw0KKwkJCW11bHRpcGF0aF9lbmRfYmhfaW8ocjFfYmgsIDApOw0K
KwkJfSBlbHNlIHsNCisJCQlwcmludGsgKFJFRElSRUNUX1NFQ1RPUiwNCisJ
CQkJcGFydGl0aW9uX25hbWUoYmgtPmJfZGV2KSwgYmgtPmJfYmxvY2tucik7
DQorCQkJYmgtPmJfcmRldiA9IGJoLT5iX2RldjsNCisJCQliaC0+Yl9yc2Vj
dG9yID0gYmgtPmJfYmxvY2tucjsNCisJCQlnZW5lcmljX21ha2VfcmVxdWVz
dCAocjFfYmgtPmNtZCwgYmgpOw0KKwkJfQ0KKwl9DQorCW1kX3NwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJnJldHJ5X2xpc3RfbG9jaywgZmxhZ3MpOw0KK30N
CisjdW5kZWYgSU9fRVJST1INCisjdW5kZWYgUkVESVJFQ1RfU0VDVE9SDQor
DQorLyoNCisgKiBUaGlzIHdpbGwgY2F0Y2ggdGhlIHNjZW5hcmlvIGluIHdo
aWNoIG9uZSBvZiB0aGUgbXVsdGlwYXRocyB3YXMNCisgKiBtb3VudGVkIGFz
IGEgbm9ybWFsIGRldmljZSByYXRoZXIgdGhhbiBhcyBhIHBhcnQgb2YgYSBy
YWlkIHNldC4NCisgKg0KKyAqIGNoZWNrX2NvbnNpc3RlbmN5IGlzIHZlcnkg
cGVyc29uYWxpdHktZGVwZW5kZW50LCBlZy4gUkFJRDUgY2Fubm90DQorICog
ZG8gdGhpcyBjaGVjaywgaXQgdXNlcyBhbm90aGVyIG1ldGhvZC4NCisgKi8N
CitzdGF0aWMgaW50IF9fY2hlY2tfY29uc2lzdGVuY3kgKG1kZGV2X3QgKm1k
ZGV2LCBpbnQgcm93KQ0KK3sNCisJbXVsdGlwYXRoX2NvbmZfdCAqY29uZiA9
IG1kZGV2X3RvX2NvbmYobWRkZXYpOw0KKwlpbnQgZGlza3MgPSBNRF9TQl9E
SVNLUzsNCisJa2Rldl90IGRldjsNCisJc3RydWN0IGJ1ZmZlcl9oZWFkICpi
aCA9IE5VTEw7DQorCWludCBpLCByYyA9IDA7DQorCWNoYXIgKmJ1ZmZlciA9
IE5VTEw7DQorDQorCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7DQor
CQlpZiAoIWNvbmYtPm11bHRpcGF0aHNbaV0ub3BlcmF0aW9uYWwpDQorCQkJ
Y29udGludWU7DQorCQlwcmludGsoIihjaGVja2luZyBkaXNrICVkKVxuIixp
KTsNCisJCWRldiA9IGNvbmYtPm11bHRpcGF0aHNbaV0uZGV2Ow0KKwkJc2V0
X2Jsb2Nrc2l6ZShkZXYsIDQwOTYpOw0KKwkJaWYgKChiaCA9IGJyZWFkKGRl
diwgcm93IC8gNCwgNDA5NikpID09IE5VTEwpDQorCQkJYnJlYWs7DQorCQlp
ZiAoIWJ1ZmZlcikgew0KKwkJCWJ1ZmZlciA9IChjaGFyICopIF9fZ2V0X2Zy
ZWVfcGFnZShHRlBfS0VSTkVMKTsNCisJCQlpZiAoIWJ1ZmZlcikNCisJCQkJ
YnJlYWs7DQorCQkJbWVtY3B5KGJ1ZmZlciwgYmgtPmJfZGF0YSwgNDA5Nik7
DQorCQl9IGVsc2UgaWYgKG1lbWNtcChidWZmZXIsIGJoLT5iX2RhdGEsIDQw
OTYpKSB7DQorCQkJcmMgPSAxOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJYmZv
cmdldChiaCk7DQorCQlmc3luY19kZXYoZGV2KTsNCisJCWludmFsaWRhdGVf
YnVmZmVycyhkZXYpOw0KKwkJYmggPSBOVUxMOw0KKwl9DQorCWlmIChidWZm
ZXIpDQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcik7DQor
CWlmIChiaCkgew0KKwkJZGV2ID0gYmgtPmJfZGV2Ow0KKwkJYmZvcmdldChi
aCk7DQorCQlmc3luY19kZXYoZGV2KTsNCisJCWludmFsaWRhdGVfYnVmZmVy
cyhkZXYpOw0KKwl9DQorCXJldHVybiByYzsNCit9DQorDQorc3RhdGljIGlu
dCBjaGVja19jb25zaXN0ZW5jeSAobWRkZXZfdCAqbWRkZXYpDQorew0KKwlp
ZiAoX19jaGVja19jb25zaXN0ZW5jeShtZGRldiwgMCkpDQorLyoNCisgKiB3
ZSBkbyBub3QgZG8gdGhpcyBjdXJyZW50bHksIGFzIGl0J3MgcGVyZmVjdGx5
IHBvc3NpYmxlIHRvDQorICogaGF2ZSBhbiBpbmNvbnNpc3RlbnQgYXJyYXkg
d2hlbiBpdCdzIGZyZXNobHkgY3JlYXRlZC4gT25seQ0KKyAqIG5ld2x5IHdy
aXR0ZW4gZGF0YSBoYXMgdG8gYmUgY29uc2lzdGVudC4NCisgKi8NCisJCXJl
dHVybiAwOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorI2RlZmluZSBJTlZB
TElEX0xFVkVMIEtFUk5fV0FSTklORyBcDQorIm11bHRpcGF0aDogbWQlZDog
cmFpZCBsZXZlbCBub3Qgc2V0IHRvIG11bHRpcGF0aCBJTyAoJWQpXG4iDQor
DQorI2RlZmluZSBOT19TQiBLRVJOX0VSUiBcDQorIm11bHRpcGF0aDogZGlz
YWJsZWQgSU8gcGF0aCAlcyAoY291bGRuJ3QgYWNjZXNzIHJhaWQgc3VwZXJi
bG9jaylcbiINCisNCisjZGVmaW5lIEVSUk9SUyBLRVJOX0VSUiBcDQorIm11
bHRpcGF0aDogZGlzYWJsZWQgSU8gcGF0aCAlcyAoZXJyb3JzIGRldGVjdGVk
KVxuIg0KKw0KKyNkZWZpbmUgTk9UX0lOX1NZTkMgS0VSTl9FUlIgXA0KKyJt
dWx0aXBhdGg6IG1ha2luZyBJTyBwYXRoICVzIGEgc3BhcmUgcGF0aCAobm90
IGluIHN5bmMpXG4iDQorDQorI2RlZmluZSBJTkNPTlNJU1RFTlQgS0VSTl9F
UlIgXA0KKyJtdWx0aXBhdGg6IGRpc2FibGVkIElPIHBhdGggJXMgKGluY29u
c2lzdGVudCBkZXNjcmlwdG9yKVxuIg0KKw0KKyNkZWZpbmUgQUxSRUFEWV9S
VU5OSU5HIEtFUk5fRVJSIFwNCisibXVsdGlwYXRoOiBkaXNhYmxlZCBJTyBw
YXRoICVzIChtdWx0aXBhdGggJWQgYWxyZWFkeSBvcGVyYXRpb25hbClcbiIN
CisNCisjZGVmaW5lIE9QRVJBVElPTkFMIEtFUk5fSU5GTyBcDQorIm11bHRp
cGF0aDogZGV2aWNlICVzIG9wZXJhdGlvbmFsIGFzIElPIHBhdGggJWRcbiIN
CisNCisjZGVmaW5lIE1FTV9FUlJPUiBLRVJOX0VSUiBcDQorIm11bHRpcGF0
aDogY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBtZCVkXG4iDQorDQor
I2RlZmluZSBTUEFSRSBLRVJOX0lORk8gXA0KKyJtdWx0aXBhdGg6IHNwYXJl
IElPIHBhdGggJXNcbiINCisNCisjZGVmaW5lIE5PTkVfT1BFUkFUSU9OQUwg
S0VSTl9FUlIgXA0KKyJtdWx0aXBhdGg6IG5vIG9wZXJhdGlvbmFsIElPIHBh
dGhzIGZvciBtZCVkXG4iDQorDQorI2RlZmluZSBTQl9ESUZGRVJFTkNFUyBL
RVJOX0VSUiBcDQorIm11bHRpcGF0aDogZGV0ZWN0ZWQgSU8gcGF0aCBkaWZm
ZXJlbmNlcyFcbiINCisNCisjZGVmaW5lIEFSUkFZX0lTX0FDVElWRSBLRVJO
X0lORk8gXA0KKyJtdWx0aXBhdGg6IGFycmF5IG1kJWQgYWN0aXZlIHdpdGgg
JWQgb3V0IG9mICVkIElPIHBhdGhzICglZCBzcGFyZSBJTyBwYXRocylcbiIN
CisNCisjZGVmaW5lIFRIUkVBRF9FUlJPUiBLRVJOX0VSUiBcDQorIm11bHRp
cGF0aDogY291bGRuJ3QgYWxsb2NhdGUgdGhyZWFkIGZvciBtZCVkXG4iDQor
DQorc3RhdGljIGludCBtdWx0aXBhdGhfcnVuIChtZGRldl90ICptZGRldikN
Cit7DQorCW11bHRpcGF0aF9jb25mX3QgKmNvbmY7DQorCWludCBpLCBqLCBk
aXNrX2lkeDsNCisJc3RydWN0IG11bHRpcGF0aF9pbmZvICpkaXNrLCAqZGlz
azI7DQorCW1kcF9zdXBlcl90ICpzYiA9IG1kZGV2LT5zYjsNCisJbWRwX2Rp
c2tfdCAqZGVzYywgKmRlc2MyOw0KKwltZGtfcmRldl90ICpyZGV2LCAqZGVm
X3JkZXYgPSBOVUxMOw0KKwlzdHJ1Y3QgbWRfbGlzdF9oZWFkICp0bXA7DQor
CWludCBzdGFydF9yZWNvdmVyeSA9IDAsIG51bV9yZGV2cyA9IDA7DQorDQor
CU1PRF9JTkNfVVNFX0NPVU5UOw0KKw0KKwlpZiAoc2ItPmxldmVsICE9IC00
KSB7DQorCQlwcmludGsoSU5WQUxJRF9MRVZFTCwgbWRpZHgobWRkZXYpLCBz
Yi0+bGV2ZWwpOw0KKwkJZ290byBvdXQ7DQorCX0NCisJLyoNCisJICogY29w
eSB0aGUgYWxyZWFkeSB2ZXJpZmllZCBkZXZpY2VzIGludG8gb3VyIHByaXZh
dGUgTVVMVElQQVRIDQorCSAqIGJvb2trZWVwaW5nIGFyZWEuIFt3aGF0ZXZl
ciB3ZSBhbGxvY2F0ZSBpbiBtdWx0aXBhdGhfcnVuKCksDQorCSAqIHNob3Vs
ZCBiZSBmcmVlZCBpbiBtdWx0aXBhdGhfc3RvcCgpXQ0KKwkgKi8NCisNCisJ
Y29uZiA9IGttYWxsb2Moc2l6ZW9mKG11bHRpcGF0aF9jb25mX3QpLCBHRlBf
S0VSTkVMKTsNCisJbWRkZXYtPnByaXZhdGUgPSBjb25mOw0KKwlpZiAoIWNv
bmYpIHsNCisJCXByaW50ayhNRU1fRVJST1IsIG1kaWR4KG1kZGV2KSk7DQor
CQlnb3RvIG91dDsNCisJfQ0KKwltZW1zZXQoY29uZiwgMCwgc2l6ZW9mKCpj
b25mKSk7DQorDQorCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgew0K
KwkJaWYgKHJkZXYtPmZhdWx0eSkgew0KKwkJCS8qIHRoaXMgaXMgYSAic2hv
dWxkIG5ldmVyIGhhcHBlbiIgY2FzZSBhbmQgaWYgaXQgKi8NCisJCQkvKiBl
dmVyIGRvZXMgaGFwcGVuLCBhIGNvbnRpbnVlOyB3b24ndCBoZWxwICovDQor
CQkJcHJpbnRrKEVSUk9SUywgcGFydGl0aW9uX25hbWUocmRldi0+ZGV2KSk7
DQorCQkJY29udGludWU7DQorCQl9IGVsc2Ugew0KKwkJCS8qIHRoaXMgaXMg
YSAic2hvdWxkIG5ldmVyIGhhcHBlbiIgY2FzZSBhbmQgaWYgaXQgKi8NCisJ
CQkvKiBldmVyIGRvZXMgaGFwcGVuLCBhIGNvbnRpbnVlOyB3b24ndCBoZWxw
ICovDQorCQkJaWYgKCFyZGV2LT5zYikgew0KKwkJCQlNRF9CVUcoKTsNCisJ
CQkJY29udGludWU7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKHJkZXYtPmRlc2Nf
bnIgPT0gLTEpIHsNCisJCQlNRF9CVUcoKTsNCisJCQljb250aW51ZTsNCisJ
CX0NCisNCisJCWRlc2MgPSAmc2ItPmRpc2tzW3JkZXYtPmRlc2NfbnJdOw0K
KwkJZGlza19pZHggPSBkZXNjLT5yYWlkX2Rpc2s7DQorCQlkaXNrID0gY29u
Zi0+bXVsdGlwYXRocyArIGRpc2tfaWR4Ow0KKw0KKwkJaWYgKCFkaXNrX3N5
bmMoZGVzYykpDQorCQkJcHJpbnRrKE5PVF9JTl9TWU5DLCBwYXJ0aXRpb25f
bmFtZShyZGV2LT5kZXYpKTsNCisNCisJCS8qDQorCQkgKiBNYXJrIGFsbCBk
aXNrcyBhcyBzcGFyZSB0byBzdGFydCB3aXRoLCB0aGVuIHBpY2sgb3VyDQor
CQkgKiBhY3RpdmUgZGlzay4gIElmIHdlIGhhdmUgYSBkaXNrIHRoYXQgaXMg
bWFya2VkIGFjdGl2ZQ0KKwkJICogaW4gdGhlIHNiLCB0aGVuIHVzZSBpdCwg
ZWxzZSB1c2UgdGhlIGZpcnN0IHJkZXYuDQorCQkgKi8NCisJCWRpc2stPm51
bWJlciA9IGRlc2MtPm51bWJlcjsNCisJCWRpc2stPnJhaWRfZGlzayA9IGRl
c2MtPnJhaWRfZGlzazsNCisJCWRpc2stPmRldiA9IHJkZXYtPmRldjsNCisJ
CWRpc2stPnNlY3RfbGltaXQgPSBNQVhfV09SS19QRVJfRElTSzsNCisJCWRp
c2stPm9wZXJhdGlvbmFsID0gMDsNCisJCWRpc2stPndyaXRlX29ubHkgPSAw
Ow0KKwkJZGlzay0+c3BhcmUgPSAxOw0KKwkJZGlzay0+dXNlZF9zbG90ID0g
MTsNCisJCWRpc2stPmhlYWRfcG9zaXRpb24gPSAwOw0KKwkJbWFya19kaXNr
X3N5bmMoZGVzYyk7DQorDQorCQlpZiAoZGlza19hY3RpdmUoZGVzYykpIHsN
CisJCQlpZighY29uZi0+d29ya2luZ19kaXNrcykgew0KKwkJCQlwcmludGso
T1BFUkFUSU9OQUwsIHBhcnRpdGlvbl9uYW1lKHJkZXYtPmRldiksDQorIAkJ
CQkJZGVzYy0+cmFpZF9kaXNrKTsNCisJCQkJZGlzay0+b3BlcmF0aW9uYWwg
PSAxOw0KKwkJCQlkaXNrLT5zcGFyZSA9IDA7DQorCQkJCWNvbmYtPndvcmtp
bmdfZGlza3MrKzsNCisJCQkJZGVmX3JkZXYgPSByZGV2Ow0KKwkJCX0gZWxz
ZSB7DQorCQkJCW1hcmtfZGlza19zcGFyZShkZXNjKTsNCisJCQl9DQorCQl9
IGVsc2UNCisJCQltYXJrX2Rpc2tfc3BhcmUoZGVzYyk7DQorDQorCQlpZigh
bnVtX3JkZXZzKyspIGRlZl9yZGV2ID0gcmRldjsNCisJfQ0KKwlpZighY29u
Zi0+d29ya2luZ19kaXNrcyAmJiBudW1fcmRldnMpIHsNCisJCWRlc2MgPSAm
c2ItPmRpc2tzW2RlZl9yZGV2LT5kZXNjX25yXTsNCisJCWRpc2sgPSBjb25m
LT5tdWx0aXBhdGhzICsgZGVzYy0+cmFpZF9kaXNrOw0KKwkJcHJpbnRrKE9Q
RVJBVElPTkFMLCBwYXJ0aXRpb25fbmFtZShkZWZfcmRldi0+ZGV2KSwNCisJ
CQlkaXNrLT5yYWlkX2Rpc2spOw0KKwkJZGlzay0+b3BlcmF0aW9uYWwgPSAx
Ow0KKwkJZGlzay0+c3BhcmUgPSAwOw0KKwkJY29uZi0+d29ya2luZ19kaXNr
cysrOw0KKwkJbWFya19kaXNrX2FjdGl2ZShkZXNjKTsNCisJfQ0KKwkvKg0K
KwkgKiBNYWtlIHN1cmUgb3VyIGFjdGl2ZSBwYXRoIGlzIGluIGRlc2Mgc3Bv
dCAwDQorCSAqLw0KKwlpZihkZWZfcmRldi0+ZGVzY19uciAhPSAwKSB7DQor
CQlyZGV2ID0gZmluZF9yZGV2X25yKG1kZGV2LCAwKTsNCisJCWRlc2MgPSAm
c2ItPmRpc2tzW2RlZl9yZGV2LT5kZXNjX25yXTsNCisJCWRlc2MyID0gc2It
PmRpc2tzOw0KKwkJZGlzayA9IGNvbmYtPm11bHRpcGF0aHMgKyBkZXNjLT5y
YWlkX2Rpc2s7DQorCQlkaXNrMiA9IGNvbmYtPm11bHRpcGF0aHMgKyBkZXNj
Mi0+cmFpZF9kaXNrOw0KKwkJeGNoZ192YWx1ZXMoKmRlc2MyLCpkZXNjKTsN
CisJCXhjaGdfdmFsdWVzKCpkaXNrMiwqZGlzayk7DQorCQl4Y2hnX3ZhbHVl
cyhkZXNjMi0+bnVtYmVyLCBkZXNjLT5udW1iZXIpOw0KKwkJeGNoZ192YWx1
ZXMoZGlzazItPm51bWJlciwgZGlzay0+bnVtYmVyKTsNCisJCXhjaGdfdmFs
dWVzKGRlc2MyLT5yYWlkX2Rpc2ssIGRlc2MtPnJhaWRfZGlzayk7DQorCQl4
Y2hnX3ZhbHVlcyhkaXNrMi0+cmFpZF9kaXNrLCBkaXNrLT5yYWlkX2Rpc2sp
Ow0KKwkJaWYocmRldikgew0KKwkJCXhjaGdfdmFsdWVzKGRlZl9yZGV2LT5k
ZXNjX25yLHJkZXYtPmRlc2NfbnIpOw0KKwkJfSBlbHNlIHsNCisJCQlkZWZf
cmRldi0+ZGVzY19uciA9IDA7DQorCQl9DQorCX0NCisJY29uZi0+cmFpZF9k
aXNrcyA9IHNiLT5yYWlkX2Rpc2tzID0gc2ItPmFjdGl2ZV9kaXNrcyA9IDE7
DQorCWNvbmYtPm5yX2Rpc2tzID0gc2ItPm5yX2Rpc2tzID0gc2ItPndvcmtp
bmdfZGlza3MgPSBudW1fcmRldnM7DQorCXNiLT5mYWlsZWRfZGlza3MgPSAw
Ow0KKwlzYi0+c3BhcmVfZGlza3MgPSBudW1fcmRldnMgLSAxOw0KKwltZGRl
di0+c2JfZGlydHkgPSAxOw0KKwljb25mLT5tZGRldiA9IG1kZGV2Ow0KKwlj
b25mLT5kZXZpY2VfbG9jayA9IE1EX1NQSU5fTE9DS19VTkxPQ0tFRDsNCisN
CisJY29uZi0+c2VnbWVudF9sb2NrID0gTURfU1BJTl9MT0NLX1VOTE9DS0VE
Ow0KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2J1ZmZlcik7
DQorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZG9uZSk7DQor
CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfcmVhZHkpOw0KKw0K
KwlpZiAoIWNvbmYtPndvcmtpbmdfZGlza3MpIHsNCisJCXByaW50ayhOT05F
X09QRVJBVElPTkFMLCBtZGlkeChtZGRldikpOw0KKwkJZ290byBvdXRfZnJl
ZV9jb25mOw0KKwl9DQorDQorDQorCS8qIHByZS1hbGxvY2F0ZSBzb21lIGJ1
ZmZlcl9oZWFkIHN0cnVjdHVyZXMuDQorCSAqIEFzIGEgbWluaW11bSwgMSBt
cGJoIGFuZCByYWlkX2Rpc2tzIGJ1ZmZlcl9oZWFkcw0KKwkgKiB3b3VsZCBw
cm9iYWJseSBnZXQgdXMgYnkgaW4gdGlnaHQgbWVtb3J5IHNpdHVhdGlvbnMs
DQorCSAqIGJ1dCBhIGZldyBtb3JlIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVh
Lg0KKwkgKiBGb3Igbm93LCB0cnkgMTYgbXBiaCBhbmQgMTYqcmFpZF9kaXNr
cyBidWZmZXJoZWFkcw0KKwkgKiBUaGlzIHdpbGwgYWxsb3cgYXQgbGVhc3Qg
MTYgY29uY3VycmVudCByZWFkcyBvciB3cml0ZXMNCisJICogZXZlbiBpZiBr
bWFsbG9jIHN0YXJ0cyBmYWlsaW5nDQorCSAqLw0KKwlpZiAobXVsdGlwYXRo
X2dyb3dfbXBiaChjb25mLCAxNikgPCAxNiB8fA0KKwkgICAgbXVsdGlwYXRo
X2dyb3dfYmgoY29uZiwgMTYqY29uZi0+cmFpZF9kaXNrcyk8IDE2KmNvbmYt
PnJhaWRfZGlza3MpIHsNCisJCXByaW50ayhNRU1fRVJST1IsIG1kaWR4KG1k
ZGV2KSk7DQorCQlnb3RvIG91dF9mcmVlX2NvbmY7DQorCX0NCisNCisJaWYg
KCFzdGFydF9yZWNvdmVyeSAmJiAoc2ItPnN0YXRlICYgKDEgPDwgTURfU0Jf
Q0xFQU4pKSkgew0KKwkJLyoNCisJCSAqIHdlIGRvIHNhbml0eSBjaGVja3Mg
ZXZlbiBpZiB0aGUgZGV2aWNlIHNheXMNCisJCSAqIGl0J3MgY2xlYW4gLi4u
DQorCQkgKi8NCisJCWlmIChjaGVja19jb25zaXN0ZW5jeShtZGRldikpIHsN
CisJCQlwcmludGsoU0JfRElGRkVSRU5DRVMpOw0KKwkJCXNiLT5zdGF0ZSAm
PSB+KDEgPDwgTURfU0JfQ0xFQU4pOw0KKwkJfQ0KKwl9DQorDQorCXsNCisJ
CWNvbnN0IGNoYXIgKiBuYW1lID0gIm11bHRpcGF0aGQiOw0KKw0KKwkJY29u
Zi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKG11bHRpcGF0aGQsIGNv
bmYsIG5hbWUpOw0KKwkJaWYgKCFjb25mLT50aHJlYWQpIHsNCisJCQlwcmlu
dGsoVEhSRUFEX0VSUk9SLCBtZGlkeChtZGRldikpOw0KKwkJCWdvdG8gb3V0
X2ZyZWVfY29uZjsNCisJCX0NCisJfQ0KKw0KKwkvKg0KKwkgKiBSZWdlbmVy
YXRlIHRoZSAiZGV2aWNlIGlzIGluIHN5bmMgd2l0aCB0aGUgcmFpZCBzZXQi
IGJpdCBmb3INCisJICogZWFjaCBkZXZpY2UuDQorCSAqLw0KKwlmb3IgKGkg
PSAwOyBpIDwgTURfU0JfRElTS1M7IGkrKykgew0KKwkJbWFya19kaXNrX25v
bnN5bmMoc2ItPmRpc2tzK2kpOw0KKwkJZm9yIChqID0gMDsgaiA8IHNiLT5y
YWlkX2Rpc2tzOyBqKyspIHsNCisJCQlpZiAoc2ItPmRpc2tzW2ldLm51bWJl
ciA9PSBjb25mLT5tdWx0aXBhdGhzW2pdLm51bWJlcikNCisJCQkJbWFya19k
aXNrX3N5bmMoc2ItPmRpc2tzK2kpOw0KKwkJfQ0KKwl9DQorDQorCXByaW50
ayhBUlJBWV9JU19BQ1RJVkUsIG1kaWR4KG1kZGV2KSwgc2ItPmFjdGl2ZV9k
aXNrcywNCisJCQlzYi0+cmFpZF9kaXNrcywgc2ItPnNwYXJlX2Rpc2tzKTsN
CisJLyoNCisJICogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdw0K
KwkgKi8NCisJcmV0dXJuIDA7DQorDQorb3V0X2ZyZWVfY29uZjoNCisJbXVs
dGlwYXRoX3Nocmlua19tcGJoKGNvbmYpOw0KKwltdWx0aXBhdGhfc2hyaW5r
X2JoKGNvbmYsIGNvbmYtPmZyZWViaF9jbnQpOw0KKwlrZnJlZShjb25mKTsN
CisJbWRkZXYtPnByaXZhdGUgPSBOVUxMOw0KK291dDoNCisJTU9EX0RFQ19V
U0VfQ09VTlQ7DQorCXJldHVybiAtRUlPOw0KK30NCisNCisjdW5kZWYgSU5W
QUxJRF9MRVZFTA0KKyN1bmRlZiBOT19TQg0KKyN1bmRlZiBFUlJPUlMNCisj
dW5kZWYgTk9UX0lOX1NZTkMNCisjdW5kZWYgSU5DT05TSVNURU5UDQorI3Vu
ZGVmIEFMUkVBRFlfUlVOTklORw0KKyN1bmRlZiBPUEVSQVRJT05BTA0KKyN1
bmRlZiBTUEFSRQ0KKyN1bmRlZiBOT05FX09QRVJBVElPTkFMDQorI3VuZGVm
IFNCX0RJRkZFUkVOQ0VTDQorI3VuZGVmIEFSUkFZX0lTX0FDVElWRQ0KKw0K
K3N0YXRpYyBpbnQgbXVsdGlwYXRoX3N0b3AgKG1kZGV2X3QgKm1kZGV2KQ0K
K3sNCisJbXVsdGlwYXRoX2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYo
bWRkZXYpOw0KKw0KKwltZF91bnJlZ2lzdGVyX3RocmVhZChjb25mLT50aHJl
YWQpOw0KKwltdWx0aXBhdGhfc2hyaW5rX21wYmgoY29uZik7DQorCW11bHRp
cGF0aF9zaHJpbmtfYmgoY29uZiwgY29uZi0+ZnJlZWJoX2NudCk7DQorCWtm
cmVlKGNvbmYpOw0KKwltZGRldi0+cHJpdmF0ZSA9IE5VTEw7DQorCU1PRF9E
RUNfVVNFX0NPVU5UOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIG1k
a19wZXJzb25hbGl0eV90IG11bHRpcGF0aF9wZXJzb25hbGl0eT0NCit7DQor
CW5hbWU6CQkibXVsdGlwYXRoIiwNCisJbWFrZV9yZXF1ZXN0OgltdWx0aXBh
dGhfbWFrZV9yZXF1ZXN0LA0KKwlydW46CQltdWx0aXBhdGhfcnVuLA0KKwlz
dG9wOgkJbXVsdGlwYXRoX3N0b3AsDQorCXN0YXR1czoJCW11bHRpcGF0aF9z
dGF0dXMsDQorCWVycm9yX2hhbmRsZXI6CW11bHRpcGF0aF9lcnJvciwNCisJ
ZGlza29wOgkJbXVsdGlwYXRoX2Rpc2tvcCwNCit9Ow0KKw0KK3N0YXRpYyBp
bnQgbWRfX2luaXQgbXVsdGlwYXRoX2luaXQgKHZvaWQpDQorew0KKwlyZXR1
cm4gcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKE1VTFRJUEFUSCwgJm11bHRp
cGF0aF9wZXJzb25hbGl0eSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG11bHRp
cGF0aF9leGl0ICh2b2lkKQ0KK3sNCisJdW5yZWdpc3Rlcl9tZF9wZXJzb25h
bGl0eSAoTVVMVElQQVRIKTsNCit9DQorDQorbW9kdWxlX2luaXQobXVsdGlw
YXRoX2luaXQpOw0KK21vZHVsZV9leGl0KG11bHRpcGF0aF9leGl0KTsNCisN
Cg==
--8323328-2011292279-1000461704=:2577--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/