Subject: Re: Fix for get/putwschar, modified
To: Michael <macallan18@earthlink.net>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: tech-kern
Date: 04/14/2006 10:35:10
------=_Part_836_13792303.1145003710397
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On 4/14/06, Michael <macallan18@earthlink.net> wrote:
> > > Is rasops_info semantically correct way to refer to a vcons screen?
> > > Admittedly I haven't checked it thoroughly, but I suspect - no.
> > > Michael?
> >
> > I do not know.  This is what the original code used.
>
> And the original vcons_{put|get}char() functions used that to find the
> appropriate struct vcons_screen.

Aha.


> > > vd->cookie is driver's cookie to vcons.  It cannot be rasops (see
> > > prototype in the previous hunk).  E.g. isgfb passes struct
> > > igsfb_devconfig as cookie.
> >
> > So what has it to be?
>
> vs. Or rather (struct vcons_screen *)vs. vd->cookie is a reference to
> driver instance-specific data, not the screen-specific stuff we need
> here.

OK, thanks.  The lack of the "other" cookie confused me.

See the new attached patch.

--
Julio M. Merino Vidal <jmmv84@gmail.com>
The Julipedia - http://julipedia.blogspot.com/

------=_Part_836_13792303.1145003710397
Content-Type: text/x-patch; name="patch.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch.diff"

