From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1E7DEC3ABC9 for ; Wed, 21 May 2025 12:50:51 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uHiuB-0005BG-Bf; Wed, 21 May 2025 08:50:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHitk-00051Q-Dp for grub-devel@gnu.org; Wed, 21 May 2025 08:50:23 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHitc-0004WR-9g for grub-devel@gnu.org; Wed, 21 May 2025 08:50:14 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54L6ISr9001429; Wed, 21 May 2025 12:49:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=16PxI8 VLrES0Qqn/1lXlh2JC6vn0A67RErgLjV31JbE=; b=ULCdQ35iuveQBlcK769umA VEdH4nWvy4RIxf/2Azz+Pw8o97XZuIFg9avOZkeAT635Xmm46MSXD3CFLgFc619b Fcy4ac320SZERsXWTDd7RuP7O0/0m4OFqwSdvt25bN1Kk14F/Rosk3JKoMYX4Fnd 77wP2obIUOuRXSrA+2MJMKusJ1Zq8fDjkeqXq7j8LCXvQ2izttN031L8jbgtzJao oqHU1VPNv36G/ZkmPE9j4rwMRRl4hQkmKd7r8yp4IrGk66dm0Y7RqAdYJx9oIZGQ Ar/PXwQb8K1+uldjAp8qM6NtG1k/I1ta8XtVOCaVRhamDHemsZD95UfQcTo31gWg == Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46s9esssf5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 21 May 2025 12:49:58 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54L9u10L010595; Wed, 21 May 2025 12:49:57 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46rwnmc7es-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 21 May 2025 12:49:57 +0000 Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54LCnuDH27525650 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 21 May 2025 12:49:56 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F05DB58067; Wed, 21 May 2025 12:49:55 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E016758061; Wed, 21 May 2025 12:49:54 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 21 May 2025 12:49:54 +0000 (GMT) MIME-Version: 1.0 Date: Wed, 21 May 2025 18:19:54 +0530 From: sudhakar To: Gary Lin Cc: The development of GNU GRUB , dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ltcgcw@linux.vnet.ibm.com, ssrish@linux.ibm.com Subject: Re: [PATCH v2 10/21] appended signatures: support verifying appended signatures In-Reply-To: References: <20250326193242.703506-1-sudhakar@linux.ibm.com> <20250326193242.703506-11-sudhakar@linux.ibm.com> Message-ID: <419f6f16ff51df3e346fb90ee5f04354@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDEyMiBTYWx0ZWRfX5WL6ejsZRftq sNLz5CEHdafp3y5qsHUDVnNBIdcv/Hi8vGcFYZR5sOS6lEYN5T0TtTE/BWQJcbKD5DBDJFHV0HM sFx7fxoERNAMPUa9Wf3R6Z2YnbmLEaHfWFEjGgQDVLl89E9ZTnI2cUmtqKPzKeR5AN0v40/y0KW 2OUOsoYVYhP3hEqhYSTX5b09EwGJwdBqf5dlAPmSwHeR5slSNJXyJ5RMFkhUevASaW6kVJp4hhe /s50LoL4peu4BjRltzTByBJawPaQ3FpTaqbsaTsIwLIm4aqIyFHfVMq5UUsER4VhYdj1fyiYCF3 gPGnRjtRNTq1SlZchQrujQ5SAN1y7dGQycdIrpZ5j62QXt/ySBko963EExzP9lqPYqE/0MnSXbT PPzZJnoGD5tn7cE4tIn7ECroOujPT4ftC6u4LU2VrtLqASawiyrFJs+ywETqvv/raJCVbDNM X-Proofpoint-ORIG-GUID: dWtaMAxKZmj_yaTryHKKQzeLzeun8zeo X-Proofpoint-GUID: dWtaMAxKZmj_yaTryHKKQzeLzeun8zeo X-Authority-Analysis: v=2.4 cv=PsWTbxM3 c=1 sm=1 tr=0 ts=682dcbf7 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=P3gBtMhvHniIQFvGE30A:9 a=CjuIK1q_8ugA:10 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-21_04,2025-05-20_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 mlxlogscore=999 impostorscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 mlxscore=0 priorityscore=1501 phishscore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505210122 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org T24gMjAyNS0wNC0xNSAwOToxNiwgR2FyeSBMaW4gd3JvdGU6Cj4gT24gVGh1LCBNYXIgMjcsIDIw MjUgYXQgMDE6MDI6MzFBTSArMDUzMCwgU3VkaGFrYXIgS3VwcHVzYW15IHdyb3RlOgo+PiBGcm9t OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5zLm5ldD4KPj4gCj4+IEJ1aWxkaW5nIG9uIHRoZSBw YXJzZXJzIGFuZCB0aGUgYWJpbGl0eSB0byBlbWJlZCB4NTA5IGNlcnRpZmljYXRlcywgYXMKPj4g d2VsbCBhcyB0aGUgZXhpc3RpbmcgZ2NyeXB0IGZ1bmN0aW9uYWxpdHksIGFkZCBhIG1vZHVsZSBm b3IgdmVyaWZ5aW5nCj4+IGFwcGVuZGVkIHNpZ25hdHVyZXMuCj4+IAo+PiBUaGlzIGluY2x1ZGVz IGEgdmVyaWZpZXIgdGhhdCByZXF1aXJlcyB0aGF0IExpbnV4IGtlcm5lbHMgYW5kIGdydWIgCj4+ IG1vZHVsZXMKPj4gaGF2ZSBhcHBlbmRlZCBzaWduYXR1cmVzLCBhbmQgY29tbWFuZHMgdG8gbWFu YWdlIHRoZSBsaXN0IG9mIHRydXN0ZWQKPj4gY2VydGlmaWNhdGVzIGZvciB2ZXJpZmljYXRpb24u Cj4+IAo+PiBWZXJpZmljYXRpb24gbXVzdCBiZSBlbmFibGVkIGJ5IHNldHRpbmcgY2hlY2tfYXBw ZW5kZWRfc2lnbmF0dXJlcy4gSWYKPj4gR1JVQiBpcyBsb2NrZWQgZG93biB3aGVuIHRoZSBtb2R1 bGUgaXMgbG9hZGVkLCB2ZXJpZmljYXRpb24gd2lsbCBiZQo+PiBlbmFibGVkIGFuZCBsb2NrZWQg YXV0b21hdGljYWxseS4KPj4gCj4+IEFzIHdpdGggdGhlIFBHUCB2ZXJpZmllciwgaXQgaXMgbm90 IGEgY29tcGxldGUgc2VjdXJlLWJvb3Qgc29sdXRpb246Cj4+IG90aGVyIG1lY2hhbmlzbXMsIHN1 Y2ggYXMgYSBwYXNzd29yZCBvciBsb2NrZG93biwgbXVzdCBiZSB1c2VkIHRvIAo+PiBlbnN1cmUK Pj4gdGhhdCBhIHVzZXIgY2Fubm90IGRyb3AgdG8gdGhlIGdydWIgc2hlbGwgYW5kIGRpc2FibGUg dmVyaWZpY2F0aW9uLgo+IAo+IElNTywgdGhlIGNoYW5nZXMgZm9yIGxpYnRhc24xLmggc2hvdWxk IGJlIG1lcmdlZCBpbnRvIHRoZSBwcmV2aW91cyB0d28KPiBwYXRjaGVzIHNpbmNlIHRoZSBwYXRo IHNob3VsZCBiZSBzZXQgY29ycmVjdGx5IGluIHRoZSBmaXJzdCBwbGFjZS4KPiAKPiBHYXJ5IExp bgo+IApIaSBHYXJ5IExpbiwKVGhhbmsgeW91IHNvIG11Y2ggZm9yIGEgcmV2aWV3IS4gSSB3aWxs IGRvIGl0LgoKPj4gCj4+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBBeHRlbnMgPGRqYUBheHRlbnMu bmV0Pgo+PiBTaWduZWQtb2ZmLWJ5OiBTdWRoYWthciBLdXBwdXNhbXkgPHN1ZGhha2FyQGxpbnV4 LmlibS5jb20+Cj4+IFJldmlld2VkLWJ5OiBTdGVmYW4gQmVyZ2VyIDxzdGVmYW5iQGxpbnV4Lmli bS5jb20+Cj4+IFJldmlld2VkLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j b20+Cj4+IC0tLQo+PiAgZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmICAgICAgICAgICAgICAg ICAgIHwgIDE0ICsKPj4gIGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNp Zy5jICB8IDYxOCAKPj4gKysrKysrKysrKysrKysrKysrCj4+ICBncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCAgfCAgIDIgKy0KPj4gIGdydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jICAgICB8ICAgMiArLQo+PiAgLi4uL2NvbW1hbmRzL2Fw cGVuZGVkc2lnL2dudXRsc19hc24xX3RhYi5jICAgIHwgICAyICstCj4+ICAuLi4vY29tbWFuZHMv YXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jICAgICAgfCAgIDIgKy0KPj4gIGdydWItY29yZS9j b21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMgICAgICAgICB8ICAgMiArLQo+PiAgaW5jbHVkZS9n cnViL2ZpbGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPj4gIDggZmlsZXMg Y2hhbmdlZCwgNjM5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKPj4g Cj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUv TWFrZWZpbGUuY29yZS5kZWYKPj4gaW5kZXggNjBkYjJhZGM1Li5kNjkzOTg2YzYgMTAwNjQ0Cj4+ IC0tLSBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+PiArKysgYi9ncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYKPj4gQEAgLTk3OSw2ICs5NzksMjAgQEAgbW9kdWxlID0gewo+PiAgICBj cHBmbGFncyA9ICctSSQoc3JjZGlyKS9saWIvcG9zaXhfd3JhcCc7Cj4+ICB9Owo+PiAKPj4gK21v ZHVsZSA9IHsKPj4gKyAgbmFtZSA9IGFwcGVuZGVkc2lnOwo+PiArICBjb21tb24gPSBjb21tYW5k cy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jOwo+PiArICBjb21tb24gPSBjb21tYW5kcy9hcHBl bmRlZHNpZy94NTA5LmM7Cj4+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3 LmM7Cj4+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1dGlsLmM7Cj4+ICsg IGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3RhYi5jOwo+PiArICBj b21tb24gPSBjb21tYW5kcy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmM7Cj4+ICsKPj4gKyAg Ly8gcG9zaXggd3JhcHBlciByZXF1aXJlZCBmb3IgZ2NyeSB0byBnZXQgc3lzL3R5cGVzLmgKPj4g KyAgY2ZsYWdzID0gJyQoQ0ZMQUdTX1BPU0lYKSc7Cj4+ICsgIGNwcGZsYWdzID0gJy1JJChzcmNk aXIpL2xpYi9wb3NpeF93cmFwIAo+PiAtSSQoc3JjZGlyKS9saWIvbGlidGFzbjEtZ3J1Yic7Cj4+ ICt9Owo+PiArCj4+ICBtb2R1bGUgPSB7Cj4+ICAgIG5hbWUgPSBoZHBhcm07Cj4+ICAgIGNvbW1v biA9IGNvbW1hbmRzL2hkcGFybS5jOwo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRz L2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMgCj4+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVu ZGVkc2lnL2FwcGVuZGVkc2lnLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMDAwLi5jYmQyMjdhM2MKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9ncnViLWNvcmUvY29t bWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwo+PiBAQCAtMCwwICsxLDYxOCBAQAo+PiAr LyoKPj4gKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCj4+ICsgKiAgQ29w eXJpZ2h0IChDKSAyMDIwLCAyMDIxLCAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j Lgo+PiArICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBJQk0gQ29ycG9yYXRpb24K Pj4gKyAqCj4+ICsgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+ICsgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgCj4+IGJ5Cj4+ICsgKiAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKPj4gKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4g KyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCj4+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPj4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPj4gKyAq ICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KPj4gKyNpbmNs dWRlIDxncnViL21pc2MuaD4KPj4gKyNpbmNsdWRlIDxncnViL21tLmg+Cj4+ICsjaW5jbHVkZSA8 Z3J1Yi9lcnIuaD4KPj4gKyNpbmNsdWRlIDxncnViL2RsLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9m aWxlLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9jb21tYW5kLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9j cnlwdG8uaD4KPj4gKyNpbmNsdWRlIDxncnViL3BrY3MxX3YxNS5oPgo+PiArI2luY2x1ZGUgPGdy dWIvaTE4bi5oPgo+PiArI2luY2x1ZGUgPGdydWIvZ2NyeXB0L2djcnlwdC5oPgo+PiArI2luY2x1 ZGUgPGdydWIva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9leHRjbWQuaD4KPj4gKyNpbmNs dWRlIDxncnViL3ZlcmlmeS5oPgo+PiArI2luY2x1ZGUgPGxpYnRhc24xLmg+Cj4+ICsjaW5jbHVk ZSA8Z3J1Yi9lbnYuaD4KPj4gKyNpbmNsdWRlIDxncnViL2xvY2tkb3duLmg+Cj4+ICsKPj4gKyNp bmNsdWRlICJhcHBlbmRlZHNpZy5oIgo+PiArCj4+ICtHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMr Iik7Cj4+ICsKPj4gK2NvbnN0IGNoYXIgbWFnaWNbXSA9ICJ+TW9kdWxlIHNpZ25hdHVyZSBhcHBl bmRlZH5cbiI7Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyBleHRyYWN0ZWQg ZnJvbSBzY3JpcHRzL3NpZ24tZmlsZS5jIGluIHRoZSBsaW51eCAKPj4ga2VybmVsCj4+ICsgKiBz b3VyY2UuIEl0IHdhcyBsaWNlbnNlZCBhcyBMR1BMdjIuMSssIHdoaWNoIGlzIEdQTHYzKyBjb21w YXRpYmxlLgo+PiArICovCj4+ICtzdHJ1Y3QgbW9kdWxlX3NpZ25hdHVyZQo+PiArewo+PiArICBn cnViX3VpbnQ4X3QgYWxnbzsgICAgICAgLyogUHVibGljLWtleSBjcnlwdG8gYWxnb3JpdGhtIFsw XSAqLwo+PiArICBncnViX3VpbnQ4X3QgaGFzaDsgICAgICAgLyogRGlnZXN0IGFsZ29yaXRobSBb MF0gKi8KPj4gKyAgZ3J1Yl91aW50OF90IGlkX3R5cGU7ICAgIC8qIEtleSBpZGVudGlmaWVyIHR5 cGUgW1BLRVlfSURfUEtDUzddICovCj4+ICsgIGdydWJfdWludDhfdCBzaWduZXJfbGVuOyAvKiBM ZW5ndGggb2Ygc2lnbmVyJ3MgbmFtZSBbMF0gKi8KPj4gKyAgZ3J1Yl91aW50OF90IGtleV9pZF9s ZW47IC8qIExlbmd0aCBvZiBrZXkgaWRlbnRpZmllciBbMF0gKi8KPj4gKyAgZ3J1Yl91aW50OF90 IF9fcGFkWzNdOwo+PiArICBncnViX3VpbnQzMl90IHNpZ19sZW47ICAgLyogTGVuZ3RoIG9mIHNp Z25hdHVyZSBkYXRhICovCj4+ICt9IEdSVUJfUEFDS0VEOwo+PiArCj4+ICsvKiBUaGlzIHJlcHJl c2VudHMgYW4gZW50aXJlLCBwYXJzZWQsIGFwcGVuZGVkIHNpZ25hdHVyZSAqLwo+PiArc3RydWN0 IGdydWJfYXBwZW5kZWRfc2lnbmF0dXJlCj4+ICt7Cj4+ICsgIGdydWJfc2l6ZV90IHNpZ25hdHVy ZV9sZW47ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIFBLQ1MjNyBkYXRhICsgCj4+IG1ldGFkYXRh ICsgbWFnaWMgKi8KPj4gKyAgc3RydWN0IG1vZHVsZV9zaWduYXR1cmUgc2lnX21ldGFkYXRhOyAv KiBNb2R1bGUgc2lnbmF0dXJlIG1ldGFkYXRhIAo+PiAqLwo+PiArICBzdHJ1Y3QgcGtjczdfc2ln bmVkRGF0YSBwa2NzNzsgICAgICAgIC8qIFBhcnNlZCBQS0NTIzcgZGF0YSAqLwo+PiArfTsKPj4g Kwo+PiArLyogVHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmeWluZyBhcHBlbmRlZCBzaWdu YXR1cmVzICovCj4+ICtzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqZ3J1Yl90cnVzdGVkX2tleTsK Pj4gKwo+PiArLyoKPj4gKyAqIEZvcmNlIGdjcnlfcnNhIHRvIGJlIGEgbW9kdWxlIGRlcGVuZGVu Y3kuCj4+ICsgKgo+PiArICogSWYgd2UgdXNlIGdydWJfY3J5cHRvX3BrX3JzYSwgdGhlbiB0aGVu IHRoZSBnY3J5X3JzYSBtb2R1bGUgd29uJ3QgCj4+IGJlIGJ1aWx0Cj4+ICsgKiBpbiBpZiB5b3Ug YWRkICdhcHBlbmRlZHNpZycgdG8gZ3J1Yi1pbnN0YWxsIC0tbW9kdWxlcy4gWW91IHdvdWxkIAo+ PiBuZWVkIHRvCj4+ICsgKiBhZGQgJ2djcnlfcnNhJyB0b28uIFRoYXQncyBjb25mdXNpbmcgYW5k IHNlZW1zIHN1Ym9wdGltYWwsIAo+PiBlc3BlY2lhbGx5IHdoZW4KPj4gKyAqIHdlIG9ubHkgc3Vw cG9ydCBSU0EuCj4+ICsgKgo+PiArICogRHluYW1pYyBsb2FkaW5nIGFsc28gY2F1c2VzIHNvbWUg Y29uY2VybnMuIFdlIGNhbid0IGxvYWQgZ2NyeV9yc2EgCj4+IGZyb20gdGhlCj4+ICsgKiB0aGUg ZmlsZXN5c3RlbSBhZnRlciB3ZSBpbnN0YWxsIHRoZSB2ZXJpZmllciAtIHdlIHdvbid0IGJlIGFi bGUgdG8gCj4+IHZlcmlmeQo+PiArICogaXQgd2l0aG91dCBoYXZpbmcgaXQgYWxyZWFkeSBwcmVz ZW50LiBXZSBhbHNvIHNob3VsZG4ndCBsb2FkIGl0IAo+PiBiZWZvcmUgd2UKPj4gKyAqIGluc3Rh bGwgdGhlIHZlcmlmaWVyLCBiZWNhdXNlIHRoYXQgd291bGQgbWVhbiBpdCB3b3VsZG4ndCBiZSAK Pj4gdmVyaWZpZWQgLSBhbgo+PiArICogYXR0YWNrZXIgY291bGQgaW5zZXJ0IGFueSBjb2RlIHRo ZXkgd2FudGVkIGludG8gdGhlIG1vZHVsZS4KPj4gKyAqCj4+ICsgKiBTbyBpbnN0ZWFkLCByZWZl cmVuY2UgdGhlIGludGVybmFsIHN5bWJvbCBmcm9tIGdjcnlfcnNhLiBUaGF0IAo+PiBjcmVhdGVz IGEKPj4gKyAqIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGdjcnlfcnNhLCBzbyBpdCB3aWxsIGJlIGJ1 aWx0IGluIHdoZW4gdGhpcyAKPj4gbW9kdWxlCj4+ICsgKiBpcyBidWlsdCBpbi4gQmVpbmcgYnVp bHQgaW4gKGFzc3VtaW5nIHRoZSBjb3JlIGltYWdlIGlzIGl0c2VsZiAKPj4gc2lnbmVkISkKPj4g KyAqIGFsc28gcmVzb2x2ZXMgb3VyIGNvbmNlcm5zIGFib3V0IGxvYWRpbmcgZnJvbSB0aGUgZmls ZXN5c3RlbS4KPj4gKyAqLwo+PiArZXh0ZXJuIGdjcnlfcGtfc3BlY190IF9nY3J5X3B1YmtleV9z cGVjX3JzYTsKPj4gKwo+PiArc3RhdGljIGVudW0KPj4gK3sKPj4gKyAgY2hlY2tfc2lnc19ubyA9 IDAsCj4+ICsgIGNoZWNrX3NpZ3NfZW5mb3JjZSA9IDEsCj4+ICsgIGNoZWNrX3NpZ3NfZm9yY2Vk ID0gMgo+PiArfSBjaGVja19zaWdzID0gY2hlY2tfc2lnc19ubzsKPj4gKwo+PiArc3RhdGljIGNv bnN0IGNoYXIgKgo+PiArZ3J1Yl9lbnZfcmVhZF9zZWMgKHN0cnVjdCBncnViX2Vudl92YXIgKnZh ciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCj4+ICsgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqdmFsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKPj4gK3sKPj4gKyAgaWYgKGNoZWNr X3NpZ3MgPT0gY2hlY2tfc2lnc19mb3JjZWQpCj4+ICsgICAgcmV0dXJuICJmb3JjZWQiOwo+PiAr ICBlbHNlIGlmIChjaGVja19zaWdzID09IGNoZWNrX3NpZ3NfZW5mb3JjZSkKPj4gKyAgICByZXR1 cm4gImVuZm9yY2UiOwo+PiArICBlbHNlCj4+ICsgICAgcmV0dXJuICJubyI7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBjaGFyICoKPj4gK2dydWJfZW52X3dyaXRlX3NlYyAoc3RydWN0IGdydWJfZW52 X3ZhciAqdmFyIF9fYXR0cmlidXRlX18gCj4+ICgodW51c2VkKSksIGNvbnN0IGNoYXIgKnZhbCkK Pj4gK3sKPj4gKyAgLyogRG8gbm90IGFsbG93IHRoZSB2YWx1ZSB0byBiZSBjaGFuZ2VkIGlmIHNl dCB0byBmb3JjZWQgKi8KPj4gKyAgaWYgKGNoZWNrX3NpZ3MgPT0gY2hlY2tfc2lnc19mb3JjZWQp Cj4+ICsgICAgcmV0dXJuIGdydWJfc3RyZHVwICgiZm9yY2VkIik7Cj4+ICsKPj4gKyAgaWYgKCgq dmFsID09ICcyJykgfHwgKCp2YWwgPT0gJ2YnKSkKPj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tf c2lnc19mb3JjZWQ7Cj4+ICsgIGVsc2UgaWYgKCgqdmFsID09ICcxJykgfHwgKCp2YWwgPT0gJ2Un KSkKPj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tfc2lnc19lbmZvcmNlOwo+PiArICBlbHNlIGlm ICgoKnZhbCA9PSAnMCcpIHx8ICgqdmFsID09ICduJykpCj4+ICsgICAgY2hlY2tfc2lncyA9IGNo ZWNrX3NpZ3Nfbm87Cj4+ICsKPj4gKyAgcmV0dXJuIGdydWJfc3RyZHVwIChncnViX2Vudl9yZWFk X3NlYyAoTlVMTCwgTlVMTCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiAr ZmlsZV9yZWFkX2FsbCAoZ3J1Yl9maWxlX3QgZmlsZSwgZ3J1Yl91aW50OF90ICoqYnVmLCBncnVi X3NpemVfdCAKPj4gKmxlbikKPj4gK3sKPj4gKyAgZ3J1Yl9vZmZfdCBmdWxsX2ZpbGVfc2l6ZTsK Pj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3NpemUgPSAwOwo+PiArICBn cnViX3NzaXplX3QgcmVhZF9zaXplOwo+PiArCj4+ICsgIGZ1bGxfZmlsZV9zaXplID0gZ3J1Yl9m aWxlX3NpemUgKGZpbGUpOwo+PiArICBpZiAoZnVsbF9maWxlX3NpemUgPT0gR1JVQl9GSUxFX1NJ WkVfVU5LTk9XTikKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VN RU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICBOXygiQ2Fubm90IHJlYWQgYSBmaWxlIG9m IHVua25vd24gc2l6ZSBpbnRvIGEgCj4+IGJ1ZmZlciIpKTsKPj4gKwo+PiArICBpZiAoZnVsbF9m aWxlX3NpemUgPiBHUlVCX1NJWkVfTUFYKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9PVVRfT0ZfUkFOR0UsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIE5fKCJGaWxlIGlz IHRvbyBsYXJnZSB0byByZWFkOiAlIiAKPj4gUFJJdUdSVUJfVUlOVDY0X1QgIiBieXRlcyIpLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2ZpbGVfc2l6ZSk7Cj4+ICsKPj4gKyAgZmls ZV9zaXplID0gKGdydWJfc2l6ZV90KSBmdWxsX2ZpbGVfc2l6ZTsKPj4gKwo+PiArICAqYnVmID0g Z3J1Yl9tYWxsb2MgKGZpbGVfc2l6ZSk7Cj4+ICsgIGlmICghKmJ1ZikKPj4gKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgTl8oIkNvdWxkIG5vdCBhbGxvY2F0ZSBmaWxlIGRhdGEgYnVmZmVyIHNpemUgCj4+ICUi IFBSSXVHUlVCX1NJWkUpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUpOwo+ PiArCj4+ICsgIHdoaWxlICh0b3RhbF9yZWFkX3NpemUgPCBmaWxlX3NpemUpCj4+ICsgICAgewo+ PiArICAgICAgcmVhZF9zaXplID0gZ3J1Yl9maWxlX3JlYWQgKGZpbGUsICpidWYgKyB0b3RhbF9y ZWFkX3NpemUsIAo+PiBmaWxlX3NpemUgLSB0b3RhbF9yZWFkX3NpemUpOwo+PiArCj4+ICsgICAg ICBpZiAocmVhZF9zaXplIDwgMCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGdydWJfZnJl ZSAoKmJ1Zik7Cj4+ICsgICAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4+ICsgICAgICAgIH0K Pj4gKyAgICAgIGVsc2UgaWYgKHJlYWRfc2l6ZSA9PSAwKQo+PiArICAgICAgICB7Cj4+ICsgICAg ICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsKPj4gKyAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfSU8sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJDb3VsZCBu b3QgcmVhZCBmdWxsIGZpbGUgc2l6ZSAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIoJSIgUFJJdUdSVUJfU0laRSAiKSwgb25seSAlIiAKPj4gUFJJdUdSVUJfU0laRSAiIGJ5 dGVzIHJlYWQiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplLCB0 b3RhbF9yZWFkX3NpemUpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIHRvdGFsX3JlYWRf c2l6ZSArPSByZWFkX3NpemU7Cj4+ICsgICAgfQo+PiArICAqbGVuID0gZmlsZV9zaXplOwo+PiAr ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QK Pj4gK3JlYWRfY2VydF9mcm9tX2ZpbGUgKGdydWJfZmlsZV90IGYsIHN0cnVjdCB4NTA5X2NlcnRp ZmljYXRlIAo+PiAqY2VydGlmaWNhdGUpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgZXJyOwo+PiAr ICBncnViX3VpbnQ4X3QgKmJ1ZjsKPj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplOwo+PiArCj4+ ICsgIGVyciA9IGZpbGVfcmVhZF9hbGwgKGYsICZidWYsICZmaWxlX3NpemUpOwo+PiArICBpZiAo ZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgcmV0dXJuIGVycjsKPj4gKwo+PiArICBlcnIg PSBwYXJzZV94NTA5X2NlcnRpZmljYXRlIChidWYsIGZpbGVfc2l6ZSwgY2VydGlmaWNhdGUpOwo+ PiArICBncnViX2ZyZWUgKGJ1Zik7Cj4+ICsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2V4dHJhY3RfYXBwZW5kZWRfc2lnbmF0dXJlIChjb25z dCBncnViX3VpbnQ4X3QgKmJ1ZiwgZ3J1Yl9zaXplX3QgCj4+IGJ1ZnNpemUsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdydWJfYXBwZW5kZWRfc2lnbmF0dXJlICpzaWcp Cj4+ICt7Cj4+ICsgIGdydWJfc2l6ZV90IHBrY3M3X3NpemU7Cj4+ICsgIGdydWJfc2l6ZV90IHJl bWFpbmluZ19sZW47Cj4+ICsgIGNvbnN0IGdydWJfdWludDhfdCAqYXBwc2lnZGF0YSA9IGJ1ZiAr IGJ1ZnNpemUgLSBncnViX3N0cmxlbiAKPj4gKG1hZ2ljKTsKPj4gKwo+PiArICBpZiAoYnVmc2l6 ZSA8IGdydWJfc3RybGVuIChtYWdpYykpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBzaG9ydCBmb3IgCj4+IHNpZ25hdHVyZSBt YWdpYyIpKTsKPj4gKwo+PiArICBpZiAoZ3J1Yl9tZW1jbXAgKGFwcHNpZ2RhdGEsIChncnViX3Vp bnQ4X3QgKikgbWFnaWMsIGdydWJfc3RybGVuIAo+PiAobWFnaWMpKSkKPj4gKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgTl8oIk1pc3Npbmcgb3IgaW52YWxp ZCAKPj4gc2lnbmF0dXJlIG1hZ2ljIikpOwo+PiArCj4+ICsgIHJlbWFpbmluZ19sZW4gPSBidWZz aXplIC0gZ3J1Yl9zdHJsZW4gKG1hZ2ljKTsKPj4gKwo+PiArICBpZiAocmVtYWluaW5nX2xlbiA8 IHNpemVvZiAoc3RydWN0IG1vZHVsZV9zaWduYXR1cmUpKQo+PiArICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygiRmlsZSB0b28gc2hvcnQgZm9yIAo+PiBz aWduYXR1cmUgbWV0YWRhdGEiKSk7Cj4+ICsKPj4gKyAgYXBwc2lnZGF0YSAtPSBzaXplb2YgKHN0 cnVjdCBtb2R1bGVfc2lnbmF0dXJlKTsKPj4gKwo+PiArICAvKiBleHRyYWN0IHRoZSBtZXRhZGF0 YSAqLwo+PiArICBncnViX21lbWNweSAoJihzaWctPnNpZ19tZXRhZGF0YSksIGFwcHNpZ2RhdGEs IHNpemVvZiAoc3RydWN0IAo+PiBtb2R1bGVfc2lnbmF0dXJlKSk7Cj4+ICsKPj4gKyAgcmVtYWlu aW5nX2xlbiAtPSBzaXplb2YgKHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlKTsKPj4gKwo+PiArICBp ZiAoc2lnLT5zaWdfbWV0YWRhdGEuaWRfdHlwZSAhPSAyKQo+PiArICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygiV3Jvbmcgc2lnbmF0dXJlIAo+PiB0eXBl IikpOwo+PiArCj4+ICsgIHBrY3M3X3NpemUgPSBncnViX2JlX3RvX2NwdTMyIChzaWctPnNpZ19t ZXRhZGF0YS5zaWdfbGVuKTsKPj4gKwo+PiArICBpZiAocGtjczdfc2l6ZSA+IHJlbWFpbmluZ19s ZW4pCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5f KCJGaWxlIHRvbyBzaG9ydCBmb3IgCj4+IFBLQ1MjNyBtZXNzYWdlIikpOwo+PiArCj4+ICsgIGdy dWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgInNpZyBsZW4gJSIgUFJJdUdSVUJfU0laRSAiXG4i LCAKPj4gcGtjczdfc2l6ZSk7Cj4+ICsKPj4gKyAgc2lnLT5zaWduYXR1cmVfbGVuID0gZ3J1Yl9z dHJsZW4gKG1hZ2ljKSArIHNpemVvZiAoc3RydWN0IAo+PiBtb2R1bGVfc2lnbmF0dXJlKSArIHBr Y3M3X3NpemU7Cj4+ICsKPj4gKyAgLyogcmV3aW5kIHBvaW50ZXIgYW5kIHBhcnNlIHBrY3M3IGRh dGEgKi8KPj4gKyAgYXBwc2lnZGF0YSAtPSBwa2NzN19zaXplOwo+PiArCj4+ICsgIHJldHVybiBw YXJzZV9wa2NzN19zaWduZWREYXRhIChhcHBzaWdkYXRhLCBwa2NzN19zaXplLCAKPj4gJnNpZy0+ cGtjczcpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl92ZXJpZnlf YXBwZW5kZWRfc2lnbmF0dXJlIChjb25zdCBncnViX3VpbnQ4X3QgKmJ1ZiwgZ3J1Yl9zaXplX3Qg Cj4+IGJ1ZnNpemUpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsK Pj4gKyAgZ3J1Yl9zaXplX3QgZGF0YXNpemU7Cj4+ICsgIHZvaWQgKmNvbnRleHQ7Cj4+ICsgIHVu c2lnbmVkIGNoYXIgKmhhc2g7Cj4+ICsgIGdjcnlfbXBpX3QgaGFzaG1waTsKPj4gKyAgZ2NyeV9l cnJfY29kZV90IHJjOwo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqcGs7Cj4+ICsgIHN0 cnVjdCBncnViX2FwcGVuZGVkX3NpZ25hdHVyZSBzaWc7Cj4+ICsgIHN0cnVjdCBwa2NzN19zaWdu ZXJJbmZvICpzaTsKPj4gKyAgaW50IGk7Cj4+ICsKPj4gKyAgaWYgKCFncnViX3RydXN0ZWRfa2V5 KQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygi Tm8gdHJ1c3RlZCBrZXlzIHRvIAo+PiB2ZXJpZnkgYWdhaW5zdCIpKTsKPj4gKwo+PiArICBlcnIg PSBleHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAoYnVmLCBidWZzaXplLCAmc2lnKTsKPj4gKyAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIHJldHVybiBlcnI7Cj4+ICsKPj4gKyAg ZGF0YXNpemUgPSBidWZzaXplIC0gc2lnLnNpZ25hdHVyZV9sZW47Cj4+ICsKPj4gKyAgZm9yIChp ID0gMDsgaSA8IHNpZy5wa2NzNy5zaWduZXJJbmZvX2NvdW50OyBpKyspCj4+ICsgICAgewo+PiAr ICAgICAgLyoKPj4gKyAgICAgICAqIFRoaXMgY291bGQgYmUgb3B0aW1pc2VkIGluIGEgY291cGxl IG9mIHdheXM6Cj4+ICsgICAgICAgKiAtIHdlIGNvdWxkIG9ubHkgY29tcHV0ZSBoYXNoZXMgb25j ZSBwZXIgaGFzaCB0eXBlCj4+ICsgICAgICAgKiAtIHdlIGNvdWxkIHRyYWNrIHNpZ25lciBpbmZv cm1hdGlvbiBhbmQgb25seSB2ZXJpZnkgd2hlcmUgCj4+IElEcyBtYXRjaAo+PiArICAgICAgICog Rm9yIG5vdyB3ZSBkbyB0aGUgbmFpdmUgTyh0cnVzdGVkIGtleXMgKiBwa2NzNyBzaWduZXJzKSAK Pj4gYXBwcm9hY2guCj4+ICsgICAgICAgKi8KPj4gKyAgICAgIHNpID0gJnNpZy5wa2NzNy5zaWdu ZXJJbmZvc1tpXTsKPj4gKyAgICAgIGNvbnRleHQgPSBncnViX3phbGxvYyAoc2ktPmhhc2gtPmNv bnRleHRzaXplKTsKPj4gKyAgICAgIGlmICghY29udGV4dCkKPj4gKyAgICAgICAgcmV0dXJuIGdy dWJfZXJybm87Cj4+ICsKPj4gKyAgICAgIHNpLT5oYXNoLT5pbml0IChjb250ZXh0KTsKPj4gKyAg ICAgIHNpLT5oYXNoLT53cml0ZSAoY29udGV4dCwgYnVmLCBkYXRhc2l6ZSk7Cj4+ICsgICAgICBz aS0+aGFzaC0+ZmluYWwgKGNvbnRleHQpOwo+PiArICAgICAgaGFzaCA9IHNpLT5oYXNoLT5yZWFk IChjb250ZXh0KTsKPj4gKwo+PiArICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAi ZGF0YSBzaXplICUiIFBSSXhHUlVCX1NJWkUgIiwgCj4+IHNpZ25lciAlZCBoYXNoICUwMnglMDJ4 JTAyeCUwMnguLi5cbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgIGRhdGFzaXplLCBpLCBoYXNo WzBdLCBoYXNoWzFdLCBoYXNoWzJdLCBoYXNoWzNdKTsKPj4gKwo+PiArICAgICAgZXJyID0gR1JV Ql9FUlJfQkFEX1NJR05BVFVSRTsKPj4gKyAgICAgIGZvciAocGsgPSBncnViX3RydXN0ZWRfa2V5 OyBwazsgcGsgPSBway0+bmV4dCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIHJjID0gZ3J1 Yl9jcnlwdG9fcnNhX3BhZCAoJmhhc2htcGksIGhhc2gsIHNpLT5oYXNoLCAKPj4gcGstPm1waXNb MF0pOwo+PiArICAgICAgICAgIGlmIChyYykKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAg ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkVycm9yIHBhZGRpbmcgaGFzaCBmb3IgUlNB IAo+PiB2ZXJpZmljYXRpb246ICVkIiksIHJjKTsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9mcmVl IChjb250ZXh0KTsKPj4gKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+PiArICAgICAgICAg ICAgfQo+PiArCj4+ICsgICAgICAgICAgcmMgPSBfZ2NyeV9wdWJrZXlfc3BlY19yc2EudmVyaWZ5 ICgwLCBoYXNobXBpLCAKPj4gJnNpLT5zaWdfbXBpLCBway0+bXBpcywgTlVMTCwgTlVMTCk7Cj4+ ICsgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoaGFzaG1waSk7Cj4+ICsKPj4gKyAgICAgICAg ICBpZiAocmMgPT0gMCkKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9k cHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZ5IHNpZ25lciAlZCB3aXRoIGtleSAKPj4gJyVz JyBzdWNjZWVkZWRcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgcGstPnN1 YmplY3QpOwo+PiArICAgICAgICAgICAgICBlcnIgPSBHUlVCX0VSUl9OT05FOwo+PiArICAgICAg ICAgICAgICBicmVhazsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgIGdydWJf ZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgInZlcmlmeSBzaWduZXIgJWQgd2l0aCBrZXkgCj4+ICcl cycgZmFpbGVkIHdpdGggJWRcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBpLCBway0+ c3ViamVjdCwgcmMpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIGdydWJfZnJlZSAoY29u dGV4dCk7Cj4+ICsKPj4gKyAgICAgIGlmIChlcnIgPT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAg ICAgYnJlYWs7Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qIElmIHdlIGRpZG4ndCB2ZXJpZnksIHBy b3ZpZGUgYSBuZWF0IG1lc3NhZ2UgKi8KPj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+ PiArICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgTl8oIkZhaWxlZCB0byB2ZXJpZnkgc2lnbmF0dXJlIGFnYWluc3Qg YSAKPj4gdHJ1c3RlZCBrZXkiKSk7Cj4+ICsKPj4gK2NsZWFudXA6Cj4+ICsgIHBrY3M3X3NpZ25l ZERhdGFfcmVsZWFzZSAoJnNpZy5wa2NzNyk7Cj4+ICsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfY21kX3ZlcmlmeV9zaWduYXR1cmUg KGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fIAo+PiAoKHVudXNlZCkpLCBpbnQgYXJn YywgY2hhciAqKmFyZ3MpCj4+ICt7Cj4+ICsgIGdydWJfZmlsZV90IGY7Cj4+ICsgIGdydWJfZXJy X3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgZ3J1Yl91aW50OF90ICpkYXRhOwo+PiArICBn cnViX3NpemVfdCBmaWxlX3NpemU7Cj4+ICsKPj4gKyAgaWYgKGFyZ2MgPCAxKQo+PiArICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJvbmUgYXJndW1lbnQg Cj4+IGV4cGVjdGVkIikpOwo+PiArCj4+ICsgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwg InZlcmlmeWluZyAlc1xuIiwgYXJnc1swXSk7Cj4+ICsKPj4gKyAgZiA9IGdydWJfZmlsZV9vcGVu IChhcmdzWzBdLCBHUlVCX0ZJTEVfVFlQRV9WRVJJRllfU0lHTkFUVVJFKTsKPj4gKyAgaWYgKCFm KQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJybm87Cj4+ICsgICAgICBnb3RvIGNs ZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGVyciA9IGZpbGVfcmVhZF9hbGwgKGYsICZkYXRh LCAmZmlsZV9zaXplKTsKPj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIGdv dG8gY2xlYW51cDsKPj4gKwo+PiArICBlcnIgPSBncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1 cmUgKGRhdGEsIGZpbGVfc2l6ZSk7Cj4+ICsKPj4gKyAgZ3J1Yl9mcmVlIChkYXRhKTsKPj4gKwo+ PiArY2xlYW51cDoKPj4gKyAgaWYgKGYpCj4+ICsgICAgZ3J1Yl9maWxlX2Nsb3NlIChmKTsKPj4g KyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJf Y21kX2Rpc3RydXN0IChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkp LCBpbnQgCj4+IGFyZ2MsIGNoYXIgKiphcmdzKQo+PiArewo+PiArICB1bnNpZ25lZCBsb25nIGNl cnRfbnVtLCBpOwo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydCwgKnByZXY7Cj4+ ICsKPj4gKyAgaWYgKGFyZ2MgIT0gMSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0FSR1VNRU5ULCBOXygiT25lIGFyZ3VtZW50IAo+PiBleHBlY3RlZCIpKTsKPj4gKwo+ PiArICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgY2VydF9udW0gPSBncnViX3N0 cnRvdWwgKGFyZ3NbMF0sIE5VTEwsIDEwKTsKPj4gKyAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9F UlJfTk9ORSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPj4gKwo+PiArICBpZiAoY2VydF9u dW0gPCAxKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIE5fKCJDZXJ0aWZpY2F0ZSBudW1iZXIgdG9vIHNt YWxsIC0gbnVtYmVycyAKPj4gc3RhcnQgYXQgMSIpKTsKPj4gKwo+PiArICBpZiAoY2VydF9udW0g PT0gMSkKPj4gKyAgICB7Cj4+ICsgICAgICBjZXJ0ID0gZ3J1Yl90cnVzdGVkX2tleTsKPj4gKyAg ICAgIGdydWJfdHJ1c3RlZF9rZXkgPSBjZXJ0LT5uZXh0Owo+PiArCj4+ICsgICAgICBjZXJ0aWZp Y2F0ZV9yZWxlYXNlIChjZXJ0KTsKPj4gKyAgICAgIGdydWJfZnJlZSAoY2VydCk7Cj4+ICsgICAg ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKyAgICB9Cj4+ICsgIGkgPSAyOwo+PiArICBwcmV2 ID0gZ3J1Yl90cnVzdGVkX2tleTsKPj4gKyAgY2VydCA9IGdydWJfdHJ1c3RlZF9rZXktPm5leHQ7 Cj4+ICsgIHdoaWxlIChjZXJ0KQo+PiArICAgIHsKPj4gKyAgICAgIGlmIChpID09IGNlcnRfbnVt KQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgcHJldi0+bmV4dCA9IGNlcnQtPm5leHQ7Cj4+ ICsgICAgICAgICAgY2VydGlmaWNhdGVfcmVsZWFzZSAoY2VydCk7Cj4+ICsgICAgICAgICAgZ3J1 Yl9mcmVlIChjZXJ0KTsKPj4gKyAgICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKyAg ICAgICAgfQo+PiArICAgICAgaSsrOwo+PiArICAgICAgcHJldiA9IGNlcnQ7Cj4+ICsgICAgICBj ZXJ0ID0gY2VydC0+bmV4dDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKPj4gKyAgICAgICAgICAgICAgICAgICAgIE5fKCJObyBj ZXJ0aWZpY2F0ZSBudW1iZXIgJWx1IGZvdW5kIC0gb25seSAlbHUgCj4+IGNlcnRpZmljYXRlcyBp biB0aGUgc3RvcmUiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgIGNlcnRfbnVtLCBpIC0gMSk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2NtZF90cnVzdCAoZ3J1 Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IAo+PiBhcmdjLCBj aGFyICoqYXJncykKPj4gK3sKPj4gKyAgZ3J1Yl9maWxlX3QgY2VydGY7Cj4+ICsgIHN0cnVjdCB4 NTA5X2NlcnRpZmljYXRlICpjZXJ0ID0gTlVMTDsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnI7Cj4+ICsK Pj4gKyAgaWYgKGFyZ2MgIT0gMSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0FSR1VNRU5ULCBOXygib25lIGFyZ3VtZW50IAo+PiBleHBlY3RlZCIpKTsKPj4gKwo+PiAr ICBjZXJ0ZiA9IGdydWJfZmlsZV9vcGVuIChhcmdzWzBdLCBHUlVCX0ZJTEVfVFlQRV9DRVJUSUZJ Q0FURV9UUlVTVCB8IAo+PiBHUlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKPj4gKyAgaWYg KCFjZXJ0ZikKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPj4gKwo+PiArICBjZXJ0ID0gZ3J1 Yl96YWxsb2MgKHNpemVvZiAoc3RydWN0IHg1MDlfY2VydGlmaWNhdGUpKTsKPj4gKyAgaWYgKCFj ZXJ0KQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCBO XygiQ291bGQgbm90IGFsbG9jYXRlIAo+PiBtZW1vcnkgZm9yIGNlcnRpZmljYXRlIikpOwo+PiAr Cj4+ICsgIGVyciA9IHJlYWRfY2VydF9mcm9tX2ZpbGUgKGNlcnRmLCBjZXJ0KTsKPj4gKyAgZ3J1 Yl9maWxlX2Nsb3NlIChjZXJ0Zik7Cj4+ICsgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKPj4g KyAgICB7Cj4+ICsgICAgICBncnViX2ZyZWUgKGNlcnQpOwo+PiArICAgICAgcmV0dXJuIGVycjsK Pj4gKyAgICB9Cj4+ICsgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgIkxvYWRlZCBjZXJ0 aWZpY2F0ZSB3aXRoIENOOiAlc1xuIiwgCj4+IGNlcnQtPnN1YmplY3QpOwo+PiArCj4+ICsgIGNl cnQtPm5leHQgPSBncnViX3RydXN0ZWRfa2V5Owo+PiArICBncnViX3RydXN0ZWRfa2V5ID0gY2Vy dDsKPj4gKwo+PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGdydWJfZXJyX3QKPj4gK2dydWJfY21kX2xpc3QgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJp YnV0ZV9fICgodW51c2VkKSksIGludCBhcmdjIAo+PiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSks Cj4+ICsgICAgICAgICAgICAgICBjaGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkp Cj4+ICt7Cj4+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0Owo+PiArICBpbnQgY2Vy dF9udW0gPSAxOwo+PiArICBncnViX3NpemVfdCBpOwo+PiArCj4+ICsgIGZvciAoY2VydCA9IGdy dWJfdHJ1c3RlZF9rZXk7IGNlcnQ7IGNlcnQgPSBjZXJ0LT5uZXh0KQo+PiArICAgIHsKPj4gKyAg ICAgIGdydWJfcHJpbnRmIChOXygiQ2VydGlmaWNhdGUgJWQ6XG4iKSwgY2VydF9udW0pOwo+PiAr Cj4+ICsgICAgICBncnViX3ByaW50ZiAoTl8oIlx0U2VyaWFsOiAiKSk7Cj4+ICsgICAgICBmb3Ig KGkgPSAwOyBpIDwgY2VydC0+c2VyaWFsX2xlbiAtIDE7IGkrKykKPj4gKyAgICAgICAgewo+PiAr ICAgICAgICAgIGdydWJfcHJpbnRmICgiJTAyeDoiLCBjZXJ0LT5zZXJpYWxbaV0pOwo+PiArICAg ICAgICB9Cj4+ICsgICAgICBncnViX3ByaW50ZiAoIiUwMnhcbiIsIGNlcnQtPnNlcmlhbFtjZXJ0 LT5zZXJpYWxfbGVuIC0gMV0pOwo+PiArCj4+ICsgICAgICBncnViX3ByaW50ZiAoIlx0Q046ICVz XG5cbiIsIGNlcnQtPnN1YmplY3QpOwo+PiArICAgICAgY2VydF9udW0rKzsKPj4gKyAgICB9Cj4+ ICsKPj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnVi X2Vycl90Cj4+ICthcHBlbmRlZHNpZ19pbml0IChncnViX2ZpbGVfdCBpbyBfX2F0dHJpYnV0ZV9f ICgodW51c2VkKSksIGVudW0gCj4+IGdydWJfZmlsZV90eXBlIHR5cGUsCj4+ICsgICAgICAgICAg ICAgICAgICB2b2lkICoqY29udGV4dCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGVudW0gCj4+ IGdydWJfdmVyaWZ5X2ZsYWdzICpmbGFncykKPj4gK3sKPj4gKyAgaWYgKGNoZWNrX3NpZ3MgPT0g Y2hlY2tfc2lnc19ubykKPj4gKyAgICB7Cj4+ICsgICAgICAqZmxhZ3MgPSBHUlVCX1ZFUklGWV9G TEFHU19TS0lQX1ZFUklGSUNBVElPTjsKPj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ PiArICAgIH0KPj4gKwo+PiArICBzd2l0Y2ggKHR5cGUgJiBHUlVCX0ZJTEVfVFlQRV9NQVNLKQo+ PiArICAgIHsKPj4gKyAgICAgIGNhc2UgR1JVQl9GSUxFX1RZUEVfQ0VSVElGSUNBVEVfVFJVU1Q6 Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIFRoaXMgaXMgYSBjZXJ0aWZpY2F0ZSB0byBh ZGQgdG8gdHJ1c3RlZCBrZXljaGFpbi4KPj4gKyAgICAgICAgICoKPj4gKyAgICAgICAgICogVGhp cyBuZWVkcyB0byBiZSB2ZXJpZmllZCBvciBibG9ja2VkLiBJZGVhbGx5IHdlJ2Qgd3JpdGUgCj4+ IGFuIHg1MDkKPj4gKyAgICAgICAgICogdmVyaWZpZXIsIGJ1dCB3ZSBsYWNrIHRoZSBodWJyaXMg cmVxdWlyZWQgdG8gdGFrZSB0aGlzIG9uLiAKPj4gSW5zdGVhZCwKPj4gKyAgICAgICAgICogcmVx dWlyZSB0aGF0IGl0IGhhdmUgYW4gYXBwZW5kZWQgc2lnbmF0dXJlLgo+PiArICAgICAgICAgKi8K Pj4gKwo+PiArICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KPj4gKwo+PiArICAgICAgY2FzZSBH UlVCX0ZJTEVfVFlQRV9MSU5VWF9LRVJORUw6Cj4+ICsgICAgICBjYXNlIEdSVUJfRklMRV9UWVBF X0dSVUJfTU9EVUxFOgo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiBBcHBlbmRlZCBzaWdu YXR1cmVzIGFyZSBvbmx5IGRlZmluZWQgZm9yIEVMRiBiaW5hcmllcy4KPj4gKyAgICAgICAgICog T3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLCB3ZSBvbmx5IHZlcmlmeSBMaW51eCAKPj4g a2VybmVscyBhbmQKPj4gKyAgICAgICAgICogR1JVQiBtb2R1bGVzIGF0IHRoaXMgcG9pbnQuCj4+ ICsgICAgICAgICAqLwo+PiArICAgICAgICAqZmxhZ3MgPSBHUlVCX1ZFUklGWV9GTEFHU19TSU5H TEVfQ0hVTks7Cj4+ICsgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiArCj4+ICsgICAg ICBjYXNlIEdSVUJfRklMRV9UWVBFX0FDUElfVEFCTEU6Cj4+ICsgICAgICBjYXNlIEdSVUJfRklM RV9UWVBFX0RFVklDRV9UUkVFX0lNQUdFOgo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiBJ dCBpcyBwb3NzaWJsZSB0byB1c2UgYXBwZW5kZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAKPj4g d2l0aG91dAo+PiArICAgICAgICAgKiBsb2NrZG93biAtIGxpa2UgdGhlIFBHUCB2ZXJpZmllci4g V2hlbiBjb21iaW5lZCB3aXRoIGFuIAo+PiBlbWJlZGRlZAo+PiArICAgICAgICAgKiBjb25maWcg ZmlsZSBpbiBhIHNpZ25lZCBncnViIGJpbmFyeSwgdGhpcyBjb3VsZCBzdGlsbCBiZSBhIAo+PiBt ZWFuaW5nZnVsCj4+ICsgICAgICAgICAqIHNlY3VyZS1ib290IGNoYWluIC0gc28gbG9uZyBhcyBp dCBpc24ndCBzdWJ2ZXJ0ZWQgYnkgCj4+IHNvbWV0aGluZyBsaWtlIGEKPj4gKyAgICAgICAgICog cm91Z2UgQUNQSSB0YWJsZSBvciBEVCBpbWFnZS4gRGVmZXIgdGhlbSBleHBsaWNpdGx5Lgo+PiAr ICAgICAgICAgKi8KPj4gKyAgICAgICAgKmZsYWdzID0gR1JVQl9WRVJJRllfRkxBR1NfREVGRVJf QVVUSDsKPj4gKyAgICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsKPj4gKyAgICAgIGRl ZmF1bHQ6Cj4+ICsgICAgICAgICpmbGFncyA9IEdSVUJfVkVSSUZZX0ZMQUdTX1NLSVBfVkVSSUZJ Q0FUSU9OOwo+PiArICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKyAgICB9Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICthcHBlbmRlZHNpZ193cml0ZSAodm9pZCAq Y3R4dCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIHZvaWQgKmJ1ZiwgCj4+IGdydWJfc2l6ZV90 IHNpemUpCj4+ICt7Cj4+ICsgIHJldHVybiBncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1cmUg KGJ1Ziwgc2l6ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBncnViX2ZpbGVfdmVyaWZpZXIgZ3J1 Yl9hcHBlbmRlZHNpZ192ZXJpZmllciA9IHsKPj4gKyAgLm5hbWUgPSAiYXBwZW5kZWRzaWciLAo+ PiArICAuaW5pdCA9IGFwcGVuZGVkc2lnX2luaXQsCj4+ICsgIC53cml0ZSA9IGFwcGVuZGVkc2ln X3dyaXRlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGdydWJfc3NpemVfdAo+PiArcHNldWRvX3Jl YWQgKHN0cnVjdCBncnViX2ZpbGUgKmZpbGUsIGNoYXIgKmJ1ZiwgZ3J1Yl9zaXplX3QgbGVuKQo+ PiArewo+PiArICBncnViX21lbWNweSAoYnVmLCAoZ3J1Yl91aW50OF90ICopIGZpbGUtPmRhdGEg KyBmaWxlLT5vZmZzZXQsIGxlbik7Cj4+ICsgIHJldHVybiBsZW47Cj4+ICt9Cj4+ICsKPj4gKy8q IEZpbGVzeXN0ZW0gZGVzY3JpcHRvci4gICovCj4+ICtzdGF0aWMgc3RydWN0IGdydWJfZnMgcHNl dWRvX2ZzID0geyAubmFtZSA9ICJwc2V1ZG8iLCAuZnNfcmVhZCA9IAo+PiBwc2V1ZG9fcmVhZCB9 Owo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9jb21tYW5kX3QgY21kX3ZlcmlmeSwgY21kX2xpc3QsIGNt ZF9kaXN0cnVzdCwgY21kX3RydXN0Owo+PiArCj4+ICtHUlVCX01PRF9JTklUIChhcHBlbmRlZHNp ZykKPj4gK3sKPj4gKyAgaW50IHJjOwo+PiArICBzdHJ1Y3QgZ3J1Yl9tb2R1bGVfaGVhZGVyICpo ZWFkZXI7Cj4+ICsKPj4gKyAgLyogSWYgaW4gbG9ja2Rvd24sIGltbWVkaWF0ZWx5IGVudGVyIGZv cmNlZCBtb2RlICovCj4+ICsgIGlmIChncnViX2lzX2xvY2tkb3duICgpID09IEdSVUJfTE9DS0RP V05fRU5BQkxFRCkKPj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tfc2lnc19mb3JjZWQ7Cj4+ICsK Pj4gKyAgZ3J1Yl90cnVzdGVkX2tleSA9IE5VTEw7Cj4+ICsgIGdydWJfcmVnaXN0ZXJfdmFyaWFi bGVfaG9vayAoImNoZWNrX2FwcGVuZGVkX3NpZ25hdHVyZXMiLCAKPj4gZ3J1Yl9lbnZfcmVhZF9z ZWMsIGdydWJfZW52X3dyaXRlX3NlYyk7Cj4+ICsgIGdydWJfZW52X2V4cG9ydCAoImNoZWNrX2Fw cGVuZGVkX3NpZ25hdHVyZXMiKTsKPj4gKwo+PiArICByYyA9IGFzbjFfaW5pdCAoKTsKPj4gKyAg aWYgKHJjKQo+PiArICAgIGdydWJfZmF0YWwgKCJFcnJvciBpbml0aW5nIEFTTi4xIGRhdGEgc3Ry dWN0dXJlczogJWQ6ICVzXG4iLCByYywgCj4+IGFzbjFfc3RyZXJyb3IgKHJjKSk7Cj4+ICsKPj4g KyAgRk9SX01PRFVMRVMgKGhlYWRlcikKPj4gKyAgewo+PiArICAgIHN0cnVjdCBncnViX2ZpbGUg cHNldWRvX2ZpbGU7Cj4+ICsgICAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnBrID0gTlVMTDsK Pj4gKyAgICBncnViX2Vycl90IGVycjsKPj4gKwo+PiArICAgIC8qIE5vdCBhbiBYLjUwOSBjZXJ0 aWZpY2F0ZSwgc2tpcC4gKi8KPj4gKyAgICBpZiAoaGVhZGVyLT50eXBlICE9IE9CSl9UWVBFX1g1 MDlfUFVCS0VZKQo+PiArICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICBncnViX21lbXNldCAo JnBzZXVkb19maWxlLCAwLCBzaXplb2YgKHBzZXVkb19maWxlKSk7Cj4+ICsgICAgcHNldWRvX2Zp bGUuZnMgPSAmcHNldWRvX2ZzOwo+PiArICAgIHBzZXVkb19maWxlLnNpemUgPSBoZWFkZXItPnNp emUgLSBzaXplb2YgKHN0cnVjdCAKPj4gZ3J1Yl9tb2R1bGVfaGVhZGVyKTsKPj4gKyAgICBwc2V1 ZG9fZmlsZS5kYXRhID0gKGNoYXIgKikgaGVhZGVyICsgc2l6ZW9mIChzdHJ1Y3QgCj4+IGdydWJf bW9kdWxlX2hlYWRlcik7Cj4+ICsKPj4gKyAgICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIs ICJGb3VuZCBhbiB4NTA5IGtleSwgc2l6ZT0lIiAKPj4gUFJJdUdSVUJfVUlOVDY0X1QgIlxuIiwK Pj4gKyAgICAgICAgICAgICAgICAgIHBzZXVkb19maWxlLnNpemUpOwo+PiArCj4+ICsgICAgcGsg PSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSkpOwo+PiArICAg IGlmICghcGspCj4+ICsgICAgICBncnViX2ZhdGFsICgiT3V0IG9mIG1lbW9yeSBsb2FkaW5nIGlu aXRpYWwgY2VydGlmaWNhdGVzIik7Cj4+ICsKPj4gKyAgICBlcnIgPSByZWFkX2NlcnRfZnJvbV9m aWxlICgmcHNldWRvX2ZpbGUsIHBrKTsKPj4gKyAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUp Cj4+ICsgICAgICBncnViX2ZhdGFsICgiRXJyb3IgbG9hZGluZyBpbml0aWFsIGtleTogJXMiLCBn cnViX2Vycm1zZyk7Cj4+ICsKPj4gKyAgICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJs b2FkZWQgY2VydGlmaWNhdGUgQ049JyVzJ1xuIiwgCj4+IHBrLT5zdWJqZWN0KTsKPj4gKwo+PiAr ICAgIHBrLT5uZXh0ID0gZ3J1Yl90cnVzdGVkX2tleTsKPj4gKyAgICBncnViX3RydXN0ZWRfa2V5 ID0gcGs7Cj4+ICsgIH0KPj4gKwo+PiArICBjbWRfdHJ1c3QgPSBncnViX3JlZ2lzdGVyX2NvbW1h bmQgKCJ0cnVzdF9jZXJ0aWZpY2F0ZSIsIAo+PiBncnViX2NtZF90cnVzdCwgTl8oIlg1MDlfQ0VS VElGSUNBVEUiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygi QWRkIFg1MDlfQ0VSVElGSUNBVEUgdG8gCj4+IHRydXN0ZWQgY2VydGlmaWNhdGVzLiIpKTsKPj4g KyAgY21kX2xpc3QgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJsaXN0X2NlcnRpZmljYXRlcyIs IAo+PiBncnViX2NtZF9saXN0LCAwLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTl8oIlNob3cgdGhlIGxpc3Qgb2YgdHJ1c3RlZCB4NTA5IAo+PiBjZXJ0aWZpY2F0ZXMu IikpOwo+PiArICBjbWRfdmVyaWZ5ID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgidmVyaWZ5X2Fw cGVuZGVkIiwgCj4+IGdydWJfY21kX3ZlcmlmeV9zaWduYXR1cmUsIE5fKCJGSUxFIiksCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJWZXJpZnkgRklMRSBhZ2Fp bnN0IHRoZSAKPj4gdHJ1c3RlZCB4NTA5IGNlcnRpZmljYXRlcy4iKSk7Cj4+ICsgIGNtZF9kaXN0 cnVzdCA9IGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoImRpc3RydXN0X2NlcnRpZmljYXRlIiwgCj4+ IGdydWJfY21kX2Rpc3RydXN0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5fKCJDRVJUX05VTUJFUiIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5fKCJSZW1vdmUgQ0VSVF9OVU1CRVIgKGFzIAo+PiBsaXN0ZWQgYnkgbGlz dF9jZXJ0aWZpY2F0ZXMpIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgZnJvbSB0cnVzdGVkIAo+PiBjZXJ0aWZpY2F0ZXMuIikpOwo+PiArCj4+ICsgIGdy dWJfdmVyaWZpZXJfcmVnaXN0ZXIgKCZncnViX2FwcGVuZGVkc2lnX3ZlcmlmaWVyKTsKPj4gKyAg Z3J1Yl9kbF9zZXRfcGVyc2lzdGVudCAobW9kKTsKPj4gK30KPj4gKwo+PiArR1JVQl9NT0RfRklO SSAoYXBwZW5kZWRzaWcpCj4+ICt7Cj4+ICsgIC8qCj4+ICsgICAqIGdydWJfZGxfc2V0X3BlcnNp c3RlbnQgc2hvdWxkIHByZXZlbnQgdGhpcyBmcm9tIGFjdHVhbGx5IAo+PiBydW5uaW5nLCBidXQK Pj4gKyAgICogaXQgZG9lcyBzdGlsbCBydW4gdW5kZXIgZW11Lgo+PiArICAgKi8KPj4gKwo+PiAr ICBncnViX3ZlcmlmaWVyX3VucmVnaXN0ZXIgKCZncnViX2FwcGVuZGVkc2lnX3ZlcmlmaWVyKTsK Pj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF92ZXJpZnkpOwo+PiArICBncnViX3Vu cmVnaXN0ZXJfY29tbWFuZCAoY21kX2xpc3QpOwo+PiArICBncnViX3VucmVnaXN0ZXJfY29tbWFu ZCAoY21kX3RydXN0KTsKPj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF9kaXN0cnVz dCk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcv YXBwZW5kZWRzaWcuaCAKPj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5k ZWRzaWcuaAo+PiBpbmRleCAzZjRkNzAwMmUuLjlhMzBjMzg4NSAxMDA2NDQKPj4gLS0tIGEvZ3J1 Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPj4gKysrIGIvZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPj4gQEAgLTE4LDcgKzE4LDcg QEAKPj4gICAqLwo+PiAKPj4gICNpbmNsdWRlIDxncnViL2NyeXB0by5oPgo+PiAtI2luY2x1ZGUg PGdydWIvbGlidGFzbjEuaD4KPj4gKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgo+PiAKPj4gIGV4dGVy biBhc24xX25vZGUgX2dudXRsc19nbnV0bHNfYXNuOwo+PiAgZXh0ZXJuIGFzbjFfbm9kZSBfZ251 dGxzX3BraXhfYXNuOwo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL2FzbjF1dGlsLmMgCj4+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1 dGlsLmMKPj4gaW5kZXggMDZjM2I2MWMxLi4yZTY4M2M4OTIgMTAwNjQ0Cj4+IC0tLSBhL2dydWIt Y29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jCj4+ICsrKyBiL2dydWItY29yZS9j b21tYW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jCj4+IEBAIC0xNyw3ICsxNyw3IEBACj4+ICAg KiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+Lgo+PiAgICovCj4+IAo+PiAtI2luY2x1ZGUgPGdydWIvbGlidGFzbjEuaD4KPj4gKyNp bmNsdWRlIDxsaWJ0YXNuMS5oPgo+PiAgI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KPj4gICNpbmNs dWRlIDxncnViL2Vyci5oPgo+PiAgI2luY2x1ZGUgPGdydWIvbW0uaD4KPj4gZGlmZiAtLWdpdCBh L2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9nbnV0bHNfYXNuMV90YWIuYyAKPj4gYi9n cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMKPj4gaW5kZXgg ZGRkMTMxNGU2Li44YzRlYjgxZDcgMTAwNjQ0Cj4+IC0tLSBhL2dydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9nbnV0bHNfYXNuMV90YWIuYwo+PiArKysgYi9ncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAjaW5j bHVkZSA8Z3J1Yi9tbS5oPgo+PiAtI2luY2x1ZGUgPGdydWIvbGlidGFzbjEuaD4KPj4gKyNpbmNs dWRlIDxsaWJ0YXNuMS5oPgo+PiAKPj4gIGNvbnN0IGFzbjFfc3RhdGljX25vZGUgZ251dGxzX2Fz bjFfdGFiW10gPSB7Cj4+ICAgIHsgIkdOVVRMUyIsIDUzNjg3Mjk3NiwgTlVMTCB9LAo+PiBkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3BraXhfYXNuMV90YWIuYyAK Pj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jCj4+IGlu ZGV4IGFkZWY2OWQ5NS4uOGVlZWFjMDQ3IDEwMDY0NAo+PiAtLS0gYS9ncnViLWNvcmUvY29tbWFu ZHMvYXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jCj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAjaW5j bHVkZSA8Z3J1Yi9tbS5oPgo+PiAtI2luY2x1ZGUgPGdydWIvbGlidGFzbjEuaD4KPj4gKyNpbmNs dWRlIDxsaWJ0YXNuMS5oPgo+PiAKPj4gIGNvbnN0IGFzbjFfc3RhdGljX25vZGUgcGtpeF9hc24x X3RhYltdID0gewo+PiAgICB7ICJQS0lYMSIsIDUzNjg3NTAyNCwgTlVMTCB9LAo+PiBkaWZmIC0t Z2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYyAKPj4gYi9ncnViLWNv cmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCj4+IGluZGV4IGViODcwMjVjMi4uMzE2ZTMw MzVhIDEwMDY0NAo+PiAtLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5j Cj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKPj4gQEAgLTE3 LDcgKzE3LDcgQEAKPj4gICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4+ICAgKi8KPj4gCj4+IC0jaW5jbHVkZSA8Z3J1Yi9s aWJ0YXNuMS5oPgo+PiArI2luY2x1ZGUgPGxpYnRhc24xLmg+Cj4+ICAjaW5jbHVkZSA8Z3J1Yi90 eXBlcy5oPgo+PiAgI2luY2x1ZGUgPGdydWIvZXJyLmg+Cj4+ICAjaW5jbHVkZSA8Z3J1Yi9tbS5o Pgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2ZpbGUuaCBiL2luY2x1ZGUvZ3J1Yi9maWxl LmgKPj4gaW5kZXggYTViZjNhNzkyLi5kNjc4ZGUwNjMgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUv Z3J1Yi9maWxlLmgKPj4gKysrIGIvaW5jbHVkZS9ncnViL2ZpbGUuaAo+PiBAQCAtODAsNiArODAs OCBAQCBlbnVtIGdydWJfZmlsZV90eXBlCj4+ICAgICAgR1JVQl9GSUxFX1RZUEVfUFVCTElDX0tF WSwKPj4gICAgICAvKiBGaWxlIGhvbGRpbmcgcHVibGljIGtleSB0byBhZGQgdG8gdHJ1c2VkIGtl eXMuICAqLwo+PiAgICAgIEdSVUJfRklMRV9UWVBFX1BVQkxJQ19LRVlfVFJVU1QsCj4+ICsgICAg LyogRmlsZSBob2xkaW5nIHg1MDkgY2VydGlmaWNpYXRlIHRvIGFkZCB0byB0cnVzdGVkIGtleXMu ICAqLwo+PiArICAgIEdSVUJfRklMRV9UWVBFX0NFUlRJRklDQVRFX1RSVVNULAo+PiAgICAgIC8q IEZpbGUgb2Ygd2hpY2ggd2UgaW50ZW5kIHRvIHByaW50IGEgYmxvY2tsaXN0IHRvIHRoZSB1c2Vy LiAgKi8KPj4gICAgICBHUlVCX0ZJTEVfVFlQRV9QUklOVF9CTE9DS0xJU1QsCj4+ICAgICAgLyog RmlsZSB3ZSBpbnRlbmQgdG8gdXNlIGZvciB0ZXN0IGxvYWRpbmcgb3IgdGVzdGluZyBzcGVlZC4g ICovCj4+IC0tCj4+IDIuNDMuNQo+PiAKPj4gCj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4+IEdydWItZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IEdydWIt ZGV2ZWxAZ251Lm9yZwo+PiBodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9n cnViLWRldmVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0 cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=