Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vbs4K-00F7Ab-1k for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 03:12:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vbs4J-00C1hg-1Z for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 03:12:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vbs4J-00C1hY-03 for pgsql-hackers@lists.postgresql.org; Sat, 03 Jan 2026 03:12:43 +0000 Received: from smtp.outgoing.loopia.se ([93.188.3.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vbs4H-004BHz-1A for pgsql-hackers@postgresql.org; Sat, 03 Jan 2026 03:12:43 +0000 Received: from s807.loopia.se (localhost [127.0.0.1]) by s807.loopia.se (Postfix) with ESMTP id AD7C4515396 for ; Sat, 03 Jan 2026 04:12:40 +0100 (CET) Received: from s934.loopia.se (unknown [172.22.191.5]) by s807.loopia.se (Postfix) with ESMTP id 9D95851551F; Sat, 03 Jan 2026 04:12:40 +0100 (CET) Received: from s473.loopia.se (unknown [172.22.191.5]) by s934.loopia.se (Postfix) with ESMTP id 92B5F7CEA73; Sat, 03 Jan 2026 04:12:40 +0100 (CET) X-Virus-Scanned: amavisd-new at amavis.loopia.se X-Spam-Flag: NO X-Spam-Score: -1.2 X-Spam-Level: X-Spam-Status: No, score=-1.2 tagged_above=-999 required=6.2 tests=[ALL_TRUSTED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1] autolearn=disabled Authentication-Results: s473.loopia.se (amavisd-new); dkim=pass (2048-bit key) header.d=proxel.se Received: from s981.loopia.se ([172.22.191.6]) by s473.loopia.se (s473.loopia.se [172.22.190.13]) (amavisd-new, port 10024) with UTF8LMTP id uygskKilunbs; Sat, 3 Jan 2026 04:12:40 +0100 (CET) X-Loopia-Auth: user X-Loopia-User: andreas@proxel.se X-Loopia-Originating-IP: 147.28.75.140 Received: from [192.168.0.121] (customer-147-28-75-140.stosn.net [147.28.75.140]) (Authenticated sender: andreas@proxel.se) by s981.loopia.se (Postfix) with ESMTPSA id DC63122B1619; Sat, 03 Jan 2026 04:12:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxel.se; s=loopiadkim1707418970; t=1767409959; bh=v0WtS5iS99TMbfhvy6lTFi3QDf1Gx7rZ8kkKuEDvoZo=; h=Date:Subject:To:References:From:In-Reply-To; b=MMRfMYgbQvnKJj6D2s5H1QZm1OE3Q19zmHHH178DQtn1MXOPn8hErBKGIhiBVkEGZ 1nqXVD02SQRxYVNelyGdZ9jDD7cM56C3HwYvvc0iyoavRvlqQmhbRzHPkjtlj3ComD t+30GHFO+X6t7dMw5vteTFpqqYL9QFMoIxULB/u2Xf75F9vHUGRdRtzwODE1Ka9fFo 6mfZHDPoWF8MvZvL3AsBMP/Pb9YoYnDYXlwMXNjcbdagL2mNvzSls54oAPjmDbFZuL YxesRh7GrrjLKvAfOLFdPst1HR5KZmYodcERsHoeQ4aFNJwVY34f4BTkCD4FLEUXt9 3JtCzeEjTzMAA== Content-Type: multipart/mixed; boundary="------------4yy2wSuqSth7ovonQNMjLpax" Message-ID: <5a010b27-8ed9-4739-86fe-1562b07ba564@proxel.se> Date: Sat, 3 Jan 2026 04:12:39 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Speed up ICU case conversion by using ucasemap_utf8To*() To: zengman , Jeff Davis , pgsql-hackers References: <167986ff-afcf-4542-94c6-61ee8474e138@proxel.se> <72c7c2b5848da44caddfe0f20f6c7ebc7c0c6e60.camel@j-davis.com> <4cfde442-25dd-495f-8d76-a23502ce17b8@proxel.se> <744b9998-4463-4be5-b60e-a960eeb43202@proxel.se> From: Andreas Karlsson Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------4yy2wSuqSth7ovonQNMjLpax Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 1/3/26 4:05 AM, zengman wrote: > I don't have any major objections, but I noticed a few minor details that might need a bit more tweaking. > > `signficant` -> `significant` > `realtively` -> `relatively` > `if (status != U_BUFFER_OVERFLOW_ERROR && U_FAILURE(status))` -> `if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR)` Fixed, thanks! Andreas --------------4yy2wSuqSth7ovonQNMjLpax Content-Type: text/x-patch; charset=UTF-8; name="v5-0001-Use-optimized-versions-of-ICU-case-conversion-for.patch" Content-Disposition: attachment; filename*0="v5-0001-Use-optimized-versions-of-ICU-case-conversion-for.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkMDFlMWFlN2MzYTkzNTNiM2MzM2MxODRlYWVkYjk1ZDA4YTU5OTQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZWFzIEthcmxzc29uIDxhbmRyZWFzQHByb3hl bC5zZT4KRGF0ZTogVHVlLCAxNyBEZWMgMjAyNCAyMjo0NzowMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjVdIFVzZSBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgSUNVIGNhc2UgY29udmVyc2lv biBmb3IgVVRGLTgKCkluc3RlYWQgb2YgY29udmVydGluZyB0byBhbmQgZnJvbSBVQ2hhciB3 aGVuIGRvaW5nIGNhc2UgY29udmVyc2lvbnMgd2UKdXNlIHRoZSBVVEYtOCB2ZXJzaW9ucyBv ZiB0aGUgZnVuY3Rpb25zLiBUaGlzIGNhbiBnaXZlIGEgc2lnbmlmaWNhbnQKc3BlZWR1cCwg MzAtNDAlLCBvbiBzaG9ydCB0byBtZWRpdW0gbGVuZ3RoIHN0cmluZ3MuCgpUaGUgb25seSBj b3N0IHdlIGluY3VyIGlzIHRoYXQgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIGNhc2VtYXAgb2Jq ZWN0IG9uCmxvY2FsZSBpbml0aWFsaXphdGlvbiBmb3IgVVRGLTggZGF0YWJhc2VzIGJ1dCB0 aGUgb2JqZWN0IGlzIHJlYWx0aXZlbHkKc21hbGwgYW5kIHRoZSBhc3N1bXB0aW9uIGlzIHRo YXQgbW9zdCB1c2VycyB3aWxsIGF0IHNvbWUgcG9pbnQgd2FudCB0bwpydW4gY2FzZSBjb252 ZXJzaW9uIGZ1bmN0aW9ucy4KCldoaWxlIGF0IGl0IHdlIGFsc28gcmVtb3ZlIHNvbWUgZHVw bGljYXRpb24gaW4gdGhlIG5vbi1VVEYtOCBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfaWN1LmMgfCAzMDAgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0K IHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgICAgfCAgIDIgKwogMiBmaWxl cyBjaGFuZ2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgOTQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMKaW5kZXggZGU4MDY0MmY5ZGMuLmFjMDE1 MjRiNTFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2lj dS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMKQEAgLTUy LDYgKzUyLDcgQEAgZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9p ZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAjaWZkZWYgVVNFX0lDVQogCiBl eHRlcm4gVUNvbGxhdG9yICpwZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cik7Citz dGF0aWMgVUNhc2VNYXAgKnBnX3VjYXNlbWFwX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cik7 CiAKIHN0YXRpYyBzaXplX3Qgc3RybG93ZXJfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0 c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xv Y2FsZV90IGxvY2FsZSk7CkBAIC02MSw2ICs2MiwxNCBAQCBzdGF0aWMgc2l6ZV90IHN0cnVw cGVyX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywK IAkJCQkJCSAgIHNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogc3RhdGlj IHNpemVfdCBzdHJmb2xkX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKIAkJCQkJCSAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2Fs ZSk7CitzdGF0aWMgc2l6ZV90IHN0cmxvd2VyX2ljdV91dGY4KGNoYXIgKmRlc3QsIHNpemVf dCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAorCQkJCQkJCQlzc2l6ZV90IHNyY2xlbiwg cGdfbG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRpYyBzaXplX3Qgc3RydGl0bGVfaWN1X3V0Zjgo Y2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkJ CXNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOworc3RhdGljIHNpemVfdCBz dHJ1cHBlcl9pY3VfdXRmOChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNo YXIgKnNyYywKKwkJCQkJCQkJc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7 CitzdGF0aWMgc2l6ZV90IHN0cmZvbGRfaWN1X3V0ZjgoY2hhciAqZGVzdCwgc2l6ZV90IGRl c3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBn X2xvY2FsZV90IGxvY2FsZSk7CiBzdGF0aWMgc2l6ZV90IGRvd25jYXNlX2lkZW50X2ljdShj aGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCiAJCQkJCQkJCSBz c2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKIHN0YXRpYyBpbnQJc3RybmNv bGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKQEAgLTExMSw5ICsxMjAs MTIgQEAgc3RhdGljIHNpemVfdCBpY3VfZnJvbV91Y2hhcihjaGFyICpkZXN0LCBzaXplX3Qg ZGVzdHNpemUsCiAJCQkJCQkJIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxl bl91Y2hhcik7CiBzdGF0aWMgdm9pZCBpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVD b2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYywKIAkJCQkJCQkJCQkgVUVycm9y Q29kZSAqc3RhdHVzKTsKLXN0YXRpYyBpbnQzMl90IGljdV9jb252ZXJ0X2Nhc2UoSUNVX0Nv bnZlcnRfRnVuYyBmdW5jLCBwZ19sb2NhbGVfdCBteWxvY2FsZSwKLQkJCQkJCQkJVUNoYXIg KipidWZmX2Rlc3QsIFVDaGFyICpidWZmX3NvdXJjZSwKLQkJCQkJCQkJaW50MzJfdCBsZW5f c291cmNlKTsKK3N0YXRpYyBpbnQzMl90IGljdV9jb252ZXJ0X2Nhc2UoSUNVX0NvbnZlcnRf RnVuYyBmdW5jLCBjaGFyICpkZXN0LAorCQkJCQkJCQlzaXplX3QgZGVzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKKwkJCQkJCQkJc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2Fs ZSk7CitzdGF0aWMgaW50MzJfdCBpY3VfY29udmVydF9jYXNlX3VjaGFyKElDVV9Db252ZXJ0 X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2NhbGUsCisJCQkJCQkJCQkgIFVDaGFyICoq YnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsCisJCQkJCQkJCQkgIGludDMyX3QgbGVu X3NvdXJjZSk7CiBzdGF0aWMgaW50MzJfdCB1X3N0clRvVGl0bGVfZGVmYXVsdF9CSShVQ2hh ciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAJCQkJCQkJCQkgICBjb25zdCBVQ2hh ciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmxv Y2FsZSwKQEAgLTE0MCw2ICsxNTIsOCBAQCB0b2xvd2VyX2ljdShwZ193Y2hhciB3YywgcGdf bG9jYWxlX3QgbG9jYWxlKQogCXJldHVybiB1X3RvbG93ZXIod2MpOwogfQogCitzdGF0aWMg aW50MzJfdCBpY3VfZm9sZGNhc2Vfb3B0aW9ucyhjb25zdCBjaGFyICpsb2NhbGUpOworCiBz dGF0aWMgY29uc3Qgc3RydWN0IGNvbGxhdGVfbWV0aG9kcyBjb2xsYXRlX21ldGhvZHNfaWN1 ID0gewogCS5zdHJuY29sbCA9IHN0cm5jb2xsX2ljdSwKIAkuc3Rybnhmcm0gPSBzdHJueGZy bV9pY3UsCkBAIC0yNDUsNiArMjU5LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3R5cGVf bWV0aG9kcyBjdHlwZV9tZXRob2RzX2ljdSA9IHsKIAkud2NfdG9sb3dlciA9IHRvbG93ZXJf aWN1LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0eXBlX21l dGhvZHNfaWN1X3V0ZjggPSB7CisJLnN0cmxvd2VyID0gc3RybG93ZXJfaWN1X3V0ZjgsCisJ LnN0cnRpdGxlID0gc3RydGl0bGVfaWN1X3V0ZjgsCisJLnN0cnVwcGVyID0gc3RydXBwZXJf aWN1X3V0ZjgsCisJLnN0cmZvbGQgPSBzdHJmb2xkX2ljdV91dGY4LAorCS5kb3duY2FzZV9p ZGVudCA9IGRvd25jYXNlX2lkZW50X2ljdSwKKwkud2NfaXNkaWdpdCA9IHdjX2lzZGlnaXRf aWN1LAorCS53Y19pc2FscGhhID0gd2NfaXNhbHBoYV9pY3UsCisJLndjX2lzYWxudW0gPSB3 Y19pc2FsbnVtX2ljdSwKKwkud2NfaXN1cHBlciA9IHdjX2lzdXBwZXJfaWN1LAorCS53Y19p c2xvd2VyID0gd2NfaXNsb3dlcl9pY3UsCisJLndjX2lzZ3JhcGggPSB3Y19pc2dyYXBoX2lj dSwKKwkud2NfaXNwcmludCA9IHdjX2lzcHJpbnRfaWN1LAorCS53Y19pc3B1bmN0ID0gd2Nf aXNwdW5jdF9pY3UsCisJLndjX2lzc3BhY2UgPSB3Y19pc3NwYWNlX2ljdSwKKwkud2NfaXN4 ZGlnaXQgPSB3Y19pc3hkaWdpdF9pY3UsCisJLndjX2lzY2FzZWQgPSB3Y19pc2Nhc2VkX2lj dSwKKwkud2NfdG91cHBlciA9IHRvdXBwZXJfaWN1LAorCS53Y190b2xvd2VyID0gdG9sb3dl cl9pY3UsCit9OworCiAvKgogICogSUNVIHN0aWxsIGRlcGVuZHMgb24gbGliYyBmb3IgY29t cGF0aWJpbGl0eSB3aXRoIGNlcnRhaW4gaGlzdG9yaWNhbAogICogYmVoYXZpb3IgZm9yIHNp bmdsZS1ieXRlIGVuY29kaW5ncy4gIFNlZSBkb3duY2FzZV9pZGVudF9pY3UoKS4KQEAgLTM0 NywxMCArMzgyLDE2IEBAIGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9y eUNvbnRleHQgY29udGV4dCkKIAlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IGZhbHNlOwogCXJl c3VsdC0+Y3R5cGVfaXNfYyA9IGZhbHNlOwogCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkg PT0gUEdfVVRGOCkKKwl7CisJCXJlc3VsdC0+aWN1LnVjYXNlbWFwID0gcGdfdWNhc2VtYXBf b3BlbihpY3Vsb2NzdHIpOwogCQlyZXN1bHQtPmNvbGxhdGUgPSAmY29sbGF0ZV9tZXRob2Rz X2ljdV91dGY4OworCQlyZXN1bHQtPmN0eXBlID0gJmN0eXBlX21ldGhvZHNfaWN1X3V0Zjg7 CisJfQogCWVsc2UKKwl7CiAJCXJlc3VsdC0+Y29sbGF0ZSA9ICZjb2xsYXRlX21ldGhvZHNf aWN1OwotCXJlc3VsdC0+Y3R5cGUgPSAmY3R5cGVfbWV0aG9kc19pY3U7CisJCXJlc3VsdC0+ Y3R5cGUgPSAmY3R5cGVfbWV0aG9kc19pY3U7CisJfQogCiAJcmV0dXJuIHJlc3VsdDsKICNl bHNlCkBAIC0zNjYsNDEgKzQwNywxOCBAQCBjcmVhdGVfcGdfbG9jYWxlX2ljdShPaWQgY29s bGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAjaWZkZWYgVVNFX0lDVQogCiAvKgotICog V3JhcHBlciBhcm91bmQgdWNvbF9vcGVuKCkgdG8gaGFuZGxlIEFQSSBkaWZmZXJlbmNlcyBm b3Igb2xkZXIgSUNVCi0gKiB2ZXJzaW9ucy4KLSAqCi0gKiBFbnN1cmUgdGhhdCBubyBwYXRo IGxlYWtzIGEgVUNvbGxhdG9yLgorICogSW4gSUNVIHZlcnNpb25zIDU0IGFuZCBlYXJsaWVy LCAidW5kIiBpcyBub3QgYSByZWNvZ25pemVkIHNwZWxsaW5nIG9mIHRoZQorICogcm9vdCBs b2NhbGUuIElmIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIGxvY2FsZSBpcyAidW5kIiwg cmVwbGFjZSB3aXRoCisgKiAicm9vdCIgYmVmb3JlIG9wZW5pbmcuCiAgKi8KLVVDb2xsYXRv ciAqCi1wZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cikKK3N0YXRpYyBjaGFyICoK K2ZpeF9pY3VfbG9jYWxlX3N0cihjb25zdCBjaGFyICpsb2Nfc3RyKQogewotCVVDb2xsYXRv ciAgKmNvbGxhdG9yOwotCVVFcnJvckNvZGUJc3RhdHVzOwotCWNvbnN0IGNoYXIgKm9yaWdf c3RyID0gbG9jX3N0cjsKLQljaGFyCSAgICpmaXhlZF9zdHIgPSBOVUxMOwotCi0JLyoKLQkg KiBNdXN0IG5ldmVyIG9wZW4gZGVmYXVsdCBjb2xsYXRvciwgYmVjYXVzZSBpdCBkZXBlbmRz IG9uIHRoZSBlbnZpcm9ubWVudAotCSAqIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLiBT aG91bGQgbm90IGhhcHBlbiwgYnV0IGNoZWNrIGhlcmUgdG8gY2F0Y2gKLQkgKiBidWdzIHRo YXQgbWlnaHQgYmUgaGFyZCB0byBjYXRjaCBvdGhlcndpc2UuCi0JICoKLQkgKiBOQjogdGhl IGRlZmF1bHQgY29sbGF0b3IgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjb2xsYXRvciBmb3Ig dGhlIHJvb3QKLQkgKiBsb2NhbGUuIFRoZSByb290IGxvY2FsZSBtYXkgYmUgc3BlY2lmaWVk IGFzIHRoZSBlbXB0eSBzdHJpbmcsICJ1bmQiLCBvcgotCSAqICJyb290Ii4gVGhlIGRlZmF1 bHQgY29sbGF0b3IgaXMgb3BlbmVkIGJ5IHBhc3NpbmcgTlVMTCB0byB1Y29sX29wZW4oKS4K LQkgKi8KLQlpZiAobG9jX3N0ciA9PSBOVUxMKQotCQllbG9nKEVSUk9SLCAib3BlbmluZyBk ZWZhdWx0IGNvbGxhdG9yIGlzIG5vdCBzdXBwb3J0ZWQiKTsKLQotCS8qCi0JICogSW4gSUNV IHZlcnNpb25zIDU0IGFuZCBlYXJsaWVyLCAidW5kIiBpcyBub3QgYSByZWNvZ25pemVkIHNw ZWxsaW5nIG9mCi0JICogdGhlIHJvb3QgbG9jYWxlLiBJZiB0aGUgZmlyc3QgY29tcG9uZW50 IG9mIHRoZSBsb2NhbGUgaXMgInVuZCIsIHJlcGxhY2UKLQkgKiB3aXRoICJyb290IiBiZWZv cmUgb3BlbmluZy4KLQkgKi8KIAlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NSkK IAl7CiAJCWNoYXIJCWxhbmdbVUxPQ19MQU5HX0NBUEFDSVRZXTsKKwkJVUVycm9yQ29kZSBz dGF0dXMgPSBVX1pFUk9fRVJST1I7CiAKLQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCQl1 bG9jX2dldExhbmd1YWdlKGxvY19zdHIsIGxhbmcsIFVMT0NfTEFOR19DQVBBQ0lUWSwgJnN0 YXR1cyk7CiAJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9TVFJJTkdf Tk9UX1RFUk1JTkFURURfV0FSTklORykKIAkJewpAQCAtNDEzLDE1ICs0MzEsNDkgQEAgcGdf dWNvbF9vcGVuKGNvbnN0IGNoYXIgKmxvY19zdHIpCiAJCWlmIChzdHJjbXAobGFuZywgInVu ZCIpID09IDApCiAJCXsKIAkJCWNvbnN0IGNoYXIgKnJlbWFpbmRlciA9IGxvY19zdHIgKyBz dHJsZW4oInVuZCIpOworCQkJY2hhcgkgICAqZml4ZWRfc3RyOwogCiAJCQlmaXhlZF9zdHIg PSBwYWxsb2Moc3RybGVuKCJyb290IikgKyBzdHJsZW4ocmVtYWluZGVyKSArIDEpOwogCQkJ c3RyY3B5KGZpeGVkX3N0ciwgInJvb3QiKTsKIAkJCXN0cmNhdChmaXhlZF9zdHIsIHJlbWFp bmRlcik7CiAKLQkJCWxvY19zdHIgPSBmaXhlZF9zdHI7CisJCQlyZXR1cm4gZml4ZWRfc3Ry OwogCQl9CiAJfQogCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3Vu ZCB1Y29sX29wZW4oKSB0byBoYW5kbGUgQVBJIGRpZmZlcmVuY2VzIGZvciBvbGRlciBJQ1UK KyAqIHZlcnNpb25zLgorICoKKyAqIEVuc3VyZSB0aGF0IG5vIHBhdGggbGVha3MgYSBVQ29s bGF0b3IuCisgKi8KK1VDb2xsYXRvciAqCitwZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9j X3N0cikKK3sKKwlVQ29sbGF0b3IgICpjb2xsYXRvcjsKKwlVRXJyb3JDb2RlCXN0YXR1czsK Kwljb25zdCBjaGFyICpvcmlnX3N0ciA9IGxvY19zdHI7CisJY2hhcgkgICAqZml4ZWRfc3Ry OworCisJLyoKKwkgKiBNdXN0IG5ldmVyIG9wZW4gZGVmYXVsdCBjb2xsYXRvciwgYmVjYXVz ZSBpdCBkZXBlbmRzIG9uIHRoZSBlbnZpcm9ubWVudAorCSAqIGFuZCBtYXkgY2hhbmdlIGF0 IGFueSB0aW1lLiBTaG91bGQgbm90IGhhcHBlbiwgYnV0IGNoZWNrIGhlcmUgdG8gY2F0Y2gK KwkgKiBidWdzIHRoYXQgbWlnaHQgYmUgaGFyZCB0byBjYXRjaCBvdGhlcndpc2UuCisJICoK KwkgKiBOQjogdGhlIGRlZmF1bHQgY29sbGF0b3IgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBj b2xsYXRvciBmb3IgdGhlIHJvb3QKKwkgKiBsb2NhbGUuIFRoZSByb290IGxvY2FsZSBtYXkg YmUgc3BlY2lmaWVkIGFzIHRoZSBlbXB0eSBzdHJpbmcsICJ1bmQiLCBvcgorCSAqICJyb290 Ii4gVGhlIGRlZmF1bHQgY29sbGF0b3IgaXMgb3BlbmVkIGJ5IHBhc3NpbmcgTlVMTCB0byB1 Y29sX29wZW4oKS4KKwkgKi8KKwlpZiAobG9jX3N0ciA9PSBOVUxMKQorCQllbG9nKEVSUk9S LCAib3BlbmluZyBkZWZhdWx0IGNvbGxhdG9yIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKworCWZp eGVkX3N0ciA9IGZpeF9pY3VfbG9jYWxlX3N0cihsb2Nfc3RyKTsKKwlpZiAoZml4ZWRfc3Ry KQorCQlsb2Nfc3RyID0gZml4ZWRfc3RyOworCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwog CWNvbGxhdG9yID0gdWNvbF9vcGVuKGxvY19zdHIsICZzdGF0dXMpOwogCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSkKQEAgLTQ1Niw2ICs1MDgsMzcgQEAgcGdfdWNvbF9vcGVuKGNvbnN0IGNo YXIgKmxvY19zdHIpCiAJcmV0dXJuIGNvbGxhdG9yOwogfQogCisvKgorICogV3JhcHBlciBh cm91bmQgdWNhc2VtYXBfb3BlbigpIHRvIGhhbmRsZSBBUEkgZGlmZmVyZW5jZXMgZm9yIG9s ZGVyIElDVQorICogdmVyc2lvbnMuCisgKgorICogQWRkaXRpb25hbGx5IG1ha2VzIHN1cmUg d2UgZ2V0IHRoZSByaWdodCBvcHRpb25zIGZvciBjYXNlIGZvbGRpbmcuCisgKi8KK3N0YXRp YyBVQ2FzZU1hcCAqCitwZ191Y2FzZW1hcF9vcGVuKGNvbnN0IGNoYXIgKmxvY19zdHIpCit7 CisJVUVycm9yQ29kZQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJVUNhc2VNYXAgICAqY2Fz ZW1hcDsKKwljb25zdCBjaGFyICpvcmlnX3N0ciA9IGxvY19zdHI7CisJY2hhcgkgICAqZml4 ZWRfc3RyOworCisJZml4ZWRfc3RyID0gZml4X2ljdV9sb2NhbGVfc3RyKGxvY19zdHIpOwor CWlmIChmaXhlZF9zdHIpCisJCWxvY19zdHIgPSBmaXhlZF9zdHI7CisKKwljYXNlbWFwID0g dWNhc2VtYXBfb3Blbihsb2Nfc3RyLCBpY3VfZm9sZGNhc2Vfb3B0aW9ucyhsb2Nfc3RyKSwg JnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJy bXNnKCJjb3VsZCBub3Qgb3BlbiBjYXNlbWFwIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCisJ CQkJCQlvcmlnX3N0ciwgdV9lcnJvck5hbWUoc3RhdHVzKSkpOworCisJaWYgKGZpeGVkX3N0 ciAhPSBOVUxMKQorCQlwZnJlZShmaXhlZF9zdHIpOworCisJcmV0dXJuIGNhc2VtYXA7Cit9 CisKIC8qCiAgKiBDcmVhdGUgYSBVQ29sbGF0b3Igd2l0aCB0aGUgZ2l2ZW4gbG9jYWxlIHN0 cmluZyBhbmQgcnVsZXMuCiAgKgpAQCAtNTI4LDgwICs2MTEsODQgQEAgc3RhdGljIHNpemVf dAogc3RybG93ZXJfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hh ciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0J aW50MzJfdAkJbGVuX3VjaGFyOwotCWludDMyX3QJCWxlbl9jb252OwotCVVDaGFyCSAgICpi dWZmX3VjaGFyOwotCVVDaGFyCSAgICpidWZmX2NvbnY7Ci0Jc2l6ZV90CQlyZXN1bHRfbGVu OwotCi0JbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBzcmMsIHNyY2xl bik7Ci0JbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9Mb3dlciwgbG9jYWxl LAotCQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOwotCXJlc3Vs dF9sZW4gPSBpY3VfZnJvbV91Y2hhcihkZXN0LCBkZXN0c2l6ZSwgYnVmZl9jb252LCBsZW5f Y29udik7Ci0JcGZyZWUoYnVmZl91Y2hhcik7Ci0JcGZyZWUoYnVmZl9jb252KTsKLQotCXJl dHVybiByZXN1bHRfbGVuOworCXJldHVybiBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9Mb3dl ciwgZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwogfQogCiBzdGF0aWMg c2l6ZV90CiBzdHJ0aXRsZV9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25z dCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkK IHsKLQlpbnQzMl90CQlsZW5fdWNoYXI7Ci0JaW50MzJfdAkJbGVuX2NvbnY7Ci0JVUNoYXIJ ICAgKmJ1ZmZfdWNoYXI7Ci0JVUNoYXIJICAgKmJ1ZmZfY29udjsKLQlzaXplX3QJCXJlc3Vs dF9sZW47Ci0KLQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1ZmZfdWNoYXIsIHNyYywg c3JjbGVuKTsKLQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2UodV9zdHJUb1RpdGxlX2Rl ZmF1bHRfQkksIGxvY2FsZSwKLQkJCQkJCQkJJmJ1ZmZfY29udiwgYnVmZl91Y2hhciwgbGVu X3VjaGFyKTsKLQlyZXN1bHRfbGVuID0gaWN1X2Zyb21fdWNoYXIoZGVzdCwgZGVzdHNpemUs IGJ1ZmZfY29udiwgbGVuX2NvbnYpOwotCXBmcmVlKGJ1ZmZfdWNoYXIpOwotCXBmcmVlKGJ1 ZmZfY29udik7Ci0KLQlyZXR1cm4gcmVzdWx0X2xlbjsKKwlyZXR1cm4gaWN1X2NvbnZlcnRf Y2FzZSh1X3N0clRvVGl0bGVfZGVmYXVsdF9CSSwgZGVzdCwgZGVzdHNpemUsIHNyYywgc3Jj bGVuLCBsb2NhbGUpOwogfQogCiBzdGF0aWMgc2l6ZV90CiBzdHJ1cHBlcl9pY3UoY2hhciAq ZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVu LAogCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlpbnQzMl90CQlsZW5fdWNoYXI7Ci0J aW50MzJfdAkJbGVuX2NvbnY7Ci0JVUNoYXIJICAgKmJ1ZmZfdWNoYXI7Ci0JVUNoYXIJICAg KmJ1ZmZfY29udjsKLQlzaXplX3QJCXJlc3VsdF9sZW47Ci0KLQlsZW5fdWNoYXIgPSBpY3Vf dG9fdWNoYXIoJmJ1ZmZfdWNoYXIsIHNyYywgc3JjbGVuKTsKLQlsZW5fY29udiA9IGljdV9j b252ZXJ0X2Nhc2UodV9zdHJUb1VwcGVyLCBsb2NhbGUsCi0JCQkJCQkJCSZidWZmX2NvbnYs IGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7Ci0JcmVzdWx0X2xlbiA9IGljdV9mcm9tX3VjaGFy KGRlc3QsIGRlc3RzaXplLCBidWZmX2NvbnYsIGxlbl9jb252KTsKLQlwZnJlZShidWZmX3Vj aGFyKTsKLQlwZnJlZShidWZmX2NvbnYpOwotCi0JcmV0dXJuIHJlc3VsdF9sZW47CisJcmV0 dXJuIGljdV9jb252ZXJ0X2Nhc2UodV9zdHJUb1VwcGVyLCBkZXN0LCBkZXN0c2l6ZSwgc3Jj LCBzcmNsZW4sIGxvY2FsZSk7CiB9CiAKIHN0YXRpYyBzaXplX3QKIHN0cmZvbGRfaWN1KGNo YXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNy Y2xlbiwKIAkJCXBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlpbnQzMl90CQlsZW5fdWNoYXI7 Ci0JaW50MzJfdAkJbGVuX2NvbnY7Ci0JVUNoYXIJICAgKmJ1ZmZfdWNoYXI7Ci0JVUNoYXIJ ICAgKmJ1ZmZfY29udjsKLQlzaXplX3QJCXJlc3VsdF9sZW47CisJcmV0dXJuIGljdV9jb252 ZXJ0X2Nhc2UodV9zdHJGb2xkQ2FzZV9kZWZhdWx0LCBkZXN0LCBkZXN0c2l6ZSwgc3JjLCBz cmNsZW4sIGxvY2FsZSk7Cit9CiAKLQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1ZmZf dWNoYXIsIHNyYywgc3JjbGVuKTsKLQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2UodV9z dHJGb2xkQ2FzZV9kZWZhdWx0LCBsb2NhbGUsCi0JCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZf dWNoYXIsIGxlbl91Y2hhcik7Ci0JcmVzdWx0X2xlbiA9IGljdV9mcm9tX3VjaGFyKGRlc3Qs IGRlc3RzaXplLCBidWZmX2NvbnYsIGxlbl9jb252KTsKLQlwZnJlZShidWZmX3VjaGFyKTsK LQlwZnJlZShidWZmX2NvbnYpOworc3RhdGljIHNpemVfdAorc3RybG93ZXJfaWN1X3V0Zjgo Y2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qg c3JjbGVuLAorCQkJCSAgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCVVFcnJvckNvZGUJc3Rh dHVzID0gVV9aRVJPX0VSUk9SOworCWludDMyX3QJCW5lZWRlZDsKIAotCXJldHVybiByZXN1 bHRfbGVuOworCW5lZWRlZCA9IHVjYXNlbWFwX3V0ZjhUb0xvd2VyKGxvY2FsZS0+aWN1LnVj YXNlbWFwLCBkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sICZzdGF0dXMpOworCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ip CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJybXNnKCJjYXNlIGNvbnZlcnNpb24gZmFpbGVk OiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKTsKKwlyZXR1cm4gbmVlZGVkOworfQorCitz dGF0aWMgc2l6ZV90CitzdHJ0aXRsZV9pY3VfdXRmOChjaGFyICpkZXN0LCBzaXplX3QgZGVz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkJICBwZ19sb2Nh bGVfdCBsb2NhbGUpCit7CisJVUVycm9yQ29kZQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJ aW50MzJfdAkJbmVlZGVkOworCisJbmVlZGVkID0gdWNhc2VtYXBfdXRmOFRvVGl0bGUobG9j YWxlLT5pY3UudWNhc2VtYXAsIGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbiwgJnN0YXR1 cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVS RkxPV19FUlJPUikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJtc2coImNhc2UgY29udmVy c2lvbiBmYWlsZWQ6ICVzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpOworCXJldHVybiBuZWVk ZWQ7Cit9CisKK3N0YXRpYyBzaXplX3QKK3N0cnVwcGVyX2ljdV91dGY4KGNoYXIgKmRlc3Qs IHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJ CQkgIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlVRXJyb3JDb2RlCXN0YXR1cyA9IFVfWkVS T19FUlJPUjsKKwlpbnQzMl90CQluZWVkZWQ7CisKKwluZWVkZWQgPSB1Y2FzZW1hcF91dGY4 VG9VcHBlcihsb2NhbGUtPmljdS51Y2FzZW1hcCwgZGVzdCwgZGVzdHNpemUsIHNyYywgc3Jj bGVuLCAmc3RhdHVzKTsKKwlpZiAoVV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IFVf QlVGRkVSX09WRVJGTE9XX0VSUk9SKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycm1zZygi Y2FzZSBjb252ZXJzaW9uIGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSk7CisJ cmV0dXJuIG5lZWRlZDsKK30KKworc3RhdGljIHNpemVfdAorc3RyZm9sZF9pY3VfdXRmOChj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBz cmNsZW4sCisJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlVRXJyb3JDb2RlCXN0YXR1 cyA9IFVfWkVST19FUlJPUjsKKwlpbnQzMl90CQluZWVkZWQ7CisKKwluZWVkZWQgPSB1Y2Fz ZW1hcF91dGY4Rm9sZENhc2UobG9jYWxlLT5pY3UudWNhc2VtYXAsIGRlc3QsIGRlc3RzaXpl LCBzcmMsIHNyY2xlbiwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0 YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJtc2coImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6ICVzIiwgdV9lcnJvck5hbWUoc3Rh dHVzKSkpOworCXJldHVybiBuZWVkZWQ7CiB9CiAKIC8qCkBAIC04MjksOCArOTE2LDI4IEBA IGljdV9mcm9tX3VjaGFyKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgVUNo YXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuCiB9CiAKIHN0YXRpYyBpbnQzMl90Ci1pY3Vf Y29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2Nh bGUsCi0JCQkJIFVDaGFyICoqYnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMy X3QgbGVuX3NvdXJjZSkKK2ljdV9jb252ZXJ0X2Nhc2UoSUNVX0NvbnZlcnRfRnVuYyBmdW5j LCBjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJIGNvbnN0IGNoYXIgKnNyYywg c3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlpbnQzMl90CQlsZW5f dWNoYXI7CisJaW50MzJfdAkJbGVuX2NvbnY7CisJVUNoYXIJICAgKmJ1ZmZfdWNoYXI7CisJ VUNoYXIJICAgKmJ1ZmZfY29udjsKKwlzaXplX3QJCXJlc3VsdF9sZW47CisKKwlsZW5fdWNo YXIgPSBpY3VfdG9fdWNoYXIoJmJ1ZmZfdWNoYXIsIHNyYywgc3JjbGVuKTsKKwlsZW5fY29u diA9IGljdV9jb252ZXJ0X2Nhc2VfdWNoYXIoZnVuYywgbG9jYWxlLCAmYnVmZl9jb252LAor CQkJCQkJCQkJICBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOworCXJlc3VsdF9sZW4gPSBpY3Vf ZnJvbV91Y2hhcihkZXN0LCBkZXN0c2l6ZSwgYnVmZl9jb252LCBsZW5fY29udik7CisJcGZy ZWUoYnVmZl91Y2hhcik7CisJcGZyZWUoYnVmZl9jb252KTsKKworCXJldHVybiByZXN1bHRf bGVuOworfQorCitzdGF0aWMgaW50MzJfdAoraWN1X2NvbnZlcnRfY2FzZV91Y2hhcihJQ1Vf Q29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLAorCQkJCQkgICBVQ2hh ciAqKmJ1ZmZfZGVzdCwgVUNoYXIgKmJ1ZmZfc291cmNlLCBpbnQzMl90IGxlbl9zb3VyY2Up CiB7CiAJVUVycm9yQ29kZQlzdGF0dXM7CiAJaW50MzJfdAkJbGVuX2Rlc3Q7CkBAIC04NzAs MTAgKzk3NywxNyBAQCB1X3N0ckZvbGRDYXNlX2RlZmF1bHQoVUNoYXIgKmRlc3QsIGludDMy X3QgZGVzdENhcGFjaXR5LAogCQkJCQkgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3Jj TGVuZ3RoLAogCQkJCQkgIGNvbnN0IGNoYXIgKmxvY2FsZSwKIAkJCQkJICBVRXJyb3JDb2Rl ICpwRXJyb3JDb2RlKQoreworCXJldHVybiB1X3N0ckZvbGRDYXNlKGRlc3QsIGRlc3RDYXBh Y2l0eSwgc3JjLCBzcmNMZW5ndGgsCisJCQkJCQkgaWN1X2ZvbGRjYXNlX29wdGlvbnMobG9j YWxlKSwgcEVycm9yQ29kZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90CitpY3VfZm9sZGNhc2Vf b3B0aW9ucyhjb25zdCBjaGFyICpsb2NhbGUpCiB7CiAJdWludDMyCQlvcHRpb25zID0gVV9G T0xEX0NBU0VfREVGQVVMVDsKIAljaGFyCQlsYW5nWzNdOwotCVVFcnJvckNvZGUJc3RhdHVz OworCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCiAJLyoKIAkgKiBVbmxp a2UgdGhlIElDVSBBUElzIGZvciBsb3dlcmNhc2luZywgdGl0bGVjYXNpbmcsIGFuZCB1cHBl cmNhc2luZywgY2FzZQpAQCAtODgxLDcgKzk5NSw2IEBAIHVfc3RyRm9sZENhc2VfZGVmYXVs dChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAJICogb3B0aW9uIHJlbGV2 YW50IHRvIFR1cmtpYyBsYW5ndWFnZXMgJ2F6JyBhbmQgJ3RyJzsgY2hlY2sgZm9yIHRob3Nl CiAJICogbGFuZ3VhZ2VzIHRvIGVuYWJsZSB0aGUgb3B0aW9uLgogCSAqLwotCXN0YXR1cyA9 IFVfWkVST19FUlJPUjsKIAl1bG9jX2dldExhbmd1YWdlKGxvY2FsZSwgbGFuZywgMywgJnN0 YXR1cyk7CiAJaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKQogCXsKQEAgLTg5Myw4ICsxMDA2LDcg QEAgdV9zdHJGb2xkQ2FzZV9kZWZhdWx0KFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBh Y2l0eSwKIAkJCW9wdGlvbnMgPSBVX0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSTsKIAl9 CiAKLQlyZXR1cm4gdV9zdHJGb2xkQ2FzZShkZXN0LCBkZXN0Q2FwYWNpdHksIHNyYywgc3Jj TGVuZ3RoLAotCQkJCQkJIG9wdGlvbnMsIHBFcnJvckNvZGUpOworCXJldHVybiBvcHRpb25z OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCBiMWVlNWZiMGVmNS4uNDY1 ZjE3MGJhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAj dW5kZWYgVV9TSE9XX0NQTFVTUExVU19IRUFERVJfQVBJCiAjZGVmaW5lIFVfU0hPV19DUExV U1BMVVNfSEVBREVSX0FQSSAwCiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjaW5jbHVk ZSA8dW5pY29kZS91Y2FzZW1hcC5oPgogI2VuZGlmCiAKIC8qIHVzZSBmb3IgbGliYyBsb2Nh bGUgbmFtZXMgKi8KQEAgLTE2OCw2ICsxNjksNyBAQCBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVj dAogCQkJY29uc3QgY2hhciAqbG9jYWxlOwogCQkJVUNvbGxhdG9yICAqdWNvbDsKIAkJCWxv Y2FsZV90CWx0OworCQkJVUNhc2VNYXAgICAqdWNhc2VtYXA7CiAJCX0JCQlpY3U7CiAjZW5k aWYKIAl9OwotLSAKMi40Ny4zCgo= --------------4yy2wSuqSth7ovonQNMjLpax--