Thread (41 messages) flat view 41 messages, 6 authors, 2013-10-14

RE: [PATCH 7/7] vfio pci: Add vfio iommu implementation for FSL_PAMU

From: Bhushan Bharat-R65777 <hidden>
Date: 2013-09-26 05:27:37
Also in: linux-iommu, linux-pci, lkml

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQWxleCBXaWxsaWFtc29u
IFttYWlsdG86YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5LCBT
ZXB0ZW1iZXIgMjYsIDIwMTMgMTI6MzcgQU0NCj4gVG86IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0K
PiBDYzogam9yb0A4Ynl0ZXMub3JnOyBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IGdhbGFrQGtl
cm5lbC5jcmFzaGluZy5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51
eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsgbGludXgtDQo+IHBjaUB2Z2VyLmtlcm5lbC5vcmc7
IGFncmFmQHN1c2UuZGU7IFdvb2QgU2NvdHQtQjA3NDIxOyBpb21tdUBsaXN0cy5saW51eC0NCj4g
Zm91bmRhdGlvbi5vcmc7IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiBTdWJqZWN0OiBSZTogW1BB
VENIIDcvN10gdmZpbyBwY2k6IEFkZCB2ZmlvIGlvbW11IGltcGxlbWVudGF0aW9uIGZvciBGU0xf
UEFNVQ0KPiANCj4gT24gVGh1LCAyMDEzLTA5LTE5IGF0IDEyOjU5ICswNTMwLCBCaGFyYXQgQmh1
c2hhbiB3cm90ZToNCj4gPiBUaGlzIHBhdGNoIGFkZHMgdmZpbyBpb21tdSBzdXBwb3J0IGZvciBG
cmVlc2NhbGUgSU9NTVUgKFBBTVUgLQ0KPiA+IFBlcmlwaGVyYWwgQWNjZXNzIE1hbmFnZW1lbnQg
VW5pdCkuDQo+ID4NCj4gPiBUaGUgRnJlZXNjYWxlIFBBTVUgaXMgYW4gYXBlcnR1cmUtYmFzZWQg
SU9NTVUgd2l0aCB0aGUgZm9sbG93aW5nDQo+ID4gY2hhcmFjdGVyaXN0aWNzLiAgRWFjaCBkZXZp
Y2UgaGFzIGFuIGVudHJ5IGluIGEgdGFibGUgaW4gbWVtb3J5DQo+ID4gZGVzY3JpYmluZyB0aGUg
aW92YS0+cGh5cyBtYXBwaW5nLiBUaGUgbWFwcGluZyBoYXM6DQo+ID4gICAtYW4gb3ZlcmFsbCBh
cGVydHVyZSB0aGF0IGlzIHBvd2VyIG9mIDIgc2l6ZWQsIGFuZCBoYXMgYSBzdGFydCBpb3ZhIHRo
YXQNCj4gPiAgICBpcyBuYXR1cmFsbHkgYWxpZ25lZA0KPiA+ICAgLWhhcyAxIG9yIG1vcmUgd2lu
ZG93cyB3aXRoaW4gdGhlIGFwZXJ0dXJlDQo+ID4gICAtbnVtYmVyIG9mIHdpbmRvd3MgbXVzdCBi
ZSBwb3dlciBvZiAyLCBtYXggaXMgMjU2DQo+ID4gICAtc2l6ZSBvZiBlYWNoIHdpbmRvdyBpcyBk
ZXRlcm1pbmVkIGJ5IGFwZXJ0dXJlIHNpemUgLyAjIG9mIHdpbmRvd3MNCj4gPiAgIC1pb3ZhIG9m
IGVhY2ggd2luZG93IGlzIGRldGVybWluZWQgYnkgYXBlcnR1cmUgc3RhcnQgaW92YSAvICMgb2Yg
d2luZG93cw0KPiA+ICAgLXRoZSBtYXBwZWQgcmVnaW9uIGluIGVhY2ggd2luZG93IGNhbiBiZSBk
aWZmZXJlbnQgdGhhbg0KPiA+ICAgIHRoZSB3aW5kb3cgc2l6ZS4uLm1hcHBpbmcgbXVzdCBwb3dl
ciBvZiAyDQo+ID4gICAtcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWFwcGluZyBtdXN0IGJlIG5h
dHVyYWxseSBhbGlnbmVkDQo+ID4gICAgd2l0aCB0aGUgbWFwcGluZyBzaXplDQo+ID4NCj4gPiBT
b21lIG9mIHRoZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSBUWVBFMSBpb21tdSAoZHJpdmVyL3ZmaW8v
dmZpb19pb21tdV90eXBlMS5jKS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEJoYXJhdCBCaHVz
aGFuIDxiaGFyYXQuYmh1c2hhbkBmcmVlc2NhbGUuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJz
L3ZmaW8vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgNiArDQo+ID4gIGRyaXZlcnMvdmZpby9N
YWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy92ZmlvL3ZmaW9faW9t
bXVfZnNsX3BhbXUuYyB8ICA5NTINCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrDQo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggICAgICAgICAgfCAgMTAwICsrKysN
Cj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMDU5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0p
ICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9mc2xfcGFt
dS5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL0tjb25maWcgYi9kcml2ZXJz
L3ZmaW8vS2NvbmZpZyBpbmRleA0KPiA+IDI2YjNkOWQuLjdkMWRhMjYgMTAwNjQ0DQo+ID4gLS0t
IGEvZHJpdmVycy92ZmlvL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3ZmaW8vS2NvbmZpZw0K
PiA+IEBAIC04LDExICs4LDE3IEBAIGNvbmZpZyBWRklPX0lPTU1VX1NQQVBSX1RDRQ0KPiA+ICAJ
ZGVwZW5kcyBvbiBWRklPICYmIFNQQVBSX1RDRV9JT01NVQ0KPiA+ICAJZGVmYXVsdCBuDQo+ID4N
Cj4gPiArY29uZmlnIFZGSU9fSU9NTVVfRlNMX1BBTVUNCj4gPiArCXRyaXN0YXRlDQo+ID4gKwlk
ZXBlbmRzIG9uIFZGSU8NCj4gPiArCWRlZmF1bHQgbg0KPiA+ICsNCj4gPiAgbWVudWNvbmZpZyBW
RklPDQo+ID4gIAl0cmlzdGF0ZSAiVkZJTyBOb24tUHJpdmlsZWdlZCB1c2Vyc3BhY2UgZHJpdmVy
IGZyYW1ld29yayINCj4gPiAgCWRlcGVuZHMgb24gSU9NTVVfQVBJDQo+ID4gIAlzZWxlY3QgVkZJ
T19JT01NVV9UWVBFMSBpZiBYODYNCj4gPiAgCXNlbGVjdCBWRklPX0lPTU1VX1NQQVBSX1RDRSBp
ZiAoUFBDX1BPV0VSTlYgfHwgUFBDX1BTRVJJRVMpDQo+ID4gKwlzZWxlY3QgVkZJT19JT01NVV9G
U0xfUEFNVSBpZiBGU0xfUEFNVQ0KPiA+ICAJaGVscA0KPiA+ICAJICBWRklPIHByb3ZpZGVzIGEg
ZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLg0KPiA+ICAJICBT
ZWUgRG9jdW1lbnRhdGlvbi92ZmlvLnR4dCBmb3IgbW9yZSBkZXRhaWxzLg0KPiA+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL3ZmaW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vTWFrZWZpbGUgaW5kZXgN
Cj4gPiBjNTc5MmVjLi43NDYxMzUwIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvdmZpby9NYWtl
ZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvdmZpby9NYWtlZmlsZQ0KPiA+IEBAIC0xLDQgKzEsNSBA
QA0KPiA+ICBvYmotJChDT05GSUdfVkZJTykgKz0gdmZpby5vDQo+ID4gIG9iai0kKENPTkZJR19W
RklPX0lPTU1VX1RZUEUxKSArPSB2ZmlvX2lvbW11X2NvbW1vbi5vDQo+ID4gdmZpb19pb21tdV90
eXBlMS5vDQo+ID4gIG9iai0kKENPTkZJR19WRklPX0lPTU1VX1NQQVBSX1RDRSkgKz0gdmZpb19p
b21tdV9jb21tb24ubw0KPiA+IHZmaW9faW9tbXVfc3BhcHJfdGNlLm8NCj4gPiArb2JqLSQoQ09O
RklHX1ZGSU9fSU9NTVVfRlNMX1BBTVUpICs9IHZmaW9faW9tbXVfY29tbW9uLm8NCj4gPiArdmZp
b19pb21tdV9mc2xfcGFtdS5vDQo+ID4gIG9iai0kKENPTkZJR19WRklPX1BDSSkgKz0gcGNpLw0K
PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9mc2xfcGFtdS5jDQo+ID4g
Yi9kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9mc2xfcGFtdS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5iMjkzNjVmDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+
ICsrKyBiL2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X2ZzbF9wYW11LmMNCj4gPiBAQCAtMCwwICsx
LDk1MiBAQA0KPiA+ICsvKg0KPiA+ICsgKiBWRklPOiBJT01NVSBETUEgbWFwcGluZyBzdXBwb3J0
IGZvciBGU0wgUEFNVSBJT01NVQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ID4gK21vZGlmeQ0K
PiA+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlLCB2ZXJzaW9uIDIsDQo+ID4gK2FzDQo+ID4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gPiArICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YNCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQ0KPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLg0KPiA+ICsgKg0KPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KPiA+ICsgKiBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiA+
ICsgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxLCBVU0EuDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAx
MyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLg0KPiA+ICsgKg0KPiA+ICsgKiAgICAgQXV0
aG9yOiBCaGFyYXQgQmh1c2hhbiA8YmhhcmF0LmJodXNoYW5AZnJlZXNjYWxlLmNvbT4NCj4gPiAr
ICoNCj4gPiArICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBkcml2ZXIvdmZpby92ZmlvX2lv
bW11X3R5cGUxLmMNCj4gPiArICoNCj4gPiArICogVGhlIEZyZWVzY2FsZSBQQU1VIGlzIGFuIGFw
ZXJ0dXJlLWJhc2VkIElPTU1VIHdpdGggdGhlIGZvbGxvd2luZw0KPiA+ICsgKiBjaGFyYWN0ZXJp
c3RpY3MuICBFYWNoIGRldmljZSBoYXMgYW4gZW50cnkgaW4gYSB0YWJsZSBpbiBtZW1vcnkNCj4g
PiArICogZGVzY3JpYmluZyB0aGUgaW92YS0+cGh5cyBtYXBwaW5nLiBUaGUgbWFwcGluZyBoYXM6
DQo+ID4gKyAqICAtYW4gb3ZlcmFsbCBhcGVydHVyZSB0aGF0IGlzIHBvd2VyIG9mIDIgc2l6ZWQs
IGFuZCBoYXMgYSBzdGFydCBpb3ZhIHRoYXQNCj4gPiArICogICBpcyBuYXR1cmFsbHkgYWxpZ25l
ZA0KPiA+ICsgKiAgLWhhcyAxIG9yIG1vcmUgd2luZG93cyB3aXRoaW4gdGhlIGFwZXJ0dXJlDQo+
ID4gKyAqICAgICAtbnVtYmVyIG9mIHdpbmRvd3MgbXVzdCBiZSBwb3dlciBvZiAyLCBtYXggaXMg
MjU2DQo+ID4gKyAqICAgICAtc2l6ZSBvZiBlYWNoIHdpbmRvdyBpcyBkZXRlcm1pbmVkIGJ5IGFw
ZXJ0dXJlIHNpemUgLyAjIG9mIHdpbmRvd3MNCj4gPiArICogICAgIC1pb3ZhIG9mIGVhY2ggd2lu
ZG93IGlzIGRldGVybWluZWQgYnkgYXBlcnR1cmUgc3RhcnQgaW92YSAvICMgb2YNCj4gd2luZG93
cw0KPiA+ICsgKiAgICAgLXRoZSBtYXBwZWQgcmVnaW9uIGluIGVhY2ggd2luZG93IGNhbiBiZSBk
aWZmZXJlbnQgdGhhbg0KPiA+ICsgKiAgICAgIHRoZSB3aW5kb3cgc2l6ZS4uLm1hcHBpbmcgbXVz
dCBwb3dlciBvZiAyDQo+ID4gKyAqICAgICAtcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWFwcGlu
ZyBtdXN0IGJlIG5hdHVyYWxseSBhbGlnbmVkDQo+ID4gKyAqICAgICAgd2l0aCB0aGUgbWFwcGlu
ZyBzaXplDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPg0K
PiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9mcy5o
Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21v
ZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4
L3BjaS5oPgkJLyogcGNpX2J1c190eXBlICovDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5o
Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdWFj
Y2Vzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmZpby5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu
dXgvd29ya3F1ZXVlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+DQo+ID4gKyNp
bmNsdWRlIDxsaW51eC9tc2kuaD4NCj4gPiArI2luY2x1ZGUgPGFzbS9mc2xfcGFtdV9zdGFzaC5o
Pg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInZmaW9faW9tbXVfY29tbW9uLmgiDQo+ID4gKw0KPiA+
ICsjZGVmaW5lIERSSVZFUl9WRVJTSU9OICAiMC4xIg0KPiA+ICsjZGVmaW5lIERSSVZFUl9BVVRI
T1IgICAiQmhhcmF0IEJodXNoYW4gPGJoYXJhdC5iaHVzaGFuQGZyZWVzY2FsZS5jb20+Ig0KPiA+
ICsjZGVmaW5lIERSSVZFUl9ERVNDICAgICAiRlNMIFBBTVUgSU9NTVUgZHJpdmVyIGZvciBWRklP
Ig0KPiA+ICsNCj4gPiArc3RydWN0IHZmaW9faW9tbXUgew0KPiA+ICsJc3RydWN0IGlvbW11X2Rv
bWFpbgkqZG9tYWluOw0KPiA+ICsJc3RydWN0IG11dGV4CQlsb2NrOw0KPiA+ICsJZG1hX2FkZHJf
dAkJYXBlcnR1cmVfc3RhcnQ7DQo+ID4gKwlkbWFfYWRkcl90CQlhcGVydHVyZV9lbmQ7DQo+ID4g
KwlkbWFfYWRkcl90CQlwYWdlX3NpemU7CS8qIE1heGltdW0gbWFwcGVkIFBhZ2Ugc2l6ZSAqLw0K
PiA+ICsJaW50CQkJbnN1YndpbmRvd3M7CS8qIE51bWJlciBvZiBzdWJ3aW5kb3dzICovDQo+ID4g
KwlzdHJ1Y3QgcmJfcm9vdAkJZG1hX2xpc3Q7DQo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkCW1zaV9k
bWFfbGlzdDsNCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQJZ3JvdXBfbGlzdDsNCj4gPiArfTsNCj4g
PiArDQo+ID4gK3N0cnVjdCB2ZmlvX2RtYSB7DQo+ID4gKwlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsN
Cj4gPiArCWRtYV9hZGRyX3QJCWlvdmE7CQkvKiBEZXZpY2UgYWRkcmVzcyAqLw0KPiA+ICsJdW5z
aWduZWQgbG9uZwkJdmFkZHI7CQkvKiBQcm9jZXNzIHZpcnR1YWwgYWRkciAqLw0KPiA+ICsJc2l6
ZV90CQkJc2l6ZTsJCS8qIE51bWJlciBvZiBwYWdlcyAqLw0KPiANCj4gSXMgdGhpcyByZWFsbHkg
cGFnZXM/DQoNCkNvbW1lbnQgaXMgbGVmdG92ZXIgb2YgcHJldmlvdXMgaW1wbGVtZW50YXRpb24u
DQoNCj4gDQo+ID4gKwlpbnQJCQlwcm90OwkJLyogSU9NTVVfUkVBRC9XUklURSAqLw0KPiA+ICt9
Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZmaW9fbXNpX2RtYSB7DQo+ID4gKwlzdHJ1Y3QgbGlzdF9o
ZWFkCW5leHQ7DQo+ID4gKwlkbWFfYWRkcl90CQlpb3ZhOwkJLyogRGV2aWNlIGFkZHJlc3MgKi8N
Cj4gPiArCWludAkJCWJhbmtfaWQ7DQo+ID4gKwlpbnQJCQlwcm90OwkJLyogSU9NTVVfUkVBRC9X
UklURSAqLw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZmaW9fZ3JvdXAgew0KPiA+ICsJ
c3RydWN0IGlvbW11X2dyb3VwCSppb21tdV9ncm91cDsNCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQJ
bmV4dDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdmZpb19kbWEgKnZmaW9f
ZmluZF9kbWEoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LA0KPiA+ICsJCQkJICAgICAgZG1hX2Fk
ZHJfdCBzdGFydCwgc2l6ZV90IHNpemUpIHsNCj4gPiArCXN0cnVjdCByYl9ub2RlICpub2RlID0g
aW9tbXUtPmRtYV9saXN0LnJiX25vZGU7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKG5vZGUpIHsNCj4g
PiArCQlzdHJ1Y3QgdmZpb19kbWEgKmRtYSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCB2ZmlvX2Rt
YSwgbm9kZSk7DQo+ID4gKw0KPiA+ICsJCWlmIChzdGFydCArIHNpemUgPD0gZG1hLT5pb3ZhKQ0K
PiA+ICsJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsNCj4gPiArCQllbHNlIGlmIChzdGFydCA+PSBk
bWEtPmlvdmEgKyBkbWEtPnNpemUpDQo+IA0KPiBiZWNhdXNlIHRoaXMgbG9va3MgbW9yZSBsaWtl
IGl0J3MgYnl0ZXMuLi4NCj4gDQo+ID4gKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsNCj4gPiAr
CQllbHNlDQo+ID4gKwkJCXJldHVybiBkbWE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJu
IE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZmaW9faW5zZXJ0X2RtYShz
dHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIHN0cnVjdCB2ZmlvX2RtYQ0KPiA+ICsqbmV3KSB7DQo+
ID4gKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmaW9tbXUtPmRtYV9saXN0LnJiX25vZGUsICpw
YXJlbnQgPSBOVUxMOw0KPiA+ICsJc3RydWN0IHZmaW9fZG1hICpkbWE7DQo+ID4gKw0KPiA+ICsJ
d2hpbGUgKCpsaW5rKSB7DQo+ID4gKwkJcGFyZW50ID0gKmxpbms7DQo+ID4gKwkJZG1hID0gcmJf
ZW50cnkocGFyZW50LCBzdHJ1Y3QgdmZpb19kbWEsIG5vZGUpOw0KPiA+ICsNCj4gPiArCQlpZiAo
bmV3LT5pb3ZhICsgbmV3LT5zaXplIDw9IGRtYS0+aW92YSkNCj4gDQo+IHNvIGRvZXMgdGhpcy4u
Lg0KPiANCj4gPiArCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0Ow0KPiA+ICsJCWVsc2UNCj4g
PiArCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwly
Yl9saW5rX25vZGUoJm5ldy0+bm9kZSwgcGFyZW50LCBsaW5rKTsNCj4gPiArCXJiX2luc2VydF9j
b2xvcigmbmV3LT5ub2RlLCAmaW9tbXUtPmRtYV9saXN0KTsgfQ0KPiA+ICsNCj4gPiArc3RhdGlj
IHZvaWQgdmZpb19yZW1vdmVfZG1hKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwgc3RydWN0IHZm
aW9fZG1hDQo+ID4gKypvbGQpIHsNCj4gPiArCXJiX2VyYXNlKCZvbGQtPm5vZGUsICZpb21tdS0+
ZG1hX2xpc3QpOyB9DQo+IA0KPiANCj4gU28gaWYgeW91ciB2ZmlvX2RtYS5zaXplIGlzIGFjdHVh
bGx5IGluIGJ5dGVzLCB3aHkgaXNuJ3QgYWxsIHRoaXMgY29kZSBpbg0KPiBjb21tb24/DQoNClRo
aXMgdGFrZXMgInN0cnVjdCB2ZmlvX2lvbW11ICIgd2hpY2ggaXMgbm90IHNhbWUgb24gdHlwZTEg
YW5kIGZzbF9wYW11LCBzbyBJIGhhdmUgbm90IGRvbmUgdGhhdCBpbiBmaXJzdCBwaGFzZS4NCkJ1
dCB5ZXMgSSBjb21wbGV0ZWx5IGFncmVlIHRoYXQgbXVjaCBtb3JlIGNvbnNvbGlkYXRpb24gY2Fu
IGJlIGRvbmUuIEkgd291bGQgbGlrZSB0byBkbyB0aGF0IGluIG5leHQgc3RlcC4NCg0KPiANCj4g
PiArDQo+ID4gK3N0YXRpYyBpbnQgaW92YV90b193aW4oc3RydWN0IHZmaW9faW9tbXUgKmlvbW11
LCBkbWFfYWRkcl90IGlvdmEpIHsNCj4gPiArCXU2NCBvZmZzZXQgPSBpb3ZhIC0gaW9tbXUtPmFw
ZXJ0dXJlX3N0YXJ0Ow0KPiA+ICsJZG9fZGl2KG9mZnNldCwgaW9tbXUtPnBhZ2Vfc2l6ZSk7DQo+
ID4gKwlyZXR1cm4gKGludCkgb2Zmc2V0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50
IHZmaW9fZGlzYWJsZV9pb21tdV9kb21haW4oc3RydWN0IHZmaW9faW9tbXUgKmlvbW11KSB7DQo+
ID4gKwlpbnQgZW5hYmxlID0gMDsNCj4gPiArCXJldHVybiBpb21tdV9kb21haW5fc2V0X2F0dHIo
aW9tbXUtPmRvbWFpbiwNCj4gPiArCQkJCSAgICAgRE9NQUlOX0FUVFJfRlNMX1BBTVVfRU5BQkxF
LCAmZW5hYmxlKTsgfQ0KPiANCj4gVGhpcyBpcyBuZXZlciBjYWxsZWQ/IQ0KPiANCj4gPiArDQo+
ID4gK3N0YXRpYyBpbnQgdmZpb19lbmFibGVfaW9tbXVfZG9tYWluKHN0cnVjdCB2ZmlvX2lvbW11
ICppb21tdSkgew0KPiA+ICsJaW50IGVuYWJsZSA9IDE7DQo+ID4gKwlyZXR1cm4gaW9tbXVfZG9t
YWluX3NldF9hdHRyKGlvbW11LT5kb21haW4sDQo+ID4gKwkJCQkgICAgIERPTUFJTl9BVFRSX0ZT
TF9QQU1VX0VOQUJMRSwgJmVuYWJsZSk7IH0NCj4gPiArDQo+ID4gKy8qIFVubWFwIERNQSByZWdp
b24gKi8NCj4gPiArc3RhdGljIGludCB2ZmlvX3VubWFwX3VucGluKHN0cnVjdCB2ZmlvX2lvbW11
ICppb21tdSwgc3RydWN0IHZmaW9fZG1hICpkbWEsDQo+ID4gKwkJCSAgICBkbWFfYWRkcl90IGlv
dmEsIHNpemVfdCAqc2l6ZSkgew0KPiA+ICsJZG1hX2FkZHJfdCBzdGFydCA9IGlvdmE7DQo+ID4g
KwlpbnQgd2luLCB3aW5fc3RhcnQsIHdpbl9lbmQ7DQo+ID4gKwlsb25nIHVubG9ja2VkID0gMDsN
Cj4gPiArCXVuc2lnbmVkIGludCBucl9wYWdlczsNCj4gPiArDQo+ID4gKwlucl9wYWdlcyA9IGlv
bW11LT5wYWdlX3NpemUgLyBQQUdFX1NJWkU7DQo+ID4gKwl3aW5fc3RhcnQgPSBpb3ZhX3RvX3dp
bihpb21tdSwgaW92YSk7DQo+ID4gKwl3aW5fZW5kID0gaW92YV90b193aW4oaW9tbXUsIGlvdmEg
KyAqc2l6ZSAtIDEpOw0KPiA+ICsNCj4gPiArCS8qIFJlbGVhc2UgdGhlIHBpbm5lZCBwYWdlcyAq
Lw0KPiA+ICsJZm9yICh3aW4gPSB3aW5fc3RhcnQ7IHdpbiA8PSB3aW5fZW5kOyBpb3ZhICs9IGlv
bW11LT5wYWdlX3NpemUsIHdpbisrKSB7DQo+ID4gKwkJdW5zaWduZWQgbG9uZyBwZm47DQo+ID4g
Kw0KPiA+ICsJCXBmbiA9IGlvbW11X2lvdmFfdG9fcGh5cyhpb21tdS0+ZG9tYWluLCBpb3ZhKSA+
PiBQQUdFX1NISUZUOw0KPiA+ICsJCWlmICghcGZuKQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiAr
DQo+ID4gKwkJaW9tbXVfZG9tYWluX3dpbmRvd19kaXNhYmxlKGlvbW11LT5kb21haW4sIHdpbik7
DQo+ID4gKw0KPiA+ICsJCXVubG9ja2VkICs9IHZmaW9fdW5waW5fcGFnZXMocGZuLCBucl9wYWdl
cywgZG1hLT5wcm90LCAxKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl2ZmlvX2xvY2tfYWNjdCgt
dW5sb2NrZWQpOw0KPiA+ICsJKnNpemUgPSBpb3ZhIC0gc3RhcnQ7DQo+ID4gKwlyZXR1cm4gMDsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2ZmlvX3JlbW92ZV9kbWFfb3ZlcmxhcChz
dHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsIGRtYV9hZGRyX3QNCj4gc3RhcnQsDQo+ID4gKwkJCQkg
ICBzaXplX3QgKnNpemUsIHN0cnVjdCB2ZmlvX2RtYSAqZG1hKSB7DQo+ID4gKwlzaXplX3Qgb2Zm
c2V0LCBvdmVybGFwLCB0bXA7DQo+ID4gKwlzdHJ1Y3QgdmZpb19kbWEgKnNwbGl0Ow0KPiA+ICsJ
aW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoISpzaXplKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+
ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBFeGlzdGluZyBkbWEgcmVnaW9uIGlzIGNvbXBsZXRlbHkg
Y292ZXJlZCwgdW5tYXAgYWxsLiAgVGhpcyBpcw0KPiA+ICsJICogdGhlIGxpa2VseSBjYXNlIHNp
bmNlIHVzZXJzcGFjZSB0ZW5kcyB0byBtYXAgYW5kIHVubWFwIGJ1ZmZlcnMNCj4gPiArCSAqIGlu
IG9uZSBzaG90IHJhdGhlciB0aGFuIG11bHRpcGxlIG1hcHBpbmdzIHdpdGhpbiBhIGJ1ZmZlci4N
Cj4gPiArCSAqLw0KPiA+ICsJaWYgKGxpa2VseShzdGFydCA8PSBkbWEtPmlvdmEgJiYNCj4gPiAr
CQkgICBzdGFydCArICpzaXplID49IGRtYS0+aW92YSArIGRtYS0+c2l6ZSkpIHsNCj4gPiArCQkq
c2l6ZSA9IGRtYS0+c2l6ZTsNCj4gPiArCQlyZXQgPSB2ZmlvX3VubWFwX3VucGluKGlvbW11LCBk
bWEsIGRtYS0+aW92YSwgc2l6ZSk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJl
dDsNCj4gPiArDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBEaWQgd2UgcmVtb3ZlIG1vcmUgdGhhbiB3
ZSBoYXZlPyAgU2hvdWxkIG5ldmVyIGhhcHBlbg0KPiA+ICsJCSAqIHNpbmNlIGEgdmZpb19kbWEg
aXMgY29udGlndW91cyBpbiBpb3ZhIGFuZCB2YWRkci4NCj4gPiArCQkgKi8NCj4gPiArCQlXQVJO
X09OKCpzaXplICE9IGRtYS0+c2l6ZSk7DQo+ID4gKw0KPiA+ICsJCXZmaW9fcmVtb3ZlX2RtYShp
b21tdSwgZG1hKTsNCj4gPiArCQlrZnJlZShkbWEpOw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJ
fQ0KPiA+ICsNCj4gPiArCS8qIE92ZXJsYXAgbG93IGFkZHJlc3Mgb2YgZXhpc3RpbmcgcmFuZ2Ug
Ki8NCj4gPiArCWlmIChzdGFydCA8PSBkbWEtPmlvdmEpIHsNCj4gPiArCQlvdmVybGFwID0gc3Rh
cnQgKyAqc2l6ZSAtIGRtYS0+aW92YTsNCj4gPiArCQlyZXQgPSB2ZmlvX3VubWFwX3VucGluKGlv
bW11LCBkbWEsIGRtYS0+aW92YSwgJm92ZXJsYXApOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJ
CXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJCXZmaW9fcmVtb3ZlX2RtYShpb21tdSwgZG1hKTsN
Cj4gPiArDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBDaGVjaywgd2UgbWF5IGhhdmUgcmVtb3ZlZCB0
byB3aG9sZSB2ZmlvX2RtYS4gIElmIG5vdA0KPiA+ICsJCSAqIGZpeHVwIGFuZCByZS1pbnNlcnQu
DQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKG92ZXJsYXAgPCBkbWEtPnNpemUpIHsNCj4gPiArCQkJ
ZG1hLT5pb3ZhICs9IG92ZXJsYXA7DQo+ID4gKwkJCWRtYS0+dmFkZHIgKz0gb3ZlcmxhcDsNCj4g
PiArCQkJZG1hLT5zaXplIC09IG92ZXJsYXA7DQo+ID4gKwkJCXZmaW9faW5zZXJ0X2RtYShpb21t
dSwgZG1hKTsNCj4gPiArCQl9IGVsc2UNCj4gPiArCQkJa2ZyZWUoZG1hKTsNCj4gPiArDQo+ID4g
KwkJKnNpemUgPSBvdmVybGFwOw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4g
PiArCS8qIE92ZXJsYXAgaGlnaCBhZGRyZXNzIG9mIGV4aXN0aW5nIHJhbmdlICovDQo+ID4gKwlp
ZiAoc3RhcnQgKyAqc2l6ZSA+PSBkbWEtPmlvdmEgKyBkbWEtPnNpemUpIHsNCj4gPiArCQlvZmZz
ZXQgPSBzdGFydCAtIGRtYS0+aW92YTsNCj4gPiArCQlvdmVybGFwID0gZG1hLT5zaXplIC0gb2Zm
c2V0Ow0KPiA+ICsNCj4gPiArCQlyZXQgPSB2ZmlvX3VubWFwX3VucGluKGlvbW11LCBkbWEsIHN0
YXJ0LCAmb3ZlcmxhcCk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4g
PiArDQo+ID4gKwkJZG1hLT5zaXplIC09IG92ZXJsYXA7DQo+ID4gKwkJKnNpemUgPSBvdmVybGFw
Ow0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFNwbGl0IGV4aXN0
aW5nICovDQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEFsbG9jYXRlIG91ciB0cmFja2luZyBz
dHJ1Y3R1cmUgZWFybHkgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdA0KPiA+ICsJICogYmUgdXNlZC4g
IEFuIEFsbG9jYXRpb24gZmFpbHVyZSBsYXRlciBsb3NlcyB0cmFjayBvZiBwYWdlcyBhbmQNCj4g
PiArCSAqIGlzIG1vcmUgZGlmZmljdWx0IHRvIHVud2luZC4NCj4gPiArCSAqLw0KPiA+ICsJc3Bs
aXQgPSBremFsbG9jKHNpemVvZigqc3BsaXQpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghc3Bs
aXQpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJb2Zmc2V0ID0gc3RhcnQg
LSBkbWEtPmlvdmE7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdmZpb191bm1hcF91bnBpbihpb21tdSwg
ZG1hLCBzdGFydCwgc2l6ZSk7DQo+ID4gKwlpZiAocmV0IHx8ICEqc2l6ZSkgew0KPiA+ICsJCWtm
cmVlKHNwbGl0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXRt
cCA9IGRtYS0+c2l6ZTsNCj4gPiArDQo+ID4gKwkvKiBSZXNpemUgdGhlIGxvd2VyIHZmaW9fZG1h
IGluIHBsYWNlLCBiZWZvcmUgdGhlIGJlbG93IGluc2VydCAqLw0KPiA+ICsJZG1hLT5zaXplID0g
b2Zmc2V0Ow0KPiA+ICsNCj4gPiArCS8qIEluc2VydCBuZXcgZm9yIHJlbWFpbmRlciwgYXNzdW1p
bmcgaXQgZGlkbid0IGFsbCBnZXQgdW5tYXBwZWQgKi8NCj4gPiArCWlmIChsaWtlbHkob2Zmc2V0
ICsgKnNpemUgPCB0bXApKSB7DQo+ID4gKwkJc3BsaXQtPnNpemUgPSB0bXAgLSBvZmZzZXQgLSAq
c2l6ZTsNCj4gPiArCQlzcGxpdC0+aW92YSA9IGRtYS0+aW92YSArIG9mZnNldCArICpzaXplOw0K
PiA+ICsJCXNwbGl0LT52YWRkciA9IGRtYS0+dmFkZHIgKyBvZmZzZXQgKyAqc2l6ZTsNCj4gPiAr
CQlzcGxpdC0+cHJvdCA9IGRtYS0+cHJvdDsNCj4gPiArCQl2ZmlvX2luc2VydF9kbWEoaW9tbXUs
IHNwbGl0KTsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWtmcmVlKHNwbGl0KTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiANCj4gSG1tLCB0aGlzIGxvb2tzIGlkZW50aWNhbCB0byB0
eXBlMSwgY2FuIHdlIHNoYXJlIG1vcmU/DQoNClllcywgYXMgSSBzYWlkIHRoaXMgdXNlcyAiIHN0
cnVjdCB2ZmlvX2lvbW11IiwgdmZpb191bm1hcF91bnBpbigpIGV0YyB3aGljaCBhcmUgZGlmZmVy
ZW50IGZvciB0eXBlMSBhbmQgZnNsX3BhbXUuDQpJbiB0aGlzIHBhdGNoc2V0IEkgb25seSBtb3Zl
ZCB0aGUgZnVuY3Rpb24gd2hpY2ggYXJlIHN0cmFpZ2h0IGZvcndhcmQuIEJ1dCB5ZXMgSSBhbSB3
b3JraW5nIG9uIGRvaW5nIG1vcmUgY29uc29saWRhdGlvbiBwYXRjaGVzLg0KDQo+IA0KPiA+ICsN
Cj4gPiArLyogTWFwIERNQSByZWdpb24gKi8NCj4gPiArc3RhdGljIGludCB2ZmlvX2RtYV9tYXAo
c3RydWN0IHZmaW9faW9tbXUgKmlvbW11LCBkbWFfYWRkcl90IGlvdmEsDQo+ID4gKwkJCSAgdW5z
aWduZWQgbG9uZyB2YWRkciwgbG9uZyBucGFnZSwgaW50IHByb3QpIHsNCj4gPiArCWludCByZXQg
PSAwLCBpOw0KPiA+ICsJc2l6ZV90IHNpemU7DQo+ID4gKwl1bnNpZ25lZCBpbnQgd2luLCBucl9z
dWJ3aW5kb3dzOw0KPiA+ICsJZG1hX2FkZHJfdCBpb3ZhbWFwOw0KPiA+ICsNCj4gPiArCS8qIHRv
dGFsIHNpemUgdG8gYmUgbWFwcGVkICovDQo+ID4gKwlzaXplID0gbnBhZ2UgPDwgUEFHRV9TSElG
VDsNCj4gPiArCWRvX2RpdihzaXplLCBpb21tdS0+cGFnZV9zaXplKTsNCj4gPiArCW5yX3N1Yndp
bmRvd3MgID0gc2l6ZTsNCj4gPiArCXNpemUgPSBucGFnZSA8PCBQQUdFX1NISUZUOw0KPiANCj4g
SXMgYWxsIHRoaXMgZG9fZGl2KCkgc3R1ZmYgbmVjZXNzYXJ5PyAgSWYgcGFnZV9zaXplIGlzIGEg
cG93ZXIgb2YgdHdvLCBqdXN0DQo+IHNoaWZ0IGl0Lg0KDQpXaWxsIGRvDQoNCj4gDQo+ID4gKwlp
b3ZhbWFwID0gaW92YTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBucl9zdWJ3aW5kb3dzOyBpKysp
IHsNCj4gPiArCQl1bnNpZ25lZCBsb25nIHBmbjsNCj4gPiArCQl1bnNpZ25lZCBsb25nIG5yX3Bh
Z2VzOw0KPiA+ICsJCWRtYV9hZGRyX3QgbWFwc2l6ZTsNCj4gPiArCQlzdHJ1Y3QgdmZpb19kbWEg
KmRtYSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJCXdpbiA9IGlvdmFfdG9fd2luKGlvbW11LCBpb3Zh
bWFwKTsNCj4gDQo+IEFyZW4ndCB0aGVzZSBjb25zZWN1dGl2ZSwgd2h5IGNhbid0IHdlIGp1c3Qg
aW5jcmVtZW50Pw0KDQpZZXMsIHdpbGwgZG8NCg0KPiANCj4gPiArCQlpZiAoaW92YW1hcCAhPSBp
b21tdS0+YXBlcnR1cmVfc3RhcnQgKyBpb21tdS0+cGFnZV9zaXplICogd2luKSB7DQo+ID4gKwkJ
CXByX2VycigiJXMgaW92YSglbGx4KSB1bmFsbGlnbmVkIHRvIHdpbmRvdyBzaXplICVsbHhcbiIs
DQo+ID4gKwkJCQlfX2Z1bmNfXywgaW92YW1hcCwgaW9tbXUtPnBhZ2Vfc2l6ZSk7DQo+ID4gKwkJ
CXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gDQo+IENhbid0IHRo
aXMgb25seSBoYXBwZW4gb24gdGhlIGZpcnN0IG9uZT8NCg0KaW92YSB0byBiZSBtYXBwZWQgaW4g
YSB3aW5kb3cgbXVzdCBiZSAoaW9tbXUtPmFwZXJ0dXJlX3N0YXJ0ICsgaW9tbXUtPnBhZ2Vfc2l6
ZSAqIHdpbikNCkJ1dCBhcyB5b3UgcG9pbnRlZCBvdXQgdGhhdCAid2luIiBjYW4gaW5jcmVtZW50
ZWQgaW92YW1hcCBpcyBhbHdheXMgaW5jcmVtZW50ZWQgYnkgcGFnZV9zaXplIHRoZW4gY2hlY2tp
bmcgdGhpcyBvdXRzaWRlIHRoZSBsb29rIGNhbiBiZSBkb25lLiBCdXQgdGhpcyBpcyB0aGUgcmVx
dWlyZW1lbnQgb2Ygb3VyIGlvbW11IGFuZCB3ZSBzaG91bGQgZXJyb3Igb3V0IGlmIHRoaXMgaXMg
bm90IG1ldC4NCg0KPiBTZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBvdXRzaWRlIG9mIHRoZQ0KPiBs
b29wLiAgV2hhdCBhYm91dCBhbGlnbm1lbnQgd2l0aCB0aGUgZW5kIG9mIHRoZSB3aW5kb3csIGRv
IHlvdSBjYXJlPyAgQ2hlY2sNCj4gc3BlbGxpbmcgaW4geW91ciB3YXJuaW5nLCBidXQgYmV0dGVy
IHlldCwgZ2V0IHJpZCBvZiBpdCwgdGhpcyBkb2Vzbid0IHNlZW0gbGlrZQ0KPiBzb21ldGhpbmcg
d2UgbmVlZCB0byBlcnJvciBvbi4NCj4gDQo+ID4gKw0KPiA+ICsJCW1hcHNpemUgPSBtaW4oaW92
YSArIHNpemUgLSBpb3ZhbWFwLCBpb21tdS0+cGFnZV9zaXplKTsNCj4gPiArCQkvKg0KPiA+ICsJ
CSAqIEZJWE1FOiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG1hcHBpbmcgcGFnZS1zaXplDQo+
ID4gKwkJICogb2Ygc3Vid2luZG93LXNpemUuDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKG1hcHNp
emUgPCBpb21tdS0+cGFnZV9zaXplKSB7DQo+ID4gKwkJCXByX2VycigiJXMgaW92YSAoJWxseCkg
bm90IGFsbGlnbmVkIHRvIHdpbmRvdyBzaXplICVsbHhcbiIsDQo+ID4gKwkJCQlfX2Z1bmNfXywg
aW92YW1hcCwgaW9tbXUtPnBhZ2Vfc2l6ZSk7DQo+ID4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ID4g
KwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gDQo+IFNvIHlvdSBkbyBjYXJlIGFib3V0IHRoZSBlbmQg
YWxpZ25tZW50LCBidXQgd2h5IGNhbid0IHdlIGVycm9yIGZvciBib3RoIG9mIHRoZXNlDQo+IGlu
IGFkdmFuY2U/DQoNCkV2ZW50dWFsbHkgdGhpcyBzaG91bGQgZ28gYXdheSwgSSB3aWxsIHJlbW92
ZSB0aGlzIDopDQoNCj4gDQo+ID4gKw0KPiA+ICsJCW5yX3BhZ2VzID0gbWFwc2l6ZSA+PiBQQUdF
X1NISUZUOw0KPiA+ICsNCj4gPiArCQkvKiBQaW4gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9y
eSAqLw0KPiA+ICsJCXJldCA9IHZmaW9fcGluX3BhZ2VzKHZhZGRyLCBucl9wYWdlcywgcHJvdCwg
JnBmbik7DQo+ID4gKwkJaWYgKHJldCAhPSBucl9wYWdlcykgew0KPiA+ICsJCQlwcl9lcnIoIiVz
IHVuYWJsZSB0byBwaW4gcGFnZXMgPSAlbHgsIHBpbm5lZCglbHgvJWx4KVxuIiwNCj4gPiArCQkJ
CV9fZnVuY19fLCB2YWRkciwgbnBhZ2UsIG5yX3BhZ2VzKTsNCj4gPiArCQkJcmV0ID0gLUVJTlZB
TDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiANCj4gSG93IGxpa2VseSBpcyB0aGlzIHRv
IHN1Y2NlZWQ/ICBJdCBzZWVtcyBsaWtlIHdlJ3JlIHJlbHlpbmcgb24gdXNlcnNwYWNlIHRvIHVz
ZQ0KPiBodWdlcGFnZXMgdG8gbWFrZSB0aGlzIHdvcmsuDQoNClllcywgdXNlcnNwYWNlIHdpbGwg
Zmlyc3QgaGF2ZSBodWdlcGFnZXMgYW5kIHRoYW4gY2FsbHMgRE1BX01BUCgpDQoNCj4gDQo+ID4g
Kw0KPiA+ICsJCXJldCA9IGlvbW11X2RvbWFpbl93aW5kb3dfZW5hYmxlKGlvbW11LT5kb21haW4s
IHdpbiwNCj4gPiArCQkJCQkJIChwaHlzX2FkZHJfdClwZm4gPDwgUEFHRV9TSElGVCwNCj4gPiAr
CQkJCQkJIG1hcHNpemUsIHByb3QpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJcHJfZXJy
KCIlcyB1bmFibGUgdG8gaW9tbXVfbWFwKClcbiIsIF9fZnVuY19fKTsNCj4gPiArCQkJcmV0ID0g
LUVJTlZBTDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiANCj4gWW91IG1pZ2h0IGNvbnNp
ZGVyIGhvdyBtYW55IGNhc2VzIHlvdSdyZSByZXR1cm5pbmcgRUlOVkFMIGFuZCB0aGluayBhYm91
dCBob3cNCj4gZGlmZmljdWx0IHRoaXMgd2lsbCBiZSB0byBkZWJ1Zy4gIEkgZG9uJ3QgdGhpbmsg
d2UgY2FuIGxlYXZlIGFsbCB0aGVzZSBwcl9lcnIoKXMNCj4gc2luY2UgaXQgZ2l2ZXMgdXNlcnNw
YWNlIGEgdHJpdmlhbCB3YXkgdG8gc3BhbSBsb2cgZmlsZXMuDQo+IA0KPiA+ICsNCj4gPiArCQkv
Kg0KPiA+ICsJCSAqIENoZWNrIGlmIHdlIGFidXQgYSByZWdpb24gYmVsb3cgLSBub3RoaW5nIGJl
bG93IDAuDQo+ID4gKwkJICogVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgY2FzZSB3aGVuIG1hcHBp
bmcgY2h1bmtzIG9mDQo+ID4gKwkJICogcGh5c2ljYWxseSBjb250aWd1b3VzIHJlZ2lvbnMgd2l0
aGluIGEgdmlydHVhbCBhZGRyZXNzDQo+ID4gKwkJICogcmFuZ2UuICBVcGRhdGUgdGhlIGFidXR0
aW5nIGVudHJ5IGluIHBsYWNlIHNpbmNlIGlvdmENCj4gPiArCQkgKiBkb2Vzbid0IGNoYW5nZS4N
Cj4gPiArCQkgKi8NCj4gPiArCQlpZiAobGlrZWx5KGlvdmFtYXApKSB7DQo+ID4gKwkJCXN0cnVj
dCB2ZmlvX2RtYSAqdG1wOw0KPiA+ICsJCQl0bXAgPSB2ZmlvX2ZpbmRfZG1hKGlvbW11LCBpb3Zh
bWFwIC0gMSwgMSk7DQo+ID4gKwkJCWlmICh0bXAgJiYgdG1wLT5wcm90ID09IHByb3QgJiYNCj4g
PiArCQkJICAgIHRtcC0+dmFkZHIgKyB0bXAtPnNpemUgPT0gdmFkZHIpIHsNCj4gPiArCQkJCXRt
cC0+c2l6ZSArPSBtYXBzaXplOw0KPiA+ICsJCQkJZG1hID0gdG1wOw0KPiA+ICsJCQl9DQo+ID4g
KwkJfQ0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIENoZWNrIGlmIHdlIGFidXQgYSByZWdp
b24gYWJvdmUgLSBub3RoaW5nIGFib3ZlIH4wICsgMS4NCj4gPiArCQkgKiBJZiB3ZSBhYnV0IGFi
b3ZlIGFuZCBiZWxvdywgcmVtb3ZlIGFuZCBmcmVlLiAgSWYgb25seQ0KPiA+ICsJCSAqIGFidXQg
YWJvdmUsIHJlbW92ZSwgbW9kaWZ5LCByZWluc2VydC4NCj4gPiArCQkgKi8NCj4gPiArCQlpZiAo
bGlrZWx5KGlvdmFtYXAgKyBtYXBzaXplKSkgew0KPiA+ICsJCQlzdHJ1Y3QgdmZpb19kbWEgKnRt
cDsNCj4gPiArCQkJdG1wID0gdmZpb19maW5kX2RtYShpb21tdSwgaW92YW1hcCArIG1hcHNpemUs
IDEpOw0KPiA+ICsJCQlpZiAodG1wICYmIHRtcC0+cHJvdCA9PSBwcm90ICYmDQo+ID4gKwkJCSAg
ICB0bXAtPnZhZGRyID09IHZhZGRyICsgbWFwc2l6ZSkgew0KPiA+ICsJCQkJdmZpb19yZW1vdmVf
ZG1hKGlvbW11LCB0bXApOw0KPiA+ICsJCQkJaWYgKGRtYSkgew0KPiA+ICsJCQkJCWRtYS0+c2l6
ZSArPSB0bXAtPnNpemU7DQo+ID4gKwkJCQkJa2ZyZWUodG1wKTsNCj4gPiArCQkJCX0gZWxzZSB7
DQo+ID4gKwkJCQkJdG1wLT5zaXplICs9IG1hcHNpemU7DQo+ID4gKwkJCQkJdG1wLT5pb3ZhID0g
aW92YW1hcDsNCj4gPiArCQkJCQl0bXAtPnZhZGRyID0gdmFkZHI7DQo+ID4gKwkJCQkJdmZpb19p
bnNlcnRfZG1hKGlvbW11LCB0bXApOw0KPiA+ICsJCQkJCWRtYSA9IHRtcDsNCj4gPiArCQkJCX0N
Cj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKCFkbWEpIHsNCj4gPiArCQkJ
ZG1hID0ga3phbGxvYyhzaXplb2YoKmRtYSksIEdGUF9LRVJORUwpOw0KPiA+ICsJCQlpZiAoIWRt
YSkgew0KPiA+ICsJCQkJaW9tbXVfdW5tYXAoaW9tbXUtPmRvbWFpbiwgaW92YW1hcCwgbWFwc2l6
ZSk7DQo+ID4gKwkJCQl2ZmlvX3VucGluX3BhZ2VzKHBmbiwgbnBhZ2UsIHByb3QsIHRydWUpOw0K
PiA+ICsJCQkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+ID4g
Kw0KPiA+ICsJCQlkbWEtPnNpemUgPSBtYXBzaXplOw0KPiA+ICsJCQlkbWEtPmlvdmEgPSBpb3Zh
bWFwOw0KPiA+ICsJCQlkbWEtPnZhZGRyID0gdmFkZHI7DQo+ID4gKwkJCWRtYS0+cHJvdCA9IHBy
b3Q7DQo+ID4gKwkJCXZmaW9faW5zZXJ0X2RtYShpb21tdSwgZG1hKTsNCj4gPiArCQl9DQo+ID4g
Kw0KPiA+ICsJCWlvdmFtYXAgKz0gbWFwc2l6ZTsNCj4gPiArCQl2YWRkciArPSBtYXBzaXplOw0K
PiANCj4gQW5vdGhlciBjaHVuayB0aGF0IGxvb2tzIGxpa2UgaXQncyBwcm9iYWJseSBpZGVudGlj
YWwgdG8gdHlwZTEuICBDYW4gd2UgcmlwIHRoaXMNCj4gb3V0IHRvIGFub3RoZXIgZnVuY3Rpb24g
YW5kIGFkZCBpdCB0byBjb21tb24/DQoNClllcywgYW5kIHNhbWUgYW5zd2VyIDopDQoNCj4gDQo+
ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAg
ICAgIHN0cnVjdCB2ZmlvX2RtYSAqdG1wOw0KPiA+ICsgICAgICAgICAgICAgICAgd2hpbGUgKCh0
bXAgPSB2ZmlvX2ZpbmRfZG1hKGlvbW11LCBpb3ZhLCBzaXplKSkpIHsNCj4gPiArICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHIgPSB2ZmlvX3JlbW92ZV9kbWFfb3ZlcmxhcChpb21tdSwgaW92
YSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmc2l6ZSwgdG1wKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdB
Uk5fT04ociB8fCAhc2l6ZSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0KPiANCj4gDQo+
IEJyb2tlbiB3aGl0ZXNwYWNlLCBwbGVhc2UgcnVuIHNjcmlwdHMvY2hlY2twYXRjaC5wbCBiZWZv
cmUgcG9zdGluZy4NCj4gDQo+ID4gKw0KPiA+ICsJdmZpb19lbmFibGVfaW9tbXVfZG9tYWluKGlv
bW11KTsNCj4gDQo+IEkgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCB5b3VyIHNlbWFudGljcyBoZXJl
IHNpbmNlIHlvdSBuZXZlciB1c2UgdGhlIGRpc2FibGUNCj4gdmVyc2lvbiwgaXMgdGhpcyBqdXN0
IHJlZHVuZGFudCBhZnRlciB0aGUgZmlyc3QgbWFwcGluZz8gIFdoZW4gZG1hX2xpc3QgaXMgZW1w
dHkNCj4gc2hvdWxkIGl0IGJlIGRpc2FibGVkPw0KDQpZZXMsIEkgaW50ZW5kZWQgdG8gZG8gdGhh
dCBidXQgc29tZWhvdyBpbiBmaW5hbCB2ZXJzaW9uIGl0IGlzIG5vdCB0aGVyZSA6KA0KDQo+ICBJ
cyB0aGVyZSBhIGJ1ZyBoZXJlIHRoYXQgYW4gZXJyb3Igd2lsbCBlbmFibGUgdGhlIGlvbW11DQo+
IGRvbWFpbiBldmVuIGlmIHRoZXJlIGFyZSBubyBlbnRyaWVzPw0KDQpXaWxsIGNvcnJlY3QgdGhp
cy4NCg0KPiANCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50
IHZmaW9fZG1hX2RvX21hcChzdHJ1Y3QgdmZpb19pb21tdSAqaW9tbXUsDQo+ID4gKwkJCSAgIHN0
cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV9tYXAgKm1hcCkgew0KPiA+ICsJZG1hX2FkZHJfdCBp
b3ZhID0gbWFwLT5pb3ZhOw0KPiA+ICsJc2l6ZV90IHNpemUgPSBtYXAtPnNpemU7DQo+ID4gKwl1
bnNpZ25lZCBsb25nIHZhZGRyID0gbWFwLT52YWRkcjsNCj4gPiArCWludCByZXQgPSAwLCBwcm90
ID0gMDsNCj4gPiArCWxvbmcgbnBhZ2U7DQo+ID4gKw0KPiA+ICsJLyogUkVBRC9XUklURSBmcm9t
IGRldmljZSBwZXJzcGVjdGl2ZSAqLw0KPiA+ICsJaWYgKG1hcC0+ZmxhZ3MgJiBWRklPX0RNQV9N
QVBfRkxBR19XUklURSkNCj4gPiArCQlwcm90IHw9IElPTU1VX1dSSVRFOw0KPiA+ICsJaWYgKG1h
cC0+ZmxhZ3MgJiBWRklPX0RNQV9NQVBfRkxBR19SRUFEKQ0KPiA+ICsJCXByb3QgfD0gSU9NTVVf
UkVBRDsNCj4gPiArDQo+ID4gKwlpZiAoIXByb3QpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7IC8q
IE5vIFJFQUQvV1JJVEU/ICovDQo+ID4gKw0KPiA+ICsJLyogRG9uJ3QgYWxsb3cgSU9WQSB3cmFw
ICovDQo+ID4gKwlpZiAoaW92YSArIHNpemUgJiYgaW92YSArIHNpemUgPCBpb3ZhKQ0KPiA+ICsJ
CXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCS8qIERvbid0IGFsbG93IHZpcnR1YWwgYWRk
cmVzcyB3cmFwICovDQo+ID4gKwlpZiAodmFkZHIgKyBzaXplICYmIHZhZGRyICsgc2l6ZSA8IHZh
ZGRyKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBG
SVhNRTogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBtYXBwaW5nIHBhZ2Utc2l6ZQ0KPiA+ICsJ
ICogb2Ygc3Vid2luZG93LXNpemUuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChzaXplIDwgaW9tbXUt
PnBhZ2Vfc2l6ZSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+IA0KPiBJJ2QgdGhp
bmsgdGhlIHN0YXJ0IGFuZCBlbmQgYWxpZ25tZW50IGNvdWxkIGJlIHRlc3RlZCBoZXJlLg0KPiAN
Cj4gPiArCW5wYWdlID0gc2l6ZSA+PiBQQUdFX1NISUZUOw0KPiA+ICsJaWYgKCFucGFnZSkNCj4g
PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZpb21tdS0+bG9j
ayk7DQo+ID4gKw0KPiA+ICsJaWYgKHZmaW9fZmluZF9kbWEoaW9tbXUsIGlvdmEsIHNpemUpKSB7
DQo+ID4gKwkJcmV0ID0gLUVFWElTVDsNCj4gPiArCQlnb3RvIG91dF9sb2NrOw0KPiA+ICsJfQ0K
PiA+ICsNCj4gPiArCXZmaW9fZG1hX21hcChpb21tdSwgaW92YSwgdmFkZHIsIG5wYWdlLCBwcm90
KTsNCj4gPiArDQo+ID4gK291dF9sb2NrOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZpb21tdS0+bG9j
ayk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZm
aW9fZG1hX2RvX3VubWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwNCj4gPiArCQkJICAgICBz
dHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfdW5tYXAgKnVubWFwKSB7DQo+ID4gKwlzdHJ1Y3Qg
dmZpb19kbWEgKmRtYTsNCj4gPiArCXNpemVfdCB1bm1hcHBlZCA9IDAsIHNpemU7DQo+ID4gKwlp
bnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZpb21tdS0+bG9jayk7DQo+ID4g
Kw0KPiA+ICsJd2hpbGUgKChkbWEgPSB2ZmlvX2ZpbmRfZG1hKGlvbW11LCB1bm1hcC0+aW92YSwg
dW5tYXAtPnNpemUpKSkgew0KPiA+ICsJCXNpemUgPSB1bm1hcC0+c2l6ZTsNCj4gPiArCQlyZXQg
PSB2ZmlvX3JlbW92ZV9kbWFfb3ZlcmxhcChpb21tdSwgdW5tYXAtPmlvdmEsICZzaXplLCBkbWEp
Ow0KPiA+ICsJCWlmIChyZXQgfHwgIXNpemUpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCXVubWFw
cGVkICs9IHNpemU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZpb21tdS0+
bG9jayk7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFdlIG1heSB1bm1hcCBtb3JlIHRoYW4g
cmVxdWVzdGVkLCB1cGRhdGUgdGhlIHVubWFwIHN0cnVjdCBzbw0KPiA+ICsJICogdXNlcnNwYWNl
IGNhbiBrbm93Lg0KPiA+ICsJICovDQo+ID4gKwl1bm1hcC0+c2l6ZSA9IHVubWFwcGVkOw0KPiA+
ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmZp
b19oYW5kbGVfZ2V0X2F0dHIoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LA0KPiA+ICsJCQkgc3Ry
dWN0IHZmaW9fcGFtdV9hdHRyICpwYW11X2F0dHIpIHsNCj4gPiArCXN3aXRjaCAocGFtdV9hdHRy
LT5hdHRyaWJ1dGUpIHsNCj4gPiArCWNhc2UgVkZJT19BVFRSX0dFT01FVFJZOiB7DQo+ID4gKwkJ
c3RydWN0IGlvbW11X2RvbWFpbl9nZW9tZXRyeSBnZW9tOw0KPiA+ICsJCWlmIChpb21tdV9kb21h
aW5fZ2V0X2F0dHIoaW9tbXUtPmRvbWFpbiwNCj4gPiArCQkJCSAgICAgIERPTUFJTl9BVFRSX0dF
T01FVFJZLCAmZ2VvbSkpIHsNCj4gPiArCQkJcHJfZXJyKCIlcyBFcnJvciBnZXR0aW5nIGRvbWFp
biBnZW9tZXRyeVxuIiwNCj4gPiArCQkJICAgICAgIF9fZnVuY19fKTsNCj4gPiArCQkJcmV0dXJu
IC1FRkFVTFQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlwYW11X2F0dHItPmF0dHJfaW5mby5h
dHRyLmFwZXJ0dXJlX3N0YXJ0ID0gZ2VvbS5hcGVydHVyZV9zdGFydDsNCj4gPiArCQlwYW11X2F0
dHItPmF0dHJfaW5mby5hdHRyLmFwZXJ0dXJlX2VuZCA9IGdlb20uYXBlcnR1cmVfZW5kOw0KPiA+
ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsJY2FzZSBWRklPX0FUVFJfV0lORE9XUzogew0KPiA+
ICsJCXUzMiBjb3VudDsNCj4gPiArCQlpZiAoaW9tbXVfZG9tYWluX2dldF9hdHRyKGlvbW11LT5k
b21haW4sDQo+ID4gKwkJCQkgICAgICBET01BSU5fQVRUUl9XSU5ET1dTLCAmY291bnQpKSB7DQo+
ID4gKwkJCXByX2VycigiJXMgRXJyb3IgZ2V0dGluZyBkb21haW4gd2luZG93c1xuIiwNCj4gPiAr
CQkJICAgICAgIF9fZnVuY19fKTsNCj4gPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJfQ0K
PiA+ICsNCj4gPiArCQlwYW11X2F0dHItPmF0dHJfaW5mby53aW5kb3dzID0gY291bnQ7DQo+ID4g
KwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKwljYXNlIFZGSU9fQVRUUl9QQU1VX1NUQVNIOiB7DQo+
ID4gKwkJc3RydWN0IHBhbXVfc3Rhc2hfYXR0cmlidXRlIHN0YXNoOw0KPiA+ICsJCWlmIChpb21t
dV9kb21haW5fZ2V0X2F0dHIoaW9tbXUtPmRvbWFpbiwNCj4gPiArCQkJCSAgICAgIERPTUFJTl9B
VFRSX0ZTTF9QQU1VX1NUQVNILCAmc3Rhc2gpKSB7DQo+ID4gKwkJCXByX2VycigiJXMgRXJyb3Ig
Z2V0dGluZyBkb21haW4gd2luZG93c1xuIiwNCj4gPiArCQkJICAgICAgIF9fZnVuY19fKTsNCj4g
PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlwYW11X2F0dHIt
PmF0dHJfaW5mby5zdGFzaC5jcHUgPSBzdGFzaC5jcHU7DQo+ID4gKwkJcGFtdV9hdHRyLT5hdHRy
X2luZm8uc3Rhc2guY2FjaGUgPSBzdGFzaC5jYWNoZTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0N
Cj4gPiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXByX2VycigiJXMgRXJyb3I6IEludmFsaWQg
YXR0cmlidXRlICglZClcbiIsDQo+ID4gKwkJCSBfX2Z1bmNfXywgcGFtdV9hdHRyLT5hdHRyaWJ1
dGUpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVy
biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZmaW9faGFuZGxlX3NldF9hdHRy
KHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwNCj4gPiArCQkJIHN0cnVjdCB2ZmlvX3BhbXVfYXR0
ciAqcGFtdV9hdHRyKSB7DQo+ID4gKwlzd2l0Y2ggKHBhbXVfYXR0ci0+YXR0cmlidXRlKSB7DQo+
ID4gKwljYXNlIFZGSU9fQVRUUl9HRU9NRVRSWTogew0KPiA+ICsJCXN0cnVjdCBpb21tdV9kb21h
aW5fZ2VvbWV0cnkgZ2VvbTsNCj4gPiArDQo+ID4gKwkJZ2VvbS5hcGVydHVyZV9zdGFydCA9IHBh
bXVfYXR0ci0+YXR0cl9pbmZvLmF0dHIuYXBlcnR1cmVfc3RhcnQ7DQo+ID4gKwkJZ2VvbS5hcGVy
dHVyZV9lbmQgPSBwYW11X2F0dHItPmF0dHJfaW5mby5hdHRyLmFwZXJ0dXJlX2VuZDsNCj4gPiAr
CQlpb21tdS0+YXBlcnR1cmVfc3RhcnQgPSBnZW9tLmFwZXJ0dXJlX3N0YXJ0Ow0KPiA+ICsJCWlv
bW11LT5hcGVydHVyZV9lbmQgPSBnZW9tLmFwZXJ0dXJlX2VuZDsNCj4gPiArCQlnZW9tLmZvcmNl
X2FwZXJ0dXJlID0gMTsNCj4gPiArCQlpZiAoaW9tbXVfZG9tYWluX3NldF9hdHRyKGlvbW11LT5k
b21haW4sDQo+ID4gKwkJCQkJICBET01BSU5fQVRUUl9HRU9NRVRSWSwgJmdlb20pKSB7DQo+ID4g
KwkJCXByX2VycigiJXMgRXJyb3Igc2V0dGluZyBkb21haW4gZ2VvbWV0cnlcbiIsIF9fZnVuY19f
KTsNCj4gPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlicmVh
azsNCj4gPiArCX0NCj4gPiArCWNhc2UgVkZJT19BVFRSX1dJTkRPV1M6IHsNCj4gPiArCQl1MzIg
Y291bnQgPSBwYW11X2F0dHItPmF0dHJfaW5mby53aW5kb3dzOw0KPiA+ICsJCXU2NCBzaXplOw0K
PiA+ICsJCWlmIChjb3VudCA+IDI1Nikgew0KPiA+ICsJCQlwcl9lcnIoIk51bWJlciBvZiBzdWJ3
aW5kb3dzIHJlcXVlc3RlZCAoJWQpIGlzIDI1NlxuIiwNCj4gPiArCQkJCWNvdW50KTsNCj4gPiAr
CQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWlvbW11LT5uc3Vid2luZG93cyA9
IHBhbXVfYXR0ci0+YXR0cl9pbmZvLndpbmRvd3M7DQo+ID4gKwkJc2l6ZSA9IGlvbW11LT5hcGVy
dHVyZV9lbmQgLSBpb21tdS0+YXBlcnR1cmVfc3RhcnQgKyAxOw0KPiA+ICsJCWRvX2RpdihzaXpl
LCBjb3VudCk7DQo+ID4gKwkJaW9tbXUtPnBhZ2Vfc2l6ZSA9IHNpemU7DQo+ID4gKwkJaWYgKGlv
bW11X2RvbWFpbl9zZXRfYXR0cihpb21tdS0+ZG9tYWluLA0KPiA+ICsJCQkJICAgICAgRE9NQUlO
X0FUVFJfV0lORE9XUywgJmNvdW50KSkgew0KPiA+ICsJCQlwcl9lcnIoIiVzIEVycm9yIGdldHRp
bmcgZG9tYWluIHdpbmRvd3NcbiIsDQo+ID4gKwkJCSAgICAgICBfX2Z1bmNfXyk7DQo+ID4gKwkJ
CXJldHVybiAtRUZBVUxUOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9
DQo+ID4gKwljYXNlIFZGSU9fQVRUUl9QQU1VX1NUQVNIOiB7DQo+ID4gKwkJc3RydWN0IHBhbXVf
c3Rhc2hfYXR0cmlidXRlIHN0YXNoOw0KPiA+ICsNCj4gPiArCQlzdGFzaC5jcHUgPSBwYW11X2F0
dHItPmF0dHJfaW5mby5zdGFzaC5jcHU7DQo+ID4gKwkJc3Rhc2guY2FjaGUgPSBwYW11X2F0dHIt
PmF0dHJfaW5mby5zdGFzaC5jYWNoZTsNCj4gPiArCQlpZiAoaW9tbXVfZG9tYWluX3NldF9hdHRy
KGlvbW11LT5kb21haW4sDQo+ID4gKwkJCQkgICAgICBET01BSU5fQVRUUl9GU0xfUEFNVV9TVEFT
SCwgJnN0YXNoKSkgew0KPiA+ICsJCQlwcl9lcnIoIiVzIEVycm9yIGdldHRpbmcgZG9tYWluIHdp
bmRvd3NcbiIsDQo+ID4gKwkJCSAgICAgICBfX2Z1bmNfXyk7DQo+ID4gKwkJCXJldHVybiAtRUZB
VUxUOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gDQo+IFdoeSBkbyB3ZSB0aHJvdyBhd2F5
IHRoZSByZXR1cm4gdmFsdWUgb2YgaW9tbXVfZG9tYWluX3NldF9hdHRyIGFuZCByZXBsYWNlIGl0
DQo+IHdpdGggRUZBVUxUIGluIGFsbCB0aGVzZSBjYXNlcz8NCg0KV2lsbCB1c2UgdGhlIHJldHVy
biBvZiBpb21tdV9kb21haW5fc2V0X2F0dHIoKS4NCg0KPiAgSSBhc3N1bWUgYWxsIHRoZXNlIHBy
X2VycigpcyBhcmUgbGVmdG92ZXINCj4gZGVidWcuICBDYW4gdGhlIHVzZXIgZG8gYW55dGhpbmcg
dGhleSBzaG91bGRuJ3QgdGhyb3VnaCB0aGVzZT8gIEhvdyBkbyB3ZQ0KPiBndWFyYW50ZWUgdGhh
dD8NCg0KSSB3aWxsIG1vdmUgdGhlc2UgdG8gcHJfZGVidWcoKQ0KDQo+IA0KPiA+ICsJfQ0KPiA+
ICsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcHJfZXJyKCIlcyBFcnJvcjogSW52YWxpZCBhdHRy
aWJ1dGUgKCVkKVxuIiwNCj4gPiArCQkJIF9fZnVuY19fLCBwYW11X2F0dHItPmF0dHJpYnV0ZSk7
DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7
DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmZpb19tc2lfbWFwKHN0cnVjdCB2Zmlv
X2lvbW11ICppb21tdSwNCj4gPiArCQkJc3RydWN0IHZmaW9fcGFtdV9tc2lfYmFua19tYXAgKm1z
aV9tYXAsIGludCBwcm90KSB7DQo+ID4gKwlzdHJ1Y3QgbXNpX3JlZ2lvbiByZWdpb247DQo+ID4g
KwlpbnQgd2luZG93Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBtc2lfZ2V0
X3JlZ2lvbihtc2lfbWFwLT5tc2lfYmFua19pbmRleCwgJnJlZ2lvbik7DQo+ID4gKwlpZiAocmV0
KSB7DQo+ID4gKwkJcHJfZXJyKCIlcyBNU0kgcmVnaW9uICglZCkgbm90IGZvdW5kXG4iLCBfX2Z1
bmNfXywNCj4gPiArCQkgICAgICAgbXNpX21hcC0+bXNpX2JhbmtfaW5kZXgpOw0KPiA+ICsJCXJl
dHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJd2luZG93ID0gaW92YV90b193aW4oaW9t
bXUsIG1zaV9tYXAtPmlvdmEpOw0KPiA+ICsJcmV0ID0gaW9tbXVfZG9tYWluX3dpbmRvd19lbmFi
bGUoaW9tbXUtPmRvbWFpbiwgd2luZG93LCByZWdpb24uYWRkciwNCj4gPiArCQkJCQkgcmVnaW9u
LnNpemUsIHByb3QpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCXByX2VycigiJXMgRXJyb3I6
IHVuYWJsZSB0byBtYXAgbXNpIHJlZ2lvblxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJldHVybiBy
ZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g
K3N0YXRpYyBpbnQgdmZpb19kb19tc2lfbWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwNCj4g
PiArCQkJc3RydWN0IHZmaW9fcGFtdV9tc2lfYmFua19tYXAgKm1zaV9tYXApIHsNCj4gPiArCXN0
cnVjdCB2ZmlvX21zaV9kbWEgKm1zaV9kbWE7DQo+ID4gKwlpbnQgcmV0LCBwcm90ID0gMDsNCj4g
PiArDQo+ID4gKwkvKiBSRUFEL1dSSVRFIGZyb20gZGV2aWNlIHBlcnNwZWN0aXZlICovDQo+ID4g
KwlpZiAobXNpX21hcC0+ZmxhZ3MgJiBWRklPX0RNQV9NQVBfRkxBR19XUklURSkNCj4gPiArCQlw
cm90IHw9IElPTU1VX1dSSVRFOw0KPiA+ICsJaWYgKG1zaV9tYXAtPmZsYWdzICYgVkZJT19ETUFf
TUFQX0ZMQUdfUkVBRCkNCj4gPiArCQlwcm90IHw9IElPTU1VX1JFQUQ7DQo+ID4gKw0KPiA+ICsJ
aWYgKCFwcm90KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOyAvKiBObyBSRUFEL1dSSVRFPyAqLw0K
PiA+ICsNCj4gPiArCXJldCA9IHZmaW9fbXNpX21hcChpb21tdSwgbXNpX21hcCwgcHJvdCk7DQo+
ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJbXNpX2RtYSA9
IGt6YWxsb2Moc2l6ZW9mKCptc2lfZG1hKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIW1zaV9k
bWEpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJbXNpX2RtYS0+aW92YSA9
IG1zaV9tYXAtPmlvdmE7DQo+ID4gKwltc2lfZG1hLT5iYW5rX2lkID0gbXNpX21hcC0+bXNpX2Jh
bmtfaW5kZXg7DQo+ID4gKwlsaXN0X2FkZCgmbXNpX2RtYS0+bmV4dCwgJmlvbW11LT5tc2lfZG1h
X2xpc3QpOw0KPiA+ICsJcmV0dXJuIDA7DQo+IA0KPiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgdXNl
ciBjcmVhdGVzIG11bHRpcGxlIE1TSSBtYXBwaW5ncyBhdCB0aGUgc2FtZSBpb3ZhPyAgV2hhdA0K
PiBoYXBwZW5zIHdoZW4gRE1BIG1hcHBpbmdzIG92ZXJsYXAgTVNJIG1hcHBpbmdzPw0KDQpHb29k
IHBvaW50LCB3aWxsIGNvcnJlY3QgdGhpcy4NCg0KPiAgU2hvdWxkbid0IHRoZXJlIGJlIHNvbWUg
bG9ja2luZw0KPiBhcm91bmQgbGlzdCBtYW5pcHVsYXRpb24/DQoNClllcywgd2lsbCBjb3JyZWN0
IHRoaXMgYXMgd2VsbC4NCg0KVGhhbmtzDQotQmhhcmF0DQoNCj4gDQo+ID4gK30NCj4gPiArDQo+
ID4gK3N0YXRpYyB2b2lkIHZmaW9fbXNpX3VubWFwKHN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSwg
ZG1hX2FkZHJfdCBpb3ZhKQ0KPiA+ICt7DQo+ID4gKwlpbnQgd2luZG93Ow0KPiA+ICsJd2luZG93
ID0gaW92YV90b193aW4oaW9tbXUsIGlvdmEpOw0KPiA+ICsJaW9tbXVfZG9tYWluX3dpbmRvd19k
aXNhYmxlKGlvbW11LT5kb21haW4sIHdpbmRvdyk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg
dmZpb19kb19tc2lfdW5tYXAoc3RydWN0IHZmaW9faW9tbXUgKmlvbW11LA0KPiA+ICsJCQkgICAg
IHN0cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfdW5tYXAgKm1zaV91bm1hcCkgew0KPiA+ICsJc3Ry
dWN0IHZmaW9fbXNpX2RtYSAqbWRtYSwgKm1kbWFfdG1wOw0KPiA+ICsNCj4gPiArCWxpc3RfZm9y
X2VhY2hfZW50cnlfc2FmZShtZG1hLCBtZG1hX3RtcCwgJmlvbW11LT5tc2lfZG1hX2xpc3QsIG5l
eHQpIHsNCj4gPiArCQlpZiAobWRtYS0+aW92YSA9PSBtc2lfdW5tYXAtPmlvdmEpIHsNCj4gPiAr
CQkJdmZpb19tc2lfdW5tYXAoaW9tbXUsIG1kbWEtPmlvdmEpOw0KPiA+ICsJCQlsaXN0X2RlbCgm
bWRtYS0+bmV4dCk7DQo+ID4gKwkJCWtmcmVlKG1kbWEpOw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4g
PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gK30NCj4g
PiArc3RhdGljIHZvaWQgKnZmaW9faW9tbXVfZnNsX3BhbXVfb3Blbih1bnNpZ25lZCBsb25nIGFy
Zykgew0KPiA+ICsJc3RydWN0IHZmaW9faW9tbXUgKmlvbW11Ow0KPiA+ICsNCj4gPiArCWlmIChh
cmcgIT0gVkZJT19GU0xfUEFNVV9JT01NVSkNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM
KTsNCj4gPiArDQo+ID4gKwlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKCppb21tdSksIEdGUF9LRVJO
RUwpOw0KPiA+ICsJaWYgKCFpb21tdSkNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsN
Cj4gPiArDQo+ID4gKwlJTklUX0xJU1RfSEVBRCgmaW9tbXUtPmdyb3VwX2xpc3QpOw0KPiA+ICsJ
aW9tbXUtPmRtYV9saXN0ID0gUkJfUk9PVDsNCj4gPiArCUlOSVRfTElTVF9IRUFEKCZpb21tdS0+
bXNpX2RtYV9saXN0KTsNCj4gPiArCW11dGV4X2luaXQoJmlvbW11LT5sb2NrKTsNCj4gPiArDQo+
ID4gKwkvKg0KPiA+ICsJICogV2lzaCB3ZSBkaWRuJ3QgaGF2ZSB0byBrbm93IGFib3V0IGJ1c190
eXBlIGhlcmUuDQo+ID4gKwkgKi8NCj4gPiArCWlvbW11LT5kb21haW4gPSBpb21tdV9kb21haW5f
YWxsb2MoJnBjaV9idXNfdHlwZSk7DQo+ID4gKwlpZiAoIWlvbW11LT5kb21haW4pIHsNCj4gPiAr
CQlrZnJlZShpb21tdSk7DQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7DQo+ID4gKwl9DQo+
ID4gKw0KPiA+ICsJcmV0dXJuIGlvbW11Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p
ZCB2ZmlvX2lvbW11X2ZzbF9wYW11X3JlbGVhc2Uodm9pZCAqaW9tbXVfZGF0YSkgew0KPiA+ICsJ
c3RydWN0IHZmaW9faW9tbXUgKmlvbW11ID0gaW9tbXVfZGF0YTsNCj4gPiArCXN0cnVjdCB2Zmlv
X2dyb3VwICpncm91cCwgKmdyb3VwX3RtcDsNCj4gPiArCXN0cnVjdCB2ZmlvX21zaV9kbWEgKm1k
bWEsICptZG1hX3RtcDsNCj4gPiArCXN0cnVjdCByYl9ub2RlICpub2RlOw0KPiA+ICsNCj4gPiAr
CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShncm91cCwgZ3JvdXBfdG1wLCAmaW9tbXUtPmdyb3Vw
X2xpc3QsIG5leHQpIHsNCj4gPiArCQlpb21tdV9kZXRhY2hfZ3JvdXAoaW9tbXUtPmRvbWFpbiwg
Z3JvdXAtPmlvbW11X2dyb3VwKTsNCj4gPiArCQlsaXN0X2RlbCgmZ3JvdXAtPm5leHQpOw0KPiA+
ICsJCWtmcmVlKGdyb3VwKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl3aGlsZSAoKG5vZGUgPSBy
Yl9maXJzdCgmaW9tbXUtPmRtYV9saXN0KSkpIHsNCj4gPiArCQlzdHJ1Y3QgdmZpb19kbWEgKmRt
YSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCB2ZmlvX2RtYSwgbm9kZSk7DQo+ID4gKwkJc2l6ZV90
IHNpemUgPSBkbWEtPnNpemU7DQo+ID4gKwkJdmZpb19yZW1vdmVfZG1hX292ZXJsYXAoaW9tbXUs
IGRtYS0+aW92YSwgJnNpemUsIGRtYSk7DQo+ID4gKwkJaWYgKFdBUk5fT04oIXNpemUpKQ0KPiA+
ICsJCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh
ZmUobWRtYSwgbWRtYV90bXAsICZpb21tdS0+bXNpX2RtYV9saXN0LCBuZXh0KSB7DQo+ID4gKwkJ
dmZpb19tc2lfdW5tYXAoaW9tbXUsIG1kbWEtPmlvdmEpOw0KPiA+ICsJCWxpc3RfZGVsKCZtZG1h
LT5uZXh0KTsNCj4gPiArCQlrZnJlZShtZG1hKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpb21t
dV9kb21haW5fZnJlZShpb21tdS0+ZG9tYWluKTsNCj4gPiArCWlvbW11LT5kb21haW4gPSBOVUxM
Ow0KPiA+ICsJa2ZyZWUoaW9tbXUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgbG9uZyB2
ZmlvX2lvbW11X2ZzbF9wYW11X2lvY3RsKHZvaWQgKmlvbW11X2RhdGEsDQo+ID4gKwkJCQkgICB1
bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykgew0KPiA+ICsJc3RydWN0IHZmaW9f
aW9tbXUgKmlvbW11ID0gaW9tbXVfZGF0YTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbWluc3o7DQo+
ID4gKw0KPiA+ICsJaWYgKGNtZCA9PSBWRklPX0NIRUNLX0VYVEVOU0lPTikgew0KPiA+ICsJCXN3
aXRjaCAoYXJnKSB7DQo+ID4gKwkJY2FzZSBWRklPX0ZTTF9QQU1VX0lPTU1VOg0KPiA+ICsJCQly
ZXR1cm4gMTsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCQl9DQo+
ID4gKwl9IGVsc2UgaWYgKGNtZCA9PSBWRklPX0lPTU1VX01BUF9ETUEpIHsNCj4gPiArCQlzdHJ1
Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIG1hcDsNCj4gPiArCQl1aW50MzJfdCBtYXNrID0g
VkZJT19ETUFfTUFQX0ZMQUdfUkVBRCB8DQo+ID4gKwkJCQlWRklPX0RNQV9NQVBfRkxBR19XUklU
RTsNCj4gPiArDQo+ID4gKwkJbWluc3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdmZpb19pb21tdV90
eXBlMV9kbWFfbWFwLCBzaXplKTsNCj4gPiArDQo+ID4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZt
YXAsICh2b2lkIF9fdXNlciAqKWFyZywgbWluc3opKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsN
Cj4gPiArDQo+ID4gKwkJaWYgKG1hcC5hcmdzeiA8IG1pbnN6IHx8IG1hcC5mbGFncyAmIH5tYXNr
KQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIHZmaW9fZG1h
X2RvX21hcChpb21tdSwgJm1hcCk7DQo+ID4gKw0KPiA+ICsJfSBlbHNlIGlmIChjbWQgPT0gVkZJ
T19JT01NVV9VTk1BUF9ETUEpIHsNCj4gPiArCQlzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFf
dW5tYXAgdW5tYXA7DQo+ID4gKwkJbG9uZyByZXQ7DQo+ID4gKw0KPiA+ICsJCW1pbnN6ID0gb2Zm
c2V0b2ZlbmQoc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX3VubWFwLCBzaXplKTsNCj4gPiAr
DQo+ID4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1bm1hcCwgKHZvaWQgX191c2VyICopYXJnLCBt
aW5zeikpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArCQlpZiAodW5tYXAu
YXJnc3ogPCBtaW5zeiB8fCB1bm1hcC5mbGFncykNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+
ID4gKw0KPiA+ICsJCXJldCA9IHZmaW9fZG1hX2RvX3VubWFwKGlvbW11LCAmdW5tYXApOw0KPiA+
ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJCXJldHVybiBj
b3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdW5tYXAsIG1pbnN6KTsNCj4gPiArCX0g
ZWxzZSBpZiAoY21kID09IFZGSU9fSU9NTVVfUEFNVV9HRVRfQVRUUikgew0KPiA+ICsJCXN0cnVj
dCB2ZmlvX3BhbXVfYXR0ciBwYW11X2F0dHI7DQo+ID4gKw0KPiA+ICsJCW1pbnN6ID0gb2Zmc2V0
b2ZlbmQoc3RydWN0IHZmaW9fcGFtdV9hdHRyLCBhdHRyX2luZm8pOw0KPiA+ICsJCWlmIChjb3B5
X2Zyb21fdXNlcigmcGFtdV9hdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIG1pbnN6KSkNCj4gPiAr
CQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsJCWlmIChwYW11X2F0dHIuYXJnc3ogPCBt
aW5zeikNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJCXZmaW9faGFuZGxl
X2dldF9hdHRyKGlvbW11LCAmcGFtdV9hdHRyKTsNCj4gPiArDQo+ID4gKwkJY29weV90b191c2Vy
KCh2b2lkIF9fdXNlciAqKWFyZywgJnBhbXVfYXR0ciwgbWluc3opOw0KPiA+ICsJCXJldHVybiAw
Ow0KPiA+ICsJfSBlbHNlIGlmIChjbWQgPT0gVkZJT19JT01NVV9QQU1VX1NFVF9BVFRSKSB7DQo+
ID4gKwkJc3RydWN0IHZmaW9fcGFtdV9hdHRyIHBhbXVfYXR0cjsNCj4gPiArDQo+ID4gKwkJbWlu
c3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdmZpb19wYW11X2F0dHIsIGF0dHJfaW5mbyk7DQo+ID4g
KwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYW11X2F0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgbWlu
c3opKQ0KPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKwkJaWYgKHBhbXVfYXR0
ci5hcmdzeiA8IG1pbnN6KQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJ
dmZpb19oYW5kbGVfc2V0X2F0dHIoaW9tbXUsICZwYW11X2F0dHIpOw0KPiA+ICsJCXJldHVybiAw
Ow0KPiA+ICsJfSBlbHNlIGlmIChjbWQgPT0gVkZJT19JT01NVV9QQU1VX0dFVF9NU0lfQkFOS19D
T1VOVCkgew0KPiA+ICsJCXJldHVybiBtc2lfZ2V0X3JlZ2lvbl9jb3VudCgpOw0KPiA+ICsJfSBl
bHNlIGlmIChjbWQgPT0gVkZJT19JT01NVV9QQU1VX01BUF9NU0lfQkFOSykgew0KPiA+ICsJCXN0
cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfbWFwIG1zaV9tYXA7DQo+ID4gKw0KPiA+ICsJCW1pbnN6
ID0gb2Zmc2V0b2ZlbmQoc3RydWN0IHZmaW9fcGFtdV9tc2lfYmFua19tYXAsIGlvdmEpOw0KPiA+
ICsJCWlmIChjb3B5X2Zyb21fdXNlcigmbXNpX21hcCwgKHZvaWQgX191c2VyICopYXJnLCBtaW5z
eikpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArCQlpZiAobXNpX21hcC5h
cmdzeiA8IG1pbnN6KQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJdmZp
b19kb19tc2lfbWFwKGlvbW11LCAmbXNpX21hcCk7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9
IGVsc2UgaWYgKGNtZCA9PSBWRklPX0lPTU1VX1BBTVVfVU5NQVBfTVNJX0JBTkspIHsNCj4gPiAr
CQlzdHJ1Y3QgdmZpb19wYW11X21zaV9iYW5rX3VubWFwIG1zaV91bm1hcDsNCj4gPiArDQo+ID4g
KwkJbWluc3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdmZpb19wYW11X21zaV9iYW5rX3VubWFwLCBp
b3ZhKTsNCj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJm1zaV91bm1hcCwgKHZvaWQgX191c2Vy
ICopYXJnLCBtaW5zeikpDQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArCQlp
ZiAobXNpX3VubWFwLmFyZ3N6IDwgbWluc3opDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+
ICsNCj4gPiArCQl2ZmlvX2RvX21zaV91bm1hcChpb21tdSwgJm1zaV91bm1hcCk7DQo+ID4gKwkJ
cmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAtRU5PVFRZOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZmaW9faW9tbXVfZnNsX3BhbXVfYXR0YWNo
X2dyb3VwKHZvaWQgKmlvbW11X2RhdGEsDQo+ID4gKwkJCQkJIHN0cnVjdCBpb21tdV9ncm91cCAq
aW9tbXVfZ3JvdXApIHsNCj4gPiArCXN0cnVjdCB2ZmlvX2lvbW11ICppb21tdSA9IGlvbW11X2Rh
dGE7DQo+ID4gKwlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsICp0bXA7DQo+ID4gKwlpbnQgcmV0
Ow0KPiA+ICsNCj4gPiArCWdyb3VwID0ga3phbGxvYyhzaXplb2YoKmdyb3VwKSwgR0ZQX0tFUk5F
TCk7DQo+ID4gKwlpZiAoIWdyb3VwKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4g
PiArCW11dGV4X2xvY2soJmlvbW11LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlsaXN0X2Zvcl9lYWNo
X2VudHJ5KHRtcCwgJmlvbW11LT5ncm91cF9saXN0LCBuZXh0KSB7DQo+ID4gKwkJaWYgKHRtcC0+
aW9tbXVfZ3JvdXAgPT0gaW9tbXVfZ3JvdXApIHsNCj4gPiArCQkJbXV0ZXhfdW5sb2NrKCZpb21t
dS0+bG9jayk7DQo+ID4gKwkJCWtmcmVlKGdyb3VwKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7
DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGlvbW11X2F0dGFjaF9ncm91
cChpb21tdS0+ZG9tYWluLCBpb21tdV9ncm91cCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJ
bXV0ZXhfdW5sb2NrKCZpb21tdS0+bG9jayk7DQo+ID4gKwkJa2ZyZWUoZ3JvdXApOw0KPiA+ICsJ
CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZ3JvdXAtPmlvbW11X2dyb3VwID0g
aW9tbXVfZ3JvdXA7DQo+ID4gKwlsaXN0X2FkZCgmZ3JvdXAtPm5leHQsICZpb21tdS0+Z3JvdXBf
bGlzdCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZpb21tdS0+bG9jayk7DQo+ID4gKw0K
PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZmaW9faW9t
bXVfZnNsX3BhbXVfZGV0YWNoX2dyb3VwKHZvaWQgKmlvbW11X2RhdGEsDQo+ID4gKwkJCQkJICBz
dHJ1Y3QgaW9tbXVfZ3JvdXAgKmlvbW11X2dyb3VwKSB7DQo+ID4gKwlzdHJ1Y3QgdmZpb19pb21t
dSAqaW9tbXUgPSBpb21tdV9kYXRhOw0KPiA+ICsJc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwOw0K
PiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmlvbW11LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlsaXN0
X2Zvcl9lYWNoX2VudHJ5KGdyb3VwLCAmaW9tbXUtPmdyb3VwX2xpc3QsIG5leHQpIHsNCj4gPiAr
CQlpZiAoZ3JvdXAtPmlvbW11X2dyb3VwID09IGlvbW11X2dyb3VwKSB7DQo+ID4gKwkJCWlvbW11
X2RldGFjaF9ncm91cChpb21tdS0+ZG9tYWluLCBpb21tdV9ncm91cCk7DQo+ID4gKwkJCWxpc3Rf
ZGVsKCZncm91cC0+bmV4dCk7DQo+ID4gKwkJCWtmcmVlKGdyb3VwKTsNCj4gPiArCQkJYnJlYWs7
DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmaW9tbXUtPmxv
Y2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9faW9tbXVf
ZHJpdmVyX29wcyB2ZmlvX2lvbW11X2RyaXZlcl9vcHNfZnNsX3BhbXUgPSB7DQo+ID4gKwkubmFt
ZQkJPSAidmZpby1pb21tdS1mc2xfcGFtdSIsDQo+ID4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUs
DQo+ID4gKwkub3BlbgkJPSB2ZmlvX2lvbW11X2ZzbF9wYW11X29wZW4sDQo+ID4gKwkucmVsZWFz
ZQk9IHZmaW9faW9tbXVfZnNsX3BhbXVfcmVsZWFzZSwNCj4gPiArCS5pb2N0bAkJPSB2ZmlvX2lv
bW11X2ZzbF9wYW11X2lvY3RsLA0KPiA+ICsJLmF0dGFjaF9ncm91cAk9IHZmaW9faW9tbXVfZnNs
X3BhbXVfYXR0YWNoX2dyb3VwLA0KPiA+ICsJLmRldGFjaF9ncm91cAk9IHZmaW9faW9tbXVfZnNs
X3BhbXVfZGV0YWNoX2dyb3VwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2lu
aXQgdmZpb19pb21tdV9mc2xfcGFtdV9pbml0KHZvaWQpIHsNCj4gPiArCWlmICghaW9tbXVfcHJl
c2VudCgmcGNpX2J1c190eXBlKSkNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gdmZpb19yZWdpc3Rlcl9pb21tdV9kcml2ZXIoJnZmaW9faW9tbXVfZHJpdmVyX29w
c19mc2xfcGFtdSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCB2Zmlv
X2lvbW11X2ZzbF9wYW11X2NsZWFudXAodm9pZCkgew0KPiA+ICsJdmZpb191bnJlZ2lzdGVyX2lv
bW11X2RyaXZlcigmdmZpb19pb21tdV9kcml2ZXJfb3BzX2ZzbF9wYW11KTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArbW9kdWxlX2luaXQodmZpb19pb21tdV9mc2xfcGFtdV9pbml0KTsNCj4gPiArbW9k
dWxlX2V4aXQodmZpb19pb21tdV9mc2xfcGFtdV9jbGVhbnVwKTsNCj4gPiArDQo+ID4gK01PRFVM
RV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp
Ow0KPiA+ICtNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOw0KPiA+ICtNT0RVTEVfREVTQ1JJ
UFRJT04oRFJJVkVSX0RFU0MpOw0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgv
dmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaA0KPiA+IGluZGV4IDBmZDQ3ZjUuLmQz
NTkwNTUgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaA0KPiA+ICsr
KyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgNCj4gPiBAQCAtMjMsNiArMjMsNyBAQA0KPiA+
DQo+ID4gICNkZWZpbmUgVkZJT19UWVBFMV9JT01NVQkJMQ0KPiA+ICAjZGVmaW5lIFZGSU9fU1BB
UFJfVENFX0lPTU1VCQkyDQo+ID4gKyNkZWZpbmUgVkZJT19GU0xfUEFNVV9JT01NVQkJMw0KPiA+
DQo+ID4gIC8qDQo+ID4gICAqIFRoZSBJT0NUTCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgZm9yIGV4
dGVuc2liaWxpdHkgYnkgZW1iZWRkaW5nIHRoZQ0KPiA+IEBAIC00NTEsNCArNDUyLDEwMyBAQCBz
dHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfaW5mbyB7DQo+ID4NCj4gPiAgLyogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN
Cj4gPiAqLw0KPiA+DQo+ID4gKy8qKioqKioqKioqKiBBUElzIGZvciBWRklPX1BBTVUgdHlwZSBv
bmx5ICoqKioqKioqKioqKioqKiovDQo+ID4gKy8qDQo+ID4gKyAqIFZGSU9fSU9NTVVfUEFNVV9H
RVRfQVRUUiAtIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE3LA0KPiA+ICsgKgkJCQkgIHN0
cnVjdCB2ZmlvX3BhbXVfYXR0cikNCj4gPiArICoNCj4gPiArICogR2V0cyB0aGUgaW9tbXUgYXR0
cmlidXRlcyBmb3IgdGhlIGN1cnJlbnQgdmZpbyBjb250YWluZXIuDQo+ID4gKyAqIENhbGxlciBz
ZXRzIGFyZ3N6IGFuZCBhdHRyaWJ1dGUuICBUaGUgaW9jdGwgZmlsbHMgaW4NCj4gPiArICogdGhl
IHByb3ZpZGVkIHN0cnVjdCB2ZmlvX3BhbXVfYXR0ciBiYXNlZCBvbiB0aGUgYXR0cmlidXRlDQo+
ID4gKyAqIHZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Ms
IC1lcnJubyBvbiBmYWlsdXJlICAqLyBzdHJ1Y3QgdmZpb19wYW11X2F0dHINCj4gPiArew0KPiA+
ICsJX191MzIJYXJnc3o7DQo+ID4gKwlfX3UzMglmbGFnczsJLyogbm8gZmxhZ3MgY3VycmVudGx5
ICovDQo+ID4gKyNkZWZpbmUgVkZJT19BVFRSX0dFT01FVFJZCTANCj4gPiArI2RlZmluZSBWRklP
X0FUVFJfV0lORE9XUwkxDQo+ID4gKyNkZWZpbmUgVkZJT19BVFRSX1BBTVVfU1RBU0gJMg0KPiA+
ICsJX191MzIJYXR0cmlidXRlOw0KPiA+ICsNCj4gPiArCXVuaW9uIHsNCj4gPiArCQkvKiBWRklP
X0FUVFJfR0VPTUVUUlkgKi8NCj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQkvKiBmaXJzdCBhZGRy
IHRoYXQgY2FuIGJlIG1hcHBlZCAqLw0KPiA+ICsJCQlfX3U2NCBhcGVydHVyZV9zdGFydDsNCj4g
PiArCQkJLyogbGFzdCBhZGRyIHRoYXQgY2FuIGJlIG1hcHBlZCAqLw0KPiA+ICsJCQlfX3U2NCBh
cGVydHVyZV9lbmQ7DQo+ID4gKwkJfSBhdHRyOw0KPiA+ICsNCj4gPiArCQkvKiBWRklPX0FUVFJf
V0lORE9XUyAqLw0KPiA+ICsJCV9fdTMyIHdpbmRvd3M7ICAvKiBudW1iZXIgb2Ygd2luZG93cyBp
biB0aGUgYXBlcnR1cmUNCj4gPiArCQkJCSAqIGluaXRpYWxseSB0aGlzIHdpbGwgYmUgdGhlIG1h
eCBudW1iZXINCj4gPiArCQkJCSAqIG9mIHdpbmRvd3MgdGhhdCBjYW4gYmUgc2V0DQo+ID4gKwkJ
CQkgKi8NCj4gPiArCQkvKiBWRklPX0FUVFJfUEFNVV9TVEFTSCAqLw0KPiA+ICsJCXN0cnVjdCB7
DQo+ID4gKwkJCV9fdTMyIGNwdTsJLyogQ1BVIG51bWJlciBmb3Igc3Rhc2hpbmcgKi8NCj4gPiAr
CQkJX191MzIgY2FjaGU7CS8qIGNhY2hlIElEIGZvciBzdGFzaGluZyAqLw0KPiA+ICsJCX0gc3Rh
c2g7DQo+ID4gKwl9IGF0dHJfaW5mbzsNCj4gPiArfTsNCj4gPiArI2RlZmluZSBWRklPX0lPTU1V
X1BBTVVfR0VUX0FUVFIgIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE3KQ0KPiA+ICsNCj4g
PiArLyoNCj4gPiArICogVkZJT19JT01NVV9QQU1VX1NFVF9BVFRSIC0gX0lPKFZGSU9fVFlQRSwg
VkZJT19CQVNFICsgMTgsDQo+ID4gKyAqCQkJCSAgc3RydWN0IHZmaW9fcGFtdV9hdHRyKQ0KPiA+
ICsgKg0KPiA+ICsgKiBTZXRzIHRoZSBpb21tdSBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCB2
ZmlvIGNvbnRhaW5lci4NCj4gPiArICogQ2FsbGVyIHNldHMgc3RydWN0IHZmaW9fcGFtdSBhdHRy
LCBpbmNsdWRpbmcgYXJnc3ogYW5kIGF0dHJpYnV0ZQ0KPiA+ICthbmQNCj4gPiArICogc2V0dGlu
ZyBhbnkgZmllbGRzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgYXR0cmlidXRlLg0KPiA+ICsgKiBS
ZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUgICovICNkZWZpbmUNCj4gPiAr
VkZJT19JT01NVV9QQU1VX1NFVF9BVFRSICBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxOCkN
Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFZGSU9fSU9NTVVfUEFNVV9HRVRfTVNJX0JBTktfQ09V
TlQgLSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKw0KPiA+ICsxOSwgX191MzIpDQo+ID4gKyAq
DQo+ID4gKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBNU0kgYmFua3MgZm9yIHRoaXMgcGxhdGZv
cm0uICBUaGlzIHRlbGxzDQo+ID4gK3VzZXIgc3BhY2UNCj4gPiArICogaG93IG1hbnkgYXBlcnR1
cmUgd2luZG93cyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIE1TSSBiYW5rcyB3aGVuDQo+ID4gK3Nl
dHRpbmcNCj4gPiArICogdGhlIFBBTVUgZ2VvbWV0cnkgYW5kIHdpbmRvdyBjb3VudC4NCj4gPiAr
ICogUmV0dXJuOiBfX3UzMiBiYW5rIGNvdW50IG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJl
ICAqLyAjZGVmaW5lDQo+ID4gK1ZGSU9fSU9NTVVfUEFNVV9HRVRfTVNJX0JBTktfQ09VTlQgX0lP
KFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTkpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBWRklP
X0lPTU1VX1BBTVVfTUFQX01TSV9CQU5LIC0gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMjAs
DQo+ID4gKyAqCQkJCSAgICAgIHN0cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfbWFwKQ0KPiA+ICsg
Kg0KPiA+ICsgKiBNYXBzIHRoZSBNU0kgYmFuayBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGFuZCBp
b3ZhLiAgVXNlciBzcGFjZQ0KPiA+ICttdXN0DQo+ID4gKyAqIGNhbGwgdGhpcyBpb2N0bCBvbmNl
IGZvciBlYWNoIE1TSSBiYW5rIChjb3VudCBvZiBiYW5rcyBpcyByZXR1cm5lZA0KPiA+ICtieQ0K
PiA+ICsgKiBWRklPX0lPTU1VX1BBTVVfR0VUX01TSV9CQU5LX0NPVU5UKS4NCj4gPiArICogQ2Fs
bGVyIHByb3ZpZGVzIHN0cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfbWFwIHdpdGggYWxsIGZpZWxk
cyBzZXQuDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZSAg
Ki8NCj4gPiArDQo+ID4gK3N0cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfbWFwIHsNCj4gPiArCV9f
dTMyCWFyZ3N6Ow0KPiA+ICsJX191MzIJZmxhZ3M7CQkvKiBubyBmbGFncyBjdXJyZW50bHkgKi8N
Cj4gPiArCV9fdTMyCW1zaV9iYW5rX2luZGV4OwkvKiB0aGUgaW5kZXggb2YgdGhlIE1TSSBiYW5r
ICovDQo+ID4gKwlfX3U2NAlpb3ZhOwkJLyogdGhlIGlvdmEgdGhlIGJhbmsgaXMgdG8gYmUgbWFw
cGVkIHRvICovDQo+ID4gK307DQo+ID4gKyNkZWZpbmUgVkZJT19JT01NVV9QQU1VX01BUF9NU0lf
QkFOSyAgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMjApDQo+ID4gKw0KPiA+ICsvKg0KPiA+
ICsgKiBWRklPX0lPTU1VX1BBTVVfVU5NQVBfTVNJX0JBTksgLSBfSU8oVkZJT19UWVBFLCBWRklP
X0JBU0UgKyAyMSwNCj4gPiArICoJCQkJCXN0cnVjdCB2ZmlvX3BhbXVfbXNpX2JhbmtfdW5tYXAp
DQo+ID4gKyAqDQo+ID4gKyAqIFVubWFwcyB0aGUgTVNJIGJhbmsgYXQgdGhlIHNwZWNpZmllZCBp
b3ZhLg0KPiA+ICsgKiBDYWxsZXIgcHJvdmlkZXMgc3RydWN0IHZmaW9fcGFtdV9tc2lfYmFua191
bm1hcCB3aXRoIGFsbCBmaWVsZHMgc2V0Lg0KPiA+ICsgKiBPcGVyYXRlcyBvbiBWRklPIGZpbGUg
ZGVzY3JpcHRvciAoL2Rldi92ZmlvL3ZmaW8pLg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vz
cywgLWVycm5vIG9uIGZhaWx1cmUgICovDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdmZpb19wYW11X21z
aV9iYW5rX3VubWFwIHsNCj4gPiArCV9fdTMyCWFyZ3N6Ow0KPiA+ICsJX191MzIJZmxhZ3M7CS8q
IG5vIGZsYWdzIGN1cnJlbnRseSAqLw0KPiA+ICsJX191NjQJaW92YTsJLyogdGhlIGlvdmEgdG8g
YmUgdW5tYXBwZWQgdG8gKi8NCj4gPiArfTsNCj4gPiArI2RlZmluZSBWRklPX0lPTU1VX1BBTVVf
VU5NQVBfTVNJX0JBTksgIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArDQo+ID4gKzIxKQ0KPiA+
ICsNCj4gPiAgI2VuZGlmIC8qIF9VQVBJVkZJT19IICovDQo+IA0KPiANCj4gDQoNCg==
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help