Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Feb 2018 09:10:21 +0000
From:      <Elliott.Rabe@dell.com>
To:        <kib@freebsd.org>
Cc:        <freebsd-hackers@freebsd.org>, <Eric.Van.Gyzen@dell.com>, <alc@FreeBSD.org>, <markj@FreeBSD.org>, <truckman@FreeBSD.org>
Subject:   Re: Stale memory during post fork cow pmap update
Message-ID:  <5A82AB7C.6090404@dell.com>
In-Reply-To: <20180210225608.GM33564@kib.kiev.ua>
References:  <5A7E7F2B.80900@dell.com> <20180210111848.GL33564@kib.kiev.ua> <5A7F6A7C.80607@dell.com> <20180210225608.GM33564@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
--_003_5A82AB7C6090404dellcom_
Content-Type: text/plain; charset="utf-8"
Content-ID: <3B969E07ED0FE9448795295A6E6E9CD3@dell.com>
Content-Transfer-Encoding: base64

DQpPbiAwMi8xMC8yMDE4IDA0OjU2IFBNLCBLb25zdGFudGluIEJlbG91c292IHdyb3RlOg0KPiBP
biBTYXQsIEZlYiAxMCwgMjAxOCBhdCAwOTo1NjoyMFBNICswMDAwLCBFbGxpb3R0LlJhYmVAZGVs
bC5jb20gd3JvdGU6DQo+PiBPbiAwMi8xMC8yMDE4IDA1OjE4IEFNLCBLb25zdGFudGluIEJlbG91
c292IHdyb3RlOg0KPj4+IE9uIFNhdCwgRmViIDEwLCAyMDE4IGF0IDA1OjEyOjExQU0gKzAwMDAs
IEVsbGlvdHQuUmFiZUBkZWxsLmNvbSB3cm90ZToNCj4+Pj4gLi4uDQo+Pj4+IEkndmUgYmVlbiBo
dW50aW5nIGZvciB0aGUgcm9vdCBjYXVzZSBvZiBlbHVzaXZlLCBzbGlnaHQgbWVtb3J5DQo+Pj4+
IGNvcnJ1cHRpb25zIGluIGEgbGFyZ2UsIGNvbXBsZXggcHJvY2VzcyB0aGF0IG1hbmFnZXMgbWFu
eSB0aHJlYWRzLiBBbGwNCj4+Pj4gZmFpbHVyZXMgYW5kIGV4cGVyaW1lbnRhdGlvbiB0aHVzIGZh
ciBoYXMgYmVlbiBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlDQo+Pj4+IG1hY2hpbmVzLCBhbmQgcG1h
cF9wY2lkIGlzIG5vdCBpbiB1c2UuDQo+Pj4+IC4uLg0KPj4+IEl0IGlzIG5lY2Vzc2FyeSBmb3Ig
eW91IHRvIHByb3ZpZGUgdGhlIHRlc3QgYW5kIHByb3ZpZGUNCj4+PiBzb21lIGtpbmQgb2YgdGhl
IHRlc3QgdHJhY2Ugb3IgdGhlIG91dHB1dCB3aGljaCBpbGx1c3RyYXRlcyB0aGUgaXNzdWUNCj4+
PiB5b3UgZm91bmQuDQo+PiBIZXJlIGlzIHRoZSBzZXF1ZW5jZSBvZiBhY3Rpb25zIEkgYW0gcmVm
ZXJyaW5nIHRvLiAgVGhlcmUgaXMgb25seSBvbmUNCj4+IGxvY2ssIGFuZCBhbGwgdGhlIHdyaXRl
cy9yZWFkcyBhcmUgb24gb25lIGxvZ2ljYWwgcGFnZS4NCj4+DQo+PiArVGhlIHByb2Nlc3MgaXMg
Zm9ya2VkIHRyYW5zaXRpb25pbmcgYSBtYXAgZW50cnkgdG8gQ09XDQo+PiArVGhyZWFkIEEgd3Jp
dGVzIHRvIGEgcGFnZSBvbiB0aGUgbWFwIGVudHJ5LCBmYXVsdHMsIHVwZGF0ZXMgdGhlIHBtYXAg
dG8NCj4+IHdyaXRhYmxlIGF0IGEgbmV3IHBoeXMgYWRkciwgYW5kIHN0YXJ0cyBUTEIgaW52YWxp
ZGF0aW9ucy4uLg0KPj4gK1RocmVhZCBCIGFjcXVpcmVzIGEgbG9jaywgd3JpdGVzIHRvIGEgbG9j
YXRpb24gb24gdGhlIG5ldyBwaHlzIGFkZHIsDQo+PiBhbmQgcmVsZWFzZXMgdGhlIGxvY2sNCj4+
ICtUaHJlYWQgQyBhY3F1aXJlcyB0aGUgbG9jaywgcmVhZHMgZnJvbSB0aGUgbG9jYXRpb24gb24g
dGhlIG9sZCBwaHlzIGFkZHIuLi4NCj4+ICtUaHJlYWQgQSAuLi5jb250aW51ZXMgdGhlIFRMQiBp
bnZhbGlkYXRpb25zIHdoaWNoIGFyZSBjb21wbGV0ZWQNCj4+ICtUaHJlYWQgQyAuLi5yZWFkcyBm
cm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgbmV3IHBoeXMgYWRkciwgYW5kIHJlbGVhc2VzDQo+PiB0
aGUgbG9jaw0KPj4NCj4+IEluIHRoaXMgZXhhbXBsZSBUaHJlYWQgQiBhbmQgQyBbbG9jaywgdXNl
IGFuZCB1bmxvY2tdIHByb3Blcmx5IGFuZA0KPj4gbmVpdGhlciBvd24gdGhlIGxvY2sgYXQgdGhl
IHNhbWUgdGltZS4gIFRocmVhZCBBIHdhcyB3cml0aW5nIHNvbWV3aGVyZQ0KPj4gZWxzZSBvbiB0
aGUgcGFnZSBhbmQgc28gbmV2ZXIgaGFkL25lZWRlZCB0aGUgbG9jay4gIFRocmVhZCBCIHNlZXMg
YQ0KPj4gbG9jYXRpb24gdGhhdCBpcyBvbmx5IGV2ZXIgcmVhZHxtb2RpZmllZCB1bmRlciBhIGxv
Y2sgY2hhbmdlIGJlbmVhdGggaXQNCj4+IHdoaWxlIGl0IGlzIHRoZSBsb2NrIG93bmVyLg0KPiBJ
IGJlbGlldmUgeW91IG1lYW4gJ1RocmVhZCBDJyBpbiB0aGUgbGFzdCBzZW50ZW5jZS4NCllvdSBh
cmUgY29ycmVjdCwgSSBkaWQgbWVhbiBUaHJlYWQgQy4NCj4+IEkgd2lsbCBnZXQgYSB0ZXN0IHBh
dGNoIHRvZ2V0aGVyIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBhcyBzb29uIGFzIEkgY2FuLg0KPiBQ
bGVhc2UuDQoNClNvcnJ5IGZvciBteSBkZWxheWVkIHJlc3BvbnNlOyBJIGhhZCBiZWVuIHdvcmtp
bmcgb2ZmIGEgc2VwYXJhdGUgcHJvamVjdCANCmJhc2VkIG9uIHJlbGVuZy8xMS4xIGFuZCBpdCB0
b29rIG1lIGxvbmdlciB0aGVuIEkgZXhwZWN0ZWQgdG8gZ2V0IGEgZGV2IA0KcmlnIHNldHVwIG9m
ZiBvZiBtYXN0ZXIgb24gd2hpY2ggSSBjb3VsZCByZS1ldmFsdWF0ZSB0aGUgc2l0dWF0aW9uLg0K
DQpJIGFtIGF0dGFjaGluZyBteSB0ZXN0IGFwcGFyYXR1cywgaG93ZXZlciwgY2FsbGluZyBpdCBh
IHRlc3QgaXMgcHJvYmFibHkgDQphIGRpc3NlcnZpY2UgdG8gdGVzdHMgZXZlcnl3aGVyZS4gIEkg
Y29uc2lkZXIgdGhpcyBlbnRpcmUgZml4dHVyZSANCmRpc3Bvc2FibGUsIHNvIEkgZGlkbid0IGdl
dCBjYXJyaWVkIGF3YXkgdHJ5aW5nIHRvIHByb3Blcmx5IA0Kc3R5bGUvcGFydGl0aW9uL2xvY2F0
ZSB0aGUgY29kZS4gIEkgbmV2ZXIgd2FudGVkIGFueXRoaW5nIHRoaXMgDQpjb21wbGljYXRlZCBl
aXRoZXI7IGl0IHByZXR0eSBtdWNoIGp1c3QgZXZvbHZlZCBpbnRvIGEgZGV2ZWxvcG1lbnQgYWlk
IA0KdG8gc3BlbHVuayBhcm91bmQgaW4gdGhlIGZhdWx0L3BtYXAgaGFuZGxpbmcuICBNeSBhdHRl
bXB0cyB0aHVzLWZhciBhdCANCnJlZHVjaW5nIHRoZSBmaXh0dXJlIHRvIGJlIHVzZXItc3BhY2Ug
b25seSBoYXZlIG5vdCBiZWVuIHN1Y2Nlc3NmdWwuICANCkFkZGl0aW9uYWxseSwgSSBoYXZlIG5v
dGljZWQgdGhhdCB0aGUgZml4dHVyZSBpcyAvdmVyeS8gc2Vuc2l0aXZlIHRvIGFueSANCmNoYW5n
ZXMgaW4gdGltaW5nOyBzZXZlcmFsIG9mIHRoZSBkZWJ1Z2dpbmcgZW50cmllcyBldmVuIHNlZW0g
a2V5IHRvIA0KaGl0dGluZyB0aGUgcHJvYmxlbS4gIEkgZGlkbid0IGhhdmUgbXVjaCBsdWNrIGdl
dHRpbmcgdGhlIHByb2JsZW0gdG8gDQptYW5pZmVzdCBvbiBhIHZpcnR1YWwgbWFjaGluZSBndWVz
dCB3LyBhIFZpcnR1YWxCb3ggaG9zdCBlaXRoZXIuICBGb3IgDQphbGwgb2YgdGhlc2UgcmVhc29u
cywgSSBkb24ndCB0aGluayB0aGVyZSBpcyB2YWx1ZSBoZXJlIGluIHRyeWluZyB0byB1c2UgDQp0
aGlzIGFzIGFueSBzb3J0IG9mIHJlZ3Jlc3Npb24gZml4dHVyZSwgdW5sZXNzIHBlcmhhcHMgaWYg
c29tZW9uZSBpcyANCndpbGxpbmcgdG8gdHJ5IHRvIHR1cm4gaXQgaW50byBzb21ldGhpbmcgbGVz
cyByaWRpY3Vsb3VzLiAgRGVzcGl0ZSBhbGwgDQpzaG9ydGNvbWluZ3MsIG9uIG15IGhhcmR3YXJl
IGFueXdheXMsIGl0IGlzIGFibGUgdG8gcmVwcm9kdWNlIHRoZSANCmV4YW1wbGUgSSBkZXNjcmli
ZWQgcHJldHR5IG11Y2ggaW1tZWRpYXRlbHkgd2hlbiBJIHVzZSBpdCB3aXRoIHRoZSANCmRlYnVn
Z2luZyBrbm9iICItdiIuIEluc3RydWN0aW9ucyBhbmQgZXhwZWN0YXRpb25zIGFyZSBhdCB0aGUg
dG9wIG9mIHRoZSANCm1haW4gdGVzdCBmaXh0dXJlIHNvdXJjZSBmaWxlLg0KDQpJIGFtIGFsc28g
YXR0YWNoaW5nIGEgcGF0Y2ggdGhhdCBJIGhhdmUgYmVlbiB1c2luZyB0byBwcmV2ZW50IHRoZSAN
CnByb2JsZW0uICBJIHdhcyBsb29raW5nIGF0IHRoaW5ncyB3aXRoIGEgbXVjaCBuYXJyb3dlciB2
aWV3IGFuZCBtYWRlIHRoZSANCmNoYW5nZXMgZGlyZWN0bHkgaW4gcG1hcF9lbnRlci4gIEkgc3Vz
cGVjdCB0aGUgaW50ZXJuYWwgDQpkb3VibGUtdXBkYXRlLWludmFsaWRhdGUgaXMgc2xpZ2h0bHkg
YmV0dGVyIHBlcmZvcm1hbmNlIHdpc2UgdGhlbiB0YWtpbmcgDQp0d28gd2hvbGUgZmF1bHRzLCBi
dXQgSSBoYXZlbid0IGJlbmNobWFya2VkIGl0LCBpdCBwcm9iYWJseSBkb2Vzbid0IA0KbWF0dGVy
IG11Y2ggY29tcGFyZWQgdG8gdGhlIGNvc3QgYW5kIGZyZXF1ZW5jeSBvZiB0aGUgYWN0dWFsIGNv
cGllcywgYW5kIA0KaXQgYWxzbyBoYXMgdGhlIGRpc2FkdmFudGFnZSBvZiBiZWluZyBhcmNoaXRl
Y3R1cmUgc3BlY2lmaWMuICBJIGFsc28gDQpkb24ndCBmZWVsIGxpa2UgSSBoYXZlIGVub3VnaCBl
eHBlcmllbmNlIHdpdGggdGhlIHZtIGZhdWx0IGNvZGUgaW4gDQpnZW5lcmFsIGZvciBteSBjb21t
ZW50YXJ5IHRvIGJlIHZlcnkgdmFsdWFibGUgaGVyZS4gIEhvd2V2ZXIsIEkgZG8gDQp3b25kZXI6
IDEpIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2NlbmFyaW9zIHdoZXJlIGEgcG90ZW50aWFsbHkg
DQphY2Nlc3NpYmxlIHBhZ2UgbWlnaHQgYmUgdW5kZXJnb2luZyBhbiBbYWRkcmVzcyt3cml0YWJs
ZV0gY2hhbmdlIGluIHRoZSANCnNhbWUgd2F5ICh0aGlzIHNvcnQgb2YgdGhpbmcgc2VlbXMgaGFy
ZCB0byByZWFkIG91dCBvZiBjb2RlKSwgYW5kIDIpIGlmIA0KdGhlcmUgaXMgZXZlciBhbnkgbGVn
YWwgcmVhc29uIHdoeSBhbiBhY2Nlc3NpYmxlIHBhZ2Ugc2hvdWxkIGJlIA0KdW5kZXJnb2luZyBz
dWNoIGEgY2hhbmdlPyAgSWYgbm90LCBwZXJoYXBzIHdlIGNvdWxkIGNvbWUgdXAgd2l0aCBhbiAN
CmFwcHJvcHJpYXRlIHNhbml0eS1jaGVjayBjb25kaXRpb24gdG8gZ3VhcmQgYWdhaW5zdCBhbnkg
Y2FzZXMgb2YgdGhpcyANCnNvcnQgb2YgdGhpbmcgYWNjaWRlbnRhbGx5IHNsaXBwaW5nIGluIHRo
ZSBmdXR1cmUuDQoNClRoZSBhdHRhY2hlZCBnaXQgcGF0Y2hlcyBzaG91bGQgYXBwbHkgYW5kIGJ1
aWxkIGNsZWFubHkgb24gbWFzdGVyIGNvbW1pdCANCmZlMGVlNWMuICBJIGhhdmUgdmVyaWZpZWQg
YXQgbGVhc3QgdGhlc2UgdGhyZWUgc2NlbmFyaW9zIGluIG15IGVudmlyb25tZW50Og0KMSkgdGhl
IGZpeHR1cmUgYWxvbmUgcmVwcm9kdWNlcyB0aGUgcHJvYmxlbS4NCjIpIHRoZSBmaXh0dXJlIHdp
dGggbXkgcGF0Y2ggZG9lcyBub3QgcmVwcm9kdWNlIHRoZSBwcm9ibGVtLg0KMykgdGhlIGZpeHR1
cmUgd2l0aCB5b3VyIHBhdGNoIGRvZXMgbm90IHJlcHJvZHVjZSB0aGUgcHJvYmxlbS4NCg0KVGhh
bmtzIQ0K

--_003_5A82AB7C6090404dellcom_
Content-Type: text/x-patch;
	name="0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch"
Content-Description: 0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch
Content-Disposition: attachment;
	filename="0001-DISPOSABLE-A-test-fixture-that-can-repro-a-pmap-upda.patch";
	size=70608; creation-date="Tue, 13 Feb 2018 09:10:21 GMT";
	modification-date="Tue, 13 Feb 2018 09:10:21 GMT"
Content-ID: <DB06D7C945DDC0448CB2018BFBF22E43@dell.com>
Content-Transfer-Encoding: base64

