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 E5C59C5B543 for ; Tue, 10 Jun 2025 16:26:43 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uP1nn-0006SC-BB; Tue, 10 Jun 2025 12:26:19 -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 1uP1hi-00047O-R5 for grub-devel@gnu.org; Tue, 10 Jun 2025 12:20:02 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uP1hf-00035T-S6 for grub-devel@gnu.org; Tue, 10 Jun 2025 12:20:02 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55A9dvB9003285; Tue, 10 Jun 2025 16:19:57 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=8FAN// O349dhU8TlGojzx+DZriokwiPTuWMT/Uor0LE=; b=lJhyqGsHkWxqgDRZde/cnQ e92ZBjWLT9kSGGECFLA0woeBG/Rxs58arqBb/XJd6QZxn8QD8qBam4k0k96RDCf3 QL7Q2LE89BQxN+5/7E8YPsGvI9g/ia/14wS8UpHrLRz5osgLBIXiTo+dnJA0+7Dl QINdu/BQFGlpv9QdULbht3lrFWk9mOYpZUkFYqdXgv1vz97Ki3biUTkS/e6h4bQ+ TV+KCm5HuL0z3eXyBH0Fc+CGkVwI0MdLid3GNrai1KkgPNhkRy27vXmdcqaf+ZPF IAESAO2iYUszWH05bldL4yOdan5+2I5u/0U64qsFAvF3S2wTxVP6MBkUCEJHReGw == Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 474bunygp5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 10 Jun 2025 16:19:56 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 55AEvE0e019575; Tue, 10 Jun 2025 16:19:56 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4752f2ay0k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 10 Jun 2025 16:19:56 +0000 Received: from smtpav01.dal12v.mail.ibm.com (smtpav01.dal12v.mail.ibm.com [10.241.53.100]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 55AGJtKC31392458 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Jun 2025 16:19:55 GMT Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B67E258059; Tue, 10 Jun 2025 16:19:55 +0000 (GMT) Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2839D58061; Tue, 10 Jun 2025 16:19:55 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav01.dal12v.mail.ibm.com (Postfix) with ESMTP; Tue, 10 Jun 2025 16:19:55 +0000 (GMT) MIME-Version: 1.0 Date: Tue, 10 Jun 2025 21:49:54 +0530 From: sudhakar To: Daniel Kiper Cc: grub-devel@gnu.org, 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, Javier Martinez Canillas Subject: Re: [PATCH v2 09/21] appended signatures: parse PKCS#7 signedData and X.509 certificates In-Reply-To: <20250528164431.z4nnsq4dz6beeqa4@tomti.i.net-space.pl> References: <20250326193242.703506-1-sudhakar@linux.ibm.com> <20250326193242.703506-10-sudhakar@linux.ibm.com> <20250528164431.z4nnsq4dz6beeqa4@tomti.i.net-space.pl> Message-ID: <14e1f2d3929096b60ef848f4cd996099@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=H4Hbw/Yi c=1 sm=1 tr=0 ts=68485b2d cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=kj9zAlcOel0A:10 a=6IFa9wvqVegA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=VnNF1IyMAAAA:8 a=QCBqwoI3PcTn9RwVvbwA:9 a=CjuIK1q_8ugA:10 a=WlT8qwTXB_Kj6um4hl3b:22 a=WzC6qhA0u3u7Ye7llzcV:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjEwMDEzMSBTYWx0ZWRfX9xaPbey9iryY 7ikh3cvzRrsKAuHaDblKc4TZBQ0i3tPY7yBElZb9laREyp8z5Ph841gfhWPHi/lZgz8JxCgqKhb jDG2bMUFGb5mZXhZHDbh1WsRaSkun5R3tQh9TR+Z/m9V/jr5QX3uGIokWvt3GliC3cKPfyX1qa2 dkuQaQPavSwRSuibrHboZYEsAzPekEEqqAdbjoOrA+b5TEwp8mhOTIJkRc5yo2dAwuy2q0Fn5it 0Dujicq1glgU757pyG4O/TYM+rvZPDIWYZ4Zxq11/wnxJ3yoEMHyqrJJrYMe/P1uGkHF8LluNxR JOEB4Q2LjI934hgRXIiQ0hLynd1Wf9z+f9VW02vUW0gxxDidFyDCvJ/XMqDUFYocgE6eXdf3qTc T1ofQaf2ffOPSg2qPqKMhzLbyhoBoKcDpLNYF9anVHMeMWZCzq76nbLQ1p/AmQ5ZGzITLOW5 X-Proofpoint-GUID: qiHky4xSipkMLCmMNV9fZl4ZRHSG966O X-Proofpoint-ORIG-GUID: qiHky4xSipkMLCmMNV9fZl4ZRHSG966O 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-06-10_07,2025-06-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 mlxlogscore=999 phishscore=0 lowpriorityscore=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 malwarescore=0 mlxscore=0 impostorscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506100131 Received-SPF: pass client-ip=148.163.158.5; envelope-from=sudhakar@linux.ibm.com; helo=mx0b-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_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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 SGkgRGFuaWVsLAoKVGhhbmsgeW91IGZvciB5b3VyIHZhbHVhYmxlIHJldmlldy4gYWRkcmVzc2Vk IGFsbCB0aGUgYmVsb3cgcmV2aWV3IApjb21tZW50cyBpbiB2My4KClRoYW5rcywKU3VkaGFrYXIg S3VwcHVzbWF5CgpPbiAyMDI1LTA1LTI4IDIyOjE0LCBEYW5pZWwgS2lwZXIgd3JvdGU6Cj4gT24g VGh1LCBNYXIgMjcsIDIwMjUgYXQgMDE6MDI6MzBBTSArMDUzMCwgU3VkaGFrYXIgS3VwcHVzYW15 IHdyb3RlOgo+PiBGcm9tOiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5zLm5ldD4KPj4gCj4+IFRo aXMgY29kZSBhbGxvd3MgdXMgdG8gcGFyc2U6Cj4+IAo+PiAgLSBQS0NTIzcgc2lnbmVkRGF0YSBt ZXNzYWdlcy4gT25seSBhIHNpbmdsZSBzaWduZXJJbmZvIGlzIHN1cHBvcnRlZCwKPj4gICAgd2hp Y2ggaXMgYWxsIHRoYXQgdGhlIExpbnV4IHNpZ24tZmlsZSB1dGlsaXR5IHN1cHBvcnRzIGNyZWF0 aW5nCj4+ICAgIG91dC1vZi10aGUtYm94LiBPbmx5IFJTQSwgU0hBLTI1NiBhbmQgU0hBLTUxMiBh cmUgc3VwcG9ydGVkLgo+PiAgICBBbnkgY2VydGlmaWNhdGUgZW1iZWRkZWQgaW4gdGhlIFBLQ1Mj NyBtZXNzYWdlIHdpbGwgYmUgaWdub3JlZC4KPj4gCj4+ICAtIFguNTA5IGNlcnRpZmljYXRlczog YXQgbGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUKPj4gICAgUEtD UyM3IG1lc3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGlu IGdydWIgCj4+IHdpbGwKPiAKPiBzL2dydWIvR1JVQi8KPiAKPj4gICAgYmUgbGVhZiBjZXJ0aWZp Y2F0ZXMsIG5vdCBDQSBjZXJ0aWZpY2F0ZXMuIFRoZSBwYXJzZXIgZW5mb3JjZXMgCj4+IHRoaXMu Cj4+IAo+PiAgLSBYLjUwOSBjZXJ0aWZpY2F0ZXMgc3VwcG9ydCB0aGUgRXh0ZW5kZWQgS2V5IFVz YWdlIGV4dGVuc2lvbiBhbmQgCj4+IGhhbmRsZQo+PiAgICBpdCBieSB2ZXJpZnlpbmcgdGhhdCB0 aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgo+IAo+IENvdWxkIG5vdCB5 b3Ugc3BsaXQgdGhpcyBwYXRjaCB0byAyIG9yIDMgbG9naWNhbCBwYXJ0cz8KPiAKPj4gU2lnbmVk LW9mZi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMg RUtVIAo+PiBzdXBwb3J0Cj4+IFJlcG9ydGVkLWJ5OiBNaWNoYWwgU3VjaGFuZWsgPG1zdWNoYW5l a0BzdXNlLmNvbT4gIyBrZXkgdXNhZ2UgaXNzdWUKPj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIEF4 dGVucyA8ZGphQGF4dGVucy5uZXQ+Cj4+IFNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2Ft eSA8c3VkaGFrYXJAbGludXguaWJtLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IFN0ZWZhbiBCZXJnZXIg PHN0ZWZhbmJAbGludXguaWJtLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IEF2bmlzaCBDaG91aGFuIDxh dm5pc2hAbGludXguaWJtLmNvbT4KPj4gLS0tCj4+ICBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5k ZWRzaWcvYXBwZW5kZWRzaWcuaCB8IDExMCArKysKPj4gIGdydWItY29yZS9jb21tYW5kcy9hcHBl bmRlZHNpZy9hc24xdXRpbC5jICAgIHwgIDk4ICsrCj4+ICBncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvcGtjczcuYyAgICAgICB8IDQ2MCArKysrKysrKysKPj4gIGdydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy94NTA5LmMgICAgICAgIHwgOTUzIAo+PiArKysrKysrKysrKysrKysr KysrCj4+ICA0IGZpbGVzIGNoYW5nZWQsIDE2MjEgaW5zZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCj4+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1 dGlsLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRz aWcvcGtjczcuYwo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBl bmRlZHNpZy94NTA5LmMKPj4gCj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCAKPj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRz aWcvYXBwZW5kZWRzaWcuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw MDAuLjNmNGQ3MDAyZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCj4+IEBAIC0wLDAgKzEsMTEwIEBACj4+ICsvKgo+ PiArICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKPj4gKyAqICBDb3B5cmln aHQgKEMpIDIwMjAsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4+ICsgKiAg Q29weXJpZ2h0IChDKSAyMDIwLCAyMDIyIElCTSBDb3Jwb3JhdGlvbgo+IAo+IHMvMjAyMCwgMjAy Mi8yMDIwLCAyMDIyLCAyMDI1LyBldmVyeXdoZXJlIHBsZWFzZS4uLgo+IAo+PiArICoKPj4gKyAq ICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPj4gKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAKPj4gYnkKPj4gKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICogIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiArICogIEdSVUIgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+PiArICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+PiArICogIGFsb25nIHdpdGgg R1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPj4gKyAq Lwo+PiArCj4+ICsjaW5jbHVkZSA8Z3J1Yi9jcnlwdG8uaD4KPj4gKyNpbmNsdWRlIDxncnViL2xp YnRhc24xLmg+Cj4+ICsKPj4gK2V4dGVybiBhc24xX25vZGUgX2dudXRsc19nbnV0bHNfYXNuOwo+ IAo+IHMvX2dudXRsc19nbnV0bHNfYXNuL2dydWJfZ251dGxzX2dudXRsc19hc24vCj4gCj4+ICtl eHRlcm4gYXNuMV9ub2RlIF9nbnV0bHNfcGtpeF9hc247Cj4gCj4gcy9fZ251dGxzX3BraXhfYXNu L2dydWJfZ251dGxzX3BraXhfYXNuLwo+IAo+PiArI2RlZmluZSBNQVhfT0lEX0xFTiAzMgo+PiAr Cj4+ICsvKgo+PiArICogT25lIG9yIG1vcmUgeDUwOSBjZXJ0aWZpY2F0ZXMuCj4+ICsgKiBXZSBk byBsaW1pdGVkIHBhcnNpbmc6IGV4dHJhY3Rpbmcgb25seSB0aGUgc2VyaWFsLCBDTiBhbmQgUlNB IAo+PiBwdWJsaWMga2V5Lgo+PiArICovCj4+ICtzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZQo+PiAr ewo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqbmV4dDsKPj4gKyAgZ3J1Yl91aW50OF90 ICpzZXJpYWw7Cj4+ICsgIGdydWJfc2l6ZV90IHNlcmlhbF9sZW47Cj4+ICsgIGNoYXIgKnN1Ympl Y3Q7Cj4+ICsgIGdydWJfc2l6ZV90IHN1YmplY3RfbGVuOwo+PiArICAvKiBXZSBvbmx5IHN1cHBv cnQgUlNBIHB1YmxpYyBrZXlzLiBUaGlzIGVuY29kZXMgW21vZHVsdXMsIAo+PiBwdWJsaWNFeHBv bmVudF0gKi8KPj4gKyAgZ2NyeV9tcGlfdCBtcGlzWzJdOwo+PiArfTsKPj4gKwo+PiArLyoKPj4g KyAqIEEgUEtDUyM3IHNpZ25lZERhdGEgc2lnbmVySW5mby4KPj4gKyAqLwo+PiArc3RydWN0IHBr Y3M3X3NpZ25lckluZm8KPj4gK3sKPj4gKyAgY29uc3QgZ2NyeV9tZF9zcGVjX3QgKmhhc2g7Cj4+ ICsgIGdjcnlfbXBpX3Qgc2lnX21waTsKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBBIFBLQ1Mj NyBzaWduZWREYXRhIG1lc3NhZ2UuCj4+ICsgKiBXZSBtYWtlIG5vIGF0dGVtcHQgdG8gbWF0Y2gg aW50ZWxsaWdlbnRseSwgc28gd2UgZG9uJ3Qgc2F2ZSBhbnkgCj4+IGluZm8gYWJvdXQKPj4gKyAq IHRoZSBzaWduZXIuCj4+ICsgKi8KPj4gK3N0cnVjdCBwa2NzN19zaWduZWREYXRhCj4+ICt7Cj4+ ICsgIGludCBzaWduZXJJbmZvX2NvdW50Owo+PiArICBzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbyAq c2lnbmVySW5mb3M7Cj4+ICt9Owo+PiArCj4+ICsvKiBEbyBsaWJ0YXNuMSBpbml0ICovCj4+ICtp bnQKPj4gK2FzbjFfaW5pdCAodm9pZCk7Cj4+ICsKPj4gKy8qCj4+ICsgKiBJbXBvcnQgYSBERVIt ZW5jb2RlZCBjZXJ0aWZpY2F0ZSBhdCAnZGF0YScsIG9mIHNpemUgJ3NpemUnLgo+PiArICogUGxh Y2UgdGhlIHJlc3VsdHMgaW50byAncmVzdWx0cycsIHdoaWNoIG11c3QgYmUgYWxyZWFkeSBhbGxv Y2F0ZWQuCj4+ICsgKi8KPj4gK2dydWJfZXJyX3QKPj4gK3BhcnNlX3g1MDlfY2VydGlmaWNhdGUg KGNvbnN0IHZvaWQgKmRhdGEsIGdydWJfc2l6ZV90IHNpemUsIHN0cnVjdCAKPj4geDUwOV9jZXJ0 aWZpY2F0ZSAqcmVzdWx0cyk7Cj4+ICsKPj4gKy8qCj4+ICsgKiBSZWxlYXNlIGFsbCB0aGUgc3Rv cmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIHg1MDkgY2VydGlmaWNhdGUuCj4+ICsgKiBJZiB0aGUg Y2FsbGVyIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0aGUgY2VydGlmaWNhdGUsIGl0IG11c3QgZnJl ZSAKPj4gaXQuCj4+ICsgKiBUaGUgY2FsbGVyIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIG1haW50 ZW5hbmNlIG9mIHRoZSBsaW5rZWQgbGlzdC4KPj4gKyAqLwo+PiArdm9pZAo+PiArY2VydGlmaWNh dGVfcmVsZWFzZSAoc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQpOwo+PiArCj4+ICsvKgo+ PiArICogUGFyc2UgYSBQS0NTIzcgbWVzc2FnZSwgd2hpY2ggbXVzdCBiZSBhIHNpZ25lZERhdGEg bWVzc2FnZS4KPj4gKyAqIFRoZSBtZXNzYWdlIG11c3QgYmUgaW4gJ3NpZ2J1ZicgYW5kIG9mIHNp emUgJ2RhdGFfc2l6ZScuIFRoZSAKPj4gcmVzdWx0IGlzCj4+ICsgKiBwbGFjZWQgaW4gJ21zZycs IHdoaWNoIG11c3QgYWxyZWFkeSBiZSBhbGxvY2F0ZWQuCj4+ICsgKi8KPj4gK2dydWJfZXJyX3QK Pj4gK3BhcnNlX3BrY3M3X3NpZ25lZERhdGEgKGNvbnN0IHZvaWQgKnNpZ2J1ZiwgZ3J1Yl9zaXpl X3QgZGF0YV9zaXplLCAKPj4gc3RydWN0IHBrY3M3X3NpZ25lZERhdGEgKm1zZyk7Cj4+ICsKPj4g Ky8qCj4+ICsgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBL Q1MjNyBtZXNzYWdlLgo+PiArICogSWYgdGhlIGNhbGxlciBkeW5hbWljYWxseSBhbGxvY2F0ZWQg dGhlIG1lc3NhZ2UsIGl0IG11c3QgZnJlZSBpdC4KPj4gKyAqLwo+PiArdm9pZAo+PiArcGtjczdf c2lnbmVkRGF0YV9yZWxlYXNlIChzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YSAqbXNnKTsKPj4gKwo+ PiArLyoKPj4gKyAqIFJlYWQgYSB2YWx1ZSBmcm9tIGFuIEFTTjEgbm9kZSwgYWxsb2NhdGluZyBt ZW1vcnkgdG8gc3RvcmUgaXQuCj4+ICsgKiBJdCB3aWxsIHdvcmsgZm9yIGFueXRoaW5nIHdoZXJl IHRoZSBzaXplIGxpYnRhc24xIHJldHVybnMgaXMgCj4+IHJpZ2h0Ogo+PiArICogIC0gSW50ZWdl cnMKPj4gKyAqICAtIE9jdGV0IHN0cmluZ3MKPj4gKyAqICAtIERFUiBlbmNvZGluZyBvZiBvdGhl ciBzdHJ1Y3R1cmVzCj4+ICsgKiBJdCB3aWxsIF9ub3RfIHdvcmsgZm9yIHRoaW5ncyB3aGVyZSBs aWJ0YXNuMSBzaXplIHJlcXVpcmVzIAo+PiBhZGp1c3RtZW50Ogo+PiArICogIC0gU3RyaW5ncyB0 aGF0IHJlcXVpcmUgYW4gZXh0cmEgbnVsbCBieXRlIGF0IHRoZSBlbmQKPj4gKyAqICAtIEJpdCBz dHJpbmdzIGJlY2F1c2UgbGlidGFzbjEgcmV0dXJucyB0aGUgbGVuZ3RoIGluIGJpdHMsIG5vdCAK Pj4gYnl0ZXMuCj4+ICsgKgo+PiArICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBub24tTlVM TCB2YWx1ZSwgdGhlIGNhbGxlciBtdXN0IGZyZWUgaXQuCj4+ICsgKi8KPj4gK3ZvaWQgKgo+PiAr Z3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChhc24xX25vZGUgbm9kZSwgY29uc3QgY2hhciAq bmFtZSwgY29uc3QgCj4+IGNoYXIgKmZyaWVuZGx5X25hbWUsIGludCAqY29udGVudF9zaXplKTsK Pj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5j IAo+PiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMC4uMDZjM2I2MWMxCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1dGlsLmMK Pj4gQEAgLTAsMCArMSw5OCBAQAo+PiArLyoKPj4gKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmll ZCBCb290bG9hZGVyCj4+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgo+PiArICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBJQk0g Q29ycG9yYXRpb24KPj4gKyAqCj4+ICsgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+ICsgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgCj4+IGJ5Cj4+ ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKPj4gKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+PiArICoKPj4gKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKPj4gKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGdydWIvbGlidGFz bjEuaD4KPj4gKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9lcnIu aD4KPj4gKyNpbmNsdWRlIDxncnViL21tLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9jcnlwdG8uaD4K Pj4gKyNpbmNsdWRlIDxncnViL21pc2MuaD4KPj4gKyNpbmNsdWRlIDxncnViL2djcnlwdC9nY3J5 cHQuaD4KPj4gKwo+PiArI2luY2x1ZGUgImFwcGVuZGVkc2lnLmgiCj4+ICsKPj4gK2FzbjFfbm9k ZSBfZ251dGxzX2dudXRsc19hc24gPSBOVUxMOwo+PiArYXNuMV9ub2RlIF9nbnV0bHNfcGtpeF9h c24gPSBOVUxMOwo+IAo+IEdsb2JhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgg Z3J1Yl8uLi4KPiAKPj4gK2V4dGVybiBjb25zdCBhc24xX3N0YXRpY19ub2RlIGdudXRsc19hc24x X3RhYltdOwo+PiArZXh0ZXJuIGNvbnN0IGFzbjFfc3RhdGljX25vZGUgcGtpeF9hc24xX3RhYltd Owo+IAo+IERpdHRvLgo+IAo+PiArLyoKPj4gKyAqIFJlYWQgYSB2YWx1ZSBmcm9tIGFuIEFTTjEg bm9kZSwgYWxsb2NhdGluZyBtZW1vcnkgdG8gc3RvcmUgaXQuCj4+ICsgKiBJdCB3aWxsIHdvcmsg Zm9yIGFueXRoaW5nIHdoZXJlIHRoZSBzaXplIGxpYnRhc24xIHJldHVybnMgaXMgCj4+IHJpZ2h0 Ogo+PiArICogIC0gSW50ZWdlcnMKPj4gKyAqICAtIE9jdGV0IHN0cmluZ3MKPj4gKyAqICAtIERF UiBlbmNvZGluZyBvZiBvdGhlciBzdHJ1Y3R1cmVzCj4+ICsgKiBJdCB3aWxsIF9ub3RfIHdvcmsg Zm9yIHRoaW5ncyB3aGVyZSBsaWJ0YXNuMSBzaXplIHJlcXVpcmVzIAo+PiBhZGp1c3RtZW50Ogo+ PiArICogIC0gU3RyaW5ncyB0aGF0IHJlcXVpcmUgYW4gZXh0cmEgTlVMTCBieXRlIGF0IHRoZSBl bmQKPj4gKyAqICAtIEJpdCBzdHJpbmdzIGJlY2F1c2UgbGlidGFzbjEgcmV0dXJucyB0aGUgbGVu Z3RoIGluIGJpdHMsIG5vdCAKPj4gYnl0ZXMuCj4+ICsgKiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJu cyBhIG5vbi1OVUxMIHZhbHVlLCB0aGUgY2FsbGVyIG11c3QgZnJlZSBpdC4KPj4gKyAqLwo+PiAr dm9pZCAqCj4+ICtncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGFzbjFfbm9kZSBub2RlLCBj b25zdCBjaGFyICpuYW1lLCBjb25zdCAKPj4gY2hhciAqZnJpZW5kbHlfbmFtZSwgaW50ICpjb250 ZW50X3NpemUpCj4+ICt7Cj4+ICsgIGludCByZXN1bHQ7Cj4+ICsgIGdydWJfdWludDhfdCAqdG1w c3RyID0gTlVMTDsKPj4gKyAgaW50IHRtcHN0cl9zaXplID0gMDsKPj4gKwo+PiArICByZXN1bHQg PSBhc24xX3JlYWRfdmFsdWUgKG5vZGUsIG5hbWUsIE5VTEwsICZ0bXBzdHJfc2l6ZSk7Cj4+ICsg IGlmIChyZXN1bHQgIT0gQVNOMV9NRU1fRVJST1IpCj4+ICsgICAgewo+PiArICAgICAgZ3J1Yl9z bnByaW50ZiAoZ3J1Yl9lcnJtc2csIHNpemVvZiAoZ3J1Yl9lcnJtc2cpLAo+PiArICAgICAgICAg ICAgICAgICAgICAgXygiUmVhZGluZyBzaXplIG9mICVzIGRpZCBub3QgcmV0dXJuIGV4cGVjdGVk IAo+PiBzdGF0dXM6ICVzIiksCj4gCj4gUGxlYXNlIGRyb3AgXygpLgo+IAo+PiArICAgICAgICAg ICAgICAgICAgICAgZnJpZW5kbHlfbmFtZSwgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsg ICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRTsKPiAKPiBXaHkgZG8gbm90 IHlvdSB1c2UgZ3J1Yl9lcnJvcigpIGhlcmU/Cj4gCj4+ICsgICAgICByZXR1cm4gTlVMTDsKPj4g KyAgICB9Cj4+ICsKPj4gKyAgdG1wc3RyID0gZ3J1Yl9tYWxsb2MgKHRtcHN0cl9zaXplKTsKPj4g KyAgaWYgKHRtcHN0ciA9PSBOVUxMKQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfc25wcmludGYg KGdydWJfZXJybXNnLCBzaXplb2YgKGdydWJfZXJybXNnKSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHRvIHN0b3JlICVzIiwgCj4+IGZyaWVuZGx5 X25hbWUpOwo+PiArICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX09VVF9PRl9NRU1PUlk7Cj4g Cj4gRGl0dG8uCj4gCj4+ICsgICAgICByZXR1cm4gTlVMTDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg cmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChub2RlLCBuYW1lLCB0bXBzdHIsICZ0bXBzdHJfc2l6 ZSk7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAg IGdydWJfZnJlZSAodG1wc3RyKTsKPj4gKyAgICAgIGdydWJfc25wcmludGYgKGdydWJfZXJybXNn LCBzaXplb2YgKGdydWJfZXJybXNnKSwgIkVycm9yIAo+PiByZWFkaW5nICVzOiAlcyIsCj4+ICsg ICAgICAgICAgICAgICAgICAgICBmcmllbmRseV9uYW1lLCBhc24xX3N0cmVycm9yIChyZXN1bHQp KTsKPj4gKyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9CQURfRklMRV9UWVBFOwo+IAo+IERp dHRvLgo+IAo+PiArICAgICAgcmV0dXJuIE5VTEw7Cj4+ICsgICAgfQo+PiArCj4+ICsgICpjb250 ZW50X3NpemUgPSB0bXBzdHJfc2l6ZTsKPj4gKwo+PiArICByZXR1cm4gdG1wc3RyOwo+PiArfQo+ PiArCj4+ICtpbnQKPj4gK2FzbjFfaW5pdCAodm9pZCkKPj4gK3sKPj4gKyAgaW50IHJlczsKPiAK PiBNaXNzaW5nIGVtcHR5IGxpbmUuCj4gCj4+ICsgIHJlcyA9IGFzbjFfYXJyYXkydHJlZSAoZ251 dGxzX2FzbjFfdGFiLCAmX2dudXRsc19nbnV0bHNfYXNuLCBOVUxMKTsKPj4gKyAgaWYgKHJlcyAh PSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgcmV0dXJuIHJlczsKPj4gKwo+PiArICByZXMgPSBhc24x X2FycmF5MnRyZWUgKHBraXhfYXNuMV90YWIsICZfZ251dGxzX3BraXhfYXNuLCBOVUxMKTsKPj4g KyAgcmV0dXJuIHJlczsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9wa2NzNy5jIAo+PiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9w a2NzNy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMC4uMzFhNWVh YjZhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL3BrY3M3LmMKPj4gQEAgLTAsMCArMSw0NjAgQEAKPj4gKy8qCj4+ICsgKiAgR1JVQiAgLS0g IEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgo+PiArICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAy MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KPj4gKyAqICBDb3B5cmlnaHQgKEMpIDIw MjAsIDIwMjIgSUJNIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICogIEdSVUIgaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIAo+PiBieQo+PiArICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ PiArICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsg Kgo+PiArICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCj4+ICsgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRl ICJhcHBlbmRlZHNpZy5oIgo+PiArI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+PiArI2luY2x1ZGUg PGdydWIvY3J5cHRvLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+Cj4+ICsj aW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4+ICsKPj4gK3N0YXRpYyBjaGFyIGFzbjFfZXJyb3JbQVNO MV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRV07Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNTY1 MiBzIDUuMQo+PiArICovCj4gCj4gUGxlYXNlIHB1dCB0aGlzIGNvbW1lbnQgaW4gb25lIGxpbmUg YW5kIHMvcy9zZWN0aW9uLz8KPiAKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpzaWduZWREYXRhX29p ZCA9ICIxLjIuODQwLjExMzU0OS4xLjcuMiI7Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNDA1NSBz IDIuMQo+PiArICovCj4gCj4gRGl0dG8uIFBsZWFzZSBmaXggc2ltaWxhciBwcm9ibGVtcyBldmVy eXdoZXJlLi4uCj4gCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqc2hhMjU2X29pZCA9ICIyLjE2Ljg0 MC4xLjEwMS4zLjQuMi4xIjsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpzaGE1MTJfb2lkID0gIjIu MTYuODQwLjEuMTAxLjMuNC4yLjMiOwo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArcHJv Y2Vzc19jb250ZW50IChncnViX3VpbnQ4X3QgKmNvbnRlbnQsIGludCBzaXplLCBzdHJ1Y3QgCj4+ IHBrY3M3X3NpZ25lZERhdGEgKm1zZykKPj4gK3sKPj4gKyAgaW50IHJlczsKPj4gKyAgYXNuMV9u b2RlIHNpZ25lZF9wYXJ0Owo+PiArICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7Cj4+ ICsgIGNoYXIgYWxnb19vaWRbTUFYX09JRF9MRU5dOwo+PiArICBpbnQgYWxnb19vaWRfc2l6ZSA9 IHNpemVvZiAoYWxnb19vaWQpOwo+PiArICBpbnQgYWxnb19jb3VudDsKPj4gKyAgaW50IHNpZ25l cl9jb3VudDsKPj4gKyAgaW50IGk7Cj4+ICsgIGNoYXIgdmVyc2lvbjsKPj4gKyAgaW50IHZlcnNp b25fc2l6ZSA9IHNpemVvZiAodmVyc2lvbik7Cj4+ICsgIGdydWJfdWludDhfdCAqcmVzdWx0X2J1 ZjsKPj4gKyAgaW50IHJlc3VsdF9zaXplID0gMDsKPj4gKyAgaW50IGNybHNfc2l6ZSA9IDA7Cj4+ ICsgIGdjcnlfZXJyb3JfdCBnY3J5X2VycjsKPj4gKyAgYm9vbCBzaGEyNTZfaW5fZGEsIHNoYTI1 Nl9pbl9zaSwgc2hhNTEyX2luX2RhLCBzaGE1MTJfaW5fc2k7Cj4+ICsgIGNoYXIgKmRhX3BhdGg7 Cj4+ICsgIGNoYXIgKnNpX3NpZ19wYXRoOwo+PiArICBjaGFyICpzaV9kYV9wYXRoOwo+PiArCj4+ ICsgIHJlcyA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKF9nbnV0bHNfcGtpeF9hc24sIAo+PiAiUEtJ WDEucGtjcy03LVNpZ25lZERhdGEiLCAmc2lnbmVkX3BhcnQpOwo+PiArICBpZiAocmVzICE9IEFT TjFfU1VDQ0VTUykKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01F TU9SWSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgQVNOLjEg c3RydWN0dXJlIGZvciBQS0NTIzcgCj4+IHNpZ25lZCBwYXJ0LiIpOwo+IAo+IEFsbCBlcnJvciBt ZXNzYWdlcyBpbiB0aGUgY29yZSBHUlVCIGNvZGUgc3RhcnQgd2l0aCBsb3dlcmNhc2UgYW5kIGRv IAo+IG5vdAo+IGhhdmUgZnVsbCBzdG9wIGF0IHRoZSBlbmQuIFBsZWFzZSBmaXggaXQgaW4gYWxs IHBhdGNoZXMuCj4gCj4+ICsgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnNpZ25lZF9wYXJ0 LCBjb250ZW50LCAmc2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX0RF Q09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOwo+PiArICBpZiAocmVzICE9IEFTTjFf U1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJlYWRpbmcg UEtDUyM3IHNpZ25lZCBkYXRhOiAlcyIsIAo+PiBhc24xX2Vycm9yKTsKPj4gKyAgICAgIGdvdG8g Y2xlYW51cF9zaWduZWRfcGFydDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4gKyAgICogU2ln bmVkRGF0YSA6Oj0gU0VRVUVOQ0Ugewo+PiArICAgKiAgICAgdmVyc2lvbiBDTVNWZXJzaW9uLAo+ PiArICAgKiAgICAgZGlnZXN0QWxnb3JpdGhtcyBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVycywK Pj4gKyAgICogICAgIGVuY2FwQ29udGVudEluZm8gRW5jYXBzdWxhdGVkQ29udGVudEluZm8sCj4+ ICsgICAqICAgICBjZXJ0aWZpY2F0ZXMgWzBdIElNUExJQ0lUIENlcnRpZmljYXRlU2V0IE9QVElP TkFMLAo+PiArICAgKiAgICAgY3JscyBbMV0gSU1QTElDSVQgUmV2b2NhdGlvbkluZm9DaG9pY2Vz IE9QVElPTkFMLAo+PiArICAgKiAgICAgc2lnbmVySW5mb3MgU2lnbmVySW5mb3MgfQo+PiArICAg Ki8KPj4gKwo+PiArICAvKiB2ZXJzaW9uIHBlciB0aGUgYWxnbyBpbiA1LjEsIG11c3QgYmUgMSAq Lwo+IAo+IENvdWxkIHlvdSBleHBhbmQgdGhpcyBjb21tZW50PyBJdCBoYXMgdG8gYmUgY2xlYXIu Cj4gCj4+ICsgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2lnbmVkX3BhcnQsICJ2ZXJzaW9uIiwg JnZlcnNpb24sIAo+PiAmdmVyc2lvbl9zaXplKTsKPj4gKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NF U1MpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJ R05BVFVSRSwgIkVycm9yIHJlYWRpbmcgCj4+IHNpZ25lZERhdGEgdmVyc2lvbjogJXMiLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAgICBn b3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmICh2ZXJzaW9u ICE9IDEpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X1NJR05BVFVSRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIHNpZ25h dHVyZSB2ZXJzaW9uIHYlZCwgb25seSB2MSAKPj4gc3VwcG9ydGVkIiwgdmVyc2lvbik7Cj4+ICsg ICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qCj4+ ICsgICAqIGRpZ2VzdEFsZ29yaXRobXMgRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllcnMKPj4gKyAg ICoKPj4gKyAgICogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllcnMgOjo9IFNFVCBPRiBEaWdlc3RB bGdvcml0aG1JZGVudGlmaWVyCj4+ICsgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZlciBpcyBh biBYLjUwOSBBbGdvcml0aG1JZGVudGlmaWVyIAo+PiAoMTAuMS4xKQo+PiArICAgKgo+PiArICAg KiBSRkMgNDA1NSBzIDIuMToKPj4gKyAgICogc2hhMjU2SWRlbnRpZmllciAgQWxnb3JpdGhtSWRl bnRpZmllciAgOjo9ICB7IGlkLXNoYTI1NiwgTlVMTCB9Cj4+ICsgICAqIHNoYTUxMklkZW50aWZp ZXIgIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgeyBpZC1zaGE1MTIsIE5VTEwgfQo+PiArICAg Kgo+PiArICAgKiBXZSBvbmx5IHN1cHBvcnQgMSBlbGVtZW50IGluIHRoZSBzZXQsIGFuZCB3ZSBk byBub3QgY2hlY2sgCj4+IHBhcmFtZXRlcnMgYXRtLgo+PiArICAgKi8KPj4gKyAgcmVzID0gYXNu MV9udW1iZXJfb2ZfZWxlbWVudHMgKHNpZ25lZF9wYXJ0LCAiZGlnZXN0QWxnb3JpdGhtcyIsIAo+ PiAmYWxnb19jb3VudCk7Cj4+ICsgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsK Pj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJFcnJv ciBjb3VudGluZyAKPj4gbnVtYmVyIG9mIGRpZ2VzdCBhbGdvcml0aG1zOiAlcyIsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKPj4gKyAgICAgIGdvdG8g Y2xlYW51cF9zaWduZWRfcGFydDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgaWYgKGFsZ29fY291bnQg PD0gMCkKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf U0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkEgbWluaW11bSBvZiAxIGRp Z2VzdCBhbGdvcml0aG0gaXMgCj4+IHJlcXVpcmVkIik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXBf c2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmIChhbGdvX2NvdW50ID4gMikKPj4g KyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5U RURfWUVULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkEgbWF4aW11bSBvZiAyIGRpZ2Vz dCBhbGdvcml0aG1zIGlzIAo+PiBzdXBwb3J0ZWQiKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cF9z aWduZWRfcGFydDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgc2hhMjU2X2luX2RhID0gZmFsc2U7Cj4+ ICsgIHNoYTUxMl9pbl9kYSA9IGZhbHNlOwo+PiArCj4+ICsgIGZvciAoaSA9IDA7IGkgPCBhbGdv X2NvdW50OyBpKyspCj4+ICsgICAgewo+PiArICAgICAgZGFfcGF0aCA9IGdydWJfeGFzcHJpbnRm ICgiZGlnZXN0QWxnb3JpdGhtcy4/JWQuYWxnb3JpdGhtIiwgaSArIAo+PiAxKTsKPj4gKyAgICAg IGlmICghZGFfcGF0aCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJy b3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBwYXRoIGZvciBkaWdlc3QgCj4+IGFsZ29yaXRobSAiCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcnNpbmcgcGF0aCIpOwo+PiArICAgICAg ICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICBhbGdvX29pZF9zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7Cj4+ICsgICAgICByZXMgPSBhc24x X3JlYWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCBkYV9wYXRoLCBhbGdvX29pZCwgCj4+ICZhbGdvX29p ZF9zaXplKTsKPj4gKyAgICAgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwg IkVycm9yIHJlYWRpbmcgCj4+IGRpZ2VzdCBhbGdvcml0aG06ICVzIiwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKPj4gKyAgICAgICAgICBncnVi X2ZyZWUgKGRhX3BhdGgpOwo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsK Pj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICBpZiAoZ3J1Yl9zdHJuY21wIChzaGE1MTJfb2lk LCBhbGdvX29pZCwgYWxnb19vaWRfc2l6ZSkgPT0gMCkKPj4gKyAgICAgICAgewo+PiArICAgICAg ICAgIGlmICghc2hhNTEyX2luX2RhKQo+IAo+IHNoYTUxMl9pbl9kYSA9PSBmYWxzZSAoZm9yIGJv b2xzKSBwbGVhc2UgZXZlcnl3aGVyZS4uLgo+IAo+PiArICAgICAgICAgICAgc2hhNTEyX2luX2Rh ID0gdHJ1ZTsKPj4gKyAgICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAg ICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTSEEtNTEyIHNwZWNpZmllZCB0d2ljZSBpbiBk aWdlc3QgCj4+IGFsZ29yaXRobSBsaXN0Iik7Cj4+ICsgICAgICAgICAgICAgIGdydWJfZnJlZSAo ZGFfcGF0aCk7Cj4+ICsgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKPj4g KyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgfQo+PiArICAgICAgZWxzZSBpZiAoZ3J1Yl9zdHJu Y21wIChzaGEyNTZfb2lkLCBhbGdvX29pZCwgYWxnb19vaWRfc2l6ZSkgPT0gCj4+IDApCj4+ICsg ICAgICAgIHsKPj4gKyAgICAgICAgICBpZiAoIXNoYTI1Nl9pbl9kYSkKPj4gKyAgICAgICAgICAg IHNoYTI1Nl9pbl9kYSA9IHRydWU7Cj4+ICsgICAgICAgICAgZWxzZQo+PiArICAgICAgICAgICAg ewo+PiArICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFU VVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTI1NiBzcGVjaWZp ZWQgdHdpY2UgaW4gZGlnZXN0IAo+PiBhbGdvcml0aG0gbGlzdCIpOwo+PiArICAgICAgICAgICAg ICBncnViX2ZyZWUgKGRhX3BhdGgpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2ln bmVkX3BhcnQ7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIGVsc2UK Pj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05P VF9JTVBMRU1FTlRFRF9ZRVQsICJPbmx5IAo+PiBTSEEtMjU2IGFuZCBTSEEtNTEyIGhhc2hlcyBh cmUgc3VwcG9ydGVkLCBmb3VuZCBPSUQgJXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFsZ29fb2lkKTsKPj4gKyAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOwo+PiArICAg ICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsg ICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOwo+PiArICAgIH0KPj4gKwo+PiArICAvKiBhdCB0aGlz IHBvaW50LCBhdCBsZWFzdCBvbmUgb2Ygc2hhezI1Niw1MTJ9X2luX2RhIG11c3QgYmUgdHJ1ZSAK Pj4gKi8KPj4gKwo+PiArICAvKgo+PiArICAgKiBXZSBpZ25vcmUgdGhlIGNlcnRpZmljYXRlcywg YnV0IHdlIGRvbid0IHBlcm1pdCBDUkxzLgo+PiArICAgKiBBIENSTCBlbnRyeSBtaWdodCBiZSBy ZXZva2luZyB0aGUgY2VydGlmaWNhdGUgd2UncmUgdXNpbmcsIGFuZCAKPj4gd2UgaGF2ZQo+PiAr ICAgKiBubyB3YXkgb2YgZGVhbGluZyB3aXRoIHRoYXQgYXQgdGhlIG1vbWVudC4KPj4gKyAgICov Cj4+ICsgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2lnbmVkX3BhcnQsICJjcmxzIiwgTlVMTCwg JmNybHNfc2l6ZSk7Cj4+ICsgIGlmIChyZXMgIT0gQVNOMV9FTEVNRU5UX05PVF9GT1VORCkKPj4g KyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5U RURfWUVULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIlBLQ1MjNyBtZXNzYWdlcyB3aXRo IGVtYmVkZGVkIENSTHMgYXJlIG5vdCAKPj4gc3VwcG9ydGVkIik7Cj4+ICsgICAgICBnb3RvIGNs ZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qIHJlYWQgdGhlIHNpZ25h dHVyZXMgKi8KPj4gKwo+PiArICByZXMgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoc2lnbmVk X3BhcnQsICJzaWduZXJJbmZvcyIsIAo+PiAmc2lnbmVyX2NvdW50KTsKPj4gKyAgaWYgKHJlcyAh PSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX1NJR05BVFVSRSwgIkVycm9yIGNvdW50aW5nIAo+PiBudW1iZXIgb2Ygc2lnbmVy czogJXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7 Cj4+ICsgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsg IGlmIChzaWduZXJfY291bnQgPD0gMCkKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiQSBtaW5pbXVtIG9mIDEgCj4+IHNpZ25lciBp cyByZXF1aXJlZCIpOwo+PiArICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owo+PiArICAg IH0KPj4gKwo+PiArICBtc2ctPnNpZ25lckluZm9zID0gZ3J1Yl9jYWxsb2MgKHNpZ25lcl9jb3Vu dCwgc2l6ZW9mIChzdHJ1Y3QgCj4+IHBrY3M3X3NpZ25lckluZm8pKTsKPj4gKyAgaWYgKCFtc2ct PnNpZ25lckluZm9zKQo+IAo+IG1zZy0+c2lnbmVySW5mb3MgPT0gTlVMTCAoZm9yIHBvaW50ZXJz KSBldmVyeXdoZXJlIHBsZWFzZS4uLgo+IAo+IEFkZGl0aW9uYWxseSwgYWxsIChnb3RvKSBsYWJl bHMgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGggb25lIHNwYWNlLgo+IAo+IERhbmllbAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWls aW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL2dydWItZGV2ZWwK