Re: [PATCH 2/2] aarch64: use [SU]ADDLP/[SU]ADALP for widening sum reductions

Kyrylo Tkachov <[email protected]> Tue, 4 Aug 2026 13:26:12 +0000
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
SGkgVGFtYXIsDQoNCj4gT24gNCBBdWcgMjAyNiwgYXQgMTQ6NTIsIFRhbWFyIENocmlzdGluYSA8
dGFtYXIuY2hyaXN0aW5hQGFybS5jb20+IHdyb3RlOg0KPiANCj4gSGkgS3lyaWxsLA0KPiANCj4+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiBGcm9tOiBrdGthY2hvdkBudmlkaWEuY29t
IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4gU2VudDogMDQgQXVndXN0IDIwMjYgMTM6MzkNCj4+
IFRvOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZw0KPj4gQ2M6IFRhbWFyIENocmlzdGluYSA8VGFt
YXIuQ2hyaXN0aW5hQGFybS5jb20+OyByZ3VlbnRoZXJAc3VzZS5kZTsgS3lyeWxvDQo+PiBUa2Fj
aG92IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4gU3ViamVjdDogW1BBVENIIDIvMl0gYWFyY2g2
NDogdXNlIFtTVV1BRERMUC9bU1VdQURBTFAgZm9yIHdpZGVuaW5nIHN1bQ0KPj4gcmVkdWN0aW9u
cw0KPj4gDQo+PiBGcm9tOiBLeXJ5bG8gVGthY2hvdiA8a3RrYWNob3ZAbnZpZGlhLmNvbT4NCj4+
IA0KPj4gVGhlIEFkdmFuY2VkIFNJTUQgd2lkZW5fW3N1XXN1bSBvcHRhYnMgb25seSBjb3ZlciBh
IHNpbmdsZSB3aWRlbmluZyBzdGVwLA0KPj4gZXhwYW5kZWQgYXMgYSBkZXBlbmRlbnQgPHN1PmFk
ZHcgKyA8c3U+YWRkdzIgcGFpciwgcGx1cyBhIDR4IGZvcm0gdGhhdA0KPj4gcmVxdWlyZXMgZG90
IHByb2R1Y3QuICBBIHJlZHVjdGlvbiBpbnRvIGFuIGFjY3VtdWxhdG9yIHRoYXQgaXMgbW9yZSB0
aGFuDQo+PiB0d2ljZSBhcyB3aWRlIGFzIHRoZSBkYXRhIHRoZXJlZm9yZSBoYXMgdG8gZXh0ZW5k
IHRoZSBpbnB1dCBleHBsaWNpdGx5IGFuZA0KPj4gdGhlbiBpc3N1ZSBvbmUgd2lkZW5pbmcgYWRk
IHBlciBoYWxmIHZlY3Rvci4gIFN1bW1pbmcgYnl0ZXMgaW50byBhIDY0LWJpdA0KPj4gYWNjdW11
bGF0b3IgY29zdHMgZmlmdGVlbiBTSU1EIG9wZXJhdGlvbnMgcGVyIDE2IGJ5dGVzIG9mIGlucHV0
Lg0KPj4gDQo+PiBbU1VdQURETFAgYW5kIFtTVV1BREFMUCBhZGQgYWRqYWNlbnQgbGFuZSBwYWly
cyBpbnRvIHRoZSBuZXh0IHdpZGVyDQo+PiBlbGVtZW50LCBzbyBhIGNoYWluIG9mIHRoZW0gZXhw
cmVzc2VzIGFueSBwb3dlci1vZi10d28gd2lkZW5pbmcgc3VtDQo+PiByZWR1Y3Rpb24gaW4gb25l
IG9wZXJhdGlvbiBwZXIgc3RlcC4gIFRoZSByZWdyb3VwaW5nIGlzIGV4YWN0IGJlY2F1c2UgdGhl
DQo+PiBzdW0gb2YgdHdvIGVsZW1lbnRzIGFsd2F5cyBmaXRzIGluIHRoZSBkb3VibGVkIGVsZW1l
bnQgd2lkdGgsIGFuZCB0aGUNCj4+IGdyb3VwaW5nIG9mIGxhbmVzIGluc2lkZSBhIHJlZHVjdGlv
biBhY2N1bXVsYXRvciBpcyBhbHJlYWR5IHVuY29uc3RyYWluZWQNCj4+IGZvciBXSURFTl9TVU1f
RVhQUiwgd2hpY2ggdGhlIGV4aXN0aW5nIGRvdCBwcm9kdWN0IGJhc2VkIDR4IGV4cGFuZGVyIGFs
c28NCj4+IHJlbGllcyBvbi4NCj4+IA0KPj4gRXhwYW5kIHRoZSAyeCBmb3JtcyBhcyBhIHNpbmds
ZSBbU1VdQURBTFAsIGFkZCB0aGUgbWlzc2luZyBWNFNJIDwtIFYxNlFJDQo+PiBhbmQgVjJTSSA8
LSBWOFFJIGZvcm1zIGZvciAhVEFSR0VUX0RPVFBST0QsIGFuZCBhZGQgdGhlIFYyREkgPC0gVjhI
SSBhbmQNCj4+IFYyREkgPC0gVjE2UUkgZm9ybXMgdGhhdCBubyBleHBhbmRlciBjb3ZlcmVkLiAg
QWxsIG9mIHRoZW0gYXJlIGJ1aWx0IGJ5DQo+PiBhYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0sIHdo
aWNoIGhhbHZlcyB0aGUgbGFuZSBjb3VudCB3aXRoIFtTVV1BRERMUA0KPj4gdW50aWwNCj4+IG9u
ZSBwYWlyd2lzZSBzdGVwIHJlbWFpbnMgYW5kIHRoZW4gYWNjdW11bGF0ZXMgd2l0aCBbU1VdQURB
TFAuDQo+PiANCj4+IEZvciBhIHN1bSBvZiB1bnNpZ25lZCBjaGFyIGludG8gbG9uZyB0aGUgaW5u
ZXIgbG9vcCBjaGFuZ2VzIGZyb20NCj4+IA0KPj4gbGRyIHEzMCwgW3gxXSwgMTYNCj4+IHppcDEg
djI4LjE2YiwgdjMwLjE2YiwgdjI5LjE2Yg0KPj4gemlwMiB2MzAuMTZiLCB2MzAuMTZiLCB2Mjku
MTZiDQo+PiB6aXAxIHYyNi44aCwgdjI4LjhoLCB2MjkuOGgNCj4+IHppcDIgdjI4LjhoLCB2Mjgu
OGgsIHYyOS44aA0KPj4gemlwMSB2MjcuOGgsIHYzMC44aCwgdjI5LjhoDQo+PiB6aXAyIHYzMC44
aCwgdjMwLjhoLCB2MjkuOGgNCj4+IHVhZGR3IHYzMS4yZCwgdjMxLjJkLCB2MjYuMnMNCj4+IHVh
ZGR3MiB2MzEuMmQsIHYzMS4yZCwgdjI2LjRzDQo+PiAuLi4gIChzaXggbW9yZSB1YWRkdy91YWRk
dzIpDQo+PiANCj4+IHRvDQo+PiANCj4+IGxkciBxMzEsIFt4MV0sIDE2DQo+PiB1YWRkbHAgdjMx
LjhoLCB2MzEuMTZiDQo+PiB1YWRkbHAgdjMxLjRzLCB2MzEuOGgNCj4+IHVhZGFscCB2MzAuMmQs
IHYzMS40cw0KPj4gDQo+IA0KPiBIYXZlIHlvdSBjb25zaWRlcmVkIGNvbnNpZGVyZWQgZXZlbiBm
b3IgdGhlIGIgdG8gZCBjYXNlIHRvIHVzZSBkb3Rwcm9kDQo+IGZvciB0aGUgYiAtPiBzIGFuZCB0
aGVuIHVhZGFscCBmb3IgdGhlIGZpbmFsIDQgdG8gZD8gb3IgaXMgdGhlIGFib3ZlIGNvZGVnZW4N
Cj4gdGhlIGZhbGxiYWNrIGZvciB3aGVuICFkb3Rwcm9kPyB3YXNuJ3QgcXVpdGUgY2xlYXIuLg0K
PiANCg0KSXTigJlzIG5vdCBhIGZhbGxiYWNrIGFzIHRoZSBkb3Rwcm9kIHBhdGggZXhpc3RzIG9u
bHkgZm9yIGIgLT4gcy4NClVzaW5nIGRvdHByb2QgaGVyZSBpcyBpbnRlcmVzdGluZywgSeKAmWxs
IHRyeSBpdCBvdXQuDQpUaGFua3MgZm9yIHRoZSBzdWdnZXN0aW9uIQ0KS3lyaWxsDQoNCj4gVGhh
dCBzaG91bGQgc3RpbGwgc2hhdmUgb2ZmIDEgY3ljbGUuDQo+IA0KPiBUaGFua3MsDQo+IFRhbWFy
DQo+IA0KPj4gYW5kIGZvciBhIHN1bSBvZiBpbnQgaW50byBsb25nIHRoZSBzYWRkdy9zYWRkdzIg
cGFpciBiZWNvbWVzIG9uZSBzYWRhbHAuDQo+PiBPbiBhIE5lb3ZlcnNlIFYyIGNvcmUgd2l0aCBh
biBMMSByZXNpZGVudCB3b3JraW5nIHNldCB0aGlzIGN1dHMgdGhlIHRpbWUgb2YNCj4+IHRoZQ0K
Pj4gYnl0ZSBsb29wIGJ5IGFib3V0IDg4JSBhbmQgb2YgdGhlIGludCBsb29wIGJ5IGFib3V0IDY4
JS4NCj4+IA0KPj4gQm9vdHN0cmFwcGVkIGFuZCB0ZXN0ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4
LWdudS4NCj4+IE9rIGZvciB0cnVuaz8NCj4+IFRoYW5rcywNCj4+IEt5cmlsbA0KPj4gDQo+PiBn
Y2MvQ2hhbmdlTG9nOg0KPj4gDQo+PiAqIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgg
KGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSk6DQo+PiBEZWNsYXJlLg0KPj4gKiBjb25maWcvYWFy
Y2g2NC9hYXJjaDY0LmNjIChhYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0pOiBOZXcNCj4+IGZ1bmN0
aW9uLg0KPj4gKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQgKGFhcmNoNjRfPHN1PmFk
YWxwPG1vZGU+KToNCj4+IFJlbmFtZQ0KPj4gdG8gLi4uDQo+PiAoQGFhcmNoNjRfPHN1PmFkYWxw
PG1vZGU+KTogLi4uIHRoaXMuDQo+PiAod2lkZW5fc3N1bTxWZGJsdz48bW9kZT4zLCB3aWRlbl91
c3VtPFZkYmx3Pjxtb2RlPjMpOg0KPj4gUmVwbGFjZSBieSAuLi4NCj4+ICh3aWRlbl88c3U+c3Vt
PFZkYmx3Pjxtb2RlPjMpOiAuLi4gdGhpcy4gIEV4cGFuZCB0byBbU1VdQURBTFAuDQo+PiAod2lk
ZW5fc3N1bTxtb2RlPjx2c2kycWk+Mywgd2lkZW5fdXN1bTxtb2RlPjx2c2kycWk+Myk6DQo+PiBS
ZXBsYWNlDQo+PiBieSAuLi4NCj4+ICh3aWRlbl88c3U+c3VtPG1vZGU+PHZzaTJxaT4zKTogLi4u
IHRoaXMuICBIYW5kbGUNCj4+ICFUQVJHRVRfRE9UUFJPRC4NCj4+ICh3aWRlbl88c3U+c3VtdjJk
aTxtb2RlPjMpOiBOZXcgZXhwYW5kZXIuDQo+PiAqIGNvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5t
ZCAoVlFfQkgpOiBOZXcgbW9kZSBpdGVyYXRvci4NCj4+IA0KPj4gZ2NjL3Rlc3RzdWl0ZS9DaGFu
Z2VMb2c6DQo+PiANCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzEuYzogVXBkYXRl
IGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYzog
TGlrZXdpc2UuDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC9zYWRkdy0xLmM6IFJlbmFtZWQgdG8u
Li4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGFscC0xLmM6IC4uLnRoaXMuICBVcGRhdGUg
ZXhwZWN0ZWQgb3V0cHV0Lg0KPj4gKiBnY2MudGFyZ2V0L2FhcmNoNjQvc2FkZHctMi5jOiBSZW5h
bWVkIHRvLi4uDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC9zYWRhbHAtMi5jOiAuLi50aGlzLiAg
VXBkYXRlIGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTEu
YzogUmVuYW1lZCB0by4uLg0KPj4gKiBnY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTEuYzogLi4u
dGhpcy4gIFVwZGF0ZSBleHBlY3RlZCBvdXRwdXQuDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC91
YWRkdy0yLmM6IFJlbmFtZWQgdG8uLi4NCj4+ICogZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGFscC0y
LmM6IC4uLnRoaXMuICBVcGRhdGUgZXhwZWN0ZWQgb3V0cHV0Lg0KPj4gKiBnY2MudGFyZ2V0L2Fh
cmNoNjQvdWFkZHctMy5jOiBSZW5hbWVkIHRvLi4uDQo+PiAqIGdjYy50YXJnZXQvYWFyY2g2NC91
YWRhbHAtMy5jOiAuLi50aGlzLiAgVXBkYXRlIGV4cGVjdGVkIG91dHB1dC4NCj4+ICogZ2NjLnRh
cmdldC9hYXJjaDY0L3dpZGVuX3N1bV9wYWlyd2lzZV8xLmM6IE5ldyB0ZXN0Lg0KPj4gKiBnY2Mu
dGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzIuYzogTmV3IHRlc3QuDQo+PiANCj4+
IFNpZ25lZC1vZmYtYnk6IEt5cnlsbyBUa2FjaG92IDxrdGthY2hvdkBudmlkaWEuY29tPg0KPj4g
LS0tDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1wcm90b3MuaCAgICAgICAgICAgfCAg
MSArDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kICAgICAgICAgICAgfCA3
OCArKysrKysrKy0tLS0tLS0tLS0tDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYyAg
ICAgICAgICAgICAgICAgfCAyNyArKysrKysrDQo+PiBnY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0
b3JzLm1kICAgICAgICAgICAgICAgfCAgNCArDQo+PiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv
YWFyY2g2NC9wcjEyMjA2OV8xLmMgfCAxMSArLS0NCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl
dC9hYXJjaDY0L3ByMTIyMDY5XzMuYyB8ICAzICstDQo+PiAuLi4vYWFyY2g2NC97c2FkZHctMS5j
ID0+IHNhZGFscC0xLmN9ICAgICAgICAgfCAgMyArLQ0KPj4gLi4uL2FhcmNoNjQve3NhZGR3LTIu
YyA9PiBzYWRhbHAtMi5jfSAgICAgICAgIHwgIDMgKy0NCj4+IC4uLi9hYXJjaDY0L3t1YWRkdy0x
LmMgPT4gdWFkYWxwLTEuY30gICAgICAgICB8ICAzICstDQo+PiAuLi4vYWFyY2g2NC97dWFkZHct
Mi5jID0+IHVhZGFscC0yLmN9ICAgICAgICAgfCAgMyArLQ0KPj4gLi4uL2FhcmNoNjQve3VhZGR3
LTMuYyA9PiB1YWRhbHAtMy5jfSAgICAgICAgIHwgIDMgKy0NCj4+IC4uLi9nY2MudGFyZ2V0L2Fh
cmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzEuYyB8IDM5ICsrKysrKysrKysNCj4+IC4uLi9nY2Mu
dGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzIuYyB8IDI5ICsrKysrKysNCj4+IDEz
IGZpbGVzIGNoYW5nZWQsIDE0MSBpbnNlcnRpb25zKCspLCA2NiBkZWxldGlvbnMoLSkNCj4+IHJl
bmFtZSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC97c2FkZHctMS5jID0+IHNhZGFs
cC0xLmN9ICg3NCUpDQo+PiByZW5hbWUgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv
e3NhZGR3LTIuYyA9PiBzYWRhbHAtMi5jfSAoNzQlKQ0KPj4gcmVuYW1lIGdjYy90ZXN0c3VpdGUv
Z2NjLnRhcmdldC9hYXJjaDY0L3t1YWRkdy0xLmMgPT4gdWFkYWxwLTEuY30gKDc1JSkNCj4+IHJl
bmFtZSBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC97dWFkZHctMi5jID0+IHVhZGFs
cC0yLmN9ICg3NSUpDQo+PiByZW5hbWUgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv
e3VhZGR3LTMuYyA9PiB1YWRhbHAtMy5jfSAoNzQlKQ0KPj4gY3JlYXRlIG1vZGUgMTAwNjQ0DQo+
PiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC93aWRlbl9zdW1fcGFpcndpc2VfMS5j
DQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj
aDY0L3dpZGVuX3N1bV9wYWlyd2lzZV8yLmMNCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2djYy9jb25m
aWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oDQo+PiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJj
aDY0LXByb3Rvcy5oDQo+PiBpbmRleCBiY2M4MzNjZmFhMS4uOTMwM2YxMmY4MGMgMTAwNjQ0DQo+
PiAtLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1wcm90b3MuaA0KPj4gKysrIGIvZ2Nj
L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgNCj4+IEBAIC0xMDY2LDYgKzEwNjYsNyBA
QCB2b2lkIGFhcmNoNjRfZW1pdF9zdmVfcHJlZF92ZWNfZHVwbGljYXRlDQo+PiAobWFjaGluZV9t
b2RlLCBydHgsIHJ0eCk7DQo+PiB2b2lkIGFhcmNoNjRfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKTsN
Cj4+IHZvaWQgYWFyY2g2NF9kZWNvbXBvc2VfdmVjX3N0cnVjdF9pbmRleCAobWFjaGluZV9tb2Rl
LCBydHggKiwgcnR4ICosDQo+PiBib29sKTsNCj4+IHZvaWQgYWFyY2g2NF9leHBhbmRfdmVjdG9y
X2luaXQgKHJ0eCwgcnR4KTsNCj4+ICt2b2lkIGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSAocnR4
LCBydHgsIHJ0eCwgcnR4X2NvZGUpOw0KPj4gdm9pZCBhYXJjaDY0X3N2ZV9leHBhbmRfdmVjdG9y
X2luaXRfc3VidmVjdG9yIChydHgsIHJ0eCk7DQo+PiB2b2lkIGFhcmNoNjRfc3ZlX2V4cGFuZF92
ZWN0b3JfaW5pdCAocnR4LCBydHgpOw0KPj4gdm9pZCBhYXJjaDY0X2luaXRfY3VtdWxhdGl2ZV9h
cmdzIChDVU1VTEFUSVZFX0FSR1MgKiwgY29uc3RfdHJlZSwgcnR4LA0KPj4gZGlmZiAtLWdpdCBh
L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQNCj4+IGIvZ2NjL2NvbmZpZy9hYXJj
aDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gaW5kZXggNDMzZjE2MDUyYmYuLmQxMTlhYzE3MzUyIDEw
MDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gKysr
IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPj4gQEAgLTExODIsNyArMTE4
Miw3IEBADQo+PiAgIH0NCj4+ICkNCj4+IA0KPj4gLShkZWZpbmVfZXhwYW5kICJhYXJjaDY0Xzxz
dT5hZGFscDxtb2RlPiINCj4+ICsoZGVmaW5lX2V4cGFuZCAiQGFhcmNoNjRfPHN1PmFkYWxwPG1v
ZGU+Ig0KPj4gICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8VkRCTFc+IDAgInJlZ2lzdGVyX29wZXJh
bmQiKQ0KPj4gKHBsdXM6PFZEQkxXPg0KPj4gICAocGx1czo8VkRCTFc+DQo+PiBAQCAtNTI4Mywx
OSArNTI4MywxNyBAQA0KPj4gDQo+PiA7OyA8c3U+PGFkZHN1Yj53PHE+Lg0KPj4gDQo+PiAtKGRl
ZmluZV9leHBhbmQgIndpZGVuX3NzdW08VmRibHc+PG1vZGU+MyINCj4+ICs7OyBBIHdpZGVuaW5n
IHN1bSByZWR1Y3Rpb24gdGhhdCBoYWx2ZXMgdGhlIGxhbmUgY291bnQgaXMgYSBzaW5nbGUgcGFp
cndpc2UNCj4+ICs7OyB3aWRlbmluZyBhY2N1bXVsYXRlLg0KPj4gKyhkZWZpbmVfZXhwYW5kICJ3
aWRlbl88c3U+c3VtPFZkYmx3Pjxtb2RlPjMiDQo+PiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxW
REJMVz4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+PiAtIChwbHVzOjxWREJMVz4gKHNpZ25fZXh0
ZW5kOjxWREJMVz4NCj4+IC0gICAgICAgICAobWF0Y2hfb3BlcmFuZDpWUVcgMSAicmVnaXN0ZXJf
b3BlcmFuZCIpKQ0KPj4gKyAocGx1czo8VkRCTFc+IChBTllfRVhURU5EOjxWREJMVz4NCj4+ICsg
KG1hdGNoX29wZXJhbmQ6VlFXIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkNCj4+ICAgICAgIChtYXRj
aF9vcGVyYW5kOjxWREJMVz4gMiAicmVnaXN0ZXJfb3BlcmFuZCIpKSldDQo+PiAgICJUQVJHRVRf
U0lNRCINCj4+ICAgew0KPj4gLSAgICBydHggcCA9IGFhcmNoNjRfc2ltZF92ZWN0X3Bhcl9jbnN0
X2hhbGYgKDxNT0RFPm1vZGUsIDxudW5pdHM+LCBmYWxzZSk7DQo+PiAtICAgIHJ0eCB0ZW1wID0g
Z2VuX3JlZ19ydHggKEdFVF9NT0RFIChvcGVyYW5kc1swXSkpOw0KPj4gLQ0KPj4gLSAgICBlbWl0
X2luc24gKGdlbl9hYXJjaDY0X3NhZGR3PG1vZGU+X2ludGVybmFsICh0ZW1wLCBvcGVyYW5kc1sy
XSwNCj4+IC0gb3BlcmFuZHNbMV0sIHApKTsNCj4+IC0gICAgZW1pdF9pbnNuIChnZW5fYWFyY2g2
NF9zYWRkdzI8bW9kZT4gKG9wZXJhbmRzWzBdLCB0ZW1wLA0KPj4gb3BlcmFuZHNbMV0pKTsNCj4+
ICsgICAgZW1pdF9pbnNuIChnZW5fYWFyY2g2NF88c3U+YWRhbHA8bW9kZT4gKG9wZXJhbmRzWzBd
LCBvcGVyYW5kc1syXSwNCj4+ICsgICAgIG9wZXJhbmRzWzFdKSk7DQo+PiAgICAgRE9ORTsNCj4+
ICAgfQ0KPj4gKQ0KPj4gQEAgLTUzMTEsMjMgKzUzMDksNiBAQA0KPj4gICBET05FOw0KPj4gfSkN
Cj4+IA0KPj4gLShkZWZpbmVfZXhwYW5kICJ3aWRlbl91c3VtPFZkYmx3Pjxtb2RlPjMiDQo+PiAt
ICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8VkRCTFc+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQ0KPj4g
LSAocGx1czo8VkRCTFc+ICh6ZXJvX2V4dGVuZDo8VkRCTFc+DQo+PiAtICAgICAgICAgKG1hdGNo
X29wZXJhbmQ6VlFXIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkNCj4+IC0gICAgICAgKG1hdGNoX29w
ZXJhbmQ6PFZEQkxXPiAyICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0NCj4+IC0gICJUQVJHRVRfU0lN
RCINCj4+IC0gIHsNCj4+IC0gICAgcnR4IHAgPSBhYXJjaDY0X3NpbWRfdmVjdF9wYXJfY25zdF9o
YWxmICg8TU9ERT5tb2RlLCA8bnVuaXRzPiwgZmFsc2UpOw0KPj4gLSAgICBydHggdGVtcCA9IGdl
bl9yZWdfcnR4IChHRVRfTU9ERSAob3BlcmFuZHNbMF0pKTsNCj4+IC0NCj4+IC0gICAgZW1pdF9p
bnNuIChnZW5fYWFyY2g2NF91YWRkdzxtb2RlPl9pbnRlcm5hbCAodGVtcCwgb3BlcmFuZHNbMl0s
DQo+PiAtICBvcGVyYW5kc1sxXSwgcCkpOw0KPj4gLSAgICBlbWl0X2luc24gKGdlbl9hYXJjaDY0
X3VhZGR3Mjxtb2RlPiAob3BlcmFuZHNbMF0sIHRlbXAsDQo+PiBvcGVyYW5kc1sxXSkpOw0KPj4g
LSAgICBET05FOw0KPj4gLSAgfQ0KPj4gLSkNCj4+IC0NCj4+IChkZWZpbmVfZXhwYW5kICJ3aWRl
bl91c3VtPFZ3aWRlPjxtb2RlPjMiDQo+PiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxWV0lERT4g
MCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+PiAocGx1czo8VldJREU+ICh6ZXJvX2V4dGVuZDo8VldJ
REU+DQo+PiBAQCAtNTMzOSwzOCArNTMyMCw0MyBAQA0KPj4gICBET05FOw0KPj4gfSkNCj4+IA0K
Pj4gLShkZWZpbmVfZXhwYW5kICJ3aWRlbl9zc3VtPG1vZGU+PHZzaTJxaT4zIg0KPj4gKzs7IEEg
d2lkZW5pbmcgc3VtIHJlZHVjdGlvbiB0aGF0IHF1YXJ0ZXJzIHRoZSBsYW5lIGNvdW50LiAgV2l0
aCBkb3QgcHJvZHVjdA0KPj4gKzs7IHRoaXMgaXMgb25lIFtTVV1ET1Qgd2l0aCBhIHZlY3RvciBv
ZiBvbmVzLCBpLmUuICs9IGEgYmVjb21lcyArPSAoYSAqIDEpLg0KPj4gKzs7IE90aGVyd2lzZSBp
dCBpcyBhIHBhaXJ3aXNlIHdpZGVuaW5nIGFkZCBmZWVkaW5nIGEgcGFpcndpc2Ugd2lkZW5pbmcN
Cj4+ICs7OyBhY2N1bXVsYXRlLg0KPj4gKyhkZWZpbmVfZXhwYW5kICJ3aWRlbl88c3U+c3VtPG1v
ZGU+PHZzaTJxaT4zIg0KPj4gICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWUyAwICJyZWdpc3Rlcl9v
cGVyYW5kIikNCj4+IC0gKHBsdXM6VlMgKHNpZ25fZXh0ZW5kOlZTDQo+PiArIChwbHVzOlZTIChB
TllfRVhURU5EOlZTDQo+PiAgICAobWF0Y2hfb3BlcmFuZDo8VlNJMlFJPiAxICJyZWdpc3Rlcl9v
cGVyYW5kIikpDQo+PiAgKG1hdGNoX29wZXJhbmQ6VlMgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKSld
DQo+PiAtICAiVEFSR0VUX0RPVFBST0QiDQo+PiArICAiVEFSR0VUX1NJTUQiDQo+PiAgIHsNCj4+
IC0gICAgcnR4IG9uZXMgPSBmb3JjZV9yZWcgKDxWU0kyUUk+bW9kZSwgQ09OU1QxX1JUWCAoPFZT
STJRST5tb2RlKSk7DQo+PiAtICAgIGVtaXRfaW5zbiAoZ2VuX3Nkb3RfcHJvZDxtb2RlPjx2c2ky
cWk+IChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sDQo+PiBvbmVzLA0KPj4gLSAgICAgb3BlcmFu
ZHNbMl0pKTsNCj4+ICsgICAgaWYgKFRBUkdFVF9ET1RQUk9EKQ0KPj4gKyAgICAgIHsNCj4+ICsg
cnR4IG9uZXMgPSBmb3JjZV9yZWcgKDxWU0kyUUk+bW9kZSwgQ09OU1QxX1JUWCAoPFZTSTJRST5t
b2RlKSk7DQo+PiArIGVtaXRfaW5zbiAoZ2VuXzxzdT5kb3RfcHJvZDxtb2RlPjx2c2kycWk+IChv
cGVyYW5kc1swXSwNCj4+IG9wZXJhbmRzWzFdLA0KPj4gKyAgICBvbmVzLCBvcGVyYW5kc1syXSkp
Ow0KPj4gKyAgICAgIH0NCj4+ICsgICAgZWxzZQ0KPj4gKyAgICAgIGFhcmNoNjRfZXhwYW5kX3dp
ZGVuX3N1bSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJdLCBvcGVyYW5kc1sxXSwNCj4+IDxDT0RF
Pik7DQo+PiAgICAgRE9ORTsNCj4+ICAgfQ0KPj4gKQ0KPj4gDQo+PiAtOzsgVXNlIGRvdCBwcm9k
dWN0IHRvIHBlcmZvcm0gZG91YmxlIHdpZGVuaW5nIHN1bSByZWR1Y3Rpb25zIGJ5DQo+PiAtOzsg
Y2hhbmdpbmcgKz0gYSBpbnRvICs9IChhICogMSkuICBpLmUuIHdlIHNlZWQgdGhlIG11bHRpcGxp
Y2F0aW9uIHdpdGggMS4NCj4+IC0oZGVmaW5lX2V4cGFuZCAid2lkZW5fdXN1bTxtb2RlPjx2c2ky
cWk+MyINCj4+IC0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZTIDAgInJlZ2lzdGVyX29wZXJhbmQi
KQ0KPj4gLSAocGx1czpWUyAoemVyb19leHRlbmQ6VlMNCj4+IC0gICAgICAgICAobWF0Y2hfb3Bl
cmFuZDo8VlNJMlFJPiAxICJyZWdpc3Rlcl9vcGVyYW5kIikpDQo+PiAtICAgICAgIChtYXRjaF9v
cGVyYW5kOlZTIDIgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQ0KPj4gLSAgIlRBUkdFVF9ET1RQUk9E
Ig0KPj4gKzs7IFdpZGVuaW5nIHN1bSByZWR1Y3Rpb25zIGludG8gNjQtYml0IGVsZW1lbnRzLiAg
VGhlc2UgbmVlZCB0d28gb3IgdGhyZWUNCj4+ICs7OyBwYWlyd2lzZSB3aWRlbmluZyBzdGVwcy4N
Cj4+ICsoZGVmaW5lX2V4cGFuZCAid2lkZW5fPHN1PnN1bXYyZGk8bW9kZT4zIg0KPj4gKyAgWyhz
ZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAwICJyZWdpc3Rlcl9vcGVyYW5kIikNCj4+ICsgKHBsdXM6
VjJESSAoQU5ZX0VYVEVORDpWMkRJDQo+PiArICAgICAgKG1hdGNoX29wZXJhbmQ6VlFfQkggMSAi
cmVnaXN0ZXJfb3BlcmFuZCIpKQ0KPj4gKyAgICAobWF0Y2hfb3BlcmFuZDpWMkRJIDIgInJlZ2lz
dGVyX29wZXJhbmQiKSkpXQ0KPj4gKyAgIlRBUkdFVF9TSU1EIg0KPj4gICB7DQo+PiAtICAgIHJ0
eCBvbmVzID0gZm9yY2VfcmVnICg8VlNJMlFJPm1vZGUsIENPTlNUMV9SVFggKDxWU0kyUUk+bW9k
ZSkpOw0KPj4gLSAgICBlbWl0X2luc24gKGdlbl91ZG90X3Byb2Q8bW9kZT48dnNpMnFpPiAob3Bl
cmFuZHNbMF0sIG9wZXJhbmRzWzFdLA0KPj4gb25lcywNCj4+IC0gICAgIG9wZXJhbmRzWzJdKSk7
DQo+PiArICAgIGFhcmNoNjRfZXhwYW5kX3dpZGVuX3N1bSAob3BlcmFuZHNbMF0sIG9wZXJhbmRz
WzJdLCBvcGVyYW5kc1sxXSwNCj4+IDxDT0RFPik7DQo+PiAgICAgRE9ORTsNCj4+ICAgfQ0KPj4g
KQ0KPj4gDQo+PiAtOzsgVXNlIGRvdCBwcm9kdWN0IHRvIHBlcmZvcm0gZG91YmxlIHdpZGVuaW5n
IHN1bSByZWR1Y3Rpb25zIGJ5DQo+PiAtOzsgY2hhbmdpbmcgKz0gYSBpbnRvICs9IChhICogMSku
ICBpLmUuIHdlIHNlZWQgdGhlIG11bHRpcGxpY2F0aW9uIHdpdGggMS4NCj4+IChkZWZpbmVfaW5z
biAiYWFyY2g2NF88QU5ZX0VYVEVORDpzdT5zdWJ3PG1vZGU+Ig0KPj4gICBbKHNldCAobWF0Y2hf
b3BlcmFuZDo8VldJREU+IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9dyIpDQo+PiAobWludXM6PFZX
SURFPiAobWF0Y2hfb3BlcmFuZDo8VldJREU+IDEgInJlZ2lzdGVyX29wZXJhbmQiDQo+PiAidyIp
DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MgYi9nY2MvY29u
ZmlnL2FhcmNoNjQvYWFyY2g2NC5jYw0KPj4gaW5kZXggZDE5Y2EzMDVkODIuLjYyOGU5NGU4YzQw
IDEwMDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MNCj4+ICsrKyBi
L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjDQo+PiBAQCAtMjYzMjcsNiArMjYzMjcsMzMg
QEAgYWFyY2g2NF9leHBhbmRfdmVjdG9yX2luaXQgKHJ0eCB0YXJnZXQsIHJ0eA0KPj4gdmFscykN
Cj4+ICAgZW1pdF9pbnNuIChzZXFfdG90YWxfY29zdCA8IGZhbGxiYWNrX3NlcV9jb3N0ID8gc2Vx
IDogZmFsbGJhY2tfc2VxKTsNCj4+IH0NCj4+IA0KPj4gKy8qIEV4cGFuZCB0aGUgd2lkZW5pbmcg
c3VtIHJlZHVjdGlvbiBERVNUID0gQUNDICsgKFdJREUpIFNSQywgd2hlcmUgdGhlDQo+PiArICAg
QWR2YW5jZWQgU0lNRCB2ZWN0b3IgU1JDIGhvbGRzIGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIG51
bWJlciBvZiBsYW5lcw0KPj4gKyAgIG9mIHRoZSBhY2N1bXVsYXRvciBBQ0MgYW5kIG9mIHRoZSBy
ZXN1bHQgREVTVC4gIEVYVEVORF9DT0RFIGlzDQo+PiArICAgU0lHTl9FWFRFTkQgb3IgWkVST19F
WFRFTkQgYW5kIHNlbGVjdHMgdGhlIHNpZ25lZCBvciB1bnNpZ25lZCBmb3JtLg0KPj4gKyAgIEhh
bHZlIHRoZSBsYW5lIGNvdW50IHdpdGggW1NVXUFERExQIHVudGlsIGEgc2luZ2xlIHBhaXJ3aXNl
IHN0ZXAgaXMNCj4+ICsgICBsZWZ0LCB0aGVuIGFjY3VtdWxhdGUgaW50byBBQ0Mgd2l0aCBbU1Vd
QURBTFAuICAqLw0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthYXJjaDY0X2V4cGFuZF93aWRlbl9zdW0g
KHJ0eCBkZXN0LCBydHggYWNjLCBydHggc3JjLCBydHhfY29kZSBleHRlbmRfY29kZSkNCj4+ICt7
DQo+PiArICB1bnNpZ25lZCBpbnQgZGVzdF9udW5pdHMgPSBHRVRfTU9ERV9OVU5JVFMgKEdFVF9N
T0RFDQo+PiAoZGVzdCkpLnRvX2NvbnN0YW50ICgpOw0KPj4gKyAgbWFjaGluZV9tb2RlIG1vZGUg
PSBHRVRfTU9ERSAoc3JjKTsNCj4+ICsgIGdjY19hc3NlcnQgKEdFVF9NT0RFX05VTklUUyAobW9k
ZSkudG9fY29uc3RhbnQgKCkgJSAoZGVzdF9udW5pdHMgKiAyKQ0KPj4gPT0gMCk7DQo+PiArDQo+
PiArICB3aGlsZSAoR0VUX01PREVfTlVOSVRTIChtb2RlKS50b19jb25zdGFudCAoKSA+IGRlc3Rf
bnVuaXRzICogMikNCj4+ICsgICAgew0KPj4gKyAgICAgIGluc25fY29kZSBpY29kZSA9IGNvZGVf
Zm9yX2FhcmNoNjRfYWRkbHAgKGV4dGVuZF9jb2RlLCBtb2RlKTsNCj4+ICsgICAgICBtb2RlID0g
aW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzBdLm1vZGU7DQo+PiArICAgICAgcnR4IHRtcCA9IGdl
bl9yZWdfcnR4IChtb2RlKTsNCj4+ICsgICAgICBlbWl0X2luc24gKEdFTl9GQ04gKGljb2RlKSAo
dG1wLCBzcmMpKTsNCj4+ICsgICAgICBzcmMgPSB0bXA7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg
IGVtaXRfaW5zbiAoR0VOX0ZDTiAoY29kZV9mb3JfYWFyY2g2NF9hZGFscCAoZXh0ZW5kX2NvZGUs
IG1vZGUpKQ0KPj4gKGRlc3QsIGFjYywNCj4+ICsgICAgc3JjKSk7DQo+PiArfQ0KPj4gKw0KPj4g
LyogRW1pdCBSVEwgY29ycmVzcG9uZGluZyB0bzoNCj4+ICAgIGluc3IgVEFSR0VULCBFTEVNLiAg
Ki8NCj4+IA0KPj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQN
Cj4+IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZA0KPj4gaW5kZXggMGQzMTk3NTE0
MzAuLjZhOGM5M2NjZTM3IDEwMDY0NA0KPj4gLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJh
dG9ycy5tZA0KPj4gKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZA0KPj4gQEAg
LTMxMyw2ICszMTMsMTAgQEANCj4+IDs7IEFsbCBxdWFkIGludGVnZXIgd2lkZW4tYWJsZSBtb2Rl
cy4NCj4+IChkZWZpbmVfbW9kZV9pdGVyYXRvciBWUVcgW1YxNlFJIFY4SEkgVjRTSV0pDQo+PiAN
Cj4+ICs7OyBRdWFkIGludGVnZXIgbW9kZXMgdGhhdCByZWFjaCA2NC1iaXQgZWxlbWVudHMgdGhy
b3VnaCBtb3JlIHRoYW4gb25lDQo+PiArOzsgcGFpcndpc2Ugd2lkZW5pbmcgc3RlcC4NCj4+ICso
ZGVmaW5lX21vZGVfaXRlcmF0b3IgVlFfQkggW1YxNlFJIFY4SEldKQ0KPj4gKw0KPj4gOzsgRG91
YmxlIHZlY3RvciBtb2RlcyBmb3IgY29tYmluZXMuDQo+PiAoZGVmaW5lX21vZGVfaXRlcmF0b3Ig
VkRDIFtWOFFJIFY0SEkgVjRCRiBWNEhGIFYyU0kgVjJTRiBESSBERl0pDQo+PiANCj4+IGRpZmYg
LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8xLmMNCj4+
IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvcHIxMjIwNjlfMS5jDQo+PiBpbmRl
eCBiMmY5NzMyNjFlYS4uZDk5YjU0OTNhZGUgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvdGVzdHN1aXRl
L2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8xLmMNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUv
Z2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzEuYw0KPj4gQEAgLTEwLDEyICsxMCw4IEBAIGlu
bGluZSBjaGFyIGNoYXJfYWJzKGNoYXIgaSkgew0KPj4gKiogZm9vX2ludDoNCj4+ICoqICAuLi4N
Cj4+ICoqICBzdWIgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2Yg0KPj4gLSoq
ICB6aXAxIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2YiwgdlswLTldKy4xNmINCj4+IC0qKiAgemlw
MiB2WzAtOV0rLjE2YiwgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiDQo+PiAtKiogIHVhZGR3IHZb
MC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNGgNCj4+IC0qKiAgdWFkZHcyIHZbMC05XSsu
NHMsIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+IC0qKiAgdWFkZHcgdlswLTldKy40cywgdlsw
LTldKy40cywgdlswLTldKy40aA0KPj4gLSoqICB1YWRkdzIgdlswLTldKy40cywgdlswLTldKy40
cywgdlswLTldKy44aA0KPj4gKyoqICB1YWRkbHAgdlswLTldKy44aCwgdlswLTldKy4xNmINCj4+
ICsqKiAgdWFkYWxwIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+ICoqICAuLi4NCj4+ICovDQo+
PiBpbnQgZm9vX2ludCh1bnNpZ25lZCBjaGFyICp4LCB1bnNpZ25lZCBjaGFyICogcmVzdHJpY3Qg
eSkgew0KPj4gQEAgLTI5LDggKzI1LDcgQEAgaW50IGZvb19pbnQodW5zaWduZWQgY2hhciAqeCwg
dW5zaWduZWQgY2hhciAqIHJlc3RyaWN0IHkpIHsNCj4+ICoqIGZvbzJfaW50Og0KPj4gKiogIC4u
Lg0KPj4gKiogIGFkZCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhoDQo+PiAtKiog
IHVhZGR3IHZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNGgNCj4+IC0qKiAgdWFkZHcy
IHZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuOGgNCj4+ICsqKiAgdWFkYWxwIHZbMC05
XSsuNHMsIHZbMC05XSsuOGgNCj4+ICoqICAuLi4NCj4+ICovDQo+PiBpbnQgZm9vMl9pbnQodW5z
aWduZWQgc2hvcnQgKngsIHVuc2lnbmVkIHNob3J0ICogcmVzdHJpY3QgeSkgew0KPj4gZGlmZiAt
LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYw0KPj4g
Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9wcjEyMjA2OV8zLmMNCj4+IGluZGV4
IDBlODMyYzQzMDMyLi5mMjlmYzJiMmVkNCAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUv
Z2NjLnRhcmdldC9hYXJjaDY0L3ByMTIyMDY5XzMuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n
Y2MudGFyZ2V0L2FhcmNoNjQvcHIxMjIwNjlfMy5jDQo+PiBAQCAtMjQsOCArMjQsNyBAQCBpbnQg
Zm9vX2ludCh1bnNpZ25lZCBjaGFyICp4LCB1bnNpZ25lZCBjaGFyICogcmVzdHJpY3QgeSkgew0K
Pj4gKiogZm9vMl9pbnQ6DQo+PiAqKiAgLi4uDQo+PiAqKiAgYWRkIHZbMC05XSsuOGgsIHZbMC05
XSsuOGgsIHZbMC05XSsuOGgNCj4+IC0qKiAgdWFkZHcgdlswLTldKy40cywgdlswLTldKy40cywg
dlswLTldKy40aA0KPj4gLSoqICB1YWRkdzIgdlswLTldKy40cywgdlswLTldKy40cywgdlswLTld
Ky44aA0KPj4gKyoqICB1YWRhbHAgdlswLTldKy40cywgdlswLTldKy44aA0KPj4gKiogIC4uLg0K
Pj4gKi8NCj4+IGludCBmb28yX2ludCh1bnNpZ25lZCBzaG9ydCAqeCwgdW5zaWduZWQgc2hvcnQg
KiByZXN0cmljdCB5KSB7DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0
L2FhcmNoNjQvc2FkZHctMS5jDQo+PiBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0
L3NhZGFscC0xLmMNCj4+IHNpbWlsYXJpdHkgaW5kZXggNzQlDQo+PiByZW5hbWUgZnJvbSBnY2Mv
dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zYWRkdy0xLmMNCj4+IHJlbmFtZSB0byBnY2Mv
dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zYWRhbHAtMS5jDQo+PiBpbmRleCBmODg3MTIw
OWI4YS4uNjFmOTYzM2YxYTAgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn
ZXQvYWFyY2g2NC9zYWRkdy0xLmMNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h
YXJjaDY0L3NhZGFscC0xLmMNCj4+IEBAIC0xNCw1ICsxNCw0IEBAIHQ2KGludCBsZW4sIHZvaWQg
KiBkdW1teSwgc2hvcnQgKiBfX3Jlc3RyaWN0IHgpDQo+PiAgIHJldHVybiByZXN1bHQ7DQo+PiB9
DQo+PiANCj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3IiB9IH0gKi8N
Cj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3MiIgfSB9ICovDQo+PiAr
LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcdHNhZGFscFx0dlswLTldK1wuNHMsIHZb
MC05XStcLjhofSB9IH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn
ZXQvYWFyY2g2NC9zYWRkdy0yLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo
NjQvc2FkYWxwLTIuYw0KPj4gc2ltaWxhcml0eSBpbmRleCA3NCUNCj4+IHJlbmFtZSBmcm9tIGdj
Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGR3LTIuYw0KPj4gcmVuYW1lIHRvIGdj
Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3NhZGFscC0yLmMNCj4+IGluZGV4IGI5ZmM0
NDJhMmY3Li44NzNmZGEyZTFlYSAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh
cmdldC9hYXJjaDY0L3NhZGR3LTIuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0
L2FhcmNoNjQvc2FkYWxwLTIuYw0KPj4gQEAgLTE0LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9p
ZCAqIGR1bW15LCBpbnQgKiBfX3Jlc3RyaWN0IHgpDQo+PiAgIHJldHVybiByZXN1bHQ7DQo+PiB9
DQo+PiANCj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3IiB9IH0gKi8N
Cj4+IC0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInNhZGR3MiIgfSB9ICovDQo+PiAr
LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyIHtcdHNhZGFscFx0dlswLTldK1wuMmQsIHZb
MC05XStcLjRzfSB9IH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn
ZXQvYWFyY2g2NC91YWRkdy0xLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo
NjQvdWFkYWxwLTEuYw0KPj4gc2ltaWxhcml0eSBpbmRleCA3NSUNCj4+IHJlbmFtZSBmcm9tIGdj
Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTEuYw0KPj4gcmVuYW1lIHRvIGdj
Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGFscC0xLmMNCj4+IGluZGV4IDE0ZGZm
ODdkN2YwLi5jNDAzNDM4NGFhZSAxMDA2NDQNCj4+IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh
cmdldC9hYXJjaDY0L3VhZGR3LTEuYw0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0
L2FhcmNoNjQvdWFkYWxwLTEuYw0KPj4gQEAgLTE0LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9p
ZCAqIGR1bW15LCB1bnNpZ25lZCBzaG9ydCAqIF9fcmVzdHJpY3QgeCkNCj4+ICAgcmV0dXJuIHJl
c3VsdDsNCj4+IH0NCj4+IA0KPj4gLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidWFk
ZHciIH0gfSAqLw0KPj4gLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidWFkZHcyIiB9
IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIge1x0dWFkYWxwXHR2WzAt
OV0rXC40cywgdlswLTldK1wuOGh9IH0gfSAqLw0KPj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp
dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTIuYw0KPj4gYi9nY2MvdGVzdHN1aXRlL2djYy50
YXJnZXQvYWFyY2g2NC91YWRhbHAtMi5jDQo+PiBzaW1pbGFyaXR5IGluZGV4IDc1JQ0KPj4gcmVu
YW1lIGZyb20gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkZHctMi5jDQo+PiBy
ZW5hbWUgdG8gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTIuYw0KPj4g
aW5kZXggNzlkMGQwOTRmYzMuLjM5NWQzNmM3YzAwIDEwMDY0NA0KPj4gLS0tIGEvZ2NjL3Rlc3Rz
dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkZHctMi5jDQo+PiArKysgYi9nY2MvdGVzdHN1aXRl
L2djYy50YXJnZXQvYWFyY2g2NC91YWRhbHAtMi5jDQo+PiBAQCAtMTQsNiArMTQsNSBAQCB0Nihp
bnQgbGVuLCB2b2lkICogZHVtbXksIHVuc2lnbmVkIHNob3J0ICogX19yZXN0cmljdCB4KQ0KPj4g
ICByZXR1cm4gcmVzdWx0Ow0KPj4gfQ0KPj4gDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz
ZW1ibGVyICJ1YWRkdyIgfSB9ICovDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy
ICJ1YWRkdzIiIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciB7XHR1
YWRhbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aH0gfSB9ICovDQo+PiANCj4+IGRpZmYgLS1n
aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC91YWRkdy0zLmMNCj4+IGIvZ2Nj
L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTMuYw0KPj4gc2ltaWxhcml0eSBp
bmRleCA3NCUNCj4+IHJlbmFtZSBmcm9tIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0
L3VhZGR3LTMuYw0KPj4gcmVuYW1lIHRvIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0
L3VhZGFscC0zLmMNCj4+IGluZGV4IDM5Y2JkNmI2Y2MyLi41ZmRiMTYzOWFiOCAxMDA2NDQNCj4+
IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3VhZGR3LTMuYw0KPj4gKysr
IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdWFkYWxwLTMuYw0KPj4gQEAgLTE0
LDUgKzE0LDQgQEAgdDYoaW50IGxlbiwgdm9pZCAqIGR1bW15LCBjaGFyICogX19yZXN0cmljdCB4
KQ0KPj4gICByZXR1cm4gcmVzdWx0Ow0KPj4gfQ0KPj4gDQo+PiAtLyogeyBkZy1maW5hbCB7IHNj
YW4tYXNzZW1ibGVyICJ1YWRkdyIgfSB9ICovDQo+PiAtLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz
ZW1ibGVyICJ1YWRkdzIiIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl
ciB7XHR1YWRhbHBcdHZbMC05XStcLjhoLCB2WzAtOV0rXC4xNmJ9IH0gfSAqLw0KPj4gZGlmZiAt
LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3dpZGVuX3N1bV9wYWlyd2lz
ZV8xLmMNCj4+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3Bh
aXJ3aXNlXzEuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAw
Li4wYWVjMGJmODFjOA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n
Y2MudGFyZ2V0L2FhcmNoNjQvd2lkZW5fc3VtX3BhaXJ3aXNlXzEuYw0KPj4gQEAgLTAsMCArMSwz
OSBAQA0KPj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+PiArLyogeyBkZy1vcHRpb25zICIt
TzMgLW1hcmNoPWFybXY4LWEgLW1hdXRvdmVjLXByZWZlcmVuY2U9YXNpbWQtb25seSAtLQ0KPj4g
cGFyYW0gdmVjdC1lcGlsb2d1ZXMtbm9tYXNrPTAiIH0gKi8NCj4+ICsNCj4+ICsvKiBXaWRlbmlu
ZyBzdW0gcmVkdWN0aW9ucyBzaG91bGQgdXNlIHRoZSBwYWlyd2lzZSB3aWRlbmluZyBhZGQgYW5k
DQo+PiArICAgYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMgcmF0aGVyIHRoYW4gYSBjaGFpbiBvZiBl
eHRlbnNpb25zIGZlZWRpbmcNCj4+ICsgICBbU1VdQUREVyBwYWlycy4gICovDQo+PiArDQo+PiAr
I2RlZmluZSBERUYoTkFNRSwgSVRZUEUsIE9UWVBFKSBcDQo+PiArICBPVFlQRSBOQU1FIChjb25z
dCBJVFlQRSAqYSwgbG9uZyBuKSBcDQo+PiArICB7IFwNCj4+ICsgICAgT1RZUEUgcyA9IDA7IFwN
Cj4+ICsgICAgZm9yIChsb25nIGkgPSAwOyBpIDwgbjsgaSsrKSBcDQo+PiArICAgICAgcyArPSBh
W2ldOyBcDQo+PiArICAgIHJldHVybiBzOyBcDQo+PiArICB9DQo+PiArDQo+PiArREVGIChzdW1f
dThfbCwgdW5zaWduZWQgY2hhciwgbG9uZykNCj4+ICtERUYgKHN1bV9pOF9sLCBzaWduZWQgY2hh
ciwgbG9uZykNCj4+ICtERUYgKHN1bV91MTZfbCwgdW5zaWduZWQgc2hvcnQsIGxvbmcpDQo+PiAr
REVGIChzdW1faTE2X2wsIHNob3J0LCBsb25nKQ0KPj4gK0RFRiAoc3VtX3UzMl9sLCB1bnNpZ25l
ZCBpbnQsIGxvbmcpDQo+PiArREVGIChzdW1faTMyX2wsIGludCwgbG9uZykNCj4+ICtERUYgKHN1
bV91OF9pLCB1bnNpZ25lZCBjaGFyLCBpbnQpDQo+PiArREVGIChzdW1faThfaSwgc2lnbmVkIGNo
YXIsIGludCkNCj4+ICtERUYgKHN1bV91MTZfaSwgdW5zaWduZWQgc2hvcnQsIGludCkNCj4+ICtE
RUYgKHN1bV9pMTZfaSwgc2hvcnQsIGludCkNCj4+ICsNCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh
bi1hc3NlbWJsZXItdGltZXMge1x0dWFkZGxwXHR2WzAtOV0rXC44aCwgdlswLTldK1wuMTZiXG59
DQo+PiAyIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7
XHRzYWRkbHBcdHZbMC05XStcLjhoLCB2WzAtOV0rXC4xNmJcbn0NCj4+IDIgfSB9ICovDQo+PiAr
LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHVhZGRscFx0dlswLTldK1wu
NHMsIHZbMC05XStcLjhoXG59IDINCj4+IH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2Fu
LWFzc2VtYmxlci10aW1lcyB7XHRzYWRkbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAy
DQo+PiB9IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0
dWFkYWxwXHR2WzAtOV0rXC4yZCwgdlswLTldK1wuNHNcbn0gMw0KPj4gfSB9ICovDQo+PiArLyog
eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHNhZGFscFx0dlswLTldK1wuMmQs
IHZbMC05XStcLjRzXG59IDMNCj4+IH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz
c2VtYmxlci10aW1lcyB7XHR1YWRhbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAyDQo+
PiB9IH0gKi8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0c2Fk
YWxwXHR2WzAtOV0rXC40cywgdlswLTldK1wuOGhcbn0gMg0KPj4gfSB9ICovDQo+PiArDQo+PiAr
LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHR1YWRkdzI/XHR9IH0gfSAqLw0K
Pj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge1x0c2FkZHcyP1x0fSB9IH0g
Ki8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdHppcDFcdH0gfSB9
ICovDQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvd2lk
ZW5fc3VtX3BhaXJ3aXNlXzIuYw0KPj4gYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2
NC93aWRlbl9zdW1fcGFpcndpc2VfMi5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5k
ZXggMDAwMDAwMDAwMDAuLjAxNTM3ZGVlYjlmDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9n
Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC93aWRlbl9zdW1fcGFpcndpc2VfMi5jDQo+
PiBAQCAtMCwwICsxLDI5IEBADQo+PiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4+ICsvKiB7
IGRnLW9wdGlvbnMgIi1PMyAtbWFyY2g9YXJtdjguMi1hK2RvdHByb2QgLW1hdXRvdmVjLQ0KPj4g
cHJlZmVyZW5jZT1hc2ltZC1vbmx5IC0tcGFyYW0gdmVjdC1lcGlsb2d1ZXMtbm9tYXNrPTAiIH0g
Ki8NCj4+ICsNCj4+ICsvKiBXaXRoIGRvdCBwcm9kdWN0IGEgNHggd2lkZW5pbmcgc3VtIHN0YXlz
IGEgc2luZ2xlIFtTVV1ET1QsIHdoaWxlIGENCj4+ICsgICBzdW0gaW50byA2NC1iaXQgZWxlbWVu
dHMgdXNlcyB0aGUgcGFpcndpc2Ugd2lkZW5pbmcgaW5zdHJ1Y3Rpb25zLiAgKi8NCj4+ICsNCj4+
ICtpbnQNCj4+ICtzdW1fdThfaSAoY29uc3QgdW5zaWduZWQgY2hhciAqYSwgbG9uZyBuKQ0KPj4g
K3sNCj4+ICsgIGludCBzID0gMDsNCj4+ICsgIGZvciAobG9uZyBpID0gMDsgaSA8IG47IGkrKykN
Cj4+ICsgICAgcyArPSBhW2ldOw0KPj4gKyAgcmV0dXJuIHM7DQo+PiArfQ0KPj4gKw0KPj4gK2xv
bmcNCj4+ICtzdW1fdThfbCAoY29uc3QgdW5zaWduZWQgY2hhciAqYSwgbG9uZyBuKQ0KPj4gK3sN
Cj4+ICsgIGxvbmcgcyA9IDA7DQo+PiArICBmb3IgKGxvbmcgaSA9IDA7IGkgPCBuOyBpKyspDQo+
PiArICAgIHMgKz0gYVtpXTsNCj4+ICsgIHJldHVybiBzOw0KPj4gK30NCj4+ICsNCj4+ICsvKiB7
IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWRvdFx0dlswLTldK1wuNHMsIHZb
MC05XStcLjE2YiwgdlswLQ0KPj4gOV0rXC4xNmJcbn0gMSB9IH0gKi8NCj4+ICsvKiB7IGRnLWZp
bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWFkZGxwXHR2WzAtOV0rXC44aCwgdlswLTld
K1wuMTZiXG59DQo+PiAxIH0gfSAqLw0KPj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl
ci10aW1lcyB7XHR1YWRkbHBcdHZbMC05XStcLjRzLCB2WzAtOV0rXC44aFxufSAxDQo+PiB9IH0g
Ki8NCj4+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0dWFkYWxwXHR2
WzAtOV0rXC4yZCwgdlswLTldK1wuNHNcbn0gMQ0KPj4gfSB9ICovDQo+PiArLyogeyBkZy1maW5h
bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHR1YWRkdzI/XHR9IH0gfSAqLw0KPj4gLS0NCj4+IDIu
NTAuMSAoQXBwbGUgR2l0LTE1NSkNCg0KDQo=