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 DE4BDD6DDE2 for ; Fri, 15 Nov 2024 07:38:02 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tBqtC-0001Mp-VE; Fri, 15 Nov 2024 02:37:15 -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 1tBqsr-0001BJ-2y for grub-devel@gnu.org; Fri, 15 Nov 2024 02:36:49 -0500 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tBqsm-00008k-AI for grub-devel@gnu.org; Fri, 15 Nov 2024 02:36:48 -0500 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-53da209492cso416523e87.3 for ; Thu, 14 Nov 2024 23:36:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1731656203; x=1732261003; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FaHeARW1h0ytwBfGgXuyqbcR8SM1fTMTTKQaMZ4kmzY=; b=R4gTqA3nJSJkw920u1/Bf6NUUnVmbrVcoqH8VRRf54qktJcT1tbK6uFydmRF8GEKiH QVsK3/LT/zr4qQ2DeeSLWS12bAGQxikdLp8WlJ5O6uGebT9Q7cCL8dQprGHDBBNvsRRC H2DI0OTTyDwYG2J9rzbEovw0dmTZFvSwGD/kqXp0Hvx/qNMmQNgGpfIUt6z2pD+FjRca NIxY66ceTEpXUysWnkwwq0wGadhIh8CQ9JMBSTh6J/pi5bdbV/GqnszqSkjwh8gDx9sz 1a+aCZc8pF/RDpCzhBaoBqZZpjM8BtecQYlY4wckFVa7EUwN0L5nnX4O2lLr1779fckl 56SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731656203; x=1732261003; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FaHeARW1h0ytwBfGgXuyqbcR8SM1fTMTTKQaMZ4kmzY=; b=rxPTX6ANM00pftWGpifukRvK/7wXSTUOKh3BvZ8o2o6dzbFaQVD4BYY5DZiMTXBZUu Ux5qGpsFqQUROSWFkwS0s4/wBAM6nPa5zjo4LqGiJJaZIHXE71dC6w/sVuViF15NADJ9 e7NL/sqnY33GEVkjHNykfVmhiW7IhN+y8i80KLrd5xyaooXmkZT8gv3MyWY9pri3pQJy gOHnDl6JQ9fsp1utWsTL+tJygXHPZf9egEAPuWEXTrpGOuoEqTHy5fHWEXo5aB1s3Coy kwY2JGslz5dzXOjNOslAQ5hMvz0MaTedyUSNmUYdpTqpp03wcQTEe+fBJZGYHCdoMw/F N4xA== X-Gm-Message-State: AOJu0YyUxxdcwfmO25++g8cfYUZ2iVamiPQ4IdJPsLoZbCE/Tp/I092c Y+ErKPnZxBmVw7uYd+LESH4Il9hjl/GRn+wNYFH7dPlMMq9uet6WABgQ+Dpl3ruJUBSMn8lAu0k I X-Google-Smtp-Source: AGHT+IFmG5gWFk99kqesNMGHf6kW1paV2lhkY4XiPbLct7SR+h3PCmD0ZjoQVk0Q+kjMpfoD+z9B9A== X-Received: by 2002:a05:6512:3da9:b0:53d:a698:7fab with SMTP id 2adb3069b0e04-53dab2a9e9dmr610137e87.33.1731656202427; Thu, 14 Nov 2024 23:36:42 -0800 (PST) Received: from localhost (111-240-136-29.dynamic-ip.hinet.net. [111.240.136.29]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ea024951b2sm2388524a91.12.2024.11.14.23.36.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Nov 2024 23:36:41 -0800 (PST) To: The development of GNU GRUB Subject: [PATCH v23 22/33] tss2: Add TPM2 Software Stack (TSS2) support Date: Fri, 15 Nov 2024 15:34:50 +0800 Message-ID: <20241115073506.2784-23-glin@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241115073506.2784-1-glin@suse.com> References: <20241115073506.2784-1-glin@suse.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::129; envelope-from=glin@suse.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: , From: Gary Lin via Grub-devel Reply-To: The development of GNU GRUB Cc: Gary Lin , Daniel Kiper , Hernan Gatta , Daniel Axtens , shkhisti@microsoft.com, jaskaran.khurana@microsoft.com, christopher.co@microsoft.com, daniel.mihai@microsoft.com, jaredz@redhat.com, development@efficientek.com, jejb@linux.ibm.com, mchang@suse.com, patrick.colp@oracle.com, Stefan Berger , Vladimir Serbinenko 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 QSBUcnVzdGVkIFBsYXRmb3JtIE1vZHVsZSAoVFBNKSBTb2Z0d2FyZSBTdGFjayAoVFNTKSBwcm92 aWRlcyBsb2dpYyB0bwpjb21wb3NlIGFuZCBzdWJtaXQgVFBNIGNvbW1hbmRzIGFuZCBwYXJzZSBy ZXBvbnNlcy4KCkEgbGltaXRlZCBudW1iZXIgb2YgVFBNIGNvbW1hbmRzIG1heSBiZSBhY2Nlc3Nl ZCB2aWEgdGhlIEVGSSBUQ0cyCnByb3RvY29sLiBUaGlzIHByb3RvY29sIGV4cG9zZXMgZnVuY3Rp b25hbGl0eSB0aGF0IGlzIHByaW1hcmlseSBnZWFyZWQKdG93YXJkIFRQTSB1c2FnZSB3aXRoaW4g dGhlIGNvbnRleHQgb2YgU2VjdXJlIEJvb3QuIEZvciBhbGwgb3RoZXIgVFBNCmNvbW1hbmRzLCBo b3dldmVyLCBzdWNoIGFzIHNlYWxpbmcgYW5kIHVuc2VhbGluZywgdGhpcyBwcm90b2NvbCBkb2Vz IG5vdApwcm92aWRlIGFueSBoZWxwLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgcGFzc3Rocm91Z2gg Y29tbWFuZCBzdWJtaXNzaW9uLgoKVGhlIFN1Ym1pdENvbW1hbmQgbWV0aG9kIGFsbG93cyBhIGNh bGxlciB0byBzZW5kIHJhdyBjb21tYW5kcyB0byB0aGUKc3lzdGVtJ3MgVFBNIGFuZCB0byByZWNl aXZlIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlLiBUaGVzZQpjb21tYW5kL3Jlc3BvbnNlIHBh aXJzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgdGhlIFRQTSB3aXJlIHByb3RvY29sLiBUbwpjb25zdHJ1 Y3QgY29tbWFuZHMgaW4gdGhpcyB3YXksIGFuZCB0byBwYXJzZSB0aGUgVFBNJ3MgcmVzcG9uc2Us IGl0IGlzCm5lY2Vzc2FyeSB0bywgZmlyc3QsIHBvc3Nlc3Mga25vd2xlZGdlIG9mIHRoZSB2YXJp b3VzIFRQTSBzdHJ1Y3R1cmVzLCBhbmQsCnNlY29uZCwgb2YgdGhlIFRQTSB3aXJlIHByb3RvY29s IGl0c2VsZi4KCkFzIHN1Y2gsIHRoaXMgcGF0Y2ggaW5jbHVkZXMgaW1wbGVtZW50YXRpb25zIG9m IHZhcmlvdXMgZ3J1Yl90cG0yXyogZnVuY3Rpb25zCihpbnZlbnRvcmllZCBiZWxvdyksIGFuZCBs b2dpYyB0byB3cml0ZSBhbmQgcmVhZCBjb21tYW5kIGFuZCByZXNwb25zZQpidWZmZXJzLCByZXNw ZWN0aXZlbHksIHVzaW5nIHRoZSBUUE0gd2lyZSBwcm90b2NvbC4KCkZ1bmN0aW9uczoKICogZ3J1 Yl90cG0yX2NyZWF0ZSgpCiAqIGdydWJfdHBtMl9jcmVhdGVwcmltYXJ5KCkKICogZ3J1Yl90cG0y X2V2aWN0Y29udHJvbCgpCiAqIGdydWJfdHBtMl9mbHVzaGNvbnRleHQoKQogKiBncnViX3RwbTJf bG9hZCgpCiAqIGdydWJfdHBtMl9wY3JfcmVhZCgpCiAqIGdydWJfdHBtMl9wb2xpY3lnZXRkaWdl c3QoKQogKiBncnViX3RwbTJfcG9saWN5cGNyKCkKICogZ3J1Yl90cG0yX3JlYWRwdWJsaWMoKQog KiBncnViX3RwbTJfc3RhcnRhdXRoc2Vzc2lvbigpCiAqIGdydWJfdHBtMl91bnNlYWwoKQogKiBn cnViX3RwbTJfbG9hZGV4dGVybmFsKCkKICogZ3J1Yl90cG0yX2hhc2goKQogKiBncnViX3RwbTJf dmVyaWZ5c2lnbmF0dXJlKCkKICogZ3J1Yl90cG0yX3BvbGljeWF1dGhvcml6ZSgpCiAqIGdydWJf dHBtMl90ZXN0cGFybXMoKQoKU2lnbmVkLW9mZi1ieTogSGVybmFuIEdhdHRhIDxoZWdhdHRhQGxp bnV4Lm1pY3Jvc29mdC5jb20+ClNpZ25lZC1vZmYtYnk6IEdhcnkgTGluIDxnbGluQHN1c2UuY29t PgpSZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KUmV2 aWV3ZWQtYnk6IFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAbGludXguaWJtLmNvbT4KLS0tCiBncnVi LWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgICB8ICAgMTEgKwogZ3J1Yi1jb3JlL2xpYi9lZmkvdGNn Mi5jICAgICAgfCAgMTQzICsrKysrCiBncnViLWNvcmUvbGliL3RzczIvdGNnMi5oICAgICB8ICAg MzUgKysKIGdydWItY29yZS9saWIvdHNzMi90cG0yX2NtZC5jIHwgMTA0MyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGdydWItY29yZS9saWIvdHNzMi90cG0yX2NtZC5oIHwgIDE1 NyArKysrKwogZ3J1Yi1jb3JlL2xpYi90c3MyL3RzczIuYyAgICAgfCAgIDIxICsKIDYgZmlsZXMg Y2hhbmdlZCwgMTQxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3Jl L2xpYi9lZmkvdGNnMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2xpYi90c3MyL3Rj ZzIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWItY29yZS9saWIvdHNzMi90cG0yX2NtZC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2xpYi90c3MyL3RwbTJfY21kLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBncnViLWNvcmUvbGliL3RzczIvdHNzMi5jCgpkaWZmIC0tZ2l0IGEvZ3J1Yi1j b3JlL01ha2VmaWxlLmNvcmUuZGVmIGIvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCmluZGV4 IDM3ZjEzMWFlMi4uNDViNzA1YTM0IDEwMDY0NAotLS0gYS9ncnViLWNvcmUvTWFrZWZpbGUuY29y ZS5kZWYKKysrIGIvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCkBAIC0yNTY3LDYgKzI1Njcs MTcgQEAgbW9kdWxlID0gewogICBlbmFibGUgPSBlZmk7CiB9OwogCittb2R1bGUgPSB7CisgIG5h bWUgPSB0c3MyOworICBjb21tb24gPSBsaWIvdHNzMi9idWZmZXIuYzsKKyAgY29tbW9uID0gbGli L3RzczIvdHNzMl9tdS5jOworICBjb21tb24gPSBsaWIvdHNzMi90cG0yX2NtZC5jOworICBjb21t b24gPSBsaWIvdHNzMi90c3MyLmM7CisgIGVmaSA9IGxpYi9lZmkvdGNnMi5jOworICBlbmFibGUg PSBlZmk7CisgIGNwcGZsYWdzID0gJy1JJChzcmNkaXIpL2xpYi90c3MyJzsKK307CisKIG1vZHVs ZSA9IHsKICAgbmFtZSA9IHRyOwogICBjb21tb24gPSBjb21tYW5kcy90ci5jOwpkaWZmIC0tZ2l0 IGEvZ3J1Yi1jb3JlL2xpYi9lZmkvdGNnMi5jIGIvZ3J1Yi1jb3JlL2xpYi9lZmkvdGNnMi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uODQxYmY1MGJiCi0tLSAvZGV2L251 bGwKKysrIGIvZ3J1Yi1jb3JlL2xpYi9lZmkvdGNnMi5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgor ICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMp IDIwMjIgTWljcm9zb2Z0IENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVC LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNp bmNsdWRlIDxncnViL2VmaS9hcGkuaD4KKyNpbmNsdWRlIDxncnViL2VmaS9lZmkuaD4KKyNpbmNs dWRlIDxncnViL2VmaS90cG0uaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisKKyNpbmNsdWRlIDx0 Y2cyLmg+CisKK3N0YXRpYyBncnViX2Vycl90Cit0Y2cyX2dldF9jYXBzIChncnViX2VmaV90cG0y X3Byb3RvY29sX3QgKnByb3RvY29sLCBpbnQgKnRwbTIsIGdydWJfc2l6ZV90ICptYXhfb3V0cHV0 X3NpemUpCit7CisgIGdydWJfZWZpX3N0YXR1c190IHN0YXR1czsKKyAgc3RhdGljIGJvb2wgaGFz X2NhcHMgPSAwOworICBzdGF0aWMgRUZJX1RDRzJfQk9PVF9TRVJWSUNFX0NBUEFCSUxJVFkgY2Fw cyA9CisgIHsKKyAgICAuU2l6ZSA9IChncnViX3VpbnQ4X3QpIHNpemVvZiAoY2FwcykKKyAgfTsK KworICBpZiAoaGFzX2NhcHMpCisgICAgZ290byBleGl0OworCisgIHN0YXR1cyA9IHByb3RvY29s LT5nZXRfY2FwYWJpbGl0eSAocHJvdG9jb2wsICZjYXBzKTsKKyAgaWYgKHN0YXR1cyAhPSBHUlVC X0VGSV9TVUNDRVNTIHx8ICFjYXBzLlRQTVByZXNlbnRGbGFnKQorICAgIHJldHVybiBHUlVCX0VS Ul9GSUxFX05PVF9GT1VORDsKKworICBoYXNfY2FwcyA9IDE7CisKKyBleGl0OgorICBpZiAodHBt MiAhPSBOVUxMKQorICAgICp0cG0yID0gY2Fwcy5UUE1QcmVzZW50RmxhZzsKKyAgaWYgKG1heF9v dXRwdXRfc2l6ZSAhPSBOVUxMKQorICAgICptYXhfb3V0cHV0X3NpemUgPSBjYXBzLk1heFJlc3Bv bnNlU2l6ZTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJy X3QKK3RjZzJfZ2V0X3Byb3RvY29sIChncnViX2VmaV90cG0yX3Byb3RvY29sX3QgKipwcm90b2Nv bCkKK3sKKyAgc3RhdGljIGdydWJfZ3VpZF90IHRwbTJfZ3VpZCA9IEVGSV9UUE0yX0dVSUQ7Cisg IHN0YXRpYyBncnViX2VmaV90cG0yX3Byb3RvY29sX3QgKnRwbTJfcHJvdG9jb2wgPSBOVUxMOwor ICBpbnQgdHBtMjsKKyAgZ3J1Yl9lZmlfaGFuZGxlX3QgKmhhbmRsZXM7CisgIGdydWJfZWZpX3Vp bnRuX3QgbnVtX2hhbmRsZXM7CisgIGdydWJfZWZpX2hhbmRsZV90IHRwbTJfaGFuZGxlOworICBn cnViX2Vycl90IGVyciA9IEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgIGlmICh0cG0yX3By b3RvY29sICE9IE5VTEwpCisgICAgeworICAgICAgKnByb3RvY29sID0gdHBtMl9wcm90b2NvbDsK KyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworICAgIH0KKworICBoYW5kbGVzID0gZ3J1Yl9l ZmlfbG9jYXRlX2hhbmRsZSAoR1JVQl9FRklfQllfUFJPVE9DT0wsICZ0cG0yX2d1aWQsIE5VTEws CisJCQkJICAgICZudW1faGFuZGxlcyk7CisgIGlmIChoYW5kbGVzID09IE5VTEwgfHwgbnVtX2hh bmRsZXMgPT0gMCkKKyAgICByZXR1cm4gZXJyOworCisgIHRwbTJfaGFuZGxlID0gaGFuZGxlc1sw XTsKKworICB0cG0yX3Byb3RvY29sID0gZ3J1Yl9lZmlfb3Blbl9wcm90b2NvbCAodHBtMl9oYW5k bGUsICZ0cG0yX2d1aWQsCisJCQkJCSAgR1JVQl9FRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9D T0wpOworICBpZiAodHBtMl9wcm90b2NvbCA9PSBOVUxMKQorICAgIGdvdG8gZXhpdDsKKworICBl cnIgPSB0Y2cyX2dldF9jYXBzICh0cG0yX3Byb3RvY29sLCAmdHBtMiwgTlVMTCk7CisgIGlmIChl cnIgIT0gR1JVQl9FUlJfTk9ORSB8fCB0cG0yID09IDApCisgICAgZ290byBleGl0OworCisgICpw cm90b2NvbCA9IHRwbTJfcHJvdG9jb2w7CisgIGVyciA9IEdSVUJfRVJSX05PTkU7CisKKyBleGl0 OgorICBncnViX2ZyZWUgKGhhbmRsZXMpOworICByZXR1cm4gZXJyOworfQorCitncnViX2Vycl90 CitncnViX3RjZzJfZ2V0X21heF9vdXRwdXRfc2l6ZSAoZ3J1Yl9zaXplX3QgKnNpemUpCit7Cisg IGdydWJfZXJyX3QgZXJyOworICBncnViX3NpemVfdCBtYXg7CisgIGdydWJfZWZpX3RwbTJfcHJv dG9jb2xfdCAqcHJvdG9jb2w7CisKKyAgaWYgKHNpemUgPT0gTlVMTCkKKyAgICByZXR1cm4gR1JV Ql9FUlJfQkFEX0FSR1VNRU5UOworCisgIGVyciA9IHRjZzJfZ2V0X3Byb3RvY29sICgmcHJvdG9j b2wpOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgcmV0dXJuIGVycjsKKworICBl cnIgPSB0Y2cyX2dldF9jYXBzIChwcm90b2NvbCwgTlVMTCwgJm1heCk7CisgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKyAgICByZXR1cm4gZXJyOworCisgICpzaXplID0gbWF4OworCisgIHJl dHVybiBHUlVCX0VSUl9OT05FOworfQorCitncnViX2Vycl90CitncnViX3RjZzJfc3VibWl0X2Nv bW1hbmQgKGdydWJfc2l6ZV90IGlucHV0X3NpemUsCisJCQkgIGdydWJfdWludDhfdCAqaW5wdXQs CisJCQkgIGdydWJfc2l6ZV90IG91dHB1dF9zaXplLAorCQkJICBncnViX3VpbnQ4X3QgKm91dHB1 dCkKK3sKKyAgZ3J1Yl9lcnJfdCBlcnI7CisgIGdydWJfZWZpX3N0YXR1c190IHN0YXR1czsKKyAg Z3J1Yl9lZmlfdHBtMl9wcm90b2NvbF90ICpwcm90b2NvbDsKKworICBpZiAoaW5wdXRfc2l6ZSA9 PSAwICB8fCBpbnB1dCA9PSBOVUxMIHx8CisgICAgICBvdXRwdXRfc2l6ZSA9PSAwIHx8IG91dHB1 dCA9PSBOVUxMKQorICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisKKyAgZXJyID0g dGNnMl9nZXRfcHJvdG9jb2wgKCZwcm90b2NvbCk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9O RSkKKyAgICByZXR1cm4gZXJyOworCisgIHN0YXR1cyA9IHByb3RvY29sLT5zdWJtaXRfY29tbWFu ZCAocHJvdG9jb2wsIGlucHV0X3NpemUsIGlucHV0LAorCQkJCSAgICAgb3V0cHV0X3NpemUsIG91 dHB1dCk7CisgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKKyAgICByZXR1cm4gR1JV Ql9FUlJfSU5WQUxJRF9DT01NQU5EOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQpkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2xpYi90c3MyL3RjZzIuaCBiL2dydWItY29yZS9saWIvdHNzMi90 Y2cyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zZDI2MzczZGQKLS0t IC9kZXYvbnVsbAorKysgYi9ncnViLWNvcmUvbGliL3RzczIvdGNnMi5oCkBAIC0wLDAgKzEsMzUg QEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHly aWdodCAoQykgMjAyMiBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBz b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3 aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg Ki8KKworI2lmbmRlZiBHUlVCX1RQTTJfVENHMl9IRUFERVIKKyNkZWZpbmUgR1JVQl9UUE0yX1RD RzJfSEVBREVSIDEKKworI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi90eXBl cy5oPgorCitleHRlcm4gZ3J1Yl9lcnJfdAorZ3J1Yl90Y2cyX2dldF9tYXhfb3V0cHV0X3NpemUg KGdydWJfc2l6ZV90ICpzaXplKTsKKworZXh0ZXJuIGdydWJfZXJyX3QKK2dydWJfdGNnMl9zdWJt aXRfY29tbWFuZCAoZ3J1Yl9zaXplX3QgaW5wdXRfc2l6ZSwKKwkJCSAgZ3J1Yl91aW50OF90ICpp bnB1dCwKKwkJCSAgZ3J1Yl9zaXplX3Qgb3V0cHV0X3NpemUsCisJCQkgIGdydWJfdWludDhfdCAq b3V0cHV0KTsKKworI2VuZGlmIC8qICEgR1JVQl9UUE0yX1RDRzJfSEVBREVSICovCmRpZmYgLS1n aXQgYS9ncnViLWNvcmUvbGliL3RzczIvdHBtMl9jbWQuYyBiL2dydWItY29yZS9saWIvdHNzMi90 cG0yX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uY2QwYzZmZDMx Ci0tLSAvZGV2L251bGwKKysrIGIvZ3J1Yi1jb3JlL2xpYi90c3MyL3RwbTJfY21kLmMKQEAgLTAs MCArMSwxMDQzIEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIK KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWljcm9zb2Z0IENvcnBvcmF0aW9uCisgKiAgQ29weXJp Z2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVC IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxncnViL2Vyci5oPgorI2luY2x1ZGUgPGdydWIvbW0u aD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+CisKKyNp bmNsdWRlIDx0c3MyX2J1ZmZlci5oPgorI2luY2x1ZGUgPHRzczJfbXUuaD4KKyNpbmNsdWRlIDx0 c3MyX3N0cnVjdHMuaD4KKyNpbmNsdWRlIDx0Y2cyLmg+CisjaW5jbHVkZSA8dHBtMl9jbWQuaD4K Kworc3RhdGljIFRQTV9SQ190Cit0cG0yX3N1Ym1pdF9jb21tYW5kX3JlYWwgKGNvbnN0IFRQTUlf U1RfQ09NTUFORF9UQUdfdCB0YWcsCisJCQkgIGNvbnN0IFRQTV9DQ190IGNvbW1hbmRDb2RlLAor CQkJICBUUE1fUkNfdCAqcmVzcG9uc2VDb2RlLAorCQkJICBjb25zdCBzdHJ1Y3QgZ3J1Yl90cG0y X2J1ZmZlciAqaW4sCisJCQkgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyICpvdXQpCit7CisgIGdy dWJfZXJyX3QgZXJyOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBidWY7CisgIFRQTUlfU1Rf Q09NTUFORF9UQUdfdCB0YWdfb3V0OworICBncnViX3VpbnQzMl90IGNvbW1hbmRfc2l6ZTsKKyAg Z3J1Yl9zaXplX3QgbWF4X291dHB1dF9zaXplOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90 cG0yX2J1ZmZlcl9pbml0ICgmYnVmKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UxNiAoJmJ1 ZiwgdGFnKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UzMiAoJmJ1ZiwgMCk7CisgIGdydWJf dHBtMl9idWZmZXJfcGFja191MzIgKCZidWYsIGNvbW1hbmRDb2RlKTsKKyAgZ3J1Yl90cG0yX2J1 ZmZlcl9wYWNrICgmYnVmLCBpbi0+ZGF0YSwgaW4tPnNpemUpOworCisgIGlmIChidWYuZXJyb3Ig IT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgLyogQ29udmVydCB0aGUgY29t bWFuZCBzaXplIHRvIGJpZyBlbmRpYW4gdG8gZmlsbCB0aGUgdTMyIGJ1ZmZlciBiZWxvdyAndGFn JyAqLworICBjb21tYW5kX3NpemUgPSBncnViX2NwdV90b19iZTMyIChidWYuc2l6ZSk7CisgIGdy dWJfbWVtY3B5ICgmYnVmLmRhdGFbc2l6ZW9mIChncnViX3VpbnQxNl90KV0sICZjb21tYW5kX3Np emUsIHNpemVvZiAoY29tbWFuZF9zaXplKSk7CisKKyAgLyogU3RheSB3aXRoaW4gb3V0cHV0IGJs b2NrIGxpbWl0cyAqLworICBlcnIgPSBncnViX3RjZzJfZ2V0X21heF9vdXRwdXRfc2l6ZSAoJm1h eF9vdXRwdXRfc2l6ZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSB8fCBtYXhfb3V0cHV0 X3NpemUgPiBvdXQtPmNhcCkKKyAgICBtYXhfb3V0cHV0X3NpemUgPSBvdXQtPmNhcCAtIDE7CisK KyAgLyogU3VibWl0ICovCisgIGVyciA9IGdydWJfdGNnMl9zdWJtaXRfY29tbWFuZCAoYnVmLnNp emUsIGJ1Zi5kYXRhLCBtYXhfb3V0cHV0X3NpemUsIG91dC0+ZGF0YSk7CisgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgLyogVW5tYXJz aGFsICovCisgIG91dC0+c2l6ZSA9IHNpemVvZiAoZ3J1Yl91aW50MTZfdCkgKyBzaXplb2YgKGdy dWJfdWludDMyX3QpICsgc2l6ZW9mIChncnViX3VpbnQzMl90KTsKKyAgZ3J1Yl90cG0yX2J1ZmZl cl91bnBhY2tfdTE2IChvdXQsICZ0YWdfb3V0KTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tf dTMyIChvdXQsICZjb21tYW5kX3NpemUpOworICBncnViX3RwbTJfYnVmZmVyX3VucGFja191MzIg KG91dCwgcmVzcG9uc2VDb2RlKTsKKyAgb3V0LT5zaXplID0gY29tbWFuZF9zaXplOworICBpZiAo b3V0LT5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICByZXR1cm4g VFBNX1JDX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBUUE1fUkNfdAordHBtMl9zdWJtaXRfY29tbWFu ZCAoY29uc3QgVFBNSV9TVF9DT01NQU5EX1RBR190IHRhZywKKwkJICAgICBjb25zdCBUUE1fQ0Nf dCBjb21tYW5kQ29kZSwKKwkJICAgICBUUE1fUkNfdCAqcmVzcG9uc2VDb2RlLAorCQkgICAgIGNv bnN0IHN0cnVjdCBncnViX3RwbTJfYnVmZmVyICppbiwKKwkJICAgICBzdHJ1Y3QgZ3J1Yl90cG0y X2J1ZmZlciAqb3V0KQoreworICBUUE1fUkNfdCBlcnI7CisgIGludCByZXRyeV9jbnQgPSAwOwor CisgIC8qIENhdGNoIFRQTV9SQ19SRVRSWSBhbmQgc2VuZCB0aGUgY29tbWFuZCBhZ2FpbiAqLwor ICBkbyB7CisgICAgZXJyID0gdHBtMl9zdWJtaXRfY29tbWFuZF9yZWFsICh0YWcsIGNvbW1hbmRD b2RlLCByZXNwb25zZUNvZGUsIGluLCBvdXQpOworICAgIGlmICgqcmVzcG9uc2VDb2RlICE9IFRQ TV9SQ19SRVRSWSkKKyAgICAgIGJyZWFrOworCisgICAgcmV0cnlfY250Kys7CisgIH0gd2hpbGUg KHJldHJ5X2NudCA8IDMpOworCisgIHJldHVybiBlcnI7Cit9CisKK1RQTV9SQ190CitncnViX3Rw bTJfY3JlYXRlcHJpbWFyeSAoY29uc3QgVFBNSV9SSF9ISUVSQVJDSFlfdCBwcmltYXJ5SGFuZGxl LAorCQkJIGNvbnN0IFRQTVNfQVVUSF9DT01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQkJIGNvbnN0 IFRQTTJCX1NFTlNJVElWRV9DUkVBVEVfdCAqaW5TZW5zaXRpdmUsCisJCQkgY29uc3QgVFBNMkJf UFVCTElDX3QgKmluUHVibGljLAorCQkJIGNvbnN0IFRQTTJCX0RBVEFfdCAqb3V0c2lkZUluZm8s CisJCQkgY29uc3QgVFBNTF9QQ1JfU0VMRUNUSU9OX3QgKmNyZWF0aW9uUENSLAorCQkJIFRQTV9I QU5ETEVfdCAqb2JqZWN0SGFuZGxlLAorCQkJIFRQTTJCX1BVQkxJQ190ICpvdXRQdWJsaWMsCisJ CQkgVFBNMkJfQ1JFQVRJT05fREFUQV90ICpjcmVhdGlvbkRhdGEsCisJCQkgVFBNMkJfRElHRVNU X3QgKmNyZWF0aW9uSGFzaCwKKwkJCSBUUE1UX1RLX0NSRUFUSU9OX3QgKmNyZWF0aW9uVGlja2V0 LAorCQkJIFRQTTJCX05BTUVfdCAqbmFtZSwKKwkJCSBUUE1TX0FVVEhfUkVTUE9OU0VfdCAqYXV0 aFJlc3BvbnNlKQoreworICBUUE1fUkNfdCByYzsKKyAgc3RydWN0IGdydWJfdHBtMl9idWZmZXIg aW47CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIG91dDsKKyAgVFBNX0hBTkRMRV90IG9iamVj dEhhbmRsZVRtcDsKKyAgVFBNMkJfUFVCTElDX3Qgb3V0UHVibGljVG1wOworICBUUE0yQl9DUkVB VElPTl9EQVRBX3QgY3JlYXRpb25EYXRhVG1wOworICBUUE0yQl9ESUdFU1RfdCBjcmVhdGlvbkhh c2hUbXA7CisgIFRQTVRfVEtfQ1JFQVRJT05fdCBjcmVhdGlvblRpY2tldFRtcDsKKyAgVFBNMkJf TkFNRV90IG5hbWVUbXA7CisgIFRQTVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25zZVRtcDsK KyAgVFBNSV9TVF9DT01NQU5EX1RBR190IHRhZyA9IGF1dGhDb21tYW5kID8gVFBNX1NUX1NFU1NJ T05TIDogVFBNX1NUX05PX1NFU1NJT05TOworICBUUE1fUkNfdCByZXNwb25zZUNvZGU7CisgIGdy dWJfdWludDMyX3QgcGFyYW1ldGVyU2l6ZTsKKworICBpZiAoaW5TZW5zaXRpdmUgPT0gTlVMTCB8 fCBpblB1YmxpYyA9PSBOVUxMIHx8IG91dHNpZGVJbmZvID09IE5VTEwgfHwKKyAgICAgIGNyZWF0 aW9uUENSID09IE5VTEwpCisgICAgcmV0dXJuIFRQTV9SQ19WQUxVRTsKKworICBpZiAob2JqZWN0 SGFuZGxlID09IE5VTEwpCisgICAgb2JqZWN0SGFuZGxlID0gJm9iamVjdEhhbmRsZVRtcDsKKyAg aWYgKG91dFB1YmxpYyA9PSBOVUxMKQorICAgIG91dFB1YmxpYyA9ICZvdXRQdWJsaWNUbXA7Cisg IGlmIChjcmVhdGlvbkRhdGEgPT0gTlVMTCkKKyAgICBjcmVhdGlvbkRhdGEgPSAmY3JlYXRpb25E YXRhVG1wOworICBpZiAoY3JlYXRpb25IYXNoID09IE5VTEwpCisgICAgY3JlYXRpb25IYXNoID0g JmNyZWF0aW9uSGFzaFRtcDsKKyAgaWYgKGNyZWF0aW9uVGlja2V0ID09IE5VTEwpCisgICAgY3Jl YXRpb25UaWNrZXQgPSAmY3JlYXRpb25UaWNrZXRUbXA7CisgIGlmIChuYW1lID09IE5VTEwpCisg ICAgbmFtZSA9ICZuYW1lVG1wOworICBpZiAoYXV0aFJlc3BvbnNlID09IE5VTEwpCisgICAgYXV0 aFJlc3BvbnNlID0gJmF1dGhSZXNwb25zZVRtcDsKKworICBncnViX21lbXNldCAob3V0UHVibGlj LCAwLCBzaXplb2YgKCpvdXRQdWJsaWMpKTsKKyAgZ3J1Yl9tZW1zZXQgKGNyZWF0aW9uRGF0YSwg MCwgc2l6ZW9mICgqY3JlYXRpb25EYXRhKSk7CisgIGdydWJfbWVtc2V0IChjcmVhdGlvbkhhc2gs IDAsIHNpemVvZiAoKmNyZWF0aW9uSGFzaCkpOworICBncnViX21lbXNldCAoY3JlYXRpb25UaWNr ZXQsIDAsIHNpemVvZiAoKmNyZWF0aW9uVGlja2V0KSk7CisgIGdydWJfbWVtc2V0IChuYW1lLCAw LCBzaXplb2YgKCpuYW1lKSk7CisgIGdydWJfbWVtc2V0IChhdXRoUmVzcG9uc2UsIDAsIHNpemVv ZiAoKmF1dGhSZXNwb25zZSkpOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZl cl9pbml0ICgmaW4pOworICBncnViX3RwbTJfYnVmZmVyX3BhY2tfdTMyICgmaW4sIHByaW1hcnlI YW5kbGUpOworICBpZiAoYXV0aENvbW1hbmQgIT0gTlVMTCkKKyAgICBncnViX1RzczJfTVVfVFBN U19BVVRIX0NPTU1BTkRfTWFyc2hhbCAoJmluLCBhdXRoQ29tbWFuZCk7CisgIGdydWJfVHNzMl9N VV9UUE0yQl9TRU5TSVRJVkVfQ1JFQVRFX01hcnNoYWwgKCZpbiwgaW5TZW5zaXRpdmUpOworICBn cnViX1RzczJfTVVfVFBNMkJfUFVCTElDX01hcnNoYWwgKCZpbiwgaW5QdWJsaWMpOworICBncnVi X1RzczJfTVVfVFBNMkJfTWFyc2hhbCAoJmluLCBvdXRzaWRlSW5mby0+c2l6ZSwgb3V0c2lkZUlu Zm8tPmJ1ZmZlcik7CisgIGdydWJfVHNzMl9NVV9UUE1MX1BDUl9TRUxFQ1RJT05fTWFyc2hhbCAo JmluLCBjcmVhdGlvblBDUik7CisgIGlmIChpbi5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1f UkNfRkFJTFVSRTsKKworICAvKiBTdWJtaXQgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgm b3V0KTsKKyAgcmMgPSB0cG0yX3N1Ym1pdF9jb21tYW5kICh0YWcsIFRQTV9DQ19DcmVhdGVQcmlt YXJ5LCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NF U1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNT KQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGdydWJf dHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgb2JqZWN0SGFuZGxlKTsKKyAgaWYgKHRhZyA9 PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMyICgmb3V0 LCAmcGFyYW1ldGVyU2l6ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9QVUJMSUNfVW5tYXJzaGFs ICgmb3V0LCBvdXRQdWJsaWMpOworICBncnViX1RzczJfTVVfVFBNMkJfQ1JFQVRJT05fREFUQV9V bm1hcnNoYWwgKCZvdXQsIGNyZWF0aW9uRGF0YSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9ESUdF U1RfVW5tYXJzaGFsICgmb3V0LCBjcmVhdGlvbkhhc2gpOworICBncnViX1RzczJfTVVfVFBNVF9U S19DUkVBVElPTl9Vbm1hcnNoYWwgKCZvdXQsIGNyZWF0aW9uVGlja2V0KTsKKyAgZ3J1Yl9Uc3My X01VX1RQTTJCX05BTUVfVW5tYXJzaGFsICgmb3V0LCBuYW1lKTsKKyAgaWYgKHRhZyA9PSBUUE1f U1RfU0VTU0lPTlMpCisgICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9SRVNQT05TRV9Vbm1hcnNo YWwgKCZvdXQsIGF1dGhSZXNwb25zZSk7CisgIGlmIChvdXQuZXJyb3IgIT0gMCkKKyAgICByZXR1 cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgcmV0dXJuIFRQTV9SQ19TVUNDRVNTOworfQorCitUUE1f UkNfdAorZ3J1Yl90cG0yX3N0YXJ0YXV0aHNlc3Npb24gKGNvbnN0IFRQTUlfREhfT0JKRUNUX3Qg dHBtS2V5LAorCQkJICAgIGNvbnN0IFRQTUlfREhfRU5USVRZX3QgYmluZCwKKwkJCSAgICBjb25z dCBUUE1TX0FVVEhfQ09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJCSAgICBjb25zdCBUUE0yQl9O T05DRV90ICpub25jZUNhbGxlciwKKwkJCSAgICBjb25zdCBUUE0yQl9FTkNSWVBURURfU0VDUkVU X3QgKmVuY3J5cHRlZFNhbHQsCisJCQkgICAgY29uc3QgVFBNX1NFX3Qgc2Vzc2lvblR5cGUsCisJ CQkgICAgY29uc3QgVFBNVF9TWU1fREVGX3QgKnN5bW1ldHJpYywKKwkJCSAgICBjb25zdCBUUE1J X0FMR19IQVNIX3QgYXV0aEhhc2gsCisJCQkgICAgVFBNSV9TSF9BVVRIX1NFU1NJT05fdCAqc2Vz c2lvbkhhbmRsZSwKKwkJCSAgICBUUE0yQl9OT05DRV90ICpub25jZVRwbSwKKwkJCSAgICBUUE1T X0FVVEhfUkVTUE9OU0VfdCAqYXV0aFJlc3BvbnNlKQoreworICBUUE1fUkNfdCByYzsKKyAgc3Ry dWN0IGdydWJfdHBtMl9idWZmZXIgaW47CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIG91dDsK KyAgVFBNSV9TSF9BVVRIX1NFU1NJT05fdCBzZXNzaW9uSGFuZGxlVG1wOworICBUUE0yQl9OT05D RV90IG5vbmNlVHBtVG1wOworICBUUE1TX0FVVEhfUkVTUE9OU0VfdCBhdXRoUmVzcG9uc2VUbXA7 CisgIFRQTUlfU1RfQ09NTUFORF9UQUdfdCB0YWcgPSBhdXRoQ29tbWFuZCA/IFRQTV9TVF9TRVNT SU9OUyA6IFRQTV9TVF9OT19TRVNTSU9OUzsKKyAgVFBNX1JDX3QgcmVzcG9uc2VDb2RlOworICBn cnViX3VpbnQzMl90IHBhcmFtX3NpemU7CisKKyAgaWYgKG5vbmNlQ2FsbGVyID09IE5VTEwgfHwg c3ltbWV0cmljID09IE5VTEwpCisgICAgcmV0dXJuIFRQTV9SQ19WQUxVRTsKKworICBpZiAodHBt S2V5ID09IFRQTV9SSF9OVUxMICYmCisgICAgICAoZW5jcnlwdGVkU2FsdCAmJiBlbmNyeXB0ZWRT YWx0LT5zaXplICE9IDApKQorICAgIHJldHVybiBUUE1fUkNfVkFMVUU7CisKKyAgaWYgKHNlc3Np b25IYW5kbGUgPT0gTlVMTCkKKyAgICBzZXNzaW9uSGFuZGxlID0gJnNlc3Npb25IYW5kbGVUbXA7 CisgIGlmIChub25jZVRwbSA9PSBOVUxMKQorICAgIG5vbmNlVHBtID0gJm5vbmNlVHBtVG1wOwor ICBpZiAoYXV0aFJlc3BvbnNlID09IE5VTEwpCisgICAgYXV0aFJlc3BvbnNlID0gJmF1dGhSZXNw b25zZVRtcDsKKworICBncnViX21lbXNldCAoc2Vzc2lvbkhhbmRsZSwgMCwgc2l6ZW9mICgqc2Vz c2lvbkhhbmRsZSkpOworICBncnViX21lbXNldCAobm9uY2VUcG0sIDAsIHNpemVvZiAoKm5vbmNl VHBtKSk7CisgIGdydWJfbWVtc2V0IChhdXRoUmVzcG9uc2UsIDAsIHNpemVvZiAoKmF1dGhSZXNw b25zZSkpOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmaW4p OworICBncnViX3RwbTJfYnVmZmVyX3BhY2tfdTMyICgmaW4sIHRwbUtleSk7CisgIGdydWJfdHBt Ml9idWZmZXJfcGFja191MzIgKCZpbiwgYmluZCk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJ T05TKQorICAgIGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfQ09NTUFORF9NYXJzaGFsICgmaW4sIGF1 dGhDb21tYW5kKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTTJCX01hcnNoYWwgKCZpbiwgbm9uY2VDYWxs ZXItPnNpemUsIG5vbmNlQ2FsbGVyLT5idWZmZXIpOworICBpZiAoZW5jcnlwdGVkU2FsdCAhPSBO VUxMKQorICAgIGdydWJfVHNzMl9NVV9UUE0yQl9NYXJzaGFsICgmaW4sIGVuY3J5cHRlZFNhbHQt PnNpemUsIGVuY3J5cHRlZFNhbHQtPnNlY3JldCk7CisgIGVsc2UKKyAgICBncnViX3RwbTJfYnVm ZmVyX3BhY2tfdTE2ICgmaW4sIDApOworICBncnViX3RwbTJfYnVmZmVyX3BhY2tfdTggKCZpbiwg c2Vzc2lvblR5cGUpOworICBncnViX1RzczJfTVVfVFBNVF9TWU1fREVGX01hcnNoYWwgKCZpbiwg c3ltbWV0cmljKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UxNiAoJmluLCBhdXRoSGFzaCk7 CisgIGlmIChpbi5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICAv KiBTdWJtaXQgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmb3V0KTsKKyAgcmMgPSB0cG0y X3N1Ym1pdF9jb21tYW5kICh0YWcsIFRQTV9DQ19TdGFydEF1dGhTZXNzaW9uLCAmcmVzcG9uc2VD b2RlLAorCQkJCSAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAg cmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJl dHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGdydWJfdHBtMl9idWZm ZXJfdW5wYWNrX3UzMiAoJm91dCwgc2Vzc2lvbkhhbmRsZSk7CisgIGlmICh0YWcgPT0gVFBNX1NU X1NFU1NJT05TKQorICAgIGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgJnBhcmFt X3NpemUpOworICBncnViX1RzczJfTVVfVFBNMkJfTk9OQ0VfVW5tYXJzaGFsICgmb3V0LCBub25j ZVRwbSk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdydWJfVHNzMl9NVV9U UE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVzcG9uc2UpOworICBpZiAo b3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOworCisgIHJldHVybiBU UE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBtMl9wb2xpY3lwY3IgKGNvbnN0 IFRQTUlfU0hfUE9MSUNZX3QgcG9saWN5U2Vzc2lvbnMsCisJCSAgICAgY29uc3QgVFBNU19BVVRI X0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCSAgICAgY29uc3QgVFBNMkJfRElHRVNUX3QgKnBj ckRpZ2VzdCwKKwkJICAgICBjb25zdCBUUE1MX1BDUl9TRUxFQ1RJT05fdCAqcGNycywKKwkJICAg ICBUUE1TX0FVVEhfUkVTUE9OU0VfdCAqYXV0aFJlc3BvbnNlKQoreworICBUUE1fUkNfdCByYzsK KyAgc3RydWN0IGdydWJfdHBtMl9idWZmZXIgaW47CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVy IG91dDsKKyAgVFBNU19BVVRIX1JFU1BPTlNFX3QgYXV0aFJlc3BvbnNlVG1wOworICBUUE1JX1NU X0NPTU1BTkRfVEFHX3QgdGFnID0gYXV0aENvbW1hbmQgPyBUUE1fU1RfU0VTU0lPTlMgOiBUUE1f U1RfTk9fU0VTU0lPTlM7CisgIFRQTV9SQ190IHJlc3BvbnNlQ29kZTsKKyAgZ3J1Yl91aW50MzJf dCBwYXJhbV9zaXplOworCisgIGlmIChwY3JzID09IE5VTEwpCisgICAgcmV0dXJuIFRQTV9SQ19W QUxVRTsKKworICBpZiAoYXV0aFJlc3BvbnNlID09IE5VTEwpCisgICAgYXV0aFJlc3BvbnNlID0g JmF1dGhSZXNwb25zZVRtcDsKKworICBncnViX21lbXNldCAoYXV0aFJlc3BvbnNlLCAwLCBzaXpl b2YgKCphdXRoUmVzcG9uc2UpKTsKKworICAvKiBNYXJzaGFsICovCisgIGdydWJfdHBtMl9idWZm ZXJfaW5pdCAoJmluKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UzMiAoJmluLCBwb2xpY3lT ZXNzaW9ucyk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdydWJfVHNzMl9N VV9UUE1TX0FVVEhfQ09NTUFORF9NYXJzaGFsICgmaW4sIGF1dGhDb21tYW5kKTsKKyAgaWYgKHBj ckRpZ2VzdCAhPSBOVUxMKQorICAgIGdydWJfVHNzMl9NVV9UUE0yQl9NYXJzaGFsICgmaW4sIHBj ckRpZ2VzdC0+c2l6ZSwgcGNyRGlnZXN0LT5idWZmZXIpOworICBlbHNlCisgICAgZ3J1Yl90cG0y X2J1ZmZlcl9wYWNrX3UxNiAoJmluLCAwKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTUxfUENSX1NFTEVD VElPTl9NYXJzaGFsICgmaW4sIHBjcnMpOworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1 cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgLyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJf aW5pdCAoJm91dCk7CisgIHJjID0gdHBtMl9zdWJtaXRfY29tbWFuZCAodGFnLCBUUE1fQ0NfUG9s aWN5UENSLCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NV Q0NFU1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUND RVNTKQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsKi8KKyAgaWYg KHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMy ICgmb3V0LCAmcGFyYW1fc2l6ZSk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAg IGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVz cG9uc2UpOworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJF OworCisgIHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBtMl9y ZWFkcHVibGljIChjb25zdCBUUE1JX0RIX09CSkVDVF90IG9iamVjdEhhbmRsZSwKKwkJICAgICAg Y29uc3QgVFBNU19BVVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCSAgICAgIFRQTTJCX1BV QkxJQ190ICpvdXRQdWJsaWMpCit7CisgIFRQTV9SQ190IHJjOworICBzdHJ1Y3QgZ3J1Yl90cG0y X2J1ZmZlciBpbjsKKyAgc3RydWN0IGdydWJfdHBtMl9idWZmZXIgb3V0OworICBUUE1JX1NUX0NP TU1BTkRfVEFHX3QgdGFnID0gYXV0aENvbW1hbmQgPyBUUE1fU1RfU0VTU0lPTlMgOiBUUE1fU1Rf Tk9fU0VTU0lPTlM7CisgIFRQTV9SQ190IHJlc3BvbnNlQ29kZTsKKyAgZ3J1Yl91aW50MzJfdCBw YXJhbWV0ZXJTaXplOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0 ICgmaW4pOworICBncnViX3RwbTJfYnVmZmVyX3BhY2tfdTMyICgmaW4sIG9iamVjdEhhbmRsZSk7 CisgIGlmIChpbi5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICAv KiBTdWJtaXQgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmb3V0KTsKKyAgcmMgPSB0cG0y X3N1Ym1pdF9jb21tYW5kICh0YWcsIFRQTV9DQ19SZWFkUHVibGljLCAmcmVzcG9uc2VDb2RlLCAm aW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJjOwor ICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiByZXNwb25z ZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05T KQorICAgIGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgJnBhcmFtZXRlclNpemUp OworICBncnViX1RzczJfTVVfVFBNMkJfUFVCTElDX1VubWFyc2hhbCAoJm91dCwgb3V0UHVibGlj KTsKKyAgaWYgKG91dC5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKwor ICByZXR1cm4gVFBNX1JDX1NVQ0NFU1M7Cit9CisKK1RQTV9SQ190CitncnViX3RwbTJfbG9hZCAo Y29uc3QgVFBNSV9ESF9PQkpFQ1RfdCBwYXJlbnRfaGFuZGxlLAorCQljb25zdCBUUE1TX0FVVEhf Q09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJY29uc3QgVFBNMkJfUFJJVkFURV90ICppblByaXZh dGUsCisJCWNvbnN0IFRQTTJCX1BVQkxJQ190ICppblB1YmxpYywKKwkJVFBNX0hBTkRMRV90ICpv YmplY3RIYW5kbGUsCisJCVRQTTJCX05BTUVfdCAqbmFtZSwKKwkJVFBNU19BVVRIX1JFU1BPTlNF X3QgKmF1dGhSZXNwb25zZSkKK3sKKyAgVFBNX1JDX3QgcmM7CisgIHN0cnVjdCBncnViX3RwbTJf YnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBvdXQ7CisgIFRQTV9IQU5ETEVf dCBvYmplY3RIYW5kbGVUbXA7CisgIFRQTTJCX05BTUVfdCBuYW1lVG1wOworICBUUE1TX0FVVEhf UkVTUE9OU0VfdCBhdXRoUmVzcG9uc2VUbXA7CisgIFRQTUlfU1RfQ09NTUFORF9UQUdfdCB0YWcg PSBhdXRoQ29tbWFuZCA/IFRQTV9TVF9TRVNTSU9OUyA6IFRQTV9TVF9OT19TRVNTSU9OUzsKKyAg VFBNX1JDX3QgcmVzcG9uc2VDb2RlOworICBncnViX3VpbnQzMl90IHBhcmFtX3NpemU7CisKKyAg aWYgKGluUHJpdmF0ZSA9PSBOVUxMIHx8IGluUHVibGljID09IE5VTEwpCisgICAgcmV0dXJuIFRQ TV9SQ19WQUxVRTsKKworICBpZiAob2JqZWN0SGFuZGxlID09IE5VTEwpCisgICAgb2JqZWN0SGFu ZGxlID0gJm9iamVjdEhhbmRsZVRtcDsKKyAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICBuYW1lID0g Jm5hbWVUbXA7CisgIGlmIChhdXRoUmVzcG9uc2UgPT0gTlVMTCkKKyAgICBhdXRoUmVzcG9uc2Ug PSAmYXV0aFJlc3BvbnNlVG1wOworCisgIGdydWJfbWVtc2V0IChvYmplY3RIYW5kbGUsIDAsIHNp emVvZiAoKm9iamVjdEhhbmRsZSkpOworICBncnViX21lbXNldCAobmFtZSwgMCwgc2l6ZW9mICgq bmFtZSkpOworICBncnViX21lbXNldCAoYXV0aFJlc3BvbnNlLCAwLCBzaXplb2YgKCphdXRoUmVz cG9uc2UpKTsKKworICAvKiBNYXJzaGFsICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJmlu KTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UzMiAoJmluLCBwYXJlbnRfaGFuZGxlKTsKKyAg aWYgKGF1dGhDb21tYW5kKQorICAgIGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfQ09NTUFORF9NYXJz aGFsICgmaW4sIGF1dGhDb21tYW5kKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTTJCX01hcnNoYWwgKCZp biwgaW5Qcml2YXRlLT5zaXplLCBpblByaXZhdGUtPmJ1ZmZlcik7CisgIGdydWJfVHNzMl9NVV9U UE0yQl9QVUJMSUNfTWFyc2hhbCAoJmluLCBpblB1YmxpYyk7CisgIGlmIChpbi5lcnJvciAhPSAw KQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICAvKiBTdWJtaXQgKi8KKyAgZ3J1Yl90 cG0yX2J1ZmZlcl9pbml0ICgmb3V0KTsKKyAgcmMgPSB0cG0yX3N1Ym1pdF9jb21tYW5kICh0YWcs IFRQTV9DQ19Mb2FkLCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBN X1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9S Q19TVUNDRVNTKQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICov CisgIGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgb2JqZWN0SGFuZGxlKTsKKyAg aWYgKHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tf dTMyICgmb3V0LCAmcGFyYW1fc2l6ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9OQU1FX1VubWFy c2hhbCAoJm91dCwgbmFtZSk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdy dWJfVHNzMl9NVV9UUE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVzcG9u c2UpOworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOwor CisgIHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBtMl9sb2Fk ZXh0ZXJuYWwgKGNvbnN0IFRQTVNfQVVUSF9DT01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQkJY29u c3QgVFBNMkJfU0VOU0lUSVZFX3QgKmluUHJpdmF0ZSwKKwkJCWNvbnN0IFRQTTJCX1BVQkxJQ190 ICppblB1YmxpYywKKwkJCWNvbnN0IFRQTUlfUkhfSElFUkFSQ0hZX3QgaGllcmFyY2h5LAorCQkJ VFBNX0hBTkRMRV90ICpvYmplY3RIYW5kbGUsCisJCQlUUE0yQl9OQU1FX3QgKm5hbWUsCisJCQlU UE1TX0FVVEhfUkVTUE9OU0VfdCAqYXV0aFJlc3BvbnNlKQoreworICBUUE1fUkNfdCByYzsKKyAg c3RydWN0IGdydWJfdHBtMl9idWZmZXIgaW47CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIG91 dDsKKyAgVFBNX0hBTkRMRV90IG9iamVjdEhhbmRsZVRtcDsKKyAgVFBNMkJfTkFNRV90IG5hbWVU bXA7CisgIFRQTVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25zZVRtcDsKKyAgVFBNSV9TVF9D T01NQU5EX1RBR190IHRhZyA9IGF1dGhDb21tYW5kID8gVFBNX1NUX1NFU1NJT05TIDogVFBNX1NU X05PX1NFU1NJT05TOworICBUUE1fUkNfdCByZXNwb25zZUNvZGU7CisgIGdydWJfdWludDMyX3Qg cGFyYW1fc2l6ZTsKKworICBpZiAoaW5QdWJsaWMgPT0gTlVMTCkKKyAgICByZXR1cm4gVFBNX1JD X1ZBTFVFOworCisgIGlmIChvYmplY3RIYW5kbGUgPT0gTlVMTCkKKyAgICBvYmplY3RIYW5kbGUg PSAmb2JqZWN0SGFuZGxlVG1wOworICBpZiAobmFtZSA9PSBOVUxMKQorICAgIG5hbWUgPSAmbmFt ZVRtcDsKKyAgaWYgKGF1dGhSZXNwb25zZSA9PSBOVUxMKQorICAgIGF1dGhSZXNwb25zZSA9ICZh dXRoUmVzcG9uc2VUbXA7CisKKyAgZ3J1Yl9tZW1zZXQgKG9iamVjdEhhbmRsZSwgMCwgc2l6ZW9m ICgqb2JqZWN0SGFuZGxlKSk7CisgIGdydWJfbWVtc2V0IChuYW1lLCAwLCBzaXplb2YgKCpuYW1l KSk7CisgIGdydWJfbWVtc2V0IChhdXRoUmVzcG9uc2UsIDAsIHNpemVvZiAoKmF1dGhSZXNwb25z ZSkpOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmaW4pOwor ICBpZiAoYXV0aENvbW1hbmQpCisgICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9DT01NQU5EX01h cnNoYWwgKCZpbiwgYXV0aENvbW1hbmQpOworICBpZiAoaW5Qcml2YXRlKQorICAgIGdydWJfVHNz Ml9NVV9UUE0yQl9TRU5TSVRJVkVfTWFyc2hhbCAoJmluLCBpblByaXZhdGUpOworICBlbHNlCisg ICAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UxNiAoJmluLCAwKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQ TTJCX1BVQkxJQ19NYXJzaGFsICgmaW4sIGluUHVibGljKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9w YWNrX3UzMiAoJmluLCBoaWVyYXJjaHkpOworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1 cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgLyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJf aW5pdCAoJm91dCk7CisgIHJjID0gdHBtMl9zdWJtaXRfY29tbWFuZCAodGFnLCBUUE1fQ0NfTG9h ZEV4dGVybmFsLCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JD X1NVQ0NFU1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19T VUNDRVNTKQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisg IGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgb2JqZWN0SGFuZGxlKTsKKyAgaWYg KHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMy ICgmb3V0LCAmcGFyYW1fc2l6ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9OQU1FX1VubWFyc2hh bCAoJm91dCwgbmFtZSk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdydWJf VHNzMl9NVV9UUE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVzcG9uc2Up OworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOworCisg IHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBtMl91bnNlYWwg KGNvbnN0IFRQTUlfREhfT0JKRUNUX3QgaXRlbUhhbmRsZSwKKwkJICBjb25zdCBUUE1TX0FVVEhf Q09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJICBUUE0yQl9TRU5TSVRJVkVfREFUQV90ICpvdXRE YXRhLAorCQkgIFRQTVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVzcG9uc2UpCit7CisgIFRQTV9S Q190IHJjOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBpbjsKKyAgc3RydWN0IGdydWJfdHBt Ml9idWZmZXIgb3V0OworICBUUE0yQl9TRU5TSVRJVkVfREFUQV90IG91dERhdGFUbXA7CisgIFRQ TVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25zZVRtcDsKKyAgVFBNSV9TVF9DT01NQU5EX1RB R190IHRhZyA9IGF1dGhDb21tYW5kID8gVFBNX1NUX1NFU1NJT05TIDogVFBNX1NUX05PX1NFU1NJ T05TOworICBUUE1fUkNfdCByZXNwb25zZUNvZGU7CisgIGdydWJfdWludDMyX3QgcGFyYW1fc2l6 ZTsKKworICBpZiAob3V0RGF0YSA9PSBOVUxMKQorICAgIG91dERhdGEgPSAmb3V0RGF0YVRtcDsK KyAgaWYgKGF1dGhSZXNwb25zZSA9PSBOVUxMKQorICAgIGF1dGhSZXNwb25zZSA9ICZhdXRoUmVz cG9uc2VUbXA7CisKKyAgZ3J1Yl9tZW1zZXQgKG91dERhdGEsIDAsIHNpemVvZiAoKm91dERhdGEp KTsKKyAgZ3J1Yl9tZW1zZXQgKGF1dGhSZXNwb25zZSwgMCwgc2l6ZW9mICgqYXV0aFJlc3BvbnNl KSk7CisKKyAgLyogTWFyc2hhbCAqLworICBncnViX3RwbTJfYnVmZmVyX2luaXQgKCZpbik7Cisg IGdydWJfdHBtMl9idWZmZXJfcGFja191MzIgKCZpbiwgaXRlbUhhbmRsZSk7CisgIGlmIChhdXRo Q29tbWFuZCAhPSBOVUxMKQorICAgIGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfQ09NTUFORF9NYXJz aGFsICgmaW4sIGF1dGhDb21tYW5kKTsKKyAgaWYgKGluLmVycm9yICE9IDApCisgICAgcmV0dXJu IFRQTV9SQ19GQUlMVVJFOworCisgIC8qIFN1Ym1pdCAqLworICBncnViX3RwbTJfYnVmZmVyX2lu aXQgKCZvdXQpOworICByYyA9IHRwbTJfc3VibWl0X2NvbW1hbmQgKHRhZywgVFBNX0NDX1Vuc2Vh bCwgJnJlc3BvbnNlQ29kZSwgJmluLCAmb3V0KTsKKyAgaWYgKHJjICE9IFRQTV9SQ19TVUNDRVNT KQorICAgIHJldHVybiByYzsKKyAgaWYgKHJlc3BvbnNlQ29kZSAhPSBUUE1fUkNfU1VDQ0VTUykK KyAgICByZXR1cm4gcmVzcG9uc2VDb2RlOworCisgIC8qIFVubWFyc2hhbCAqLworICBpZiAodGFn ID09IFRQTV9TVF9TRVNTSU9OUykKKyAgICBncnViX3RwbTJfYnVmZmVyX3VucGFja191MzIgKCZv dXQsICZwYXJhbV9zaXplKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTTJCX1NFTlNJVElWRV9EQVRBX1Vu bWFyc2hhbCAoJm91dCwgb3V0RGF0YSk7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQor ICAgIGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRo UmVzcG9uc2UpOworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlM VVJFOworCisgIHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBt Ml9mbHVzaGNvbnRleHQgKGNvbnN0IFRQTUlfREhfQ09OVEVYVF90IGhhbmRsZSkKK3sKKyAgVFBN X1JDX3QgcmM7CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1Yl90 cG0yX2J1ZmZlciBvdXQ7CisgIFRQTV9SQ190IHJlc3BvbnNlQ29kZTsKKworICAvKiBNYXJzaGFs ICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJmluKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9w YWNrX3UzMiAoJmluLCBoYW5kbGUpOworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1cm4g VFBNX1JDX0ZBSUxVUkU7CisKKyAgLyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5p dCAoJm91dCk7CisgIHJjID0gdHBtMl9zdWJtaXRfY29tbWFuZCAoVFBNX1NUX05PX1NFU1NJT05T LCBUUE1fQ0NfRmx1c2hDb250ZXh0LCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAo cmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2Rl ICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5t YXJzaGFsICovCisgIGlmIChvdXQuZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxV UkU7CisKKyAgcmV0dXJuIFRQTV9SQ19TVUNDRVNTOworfQorCitUUE1fUkNfdAorZ3J1Yl90cG0y X3Bjcl9yZWFkIChjb25zdCBUUE1TX0FVVEhfQ09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJICAg IGNvbnN0IFRQTUxfUENSX1NFTEVDVElPTl90ICpwY3JTZWxlY3Rpb25JbiwKKwkJICAgIGdydWJf dWludDMyX3QgKnBjclVwZGF0ZUNvdW50ZXIsCisJCSAgICBUUE1MX1BDUl9TRUxFQ1RJT05fdCAq cGNyU2VsZWN0aW9uT3V0LAorCQkgICAgVFBNTF9ESUdFU1RfdCAqcGNyVmFsdWVzLAorCQkgICAg VFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSkKK3sKKyAgVFBNX1JDX3QgcmM7Cisg IHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBv dXQ7CisgIGdydWJfdWludDMyX3QgcGNyVXBkYXRlQ291bnRlclRtcDsKKyAgVFBNTF9QQ1JfU0VM RUNUSU9OX3QgcGNyU2VsZWN0aW9uT3V0VG1wOworICBUUE1MX0RJR0VTVF90IHBjclZhbHVlc1Rt cDsKKyAgVFBNU19BVVRIX1JFU1BPTlNFX3QgYXV0aFJlc3BvbnNlVG1wOworICBUUE1JX1NUX0NP TU1BTkRfVEFHX3QgdGFnID0gYXV0aENvbW1hbmQgPyBUUE1fU1RfU0VTU0lPTlMgOiBUUE1fU1Rf Tk9fU0VTU0lPTlM7CisgIFRQTV9SQ190IHJlc3BvbnNlQ29kZTsKKyAgZ3J1Yl91aW50MzJfdCBw YXJhbWV0ZXJTaXplOworCisgIGlmIChwY3JTZWxlY3Rpb25JbiA9PSBOVUxMKQorICAgIHJldHVy biBUUE1fUkNfVkFMVUU7CisKKyAgaWYgKHBjclVwZGF0ZUNvdW50ZXIgPT0gTlVMTCkKKyAgICBw Y3JVcGRhdGVDb3VudGVyID0gJnBjclVwZGF0ZUNvdW50ZXJUbXA7CisgIGlmIChwY3JTZWxlY3Rp b25PdXQgPT0gTlVMTCkKKyAgICBwY3JTZWxlY3Rpb25PdXQgPSAmcGNyU2VsZWN0aW9uT3V0VG1w OworICBpZiAocGNyVmFsdWVzID09IE5VTEwpCisgICAgcGNyVmFsdWVzID0gJnBjclZhbHVlc1Rt cDsKKyAgaWYgKGF1dGhSZXNwb25zZSA9PSBOVUxMKQorICAgIGF1dGhSZXNwb25zZSA9ICZhdXRo UmVzcG9uc2VUbXA7CisKKyAgLyogTWFyc2hhbCAqLworICBncnViX3RwbTJfYnVmZmVyX2luaXQg KCZpbik7CisgIGlmIChhdXRoQ29tbWFuZCAhPSBOVUxMKQorICAgIGdydWJfVHNzMl9NVV9UUE1T X0FVVEhfQ09NTUFORF9NYXJzaGFsICgmaW4sIGF1dGhDb21tYW5kKTsKKyAgZ3J1Yl9Uc3MyX01V X1RQTUxfUENSX1NFTEVDVElPTl9NYXJzaGFsICgmaW4sIHBjclNlbGVjdGlvbkluKTsKKyAgaWYg KGluLmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOworCisgIC8qIFN1Ym1p dCAqLworICBncnViX3RwbTJfYnVmZmVyX2luaXQgKCZvdXQpOworICByYyA9IHRwbTJfc3VibWl0 X2NvbW1hbmQgKHRhZywgVFBNX0NDX1BDUl9SZWFkLCAmcmVzcG9uc2VDb2RlLCAmaW4sICZvdXQp OworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJjOworICBpZiAocmVz cG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiByZXNwb25zZUNvZGU7CisK KyAgLyogVW5tYXJzaGFsICovCisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdy dWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgJnBhcmFtZXRlclNpemUpOworICBncnVi X3RwbTJfYnVmZmVyX3VucGFja191MzIgKCZvdXQsIHBjclVwZGF0ZUNvdW50ZXIpOworICBncnVi X1RzczJfTVVfVFBNTF9QQ1JfU0VMRUNUSU9OX1VubWFyc2hhbCAoJm91dCwgcGNyU2VsZWN0aW9u T3V0KTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTUxfRElHRVNUX1VubWFyc2hhbCAoJm91dCwgcGNyVmFs dWVzKTsKKyAgaWYgKHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl9Uc3MyX01VX1RQ TVNfQVVUSF9SRVNQT05TRV9Vbm1hcnNoYWwgKCZvdXQsIGF1dGhSZXNwb25zZSk7CisgIGlmIChv dXQuZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgcmV0dXJuIFRQ TV9SQ19TVUNDRVNTOworfQorCitUUE1fUkNfdAorZ3J1Yl90cG0yX3BvbGljeWdldGRpZ2VzdCAo Y29uc3QgVFBNSV9TSF9QT0xJQ1lfdCBwb2xpY3lTZXNzaW9uLAorCQkJICAgY29uc3QgVFBNU19B VVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCQkgICBUUE0yQl9ESUdFU1RfdCAqcG9saWN5 RGlnZXN0LAorCQkJICAgVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSkKK3sKKyAg VFBNX1JDX3QgcmM7CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1 Yl90cG0yX2J1ZmZlciBvdXQ7CisgIFRQTVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25zZVRt cDsKKyAgVFBNMkJfRElHRVNUX3QgcG9saWN5RGlnZXN0VG1wOworICBUUE1JX1NUX0NPTU1BTkRf VEFHX3QgdGFnID0gYXV0aENvbW1hbmQgPyBUUE1fU1RfU0VTU0lPTlMgOiBUUE1fU1RfTk9fU0VT U0lPTlM7CisgIFRQTV9SQ190IHJlc3BvbnNlQ29kZTsKKyAgZ3J1Yl91aW50MzJfdCBwYXJhbWV0 ZXJTaXplOworCisgIGlmIChhdXRoUmVzcG9uc2UgPT0gTlVMTCkKKyAgICBhdXRoUmVzcG9uc2Ug PSAmYXV0aFJlc3BvbnNlVG1wOworICBpZiAocG9saWN5RGlnZXN0ID09IE5VTEwpCisgICAgcG9s aWN5RGlnZXN0ID0gJnBvbGljeURpZ2VzdFRtcDsKKworICBncnViX21lbXNldCAoYXV0aFJlc3Bv bnNlLCAwLCBzaXplb2YgKCphdXRoUmVzcG9uc2UpKTsKKyAgZ3J1Yl9tZW1zZXQgKHBvbGljeURp Z2VzdCwgMCwgc2l6ZW9mICgqcG9saWN5RGlnZXN0KSk7CisKKyAgLyogU3VibWl0ICovCisgIGdy dWJfdHBtMl9idWZmZXJfaW5pdCAoJmluKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNrX3UzMiAo JmluLCBwb2xpY3lTZXNzaW9uKTsKKyAgaWYgKHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAg Z3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9DT01NQU5EX01hcnNoYWwgKCZpbiwgYXV0aENvbW1hbmQp OworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAg LyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJm91dCk7CisgIHJjID0gdHBt Ml9zdWJtaXRfY29tbWFuZCAodGFnLCBUUE1fQ0NfUG9saWN5R2V0RGlnZXN0LCAmcmVzcG9uc2VD b2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJu IHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiBy ZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGlmICh0YWcgPT0gVFBNX1NUX1NF U1NJT05TKQorICAgIGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAoJm91dCwgJnBhcmFtZXRl clNpemUpOworICBncnViX1RzczJfTVVfVFBNMkJfRElHRVNUX1VubWFyc2hhbCAoJm91dCwgcG9s aWN5RGlnZXN0KTsKKyAgaWYgKHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl9Uc3My X01VX1RQTVNfQVVUSF9SRVNQT05TRV9Vbm1hcnNoYWwgKCZvdXQsIGF1dGhSZXNwb25zZSk7Cisg IGlmIChvdXQuZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgcmV0 dXJuIFRQTV9SQ19TVUNDRVNTOworfQorCitUUE1fUkNfdAorZ3J1Yl90cG0yX2NyZWF0ZSAoY29u c3QgVFBNSV9ESF9PQkpFQ1RfdCBwYXJlbnRIYW5kbGUsCisJCSAgY29uc3QgVFBNU19BVVRIX0NP TU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCSAgY29uc3QgVFBNMkJfU0VOU0lUSVZFX0NSRUFURV90 ICppblNlbnNpdGl2ZSwKKwkJICBjb25zdCBUUE0yQl9QVUJMSUNfdCAqaW5QdWJsaWMsCisJCSAg Y29uc3QgVFBNMkJfREFUQV90ICpvdXRzaWRlSW5mbywKKwkJICBjb25zdCBUUE1MX1BDUl9TRUxF Q1RJT05fdCAqY3JlYXRpb25QQ1IsCisJCSAgVFBNMkJfUFJJVkFURV90ICpvdXRQcml2YXRlLAor CQkgIFRQTTJCX1BVQkxJQ190ICpvdXRQdWJsaWMsCisJCSAgVFBNMkJfQ1JFQVRJT05fREFUQV90 ICpjcmVhdGlvbkRhdGEsCisJCSAgVFBNMkJfRElHRVNUX3QgKmNyZWF0aW9uSGFzaCwKKwkJICBU UE1UX1RLX0NSRUFUSU9OX3QgKmNyZWF0aW9uVGlja2V0LAorCQkgIFRQTVNfQVVUSF9SRVNQT05T RV90ICphdXRoUmVzcG9uc2UpCit7CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBz dHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBvdXQ7CisgIFRQTTJCX1BVQkxJQ190IG91dFB1YmxpY1Rt cDsKKyAgVFBNMkJfUFJJVkFURV90IG91dFByaXZhdGVUbXA7CisgIFRQTTJCX0NSRUFUSU9OX0RB VEFfdCBjcmVhdGlvbkRhdGFUbXA7CisgIFRQTTJCX0RJR0VTVF90IGNyZWF0aW9uSGFzaFRtcDsK KyAgVFBNVF9US19DUkVBVElPTl90IGNyZWF0aW9uVGlja2V0VG1wOworICBUUE1TX0FVVEhfUkVT UE9OU0VfdCBhdXRoUmVzcG9uc2VUbXA7CisgIFRQTUlfU1RfQ09NTUFORF9UQUdfdCB0YWcgPSBh dXRoQ29tbWFuZCA/IFRQTV9TVF9TRVNTSU9OUzpUUE1fU1RfTk9fU0VTU0lPTlM7CisgIFRQTV9S Q190IHJlc3BvbnNlQ29kZTsKKyAgVFBNX1JDX3QgcmM7CisgIGdydWJfdWludDMyX3QgcGFyYW1l dGVyU2l6ZTsKKworICBpZiAoaW5TZW5zaXRpdmUgPT0gTlVMTCB8fCBpblB1YmxpYyA9PSBOVUxM IHx8IG91dHNpZGVJbmZvID09IE5VTEwgfHwKKyAgICAgIGNyZWF0aW9uUENSID09IE5VTEwpCisg ICAgcmV0dXJuIFRQTV9SQ19WQUxVRTsKKworICBpZiAob3V0UHJpdmF0ZSA9PSBOVUxMKQorICAg IG91dFByaXZhdGUgPSAmb3V0UHJpdmF0ZVRtcDsKKyAgaWYgKG91dFB1YmxpYyA9PSBOVUxMKQor ICAgIG91dFB1YmxpYyA9ICZvdXRQdWJsaWNUbXA7CisgIGlmIChjcmVhdGlvbkRhdGEgPT0gTlVM TCkKKyAgICBjcmVhdGlvbkRhdGEgPSAmY3JlYXRpb25EYXRhVG1wOworICBpZiAoY3JlYXRpb25I YXNoID09IE5VTEwpCisgICAgY3JlYXRpb25IYXNoID0gJmNyZWF0aW9uSGFzaFRtcDsKKyAgaWYg KGNyZWF0aW9uVGlja2V0ID09IE5VTEwpCisgICAgY3JlYXRpb25UaWNrZXQgPSAmY3JlYXRpb25U aWNrZXRUbXA7CisgIGlmIChhdXRoUmVzcG9uc2UgPT0gTlVMTCkKKyAgICBhdXRoUmVzcG9uc2Ug PSAmYXV0aFJlc3BvbnNlVG1wOworCisgIGdydWJfbWVtc2V0IChvdXRQcml2YXRlLCAwLCBzaXpl b2YgKCpvdXRQcml2YXRlKSk7CisgIGdydWJfbWVtc2V0IChvdXRQdWJsaWMsIDAsIHNpemVvZiAo Km91dFB1YmxpYykpOworICBncnViX21lbXNldCAoY3JlYXRpb25EYXRhLCAwLCBzaXplb2YgKCpj cmVhdGlvbkRhdGEpKTsKKyAgZ3J1Yl9tZW1zZXQgKGNyZWF0aW9uSGFzaCwgMCwgc2l6ZW9mICgq Y3JlYXRpb25IYXNoKSk7CisgIGdydWJfbWVtc2V0IChjcmVhdGlvblRpY2tldCwgMCwgc2l6ZW9m ICgqY3JlYXRpb25UaWNrZXQpKTsKKyAgZ3J1Yl9tZW1zZXQgKGF1dGhSZXNwb25zZSwgMCwgc2l6 ZW9mICgqYXV0aFJlc3BvbnNlKSk7CisKKyAgLyogTWFyc2hhbCAqLworICBncnViX3RwbTJfYnVm ZmVyX2luaXQgKCZpbik7CisgIGdydWJfdHBtMl9idWZmZXJfcGFja191MzIgKCZpbiwgcGFyZW50 SGFuZGxlKTsKKyAgaWYgKGF1dGhDb21tYW5kICE9IE5VTEwpCisgICAgZ3J1Yl9Uc3MyX01VX1RQ TVNfQVVUSF9DT01NQU5EX01hcnNoYWwgKCZpbiwgYXV0aENvbW1hbmQpOworICBncnViX1RzczJf TVVfVFBNMkJfU0VOU0lUSVZFX0NSRUFURV9NYXJzaGFsICgmaW4sIGluU2Vuc2l0aXZlKTsKKyAg Z3J1Yl9Uc3MyX01VX1RQTTJCX1BVQkxJQ19NYXJzaGFsICgmaW4sIGluUHVibGljKTsKKyAgZ3J1 Yl9Uc3MyX01VX1RQTTJCX01hcnNoYWwgKCZpbiwgb3V0c2lkZUluZm8tPnNpemUsIG91dHNpZGVJ bmZvLT5idWZmZXIpOworICBncnViX1RzczJfTVVfVFBNTF9QQ1JfU0VMRUNUSU9OX01hcnNoYWwg KCZpbiwgY3JlYXRpb25QQ1IpOworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBN X1JDX0ZBSUxVUkU7CisKKyAgLyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAo Jm91dCk7CisgIHJjID0gdHBtMl9zdWJtaXRfY29tbWFuZCAodGFnLCBUUE1fQ0NfQ3JlYXRlLCAm cmVzcG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisg ICAgcmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAg IHJldHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGlmICh0YWcgPT0g VFBNX1NUX1NFU1NJT05TKQorICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMyICgmb3V0LCAm cGFyYW1ldGVyU2l6ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9QUklWQVRFX1VubWFyc2hhbCAo Jm91dCwgb3V0UHJpdmF0ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9QVUJMSUNfVW5tYXJzaGFs ICgmb3V0LCBvdXRQdWJsaWMpOworICBncnViX1RzczJfTVVfVFBNMkJfQ1JFQVRJT05fREFUQV9V bm1hcnNoYWwgKCZvdXQsIGNyZWF0aW9uRGF0YSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9ESUdF U1RfVW5tYXJzaGFsICgmb3V0LCBjcmVhdGlvbkhhc2gpOworICBncnViX1RzczJfTVVfVFBNVF9U S19DUkVBVElPTl9Vbm1hcnNoYWwgKCZvdXQsIGNyZWF0aW9uVGlja2V0KTsKKyAgaWYgKHRhZyA9 PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9SRVNQT05TRV9V bm1hcnNoYWwoJm91dCwgYXV0aFJlc3BvbnNlKTsKKyAgaWYgKG91dC5lcnJvciAhPSAwKQorICAg IHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICByZXR1cm4gVFBNX1JDX1NVQ0NFU1M7Cit9CisK K1RQTV9SQ190CitncnViX3RwbTJfZXZpY3Rjb250cm9sIChjb25zdCBUUE1JX1JIX1BST1ZJU0lP Tl90IGF1dGgsCisJCQljb25zdCBUUE1JX0RIX09CSkVDVF90IG9iamVjdEhhbmRsZSwKKwkJCWNv bnN0IFRQTVNfQVVUSF9DT01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQkJY29uc3QgVFBNSV9ESF9Q RVJTSVNURU5UX3QgcGVyc2lzdGVudEhhbmRsZSwKKwkJCVRQTVNfQVVUSF9SRVNQT05TRV90ICph dXRoUmVzcG9uc2UpCit7CisgIHN0cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3Qg Z3J1Yl90cG0yX2J1ZmZlciBvdXQ7CisgIFRQTVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25z ZVRtcDsKKyAgVFBNSV9TVF9DT01NQU5EX1RBR190IHRhZyA9IGF1dGhDb21tYW5kID8gVFBNX1NU X1NFU1NJT05TIDogVFBNX1NUX05PX1NFU1NJT05TOworICBUUE1fUkNfdCByZXNwb25zZUNvZGU7 CisgIFRQTV9SQ190IHJjOworICBncnViX3VpbnQzMl90IHBhcmFtZXRlclNpemU7CisKKyAgaWYg KGF1dGhSZXNwb25zZSA9PSBOVUxMKQorICAgIGF1dGhSZXNwb25zZSA9ICZhdXRoUmVzcG9uc2VU bXA7CisKKyAgZ3J1Yl9tZW1zZXQgKGF1dGhSZXNwb25zZSwgMCwgc2l6ZW9mICgqYXV0aFJlc3Bv bnNlKSk7CisKKyAgLyogTWFyc2hhbCAqLworICBncnViX3RwbTJfYnVmZmVyX2luaXQgKCZpbik7 CisgIGdydWJfdHBtMl9idWZmZXJfcGFja191MzIgKCZpbiwgYXV0aCk7CisgIGdydWJfdHBtMl9i dWZmZXJfcGFja191MzIgKCZpbiwgb2JqZWN0SGFuZGxlKTsKKyAgaWYgKGF1dGhDb21tYW5kICE9 IE5VTEwpCisgICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9DT01NQU5EX01hcnNoYWwgKCZpbiwg YXV0aENvbW1hbmQpOworICBncnViX3RwbTJfYnVmZmVyX3BhY2tfdTMyICgmaW4sIHBlcnNpc3Rl bnRIYW5kbGUpOworICBpZiAoaW4uZXJyb3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxV UkU7CisKKyAgLyogU3VibWl0ICovCisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJm91dCk7Cisg IHJjID0gdHBtMl9zdWJtaXRfY29tbWFuZCAodGFnLCBUUE1fQ0NfRXZpY3RDb250cm9sLCAmcmVz cG9uc2VDb2RlLCAmaW4sICZvdXQpOworICBpZiAocmMgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAg cmV0dXJuIHJjOworICBpZiAocmVzcG9uc2VDb2RlICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJl dHVybiByZXNwb25zZUNvZGU7CisKKyAgLyogVW5tYXJzaGFsICovCisgIGlmICh0YWcgPT0gVFBN X1NUX1NFU1NJT05TKQorICAgIHsKKyAgICAgIGdydWJfdHBtMl9idWZmZXJfdW5wYWNrX3UzMiAo Jm91dCwgJnBhcmFtZXRlclNpemUpOworICAgICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9SRVNQ T05TRV9Vbm1hcnNoYWwoJm91dCwgYXV0aFJlc3BvbnNlKTsKKyAgICB9CisgIGlmIChvdXQuZXJy b3IgIT0gMCkKKyAgICByZXR1cm4gVFBNX1JDX0ZBSUxVUkU7CisKKyAgcmV0dXJuIFRQTV9SQ19T VUNDRVNTOworfQorCitUUE1fUkNfdAorZ3J1Yl90cG0yX2hhc2ggKGNvbnN0IFRQTVNfQVVUSF9D T01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQljb25zdCBUUE0yQl9NQVhfQlVGRkVSX3QgKmRhdGEs CisJCWNvbnN0IFRQTUlfQUxHX0hBU0hfdCBoYXNoQWxnLAorCQljb25zdCBUUE1JX1JIX0hJRVJB UkNIWV90IGhpZXJhcmNoeSwKKwkJVFBNMkJfRElHRVNUX3QgKm91dEhhc2gsCisJCVRQTVRfVEtf SEFTSENIRUNLX3QgKnZhbGlkYXRpb24sCisJCVRQTVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVz cG9uc2UpCit7CisgIFRQTV9SQ190IHJjOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBpbjsK KyAgc3RydWN0IGdydWJfdHBtMl9idWZmZXIgb3V0OworICBUUE1TX0FVVEhfUkVTUE9OU0VfdCBh dXRoUmVzcG9uc2VUbXA7CisgIFRQTTJCX0RJR0VTVF90IG91dEhhc2hUbXA7CisgIFRQTVRfVEtf SEFTSENIRUNLX3QgdmFsaWRhdGlvblRtcDsKKyAgVFBNSV9TVF9DT01NQU5EX1RBR190IHRhZyA9 IGF1dGhDb21tYW5kID8gVFBNX1NUX1NFU1NJT05TIDogVFBNX1NUX05PX1NFU1NJT05TOworICBU UE1fUkNfdCByZXNwb25zZUNvZGU7CisgIGdydWJfdWludDMyX3QgcGFyYW1fc2l6ZTsKKworICBp ZiAoaGFzaEFsZyA9PSBUUE1fQUxHX05VTEwpCisgICAgcmV0dXJuIFRQTV9SQ19WQUxVRTsKKwor ICBpZiAob3V0SGFzaCA9PSBOVUxMKQorICAgIG91dEhhc2ggPSAmb3V0SGFzaFRtcDsKKyAgaWYg KHZhbGlkYXRpb24gPT0gTlVMTCkKKyAgICB2YWxpZGF0aW9uID0gJnZhbGlkYXRpb25UbXA7Cisg IGlmIChhdXRoUmVzcG9uc2UgPT0gTlVMTCkKKyAgICBhdXRoUmVzcG9uc2UgPSAmYXV0aFJlc3Bv bnNlVG1wOworCisgIGdydWJfbWVtc2V0IChvdXRIYXNoLCAwLCBzaXplb2YgKCpvdXRIYXNoKSk7 CisgIGdydWJfbWVtc2V0ICh2YWxpZGF0aW9uLCAwLCBzaXplb2YgKCp2YWxpZGF0aW9uKSk7Cisg IGdydWJfbWVtc2V0IChhdXRoUmVzcG9uc2UsIDAsIHNpemVvZiAoKmF1dGhSZXNwb25zZSkpOwor CisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmaW4pOworICBpZiAo YXV0aENvbW1hbmQgIT0gTlVMTCkKKyAgICBncnViX1RzczJfTVVfVFBNU19BVVRIX0NPTU1BTkRf TWFyc2hhbCAoJmluLCBhdXRoQ29tbWFuZCk7CisgIGlmIChkYXRhICE9IE5VTEwpCisgICAgZ3J1 Yl9Uc3MyX01VX1RQTTJCX01hcnNoYWwgKCZpbiwgZGF0YS0+c2l6ZSwgZGF0YS0+YnVmZmVyKTsK KyAgZWxzZQorICAgIGdydWJfdHBtMl9idWZmZXJfcGFja191MTYgKCZpbiwgMCk7CisgIGdydWJf dHBtMl9idWZmZXJfcGFja191MTYgKCZpbiwgaGFzaEFsZyk7CisgIGdydWJfdHBtMl9idWZmZXJf cGFja191MzIgKCZpbiwgaGllcmFyY2h5KTsKKyAgaWYgKGluLmVycm9yICE9IDApCisgICAgcmV0 dXJuIFRQTV9SQ19GQUlMVVJFOworCisgIC8qIFN1Ym1pdCAqLworICBncnViX3RwbTJfYnVmZmVy X2luaXQgKCZvdXQpOworICByYyA9IHRwbTJfc3VibWl0X2NvbW1hbmQgKHRhZywgVFBNX0NDX0hh c2gsICZyZXNwb25zZUNvZGUsICZpbiwgJm91dCk7CisgIGlmIChyYyAhPSBUUE1fUkNfU1VDQ0VT UykKKyAgICByZXR1cm4gcmM7CisgIGlmIChyZXNwb25zZUNvZGUgIT0gVFBNX1JDX1NVQ0NFU1Mp CisgICAgcmV0dXJuIHJlc3BvbnNlQ29kZTsKKworICAvKiBVbm1hcnNoYWwgKi8KKyAgaWYgKHRh ZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisgICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMyICgm b3V0LCAmcGFyYW1fc2l6ZSk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9ESUdFU1RfVW5tYXJzaGFs ICgmb3V0LCBvdXRIYXNoKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQTVRfVEtfSEFTSENIRUNLX1VubWFy c2hhbCAoJm91dCwgdmFsaWRhdGlvbik7CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQor ICAgIGdydWJfVHNzMl9NVV9UUE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRo UmVzcG9uc2UpOworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlM VVJFOworCisgIHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBt Ml92ZXJpZnlzaWduYXR1cmUgKGNvbnN0IFRQTUlfREhfT0JKRUNUX3Qga2V5SGFuZGxlLAorCQkJ ICAgY29uc3QgVFBNU19BVVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCQkgICBjb25zdCBU UE0yQl9ESUdFU1RfdCAqZGlnZXN0LAorCQkJICAgY29uc3QgVFBNVF9TSUdOQVRVUkVfdCAqc2ln bmF0dXJlLAorCQkJICAgVFBNVF9US19WRVJJRklFRF90ICp2YWxpZGF0aW9uLAorCQkJICAgVFBN U19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSkKK3sKKyAgVFBNX1JDX3QgcmM7CisgIHN0 cnVjdCBncnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBvdXQ7 CisgIFRQTVNfQVVUSF9SRVNQT05TRV90IGF1dGhSZXNwb25zZVRtcDsKKyAgVFBNSV9TVF9DT01N QU5EX1RBR190IHRhZyA9IGF1dGhDb21tYW5kID8gVFBNX1NUX1NFU1NJT05TIDogVFBNX1NUX05P X1NFU1NJT05TOworICBUUE1UX1RLX1ZFUklGSUVEX3QgdmFsaWRhdGlvblRtcDsKKyAgVFBNX1JD X3QgcmVzcG9uc2VDb2RlOworICBncnViX3VpbnQzMl90IHBhcmFtX3NpemU7CisKKyAgaWYgKGRp Z2VzdCA9PSBOVUxMIHx8IHNpZ25hdHVyZSA9PSBOVUxMKQorICAgIHJldHVybiBUUE1fUkNfVkFM VUU7CisKKyAgaWYgKHZhbGlkYXRpb24gPT0gTlVMTCkKKyAgICB2YWxpZGF0aW9uID0gJnZhbGlk YXRpb25UbXA7CisgIGlmIChhdXRoUmVzcG9uc2UgPT0gTlVMTCkKKyAgICBhdXRoUmVzcG9uc2Ug PSAmYXV0aFJlc3BvbnNlVG1wOworCisgIGdydWJfbWVtc2V0ICh2YWxpZGF0aW9uLCAwLCBzaXpl b2YgKCp2YWxpZGF0aW9uKSk7CisgIGdydWJfbWVtc2V0IChhdXRoUmVzcG9uc2UsIDAsIHNpemVv ZiAoKmF1dGhSZXNwb25zZSkpOworCisgIC8qIE1hcnNoYWwgKi8KKyAgZ3J1Yl90cG0yX2J1ZmZl cl9pbml0ICgmaW4pOworICBpZiAoYXV0aENvbW1hbmQgIT0gTlVMTCkKKyAgICBncnViX1RzczJf TVVfVFBNU19BVVRIX0NPTU1BTkRfTWFyc2hhbCAoJmluLCBhdXRoQ29tbWFuZCk7CisgIGdydWJf dHBtMl9idWZmZXJfcGFja191MzIgKCZpbiwga2V5SGFuZGxlKTsKKyAgZ3J1Yl9Uc3MyX01VX1RQ TTJCX01hcnNoYWwgKCZpbiwgZGlnZXN0LT5zaXplLCBkaWdlc3QtPmJ1ZmZlcik7CisgIGdydWJf VHNzMl9NVV9UUE1UX1NJR05BVFVSRV9NYXJzaGFsICgmaW4sIHNpZ25hdHVyZSk7CisgIGlmIChp bi5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICAvKiBTdWJtaXQg Ki8KKyAgZ3J1Yl90cG0yX2J1ZmZlcl9pbml0ICgmb3V0KTsKKyAgcmMgPSB0cG0yX3N1Ym1pdF9j b21tYW5kICh0YWcsIFRQTV9DQ19WZXJpZnlTaWduYXR1cmUsICZyZXNwb25zZUNvZGUsICZpbiwg Jm91dCk7CisgIGlmIChyYyAhPSBUUE1fUkNfU1VDQ0VTUykKKyAgICByZXR1cm4gcmM7CisgIGlm IChyZXNwb25zZUNvZGUgIT0gVFBNX1JDX1NVQ0NFU1MpCisgICAgcmV0dXJuIHJlc3BvbnNlQ29k ZTsKKworICAvKiBVbm1hcnNoYWwgKi8KKyAgaWYgKHRhZyA9PSBUUE1fU1RfU0VTU0lPTlMpCisg ICAgZ3J1Yl90cG0yX2J1ZmZlcl91bnBhY2tfdTMyICgmb3V0LCAmcGFyYW1fc2l6ZSk7CisgIGdy dWJfVHNzMl9NVV9UUE1UX1RLX1ZFUklGSUVEX1VubWFyc2hhbCAoJm91dCwgdmFsaWRhdGlvbik7 CisgIGlmICh0YWcgPT0gVFBNX1NUX1NFU1NJT05TKQorICAgIGdydWJfVHNzMl9NVV9UUE1TX0FV VEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVzcG9uc2UpOworICBpZiAob3V0LmVy cm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOworCisgIHJldHVybiBUUE1fUkNf U1VDQ0VTUzsKK30KKworVFBNX1JDX3QKK2dydWJfdHBtMl9wb2xpY3lhdXRob3JpemUgKGNvbnN0 IFRQTUlfU0hfUE9MSUNZX3QgcG9saWN5U2Vzc2lvbiwKKwkJCSAgIGNvbnN0IFRQTVNfQVVUSF9D T01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQkJICAgY29uc3QgVFBNMkJfRElHRVNUX3QgKmFwcHJv dmVkUG9saWN5LAorCQkJICAgY29uc3QgVFBNMkJfTk9OQ0VfdCAqcG9saWN5UmVmLAorCQkJICAg Y29uc3QgVFBNMkJfTkFNRV90ICprZXlTaWduLAorCQkJICAgY29uc3QgVFBNVF9US19WRVJJRklF RF90ICpjaGVja1RpY2tldCwKKwkJCSAgIFRQTVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVzcG9u c2UpCit7CisgIFRQTV9SQ190IHJjOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBpbjsKKyAg c3RydWN0IGdydWJfdHBtMl9idWZmZXIgb3V0OworICBUUE1TX0FVVEhfUkVTUE9OU0VfdCBhdXRo UmVzcG9uc2VUbXA7CisgIFRQTUlfU1RfQ09NTUFORF9UQUdfdCB0YWcgPSBhdXRoQ29tbWFuZCA/ IFRQTV9TVF9TRVNTSU9OUyA6IFRQTV9TVF9OT19TRVNTSU9OUzsKKyAgVFBNX1JDX3QgcmVzcG9u c2VDb2RlOworICBncnViX3VpbnQzMl90IHBhcmFtX3NpemU7CisKKyAgaWYgKGFwcHJvdmVkUG9s aWN5ID09IE5VTEwgfHwga2V5U2lnbiA9PSBOVUxMIHx8IGNoZWNrVGlja2V0ID09IE5VTEwpCisg ICAgcmV0dXJuIFRQTV9SQ19WQUxVRTsKKworICBpZiAoYXV0aFJlc3BvbnNlID09IE5VTEwpCisg ICAgYXV0aFJlc3BvbnNlID0gJmF1dGhSZXNwb25zZVRtcDsKKworICBncnViX21lbXNldCAoYXV0 aFJlc3BvbnNlLCAwLCBzaXplb2YgKCphdXRoUmVzcG9uc2UpKTsKKworICAvKiBNYXJzaGFsICov CisgIGdydWJfdHBtMl9idWZmZXJfaW5pdCAoJmluKTsKKyAgZ3J1Yl90cG0yX2J1ZmZlcl9wYWNr X3UzMiAoJmluLCBwb2xpY3lTZXNzaW9uKTsKKyAgaWYgKGF1dGhDb21tYW5kICE9IE5VTEwpCisg ICAgZ3J1Yl9Uc3MyX01VX1RQTVNfQVVUSF9DT01NQU5EX01hcnNoYWwgKCZpbiwgYXV0aENvbW1h bmQpOworICBncnViX1RzczJfTVVfVFBNMkJfTWFyc2hhbCAoJmluLCBhcHByb3ZlZFBvbGljeS0+ c2l6ZSwgYXBwcm92ZWRQb2xpY3ktPmJ1ZmZlcik7CisgIGlmIChwb2xpY3lSZWYgIT0gTlVMTCkK KyAgICBncnViX1RzczJfTVVfVFBNMkJfTWFyc2hhbCAoJmluLCBwb2xpY3lSZWYtPnNpemUsIHBv bGljeVJlZi0+YnVmZmVyKTsKKyAgZWxzZQorICAgIGdydWJfdHBtMl9idWZmZXJfcGFja191MTYg KCZpbiwgMCk7CisgIGdydWJfVHNzMl9NVV9UUE0yQl9NYXJzaGFsICgmaW4sIGtleVNpZ24tPnNp emUsIGtleVNpZ24tPm5hbWUpOworICBncnViX1RzczJfTVVfVFBNVF9US19WRVJJRklFRF9NYXJz aGFsICgmaW4sIGNoZWNrVGlja2V0KTsKKyAgaWYgKGluLmVycm9yICE9IDApCisgICAgcmV0dXJu IFRQTV9SQ19GQUlMVVJFOworCisgIC8qIFN1Ym1pdCAqLworICBncnViX3RwbTJfYnVmZmVyX2lu aXQgKCZvdXQpOworICByYyA9IHRwbTJfc3VibWl0X2NvbW1hbmQgKHRhZywgVFBNX0NDX1BvbGlj eUF1dGhvcml6ZSwgJnJlc3BvbnNlQ29kZSwgJmluLCAmb3V0KTsKKyAgaWYgKHJjICE9IFRQTV9S Q19TVUNDRVNTKQorICAgIHJldHVybiByYzsKKyAgaWYgKHJlc3BvbnNlQ29kZSAhPSBUUE1fUkNf U1VDQ0VTUykKKyAgICByZXR1cm4gcmVzcG9uc2VDb2RlOworCisgIC8qIFVubWFyc2hhbCAqLwor ICBpZiAodGFnID09IFRQTV9TVF9TRVNTSU9OUykKKyAgICB7CisgICAgICBncnViX3RwbTJfYnVm ZmVyX3VucGFja191MzIgKCZvdXQsICZwYXJhbV9zaXplKTsKKyAgICAgIGdydWJfVHNzMl9NVV9U UE1TX0FVVEhfUkVTUE9OU0VfVW5tYXJzaGFsICgmb3V0LCBhdXRoUmVzcG9uc2UpOworICAgIH0K KyAgaWYgKG91dC5lcnJvciAhPSAwKQorICAgIHJldHVybiBUUE1fUkNfRkFJTFVSRTsKKworICBy ZXR1cm4gVFBNX1JDX1NVQ0NFU1M7Cit9CisKK1RQTV9SQ190CitncnViX3RwbTJfdGVzdHBhcm1z IChjb25zdCBUUE1UX1BVQkxJQ19QQVJNU190ICpwYXJtcywKKwkJICAgICBjb25zdCBUUE1TX0FV VEhfQ09NTUFORF90ICphdXRoQ29tbWFuZCkKK3sKKyAgVFBNX1JDX3QgcmM7CisgIHN0cnVjdCBn cnViX3RwbTJfYnVmZmVyIGluOworICBzdHJ1Y3QgZ3J1Yl90cG0yX2J1ZmZlciBvdXQ7CisgIFRQ TUlfU1RfQ09NTUFORF9UQUdfdCB0YWcgPSBhdXRoQ29tbWFuZCA/IFRQTV9TVF9TRVNTSU9OUyA6 IFRQTV9TVF9OT19TRVNTSU9OUzsKKyAgVFBNX1JDX3QgcmVzcG9uc2VDb2RlOworCisgIGlmIChw YXJtcyA9PSBOVUxMKQorICAgIHJldHVybiBUUE1fUkNfVkFMVUU7CisKKyAgLyogTWFyc2hhbCAq LworICBncnViX3RwbTJfYnVmZmVyX2luaXQgKCZpbik7CisgIGdydWJfVHNzMl9NVV9UUE1UX1BV QkxJQ19QQVJNU19NYXJzaGFsICgmaW4sIHBhcm1zKTsKKyAgaWYgKGluLmVycm9yICE9IDApCisg ICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJFOworCisgIC8qIFN1Ym1pdCAqLworICBncnViX3RwbTJf YnVmZmVyX2luaXQgKCZvdXQpOworICByYyA9IHRwbTJfc3VibWl0X2NvbW1hbmQgKHRhZywgVFBN X0NDX1Rlc3RQYXJtcywgJnJlc3BvbnNlQ29kZSwgJmluLAorCQkJCSAmb3V0KTsKKyAgaWYgKHJj ICE9IFRQTV9SQ19TVUNDRVNTKQorICAgIHJldHVybiByYzsKKyAgaWYgKHJlc3BvbnNlQ29kZSAh PSBUUE1fUkNfU1VDQ0VTUykKKyAgICByZXR1cm4gcmVzcG9uc2VDb2RlOworCisgIC8qIFVubWFy c2hhbCAqLworICBpZiAob3V0LmVycm9yICE9IDApCisgICAgcmV0dXJuIFRQTV9SQ19GQUlMVVJF OworCisgIHJldHVybiBUUE1fUkNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2dydWItY29yZS9s aWIvdHNzMi90cG0yX2NtZC5oIGIvZ3J1Yi1jb3JlL2xpYi90c3MyL3RwbTJfY21kLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kMzEzY2JhMDAKLS0tIC9kZXYvbnVsbAor KysgYi9ncnViLWNvcmUvbGliL3RzczIvdHBtMl9jbWQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoK KyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChD KSAyMDIyIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAyNCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JV Qi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisj aWZuZGVmIEdSVUJfVFBNMl9DT01NQU5EU19IRUFERVIKKyNkZWZpbmUgR1JVQl9UUE0yX0NPTU1B TkRTX0hFQURFUiAxCisKKyNpbmNsdWRlIDx0c3MyX3N0cnVjdHMuaD4KKworZXh0ZXJuIFRQTV9S Q190CitncnViX3RwbTJfY3JlYXRlcHJpbWFyeSAoY29uc3QgVFBNSV9SSF9ISUVSQVJDSFlfdCBw cmltYXJ5SGFuZGxlLAorCQkJIGNvbnN0IFRQTVNfQVVUSF9DT01NQU5EX3QgKmF1dGhDb21tYW5k LAorCQkJIGNvbnN0IFRQTTJCX1NFTlNJVElWRV9DUkVBVEVfdCAqaW5TZW5zaXRpdmUsCisJCQkg Y29uc3QgVFBNMkJfUFVCTElDX3QgKmluUHVibGljLAorCQkJIGNvbnN0IFRQTTJCX0RBVEFfdCAq b3V0c2lkZUluZm8sCisJCQkgY29uc3QgVFBNTF9QQ1JfU0VMRUNUSU9OX3QgKmNyZWF0aW9uUENS LAorCQkJIFRQTV9IQU5ETEVfdCAqb2JqZWN0SGFuZGxlLAorCQkJIFRQTTJCX1BVQkxJQ190ICpv dXRQdWJsaWMsCisJCQkgVFBNMkJfQ1JFQVRJT05fREFUQV90ICpjcmVhdGlvbkRhdGEsCisJCQkg VFBNMkJfRElHRVNUX3QgKmNyZWF0aW9uSGFzaCwKKwkJCSBUUE1UX1RLX0NSRUFUSU9OX3QgKmNy ZWF0aW9uVGlja2V0LAorCQkJIFRQTTJCX05BTUVfdCAqbmFtZSwKKwkJCSBUUE1TX0FVVEhfUkVT UE9OU0VfdCAqYXV0aFJlc3BvbnNlKTsKKworZXh0ZXJuIFRQTV9SQ190CitncnViX3RwbTJfc3Rh cnRhdXRoc2Vzc2lvbiAoY29uc3QgVFBNSV9ESF9PQkpFQ1RfdCB0cG1LZXksCisJCQkgICAgY29u c3QgVFBNSV9ESF9FTlRJVFlfdCBiaW5kLAorCQkJICAgIGNvbnN0IFRQTVNfQVVUSF9DT01NQU5E X3QgKmF1dGhDb21tYW5kLAorCQkJICAgIGNvbnN0IFRQTTJCX05PTkNFX3QgKm5vbmNlQ2FsbGVy LAorCQkJICAgIGNvbnN0IFRQTTJCX0VOQ1JZUFRFRF9TRUNSRVRfdCAqZW5jcnlwdGVkU2FsdCwK KwkJCSAgICBjb25zdCBUUE1fU0VfdCBzZXNzaW9uVHlwZSwKKwkJCSAgICBjb25zdCBUUE1UX1NZ TV9ERUZfdCAqc3ltbWV0cmljLAorCQkJICAgIGNvbnN0IFRQTUlfQUxHX0hBU0hfdCBhdXRoSGFz aCwKKwkJCSAgICBUUE1JX1NIX0FVVEhfU0VTU0lPTl90ICpzZXNzaW9uSGFuZGxlLAorCQkJICAg IFRQTTJCX05PTkNFX3QgKm5vbmNlVHBtLAorCQkJICAgIFRQTVNfQVVUSF9SRVNQT05TRV90ICph dXRoUmVzcG9uc2UpOworCitleHRlcm4gVFBNX1JDX3QKK2dydWJfdHBtMl9wb2xpY3lwY3IgKGNv bnN0IFRQTUlfU0hfUE9MSUNZX3QgcG9saWN5U2Vzc2lvbiwKKwkJICAgICBjb25zdCBUUE1TX0FV VEhfQ09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJICAgICBjb25zdCBUUE0yQl9ESUdFU1RfdCAq cGNyRGlnZXN0LAorCQkgICAgIGNvbnN0IFRQTUxfUENSX1NFTEVDVElPTl90ICpwY3JzLAorCQkg ICAgIFRQTVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVzcG9uc2UpOworCitleHRlcm4gVFBNX1JD X3QKK2dydWJfdHBtMl9yZWFkcHVibGljIChjb25zdCBUUE1JX0RIX09CSkVDVF90IG9iamVjdEhh bmRsZSwKKwkJICAgICAgY29uc3QgVFBNU19BVVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJ CSAgICAgIFRQTTJCX1BVQkxJQ190ICpvdXRQdWJsaWMpOworCitleHRlcm4gVFBNX1JDX3QKK2dy dWJfdHBtMl9sb2FkIChjb25zdCBUUE1JX0RIX09CSkVDVF90IHBhcmVudF9oYW5kbGUsCisJCWNv bnN0IFRQTVNfQVVUSF9DT01NQU5EX3QgKmF1dGhDb21tYW5kLAorCQljb25zdCBUUE0yQl9QUklW QVRFX3QgKmluUHJpdmF0ZSwKKwkJY29uc3QgVFBNMkJfUFVCTElDX3QgKmluUHVibGljLAorCQlU UE1fSEFORExFX3QgKm9iamVjdEhhbmRsZSwKKwkJVFBNMkJfTkFNRV90ICpuYW1lLAorCQlUUE1T X0FVVEhfUkVTUE9OU0VfdCAqYXV0aFJlc3BvbnNlKTsKKworZXh0ZXJuIFRQTV9SQ190CitncnVi X3RwbTJfbG9hZGV4dGVybmFsIChjb25zdCBUUE1TX0FVVEhfQ09NTUFORF90ICphdXRoQ29tbWFu ZCwKKwkJCWNvbnN0IFRQTTJCX1NFTlNJVElWRV90ICppblByaXZhdGUsCisJCQljb25zdCBUUE0y Ql9QVUJMSUNfdCAqaW5QdWJsaWMsCisJCQljb25zdCBUUE1JX1JIX0hJRVJBUkNIWV90IGhpZXJh cmNoeSwKKwkJCVRQTV9IQU5ETEVfdCAqb2JqZWN0SGFuZGxlLAorCQkJVFBNMkJfTkFNRV90ICpu YW1lLAorCQkJVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSk7CisKK2V4dGVybiBU UE1fUkNfdAorZ3J1Yl90cG0yX3Vuc2VhbCAoY29uc3QgVFBNSV9ESF9PQkpFQ1RfdCBpdGVtX2hh bmRsZSwKKwkJICBjb25zdCBUUE1TX0FVVEhfQ09NTUFORF90ICphdXRoQ29tbWFuZCwKKwkJICBU UE0yQl9TRU5TSVRJVkVfREFUQV90ICpvdXREYXRhLAorCQkgIFRQTVNfQVVUSF9SRVNQT05TRV90 ICphdXRoUmVzcG9uc2UpOworCitleHRlcm4gVFBNX1JDX3QKK2dydWJfdHBtMl9mbHVzaGNvbnRl eHQgKGNvbnN0IFRQTUlfREhfQ09OVEVYVF90IGhhbmRsZSk7CisKK2V4dGVybiBUUE1fUkNfdAor Z3J1Yl90cG0yX3Bjcl9yZWFkIChjb25zdCBUUE1TX0FVVEhfQ09NTUFORF90ICphdXRoQ29tbWFu ZCwKKwkJICAgIGNvbnN0IFRQTUxfUENSX1NFTEVDVElPTl90ICpwY3JTZWxlY3Rpb25JbiwKKwkJ ICAgIGdydWJfdWludDMyX3QgKnBjclVwZGF0ZUNvdW50ZXIsCisJCSAgICBUUE1MX1BDUl9TRUxF Q1RJT05fdCAqcGNyU2VsZWN0aW9uT3V0LAorCQkgICAgVFBNTF9ESUdFU1RfdCAqcGNyVmFsdWVz LAorCQkgICAgVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSk7CisKK2V4dGVybiBU UE1fUkNfdAorZ3J1Yl90cG0yX3BvbGljeWdldGRpZ2VzdCAoY29uc3QgVFBNSV9TSF9QT0xJQ1lf dCBwb2xpY3lTZXNzaW9uLAorCQkJICAgY29uc3QgVFBNU19BVVRIX0NPTU1BTkRfdCAqYXV0aENv bW1hbmQsCisJCQkgICBUUE0yQl9ESUdFU1RfdCAqcG9saWN5RGlnZXN0LAorCQkJICAgVFBNU19B VVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSk7CisKK2V4dGVybiBUUE1fUkNfdAorZ3J1Yl90 cG0yX2NyZWF0ZSAoY29uc3QgVFBNSV9ESF9PQkpFQ1RfdCBwYXJlbnRIYW5kbGUsCisJCSAgY29u c3QgVFBNU19BVVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCSAgY29uc3QgVFBNMkJfU0VO U0lUSVZFX0NSRUFURV90ICppblNlbnNpdGl2ZSwKKwkJICBjb25zdCBUUE0yQl9QVUJMSUNfdCAq aW5QdWJsaWMsCisJCSAgY29uc3QgVFBNMkJfREFUQV90ICpvdXRzaWRlSW5mbywKKwkJICBjb25z dCBUUE1MX1BDUl9TRUxFQ1RJT05fdCAqY3JlYXRpb25QQ1IsCisJCSAgVFBNMkJfUFJJVkFURV90 ICpvdXRQcml2YXRlLAorCQkgIFRQTTJCX1BVQkxJQ190ICpvdXRQdWJsaWMsCisJCSAgVFBNMkJf Q1JFQVRJT05fREFUQV90ICpjcmVhdGlvbkRhdGEsCisJCSAgVFBNMkJfRElHRVNUX3QgKmNyZWF0 aW9uSGFzaCwKKwkJICBUUE1UX1RLX0NSRUFUSU9OX3QgKmNyZWF0aW9uVGlja2V0LAorCQkgIFRQ TVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVzcG9uc2UpOworCitleHRlcm4gVFBNX1JDX3QKK2dy dWJfdHBtMl9ldmljdGNvbnRyb2wgKGNvbnN0IFRQTUlfUkhfUFJPVklTSU9OX3QgYXV0aCwKKwkJ CWNvbnN0IFRQTUlfREhfT0JKRUNUX3Qgb2JqZWN0SGFuZGxlLAorCQkJY29uc3QgVFBNU19BVVRI X0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCQljb25zdCBUUE1JX0RIX1BFUlNJU1RFTlRfdCBw ZXJzaXN0ZW50SGFuZGxlLAorCQkJVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhSZXNwb25zZSk7 CisKK2V4dGVybiBUUE1fUkNfdAorZ3J1Yl90cG0yX2hhc2ggKGNvbnN0IFRQTVNfQVVUSF9DT01N QU5EX3QgKmF1dGhDb21tYW5kLAorCQljb25zdCBUUE0yQl9NQVhfQlVGRkVSX3QgKmRhdGEsCisJ CWNvbnN0IFRQTUlfQUxHX0hBU0hfdCBoYXNoQWxnLAorCQljb25zdCBUUE1JX1JIX0hJRVJBUkNI WV90IGhpZXJhcmNoeSwKKwkJVFBNMkJfRElHRVNUX3QgKm91dEhhc2gsCisJCVRQTVRfVEtfSEFT SENIRUNLX3QgKnZhbGlkYXRpb24sCisJCVRQTVNfQVVUSF9SRVNQT05TRV90ICphdXRoUmVzcG9u c2UpOworCitleHRlcm4gVFBNX1JDX3QKK2dydWJfdHBtMl92ZXJpZnlzaWduYXR1cmUgKGNvbnN0 IFRQTUlfREhfT0JKRUNUX3Qga2V5SGFuZGxlLAorCQkJICAgY29uc3QgVFBNU19BVVRIX0NPTU1B TkRfdCAqYXV0aENvbW1hbmQsCisJCQkgICBjb25zdCBUUE0yQl9ESUdFU1RfdCAqZGlnZXN0LAor CQkJICAgY29uc3QgVFBNVF9TSUdOQVRVUkVfdCAqc2lnbmF0dXJlLAorCQkJICAgVFBNVF9US19W RVJJRklFRF90ICp2YWxpZGF0aW9uLAorCQkJICAgVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhS ZXNwb25zZSk7CisKK2V4dGVybiBUUE1fUkNfdAorZ3J1Yl90cG0yX3BvbGljeWF1dGhvcml6ZSAo Y29uc3QgVFBNSV9TSF9QT0xJQ1lfdCBwb2xpY3lTZXNzaW9uLAorCQkJICAgY29uc3QgVFBNU19B VVRIX0NPTU1BTkRfdCAqYXV0aENvbW1hbmQsCisJCQkgICBjb25zdCBUUE0yQl9ESUdFU1RfdCAq YXBwcm92ZWRQb2xpY3ksCisJCQkgICBjb25zdCBUUE0yQl9OT05DRV90ICpwb2xpY3lSZWYsCisJ CQkgICBjb25zdCBUUE0yQl9OQU1FX3QgKmtleVNpZ24sCisJCQkgICBjb25zdCBUUE1UX1RLX1ZF UklGSUVEX3QgKmNoZWNrVGlja2V0LAorCQkJICAgVFBNU19BVVRIX1JFU1BPTlNFX3QgKmF1dGhS ZXNwb25zZSk7CisKK2V4dGVybiBUUE1fUkNfdAorZ3J1Yl90cG0yX3Rlc3RwYXJtcyAoY29uc3Qg VFBNVF9QVUJMSUNfUEFSTVNfdCAqcGFybXMsCisJCSAgICAgY29uc3QgVFBNU19BVVRIX0NPTU1B TkRfdCAqYXV0aENvbW1hbmQpOworCisjZW5kaWYgLyogISBHUlVCX1RQTTJfQ09NTUFORFNfSEVB REVSICovCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvbGliL3RzczIvdHNzMi5jIGIvZ3J1Yi1jb3Jl L2xpYi90c3MyL3RzczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjQ4 MjUxZTliNAotLS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9saWIvdHNzMi90c3MyLmMKQEAg LTAsMCArMSwyMSBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVy CisgKiAgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor ICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxncnViL2RsLmg+CisKK0dSVUJf TU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKLS0gCjIuNDMuMAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWIt ZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnVi LWRldmVsCg==