RnJvbSAzMDkwYjgyMzJmNmY0MjFjMGM2ZGUyMTAyYjE4Y2ZhYzU3MDBiNTFhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogRWxsaW90dCBSYWJlIDxlbGxpb3R0LnJhYmVAZGVsbC5jb20+
DQpEYXRlOiBTdW4sIDExIEZlYiAyMDE4IDE3OjE5OjI2IC0wNjAwDQpTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBESVNQT1NBQkxFOiBBIHRlc3QgZml4dHVyZSB0aGF0IGNhbiByZXBybyBhIHBtYXANCiB1
cGRhdGUtaW52YWxpZGF0ZSByYWNlIGNvbmRpdGlvbg0KDQpBIGhpZ2gtbGV2ZWwgZGVzY3JpcHRp
b24gb2YgdGhlIGZpeHR1cmUgaXMgYXZhaWxhYmxlIGluIGZvcmtpbmdfc3RhbGUuYw0KLS0tDQog
c3RhbmQvbGlic2EvcHJpbnRmLmMgICB8ICAgMTYgKw0KIHN0YW5kL2xpYnNhL3N0YW5kLmggICAg
fCAgICAxICsNCiBzeXMvYW1kNjQvYW1kNjQvcG1hcC5jIHwgICAxNSArDQogc3lzL2FtZDY0L2Nv
bmYvR0VORVJJQyB8ICAgMTkgKy0NCiBzeXMvdm0vZm9ya2luZ19zdGFsZS5jIHwgMTA1NCArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiBzeXMvdm0vZm9y
a2luZ19zdGFsZS5oIHwgIDI5NiArKysrKysrKysrKysrKw0KIHN5cy92bS92bV9mYXVsdC5jICAg
ICAgfCAgIDE2ICsNCiBzeXMvdm0vdm1fcGFnZS5jICAgICAgIHwgIDQ1OSArKysrKysrKysrKysr
KysrKysrKysNCiBzeXMvdm0vdm1fcGFnZS5oICAgICAgIHwgICAgNSArDQogOSBmaWxlcyBjaGFu
Z2VkLCAxODcyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAw
NzU1IHN5cy92bS9mb3JraW5nX3N0YWxlLmMNCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3lzL3ZtL2Zv
cmtpbmdfc3RhbGUuaA0KDQpkaWZmIC0tZ2l0IGEvc3RhbmQvbGlic2EvcHJpbnRmLmMgYi9zdGFu
ZC9saWJzYS9wcmludGYuYw0KaW5kZXggZDBjNDA5ZC4uYzc3ZTk0MSAxMDA2NDQNCi0tLSBhL3N0
YW5kL2xpYnNhL3ByaW50Zi5jDQorKysgYi9zdGFuZC9saWJzYS9wcmludGYuYw0KQEAgLTE0OSw2
ICsxNDksMjIgQEAgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpjZm10LCB2YV9saXN0
IGFwKQ0KIAlidWZbcmV0dmFsXSA9ICdcMCc7DQogfQ0KIA0KK2ludA0KK3ZzbnByaW50ZihjaGFy
ICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpjZm10LCB2YV9saXN0IGFwKQ0KK3sNCisg
ICAgaW50IHJldHZhbDsNCisgICAgc3RydWN0IHByaW50X2J1ZiBhcmc7DQorDQorICAgIGFyZy5i
dWYgPSBidWY7DQorICAgIGFyZy5zaXplID0gc2l6ZTsNCisNCisgICAgcmV0dmFsID0ga3Zwcmlu
dGYoY2ZtdCwgJnNucHJpbnRfZnVuYywgJmFyZywgMTAsIGFwKTsNCisNCisgICAgaWYgKGFyZy5z
aXplID49IDEpDQorICAgICAgICAqKGFyZy5idWYpKysgPSAwOw0KKyAgICByZXR1cm4gcmV0dmFs
Ow0KK30NCisNCiAvKg0KICAqIFB1dCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJIG51bWJlciAoYmFz
ZSA8PSAzNikgaW4gYSBidWZmZXIgaW4gcmV2ZXJzZQ0KICAqIG9yZGVyOyByZXR1cm4gYW4gb3B0
aW9uYWwgbGVuZ3RoIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgY2hhcmFjdGVyDQpkaWZmIC0t
Z2l0IGEvc3RhbmQvbGlic2Evc3RhbmQuaCBiL3N0YW5kL2xpYnNhL3N0YW5kLmgNCmluZGV4IGY2
YTYxMmIuLjhkNTBlZmUgMTAwNjQ0DQotLS0gYS9zdGFuZC9saWJzYS9zdGFuZC5oDQorKysgYi9z
dGFuZC9saWJzYS9zdGFuZC5oDQpAQCAtMjc0LDYgKzI3NCw3IEBAIGV4dGVybiB2b2lkCXZwcmlu
dGYoY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QpOw0KIGV4dGVybiBpbnQJc3ByaW50ZihjaGFy
ICpidWYsIGNvbnN0IGNoYXIgKmNmbXQsIC4uLikgX19wcmludGZsaWtlKDIsIDMpOw0KIGV4dGVy
biBpbnQJc25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqY2ZtdCwg
Li4uKSBfX3ByaW50Zmxpa2UoMywgNCk7DQogZXh0ZXJuIHZvaWQJdnNwcmludGYoY2hhciAqYnVm
LCBjb25zdCBjaGFyICpjZm10LCBfX3ZhX2xpc3QpOw0KK2V4dGVybiBpbnQgIHZzbnByaW50Zihj
aGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpjZm10LCBfX3ZhX2xpc3QpOw0KIA0K
IGV4dGVybiB2b2lkCXR3aWRkbGUodV9pbnQgY2FsbGVyZGl2KTsNCiBleHRlcm4gdm9pZAl0d2lk
ZGxlX2Rpdmlzb3IodV9pbnQgZ2xvYmFsZGl2KTsNCmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvYW1k
NjQvcG1hcC5jIGIvc3lzL2FtZDY0L2FtZDY0L3BtYXAuYw0KaW5kZXggYjk4ODllMy4uN2JiOWMx
YiAxMDA2NDQNCi0tLSBhL3N5cy9hbWQ2NC9hbWQ2NC9wbWFwLmMNCisrKyBiL3N5cy9hbWQ2NC9h
bWQ2NC9wbWFwLmMNCkBAIC00NjI4LDYgKzQ2MjgsOCBAQCBpbnQNCiBwbWFwX2VudGVyKHBtYXBf
dCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3RfdCBwcm90LA0KICAg
ICB1X2ludCBmbGFncywgaW50OF90IHBzaW5kKQ0KIHsNCisJZnN0Zl9jb25kaXRpb25hbF9mYXVs
dF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIHBtYXAsIHZhLCBwcm90KTsNCisNCiAJc3RydWN0
IHJ3bG9jayAqbG9jazsNCiAJcGRfZW50cnlfdCAqcGRlOw0KIAlwdF9lbnRyeV90ICpwdGUsIFBH
X0csIFBHX0EsIFBHX00sIFBHX1JXLCBQR19WOw0KQEAgLTQ3OTIsOSArNDc5NCwyMCBAQCBwbWFw
X2VudGVyKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3Rf
dCBwcm90LA0KIAkvKg0KIAkgKiBVcGRhdGUgdGhlIFBURS4NCiAJICovDQorCWZzdGZfY29uZGl0
aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBwbWFwLCB2YSk7DQorDQogCWlm
ICgob3JpZ3B0ZSAmIFBHX1YpICE9IDApIHsNCiB2YWxpZGF0ZToNCisJCWZzdGZfY29uZGl0aW9u
YWxfcG1hcG1vZF9hZHZhbmNlKF9fRklMRV9fLA0KKwkJCQkJCSBfX0xJTkVfXywNCisJCQkJCQkg
dmEsDQorCQkJCQkJIFBIWVNfVE9fVk1fUEFHRShuZXdwdGUgJiBQR19GUkFNRSkpOw0KKw0KIAkJ
b3JpZ3B0ZSA9IHB0ZV9sb2FkX3N0b3JlKHB0ZSwgbmV3cHRlKTsNCisNCisJCWZzdGZfY29uZGl0
aW9uYWxfcHRlX2RlYnVnKF9fRklMRV9fLCBfX0xJTkVfXywgcG1hcCwgdmEsIG9yaWdwdGUpOw0K
KwkJZnN0Zl9jb25kaXRpb25hbF9wdGVfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBwbWFwLCB2
YSwgbmV3cHRlKTsNCisNCiAJCW9wYSA9IG9yaWdwdGUgJiBQR19GUkFNRTsNCiAJCWlmIChvcGEg
IT0gcGEpIHsNCiAJCQlpZiAoKG9yaWdwdGUgJiBQR19NQU5BR0VEKSAhPSAwKSB7DQpAQCAtNDgz
Myw2ICs0ODQ2LDggQEAgcG1hcF9lbnRlcihwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZt
X3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCwNCiAJfSBlbHNlDQogCQlwdGVfc3RvcmUocHRlLCBu
ZXdwdGUpOw0KIA0KKwlmc3RmX2NvbmRpdGlvbmFsX3BvaW50X2RlYnVnKF9fRklMRV9fLCBfX0xJ
TkVfXywgcG1hcCwgdmEpOw0KKw0KIHVuY2hhbmdlZDoNCiANCiAjaWYgVk1fTlJFU0VSVkxFVkVM
ID4gMA0KZGlmZiAtLWdpdCBhL3N5cy9hbWQ2NC9jb25mL0dFTkVSSUMgYi9zeXMvYW1kNjQvY29u
Zi9HRU5FUklDDQppbmRleCAxYWY3YjdiLi40YzQ1MjkwIDEwMDY0NA0KLS0tIGEvc3lzL2FtZDY0
L2NvbmYvR0VORVJJQw0KKysrIGIvc3lzL2FtZDY0L2NvbmYvR0VORVJJQw0KQEAgLTg2LDE2ICs4
NiwxNiBAQCBvcHRpb25zIAlSQ1RMCQkJIyBSZXNvdXJjZSBsaW1pdHMNCiBvcHRpb25zIAlLREIJ
CQkjIEVuYWJsZSBrZXJuZWwgZGVidWdnZXIgc3VwcG9ydC4NCiBvcHRpb25zIAlLREJfVFJBQ0UJ
CSMgUHJpbnQgYSBzdGFjayB0cmFjZSBmb3IgYSBwYW5pYy4NCiAjIEZvciBmdWxsIGRlYnVnZ2Vy
IHN1cHBvcnQgdXNlICh0dXJuIG9mZiBpbiBzdGFibGUgYnJhbmNoKToNCi1vcHRpb25zIAlCVUZf
VFJBQ0tJTkcJCSMgVHJhY2sgYnVmZmVyIGhpc3RvcnkNCi1vcHRpb25zIAlEREIJCQkjIFN1cHBv
cnQgRERCLg0KLW9wdGlvbnMgCUZVTExfQlVGX1RSQUNLSU5HCSMgVHJhY2sgbW9yZSBidWZmZXIg
aGlzdG9yeQ0KKyNvcHRpb25zIAlCVUZfVFJBQ0tJTkcJCSMgVHJhY2sgYnVmZmVyIGhpc3RvcnkN
Cisjb3B0aW9ucyAJRERCCQkJIyBTdXBwb3J0IEREQi4NCisjb3B0aW9ucyAJRlVMTF9CVUZfVFJB
Q0tJTkcJIyBUcmFjayBtb3JlIGJ1ZmZlciBoaXN0b3J5DQogb3B0aW9ucyAJR0RCCQkJIyBTdXBw
b3J0IHJlbW90ZSBHREIuDQotb3B0aW9ucyAJREVBRExLUkVTCQkjIEVuYWJsZSB0aGUgZGVhZGxv
Y2sgcmVzb2x2ZXINCi1vcHRpb25zIAlJTlZBUklBTlRTCQkjIEVuYWJsZSBjYWxscyBvZiBleHRy
YSBzYW5pdHkgY2hlY2tpbmcNCi1vcHRpb25zIAlJTlZBUklBTlRfU1VQUE9SVAkjIEV4dHJhIHNh
bml0eSBjaGVja3Mgb2YgaW50ZXJuYWwgc3RydWN0dXJlcywgcmVxdWlyZWQgYnkgSU5WQVJJQU5U
Uw0KLW9wdGlvbnMgCVdJVE5FU1MJCQkjIEVuYWJsZSBjaGVja3MgdG8gZGV0ZWN0IGRlYWRsb2Nr
cyBhbmQgY3ljbGVzDQotb3B0aW9ucyAJV0lUTkVTU19TS0lQU1BJTgkjIERvbid0IHJ1biB3aXRu
ZXNzIG9uIHNwaW5sb2NrcyBmb3Igc3BlZWQNCi1vcHRpb25zIAlNQUxMT0NfREVCVUdfTUFYWk9O
RVM9OAkjIFNlcGFyYXRlIG1hbGxvYyg5KSB6b25lcw0KKyNvcHRpb25zIAlERUFETEtSRVMJCSMg
RW5hYmxlIHRoZSBkZWFkbG9jayByZXNvbHZlcg0KKyNvcHRpb25zIAlJTlZBUklBTlRTCQkjIEVu
YWJsZSBjYWxscyBvZiBleHRyYSBzYW5pdHkgY2hlY2tpbmcNCisjb3B0aW9ucyAJSU5WQVJJQU5U
X1NVUFBPUlQJIyBFeHRyYSBzYW5pdHkgY2hlY2tzIG9mIGludGVybmFsIHN0cnVjdHVyZXMsIHJl
cXVpcmVkIGJ5IElOVkFSSUFOVFMNCisjb3B0aW9ucyAJV0lUTkVTUwkJCSMgRW5hYmxlIGNoZWNr
cyB0byBkZXRlY3QgZGVhZGxvY2tzIGFuZCBjeWNsZXMNCisjb3B0aW9ucyAJV0lUTkVTU19TS0lQ
U1BJTgkjIERvbid0IHJ1biB3aXRuZXNzIG9uIHNwaW5sb2NrcyBmb3Igc3BlZWQNCisjb3B0aW9u
cyAJTUFMTE9DX0RFQlVHX01BWFpPTkVTPTgJIyBTZXBhcmF0ZSBtYWxsb2MoOSkgem9uZXMNCiAN
CiAjIE1ha2UgYW4gU01QLWNhcGFibGUga2VybmVsIGJ5IGRlZmF1bHQNCiBvcHRpb25zIAlTTVAJ
CQkjIFN5bW1ldHJpYyBNdWx0aVByb2Nlc3NvciBLZXJuZWwNCkBAIC0xMDMsNiArMTAzLDcgQEAg
b3B0aW9ucyAJRUFSTFlfQVBfU1RBUlRVUA0KIA0KICMgQ1BVIGZyZXF1ZW5jeSBjb250cm9sDQog
ZGV2aWNlCQljcHVmcmVxDQorZGV2aWNlICAgICAgY3B1Y3RsDQogDQogIyBCdXMgc3VwcG9ydC4N
CiBkZXZpY2UJCWFjcGkNCmRpZmYgLS1naXQgYS9zeXMvdm0vZm9ya2luZ19zdGFsZS5jIGIvc3lz
L3ZtL2Zvcmtpbmdfc3RhbGUuYw0KbmV3IGZpbGUgbW9kZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAu
LjQ3YTFiYjkNCi0tLSAvZGV2L251bGwNCisrKyBiL3N5cy92bS9mb3JraW5nX3N0YWxlLmMNCkBA
IC0wLDAgKzEsMTA1NCBAQA0KKy8qDQorICogRlNURg0KKyAqDQorICogZm9ya2luZyBzdGFsZSB0
ZXN0IGZpeHR1cmUNCisgKg0KKyAqIEEgdGVzdCBmaXh0dXJlIHRvIHJlcHJvIGEgc3BlY2lmaWMg
cmFjZSBjb25kaXRpb24gaW4gdGhlDQorICogRnJlZUJTRCBrZXJuZWwgYW1kNjQgcG1hcCBjb2Rl
Lg0KKyAqDQorICogVGhlIHRlc3QgZml4dHVyZSBoYXMgY29tcG9uZW50cyBpbiB0aGUga2VybmVs
IGFuZCB1c2Vyc3BhY2UuDQorICogQSBzeXNjdGwgaG9vayBpbiB0aGUga2VybmVsIGlzIGNhbGxl
ZCBmcm9tIHVzZXJzcGFjZSB0byBhbGxvY2F0ZQ0KKyAqIGEgcmVnaW9uIG9mIG1lbW9yeSBpbiB0
aGUga2VybmVsLCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB3aGljaA0KKyAqIGlzIG1tYXBlZCBz
b21ld2hlcmUgaW50byB0aGUgdGVzdCBwcm9jZXNzLiAgNjQtYml0cyBvZiB0aGlzIHJlZ2lvbg0K
KyAqIGlzIHRoZW4gYXRvbWljYWxseSBtYW5pcHVsYXRlZCBpbiBib3RoIGtlcm5lbCBhbmQgdXNl
cnNwYWNlIHRvDQorICogaGVscCBjb29yZGluYXRlIHRlc3QgYWN0aW9ucy4gIFRoaXMgY29vcmRp
bmF0aW9uIGlzIG5vdGhpbmcgbW9yZQ0KKyAqIHRoZW4gYml0LWZsYWcgY2hhbmdpbmcgJiAic3Bp
bi13YWl0IiBsb29wcyBpbnRlbmRlZCB0byBhZHZhbmNlDQorICogYWN0aW9ucyBpbiBhIHNwZWNp
ZmljIHNlcXVlbmNlLiAgVGhlIHRlc3QgY3JlYXRlcyB0aHJlZSB0aHJlYWRzOg0KKyAqIGEgZmF1
bHRlciwgYSB3cml0ZXIsIGFuZCBhIHJlYWRlci4gIFRoZSBtYWluIHByb2Nlc3MgdXBkYXRlcw0K
KyAqIHRoZSB2YWx1ZSBhdCBhIHZpcnR1YWwgYWRkcmVzcyB0byBhIGtub3duIHN0YXRlIHVuZGVy
IGEgbG9jay4NCisgKiBUaGUgcHJvY2VzcyBpcyBmb3JrZWQgYW5kIGhlbGQgdG8ga2VlcCB0aGUg
dm0gZW50cmllcyBpbiBhDQorICogY29weS1vbi13cml0ZSBzdGF0ZS4gIFRoZSBmYXVsdGVyIHRo
cmVhZCBpcyBhd29rZW4gdG8gdHJhcCBpbg0KKyAqIHRoZSBrZXJuZWwgdG8gcGVyZm9ybSB0aGUg
Y29weS1vbi13cml0ZSBvcGVyYXRpb24gZm9yIGEgcGFnZS4NCisgKiBPbmNlIHRoZSBwbWFwIHBh
Z2UgdXBkYXRlIHRoYXQgYXBwbGllcyB0aGUgbmV3IHBoeXNpY2FsIGFkZHJlc3MNCisgKiBBTkQg
dGhlIGNsZWFyaW5nIG9mIHRoZSByZWFkLW9ubHkgc3RhdGUgaGFzIG9jY3VycmVkIHRoZSB3cml0
ZXINCisgKiBhbmQgcmVhZGVyIHRocmVhZHMgYXJlIHJlbGVhc2VkLiAgVGhlIHJlYWRlciB0aHJl
YWQgY29udGludWFsbHkNCisgKiByZWFkcyB0aGUgdmFsdWUgdW5kZXIgbG9jayB0d2ljZSBhbmQg
ZW5zdXJlcyB0aGUgdmFsdWVzIHJlYWQgYXJlDQorICogdGhlIHNhbWUuICBUaGUgd3JpdGVyIHRo
cmVhZCBjaGFuZ2VzIHRoZSB2YWx1ZSB1bmRlciB0aGUgbG9jay4NCisgKiBUaGUgaXRlcmF0aW9u
IHN0b3BzIG9uY2UgdGhlIGZhdWx0IGhhbmRsaW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4NCisgKiBU
aGlzIHdob2xlIHRlc3QgY3ljbGUgaXMgcmVwZWF0ZWQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBp
dGVyYXRpb25zLg0KKyAqDQorICogVGhlIGV4cGVjdGVkICJ3b3JraW5nIiBiZWhhdmlvciBmcm9t
IHRoZSBPUyBpcyB0aGF0IGJlY2F1c2UgdGhlDQorICogdGVzdCB2YWx1ZSBpcyBhbHdheXMgbW9k
aWZpZWQgYW5kIHJlYWQgdW5kZXIgdGhlIHNhbWUgbG9jaywgdGhhdCBpdA0KKyAqIHNob3VsZCBu
b3QgYmUgcG9zc2libGUgZm9yIGEgdGhyZWFkIHRvIHJlYWQgdGhlIHZhbHVlIHR3aWNlIGFuZCBz
ZWUNCisgKiBhIGNoYW5nZSBpbiB2YWx1ZS4gIEluIHByYWN0aWNlIGEgIm1pc21hdGNoIiBjYW4g
YmUgb2JzZXJ2ZWQsIHByZXN1bWFibHkNCisgKiBpZiB0aGUgVExCIGlzIGludmFsaWRhdGVkIGZv
ciB0aGUgQ1BVIHRoZSByZWFkZXIgdGhyZWFkIGlzIHJ1bm5pbmcNCisgKiBvbiBpbi1iZXR3ZWVu
IHN1Y2Nlc3NpdmUgcmVhZHMuDQorICoNCisgKiBUaGUgZXhwZWN0ZWQgIndvcmtpbmciIGJlaGF2
aW9yIGZyb20gdGhlIHRlc3QgZml4dHVyZSBiZWxvdyB3aGVuIGl0DQorICogZGV0ZWN0cyB0aGUg
cHJvYmxlbSBpcyB0byBlcnJvciBvdXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZQ0KKyAqIGRp
c3BsYXlpbmcgImNvbXBsZXRlIE1JU01BVENIIiB3aGVuIHRoZSByZWFkZXIgdGhyZWFkIHNlZXMg
dGhlDQorICogaWxsZWdhbCB2YWx1ZSBjaGFuZ2UuDQorICoNCisgKiBUaGlzIHRlc3QgaXMgZXhw
ZWN0ZWQgdG8gcnVuIG9ubHkgb24gYW4geDg2XzY0IHBsYXRmb3JtIHdpdGggYXQNCisgKiBsZWFz
dCA0IENQVXMgY29uZmlndXJlZCBmb3IgU01QLiAgSXQgaXMgbm90IGV4cGVjdGVkIHRvIHdvcmsg
KG5vcg0KKyAqIHdhcyBpdCBldmVyIHRyaWVkKSBvbiBhbnkgb3RoZXIgYXJjaGl0ZWN0dXJlIHR5
cGVzIG9yIHBsYXRmb3JtcyB3aXRoDQorICogc21hbGxlciBDUFUgY291bnRzLiAgSXQgYWxzbyB1
c2VzIHRoZSAicmR0c2NwIiBpbnN0cnVjdGlvbg0KKyAqIHdoZW4gZ2VuZXJhdGluZyBkZWJ1Z2dp
bmcgaW5mbyB0byBoZWxwIGNvcnJlbGF0ZSBhY3Rpb25zIG9jY3VycmluZw0KKyAqIGFjcm9zcyBk
aWZmZXJlbnQgQ1BVcy9UU0NzLiAgSWYgdGhpcyBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZml4dHVy
ZQ0KKyAqIHdpbGwgY29yZSBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgYW4gaWxsZWdhbCBpbnN0cnVj
dGlvbi4gIFRoZSBUU0MNCisgKiBNU1IgQVVYIGNhbiBiZSBzZWVkZWQgd2l0aCB0aGUgQ1BVIElE
IGZyb20gYSBzaGVsbCBsaWtlIHRoaXM6DQorICogcm9vdEA6L3Vzci9zcmMvc3lzL3ZtICMgbXNy
X3RzY19hdXg9MHhjMDAwMDEwMzsgbWF4X2NwdV9pZD1gc3lzY3RsIC1uIGtlcm4uc21wLm1heGlk
YDsgY3B1PTANCisgKiByb290QDovdXNyL3NyYy9zeXMvdm0gIyB3aGlsZSBbICR7Y3B1fSAtbGUg
JHttYXhfY3B1X2lkfSBdOyBkbyBjcHVoZXg9YHByaW50ZiAweCV4ICR7Y3B1fWA7IGNwdWNvbnRy
b2wgLW0gIiR7bXNyX3RzY19hdXh9PSR7Y3B1aGV4fSIgIi9kZXYvY3B1Y3RsJHtjcHV9IjsgY3B1
PWBleHByICIke2NwdX0iICsgMWA7IGRvbmUNCisgKg0KKyAqIE5PVEU6ICBBbHRob3VnaCBJIGhh
dmUgc2VlbiBpdCBmYWlsIG9jY2FzaW9uYWxseSBvbiB0ZXN0IHZpcnR1YWwgbWFjaGluZXMsDQor
ICogdGhlIGZpeHR1cmUgaXMgZmFyIG1vcmUgcmVsaWFibGUgb24gcmVhbCBoYXJkd2FyZSAodXN1
YWxseSBmYWlscyBpbiBhIGZldyBzZWNvbmRzKS4NCisgKiBUaGUgdGltaW5nIG5lY2Vzc2FyeSB0
byBoaXQgdGhpcyByYWNlIGNvbmRpdGlvbiBzZWVtcyB2ZXJ5IGRlbGljYXRlLg0KKyAqDQorICog
VGhlIHRlc3QgZml4dHVyZSByZXF1aXJlcyBhIGtlcm5lbCBidWlsdCB3LyB0aGUgdGVzdCBob29r
cyBhcyB3ZWxsLg0KKyAqIEFwcGx5IHRoZSB0ZXN0IGNvZGUgcGF0Y2ggZnJvbSAvdXNyL3NyYywg
cmVidWlsZCBhbmQgYm9vdCBpbnRvIHRoZSBrZXJuZWwuDQorICogVGhlIHRlc3QgZml4dHVyZSBj
YW4gYmUgYnVpbHQgZnJvbSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoNCisgKiByb290QDov
dXNyL3NyYy9zeXMvdm0gIyBjbGFuZyAtV2FsbCAtZyAtTzAgZm9ya2luZ19zdGFsZS5jIC1vIGZv
cmtpbmdfc3RhbGUgLWxwdGhyZWFkDQorICoNCisgKiBFeGFtcGxlIG91dHB1dCBpZiB0aGUgZml4
dHVyZSBkZXRlY3RzIHRoZSBwcm9ibGVtOg0KKyAqDQorICogcm9vdEA6L3Vzci9zcmMvc3lzL3Zt
ICMgLi9mb3JraW5nX3N0YWxlIC12ID4gL2Rldi9udWxsDQorICogUlVOVElNRSBQQVJBTVM6bml0
ZXJzIDEwMDAwMA0KKyAqIEVSUk9SOiBNaXNtYXRjaDogT2xkPTAsIE5ldz0xDQorICogcnVudGlt
ZSAoc2VjKSAwLjM3ODY2Nw0KKyAqIGZvcmtzIDExNDkNCisgKiBmYXVsdGVyIGl0ZXJzIDExNDkN
CisgKiB3cml0ZXIgaXRlcnMgMTE0OQ0KKyAqIHJlYWRlciBpdGVycyA5MDYzDQorICogcmVhZGVy
IHZhbHVlIG9sZCA2NDk4DQorICogcmVhZGVyIHZhbHVlIG5ldyAyNTY1DQorICogcG1hcHN0YWxs
cyAxMTQ5DQorICogbWlzbWF0Y2hlcyAxDQorICogY29tcGxldGlvbiByZWFzb24gTUlTTUFUQ0gN
CisgKiBleGl0IDENCisgKg0KKyAqIERlYnVnZ2luZzoNCisgKg0KKyAqIFRoZSBmaXh0dXJlIGNh
biBiZSBkaXJlY3RlZCB0byBjYXB0dXJlIHJ1bnRpbWUgZGVidWdnaW5nIGFib3V0IHRoZSB0aW1p
bmcgYW5kDQorICogYWN0aW9ucyBsZWFkaW5nIHVwIHRvIHRoZSBtaXNtYXRjaC4gIFRvIHVzZSB0
aGlzLCBhIGNvbW1hbmQgbGlrZSB0aGlzIHdpbGwNCisgKiBpbnRlcmxlYXZlIGJvdGggdXNlcnNw
YWNlIGFuZCBrZXJuZWwgZGVidWdnaW5nIGluZm86DQorICoNCisgKiBFeGFtcGxlIGNvbW1hbmQg
dG8gZ2VuZXJhdGUgZGVidWcgdGltaW5nIGRhdGEgaW4gYSBmaWxlIG5hbWVkICdmcl9zb3J0ZWQu
dHh0Jw0KKyAqIC4vZm9ya2luZ19zdGFsZSAtdiA+IGZyLnR4dDsgc3lzY3RsIC1uIGtlcm4uZnN0
Zl9kZWJ1Z19vdXRwdXQgPj4gZnIudHh0ICYmIGNhdCBmci50eHQgfCBzb3J0ID4gZnJfc29ydGVk
LnR4dA0KKyAqDQorICogT3V0cHV0IGFib3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpcyBmcm9tIGEg
cHJldmlvdXMgaXRlcmF0aW9uIGFuZCBzaG91bGQgYmUgaWdub3JlZDoNCisgKiBUU0M6ICAgIDQw
MjU2MDY1MDc1MTc1IENQVTowMCBUSUQ6MTAwMTg3IEZvcmtlciAgICAgQ09ERTpmb3JraW5nX3N0
YWxlLmM6MDQ4MSBTVEFURToweDAwMDAwMDAwMDAwMDAwMDcgTVNHOlRlc3QgaG9vayBhY3RpdmUu
Li4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxwdGhyZWFkLmg+DQorI2luY2x1ZGUgPHB0aHJl
YWRfbnAuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNp
bmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkaW50
Lmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1ZGUg
PHNpZ25hbC5oPg0KKw0KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCisjaW5jbHVkZSA8c3lzL2Nw
dXNldC5oPg0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4N
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCisjaW5j
bHVkZSA8c3lzL21tYW4uaD4NCisNCisjaW5jbHVkZSA8bWFjaGluZS9hdG9taWMuaD4NCisjaW5j
bHVkZSA8bWFjaGluZS9zdGRhcmcuaD4NCisNCisjaW5jbHVkZSAiZm9ya2luZ19zdGFsZS5oIg0K
Kw0KKyNkZWZpbmUgdmFsdWVfb2xkIDANCisjZGVmaW5lIHZhbHVlX25ldyAxDQorDQorI2RlZmlu
ZSBvcHRfaXRlcmF0aW9uc19kZWZhdWx0IDEwMDAwMGx1DQorDQorc3RhdGljIGludCBmb3JrX2Z1
bmMoKTsNCitzdGF0aWMgdm9pZCAqIG1haW5fZnVuYyh2b2lkICopOw0KK3N0YXRpYyB2b2lkICog
ZmF1bHRlcl9mdW5jKHZvaWQgKik7DQorc3RhdGljIHZvaWQgKiB3cml0ZXJfZnVuYyh2b2lkICop
Ow0KK3N0YXRpYyB2b2lkICogcmVhZGVyX2Z1bmModm9pZCAqKTsNCisNCisvLyBBIHN0cnVjdHVy
ZSBob3VzZWQgb24gdGhlIG1lbW9yeSBwYWdlIHdlIHdpbGwgYmUgdGVzdGluZw0KK3N0cnVjdCB0
ZXN0X2RhdGENCit7DQorICAgIHVpbnQ2NF90IHZhbHVlOw0KKyAgICB1aW50NjRfdCBzb21ldGhp
bmdfZWxzZTsNCit9Ow0KKw0KKy8vIFRoZSBtaXNjZWxsYW5lb3VzIHN0dWZmIG5lY2Vzc2FyeSB0
byBwZXJmb3JtIHRoZSB0ZXN0aW5nDQorc3RydWN0IHRlc3RfbWFjaGluZXJ5DQorew0KKyAgICBw
dGhyZWFkX211dGV4YXR0cl90IG1hdHRyOw0KKyAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7DQor
ICAgIHB0aHJlYWRfYXR0cl90IHRhdHRyOw0KKyAgICBpbnQgbWFpbl90aWQ7DQorICAgIHB0aHJl
YWRfdCBmYXVsdGVyOw0KKyAgICBpbnQgZmF1bHRlcl90aWQ7DQorICAgIHVpbnQ2NF90IGZhdWx0
ZXJfaXRlcnM7DQorICAgIHB0aHJlYWRfdCB3cml0ZXI7DQorICAgIGludCB3cml0ZXJfdGlkOw0K
KyAgICB1aW50NjRfdCB3cml0ZXJfaXRlcnM7DQorICAgIHB0aHJlYWRfdCByZWFkZXI7DQorICAg
IGludCByZWFkZXJfdGlkOw0KKyAgICB1aW50NjRfdCByZWFkZXJfaXRlcnM7DQorICAgIGludCBm
b3JrX3RpZDsNCisgICAgdWludDY0X3QgdHNjX2ZyZXE7DQorICAgIHVpbnQ2NF90IGZvcmtzOw0K
KyAgICB1aW50NjRfdCBwbWFwc3RhbGxzOw0KKyAgICB1aW50NjRfdCBvbGRfZGF0YTsNCisgICAg
dWludDY0X3QgbmV3X2RhdGE7DQorICAgIHVpbnQ2NF90IG1pc21hdGNoZXM7DQorICAgIHVpbnQ2
NF90IGRlYnVnX3ZhbHVlOw0KKyAgICBsb25nIG9wdF9pdGVyYXRpb25zOw0KKyAgICBpbnQgb3B0
X2Vhcmx5X2Vycm9yX2V4aXQ7DQorICAgIGludCBvcHRfd2lyZWQ7DQorICAgIHN0cnVjdCB0ZXN0
X2RhdGEgKiB0ZXN0X2RhdGE7DQorICAgIHZvbGF0aWxlIHVpbnQ2NF90ICogc3RhdGVfY29udHJv
bDsNCisgICAgdWludDY0X3Qgc3RhdGVfY29udHJvbF9waHlzOw0KKyAgICBzdHJ1Y3QgZnN0Zl9k
ZWJ1Z19kYXRhIGRlYnVnX2VudHJpZXNbRlNURl9ERUJVR19OVU1CRVJfRU5UUklFU107DQorICAg
IHVfaW50IGRlYnVnX3Bvc2l0aW9uOw0KK30gKiB0ZXN0Ow0KKw0KK3N0YXRpYyBfX3RocmVhZCBp
bnQgbGNsX3RpZCA9IDA7DQorDQorLy8gSW5pdGlhbGl6ZSBhbnkgJ3Rlc3RfbWFjaGluZXJ5JyB2
YWx1ZXMNCitzdGF0aWMgdm9pZCB0ZXN0X21hY2hpbmVyeV9pbml0KHZvaWQpDQorew0KKyAgICBt
ZW1zZXQodGVzdCwgMHgwLCBzaXplb2Yoc3RydWN0IHRlc3RfbWFjaGluZXJ5KSk7DQorICAgIHRl
c3QtPm9wdF9pdGVyYXRpb25zID0gb3B0X2l0ZXJhdGlvbnNfZGVmYXVsdDsNCisgICAgdGVzdC0+
b3B0X2Vhcmx5X2Vycm9yX2V4aXQgPSAxOw0KK30NCisNCisvLyBEZXNjcmliZSBhIHRpZCB0byBt
YWtlIGRlYnVnIG91dHB1dCBtb3JlIHJlYWRhYmxlDQorc3RhdGljIGNvbnN0IGNoYXIgKiB0ZXN0
X2FjdG9yX2Rlc2NyKGludCB0aWQpDQorew0KKyAgICBjaGFyICogZGVzYyA9ICI8dW5rbm93bj4i
Ow0KKyAgICBpZiAodGlkID09IHRlc3QtPm1haW5fdGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNj
ID0gIkZvcmtlciI7DQorICAgIH0NCisgICAgZWxzZSBpZiAodGlkID09IHRlc3QtPmZhdWx0ZXJf
dGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNjID0gIkZhdWx0ZXIiOw0KKyAgICB9DQorICAgIGVs
c2UgaWYgKHRpZCA9PSB0ZXN0LT53cml0ZXJfdGlkKQ0KKyAgICB7DQorICAgICAgICBkZXNjID0g
IldyaXRlciI7DQorICAgIH0NCisgICAgZWxzZSBpZiAodGlkID09IHRlc3QtPnJlYWRlcl90aWQp
DQorICAgIHsNCisgICAgICAgIGRlc2MgPSAiUmVhZGVyIjsNCisgICAgfQ0KKyAgICBlbHNlIGlm
ICh0aWQgPT0gdGVzdC0+Zm9ya190aWQpDQorICAgIHsNCisgICAgICAgIGRlc2MgPSAiRm9ya2Vl
IjsNCisgICAgfQ0KKyAgICByZXR1cm4gKGRlc2MpOw0KK30NCisNCisvLyBSZXRyaWV2ZSB0aGUg
dGlkIGZvciB0aGUgY3VycmVudCB0aHJlYWQNCitzdGF0aWMgaW50IGdldF9jdXJyZW50X3RpZCh2
b2lkKQ0KK3sNCisgICAgaWYgKGxjbF90aWQgPT0gMCkNCisgICAgew0KKyAgICAgICAgbGNsX3Rp
ZCA9IHB0aHJlYWRfZ2V0dGhyZWFkaWRfbnAoKTsNCisgICAgfQ0KKyAgICByZXR1cm4gKGxjbF90
aWQpOw0KK30NCisNCisvLyBCZXN0IGVmZm9ydCBzZXQgb2YgdGhlIG5hbWUgb2YgdGhlIGN1cnJl
bnQgdGhyZWFkDQorc3RhdGljIHZvaWQgc2V0X2N1cnJlbnRfdGhyZWFkX25hbWUodm9pZCkNCit7
DQorICAgIHB0aHJlYWRfc2V0X25hbWVfbnAocHRocmVhZF9zZWxmKCksIHRlc3RfYWN0b3JfZGVz
Y3IoZ2V0X2N1cnJlbnRfdGlkKCkpKTsNCit9DQorDQorLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiBh
IDY0LWJpdCByZWdpb24gc3RhdGUvY29udHJvbCByZWdpb24gc2hhcmVkIGJ5IHVzZXJzcGFjZSBh
bmQgdGhlIGtlcm5lbA0KK3ZvbGF0aWxlIHVpbnQ2NF90ICogZnN0Zl9zdGF0ZV9jb250cm9sKHZv
aWQpDQorew0KKyAgICByZXR1cm4gKHRlc3QtPnN0YXRlX2NvbnRyb2wpOw0KK30NCisNCisvLyBH
ZXQgdGhlIHRzYyBmcmVxdWVuY3kNCit1aW50NjRfdCBmc3RmX3RzY19mcmVxdWVuY3lfc2Vjb25k
cyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICh0ZXN0LT50c2NfZnJlcSk7DQorfQ0KKw0KKy8vIEZh
c3QgZm9ybWF0dGVkIGRlYnVnDQordm9pZCBmc3RmX2RlYnVnX2Zhc3QoY29uc3QgY2hhciAqIGZp
bGUsIGludCBsaW5lLCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGF0ZSkNCit7DQorICAgIGlm
ICh0ZXN0LT5kZWJ1Z192YWx1ZSkNCisgICAgew0KKyAgICAgICAgaW50IHBvcyA9IEZTVEZfREVC
VUdfUE9TSVRJT05fSU5ERVgoYXRvbWljX2ZldGNoYWRkX2ludCgmdGVzdC0+ZGVidWdfcG9zaXRp
b24sIDEpKTsNCisNCisgICAgICAgIHRlc3QtPmRlYnVnX2VudHJpZXNbcG9zXS50c2MgPSBmc3Rm
X3RzY19hbmRfYXV4KCZ0ZXN0LT5kZWJ1Z19lbnRyaWVzW3Bvc10uYXV4KTsNCisgICAgICAgIHRl
c3QtPmRlYnVnX2VudHJpZXNbcG9zXS50aWQgPSBnZXRfY3VycmVudF90aWQoKTsNCisgICAgICAg
IHRlc3QtPmRlYnVnX2VudHJpZXNbcG9zXS5maWxlID0gZmlsZTsNCisgICAgICAgIHRlc3QtPmRl
YnVnX2VudHJpZXNbcG9zXS5saW5lID0gbGluZTsNCisgICAgICAgIHRlc3QtPmRlYnVnX2VudHJp
ZXNbcG9zXS5zdGF0ZSA9IHN0YXRlOw0KKyAgICAgICAgdGVzdC0+ZGVidWdfZW50cmllc1twb3Nd
LmRiZ190eXBlID0gdHlwZTsNCisgICAgfQ0KK30NCisNCisvLyBNaXNjIHRleHQgZGVidWcNCit2
b2lkIGZzdGZfZGVidWdfbWlzYyhjb25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNo
YXIgKmZtdCwgLi4uKQ0KK3sNCisgICAgaWYgKHRlc3QtPmRlYnVnX3ZhbHVlKQ0KKyAgICB7DQor
ICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsNCisgICAgICAgIHZhX2xpc3QgYXA7DQorDQorICAg
ICAgICB2YV9zdGFydChhcCwgZm10KTsNCisNCisgICAgICAgIHZzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCBmbXQsIGFwKTsNCisNCisgICAgICAgIHZhX2VuZChhcCk7DQorDQorICAg
ICAgICB1aW50NjRfdCB0c3QgPSBmc3RmX3N0YXRlX3ZhbHVlKCk7DQorDQorICAgICAgICBpbnQg
cG9zID0gRlNURl9ERUJVR19QT1NJVElPTl9JTkRFWChhdG9taWNfZmV0Y2hhZGRfaW50KCZ0ZXN0
LT5kZWJ1Z19wb3NpdGlvbiwgMSkpOw0KKw0KKyAgICAgICAgdWludDMyX3QgYXV4Ow0KKyAgICAg
ICAgdWludDY0X3QgdHNjID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgICAgIHRlc3Qt
PmRlYnVnX2VudHJpZXNbcG9zXS5kYmdfdHlwZSA9IEZTVEZfREVCVUdfVFlQRV9NSVNDRUxMQU5F
T1VTOw0KKw0KKyAgICAgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQorDQorICAgICAgICBpbnQgdGlk
ID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorDQorICAgICAgICBzbnByaW50Zih0ZXN0LT5kZWJ1Z19l
bnRyaWVzW3Bvc10ubWlzYywNCisgICAgICAgICAgICAgICAgIHNpemVvZih0ZXN0LT5kZWJ1Z19l
bnRyaWVzW3Bvc10ubWlzYyksDQorICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9T
VFIsDQorICAgICAgICAgICAgICAgICB0c2MsDQorICAgICAgICAgICAgICAgICBhdXgsDQorICAg
ICAgICAgICAgICAgICB0aWQsDQorICAgICAgICAgICAgICAgICB0ZXN0X2FjdG9yX2Rlc2NyKHRp
ZCksDQorICAgICAgICAgICAgICAgICBmaWxlLA0KKyAgICAgICAgICAgICAgICAgbGluZSwNCisg
ICAgICAgICAgICAgICAgIHRzdCwNCisgICAgICAgICAgICAgICAgIGJ1ZmZlcik7DQorDQorICAg
ICAgICB2YV9lbmQoYXApOw0KKyAgICB9DQorfQ0KKw0KKy8vIEdlbmVyYWwgZGVidWdnaW5nL3Rl
eHQgb3V0cHV0DQorc3RhdGljIHZvaWQgZGVidWdfb3V0cHV0KGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQ0KK3sNCisgICAgdmFfbGlzdCBhcDsNCisNCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQorDQor
ICAgIHZwcmludGYoZm10LCBhcCk7DQorDQorICAgIHZhX2VuZChhcCk7DQorfQ0KKw0KKy8vIEdl
bmVyYWwgc3RhdHMvZXJyb3Igb3V0cHV0DQorc3RhdGljIHZvaWQgY29uc29sZV9vdXRwdXQoY29u
c3QgY2hhciAqZm10LCAuLi4pDQorew0KKyAgICB2YV9saXN0IGFwOw0KKw0KKyAgICB2YV9zdGFy
dChhcCwgZm10KTsNCisNCisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsNCisNCisgICAg
dmFfZW5kKGFwKTsNCit9DQorDQorLy8gVHJhdmVyc2UgdGhlIGNhcHR1cmVkIGRlYnVnIGVudHJp
ZXMgYW5kIG91dHB1dCB0aGVtDQorc3RhdGljIHZvaWQgZHVtcF9kZWJ1Zyh2b2lkKQ0KK3sNCisg
ICAgaW50IG51bTsNCisgICAgZm9yIChudW0gPSAwOyBudW0gPCBGU1RGX0RFQlVHX05VTUJFUl9F
TlRSSUVTOyBudW0rKykNCisgICAgew0KKyAgICAgICAgaWYgKHRlc3QtPmRlYnVnX2VudHJpZXNb
bnVtXS5kYmdfdHlwZSAhPSBGU1RGX0RFQlVHX1RZUEVfVU5VU0VEKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmICh0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0uZGJnX3R5cGUgPT0gRlNURl9E
RUJVR19UWVBFX01JU0NFTExBTkVPVVMpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBkZWJ1Z19vdXRwdXQoIiVzIiwgdGVzdC0+ZGVidWdfZW50cmllc1tudW1dLm1pc2MpOw0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICBjaGFyIG1zZ1sxMDI0XTsNCisgICAgICAgICAgICAgICAgY2hhciB0ZW1wWzEwMjRd
Ow0KKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsNCisNCisgICAgICAgICAgICAg
ICAgZnN0Zl9kZWJ1Z19maWxsX3N0YXRlX2Rlc2NyKHRlc3QtPmRlYnVnX2VudHJpZXNbbnVtXS5z
dGF0ZSwgdGVtcCwgc2l6ZW9mKGJ1ZmZlcikpOw0KKw0KKyAgICAgICAgICAgICAgICBzbnByaW50
Zihtc2csDQorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtc2cpLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiU3RhdGU6ICVzICgweCUwMTZseCkgWyVzXVxuIiwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+
ZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBmc3Rm
X2RlYnVnX3R5cGVfZGVzY3IodGVzdC0+ZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlKSk7DQor
DQorICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKGJ1ZmZlciksDQorICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVC
VUdfRk9STUFUX1NUUiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50
cmllc1tudW1dLnRzYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50
cmllc1tudW1dLmF1eCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+ZGVidWdfZW50
cmllc1tudW1dLnRpZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hY3Rvcl9kZXNj
cih0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0udGlkKSwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZnN0Zl9zdHJpcF9maWxlX3BhdGgoX19GSUxFX18pLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0LT5kZWJ1Z19lbnRyaWVzW251bV0ubGluZSwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdC0+ZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICBtc2cpOw0KKw0KKyAgICAgICAgICAgICAgICBkZWJ1Z19vdXRwdXQoIiVzIiwgYnVm
ZmVyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gR2V0
IHRoZSBmZCBpbnQgZm9yIC9kZXYvbWVtDQorc3RhdGljIGludCBkZXZfbWVtX2ZkKHZvaWQpDQor
ew0KKyAgICBzdGF0aWMgaW50IG1lbWZkID0gLTE7DQorICAgIGlmIChtZW1mZCA8IDApDQorICAg
IHsNCisgICAgICAgIG1lbWZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JEV1J8T19DTE9FWEVDKTsN
CisgICAgfQ0KKyAgICByZXR1cm4gKG1lbWZkKTsNCit9DQorDQorLy8gUHJlcGFyZSBzb21lIHN0
dWZmIGZvciB0aHJlYWRpbmcNCitzdGF0aWMgaW50IHRocmVhZF9wcmVwKHZvaWQpDQorew0KKyAg
ICBpZiAoKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJnRlc3QtPm1hdHRyKSAhPSAwKSB8fA0KKyAg
ICAgICAgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJnRlc3QtPm1hdHRyLCBQVEhSRUFEX01V
VEVYX0FEQVBUSVZFX05QKSAhPSAwKSkNCisNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRw
dXQoIkVSUk9SOiB0ZXN0IHNldHRpbmcgdXAgbXV0ZXggYXR0cmlidXRlIGZvciBBZGFwdGl2ZU5Q
XG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisNCisgICAgaWYgKHB0aHJlYWRf
bXV0ZXhfaW5pdCgmdGVzdC0+bXV0ZXgsICZ0ZXN0LT5tYXR0cikgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiB0ZXN0IGluaXRpYWxpemluZyBtdXRleFxuIik7
DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorDQorICAgIGlmIChwdGhyZWFkX2F0dHJf
aW5pdCgmdGVzdC0+dGF0dHIpICE9IDApDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0
KCJFUlJPUjogdGVzdCBpbml0aWFsaXppbmcgcHRocmVhZCBhdHRyXG4iKTsNCisgICAgICAgIHJl
dHVybiAoMSk7DQorICAgIH0NCisNCisgICAgaWYgKHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0
ZSgmdGVzdC0+dGF0dHIsIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKSAhPSAwKQ0KKyAgICB7DQor
ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHRlc3Qgc2V0dGluZyBwdGhyZWFkIGF0dHIg
am9pbmFibGVcbiIpOw0KKyAgICAgICAgcmV0dXJuICgxKTsNCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gKDApOw0KK30NCisNCisvLyBDcmVhdGUgYW5kIHN0YXJ0IHRlc3QgdGhlcmFkcyBhbmQgc2V0
dXAgYWZmaW5pdGllcw0KK3N0YXRpYyBpbnQgc3RhcnRfdGhyZWFkcyh2b2lkKQ0KK3sNCisgICAg
aW50IHJjOw0KKyAgICBjcHVzZXRfdCB0aGVjcHVzZXQ7DQorDQorICAgIENQVV9aRVJPKCZ0aGVj
cHVzZXQpOw0KKyAgICBDUFVfU0VUKDAsICZ0aGVjcHVzZXQpOw0KKyAgICByYyA9IHB0aHJlYWRf
c2V0YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihjcHVzZXRfdCksICZ0aGVjcHVz
ZXQpOw0KKyAgICBpZiAocmMgIT0gMCkNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRwdXQo
IkVSUk9SOiBwdGhyZWFkX3NldGFmZmluaXR5X25wKCkgbWFpblxuIik7DQorICAgICAgICByZXR1
cm4gKDEpOw0KKyAgICB9DQorDQorICAgIHJjID0gcHRocmVhZF9jcmVhdGUoJnRlc3QtPmZhdWx0
ZXIsICZ0ZXN0LT50YXR0ciwgZmF1bHRlcl9mdW5jLCBOVUxMKTsNCisgICAgaWYgKHJjICE9IDAp
DQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjogcHRocmVhZF9jcmVhdGUo
KSBmYXVsdGVyXG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisgICAgQ1BVX1pF
Uk8oJnRoZWNwdXNldCk7DQorICAgIENQVV9TRVQoMSwgJnRoZWNwdXNldCk7DQorICAgIHJjID0g
cHRocmVhZF9zZXRhZmZpbml0eV9ucCh0ZXN0LT5mYXVsdGVyLCBzaXplb2YoY3B1c2V0X3QpLCAm
dGhlY3B1c2V0KTsNCisgICAgaWYgKHJjICE9IDApDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVf
b3V0cHV0KCJFUlJPUjogcHRocmVhZF9zZXRhZmZpbml0eV9ucCgpIGZhdWx0ZXJcbiIpOw0KKyAg
ICAgICAgcmV0dXJuICgxKTsNCisgICAgfQ0KKw0KKyAgICByYyA9IHB0aHJlYWRfY3JlYXRlKCZ0
ZXN0LT53cml0ZXIsICZ0ZXN0LT50YXR0ciwgd3JpdGVyX2Z1bmMsIE5VTEwpOw0KKyAgICBpZiAo
cmMgIT0gMCkNCisgICAgew0KKyAgICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBwdGhyZWFk
X2NyZWF0ZSgpIHdyaXRlclxuIik7DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorICAg
IENQVV9aRVJPKCZ0aGVjcHVzZXQpOw0KKyAgICBDUFVfU0VUKDIsICZ0aGVjcHVzZXQpOw0KKyAg
ICByYyA9IHB0aHJlYWRfc2V0YWZmaW5pdHlfbnAodGVzdC0+d3JpdGVyLCBzaXplb2YoY3B1c2V0
X3QpLCAmdGhlY3B1c2V0KTsNCisgICAgaWYgKHJjICE9IDApDQorICAgIHsNCisgICAgICAgIGNv
bnNvbGVfb3V0cHV0KCJFUlJPUjogcHRocmVhZF9zZXRhZmZpbml0eV9ucCgpIHdyaXRlclxuIik7
DQorICAgICAgICByZXR1cm4gKDEpOw0KKyAgICB9DQorDQorICAgIHJjID0gcHRocmVhZF9jcmVh
dGUoJnRlc3QtPnJlYWRlciwgJnRlc3QtPnRhdHRyLCByZWFkZXJfZnVuYywgTlVMTCk7DQorICAg
IGlmIChyYyAhPSAwKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHB0
aHJlYWRfY3JlYXRlKCkgcmVhZGVyXG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0N
CisgICAgQ1BVX1pFUk8oJnRoZWNwdXNldCk7DQorICAgIENQVV9TRVQoMywgJnRoZWNwdXNldCk7
DQorICAgIHJjID0gcHRocmVhZF9zZXRhZmZpbml0eV9ucCh0ZXN0LT5yZWFkZXIsIHNpemVvZihj
cHVzZXRfdCksICZ0aGVjcHVzZXQpOw0KKyAgICBpZiAocmMgIT0gMCkNCisgICAgew0KKyAgICAg
ICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBwdGhyZWFkX3NldGFmZmluaXR5X25wKCkgcmVhZGVy
XG4iKTsNCisgICAgICAgIHJldHVybiAoMSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuICgwKTsN
Cit9DQorDQorLy8gbWFpbiBwcm9jZXNzaW5nIGZ1bmN0aW9uOyBkbyBhcyBtYW55ICdmb3JrJyBp
dGVyYXRpb25zIGFzIHJlcXVlc3RlZCBvciB1bnRpbCBkb25lDQorc3RhdGljIHZvaWQgKiBtYWlu
X2Z1bmModm9pZCAqbSkNCit7DQorICAgIGludCBmOw0KKyAgICBsb25nIGk7DQorDQorICAgIGZv
ciAoaSA9IDA7IGkgPCB0ZXN0LT5vcHRfaXRlcmF0aW9uczsgaSsrKQ0KKyAgICB7DQorICAgICAg
ICBtZW1zZXQodGVzdC0+ZGVidWdfZW50cmllcywgMHgwMCwgc2l6ZW9mKHRlc3QtPmRlYnVnX2Vu
dHJpZXMpKTsNCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVzdCBob29rIGFjdGl2ZS4g
dHNjX2ZyZXE6JWx1LCBjb250cm9sIHZhZGRyOiVwLCBjb250cm9sIHBhZGRyOjB4JWx4LCB0ZXN0
X2RhdGEgdmFkZHI6MHglbHgsIHRlc3RfZGF0YSB2YWx1ZSBsb2NhdGlvbjolcFxuIiwNCisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0LT50c2NfZnJlcSwNCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0LT5zdGF0ZV9jb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qt
PnN0YXRlX2NvbnRyb2xfcGh5cywNCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopRlNU
Rl9DT05TVEFOVF9WQUREUiwNCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVzdC0+dGVzdF9k
YXRhLT52YWx1ZSk7DQorDQorICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRlc3QtPm11dGV4
KTsNCisNCisgICAgICAgICAgICB0ZXN0LT50ZXN0X2RhdGEtPnZhbHVlID0gdmFsdWVfb2xkOw0K
Kw0KKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAg
ICAgIGlmICgoZiA9IGZvcmtfZnVuYygpKSA8IDApDQorICAgICAgICB7DQorICAgICAgICAgICAg
Y29uc29sZV9vdXRwdXQoIkVycm9yIGZvcmtpbmc6ICVkLCBFcnJubzogJWRcbiIsIGYsIGVycm5v
KTsNCisgICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICB0ZXN0
LT5mb3JrcysrOw0KKw0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNU
Rl9TVEFURV9CSVRTX0lETEUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBm
c3RmX3N0YXRlX3RyYW5zaXRpb24oMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZf
U1RBVEVfQklUX0NPTVBMRVRFKTsNCisNCitEb25lOg0KKw0KKyAgICByZXR1cm4gKDApOw0KK30N
CisNCisvLyBmb3JrIHByb2Nlc3NpbmcgZnVuY3Rpb247IGNvb3JkaW5hdGUgdGhlIHRlc3Rpbmcg
Zm9yIHRoZSByYWNlDQorc3RhdGljIGludCBmb3JrX2Z1bmModm9pZCkNCit7DQorICAgIHBpZF90
IHBpZCwgc2F2ZWRwaWQ7DQorICAgIGludCBwc3RhdDsNCisNCisgICAgc3dpdGNoKHBpZCA9IGZv
cmsoKSkNCisgICAgew0KKyAgICAgICAgY2FzZSAtMToNCisgICAgICAgICAgICAvLyBlcnJvcg0K
KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSAwOg0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIC8vIGNoaWxkDQorICAgICAgICAgICAgdGVzdC0+Zm9ya190aWQgPSBnZXRfY3VycmVu
dF90aWQoKTsNCisgICAgICAgICAgICBzZXRfY3VycmVudF90aHJlYWRfbmFtZSgpOw0KKw0KKyAg
ICAgICAgICAgIC8vIHRlbGwgdGhyZWFkcyB3ZSBoYXZlIGZvcmtlZCBhbmQgdGhleSBjYW4gZ2V0
IHJlYWR5DQorICAgICAgICAgICAgZnN0Zl9zdGF0ZV90cmFuc2l0aW9uKChGU1RGX1NUQVRFX0JJ
VFNfUFJJTUVEIHwgRlNURl9TVEFURV9CSVRfVEVTVF9BQ1RJVkUpLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFEWV9UT19QUklNRSk7DQorDQor
ICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhyZWFkcyB0byBiZSBpbiB0aGUgcmlnaHQgc3RhdGUN
CisgICAgICAgICAgICBpZiAoZnN0Zl9zdGF0ZV9pbXBlZGltZW50X2FsbChGU1RGX1NUQVRFX0JJ
VFNfUFJJTUVEKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAg
ICAgLy8gdGVsbCB0aGUgZmF1bHRlciBoZSBjYW4gZ28NCisgICAgICAgICAgICBmc3RmX3N0YXRl
X3RyYW5zaXRpb24oRlNURl9TVEFURV9CSVRfUkVBRFlfVE9fUFJJTUUsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX1RFU1RfQUNUSVZFKTsNCisNCisg
ICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgZmF1bHRlciB0byBiZSBkb25lLCBhdCB0aGF0IHBv
aW50IHRoZSBpdGVyYXRpb24gaXMgb3Zlcg0KKyAgICAgICAgICAgIGlmIChmc3RmX3N0YXRlX2lt
cGVkaW1lbnRfYWxsKEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfRE9ORSkgJiBGU1RGX1NUQVRFX0JJ
VFNfRklOSVNIRUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7
DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIC8vIGNsZWFudXANCisgICAgICAgICAg
ICB1aW50NjRfdCBzdCA9IGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNURl9TVEFURV9CSVRT
X0lETEUpOw0KKyAgICAgICAgICAgIGlmIChzdCAmIEZTVEZfU1RBVEVfQklUX0tFUk5FTF9QTUFQ
TU9EKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdGVzdC0+cG1hcHN0YWxscysr
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3QgJiBGU1RGX1NUQVRFX0JJVFNf
RklOSVNIRUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NU
QVRFX0JJVFNfUkVTRVQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0K
Kw0KKyAgICAgICAgICAgIERvbmU6DQorICAgICAgICAgICAgICAgIF9leGl0KDEyNyk7DQorICAg
ICAgICB9DQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIHBh
cmVudA0KKyAgICAgICAgICAgIHNhdmVkcGlkID0gcGlkOw0KKyAgICAgICAgICAgIGRvDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwaWQgPSB3YWl0NChzYXZlZHBpZCwgJnBzdGF0
LCAwLCAoc3RydWN0IHJ1c2FnZSAqKTApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB3
aGlsZSAocGlkID09IC0xICYmIGVycm5vID09IEVJTlRSKTsNCisgICAgICAgICAgICBicmVhazsN
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4ocGlkID09IC0xID8gLTEgOiBwc3Rh
dCk7DQorfQ0KKw0KKy8vIGZhdWx0ZXIgdGhyZWFkIHByb2Nlc3NpbmcgZnVuY3Rpb24NCitzdGF0
aWMgdm9pZCAqIGZhdWx0ZXJfZnVuYyh2b2lkICp0KQ0KK3sNCisgICAgdGVzdC0+ZmF1bHRlcl90
aWQgPSBnZXRfY3VycmVudF90aWQoKTsNCisgICAgc2V0X2N1cnJlbnRfdGhyZWFkX25hbWUoKTsN
CisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgLy8gaW5kaWNhdGUgd2UgaGF2ZSBy
ZWFjaGVkIHRoZSAnaWRsZScgc3RhdGUNCisgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbigw
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX0ZBVUxURVJf
SURMRSk7DQorDQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUNCisg
ICAgICAgIGlmIChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JFQURZ
X1RPX1BSSU1FKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211dGV4
X2xvY2soJnRlc3QtPm11dGV4KTsNCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0
LT5tdXRleCk7DQorDQorICAgICAgICB0ZXN0LT5mYXVsdGVyX2l0ZXJzKys7DQorICAgICAgICB0
ZXN0LT5mYXVsdGVyX2l0ZXJzLS07DQorDQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJl
cGFyZWQNCisgICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9GQVVM
VEVSX0lETEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNURl9TVEFURV9CSVRf
RkFVTFRFUl9QUklNRUQpOw0KKw0KKyAgICAgICAgLy8gd2FpdCB0byBiZSB0b2xkIHdlIGNhbiB3
cml0ZS1mYXVsdA0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbGwoRlNURl9T
VEFURV9CSVRfVEVTVF9BQ1RJVkUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8v
IGFjdHVhbGx5IGRvIHRoZSB3cml0ZSBmYXVsdA0KKyAgICAgICAgRlNURl9ERUJVR19NSVNDKCJX
cml0aW5nIHRvIGFkZHJlc3M6ICVwXG4iLCAmdGVzdC0+dGVzdF9kYXRhLT5zb21ldGhpbmdfZWxz
ZSk7DQorICAgICAgICB0ZXN0LT50ZXN0X2RhdGEtPnNvbWV0aGluZ19lbHNlID0gMTsNCisNCisg
ICAgICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbigwLA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfRE9ORSk7DQorDQorICAgICAgICB0ZXN0LT5m
YXVsdGVyX2l0ZXJzKys7DQorICAgIH0NCisNCitEb25lOg0KKw0KKyAgICByZXR1cm4gKDApOw0K
K30NCisNCisvLyB3cml0ZXIgdGhyZWFkIHByb2Nlc3NpbmcgZnVuY3Rpb24NCitzdGF0aWMgdm9p
ZCAqIHdyaXRlcl9mdW5jKHZvaWQgKnQpDQorew0KKyAgICB0ZXN0LT53cml0ZXJfdGlkID0gZ2V0
X2N1cnJlbnRfdGlkKCk7DQorICAgIHNldF9jdXJyZW50X3RocmVhZF9uYW1lKCk7DQorDQorICAg
IGZvciAoOzspDQorICAgIHsNCisgICAgICAgIC8vIGluZGljYXRlIHdlIGhhdmUgcmVhY2hlZCB0
aGUgJ2lkbGUnIHN0YXRlDQorICAgICAgICBmc3RmX3N0YXRlX3RyYW5zaXRpb24oMCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9XUklURVJfSURMRSk7DQor
DQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUNCisgICAgICAgIGlm
IChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BSSU1F
KSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBn
b3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRl
c3QtPm11dGV4KTsNCisgICAgICAgICAgICAodm9pZCl0ZXN0LT50ZXN0X2RhdGEtPnZhbHVlOw0K
KyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAgICAg
IHRlc3QtPndyaXRlcl9pdGVycysrOw0KKyAgICAgICAgdGVzdC0+d3JpdGVyX2l0ZXJzLS07DQor
DQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJlcGFyZWQNCisgICAgICAgIGZzdGZfc3Rh
dGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9XUklURVJfSURMRSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9XUklURVJfUFJJTUVEKTsNCisNCisgICAg
ICAgIC8vIHdhaXQgZm9yIGVpdGhlciB0aGUga2VybmVsIGNvZGUgdG8gaGF2ZSBtb2RpZmllZCB0
aGUgcG1hcCBvciB0aGUgZmF1bHQgdG8gYmUgb3Zlcg0KKyAgICAgICAgaWYgKGZzdGZfc3RhdGVf
aW1wZWRpbWVudF9hbnkoRlNURl9TVEFURV9CSVRfS0VSTkVMX1BNQVBNT0QgfCBGU1RGX1NUQVRF
X0JJVF9GQVVMVEVSX0RPTkUpICYgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIGNo
YW5nZSB0aGUgdmFsdWUgYXQgdGhlIHRlc3QgbG9jYXRpb24gdG8gc29tZXRoaW5nIGVsc2UNCisg
ICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdGVzdC0+bXV0ZXgpOw0KKw0KKyAgICAgICAgICAg
ICh2b2lkKXRlc3QtPnRlc3RfZGF0YS0+dmFsdWU7DQorDQorICAgICAgICAgICAgRlNURl9ERUJV
R19NSVNDKCJXcml0aW5nIHRvIGFkZHJlc3M6ICVwXG4iLCAmdGVzdC0+dGVzdF9kYXRhLT52YWx1
ZSk7DQorDQorICAgICAgICAgICAgdGVzdC0+dGVzdF9kYXRhLT52YWx1ZSA9IHZhbHVlX25ldzsN
CisNCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0LT5tdXRleCk7DQorDQorICAg
ICAgICB0ZXN0LT53cml0ZXJfaXRlcnMrKzsNCisgICAgfQ0KKw0KK0RvbmU6DQorDQorICAgIHJl
dHVybiAoMCk7DQorfQ0KKw0KKy8vIHJlYWRlciB0aHJlYWQgcHJvY2Vzc2luZyBmdW5jdGlvbg0K
K3N0YXRpYyB2b2lkICogcmVhZGVyX2Z1bmModm9pZCAqdDMpDQorew0KKyAgICB0ZXN0LT5yZWFk
ZXJfdGlkID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorICAgIHNldF9jdXJyZW50X3RocmVhZF9uYW1l
KCk7DQorDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIC8vIGluZGljYXRlIHdlIGhh
dmUgcmVhY2hlZCB0aGUgJ2lkbGUnIHN0YXRlDQorICAgICAgICBmc3RmX3N0YXRlX3RyYW5zaXRp
b24oMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFE
RVJfSURMRSk7DQorDQorICAgICAgICAvLyB3YWl0IHRvIGJlIHRvbGQgd2UgY2FuIHByZXBhcmUN
CisgICAgICAgIGlmIChmc3RmX3N0YXRlX2ltcGVkaW1lbnRfYW55KEZTVEZfU1RBVEVfQklUX1JF
QURZX1RPX1BSSU1FKSAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICB9DQorDQorICAgICAgICBwdGhyZWFkX211
dGV4X2xvY2soJnRlc3QtPm11dGV4KTsNCisgICAgICAgICAgICAodm9pZCl0ZXN0LT50ZXN0X2Rh
dGEtPnZhbHVlOw0KKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsN
CisNCisgICAgICAgIHRlc3QtPnJlYWRlcl9pdGVycysrOw0KKyAgICAgICAgdGVzdC0+cmVhZGVy
X2l0ZXJzLS07DQorDQorICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgcHJlcGFyZWQNCisgICAg
ICAgIGZzdGZfc3RhdGVfdHJhbnNpdGlvbihGU1RGX1NUQVRFX0JJVF9SRUFERVJfSURMRSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9SRUFERVJfUFJJTUVE
KTsNCisNCisgICAgICAgIC8vIHdhaXQgZm9yIGVpdGhlciB0aGUga2VybmVsIGNvZGUgdG8gaGF2
ZSBtb2RpZmllZCB0aGUgcG1hcCBvciB0aGUgZmF1bHQgdG8gYmUgb3Zlcg0KKyAgICAgICAgaWYg
KGZzdGZfc3RhdGVfaW1wZWRpbWVudF9hbnkoRlNURl9TVEFURV9CSVRfVEVTVF9BQ1RJVkUpICYg
RlNURl9TVEFURV9CSVRTX0ZJTklTSEVEKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdvdG8g
RG9uZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHdoaWxlICghZnN0Zl9zdGF0ZV9jaGVja19h
bnkoRlNURl9TVEFURV9CSVRfRkFVTFRFUl9ET05FIHwgRlNURl9TVEFURV9CSVRTX0ZJTklTSEVE
KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyByZWFkIHRoZSB2YWx1ZSBhdCB0aGUgdGVz
dCBsb2NhdGlvbiB0d2ljZSBhbmQgY29tcGxhaW4gaWYgaXQgaXMgZGlmZmVyZW50DQorICAgICAg
ICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmdGVzdC0+bXV0ZXgpID09IDApDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgaW5pdGlhbFZhbHVlID0g
dGVzdC0+dGVzdF9kYXRhLT52YWx1ZTsNCisNCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
IG5leHRWYWx1ZSA9IHRlc3QtPnRlc3RfZGF0YS0+dmFsdWU7DQorDQorICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5pdGlhbFZhbHVlICE9IG5leHRWYWx1ZSkNCisgICAgICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LT5taXNtYXRjaGVzKys7DQorDQorICAg
ICAgICAgICAgICAgICAgICAgICAgRlNURl9ERUJVR19NSVNDKCJNaXNtYXRjaCBkZXRlY3RlZCEg
T2xkPSVsdSwgTmV3PSVsdVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5pdGlhbFZhbHVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0VmFsdWUpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0LT5v
cHRfZWFybHlfZXJyb3JfZXhpdCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjogTWlzbWF0Y2g6IE9s
ZD0lbHUsIE5ldz0lbHVcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluaXRpYWxWYWx1ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dFZhbHVlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnN0Zl9z
dGF0ZV90cmFuc2l0aW9uKDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGU1RGX1NUQVRFX0JJVF9NSVNNQVRDSCk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5leHRWYWx1ZSA9PSB2YWx1ZV9vbGQpDQorICAgICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+b2xkX2RhdGErKzsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHRWYWx1ZSA9PSB2YWx1
ZV9uZXcpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdC0+bmV3X2RhdGErKzsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg
ICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3QtPm11dGV4KTsNCisNCisgICAgICAgICAg
ICAgICAgdGVzdC0+cmVhZGVyX2l0ZXJzKys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorRG9uZToNCisNCisgICAgcmV0dXJuICgwKTsNCit9DQorDQorLy8gc2h1dGRv
d24vam9pbiB0aHJlYWRzIGZvciBjb21wbGV0aW9uDQorc3RhdGljIGludCBmaW5pc2hfdGhyZWFk
cyh2b2lkKQ0KK3sNCisgICAgaW50IGVyciA9IDA7DQorICAgIGlmIChwdGhyZWFkX2pvaW4odGVz
dC0+ZmF1bHRlciwgIE5VTEwpKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJS
T1I6IHB0aHJlYWRfam9pbigpIGZhdWx0ZXJcbiIpOw0KKyAgICAgICAgZXJyID0gMTsNCisgICAg
fQ0KKyAgICBpZiAocHRocmVhZF9qb2luKHRlc3QtPndyaXRlciwgIE5VTEwpKQ0KKyAgICB7DQor
ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IHB0aHJlYWRfam9pbigpIHdyaXRlclxuIik7
DQorICAgICAgICBlcnIgPSAxOw0KKyAgICB9DQorICAgIGlmIChwdGhyZWFkX2pvaW4odGVzdC0+
cmVhZGVyLCAgTlVMTCkpDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJFUlJPUjog
cHRocmVhZF9qb2luKCkgcmVhZGVyXG4iKTsNCisgICAgICAgIGVyciA9IDE7DQorICAgIH0NCisg
ICAgcmV0dXJuIChlcnIpOw0KK30NCisNCisvLyBDbGVhbnVwIHN0dWZmIGZvciB0aHJlYWRpbmcN
CitzdGF0aWMgaW50IHRocmVhZF9jbGVhbnVwKHZvaWQpDQorew0KKyAgICBwdGhyZWFkX211dGV4
X2Rlc3Ryb3koJnRlc3QtPm11dGV4KTsNCisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnRlc3Qt
PnRhdHRyKTsNCisgICAgcmV0dXJuICgwKTsNCit9DQorDQorLy8gZG8gdGhlIGFjdHVhbCB0ZXN0
aW5nDQorc3RhdGljIGludCBydW5fdGVzdCh2b2lkKQ0KK3sNCisgICAgaW50IGVyciA9IDA7DQor
DQorICAgIGlmICh0aHJlYWRfcHJlcCgpKQ0KKyAgICB7DQorICAgICAgICBlcnIgPSAxOw0KKyAg
ICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKHN0YXJ0X3RocmVhZHMoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBlcnIgPSAxOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
bWFpbl9mdW5jKDApOw0KKw0KKyAgICAgICAgaWYgKGZpbmlzaF90aHJlYWRzKCkpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgZXJyID0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHRocmVh
ZF9jbGVhbnVwKCk7DQorICAgIH0NCisgICAgcmV0dXJuIChlcnIpOw0KK30NCisNCisvLyBvdXRw
dXQgYmFzaWMgaGVscCBpbmZvDQorc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqIHByb2du
YW1lKQ0KK3sNCisgICAgY29uc29sZV9vdXRwdXQoIlVzYWdlOiAlcyBbb3B0c11cbiINCisgICAg
ICAgICAgICAgICAgICAgIk9QVElPTlM6XG4iDQorICAgICAgICAgICAgICAgICAgICIgICAgLW4g
TiAuLi4uLi4uLiBzZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMsIGRlZmF1bHQ9JWx1XG4iDQorICAg
ICAgICAgICAgICAgICAgICIgICAgLXYgICAuLi4uLi4uLiBvdXRwdXQgZGVidWdnaW5nIGRhdGEg
YXQgdGhlIGVuZCBvZiB0aGUgcnVuXG4iDQorICAgICAgICAgICAgICAgICAgICIgICAgLWQgICAu
Li4uLi4uLiByZXF1ZXN0IGhlYXZpZXIgZGVidWdnaW5nIGluIHRoZSBrZXJuZWxcbiINCisgICAg
ICAgICAgICAgICAgICAgIiAgICAtayAgIC4uLi4uLi4uIGtlZXAgcnVubmluZzsgZG9uJ3QgZXhp
dCBlYXJseSBvbiBtaXNtYXRjaFxuIg0KKyAgICAgICAgICAgICAgICAgICAiICAgIC13ICAgLi4u
Li4uLi4gd2lyZSB0aGUgbWVtb3J5IHdpdGggbWxvY2thbGxcbiINCisgICAgICAgICAgICAgICAg
ICAgIiAgICAtaCAuLi4uLi4uLi4uIHNob3cgdGhpcyBoZWxwXG4iLA0KKyAgICAgICAgICAgICAg
ICAgICBwcm9nbmFtZSwNCisgICAgICAgICAgICAgICAgICAgb3B0X2l0ZXJhdGlvbnNfZGVmYXVs
dCk7DQorfQ0KKw0KKy8vIGEgY2FuY2VsIGhhbmRsZXIgc28gYSBjdHJsLWMnZWQgbG9uZyBydW5u
aW5nIHRlc3QgY2FuIHN0aWxsIG91dHB1dCB1c2VmdWwgaW5mbw0KK3N0YXRpYyB2b2lkIGNhbmNl
bF9mdW5jdGlvbihpbnQgc2lnbm8pDQorew0KKyAgICBmc3RmX3N0YXRlX3RyYW5zaXRpb24oMCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfU1RBVEVfQklUX0NBTkNFTExFRCk7DQor
fQ0KKw0KKy8vIG1haW4NCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KK3sNCisg
ICAgdWludDY0X3QgdG0xLCB0bTIsIHRkaWZmOw0KKyAgICBpbnQgb3B0LCBlcnI7DQorICAgIGNo
YXIgKiBwRW5kOw0KKw0KKyAgICAvLyBzZXR1cCBvdXIgY2FuY2VsIGhhbmRsZXINCisgICAgaWYg
KHNpZ25hbChTSUdJTlQsIGNhbmNlbF9mdW5jdGlvbikgPT0gU0lHX0VSUikNCisgICAgew0KKyAg
ICAgICAgY29uc29sZV9vdXRwdXQoIkVSUk9SOiBzZXR0aW5nIHNpZ25hbCBoYW5kbGVyIGNhbmNl
bFxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorDQorICAgIC8vIGFsbG9jYXRlIG1l
bW9yeSBmb3IgdGhlIHRlc3QgbWFjaGluZXJ5OyB3ZSBkb24ndCBjYXJlIHdoZXJlIGl0IGlzIGJ1
dCB3YW50IGl0IHNoYXJlZCAobm9uLUNPVykNCisgICAgdm9pZCAqbWFjaGluZXJ5X21lbSA9IG1t
YXAoTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB0
ZXN0X21hY2hpbmVyeSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVB
RCB8IFBST1RfV1JJVEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFS
RUQgfCBNQVBfQU5PTiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0KKyAgICBpZiAobWFjaGluZXJ5X21lbSA9
PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGFsbG9jYXRp
bmcgbWVtb3J5IGZvciB0ZXN0IG1hY2hpbmVyeVxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAg
ICB9DQorDQorICAgIHRlc3QgPSBtYWNoaW5lcnlfbWVtOw0KKyAgICB0ZXN0X21hY2hpbmVyeV9p
bml0KCk7DQorDQorICAgIHRlc3QtPm1haW5fdGlkID0gZ2V0X2N1cnJlbnRfdGlkKCk7DQorICAg
IHNldF9jdXJyZW50X3RocmVhZF9uYW1lKCk7DQorDQorICAgIHdoaWxlICgob3B0ID0gZ2V0b3B0
KGFyZ2MsIGFyZ3YsICJodmRrZnduOiIpKSAhPSAtMSkNCisgICAgew0KKyAgICAgICAgc3dpdGNo
IChvcHQpDQorICAgICAgICB7DQorICAgICAgICAgICAgY2FzZSAnbic6DQorICAgICAgICAgICAg
ICAgIHRlc3QtPm9wdF9pdGVyYXRpb25zID0gc3RydG9sKG9wdGFyZywgJnBFbmQsIDEwKTsNCisg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAndic6DQorICAgICAgICAg
ICAgICAgIHRlc3QtPmRlYnVnX3ZhbHVlIHw9IEZTVEZfU1lTQ1RMX0RFQlVHX09OOw0KKyAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlICdkJzoNCisgICAgICAgICAgICAg
ICAgdGVzdC0+ZGVidWdfdmFsdWUgfD0gRlNURl9TWVNDVExfREVCVUdfSEVBVlk7DQorICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgJ2snOg0KKyAgICAgICAgICAgICAg
ICB0ZXN0LT5vcHRfZWFybHlfZXJyb3JfZXhpdCA9IDA7DQorICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgICAgICAgIGNhc2UgJ3cnOg0KKyAgICAgICAgICAgICAgICB0ZXN0LT5vcHRfd2ly
ZWQgPSAxOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlICdoJzoN
CisgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7DQorICAgICAgICAgICAgICAgIGV4aXQo
MCk7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGRlZmF1bHQgOiB1c2Fn
ZShhcmd2WzBdKTsNCisgICAgICAgICAgICAgICAgZXhpdCgtMSk7DQorICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGNvbnNvbGVfb3V0cHV0KCJSVU5U
SU1FIFBBUkFNUzoiDQorICAgICAgICAgICAgICAgICAgICJuaXRlcnMgJS0yMGx1XG4iLA0KKyAg
ICAgICAgICAgICAgICAgICB0ZXN0LT5vcHRfaXRlcmF0aW9ucyk7DQorDQorICAgIHNpemVfdCBz
aXplOw0KKyAgICBwaWRfdCBwaWQ7DQorICAgIHVpbnQ2NF90IG9sZDsNCisgICAgdWludDY0X3Qg
bmV3Ow0KKw0KKyAgICAvLyBvYnRhaW4gdGhlIHRzYyBmcmVxdWVuY3kgZnJvbSB0aGUgc3lzY3Rs
DQorICAgIHNpemUgPSBzaXplb2Yob2xkKTsNCisgICAgZXJyID0gc3lzY3RsYnluYW1lKCJtYWNo
ZGVwLnRzY19mcmVxIiwgJm9sZCwgJnNpemUsIE5VTEwsIDApOw0KKyAgICBpZiAoZXJyKQ0KKyAg
ICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxpbmcgbWFjaGRlcC50c2Nf
ZnJlcVxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnRzY19mcmVx
ID0gb2xkOw0KKw0KKyAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0ZXN0IHJlZ2lvbjsg
IHB1dCBpdCBhdCBhIGZpeGVkIGFkZHJlc3MgYW5kIENPVy4NCisgICAgdm9pZCAqdGVzdF9kYXRh
X21lbSA9IG1tYXAoKHZvaWQqKUZTVEZfQ09OU1RBTlRfVkFERFIsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdGVzdF9kYXRhKSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDApOw0KKyAgICBpZiAodGVzdF9kYXRhX21lbSA9PSBOVUxMKQ0KKyAgICB7DQor
ICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IG51bGwgdGVzdCBzdHJ1Y3QgYWRkclxuIik7
DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnRlc3RfZGF0YSA9IHRlc3Rf
ZGF0YV9tZW07DQorICAgIHRlc3QtPnRlc3RfZGF0YS0+dmFsdWUgPSAweGZmZmZmZmZmZmZmZmZm
ZmZ1bGw7DQorDQorICAgIC8vIGNhbGwgaW50byB0aGUgc3lzY3RsIHRvIHByZXBhcmUgdGhlIHRl
c3Q7ICBwYXNzIHRoZSBkZXNpcmVkIGRlYnVnZ2luZyBvcHRpb25zDQorICAgIHNpemUgPSBzaXpl
b2Yob2xkKTsNCisgICAgcGlkID0gZ2V0cGlkKCk7DQorICAgIG5ldyA9ICgodWludDY0X3QpcGlk
KTsNCisgICAgaWYgKHRlc3QtPmRlYnVnX3ZhbHVlKQ0KKyAgICB7DQorICAgICAgICBuZXcgPSB0
ZXN0LT5kZWJ1Z192YWx1ZSB8ICgodWludDY0X3QpcGlkKTsNCisgICAgfQ0KKyAgICBlcnIgPSBz
eXNjdGxieW5hbWUoImtlcm4uZnN0Zl9zZXR1cCIsICZvbGQsICZzaXplLCAmbmV3LCBzaXplb2Yo
bmV3KSk7DQorICAgIGlmIChlcnIpDQorICAgIHsNCisgICAgICAgIGNvbnNvbGVfb3V0cHV0KCJF
UlJPUjogY2FsbGluZyBrZXJuZWwgdGVzdCBob29rLCBuZXc6IDB4JWx4XG4iLCBuZXcpOw0KKyAg
ICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KKyAgICAvLyBjYWxsIGludG8gYSBzeXNjdGwgdG8g
Z2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoZSBrZXJuZWwgc2V0dXANCisgICAgc2l6ZSA9IHNp
emVvZihvbGQpOw0KKyAgICBlcnIgPSBzeXNjdGxieW5hbWUoImtlcm4uZnN0Zl9jb250cm9sX3Bh
ZGRyIiwgJm9sZCwgJnNpemUsIE5VTEwsIDApOw0KKyAgICBpZiAoZXJyKQ0KKyAgICB7DQorICAg
ICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxpbmcga2VybmVsIHRlc3QgYWRkclxuIik7
DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHRlc3QtPnN0YXRlX2NvbnRyb2xfcGh5
cyA9IG9sZDsNCisNCisgICAgLy8gbWFwIHRoZSBwaHlzaWNhbCBjb250cm9sIGFkZHJlc3MgaW50
byBvdXIgYWRkcmVzcyBzcGFjZSBzbyB3ZSBjYW4gY29vcmRpbmF0ZQ0KKyAgICB2b2lkICpjb250
cm9sX21lbSA9IG1tYXAoTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0Vf
U0laRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJ
VEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGV2X21lbV9mZCgpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG9mZl90KXRlc3QtPnN0YXRlX2NvbnRyb2xfcGh5cyk7DQorICAgIGlmIChjb250
cm9sX21lbSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6
IG1tYXBpbmcgY29udHJvbCByZWdpb25cbiIpOw0KKyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0K
KyAgICB0ZXN0LT5zdGF0ZV9jb250cm9sID0gY29udHJvbF9tZW07DQorDQorICAgIC8vIGFsbG93
IGEgcnVudGltZSB0b2dnbGUgdG8gJ2xvY2snIHRoZSB0ZXN0IHJlZ2lvbiB0byBkZW1vbnN0cmF0
ZSBpdCAiZml4ZXMgdGhlIGdsaXRjaCINCisgICAgaWYgKHRlc3QtPm9wdF93aXJlZCkNCisgICAg
ew0KKyAgICAgICAgZXJyID0gbWxvY2thbGwoTUNMX0NVUlJFTlQpOw0KKyAgICAgICAgaWYgKGVy
cikNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb25zb2xlX291dHB1dCgiRVJST1I6IGNhbGxp
bmcgbWxvY2thbGxcbiIpOw0KKyAgICAgICAgICAgIGV4aXQoMSk7DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgLy8gcnVuIHRoZSB0ZXN0DQorICAgIHVpbnQzMl90IGF1eDsNCisgICAgdG0x
ID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgZXJyID0gcnVuX3Rlc3QoKTsNCisgICAg
dG0yID0gZnN0Zl90c2NfYW5kX2F1eCgmYXV4KTsNCisgICAgdGRpZmYgPSAodG0yIC0gdG0xKTsN
CisNCisgICAgLy8gZXJyb3IgaWYgd2UgZm91bmQgYW55IGRpc2NyZXBhbmNpZXMNCisgICAgcHRo
cmVhZF9tdXRleF9sb2NrKCZ0ZXN0LT5tdXRleCk7DQorICAgICAgICB1aW50NjRfdCBtaXNtYXRj
aGV6ID0gdGVzdC0+bWlzbWF0Y2hlczsNCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3Qt
Pm11dGV4KTsNCisgICAgaWYgKG1pc21hdGNoZXopDQorICAgIHsNCisgICAgICAgIGVyciA9IDE7
DQorICAgIH0NCisNCisgICAgLy8gb3V0cHV0IHRoZSBkZWJ1Z2dpbmcgZnJvbSB0aGUgdGVzdA0K
KyAgICBkdW1wX2RlYnVnKCk7DQorDQorICAgIC8vIG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHRlc3QgcnVuDQorICAgIGNoYXIgc3RhdHVzWzEwMjRdOw0KKyAgICBmc3RmX2Rl
YnVnX2ZpbGxfc3RhdGVfZGVzY3IoKGZzdGZfc3RhdGVfdmFsdWUoKSAmIEZTVEZfU1RBVEVfQklU
U19GSU5JU0hFRCksIHN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOw0KKyAgICBjb25zdCBjaGFyICog
cmVhc29uID0gc3RhdHVzOw0KKyAgICB3aGlsZSAoKnJlYXNvbiA9PSAnICcpIHsgcmVhc29uKys7
IH0NCisgICAgY29uc29sZV9vdXRwdXQoInJ1bnRpbWUgKHNlYykgJWxmXG4iDQorICAgICAgICAg
ICAgICAgICAgICJmb3JrcyAlbHVcbiINCisgICAgICAgICAgICAgICAgICAgImZhdWx0ZXIgaXRl
cnMgJWx1XG4iDQorICAgICAgICAgICAgICAgICAgICJ3cml0ZXIgaXRlcnMgJWx1XG4iDQorICAg
ICAgICAgICAgICAgICAgICJyZWFkZXIgaXRlcnMgJWx1XG4iDQorICAgICAgICAgICAgICAgICAg
ICJyZWFkZXIgdmFsdWUgb2xkICVsdVxuIg0KKyAgICAgICAgICAgICAgICAgICAicmVhZGVyIHZh
bHVlIG5ldyAlbHVcbiINCisgICAgICAgICAgICAgICAgICAgInBtYXBzdGFsbHMgJWx1XG4iDQor
ICAgICAgICAgICAgICAgICAgICJtaXNtYXRjaGVzICVsdVxuIg0KKyAgICAgICAgICAgICAgICAg
ICAiY29tcGxldGlvbiByZWFzb24gJXNcbiINCisgICAgICAgICAgICAgICAgICAgImV4aXQgJWRc
biIsDQorICAgICAgICAgICAgICAgICAgICgoMS4wKnRkaWZmKS9mc3RmX3RzY19mcmVxdWVuY3lf
c2Vjb25kcygpKSwNCisgICAgICAgICAgICAgICAgICAgdGVzdC0+Zm9ya3MsDQorICAgICAgICAg
ICAgICAgICAgIHRlc3QtPmZhdWx0ZXJfaXRlcnMsDQorICAgICAgICAgICAgICAgICAgIHRlc3Qt
PndyaXRlcl9pdGVycywNCisgICAgICAgICAgICAgICAgICAgdGVzdC0+cmVhZGVyX2l0ZXJzLA0K
KyAgICAgICAgICAgICAgICAgICB0ZXN0LT5vbGRfZGF0YSwNCisgICAgICAgICAgICAgICAgICAg
dGVzdC0+bmV3X2RhdGEsDQorICAgICAgICAgICAgICAgICAgIHRlc3QtPnBtYXBzdGFsbHMsDQor
ICAgICAgICAgICAgICAgICAgIG1pc21hdGNoZXosDQorICAgICAgICAgICAgICAgICAgIHJlYXNv
biwNCisgICAgICAgICAgICAgICAgICAgZXJyKTsNCisNCisgICAgaWYgKG1hY2hpbmVyeV9tZW0p
DQorICAgIHsNCisgICAgICAgIG11bm1hcChtYWNoaW5lcnlfbWVtLCBzaXplb2Yoc3RydWN0IHRl
c3RfbWFjaGluZXJ5KSk7DQorICAgIH0NCisgICAgaWYgKGNvbnRyb2xfbWVtKQ0KKyAgICB7DQor
ICAgICAgICBtdW5tYXAoY29udHJvbF9tZW0sIFBBR0VfU0laRSk7DQorICAgIH0NCisgICAgaWYg
KHRlc3RfZGF0YV9tZW0pDQorICAgIHsNCisgICAgICAgIG11bm1hcCh0ZXN0X2RhdGFfbWVtLCBz
aXplb2Yoc3RydWN0IHRlc3RfZGF0YSkpOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoZXJyKTsN
Cit9DQpkaWZmIC0tZ2l0IGEvc3lzL3ZtL2Zvcmtpbmdfc3RhbGUuaCBiL3N5cy92bS9mb3JraW5n
X3N0YWxlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNzU1DQppbmRleCAwMDAwMDAwLi41Y2ZkZTgzDQot
LS0gL2Rldi9udWxsDQorKysgYi9zeXMvdm0vZm9ya2luZ19zdGFsZS5oDQpAQCAtMCwwICsxLDI5
NiBAQA0KKy8qDQorICogRlNURg0KKyAqDQorICogZm9ya2luZyBzdGFsZSB0ZXN0IGZpeHR1cmUg
aGVhZGVyDQorICoNCisgKiBDb21tb24gY29uc3RhbnRzIGZvciB1c2Vyc3BhY2Uva2VybmVsIGZv
cmstY293LWJ1ZyByZXBybw0KKyAqLw0KKw0KKyNpZm5kZWYgX0ZPUktJTkdfU1RBTEVfXw0KKyNk
ZWZpbmUgX0ZPUktJTkdfU1RBTEVfXw0KKw0KKyNpbmNsdWRlIDxtYWNoaW5lL2F0b21pYy5oPg0K
Kw0KKy8vIEEgY29tbW9uIHZpcnR1YWwgYWRkcmVzcyB0byB0YXJnZXQNCisjZGVmaW5lIEZTVEZf
Q09OU1RBTlRfT0ZGU0VUIDMxMzM3DQorI2RlZmluZSBGU1RGX0NPTlNUQU5UX1ZBRERSICgzMTMz
NyAqIFBBR0VfU0laRSkNCisjZGVmaW5lIEZTVEZfQ09OU1RBTlRfVElNRU9VVF9TRUNPTkRTIDEN
CisNCisvLyBWYXJpb3VzIGJpdHMgb2Ygc3RhdGUgaW5mb3JtYXRpb24gZWFzaWx5IGFjY2Vzc2Vk
L3NoYXJlZCBpbiBhIHVpbnQ2NF90IHNpemUgdmFsdWUNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU
X0NPTVBMRVRFICAgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMGxsdSAgIC8vIE5hdHVyYWwgdGVy
bWluYXRpb24gKGl0ZXJhdGlvbiBjb3VudCByZWFjaGVkKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9C
SVRfVElNRU9VVCAgICAgICAgICAgMHg0MDAwMDAwMDAwMDAwMDAwbGx1ICAgLy8gU3RhdGUgY2hh
bmdlIHRpbWVvdXQgKHVuZXhwZWN0ZWQgdGVzdCBjb25kaXRpb24pDQorI2RlZmluZSBGU1RGX1NU
QVRFX0JJVF9NSVNNQVRDSCAgICAgICAgICAweDIwMDAwMDAwMDAwMDAwMDBsbHUgICAvLyBNaXNt
YXRjaCBkZXRlY3RlZCAocmVhbCBwcm9ibGVtIGZvdW5kKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9C
SVRfQ0FOQ0VMTEVEICAgICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwbGx1ICAgLy8gRWFybHkgY2Fu
Y2VsbGF0aW9uIHJlcXVlc3RlZCBieSB0aGUgdXNlcg0KKyNkZWZpbmUgRlNURl9TVEFURV9CSVRf
RkFVTFRFUl9JRExFICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxbGx1ICAgLy8gVGhlIGZhdWx0ZXIg
dGhyZWFkIGF0IHRoZSBiZWdpbm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1dSSVRFUl9J
RExFICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMmxsdSAgIC8vIFRoZSB3cml0ZXIgdGhyZWFkIGF0
IHRoZSBiZWdpbm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1JFQURFUl9JRExFICAgICAg
IDB4MDAwMDAwMDAwMDAwMDAwNGxsdSAgIC8vIFRoZSByZWFkZXIgdGhyZWFkIGF0IHRoZSBiZWdp
bm5pbmcNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BSSU1FICAgIDB4MDAwMDAw
MDAwMDAwMDAwOGxsdSAgIC8vIEZvcmsgaXMgcmVhZHkgZm9yIHRocmVhZCB0byBwcmVwYXJlICh2
bV9tYXAgaW4gQ09XIHN0YXRlKQ0KKyNkZWZpbmUgRlNURl9TVEFURV9CSVRfRkFVTFRFUl9QUklN
RUQgICAgMHgwMDAwMDAwMDAwMDAwMDEwbGx1ICAgLy8gVGhlIGZhdWx0ZXIgdGhyZWFkIGhhcyAi
cHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5kcyB0byB1c2UNCisjZGVmaW5lIEZTVEZfU1RBVEVf
QklUX1dSSVRFUl9QUklNRUQgICAgIDB4MDAwMDAwMDAwMDAwMDAyMGxsdSAgIC8vIFRoZSB3cml0
ZXIgdGhyZWFkIGhhcyAicHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5kcyB0byB1c2UNCisjZGVm
aW5lIEZTVEZfU1RBVEVfQklUX1JFQURFUl9QUklNRUQgICAgIDB4MDAwMDAwMDAwMDAwMDA0MGxs
dSAgIC8vIFRoZSByZWFkZXIgdGhyZWFkIGhhcyAicHJpbWVkIiB2YXJpYWJsZXMgaXQgaW50ZW5k
cyB0byB1c2UNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUX1RFU1RfQUNUSVZFICAgICAgIDB4MDAw
MDAwMDAwMDAwMDA4MGxsdSAgIC8vIFRoZSByYWNlIGlzIG9uDQorI2RlZmluZSBGU1RGX1NUQVRF
X0JJVF9LRVJORUxfUE1BUE1PRCAgICAweDAwMDAwMDAwMDAwMDAxMDBsbHUgICAvLyBUaGUgcG1h
cCBoYXMgYmVlbiB1cGRhdGVkIGluIHRoZSBrZXJuZWwNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU
X0ZBVUxURVJfRE9ORSAgICAgIDB4MDAwMDAwMDAwMDAwMDIwMGxsdSAgIC8vIFRoZSBmYXVsdGVy
IHRocmVhZCBoYXMgImNvbXBsZXRlZCIgaXRzIHVwZGF0ZQ0KKw0KKy8vIFZhcmlvdXMgY29tYmlu
YXRpb25zIG9mIHRoZSBhYm92ZSBiaXRzDQorI2RlZmluZSBGU1RGX1NUQVRFX0JJVFNfQUxMICAg
ICAgICAgICAgICAweGZmZmZmZmZmZmZmZmZmZmZsbHUNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklU
U19GSU5JU0hFRCAgICAgICAgIDB4ZjAwMDAwMDAwMDAwMDAwMGxsdQ0KKyNkZWZpbmUgRlNURl9T
VEFURV9CSVRTX0lETEUgICAgICAgICAgICAgKEZTVEZfU1RBVEVfQklUX0ZBVUxURVJfSURMRSB8
IEZTVEZfU1RBVEVfQklUX1dSSVRFUl9JRExFIHwgRlNURl9TVEFURV9CSVRfUkVBREVSX0lETEUp
DQorI2RlZmluZSBGU1RGX1NUQVRFX0JJVFNfUFJJTUVEICAgICAgICAgICAoRlNURl9TVEFURV9C
SVRfRkFVTFRFUl9QUklNRUQgfCBGU1RGX1NUQVRFX0JJVF9XUklURVJfUFJJTUVEIHwgRlNURl9T
VEFURV9CSVRfUkVBREVSX1BSSU1FRCkNCisjZGVmaW5lIEZTVEZfU1RBVEVfQklUU19ET05FICAg
ICAgICAgICAgIChGU1RGX1NUQVRFX0JJVF9GQVVMVEVSX0RPTkUpDQorI2RlZmluZSBGU1RGX1NU
QVRFX0JJVFNfUkVTRVQgICAgICAgICAgICAoRlNURl9TVEFURV9CSVRTX1BSSU1FRCB8IEZTVEZf
U1RBVEVfQklUX0tFUk5FTF9QTUFQTU9EIHwgRlNURl9TVEFURV9CSVRTX0RPTkUgfCBGU1RGX1NU
QVRFX0JJVF9URVNUX0FDVElWRSkNCisNCisvLyBTb21lIHByZS1kZXRlcm1pbmVkICJmYXN0ZXIi
IGRlYnVnZ2luZyBtb2Rlcw0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1VOVVNFRCAgICAgICAg
ICAgICAgICAgMA0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX01JU0NFTExBTkVPVVMgICAgICAg
ICAgMQ0KKyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1RSQU5TSVRJT05fSU5JVElBTCAgICAgMg0K
KyNkZWZpbmUgRlNURl9ERUJVR19UWVBFX1RSQU5TSVRJT05fRklOQUwgICAgICAgMw0KKyNkZWZp
bmUgRlNURl9ERUJVR19UWVBFX0lNUEVESU1FTlRfSU5JVElBTCAgICAgNA0KKyNkZWZpbmUgRlNU
Rl9ERUJVR19UWVBFX0lNUEVESU1FTlRfRklOQUwgICAgICAgNQ0KKyNkZWZpbmUgRlNURl9ERUJV
R19UWVBFX0NIRUNLX1NUQVRFICAgICAgICAgICAgNg0KKw0KKy8vIHN5c2N0bCB0ZXN0IGhvb2sg
ZmxhZ3MNCisjZGVmaW5lIEZTVEZfU1lTQ1RMX1BJRF9NQVNLICAgICAgMHgwMDAwMDAwMGZmZmZm
ZmZmdWxsDQorI2RlZmluZSBGU1RGX1NZU0NUTF9ERUJVR19NQVNLICAgIDB4ZmZmZmZmZmYwMDAw
MDAwMHVsbA0KKyNkZWZpbmUgRlNURl9TWVNDVExfREVCVUdfT04gICAgICAweDgwMDAwMDAwMDAw
MDAwMDB1bGwNCisjZGVmaW5lIEZTVEZfU1lTQ1RMX0RFQlVHX0hFQVZZICAgMHhDMDAwMDAwMDAw
MDAwMDAwdWxsDQorDQorLy8gRGVidWcgY29uc3RhbnRzDQorI2RlZmluZSBGU1RGX0RFQlVHX0NP
TlNUX01JU0NfU0laRSA4MDANCisjZGVmaW5lIEZTVEZfREVCVUdfRk9STUFUX1NUUiAiVFNDOiUx
OGx1IENQVTolMDJkIFRJRDolMDZkICUtMTBzIENPREU6JTE1czolMDRkIFNUQVRFOjB4JTAxNmx4
IE1TRzolcyINCisNCisvLyBoZWxwZXIgbWFjcm9zIHRvIGRvIGNvbnNpc3RlbnQgZGVidWdnaW5n
DQorI2RlZmluZSBGU1RGX0RFQlVHX0VOVFJZX1BPRjIgOQ0KKyNkZWZpbmUgRlNURl9ERUJVR19O
VU1CRVJfRU5UUklFUyAoMSA8PCBGU1RGX0RFQlVHX0VOVFJZX1BPRjIpDQorI2RlZmluZSBGU1RG
X0RFQlVHX1BPU0lUSU9OX0lOREVYKG51bSkgKG51bSAmIChGU1RGX0RFQlVHX05VTUJFUl9FTlRS
SUVTLTEpKQ0KKyNkZWZpbmUgRlNURl9ERUJVR19NSVNDKGZtdCwgLi4uKSBmc3RmX2RlYnVnX21p
c2MoX19GSUxFX18sIF9fTElORV9fLCBmbXQsICMjX19WQV9BUkdTX18pOw0KKw0KKy8vIFN0cnVj
dHVyZSBjb250YWluaW5nIGRhdGEgZm9yIGRlYnVnIG1lc3NhZ2VzDQorc3RydWN0IGZzdGZfZGVi
dWdfZGF0YQ0KK3sNCisgICAgdWludDY0X3QgdHNjOw0KKyAgICB1aW50MzJfdCBhdXg7DQorICAg
IGludCB0aWQ7DQorICAgIGNvbnN0IGNoYXIgKiBmaWxlOw0KKyAgICBpbnQgbGluZTsNCisgICAg
dWludDY0X3Qgc3RhdGU7DQorICAgIHVpbnQzMl90IGRiZ190eXBlOw0KKyAgICBjaGFyIG1pc2Nb
RlNURl9ERUJVR19DT05TVF9NSVNDX1NJWkVdOw0KK307DQorDQorLy8gQSAic2xpbSIgZGVidWdn
aW5nIHZhcmlhbnQNCit2b2lkIGZzdGZfZGVidWdfZmFzdChjb25zdCBjaGFyICogZmlsZSwgaW50
IGxpbmUsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IHN0YXRlKTsNCisNCisvLyBBICJtaXNjIiBk
ZWJ1Z2dpbmcgdmFyaWFudA0KK3ZvaWQgZnN0Zl9kZWJ1Z19taXNjKGNvbnN0IGNoYXIgKiBmaWxl
LCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KKw0KKy8vIEEgbG9jYXRpb24gd2hl
cmUgdGhlIHN0YXRlIHZhcmlhYmxlIGNhbiBiZSBhY2Nlc3NlZA0KK3ZvbGF0aWxlIHVpbnQ2NF90
ICogZnN0Zl9zdGF0ZV9jb250cm9sKHZvaWQpOw0KKw0KKy8vIEdldCB0aGUgdHNjIGZyZXF1ZW5j
eQ0KK3VpbnQ2NF90IGZzdGZfdHNjX2ZyZXF1ZW5jeV9zZWNvbmRzKHZvaWQpOw0KKw0KKy8vIEdl
dCB0aGUgImN1cnJlbnQiIHN0YXRlIHZhbHVlDQorc3RhdGljIHVpbnQ2NF90IGZzdGZfc3RhdGVf
dmFsdWUodm9pZCkNCit7DQorICAgIHZvbGF0aWxlIHVpbnQ2NF90ICogY29udHJvbCA9IGZzdGZf
c3RhdGVfY29udHJvbCgpOw0KKyAgICB1aW50NjRfdCBzdGF0ZSA9IDA7DQorICAgIGlmIChjb250
cm9sKQ0KKyAgICB7DQorICAgICAgICBzdGF0ZSA9IGF0b21pY19sb2FkX2FjcV82NChjb250cm9s
KTsNCisgICAgfQ0KKyAgICByZXR1cm4gKHN0YXRlKTsNCit9DQorDQorLy8gUHVzaGVzIGEgdGV4
dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdGUgZmxhZ3MgaW50byBhIHN1cHBsaWVkIGJ1ZmZl
cg0KK3N0YXRpYyB2b2lkIGZzdGZfZGVidWdfZmlsbF9zdGF0ZV9kZXNjcih1aW50NjRfdCBzdGF0
ZSwgY2hhciAqIGJ1ZiwgaW50IGxlbikNCit7DQorICAgIHNucHJpbnRmKGJ1ZiwNCisgICAgICAg
ICAgICAgbGVuLA0KKyAgICAgICAgICAgICAiJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMg
JTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzIiwNCisgICAgICAgICAgICAg
KChzdGF0ZSAmIEZTVEZfU1RBVEVfQklUX0NPTVBMRVRFKSA/ICAgICAgICAgICAgICAiQ09NUExF
VEUiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfVElNRU9V
VCkgPyAgICAgICAgICAgICAgICJUSU1FT1VUIiA6ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0
ZSAmIEZTVEZfU1RBVEVfQklUX01JU01BVENIKSA/ICAgICAgICAgICAgICAiTUlTTUFUQ0giIDog
IiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfQ0FOQ0VMTEVEKSA/
ICAgICAgICAgICAgICJDQU5DRUxMRUQiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYg
RlNURl9TVEFURV9CSVRfRkFVTFRFUl9JRExFKSA/ICAgICAgICAgICJGQVVMVEVSX0lETEUiIDog
IiIpLA0KKyAgICAgICAgICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfV1JJVEVSX0lETEUp
ID8gICAgICAgICAgICJXUklURVJfSURMRSIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUg
JiBGU1RGX1NUQVRFX0JJVF9SRUFERVJfSURMRSkgPyAgICAgICAgICAgIlJFQURFUl9JRExFIiA6
ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0ZSAmIEZTVEZfU1RBVEVfQklUX1JFQURZX1RPX1BS
SU1FKSA/ICAgICAgICAiUkVBRFlfVE9fUFJJTUUiIDogIiIpLA0KKyAgICAgICAgICAgICAoKHN0
YXRlICYgRlNURl9TVEFURV9CSVRfRkFVTFRFUl9QUklNRUQpID8gICAgICAgICJGQVVMVEVSX1BS
SU1FRCIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUgJiBGU1RGX1NUQVRFX0JJVF9XUklU
RVJfUFJJTUVEKSA/ICAgICAgICAgIldSSVRFUl9QUklNRUQiIDogIiIpLA0KKyAgICAgICAgICAg
ICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfUkVBREVSX1BSSU1FRCkgPyAgICAgICAgICJSRUFE
RVJfUFJJTUVEIiA6ICIiKSwNCisgICAgICAgICAgICAgKChzdGF0ZSAmIEZTVEZfU1RBVEVfQklU
X1RFU1RfQUNUSVZFKSA/ICAgICAgICAgICAiVEVTVF9BQ1RJVkUiIDogIiIpLA0KKyAgICAgICAg
ICAgICAoKHN0YXRlICYgRlNURl9TVEFURV9CSVRfS0VSTkVMX1BNQVBNT0QpID8gICAgICAgICJL
RVJORUxfUE1BUE1PRCIgOiAiIiksDQorICAgICAgICAgICAgICgoc3RhdGUgJiBGU1RGX1NUQVRF
X0JJVF9GQVVMVEVSX0RPTkUpID8gICAgICAgICAgIkZBVUxURVJfRE9ORSIgOiAiIikpOw0KK30N
CisNCisvLyBEZXNjcmliZSB0aGUgZGVidWcgYWN0aW9uDQorc3RhdGljIGNvbnN0IGNoYXIgKiBm
c3RmX2RlYnVnX3R5cGVfZGVzY3IodWludDMyX3QgdHlwZSkNCit7DQorICAgIHN3aXRjaCh0eXBl
KQ0KKyAgICB7DQorICAgIGNhc2UgRlNURl9ERUJVR19UWVBFX01JU0NFTExBTkVPVVM6DQorICAg
ICAgICByZXR1cm4gKCJNaXNjZWxsYW5lb3VzIik7DQorICAgIGNhc2UgRlNURl9ERUJVR19UWVBF
X1RSQU5TSVRJT05fSU5JVElBTDoNCisgICAgICAgIHJldHVybiAoIlRyYW5zaXRpb24gSW5pdGlh
bCIpOw0KKyAgICBjYXNlIEZTVEZfREVCVUdfVFlQRV9UUkFOU0lUSU9OX0ZJTkFMOg0KKyAgICAg
ICAgcmV0dXJuICgiVHJhbnNpdGlvbiBGaW5hbCIpOw0KKyAgICBjYXNlIEZTVEZfREVCVUdfVFlQ
RV9JTVBFRElNRU5UX0lOSVRJQUw6DQorICAgICAgICByZXR1cm4gKCJJbXBlZGltZW50IEluaXRp
YWwiKTsNCisgICAgY2FzZSBGU1RGX0RFQlVHX1RZUEVfSU1QRURJTUVOVF9GSU5BTDoNCisgICAg
ICAgIHJldHVybiAoIkltcGVkaW1lbnQgRmluYWwiKTsNCisgICAgY2FzZSBGU1RGX0RFQlVHX1RZ
UEVfQ0hFQ0tfU1RBVEU6DQorICAgICAgICByZXR1cm4gKCJDaGVjayBTdGF0ZSIpOw0KKyAgICBk
ZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisgICAgcmV0dXJuICgiVW5rbm93biIp
Ow0KK30NCisNCisvLyBzdHJpcCAibWlzYyIgcGF0aCBpbmZvcm1hdGlvbiBmcm9tIGEgZmlsZSBu
YW1lIGxlYXZpbmcganVzdCB0aGUgZmlsZSBlbGVtZW50IG5hbWUNCitzdGF0aWMgY29uc3QgY2hh
ciAqIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGNvbnN0IGNoYXIgKiBmaWxlKQ0KK3sNCisgICAgY29u
c3QgY2hhciAqIHA7DQorICAgIGNvbnN0IGNoYXIgKiBmbjsNCisgICAgc2l6ZV90IGxlbjsNCisN
CisgICAgZm4gPSBmaWxlOw0KKyAgICBpZiAoZm4gIT0gMCkNCisgICAgew0KKyAgICAgICAgZm9y
IChwID0gZm4sIGxlbiA9IHN0cmxlbihmbik7DQorICAgICAgICAgICAgbGVuID4gMDsNCisgICAg
ICAgICAgICBsZW4tLSwgcCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgqcCA9PSAn
LycgfHwgKnAgPT0gJ1xcJykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZuID0g
cCArIDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVy
biAoZm4pOw0KK30NCisNCisvLyAicmR0c2NwIg0KK3N0YXRpYyB1aW50NjRfdCBmc3RmX3RzY19h
bmRfYXV4KHVpbnQzMl90ICppcEF1eCkNCit7DQorLy8gICAgdWludDMyX3QgYSwgZDsNCisvLyAg
ICAqaXBBdXggPSAwOw0KKy8vICAgIF9fYXNtX18gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIgKGEp
LCAiPWQiIChkKSk7DQorLy8gICAgcmV0dXJuICgodWludDY0X3QpYSkgfCAoKCh1aW50NjRfdClk
KSA8PCAzMik7DQorICAgIHVpbnQ2NF90IGEsIGQ7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoInJk
dHNjcCIgOiAiPWEiIChhKSwgIj1kIiAoZCksICI9YyIgKCppcEF1eCkpOw0KKyAgICByZXR1cm4g
KGQgPDwgMzIpICsgYTsNCit9DQorDQorLy8gVXBkYXRlcyB0aGUgc3RhdGUgZGF0YSB0byByZW1v
dmUgJ3JlbW92ZV9iaXRzJyBhbmQgYWRkICdpbmNsdWRlX2JpdHMnDQorc3RhdGljIHVpbnQ2NF90
IGZzdGZfY2hhbmdlX3N0YXRlX2JpdHModWludDY0X3QgcmVtb3ZlX2JpdHMsIHVpbnQ2NF90IGlu
Y2x1ZGVfYml0cykNCit7DQorICAgIHVpbnQ2NF90IG9sZF92YWw7DQorICAgIHVpbnQ2NF90IG5l
d192YWw7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIG9sZF92YWwgPSBhdG9taWNfbG9h
ZF9hY3FfNjQoZnN0Zl9zdGF0ZV9jb250cm9sKCkpOw0KKyAgICAgICAgbmV3X3ZhbCA9ICgob2xk
X3ZhbCAmICh+cmVtb3ZlX2JpdHMpKSB8IGluY2x1ZGVfYml0cyk7DQorICAgICAgICBpZiAob2xk
X3ZhbCA9PSBuZXdfdmFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICB9IHdoaWxlICghYXRvbWljX2NtcHNldF82NChmc3RmX3N0YXRlX2NvbnRy
b2woKSwgb2xkX3ZhbCwgbmV3X3ZhbCkpOw0KKw0KKyAgICByZXR1cm4gKG5ld192YWwpOw0KK30N
CisNCisvLyBXYWl0cyBmb3IgdGhlIHN0YXRlIGRhdGEgdG8gbWF0Y2ggYSBjZXJ0YWluIGJpdG1h
c2sNCisvLyBvcHRzID09IGZzdGZfb3B0X2FsbCAtLT4gd2FpdCBmb3Igc3RhdGUgY29udHJvbCB0
byBoYXZlIGFsbCBiaXRzIGluIGJpdF9tYXNrDQorLy8gb3B0cyA9PSBmc3RmX29wdF9hbnkgLS0+
IHdhaXQgZm9yIHN0YXRlIGNvbnRyb2wgdG8gaGF2ZSBhbnkgYml0cyBpbiBiaXRfbWFzaw0KK3N0
YXRpYyBpbnQgZnN0Zl9vcHRfYWxsID0gMDsNCitzdGF0aWMgaW50IGZzdGZfb3B0X2FueSA9IDE7
DQorc3RhdGljIHVpbnQ2NF90IGZzdGZfd2FpdF9mb3Jfc3RhdGVfYml0cyh1aW50NjRfdCB3YWl0
X2Zvcl9iaXRfbWFzaywgaW50IG9wdHMpDQorew0KKyAgICB1aW50NjRfdCBtYXhfd2FpdCA9IEZT
VEZfQ09OU1RBTlRfVElNRU9VVF9TRUNPTkRTICogZnN0Zl90c2NfZnJlcXVlbmN5X3NlY29uZHMo
KTsNCisgICAgdWludDY0X3Qgbm93Ow0KKyAgICB1aW50MzJfdCBhdXg7DQorICAgIHVpbnQ2NF90
IHN0YXJ0X2N5Y2xlcyA9IGZzdGZfdHNjX2FuZF9hdXgoJmF1eCk7DQorICAgIHVpbnQ2NF90IGVu
ZF9jeWNsZXMgPSBzdGFydF9jeWNsZXMgKyBtYXhfd2FpdDsNCisgICAgdWludDY0X3QgdHN0Ow0K
KyAgICBkbw0KKyAgICB7DQorICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJwYXVzZVxuIjogOiA6
Im1lbW9yeSIpOw0KKw0KKyAgICAgICAgdHN0ID0gYXRvbWljX2xvYWRfYWNxXzY0KGZzdGZfc3Rh
dGVfY29udHJvbCgpKTsNCisgICAgICAgIGlmICh0c3QgJiBGU1RGX1NUQVRFX0JJVFNfRklOSVNI
RUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgaWYgKG9wdHMgPT0gZnN0Zl9vcHRfYWxsKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGlmICgodHN0ICYgd2FpdF9mb3JfYml0X21hc2spID09IHdhaXRfZm9yX2JpdF9tYXNrKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG9wdHMgPT0gZnN0Zl9vcHRfYW55
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgodHN0ICYgd2FpdF9mb3JfYml0X21hc2sp
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICh0c3QpOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIG5vdyA9IGZzdGZfdHNjX2FuZF9hdXgoJmF1
eCk7DQorICAgIH0gd2hpbGUgKG5vdyA8IGVuZF9jeWNsZXMpOw0KKw0KKyAgICB0c3QgPSBmc3Rm
X2NoYW5nZV9zdGF0ZV9iaXRzKDAsIEZTVEZfU1RBVEVfQklUX1RJTUVPVVQpOw0KKw0KKyAgICBy
ZXR1cm4gKHRzdCk7DQorfQ0KKw0KKy8vIFdpbmRvdyBkcmVzc2luZyBmb3IgZnN0Zl9jaGFuZ2Vf
c3RhdGVfYml0cw0KK3N0YXRpYyB1aW50NjRfdCBmc3RmX3dyYXBfc3RhdGVfdHJhbnNpdGlvbihj
b25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHJlbW92ZV9iaXRzLCB1aW50NjRf
dCBpbmNsdWRlX2JpdHMpDQorew0KKyAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwgbGluZSwgRlNU
Rl9ERUJVR19UWVBFX1RSQU5TSVRJT05fSU5JVElBTCwgZnN0Zl9zdGF0ZV92YWx1ZSgpKTsNCisg
ICAgdWludDY0X3QgbmV3c3RhdGUgPSBmc3RmX2NoYW5nZV9zdGF0ZV9iaXRzKHJlbW92ZV9iaXRz
LCBpbmNsdWRlX2JpdHMpOw0KKyAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwgbGluZSwgRlNURl9E
RUJVR19UWVBFX1RSQU5TSVRJT05fRklOQUwsICAgbmV3c3RhdGUpOw0KKyAgICByZXR1cm4gKG5l
d3N0YXRlKTsNCit9DQorDQorLy8gV2luZG93IGRyZXNzaW5nIGZvciBmc3RmX3dhaXRfZm9yX3N0
YXRlX2JpdHMNCitzdGF0aWMgdWludDY0X3QgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1lbnQoY29u
c3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCB1aW50NjRfdCB3YWl0X2Zvcl9iaXRtYXNrLCBpbnQg
b3B0cykNCit7DQorICAgIGZzdGZfZGVidWdfZmFzdChmaWxlLCBsaW5lLCBGU1RGX0RFQlVHX1RZ
UEVfSU1QRURJTUVOVF9JTklUSUFMLCBmc3RmX3N0YXRlX3ZhbHVlKCkpOw0KKyAgICB1aW50NjRf
dCBuZXdzdGF0ZSA9IGZzdGZfd2FpdF9mb3Jfc3RhdGVfYml0cyh3YWl0X2Zvcl9iaXRtYXNrLCBv
cHRzKTsNCisgICAgZnN0Zl9kZWJ1Z19mYXN0KGZpbGUsIGxpbmUsIEZTVEZfREVCVUdfVFlQRV9J
TVBFRElNRU5UX0ZJTkFMLCAgIG5ld3N0YXRlKTsNCisgICAgcmV0dXJuIChuZXdzdGF0ZSk7DQor
fQ0KKw0KKy8vIFdpbmRvdyBkcmVzc2luZyBmb3IgZnN0Zl93cmFwX2NoZWNrX2Zvcl9iaXRzDQor
c3RhdGljIGludCBmc3RmX3dyYXBfY2hlY2tfZm9yX2JpdHMoY29uc3QgY2hhciAqIGZpbGUsIGlu
dCBsaW5lLCB1aW50NjRfdCBjaGVja19mb3JfYml0bWFzaywgaW50IG9wdHMpDQorew0KKyAgICB1
aW50NjRfdCBzdGF0ZSA9IGZzdGZfc3RhdGVfdmFsdWUoKTsNCisgICAgZnN0Zl9kZWJ1Z19mYXN0
KGZpbGUsIGxpbmUsIEZTVEZfREVCVUdfVFlQRV9DSEVDS19TVEFURSwgc3RhdGUpOw0KKyAgICBp
ZiAob3B0cyA9PSBmc3RmX29wdF9hbGwpDQorICAgIHsNCisgICAgICAgIGlmICgoc3RhdGUgJiBj
aGVja19mb3JfYml0bWFzaykgPT0gY2hlY2tfZm9yX2JpdG1hc2spDQorICAgICAgICB7DQorICAg
ICAgICAgICAgcmV0dXJuICgxKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlIGlmIChv
cHRzID09IGZzdGZfb3B0X2FueSkNCisgICAgew0KKyAgICAgICAgaWYgKChzdGF0ZSAmIGNoZWNr
X2Zvcl9iaXRtYXNrKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gKDEpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorICAgIHJldHVybiAoMCk7DQorfQ0KKw0KKyNkZWZpbmUgZnN0Zl9z
dGF0ZV9pbXBlZGltZW50X2FsbCh3YWl0X2ZvcikgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1lbnQo
X19GSUxFX18sIF9fTElORV9fLCB3YWl0X2ZvciwgZnN0Zl9vcHRfYWxsKQ0KKyNkZWZpbmUgZnN0
Zl9zdGF0ZV9pbXBlZGltZW50X2FueSh3YWl0X2ZvcikgZnN0Zl93cmFwX3N0YXRlX2ltcGVkaW1l
bnQoX19GSUxFX18sIF9fTElORV9fLCB3YWl0X2ZvciwgZnN0Zl9vcHRfYW55KQ0KKyNkZWZpbmUg
ZnN0Zl9zdGF0ZV90cmFuc2l0aW9uKHJlbW92ZSwgYWRkKSAgZnN0Zl93cmFwX3N0YXRlX3RyYW5z
aXRpb24oX19GSUxFX18sIF9fTElORV9fLCByZW1vdmUsIGFkZCkNCisjZGVmaW5lIGZzdGZfc3Rh
dGVfY2hlY2tfYWxsKGNoZWNrX2ZvcikgZnN0Zl93cmFwX2NoZWNrX2Zvcl9iaXRzKF9fRklMRV9f
LCBfX0xJTkVfXywgY2hlY2tfZm9yLCBmc3RmX29wdF9hbGwpDQorI2RlZmluZSBmc3RmX3N0YXRl
X2NoZWNrX2FueShjaGVja19mb3IpIGZzdGZfd3JhcF9jaGVja19mb3JfYml0cyhfX0ZJTEVfXywg
X19MSU5FX18sIGNoZWNrX2ZvciwgZnN0Zl9vcHRfYW55KQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdp
dCBhL3N5cy92bS92bV9mYXVsdC5jIGIvc3lzL3ZtL3ZtX2ZhdWx0LmMNCmluZGV4IDgzZTEyYTUu
LmVhYWI5YzYgMTAwNjQ0DQotLS0gYS9zeXMvdm0vdm1fZmF1bHQuYw0KKysrIGIvc3lzL3ZtL3Zt
X2ZhdWx0LmMNCkBAIC01NDQsNiArNTQ0LDkgQEAgdm1fZmF1bHRfaG9sZCh2bV9tYXBfdCBtYXAs
IHZtX29mZnNldF90IHZhZGRyLCB2bV9wcm90X3QgZmF1bHRfdHlwZSwNCiANCiBSZXRyeUZhdWx0
OjsNCiANCisJZnN0Zl9jb25kaXRpb25hbF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18s
IG1hcC0+cG1hcCwgdmFkZHIpOw0KKw0KKw0KIAkvKg0KIAkgKiBGaW5kIHRoZSBiYWNraW5nIHN0
b3JlIG9iamVjdCBhbmQgb2Zmc2V0IGludG8gaXQgdG8gYmVnaW4gdGhlDQogCSAqIHNlYXJjaC4N
CkBAIC01NTgsNiArNTYxLDcgQEAgUmV0cnlGYXVsdDo7DQogCX0NCiANCiAJZnMubWFwX2dlbmVy
YXRpb24gPSBmcy5tYXAtPnRpbWVzdGFtcDsNCisJZnN0Zl9jb25kaXRpb25hbF9mYXVsdF9kZWJ1
ZyhfX0ZJTEVfXywgX19MSU5FX18sIG1hcC0+cG1hcCwgdmFkZHIsIHByb3QpOw0KIA0KIAlpZiAo
ZnMuZW50cnktPmVmbGFncyAmIE1BUF9FTlRSWV9OT0ZBVUxUKSB7DQogCQlwYW5pYygiJXM6IGZh
dWx0IG9uIG5vZmF1bHQgZW50cnksIGFkZHI6ICUjbHgiLA0KQEAgLTYwNyw2ICs2MTEsNyBAQCBS
ZXRyeUZhdWx0OjsNCiAJCSAgICAoZnMuZmlyc3Rfb2JqZWN0LT50eXBlICE9IE9CSlRfVk5PREUg
JiYNCiAJCSAgICAoZnMuZmlyc3Rfb2JqZWN0LT5mbGFncyAmIE9CSl9UTVBGU19OT0RFKSA9PSAw
KSB8fA0KIAkJICAgIChmcy5maXJzdF9vYmplY3QtPmZsYWdzICYgT0JKX01JR0hUQkVESVJUWSkg
IT0gMCkgew0KKwkJCWZzdGZfY29uZGl0aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElO
RV9fLCBtYXAtPnBtYXAsIHZhZGRyKTsNCiAJCQlydiA9IHZtX2ZhdWx0X3NvZnRfZmFzdCgmZnMs
IHZhZGRyLCBwcm90LCBmYXVsdF90eXBlLA0KIAkJCSAgICBmYXVsdF9mbGFncywgd2lyZWQsIG1f
aG9sZCk7DQogCQkJaWYgKHJ2ID09IEtFUk5fU1VDQ0VTUykNCkBAIC03MjEsNiArNzI2LDkgQEAg
UmV0cnlGYXVsdDo7DQogCQkJICogZm91bmQgdGhlIHBhZ2UgKS4NCiAJCQkgKi8NCiAJCQl2bV9w
YWdlX3hidXN5KGZzLm0pOw0KKwkJCWlmIChmcy5tYXApIHsNCisJCQkJZnN0Zl9jb25kaXRpb25h
bF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIGZzLm1hcC0+cG1hcCwgdmFkZHIpOw0K
KwkJCX0NCiAJCQlpZiAoZnMubS0+dmFsaWQgIT0gVk1fUEFHRV9CSVRTX0FMTCkNCiAJCQkJZ290
byByZWFkcmVzdDsNCiAJCQlicmVhazsNCkBAIC03ODQsNiArNzkyLDkgQEAgUmV0cnlGYXVsdDo7
DQogCQkJCQlhbGxvY19yZXEgfD0gVk1fQUxMT0NfWkVSTzsNCiAJCQkJZnMubSA9IHZtX3BhZ2Vf
YWxsb2MoZnMub2JqZWN0LCBmcy5waW5kZXgsDQogCQkJCSAgICBhbGxvY19yZXEpOw0KKwkJCQlp
ZiAoZnMubSAhPSBOVUxMICYmIGZzLm1hcCAhPSBOVUxMKSB7DQorCQkJCQlmc3RmX2NvbmRpdGlv
bmFsX3BvaW50X2RlYnVnKF9fRklMRV9fLCBfX0xJTkVfXywgZnMubWFwLT5wbWFwLCB2YWRkcik7
DQorCQkJCX0NCiAJCQl9DQogCQkJaWYgKGZzLm0gPT0gTlVMTCkgew0KIAkJCQl1bmxvY2tfYW5k
X2RlYWxsb2NhdGUoJmZzKTsNCkBAIC0xMTMzLDYgKzExNDQsNyBAQCBSZXRyeUZhdWx0OjsNCiAJ
CQkJLyoNCiAJCQkJICogT2gsIHdlbGwsIGxldHMgY29weSBpdC4NCiAJCQkJICovDQorCQkJCWZz
dGZfY29uZGl0aW9uYWxfcG9pbnRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBmcy5tYXAtPnBt
YXAsIHZhZGRyKTsNCiAJCQkJcG1hcF9jb3B5X3BhZ2UoZnMubSwgZnMuZmlyc3RfbSk7DQogCQkJ
CWZzLmZpcnN0X20tPnZhbGlkID0gVk1fUEFHRV9CSVRTX0FMTDsNCiAJCQkJaWYgKHdpcmVkICYm
IChmYXVsdF9mbGFncyAmDQpAQCAtMTE2OCw2ICsxMTgwLDcgQEAgUmV0cnlGYXVsdDo7DQogCQkJ
Y3VydGhyZWFkLT50ZF9jb3crKzsNCiAJCX0gZWxzZSB7DQogCQkJcHJvdCAmPSB+Vk1fUFJPVF9X
UklURTsNCisJCQlmc3RmX2NvbmRpdGlvbmFsX2ZhdWx0X2RlYnVnKF9fRklMRV9fLCBfX0xJTkVf
XywgbWFwLT5wbWFwLCB2YWRkciwgcHJvdCk7DQogCQl9DQogCX0NCiANCkBAIC0xMTg1LDYgKzEx
OTgsNyBAQCBSZXRyeUZhdWx0OjsNCiAJCWlmIChmcy5tYXAtPnRpbWVzdGFtcCAhPSBmcy5tYXBf
Z2VuZXJhdGlvbikgew0KIAkJCXJlc3VsdCA9IHZtX21hcF9sb29rdXBfbG9ja2VkKCZmcy5tYXAs
IHZhZGRyLCBmYXVsdF90eXBlLA0KIAkJCSAgICAmZnMuZW50cnksICZyZXRyeV9vYmplY3QsICZy
ZXRyeV9waW5kZXgsICZyZXRyeV9wcm90LCAmd2lyZWQpOw0KKwkJCWZzdGZfY29uZGl0aW9uYWxf
ZmF1bHRfZGVidWcoX19GSUxFX18sIF9fTElORV9fLCBtYXAtPnBtYXAsIHZhZGRyLCByZXRyeV9w
cm90KTsNCiANCiAJCQkvKg0KIAkJCSAqIElmIHdlIGRvbid0IG5lZWQgdGhlIHBhZ2UgYW55IGxv
bmdlciwgcHV0IGl0IG9uIHRoZSBpbmFjdGl2ZQ0KQEAgLTExOTQsNiArMTIwOCw3IEBAIFJldHJ5
RmF1bHQ6Ow0KIAkJCWlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7DQogCQkJCXJlbGVhc2Vf
cGFnZSgmZnMpOw0KIAkJCQl1bmxvY2tfYW5kX2RlYWxsb2NhdGUoJmZzKTsNCisJCQkJZnN0Zl9j
b25kaXRpb25hbF9wb2ludF9kZWJ1ZyhfX0ZJTEVfXywgX19MSU5FX18sIG1hcC0+cG1hcCwgdmFk
ZHIpOw0KIA0KIAkJCQkvKg0KIAkJCQkgKiBJZiByZXRyeSBvZiBtYXAgbG9va3VwIHdvdWxkIGhh
dmUgYmxvY2tlZCB0aGVuDQpAQCAtMTIxOSw2ICsxMjM0LDcgQEAgUmV0cnlGYXVsdDo7DQogCQkJ
ICogd3JpdGUtZW5hYmxlZCBhZnRlciBhbGwuDQogCQkJICovDQogCQkJcHJvdCAmPSByZXRyeV9w
cm90Ow0KKwkJCWZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoX19GSUxFX18sIF9fTElORV9f
LCBtYXAtPnBtYXAsIHZhZGRyLCBwcm90KTsNCiAJCX0NCiAJfQ0KIA0KZGlmZiAtLWdpdCBhL3N5
cy92bS92bV9wYWdlLmMgYi9zeXMvdm0vdm1fcGFnZS5jDQppbmRleCBmMTdhOTgxLi44MmM1ZmQ3
ZiAxMDA2NDQNCi0tLSBhL3N5cy92bS92bV9wYWdlLmMNCisrKyBiL3N5cy92bS92bV9wYWdlLmMN
CkBAIC00MDk0LDYgKzQwOTQsNDY1IEBAIHZtX3BhZ2VfdHJ5bG9ja19LQkkodm1fcGFnZV90IG0s
IGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQ0KIAlyZXR1cm4gKG10eF90cnlsb2NrX2ZsYWdz
Xyh2bV9wYWdlX2xvY2twdHIobSksIDAsIGZpbGUsIGxpbmUpKTsNCiB9DQogDQorDQorDQorDQor
DQorDQorDQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+
DQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+DQorI2lu
Y2x1ZGUgPG1hY2hpbmUvYXRvbWljLmg+DQorI2luY2x1ZGUgPG1hY2hpbmUvc3RkYXJnLmg+DQor
DQorI2luY2x1ZGUgPHZtL2Zvcmtpbmdfc3RhbGUuaD4NCisNCitleHRlcm4gIHVpbnQ2NF90IHRz
Y19mcmVxOw0KKw0KK01BTExPQ19ERUZJTkUoTV9GU1RGLCAiZnN0ZiIsICJGU1RGIFRlc3QgSG9v
ayIpOw0KKw0KK3N0YXRpYyBwbWFwX3QgdGVzdF9wbWFwID0gTlVMTDsNCitzdGF0aWMgdWludHB0
cl90IHRlc3RfdmFkZHIgPSBGU1RGX0NPTlNUQU5UX1ZBRERSOw0KK3N0cnVjdCBmc3RmX2RlYnVn
X2RhdGEgZGVidWdfZW50cmllc1tGU1RGX0RFQlVHX05VTUJFUl9FTlRSSUVTXTsNCitzdGF0aWMg
dV9pbnQgZGVidWdfcG9zaXRpb247DQorc3RhdGljIHVpbnQ2NF90IGRlYnVnX3ZhbHVlID0gMDsN
CitzdGF0aWMgdm9pZCAqIHN0YXRlX2NvbnRyb2xfYWxsb2MgPSAwOw0KK3N0YXRpYyBzaXplX3Qg
c3RhdGVfY29udHJvbF9hbGxvY19sZW5ndGggPSBQQUdFX1NJWkU7DQorc3RhdGljIHZtX3BhZGRy
X3Qgc3RhdGVfY29udHJvbF9wYWRkciA9IDA7DQorc3RhdGljIHZvbGF0aWxlIHVpbnQ2NF90ICog
c3RhdGVfY29udHJvbCA9IDA7DQorDQorc3RhdGljIGludCBzeXNjdGxfZnN0Zl9zZXR1cChTWVND
VExfSEFORExFUl9BUkdTKTsNCitzdGF0aWMgaW50IHN5c2N0bF9kZWJ1Z19vdXRwdXQoU1lTQ1RM
X0hBTkRMRVJfQVJHUyk7DQorDQorU1lTQ1RMX05PREUoX2tlcm4sDQorICAgICAgICAgICAgT0lE
X0FVVE8sDQorICAgICAgICAgICAgZnN0Zl9zZXR1cCwNCisgICAgICAgICAgICBDVExGTEFHX1JX
LA0KKyAgICAgICAgICAgIHN5c2N0bF9mc3RmX3NldHVwLA0KKyAgICAgICAgICAgICJUZXN0IGhv
b2sgdG8gc2V0dXAgdG8gaGVscCBkZWJ1ZyBhIHJhY2UgY29uZGl0aW9uIik7DQorDQorU1lTQ1RM
X1U2NChfa2VybiwNCisgICAgICAgICAgIE9JRF9BVVRPLA0KKyAgICAgICAgICAgZnN0Zl9jb250
cm9sX3BhZGRyLA0KKyAgICAgICAgICAgQ1RMRkxBR19SRCwNCisgICAgICAgICAgICZzdGF0ZV9j
b250cm9sX3BhZGRyLA0KKyAgICAgICAgICAgMCwNCisgICAgICAgICAgICJSZWFkIHRoZSBwaHlz
aWNhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0ZWQgZm9yIHRoZSB0ZXN0Iik7DQorDQorU1lTQ1RM
X09JRChfa2VybiwNCisgICAgICAgICAgIE9JRF9BVVRPLA0KKyAgICAgICAgICAgZnN0Zl9kZWJ1
Z19vdXRwdXQsDQorICAgICAgICAgICBDVExUWVBFX1NUUklORyB8IENUTEZMQUdfUkQsDQorICAg
ICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgMCwNCisgICAgICAgICAgIHN5c2N0bF9kZWJ1Z19v
dXRwdXQsDQorICAgICAgICAgICAiQSIsDQorICAgICAgICAgICAiT3V0cHV0IHRlc3QgZml4dHVy
ZSBkZWJ1Z2dpbmciKTsNCisNCisvKiBPdXRwdXQgZGVidWdnaW5nIGNhcHR1cmVkIGluIG1lbW9y
eSBpbiB0aGUga2VybmVsIGR1cmluZyB0aGUgbGFzdCB0ZXN0IHJ1biAqLw0KK3N0YXRpYyBpbnQN
CitzeXNjdGxfZGVidWdfb3V0cHV0KFNZU0NUTF9IQU5ETEVSX0FSR1MpDQorew0KKyAgICAgICAg
c3RydWN0IHNidWYgc2J1ZjsNCisgICAgICAgIGludCBudW0sIGVycm9yOw0KKw0KKyAgICAgICAg
ZXJyb3IgPSBzeXNjdGxfd2lyZV9vbGRfYnVmZmVyKHJlcSwgMCk7DQorICAgICAgICBpZiAoZXJy
b3IgIT0gMCkgew0KKyAgICAgICAgICAgIHJldHVybiAoZXJyb3IpOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgc2J1Zl9uZXdfZm9yX3N5c2N0bCgmc2J1ZiwgTlVMTCwgc2l6ZW9mKGRlYnVnX2Vu
dHJpZXNbMF0ubWlzYykgKyAxMDI0LCByZXEpOw0KKw0KKyAgICAgICAgc2J1Zl9wcmludGYoJnNi
dWYsICJcbiIpOw0KKw0KKyAgICAgICAgZm9yIChudW0gPSAwOyBudW0gPCBGU1RGX0RFQlVHX05V
TUJFUl9FTlRSSUVTOyBudW0rKykgew0KKyAgICAgICAgICAgIGlmIChkZWJ1Z19lbnRyaWVzW251
bV0uZGJnX3R5cGUgIT0gRlNURl9ERUJVR19UWVBFX1VOVVNFRCkgew0KKyAgICAgICAgICAgICAg
ICBpZiAoZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlID09IEZTVEZfREVCVUdfVFlQRV9NSVND
RUxMQU5FT1VTKSB7DQorDQorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHNidWZfcHJpbnRm
KCZzYnVmLCAiJXMiLCBkZWJ1Z19lbnRyaWVzW251bV0ubWlzYyk7DQorICAgICAgICAgICAgICAg
ICAgICBpZiAoZXJyb3IpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y
OiAlZCBoYW5kbGluZyBzeXNjdGwgcHJpbnRmXG4iLCBlcnJvcik7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg
ICAgIH0gZWxzZSB7DQorDQorICAgICAgICAgICAgICAgICAgICBjaGFyIHN0YnVmWzUxMl07DQor
ICAgICAgICAgICAgICAgICAgICBjaGFyIHN0YXRlX3N0clsxMDI0XTsNCisgICAgICAgICAgICAg
ICAgICAgIGZzdGZfZGVidWdfZmlsbF9zdGF0ZV9kZXNjcihkZWJ1Z19lbnRyaWVzW251bV0uc3Rh
dGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RidWYsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YnVmKSk7DQorDQorICAgICAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdGF0ZV9zdHIsDQorICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKHN0YXRlX3N0ciksDQorICAgICAgICAgICAgICAgICAgICAgIlN0YXRlOiAlcyAoMHgl
MDE2bHgpIFslc11cbiIsDQorICAgICAgICAgICAgICAgICAgICAgc3RidWYsDQorICAgICAgICAg
ICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLnN0YXRlLA0KKyAgICAgICAgICAgICAgICAg
ICAgIGZzdGZfZGVidWdfdHlwZV9kZXNjcihkZWJ1Z19lbnRyaWVzW251bV0uZGJnX3R5cGUpKTsN
CisNCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc2J1Zl9wcmludGYoJnNidWYsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9TVFIsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19lbnRyaWVzW251bV0udHNjLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLmF1eCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbbnVtXS50aWQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGRlYnVnX2VudHJpZXNbbnVtXS5maWxl
KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbbnVtXS5s
aW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1d
LnN0YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfc3RyKTsNCisg
ICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgew0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHByaW50ZigiRXJyb3I6ICVkIGhhbmRsaW5nIHN5c2N0bCBwcmludGZcbiIsIGVycm9yKTsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg
IGVycm9yID0gc2J1Zl9maW5pc2goJnNidWYpOw0KKw0KKyAgICAgICAgc2J1Zl9kZWxldGUoJnNi
dWYpOw0KKyAgICAgICAgcmV0dXJuIChlcnJvcik7DQorfQ0KKw0KKy8qIFNldHVwIGZvciB0ZXN0
aW5nIHRoZSByYWNlIGNvbmRpdGlvbiAqLw0KK3N0YXRpYyBpbnQNCitzeXNjdGxfZnN0Zl9zZXR1
cChTWVNDVExfSEFORExFUl9BUkdTKQ0KK3sNCisgICAgICAgIGludCBlcnJvcjsNCisgICAgICAg
IHBpZF90IHBpZDsNCisgICAgICAgIHVpbnQ2NF90IHBpZG1vcmU7DQorICAgICAgICBzdHJ1Y3Qg
cHJvYyAqcDsNCisNCisgICAgICAgIC8qIEdldCB0aGUgdmFsdWUgc3VwcGxpZWQ7IGFuIDY0IGJp
dCBpbnRlZ2VyIHdpdGggPGRlYnVnIHwgcGlkPiAqLw0KKw0KKyAgICAgICAgZXJyb3IgPSBzeXNj
dGxfaGFuZGxlXzY0KG9pZHAsICZwaWRtb3JlLCAwLCByZXEpOw0KKyAgICAgICAgaWYgKGVycm9y
IHx8IHJlcS0+bmV3cHRyID09IE5VTEwpIHsNCisgICAgICAgICAgICByZXR1cm4gKGVycm9yKTsN
CisgICAgICAgIH0NCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVzdCBIb29rOiBFbnRy
eTogJTBseFxuIiwgcGlkbW9yZSk7DQorDQorICAgICAgICBwaWQgPSAocGlkX3QpKEZTVEZfU1lT
Q1RMX1BJRF9NQVNLICYgcGlkbW9yZSk7DQorICAgICAgICBkZWJ1Z192YWx1ZSA9IChGU1RGX1NZ
U0NUTF9ERUJVR19NQVNLICYgcGlkbW9yZSk7DQorDQorICAgICAgICBGU1RGX0RFQlVHX01JU0Mo
IlRlc3QgSG9vazogSW5pdGlhbCBwaWQ9JWQgZGJnPSVsdVxuIiwNCisgICAgICAgICAgICAgICAg
ICAgICAgICBwaWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfdmFsdWUpOw0KKw0K
KyAgICAgICAgLyogQ29uZmlybSB0aGF0IHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgY29ycmVjdCAm
IGxvb2sgaXQgdXAgKi8NCisgICAgICAgIGVycm9yID0gcGdldChwaWQsIFBHRVRfQ0FOU0VFIHwg
UEdFVF9JU0NVUlJFTlQgfCBQR0VUX0NBTkRFQlVHIHwgUEdFVF9OT1RXRVhJVCB8IFBHRVRfTk9U
SUQsICZwKTsNCisgICAgICAgIGlmIChlcnJvciAhPSAwKSB7DQorICAgICAgICAgICAgcHJpbnRm
KCJUZXN0IEhvb2s6IFNldHVwIEVycm9yLCB1bmFibGUgdG8gbG9va3VwL21hdGNoIFBJRC4gIEVy
cm9yOiAlZFxuIiwgZXJyb3IpOw0KKyAgICAgICAgICAgIHJldHVybiAoZXJyb3IpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgRlNURl9ERUJVR19NSVNDKCJUZXN0IEhvb2s6IFByb2Nlc3MgTG9j
YXRlZCBwaWQ9JWQgbmFtZT0lc1xuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBwaWQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgcC0+cF9jb21tKTsNCisNCisgICAgICAgIC8qIFJlbGVh
c2UgYW55IHByZXZpb3VzIHRlc3QgcmVzb3J1Y2VzICovDQorICAgICAgICBpZiAoc3RhdGVfY29u
dHJvbF9hbGxvYykgew0KKyAgICAgICAgICAgIGNvbnRpZ2ZyZWUoc3RhdGVfY29udHJvbF9hbGxv
YywNCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2NvbnRyb2xfYWxsb2NfbGVuZ3RoLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgTV9GU1RGKTsNCisgICAgICAgICAgICBzdGF0ZV9jb250
cm9sID0gTlVMTDsNCisgICAgICAgICAgICBzdGF0ZV9jb250cm9sX2FsbG9jID0gTlVMTDsNCisg
ICAgICAgIH0NCisNCisgICAgICAgIC8qIEFsbG9jYXRlIGEgY29udHJvbCByZWdpb24gJiBtYWtl
IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF2YWlsYWJsZSB2aWEgYSBzeXNjdGwgKi8NCisgICAgICAg
IHN0YXRlX2NvbnRyb2xfYWxsb2MgPSBjb250aWdtYWxsb2Moc3RhdGVfY29udHJvbF9hbGxvY19s
ZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fRlNU
RiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9XQUlUT0sg
fCBNX1pFUk8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB1
bCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfjB1bCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsNCisgICAgICAgIGlm
IChzdGF0ZV9jb250cm9sX2FsbG9jID09IE5VTEwpIHsNCisgICAgICAgICAgICBlcnJvciA9IDE7
DQorICAgICAgICAgICAgcHJpbnRmKCJUZXN0IEhvb2s6IFNldHVwIEVycm9yLCB1bmFibGUgdG8g
YWxsb2NhdGUga2VybmVsIGNvbnRyb2wgbWVtb3J5LlxuIik7DQorICAgICAgICAgICAgZ290byBE
b25lOw0KKyAgICAgICAgfQ0KKyAgICAgICAgc3RhdGVfY29udHJvbCA9IHN0YXRlX2NvbnRyb2xf
YWxsb2M7DQorICAgICAgICBzdGF0ZV9jb250cm9sX3BhZGRyID0gdnRvcGh5cyhzdGF0ZV9jb250
cm9sX2FsbG9jKTsNCisNCisgICAgICAgIC8qIFNxdWlycmVsIGF3YXkgdGhlIHByb2Nlc3MgcG1h
cCBhbmQgdmFkZHI7IHdlIHVzZSB0aGVzZSB0byBtYWtlIHRoZQ0KKyAgICAgICAgICogdGVzdCBo
b29rcyBjb25kaXRpb25hbCBvbmx5IG9uIHNlbGVjdCBhY2Nlc3MgKi8NCisgICAgICAgIHRlc3Rf
cG1hcCA9IHZtc3BhY2VfcG1hcChwLT5wX3Ztc3BhY2UpOw0KKyAgICAgICAgdGVzdF92YWRkciA9
IEZTVEZfQ09OU1RBTlRfVkFERFI7DQorDQorICAgICAgICAvKiBDbGVhciB0aGUgZGVidWdnaW5n
IG91dCBmcm9tIGFueSBwcmV2b3VzIHJ1bnMgKi8NCisgICAgICAgIGludCBudW07DQorICAgICAg
ICBmb3IgKG51bSA9IDA7IG51bSA8IEZTVEZfREVCVUdfTlVNQkVSX0VOVFJJRVM7IG51bSsrKSB7
DQorICAgICAgICAgICAgZGVidWdfZW50cmllc1tudW1dLmRiZ190eXBlID0gRlNURl9ERUJVR19U
WVBFX1VOVVNFRDsNCisgICAgICAgIH0NCisNCisgICAgICAgIEZTVEZfREVCVUdfTUlTQygiVGVz
dCBIb29rOiBJbml0aWF0ZWQgcGlkPSVkLCBuYW1lPSVzLCBwbWFwPSVwLCB2YWRkcj0weCVqeCwg
Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250cm9sIHZhZGRyPTB4JWp4LCBjb250cm9s
IHBhZGRyPTB4JWp4XG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICBwLT5wX2NvbW0sDQorICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9wbWFwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpdGVzdF92YWRkciwN
CisgICAgICAgICAgICAgICAgICAgICAgICAodWludG1heF90KXN0YXRlX2NvbnRyb2wsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgKHVpbnRtYXhfdClzdGF0ZV9jb250cm9sX3BhZGRyKTsNCisN
CisgICAgICAgIERvbmU6DQorDQorICAgICAgICBQUk9DX1VOTE9DSyhwKTsNCisNCisgICAgICAg
IHJldHVybiAoZXJyb3IpOw0KK30NCisNCisvKiBUaGUgc3RhdGUvY29udHJvbCByZWdpb24gKi8N
Cit2b2xhdGlsZSB1aW50NjRfdCAqIGZzdGZfc3RhdGVfY29udHJvbCh2b2lkKQ0KK3sNCisgICAg
ICAgIHJldHVybiAoc3RhdGVfY29udHJvbCk7DQorfQ0KKw0KKy8qIEdldCB0aGUgdHNjIGZyZXF1
ZW5jeSBpbiBzZWNvbmRzICovDQordWludDY0X3QgZnN0Zl90c2NfZnJlcXVlbmN5X3NlY29uZHMo
dm9pZCkNCit7DQorICAgICAgICB1aW50NjRfdCBmcmVxID0gYXRvbWljX2xvYWRfYWNxXzY0KCZ0
c2NfZnJlcSk7DQorICAgICAgICByZXR1cm4gKGZyZXEpOw0KK30NCisNCisvKiBBIGZhc3QgcHJl
LWRldGVybWluZWQgZGVidWdnaW5nIGZ1bmN0aW9uICovDQordm9pZCBmc3RmX2RlYnVnX2Zhc3Qo
Y29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBzdGF0
ZSkNCit7DQorICAgICAgICBpZiAoZGVidWdfdmFsdWUpIHsNCisNCisgICAgICAgICAgICBzdHJ1
Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsNCisgICAgICAgICAgICBpZiAoKHRkICE9IE5VTEwp
KSB7DQorDQorICAgICAgICAgICAgICAgIGludCBwb3MgPSBGU1RGX0RFQlVHX1BPU0lUSU9OX0lO
REVYKGF0b21pY19mZXRjaGFkZF9pbnQoJmRlYnVnX3Bvc2l0aW9uLCAxKSk7DQorDQorICAgICAg
ICAgICAgICAgIGRlYnVnX2VudHJpZXNbcG9zXS50c2MgPSBmc3RmX3RzY19hbmRfYXV4KCZkZWJ1
Z19lbnRyaWVzW3Bvc10uYXV4KTsNCisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3Nd
LnRpZCA9IHRkLT50ZF90aWQ7DQorICAgICAgICAgICAgICAgIGRlYnVnX2VudHJpZXNbcG9zXS5m
aWxlID0gZmlsZTsNCisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3NdLmxpbmUgPSBs
aW5lOw0KKyAgICAgICAgICAgICAgICBkZWJ1Z19lbnRyaWVzW3Bvc10uc3RhdGUgPSBzdGF0ZTsN
CisgICAgICAgICAgICAgICAgZGVidWdfZW50cmllc1twb3NdLmRiZ190eXBlID0gdHlwZTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorfQ0KKw0KKy8qIEEgbWlzYyB0ZXh0IGRlYnVnZ2lu
ZyBmdW5jdGlvbiAqLw0KK3ZvaWQgZnN0Zl9kZWJ1Z19taXNjKGNvbnN0IGNoYXIgKiBmaWxlLCBp
bnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKyAgICAgICAgaWYgKGRlYnVnX3Zh
bHVlKSB7DQorDQorICAgICAgICAgICAgc3RydWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7DQor
ICAgICAgICAgICAgaWYgKCh0ZCAhPSBOVUxMKSkgew0KKw0KKyAgICAgICAgICAgICAgICBjaGFy
IGJ1ZmZlcls1MTJdOw0KKyAgICAgICAgICAgICAgICB2YV9saXN0IGFwOw0KKw0KKyAgICAgICAg
ICAgICAgICB2YV9zdGFydChhcCwgZm10KTsNCisNCisgICAgICAgICAgICAgICAgdnNucHJpbnRm
KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZtdCwgYXApOw0KKw0KKyAgICAgICAgICAgICAgICB2
YV9lbmQoYXApOw0KKw0KKyAgICAgICAgICAgICAgICB1aW50NjRfdCBzdGF0ZSA9IGZzdGZfc3Rh
dGVfdmFsdWUoKTsNCisNCisgICAgICAgICAgICAgICAgaW50IHBvcyA9IEZTVEZfREVCVUdfUE9T
SVRJT05fSU5ERVgoYXRvbWljX2ZldGNoYWRkX2ludCgmZGVidWdfcG9zaXRpb24sIDEpKTsNCisN
CisgICAgICAgICAgICAgICAgdWludDMyX3QgYXV4Ow0KKyAgICAgICAgICAgICAgICB1aW50NjRf
dCB0c2MgPSBmc3RmX3RzY19hbmRfYXV4KCZhdXgpOw0KKw0KKyAgICAgICAgICAgICAgICBkZWJ1
Z19lbnRyaWVzW3Bvc10uZGJnX3R5cGUgPSBGU1RGX0RFQlVHX1RZUEVfTUlTQ0VMTEFORU9VUzsN
CisNCisgICAgICAgICAgICAgICAgc25wcmludGYoZGVidWdfZW50cmllc1twb3NdLm1pc2MsDQor
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRlYnVnX2VudHJpZXNbcG9zXS5taXNjKSwNCisg
ICAgICAgICAgICAgICAgICAgICBGU1RGX0RFQlVHX0ZPUk1BVF9TVFIsDQorICAgICAgICAgICAg
ICAgICAgICAgdHNjLA0KKyAgICAgICAgICAgICAgICAgICAgIGF1eCwNCisgICAgICAgICAgICAg
ICAgICAgICAodGQgPT0gTlVMTCA/IDAgOiB0ZC0+dGRfdGlkKSwNCisgICAgICAgICAgICAgICAg
ICAgICAodGQgPT0gTlVMTCA/ICIiIDogdGQtPnRkX25hbWUpLA0KKyAgICAgICAgICAgICAgICAg
ICAgIGZzdGZfc3RyaXBfZmlsZV9wYXRoKGZpbGUpLA0KKyAgICAgICAgICAgICAgICAgICAgIGxp
bmUsDQorICAgICAgICAgICAgICAgICAgICAgc3RhdGUsDQorICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorfQ0KKw0KKy8qIEEgJ2dvdCBo
ZXJlJyBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcG9pbnRf
ZGVidWcoY29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0
X3QgdmFkZHIpDQorew0KKyAgICBpZiAoKHBtYXAgIT0gTlVMTCkgJiYNCisgICAgICAgIChwbWFw
ID09IHRlc3RfcG1hcCkgJiYNCisgICAgICAgICgoKGRlYnVnX3ZhbHVlICYgRlNURl9TWVNDVExf
REVCVUdfSEVBVlkpID09IEZTVEZfU1lTQ1RMX0RFQlVHX0hFQVZZKSB8fA0KKyAgICAgICAgICAo
KHRlc3RfdmFkZHIgPD0gdmFkZHIpICYmICh2YWRkciA8ICh0ZXN0X3ZhZGRyICsgUEFHRV9TSVpF
KSkpKSkgew0KKw0KKyAgICAgICAgZnN0Zl9kZWJ1Z19taXNjKGZpbGUsDQorICAgICAgICAgICAg
ICAgIGxpbmUsDQorICAgICAgICAgICAgICAgICJEZWJ1ZzogcG1hcD0lcCB2YWRkcj0weCVqeFxu
IiwNCisgICAgICAgICAgICAgICAgcG1hcCwNCisgICAgICAgICAgICAgICAgdmFkZHIpOw0KKyAg
ICB9DQorfQ0KKw0KKy8qIEEgdm1fcGFnZV90IGluZm8gZGVidWdnaW5nIGZ1bmN0aW9uICovDQor
c3RhdGljIHZvaWQgZnN0Zl9kZWJ1Z19wYWdlKGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwg
dm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3BhZ2VfdCBtKQ0KK3sNCisgICAgZnN0Zl9kZWJ1Z19taXNj
KGZpbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAiRGVidWc6IFZBZGRyOjB4JWp4IHBhZ2UgJXAgb2JqICVwIHBpZHggMHglanggcGh5
cyAweCVqeCBxICVkIGhvbGQgJWQgd2lyZSAlZCINCisgICAgICAgICAgICAgICAgICAgICAgICAi
ICBhZiAweCV4IG9mIDB4JXggZiAweCV4IGFjdCAlZCBidXN5ICV4IHZhbGlkIDB4JXggZGlydHkg
MHgleFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAodWludG1heF90KXZhZGRyLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG0sDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+b2Jq
ZWN0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpbS0+cGluZGV4LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICh1aW50bWF4X3QpbS0+cGh5c19hZGRyLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG0tPnF1ZXVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG0tPmhv
bGRfY291bnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+d2lyZV9jb3VudCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICBtLT5hZmxhZ3MsDQorICAgICAgICAgICAgICAgICAgICAgICAg
bS0+b2ZsYWdzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG0tPmZsYWdzLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG0tPmFjdF9jb3VudCwNCisgICAgICAgICAgICAgICAgICAgICAgICBt
LT5idXN5X2xvY2ssDQorICAgICAgICAgICAgICAgICAgICAgICAgbS0+dmFsaWQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgbS0+ZGlydHkpOw0KK30NCisNCisvKiBBIHB0X2VudHJ5X3QgaW5m
byBkZWJ1Z2dpbmcgZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcHRlX2RlYnVn
KGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZh
ZGRyLCBwdF9lbnRyeV90IHB0ZSkNCit7DQorICAgIGlmICgocG1hcCAhPSBOVUxMKSAmJg0KKyAg
ICAgICAgKHBtYXAgPT0gdGVzdF9wbWFwKSAmJg0KKyAgICAgICAgKCgoZGVidWdfdmFsdWUgJiBG
U1RGX1NZU0NUTF9ERUJVR19IRUFWWSkgPT0gRlNURl9TWVNDVExfREVCVUdfSEVBVlkpIHx8DQor
ICAgICAgICAgICAgICAoKHRlc3RfdmFkZHIgPD0gdmFkZHIpICYmICh2YWRkciA8ICh0ZXN0X3Zh
ZGRyICsgUEFHRV9TSVpFKSkpKSkgew0KKw0KKyAgICAgICAgdm1fcGFnZV90IG0gPSBQSFlTX1RP
X1ZNX1BBR0UocHRlICYgUEdfRlJBTUUpOw0KKyAgICAgICAgZnN0Zl9kZWJ1Z19taXNjKGZpbGUs
DQorICAgICAgICAgICAgICAgIGxpbmUsDQorICAgICAgICAgICAgICAgICJEZWJ1ZzogSGl0W3Bt
YXA6JXAgVkFkZHI6MHglanggUDoweCVqeCBGOiUwMTZseF0gJXN8JXN8JXN8JXN8JXN8JXN8JXN8
JXN8JXN8JXN8JXN8JXN8JXNcbiIsDQorICAgICAgICAgICAgICAgIHBtYXAsDQorICAgICAgICAg
ICAgICAgICh1aW50bWF4X3QpdmFkZHIsDQorICAgICAgICAgICAgICAgICh1aW50bWF4X3QpKHB0
ZSAmIFBHX0ZSQU1FKSwNCisgICAgICAgICAgICAgICAgcHRlLA0KKyAgICAgICAgICAgICAgICAo
KHB0ZSAmIFBHX1YpID8gICAgICAgICAgICAgIlZhbGlkIiA6ICAgICAgICAgICAgICAgIkludmFs
aWQiKSwNCisgICAgICAgICAgICAgICAgKChwdGUgJiBQR19SVykgPyAgICAgICAgICAgICJSZWFk
LVdyaXRlIiA6ICAgICAgICAgICJOby1SZWFkLVdyaXRlIiksDQorICAgICAgICAgICAgICAgICgo
cHRlICYgUEdfQSkgPyAgICAgICAgICAgICAiQWNjZXNzZWQiIDogICAgICAgICAgICAiTm90LUFj
Y2Vzc2VkIiksDQorICAgICAgICAgICAgICAgICgocHRlICYgUEdfTSkgPyAgICAgICAgICAgICAi
RGlydHkiIDogICAgICAgICAgICAgICAiTm90LURpcnR5IiksDQorICAgICAgICAgICAgICAgICgo
cHRlICYgUEdfUFMpID8gICAgICAgICAgICAiNEstUGFnZS1TaXplIiA6ICAgICAgICAiMk0tUGFn
ZS1TaXplIiksDQorICAgICAgICAgICAgICAgICgocHRlICYgUEdfRykgPyAgICAgICAgICAgICAi
R2xvYmFsIiA6ICAgICAgICAgICAgICAiTm90LUdsb2JhbCIpLA0KKyAgICAgICAgICAgICAgICAo
KHB0ZSAmIFBHX0FWQUlMMSkgPyAgICAgICAgIkF2YWlsMSIgOiAgICAgICAgICAgICAgIk5vLUF2
YWlsMSIpLA0KKyAgICAgICAgICAgICAgICAoKHB0ZSAmIFBHX0FWQUlMMikgPyAgICAgICAgIk1h
bmFnZWQiIDogICAgICAgICAgICAgIlVubWFuYWdlZCIpLA0KKyAgICAgICAgICAgICAgICAoKHB0
ZSAmIFBHX0FWQUlMMykgPyAgICAgICAgIldpcmVkIiA6ICAgICAgICAgICAgICAgIk5vdC1XaXJl
ZCIpLA0KKyAgICAgICAgICAgICAgICAoKHB0ZSAmIFBHX1UpID8gICAgICAgICAgICAgIlVzZXIt
U3VwZXJ2aXNvciIgOiAgICAgIk5vLVVzZXItU3VwZXJ2aXNvciIpLA0KKyAgICAgICAgICAgICAg
ICAoKHB0ZSAmIFBHX05DX1BXVCkgPyAgICAgICAgIldyaXRlLVRocm91Z2giIDogICAgICAgIk5v
LVdyaXRlLVRocm91Z2giKSwNCisgICAgICAgICAgICAgICAgKChwdGUgJiBQR19OQ19QQ0QpID8g
ICAgICAgICJDYWNoZS1EaXNhYmxlIiA6ICAgICAgICJOby1DYWNoZS1EaXNhYmxlIiksDQorICAg
ICAgICAgICAgICAgICgocHRlICYgUEdfUFRFX1BBVCkgPyAgICAgICAiUEFULUluZGV4IiA6ICAg
ICAgICAgICAiTm8tUEFULUluZGV4IikpOw0KKyAgICAgICAgaWYgKG0gIT0gTlVMTCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBmc3RmX2RlYnVnX3BhZ2UoZmlsZSwgbGluZSwgdmFkZHIsIG0p
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8qIEEgJ2dvdCBoZXJlJyBkZWJ1Z2dpbmcg
ZnVuY3Rpb24gKi8NCit2b2lkIGZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoY29uc3QgY2hh
ciAqIGZpbGUsIGludCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3By
b3RfdCBwcm90KQ0KK3sNCisgICAgaWYgKChwbWFwICE9IE5VTEwpICYmDQorICAgICAgICAocG1h
cCA9PSB0ZXN0X3BtYXApICYmDQorICAgICAgICAoKChkZWJ1Z192YWx1ZSAmIEZTVEZfU1lTQ1RM
X0RFQlVHX0hFQVZZKSA9PSBGU1RGX1NZU0NUTF9ERUJVR19IRUFWWSkgfHwNCisgICAgICAgICAg
KCh0ZXN0X3ZhZGRyIDw9IHZhZGRyKSAmJiAodmFkZHIgPCAodGVzdF92YWRkciArIFBBR0VfU0la
RSkpKSkpIHsNCisNCisgICAgICAgIGZzdGZfZGVidWdfbWlzYyhmaWxlLA0KKyAgICAgICAgICAg
ICAgICBsaW5lLA0KKyAgICAgICAgICAgICAgICAiRGVidWc6IHBtYXA9JXAgdmFkZHI9MHglangg
cHJvdD0lc3wlc3wlc3wlc3wlc1xuIiwNCisgICAgICAgICAgICAgICAgcG1hcCwNCisgICAgICAg
ICAgICAgICAgdmFkZHIsDQorICAgICAgICAgICAgICAgICgocHJvdCAmIFZNX1BST1RfUkVBRCkg
PyAiUmVhZCIgOiAiTm8tUmVhZCIpLA0KKyAgICAgICAgICAgICAgICAoKHByb3QgJiBWTV9QUk9U
X1dSSVRFKSA/ICJXcml0ZSIgOiAiTm8tV3JpdGUiKSwNCisgICAgICAgICAgICAgICAgKChwcm90
ICYgVk1fUFJPVF9FWEVDVVRFKSA/ICJFeGVjdXRlIiA6ICJOby1FeGVjdXRlIiksDQorICAgICAg
ICAgICAgICAgICgocHJvdCAmIFZNX1BST1RfQ09QWSkgPyAiQ29weSIgOiAiTm8tQ29weSIpLA0K
KyAgICAgICAgICAgICAgICAoKHByb3QgJiBWTV9QUk9UX0ZBVUxUX0xPT0tVUCkgPyAiTG9va3Vw
IiA6ICJOby1Mb29rdXAiKSk7DQorICAgIH0NCit9DQorDQorLyogQSBoZWxwZXIgdG8gY2hlY2sg
aWYgYSBzdXBwbGllZCBwbWFwIGFuZCB2YWRkciBtYXRjaCBhbmQgc2hvdWxkIHRyaWdnZXIgdGVz
dCBjb2RlICovDQorc3RhdGljIGludCBmc3RmX2NvbmRpdGlvbmFsKHBtYXBfdCBwbWFwLCB2bV9v
ZmZzZXRfdCB2YWRkcikNCit7DQorICAgIGlmICgocG1hcCAhPSBOVUxMKSAmJg0KKyAgICAgICAg
KHBtYXAgPT0gdGVzdF9wbWFwKSAmJg0KKyAgICAgICAgKCh0ZXN0X3ZhZGRyIDw9IHZhZGRyKSAm
JiAodmFkZHIgPCAodGVzdF92YWRkciArIFBBR0VfU0laRSkpKSkgew0KKw0KKyAgICAgICAgcmV0
dXJuICgxKTsNCisgICAgfQ0KKyAgICByZXR1cm4gKDApOw0KK30NCisNCisvKiBEZWJ1ZyAmIGFk
dmFuY2UgdGhlIHN0YXRlIG9uY2UgYXQgdGhlIGFwcHJvcHJpYXRlIGVycm9yLWdlbiBzdGF0ZSAq
Lw0KK2ludCBmc3RmX2NvbmRpdGlvbmFsX3BtYXBtb2RfYWR2YW5jZShjb25zdCBjaGFyICogZmls
ZSwgaW50IGxpbmUsIHZtX29mZnNldF90IHZhZGRyLCB2bV9wYWdlX3QgbSkNCit7DQorICAgICAg
ICBpbnQgc3RhdHVzID0gMDsNCisgICAgICAgIHBtYXBfdCBwbWFwID0gUENQVV9HRVQoY3VycG1h
cCk7DQorICAgICAgICBpZiAoZnN0Zl9jb25kaXRpb25hbChwbWFwLCB2YWRkcikpIHsNCisNCisg
ICAgICAgICAgICBpZiAoc3RhdGVfY29udHJvbCkgew0KKw0KKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBvbGRfdmFsOw0KKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuZXdfdmFsOw0KKw0KKyAg
ICAgICAgICAgICAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwNCisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVCVUdfVFlQRV9UUkFO
U0lUSU9OX0lOSVRJQUwsDQorICAgICAgICAgICAgICAgICAgICAgICAgZnN0Zl9zdGF0ZV92YWx1
ZSgpKTsNCisNCisgICAgICAgICAgICAgICAgZnN0Zl9kZWJ1Z19wYWdlKGZpbGUsIGxpbmUsIHZh
ZGRyLCBtKTsNCisNCisgICAgICAgICAgICAgICAgZG8NCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgb2xkX3ZhbCA9IGF0b21pY19sb2FkX2FjcV82NChzdGF0ZV9jb250
cm9sKTsNCisgICAgICAgICAgICAgICAgICAgIGlmICgob2xkX3ZhbCAmIEZTVEZfU1RBVEVfQklU
U19QUklNRUQpICE9IEZTVEZfU1RBVEVfQklUU19QUklNRUQpDQorICAgICAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsNCisgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIERvbmU7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICAgICBpZiAob2xkX3ZhbCAmIEZTVEZfU1RBVEVfQklUU19GSU5JU0hFRCkNCisgICAg
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsNCisgICAgICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgICAgIG5ld192YWwgPSAob2xkX3ZhbCB8IEZTVEZfU1RBVEVf
QklUX0tFUk5FTF9QTUFQTU9EKTsNCisNCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWF0b21p
Y19jbXBzZXRfNjQoc3RhdGVfY29udHJvbCwgb2xkX3ZhbCwgbmV3X3ZhbCkpOw0KKw0KKyAgICAg
ICAgICAgICAgICBmc3RmX2RlYnVnX2Zhc3QoZmlsZSwNCisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZTVEZfREVCVUdfVFlQRV9UUkFOU0lU
SU9OX0ZJTkFMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWwpOw0KKyAgICAgICAg
ICAgICAgICBzdGF0dXMgPSAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAg
ICAgIERvbmU6DQorDQorICAgICAgICByZXR1cm4gKHN0YXR1cyk7DQorfQ0KKw0KKw0KKw0KKw0K
Kw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KICNpZiBkZWZpbmVkKElO
VkFSSUFOVFMpIHx8IGRlZmluZWQoSU5WQVJJQU5UX1NVUFBPUlQpDQogdm9pZA0KIHZtX3BhZ2Vf
YXNzZXJ0X2xvY2tlZF9LQkkodm1fcGFnZV90IG0sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l
KQ0KZGlmZiAtLWdpdCBhL3N5cy92bS92bV9wYWdlLmggYi9zeXMvdm0vdm1fcGFnZS5oDQppbmRl
eCA2Y2E4MDhiLi5lMjUwYmUwIDEwMDY0NA0KLS0tIGEvc3lzL3ZtL3ZtX3BhZ2UuaA0KKysrIGIv
c3lzL3ZtL3ZtX3BhZ2UuaA0KQEAgLTQ1Miw2ICs0NTIsMTEgQEAgbWFsbG9jMnZtX2ZsYWdzKGlu
dCBtYWxsb2NfZmxhZ3MpDQogI2RlZmluZQlQU19BTExfVkFMSUQJMHgyDQogI2RlZmluZQlQU19O
T05FX0JVU1kJMHg0DQogDQordm9pZCBmc3RmX2NvbmRpdGlvbmFsX3BvaW50X2RlYnVnKGNvbnN0
IGNoYXIgKiBmaWxlLCBpbnQgbGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhZGRyKTsN
Cit2b2lkIGZzdGZfY29uZGl0aW9uYWxfZmF1bHRfZGVidWcoY29uc3QgY2hhciAqIGZpbGUsIGlu
dCBsaW5lLCBwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3Byb3RfdCBwcm90KTsN
Cit2b2lkIGZzdGZfY29uZGl0aW9uYWxfcHRlX2RlYnVnKGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQg
bGluZSwgcG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhZGRyLCBwdF9lbnRyeV90IHB0ZSk7DQor
aW50IGZzdGZfY29uZGl0aW9uYWxfcG1hcG1vZF9hZHZhbmNlKGNvbnN0IGNoYXIgKiBmaWxlLCBp
bnQgbGluZSwgdm1fb2Zmc2V0X3QgdmFkZHIsIHZtX3BhZ2VfdCBtKTsNCisNCiB2b2lkIHZtX3Bh
Z2VfYnVzeV9kb3duZ3JhZGUodm1fcGFnZV90IG0pOw0KIHZvaWQgdm1fcGFnZV9idXN5X3NsZWVw
KHZtX3BhZ2VfdCBtLCBjb25zdCBjaGFyICptc2csIGJvb2wgbm9uc2hhcmVkKTsNCiB2b2lkIHZt
X3BhZ2VfZmxhc2godm1fcGFnZV90IG0pOw0KLS0gDQoyLjEwLjINCg0K

