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 7DAFAC021A4 for ; Wed, 26 Feb 2025 04:44:46 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tn9HE-00051P-Md; Tue, 25 Feb 2025 23:44:08 -0500 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 1tn9HD-000505-Cu for grub-devel@gnu.org; Tue, 25 Feb 2025 23:44:07 -0500 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 1tn9HA-0007es-1F for grub-devel@gnu.org; Tue, 25 Feb 2025 23:44:07 -0500 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51Q1kv35018255; Wed, 26 Feb 2025 04:44:01 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=Ew4w/t DkXWSM8qfJ47iFiBxJHYqll9LLAB5W6D+OP7g=; b=OftwF5NojSKpMXNCmTw6do 0+8huXFNCP2f1hlxRUeMcFJXMi4OFnmF/aCq2zy/d4cgOc2Bf52A6ggNlI7F3206 Apz94kOMd9y+TopCiK//oTpiNavKhLhOfuH0jz81TMO6JJSzV7Q+dJTKToySNCF9 JmfsE/boK24JsTbBJ/91blK/Ai2RS+hiM4b5/urGgdsBWIUBQScPdT4fcygahcyG SKT/3EL+tjmWPu9EQMHoo8j6ML3xw1YBESPTjCOmx0d3kEYexK5tChUKfaLiWOYv 0KMnIEY1xRZ3nbBSOv16hRhlP0eDraeZgGXU0BSip99sGT55echAWOLgcUYidwiQ == 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 451q5bh3pp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 26 Feb 2025 04:44:00 +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 51Q3ERgc012491; Wed, 26 Feb 2025 04:44:00 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 44ys9yh0vc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 26 Feb 2025 04:44:00 +0000 Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 51Q4hxAJ26215022 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Feb 2025 04:43:59 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DB97458059; Wed, 26 Feb 2025 04:43:58 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 22BB85805B; Wed, 26 Feb 2025 04:43:58 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 26 Feb 2025 04:43:58 +0000 (GMT) MIME-Version: 1.0 Date: Wed, 26 Feb 2025 10:13:57 +0530 From: sudhakar To: Stefan Berger Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com Subject: Re: [PATCH v1 15/21] ieee1275: Read the DB and DBX secure boot variables In-Reply-To: References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-16-sudhakar@linux.ibm.com> Message-ID: X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-GUID: t-K5EGIGAZMZrETdN6BNQr8F9v1iCVGf X-Proofpoint-ORIG-GUID: t-K5EGIGAZMZrETdN6BNQr8F9v1iCVGf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-25_08,2025-02-25_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 impostorscore=0 spamscore=0 bulkscore=0 malwarescore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2502100000 definitions=main-2502260033 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_H2=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 T24gMjAyNC0xMi0zMSAwNDozMSwgU3RlZmFuIEJlcmdlciB3cm90ZToKPiBPbiAxMi8xOC8yNCA5 OjU2IEFNLCBTdWRoYWthciBLdXBwdXNhbXkgd3JvdGU6Cj4+IElmIHNlY3VyZSBib290IGlzIGVu YWJsZWQgd2l0aCBQS1MsIGl0IHdpbGwgcmVhZCBzZWN1cmUgYm9vdCB2YXJpYWJsZXMKPj4gc3Vj aCBhcyBkYiBhbmQgZGJ4IGZyb20gUEtTIGFuZCBleHRyYWN0IGNlcnRpZmljYXRlcyBmcm9tIEVT TC4KPj4gSXQgd291bGQgYmUgc2F2ZWQgaW4gdGhlIHBsYXRmb3JtIGtleXN0b3JlIGJ1ZmZlciwg YW5kCj4+IHRoZSBhcHBlbmRlZHNpZyAobW9kdWxlKSB3b3VsZCByZWFkIGl0IGxhdGVyIHRvIGV4 dHJhY3QKPj4gdGhlIGNlcnRpZmljYXRlJ3MgZGV0YWlscy4KPj4gCj4+IEluIHRoZSBmb2xsb3dp bmcgc2NlbmFyaW9zLCBzdGF0aWMga2V5IG1vZGUgd2lsbCBiZSBhY3RpdmF0ZWQ6Cj4+ICAgMS4g V2hlbiBzZWN1cmUgYm9vdCBpcyBlbmFibGVkIHdpdGggc3RhdGljCj4+ICAgMi4gV2hlbiBTQiBW ZXJzaW9uIGlzIHVuYXZhaWxhYmxlIGJ1dCBTZWN1cmUgQm9vdCBpcyBlbmFibGVkCj4+ICAgMy4g V2hlbiBQS1Mgc3VwcG9ydCBpcyB1bmF2YWlsYWJsZSBidXQgc2VjdXJlIGJvb3QgaXMgZW5hYmxl ZAo+PiAKPj4gTm90ZTotCj4+IAo+PiBTQiBWZXJzaW9uIC0gc2VjdXJlIGJvb3QgbW9kZQo+PiAx IC0gUEtTCj4+IDAgLSBzdGF0aWMga2V5IChlbWJlZGVkIGtleSkKPj4gCj4+IFNpZ25lZC1vZmYt Ynk6IFN1ZGhha2FyIEt1cHB1c2FteSA8c3VkaGFrYXJAbGludXguaWJtLmNvbT4KPj4gLS0tCj4+ ICAgZ3J1Yi1jb3JlL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4+ ICAgZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmICAgICAgICAgICAgICAgICB8ICAgMSArCj4+ ICAgZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvaW5pdC5jICAgICAgICAgICAgICB8ICAxNCArLQo+ PiAgIGdydWItY29yZS9rZXJuL2llZWUxMjc1L3BsYXRmb3JtX2tleXN0b3JlLmMgfCAzMzcgCj4+ ICsrKysrKysrKysrKysrKysrKysrCj4+ICAgaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3Jl LmggICAgICAgICAgICB8IDIzMyArKysrKysrKysrKysrKwo+PiAgIDUgZmlsZXMgY2hhbmdlZCwg NTg0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGdydWItY29yZS9rZXJuL2llZWUxMjc1L3BsYXRmb3JtX2tleXN0b3JlLmMKPj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3JlLmgKPj4gCj4+IGRpZmYg LS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuYW0gYi9ncnViLWNvcmUvTWFrZWZpbGUuYW0KPj4g aW5kZXggZTUwZGI4MTA2Li5hZmIyNWRjNGYgMTAwNjQ0Cj4+IC0tLSBhL2dydWItY29yZS9NYWtl ZmlsZS5hbQo+PiArKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuYW0KPj4gQEAgLTc5LDYgKzc5LDcg QEAgS0VSTkVMX0hFQURFUl9GSUxFUyArPSAKPj4gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2dydWIv ZmlsZS5oCj4+ICAgS0VSTkVMX0hFQURFUl9GSUxFUyArPSAkKHRvcF9zcmNkaXIpL2luY2x1ZGUv Z3J1Yi9mcy5oCj4+ICAgS0VSTkVMX0hFQURFUl9GSUxFUyArPSAkKHRvcF9zcmNkaXIpL2luY2x1 ZGUvZ3J1Yi9pMThuLmgKPj4gICBLRVJORUxfSEVBREVSX0ZJTEVTICs9ICQodG9wX3NyY2Rpcikv aW5jbHVkZS9ncnViL2tlcm5lbC5oCj4+ICtLRVJORUxfSEVBREVSX0ZJTEVTICs9ICQodG9wX3Ny Y2RpcikvaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3JlLmgKPj4gICBLRVJORUxfSEVBREVS X0ZJTEVTICs9ICQodG9wX3NyY2RpcikvaW5jbHVkZS9ncnViL2xpc3QuaAo+PiAgIEtFUk5FTF9I RUFERVJfRklMRVMgKz0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2dydWIvbG9ja2Rvd24uaAo+PiAg IEtFUk5FTF9IRUFERVJfRklMRVMgKz0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2dydWIvbWlzYy5o Cj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUv TWFrZWZpbGUuY29yZS5kZWYKPj4gaW5kZXggMWVkNTViMGUzLi4yZmQwNjAxMjMgMTAwNjQ0Cj4+ IC0tLSBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+PiArKysgYi9ncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYKPj4gQEAgLTE3MCw2ICsxNzAsNyBAQCBrZXJuZWwgPSB7Cj4+ICAgICBp ZWVlMTI3NSA9IGtlcm4vaWVlZTEyNzUvb3BlbmZ3LmM7Cj4+ICAgICBpZWVlMTI3NSA9IHRlcm0v aWVlZTEyNzUvY29uc29sZS5jOwo+PiAgICAgaWVlZTEyNzUgPSBrZXJuL2llZWUxMjc1L2luaXQu YzsKPj4gKyAgaWVlZTEyNzUgPSBrZXJuL2llZWUxMjc1L3BsYXRmb3JtX2tleXN0b3JlLmM7Cj4g Cj4gVGhpcyBub3cgYmVjb21lcyBhIGZpbGUgc2hhcmVkIHdpdGggb3RoZXIgaWVlZTEyNzUgcGxh dGZvcm1zLCBzdWNoIGFzCj4gc3BhcmM2NCwgYXMgd2VsbC4gQWxzbyBoZXJlIG1heWJlIGl0IHNo b3VsZCBiZQo+IAo+ICBwb3dlcnBjX2llZWUxMjc1ID0ga2Vybi9pZWVlMTI3NS9wbGF0Zm9ybV9r ZXlzdG9yZS5jCj4gCj4gb3IKPiAKPiAgcG93ZXJwY19pZWVlMTI3NSA9IGtlcm4vcG93ZXJwYy9p ZWVlMTI3NS9wbGF0Zm9ybV9rZXlzdG9yZS5jID8KPiAKClllcy4gWW91IGFyZSBjb3JyZWN0LiBt b3ZlZCBpdCB0byBwU2VyaWVzLXNwZWNpZmljLgoKCj4+ICAgICAgIHVib290ID0gZGlzay91Ym9v dC91Ym9vdGRpc2suYzsKPj4gICAgIHVib290ID0ga2Vybi91Ym9vdC91Ym9vdC5jOwo+PiBkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvaW5pdC5jIAo+PiBiL2dydWItY29yZS9r ZXJuL2llZWUxMjc1L2luaXQuYwo+PiBpbmRleCA1OTk4NGI2MDUuLjdkOTZjMzhmMyAxMDA2NDQK Pj4gLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvaW5pdC5jCj4+ICsrKyBiL2dydWItY29y ZS9rZXJuL2llZWUxMjc1L2luaXQuYwo+PiBAQCAtNTAsNiArNTAsNyBAQAo+PiAgICNpbmNsdWRl IDxncnViL2llZWUxMjc1L2FsbG9jLmg+Cj4+ICAgI2VuZGlmCj4+ICAgI2luY2x1ZGUgPGdydWIv bG9ja2Rvd24uaD4KPj4gKyNpbmNsdWRlIDxncnViL3BsYXRmb3JtX2tleXN0b3JlLmg+Cj4+ICAg ICAvKiBUaGUgbWF4aW11bSBoZWFwIHNpemUgd2UncmUgZ29pbmcgdG8gY2xhaW0gYXQgYm9vdC4g Tm90IHVzZWQgYnkgCj4+IHNwYXJjLiAqLwo+PiAgICNpZmRlZiBfX2kzODZfXwo+PiBAQCAtOTU5 LDcgKzk2MCw3IEBAIGdydWJfZ2V0X2llZWUxMjc1X3NlY3VyZV9ib290ICh2b2lkKQo+PiAgIHsK Pj4gICAgIGdydWJfaWVlZTEyNzVfcGhhbmRsZV90IHJvb3Q7Cj4+ICAgICBpbnQgcmM7Cj4+IC0g IGdydWJfdWludDMyX3QgaXNfc2I7Cj4+ICsgIGdydWJfdWludDMyX3QgaXNfc2IgPSAwOwo+PiAg ICAgICBncnViX2llZWUxMjc1X2ZpbmRkZXZpY2UgKCIvIiwgJnJvb3QpOwo+PiAgIEBAIC05NzYs NyArOTc3LDE2IEBAIGdydWJfZ2V0X2llZWUxMjc1X3NlY3VyZV9ib290ICh2b2lkKQo+PiAgICAg ICogV2Ugb25seSBzdXBwb3J0IGVuZm9yY2UuCj4+ICAgICAgKi8KPj4gICAgIGlmIChyYyA+PSAw ICYmIGlzX3NiID49IDIpCj4+IC0gICAgZ3J1Yl9sb2NrZG93biAoKTsKPj4gKyAgICB7Cj4+ICsg ICAgICBncnViX3ByaW50ZiAoInNlY3VyZSBib290IGVuYWJsZWRcbiIpOwo+PiArICAgICAgcmMg PSBncnViX3BsYXRmb3JtX2tleXN0b3JlX2luaXQgKCk7Cj4+ICsgICAgICBpZiAocmMgIT0gR1JV Ql9FUlJfTk9ORSkKPj4gKyAgICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBpbml0aWFsaXph dGlvbiBvZiB0aGUgcGxhdGZvcm0gCj4+IGtleXN0b3JlIGZhaWxlZCFcbiIpOwo+PiArCj4+ICsg ICAgICBncnViX2xvY2tkb3duICgpOwo+PiArICAgIH0KPj4gKyAgZWxzZQo+PiArICAgICAgZ3J1 Yl9wcmludGYgKCJzZWN1cmUgYm9vdCBkaXNhYmxlZFxuIik7Cj4+ICAgfQo+PiAgICAgZ3J1Yl9h ZGRyX3QgZ3J1Yl9tb2RiYXNlOwo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vaWVlZTEy NzUvcGxhdGZvcm1fa2V5c3RvcmUuYyAKPj4gYi9ncnViLWNvcmUva2Vybi9pZWVlMTI3NS9wbGF0 Zm9ybV9rZXlzdG9yZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAw MC4uMWM1NjRkNWRhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZ3J1Yi1jb3JlL2tlcm4vaWVl ZTEyNzUvcGxhdGZvcm1fa2V5c3RvcmUuYwo+PiBAQCAtMCwwICsxLDMzNyBAQAo+PiArLyoKPj4g KyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCj4+ICsgKiAgQ29weXJpZ2h0 IChDKSAyMDI0ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KPj4gKyAqICBDb3B5cmln aHQgKEMpIDIwMjQgSUJNIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICogIEdSVUIgaXMgZnJlZSBz b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIAo+PiBieQo+PiArICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+PiArICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ ICsgKgo+PiArICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ICsgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+PiArICovCj4+ICsKPj4gKyNpbmNs dWRlIDxncnViL21tLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9pZWVlMTI3NS9pZWVlMTI3NS5oPgo+ PiArI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxncnViL21pc2MuaD4KPj4g KyNpbmNsdWRlIDxncnViL2xvY2tkb3duLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9wbGF0Zm9ybV9r ZXlzdG9yZS5oPgo+PiArCj4+ICsjZGVmaW5lIFBLU19DT05TVU1FUl9GVyAxCj4+ICsjZGVmaW5l IFNCX1ZFUlNJT05fS0VZX05BTUUgKChncnViX3VpbnQ4X3QgKikgIlNCX1ZFUlNJT04iKQo+PiAr I2RlZmluZSBTQl9WRVJTSU9OX0tFWV9MRU4gMTAKPj4gKyNkZWZpbmUgREIgMQo+PiArI2RlZmlu ZSBEQlggMgo+PiArI2RlZmluZSBQS1NfT0JKRUNUX05PVF9GT1VORCAoKGdydWJfZXJyX3QpIC03 KQo+PiArCj4+ICsvKiBQbGF0Zm9ybSBLZXlzdG9yZSAqLwo+PiArc3RhdGljIGdydWJfc2l6ZV90 IHBrc19tYXhfb2JqZWN0X3NpemU7Cj4+ICtncnViX3VpbnQ4X3QgZ3J1Yl91c2VfcGxhdGZvcm1f a2V5c3RvcmUgPSAwOwo+PiArZ3J1Yl9wa3NfdCBncnViX3BsYXRmb3JtX2tleXN0b3JlID0geyAu ZGIgPSBOVUxMLCAuZGJ4ID0gTlVMTCwgCj4+IC5kYl9lbnRyaWVzID0gMCwgLmRieF9lbnRyaWVz ID0gMCB9Owo+PiArCj4+ICsvKiBjb252ZXJ0cyB0aGUgZXNsIGRhdGEgaW50byB0aGUgRVNMICov Cj4+ICtzdGF0aWMgZ3J1Yl9lc2xfdCAqCj4+ICtncnViX2NvbnZlcnRfdG9fZXNsIChjb25zdCBn cnViX3VpbnQ4X3QgKmVzbF9kYXRhLCBjb25zdCBncnViX3NpemVfdCAKPj4gZXNsX2RhdGFfc2l6 ZSkKPj4gK3sKPj4gKyAgZ3J1Yl9lc2xfdCAqZXNsID0gTlVMTDsKPj4gKwo+PiArICBpZiAoZXNs X2RhdGFfc2l6ZSA8IHNpemVvZiAoZ3J1Yl9lc2xfdCkgfHwgZXNsX2RhdGEgPT0gTlVMTCkKPj4g KyAgICByZXR1cm4gZXNsOwo+PiArCj4+ICsgIGVzbCA9IChncnViX2VzbF90ICopIGVzbF9kYXRh Owo+PiArCj4+ICsgIHJldHVybiBlc2w7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBpbXBvcnRz IHRoZSBHVUlELCBlc2QsIGFuZCBpdHMgc2l6ZSBpbnRvIHRoZSBwa3Mgc2QgYnVmZmVyIGFuZAo+ PiArICogcGtzIHNkIGVudHJpZXMgZnJvbSB0aGUgRUZJIHNpZ25hdHVyZSBsaXN0Lgo+PiArICov Cj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9lc2RfZnJvbV9lc2wgKGNvbnN0IGdydWJf dWludDhfdCAqZXNsX2RhdGEsIGdydWJfc2l6ZV90IAo+PiBlc2xfc2l6ZSwKPj4gKyAgICAgICAg ICAgICAgICAgICBjb25zdCBncnViX3NpemVfdCBzaWduYXR1cmVfc2l6ZSwgY29uc3QgCj4+IGdy dWJfdXVpZF90ICpndWlkLAo+PiArICAgICAgICAgICAgICAgICAgIGdydWJfcGtzX3NkX3QgKipw a3Nfc2QsIGdydWJfc2l6ZV90IAo+PiAqcGtzX3NkX2VudHJpZXMpCj4+ICt7Cj4+ICsgIGdydWJf ZXNkX3QgKmVzZCA9IE5VTEw7Cj4+ICsgIGdydWJfcGtzX3NkX3QgKnNpZ25hdHVyZSA9ICpwa3Nf c2Q7Cj4+ICsgIGdydWJfc2l6ZV90IGVudHJpZXMgPSAqcGtzX3NkX2VudHJpZXM7Cj4+ICsgIGdy dWJfc2l6ZV90IGRhdGFfc2l6ZSA9IDAsIG9mZnNldCA9IDA7Cj4+ICsKPj4gKyAgLyogcmVhZHMg dGhlIGVzZCBmcm9tIGVzbCAqLwo+PiArICB3aGlsZSAoZXNsX3NpemUgPiAwKQo+PiArICAgIHsK Pj4gKyAgICAgIGVzZCA9IChncnViX2VzZF90ICopIChlc2xfZGF0YSArIG9mZnNldCk7Cj4+ICsg ICAgICBkYXRhX3NpemUgPSBzaWduYXR1cmVfc2l6ZSAtIHNpemVvZiAoZ3J1Yl9lc2RfdCk7Cj4+ ICsKPj4gKyAgICAgIGlmIChzaWduYXR1cmUgIT0gTlVMTCkKPj4gKyAgICAgICAgc2lnbmF0dXJl ID0gZ3J1Yl9yZWFsbG9jIChzaWduYXR1cmUsIChlbnRyaWVzICsgMSkgKiBzaXplb2YgCj4+IChn cnViX3Brc19zZF90KSk7Cj4+ICsgICAgICBlbHNlCj4+ICsgICAgICAgIHNpZ25hdHVyZSA9IGdy dWJfbWFsbG9jIChzaXplb2YgKGdydWJfcGtzX3NkX3QpKTsKPiAKPiBncnViX3JlYWxsb2Mga25v d3MgaG93IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIGZpcnN0IHBhcmFtZXRlciBpcyBOVUxMLgo+ IApmaXhlZCBpdC4KCj4+ICsKPj4gKyAgICAgIGlmIChzaWduYXR1cmUgPT0gTlVMTCkKPj4gKyAg ICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2Yg bWVtb3J5Iik7Cj4+ICsKPj4gKyAgICAgIHNpZ25hdHVyZVtlbnRyaWVzXS5kYXRhID0gZ3J1Yl9t YWxsb2MgKGRhdGFfc2l6ZSAqIHNpemVvZiAKPj4gKGdydWJfdWludDhfdCkpOwo+PiArICAgICAg aWYgKHNpZ25hdHVyZVtlbnRyaWVzXS5kYXRhID09IE5VTEwpCj4+ICsgICAgICAgIHsKPj4gKyAg ICAgICAgICAvKgo+PiArICAgICAgICAgICAqIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVl ZCBieQo+PiArICAgICAgICAgICAqIGdydWJfcmVsZWFzZV9wbGF0Zm9ybV9rZXlzdG9yZQo+PiAr ICAgICAgICAgICAqLwo+PiArICAgICAgICAgICpwa3Nfc2QgPSBzaWduYXR1cmU7Cj4+ICsgICAg ICAgICAgKnBrc19zZF9lbnRyaWVzID0gZW50cmllcyArIDE7Cj4+ICsgICAgICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgCj4+IG1lbW9yeSIp Owo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIGdydWJfbWVtY3B5IChzaWduYXR1cmVbZW50 cmllc10uZGF0YSwgZXNkLT5zaWduYXR1cmVkYXRhLCAKPj4gZGF0YV9zaXplKTsKPj4gKyAgICAg IHNpZ25hdHVyZVtlbnRyaWVzXS5kYXRhX3NpemUgPSBkYXRhX3NpemU7Cj4+ICsgICAgICBzaWdu YXR1cmVbZW50cmllc10uZ3VpZCA9ICpndWlkOwo+PiArICAgICAgZW50cmllcysrOwo+PiArICAg ICAgZXNsX3NpemUgLT0gc2lnbmF0dXJlX3NpemU7Cj4+ICsgICAgICBvZmZzZXQgKz0gc2lnbmF0 dXJlX3NpemU7Cj4+ICsgICAgfQo+PiArCj4+ICsgICpwa3Nfc2QgPSBzaWduYXR1cmU7Cj4+ICsg ICpwa3Nfc2RfZW50cmllcyA9IGVudHJpZXM7Cj4+ICsKPj4gKyAgcmV0dXJuIEdSVUJfRVJSX05P TkU7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBleHRyYWN0cyB0aGUgZXNkIGFmdGVyIHJlbW92 aW5nIHRoZSBlc2wgaGVhZGVyIGZyb20gZXNsLgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJf dAo+PiArZ3J1Yl9lc2xfdG9fZXNkIChjb25zdCBncnViX3VpbnQ4X3QgKmVzbF9kYXRhLCBncnVi X3NpemVfdCAqbmV4dF9lc2wsCj4+ICsgICAgICAgICAgICAgICAgIGdydWJfcGtzX3NkX3QgKipw a3Nfc2QsIGdydWJfc2l6ZV90ICpwa3Nfc2RfZW50cmllcykKPj4gK3sKPj4gKyAgZ3J1Yl91dWlk X3QgZ3VpZCA9IHsgMCB9Owo+PiArICBncnViX2VzbF90ICplc2wgPSBOVUxMOwo+PiArICBncnVi X3NpemVfdCBvZmZzZXQgPSAwLCBlc2xfc2l6ZSA9IDAsCj4+ICsgICAgICAgICAgICAgIHNpZ25h dHVyZV9zaXplID0gMCwgc2lnbmF0dXJlX2hlYWRlcl9zaXplID0gMDsKPj4gKwo+PiArICBlc2wg PSBncnViX2NvbnZlcnRfdG9fZXNsIChlc2xfZGF0YSwgKm5leHRfZXNsKTsKPj4gKyAgaWYgKGVz bCA9PSBOVUxMKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CVUcsICJpbnZh bGlkIEVTTCIpOwo+PiArCj4+ICsgIGVzbF9zaXplID0gZ3J1Yl9sZV90b19jcHUzMiAoZXNsLT5z aWduYXR1cmVsaXN0c2l6ZSk7Cj4+ICsgIHNpZ25hdHVyZV9oZWFkZXJfc2l6ZSA9IGdydWJfbGVf dG9fY3B1MzIgCj4+IChlc2wtPnNpZ25hdHVyZWhlYWRlcnNpemUpOwo+PiArICBzaWduYXR1cmVf c2l6ZSA9IGdydWJfbGVfdG9fY3B1MzIgKGVzbC0+c2lnbmF0dXJlc2l6ZSk7Cj4+ICsgIGd1aWQg PSBlc2wtPnNpZ25hdHVyZXR5cGU7Cj4+ICsKPj4gKyAgaWYgKGVzbF9zaXplIDwgc2l6ZW9mIChn cnViX2VzbF90KSB8fCBlc2xfc2l6ZSA+ICpuZXh0X2VzbCkKPj4gKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQlVHLCAiaW52YWxpZCBFU0wgc2l6ZSAoJXUpXG4iLCAKPj4gZXNsX3Np emUpOwo+PiArCj4+ICsgICpuZXh0X2VzbCA9IGVzbF9zaXplOwo+PiArICBvZmZzZXQgPSBzaXpl b2YgKGdydWJfZXNsX3QpICsgc2lnbmF0dXJlX2hlYWRlcl9zaXplOwo+PiArICBlc2xfc2l6ZSA9 IGVzbF9zaXplIC0gb2Zmc2V0Owo+PiArCj4+ICsgIHJldHVybiBncnViX2VzZF9mcm9tX2VzbCAo ZXNsX2RhdGEgKyBvZmZzZXQsIGVzbF9zaXplLCAKPj4gc2lnbmF0dXJlX3NpemUsICZndWlkLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrc19zZCwgcGtzX3NkX2VudHJpZXMpOwo+ PiArfQo+PiArCj4+ICsvKgo+PiArICogaW1wb3J0cyB0aGUgRUZJIHNpZ25hdHVyZSBkYXRhIGFu ZCB0aGUgbnVtYmVyIG9mIGVzZCBmcm9tIHRoZSBlc2wKPj4gKyAqIGludG8gdGhlIHBrcyBzZCBi dWZmZXIgYW5kIHBrcyBzZCBlbnRyaWVzLgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ PiArZ3J1Yl9wa3Nfc2RfZnJvbV9lc2wgKGNvbnN0IGdydWJfdWludDhfdCAqZXNsX2RhdGEsIGdy dWJfc2l6ZV90IAo+PiBlc2xfc2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICBncnViX3Br c19zZF90ICoqcGtzX3NkLCBncnViX3NpemVfdCAKPj4gKnBrc19zZF9lbnRyaWVzKQo+PiArewo+ PiArICBncnViX2Vycl90IHJjID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgZ3J1Yl9zaXplX3QgbmV4 dF9lc2wgPSBlc2xfc2l6ZTsKPj4gKwo+PiArICBkbwo+PiArICAgIHsKPj4gKyAgICAgIHJjID0g Z3J1Yl9lc2xfdG9fZXNkIChlc2xfZGF0YSwgJm5leHRfZXNsLCBwa3Nfc2QsIAo+PiBwa3Nfc2Rf ZW50cmllcyk7Cj4+ICsgICAgICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgICAg YnJlYWs7Cj4+ICsKPj4gKyAgICAgIGVzbF9kYXRhICs9IG5leHRfZXNsOwo+PiArICAgICAgZXNs X3NpemUgLT0gbmV4dF9lc2w7Cj4+ICsgICAgICBuZXh0X2VzbCA9IGVzbF9zaXplOwo+PiArICAg IH0KPj4gKyAgd2hpbGUgKGVzbF9zaXplID4gMCk7Cj4+ICsKPj4gKyAgcmV0dXJuIHJjOwo+PiAr fQo+PiArCj4+ICsvKgo+PiArICogcmVhZHMgdGhlIHNlY3VyZSBib290IHZlcnNpb24gZnJvbSBQ S1MgYXMgYW4gb2JqZWN0Lgo+PiArICogY2FsbGVyIG11c3QgZnJlZSByZXN1bHQKPj4gKyAqLwo+ PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfcmVhZF9zYnZlcnNpb25fZnJvbV9wa3MgKGdy dWJfdWludDhfdCAqKm91dCwgZ3J1Yl9zaXplX3QgCj4+ICpvdXRsZW4sIGdydWJfc2l6ZV90ICpw b2xpY3kpCj4+ICt7Cj4+ICsgICpvdXQgPSBncnViX21hbGxvYyAocGtzX21heF9vYmplY3Rfc2l6 ZSk7Cj4+ICsgIGlmICgqb3V0ID09IE5VTEwpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5Iik7Cj4+ICsKPj4gKyAgcmV0dXJu IGdydWJfaWVlZTEyNzVfcGtzX3JlYWRfb2JqZWN0IChQS1NfQ09OU1VNRVJfRlcsIAo+PiBTQl9W RVJTSU9OX0tFWV9OQU1FLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNCX1ZFUlNJT05fS0VZX0xFTiwgKm91dCwgCj4+IHBrc19tYXhfb2JqZWN0X3NpemUsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGVuLCBwb2xpY3kp Owo+PiArfQo+PiArCj4+ICsvKgo+PiArICogcmVhZHMgdGhlIHNlY3VyZSBib290IHZhcmlhYmxl IGZyb20gUEtTLgo+PiArICogY2FsbGVyIG11c3QgZnJlZSByZXN1bHQKPj4gKyAqLwo+PiArc3Rh dGljIGdydWJfZXJyX3QKPj4gK2dydWJfcmVhZF9zYnZhcl9mcm9tX3BrcyAoY29uc3QgZ3J1Yl91 aW50OF90IHNidmFyZmxhZ3MsIGNvbnN0IAo+PiBncnViX3VpbnQ4X3Qgc2J2YXJ0eXBlLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX3VpbnQ4X3QgKipvdXQsIGdydWJfc2l6ZV90 ICpvdXRsZW4pCj4+ICt7Cj4+ICsgICpvdXQgPSBncnViX21hbGxvYyAocGtzX21heF9vYmplY3Rf c2l6ZSk7Cj4+ICsgIGlmICgqb3V0ID09IE5VTEwpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5Iik7Cj4+ICsKPj4gKyAgcmV0 dXJuIGdydWJfaWVlZTEyNzVfcGtzX3JlYWRfc2J2YXIgKHNidmFyZmxhZ3MsIHNidmFydHlwZSwg Km91dCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrc19tYXhf b2JqZWN0X3NpemUsIG91dGxlbik7Cj4+ICt9Cj4+ICsKPj4gKy8qIFRlc3QgdGhlIGF2YWlsYWJp bGl0eSBvZiBQS1Mgc3VwcG9ydC4gKi8KPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2lz X3N1cHBvcnRfcGtzICh2b2lkKQo+PiArewo+PiArICBncnViX2Vycl90IHJjID0gR1JVQl9FUlJf Tk9ORTsKPj4gKyAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWlzc2luZyA9IDA7Cj4+ICsKPj4gKyAg cmMgPSBncnViX2llZWUxMjc1X3Rlc3QgKCJwa3MtbWF4LW9iamVjdC1zaXplIiwgJm1pc3Npbmcp Owo+PiArICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSB8fCAoaW50KSBtaXNzaW5nID09IC0xKQo+ PiArICAgIGdydWJfcHJpbnRmICgiV2FybmluZzogZG9lc24ndCBoYXZlIFBLUyBzdXBwb3J0IVxu Iik7Cj4gCj4gRmlybXdhcmUgZG9lc24ndCBoYXZlIC4uLiAgPwo+IAoKZml4ZWQgaXQuCgo+PiAr ICBlbHNlCj4+ICsgICAgewo+PiArICAgICAgcmMgPSBncnViX2llZWUxMjc1X3Brc19tYXhfb2Jq ZWN0X3NpemUgKCZwa3NfbWF4X29iamVjdF9zaXplKTsKPj4gKyAgICAgIGlmIChyYyAhPSBHUlVC X0VSUl9OT05FKQo+PiArICAgICAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6IFBLUyBzdXBwb3J0 IGlzIHRoZXJlIGJ1dCBpdCBoYXMgemVybyAKPj4gb2JqZWN0cyFcbiIpOwo+PiArICAgIH0KPj4g Kwo+PiArICByZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiByZXRyaWV2ZXMgdGhl IHNlY3VyZSBib290IHZhcmlhYmxlIGZyb20gUEtTLCB1bnBhY2tzIGl0LCByZWFkcyB0aGUgCj4+ IGVzZAo+PiArICogZnJvbSBFU0wsIGFuZCBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBw a3Mgc2QgYnVmZmVyLgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9yZWFk X3NlY3VyZV9ib290X3ZhcmlhYmxlcyAoY29uc3QgZ3J1Yl91aW50OF90IHNidmFyZmxhZ3MsIGNv bnN0IAo+PiBncnViX3VpbnQ4X3Qgc2J2YXJ0eXBlLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3J1Yl9wa3Nfc2RfdCAqKnBrc19zZCwgZ3J1Yl9zaXplX3QgCj4+ICpwa3Nf c2RfZW50cmllcykKPj4gK3sKPj4gKyAgZ3J1Yl9lcnJfdCByYyA9IEdSVUJfRVJSX05PTkU7Cj4+ ICsgIGdydWJfdWludDhfdCAqZXNsX2RhdGEgPSBOVUxMOwo+PiArICBncnViX3NpemVfdCBlc2xf ZGF0YV9zaXplID0gMDsKPj4gKwo+PiArICByYyA9IGdydWJfcmVhZF9zYnZhcl9mcm9tX3BrcyAo c2J2YXJmbGFncywgc2J2YXJ0eXBlLCAmZXNsX2RhdGEsIAo+PiAmZXNsX2RhdGFfc2l6ZSk7Cj4+ ICsgIC8qCj4+ICsgICAqIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBTQl9WRVJTSU9OLCBzbyBhbnkg ZXJyb3IgaXMgd29ydGgKPj4gKyAgICogYXQgbGVhc3Qgc29tZSB1c2VyLXZpc2libGUgaW5mbwo+ PiArICAgKi8KPj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgcmMgPSBncnVi X2Vycm9yIChyYywgInNlY3VyZSBib290IHZhcmlhYmxlICVzIHJlYWRpbmcgKCVkKSIsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAoc2J2YXJ0eXBlID09IERCID8gImRiIiA6ICJkYngiKSwgcmMp Owo+PiArICBlbHNlIGlmIChlc2xfZGF0YV9zaXplICE9IDApCj4+ICsgICAgcmMgPSBncnViX3Br c19zZF9mcm9tX2VzbCAoKGNvbnN0IGdydWJfdWludDhfdCAqKSBlc2xfZGF0YSwgCj4+IGVzbF9k YXRhX3NpemUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtzX3NkLCBwa3Nf c2RfZW50cmllcyk7Cj4+ICsgIGdydWJfZnJlZSAoZXNsX2RhdGEpOwo+PiArCj4+ICsgIHJldHVy biByYzsKPj4gK30KPj4gKwo+PiArLyogcmVhZHMgc2VjdXJlIGJvb3QgdmVyc2lvbiAoU0JfVkVS U0lPTikgKi8KPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2dldF9zZWN1cmVfYm9vdF92 ZXJzaW9uICh2b2lkKQo+PiArewo+PiArICBncnViX2Vycl90IHJjID0gR1JVQl9FUlJfTk9ORTsK Pj4gKyAgZ3J1Yl91aW50OF90ICpkYXRhID0gTlVMTDsKPj4gKyAgZ3J1Yl9zaXplX3QgbGVuID0g MCwgcG9saWN5ID0gMDsKPj4gKwo+PiArICByYyA9IGdydWJfcmVhZF9zYnZlcnNpb25fZnJvbV9w a3MgKCZkYXRhLCAmbGVuLCAmcG9saWN5KTsKPj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUp Cj4+ICsgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBTQiB2ZXJzaW9uIHJlYWQgZmFpbGVkISAo JWQpXG4iLCByYyk7Cj4+ICsgIGVsc2UgaWYgKGxlbiAhPSAxIHx8ICgqZGF0YSAhPSAxICYmICpk YXRhICE9IDApKQo+IAo+IHNhbWUgYXMgKCpkYXRhID49IDIpID8KPiAKCkkgdGhpbmsgaGVyZSBu b3QgbmVlZGVkIHRvIGNoZWNrICgqZGF0YSA+PSAyKSBiZWNhdXNlIHdlIHN1cHBvcnRzIApmb2xs b3dpbmcgU0IgVmVyc2lvbiBvbmx5ClNCIFZlcnNpb246CjEgLSBQS1MKMCAtIHN0YXRpYyBrZXkg KGVtYmVkZWQga2V5KQoKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6 IGZvdW5kIHVuZXhwZWN0ZWQgU0IgdmVyc2lvbiEgKCVkKVxuIiwgCj4+ICpkYXRhKTsKPj4gKyAg ICAgIHJjID0gR1JVQl9FUlJfSU5WQUxJRF9DT01NQU5EOwo+PiArICAgIH0KPj4gKwo+PiArICBp ZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX3ByaW50ZiAo Ildhcm5pbmc6IHN3aXRjaCB0byBzdGF0aWMga2V5IVxuIik7Cj4+ICsgICAgICBpZiAoZ3J1Yl9p c19sb2NrZG93biAoKSA9PSBHUlVCX0xPQ0tET1dOX0VOQUJMRUQpCj4+ICsgICAgICAgIGdydWJf ZmF0YWwgKCJTZWN1cmUgQm9vdCBsb2NrZWQgZG93biIpOwo+PiArICAgIH0KPj4gKyAgZWxzZQo+ PiArICAgIGdydWJfdXNlX3BsYXRmb3JtX2tleXN0b3JlID0gKmRhdGE7Cj4+ICsKPj4gKyAgZ3J1 Yl9mcmVlIChkYXRhKTsKPj4gKwo+PiArICByZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gKy8qIHJl bGVhc2luZyBhbGxvY2F0ZWQgbWVtb3J5ICovCj4+ICt2b2lkCj4+ICtncnViX3JlbGVhc2VfcGxh dGZvcm1fa2V5c3RvcmUgKHZvaWQpCj4+ICt7Cj4+ICsgIGdydWJfc2l6ZV90IGkgPSAwOwo+PiAr Cj4+ICsgIGZvciAoaSA9IDA7IGkgPCBncnViX3BsYXRmb3JtX2tleXN0b3JlLmRiX2VudHJpZXM7 IGkrKykKPj4gKyAgICBncnViX2ZyZWUgKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJbaV0uZGF0 YSk7Cj4+ICsKPj4gKyAgZm9yIChpID0gMDsgaSA8IGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4 X2VudHJpZXM7IGkrKykKPj4gKyAgICBncnViX2ZyZWUgKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUu ZGJ4W2ldLmRhdGEpOwo+PiArCj4+ICsgIGdydWJfZnJlZSAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9y ZS5kYik7Cj4+ICsgIGdydWJfZnJlZSAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYngpOwo+PiAr ICBncnViX21lbXNldCAoJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUsIDB4MDAsIHNpemVvZiAoZ3J1 Yl9wa3NfdCkpOwo+IAo+IHMvMHgwMC8wCj4gCkZpeGVkIGl0Lgo+PiArfQo+PiArCj4+ICsvKiBp bml0aWFsaXphdGlvbiBvZiB0aGUgUGxhdGZvcm0gS2V5c3RvcmUgKi8KPj4gK2dydWJfZXJyX3QK Pj4gK2dydWJfcGxhdGZvcm1fa2V5c3RvcmVfaW5pdCAodm9pZCkKPj4gK3sKPj4gKyAgZ3J1Yl9l cnJfdCByYyA9IEdSVUJfRVJSX05PTkU7Cj4+ICsKPj4gKyAgZ3J1Yl9wcmludGYgKCJ0cnlpbmcg dG8gbG9hZCBQbGF0Zm9ybSBLZXlzdG9yZVxuIik7Cj4+ICsKPj4gKyAgcmMgPSBncnViX2lzX3N1 cHBvcnRfcGtzICgpOwo+PiArICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICB7Cj4+ ICsgICAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6IHN3aXRjaCB0byBzdGF0aWMga2V5IVxuIik7 Cj4+ICsgICAgICByZXR1cm4gcmM7Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qIFNCX1ZFUlNJT04g Ki8KPj4gKyAgcmMgPSBncnViX2dldF9zZWN1cmVfYm9vdF92ZXJzaW9uICgpOwo+PiArICBpZiAo cmMgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICByZXR1cm4gcmM7Cj4+ICsKPj4gKyAgaWYgKGdy dWJfdXNlX3BsYXRmb3JtX2tleXN0b3JlKQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfbWVtc2V0 ICgmZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZSwgMHgwMCwgc2l6ZW9mIAo+PiAoZ3J1Yl9wa3NfdCkp Owo+IAo+IHMvMHgwMC8wCj4gCgpGaXhlZCBpdC4KCj4+ICsgICAgICAvKiBEQiAqLwo+PiArICAg ICAgcmMgPSBncnViX3JlYWRfc2VjdXJlX2Jvb3RfdmFyaWFibGVzICgwLCBEQiwgCj4+ICZncnVi X3BsYXRmb3JtX2tleXN0b3JlLmRiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKPj4gJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJfZW50cmllcyk7Cj4+ ICsgICAgICBpZiAocmMgPT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgICAgewo+PiArICAgICAg ICAgIC8qIERCWCAqLwo+PiArICAgICAgICAgIHJjID0gZ3J1Yl9yZWFkX3NlY3VyZV9ib290X3Zh cmlhYmxlcyAoMCwgREJYLCAKPj4gJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4LAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+ICZncnViX3Bs YXRmb3JtX2tleXN0b3JlLmRieF9lbnRyaWVzKTsKPj4gKyAgICAgICAgICBpZiAocmMgPT0gUEtT X09CSkVDVF9OT1RfRk9VTkQpCj4+ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgIGdy dWJfcHJpbnRmICgiV2FybmluZzogZGJ4IGlzIG5vdCBmb3VuZCFcbiIpOwo+PiArICAgICAgICAg ICAgICByYyA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgIH0KPj4gKwo+PiArICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAg ICBncnViX3JlbGVhc2VfcGxhdGZvcm1fa2V5c3RvcmUgKCk7Cj4+ICsKPj4gKyAgcmV0dXJuIHJj Owo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3JlLmgg Cj4+IGIvaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3JlLmgKPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwLi43YTczNzg5MjYKPj4gLS0tIC9kZXYvbnVsbAo+PiAr KysgYi9pbmNsdWRlL2dydWIvcGxhdGZvcm1fa2V5c3RvcmUuaAo+PiBAQCAtMCwwICsxLDIzMyBA QAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTUsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKPj4gVGhpcwo+PiArICogcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIAo+PiBhdmFpbGFi bGUKPj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgMi1DbGF1c2Ug QlNEIExpY2Vuc2Ugd2hpY2gKPj4gKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLgo+ PiArICoKPj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAo+PiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIAo+PiBhcmUgbWV0Ogo+PiAr ICoKPj4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0IAo+PiBub3RpY2UsCj4+ICsgKiB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+PiArICoKPj4gKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgCj4+IGNv cHlyaWdodAo+PiArICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIAo+PiB0aGUKPj4gKyAqIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSAKPj4gZGlzdHJpYnV0aW9uLgo+PiAr ICoKPj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE RVJTIEFORCAKPj4gQ09OVFJJQlVUT1JTICJBUyBJUyIKPj4gKyAqIEFORCBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIAo+PiBUTywg VEhFCj4+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgCj4+IFBVUlBPU0UKPj4gKyAqIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiAKPj4gQ09OVFJJQlVUT1JT IEJFCj4+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIAo+PiBPUgo+PiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgCj4+IE9GCj4+ICsgKiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgCj4+IEJVU0lORVNTCj4+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgCj4+IFdIRVRIRVIgSU4KPj4gKyAqIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiAK Pj4gT1RIRVJXSVNFKQo+PiArICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgCj4+IEFEVklTRUQgT0YgVEhFCj4+ICsgKiBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KPj4gKyAqCj4+ICsgKgo+PiArICogaHR0cHM6Ly9naXRodWIu Y29tL3RpYW5vY29yZS9lZGsyLXN0YWdpbmcgKGVkazItc3RhZ2luZyByZXBvIG9mIAo+PiB0aWFu b2NvcmUpLAo+PiArICogdGhlIEltYWdlQXV0aGVudGljYXRpb24uaCBmaWxlIHVuZGVyIGl0LCBh bmQgaGVyZSdzIHRoZSBjb3B5cmlnaHQgCj4+IGFuZCBsaWNlbnNlLgo+PiArICoKPj4gKyAqIE1k ZVBrZy9JbmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4+ICsgKgo+PiArICogQ29w eXJpZ2h0IDIwMjQgSUJNIENvcnAuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfX1BMQVRGT1JN X0tFWVNUT1JFX0hfXwo+PiArI2RlZmluZSBfX1BMQVRGT1JNX0tFWVNUT1JFX0hfXwo+PiArCj4+ ICsjaW5jbHVkZSA8Z3J1Yi9zeW1ib2wuaD4KPj4gKyNpbmNsdWRlIDxncnViL21tLmg+Cj4+ICsj aW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgo+PiArCj4+ICsjaWYgX19HTlVDX18gPj0gOQo+PiArI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIK Pj4gKyNlbmRpZgo+PiArCj4+ICsjZGVmaW5lIEdSVUJfVVVJRF9TSVpFIDE2Cj4gCj4gZ3J1Yi90 eXBlcy5oID8KPiAKPj4gKyNkZWZpbmUgR1JVQl9NQVhfSEFTSF9TSVpFIDY0Cj4+ICsKPj4gK3R5 cGVkZWYgc3RydWN0IGdydWJfdXVpZCBncnViX3V1aWRfdDsKPiAKPiBncnViL3R5cGVzLmggPwo+ IAo+PiArdHlwZWRlZiBzdHJ1Y3QgZ3J1Yl9lc2QgZ3J1Yl9lc2RfdDsKPj4gK3R5cGVkZWYgc3Ry dWN0IGdydWJfZXNsIGdydWJfZXNsX3Q7Cj4+ICsKPj4gKy8qIFRoZSBzdHJ1Y3R1cmUgb2YgYSBV VUlELiovCj4+ICtzdHJ1Y3QgZ3J1Yl91dWlkCj4+ICt7Cj4+ICsgIGdydWJfdWludDhfdCBiW0dS VUJfVVVJRF9TSVpFXTsKPj4gK307Cj4gCj4gZ3J1Yi90eXBlcy5oID8KPiAKCm1vdmVkIGl0IHRv IGdydWIvdHlwZXMuaAoKPj4gKwo+PiArLyoKPj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklf U0lHTkFUVVJFX0RBVEEKPj4gKyAqIAo+PiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2Vk azItc3RhZ2luZy9ibG9iL21hc3Rlci9NZGVQa2cvSW5jbHVkZS9HdWlkL0ltYWdlQXV0aGVudGlj YXRpb24uaAo+PiArICoKPj4gKyAqIFRoZSBzdHJ1Y3R1cmUgb2YgYW4gRUZJIHNpZ25hdHVyZSBk YXRhYmFzZSAoRVNEKS4qLwo+PiArc3RydWN0IGdydWJfZXNkCj4+ICt7Cj4+ICsgIC8qCj4+ICsg ICAqIEFuIGlkZW50aWZpZXIgd2hpY2ggaWRlbnRpZmllcyB0aGUgYWdlbnQgd2hpY2ggYWRkZWQK Pj4gKyAgICogdGhlIHNpZ25hdHVyZSB0byB0aGUgbGlzdC4KPj4gKyAgICovCj4+ICsgIGdydWJf dXVpZF90IHNpZ25hdHVyZW93bmVyOwo+PiArICAvKiBUaGUgZm9ybWF0IG9mIHRoZSBzaWduYXR1 cmUgaXMgZGVmaW5lZCBieSB0aGUgU2lnbmF0dXJlVHlwZS4qLwo+PiArICBncnViX3VpbnQ4X3Qg c2lnbmF0dXJlZGF0YVtdOwo+PiArfSBHUlVCX1BBQ0tFRDsKPj4gKwo+PiArLyoKPj4gKyAqIEl0 IGlzIGRlcml2ZWQgZnJvbSBFRklfU0lHTkFUVVJFX0xJU1QKPj4gKyAqIAo+PiBodHRwczovL2dp dGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9ibG9iL21hc3Rlci9NZGVQa2cvSW5jbHVk ZS9HdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaAo+PiArICoKPj4gKyAqIFRoZSBzdHJ1Y3R1cmUg b2YgYW4gRUZJIHNpZ25hdHVyZSBsaXN0IChFU0wpLiovCj4+ICtzdHJ1Y3QgZ3J1Yl9lc2wKPj4g K3sKPj4gKyAgLyogVHlwZSBvZiB0aGUgc2lnbmF0dXJlLiBHVUlEIHNpZ25hdHVyZSB0eXBlcyBh cmUgZGVmaW5lZCBpbiAKPj4gYmVsb3cuKi8KPj4gKyAgZ3J1Yl91dWlkX3Qgc2lnbmF0dXJldHlw ZTsKPj4gKyAgLyogVG90YWwgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlIGxpc3QsIGluY2x1ZGluZyB0 aGlzIGhlYWRlci4qLwo+PiArICBncnViX3VpbnQzMl90IHNpZ25hdHVyZWxpc3RzaXplOwo+PiAr ICAvKgo+PiArICAgKiBTaXplIG9mIHRoZSBzaWduYXR1cmUgaGVhZGVyIHdoaWNoIHByZWNlZGVz Cj4+ICsgICAqIHRoZSBhcnJheSBvZiBzaWduYXR1cmVzLgo+PiArICAgKi8KPj4gKyAgZ3J1Yl91 aW50MzJfdCBzaWduYXR1cmVoZWFkZXJzaXplOwo+PiArICAvKiBTaXplIG9mIGVhY2ggc2lnbmF0 dXJlLiovCj4+ICsgIGdydWJfdWludDMyX3Qgc2lnbmF0dXJlc2l6ZTsKPj4gK30gR1JVQl9QQUNL RUQ7Cj4+ICsKPj4gKy8qCj4+ICsgKiBJdCBpcyBkZXJpdmVkIGZyb20gRUZJX0NFUlRfWDUwOV9H VUlECj4+ICsgKiAKPj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyLXN0YWdpbmcv YmxvYi9tYXN0ZXIvTWRlUGtnL0luY2x1ZGUvR3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmgKPj4g KyAqLwo+PiArI2RlZmluZSBHUlVCX1BLU19DRVJUX1g1MDlfR1VJRCAgICAgICAgICAgIFwKPj4g KyAgKGdydWJfdXVpZF90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAgICAgIDB4YTEsIDB4NTksIDB4YzAs IDB4YTUsIDB4ZTQsIDB4OTQsICBcCj4+ICsgICAgICAweGE3LCAweDRhLCAweDg3LCAweGI1LCAw eGFiLCAweDE1LCAgXAo+PiArICAgICAgMHg1YywgMHgyYiwgMHhmMCwgMHg3MiAgICAgICAgICAg ICAgIFwKPj4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ ICsgIH0KPj4gKwo+PiArLyoKPj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklfQ0VSVF9TSEEy NTZfR1VJRAo+PiArICogCj4+IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi1zdGFn aW5nL2Jsb2IvbWFzdGVyL01kZVBrZy9JbmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5o Cj4+ICsgKi8KPj4gKyNkZWZpbmUgR1JVQl9QS1NfQ0VSVF9TSEEyNTZfR1VJRCAgICAgICAgICBc Cj4+ICsgIChncnViX3V1aWRfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAgICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgICAgICAweDI2LCAweDE2LCAw eGM0LCAweGMxLCAweDRjLCAweDUwLCAgXAo+PiArICAgICAgMHg5MiwgMHg0MCwgMHhhYywgMHhh OSwgMHg0MSwgMHhmOSwgIFwKPj4gKyAgICAgIDB4MzYsIDB4OTMsIDB4NDMsIDB4MjggICAgICAg ICAgICAgICBcCj4+ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+PiArICB9Cj4+ICsKPj4gKy8qCj4+ICsgKiBJdCBpcyBkZXJpdmVkIGZyb20gRUZJX0NFUlRf U0hBMzg0X0dVSUQKPj4gKyAqIAo+PiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIt c3RhZ2luZy9ibG9iL21hc3Rlci9NZGVQa2cvSW5jbHVkZS9HdWlkL0ltYWdlQXV0aGVudGljYXRp b24uaAo+PiArICovCj4+ICsjZGVmaW5lIEdSVUJfUEtTX0NFUlRfU0hBMzg0X0dVSUQgICAgICAg ICAgXAo+PiArICAoZ3J1Yl91dWlkX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4g KyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICAgMHgwNywgMHg1 MywgMHgzZSwgMHhmZiwgMHhkMCwgMHg5ZiwgIFwKPj4gKyAgICAgIDB4YzksIDB4NDgsIDB4ODUs IDB4ZjEsIDB4OGEsIDB4ZDUsICBcCj4+ICsgICAgICAweDZjLCAweDcwLCAweDFlLCAweDEgICAg ICAgICAgICAgICAgXAo+PiArICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPj4gKyAgfQo+PiArCj4+ICsvKgo+PiArICogSXQgaXMgZGVyaXZlZCBmcm9tIEVGSV9D RVJUX1NIQTUxMl9HVUlECj4+ICsgKiAKPj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9l ZGsyLXN0YWdpbmcvYmxvYi9tYXN0ZXIvTWRlUGtnL0luY2x1ZGUvR3VpZC9JbWFnZUF1dGhlbnRp Y2F0aW9uLmgKPj4gKyAqLwo+PiArI2RlZmluZSBHUlVCX1BLU19DRVJUX1NIQTUxMl9HVUlEICAg ICAgICAgIFwKPj4gKyAgKGdydWJfdXVpZF90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAgICAgIDB4YWUs IDB4MGYsIDB4M2UsIDB4MDksIDB4YzQsIDB4YTYsICBcCj4+ICsgICAgICAweDUwLCAweDRmLCAw eDlmLCAweDFiLCAweGQ0LCAweDFlLCAgXAo+PiArICAgICAgMHgyYiwgMHg4OSwgMHhjMSwgMHg5 YSAgICAgICAgICAgICAgIFwKPj4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4+ICsgIH0KPj4gKwo+PiArLyoKPj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBF RklfQ0VSVF9YNTA5X1NIQTI1Nl9HVUlECj4+ICsgKiAKPj4gaHR0cHM6Ly9naXRodWIuY29tL3Rp YW5vY29yZS9lZGsyLXN0YWdpbmcvYmxvYi9tYXN0ZXIvTWRlUGtnL0luY2x1ZGUvR3VpZC9JbWFn ZUF1dGhlbnRpY2F0aW9uLmgKPj4gKyAqLwo+PiArI2RlZmluZSBHUlVCX1BLU19DRVJUX1g1MDlf U0hBMjU2X0dVSUQgICAgIFwKPj4gKyAgKGdydWJfdXVpZF90KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+PiArICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gKyAg ICAgIDB4OTIsIDB4YTQsIDB4ZDIsIDB4M2IsIDB4YzAsIDB4OTYsICBcCj4+ICsgICAgICAweDc5 LCAweDQwLCAweGI0LCAweDIwLCAweGZjLCAweGY5LCAgXAo+PiArICAgICAgMHg4ZSwgMHhmMSwg MHgwMywgMHhlZCAgICAgICAgICAgICAgIFwKPj4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4+ICsgIH0KPj4gKwo+PiArLyoKPj4gKyAqIEl0IGlzIGRlcml2 ZWQgZnJvbSBFRklfQ0VSVF9YNTA5X1NIQTM4NF9HVUlECj4+ICsgKiAKPj4gaHR0cHM6Ly9naXRo dWIuY29tL3RpYW5vY29yZS9lZGsyLXN0YWdpbmcvYmxvYi9tYXN0ZXIvTWRlUGtnL0luY2x1ZGUv R3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmgKPj4gKyAqLwo+PiArI2RlZmluZSBHUlVCX1BLU19D RVJUX1g1MDlfU0hBMzg0X0dVSUQgICAgIFwKPj4gKyAgKGdydWJfdXVpZF90KSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+PiArICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPj4gKyAgICAgIDB4NmUsIDB4ODcsIDB4NzYsIDB4NzAsIDB4YzIsIDB4ODAsICBcCj4+ICsg ICAgICAweGU2LCAweDRlLCAweGFhLCAweGQyLCAweDI4LCAweGIzLCAgXAo+PiArICAgICAgMHg0 OSwgMHhhNiwgMHg4NiwgMHg1YiAgICAgICAgICAgICAgIFwKPj4gKyAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgIH0KPj4gKwo+PiArLyoKPj4gKyAqIEl0 IGlzIGRlcml2ZWQgZnJvbSBFRklfQ0VSVF9YNTA5X1NIQTUxMl9HVUlECj4+ICsgKiAKPj4gaHR0 cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyLXN0YWdpbmcvYmxvYi9tYXN0ZXIvTWRlUGtn L0luY2x1ZGUvR3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmgKPj4gKyAqLwo+PiArI2RlZmluZSBH UlVCX1BLU19DRVJUX1g1MDlfU0hBNTEyX0dVSUQgICAgIFwKPj4gKyAgKGdydWJfdXVpZF90KSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+PiArICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPj4gKyAgICAgIDB4NjMsIDB4YmYsIDB4NmQsIDB4NDQsIDB4MDIsIDB4MjUs ICBcCj4+ICsgICAgICAweGRhLCAweDRjLCAweGJjLCAweGZhLCAweDI0LCAweDY1LCAgXAo+PiAr ICAgICAgMHhkMiwgMHhiMCwgMHhmZSwgMHg5ZCAgICAgICAgICAgICAgIFwKPj4gKyAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsgIH0KPj4gKwo+PiArdHlw ZWRlZiBzdHJ1Y3QgZ3J1Yl9wa3Nfc2QgZ3J1Yl9wa3Nfc2RfdDsKPj4gK3R5cGVkZWYgc3RydWN0 IGdydWJfcGtzIGdydWJfcGtzX3Q7Cj4+ICsKPj4gKy8qIFRoZSBzdHJ1Y3R1cmUgb2YgYSBQS1Mg c2lnbmF0dXJlIGRhdGEuKi8KPj4gK3N0cnVjdCBncnViX3Brc19zZAo+PiArewo+PiArICBncnVi X3V1aWRfdCBndWlkOyAgICAgIC8qIHNpZ25hdHVyZSB0eXBlICovCj4+ICsgIGdydWJfdWludDhf dCAqZGF0YTsgICAgLyogc2lnbmF0dXJlIGRhdGEgKi8KPj4gKyAgZ3J1Yl9zaXplX3QgZGF0YV9z aXplOyAvKiBzaXplIG9mIHNpZ25hdHVyZSBkYXRhICovCj4+ICt9IEdSVUJfUEFDS0VEOwo+PiAr Cj4+ICsvKiBUaGUgc3RydWN0dXJlIG9mIGEgUEtTLiovCj4+ICtzdHJ1Y3QgZ3J1Yl9wa3MKPj4g K3sKPj4gKyAgZ3J1Yl9wa3Nfc2RfdCAqZGI7ICAgICAgICAvKiBzaWduYXR1cmUgZGF0YWJhc2Ug Ki8KPj4gKyAgZ3J1Yl9wa3Nfc2RfdCAqZGJ4OyAgICAgICAvKiBmb3JiaWRkZW4gc2lnbmF0dXJl IGRhdGFiYXNlICovCj4+ICsgIGdydWJfc2l6ZV90IGRiX2VudHJpZXM7ICAgLyogc2l6ZSBvZiBz aWduYXR1cmUgZGF0YWJhc2UgKi8KPj4gKyAgZ3J1Yl9zaXplX3QgZGJ4X2VudHJpZXM7ICAvKiBz aXplIG9mIGZvcmJpZGRlbiBzaWduYXR1cmUgZGF0YWJhc2UgCj4+ICovCj4+ICt9IEdSVUJfUEFD S0VEOwo+PiArCj4+ICsjaWZkZWYgX19wb3dlcnBjX18KPj4gKwo+PiArLyogaW5pdGlhbGl6YXRp b24gb2YgdGhlIFBsYXRmb3JtIEtleXN0b3JlICovCj4+ICtncnViX2Vycl90IGdydWJfcGxhdGZv cm1fa2V5c3RvcmVfaW5pdCAodm9pZCk7Cj4+ICsvKiByZWxlYXNpbmcgYWxsb2NhdGVkIG1lbW9y eSAqLwo+PiArdm9pZCBFWFBPUlRfRlVOQyhncnViX3JlbGVhc2VfcGxhdGZvcm1fa2V5c3RvcmUp ICh2b2lkKTsKPj4gK2V4dGVybiBncnViX3VpbnQ4X3QgRVhQT1JUX1ZBUihncnViX3VzZV9wbGF0 Zm9ybV9rZXlzdG9yZSk7Cj4+ICtleHRlcm4gZ3J1Yl9wa3NfdCBFWFBPUlRfVkFSKGdydWJfcGxh dGZvcm1fa2V5c3RvcmUpOwo+PiArCj4+ICsjZWxzZQo+PiArCj4+ICsjZGVmaW5lIGdydWJfdXNl X3BsYXRmb3JtX2tleXN0b3JlCTAKPj4gK2dydWJfcGtzX3QgZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9y ZSA9IHtOVUxMLCBOVUxMLCAwLCAwfTsKPj4gK3ZvaWQgZ3J1Yl9yZWxlYXNlX3BsYXRmb3JtX2tl eXN0b3JlICh2b2lkKTsKPj4gKwo+PiArI2VuZGlmCj4+ICsKPj4gKyNlbmRpZgoKClRoYW5rcywK U3VkaGFrYXIgS3VwcHVzYW15CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0 cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=