* [Qemu-devel] [RFC PATCH v3 0/9] Replication agent module
@ 2012-04-05 12:17 Ori Mamluk
0 siblings, 0 replies; only message in thread
From: Ori Mamluk @ 2012-04-05 12:17 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Roni Luxenberg, Stefan Hajnoczi, dlaor,
Anthony Liguori, Oded Kedem, Yair Kuszpet, Paolo Bonzini
[-- Attachment #1.1: Type: text/plain, Size: 3524 bytes --]
Replication agent patch version 3.
This patch contains multiple fixes for version v2 (v2 patch is attached).
Main changes:
· Move from native to qemu-thread library
· Move from natice to qemu-socket library
· Use QTAILQ
Also attached a document describing in high level the replication main
flows.
Description of the Repagent patch:
Repagent is a new block driver that allows an external replication system
to hook to the Qemu storage stack to replicate a volume of a VM.
This RFC patch adds the repagent client module to Qemu.
Documentation of the module role and API is in the patch at
replication/qemu-repagent.txt
In high level, the API is shaped like a filter-driver for the block layer -
following a discussion on the mailing list triggered by the first version
submitted.
The idea is to leave the specific applications out of the Qemu storage
logic by treating it as a filter hooking into the storage layer, rather
than being a feature of that layer.
The main motivation behind the module is to allow replication of VMs in a
virtualization environment like Ovirt.
To achieve this we need basic replication support in Qemu.
By default the build and use of this module is disabled. To activate it you
need to use a flag in ./configure and a commandline switch to qemu.
The module is not feature complete, I wanted to get approval for the basic
approach and interface first, and then complete the features.
Missing features:
* Dirty bitmap at the protected side
The protected volume side needs to persistently keep track
of 'pending' IOs.
I want to add a bitmap (can hook like another 'filter' with
the repagent), that will synchronously track IOs. And allow getting a list
of such IOs.
Without such a bitmap a failure of any component (rephub or
agent) will require reading the whole protected volume.
* Capture IOs at the recovery side
During fail-over or fail-over test, the repagent at the
recovery side needs to capture all IOs (reads and writes) done by the
fail-over VM
and answer them by passing them synchronously to the
Rephub. (See attached PDF for the full flow)
* Reporting of IO failures
TBD
* Sample Rephub
An application that along with Repagent is a full
replication solution.
* There is still much debugging code (including printfs) in the code. This
willnaturally go away is more mature versions.
Points and open issues:
* I don't have deep knowledge of the structure of the storage stack. I used
the "raw" format as an example to make "repagent" a
filter driver that passes-through most of the calls. Is it
the right way to do it?
* I didn't find a good way to tell the block layer that repagent filter
should be used. I currently use a temporary global flag - 'use_repagent'
It is set in main after parsing the commandline options,
and checked in block.c. I guess there should be a better way to convey this
option.
Tests I ran:
* I hooked a Qemu VM with Repagent to a full zerto replication solution
based on vmware, and was able to replicate and recover the VM on a remote
site.
* I wrote a stand-alone Rephub for actively reading the protected volume
and copying it - for test purposes.
Appreciate any feedback or suggestions.
Ori
[-- Attachment #1.2: Type: text/html, Size: 9142 bytes --]
[-- Attachment #2: Type: message/rfc822, Size: 62711 bytes --]
RnJvbTogIk9yaSBNYW1sdWsiIDxvbWFtbHVrQHplcnRvLmNvbT4NClRvOiA8cWVtdS1kZXZlbEBu
b25nbnUub3JnPg0KQ2M6ICInS2V2aW4gV29sZiciIDxrd29sZkByZWRoYXQuY29tPiwNCgk8ZGxh
b3JAcmVkaGF0LmNvbT4sDQoJIidBbnRob255IExpZ3VvcmknIiA8YW50aG9ueUBjb2RlbW9ua2V5
LndzPiwNCgkiJ1N0ZWZhbiBIYWpub2N6aSciIDxzdGVmYW5oYUBnbWFpbC5jb20+LA0KCSInUGFv
bG8gQm9uemluaSciIDxwYm9uemluaUByZWRoYXQuY29tPiwNCgkiJ1JvbmkgTHV4ZW5iZXJnJyIg
PHJsdXhlbmJlQHJlZGhhdC5jb20+LA0KCSJPZGVkIEtlZGVtIiA8b2RlZEB6ZXJ0by5jb20+LA0K
CSJZYWlyIEt1c3pwZXQiIDx5YWlya0B6ZXJ0by5jb20+DQpTdWJqZWN0OiBbUkZDIFBBVENIIHYy
XSBSZXBsaWNhdGlvbiBhZ2VudCBtb2R1bGUNCkRhdGU6IFN1biwgMSBBcHIgMjAxMiAxNTowNTo0
OCArMDMwMA0KTWVzc2FnZS1JRDogNzg0YWJjNzk2MzgzMTc1MWMzOTVjZGEwYmE0N2UwYjFAbWFp
bC5nbWFpbC5jb20NCk1JTUUtVmVyc2lvbjogMS4wDQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47
DQoJY2hhcnNldD0iVVMtQVNDSUkiDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0DQpY
LU1haWxlcjogTWljcm9zb2Z0IE91dGxvb2sgMTQuMA0KVGhyZWFkLUluZGV4OiBBYzBQL3JLazZI
MkYxNHNtVFBLNlBRZDR5VmZkVFE9PQ0KQ29udGVudC1MYW5ndWFnZTogaGUNCg0KUmVwYWdlbnQg
aXMgYSBuZXcgYmxvY2sgZHJpdmVyIHRoYXQgYWxsb3dzIGFuIGV4dGVybmFsIHJlcGxpY2F0aW9u
IHN5c3RlbQ0KdG8gaG9vayB0byB0aGUgUWVtdSBzdG9yYWdlIHN0YWNrIHRvIHJlcGxpY2F0ZSBh
IHZvbHVtZSBvZiBhIFZNLg0KVGhpcyBSRkMgcGF0Y2ggYWRkcyB0aGUgcmVwYWdlbnQgY2xpZW50
IG1vZHVsZSB0byBRZW11Lg0KDQpEb2N1bWVudGF0aW9uIG9mIHRoZSBtb2R1bGUgcm9sZSBhbmQg
QVBJIGlzIGluIHRoZSBwYXRjaCBhdA0KcmVwbGljYXRpb24vcWVtdS1yZXBhZ2VudC50eHQNCklu
IGhpZ2ggbGV2ZWwsIHRoZSBBUEkgaXMgc2hhcGVkIGxpa2UgYSBmaWx0ZXItZHJpdmVyIGZvciB0
aGUgYmxvY2sgbGF5ZXINCi0gZm9sbG93aW5nIGEgZGlzY3Vzc2lvbiBvbiB0aGUgbWFpbGluZyBs
aXN0IHRyaWdnZXJlZCBieSB0aGUgZmlyc3QNCnZlcnNpb24gc3VibWl0dGVkLg0KVGhlIGlkZWEg
aXMgdG8gbGVhdmUgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9ucyBvdXQgb2YgdGhlIFFlbXUgc3Rv
cmFnZQ0KbG9naWMgYnkgdHJlYXRpbmcgaXQgYXMgYSBmaWx0ZXIgaG9va2luZyBpbnRvIHRoZSBz
dG9yYWdlIGxheWVyLCByYXRoZXINCnRoYW4gYmVpbmcgYSBmZWF0dXJlIG9mIHRoYXQgbGF5ZXIu
DQoNClRoZSBtYWluIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBtb2R1bGUgaXMgdG8gYWxsb3cgcmVw
bGljYXRpb24gb2YgVk1zIGluIGENCnZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IGxpa2UgUmhl
dk0uDQpUbyBhY2hpZXZlIHRoaXMgd2UgbmVlZCBiYXNpYyByZXBsaWNhdGlvbiBzdXBwb3J0IGlu
IFFlbXUuDQoNCkJ5IGRlZmF1bHQgdGhlIGJ1aWxkIGFuZCB1c2Ugb2YgdGhpcyBtb2R1bGUgaXMg
ZGlzYWJsZWQuIFRvIGFjdGl2YXRlIGl0DQp5b3UgbmVlZCB0byB1c2UgYSBmbGFnIGluIC4vY29u
ZmlndXJlIGFuZCBhIGNvbW1hbmRsaW5lIHN3aXRjaCB0byBxZW11Lg0KDQpUaGUgbW9kdWxlIGlz
IG5vdCBmZWF0dXJlIGNvbXBsZXRlLCBJIHdhbnRlZCB0byBnZXQgYXBwcm92YWwgZm9yIHRoZSBi
YXNpYw0KYXBwcm9hY2ggYW5kIGludGVyZmFjZSBmaXJzdCwgYW5kIHRoZW4gY29tcGxldGUgdGhl
IGZlYXR1cmVzLg0KDQpNaXNzaW5nIGZlYXR1cmVzOg0KKiBEaXJ0eSBiaXRtYXAgYXQgdGhlIHBy
b3RlY3RlZCBzaWRlDQoJVGhlIHByb3RlY3RlZCB2b2x1bWUgc2lkZSBuZWVkcyB0byBwZXJzaXN0
ZW50bHkga2VlcCB0cmFjayBvZg0KJ3BlbmRpbmcnIElPcy4NCglJIHdhbnQgdG8gYWRkIGEgYml0
bWFwIChjYW4gaG9vayBsaWtlIGFub3RoZXIgJ2ZpbHRlcicgd2l0aCB0aGUNCnJlcGFnZW50KSwg
dGhhdCB3aWxsIHN5bmNocm9ub3VzbHkgdHJhY2sgSU9zLiBBbmQgYWxsb3cgZ2V0dGluZyBhIGxp
c3Qgb2YNCnN1Y2ggSU9zLg0KCVdpdGhvdXQgc3VjaCBhIGJpdG1hcCBhIGZhaWx1cmUgb2YgYW55
IGNvbXBvbmVudCAocmVwaHViIG9yIGFnZW50KQ0Kd2lsbCByZXF1aXJlIHJlYWRpbmcgdGhlIHdo
b2xlIHByb3RlY3RlZCB2b2x1bWUuDQoqIENhcHR1cmUgSU9zIGF0IHRoZSByZWNvdmVyeSBzaWRl
DQoJRHVyaW5nIGZhaWwtb3ZlciBvciBmYWlsLW92ZXIgdGVzdCwgdGhlIHJlcGFnZW50IGF0IHRo
ZSByZWNvdmVyeQ0Kc2lkZSBuZWVkcyB0byBjYXB0dXJlIGFsbCBJT3MgKHJlYWRzIGFuZCB3cml0
ZXMpIGRvbmUgYnkgdGhlIGZhaWwtb3ZlciBWTQ0KCWFuZCBhbnN3ZXIgdGhlbSBieSBwYXNzaW5n
IHRoZW0gc3luY2hyb25vdXNseSB0byB0aGUgVlJBLiANCiogUmVwb3J0aW5nIG9mIElPIGZhaWx1
cmVzDQoJVEJEDQoqIFNhbXBsZSBSZXBodWINCglBbiBhcHBsaWNhdGlvbiB0aGF0IGFsb25nIHdp
dGggUmVwYWdlbnQgaXMgYSBmdWxsIHJlcGxpY2F0aW9uDQpzb2x1dGlvbi4NCiogVGhlcmUgaXMg
c3RpbGwgbXVjaCBkZWJ1Z2dpbmcgY29kZSAoaW5jbHVkaW5nIHByaW50ZnMpIGluIHRoZSBjb2Rl
LiBUaGlzDQp3aWxsbmF0dXJhbGx5IGdvIGF3YXkgaXMgbW9yZSBtYXR1cmUgdmVyc2lvbnMuDQoN
ClRoaXMgaXMgdGhlIHNlY29uZCBzdWJtaXNzaW9uIG9mIHRoaXMgbW9kdWxlLiANCkNoYW5nZXMg
ZnJvbSB0aGUgZmlyc3QgcGF0Y2ggdmVyc2lvbjoNCiogQ2hhbmdlZCB0aGUgbW9kdWxlIHRvIGJl
IGEgYmxvY2sgZHJpdmVyIGluc3RlYWQgb2YgaW50ZWdyYXRpbmcgaXQgd2l0aA0KdGhlIGdlbmVy
aWMgYmxvY2sgbGF5ZXIgLSBmb3IgYSBmaWx0ZXItbGlrZSBBUEkuDQoqIFJlbW92ZWQgZGVkaWNh
dGVkIHRocmVhZCBmb3IgdGhlIFJlcGh1YiBzb2NrZXQgLSBub3cgdXNpbmcNCnFlbXVfc2V0X2Zk
X2hhbmRsZXIgaW5zdGVhZC4NCg0KUG9pbnRzIGFuZCBvcGVuIGlzc3VlczoNCiogSXQncyBhIGxv
dCBvZiBjb2RlIHNlbnQgaW4gYSBzaW5nbGUgcGF0Y2ggLSBJJ20gbm90IHN1cmUgaG93L2lmIHRv
DQpiZXR0ZXIgc3BsaXQgaXQgLSBJJ2xsIGdsYWRseSB0YWtlIGFueSBkaXJlY3Rpb25zIG9mIGhv
dyBpdCBzaG91bGQgYmUNCmRvbmUuDQoqIEkgZG9uJ3QgaGF2ZSBkZWVwIGtub3dsZWRnZSBvZiB0
aGUgc3RydWN0dXJlIG9mIHRoZSBzdG9yYWdlIHN0YWNrLiBJDQp1c2VkIHRoZSAicmF3IiBmb3Jt
YXQgYXMgYW4gZXhhbXBsZSB0byBtYWtlICJyZXBhZ2VudCIgYSANCglmaWx0ZXIgZHJpdmVyIHRo
YXQgcGFzc2VzLXRocm91Z2ggbW9zdCBvZiB0aGUgY2FsbHMuIElzIGl0IHRoZQ0KcmlnaHQgd2F5
IHRvIGRvIGl0Pw0KKiBJIGRpZG4ndCBmaW5kIGEgZ29vZCB3YXkgdG8gdGVsbCB0aGUgYmxvY2sg
bGF5ZXIgdGhhdCByZXBhZ2VudCBmaWx0ZXINCnNob3VsZCBiZSB1c2VkLiBJIGN1cnJlbnRseSB1
c2UgYSB0ZW1wb3JhcnkgZ2xvYmFsIGZsYWcgLSAndXNlX3JlcGFnZW50Jw0KCUl0IGlzIHNldCBp
biBtYWluIGFmdGVyIHBhcnNpbmcgdGhlIGNvbW1hbmRsaW5lIG9wdGlvbnMsIGFuZA0KY2hlY2tl
ZCBpbiBibG9jay5jLiBJIGd1ZXNzIHRoZXJlIHNob3VsZCBiZSBhIGJldHRlciB3YXkgdG8gY29u
dmV5IHRoaXMNCm9wdGlvbi4gDQoNClRlc3RzIEkgcmFuOg0KKiBJIGhvb2tlZCBhIFFlbXUgVk0g
d2l0aCBSZXBhZ2VudCB0byBhIGZ1bGwgemVydG8gcmVwbGljYXRpb24gc29sdXRpb24NCmJhc2Vk
IG9uIHZtd2FyZSwgYW5kIHdhcyBhYmxlIHRvIHJlcGxpY2F0ZSBhbmQgcmVjb3ZlciB0aGUgVk0g
b24gYSByZW1vdGUNCnNpdGUuDQoqIEkgd3JvdGUgYSBzdGFuZC1hbG9uZSBSZXBodWIgZm9yIGFj
dGl2ZWx5IHJlYWRpbmcgdGhlIHByb3RlY3RlZCB2b2x1bWUNCmFuZCBjb3B5aW5nIGl0IC0gZm9y
IHRlc3QgcHVycG9zZXMuDQoNCkFwcHJlY2lhdGUgYW55IGZlZWRiYWNrIG9yIHN1Z2dlc3Rpb25z
LiANClRoYW5rcywNCk9yaS4NCg0KRnJvbTogT3JpIE1hbWx1ayA8b3JpbUBvcmltLWZlZG9yYS4o
bm9uZSk+DQoNCkFkZGVkIHJlcGxpY2F0aW9uIGFnZW50IG1vZHVsZSB0byBRZW11DQoNCkFkZGVk
IGJ1aWxkIG9wdGlvbnMgdG8gLi9jb25maWd1cmU6ICAtLWVuYWJsZS1yZXBsaWNhdGlvbg0KLS1k
aXNhYmxlLXJlcGxpY2F0DQpBZGRlZCBhIGNvbW1hbmRsaW5lIG9wdGlvbiB0byBlbmFibGU6IC1y
ZXBhZ2VudCA8cmVwIGh1YiBJUD4NCkFkZGVkIHRoZSBtb2R1bGUgZmlsZXMgdW5kZXIgcmVwbGlj
YXRpb24uDQpBZGRlZCB0aGUgcmVwYWdlbnQgQVBJIHVzYWdlIGluIGJsb2NrLmMNCg0KU2lnbmVk
LW9mZi1ieTogT3JpIE1hbWx1ayA8b3JpbUB6ZXJ0by5jb20+DQotLS0NCiBNYWtlZmlsZSAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0NCiBNYWtlZmlsZS5vYmpzICAgICAgICAgICAg
ICAgICAgICB8ICAgIDYgKw0KIGJsb2NrLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0
NCArKysrKy0NCiBibG9jay9yZXBhZ2VudC9xZW11LXJlcGFnZW50LnR4dCB8ICAgNzMgKysrKysr
KysNCiBibG9jay9yZXBhZ2VudC9yZXBhZ2VudC5jICAgICAgICB8ICAzNTUNCisrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrDQogYmxvY2svcmVwYWdlbnQvcmVwYWdlbnQuaCAg
ICAgICAgfCAgIDUyICsrKysrKw0KIGJsb2NrL3JlcGFnZW50L3JlcGFnZW50X2NsaWVudC5jIHwg
IDE2MiArKysrKysrKysrKysrKysrKw0KIGJsb2NrL3JlcGFnZW50L3JlcGFnZW50X2NsaWVudC5o
IHwgICAzNiArKysrDQogYmxvY2svcmVwYWdlbnQvcmVwYWdlbnRfZHJ2LmMgICAgfCAgMTc3ICsr
KysrKysrKysrKysrKysrKysNCiBibG9jay9yZXBhZ2VudC9yZXBjbWQuaCAgICAgICAgICB8ICAg
NTkgKysrKysrKw0KIGJsb2NrL3JlcGFnZW50L3JlcGNtZF9saXN0ZW5lci5jIHwgIDE3MyArKysr
KysrKysrKysrKysrKysNCiBibG9jay9yZXBhZ2VudC9yZXBjbWRfbGlzdGVuZXIuaCB8ICAgMzQg
KysrKw0KIGJsb2NrL3JlcGFnZW50L3JlcGh1Yl9jbWRzLmggICAgIHwgIDE1NCArKysrKysrKysr
KysrKysrDQogYmxvY2svcmVwYWdlbnQvcmVwaHViX2RlZnMuaCAgICAgfCAgIDQwICsrKysrDQog
YmxvY2tkZXYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsNCiBjb25maWd1cmUgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKysNCiBxZW11LW9wdGlvbnMuaHggICAgICAgICAg
ICAgICAgICB8ICAgIDYgKw0KIHZsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
MiArKw0KIDE4IGZpbGVzIGNoYW5nZWQsIDEzOTYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo
LSkNCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IE1ha2VmaWxlLm9ianMNCiBjcmVhdGUg
bW9kZSAxMDA2NDQgYmxvY2svcmVwYWdlbnQvcWVtdS1yZXBhZ2VudC50eHQNCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgYmxvY2svcmVwYWdlbnQvcmVwYWdlbnQuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBi
bG9jay9yZXBhZ2VudC9yZXBhZ2VudC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFn
ZW50L3JlcGFnZW50X2NsaWVudC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50
L3JlcGFnZW50X2NsaWVudC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50L3Jl
cGFnZW50X2Rydi5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50L3JlcGNtZC5o
DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50L3JlcGNtZF9saXN0ZW5lci5jDQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50L3JlcGNtZF9saXN0ZW5lci5oDQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGJsb2NrL3JlcGFnZW50L3JlcGh1Yl9jbWRzLmgNCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgYmxvY2svcmVwYWdlbnQvcmVwaHViX2RlZnMuaA0KIG1vZGUgY2hhbmdlIDEwMDY0
NCA9PiAxMDA3NTUgcWVtdS1vcHRpb25zLmh4DQoNCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01h
a2VmaWxlDQppbmRleCA0OWM3NzViLi5mNzk2NmY4IDEwMDY0NA0KLS0tIGEvTWFrZWZpbGUNCisr
KyBiL01ha2VmaWxlDQpAQCAtMjI0LDYgKzIyNCw3IEBAIGNsZWFuOg0KIAlybSAtZiAkKEdFTkVS
QVRFRF9TT1VSQ0VTKQ0KIAlybSAtcmYgJChxYXBpLWRpcikNCiAJJChNQUtFKSAtQyB0ZXN0cy90
Y2cgY2xlYW4NCisJcm0gLWYgYmxvY2svcmVwYWdlbnQvKi57byxkfQ0KIAlmb3IgZCBpbiAkKEFM
TF9TVUJESVJTKSAkKFFFTVVMSUJTKSBsaWJjYWNhcmQ7IGRvIFwNCiAJaWYgdGVzdCAtZCAkJGQ7
IHRoZW4gJChNQUtFKSAtQyAkJGQgJEAgfHwgZXhpdCAxOyBmaTsgXA0KIAlybSAtZiAkJGQvcWVt
dS1vcHRpb25zLmRlZjsgXA0KQEAgLTM5MCw0ICszOTEsNCBAQCB0YXI6DQogCXJtIC1yZiAvdG1w
LyQoRklMRSkNCiANCiAjIEluY2x1ZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZGVwZW5kZW5j
eSBmaWxlcw0KLS1pbmNsdWRlICQod2lsZGNhcmQgKi5kIGF1ZGlvLyouZCBzbGlycC8qLmQgYmxv
Y2svKi5kIG5ldC8qLmQgdWkvKi5kDQpxYXBpLyouZCBxZ2EvKi5kKQ0KKy1pbmNsdWRlICQod2ls
ZGNhcmQgKi5kIGF1ZGlvLyouZCBzbGlycC8qLmQgYmxvY2svKi5kIG5ldC8qLmQgdWkvKi5kDQpx
YXBpLyouZCBxZ2EvKi5kIGJsb2NrL3JlcGFnZW50LyouZCkNCmRpZmYgLS1naXQgYS9NYWtlZmls
ZS5vYmpzIGIvTWFrZWZpbGUub2Jqcw0Kb2xkIG1vZGUgMTAwNjQ0DQpuZXcgbW9kZSAxMDA3NTUN
CmluZGV4IGIzOWQ3NmMuLjM2MTY1YWUNCi0tLSBhL01ha2VmaWxlLm9ianMNCisrKyBiL01ha2Vm
aWxlLm9ianMNCkBAIC0zMCw2ICszMCwxMSBAQCBibG9jay1vYmoteSArPSAkKGNvcm91dGluZS1v
YmoteSkgJChxb2JqZWN0LW9iai15KQ0KJCh2ZXJzaW9uLW9iai15KQ0KIGJsb2NrLW9iai0kKENP
TkZJR19QT1NJWCkgKz0gcG9zaXgtYWlvLWNvbXBhdC5vDQogYmxvY2stb2JqLSQoQ09ORklHX0xJ
TlVYX0FJTykgKz0gbGludXgtYWlvLm8NCiANCisjIFJlcGxpY2F0aW9uIGFnZW50IGJsb2NrIGRy
aXZlciAtIHJlcGFnZW50DQorcmVwYWdlbnQtbmVzdGVkLXkgPSByZXBhZ2VudF9jbGllbnQubyAg
cmVwYWdlbnQubyAgcmVwY21kX2xpc3RlbmVyLm8NCnJlcGFnZW50X2Rydi5vDQorcmVwYWdlbnQt
b2JqLXkgPSAkKGFkZHByZWZpeCBibG9jay9yZXBhZ2VudC8sICQocmVwYWdlbnQtbmVzdGVkLXkp
KQ0KK2Jsb2NrLW9iai15ICs9ICQocmVwYWdlbnQtb2JqLXkpDQorDQogYmxvY2stbmVzdGVkLXkg
Kz0gcmF3Lm8gY293Lm8gcWNvdy5vIHZkaS5vIHZtZGsubyBjbG9vcC5vIGRtZy5vIGJvY2hzLm8N
CnZwYy5vIHZ2ZmF0Lm8NCiBibG9jay1uZXN0ZWQteSArPSBxY293Mi5vIHFjb3cyLXJlZmNvdW50
Lm8gcWNvdzItY2x1c3Rlci5vDQpxY293Mi1zbmFwc2hvdC5vIHFjb3cyLWNhY2hlLm8NCiBibG9j
ay1uZXN0ZWQteSArPSBxZWQubyBxZWQtZ2VuY2IubyBxZWQtbDItY2FjaGUubyBxZWQtdGFibGUu
bw0KcWVkLWNsdXN0ZXIubw0KQEAgLTc1LDYgKzgwLDcgQEAgZnNkZXYtb2JqLSQoQ09ORklHX1ZJ
UlRGUykgKz0gJChhZGRwcmVmaXggZnNkZXYvLA0KJChmc2Rldi1uZXN0ZWQteSkpDQogIyBzaW5n
bGUgUUVNVSBleGVjdXRhYmxlIHNob3VsZCBzdXBwb3J0IGFsbCBDUFVzIGFuZCBtYWNoaW5lcy4N
CiANCiBjb21tb24tb2JqLXkgPSAkKGJsb2NrLW9iai15KSBibG9ja2Rldi5vDQorY29tbW9uLW9i
ai15ICs9ICQocmVwYWdlbnQtb2JqLSQoQ09ORklHX1JFUEFHRU5UKSkNCiBjb21tb24tb2JqLXkg
Kz0gJChuZXQtb2JqLXkpDQogY29tbW9uLW9iai15ICs9ICQocW9iamVjdC1vYmoteSkNCiBjb21t
b24tb2JqLSQoQ09ORklHX0xJTlVYKSArPSAkKGZzZGV2LW9iai0kKENPTkZJR19MSU5VWCkpDQpk
aWZmIC0tZ2l0IGEvYmxvY2suYyBiL2Jsb2NrLmMNCmluZGV4IDUyZmZlMTQuLjhlMTFjMDMgMTAw
NjQ0DQotLS0gYS9ibG9jay5jDQorKysgYi9ibG9jay5jDQpAQCAtMzIsNiArMzIsMTAgQEANCiAj
aW5jbHVkZSAicW1wLWNvbW1hbmRzLmgiDQogI2luY2x1ZGUgInFlbXUtdGltZXIuaCINCiANCisj
aWZkZWYgQ09ORklHX1JFUEFHRU5UDQorI2luY2x1ZGUgImJsb2NrL3JlcGFnZW50L3JlcGFnZW50
LmgiDQorI2VuZGlmDQorDQogI2lmZGVmIENPTkZJR19CU0QNCiAjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+DQogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQpAQCAtNTMsNiArNTcsNyBAQCB0eXBlZGVmIGVu
dW0gew0KICAgICBCRFJWX1JFUV9aRVJPX1dSSVRFICAgPSAweDIsDQogfSBCZHJ2UmVxdWVzdEZs
YWdzOw0KIA0KKw0KIHN0YXRpYyB2b2lkIGJkcnZfZGV2X2NoYW5nZV9tZWRpYV9jYihCbG9ja0Ry
aXZlclN0YXRlICpicywgYm9vbCBsb2FkKTsNCiBzdGF0aWMgQmxvY2tEcml2ZXJBSU9DQiAqYmRy
dl9haW9fcmVhZHZfZW0oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsDQogICAgICAgICBpbnQ2NF90IHNl
Y3Rvcl9udW0sIFFFTVVJT1ZlY3RvciAqcWlvdiwgaW50IG5iX3NlY3RvcnMsDQpAQCAtMTAwLDYg
KzEwNSw5IEBAIHN0YXRpYyBCbG9ja0RyaXZlclN0YXRlICpic19zbmFwc2hvdHM7DQogLyogSWYg
bm9uLXplcm8sIHVzZSBvbmx5IHdoaXRlbGlzdGVkIGJsb2NrIGRyaXZlcnMgKi8NCiBzdGF0aWMg
aW50IHVzZV9iZHJ2X3doaXRlbGlzdDsNCiANCisvKiBvcmltIHRlbXBvcmFyeSAqLw0KK2ludCB1
c2VfcmVwYWdlbnQ7DQorDQogI2lmZGVmIF9XSU4zMg0KIHN0YXRpYyBpbnQgaXNfd2luZG93c19k
cml2ZV9wcmVmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUpDQogew0KQEAgLTY4NSw2ICs2OTMsMTIg
QEAgaW50IGJkcnZfb3BlbihCbG9ja0RyaXZlclN0YXRlICpicywgY29uc3QgY2hhcg0KKmZpbGVu
YW1lLCBpbnQgZmxhZ3MsDQogICAgIGludCByZXQ7DQogICAgIGNoYXIgdG1wX2ZpbGVuYW1lW1BB
VEhfTUFYXTsNCiANCisgICAgaWYgKHVzZV9yZXBhZ2VudCAmJiBicy0+ZGV2aWNlX25hbWVbMF0g
IT0gJ1wwJyAmJiBzdHJjbXAoDQorICAgICAgICAgICAgYnMtPmRldmljZV9uYW1lLCAicGZsYXNo
MCIpICE9IDApIHsNCisgICAgICAgIEJsb2NrRHJpdmVyICpiZHJ2X3JlcGFnZW50ID0gYmRydl9m
aW5kX2Zvcm1hdCgicmVwYWdlbnQiKTsNCisgICAgICAgIGRydiA9IGJkcnZfcmVwYWdlbnQ7DQor
ICAgIH0NCisNCiAgICAgaWYgKGZsYWdzICYgQkRSVl9PX1NOQVBTSE9UKSB7DQogICAgICAgICBC
bG9ja0RyaXZlclN0YXRlICpiczE7DQogICAgICAgICBpbnQ2NF90IHRvdGFsX3NpemU7DQpAQCAt
NzQ5LDYgKzc2Myw5IEBAIGludCBiZHJ2X29wZW4oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGNvbnN0
IGNoYXINCipmaWxlbmFtZSwgaW50IGZsYWdzLA0KICAgICAgICAgZ290byB1bmxpbmtfYW5kX2Zh
aWw7DQogICAgIH0NCiANCisjaWZkZWYgQ09ORklHX1JFUEFHRU5UDQorLyogICAgcmVwYWdlbnRf
cmVnaXN0ZXJfZHJpdmUoZmlsZW5hbWUsICBicyk7ICovDQorI2VuZGlmDQogICAgIC8qIE9wZW4g
dGhlIGltYWdlICovDQogICAgIHJldCA9IGJkcnZfb3Blbl9jb21tb24oYnMsIGZpbGVuYW1lLCBm
bGFncywgZHJ2KTsNCiAgICAgaWYgKHJldCA8IDApIHsNCkBAIC0xNDY5LDYgKzE0ODYsMTMgQEAg
c3RhdGljIGludCBiZHJ2X3J3X2NvKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90DQpzZWN0
b3JfbnVtLCB1aW50OF90ICpidWYsDQogICAgICAgICAgICAgcWVtdV9haW9fd2FpdCgpOw0KICAg
ICAgICAgfQ0KICAgICB9DQorICAgIC8qIG9yaW0gdG9kbyByZW1vdmUgKi8NCisgICAgcHJpbnRm
KCJJTyBkb25lLiBpc193cml0ZSAlZCBzZWMgJWxsZCBzaXplICVkICIsIGlzX3dyaXRlLA0KKyAg
ICAgICAgICAgIChsb25nIGxvbmcgaW50KSBzZWN0b3JfbnVtLCBuYl9zZWN0b3JzKTsNCisgICAg
aWYgKGJzLT5kcnYgIT0gTlVMTCkgew0KKyAgICAgICAgcHJpbnRmKCJEcnYgJXMsICIsIGJzLT5k
cnYtPmZvcm1hdF9uYW1lKTsNCisgICAgfQ0KKyAgICBwcmludGYoImZpbGUgJXMsIHJldCAlZFxu
IiwgYnMtPmZpbGVuYW1lLCByd2NvLnJldCk7DQogICAgIHJldHVybiByd2NvLnJldDsNCiB9DQog
DQpAQCAtMTg0Miw2ICsxODY2LDE4IEBAIHN0YXRpYyBpbnQgY29yb3V0aW5lX2ZuDQpiZHJ2X2Nv
X2RvX3dyaXRldihCbG9ja0RyaXZlclN0YXRlICpicywNCiAgICAgICAgIHJldCA9IGRydi0+YmRy
dl9jb193cml0ZXYoYnMsIHNlY3Rvcl9udW0sIG5iX3NlY3RvcnMsIHFpb3YpOw0KICAgICB9DQog
DQorDQorI2lmZGVmIENPTkZJR19SRVBBR0VOVA0KKyAgICBpZiAoYnMtPmRldmljZV9uYW1lWzBd
ICE9ICdcMCcpIHsNCisgICAgICAgIC8qIFdlIHNwbGl0IHRoZSBJTyBvbmx5IGF0IHRoZSBoaWdo
ZXN0IHN0YWNrIGRyaXZlciBsYXllci4NCisgICAgICAgICAgIEN1cnJlbnRseSB3ZSBrbm93IHRo
YXQgYnkgY2hlY2tpbmcgZGV2aWNlX25hbWUgLSBvbmx5DQorICAgICAgICAgICBoaWdoZXN0IGxl
dmVsIChjbG9zZXN0IHRvIHRoZSBndWVzdCkgaGFzIHRoYXQgbmFtZS4NCisgICAgICAgICAgICov
DQorLyogICAgICAgICAgIHJlcGFnZW50X2hhbmRsZV9wcm90ZWN0ZWRfd3JpdGUoYnMsIHNlY3Rv
cl9udW0sDQorICAgICAgICAgICAgICAgIG5iX3NlY3RvcnMsIHFpb3YsIHJldCk7DQorKi8NCisg
ICAgfQ0KKyNlbmRpZg0KICAgICBpZiAoYnMtPmRpcnR5X2JpdG1hcCkgew0KICAgICAgICAgc2V0
X2RpcnR5X2JpdG1hcChicywgc2VjdG9yX251bSwgbmJfc2VjdG9ycywgMSk7DQogICAgIH0NCkBA
IC0xOTE5LDE2ICsxOTU1LDIwIEBAIGludDY0X3QNCmJkcnZfZ2V0X2FsbG9jYXRlZF9maWxlX3Np
emUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpDQogICovDQogaW50NjRfdCBiZHJ2X2dldGxlbmd0aChC
bG9ja0RyaXZlclN0YXRlICpicykNCiB7DQorICAgIGludDY0X3QgcmV0ID0gMDsNCiAgICAgQmxv
Y2tEcml2ZXIgKmRydiA9IGJzLT5kcnY7DQogICAgIGlmICghZHJ2KQ0KICAgICAgICAgcmV0dXJu
IC1FTk9NRURJVU07DQogDQorICAgIHJldCA9IGJzLT50b3RhbF9zZWN0b3JzICogQkRSVl9TRUNU
T1JfU0laRTsNCiAgICAgaWYgKGJzLT5ncm93YWJsZSB8fCBiZHJ2X2Rldl9oYXNfcmVtb3ZhYmxl
X21lZGlhKGJzKSkgew0KICAgICAgICAgaWYgKGRydi0+YmRydl9nZXRsZW5ndGgpIHsNCi0gICAg
ICAgICAgICByZXR1cm4gZHJ2LT5iZHJ2X2dldGxlbmd0aChicyk7DQorICAgICAgICAgICAgcmV0
ID0gZHJ2LT5iZHJ2X2dldGxlbmd0aChicyk7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgcmV0
dXJuIGJzLT50b3RhbF9zZWN0b3JzICogQkRSVl9TRUNUT1JfU0laRTsNCisgICAgLyogb3JpbSB0
b2RvIHJlbW92ZSAqLw0KKyAgICBwcmludGYoImJkcnZfZ2V0bGVuZ3RoIHJldHVybmVkICVkIiwg
KGludClyZXQpOw0KKyAgICByZXR1cm4gcmV0Ow0KIH0NCiANCiAvKiByZXR1cm4gMCBhcyBudW1i
ZXIgb2Ygc2VjdG9ycyBpZiBubyBkZXZpY2UgcHJlc2VudCBvciBlcnJvciAqLw0KZGlmZiAtLWdp
dCBhL2Jsb2NrL3JlcGFnZW50L3FlbXUtcmVwYWdlbnQudHh0DQpiL2Jsb2NrL3JlcGFnZW50L3Fl
bXUtcmVwYWdlbnQudHh0DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZjhk
ZWYzZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvYmxvY2svcmVwYWdlbnQvcWVtdS1yZXBhZ2VudC50
eHQNCkBAIC0wLDAgKzEsNzMgQEANCisgICAgcmVwYWdlbnQgLSByZXBsaWNhdGlvbiBhZ2VudCAt
IGEgUWVtdSBtb2R1bGUgZm9yIGVuYWJsaW5nIGNvbnRpbnVvdXMNCmFzeW5jIHJlcGxpY2F0aW9u
IG9mIFZNIHZvbHVtZXMNCisNCitJbnRyb2R1Y3Rpb24NCisgICAgVGhpcyBkb2N1bWVudCBkZXNj
cmliZXMgYSBmZWF0dXJlIGluIFFlbXUgLSBhIHJlcGxpY2F0aW9uIGFnZW50DQoobmFtZWQgUmVw
YWdlbnQpLg0KKyAgICBUaGUgUmVwYWdlbnQgaXMgYSBuZXcgbW9kdWxlIHRoYXQgZXhwb3NlcyBh
biBBUEkgdG8gYW4gZXh0ZXJuYWwNCnJlcGxpY2F0aW9uIHN5c3RlbSAoQUtBIFJlcGh1YikuDQor
ICAgIFRoaXMgQVBJIGFsbG93cyBhIFJlcGh1YiB0byBjb21tdW5pY2F0ZSB3aXRoIGEgUWVtdSBW
TSBhbmQNCmNvbnRpbnVvdXNseSByZXBsaWNhdGUgaXRzIHZvbHVtZXMuDQorICAgIFRoZSBpbWxl
bWVudGF0aW9uIG9mIGEgUmVwaHViIGlzIG91dHNpZGUgb2YgdGhlIHNjb3BlIG9mIHRoaXMNCmRv
Y3VtZW50LiBUaGVyZSBtYXkgYmUgc2V2ZXJhbCB2YXJpb3VzIFJlcGh1Yg0KKyAgICBpbXBsZW5l
dGF0aW9ucyB1c2luZyB0aGUgc2FtZSByZXBhZ2VudCBpbiBRZW11Lg0KKyAgICBUaGUgUmVwYWdl
bnQgaXMgc3RvcmFnZSBkcml2ZXIgdGhhdCBhY3RzIGxpa2UgYSBmaWx0ZXIgZHJpdmVyLg0KKyAg
ICBJdCBjYW4gYmUgcmVnYXJkZWQgYXMgYSAncGx1Z2luJyB0aGF0IGlzIGFjdGl2YXRlZCB3aGVu
IHRoZQ0KbWFuYWdlbWVudCBzeXN0ZW0gZW5hYmxlcyByZXBsaWNhdGlvbi4NCisNCitNYWluIGZl
YXR1cmUgb2YgUmVwYWdlbnQNCisgICAgUmVwYWdlbnQgaGFzIHRoZSBmb2xsb3dpbmcgbWFpbiBm
ZWF0dXJlczoNCisgICAgKiBSZXBvcnQgdm9sdW1lcyAtIHJlcG9ydCBhIGxpc3Qgb2YgYWxsIHZv
bHVtZXMgaW4gYSBWTSB0byB0aGUNClJlcGh1Yi4NCisgICAgKiBNaXJyb3Igd3JpdGVzIC0gUmVw
b3J0IHdyaXRlcyB0byBhIHZvbHVtZSAtIHNlbmQgYWxsIHdyaXRlcyBtYWRlIHRvDQphIHByb3Rl
Y3RlZCB2b2x1bWUgdG8gdGhlIFJlcGh1Yi4NCisgICAgICAgIFRoZSByZXBvcnRpbmcgb2YgYW4g
SU8gaXMgYXN5bmNyb251b3VzIC0gaS5lLiB0aGUgSU8gaXMgbm90DQpkZWxheWVkIGJ5IHRoZSBS
ZXBhZ2VudCB0byBnZXQgYW55IGFja25vd2xlZGdlbWVudCBmcm9tIHRoZSBSZXBodWIuDQorICAg
ICAgICBJdCBpcyBvbmx5IGNvcGllZCB0byB0aGUgUmVwaHViLg0KKyAgICAqIFJlbW90ZSBJTyAt
IFJlYWQvd3JpdGUgYSAgdm9sdW1lIC0gYWxsb3dzIHRoZSBSZXBodWIgdG8gcmVhZCBhDQpwcm90
ZWN0ZWQgdm9sdW1lLCB0byBlbmFibGUgdGhlIHByb3RlY3RlZCBodWIgdG8gc3luY3Jvbml6ZQ0K
KyAgICAgICB0aGUgY29udGVudCBvZiBhIHByb3RlY3RlZCB2b2x1bWUuDQorICAgICAgIEFsc28g
dXNlZCB0byByZWFkL3dyaXRlIHRvIGEgcmVjb3Zlcnkgdm9sdW1lIC0gdGhlIHJlcGxpY2Egb2Yg
YQ0KcHJvdGVjdGVkIHZvbHVtZS4NCisNCitEZXNjcmlwdGlvbiBvZiB0aGUgUmVwYWdlbnQgbW9k
dWxlDQorDQorQnVpbGQgYW5kIHJ1biBvcHRpb25zDQorICAgIE5ldyBjb25maWd1cmUgb3B0aW9u
OiAtLWVuYWJsZS1yZXBhZ2VudA0KKyAgICBOZXcgY29tbWFuZCBsaW5lIG9wdGlvbjoNCisgICAg
LXJlcGFnZW50IFtodWIgSVAvbmFtZV0NCisgICAgICAgICAgICAgICAgICAgIEVuYWJsZSByZXBs
aWNhdGlvbiBzdXBwb3J0IGZvciBkaXNrcw0KKyAgICAgICAgICAgICAgICAgICAgaHViIGlzIHRo
ZSBpcCBvciBuYW1lIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgdGhlDQpyZXBsaWNhdGlvbiBodWIu
DQorDQorTW9kdWxlIEFQSXMNCisgICAgVGhlIFJlcGFnZW50IG1vZHVsZSBpbnRlcmZhY2VzIHR3
byBtYWluIGNvbXBvbmVudHM6DQorICAgIDEuIFRoZSBSZXBodWIgLSBBbiBleHRlcm5hbCBBUEkg
YmFzZWQgb24gc29ja2V0IG1lc3NhZ2VzDQorICAgICAgICAgICBTZWUgZGV0YWlsZWQgY29tbWVu
dHMgYWJvdXQgZWFjaCBtZXNzYWdlIGluIHJlcGh1Yl9jbWRzLmgNCisgICAgMi4gVGhlIGdlbmVy
aWMgYmxvY2sgbGF5ZXItIGJsb2NrLmMNCisgICAgICAgIFJlcGFnZW50IGlzIGEgYmxvY2sgZHJp
dmVyLiBNb3N0IG9mIHRoZSBibG9jayBkcml2ZXIgZnVuY3Rpb25zDQphcmUganVzdCBhIHBhc3Mt
dGhyb3VnaA0KKyAgICAgICAgdG8gdGhlIG5leHQgZHJpdmVyLg0KKyAgICAgICAgV3JpdGVzIGFy
ZSBtaXJyb3JzIHRvIHRoZSBodWIgZm9yIHJlcGxpY2F0aW9uDQorICAgICAgICBPcGVuIGZ1bmN0
aW9uIGlzIHVzZWQgZm9yIHJlZ2lzdGVyaW5nIGVhY2ggdm9sdW1lIGluIFJlcGFnZW50Lg0KKw0K
Kw0KK0dlbmVyYWwgZGVzY3JpcHRpb24gb2YgYSBSZXBodWIgIC0gYSByZXBsaWNhdGlvbiBzeXN0
ZW0gdGhlIHJlcGFnZW50DQpjb25uZWN0cyB0bw0KKyAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVz
IGluIGhpZ2ggbGV2ZWwgYSBzYW1wbGUgUmVwaHViIC0gYSByZXBsaWNhdGlvbg0Kc3lzdGVtIHRo
YXQgdXNlcyB0aGUgcmVwYWdlbnQgQVBJDQorICAgIHRvIHJlcGxpY2F0ZSBkaXNrcy4NCisgICAg
SXQgZGVzY3JpYmVzIGEgc2ltcGxlIFJlcGh1YiB0aGF0IGNvbW50aW51b3VzbHkgbWFpbnRhaW5z
IGEgbWlycm9yIG9mDQp0aGUgdm9sdW1lcyBvZiBhIFZNLg0KKw0KKyAgICBTYXkgd2UgaGF2ZSBh
IFZNIHdlIHdhbnQgdG8gcHJvdGVjdCAtIGNhbGwgaXQgUFZNLCBzYXkgaXQgaGFzIDINCnZvbHVt
ZXMgLSBWMSwgVjIuDQorICAgIE91ciBSZXBodWIgaXMgY2FsbGVkIFNpbmdsZVJlcGh1YiAtIGEg
UmVwaHViIHByb3RlY3RpbmcgYSBzaW5nbGUgVk0uDQorDQorICAgIFByZXBhcmF0aW9ucw0KKyAg
ICAxLiBUaGUgdXNlciBjaG9vc2VzIGEgaG9zdCB0byBydWIgU2luZ2xlUmVwaHViIC0gYSBkaWZm
ZXJlbnQgaG9zdA0KdGhhbiBQVk0sIGNhbGwgaXQgSG9zdDINCisgICAgMi4gVGhlIHVzZXIgY3Jl
YXRlcyB0d28gdm9sdW1lcyBvbiBIb3N0MiAtIHNhbWUgc2l6ZXMgb2YgVjEgYW5kIFYyLA0KY2Fs
bCB0aGVtIFYxUiAoVjEgcmVjb3ZlcnkpIGFuZCBWMlIuDQorICAgIDMuIFRoZSB1c2VyIHJ1bnMg
U2luZ2xlUmVwaHViIHByb2Nlc3Mgb24gSG9zdDIsIGFuZCBnaXZlcyBWMVIgYW5kIFYyUg0KYXMg
Y29tbWFuZCBsaW5lIGFyZ3VtZW50cy4NCisgICAgICAgIEZyb20gbm93IG9uIFNpbmdsZVJlcGh1
YiB3YWl0cyBmb3IgdGhlIHByb3RlY3RlZCBWTSByZXBhZ2VudCB0bw0KY29ubmVjdC4NCisgICAg
NC4gVGhlIHVzZXIgcnVucyB0aGUgcHJvdGVjdGVkIFZNIFBWTSAtIGFuZCB1c2VzIHRoZSBzd2l0
Y2ggLXJlcGFnZW50DQo8SG9zdDIgSVA+Lg0KKw0KKyAgICBSdW50aW1lDQorICAgIDEuIFRoZSBy
ZXBhZ2VudCBtb2R1bGUgY29ubmVjdHMgdG8gU2luZ2xlUmVwaHViIG9uIHN0YXJ0dXAuDQorICAg
IDIuIHJlcGFnZW50IHJlcG9ydHMgVjEgYW5kIFYyIHRvIFNpbmdsZVJlcGh1Yi4NCisgICAgMy4g
U2luZ2xlUmVwaHViIHN0YXJ0cyB0byBwZXJmb3JtIGFuIGluaXRpYWwgc3luY2hyb25pemF0aW9u
IG9mIHRoZQ0KcHJvdGVjdGVkIHZvbHVtZXMtDQorICAgICAgICBpdCByZWFkcyBlYWNoIHByb3Rl
Y3RlZCB2b2x1bWUgKFYxIGFuZCBWMikgLSB1c2luZyByZWFkIHZvbHVtZQ0KcmVxdWVzdHMgLSBh
bmQgY29waWVzIHRoZSBkYXRhIGludG8gdGhlDQorICAgICAgICByZWNvdmVyeSB2b2x1bWUgVjFS
IGFuZCBWMlIuDQorICAgIDQuIFNpbmdsZVJlcGh1YiBlbnRlcnMgJ3Byb3RlY3Rpb24nIG1vZGUg
LSBlYWNoIHdyaXRlIHRvIHRoZQ0KcHJvdGVjdGVkIHZvbHVtZSBpcyBzZW50IGJ5IHRoZSByZXBh
Z2VudCB0byB0aGUgUmVwaHViLA0KKyAgICAgICAgYW5kIHRoZSBSZXBodWIgcGVyZm9ybXMgdGhl
IHdyaXRlIG9uIHRoZSBtYXRjaGluZyByZWNvdmVyeQ0Kdm9sdW1lLg0KKw0KKyAgICAqIE5vdGUg
dGhhdCBkdXJpbmcgc3RhZ2UgMyB3cml0ZXMgdG8gdGhlIHByb3RlY3RlZCB2b2x1bWVzIGFyZSBu
b3QNCmlnbm9yZWQgLSB0aGV5J3JlIGtlcHQgaW4gYSBiaXRtYXAsDQorICAgICAgICBhbmQgd2ls
bCBiZSByZWFkIGFnYWluIHdoZW4gc3RhZ2UgMyBlbmRzLCBpbiBhbiBpbnRlcmF0aXZlDQpjb252
ZXJnaW4gcHJvY2Vzcy4NCisNCisgICAgVGhpcyBmbG93IGNvbnRpbnVvdXNseSBtYWludGFpbnMg
YW4gdXBkYXRlZCByZWNvdmVyeSB2b2x1bWUuDQorICAgIElmIHRoZSBwcm90ZWN0ZWQgc3lzdGVt
IGlzIGRhbWFnZWQsIHRoZSB1c2VyIGNhbiBjcmVhdGUgYSBuZXcgVk0gb24NCkhvc3QyIHdpdGgg
dGhlIHJlcGxpY2F0ZWQgdm9sdW1lcyBhdHRhY2hlZCB0byBpdC4NCisgICAgVGhlIG5ldyBWTSBp
cyBhIHJlcGxpY2Egb2YgdGhlIHByb3RlY3RlZCBzeXN0ZW0uDQorDQorDQpkaWZmIC0tZ2l0IGEv
YmxvY2svcmVwYWdlbnQvcmVwYWdlbnQuYyBiL2Jsb2NrL3JlcGFnZW50L3JlcGFnZW50LmMNCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5iZGMwMTE3DQotLS0gL2Rldi9udWxs
DQorKysgYi9ibG9jay9yZXBhZ2VudC9yZXBhZ2VudC5jDQpAQCAtMCwwICsxLDM1NSBAQA0KKyNp
bmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGlv
Lmg+DQorI2luY2x1ZGUgPHB0aHJlYWQuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorI2lu
Y2x1ZGUgImJsb2NrLmgiDQorI2luY2x1ZGUgInJlcGh1Yl9kZWZzLmgiDQorI2luY2x1ZGUgImJs
b2NrX2ludC5oIg0KKyNpbmNsdWRlICJyZXBhZ2VudF9jbGllbnQuaCINCisjaW5jbHVkZSAicmVw
YWdlbnQuaCINCisjaW5jbHVkZSAicmVwaHViX2NtZHMuaCINCisNCisjZGVmaW5lIFpFUk9fTUVN
X09CSihwT2JqKSBtZW1zZXQocE9iaiwgMCwgc2l6ZW9mKCpwT2JqKSkNCisjZGVmaW5lIFJFUEFH
RU5UX01BWF9OVU1fVk9MVU1FUyAoNjQpDQorI2RlZmluZSBSRVBBR0VOVF9WT0xVTUVfSURfTk9O
RSAoMCkNCisNCit0eXBlZGVmIHN0cnVjdCBSZXBhZ2VudFZvbHVtZSB7DQorICAgIHVpbnQ2NF90
IHZvbF9pZDsNCisgICAgY29uc3QgY2hhciAqdm9sX3BhdGg7DQorICAgIEJsb2NrRHJpdmVyU3Rh
dGUgKmRyaXZlcl9wdHI7DQorfSBSZXBhZ2VudFZvbHVtZTsNCisNCitzdHJ1Y3QgUmVwQWdlbnRT
dGF0ZSB7DQorICAgIGludCBpc19pbml0Ow0KKyAgICBpbnQgbnVtX3ZvbHVtZXM7DQorICAgIFJl
cGFnZW50Vm9sdW1lICp2b2x1bWVzW1JFUEFHRU5UX01BWF9OVU1fVk9MVU1FU107DQorfTsNCisN
Cit0eXBlZGVmIHN0cnVjdCBSZXBhZ2VudFJlYWRWb2xJbyB7DQorICAgIFFFTVVJT1ZlY3RvciBx
aW92Ow0KKyAgICBSZXBDbWRSZW1vdGVJb1JlcSByZXBfY21kOw0KKyAgICB1aW50OF90ICpidWY7
DQorICAgIHN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7DQorfSBSZXBhZ2VudFJlYWRWb2xJbzsN
CisNCitzdGF0aWMgaW50IHJlcGFnZW50X2dldF92b2x1bWVfYnlfZHJpdmVyKA0KKyAgICAgICAg
QmxvY2tEcml2ZXJTdGF0ZSAqYnMpOw0KK3N0YXRpYyBpbnQgcmVwYWdlbnRfZ2V0X3ZvbHVtZV9i
eV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOw0KK3N0YXRpYyB2b2lkIHJlcGFnZW50X3JlcG9ydF92
b2x1bWVzX3RvX2h1Yih2b2lkKTsNCitzdGF0aWMgdm9pZCByZXBhZ2VudF9yZW1vdGVfaW9fZG9u
ZSh2b2lkICpvcGFxdWUsIGludCByZXQpOw0KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0c3ViKHN0
cnVjdCB0aW1ldmFsIHQxLCBzdHJ1Y3QgdGltZXZhbCB0Mik7DQorDQorUmVwQWdlbnRTdGF0ZSBn
X3JlcF9hZ2VudCA9IHsgMCB9Ow0KKw0KK3ZvaWQgcmVwYWdlbnRfaW5pdChjb25zdCBjaGFyICpo
dWJuYW1lLCBpbnQgcG9ydCkNCit7DQorICAgIC8qIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBv
ZiB0aGUgdGhyZWFkIHRvIGZyZWUgdGhpcyBzdHJ1Y3QgKi8NCisgICAgcmVwaHViX3BhcmFtcyAq
cFBhcmFtcyA9IChyZXBodWJfcGFyYW1zDQoqKWdfbWFsbG9jKHNpemVvZihyZXBodWJfcGFyYW1z
KSk7DQorICAgIGlmIChodWJuYW1lID09IE5VTEwpIHsNCisgICAgICAgIGh1Ym5hbWUgPSAiMTI3
LjAuMC4xIjsNCisgICAgfQ0KKyAgICBpZiAocG9ydCA9PSAwKSB7DQorICAgICAgICBwb3J0ID0g
OTAxMDsNCisgICAgfQ0KKw0KKyAgICBwcmludGYoInJlcGFnZW50X2luaXQgJXNcbiIsIGh1Ym5h
bWUpOw0KKw0KKyAgICBwUGFyYW1zLT5wb3J0ID0gcG9ydDsNCisgICAgcFBhcmFtcy0+bmFtZSA9
IGdfc3RyZHVwKGh1Ym5hbWUpOw0KKw0KKyAgICBwdGhyZWFkX3QgdGhyZWFkX2lkID0gMDsNCisN
CisgICAgLyogQ3JlYXRlIHRoZSByZXBhZ2VudCBjbGllbnQgbGlzdGVuZXIgdGhyZWFkICovDQor
ICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRfaWQsIDAsIHJlcGFnZW50X2xpc3RlbiwgKHZvaWQg
KikgcFBhcmFtcyk7DQorICAgIHB0aHJlYWRfZGV0YWNoKHRocmVhZF9pZCk7DQorfQ0KKw0KK3Zv
aWQgcmVwYWdlbnRfcmVnaXN0ZXJfZHJpdmUoY29uc3QgY2hhciAqZHJpdmVfcGF0aCwNCisgICAg
ICAgIEJsb2NrRHJpdmVyU3RhdGUgKmRyaXZlcl9wdHIpDQorew0KKyAgICAvKiBBc3NlcnQgdGhh
dCB0aGUgdm9sdW1lIGlzIG5vdCByZWdpc3RlcmVkIHlldCAqLw0KKyAgICBpbnQgaSA9IHJlcGFn
ZW50X2dldF92b2x1bWVfYnlfbmFtZShkcml2ZV9wYXRoKTsNCisgICAgYXNzZXJ0KGkgPT0gLTEp
Ow0KKw0KKyAgICAvKkFkZCB0aGUgdm9sdW1lIGF0IHRoZSBsYXN0IHBsYWNlKi8NCisgICAgYXNz
ZXJ0KGdfcmVwX2FnZW50Lm51bV92b2x1bWVzIDwgUkVQQUdFTlRfTUFYX05VTV9WT0xVTUVTKTsN
CisNCisgICAgaSA9IGdfcmVwX2FnZW50Lm51bV92b2x1bWVzOw0KKyAgICBnX3JlcF9hZ2VudC5u
dW1fdm9sdW1lcysrOw0KKw0KKyAgICBwcmludGYoInplcnRvIHJlcGFnZW50OiBSZWdpc3Rlcmlu
ZyBkcml2ZS4gTnVtIGRyaXZlcyAlZCwgcGF0aCAlc1xuIiwNCisgICAgICAgICAgICBnX3JlcF9h
Z2VudC5udW1fdm9sdW1lcywgZHJpdmVfcGF0aCk7DQorICAgIGdfcmVwX2FnZW50LnZvbHVtZXNb
aV0gPQ0KKyAgICAgICAgICAgIChSZXBhZ2VudFZvbHVtZSAqKWdfbWFsbG9jKHNpemVvZihSZXBh
Z2VudFZvbHVtZSkpOw0KKyAgICBnX3JlcF9hZ2VudC52b2x1bWVzW2ldLT5kcml2ZXJfcHRyID0g
ZHJpdmVyX3B0cjsNCisgICAgLyogb3JpbSB0b2RvIHN0cmNweT8gKi8NCisgICAgZ19yZXBfYWdl
bnQudm9sdW1lc1tpXS0+dm9sX3BhdGggPSBkcml2ZV9wYXRoOw0KKw0KKyAgICAvKiBPcmltIHRv
ZG8gdGhyZWFkLXNhZmV0eT8gKi8NCisgICAgZ19yZXBfYWdlbnQubnVtX3ZvbHVtZXMrKzsNCisN
CisgICAgcmVwYWdlbnRfcmVwb3J0X3ZvbHVtZXNfdG9faHViKCk7DQorfQ0KKw0KK3ZvaWQgcmVw
YWdlbnRfZGVyZWdpc3Rlcl9kcml2ZShjb25zdCBjaGFyICpkcml2ZV9wYXRoLA0KKyAgICAgICAg
QmxvY2tEcml2ZXJTdGF0ZSAqZHJpdmVyX3B0cikNCit7DQorICAgIC8qIE9yaW0gdG9kbyB0aHJl
YWQtc2FmZXR5PyAqLw0KKyAgICBpbnQgaSA9IHJlcGFnZW50X2dldF92b2x1bWVfYnlfZHJpdmVy
KGRyaXZlcl9wdHIpOw0KKyAgICBhc3NlcnQoaSAhPSAtMSk7DQorDQorICAgIFJlcGFnZW50Vm9s
dW1lICp2b2wgPSBnX3JlcF9hZ2VudC52b2x1bWVzW2ldOw0KKyAgICAvKiBQdXQgdGhlIGxhc3Qg
dm9sdW1lIGluIHRoZSBjZWxsIG9mIHRoZSByZW1vdmVkIHZvbHVtZSB0byBtYWludGFpbg0KYQ0K
KyAgICAgKiBjb250aWd1b3VzIGFycmF5ICovDQorICAgIGdfcmVwX2FnZW50LnZvbHVtZXNbaV0g
PSBnX3JlcF9hZ2VudC52b2x1bWVzW2dfcmVwX2FnZW50Lm51bV92b2x1bWVzDQotIDFdOw0KKyAg
ICBnX3JlcF9hZ2VudC52b2x1bWVzW2dfcmVwX2FnZW50Lm51bV92b2x1bWVzIC0gMV0gPSBOVUxM
Ow0KKyAgICBnX3JlcF9hZ2VudC5udW1fdm9sdW1lcy0tOw0KKyAgICBnX2ZyZWUodm9sKTsNCisN
Cit9DQorLyogb3JpbSB0b2RvIGRlc3RydWN0aW9uPyAqLw0KKw0KK3N0YXRpYyBpbnQgcmVwYWdl
bnRfZ2V0X3ZvbHVtZV9ieV9kcml2ZXIoDQorICAgICAgICBCbG9ja0RyaXZlclN0YXRlICpicykN
Cit7DQorICAgIC8qIG9yaW0gdG9kbyBvcHRpbWl6ZSBzZWFyY2ggKi8NCisgICAgaW50IGkgPSAw
Ow0KKyAgICBmb3IgKGkgPSAwOyBpIDwgZ19yZXBfYWdlbnQubnVtX3ZvbHVtZXMgOyBpKyspIHsN
CisgICAgICAgIFJlcGFnZW50Vm9sdW1lICpwX3ZvbCA9IGdfcmVwX2FnZW50LnZvbHVtZXNbaV07
DQorICAgICAgICBpZiAocF92b2wgIT0gTlVMTCAmJiBwX3ZvbC0+ZHJpdmVyX3B0ciA9PSAodm9p
ZCAqKSBicykgew0KKyAgICAgICAgICAgIHJldHVybiBpOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
ICAgIHJldHVybiAtMTsNCit9DQorDQordm9pZCByZXBhZ2VudF9oYW5kbGVfcHJvdGVjdGVkX3dy
aXRlKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90DQpzZWN0b3JfbnVtLA0KKyAgICAgICAg
aW50IG5iX3NlY3RvcnMsIFFFTVVJT1ZlY3RvciAqcWlvdiwgaW50IHJldF9zdGF0dXMpDQorew0K
KyAgICBwcmludGYoInplcnRvIFByb3RlY3RlZCB3cml0ZSBvZmZzZXQgJWxsZCwgc2l6ZSAlZCwg
SU8gcmV0dXJuIHN0YXR1cw0KJWQiLA0KKyAgICAgICAgICAgIChsb25nIGxvbmcgaW50KSBzZWN0
b3JfbnVtLCBuYl9zZWN0b3JzLCByZXRfc3RhdHVzKTsNCisgICAgaWYgKGJzLT5maWxlbmFtZSAh
PSBOVUxMKSB7DQorICAgICAgICBwcmludGYoIiwgZmlsZW5hbWUgJXMiLCBicy0+ZmlsZW5hbWUp
Ow0KKyAgICB9DQorDQorICAgIHByaW50ZigiXG4iKTsNCisNCisgICAgLyogb3JpbSB0b2RvIHRo
cmVhZCBzYWZldHk/ICovDQorICAgIGludCBpID0gcmVwYWdlbnRfZ2V0X3ZvbHVtZV9ieV9kcml2
ZXIoYnMpOw0KKyAgICBpZiAoaSA9PSAtMSB8fCBnX3JlcF9hZ2VudC52b2x1bWVzW2ldLT52b2xf
aWQgPT0NClJFUEFHRU5UX1ZPTFVNRV9JRF9OT05FKSB7DQorICAgICAgICAvKiBVbnByb3RlY3Rl
ZCAqLw0KKyAgICAgICAgcHJpbnRmKCJHb3QgYSB3cml0ZSB0byBhbiB1bnByb3RlY3RlZCB2b2x1
bWUuXG4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBSZXBhZ2VudFZvbHVt
ZSAqcF92b2wgPSBnX3JlcF9hZ2VudC52b2x1bWVzW2ldOw0KKw0KKyAgICAvKiBSZXBvcnQgSU8g
dG8gcmVwaHViICovDQorDQorICAgIGludCBkYXRhX3NpemUgPSBxaW92LT5zaXplOw0KKyAgICBp
ZiAocmV0X3N0YXR1cyA8IDApIHsNCisgICAgICAgIC8qIE9uIGZhaWxlZCBpb3Mgd2UgZG9uJ3Qg
c2VuZCB0aGUgZGF0YSB0byB0aGUgaHViICovDQorICAgICAgICBkYXRhX3NpemUgPSAwOw0KKyAg
ICB9DQorICAgIHVpbnQ4X3QgKnBkYXRhID0gTlVMTDsNCisgICAgUmVwQ21kUHJvdGVjdGVkV3Jp
dGUgKnBfY21kID0gKFJlcENtZFByb3RlY3RlZFdyaXRlICopIHJlcGNtZF9uZXcoDQorICAgICAg
ICAgICAgUkVQSFVCX0NNRF9QUk9URUNURURfV1JJVEUsIGRhdGFfc2l6ZSwgKHVpbnQ4X3QgKiop
ICZwZGF0YSk7DQorDQorICAgIGlmIChyZXRfc3RhdHVzID49IDApIHsNCisgICAgICAgIHFlbXVf
aW92ZWNfdG9fYnVmZmVyKHFpb3YsIHBkYXRhKTsNCisgICAgfQ0KKw0KKyAgICBwX2NtZC0+dm9s
dW1lX2lkID0gcF92b2wtPnZvbF9pZDsNCisgICAgcF9jbWQtPm9mZnNldF9zZWN0b3JzID0gc2Vj
dG9yX251bTsNCisgICAgcF9jbWQtPnNpemVfc2VjdG9ycyA9IG5iX3NlY3RvcnM7DQorICAgIHBf
Y21kLT5yZXRfc3RhdHVzID0gcmV0X3N0YXR1czsNCisNCisgICAgaWYgKHJlcGFnZW50X2NsaWVu
dF9zZW5kKChSZXBDbWQgKikgcF9jbWQpICE9IDApIHsNCisgICAgICAgIHByaW50ZigiRXJyb3Ig
c2VuZGluZyBjb21tYW5kXG4iKTsNCisgICAgfQ0KK30NCisNCitzdGF0aWMgdm9pZCByZXBhZ2Vu
dF9yZXBvcnRfdm9sdW1lc190b19odWIodm9pZCkNCit7DQorICAgIC8qIFJlcG9ydCBJTyB0byBy
ZXBodWIgKi8NCisgICAgaW50IGk7DQorICAgIFJlcENtZERhdGFSZXBvcnRWbVZvbHVtZXMgKnBf
Y21kX2RhdGEgPSBOVUxMOw0KKyAgICBSZXBDbWRSZXBvcnRWbVZvbHVtZXMgKnBfY21kID0gKFJl
cENtZFJlcG9ydFZtVm9sdW1lcyAqKSByZXBjbWRfbmV3KA0KKyAgICAgICAgICAgIFJFUEhVQl9D
TURfUkVQT1JUX1ZNX1ZPTFVNRVMsDQorICAgICAgICAgICAgZ19yZXBfYWdlbnQubnVtX3ZvbHVt
ZXMgKiBzaXplb2YoUmVwVm1Wb2x1bWVJbmZvKSwNCisgICAgICAgICAgICAodWludDhfdCAqKikg
JnBfY21kX2RhdGEpOw0KKyAgICBwX2NtZC0+bnVtX3ZvbHVtZXMgPSBnX3JlcF9hZ2VudC5udW1f
dm9sdW1lczsNCisgICAgcHJpbnRmKCJyZXBvcnRpbmcgJXUgdm9sdW1lc1xuIiwgZ19yZXBfYWdl
bnQubnVtX3ZvbHVtZXMpOw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgZ19yZXBfYWdlbnQubnVtX3Zv
bHVtZXMgOyBpKyspIHsNCisgICAgICAgIGFzc2VydChnX3JlcF9hZ2VudC52b2x1bWVzW2ldICE9
IE5VTEwpOw0KKyAgICAgICAgcHJpbnRmKCJyZXBvcnRpbmcgdm9sdW1lICVzIHNpemUgJXVcbiIs
DQorICAgICAgICAgICAgICAgIGdfcmVwX2FnZW50LnZvbHVtZXNbaV0tPnZvbF9wYXRoLA0KKyAg
ICAgICAgICAgICAgICAodWludDMyX3QpIHNpemVvZihwX2NtZF9kYXRhLT52b2x1bWVzW2ldLm5h
bWUpKTsNCisgICAgICAgIHN0cm5jcHkoKGNoYXIgKikgcF9jbWRfZGF0YS0+dm9sdW1lc1tpXS5u
YW1lLA0KKyAgICAgICAgICAgICAgICBnX3JlcF9hZ2VudC52b2x1bWVzW2ldLT52b2xfcGF0aCwN
CisgICAgICAgICAgICAgICAgc2l6ZW9mKHBfY21kX2RhdGEtPnZvbHVtZXNbaV0ubmFtZSkpOw0K
KyAgICAgICAgcF9jbWRfZGF0YS0+dm9sdW1lc1tpXS52b2x1bWVfaWQgPQ0KZ19yZXBfYWdlbnQu
dm9sdW1lc1tpXS0+dm9sX2lkOw0KKyAgICB9DQorICAgIGlmIChyZXBhZ2VudF9jbGllbnRfc2Vu
ZCgoUmVwQ21kICopIHBfY21kKSAhPSAwKSB7DQorICAgICAgICBwcmludGYoIkVycm9yIHNlbmRp
bmcgY29tbWFuZFxuIik7DQorICAgIH0NCit9DQorDQoraW50IHJlcGFnZXRfc3RhcnRfcHJvdGVj
dChSZXBDbWRTdGFydFByb3RlY3QgKnBjbWQsDQorICAgICAgICBSZXBDbWREYXRhU3RhcnRQcm90
ZWN0ICpwY21kX2RhdGEpDQorew0KKyAgICBwcmludGYoIlN0YXJ0IHByb3RlY3Qgdm9sICVzLCBJ
RCAlbGx1XG4iLCBwY21kX2RhdGEtPnZvbHVtZV9uYW1lLA0KKyAgICAgICAgICAgICh1bnNpZ25l
ZCBsb25nIGxvbmcpIHBjbWQtPnZvbHVtZV9pZCk7DQorICAgIGludCB2b2xfaW5kZXggPSByZXBh
Z2VudF9nZXRfdm9sdW1lX2J5X25hbWUocGNtZF9kYXRhLT52b2x1bWVfbmFtZSk7DQorICAgIGlm
IChnX3JlcF9hZ2VudC5udW1fdm9sdW1lcyA+IDANCisgICAgICAgICAgICAmJiBzdHJjbXAocGNt
ZF9kYXRhLT52b2x1bWVfbmFtZSwgInN0YW0iKSA9PSAwKSB7DQorICAgICAgICAvKiBDaG9vc2Ug
dGhlIGZpcnN0IG9uZSBmb3IgcmVwaHViICovDQorICAgICAgICB2b2xfaW5kZXggPSAwOw0KKyAg
ICB9DQorICAgIGlmICh2b2xfaW5kZXggPCAwKSB7DQorICAgICAgICBwcmludGYoIlRoZSB2b2x1
bWUgZG9lc24ndCBleGlzdFxuIik7DQorICAgICAgICByZXR1cm4gVFJVRTsNCisgICAgfQ0KKyAg
ICAvKiBvcmltIHRvZG8gcHJvdGVjdCAqLw0KKyAgICBnX3JlcF9hZ2VudC52b2x1bWVzW3ZvbF9p
bmRleF0tPnZvbF9pZCA9IHBjbWQtPnZvbHVtZV9pZDsNCisNCisgICAgcmV0dXJuIFRSVUU7DQor
fQ0KKw0KK3N0YXRpYyBpbnQgcmVwYWdlbnRfZ2V0X3ZvbHVtZV9ieV9uYW1lKGNvbnN0IGNoYXIg
Km5hbWUpDQorew0KKyAgICBpbnQgaSA9IDA7DQorICAgIGZvciAoaSA9IDA7IGkgPCBnX3JlcF9h
Z2VudC5udW1fdm9sdW1lcyA7IGkrKykgew0KKyAgICAgICAgaWYgKGdfcmVwX2FnZW50LnZvbHVt
ZXNbaV0gIT0gTlVMTA0KKyAgICAgICAgICAgICAgICAmJiBzdHJjbXAobmFtZSwgZ19yZXBfYWdl
bnQudm9sdW1lc1tpXS0+dm9sX3BhdGgpID09IDApIHsNCisgICAgICAgICAgICByZXR1cm4gaTsN
CisgICAgICAgIH0NCisgICAgfQ0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KK3N0YXRpYyBpbnQg
cmVwYWdlbnRfZ2V0X3ZvbHVtZV9ieV9pZCh1aW50NjRfdCB2b2xfaWQpDQorew0KKyAgICBpbnQg
aSA9IDA7DQorICAgIGZvciAoaSA9IDA7IGkgPCBnX3JlcF9hZ2VudC5udW1fdm9sdW1lcyA7IGkr
Kykgew0KKyAgICAgICAgaWYgKGdfcmVwX2FnZW50LnZvbHVtZXNbaV0gIT0gTlVMTA0KKyAgICAg
ICAgICAgICAgICAmJiBnX3JlcF9hZ2VudC52b2x1bWVzW2ldLT52b2xfaWQgPT0gdm9sX2lkKSB7
DQorICAgICAgICAgICAgcmV0dXJuIGk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJu
IC0xOw0KK30NCisNCitpbnQgcmVwYWdlbnRfcmVtb3RlX2lvKFJlcENtZFJlbW90ZUlvUmVxICpw
Y21kLCB1aW50OF90ICpwZGF0YSkNCit7DQorICAgIGludCBpbmRleCA9IHJlcGFnZW50X2dldF92
b2x1bWVfYnlfaWQocGNtZC0+dm9sdW1lX2lkKTsNCisgICAgaW50IHNpemVfYnl0ZXMgPSBwY21k
LT5zaXplX3NlY3RvcnMgKiA1MTI7DQorICAgIGlmIChpbmRleCA8IDApIHsNCisgICAgICAgIHBy
aW50ZigiVm9sIHJlYWQgLSBDb3VsZCBub3QgZmluZCB2b2wgaWQgJWxseFxuIiwNCisgICAgICAg
ICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIHBjbWQtPnZvbHVtZV9pZCk7DQorICAg
ICAgICBSZXBDbWRSZW1vdGVJb1JlcyAqcF9yZXNfY21kID0gKFJlcENtZFJlbW90ZUlvUmVzICop
IHJlcGNtZF9uZXcoDQorICAgICAgICAgICAgICAgIFJFUEhVQl9DTURfUkVNT1RFX0lPX1JFUywg
MCwgTlVMTCk7DQorICAgICAgICBwX3Jlc19jbWQtPnJlcV9pZCA9IHBjbWQtPnJlcV9pZDsNCisg
ICAgICAgIHBfcmVzX2NtZC0+dm9sdW1lX2lkID0gcGNtZC0+dm9sdW1lX2lkOw0KKyAgICAgICAg
cF9yZXNfY21kLT5pb19zdGF0dXMgPSAtMTsNCisgICAgICAgIHJlcGFnZW50X2NsaWVudF9zZW5k
KChSZXBDbWQgKikgcF9yZXNfY21kKTsNCisgICAgICAgIHJldHVybiBUUlVFOw0KKyAgICB9DQor
DQorICAgIHByaW50ZigiVm9sIHJlYWQgLSBkcml2ZXIgJXAsIHZvbElkICVsbHUsIG9mZnNldCAl
bGx1LCBzaXplICV1XG4iLA0KKyAgICAgICAgICAgIGdfcmVwX2FnZW50LnZvbHVtZXNbaW5kZXhd
LT5kcml2ZXJfcHRyLA0KKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSBwY21k
LT52b2x1bWVfaWQsDQorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIHBjbWQt
Pm9mZnNldF9zZWN0b3JzLA0KcGNtZC0+c2l6ZV9zZWN0b3JzKTsNCisNCisgICAgew0KKyAgICAg
ICAgUmVwYWdlbnRSZWFkVm9sSW8gKmlvX3hhY3Rpb24gPSBjYWxsb2MoMSwNCnNpemVvZihSZXBh
Z2VudFJlYWRWb2xJbykpOw0KKw0KKy8qICAgICAgICBCbG9ja0RyaXZlckFJT0NCICphY2I7ICov
DQorDQorICAgICAgICBaRVJPX01FTV9PQkooaW9feGFjdGlvbik7DQorDQorICAgICAgICBxZW11
X2lvdmVjX2luaXQoJmlvX3hhY3Rpb24tPnFpb3YsIDEpOw0KKw0KKyAgICAgICAgLypyZWFkX3hh
Y3QtPmJ1ZiA9DQorICAgICAgICBxZW11X2Jsb2NrYWxpZ24oZ19yZXBfYWdlbnQudm9sdW1lc1tp
bmRleF0tPmRyaXZlcl9wdHIsDQpzaXplX2J5dGVzKTsgKi8NCisgICAgICAgIGlvX3hhY3Rpb24t
PmJ1ZiA9ICh1aW50OF90ICopIGdfbWFsbG9jKHNpemVfYnl0ZXMpOw0KKyAgICAgICAgaW9feGFj
dGlvbi0+cmVwX2NtZCA9ICpwY21kOw0KKyAgICAgICAgcWVtdV9pb3ZlY19hZGQoJmlvX3hhY3Rp
b24tPnFpb3YsIGlvX3hhY3Rpb24tPmJ1Ziwgc2l6ZV9ieXRlcyk7DQorDQorICAgICAgICBnZXR0
aW1lb2ZkYXkoJmlvX3hhY3Rpb24tPnN0YXJ0X3RpbWUsIE5VTEwpOw0KKyAgICAgICAgLyogb3Jp
bSBUT0RPIC0gdXNlIHRoZSByZXR1cm5lZCBhY2IgdG8gY2FuY2VsIHRoZSByZXF1ZXN0IG9uDQpz
aHV0ZG93biAqLw0KKyAgICAgICAgLyphY2IgPSAqLw0KKyAgICAgICAgaWYgKHBjbWQtPmlzX3Jl
YWQpIHsNCisgICAgICAgICAgICBiZHJ2X2Fpb19yZWFkdihnX3JlcF9hZ2VudC52b2x1bWVzW2lu
ZGV4XS0+ZHJpdmVyX3B0ciwNCisgICAgICAgICAgICAgICAgICAgIGlvX3hhY3Rpb24tPnJlcF9j
bWQub2Zmc2V0X3NlY3RvcnMsDQomaW9feGFjdGlvbi0+cWlvdiwNCisgICAgICAgICAgICAgICAg
ICAgIGlvX3hhY3Rpb24tPnJlcF9jbWQuc2l6ZV9zZWN0b3JzLA0KcmVwYWdlbnRfcmVtb3RlX2lv
X2RvbmUsDQorICAgICAgICAgICAgICAgICAgICBpb194YWN0aW9uKTsNCisgICAgICAgIH0gZWxz
ZSB7DQorICAgICAgICAgICAgYmRydl9haW9fd3JpdGV2KGdfcmVwX2FnZW50LnZvbHVtZXNbaW5k
ZXhdLT5kcml2ZXJfcHRyLA0KKyAgICAgICAgICAgICAgICAgICAgaW9feGFjdGlvbi0+cmVwX2Nt
ZC5vZmZzZXRfc2VjdG9ycywNCiZpb194YWN0aW9uLT5xaW92LA0KKyAgICAgICAgICAgICAgICAg
ICAgaW9feGFjdGlvbi0+cmVwX2NtZC5zaXplX3NlY3RvcnMsDQpyZXBhZ2VudF9yZW1vdGVfaW9f
ZG9uZSwNCisgICAgICAgICAgICAgICAgICAgIGlvX3hhY3Rpb24pOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHJldHVybiBUUlVFOw0KK30NCisNCitzdGF0aWMgdm9pZCByZXBhZ2VudF9y
ZW1vdGVfaW9fZG9uZSh2b2lkICpvcGFxdWUsIGludCByZXQpDQorew0KKyAgICBzdHJ1Y3QgdGlt
ZXZhbCB0MjsNCisgICAgUmVwYWdlbnRSZWFkVm9sSW8gKmlvX3hhY3Rpb24gPSAoUmVwYWdlbnRS
ZWFkVm9sSW8gKikgb3BhcXVlOw0KKyAgICB1aW50OF90ICpwZGF0YSA9IE5VTEw7DQorICAgIFJl
cENtZFJlbW90ZUlvUmVzICpwY21kID0gKFJlcENtZFJlbW90ZUlvUmVzICopIHJlcGNtZF9uZXco
DQorICAgICAgICAgICAgUkVQSFVCX0NNRF9SRU1PVEVfSU9fUkVTLCBpb194YWN0aW9uLT5yZXBf
Y21kLnNpemVfc2VjdG9ycyAqDQo1MTIsDQorICAgICAgICAgICAgJnBkYXRhKTsNCisgICAgcGNt
ZC0+cmVxX2lkID0gaW9feGFjdGlvbi0+cmVwX2NtZC5yZXFfaWQ7DQorICAgIHBjbWQtPnZvbHVt
ZV9pZCA9IGlvX3hhY3Rpb24tPnJlcF9jbWQudm9sdW1lX2lkOw0KKyAgICBwY21kLT5pb19zdGF0
dXMgPSAtMTsNCisNCisgICAgcHJpbnRmKCJSZW1vdGUgSU8gcmVxdWVzdCAtIHZvbElkICVsbHUs
IG9mZnNldCAlbGx1LCBzaXplICV1LCBpc19yZWFkDQoldVxuIiwNCisgICAgICAgICAgICAodW5z
aWduZWQgbG9uZyBsb25nIGludCkgaW9feGFjdGlvbi0+cmVwX2NtZC52b2x1bWVfaWQsDQorICAg
ICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIGlvX3hhY3Rpb24tPnJlcF9jbWQub2Zm
c2V0X3NlY3RvcnMsDQorICAgICAgICAgICAgaW9feGFjdGlvbi0+cmVwX2NtZC5zaXplX3NlY3Rv
cnMsDQorICAgICAgICAgICAgaW9feGFjdGlvbi0+cmVwX2NtZC5pc19yZWFkKTsNCisgICAgZ2V0
dGltZW9mZGF5KCZ0MiwgTlVMTCk7DQorDQorICAgIGlmIChyZXQgPj0gMCkgew0KKyAgICAgICAg
LyogUmVhZCByZXNwb25zZSAtIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGh1YiAqLw0KKyAgICAgICAg
dDIgPSB0c3ViKHQyLCBpb194YWN0aW9uLT5zdGFydF90aW1lKTsNCisgICAgICAgIHByaW50Zigi
UmVtb3RlIElPIGRvbmUuIFRvb2sgJXUgc2Vjb25kcywgJXUgdXMuIiwNCisgICAgICAgICAgICAg
ICAgKHVpbnQzMl90KSB0Mi50dl9zZWMsICh1aW50MzJfdCkgdDIudHZfdXNlYyk7DQorDQorICAg
ICAgICBwY21kLT5pb19zdGF0dXMgPSAwOyAgICAvKiBTdWNjZXNzICovDQorICAgICAgICAvKiBv
cmltIHRvZG8gb3B0aW1pemUgLSBkb24ndCBjb3B5LCB1c2UgdGhlIHFpb3YgYnVmZmVyICovDQor
ICAgICAgICBxZW11X2lvdmVjX3RvX2J1ZmZlcigmaW9feGFjdGlvbi0+cWlvdiwgcGRhdGEpOw0K
KyAgICB9IGVsc2Ugew0KKyAgICAgICAgcHJpbnRmKCJyZWFkdiBmYWlsZWQ6ICVzXG4iLCBzdHJl
cnJvcigtcmV0KSk7DQorICAgIH0NCisNCisgICAgcmVwYWdlbnRfY2xpZW50X3NlbmQoKFJlcENt
ZCAqKSBwY21kKTsNCisNCisgICAgLypxZW11X3ZmcmVlKHJlYWRfeGFjdC0+YnVmKTsgKi8NCisg
ICAgZ19mcmVlKGlvX3hhY3Rpb24tPmJ1Zik7DQorDQorICAgIGdfZnJlZShpb194YWN0aW9uKTsN
Cit9DQorDQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRzdWIoc3RydWN0IHRpbWV2YWwgdDEsIHN0
cnVjdCB0aW1ldmFsIHQyKQ0KK3sNCisgICAgdDEudHZfdXNlYyAtPSB0Mi50dl91c2VjOw0KKyAg
ICBpZiAodDEudHZfdXNlYyA8IDApIHsNCisgICAgICAgIHQxLnR2X3VzZWMgKz0gMTAwMDAwMDsN
CisgICAgICAgIHQxLnR2X3NlYy0tOw0KKyAgICB9DQorICAgIHQxLnR2X3NlYyAtPSB0Mi50dl9z
ZWM7DQorICAgIHJldHVybiB0MTsNCit9DQorDQordm9pZCByZXBhZ2VudF9jbGllbnRfY29ubmVj
dGVkKHZvaWQpDQorew0KKyAgICAvKiBvcmltIHRvZG8gdGhyZWFkIHByb3RlY3Rpb24gKi8NCisg
ICAgcmVwYWdlbnRfcmVwb3J0X3ZvbHVtZXNfdG9faHViKCk7DQorfQ0KZGlmZiAtLWdpdCBhL2Js
b2NrL3JlcGFnZW50L3JlcGFnZW50LmggYi9ibG9jay9yZXBhZ2VudC9yZXBhZ2VudC5oDQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMGY2OTgyMA0KLS0tIC9kZXYvbnVsbA0K
KysrIGIvYmxvY2svcmVwYWdlbnQvcmVwYWdlbnQuaA0KQEAgLTAsMCArMSw1MiBAQA0KKy8qDQor
ICogUUVNVSBTeXN0ZW0gRW11bGF0b3INCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4
IEZhYnJpY2UgQmVsbGFyZA0KKyAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg
ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nDQphIGNvcHkNCisgKiBvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwNCnRvIGRlYWwNCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv
biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUNCnJpZ2h0cw0KKyAqIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5k
L29yDQpzZWxsDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlDQppbmNsdWRl
ZCBpbg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQpFWFBSRVNTIE9SDQorICogSU1QTElFRCwgSU5DTFVESU5H
IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KTUVSQ0hBTlRBQklMSVRZLA0K
KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu
IElOIE5PIEVWRU5UDQpTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT
IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SDQpPVEhFUg0KKyAqIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLA0K
QVJJU0lORyBGUk9NLA0KKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MNCklODQorICogVEhFIFNPRlRXQVJFLg0K
KyAqLw0KKyNpZm5kZWYgUkVQQUdFTlRfSA0KKyNkZWZpbmUgUkVQQUdFTlRfSA0KKyNpbmNsdWRl
IDxzdGRpbnQuaD4NCisNCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCINCisNCit0eXBlZGVmIHN0
cnVjdCBSZXBBZ2VudFN0YXRlIFJlcEFnZW50U3RhdGU7DQordHlwZWRlZiBzdHJ1Y3QgUmVwQ21k
U3RhcnRQcm90ZWN0IFJlcENtZFN0YXJ0UHJvdGVjdDsNCit0eXBlZGVmIHN0cnVjdCBSZXBDbWRE
YXRhU3RhcnRQcm90ZWN0IFJlcENtZERhdGFTdGFydFByb3RlY3Q7DQorc3RydWN0IFJlcENtZFJl
bW90ZUlvUmVxOw0KKw0KKy8qIG9yaW0gdGVtcG9yYXJ5ICovDQorZXh0ZXJuIGludCB1c2VfcmVw
YWdlbnQ7DQorDQorDQordm9pZCByZXBhZ2VudF9pbml0KGNvbnN0IGNoYXIgKmh1Ym5hbWUsIGlu
dCBwb3J0KTsNCit2b2lkIHJlcGFnZW50X2hhbmRsZV9wcm90ZWN0ZWRfd3JpdGUoQmxvY2tEcml2
ZXJTdGF0ZSAqYnMsDQorICAgICAgICBpbnQ2NF90IHNlY3Rvcl9udW0sIGludCBuYl9zZWN0b3Jz
LCBRRU1VSU9WZWN0b3IgKnFpb3YsIGludA0KcmV0X3N0YXR1cyk7DQordm9pZCByZXBhZ2VudF9y
ZWdpc3Rlcl9kcml2ZShjb25zdCBjaGFyICpkcml2ZV9wYXRoLA0KKyAgICAgICAgQmxvY2tEcml2
ZXJTdGF0ZSAqZHJpdmVyX3B0cik7DQordm9pZCByZXBhZ2VudF9kZXJlZ2lzdGVyX2RyaXZlKGNv
bnN0IGNoYXIgKmRyaXZlX3BhdGgsDQorICAgICAgICBCbG9ja0RyaXZlclN0YXRlICpkcml2ZXJf
cHRyKTsNCitpbnQgcmVwYWdldF9zdGFydF9wcm90ZWN0KFJlcENtZFN0YXJ0UHJvdGVjdCAqcGNt
ZCwNCisgICAgICAgIFJlcENtZERhdGFTdGFydFByb3RlY3QgKnBjbWRfZGF0YSk7DQoraW50IHJl
cGFnZW50X3JlbW90ZV9pbyhzdHJ1Y3QgUmVwQ21kUmVtb3RlSW9SZXEgKnBjbWQsIHVpbnQ4X3Qg
KnBkYXRhKTsNCit2b2lkIHJlcGFnZW50X2NsaWVudF9jb25uZWN0ZWQodm9pZCk7DQorDQorDQor
I2VuZGlmIC8qIFJFUEFHRU5UX0ggKi8NCmRpZmYgLS1naXQgYS9ibG9jay9yZXBhZ2VudC9yZXBh
Z2VudF9jbGllbnQuYw0KYi9ibG9jay9yZXBhZ2VudC9yZXBhZ2VudF9jbGllbnQuYw0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmVlNGFlYjcNCi0tLSAvZGV2L251bGwNCisr
KyBiL2Jsb2NrL3JlcGFnZW50L3JlcGFnZW50X2NsaWVudC5jDQpAQCAtMCwwICsxLDE2MiBAQA0K
KyNpbmNsdWRlICJyZXBjbWQuaCINCisjaW5jbHVkZSAicmVwaHViX2NtZHMuaCINCisjaW5jbHVk
ZSAicmVwY21kX2xpc3RlbmVyLmgiDQorI2luY2x1ZGUgInJlcGFnZW50X2NsaWVudC5oIg0KKyNp
bmNsdWRlICJyZXBhZ2VudC5oIg0KKyNpbmNsdWRlICJtYWluLWxvb3AuaCINCisNCisjaW5jbHVk
ZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0K
KyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxyZXNvbHYuaD4NCisjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPg0KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCisjaW5jbHVkZSA8bmV0aW5ldC9p
bi5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisNCisjZGVmaW5lIFpFUk9fTUVNX09CSihwT2Jq
KSBtZW1zZXQocE9iaiwgMCwgc2l6ZW9mKCpwT2JqKSkNCisNCitzdGF0aWMgdm9pZCByZXBhZ2Vu
dF9wcm9jZXNzX2NtZChSZXBDbWQgKnBDbWQsIHVpbnQ4X3QgKnBEYXRhLCB2b2lkDQoqY2xpZW50
UHRyKTsNCisNCit0eXBlZGVmIHN0cnVjdCByZXBhZ2VudF9jbGllbnRfc3RhdGUgew0KKyAgICBp
bnQgaXNfY29ubmVjdGVkOw0KKyAgICBpbnQgaXNfdGVybWluYXRlX3JlY2VpdmU7DQorICAgIGlu
dCBoc29jazsNCit9IHJlcGFnZW50X2NsaWVudF9zdGF0ZTsNCisNCitzdGF0aWMgcmVwYWdlbnRf
Y2xpZW50X3N0YXRlIGdfY2xpZW50X3N0YXRlID0geyAwIH07DQorDQorc3RhdGljIHZvaWQgcmVw
YWdlbnRfY2xpZW50X3JlYWQodm9pZCAqb3BhcXVlKQ0KK3sNCisgICAgcHJpbnRmKCJyZXBhZ2Vu
dF9jbGllbnRfcmVhZFxuIik7DQorICAgIGludCBieXRlc19yZWFkID0NCnJlcGNtZF9saXN0ZW5l
cl9zb2NrZXRfcmVhZF9uZXh0X2J1ZihnX2NsaWVudF9zdGF0ZS5oc29jayk7DQorICAgIGlmIChi
eXRlc19yZWFkIDw9IDApIHsNCisgICAgICAgIHByaW50ZigicmVwYWdlbnRfY2xpZW50X3JlYWQg
ZmFpbGVkICglZCksIGVycm5vPSVkXG4iLA0KKyAgICAgICAgYnl0ZXNfcmVhZCwgZXJybm8pOw0K
KyAgICAgICAgZ19jbGllbnRfc3RhdGUuaXNfY29ubmVjdGVkID0gMDsNCisgICAgfQ0KK30NCisN
Cit2b2lkICpyZXBhZ2VudF9saXN0ZW4odm9pZCAqcFBhcmFtKQ0KK3sNCisgICAgcmVwaHViX3Bh
cmFtcyAqcFNlcnZlclBhcmFtcyA9IChyZXBodWJfcGFyYW1zICopIHBQYXJhbTsNCisgICAgaW50
IGhvc3RfcG9ydCA9IHBTZXJ2ZXJQYXJhbXMtPnBvcnQ7DQorICAgIGNvbnN0IGNoYXIgKmhvc3Rf
bmFtZSA9IHBTZXJ2ZXJQYXJhbXMtPm5hbWU7DQorDQorICAgIHByaW50ZigiQ3JlYXRpbmcgcmVw
YWdlbnQgbGlzdGVuZXIgdGhyZWFkLi4uXG4iKTsNCisgICAgZ19mcmVlKHBTZXJ2ZXJQYXJhbXMp
Ow0KKw0KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlfYWRkcjsNCisNCisgICAgaW50IGVycjsN
CisgICAgaW50IHJldHJpZXMgPSAwOw0KKw0KKyAgICBnX2NsaWVudF9zdGF0ZS5oc29jayA9IHNv
Y2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7DQorICAgIGlmIChnX2NsaWVudF9zdGF0ZS5o
c29jayA9PSAtMSkgew0KKyAgICAgICAgcHJpbnRmKCJFcnJvciBpbml0aWFsaXppbmcgc29ja2V0
ICVkXG4iLCBlcnJubyk7DQorICAgICAgICByZXR1cm4gKHZvaWQgKikgLTE7DQorICAgIH0NCisN
CisgICAgaW50IHBhcmFtID0gMTsNCisNCisgICAgaWYgKChzZXRzb2Nrb3B0KGdfY2xpZW50X3N0
YXRlLmhzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsDQorICAgICAgICAgICAgKGNoYXIg
KikgJnBhcmFtLCBzaXplb2YoaW50KSkgPT0gLTEpDQorICAgICAgICAgICAgfHwgKHNldHNvY2tv
cHQoZ19jbGllbnRfc3RhdGUuaHNvY2ssIFNPTF9TT0NLRVQsDQpTT19LRUVQQUxJVkUsDQorICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSAmcGFyYW0sIHNpemVvZihpbnQpKSA9PSAtMSkpIHsN
CisgICAgICAgIHByaW50ZigiRXJyb3Igc2V0dGluZyBvcHRpb25zICVkXG4iLCBlcnJubyk7DQor
ICAgICAgICByZXR1cm4gKHZvaWQgKikgLTE7DQorICAgIH0NCisNCisgICAgbXlfYWRkci5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsNCisgICAgbXlfYWRkci5zaW5fcG9ydCA9IGh0b25zKGhvc3RfcG9y
dCk7DQorICAgIG1lbXNldCgmKG15X2FkZHIuc2luX3plcm8pLCAwLCA4KTsNCisNCisgICAgbXlf
YWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoaG9zdF9uYW1lKTsNCisNCisgICAgLyog
UmVjb25uZWN0IGxvb3AgKi8NCisgICAgd2hpbGUgKCFnX2NsaWVudF9zdGF0ZS5pc190ZXJtaW5h
dGVfcmVjZWl2ZSkgew0KKw0KKyAgICAgICAgaWYgKGNvbm5lY3QoZ19jbGllbnRfc3RhdGUuaHNv
Y2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm15X2FkZHIsDQorICAgICAgICAgICAgICAgIHNpemVv
ZihteV9hZGRyKSkgPT0gLTEpIHsNCisgICAgICAgICAgICBlcnIgPSBlcnJubzsNCisgICAgICAg
ICAgICBpZiAoZXJyICE9IEVJTlBST0dSRVNTKSB7DQorICAgICAgICAgICAgICAgIHJldHJpZXMr
KzsNCisgICAgICAgICAgICAgICAgZnByaW50ZigNCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGRlcnIsDQorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvbm5lY3Rpbmcgc29ja2V0
ICVkLiBIb3N0ICVzLCBwb3J0ICV1Lg0KUmV0cnkgY291bnQgJWRcbiIsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgZXJybm8sIGhvc3RfbmFtZSwgaG9zdF9wb3J0LCByZXRyaWVzKTsNCisgICAg
ICAgICAgICAgICAgdXNsZWVwKDUgKiAxMDAwICogMTAwMCk7DQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIHJldHJpZXMgPSAw
Ow0KKw0KKyAgICAgICAgcHJpbnRmKCJBZnRlciBjb25uZWN0XG4iKTsNCisgICAgICAgIGdfY2xp
ZW50X3N0YXRlLmlzX2Nvbm5lY3RlZCA9IDE7DQorICAgICAgICByZXBhZ2VudF9jbGllbnRfY29u
bmVjdGVkKCk7DQorICAgICAgICByZXBjbWRfbGlzdGVuZXJfaW5pdChyZXBhZ2VudF9wcm9jZXNz
X2NtZCwgTlVMTCk7DQorICAgICAgICBzdGF0aWMgaW50IGM7DQorICAgICAgICAvKiByZXBjbWRf
bGlzdGVuZXJfc29ja2V0X3RocmVhZF9saXN0ZW5lcihnX2NsaWVudF9zdGF0ZS5oc29jayk7DQoq
Lw0KKyAgICAgICAgcWVtdV9zZXRfZmRfaGFuZGxlcihnX2NsaWVudF9zdGF0ZS5oc29jaywgcmVw
YWdlbnRfY2xpZW50X3JlYWQsDQpOVUxMLA0KKyAgICAgICAgICAgICAgICBOVUxMKTsNCisgICAg
ICAgIHdoaWxlIChnX2NsaWVudF9zdGF0ZS5pc19jb25uZWN0ZWQpIHsNCisgICAgICAgICAgICBw
cmludGYoIkNvbm5lY3RlZCAoJWQpLi4uXG4iLCBjKyspOw0KKyAgICAgICAgICAgIHVzbGVlcCgx
ICogMTAwMCAqIDEwMDApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgLyogVW5yZWdpc3RlciAqLw0K
KyAgICAgICAgcWVtdV9zZXRfZmRfaGFuZGxlcihnX2NsaWVudF9zdGF0ZS5oc29jaywgTlVMTCwg
TlVMTCwgTlVMTCk7DQorDQorICAgICAgICBwcmludGYoIkRpc2Nvbm5lY3RlZFxuIik7DQorICAg
ICAgICBnX2NsaWVudF9zdGF0ZS5pc19jb25uZWN0ZWQgPSAwOw0KKyAgICAgICAgY2xvc2UoZ19j
bGllbnRfc3RhdGUuaHNvY2spOw0KKw0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCit2
b2lkIHJlcGFnZW50X3Byb2Nlc3NfY21kKFJlcENtZCAqcGNtZCwgdWludDhfdCAqcGRhdGEsIHZv
aWQgKmNsaWVudFB0cikNCit7DQorICAgIGludCBpc19mcmVlX2RhdGEgPSAxOw0KKyAgICBwcmlu
dGYoIlJlcGFnZW50IGdvdCBjbWQgJWRcbiIsIHBjbWQtPmhkci5jbWRpZCk7DQorICAgIHN3aXRj
aCAocGNtZC0+aGRyLmNtZGlkKSB7DQorICAgIGNhc2UgUkVQSFVCX0NNRF9TVEFSVF9QUk9URUNU
OiB7DQorICAgICAgICBpc19mcmVlX2RhdGEgPSByZXBhZ2V0X3N0YXJ0X3Byb3RlY3QoKFJlcENt
ZFN0YXJ0UHJvdGVjdCAqKSBwY21kLA0KKyAgICAgICAgICAgICAgICAoUmVwQ21kRGF0YVN0YXJ0
UHJvdGVjdCAqKSBwZGF0YSk7DQorICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFJF
UEhVQl9DTURfUkVNT1RFX0lPX1JFUTogew0KKyAgICAgICAgaXNfZnJlZV9kYXRhID0gcmVwYWdl
bnRfcmVtb3RlX2lvKChSZXBDbWRSZW1vdGVJb1JlcSAqKSBwY21kLA0KcGRhdGEpOw0KKyAgICB9
DQorICAgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGFzc2VydCgwKTsNCisg
ICAgICAgIGJyZWFrOw0KKw0KKyAgICB9DQorDQorICAgIGlmIChpc19mcmVlX2RhdGEpIHsNCisg
ICAgICAgIGdfZnJlZShwZGF0YSk7DQorICAgIH0NCit9DQorDQoraW50IHJlcGFnZW50X2NsaWVu
dF9zZW5kKFJlcENtZCAqcF9jbWQpDQorew0KKyAgICBpbnQgYnl0ZWNvdW50ID0gMDsNCisgICAg
cHJpbnRmKCJTZW5kIGNtZCAldSwgZGF0YSBzaXplICV1XG4iLCBwX2NtZC0+aGRyLmNtZGlkLA0K
KyAgICAgICAgICAgIHBfY21kLT5oZHIuZGF0YV9zaXplX2J5dGVzKTsNCisgICAgaWYgKCFnX2Ns
aWVudF9zdGF0ZS5pc19jb25uZWN0ZWQpIHsNCisgICAgICAgIHByaW50ZigiTm90IGNvbm5lY3Rl
ZCB0byBodWJcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGJ5dGVj
b3VudCA9IHNlbmQoZ19jbGllbnRfc3RhdGUuaHNvY2ssIHBfY21kLA0KKyAgICAgICAgICAgIHNp
emVvZihSZXBDbWQpICsgcF9jbWQtPmhkci5kYXRhX3NpemVfYnl0ZXMsIDApOw0KKyAgICBpZiAo
Ynl0ZWNvdW50IDwgc2l6ZW9mKFJlcENtZCkgKyBwX2NtZC0+aGRyLmRhdGFfc2l6ZV9ieXRlcykg
ew0KKyAgICAgICAgcHJpbnRmKCJCYWQgc2VuZCAlZCwgZXJybm8gJWRcbiIsIGJ5dGVjb3VudCwg
ZXJybm8pOw0KKyAgICAgICAgcmV0dXJuIGJ5dGVjb3VudDsNCisgICAgfQ0KKw0KKyAgICAvKiBT
dWNjZXNzICovDQorICAgIHJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9ibG9jay9yZXBhZ2Vu
dC9yZXBhZ2VudF9jbGllbnQuaA0KYi9ibG9jay9yZXBhZ2VudC9yZXBhZ2VudF9jbGllbnQuaA0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjYyYTUzNzcNCi0tLSAvZGV2L251
bGwNCisrKyBiL2Jsb2NrL3JlcGFnZW50L3JlcGFnZW50X2NsaWVudC5oDQpAQCAtMCwwICsxLDM2
IEBADQorLyoNCisgKiBRRU1VIFN5c3RlbSBFbXVsYXRvcg0KKyAqDQorICogQ29weXJpZ2h0IChj
KSAyMDAzLTIwMDggRmFicmljZSBCZWxsYXJkDQorICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi
eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcNCmEgY29w
eQ0KKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl
cyAodGhlICJTb2Z0d2FyZSIpLA0KdG8gZGVhbA0KKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0
IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQ0KcmlnaHRzDQor
ICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs
aWNlbnNlLCBhbmQvb3INCnNlbGwNCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisgKiBmdXJuaXNoZWQgdG8g
ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKyAqDQorICogVGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg
YmUNCmluY2x1ZGVkIGluDQorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwNCkVYUFJFU1MgT1INCisgKiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GDQpNRVJDSEFO
VEFCSUxJVFksDQorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO
RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQNClNIQUxMDQorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ
R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCk9USEVSDQor
ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP
VEhFUldJU0UsDQpBUklTSU5HIEZST00sDQorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU
SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KSU4NCisgKiBUSEUg
U09GVFdBUkUuDQorICovDQorI2lmbmRlZiBSRVBBR0VOVF9DTElFTlRfSA0KKyNkZWZpbmUgUkVQ
QUdFTlRfQ0xJRU5UX0gNCisjaW5jbHVkZSAicmVwY21kLmgiDQorDQordHlwZWRlZiBzdHJ1Y3Qg
cmVwaHViX3BhcmFtcyB7DQorICAgIGNoYXIgKm5hbWU7DQorICAgIGludCBwb3J0Ow0KK30gcmVw
aHViX3BhcmFtczsNCisNCit2b2lkICpyZXBhZ2VudF9saXN0ZW4odm9pZCAqcFBhcmFtKTsNCitp
bnQgcmVwYWdlbnRfY2xpZW50X3NlbmQoUmVwQ21kICpwX2NtZCk7DQorDQorI2VuZGlmIC8qIFJF
UEFHRU5UX0NMSUVOVF9IICovDQpkaWZmIC0tZ2l0IGEvYmxvY2svcmVwYWdlbnQvcmVwYWdlbnRf
ZHJ2LmMgYi9ibG9jay9yZXBhZ2VudC9yZXBhZ2VudF9kcnYuYw0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCmluZGV4IDAwMDAwMDAuLjhjOWYyYjYNCi0tLSAvZGV2L251bGwNCisrKyBiL2Jsb2NrL3Jl
cGFnZW50L3JlcGFnZW50X2Rydi5jDQpAQCAtMCwwICsxLDE3NyBAQA0KKyNpbmNsdWRlIDxzdHJp
bmcuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1
ZGUgPHN0ZGludC5oPg0KKw0KKyNpbmNsdWRlICJibG9jay5oIg0KKyNpbmNsdWRlICJyZXBodWJf
ZGVmcy5oIg0KKyNpbmNsdWRlICJibG9ja19pbnQuaCINCisjaW5jbHVkZSAicmVwYWdlbnRfY2xp
ZW50LmgiDQorI2luY2x1ZGUgInJlcGFnZW50LmgiDQorI2luY2x1ZGUgInJlcGh1Yl9jbWRzLmgi
DQorI2luY2x1ZGUgIm1vZHVsZS5oIg0KKw0KKyNkZWZpbmUgWkVST19NRU1fT0JKKHBPYmopIG1l
bXNldChwT2JqLCAwLCBzaXplb2YoKnBPYmopKQ0KKw0KK3N0YXRpYyBpbnQgcmVwYWdlbnRfb3Bl
bihCbG9ja0RyaXZlclN0YXRlICpicywgaW50IGZsYWdzKQ0KK3sNCisgICAgcmVwYWdlbnRfcmVn
aXN0ZXJfZHJpdmUoYnMtPmZpbGVuYW1lLCAgYnMpOw0KKyAgICBwcmludGYoIiVzXG4iLCBfX2Z1
bmNfXyk7DQorICAgIGJzLT5zZyA9IGJzLT5maWxlLT5zZzsNCisgICAgcmV0dXJuIDA7DQorfQ0K
Kw0KK3N0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIHJlcGFnZW50X2NvX3JlYWR2KEJsb2NrRHJpdmVy
U3RhdGUgKmJzLA0KKyAgICAgICAgaW50NjRfdCBzZWN0b3JfbnVtLCBpbnQgbmJfc2VjdG9ycywg
UUVNVUlPVmVjdG9yICpxaW92KQ0KK3sNCisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOw0K
KyAgICByZXR1cm4gYmRydl9jb19yZWFkdihicy0+ZmlsZSwgc2VjdG9yX251bSwgbmJfc2VjdG9y
cywgcWlvdik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIHJlcGFnZW50X2NvX3dy
aXRldihCbG9ja0RyaXZlclN0YXRlICpicywNCisgICAgICAgIGludDY0X3Qgc2VjdG9yX251bSwg
aW50IG5iX3NlY3RvcnMsIFFFTVVJT1ZlY3RvciAqcWlvdikNCit7DQorICAgIHByaW50ZigiJXNc
biIsIF9fZnVuY19fKTsNCisgICAgaW50IHJldCA9IDA7DQorICAgIHJlcGFnZW50X2hhbmRsZV9w
cm90ZWN0ZWRfd3JpdGUoYnMsIHNlY3Rvcl9udW0sDQorICAgICAgICAgICAgbmJfc2VjdG9ycywg
cWlvdiwgcmV0KTsNCisgICAgcHJpbnRmKCJCZWZvcmUgd3JpdGUgb2ZmICVsbGQsIHNpemUgJWRc
biIsIChsb25nIGxvbmcgaW50KQ0Kc2VjdG9yX251bSwNCisgICAgICAgICAgICBuYl9zZWN0b3Jz
KTsNCisgICAgcmV0ID0gYmRydl9jb193cml0ZXYoYnMtPmZpbGUsIHNlY3Rvcl9udW0sIG5iX3Nl
Y3RvcnMsIHFpb3YpOw0KKyAgICBwcmludGYoIkFmdGVyIHdyaXRlIHJldCAlZFxuIiwgcmV0KTsN
CisgICAgcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgcmVwYWdlbnRfY2xvc2UoQmxv
Y2tEcml2ZXJTdGF0ZSAqYnMpDQorew0KKyAgICBwcmludGYoIiVzXG4iLCBfX2Z1bmNfXyk7DQor
fQ0KKw0KK3N0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIHJlcGFnZW50X2NvX2ZsdXNoKEJsb2NrRHJp
dmVyU3RhdGUgKmJzKQ0KK3sNCisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOw0KKyAgICBy
ZXR1cm4gYmRydl9jb19mbHVzaChicy0+ZmlsZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQ2NF90IHJl
cGFnZW50X2dldGxlbmd0aChCbG9ja0RyaXZlclN0YXRlICpicykNCit7DQorICAgIHByaW50Zigi
JXNcbiIsIF9fZnVuY19fKTsNCisgICAgcmV0dXJuIGJkcnZfZ2V0bGVuZ3RoKGJzLT5maWxlKTsN
Cit9DQorDQorc3RhdGljIGludCByZXBhZ2VudF90cnVuY2F0ZShCbG9ja0RyaXZlclN0YXRlICpi
cywgaW50NjRfdCBvZmZzZXQpDQorew0KKyAgICBwcmludGYoIiVzXG4iLCBfX2Z1bmNfXyk7DQor
ICAgIHJldHVybiBiZHJ2X3RydW5jYXRlKGJzLT5maWxlLCBvZmZzZXQpOw0KK30NCisNCitzdGF0
aWMgaW50IHJlcGFnZW50X3Byb2JlKGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLA0K
KyAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpDQorew0KKyAgICBwcmludGYoIiVzXG4iLCBf
X2Z1bmNfXyk7DQorICAgIHJldHVybiAxOyAvKiBldmVyeXRoaW5nIGNhbiBiZSBvcGVuZWQgYXMg
cmF3IGltYWdlICovDQorfQ0KKw0KK3N0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIHJlcGFnZW50X2Nv
X2Rpc2NhcmQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50NjRfdCBzZWN0b3JfbnVtLCBpbnQNCm5iX3NlY3RvcnMpDQorew0K
KyAgICByZXR1cm4gYmRydl9jb19kaXNjYXJkKGJzLT5maWxlLCBzZWN0b3JfbnVtLCBuYl9zZWN0
b3JzKTsNCit9DQorDQorc3RhdGljIGludCByZXBhZ2VudF9pc19pbnNlcnRlZChCbG9ja0RyaXZl
clN0YXRlICpicykNCit7DQorICAgIHByaW50ZigiJXNcbiIsIF9fZnVuY19fKTsNCisgICAgcmV0
dXJuIGJkcnZfaXNfaW5zZXJ0ZWQoYnMtPmZpbGUpOw0KK30NCisNCitzdGF0aWMgaW50IHJlcGFn
ZW50X21lZGlhX2NoYW5nZWQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpDQorew0KKyAgICBwcmludGYo
IiVzXG4iLCBfX2Z1bmNfXyk7DQorICAgIHJldHVybiBiZHJ2X21lZGlhX2NoYW5nZWQoYnMtPmZp
bGUpOw0KK30NCisNCitzdGF0aWMgdm9pZCByZXBhZ2VudF9lamVjdChCbG9ja0RyaXZlclN0YXRl
ICpicywgYm9vbCBlamVjdF9mbGFnKQ0KK3sNCisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18p
Ow0KKyAgICBiZHJ2X2VqZWN0KGJzLT5maWxlLCBlamVjdF9mbGFnKTsNCit9DQorDQorc3RhdGlj
IHZvaWQgcmVwYWdlbnRfbG9ja19tZWRpdW0oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGJvb2wgbG9j
a2VkKQ0KK3sNCisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOw0KKyAgICBiZHJ2X2xvY2tf
bWVkaXVtKGJzLT5maWxlLCBsb2NrZWQpOw0KK30NCisNCitzdGF0aWMgaW50IHJlcGFnZW50X2lv
Y3RsKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCB1bnNpZ25lZCBsb25nIGludCByZXEsDQorICAgICAg
ICB2b2lkICpidWYpDQorew0KKyAgICBwcmludGYoIiVzXG4iLCBfX2Z1bmNfXyk7DQorICAgcmV0
dXJuIGJkcnZfaW9jdGwoYnMtPmZpbGUsIHJlcSwgYnVmKTsNCit9DQorDQorc3RhdGljIEJsb2Nr
RHJpdmVyQUlPQ0IgKnJlcGFnZW50X2Fpb19pb2N0bChCbG9ja0RyaXZlclN0YXRlICpicywNCisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IHJlcSwgdm9pZCAqYnVmLA0KKyAgICAgICAgQmxvY2tE
cml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkNCit7DQorICAgIHByaW50Zigi
JXNcbiIsIF9fZnVuY19fKTsNCisgICByZXR1cm4gYmRydl9haW9faW9jdGwoYnMtPmZpbGUsIHJl
cSwgYnVmLCBjYiwgb3BhcXVlKTsNCit9DQorDQorc3RhdGljIGludCByZXBhZ2VudF9jcmVhdGUo
Y29uc3QgY2hhciAqZmlsZW5hbWUsIFFFTVVPcHRpb25QYXJhbWV0ZXINCipvcHRpb25zKQ0KK3sN
CisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOw0KKyAgICByZXR1cm4gYmRydl9jcmVhdGVf
ZmlsZShmaWxlbmFtZSwgb3B0aW9ucyk7DQorfQ0KKw0KK3N0YXRpYyBRRU1VT3B0aW9uUGFyYW1l
dGVyIHJlcGFnZW50X2NyZWF0ZV9vcHRpb25zW10gPSB7DQorICAgIHsNCisgICAgICAgIC5uYW1l
ID0gQkxPQ0tfT1BUX1NJWkUsDQorICAgICAgICAudHlwZSA9IE9QVF9TSVpFLA0KKyAgICAgICAg
LmhlbHAgPSAiVmlydHVhbCBkaXNrIHNpemUiDQorICAgIH0sDQorICAgIHsgTlVMTCB9DQorfTsN
CisNCitzdGF0aWMgaW50IHJlcGFnZW50X2hhc196ZXJvX2luaXQoQmxvY2tEcml2ZXJTdGF0ZSAq
YnMpDQorew0KKyAgICBwcmludGYoIiVzXG4iLCBfX2Z1bmNfXyk7DQorICAgIHJldHVybiBiZHJ2
X2hhc196ZXJvX2luaXQoYnMtPmZpbGUpOw0KK30NCisNCitzdGF0aWMgQmxvY2tEcml2ZXIgYmRy
dl9yZXBhZ2VudCA9IHsNCisgICAgLmZvcm1hdF9uYW1lICAgICAgICA9ICJyZXBhZ2VudCIsDQor
DQorICAgIC8qIEl0J3MgcmVhbGx5IDAsIGJ1dCB3ZSBuZWVkIHRvIG1ha2UgZ19tYWxsb2MoKSBo
YXBweSAqLw0KKyAgICAuaW5zdGFuY2Vfc2l6ZSAgICAgID0gMSwNCisNCisgICAgLmJkcnZfb3Bl
biAgICAgICAgICA9IHJlcGFnZW50X29wZW4sDQorICAgIC5iZHJ2X2Nsb3NlICAgICAgICAgPSBy
ZXBhZ2VudF9jbG9zZSwNCisNCisgICAgLmJkcnZfY29fcmVhZHYgICAgICAgICAgPSByZXBhZ2Vu
dF9jb19yZWFkdiwNCisgICAgLmJkcnZfY29fd3JpdGV2ICAgICAgICAgPSByZXBhZ2VudF9jb193
cml0ZXYsDQorICAgIC5iZHJ2X2NvX2ZsdXNoX3RvX2Rpc2sgID0gcmVwYWdlbnRfY29fZmx1c2gs
DQorICAgIC5iZHJ2X2NvX2Rpc2NhcmQgICAgICAgID0gcmVwYWdlbnRfY29fZGlzY2FyZCwNCisN
CisgICAgLmJkcnZfcHJvYmUgICAgICAgICA9IHJlcGFnZW50X3Byb2JlLA0KKyAgICAuYmRydl9n
ZXRsZW5ndGggICAgID0gcmVwYWdlbnRfZ2V0bGVuZ3RoLA0KKyAgICAuYmRydl90cnVuY2F0ZSAg
ICAgID0gcmVwYWdlbnRfdHJ1bmNhdGUsDQorDQorICAgIC5iZHJ2X2lzX2luc2VydGVkICAgPSBy
ZXBhZ2VudF9pc19pbnNlcnRlZCwNCisgICAgLmJkcnZfbWVkaWFfY2hhbmdlZCA9IHJlcGFnZW50
X21lZGlhX2NoYW5nZWQsDQorICAgIC5iZHJ2X2VqZWN0ICAgICAgICAgPSByZXBhZ2VudF9lamVj
dCwNCisgICAgLmJkcnZfbG9ja19tZWRpdW0gICA9IHJlcGFnZW50X2xvY2tfbWVkaXVtLA0KKw0K
KyAgICAuYmRydl9pb2N0bCAgICAgICAgID0gcmVwYWdlbnRfaW9jdGwsDQorICAgIC5iZHJ2X2Fp
b19pb2N0bCAgICAgPSByZXBhZ2VudF9haW9faW9jdGwsDQorDQorICAgIC5iZHJ2X2NyZWF0ZSAg
ICAgICAgPSByZXBhZ2VudF9jcmVhdGUsDQorICAgIC5jcmVhdGVfb3B0aW9ucyAgICAgPSByZXBh
Z2VudF9jcmVhdGVfb3B0aW9ucywNCisgICAgLmJkcnZfaGFzX3plcm9faW5pdCA9IHJlcGFnZW50
X2hhc196ZXJvX2luaXQsDQorfTsNCisNCitzdGF0aWMgdm9pZCBiZHJ2X3JlcGFnZW50X2luaXQo
dm9pZCkNCit7DQorICAgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfcmVwYWdlbnQpOw0KK30NCisNCiti
bG9ja19pbml0KGJkcnZfcmVwYWdlbnRfaW5pdCk7DQpkaWZmIC0tZ2l0IGEvYmxvY2svcmVwYWdl
bnQvcmVwY21kLmggYi9ibG9jay9yZXBhZ2VudC9yZXBjbWQuaA0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCmluZGV4IDAwMDAwMDAuLmUzMmFjZjUNCi0tLSAvZGV2L251bGwNCisrKyBiL2Jsb2NrL3Jl
cGFnZW50L3JlcGNtZC5oDQpAQCAtMCwwICsxLDU5IEBADQorLyoNCisgKiBRRU1VIFN5c3RlbSBF
bXVsYXRvcg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggRmFicmljZSBCZWxsYXJk
DQorICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg
dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcNCmEgY29weQ0KKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5k
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KdG8gZGVh
bA0KKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0
aG91dCBsaW1pdGF0aW9uIHRoZQ0KcmlnaHRzDQorICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l
cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3INCnNlbGwNCisgKiBj
b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg
U29mdHdhcmUgaXMNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOg0KKyAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUNCmluY2x1ZGVkIGluDQorICogYWxsIGNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorICoNCisgKiBU
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwNCkVYUFJFU1MgT1INCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE
IFRPIFRIRSBXQVJSQU5USUVTIE9GDQpNRVJDSEFOVEFCSUxJVFksDQorICogRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQNClNI
QUxMDQorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB
TlkgQ0xBSU0sIERBTUFHRVMgT1INCk9USEVSDQorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQpBUklTSU5HIEZST00sDQor
ICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP
UiBPVEhFUiBERUFMSU5HUw0KSU4NCisgKiBUSEUgU09GVFdBUkUuDQorICovDQorI2lmbmRlZiBS
RVBDTURfSA0KKyNkZWZpbmUgUkVQQ01EX0gNCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQor
I2RlZmluZSBSRVBDTURfTUFHSUMxICgweDExMjIpDQorI2RlZmluZSBSRVBDTURfTUFHSUMyICgw
eDMzNDQpDQorI2RlZmluZSBSRVBDTURfTlVNX1UzMl9QQVJBTVMgKDExKQ0KKw0KK2VudW0gUmVw
Q21kcyB7DQorICAgIFJFUENNRF9GSVJTVF9JTlZBTElEICAgICAgICAgICAgICAgICAgICA9IDAs
DQorICAgIFJFUENNRF9GSVJTVF9IVUJDTUQgICAgICAgICAgICAgICAgICAgICA9IDEsDQorICAg
IFJFUEhVQl9DTURfUFJPVEVDVEVEX1dSSVRFICAgICAgICAgICAgICA9IDIsDQorICAgIFJFUEhV
Ql9DTURfUkVQT1JUX1ZNX1ZPTFVNRVMgICAgICAgICAgICA9IDMsDQorICAgIFJFUEhVQl9DTURf
U1RBUlRfUFJPVEVDVCAgICAgICAgICAgICAgICA9IDQsDQorICAgIFJFUEhVQl9DTURfUkVNT1RF
X0lPX1JFUSAgICAgICAgICAgICAgICAgPSA1LA0KKyAgICBSRVBIVUJfQ01EX1JFTU9URV9JT19S
RVMJCQkJCT0gNiwNCisgICAgUkVQSFVCX0NNRF9BR0VOVF9TSFVURE9XTiAgICAgICAgICAgICAg
ID0gNywNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFJlcENtZEhkciB7DQorICAgIHVpbnQxNl90
IG1hZ2ljMTsNCisgICAgdWludDE2X3QgY21kaWQ7DQorICAgIHVpbnQzMl90IGRhdGFfc2l6ZV9i
eXRlczsNCit9IFJlcENtZEhkcjsNCisNCit0eXBlZGVmIHN0cnVjdCBSZXBDbWQgew0KKyAgICBS
ZXBDbWRIZHIgaGRyOw0KKyAgICB1bnNpZ25lZCBpbnQgcGFyYW1ldGVyc1tSRVBDTURfTlVNX1Uz
Ml9QQVJBTVNdOw0KKyAgICB1bnNpZ25lZCBpbnQgbWFnaWMyOw0KKyAgICB1aW50OF90IGRhdGFb
MF07DQorfSBSZXBDbWQ7DQorDQorUmVwQ21kICpyZXBjbWRfbmV3KGludCBjbWRfaWQsIGludCBk
YXRhX3NpemUsIHVpbnQ4X3QgKipwX291dF9wZGF0YSk7DQorDQorI2VuZGlmIC8qIFJFUENNRF9I
ICovDQpkaWZmIC0tZ2l0IGEvYmxvY2svcmVwYWdlbnQvcmVwY21kX2xpc3RlbmVyLmMNCmIvYmxv
Y2svcmVwYWdlbnQvcmVwY21kX2xpc3RlbmVyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl
eCAwMDAwMDAwLi41NGQzZjYwDQotLS0gL2Rldi9udWxsDQorKysgYi9ibG9jay9yZXBhZ2VudC9y
ZXBjbWRfbGlzdGVuZXIuYw0KQEAgLTAsMCArMSwxNzMgQEANCisjaW5jbHVkZSA8ZmNudGwuaD4N
CisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxl
cnJuby5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQor
I2luY2x1ZGUgPHJlc29sdi5oPg0KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQorI2luY2x1ZGUg
PGFycGEvaW5ldC5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8cHRocmVhZC5o
Pg0KKyNpbmNsdWRlIDxhc3NlcnQuaD4NCisNCisvKiBVc2UgdGhlIENPTkZJR19SRVBBR0VOVCBm
bGFnIHRvIGRldGVybWluZSB3aGV0aGVyDQorICogd2UncmUgdW5kZXIgcWVtdSBidWlsZCBvciBh
IGh1YiBXaGVuIHVuZGVyDQorICogcWVtdSB1c2UgZ19tYWxsb2MgKi8NCisjaWZkZWYgQ09ORklH
X1JFUEFHRU5UDQorI2luY2x1ZGUgPGdsaWIuaD4NCisjZGVmaW5lIFJFUENNRF9NQUxMT0MgZ19t
YWxsb2MNCisjZWxzZQ0KKyNkZWZpbmUgUkVQQ01EX01BTExPQyBtYWxsb2MNCisjZW5kaWYNCisN
CisjaW5jbHVkZSAicmVwY21kLmgiDQorI2luY2x1ZGUgInJlcGNtZF9saXN0ZW5lci5oIg0KKw0K
KyNkZWZpbmUgWkVST19NRU1fT0JKKHBPYmopIG1lbXNldCgodm9pZCAqKXBPYmosIDAsIHNpemVv
ZigqcE9iaikpDQorDQorDQordHlwZWRlZiBzdHJ1Y3QgUmVwQ21kUnhDbWRTdGF0ZSB7DQorICAg
IFJlcENtZCBjdXJDbWQ7DQorICAgIHVpbnQ4X3QgKnBSZWFkQnVmOw0KKyAgICBpbnQgYnl0ZXNU
b0dldDsNCisgICAgaW50IGJ5dGVzR290dGVuOw0KKyAgICBpbnQgaXNHb3RIZWFkZXI7DQorICAg
IHVpbnQ4X3QgKnBkYXRhOw0KK30gUmVwQ21kUnhDbWRTdGF0ZTsNCisNCit0eXBlZGVmIHN0cnVj
dCBSZXBDbWRMaXN0ZW5lclN0YXRlIHsNCisgICAgaW50IGlzX3Rlcm1pbmF0ZV9yZWNlaXZlOw0K
KyAgICBwZm5fcmVjZWl2ZWRfY21kX2NiICByZWNlaXZlX2NiOw0KKyAgICB2b2lkICpvcGFxdWU7
DQorICAgIGludCBoc29jazsNCisgICAgUmVwQ21kUnhDbWRTdGF0ZSBjdXJfY21kOw0KK30gUmVw
Q21kTGlzdGVuZXJTdGF0ZTsNCisNCitzdGF0aWMgUmVwQ21kTGlzdGVuZXJTdGF0ZSBnX2xpc3Rl
bmVyU3RhdGUgPSB7IDAgfTsNCisNCitzdGF0aWMgaW50IHJlcGNtZF9saXN0ZW5lcl9wcm9jZXNz
X3J4KGludCBieXRlY291bnQpOw0KKw0KK3ZvaWQgcmVwY21kX2xpc3RlbmVyX2luaXQocGZuX3Jl
Y2VpdmVkX2NtZF9jYiBjYWxsYmFjaywgdm9pZCAqb3BhcXVlKQ0KK3sNCisgICAgWkVST19NRU1f
T0JKKCZnX2xpc3RlbmVyU3RhdGUpOw0KKyAgICBnX2xpc3RlbmVyU3RhdGUucmVjZWl2ZV9jYiA9
IGNhbGxiYWNrOw0KKyAgICBnX2xpc3RlbmVyU3RhdGUub3BhcXVlID0gb3BhcXVlOw0KKw0KKyAg
ICBnX2xpc3RlbmVyU3RhdGUuY3VyX2NtZC5ieXRlc1RvR2V0ID0gc2l6ZW9mKFJlcENtZCk7DQor
ICAgIGdfbGlzdGVuZXJTdGF0ZS5jdXJfY21kLnBSZWFkQnVmID0NCisgICAgICAgICAgICAodWlu
dDhfdCAqKSAmZ19saXN0ZW5lclN0YXRlLmN1cl9jbWQuY3VyQ21kOw0KK30NCisNCitpbnQgcmVw
Y21kX2xpc3RlbmVyX3NvY2tldF9yZWFkX25leHRfYnVmKGludCBoc29jaykNCit7DQorICAgIFJl
cENtZFJ4Q21kU3RhdGUgKmNtZF9zdGF0ZSA9ICZnX2xpc3RlbmVyU3RhdGUuY3VyX2NtZDsNCisg
ICAgaW50IGJ5dGVjb3VudCA9IHJlY3YoaHNvY2ssIGNtZF9zdGF0ZS0+cFJlYWRCdWYgKw0KY21k
X3N0YXRlLT5ieXRlc0dvdHRlbiwNCisgICAgICAgICAgICBjbWRfc3RhdGUtPmJ5dGVzVG9HZXQg
LSBjbWRfc3RhdGUtPmJ5dGVzR290dGVuLCAwKTsNCisgICAgcmV0dXJuIHJlcGNtZF9saXN0ZW5l
cl9wcm9jZXNzX3J4KGJ5dGVjb3VudCk7DQorfQ0KKw0KKy8qIFJldHVybnMgMCBmb3IgaW5pdGlh
dGVkIHRlcm1pbmF0aW9uIG9yIHNvY2tldCBlcnJvciB2YWx1ZSBvbiBlcnJvciAqLw0KK2ludCBy
ZXBjbWRfbGlzdGVuZXJfc29ja2V0X3RocmVhZF9saXN0ZW5lcihpbnQgaHNvY2spDQorew0KKyAg
ICBpbnQgcmV0ID0gMDsNCisgICAgLyogcmVjZWl2ZSBsb29wICovDQorICAgIHdoaWxlICghZ19s
aXN0ZW5lclN0YXRlLmlzX3Rlcm1pbmF0ZV9yZWNlaXZlKSB7DQorICAgICAgICByZXQgPSByZXBj
bWRfbGlzdGVuZXJfc29ja2V0X3JlYWRfbmV4dF9idWYoaHNvY2spOw0KKyAgICAgICAgaWYgKHJl
dCA8PSAwKSB7DQorICAgICAgICAgICAgcmV0dXJuIHJldDsNCisgICAgICAgIH0NCisgICAgfQ0K
KyAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCByZXBjbWRfbGlzdGVuZXJfcHJvY2Vz
c19yeChpbnQgYnl0ZWNvdW50KQ0KK3sNCisgICAgUmVwQ21kUnhDbWRTdGF0ZSAqY21kX3N0YXRl
ID0gJmdfbGlzdGVuZXJTdGF0ZS5jdXJfY21kOw0KKyAgICBpZiAoYnl0ZWNvdW50ID09IC0xKSB7
DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJlY2VpdmluZyBkYXRhICVkXG4iLCBl
cnJubyk7DQorICAgICAgICByZXR1cm4gZXJybm87DQorICAgIH0NCisNCisgICAgaWYgKGJ5dGVj
b3VudCA9PSAwKSB7DQorICAgICAgICBwcmludGYoIkRpc2Nvbm5lY3RlZFxuIik7DQorICAgICAg
ICByZXR1cm4gMDsNCisgICAgfQ0KKyAgICBjbWRfc3RhdGUtPmJ5dGVzR290dGVuICs9IGJ5dGVj
b3VudDsNCisvKiAgICAgcHJpbnRmKCJSZWNpZXZlZCBieXRlcyAlZCwgZ290ICVkLyVkXG4iLA0K
KyAgICAgICAgICAgIGJ5dGVjb3VudCwgY21kX3N0YXRlLT5ieXRlc0dvdHRlbiwgY21kX3N0YXRl
LT5ieXRlc1RvR2V0KTsgKi8NCisgICAgLyogcHJpbnQgY29udGVudCAqLw0KKyAgICBpZiAoMCkg
ew0KKyAgICAgICAgaW50IGk7DQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZWNvdW50IDsg
aSArPSA0KSB7DQorICAgICAgICAgICAgLypwcmludGYoIiVkLyVkIiwgaSwgYnl0ZWNvdW50LzQp
OyAqLw0KKyAgICAgICAgICAgIHByaW50ZigNCisgICAgICAgICAgICAgICAgICAgICIlI3ggIiwN
CisgICAgICAgICAgICAgICAgICAgICooaW50ICopICgmY21kX3N0YXRlLT5wUmVhZEJ1ZltjbWRf
c3RhdGUtPmJ5dGVzR290dGVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYnl0ZWNv
dW50ICsgaV0pKTsNCisNCisgICAgICAgIH0NCisgICAgICAgIHByaW50ZigiXG4iKTsNCisgICAg
fQ0KKyAgICBhc3NlcnQoY21kX3N0YXRlLT5ieXRlc0dvdHRlbiA8PSBjbWRfc3RhdGUtPmJ5dGVz
VG9HZXQpOw0KKyAgICBpZiAoY21kX3N0YXRlLT5ieXRlc0dvdHRlbiA9PSBjbWRfc3RhdGUtPmJ5
dGVzVG9HZXQpIHsNCisgICAgICAgIGludCBpc0dvdERhdGEgPSAwOw0KKyAgICAgICAgY21kX3N0
YXRlLT5ieXRlc0dvdHRlbiA9IDA7DQorICAgICAgICBpZiAoIWNtZF9zdGF0ZS0+aXNHb3RIZWFk
ZXIpIHsNCisgICAgICAgICAgICAvKiBXZSBqdXN0IGdvdCB0aGUgaGVhZGVyICovDQorICAgICAg
ICAgICAgY21kX3N0YXRlLT5pc0dvdEhlYWRlciA9IDE7DQorDQorICAgICAgICAgICAgYXNzZXJ0
KGNtZF9zdGF0ZS0+Y3VyQ21kLmhkci5tYWdpYzEgPT0gUkVQQ01EX01BR0lDMSk7DQorICAgICAg
ICAgICAgYXNzZXJ0KGNtZF9zdGF0ZS0+Y3VyQ21kLm1hZ2ljMiA9PSBSRVBDTURfTUFHSUMyKTsN
CisgICAgICAgICAgICBpZiAoY21kX3N0YXRlLT5jdXJDbWQuaGRyLmRhdGFfc2l6ZV9ieXRlcyA+
IDApIHsNCisgICAgICAgICAgICAgICAgY21kX3N0YXRlLT5wZGF0YSA9ICh1aW50OF90ICopUkVQ
Q01EX01BTExPQygNCisgICAgICAgICAgICAgICAgICAgICAgICBjbWRfc3RhdGUtPmN1ckNtZC5o
ZHIuZGF0YV9zaXplX2J5dGVzKTsNCisvKiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJtYWxs
b2MgJXBcbiIsIGNtZF9zdGF0ZS0+cGRhdGEpOyAqLw0KKyAgICAgICAgICAgICAgICBjbWRfc3Rh
dGUtPnBSZWFkQnVmID0gY21kX3N0YXRlLT5wZGF0YTsNCisgICAgICAgICAgICB9IGVsc2Ugew0K
KyAgICAgICAgICAgICAgICAvKiBubyBkYXRhICovDQorICAgICAgICAgICAgICAgIGlzR290RGF0
YSA9IDE7DQorICAgICAgICAgICAgICAgIGNtZF9zdGF0ZS0+cGRhdGEgPSBOVUxMOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICBjbWRfc3RhdGUtPmJ5dGVzVG9HZXQgPQ0KY21kX3N0YXRl
LT5jdXJDbWQuaGRyLmRhdGFfc2l6ZV9ieXRlczsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAg
ICAgICAgaXNHb3REYXRhID0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChpc0dvdERh
dGEpIHsNCisgICAgICAgICAgICAvKiBHb3QgY29tbWFuZCBhbmQgZGF0YSAqLw0KKyAgICAgICAg
ICAgICgqZ19saXN0ZW5lclN0YXRlLnJlY2VpdmVfY2IpKCZjbWRfc3RhdGUtPmN1ckNtZCwNCmNt
ZF9zdGF0ZS0+cGRhdGEsDQorICAgICAgICAgICAgICAgICAgICBnX2xpc3RlbmVyU3RhdGUub3Bh
cXVlKTsNCisNCisgICAgICAgICAgICAvKiBJdCdzIHRoZSBjYWxsZWUgcmVzcG9uc2liaWxpdHkg
dG8gZnJlZSBjbWRfc3RhdGUtPnBkYXRhICovDQorICAgICAgICAgICAgY21kX3N0YXRlLT5wZGF0
YSA9IE5VTEw7DQorICAgICAgICAgICAgWkVST19NRU1fT0JKKCZjbWRfc3RhdGUtPmN1ckNtZCk7
DQorICAgICAgICAgICAgY21kX3N0YXRlLT5wUmVhZEJ1ZiA9ICh1aW50OF90ICopICZjbWRfc3Rh
dGUtPmN1ckNtZDsNCisgICAgICAgICAgICBjbWRfc3RhdGUtPmJ5dGVzR290dGVuID0gMDsNCisg
ICAgICAgICAgICBjbWRfc3RhdGUtPmJ5dGVzVG9HZXQgPSBzaXplb2YoUmVwQ21kKTsNCisgICAg
ICAgICAgICBjbWRfc3RhdGUtPmlzR290SGVhZGVyID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0K
KyAgICByZXR1cm4gYnl0ZWNvdW50Ow0KK30NCisNCitSZXBDbWQgKnJlcGNtZF9uZXcoaW50IGNt
ZF9pZCwgaW50IGRhdGFfc2l6ZSwgdWludDhfdCAqKnBfb3V0X3BkYXRhKQ0KK3sNCisgICAgUmVw
Q21kICpwX2NtZCA9IChSZXBDbWQgKilSRVBDTURfTUFMTE9DKHNpemVvZihSZXBDbWQpICsgZGF0
YV9zaXplKTsNCisgICAgYXNzZXJ0KHBfY21kICE9IE5VTEwpOw0KKw0KKyAgICAvKiBaZXJvIHRo
ZSBDTUQgKG5vdCB0aGUgZGF0YSkgKi8NCisgICAgWkVST19NRU1fT0JKKHBfY21kKTsNCisNCisg
ICAgcF9jbWQtPmhkci5jbWRpZCA9IGNtZF9pZDsNCisgICAgcF9jbWQtPmhkci5tYWdpYzEgPSBS
RVBDTURfTUFHSUMxOw0KKyAgICBwX2NtZC0+bWFnaWMyID0gUkVQQ01EX01BR0lDMjsNCisgICAg
cF9jbWQtPmhkci5kYXRhX3NpemVfYnl0ZXMgPSBkYXRhX3NpemU7DQorDQorICAgIGlmIChwX291
dF9wZGF0YSAhPSBOVUxMKSB7DQorICAgICAgICAqcF9vdXRfcGRhdGEgPSBwX2NtZC0+ZGF0YTsN
CisgICAgfQ0KKw0KKyAgICByZXR1cm4gcF9jbWQ7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2Jsb2Nr
L3JlcGFnZW50L3JlcGNtZF9saXN0ZW5lci5oDQpiL2Jsb2NrL3JlcGFnZW50L3JlcGNtZF9saXN0
ZW5lci5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMTliOWVhOQ0KLS0t
IC9kZXYvbnVsbA0KKysrIGIvYmxvY2svcmVwYWdlbnQvcmVwY21kX2xpc3RlbmVyLmgNCkBAIC0w
LDAgKzEsMzQgQEANCisvKg0KKyAqIFFFTVUgU3lzdGVtIEVtdWxhdG9yDQorICoNCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDMtMjAwOCBGYWJyaWNlIEJlbGxhcmQNCisgKg0KKyAqIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
Zw0KYSBjb3B5DQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQp0byBkZWFsDQorICogaW4gdGhlIFNvZnR3YXJl
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlDQpy
aWdodHMNCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1
dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcg0Kc2VsbA0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyAqIGZ1cm5p
c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoN
CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBzaGFsbCBiZQ0KaW5jbHVkZWQgaW4NCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv
cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCisgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KRVhQUkVTUyBPUg0KKyAq
IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YN
Ck1FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVA0KU0hBTEwNCisgKiBUSEUgQVVUSE9SUyBP
UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0K
T1RIRVINCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU
T1JUIE9SIE9USEVSV0lTRSwNCkFSSVNJTkcgRlJPTSwNCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTDQpJTg0K
KyAqIFRIRSBTT0ZUV0FSRS4NCisgKi8NCisjaWZuZGVmIFJFUENNRF9MSVNURU5FUl9IDQorI2Rl
ZmluZSBSRVBDTURfTElTVEVORVJfSA0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCit0eXBlZGVmIHZv
aWQgKCpwZm5fcmVjZWl2ZWRfY21kX2NiKShSZXBDbWQgKnBjbWQsDQorICAgICAgICAgICAgICAg
IHVpbnQ4X3QgKnBkYXRhLCB2b2lkICpvcGFxdWUpOw0KKw0KK3ZvaWQgcmVwY21kX2xpc3RlbmVy
X2luaXQocGZuX3JlY2VpdmVkX2NtZF9jYiBjYWxsYmFjaywgdm9pZCAqb3BhcXVlKTsNCitpbnQg
cmVwY21kX2xpc3RlbmVyX3NvY2tldF9yZWFkX25leHRfYnVmKGludCBoc29jayk7DQoraW50IHJl
cGNtZF9saXN0ZW5lcl9zb2NrZXRfdGhyZWFkX2xpc3RlbmVyKGludCBoc29jayk7DQorDQorI2Vu
ZGlmIC8qIFJFUENNRF9MSVNURU5FUl9IICovDQpkaWZmIC0tZ2l0IGEvYmxvY2svcmVwYWdlbnQv
cmVwaHViX2NtZHMuaCBiL2Jsb2NrL3JlcGFnZW50L3JlcGh1Yl9jbWRzLmgNCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5jYjczN2U2DQotLS0gL2Rldi9udWxsDQorKysgYi9i
bG9jay9yZXBhZ2VudC9yZXBodWJfY21kcy5oDQpAQCAtMCwwICsxLDE1NCBAQA0KKy8qDQorICog
UUVNVSBTeXN0ZW0gRW11bGF0b3INCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IEZh
YnJpY2UgQmVsbGFyZA0KKyAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nDQphIGNvcHkNCisgKiBvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh
cmUiKSwNCnRvIGRlYWwNCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUNCnJpZ2h0cw0KKyAqIHRvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y
DQpzZWxsDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z
IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0
IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlDQppbmNsdWRlZCBp
bg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl
Lg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsDQpFWFBSRVNTIE9SDQorICogSU1QTElFRCwgSU5DTFVESU5HIEJV
VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KTUVSQ0hBTlRBQklMSVRZLA0KKyAq
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElO
IE5PIEVWRU5UDQpTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SDQpPVEhFUg0KKyAqIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLA0KQVJJ
U0lORyBGUk9NLA0KKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF
IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MNCklODQorICogVEhFIFNPRlRXQVJFLg0KKyAq
Lw0KKyNpZm5kZWYgUkVQSFVCX0NNRFNfSA0KKyNkZWZpbmUgUkVQSFVCX0NNRFNfSA0KKw0KKyNp
bmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSAicmVwY21kLmgiDQorI2luY2x1ZGUgInJlcGh1
Yl9kZWZzLmgiDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKg0KKyAqIFJlcENtZCBSZXBvcnQgYSBwcm90ZWN0ZWQgSU8NCisgKg0K
KyAqIFJFUEhVQl9DTURfUFJPVEVDVEVEX1dSSVRFDQorICogRGlyZWN0aW9uOiBhZ2VudC0+aHVi
DQorICoNCisgKiBBbnkgd3JpdGUgb2YgYSBwcm90ZWN0ZWQgdm9sdW1lIGlzIHNlbmQgd2l0aCB0
aGlzDQorICogbWVzc2FnZSB0byB0aGUgaHViLCB3aXRoIGl0cyBzdGF0dXMuDQorICogV2hlbiBj
YXNlIHRoZSBzdGF0dXMgaXMgYmFkIG5vIGRhdGEgaXMgc2VudA0KKyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordHlwZWRlZiBzdHJ1
Y3QgUmVwQ21kUHJvdGVjdGVkV3JpdGUgew0KKyAgICBSZXBDbWRIZHIgaGRyOw0KKyAgICB1aW50
NjRfdCB2b2x1bWVfaWQ7DQorICAgIHVpbnQ2NF90IG9mZnNldF9zZWN0b3JzOw0KKyAgICAvKiBU
aGUgc2l6ZSBmaWVsZCBkdXBsaWNhdGVzIHRoZSBSZXBDbWQgc2l6ZSwNCisgICAgICogYnV0IGl0
IGlzIG5lZWRlZCBmb3IgcmVwb3J0aW5nIGZhaWxlZCBJT3MnIHNpemVzICovDQorICAgIHVpbnQz
Ml90IHNpemVfc2VjdG9yczsNCisgICAgaW50IHJldF9zdGF0dXM7DQorfSBSZXBDbWRQcm90ZWN0
ZWRXcml0ZTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqDQorICogUmVwQ21kIFJlcG9ydCBWTSB2b2x1bWVzDQorICoNCisgKiBS
RVBIVUJfQ01EX1JFUE9SVF9WTV9WT0xVTUVTDQorICogRGlyZWN0aW9uOiBhZ2VudC0+aHViDQor
ICoNCisgKiBUaGUgYWdlbnQgcmVwb3J0cyBhbGwgdGhlIHZvbHVtZXMgb2YgdGhlIFZNDQorICog
dG8gdGhlIGh1Yi4NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLw0KK3R5cGVkZWYgc3RydWN0IFJlcFZtVm9sdW1lSW5mbyB7DQorICAg
IGNoYXIgbmFtZVtSRVBIVUJfTUFYX1ZPTF9OQU1FX0xFTl07DQorICAgIHVpbnQ2NF90IHZvbHVt
ZV9pZDsNCisgICAgdWludDMyX3Qgc2l6ZV9tYjsNCisgICAgdWludDMyX3QgcGFkZGluZzsNCit9
IFJlcFZtVm9sdW1lSW5mbzsNCisNCit0eXBlZGVmIHN0cnVjdCBSZXBDbWRSZXBvcnRWbVZvbHVt
ZXMgew0KKyAgICBSZXBDbWRIZHIgaGRyOw0KKyAgICBpbnQgbnVtX3ZvbHVtZXM7DQorfSBSZXBD
bWRSZXBvcnRWbVZvbHVtZXM7DQorDQordHlwZWRlZiBzdHJ1Y3QgUmVwQ21kRGF0YVJlcG9ydFZt
Vm9sdW1lcyB7DQorICAgIFJlcFZtVm9sdW1lSW5mbyB2b2x1bWVzWzBdOw0KK30gUmVwQ21kRGF0
YVJlcG9ydFZtVm9sdW1lczsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogUmVwQ21kIFN0YXJ0IHByb3RlY3QNCisg
Kg0KKyAqIFJFUEhVQl9DTURfU1RBUlRfUFJPVEVDVA0KKyAqIERpcmVjdGlvbjogaHViLT5hZ2Vu
dA0KKyAqDQorICogVGhlIGh1YiBpbnN0cnVjdHMgdGhlIGFnZW50IHRvIHN0YXJ0IHByb3RlY3Rp
bmcNCisgKiBhIHZvbHVtZS4gV2hlbiBhIHZvbHVtZSBpcyBwcm90ZWN0ZWQgYWxsIGl0cyB3cml0
ZXMNCisgKiBhcmUgc2VudCB0byB0byB0aGUgaHViLg0KKyAqIFdpdGggdGhpcyBjb21tYW5kIHRo
ZSBodWIgYWxzbyBhc3NpZ25zIGEgdm9sdW1lIElEIHRvDQorICogdGhlIGdpdmVuIHZvbHVtZSBu
YW1lLg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovDQordHlwZWRlZiBzdHJ1Y3QgUmVwQ21kU3RhcnRQcm90ZWN0IHsNCisgICAgUmVw
Q21kSGRyIGhkcjsNCisgICAgdWludDY0X3Qgdm9sdW1lX2lkOw0KK30gUmVwQ21kU3RhcnRQcm90
ZWN0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFJlcENtZERhdGFTdGFydFByb3RlY3Qgew0KKyAgICBj
aGFyIHZvbHVtZV9uYW1lW1JFUEhVQl9NQVhfVk9MX05BTUVfTEVOXTsNCit9IFJlcENtZERhdGFT
dGFydFByb3RlY3Q7DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKg0KKyAqIFJlcENtZCBSZW1vdGUgSU8gUmVxdWVzdA0KKyAq
DQorICogUkVQSFVCX0NNRF9SRU1PVEVfSU9fUkVRDQorICogRGlyZWN0aW9uOiBodWItPmFnZW50
DQorICoNCisgKiBUaGUgaHViIGlzc3VlcyBhbiBJTyB0byBhIHZvbHVtZS4NCisgKiBUaGlzIGNv
bW1hbmQgaXMgdXNlZCBmb3I6DQorICogLSBSZWFkaW5nIHByb3RlY3RlZCB2b2x1bWUgZHVyaW5n
IHN5bmMNCisgKiAtIFJlYWQvd3JpdGUgdG8gYSByZWNvdmVyeSB2b2x1bWUgZHVyaW5nDQorICog
ICAgIHByb3RlY3QgYW5kIGZhaWxvdmVyIG9yIGZhaWxvdmVyIHRlc3QNCisgKiBUaGlzIGNvbW1h
bmQgaXMgYSByZXF1ZXN0LCB0aGUgcmVhZCBkYXRhIGlzIHJldHVybmVkDQorICogYnkgdGhlIHJl
c3BvbnNlIGNvbW1hbmQgUkVQSFVCX0NNRF9SRU1PVEVfSU9fUkVTDQorICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit0eXBlZGVmIHN0
cnVjdCBSZXBDbWRSZW1vdGVJb1JlcSB7DQorICAgIFJlcENtZEhkciBoZHI7DQorICAgIGludCBy
ZXFfaWQ7DQorICAgIGludCBzaXplX3NlY3RvcnM7DQorICAgIHVpbnQ2NF90IHZvbHVtZV9pZDsN
CisgICAgdWludDY0X3Qgb2Zmc2V0X3NlY3RvcnM7DQorICAgIGludCBpc19yZWFkOw0KK30gUmVw
Q21kUmVtb3RlSW9SZXE7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKg0KKyAqIFJlcENtZCBSZWFkIFZvbHVtZSBSZXNwb25zZQ0K
KyAqDQorICogUkVQSFVCX0NNRF9SRU1PVEVfSU9fUkVTDQorICogRGlyZWN0aW9uOiBhZ2VudC0+
aHViDQorICoNCisgKiBBIHJlc3BvbnNlIHRvIFJFUEhVQl9DTURfUkVNT1RFX0lPX1JFUS4NCisg
KiBTZW5kcyB0aGUgZGF0YSByZWFkIGZyb20gYSBwcm90ZWN0ZWQgdm9sdW1lDQorICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit0eXBl
ZGVmIHN0cnVjdCBSZXBDbWRSZW1vdGVJb1JlcyB7DQorICAgIFJlcENtZEhkciBoZHI7DQorICAg
IGludCByZXFfaWQ7DQorICAgIGludCBpb19zdGF0dXM7DQorICAgIHVpbnQ2NF90IHZvbHVtZV9p
ZDsNCit9IFJlcENtZFJlbW90ZUlvUmVzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBSZXBDbWQgQWdlbnQgc2h1dGRv
d24NCisgKg0KKyAqIFJFUEhVQl9DTURfQUdFTlRfU0hVVERPV04NCisgKiBEaXJlY3Rpb246IGFn
ZW50LT5odWINCisgKg0KKyAqIE5vdGlmaWVzIHRoZSBodWIgdGhhdCB0aGUgYWdlbnQgaXMgYWJv
dXQgdG8gc2h1dGRvd24uDQorICogVGhpcyBhbGxvd3MgYSBncmFjZWZ1bCBzaHV0ZG93bi4gQW55
IGRpc2Nvbm5lY3Rpb24NCisgKiBvZiBhbiBhZ2VudCB3aXRob3V0IHNlbmRpbmcgdGhpcyBjb21t
YW5kIHdpbGwgcmVzdWx0DQorICogaW4gYSBmdWxsIHN5bmMgb2YgdGhlIFZNIHZvbHVtZXMuDQor
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8NCit0eXBlZGVmIHN0cnVjdCBSZXBDbWRBZ2VudFNodXRkb3duIHsNCisgICAgUmVwQ21kSGRy
IGhkcjsNCit9IFJlcENtZEFnZW50U2h1dGRvd247DQorDQorDQorI2VuZGlmIC8qIFJFUEhVQl9D
TURTX0ggKi8NCmRpZmYgLS1naXQgYS9ibG9jay9yZXBhZ2VudC9yZXBodWJfZGVmcy5oIGIvYmxv
Y2svcmVwYWdlbnQvcmVwaHViX2RlZnMuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw
MDAwMDAuLmUzNGUwY2UNCi0tLSAvZGV2L251bGwNCisrKyBiL2Jsb2NrL3JlcGFnZW50L3JlcGh1
Yl9kZWZzLmgNCkBAIC0wLDAgKzEsNDAgQEANCisvKg0KKyAqIFFFTVUgU3lzdGVtIEVtdWxhdG9y
DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBGYWJyaWNlIEJlbGxhcmQNCisgKg0K
KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uIG9idGFpbmluZw0KYSBjb3B5DQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQp0byBkZWFsDQorICog
aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp
bWl0YXRpb24gdGhlDQpyaWdodHMNCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcg0Kc2VsbA0KKyAqIGNvcGllcyBv
ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy
ZSBpcw0KKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnM6DQorICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KaW5jbHVkZWQgaW4NCisgKiBhbGwgY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCisgKg0KKyAqIFRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0K
RVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF
IFdBUlJBTlRJRVMgT0YNCk1FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVA0KU0hBTEwNCisg
KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ
TSwgREFNQUdFUyBPUg0KT1RIRVINCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCkFSSVNJTkcgRlJPTSwNCisgKiBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
IERFQUxJTkdTDQpJTg0KKyAqIFRIRSBTT0ZUV0FSRS4NCisgKi8NCisjaWZuZGVmIFJFUF9IVUJf
REVGU19IDQorI2RlZmluZSBSRVBfSFVCX0RFRlNfSA0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4N
CisNCisjZGVmaW5lIFJFUEhVQl9NQVhfVk9MX05BTUVfTEVOICgxMDI0KQ0KKyNkZWZpbmUgUkVQ
SFVCX01BWF9OVU1fVk9MVU1FUyAoNTEyKQ0KKw0KKyNpZm5kZWYgVFJVRQ0KKyAgICAjZGVmaW5l
IFRSVUUgKDEpDQorI2VuZGlmDQorDQorI2lmbmRlZiBGQUxTRQ0KKyAgICAjZGVmaW5lIEZBTFNF
ICgwKQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBSRVBfSFVCX0RFRlNfSCAqLw0KZGlmZiAtLWdp
dCBhL2Jsb2NrZGV2LmMgYi9ibG9ja2Rldi5jDQppbmRleCBkNzhhYTUxLi4zYzNhZmJjIDEwMDY0
NA0KLS0tIGEvYmxvY2tkZXYuYw0KKysrIGIvYmxvY2tkZXYuYw0KQEAgLTIwLDYgKzIwLDcgQEAN
CiAjaW5jbHVkZSAidHJhY2UuaCINCiAjaW5jbHVkZSAiYXJjaF9pbml0LmgiDQogDQorDQogc3Rh
dGljIFFUQUlMUV9IRUFEKGRyaXZlbGlzdCwgRHJpdmVJbmZvKSBkcml2ZXMgPQ0KUVRBSUxRX0hF
QURfSU5JVElBTElaRVIoZHJpdmVzKTsNCiANCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaWZf
bmFtZVtJRl9DT1VOVF0gPSB7DQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlDQpp
bmRleCA2NmE2NWQ5Li4zZDE3YWU1IDEwMDc1NQ0KLS0tIGEvY29uZmlndXJlDQorKysgYi9jb25m
aWd1cmUNCkBAIC0xODksNiArMTg5LDcgQEAgc3BpY2U9IiINCiByYmQ9IiINCiBzbWFydGNhcmQ9
IiINCiBzbWFydGNhcmRfbnNzPSIiDQorcmVwYWdlbnQ9IiINCiB1c2JfcmVkaXI9IiINCiBvcGVu
Z2w9IiINCiB6bGliPSJ5ZXMiDQpAQCAtODA2LDYgKzgwNywxMCBAQCBmb3Igb3B0IGRvDQogICA7
Ow0KICAgLS1lbmFibGUtc21hcnRjYXJkLW5zcykgc21hcnRjYXJkX25zcz0ieWVzIg0KICAgOzsN
CisgIC0tZGlzYWJsZS1yZXBhZ2VudCkgcmVwYWdlbnQ9Im5vIg0KKyAgOzsNCisgIC0tZW5hYmxl
LXJlcGFnZW50KSByZXBhZ2VudD0ieWVzIg0KKyAgOzsNCiAgIC0tZGlzYWJsZS11c2ItcmVkaXIp
IHVzYl9yZWRpcj0ibm8iDQogICA7Ow0KICAgLS1lbmFibGUtdXNiLXJlZGlyKSB1c2JfcmVkaXI9
InllcyINCkBAIC0xMTA0LDYgKzExMDksNyBAQCBlY2hvICIgIC0tZGlzYWJsZS11c2ItcmVkaXIg
ICAgICBkaXNhYmxlIHVzYiBuZXR3b3JrDQpyZWRpcmVjdGlvbiBzdXBwb3J0Ig0KIGVjaG8gIiAg
LS1lbmFibGUtdXNiLXJlZGlyICAgICAgIGVuYWJsZSB1c2IgbmV0d29yayByZWRpcmVjdGlvbiBz
dXBwb3J0Ig0KIGVjaG8gIiAgLS1kaXNhYmxlLWd1ZXN0LWFnZW50ICAgIGRpc2FibGUgYnVpbGRp
bmcgb2YgdGhlIFFFTVUgR3Vlc3QNCkFnZW50Ig0KIGVjaG8gIiAgLS1lbmFibGUtZ3Vlc3QtYWdl
bnQgICAgIGVuYWJsZSBidWlsZGluZyBvZiB0aGUgUUVNVSBHdWVzdCBBZ2VudCINCitlY2hvICIg
IC0tZW5hYmxlLXJlcGFnZW50ICAgICAgICBlbmFibGUgcmVwbGljYXRpb24gc3VwcG9ydCINCiBl
Y2hvICIiDQogZWNobyAiTk9URTogVGhlIG9iamVjdCBmaWxlcyBhcmUgYnVpbHQgYXQgdGhlIHBs
YWNlIHdoZXJlIGNvbmZpZ3VyZSBpcw0KbGF1bmNoZWQiDQogZXhpdCAxDQpAQCAtMzIxNCw2ICsz
MjIwLDEwIEBAIGlmIHRlc3QgIiRzbWFydGNhcmRfbnNzIiA9ICJ5ZXMiIDsgdGhlbg0KICAgZWNo
byAibGliY2FjYXJkX2NmbGFncz0kbGliY2FjYXJkX2NmbGFncyIgPj4gJGNvbmZpZ19ob3N0X21h
aw0KIGZpDQogDQoraWYgdGVzdCAiJHJlcGFnZW50IiA9ICJ5ZXMiIDsgdGhlbg0KKyAgZWNobyAi
Q09ORklHX1JFUEFHRU5UPXkiID4+ICRjb25maWdfaG9zdF9tYWsNCitmaQ0KKw0KIGlmIHRlc3Qg
IiR1c2JfcmVkaXIiID0gInllcyIgOyB0aGVuDQogICBlY2hvICJDT05GSUdfVVNCX1JFRElSPXki
ID4+ICRjb25maWdfaG9zdF9tYWsNCiBmaQ0KQEAgLTM4OTMsMyArMzkwMyw1IEBAIHN5bWxpbmsg
JHNvdXJjZV9wYXRoL01ha2VmaWxlLnVzZXIgJGQvTWFrZWZpbGUNCiBpZiB0ZXN0ICIkZG9jcyIg
PSAieWVzIiA7IHRoZW4NCiAgIG1rZGlyIC1wIFFNUA0KIGZpDQorDQorZWNobyAiUmVwYWdlbnQg
ICAgICAJJHJlcGFnZW50Ig0KZGlmZiAtLWdpdCBhL3FlbXUtb3B0aW9ucy5oeCBiL3FlbXUtb3B0
aW9ucy5oeA0Kb2xkIG1vZGUgMTAwNjQ0DQpuZXcgbW9kZSAxMDA3NTUNCmluZGV4IGRhZWZjZTMu
LjE1ZmI5MzgNCi0tLSBhL3FlbXUtb3B0aW9ucy5oeA0KKysrIGIvcWVtdS1vcHRpb25zLmh4DQpA
QCAtMjcxMSwzICsyNzExLDkgQEAgSFhDT01NIFRoaXMgaXMgdGhlIGxhc3Qgc3RhdGVtZW50LiBJ
bnNlcnQgbmV3DQpvcHRpb25zIGJlZm9yZSB0aGlzIGxpbmUhDQogU1RFWEkNCiBAZW5kIHRhYmxl
DQogRVRFWEkNCisNCitERUYoInJlcGFnZW50IiwgSEFTX0FSRywgUUVNVV9PUFRJT05fcmVwYWdl
bnQsDQorICAgICItcmVwYWdlbnQgW2h1YiBJUC9uYW1lXVxuIg0KKyAgICAiICAgICAgICAgICAg
ICAgIEVuYWJsZSByZXBsaWNhdGlvbiBzdXBwb3J0IGZvciBkaXNrc1xuIg0KKyAgICAiICAgICAg
ICAgICAgICAgIGh1YiBpcyB0aGUgaXAgb3IgbmFtZSBvZiB0aGUgbWFjaGluZSBydW5uaW5nIHRo
ZQ0KcmVwbGljYXRpb24gaHViLlxuIiwNCisgICAgUUVNVV9BUkNIX0FMTCkNCmRpZmYgLS1naXQg
YS92bC5jIGIvdmwuYw0KaW5kZXggOTdhYjJiOS4uMGZlMmNmZiAxMDA2NDQNCi0tLSBhL3ZsLmMN
CisrKyBiL3ZsLmMNCkBAIC0xNjcsNiArMTY3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQ0KIA0KICNpbmNsdWRlICJ1aS9xZW11LXNwaWNlLmgiDQogDQorI2luY2x1ZGUgImJs
b2NrL3JlcGFnZW50L3JlcGFnZW50LmgiDQogLy8jZGVmaW5lIERFQlVHX05FVA0KIC8vI2RlZmlu
ZSBERUJVR19TTElSUA0KIA0KQEAgLTI0MTEsNiArMjQxMiwxNyBAQCBpbnQgbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKQ0KICAgICAgICAgICAgICAgICBkcml2ZV9hZGQo
SUZfREVGQVVMVCwgcG9wdC0+aW5kZXggLSBRRU1VX09QVElPTl9oZGEsDQpvcHRhcmcsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICBIRF9PUFRTKTsNCiAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9yZXBhZ2VudDoNCisjaWZkZWYgQ09ORklH
X1JFUEFHRU5UDQorICAgICAgICAgICAgICAgIHVzZV9yZXBhZ2VudCA9IDE7DQorICAgICAgICAg
ICAgICAgIHJlcGFnZW50X2luaXQob3B0YXJnLCAwKTsNCisgICAgICAgICAgICAgICAgcHJpbnRm
KCJSZXBhZ2VudCBlbmFibGVkXG4iKTsNCisjZWxzZQ0KKyAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlJlcGFnZW50IHN1cHBvcnQgaXMgZGlzYWJsZWQuICINCisgICAgICAgICAgICAg
ICAgICAgICJEb24ndCB1c2UgLXJlcGFnZW50IG9wdGlvbi5cbiIpOw0KKyAgICAgICAgICAgICAg
ICBleGl0KDEpOw0KKyNlbmRpZg0KKyAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg
ICBjYXNlIFFFTVVfT1BUSU9OX2RyaXZlOg0KICAgICAgICAgICAgICAgICBpZiAoZHJpdmVfZGVm
KG9wdGFyZykgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsNCi0tIA0K
MS43LjYuNQ0KDQo=
[-- Attachment #3: qemu repagent design.pdf --]
[-- Type: application/pdf, Size: 127139 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-04-05 12:18 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-05 12:17 [Qemu-devel] [RFC PATCH v3 0/9] Replication agent module Ori Mamluk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).