--_003_5A82AB7C6090404dellcom_
Content-Type: text/x-patch;
	name="0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch"
Content-Description: 0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch
Content-Disposition: attachment;
	filename="0002-TRIAL-Double-invalidate-when-finishing-COW-pmap-upda.patch";
	size=3688; creation-date="Tue, 13 Feb 2018 09:10:21 GMT";
	modification-date="Tue, 13 Feb 2018 09:10:21 GMT"
Content-ID: <66A7CD139204C34089CCB0755404B2EF@dell.com>
Content-Transfer-Encoding: base64

RnJvbSAwMDRkM2U4NzljZGY4OTQ3NzFlMjYwZmFkYWY5MmM0OGU0ODE4MGZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogRWxsaW90dCBSYWJlIDxlbGxpb3R0LnJhYmVAZGVsbC5jb20+
DQpEYXRlOiBTdW4sIDExIEZlYiAyMDE4IDE3OjI5OjE1IC0wNjAwDQpTdWJqZWN0OiBbUEFUQ0gg
Mi8zXSBUUklBTDogRG91YmxlIGludmFsaWRhdGUgd2hlbiBmaW5pc2hpbmcgQ09XIHBtYXAgdXBk
YXRlDQoNCldoZW4gYSBwcm9jZXNzIGZvcmtzIHRoZSBmaXJzdCB3cml0ZSB0byBhIHBhZ2Ugb2Yg
bWVtb3J5IHN0YXJ0cyBhIGNvcHktb24td3JpdGUNCm9wZXJhdGlvbi4gIFRoZSBwbWFwIGlzIGN1
cnJlbnRseSB1cGRhdGVkIHdpdGggdGhlIG5ldyBwaHlzaWNhbCBhZGRyZXNzIGFuZCB0aGUNCndy
aXRhYmxlIHN0YXR1cyBpbiBhIHNpbmdsZSBhdG9taWMgb3BlcmF0aW9uIGZvbGxvd2VkIGJ5IHRo
ZSBuZWNlc3NhcnkgVExCDQppbnZhbGlkYXRpb25zLiAgTWFya2luZyB0aGUgcGFnZSB3cml0ZWFi
bGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRpb25zIGFyZSBjb21wbGV0ZQ0KYWxsb3dzIHRoZSBwYWdl
IGNvbnRlbnRzIHRvIGJlIGNoYW5nZWQgYmVmb3JlIHRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUg
ZnVsbHkNCnZpc2libGUuICBUaGlzIGNhbiByZXN1bHQgaW4gc3VidGxlIG1lbW9yeSBjb3JydXB0
aW9ucy4NCg0KSGVyZSBpcyBhIHNpbXBsaWZpZWQgZXhhbXBsZSBvZiB3aGF0IGNhbiBvY2N1cjoN
Cg0KICArQSBwcm9jZXNzIGlzIGZvcmtlZCB3aGljaCB0cmFuc2l0aW9ucyBhIG1hcCBlbnRyeSB0
byBDT1cNCiAgK1RocmVhZCBBIHdyaXRlcyB0byBhIHBhZ2Ugb24gdGhlIG1hcCBlbnRyeSwgZmF1
bHRzLCB1cGRhdGVzIHRoZSBwbWFwIHRvDQogICB3cml0YWJsZSBhdCBhIG5ldyBwaHlzIGFkZHIs
IGFuZCBzdGFydHMgVExCIGludmFsaWRhdGlvbnMuLi4NCiAgK1RocmVhZCBCIGFjcXVpcmVzIGEg
bG9jaywgd3JpdGVzIHRvIGEgbG9jYXRpb24gb24gdGhlIG5ldyBwaHlzIGFkZHIsDQogICBhbmQg
cmVsZWFzZXMgdGhlIGxvY2sNCiAgK1RocmVhZCBDIGFjcXVpcmVzIHRoZSBsb2NrLCByZWFkcyBm
cm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgb2xkIHBoeXMgYWRkci4uLg0KICArVGhyZWFkIEEgLi4u
Y29udGludWVzIHRoZSBUTEIgaW52YWxpZGF0aW9ucyB3aGljaCBhcmUgY29tcGxldGVkDQogICtU
aHJlYWQgQyAuLi5yZWFkcyBmcm9tIHRoZSBsb2NhdGlvbiBvbiB0aGUgbmV3IHBoeXMgYWRkciwg
YW5kIHJlbGVhc2VzDQogICB0aGUgbG9jaw0KDQpJbiB0aGlzIGV4YW1wbGUgVGhyZWFkIEIgYW5k
IEMgbG9jaywgdXNlIG1lbW9yeSBhbmQgdW5sb2NrIHByb3Blcmx5IGFuZCBuZWl0aGVyDQpvd24g
dGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZS4gIFRocmVhZCBDIHNlZXMgZGF0YSBwcm90ZWN0ZWQg
YnkgYSBsb2NrIGNoYW5nZQ0KYmVuZWF0aCBpdCB3aGlsZSBpdCBpcyB0aGUgbG9jayBvd25lci4g
IFRocmVhZCBBIHdhcyB3cml0aW5nIHNvbWV3aGVyZSBlbHNlIG9uDQp0aGUgcGFnZSBhbmQgc28g
bmV2ZXIgbmVlZGVkIHRoZSBsb2NrLg0KDQpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgZG91Ymxl
LXVwZGF0ZS1pbnZhbGlkYXRpb24gZm9yIHRoZSBzY2VuYXJpbyBhYm92ZS4gIFRoZQ0KcG1hcCB1
cGRhdGUgd2lsbCBmaXJzdCBhcHBseSB0aGUgbmV3IGFkZHJlc3MgaW4gYSByZWFkLW9ubHkgc3Rh
dGUgYW5kIHBlcmZvcm0gdGhlDQpUTEIgaW52YWxpZGF0aW9ucy4gIEltbWVkaWF0ZWx5IGFmdGVy
d2FyZHMsIHRoZSBwbWFwIHdpbGwgYmUgdXBkYXRlZCBhZ2FpbiBtYXJraW5nDQp0aGUgcmVnaW9u
IGFzIHdyaXRlYWJsZS4gIFRoaXMgc3RyYXRlZ3kgZW5zdXJlcyB0aGUgcGFnZSBjb250ZW50cyBh
cmUgaW1tdXRhYmxlDQp1bnRpbCBhbGwgQ1BVcyBrbm93IHRoZSBjb3JyZWN0IGxvY2F0aW9uLg0K
LS0tDQogc3lzL2FtZDY0L2FtZDY0L3BtYXAuYyB8IDE5ICsrKysrKysrKysrKysrKysrKy0NCiAx
IGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KDQpkaWZmIC0t
Z2l0IGEvc3lzL2FtZDY0L2FtZDY0L3BtYXAuYyBiL3N5cy9hbWQ2NC9hbWQ2NC9wbWFwLmMNCmlu
ZGV4IDdiYjljMWIuLmFhOTFjYjEgMTAwNjQ0DQotLS0gYS9zeXMvYW1kNjQvYW1kNjQvcG1hcC5j
DQorKysgYi9zeXMvYW1kNjQvYW1kNjQvcG1hcC5jDQpAQCAtNDYzOCw3ICs0NjM4LDcgQEAgcG1h
cF9lbnRlcihwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90
X3QgcHJvdCwNCiAJdm1fcGFkZHJfdCBvcGEsIHBhOw0KIAl2bV9wYWdlX3QgbXB0ZSwgb207DQog
CWludCBydjsNCi0JYm9vbGVhbl90IG5vc2xlZXA7DQorCWJvb2xlYW5fdCBub3NsZWVwLCBkZWxh
eXJ3Ow0KIA0KIAlQR19BID0gcG1hcF9hY2Nlc3NlZF9iaXQocG1hcCk7DQogCVBHX0cgPSBwbWFw
X2dsb2JhbF9iaXQocG1hcCk7DQpAQCAtNDcyOCw2ICs0NzI4LDcgQEAgcG1hcF9lbnRlcihwbWFw
X3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCwNCiAJ
CXBhbmljKCJwbWFwX2VudGVyOiBpbnZhbGlkIHBhZ2UgZGlyZWN0b3J5IHZhPSUjbHgiLCB2YSk7
DQogDQogCW9yaWdwdGUgPSAqcHRlOw0KKwlkZWxheXJ3ID0gMDsNCiANCiAJLyoNCiAJICogSXMg
dGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgYWxyZWFkeSBtYXBwZWQ/DQpAQCAtNDc2OCw2
ICs0NzY5LDExIEBAIHBtYXBfZW50ZXIocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9w
YWdlX3QgbSwgdm1fcHJvdF90IHByb3QsDQogCQkJaWYgKCgob3JpZ3B0ZSBeIG5ld3B0ZSkgJiB+
KFBHX00gfCBQR19BKSkgPT0gMCkNCiAJCQkJZ290byB1bmNoYW5nZWQ7DQogCQkJZ290byB2YWxp
ZGF0ZTsNCisJCX0gZWxzZSBpZiAoKChvcmlncHRlICYgUEdfTUFOQUdFRCkgIT0gMCkgJiYNCisJ
CQkgICAoKG9yaWdwdGUgJiBQR19SVykgPT0gMCkgJiYNCisJCQkgICAoKG5ld3B0ZSAmIFBHX1JX
KSAhPSAwKSkgew0KKwkJCW5ld3B0ZSAmPSB+UEdfUlc7DQorCQkJZGVsYXlydyA9IDE7DQogCQl9
DQogCX0gZWxzZSB7DQogCQkvKg0KQEAgLTQ4NDEsNiArNDg0NywxNyBAQCBwbWFwX2VudGVyKHBt
YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Byb3RfdCBwcm90LA0K
IAkJCSAqLw0KIAkJCWdvdG8gdW5jaGFuZ2VkOw0KIAkJfQ0KKwkJaWYgKGRlbGF5cncpIHsNCisJ
CQkvKg0KKwkJCSAqIElmIGJvdGggdGhlIHBoeXNpY2FsIGFkZHJlc3MgaGFzIGNoYW5nZWQgYW5k
IHdlJ3JlIGFkZGluZw0KKwkJCSAqIFJXLCB3ZSBkbyBhIHR3by1zdGFnZSB1cGRhdGUgc28gdGhl
IHJlZ2lvbiBpcyBpbW11dGFibGUNCisJCQkgKiB1bnRpbCBhbGwgQ1BVcyBoYXZlIHZpc2liaWxp
dHkgdG8gdGhlIG5ldyBhZGRyZXNzLg0KKwkJCSAqLw0KKwkJCWlmICgob3JpZ3B0ZSAmIFBHX0Ep
ICE9IDApDQorCQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHZhKTsNCisJCQluZXdwdGUg
fD0gUEdfUlc7DQorCQkJb3JpZ3B0ZSA9IHB0ZV9sb2FkX3N0b3JlKHB0ZSwgbmV3cHRlKTsNCisJ
CX0NCiAJCWlmICgob3JpZ3B0ZSAmIFBHX0EpICE9IDApDQogCQkJcG1hcF9pbnZhbGlkYXRlX3Bh
Z2UocG1hcCwgdmEpOw0KIAl9IGVsc2UNCi0tIA0KMi4xMC4yDQoNCg==

--_003_5A82AB7C6090404dellcom_--



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