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 1o8L7M-00047b-FQ for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Jul 2022 12:23:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o8L7J-0001AP-MS for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Jul 2022 12:23:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8L7I-0001AF-Iz for pgsql-hackers@lists.postgresql.org; Mon, 04 Jul 2022 12:23:53 +0000 Received: from out5-smtp.messagingengine.com ([66.111.4.29]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8L7A-0006Fx-Ew for pgsql-hackers@postgresql.org; Mon, 04 Jul 2022 12:23:51 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 5A3015C00F3; Mon, 4 Jul 2022 08:23:40 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Mon, 04 Jul 2022 08:23:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id: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; t=1656937420; x=1657023820; bh=jTMfzWUg1dfdpXSAFRrla/k7znMN mbJ+6a42x8rm0hE=; b=r/SD1Jb7+ddXvvaWlx+B2Oxn7YlBFUNq3RQHuIk6b+1r HnwFhwMU+2+m8mORkfw1nViBuFC3kxAFF1cbJMIHalvknmu0VxQz+kMgU4I3A0Iv v0UuysQarF+mJ/Bsrlarim+ZQ1xIXNVcMDGpoFgkyGZI8LE291hpKhnZ8I8BE4U6 lbu1uf8QjIa16Onp9Bcsq589qn2CZlhlbd0zatgQPX66yUTm59IPpI3SEaEgaZOI Kaf3kxREqAZHC7FYsxvW4WOSj8S0eJ3kjj8ykHPAU0w4Qwj4B+xNnB94qUAKohmz RwuD9wjUkOw0l3h0FslOU5FrRo3b8wsBeatPEsavjA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrudehledgheduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffvvehfhfgjsehmtd erredtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghr rdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrg htthgvrhhnpeeutdekheeuhedtvdfgffehleetfefhieefudeitdffiedtledujefhjedu feffffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hpvghtvghrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 4 Jul 2022 08:23:38 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------mCTvmxfwuIqoAsxDNkyaHd1p" Message-ID: <57df9f30-d2cf-9126-28d4-ae40a2e733a9@enterprisedb.com> Date: Mon, 4 Jul 2022 14:23:36 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: automatically generating node support functions Content-Language: en-US To: Tom Lane Cc: David Rowley , 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> <968928d9-a526-a1b5-dc36-0355632a843e@enterprisedb.com> <1294462.1656875649@sss.pgh.pa.us> From: Peter Eisentraut In-Reply-To: <1294462.1656875649@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. --------------mCTvmxfwuIqoAsxDNkyaHd1p Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 03.07.22 21:14, Tom Lane wrote: > Peter Eisentraut writes: >> Here is a patch that reformats the relevant (and a few more) comments >> that way. This has been run through pgindent, so the formatting should >> be stable. > > Now that that's been pushed, the main patch is of course quite broken. > Are you working on a rebase? attached > * AFAICT, the infrastructure for removing the generated files at > "make *clean" is incomplete. I have fixed all the makefiles per your suggestions. > and something similar to this for the "clean" rule: > # fmgroids.h, fmgrprotos.h, fmgrtab.c, fmgr-stamp, and errcodes.h are in the > # distribution tarball, so they are not cleaned here. Except this one, since there is no clean rule. I think seeing that files are listed under a maintainer-clean target conveys that same message. > Also, I share David's upthread allergy to the option names "path_hackN" > and to documenting those only inside the conversion script. I'll look into that again. > BTW, I think this: "Unknown attributes are ignored" is a seriously > bad idea; it will allow typos to escape detection. good point --------------mCTvmxfwuIqoAsxDNkyaHd1p Content-Type: text/plain; charset=UTF-8; name="v6-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v6-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSAwYWQ4NjE4MzY2MmI2NjM3YzllYzlhMjkzNzRmZWNiNGQxMTIwMmUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCA0IEp1bCAyMDIyIDE0OjE3OjAyICswMjAwClN1YmplY3Q6 IFtQQVRDSCB2Nl0gQXV0b21hdGljYWxseSBnZW5lcmF0ZSBub2RlIHN1cHBvcnQgZnVuY3Rp b25zCgpBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgbm9kZSBz dXBwb3J0IGZ1bmN0aW9ucwooY29weSwgZXF1YWwsIG91dCwgYW5kIHJlYWQsIGFzIHdlbGwg YXMgdGhlIG5vZGUgdGFncyBlbnVtKSBmcm9tIHRoZQpzdHJ1Y3QgZGVmaW5pdGlvbnMuCgpG b3IgZWFjaCBvZiB0aGUgZm91ciBub2RlIHN1cHBvcnQgZmlsZXMsIGl0IGNyZWF0ZXMgdHdv IGluY2x1ZGUgZmlsZXMsCmUuZy4sIGNvcHlmdW5jcy5mdW5jcy5jIGFuZCBjb3B5ZnVuY3Mu c3dpdGNoLmMsIHRvIGluY2x1ZGUgaW4gdGhlIG1haW4KZmlsZS4gIEFsbCB0aGUgc2NhZmZv bGRpbmcgb2YgdGhlIG1haW4gZmlsZSBzdGF5cyBpbiBwbGFjZS4KClRPRE86IEluIHRoaXMg cGF0Y2gsIEkgaGF2ZSBvbmx5IGlmZGVmJ2VkIG91dCB0aGUgY29kZSB0byBjb3VsZCBiZQpy ZW1vdmVkLCBtYWlubHkgc28gdGhhdCBpdCB3b24ndCBjb25zdGFudGx5IGhhdmUgbWVyZ2Ug Y29uZmxpY3RzLgpFdmVudHVhbGx5LCB0aGF0IHNob3VsZCBhbGwgYmUgY2hhbmdlZCB0byBk ZWxldGUgdGhlIGNvZGUuICBBbGwgdGhlCmNvZGUgY29tbWVudHMgdGhhdCBhcmUgd29ydGgg a2VlcGluZyBmcm9tIHRob3NlIHNlY3Rpb25zIGhhdmUgYWxyZWFkeQpiZWVuIG1vdmVkIHRv IHRoZSBoZWFkZXIgZmlsZXMgd2hlcmUgdGhlIHN0cnVjdHMgYXJlIGRlZmluZWQuCgpJIGhh dmUgdHJpZWQgdG8gbW9zdGx5IG1ha2UgdGhlIGNvdmVyYWdlIG9mIHRoZSBvdXRwdXQgbWF0 Y2ggd2hhdCBpcwpjdXJyZW50bHkgdGhlcmUuICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIG5v dyBkbyBvdXQvcmVhZCBjb3ZlcmFnZSBvZgp1dGlsaXR5IHN0YXRlbWVudCBub2RlcywgYnV0 IEkgaGF2ZSBtYW51YWxseSBleGNsdWRlZCB0aG9zZSBmb3Igbm93LgpUaGUgcmVhc29uIGlz IG1haW5seSB0aGF0IGl0J3MgZWFzaWVyIHRvIGRpZmYgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIs CmFuZCBhZGRpbmcgYSBidW5jaCBvZiBzdHVmZiBsaWtlIHRoaXMgbWlnaHQgcmVxdWlyZSBh IHNlcGFyYXRlCmFuYWx5c2lzIGFuZCByZXZpZXcuCgpTdWJ0eXBpbmcgKFRpZFNjYW4gLT4g U2NhbikgaXMgc3VwcG9ydGVkLgoKRm9yIHRoZSBoYXJkIGNhc2VzLCB5b3UgY2FuIGp1c3Qg d3JpdGUgYSBtYW51YWwgZnVuY3Rpb24gYW5kIGV4Y2x1ZGUKZ2VuZXJhdGluZyBvbmUuICBG b3IgdGhlIG5vdCBzbyBoYXJkIGNhc2VzLCB0aGVyZSBpcyBhIHdheSBvZgphbm5vdGF0aW5n IHN0cnVjdCBmaWVsZHMgdG8gZ2V0IHNwZWNpYWwgYmVoYXZpb3JzLiAgRm9yIGV4YW1wbGUs CnBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpIGhhcyB0aGUgZmllbGQgaWdub3JlZCBpbiBl cXVhbCBmdW5jdGlvbnMuCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL2ZsYXQvYzEwOTc1OTAtYTZhNC00ODZhLTY0YjEtZTFmOWNjMDUzM2Nl JTQwZW50ZXJwcmlzZWRiLmNvbQotLS0KIHNyYy9iYWNrZW5kL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUgICAgICAg ICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUgICAgICAgICAgICB8ICA1 NCArKwogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICB8ICAxOSArLQog c3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICB8ICAyMiArLQogc3JjL2Jh Y2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCB8IDcyOSArKysrKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICB8ICAz NCArLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICB8ICAyMyArLQog c3JjL2luY2x1ZGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9ub2Rlcy8uZ2l0aWdub3JlICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25v ZGVzL25vZGVzLmggICAgICAgICAgICAgfCAgMjcgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICB8IDE3NSArKysrLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aCAgICAgICAgIHwgIDkwICsrLS0KIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAg ICAgICAgfCAgMzQgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAg fCAgIDYgKy0KIHNyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtICAgICAgICAgICAgfCAgNDYg KysKIDE3IGZpbGVzIGNoYW5nZWQsIDExMjQgaW5zZXJ0aW9ucygrKSwgMTU2IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0 LnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvTWFrZWZp bGUKaW5kZXggNGEwMjAwNjc4OC4uOTUzYzgwZGI1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvTWFrZWZpbGUKQEAgLTE0MywxMSArMTQz LDE1IEBAIHN0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy5oOiBzdG9yYWdlL2xtZ3IvZ2VuZXJh dGUtbHdsb2NrbmFtZXMucGwgc3RvcmFnZS9sbWdyL2x3CiBzdWJtYWtlLWNhdGFsb2ctaGVh ZGVyczoKIAkkKE1BS0UpIC1DIGNhdGFsb2cgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1z eW1saW5rcwogCisjIHJ1biB0aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5n IHRvIGtub3cgaXRzIGRlcGVuZGVuY2llcyBoZXJlOgorc3VibWFrZS1ub2Rlcy1oZWFkZXJz OgorCSQoTUFLRSkgLUMgbm9kZXMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5r cworCiAjIHJ1biB0aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtu b3cgaXRzIGRlcGVuZGVuY2llcyBoZXJlOgogc3VibWFrZS11dGlscy1oZWFkZXJzOgogCSQo TUFLRSkgLUMgdXRpbHMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCi0u UEhPTlk6IHN1Ym1ha2UtY2F0YWxvZy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycwor LlBIT05ZOiBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMg c3VibWFrZS11dGlscy1oZWFkZXJzCiAKICMgTWFrZSBzeW1saW5rcyBmb3IgdGhlc2UgaGVh ZGVycyBpbiB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIFRoYXQgd2F5CiAjIHdlIGNhbiBjdXQg ZG93biBvbiB0aGUgLUkgb3B0aW9ucy4gQWxzbywgYSBzeW1saW5rIGlzIGF1dG9tYXRpY2Fs bHkKQEAgLTE2Miw3ICsxNjYsNyBAQCBzdWJtYWtlLXV0aWxzLWhlYWRlcnM6CiAKIC5QSE9O WTogZ2VuZXJhdGVkLWhlYWRlcnMKIAotZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1aWxk ZGlyKS9zcmMvaW5jbHVkZS9wYXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMvaW5j bHVkZS9zdG9yYWdlL2x3bG9ja25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3Vi bWFrZS11dGlscy1oZWFkZXJzCitnZW5lcmF0ZWQtaGVhZGVyczogJCh0b3BfYnVpbGRkaXIp L3NyYy9pbmNsdWRlL3BhcnNlci9ncmFtLmggJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbHdsb2NrbmFtZXMuaCBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtl LW5vZGVzLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFkZXJzCiAKICQodG9wX2J1aWxkZGly KS9zcmMvaW5jbHVkZS9wYXJzZXIvZ3JhbS5oOiBwYXJzZXIvZ3JhbS5oCiAJcHJlcmVxZGly PWBjZCAnJChkaXIgJDwpJyA+L2Rldi9udWxsICYmIHB3ZGAgJiYgXApAQCAtMTg1LDYgKzE4 OSw3IEBAIGRpc3RwcmVwOgogCSQoTUFLRSkgLUMgcGFyc2VyCWdyYW0uYyBncmFtLmggc2Nh bi5jCiAJJChNQUtFKSAtQyBib290c3RyYXAJYm9vdHBhcnNlLmMgYm9vdHNjYW5uZXIuYwog CSQoTUFLRSkgLUMgY2F0YWxvZwlkaXN0cHJlcAorCSQoTUFLRSkgLUMgbm9kZXMJZGlzdHBy ZXAKIAkkKE1BS0UpIC1DIHJlcGxpY2F0aW9uCXJlcGxfZ3JhbS5jIHJlcGxfc2Nhbm5lci5j IHN5bmNyZXBfZ3JhbS5jIHN5bmNyZXBfc2Nhbm5lci5jCiAJJChNQUtFKSAtQyBzdG9yYWdl L2xtZ3IJbHdsb2NrbmFtZXMuaCBsd2xvY2tuYW1lcy5jCiAJJChNQUtFKSAtQyB1dGlscwlk aXN0cHJlcApAQCAtMjk3LDYgKzMwMiw3IEBAIGRpc3RjbGVhbjogY2xlYW4KIAogbWFpbnRh aW5lci1jbGVhbjogZGlzdGNsZWFuCiAJJChNQUtFKSAtQyBjYXRhbG9nICRACisJJChNQUtF KSAtQyBub2RlcyAkQAogCSQoTUFLRSkgLUMgdXRpbHMgJEAKIAlybSAtZiBib290c3RyYXAv Ym9vdHBhcnNlLmMgXAogCSAgICAgIGJvb3RzdHJhcC9ib290c2Nhbm5lci5jIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUgYi9zcmMvYmFja2VuZC9ub2Rl cy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBj MTRiNTY5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdu b3JlCkBAIC0wLDAgKzEsNCBAQAorL25vZGUtc3VwcG9ydC1zdGFtcAorL25vZGV0YWdzLmgK Ky8qZnVuY3MuZnVuY3MuYworLypmdW5jcy5zd2l0Y2guYwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQppbmRl eCA1ZDJiMTJhOTkzLi4yMGMxZWMwOGU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rl cy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQpAQCAtMzAsMyAr MzAsNTcgQEAgT0JKUyA9IFwKIAl2YWx1ZS5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9z cmMvYmFja2VuZC9jb21tb24ubWsKKworbm9kZV9oZWFkZXJzID0gXAorCW5vZGVzL25vZGVz LmggXAorCW5vZGVzL2V4ZWNub2Rlcy5oIFwKKwlub2Rlcy9wbGFubm9kZXMuaCBcCisJbm9k ZXMvcHJpbW5vZGVzLmggXAorCW5vZGVzL3BhdGhub2Rlcy5oIFwKKwlub2Rlcy9leHRlbnNp YmxlLmggXAorCW5vZGVzL3BhcnNlbm9kZXMuaCBcCisJbm9kZXMvcmVwbG5vZGVzLmggXAor CW5vZGVzL3ZhbHVlLmggXAorCWNvbW1hbmRzL3RyaWdnZXIuaCBcCisJY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oIFwKKwlmb3JlaWduL2Zkd2FwaS5oIFwKKwlhY2Nlc3MvYW1hcGkuaCBc CisJYWNjZXNzL3RhYmxlYW0uaCBcCisJYWNjZXNzL3RzbWFwaS5oIFwKKwl1dGlscy9yZWwu aCBcCisJbm9kZXMvc3VwcG9ydG5vZGVzLmggXAorCWV4ZWN1dG9yL3R1cHRhYmxlLmggXAor CW5vZGVzL2xvY2tvcHRpb25zLmggXAorCWFjY2Vzcy9zZGlyLmgKKworIyBzZWUgYWxzbyBj YXRhbG9nL01ha2VmaWxlIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGVzZSBtYWtlIHJ1bGVz CisKK2FsbDogZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcworCitkaXN0cHJl cDogbm9kZS1zdXBwb3J0LXN0YW1wCisKKy5QSE9OWTogZ2VuZXJhdGVkLWhlYWRlci1zeW1s aW5rcworCitnZW5lcmF0ZWQtaGVhZGVyLXN5bWxpbmtzOiAkKHRvcF9idWlsZGRpcikvc3Jj L2luY2x1ZGUvbm9kZXMvaGVhZGVyLXN0YW1wCisKKyMgbm9kZS1zdXBwb3J0LXN0YW1wIHJl Y29yZHMgdGhlIGxhc3QgdGltZSB3ZSByYW4gZ2VuX25vZGVfc3VwcG9ydC5wbC4KKyMgV2Ug ZG9uJ3QgcmVseSBvbiB0aGUgdGltZXN0YW1wcyBvZiB0aGUgaW5kaXZpZHVhbCBvdXRwdXQg ZmlsZXMsCisjIGJlY2F1c2UgdGhlIFBlcmwgc2NyaXB0IHdvbid0IHVwZGF0ZSB0aGVtIGlm IHRoZXkgZGlkbid0IGNoYW5nZSAodG8KKyMgYXZvaWQgdW5uZWNlc3NhcnkgcmVjb21waWxl cykuCitub2RlLXN1cHBvcnQtc3RhbXA6IGdlbl9ub2RlX3N1cHBvcnQucGwgJChhZGRwcmVm aXggJCh0b3Bfc3JjZGlyKS9zcmMvaW5jbHVkZS8sJChub2RlX2hlYWRlcnMpKQorCSQoUEVS TCkgJF4KKwl0b3VjaCAkQAorCisjIFRoZXNlIGdlbmVyYXRlZCBoZWFkZXJzIG11c3QgYmUg c3ltbGlua2VkIGludG8gYnVpbGRkaXIvc3JjL2luY2x1ZGUvLAorIyB1c2luZyBhYnNvbHV0 ZSBsaW5rcyBmb3IgdGhlIHJlYXNvbnMgZXhwbGFpbmVkIGluIHNyYy9iYWNrZW5kL01ha2Vm aWxlLgorIyBXZSB1c2UgaGVhZGVyLXN0YW1wIHRvIHJlY29yZCB0aGF0IHdlJ3ZlIGRvbmUg dGhpcyBiZWNhdXNlIHRoZSBzeW1saW5rcworIyB0aGVtc2VsdmVzIG1heSBhcHBlYXIgb2xk ZXIgdGhhbiBub2RlLXN1cHBvcnQtc3RhbXAuCiskKHRvcF9idWlsZGRpcikvc3JjL2luY2x1 ZGUvbm9kZXMvaGVhZGVyLXN0YW1wOiBub2RlLXN1cHBvcnQtc3RhbXAKKwlwcmVyZXFkaXI9 YGNkICckKGRpciAkPCknID4vZGV2L251bGwgJiYgcHdkYCAmJiBcCisJY2QgJyQoZGlyICRA KScgJiYgZm9yIGZpbGUgaW4gbm9kZXRhZ3MuaDsgZG8gXAorCSAgcm0gLWYgJCRmaWxlICYm ICQoTE5fUykgIiQkcHJlcmVxZGlyLyQkZmlsZSIgLiA7IFwKKwlkb25lCisJdG91Y2ggJEAK KworbWFpbnRhaW5lci1jbGVhbjogY2xlYW4KKwlybSAtZiBub2RlLXN1cHBvcnQtc3RhbXAg KmZ1bmNzLmZ1bmNzLmMgKmZ1bmNzLnN3aXRjaC5jIG5vZGV0YWdzLmgKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29w eWZ1bmNzLmMKaW5kZXggNTFkNjMwZmE4OS4uYjc1Njc0NDUwMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29w eWZ1bmNzLmMKQEAgLTIzLDExICsyMyw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIK LSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9k ZXMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgotI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogCiAKIC8qCkBAIC03Myw2ICs2OSw5IEBACiAJKG5ld25vZGUtPmZsZG5hbWUgPSBmcm9t LT5mbGRuYW1lKQogCiAKKyNpbmNsdWRlICJjb3B5ZnVuY3MuZnVuY3MuYyIKKworI2lmZGVm IE9CU09MRVRFCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJIHBsYW5ub2Rlcy5oIGNvcHkgZnVu Y3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDY1LDYgKzE0NjQsNyBAQCBfY29weVZhcihj b25zdCBWYXIgKmZyb20pCiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KKyNlbmRpZiAvKk9CU09M RVRFKi8KIAogLyoKICAqIF9jb3B5Q29uc3QKQEAgLTE1MDQsNiArMTUwNCw3IEBAIF9jb3B5 Q29uc3QoY29uc3QgQ29uc3QgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKKyNpZmRl ZiBPQlNPTEVURQogLyoKICAqIF9jb3B5UGFyYW0KICAqLwpAQCAtMzI0Nyw2ICszMjQ4LDcg QEAgX2NvcHlQYXJhbVJlZihjb25zdCBQYXJhbVJlZiAqZnJvbSkKIAogCXJldHVybiBuZXdu b2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgQV9Db25zdCAqCiBfY29w eUFfQ29uc3QoY29uc3QgQV9Db25zdCAqZnJvbSkKQEAgLTMyODcsNiArMzI4OSw3IEBAIF9j b3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQog CisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBGdW5jQ2FsbCAqCiBfY29weUZ1bmNDYWxsKGNv bnN0IEZ1bmNDYWxsICpmcm9tKQogewpAQCAtNTQ1Miw2ICs1NDU1LDcgQEAgX2NvcHlEcm9w U3Vic2NyaXB0aW9uU3RtdChjb25zdCBEcm9wU3Vic2NyaXB0aW9uU3RtdCAqZnJvbSkKIAog CXJldHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCiAgKgkJCQkJZXh0ZW5zaWJsZS5oIGNvcHkgZnVuY3Rpb25zCkBAIC01NDc0LDYgKzU0 NzgsNyBAQCBfY29weUV4dGVuc2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVOb2RlICpmcm9t KQogCXJldHVybiBuZXdub2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAqCQkJCQl2YWx1ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01 NTQ0LDYgKzU1NDksNyBAQCBfY29weUZvcmVpZ25LZXlDYWNoZUluZm8oY29uc3QgRm9yZWln bktleUNhY2hlSW5mbyAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiAvKgogICogY29weU9iamVjdEltcGwgLS0gaW1wbGVtZW50YXRpb24g b2YgY29weU9iamVjdCgpOyBzZWUgbm9kZXMvbm9kZXMuaApAQCAtNTU2NCw2ICs1NTcwLDgg QEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAogCXN3aXRjaCAobm9kZVRh Zyhmcm9tKSkKIAl7CisjaW5jbHVkZSAiY29weWZ1bmNzLnN3aXRjaC5jIgorI2lmZGVmIE9C U09MRVRFCiAJCQkvKgogCQkJICogUExBTiBOT0RFUwogCQkJICovCkBAIC02MDA4LDYgKzYw MTYsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRfQml0 U3RyaW5nOgogCQkJcmV0dmFsID0gX2NvcHlCaXRTdHJpbmcoZnJvbSk7CiAJCQlicmVhazsK KyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQkJLyoKIAkJCSAqIExJU1QgTk9ERVMKQEAgLTYw MjUsNiArNjAzNCw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJCQly ZXR2YWwgPSBsaXN0X2NvcHkoZnJvbSk7CiAJCQlicmVhazsKIAorI2lmZGVmIE9CU09MRVRF CiAJCQkvKgogCQkJICogRVhURU5TSUJMRSBOT0RFUwogCQkJICovCkBAIC02NTc2LDYgKzY1 ODYsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRfRm9y ZWlnbktleUNhY2hlSW5mbzoKIAkJCXJldHZhbCA9IF9jb3B5Rm9yZWlnbktleUNhY2hlSW5m byhmcm9tKTsKIAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCWRlZmF1bHQ6 CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBu b2RlVGFnKGZyb20pKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwppbmRleCBlNzQ3ZTE2Njdk Li5mOWYzOWQ3ODJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0xMCw5ICsxMCw2 IEBACiAgKiBiZWNhdXNlIHRoZSBjaXJjdWxhciBsaW5rYWdlcyBiZXR3ZWVuIFJlbE9wdElu Zm8gYW5kIFBhdGggbm9kZXMgY2FuJ3QKICAqIGJlIGhhbmRsZWQgZWFzaWx5IGluIGEgc2lt cGxlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbC4KICAqCi0gKiBDdXJyZW50bHksIGluIGZhY3Qs IGVxdWFsKCkgZG9lc24ndCBrbm93IGhvdyB0byBjb21wYXJlIFBsYW4gdHJlZXMKLSAqIGVp dGhlci4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb21lZGF5LgotICoKICAqIE5P VEU6IGl0IGlzIGludGVudGlvbmFsIHRoYXQgcGFyc2UgbG9jYXRpb24gZmllbGRzIChpbiBu b2RlcyB0aGF0IGhhdmUKICAqIG9uZSkgYXJlIG5vdCBjb21wYXJlZC4gIFRoaXMgaXMgYmVj YXVzZSB3ZSB3YW50LCBmb3IgZXhhbXBsZSwgYSB2YXJpYWJsZQogICogIngiIHRvIGJlIGNv bnNpZGVyZWQgZXF1YWwoKSB0byBhbm90aGVyIHJlZmVyZW5jZSB0byAieCIgaW4gdGhlIHF1 ZXJ5LgpAQCAtMzAsOCArMjcsNiBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKLSNpbmNsdWRlICJub2Rlcy9leHRlbnNpYmxlLmgiCi0jaW5j bHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKIAog CkBAIC05Nyw2ICs5Miw5IEBACiAJKCh2b2lkKSAwKQogCiAKKyNpbmNsdWRlICJlcXVhbGZ1 bmNzLmZ1bmNzLmMiCisKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqCVN0dWZmIGZyb20gcHJp bW5vZGVzLmgKICAqLwpAQCAtMjQyLDYgKzI0MCw3IEBAIF9lcXVhbFZhcihjb25zdCBWYXIg KmEsIGNvbnN0IFZhciAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JTT0xF VEUqLwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQ29uc3QoY29uc3QgQ29uc3QgKmEsIGNvbnN0 IENvbnN0ICpiKQpAQCAtMjY0LDYgKzI2Myw3IEBAIF9lcXVhbENvbnN0KGNvbnN0IENvbnN0 ICphLCBjb25zdCBDb25zdCAqYikKIAkJCQkJCWEtPmNvbnN0Ynl2YWwsIGEtPmNvbnN0bGVu KTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgYm9vbAogX2VxdWFsUGFyYW0oY29u c3QgUGFyYW0gKmEsIGNvbnN0IFBhcmFtICpiKQogewpAQCAtMTI4OCw2ICsxMjg4LDcgQEAg X2VxdWFsUGxhY2VIb2xkZXJJbmZvKGNvbnN0IFBsYWNlSG9sZGVySW5mbyAqYSwgY29uc3Qg UGxhY2VIb2xkZXJJbmZvICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNP TEVURSovCiAKIC8qCiAgKiBTdHVmZiBmcm9tIGV4dGVuc2libGUuaApAQCAtMTMwOSw2ICsx MzEwLDcgQEAgX2VxdWFsRXh0ZW5zaWJsZU5vZGUoY29uc3QgRXh0ZW5zaWJsZU5vZGUgKmEs IGNvbnN0IEV4dGVuc2libGVOb2RlICpiKQogCXJldHVybiB0cnVlOwogfQogCisjaWZkZWYg T0JTT0xFVEUKIC8qCiAgKiBTdHVmZiBmcm9tIHBhcnNlbm9kZXMuaAogICovCkBAIC0yNzk5 LDYgKzI4MDEsNyBAQCBfZXF1YWxQYXJhbVJlZihjb25zdCBQYXJhbVJlZiAqYSwgY29uc3Qg UGFyYW1SZWYgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8K IAogc3RhdGljIGJvb2wKIF9lcXVhbEFfQ29uc3QoY29uc3QgQV9Db25zdCAqYSwgY29uc3Qg QV9Db25zdCAqYikKQEAgLTI4MTUsNiArMjgxOCw3IEBAIF9lcXVhbEFfQ29uc3QoY29uc3Qg QV9Db25zdCAqYSwgY29uc3QgQV9Db25zdCAqYikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorI2lm ZGVmIE9CU09MRVRFCiBzdGF0aWMgYm9vbAogX2VxdWFsRnVuY0NhbGwoY29uc3QgRnVuY0Nh bGwgKmEsIGNvbnN0IEZ1bmNDYWxsICpiKQogewpAQCAtMzQ1Miw2ICszNDU2LDcgQEAgX2Vx dWFsUGFydGl0aW9uQ21kKGNvbnN0IFBhcnRpdGlvbkNtZCAqYSwgY29uc3QgUGFydGl0aW9u Q21kICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8q CiAgKiBTdHVmZiBmcm9tIHBnX2xpc3QuaApAQCAtMzUxMiw2ICszNTE3LDcgQEAgX2VxdWFs TGlzdChjb25zdCBMaXN0ICphLCBjb25zdCBMaXN0ICpiKQogCXJldHVybiB0cnVlOwogfQog CisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBTdHVmZiBmcm9tIHZhbHVlLmgKICAqLwpAQCAt MzU1NSw2ICszNTYxLDcgQEAgX2VxdWFsQml0U3RyaW5nKGNvbnN0IEJpdFN0cmluZyAqYSwg Y29uc3QgQml0U3RyaW5nICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNP TEVURSovCiAKIC8qCiAgKiBlcXVhbApAQCAtMzU4NSw2ICszNTkyLDggQEAgZXF1YWwoY29u c3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAogCXN3aXRjaCAobm9kZVRhZyhhKSkKIAl7 CisjaW5jbHVkZSAiZXF1YWxmdW5jcy5zd2l0Y2guYyIKKyNpZmRlZiBPQlNPTEVURQogCQkJ LyoKIAkJCSAqIFBSSU1JVElWRSBOT0RFUwogCQkJICovCkBAIC0zODA1LDYgKzM4MTQsNyBA QCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfUGxhY2VI b2xkZXJJbmZvOgogCQkJcmV0dmFsID0gX2VxdWFsUGxhY2VIb2xkZXJJbmZvKGEsIGIpOwog CQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJY2FzZSBUX0xpc3Q6CiAJCWNh c2UgVF9JbnRMaXN0OgpAQCAtMzgxMiw2ICszODIyLDcgQEAgZXF1YWwoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYikKIAkJCXJldHZhbCA9IF9lcXVhbExpc3QoYSwgYik7CiAJCQli cmVhazsKIAorI2lmZGVmIE9CU09MRVRFCiAJCWNhc2UgVF9JbnRlZ2VyOgogCQkJcmV0dmFs ID0gX2VxdWFsSW50ZWdlcihhLCBiKTsKIAkJCWJyZWFrOwpAQCAtNDQxMSw2ICs0NDIyLDcg QEAgZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAkJY2FzZSBUX0pzb25U YWJsZUNvbHVtbjoKIAkJCXJldHZhbCA9IF9lcXVhbEpzb25UYWJsZUNvbHVtbihhLCBiKTsK IAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAJCWRlZmF1bHQ6CiAJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCBiL3NyYy9iYWNrZW5kL25vZGVz L2dlbl9ub2RlX3N1cHBvcnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uZWRiYWZkM2U1YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L2dlbl9ub2RlX3N1cHBvcnQucGwKQEAgLTAsMCArMSw3MjkgQEAKKyMhL3Vzci9iaW4vcGVy bAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgR2VuZXJhdGUgbm9kZSBzdXBwb3J0IGZpbGVz OgorIyAtIG5vZGV0YWdzLmgKKyMgLSBjb3B5ZnVuY3MKKyMgLSBlcXVhbGZ1bmNzCisjIC0g cmVhZGZ1bmNzCisjIC0gb3V0ZnVuY3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisjCisjIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwK KyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisK K3VzZSBGaWxlOjpCYXNlbmFtZTsKKwordXNlIEZpbmRCaW47Cit1c2UgbGliICIkRmluZEJp bjo6UmVhbEJpbi8uLi9jYXRhbG9nIjsKKwordXNlIENhdGFsb2c7ICAjIGZvciBSZW5hbWVU ZW1wRmlsZQorCisKKyMgVGVzdCB3aGV0aGVyIGZpcnN0IGFyZ3VtZW50IGlzIGVsZW1lbnQg b2YgdGhlIGxpc3QgaW4gdGhlIHNlY29uZAorIyBhcmd1bWVudAorc3ViIGVsZW0KK3sKKwlt eSAkeCA9IHNoaWZ0OworCXJldHVybiBncmVwIHsgJF8gZXEgJHggfSBAXzsKK30KKworCisj IGNvbGxlY3Qgbm9kZSBuYW1lcworbXkgQG5vZGVfdHlwZXMgPSBxdyhOb2RlKTsKKyMgY29s bGVjdCBpbmZvIGZvciBlYWNoIG5vZGUgdHlwZQorbXkgJW5vZGVfdHlwZV9pbmZvOworCisj IG5vZGUgdHlwZXMgd2UgZG9uJ3Qgd2FudCBjb3B5IHN1cHBvcnQgZm9yCitteSBAbm9fY29w eTsKKyMgbm9kZSB0eXBlcyB3ZSBkb24ndCB3YW50IHJlYWQvd3JpdGUgc3VwcG9ydCBmb3IK K215IEBub19yZWFkX3dyaXRlOworCisjIHR5cGVzIHRoYXQgYXJlIGNvcGllZCBieSBzdHJh aWdodCBhc3NpZ25tZW50CitteSBAc2NhbGFyX3R5cGVzID0gcXcoCisJYml0czMyIGJvb2wg Y2hhciBkb3VibGUgaW50IGludDggaW50MTYgaW50MzIgaW50NjQgbG9uZyB1aW50OCB1aW50 MTYgdWludDMyIHVpbnQ2NAorCUFjbE1vZGUgQXR0ck51bWJlciBDYXJkaW5hbGl0eSBDb3N0 IEluZGV4IE9pZCBTZWxlY3Rpdml0eSBTaXplIFN0cmF0ZWd5TnVtYmVyIFN1YlRyYW5zYWN0 aW9uSWQgVGltZUxpbmVJRCBYTG9nUmVjUHRyCispOworCisjIGNvbGxlY3QgZW51bSB0eXBl cworbXkgQGVudW1fdHlwZXM7CisKKyMgQWJzdHJhY3QgdHlwZXMgYXJlIHR5cGVzIHRoYXQg Y2Fubm90IGJlIGluc3RhbnRpYXRlZCBidXQgdGhhdCBjYW4gYmUKKyMgc3VwZXJ0eXBlcyBv ZiBvdGhlciB0eXBlcy4gIFdlIHRyYWNrIHRoZWlyIGZpZWxkcywgc28gdGhhdCBzdWJ0eXBl cworIyBjYW4gdXNlIHRoZW0sIGJ1dCB3ZSBkb24ndCBlbWl0IGEgbm9kZSB0YWcsIHNvIHlv dSBjYW4ndCBpbnN0YW50aWF0ZQorIyB0aGVtLgorbXkgQGFic3RyYWN0X3R5cGVzID0gcXco CisJTm9kZSBFeHByCisJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90IEhlYXBUdXBsZVRhYmxl U2xvdCBNaW5pbWFsVHVwbGVUYWJsZVNsb3QgVmlydHVhbFR1cGxlVGFibGVTbG90CisJSm9p blBhdGgKKwlQYXJ0aXRpb25QcnVuZVN0ZXAKKyk7CisKKyMgU3BlY2lhbCBjYXNlcyB0aGF0 IGVpdGhlciBkb24ndCBoYXZlIHRoZWlyIG93biBzdHJ1Y3Qgb3IgdGhlIHN0cnVjdAorIyBp cyBub3QgaW4gYSBoZWFkZXIgZmlsZS4gIFdlIGp1c3QgZ2VuZXJhdGUgbm9kZSB0YWdzIGZv ciB0aGVtLCBidXQKKyMgdGhleSBvdGhlcndpc2UgZG9uJ3QgcGFydGljaXBhdGUgaW4gbm9k ZSBzdXBwb3J0LgorbXkgQGV4dHJhX3RhZ3MgPSBxdygKKwlJbnRMaXN0IE9pZExpc3QKKwlB bGxvY1NldENvbnRleHQgR2VuZXJhdGlvbkNvbnRleHQgU2xhYkNvbnRleHQKKwlUSURCaXRt YXAKKwlXaW5kb3dPYmplY3REYXRhCispOworCisjIFRoaXMgaXMgYSByZWd1bGFyIG5vZGUs IGJ1dCB3ZSBza2lwIHBhcnNpbmcgaXQgZnJvbSBpdHMgaGVhZGVyIGZpbGUKKyMgc2luY2Ug d2Ugd29uJ3QgdXNlIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaGVyZSBhbnl3YXkuCitwdXNo IEBub2RlX3R5cGVzLCBxdyhMaXN0KTsKKworIyBwYXRobm9kZXMuaCBleGNlcHRpb25zOiBX ZSBkb24ndCBzdXBwb3J0IGNvcHlpbmcgUmVsT3B0SW5mbywKKyMgSW5kZXhPcHRJbmZvLCBv ciBQYXRoIG5vZGVzLiAgVGhlcmUgYXJlIHNvbWUgc3Vic2lkaWFyeSBzdHJ1Y3RzIHRoYXQK KyMgYXJlIHVzZWZ1bCB0byBjb3B5LCB0aG91Z2guCitwdXNoIEBub19jb3B5LCBxdygKKwlS ZWxPcHRJbmZvIEluZGV4T3B0SW5mbyBQYXRoIFBsYW5uZXJHbG9iYWwgRXF1aXZhbGVuY2VD bGFzcyBFcXVpdmFsZW5jZU1lbWJlciBGb3JlaWduS2V5T3B0SW5mbworCUdyb3VwaW5nU2V0 RGF0YSBJbmNyZW1lbnRhbFNvcnRQYXRoIEluZGV4Q2xhdXNlIE1pbk1heEFnZ0luZm8gUGF0 aFRhcmdldCBQbGFubmVySW5mbyBQbGFubmVyUGFyYW1JdGVtCisJUGFyYW1QYXRoSW5mbyBS b2xsdXBEYXRhIFJvd0lkZW50aXR5VmFySW5mbyBTdGF0aXN0aWNFeHRJbmZvCispOworIyBF cXVpdmFsZW5jZUNsYXNzZXMgYXJlIG5ldmVyIG1vdmVkLCBzbyBqdXN0IHNoYWxsb3ctY29w eSB0aGUgcG9pbnRlcgorcHVzaCBAc2NhbGFyX3R5cGVzLCBxdyhFcXVpdmFsZW5jZUNsYXNz KiBFcXVpdmFsZW5jZU1lbWJlciopOworcHVzaCBAc2NhbGFyX3R5cGVzLCBxdyhRdWFsQ29z dCk7CisKKyMgU2VlIHNwZWNpYWwgdHJlYXRtZW50IGluIG91dE5vZGUoKSBhbmQgbm9kZVJl YWQoKSBmb3IgdGhlc2UuCitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhCaXRTdHJpbmcgQm9v bGVhbiBGbG9hdCBJbnRlZ2VyIExpc3QgU3RyaW5nKTsKKworIyBYWFggdmFyaW91cyB0aGlu Z3Mgd2UgYXJlIG5vdCBwdWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBzdGF5IGxldmVsCisjIHdp dGggdGhlIG1hbnVhbCBzeXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3KENhbGxDb250ZXh0IElu bGluZUNvZGVCbG9jayk7CitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhBY2Nlc3NQcml2IEFs dGVyVGFibGVDbWQgQ2FsbENvbnRleHQgQ3JlYXRlT3BDbGFzc0l0ZW0gRnVuY3Rpb25QYXJh bWV0ZXIgSW5mZXJDbGF1c2UgSW5saW5lQ29kZUJsb2NrIE9iamVjdFdpdGhBcmdzIE9uQ29u ZmxpY3RDbGF1c2UgUGFydGl0aW9uQ21kIFJvbGVTcGVjIFZhY3V1bVJlbGF0aW9uKTsKKwor CisjIyByZWFkIGlucHV0CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAoQEFSR1YpCit7CisJbXkg JGluX3N0cnVjdDsKKwlteSAkc3VibGluZTsKKwlteSAkaXNfbm9kZV9zdHJ1Y3Q7CisJbXkg JHN1cGVydHlwZTsKKwlteSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJbXkgQG15X2ZpZWxkczsK KwlteSAlbXlfZmllbGRfdHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0dHJzOworCisJb3BlbiBt eSAkaWZoLCAnPCcsICRpbmZpbGUgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBcIiRpbmZpbGVc IjogJCEiOworCisJbXkgJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwgJC87IDwkaWZoPiB9 OworCisJIyBzdHJpcCBDIGNvbW1lbnRzCisJJGZpbGVfY29udGVudCA9fiBzey9cKi4qP1wq L317fWdzOworCisJZm9yZWFjaCBteSAkbGluZSAoc3BsaXQgL1xuLywgJGZpbGVfY29udGVu dCkKKwl7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9fiBzL1xzKiQvLzsKKwkJbmV4dCBp ZiAkbGluZSBlcSAnJzsKKwkJbmV4dCBpZiAkbGluZSA9fiAvXiMoZGVmaW5lfGlmZGVmfGVu ZGlmKS87CisKKwkJIyB3ZSBhcmUgYW5hbHl6aW5nIGEgc3RydWN0IGRlZmluaXRpb24KKwkJ aWYgKCRpbl9zdHJ1Y3QpCisJCXsKKwkJCSRzdWJsaW5lKys7CisKKwkJCSMgZmlyc3QgbGlu ZSBzaG91bGQgaGF2ZSBvcGVuaW5nIGJyYWNlCisJCQlpZiAoJHN1YmxpbmUgPT0gMSkKKwkJ CXsKKwkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAwOworCQkJCSRzdXBlcnR5cGUgPSB1bmRlZjsK KwkJCQluZXh0IGlmICRsaW5lIGVxICd7JzsKKwkJCQlkaWU7CisJCQl9CisJCQkjIHNlY29u ZCBsaW5lIHNob3VsZCBoYXZlIG5vZGUgdGFnIG9yIHN1cGVydHlwZQorCQkJZWxzaWYgKCRz dWJsaW5lID09IDIpCisJCQl7CisJCQkJaWYgKCRsaW5lID1+IC9eXHMqTm9kZVRhZ1xzK3R5 cGU7LykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVjdCA9IDE7CisJCQkJCW5leHQ7CisJ CQkJfQorCQkJCWVsc2lmICgkbGluZSA9fiAvXHMqKFx3KylccysoXHcrKTsvIGFuZCBlbGVt ICQxLCBAbm9kZV90eXBlcykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVjdCA9IDE7CisJ CQkJCSRzdXBlcnR5cGUgPSAkMTsKKwkJCQkJJHN1cGVydHlwZV9maWVsZCA9ICQyOworCQkJ CQluZXh0OworCQkJCX0KKwkJCX0KKworCQkJIyBlbmQgb2Ygc3RydWN0CisJCQlpZiAoJGxp bmUgPX4gL15cfVxzKiRpbl9zdHJ1Y3Q7JC8gfHwgJGxpbmUgPX4gL15cfTskLykKKwkJCXsK KwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJCQkJIyBUaGlzIGlzIHRoZSBl bmQgb2YgYSBub2RlIHN0cnVjdCBkZWZpbml0aW9uLgorCQkJCQkjIFNhdmUgZXZlcnl0aGlu ZyB3ZSBoYXZlIGNvbGxlY3RlZC4KKworCQkJCQkjIG5vZGUgbmFtZQorCQkJCQlwdXNoIEBu b2RlX3R5cGVzLCAkaW5fc3RydWN0OworCisJCQkJCSMgZmllbGQgbmFtZXMsIHR5cGVzLCBh dHRyaWJ1dGVzCisJCQkJCW15IEBmID0gQG15X2ZpZWxkczsKKwkJCQkJbXkgJWZ0ID0gJW15 X2ZpZWxkX3R5cGVzOworCQkJCQlteSAlZmEgPSAlbXlfZmllbGRfYXR0cnM7CisKKwkJCQkJ IyBJZiB0aGVyZSBpcyBhIHN1cGVydHlwZSwgYWRkIHRob3NlIGZpZWxkcywgdG9vLgorCQkJ CQlpZiAoJHN1cGVydHlwZSkKKwkJCQkJeworCQkJCQkJbXkgQHN1cGVyZmllbGRzOworCQkJ CQkJZm9yZWFjaCBteSAkc2YgKEB7JG5vZGVfdHlwZV9pbmZveyRzdXBlcnR5cGV9LT57Zmll bGRzfX0pCisJCQkJCQl7CisJCQkJCQkJbXkgJGZuID0gIiR7c3VwZXJ0eXBlX2ZpZWxkfS4k c2YiOworCQkJCQkJCXB1c2ggQHN1cGVyZmllbGRzLCAkZm47CisJCQkJCQkJJGZ0eyRmbn0g PSAkbm9kZV90eXBlX2luZm97JHN1cGVydHlwZX0tPntmaWVsZF90eXBlc317JHNmfTsKKwkJ CQkJCQkkZmF7JGZufSA9ICRub2RlX3R5cGVfaW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkX2F0 dHJzfXskc2Z9OworCQkJCQkJCSRmYXskZm59ID1+IHMvYXJyYXlfc2l6ZVwoKFx3KylcKS9h cnJheV9zaXplKCR7c3VwZXJ0eXBlX2ZpZWxkfS4kMSkvIGlmICRmYXskZm59OworCQkJCQkJ fQorCQkJCQkJdW5zaGlmdCBAZiwgQHN1cGVyZmllbGRzOworCQkJCQl9CisJCQkJCSMgc2F2 ZSBpbiBnbG9iYWwgaW5mbyBzdHJ1Y3R1cmUKKwkJCQkJJG5vZGVfdHlwZV9pbmZveyRpbl9z dHJ1Y3R9LT57ZmllbGRzfSA9IFxAZjsKKwkJCQkJJG5vZGVfdHlwZV9pbmZveyRpbl9zdHJ1 Y3R9LT57ZmllbGRfdHlwZXN9ID0gXCVmdDsKKwkJCQkJJG5vZGVfdHlwZV9pbmZveyRpbl9z dHJ1Y3R9LT57ZmllbGRfYXR0cnN9ID0gXCVmYTsKKworCQkJCQkjIE5vZGVzIGZyb20gdGhl c2UgZmlsZXMgZG9uJ3QgbmVlZCB0byBiZQorCQkJCQkjIHN1cHBvcnRlZCwgZXhjZXB0IHRo ZSBub2RlIHRhZ3MuCisJCQkJCWlmIChlbGVtIGJhc2VuYW1lKCRpbmZpbGUpLAorCQkJCQkJ cXcoZXhlY25vZGVzLmggdHJpZ2dlci5oIGV2ZW50X3RyaWdnZXIuaCBhbWFwaS5oIHRhYmxl YW0uaAorCQkJCQkJCXRzbWFwaS5oIGZkd2FwaS5oIHR1cHRhYmxlLmggcmVwbG5vZGVzLmgg c3VwcG9ydG5vZGVzLmgpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5LCAkaW5fc3Ry dWN0OworCQkJCQkJcHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0cnVjdDsKKwkJCQkJfQor CisJCQkJCSMgV2UgZG8gbm90IHN1cHBvcnQgY29weWluZyBQYXRoIHRyZWVzLCBtYWlubHkK KwkJCQkJIyBiZWNhdXNlIHRoZSBjaXJjdWxhciBsaW5rYWdlcyBiZXR3ZWVuIFJlbE9wdElu Zm8KKwkJCQkJIyBhbmQgUGF0aCBub2RlcyBjYW4ndCBiZSBoYW5kbGVkIGVhc2lseSBpbiBh CisJCQkJCSMgc2ltcGxlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbC4KKwkJCQkJaWYgKCRzdXBl cnR5cGUgJiYgKCRzdXBlcnR5cGUgZXEgJ1BhdGgnIHx8ICRzdXBlcnR5cGUgZXEgJ0pvaW5Q YXRoJykpCisJCQkJCXsKKwkJCQkJCXB1c2ggQG5vX2NvcHksICRpbl9zdHJ1Y3Q7CisJCQkJ CX0KKwkJCQl9CisKKwkJCQkjIHN0YXJ0IG5ldyBjeWNsZQorCQkJCSRpbl9zdHJ1Y3QgPSB1 bmRlZjsKKwkJCQlAbXlfZmllbGRzID0gKCk7CisJCQkJJW15X2ZpZWxkX3R5cGVzID0gKCk7 CisJCQkJJW15X2ZpZWxkX2F0dHJzID0gKCk7CisJCQl9CisJCQkjIG5vcm1hbCBzdHJ1Y3Qg ZmllbGQKKwkJCWVsc2lmICgkbGluZSA9fiAvXlxzKiguKylccypcYihcdyspKFxbXHcrXF0p P1xzKig/OnBnX25vZGVfYXR0clwoKFtcdygpIF0qKVwpKT87LykKKwkJCXsKKwkJCQlpZiAo JGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJCQkJbXkgJHR5cGUgPSAkMTsKKwkJCQkJbXkg JG5hbWUgPSAkMjsKKwkJCQkJbXkgJGFycmF5X3NpemUgPSAkMzsKKwkJCQkJbXkgJGF0dHIg PSAkNDsKKworCQkJCQkjIHN0cmlwICJjb25zdCIKKwkJCQkJJHR5cGUgPX4gcy9eY29uc3Rc cyovLzsKKwkJCQkJIyBzdHJpcCB0cmFpbGluZyBzcGFjZQorCQkJCQkkdHlwZSA9fiBzL1xz KiQvLzsKKwkJCQkJIyBzdHJpcCBzcGFjZSBiZXR3ZWVuIHR5cGUgYW5kICIqIiAocG9pbnRl cikgKi8KKwkJCQkJJHR5cGUgPX4gcy9ccytcKiQvKi87CisKKwkJCQkJZGllIGlmICR0eXBl IGVxICcnOworCisJCQkJCSR0eXBlID0gJHR5cGUgLiAkYXJyYXlfc2l6ZSBpZiAkYXJyYXlf c2l6ZTsKKwkJCQkJcHVzaCBAbXlfZmllbGRzLCAkbmFtZTsKKwkJCQkJJG15X2ZpZWxkX3R5 cGVzeyRuYW1lfSA9ICR0eXBlOworCQkJCQkkbXlfZmllbGRfYXR0cnN7JG5hbWV9ID0gJGF0 dHI7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgkaXNfbm9kZV9zdHJ1 Y3QpCisJCQkJeworCQkJCQkjd2FybiAiJGluZmlsZTokLjogY291bGQgbm90IHBhcnNlIFwi JGxpbmVcIlxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJIyBub3QgaW4gYSBzdHJ1Y3QKKwkJ ZWxzZQorCQl7CisJCQkjIHN0YXJ0IG9mIGEgc3RydWN0PworCQkJaWYgKCRsaW5lID1+IC9e KD86dHlwZWRlZiApP3N0cnVjdCAoXHcrKShccypcL1wqLiopPyQvICYmICQxIG5lICdOb2Rl JykKKwkJCXsKKwkJCQkkaW5fc3RydWN0ID0gJDE7CisJCQkJJHN1YmxpbmUgPSAwOworCQkJ fQorCQkJIyBvbmUgbm9kZSB0eXBlIHR5cGVkZWYnZWQgZGlyZWN0bHkgZnJvbSBhbm90aGVy CisJCQllbHNpZiAoJGxpbmUgPX4gL150eXBlZGVmIChcdyspIChcdyspOyQvIGFuZCBlbGVt ICQxLCBAbm9kZV90eXBlcykKKwkJCXsKKwkJCQlteSAkYWxpYXNfb2YgPSAkMTsKKwkJCQlt eSAkbiA9ICQyOworCisJCQkJIyBjb3B5IGV2ZXJ5dGhpbmcgb3ZlcgorCQkJCXB1c2ggQG5v ZGVfdHlwZXMsICRuOworCQkJCW15IEBmID0gQHskbm9kZV90eXBlX2luZm97JGFsaWFzX29m fS0+e2ZpZWxkc319OworCQkJCW15ICVmdCA9ICV7JG5vZGVfdHlwZV9pbmZveyRhbGlhc19v Zn0tPntmaWVsZF90eXBlc319OworCQkJCW15ICVmYSA9ICV7JG5vZGVfdHlwZV9pbmZveyRh bGlhc19vZn0tPntmaWVsZF9hdHRyc319OworCQkJCSRub2RlX3R5cGVfaW5mb3skbn0tPntm aWVsZHN9ID0gXEBmOworCQkJCSRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc30g PSBcJWZ0OworCQkJCSRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc30gPSBcJWZh OworCQkJfQorCQkJIyBjb2xsZWN0IGVudW0gbmFtZXMKKwkJCWVsc2lmICgkbGluZSA9fiAv XnR5cGVkZWYgZW51bSAoXHcrKShccypcL1wqLiopPyQvKQorCQkJeworCQkJCXB1c2ggQGVu dW1fdHlwZXMsICQxOworCQkJfQorCQl9CisJfQorCisJaWYgKCRpbl9zdHJ1Y3QpCisJewor CQlkaWUgInJ1bmF3YXkgXCIkaW5fc3RydWN0XCIgaW4gZmlsZSBcIiRpbmZpbGVcIlxuIjsK Kwl9CisKKwljbG9zZSAkaWZoOworfSAjIGZvciBlYWNoIGZpbGUKKworCisjIyB3cml0ZSBv dXRwdXQKKworbXkgJHRtcGV4dCAgPSAiLnRtcCQkIjsKKworIyBub2RldGFncy5oCisKK29w ZW4gbXkgJG50LCAnPicsICdub2RldGFncy5oJyAuICR0bXBleHQgb3IgZGllICQhOworCitt eSAkaSA9IDE7Citmb3JlYWNoIG15ICRuIChAbm9kZV90eXBlcyxAZXh0cmFfdGFncykKK3sK KwluZXh0IGlmIGVsZW0gJG4sIEBhYnN0cmFjdF90eXBlczsKKwlwcmludCAkbnQgIlx0VF8k e259ID0gJGksXG4iOworCSRpKys7Cit9CisKK2Nsb3NlICRudDsKKworCisjIG1ha2UgI2lu Y2x1ZGUgbGluZXMgbmVjZXNzYXJ5IHRvIHB1bGwgaW4gYWxsIHRoZSBzdHJ1Y3QgZGVmaW5p dGlvbnMKK215ICRub2RlX2luY2x1ZGVzID0gJyc7Citmb3JlYWNoIG15ICRpbmZpbGUgKHNv cnQgQEFSR1YpCit7CisJJGluZmlsZSA9fiBzIS4qc3JjL2luY2x1ZGUvISE7CisJJG5vZGVf aW5jbHVkZXMgLj0gcXF7I2luY2x1ZGUgIiRpbmZpbGUiXG59OworfQorCisKKyMgY29weWZ1 bmNzLmMsIGVxdWFsZnVuY3MuYworCitvcGVuIG15ICRjZmYsICc+JywgJ2NvcHlmdW5jcy5m dW5jcy5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkZWZmLCAnPicsICdlcXVh bGZ1bmNzLmZ1bmNzLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CitvcGVuIG15ICRjZnMsICc+ JywgJ2NvcHlmdW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkg JGVmcywgJz4nLCAnZXF1YWxmdW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRpZSAkITsK KworIyBhZGQgcmVxdWlyZWQgI2luY2x1ZGUgbGluZXMgdG8gZWFjaCBmaWxlIHNldAorcHJp bnQgJGNmZiAkbm9kZV9pbmNsdWRlczsKK3ByaW50ICRlZmYgJG5vZGVfaW5jbHVkZXM7CisK KyMgTm9kZXMgd2l0aCBjdXN0b20gY29weSBpbXBsZW1lbnRhdGlvbnMgYXJlIHNraXBwZWQg ZnJvbSAuZnVuY3MuYyBidXQKKyMgbmVlZCBjYXNlIHN0YXRlbWVudHMgaW4gLnN3aXRjaC5j LgorbXkgQGN1c3RvbV9jb3B5ID0gcXcoQV9Db25zdCBDb25zdCBFeHRlbnNpYmxlTm9kZSk7 CisKK2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwg QGFic3RyYWN0X3R5cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5vX2NvcHk7CisJbmV4dCBp ZiAkbiBlcSAnTGlzdCc7CisKKwlwcmludCAkY2ZzICIKK1x0XHRjYXNlIFRfJHtufToKK1x0 XHRcdHJldHZhbCA9IF9jb3B5JHtufShmcm9tKTsKK1x0XHRcdGJyZWFrOyI7CisKKwlwcmlu dCAkZWZzICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJldHZhbCA9IF9lcXVhbCR7bn0o YSwgYik7CitcdFx0XHRicmVhazsiOworCisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX2Nv cHk7CisKKwlwcmludCAkY2ZmICIKK3N0YXRpYyAkbiAqCitfY29weSR7bn0oY29uc3QgJG4g KmZyb20pCit7CitcdCR7bn0gKm5ld25vZGUgPSBtYWtlTm9kZSgkbik7CisKKyI7CisKKwlw cmludCAkZWZmICIKK3N0YXRpYyBib29sCitfZXF1YWwke259KGNvbnN0ICRuICphLCBjb25z dCAkbiAqYikKK3sKKyI7CisKKwkjIHByaW50IGluc3RydWN0aW9ucyBmb3IgZWFjaCBmaWVs ZAorCWZvcmVhY2ggbXkgJGYgKEB7JG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkc319KQor CXsKKwkJbXkgJHQgPSAkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfdHlwZXN9eyRmfTsK KwkJbXkgJGEgPSAkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfYXR0cnN9eyRmfSB8fCAn JzsKKwkJbXkgJGNvcHlfaWdub3JlID0gKCRhID1+IC9cYmNvcHlfaWdub3JlXGIvKTsKKwkJ bXkgJGVxdWFsX2lnbm9yZSA9ICgkYSA9fiAvXGJlcXVhbF9pZ25vcmVcYi8pOworCisJCSMg c2VsZWN0IGluc3RydWN0aW9ucyBieSBmaWVsZCB0eXBlCisJCWlmICgkdCBlcSAnY2hhcion KQorCQl7CisJCQlwcmludCAkY2ZmICJcdENPUFlfU1RSSU5HX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRjb3B5X2lnbm9yZTsKKwkJCXByaW50ICRlZmYgIlx0Q09NUEFSRV9TVFJJTkdfRklF TEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQllbHNpZiAoJHQgZXEg J0JpdG1hcHNldConIHx8ICR0IGVxICdSZWxpZHMnKQorCQl7CisJCQlwcmludCAkY2ZmICJc dENPUFlfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJ CXByaW50ICRlZmYgIlx0Q09NUEFSRV9CSVRNQVBTRVRfRklFTEQoJGYpO1xuIiB1bmxlc3Mg JGVxdWFsX2lnbm9yZTsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2ludCcgJiYgJGYgPX4gJ2xv Y2F0aW9uJCcpCisJCXsKKwkJCXByaW50ICRjZmYgIlx0Q09QWV9MT0NBVElPTl9GSUVMRCgk Zik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWZmICJcdENPTVBBUkVf TE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQll bHNpZiAoZWxlbSAkdCwgQHNjYWxhcl90eXBlcyBvciBlbGVtICR0LCBAZW51bV90eXBlcykK KwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVz cyAkY29weV9pZ25vcmU7CisJCQlpZiAoJGEgPX4gL1xiZXF1YWxfaWdub3JlX2lmX3plcm9c Yi8pCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRpZiAoYS0+JGYgIT0gYi0+JGYgJiYgYS0+ JGYgIT0gMCAmJiBiLT4kZiAhPSAwKVxuXHRcdHJldHVybiBmYWxzZTtcbiI7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX1NDQUxBUl9GSUVMRCgk Zik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0IGVxICdDb2VyY2lvbkZvcm0nOwor CQkJfQorCQl9CisJCSMgc2NhbGFyIHR5cGUgcG9pbnRlcgorCQllbHNpZiAoJHQgPX4gLyhc dyspXCovIGFuZCBlbGVtICQxLCBAc2NhbGFyX3R5cGVzKQorCQl7CisJCQlteSAkdHQgPSAk MTsKKwkJCW15ICRhcnJheV9zaXplX2ZpZWxkOworCQkJaWYgKCRhID1+IC9cYmFycmF5X3Np emUuKFtcdy5dKykvKQorCQkJeworCQkJCSRhcnJheV9zaXplX2ZpZWxkID0gJDE7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJZGllICJubyBhcnJheSBzaXplIGRlZmluZWQgZm9yICRu LiRmIG9mIHR5cGUgJHQiOworCQkJfQorCQkJaWYgKCRub2RlX3R5cGVfaW5mb3skbn0tPntm aWVsZF90eXBlc317JGFycmF5X3NpemVfZmllbGR9IGVxICdMaXN0KicpCisJCQl7CisJCQkJ cHJpbnQgJGNmZiAiXHRDT1BZX1BPSU5URVJfRklFTEQoJGYsIGxpc3RfbGVuZ3RoKGZyb20t PiRhcnJheV9zaXplX2ZpZWxkKSAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRjb3B5X2ln bm9yZTsKKwkJCQlwcmludCAkZWZmICJcdENPTVBBUkVfUE9JTlRFUl9GSUVMRCgkZiwgbGlz dF9sZW5ndGgoYS0+JGFycmF5X3NpemVfZmllbGQpICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxl c3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkY2Zm ICJcdENPUFlfUE9JTlRFUl9GSUVMRCgkZiwgZnJvbS0+JGFycmF5X3NpemVfZmllbGQgKiBz aXplb2YoJHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJpbnQgJGVmZiAi XHRDT01QQVJFX1BPSU5URVJfRklFTEQoJGYsIGEtPiRhcnJheV9zaXplX2ZpZWxkICogc2l6 ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJfQorCQkjIG5v ZGUgdHlwZQorCQllbHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAbm9kZV90 eXBlcykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX05PREVfRklFTEQoJGYpO1xuIiB1 bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX05PREVfRklF TEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQkjIGFycmF5IChpbmxp bmUpCisJCWVsc2lmICgkdCA9fiAvXHcrXFsvKQorCQl7CisJCQlwcmludCAkY2ZmICJcdENP UFlfQVJSQVlfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQg JGVmZiAiXHRDT01QQVJFX0FSUkFZX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25v cmU7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdzdHJ1Y3QgQ3VzdG9tUGF0aE1ldGhvZHMqJyB8 fAkkdCBlcSAnc3RydWN0IEN1c3RvbVNjYW5NZXRob2RzKicpCisJCXsKKwkJCSMgRmllbGRz IG9mIHRoZXNlIHR5cGVzIGFyZSByZXF1aXJlZCB0byBiZSBhIHBvaW50ZXIgdG8gYQorCQkJ IyBzdGF0aWMgdGFibGUgb2YgY2FsbGJhY2sgZnVuY3Rpb25zLiAgU28gd2UgZG9uJ3QgY29w eQorCQkJIyB0aGUgdGFibGUgaXRzZWxmLCBqdXN0IHJlZmVyZW5jZSB0aGUgb3JpZ2luYWwg b25lLgorCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVz cyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWZmICJcdENPTVBBUkVfU0NBTEFSX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlk aWUgImNvdWxkIG5vdCBoYW5kbGUgdHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVs ZCBcIiRmXCIiOworCQl9CisJfQorCisJcHJpbnQgJGNmZiAiCitcdHJldHVybiBuZXdub2Rl OworfQorIjsKKwlwcmludCAkZWZmICIKK1x0cmV0dXJuIHRydWU7Cit9CisiOworfQorCitj bG9zZSAkY2ZmOworY2xvc2UgJGVmZjsKK2Nsb3NlICRjZnM7CitjbG9zZSAkZWZzOworCisK KyMgb3V0ZnVuY3MuYywgcmVhZGZ1bmNzLmMKKworb3BlbiBteSAkb2ZmLCAnPicsICdvdXRm dW5jcy5mdW5jcy5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkcmZmLCAnPics ICdyZWFkZnVuY3MuZnVuY3MuYycgLiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJG9m cywgJz4nLCAnb3V0ZnVuY3Muc3dpdGNoLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CitvcGVu IG15ICRyZnMsICc+JywgJ3JlYWRmdW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRpZSAk ITsKKworcHJpbnQgJG9mZiAkbm9kZV9pbmNsdWRlczsKK3ByaW50ICRyZmYgJG5vZGVfaW5j bHVkZXM7CisKK215IEBjdXN0b21fcmVhZHdyaXRlID0gcXcoQV9Db25zdCBBX0V4cHIgQm9v bEV4cHIgQ29uc3QgQ29uc3RyYWludCBFcXVpdmFsZW5jZUNsYXNzIEV4dGVuc2libGVOb2Rl IEZvcmVpZ25LZXlPcHRJbmZvIFF1ZXJ5IFJhbmdlVGJsRW50cnkpOworCitmb3JlYWNoIG15 ICRuIChAbm9kZV90eXBlcykKK3sKKwluZXh0IGlmIGVsZW0gJG4sIEBhYnN0cmFjdF90eXBl czsKKwluZXh0IGlmIGVsZW0gJG4sIEBub19yZWFkX3dyaXRlOworCisJIyBYWFggRm9yIG5v dywgc2tpcCBhbGwgIlN0bXQicyBleGNlcHQgdGhhdCBvbmVzIHRoYXQgd2VyZSB0aGVyZSBi ZWZvcmUuCisJaWYgKCRuID1+IC9TdG10JC8pCisJeworCQlteSBAa2VlcCA9IHF3KEFsdGVy U3RhdHNTdG10IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgQ3JlYXRlU3RhdHNTdG10IENyZWF0 ZVN0bXQgRGVjbGFyZUN1cnNvclN0bXQgSW1wb3J0Rm9yZWlnblNjaGVtYVN0bXQgSW5kZXhT dG10IE5vdGlmeVN0bXQgUGxhbm5lZFN0bXQgUExBc3NpZ25TdG10IFJhd1N0bXQgUmV0dXJu U3RtdCBTZWxlY3RTdG10IFNldE9wZXJhdGlvblN0bXQpOworCQluZXh0IHVubGVzcyBlbGVt ICRuLCBAa2VlcDsKKwl9CisKKwkjIFhYWCBBbHNvIHNraXAgcmVhZCBzdXBwb3J0IGZvciB0 aG9zZSB0aGF0IGRpZG4ndCBoYXZlIGl0IGJlZm9yZS4KKwlteSAkbm9fcmVhZCA9ICgkbiBl cSAnQV9TdGFyJyB8fCAkbiBlcSAnQV9Db25zdCcgfHwgJG4gZXEgJ0FfRXhwcicgfHwgJG4g ZXEgJ0NvbnN0cmFpbnQnIHx8ICRuID1+IC9QYXRoJC8gfHwgJG4gZXEgJ0VxdWl2YWxlbmNl Q2xhc3MnIHx8ICRuIGVxICdGb3JlaWduS2V5Q2FjaGVJbmZvJyB8fCAkbiBlcSAnRm9yZWln bktleU9wdEluZm8nIHx8ICRuIGVxICdQYXRoVGFyZ2V0Jyk7CisKKwkjIG91dHB1dCBmb3Jt YXQgc3RhcnRzIHdpdGggdXBwZXIgY2FzZSBub2RlIHR5cGUsIHVuZGVyc2NvcmVzIHN0cmlw cGVkCisJbXkgJE4gPSB1YyAkbjsKKwkkTiA9fiBzL18vL2c7CisKKwlwcmludCAkb2ZzICJc dFx0XHRjYXNlIFRfJHtufTpcbiIuCisJICAiXHRcdFx0XHRfb3V0JHtufShzdHIsIG9iaik7 XG4iLgorCSAgIlx0XHRcdFx0YnJlYWs7XG4iOworCisJcHJpbnQgJHJmcyAiXHRlbHNlIGlm IChNQVRDSChcIiROXCIsICIgLiBsZW5ndGgoJE4pIC4gIikpXG4iLgorCSAgIlx0XHRyZXR1 cm5fdmFsdWUgPSBfcmVhZCR7bn0oKTtcbiIgdW5sZXNzICRub19yZWFkOworCisJbmV4dCBp ZiBlbGVtICRuLCBAY3VzdG9tX3JlYWR3cml0ZTsKKworCXByaW50ICRvZmYgIgorc3RhdGlj IHZvaWQKK19vdXQke259KFN0cmluZ0luZm8gc3RyLCBjb25zdCAkbiAqbm9kZSkKK3sKK1x0 V1JJVEVfTk9ERV9UWVBFKFwiJE5cIik7CisKKyI7CisKKwlwcmludCAkcmZmICIKK3N0YXRp YyAkbiAqCitfcmVhZCR7bn0odm9pZCkKK3sKK1x0UkVBRF9MT0NBTFMoJG4pOworCisiIHVu bGVzcyAkbm9fcmVhZDsKKworCSMgcHJpbnQgaW5zdHJ1Y3Rpb25zIGZvciBlYWNoIGZpZWxk CisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRzfX0pCisJ eworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317JGZ9Owor CQlteSAkYSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc317JGZ9IHx8ICcn OworCQlteSAkcmVhZHdyaXRlX2lnbm9yZSA9ICgkYSA9fiAvXGJyZWFkd3JpdGVfaWdub3Jl XGIvKTsKKwkJbmV4dCBpZiAkcmVhZHdyaXRlX2lnbm9yZTsKKworCQkjIFhYWCBQcmV2aW91 c2x5LCBmb3Igc3VidHlwaW5nLCBvbmx5IHRoZSBsZWFmIGZpZWxkIG5hbWUgaXMKKwkJIyB1 c2VkLiBQb25kZXIgd2hldGhlciB3ZSB3YW50IHRvIGtlZXAgaXQgdGhhdCB3YXkuCisKKwkJ IyBzZWxlY3QgaW5zdHJ1Y3Rpb25zIGJ5IGZpZWxkIHR5cGUKKwkJaWYgKCR0IGVxICdib29s JykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9CT09MX0ZJRUxEKCRmKTtcbiI7CisJ CQlwcmludCAkcmZmICJcdFJFQURfQk9PTF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVh ZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2ludCcgJiYgJGYgPX4gJ2xvY2F0aW9uJCcpCisJ CXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfTE9DQVRJT05fRklFTEQoJGYpO1xuIjsKKwkJ CXByaW50ICRyZmYgIlx0UkVBRF9MT0NBVElPTl9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2ludCcgfHwgJHQgZXEgJ2ludDMyJyB8fCAk dCBlcSAnQXR0ck51bWJlcicgfHwgJHQgZXEgJ1N0cmF0ZWd5TnVtYmVyJykKKwkJeworCQkJ cHJpbnQgJG9mZiAiXHRXUklURV9JTlRfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYg Ilx0UkVBRF9JTlRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxz aWYgKCR0IGVxICd1aW50MzInIHx8ICR0IGVxICdiaXRzMzInIHx8ICR0IGVxICdBY2xNb2Rl JyB8fCAkdCBlcSAnQmxvY2tOdW1iZXInIHx8ICR0IGVxICdJbmRleCcgfHwgJHQgZXEgJ1N1 YlRyYW5zYWN0aW9uSWQnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX1VJTlRfRklF TEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9VSU5UX0ZJRUxEKCRmKTtcbiIg dW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAndWludDY0JykKKwkJewor CQkJcHJpbnQgJG9mZiAiXHRXUklURV9VSU5UNjRfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50 ICRyZmYgIlx0UkVBRF9VSU5UNjRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJ CX0KKwkJZWxzaWYgKCR0IGVxICdPaWQnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRF X09JRF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX09JRF9GSUVMRCgk Zik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2xvbmcnKQor CQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0xPTkdfRklFTEQoJGYpO1xuIjsKKwkJCXBy aW50ICRyZmYgIlx0UkVBRF9MT05HX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOwor CQl9CisJCWVsc2lmICgkdCBlcSAnY2hhcicpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJ VEVfQ0hBUl9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0NIQVJfRklF TEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdkb3Vi bGUnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUu NmZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIg dW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQ2FyZGluYWxpdHknKQor CQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUuMGZcIik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNz ICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQ29zdCcpCisJCXsKKwkJCXByaW50 ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS4yZlwiKTtcbiI7CisJCQlwcmlu dCAkcmZmICJcdFJFQURfRkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJ CX0KKwkJZWxzaWYgKCR0IGVxICdRdWFsQ29zdCcpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0 V1JJVEVfRkxPQVRfRklFTEQoJGYuc3RhcnR1cCwgXCIlLjJmXCIpO1xuIjsKKwkJCXByaW50 ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYucGVyX3R1cGxlLCBcIiUuMmZcIik7XG4i OworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmLnN0YXJ0dXApO1xuIiB1 bmxlc3MgJG5vX3JlYWQ7CisJCQlwcmludCAkcmZmICJcdFJFQURfRkxPQVRfRklFTEQoJGYu cGVyX3R1cGxlKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAn U2VsZWN0aXZpdHknKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxE KCRmLCBcIiUuNGZcIik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnY2hhcion KQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX1NUUklOR19GSUVMRCgkZik7XG4iOwor CQkJcHJpbnQgJHJmZiAiXHRSRUFEX1NUUklOR19GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ0JpdG1hcHNldConIHx8ICR0IGVxICdSZWxp ZHMnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0JJVE1BUFNFVF9GSUVMRCgkZik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iIHVu bGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoZWxlbSAkdCwgQGVudW1fdHlwZXMpCisJ CXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfRU5VTV9GSUVMRCgkZiwgJHQpO1xuIjsKKwkJ CXByaW50ICRyZmYgIlx0UkVBRF9FTlVNX0ZJRUxEKCRmLCAkdCk7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQkjIGFycmF5cworCQllbHNpZiAoJHQgPX4gLyhcdyspKFwqfFxbKS8g YW5kIGVsZW0gJDEsIEBzY2FsYXJfdHlwZXMpCisJCXsKKwkJCW15ICR0dCA9IHVjICQxOwor CQkJbXkgJGFycmF5X3NpemVfZmllbGQ7CisJCQlpZiAoJGEgPX4gL1xiYXJyYXlfc2l6ZS4o W1x3Ll0rKS8pCisJCQl7CisJCQkJJGFycmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlkaWUgIm5vIGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYg b2YgdHlwZSAkdCI7CisJCQl9CisJCQlpZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxk X3R5cGVzfXskYXJyYXlfc2l6ZV9maWVsZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmlu dCAkb2ZmICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBsaXN0X2xlbmd0aChub2RlLT4kYXJy YXlfc2l6ZV9maWVsZCkpO1xuIjsKKwkJCQlwcmludCAkcmZmICJcdFJFQURfJHt0dH1fQVJS QVkoJGYsIGxpc3RfbGVuZ3RoKGxvY2FsX25vZGUtPiRhcnJheV9zaXplX2ZpZWxkKSk7XG4i IHVubGVzcyAkbm9fcmVhZDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkb2Zm ICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBub2RlLT4kYXJyYXlfc2l6ZV9maWVsZCk7XG4i OworCQkJCXByaW50ICRyZmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgkZiwgbG9jYWxfbm9kZS0+ JGFycmF5X3NpemVfZmllbGQpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQl9CisJCX0KKwkJ IyBTcGVjaWFsIHRyZWF0bWVudHMgb2Ygc2V2ZXJhbCBQYXRoIG5vZGUgZmllbGRzCisJCSMK KwkJIyBXZSBkbyBub3QgcHJpbnQgdGhlIHBhcmVudCwgZWxzZSB3ZSdkIGJlIGluIGluZmlu aXRlCisJCSMgcmVjdXJzaW9uLiAgV2UgY2FuIHByaW50IHRoZSBwYXJlbnQncyByZWxpZHMg Zm9yCisJCSMgaWRlbnRpZmljYXRpb24gcHVycG9zZXMsIHRob3VnaC4gIFdlIHByaW50IHRo ZSBwYXRodGFyZ2V0CisJCSMgb25seSBpZiBpdCdzIG5vdCB0aGUgZGVmYXVsdCBvbmUgZm9y IHRoZSByZWwuICBXZSBhbHNvIGRvCisJCSMgbm90IHByaW50IHRoZSB3aG9sZSBvZiBwYXJh bV9pbmZvLCBzaW5jZSBpdCdzIHByaW50ZWQgdmlhCisJCSMgUmVsT3B0SW5mbzsgaXQncyBz dWZmaWNpZW50IGFuZCBsZXNzIGNsdXR0ZXJpbmcgdG8gcHJpbnQKKwkJIyBqdXN0IHRoZSBy ZXF1aXJlZCBvdXRlciByZWxpZHMuCisJCWVsc2lmICgkdCBlcSAnUmVsT3B0SW5mbyonICYm ICRhIGVxICdwYXRoX2hhY2sxJykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKHN0ciwgXCIgOnBhcmVudF9yZWxpZHMgXCIpO1xuIi4KKwkJCSAgIlx0 b3V0Qml0bWFwc2V0KHN0ciwgbm9kZS0+JGYtPnJlbGlkcyk7XG4iOworCQl9CisJCWVsc2lm ICgkdCBlcSAnUGF0aFRhcmdldConICYmICRhIGVxICdwYXRoX2hhY2syJykKKwkJeworCQkJ KG15ICRmMiA9ICRmKSA9fiBzL3BhdGh0YXJnZXQvcGFyZW50LzsKKwkJCXByaW50ICRvZmYg Ilx0aWYgKG5vZGUtPiRmICE9IG5vZGUtPiRmMi0+cmVsdGFyZ2V0KVxuIi4KKwkJCSAgIlx0 XHRXUklURV9OT0RFX0ZJRUxEKCRmKTtcbiI7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdQYXJh bVBhdGhJbmZvKicgJiYgJGEgZXEgJ3BhdGhfaGFjazMnKQorCQl7CisJCQlwcmludCAkb2Zm ICJcdGlmIChub2RlLT4kZilcbiIuCisJCQkgICJcdFx0b3V0Qml0bWFwc2V0KHN0ciwgbm9k ZS0+JGYtPnBwaV9yZXFfb3V0ZXIpO1xuIi4KKwkJCSAgIlx0ZWxzZVxuIi4KKwkJCSAgIlx0 XHRvdXRCaXRtYXBzZXQoc3RyLCBOVUxMKTtcbiI7CisJCX0KKwkJIyBub2RlIHR5cGUKKwkJ ZWxzaWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlwZXMpCisJCXsK KwkJCXByaW50ICRvZmYgIlx0V1JJVEVfTk9ERV9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQg JHJmZiAiXHRSRUFEX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0K KwkJZWxzaWYgKCR0IGVxICdzdHJ1Y3QgQ3VzdG9tUGF0aE1ldGhvZHMqJyB8fAkkdCBlcSAn c3RydWN0IEN1c3RvbVNjYW5NZXRob2RzKicpCisJCXsKKwkJCXByaW50ICRvZmYgcXsKKwkv KiBDdXN0b21OYW1lIGlzIGEga2V5IHRvIGxvb2t1cCBDdXN0b21TY2FuTWV0aG9kcyAqLwor CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAiIDptZXRob2RzICIpOworCW91dFRva2Vu KHN0ciwgbm9kZS0+bWV0aG9kcy0+Q3VzdG9tTmFtZSk7Cit9OworCQkJcHJpbnQgJHJmZiBx IQorCXsKKwkJLyogTG9va3VwIEN1c3RvbVNjYW5NZXRob2RzIGJ5IEN1c3RvbU5hbWUgKi8K KwkJY2hhcgkgICAqY3VzdG9tX25hbWU7CisJCWNvbnN0IEN1c3RvbVNjYW5NZXRob2RzICpt ZXRob2RzOworCQl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsgLyogc2tpcCBtZXRob2Rz OiAqLworCQl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsgLyogQ3VzdG9tTmFtZSAqLwor CQljdXN0b21fbmFtZSA9IG51bGxhYmxlX3N0cmluZyh0b2tlbiwgbGVuZ3RoKTsKKwkJbWV0 aG9kcyA9IEdldEN1c3RvbVNjYW5NZXRob2RzKGN1c3RvbV9uYW1lLCBmYWxzZSk7CisJCWxv Y2FsX25vZGUtPm1ldGhvZHMgPSBtZXRob2RzOworCX0KKyEgdW5sZXNzICRub19yZWFkOwor CQl9CisJCSMgdmFyaW91cyBmaWVsZCB0eXBlcyB0byBpZ25vcmUKKwkJZWxzaWYgKCR0IGVx ICdQYXJhbUxpc3RJbmZvJyB8fCAkdCA9fiAvUGFydGl0aW9uQm91bmRJbmZvRGF0YS8gfHwg JHQgZXEgJ1BhcnRpdGlvbkRpcmVjdG9yeScgfHwgJHQgZXEgJ1BhcnRpdGlvblNjaGVtZScg fHwgJHQgZXEgJ3ZvaWQqJyB8fCAkdCA9fiAvXCpcKiQvKQorCQl7CisJCQkjIGlnbm9yZQor CQl9CisJCWVsc2UKKwkJeworCQkJZGllICJjb3VsZCBub3QgaGFuZGxlIHR5cGUgXCIkdFwi IGluIHN0cnVjdCBcIiRuXCIgZmllbGQgXCIkZlwiIjsKKwkJfQorCX0KKworCXByaW50ICRv ZmYgIn0KKyI7CisJcHJpbnQgJHJmZiAiCitcdFJFQURfRE9ORSgpOworfQorIiB1bmxlc3Mg JG5vX3JlYWQ7Cit9CisKK2Nsb3NlICRvZmY7CitjbG9zZSAkcmZmOworY2xvc2UgJG9mczsK K2Nsb3NlICRyZnM7CisKKworIyBub3cgcmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZXMgdG8g dGhlaXIgZmluYWwgbmFtZQorZm9yZWFjaCBteSAkZmlsZSAocXcobm9kZXRhZ3MuaCBjb3B5 ZnVuY3MuZnVuY3MuYyBjb3B5ZnVuY3Muc3dpdGNoLmMgZXF1YWxmdW5jcy5mdW5jcy5jIGVx dWFsZnVuY3Muc3dpdGNoLmMgb3V0ZnVuY3MuZnVuY3MuYyBvdXRmdW5jcy5zd2l0Y2guYyBy ZWFkZnVuY3MuZnVuY3MuYyByZWFkZnVuY3Muc3dpdGNoLmMpKQoreworCUNhdGFsb2c6OlJl bmFtZVRlbXBGaWxlKCRmaWxlLCAkdG1wZXh0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmlu ZGV4IGNlMTI5MTU1OTIuLjU4ZmZjOWM4MTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAt MzEsMTEgKzMxLDEwIEBACiAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKLSNpbmNs dWRlICJub2Rlcy9wYXRobm9kZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIK KyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5o IgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5o IgotI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCBvdXRDaGFyKFN0cmlu Z0luZm8gc3RyLCBjaGFyIGMpOwogCkBAIC0zMDIsNiArMzAxLDkgQEAgb3V0RGF0dW0oU3Ry aW5nSW5mbyBzdHIsIERhdHVtIHZhbHVlLCBpbnQgdHlwbGVuLCBib29sIHR5cGJ5dmFsKQog fQogCiAKKyNpbmNsdWRlICJvdXRmdW5jcy5mdW5jcy5jIgorCisjaWZkZWYgT0JTT0xFVEUK IC8qCiAgKglTdHVmZiBmcm9tIHBsYW5ub2Rlcy5oCiAgKi8KQEAgLTExNTEsNiArMTE1Myw3 IEBAIF9vdXRWYXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFZhciAqbm9kZSkKIAlXUklURV9J TlRfRklFTEQodmFyYXR0bm9zeW4pOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9u KTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRDb25zdChT dHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3QgKm5vZGUpCkBAIC0xMTcyLDYgKzExNzUsNyBA QCBfb3V0Q29uc3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0ICpub2RlKQogCQlvdXRE YXR1bShzdHIsIG5vZGUtPmNvbnN0dmFsdWUsIG5vZGUtPmNvbnN0bGVuLCBub2RlLT5jb25z dGJ5dmFsKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dFBhcmFt KFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJhbSAqbm9kZSkKIHsKQEAgLTEzNDIsNiArMTM0 Niw3IEBAIF9vdXRTY2FsYXJBcnJheU9wRXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgU2Nh bGFyQXJyYXlPcEV4cHIgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChhcmdzKTsKIAlXUklU RV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAK IHN0YXRpYyB2b2lkCiBfb3V0Qm9vbEV4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJvb2xF eHByICpub2RlKQpAQCAtMTM3MCw2ICsxMzc1LDcgQEAgX291dEJvb2xFeHByKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBCb29sRXhwciAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChs b2NhdGlvbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRTdWJM aW5rKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdWJMaW5rICpub2RlKQogewpAQCAtMjU4Miw2 ICsyNTg4LDcgQEAgX291dEluZGV4T3B0SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgSW5k ZXhPcHRJbmZvICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQoaHlwb3RoZXRpY2FsKTsKIAkv KiB3ZSBkb24ndCBib3RoZXIgd2l0aCBmaWVsZHMgY29waWVkIGZyb20gdGhlIGluZGV4IEFN J3MgQVBJIHN0cnVjdCAqLwogfQorI2VuZGlmIC8qIE9CU09MRVRFICovCiAKIHN0YXRpYyB2 b2lkCiBfb3V0Rm9yZWlnbktleU9wdEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEZvcmVp Z25LZXlPcHRJbmZvICpub2RlKQpAQCAtMjYwOSw2ICsyNjE2LDcgQEAgX291dEZvcmVpZ25L ZXlPcHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBGb3JlaWduS2V5T3B0SW5mbyAqbm9k ZSkKIAkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIgJWQiLCBsaXN0X2xlbmd0aChub2RlLT5y aW5mb3NbaV0pKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dFN0 YXRpc3RpY0V4dEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN0YXRpc3RpY0V4dEluZm8g Km5vZGUpCiB7CkBAIC0yNjIwLDYgKzI2MjgsNyBAQCBfb3V0U3RhdGlzdGljRXh0SW5mbyhT dHJpbmdJbmZvIHN0ciwgY29uc3QgU3RhdGlzdGljRXh0SW5mbyAqbm9kZSkKIAlXUklURV9D SEFSX0ZJRUxEKGtpbmQpOwogCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChrZXlzKTsKIH0KKyNl bmRpZiAvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgdm9pZAogX291dEVxdWl2YWxlbmNlQ2xh c3MoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEVxdWl2YWxlbmNlQ2xhc3MgKm5vZGUpCkBAIC0y NjQ4LDYgKzI2NTcsNyBAQCBfb3V0RXF1aXZhbGVuY2VDbGFzcyhTdHJpbmdJbmZvIHN0ciwg Y29uc3QgRXF1aXZhbGVuY2VDbGFzcyAqbm9kZSkKIAlXUklURV9VSU5UX0ZJRUxEKGVjX21h eF9zZWN1cml0eSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRF cXVpdmFsZW5jZU1lbWJlcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgRXF1aXZhbGVuY2VNZW1i ZXIgKm5vZGUpCiB7CkBAIC0yODMyLDYgKzI4NDIsNyBAQCBfb3V0UGxhbm5lclBhcmFtSXRl bShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lclBhcmFtSXRlbSAqbm9kZSkKIAlXUklU RV9OT0RFX0ZJRUxEKGl0ZW0pOwogCVdSSVRFX0lOVF9GSUVMRChwYXJhbUlkKTsKIH0KKyNl bmRpZiAvKk9CU09MRVRFKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAt Mjg1NCw2ICsyODY1LDcgQEAgX291dEV4dGVuc2libGVOb2RlKFN0cmluZ0luZm8gc3RyLCBj b25zdCBFeHRlbnNpYmxlTm9kZSAqbm9kZSkKIAltZXRob2RzLT5ub2RlT3V0KHN0ciwgbm9k ZSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBAIC0zMTg3LDYgKzMxOTksNyBAQCBf b3V0U3RhdHNFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdGF0c0VsZW0gKm5vZGUpCiAJ V1JJVEVfU1RSSU5HX0ZJRUxEKG5hbWUpOwogCVdSSVRFX05PREVfRklFTEQoZXhwcik7CiB9 CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBfb3V0UXVlcnkoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFF1ZXJ5ICpub2RlKQpAQCAtMzI2MSw2ICszMjc0LDcgQEAgX291 dFF1ZXJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBRdWVyeSAqbm9kZSkKIAlXUklURV9JTlRf RklFTEQoc3RtdF9sZW4pOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBf b3V0V2l0aENoZWNrT3B0aW9uKFN0cmluZ0luZm8gc3RyLCBjb25zdCBXaXRoQ2hlY2tPcHRp b24gKm5vZGUpCiB7CkBAIC0zNDI2LDYgKzM0NDAsNyBAQCBfb3V0U2V0T3BlcmF0aW9uU3Rt dChTdHJpbmdJbmZvIHN0ciwgY29uc3QgU2V0T3BlcmF0aW9uU3RtdCAqbm9kZSkKIAlXUklU RV9OT0RFX0ZJRUxEKGNvbENvbGxhdGlvbnMpOwogCVdSSVRFX05PREVfRklFTEQoZ3JvdXBD bGF1c2VzKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRS YW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRibEVudHJ5ICpub2Rl KQpAQCAtMzUwNiw2ICszNTIxLDcgQEAgX291dFJhbmdlVGJsRW50cnkoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IFJhbmdlVGJsRW50cnkgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChzZWN1 cml0eVF1YWxzKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dFJh bmdlVGJsRnVuY3Rpb24oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGJsRnVuY3Rpb24g Km5vZGUpCiB7CkBAIC0zNTI5LDYgKzM1NDUsNyBAQCBfb3V0VGFibGVTYW1wbGVDbGF1c2Uo U3RyaW5nSW5mbyBzdHIsIGNvbnN0IFRhYmxlU2FtcGxlQ2xhdXNlICpub2RlKQogCVdSSVRF X05PREVfRklFTEQoYXJncyk7CiAJV1JJVEVfTk9ERV9GSUVMRChyZXBlYXRhYmxlKTsKIH0K KyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRBX0V4cHIoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IEFfRXhwciAqbm9kZSkKQEAgLTM2NDcsNiArMzY2NCw3IEBAIF9v dXRCaXRTdHJpbmcoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJpdFN0cmluZyAqbm9kZSkKIAlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgbm9kZS0+YnN2YWwpOwogfQogCisjaWZkZWYg T0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0Q29sdW1uUmVmKFN0cmluZ0luZm8gc3RyLCBj b25zdCBDb2x1bW5SZWYgKm5vZGUpCiB7CkBAIC0zNjc4LDYgKzM2OTYsNyBAQCBfb3V0UmF3 U3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmF3U3RtdCAqbm9kZSkKIAlXUklURV9MT0NB VElPTl9GSUVMRChzdG10X2xvY2F0aW9uKTsKIAlXUklURV9JTlRfRklFTEQoc3RtdF9sZW4p OwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dEFfQ29uc3Qo U3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfQ29uc3QgKm5vZGUpCkBAIC0zNjk0LDYgKzM3MTMs NyBAQCBfb3V0QV9Db25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9Db25zdCAqbm9kZSkK IAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVU RQogc3RhdGljIHZvaWQKIF9vdXRBX1N0YXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfU3Rh ciAqbm9kZSkKIHsKQEAgLTM4MzgsNiArMzg1OCw3IEBAIF9vdXRSYW5nZVRhYmxlRnVuY0Nv bChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYWJsZUZ1bmNDb2wgKm5vZGUpCiAJV1JJ VEVfTk9ERV9GSUVMRChjb2xkZWZleHByKTsKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2Nh dGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBfb3V0Q29u c3RyYWludChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3RyYWludCAqbm9kZSkKQEAgLTM5 NjAsNiArMzk4MSw3IEBAIF9vdXRDb25zdHJhaW50KFN0cmluZ0luZm8gc3RyLCBjb25zdCBD b25zdHJhaW50ICpub2RlKQogCX0KIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9p ZAogX291dEZvcmVpZ25LZXlDYWNoZUluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEZvcmVp Z25LZXlDYWNoZUluZm8gKm5vZGUpCiB7CkBAIC00MDIwLDYgKzQwNDIsNyBAQCBfb3V0UGFy dGl0aW9uUmFuZ2VEYXR1bShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFydGl0aW9uUmFuZ2VE YXR1bSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKHZhbHVlKTsKIAlXUklURV9MT0NBVElP Tl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBv dXROb2RlIC0KQEAgLTQwNTEsNiArNDA3NCw4IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IHZvaWQgKm9iaikKIAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAneycpOwog CQlzd2l0Y2ggKG5vZGVUYWcob2JqKSkKIAkJeworI2luY2x1ZGUgIm91dGZ1bmNzLnN3aXRj aC5jIgorI2lmZGVmIE9CU09MRVRFCiAJCQljYXNlIFRfUGxhbm5lZFN0bXQ6CiAJCQkJX291 dFBsYW5uZWRTdG10KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKQEAgLTQ3NjIsNiArNDc4Nyw3 IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2Ug VF9Kc29uVGFibGVTaWJsaW5nOgogCQkJCV9vdXRKc29uVGFibGVTaWJsaW5nKHN0ciwgb2Jq KTsKIAkJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQkJZGVmYXVsdDoKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCA2YTA1YjY5NDE1Li5mNDI3YWEwNWVjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYwpAQCAtMzMsOSArMzMsNyBAQAogI2luY2x1ZGUgPG1hdGgu aD4KIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2li bGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCi0jaW5jbHVkZSAibm9kZXMv cGxhbm5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAi bm9kZXMvcmVhZGZ1bmNzLmgiCiAKIApAQCAtMjM4LDYgKzIzNiw4IEBAIHJlYWRCaXRtYXBz ZXQodm9pZCkKIAlyZXR1cm4gX3JlYWRCaXRtYXBzZXQoKTsKIH0KIAorI2luY2x1ZGUgInJl YWRmdW5jcy5mdW5jcy5jIgorCiAvKgogICogX3JlYWRRdWVyeQogICovCkBAIC0yOTEsNiAr MjkxLDcgQEAgX3JlYWRRdWVyeSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZkZWYg T0JTT0xFVEUKIC8qCiAgKiBfcmVhZE5vdGlmeVN0bXQKICAqLwpAQCAtNjI5LDYgKzYzMCw3 IEBAIF9yZWFkVmFyKHZvaWQpCiAKIAlSRUFEX0RPTkUoKTsKIH0KKyNlbmRpZiAvKk9CU09M RVRFKi8KIAogLyoKICAqIF9yZWFkQ29uc3QKQEAgLTY1NSw2ICs2NTcsNyBAQCBfcmVhZENv bnN0KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAq IF9yZWFkUGFyYW0KICAqLwpAQCAtODgwLDYgKzg4Myw3IEBAIF9yZWFkU2NhbGFyQXJyYXlP cEV4cHIodm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwog CiAvKgogICogX3JlYWRCb29sRXhwcgpAQCAtOTA3LDYgKzkxMSw3IEBAIF9yZWFkQm9vbEV4 cHIodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICog X3JlYWRTdWJMaW5rCiAgKi8KQEAgLTE2NDksNiArMTY1NCw3IEBAIF9yZWFkQXBwZW5kUmVs SW5mbyh2b2lkKQogLyoKICAqCVN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oLgogICovCisjZW5k aWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZFJhbmdlVGJsRW50cnkKQEAgLTE3NDQs NiArMTc1MCw3IEBAIF9yZWFkUmFuZ2VUYmxFbnRyeSh2b2lkKQogCVJFQURfRE9ORSgpOwog fQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFJhbmdlVGJsRnVuY3Rpb24KICAq LwpAQCAtMjg3Miw2ICsyODc5LDcgQEAgX3JlYWRBbHRlcm5hdGl2ZVN1YlBsYW4odm9pZCkK IAogCVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX3Jl YWRFeHRlbnNpYmxlTm9kZQpAQCAtMjkwMyw2ICsyOTExLDcgQEAgX3JlYWRFeHRlbnNpYmxl Tm9kZSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAg KiBfcmVhZFBhcnRpdGlvbkJvdW5kU3BlYwogICovCkBAIC0yOTM3LDYgKzI5NDYsNyBAQCBf cmVhZFBhcnRpdGlvblJhbmdlRGF0dW0odm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2Vu ZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogcGFyc2VOb2RlU3RyaW5nCkBAIC0yOTYxLDcg KzI5NzEsMTEgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAjZGVmaW5lIE1BVENIKHRva25h bWUsIG5hbWVsZW4pIFwKIAkobGVuZ3RoID09IG5hbWVsZW4gJiYgbWVtY21wKHRva2VuLCB0 b2tuYW1lLCBuYW1lbGVuKSA9PSAwKQogCi0JaWYgKE1BVENIKCJRVUVSWSIsIDUpKQorCWlm IChmYWxzZSkKKwkJOworI2luY2x1ZGUgInJlYWRmdW5jcy5zd2l0Y2guYyIKKyNpZmRlZiBP QlNPTEVURQorCWVsc2UgaWYgKE1BVENIKCJRVUVSWSIsIDUpKQogCQlyZXR1cm5fdmFsdWUg PSBfcmVhZFF1ZXJ5KCk7CiAJZWxzZSBpZiAoTUFUQ0goIldJVEhDSEVDS09QVElPTiIsIDE1 KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRXaXRoQ2hlY2tPcHRpb24oKTsKQEAgLTMyMzUs NiArMzI0OSw3IEBAIHBhcnNlTm9kZVN0cmluZyh2b2lkKQogCQlyZXR1cm5fdmFsdWUgPSBf cmVhZEpzb25UYWJsZVBhcmVudCgpOwogCWVsc2UgaWYgKE1BVENIKCJKU09OVEFCTEVTSUJM SU5HIiwgMTYpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEpzb25UYWJsZVNpYmxpbmcoKTsK KyNlbmRpZiAvKk9CU09MRVRFKi8KIAllbHNlCiAJewogCQllbG9nKEVSUk9SLCAiYmFkbHkg Zm9ybWF0dGVkIG5vZGUgc3RyaW5nIFwiJS4zMnNcIi4uLiIsIHRva2VuKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL01ha2VmaWxlIGIvc3JjL2luY2x1ZGUvTWFrZWZpbGUKaW5kZXgg NWYyNTdhOTU4Yy4uMTdjZmQyNjhiOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvTWFrZWZp bGUKKysrIGIvc3JjL2luY2x1ZGUvTWFrZWZpbGUKQEAgLTgxLDYgKzgxLDcgQEAgY2xlYW46 CiAJcm0gLWYgcGFyc2VyL2dyYW0uaCBzdG9yYWdlL2x3bG9ja25hbWVzLmggdXRpbHMvcHJv YmVzLmgKIAlybSAtZiBjYXRhbG9nL3NjaGVtYXBnLmggY2F0YWxvZy9zeXN0ZW1fZmtfaW5m by5oCiAJcm0gLWYgY2F0YWxvZy9wZ18qX2QuaCBjYXRhbG9nL2hlYWRlci1zdGFtcAorCXJt IC1mIG5vZGVzL25vZGV0YWdzLmggbm9kZXMvaGVhZGVyLXN0YW1wCiAKIGRpc3RjbGVhbiBt YWludGFpbmVyLWNsZWFuOiBjbGVhbgogCXJtIC1mIHBnX2NvbmZpZy5oIHBnX2NvbmZpZ19l eHQuaCBwZ19jb25maWdfb3MuaCBzdGFtcC1oIHN0YW1wLWV4dC1oCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlIGIvc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGln bm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45OWZiMWQzNzg3 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZQpAQCAt MCwwICsxLDIgQEAKKy9ub2RldGFncy5oCisvaGVhZGVyLXN0YW1wCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApp bmRleCBiM2I0MDc1NzliLi44YTYyYTJmZWU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTI3LDYg KzI3LDggQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIHsKIAlUX0ludmFsaWQgPSAwLAogCisj aW5jbHVkZSAibm9kZXMvbm9kZXRhZ3MuaCIKKyNpZmRlZiBPQlNPTEVURQogCS8qCiAJICog VEFHUyBGT1IgRVhFQ1VUT1IgTk9ERVMgKGV4ZWNub2Rlcy5oKQogCSAqLwpAQCAtNTYyLDgg KzU2NCwzMyBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3VwcG9ydFJlcXVlc3RSb3dz LAkJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0SW5k ZXhDb25kaXRpb24sIC8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCiAJVF9TdXBwb3J0 UmVxdWVzdFdGdW5jTW9ub3RvbmljCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCisj ZW5kaWYgLypPQlNPTEVURSovCiB9IE5vZGVUYWc7CiAKKy8qCisgKiBVc2VkIGluIG5vZGUg ZGVmaW5pdGlvbnMgdG8gc2V0IGV4dHJhIGluZm9ybWF0aW9uIGZvciBnZW5fbm9kZV9zdXBw b3J0LnBsCisgKgorICogVGhlIGFyZ3VtZW50IGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qg b2YgYXR0cmlidXRlcy4gIFRoZSBmb2xsb3dpbmcKKyAqIGF0dHJpYnV0ZXMgYXJlIGN1cnJl bnRseSB1c2VkOgorICoKKyAqIC0gYXJyYXlfc2l6ZShPVEhFUkZJRUxEKTogVGhpcyBmaWVs ZCBpcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSB3aXRoCisgKiAgIHNpemUgaW5k aWNhdGVkIGJ5IHRoZSBtZW50aW9uZWQgb3RoZXIgZmllbGQuICBUaGUgb3RoZXIgZmllbGQg aXMgZWl0aGVyIGEKKyAqICAgc2NhbGFyIG9yIGEgbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUg bGVuZ3RoIG9mIHRoZSBsaXN0IGlzIHVzZWQuCisgKgorICogLSBjb3B5X2lnbm9yZTogSWdu b3JlIHRoZSBmaWVsZCBmb3IgY29weS4KKyAqCisgKiAtIGVxdWFsX2lnbm9yZTogSWdub3Jl IHRoZSBmaWVsZCBmb3IgZXF1YWxpdHkuCisgKgorICogLSBlcXVhbF9pZ25vcmVfaWZfemVy bzogSWdub3JlIHRoZSBmaWVsZCBmb3IgZXF1YWxpdHkgaWYgaXQgaXMgemVyby4KKyAqICAg KE90aGVyd2lzZSwgY29tcGFyZSBub3JtYWxseS4pCisgKgorICogLSByZWFkd3JpdGVfaWdu b3JlOiBJZ25vcmUgdGhlIGZpZWxkIGZvciByZWFkL3dyaXRlLgorICoKKyAqIFVua25vd24g YXR0cmlidXRlcyBhcmUgaWdub3JlZC4gIFNvbWUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGFy ZSB1c2VkIGZvcgorICogc3BlY2lhbCAiaGFjayIgY2FzZXMuCisgKi8KKyNkZWZpbmUgcGdf bm9kZV9hdHRyKGF0dHJzKQorCiAvKgogICogVGhlIGZpcnN0IGZpZWxkIG9mIGEgbm9kZSBv ZiBhbnkgdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBOb2RlVGFnLgogICogSGVuY2Ug dGhlIHR5cGUgb2YgYW55IG5vZGUgY2FuIGJlIGdvdHRlbiBieSBjYXN0aW5nIGl0IHRvIE5v ZGUuIERlY2xhcmluZwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGY5M2Q4NjY1NDgu LjlhOWEzZTg0MWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTEyMyw4ICsxMjMs OCBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeQogCiAJUXVlcnlTb3VyY2UgcXVlcnlTb3VyY2U7 CS8qIHdoZXJlIGRpZCBJIGNvbWUgZnJvbT8gKi8KIAotCS8qIHF1ZXJ5IGlkZW50aWZpZXIg KGNhbiBiZSBzZXQgYnkgcGx1Z2lucykgKi8KLQl1aW50NjQJCXF1ZXJ5SWQ7CisJLyogcXVl cnkgaWRlbnRpZmllciAoY2FuIGJlIHNldCBieSBwbHVnaW5zKTsgaWdub3JlZCBmb3IgZXF1 YWwsIG1pZ2h0IG5vdCBiZSBzZXQgKi8KKwl1aW50NjQJCXF1ZXJ5SWQgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CiAKIAlib29sCQljYW5TZXRUYWc7CQkvKiBkbyBJIHNldCB0aGUg Y29tbWFuZCByZXN1bHQgdGFnPyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGI4 OGNmYjhkYzAuLmE0ZmI5Y2U4ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMjcs NyArMjI3LDcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICogR0VRTy4KIAkgKi8KIAlMaXN0 CSAgICpqb2luX3JlbF9saXN0OwotCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoOworCXN0 cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3Jl KTsKIAogCS8qCiAJICogV2hlbiBkb2luZyBhIGR5bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUg am9pbiBzZWFyY2gsIGpvaW5fcmVsX2xldmVsW2tdCkBAIC0zMzMsMTIgKzMzMywxMiBAQCBz dHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBGaWVsZHMgZmlsbGVkIGR1cmluZyBjcmVhdGVfcGxh bigpIGZvciB1c2UgaW4gc2V0cmVmcy5jCiAJICovCiAJLyogZm9yIEdyb3VwaW5nRnVuYyBm aXh1cCAqLwotCUF0dHJOdW1iZXIgKmdyb3VwaW5nX21hcDsKKwlBdHRyTnVtYmVyICpncm91 cGluZ19tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUodXBkYXRlX2NvbG5vcykpOwogCS8q IExpc3Qgb2YgTWluTWF4QWdnSW5mb3MgKi8KIAlMaXN0CSAgICptaW5tYXhfYWdnczsKIAog CS8qIGNvbnRleHQgaG9sZGluZyBQbGFubmVySW5mbyAqLwotCU1lbW9yeUNvbnRleHQgcGxh bm5lcl9jeHQ7CisJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N4dCBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7CiAKIAlDYXJkaW5hbGl0eSB0b3RhbF90YWJsZV9wYWdlczsJLyog IyBvZiBwYWdlcyBpbiBhbGwgbm9uLWR1bW15IHRhYmxlcyBvZgogCQkJCQkJCQkJICogcXVl cnkgKi8KQEAgLTM3OCw4ICszNzgsOCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBUaGVz ZSBmaWVsZHMgYXJlIHdvcmtzcGFjZSBmb3Igc2V0cmVmcy5jLiAgRWFjaCBpcyBhbiBhcnJh eQogCSAqIGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMuCiAJICovCi0JYm9vbAkg ICAqaXNBbHRTdWJwbGFuOwotCWJvb2wJICAgKmlzVXNlZFN1YnBsYW47CisJYm9vbAkgICAq aXNBbHRTdWJwbGFuIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKKwlib29sCSAg ICppc1VzZWRTdWJwbGFuIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAogCS8q IG9wdGlvbmFsIHByaXZhdGUgZGF0YSBmb3Igam9pbl9zZWFyY2hfaG9vaywgZS5nLiwgR0VR TyAqLwogCXZvaWQJICAgKmpvaW5fc2VhcmNoX3ByaXZhdGU7CkBAIC03NDcsOSArNzQ3LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCS8qIGxhcmdlc3QgYXR0cm5vIG9mIHJl bCAqLwogCUF0dHJOdW1iZXIJbWF4X2F0dHI7CiAJLyogYXJyYXkgaW5kZXhlZCBbbWluX2F0 dHIgLi4gbWF4X2F0dHJdICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsKKwlSZWxpZHMJ ICAgKmF0dHJfbmVlZGVkIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkvKiBh cnJheSBpbmRleGVkIFttaW5fYXR0ciAuLiBtYXhfYXR0cl0gKi8KLQlpbnQzMgkgICAqYXR0 cl93aWR0aHM7CisJaW50MzIJICAgKmF0dHJfd2lkdGhzIHBnX25vZGVfYXR0cihyZWFkd3Jp dGVfaWdub3JlKTsKIAkvKiBMQVRFUkFMIFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSBy ZWwgKi8KIAlMaXN0CSAgICpsYXRlcmFsX3ZhcnM7CiAJLyogcmVscyB0aGF0IHJlZmVyZW5j ZSBtZSBsYXRlcmFsbHkgKi8KQEAgLTc4NCwxNiArNzg0LDE2IEBAIHR5cGVkZWYgc3RydWN0 IFJlbE9wdEluZm8KIAkvKiBqb2luIGlzIG9ubHkgdmFsaWQgZm9yIGN1cnJlbnQgdXNlciAq LwogCWJvb2wJCXVzZXJpZGlzY3VycmVudDsKIAkvKiB1c2UgInN0cnVjdCBGZHdSb3V0aW5l IiB0byBhdm9pZCBpbmNsdWRpbmcgZmR3YXBpLmggaGVyZSAqLwotCXN0cnVjdCBGZHdSb3V0 aW5lICpmZHdyb3V0aW5lOwotCXZvaWQJICAgKmZkd19wcml2YXRlOworCXN0cnVjdCBGZHdS b3V0aW5lICpmZHdyb3V0aW5lIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKKwl2 b2lkCSAgICpmZHdfcHJpdmF0ZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAK IAkvKgogCSAqIGNhY2hlIHNwYWNlIGZvciByZW1lbWJlcmluZyBpZiB3ZSBoYXZlIHByb3Zl biB0aGlzIHJlbGF0aW9uIHVuaXF1ZQogCSAqLwogCS8qIGtub3duIHVuaXF1ZSBmb3IgdGhl c2Ugb3RoZXIgcmVsaWQgc2V0KHMpICovCi0JTGlzdAkgICAqdW5pcXVlX2Zvcl9yZWxzOwor CUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVscyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9y ZSk7CiAJLyoga25vd24gbm90IHVuaXF1ZSBmb3IgdGhlc2Ugc2V0KHMpICovCi0JTGlzdAkg ICAqbm9uX3VuaXF1ZV9mb3JfcmVsczsKKwlMaXN0CSAgICpub25fdW5pcXVlX2Zvcl9yZWxz IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICogdXNlZCBieSB2 YXJpb3VzIHNjYW5zIGFuZCBqb2luczoKQEAgLTkxNyw4ICs5MTcsOCBAQCBzdHJ1Y3QgSW5k ZXhPcHRJbmZvCiAJT2lkCQkJaW5kZXhvaWQ7CiAJLyogdGFibGVzcGFjZSBvZiBpbmRleCAo bm90IHRhYmxlKSAqLwogCU9pZAkJCXJlbHRhYmxlc3BhY2U7Ci0JLyogYmFjay1saW5rIHRv IGluZGV4J3MgdGFibGUgKi8KLQlSZWxPcHRJbmZvICpyZWw7CisJLyogYmFjay1saW5rIHRv IGluZGV4J3MgdGFibGU7IGRvbid0IHByaW50LCBlbHNlIGluZmluaXRlIHJlY3Vyc2lvbiAq LworCVJlbE9wdEluZm8gKnJlbCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAK IAkvKgogCSAqIGluZGV4LXNpemUgc3RhdGlzdGljcyAoZnJvbSBwZ19jbGFzcyBhbmQgZWxz ZXdoZXJlKQpAQCAtOTM4LDMxICs5MzgsMzQgQEAgc3RydWN0IEluZGV4T3B0SW5mbwogCS8q IG51bWJlciBvZiBrZXkgY29sdW1ucyBpbiBpbmRleCAqLwogCWludAkJCW5rZXljb2x1bW5z OwogCisJLyoKKwkgKiBhcnJheSBmaWVsZHMgYXJlbid0IHJlYWxseSB3b3J0aCB0aGUgdHJv dWJsZSB0byBwcmludAorCSAqLwogCS8qCiAJICogY29sdW1uIG51bWJlcnMgb2YgaW5kZXgn cyBhdHRyaWJ1dGVzIGJvdGgga2V5IGFuZCBpbmNsdWRlZCBjb2x1bW5zLCBvcgogCSAqIDAK IAkgKi8KLQlpbnQJCSAgICppbmRleGtleXM7CisJaW50CQkgICAqaW5kZXhrZXlzIHBnX25v ZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkvKiBPSURzIG9mIGNvbGxhdGlvbnMgb2Yg aW5kZXggY29sdW1ucyAqLwotCU9pZAkJICAgKmluZGV4Y29sbGF0aW9uczsKKwlPaWQJCSAg ICppbmRleGNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwogCS8q IE9JRHMgb2Ygb3BlcmF0b3IgZmFtaWxpZXMgZm9yIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpv cGZhbWlseTsKKwlPaWQJCSAgICpvcGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CiAJLyogT0lEcyBvZiBvcGNsYXNzIGRlY2xhcmVkIGlucHV0IGRhdGEgdHlwZXMg Ki8KLQlPaWQJCSAgICpvcGNpbnR5cGU7CisJT2lkCQkgICAqb3BjaW50eXBlIHBnX25vZGVf YXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkvKiBPSURzIG9mIGJ0cmVlIG9wZmFtaWxpZXMs IGlmIG9yZGVyYWJsZSAqLwotCU9pZAkJICAgKnNvcnRvcGZhbWlseTsKKwlPaWQJCSAgICpz b3J0b3BmYW1pbHkgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwogCS8qIGlzIHNv cnQgb3JkZXIgZGVzY2VuZGluZz8gKi8KLQlib29sCSAgICpyZXZlcnNlX3NvcnQ7CisJYm9v bAkgICAqcmV2ZXJzZV9zb3J0IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkv KiBkbyBOVUxMcyBjb21lIGZpcnN0IGluIHRoZSBzb3J0IG9yZGVyPyAqLwotCWJvb2wJICAg Km51bGxzX2ZpcnN0OworCWJvb2wJICAgKm51bGxzX2ZpcnN0IHBnX25vZGVfYXR0cihyZWFk d3JpdGVfaWdub3JlKTsKIAkvKiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMgZm9yIGNvbHVt bnMgKi8KLQlieXRlYQkgICoqb3BjbGFzc29wdGlvbnM7CisJYnl0ZWEJICAqKm9wY2xhc3Nv cHRpb25zIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkvKiB3aGljaCBpbmRl eCBjb2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbiBpbmRleC1vbmx5IHNjYW4/ICovCi0JYm9v bAkgICAqY2FucmV0dXJuOworCWJvb2wJICAgKmNhbnJldHVybiBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7CiAJLyogT0lEIG9mIHRoZSBhY2Nlc3MgbWV0aG9kIChpbiBwZ19h bSkgKi8KIAlPaWQJCQlyZWxhbTsKLQkvKiBleHByZXNzaW9ucyBmb3Igbm9uLXNpbXBsZSBp bmRleCBjb2x1bW5zICovCi0JTGlzdAkgICAqaW5kZXhwcnM7CisJLyogZXhwcmVzc2lvbnMg Zm9yIG5vbi1zaW1wbGUgaW5kZXggY29sdW1uczsgcmVkdW5kYW50IHRvIHByaW50IHNpbmNl IHdlIHByaW50IGluZGV4dGxpc3QgKi8KKwlMaXN0CSAgICppbmRleHBycyBwZ19ub2RlX2F0 dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAJLyogcHJlZGljYXRlIGlmIGEgcGFydGlhbCBpbmRl eCwgZWxzZSBOSUwgKi8KIAlMaXN0CSAgICppbmRwcmVkOwogCkBAIC05ODksMTcgKzk5Miwx NyBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJICogUmVtYWluaW5nIGZpZWxkcyBhcmUgY29w aWVkIGZyb20gdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdAogCSAqIChJbmRleEFtUm91dGlu ZSkKIAkgKi8KLQlib29sCQlhbWNhbm9yZGVyYnlvcDsKLQlib29sCQlhbW9wdGlvbmFsa2V5 OwotCWJvb2wJCWFtc2VhcmNoYXJyYXk7Ci0JYm9vbAkJYW1zZWFyY2hudWxsczsKKwlib29s CQlhbWNhbm9yZGVyYnlvcCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CisJYm9v bAkJYW1vcHRpb25hbGtleSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CisJYm9v bAkJYW1zZWFyY2hhcnJheSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CisJYm9v bAkJYW1zZWFyY2hudWxscyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAJLyog ZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJCWFtaGFzZ2V0 dHVwbGU7CisJYm9vbAkJYW1oYXNnZXR0dXBsZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KLQli b29sCQlhbWhhc2dldGJpdG1hcDsKLQlib29sCQlhbWNhbnBhcmFsbGVsOworCWJvb2wJCWFt aGFzZ2V0Yml0bWFwIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKKwlib29sCQlh bWNhbnBhcmFsbGVsIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAkvKiBkb2Vz IEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWNhbm1hcmtwb3M7 CisJYm9vbAkJYW1jYW5tYXJrcG9zIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsK IAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNv c3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KIAl2b2lkCQkoKmFtY29zdGVzdGltYXRlKSAoKTsJ LyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogfTsKQEAgLTEwMjcsMTEgKzEwMzAsMTEgQEAg dHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleU9wdEluZm8KIAkvKiBudW1iZXIgb2YgY29sdW1u cyBpbiB0aGUgZm9yZWlnbiBrZXkgKi8KIAlpbnQJCQlua2V5czsKIAkvKiBjb2xzIGluIHJl ZmVyZW5jaW5nIHRhYmxlICovCi0JQXR0ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNd OworCUF0dHJOdW1iZXIJY29ua2V5W0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShua2V5cykpOwogCS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLwotCUF0 dHJOdW1iZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU107CisJQXR0ck51bWJlcgljb25ma2V5 W0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOwogCS8q IFBLID0gRksgb3BlcmF0b3IgT0lEcyAqLwotCU9pZAkJCWNvbnBmZXFvcFtJTkRFWF9NQVhf S0VZU107CisJT2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIo YXJyYXlfc2l6ZShua2V5cykpOwogCiAJLyoKIAkgKiBEZXJpdmVkIGluZm8gYWJvdXQgd2hl dGhlciBGSydzIGVxdWFsaXR5IGNvbmRpdGlvbnMgbWF0Y2ggdGhlIHF1ZXJ5OgpAQCAtMTA2 OCwxMCArMTA3MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0aXN0aWNFeHRJbmZvCiAJT2lk CQkJc3RhdE9pZDsKIAogCS8qIGluY2x1ZGVzIGNoaWxkIHJlbGF0aW9ucyAqLwotCWJvb2wJ CWluaGVyaXQ7CisJYm9vbAkJaW5oZXJpdCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9y ZSk7CiAKLQkvKiBiYWNrLWxpbmsgdG8gc3RhdGlzdGljJ3MgdGFibGUgKi8KLQlSZWxPcHRJ bmZvICpyZWw7CisJLyogYmFjay1saW5rIHRvIHN0YXRpc3RpYydzIHRhYmxlOyBkb24ndCBw cmludCwgaW5maW5pdGUgcmVjdXJzaW9uIG9uIHBsYW4gdHJlZSBkdW1wICovCisJUmVsT3B0 SW5mbyAqcmVsIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAogCS8qIHN0YXRp c3RpY3Mga2luZCBvZiB0aGlzIGVudHJ5ICovCiAJY2hhcgkJa2luZDsKQEAgLTEyNjUsNyAr MTI2OCw3IEBAIHR5cGVkZWYgc3RydWN0IFBhdGhUYXJnZXQKIAlMaXN0CSAgICpleHByczsK IAogCS8qIGNvcnJlc3BvbmRpbmcgc29ydC9ncm91cCByZWZub3MsIG9yIDAgKi8KLQlJbmRl eAkgICAqc29ydGdyb3VwcmVmczsKKwlJbmRleAkgICAqc29ydGdyb3VwcmVmcyBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShleHBycykpOwogCiAJLyogY29zdCBvZiBldmFsdWF0aW5nIHRo ZSBleHByZXNzaW9ucyAqLwogCVF1YWxDb3N0CWNvc3Q7CkBAIC0xMzQzLDEzICsxMzQ2LDEz IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgKIAlOb2RlVGFnCQlwYXRodHlwZTsKIAogCS8qIHRo ZSByZWxhdGlvbiB0aGlzIHBhdGggY2FuIGJ1aWxkICovCi0JUmVsT3B0SW5mbyAqcGFyZW50 OworCVJlbE9wdEluZm8gKnBhcmVudCBwZ19ub2RlX2F0dHIocGF0aF9oYWNrMSk7CiAKIAkv KiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNvc3QsIHdpZHRoICovCi0JUGF0aFRhcmdldCAqcGF0 aHRhcmdldDsKKwlQYXRoVGFyZ2V0ICpwYXRodGFyZ2V0IHBnX25vZGVfYXR0cihwYXRoX2hh Y2syKTsKIAogCS8qIHBhcmFtZXRlcml6YXRpb24gaW5mbywgb3IgTlVMTCBpZiBub25lICov Ci0JUGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbzsKKwlQYXJhbVBhdGhJbmZvICpwYXJhbV9p bmZvIHBnX25vZGVfYXR0cihwYXRoX2hhY2szKTsKIAogCS8qIGVuZ2FnZSBwYXJhbGxlbC1h d2FyZSBsb2dpYz8gKi8KIAlib29sCQlwYXJhbGxlbF9hd2FyZTsKQEAgLTIyMjQsNiArMjIy NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBMaW1pdFBhdGgKICAqIGFwcGx5IG9ubHkgb25lLiAg V2UgbWFyayBjbGF1c2VzIG9mIHRoaXMga2luZCBieSBzZXR0aW5nIHBhcmVudF9lYyB0bwog ICogcG9pbnQgdG8gdGhlIGdlbmVyYXRpbmcgRXF1aXZhbGVuY2VDbGFzcy4gIE11bHRpcGxl IGNsYXVzZXMgd2l0aCB0aGUgc2FtZQogICogcGFyZW50X2VjIGluIHRoZSBzYW1lIGpvaW4g YXJlIHJlZHVuZGFudC4KKyAqCisgKiBNb3N0IGZpZWxkcyBhcmUgaWdub3JlZCBmb3IgZXF1 YWxpdHksIHNpbmNlIHRoZXkgbWF5IG5vdCBiZSBzZXQgeWV0LCBhbmQKKyAqIHNob3VsZCBi ZSBkZXJpdmFibGUgZnJvbSB0aGUgY2xhdXNlIGFueXdheS4KKyAqCisgKiBwYXJlbnRfZWMs IGxlZnRfZWMsIHJpZ2h0X2VjIGFyZSBub3QgcHJpbnRlZCwgbGVzdCBpdCBsZWFkIHRvIGlu ZmluaXRlCisgKiByZWN1cnNpb24gaW4gcGxhbiB0cmVlIGR1bXAuCiAgKi8KIAogdHlwZWRl ZiBzdHJ1Y3QgUmVzdHJpY3RJbmZvCkBAIC0yMjQwLDIyICsyMjQ5LDIyIEBAIHR5cGVkZWYg c3RydWN0IFJlc3RyaWN0SW5mbwogCWJvb2wJCW91dGVyam9pbl9kZWxheWVkOwogCiAJLyog c2VlIGNvbW1lbnQgYWJvdmUgKi8KLQlib29sCQljYW5fam9pbjsKKwlib29sCQljYW5fam9p biBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHNlZSBjb21tZW50IGFib3Zl ICovCi0JYm9vbAkJcHNldWRvY29uc3RhbnQ7CisJYm9vbAkJcHNldWRvY29uc3RhbnQgcGdf bm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiB0cnVlIGlmIGtub3duIHRvIGNvbnRh aW4gbm8gbGVha2VkIFZhcnMgKi8KLQlib29sCQlsZWFrcHJvb2Y7CisJYm9vbAkJbGVha3By b29mIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogdG8gaW5kaWNhdGUgaWYg Y2xhdXNlIGNvbnRhaW5zIGFueSB2b2xhdGlsZSBmdW5jdGlvbnMuICovCi0JVm9sYXRpbGVG dW5jdGlvblN0YXR1cyBoYXNfdm9sYXRpbGU7CisJVm9sYXRpbGVGdW5jdGlvblN0YXR1cyBo YXNfdm9sYXRpbGUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBzZWUgY29t bWVudCBhYm92ZSAqLwogCUluZGV4CQlzZWN1cml0eV9sZXZlbDsKIAogCS8qIFRoZSBzZXQg b2YgcmVsaWRzICh2YXJub3MpIGFjdHVhbGx5IHJlZmVyZW5jZWQgaW4gdGhlIGNsYXVzZTog Ki8KLQlSZWxpZHMJCWNsYXVzZV9yZWxpZHM7CisJUmVsaWRzCQljbGF1c2VfcmVsaWRzIHBn X25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogVGhlIHNldCBvZiByZWxpZHMgcmVx dWlyZWQgdG8gZXZhbHVhdGUgdGhlIGNsYXVzZTogKi8KIAlSZWxpZHMJCXJlcXVpcmVkX3Jl bGlkczsKQEAgLTIyNzAsODQgKzIyNzksODkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVzdHJpY3RJ bmZvCiAJICogUmVsaWRzIGluIHRoZSBsZWZ0L3JpZ2h0IHNpZGUgb2YgdGhlIGNsYXVzZS4g IFRoZXNlIGZpZWxkcyBhcmUgc2V0IGZvcgogCSAqIGFueSBiaW5hcnkgb3BjbGF1c2UuCiAJ ICovCi0JUmVsaWRzCQlsZWZ0X3JlbGlkczsKLQlSZWxpZHMJCXJpZ2h0X3JlbGlkczsKKwlS ZWxpZHMJCWxlZnRfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworCVJlbGlk cwkJcmlnaHRfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyoKIAkg KiBNb2RpZmllZCBjbGF1c2Ugd2l0aCBSZXN0cmljdEluZm9zLiAgVGhpcyBmaWVsZCBpcyBO VUxMIHVubGVzcyBjbGF1c2UKIAkgKiBpcyBhbiBPUiBjbGF1c2UuCiAJICovCi0JRXhwcgkg ICAqb3JjbGF1c2U7CisJRXhwcgkgICAqb3JjbGF1c2UgcGdfbm9kZV9hdHRyKGVxdWFsX2ln bm9yZSk7CiAKIAkvKgogCSAqIEdlbmVyYXRpbmcgRXF1aXZhbGVuY2VDbGFzcy4gIFRoaXMg ZmllbGQgaXMgTlVMTCB1bmxlc3MgY2xhdXNlIGlzCiAJICogcG90ZW50aWFsbHkgcmVkdW5k YW50LgogCSAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKnBhcmVudF9lYzsKKwlFcXVpdmFsZW5j ZUNsYXNzICpwYXJlbnRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3JpdGVf aWdub3JlKTsKIAogCS8qCiAJICogY2FjaGUgc3BhY2UgZm9yIGNvc3QgYW5kIHNlbGVjdGl2 aXR5CiAJICovCiAKIAkvKiBldmFsIGNvc3Qgb2YgY2xhdXNlOyAtMSBpZiBub3QgeWV0IHNl dCAqLwotCVF1YWxDb3N0CWV2YWxfY29zdDsKKwlRdWFsQ29zdAlldmFsX2Nvc3QgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIHNlbGVjdGl2aXR5IGZvciAibm9y bWFsIiAoSk9JTl9JTk5FUikgc2VtYW50aWNzOyAtMSBpZiBub3QgeWV0IHNldDsgPjEKIAkg KiBtZWFucyBhIHJlZHVuZGFudCBjbGF1c2UKIAkgKi8KLQlTZWxlY3Rpdml0eSBub3JtX3Nl bGVjOworCVNlbGVjdGl2aXR5IG5vcm1fc2VsZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CiAJLyogc2VsZWN0aXZpdHkgZm9yIG91dGVyIGpvaW4gc2VtYW50aWNzOyAtMSBpZiBu b3QgeWV0IHNldCAqLwotCVNlbGVjdGl2aXR5IG91dGVyX3NlbGVjOworCVNlbGVjdGl2aXR5 IG91dGVyX3NlbGVjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyoKIAkgKiBv cGZhbWlsaWVzIGNvbnRhaW5pbmcgY2xhdXNlIG9wZXJhdG9yOyB2YWxpZCBpZiBjbGF1c2Ug aXMKIAkgKiBtZXJnZWpvaW5hYmxlLCBlbHNlIE5JTAogCSAqLwotCUxpc3QJICAgKm1lcmdl b3BmYW1pbGllczsKKwlMaXN0CSAgICptZXJnZW9wZmFtaWxpZXMgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIGNhY2hlIHNwYWNlIGZvciBtZXJnZWNsYXVzZSBw cm9jZXNzaW5nOyBOVUxMIGlmIG5vdCB5ZXQgc2V0CiAJICovCiAKIAkvKiBFcXVpdmFsZW5j ZUNsYXNzIGNvbnRhaW5pbmcgbGVmdGhhbmQgKi8KLQlFcXVpdmFsZW5jZUNsYXNzICpsZWZ0 X2VjOworCUVxdWl2YWxlbmNlQ2xhc3MgKmxlZnRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2ln bm9yZSByZWFkd3JpdGVfaWdub3JlKTsKIAkvKiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5p bmcgcmlnaHRoYW5kICovCi0JRXF1aXZhbGVuY2VDbGFzcyAqcmlnaHRfZWM7CisJRXF1aXZh bGVuY2VDbGFzcyAqcmlnaHRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3Jp dGVfaWdub3JlKTsKIAkvKiBFcXVpdmFsZW5jZU1lbWJlciBmb3IgbGVmdGhhbmQgKi8KLQlF cXVpdmFsZW5jZU1lbWJlciAqbGVmdF9lbTsKKwlFcXVpdmFsZW5jZU1lbWJlciAqbGVmdF9l bSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAkvKiBFcXVpdmFsZW5jZU1lbWJlciBm b3IgcmlnaHRoYW5kICovCi0JRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2VtOwotCS8qIGxp c3Qgb2YgTWVyZ2VTY2FuU2VsQ2FjaGUgc3RydWN0cyAqLwotCUxpc3QJICAgKnNjYW5zZWxf Y2FjaGU7CisJRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2VtIHBnX25vZGVfYXR0cihlcXVh bF9pZ25vcmUpOworCisJLyoKKwkgKiBMaXN0IG9mIE1lcmdlU2NhblNlbENhY2hlIHN0cnVj dHMuICBUaG9zZSBhcmVuJ3QgTm9kZXMsIHNvIGhhcmQgdG8KKwkgKiBjb3B5LiAgSWdub3Jp bmcgaXQgd2lsbCBoYXZlIHRoZSBlZmZlY3QgdGhhdCBjb3B5aW5nIHdpbGwganVzdCByZXNl dAorCSAqIHRoZSBjYWNoZS4KKwkgKi8KKwlMaXN0CSAgICpzY2Fuc2VsX2NhY2hlIHBnX25v ZGVfYXR0cihjb3B5X2lnbm9yZSBlcXVhbF9pZ25vcmUpOwogCiAJLyoKIAkgKiB0cmFuc2ll bnQgd29ya3NwYWNlIGZvciB1c2Ugd2hpbGUgY29uc2lkZXJpbmcgYSBzcGVjaWZpYyBqb2lu IHBhdGg7IFQgPQogCSAqIG91dGVyIHZhciBvbiBsZWZ0LCBGID0gb24gcmlnaHQKIAkgKi8K LQlib29sCQlvdXRlcl9pc19sZWZ0OworCWJvb2wJCW91dGVyX2lzX2xlZnQgcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIGNvcHkgb2YgY2xhdXNlIG9wZXJhdG9y OyB2YWxpZCBpZiBjbGF1c2UgaXMgaGFzaGpvaW5hYmxlLCBlbHNlCiAJICogSW52YWxpZE9p ZAogCSAqLwotCU9pZAkJCWhhc2hqb2lub3BlcmF0b3I7CisJT2lkCQkJaGFzaGpvaW5vcGVy YXRvciBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qCiAJICogY2FjaGUgc3Bh Y2UgZm9yIGhhc2hjbGF1c2UgcHJvY2Vzc2luZzsgLTEgaWYgbm90IHlldCBzZXQKIAkgKi8K IAkvKiBhdmcgYnVja2V0c2l6ZSBvZiBsZWZ0IHNpZGUgKi8KLQlTZWxlY3Rpdml0eSBsZWZ0 X2J1Y2tldHNpemU7CisJU2VsZWN0aXZpdHkgbGVmdF9idWNrZXRzaXplIHBnX25vZGVfYXR0 cihlcXVhbF9pZ25vcmUpOwogCS8qIGF2ZyBidWNrZXRzaXplIG9mIHJpZ2h0IHNpZGUgKi8K LQlTZWxlY3Rpdml0eSByaWdodF9idWNrZXRzaXplOworCVNlbGVjdGl2aXR5IHJpZ2h0X2J1 Y2tldHNpemUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAJLyogbGVmdCBzaWRlJ3Mg bW9zdCBjb21tb24gdmFsJ3MgZnJlcSAqLwotCVNlbGVjdGl2aXR5IGxlZnRfbWN2ZnJlcTsK KwlTZWxlY3Rpdml0eSBsZWZ0X21jdmZyZXEgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7 CiAJLyogcmlnaHQgc2lkZSdzIG1vc3QgY29tbW9uIHZhbCdzIGZyZXEgKi8KLQlTZWxlY3Rp dml0eSByaWdodF9tY3ZmcmVxOworCVNlbGVjdGl2aXR5IHJpZ2h0X21jdmZyZXEgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBoYXNoIGVxdWFsaXR5IG9wZXJhdG9ycyB1 c2VkIGZvciBtZW1vaXplIG5vZGVzLCBlbHNlIEludmFsaWRPaWQgKi8KLQlPaWQJCQlsZWZ0 X2hhc2hlcW9wZXJhdG9yOwotCU9pZAkJCXJpZ2h0X2hhc2hlcW9wZXJhdG9yOworCU9pZAkJ CWxlZnRfaGFzaGVxb3BlcmF0b3IgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CisJT2lk CQkJcmlnaHRfaGFzaGVxb3BlcmF0b3IgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiB9 IFJlc3RyaWN0SW5mbzsKIAogLyoKQEAgLTIzOTcsNiArMjQxMSwxNyBAQCB0eXBlZGVmIHN0 cnVjdCBNZXJnZVNjYW5TZWxDYWNoZQogICogQWx0aG91Z2ggdGhlIHBsYW5uZXIgdHJlYXRz IHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBub2RlIHR5cGUsIGl0IGlzIG5vdAogICogcmVjb2du aXplZCBieSB0aGUgcGFyc2VyIG9yIGV4ZWN1dG9yLCBzbyB3ZSBkZWNsYXJlIGl0IGhlcmUg cmF0aGVyIHRoYW4KICAqIGluIHByaW1ub2Rlcy5oLgorICoKKyAqIFdlIGludGVudGlvbmFs bHkgZG8gbm90IGNvbXBhcmUgcGhleHByLiAgVHdvIFBsYWNlSG9sZGVyVmFycyB3aXRoIHRo ZQorICogc2FtZSBJRCBhbmQgbGV2ZWxzdXAgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1YWwg ZXZlbiBpZiB0aGUgY29udGFpbmVkCisgKiBleHByZXNzaW9ucyBoYXZlIG1hbmFnZWQgdG8g bXV0YXRlIHRvIGRpZmZlcmVudCBzdGF0ZXMuICBUaGlzIHdpbGwKKyAqIGhhcHBlbiBkdXJp bmcgZmluYWwgcGxhbiBjb25zdHJ1Y3Rpb24gd2hlbiB0aGVyZSBhcmUgbmVzdGVkIFBIVnMs IHNpbmNlCisgKiB0aGUgaW5uZXIgUEhWIHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IGEgUGFyYW0g aW4gc29tZSBjb3BpZXMgb2YgdGhlIG91dGVyCisgKiBQSFYuICBBbm90aGVyIHdheSBpbiB3 aGljaCBpdCBjYW4gaGFwcGVuIGlzIHRoYXQgaW5pdHBsYW4gc3VibGlua3MKKyAqIGNvdWxk IGdldCByZXBsYWNlZCBieSBkaWZmZXJlbnRseS1udW1iZXJlZCBQYXJhbXMgd2hlbiBzdWJs aW5rIGZvbGRpbmcKKyAqIGlzIGRvbmUuICAoVGhlIGVuZCByZXN1bHQgb2Ygc3VjaCBhIHNp dHVhdGlvbiB3b3VsZCBiZSBzb21lCisgKiB1bnJlZmVyZW5jZWQgaW5pdHBsYW5zLCB3aGlj aCBpcyBhbm5veWluZyBidXQgbm90IHJlYWxseSBhIHByb2JsZW0uKSBPbgorICogdGhlIHNh bWUgcmVhc29uaW5nLCB0aGVyZSBpcyBubyBuZWVkIHRvIGV4YW1pbmUgcGhyZWxzLgogICov CiAKIHR5cGVkZWYgc3RydWN0IFBsYWNlSG9sZGVyVmFyCkBAIC0yNDA0LDEwICsyNDI5LDEw IEBAIHR5cGVkZWYgc3RydWN0IFBsYWNlSG9sZGVyVmFyCiAJRXhwcgkJeHByOwogCiAJLyog dGhlIHJlcHJlc2VudGVkIGV4cHJlc3Npb24gKi8KLQlFeHByCSAgICpwaGV4cHI7CisJRXhw cgkgICAqcGhleHByIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogYmFzZSBy ZWxpZHMgc3ludGFjdGljYWxseSB3aXRoaW4gZXhwciBzcmMgKi8KLQlSZWxpZHMJCXBocmVs czsKKwlSZWxpZHMJCXBocmVscyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8q IElEIGZvciBQSFYgKHVuaXF1ZSB3aXRoaW4gcGxhbm5lciBydW4pICovCiAJSW5kZXgJCXBo aWQ7CkBAIC0yNTcyLDcgKzI1OTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBBcHBlbmRSZWxJbmZv CiAJICogY2hpbGQgY29sdW1uIGlzIGRyb3BwZWQgb3IgZG9lc24ndCBleGlzdCBpbiB0aGUg cGFyZW50LgogCSAqLwogCWludAkJCW51bV9jaGlsZF9jb2xzOyAvKiBsZW5ndGggb2YgYXJy YXkgKi8KLQlBdHRyTnVtYmVyICpwYXJlbnRfY29sbm9zOworCUF0dHJOdW1iZXIgKnBhcmVu dF9jb2xub3MgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtX2NoaWxkX2NvbHMpKTsKIAog CS8qCiAJICogV2Ugc3RvcmUgdGhlIHBhcmVudCB0YWJsZSdzIE9JRCBoZXJlIGZvciBpbmhl cml0YW5jZSwgb3IgSW52YWxpZE9pZCBmb3IKQEAgLTI2NDMsNyArMjY2OCw3IEBAIHR5cGVk ZWYgc3RydWN0IFBsYWNlSG9sZGVySW5mbwogCS8qIElEIGZvciBQSCAodW5pcXVlIHdpdGhp biBwbGFubmVyIHJ1bikgKi8KIAlJbmRleAkJcGhpZDsKIAotCS8qIGNvcHkgb2YgUGxhY2VI b2xkZXJWYXIgdHJlZSAqLworCS8qIGNvcHkgb2YgUGxhY2VIb2xkZXJWYXIgdHJlZSAoc2hv dWxkIGJlIHJlZHVuZGFudCBmb3IgY29tcGFyaXNvbiwgY291bGQgYmUgaWdub3JlZCkgKi8K IAlQbGFjZUhvbGRlclZhciAqcGhfdmFyOwogCiAJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBl dmFsdWF0ZSB2YWx1ZSBhdCAqLwpAQCAtMjY3Nyw4ICsyNzAyLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgTWluTWF4QWdnSW5mbwogCS8qIGV4cHJlc3Npb24gd2UgYXJlIGFnZ3JlZ2F0aW5nIG9u ICovCiAJRXhwcgkgICAqdGFyZ2V0OwogCi0JLyogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFu bmluZyB0aGUgc3VicXVlcnkgKi8KLQlQbGFubmVySW5mbyAqc3Vicm9vdDsKKwkvKiBtb2Rp ZmllZCAicm9vdCIgZm9yIHBsYW5uaW5nIHRoZSBzdWJxdWVyeTsgbm90IHByaW50ZWQsIHRv byBsYXJnZSwgbm90IGludGVyZXN0aW5nIGVub3VnaCAqLworCVBsYW5uZXJJbmZvICpzdWJy b290IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAogCS8qIGFjY2VzcyBwYXRo IGZvciBzdWJxdWVyeSAqLwogCVBhdGgJICAgKnBhdGg7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CmluZGV4IGQ1YzBlYmU4NTkuLjA0ZjAxZDVlOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CkBAIC0yODYsMTYgKzI4NiwxNiBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCWlu dAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAq LwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CisJQXR0ck51bWJlciAqc29ydENvbElkeCBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBPSURzIG9mIG9wZXJh dG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpzb3J0T3BlcmF0b3JzOworCU9p ZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykp OwogCiAJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsK KwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMp KTsKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwotCWJvb2wJICAgKm51 bGxzRmlyc3Q7CisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShudW1Db2xzKSk7CiAKIAkvKiBJbmZvIGZvciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7 IE5VTEwgaWYgd2UncmUgbm90IGRvaW5nIHRoYXQgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1 bmVJbmZvICpwYXJ0X3BydW5lX2luZm87CkBAIC0zMjIsMTEgKzMyMiwxMSBAQCB0eXBlZGVm IHN0cnVjdCBSZWN1cnNpdmVVbmlvbgogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBp bmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKmR1cENvbElkeDsK KwlBdHRyTnVtYmVyICpkdXBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29s cykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9p ZAkJICAgKmR1cE9wZXJhdG9yczsKLQlPaWQJCSAgICpkdXBDb2xsYXRpb25zOworCU9pZAkJ ICAgKmR1cE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CisJ T2lkCQkgICAqZHVwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xz KSk7CiAKIAkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogCWxv bmcJCW51bUdyb3VwczsKQEAgLTgxMiwxNiArODEyLDE2IEBAIHR5cGVkZWYgc3RydWN0IE1l cmdlSm9pbgogCS8qIHRoZXNlIGFyZSBhcnJheXMsIGJ1dCBoYXZlIHRoZSBzYW1lIGxlbmd0 aCBhcyB0aGUgbWVyZ2VjbGF1c2VzIGxpc3Q6ICovCiAKIAkvKiBwZXItY2xhdXNlIE9JRHMg b2YgYnRyZWUgb3BmYW1pbGllcyAqLwotCU9pZAkJICAgKm1lcmdlRmFtaWxpZXM7CisJT2lk CQkgICAqbWVyZ2VGYW1pbGllcyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVz ZXMpKTsKIAogCS8qIHBlci1jbGF1c2UgT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lkCQkg ICAqbWVyZ2VDb2xsYXRpb25zOworCU9pZAkJICAgKm1lcmdlQ29sbGF0aW9ucyBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsKIAogCS8qIHBlci1jbGF1c2Ugb3Jk ZXJpbmcgKEFTQyBvciBERVNDKSAqLwotCWludAkJICAgKm1lcmdlU3RyYXRlZ2llczsKKwlp bnQJCSAgICptZXJnZVN0cmF0ZWdpZXMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobWVyZ2Vj bGF1c2VzKSk7CiAKIAkvKiBwZXItY2xhdXNlIG51bGxzIG9yZGVyaW5nICovCi0JYm9vbAkg ICAqbWVyZ2VOdWxsc0ZpcnN0OworCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJzdCBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsKIH0gTWVyZ2VKb2luOwogCiAvKiAt LS0tLS0tLS0tLS0tLS0tCkBAIC04NjMsMTAgKzg2MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBN ZW1vaXplCiAJaW50CQkJbnVtS2V5czsKIAogCS8qIGhhc2ggb3BlcmF0b3JzIGZvciBlYWNo IGtleSAqLwotCU9pZAkJICAgKmhhc2hPcGVyYXRvcnM7CisJT2lkCQkgICAqaGFzaE9wZXJh dG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1LZXlzKSk7CiAKIAkvKiBjb2xsYXRp b25zIGZvciBlYWNoIGtleSAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7CisJT2lkCQkgICAq Y29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1LZXlzKSk7CiAKIAkvKiBj YWNoZSBrZXlzIGluIHRoZSBmb3JtIG9mIGV4cHJzIGNvbnRhaW5pbmcgcGFyYW1ldGVycyAq LwogCUxpc3QJICAgKnBhcmFtX2V4cHJzOwpAQCAtOTA1LDE2ICs5MDUsMTYgQEAgdHlwZWRl ZiBzdHJ1Y3QgU29ydAogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGlu IHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CisJQXR0ck51 bWJlciAqc29ydENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAK IAkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpz b3J0T3BlcmF0b3JzOworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lk CQkgICAqY29sbGF0aW9uczsKKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihh cnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9u cyAqLwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiB9IFNvcnQ7CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0KQEAgLTk0MSwxMSArOTQxLDExIEBAIHR5cGVkZWYgc3RydWN0IEdyb3VwCiAJ aW50CQkJbnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0 ICovCi0JQXR0ck51bWJlciAqZ3JwQ29sSWR4OworCUF0dHJOdW1iZXIgKmdycENvbElkeCBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVy YXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZ3JwT3BlcmF0b3JzOwotCU9p ZAkJICAgKmdycENvbGxhdGlvbnM7CisJT2lkCQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKKwlPaWQJCSAgICpncnBDb2xsYXRpb25zIHBn X25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIH0gR3JvdXA7CiAKIC8qIC0tLS0t LS0tLS0tLS0tLQpAQCAtOTc2LDExICs5NzYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnCiAJ aW50CQkJbnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0 ICovCi0JQXR0ck51bWJlciAqZ3JwQ29sSWR4OworCUF0dHJOdW1iZXIgKmdycENvbElkeCBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVy YXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZ3JwT3BlcmF0b3JzOwotCU9p ZAkJICAgKmdycENvbGxhdGlvbnM7CisJT2lkCQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKKwlPaWQJCSAgICpncnBDb2xsYXRpb25zIHBn X25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIGVzdGltYXRlZCBudW1i ZXIgb2YgZ3JvdXBzIGluIGlucHV0ICovCiAJbG9uZwkJbnVtR3JvdXBzOwpAQCAtMTAxNSwy NSArMTAxNSwyNSBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2cKIAlpbnQJCQlwYXJ0TnVt Q29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0 ck51bWJlciAqcGFydENvbElkeDsKKwlBdHRyTnVtYmVyICpwYXJ0Q29sSWR4IHBnX25vZGVf YXR0cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRv cnMgZm9yIHBhcnRpdGlvbiBjb2x1bW5zICovCi0JT2lkCQkgICAqcGFydE9wZXJhdG9yczsK KwlPaWQJCSAgICpwYXJ0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKHBhcnRO dW1Db2xzKSk7CiAKIAkvKiBjb2xsYXRpb25zIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLwot CU9pZAkJICAgKnBhcnRDb2xsYXRpb25zOworCU9pZAkJICAgKnBhcnRDb2xsYXRpb25zIHBn X25vZGVfYXR0cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7CiAKIAkvKiBudW1iZXIgb2Yg Y29sdW1ucyBpbiBvcmRlcmluZyBjbGF1c2UgKi8KIAlpbnQJCQlvcmROdW1Db2xzOwogCiAJ LyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVyICpv cmRDb2xJZHg7CisJQXR0ck51bWJlciAqb3JkQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9z aXplKG9yZE51bUNvbHMpKTsKIAogCS8qIGVxdWFsaXR5IG9wZXJhdG9ycyBmb3Igb3JkZXJp bmcgY29sdW1ucyAqLwotCU9pZAkJICAgKm9yZE9wZXJhdG9yczsKKwlPaWQJCSAgICpvcmRP cGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwogCiAJLyog Y29sbGF0aW9ucyBmb3Igb3JkZXJpbmcgY29sdW1ucyAqLwotCU9pZAkJICAgKm9yZENvbGxh dGlvbnM7CisJT2lkCQkgICAqb3JkQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShvcmROdW1Db2xzKSk7CiAKIAkvKiBmcmFtZV9jbGF1c2Ugb3B0aW9ucywgc2VlIFdpbmRv d0RlZiAqLwogCWludAkJCWZyYW1lT3B0aW9uczsKQEAgLTEwODYsMTMgKzEwODYsMTMgQEAg dHlwZWRlZiBzdHJ1Y3QgVW5pcXVlCiAJaW50CQkJbnVtQ29sczsKIAogCS8qIHRoZWlyIGlu ZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAqdW5pcUNvbElkeDsK KwlBdHRyTnVtYmVyICp1bmlxQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNv bHMpKTsKIAogCS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlP aWQJCSAgICp1bmlxT3BlcmF0b3JzOworCU9pZAkJICAgKnVuaXFPcGVyYXRvcnMgcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogY29sbGF0aW9ucyBmb3IgZXF1 YWxpdHkgY29tcGFyaXNvbnMgKi8KLQlPaWQJCSAgICp1bmlxQ29sbGF0aW9uczsKKwlPaWQJ CSAgICp1bmlxQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7 CiB9IFVuaXF1ZTsKIAogLyogLS0tLS0tLS0tLS0tCkBAIC0xMTM3LDE2ICsxMTM3LDE2IEBA IHR5cGVkZWYgc3RydWN0IEdhdGhlck1lcmdlCiAJaW50CQkJbnVtQ29sczsKIAogCS8qIHRo ZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAqc29ydENv bElkeDsKKwlBdHRyTnVtYmVyICpzb3J0Q29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsKIAogCS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAq LwotCU9pZAkJICAgKnNvcnRPcGVyYXRvcnM7CisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBPSURzIG9mIGNvbGxh dGlvbnMgKi8KLQlPaWQJCSAgICpjb2xsYXRpb25zOworCU9pZAkJICAgKmNvbGxhdGlvbnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogTlVMTFMgRklSU1Qv TEFTVCBkaXJlY3Rpb25zICovCi0JYm9vbAkgICAqbnVsbHNGaXJzdDsKKwlib29sCSAgICpu dWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qCiAJ ICogcGFyYW0gaWQncyBvZiBpbml0cGxhbnMgd2hpY2ggYXJlIHJlZmVycmVkIGF0IGdhdGhl ciBtZXJnZSBvciBvbmUgb2YKQEAgLTExOTcsMTEgKzExOTcsMTEgQEAgdHlwZWRlZiBzdHJ1 Y3QgU2V0T3AKIAlpbnQJCQludW1Db2xzOwogCiAJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUg dGFyZ2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVyICpkdXBDb2xJZHg7CisJQXR0ck51bWJlciAq ZHVwQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIGVx dWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpkdXBPcGVy YXRvcnM7Ci0JT2lkCQkgICAqZHVwQ29sbGF0aW9uczsKKwlPaWQJCSAgICpkdXBPcGVyYXRv cnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOworCU9pZAkJICAgKmR1cENv bGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogd2hl cmUgaXMgdGhlIGZsYWcgY29sdW1uLCBpZiBhbnkgKi8KIAlBdHRyTnVtYmVyCWZsYWdDb2xJ ZHg7CkBAIC0xMjUzLDEzICsxMjUzLDEzIEBAIHR5cGVkZWYgc3RydWN0IExpbWl0CiAJaW50 CQkJdW5pcU51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlz dCAqLwotCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHg7CisJQXR0ck51bWJlciAqdW5pcUNvbElk eCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29scykpOwogCiAJLyogZXF1YWxp dHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKnVuaXFPcGVyYXRv cnM7CisJT2lkCQkgICAqdW5pcU9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1 bmlxTnVtQ29scykpOwogCiAJLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFyaXNv bnMgKi8KLQlPaWQJCSAgICp1bmlxQ29sbGF0aW9uczsKKwlPaWQJCSAgICp1bmlxQ29sbGF0 aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29scykpOwogfSBMaW1pdDsK IAogCkBAIC0xNDI1LDEzICsxNDI1LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvCiAJaW50CQkJbnBhcnRzOwogCiAJLyogc3VicGxhbiBpbmRleCBieSBw YXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCi0JaW50CQkgICAqc3VicGxhbl9tYXA7CisJaW50 CQkgICAqc3VicGxhbl9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRzKSk7CiAK IAkvKiBzdWJwYXJ0IGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEgKi8KLQlpbnQJ CSAgICpzdWJwYXJ0X21hcDsKKwlpbnQJCSAgICpzdWJwYXJ0X21hcCBwZ19ub2RlX2F0dHIo YXJyYXlfc2l6ZShucGFydHMpKTsKIAogCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24g aW5kZXgsIG9yIDAgKi8KLQlPaWQJCSAgICpyZWxpZF9tYXA7CisJT2lkCQkgICAqcmVsaWRf bWFwIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwogCiAJLyoKIAkgKiBpbml0 aWFsX3BydW5pbmdfc3RlcHMgc2hvd3MgaG93IHRvIHBydW5lIGR1cmluZyBleGVjdXRvciBz dGFydHVwIChpLmUuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA3MzJjMDBjMDk4Li5m NWQ3NTZkNDlmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtNjQsOCArNjQsOSBAQCB0 eXBlZGVmIHN0cnVjdCBSYW5nZVZhcgogewogCU5vZGVUYWcJCXR5cGU7CiAKLQkvKiB0aGUg Y2F0YWxvZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEwgKi8KLQljaGFyCSAgICpjYXRhbG9n bmFtZTsKKwkvKiB0aGUgY2F0YWxvZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEw7IGlnbm9y ZWQgZm9yIHJlYWQvd3JpdGUsIHNpbmNlIGl0CisJICogaXMgcHJlc2VudGx5IG5vdCBzZW1h bnRpY2FsbHkgbWVhbmluZ2Z1bCAqLworCWNoYXIJICAgKmNhdGFsb2duYW1lIHBnX25vZGVf YXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAogCS8qIHRoZSBzY2hlbWEgbmFtZSwgb3IgTlVM TCAqLwogCWNoYXIJICAgKnNjaGVtYW5hbWU7CkBAIC0yMzMsMTAgKzIzNCwxNSBAQCB0eXBl ZGVmIHN0cnVjdCBWYXIKIAkgKi8KIAlJbmRleAkJdmFybGV2ZWxzdXA7CiAKKwkvKgorCSAq IHZhcm5vc3luL3ZhcmF0dG5vc3luIGFyZSBpZ25vcmVkIGZvciBlcXVhbGl0eSwgYmVjYXVz ZSBWYXJzIHdpdGgKKwkgKiBkaWZmZXJlbnQgc3ludGFjdGljIGlkZW50aWZpZXJzIGFyZSBz ZW1hbnRpY2FsbHkgdGhlIHNhbWUgYXMgbG9uZyBhcworCSAqIHRoZWlyIHZhcm5vL3ZhcmF0 dG5vIG1hdGNoLgorCSAqLwogCS8qIHN5bnRhY3RpYyByZWxhdGlvbiBpbmRleCAoMCBpZiB1 bmtub3duKSAqLwotCUluZGV4CQl2YXJub3N5bjsKKwlJbmRleAkJdmFybm9zeW4gcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAJLyogc3ludGFjdGljIGF0dHJpYnV0ZSBudW1iZXIg Ki8KLQlBdHRyTnVtYmVyCXZhcmF0dG5vc3luOworCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW4g cGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3Ig LTEgaWYgdW5rbm93biAqLwogCWludAkJCWxvY2F0aW9uOwpAQCAtMzc0LDggKzM4MCw4IEBA IHR5cGVkZWYgc3RydWN0IEFnZ3JlZgogCS8qIE9JRCBvZiBjb2xsYXRpb24gdGhhdCBmdW5j dGlvbiBzaG91bGQgdXNlICovCiAJT2lkCQkJaW5wdXRjb2xsaWQ7CiAKLQkvKiB0eXBlIE9p ZCBvZiBhZ2dyZWdhdGUncyB0cmFuc2l0aW9uIHZhbHVlICovCi0JT2lkCQkJYWdndHJhbnN0 eXBlOworCS8qIHR5cGUgT2lkIG9mIGFnZ3JlZ2F0ZSdzIHRyYW5zaXRpb24gdmFsdWU7IGln bm9yZWQgZm9yIGVxdWFsIHNpbmNlIGl0IG1pZ2h0IG5vdCBiZSBzZXQgeWV0ICovCisJT2lk CQkJYWdndHJhbnN0eXBlIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogdHlw ZSBPaWRzIG9mIGRpcmVjdCBhbmQgYWdncmVnYXRlZCBhcmdzICovCiAJTGlzdAkgICAqYWdn YXJndHlwZXM7CkBAIC00NTUsMTAgKzQ2MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGlu Z0Z1bmMKIAlMaXN0CSAgICphcmdzOwogCiAJLyogcmVzc29ydGdyb3VwcmVmcyBvZiBhcmd1 bWVudHMgKi8KLQlMaXN0CSAgICpyZWZzOworCUxpc3QJICAgKnJlZnMgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBhY3R1YWwgY29sdW1uIHBvc2l0aW9ucyBzZXQgYnkg cGxhbm5lciAqLwotCUxpc3QJICAgKmNvbHM7CisJTGlzdAkgICAqY29scyBwZ19ub2RlX2F0 dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHNhbWUgYXMgQWdncmVmLmFnZ2xldmVsc3VwICov CiAJSW5kZXgJCWFnZ2xldmVsc3VwOwpAQCAtNjM0LDcgKzY0MCw3IEBAIHR5cGVkZWYgc3Ry dWN0IE9wRXhwcgogCU9pZAkJCW9wbm87CiAKIAkvKiBQR19QUk9DIE9JRCBvZiB1bmRlcmx5 aW5nIGZ1bmN0aW9uICovCi0JT2lkCQkJb3BmdW5jaWQ7CisJT2lkCQkJb3BmdW5jaWQgcGdf bm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsKIAogCS8qIFBHX1RZUEUgT0lEIG9m IHJlc3VsdCB2YWx1ZSAqLwogCU9pZAkJCW9wcmVzdWx0dHlwZTsKQEAgLTY5OCw2ICs3MDQs MTAgQEAgdHlwZWRlZiBPcEV4cHIgTnVsbElmRXhwcjsKICAqIGNvcnJlc3BvbmRpbmcgZnVu Y3Rpb24gYW5kIHdvbid0IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbi4gIEZvcgogICogbm9u LWhhc2h0YWJsZSBiYXNlZCBOT1QgSU5zLCBuZWdmdW5jaWQgd2lsbCBiZSBzZXQgdG8gSW52 YWxpZE9pZC4gIFNlZQogICogY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wKCkuCisgKgor ICogU2ltaWxhciB0byBPcEV4cHIsIG9wZnVuY2lkLCBoYXNoZnVuY2lkLCBhbmQgbmVnZnVu Y2lkIGFyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGZpbGxlZCBpbiByaWdodCBhd2F5LCBzbyB3 aWxsIGJlIGlnbm9yZWQgZm9yIGVxdWFsaXR5IGlmIHRoZXkgYXJlIG5vdCBzZXQKKyAqIHll dC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgU2NhbGFyQXJyYXlPcEV4cHIKIHsKQEAgLTcwNywx MyArNzE3LDEzIEBAIHR5cGVkZWYgc3RydWN0IFNjYWxhckFycmF5T3BFeHByCiAJT2lkCQkJ b3BubzsKIAogCS8qIFBHX1BST0MgT0lEIG9mIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQlP aWQJCQlvcGZ1bmNpZDsKKwlPaWQJCQlvcGZ1bmNpZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdu b3JlX2lmX3plcm8pOwogCiAJLyogUEdfUFJPQyBPSUQgb2YgaGFzaCBmdW5jIG9yIEludmFs aWRPaWQgKi8KLQlPaWQJCQloYXNoZnVuY2lkOworCU9pZAkJCWhhc2hmdW5jaWQgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsKIAogCS8qIFBHX1BST0MgT0lEIG9mIG5l Z2F0b3Igb2Ygb3BmdW5jaWQgZnVuY3Rpb24gb3IgSW52YWxpZE9pZC4gIFNlZSBhYm92ZSAq LwotCU9pZAkJCW5lZ2Z1bmNpZDsKKwlPaWQJCQluZWdmdW5jaWQgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZV9pZl96ZXJvKTsKIAogCS8qIHRydWUgZm9yIEFOWSwgZmFsc2UgZm9yIEFM TCAqLwogCWJvb2wJCXVzZU9yOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVs LmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCAxODk2YTlhMDZkLi5lY2U0YWNl NTFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9yZWwuaApAQCAtMjczLDkgKzI3Myw5IEBAIHR5cGVkZWYgc3RydWN0IEZv cmVpZ25LZXlDYWNoZUluZm8KIAlPaWQJCQljb25mcmVsaWQ7CQkvKiByZWxhdGlvbiByZWZl cmVuY2VkIGJ5IHRoZSBmb3JlaWduIGtleSAqLwogCWludAkJCW5rZXlzOwkJCS8qIG51bWJl ciBvZiBjb2x1bW5zIGluIHRoZSBmb3JlaWduIGtleSAqLwogCS8qIHRoZXNlIGFycmF5cyBl YWNoIGhhdmUgbmtleXMgdmFsaWQgZW50cmllczogKi8KLQlBdHRyTnVtYmVyCWNvbmtleVtJ TkRFWF9NQVhfS0VZU107IC8qIGNvbHMgaW4gcmVmZXJlbmNpbmcgdGFibGUgKi8KLQlBdHRy TnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNdOwkvKiBjb2xzIGluIHJlZmVyZW5jZWQg dGFibGUgKi8KLQlPaWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdOwkvKiBQSyA9IEZL IG9wZXJhdG9yIE9JRHMgKi8KKwlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU10g cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsgLyogY29scyBpbiByZWZlcmVuY2lu ZyB0YWJsZSAqLworCUF0dHJOdW1iZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxl ICovCisJT2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShua2V5cykpOwkvKiBQSyA9IEZLIG9wZXJhdG9yIE9JRHMgKi8KIH0gRm9yZWln bktleUNhY2hlSW5mbzsKIAogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlv bi5wbSBiL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCmluZGV4IGQzMGU4ZmNiMTEuLjI4 NmI1ODEwYzkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCisrKyBi L3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCkBAIC04NDEsNiArODQxLDUyIEBAIEVPRgog CQljbG9zZSgkY2hzKTsKIAl9CiAKKwlpZiAoSXNOZXdlcignc3JjL2JhY2tlbmQvbm9kZXMv bm9kZS1zdXBwb3J0LXN0YW1wJywKKwkJJ3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1 cHBvcnQucGwnKSkKKwl7CisJCSMgWFhYIGR1cGxpY2F0ZXMgc3JjL2JhY2tlbmQvbm9kZXMv TWFrZWZpbGUKKworCQlteSBAbm9kZV9oZWFkZXJzID0gcXcoCisJCQlub2Rlcy9ub2Rlcy5o CisJCQlub2Rlcy9leGVjbm9kZXMuaAorCQkJbm9kZXMvcGxhbm5vZGVzLmgKKwkJCW5vZGVz L3ByaW1ub2Rlcy5oCisJCQlub2Rlcy9wYXRobm9kZXMuaAorCQkJbm9kZXMvZXh0ZW5zaWJs ZS5oCisJCQlub2Rlcy9wYXJzZW5vZGVzLmgKKwkJCW5vZGVzL3JlcGxub2Rlcy5oCisJCQlu b2Rlcy92YWx1ZS5oCisJCQljb21tYW5kcy90cmlnZ2VyLmgKKwkJCWNvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaAorCQkJZm9yZWlnbi9mZHdhcGkuaAorCQkJYWNjZXNzL2FtYXBpLmgKKwkJ CWFjY2Vzcy90YWJsZWFtLmgKKwkJCWFjY2Vzcy90c21hcGkuaAorCQkJdXRpbHMvcmVsLmgK KwkJCW5vZGVzL3N1cHBvcnRub2Rlcy5oCisJCQlleGVjdXRvci90dXB0YWJsZS5oCisJCQlu b2Rlcy9sb2Nrb3B0aW9ucy5oCisJCQlhY2Nlc3Mvc2Rpci5oCisJCSk7CisKKwkJY2hkaXIo J3NyYy9iYWNrZW5kL25vZGVzJyk7CisKKwkJbXkgQG5vZGVfZmlsZXMgPSBtYXAgeyAiLi4v Li4vLi4vc3JjL2luY2x1ZGUvJF8iIH0gQG5vZGVfaGVhZGVyczsKKworCQlzeXN0ZW0oInBl cmwgZ2VuX25vZGVfc3VwcG9ydC5wbCBAbm9kZV9maWxlcyIpOworCQlvcGVuKG15ICRmLCAn PicsICdub2RlLXN1cHBvcnQtc3RhbXAnKSB8fCBjb25mZXNzICJDb3VsZCBub3QgdG91Y2gg bm9kZS1zdXBwb3J0LXN0YW1wIjsKKwkJY2xvc2UoJGYpOworCQljaGRpcignLi4vLi4vLi4n KTsKKwl9CisKKwlpZiAoSXNOZXdlcigKKwkJCSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFn cy5oJywKKwkJCSdzcmMvYmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJykpCisJeworCQljb3B5 RmlsZSgnc3JjL2JhY2tlbmQvbm9kZXMvbm9kZXRhZ3MuaCcsCisJCQknc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXRhZ3MuaCcpOworCX0KKwogCW9wZW4obXkgJG8sICc+JywgImRvYy9zcmMv c2dtbC92ZXJzaW9uLnNnbWwiKQogCSAgfHwgY3JvYWsgIkNvdWxkIG5vdCB3cml0ZSB0byB2 ZXJzaW9uLnNnbWxcbiI7CiAJcHJpbnQgJG8gPDxFT0Y7CgpiYXNlLWNvbW1pdDogNTVmNDgw Mjc4NWY2NmE1ODRjMDVkY2E0MGU1ZDliMjU0OTE2NzRiMgotLSAKMi4zNi4xCgo= --------------mCTvmxfwuIqoAsxDNkyaHd1p--