Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pXMh2-00065s-0U for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Mar 2023 13:40:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pXMg2-0005t9-S1 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Mar 2023 13:39:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pXMg2-0005sN-Dl for pgsql-hackers@lists.postgresql.org; Wed, 01 Mar 2023 13:39:26 +0000 Received: from mail-40133.protonmail.ch ([185.70.40.133]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pXMfv-0000y0-Te for pgsql-hackers@lists.postgresql.org; Wed, 01 Mar 2023 13:39:26 +0000 Date: Wed, 01 Mar 2023 13:39:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1677677957; x=1677937157; bh=e1lF3US6U+M+v7o+AP8//3fMvLMJKbVC0D7SO5KIb1k=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=QiBboD8SYq6HIVzkUJ9TrVtBQdCYrzzuo4b0dl09YUZXdHfvo9o1l8BYmDjhyUdp2 cqRyCEvi0Y1GPPI1coItXUx1Na3j8vB/vjQyQVS+aLMdDTqvqL9hrWbP1xnVKC1f2G A8r/qrgfMhhhkUzJ0GQjiopZZAIbli1usDdPpudB1BmEklPgpOZY6YdY7jJBzMg/NN wtSmgnj2O66PnuEs4CUFEH0Bi47r36L0RmBmmMdx2D09jFydsyvAoKwr7x0lIDZd8o ZRX5JIO16uKVVzKlA6S/V1FGO2Y1MiRhxxkBB0wCMtPkSZzb/kID7K3197fxOqAMC0 a6Q7oxyVievIA== To: Justin Pryzby From: gkokolatos@pm.me Cc: Tomas Vondra , shiy.fnst@fujitsu.com, Michael Paquier , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: <20230228235834.GC30529@telsasoft.com> References: <20230126062846.GO22427@telsasoft.com> <535565cd-b69f-c064-a845-15c0fc44db4a@enterprisedb.com> <22cb80ed-ec87-54c7-fd5b-cdcf79766bb1@enterprisedb.com> <8421f53d-c9f7-c02e-3278-9f9522a8e8f3@enterprisedb.com> <20230228235834.GC30529@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_eDULkSrF55o7L9X8UA51f8YbrZx2fepulynEeZgydcY" 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. --b1_eDULkSrF55o7L9X8UA51f8YbrZx2fepulynEeZgydcY Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Wednesday, March 1st, 2023 at 12:58 AM, Justin Pryzby wrote: > I found that e9960732a broke writing of empty gzip-compressed data, > specifically LOs. pg_dump succeeds, but then the restore fails: >=20 > postgres=3D# SELECT lo_create(1234); > lo_create | 1234 >=20 > $ time ./src/bin/pg_dump/pg_dump -h /tmp -d postgres -Fc |./src/bin/pg_du= mp/pg_restore -f /dev/null -v > pg_restore: implied data-only restore > pg_restore: executing BLOB 1234 > pg_restore: processing BLOBS > pg_restore: restoring large object with OID 1234 > pg_restore: error: could not uncompress data: (null) >=20 Thank you for looking. This was an untested case. > The inline patch below fixes it, but you won't be able to apply it > directly, as it's on top of other patches which rename the functions > back to "Zlib" and rearranges the functions to their original order, to > allow running: >=20 > git diff --diff-algorithm=3Dminimal -w e9960732a~:./src/bin/pg_dump/compr= ess_io.c ./src/bin/pg_dump/compress_gzip.c >=20 Please find a patch attached that can be applied directly. > The current function order avoids 3 lines of declarations, but it's > obviously pretty useful to be able to run that diff command. I already > argued for not calling the functions "Gzip" on the grounds that the name > was inaccurate. I have no idea why we are back on the naming issue. I stand by the name because in my humble opinion helps the code reader. There is a certain uniformity when the compression_spec.algorithm and the compressor functions match as the following code sample shows. if (compression_spec.algorithm =3D=3D PG_COMPRESSION_NONE) =20 InitCompressorNone(cs, compression_spec); else if (compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) InitCompressorGzip(cs, compression_spec); else if (compression_spec.algorithm =3D=3D PG_COMPRESSION_LZ4) InitCompressorLZ4(cs, compression_spec); =20 =20 When the reader wants to see what happens when the PG_COMPRESSION_XXX is set, has to simply search for the XXX part. I think that this is justification enough for the use of the names. >=20 > I'd want to create an empty large object in src/test/sql/largeobject.sql > to exercise this tested during pgupgrade. But unfortunately that > doesn't use -Fc, so this isn't hit. Empty input is an important enough > test case to justify a tap test, if there's no better way. Please find in the attached a test case that exercises this codepath. Cheers, //Georgios --b1_eDULkSrF55o7L9X8UA51f8YbrZx2fepulynEeZgydcY Content-Type: text/x-patch; name=0001-Properly-gzip-compress-when-no-data-is-available.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-Properly-gzip-compress-when-no-data-is-available.patch RnJvbSA5NTQ1MGYwZTdlOTBmMGExYTNjZGZjMTJjNzYwYTk1MjBiZDI5OTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMSBNYXIgMjAyMyAxMjo0MjozMiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdlhd IFByb3Blcmx5IGd6aXAgY29tcHJlc3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZQoKV2hlbiBj cmVhdGluZyBkdW1wcyB3aXRoIHRoZSBDb21wcmVzc29yIEFQSSwgaXQgaXMgcG9zc2libGUgdG8g b25seSBjYWxsIHRoZQpBbGxvY2F0ZSBhbmQgRW5kIGNvbXByZXNzb3IgZnVuY3Rpb25zIHdpdGhv dXQgZXZlciB3cml0aW5nIGFueSBkYXRhLiBUaGUgZ3ppcAppbXBsZW1lbnRhdGlvbiB3cm9uZ2x5 IGFzc3VtZWQgdGhhdCB0aGUgd3JpdGUgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIGFuZApkZWZl cmVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3lzdGVt IGZvciB0aGUgZmlyc3QKd3JpdGUgY2FsbC4gVGhlIEVuZCBjYWxsIHdvdWxkIG9ubHkgZmluaWxp emUgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN5c3RlbSBpZgp0aGF0IHdhcyBldmVyIGluaXRp YWxpemVkLgoKVGhlIHByb2JsZW0gd2l0aCB0aGF0IGFwcHJvYWNoIGlzIHRoYXQgaXQgdmlvbGF0 ZWQgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUKaW50ZXJuYWwgY29tcHJlc3Npb24gc3lzdGVtIGR1 cmluZyBkZWNvbXByZXNzaW9uLgoKVGhpcyBjb21taXQgaW5pdGlhbGl6ZXMgdGhlIGludGVybmFs IGNvbXByZXNzaW9uIHN5c3RlbSBkdXJpbmcgdGhlIEFsbG9jYXRlCmNhbGwsIHVuZGVyIHRoZSBj b25kaXRpb24gdGhhdCBhIHdyaXRlIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCBieSB0aGUgY2FsbGVy LgpHaXZlbiB0aGF0IGRlY29tcHJlc3Npb24gZG9lcyBub3QgbmVlZCB0byBrZWVwIHRyYWNrIG9m IGFueSBzdGF0ZSwgdGhlCmNvbXByZXNzb3IncyBwcml2YXRlX2RhdGEgbWVtYmVyIGlzIG5vdyBw b3B1bGF0ZWQgb25seSBkdXJpbmcgY29tcHJlc3Npb24uCgpUZXN0cyBhcmUgYWRkZWQgdG8gY292 ZXIgdGhpcyBzY2VuYXJpby4KCkluaXRpYWwgcGF0Y2ggYnkgSnVzdGluIFBydXpieS4KClJlcG9y dGVkLWJ5OiBKdXN0aW4gUHJ5emJ5Ci0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAu YyAgfCAxMTggKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L3QvMDAyX3BnX2R1bXAucGwgfCAgMjcgKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA5MSBpbnNl cnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwppbmRleCAw YWY2NWFmZWI0Li5mNWQzMmNmMDU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfZ3ppcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMKQEAgLTMyLDkg KzMyLDQ4IEBAIHR5cGVkZWYgc3RydWN0IEd6aXBDb21wcmVzc29yU3RhdGUKIAlzaXplX3QJCW91 dHNpemU7CiB9IEd6aXBDb21wcmVzc29yU3RhdGU7CiAKKwogLyogUHJpdmF0ZSByb3V0aW5lcyB0 aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9PICovCiBzdGF0aWMgdm9pZAotRGVm bGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LCBib29sIGZsdXNoKQorRGVmbGF0ZUNvbXByZXNzb3JJbml0KENvbXByZXNzb3JTdGF0ZSAqY3Mp Cit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzOworCXpfc3RyZWFtcAl6cDsKKworCWd6 aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBDb21w cmVzc29yU3RhdGUpKTsKKwl6cCA9IGd6aXBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Mo c2l6ZW9mKHpfc3RyZWFtKSk7CisJenAtPnphbGxvYyA9IFpfTlVMTDsKKwl6cC0+emZyZWUgPSBa X05VTEw7CisJenAtPm9wYXF1ZSA9IFpfTlVMTDsKKworCS8qCisJICogb3V0c2l6ZSBpcyB0aGUg YnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQorCSAqIGFjdHVh bGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRv CisJICogYXBwZW5kIGEgdHJhaWxpbmcgemVybyBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkg Ki8KKwlnemlwY3MtPm91dGJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7CisJZ3pp cGNzLT5vdXRzaXplID0gWkxJQl9PVVRfU0laRTsKKworCS8qCisJICogQSBsZXZlbCBvZiB6ZXJv IHNpbXBseSBjb3BpZXMgdGhlIGlucHV0IG9uZSBibG9jayBhdCB0aGUgdGltZS4gVGhpcworCSAq IGlzIHByb2JhYmx5IG5vdCB3aGF0IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBp bnRlcmZhY2UuCisJICovCisJaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID09IDApCisJ CXBnX2ZhdGFsKCJyZXF1ZXN0ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVs IHdhcyBzcGVjaWZpZWQiKTsKKworCWlmIChkZWZsYXRlSW5pdCh6cCwgY3MtPmNvbXByZXNzaW9u X3NwZWMubGV2ZWwpICE9IFpfT0spCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBj b21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJLyogSnVzdCBiZSBwYXJhbm9p ZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwl6 cC0+bmV4dF9vdXQgPSBnemlwY3MtPm91dGJ1ZjsKKwl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5v dXRzaXplOworCisJLyogS2VlcCB0cmFjayBvZiBnemlwY3MgKi8KKwljcy0+cHJpdmF0ZV9kYXRh ID0gZ3ppcGNzOworfQorCitzdGF0aWMgdm9pZAorRGVmbGF0ZUNvbXByZXNzb3JEYXRhKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQogewogCUd6aXBD b21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2 YXRlX2RhdGE7CiAJel9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsKQEAgLTc2LDcxICsxMTUsNDQg QEAgRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLCBib29sIGZsdXNoKQogfQogCiBzdGF0aWMgdm9pZAotRW5kQ29tcHJlc3Nvckd6aXAo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCitEZWZsYXRlQ29tcHJlc3Nv ckVuZChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKIHsKIAlHemlwQ29t cHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0 ZV9kYXRhOwogCXpfc3RyZWFtcAl6cDsKIAotCWlmIChnemlwY3MtPnpwKQotCXsKLQkJenAgPSBn emlwY3MtPnpwOwotCQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JCXpwLT5hdmFpbF9pbiA9IDA7Ci0K LQkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxpYiBidWZmZXIgKi8KLQkJRGVm bGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisJenAgPSBnemlwY3MtPnpwOworCXpw LT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOwogCi0JCWlmIChkZWZsYXRlRW5k KHpwKSAhPSBaX09LKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBz dHJlYW06ICVzIiwgenAtPm1zZyk7CisJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20g emxpYiBidWZmZXIgKi8KKwlEZWZsYXRlQ29tcHJlc3NvckRhdGEoQUgsIGNzLCB0cnVlKTsKIAot CQlwZ19mcmVlKGd6aXBjcy0+b3V0YnVmKTsKLQkJcGdfZnJlZShnemlwY3MtPnpwKTsKLQl9CisJ aWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug Y29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOwogCisJcGdfZnJlZShnemlwY3MtPm91 dGJ1Zik7CisJcGdfZnJlZShnemlwY3MtPnpwKTsKIAlwZ19mcmVlKGd6aXBjcyk7CiAJY3MtPnBy aXZhdGVfZGF0YSA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29yR3ppcChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwkvKiBJZiBkZWZsYXRp b24gd2FzIGluaXRpYWxpemVkLCBmaW5hbGl6ZSBpdCAqLworCWlmIChjcy0+cHJpdmF0ZV9kYXRh KQorCQlEZWZsYXRlQ29tcHJlc3NvckVuZChBSCwgY3MpOworfQorCiBzdGF0aWMgdm9pZAogV3Jp dGVEYXRhVG9BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cywKIAkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiB7CiAJR3ppcENvbXBy ZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVf ZGF0YTsKLQl6X3N0cmVhbXAJenA7Ci0KLQlpZiAoIWd6aXBjcy0+enApCi0JewotCQl6cCA9IGd6 aXBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JCXpw LT56YWxsb2MgPSBaX05VTEw7Ci0JCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQkJenAtPm9wYXF1ZSA9 IFpfTlVMTDsKLQotCQkvKgotCQkgKiBvdXRzaXplIGlzIHRoZSBidWZmZXIgc2l6ZSB3ZSB0ZWxs IHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9uZSBl eHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvCi0JCSAqIGFwcGVuZCBhIHRy YWlsaW5nIHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQuCi0JCSAqLwotCQlnemlwY3MtPm91 dGJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7Ci0JCWd6aXBjcy0+b3V0c2l6ZSA9 IFpMSUJfT1VUX1NJWkU7Ci0KLQkJLyoKLQkJICogQSBsZXZlbCBvZiB6ZXJvIHNpbXBseSBjb3Bp ZXMgdGhlIGlucHV0IG9uZSBibG9jayBhdCB0aGUgdGltZS4gVGhpcwotCQkgKiBpcyBwcm9iYWJs eSBub3Qgd2hhdCB0aGUgdXNlciB3YW50ZWQgd2hlbiBjYWxsaW5nIHRoaXMgaW50ZXJmYWNlLgot CQkgKi8KLQkJaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID09IDApCi0JCQlwZ19mYXRh bCgicmVxdWVzdGVkIHRvIGNvbXByZXNzIHRoZSBhcmNoaXZlIHlldCBubyBsZXZlbCB3YXMgc3Bl Y2lmaWVkIik7Ci0KLQkJaWYgKGRlZmxhdGVJbml0KHpwLCBjcy0+Y29tcHJlc3Npb25fc3BlYy5s ZXZlbCkgIT0gWl9PSykKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVz c2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOwotCi0JCS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBt YXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRlICovCi0JCXpwLT5u ZXh0X291dCA9IGd6aXBjcy0+b3V0YnVmOwotCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRz aXplOwotCX0KIAogCWd6aXBjcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KHZv aWQgKiwgZGF0YSk7CiAJZ3ppcGNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21w cmVzc29yR3ppcChBSCwgY3MsIGZhbHNlKTsKKwlEZWZsYXRlQ29tcHJlc3NvckRhdGEoQUgsIGNz LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMTQsMTcgKzIyNiwxOSBAQCB2b2lkCiBJ bml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywKIAkJCQkgICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JR3ppcENvbXByZXNz b3JTdGF0ZSAqZ3ppcGNzOwotCiAJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZUd6 aXA7CiAJY3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZUd6aXA7CiAJY3MtPmVuZCA9 IEVuZENvbXByZXNzb3JHemlwOwogCiAJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOwogCi0JZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9jMChz aXplb2YoR3ppcENvbXByZXNzb3JTdGF0ZSkpOwotCi0JY3MtPnByaXZhdGVfZGF0YSA9IGd6aXBj czsKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgaGFzIGRlZmluZWQgYSB3cml0ZSBmdW5jdGlvbiwg cHJlcGFyZSB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCSAqIEF2b2lkIGluaXRpYWxpemluZyBkdXJp bmcgdGhlIGZpcnN0IHdyaXRlIGNhbGwsIGJlY2F1c2UgRW5kIG1heSBiZSBjYWxsZWQKKwkgKiB3 aXRob3V0IGV2ZXIgd3JpdGluZyBhbnkgZGF0YS4KKwkgKi8KKwlpZiAoY3MtPndyaXRlRikKKwkJ RGVmbGF0ZUNvbXByZXNzb3JJbml0KGNzKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CmluZGV4IDcyYjE5ZWU2Y2QuLjdiNWE2ZTE5MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CkBAIC0xMTk0LDYgKzExOTQsMjkgQEAgbXkgJXRlc3RzID0gKAogCQl9LAogCX0sCiAKKwknTE8g Y3JlYXRlICh3aXRoIG5vIGRhdGEpJyA9PiB7CisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnU0VMRUNU IHBnX2NhdGFsb2cubG9fY3JlYXRlKDApOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUVNFTEVD VCBwZ19jYXRhbG9nLmxvX29wZW5cRSBcKCdcZCsnLFwgXGQrXCk7XG4KKwkJCVxRU0VMRUNUIHBn X2NhdGFsb2cubG9fY2xvc2UoMCk7XEUKKwkJCS94bSwKKwkJbGlrZSAgID0+IHsKKwkJCSVmdWxs X3J1bnMsCisJCQljb2x1bW5faW5zZXJ0cyAgICAgICAgID0+IDEsCisJCQlkYXRhX29ubHkgICAg ICAgICAgICAgID0+IDEsCisJCQlpbnNlcnRzICAgICAgICAgICAgICAgID0+IDEsCisJCQlzZWN0 aW9uX2RhdGEgICAgICAgICAgID0+IDEsCisJCQl0ZXN0X3NjaGVtYV9wbHVzX2xhcmdlX29iamVj dHMgPT4gMSwKKwkJfSwKKwkJdW5saWtlID0+IHsKKwkJCWJpbmFyeV91cGdyYWRlICAgICAgICAg PT4gMSwKKwkJCW5vX2xhcmdlX29iamVjdHMgICAgICAgPT4gMSwKKwkJCXNjaGVtYV9vbmx5ICAg ICAgICAgICAgPT4gMSwKKwkJCXNlY3Rpb25fcHJlX2RhdGEgICAgICAgPT4gMSwKKwkJfSwKKwl9 LAorCiAJJ0NPTU1FTlQgT04gREFUQUJBU0UgcG9zdGdyZXMnID0+IHsKIAkJcmVnZXhwID0+IHFy L15DT01NRU5UIE9OIERBVEFCQVNFIHBvc3RncmVzIElTIC4rOy9tLAogCkBAIC00MjUwLDggKzQy NzMsOCBAQCBmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1bnMpCiAKIAkjIFNr aXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBpcyBubyBzdXBwb3J0IGZv ciBpdC4KIAlpZiAoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259ICYmCi0JCSgk cGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2d6aXAnICYmICEkc3VwcG9y dHNfZ3ppcCkgfHwKLQkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAn bHo0JyAmJiAhJHN1cHBvcnRzX2x6NCkpCisJCSgoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGls ZV9vcHRpb259IGVxICdnemlwJyAmJiAhJHN1cHBvcnRzX2d6aXApIHx8CisJCSAoJHBnZHVtcF9y dW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkp CiAJewogCQlub3RlICIkcnVuOiBza2lwcGVkIGR1ZSB0byBubyAkcGdkdW1wX3J1bnN7JHJ1bn0t Pntjb21waWxlX29wdGlvbn0gc3VwcG9ydCI7CiAJCW5leHQ7Ci0tIAoyLjM0LjEKCg== --b1_eDULkSrF55o7L9X8UA51f8YbrZx2fepulynEeZgydcY--