From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id yMifC7wL+2FWSQAAgWs5BA (envelope-from ) for ; Wed, 02 Feb 2022 23:54:52 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id wK9pCLwL+2FpeAEAauVa8A (envelope-from ) for ; Wed, 02 Feb 2022 23:54:52 +0100 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 aspmx1.migadu.com (Postfix) with ESMTPS id 9A2C110654 for ; Wed, 2 Feb 2022 23:54:51 +0100 (CET) Received: from localhost ([::1]:34390 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nFOWY-0000im-M2 for larch@yhetil.org; Wed, 02 Feb 2022 17:54:50 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44186) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nFOWH-0000iP-1f for guix-devel@gnu.org; Wed, 02 Feb 2022 17:54:33 -0500 Received: from [2a02:1800:110:4::f00:18] (port=38374 helo=michel.telenet-ops.be) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nFOWC-0003ju-KL for guix-devel@gnu.org; Wed, 02 Feb 2022 17:54:32 -0500 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by michel.telenet-ops.be with bizsmtp id qNuS260084UW6Th06NuSyV; Wed, 02 Feb 2022 23:54:26 +0100 Message-ID: <13f5a4da632de1b432b7a75341f8242c4ca1de2b.camel@telenet.be> Subject: Re: missing patch for texlive-bin (e77412362f) From: Maxime Devos To: zimoun , guix-devel@gnu.org Date: Wed, 02 Feb 2022 23:54:26 +0100 In-Reply-To: <875ypx9kki.fsf@gmail.com> References: <875ypx9kki.fsf@gmail.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-yno3X/TN/X4+8dR4v14i" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1643842467; bh=bLf2MymLC0dslOXxgl+d32EobGShz6V6jrKDIEsEj/g=; h=Subject:From:To:Date:In-Reply-To:References; b=FGWr7GTbwLifmkG50I8azSl8EubQ5kA0r28Jgob9Gb0wfKuoeXCajy7H5L2uLz59X nflSCeZNT1VM9aaIgT5+Fl1DQYglB7d2vG8J0L/Ya3xggvGikfi8/2AP8JgbXEHP6y d26OBPVwt/cBD4Joufmk2EB5xkwPy3h9CY1p61JrUVEuW2a9jKTIcSJ0Oyz9EO6qJT /hC1dgqWN5odGhnOCls4Kd4C3ek99ShVwbnLGPVrbkbJQDPi9nKi4oMHGTZ/sySAIB aVZ+O7KvP3r0n9LjHp2ECM178cPvr6IS60VGLvUvpMknRZJ8QyP/oTTqZXxRa45zw1 VomnQ0YwQshfQ== X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a02:1800:110:4::f00:18 (failed) Received-SPF: pass client-ip=2a02:1800:110:4::f00:18; envelope-from=maximedevos@telenet.be; helo=michel.telenet-ops.be X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1643842491; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=bLf2MymLC0dslOXxgl+d32EobGShz6V6jrKDIEsEj/g=; b=eVQSPdghX/G8ZyMCuFxPfBhdTplppQk4fUkoq/QpRTziVgn1C5DMp16Y83o2WO11O9ES8V 43onJZHO2DmOrQO+sdLR6U9Xy3JVp3O3+kq36gLM2JaWaXOP11G0mdy7yzviQs3/wOTnNB CrO0QSV6XNJrAIwEbrw9ihlHXn3mPs6N3CKt3rAe1qYIdHSFAYpYUBaj2T66tLHQJg7Dt0 C12aI9gV5TGg6PDQplxKD2ID3QaetHY08o2zWDtIE0JFspdVaQeU/0Nx1/GZHtb8tI5rJi a1Skk0PfE2YG3ZP4mGw2lzJIZKxeoNZOpAZmwPNDUGEpQK/NOUK4ztNHJHKI0g== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1643842491; a=rsa-sha256; cv=none; b=tBDwovJMMtQNT6VbVdgo/7c9rrIitmyDLSp7Nxx8xpMwcZsDU3oxP9YBlGufHBApJXukHC WIf1SD3VAtCpdAGh+GWXjz+Wq2v4KXnd+/fbWVKbTSer+QQ0YU/dOv2rF6Mme+OLxO3DeF t2mJFJKNgoNy8cTMxjayBb4WAmLIoaI+o4v2Age7NJcVXW76/MRIxxd4hEXMUkAmpzbX7s 6G+MRCsw9+M5TIch70+wu6HNOLqLmt2BRgPdqUMt3d1uM2WEAk5AHpzLnMZlG1J2vD/p4+ 2m60OONB9QoQ1b/axUFEWa6AGj6yP//eAM2jRuGT8G1O+GN+v2RABL+bLS75PQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=telenet.be header.s=r22 header.b=FGWr7GTb; dmarc=pass (policy=none) header.from=telenet.be; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -5.43 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=telenet.be header.s=r22 header.b=FGWr7GTb; dmarc=pass (policy=none) header.from=telenet.be; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 9A2C110654 X-Spam-Score: -5.43 X-Migadu-Scanner: scn1.migadu.com X-TUID: EIZZoq8hgE5L --=-yno3X/TN/X4+8dR4v14i Content-Type: multipart/mixed; boundary="=-sDPVlGRaG3C8Mq9m/KSy" --=-sDPVlGRaG3C8Mq9m/KSy Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable zimoun schreef op wo 02-02-2022 om 19:42 [+0100]: > =C2=A01. How to get now this patch?=C2=A0 Someone?=C2=A0 Or is it lost fo= rever? I found it! It's in the https://github.com/archlinux/svntogit-packages/ repository (warning: 0.5 GiB). Checkout commit 155510dd18d2f290085f40d2a95a3701db4a224d, then do $ guix download texlive-bin/repos/extra-x86_64/pdftex-poppler0.75.patch /gnu/store/fbvknc65339dnf89aljz8wkbnnms7ydp-pdftex-poppler0.75.patch 1cqpcp7h1qyxyp3wjbpcmx2wgvj9ywpz60hvy280mp9w633yzyg3 ^ this is the expected hash! Greetings, Maxime. --=-sDPVlGRaG3C8Mq9m/KSy Content-Disposition: attachment; filename="pdftex-poppler0.75.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="pdftex-poppler0.75.patch"; charset="UTF-8" Y29tbWl0IDY3MjkwZjcwZDgxNDNiMThmMjRmZmQ2YTE4MjdkZWY5YmRjMjExMDgKQXV0aG9yOiBB a2lyYSBLYWt1dG8gPGtha3V0b0BmdWsua2luZGFpLmFjLmpwPgpEYXRlOiAgIFRodSBEZWMgNiAy MzozMTozMyAyMDE4ICswMDAwCgogICAgc3VwcG9ydCBzeXN0ZW0gcG9wcGxlciAwLjcyLjAKICAg IAogICAgZ2l0LXN2bi1pZDogc3ZuOi8vdHVnLm9yZy90ZXhsaXZlL3RydW5rL0J1aWxkL3NvdXJj ZUA0OTMzNiBjNTcwZjIzZi1lNjA2LTA0MTAtYTg4ZC1iMTMxNmEzMDE3NTEKCgpkaWZmIC0tZ2l0 IGEvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIvcGRmdG9lcGRmLXBvcHBsZXIwLjc1LjAuY2MgYi90ZXhr L3dlYjJjL3BkZnRleGRpci9wZGZ0b2VwZGYtcG9wcGxlcjAuNzUuMC5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjYzMGQzMzY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rl eGsvd2ViMmMvcGRmdGV4ZGlyL3BkZnRvZXBkZi1wb3BwbGVyMC43NS4wLmNjCkBAIC0wLDAgKzEs MTExMyBAQAorLyoKK0NvcHlyaWdodCAxOTk2LTIwMTcgSGFuIFRoZSBUaGFuaCwgPHRoYW5oQHBk ZnRleC5vcmc+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHBkZlRlWC4KKworcGRmVGVYIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor cGRmVGVYIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcKK3dpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyoKK1RoaXMgaXMgYmFzZWQgb24g dGhlIHBhdGNoIHRleGxpdmUtcG9wcGxlci0wLjU5LnBhdGNoIDwyMDE3LTA5LTE5PiBhdAoraHR0 cHM6Ly9naXQuYXJjaGxpbnV4Lm9yZy9zdm50b2dpdC9wYWNrYWdlcy5naXQvcGxhaW4vdGV4bGl2 ZS1iaW4vdHJ1bmsKK2J5IEFyY2ggTGludXguIEEgbGl0dGxlIG1vZGlmaWNhdGlvbnMgYXJlIG1h ZGUgdG8gYXZvaWQgYSBjcmFzaCBmb3IKK3NvbWUga2luZCBvZiBwZGYgaW1hZ2VzLCBzdWNoIGFz IGZpZ3VyZV9taXNzaW5nLnBkZiBpbiBnbnVwbG90LgorVGhlIHBvcHBsZXIgc2hvdWxkIGJlIDAu NzIuMCBvciBuZXdlciB2ZXJzaW9ucy4KK1BPUFBMRVJfVkVSU0lPTiBzaG91bGQgYmUgZGVmaW5l ZC4KKyovCisKKy8qIERvIHRoaXMgZWFybHkgaW4gb3JkZXIgdG8gYXZvaWQgYSBjb25mbGljdCBi ZXR3ZWVuCisgICBNSU5HVzMyIDxycGNuZHIuaD4gZGVmaW5pbmcgJ2Jvb2xlYW4nIGFzICd1bnNp Z25lZCBjaGFyJyBhbmQKKyAgIDxrcGF0aHNlYS90eXBlcy5oPiBkZWZpbmluZyBQYXNjYWwncyBi b29sZWFuIGFzICdpbnQnLgorKi8KKyNpbmNsdWRlIDx3MmMvY29uZmlnLmg+CisjaW5jbHVkZSA8 a3BhdGhzZWEvbGliLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+ CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZkZWYgUE9QUExFUl9WRVJTSU9OCisjaW5j bHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8cG9wcGxlci1jb25maWcuaD4KKyNpbmNsdWRlIDxn b28vR29vU3RyaW5nLmg+CisjaW5jbHVkZSA8Z29vL2dtZW0uaD4KKyNpbmNsdWRlIDxnb28vZ2Zp bGUuaD4KKyNkZWZpbmUgR1N0cmluZyBHb29TdHJpbmcKKyNlbHNlCisjZXJyb3IgUE9QUExFUl9W RVJTSU9OIHNob3VsZCBiZSBkZWZpbmVkLgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisK KyNpbmNsdWRlICJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHJlYW0uaCIKKyNpbmNsdWRlICJBcnJh eS5oIgorI2luY2x1ZGUgIkRpY3QuaCIKKyNpbmNsdWRlICJYUmVmLmgiCisjaW5jbHVkZSAiQ2F0 YWxvZy5oIgorI2luY2x1ZGUgIkxpbmsuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi R2Z4Rm9udC5oIgorI2luY2x1ZGUgIlBERkRvYy5oIgorI2luY2x1ZGUgIkdsb2JhbFBhcmFtcy5o IgorI2luY2x1ZGUgIkVycm9yLmgiCisKKy8vIFRoaXMgZmlsZSBpcyBtb3N0bHkgQyBhbmQgbm90 IHZlcnkgbXVjaCBDKys7IGl0J3MganVzdCB1c2VkIHRvIGludGVyZmFjZQorLy8gdGhlIGZ1bmN0 aW9ucyBvZiB4cGRmLCB3aGljaCBhcmUgd3JpdHRlbiBpbiBDKysuCisKK2V4dGVybiAiQyIgewor I2luY2x1ZGUgPHBkZnRleGRpci9wdGV4bWFjLmg+CisjaW5jbHVkZSA8cGRmdGV4ZGlyL3BkZnRl eC1jb21tb24uaD4KKworLy8gVGhlc2UgZnVuY3Rpb25zIGZyb20gcGRmdGV4LndlYiBnZXRzIGRl Y2xhcmVkIGluIHBkZnRleGNvZXJjZS5oIGluIHRoZQorLy8gdXN1YWwgd2ViMmMgd2F5LCBidXQg d2UgY2Fubm90IGluY2x1ZGUgdGhhdCBmaWxlIGhlcmUgYmVjYXVzZSBDKysKKy8vIGRvZXMgbm90 IGFsbG93IGl0LgorZXh0ZXJuIGludCBnZXRwZGZzdXBwcmVzc3dhcm5pbmdwYWdlZ3JvdXAodm9p ZCk7CitleHRlcm4gaW50ZWdlciBnZXRwZGZzdXBwcmVzc3B0ZXhpbmZvKHZvaWQpOworZXh0ZXJu IGludGVnZXIgenJvdW5kKGRvdWJsZSk7Cit9CisKKy8vIFRoZSBwcmVmaXggIlBURVgiIGZvciB0 aGUgUERGIGtleXMgaXMgc3BlY2lhbCB0byBwZGZUZVg7CisvLyB0aGlzIGhhcyBiZWVuIHJlZ2lz dGVyZWQgd2l0aCBBZG9iZSBieSBIYW5zIEhhZ2VuLgorCisjZGVmaW5lIHBkZmtleXByZWZpeCAi UFRFWCIKKworI2RlZmluZSBNQVNLX1NVUFBSRVNTX1BURVhfRlVMTEJBTk5FUiAweDAxCisjZGVm aW5lIE1BU0tfU1VQUFJFU1NfUFRFWF9GSUxFTkFNRSAgIDB4MDIKKyNkZWZpbmUgTUFTS19TVVBQ UkVTU19QVEVYX1BBR0VOVU1CRVIgMHgwNAorI2RlZmluZSBNQVNLX1NVUFBSRVNTX1BURVhfSU5G T0RJQ1QgICAweDA4CisKKy8vIFdoZW4gY29weWluZyB0aGUgUmVzb3VyY2VzIG9mIHRoZSBzZWxl Y3RlZCBwYWdlLCBhbGwgb2JqZWN0cyBhcmUgY29waWVkCisvLyByZWN1c2l2ZWx5IHRvcC1kb3du LiBJbmRpcmVjdCBvYmplY3RzIGhvd2V2ZXIgYXJlIG5vdCBmZXRjaGVkIGR1cmluZworLy8gY29w eWluZywgYnV0IGdldCBhIG5ldyBvYmplY3QgbnVtYmVyIGZyb20gcGRmVGVYIGFuZCB0aGVuIHdp bGwgYmUKKy8vIGFwcGVuZGVkIGludG8gYSBsaW5rZWQgbGlzdC4gRHVwbGljYXRlcyBhcmUgY2hl Y2tlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZQorLy8gbGlzdCBvZiBpbmRpcmVjdCBvYmplY3RzIGR1 cmluZyBhcHBlbmRpbmcuCisKK2VudW0gSW5PYmpUeXBlIHsKKyAgICBvYmpGb250LAorICAgIG9i akZvbnREZXNjLAorICAgIG9iak90aGVyCit9OworCitzdHJ1Y3QgSW5PYmogeworICAgIFJlZiBy ZWY7ICAgICAgICAgICAgICAgICAgICAvLyByZWYgaW4gb3JpZ2luYWwgUERGCisgICAgSW5PYmpU eXBlIHR5cGU7ICAgICAgICAgICAgIC8vIG9iamVjdCB0eXBlCisgICAgSW5PYmogKm5leHQ7ICAg ICAgICAgICAgICAgIC8vIG5leHQgZW50cnkgaW4gbGlzdCBvZiBpbmRpcmVjdCBvYmplY3RzCisg ICAgaW50IG51bTsgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBvYmplY3QgbnVtYmVyIGluIG91 dHB1dCBQREYKKyAgICBmZF9lbnRyeSAqZmQ7ICAgICAgICAgICAgICAgLy8gcG9pbnRlciB0byAv Rm9udERlc2NyaXB0b3Igb2JqZWN0IHN0cnVjdHVyZQorICAgIGludCBlbmNfb2JqbnVtOyAgICAg ICAgICAgICAvLyBFbmNvZGluZyBmb3Igb2JqRm9udAorICAgIGludCB3cml0dGVuOyAgICAgICAg ICAgICAgICAvLyBoYXMgaXQgYmVlbiB3cml0dGVuIHRvIG91dHB1dCBQREY/Cit9OworCitzdHJ1 Y3QgVXNlZEVuY29kaW5nIHsKKyAgICBpbnQgZW5jX29iam51bTsKKyAgICBHZnhGb250ICpmb250 OworICAgIFVzZWRFbmNvZGluZyAqbmV4dDsKK307CisKK3N0YXRpYyBJbk9iaiAqaW5PYmpMaXN0 Oworc3RhdGljIFVzZWRFbmNvZGluZyAqZW5jb2RpbmdMaXN0Oworc3RhdGljIGJvb2wgaXNJbml0 ID0gZmFsc2U7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYWludGFpbiBsaXN0IG9mIG9wZW4gZW1i ZWRkZWQgUERGIGZpbGVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdHJ1Y3QgUGRmRG9jdW1lbnQgewor ICAgIGNoYXIgKmZpbGVfbmFtZTsKKyAgICBQREZEb2MgKmRvYzsKKyAgICBYUmVmICp4cmVmOwor ICAgIEluT2JqICppbk9iakxpc3Q7CisgICAgaW50IG9jY3VyZW5jZXM7ICAgICAgICAgICAgIC8v IG51bWJlciBvZiByZWZlcmVuY2VzIHRvIHRoZSBkb2N1bWVudDsgdGhlIGRvYyBjYW4gYmUKKyAg ICAvLyBkZWxldGVkIHdoZW4gdGhpcyBpcyBuZWdhdGl2ZQorICAgIFBkZkRvY3VtZW50ICpuZXh0 OworfTsKKworc3RhdGljIFBkZkRvY3VtZW50ICpwZGZEb2N1bWVudHMgPSAwOworCitzdGF0aWMg WFJlZiAqeHJlZiA9IDA7CisKKy8vIFJldHVybnMgcG9pbnRlciB0byBQZGZEb2N1bWVudCByZWNv cmQgZm9yIFBERiBmaWxlLgorLy8gQ3JlYXRlcyBhIG5ldyByZWNvcmQgaWYgaXQgZG9lc24ndCBl eGlzdCB5ZXQuCisvLyB4cmVmIGlzIG1hZGUgY3VycmVudCBmb3IgdGhlIGRvY3VtZW50LgorCitz dGF0aWMgUGRmRG9jdW1lbnQgKmZpbmRfYWRkX2RvY3VtZW50KGNoYXIgKmZpbGVfbmFtZSkKK3sK KyAgICBQZGZEb2N1bWVudCAqcCA9IHBkZkRvY3VtZW50czsKKyAgICB3aGlsZSAocCAmJiBzdHJj bXAocC0+ZmlsZV9uYW1lLCBmaWxlX25hbWUpICE9IDApCisgICAgICAgIHAgPSBwLT5uZXh0Owor ICAgIGlmIChwKSB7CisgICAgICAgIHhyZWYgPSBwLT54cmVmOworICAgICAgICAocC0+b2NjdXJl bmNlcykrKzsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIHAgPSBuZXcgUGRmRG9jdW1l bnQ7CisgICAgcC0+ZmlsZV9uYW1lID0geHN0cmR1cChmaWxlX25hbWUpOworICAgIHAtPnhyZWYg PSB4cmVmID0gMDsKKyAgICBwLT5vY2N1cmVuY2VzID0gMDsKKyAgICBHU3RyaW5nICpkb2NOYW1l ID0gbmV3IEdTdHJpbmcocC0+ZmlsZV9uYW1lKTsKKyAgICBwLT5kb2MgPSBuZXcgUERGRG9jKGRv Y05hbWUpOyAgICAgICAvLyB0YWtlcyBvd25lcnNoaXAgb2YgZG9jTmFtZQorICAgIGlmICghcC0+ ZG9jLT5pc09rKCkgfHwgIXAtPmRvYy0+b2tUb1ByaW50KCkpIHsKKyAgICAgICAgcGRmdGV4X2Zh aWwoInhwZGY6IHJlYWRpbmcgUERGIGltYWdlIGZhaWxlZCIpOworICAgIH0KKyAgICBwLT5pbk9i akxpc3QgPSAwOworICAgIHAtPm5leHQgPSBwZGZEb2N1bWVudHM7CisgICAgcGRmRG9jdW1lbnRz ID0gcDsKKyAgICByZXR1cm4gcDsKK30KKworLy8gRGVhbGxvY2F0ZSBhIFBkZkRvY3VtZW50IHdp dGggYWxsIGl0cyByZXNvdXJjZXMKKworc3RhdGljIHZvaWQgZGVsZXRlX2RvY3VtZW50KFBkZkRv Y3VtZW50ICogcGRmX2RvYykKK3sKKyAgICBQZGZEb2N1bWVudCAqKnAgPSAmcGRmRG9jdW1lbnRz OworICAgIHdoaWxlICgqcCAmJiAqcCAhPSBwZGZfZG9jKQorICAgICAgICBwID0gJigoKnApLT5u ZXh0KTsKKyAgICAvLyBzaG91bGQgbm90IGhhcHBlbjoKKyAgICBpZiAoISpwKQorICAgICAgICBy ZXR1cm47CisgICAgLy8gdW5saW5rIGZyb20gbGlzdAorICAgICpwID0gcGRmX2RvYy0+bmV4dDsK KyAgICAvLyBmcmVlIHBkZl9kb2MncyByZXNvdXJjZXMKKyAgICBJbk9iaiAqciwgKm47CisgICAg Zm9yIChyID0gcGRmX2RvYy0+aW5PYmpMaXN0OyByICE9IDA7IHIgPSBuKSB7CisgICAgICAgIG4g PSByLT5uZXh0OworICAgICAgICBkZWxldGUgcjsKKyAgICB9CisgICAgeHJlZiA9IHBkZl9kb2Mt PnhyZWY7CisgICAgZGVsZXRlIHBkZl9kb2MtPmRvYzsKKyAgICB4ZnJlZShwZGZfZG9jLT5maWxl X25hbWUpOworICAgIGRlbGV0ZSBwZGZfZG9jOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0 aWMgaW50IGFkZEVuY29kaW5nKEdmeEZvbnQgKiBnZm9udCkKK3sKKyAgICBVc2VkRW5jb2Rpbmcg Km47CisgICAgbiA9IG5ldyBVc2VkRW5jb2Rpbmc7CisgICAgbi0+bmV4dCA9IGVuY29kaW5nTGlz dDsKKyAgICBlbmNvZGluZ0xpc3QgPSBuOworICAgIG4tPmZvbnQgPSBnZm9udDsKKyAgICBuLT5l bmNfb2JqbnVtID0gcGRmbmV3b2JqbnVtKCk7CisgICAgcmV0dXJuIG4tPmVuY19vYmpudW07Cit9 CisKKyNkZWZpbmUgYWRkRm9udChyZWYsIGZkLCBlbmNfb2JqbnVtKSBcCisgICAgICAgIGFkZElu T2JqKG9iakZvbnQsIHJlZiwgZmQsIGVuY19vYmpudW0pCisKKy8vIGFkZEZvbnREZXNjIGlzIG9u bHkgdXNlZCB0byBhdm9pZCB3cml0aW5nIHRoZSBvcmlnaW5hbCBGb250RGVzY3JpcHRvcgorLy8g ZnJvbSB0aGUgUERGIGZpbGUuCisKKyNkZWZpbmUgYWRkRm9udERlc2MocmVmLCBmZCkgXAorICAg ICAgICBhZGRJbk9iaihvYmpGb250RGVzYywgcmVmLCBmZCwgMCkKKworI2RlZmluZSBhZGRPdGhl cihyZWYpIFwKKyAgICAgICAgYWRkSW5PYmoob2JqT3RoZXIsIHJlZiwgMCwgMCkKKworc3RhdGlj IGludCBhZGRJbk9iaihJbk9ialR5cGUgdHlwZSwgUmVmIHJlZiwgZmRfZW50cnkgKiBmZCwgaW50 IGUpCit7CisgICAgSW5PYmogKnAsICpxLCAqbiA9IG5ldyBJbk9iajsKKyAgICBpZiAocmVmLm51 bSA9PSAwKQorICAgICAgICBwZGZ0ZXhfZmFpbCgiUERGIGluY2x1c2lvbjogaW52YWxpZCByZWZl cmVuY2UiKTsKKyAgICBuLT5yZWYgPSByZWY7CisgICAgbi0+dHlwZSA9IHR5cGU7CisgICAgbi0+ bmV4dCA9IDA7CisgICAgbi0+ZmQgPSBmZDsKKyAgICBuLT5lbmNfb2JqbnVtID0gZTsKKyAgICBu LT53cml0dGVuID0gMDsKKyAgICBpZiAoaW5PYmpMaXN0ID09IDApCisgICAgICAgIGluT2JqTGlz dCA9IG47CisgICAgZWxzZSB7CisgICAgICAgIGZvciAocCA9IGluT2JqTGlzdDsgcCAhPSAwOyBw ID0gcC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHAtPnJlZi5udW0gPT0gcmVmLm51bSAmJiBw LT5yZWYuZ2VuID09IHJlZi5nZW4pIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbjsKKyAgICAg ICAgICAgICAgICByZXR1cm4gcC0+bnVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcSA9 IHA7CisgICAgICAgIH0KKyAgICAgICAgLy8gaXQgaXMgaW1wb3J0YW50IHRvIGFkZCBuZXcgb2Jq ZWN0cyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LAorICAgICAgICAvLyBiZWNhdXNlIG5ldyBvYmpl Y3RzIGFyZSBiZWluZyBhZGRlZCB3aGlsZSB0aGUgbGlzdCBpcyBiZWluZworICAgICAgICAvLyB3 cml0dGVuIG91dC4KKyAgICAgICAgcS0+bmV4dCA9IG47CisgICAgfQorICAgIGlmICh0eXBlID09 IG9iakZvbnREZXNjKQorICAgICAgICBuLT5udW0gPSBnZXRfZmRfb2JqbnVtKGZkKTsKKyAgICBl bHNlCisgICAgICAgIG4tPm51bSA9IHBkZm5ld29iam51bSgpOworICAgIHJldHVybiBuLT5udW07 Cit9CisKKyNpZiAwIC8qIHVudXNld2QgKi8KK3N0YXRpYyBpbnQgZ2V0TmV3T2JqZWN0TnVtYmVy KFJlZiByZWYpCit7CisgICAgSW5PYmogKnA7CisgICAgaWYgKGluT2JqTGlzdCA9PSAwKSB7Cisg ICAgICAgIHBkZnRleF9mYWlsKCJObyBvYmplY3RzIGNvcGllZCB5ZXQiKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBmb3IgKHAgPSBpbk9iakxpc3Q7IHAgIT0gMDsgcCA9IHAtPm5leHQpIHsKKyAg ICAgICAgICAgIGlmIChwLT5yZWYubnVtID09IHJlZi5udW0gJiYgcC0+cmVmLmdlbiA9PSByZWYu Z2VuKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHAtPm51bTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBwZGZ0ZXhfZmFpbCgiT2JqZWN0IG5vdCB5ZXQgY29waWVkOiAlaSAl aSIsIHJlZi5udW0sIHJlZi5nZW4pOworICAgIH0KKyNpZmRlZiBfTVNDX1ZFUgorICAgIC8qIE5l dmVyIHJlYWNoZWQsIGJ1dCB3aXRob3V0IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgZm9yIHBk ZnRleF9mYWlsKCkKKyAgICAgICBNU1ZDIDUuMCByZXF1aXJlcyBhbiBpbnQgcmV0dXJuIHZhbHVl LiAgKi8KKyAgICByZXR1cm4gLTYwMDAwOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZv aWQgY29weU9iamVjdChPYmplY3QgKik7CisKK3N0YXRpYyB2b2lkIGNvcHlOYW1lKGNoYXIgKnMp Cit7CisgICAgcGRmX3B1dHMoIi8iKTsKKyAgICBmb3IgKDsgKnMgIT0gMDsgcysrKSB7CisgICAg ICAgIGlmIChpc2RpZ2l0KCpzKSB8fCBpc3VwcGVyKCpzKSB8fCBpc2xvd2VyKCpzKSB8fCAqcyA9 PSAnXycgfHwKKyAgICAgICAgICAgICpzID09ICcuJyB8fCAqcyA9PSAnLScgfHwgKnMgPT0gJysn KQorICAgICAgICAgICAgcGRmb3V0KCpzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGRm X3ByaW50ZigiIyUuMlgiLCAqcyAmIDB4RkYpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29w eURpY3RFbnRyeShPYmplY3QgKiBvYmosIGludCBpKQoreworICAgIE9iamVjdCBvYmoxOworICAg IGNvcHlOYW1lKChjaGFyICopb2JqLT5kaWN0R2V0S2V5KGkpKTsKKyAgICBwZGZfcHV0cygiICIp OworICAgIG9iajEgPSBvYmotPmRpY3RHZXRWYWxORihpKS5jb3B5KCk7CisgICAgY29weU9iamVj dCgmb2JqMSk7CisgICAgcGRmX3B1dHMoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlEaWN0 KE9iamVjdCAqIG9iaikKK3sKKyAgICBpbnQgaSwgbDsKKyAgICBpZiAoIW9iai0+aXNEaWN0KCkp CisgICAgICAgIHBkZnRleF9mYWlsKCJQREYgaW5jbHVzaW9uOiBpbnZhbGlkIGRpY3QgdHlwZSA8 JXM+IiwKKyAgICAgICAgICAgICAgICAgICAgb2JqLT5nZXRUeXBlTmFtZSgpKTsKKyAgICBmb3Ig KGkgPSAwLCBsID0gb2JqLT5kaWN0R2V0TGVuZ3RoKCk7IGkgPCBsOyArK2kpCisgICAgICAgIGNv cHlEaWN0RW50cnkob2JqLCBpKTsKK30KKworc3RhdGljIHZvaWQgY29weUZvbnREaWN0KE9iamVj dCAqIG9iaiwgSW5PYmogKiByKQoreworICAgIGludCBpLCBsOworICAgIGNoYXIgKmtleTsKKyAg ICBpZiAoIW9iai0+aXNEaWN0KCkpCisgICAgICAgIHBkZnRleF9mYWlsKCJQREYgaW5jbHVzaW9u OiBpbnZhbGlkIGRpY3QgdHlwZSA8JXM+IiwKKyAgICAgICAgICAgICAgICAgICAgb2JqLT5nZXRU eXBlTmFtZSgpKTsKKyAgICBwZGZfcHV0cygiPDxcbiIpOworICAgIGFzc2VydChyLT50eXBlID09 IG9iakZvbnQpOyAvLyBGb250RGVzY3JpcHRvciBpcyBpbiBmZF90cmVlCisgICAgZm9yIChpID0g MCwgbCA9IG9iai0+ZGljdEdldExlbmd0aCgpOyBpIDwgbDsgKytpKSB7CisgICAgICAgIGtleSA9 IChjaGFyICopb2JqLT5kaWN0R2V0S2V5KGkpOworICAgICAgICBpZiAoc3RybmNtcCgiRm9udERl c2NyaXB0b3IiLCBrZXksIHN0cmxlbigiRm9udERlc2NyaXB0b3IiKSkgPT0gMAorICAgICAgICAg ICAgfHwgc3RybmNtcCgiQmFzZUZvbnQiLCBrZXksIHN0cmxlbigiQmFzZUZvbnQiKSkgPT0gMAor ICAgICAgICAgICAgfHwgc3RybmNtcCgiRW5jb2RpbmciLCBrZXksIHN0cmxlbigiRW5jb2Rpbmci KSkgPT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgLy8gc2tpcCBvcmlnaW5h bCB2YWx1ZXMKKyAgICAgICAgY29weURpY3RFbnRyeShvYmosIGkpOworICAgIH0KKyAgICAvLyB3 cml0ZSBuZXcgRm9udERlc2NyaXB0b3IsIEJhc2VGb250LCBhbmQgRW5jb2RpbmcKKyAgICBwZGZf cHJpbnRmKCIvRm9udERlc2NyaXB0b3IgJWQgMCBSXG4iLCBnZXRfZmRfb2JqbnVtKHItPmZkKSk7 CisgICAgcGRmX3ByaW50ZigiL0Jhc2VGb250ICVkIDAgUlxuIiwgZ2V0X2ZuX29iam51bShyLT5m ZCkpOworICAgIHBkZl9wcmludGYoIi9FbmNvZGluZyAlZCAwIFJcbiIsIHItPmVuY19vYmpudW0p OworICAgIHBkZl9wdXRzKCI+PiIpOworfQorCitzdGF0aWMgdm9pZCBjb3B5U3RyZWFtKFN0cmVh bSAqIHN0cikKK3sKKyAgICBpbnQgYywgYzIgPSAwOworICAgIHN0ci0+cmVzZXQoKTsKKyAgICB3 aGlsZSAoKGMgPSBzdHItPmdldENoYXIoKSkgIT0gRU9GKSB7CisgICAgICAgIHBkZm91dChjKTsK KyAgICAgICAgYzIgPSBjOworICAgIH0KKyAgICBwZGZsYXN0Ynl0ZSA9IGMyOworfQorCitzdGF0 aWMgdm9pZCBjb3B5UHJvY1NldChPYmplY3QgKiBvYmopCit7CisgICAgaW50IGksIGw7CisgICAg T2JqZWN0IHByb2NzZXQ7CisgICAgaWYgKCFvYmotPmlzQXJyYXkoKSkKKyAgICAgICAgcGRmdGV4 X2ZhaWwoIlBERiBpbmNsdXNpb246IGludmFsaWQgUHJvY1NldCBhcnJheSB0eXBlIDwlcz4iLAor ICAgICAgICAgICAgICAgICAgICBvYmotPmdldFR5cGVOYW1lKCkpOworICAgIHBkZl9wdXRzKCIv UHJvY1NldCBbICIpOworICAgIGZvciAoaSA9IDAsIGwgPSBvYmotPmFycmF5R2V0TGVuZ3RoKCk7 IGkgPCBsOyArK2kpIHsKKyAgICAgICAgcHJvY3NldCA9IG9iai0+YXJyYXlHZXRORihpKS5jb3B5 KCk7CisgICAgICAgIGlmICghcHJvY3NldC5pc05hbWUoKSkKKyAgICAgICAgICAgIHBkZnRleF9m YWlsKCJQREYgaW5jbHVzaW9uOiBpbnZhbGlkIFByb2NTZXQgZW50cnkgdHlwZSA8JXM+IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHByb2NzZXQuZ2V0VHlwZU5hbWUoKSk7CisgICAgICAgIGNv cHlOYW1lKChjaGFyICopcHJvY3NldC5nZXROYW1lKCkpOworICAgICAgICBwZGZfcHV0cygiICIp OworICAgIH0KKyAgICBwZGZfcHV0cygiXVxuIik7Cit9CisKKyNkZWZpbmUgUkVQTEFDRV9UWVBF MUMgdHJ1ZQorCitzdGF0aWMgYm9vbCBlbWJlZGRhYmxlRm9udChPYmplY3QgKiBmb250ZGVzYykK K3sKKyAgICBPYmplY3QgZm9udGZpbGUsIGZmc3VidHlwZTsKKworICAgIGlmICghZm9udGRlc2Mt PmlzRGljdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9udGZpbGUgPSBmb250ZGVz Yy0+ZGljdExvb2t1cCgiRm9udEZpbGUiKTsKKyAgICBpZiAoZm9udGZpbGUuaXNTdHJlYW0oKSkK KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFJFUExBQ0VfVFlQRTFDKSB7CisgICAgICAg IGZvbnRmaWxlID0gZm9udGRlc2MtPmRpY3RMb29rdXAoIkZvbnRGaWxlMyIpOworICAgICAgICBp ZiAoIWZvbnRmaWxlLmlzU3RyZWFtKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgIGZmc3VidHlwZSA9IGZvbnRmaWxlLnN0cmVhbUdldERpY3QoKS0+bG9va3VwKCJTdWJ0eXBl Iik7CisgICAgICAgIHJldHVybiBmZnN1YnR5cGUuaXNOYW1lKCkgJiYgIXN0cmNtcChmZnN1YnR5 cGUuZ2V0TmFtZSgpLCAiVHlwZTFDIik7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor c3RhdGljIHZvaWQgY29weUZvbnQoY2hhciAqdGFnLCBPYmplY3QgKiBmb250UmVmKQoreworICAg IE9iamVjdCBmb250ZGljdCwgc3VidHlwZSwgYmFzZWZvbnQsIGZvbnRkZXNjUmVmLCBmb250ZGVz YywgY2hhcnNldCwKKyAgICAgICAgc3RlbVY7CisgICAgR2Z4Rm9udCAqZ2ZvbnQ7CisgICAgZmRf ZW50cnkgKmZkOworICAgIGZtX2VudHJ5ICpmb250bWFwOworICAgIC8vIENoZWNrIHdoZXRoZXIg dGhlIGZvbnQgaGFzIGFscmVhZHkgYmVlbiBlbWJlZGRlZCBiZWZvcmUgYW5hbHlzaW5nIGl0Lgor ICAgIEluT2JqICpwOworICAgIFJlZiByZWYgPSBmb250UmVmLT5nZXRSZWYoKTsKKyAgICBmb3Ig KHAgPSBpbk9iakxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIGlmIChwLT5yZWYubnVt ID09IHJlZi5udW0gJiYgcC0+cmVmLmdlbiA9PSByZWYuZ2VuKSB7CisgICAgICAgICAgICBjb3B5 TmFtZSh0YWcpOworICAgICAgICAgICAgcGRmX3ByaW50ZigiICVkIDAgUiAiLCBwLT5udW0pOwor ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIC8vIE9ubHkgaGFuZGxl IGluY2x1ZGVkIFR5cGUxIChhbmQgVHlwZTFDKSBmb250czsgYW55dGhpbmcgZWxzZSB3aWxsIGJl IGNvcGllZC4KKyAgICAvLyBUeXBlMUMgZm9udHMgYXJlIHJlcGxhY2VkIGJ5IFR5cGUxIGZvbnRz LCBpZiBSRVBMQUNFX1RZUEUxQyBpcyB0cnVlLgorICAgIGZvbnRkaWN0ID0gZm9udFJlZi0+ZmV0 Y2goeHJlZik7CisgICAgZm9udGRlc2MgPSBPYmplY3Qob2JqTnVsbCk7CisgICAgaWYgKGZvbnRk aWN0LmlzRGljdCgpKSB7CisgICAgICAgIHN1YnR5cGUgPSBmb250ZGljdC5kaWN0TG9va3VwKCJT dWJ0eXBlIik7CisgICAgICAgIGJhc2Vmb250ID0gZm9udGRpY3QuZGljdExvb2t1cCgiQmFzZUZv bnQiKTsKKyAgICAgICAgZm9udGRlc2NSZWYgPSBmb250ZGljdC5kaWN0TG9va3VwTkYoIkZvbnRE ZXNjcmlwdG9yIikuY29weSgpOworICAgICAgICBpZiAoZm9udGRlc2NSZWYuaXNSZWYoKSkgewor ICAgICAgICAgICAgZm9udGRlc2MgPSBmb250ZGVzY1JlZi5mZXRjaCh4cmVmKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBpZiAoIWZpeGVkaW5jbHVzaW9uY29weWZvbnQgJiYgZm9udGRpY3QuaXNE aWN0KCkKKyAgICAgICAgJiYgc3VidHlwZS5pc05hbWUoKQorICAgICAgICAmJiAhc3RyY21wKHN1 YnR5cGUuZ2V0TmFtZSgpLCAiVHlwZTEiKQorICAgICAgICAmJiBiYXNlZm9udC5pc05hbWUoKQor ICAgICAgICAmJiBmb250ZGVzY1JlZi5pc1JlZigpCisgICAgICAgICYmIGZvbnRkZXNjLmlzRGlj dCgpCisgICAgICAgICYmIGVtYmVkZGFibGVGb250KCZmb250ZGVzYykKKyAgICAgICAgJiYgKGZv bnRtYXAgPSBsb29rdXBfZm9udG1hcCgoY2hhciAqKWJhc2Vmb250LmdldE5hbWUoKSkpICE9IE5V TEwpIHsKKyAgICAgICAgLy8gcm91bmQgL1N0ZW1WIHZhbHVlLCBzaW5jZSB0aGUgUERGIGlucHV0 IGlzIGEgZmxvYXQKKyAgICAgICAgLy8gKHNlZSBGb250IERlc2NyaXB0b3JzIGluIFBERiByZWZl cmVuY2UpLCBidXQgd2Ugb25seSBzdG9yZSBhbgorICAgICAgICAvLyBpbnRlZ2VyLCBzaW5jZSB3 ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgc3RydWN0LgorICAgICAgICBzdGVtViA9IGZvbnRk ZXNjLmRpY3RMb29rdXAoIlN0ZW1WIik7CisgICAgICAgIGZkID0gZXBkZl9jcmVhdGVfZm9udGRl c2NyaXB0b3IoZm9udG1hcCwgenJvdW5kKHN0ZW1WLmdldE51bSgpKSk7CisgICAgICAgIGNoYXJz ZXQgPSBmb250ZGVzYy5kaWN0TG9va3VwKCJDaGFyU2V0Iik7CisgICAgICAgIGlmICghY2hhcnNl dC5pc051bGwoKSAmJgorICAgICAgICAgICAgY2hhcnNldC5pc1N0cmluZygpICYmIGlzX3N1YnNl dGFibGUoZm9udG1hcCkpCisgICAgICAgICAgICBlcGRmX21hcmtfZ2x5cGhzKGZkLCAoY2hhciAq KWNoYXJzZXQuZ2V0U3RyaW5nKCktPmNfc3RyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg ICBlbWJlZF93aG9sZV9mb250KGZkKTsKKyAgICAgICAgYWRkRm9udERlc2MoZm9udGRlc2NSZWYu Z2V0UmVmKCksIGZkKTsKKyAgICAgICAgY29weU5hbWUodGFnKTsKKyAgICAgICAgZ2ZvbnQgPSBH ZnhGb250OjptYWtlRm9udCh4cmVmLCB0YWcsIGZvbnRSZWYtPmdldFJlZigpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRkaWN0LmdldERpY3QoKSk7CisgICAgICAgIHBk Zl9wcmludGYoIiAlZCAwIFIgIiwgYWRkRm9udChmb250UmVmLT5nZXRSZWYoKSwgZmQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbmNvZGluZyhnZm9udCkpKTsK KyAgICB9IGVsc2UgeworICAgICAgICBjb3B5TmFtZSh0YWcpOworICAgICAgICBwZGZfcHV0cygi ICIpOworICAgICAgICBjb3B5T2JqZWN0KGZvbnRSZWYpOworICAgIH0KK30KKworc3RhdGljIHZv aWQgY29weUZvbnRSZXNvdXJjZXMoT2JqZWN0ICogb2JqKQoreworICAgIE9iamVjdCBmb250UmVm OworICAgIGludCBpLCBsOworICAgIGlmICghb2JqLT5pc0RpY3QoKSkKKyAgICAgICAgcGRmdGV4 X2ZhaWwoIlBERiBpbmNsdXNpb246IGludmFsaWQgZm9udCByZXNvdXJjZXMgZGljdCB0eXBlIDwl cz4iLAorICAgICAgICAgICAgICAgICAgICBvYmotPmdldFR5cGVOYW1lKCkpOworICAgIHBkZl9w dXRzKCIvRm9udCA8PCAiKTsKKyAgICBmb3IgKGkgPSAwLCBsID0gb2JqLT5kaWN0R2V0TGVuZ3Ro KCk7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgZm9udFJlZiA9IG9iai0+ZGljdEdldFZhbE5GKGkp LmNvcHkoKTsKKyAgICAgICAgaWYgKGZvbnRSZWYuaXNSZWYoKSkKKyAgICAgICAgICAgIGNvcHlG b250KChjaGFyICopb2JqLT5kaWN0R2V0S2V5KGkpLCAmZm9udFJlZik7CisgICAgICAgIGVsc2Ug aWYgKGZvbnRSZWYuaXNEaWN0KCkpIHsgICAvLyBzb21lIHByb2dyYW1zIGdlbmVyYXRlIHBkZiB3 aXRoIGVtYmVkZGVkIGZvbnQgb2JqZWN0CisgICAgICAgICAgICBjb3B5TmFtZSgoY2hhciAqKW9i ai0+ZGljdEdldEtleShpKSk7CisgICAgICAgICAgICBwZGZfcHV0cygiICIpOworICAgICAgICAg ICAgY29weU9iamVjdCgmZm9udFJlZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgcGRmdGV4X2ZhaWwoIlBERiBpbmNsdXNpb246IGludmFsaWQgZm9udCBpbiByZWZlcmVu Y2UgdHlwZSA8JXM+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRSZWYuZ2V0VHlwZU5h bWUoKSk7CisgICAgfQorICAgIHBkZl9wdXRzKCI+PlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNv cHlPdGhlclJlc291cmNlcyhPYmplY3QgKiBvYmosIGNoYXIgKmtleSkKK3sKKyAgICAvLyBjb3Bp ZXMgYWxsIG90aGVyIHJlc291cmNlcyAod3JpdGVfZXBkZiBoYW5kbGVzIEZvbnRzIGFuZCBQcm9j U2V0cyksCisKKyAgICAvLyBpZiBTdWJ0eXBlIGlzIHByZXNlbnQsIGl0IG11c3QgYmUgYSBuYW1l CisgICAgaWYgKHN0cmNtcCgiU3VidHlwZSIsIGtleSkgPT0gMCkgeworICAgICAgICBpZiAoIW9i ai0+aXNOYW1lKCkpIHsKKyAgICAgICAgICAgIHBkZnRleF93YXJuKCJQREYgaW5jbHVzaW9uOiBT dWJ0eXBlIGluIFJlc291cmNlcyBkaWN0IGlzIG5vdCBhIG5hbWUiCisgICAgICAgICAgICAgICAg ICAgICAgICAiIChrZXkgJyVzJywgdHlwZSA8JXM+KTsgaWdub3JlZC4iLAorICAgICAgICAgICAg ICAgICAgICAgICAga2V5LCBvYmotPmdldFR5cGVOYW1lKCkpOworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghb2JqLT5pc0RpY3QoKSkgeworICAgICAgICAv L0ZJWE1FOiBXcml0ZSB0aGUgbWVzc2FnZSBvbmx5IHRvIHRoZSBsb2cgZmlsZQorICAgICAgICBw ZGZ0ZXhfd2FybigiUERGIGluY2x1c2lvbjogaW52YWxpZCBvdGhlciByZXNvdXJjZSB3aGljaCBp cyBubyBkaWN0IgorICAgICAgICAgICAgICAgICAgICAiIChrZXkgJyVzJywgdHlwZSA8JXM+KTsg aWdub3JlZC4iLAorICAgICAgICAgICAgICAgICAgICBrZXksIG9iai0+Z2V0VHlwZU5hbWUoKSk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29weU5hbWUoa2V5KTsKKyAgICBwZGZfcHV0 cygiICIpOworICAgIGNvcHlPYmplY3Qob2JqKTsKK30KKworLy8gRnVuY3Rpb24gb252ZXJ0cyBk b3VibGUgdG8gc3RyaW5nOyB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlIG51bWJlcnMKKy8vIGFy ZSBOT1QgY29udmVydGVkIHRvIHNjaWVudGlmaWMgbm90YXRpb24uCisvLyBuIG11c3QgYmUgYSBu dW1iZXIgb3IgcmVhbCBjb25mb3JtaW5nIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBsaW1pdHMKKy8v IG9mIFBERiBhcyBzcGVjaWZpZWQgaW4gYXBwZW5kaXggQy4xIG9mIHRoZSBQREYgUmVmLgorLy8g VGhlc2UgYXJlOgorLy8gbWF4aW11bSB2YWx1ZSBvZiBpbnRzIGlzICsyXjMyCisvLyBtYXhpbXVt IHZhbHVlIG9mIHJlYWxzIGlzICsyXjE1CisvLyBzbWFsbGVzIHZhbHVlcyBvZiByZWFscyBpcyAx LygyXjE2KQorCitzdGF0aWMgY2hhciAqY29udmVydE51bVRvUERGKGRvdWJsZSBuKQoreworICAg IHN0YXRpYyBjb25zdCBpbnQgcHJlY2lzaW9uID0gNjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGZh Y3QgPSAoaW50KSAxRTY7ICAvLyBtdXN0IGJlIDEwXnByZWNpc2lvbgorICAgIHN0YXRpYyBjb25z dCBkb3VibGUgZXBzaWxvbiA9IDAuNUUtNjsgICAgICAgLy8gMmVwc2lsb24gbXVzdCBiZSAxMF4t cHJlY2lzaW9uCisgICAgc3RhdGljIGNoYXIgYnVmWzY0XTsKKyAgICAvLyBoYW5kbGUgdmVyeSBz bWFsbCB2YWx1ZXM6IHJldHVybiAwCisgICAgaWYgKGZhYnMobikgPCBlcHNpbG9uKSB7CisgICAg ICAgIGJ1ZlswXSA9ICcwJzsKKyAgICAgICAgYnVmWzFdID0gJ1wwJzsKKyAgICB9IGVsc2Ugewor ICAgICAgICBjaGFyIGludHNbNjRdOworICAgICAgICBpbnQgYmluZGV4ID0gMCwgc2luZGV4ID0g MDsKKyAgICAgICAgaW50IGl2YWwsIGZ2YWw7CisgICAgICAgIC8vIGhhbmRsZSB0aGUgc2lnbiBw YXJ0IGlmIG4gaXMgbmVnYXRpdmUKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBi dWZbYmluZGV4KytdID0gJy0nOworICAgICAgICAgICAgbiA9IC1uOworICAgICAgICB9CisgICAg ICAgIG4gKz0gZXBzaWxvbjsgICAgICAgICAgIC8vIGZvciByb3VuZGluZworICAgICAgICAvLyBo YW5kbGUgdGhlIGludGVnZXIgcGFydCwgc2ltcGx5IHdpdGggc3ByaW50ZgorICAgICAgICBpdmFs ID0gKGludCkgZmxvb3Iobik7CisgICAgICAgIG4gLT0gaXZhbDsKKyAgICAgICAgc3ByaW50Zihp bnRzLCAiJWQiLCBpdmFsKTsKKyAgICAgICAgd2hpbGUgKGludHNbc2luZGV4XSAhPSAwKQorICAg ICAgICAgICAgYnVmW2JpbmRleCsrXSA9IGludHNbc2luZGV4KytdOworICAgICAgICAvLyBoYW5k bGUgdGhlIGZyYWN0aW9uYWwgcGFydCB1cCB0byAncHJlY2lzaW9uJyBkaWdpdHMKKyAgICAgICAg ZnZhbCA9IChpbnQpIGZsb29yKG4gKiBmYWN0KTsKKyAgICAgICAgaWYgKGZ2YWwpIHsKKyAgICAg ICAgICAgIC8vIHNldCBhIGRvdAorICAgICAgICAgICAgYnVmW2JpbmRleCsrXSA9ICcuJzsKKyAg ICAgICAgICAgIHNpbmRleCA9IGJpbmRleCArIHByZWNpc2lvbjsKKyAgICAgICAgICAgIGJ1Zltz aW5kZXgtLV0gPSAnXDAnOworICAgICAgICAgICAgLy8gZmlsbCB1cCB0cmFpbGluZyB6ZXJvcyB3 aXRoIHRoZSBzdHJpbmcgdGVybWluYXRvciBOVUxMCisgICAgICAgICAgICB3aGlsZSAoKChmdmFs ICUgMTApID09IDApICYmIChzaW5kZXggPj0gYmluZGV4KSkgeworICAgICAgICAgICAgICAgIGJ1 ZltzaW5kZXgtLV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGZ2YWwgLz0gMTA7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICAvLyBmaWxsIHVwIHRoZSBmcmFjdGlvbmFsIHBhcnQgYmFjayB0 byBmcm9udAorICAgICAgICAgICAgd2hpbGUgKHNpbmRleCA+PSBiaW5kZXgpIHsKKyAgICAgICAg ICAgICAgICBidWZbc2luZGV4LS1dID0gKGZ2YWwgJSAxMCkgKyAnMCc7CisgICAgICAgICAgICAg ICAgZnZhbCAvPSAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICBidWZbYmluZGV4KytdID0gMDsKKyAgICB9CisgICAgcmV0dXJuIChjaGFyICopIGJ1ZjsKK30K Kworc3RhdGljIHZvaWQgY29weU9iamVjdChPYmplY3QgKiBvYmopCit7CisgICAgT2JqZWN0IG9i ajE7CisgICAgaW50IGksIGwsIGM7CisgICAgUmVmIHJlZjsKKyAgICBjaGFyICpwOworICAgIEdT dHJpbmcgKnM7CisgICAgaWYgKG9iai0+aXNCb29sKCkpIHsKKyAgICAgICAgcGRmX3ByaW50Zigi JXMiLCBvYmotPmdldEJvb2woKT8gInRydWUiIDogImZhbHNlIik7CisgICAgfSBlbHNlIGlmIChv YmotPmlzSW50KCkpIHsKKyAgICAgICAgcGRmX3ByaW50ZigiJWkiLCBvYmotPmdldEludCgpKTsK KyAgICB9IGVsc2UgaWYgKG9iai0+aXNSZWFsKCkpIHsKKyAgICAgICAgcGRmX3ByaW50ZigiJXMi LCBjb252ZXJ0TnVtVG9QREYob2JqLT5nZXRSZWFsKCkpKTsKKyAgICB9IGVsc2UgaWYgKG9iai0+ aXNOdW0oKSkgeworICAgICAgICBwZGZfcHJpbnRmKCIlcyIsIGNvbnZlcnROdW1Ub1BERihvYmot PmdldE51bSgpKSk7CisgICAgfSBlbHNlIGlmIChvYmotPmlzU3RyaW5nKCkpIHsKKyAgICAgICAg cyA9IChHb29TdHJpbmcgKilvYmotPmdldFN0cmluZygpOworICAgICAgICBwID0gKGNoYXIgKilz LT5jX3N0cigpOworICAgICAgICBsID0gcy0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIGlmIChzdHJs ZW4ocCkgPT0gKHVuc2lnbmVkIGludCkgbCkgeworICAgICAgICAgICAgcGRmX3B1dHMoIigiKTsK KyAgICAgICAgICAgIGZvciAoOyAqcCAhPSAwOyBwKyspIHsKKyAgICAgICAgICAgICAgICBjID0g KHVuc2lnbmVkIGNoYXIpICpwOworICAgICAgICAgICAgICAgIGlmIChjID09ICcoJyB8fCBjID09 ICcpJyB8fCBjID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAgIHBkZl9wcmludGYoIlxcJWMi LCBjKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjIDwgMHgyMCB8fCBjID4gMHg3RikKKyAg ICAgICAgICAgICAgICAgICAgcGRmX3ByaW50ZigiXFwlMDNvIiwgYyk7CisgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwZGZvdXQoYyk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBwZGZfcHV0cygiKSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg cGRmX3B1dHMoIjwiKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAg ICAgICAgICAgICAgICBjID0gcy0+Z2V0Q2hhcihpKSAmIDB4RkY7CisgICAgICAgICAgICAgICAg cGRmX3ByaW50ZigiJS4yeCIsIGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGRmX3B1 dHMoIj4iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAob2JqLT5pc05hbWUoKSkgeworICAg ICAgICBjb3B5TmFtZSgoY2hhciAqKW9iai0+Z2V0TmFtZSgpKTsKKyAgICB9IGVsc2UgaWYgKG9i ai0+aXNOdWxsKCkpIHsKKyAgICAgICAgcGRmX3B1dHMoIm51bGwiKTsKKyAgICB9IGVsc2UgaWYg KG9iai0+aXNBcnJheSgpKSB7CisgICAgICAgIHBkZl9wdXRzKCJbIik7CisgICAgICAgIGZvciAo aSA9IDAsIGwgPSBvYmotPmFycmF5R2V0TGVuZ3RoKCk7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg ICAgIG9iajEgPSBvYmotPmFycmF5R2V0TkYoaSkuY29weSgpOworICAgICAgICAgICAgaWYgKCFv YmoxLmlzTmFtZSgpKQorICAgICAgICAgICAgICAgIHBkZl9wdXRzKCIgIik7CisgICAgICAgICAg ICBjb3B5T2JqZWN0KCZvYmoxKTsKKyAgICAgICAgfQorICAgICAgICBwZGZfcHV0cygiXSIpOwor ICAgIH0gZWxzZSBpZiAob2JqLT5pc0RpY3QoKSkgeworICAgICAgICBwZGZfcHV0cygiPDxcbiIp OworICAgICAgICBjb3B5RGljdChvYmopOworICAgICAgICBwZGZfcHV0cygiPj4iKTsKKyAgICB9 IGVsc2UgaWYgKG9iai0+aXNTdHJlYW0oKSkgeworICAgICAgICBwZGZfcHV0cygiPDxcbiIpOwor ICAgICAgICBjb3B5RGljdChvYmotPmdldFN0cmVhbSgpLT5nZXREaWN0T2JqZWN0KCkpOworICAg ICAgICBwZGZfcHV0cygiPj5cbiIpOworICAgICAgICBwZGZfcHV0cygic3RyZWFtXG4iKTsKKyAg ICAgICAgY29weVN0cmVhbShvYmotPmdldFN0cmVhbSgpLT5nZXRVbmRlY29kZWRTdHJlYW0oKSk7 CisgICAgICAgIHBkZl9wdXRzKCJcbmVuZHN0cmVhbSIpOworICAgIH0gZWxzZSBpZiAob2JqLT5p c1JlZigpKSB7CisgICAgICAgIHJlZiA9IG9iai0+Z2V0UmVmKCk7CisgICAgICAgIGlmIChyZWYu bnVtID09IDApIHsKKyAgICAgICAgICAgIHBkZnRleF9mYWlsCisgICAgICAgICAgICAgICAgKCJQ REYgaW5jbHVzaW9uOiByZWZlcmVuY2UgdG8gaW52YWxpZCBvYmplY3QiCisgICAgICAgICAgICAg ICAgICIgKGlzIHRoZSBpbmNsdWRlZCBwZGYgYnJva2VuPykiKTsKKyAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICBwZGZfcHJpbnRmKCIlZCAwIFIiLCBhZGRPdGhlcihyZWYpKTsKKyAgICB9IGVs c2UgeworICAgICAgICBwZGZ0ZXhfZmFpbCgiUERGIGluY2x1c2lvbjogdHlwZSA8JXM+IGNhbm5v dCBiZSBjb3BpZWQiLAorICAgICAgICAgICAgICAgICAgICBvYmotPmdldFR5cGVOYW1lKCkpOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgd3JpdGVSZWZzKCkKK3sKKyAgICBJbk9iaiAqcjsKKyAg ICBmb3IgKHIgPSBpbk9iakxpc3Q7IHIgIT0gMDsgciA9IHItPm5leHQpIHsKKyAgICAgICAgaWYg KCFyLT53cml0dGVuKSB7CisgICAgICAgICAgICByLT53cml0dGVuID0gMTsKKyAgICAgICAgICAg IE9iamVjdCBvYmoxID0geHJlZi0+ZmV0Y2goci0+cmVmLm51bSwgci0+cmVmLmdlbik7CisgICAg ICAgICAgICBpZiAoci0+dHlwZSA9PSBvYmpGb250KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0 KCFvYmoxLmlzU3RyZWFtKCkpOworICAgICAgICAgICAgICAgIHBkZmJlZ2lub2JqKHItPm51bSwg Mik7ICAgICAgICAgLy8gXHBkZm9iamNvbXByZXNzbGV2ZWwgPSAyIGlzIGZvciB0aGlzCisgICAg ICAgICAgICAgICAgY29weUZvbnREaWN0KCZvYmoxLCByKTsKKyAgICAgICAgICAgICAgICBwZGZf cHV0cygiXG4iKTsKKyAgICAgICAgICAgICAgICBwZGZlbmRvYmooKTsKKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoci0+dHlwZSAhPSBvYmpGb250RGVzYykgeyAgICAgICAgLy8gL0ZvbnREZXNjcmlw dG9yIGlzIHdyaXR0ZW4gdmlhIHdyaXRlX2ZvbnRkZXNjcmlwdG9yKCkKKyAgICAgICAgICAgICAg ICBpZiAob2JqMS5pc1N0cmVhbSgpKQorICAgICAgICAgICAgICAgICAgICBwZGZiZWdpbm9iaihy LT5udW0sIDApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGRm YmVnaW5vYmooci0+bnVtLCAyKTsgICAgIC8vIFxwZGZvYmpjb21wcmVzc2xldmVsID0gMiBpcyBm b3IgdGhpcworICAgICAgICAgICAgICAgIGNvcHlPYmplY3QoJm9iajEpOworICAgICAgICAgICAg ICAgIHBkZl9wdXRzKCJcbiIpOworICAgICAgICAgICAgICAgIHBkZmVuZG9iaigpOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZUVuY29kaW5n cygpCit7CisgICAgVXNlZEVuY29kaW5nICpyLCAqbjsKKyAgICBjaGFyICpnbHlwaE5hbWVzWzI1 Nl0sICpzOworICAgIGludCBpOworICAgIGZvciAociA9IGVuY29kaW5nTGlzdDsgciAhPSAwOyBy ID0gci0+bmV4dCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg ICAgICAgIGlmIChyLT5mb250LT5pc0NJREZvbnQoKSkgeworICAgICAgICAgICAgICAgIHBkZnRl eF9mYWlsCisgICAgICAgICAgICAgICAgICAgICgiUERGIGluY2x1c2lvbjogQ0lEIGZvbnRzIGFy ZSBub3Qgc3VwcG9ydGVkIgorICAgICAgICAgICAgICAgICAgICAgIiAodHJ5IHRvIGRpc2FibGUg Zm9udCByZXBsYWNlbWVudCB0byBmaXggdGhpcykiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgocyA9IChjaGFyICopKChHZng4Qml0Rm9udCAqKSByLT5mb250KS0+Z2V0Q2hhck5h bWUoaSkpICE9IDApCisgICAgICAgICAgICAgICAgZ2x5cGhOYW1lc1tpXSA9IHM7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2x5cGhOYW1lc1tpXSA9IG5vdGRlZjsKKyAgICAg ICAgfQorICAgICAgICBlcGRmX3dyaXRlX2VuYyhnbHlwaE5hbWVzLCByLT5lbmNfb2JqbnVtKTsK KyAgICB9CisgICAgZm9yIChyID0gZW5jb2RpbmdMaXN0OyByICE9IDA7IHIgPSBuKSB7CisgICAg ICAgIG4gPSByLT5uZXh0OworI2lmZGVmIFBPUFBMRVJfVkVSU0lPTgorICAgICAgICByLT5mb250 LT5kZWNSZWZDbnQoKTsKKyNlbHNlCisjZXJyb3IgUE9QUExFUl9WRVJTSU9OIHNob3VsZCBiZSBk ZWZpbmVkLgorI2VuZGlmCisgICAgICAgIGRlbGV0ZSByOworICAgIH0KK30KKworLy8gZ2V0IHRo ZSBwYWdlYm94IGFjY29yZGluZyB0byB0aGUgcGFnZWJveF9zcGVjCitzdGF0aWMgY29uc3QgUERG UmVjdGFuZ2xlICpnZXRfcGFnZWJveChQYWdlICogcGFnZSwgaW50IHBhZ2Vib3hfc3BlYykKK3sK KyAgICBpZiAocGFnZWJveF9zcGVjID09IHBkZmJveHNwZWNtZWRpYSkKKyAgICAgICAgcmV0dXJu IHBhZ2UtPmdldE1lZGlhQm94KCk7CisgICAgZWxzZSBpZiAocGFnZWJveF9zcGVjID09IHBkZmJv eHNwZWNjcm9wKQorICAgICAgICByZXR1cm4gcGFnZS0+Z2V0Q3JvcEJveCgpOworICAgIGVsc2Ug aWYgKHBhZ2Vib3hfc3BlYyA9PSBwZGZib3hzcGVjYmxlZWQpCisgICAgICAgIHJldHVybiBwYWdl LT5nZXRCbGVlZEJveCgpOworICAgIGVsc2UgaWYgKHBhZ2Vib3hfc3BlYyA9PSBwZGZib3hzcGVj dHJpbSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmdldFRyaW1Cb3goKTsKKyAgICBlbHNlIGlmIChw YWdlYm94X3NwZWMgPT0gcGRmYm94c3BlY2FydCkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmdldEFy dEJveCgpOworICAgIGVsc2UKKyAgICAgICAgcGRmdGV4X2ZhaWwoIlBERiBpbmNsdXNpb246IHVu a25vd24gdmFsdWUgb2YgcGFnZWJveCBzcGVjICglaSkiLAorICAgICAgICAgICAgICAgICAgICAo aW50KSBwYWdlYm94X3NwZWMpOworICAgIHJldHVybiBwYWdlLT5nZXRNZWRpYUJveCgpOyAvLyB0 byBtYWtlIHRoZSBjb21waWxlciBoYXBweQorfQorCisKKy8vIFJlYWRzIHZhcmlvdXMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIFBERiBhbmQgc2V0cyBpdCB1cCBmb3IgbGF0ZXIgaW5jbHVzaW9uLgor Ly8gVGhpcyB3aWxsIGZhaWwgaWYgdGhlIFBERiB2ZXJzaW9uIG9mIHRoZSBQREYgaXMgaGlnaGVy IHRoYW4KKy8vIG1pbm9yX3BkZl92ZXJzaW9uX3dhbnRlZCBvciBwYWdlX25hbWUgaXMgZ2l2ZW4g YW5kIGNhbiBub3QgYmUgZm91bmQuCisvLyBJdCBtYWtlcyBubyBzZW5zZSB0byBnaXZlIHBhZ2Vf bmFtZSBfYW5kXyBwYWdlX251bS4KKy8vIFJldHVybnMgdGhlIHBhZ2UgbnVtYmVyLgorCitpbnQK K3JlYWRfcGRmX2luZm8oY2hhciAqaW1hZ2VfbmFtZSwgY2hhciAqcGFnZV9uYW1lLCBpbnQgcGFn ZV9udW0sCisgICAgICAgICAgICAgIGludCBwYWdlYm94X3NwZWMsIGludCBtaW5vcl9wZGZfdmVy c2lvbl93YW50ZWQsCisgICAgICAgICAgICAgIGludCBwZGZfaW5jbHVzaW9uX2Vycm9ybGV2ZWwp Cit7CisgICAgUGRmRG9jdW1lbnQgKnBkZl9kb2M7CisgICAgUGFnZSAqcGFnZTsKKyAgICBjb25z dCBQREZSZWN0YW5nbGUgKnBhZ2Vib3g7CisjaWZkZWYgUE9QUExFUl9WRVJTSU9OCisgICAgaW50 IHBkZl9tYWpvcl92ZXJzaW9uX2ZvdW5kLCBwZGZfbWlub3JfdmVyc2lvbl9mb3VuZDsKKyNlbHNl CisjZXJyb3IgUE9QUExFUl9WRVJTSU9OIHNob3VsZCBiZSBkZWZpbmVkLgorI2VuZGlmCisgICAg Ly8gaW5pdGlhbGl6ZQorICAgIGlmICghaXNJbml0KSB7CisgICAgICAgIGdsb2JhbFBhcmFtcyA9 IG5ldyBHbG9iYWxQYXJhbXMoKTsKKyAgICAgICAgZ2xvYmFsUGFyYW1zLT5zZXRFcnJRdWlldChm YWxzZSk7CisgICAgICAgIGlzSW5pdCA9IHRydWU7CisgICAgfQorICAgIC8vIG9wZW4gUERGIGZp bGUKKyAgICBwZGZfZG9jID0gZmluZF9hZGRfZG9jdW1lbnQoaW1hZ2VfbmFtZSk7CisgICAgZXBk Zl9kb2MgPSAodm9pZCAqKSBwZGZfZG9jOworCisgICAgLy8gY2hlY2sgUERGIHZlcnNpb24KKyAg ICAvLyB0aGlzIHdvcmtzIG9ubHkgZm9yIFBERiAxLnggLS0gYnV0IHNpbmNlIGFueSB2ZXJzaW9u cyBvZiBQREYgbmV3ZXIKKyAgICAvLyB0aGFuIDEueCB3aWxsIG5vdCBiZSBiYWNrd2FyZHMgY29t cGF0aWJsZSB0byBQREYgMS54LCBwZGZUZVggd2lsbAorICAgIC8vIHRoZW4gaGF2ZSB0byBjaGFu Z2VkIGRyYXN0aWNhbGx5IGFueXdheS4KKyNpZmRlZiBQT1BQTEVSX1ZFUlNJT04KKyAgICBwZGZf bWFqb3JfdmVyc2lvbl9mb3VuZCA9IHBkZl9kb2MtPmRvYy0+Z2V0UERGTWFqb3JWZXJzaW9uKCk7 CisgICAgcGRmX21pbm9yX3ZlcnNpb25fZm91bmQgPSBwZGZfZG9jLT5kb2MtPmdldFBERk1pbm9y VmVyc2lvbigpOworICAgIGlmICgocGRmX21ham9yX3ZlcnNpb25fZm91bmQgPiAxKQorICAgICB8 fCAocGRmX21pbm9yX3ZlcnNpb25fZm91bmQgPiBtaW5vcl9wZGZfdmVyc2lvbl93YW50ZWQpKSB7 CisgICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9CisgICAgICAgICAgICAiUERGIGluY2x1c2lvbjog Zm91bmQgUERGIHZlcnNpb24gPCVkLiVkPiwgYnV0IGF0IG1vc3QgdmVyc2lvbiA8MS4lZD4gYWxs b3dlZCI7CisgICAgICAgIGlmIChwZGZfaW5jbHVzaW9uX2Vycm9ybGV2ZWwgPiAwKSB7CisgICAg ICAgICAgICBwZGZ0ZXhfZmFpbChtc2csIHBkZl9tYWpvcl92ZXJzaW9uX2ZvdW5kLCBwZGZfbWlu b3JfdmVyc2lvbl9mb3VuZCwgbWlub3JfcGRmX3ZlcnNpb25fd2FudGVkKTsKKyAgICAgICAgfSBl bHNlIGlmIChwZGZfaW5jbHVzaW9uX2Vycm9ybGV2ZWwgPCAwKSB7CisgICAgICAgICAgICA7IC8q IGRvIG5vdGhpbmcgKi8KKyAgICAgICAgfSBlbHNlIHsgLyogPSAwLCBnaXZlIHdhcm5pbmcgKi8K KyAgICAgICAgICAgIHBkZnRleF93YXJuKG1zZywgcGRmX21ham9yX3ZlcnNpb25fZm91bmQsIHBk Zl9taW5vcl92ZXJzaW9uX2ZvdW5kLCBtaW5vcl9wZGZfdmVyc2lvbl93YW50ZWQpOworICAgICAg ICB9CisgICAgfQorI2Vsc2UKKyNlcnJvciBQT1BQTEVSX1ZFUlNJT04gc2hvdWxkIGJlIGRlZmlu ZWQuCisjZW5kaWYKKyAgICBlcGRmX251bV9wYWdlcyA9IHBkZl9kb2MtPmRvYy0+Z2V0Q2F0YWxv ZygpLT5nZXROdW1QYWdlcygpOworICAgIGlmIChwYWdlX25hbWUpIHsKKyAgICAgICAgLy8gZ2V0 IHBhZ2UgYnkgbmFtZQorICAgICAgICBHU3RyaW5nIG5hbWUocGFnZV9uYW1lKTsKKyAgICAgICAg TGlua0Rlc3QgKmxpbmsgPSBwZGZfZG9jLT5kb2MtPmZpbmREZXN0KCZuYW1lKTsKKyAgICAgICAg aWYgKGxpbmsgPT0gMCB8fCAhbGluay0+aXNPaygpKQorICAgICAgICAgICAgcGRmdGV4X2ZhaWwo IlBERiBpbmNsdXNpb246IGludmFsaWQgZGVzdGluYXRpb24gPCVzPiIsIHBhZ2VfbmFtZSk7Cisg ICAgICAgIFJlZiByZWYgPSBsaW5rLT5nZXRQYWdlUmVmKCk7CisgICAgICAgIHBhZ2VfbnVtID0g cGRmX2RvYy0+ZG9jLT5nZXRDYXRhbG9nKCktPmZpbmRQYWdlKHJlZi5udW0sIHJlZi5nZW4pOwor ICAgICAgICBpZiAocGFnZV9udW0gPT0gMCkKKyAgICAgICAgICAgIHBkZnRleF9mYWlsKCJQREYg aW5jbHVzaW9uOiBkZXN0aW5hdGlvbiBpcyBub3QgYSBwYWdlIDwlcz4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgcGFnZV9uYW1lKTsKKyAgICAgICAgZGVsZXRlIGxpbms7CisgICAgfSBlbHNl IHsKKyAgICAgICAgLy8gZ2V0IHBhZ2UgYnkgbnVtYmVyCisgICAgICAgIGlmIChwYWdlX251bSA8 PSAwIHx8IHBhZ2VfbnVtID4gZXBkZl9udW1fcGFnZXMpCisgICAgICAgICAgICBwZGZ0ZXhfZmFp bCgiUERGIGluY2x1c2lvbjogcmVxdWlyZWQgcGFnZSBkb2VzIG5vdCBleGlzdCA8JWk+IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGVwZGZfbnVtX3BhZ2VzKTsKKyAgICB9CisgICAgLy8gZ2V0 IHRoZSByZXF1aXJlZCBwYWdlCisgICAgcGFnZSA9IHBkZl9kb2MtPmRvYy0+Z2V0Q2F0YWxvZygp LT5nZXRQYWdlKHBhZ2VfbnVtKTsKKworICAgIC8vIGdldCB0aGUgcGFnZWJveCAobWVkaWEsIGNy b3AuLi4pIHRvIHVzZS4KKyAgICBwYWdlYm94ID0gZ2V0X3BhZ2Vib3gocGFnZSwgcGFnZWJveF9z cGVjKTsKKyAgICBpZiAocGFnZWJveC0+eDIgPiBwYWdlYm94LT54MSkgeworICAgICAgICBlcGRm X29yaWdfeCA9IHBhZ2Vib3gtPngxOworICAgICAgICBlcGRmX3dpZHRoID0gcGFnZWJveC0+eDIg LSBwYWdlYm94LT54MTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcGRmX29yaWdfeCA9IHBhZ2Vi b3gtPngyOworICAgICAgICBlcGRmX3dpZHRoID0gcGFnZWJveC0+eDEgLSBwYWdlYm94LT54MjsK KyAgICB9CisgICAgaWYgKHBhZ2Vib3gtPnkyID4gcGFnZWJveC0+eTEpIHsKKyAgICAgICAgZXBk Zl9vcmlnX3kgPSBwYWdlYm94LT55MTsKKyAgICAgICAgZXBkZl9oZWlnaHQgPSBwYWdlYm94LT55 MiAtIHBhZ2Vib3gtPnkxOworICAgIH0gZWxzZSB7CisgICAgICAgIGVwZGZfb3JpZ195ID0gcGFn ZWJveC0+eTI7CisgICAgICAgIGVwZGZfaGVpZ2h0ID0gcGFnZWJveC0+eTEgLSBwYWdlYm94LT55 MjsKKyAgICB9CisKKyAgICAvLyBnZXQgcGFnZSByb3RhdGlvbgorICAgIGVwZGZfcm90YXRlID0g cGFnZS0+Z2V0Um90YXRlKCkgJSAzNjA7CisgICAgaWYgKGVwZGZfcm90YXRlIDwgMCkKKyAgICAg ICAgZXBkZl9yb3RhdGUgKz0gMzYwOworCisgICAgLy8gcGFnZSBncm91cAorICAgIGlmIChwYWdl LT5nZXRHcm91cCgpICE9IE5VTEwpCisgICAgICAgIGVwZGZfaGFzX3BhZ2VfZ3JvdXAgPSAxOyAg ICAvLyBvbmx5IGZsYWcgdGhhdCBwYWdlIGdyb3VwIGlzIHByZXNlbnQ7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIG9iamVjdCBudW1iZXIgd2lsbCBi ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGVkIGluIHBk ZnRleC53ZWIKKyAgICBlbHNlCisgICAgICAgIGVwZGZfaGFzX3BhZ2VfZ3JvdXAgPSAwOyAgICAv LyBubyBwYWdlIGdyb3VwIHByZXNlbnQKKworICAgIHBkZl9kb2MtPnhyZWYgPSBwZGZfZG9jLT5k b2MtPmdldFhSZWYoKTsKKyAgICByZXR1cm4gcGFnZV9udW07Cit9CisKKy8vIHdyaXRlcyB0aGUg Y3VycmVudCBlcGZfZG9jLgorLy8gSGVyZSB0aGUgaW5jbHVkZWQgUERGIGlzIGNvcGllZCwgc28g bW9zdCBlcnJvcnMgdGhhdCBjYW4gaGFwcGVuIGR1cmluZyBQREYKKy8vIGluY2x1c2lvbiB3aWxs IGFyaXNlIGhlcmUuCisKK3ZvaWQgd3JpdGVfZXBkZih2b2lkKQoreworICAgIFBhZ2UgKnBhZ2U7 CisgICAgUmVmICpwYWdlUmVmOworICAgIERpY3QgKnBhZ2VEaWN0OworICAgIE9iamVjdCBjb250 ZW50cywgb2JqMSwgb2JqMiwgcGFnZU9iaiwgZGljdE9iajsKKyAgICBPYmplY3QgZ3JvdXBEaWN0 OworICAgIGJvb2wgd3JpdGVTZXBHcm91cCA9IGZhbHNlOworICAgIE9iamVjdCBpbmZvOworICAg IGNoYXIgKmtleTsKKyAgICBjaGFyIHNbMjU2XTsKKyAgICBpbnQgaSwgbDsKKyAgICBpbnQgcm90 YXRlOworICAgIGRvdWJsZSBzY2FsZVs2XSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworICAgIGJv b2wgd3JpdGVtYXRyaXggPSBmYWxzZTsKKyAgICBpbnQgc3VwcHJlc3NfcHRleF9pbmZvID0gZ2V0 cGRmc3VwcHJlc3NwdGV4aW5mbygpOworICAgIHN0YXRpYyBjb25zdCBjaGFyICpwYWdlRGljdEtl eXNbXSA9IHsKKyAgICAgICAgIkxhc3RNb2RpZmllZCIsCisgICAgICAgICJNZXRhZGF0YSIsCisg ICAgICAgICJQaWVjZUluZm8iLAorICAgICAgICAiU2VwYXJhdGlvbkluZm8iLAorLy8gICAgICAg ICAiR3JvdXAiLAorLy8gICAgICAgICAiUmVzb3VyY2VzIiwKKyAgICAgICAgTlVMTAorICAgIH07 CisKKyAgICBQZGZEb2N1bWVudCAqcGRmX2RvYyA9IChQZGZEb2N1bWVudCAqKSBlcGRmX2RvYzsK KyAgICAocGRmX2RvYy0+b2NjdXJlbmNlcyktLTsKKyAgICB4cmVmID0gcGRmX2RvYy0+eHJlZjsK KyAgICBpbk9iakxpc3QgPSBwZGZfZG9jLT5pbk9iakxpc3Q7CisgICAgZW5jb2RpbmdMaXN0ID0g MDsKKyAgICBwYWdlID0gcGRmX2RvYy0+ZG9jLT5nZXRDYXRhbG9nKCktPmdldFBhZ2UoZXBkZl9z ZWxlY3RlZF9wYWdlKTsKKyAgICBwYWdlUmVmID0gcGRmX2RvYy0+ZG9jLT5nZXRDYXRhbG9nKCkt PmdldFBhZ2VSZWYoZXBkZl9zZWxlY3RlZF9wYWdlKTsKKyAgICBwYWdlT2JqID0geHJlZi0+ZmV0 Y2gocGFnZVJlZi0+bnVtLCBwYWdlUmVmLT5nZW4pOworICAgIHBhZ2VEaWN0ID0gcGFnZU9iai5n ZXREaWN0KCk7CisgICAgcm90YXRlID0gcGFnZS0+Z2V0Um90YXRlKCk7CisgICAgY29uc3QgUERG UmVjdGFuZ2xlICpwYWdlYm94OworICAgIC8vIHdyaXRlIHRoZSBQYWdlIGhlYWRlcgorICAgIHBk Zl9wdXRzKCIvVHlwZSAvWE9iamVjdFxuIik7CisgICAgcGRmX3B1dHMoIi9TdWJ0eXBlIC9Gb3Jt XG4iKTsKKyAgICBwZGZfcHV0cygiL0Zvcm1UeXBlIDFcbiIpOworCisgICAgLy8gd3JpdGUgYWRk aXRpb25hbCBpbmZvcm1hdGlvbgorICAgIGlmICgoc3VwcHJlc3NfcHRleF9pbmZvICYgTUFTS19T VVBQUkVTU19QVEVYX0ZJTEVOQU1FKSA9PSAwKSB7CisgICAgICAgIHBkZl9wcmludGYoIi8lcy5G aWxlTmFtZSAoJXMpXG4iLCBwZGZrZXlwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29udmVy dFN0cmluZ1RvUERGU3RyaW5nKHBkZl9kb2MtPmZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHBkZl9kb2MtPmZpbGVfbmFtZSkpKTsK KyAgICB9CisgICAgaWYgKChzdXBwcmVzc19wdGV4X2luZm8gJiBNQVNLX1NVUFBSRVNTX1BURVhf UEFHRU5VTUJFUikgPT0gMCkgeworICAgICAgICBwZGZfcHJpbnRmKCIvJXMuUGFnZU51bWJlciAl aVxuIiwgcGRma2V5cHJlZml4LCAoaW50KSBlcGRmX3NlbGVjdGVkX3BhZ2UpOworICAgIH0KKyAg ICBpZiAoKHN1cHByZXNzX3B0ZXhfaW5mbyAmIE1BU0tfU1VQUFJFU1NfUFRFWF9JTkZPRElDVCkg PT0gMCkgeworICAgICAgICBpbmZvID0gcGRmX2RvYy0+ZG9jLT5nZXREb2NJbmZvTkYoKTsKKyAg ICAgICAgaWYgKGluZm8uaXNSZWYoKSkgeworICAgICAgICAgICAgLy8gdGhlIGluZm8gZGljdCBt dXN0IGJlIGluZGlyZWN0IChQREYgUmVmIHAuIDYxKQorICAgICAgICAgICAgcGRmX3ByaW50Zigi LyVzLkluZm9EaWN0ICIsIHBkZmtleXByZWZpeCk7CisgICAgICAgICAgICBwZGZfcHJpbnRmKCIl ZCAwIFJcbiIsIGFkZE90aGVyKGluZm8uZ2V0UmVmKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICAvLyBnZXQgdGhlIHBhZ2Vib3ggKG1lZGlhLCBjcm9wLi4uKSB0byB1c2UuCisgICAgcGFnZWJv eCA9IGdldF9wYWdlYm94KHBhZ2UsIGVwZGZfcGFnZV9ib3gpOworCisgICAgLy8gaGFuZGxlIHBh Z2Ugcm90YXRpb24KKyAgICBpZiAocm90YXRlICE9IDApIHsKKyAgICAgICAgaWYgKHJvdGF0ZSAl IDkwID09IDApIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlcyBvbmx5IHRoZSBzaW1wbGUg Y2FzZTogbXVsdGlwbGUgb2YgOTBzIGJ1dCB0aGVzZQorICAgICAgICAgICAgLy8gYXJlIHRoZSBv bmx5IHZhbHVlcyBhbGxvd2VkIGFjY29yZGluZyB0byB0aGUgcmVmZXJlbmNlCisgICAgICAgICAg ICAvLyAodjEuMywgcC4gNzgpLgorICAgICAgICAgICAgLy8gdGhlIGltYWdlIGlzIHJvdGF0ZWQg YXJvdW5kIGl0cyBjZW50ZXIuCisgICAgICAgICAgICAvLyB0aGUgL1JvdGF0ZSBrZXkgaXMgY2xv Y2t3aXNlIHdoaWxlIHRoZSBtYXRyaXggaXMKKyAgICAgICAgICAgIC8vIGNvdW50ZXJjbG9ja3dp c2UgOi0lCisgICAgICAgICAgICB0ZXhfcHJpbnRmKCIsIHBhZ2UgaXMgcm90YXRlZCAlZCBkZWdy ZWVzIiwgcm90YXRlKTsKKyAgICAgICAgICAgIHN3aXRjaCAocm90YXRlKSB7CisgICAgICAgICAg ICBjYXNlIDkwOgorICAgICAgICAgICAgICAgIHNjYWxlWzFdID0gLTE7CisgICAgICAgICAgICAg ICAgc2NhbGVbMl0gPSAxOworICAgICAgICAgICAgICAgIHNjYWxlWzRdID0gcGFnZWJveC0+eDEg LSBwYWdlYm94LT55MTsKKyAgICAgICAgICAgICAgICBzY2FsZVs1XSA9IHBhZ2Vib3gtPnkxICsg cGFnZWJveC0+eDI7CisgICAgICAgICAgICAgICAgd3JpdGVtYXRyaXggPSB0cnVlOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxODA6CisgICAgICAgICAgICAgICAg c2NhbGVbMF0gPSBzY2FsZVszXSA9IC0xOworICAgICAgICAgICAgICAgIHNjYWxlWzRdID0gcGFn ZWJveC0+eDEgKyBwYWdlYm94LT54MjsKKyAgICAgICAgICAgICAgICBzY2FsZVs1XSA9IHBhZ2Vi b3gtPnkxICsgcGFnZWJveC0+eTI7CisgICAgICAgICAgICAgICAgd3JpdGVtYXRyaXggPSB0cnVl OworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFy ZSBleGNoYW5nZWQKKyAgICAgICAgICAgIGNhc2UgMjcwOgorICAgICAgICAgICAgICAgIHNjYWxl WzFdID0gMTsKKyAgICAgICAgICAgICAgICBzY2FsZVsyXSA9IC0xOworICAgICAgICAgICAgICAg IHNjYWxlWzRdID0gcGFnZWJveC0+eDEgKyBwYWdlYm94LT55MjsKKyAgICAgICAgICAgICAgICBz Y2FsZVs1XSA9IHBhZ2Vib3gtPnkxIC0gcGFnZWJveC0+eDE7CisgICAgICAgICAgICAgICAgd3Jp dGVtYXRyaXggPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHdyaXRlbWF0cml4KSB7ICAvLyBUaGUgbWF0cml4IGlzIG9ubHkgd3Jp dHRlbiBpZiB0aGUgaW1hZ2UgaXMgcm90YXRlZC4KKyAgICAgICAgICAgICAgICBzcHJpbnRmKHMs ICIvTWF0cml4IFslLjhmICUuOGYgJS44ZiAlLjhmICUuOGYgJS44Zl1cbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICBzY2FsZVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWzFd LCBzY2FsZVsyXSwgc2NhbGVbM10sIHNjYWxlWzRdLCBzY2FsZVs1XSk7CisgICAgICAgICAgICAg ICAgcGRmX3B1dHMoc3RyaXB6ZXJvcyhzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBzcHJpbnRmKHMsICIvQkJveCBbJS44ZiAlLjhmICUuOGYgJS44Zl1cbiIsCisg ICAgICAgICAgICBwYWdlYm94LT54MSwgcGFnZWJveC0+eTEsIHBhZ2Vib3gtPngyLCBwYWdlYm94 LT55Mik7CisgICAgcGRmX3B1dHMoc3RyaXB6ZXJvcyhzKSk7CisKKyAgICAvLyBNZXRhZGF0YSB2 YWxpZGl0eSBjaGVjayAoYXMgYSBzdHJlYW0gaXQgbXVzdCBiZSBpbmRpcmVjdCkKKyAgICBkaWN0 T2JqID0gcGFnZURpY3QtPmxvb2t1cE5GKCJNZXRhZGF0YSIpLmNvcHkoKTsKKyAgICBpZiAoIWRp Y3RPYmouaXNOdWxsKCkgJiYgIWRpY3RPYmouaXNSZWYoKSkKKyAgICAgICAgcGRmdGV4X3dhcm4o IlBERiBpbmNsdXNpb246IC9NZXRhZGF0YSBtdXN0IGJlIGluZGlyZWN0IG9iamVjdCIpOworCisg ICAgLy8gY29weSBzZWxlY3RlZCBpdGVtcyBpbiBQYWdlIGRpY3Rpb25hcnkgZXhjZXB0IFJlc291 cmNlcyAmIEdyb3VwCisgICAgZm9yIChpID0gMDsgcGFnZURpY3RLZXlzW2ldICE9IE5VTEw7IGkr KykgeworICAgICAgICBkaWN0T2JqID0gcGFnZURpY3QtPmxvb2t1cE5GKHBhZ2VEaWN0S2V5c1tp XSkuY29weSgpOworICAgICAgICBpZiAoIWRpY3RPYmouaXNOdWxsKCkpIHsKKyAgICAgICAgICAg IHBkZl9uZXdsaW5lKCk7CisgICAgICAgICAgICBwZGZfcHJpbnRmKCIvJXMgIiwgcGFnZURpY3RL ZXlzW2ldKTsKKyAgICAgICAgICAgIGNvcHlPYmplY3QoJmRpY3RPYmopOyAvLyBwcmVzZXJ2ZXMg aW5kaXJlY3Rpb24KKyAgICAgICAgfQorICAgIH0gCisKKyAgICAvLyBoYW5kbGUgcGFnZSBncm91 cAorICAgIGRpY3RPYmogPSBwYWdlRGljdC0+bG9va3VwTkYoIkdyb3VwIikuY29weSgpOworICAg IGlmICghZGljdE9iai5pc051bGwoKSkgeworICAgICAgICBpZiAocGRmcGFnZWdyb3VwdmFsID09 IDApIHsgCisgICAgICAgICAgICAvLyBhbm90aGVyIHBkZiB3aXRoIHBhZ2UgZ3JvdXAgd2FzIGlu Y2x1ZGVkIGVhcmxpZXIgb24gdGhlCisgICAgICAgICAgICAvLyBzYW1lIHBhZ2U7IGNvcHkgdGhl IEdyb3VwIGVudHJ5IGFzIGlzLiAgU2VlIG1hbnVhbCBmb3IKKyAgICAgICAgICAgIC8vIGluZm8g b24gd2h5IHRoaXMgaXMgYSB3YXJuaW5nLgorICAgICAgICAgICAgaWYgKGdldHBkZnN1cHByZXNz d2FybmluZ3BhZ2Vncm91cCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBwZGZ0ZXhfd2Fybgor ICAgICgiUERGIGluY2x1c2lvbjogbXVsdGlwbGUgcGRmcyB3aXRoIHBhZ2UgZ3JvdXAgaW5jbHVk ZWQgaW4gYSBzaW5nbGUgcGFnZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGRmX25l d2xpbmUoKTsKKyAgICAgICAgICAgIHBkZl9wdXRzKCIvR3JvdXAgIik7CisgICAgICAgICAgICBj b3B5T2JqZWN0KCZkaWN0T2JqKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHdy aXRlIEdyb3VwIGRpY3QgYXMgYSBzZXBhcmF0ZSBvYmplY3QsIHNpbmNlIHRoZSBQYWdlIGRpY3Qg YWxzbyByZWZlcnMgdG8gaXQKKyAgICAgICAgICAgIGRpY3RPYmogPSBwYWdlRGljdC0+bG9va3Vw KCJHcm91cCIpOworICAgICAgICAgICAgaWYgKCFkaWN0T2JqLmlzRGljdCgpKQorICAgICAgICAg ICAgICAgIHBkZnRleF9mYWlsKCJQREYgaW5jbHVzaW9uOiAvR3JvdXAgZGljdCBtaXNzaW5nIik7 CisgICAgICAgICAgICB3cml0ZVNlcEdyb3VwID0gdHJ1ZTsKKy8qCitUaGlzIHBhcnQgaXMgb25s eSBhIHNpbmdsZSBsaW5lCisgICAgICAgICAgICBncm91cERpY3QgPSBPYmplY3QocGFnZS0+Z2V0 R3JvdXAoKSk7CitpbiB0aGUgb3JpZ2luYWwgcGF0Y2guIEluIHRoaXMgY2FzZSwgaG93ZXZlciwg cGRmdGV4IGNyYXNoZXMgYXQKKyJkZWxldGUgcGRmX2RvYy0+ZG9jIiBpbiAiZGVsZXRlX2RvY3Vt ZW50KCkiIGZvciBpbmNsdXNpb24gb2Ygc29tZQora2luZCBvZiBwZGYgaW1hZ2VzLCBmb3IgZXhh bXBsZSwgZmlndXJlX21pc3NpbmcucGRmIGluIGdudXBsb3QuCitBIGNoYW5nZQorICAgICAgICAg ICAgZ3JvdXBEaWN0ID0gT2JqZWN0KHBhZ2UtPmdldEdyb3VwKCkpLmNvcHkoKTsKK2RvZXMgbm90 IGltcHJvdmUgdGhlIHNpdHVhdGlvbi4KK1RoZSBjaGFuZ2VzIGJlbG93IHNlZW0gdG8gd29yayBm aW5lLiAKKyovCisvLyBiZWdpbiBtb2RpZmljYXRpb24KKyAgICAgICAgICAgIGdyb3VwRGljdCA9 IHBhZ2VEaWN0LT5sb29rdXAoIkdyb3VwIik7CisgICAgICAgICAgICBjb25zdCBEaWN0JiBkaWMx ID0gcGFnZS0+Z2V0R3JvdXAoKTsKKyAgICAgICAgICAgIGNvbnN0IERpY3QmIGRpYzIgPSBncm91 cERpY3QuZ2V0RGljdCgpOworICAgICAgICAgICAgLy8gcmVwbGFjZSBkaWMyIGluIGdyb3VwRGlj dCB3aXRoIGRpYzEKKyAgICAgICAgICAgIGwgPSBkaWMyLmdldExlbmd0aCgpOworICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgIGdyb3VwRGljdC5k aWN0UmVtb3ZlKGRpYzIuZ2V0S2V5KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGwg PSBkaWMxLmdldExlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykg eworICAgICAgICAgICAgICAgIGdyb3VwRGljdC5kaWN0QWRkKChjb25zdCBjaGFyICopY29weVN0 cmluZyhkaWMxLmdldEtleShpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGljMS5nZXRWYWxORihpKS5jb3B5KCkpOworICAgICAgICAgICAgfQorLy8gZW5kIG1vZGlmaWNh dGlvbgorICAgICAgICAgICAgcGRmX3ByaW50ZigiL0dyb3VwICVsZCAwIFJcbiIsIChsb25nKXBk ZnBhZ2Vncm91cHZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB3cml0ZSB0aGUgUmVz b3VyY2VzIGRpY3Rpb25hcnkKKyAgICBpZiAocGFnZS0+Z2V0UmVzb3VyY2VEaWN0KCkgPT0gTlVM TCkgeworICAgICAgICAvLyBSZXNvdXJjZXMgY2FuIGJlIG1pc3NpbmcgKGZpbGVzIHdpdGhvdXQg dGhlbSBoYXZlIGJlZW4gc3BvdHRlZAorICAgICAgICAvLyBpbiB0aGUgd2lsZCk7IGluIHdoaWNo IGNhc2UgdGhlIC9SZXNvdWNlcyBvZiB0aGUgL1BhZ2Ugd2lsbCBiZSB1c2VkLgorICAgICAgICAv LyAiVGhpcyBwcmFjdGljZSBpcyBub3QgcmVjb21tZW5kZWQiLgorICAgICAgICBwZGZ0ZXhfd2Fy bgorICAgICAgICAgICAgKCJQREYgaW5jbHVzaW9uOiAvUmVzb3VyY2VzIG1pc3NpbmcuICdUaGlz IHByYWN0aWNlIGlzIG5vdCByZWNvbW1lbmRlZCcgKFBERiBSZWYpIik7CisgICAgfSBlbHNlIHsK KyAgICAgICAgT2JqZWN0ICpvYmoxID0gcGFnZS0+Z2V0UmVzb3VyY2VEaWN0T2JqZWN0KCk7Cisg ICAgICAgIGlmICghb2JqMS0+aXNEaWN0KCkpCisgICAgICAgICAgICBwZGZ0ZXhfZmFpbCgiUERG IGluY2x1c2lvbjogaW52YWxpZCByZXNvdXJjZXMgZGljdCB0eXBlIDwlcz4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgb2JqMS0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgIHBkZl9uZXdsaW5l KCk7CisgICAgICAgIHBkZl9wdXRzKCIvUmVzb3VyY2VzIDw8XG4iKTsKKyAgICAgICAgZm9yIChp ID0gMCwgbCA9IG9iajEtPmRpY3RHZXRMZW5ndGgoKTsgaSA8IGw7ICsraSkgeworICAgICAgICAg ICAgb2JqMiA9IG9iajEtPmRpY3RHZXRWYWwoaSk7CisgICAgICAgICAgICBrZXkgPSAoY2hhciAq KW9iajEtPmRpY3RHZXRLZXkoaSk7CisgICAgICAgICAgICBpZiAoc3RyY21wKCJGb250Iiwga2V5 KSA9PSAwKQorICAgICAgICAgICAgICAgIGNvcHlGb250UmVzb3VyY2VzKCZvYmoyKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKHN0cmNtcCgiUHJvY1NldCIsIGtleSkgPT0gMCkKKyAgICAgICAgICAg ICAgICBjb3B5UHJvY1NldCgmb2JqMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgY29weU90aGVyUmVzb3VyY2VzKCZvYmoyLCAoY2hhciAqKWtleSk7CisgICAgICAgIH0KKyAg ICAgICAgcGRmX3B1dHMoIj4+XG4iKTsKKyAgICB9CisKKyAgICAvLyB3cml0ZSB0aGUgcGFnZSBj b250ZW50cworICAgIGNvbnRlbnRzID0gcGFnZS0+Z2V0Q29udGVudHMoKTsKKyAgICBpZiAoY29u dGVudHMuaXNTdHJlYW0oKSkgeworCisgICAgICAgIC8vIFZhcmlhbnQgQTogZ2V0IHN0cmVhbSBh bmQgcmVjb21wcmVzcyB1bmRlciBjb250cm9sCisgICAgICAgIC8vIG9mIFxwZGZjb21wcmVzc2xl dmVsCisgICAgICAgIC8vCisgICAgICAgIC8vIHBkZmJlZ2luc3RyZWFtKCk7CisgICAgICAgIC8v IGNvcHlTdHJlYW0oY29udGVudHMtPmdldFN0cmVhbSgpKTsKKyAgICAgICAgLy8gcGRmZW5kc3Ry ZWFtKCk7CisKKyAgICAgICAgLy8gVmFyaWFudCBCOiBjb3B5IHN0cmVhbSB3aXRob3V0IHJlY29t cHJlc3NpbmcKKyAgICAgICAgLy8KKyAgICAgICAgb2JqMSA9IGNvbnRlbnRzLnN0cmVhbUdldERp Y3QoKS0+bG9va3VwKCJGIik7CisgICAgICAgIGlmICghb2JqMS5pc051bGwoKSkgeworICAgICAg ICAgICAgcGRmdGV4X2ZhaWwoIlBERiBpbmNsdXNpb246IFVuc3VwcG9ydGVkIGV4dGVybmFsIHN0 cmVhbSIpOworICAgICAgICB9CisgICAgICAgIG9iajEgPSBjb250ZW50cy5zdHJlYW1HZXREaWN0 KCktPmxvb2t1cCgiTGVuZ3RoIik7CisgICAgICAgIGFzc2VydCghb2JqMS5pc051bGwoKSk7Cisg ICAgICAgIHBkZl9wdXRzKCIvTGVuZ3RoICIpOworICAgICAgICBjb3B5T2JqZWN0KCZvYmoxKTsK KyAgICAgICAgcGRmX3B1dHMoIlxuIik7CisgICAgICAgIG9iajEgPSBjb250ZW50cy5zdHJlYW1H ZXREaWN0KCktPmxvb2t1cCgiRmlsdGVyIik7CisgICAgICAgIGlmICghb2JqMS5pc051bGwoKSkg eworICAgICAgICAgICAgcGRmX3B1dHMoIi9GaWx0ZXIgIik7CisgICAgICAgICAgICBjb3B5T2Jq ZWN0KCZvYmoxKTsKKyAgICAgICAgICAgIHBkZl9wdXRzKCJcbiIpOworICAgICAgICAgICAgb2Jq MSA9IGNvbnRlbnRzLnN0cmVhbUdldERpY3QoKS0+bG9va3VwKCJEZWNvZGVQYXJtcyIpOworICAg ICAgICAgICAgaWYgKCFvYmoxLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgcGRmX3B1dHMo Ii9EZWNvZGVQYXJtcyAiKTsKKyAgICAgICAgICAgICAgICBjb3B5T2JqZWN0KCZvYmoxKTsKKyAg ICAgICAgICAgICAgICBwZGZfcHV0cygiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBwZGZfcHV0cygiPj5cbnN0cmVhbVxuIik7CisgICAgICAgIGNvcHlTdHJlYW0oY29u dGVudHMuZ2V0U3RyZWFtKCktPmdldFVuZGVjb2RlZFN0cmVhbSgpKTsKKyAgICAgICAgcGRmZW5k c3RyZWFtKCk7CisgICAgfSBlbHNlIGlmIChjb250ZW50cy5pc0FycmF5KCkpIHsKKyAgICAgICAg cGRmYmVnaW5zdHJlYW0oKTsKKyAgICAgICAgZm9yIChpID0gMCwgbCA9IGNvbnRlbnRzLmFycmF5 R2V0TGVuZ3RoKCk7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIE9iamVjdCBjb250ZW50c29i aiA9IGNvbnRlbnRzLmFycmF5R2V0KGkpOworICAgICAgICAgICAgY29weVN0cmVhbShjb250ZW50 c29iai5nZXRTdHJlYW0oKSk7CisgICAgICAgICAgICBpZiAoaSA8IGwgLSAxKQorICAgICAgICAg ICAgICAgIHBkZl9uZXdsaW5lKCk7ICAvLyBhZGQgYSBuZXdsaW5lIGFmdGVyIGVhY2ggc3RyZWFt IGV4Y2VwdCB0aGUgbGFzdAorICAgICAgICB9CisgICAgICAgIHBkZmVuZHN0cmVhbSgpOworICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY29udGVudHMgYXJlIG9wdGlvbmFs LCBidXQgd2UgbmVlZCB0byBpbmNsdWRlIGFuIGVtcHR5IHN0cmVhbQorICAgICAgICBwZGZiZWdp bnN0cmVhbSgpOworICAgICAgICBwZGZlbmRzdHJlYW0oKTsKKyAgICB9CisKKyAgICAvLyB3cml0 ZSBvdXQgYWxsIGluZGlyZWN0IG9iamVjdHMKKyAgICB3cml0ZVJlZnMoKTsKKworICAgIC8vIHdy aXRlIG91dCBhbGwgdXNlZCBlbmNvZGluZ3MgKGFuZCBkZWxldGUgbGlzdCkKKyAgICB3cml0ZUVu Y29kaW5ncygpOworCisgICAgLy8gd3JpdGUgdGhlIEdyb3VwIGRpY3QgaWYgbmVlZGVkCisgICAg aWYgKHdyaXRlU2VwR3JvdXApIHsKKyAgICAgICAgcGRmYmVnaW5vYmoocGRmcGFnZWdyb3VwdmFs LCAyKTsKKyAgICAgICAgY29weU9iamVjdCgmZ3JvdXBEaWN0KTsKKyAgICAgICAgcGRmX3B1dHMo IlxuIik7CisgICAgICAgIHBkZmVuZG9iaigpOworICAgICAgICBwZGZwYWdlZ3JvdXB2YWwgPSAw OyAgICAvLyBvbmx5IHRoZSAxc3QgaW5jbHVkZWQgcGRmIG9uIGEgcGFnZSBnZXRzIGl0cworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHcm91cCBpbmNsdWRlZCBpbiB0aGUgUGFn ZSBkaWN0CisgICAgfQorCisgICAgLy8gc2F2ZSBvYmplY3QgbGlzdCwgeHJlZgorICAgIHBkZl9k b2MtPmluT2JqTGlzdCA9IGluT2JqTGlzdDsKKyAgICBwZGZfZG9jLT54cmVmID0geHJlZjsKK30K KworLy8gQ2FsbGVkIHdoZW4gYW4gaW1hZ2UgaGFzIGJlZW4gd3JpdHRlbiBhbmQgaXQncyByZXNv dXJjZXMgaW4gaW1hZ2VfdGFiIGFyZQorLy8gZnJlZWQgYW5kIGl0J3Mgbm90IHJlZmVyZW5jZWQg YW55bW9yZS4KKwordm9pZCBlcGRmX2RlbGV0ZSgpCit7CisgICAgUGRmRG9jdW1lbnQgKnBkZl9k b2MgPSAoUGRmRG9jdW1lbnQgKikgZXBkZl9kb2M7CisgICAgeHJlZiA9IHBkZl9kb2MtPnhyZWY7 CisgICAgaWYgKHBkZl9kb2MtPm9jY3VyZW5jZXMgPCAwKSB7CisgICAgICAgIGRlbGV0ZV9kb2N1 bWVudChwZGZfZG9jKTsKKyAgICB9Cit9CisKKy8vIENhbGxlZCB3aGVuIFBERiBlbWJlZGRpbmcg c3lzdGVtIGlzIGZpbmFsaXplZC4KKy8vIE5vdyBkZWFsbG9jYXRlIGFsbCByZW1haW5pbmcgUGRm RG9jdW1lbnRzLgorCit2b2lkIGVwZGZfY2hlY2tfbWVtKCkKK3sKKyAgICBpZiAoaXNJbml0KSB7 CisgICAgICAgIFBkZkRvY3VtZW50ICpwLCAqbjsKKyAgICAgICAgZm9yIChwID0gcGRmRG9jdW1l bnRzOyBwOyBwID0gbikgeworICAgICAgICAgICAgbiA9IHAtPm5leHQ7CisgICAgICAgICAgICBk ZWxldGVfZG9jdW1lbnQocCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gc2VlIGFib3ZlIGZvciBn bG9iYWxQYXJhbXMKKyAgICAgICAgZGVsZXRlIGdsb2JhbFBhcmFtczsKKyAgICB9Cit9CmRpZmYg LS1naXQgYS90ZXhrL3dlYjJjL3BkZnRleGRpci9wZGZ0b3NyYy1wb3BwbGVyMC43NS4wLmNjIGIv dGV4ay93ZWIyYy9wZGZ0ZXhkaXIvcGRmdG9zcmMtcG9wcGxlcjAuNzUuMC5jYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjYwODllNjhkOQotLS0gL2Rldi9udWxsCisrKyBi L3RleGsvd2ViMmMvcGRmdGV4ZGlyL3BkZnRvc3JjLXBvcHBsZXIwLjcyLjAuY2MKQEAgLTAsMCAr MSwyMDcgQEAKKy8qCitDb3B5cmlnaHQgMTk5Ni0yMDE3IEhhbiBUaGUgVGhhbmgsIDx0aGFuaEBw ZGZ0ZXgub3JnPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBwZGZUZVguCisKK3BkZlRlWCBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK K3BkZlRlWCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFsb25nCit3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKy8qCitUaGlzIGlzIGJhc2VkIG9u IHRoZSBwYXRjaCB0ZXhsaXZlLXBvcHBsZXItMC41OS5wYXRjaCA8MjAxNy0wOS0xOT4gYXQKK2h0 dHBzOi8vZ2l0LmFyY2hsaW51eC5vcmcvc3ZudG9naXQvcGFja2FnZXMuZ2l0L3BsYWluL3RleGxp dmUtYmluL3RydW5rCitieSBBcmNoIExpbnV4LiBUaGUgcG9wcGxlciBzaG91bGQgYmUgMC43Mi4w IG9yIG5ld2VyIHZlcnNpb25zLgorUE9QUExFUl9WRVJTSU9OIHNob3VsZCBiZSBkZWZpbmVkLgor Ki8KKworI2luY2x1ZGUgPHcyYy9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu Y2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIFBPUFBMRVJfVkVSU0lPTgorI2RlZmluZSBH U3RyaW5nIEdvb1N0cmluZworI2RlZmluZSB4cGRmVmVyc2lvbiBQT1BQTEVSX1ZFUlNJT04KKyNp bmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxnb28vR29vU3RyaW5nLmg+CisjaW5jbHVkZSA8 Z29vL2dtZW0uaD4KKyNpbmNsdWRlIDxnb28vZ2ZpbGUuaD4KKyNlbHNlCisjZXJyb3IgUE9QUExF Ul9WRVJTSU9OIHNob3VsZCBiZSBkZWZpbmVkLgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisKKyNpbmNsdWRlICJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHJlYW0uaCIKKyNpbmNsdWRlICJM ZXhlci5oIgorI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIkFycmF5LmgiCisjaW5jbHVk ZSAiRGljdC5oIgorI2luY2x1ZGUgIlhSZWYuaCIKKyNpbmNsdWRlICJDYXRhbG9nLmgiCisjaW5j bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkdmeEZvbnQuaCIKKyNpbmNsdWRlICJQREZEb2MuaCIK KyNpbmNsdWRlICJHbG9iYWxQYXJhbXMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorCitzdGF0aWMg WFJlZiAqeHJlZiA9IDA7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7Cisg ICAgY2hhciAqcCwgYnVmWzEwMjRdOworICAgIFBERkRvYyAqZG9jOworICAgIEdTdHJpbmcgKmZp bGVOYW1lOworICAgIFN0cmVhbSAqczsKKyAgICBPYmplY3Qgc3JjU3RyZWFtLCBzcmNOYW1lLCBj YXRhbG9nRGljdDsKKyAgICBGSUxFICpvdXRmaWxlOworICAgIGNoYXIgKm91dG5hbWU7CisgICAg aW50IG9iam51bSA9IDAsIG9iamdlbiA9IDA7CisgICAgYm9vbCBleHRyYWN0X3hyZWZfdGFibGUg PSBmYWxzZTsKKyAgICBpbnQgYzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBkZnRvc3JjIHZlcnNp b24gJXNcbiIsIHhwZGZWZXJzaW9uKTsKKyAgICBpZiAoYXJnYyA8IDIpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIlVzYWdlOiBwZGZ0b3NyYyA8UERGLWZpbGU+ IFs8c3RyZWFtLW9iamVjdC1udW1iZXI+XVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQor ICAgIGZpbGVOYW1lID0gbmV3IEdTdHJpbmcoYXJndlsxXSk7CisgICAgZ2xvYmFsUGFyYW1zID0g bmV3IEdsb2JhbFBhcmFtcygpOworICAgIGRvYyA9IG5ldyBQREZEb2MoZmlsZU5hbWUpOworICAg IGlmICghZG9jLT5pc09rKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFBE RiBmaWxlXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgaWYgKGFyZ2MgPj0gMykg eworICAgICAgICBvYmpudW0gPSBhdG9pKGFyZ3ZbMl0pOworICAgICAgICBpZiAoYXJnYyA+PSA0 KQorICAgICAgICAgICAgb2JqZ2VuID0gYXRvaShhcmd2WzNdKTsKKyAgICB9CisgICAgeHJlZiA9 IGRvYy0+Z2V0WFJlZigpOworICAgIGNhdGFsb2dEaWN0ID0geHJlZi0+Z2V0Q2F0YWxvZygpOwor ICAgIGlmICghY2F0YWxvZ0RpY3QuaXNEaWN0KCJDYXRhbG9nIikpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJObyBDYXRhbG9nIGZvdW5kXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9 CisgICAgc3JjU3RyZWFtID0gT2JqZWN0KG9iak51bGwpOworICAgIGlmIChvYmpudW0gPT0gMCkg eworICAgICAgICBzcmNTdHJlYW0gPSBjYXRhbG9nRGljdC5kaWN0TG9va3VwKCJTb3VyY2VPYmpl Y3QiKTsKKyAgICAgICAgc3RhdGljIGNoYXIgY29uc3RfU291cmNlRmlsZVtdID0gIlNvdXJjZUZp bGUiOworICAgICAgICBpZiAoIXNyY1N0cmVhbS5pc1N0cmVhbShjb25zdF9Tb3VyY2VGaWxlKSkg eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJObyBTb3VyY2VPYmplY3QgZm91bmRcbiIp OworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBzcmNOYW1lID0gc3Jj U3RyZWFtLmdldFN0cmVhbSgpLT5nZXREaWN0KCktPmxvb2t1cCgiU291cmNlTmFtZSIpOworICAg ICAgICBpZiAoIXNyY05hbWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJObyBTb3VyY2VOYW1lIGZvdW5kXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAg ICAgIH0KKyAgICAgICAgb3V0bmFtZSA9IChjaGFyICopc3JjTmFtZS5nZXRTdHJpbmcoKS0+Y19z dHIoKTsKKyAgICAgICAgLy8gV2UgY2Fubm90IGZyZWUgc3JjTmFtZSwgYXMgb2JqbmFtZSBzaGFy ZXMgaXRzIHN0cmluZy4KKyAgICAgICAgLy8gc3JjTmFtZS5mcmVlKCk7CisgICAgfSBlbHNlIGlm IChvYmpudW0gPiAwKSB7CisgICAgICAgIHNyY1N0cmVhbSA9IHhyZWYtPmZldGNoKG9iam51bSwg b2JqZ2VuKTsKKyAgICAgICAgaWYgKCFzcmNTdHJlYW0uaXNTdHJlYW0oKSkgeworICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJOb3QgYSBTdHJlYW0gb2JqZWN0XG4iKTsKKyAgICAgICAgICAg IGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgc3ByaW50ZihidWYsICIlcyIsIGZpbGVOYW1l LT5jX3N0cigpKTsKKyAgICAgICAgaWYgKChwID0gc3RycmNocihidWYsICcuJykpID09IDApCisg ICAgICAgICAgICBwID0gc3RyY2hyKGJ1ZiwgMCk7CisgICAgICAgIGlmIChvYmpnZW4gPT0gMCkK KyAgICAgICAgICAgIHNwcmludGYocCwgIi4laSIsIG9iam51bSk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHNwcmludGYocCwgIi4laSslaSIsIG9iam51bSwgb2JqZ2VuKTsKKyAgICAgICAg b3V0bmFtZSA9IGJ1ZjsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLy8gb2JqbnVt IDwgMCBtZWFucyB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgWFJlZiB0YWJsZQorICAgICAgICBleHRy YWN0X3hyZWZfdGFibGUgPSB0cnVlOworICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVzIiwgZmlsZU5h bWUtPmNfc3RyKCkpOworICAgICAgICBpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJy4nKSkgPT0gMCkK KyAgICAgICAgICAgIHAgPSBzdHJjaHIoYnVmLCAwKTsKKyAgICAgICAgc3ByaW50ZihwLCAiLnhy ZWYiKTsKKyAgICAgICAgb3V0bmFtZSA9IGJ1ZjsKKyAgICB9CisgICAgaWYgKCEob3V0ZmlsZSA9 IGZvcGVuKG91dG5hbWUsICJ3YiIpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5v dCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nXG4iLCBvdXRuYW1lKTsKKyAgICAgICAgZXhp dCgxKTsKKyAgICB9CisgICAgaWYgKGV4dHJhY3RfeHJlZl90YWJsZSkgeworICAgICAgICBpbnQg c2l6ZSA9IHhyZWYtPmdldE51bU9iamVjdHMoKTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh4cmVmLT5nZXRFbnRy eShpKS0+b2Zmc2V0ID09IDB4ZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgICAgc2l6ZSA9IGk7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgInhyZWZc biIpOworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIwICVpXG4iLCBzaXplKTsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgWFJlZkVudHJ5ICplID0g eHJlZi0+Z2V0RW50cnkoaSk7CisgICAgICAgICAgICBpZiAoZS0+dHlwZSAhPSB4cmVmRW50cnlD b21wcmVzc2VkKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiUuMTBsdSAlLjVp ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgdW5zaWduZWQpIGUtPm9mZnNl dCwgZS0+Z2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgKGUtPnR5cGUgPT0geHJlZkVudHJ5 RnJlZSA/ICJmIiA6ICJuIikpOworICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAvLyBl LT5vZmZzZXQgaXMgdGhlIG9iamVjdCBudW1iZXIgb2YgdGhlIG9iamVjdCBzdHJlYW0KKyAgICAg ICAgICAgICAgICBTdHJlYW0gKnN0cjsKKyAgICAgICAgICAgICAgICBMZXhlciAqbGV4ZXI7Cisg ICAgICAgICAgICAgICAgUGFyc2VyICpwYXJzZXI7CisgICAgICAgICAgICAgICAgT2JqZWN0IG9i alN0ciwgb2JqMSwgb2JqMjsKKyAgICAgICAgICAgICAgICBpbnQgbk9iamVjdHMsIGZpcnN0LCBu OworICAgICAgICAgICAgICAgIGludCBsb2NhbE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGZpcnN0T2Zmc2V0OworCisgICAgICAgICAgICAgICAgb2JqU3RyID0geHJl Zi0+ZmV0Y2goZS0+b2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQob2JqU3RyLmlz U3RyZWFtKCkpOworICAgICAgICAgICAgICAgIG9iajEgPSBvYmpTdHIuc3RyZWFtR2V0RGljdCgp LT5sb29rdXAoIk4iKTsKKyAgICAgICAgICAgICAgICBuT2JqZWN0cyA9IG9iajEuZ2V0SW50KCk7 CisgICAgICAgICAgICAgICAgb2JqMSA9IG9ialN0ci5zdHJlYW1HZXREaWN0KCktPmxvb2t1cCgi Rmlyc3QiKTsKKyAgICAgICAgICAgICAgICBmaXJzdCA9IG9iajEuZ2V0SW50KCk7CisgICAgICAg ICAgICAgICAgZmlyc3RPZmZzZXQgPSBvYmpTdHIuZ2V0U3RyZWFtKCktPmdldEJhc2VTdHJlYW0o KS0+Z2V0U3RhcnQoKSArIGZpcnN0OworCisgICAgICAgICAgICAgICAgLy8gcGFyc2UgdGhlIGhl YWRlcjogb2JqZWN0IG51bWJlcnMgYW5kIG9mZnNldHMKKyAgICAgICAgICAgICAgICBvYmpTdHIu c3RyZWFtUmVzZXQoKTsKKyAgICAgICAgICAgICAgICBzdHIgPSBuZXcgRW1iZWRTdHJlYW0ob2Jq U3RyLmdldFN0cmVhbSgpLCBPYmplY3Qob2JqTnVsbCksIHRydWUsIGZpcnN0KTsKKyAgICAgICAg ICAgICAgICBsZXhlciA9IG5ldyBMZXhlcih4cmVmLCBzdHIpOworICAgICAgICAgICAgICAgIHBh cnNlciA9IG5ldyBQYXJzZXIoeHJlZiwgbGV4ZXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBm b3IgKG4gPSAwOyBuIDwgbk9iamVjdHM7ICsrbikgeworICAgICAgICAgICAgICAgICAgICBvYmox ID0gcGFyc2VyLT5nZXRPYmooKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqMiA9IHBhcnNlci0+ Z2V0T2JqKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuID09IGUtPmdlbikKKyAgICAgICAg ICAgICAgICAgICAgICAgIGxvY2FsT2Zmc2V0ID0gb2JqMi5nZXRJbnQoKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHN0ci0+Z2V0Q2hhcigpICE9IEVPRikgOwor ICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZXI7CisKKyAgICAgICAgICAgICAgICBmcHJpbnRm KG91dGZpbGUsICIlLjEwbHUgMDAwMDAgblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChs b25nIHVuc2lnbmVkKShmaXJzdE9mZnNldCArIGxvY2FsT2Zmc2V0KSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzID0gc3JjU3RyZWFtLmdldFN0cmVh bSgpOworICAgICAgICBzLT5yZXNldCgpOworICAgICAgICB3aGlsZSAoKGMgPSBzLT5nZXRDaGFy KCkpICE9IEVPRikKKyAgICAgICAgICAgIGZwdXRjKGMsIG91dGZpbGUpOworICAgIH0KKyAgICBp ZiAob2JqbnVtID09IDApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU291cmNlIGZpbGUgZXh0 cmFjdGVkIHRvICVzXG4iLCBvdXRuYW1lKTsKKyAgICBlbHNlIGlmIChvYmpudW0gPiAwKQorICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIlN0cmVhbSBvYmplY3QgZXh0cmFjdGVkIHRvICVzXG4iLCBv dXRuYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3Jvc3MtcmVmZXJl bmNlIHRhYmxlIGV4dHJhY3RlZCB0byAlc1xuIiwgb3V0bmFtZSk7CisgICAgZmNsb3NlKG91dGZp bGUpOworICAgIGRlbGV0ZSBkb2M7CisgICAgZGVsZXRlIGdsb2JhbFBhcmFtczsKK30K --=-sDPVlGRaG3C8Mq9m/KSy-- --=-yno3X/TN/X4+8dR4v14i Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYfsLohccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7nWGAP9nTofcEJEMgtNSxzs45ecCZcej BbFKDkvVtiwck6vcbQEAg8jm9pcP4lMLOrjOvR+O4xYJAPcZToy4p+GMRCoyqgk= =CdkT -----END PGP SIGNATURE----- --=-yno3X/TN/X4+8dR4v14i--