SW5kZXg6IGFyY2gvYW1kNjQvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNy
b290L3NyYy9zeXMvYXJjaC9hbWQ2NC9jb25mL0dFTkVSSUMsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuOTEKZGlmZiAtdSAtcCAtcjEuOTEgR0VORVJJQwotLS0gYXJjaC9hbWQ2NC9jb25mL0dFTkVS
SUMJMTIgQXByIDIwMDYgMDM6NDE6NTEgLTAwMDAJMS45MQorKysgYXJjaC9hbWQ2NC9jb25mL0dF
TkVSSUMJMTQgQXByIDIwMDYgMDg6MzM6MDQgLTAwMDAKQEAgLTIxMSwxMCArMjExLDYgQEAgb3B0
aW9ucyAJUENESVNQTEFZX1NPRlRDVVJTT1IKICNvcHRpb25zIAlWR0FfQ09OU09MRV9TQ1JFRU5U
WVBFPSJcIjgweDI0XCIiCiAjIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnIHRoYXQgbG9hZGVk
IGZvbnRzIGRvbid0IHdvcms7IGZvdW5kIG9uIEFUSSBjYXJkcwogI29wdGlvbnMgCVZHQV9DT05T
T0xFX0FUSV9CUk9LRU5fRk9OVFNFTAotIyB0aGUgZm9sbG93aW5nIGVuYWJsZXMgc29tZSBmdW5j
dGlvbnMgdG8gZ2V0IG1vdXNlIGNvbnNvbGUgc3VwcG9ydC4KLSMgaWYgeW91IHdhbnQgYSByZWFs
bHkgc2VjdXJlIHN5c3RlbSwgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gZW5hYmxlIHRoZW0sCi0j
IHNlZSB3c21vdXNlZCg4KSwgc2VjdGlvbiBTRUNVUklUWSBDT05TSURFUkFUSU9OUyBmb3IgbW9y
ZSBpbmZvLgotI29wdGlvbnMgCVdTRElTUExBWV9DSEFSRlVOQ1MJCSMgbW91c2UgY29uc29sZSBz
dXBwb3J0CiAjIGNvbnNvbGUgc2Nyb2xsaW5nIHN1cHBvcnQuCiBvcHRpb25zIAlXU0RJU1BMQVlf
U0NST0xMU1VQUE9SVAogIyBlbmFibGUgVkdBIHJhc3RlciBtb2RlIGNhcGFibGUgb2YgZGlzcGxh
eWluZyBtdWx0aWxpbmd1YWwgdGV4dCBvbiBjb25zb2xlCkluZGV4OiBhcmNoL2FtZDY0L2NvbmYv
SU5TVEFMTAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gvYW1kNjQv
Y29uZi9JTlNUQUxMLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIxLjUw
IElOU1RBTEwKLS0tIGFyY2gvYW1kNjQvY29uZi9JTlNUQUxMCTEyIEFwciAyMDA2IDAzOjQxOjUx
IC0wMDAwCTEuNTAKKysrIGFyY2gvYW1kNjQvY29uZi9JTlNUQUxMCTE0IEFwciAyMDA2IDA4OjMz
OjA0IC0wMDAwCkBAIC0xNDksMTAgKzE0OSw2IEBAIG9wdGlvbnMgCVBDRElTUExBWV9TT0ZUQ1VS
U09SCiAjb3B0aW9ucyAJVkdBX0NPTlNPTEVfU0NSRUVOVFlQRT0iXCI4MHgyNFwiIgogIyB3b3Jr
IGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyB0aGF0IGxvYWRlZCBmb250cyBkb24ndCB3b3JrOyBmb3Vu
ZCBvbiBBVEkgY2FyZHMKICNvcHRpb25zIAlWR0FfQ09OU09MRV9BVElfQlJPS0VOX0ZPTlRTRUwK
LSMgdGhlIGZvbGxvd2luZyBlbmFibGVzIHNvbWUgZnVuY3Rpb25zIHRvIGdldCBtb3VzZSBjb25z
b2xlIHN1cHBvcnQuCi0jIGlmIHlvdSB3YW50IGEgcmVhbGx5IHNlY3VyZSBzeXN0ZW0sIGl0IG1h
eSBiZSBiZXR0ZXIgbm90IHRvIGVuYWJsZSB0aGVtLAotIyBzZWUgd3Ntb3VzZWQoOCksIHNlY3Rp
b24gU0VDVVJJVFkgQ09OU0lERVJBVElPTlMgZm9yIG1vcmUgaW5mby4KLSNvcHRpb25zIAlXU0RJ
U1BMQVlfQ0hBUkZVTkNTCQkjIG1vdXNlIGNvbnNvbGUgc3VwcG9ydAogIyBlbmFibGUgVkdBIHJh
c3RlciBtb2RlIGNhcGFibGUgb2YgZGlzcGxheWluZyBtdWx0aWxpbmd1YWwgdGV4dCBvbiBjb25z
b2xlCiAjb3B0aW9ucyAJVkdBX1JBU1RFUkNPTlNPTEUKIApJbmRleDogYXJjaC9hcm0vaW9tZC92
aWRjdmlkZW8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gvYXJt
L2lvbWQvdmlkY3ZpZGVvLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlmZiAtdSAtcCAt
cjEuMjIgdmlkY3ZpZGVvLmMKLS0tIGFyY2gvYXJtL2lvbWQvdmlkY3ZpZGVvLmMJMTIgQXByIDIw
MDYgMTk6Mzg6MjIgLTAwMDAJMS4yMgorKysgYXJjaC9hcm0vaW9tZC92aWRjdmlkZW8uYwkxNCBB
cHIgMjAwNiAwODozMzowNSAtMDAwMApAQCAtMTgyLDkgKzE4Miw3IEBAIHN0YXRpYyBjb25zdCBz
dHJ1Y3Qgd3NkaXNwbGF5X2FjY2Vzc29wcyAKIAl2aWRjdmlkZW9fZnJlZV9zY3JlZW4sCiAJdmlk
Y3ZpZGVvX3Nob3dfc2NyZWVuLAogCU5VTEwsIC8qIGxvYWRfZm9udAkqLwotCU5VTEwsIC8qIHBv
bGxjCQkqLwotCU5VTEwsIC8qIGdldHdzY2hhcgkqLwotCU5VTEwgIC8qIHB1dHdzY2hhcgkqLwor
CU5VTEwgIC8qIHBvbGxjCQkqLwogfTsKIAogCkluZGV4OiBhcmNoL2NhdHMvY29uZi9HRU5FUklD
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9jYXRzL2NvbmYvR0VO
RVJJQyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDMKZGlmZiAtdSAtcCAtcjEuMTAzIEdFTkVS
SUMKLS0tIGFyY2gvY2F0cy9jb25mL0dFTkVSSUMJMjggTWFyIDIwMDYgMjA6NTg6MzkgLTAwMDAJ
MS4xMDMKKysrIGFyY2gvY2F0cy9jb25mL0dFTkVSSUMJMTQgQXByIDIwMDYgMDg6MzM6MDUgLTAw
MDAKQEAgLTE4OCwxMCArMTg4LDYgQEAgb3B0aW9ucyAJV1NESVNQTEFZX0NPTVBBVF9VU0wJCSMg
VlQgaGFuZAogb3B0aW9ucyAJV1NESVNQTEFZX0NPTVBBVF9SQVdLQkQJCSMgY2FuIGdldCByYXcg
c2NhbmNvZGVzCiAjIHNlZSBkZXYvd3Njb25zL3dza2JkbWFwX21maWkuaCBmb3IgaW1wbGVtZW50
ZWQgbGF5b3V0cwogI29wdGlvbnMgCVBDS0JEX0xBWU9VVD0iKEtCX0RFIHwgS0JfTk9ERUFEKSIK
LSMgdGhlIGZvbGxvd2luZyBlbmFibGVzIHNvbWUgZnVuY3Rpb25zIHRvIGdldCBtb3VzZSBjb25z
b2xlIHN1cHBvcnQuCi0jIGlmIHlvdSB3YW50IGEgcmVhbGx5IHNlY3VyZSBzeXN0ZW0sIGl0IG1h
eSBiZSBiZXR0ZXIgbm90IHRvIGVuYWJsZSB0aGVtLAotIyBzZWUgd3Ntb3VzZWQoOCksIHNlY3Rp
b24gU0VDVVJJVFkgQ09OU0lERVJBVElPTlMgZm9yIG1vcmUgaW5mby4KLSNvcHRpb25zIAlXU0RJ
U1BMQVlfQ0hBUkZVTkNTCQkjIG1vdXNlIGNvbnNvbGUgc3VwcG9ydAogCiAjIERldmVsb3BtZW50
IGFuZCBEZWJ1Z2dpbmcgb3B0aW9ucwogCkluZGV4OiBhcmNoL2V2YmFybS9jb25mL0FSTUFESUxM
TzkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNoL2V2YmFybS9jb25m
L0FSTUFESUxMTzksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAg
QVJNQURJTExPOQotLS0gYXJjaC9ldmJhcm0vY29uZi9BUk1BRElMTE85CTEzIEZlYiAyMDA2IDEy
OjI0OjIyIC0wMDAwCTEuMTAKKysrIGFyY2gvZXZiYXJtL2NvbmYvQVJNQURJTExPOQkxNCBBcHIg
MjAwNiAwODozMzowNSAtMDAwMApAQCAtMzQyLDEwICszNDIsNiBAQCBvcHRpb25zIAlXU0VNVUxf
VlQxMDAJCSMgVlQxMDAgLyBWVDIyMCBlCiAjb3B0aW9ucyAJVkdBX0NPTlNPTEVfU0NSRUVOVFlQ
RT0iXCI4MHgyNFwiIgogIyB3b3JrIGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyB0aGF0IGxvYWRlZCBm
b250cyBkb24ndCB3b3JrOyBmb3VuZCBvbiBBVEkgY2FyZHMKICNvcHRpb25zIAlWR0FfQ09OU09M
RV9BVElfQlJPS0VOX0ZPTlRTRUwKLSMgdGhlIGZvbGxvd2luZyBlbmFibGVzIHNvbWUgZnVuY3Rp
b25zIHRvIGdldCBtb3VzZSBjb25zb2xlIHN1cHBvcnQuCi0jIGlmIHlvdSB3YW50IGEgcmVhbGx5
IHNlY3VyZSBzeXN0ZW0sIGl0IG1heSBiZSBiZXR0ZXIgbm90IHRvIGVuYWJsZSB0aGVtLAotIyBz
ZWUgd3Ntb3VzZWQoOCksIHNlY3Rpb24gU0VDVVJJVFkgQ09OU0lERVJBVElPTlMgZm9yIG1vcmUg
aW5mby4KLSNvcHRpb25zIAlXU0RJU1BMQVlfQ0hBUkZVTkNTCQkjIG1vdXNlIGNvbnNvbGUgc3Vw
cG9ydAogIyBjb25zb2xlIHNjcm9sbGluZyBzdXBwb3J0LgogI29wdGlvbnMgCVdTRElTUExBWV9T
Q1JPTExTVVBQT1JUCiAjIGVuYWJsZSBWR0EgcmFzdGVyIG1vZGUgY2FwYWJsZSBvZiBkaXNwbGF5
aW5nIG11bHRpbGluZ3VhbCB0ZXh0IG9uIGNvbnNvbGUKSW5kZXg6IGFyY2gvZXZiYXJtL2NvbmYv
VFM3MjAwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9ldmJhcm0v
Y29uZi9UUzcyMDAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlmZiAtdSAtcCAtcjEuMjUg
VFM3MjAwCi0tLSBhcmNoL2V2YmFybS9jb25mL1RTNzIwMAk1IEZlYiAyMDA2IDA1OjAxOjQ5IC0w
MDAwCTEuMjUKKysrIGFyY2gvZXZiYXJtL2NvbmYvVFM3MjAwCTE0IEFwciAyMDA2IDA4OjMzOjA2
IC0wMDAwCkBAIC00NzksMTAgKzQ3OSw2IEBAIG9wdGlvbnMgCVdTRU1VTF9WVDEwMAkJIyBWVDEw
MCAvIFZUMjIwIGUKICNvcHRpb25zIAlWR0FfQ09OU09MRV9TQ1JFRU5UWVBFPSJcIjgweDI0XCIi
CiAjIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnIHRoYXQgbG9hZGVkIGZvbnRzIGRvbid0IHdv
cms7IGZvdW5kIG9uIEFUSSBjYXJkcwogI29wdGlvbnMgCVZHQV9DT05TT0xFX0FUSV9CUk9LRU5f
Rk9OVFNFTAotIyB0aGUgZm9sbG93aW5nIGVuYWJsZXMgc29tZSBmdW5jdGlvbnMgdG8gZ2V0IG1v
dXNlIGNvbnNvbGUgc3VwcG9ydC4KLSMgaWYgeW91IHdhbnQgYSByZWFsbHkgc2VjdXJlIHN5c3Rl
bSwgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gZW5hYmxlIHRoZW0sCi0jIHNlZSB3c21vdXNlZCg4
KSwgc2VjdGlvbiBTRUNVUklUWSBDT05TSURFUkFUSU9OUyBmb3IgbW9yZSBpbmZvLgotI29wdGlv
bnMgCVdTRElTUExBWV9DSEFSRlVOQ1MJCSMgbW91c2UgY29uc29sZSBzdXBwb3J0CiAjIGNvbnNv
bGUgc2Nyb2xsaW5nIHN1cHBvcnQuCiAjb3B0aW9ucyAJV1NESVNQTEFZX1NDUk9MTFNVUFBPUlQK
ICMgZW5hYmxlIFZHQSByYXN0ZXIgbW9kZSBjYXBhYmxlIG9mIGRpc3BsYXlpbmcgbXVsdGlsaW5n
dWFsIHRleHQgb24gY29uc29sZQpJbmRleDogYXJjaC9ocDcwMC9jb25mL0dFTkVSSUMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNoL2hwNzAwL2NvbmYvR0VORVJJQyx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NApkaWZmIC11IC1wIC1yMS42NCBHRU5FUklDCi0tLSBh
cmNoL2hwNzAwL2NvbmYvR0VORVJJQwkyOCBNYXIgMjAwNiAyMDo1ODo0MCAtMDAwMAkxLjY0Cisr
KyBhcmNoL2hwNzAwL2NvbmYvR0VORVJJQwkxNCBBcHIgMjAwNiAwODozMzowNyAtMDAwMApAQCAt
MjA1LDEwICsyMDUsNiBAQCBvcHRpb25zIAlQQ0RJU1BMQVlfU09GVENVUlNPUgogI29wdGlvbnMg
CVZHQV9DT05TT0xFX1NDUkVFTlRZUEU9IlwiODB4MjRcIiIKICMgd29yayBhcm91bmQgYSBoYXJk
d2FyZSBidWcgdGhhdCBsb2FkZWQgZm9udHMgZG9uJ3Qgd29yazsgZm91bmQgb24gQVRJIGNhcmRz
CiAjb3B0aW9ucyAJVkdBX0NPTlNPTEVfQVRJX0JST0tFTl9GT05UU0VMCi0jIHRoZSBmb2xsb3dp
bmcgZW5hYmxlcyBzb21lIGZ1bmN0aW9ucyB0byBnZXQgbW91c2UgY29uc29sZSBzdXBwb3J0Lgot
IyBpZiB5b3Ugd2FudCBhIHJlYWxseSBzZWN1cmUgc3lzdGVtLCBpdCBtYXkgYmUgYmV0dGVyIG5v
dCB0byBlbmFibGUgdGhlbSwKLSMgc2VlIHdzbW91c2VkKDgpLCBzZWN0aW9uIFNFQ1VSSVRZIENP
TlNJREVSQVRJT05TIGZvciBtb3JlIGluZm8uCi0jb3B0aW9ucyAJV1NESVNQTEFZX0NIQVJGVU5D
UwkJIyBtb3VzZSBjb25zb2xlIHN1cHBvcnQKICMgY29uc29sZSBzY3JvbGxpbmcgc3VwcG9ydC4K
ICNvcHRpb25zIAlXU0RJU1BMQVlfU0NST0xMU1VQUE9SVAogIyBlbmFibGUgVkdBIHJhc3RlciBt
b2RlIGNhcGFibGUgb2YgZGlzcGxheWluZyBtdWx0aWxpbmd1YWwgdGV4dCBvbiBjb25zb2xlCklu
ZGV4OiBhcmNoL2kzODYvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290
L3NyYy9zeXMvYXJjaC9pMzg2L2NvbmYvR0VORVJJQyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43
NDIKZGlmZiAtdSAtcCAtcjEuNzQyIEdFTkVSSUMKLS0tIGFyY2gvaTM4Ni9jb25mL0dFTkVSSUMJ
MTMgQXByIDIwMDYgMDA6MzA6MTkgLTAwMDAJMS43NDIKKysrIGFyY2gvaTM4Ni9jb25mL0dFTkVS
SUMJMTQgQXByIDIwMDYgMDg6MzM6MDkgLTAwMDAKQEAgLTI3NiwxMCArMjc2LDYgQEAgb3B0aW9u
cyAJUENESVNQTEFZX1NPRlRDVVJTT1IKICNvcHRpb25zIAlWR0FfQ09OU09MRV9TQ1JFRU5UWVBF
PSJcIjgweDI0XCIiCiAjIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnIHRoYXQgbG9hZGVkIGZv
bnRzIGRvbid0IHdvcms7IGZvdW5kIG9uIEFUSSBjYXJkcwogI29wdGlvbnMgCVZHQV9DT05TT0xF
X0FUSV9CUk9LRU5fRk9OVFNFTAotIyB0aGUgZm9sbG93aW5nIGVuYWJsZXMgc29tZSBmdW5jdGlv
bnMgdG8gZ2V0IG1vdXNlIGNvbnNvbGUgc3VwcG9ydC4KLSMgaWYgeW91IHdhbnQgYSByZWFsbHkg
c2VjdXJlIHN5c3RlbSwgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gZW5hYmxlIHRoZW0sCi0jIHNl
ZSB3c21vdXNlZCg4KSwgc2VjdGlvbiBTRUNVUklUWSBDT05TSURFUkFUSU9OUyBmb3IgbW9yZSBp
bmZvLgotI29wdGlvbnMgCVdTRElTUExBWV9DSEFSRlVOQ1MJCSMgbW91c2UgY29uc29sZSBzdXBw
b3J0CiAjIGNvbnNvbGUgc2Nyb2xsaW5nIHN1cHBvcnQuCiBvcHRpb25zIAlXU0RJU1BMQVlfU0NS
T0xMU1VQUE9SVAogIyBlbmFibGUgVkdBIHJhc3RlciBtb2RlIGNhcGFibGUgb2YgZGlzcGxheWlu
ZyBtdWx0aWxpbmd1YWwgdGV4dCBvbiBjb25zb2xlCkluZGV4OiBhcmNoL2kzODYvY29uZi9MQU1C
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9pMzg2L2NvbmYvTEFN
Qix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MgpkaWZmIC11IC1wIC1yMS42MiBMQU1CCi0tLSBh
cmNoL2kzODYvY29uZi9MQU1CCTI4IE1hciAyMDA2IDIwOjU4OjQwIC0wMDAwCTEuNjIKKysrIGFy
Y2gvaTM4Ni9jb25mL0xBTUIJMTQgQXByIDIwMDYgMDg6MzM6MTcgLTAwMDAKQEAgLTIwMCwxMCAr
MjAwLDYgQEAgb3B0aW9ucyAJUENESVNQTEFZX1NPRlRDVVJTT1IKICNvcHRpb25zIAlWR0FfQ09O
U09MRV9TQ1JFRU5UWVBFPSJcIjgweDI0XCIiCiAjIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVn
IHRoYXQgbG9hZGVkIGZvbnRzIGRvbid0IHdvcms7IGZvdW5kIG9uIEFUSSBjYXJkcwogI29wdGlv
bnMgCVZHQV9DT05TT0xFX0FUSV9CUk9LRU5fRk9OVFNFTAotIyB0aGUgZm9sbG93aW5nIGVuYWJs
ZXMgc29tZSBmdW5jdGlvbnMgdG8gZ2V0IG1vdXNlIGNvbnNvbGUgc3VwcG9ydC4KLSMgaWYgeW91
IHdhbnQgYSByZWFsbHkgc2VjdXJlIHN5c3RlbSwgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gZW5h
YmxlIHRoZW0sCi0jIHNlZSB3c21vdXNlZCg4KSwgc2VjdGlvbiBTRUNVUklUWSBDT05TSURFUkFU
SU9OUyBmb3IgbW9yZSBpbmZvLgotI29wdGlvbnMgCVdTRElTUExBWV9DSEFSRlVOQ1MJCSMgbW91
c2UgY29uc29sZSBzdXBwb3J0CiAKICMgS2VybmVsIHJvb3QgZmlsZSBzeXN0ZW0gYW5kIGR1bXAg
Y29uZmlndXJhdGlvbi4KIGNvbmZpZwkJbmV0YnNkCXJvb3Qgb24gPyB0eXBlID8KSW5kZXg6IGFy
Y2gvaTM4Ni9jb25mL1ZJUlRVQUxQQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMv
c3lzL2FyY2gvaTM4Ni9jb25mL1ZJUlRVQUxQQyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpk
aWZmIC11IC1wIC1yMS4zOSBWSVJUVUFMUEMKLS0tIGFyY2gvaTM4Ni9jb25mL1ZJUlRVQUxQQwky
OCBNYXIgMjAwNiAyMDo1ODo0MCAtMDAwMAkxLjM5CisrKyBhcmNoL2kzODYvY29uZi9WSVJUVUFM
UEMJMTQgQXByIDIwMDYgMDg6MzM6MTcgLTAwMDAKQEAgLTIzNCwxMCArMjM0LDYgQEAgb3B0aW9u
cyAJUENESVNQTEFZX1NPRlRDVVJTT1IKICNvcHRpb25zIAlWR0FfQ09OU09MRV9TQ1JFRU5UWVBF
PSJcIjgweDI0XCIiCiAjIHdvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnIHRoYXQgbG9hZGVkIGZv
bnRzIGRvbid0IHdvcms7IGZvdW5kIG9uIEFUSSBjYXJkcwogI29wdGlvbnMgCVZHQV9DT05TT0xF
X0FUSV9CUk9LRU5fRk9OVFNFTAotIyB0aGUgZm9sbG93aW5nIGVuYWJsZXMgc29tZSBmdW5jdGlv
bnMgdG8gZ2V0IG1vdXNlIGNvbnNvbGUgc3VwcG9ydC4KLSMgaWYgeW91IHdhbnQgYSByZWFsbHkg
c2VjdXJlIHN5c3RlbSwgaXQgbWF5IGJlIGJldHRlciBub3QgdG8gZW5hYmxlIHRoZW0sCi0jIHNl
ZSB3c21vdXNlZCg4KSwgc2VjdGlvbiBTRUNVUklUWSBDT05TSURFUkFUSU9OUyBmb3IgbW9yZSBp
bmZvLgotI29wdGlvbnMgCVdTRElTUExBWV9DSEFSRlVOQ1MJCSMgbW91c2UgY29uc29sZSBzdXBw
b3J0CiAjIGVuYWJsZSBWR0EgcmFzdGVyIG1vZGUgY2FwYWJsZSBvZiBkaXNwbGF5aW5nIG11bHRp
bGluZ3VhbCB0ZXh0IG9uIGNvbnNvbGUKICNvcHRpb25zIAlWR0FfUkFTVEVSQ09OU09MRQogCklu
ZGV4OiBhcmNoL3NnaW1pcHMvY29uZi9HRU5FUklDMzJfSVAyeAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gvc2dpbWlwcy9jb25mL0dFTkVSSUMzMl9JUDJ4LHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjQ3CmRpZmYgLXUgLXAgLXIxLjQ3IEdFTkVSSUMzMl9JUDJ4Ci0t
LSBhcmNoL3NnaW1pcHMvY29uZi9HRU5FUklDMzJfSVAyeAkyOCBNYXIgMjAwNiAyMDo1ODo0MSAt
MDAwMAkxLjQ3CisrKyBhcmNoL3NnaW1pcHMvY29uZi9HRU5FUklDMzJfSVAyeAkxNCBBcHIgMjAw
NiAwODozMzoxOCAtMDAwMApAQCAtMTkyLDEwICsxOTIsNiBAQCBvcHRpb25zIAlXU19LRVJORUxf
Rkc9V1NDT0xfR1JFRU4KIG9wdGlvbnMgCVdTRElTUExBWV9DT01QQVRfUkFXS0JECQkjIGNhbiBn
ZXQgcmF3IHNjYW5jb2RlcwogIyBzZWUgZGV2L3Bja2JjL3dza2JkbWFwX21maWkuYyBmb3IgaW1w
bGVtZW50ZWQgbGF5b3V0cwogI29wdGlvbnMgCVBDS0JEX0xBWU9VVD0iKEtCX0RFIHwgS0JfTk9E
RUFEKSIKLSMgdGhlIGZvbGxvd2luZyBlbmFibGVzIHNvbWUgZnVuY3Rpb25zIHRvIGdldCBtb3Vz
ZSBjb25zb2xlIHN1cHBvcnQuCi0jIGlmIHlvdSB3YW50IGEgcmVhbGx5IHNlY3VyZSBzeXN0ZW0s
IGl0IG1heSBiZSBiZXR0ZXIgbm90IHRvIGVuYWJsZSB0aGVtLAotIyBzZWUgd3Ntb3VzZWQoOCks
IHNlY3Rpb24gU0VDVVJJVFkgQ09OU0lERVJBVElPTlMgZm9yIG1vcmUgaW5mby4KLSNvcHRpb25z
IAlXU0RJU1BMQVlfQ0hBUkZVTkNTCQkjIG1vdXNlIGNvbnNvbGUgc3VwcG9ydAogCiAKICMgS2Vy
bmVsIHJvb3QgZmlsZSBzeXN0ZW0gYW5kIGR1bXAgY29uZmlndXJhdGlvbi4KSW5kZXg6IGFyY2gv
c2hhcmsvY29uZi9HRU5FUklDCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMv
YXJjaC9zaGFyay9jb25mL0dFTkVSSUMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAt
dSAtcCAtcjEuNjAgR0VORVJJQwotLS0gYXJjaC9zaGFyay9jb25mL0dFTkVSSUMJMjggTWFyIDIw
MDYgMjA6NTg6NDEgLTAwMDAJMS42MAorKysgYXJjaC9zaGFyay9jb25mL0dFTkVSSUMJMTQgQXBy
IDIwMDYgMDg6MzM6MTggLTAwMDAKQEAgLTIwNywxMCArMjA3LDYgQEAgb3B0aW9ucyAJV1NESVNQ
TEFZX0NPTVBBVF9SQVdLQkQJCSMgY2FuIAogI29wdGlvbnMgCVBDRElTUExBWV9TT0ZUQ1VSU09S
CiAjIG1vZGlmeSB0aGUgc2NyZWVuIHR5cGUgb2YgdGhlIGNvbnNvbGU7IGRlZmF1bHRzIHRvICI4
MHgyNSIKICNvcHRpb25zIAlWR0FfQ09OU09MRV9TQ1JFRU5UWVBFPSJcIjgweDI0XCIiCi0jIHRo
ZSBmb2xsb3dpbmcgZW5hYmxlcyBzb21lIGZ1bmN0aW9ucyB0byBnZXQgbW91c2UgY29uc29sZSBz
dXBwb3J0LgotIyBpZiB5b3Ugd2FudCBhIHJlYWxseSBzZWN1cmUgc3lzdGVtLCBpdCBtYXkgYmUg
YmV0dGVyIG5vdCB0byBlbmFibGUgdGhlbSwKLSMgc2VlIHdzbW91c2VkKDgpLCBzZWN0aW9uIFNF
Q1VSSVRZIENPTlNJREVSQVRJT05TIGZvciBtb3JlIGluZm8uCi0jb3B0aW9ucyAJV1NESVNQTEFZ
X0NIQVJGVU5DUwkJIyBtb3VzZSBjb25zb2xlIHN1cHBvcnQKICMgY29uc29sZSBzY3JvbGxpbmcg
c3VwcG9ydC4KICNvcHRpb25zIAlXU0RJU1BMQVlfU0NST0xMU1VQUE9SVAogIyBlbmFibGUgVkdB
IHJhc3RlciBtb2RlIGNhcGFibGUgb2YgZGlzcGxheWluZyBtdWx0aWxpbmd1YWwgdGV4dCBvbiBj
b25zb2xlCkluZGV4OiBhcmNoL3NwYXJjNjQvZGV2L2ZmYi5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnNyb290L3NyYy9zeXMvYXJjaC9zcGFyYzY0L2Rldi9mZmIuYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yNQpkaWZmIC11IC1wIC1yMS4yNSBmZmIuYwotLS0gYXJjaC9zcGFyYzY0L2Rldi9m
ZmIuYwkxMiBBcHIgMjAwNiAyMDoyMjowMCAtMDAwMAkxLjI1CisrKyBhcmNoL3NwYXJjNjQvZGV2
L2ZmYi5jCTE0IEFwciAyMDA2IDA4OjMzOjE5IC0wMDAwCkBAIC0xMzYsOCArMTM2LDYgQEAgc3Ry
dWN0IHdzZGlzcGxheV9hY2Nlc3NvcHMgZmZiX2FjY2Vzc29wcwogCWZmYl9zaG93X3NjcmVlbiwK
IAlOVUxMLAkvKiBsb2FkIGZvbnQgKi8KIAlOVUxMLAkvKiBwb2xsYyAqLwotCU5VTEwsCS8qIGdl
dHdzY2hhciAqLwotCU5VTEwsCS8qIHB1dHdzY2hhciAqLwogCU5VTEwsCS8qIHNjcm9sbCAqLwog
fTsKIApJbmRleDogZGV2L2ljL3BjZGlzcGxheV9zdWJyLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2c3Jvb3Qvc3JjL3N5cy9kZXYvaWMvcGNkaXNwbGF5X3N1YnIuYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zMQpkaWZmIC11IC1wIC1yMS4zMSBwY2Rpc3BsYXlfc3Vici5jCi0tLSBkZXYvaWMv
cGNkaXNwbGF5X3N1YnIuYwkxMiBBcHIgMjAwNiAyMDowODoyMCAtMDAwMAkxLjMxCisrKyBkZXYv
aWMvcGNkaXNwbGF5X3N1YnIuYwkxNCBBcHIgMjAwNiAwODozMzoxOSAtMDAwMApAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19LRVJORUxfUkNTSUQoMCwgIiROZXRC
U0Q6IHBjZGlzcGxheV9zdWJyLmMsdiAxLjMxIDIwMDYvMDQvMTIgMjA6MDg6MjAgam1tdiBFeHAg
JCIpOwogCi0jaW5jbHVkZSAib3B0X3dzZGlzcGxheV9jb21wYXQuaCIgLyogZm9yIFdTRElTUExB
WV9DSEFSRlVOQ1MgKi8KICNpbmNsdWRlICJvcHRfd3Ntc2dhdHRycy5oIiAvKiBmb3IgV1NESVNQ
TEFZX0NVU1RPTV9PVVRQVVQgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjkxLDE1
ICsyOTAsMTUgQEAgcGNkaXNwbGF5X3JlcGxhY2VhdHRyKHZvaWQgKmlkLCBsb25nIG9sZAogfQog
I2VuZGlmIC8qIFdTRElTUExBWV9DVVNUT01fT1VUUFVUICovCiAKLSNpZmRlZiBXU0RJU1BMQVlf
Q0hBUkZVTkNTCiBpbnQKLXBjZGlzcGxheV9nZXR3c2NoYXIodm9pZCAqaWQsIHN0cnVjdCB3c2Rp
c3BsYXlfY2hhciAqd3NjaGFyKQorcGNkaXNwbGF5X2dldHdzY2hhcihzdHJ1Y3QgcGNkaXNwbGF5
c2NyZWVuICpzY3IsIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqd3NjaGFyKQogewotCXN0cnVjdCBw
Y2Rpc3BsYXlzY3JlZW4gKnNjciA9IGlkOwogCWludCBvZmY7CiAJdWludDE2X3QgY2hhcmRhdGE7
CiAJdWludDhfdCBhdHRyYnl0ZTsKIAorCUtBU1NFUlQoc2NyICE9IE5VTEwgJiYgd3NjaGFyICE9
IE5VTEwpOworCiAJb2ZmID0gd3NjaGFyLT5yb3cgKiBzY3ItPnR5cGUtPm5jb2xzICsgd3NjaGFy
LT5jb2w7CiAJaWYgKG9mZiA+PSBzY3ItPnR5cGUtPm5jb2xzICogc2NyLT50eXBlLT5ucm93cykK
IAkJcmV0dXJuIC0xOwpAQCAtMzIyLDEzICszMjEsMTQgQEAgcGNkaXNwbGF5X2dldHdzY2hhcih2
b2lkICppZCwgc3RydWN0IHdzZAogfQogCiBpbnQKLXBjZGlzcGxheV9wdXR3c2NoYXIodm9pZCAq
aWQsIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqd3NjaGFyKQorcGNkaXNwbGF5X3B1dHdzY2hhcihz
dHJ1Y3QgcGNkaXNwbGF5c2NyZWVuICpzY3IsIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqd3NjaGFy
KQogewotCXN0cnVjdCBwY2Rpc3BsYXlzY3JlZW4gKnNjciA9IGlkOwogCWludCBvZmY7CiAJdWlu
dDE2X3QgY2hhcmRhdGE7CiAJdWludDhfdCBhdHRyYnl0ZTsKIAorCUtBU1NFUlQoc2NyICE9IE5V
TEwgJiYgd3NjaGFyICE9IE5VTEwpOworCiAJb2ZmID0gd3NjaGFyLT5yb3cgKiBzY3ItPnR5cGUt
Pm5jb2xzICsgd3NjaGFyLT5jb2w7CiAJaWYgKG9mZiA+PSAoc2NyLT50eXBlLT5uY29scyAqIHNj
ci0+dHlwZS0+bnJvd3MpKQogCQlyZXR1cm4gLTE7CkBAIC0zNDgsNCArMzQ4LDMgQEAgcGNkaXNw
bGF5X3B1dHdzY2hhcih2b2lkICppZCwgc3RydWN0IHdzZAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5k
aWYgLyogV1NESVNQTEFZX0NIQVJGVU5DUyAqLwpJbmRleDogZGV2L2ljL3BjZGlzcGxheXZhci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L2ljL3BjZGlzcGxheXZh
ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IHBjZGlzcGxh
eXZhci5oCi0tLSBkZXYvaWMvcGNkaXNwbGF5dmFyLmgJMTYgRmViIDIwMDYgMjA6MTc6MTYgLTAw
MDAJMS4xNgorKysgZGV2L2ljL3BjZGlzcGxheXZhci5oCTE0IEFwciAyMDA2IDA4OjMzOjE5IC0w
MDAwCkBAIC05MCw1ICs5MCw1IEBAIHZvaWQJcGNkaXNwbGF5X2NvcHlyb3dzKHZvaWQgKiwgaW50
LCBpbnQKIHZvaWQJcGNkaXNwbGF5X2VyYXNlcm93cyh2b2lkICosIGludCwgaW50LCBsb25nKTsK
IHZvaWQJcGNkaXNwbGF5X3JlcGxhY2VhdHRyKHZvaWQgKiwgbG9uZywgbG9uZyk7CiBzdHJ1Y3Qg
d3NkaXNwbGF5X2NoYXI7Ci1pbnQJcGNkaXNwbGF5X2dldHdzY2hhcih2b2lkICosIHN0cnVjdCB3
c2Rpc3BsYXlfY2hhciAqKTsKLWludAlwY2Rpc3BsYXlfcHV0d3NjaGFyKHZvaWQgKiwgc3RydWN0
IHdzZGlzcGxheV9jaGFyICopOworaW50CXBjZGlzcGxheV9nZXR3c2NoYXIoc3RydWN0IHBjZGlz
cGxheXNjcmVlbiAqLCBzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKik7CitpbnQJcGNkaXNwbGF5X3B1
dHdzY2hhcihzdHJ1Y3QgcGNkaXNwbGF5c2NyZWVuICosIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAq
KTsKSW5kZXg6IGRldi9pYy92Z2EuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMv
c3lzL2Rldi9pYy92Z2EuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NgpkaWZmIC11IC1wIC1y
MS44NiB2Z2EuYwotLS0gZGV2L2ljL3ZnYS5jCTEyIEFwciAyMDA2IDE5OjM4OjIzIC0wMDAwCTEu
ODYKKysrIGRldi9pYy92Z2EuYwkxNCBBcHIgMjAwNiAwODozMzoyMCAtMDAwMApAQCAtMjcsNyAr
MjcsNyBAQAogICogcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgogICovCiAK
LS8qIGZvciBXU0NPTlNfU1VQUE9SVF9QQ1ZURk9OVFMgYW5kIFdTRElTUExBWV9DSEFSRlVOQ1Mg
Ki8KKy8qIGZvciBXU0NPTlNfU1VQUE9SVF9QQ1ZURk9OVFMgKi8KICNpbmNsdWRlICJvcHRfd3Nk
aXNwbGF5X2NvbXBhdC5oIgogLyogZm9yIFdTRElTUExBWV9DVVNUT01fQk9SREVSICovCiAjaW5j
bHVkZSAib3B0X3dzZGlzcGxheV9ib3JkZXIuaCIKQEAgLTI3NCwxMCArMjc0LDYgQEAgc3RhdGlj
IHZvaWQJdmdhX2ZyZWVfc2NyZWVuKHZvaWQgKiwgdm9pZAogc3RhdGljIGludAl2Z2Ffc2hvd19z
Y3JlZW4odm9pZCAqLCB2b2lkICosIGludCwKIAkJCQl2b2lkICgqKSh2b2lkICosIGludCwgaW50
KSwgdm9pZCAqKTsKIHN0YXRpYyBpbnQJdmdhX2xvYWRfZm9udCh2b2lkICosIHZvaWQgKiwgc3Ry
dWN0IHdzZGlzcGxheV9mb250ICopOwotI2lmZGVmIFdTRElTUExBWV9DSEFSRlVOQ1MKLXN0YXRp
YyBpbnQJdmdhX2dldHdzY2hhcih2b2lkICosIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqKTsKLXN0
YXRpYyBpbnQJdmdhX3B1dHdzY2hhcih2b2lkICosIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqKTsK
LSNlbmRpZiAvKiBXU0RJU1BMQVlfQ0hBUkZVTkNTICovCiAjaWZkZWYgV1NESVNQTEFZX0NVU1RP
TV9CT1JERVIKIHN0YXRpYyBpbnQJdmdhX2dldGJvcmRlcihzdHJ1Y3QgdmdhX2NvbmZpZyAqLCB1
X2ludCAqKTsKIHN0YXRpYyBpbnQJdmdhX3NldGJvcmRlcihzdHJ1Y3QgdmdhX2NvbmZpZyAqLCB1
X2ludCk7CkBAIC0yOTMsMTMgKzI4OSw2IEBAIGNvbnN0IHN0cnVjdCB3c2Rpc3BsYXlfYWNjZXNz
b3BzIHZnYV9hY2MKIAl2Z2Ffc2hvd19zY3JlZW4sCiAJdmdhX2xvYWRfZm9udCwKIAlOVUxMLAot
I2lmZGVmIFdTRElTUExBWV9DSEFSRlVOQ1MKLQl2Z2FfZ2V0d3NjaGFyLAotCXZnYV9wdXR3c2No
YXIsCi0jZWxzZSAvKiBXU0RJU1BMQVlfQ0hBUkZVTkNTICovCi0JTlVMTCwKLQlOVUxMLAotI2Vu
ZGlmIC8qIFdTRElTUExBWV9DSEFSRlVOQ1MgKi8KICNpZmRlZiBXU0RJU1BMQVlfU0NST0xMU1VQ
UE9SVAogCXZnYV9zY3JvbGwsCiAjZWxzZQpAQCAtNzcxLDYgKzc2MCw3IEBAIGludAogdmdhX2lv
Y3RsKHZvaWQgKnYsIHZvaWQgKnZzLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBmbGFn
LCBzdHJ1Y3QgbHdwICpsKQogewogCXN0cnVjdCB2Z2FfY29uZmlnICp2YyA9IHY7CisJc3RydWN0
IHZnYXNjcmVlbiAqc2NyID0gdnM7CiAJY29uc3Qgc3RydWN0IHZnYV9mdW5jcyAqdmYgPSB2Yy0+
dmNfZnVuY3M7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtNzkxLDYgKzc4MSwxNiBAQCB2Z2FfaW9j
dGwodm9pZCAqdiwgdm9pZCAqdnMsIHVfbG9uZyBjbWQsCiAJCXZnYV9zZXRfdmlkZW8odmMsICoo
aW50ICopZGF0YSA9PSBXU0RJU1BMQVlJT19WSURFT19PTik7CiAJCXJldHVybiAwOwogCisJY2Fz
ZSBXU0RJU1BMQVlJT19HRVRXU0NIQVI6CisJCUtBU1NFUlQoc2NyICE9IE5VTEwpOworCQlyZXR1
cm4gcGNkaXNwbGF5X2dldHdzY2hhcigmc2NyLT5wY3MsCisJCSAgICAoc3RydWN0IHdzZGlzcGxh
eV9jaGFyICopZGF0YSk7CisKKwljYXNlIFdTRElTUExBWUlPX1BVVFdTQ0hBUjoKKwkJS0FTU0VS
VChzY3IgIT0gTlVMTCk7CisJCXJldHVybiBwY2Rpc3BsYXlfcHV0d3NjaGFyKCZzY3ItPnBjcywK
KwkJICAgIChzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKilkYXRhKTsKKwogI2lmZGVmIFdTRElTUExB
WV9DVVNUT01fQk9SREVSCiAJY2FzZSBXU0RJU1BMQVlJT19HQk9SREVSOgogCQlyZXR1cm4gKHZn
YV9nZXRib3JkZXIodmMsICh1X2ludCAqKWRhdGEpKTsKQEAgLTE0MTcsMjcgKzE0MTcsNiBAQCB2
Z2FfcHV0Y2hhcih2b2lkICpjLCBpbnQgcm93LCBpbnQgY29sLCB1CiAJcGNkaXNwbGF5X3B1dGNo
YXIoYywgcm93LCBjb2wsIHVjLCBhdHRyKTsKIH0KIAotCi0jaWZkZWYgV1NESVNQTEFZX0NIQVJG
VU5DUwotaW50Ci12Z2FfZ2V0d3NjaGFyKHZvaWQgKmNvb2tpZSwgc3RydWN0IHdzZGlzcGxheV9j
aGFyICp3c2NoYXIpCi17Ci0Jc3RydWN0IHZnYXNjcmVlbiAqc2NyID0gY29va2llOwotCi0JaWYg
KHNjciA9PSBOVUxMKSByZXR1cm4gMDsKLQlyZXR1cm4gKHBjZGlzcGxheV9nZXR3c2NoYXIoJnNj
ci0+cGNzLCB3c2NoYXIpKTsKLX0KLQotaW50Ci12Z2FfcHV0d3NjaGFyKHZvaWQgKmNvb2tpZSwg
c3RydWN0IHdzZGlzcGxheV9jaGFyICp3c2NoYXIpCi17Ci0Jc3RydWN0IHZnYXNjcmVlbiAqc2Ny
ID0gY29va2llOwotCi0JaWYgKHNjciA9PSBOVUxMKSByZXR1cm4gMDsKLQlyZXR1cm4gKHBjZGlz
cGxheV9wdXR3c2NoYXIoJnNjci0+cGNzLCB3c2NoYXIpKTsKLX0KLSNlbmRpZiAvKiBXU0RJU1BM
QVlfQ0hBUkZVTkNTICovCi0KICNpZmRlZiBXU0RJU1BMQVlfQ1VTVE9NX0JPUkRFUgogc3RhdGlj
IGludAogdmdhX2dldGJvcmRlcihzdHJ1Y3QgdmdhX2NvbmZpZyAqdmMsIHVfaW50ICp2YWx1ZXAp
CkluZGV4OiBkZXYvcGNpL21hY2hmYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3Ny
Yy9zeXMvZGV2L3BjaS9tYWNoZmIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11
IC1wIC1yMS40MSBtYWNoZmIuYwotLS0gZGV2L3BjaS9tYWNoZmIuYwkxMiBBcHIgMjAwNiAyMDoz
NTo0MiAtMDAwMAkxLjQxCisrKyBkZXYvcGNpL21hY2hmYi5jCTE0IEFwciAyMDA2IDA4OjMzOjIw
IC0wMDAwCkBAIC0zODIsOCArMzgyLDYgQEAgc3RhdGljIHN0cnVjdCB3c2Rpc3BsYXlfYWNjZXNz
b3BzIG1hY2g2NAogCU5VTEwsCQkJLyogdmNvbnNfc2hvd19zY3JlZW4gKi8KIAlOVUxMLAkJCS8q
IGxvYWRfZm9udCAqLwogCU5VTEwsCQkJLyogcG9sbHMgKi8KLQlOVUxMLAkJCS8qIGdldHdzY2hh
ciAqLwotCU5VTEwsCQkJLyogcHV0d3NjaGFyICovCiAJTlVMTCwJCQkvKiBzY3JvbGwgKi8KIH07
CiAKSW5kZXg6IGRldi9wY2kvdm9vZG9vZmIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
dC9zcmMvc3lzL2Rldi9wY2kvdm9vZG9vZmIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRp
ZmYgLXUgLXAgLXIxLjMgdm9vZG9vZmIuYwotLS0gZGV2L3BjaS92b29kb29mYi5jCTEyIEFwciAy
MDA2IDIzOjExOjU2IC0wMDAwCTEuMworKysgZGV2L3BjaS92b29kb29mYi5jCTE0IEFwciAyMDA2
IDA4OjMzOjIxIC0wMDAwCkBAIC0xOTgsOCArMTk4LDYgQEAgc3RydWN0IHdzZGlzcGxheV9hY2Nl
c3NvcHMgdm9vZG9vZmJfYWNjZQogCXZvb2Rvb2ZiX21tYXAsCiAJTlVMTCwJLyogbG9hZF9mb250
ICovCiAJTlVMTCwJLyogcG9sbHMgKi8KLQlOVUxMLAkvKiBnZXR3c2NoYXIgKi8KLQlOVUxMLAkv
KiBwdXR3c2NoYXIgKi8KIAlOVUxMLAkvKiBzY3JvbGwgKi8KIH07CiAKSW5kZXg6IGRldi9zYnVz
L3A5MTAwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvc2J1cy9w
OTEwMC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMxIHA5MTAw
LmMKLS0tIGRldi9zYnVzL3A5MTAwLmMJMTIgQXByIDIwMDYgMTk6Mzg6MjQgLTAwMDAJMS4zMQor
KysgZGV2L3NidXMvcDkxMDAuYwkxNCBBcHIgMjAwNiAwODozMzoyMSAtMDAwMApAQCAtMjUwLDgg
KzI1MCw2IEBAIHN0cnVjdCB3c2Rpc3BsYXlfYWNjZXNzb3BzIHA5MTAwX2FjY2Vzc28KIAlOVUxM
LAkvKiB2Y29uc19zaG93X3NjcmVlbiAqLwogCU5VTEwsCS8qIGxvYWRfZm9udCAqLwogCU5VTEws
CS8qIHBvbGxzICovCi0JTlVMTCwJLyogZ2V0d3NjaGFyICovCi0JTlVMTCwJLyogcHV0d3NjaGFy
ICovCiAJTlVMTCwJLyogc2Nyb2xsICovCiB9OwogI2VuZGlmCkluZGV4OiBkZXYvc3VuL2Nnc2l4
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvc3VuL2Nnc2l4LmMs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAgY2dzaXguYwotLS0g
ZGV2L3N1bi9jZ3NpeC5jCTEyIEFwciAyMDA2IDE5OjM4OjI0IC0wMDAwCTEuMzAKKysrIGRldi9z
dW4vY2dzaXguYwkxNCBBcHIgMjAwNiAwODozMzoyMiAtMDAwMApAQCAtMTkyLDggKzE5Miw2IEBA
IHN0cnVjdCB3c2Rpc3BsYXlfYWNjZXNzb3BzIGNnc2l4X2FjY2Vzc28KIAljZ3NpeF9zaG93X3Nj
cmVlbiwKIAlOVUxMLCAJLyogbG9hZF9mb250ICovCiAJTlVMTCwJLyogcG9sbGMgKi8KLQlOVUxM
LAkvKiBnZXR3c2NoYXIgKi8KLQlOVUxMLAkvKiBwdXR3c2NoYXIgKi8KIAlOVUxMCS8qIHNjcm9s
bCAqLwogfTsKIApJbmRleDogZGV2L3dzY29ucy9maWxlcy53c2NvbnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9kZXYvd3Njb25zL2ZpbGVzLndzY29ucyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNwpkaWZmIC11IC1wIC1yMS4zNyBmaWxlcy53c2NvbnMKLS0tIGRldi93
c2NvbnMvZmlsZXMud3Njb25zCTIzIEZlYiAyMDA2IDA4OjAxOjU5IC0wMDAwCTEuMzcKKysrIGRl
di93c2NvbnMvZmlsZXMud3Njb25zCTE0IEFwciAyMDA2IDA4OjMzOjIyIC0wMDAwCkBAIC0yNyw3
ICsyNyw2IEBAIGRlZnBhcmFtIG9wdF93c2VtdWwuaAkJV1NFTVVMX1ZUMTAwX0hJTEkKIGRlZmZs
YWcJb3B0X3dzZGlzcGxheV9jb21wYXQuaAlXU0RJU1BMQVlfQ09NUEFUX1VTTAogCQkJCVdTRElT
UExBWV9DT01QQVRfUkFXS0JECiAJCQkJV1NESVNQTEFZX0NPTVBBVF9QQ1ZUIFdTRElTUExBWV9D
T01QQVRfU1lTQ09OUwotCQkJCVdTRElTUExBWV9DSEFSRlVOQ1MKIAkJCQlXU0NPTlNfU1VQUE9S
VF9QQ1ZURk9OVFMKIAkJCQlXU0NPTlNfU1VQUE9SVF9JU083Rk9OVFMKIAkJCQlXU0RJU1BMQVlf
U0NST0xMU1VQUE9SVApJbmRleDogZGV2L3dzY29ucy93c2Rpc3BsYXkuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2Rldi93c2NvbnMvd3NkaXNwbGF5LmMsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYgd3NkaXNwbGF5LmMKLS0tIGRldi93
c2NvbnMvd3NkaXNwbGF5LmMJMTMgQXByIDIwMDYgMDE6MTU6MjcgLTAwMDAJMS45NgorKysgZGV2
L3dzY29ucy93c2Rpc3BsYXkuYwkxNCBBcHIgMjAwNiAwODozMzoyMiAtMDAwMApAQCAtMTEzNCwy
OCArMTEzNCw2IEBAIHdzZGlzcGxheV9pbnRlcm5hbF9pb2N0bChzdHJ1Y3Qgd3NkaXNwbGEKIAkJ
cmV0dXJuIChlcnJvcik7CiAjdW5kZWYgZAogCi0jaWYgZGVmaW5lZChXU0RJU1BMQVlfQ0hBUkZV
TkNTKQotCWNhc2UgV1NESVNQTEFZSU9fR0VUV1NDSEFSOgotI2RlZmluZSBkICgoc3RydWN0IHdz
ZGlzcGxheV9jaGFyICopZGF0YSkKLQkJaWYgKCFzYy0+c2NfYWNjZXNzb3BzLT5nZXR3c2NoYXIp
Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCXJldHVybiAoKCpzYy0+c2NfYWNjZXNzb3BzLT5nZXR3
c2NoYXIpCi0JCQkoc2NyLT5zY3JfZGNvbmYtPmVtdWxjb29raWUsIGQpKTsKLSN1bmRlZiBkCi0K
LQljYXNlIFdTRElTUExBWUlPX1BVVFdTQ0hBUjoKLSNkZWZpbmUgZCAoKHN0cnVjdCB3c2Rpc3Bs
YXlfY2hhciAqKWRhdGEpCi0JCWlmICghc2MtPnNjX2FjY2Vzc29wcy0+cHV0d3NjaGFyKQotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQlyZXR1cm4gKCgqc2MtPnNjX2FjY2Vzc29wcy0+cHV0d3NjaGFy
KQotCQkJKHNjci0+c2NyX2Rjb25mLT5lbXVsY29va2llLCBkKSk7Ci0jdW5kZWYgZAotI2Vsc2UK
LQljYXNlIFdTRElTUExBWUlPX1BVVFdTQ0hBUjoKLQljYXNlIFdTRElTUExBWUlPX0dFVFdTQ0hB
UjoKLQkJcmV0dXJuIEVOT0RFVjsKLSNlbmRpZiAvKiBXU0RJU1BMQVlfQ0hBUkZVTkNTICovCi0K
ICNpZmRlZiBXU0RJU1BMQVlfQ1VTVE9NX09VVFBVVAogCWNhc2UgV1NESVNQTEFZSU9fR01TR0FU
VFJTOgogI2RlZmluZSBkICgoc3RydWN0IHdzZGlzcGxheV9tc2dhdHRycyAqKWRhdGEpCkluZGV4
OiBkZXYvd3Njb25zL3dzZGlzcGxheV92Y29ucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNy
b290L3NyYy9zeXMvZGV2L3dzY29ucy93c2Rpc3BsYXlfdmNvbnMuYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUgd3NkaXNwbGF5X3Zjb25zLmMKLS0tIGRldi93c2Nv
bnMvd3NkaXNwbGF5X3Zjb25zLmMJMTkgRmViIDIwMDYgMDM6NTE6MDMgLTAwMDAJMS41CisrKyBk
ZXYvd3Njb25zL3dzZGlzcGxheV92Y29ucy5jCTE0IEFwciAyMDA2IDA4OjMzOjIyIC0wMDAwCkBA
IC02MCw2ICs2MCw3IEBAIF9fS0VSTkVMX1JDU0lEKDAsICIkTmV0QlNEOiB3c2Rpc3BsYXlfdmMK
IHN0YXRpYyB2b2lkIHZjb25zX2R1bW15X2luaXRfc2NyZWVuKHZvaWQgKiwgc3RydWN0IHZjb25z
X3NjcmVlbiAqLCBpbnQsIAogCSAgICBsb25nICopOwogCitzdGF0aWMgaW50ICB2Y29uc19pb2N0
bCh2b2lkICosIHZvaWQgKiwgdV9sb25nLCBjYWRkcl90LCBpbnQsIHN0cnVjdCBsd3AgKik7CiBz
dGF0aWMgaW50ICB2Y29uc19hbGxvY19zY3JlZW4odm9pZCAqLCBjb25zdCBzdHJ1Y3Qgd3NzY3Jl
ZW5fZGVzY3IgKiwgdm9pZCAqKiwgCiAJICAgIGludCAqLCBpbnQgKiwgbG9uZyAqKTsKIHN0YXRp
YyB2b2lkIHZjb25zX2ZyZWVfc2NyZWVuKHZvaWQgKiwgdm9pZCAqKTsKQEAgLTg3LDggKzg4LDgg
QEAgc3RhdGljIHZvaWQgdmNvbnNfcHV0Y2hhcih2b2lkICosIGludCwgaQogc3RhdGljIHZvaWQg
dmNvbnNfY3Vyc29yKHZvaWQgKiwgaW50LCBpbnQsIGludCk7CiAKIC8qIHN1cHBvcnQgZm9yIHJl
YWRpbi93cml0aW5nIHRleHQgYnVmZmVycy4gRm9yIHdzbW91c2VkICovCi1zdGF0aWMgaW50ICB2
Y29uc19wdXR3c2NoYXIodm9pZCAqLCBzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKik7Ci1zdGF0aWMg
aW50ICB2Y29uc19nZXR3c2NoYXIodm9pZCAqLCBzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKik7Citz
dGF0aWMgaW50ICB2Y29uc19wdXR3c2NoYXIoc3RydWN0IHZjb25zX3NjcmVlbiAqLCBzdHJ1Y3Qg
d3NkaXNwbGF5X2NoYXIgKik7CitzdGF0aWMgaW50ICB2Y29uc19nZXR3c2NoYXIoc3RydWN0IHZj
b25zX3NjcmVlbiAqLCBzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKik7CiAKIHN0YXRpYyB2b2lkIHZj
b25zX2xvY2soc3RydWN0IHZjb25zX3NjcmVlbiAqKTsKIHN0YXRpYyB2b2lkIHZjb25zX3VubG9j
ayhzdHJ1Y3QgdmNvbnNfc2NyZWVuICopOwpAQCAtMTA3LDExICsxMDgsMTUgQEAgdmNvbnNfaW5p
dChzdHJ1Y3QgdmNvbnNfZGF0YSAqdmQsIHZvaWQgKgogCXZkLT5pbml0X3NjcmVlbiA9IHZjb25z
X2R1bW15X2luaXRfc2NyZWVuOwogCXZkLT5zaG93X3NjcmVlbl9jYiA9IE5VTEw7CiAKKwkvKiBr
ZWVwIGEgY29weSBvZiB0aGUgYWNjZXNzb3BzIHRoYXQgd2UgcmVwbGFjZSBiZWxvdyB3aXRoIG91
cgorCSAqIG93biB3cmFwcGVycyAqLworCXZkLT5pb2N0bCA9IGFvLT5pb2N0bDsKKworCS8qIGNv
bmZpZ3VyZSB0aGUgYWNjZXNzb3BzICovCisJYW8tPmlvY3RsID0gdmNvbnNfaW9jdGw7CiAJYW8t
PmFsbG9jX3NjcmVlbiA9IHZjb25zX2FsbG9jX3NjcmVlbjsKIAlhby0+ZnJlZV9zY3JlZW4gPSB2
Y29uc19mcmVlX3NjcmVlbjsKIAlhby0+c2hvd19zY3JlZW4gPSB2Y29uc19zaG93X3NjcmVlbjsK
LQlhby0+Z2V0d3NjaGFyID0gdmNvbnNfZ2V0d3NjaGFyOwotCWFvLT5wdXR3c2NoYXIgPSB2Y29u
c19wdXR3c2NoYXI7CiAKIAlMSVNUX0lOSVQoJnZkLT5zY3JlZW5zKTsKIAl2ZC0+YWN0aXZlID0g
TlVMTDsKQEAgLTM2MSw2ICszNjYsMzQgQEAgdmNvbnNfcmVkcmF3X3NjcmVlbihzdHJ1Y3QgdmNv
bnNfc2NyZWVuIAogfQogCiBzdGF0aWMgaW50Cit2Y29uc19pb2N0bCh2b2lkICp2LCB2b2lkICp2
cywgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhLCBpbnQgZmxhZywKKwlzdHJ1Y3QgbHdwICpsKQor
eworCXN0cnVjdCB2Y29uc19kYXRhICp2ZCA9IHY7CisJaW50IGVycm9yOworCisJc3dpdGNoIChj
bWQpIHsKKwljYXNlIFdTRElTUExBWUlPX0dFVFdTQ0hBUjoKKwkJZXJyb3IgPSB2Y29uc19nZXR3
c2NoYXIoKHN0cnVjdCB2Y29uc19zY3JlZW4gKil2cywKKwkJCShzdHJ1Y3Qgd3NkaXNwbGF5X2No
YXIgKilkYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFdTRElTUExBWUlPX1BVVFdTQ0hBUjoKKwkJ
ZXJyb3IgPSB2Y29uc19wdXR3c2NoYXIoKHN0cnVjdCB2Y29uc19zY3JlZW4gKil2cywKKwkJCShz
dHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKilkYXRhKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlp
ZiAodmQtPmlvY3RsICE9IE5VTEwpCisJCQllcnJvciA9ICgqdmQtPmlvY3RsKSh2LCB2cywgY21k
LCBkYXRhLCBmbGFnLCBsKTsKKwkJZWxzZQorCQkJZXJyb3IgPSBFUEFTU1RIUk9VR0g7CisJfQor
CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50CiB2Y29uc19hbGxvY19zY3JlZW4odm9p
ZCAqdiwgY29uc3Qgc3RydWN0IHdzc2NyZWVuX2Rlc2NyICp0eXBlLCB2b2lkICoqY29va2llcCwK
ICAgICBpbnQgKmN1cnhwLCBpbnQgKmN1cnlwLCBsb25nICpkZWZhdHRycCkKIHsKQEAgLTYyMiwx
MCArNjU1LDE0IEBAIHZjb25zX2N1cnNvcih2b2lkICpjb29raWUsIGludCBvbiwgaW50IHIKIC8q
IG1ldGhvZHMgdG8gcmVhZC93cml0ZSBjaGFyYWN0ZXJzIHZpYSBpb2N0bCgpICovCiAKIHN0YXRp
YyBpbnQKLXZjb25zX3B1dHdzY2hhcih2b2lkICpjb29raWUsIHN0cnVjdCB3c2Rpc3BsYXlfY2hh
ciAqd3NjKQordmNvbnNfcHV0d3NjaGFyKHN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciwgc3RydWN0
IHdzZGlzcGxheV9jaGFyICp3c2MpCiB7Ci0Jc3RydWN0IHJhc29wc19pbmZvICpyaSA9IGNvb2tp
ZTsKIAlsb25nIGF0dHI7CisJc3RydWN0IHJhc29wc19pbmZvICpyaTsKKworCUtBU1NFUlQoc2Ny
ICE9IE5VTEwgJiYgd3NjICE9IE5VTEwpOworCisJcmkgPSAmc2NyLT5zY3Jfcmk7CiAJCiAJcmkt
PnJpX29wcy5hbGxvY2F0dHIocmksIHdzYy0+Zm9yZWdyb3VuZCwgd3NjLT5iYWNrZ3JvdW5kLAog
CSAgICB3c2MtPmZsYWdzLCAmYXR0cik7CkBAIC02MzQsMTMgKzY3MSwxNiBAQCB2Y29uc19wdXR3
c2NoYXIodm9pZCAqY29va2llLCBzdHJ1Y3Qgd3NkCiB9CiAKIHN0YXRpYyBpbnQKLXZjb25zX2dl
dHdzY2hhcih2b2lkICpjb29raWUsIHN0cnVjdCB3c2Rpc3BsYXlfY2hhciAqd3NjKQordmNvbnNf
Z2V0d3NjaGFyKHN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciwgc3RydWN0IHdzZGlzcGxheV9jaGFy
ICp3c2MpCiB7Ci0Jc3RydWN0IHJhc29wc19pbmZvICpyaSA9IGNvb2tpZTsKLQlzdHJ1Y3QgdmNv
bnNfc2NyZWVuICpzY3IgPSByaS0+cmlfaHc7CisJaW50IG9mZnNldDsKIAlsb25nIGF0dHI7Ci0J
aW50IG9mZnNldCA9IHJpLT5yaV9jb2xzICogd3NjLT5yb3cgKyB3c2MtPmNvbDsKLQkKKwlzdHJ1
Y3QgcmFzb3BzX2luZm8gKnJpOworCisJS0FTU0VSVChzY3IgIT0gTlVMTCAmJiB3c2MgIT0gTlVM
TCk7CisKKwlyaSA9ICZzY3ItPnNjcl9yaTsKKwlvZmZzZXQgPSByaS0+cmlfY29scyAqIHdzYy0+
cm93ICsgd3NjLT5jb2w7CiAJd3NjLT5sZXR0ZXIgPSBzY3ItPnNjcl9jaGFyc1tvZmZzZXRdOwog
CWF0dHIgPSBzY3ItPnNjcl9hdHRyc1tvZmZzZXRdOwogCkluZGV4OiBkZXYvd3Njb25zL3dzZGlz
cGxheV92Y29uc3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2
L3dzY29ucy93c2Rpc3BsYXlfdmNvbnN2YXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRp
ZmYgLXUgLXAgLXIxLjMgd3NkaXNwbGF5X3Zjb25zdmFyLmgKLS0tIGRldi93c2NvbnMvd3NkaXNw
bGF5X3Zjb25zdmFyLmgJMTkgRmViIDIwMDYgMDM6NTE6MDMgLTAwMDAJMS4zCisrKyBkZXYvd3Nj
b25zL3dzZGlzcGxheV92Y29uc3Zhci5oCTE0IEFwciAyMDA2IDA4OjMzOjIyIC0wMDAwCkBAIC04
NSw2ICs4NSw5IEBAIHN0cnVjdCB2Y29uc19kYXRhIHsKIAl2b2lkICgqaW5pdF9zY3JlZW4pKHZv
aWQgKiwgc3RydWN0IHZjb25zX3NjcmVlbiAqLCBpbnQsIAogCSAgICBsb25nICopOwogCisJLyog
YWNjZXNzb3BzICovCisJaW50ICgqaW9jdGwpKHZvaWQgKiwgdm9pZCAqLCB1X2xvbmcsIGNhZGRy
X3QsIGludCwgc3RydWN0IGx3cCAqKTsKKwogCS8qIHJhc29wcyAqLwogCXZvaWQgKCpjb3B5Y29s
cykodm9pZCAqLCBpbnQsIGludCwgaW50LCBpbnQpOwogCXZvaWQgKCplcmFzZWNvbHMpKHZvaWQg
KiwgaW50LCBpbnQsIGludCwgbG9uZyk7CkluZGV4OiBkZXYvd3Njb25zL3dzZGlzcGxheXZhci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvZGV2L3dzY29ucy93c2Rpc3Bs
YXl2YXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1yMS4zOCB3c2Rp
c3BsYXl2YXIuaAotLS0gZGV2L3dzY29ucy93c2Rpc3BsYXl2YXIuaAkxMiBBcHIgMjAwNiAxOToz
ODoyNCAtMDAwMAkxLjM4CisrKyBkZXYvd3Njb25zL3dzZGlzcGxheXZhci5oCTE0IEFwciAyMDA2
IDA4OjMzOjIyIC0wMDAwCkBAIC0xMjEsOCArMTIxLDYgQEAgc3RydWN0IHdzZGlzcGxheV9hY2Nl
c3NvcHMgewogCQkJCSAgICB2b2lkICgqKSAodm9pZCAqLCBpbnQsIGludCksIHZvaWQgKik7CiAJ
aW50CSgqbG9hZF9mb250KSh2b2lkICosIHZvaWQgKiwgc3RydWN0IHdzZGlzcGxheV9mb250ICop
OwogCXZvaWQJKCpwb2xsYykodm9pZCAqLCBpbnQpOwotCWludAkoKmdldHdzY2hhcikodm9pZCAq
LCBzdHJ1Y3Qgd3NkaXNwbGF5X2NoYXIgKik7Ci0JaW50CSgqcHV0d3NjaGFyKSh2b2lkICosIHN0
cnVjdCB3c2Rpc3BsYXlfY2hhciAqKTsKIAl2b2lkCSgqc2Nyb2xsKSh2b2lkICosIHZvaWQgKiwg
aW50KTsKIH07CiAK
------=_Part_836_13792303.1145003710397--