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 2AD36C83F03 for ; Wed, 9 Jul 2025 11:49:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uZTIJ-0006FF-AZ; Wed, 09 Jul 2025 07:48:59 -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 1uZTI5-0006CE-8b for grub-devel@gnu.org; Wed, 09 Jul 2025 07:48:45 -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 1uZTI0-0006sl-2y for grub-devel@gnu.org; Wed, 09 Jul 2025 07:48:44 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5696cUbm002178; Wed, 9 Jul 2025 11:48:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Qbl63uh6Z465JJu+i eu+vCQ82iQc0P5sly6JWckMsGo=; b=HEr/1Ip+sHXRl2fE14cXCQRUrIfSYlJiz KXcVfZiy29sleqmsrDn8rKLxdc3UtTVwWiHxZtDudoBS6xQInFOk7rKoUy9QeZAr XUAirZuObwhuAR1fchOMVw43mPEMnb8x210INHwlkjPmMRb4QrMnL2/cpNrrZw4b 0y6D9KExhIXdyXIhnji9KahHrbQVeN2SdoSsd8v9WCTIVXRrNdda+QelJzT6Re7E hweuqhTvWn695C8L4uffFRDbognzQ0+/HtlHUGWmFbwA+uwjc2l0lLv8zds7o6md LfT7gwsHyFR19tgpq+9JxkXKFBMJuTxBfApGtXW7BpDT/LMC99qUQ== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47puqnd45w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:48:36 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5698OAX6013555; Wed, 9 Jul 2025 11:48:36 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 47qgkkyrps-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:48:35 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 569BmW8o43319798 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 9 Jul 2025 11:48:32 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3F88820043; Wed, 9 Jul 2025 11:48:32 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 935672004B; Wed, 9 Jul 2025 11:48:29 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.27.9]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 9 Jul 2025 11:48:29 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, nayna@linux.ibm.com, ltcgcw@linux.vnet.ibm.com, ssrish@linux.ibm.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, Sudhakar Kuppusamy , dja@axtens.net, Daniel Kiper Subject: [PATCH v4 10/23] appended signatures: Parse PKCS#7 signedData Date: Wed, 9 Jul 2025 17:15:27 +0530 Message-Id: <20250709114540.58608-11-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250709114540.58608-1-sudhakar@linux.ibm.com> References: <20250709114540.58608-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=FZ43xI+6 c=1 sm=1 tr=0 ts=686e5714 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Wb1JkmetP80A:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=85m_z7xpNodlgxy4YroA:9 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-GUID: a8JgOQrkriOCE2_p_WgI8WkNlIouhjEf X-Proofpoint-ORIG-GUID: a8JgOQrkriOCE2_p_WgI8WkNlIouhjEf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzA5MDEwNiBTYWx0ZWRfX0CuTXLKXBpPU ys7j9rMss9KdtDEMOsnqtDuK1QKMhYDnkN+7SRGVpt5Dqgdu7O3U0BltRRaHSsB0WMgVal8edAC INB2c76R2btJh8Mj4JtwVaSOxLKypwLDBMIrM8/KU2bBWcDAM/3MOUoxmhzJT6Kmn2+eXv056TL U9FEOopb0JSueZhPCwhHkWkGcN0BQNHEsjhyCoHGP51fYeRvUYNpnIvN3r0adJqPsCkwkwmomy+ 1bQLi6xXHj/DgjMNZ7gGDnxnKKdd6K4dNA/XLUyVoFgn9qLllYc2RFGPB0vEGPER2PXAmzrNBt6 cihiqirGwBG4aZs97k43gh0MXFRK40PCJEsiQeUb95bqhnWHnBYrFK1QMVQu5QGNeGtr0IQOe8b OmJobm+3uKAljAxACvabJGkxxT7ghO0zCqoPHhkyVhRN9OGKaM4Nvcv51yJ8Vrb7UOs7WmmB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-09_02,2025-07-08_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 mlxscore=0 priorityscore=1501 malwarescore=0 mlxlogscore=999 clxscore=1015 spamscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507090106 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_H4=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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFBLQ1MjNyBzaWduZWREYXRhIG1lc3Nh Z2VzLiBPbmx5IGEgc2luZ2xlIHNpZ25lckluZm8gaXMgc3VwcG9ydGVkLAogICB3aGljaCBpcyBh bGwgdGhhdCB0aGUgTGludXggc2lnbi1maWxlIHV0aWxpdHkgc3VwcG9ydHMgY3JlYXRpbmcKICAg b3V0LW9mLXRoZS1ib3guIE9ubHkgUlNBLCBTSEEtMjU2IGFuZCBTSEEtNTEyIGFyZSBzdXBwb3J0 ZWQuCiAgIEFueSBjZXJ0aWZpY2F0ZSBlbWJlZGRlZCBpbiB0aGUgUEtDUyM3IG1lc3NhZ2Ugd2ls bCBiZSBpZ25vcmVkLgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsIEF4dGVucyA8ZGphQGF4dGVucy5u ZXQ+ClNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2FteSA8c3VkaGFrYXJAbGludXguaWJt LmNvbT4KUmV2aWV3ZWQtYnk6IFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAbGludXguaWJtLmNvbT4K UmV2aWV3ZWQtYnk6IEF2bmlzaCBDaG91aGFuIDxhdm5pc2hAbGludXguaWJtLmNvbT4KUmV2aWV3 ZWQtYnk6IERhbmllbCBLaXBlciA8ZGFuaWVsLmtpcGVyQG9yYWNsZS5jb20+Ci0tLQogZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmggfCAgMzYgKysKIGdydWItY29y ZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jICAgICAgIHwgNDU0ICsrKysrKysrKysrKysr KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNDkwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYwoKZGlmZiAtLWdpdCBh L2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oIGIvZ3J1Yi1jb3Jl L2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKaW5kZXggOTFjYzA0MGJiLi5jYWM3 ZmIwMmMgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRl ZHNpZy5oCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5o CkBAIC0xNywxMSArMTcsNDcgQEAKICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAorI2luY2x1ZGUgPGdydWIvY3J5 cHRvLmg+CiAjaW5jbHVkZSA8bGlidGFzbjEuaD4KIAogZXh0ZXJuIGFzbjFfbm9kZSBncnViX2du dXRsc19nbnV0bHNfYXNuOwogZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19wa2l4X2FzbjsK IAorI2RlZmluZSBNQVhfT0lEX0xFTiAzMgorCisvKiBBIFBLQ1MjNyBzaWduZWREYXRhIHNpZ25l ckluZm8uICovCitzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbworeworICBjb25zdCBnY3J5X21kX3Nw ZWNfdCAqaGFzaDsKKyAgZ2NyeV9tcGlfdCBzaWdfbXBpOworfTsKKworLyoKKyAqIEEgUEtDUyM3 IHNpZ25lZERhdGEgbWVzc2FnZS4KKyAqIFdlIG1ha2Ugbm8gYXR0ZW1wdCB0byBtYXRjaCBpbnRl bGxpZ2VudGx5LCBzbyB3ZSBkb24ndCBzYXZlIGFueSBpbmZvIGFib3V0CisgKiB0aGUgc2lnbmVy LgorICovCitzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YQoreworICBpbnQgc2lnbmVySW5mb19jb3Vu dDsKKyAgc3RydWN0IHBrY3M3X3NpZ25lckluZm8gKnNpZ25lckluZm9zOworfTsKKworLyoKKyAq IFBhcnNlIGEgUEtDUyM3IG1lc3NhZ2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWREYXRhIG1lc3Nh Z2UuCisgKiBUaGUgbWVzc2FnZSBtdXN0IGJlIGluICdzaWdidWYnIGFuZCBvZiBzaXplICdkYXRh X3NpemUnLiBUaGUgcmVzdWx0IGlzCisgKiBwbGFjZWQgaW4gJ21zZycsIHdoaWNoIG11c3QgYWxy ZWFkeSBiZSBhbGxvY2F0ZWQuCisgKi8KK2V4dGVybiBncnViX2Vycl90CitwYXJzZV9wa2NzN19z aWduZWREYXRhIChjb25zdCB2b2lkICpzaWdidWYsIGdydWJfc2l6ZV90IGRhdGFfc2l6ZSwgc3Ry dWN0IHBrY3M3X3NpZ25lZERhdGEgKm1zZyk7CisKKy8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3Rv cmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBLQ1MjNyBtZXNzYWdlLgorICogSWYgdGhlIGNhbGxl ciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIG1lc3NhZ2UsIGl0IG11c3QgZnJlZSBpdC4KKyAq LworZXh0ZXJuIHZvaWQKK3BrY3M3X3NpZ25lZERhdGFfcmVsZWFzZSAoc3RydWN0IHBrY3M3X3Np Z25lZERhdGEgKm1zZyk7CisKIC8qIERvIGxpYnRhc24xIGluaXQuICovCiBleHRlcm4gaW50CiBh c24xX2luaXQgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL3BrY3M3LmMgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjIzNWZmZjM5NgotLS0gL2Rldi9udWxs CisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCkBAIC0wLDAgKzEs NDU0IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBD b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisg KiAgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLCAyMDI1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAq ICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJhcHBlbmRlZHNpZy5oIgorI2luY2x1ZGUg PGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9n Y3J5cHQvZ2NyeXB0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0YXRpYyBjaGFyIGFz bjFfZXJyb3JbQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRV07CisKKy8qIFJGQyA1NjUy IHMgNS4xICovCitzdGF0aWMgY29uc3QgY2hhciAqc2lnbmVkRGF0YV9vaWQgPSAiMS4yLjg0MC4x MTM1NDkuMS43LjIiOworCisvKiBSRkMgNDA1NSBzIDIuMSAqLworc3RhdGljIGNvbnN0IGNoYXIg KnNoYTI1Nl9vaWQgPSAiMi4xNi44NDAuMS4xMDEuMy40LjIuMSI7CitzdGF0aWMgY29uc3QgY2hh ciAqc2hhNTEyX29pZCA9ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMi4zIjsKKworc3RhdGljIGdydWJf ZXJyX3QKK3Byb2Nlc3NfY29udGVudCAoZ3J1Yl91aW50OF90ICpjb250ZW50LCBpbnQgc2l6ZSwg c3RydWN0IHBrY3M3X3NpZ25lZERhdGEgKm1zZykKK3sKKyAgaW50IHJlczsKKyAgYXNuMV9ub2Rl IHNpZ25lZF9wYXJ0OworICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIg YWxnb19vaWRbTUFYX09JRF9MRU5dOworICBpbnQgYWxnb19vaWRfc2l6ZTsKKyAgaW50IGFsZ29f Y291bnQ7CisgIGludCBzaWduZXJfY291bnQ7CisgIGludCBpOworICBjaGFyIHZlcnNpb247Cisg IGludCB2ZXJzaW9uX3NpemUgPSBzaXplb2YgKHZlcnNpb24pOworICBncnViX3VpbnQ4X3QgKnJl c3VsdF9idWY7CisgIGludCByZXN1bHRfc2l6ZSA9IDA7CisgIGludCBjcmxzX3NpemUgPSAwOwor ICBnY3J5X2Vycm9yX3QgZ2NyeV9lcnI7CisgIGJvb2wgc2hhMjU2X2luX2RhLCBzaGEyNTZfaW5f c2ksIHNoYTUxMl9pbl9kYSwgc2hhNTEyX2luX3NpOworICBjaGFyICpkYV9wYXRoOworICBjaGFy ICpzaV9zaWdfcGF0aDsKKyAgY2hhciAqc2lfZGFfcGF0aDsKKworICByZXMgPSBhc24xX2NyZWF0 ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLnBrY3MtNy1TaWduZWREYXRh IiwgJnNpZ25lZF9wYXJ0KTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAg ICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgUEtDUyM3IHNpZ25lZCBw YXJ0LiIpOworCisgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnNpZ25lZF9wYXJ0LCBjb250 ZW50LCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX0RFQ09ERV9GTEFH X1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAg ICAgICAgICAgICAgICAgICAgICAgImVycm9yIHJlYWRpbmcgUEtDUyM3IHNpZ25lZCBkYXRhOiAl cyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0K KworICAvKgorICAgKiBTaWduZWREYXRhIDo6PSBTRVFVRU5DRSB7CisgICAqICAgICB2ZXJzaW9u IENNU1ZlcnNpb24sCisgICAqICAgICBkaWdlc3RBbGdvcml0aG1zIERpZ2VzdEFsZ29yaXRobUlk ZW50aWZpZXJzLAorICAgKiAgICAgZW5jYXBDb250ZW50SW5mbyBFbmNhcHN1bGF0ZWRDb250ZW50 SW5mbywKKyAgICogICAgIGNlcnRpZmljYXRlcyBbMF0gSU1QTElDSVQgQ2VydGlmaWNhdGVTZXQg T1BUSU9OQUwsCisgICAqICAgICBjcmxzIFsxXSBJTVBMSUNJVCBSZXZvY2F0aW9uSW5mb0Nob2lj ZXMgT1BUSU9OQUwsCisgICAqICAgICBzaWduZXJJbmZvcyBTaWduZXJJbmZvcyB9CisgICAqLwor CisgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2lnbmVkX3BhcnQsICJ2ZXJzaW9uIiwgJnZlcnNp b24sICZ2ZXJzaW9uX3NpemUpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7Cisg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiZXJyb3IgcmVh ZGluZyBzaWduZWREYXRhIHZlcnNpb246ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlcykpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAg IH0KKworICAvKiBTaWduYXR1cmUgdmVyc2lvbiBtdXN0IGJlIDEgYmVjYXVzZSBhcHBlbmRlZCBz aWduYXR1cmUgb25seSBzdXBwb3J0IHYxLiAqLworICBpZiAodmVyc2lvbiAhPSAxKQorICAgIHsK KyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAg ICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBzaWduYXR1cmUgdmVyc2lvbiB2JWQsIG9ubHkg djEgc3VwcG9ydGVkLiIsIHZlcnNpb24pOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0 OworICAgIH0KKworICAvKgorICAgKiBkaWdlc3RBbGdvcml0aG1zIERpZ2VzdEFsZ29yaXRobUlk ZW50aWZpZXJzCisgICAqCisgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXJzIDo6PSBTRVQg T0YgRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllcgorICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlm ZXIgaXMgYW4gWC41MDkgQWxnb3JpdGhtSWRlbnRpZmllciAoMTAuMS4xKQorICAgKgorICAgKiBS RkMgNDA1NSBzIDIuMToKKyAgICogc2hhMjU2SWRlbnRpZmllciAgQWxnb3JpdGhtSWRlbnRpZmll ciAgOjo9ICB7IGlkLXNoYTI1NiwgTlVMTCB9CisgICAqIHNoYTUxMklkZW50aWZpZXIgIEFsZ29y aXRobUlkZW50aWZpZXIgIDo6PSAgeyBpZC1zaGE1MTIsIE5VTEwgfQorICAgKgorICAgKiBXZSBv bmx5IHN1cHBvcnQgMSBlbGVtZW50IGluIHRoZSBzZXQsIGFuZCB3ZSBkbyBub3QgY2hlY2sgcGFy YW1ldGVycyBhdG0uCisgICAqLworICByZXMgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoc2ln bmVkX3BhcnQsICJkaWdlc3RBbGdvcml0aG1zIiwgJmFsZ29fY291bnQpOworICBpZiAocmVzICE9 IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIGRpZ2VzdCBhbGdvcml0aG1z OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKKyAg ICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgaWYgKGFsZ29fY291bnQg PD0gMCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFU VVJFLCAiYSBtaW5pbXVtIG9mIDEgZGlnZXN0IGFsZ29yaXRobSBpcyByZXF1aXJlZC4iKTsKKyAg ICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgaWYgKGFsZ29fY291bnQg PiAyKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1F TlRFRF9ZRVQsICJhIG1heGltdW0gb2YgMiBkaWdlc3QgYWxnb3JpdGhtcyBpcyBzdXBwb3J0ZWQu Iik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIHNoYTI1Nl9p bl9kYSA9IGZhbHNlOworICBzaGE1MTJfaW5fZGEgPSBmYWxzZTsKKworICBmb3IgKGkgPSAwOyBp IDwgYWxnb19jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGRhX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoImRpZ2VzdEFsZ29yaXRobXMuPyVkLmFsZ29yaXRobSIsIGkgKyAxKTsKKyAgICAgIGlmIChk YV9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3Vs ZCBub3QgYWxsb2NhdGUgcGF0aCBmb3IgZGlnZXN0IGFsZ29yaXRobSBwYXJzaW5nIHBhdGguIik7 CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICB9CisKKyAgICAg IGFsZ29fb2lkX3NpemUgPSBzaXplb2YgKGFsZ29fb2lkKTsKKyAgICAgIHJlcyA9IGFzbjFfcmVh ZF92YWx1ZSAoc2lnbmVkX3BhcnQsIGRhX3BhdGgsIGFsZ29fb2lkLCAmYWxnb19vaWRfc2l6ZSk7 CisgICAgICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJvciByZWFkaW5nIGRp Z2VzdCBhbGdvcml0aG06ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0 cmVycm9yIChyZXMpKTsKKyAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOworICAgICAgICAg IGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgfQorCisgICAgICBpZiAoZ3J1Yl9z dHJuY21wIChzaGE1MTJfb2lkLCBhbGdvX29pZCwgYWxnb19vaWRfc2l6ZSkgPT0gMCkKKyAgICAg ICAgeworICAgICAgICAgIGlmIChzaGE1MTJfaW5fZGEgPT0gZmFsc2UpCisgICAgICAgICAgICBz aGE1MTJfaW5fZGEgPSB0cnVlOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNIQS01MTIgc3BlY2lmaWVkIHR3aWNlIGluIGRp Z2VzdCBhbGdvcml0aG0gbGlzdC4iKTsKKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRo KTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChncnViX3N0cm5jbXAgKHNoYTI1Nl9vaWQsIGFs Z29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHNo YTI1Nl9pbl9kYSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHNoYTI1Nl9pbl9kYSA9IHRydWU7Cisg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU0hBLTI1NiBzcGVjaWZpZWQgdHdpY2UgaW4gZGlnZXN0IGFsZ29yaXRobSBsaXN0LiIp OworICAgICAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOworICAgICAgICAgICAgICBnb3Rv IGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9J TVBMRU1FTlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgU0hBLTI1 NiBhbmQgU0hBLTUxMiBoYXNoZXMgYXJlIHN1cHBvcnRlZCwgZm91bmQgT0lEICVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhbGdvX29pZCk7CisgICAgICAgICAgZ3J1Yl9mcmVlIChk YV9wYXRoKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgIH0K KworICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRoKTsKKyAgICB9CisKKyAgLyogQXQgdGhpcyBwb2lu dCwgYXQgbGVhc3Qgb25lIG9mIHNoYXsyNTYsNTEyfV9pbl9kYSBtdXN0IGJlIHRydWUuICovCisK KyAgLyoKKyAgICogV2UgaWdub3JlIHRoZSBjZXJ0aWZpY2F0ZXMsIGJ1dCB3ZSBkb24ndCBwZXJt aXQgQ1JMcy4KKyAgICogQSBDUkwgZW50cnkgbWlnaHQgYmUgcmV2b2tpbmcgdGhlIGNlcnRpZmlj YXRlIHdlJ3JlIHVzaW5nLCBhbmQgd2UgaGF2ZQorICAgKiBubyB3YXkgb2YgZGVhbGluZyB3aXRo IHRoYXQgYXQgdGhlIG1vbWVudC4KKyAgICovCisgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2ln bmVkX3BhcnQsICJjcmxzIiwgTlVMTCwgJmNybHNfc2l6ZSk7CisgIGlmIChyZXMgIT0gQVNOMV9F TEVNRU5UX05PVF9GT1VORCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9OT1RfSU1QTEVNRU5URURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAgIlBLQ1MjNyBt ZXNzYWdlcyB3aXRoIGVtYmVkZGVkIENSTHMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICBn b3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIC8qIFJlYWQgdGhlIHNpZ25hdHVy ZXMgKi8KKyAgcmVzID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKHNpZ25lZF9wYXJ0LCAic2ln bmVySW5mb3MiLCAmc2lnbmVyX2NvdW50KTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImVy cm9yIGNvdW50aW5nIG51bWJlciBvZiBzaWduZXJzOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFy dDsKKyAgICB9CisKKyAgaWYgKHNpZ25lcl9jb3VudCA8PSAwKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJhIG1pbmltdW0gb2YgMSBzaWdu ZXIgaXMgcmVxdWlyZWQuIik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAg fQorCisgIG1zZy0+c2lnbmVySW5mb3MgPSBncnViX2NhbGxvYyAoc2lnbmVyX2NvdW50LCBzaXpl b2YgKHN0cnVjdCBwa2NzN19zaWduZXJJbmZvKSk7CisgIGlmIChtc2ctPnNpZ25lckluZm9zID09 IE5VTEwpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01F TU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgc3BhY2Ug Zm9yICVkIHNpZ25lcnMuIiwgc2lnbmVyX2NvdW50KTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWdu ZWRfcGFydDsKKyAgICB9CisKKyAgbXNnLT5zaWduZXJJbmZvX2NvdW50ID0gMDsKKyAgZm9yIChp ID0gMDsgaSA8IHNpZ25lcl9jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHNpX2RhX3BhdGggPSBn cnViX3hhc3ByaW50ZiAoInNpZ25lckluZm9zLj8lZC5kaWdlc3RBbGdvcml0aG0uYWxnb3JpdGht IiwgaSArIDEpOworICAgICAgaWYgKHNpX2RhX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAg ICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBwYXRoIGZvciBzaWduZXIg JWQncyBkaWdlc3QgYWxnb3JpdGhtIHBhcnNpbmcgcGF0aC4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGkpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAg ICAgfQorCisgICAgICBhbGdvX29pZF9zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7CisgICAgICBy ZXMgPSBhc24xX3JlYWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCBzaV9kYV9wYXRoLCBhbGdvX29pZCwg JmFsZ29fb2lkX3NpemUpOworICAgICAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAg IHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciByZWFkaW5nIHNpZ25lciAlZCdzIGRp Z2VzdCBhbGdvcml0aG06ICVzIiwgaSwgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICAgICAg Z3J1Yl9mcmVlIChzaV9kYV9wYXRoKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5m b3M7CisgICAgICAgIH0KKworICAgICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRoKTsKKworICAgICAg aWYgKGdydWJfc3RybmNtcCAoc2hhNTEyX29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09 IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2hhNTEyX2luX2RhID09IGZhbHNlKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf U0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVyICVkIGNs YWltcyBhIFNIQS01MTIgc2lnbmF0dXJlIHdoaWNoIHdhcyBub3QgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGluIHRoZSBvdXRlciBEaWdlc3RBbGdvcml0aG1z LiIsIGkpOworICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAg ICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaGE1 MTJfaW5fc2kgPSB0cnVlOworICAgICAgICAgICAgICBtc2ctPnNpZ25lckluZm9zW2ldLmhhc2gg PSBncnViX2NyeXB0b19sb29rdXBfbWRfYnlfbmFtZSAoInNoYTUxMiIpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChncnViX3N0cm5jbXAgKHNoYTI1Nl9vaWQsIGFs Z29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHNo YTI1Nl9pbl9kYSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInNpZ25lciAlZCBjbGFpbXMgYSBTSEEtMjU2IHNpZ25hdHVyZSB3aGljaCB3 YXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllZCBpbiB0 aGUgb3V0ZXIgRGlnZXN0QWxnb3JpdGhtcy4iLCBpKTsKKyAgICAgICAgICAgICAgZ290byBjbGVh bnVwX3NpZ25lckluZm9zOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgc2hhMjU2X2luX3NpID0gdHJ1ZTsKKyAgICAgICAgICAgICAg bXNnLT5zaWduZXJJbmZvc1tpXS5oYXNoID0gZ3J1Yl9jcnlwdG9fbG9va3VwX21kX2J5X25hbWUg KCJzaGEyNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVE X1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25seSBTSEEtMjU2IGFuZCBTSEEt NTEyIGhhc2hlcyBhcmUgc3VwcG9ydGVkLCBmb3VuZCBPSUQgJXMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFsZ29fb2lkKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5m b3M7CisgICAgICAgIH0KKworICAgICAgaWYgKG1zZy0+c2lnbmVySW5mb3NbaV0uaGFzaCA9PSBO VUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFzaCBhbGdvcml0aG0g Zm9yIHNpZ25lciAlZCAoT0lEICVzKSBub3QgbG9hZGVkLiIsIGksIGFsZ29fb2lkKTsKKyAgICAg ICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAgc2lfc2ln X3BhdGggPSBncnViX3hhc3ByaW50ZiAoInNpZ25lckluZm9zLj8lZC5zaWduYXR1cmUiLCBpICsg MSk7CisgICAgICBpZiAoc2lfc2lnX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAg IGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBwYXRoIGZvciBzaWduZXIgJWQncyBz aWduYXR1cmUgcGFyc2luZyBwYXRoLiIsIGkpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWdu ZXJJbmZvczsKKyAgICAgICAgfQorCisgICAgICByZXN1bHRfYnVmID0gZ3J1Yl9hc24xX2FsbG9j YXRlX2FuZF9yZWFkIChzaWduZWRfcGFydCwgc2lfc2lnX3BhdGgsICJzaWduYXR1cmUgZGF0YSIs ICZyZXN1bHRfc2l6ZSk7CisgICAgICBncnViX2ZyZWUgKHNpX3NpZ19wYXRoKTsKKworICAgICAg aWYgKHJlc3VsdF9idWYgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJf ZXJybm87CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAgICB9CisK KyAgICAgIGdjcnlfZXJyID0gZ2NyeV9tcGlfc2NhbiAoJihtc2ctPnNpZ25lckluZm9zW2ldLnNp Z19tcGkpLCBHQ1JZTVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdF9idWYsIHJlc3VsdF9zaXplLCBOVUxMKTsKKyAgICAgIGdydWJfZnJlZSAocmVzdWx0 X2J1Zik7CisKKyAgICAgIGlmIChnY3J5X2VyciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgICAg ICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgbG9hZGluZyBzaWduYXR1cmUgJWQg aW50byBNUEkgc3RydWN0dXJlOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwg Z2NyeV9lcnIpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAg fQorCisgICAgICAvKgorICAgICAgICogVXNlIG1zZy0+c2lnbmVySW5mb19jb3VudCB0byB0cmFj ayBmdWxseSBwb3B1bGF0ZWQgc2lnbmVySW5mb3Mgc28gd2UKKyAgICAgICAqIGtub3cgaG93IG1h bnkgd2UgbmVlZCB0byBjbGVhbiB1cC4KKyAgICAgICAqLworICAgICAgbXNnLT5zaWduZXJJbmZv X2NvdW50Kys7CisgICAgfQorCisgIC8qCisgICAqIEZpbmFsIGNvbnNpc3RlbmN5IGNoZWNrIG9m IHNpZ25lckluZm8uKi5kaWdlc3RBbGdvcml0aG0gdnMKKyAgICogZGlnZXN0QWxnb3JpdGhtcy4q LmFsZ29yaXRobS4gQW4gYWxnb3JpdGhtIG11c3QgYmUgcHJlc2VudCBpbiBib3RoCisgICAqIGRp Z2VzdEFsZ29yaXRobXMgYW5kIHNpZ25lckluZm8gb3IgaW4gbmVpdGhlci4gV2UgaGF2ZSBhbHJl YWR5IGNoZWNrZWQKKyAgICogZm9yIGFuIGFsZ29yaXRobSBpbiBzaWduZXJJbmZvIHRoYXQgaXMg bm90IGluIGRpZ2VzdEFsZ29yaXRobXMsIGhlcmUgd2UKKyAgICogY2hlY2sgZm9yIGFsZ29yaXRo bXMgaW4gZGlnZXN0QWxnb3JpdGhtcyBidXQgbm90IGluIHNpZ25lckluZm9zLgorICAgKi8KKyAg aWYgKHNoYTUxMl9pbl9kYSA9PSB0cnVlICYmIHNoYTUxMl9pbl9zaSA9PSBmYWxzZSkKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAg ICAgICAgICAgICAgICAgICAgIlNIQS01MTIgc3BlY2lmaWVkIGluIERpZ2VzdEFsZ29yaXRobXMg YnV0IGRpZCBub3QgYXBwZWFyIGluIFNpZ25lckluZm9zLiIpOworICAgICAgZ290byBjbGVhbnVw X3NpZ25lckluZm9zOworICAgIH0KKworICBpZiAoc2hhMjU2X2luX2RhID09IHRydWUgJiYgc2hh MjU2X2luX3NpID09IGZhbHNlKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTI1NiBzcGVj aWZpZWQgaW4gRGlnZXN0QWxnb3JpdGhtcyBidXQgZGlkIG5vdCBhcHBlYXIgaW4gU2lnbmVySW5m b3MuIik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgfQorCisgIGFzbjFf ZGVsZXRlX3N0cnVjdHVyZSAoJnNpZ25lZF9wYXJ0KTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9O RTsKKworIGNsZWFudXBfc2lnbmVySW5mb3M6CisgIGZvciAoaSA9IDA7IGkgPCBtc2ctPnNpZ25l ckluZm9fY291bnQ7IGkrKykKKyAgICBnY3J5X21waV9yZWxlYXNlIChtc2ctPnNpZ25lckluZm9z W2ldLnNpZ19tcGkpOworCisgIGdydWJfZnJlZSAobXNnLT5zaWduZXJJbmZvcyk7CisKKyBjbGVh bnVwX3NpZ25lZF9wYXJ0OgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZzaWduZWRfcGFydCk7 CisKKyAgcmV0dXJuIGVycjsKK30KKworZ3J1Yl9lcnJfdAorcGFyc2VfcGtjczdfc2lnbmVkRGF0 YSAoY29uc3Qgdm9pZCAqc2lnYnVmLCBncnViX3NpemVfdCBkYXRhX3NpemUsIHN0cnVjdCBwa2Nz N19zaWduZWREYXRhICptc2cpCit7CisgIGludCByZXM7CisgIGFzbjFfbm9kZSBjb250ZW50X2lu Zm87CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjb250ZW50X29p ZFtNQVhfT0lEX0xFTl07CisgIGdydWJfdWludDhfdCAqY29udGVudDsKKyAgaW50IGNvbnRlbnRf c2l6ZTsKKyAgaW50IGNvbnRlbnRfb2lkX3NpemUgPSBzaXplb2YgKGNvbnRlbnRfb2lkKTsKKyAg aW50IHNpemU7CisKKyAgaWYgKGRhdGFfc2l6ZSA+IEdSVUJfSU5UX01BWCkKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAg ICAiY2Fubm90IHBhcnNlIGEgUEtDUyM3IG1lc3NhZ2Ugd2hlcmUgZGF0YSBzaXplID4gR1JVQl9J TlRfTUFYLiIpOworCisgIHNpemUgPSAoaW50KSBkYXRhX3NpemU7CisKKyAgcmVzID0gYXNuMV9j cmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5wa2NzLTctQ29udGVu dEluZm8iLCAmY29udGVudF9pbmZvKTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgUEtDUyM3IGRh dGE6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7CisK KyAgcmVzID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmY29udGVudF9pbmZvLCBzaWdidWYsICZzaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RF UiB8IEFTTjFfREVDT0RFX0ZMQUdfQUxMT1dfUEFERElORywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhc24xX2Vycm9yKTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICJlcnJvciBkZWNvZGluZyBQS0NTIzcgbWVzc2FnZSBERVI6ICVzIiwg YXNuMV9lcnJvcik7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qCisgICAqIENv bnRlbnRJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAqICAgICBjb250ZW50VHlwZSBDb250ZW50VHlw ZSwKKyAgICogICAgIGNvbnRlbnQgWzBdIEVYUExJQ0lUIEFOWSBERUZJTkVEIEJZIGNvbnRlbnRU eXBlIH0KKyAgICoKKyAgICogQ29udGVudFR5cGUgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgICAq LworICByZXMgPSBhc24xX3JlYWRfdmFsdWUgKGNvbnRlbnRfaW5mbywgImNvbnRlbnRUeXBlIiwg Y29udGVudF9vaWQsICZjb250ZW50X29pZF9zaXplKTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NF U1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVS RSwgImVycm9yIHJlYWRpbmcgUEtDUyM3IGNvbnRlbnQgdHlwZTogJXMiLAorICAgICAgICAgICAg ICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorCisgIC8qIE9JRCBmb3IgU2lnbmVkRGF0YSBkZWZpbmVkIGluIDUuMS4gKi8KKyAgaWYg KGdydWJfc3RybmNtcCAoc2lnbmVkRGF0YV9vaWQsIGNvbnRlbnRfb2lkLCBjb250ZW50X29pZF9z aXplKSAhPSAwKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9T SUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBjb250ZW50IHR5 cGUgaW4gUEtDUyM3IG1lc3NhZ2U6IE9JRCAlcyIsIGNvbnRlbnRfb2lkKTsKKyAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICB9CisKKyAgY29udGVudCA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVh ZCAoY29udGVudF9pbmZvLCAiY29udGVudCIsICJQS0NTIzcgbWVzc2FnZSBjb250ZW50IiwgJmNv bnRlbnRfc2l6ZSk7CisgIGlmIChjb250ZW50ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0g Z3J1Yl9lcnJubzsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgZXJyID0gcHJvY2Vz c19jb250ZW50IChjb250ZW50LCBjb250ZW50X3NpemUsIG1zZyk7CisgIGdydWJfZnJlZSAoY29u dGVudCk7CisKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjb250ZW50X2lu Zm8pOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFn ZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBLQ1MjNyBtZXNzYWdlLgorICogSWYgdGhlIGNhbGxlciBk eW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIG1lc3NhZ2UsIGl0IG11c3QgZnJlZSBpdC4KKyAqLwor dm9pZAorcGtjczdfc2lnbmVkRGF0YV9yZWxlYXNlIChzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YSAq bXNnKQoreworICBncnViX3NzaXplX3QgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbXNnLT5zaWdu ZXJJbmZvX2NvdW50OyBpKyspCisgICAgZ2NyeV9tcGlfcmVsZWFzZSAobXNnLT5zaWduZXJJbmZv c1tpXS5zaWdfbXBpKTsKKworICBncnViX2ZyZWUgKG1zZy0+c2lnbmVySW5mb3MpOworfQotLSAK Mi4zOS41IChBcHBsZSBHaXQtMTU0KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9y ZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==