Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKx7k-0005QW-N9 for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Feb 2022 06:52:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nKx7j-0001vo-Ki for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Feb 2022 06:52:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKx7h-0001ve-Sx for pgsql-hackers@lists.postgresql.org; Fri, 18 Feb 2022 06:52:11 +0000 Received: from wout5-smtp.messagingengine.com ([64.147.123.21]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKx7b-0001Se-25 for pgsql-hackers@postgresql.org; Fri, 18 Feb 2022 06:52:08 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id 968453201DFD; Fri, 18 Feb 2022 01:51:59 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Fri, 18 Feb 2022 01:51:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=tF20zFeyNfyVTqsQJ Wntf+wRKLNkVOxecbSeVLpvjUg=; b=Gq9OKvdMq6mt8csp29tG8eM6Dkisd2twQ bXUz2GWglKR2zL3WMBbq3dUSBwBn46jA2QpFmy2KCTd/qeZmUx/W5AtYjojpyYXa LNzncfpTepbGiHC4iVNOCq5kZyc70uGi6ghfHCvnNA2Wpg3LjnnBLLXqGHCoCLSD 4b7jqGyA7iBAQnYijasUsGOPaxjExXCRonZSARtZ1yKi41NI+kTPng9DOmIU4/Co HVPj8DA06CnASUD3o+AHkxgmaeFGKx7RPBBZdH16LIVjLGlJU3rF0rhSqyxQIlxl KrxVipj5cKOZwMH0rU/jYjjIZj5bLkEuL3HVnwVmVF+Gv+w6V0jXg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddrjeelgddutddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffvfhfhjgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepuddtveeltdevvdetuddvfedvhfeiteekledvhffhjeefjedvueejgeegfedu gedtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 18 Feb 2022 01:51:57 -0500 (EST) Content-Type: multipart/mixed; boundary="------------0BmNTOH3072Wv110GeP4VtJT" Message-ID: Date: Fri, 18 Feb 2022 07:51:56 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.0 Subject: Re: automatically generating node support functions Content-Language: en-US To: Tom Lane Cc: pgsql-hackers References: <2f876203-7142-fa71-6d22-6ce00eb26869@enterprisedb.com> <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> <40a2e977-98ba-0c01-af6c-9dfb39e864ba@enterprisedb.com> <812ea8eb-6827-ba32-6ec0-6714f7ffa5dd@enterprisedb.com> <2905876.1644858587@sss.pgh.pa.us> From: Peter Eisentraut In-Reply-To: <2905876.1644858587@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0BmNTOH3072Wv110GeP4VtJT Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 14.02.22 18:09, Tom Lane wrote: > * It's time for action on the business about extracting comments > from the to-be-deleted code. done > * The Perl script is kind of under-commented for my taste. > It lacks a copyright notice, too. done > * In the same vein, I should not have to reverse-engineer what > the available pg_node_attr() properties are or do. Perhaps they > could be documented in the comment for the pg_node_attr macro > in nodes.h. done > * Maybe the generated file names could be chosen less opaquely, > say ".funcs" and ".switch" instead of ".inc1" and ".inc2". done > * I don't understand why there are changes in the #include > lists in copyfuncs.c etc? Those are #include lines required for the definitions of various structs. Since the generation script already knows which header files are relevant (they are its input files), it can just generate the required #include lines as well. That way, the remaining copyfuncs.c only has #include lines for things that the (remaining) file itself needs, not what the files included by it need, and if a new header file were to be added, it doesn't have to be added in 4+ places. > * I think that more thought needs to be put into the format > of the *nodes.h struct declarations, because I fear pgindent > is going to make a hash of what you've done here. When we > did similar stuff in the catalog headers, I think we ended > up moving a lot of end-of-line comments onto their own lines. I have tested pgindent repeatedly throughout this project, and it doesn't look too bad. You are right that some manual curation of comment formatting would be sensible, but I think that might be better done as a separate patch. > * I assume the pg_config_manual.h changes are not meant for > commit? right --------------0BmNTOH3072Wv110GeP4VtJT Content-Type: text/plain; charset=UTF-8; name="v5-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v5-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSBjZGQ5ZjJhNjczOGI4Yzg1Y2VjOGJhNjE2OWYyODFlYmRjNGQyZTRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxOCBGZWIgMjAyMiAwNzozOTo0MiArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjVdIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbm9kZSBzdXBwb3J0IGZ1bmN0 aW9ucwoKQWRkIGEgc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIG5vZGUg c3VwcG9ydCBmdW5jdGlvbnMKKGNvcHksIGVxdWFsLCBvdXQsIGFuZCByZWFkLCBhcyB3ZWxs IGFzIHRoZSBub2RlIHRhZ3MgZW51bSkgZnJvbSB0aGUKc3RydWN0IGRlZmluaXRpb25zLgoK Rm9yIGVhY2ggb2YgdGhlIGZvdXIgbm9kZSBzdXBwb3J0IGZpbGVzLCBpdCBjcmVhdGVzIHR3 byBpbmNsdWRlIGZpbGVzLAplLmcuLCBjb3B5ZnVuY3MuZnVuY3MuYyBhbmQgY29weWZ1bmNz LnN3aXRjaC5jLCB0byBpbmNsdWRlIGluIHRoZSBtYWluCmZpbGUuICBBbGwgdGhlIHNjYWZm b2xkaW5nIG9mIHRoZSBtYWluIGZpbGUgc3RheXMgaW4gcGxhY2UuCgpUT0RPOiBJbiB0aGlz IHBhdGNoLCBJIGhhdmUgb25seSBpZmRlZidlZCBvdXQgdGhlIGNvZGUgdG8gY291bGQgYmUK cmVtb3ZlZCwgbWFpbmx5IHNvIHRoYXQgaXQgd29uJ3QgY29uc3RhbnRseSBoYXZlIG1lcmdl IGNvbmZsaWN0cy4KRXZlbnR1YWxseSwgdGhhdCBzaG91bGQgYWxsIGJlIGNoYW5nZWQgdG8g ZGVsZXRlIHRoZSBjb2RlLiAgQWxsIHRoZQpjb2RlIGNvbW1lbnRzIHRoYXQgYXJlIHdvcnRo IGtlZXBpbmcgZnJvbSB0aG9zZSBzZWN0aW9ucyBoYXZlIGFscmVhZHkKYmVlbiBtb3ZlZCB0 byB0aGUgaGVhZGVyIGZpbGVzIHdoZXJlIHRoZSBzdHJ1Y3RzIGFyZSBkZWZpbmVkLgoKSSBo YXZlIHRyaWVkIHRvIG1vc3RseSBtYWtlIHRoZSBjb3ZlcmFnZSBvZiB0aGUgb3V0cHV0IG1h dGNoIHdoYXQgaXMKY3VycmVudGx5IHRoZXJlLiAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBu b3cgZG8gb3V0L3JlYWQgY292ZXJhZ2Ugb2YKdXRpbGl0eSBzdGF0ZW1lbnQgbm9kZXMsIGJ1 dCBJIGhhdmUgbWFudWFsbHkgZXhjbHVkZWQgdGhvc2UgZm9yIG5vdy4KVGhlIHJlYXNvbiBp cyBtYWlubHkgdGhhdCBpdCdzIGVhc2llciB0byBkaWZmIHRoZSBiZWZvcmUgYW5kIGFmdGVy LAphbmQgYWRkaW5nIGEgYnVuY2ggb2Ygc3R1ZmYgbGlrZSB0aGlzIG1pZ2h0IHJlcXVpcmUg YSBzZXBhcmF0ZQphbmFseXNpcyBhbmQgcmV2aWV3LgoKU3VidHlwaW5nIChUaWRTY2FuIC0+ IFNjYW4pIGlzIHN1cHBvcnRlZC4KCkZvciB0aGUgaGFyZCBjYXNlcywgeW91IGNhbiBqdXN0 IHdyaXRlIGEgbWFudWFsIGZ1bmN0aW9uIGFuZCBleGNsdWRlCmdlbmVyYXRpbmcgb25lLiAg Rm9yIHRoZSBub3Qgc28gaGFyZCBjYXNlcywgdGhlcmUgaXMgYSB3YXkgb2YKYW5ub3RhdGlu ZyBzdHJ1Y3QgZmllbGRzIHRvIGdldCBzcGVjaWFsIGJlaGF2aW9ycy4gIEZvciBleGFtcGxl LApwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKSBoYXMgdGhlIGZpZWxkIGlnbm9yZWQgaW4g ZXF1YWwgZnVuY3Rpb25zLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5v cmcvbWVzc2FnZS1pZC9mbGF0L2MxMDk3NTkwLWE2YTQtNDg2YS02NGIxLWUxZjljYzA1MzNj ZSU0MGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvYmFja2VuZC9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdub3JlICAgICAg ICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlICAgICAgICAgICAgfCAg NDYgKysKIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgfCAgMTkgKy0K IHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyAgICAgICAgfCAgMjIgKy0KIHNyYy9i YWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwgfCA3MjkgKysrKysrKysrKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgfCAg MzQgKy0KIHNyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jICAgICAgICAgfCAgMjMgKy0K IHNyYy9pbmNsdWRlL25vZGVzLy5naXRpZ25vcmUgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICB8ICAyNyArCiBzcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmggICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaCAgICAgICAgIHwgMTcwICsrKy0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmggICAgICAgICB8ICA5MCArKy0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaCAgICAgICAgIHwgIDMzICstCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSAgICAgICAgICAg IHwgIDQ2ICsrCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMTEzIGluc2VydGlvbnMoKyksIDE0OSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9ub2Rlcy8uZ2l0 aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVf c3VwcG9ydC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL25vZGVzLy5naXRp Z25vcmUKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L01ha2VmaWxlCmluZGV4IDRhMDIwMDY3ODguLjgyMWJlZjI2OTQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCkBAIC0xNDMs MTEgKzE0MywxNSBAQCBzdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMuaDogc3RvcmFnZS9sbWdy L2dlbmVyYXRlLWx3bG9ja25hbWVzLnBsIHN0b3JhZ2UvbG1nci9sdwogc3VibWFrZS1jYXRh bG9nLWhlYWRlcnM6CiAJJChNQUtFKSAtQyBjYXRhbG9nIGRpc3RwcmVwIGdlbmVyYXRlZC1o ZWFkZXItc3ltbGlua3MKIAorIyBydW4gdGhpcyB1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQg bmVlZGluZyB0byBrbm93IGl0cyBkZXBlbmRlbmNpZXMgaGVyZToKK3N1Ym1ha2Utbm9kZXMt aGVhZGVyczoKKwkkKE1BS0UpIC1DIG5vZGVzIGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXIt c3ltbGlua3MKKwogIyBydW4gdGhpcyB1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQgbmVlZGlu ZyB0byBrbm93IGl0cyBkZXBlbmRlbmNpZXMgaGVyZToKIHN1Ym1ha2UtdXRpbHMtaGVhZGVy czoKIAkkKE1BS0UpIC1DIHV0aWxzIGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlu a3MKIAotLlBIT05ZOiBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLXV0aWxzLWhl YWRlcnMKKy5QSE9OWTogc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3VibWFrZS1ub2Rlcy1o ZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycwogCiAjIE1ha2Ugc3ltbGlua3MgZm9yIHRo ZXNlIGhlYWRlcnMgaW4gdGhlIGluY2x1ZGUgZGlyZWN0b3J5LiBUaGF0IHdheQogIyB3ZSBj YW4gY3V0IGRvd24gb24gdGhlIC1JIG9wdGlvbnMuIEFsc28sIGEgc3ltbGluayBpcyBhdXRv bWF0aWNhbGx5CkBAIC0xNjIsNyArMTY2LDcgQEAgc3VibWFrZS11dGlscy1oZWFkZXJzOgog CiAuUEhPTlk6IGdlbmVyYXRlZC1oZWFkZXJzCiAKLWdlbmVyYXRlZC1oZWFkZXJzOiAkKHRv cF9idWlsZGRpcikvc3JjL2luY2x1ZGUvcGFyc2VyL2dyYW0uaCAkKHRvcF9idWlsZGRpcikv c3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tuYW1lcy5oIHN1Ym1ha2UtY2F0YWxvZy1oZWFk ZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycworZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1 aWxkZGlyKS9zcmMvaW5jbHVkZS9wYXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9ja25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMg c3VibWFrZS1ub2Rlcy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycwogCiAkKHRvcF9i dWlsZGRpcikvc3JjL2luY2x1ZGUvcGFyc2VyL2dyYW0uaDogcGFyc2VyL2dyYW0uaAogCXBy ZXJlcWRpcj1gY2QgJyQoZGlyICQ8KScgPi9kZXYvbnVsbCAmJiBwd2RgICYmIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUgYi9zcmMvYmFja2VuZC9ub2Rl cy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBj MTRiNTY5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdu b3JlCkBAIC0wLDAgKzEsNCBAQAorL25vZGUtc3VwcG9ydC1zdGFtcAorL25vZGV0YWdzLmgK Ky8qZnVuY3MuZnVuY3MuYworLypmdW5jcy5zd2l0Y2guYwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQppbmRl eCA1ZDJiMTJhOTkzLi5jN2I4ZGY0ZWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rl cy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQpAQCAtMzAsMyAr MzAsNDkgQEAgT0JKUyA9IFwKIAl2YWx1ZS5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9z cmMvYmFja2VuZC9jb21tb24ubWsKKworbm9kZV9oZWFkZXJzID0gXAorCW5vZGVzL25vZGVz LmggXAorCW5vZGVzL2V4ZWNub2Rlcy5oIFwKKwlub2Rlcy9wbGFubm9kZXMuaCBcCisJbm9k ZXMvcHJpbW5vZGVzLmggXAorCW5vZGVzL3BhdGhub2Rlcy5oIFwKKwlub2Rlcy9leHRlbnNp YmxlLmggXAorCW5vZGVzL3BhcnNlbm9kZXMuaCBcCisJbm9kZXMvcmVwbG5vZGVzLmggXAor CW5vZGVzL3ZhbHVlLmggXAorCWNvbW1hbmRzL3RyaWdnZXIuaCBcCisJY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oIFwKKwlmb3JlaWduL2Zkd2FwaS5oIFwKKwlhY2Nlc3MvYW1hcGkuaCBc CisJYWNjZXNzL3RhYmxlYW0uaCBcCisJYWNjZXNzL3RzbWFwaS5oIFwKKwl1dGlscy9yZWwu aCBcCisJbm9kZXMvc3VwcG9ydG5vZGVzLmggXAorCWV4ZWN1dG9yL3R1cHRhYmxlLmggXAor CW5vZGVzL2xvY2tvcHRpb25zLmggXAorCWFjY2Vzcy9zZGlyLmgKKworIyBzZWUgYWxzbyBj YXRhbG9nL01ha2VmaWxlIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGVzZSBtYWtlIHJ1bGVz CisKK2FsbDogZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcworCitkaXN0cHJl cDogbm9kZS1zdXBwb3J0LXN0YW1wCisKKy5QSE9OWTogZ2VuZXJhdGVkLWhlYWRlci1zeW1s aW5rcworCitnZW5lcmF0ZWQtaGVhZGVyLXN5bWxpbmtzOiAkKHRvcF9idWlsZGRpcikvc3Jj L2luY2x1ZGUvbm9kZXMvaGVhZGVyLXN0YW1wCisKK25vZGUtc3VwcG9ydC1zdGFtcDogZ2Vu X25vZGVfc3VwcG9ydC5wbCAkKGFkZHByZWZpeCAkKHRvcF9zcmNkaXIpL3NyYy9pbmNsdWRl LywkKG5vZGVfaGVhZGVycykpCisJJChQRVJMKSAkXgorCXRvdWNoICRACisKKyQodG9wX2J1 aWxkZGlyKS9zcmMvaW5jbHVkZS9ub2Rlcy9oZWFkZXItc3RhbXA6IG5vZGUtc3VwcG9ydC1z dGFtcAorCXByZXJlcWRpcj1gY2QgJyQoZGlyICQ8KScgPi9kZXYvbnVsbCAmJiBwd2RgICYm IFwKKwljZCAnJChkaXIgJEApJyAmJiBmb3IgZmlsZSBpbiBub2RldGFncy5oOyBkbyBcCisJ ICBybSAtZiAkJGZpbGUgJiYgJChMTl9TKSAiJCRwcmVyZXFkaXIvJCRmaWxlIiAuIDsgXAor CWRvbmUKKwl0b3VjaCAkQAorCittYWludGFpbmVyLWNsZWFuOiBjbGVhbgorCXJtIC1mIG5v ZGUtc3VwcG9ydC1zdGFtcCAqZnVuY3MuZnVuY3MuYyAqZnVuY3Muc3dpdGNoLmMgbm9kZXRh Z3MuaApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBiYzBkOTBiNGIxLi5jNDM1NjY3MjFm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMjMsMTEgKzIzLDcgQEAKICNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9k ZXMvZXh0ZW5zaWJsZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgotI2luY2x1 ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCi0jaW5j bHVkZSAidXRpbHMvcmVsLmgiCiAKIAogLyoKQEAgLTczLDYgKzY5LDkgQEAKIAkobmV3bm9k ZS0+ZmxkbmFtZSA9IGZyb20tPmZsZG5hbWUpCiAKIAorI2luY2x1ZGUgImNvcHlmdW5jcy5m dW5jcy5jIgorCisjaWZkZWYgT0JTT0xFVEUKIC8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkgcGxh bm5vZGVzLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0NTcsNiArMTQ1 Niw3IEBAIF9jb3B5VmFyKGNvbnN0IFZhciAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwog fQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX2NvcHlDb25zdApAQCAtMTQ5Niw2 ICsxNDk2LDcgQEAgX2NvcHlDb25zdChjb25zdCBDb25zdCAqZnJvbSkKIAlyZXR1cm4gbmV3 bm9kZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX2NvcHlQYXJhbQogICovCkBA IC0yNzMxLDYgKzI3MzIsNyBAQCBfY29weVBhcmFtUmVmKGNvbnN0IFBhcmFtUmVmICpmcm9t KQogCiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRp YyBBX0NvbnN0ICoKIF9jb3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQpAQCAtMjc3 MSw2ICsyNzczLDcgQEAgX2NvcHlBX0NvbnN0KGNvbnN0IEFfQ29uc3QgKmZyb20pCiAJcmV0 dXJuIG5ld25vZGU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIEZ1bmNDYWxsICoK IF9jb3B5RnVuY0NhbGwoY29uc3QgRnVuY0NhbGwgKmZyb20pCiB7CkBAIC00OTE4LDYgKzQ5 MjEsNyBAQCBfY29weURyb3BTdWJzY3JpcHRpb25TdG10KGNvbnN0IERyb3BTdWJzY3JpcHRp b25TdG10ICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVU RSovCiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICAqCQkJCQlleHRlbnNpYmxlLmggY29weSBmdW5jdGlv bnMKQEAgLTQ5NDAsNiArNDk0NCw3IEBAIF9jb3B5RXh0ZW5zaWJsZU5vZGUoY29uc3QgRXh0 ZW5zaWJsZU5vZGUgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKKyNpZmRlZiBPQlNP TEVURQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAq ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKQEAgLTUwMTAsNiArNTAxNSw3IEBAIF9jb3B5Rm9yZWlnbktleUNhY2hl SW5mbyhjb25zdCBGb3JlaWduS2V5Q2FjaGVJbmZvICpmcm9tKQogCiAJcmV0dXJuIG5ld25v ZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBjb3B5T2JqZWN0SW1wbCAt LSBpbXBsZW1lbnRhdGlvbiBvZiBjb3B5T2JqZWN0KCk7IHNlZSBub2Rlcy9ub2Rlcy5oCkBA IC01MDMwLDYgKzUwMzYsOCBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CiAJc3dpdGNoIChub2RlVGFnKGZyb20pKQogCXsKKyNpbmNsdWRlICJjb3B5ZnVuY3Muc3dp dGNoLmMiCisjaWZkZWYgT0JTT0xFVEUKIAkJCS8qCiAJCQkgKiBQTEFOIE5PREVTCiAJCQkg Ki8KQEAgLTUzOTAsNiArNTM5OCw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZy b20pCiAJCWNhc2UgVF9CaXRTdHJpbmc6CiAJCQlyZXR2YWwgPSBfY29weUJpdFN0cmluZyhm cm9tKTsKIAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCQkvKgogCQkJICog TElTVCBOT0RFUwpAQCAtNTQwNyw2ICs1NDE2LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qg dm9pZCAqZnJvbSkKIAkJCXJldHZhbCA9IGxpc3RfY29weShmcm9tKTsKIAkJCWJyZWFrOwog CisjaWZkZWYgT0JTT0xFVEUKIAkJCS8qCiAJCQkgKiBFWFRFTlNJQkxFIE5PREVTCiAJCQkg Ki8KQEAgLTU5NDksNiArNTk1OSw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZy b20pCiAJCWNhc2UgVF9Gb3JlaWduS2V5Q2FjaGVJbmZvOgogCQkJcmV0dmFsID0gX2NvcHlG b3JlaWduS2V5Q2FjaGVJbmZvKGZyb20pOwogCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVU RSovCiAKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0 eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcoZnJvbSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5j CmluZGV4IDJlNzEyMmFkMmYuLmY2ZjliYzUyNDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNz LmMKQEAgLTEwLDkgKzEwLDYgQEAKICAqIGJlY2F1c2UgdGhlIGNpcmN1bGFyIGxpbmthZ2Vz IGJldHdlZW4gUmVsT3B0SW5mbyBhbmQgUGF0aCBub2RlcyBjYW4ndAogICogYmUgaGFuZGxl ZCBlYXNpbHkgaW4gYSBzaW1wbGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsLgogICoKLSAqIEN1 cnJlbnRseSwgaW4gZmFjdCwgZXF1YWwoKSBkb2Vzbid0IGtub3cgaG93IHRvIGNvbXBhcmUg UGxhbiB0cmVlcwotICogZWl0aGVyLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNv bWVkYXkuCi0gKgogICogTk9URTogaXQgaXMgaW50ZW50aW9uYWwgdGhhdCBwYXJzZSBsb2Nh dGlvbiBmaWVsZHMgKGluIG5vZGVzIHRoYXQgaGF2ZQogICogb25lKSBhcmUgbm90IGNvbXBh cmVkLiAgVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQsIGZvciBleGFtcGxlLCBhIHZhcmlhYmxl CiAgKiAieCIgdG8gYmUgY29uc2lkZXJlZCBlcXVhbCgpIHRvIGFub3RoZXIgcmVmZXJlbmNl IHRvICJ4IiBpbiB0aGUgcXVlcnkuCkBAIC0zMCw4ICsyNyw2IEBACiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4 dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKICNpbmNsdWRlICJ1 dGlscy9kYXR1bS5oIgogCiAKQEAgLTk3LDYgKzkyLDkgQEAKIAkoKHZvaWQpIDApCiAKIAor I2luY2x1ZGUgImVxdWFsZnVuY3MuZnVuY3MuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgog ICoJU3R1ZmYgZnJvbSBwcmltbm9kZXMuaAogICovCkBAIC0xODUsNiArMTgzLDcgQEAgX2Vx dWFsVmFyKGNvbnN0IFZhciAqYSwgY29uc3QgVmFyICpiKQogCiAJcmV0dXJuIHRydWU7CiB9 CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyBib29sCiBfZXF1YWxDb25zdChjb25z dCBDb25zdCAqYSwgY29uc3QgQ29uc3QgKmIpCkBAIC0yMDcsNiArMjA2LDcgQEAgX2VxdWFs Q29uc3QoY29uc3QgQ29uc3QgKmEsIGNvbnN0IENvbnN0ICpiKQogCQkJCQkJYS0+Y29uc3Ri eXZhbCwgYS0+Y29uc3RsZW4pOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29s CiBfZXF1YWxQYXJhbShjb25zdCBQYXJhbSAqYSwgY29uc3QgUGFyYW0gKmIpCiB7CkBAIC05 NDYsNiArOTQ2LDcgQEAgX2VxdWFsUGxhY2VIb2xkZXJJbmZvKGNvbnN0IFBsYWNlSG9sZGVy SW5mbyAqYSwgY29uc3QgUGxhY2VIb2xkZXJJbmZvICpiKQogCiAJcmV0dXJuIHRydWU7CiB9 CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBTdHVmZiBmcm9tIGV4dGVuc2libGUu aApAQCAtOTY3LDYgKzk2OCw3IEBAIF9lcXVhbEV4dGVuc2libGVOb2RlKGNvbnN0IEV4dGVu c2libGVOb2RlICphLCBjb25zdCBFeHRlbnNpYmxlTm9kZSAqYikKIAlyZXR1cm4gdHJ1ZTsK IH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmgK ICAqLwpAQCAtMjQ0MSw2ICsyNDQzLDcgQEAgX2VxdWFsUGFyYW1SZWYoY29uc3QgUGFyYW1S ZWYgKmEsIGNvbnN0IFBhcmFtUmVmICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYg LypPQlNPTEVURSovCiAKIHN0YXRpYyBib29sCiBfZXF1YWxBX0NvbnN0KGNvbnN0IEFfQ29u c3QgKmEsIGNvbnN0IEFfQ29uc3QgKmIpCkBAIC0yNDU4LDYgKzI0NjEsNyBAQCBfZXF1YWxB X0NvbnN0KGNvbnN0IEFfQ29uc3QgKmEsIGNvbnN0IEFfQ29uc3QgKmIpCiAJcmV0dXJuIHRy dWU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIGJvb2wKIF9lcXVhbEZ1bmNDYWxs KGNvbnN0IEZ1bmNDYWxsICphLCBjb25zdCBGdW5jQ2FsbCAqYikKIHsKQEAgLTMwNjgsNiAr MzA3Miw3IEBAIF9lcXVhbFBhcnRpdGlvbkNtZChjb25zdCBQYXJ0aXRpb25DbWQgKmEsIGNv bnN0IFBhcnRpdGlvbkNtZCAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JT T0xFVEUqLwogCiAvKgogICogU3R1ZmYgZnJvbSBwZ19saXN0LmgKQEAgLTMxMjgsNiArMzEz Myw3IEBAIF9lcXVhbExpc3QoY29uc3QgTGlzdCAqYSwgY29uc3QgTGlzdCAqYikKIAlyZXR1 cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogU3R1ZmYgZnJvbSB2YWx1 ZS5oCiAgKi8KQEAgLTMxNzEsNiArMzE3Nyw3IEBAIF9lcXVhbEJpdFN0cmluZyhjb25zdCBC aXRTdHJpbmcgKmEsIGNvbnN0IEJpdFN0cmluZyAqYikKIAogCXJldHVybiB0cnVlOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogZXF1YWwKQEAgLTMyMDEsNiArMzIwOCw4 IEBAIGVxdWFsKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAKIAlzd2l0Y2ggKG5v ZGVUYWcoYSkpCiAJeworI2luY2x1ZGUgImVxdWFsZnVuY3Muc3dpdGNoLmMiCisjaWZkZWYg T0JTT0xFVEUKIAkJCS8qCiAJCQkgKiBQUklNSVRJVkUgTk9ERVMKIAkJCSAqLwpAQCAtMzM3 OSw2ICszMzg4LDcgQEAgZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAkJ Y2FzZSBUX1BsYWNlSG9sZGVySW5mbzoKIAkJCXJldHZhbCA9IF9lcXVhbFBsYWNlSG9sZGVy SW5mbyhhLCBiKTsKIAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCWNhc2Ug VF9MaXN0OgogCQljYXNlIFRfSW50TGlzdDoKQEAgLTMzODYsNiArMzM5Niw3IEBAIGVxdWFs KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCQlyZXR2YWwgPSBfZXF1YWxMaXN0 KGEsIGIpOwogCQkJYnJlYWs7CiAKKyNpZmRlZiBPQlNPTEVURQogCQljYXNlIFRfSW50ZWdl cjoKIAkJCXJldHZhbCA9IF9lcXVhbEludGVnZXIoYSwgYik7CiAJCQlicmVhazsKQEAgLTM5 MzcsNiArMzk0OCw3IEBAIGVxdWFsKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJ CWNhc2UgVF9QdWJsaWNhdGlvblRhYmxlOgogCQkJcmV0dmFsID0gX2VxdWFsUHVibGljYXRp b25UYWJsZShhLCBiKTsKIAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCWRl ZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCBiL3Ny Yy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZWRiYWZkM2U1YgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKQEAgLTAsMCArMSw3MjkgQEAK KyMhL3Vzci9iaW4vcGVybAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgR2VuZXJhdGUgbm9k ZSBzdXBwb3J0IGZpbGVzOgorIyAtIG5vZGV0YWdzLmgKKyMgLSBjb3B5ZnVuY3MKKyMgLSBl cXVhbGZ1bmNzCisjIC0gcmVhZGZ1bmNzCisjIC0gb3V0ZnVuY3MKKyMKKyMgUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisjIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9u b2RlX3N1cHBvcnQucGwKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3M7CisKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKwordXNlIEZpbmRCaW47Cit1 c2UgbGliICIkRmluZEJpbjo6UmVhbEJpbi8uLi9jYXRhbG9nIjsKKwordXNlIENhdGFsb2c7 ICAjIGZvciBSZW5hbWVUZW1wRmlsZQorCisKKyMgVGVzdCB3aGV0aGVyIGZpcnN0IGFyZ3Vt ZW50IGlzIGVsZW1lbnQgb2YgdGhlIGxpc3QgaW4gdGhlIHNlY29uZAorIyBhcmd1bWVudAor c3ViIGVsZW0KK3sKKwlteSAkeCA9IHNoaWZ0OworCXJldHVybiBncmVwIHsgJF8gZXEgJHgg fSBAXzsKK30KKworCisjIGNvbGxlY3Qgbm9kZSBuYW1lcworbXkgQG5vZGVfdHlwZXMgPSBx dyhOb2RlKTsKKyMgY29sbGVjdCBpbmZvIGZvciBlYWNoIG5vZGUgdHlwZQorbXkgJW5vZGVf dHlwZV9pbmZvOworCisjIG5vZGUgdHlwZXMgd2UgZG9uJ3Qgd2FudCBjb3B5IHN1cHBvcnQg Zm9yCitteSBAbm9fY29weTsKKyMgbm9kZSB0eXBlcyB3ZSBkb24ndCB3YW50IHJlYWQvd3Jp dGUgc3VwcG9ydCBmb3IKK215IEBub19yZWFkX3dyaXRlOworCisjIHR5cGVzIHRoYXQgYXJl IGNvcGllZCBieSBzdHJhaWdodCBhc3NpZ25tZW50CitteSBAc2NhbGFyX3R5cGVzID0gcXco CisJYml0czMyIGJvb2wgY2hhciBkb3VibGUgaW50IGludDggaW50MTYgaW50MzIgaW50NjQg bG9uZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NAorCUFjbE1vZGUgQXR0ck51bWJlciBD YXJkaW5hbGl0eSBDb3N0IEluZGV4IE9pZCBTZWxlY3Rpdml0eSBTaXplIFN0cmF0ZWd5TnVt YmVyIFN1YlRyYW5zYWN0aW9uSWQgVGltZUxpbmVJRCBYTG9nUmVjUHRyCispOworCisjIGNv bGxlY3QgZW51bSB0eXBlcworbXkgQGVudW1fdHlwZXM7CisKKyMgQWJzdHJhY3QgdHlwZXMg YXJlIHR5cGVzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBidXQgdGhhdCBjYW4gYmUK KyMgc3VwZXJ0eXBlcyBvZiBvdGhlciB0eXBlcy4gIFdlIHRyYWNrIHRoZWlyIGZpZWxkcywg c28gdGhhdCBzdWJ0eXBlcworIyBjYW4gdXNlIHRoZW0sIGJ1dCB3ZSBkb24ndCBlbWl0IGEg bm9kZSB0YWcsIHNvIHlvdSBjYW4ndCBpbnN0YW50aWF0ZQorIyB0aGVtLgorbXkgQGFic3Ry YWN0X3R5cGVzID0gcXcoCisJTm9kZSBFeHByCisJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90 IEhlYXBUdXBsZVRhYmxlU2xvdCBNaW5pbWFsVHVwbGVUYWJsZVNsb3QgVmlydHVhbFR1cGxl VGFibGVTbG90CisJSm9pblBhdGgKKwlQYXJ0aXRpb25QcnVuZVN0ZXAKKyk7CisKKyMgU3Bl Y2lhbCBjYXNlcyB0aGF0IGVpdGhlciBkb24ndCBoYXZlIHRoZWlyIG93biBzdHJ1Y3Qgb3Ig dGhlIHN0cnVjdAorIyBpcyBub3QgaW4gYSBoZWFkZXIgZmlsZS4gIFdlIGp1c3QgZ2VuZXJh dGUgbm9kZSB0YWdzIGZvciB0aGVtLCBidXQKKyMgdGhleSBvdGhlcndpc2UgZG9uJ3QgcGFy dGljaXBhdGUgaW4gbm9kZSBzdXBwb3J0LgorbXkgQGV4dHJhX3RhZ3MgPSBxdygKKwlJbnRM aXN0IE9pZExpc3QKKwlBbGxvY1NldENvbnRleHQgR2VuZXJhdGlvbkNvbnRleHQgU2xhYkNv bnRleHQKKwlUSURCaXRtYXAKKwlXaW5kb3dPYmplY3REYXRhCispOworCisjIFRoaXMgaXMg YSByZWd1bGFyIG5vZGUsIGJ1dCB3ZSBza2lwIHBhcnNpbmcgaXQgZnJvbSBpdHMgaGVhZGVy IGZpbGUKKyMgc2luY2Ugd2Ugd29uJ3QgdXNlIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaGVy ZSBhbnl3YXkuCitwdXNoIEBub2RlX3R5cGVzLCBxdyhMaXN0KTsKKworIyBwYXRobm9kZXMu aCBleGNlcHRpb25zOiBXZSBkb24ndCBzdXBwb3J0IGNvcHlpbmcgUmVsT3B0SW5mbywKKyMg SW5kZXhPcHRJbmZvLCBvciBQYXRoIG5vZGVzLiAgVGhlcmUgYXJlIHNvbWUgc3Vic2lkaWFy eSBzdHJ1Y3RzIHRoYXQKKyMgYXJlIHVzZWZ1bCB0byBjb3B5LCB0aG91Z2guCitwdXNoIEBu b19jb3B5LCBxdygKKwlSZWxPcHRJbmZvIEluZGV4T3B0SW5mbyBQYXRoIFBsYW5uZXJHbG9i YWwgRXF1aXZhbGVuY2VDbGFzcyBFcXVpdmFsZW5jZU1lbWJlciBGb3JlaWduS2V5T3B0SW5m bworCUdyb3VwaW5nU2V0RGF0YSBJbmNyZW1lbnRhbFNvcnRQYXRoIEluZGV4Q2xhdXNlIE1p bk1heEFnZ0luZm8gUGF0aFRhcmdldCBQbGFubmVySW5mbyBQbGFubmVyUGFyYW1JdGVtCisJ UGFyYW1QYXRoSW5mbyBSb2xsdXBEYXRhIFJvd0lkZW50aXR5VmFySW5mbyBTdGF0aXN0aWNF eHRJbmZvCispOworIyBFcXVpdmFsZW5jZUNsYXNzZXMgYXJlIG5ldmVyIG1vdmVkLCBzbyBq dXN0IHNoYWxsb3ctY29weSB0aGUgcG9pbnRlcgorcHVzaCBAc2NhbGFyX3R5cGVzLCBxdyhF cXVpdmFsZW5jZUNsYXNzKiBFcXVpdmFsZW5jZU1lbWJlciopOworcHVzaCBAc2NhbGFyX3R5 cGVzLCBxdyhRdWFsQ29zdCk7CisKKyMgU2VlIHNwZWNpYWwgdHJlYXRtZW50IGluIG91dE5v ZGUoKSBhbmQgbm9kZVJlYWQoKSBmb3IgdGhlc2UuCitwdXNoIEBub19yZWFkX3dyaXRlLCBx dyhCaXRTdHJpbmcgQm9vbGVhbiBGbG9hdCBJbnRlZ2VyIExpc3QgU3RyaW5nKTsKKworIyBY WFggdmFyaW91cyB0aGluZ3Mgd2UgYXJlIG5vdCBwdWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBz dGF5IGxldmVsCisjIHdpdGggdGhlIG1hbnVhbCBzeXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3 KENhbGxDb250ZXh0IElubGluZUNvZGVCbG9jayk7CitwdXNoIEBub19yZWFkX3dyaXRlLCBx dyhBY2Nlc3NQcml2IEFsdGVyVGFibGVDbWQgQ2FsbENvbnRleHQgQ3JlYXRlT3BDbGFzc0l0 ZW0gRnVuY3Rpb25QYXJhbWV0ZXIgSW5mZXJDbGF1c2UgSW5saW5lQ29kZUJsb2NrIE9iamVj dFdpdGhBcmdzIE9uQ29uZmxpY3RDbGF1c2UgUGFydGl0aW9uQ21kIFJvbGVTcGVjIFZhY3V1 bVJlbGF0aW9uKTsKKworCisjIyByZWFkIGlucHV0CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAo QEFSR1YpCit7CisJbXkgJGluX3N0cnVjdDsKKwlteSAkc3VibGluZTsKKwlteSAkaXNfbm9k ZV9zdHJ1Y3Q7CisJbXkgJHN1cGVydHlwZTsKKwlteSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJ bXkgQG15X2ZpZWxkczsKKwlteSAlbXlfZmllbGRfdHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0 dHJzOworCisJb3BlbiBteSAkaWZoLCAnPCcsICRpbmZpbGUgb3IgZGllICJjb3VsZCBub3Qg b3BlbiBcIiRpbmZpbGVcIjogJCEiOworCisJbXkgJGZpbGVfY29udGVudCA9IGRvIHsgbG9j YWwgJC87IDwkaWZoPiB9OworCisJIyBzdHJpcCBDIGNvbW1lbnRzCisJJGZpbGVfY29udGVu dCA9fiBzey9cKi4qP1wqL317fWdzOworCisJZm9yZWFjaCBteSAkbGluZSAoc3BsaXQgL1xu LywgJGZpbGVfY29udGVudCkKKwl7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9fiBzL1xz KiQvLzsKKwkJbmV4dCBpZiAkbGluZSBlcSAnJzsKKwkJbmV4dCBpZiAkbGluZSA9fiAvXiMo ZGVmaW5lfGlmZGVmfGVuZGlmKS87CisKKwkJIyB3ZSBhcmUgYW5hbHl6aW5nIGEgc3RydWN0 IGRlZmluaXRpb24KKwkJaWYgKCRpbl9zdHJ1Y3QpCisJCXsKKwkJCSRzdWJsaW5lKys7CisK KwkJCSMgZmlyc3QgbGluZSBzaG91bGQgaGF2ZSBvcGVuaW5nIGJyYWNlCisJCQlpZiAoJHN1 YmxpbmUgPT0gMSkKKwkJCXsKKwkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAwOworCQkJCSRzdXBl cnR5cGUgPSB1bmRlZjsKKwkJCQluZXh0IGlmICRsaW5lIGVxICd7JzsKKwkJCQlkaWU7CisJ CQl9CisJCQkjIHNlY29uZCBsaW5lIHNob3VsZCBoYXZlIG5vZGUgdGFnIG9yIHN1cGVydHlw ZQorCQkJZWxzaWYgKCRzdWJsaW5lID09IDIpCisJCQl7CisJCQkJaWYgKCRsaW5lID1+IC9e XHMqTm9kZVRhZ1xzK3R5cGU7LykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVjdCA9IDE7 CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCWVsc2lmICgkbGluZSA9fiAvXHMqKFx3Kylccyso XHcrKTsvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCQl7CisJCQkJCSRpc19ub2Rl X3N0cnVjdCA9IDE7CisJCQkJCSRzdXBlcnR5cGUgPSAkMTsKKwkJCQkJJHN1cGVydHlwZV9m aWVsZCA9ICQyOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKworCQkJIyBlbmQgb2Ygc3Ry dWN0CisJCQlpZiAoJGxpbmUgPX4gL15cfVxzKiRpbl9zdHJ1Y3Q7JC8gfHwgJGxpbmUgPX4g L15cfTskLykKKwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJCQkJ IyBUaGlzIGlzIHRoZSBlbmQgb2YgYSBub2RlIHN0cnVjdCBkZWZpbml0aW9uLgorCQkJCQkj IFNhdmUgZXZlcnl0aGluZyB3ZSBoYXZlIGNvbGxlY3RlZC4KKworCQkJCQkjIG5vZGUgbmFt ZQorCQkJCQlwdXNoIEBub2RlX3R5cGVzLCAkaW5fc3RydWN0OworCisJCQkJCSMgZmllbGQg bmFtZXMsIHR5cGVzLCBhdHRyaWJ1dGVzCisJCQkJCW15IEBmID0gQG15X2ZpZWxkczsKKwkJ CQkJbXkgJWZ0ID0gJW15X2ZpZWxkX3R5cGVzOworCQkJCQlteSAlZmEgPSAlbXlfZmllbGRf YXR0cnM7CisKKwkJCQkJIyBJZiB0aGVyZSBpcyBhIHN1cGVydHlwZSwgYWRkIHRob3NlIGZp ZWxkcywgdG9vLgorCQkJCQlpZiAoJHN1cGVydHlwZSkKKwkJCQkJeworCQkJCQkJbXkgQHN1 cGVyZmllbGRzOworCQkJCQkJZm9yZWFjaCBteSAkc2YgKEB7JG5vZGVfdHlwZV9pbmZveyRz dXBlcnR5cGV9LT57ZmllbGRzfX0pCisJCQkJCQl7CisJCQkJCQkJbXkgJGZuID0gIiR7c3Vw ZXJ0eXBlX2ZpZWxkfS4kc2YiOworCQkJCQkJCXB1c2ggQHN1cGVyZmllbGRzLCAkZm47CisJ CQkJCQkJJGZ0eyRmbn0gPSAkbm9kZV90eXBlX2luZm97JHN1cGVydHlwZX0tPntmaWVsZF90 eXBlc317JHNmfTsKKwkJCQkJCQkkZmF7JGZufSA9ICRub2RlX3R5cGVfaW5mb3skc3VwZXJ0 eXBlfS0+e2ZpZWxkX2F0dHJzfXskc2Z9OworCQkJCQkJCSRmYXskZm59ID1+IHMvYXJyYXlf c2l6ZVwoKFx3KylcKS9hcnJheV9zaXplKCR7c3VwZXJ0eXBlX2ZpZWxkfS4kMSkvIGlmICRm YXskZm59OworCQkJCQkJfQorCQkJCQkJdW5zaGlmdCBAZiwgQHN1cGVyZmllbGRzOworCQkJ CQl9CisJCQkJCSMgc2F2ZSBpbiBnbG9iYWwgaW5mbyBzdHJ1Y3R1cmUKKwkJCQkJJG5vZGVf dHlwZV9pbmZveyRpbl9zdHJ1Y3R9LT57ZmllbGRzfSA9IFxAZjsKKwkJCQkJJG5vZGVfdHlw ZV9pbmZveyRpbl9zdHJ1Y3R9LT57ZmllbGRfdHlwZXN9ID0gXCVmdDsKKwkJCQkJJG5vZGVf dHlwZV9pbmZveyRpbl9zdHJ1Y3R9LT57ZmllbGRfYXR0cnN9ID0gXCVmYTsKKworCQkJCQkj IE5vZGVzIGZyb20gdGhlc2UgZmlsZXMgZG9uJ3QgbmVlZCB0byBiZQorCQkJCQkjIHN1cHBv cnRlZCwgZXhjZXB0IHRoZSBub2RlIHRhZ3MuCisJCQkJCWlmIChlbGVtIGJhc2VuYW1lKCRp bmZpbGUpLAorCQkJCQkJcXcoZXhlY25vZGVzLmggdHJpZ2dlci5oIGV2ZW50X3RyaWdnZXIu aCBhbWFwaS5oIHRhYmxlYW0uaAorCQkJCQkJCXRzbWFwaS5oIGZkd2FwaS5oIHR1cHRhYmxl LmggcmVwbG5vZGVzLmggc3VwcG9ydG5vZGVzLmgpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBu b19jb3B5LCAkaW5fc3RydWN0OworCQkJCQkJcHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0 cnVjdDsKKwkJCQkJfQorCisJCQkJCSMgV2UgZG8gbm90IHN1cHBvcnQgY29weWluZyBQYXRo IHRyZWVzLCBtYWlubHkKKwkJCQkJIyBiZWNhdXNlIHRoZSBjaXJjdWxhciBsaW5rYWdlcyBi ZXR3ZWVuIFJlbE9wdEluZm8KKwkJCQkJIyBhbmQgUGF0aCBub2RlcyBjYW4ndCBiZSBoYW5k bGVkIGVhc2lseSBpbiBhCisJCQkJCSMgc2ltcGxlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbC4K KwkJCQkJaWYgKCRzdXBlcnR5cGUgJiYgKCRzdXBlcnR5cGUgZXEgJ1BhdGgnIHx8ICRzdXBl cnR5cGUgZXEgJ0pvaW5QYXRoJykpCisJCQkJCXsKKwkJCQkJCXB1c2ggQG5vX2NvcHksICRp bl9zdHJ1Y3Q7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkjIHN0YXJ0IG5ldyBjeWNsZQorCQkJ CSRpbl9zdHJ1Y3QgPSB1bmRlZjsKKwkJCQlAbXlfZmllbGRzID0gKCk7CisJCQkJJW15X2Zp ZWxkX3R5cGVzID0gKCk7CisJCQkJJW15X2ZpZWxkX2F0dHJzID0gKCk7CisJCQl9CisJCQkj IG5vcm1hbCBzdHJ1Y3QgZmllbGQKKwkJCWVsc2lmICgkbGluZSA9fiAvXlxzKiguKylccypc YihcdyspKFxbXHcrXF0pP1xzKig/OnBnX25vZGVfYXR0clwoKFtcdygpIF0qKVwpKT87LykK KwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJCQkJbXkgJHR5cGUg PSAkMTsKKwkJCQkJbXkgJG5hbWUgPSAkMjsKKwkJCQkJbXkgJGFycmF5X3NpemUgPSAkMzsK KwkJCQkJbXkgJGF0dHIgPSAkNDsKKworCQkJCQkjIHN0cmlwICJjb25zdCIKKwkJCQkJJHR5 cGUgPX4gcy9eY29uc3RccyovLzsKKwkJCQkJIyBzdHJpcCB0cmFpbGluZyBzcGFjZQorCQkJ CQkkdHlwZSA9fiBzL1xzKiQvLzsKKwkJCQkJIyBzdHJpcCBzcGFjZSBiZXR3ZWVuIHR5cGUg YW5kICIqIiAocG9pbnRlcikgKi8KKwkJCQkJJHR5cGUgPX4gcy9ccytcKiQvKi87CisKKwkJ CQkJZGllIGlmICR0eXBlIGVxICcnOworCisJCQkJCSR0eXBlID0gJHR5cGUgLiAkYXJyYXlf c2l6ZSBpZiAkYXJyYXlfc2l6ZTsKKwkJCQkJcHVzaCBAbXlfZmllbGRzLCAkbmFtZTsKKwkJ CQkJJG15X2ZpZWxkX3R5cGVzeyRuYW1lfSA9ICR0eXBlOworCQkJCQkkbXlfZmllbGRfYXR0 cnN7JG5hbWV9ID0gJGF0dHI7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlm ICgkaXNfbm9kZV9zdHJ1Y3QpCisJCQkJeworCQkJCQkjd2FybiAiJGluZmlsZTokLjogY291 bGQgbm90IHBhcnNlIFwiJGxpbmVcIlxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJIyBub3Qg aW4gYSBzdHJ1Y3QKKwkJZWxzZQorCQl7CisJCQkjIHN0YXJ0IG9mIGEgc3RydWN0PworCQkJ aWYgKCRsaW5lID1+IC9eKD86dHlwZWRlZiApP3N0cnVjdCAoXHcrKShccypcL1wqLiopPyQv ICYmICQxIG5lICdOb2RlJykKKwkJCXsKKwkJCQkkaW5fc3RydWN0ID0gJDE7CisJCQkJJHN1 YmxpbmUgPSAwOworCQkJfQorCQkJIyBvbmUgbm9kZSB0eXBlIHR5cGVkZWYnZWQgZGlyZWN0 bHkgZnJvbSBhbm90aGVyCisJCQllbHNpZiAoJGxpbmUgPX4gL150eXBlZGVmIChcdyspIChc dyspOyQvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCXsKKwkJCQlteSAkYWxpYXNf b2YgPSAkMTsKKwkJCQlteSAkbiA9ICQyOworCisJCQkJIyBjb3B5IGV2ZXJ5dGhpbmcgb3Zl cgorCQkJCXB1c2ggQG5vZGVfdHlwZXMsICRuOworCQkJCW15IEBmID0gQHskbm9kZV90eXBl X2luZm97JGFsaWFzX29mfS0+e2ZpZWxkc319OworCQkJCW15ICVmdCA9ICV7JG5vZGVfdHlw ZV9pbmZveyRhbGlhc19vZn0tPntmaWVsZF90eXBlc319OworCQkJCW15ICVmYSA9ICV7JG5v ZGVfdHlwZV9pbmZveyRhbGlhc19vZn0tPntmaWVsZF9hdHRyc319OworCQkJCSRub2RlX3R5 cGVfaW5mb3skbn0tPntmaWVsZHN9ID0gXEBmOworCQkJCSRub2RlX3R5cGVfaW5mb3skbn0t PntmaWVsZF90eXBlc30gPSBcJWZ0OworCQkJCSRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVs ZF9hdHRyc30gPSBcJWZhOworCQkJfQorCQkJIyBjb2xsZWN0IGVudW0gbmFtZXMKKwkJCWVs c2lmICgkbGluZSA9fiAvXnR5cGVkZWYgZW51bSAoXHcrKShccypcL1wqLiopPyQvKQorCQkJ eworCQkJCXB1c2ggQGVudW1fdHlwZXMsICQxOworCQkJfQorCQl9CisJfQorCisJaWYgKCRp bl9zdHJ1Y3QpCisJeworCQlkaWUgInJ1bmF3YXkgXCIkaW5fc3RydWN0XCIgaW4gZmlsZSBc IiRpbmZpbGVcIlxuIjsKKwl9CisKKwljbG9zZSAkaWZoOworfSAjIGZvciBlYWNoIGZpbGUK KworCisjIyB3cml0ZSBvdXRwdXQKKworbXkgJHRtcGV4dCAgPSAiLnRtcCQkIjsKKworIyBu b2RldGFncy5oCisKK29wZW4gbXkgJG50LCAnPicsICdub2RldGFncy5oJyAuICR0bXBleHQg b3IgZGllICQhOworCitteSAkaSA9IDE7Citmb3JlYWNoIG15ICRuIChAbm9kZV90eXBlcyxA ZXh0cmFfdGFncykKK3sKKwluZXh0IGlmIGVsZW0gJG4sIEBhYnN0cmFjdF90eXBlczsKKwlw cmludCAkbnQgIlx0VF8ke259ID0gJGksXG4iOworCSRpKys7Cit9CisKK2Nsb3NlICRudDsK KworCisjIG1ha2UgI2luY2x1ZGUgbGluZXMgbmVjZXNzYXJ5IHRvIHB1bGwgaW4gYWxsIHRo ZSBzdHJ1Y3QgZGVmaW5pdGlvbnMKK215ICRub2RlX2luY2x1ZGVzID0gJyc7Citmb3JlYWNo IG15ICRpbmZpbGUgKHNvcnQgQEFSR1YpCit7CisJJGluZmlsZSA9fiBzIS4qc3JjL2luY2x1 ZGUvISE7CisJJG5vZGVfaW5jbHVkZXMgLj0gcXF7I2luY2x1ZGUgIiRpbmZpbGUiXG59Owor fQorCisKKyMgY29weWZ1bmNzLmMsIGVxdWFsZnVuY3MuYworCitvcGVuIG15ICRjZmYsICc+ JywgJ2NvcHlmdW5jcy5mdW5jcy5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAk ZWZmLCAnPicsICdlcXVhbGZ1bmNzLmZ1bmNzLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7Citv cGVuIG15ICRjZnMsICc+JywgJ2NvcHlmdW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRp ZSAkITsKK29wZW4gbXkgJGVmcywgJz4nLCAnZXF1YWxmdW5jcy5zd2l0Y2guYycgLiAkdG1w ZXh0IG9yIGRpZSAkITsKKworIyBhZGQgcmVxdWlyZWQgI2luY2x1ZGUgbGluZXMgdG8gZWFj aCBmaWxlIHNldAorcHJpbnQgJGNmZiAkbm9kZV9pbmNsdWRlczsKK3ByaW50ICRlZmYgJG5v ZGVfaW5jbHVkZXM7CisKKyMgTm9kZXMgd2l0aCBjdXN0b20gY29weSBpbXBsZW1lbnRhdGlv bnMgYXJlIHNraXBwZWQgZnJvbSAuZnVuY3MuYyBidXQKKyMgbmVlZCBjYXNlIHN0YXRlbWVu dHMgaW4gLnN3aXRjaC5jLgorbXkgQGN1c3RvbV9jb3B5ID0gcXcoQV9Db25zdCBDb25zdCBF eHRlbnNpYmxlTm9kZSk7CisKK2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5l eHQgaWYgZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5v X2NvcHk7CisJbmV4dCBpZiAkbiBlcSAnTGlzdCc7CisKKwlwcmludCAkY2ZzICIKK1x0XHRj YXNlIFRfJHtufToKK1x0XHRcdHJldHZhbCA9IF9jb3B5JHtufShmcm9tKTsKK1x0XHRcdGJy ZWFrOyI7CisKKwlwcmludCAkZWZzICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJldHZh bCA9IF9lcXVhbCR7bn0oYSwgYik7CitcdFx0XHRicmVhazsiOworCisJbmV4dCBpZiBlbGVt ICRuLCBAY3VzdG9tX2NvcHk7CisKKwlwcmludCAkY2ZmICIKK3N0YXRpYyAkbiAqCitfY29w eSR7bn0oY29uc3QgJG4gKmZyb20pCit7CitcdCR7bn0gKm5ld25vZGUgPSBtYWtlTm9kZSgk bik7CisKKyI7CisKKwlwcmludCAkZWZmICIKK3N0YXRpYyBib29sCitfZXF1YWwke259KGNv bnN0ICRuICphLCBjb25zdCAkbiAqYikKK3sKKyI7CisKKwkjIHByaW50IGluc3RydWN0aW9u cyBmb3IgZWFjaCBmaWVsZAorCWZvcmVhY2ggbXkgJGYgKEB7JG5vZGVfdHlwZV9pbmZveyRu fS0+e2ZpZWxkc319KQorCXsKKwkJbXkgJHQgPSAkbm9kZV90eXBlX2luZm97JG59LT57Zmll bGRfdHlwZXN9eyRmfTsKKwkJbXkgJGEgPSAkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRf YXR0cnN9eyRmfSB8fCAnJzsKKwkJbXkgJGNvcHlfaWdub3JlID0gKCRhID1+IC9cYmNvcHlf aWdub3JlXGIvKTsKKwkJbXkgJGVxdWFsX2lnbm9yZSA9ICgkYSA9fiAvXGJlcXVhbF9pZ25v cmVcYi8pOworCisJCSMgc2VsZWN0IGluc3RydWN0aW9ucyBieSBmaWVsZCB0eXBlCisJCWlm ICgkdCBlcSAnY2hhcionKQorCQl7CisJCQlwcmludCAkY2ZmICJcdENPUFlfU1RSSU5HX0ZJ RUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCXByaW50ICRlZmYgIlx0Q09N UEFSRV9TVFJJTkdfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQor CQllbHNpZiAoJHQgZXEgJ0JpdG1hcHNldConIHx8ICR0IGVxICdSZWxpZHMnKQorCQl7CisJ CQlwcmludCAkY2ZmICJcdENPUFlfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRj b3B5X2lnbm9yZTsKKwkJCXByaW50ICRlZmYgIlx0Q09NUEFSRV9CSVRNQVBTRVRfRklFTEQo JGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2lu dCcgJiYgJGYgPX4gJ2xvY2F0aW9uJCcpCisJCXsKKwkJCXByaW50ICRjZmYgIlx0Q09QWV9M T0NBVElPTl9GSUVMRCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAk ZWZmICJcdENPTVBBUkVfTE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2ln bm9yZTsKKwkJfQorCQllbHNpZiAoZWxlbSAkdCwgQHNjYWxhcl90eXBlcyBvciBlbGVtICR0 LCBAZW51bV90eXBlcykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1NDQUxBUl9GSUVM RCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlpZiAoJGEgPX4gL1xiZXF1YWxf aWdub3JlX2lmX3plcm9cYi8pCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRpZiAoYS0+JGYg IT0gYi0+JGYgJiYgYS0+JGYgIT0gMCAmJiBiLT4kZiAhPSAwKVxuXHRcdHJldHVybiBmYWxz ZTtcbiI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJF X1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0IGVxICdD b2VyY2lvbkZvcm0nOworCQkJfQorCQl9CisJCSMgc2NhbGFyIHR5cGUgcG9pbnRlcgorCQll bHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAc2NhbGFyX3R5cGVzKQorCQl7 CisJCQlteSAkdHQgPSAkMTsKKwkJCW15ICRhcnJheV9zaXplX2ZpZWxkOworCQkJaWYgKCRh ID1+IC9cYmFycmF5X3NpemUuKFtcdy5dKykvKQorCQkJeworCQkJCSRhcnJheV9zaXplX2Zp ZWxkID0gJDE7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZGllICJubyBhcnJheSBzaXpl IGRlZmluZWQgZm9yICRuLiRmIG9mIHR5cGUgJHQiOworCQkJfQorCQkJaWYgKCRub2RlX3R5 cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317JGFycmF5X3NpemVfZmllbGR9IGVxICdMaXN0 KicpCisJCQl7CisJCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1BPSU5URVJfRklFTEQoJGYsIGxp c3RfbGVuZ3RoKGZyb20tPiRhcnJheV9zaXplX2ZpZWxkKSAqIHNpemVvZigkdHQpKTtcbiIg dW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCQlwcmludCAkZWZmICJcdENPTVBBUkVfUE9JTlRF Ul9GSUVMRCgkZiwgbGlzdF9sZW5ndGgoYS0+JGFycmF5X3NpemVfZmllbGQpICogc2l6ZW9m KCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsK KwkJCQlwcmludCAkY2ZmICJcdENPUFlfUE9JTlRFUl9GSUVMRCgkZiwgZnJvbS0+JGFycmF5 X3NpemVfZmllbGQgKiBzaXplb2YoJHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJ CQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX1BPSU5URVJfRklFTEQoJGYsIGEtPiRhcnJheV9z aXplX2ZpZWxkICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJ CX0KKwkJfQorCQkjIG5vZGUgdHlwZQorCQllbHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBl bGVtICQxLCBAbm9kZV90eXBlcykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX05PREVf RklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmZiAiXHRD T01QQVJFX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQor CQkjIGFycmF5IChpbmxpbmUpCisJCWVsc2lmICgkdCA9fiAvXHcrXFsvKQorCQl7CisJCQlw cmludCAkY2ZmICJcdENPUFlfQVJSQVlfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdu b3JlOworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX0FSUkFZX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdzdHJ1Y3QgQ3VzdG9t UGF0aE1ldGhvZHMqJyB8fAkkdCBlcSAnc3RydWN0IEN1c3RvbVNjYW5NZXRob2RzKicpCisJ CXsKKwkJCSMgRmllbGRzIG9mIHRoZXNlIHR5cGVzIGFyZSByZXF1aXJlZCB0byBiZSBhIHBv aW50ZXIgdG8gYQorCQkJIyBzdGF0aWMgdGFibGUgb2YgY2FsbGJhY2sgZnVuY3Rpb25zLiAg U28gd2UgZG9uJ3QgY29weQorCQkJIyB0aGUgdGFibGUgaXRzZWxmLCBqdXN0IHJlZmVyZW5j ZSB0aGUgb3JpZ2luYWwgb25lLgorCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1NDQUxBUl9GSUVM RCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWZmICJcdENPTVBB UkVfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5kbGUgdHlwZSBcIiR0XCIgaW4gc3Ry dWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJfQorCisJcHJpbnQgJGNmZiAiCitc dHJldHVybiBuZXdub2RlOworfQorIjsKKwlwcmludCAkZWZmICIKK1x0cmV0dXJuIHRydWU7 Cit9CisiOworfQorCitjbG9zZSAkY2ZmOworY2xvc2UgJGVmZjsKK2Nsb3NlICRjZnM7Citj bG9zZSAkZWZzOworCisKKyMgb3V0ZnVuY3MuYywgcmVhZGZ1bmNzLmMKKworb3BlbiBteSAk b2ZmLCAnPicsICdvdXRmdW5jcy5mdW5jcy5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3Bl biBteSAkcmZmLCAnPicsICdyZWFkZnVuY3MuZnVuY3MuYycgLiAkdG1wZXh0IG9yIGRpZSAk ITsKK29wZW4gbXkgJG9mcywgJz4nLCAnb3V0ZnVuY3Muc3dpdGNoLmMnIC4gJHRtcGV4dCBv ciBkaWUgJCE7CitvcGVuIG15ICRyZnMsICc+JywgJ3JlYWRmdW5jcy5zd2l0Y2guYycgLiAk dG1wZXh0IG9yIGRpZSAkITsKKworcHJpbnQgJG9mZiAkbm9kZV9pbmNsdWRlczsKK3ByaW50 ICRyZmYgJG5vZGVfaW5jbHVkZXM7CisKK215IEBjdXN0b21fcmVhZHdyaXRlID0gcXcoQV9D b25zdCBBX0V4cHIgQm9vbEV4cHIgQ29uc3QgQ29uc3RyYWludCBFcXVpdmFsZW5jZUNsYXNz IEV4dGVuc2libGVOb2RlIEZvcmVpZ25LZXlPcHRJbmZvIFF1ZXJ5IFJhbmdlVGJsRW50cnkp OworCitmb3JlYWNoIG15ICRuIChAbm9kZV90eXBlcykKK3sKKwluZXh0IGlmIGVsZW0gJG4s IEBhYnN0cmFjdF90eXBlczsKKwluZXh0IGlmIGVsZW0gJG4sIEBub19yZWFkX3dyaXRlOwor CisJIyBYWFggRm9yIG5vdywgc2tpcCBhbGwgIlN0bXQicyBleGNlcHQgdGhhdCBvbmVzIHRo YXQgd2VyZSB0aGVyZSBiZWZvcmUuCisJaWYgKCRuID1+IC9TdG10JC8pCisJeworCQlteSBA a2VlcCA9IHF3KEFsdGVyU3RhdHNTdG10IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgQ3JlYXRl U3RhdHNTdG10IENyZWF0ZVN0bXQgRGVjbGFyZUN1cnNvclN0bXQgSW1wb3J0Rm9yZWlnblNj aGVtYVN0bXQgSW5kZXhTdG10IE5vdGlmeVN0bXQgUGxhbm5lZFN0bXQgUExBc3NpZ25TdG10 IFJhd1N0bXQgUmV0dXJuU3RtdCBTZWxlY3RTdG10IFNldE9wZXJhdGlvblN0bXQpOworCQlu ZXh0IHVubGVzcyBlbGVtICRuLCBAa2VlcDsKKwl9CisKKwkjIFhYWCBBbHNvIHNraXAgcmVh ZCBzdXBwb3J0IGZvciB0aG9zZSB0aGF0IGRpZG4ndCBoYXZlIGl0IGJlZm9yZS4KKwlteSAk bm9fcmVhZCA9ICgkbiBlcSAnQV9TdGFyJyB8fCAkbiBlcSAnQV9Db25zdCcgfHwgJG4gZXEg J0FfRXhwcicgfHwgJG4gZXEgJ0NvbnN0cmFpbnQnIHx8ICRuID1+IC9QYXRoJC8gfHwgJG4g ZXEgJ0VxdWl2YWxlbmNlQ2xhc3MnIHx8ICRuIGVxICdGb3JlaWduS2V5Q2FjaGVJbmZvJyB8 fCAkbiBlcSAnRm9yZWlnbktleU9wdEluZm8nIHx8ICRuIGVxICdQYXRoVGFyZ2V0Jyk7CisK KwkjIG91dHB1dCBmb3JtYXQgc3RhcnRzIHdpdGggdXBwZXIgY2FzZSBub2RlIHR5cGUsIHVu ZGVyc2NvcmVzIHN0cmlwcGVkCisJbXkgJE4gPSB1YyAkbjsKKwkkTiA9fiBzL18vL2c7CisK KwlwcmludCAkb2ZzICJcdFx0XHRjYXNlIFRfJHtufTpcbiIuCisJICAiXHRcdFx0XHRfb3V0 JHtufShzdHIsIG9iaik7XG4iLgorCSAgIlx0XHRcdFx0YnJlYWs7XG4iOworCisJcHJpbnQg JHJmcyAiXHRlbHNlIGlmIChNQVRDSChcIiROXCIsICIgLiBsZW5ndGgoJE4pIC4gIikpXG4i LgorCSAgIlx0XHRyZXR1cm5fdmFsdWUgPSBfcmVhZCR7bn0oKTtcbiIgdW5sZXNzICRub19y ZWFkOworCisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX3JlYWR3cml0ZTsKKworCXByaW50 ICRvZmYgIgorc3RhdGljIHZvaWQKK19vdXQke259KFN0cmluZ0luZm8gc3RyLCBjb25zdCAk biAqbm9kZSkKK3sKK1x0V1JJVEVfTk9ERV9UWVBFKFwiJE5cIik7CisKKyI7CisKKwlwcmlu dCAkcmZmICIKK3N0YXRpYyAkbiAqCitfcmVhZCR7bn0odm9pZCkKK3sKK1x0UkVBRF9MT0NB TFMoJG4pOworCisiIHVubGVzcyAkbm9fcmVhZDsKKworCSMgcHJpbnQgaW5zdHJ1Y3Rpb25z IGZvciBlYWNoIGZpZWxkCisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59 LT57ZmllbGRzfX0pCisJeworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVs ZF90eXBlc317JGZ9OworCQlteSAkYSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9h dHRyc317JGZ9IHx8ICcnOworCQlteSAkcmVhZHdyaXRlX2lnbm9yZSA9ICgkYSA9fiAvXGJy ZWFkd3JpdGVfaWdub3JlXGIvKTsKKwkJbmV4dCBpZiAkcmVhZHdyaXRlX2lnbm9yZTsKKwor CQkjIFhYWCBQcmV2aW91c2x5LCBmb3Igc3VidHlwaW5nLCBvbmx5IHRoZSBsZWFmIGZpZWxk IG5hbWUgaXMKKwkJIyB1c2VkLiBQb25kZXIgd2hldGhlciB3ZSB3YW50IHRvIGtlZXAgaXQg dGhhdCB3YXkuCisKKwkJIyBzZWxlY3QgaW5zdHJ1Y3Rpb25zIGJ5IGZpZWxkIHR5cGUKKwkJ aWYgKCR0IGVxICdib29sJykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9CT09MX0ZJ RUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURfQk9PTF9GSUVMRCgkZik7XG4i IHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2ludCcgJiYgJGYgPX4g J2xvY2F0aW9uJCcpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfTE9DQVRJT05fRklF TEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9MT0NBVElPTl9GSUVMRCgkZik7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2ludCcgfHwgJHQg ZXEgJ2ludDMyJyB8fCAkdCBlcSAnQXR0ck51bWJlcicgfHwgJHQgZXEgJ1N0cmF0ZWd5TnVt YmVyJykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9JTlRfRklFTEQoJGYpO1xuIjsK KwkJCXByaW50ICRyZmYgIlx0UkVBRF9JTlRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3Jl YWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICd1aW50MzInIHx8ICR0IGVxICdiaXRzMzInIHx8 ICR0IGVxICdBY2xNb2RlJyB8fCAkdCBlcSAnQmxvY2tOdW1iZXInIHx8ICR0IGVxICdJbmRl eCcgfHwgJHQgZXEgJ1N1YlRyYW5zYWN0aW9uSWQnKQorCQl7CisJCQlwcmludCAkb2ZmICJc dFdSSVRFX1VJTlRfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9VSU5U X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAn dWludDY0JykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9VSU5UNjRfRklFTEQoJGYp O1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9VSU5UNjRfRklFTEQoJGYpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdPaWQnKQorCQl7CisJCQlwcmlu dCAkb2ZmICJcdFdSSVRFX09JRF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRS RUFEX09JRF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAo JHQgZXEgJ2xvbmcnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0xPTkdfRklFTEQo JGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9MT05HX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnY2hhcicpCisJCXsKKwkJCXBy aW50ICRvZmYgIlx0V1JJVEVfQ0hBUl9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAi XHRSRUFEX0NIQVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxz aWYgKCR0IGVxICdkb3VibGUnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FU X0ZJRUxEKCRmLCBcIiUuNmZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FU X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAn Q2FyZGluYWxpdHknKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxE KCRmLCBcIiUuMGZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQ29zdCcp CisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS4yZlwi KTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURfRkxPQVRfRklFTEQoJGYpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdRdWFsQ29zdCcpCisJCXsKKwkJ CXByaW50ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYuc3RhcnR1cCwgXCIlLjJmXCIp O1xuIjsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYucGVyX3R1cGxl LCBcIiUuMmZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRm LnN0YXJ0dXApO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQlwcmludCAkcmZmICJcdFJFQURf RkxPQVRfRklFTEQoJGYucGVyX3R1cGxlKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJ CWVsc2lmICgkdCBlcSAnU2VsZWN0aXZpdHknKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdS SVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUuNGZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRS RUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lm ICgkdCBlcSAnY2hhcionKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX1NUUklOR19G SUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX1NUUklOR19GSUVMRCgkZik7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ0JpdG1hcHNldCon IHx8ICR0IGVxICdSZWxpZHMnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0JJVE1B UFNFVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0JJVE1BUFNFVF9G SUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoZWxlbSAkdCwg QGVudW1fdHlwZXMpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfRU5VTV9GSUVMRCgk ZiwgJHQpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9FTlVNX0ZJRUxEKCRmLCAkdCk7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQkjIGFycmF5cworCQllbHNpZiAoJHQgPX4g LyhcdyspKFwqfFxbKS8gYW5kIGVsZW0gJDEsIEBzY2FsYXJfdHlwZXMpCisJCXsKKwkJCW15 ICR0dCA9IHVjICQxOworCQkJbXkgJGFycmF5X3NpemVfZmllbGQ7CisJCQlpZiAoJGEgPX4g L1xiYXJyYXlfc2l6ZS4oW1x3Ll0rKS8pCisJCQl7CisJCQkJJGFycmF5X3NpemVfZmllbGQg PSAkMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlkaWUgIm5vIGFycmF5IHNpemUgZGVm aW5lZCBmb3IgJG4uJGYgb2YgdHlwZSAkdCI7CisJCQl9CisJCQlpZiAoJG5vZGVfdHlwZV9p bmZveyRufS0+e2ZpZWxkX3R5cGVzfXskYXJyYXlfc2l6ZV9maWVsZH0gZXEgJ0xpc3QqJykK KwkJCXsKKwkJCQlwcmludCAkb2ZmICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBsaXN0X2xl bmd0aChub2RlLT4kYXJyYXlfc2l6ZV9maWVsZCkpO1xuIjsKKwkJCQlwcmludCAkcmZmICJc dFJFQURfJHt0dH1fQVJSQVkoJGYsIGxpc3RfbGVuZ3RoKGxvY2FsX25vZGUtPiRhcnJheV9z aXplX2ZpZWxkKSk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsK KwkJCQlwcmludCAkb2ZmICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBub2RlLT4kYXJyYXlf c2l6ZV9maWVsZCk7XG4iOworCQkJCXByaW50ICRyZmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgk ZiwgbG9jYWxfbm9kZS0+JGFycmF5X3NpemVfZmllbGQpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7 CisJCQl9CisJCX0KKwkJIyBTcGVjaWFsIHRyZWF0bWVudHMgb2Ygc2V2ZXJhbCBQYXRoIG5v ZGUgZmllbGRzCisJCSMKKwkJIyBXZSBkbyBub3QgcHJpbnQgdGhlIHBhcmVudCwgZWxzZSB3 ZSdkIGJlIGluIGluZmluaXRlCisJCSMgcmVjdXJzaW9uLiAgV2UgY2FuIHByaW50IHRoZSBw YXJlbnQncyByZWxpZHMgZm9yCisJCSMgaWRlbnRpZmljYXRpb24gcHVycG9zZXMsIHRob3Vn aC4gIFdlIHByaW50IHRoZSBwYXRodGFyZ2V0CisJCSMgb25seSBpZiBpdCdzIG5vdCB0aGUg ZGVmYXVsdCBvbmUgZm9yIHRoZSByZWwuICBXZSBhbHNvIGRvCisJCSMgbm90IHByaW50IHRo ZSB3aG9sZSBvZiBwYXJhbV9pbmZvLCBzaW5jZSBpdCdzIHByaW50ZWQgdmlhCisJCSMgUmVs T3B0SW5mbzsgaXQncyBzdWZmaWNpZW50IGFuZCBsZXNzIGNsdXR0ZXJpbmcgdG8gcHJpbnQK KwkJIyBqdXN0IHRoZSByZXF1aXJlZCBvdXRlciByZWxpZHMuCisJCWVsc2lmICgkdCBlcSAn UmVsT3B0SW5mbyonICYmICRhIGVxICdwYXRoX2hhY2sxJykKKwkJeworCQkJcHJpbnQgJG9m ZiAiXHRhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgXCIgOnBhcmVudF9yZWxpZHMgXCIp O1xuIi4KKwkJCSAgIlx0b3V0Qml0bWFwc2V0KHN0ciwgbm9kZS0+JGYtPnJlbGlkcyk7XG4i OworCQl9CisJCWVsc2lmICgkdCBlcSAnUGF0aFRhcmdldConICYmICRhIGVxICdwYXRoX2hh Y2syJykKKwkJeworCQkJKG15ICRmMiA9ICRmKSA9fiBzL3BhdGh0YXJnZXQvcGFyZW50LzsK KwkJCXByaW50ICRvZmYgIlx0aWYgKG5vZGUtPiRmICE9IG5vZGUtPiRmMi0+cmVsdGFyZ2V0 KVxuIi4KKwkJCSAgIlx0XHRXUklURV9OT0RFX0ZJRUxEKCRmKTtcbiI7CisJCX0KKwkJZWxz aWYgKCR0IGVxICdQYXJhbVBhdGhJbmZvKicgJiYgJGEgZXEgJ3BhdGhfaGFjazMnKQorCQl7 CisJCQlwcmludCAkb2ZmICJcdGlmIChub2RlLT4kZilcbiIuCisJCQkgICJcdFx0b3V0Qml0 bWFwc2V0KHN0ciwgbm9kZS0+JGYtPnBwaV9yZXFfb3V0ZXIpO1xuIi4KKwkJCSAgIlx0ZWxz ZVxuIi4KKwkJCSAgIlx0XHRvdXRCaXRtYXBzZXQoc3RyLCBOVUxMKTtcbiI7CisJCX0KKwkJ IyBub2RlIHR5cGUKKwkJZWxzaWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwgQG5v ZGVfdHlwZXMpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfTk9ERV9GSUVMRCgkZik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3Mg JG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdzdHJ1Y3QgQ3VzdG9tUGF0aE1ldGhv ZHMqJyB8fAkkdCBlcSAnc3RydWN0IEN1c3RvbVNjYW5NZXRob2RzKicpCisJCXsKKwkJCXBy aW50ICRvZmYgcXsKKwkvKiBDdXN0b21OYW1lIGlzIGEga2V5IHRvIGxvb2t1cCBDdXN0b21T Y2FuTWV0aG9kcyAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAiIDptZXRob2Rz ICIpOworCW91dFRva2VuKHN0ciwgbm9kZS0+bWV0aG9kcy0+Q3VzdG9tTmFtZSk7Cit9Owor CQkJcHJpbnQgJHJmZiBxIQorCXsKKwkJLyogTG9va3VwIEN1c3RvbVNjYW5NZXRob2RzIGJ5 IEN1c3RvbU5hbWUgKi8KKwkJY2hhcgkgICAqY3VzdG9tX25hbWU7CisJCWNvbnN0IEN1c3Rv bVNjYW5NZXRob2RzICptZXRob2RzOworCQl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsg Lyogc2tpcCBtZXRob2RzOiAqLworCQl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsgLyog Q3VzdG9tTmFtZSAqLworCQljdXN0b21fbmFtZSA9IG51bGxhYmxlX3N0cmluZyh0b2tlbiwg bGVuZ3RoKTsKKwkJbWV0aG9kcyA9IEdldEN1c3RvbVNjYW5NZXRob2RzKGN1c3RvbV9uYW1l LCBmYWxzZSk7CisJCWxvY2FsX25vZGUtPm1ldGhvZHMgPSBtZXRob2RzOworCX0KKyEgdW5s ZXNzICRub19yZWFkOworCQl9CisJCSMgdmFyaW91cyBmaWVsZCB0eXBlcyB0byBpZ25vcmUK KwkJZWxzaWYgKCR0IGVxICdQYXJhbUxpc3RJbmZvJyB8fCAkdCA9fiAvUGFydGl0aW9uQm91 bmRJbmZvRGF0YS8gfHwgJHQgZXEgJ1BhcnRpdGlvbkRpcmVjdG9yeScgfHwgJHQgZXEgJ1Bh cnRpdGlvblNjaGVtZScgfHwgJHQgZXEgJ3ZvaWQqJyB8fCAkdCA9fiAvXCpcKiQvKQorCQl7 CisJCQkjIGlnbm9yZQorCQl9CisJCWVsc2UKKwkJeworCQkJZGllICJjb3VsZCBub3QgaGFu ZGxlIHR5cGUgXCIkdFwiIGluIHN0cnVjdCBcIiRuXCIgZmllbGQgXCIkZlwiIjsKKwkJfQor CX0KKworCXByaW50ICRvZmYgIn0KKyI7CisJcHJpbnQgJHJmZiAiCitcdFJFQURfRE9ORSgp OworfQorIiB1bmxlc3MgJG5vX3JlYWQ7Cit9CisKK2Nsb3NlICRvZmY7CitjbG9zZSAkcmZm OworY2xvc2UgJG9mczsKK2Nsb3NlICRyZnM7CisKKworIyBub3cgcmVuYW1lIHRoZSB0ZW1w b3JhcnkgZmlsZXMgdG8gdGhlaXIgZmluYWwgbmFtZQorZm9yZWFjaCBteSAkZmlsZSAocXco bm9kZXRhZ3MuaCBjb3B5ZnVuY3MuZnVuY3MuYyBjb3B5ZnVuY3Muc3dpdGNoLmMgZXF1YWxm dW5jcy5mdW5jcy5jIGVxdWFsZnVuY3Muc3dpdGNoLmMgb3V0ZnVuY3MuZnVuY3MuYyBvdXRm dW5jcy5zd2l0Y2guYyByZWFkZnVuY3MuZnVuY3MuYyByZWFkZnVuY3Muc3dpdGNoLmMpKQor eworCUNhdGFsb2c6OlJlbmFtZVRlbXBGaWxlKCRmaWxlLCAkdG1wZXh0KTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jCmluZGV4IDZiZGFkNDYyYzcuLmY5NmNkZmU2MTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMv b3V0ZnVuY3MuYwpAQCAtMzEsMTEgKzMxLDEwIEBACiAKICNpbmNsdWRlICJsaWIvc3RyaW5n aW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVu c2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKLSNpbmNsdWRlICJub2Rl cy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRl ICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRl ICJ1dGlscy9kYXR1bS5oIgotI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9p ZCBvdXRDaGFyKFN0cmluZ0luZm8gc3RyLCBjaGFyIGMpOwogCkBAIC0yOTUsNiArMjk0LDkg QEAgb3V0RGF0dW0oU3RyaW5nSW5mbyBzdHIsIERhdHVtIHZhbHVlLCBpbnQgdHlwbGVuLCBi b29sIHR5cGJ5dmFsKQogfQogCiAKKyNpbmNsdWRlICJvdXRmdW5jcy5mdW5jcy5jIgorCisj aWZkZWYgT0JTT0xFVEUKIC8qCiAgKglTdHVmZiBmcm9tIHBsYW5ub2Rlcy5oCiAgKi8KQEAg LTExMzYsNiArMTEzOCw3IEBAIF9vdXRWYXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFZhciAq bm9kZSkKIAlXUklURV9JTlRfRklFTEQodmFyYXR0bm9zeW4pOwogCVdSSVRFX0xPQ0FUSU9O X0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZv aWQKIF9vdXRDb25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3QgKm5vZGUpCkBAIC0x MTU3LDYgKzExNjAsNyBAQCBfb3V0Q29uc3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0 ICpub2RlKQogCQlvdXREYXR1bShzdHIsIG5vZGUtPmNvbnN0dmFsdWUsIG5vZGUtPmNvbnN0 bGVuLCBub2RlLT5jb25zdGJ5dmFsKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMg dm9pZAogX291dFBhcmFtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJhbSAqbm9kZSkKIHsK QEAgLTEzMjcsNiArMTMzMSw3IEBAIF9vdXRTY2FsYXJBcnJheU9wRXhwcihTdHJpbmdJbmZv IHN0ciwgY29uc3QgU2NhbGFyQXJyYXlPcEV4cHIgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVM RChhcmdzKTsKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYg LypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBfb3V0Qm9vbEV4cHIoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IEJvb2xFeHByICpub2RlKQpAQCAtMTM1NSw2ICsxMzYwLDcgQEAgX291dEJv b2xFeHByKFN0cmluZ0luZm8gc3RyLCBjb25zdCBCb29sRXhwciAqbm9kZSkKIAlXUklURV9M T0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGlj IHZvaWQKIF9vdXRTdWJMaW5rKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdWJMaW5rICpub2Rl KQogewpAQCAtMjQyNSw2ICsyNDMxLDcgQEAgX291dEluZGV4T3B0SW5mbyhTdHJpbmdJbmZv IHN0ciwgY29uc3QgSW5kZXhPcHRJbmZvICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQoaHlw b3RoZXRpY2FsKTsKIAkvKiB3ZSBkb24ndCBib3RoZXIgd2l0aCBmaWVsZHMgY29waWVkIGZy b20gdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLwogfQorI2VuZGlmIC8qIE9CU09MRVRF ICovCiAKIHN0YXRpYyB2b2lkCiBfb3V0Rm9yZWlnbktleU9wdEluZm8oU3RyaW5nSW5mbyBz dHIsIGNvbnN0IEZvcmVpZ25LZXlPcHRJbmZvICpub2RlKQpAQCAtMjQ1Miw2ICsyNDU5LDcg QEAgX291dEZvcmVpZ25LZXlPcHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBGb3JlaWdu S2V5T3B0SW5mbyAqbm9kZSkKIAkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIgJWQiLCBsaXN0 X2xlbmd0aChub2RlLT5yaW5mb3NbaV0pKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0 aWMgdm9pZAogX291dFN0YXRpc3RpY0V4dEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN0 YXRpc3RpY0V4dEluZm8gKm5vZGUpCiB7CkBAIC0yNDYzLDYgKzI0NzEsNyBAQCBfb3V0U3Rh dGlzdGljRXh0SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgU3RhdGlzdGljRXh0SW5mbyAq bm9kZSkKIAlXUklURV9DSEFSX0ZJRUxEKGtpbmQpOwogCVdSSVRFX0JJVE1BUFNFVF9GSUVM RChrZXlzKTsKIH0KKyNlbmRpZiAvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgdm9pZAogX291 dEVxdWl2YWxlbmNlQ2xhc3MoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEVxdWl2YWxlbmNlQ2xh c3MgKm5vZGUpCkBAIC0yNDkxLDYgKzI1MDAsNyBAQCBfb3V0RXF1aXZhbGVuY2VDbGFzcyhT dHJpbmdJbmZvIHN0ciwgY29uc3QgRXF1aXZhbGVuY2VDbGFzcyAqbm9kZSkKIAlXUklURV9V SU5UX0ZJRUxEKGVjX21heF9zZWN1cml0eSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3Rh dGljIHZvaWQKIF9vdXRFcXVpdmFsZW5jZU1lbWJlcihTdHJpbmdJbmZvIHN0ciwgY29uc3Qg RXF1aXZhbGVuY2VNZW1iZXIgKm5vZGUpCiB7CkBAIC0yNjc1LDYgKzI2ODUsNyBAQCBfb3V0 UGxhbm5lclBhcmFtSXRlbShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lclBhcmFtSXRl bSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGl0ZW0pOwogCVdSSVRFX0lOVF9GSUVMRChw YXJhbUlkKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgKgpAQCAtMjY5Nyw2ICsyNzA4LDcgQEAgX291dEV4dGVuc2libGVOb2RlKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBFeHRlbnNpYmxlTm9kZSAqbm9kZSkKIAltZXRob2RzLT5u b2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBAIC0zMDMw LDYgKzMwNDIsNyBAQCBfb3V0U3RhdHNFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdGF0 c0VsZW0gKm5vZGUpCiAJV1JJVEVfU1RSSU5HX0ZJRUxEKG5hbWUpOwogCVdSSVRFX05PREVf RklFTEQoZXhwcik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBf b3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFF1ZXJ5ICpub2RlKQpAQCAtMzEwMiw2 ICszMTE1LDcgQEAgX291dFF1ZXJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBRdWVyeSAqbm9k ZSkKIAlXUklURV9JTlRfRklFTEQoc3RtdF9sZW4pOwogfQogCisjaWZkZWYgT0JTT0xFVEUK IHN0YXRpYyB2b2lkCiBfb3V0V2l0aENoZWNrT3B0aW9uKFN0cmluZ0luZm8gc3RyLCBjb25z dCBXaXRoQ2hlY2tPcHRpb24gKm5vZGUpCiB7CkBAIC0zMjQwLDYgKzMyNTQsNyBAQCBfb3V0 U2V0T3BlcmF0aW9uU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgU2V0T3BlcmF0aW9uU3Rt dCAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGNvbENvbGxhdGlvbnMpOwogCVdSSVRFX05P REVfRklFTEQoZ3JvdXBDbGF1c2VzKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3Rh dGljIHZvaWQKIF9vdXRSYW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5n ZVRibEVudHJ5ICpub2RlKQpAQCAtMzMyMCw2ICszMzM1LDcgQEAgX291dFJhbmdlVGJsRW50 cnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGJsRW50cnkgKm5vZGUpCiAJV1JJVEVf Tk9ERV9GSUVMRChzZWN1cml0eVF1YWxzKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0 aWMgdm9pZAogX291dFJhbmdlVGJsRnVuY3Rpb24oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJh bmdlVGJsRnVuY3Rpb24gKm5vZGUpCiB7CkBAIC0zMzQzLDYgKzMzNTksNyBAQCBfb3V0VGFi bGVTYW1wbGVDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFRhYmxlU2FtcGxlQ2xhdXNl ICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoYXJncyk7CiAJV1JJVEVfTk9ERV9GSUVMRChy ZXBlYXRhYmxlKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9v dXRBX0V4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfRXhwciAqbm9kZSkKQEAgLTM0NjEs NiArMzQ3OCw3IEBAIF9vdXRCaXRTdHJpbmcoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJpdFN0 cmluZyAqbm9kZSkKIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgbm9kZS0+YnN2YWwp OwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0Q29sdW1uUmVmKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBDb2x1bW5SZWYgKm5vZGUpCiB7CkBAIC0zNDkyLDYgKzM1 MTAsNyBAQCBfb3V0UmF3U3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmF3U3RtdCAqbm9k ZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChzdG10X2xvY2F0aW9uKTsKIAlXUklURV9JTlRf RklFTEQoc3RtdF9sZW4pOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9p ZAogX291dEFfQ29uc3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfQ29uc3QgKm5vZGUpCkBA IC0zNTA4LDYgKzM1MjcsNyBAQCBfb3V0QV9Db25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3Qg QV9Db25zdCAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAK KyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRBX1N0YXIoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IEFfU3RhciAqbm9kZSkKIHsKQEAgLTM2NTIsNiArMzY3Miw3IEBAIF9vdXRS YW5nZVRhYmxlRnVuY0NvbChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYWJsZUZ1bmND b2wgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChjb2xkZWZleHByKTsKIAlXUklURV9MT0NB VElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRp YyB2b2lkCiBfb3V0Q29uc3RyYWludChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3RyYWlu dCAqbm9kZSkKQEAgLTM3NzQsNiArMzc5NSw3IEBAIF9vdXRDb25zdHJhaW50KFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBDb25zdHJhaW50ICpub2RlKQogCX0KIH0KIAorI2lmZGVmIE9CU09M RVRFCiBzdGF0aWMgdm9pZAogX291dEZvcmVpZ25LZXlDYWNoZUluZm8oU3RyaW5nSW5mbyBz dHIsIGNvbnN0IEZvcmVpZ25LZXlDYWNoZUluZm8gKm5vZGUpCiB7CkBAIC0zODM0LDYgKzM4 NTYsNyBAQCBfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShTdHJpbmdJbmZvIHN0ciwgY29uc3Qg UGFydGl0aW9uUmFuZ2VEYXR1bSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKHZhbHVlKTsK IAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVU RSovCiAKIC8qCiAgKiBvdXROb2RlIC0KQEAgLTM4NjUsNiArMzg4OCw4IEBAIG91dE5vZGUo U3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJYXBwZW5kU3RyaW5nSW5mb0No YXIoc3RyLCAneycpOwogCQlzd2l0Y2ggKG5vZGVUYWcob2JqKSkKIAkJeworI2luY2x1ZGUg Im91dGZ1bmNzLnN3aXRjaC5jIgorI2lmZGVmIE9CU09MRVRFCiAJCQljYXNlIFRfUGxhbm5l ZFN0bXQ6CiAJCQkJX291dFBsYW5uZWRTdG10KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKQEAg LTQ1MzcsNiArNDU2Miw3IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQg Km9iaikKIAkJCWNhc2UgVF9QYXJ0aXRpb25SYW5nZURhdHVtOgogCQkJCV9vdXRQYXJ0aXRp b25SYW5nZURhdHVtKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRF Ki8KIAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVh ZGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCAzZjY4Zjdj MThkLi4wYjhlZDg2NmQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwpAQCAtMzMsOSArMzMs NyBAQAogI2luY2x1ZGUgPG1hdGguaD4KIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2lu Y2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVz LmgiCi0jaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvYml0 bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcmVhZGZ1bmNzLmgiCiAKIApAQCAtMjM4LDYg KzIzNiw4IEBAIHJlYWRCaXRtYXBzZXQodm9pZCkKIAlyZXR1cm4gX3JlYWRCaXRtYXBzZXQo KTsKIH0KIAorI2luY2x1ZGUgInJlYWRmdW5jcy5mdW5jcy5jIgorCiAvKgogICogX3JlYWRR dWVyeQogICovCkBAIC0yODksNiArMjg5LDcgQEAgX3JlYWRRdWVyeSh2b2lkKQogCVJFQURf RE9ORSgpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZE5vdGlmeVN0bXQK ICAqLwpAQCAtNTg3LDYgKzU4OCw3IEBAIF9yZWFkVmFyKHZvaWQpCiAKIAlSRUFEX0RPTkUo KTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIF9yZWFkQ29uc3QKQEAgLTYx Myw2ICs2MTUsNyBAQCBfcmVhZENvbnN0KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNp ZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkUGFyYW0KICAqLwpAQCAtODM4LDYgKzg0MSw3 IEBAIF9yZWFkU2NhbGFyQXJyYXlPcEV4cHIodm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX3JlYWRCb29sRXhwcgpAQCAtODY1LDYg Kzg2OSw3IEBAIF9yZWFkQm9vbEV4cHIodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lm ZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWRTdWJMaW5rCiAgKi8KQEAgLTE0MTksNiArMTQy NCw3IEBAIF9yZWFkQXBwZW5kUmVsSW5mbyh2b2lkKQogLyoKICAqCVN0dWZmIGZyb20gcGFy c2Vub2Rlcy5oLgogICovCisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZFJh bmdlVGJsRW50cnkKQEAgLTE1MTQsNiArMTUyMCw3IEBAIF9yZWFkUmFuZ2VUYmxFbnRyeSh2 b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVh ZFJhbmdlVGJsRnVuY3Rpb24KICAqLwpAQCAtMjYzNyw2ICsyNjQ0LDcgQEAgX3JlYWRBbHRl cm5hdGl2ZVN1YlBsYW4odm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JT T0xFVEUqLwogCiAvKgogICogX3JlYWRFeHRlbnNpYmxlTm9kZQpAQCAtMjY2OCw2ICsyNjc2 LDcgQEAgX3JlYWRFeHRlbnNpYmxlTm9kZSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisj aWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFBhcnRpdGlvbkJvdW5kU3BlYwogICovCkBA IC0yNzAyLDYgKzI3MTEsNyBAQCBfcmVhZFBhcnRpdGlvblJhbmdlRGF0dW0odm9pZCkKIAog CVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogcGFyc2VO b2RlU3RyaW5nCkBAIC0yNzI2LDcgKzI3MzYsMTEgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQp CiAjZGVmaW5lIE1BVENIKHRva25hbWUsIG5hbWVsZW4pIFwKIAkobGVuZ3RoID09IG5hbWVs ZW4gJiYgbWVtY21wKHRva2VuLCB0b2tuYW1lLCBuYW1lbGVuKSA9PSAwKQogCi0JaWYgKE1B VENIKCJRVUVSWSIsIDUpKQorCWlmIChmYWxzZSkKKwkJOworI2luY2x1ZGUgInJlYWRmdW5j cy5zd2l0Y2guYyIKKyNpZmRlZiBPQlNPTEVURQorCWVsc2UgaWYgKE1BVENIKCJRVUVSWSIs IDUpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFF1ZXJ5KCk7CiAJZWxzZSBpZiAoTUFUQ0go IldJVEhDSEVDS09QVElPTiIsIDE1KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRXaXRoQ2hl Y2tPcHRpb24oKTsKQEAgLTI5NzQsNiArMjk4OCw3IEBAIHBhcnNlTm9kZVN0cmluZyh2b2lk KQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFBhcnRpdGlvbkJvdW5kU3BlYygpOwogCWVsc2Ug aWYgKE1BVENIKCJQQVJUSVRJT05SQU5HRURBVFVNIiwgMTkpKQogCQlyZXR1cm5fdmFsdWUg PSBfcmVhZFBhcnRpdGlvblJhbmdlRGF0dW0oKTsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAll bHNlCiAJewogCQllbG9nKEVSUk9SLCAiYmFkbHkgZm9ybWF0dGVkIG5vZGUgc3RyaW5nIFwi JS4zMnNcIi4uLiIsIHRva2VuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzLy5n aXRpZ25vcmUgYi9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5ZmIxZDM3ODcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL25vZGV0 YWdzLmgKKy9oZWFkZXItc3RhbXAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IDVkMDc1ZjBjMzQuLjZk MTczMTU0MTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjcsNiArMjcsOCBAQCB0eXBlZGVmIGVu dW0gTm9kZVRhZwogewogCVRfSW52YWxpZCA9IDAsCiAKKyNpbmNsdWRlICJub2Rlcy9ub2Rl dGFncy5oIgorI2lmZGVmIE9CU09MRVRFCiAJLyoKIAkgKiBUQUdTIEZPUiBFWEVDVVRPUiBO T0RFUyAoZXhlY25vZGVzLmgpCiAJICovCkBAIC01MjgsOCArNTMwLDMzIEBAIHR5cGVkZWYg ZW51bSBOb2RlVGFnCiAJVF9TdXBwb3J0UmVxdWVzdENvc3QsCQkvKiBpbiBub2Rlcy9zdXBw b3J0bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RSb3dzLAkJLyogaW4gbm9kZXMvc3Vw cG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0SW5kZXhDb25kaXRpb24JLyogaW4g bm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KKyNlbmRpZiAvKk9CU09MRVRFKi8KIH0gTm9kZVRh ZzsKIAorLyoKKyAqIFVzZWQgaW4gbm9kZSBkZWZpbml0aW9ucyB0byBzZXQgZXh0cmEgaW5m b3JtYXRpb24gZm9yIGdlbl9ub2RlX3N1cHBvcnQucGwKKyAqCisgKiBUaGUgYXJndW1lbnQg aXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzLiAgVGhlIGZvbGxvd2lu ZworICogYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IHVzZWQ6CisgKgorICogLSBhcnJheV9z aXplKE9USEVSRklFTEQpOiBUaGlzIGZpZWxkIGlzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVk IGFycmF5IHdpdGgKKyAqICAgc2l6ZSBpbmRpY2F0ZWQgYnkgdGhlIG1lbnRpb25lZCBvdGhl ciBmaWVsZC4gIFRoZSBvdGhlciBmaWVsZCBpcyBlaXRoZXIgYQorICogICBzY2FsYXIgb3Ig YSBsaXN0LCBpbiB3aGljaCBjYXNlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgaXMgdXNlZC4K KyAqCisgKiAtIGNvcHlfaWdub3JlOiBJZ25vcmUgdGhlIGZpZWxkIGZvciBjb3B5LgorICoK KyAqIC0gZXF1YWxfaWdub3JlOiBJZ25vcmUgdGhlIGZpZWxkIGZvciBlcXVhbGl0eS4KKyAq CisgKiAtIGVxdWFsX2lnbm9yZV9pZl96ZXJvOiBJZ25vcmUgdGhlIGZpZWxkIGZvciBlcXVh bGl0eSBpZiBpdCBpcyB6ZXJvLgorICogICAoT3RoZXJ3aXNlLCBjb21wYXJlIG5vcm1hbGx5 LikKKyAqCisgKiAtIHJlYWR3cml0ZV9pZ25vcmU6IElnbm9yZSB0aGUgZmllbGQgZm9yIHJl YWQvd3JpdGUuCisgKgorICogVW5rbm93biBhdHRyaWJ1dGVzIGFyZSBpZ25vcmVkLiAgU29t ZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIHVzZWQgZm9yCisgKiBzcGVjaWFsICJoYWNr IiBjYXNlcy4KKyAqLworI2RlZmluZSBwZ19ub2RlX2F0dHIoYXR0cnMpCisKIC8qCiAgKiBU aGUgZmlyc3QgZmllbGQgb2YgYSBub2RlIG9mIGFueSB0eXBlIGlzIGd1YXJhbnRlZWQgdG8g YmUgdGhlIE5vZGVUYWcuCiAgKiBIZW5jZSB0aGUgdHlwZSBvZiBhbnkgbm9kZSBjYW4gYmUg Z290dGVuIGJ5IGNhc3RpbmcgaXQgdG8gTm9kZS4gRGVjbGFyaW5nCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKaW5kZXggMzQyMThiNzE4Yy4uZjRlZGM3NmQzMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaApAQCAtMTIxLDcgKzEyMSw4IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5CiAK IAlRdWVyeVNvdXJjZSBxdWVyeVNvdXJjZTsJLyogd2hlcmUgZGlkIEkgY29tZSBmcm9tPyAq LwogCi0JdWludDY0CQlxdWVyeUlkOwkJLyogcXVlcnkgaWRlbnRpZmllciAoY2FuIGJlIHNl dCBieSBwbHVnaW5zKSAqLworCXVpbnQ2NAkJcXVlcnlJZCBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlKTsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKGNhbiBiZSBzZXQgYnkgcGx1Z2lucyk7 CisJCQkJCQkJCQkJCQkJCSAgIGlnbm9yZWQgZm9yIGVxdWFsLCBtaWdodCBub3QgYmUgc2V0 ICovCiAKIAlib29sCQljYW5TZXRUYWc7CQkvKiBkbyBJIHNldCB0aGUgY29tbWFuZCByZXN1 bHQgdGFnPyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDFmMzg0NWIzZmUuLmEx MGE3NDYxNTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMjcsNyArMjI3LDcgQEAg c3RydWN0IFBsYW5uZXJJbmZvCiAJICogR0VRTy4KIAkgKi8KIAlMaXN0CSAgICpqb2luX3Jl bF9saXN0OwkvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KLQlzdHJ1 Y3QgSFRBQiAqam9pbl9yZWxfaGFzaDsgLyogb3B0aW9uYWwgaGFzaHRhYmxlIGZvciBqb2lu IHJlbGF0aW9ucyAqLworCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0 cihyZWFkd3JpdGVfaWdub3JlKTsgLyogb3B0aW9uYWwgaGFzaHRhYmxlIGZvciBqb2luIHJl bGF0aW9ucyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEgZHluYW1pYy1wcm9ncmFtbWlu Zy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10KQEAgLTMyOSwxMCArMzI5 LDEwIEBAIHN0cnVjdCBQbGFubmVySW5mbwogCUxpc3QJICAgKnVwZGF0ZV9jb2xub3M7CiAK IAkvKiBGaWVsZHMgZmlsbGVkIGR1cmluZyBjcmVhdGVfcGxhbigpIGZvciB1c2UgaW4gc2V0 cmVmcy5jICovCi0JQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwOwkvKiBmb3IgR3JvdXBpbmdG dW5jIGZpeHVwICovCisJQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwIHBnX25vZGVfYXR0cihh cnJheV9zaXplKHVwZGF0ZV9jb2xub3MpKTsJLyogZm9yIEdyb3VwaW5nRnVuYyBmaXh1cCAq LwogCUxpc3QJICAgKm1pbm1heF9hZ2dzOwkvKiBMaXN0IG9mIE1pbk1heEFnZ0luZm9zICov CiAKLQlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0OwkvKiBjb250ZXh0IGhvbGRpbmcgUGxh bm5lckluZm8gKi8KKwlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0IHBnX25vZGVfYXR0cihy ZWFkd3JpdGVfaWdub3JlKTsJLyogY29udGV4dCBob2xkaW5nIFBsYW5uZXJJbmZvICovCiAK IAlDYXJkaW5hbGl0eQl0b3RhbF90YWJsZV9wYWdlczsJLyogIyBvZiBwYWdlcyBpbiBhbGwg bm9uLWR1bW15IHRhYmxlcyBvZgogCQkJCQkJCQkJICogcXVlcnkgKi8KQEAgLTM2OSw4ICsz NjksOCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAlMaXN0CSAgICpjdXJPdXRlclBhcmFtczsg Lyogbm90LXlldC1hc3NpZ25lZCBOZXN0TG9vcFBhcmFtcyAqLwogCiAJLyogVGhlc2UgZmll bGRzIGFyZSB3b3Jrc3BhY2UgZm9yIHNldHJlZnMuYyAqLwotCWJvb2wJICAgKmlzQWx0U3Vi cGxhbjsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9iLT5zdWJwbGFucyAqLwotCWJv b2wJICAgKmlzVXNlZFN1YnBsYW47CS8qIGFycmF5IGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+ c3VicGxhbnMgKi8KKwlib29sCSAgICppc0FsdFN1YnBsYW4gcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9i LT5zdWJwbGFucyAqLworCWJvb2wJICAgKmlzVXNlZFN1YnBsYW4gcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBn bG9iLT5zdWJwbGFucyAqLwogCiAJLyogb3B0aW9uYWwgcHJpdmF0ZSBkYXRhIGZvciBqb2lu X3NlYXJjaF9ob29rLCBlLmcuLCBHRVFPICovCiAJdm9pZAkgICAqam9pbl9zZWFyY2hfcHJp dmF0ZTsKQEAgLTcxMSw4ICs3MTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJ UlRFS2luZAkJcnRla2luZDsJCS8qIFJFTEFUSU9OLCBTVUJRVUVSWSwgRlVOQ1RJT04sIGV0 YyAqLwogCUF0dHJOdW1iZXIJbWluX2F0dHI7CQkvKiBzbWFsbGVzdCBhdHRybm8gb2YgcmVs IChvZnRlbiA8MCkgKi8KIAlBdHRyTnVtYmVyCW1heF9hdHRyOwkJLyogbGFyZ2VzdCBhdHRy bm8gb2YgcmVsICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsJLyogYXJyYXkgaW5kZXhl ZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCi0JaW50MzIJICAgKmF0dHJfd2lkdGhzOwkv KiBhcnJheSBpbmRleGVkIFttaW5fYXR0ciAuLiBtYXhfYXR0cl0gKi8KKwlSZWxpZHMJICAg KmF0dHJfbmVlZGVkIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogYXJyYXkg aW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCisJaW50MzIJICAgKmF0dHJfd2lk dGhzIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogYXJyYXkgaW5kZXhlZCBb bWluX2F0dHIgLi4gbWF4X2F0dHJdICovCiAJTGlzdAkgICAqbGF0ZXJhbF92YXJzOwkvKiBM QVRFUkFMIFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwgKi8KIAlSZWxpZHMJCWxh dGVyYWxfcmVmZXJlbmNlcnM7CS8qIHJlbHMgdGhhdCByZWZlcmVuY2UgbWUgbGF0ZXJhbGx5 ICovCiAJTGlzdAkgICAqaW5kZXhsaXN0OwkJLyogbGlzdCBvZiBJbmRleE9wdEluZm8gKi8K QEAgLTczMywxMyArNzMzLDE0IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlPaWQJ CQl1c2VyaWQ7CQkJLyogaWRlbnRpZmllcyB1c2VyIHRvIGNoZWNrIGFjY2VzcyBhcyAqLwog CWJvb2wJCXVzZXJpZGlzY3VycmVudDsJLyogam9pbiBpcyBvbmx5IHZhbGlkIGZvciBjdXJy ZW50IHVzZXIgKi8KIAkvKiB1c2UgInN0cnVjdCBGZHdSb3V0aW5lIiB0byBhdm9pZCBpbmNs dWRpbmcgZmR3YXBpLmggaGVyZSAqLwotCXN0cnVjdCBGZHdSb3V0aW5lICpmZHdyb3V0aW5l OwotCXZvaWQJICAgKmZkd19wcml2YXRlOworCXN0cnVjdCBGZHdSb3V0aW5lICpmZHdyb3V0 aW5lIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKKwl2b2lkCSAgICpmZHdfcHJp dmF0ZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAKLQkvKiBjYWNoZSBzcGFj ZSBmb3IgcmVtZW1iZXJpbmcgaWYgd2UgaGF2ZSBwcm92ZW4gdGhpcyByZWxhdGlvbiB1bmlx dWUgKi8KLQlMaXN0CSAgICp1bmlxdWVfZm9yX3JlbHM7CS8qIGtub3duIHVuaXF1ZSBmb3Ig dGhlc2Ugb3RoZXIgcmVsaWQKKwkvKiBjYWNoZSBzcGFjZSBmb3IgcmVtZW1iZXJpbmcgaWYg d2UgaGF2ZSBwcm92ZW4gdGhpcyByZWxhdGlvbiB1bmlxdWU7CisJICAgY2FuJ3QgcHJpbnQs IEJNU2VzIGFyZW4ndCBOb2RlcyAqLworCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVscyBwZ19u b2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ug b3RoZXIgcmVsaWQKIAkJCQkJCQkJCSAqIHNldChzKSAqLwotCUxpc3QJICAgKm5vbl91bmlx dWVfZm9yX3JlbHM7CS8qIGtub3duIG5vdCB1bmlxdWUgZm9yIHRoZXNlIHNldChzKSAqLwor CUxpc3QJICAgKm5vbl91bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9p Z25vcmUpOwkvKiBrbm93biBub3QgdW5pcXVlIGZvciB0aGVzZSBzZXQocykgKi8KIAogCS8q IHVzZWQgYnkgdmFyaW91cyBzY2FucyBhbmQgam9pbnM6ICovCiAJTGlzdAkgICAqYmFzZXJl c3RyaWN0aW5mbzsJLyogUmVzdHJpY3RJbmZvIHN0cnVjdHVyZXMgKGlmIGJhc2UgcmVsKSAq LwpAQCAtODM3LDcgKzgzOCw3IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAogCU9pZAkJCWlu ZGV4b2lkOwkJLyogT0lEIG9mIHRoZSBpbmRleCByZWxhdGlvbiAqLwogCU9pZAkJCXJlbHRh Ymxlc3BhY2U7CS8qIHRhYmxlc3BhY2Ugb2YgaW5kZXggKG5vdCB0YWJsZSkgKi8KLQlSZWxP cHRJbmZvICpyZWw7CQkJLyogYmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUgKi8KKwlSZWxP cHRJbmZvICpyZWwgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJCS8qIGJhY2st bGluayB0byBpbmRleCdzIHRhYmxlOyBkb24ndCBwcmludCwgZWxzZSBpbmZpbml0ZSByZWN1 cnNpb24gKi8KIAogCS8qIGluZGV4LXNpemUgc3RhdGlzdGljcyAoZnJvbSBwZ19jbGFzcyBh bmQgZWxzZXdoZXJlKSAqLwogCUJsb2NrTnVtYmVyIHBhZ2VzOwkJCS8qIG51bWJlciBvZiBk aXNrIHBhZ2VzIGluIGluZGV4ICovCkBAIC04NDcsMjAgKzg0OCwyMiBAQCBzdHJ1Y3QgSW5k ZXhPcHRJbmZvCiAJLyogaW5kZXggZGVzY3JpcHRvciBpbmZvcm1hdGlvbiAqLwogCWludAkJ CW5jb2x1bW5zOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gaW5kZXggKi8KIAlpbnQJCQlu a2V5Y29sdW1uczsJLyogbnVtYmVyIG9mIGtleSBjb2x1bW5zIGluIGluZGV4ICovCi0JaW50 CQkgICAqaW5kZXhrZXlzOwkJLyogY29sdW1uIG51bWJlcnMgb2YgaW5kZXgncyBhdHRyaWJ1 dGVzIGJvdGgKKwkvKiBhcnJheSBmaWVsZHMgYXJlbid0IHJlYWxseSB3b3J0aCB0aGUgdHJv dWJsZSB0byBwcmludCAqLworCWludAkJICAgKmluZGV4a2V5cyBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7CQkvKiBjb2x1bW4gbnVtYmVycyBvZiBpbmRleCdzIGF0dHJpYnV0 ZXMgYm90aAogCQkJCQkJCQkgKiBrZXkgYW5kIGluY2x1ZGVkIGNvbHVtbnMsIG9yIDAgKi8K LQlPaWQJCSAgICppbmRleGNvbGxhdGlvbnM7CS8qIE9JRHMgb2YgY29sbGF0aW9ucyBvZiBp bmRleCBjb2x1bW5zICovCi0JT2lkCQkgICAqb3BmYW1pbHk7CQkvKiBPSURzIG9mIG9wZXJh dG9yIGZhbWlsaWVzIGZvciBjb2x1bW5zICovCi0JT2lkCQkgICAqb3BjaW50eXBlOwkJLyog T0lEcyBvZiBvcGNsYXNzIGRlY2xhcmVkIGlucHV0IGRhdGEgdHlwZXMgKi8KLQlPaWQJCSAg ICpzb3J0b3BmYW1pbHk7CS8qIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcywgaWYgb3JkZXJh YmxlICovCi0JYm9vbAkgICAqcmV2ZXJzZV9zb3J0OwkvKiBpcyBzb3J0IG9yZGVyIGRlc2Nl bmRpbmc/ICovCi0JYm9vbAkgICAqbnVsbHNfZmlyc3Q7CS8qIGRvIE5VTExzIGNvbWUgZmly c3QgaW4gdGhlIHNvcnQgb3JkZXI/ICovCi0JYnl0ZWEJICAqKm9wY2xhc3NvcHRpb25zOyAv KiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMgZm9yIGNvbHVtbnMgKi8KLQlib29sCSAgICpj YW5yZXR1cm47CQkvKiB3aGljaCBpbmRleCBjb2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbgor CU9pZAkJICAgKmluZGV4Y29sbGF0aW9ucyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9y ZSk7CS8qIE9JRHMgb2YgY29sbGF0aW9ucyBvZiBpbmRleCBjb2x1bW5zICovCisJT2lkCQkg ICAqb3BmYW1pbHkgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJLyogT0lEcyBv ZiBvcGVyYXRvciBmYW1pbGllcyBmb3IgY29sdW1ucyAqLworCU9pZAkJICAgKm9wY2ludHlw ZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiBPSURzIG9mIG9wY2xhc3Mg ZGVjbGFyZWQgaW5wdXQgZGF0YSB0eXBlcyAqLworCU9pZAkJICAgKnNvcnRvcGZhbWlseSBw Z19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIE9JRHMgb2YgYnRyZWUgb3BmYW1p bGllcywgaWYgb3JkZXJhYmxlICovCisJYm9vbAkgICAqcmV2ZXJzZV9zb3J0IHBnX25vZGVf YXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogaXMgc29ydCBvcmRlciBkZXNjZW5kaW5nPyAq LworCWJvb2wJICAgKm51bGxzX2ZpcnN0IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3Jl KTsJLyogZG8gTlVMTHMgY29tZSBmaXJzdCBpbiB0aGUgc29ydCBvcmRlcj8gKi8KKwlieXRl YQkgICoqb3BjbGFzc29wdGlvbnMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOyAv KiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMgZm9yIGNvbHVtbnMgKi8KKwlib29sCSAgICpj YW5yZXR1cm4gcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJLyogd2hpY2ggaW5k ZXggY29scyBjYW4gYmUgcmV0dXJuZWQgaW4gYW4KIAkJCQkJCQkJICogaW5kZXgtb25seSBz Y2FuPyAqLwogCU9pZAkJCXJlbGFtOwkJCS8qIE9JRCBvZiB0aGUgYWNjZXNzIG1ldGhvZCAo aW4gcGdfYW0pICovCiAKLQlMaXN0CSAgICppbmRleHByczsJCS8qIGV4cHJlc3Npb25zIGZv ciBub24tc2ltcGxlIGluZGV4IGNvbHVtbnMgKi8KKwkvKiBpbmRleHBycyBpcyByZWR1bmRh bnQgdG8gcHJpbnQgc2luY2Ugd2UgcHJpbnQgaW5kZXh0bGlzdCAqLworCUxpc3QJICAgKmlu ZGV4cHJzIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8qIGV4cHJlc3Npb25z IGZvciBub24tc2ltcGxlIGluZGV4IGNvbHVtbnMgKi8KIAlMaXN0CSAgICppbmRwcmVkOwkJ LyogcHJlZGljYXRlIGlmIGEgcGFydGlhbCBpbmRleCwgZWxzZSBOSUwgKi8KIAogCUxpc3QJ ICAgKmluZGV4dGxpc3Q7CQkvKiB0YXJnZXRsaXN0IHJlcHJlc2VudGluZyBpbmRleCBjb2x1 bW5zICovCkBAIC04NzcsMTQgKzg4MCwxNCBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9v bAkJaHlwb3RoZXRpY2FsOwkvKiB0cnVlIGlmIGluZGV4IGRvZXNuJ3QgcmVhbGx5IGV4aXN0 ICovCiAKIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgaW5kZXgg QU0ncyBBUEkgc3RydWN0OiAqLwotCWJvb2wJCWFtY2Fub3JkZXJieW9wOyAvKiBkb2VzIEFN IHN1cHBvcnQgb3JkZXIgYnkgb3BlcmF0b3IgcmVzdWx0PyAqLwotCWJvb2wJCWFtb3B0aW9u YWxrZXk7CS8qIGNhbiBxdWVyeSBvbWl0IGtleSBmb3IgdGhlIGZpcnN0IGNvbHVtbj8gKi8K LQlib29sCQlhbXNlYXJjaGFycmF5OwkvKiBjYW4gQU0gaGFuZGxlIFNjYWxhckFycmF5T3BF eHByIHF1YWxzPyAqLwotCWJvb2wJCWFtc2VhcmNobnVsbHM7CS8qIGNhbiBBTSBzZWFyY2gg Zm9yIE5VTEwvTk9UIE5VTEwgZW50cmllcz8gKi8KLQlib29sCQlhbWhhc2dldHR1cGxlOwkv KiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9vbAkJYW1oYXNn ZXRiaXRtYXA7IC8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCi0J Ym9vbAkJYW1jYW5wYXJhbGxlbDsJLyogZG9lcyBBTSBzdXBwb3J0IHBhcmFsbGVsIHNjYW4/ ICovCi0JYm9vbAkJYW1jYW5tYXJrcG9zOwkvKiBkb2VzIEFNIHN1cHBvcnQgbWFyay9yZXN0 b3JlPyAqLworCWJvb2wJCWFtY2Fub3JkZXJieW9wIHBnX25vZGVfYXR0cihyZWFkd3JpdGVf aWdub3JlKTsgLyogZG9lcyBBTSBzdXBwb3J0IG9yZGVyIGJ5IG9wZXJhdG9yIHJlc3VsdD8g Ki8KKwlib29sCQlhbW9wdGlvbmFsa2V5IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3Jl KTsJLyogY2FuIHF1ZXJ5IG9taXQga2V5IGZvciB0aGUgZmlyc3QgY29sdW1uPyAqLworCWJv b2wJCWFtc2VhcmNoYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBj YW4gQU0gaGFuZGxlIFNjYWxhckFycmF5T3BFeHByIHF1YWxzPyAqLworCWJvb2wJCWFtc2Vh cmNobnVsbHMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBjYW4gQU0gc2Vh cmNoIGZvciBOVUxML05PVCBOVUxMIGVudHJpZXM/ICovCisJYm9vbAkJYW1oYXNnZXR0dXBs ZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMgQU0gaGF2ZSBhbWdl dHR1cGxlIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWhhc2dldGJpdG1hcCBwZ19ub2RlX2F0 dHIocmVhZHdyaXRlX2lnbm9yZSk7IC8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRl cmZhY2U/ICovCisJYm9vbAkJYW1jYW5wYXJhbGxlbCBwZ19ub2RlX2F0dHIocmVhZHdyaXRl X2lnbm9yZSk7CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLworCWJvb2wJ CWFtY2FubWFya3BvcyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMg QU0gc3VwcG9ydCBtYXJrL3Jlc3RvcmU/ICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVkZSBh bWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCiAJ dm9pZAkJKCphbWNvc3Rlc3RpbWF0ZSkgKCk7CS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8K IH07CkBAIC05MDUsOSArOTA4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleU9wdElu Zm8KIAlJbmRleAkJY29uX3JlbGlkOwkJLyogUlQgaW5kZXggb2YgdGhlIHJlZmVyZW5jaW5n IHRhYmxlICovCiAJSW5kZXgJCXJlZl9yZWxpZDsJCS8qIFJUIGluZGV4IG9mIHRoZSByZWZl cmVuY2VkIHRhYmxlICovCiAJaW50CQkJbmtleXM7CQkJLyogbnVtYmVyIG9mIGNvbHVtbnMg aW4gdGhlIGZvcmVpZ24ga2V5ICovCi0JQXR0ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tF WVNdOyAvKiBjb2xzIGluIHJlZmVyZW5jaW5nIHRhYmxlICovCi0JQXR0ck51bWJlcgljb25m a2V5W0lOREVYX01BWF9LRVlTXTsJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCi0J T2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXTsJLyogUEsgPSBGSyBvcGVyYXRvciBP SURzICovCisJQXR0ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG5rZXlzKSk7IC8qIGNvbHMgaW4gcmVmZXJlbmNpbmcgdGFibGUgKi8K KwlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG5rZXlzKSk7CS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLworCU9pZAkJ CWNvbnBmZXFvcFtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtl eXMpKTsJLyogUEsgPSBGSyBvcGVyYXRvciBPSURzICovCiAKIAkvKiBEZXJpdmVkIGluZm8g YWJvdXQgd2hldGhlciBGSydzIGVxdWFsaXR5IGNvbmRpdGlvbnMgbWF0Y2ggdGhlIHF1ZXJ5 OiAqLwogCWludAkJCW5tYXRjaGVkX2VjOwkvKiAjIG9mIEZLIGNvbHMgbWF0Y2hlZCBieSBF Q3MgKi8KQEAgLTkzNCw4ICs5MzcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0aXN0aWNFeHRJ bmZvCiAJTm9kZVRhZwkJdHlwZTsKIAogCU9pZAkJCXN0YXRPaWQ7CQkvKiBPSUQgb2YgdGhl IHN0YXRpc3RpY3Mgcm93ICovCi0JYm9vbAkJaW5oZXJpdDsJCS8qIGluY2x1ZGVzIGNoaWxk IHJlbGF0aW9ucyAqLwotCVJlbE9wdEluZm8gKnJlbDsJCQkvKiBiYWNrLWxpbmsgdG8gc3Rh dGlzdGljJ3MgdGFibGUgKi8KKwlib29sCQlpbmhlcml0IHBnX25vZGVfYXR0cihyZWFkd3Jp dGVfaWdub3JlKTsJCS8qIGluY2x1ZGVzIGNoaWxkIHJlbGF0aW9ucyAqLworCVJlbE9wdElu Zm8gKnJlbCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkJLyogYmFjay1saW5r IHRvIHN0YXRpc3RpYydzIHRhYmxlOworCQkJCQkJCQkJCQkJCQkJICAgZG9uJ3QgcHJpbnQs IGluZmluaXRlIHJlY3Vyc2lvbiBvbiBwbGFuIHRyZWUgZHVtcCAqLwogCWNoYXIJCWtpbmQ7 CQkJLyogc3RhdGlzdGljcyBraW5kIG9mIHRoaXMgZW50cnkgKi8KIAlCaXRtYXBzZXQgICpr ZXlzOwkJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJlZCAqLwogCUxpc3QJICAg KmV4cHJzOwkJCS8qIGV4cHJlc3Npb25zICovCkBAIC0xMTA5LDcgKzExMTMsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQYXRoVGFyZ2V0CiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpl eHByczsJCQkvKiBsaXN0IG9mIGV4cHJlc3Npb25zIHRvIGJlIGNvbXB1dGVkICovCi0JSW5k ZXgJICAgKnNvcnRncm91cHJlZnM7CS8qIGNvcnJlc3BvbmRpbmcgc29ydC9ncm91cCByZWZu b3MsIG9yIDAgKi8KKwlJbmRleAkgICAqc29ydGdyb3VwcmVmcyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShleHBycykpOwkvKiBjb3JyZXNwb25kaW5nIHNvcnQvZ3JvdXAgcmVmbm9zLCBv ciAwICovCiAJUXVhbENvc3QJY29zdDsJCQkvKiBjb3N0IG9mIGV2YWx1YXRpbmcgdGhlIGV4 cHJlc3Npb25zICovCiAJaW50CQkJd2lkdGg7CQkJLyogZXN0aW1hdGVkIGF2ZyB3aWR0aCBv ZiByZXN1bHQgdHVwbGVzICovCiAJVm9sYXRpbGVGdW5jdGlvblN0YXR1cyBoYXNfdm9sYXRp bGVfZXhwcjsJLyogaW5kaWNhdGVzIGlmIGV4cHJzIGNvbnRhaW4KQEAgLTExODAsMTAgKzEx ODQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0aAogCiAJTm9kZVRhZwkJcGF0aHR5cGU7CQkv KiB0YWcgaWRlbnRpZnlpbmcgc2Nhbi9qb2luIG1ldGhvZCAqLwogCi0JUmVsT3B0SW5mbyAq cGFyZW50OwkJCS8qIHRoZSByZWxhdGlvbiB0aGlzIHBhdGggY2FuIGJ1aWxkICovCi0JUGF0 aFRhcmdldCAqcGF0aHRhcmdldDsJCS8qIGxpc3Qgb2YgVmFycy9FeHBycywgY29zdCwgd2lk dGggKi8KKwlSZWxPcHRJbmZvICpwYXJlbnQgcGdfbm9kZV9hdHRyKHBhdGhfaGFjazEpOwkJ CS8qIHRoZSByZWxhdGlvbiB0aGlzIHBhdGggY2FuIGJ1aWxkICovCisJUGF0aFRhcmdldCAq cGF0aHRhcmdldCBwZ19ub2RlX2F0dHIocGF0aF9oYWNrMik7CQkvKiBsaXN0IG9mIFZhcnMv RXhwcnMsIGNvc3QsIHdpZHRoICovCiAKLQlQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvOwkv KiBwYXJhbWV0ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLworCVBhcmFtUGF0 aEluZm8gKnBhcmFtX2luZm8gcGdfbm9kZV9hdHRyKHBhdGhfaGFjazMpOwkvKiBwYXJhbWV0 ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLwogCiAJYm9vbAkJcGFyYWxsZWxf YXdhcmU7IC8qIGVuZ2FnZSBwYXJhbGxlbC1hd2FyZSBsb2dpYz8gKi8KIAlib29sCQlwYXJh bGxlbF9zYWZlOwkvKiBPSyB0byB1c2UgYXMgcGFydCBvZiBwYXJhbGxlbCBwbGFuPyAqLwpA QCAtMjA1MCw2ICsyMDU0LDEyIEBAIHR5cGVkZWYgc3RydWN0IExpbWl0UGF0aAogICogYXBw bHkgb25seSBvbmUuICBXZSBtYXJrIGNsYXVzZXMgb2YgdGhpcyBraW5kIGJ5IHNldHRpbmcg cGFyZW50X2VjIHRvCiAgKiBwb2ludCB0byB0aGUgZ2VuZXJhdGluZyBFcXVpdmFsZW5jZUNs YXNzLiAgTXVsdGlwbGUgY2xhdXNlcyB3aXRoIHRoZSBzYW1lCiAgKiBwYXJlbnRfZWMgaW4g dGhlIHNhbWUgam9pbiBhcmUgcmVkdW5kYW50LgorICoKKyAqIE1vc3QgZmllbGRzIGFyZSBp Z25vcmVkIGZvciBlcXVhbGl0eSwgc2luY2UgdGhleSBtYXkgbm90IGJlIHNldCB5ZXQsIGFu ZAorICogc2hvdWxkIGJlIGRlcml2YWJsZSBmcm9tIHRoZSBjbGF1c2UgYW55d2F5LgorICoK KyAqIHBhcmVudF9lYywgbGVmdF9lYywgcmlnaHRfZWMgYXJlIG5vdCBwcmludGVkLCBsZXN0 IGl0IGxlYWQgdG8gaW5maW5pdGUKKyAqIHJlY3Vyc2lvbiBpbiBwbGFuIHRyZWUgZHVtcC4K ICAqLwogCiB0eXBlZGVmIHN0cnVjdCBSZXN0cmljdEluZm8KQEAgLTIwNjIsMTkgKzIwNzIs MTkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVzdHJpY3RJbmZvCiAKIAlib29sCQlvdXRlcmpvaW5f ZGVsYXllZDsJLyogdHJ1ZSBpZiBkZWxheWVkIGJ5IGxvd2VyIG91dGVyIGpvaW4gKi8KIAot CWJvb2wJCWNhbl9qb2luOwkJLyogc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwlib29sCQljYW5f am9pbiBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCS8qIHNlZSBjb21tZW50IGFib3Zl ICovCiAKLQlib29sCQlwc2V1ZG9jb25zdGFudDsgLyogc2VlIGNvbW1lbnQgYWJvdmUgKi8K Kwlib29sCQlwc2V1ZG9jb25zdGFudCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsgLyog c2VlIGNvbW1lbnQgYWJvdmUgKi8KIAotCWJvb2wJCWxlYWtwcm9vZjsJCS8qIHRydWUgaWYg a25vd24gdG8gY29udGFpbiBubyBsZWFrZWQgVmFycyAqLworCWJvb2wJCWxlYWtwcm9vZiBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCS8qIHRydWUgaWYga25vd24gdG8gY29udGFp biBubyBsZWFrZWQgVmFycyAqLwogCi0JVm9sYXRpbGVGdW5jdGlvblN0YXR1cyBoYXNfdm9s YXRpbGU7CS8qIHRvIGluZGljYXRlIGlmIGNsYXVzZSBjb250YWlucworCVZvbGF0aWxlRnVu Y3Rpb25TdGF0dXMgaGFzX3ZvbGF0aWxlIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiB0byBpbmRpY2F0ZSBpZiBjbGF1c2UgY29udGFpbnMKIAkJCQkJCQkJCQkJICogYW55IHZv bGF0aWxlIGZ1bmN0aW9ucy4gKi8KIAogCUluZGV4CQlzZWN1cml0eV9sZXZlbDsgLyogc2Vl IGNvbW1lbnQgYWJvdmUgKi8KIAogCS8qIFRoZSBzZXQgb2YgcmVsaWRzICh2YXJub3MpIGFj dHVhbGx5IHJlZmVyZW5jZWQgaW4gdGhlIGNsYXVzZTogKi8KLQlSZWxpZHMJCWNsYXVzZV9y ZWxpZHM7CisJUmVsaWRzCQljbGF1c2VfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25v cmUpOwogCiAJLyogVGhlIHNldCBvZiByZWxpZHMgcmVxdWlyZWQgdG8gZXZhbHVhdGUgdGhl IGNsYXVzZTogKi8KIAlSZWxpZHMJCXJlcXVpcmVkX3JlbGlkczsKQEAgLTIwODYsNDggKzIw OTYsNTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVzdHJpY3RJbmZvCiAJUmVsaWRzCQludWxsYWJs ZV9yZWxpZHM7CiAKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBmb3IgYW55IGJpbmFyeSBv cGNsYXVzZTogKi8KLQlSZWxpZHMJCWxlZnRfcmVsaWRzOwkvKiByZWxpZHMgaW4gbGVmdCBz aWRlIG9mIGNsYXVzZSAqLwotCVJlbGlkcwkJcmlnaHRfcmVsaWRzOwkvKiByZWxpZHMgaW4g cmlnaHQgc2lkZSBvZiBjbGF1c2UgKi8KKwlSZWxpZHMJCWxlZnRfcmVsaWRzIHBnX25vZGVf YXR0cihlcXVhbF9pZ25vcmUpOwkvKiByZWxpZHMgaW4gbGVmdCBzaWRlIG9mIGNsYXVzZSAq LworCVJlbGlkcwkJcmlnaHRfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiByZWxpZHMgaW4gcmlnaHQgc2lkZSBvZiBjbGF1c2UgKi8KIAogCS8qIFRoaXMgZmllbGQg aXMgTlVMTCB1bmxlc3MgY2xhdXNlIGlzIGFuIE9SIGNsYXVzZTogKi8KLQlFeHByCSAgICpv cmNsYXVzZTsJCS8qIG1vZGlmaWVkIGNsYXVzZSB3aXRoIFJlc3RyaWN0SW5mb3MgKi8KKwlF eHByCSAgICpvcmNsYXVzZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCS8qIG1vZGlm aWVkIGNsYXVzZSB3aXRoIFJlc3RyaWN0SW5mb3MgKi8KIAogCS8qIFRoaXMgZmllbGQgaXMg TlVMTCB1bmxlc3MgY2xhdXNlIGlzIHBvdGVudGlhbGx5IHJlZHVuZGFudDogKi8KLQlFcXVp dmFsZW5jZUNsYXNzICpwYXJlbnRfZWM7CS8qIGdlbmVyYXRpbmcgRXF1aXZhbGVuY2VDbGFz cyAqLworCUVxdWl2YWxlbmNlQ2xhc3MgKnBhcmVudF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlIHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBnZW5lcmF0aW5nIEVxdWl2YWxlbmNlQ2xh c3MgKi8KIAogCS8qIGNhY2hlIHNwYWNlIGZvciBjb3N0IGFuZCBzZWxlY3Rpdml0eSAqLwot CVF1YWxDb3N0CWV2YWxfY29zdDsJCS8qIGV2YWwgY29zdCBvZiBjbGF1c2U7IC0xIGlmIG5v dCB5ZXQgc2V0ICovCi0JU2VsZWN0aXZpdHkgbm9ybV9zZWxlYzsJCS8qIHNlbGVjdGl2aXR5 IGZvciAibm9ybWFsIiAoSk9JTl9JTk5FUikKKwlRdWFsQ29zdAlldmFsX2Nvc3QgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkvKiBldmFsIGNvc3Qgb2YgY2xhdXNlOyAtMSBpZiBu b3QgeWV0IHNldCAqLworCVNlbGVjdGl2aXR5IG5vcm1fc2VsZWMgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZSk7CQkvKiBzZWxlY3Rpdml0eSBmb3IgIm5vcm1hbCIgKEpPSU5fSU5ORVIp CiAJCQkJCQkJCSAqIHNlbWFudGljczsgLTEgaWYgbm90IHlldCBzZXQ7ID4xIG1lYW5zIGEK IAkJCQkJCQkJICogcmVkdW5kYW50IGNsYXVzZSAqLwotCVNlbGVjdGl2aXR5IG91dGVyX3Nl bGVjOwkvKiBzZWxlY3Rpdml0eSBmb3Igb3V0ZXIgam9pbiBzZW1hbnRpY3M7IC0xIGlmCisJ U2VsZWN0aXZpdHkgb3V0ZXJfc2VsZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8q IHNlbGVjdGl2aXR5IGZvciBvdXRlciBqb2luIHNlbWFudGljczsgLTEgaWYKIAkJCQkJCQkJ ICogbm90IHlldCBzZXQgKi8KIAogCS8qIHZhbGlkIGlmIGNsYXVzZSBpcyBtZXJnZWpvaW5h YmxlLCBlbHNlIE5JTCAqLwotCUxpc3QJICAgKm1lcmdlb3BmYW1pbGllczsJLyogb3BmYW1p bGllcyBjb250YWluaW5nIGNsYXVzZSBvcGVyYXRvciAqLworCUxpc3QJICAgKm1lcmdlb3Bm YW1pbGllcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogb3BmYW1pbGllcyBjb250 YWluaW5nIGNsYXVzZSBvcGVyYXRvciAqLwogCiAJLyogY2FjaGUgc3BhY2UgZm9yIG1lcmdl Y2xhdXNlIHByb2Nlc3Npbmc7IE5VTEwgaWYgbm90IHlldCBzZXQgKi8KLQlFcXVpdmFsZW5j ZUNsYXNzICpsZWZ0X2VjOwkvKiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgbGVmdGhh bmQgKi8KLQlFcXVpdmFsZW5jZUNsYXNzICpyaWdodF9lYzsgLyogRXF1aXZhbGVuY2VDbGFz cyBjb250YWluaW5nIHJpZ2h0aGFuZCAqLwotCUVxdWl2YWxlbmNlTWVtYmVyICpsZWZ0X2Vt OyAvKiBFcXVpdmFsZW5jZU1lbWJlciBmb3IgbGVmdGhhbmQgKi8KLQlFcXVpdmFsZW5jZU1l bWJlciAqcmlnaHRfZW07CS8qIEVxdWl2YWxlbmNlTWVtYmVyIGZvciByaWdodGhhbmQgKi8K LQlMaXN0CSAgICpzY2Fuc2VsX2NhY2hlOwkvKiBsaXN0IG9mIE1lcmdlU2NhblNlbENhY2hl IHN0cnVjdHMgKi8KKwlFcXVpdmFsZW5jZUNsYXNzICpsZWZ0X2VjIHBnX25vZGVfYXR0cihl cXVhbF9pZ25vcmUgcmVhZHdyaXRlX2lnbm9yZSk7CS8qIEVxdWl2YWxlbmNlQ2xhc3MgY29u dGFpbmluZyBsZWZ0aGFuZCAqLworCUVxdWl2YWxlbmNlQ2xhc3MgKnJpZ2h0X2VjIHBnX25v ZGVfYXR0cihlcXVhbF9pZ25vcmUgcmVhZHdyaXRlX2lnbm9yZSk7IC8qIEVxdWl2YWxlbmNl Q2xhc3MgY29udGFpbmluZyByaWdodGhhbmQgKi8KKwlFcXVpdmFsZW5jZU1lbWJlciAqbGVm dF9lbSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsgLyogRXF1aXZhbGVuY2VNZW1iZXIg Zm9yIGxlZnRoYW5kICovCisJRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2VtIHBnX25vZGVf YXR0cihlcXVhbF9pZ25vcmUpOwkvKiBFcXVpdmFsZW5jZU1lbWJlciBmb3IgcmlnaHRoYW5k ICovCisKKwkvKgorCSAqIExpc3Qgb2YgTWVyZ2VTY2FuU2VsQ2FjaGUgc3RydWN0cy4gIFRo b3NlIGFyZW4ndCBOb2Rlcywgc28gaGFyZCB0bworCSAqIGNvcHkuICBJZ25vcmluZyBpdCB3 aWxsIGhhdmUgdGhlIGVmZmVjdCB0aGF0IGNvcHlpbmcgd2lsbCBqdXN0IHJlc2V0CisJICog dGhlIGNhY2hlLgorCSAqLworCUxpc3QJICAgKnNjYW5zZWxfY2FjaGUgcGdfbm9kZV9hdHRy KGNvcHlfaWdub3JlIGVxdWFsX2lnbm9yZSk7CiAKIAkvKiB0cmFuc2llbnQgd29ya3NwYWNl IGZvciB1c2Ugd2hpbGUgY29uc2lkZXJpbmcgYSBzcGVjaWZpYyBqb2luIHBhdGggKi8KLQli b29sCQlvdXRlcl9pc19sZWZ0OwkvKiBUID0gb3V0ZXIgdmFyIG9uIGxlZnQsIEYgPSBvbiBy aWdodCAqLworCWJvb2wJCW91dGVyX2lzX2xlZnQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CS8qIFQgPSBvdXRlciB2YXIgb24gbGVmdCwgRiA9IG9uIHJpZ2h0ICovCiAKIAkvKiB2 YWxpZCBpZiBjbGF1c2UgaXMgaGFzaGpvaW5hYmxlLCBlbHNlIEludmFsaWRPaWQ6ICovCi0J T2lkCQkJaGFzaGpvaW5vcGVyYXRvcjsJLyogY29weSBvZiBjbGF1c2Ugb3BlcmF0b3IgKi8K KwlPaWQJCQloYXNoam9pbm9wZXJhdG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiBjb3B5IG9mIGNsYXVzZSBvcGVyYXRvciAqLwogCiAJLyogY2FjaGUgc3BhY2UgZm9yIGhh c2hjbGF1c2UgcHJvY2Vzc2luZzsgLTEgaWYgbm90IHlldCBzZXQgKi8KLQlTZWxlY3Rpdml0 eSBsZWZ0X2J1Y2tldHNpemU7CS8qIGF2ZyBidWNrZXRzaXplIG9mIGxlZnQgc2lkZSAqLwot CVNlbGVjdGl2aXR5IHJpZ2h0X2J1Y2tldHNpemU7CS8qIGF2ZyBidWNrZXRzaXplIG9mIHJp Z2h0IHNpZGUgKi8KLQlTZWxlY3Rpdml0eSBsZWZ0X21jdmZyZXE7CS8qIGxlZnQgc2lkZSdz IG1vc3QgY29tbW9uIHZhbCdzIGZyZXEgKi8KLQlTZWxlY3Rpdml0eSByaWdodF9tY3ZmcmVx OwkvKiByaWdodCBzaWRlJ3MgbW9zdCBjb21tb24gdmFsJ3MgZnJlcSAqLworCVNlbGVjdGl2 aXR5IGxlZnRfYnVja2V0c2l6ZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogYXZn IGJ1Y2tldHNpemUgb2YgbGVmdCBzaWRlICovCisJU2VsZWN0aXZpdHkgcmlnaHRfYnVja2V0 c2l6ZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogYXZnIGJ1Y2tldHNpemUgb2Yg cmlnaHQgc2lkZSAqLworCVNlbGVjdGl2aXR5IGxlZnRfbWN2ZnJlcSBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsJLyogbGVmdCBzaWRlJ3MgbW9zdCBjb21tb24gdmFsJ3MgZnJlcSAq LworCVNlbGVjdGl2aXR5IHJpZ2h0X21jdmZyZXEgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CS8qIHJpZ2h0IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBmcmVxICovCiAKIAkvKiBo YXNoIGVxdWFsaXR5IG9wZXJhdG9ycyB1c2VkIGZvciBtZW1vaXplIG5vZGVzLCBlbHNlIElu dmFsaWRPaWQgKi8KLQlPaWQJCQlsZWZ0X2hhc2hlcW9wZXJhdG9yOwotCU9pZAkJCXJpZ2h0 X2hhc2hlcW9wZXJhdG9yOworCU9pZAkJCWxlZnRfaGFzaGVxb3BlcmF0b3IgcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7CisJT2lkCQkJcmlnaHRfaGFzaGVxb3BlcmF0b3IgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiB9IFJlc3RyaWN0SW5mbzsKIAogLyoKQEAgLTIxNzcs MTMgKzIxOTMsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2FuU2VsQ2FjaGUKICAqIEFs dGhvdWdoIHRoZSBwbGFubmVyIHRyZWF0cyB0aGlzIGFzIGFuIGV4cHJlc3Npb24gbm9kZSB0 eXBlLCBpdCBpcyBub3QKICAqIHJlY29nbml6ZWQgYnkgdGhlIHBhcnNlciBvciBleGVjdXRv ciwgc28gd2UgZGVjbGFyZSBpdCBoZXJlIHJhdGhlciB0aGFuCiAgKiBpbiBwcmltbm9kZXMu aC4KKyAqCisgKiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBjb21wYXJlIHBoZXhwci4gIFR3 byBQbGFjZUhvbGRlclZhcnMgd2l0aCB0aGUKKyAqIHNhbWUgSUQgYW5kIGxldmVsc3VwIHNo b3VsZCBiZSBjb25zaWRlcmVkIGVxdWFsIGV2ZW4gaWYgdGhlIGNvbnRhaW5lZAorICogZXhw cmVzc2lvbnMgaGF2ZSBtYW5hZ2VkIHRvIG11dGF0ZSB0byBkaWZmZXJlbnQgc3RhdGVzLiAg VGhpcyB3aWxsCisgKiBoYXBwZW4gZHVyaW5nIGZpbmFsIHBsYW4gY29uc3RydWN0aW9uIHdo ZW4gdGhlcmUgYXJlIG5lc3RlZCBQSFZzLCBzaW5jZQorICogdGhlIGlubmVyIFBIViB3aWxs IGdldCByZXBsYWNlZCBieSBhIFBhcmFtIGluIHNvbWUgY29waWVzIG9mIHRoZSBvdXRlcgor ICogUEhWLiAgQW5vdGhlciB3YXkgaW4gd2hpY2ggaXQgY2FuIGhhcHBlbiBpcyB0aGF0IGlu aXRwbGFuIHN1YmxpbmtzCisgKiBjb3VsZCBnZXQgcmVwbGFjZWQgYnkgZGlmZmVyZW50bHkt bnVtYmVyZWQgUGFyYW1zIHdoZW4gc3VibGluayBmb2xkaW5nCisgKiBpcyBkb25lLiAgKFRo ZSBlbmQgcmVzdWx0IG9mIHN1Y2ggYSBzaXR1YXRpb24gd291bGQgYmUgc29tZQorICogdW5y ZWZlcmVuY2VkIGluaXRwbGFucywgd2hpY2ggaXMgYW5ub3lpbmcgYnV0IG5vdCByZWFsbHkg YSBwcm9ibGVtLikgT24KKyAqIHRoZSBzYW1lIHJlYXNvbmluZywgdGhlcmUgaXMgbm8gbmVl ZCB0byBleGFtaW5lIHBocmVscy4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCBQbGFjZUhvbGRl clZhcgogewogCUV4cHIJCXhwcjsKLQlFeHByCSAgICpwaGV4cHI7CQkJLyogdGhlIHJlcHJl c2VudGVkIGV4cHJlc3Npb24gKi8KLQlSZWxpZHMJCXBocmVsczsJCQkvKiBiYXNlIHJlbGlk cyBzeW50YWN0aWNhbGx5IHdpdGhpbiBleHByIHNyYyAqLworCUV4cHIJICAgKnBoZXhwciBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCQkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVz c2lvbiAqLworCVJlbGlkcwkJcGhyZWxzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJ CS8qIGJhc2UgcmVsaWRzIHN5bnRhY3RpY2FsbHkgd2l0aGluIGV4cHIgc3JjICovCiAJSW5k ZXgJCXBoaWQ7CQkJLyogSUQgZm9yIFBIViAodW5pcXVlIHdpdGhpbiBwbGFubmVyIHJ1bikg Ki8KIAlJbmRleAkJcGhsZXZlbHN1cDsJCS8qID4gMCBpZiBQSFYgYmVsb25ncyB0byBvdXRl ciBxdWVyeSAqLwogfSBQbGFjZUhvbGRlclZhcjsKQEAgLTIzNDQsNyArMjM3MSw3IEBAIHR5 cGVkZWYgc3RydWN0IEFwcGVuZFJlbEluZm8KIAkgKiBjaGlsZCBjb2x1bW4gaXMgZHJvcHBl ZCBvciBkb2Vzbid0IGV4aXN0IGluIHRoZSBwYXJlbnQuCiAJICovCiAJaW50CQkJbnVtX2No aWxkX2NvbHM7IC8qIGxlbmd0aCBvZiBhcnJheSAqLwotCUF0dHJOdW1iZXIgKnBhcmVudF9j b2xub3M7CS8qIGFycmF5IG9mIHBhcmVudCBhdHRub3MsIG9yIHplcm9lcyAqLworCUF0dHJO dW1iZXIgKnBhcmVudF9jb2xub3MgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtX2NoaWxk X2NvbHMpKTsJLyogYXJyYXkgb2YgcGFyZW50IGF0dG5vcywgb3IgemVyb2VzICovCiAKIAkv KgogCSAqIFdlIHN0b3JlIHRoZSBwYXJlbnQgdGFibGUncyBPSUQgaGVyZSBmb3IgaW5oZXJp dGFuY2UsIG9yIEludmFsaWRPaWQgZm9yCkBAIC0yNDEzLDcgKzI0NDAsNyBAQCB0eXBlZGVm IHN0cnVjdCBQbGFjZUhvbGRlckluZm8KIAlOb2RlVGFnCQl0eXBlOwogCiAJSW5kZXgJCXBo aWQ7CQkJLyogSUQgZm9yIFBIICh1bmlxdWUgd2l0aGluIHBsYW5uZXIgcnVuKSAqLwotCVBs YWNlSG9sZGVyVmFyICpwaF92YXI7CQkvKiBjb3B5IG9mIFBsYWNlSG9sZGVyVmFyIHRyZWUg Ki8KKwlQbGFjZUhvbGRlclZhciAqcGhfdmFyOwkJLyogY29weSBvZiBQbGFjZUhvbGRlclZh ciB0cmVlIChzaG91bGQgYmUgcmVkdW5kYW50IGZvciBjb21wYXJpc29uLCBjb3VsZCBiZSBp Z25vcmVkKSAqLwogCVJlbGlkcwkJcGhfZXZhbF9hdDsJCS8qIGxvd2VzdCBsZXZlbCB3ZSBj YW4gZXZhbHVhdGUgdmFsdWUgYXQgKi8KIAlSZWxpZHMJCXBoX2xhdGVyYWw7CQkvKiByZWxp ZHMgb2YgY29udGFpbmVkIGxhdGVyYWwgcmVmcywgaWYgYW55ICovCiAJUmVsaWRzCQlwaF9u ZWVkZWQ7CQkvKiBoaWdoZXN0IGxldmVsIHRoZSB2YWx1ZSBpcyBuZWVkZWQgYXQgKi8KQEAg LTI0MzIsNyArMjQ1OSw4IEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlPaWQJ CQlhZ2dmbm9pZDsJCS8qIHBnX3Byb2MgT2lkIG9mIHRoZSBhZ2dyZWdhdGUgKi8KIAlPaWQJ CQlhZ2dzb3J0b3A7CQkvKiBPaWQgb2YgaXRzIHNvcnQgb3BlcmF0b3IgKi8KIAlFeHByCSAg ICp0YXJnZXQ7CQkJLyogZXhwcmVzc2lvbiB3ZSBhcmUgYWdncmVnYXRpbmcgb24gKi8KLQlQ bGFubmVySW5mbyAqc3Vicm9vdDsJCS8qIG1vZGlmaWVkICJyb290IiBmb3IgcGxhbm5pbmcg dGhlIHN1YnF1ZXJ5ICovCisJUGxhbm5lckluZm8gKnN1YnJvb3QgcGdfbm9kZV9hdHRyKHJl YWR3cml0ZV9pZ25vcmUpOwkJLyogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFubmluZyB0aGUg c3VicXVlcnk7CisJCQkJCQkJCQkJCQkJCQkJICAgbm90IHByaW50ZWQsIHRvbyBsYXJnZSwg bm90IGludGVyZXN0aW5nIGVub3VnaCAqLwogCVBhdGgJICAgKnBhdGg7CQkJLyogYWNjZXNz IHBhdGggZm9yIHN1YnF1ZXJ5ICovCiAJQ29zdAkJcGF0aGNvc3Q7CQkvKiBlc3RpbWF0ZWQg Y29zdCB0byBmZXRjaCBmaXJzdCByb3cgKi8KIAlQYXJhbQkgICAqcGFyYW07CQkJLyogcGFy YW0gZm9yIHN1YnBsYW4ncyBvdXRwdXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXgg MGI1MThjZTZiMi4uZDJkMzcyYTVkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTI3 NSwxMCArMjc1LDEwIEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAJTGlzdAkgICAq bWVyZ2VwbGFuczsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1c3QgbGlrZSB0aGUgc29ydC1r ZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVy IG9mIHNvcnQta2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVyICpzb3J0Q29sSWR4OwkJLyog dGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICpzb3J0T3Bl cmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJ CSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JYm9vbAkgICAq bnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLworCUF0dHJO dW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJ LyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpzb3J0 T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyogT0lEcyBv ZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCisJT2lkCQkgICAqY29sbGF0aW9ucyBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBPSURzIG9mIGNvbGxhdGlv bnMgKi8KKwlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUNvbHMpKTsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCS8qIEluZm8g Zm9yIHJ1bi10aW1lIHN1YnBsYW4gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcg dGhhdCAqLwogCXN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsK IH0gTWVyZ2VBcHBlbmQ7CkBAIC0yOTgsOSArMjk4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVj dXJzaXZlVW5pb24KIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSB6ZXJvL251bGwgaW4gVU5J T04gQUxMIGNhc2UgKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMg dG8gY2hlY2sgZm9yCiAJCQkJCQkJCSAqIGR1cGxpY2F0ZS1uZXNzICovCi0JQXR0ck51bWJl ciAqZHVwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8K LQlPaWQJCSAgICpkdXBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21w YXJlIHdpdGggKi8KLQlPaWQJCSAgICpkdXBDb2xsYXRpb25zOworCUF0dHJOdW1iZXIgKmR1 cENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiB0aGVpciBp bmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKmR1cE9wZXJhdG9ycyBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIGVxdWFsaXR5IG9wZXJhdG9y cyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICpkdXBDb2xsYXRpb25zIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAlsb25nCQludW1Hcm91cHM7CQkvKiBlc3Rp bWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogfSBSZWN1cnNpdmVVbmlvbjsK IApAQCAtNzY1LDEwICs3NjUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VKb2luCiAJYm9v bAkJc2tpcF9tYXJrX3Jlc3RvcmU7CS8qIENhbiB3ZSBza2lwIG1hcmsvcmVzdG9yZSBjYWxs cz8gKi8KIAlMaXN0CSAgICptZXJnZWNsYXVzZXM7CS8qIG1lcmdlY2xhdXNlcyBhcyBleHBy ZXNzaW9uIHRyZWVzICovCiAJLyogdGhlc2UgYXJlIGFycmF5cywgYnV0IGhhdmUgdGhlIHNh bWUgbGVuZ3RoIGFzIHRoZSBtZXJnZWNsYXVzZXMgbGlzdDogKi8KLQlPaWQJCSAgICptZXJn ZUZhbWlsaWVzOwkvKiBwZXItY2xhdXNlIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcyAqLwot CU9pZAkJICAgKm1lcmdlQ29sbGF0aW9uczsJLyogcGVyLWNsYXVzZSBPSURzIG9mIGNvbGxh dGlvbnMgKi8KLQlpbnQJCSAgICptZXJnZVN0cmF0ZWdpZXM7CS8qIHBlci1jbGF1c2Ugb3Jk ZXJpbmcgKEFTQyBvciBERVNDKSAqLwotCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJzdDsJLyog cGVyLWNsYXVzZSBudWxscyBvcmRlcmluZyAqLworCU9pZAkJICAgKm1lcmdlRmFtaWxpZXMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobWVyZ2VjbGF1c2VzKSk7CS8qIHBlci1jbGF1c2Ug T0lEcyBvZiBidHJlZSBvcGZhbWlsaWVzICovCisJT2lkCQkgICAqbWVyZ2VDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG1lcmdlY2xhdXNlcykpOwkvKiBwZXItY2xhdXNl IE9JRHMgb2YgY29sbGF0aW9ucyAqLworCWludAkJICAgKm1lcmdlU3RyYXRlZ2llcyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsJLyogcGVyLWNsYXVzZSBvcmRl cmluZyAoQVNDIG9yIERFU0MpICovCisJYm9vbAkgICAqbWVyZ2VOdWxsc0ZpcnN0IHBnX25v ZGVfYXR0cihhcnJheV9zaXplKG1lcmdlY2xhdXNlcykpOwkvKiBwZXItY2xhdXNlIG51bGxz IG9yZGVyaW5nICovCiB9IE1lcmdlSm9pbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAt ODA4LDggKzgwOCw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9pemUKIAogCWludAkJCW51bUtl eXM7CQkvKiBzaXplIG9mIHRoZSB0d28gYXJyYXlzIGJlbG93ICovCiAKLQlPaWQJCSAgICpo YXNoT3BlcmF0b3JzOwkvKiBoYXNoIG9wZXJhdG9ycyBmb3IgZWFjaCBrZXkgKi8KLQlPaWQJ CSAgICpjb2xsYXRpb25zOwkJLyogY2FjaGUga2V5cyAqLworCU9pZAkJICAgKmhhc2hPcGVy YXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtS2V5cykpOwkvKiBoYXNoIG9wZXJh dG9ycyBmb3IgZWFjaCBrZXkgKi8KKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG51bUtleXMpKTsJCS8qIGNhY2hlIGtleXMgKi8KIAlMaXN0CSAgICpw YXJhbV9leHByczsJLyogZXhwcnMgY29udGFpbmluZyBwYXJhbWV0ZXJzICovCiAJYm9vbAkJ c2luZ2xlcm93OwkJLyogdHJ1ZSBpZiB0aGUgY2FjaGUgZW50cnkgc2hvdWxkIGJlIG1hcmtl ZCBhcwogCQkJCQkJCQkgKiBjb21wbGV0ZSBhZnRlciB3ZSBzdG9yZSB0aGUgZmlyc3QgdHVw bGUgaW4KQEAgLTgzMCwxMCArODMwLDEwIEBAIHR5cGVkZWYgc3RydWN0IFNvcnQKIHsKIAlQ bGFuCQlwbGFuOwogCWludAkJCW51bUNvbHM7CQkvKiBudW1iZXIgb2Ygc29ydC1rZXkgY29s dW1ucyAqLwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGlu IHRoZSB0YXJnZXQgbGlzdCAqLwotCU9pZAkJICAgKnNvcnRPcGVyYXRvcnM7CS8qIE9JRHMg b2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7 CQkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KLQlib29sCSAgICpudWxsc0ZpcnN0OwkJLyog TlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCisJQXR0ck51bWJlciAqc29ydENvbElk eCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVz IGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBz b3J0IHRoZW0gYnkgKi8KKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsJCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLworCWJvb2wJICAg Km51bGxzRmlyc3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogTlVM TFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCiB9IFNvcnQ7CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KQEAgLTg1Niw5ICs4NTYsOSBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cAogewogCVBs YW4JCXBsYW47CiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBncm91cGluZyBjb2x1 bW5zICovCi0JQXR0ck51bWJlciAqZ3JwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0 aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICpncnBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5 IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpncnBDb2xsYXRpb25z OworCUF0dHJOdW1iZXIgKmdycENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1D b2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJ ICAgKmdycE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8q IGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICpncnBD b2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIH0gR3JvdXA7 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLQpAQCAtODgxLDkgKzg4MSw5IEBAIHR5cGVkZWYgc3Ry dWN0IEFnZwogCUFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5OwkvKiBiYXNpYyBzdHJhdGVneSwg c2VlIG5vZGVzLmggKi8KIAlBZ2dTcGxpdAlhZ2dzcGxpdDsJCS8qIGFnZy1zcGxpdHRpbmcg bW9kZSwgc2VlIG5vZGVzLmggKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGdy b3VwaW5nIGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVyICpncnBDb2xJZHg7CQkvKiB0aGVpciBp bmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCU9pZAkJICAgKmdycE9wZXJhdG9yczsJ LyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKmdy cENvbGxhdGlvbnM7CisJQXR0ck51bWJlciAqZ3JwQ29sSWR4IHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0 ICovCisJT2lkCQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9p ZAkJICAgKmdycENvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykp OwogCWxvbmcJCW51bUdyb3VwczsJCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgZ3JvdXBzIGlu IGlucHV0ICovCiAJdWludDY0CQl0cmFuc2l0aW9uU3BhY2U7CS8qIGZvciBwYXNzLWJ5LXJl ZiB0cmFuc2l0aW9uIGRhdGEgKi8KIAlCaXRtYXBzZXQgICphZ2dQYXJhbXM7CQkvKiBJRHMg b2YgUGFyYW1zIHVzZWQgaW4gQWdncmVmIGlucHV0cyAqLwpAQCAtOTAxLDEzICs5MDEsMTMg QEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93QWdnCiAJUGxhbgkJcGxhbjsKIAlJbmRleAkJd2lu cmVmOwkJCS8qIElEIHJlZmVyZW5jZWQgYnkgd2luZG93IGZ1bmN0aW9ucyAqLwogCWludAkJ CXBhcnROdW1Db2xzOwkvKiBudW1iZXIgb2YgY29sdW1ucyBpbiBwYXJ0aXRpb24gY2xhdXNl ICovCi0JQXR0ck51bWJlciAqcGFydENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhl IHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqcGFydE9wZXJhdG9yczsJLyogZXF1YWxpdHkg b3BlcmF0b3JzIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLwotCU9pZAkJICAgKnBhcnRDb2xs YXRpb25zOyAvKiBjb2xsYXRpb25zIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLworCUF0dHJO dW1iZXIgKnBhcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUocGFydE51bUNvbHMp KTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAq cGFydE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShwYXJ0TnVtQ29scykpOwkv KiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9yIHBhcnRpdGlvbiBjb2x1bW5zICovCisJT2lkCQkg ICAqcGFydENvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUocGFydE51bUNvbHMp KTsgLyogY29sbGF0aW9ucyBmb3IgcGFydGl0aW9uIGNvbHVtbnMgKi8KIAlpbnQJCQlvcmRO dW1Db2xzOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gb3JkZXJpbmcgY2xhdXNlICovCi0J QXR0ck51bWJlciAqb3JkQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0 IGxpc3QgKi8KLQlPaWQJCSAgICpvcmRPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9y cyBmb3Igb3JkZXJpbmcgY29sdW1ucyAqLwotCU9pZAkJICAgKm9yZENvbGxhdGlvbnM7CS8q IGNvbGxhdGlvbnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KKwlBdHRyTnVtYmVyICpvcmRD b2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwkJLyogdGhlaXIg aW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpvcmRPcGVyYXRvcnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVy YXRvcnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KKwlPaWQJCSAgICpvcmRDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG9yZE51bUNvbHMpKTsJLyogY29sbGF0aW9ucyBm b3Igb3JkZXJpbmcgY29sdW1ucyAqLwogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVf Y2xhdXNlIG9wdGlvbnMsIHNlZSBXaW5kb3dEZWYgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNl dDsJLyogZXhwcmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJ ICAgKmVuZE9mZnNldDsJCS8qIGV4cHJlc3Npb24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55 ICovCkBAIC05MjcsOSArOTI3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgVW5pcXVlCiB7CiAJUGxh bgkJcGxhbjsKIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgdG8gY2hl Y2sgZm9yIHVuaXF1ZW5lc3MgKi8KLQlBdHRyTnVtYmVyICp1bmlxQ29sSWR4OwkJLyogdGhl aXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICp1bmlxT3BlcmF0 b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkg ICAqdW5pcUNvbGxhdGlvbnM7IC8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlz b25zICovCisJQXR0ck51bWJlciAqdW5pcUNvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwor CU9pZAkJICAgKnVuaXFPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29s cykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCisJT2lkCQkg ICAqdW5pcUNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOyAv KiBjb2xsYXRpb25zIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucyAqLwogfSBVbmlxdWU7CiAK IC8qIC0tLS0tLS0tLS0tLQpAQCAtOTY1LDEwICs5NjUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg R2F0aGVyTWVyZ2UKIAlpbnQJCQlyZXNjYW5fcGFyYW07CS8qIElEIG9mIFBhcmFtIHRoYXQg c2lnbmFscyBhIHJlc2Nhbiwgb3IgLTEgKi8KIAkvKiByZW1haW5pbmcgZmllbGRzIGFyZSBq dXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQgKi8KIAlpbnQJCQlu dW1Db2xzOwkJLyogbnVtYmVyIG9mIHNvcnQta2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVy ICpzb3J0Q29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8K LQlPaWQJCSAgICpzb3J0T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0 IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRp b25zICovCi0JYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGly ZWN0aW9ucyAqLworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3Qg Ki8KKwlPaWQJCSAgICpzb3J0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUNvbHMpKTsJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCisJT2lk CQkgICAqY29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkv KiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KKwlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0 aW9ucyAqLwogCUJpdG1hcHNldCAgKmluaXRQYXJhbTsJCS8qIHBhcmFtIGlkJ3Mgb2YgaW5p dHBsYW5zIHdoaWNoIGFyZSByZWZlcnJlZAogCQkJCQkJCQkgKiBhdCBnYXRoZXIgbWVyZ2Ug b3Igb25lIG9mIGl0J3MgY2hpbGQgbm9kZSAqLwogfSBHYXRoZXJNZXJnZTsKQEAgLTEwMDgs OSArMTAwOCw5IEBAIHR5cGVkZWYgc3RydWN0IFNldE9wCiAJU2V0T3BTdHJhdGVneSBzdHJh dGVneTsJCS8qIGhvdyB0byBkbyBpdCwgc2VlIG5vZGVzLmggKi8KIAlpbnQJCQludW1Db2xz OwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgdG8gY2hlY2sgZm9yCiAJCQkJCQkJCSAqIGR1cGxp Y2F0ZS1uZXNzICovCi0JQXR0ck51bWJlciAqZHVwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhl cyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICpkdXBPcGVyYXRvcnM7CS8qIGVx dWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpkdXBDb2xs YXRpb25zOworCUF0dHJOdW1iZXIgKmR1cENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwor CU9pZAkJICAgKmR1cE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xz KSk7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAg ICpkdXBDb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAlB dHRyTnVtYmVyCWZsYWdDb2xJZHg7CQkvKiB3aGVyZSBpcyB0aGUgZmxhZyBjb2x1bW4sIGlm IGFueSAqLwogCWludAkJCWZpcnN0RmxhZzsJCS8qIGZsYWcgdmFsdWUgZm9yIGZpcnN0IGlu cHV0IHJlbGF0aW9uICovCiAJbG9uZwkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJl ciBvZiBncm91cHMgaW4gaW5wdXQgKi8KQEAgLTEwNDYsOSArMTA0Niw5IEBAIHR5cGVkZWYg c3RydWN0IExpbWl0CiAJTm9kZQkgICAqbGltaXRDb3VudDsJCS8qIENPVU5UIHBhcmFtZXRl ciwgb3IgTlVMTCBpZiBub25lICovCiAJTGltaXRPcHRpb24gbGltaXRPcHRpb247CS8qIGxp bWl0IHR5cGUgKi8KIAlpbnQJCQl1bmlxTnVtQ29sczsJLyogbnVtYmVyIG9mIGNvbHVtbnMg dG8gY2hlY2sgZm9yIHNpbWlsYXJpdHkgICovCi0JQXR0ck51bWJlciAqdW5pcUNvbElkeDsJ CS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqdW5p cU9wZXJhdG9yczsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwot CU9pZAkJICAgKnVuaXFDb2xsYXRpb25zOyAvKiBjb2xsYXRpb25zIGZvciBlcXVhbGl0eSBj b21wYXJpc29ucyAqLworCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHggcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUodW5pcU51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdl dCBsaXN0ICovCisJT2lkCQkgICAqdW5pcU9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZSh1bmlxTnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3 aXRoICovCisJT2lkCQkgICAqdW5pcUNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3Np emUodW5pcU51bUNvbHMpKTsgLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFyaXNv bnMgKi8KIH0gTGltaXQ7CiAKIApAQCAtMTIwNyw5ICsxMjA3LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUGFydGl0aW9uZWRSZWxQcnVuZUluZm8KIAlCaXRtYXBzZXQgICpwcmVzZW50X3BhcnRz OwkvKiBJbmRleGVzIG9mIGFsbCBwYXJ0aXRpb25zIHdoaWNoIHN1YnBsYW5zIG9yCiAJCQkJ CQkJCSAqIHN1YnBhcnRzIGFyZSBwcmVzZW50IGZvciAqLwogCWludAkJCW5wYXJ0czsJCQkv KiBMZW5ndGggb2YgdGhlIGZvbGxvd2luZyBhcnJheXM6ICovCi0JaW50CQkgICAqc3VicGxh bl9tYXA7CS8qIHN1YnBsYW4gaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAqLwot CWludAkJICAgKnN1YnBhcnRfbWFwOwkvKiBzdWJwYXJ0IGluZGV4IGJ5IHBhcnRpdGlvbiBp bmRleCwgb3IgLTEgKi8KLQlPaWQJCSAgICpyZWxpZF9tYXA7CQkvKiByZWxhdGlvbiBPSUQg YnkgcGFydGl0aW9uIGluZGV4LCBvciAwICovCisJaW50CQkgICAqc3VicGxhbl9tYXAgcGdf bm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRzKSk7CS8qIHN1YnBsYW4gaW5kZXggYnkgcGFy dGl0aW9uIGluZGV4LCBvciAtMSAqLworCWludAkJICAgKnN1YnBhcnRfbWFwIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwkvKiBzdWJwYXJ0IGluZGV4IGJ5IHBhcnRpdGlv biBpbmRleCwgb3IgLTEgKi8KKwlPaWQJCSAgICpyZWxpZF9tYXAgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnBhcnRzKSk7CQkvKiByZWxhdGlvbiBPSUQgYnkgcGFydGl0aW9uIGluZGV4 LCBvciAwICovCiAKIAkvKgogCSAqIGluaXRpYWxfcHJ1bmluZ19zdGVwcyBzaG93cyBob3cg dG8gcHJ1bmUgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgKGkuZS4sCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1u b2Rlcy5oCmluZGV4IGRhYjVjNGZmNWQuLmViMDAzYTdiZDcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1u b2Rlcy5oCkBAIC02Myw3ICs2Myw5IEBAIHR5cGVkZWYgZW51bSBPbkNvbW1pdEFjdGlvbgog dHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIKIHsKIAlOb2RlVGFnCQl0eXBlOwotCWNoYXIJICAg KmNhdGFsb2duYW1lOwkvKiB0aGUgY2F0YWxvZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEwg Ki8KKwkvKiB0aGUgY2F0YWxvZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEw7IGlnbm9yZWQg Zm9yIHJlYWQvd3JpdGUsIHNpbmNlIGl0CisJICogaXMgcHJlc2VudGx5IG5vdCBzZW1hbnRp Y2FsbHkgbWVhbmluZ2Z1bCAqLworCWNoYXIJICAgKmNhdGFsb2duYW1lIHBnX25vZGVfYXR0 cihyZWFkd3JpdGVfaWdub3JlKTsKIAljaGFyCSAgICpzY2hlbWFuYW1lOwkJLyogdGhlIHNj aGVtYSBuYW1lLCBvciBOVUxMICovCiAJY2hhcgkgICAqcmVsbmFtZTsJCS8qIHRoZSByZWxh dGlvbi9zZXF1ZW5jZSBuYW1lICovCiAJYm9vbAkJaW5oOwkJCS8qIGV4cGFuZCByZWwgYnkg aW5oZXJpdGFuY2U/IHJlY3Vyc2l2ZWx5IGFjdApAQCAtMTk2LDggKzE5OCwxNSBAQCB0eXBl ZGVmIHN0cnVjdCBWYXIKIAlJbmRleAkJdmFybGV2ZWxzdXA7CS8qIGZvciBzdWJxdWVyeSB2 YXJpYWJsZXMgcmVmZXJlbmNpbmcgb3V0ZXIKIAkJCQkJCQkJICogcmVsYXRpb25zOyAwIGlu IGEgbm9ybWFsIHZhciwgPjAgbWVhbnMgTgogCQkJCQkJCQkgKiBsZXZlbHMgdXAgKi8KLQlJ bmRleAkJdmFybm9zeW47CQkvKiBzeW50YWN0aWMgcmVsYXRpb24gaW5kZXggKDAgaWYgdW5r bm93bikgKi8KLQlBdHRyTnVtYmVyCXZhcmF0dG5vc3luOwkvKiBzeW50YWN0aWMgYXR0cmli dXRlIG51bWJlciAqLworCisJLyoKKwkgKiB2YXJub3N5bi92YXJhdHRub3N5biBhcmUgaWdu b3JlZCBmb3IgZXF1YWxpdHksIGJlY2F1c2UgVmFycyB3aXRoCisJICogZGlmZmVyZW50IHN5 bnRhY3RpYyBpZGVudGlmaWVycyBhcmUgc2VtYW50aWNhbGx5IHRoZSBzYW1lIGFzIGxvbmcg YXMKKwkgKiB0aGVpciB2YXJuby92YXJhdHRubyBtYXRjaC4KKwkgKi8KKwlJbmRleAkJdmFy bm9zeW4gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkvKiBzeW50YWN0aWMgcmVsYXRp b24gaW5kZXggKDAgaWYgdW5rbm93bikgKi8KKwlBdHRyTnVtYmVyCXZhcmF0dG5vc3luIHBn X25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkvKiBzeW50YWN0aWMgYXR0cmlidXRlIG51bWJl ciAqLworCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLwogfSBWYXI7CiAKQEAgLTMyNCw3ICszMzMsNyBAQCB0eXBlZGVmIHN0cnVj dCBBZ2dyZWYKIAlPaWQJCQlhZ2d0eXBlOwkJLyogdHlwZSBPaWQgb2YgcmVzdWx0IG9mIHRo ZSBhZ2dyZWdhdGUgKi8KIAlPaWQJCQlhZ2djb2xsaWQ7CQkvKiBPSUQgb2YgY29sbGF0aW9u IG9mIHJlc3VsdCAqLwogCU9pZAkJCWlucHV0Y29sbGlkOwkvKiBPSUQgb2YgY29sbGF0aW9u IHRoYXQgZnVuY3Rpb24gc2hvdWxkIHVzZSAqLwotCU9pZAkJCWFnZ3RyYW5zdHlwZTsJLyog dHlwZSBPaWQgb2YgYWdncmVnYXRlJ3MgdHJhbnNpdGlvbiB2YWx1ZSAqLworCU9pZAkJCWFn Z3RyYW5zdHlwZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogdHlwZSBPaWQgb2Yg YWdncmVnYXRlJ3MgdHJhbnNpdGlvbiB2YWx1ZTsgaWdub3JlZCBmb3IgZXF1YWwgc2luY2Ug aXQgbWlnaHQgbm90IGJlIHNldCB5ZXQgKi8KIAlMaXN0CSAgICphZ2dhcmd0eXBlczsJLyog dHlwZSBPaWRzIG9mIGRpcmVjdCBhbmQgYWdncmVnYXRlZCBhcmdzICovCiAJTGlzdAkgICAq YWdnZGlyZWN0YXJnczsJLyogZGlyZWN0IGFyZ3VtZW50cywgaWYgYW4gb3JkZXJlZC1zZXQg YWdnICovCiAJTGlzdAkgICAqYXJnczsJCQkvKiBhZ2dyZWdhdGVkIGFyZ3VtZW50cyBhbmQg c29ydCBleHByZXNzaW9ucyAqLwpAQCAtMzcxLDggKzM4MCw4IEBAIHR5cGVkZWYgc3RydWN0 IEdyb3VwaW5nRnVuYwogCUV4cHIJCXhwcjsKIAlMaXN0CSAgICphcmdzOwkJCS8qIGFyZ3Vt ZW50cywgbm90IGV2YWx1YXRlZCBidXQga2VwdCBmb3IKIAkJCQkJCQkJICogYmVuZWZpdCBv ZiBFWFBMQUlOIGV0Yy4gKi8KLQlMaXN0CSAgICpyZWZzOwkJCS8qIHJlc3NvcnRncm91cHJl ZnMgb2YgYXJndW1lbnRzICovCi0JTGlzdAkgICAqY29sczsJCQkvKiBhY3R1YWwgY29sdW1u IHBvc2l0aW9ucyBzZXQgYnkgcGxhbm5lciAqLworCUxpc3QJICAgKnJlZnMgcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7CQkJLyogcmVzc29ydGdyb3VwcmVmcyBvZiBhcmd1bWVudHMg Ki8KKwlMaXN0CSAgICpjb2xzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJCS8qIGFj dHVhbCBjb2x1bW4gcG9zaXRpb25zIHNldCBieSBwbGFubmVyICovCiAJSW5kZXgJCWFnZ2xl dmVsc3VwOwkvKiBzYW1lIGFzIEFnZ3JlZi5hZ2dsZXZlbHN1cCAqLwogCWludAkJCWxvY2F0 aW9uOwkJLyogdG9rZW4gbG9jYXRpb24gKi8KIH0gR3JvdXBpbmdGdW5jOwpAQCAtNTQwLDcg KzU0OSw3IEBAIHR5cGVkZWYgc3RydWN0IE9wRXhwcgogewogCUV4cHIJCXhwcjsKIAlPaWQJ CQlvcG5vOwkJCS8qIFBHX09QRVJBVE9SIE9JRCBvZiB0aGUgb3BlcmF0b3IgKi8KLQlPaWQJ CQlvcGZ1bmNpZDsJCS8qIFBHX1BST0MgT0lEIG9mIHVuZGVybHlpbmcgZnVuY3Rpb24gKi8K KwlPaWQJCQlvcGZ1bmNpZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlX2lmX3plcm8pOwkJ LyogUEdfUFJPQyBPSUQgb2YgdW5kZXJseWluZyBmdW5jdGlvbiAqLwogCU9pZAkJCW9wcmVz dWx0dHlwZTsJLyogUEdfVFlQRSBPSUQgb2YgcmVzdWx0IHZhbHVlICovCiAJYm9vbAkJb3By ZXRzZXQ7CQkvKiB0cnVlIGlmIG9wZXJhdG9yIHJldHVybnMgc2V0ICovCiAJT2lkCQkJb3Bj b2xsaWQ7CQkvKiBPSUQgb2YgY29sbGF0aW9uIG9mIHJlc3VsdCAqLwpAQCAtNTkyLDE0ICs2 MDEsMTggQEAgdHlwZWRlZiBPcEV4cHIgTnVsbElmRXhwcjsKICAqIGNvcnJlc3BvbmRpbmcg ZnVuY3Rpb24gYW5kIHdvbid0IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbi4gIEZvcgogICog bm9uLWhhc2h0YWJsZSBiYXNlZCBOT1QgSU5zLCBuZWdmdW5jaWQgd2lsbCBiZSBzZXQgdG8g SW52YWxpZE9pZC4gIFNlZQogICogY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wKCkuCisg KgorICogU2ltaWxhciB0byBPcEV4cHIsIG9wZnVuY2lkLCBoYXNoZnVuY2lkLCBhbmQgbmVn ZnVuY2lkIGFyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGZpbGxlZCBpbiByaWdodCBhd2F5LCBz byB3aWxsIGJlIGlnbm9yZWQgZm9yIGVxdWFsaXR5IGlmIHRoZXkgYXJlIG5vdCBzZXQKKyAq IHlldC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgU2NhbGFyQXJyYXlPcEV4cHIKIHsKIAlFeHBy CQl4cHI7CiAJT2lkCQkJb3BubzsJCQkvKiBQR19PUEVSQVRPUiBPSUQgb2YgdGhlIG9wZXJh dG9yICovCi0JT2lkCQkJb3BmdW5jaWQ7CQkvKiBQR19QUk9DIE9JRCBvZiBjb21wYXJpc29u IGZ1bmN0aW9uICovCi0JT2lkCQkJaGFzaGZ1bmNpZDsJCS8qIFBHX1BST0MgT0lEIG9mIGhh c2ggZnVuYyBvciBJbnZhbGlkT2lkICovCi0JT2lkCQkJbmVnZnVuY2lkOwkJLyogUEdfUFJP QyBPSUQgb2YgbmVnYXRvciBvZiBvcGZ1bmNpZCBmdW5jdGlvbgorCU9pZAkJCW9wZnVuY2lk IHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVfaWZfemVybyk7CQkvKiBQR19QUk9DIE9JRCBv ZiBjb21wYXJpc29uIGZ1bmN0aW9uICovCisJT2lkCQkJaGFzaGZ1bmNpZCBwZ19ub2RlX2F0 dHIoZXF1YWxfaWdub3JlX2lmX3plcm8pOwkJLyogUEdfUFJPQyBPSUQgb2YgaGFzaCBmdW5j IG9yIEludmFsaWRPaWQgKi8KKwlPaWQJCQluZWdmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFs X2lnbm9yZV9pZl96ZXJvKTsJCS8qIFBHX1BST0MgT0lEIG9mIG5lZ2F0b3Igb2Ygb3BmdW5j aWQgZnVuY3Rpb24KIAkJCQkJCQkJICogb3IgSW52YWxpZE9pZC4gIFNlZSBhYm92ZSAqLwog CWJvb2wJCXVzZU9yOwkJCS8qIHRydWUgZm9yIEFOWSwgZmFsc2UgZm9yIEFMTCAqLwogCU9p ZAkJCWlucHV0Y29sbGlkOwkvKiBPSUQgb2YgY29sbGF0aW9uIHRoYXQgb3BlcmF0b3Igc2hv dWxkIHVzZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaAppbmRleCA2ZGExYjIyMGNkLi40NTlhNjRhOTkyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9yZWwuaApAQCAtMjczLDkgKzI3Myw5IEBAIHR5cGVkZWYgc3RydWN0IEZvcmVpZ25LZXlD YWNoZUluZm8KIAlPaWQJCQljb25mcmVsaWQ7CQkvKiByZWxhdGlvbiByZWZlcmVuY2VkIGJ5 IHRoZSBmb3JlaWduIGtleSAqLwogCWludAkJCW5rZXlzOwkJCS8qIG51bWJlciBvZiBjb2x1 bW5zIGluIHRoZSBmb3JlaWduIGtleSAqLwogCS8qIHRoZXNlIGFycmF5cyBlYWNoIGhhdmUg bmtleXMgdmFsaWQgZW50cmllczogKi8KLQlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhf S0VZU107IC8qIGNvbHMgaW4gcmVmZXJlbmNpbmcgdGFibGUgKi8KLQlBdHRyTnVtYmVyCWNv bmZrZXlbSU5ERVhfTUFYX0tFWVNdOwkvKiBjb2xzIGluIHJlZmVyZW5jZWQgdGFibGUgKi8K LQlPaWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdOwkvKiBQSyA9IEZLIG9wZXJhdG9y IE9JRHMgKi8KKwlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobmtleXMpKTsgLyogY29scyBpbiByZWZlcmVuY2luZyB0YWJsZSAq LworCUF0dHJOdW1iZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobmtleXMpKTsJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCisJT2lk CQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu a2V5cykpOwkvKiBQSyA9IEZLIG9wZXJhdG9yIE9JRHMgKi8KIH0gRm9yZWlnbktleUNhY2hl SW5mbzsKIAogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSBiL3Ny Yy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCmluZGV4IGU2ZjIwNjc5ZGMuLjg3ZDZjMGJlYzEg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCisrKyBiL3NyYy90b29s cy9tc3ZjL1NvbHV0aW9uLnBtCkBAIC04MzMsNiArODMzLDUyIEBAIEVPRgogCQljbG9zZSgk Y2hzKTsKIAl9CiAKKwlpZiAoSXNOZXdlcignc3JjL2JhY2tlbmQvbm9kZXMvbm9kZS1zdXBw b3J0LXN0YW1wJywKKwkJJ3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwn KSkKKwl7CisJCSMgWFhYIGR1cGxpY2F0ZXMgc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUK KworCQlteSBAbm9kZV9oZWFkZXJzID0gcXcoCisJCQlub2Rlcy9ub2Rlcy5oCisJCQlub2Rl cy9leGVjbm9kZXMuaAorCQkJbm9kZXMvcGxhbm5vZGVzLmgKKwkJCW5vZGVzL3ByaW1ub2Rl cy5oCisJCQlub2Rlcy9wYXRobm9kZXMuaAorCQkJbm9kZXMvZXh0ZW5zaWJsZS5oCisJCQlu b2Rlcy9wYXJzZW5vZGVzLmgKKwkJCW5vZGVzL3JlcGxub2Rlcy5oCisJCQlub2Rlcy92YWx1 ZS5oCisJCQljb21tYW5kcy90cmlnZ2VyLmgKKwkJCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aAorCQkJZm9yZWlnbi9mZHdhcGkuaAorCQkJYWNjZXNzL2FtYXBpLmgKKwkJCWFjY2Vzcy90 YWJsZWFtLmgKKwkJCWFjY2Vzcy90c21hcGkuaAorCQkJdXRpbHMvcmVsLmgKKwkJCW5vZGVz L3N1cHBvcnRub2Rlcy5oCisJCQlleGVjdXRvci90dXB0YWJsZS5oCisJCQlub2Rlcy9sb2Nr b3B0aW9ucy5oCisJCQlhY2Nlc3Mvc2Rpci5oCisJCSk7CisKKwkJY2hkaXIoJ3NyYy9iYWNr ZW5kL25vZGVzJyk7CisKKwkJbXkgQG5vZGVfZmlsZXMgPSBtYXAgeyAiLi4vLi4vLi4vc3Jj L2luY2x1ZGUvJF8iIH0gQG5vZGVfaGVhZGVyczsKKworCQlzeXN0ZW0oInBlcmwgZ2VuX25v ZGVfc3VwcG9ydC5wbCBAbm9kZV9maWxlcyIpOworCQlvcGVuKG15ICRmLCAnPicsICdub2Rl LXN1cHBvcnQtc3RhbXAnKSB8fCBjb25mZXNzICJDb3VsZCBub3QgdG91Y2ggbm9kZS1zdXBw b3J0LXN0YW1wIjsKKwkJY2xvc2UoJGYpOworCQljaGRpcignLi4vLi4vLi4nKTsKKwl9CisK KwlpZiAoSXNOZXdlcigKKwkJCSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJywKKwkJ CSdzcmMvYmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJykpCisJeworCQljb3B5RmlsZSgnc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZXRhZ3MuaCcsCisJCQknc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXRhZ3MuaCcpOworCX0KKwogCW9wZW4obXkgJG8sICc+JywgImRvYy9zcmMvc2dtbC92ZXJz aW9uLnNnbWwiKQogCSAgfHwgY3JvYWsgIkNvdWxkIG5vdCB3cml0ZSB0byB2ZXJzaW9uLnNn bWxcbiI7CiAJcHJpbnQgJG8gPDxFT0Y7CgpiYXNlLWNvbW1pdDogMTkyNTJlOGVjOTM4YmYw Nzg5N2MxNTE5ZjM2N2QwNDY3YTM5MjQyYwotLSAKMi4zNS4xCgo= --------------0BmNTOH3072Wv110GeP4VtJT--