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 1viaFu-00AOqA-1X for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 15:36:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1viaFt-007qTQ-1j for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 15:36:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1viaFs-007qTI-3D for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 15:36:25 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viaFq-001c82-0b for pgsql-hackers@postgresql.org; Wed, 21 Jan 2026 15:36:24 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-47edffe5540so59349145e9.0 for ; Wed, 21 Jan 2026 07:36:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769009781; x=1769614581; darn=postgresql.org; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=KYPY22lo3PP+J9zcZ1Yb4dG3+pmPX3bAeOaOUtbjT1Y=; b=H7MCPUUwCzJ28S+RVPNOxiDzfxXsiUeYEOdmOPu2QQK3M1cWOAPWVpWAZ6HKTHxr1r DYetumpoP6WKi0iQ6VxCBZ8rM9AbVHfx43BmlDktQkzBXHXvviA4UtMbsPlSqxHjzbpM sgTXDbbkmVXTaimjac1+LkrK9D9r2DE2Pb4X1lDmBVHHrTBCvTiTLrhpLAMD3o88f0sa PpfcfiyZkg54JtKmwq+WkdgM+Ur37GHfw/Hi0n15ptbuq9cAW0PiIIrtkS/wbCVGtbtH Gi/AWANlC6k/O+AOdK5JCYM2TI6YSdk7pxLOv4xEbPbkA4fOow8J9DRbmDX9av40b2rU euvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769009781; x=1769614581; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=KYPY22lo3PP+J9zcZ1Yb4dG3+pmPX3bAeOaOUtbjT1Y=; b=FQqdMM86bUvw25ntwLyuAa6qAsAmUM+CMZSD4+Q+oghSXMBBmVOU/2zjO3Rxcznk83 rt3QVqLyxxAe+3dfgA/2V6TzBd3ICMBx4GtQvN7oA/W7J8IwoLmd+ULJNwruEIHwIUIR e94Tu9jdaWp2VCEYA7ldCWLW04qh5yivH+yxsva7eiig3UVV3i5bdXxmHF6qbKQTPrX6 oN8XaX3OkT2xI6p2maorPia74h46BXfWc0sn06LkT/3FusYvlJ7tcirTr+VAcfWTGL7F DwZ1RmRTC05GoCq9A/mGL8z25kL29cqGflESyu3MhdVaGsMzPQOa0xUIYdTT3i8JM5FK sLiA== X-Gm-Message-State: AOJu0YxQLkYB3EWAlQrVC1pyQR4+s74Hobzk3UQ4Bii9HqUvxWe1E9TD EB/gx7BEPY3AYbZD4NIB5cAN8N3wBiAgOkaCcEwuUDAIR7msxqI63YN8X+pNDw== X-Gm-Gg: AZuq6aJbip4qd+Ebj4O78BGE/aqH2JHJI5LVGGCjOKn4YgOx2JjrYwzj06sFD7cyp1I UapjTk+BKoP7s1aHhiYc7xNT/hNNCMBrzQaaW+NxLYbDrU0xtEkYi1tDuEcGCAjbaOGk9vAOQwr 5vGSUQQU5ArlvxLOWX7Ke6jGNum7KgEfhLHw70/rWtP7Z2znwUKjRb0WiPiSEzqnLklV6O0GXO4 RbOz7vwKOcij8m4KUnCLqFcPGf4IcSgry3OjZsfZn3o0nUchJFAVFzpRLassbAhEtFPHiRFH0Tx IW8fbofTKRs+hEqKd3PdoqPskJg5bpS5FGCYaBSHiI4y05afepAXHLoXhzffFE5N7nOitR9IG0Y 7rEybzhrEGCnjPKBWF7utZoxgmATKyrYeCOAAOqANeWnq4n/8COSN76SGnQebPeni1cUCb2ZwJL z/z2qYVyiLh6H6N3N+mDdDJ6Y= X-Received: by 2002:a05:600c:821b:b0:47e:de9c:92ec with SMTP id 5b1f17b1804b1-4803e7a39cdmr95902175e9.14.1769009780887; Wed, 21 Jan 2026 07:36:20 -0800 (PST) Received: from [192.168.2.32] ([147.161.235.4]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f428acae8sm373306135e9.4.2026.01.21.07.36.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Jan 2026 07:36:20 -0800 (PST) Content-Type: multipart/mixed; boundary="------------dzCRAfQv109V4yhlLJVdVwmP" Message-ID: Date: Wed, 21 Jan 2026 16:36:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: David Geier Subject: Use correct collation in pg_trgm To: pgsql-hackers , Heikki Linnakangas 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. --------------dzCRAfQv109V4yhlLJVdVwmP Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi hackers, In thread [1] we found that pg_trgm always uses DEFAULT_COLLATION_OID for converting trigrams to lower-case. Here are some examples where today the collation is ignored: CREATE EXSTENSION pg_trgm; CREATE COLLATION turkish (provider = libc, locale = 'tr_TR.utf8'); postgres=# SELECT show_trgm('ISTANBUL' COLLATE "turkish"); show_trgm --------------------------------------------- {" i"," is",anb,bul,ist,nbu,sta,tan,"ul "} CREATE TABLE test(col TEXT COLLATE "turkish"); INSERT INTO test VALUES ('ISTANBUL'); postgres=# select show_trgm(col) FROM test; show_trgm --------------------------------------------- {" i"," is",anb,bul,ist,nbu,sta,tan,"ul "} postgres=# SELECT similarity('ıstanbul' COLLATE "turkish", 'ISTANBUL' COLLATE "turkish"); similarity ------------ 0.5 If the database is initialized via initdb --locale="tr_TR.utf8", the output changes: postgres=# SELECT show_trgm('ISTANBUL'); show_trgm -------------------------------------------------------- {0xf31e1a,0xfe581d,0x3efd30,anb,bul,nbu,sta,tan,"ul "} and postgres=# select show_trgm(col) FROM test; show_trgm -------------------------------------------------------- {0xf31e1a,0xfe581d,0x3efd30,anb,bul,nbu,sta,tan,"ul "} postgres=# SELECT similarity('ıstanbul' COLLATE "turkish", 'ISTANBUL' COLLATE "turkish"); similarity ------------ 1 tr_TR.utf8 converts capital I to ı which is a multibyte character, while my default collation converts I to i. The attached patch attempts to fix that. I grepped for all occurrences of DEFAULT_COLLATION_OID in contrib/pg_trgm and use the function's collation OID instead DEFAULT_COLLATION_OID. The corresponding regression tests pass. [1] https://www.postgresql.org/message-id/e5dd01c6-c469-405d-aea2-feca0b2dc34d%40gmail.com -- David Geier --------------dzCRAfQv109V4yhlLJVdVwmP Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Use-correct-collation-in-pg_trgm.patch" Content-Disposition: attachment; filename="v1-0001-Use-correct-collation-in-pg_trgm.patch" Content-Transfer-Encoding: base64 RnJvbSAzOTQ3NjJhYjQ5Y2FlNTBhNzkyYzYyMGE2ZTkzOTNhNTNmMmQ0NzZhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAyMSBKYW4gMjAyNiAxNDo1NDoyOCArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjFdIFVzZSBjb3JyZWN0IGNvbGxhdGlvbiBpbiBwZ190cmdtCgotLS0KIGNvbnRyaWIv cGdfdHJnbS90cmdtLmggICAgICAgIHwgIDQgKy0tCiBjb250cmliL3BnX3RyZ20vdHJnbV9n aW4uYyAgICB8ICA3ICsrLS0KIGNvbnRyaWIvcGdfdHJnbS90cmdtX2dpc3QuYyAgIHwgMTAg KysrLS0tCiBjb250cmliL3BnX3RyZ20vdHJnbV9vcC5jICAgICB8IDYwICsrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBjb250cmliL3BnX3RyZ20vdHJnbV9yZWdleHAu YyB8IDIwICsrKysrKy0tLS0tLQogNSBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCsp LCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3RyZ20vdHJnbS5o IGIvY29udHJpYi9wZ190cmdtL3RyZ20uaAppbmRleCBjYTAxNzU4NTM2OS4uMTQ3ZWVmYWEz YzYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdHJnbS90cmdtLmgKKysrIGIvY29udHJpYi9w Z190cmdtL3RyZ20uaApAQCAtMTE5LDggKzExOSw4IEBAIGV4dGVybiBkb3VibGUgc3RyaWN0 X3dvcmRfc2ltaWxhcml0eV90aHJlc2hvbGQ7CiBleHRlcm4gZG91YmxlIGluZGV4X3N0cmF0 ZWd5X2dldF9saW1pdChTdHJhdGVneU51bWJlciBzdHJhdGVneSk7CiBleHRlcm4gdWludDMy IHRyZ20yaW50KHRyZ20gKnB0cik7CiBleHRlcm4gdm9pZCBjb21wYWN0X3RyaWdyYW0odHJn bSAqdHB0ciwgY2hhciAqc3RyLCBpbnQgYnl0ZWxlbik7Ci1leHRlcm4gVFJHTSAqZ2VuZXJh dGVfdHJnbShjaGFyICpzdHIsIGludCBzbGVuKTsKLWV4dGVybiBUUkdNICpnZW5lcmF0ZV93 aWxkY2FyZF90cmdtKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNsZW4pOworZXh0ZXJuIFRSR00g KmdlbmVyYXRlX3RyZ20oY2hhciAqc3RyLCBpbnQgc2xlbiwgT2lkIGNvbGxhdGlvbik7Citl eHRlcm4gVFJHTSAqZ2VuZXJhdGVfd2lsZGNhcmRfdHJnbShjb25zdCBjaGFyICpzdHIsIGlu dCBzbGVuLCBPaWQgY29sbGF0aW9uKTsKIGV4dGVybiBmbG9hdDQgY250X3NtbChUUkdNICp0 cmcxLCBUUkdNICp0cmcyLCBib29sIGluZXhhY3QpOwogZXh0ZXJuIGJvb2wgdHJnbV9jb250 YWluZWRfYnkoVFJHTSAqdHJnMSwgVFJHTSAqdHJnMik7CiBleHRlcm4gYm9vbCAqdHJnbV9w cmVzZW5jZV9tYXAoVFJHTSAqcXVlcnksIFRSR00gKmtleSk7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3RyZ20vdHJnbV9naW4uYyBiL2NvbnRyaWIvcGdfdHJnbS90cmdtX2dpbi5jCmlu ZGV4IDY2ZmY2YWRkZTk5Li4zMjYwYzE0NTcxZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ190 cmdtL3RyZ21fZ2luLmMKKysrIGIvY29udHJpYi9wZ190cmdtL3RyZ21fZ2luLmMKQEAgLTQy LDcgKzQyLDcgQEAgZ2luX2V4dHJhY3RfdmFsdWVfdHJnbShQR19GVU5DVElPTl9BUkdTKQog CiAJKm5lbnRyaWVzID0gMDsKIAotCXRyZyA9IGdlbmVyYXRlX3RyZ20oVkFSREFUQV9BTlko dmFsKSwgVkFSU0laRV9BTllfRVhIRFIodmFsKSk7CisJdHJnID0gZ2VuZXJhdGVfdHJnbShW QVJEQVRBX0FOWSh2YWwpLCBWQVJTSVpFX0FOWV9FWEhEUih2YWwpLCBQR19HRVRfQ09MTEFU SU9OKCkpOwogCXRyZ2xlbiA9IEFSUk5FTEVNKHRyZyk7CiAKIAlpZiAodHJnbGVuID4gMCkK QEAgLTkxLDcgKzkxLDcgQEAgZ2luX2V4dHJhY3RfcXVlcnlfdHJnbShQR19GVU5DVElPTl9B UkdTKQogCQljYXNlIFdvcmRTaW1pbGFyaXR5U3RyYXRlZ3lOdW1iZXI6CiAJCWNhc2UgU3Ry aWN0V29yZFNpbWlsYXJpdHlTdHJhdGVneU51bWJlcjoKIAkJY2FzZSBFcXVhbFN0cmF0ZWd5 TnVtYmVyOgotCQkJdHJnID0gZ2VuZXJhdGVfdHJnbShWQVJEQVRBX0FOWSh2YWwpLCBWQVJT SVpFX0FOWV9FWEhEUih2YWwpKTsKKwkJCXRyZyA9IGdlbmVyYXRlX3RyZ20oVkFSREFUQV9B TlkodmFsKSwgVkFSU0laRV9BTllfRVhIRFIodmFsKSwgUEdfR0VUX0NPTExBVElPTigpKTsK IAkJCWJyZWFrOwogCQljYXNlIElMaWtlU3RyYXRlZ3lOdW1iZXI6CiAjaWZuZGVmIElHTk9S RUNBU0UKQEAgLTEwNSw3ICsxMDUsOCBAQCBnaW5fZXh0cmFjdF9xdWVyeV90cmdtKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCQkgKiBwb3RlbnRpYWxseS1tYXRjaGluZyBzdHJpbmcgbXVzdCBp bmNsdWRlLgogCQkJICovCiAJCQl0cmcgPSBnZW5lcmF0ZV93aWxkY2FyZF90cmdtKFZBUkRB VEFfQU5ZKHZhbCksCi0JCQkJCQkJCQkJIFZBUlNJWkVfQU5ZX0VYSERSKHZhbCkpOworCQkJ CQkJCQkJCSBWQVJTSVpFX0FOWV9FWEhEUih2YWwpLAorCQkJCQkJCQkJCSBQR19HRVRfQ09M TEFUSU9OKCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgUmVnRXhwSUNhc2VTdHJhdGVneU51bWJl cjoKICNpZm5kZWYgSUdOT1JFQ0FTRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ190cmdtL3Ry Z21fZ2lzdC5jIGIvY29udHJpYi9wZ190cmdtL3RyZ21fZ2lzdC5jCmluZGV4IDVjN2RlYjEw M2E2Li4yN2RhMmY1ZDZjMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ190cmdtL3RyZ21fZ2lz dC5jCisrKyBiL2NvbnRyaWIvcGdfdHJnbS90cmdtX2dpc3QuYwpAQCAtMTIzLDcgKzEyMyw3 IEBAIGd0cmdtX2NvbXByZXNzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVRSR00JICAgKnJlczsK IAkJdGV4dAkgICAqdmFsID0gRGF0dW1HZXRUZXh0UFAoZW50cnktPmtleSk7CiAKLQkJcmVz ID0gZ2VuZXJhdGVfdHJnbShWQVJEQVRBX0FOWSh2YWwpLCBWQVJTSVpFX0FOWV9FWEhEUih2 YWwpKTsKKwkJcmVzID0gZ2VuZXJhdGVfdHJnbShWQVJEQVRBX0FOWSh2YWwpLCBWQVJTSVpF X0FOWV9FWEhEUih2YWwpLCBQR19HRVRfQ09MTEFUSU9OKCkpOwogCQlyZXR2YWwgPSBwYWxs b2Nfb2JqZWN0KEdJU1RFTlRSWSk7CiAJCWdpc3RlbnRyeWluaXQoKnJldHZhbCwgUG9pbnRl ckdldERhdHVtKHJlcyksCiAJCQkJCSAgZW50cnktPnJlbCwgZW50cnktPnBhZ2UsCkBAIC0y NDEsNyArMjQxLDggQEAgZ3RyZ21fY29uc2lzdGVudChQR19GVU5DVElPTl9BUkdTKQogCQkJ Y2FzZSBTdHJpY3RXb3JkU2ltaWxhcml0eVN0cmF0ZWd5TnVtYmVyOgogCQkJY2FzZSBFcXVh bFN0cmF0ZWd5TnVtYmVyOgogCQkJCXF0cmcgPSBnZW5lcmF0ZV90cmdtKFZBUkRBVEEocXVl cnkpLAotCQkJCQkJCQkJIHF1ZXJ5c2l6ZSAtIFZBUkhEUlNaKTsKKwkJCQkJCQkJCSBxdWVy eXNpemUgLSBWQVJIRFJTWiwKKwkJCQkJCQkJCSBQR19HRVRfQ09MTEFUSU9OKCkpOwogCQkJ CWJyZWFrOwogCQkJY2FzZSBJTGlrZVN0cmF0ZWd5TnVtYmVyOgogI2lmbmRlZiBJR05PUkVD QVNFCkBAIC0yNTAsNyArMjUxLDggQEAgZ3RyZ21fY29uc2lzdGVudChQR19GVU5DVElPTl9B UkdTKQogCQkJCS8qIEZBTEwgVEhSVSAqLwogCQkJY2FzZSBMaWtlU3RyYXRlZ3lOdW1iZXI6 CiAJCQkJcXRyZyA9IGdlbmVyYXRlX3dpbGRjYXJkX3RyZ20oVkFSREFUQShxdWVyeSksCi0J CQkJCQkJCQkJCSAgcXVlcnlzaXplIC0gVkFSSERSU1opOworCQkJCQkJCQkJCQkgIHF1ZXJ5 c2l6ZSAtIFZBUkhEUlNaLAorCQkJCQkJCQkJCQkgIFBHX0dFVF9DT0xMQVRJT04oKSk7CiAJ CQkJYnJlYWs7CiAJCQljYXNlIFJlZ0V4cElDYXNlU3RyYXRlZ3lOdW1iZXI6CiAjaWZuZGVm IElHTk9SRUNBU0UKQEAgLTQ3Myw3ICs0NzUsNyBAQCBndHJnbV9kaXN0YW5jZShQR19GVU5D VElPTl9BUkdTKQogCXsKIAkJY2hhcgkgICAqbmV3Y2FjaGU7CiAKLQkJcXRyZyA9IGdlbmVy YXRlX3RyZ20oVkFSREFUQShxdWVyeSksIHF1ZXJ5c2l6ZSAtIFZBUkhEUlNaKTsKKwkJcXRy ZyA9IGdlbmVyYXRlX3RyZ20oVkFSREFUQShxdWVyeSksIHF1ZXJ5c2l6ZSAtIFZBUkhEUlNa LCBQR19HRVRfQ09MTEFUSU9OKCkpOwogCiAJCW5ld2NhY2hlID0gTWVtb3J5Q29udGV4dEFs bG9jKGZjaW5mby0+ZmxpbmZvLT5mbl9tY3h0LAogCQkJCQkJCQkJICBNQVhBTElHTihxdWVy eXNpemUpICsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMgYi9jb250 cmliL3BnX3RyZ20vdHJnbV9vcC5jCmluZGV4IDgxMTgyYTE1ZTA3Li5kNGM3NWNhZWZmOSAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ190cmdtL3RyZ21fb3AuYworKysgYi9jb250cmliL3Bn X3RyZ20vdHJnbV9vcC5jCkBAIC0zMjQsNyArMzI0LDcgQEAgbWFrZV90cmlncmFtcyh0cmdt ICp0cHRyLCBjaGFyICpzdHIsIGludCBieXRlbGVuLCBpbnQgY2hhcmxlbikKICAqIFJldHVy bnMgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQgYXJyYXkuCiAgKi8KIHN0YXRpYyBpbnQKLWdl bmVyYXRlX3RyZ21fb25seSh0cmdtICp0cmcsIGNoYXIgKnN0ciwgaW50IHNsZW4sIFRyZ21C b3VuZCAqYm91bmRzKQorZ2VuZXJhdGVfdHJnbV9vbmx5KHRyZ20gKnRyZywgY2hhciAqc3Ry LCBpbnQgc2xlbiwgT2lkIGNvbGxhdGlvbiwgVHJnbUJvdW5kICpib3VuZHMpCiB7CiAJdHJn bQkgICAqdHB0cjsKIAljaGFyCSAgICpidWY7CkBAIC0zNTIsNyArMzUyLDcgQEAgZ2VuZXJh dGVfdHJnbV9vbmx5KHRyZ20gKnRyZywgY2hhciAqc3RyLCBpbnQgc2xlbiwgVHJnbUJvdW5k ICpib3VuZHMpCiAJd2hpbGUgKChid29yZCA9IGZpbmRfd29yZChld29yZCwgc2xlbiAtIChl d29yZCAtIHN0ciksICZld29yZCwgJmNoYXJsZW4pKSAhPSBOVUxMKQogCXsKICNpZmRlZiBJ R05PUkVDQVNFCi0JCWJ3b3JkID0gc3RyX3RvbG93ZXIoYndvcmQsIGV3b3JkIC0gYndvcmQs IERFRkFVTFRfQ09MTEFUSU9OX09JRCk7CisJCWJ3b3JkID0gc3RyX3RvbG93ZXIoYndvcmQs IGV3b3JkIC0gYndvcmQsIGNvbGxhdGlvbik7CiAJCWJ5dGVsZW4gPSBzdHJsZW4oYndvcmQp OwogI2Vsc2UKIAkJYnl0ZWxlbiA9IGV3b3JkIC0gYndvcmQ7CkBAIC00MDUsNyArNDA1LDcg QEAgcHJvdGVjdF9vdXRfb2ZfbWVtKGludCBzbGVuKQogICogUmV0dXJucyB0aGUgc29ydGVk IGFycmF5IG9mIHVuaXF1ZSB0cmlncmFtcy4KICAqLwogVFJHTSAqCi1nZW5lcmF0ZV90cmdt KGNoYXIgKnN0ciwgaW50IHNsZW4pCitnZW5lcmF0ZV90cmdtKGNoYXIgKnN0ciwgaW50IHNs ZW4sIE9pZCBjb2xsYXRpb24pCiB7CiAJVFJHTQkgICAqdHJnOwogCWludAkJCWxlbjsKQEAg LTQxNSw3ICs0MTUsNyBAQCBnZW5lcmF0ZV90cmdtKGNoYXIgKnN0ciwgaW50IHNsZW4pCiAJ dHJnID0gKFRSR00gKikgcGFsbG9jKFRSR01IRFJTSVpFICsgc2l6ZW9mKHRyZ20pICogKHNs ZW4gLyAyICsgMSkgKiAzKTsKIAl0cmctPmZsYWcgPSBBUlJLRVk7CiAKLQlsZW4gPSBnZW5l cmF0ZV90cmdtX29ubHkoR0VUQVJSKHRyZyksIHN0ciwgc2xlbiwgTlVMTCk7CisJbGVuID0g Z2VuZXJhdGVfdHJnbV9vbmx5KEdFVEFSUih0cmcpLCBzdHIsIHNsZW4sIGNvbGxhdGlvbiwg TlVMTCk7CiAJU0VUX1ZBUlNJWkUodHJnLCBDQUxDR1RTSVpFKEFSUktFWSwgbGVuKSk7CiAK IAlpZiAobGVuID09IDApCkBAIC02NzEsNyArNjcxLDcgQEAgaXRlcmF0ZV93b3JkX3NpbWls YXJpdHkoaW50ICp0cmcyaW5kZXhlcywKICAqLwogc3RhdGljIGZsb2F0NAogY2FsY193b3Jk X3NpbWlsYXJpdHkoY2hhciAqc3RyMSwgaW50IHNsZW4xLCBjaGFyICpzdHIyLCBpbnQgc2xl bjIsCi0JCQkJCSB1aW50OCBmbGFncykKKwkJCQkJIHVpbnQ4IGZsYWdzLCBPaWQgY29sbGF0 aW9uKQogewogCWJvb2wJICAgKmZvdW5kOwogCXBvc190cmdtICAgKnB0cmc7CkBAIC02OTcs OCArNjk3LDggQEAgY2FsY193b3JkX3NpbWlsYXJpdHkoY2hhciAqc3RyMSwgaW50IHNsZW4x LCBjaGFyICpzdHIyLCBpbnQgc2xlbjIsCiAJZWxzZQogCQlib3VuZHMgPSBOVUxMOwogCi0J bGVuMSA9IGdlbmVyYXRlX3RyZ21fb25seSh0cmcxLCBzdHIxLCBzbGVuMSwgTlVMTCk7Ci0J bGVuMiA9IGdlbmVyYXRlX3RyZ21fb25seSh0cmcyLCBzdHIyLCBzbGVuMiwgYm91bmRzKTsK KwlsZW4xID0gZ2VuZXJhdGVfdHJnbV9vbmx5KHRyZzEsIHN0cjEsIHNsZW4xLCBjb2xsYXRp b24sIE5VTEwpOworCWxlbjIgPSBnZW5lcmF0ZV90cmdtX29ubHkodHJnMiwgc3RyMiwgc2xl bjIsIGNvbGxhdGlvbiwgYm91bmRzKTsKIAogCXB0cmcgPSBtYWtlX3Bvc2l0aW9uYWxfdHJn bSh0cmcxLCBsZW4xLCB0cmcyLCBsZW4yKTsKIAlsZW4gPSBsZW4xICsgbGVuMjsKQEAgLTkx NSw3ICs5MTUsNyBAQCBnZXRfd2lsZGNhcmRfcGFydChjb25zdCBjaGFyICpzdHIsIGludCBs ZW5zdHIsCiAgKiAiIGEiLCAiYmNkIiB3b3VsZCBiZSBleHRyYWN0ZWQuCiAgKi8KIFRSR00g KgotZ2VuZXJhdGVfd2lsZGNhcmRfdHJnbShjb25zdCBjaGFyICpzdHIsIGludCBzbGVuKQor Z2VuZXJhdGVfd2lsZGNhcmRfdHJnbShjb25zdCBjaGFyICpzdHIsIGludCBzbGVuLCBPaWQg Y29sbGF0aW9uKQogewogCVRSR00JICAgKnRyZzsKIAljaGFyCSAgICpidWYsCkBAIC05NDgs NyArOTQ4LDcgQEAgZ2VuZXJhdGVfd2lsZGNhcmRfdHJnbShjb25zdCBjaGFyICpzdHIsIGlu dCBzbGVuKQogCQkJCQkJCQkJICBidWYsICZieXRlbGVuLCAmY2hhcmxlbikpICE9IE5VTEwp CiAJewogI2lmZGVmIElHTk9SRUNBU0UKLQkJYnVmMiA9IHN0cl90b2xvd2VyKGJ1ZiwgYnl0 ZWxlbiwgREVGQVVMVF9DT0xMQVRJT05fT0lEKTsKKwkJYnVmMiA9IHN0cl90b2xvd2VyKGJ1 ZiwgYnl0ZWxlbiwgY29sbGF0aW9uKTsKIAkJYnl0ZWxlbiA9IHN0cmxlbihidWYyKTsKICNl bHNlCiAJCWJ1ZjIgPSBidWY7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBzaG93X3RyZ20oUEdf RlVOQ1RJT05fQVJHUykKIAl0cmdtCSAgICpwdHI7CiAJaW50CQkJaTsKIAotCXRyZyA9IGdl bmVyYXRlX3RyZ20oVkFSREFUQV9BTlkoaW4pLCBWQVJTSVpFX0FOWV9FWEhEUihpbikpOwor CXRyZyA9IGdlbmVyYXRlX3RyZ20oVkFSREFUQV9BTlkoaW4pLCBWQVJTSVpFX0FOWV9FWEhE UihpbiksIFBHX0dFVF9DT0xMQVRJT04oKSk7CiAJZCA9IHBhbGxvY19hcnJheShEYXR1bSwg MSArIEFSUk5FTEVNKHRyZykpOwogCiAJZm9yIChpID0gMCwgcHRyID0gR0VUQVJSKHRyZyk7 IGkgPCBBUlJORUxFTSh0cmcpOyBpKyssIHB0cisrKQpAQCAtMTE3NCw4ICsxMTc0LDggQEAg c2ltaWxhcml0eShQR19GVU5DVElPTl9BUkdTKQogCQkJICAgKnRyZzI7CiAJZmxvYXQ0CQly ZXM7CiAKLQl0cmcxID0gZ2VuZXJhdGVfdHJnbShWQVJEQVRBX0FOWShpbjEpLCBWQVJTSVpF X0FOWV9FWEhEUihpbjEpKTsKLQl0cmcyID0gZ2VuZXJhdGVfdHJnbShWQVJEQVRBX0FOWShp bjIpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjIpKTsKKwl0cmcxID0gZ2VuZXJhdGVfdHJnbShW QVJEQVRBX0FOWShpbjEpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjEpLCBQR19HRVRfQ09MTEFU SU9OKCkpOworCXRyZzIgPSBnZW5lcmF0ZV90cmdtKFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJ WkVfQU5ZX0VYSERSKGluMiksIFBHX0dFVF9DT0xMQVRJT04oKSk7CiAKIAlyZXMgPSBjbnRf c21sKHRyZzEsIHRyZzIsIGZhbHNlKTsKIApAQCAtMTE5Niw3ICsxMTk2LDcgQEAgd29yZF9z aW1pbGFyaXR5KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlyZXMgPSBjYWxjX3dvcmRfc2ltaWxh cml0eShWQVJEQVRBX0FOWShpbjEpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjEpLAogCQkJCQkJ CSAgIFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJWkVfQU5ZX0VYSERSKGluMiksCi0JCQkJCQkJ ICAgMCk7CisJCQkJCQkJICAgMCwgUEdfR0VUX0NPTExBVElPTigpKTsKIAogCVBHX0ZSRUVf SUZfQ09QWShpbjEsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShpbjIsIDEpOwpAQCAtMTIxMiw3 ICsxMjEyLDcgQEAgc3RyaWN0X3dvcmRfc2ltaWxhcml0eShQR19GVU5DVElPTl9BUkdTKQog CiAJcmVzID0gY2FsY193b3JkX3NpbWlsYXJpdHkoVkFSREFUQV9BTlkoaW4xKSwgVkFSU0la RV9BTllfRVhIRFIoaW4xKSwKIAkJCQkJCQkgICBWQVJEQVRBX0FOWShpbjIpLCBWQVJTSVpF X0FOWV9FWEhEUihpbjIpLAotCQkJCQkJCSAgIFdPUkRfU0lNSUxBUklUWV9TVFJJQ1QpOwor CQkJCQkJCSAgIFdPUkRfU0lNSUxBUklUWV9TVFJJQ1QsIFBHX0dFVF9DT0xMQVRJT04oKSk7 CiAKIAlQR19GUkVFX0lGX0NPUFkoaW4xLCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoaW4yLCAx KTsKQEAgLTEyMjIsOSArMTIyMiwxMCBAQCBzdHJpY3Rfd29yZF9zaW1pbGFyaXR5KFBHX0ZV TkNUSU9OX0FSR1MpCiBEYXR1bQogc2ltaWxhcml0eV9kaXN0KFBHX0ZVTkNUSU9OX0FSR1Mp CiB7Ci0JZmxvYXQ0CQlyZXMgPSBEYXR1bUdldEZsb2F0NChEaXJlY3RGdW5jdGlvbkNhbGwy KHNpbWlsYXJpdHksCi0JCQkJCQkJCQkJCQkJCSBQR19HRVRBUkdfREFUVU0oMCksCi0JCQkJ CQkJCQkJCQkJCSBQR19HRVRBUkdfREFUVU0oMSkpKTsKKwlmbG9hdDQJCXJlcyA9IERhdHVt R2V0RmxvYXQ0KERpcmVjdEZ1bmN0aW9uQ2FsbDJDb2xsKHNpbWlsYXJpdHksCisJCQkJCQkJ CQkJCQkJCQkgUEdfR0VUX0NPTExBVElPTigpLAorCQkJCQkJCQkJCQkJCQkJIFBHX0dFVEFS R19EQVRVTSgwKSwKKwkJCQkJCQkJCQkJCQkJCSBQR19HRVRBUkdfREFUVU0oMSkpKTsKIAog CVBHX1JFVFVSTl9GTE9BVDQoMS4wIC0gcmVzKTsKIH0KQEAgLTEyMzIsOSArMTIzMywxMCBA QCBzaW1pbGFyaXR5X2Rpc3QoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiBzaW1pbGFyaXR5 X29wKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JZmxvYXQ0CQlyZXMgPSBEYXR1bUdldEZsb2F0 NChEaXJlY3RGdW5jdGlvbkNhbGwyKHNpbWlsYXJpdHksCi0JCQkJCQkJCQkJCQkJCSBQR19H RVRBUkdfREFUVU0oMCksCi0JCQkJCQkJCQkJCQkJCSBQR19HRVRBUkdfREFUVU0oMSkpKTsK KwlmbG9hdDQJCXJlcyA9IERhdHVtR2V0RmxvYXQ0KERpcmVjdEZ1bmN0aW9uQ2FsbDJDb2xs KHNpbWlsYXJpdHksCisJCQkJCQkJCQkJCQkJCQkgUEdfR0VUX0NPTExBVElPTigpLAorCQkJ CQkJCQkJCQkJCQkJIFBHX0dFVEFSR19EQVRVTSgwKSwKKwkJCQkJCQkJCQkJCQkJCSBQR19H RVRBUkdfREFUVU0oMSkpKTsKIAogCVBHX1JFVFVSTl9CT09MKHJlcyA+PSBzaW1pbGFyaXR5 X3RocmVzaG9sZCk7CiB9CkBAIC0xMjQ4LDcgKzEyNTAsNyBAQCB3b3JkX3NpbWlsYXJpdHlf b3AoUEdfRlVOQ1RJT05fQVJHUykKIAogCXJlcyA9IGNhbGNfd29yZF9zaW1pbGFyaXR5KFZB UkRBVEFfQU5ZKGluMSksIFZBUlNJWkVfQU5ZX0VYSERSKGluMSksCiAJCQkJCQkJICAgVkFS REFUQV9BTlkoaW4yKSwgVkFSU0laRV9BTllfRVhIRFIoaW4yKSwKLQkJCQkJCQkgICBXT1JE X1NJTUlMQVJJVFlfQ0hFQ0tfT05MWSk7CisJCQkJCQkJICAgV09SRF9TSU1JTEFSSVRZX0NI RUNLX09OTFksIFBHX0dFVF9DT0xMQVRJT04oKSk7CiAKIAlQR19GUkVFX0lGX0NPUFkoaW4x LCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoaW4yLCAxKTsKQEAgLTEyNjQsNyArMTI2Niw3IEBA IHdvcmRfc2ltaWxhcml0eV9jb21tdXRhdG9yX29wKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAly ZXMgPSBjYWxjX3dvcmRfc2ltaWxhcml0eShWQVJEQVRBX0FOWShpbjIpLCBWQVJTSVpFX0FO WV9FWEhEUihpbjIpLAogCQkJCQkJCSAgIFZBUkRBVEFfQU5ZKGluMSksIFZBUlNJWkVfQU5Z X0VYSERSKGluMSksCi0JCQkJCQkJICAgV09SRF9TSU1JTEFSSVRZX0NIRUNLX09OTFkpOwor CQkJCQkJCSAgIFdPUkRfU0lNSUxBUklUWV9DSEVDS19PTkxZLCBQR19HRVRfQ09MTEFUSU9O KCkpOwogCiAJUEdfRlJFRV9JRl9DT1BZKGluMSwgMCk7CiAJUEdfRlJFRV9JRl9DT1BZKGlu MiwgMSk7CkBAIC0xMjgwLDcgKzEyODIsNyBAQCB3b3JkX3NpbWlsYXJpdHlfZGlzdF9vcChQ R19GVU5DVElPTl9BUkdTKQogCiAJcmVzID0gY2FsY193b3JkX3NpbWlsYXJpdHkoVkFSREFU QV9BTlkoaW4xKSwgVkFSU0laRV9BTllfRVhIRFIoaW4xKSwKIAkJCQkJCQkgICBWQVJEQVRB X0FOWShpbjIpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjIpLAotCQkJCQkJCSAgIDApOworCQkJ CQkJCSAgIDAsIFBHX0dFVF9DT0xMQVRJT04oKSk7CiAKIAlQR19GUkVFX0lGX0NPUFkoaW4x LCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoaW4yLCAxKTsKQEAgLTEyOTYsNyArMTI5OCw3IEBA IHdvcmRfc2ltaWxhcml0eV9kaXN0X2NvbW11dGF0b3Jfb3AoUEdfRlVOQ1RJT05fQVJHUykK IAogCXJlcyA9IGNhbGNfd29yZF9zaW1pbGFyaXR5KFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJ WkVfQU5ZX0VYSERSKGluMiksCiAJCQkJCQkJICAgVkFSREFUQV9BTlkoaW4xKSwgVkFSU0la RV9BTllfRVhIRFIoaW4xKSwKLQkJCQkJCQkgICAwKTsKKwkJCQkJCQkgICAwLCBQR19HRVRf Q09MTEFUSU9OKCkpOwogCiAJUEdfRlJFRV9JRl9DT1BZKGluMSwgMCk7CiAJUEdfRlJFRV9J Rl9DT1BZKGluMiwgMSk7CkBAIC0xMzEyLDcgKzEzMTQsOCBAQCBzdHJpY3Rfd29yZF9zaW1p bGFyaXR5X29wKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlyZXMgPSBjYWxjX3dvcmRfc2ltaWxh cml0eShWQVJEQVRBX0FOWShpbjEpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjEpLAogCQkJCQkJ CSAgIFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJWkVfQU5ZX0VYSERSKGluMiksCi0JCQkJCQkJ ICAgV09SRF9TSU1JTEFSSVRZX0NIRUNLX09OTFkgfCBXT1JEX1NJTUlMQVJJVFlfU1RSSUNU KTsKKwkJCQkJCQkgICBXT1JEX1NJTUlMQVJJVFlfQ0hFQ0tfT05MWSB8IFdPUkRfU0lNSUxB UklUWV9TVFJJQ1QsCisJCQkJCQkJICAgUEdfR0VUX0NPTExBVElPTigpKTsKIAogCVBHX0ZS RUVfSUZfQ09QWShpbjEsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShpbjIsIDEpOwpAQCAtMTMy OCw3ICsxMzMxLDggQEAgc3RyaWN0X3dvcmRfc2ltaWxhcml0eV9jb21tdXRhdG9yX29wKFBH X0ZVTkNUSU9OX0FSR1MpCiAKIAlyZXMgPSBjYWxjX3dvcmRfc2ltaWxhcml0eShWQVJEQVRB X0FOWShpbjIpLCBWQVJTSVpFX0FOWV9FWEhEUihpbjIpLAogCQkJCQkJCSAgIFZBUkRBVEFf QU5ZKGluMSksIFZBUlNJWkVfQU5ZX0VYSERSKGluMSksCi0JCQkJCQkJICAgV09SRF9TSU1J TEFSSVRZX0NIRUNLX09OTFkgfCBXT1JEX1NJTUlMQVJJVFlfU1RSSUNUKTsKKwkJCQkJCQkg ICBXT1JEX1NJTUlMQVJJVFlfQ0hFQ0tfT05MWSB8IFdPUkRfU0lNSUxBUklUWV9TVFJJQ1Qs CisJCQkJCQkJICAgUEdfR0VUX0NPTExBVElPTigpKTsKIAogCVBHX0ZSRUVfSUZfQ09QWShp bjEsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShpbjIsIDEpOwpAQCAtMTM0NCw3ICsxMzQ4LDcg QEAgc3RyaWN0X3dvcmRfc2ltaWxhcml0eV9kaXN0X29wKFBHX0ZVTkNUSU9OX0FSR1MpCiAK IAlyZXMgPSBjYWxjX3dvcmRfc2ltaWxhcml0eShWQVJEQVRBX0FOWShpbjEpLCBWQVJTSVpF X0FOWV9FWEhEUihpbjEpLAogCQkJCQkJCSAgIFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJWkVf QU5ZX0VYSERSKGluMiksCi0JCQkJCQkJICAgV09SRF9TSU1JTEFSSVRZX1NUUklDVCk7CisJ CQkJCQkJICAgV09SRF9TSU1JTEFSSVRZX1NUUklDVCwgUEdfR0VUX0NPTExBVElPTigpKTsK IAogCVBHX0ZSRUVfSUZfQ09QWShpbjEsIDApOwogCVBHX0ZSRUVfSUZfQ09QWShpbjIsIDEp OwpAQCAtMTM2MCw3ICsxMzY0LDcgQEAgc3RyaWN0X3dvcmRfc2ltaWxhcml0eV9kaXN0X2Nv bW11dGF0b3Jfb3AoUEdfRlVOQ1RJT05fQVJHUykKIAogCXJlcyA9IGNhbGNfd29yZF9zaW1p bGFyaXR5KFZBUkRBVEFfQU5ZKGluMiksIFZBUlNJWkVfQU5ZX0VYSERSKGluMiksCiAJCQkJ CQkJICAgVkFSREFUQV9BTlkoaW4xKSwgVkFSU0laRV9BTllfRVhIRFIoaW4xKSwKLQkJCQkJ CQkgICBXT1JEX1NJTUlMQVJJVFlfU1RSSUNUKTsKKwkJCQkJCQkgICBXT1JEX1NJTUlMQVJJ VFlfU1RSSUNULCBQR19HRVRfQ09MTEFUSU9OKCkpOwogCiAJUEdfRlJFRV9JRl9DT1BZKGlu MSwgMCk7CiAJUEdfRlJFRV9JRl9DT1BZKGluMiwgMSk7CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3RyZ20vdHJnbV9yZWdleHAuYyBiL2NvbnRyaWIvcGdfdHJnbS90cmdtX3JlZ2V4cC5j CmluZGV4IDFkMWI1ZmUzMDRkLi5jZGQwNGZhMDFhZCAxMDA2NDQKLS0tIGEvY29udHJpYi9w Z190cmdtL3RyZ21fcmVnZXhwLmMKKysrIGIvY29udHJpYi9wZ190cmdtL3RyZ21fcmVnZXhw LmMKQEAgLTQ3OSwxMSArNDc5LDExIEBAIHR5cGVkZWYgc3RydWN0CiAKIC8qIHByb3RvdHlw ZXMgZm9yIHByaXZhdGUgZnVuY3Rpb25zICovCiBzdGF0aWMgVFJHTSAqY3JlYXRlVHJnbU5G QUludGVybmFsKHJlZ2V4X3QgKnJlZ2V4LCBUcmdtUGFja2VkR3JhcGggKipncmFwaCwKLQkJ CQkJCQkJICAgTWVtb3J5Q29udGV4dCByY29udGV4dCk7CisJCQkJCQkJCSAgIE1lbW9yeUNv bnRleHQgcmNvbnRleHQsIE9pZCBjb2xsYXRpb24pOwogc3RhdGljIHZvaWQgUkVfY29tcGls ZShyZWdleF90ICpyZWdleCwgdGV4dCAqdGV4dF9yZSwKIAkJCQkJICAgaW50IGNmbGFncywg T2lkIGNvbGxhdGlvbik7Ci1zdGF0aWMgdm9pZCBnZXRDb2xvckluZm8ocmVnZXhfdCAqcmVn ZXgsIFRyZ21ORkEgKnRyZ21ORkEpOwotc3RhdGljIGJvb2wgY29udmVydFBnV2NoYXIocGdf d2NoYXIgYywgdHJnbV9tYl9jaGFyICpyZXN1bHQpOworc3RhdGljIHZvaWQgZ2V0Q29sb3JJ bmZvKHJlZ2V4X3QgKnJlZ2V4LCBUcmdtTkZBICp0cmdtTkZBLCBPaWQgY29sbGF0aW9uKTsK K3N0YXRpYyBib29sIGNvbnZlcnRQZ1djaGFyKHBnX3djaGFyIGMsIHRyZ21fbWJfY2hhciAq cmVzdWx0LCBPaWQgY29sbGF0aW9uKTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUdyYXBoKFRy Z21ORkEgKnRyZ21ORkEpOwogc3RhdGljIHZvaWQgcHJvY2Vzc1N0YXRlKFRyZ21ORkEgKnRy Z21ORkEsIFRyZ21TdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgYWRkS2V5KFRyZ21ORkEg KnRyZ21ORkEsIFRyZ21TdGF0ZSAqc3RhdGUsIFRyZ21TdGF0ZUtleSAqa2V5KTsKQEAgLTU1 MSw3ICs1NTEsNyBAQCBjcmVhdGVUcmdtTkZBKHRleHQgKnRleHRfcmUsIE9pZCBjb2xsYXRp b24sCiAJCQkgICBSRUdfQURWQU5DRUQgfCBSRUdfTk9TVUIsIGNvbGxhdGlvbik7CiAjZW5k aWYKIAotCXRyZyA9IGNyZWF0ZVRyZ21ORkFJbnRlcm5hbCgmcmVnZXgsIGdyYXBoLCByY29u dGV4dCk7CisJdHJnID0gY3JlYXRlVHJnbU5GQUludGVybmFsKCZyZWdleCwgZ3JhcGgsIHJj b250ZXh0LCBjb2xsYXRpb24pOwogCiAJLyogQ2xlYW4gdXAgYWxsIHRoZSBjcnVmdCB3ZSBj cmVhdGVkIChpbmNsdWRpbmcgcmVnZXgpICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwpAQCAtNTY1LDcgKzU2NSw3IEBAIGNyZWF0ZVRyZ21ORkEodGV4dCAqdGV4 dF9yZSwgT2lkIGNvbGxhdGlvbiwKICAqLwogc3RhdGljIFRSR00gKgogY3JlYXRlVHJnbU5G QUludGVybmFsKHJlZ2V4X3QgKnJlZ2V4LCBUcmdtUGFja2VkR3JhcGggKipncmFwaCwKLQkJ CQkJICBNZW1vcnlDb250ZXh0IHJjb250ZXh0KQorCQkJCQkgIE1lbW9yeUNvbnRleHQgcmNv bnRleHQsIE9pZCBjb2xsYXRpb24pCiB7CiAJVFJHTQkgICAqdHJnOwogCVRyZ21ORkEJCXRy Z21ORkE7CkBAIC01NzMsNyArNTczLDcgQEAgY3JlYXRlVHJnbU5GQUludGVybmFsKHJlZ2V4 X3QgKnJlZ2V4LCBUcmdtUGFja2VkR3JhcGggKipncmFwaCwKIAl0cmdtTkZBLnJlZ2V4ID0g cmVnZXg7CiAKIAkvKiBDb2xsZWN0IGNvbG9yIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlZ2V4 ICovCi0JZ2V0Q29sb3JJbmZvKHJlZ2V4LCAmdHJnbU5GQSk7CisJZ2V0Q29sb3JJbmZvKHJl Z2V4LCAmdHJnbU5GQSwgY29sbGF0aW9uKTsKIAogI2lmZGVmIFRSR01fUkVHRVhQX0RFQlVH CiAJcHJpbnRTb3VyY2VORkEocmVnZXgsIHRyZ21ORkEuY29sb3JJbmZvLCB0cmdtTkZBLm5j b2xvcnMpOwpAQCAtNzYyLDcgKzc2Miw3IEBAIFJFX2NvbXBpbGUocmVnZXhfdCAqcmVnZXgs IHRleHQgKnRleHRfcmUsIGludCBjZmxhZ3MsIE9pZCBjb2xsYXRpb24pCiAgKiBGaWxsIFRy Z21Db2xvckluZm8gc3RydWN0dXJlIGZvciBlYWNoIGNvbG9yIHVzaW5nIHJlZ2V4IGV4cG9y dCBmdW5jdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkCi1nZXRDb2xvckluZm8ocmVnZXhfdCAq cmVnZXgsIFRyZ21ORkEgKnRyZ21ORkEpCitnZXRDb2xvckluZm8ocmVnZXhfdCAqcmVnZXgs IFRyZ21ORkEgKnRyZ21ORkEsIE9pZCBjb2xsYXRpb24pCiB7CiAJaW50CQkJY29sb3JzQ291 bnQgPSBwZ19yZWdfZ2V0bnVtY29sb3JzKHJlZ2V4KTsKIAlpbnQJCQlpOwpAQCAtODA4LDcg KzgwOCw3IEBAIGdldENvbG9ySW5mbyhyZWdleF90ICpyZWdleCwgVHJnbU5GQSAqdHJnbU5G QSkKIAkJewogCQkJdHJnbV9tYl9jaGFyIGM7CiAKLQkJCWlmICghY29udmVydFBnV2NoYXIo Y2hhcnNbal0sICZjKSkKKwkJCWlmICghY29udmVydFBnV2NoYXIoY2hhcnNbal0sICZjLCBj b2xsYXRpb24pKQogCQkJCWNvbnRpbnVlOwkJLyogb2sgdG8gaWdub3JlIGl0IGFsdG9nZXRo ZXIgKi8KIAkJCWlmIChJU1dPUkRDSFIoYy5ieXRlcykpCiAJCQkJY29sb3JJbmZvLT53b3Jk Q2hhcnNbY29sb3JJbmZvLT53b3JkQ2hhcnNDb3VudCsrXSA9IGM7CkBAIC04MjUsNyArODI1 LDcgQEAgZ2V0Q29sb3JJbmZvKHJlZ2V4X3QgKnJlZ2V4LCBUcmdtTkZBICp0cmdtTkZBKQog ICogUmV0dXJucyBmYWxzZSBpZiB0aGUgY2hhcmFjdGVyIHNob3VsZCBiZSBpZ25vcmVkIGNv bXBsZXRlbHkuCiAgKi8KIHN0YXRpYyBib29sCi1jb252ZXJ0UGdXY2hhcihwZ193Y2hhciBj LCB0cmdtX21iX2NoYXIgKnJlc3VsdCkKK2NvbnZlcnRQZ1djaGFyKHBnX3djaGFyIGMsIHRy Z21fbWJfY2hhciAqcmVzdWx0LCBPaWQgY29sbGF0aW9uKQogewogCS8qICJzIiBoYXMgZW5v dWdoIHNwYWNlIGZvciBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgYW5kIGEgdHJhaWxpbmcgTlVM ICovCiAJY2hhcgkJc1tNQVhfTVVMVElCWVRFX0NIQVJfTEVOICsgMV07CkBAIC04NTcsNyAr ODU3LDcgQEAgY29udmVydFBnV2NoYXIocGdfd2NoYXIgYywgdHJnbV9tYl9jaGFyICpyZXN1 bHQpCiAJICovCiAjaWZkZWYgSUdOT1JFQ0FTRQogCXsKLQkJY2hhcgkgICAqbG93ZXJDYXNl ZCA9IHN0cl90b2xvd2VyKHMsIHN0cmxlbihzKSwgREVGQVVMVF9DT0xMQVRJT05fT0lEKTsK KwkJY2hhcgkgICAqbG93ZXJDYXNlZCA9IHN0cl90b2xvd2VyKHMsIHN0cmxlbihzKSwgY29s bGF0aW9uKTsKIAogCQlpZiAoc3RyY21wKGxvd2VyQ2FzZWQsIHMpICE9IDApCiAJCXsKLS0g CjIuNTEuMAoK --------------dzCRAfQv109V4yhlLJVdVwmP--