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.94.2) (envelope-from ) id 1rY8ui-00Ea15-7N for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Feb 2024 18:14:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rY8uf-001yBg-LO for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Feb 2024 18:14:17 +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.94.2) (envelope-from ) id 1rY8ue-001yBX-T2 for pgsql-hackers@lists.postgresql.org; Thu, 08 Feb 2024 18:14:17 +0000 Received: from dd26416.kasserver.com ([85.13.145.105]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rY8uY-005knC-Bs for pgsql-hackers@lists.postgresql.org; Thu, 08 Feb 2024 18:14:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oopsware.de; s=kas202309091111; t=1707416046; bh=sLrJLNprQbfGrotph2TLbr4D5knDIBfM4Pb0axO8jU8=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=YB83bHZerDjWdc0sjcnwENepApwBbV39b7RJcWd3LpbIEuQC/3cuFyxyBg8NjJZl+ eKCdMPROr2TICPcOoVRc+XmcecH/Jf+lRfoHmPEWTXElGEy/sfDPZDK5UzBZ1v6DLK CoGLVHYhybJqJOvkXltUVmdl8Z7it+R0WiMDg2GE760aLvJ+KtObVfXVBWtz29XhER aXrKqQp504ZE3EbJrrmQ89iZpBmQF4kbLTD8s0m51w22jABHXmvuuGot9aMi68Z9Nm BPNdQ7IPQf0Lc2IhkfaWlGhpI97IjyY3M82cPM1A+BXjExDZbnGbCt7anO09gnDgbl DFYuiRfPasrSA== Received: from sethos.at.struktu.ro (sethos.at.struktu.ro [46.4.183.126]) by dd26416.kasserver.com (Postfix) with ESMTPSA id 790E08023E8; Thu, 8 Feb 2024 19:14:06 +0100 (CET) Received: from chufu.bluecherstrasse.oopsware.lan (unknown [87.122.97.204]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sethos.at.struktu.ro (Postfix) with ESMTPSA id 7FE5851162C0; Thu, 8 Feb 2024 19:14:05 +0100 (CET) Message-ID: <2f2e88bf1d44d06c1baf27bbf3db880f42a5cb87.camel@oopsware.de> Subject: Re: [PATCH] Add sortsupport for range types and btree_gist From: Bernd Helmle To: jian he Cc: pgsql-hackers@lists.postgresql.org Date: Thu, 08 Feb 2024 19:14:05 +0100 In-Reply-To: References: <437ccbcf-8f80-2919-411d-a3af88becf6c@cybertec.at> <77f4bacbeb9d223f90b3a0bd55ef7d65407bfddd.camel@oopsware.de> Autocrypt: addr=mailings@oopsware.de; prefer-encrypt=mutual; keydata=mQGiBEIM4dYRBACEnxQZ/CfR1xbCJzGOIjvh3fZpLALMm+tt237QlZm9nlLaEwCn317sT1khPAJwhyBHSHbNFbH+LOL6ezYrg4V2Q9KHyYJDStJtC8c+D7vHVB5Jfslynx89DnCH6jb3H0j+U0iNYmRmT18PWTZhD5RuXT+Toyz/0hH4YnJzha4VUwCggikXRuhIQ0KIzrps7/PsvasTPjUD/1aoEHRwVyk2C2hXh6GWJYq+1l+sB2d0TOnFJf2xy3Xo03Hi+BEJJdYGqJKqzd0KfsFyJYhO2GIGScSEj1hsTqAiY8OZeRqRGHe69OQEguUSVXp/jPaqU8fel8dbDDMnXkgULq8oO4T9e4GJSFqIvrlx0sJqSMFdiihV+xCzDS40BACBrTq9tyXmyxJWzQ1/0Hx9S4sU+yeR8ztZH9xgWi1wksfHpEgZBdAkQynlI80/bCtgxfVu+LKgxeqGfMSnT9t8agpr1IGcmSbDntbn/K+3EmCze0jq8EQrZHJWiwCqraM8mnmILSEl5znaoVoBIF062b60zZicuNeYaVgEKSHfirQgQmVybmQgSGVsbWxlIDxiZXJuZEBvb3Bzd2FyZS5kZT6IXgQTEQIAHgUCQhyP2gIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBRdc2OhdlKzMm4AJ9mW1np2RXi66WzEvcIanaJkDT+xgCfZmXG/Sziz5FchI3OjXfXDZfwnNm0J0Jlcm5kIEhlbG1sZSA8YmVybmQuaGVsbWxlQG9vcHN3YXJlLmRlPoheBBMRAgAeBQJCDOHWAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEFF1zY6F2UrMWZgAn3MVwDBzRS5dZu1yjx7WU3E3JSheAJ41CUYMIkX/oYfWssUVYnOuedgn8LQlQmVybmQgSGVsbWxlIDxiaEBzY2huYWVwcGNoZW5qYWdkLmRlPoheBBMRAgAeBQJCHI+pA hsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEFF1zY6F2UrMYMUAn0rk8fEEY2tHGSUD7PNbk+Fwkd7MAJ4wMfOerrvsKTrB9xmFnZ2ZUy67w7QjQmVybmQgSGVsbWxlIDxtYWlsaW5nc0Bvb3Bzd2FyZS5kZT6IXgQTEQIAHgUCQhyPxgIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBRdc2OhdlKzOhrAJ4w+A3HcjTJb54lUDpyyQu6Y5dlVQCeJCFKygOVbpn4HSp4Z+R6+s4Rul60J0Jlcm5kIEhlbG1sZSA8YmVybmQuaGVsbWxlQGN5YmVydGVjLmF0Poh4BBMRAgA4FiEEcLVWcrwQIdBqHtvMUXXNjoXZSswFAmDe1DkCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQUXXNjoXZSszs9QCfbbpKT0/Mh4PhfS6rRbmNNQC1zS8An2x1PLHPS6649DRkiYOMWTXzAlSEuQINBEIM4d0QCADaxWn10/2l8HHygHCUlBs+vNRYkMrGDWuj1tyehVRRcFYnNfBaEB44GMsaWdKW0GGP4S1BcEwLM3T+ObIrMt6jsLYXWrMctMcGkW60CTbusllwqFN80prqk0Nh/yZsja8UOt+OrWL4ucIBEx9RsUcdUd7+PeuYThOFO1dMgu4gmbac5eN2LZceHJgN9fha19m/vdLXmLc5IEPX/s6+O5oyEkbBt4GYIdvodnBHG9fyip7ff5GPLKzU2gBJz3RWUuHGEaj3RxCffK1x1S87MonbbEkPl2BtmJg2HeWNHn0eaauTp61V0xUWo1XaBB7Ezovogj+70wQjJ4GEgXoH7MRvAAMFCAC/MFpNfWALuQiKE3GA/VdoBTljq2rOnkDcRzBrn8BBVwpYqa2g7SA/VUW334ztI2PmZZYJ0Bjms/Q+oEv87agSL7sQTr8xUOPEyABVnAoDIuIzrAilflYYbvq7o3kwNcsmkr vPZ1FURstKbO+85M/e8tIyCHa6IbTKru6W8Rqxldx2TjoTvcOov3H7bknAdaA8dv6ea/dpI0WTVkuBTMw+jCy2gezwO1wvY+2ehiObOOnlKB2OsMshbe7FHtMU4qB6H1IthiSCzYz5IAsovS8u88HwtUVh/fjLHjTBB85IIMswvJ6SiCXfpe4z8Aj2b5hdo6ggZmI6opiBpaeK164SiEkEGBECAAkFAkIM4d0CGwwACgkQUXXNjoXZSszvIgCfeqX8AYMGEnF+rOp2ukoCWQXfq48AmQEAzB0c5vVMlRnuBh0z9qMKRqbi Content-Type: multipart/mixed; boundary="=-mVeW48Taf2ewCNErnisv" User-Agent: Evolution 3.50.3 (3.50.3-1.fc39) MIME-Version: 1.0 X-Spamd-Bar: --- List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-mVeW48Taf2ewCNErnisv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Am Mittwoch, dem 10.01.2024 um 22:18 +0800 schrieb jian he: >=20 > I split the original author's patch into 2. > 1. Add GiST sortsupport function for all the btree-gist module data > types except anyrange data type (which actually does not in this > module) > 2. Add GiST sortsupport function for anyrange data type. >=20 Please find attached a new version of this patch set with the following changes/adjustments: - Rebased to current master - Heavily reworked *_cmp() functions to properly decode GPT_VARKEY and GBT_KEY input. For some datatypes the btree comparison functions were reused and the input arguments not properly handled. This patch adds dedicated btree_gist sortsupport comparison methods for all datatypes. There was another patch from Andrey Borodin (thanks again for the hint) and a deeper review done by Heikki in [1]. I've incorporated Heikkis findings in this patch, too. [...] I've also updated the btree_gist documentation to reflect the default sorted built strategy this patch introduces now. Additionally i did some benchmarks again on this new version on the patch. Still, index build speed improvement is quite impressive on the dataset originally provided by Christoph Heiss (since its not available anymore i've uploaded it here [2] again): HEAD (Index was built with default buffering setting) --------------------- REINDEX (s) 4809 CREATE INDEX (s) 4920 btree_gist sortsupport ---------------------- REINDEX (s) 573 CREATE INDEX (s) 578 I created another pgbench based custom script to measure the single core speed of the lookup query of the bench-gist.py script. This looks like this: init.sql -------- BEGIN; DROP TABLE IF EXISTS test_dataset; CREATE TABLE test_dataset(keyid integer not null, id text not null, block_range int4range); CREATE TEMP SEQUENCE testset_seq; INSERT INTO test_dataset SELECT nextval('testset_seq'), id, block_range FROM test ORDER BY random() LIMIT 10000; CREATE UNIQUE INDEX ON test_dataset(keyid); COMMIT; bench.pgbench ------------- \set keyid random(1, 10000) SELECT id, block_range FROM test_dataset WHERE keyid =3D :keyid \gset SELECT id, block_range FROM test WHERE id =3D ':id' AND block_range && ':block_range'; Run by for in in `seq 1 3`; do psql -qXf init.pgbench && pgbench -n -r -c 1 -T 60 -f bench.pgbench; done With this i get the following (on prewarmed index and table): HEAD=C2=A0 ------------------------------------- pgbench single core tps=3D248,67 btree_gist sortsupport ---------------------------- pgbench single core tps=3D1830,33 This is an average over 3 runs each (complete results attached). So this looks really impressive and i hope i didn't do something entirely wrong (still learning about this GiST stuff). > what I am confused: > In fmgr.h >=20 > /* > =C2=A0* Support for cleaning up detoasted copies of inputs.=C2=A0 This mu= st > only > =C2=A0* be used for pass-by-ref datatypes, and normally would only be use= d > =C2=A0* for toastable types.=C2=A0 If the given pointer is different from= the > =C2=A0* original argument, assume it's a palloc'd detoasted copy, and > pfree it. > =C2=A0* NOTE: most functions on toastable types do not have to worry abou= t > this, > =C2=A0* but we currently require that support functions for indexes not > leak > =C2=A0* memory. > =C2=A0*/ > #define PG_FREE_IF_COPY(ptr,n) \ > do { \ > if ((Pointer) (ptr) !=3D PG_GETARG_POINTER(n)) \ > pfree(ptr); \ > } while (0) >=20 > but the doc > (https://www.postgresql.org/docs/current/gist-extensibility.html) > =C2=A0says: > All the GiST support methods are normally called in short-lived > memory > contexts; that is, CurrentMemoryContext will get reset after each > tuple is processed. It is therefore not very important to worry about > pfree'ing everything you palloc. > ENDOF_QUOTE >=20 > so I am not sure in range_gist_cmp, we need the following: > ` > if ((Datum) range_a !=3D a) > pfree(range_a); > if ((Datum) range_b !=3D b) > pfree(range_b); > ` Turns out this is not true for sortsupport: the comparison function is called for each tuple during sorting, which will leak the detoasted (and probably copied datum) in the sort memory context. See the same for e.g. numeric and text, which i needed to change to pass the key values correctly to the text_cmp() or numeric_cmp() function in these=20 cases. I've adapted the PG_FREE_IF_COPY() macro for these functions and introduced GBT_FREE_IF_COPY() in btree_utils_var.h, since the former relies on fcinfo. I'll add the patch again to the upcoming CF for another review round. [1] https://www.postgresql.org/message-id/c0846e34-8b3a-e1bf-c88e-021eb241a481%= 40iki.fi [2]=C2=A0https://drive.google.com/file/d/1CPNFGR53-FUto1zjXPMM2Yrn0GaGfGFz/= view?usp=3Ddrive_link --=-mVeW48Taf2ewCNErnisv Content-Disposition: attachment; filename="bench.pgbench.results.txt" Content-Type: text/plain; name="bench.pgbench.results.txt"; charset="UTF-8" Content-Transfer-Encoding: base64 SEVBRAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnBnYmVuY2ggKDE3ZGV2ZWwpCnRyYW5zYWN0aW9u IHR5cGU6IGJlbmNoLnBnYmVuY2gKc2NhbGluZyBmYWN0b3I6IDEKcXVlcnkgbW9kZTogc2ltcGxl Cm51bWJlciBvZiBjbGllbnRzOiAxCm51bWJlciBvZiB0aHJlYWRzOiAxCm1heGltdW0gbnVtYmVy IG9mIHRyaWVzOiAxCmR1cmF0aW9uOiA2MCBzCm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFs bHkgcHJvY2Vzc2VkOiAxNTE5MgpudW1iZXIgb2YgZmFpbGVkIHRyYW5zYWN0aW9uczogMCAoMC4w MDAlKQpsYXRlbmN5IGF2ZXJhZ2UgPSAzLjk2NSBtcwppbml0aWFsIGNvbm5lY3Rpb24gdGltZSA9 IDIuNzg2IG1zCnRwcyA9IDI1Mi4xOTgzOTggKHdpdGhvdXQgaW5pdGlhbCBjb25uZWN0aW9uIHRp bWUpCnN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzIGFuZCBmYWlsdXJlczoKICAg ICAgICAgMC4wMDEgICAgICAgICAgIDAgIFxzZXQga2V5aWQgcmFuZG9tKDEsIDEwMDAwKQogICAg ICAgICAwLjE1MSAgICAgICAgICAgMCAgU0VMRUNUIGlkLCBibG9ja19yYW5nZSBGUk9NIHRlc3Rf ZGF0YXNldCBXSEVSRSBrZXlpZCA9IDprZXlpZCAKICAgICAgICAgMy44MTQgICAgICAgICAgIDAg IFNFTEVDVCBpZCwgYmxvY2tfcmFuZ2UgRlJPTSB0ZXN0IFdIRVJFIGlkID0gJzppZCcgQU5EIGJs b2NrX3JhbmdlICYmICc6YmxvY2tfcmFuZ2UnOwpwZ2JlbmNoICgxN2RldmVsKQp0cmFuc2FjdGlv biB0eXBlOiBiZW5jaC5wZ2JlbmNoCnNjYWxpbmcgZmFjdG9yOiAxCnF1ZXJ5IG1vZGU6IHNpbXBs ZQpudW1iZXIgb2YgY2xpZW50czogMQpudW1iZXIgb2YgdGhyZWFkczogMQptYXhpbXVtIG51bWJl ciBvZiB0cmllczogMQpkdXJhdGlvbjogNjAgcwpudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVh bGx5IHByb2Nlc3NlZDogMTQ4NTQKbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2FjdGlvbnM6IDAgKDAu MDAwJSkKbGF0ZW5jeSBhdmVyYWdlID0gNC4wNDAgbXMKaW5pdGlhbCBjb25uZWN0aW9uIHRpbWUg PSAyLjE2MCBtcwp0cHMgPSAyNDcuNTUwMzQ1ICh3aXRob3V0IGluaXRpYWwgY29ubmVjdGlvbiB0 aW1lKQpzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kcyBhbmQgZmFpbHVyZXM6CiAg ICAgICAgIDAuMDAxICAgICAgICAgICAwICBcc2V0IGtleWlkIHJhbmRvbSgxLCAxMDAwMCkKICAg ICAgICAgMC4xNTMgICAgICAgICAgIDAgIFNFTEVDVCBpZCwgYmxvY2tfcmFuZ2UgRlJPTSB0ZXN0 X2RhdGFzZXQgV0hFUkUga2V5aWQgPSA6a2V5aWQgCiAgICAgICAgIDMuODg2ICAgICAgICAgICAw ICBTRUxFQ1QgaWQsIGJsb2NrX3JhbmdlIEZST00gdGVzdCBXSEVSRSBpZCA9ICc6aWQnIEFORCBi bG9ja19yYW5nZSAmJiAnOmJsb2NrX3JhbmdlJzsKcGdiZW5jaCAoMTdkZXZlbCkKdHJhbnNhY3Rp b24gdHlwZTogYmVuY2gucGdiZW5jaApzY2FsaW5nIGZhY3RvcjogMQpxdWVyeSBtb2RlOiBzaW1w bGUKbnVtYmVyIG9mIGNsaWVudHM6IDEKbnVtYmVyIG9mIHRocmVhZHM6IDEKbWF4aW11bSBudW1i ZXIgb2YgdHJpZXM6IDEKZHVyYXRpb246IDYwIHMKbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1 YWxseSBwcm9jZXNzZWQ6IDE0ODYwCm51bWJlciBvZiBmYWlsZWQgdHJhbnNhY3Rpb25zOiAwICgw LjAwMCUpCmxhdGVuY3kgYXZlcmFnZSA9IDQuMDM5IG1zCmluaXRpYWwgY29ubmVjdGlvbiB0aW1l ID0gMi43MTQgbXMKdHBzID0gMjQ3LjU4MDcwNyAod2l0aG91dCBpbml0aWFsIGNvbm5lY3Rpb24g dGltZSkKc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHMgYW5kIGZhaWx1cmVzOgog ICAgICAgICAwLjAwMSAgICAgICAgICAgMCAgXHNldCBrZXlpZCByYW5kb20oMSwgMTAwMDApCiAg ICAgICAgIDAuMTUxICAgICAgICAgICAwICBTRUxFQ1QgaWQsIGJsb2NrX3JhbmdlIEZST00gdGVz dF9kYXRhc2V0IFdIRVJFIGtleWlkID0gOmtleWlkIAogICAgICAgICAzLjg4NyAgICAgICAgICAg MCAgU0VMRUNUIGlkLCBibG9ja19yYW5nZSBGUk9NIHRlc3QgV0hFUkUgaWQgPSAnOmlkJyBBTkQg YmxvY2tfcmFuZ2UgJiYgJzpibG9ja19yYW5nZSc7CgpidHJlZV9naXN0IHNvcnRzdXBwb3J0Ci0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCnBnYmVuY2ggKDE3ZGV2ZWwpCnRyYW5zYWN0aW9uIHR5cGU6 IGJlbmNoLnBnYmVuY2ggICAgICAgICAgICAgICAgICAgICAgICAgCnNjYWxpbmcgZmFjdG9yOiAx CnF1ZXJ5IG1vZGU6IHNpbXBsZQpudW1iZXIgb2YgY2xpZW50czogMQpudW1iZXIgb2YgdGhyZWFk czogMQptYXhpbXVtIG51bWJlciBvZiB0cmllczogMQpkdXJhdGlvbjogNjAgcwpudW1iZXIgb2Yg dHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogMTA4ODU3Cm51bWJlciBvZiBmYWlsZWQg dHJhbnNhY3Rpb25zOiAwICgwLjAwMCUpCmxhdGVuY3kgYXZlcmFnZSA9IDAuNTUxIG1zCmluaXRp YWwgY29ubmVjdGlvbiB0aW1lID0gMi41NTkgbXMKdHBzID0gMTgxNC4zNTcwNTcgKHdpdGhvdXQg aW5pdGlhbCBjb25uZWN0aW9uIHRpbWUpCnN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNv bmRzIGFuZCBmYWlsdXJlczoKICAgICAgICAgMC4wMDAgICAgICAgICAgIDAgIFxzZXQga2V5aWQg cmFuZG9tKDEsIDEwMDAwKQogICAgICAgICAwLjE0MyAgICAgICAgICAgMCAgU0VMRUNUIGlkLCBi bG9ja19yYW5nZSBGUk9NIHRlc3RfZGF0YXNldCBXSEVSRSBrZXlpZCA9IDprZXlpZCAKICAgICAg ICAgMC40MDggICAgICAgICAgIDAgIFNFTEVDVCBpZCwgYmxvY2tfcmFuZ2UgRlJPTSB0ZXN0IFdI RVJFIGlkID0gJzppZCcgQU5EIGJsb2NrX3JhbmdlICYmICc6YmxvY2tfcmFuZ2UnOwpwZ2JlbmNo ICgxN2RldmVsKQp0cmFuc2FjdGlvbiB0eXBlOiBiZW5jaC5wZ2JlbmNoCnNjYWxpbmcgZmFjdG9y OiAxCnF1ZXJ5IG1vZGU6IHNpbXBsZQpudW1iZXIgb2YgY2xpZW50czogMQpudW1iZXIgb2YgdGhy ZWFkczogMQptYXhpbXVtIG51bWJlciBvZiB0cmllczogMQpkdXJhdGlvbjogNjAgcwpudW1iZXIg b2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogMTA5MjM0Cm51bWJlciBvZiBmYWls ZWQgdHJhbnNhY3Rpb25zOiAwICgwLjAwMCUpCmxhdGVuY3kgYXZlcmFnZSA9IDAuNTQ5IG1zCmlu aXRpYWwgY29ubmVjdGlvbiB0aW1lID0gMi4xNDEgbXMKdHBzID0gMTgyMC42MjA3MzkgKHdpdGhv dXQgaW5pdGlhbCBjb25uZWN0aW9uIHRpbWUpCnN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlz ZWNvbmRzIGFuZCBmYWlsdXJlczoKICAgICAgICAgMC4wMDAgICAgICAgICAgIDAgIFxzZXQga2V5 aWQgcmFuZG9tKDEsIDEwMDAwKQogICAgICAgICAwLjE0MiAgICAgICAgICAgMCAgU0VMRUNUIGlk LCBibG9ja19yYW5nZSBGUk9NIHRlc3RfZGF0YXNldCBXSEVSRSBrZXlpZCA9IDprZXlpZCAKICAg ICAgICAgMC40MDYgICAgICAgICAgIDAgIFNFTEVDVCBpZCwgYmxvY2tfcmFuZ2UgRlJPTSB0ZXN0 IFdIRVJFIGlkID0gJzppZCcgQU5EIGJsb2NrX3JhbmdlICYmICc6YmxvY2tfcmFuZ2UnOwpwZ2Jl bmNoICgxN2RldmVsKQp0cmFuc2FjdGlvbiB0eXBlOiBiZW5jaC5wZ2JlbmNoCnNjYWxpbmcgZmFj dG9yOiAxCnF1ZXJ5IG1vZGU6IHNpbXBsZQpudW1iZXIgb2YgY2xpZW50czogMQpudW1iZXIgb2Yg dGhyZWFkczogMQptYXhpbXVtIG51bWJlciBvZiB0cmllczogMQpkdXJhdGlvbjogNjAgcwpudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogMTExNDI5Cm51bWJlciBvZiBm YWlsZWQgdHJhbnNhY3Rpb25zOiAwICgwLjAwMCUpCmxhdGVuY3kgYXZlcmFnZSA9IDAuNTM4IG1z CmluaXRpYWwgY29ubmVjdGlvbiB0aW1lID0gMi4zOTcgbXMKdHBzID0gMTg1Ny4yMDczNTcgKHdp dGhvdXQgaW5pdGlhbCBjb25uZWN0aW9uIHRpbWUpCnN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWls bGlzZWNvbmRzIGFuZCBmYWlsdXJlczoKICAgICAgICAgMC4wMDAgICAgICAgICAgIDAgIFxzZXQg a2V5aWQgcmFuZG9tKDEsIDEwMDAwKQogICAgICAgICAwLjE0MCAgICAgICAgICAgMCAgU0VMRUNU IGlkLCBibG9ja19yYW5nZSBGUk9NIHRlc3RfZGF0YXNldCBXSEVSRSBrZXlpZCA9IDprZXlpZCAK ICAgICAgICAgMC4zOTcgICAgICAgICAgIDAgIFNFTEVDVCBpZCwgYmxvY2tfcmFuZ2UgRlJPTSB0 ZXN0IFdIRVJFIGlkID0gJzppZCcgQU5EIGJsb2NrX3JhbmdlICYmICc6YmxvY2tfcmFuZ2UnOwo= --=-mVeW48Taf2ewCNErnisv Content-Disposition: attachment; filename="v6-Add-GIST-sortsupport-btree-gist.patch" Content-Type: text/x-patch; name="v6-Add-GIST-sortsupport-btree-gist.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9iaXQuYyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9iaXQuYwppbmRleCA2NzkwZjIyYjRiNi4uNjdlYTVkOWUxODIgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9iaXQuYworKysgYi9jb250cmliL2J0cmVl X2dpc3QvYnRyZWVfYml0LmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSAiYnRyZWVfZ2lzdC5o IgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX3Zhci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCi0jaW5jbHVkZSAidXRpbHMvYnl0ZWEuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9y dC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmJpdC5oIgogCiAKQEAgLTE5LDEwICsxOSwzMyBAQCBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9iaXRfcGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9f VjEoZ2J0X2JpdF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2JpdF9wZW5h bHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2JpdF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X2JpdF9zb3J0c3VwcG9ydCk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF92YXJi aXRfc29ydHN1cHBvcnQpOwogCiAKIC8qIGRlZmluZSBmb3IgY29tcGFyaXNvbiAqLwogCitzdGF0 aWMgaW50CitnYnRfYml0X3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNz dXApCit7CisJR0JUX1ZBUktFWSAqa2V5MSA9IFBHX0RFVE9BU1RfREFUVU0oeCk7CisJR0JUX1ZB UktFWSAqa2V5MiA9IFBHX0RFVE9BU1RfREFUVU0oeSk7CisKKwlHQlRfVkFSS0VZX1IgYXJnMSA9 IGdidF92YXJfa2V5X3JlYWRhYmxlKGtleTEpOworCUdCVF9WQVJLRVlfUiBhcmcyID0gZ2J0X3Zh cl9rZXlfcmVhZGFibGUoa2V5Mik7CisJRGF0dW0gcmVzdWx0OworCisJLyogbG93ZXIgaXMgYWx3 YXlzIGVxdWFsIHRvIHVwcGVyLCBzbyBqdXN0IGNvbXBhcmUgdGhvc2UgZmllbGRzICovCisJcmVz dWx0ID0gRGlyZWN0RnVuY3Rpb25DYWxsMihiaXRjbXAsCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0 dW0oYXJnMS5sb3dlciksCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0oYXJnMi5sb3dlcikpOwor CisJR0JUX0ZSRUVfSUZfQ09QWShrZXkxLCB4KTsKKwlHQlRfRlJFRV9JRl9DT1BZKGtleTIsIHkp OworCisJcmV0dXJuIERhdHVtR2V0SW50MzIocmVzdWx0KTsKK30KKwogc3RhdGljIGJvb2wKIGdi dF9iaXRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBPaWQgY29sbGF0aW9uLCBGbWdy SW5mbyAqZmxpbmZvKQogewpAQCAtMjA4LDMgKzIzMSwyNSBAQCBnYnRfYml0X3BlbmFsdHkoUEdf RlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fUE9JTlRFUihnYnRfdmFyX3BlbmFsdHkocmVzdWx0 LCBvLCBuLCBQR19HRVRfQ09MTEFUSU9OKCksCiAJCQkJCQkJCQkgICZ0aW5mbywgZmNpbmZvLT5m bGluZm8pKTsKIH0KKworRGF0dW0KK2didF9iaXRfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRF UigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRfYml0X3NzdXBfY21wOworCXNzdXAtPnNz dXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworRGF0dW0KK2didF92 YXJiaXRfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3Vw ID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0 b3IgPSBnYnRfYml0X3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdf UkVUVVJOX1ZPSUQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYm9vbC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX2Jvb2wuYwppbmRleCA4YjJhZjEyOWI1Mi4uNTA1OGRiYTI5ODYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9ib29sLmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX2Jvb2wuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5j bHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1 ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYgc3RydWN0IGJvb2xrZXkKIHsKQEAg LTIzLDYgKzI0LDE2IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xfcGlja3NwbGl0KTsK IFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9ib29sX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfYm9vbF9z YW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xfc29ydHN1cHBvcnQpOworCitzdGF0 aWMgaW50CitnYnRfYm9vbF9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBz c3VwKQoreworCWJvb2xLRVkJKmFyZzEgPSAoYm9vbEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7 CisJYm9vbEtFWSAqYXJnMiA9IChib29sS0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCXJl dHVybiBhcmcxLT5sb3dlciAtIGFyZzItPmxvd2VyOworfQogCiBzdGF0aWMgYm9vbAogZ2J0X2Jv b2xndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZvKQpAQCAt MTY3LDMgKzE3OCwxNCBAQCBnYnRfYm9vbF9zYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3Vs dCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZv LT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRf Ym9vbF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAg PSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRv ciA9IGdidF9ib29sX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdf UkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9i eXRlYS5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2J5dGVhLmMKaW5kZXggNmIwMDVmMDE1 N2UuLjIwNDdlM2RkZWUwIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYnl0 ZWEuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYnl0ZWEuYwpAQCAtNiw3ICs2LDcg QEAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfdmFyLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKLSNpbmNsdWRlICJ1dGlscy9ieXRlYS5oIgor I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIAogLyoKQEAgLTE4LDcgKzE4LDQxIEBA IFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2J5dGVhX3BpY2tzcGxpdCk7CiBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9ieXRlYV9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2J5 dGVhX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfYnl0ZWFfc2FtZSk7CitQR19G VU5DVElPTl9JTkZPX1YxKGdidF9ieXRlYV9zb3J0c3VwcG9ydCk7CiAKKy8qIHNvcnRzdXBwb3J0 IHN1cHBvcnQgKi8KKworc3RhdGljIGludAorZ2J0X2J5dGVhX3NzdXBfY21wKERhdHVtIHgsIERh dHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJR0JUX1ZBUktFWSAqa2V5MSA9IFBHX0RFVE9B U1RfREFUVU0oeCk7CisJR0JUX1ZBUktFWSAqa2V5MiA9IFBHX0RFVE9BU1RfREFUVU0oeSk7CisK KwlHQlRfVkFSS0VZX1IgeGtleSA9IGdidF92YXJfa2V5X3JlYWRhYmxlKGtleTEpOworCUdCVF9W QVJLRVlfUiB5a2V5ID0gZ2J0X3Zhcl9rZXlfcmVhZGFibGUoa2V5Mik7CisJRGF0dW0gcmVzdWx0 OworCisJLyogbG93ZXIgYW5kIHVwcGVyIGFyZSBhbHdheXMgdGhlIHNhbWUsIHNvIGl0IGlzIGVu b3VnaCB0byBjb21wYXJlIGxvd2VyICovCisJcmVzdWx0ID0gRGlyZWN0RnVuY3Rpb25DYWxsMihi eXRlYWNtcCwKKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bSh4a2V5Lmxvd2VyKSwKKwkJCQkJCQkJ IFBvaW50ZXJHZXREYXR1bSh5a2V5Lmxvd2VyKSk7CisKKwlHQlRfRlJFRV9JRl9DT1BZKGtleTEs IHgpOworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MiwgeSk7CisKKwlyZXR1cm4gRGF0dW1HZXRJbnQz MihyZXN1bHQpOworfQorCitEYXR1bQorZ2J0X2J5dGVhX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BP SU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X2J5dGVhX3NzdXBfY21wOworCXNz dXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogLyogZGVm aW5lIGZvciBjb21wYXJpc29uICovCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9i dHJlZV9jYXNoLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5jCmluZGV4IDU0NmI5 NDhlYTQwLi45NDA5MGM5YWMwZCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVl X2Nhc2guYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5jCkBAIC03LDYgKzcs NyBAQAogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQu aCIKICNpbmNsdWRlICJ1dGlscy9jYXNoLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQu aCIKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1LDYgKzI2LDIxIEBAIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X2Nhc2hfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9jYXNo X2Rpc3RhbmNlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Nhc2hfcGVuYWx0eSk7CiBQR19G VU5DVElPTl9JTkZPX1YxKGdidF9jYXNoX3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf Y2FzaF9zb3J0c3VwcG9ydCk7CisKK2V4dGVybiBEYXR1bSBjYXNoX2NtcChQR19GVU5DVElPTl9B UkdTKTsKKworc3RhdGljIGludAorZ2J0X2Nhc2hfc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwg U29ydFN1cHBvcnQgc3N1cCkKK3sKKwljYXNoS0VZCSphcmcxID0gKGNhc2hLRVkgKikgRGF0dW1H ZXRQb2ludGVyKHgpOworCWNhc2hLRVkJKmFyZzIgPSAoY2FzaEtFWSAqKSBEYXR1bUdldFBvaW50 ZXIoeSk7CisKKwkvKiBTaW5jZSBsb3dlciBhbmQgdXBwZXIgYXJlIGFsd2F5cyBlcXVhbCwgaXQg aXMgZW5vdWdoIHRvIGNvbXBhcmUgbG93ZXIgKi8KKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJl Y3RGdW5jdGlvbkNhbGwyKGNhc2hfY21wLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ2FzaEdldERhdHVtKGFyZzEtPmxvd2VyKSwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENhc2hHZXREYXR1bShhcmcyLT5sb3dlcikpKTsKK30K IAogc3RhdGljIGJvb2wKIGdidF9jYXNoZ3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwg Rm1nckluZm8gKmZsaW5mbykKQEAgLTIxNSwzICsyMzEsMTQgQEAgZ2J0X2Nhc2hfc2FtZShQR19G VU5DVElPTl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVtX3NhbWUoKHZvaWQgKikgYjEsICh2b2lk ICopIGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsKIAlQR19SRVRVUk5fUE9JTlRFUihyZXN1 bHQpOwogfQorCitEYXR1bQorZ2J0X2Nhc2hfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigw KTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRfY2FzaF9zc3VwX2NtcDsKKwlzc3VwLT5zc3Vw X2V4dHJhID0gTlVMTDsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfZGF0ZS5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Rh dGUuYwppbmRleCA2OGE0MTA3ZGJmMC4uYzRmZjE1ZjI3YjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9kYXRlLmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Rh dGUuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAi YnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGUuaCIKIAogdHlwZWRl ZiBzdHJ1Y3QKQEAgLTI1LDYgKzI2LDMwIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2RhdGVf Y29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9kYXRlX2Rpc3RhbmNlKTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2RhdGVfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1Yx KGdidF9kYXRlX3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZGF0ZV9zb3J0c3VwcG9y dCk7CisKKy8qIHNvcnRzdXBwb3J0IGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IGdidF9kYXRl X3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJZGF0ZUtF WSAqYWtleSA9IChkYXRlS0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwlkYXRlS0VZICpia2V5 ID0gKGRhdGVLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJcmV0dXJuIERhdHVtR2V0SW50 MzIoRGlyZWN0RnVuY3Rpb25DYWxsMihkYXRlX2NtcCwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdGVBRFRHZXREYXR1bShha2V5LT5sb3dlciksCisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlQURUR2V0RGF0dW0oYmtleS0+ bG93ZXIpKSk7Cit9CisKK0RhdHVtCitnYnRfZGF0ZV9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9B UkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lO VEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9kYXRlX3NzdXBfY21wOworCXNzdXAt PnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3RhdGljIGJv b2wKIGdidF9kYXRlZ3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZs aW5mbykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9lbnVtLmMgYi9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jCmluZGV4IGQ0ZGMzOGEzOGU1Li42NzM5NTE4MjM0 MSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2VudW0uYworKysgYi9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0 cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIC8qIGVudW1zIGFyZSBy ZWFsbHkgT2lkcywgc28gd2UganVzdCB1c2UgdGhlIHNhbWUgc3RydWN0dXJlICovCiAKQEAgLTI2 LDggKzI3LDIwIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2VudW1fcGlja3NwbGl0KTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2VudW1fY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZP X1YxKGdidF9lbnVtX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZW51bV9zYW1l KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2VudW1fc29ydHN1cHBvcnQpOwogCiAKK3N0YXRp YyBpbnQKK2didF9lbnVtX3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNz dXApCit7CisJb2lkS0VZICphcmcxID0gKG9pZEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJ b2lkS0VZICphcmcyID0gKG9pZEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwkvKiBTaW5j ZSBsb3dlciBhbmQgdXBwZXIgaW4gb2lkS0VZIGFyZSBhbHdheXMgdGhlIHNhbWUsIGp1c3QgY29t cGFyZSBsb3dlciAqLworCXJldHVybiBEYXR1bUdldEludDMyKENhbGxlckZJbmZvRnVuY3Rpb25D YWxsMihlbnVtX2NtcCwgc3N1cC0+c3N1cF9leHRyYSwKKwkJCQkJCQkJCQkJCSAgSW52YWxpZE9p ZCwgYXJnMS0+bG93ZXIsIGFyZzItPmxvd2VyKSk7Cit9CisKIHN0YXRpYyBib29sCiBnYnRfZW51 bWd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCiB7CkBA IC0xODMsMyArMTk2LDIwIEBAIGdidF9lbnVtX3NhbWUoUEdfRlVOQ1RJT05fQVJHUykKIAkqcmVz dWx0ID0gZ2J0X251bV9zYW1lKCh2b2lkICopIGIxLCAodm9pZCAqKSBiMiwgJnRpbmZvLCBmY2lu Zm8tPmZsaW5mbyk7CiAJUEdfUkVUVVJOX1BPSU5URVIocmVzdWx0KTsKIH0KKworRGF0dW0KK2di dF9lbnVtX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1 cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJh dG9yID0gZ2J0X2VudW1fc3N1cF9jbXA7CisKKwkvKgorCSAqIFNpbmNlIGVudW1fZmFzdF9jbXAo KSBhbHNvIHVzZXMgZW51bV9jbXAoKSBsaWtlIHRoZSByZXN0IG9mIHRoZQorCSAqIGNvbXBhcnNp b24gZnVuY3Rpb25zLCBpdCBhbHNvIG5lZWRzIHRvIHBhc3Mgb24gZmxpbmZvIHdoZW4gY2FsbGlu ZworCSAqIGl0LiBUaHVzIHNhdmUgaXQgaW4gLT5zc3VwX2V4dHJhIGFuZCBsYXRlciByZXRyaWV2 ZSBpdCBpbiBlbnVtX2Zhc3RfY21wKCkuCisJICovCisJc3N1cC0+c3N1cF9leHRyYSA9IGZjaW5m by0+ZmxpbmZvOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9mbG9hdDQuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9mbG9h dDQuYwppbmRleCA4NGNhNWVlZTUwMS4uYjIyMjljZGIwNGQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV9mbG9hdDQuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf ZmxvYXQ0LmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5j bHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIK ICNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgogCiB0eXBlZGVmIHN0cnVjdCBmbG9hdDRrZXkKQEAg LTI0LDYgKzI1LDMzIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Zsb2F0NF9jb25zaXN0ZW50 KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Zsb2F0NF9kaXN0YW5jZSk7CiBQR19GVU5DVElP Tl9JTkZPX1YxKGdidF9mbG9hdDRfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9m bG9hdDRfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9mbG9hdDRfc29ydHN1cHBvcnQp OworCitleHRlcm4gRGF0dW0gYnRmbG9hdDRjbXAoUEdfRlVOQ1RJT05fQVJHUyk7CisKKy8qIHNv cnRzdXBwb3J0IGZ1bmN0aW9ucyAqLworc3RhdGljIGludAorZ2J0X2Zsb2F0NF9zc3VwX2NtcChE YXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCWZsb2F0NEtFWSAqYXJnMSA9 IChmbG9hdDRLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCWZsb2F0NEtFWSAqYXJnMiA9IChm bG9hdDRLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogU2luY2UgbG93ZXIgYW5kIHVw cGVyIGZvciBmbG9hdDRLRVlzIGhlcmUgYXJlIGFsd2F5cyBlcXVhbCBpdCBpcyBva2F5IHRvIGNv bXBhcmUgdGhlbSBvbmx5ICovCisJcmV0dXJuIERhdHVtR2V0SW50MzIoRGlyZWN0RnVuY3Rpb25D YWxsMihidGZsb2F0NGNtcCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0NEdldERhdHVtKGFyZzEtPmxvd2VyKSwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0NEdldERhdHVtKGFyZzItPmxvd2VyKSkpOworfQorCitE YXR1bQorZ2J0X2Zsb2F0NF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRT dXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1 cC0+Y29tcGFyYXRvciA9IGdidF9mbG9hdDRfc3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9 IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQogCiBzdGF0aWMgYm9vbAogZ2J0X2Zsb2F0 NGd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYg LS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ4LmMgYi9jb250cmliL2J0cmVl X2dpc3QvYnRyZWVfZmxvYXQ4LmMKaW5kZXggMDgxYTcxOWIwMDYuLjJmMzEyZjViZDgzIDEwMDY0 NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ4LmMKKysrIGIvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX2Zsb2F0OC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiYnRy ZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUgInV0aWxz L3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKIAogdHlwZWRlZiBzdHJ1 Y3QgZmxvYXQ4a2V5CkBAIC0yNCw3ICsyNSwzMyBAQCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9m bG9hdDhfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9mbG9hdDhfZGlzdGFu Y2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZmxvYXQ4X3BlbmFsdHkpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfZmxvYXQ4X3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZmxv YXQ4X3NvcnRzdXBwb3J0KTsKIAorZXh0ZXJuIERhdHVtIGJ0ZmxvYXQ4Y21wKFBHX0ZVTkNUSU9O X0FSR1MpOworCisvKiBzb3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQKK2didF9m bG9hdDhfc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlm bG9hdDhLRVkgKmFyZzEgPSAoZmxvYXQ4S0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwlmbG9h dDhLRVkgKmFyZzIgPSAoZmxvYXQ4S0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIHVw cGVyIGFuZCBsb3dlciBmb3IgaW5wdXQga2V5cyBhcmUgZXF1YWwgaGVyZSAqLworCXJldHVybiBE YXR1bUdldEludDMyKERpcmVjdEZ1bmN0aW9uQ2FsbDIoYnRmbG9hdDhjbXAsCisJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDhHZXREYXR1bShhcmcxLT5sb3dl ciksCisJCQkJCQkJCQkJCSBGbG9hdDhHZXREYXR1bShhcmcyLT5sb3dlcikpKTsKK30KKworRGF0 dW0KK2didF9mbG9hdDhfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3Vw cG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAt PmNvbXBhcmF0b3IgPSBnYnRfZmxvYXQ4X3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBO VUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3RhdGljIGJvb2wKIGdidF9mbG9hdDhn dChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZvKQpkaWZmIC0t Z2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuNy0tMS44LnNxbCBiL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LS0xLjctLTEuOC5zcWwKaW5kZXggMzA3YmZlNTc0YjAu LjY1NzI4NWNhN2NlIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0t MS43LS0xLjguc3FsCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LS0xLjctLTEu OC5zcWwKQEAgLTg1LDMgKzg1LDQgQEAgQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfZW51bV9v cHMgVVNJTkcgZ2lzdCBBREQKIAogQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfYm9vbF9vcHMg VVNJTkcgZ2lzdCBBREQKIAlGVU5DVElPTiAxMiAoYm9vbCwgYm9vbCkgZ2lzdF9zdHJhdG51bV9i dHJlZSAoaW50MikgOworCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lz dC0tMS44LS0xLjkuc3FsIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuOC0tMS45 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzUyZTc1MGVkMWEK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS44LS0x Ljkuc3FsCkBAIC0wLDAgKzEsMTkyIEBACisvKiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lz dC0tMS43LS0xLjguc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGlu IHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVS IEVYVEVOU0lPTiBidHJlZV9naXN0IFVQREFURSBUTyAnMS45JyIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBnYnRfYml0X3NvcnRzdXBwb3J0KGludGVybmFsKQor UkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUg U1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X3ZhcmJpdF9zb3J0c3VwcG9ydChpbnRlcm5h bCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRB QkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9ib29sX3NvcnRzdXBwb3J0KGludGVy bmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1V VEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2Nhc2hfc29ydHN1cHBvcnQoaW50 ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElN TVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfZW51bV9zb3J0c3VwcG9ydChp bnRlcm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMg SU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9pbmV0X3NvcnRzdXBwb3J0 KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0Ug QyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2ludHZfc29ydHN1cHBv cnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFH RSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfbWFjYWQ4X3NvcnRz dXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFO R1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X3RpbWVfc29y dHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitM QU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfaW50Ml9z b3J0c3VwcG9ydChpbnRlcm5hbCkKKyAgICBSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5B TUUnCisgICAgTEFOR1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04g Z2J0X2ludDRfc29ydHN1cHBvcnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVO Q1RJT04gZ2J0X2ludDhfc29ydHN1cHBvcnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitB UyAnTU9EVUxFX1BBVEhOQU1FJworICAgIExBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKwor Q1JFQVRFIEZVTkNUSU9OIGdidF9ieXRlYV9zb3J0c3VwcG9ydChpbnRlcm5hbCkKKyAgICBSRVRV Uk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCisgICAgTEFOR1VBR0UgQyBJTU1VVEFCTEUg U1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2RhdGVfc29ydHN1cHBvcnQoaW50ZXJuYWwp CisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworICAgIExBTkdVQUdFIEMg SU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9mbG9hdDRfc29ydHN1cHBv cnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworICAg IExBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9mbG9h dDhfc29ydHN1cHBvcnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BB VEhOQU1FJworICAgIExBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNU SU9OIGdidF9tYWNhZGRyX3NvcnRzdXBwb3J0KGludGVybmFsKQorICAgIFJFVFVSTlMgdm9pZAor QVMgJ01PRFVMRV9QQVRITkFNRScKKyAgICBMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisK K0NSRUFURSBGVU5DVElPTiBnYnRfbnVtZXJpY19zb3J0c3VwcG9ydChpbnRlcm5hbCkKKyAgICBS RVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCisgICAgTEFOR1VBR0UgQyBJTU1VVEFC TEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X29pZF9zb3J0c3VwcG9ydChpbnRlcm5h bCkKKyAgICBSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCisgICAgTEFOR1VBR0Ug QyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X3RleHRfc29ydHN1cHBv cnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworICAg IExBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF90c19z b3J0c3VwcG9ydChpbnRlcm5hbCkKKyAgICBSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5B TUUnCisgICAgTEFOR1VBR0UgQyBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04g Z2J0X3V1aWRfc29ydHN1cHBvcnQoaW50ZXJuYWwpCisgICAgUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJworICAgIExBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQUxURVIg T1BFUkFUT1IgRkFNSUxZIGdpc3RfdmJpdF9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElP TiAgICAxMSAgKHZhcmJpdCwgdmFyYml0KSBnYnRfdmFyYml0X3NvcnRzdXBwb3J0IChpbnRlcm5h bCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9iaXRfb3BzIFVTSU5HIGdpc3QgQURE CisgICAgRlVOQ1RJT04gICAgMTEgIChiaXQsIGJpdCkgZ2J0X2JpdF9zb3J0c3VwcG9ydCAoaW50 ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfYm9vbF9vcHMgVVNJTkcgZ2lz dCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGJvb2wsIGJvb2wpIGdidF9ib29sX3NvcnRzdXBw b3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9ieXRlYV9vcHMg VVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGJ5dGVhLCBieXRlYSkgZ2J0X2J5 dGVhX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lz dF9jYXNoX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAobW9uZXksIG1v bmV5KSBnYnRfY2FzaF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1Ig RkFNSUxZIGdpc3RfZGF0ZV9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAg KGRhdGUsIGRhdGUpIGdidF9kYXRlX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBP UEVSQVRPUiBGQU1JTFkgZ2lzdF9lbnVtX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9O ICAgIDExICAoYW55ZW51bSwgYW55ZW51bSkgZ2J0X2VudW1fc29ydHN1cHBvcnQgKGludGVybmFs KSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2Zsb2F0NF9vcHMgVVNJTkcgZ2lzdCBB REQKKyAgICBGVU5DVElPTiAgICAxMSAgKGZsb2F0NCwgZmxvYXQ0KSBnYnRfZmxvYXQ0X3NvcnRz dXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9mbG9hdDhf b3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgIChmbG9hdDgsIGZsb2F0OCkg Z2J0X2Zsb2F0OF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFN SUxZIGdpc3RfaW5ldF9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAxMSAgKGlu ZXQsIGluZXQpIGdidF9pbmV0X3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVS QVRPUiBGQU1JTFkgZ2lzdF9jaWRyX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAg IDExICAoaW5ldCwgaW5ldCkgZ2J0X2luZXRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FM VEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2ludDJfb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVO Q1RJT04gICAgMTEgIChpbnQyLCBpbnQyKSBnYnRfaW50Ml9zb3J0c3VwcG9ydCAoaW50ZXJuYWwp IDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfaW50NF9vcHMgVVNJTkcgZ2lzdCBBREQK KyAgICBGVU5DVElPTiAgICAxMSAgKGludDQsIGludDQpIGdidF9pbnQ0X3NvcnRzdXBwb3J0IChp bnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9pbnQ4X29wcyBVU0lORyBn aXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAoaW50OCwgaW50OCkgZ2J0X2ludDhfc29ydHN1 cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2ludGVydmFs X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAoaW50ZXJ2YWwsIGludGVy dmFsKSBnYnRfaW50dl9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1Ig RkFNSUxZIGdpc3RfbWFjYWRkcl9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAx MSAgKG1hY2FkZHIsIG1hY2FkZHIpIGdidF9tYWNhZDhfc29ydHN1cHBvcnQgKGludGVybmFsKSA7 CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X21hY2FkZHI4X29wcyBVU0lORyBnaXN0IEFE RAorICAgIEZVTkNUSU9OICAgIDExICAobWFjYWRkcjgsIG1hY2FkZHI4KSBnYnRfbWFjYWQ4X3Nv cnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9udW1l cmljX29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAobnVtZXJpYywgbnVt ZXJpYykgZ2J0X251bWVyaWNfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJB VE9SIEZBTUlMWSBnaXN0X29pZF9vcHMgVVNJTkcgZ2lzdCBBREQKKyAgICBGVU5DVElPTiAgICAx MSAgKG9pZCwgb2lkKSBnYnRfb2lkX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBP UEVSQVRPUiBGQU1JTFkgZ2lzdF90ZXh0X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9O ICAgIDExICAodGV4dCwgdGV4dCkgZ2J0X3RleHRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisK K0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2JwY2hhcl9vcHMgVVNJTkcgZ2lzdCBBREQKKyAg ICBGVU5DVElPTiAgICAxMSAgKGJwY2hhciwgYnBjaGFyKSBicGNoYXJfc29ydHN1cHBvcnQgKGlu dGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X3RpbWVfb3BzIFVTSU5HIGdp c3QgQURECisgICAgRlVOQ1RJT04gICAgMTEgICh0aW1lLCB0aW1lKSBnYnRfdGltZV9zb3J0c3Vw cG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfdGltZXN0YW1w X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAodGltZXN0YW1wLCB0aW1l c3RhbXApIGdidF90c19zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1Ig RkFNSUxZIGdpc3RfdGltZXN0YW1wdHpfb3BzIFVTSU5HIGdpc3QgQURECisgICAgRlVOQ1RJT04g ICAgMTEgICh0aW1lc3RhbXB0eiwgdGltZXN0YW1wdHopIGdidF90c19zb3J0c3VwcG9ydCAoaW50 ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfdGltZXR6X29wcyBVU0lORyBn aXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAodGltZXR6LCB0aW1ldHopIGdidF90aW1lX3Nv cnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF91dWlk X29wcyBVU0lORyBnaXN0IEFERAorICAgIEZVTkNUSU9OICAgIDExICAodXVpZCwgdXVpZCkgZ2J0 X3V1aWRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVl X2dpc3QvYnRyZWVfZ2lzdC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuYwppbmRl eCA1ZmQ0Y2NlMjdkMC4uYzhhY2JlNzZiNTUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV9naXN0LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuYwpAQCAt Niw2ICs2LDkgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2dpc3QuaCIKKyNpbmNsdWRlICJidHJl ZV9naXN0LmgiCisKIFBHX01PRFVMRV9NQUdJQzsKIAogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf ZGVjb21wcmVzcyk7CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5j b250cm9sIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29udHJvbAppbmRleCBhYmY2 NjUzOGYzMi4uNjlkOTM0MWEwYWQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9naXN0LmNvbnRyb2wKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29udHJv bApAQCAtMSw2ICsxLDYgQEAKICMgYnRyZWVfZ2lzdCBleHRlbnNpb24KIGNvbW1lbnQgPSAnc3Vw cG9ydCBmb3IgaW5kZXhpbmcgY29tbW9uIGRhdGF0eXBlcyBpbiBHaVNUJwotZGVmYXVsdF92ZXJz aW9uID0gJzEuOCcKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjknCiBtb2R1bGVfcGF0aG5hbWUgPSAn JGxpYmRpci9idHJlZV9naXN0JwogcmVsb2NhdGFibGUgPSB0cnVlCiB0cnVzdGVkID0gdHJ1ZQpk aWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuaCBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9naXN0LmgKaW5kZXggMGRiODUyMmM4YTcuLjI0NWMzNTU5MjgxIDEwMDY0 NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5oCisrKyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9naXN0LmgKQEAgLTksNiArOSwxMiBAQAogCiAjZGVmaW5lIEJ0cmVlR2lz dE5vdEVxdWFsU3RyYXRlZ3lOdW1iZXIgNgogCit0eXBlZGVmIHN0cnVjdCBpbnQzMmtleQorewor ICBpbnQzMgkJbG93ZXI7CisgIGludDMyCQl1cHBlcjsKK30gaW50MzJLRVk7CisKIC8qIGluZGV4 ZWQgdHlwZXMgKi8KIAogZW51bSBnYnRyZWVfdHlwZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJl ZV9naXN0L2J0cmVlX2luZXQuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbmV0LmMKaW5k ZXggMmZiOTUyZGNhODMuLjc3ZWYxNGE0ZjdkIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dp c3QvYnRyZWVfaW5ldC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbmV0LmMKQEAg LTgsNiArOCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmV0LmgiCisjaW5jbHVkZSAidXRpbHMv c29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgaW5ldGtleQogewpAQCAtMjQsOCArMjUs MjMgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW5ldF9waWNrc3BsaXQpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfaW5ldF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X2luZXRfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbmV0X3NhbWUpOworUEdf RlVOQ1RJT05fSU5GT19WMShnYnRfaW5ldF9zb3J0c3VwcG9ydCk7CiAKIAorc3RhdGljIGludAor Z2J0X2luZXRfc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sK KwlpbmV0S0VZICphcmcxID0gKGluZXRLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCWluZXRL RVkgKmFyZzIgPSAoaW5ldEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwlpZiAoYXJnMS0+ bG93ZXIgPT0gYXJnMi0+bG93ZXIpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGFyZzEtPmxvd2Vy ID4gYXJnMi0+bG93ZXIpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCiBz dGF0aWMgYm9vbAogZ2J0X2luZXRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdy SW5mbyAqZmxpbmZvKQogewpAQCAtMTg1LDMgKzIwMSwxNCBAQCBnYnRfaW5ldF9zYW1lKFBHX0ZV TkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQg KikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3Vs dCk7CiB9CisKK0RhdHVtCitnYnRfaW5ldF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQor eworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9pbmV0X3NzdXBfY21wOworCXNzdXAtPnNzdXBf ZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50 Mi5jCmluZGV4IGZkYmYxNTY1ODZjLi5iMTk3NzBmZjY3ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX2ludDIuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50 Mi5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiYnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUg ImJ0cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5j bHVkZSAiY29tbW9uL2ludC5oIgogCiB0eXBlZGVmIHN0cnVjdCBpbnQxNmtleQpAQCAtMjQsNiAr MjUsMzEgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50Ml9jb25zaXN0ZW50KTsKIFBHX0ZV TkNUSU9OX0lORk9fVjEoZ2J0X2ludDJfZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShn YnRfaW50Ml9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDJfc2FtZSk7CitQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQyX3NvcnRzdXBwb3J0KTsKKworLyogc29ydHN1cHBv cnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRfaW50Ml9zc3VwX2NtcChEYXR1bSB4LCBE YXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCWludDE2S0VZICphcmcxID0gKGludDE2S0VZ ICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwlpbnQxNktFWSAqYXJnMiA9IChpbnQxNktFWSAqKSBE YXR1bUdldFBvaW50ZXIoeSk7CisKKwlpZiAoYXJnMS0+bG93ZXIgPCBhcmcyLT5sb3dlcikKKwkJ cmV0dXJuIC0xOworCWVsc2UgaWYgKGFyZzEtPmxvd2VyID4gYXJnMi0+bG93ZXIpCisJCXJldHVy biAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK0RhdHVtCitnYnRfaW50Ml9zb3J0c3VwcG9y dChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQp IFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9pbnQyX3Nz dXBfY21wOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CiAKIHN0YXRpYyBib29sCiBnYnRfaW50Mmd0 KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYgLS1n aXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50NC5jIGIvY29udHJpYi9idHJlZV9naXN0 L2J0cmVlX2ludDQuYwppbmRleCA4OTE1ZmI1ZDA4Ny4uNjA0MTg1MTFlZGUgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQ0LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0 L2J0cmVlX2ludDQuYwpAQCAtMiwxNiArMiwxMCBAQAogICogY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX2ludDQuYwogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKLQorI2luY2x1ZGUgImNvbW1v bi9pbnQuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1ZGUgImJ0cmVl X2dpc3QuaCIKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKLSNpbmNsdWRlICJjb21tb24v aW50LmgiCi0KLXR5cGVkZWYgc3RydWN0IGludDMya2V5Ci17Ci0JaW50MzIJCWxvd2VyOwotCWlu dDMyCQl1cHBlcjsKLX0gaW50MzJLRVk7CiAKIC8qCiAqKiBpbnQzMiBvcHMKQEAgLTI0LDYgKzE4 LDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50NF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEoZ2J0X2ludDRfZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf aW50NF9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDRfc2FtZSk7CitQR19G VU5DVElPTl9JTkZPX1YxKGdidF9pbnQ0X3NvcnRzdXBwb3J0KTsKIAogCiBzdGF0aWMgYm9vbApA QCAtOTAsNiArODUsMjkgQEAgc3RhdGljIGNvbnN0IGdidHJlZV9uaW5mbyB0aW5mbyA9CiAJZ2J0 X2ludDRfZGlzdAogfTsKIAorc3RhdGljIGludAorZ2J0X2ludDRfc3N1cF9jbXAoRGF0dW0gYSwg RGF0dW0gYiwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlpbnQzMktFWSAgICppYSA9IChpbnQzMktF WSAqKSBEYXR1bUdldFBvaW50ZXIoYSk7CisJaW50MzJLRVkgICAqaWIgPSAoaW50MzJLRVkgKikg RGF0dW1HZXRQb2ludGVyKGIpOworCisJLyogaW50NEtFWSB1cHBlciBhbmQgbG93ZXIgYXJlIGFs d2F5cyB0aGUgc2FtZSBmb3IgaW5wdXQga2V5cyBoZXJlLiAqLworCWlmIChpYS0+bG93ZXIgPCBp Yi0+bG93ZXIpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChpYS0+bG93ZXIgPiBpYi0+bG93ZXIp CisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK0RhdHVtCitnYnRfaW50NF9z b3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29y dFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdi dF9pbnQ0X3NzdXBfY21wOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CiAKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoaW50NF9kaXN0KTsKIERhdHVtCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qv YnRyZWVfaW50OC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDguYwppbmRleCA3YzYz YTViNmRjMS4uMDBkNTUxNjNmYzkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9pbnQ4LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDguYwpAQCAtNiw2ICs2 LDcgQEAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVt LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0 LmgiCiAKIHR5cGVkZWYgc3RydWN0IGludDY0a2V5CiB7CkBAIC0yNCw3ICsyNSwzMiBAQCBQR19G VU5DVElPTl9JTkZPX1YxKGdidF9pbnQ4X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfaW50OF9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQ4X3BlbmFs dHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50OF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X2ludDhfc29ydHN1cHBvcnQpOwogCisvKiBzb3J0c3VwcG9ydCBmdW5jdGlvbnMg Ki8KK3N0YXRpYyBpbnQKK2didF9pbnQ4X3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRT dXBwb3J0IHNzdXApCit7CisJaW50NjRLRVkgKmFyZzEgPSAoaW50NjRLRVkgKikgRGF0dW1HZXRQ b2ludGVyKHgpOworCWludDY0S0VZICphcmcyID0gKGludDY0S0VZICopIERhdHVtR2V0UG9pbnRl cih5KTsKKworCWlmIChhcmcxLT5sb3dlciA8IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gLTE7CisJ ZWxzZSBpZiAoYXJnMS0+bG93ZXIgPiBhcmcyLT5sb3dlcikKKwkJcmV0dXJuIDE7CisJZWxzZQor CQlyZXR1cm4gMDsKKworfQorCitEYXR1bQorZ2J0X2ludDhfc29ydHN1cHBvcnQoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdf UE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRfaW50OF9zc3VwX2NtcDsKKwlQ R19SRVRVUk5fVk9JRCgpOworfQogCiBzdGF0aWMgYm9vbAogZ2J0X2ludDhndChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZvKQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9idHJlZV9naXN0L2J0cmVlX2ludGVydmFsLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf aW50ZXJ2YWwuYwppbmRleCBiMGFmZGYwMmJiNS4uNGRhMzBiZTllNDYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnRlcnZhbC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV9pbnRlcnZhbC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImJ0cmVlX2dpc3Qu aCIKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGlt ZXN0YW1wLmgiCiAKIHR5cGVkZWYgc3RydWN0CkBAIC0yNyw4ICsyOCwyMSBAQCBQR19GVU5DVElP Tl9JTkZPX1YxKGdidF9pbnR2X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf aW50dl9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnR2X3BlbmFsdHkpOwog UEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50dl9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo Z2J0X2ludHZfc29ydHN1cHBvcnQpOwogCiAKK3N0YXRpYyBpbnQKK2didF9pbnR2X3NzdXBfY21w KERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJaW50dktFWSAqYXJnMSA9 IChpbnR2S0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwlpbnR2S0VZICphcmcyID0gKGludHZL RVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogaW50dktFWSBsb3dlciBhbmQgdXBwZXIg YXJlIGFsd2F5cyBlcXVhbCBoZXJlLCBzbyBjb21wYXJlIGp1c3QgbG93ZXIgbWVtYmVycyBpcyBl bm91Z2ggKi8KKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKGludGVy dmFsX2NtcCwKKwkJCQkJCQkJCQkJIEludGVydmFsUEdldERhdHVtKCZhcmcxLT5sb3dlciksCisJ CQkJCQkJCQkJCSBJbnRlcnZhbFBHZXREYXR1bSgmYXJnMi0+bG93ZXIpKSk7Cit9CisKIHN0YXRp YyBib29sCiBnYnRfaW50dmd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZv ICpmbGluZm8pCiB7CkBAIC0yOTUsMyArMzA5LDE0IEBAIGdidF9pbnR2X3NhbWUoUEdfRlVOQ1RJ T05fQVJHUykKIAkqcmVzdWx0ID0gZ2J0X251bV9zYW1lKCh2b2lkICopIGIxLCAodm9pZCAqKSBi MiwgJnRpbmZvLCBmY2luZm8tPmZsaW5mbyk7CiAJUEdfUkVUVVJOX1BPSU5URVIocmVzdWx0KTsK IH0KKworRGF0dW0KK2didF9pbnR2X3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ U29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisK Kwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X2ludHZfc3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRy YSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX21hY2FkZHIuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9tYWNh ZGRyLmMKaW5kZXggMTcyOTA1MjljMDIuLmI5NWZkOGQzNDA5IDEwMDY0NAotLS0gYS9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfbWFjYWRkci5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9tYWNhZGRyLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmV0LmgiCisj aW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1 LDYgKzI2LDM0IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X21hY2FkX3BpY2tzcGxpdCk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X21hY2FkX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfbWFjYWRf c2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZGRyX3NvcnRzdXBwb3J0KTsKKwor Lyogc29ydHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRfbWFjYWRkcl9zc3Vw X2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCW1hY0tFWSAqYXJn MSA9IChtYWNLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCW1hY0tFWSAqYXJnMiA9IChtYWNL RVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogbWFjS0VZIGxvd2VyIGFuZCB1cHBlciBt ZW1iZXJzIGFyZSBhbHdheXMgZXF1YWwgaGVyZSwKKwkgKiBzbyBpdHMgZW5vdWdoIHRvIGNvbXBh cmUganVzdCBsb3dlci4KKwkgKi8KKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlv bkNhbGwyKG1hY2FkZHJfY21wLAorCQkJCQkJCQkJCQkgTWFjYWRkclBHZXREYXR1bSgmYXJnMS0+ bG93ZXIpLAorCQkJCQkJCQkJCQkgTWFjYWRkclBHZXREYXR1bSgmYXJnMi0+bG93ZXIpKSk7CisK K30KKworRGF0dW0KK2didF9tYWNhZGRyX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7 CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X21hY2FkZHJfc3N1cF9jbXA7CisJc3N1cC0+c3N1 cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQogCiAKIHN0YXRpYyBib29s CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbWFjYWRkcjguYyBiL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9tYWNhZGRyOC5jCmluZGV4IDc5NmNjNGVmZWUzLi5jM2ZmN2Vl YjBiNSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX21hY2FkZHI4LmMKKysr IGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX21hY2FkZHI4LmMKQEAgLTcsNiArNyw3IEBACiAj aW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9pbmV0LmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIK IAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1LDggKzI2LDIwIEBAIFBHX0ZVTkNUSU9OX0lORk9f VjEoZ2J0X21hY2FkOF9waWNrc3BsaXQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfbWFjYWQ4 X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfbWFjYWQ4X3BlbmFsdHkpOwog UEdfRlVOQ1RJT05fSU5GT19WMShnYnRfbWFjYWQ4X3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfbWFjYWQ4X3NvcnRzdXBwb3J0KTsKIAogCitzdGF0aWMgaW50CitnYnRfbWFjYWRkcjhf c3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwltYWM4S0VZ ICphcmcxID0gKG1hYzhLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCW1hYzhLRVkgKmFyZzIg PSAobWFjOEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwlyZXR1cm4gRGF0dW1HZXRJbnQz MihEaXJlY3RGdW5jdGlvbkNhbGwyKG1hY2FkZHI4X2NtcCwKKwkJCQkJCQkJCQkJIE1hY2FkZHI4 UEdldERhdHVtKCZhcmcxLT5sb3dlciksCisJCQkJCQkJCQkJCSBNYWNhZGRyOFBHZXREYXR1bSgm YXJnMi0+bG93ZXIpKSk7Cit9CisKIHN0YXRpYyBib29sCiBnYnRfbWFjYWQ4Z3QoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5mbykKIHsKQEAgLTE5NCwzICsyMDcs MTQgQEAgZ2J0X21hY2FkOF9zYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9u dW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8p OwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRfbWFjYWQ4X3Nv cnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0 U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0 X21hY2FkZHI4X3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVU VVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9udW1l cmljLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbnVtZXJpYy5jCmluZGV4IDM1ZTQ2NmNk ZDk0Li4yMjc3MTI2NDVkYSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX251 bWVyaWMuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbnVtZXJpYy5jCkBAIC0xMSw2 ICsxMSw3IEBACiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9u dW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1 cHBvcnQuaCIKIAogLyoKICoqIEJ5dGVhIG9wcwpAQCAtMjEsNyArMjIsMzkgQEAgUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfbnVtZXJpY19waWNrc3BsaXQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShn YnRfbnVtZXJpY19jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X251bWVyaWNf cGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9udW1lcmljX3NhbWUpOworUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfbnVtZXJpY19zb3J0c3VwcG9ydCk7CiAKKy8qIFNvcnRzdXBwb3J0 IGZ1bmN0aW9ucyAqLworc3RhdGljIGludAorZ2J0X251bWVyaWNfc3N1cF9jbXAoRGF0dW0geCwg RGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlHQlRfVkFSS0VZICprZXkxID0gUEdfREVU T0FTVF9EQVRVTSh4KTsKKwlHQlRfVkFSS0VZICprZXkyID0gUEdfREVUT0FTVF9EQVRVTSh5KTsK KworCUdCVF9WQVJLRVlfUiBhcmcxID0gZ2J0X3Zhcl9rZXlfcmVhZGFibGUoa2V5MSk7CisJR0JU X1ZBUktFWV9SIGFyZzIgPSBnYnRfdmFyX2tleV9yZWFkYWJsZShrZXkyKTsKKwlEYXR1bSByZXN1 bHQ7CisKKwlyZXN1bHQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKG51bWVyaWNfY21wLAorCQkJCQkJ CQkgUG9pbnRlckdldERhdHVtKGFyZzEubG93ZXIpLAorCQkJCQkJCQkgUG9pbnRlckdldERhdHVt KGFyZzIubG93ZXIpKTsKKworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MSwgeCk7CisJR0JUX0ZSRUVf SUZfQ09QWShrZXkyLCB5KTsKKworCXJldHVybiBEYXR1bUdldEludDMyKHJlc3VsdCk7Cit9CisK K0RhdHVtCitnYnRfbnVtZXJpY19zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNv cnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJ c3N1cC0+Y29tcGFyYXRvciA9IGdidF9udW1lcmljX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0 cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogLyogZGVmaW5lIGZvciBjb21w YXJpc29uICovCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9vaWQuYyBi L2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9vaWQuYwppbmRleCAzY2M3ZDQyNDVkNC4uNGNlNGQz ZmY4N2UgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9vaWQuYworKysgYi9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfb2lkLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRl ICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCisjaW5jbHVkZSAi dXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTIzLDcgKzI0LDM0 IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X29pZF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9O X0lORk9fVjEoZ2J0X29pZF9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9vaWRf cGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9vaWRfc2FtZSk7CitQR19GVU5DVElP Tl9JTkZPX1YxKGdidF9vaWRfc29ydHN1cHBvcnQpOwogCisvKiBTb3J0c3VwcG9ydCBmdW5jdGlv bnMgKi8KK3N0YXRpYyBpbnQKK2didF9vaWRfc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29y dFN1cHBvcnQgc3N1cCkKK3sKKwlvaWRLRVkgKmFyZzEgPSAob2lkS0VZICopIERhdHVtR2V0UG9p bnRlcih4KTsKKwlvaWRLRVkgKmFyZzIgPSAob2lkS0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsK KworCS8qIHVwcGVyIGFuZCBsb3dlciBmaWVsZHMgYXJlIGVxdWFsIGZvciBlYWNoIG9pZEtFWSwg c28ganVzdCBjb21wYXJlIGxvd2VyICovCisJaWYgKGFyZzEtPmxvd2VyID4gYXJnMi0+bG93ZXIp CisJCXJldHVybiAxOworCWVsc2UgaWYgKGFyZzEtPmxvd2VyIDwgYXJnMi0+bG93ZXIpCisJCXJl dHVybiAtMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitEYXR1bQorZ2J0X29pZF9zb3J0c3Vw cG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBv cnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9vaWRf c3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgp OworfQogCiBzdGF0aWMgYm9vbAogZ2J0X29pZGd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQg KmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRy ZWVfdGV4dC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3RleHQuYwppbmRleCBiZTBlYWM3 OTc1Yi4uNTMwNjQ4Y2I2MjkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90 ZXh0LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3RleHQuYwpAQCAtNiw2ICs2LDcg QEAKICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfdmFyLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9y dC5oIgogCiAvKgogKiogVGV4dCBvcHMKQEAgLTE4LDcgKzE5LDQwIEBAIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X3RleHRfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9icGNo YXJfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90ZXh0X3BlbmFsdHkpOwog UEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGV4dF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo Z2J0X3RleHRfc29ydHN1cHBvcnQpOwogCisvKiBTb3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0 YXRpYyBpbnQKK2didF90ZXh0X3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0 IHNzdXApCit7CisJR0JUX1ZBUktFWSAqa2V5MSA9IFBHX0RFVE9BU1RfREFUVU0oeCk7CisJR0JU X1ZBUktFWSAqa2V5MiA9IFBHX0RFVE9BU1RfREFUVU0oeSk7CisKKwlHQlRfVkFSS0VZX1IgYXJn MSA9IGdidF92YXJfa2V5X3JlYWRhYmxlKGtleTEpOworCUdCVF9WQVJLRVlfUiBhcmcyID0gZ2J0 X3Zhcl9rZXlfcmVhZGFibGUoa2V5Mik7CisJRGF0dW0gcmVzdWx0OworCisJcmVzdWx0ID0gRGly ZWN0RnVuY3Rpb25DYWxsMkNvbGwoYnR0ZXh0Y21wLAorCQkJCQkJCQkJIHNzdXAtPnNzdXBfY29s bGF0aW9uLAorCQkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bShhcmcxLmxvd2VyKSwKKwkJCQkJCQkJ CSBQb2ludGVyR2V0RGF0dW0oYXJnMi5sb3dlcikpOworCisJR0JUX0ZSRUVfSUZfQ09QWShrZXkx LCB4KTsKKwlHQlRfRlJFRV9JRl9DT1BZKGtleTIsIHkpOworCisJcmV0dXJuIERhdHVtR2V0SW50 MzIocmVzdWx0KTsKK30KKworRGF0dW0KK2didF90ZXh0X3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BP SU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X3RleHRfc3N1cF9jbXA7CisJc3N1 cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQogCiAvKiBkZWZp bmUgZm9yIGNvbXBhcmlzb24gKi8KIApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX3RpbWUuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90aW1lLmMKaW5kZXggZDg5NDAx YzBmNTEuLjM0NGI1NjM3ZWE1IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf dGltZS5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90aW1lLmMKQEAgLTcsNiArNyw3 IEBACiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBv cnQuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAg LTI4LDYgKzI5LDggQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGltZV9kaXN0YW5jZSk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF90aW1ldHpfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9J TkZPX1YxKGdidF90aW1lX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGltZV9z YW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RpbWVfc29ydHN1cHBvcnQpOworUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfdGltZXR6X3NvcnRzdXBwb3J0KTsKIAogCiAjaWZkZWYgVVNFX0ZM T0FUOF9CWVZBTApAQCAtMzcsNiArNDAsMTggQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGlt ZV9zYW1lKTsKICNlbmRpZgogCiAKK3N0YXRpYyBpbnQKK2didF90aW1la2V5X3NzdXBfY21wKERh dHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJdGltZUtFWSAqYXJnMSA9ICh0 aW1lS0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwl0aW1lS0VZICphcmcyID0gKHRpbWVLRVkg KikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogbG93ZXIgYW5kIHVwcGVyIGFyZSBlcXVhbCBk dXJpbmcgc29ydHN1cHBvcnQgY29tcGFyaXNvbiAqLworCXJldHVybiBEYXR1bUdldEludDMyKERp cmVjdEZ1bmN0aW9uQ2FsbDIodGltZV9jbXAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaW1lQURUR2V0RGF0dW1GYXN0KGFyZzEtPmxvd2VyKSwKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVBRFRHZXREYXR1bUZhc3QoYXJn Mi0+bG93ZXIpKSk7Cit9CisKIHN0YXRpYyBib29sCiBnYnRfdGltZWd0KGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCiB7CkBAIC0zMzIsMyArMzQ3LDE0IEBA IGdidF90aW1lX3NhbWUoUEdfRlVOQ1RJT05fQVJHUykKIAkqcmVzdWx0ID0gZ2J0X251bV9zYW1l KCh2b2lkICopIGIxLCAodm9pZCAqKSBiMiwgJnRpbmZvLCBmY2luZm8tPmZsaW5mbyk7CiAJUEdf UkVUVVJOX1BPSU5URVIocmVzdWx0KTsKIH0KKworRGF0dW0KK2didF90aW1lX3NvcnRzdXBwb3J0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkg UEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X3RpbWVrZXlf c3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgp OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3RzLmMgYi9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfdHMuYwppbmRleCAzZjViYTkxODkxZC4uZWYxM2ZjMTViYmEgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90cy5jCisrKyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV90cy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2luY2x1ZGUgInV0aWxzL2Zs b2F0LmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QK IHsKQEAgLTMxLDYgKzMyLDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdHN0el9jb25zaXN0 ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RzdHpfZGlzdGFuY2UpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfdHNfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90c19z YW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RzX3NvcnRzdXBwb3J0KTsKIAogCiAjaWZk ZWYgVVNFX0ZMT0FUOF9CWVZBTApAQCAtMzksNiArNDEsMjkgQEAgUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfdHNfc2FtZSk7CiAjZGVmaW5lIFRpbWVzdGFtcEdldERhdHVtRmFzdChYKSBQb2ludGVy R2V0RGF0dW0oJihYKSkKICNlbmRpZgogCisvKiBTb3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0 YXRpYyBpbnQKK2didF90c19zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBz c3VwKQoreworCXRzS0VZICphcmcxID0gKHRzS0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwl0 c0tFWSAqYXJnMiA9ICh0c0tFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwkvKiBTb3J0c3Vw cG9ydCBhbHdheXMgZ2V0cyB0aGUgc2FtZSBsb3dlciBhbmQgdXBwZXIgdmFsdWUgZm9yIGlucHV0 IGtleXMgKi8KKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKHRpbWVz dGFtcF9jbXAsCisJCQkJCQkJCQkJCSBUaW1lc3RhbXBHZXREYXR1bUZhc3QoYXJnMS0+bG93ZXIp LAorCQkJCQkJCQkJCQkgVGltZXN0YW1wR2V0RGF0dW1GYXN0KGFyZzItPmxvd2VyKSkpOworfQor CitEYXR1bQorZ2J0X3RzX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1 cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3Vw LT5jb21wYXJhdG9yID0gZ2J0X3RzX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxM OworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3RhdGljIGJvb2wKIGdidF90c2d0KGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfdmFyLmggYi9jb250cmliL2J0cmVlX2dpc3Qv YnRyZWVfdXRpbHNfdmFyLmgKaW5kZXggMmY4ZGVmNjU1YzguLjE2ZmYxNjVhZDNjIDEwMDY0NAot LS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfdmFyLmgKKysrIGIvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX3V0aWxzX3Zhci5oCkBAIC00Miw3ICs0MiwxNyBAQCB0eXBlZGVmIHN0 cnVjdAogCUdCVF9WQVJLRVkgKigqZl9sMm4pIChHQlRfVkFSS0VZICosIEZtZ3JJbmZvICpmbGlu Zm8pOwkvKiBjb252ZXJ0IGxlYWYgdG8gbm9kZSAqLwogfSBnYnRyZWVfdmluZm87CiAKLQorLyoK KyAqIEZyZWUgcHRyMSBpbiBjYXNlIGl0cyBhIGNvcHkgb2YgcHRyMi4KKyAqCisgKiBUaGlzIGlz IGFkYXB0ZWQgZnJvbSB2YXJsZW5hJ3MgUEdfRlJFRV9JRl9DT1BZLCB0aG91Z2gKKyAqIGRvZXNu J3QgcmVxdWlyZSBmY2luZm8gYWNjZXNzLgorICovCisjZGVmaW5lIEdCVF9GUkVFX0lGX0NPUFko cHRyMSwgcHRyMikgXAorCWRvIHsgXAorCQlpZiAoKFBvaW50ZXIpIChwdHIxKSAhPSBEYXR1bUdl dFBvaW50ZXIocHRyMikpIFwKKwkJCXBmcmVlKHB0cjEpOyBcCisJfSB3aGlsZSAoMCkKIAogZXh0 ZXJuIEdCVF9WQVJLRVlfUiBnYnRfdmFyX2tleV9yZWFkYWJsZShjb25zdCBHQlRfVkFSS0VZICpr KTsKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V1aWQuYyBiL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV91dWlkLmMKaW5kZXggZmU4YzY3OWNiZWQuLjA4MzcyZmM4YmM5 IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXVpZC5jCisrKyBiL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV91dWlkLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiYnRy ZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUgInBvcnQv cGdfYnN3YXAuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1ZGUgInV0 aWxzL3V1aWQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTI1LDcgKzI2LDMxIEBAIFBHX0ZVTkNU SU9OX0lORk9fVjEoZ2J0X3V1aWRfcGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X3V1aWRfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF91dWlkX3BlbmFsdHkp OwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdXVpZF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9f VjEoZ2J0X3V1aWRfc29ydHN1cHBvcnQpOwogCitzdGF0aWMgaW50IHV1aWRfaW50ZXJuYWxfY21w KGNvbnN0IHBnX3V1aWRfdCAqYXJnMSwgY29uc3QgcGdfdXVpZF90ICphcmcyKTsKKworLyogU29y dHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRfdXVpZF9zc3VwX2NtcChEYXR1 bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCXV1aWRLRVkgKmFyZzEgPSAodXVp ZEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJdXVpZEtFWSAqYXJnMiA9ICh1dWlkS0VZICop IERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIFNvcnRzdXBwb3J0IGdldHMgZXF1YWwgdXBwZXIg YW5kIGxvd2VyIHZhbHVlcyBmb3IgZWFjaCBrZXkgdG8gY29tcGFyZSAqLworCXJldHVybiB1dWlk X2ludGVybmFsX2NtcCgmYXJnMS0+bG93ZXIsICZhcmcyLT5sb3dlcik7Cit9CisKK0RhdHVtCitn YnRfdXVpZF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNz dXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFy YXRvciA9IGdidF91dWlkX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3RhdGljIGludAogdXVpZF9pbnRlcm5hbF9jbXAoY29u c3QgcGdfdXVpZF90ICphcmcxLCBjb25zdCBwZ191dWlkX3QgKmFyZzIpCmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvbWVzb24uYnVpbGQgYi9jb250cmliL2J0cmVlX2dpc3QvbWVzb24u YnVpbGQKaW5kZXggNzNiMWJiZjUyYTYuLjViNGNhZmY1YmFmIDEwMDY0NAotLS0gYS9jb250cmli L2J0cmVlX2dpc3QvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1 aWxkCkBAIC01MSw2ICs1MSw3IEBAIGluc3RhbGxfZGF0YSgKICAgJ2J0cmVlX2dpc3QtLTEuNS0t MS42LnNxbCcsCiAgICdidHJlZV9naXN0LS0xLjYtLTEuNy5zcWwnLAogICAnYnRyZWVfZ2lzdC0t MS43LS0xLjguc3FsJywKKyAgJ2J0cmVlX2dpc3QtLTEuOC0tMS45LnNxbCcsCiAgIGt3YXJnczog Y29udHJpYl9kYXRhX2FyZ3MsCiApCiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9idHJlZS1n aXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvYnRyZWUtZ2lzdC5zZ21sCmluZGV4IDMxZTdjNzhhYWVm Li4yNjE4NTZmNmY2OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2J0cmVlLWdpc3Quc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvYnRyZWUtZ2lzdC5zZ21sCkBAIC01Miw2ICs1MiwxNCBAQAogICA8 dHlwZT5vaWQ8L3R5cGU+LCBhbmQgPHR5cGU+bW9uZXk8L3R5cGU+LgogIDwvcGFyYT4KIAorIDxw YXJhPgorICBQZXIgZGVmYXVsdCA8ZmlsZW5hbWU+YnRyZWVfZ2lzdDwvZmlsZW5hbWU+IGJ1aWx0 cyA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBpbmRleGUgd2l0aAorICA8ZnVuY3Rpb24+c29ydHN1 cHBvcnQ8L2Z1bmN0aW9uPiBpbiA8Zmlyc3R0ZXJtPnNvcnRlZDwvZmlyc3R0ZXJtPiBtb2RlLiBU aGlzIHVzdWFsbHkgcmVzdWx0cyBpbiBhCisgIG11Y2ggYmV0dGVyIGluZGV4IHF1YWxpdHkgYW5k IHNtYWxsZXIgaW5kZXggc2l6ZXMgYnkgbXVjaCBmYXN0ZXIgaW5kZXggYnVpbHQgc3BlZWQuIEl0 IGlzIHN0aWxsCisgIHBvc3NpYmxlIHRvIHJldmVydCB0byBidWZmZXJlZCBidWlsdCBzdHJhdGVn eSBieSB1c2luZyB0aGUgPGxpdGVyYWw+YnVmZmVyaW5nPC9saXRlcmFsPiBwYXJhbWV0ZXIKKyAg d2hlbiBjcmVhdGluZyB0aGUgaW5kZXguCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIFRoaXMgbW9k dWxlIGlzIGNvbnNpZGVyZWQgPHF1b3RlPnRydXN0ZWQ8L3F1b3RlPiwgdGhhdCBpcywgaXQgY2Fu IGJlCiAgIGluc3RhbGxlZCBieSBub24tc3VwZXJ1c2VycyB3aG8gaGF2ZSA8bGl0ZXJhbD5DUkVB VEU8L2xpdGVyYWw+IHByaXZpbGVnZQo= --=-mVeW48Taf2ewCNErnisv Content-Disposition: attachment; filename="v6-Add-GIST-sortsupport-rangetypes.patch" Content-Type: text/x-patch; name="v6-Add-GIST-sortsupport-rangetypes.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX2dpc3QuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX2dpc3QuYwppbmRleCBjYjI4ZTk4NTlhYi4u YjBjNzczOTAwMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVz X2dpc3QuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19naXN0LmMKQEAg LTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAi dXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmFuZ2V0eXBlcy5oIgor I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIC8qCiAgKiBSYW5nZSBjbGFzcyBwcm9w ZXJ0aWVzIHVzZWQgdG8gc2VncmVnYXRlIGRpZmZlcmVudCBjbGFzc2VzIG9mIHJhbmdlcyBpbgpA QCAtMTc3LDYgKzE3OCw3IEBAIHN0YXRpYyB2b2lkIHJhbmdlX2dpc3RfZG91YmxlX3NvcnRpbmdf c3BsaXQoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAogc3RhdGljIHZvaWQgcmFuZ2VfZ2lzdF9j b25zaWRlcl9zcGxpdChDb25zaWRlclNwbGl0Q29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCSAg UmFuZ2VCb3VuZCAqcmlnaHRfbG93ZXIsIGludCBtaW5fbGVmdF9jb3VudCwKIAkJCQkJCQkJCSAg UmFuZ2VCb3VuZCAqbGVmdF91cHBlciwgaW50IG1heF9sZWZ0X2NvdW50KTsKK3N0YXRpYyBpbnQJ cmFuZ2VfZ2lzdF9jbXAoRGF0dW0gYSwgRGF0dW0gYiwgU29ydFN1cHBvcnQgc3N1cCk7CiBzdGF0 aWMgaW50CWdldF9naXN0X3JhbmdlX2NsYXNzKFJhbmdlVHlwZSAqcmFuZ2UpOwogc3RhdGljIGlu dAlzaW5nbGVfYm91bmRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFy Zyk7CiBzdGF0aWMgaW50CWludGVydmFsX2NtcF9sb3dlcihjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiLCB2b2lkICphcmcpOwpAQCAtNzczLDYgKzc3NSwyMCBAQCByYW5nZV9naXN0X3BpY2tz cGxpdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9QT0lOVEVSKHYpOwogfQogCisvKgor ICogU29ydCBzdXBwb3J0IHJvdXRpbmUgZm9yIGZhc3QgR2lTVCBpbmRleCBidWlsZCBieSBzb3J0 aW5nLgorICovCitEYXR1bQorcmFuZ2VfZ2lzdF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdT KQoreworCVNvcnRTdXBwb3J0CXNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVS KDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IHJhbmdlX2dpc3RfY21wOworCXNzdXAtPnNzdXBf ZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwogLyogZXF1YWxpdHkgY29t cGFyYXRvciBmb3IgR2lTVCAqLwogRGF0dW0KIHJhbmdlX2dpc3Rfc2FtZShQR19GVU5DVElPTl9B UkdTKQpAQCAtMTY5Myw2ICsxNzA5LDYwIEBAIHJhbmdlX2dpc3RfY29uc2lkZXJfc3BsaXQoQ29u c2lkZXJTcGxpdENvbnRleHQgKmNvbnRleHQsCiAJfQogfQogCisvKgorICogR2lTVCBzb3J0c3Vw cG9ydCBjb21wYXJhdG9yIGZvciByYW5nZXMuCisgKiBzaW1pbGFyIHRvIHJhbmdlX2NtcCwgYnV0 IHJhbmdlIHR5cGNhY2hlIGlzIGNhY2hlZC4KKyAqLworc3RhdGljIGludAorcmFuZ2VfZ2lzdF9j bXAoRGF0dW0gYSwgRGF0dW0gYiwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlSYW5nZVR5cGUgKnJh bmdlX2EgPSBEYXR1bUdldFJhbmdlVHlwZVAoYSk7CisJUmFuZ2VUeXBlICpyYW5nZV9iID0gRGF0 dW1HZXRSYW5nZVR5cGVQKGIpOworCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSA9IHNzdXAtPnNz dXBfZXh0cmE7CisJUmFuZ2VCb3VuZAlsb3dlcjEsCisJCQkJbG93ZXIyOworCVJhbmdlQm91bmQJ dXBwZXIxLAorCQkJCXVwcGVyMjsKKwlib29sCQllbXB0eTEsCisJCQkJZW1wdHkyOworCWludAkJ CXJlc3VsdDsKKworCWlmICh0eXBjYWNoZSA9PSBOVUxMKQorCXsKKwkJQXNzZXJ0KFJhbmdlVHlw ZUdldE9pZChyYW5nZV9hKSA9PSBSYW5nZVR5cGVHZXRPaWQocmFuZ2VfYikpOworCQl0eXBjYWNo ZSA9IGxvb2t1cF90eXBlX2NhY2hlKFJhbmdlVHlwZUdldE9pZChyYW5nZV9hKSwgVFlQRUNBQ0hF X1JBTkdFX0lORk8pOworCisJCS8qCisJCSAqIENhY2hlIHRoZSByYW5nZSBpbmZvIGJldHdlZW4g Y2FsbHMgdG8gYXZvaWQgaGF2aW5nIHRvIGNhbGwKKwkJICogbG9va3VwX3R5cGVfY2FjaGUoKSBm b3IgZWFjaCBjb21wYXJpc29uLgorCQkgKi8KKwkJc3N1cC0+c3N1cF9leHRyYSA9IHR5cGNhY2hl OworCX0KKworCXJhbmdlX2Rlc2VyaWFsaXplKHR5cGNhY2hlLCByYW5nZV9hLCAmbG93ZXIxLCAm dXBwZXIxLCAmZW1wdHkxKTsKKwlyYW5nZV9kZXNlcmlhbGl6ZSh0eXBjYWNoZSwgcmFuZ2VfYiwg Jmxvd2VyMiwgJnVwcGVyMiwgJmVtcHR5Mik7CisKKwlpZiAoZW1wdHkxICYmIGVtcHR5MikKKwkJ cmVzdWx0ID0gMDsKKwllbHNlIGlmIChlbXB0eTEpCisJCXJlc3VsdCA9IC0xOworCWVsc2UgaWYg KGVtcHR5MikKKwkJcmVzdWx0ID0gMTsKKwllbHNlCisJeworCQlyZXN1bHQgPSByYW5nZV9jbXBf Ym91bmRzKHR5cGNhY2hlLCAmbG93ZXIxLCAmbG93ZXIyKTsKKwkJaWYgKHJlc3VsdCA9PSAwKQor CQkJcmVzdWx0ID0gcmFuZ2VfY21wX2JvdW5kcyh0eXBjYWNoZSwgJnVwcGVyMSwgJnVwcGVyMik7 CisJfQorCisJaWYgKChEYXR1bSkgcmFuZ2VfYSAhPSBhKQorCQlwZnJlZShyYW5nZV9hKTsKKwlp ZiAoKERhdHVtKSByYW5nZV9iICE9IGIpCisJCXBmcmVlKHJhbmdlX2IpOworCisJcmV0dXJuIHJl c3VsdDsKK30KKwogLyoKICAqIEZpbmQgY2xhc3MgbnVtYmVyIGZvciByYW5nZS4KICAqCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2FtcHJvYy5kYXQKaW5kZXggMzUyNTU4YzFmMDYuLmZjMjI5ZDk5ODQ1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19hbXByb2MuZGF0CkBAIC02MDcsNiArNjA3LDkgQEAKIHsgYW1wcm9jZmFt aWx5ID0+ICdnaXN0L3JhbmdlX29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdhbnlyYW5nZScsCiAg IGFtcHJvY3JpZ2h0dHlwZSA9PiAnYW55cmFuZ2UnLCBhbXByb2NudW0gPT4gJzcnLAogICBhbXBy b2MgPT4gJ3JhbmdlX2dpc3Rfc2FtZScgfSwKK3sgYW1wcm9jZmFtaWx5ID0+ICdnaXN0L3Jhbmdl X29wcycsIGFtcHJvY2xlZnR0eXBlID0+ICdhbnlyYW5nZScsCisgIGFtcHJvY3JpZ2h0dHlwZSA9 PiAnYW55cmFuZ2UnLCBhbXByb2NudW0gPT4gJzExJywKKyAgYW1wcm9jID0+ICdyYW5nZV9naXN0 X3NvcnRzdXBwb3J0JyB9LAogeyBhbXByb2NmYW1pbHkgPT4gJ2dpc3QvcmFuZ2Vfb3BzJywgYW1w cm9jbGVmdHR5cGUgPT4gJ2FueXJhbmdlJywKICAgYW1wcm9jcmlnaHR0eXBlID0+ICdhbnlyYW5n ZScsIGFtcHJvY251bSA9PiAnMTInLAogICBhbXByb2MgPT4gJ2dpc3Rfc3RyYXRudW1faWRlbnRp dHknIH0sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAyOWFmNGNlNjVkNS4uMjIzMTVmZWZj OWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTA1ODksNiArMTA1ODksOSBAQAogeyBv aWQgPT4gJzM4ODEnLCBkZXNjciA9PiAnR2lTVCBzdXBwb3J0JywKICAgcHJvbmFtZSA9PiAncmFu Z2VfZ2lzdF9zYW1lJywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAogICBwcm9hcmd0eXBlcyA9 PiAnYW55cmFuZ2UgYW55cmFuZ2UgaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3JhbmdlX2dpc3Rfc2Ft ZScgfSwKK3sgb2lkID0+ICc4ODQ5JywgZGVzY3IgPT4gJ0dpU1Qgc3VwcG9ydCcsCisgIHByb25h bWUgPT4gJ3JhbmdlX2dpc3Rfc29ydHN1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICd2b2lkJywKKyAg cHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdyYW5nZV9naXN0X3NvcnRzdXBw b3J0JyB9LAogeyBvaWQgPT4gJzYxNTQnLCBkZXNjciA9PiAnR2lTVCBzdXBwb3J0JywKICAgcHJv bmFtZSA9PiAnbXVsdGlyYW5nZV9naXN0X2NvbnNpc3RlbnQnLCBwcm9yZXR0eXBlID0+ICdib29s JywKICAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGFueW11bHRpcmFuZ2UgaW50MiBvaWQgaW50 ZXJuYWwnLAo= --=-mVeW48Taf2ewCNErnisv--