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 1ozh46-0007JV-4b for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Nov 2022 16:33:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ozh44-00073o-1c for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Nov 2022 16:33:04 +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 1ozh43-00073f-DX for pgsql-hackers@lists.postgresql.org; Mon, 28 Nov 2022 16:33:03 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozh3y-0006oK-4H for pgsql-hackers@lists.postgresql.org; Mon, 28 Nov 2022 16:33:02 +0000 Date: Mon, 28 Nov 2022 16:32:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1669653172; x=1669912372; bh=cjYykY89tUtuq6MiDeAlcooaUNBU4lRQKjkX4BgUkH4=; 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=FQzEY8XcgCca3rrwk3Bgx1b6D8Cy+uv5IbtYsF3ux8301OJ1NMAh7RAHaOXcaa8lS V7TGlogOpw4oyzwxxBHAmD+wJ114hnqByetq7IZhF++CeL8qiyKn2WdNA2zEwSoTRb vCJXaaiYDASe1TNBkuOaHrZ/ZAVqnDn0jskZAATfparNieG8zQlWMKMt6pHVvwiiuE waYNZtfkJbKLqUX32IX4gk1JrCgsa5ymYKfc0HTtbIuLBM+pqRtQ+awF1b88OtJrYB edMYjjZx3TK8EmJvVCNSVPIDQQJPof0rxKNVTqlLDitChW8x55iV5YePD2hEM5ElVv 14JnMJd4dITnA== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <165970942594.29780.15623018354659505573.pgcf@coridan.postgresql.org> <-pU80vtiyXMfSSpn4SWOR97t71MVmDOyHaJtvGsdEfroFsFUDdc-UaqD-8LMPMw2sy-7B2_IVnlrATfVvXwtv8n3kexLePZ7iWgiOnE4jRI=@pm.me> <20221120172611.GQ11463@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck" 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_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Tuesday, November 22nd, 2022 at 11:49 AM, Michael Paquier wrote: >=20 >=20 > On Tue, Nov 22, 2022 at 10:00:47AM +0000, gkokolatos@pm.me wrote: >=20 > > A new version that I feel that is in a decent enough state for review s= hould > > be ready within this week. I am happy to drop the patch if you think I = should > > not work on it though. >=20 >=20 > If you can post a new version of the patch, that's fine, of course. > I'll be happy to look over it more. Thank you Michael (and Justin). Allow me to present v8. The focus of this version of this series is 0001 and 0002. Admittedly 0001 could be presented in a separate thread though given its si= ze and proximity to the topic, I present it here. In an earlier review you spotted the similarity between pg_dump's and pg_re= ceivewal's parsing of compression options. However there exists a substantial differen= ce in the behaviour of the two programs; one treats the lack of support for the reque= sted algorithm as a fatal error, whereas the other does not. The existing functi= ons in common/compression.c do not account for the later. 0002 proposes an impleme= ntation for this. It's usefulness is shown in 0003. Please consider 0003-0005 as work in progress. They are differences from v7= yet they may contain unaddressed comments for now. A welcome feedback would be in splitting and/or reordering of 0003-0005. I = think that they now split in coherent units and are presented in a logical order.= Let me know if you disagree and where should the breakpoints be. Cheers, //Georgios > -- > Michael --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/x-patch; name=v8-0003-Prepare-pg_dump-for-additional-compression-method.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0003-Prepare-pg_dump-for-additional-compression-method.patch RnJvbSAzMzdmMTlhNTJmMTY0YTIyZmJmOTc0YjhhNzQ5ZjNiODk1YTMzOWI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjggTm92IDIwMjIgMTU6MzM6NDkgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4 IDMvNV0gUHJlcGFyZSBwZ19kdW1wIGZvciBhZGRpdGlvbmFsIGNvbXByZXNzaW9uIG1ldGhvZHMK ClRoaXMgY29tbW1pdCBkb2VzIHNvbWUgb2YgdGhlIGhlYXZ5IGxpZnRpbmcgcmVxdWlyZWQgZm9y IGFkZGl0aW9uYWwgY29tcHJlc3Npb24KbWV0aG9kcy4KCkZpcnN0IGl0IGlzIHRlYWNoaW5nIHBn X2R1bXAuYyBhYm91dCB0aGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZXMgZm91bmQgaW4KY29t bW9uL2NvbXByZXNzaW9uLmguIFRoZW4gaXQgaXMgcHJvcGFnYXRpbmcgdGhvc2UgdGhyb3VnaG91 dCB0aGUgY29kZS4KCkNvbW1pdCAgYmY5YWE0OTBkYiBpbnRyb2R1Y2VkIGNmcCBpbiBjb21wcmVz c19pby57YyxofSB3aXRoIHRoZSBpbnRlbnQgb2YKdW5pZnlpbmcgY29tcHJlc3Npb24gcmVsYXRl ZCBjb2RlIGFuZCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhZGRpdGlvbmFsCmFyY2hp dmUgZm9ybWF0cy4gSG93ZXZlciwgcGdfYmFja3VwX2FyY2hpdmVyLmMgd2FzIG5vdCB1c2luZyB0 aGF0IEFQSS4gVGhpcwpjb21taXQgdGVhY2hlcyBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBhYm91dCBj ZnAgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2ggb3V0LgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sICAgICAgICAgfCAgMzAgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5j ICAgICAgICAgfCA0MzEgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19pby5oICAgICAgICAgfCAgMjAgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYyAgfCAxOTIgKysrKysrLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggIHwgIDM3ICstLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAgICB8 ICAgNiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICAxMyArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgICB8ICAxMiArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICB8ICA5OCArKysrLS0KIHNyYy9iaW4vcGdfZHVt cC90LzAwMV9iYXNpYy5wbCAgICAgICAgfCAgMjYgKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsICAgICAgfCAgIDIgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDUxMiBpbnNlcnRpb25z KCspLCAzNjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAppbmRleCA4YjlkOWY0Y2Fk Li4zZmI4ZmRjZTgxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtNjQ0LDE3ICs2NDQsMzEgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgIDx2 YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT48b3B0aW9uPi1aIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj4wLi45PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0gICAgICA8dGVy bT48b3B0aW9uPi0tY29tcHJlc3M9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPjAuLjk8 L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LVogPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxldmVsPC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi1aIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5tZXRob2Q8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPls6PHJlcGxhY2VhYmxlPmxldmVsPC9y ZXBsYWNlYWJsZT5dPC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvbXByZXNzPTxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sZXZlbDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvbXByZXNzPTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5tZXRob2Q8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPls6PHJlcGxhY2VhYmxlPmxl dmVsPC9yZXBsYWNlYWJsZT5dPC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJh PgotICAgICAgICBTcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UuICBaZXJvIG1l YW5zIG5vIGNvbXByZXNzaW9uLgorICAgICAgICBTcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBtZXRo b2QgYW5kL29yIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UuCisgICAgICAgIFRoZSBjb21w cmVzc2lvbiBtZXRob2QgY2FuIGJlIHNldCB0byA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBvcgor ICAgICAgICA8bGl0ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uIEEgY29t cHJlc3Npb24gbGV2ZWwgY2FuCisgICAgICAgIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkLCBieSBh cHBlbmRpbmcgdGhlIGxldmVsIG51bWJlciBhZnRlciBhIGNvbG9uCisgICAgICAgICg8bGl0ZXJh bD46PC9saXRlcmFsPikuIElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgY29t cHJlc3Npb24KKyAgICAgICAgbGV2ZWwgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIG1l dGhvZC4gSWYgb25seSBhIGxldmVsIGlzCisgICAgICAgIHNwZWNpZmllZCB3aXRob3V0IG1lbnRp b25pbmcgYSBtZXRob2QsIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IGNvbXByZXNzaW9uCisgICAg ICAgIHdpbGwgYmUgdXNlZC4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KICAgICAg ICAgRm9yIHRoZSBjdXN0b20gYW5kIGRpcmVjdG9yeSBhcmNoaXZlIGZvcm1hdHMsIHRoaXMgc3Bl Y2lmaWVzIGNvbXByZXNzaW9uIG9mCi0gICAgICAgIGluZGl2aWR1YWwgdGFibGUtZGF0YSBzZWdt ZW50cywgYW5kIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXByZXNzCi0gICAgICAgIGF0IGEgbW9kZXJh dGUgbGV2ZWwuCi0gICAgICAgIEZvciBwbGFpbiB0ZXh0IG91dHB1dCwgc2V0dGluZyBhIG5vbnpl cm8gY29tcHJlc3Npb24gbGV2ZWwgY2F1c2VzCi0gICAgICAgIHRoZSBlbnRpcmUgb3V0cHV0IGZp bGUgdG8gYmUgY29tcHJlc3NlZCwgYXMgdGhvdWdoIGl0IGhhZCBiZWVuCi0gICAgICAgIGZlZCB0 aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj47IGJ1dCB0aGUgZGVmYXVsdCBp cyBub3QgdG8gY29tcHJlc3MuCisgICAgICAgIGluZGl2aWR1YWwgdGFibGUtZGF0YSBzZWdtZW50 cywgYW5kIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXByZXNzIHVzaW5nCisgICAgICAgIDxsaXRlcmFs Pmd6aXA8L2xpdGVyYWw+IGF0IGEgbW9kZXJhdGUgbGV2ZWwuIEZvciBwbGFpbiB0ZXh0IG91dHB1 dCwKKyAgICAgICAgc2V0dGluZyBhIG5vbnplcm8gY29tcHJlc3Npb24gbGV2ZWwgY2F1c2VzIHRo ZSBlbnRpcmUgb3V0cHV0IGZpbGUgdG8gYmUgY29tcHJlc3NlZCwKKyAgICAgICAgYXMgdGhvdWdo IGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj47 IGJ1dCB0aGUgZGVmYXVsdAorICAgICAgICBpcyBub3QgdG8gY29tcHJlc3MuCisgICAgICAgPC9w YXJhPgorICAgICAgIDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJl bnRseSBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KICAgICAgICA8L3BhcmE+ CiAgICAgICA8L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCA2MmY5NDBmZjdhLi40 YThmYzFlMzA2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNiArNTYsMTAgQEAKICNpbmNs dWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCisjaWZk ZWYgSEFWRV9MSUJaCisjaW5jbHVkZSA8emxpYi5oPgorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtNjQsNyArNjgsNyBAQAogLyogdHlwZWRlZiBhcHBlYXJzIGluIGNvbXByZXNzX2lvLmggKi8K IHN0cnVjdCBDb21wcmVzc29yU3RhdGUKIHsKLQlDb21wcmVzc2lvbkFsZ29yaXRobSBjb21wckFs ZzsKKwlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3NfYWxnb3JpdGhtOwogCVdyaXRlRnVu Ywl3cml0ZUY7CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTc0LDkgKzc4LDYgQEAgc3RydWN0IENv bXByZXNzb3JTdGF0ZQogI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBQYXJzZUNvbXByZXNzaW9u T3B0aW9uKGludCBjb21wcmVzc2lvbiwgQ29tcHJlc3Npb25BbGdvcml0aG0gKmFsZywKLQkJCQkJ CQkJICAgaW50ICpsZXZlbCk7Ci0KIC8qIFJvdXRpbmVzIHRoYXQgc3VwcG9ydCB6bGliIGNvbXBy ZXNzZWQgZGF0YSBJL08gKi8KICNpZmRlZiBIQVZFX0xJQloKIHN0YXRpYyB2b2lkIEluaXRDb21w cmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwpAQCAtOTMsNTcgKzk0 LDMwIEBAIHN0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUg KkFILCBSZWFkRnVuYyByZWFkRik7CiBzdGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVOb25l KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogCQkJCQkJCQkgICBjb25z dCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7CiAKLS8qCi0gKiBJbnRlcnByZXRzIGEgbnVtZXJp YyAnY29tcHJlc3Npb24nIHZhbHVlLiBUaGUgYWxnb3JpdGhtIGltcGxpZWQgYnkgdGhlCi0gKiB2 YWx1ZSAoemxpYiBvciBub25lIGF0IHRoZSBtb21lbnQpLCBpcyByZXR1cm5lZCBpbiAqYWxnLCBh bmQgdGhlCi0gKiB6bGliIGNvbXByZXNzaW9uIGxldmVsIGluICpsZXZlbC4KLSAqLwotc3RhdGlj IHZvaWQKLVBhcnNlQ29tcHJlc3Npb25PcHRpb24oaW50IGNvbXByZXNzaW9uLCBDb21wcmVzc2lv bkFsZ29yaXRobSAqYWxnLCBpbnQgKmxldmVsKQotewotCWlmIChjb21wcmVzc2lvbiA9PSBaX0RF RkFVTFRfQ09NUFJFU1NJT04gfHwKLQkJKGNvbXByZXNzaW9uID4gMCAmJiBjb21wcmVzc2lvbiA8 PSA5KSkKLQkJKmFsZyA9IENPTVBSX0FMR19MSUJaOwotCWVsc2UgaWYgKGNvbXByZXNzaW9uID09 IDApCi0JCSphbGcgPSBDT01QUl9BTEdfTk9ORTsKLQllbHNlCi0JewotCQlwZ19mYXRhbCgiaW52 YWxpZCBjb21wcmVzc2lvbiBjb2RlOiAlZCIsIGNvbXByZXNzaW9uKTsKLQkJKmFsZyA9IENPTVBS X0FMR19OT05FOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JfQotCi0JLyogVGhlIGxldmVs IGlzIGp1c3QgdGhlIHBhc3NlZC1pbiB2YWx1ZS4gKi8KLQlpZiAobGV2ZWwpCi0JCSpsZXZlbCA9 IGNvbXByZXNzaW9uOwotfQotCiAvKiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVzICovCiAKIC8q IEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KIENvbXByZXNzb3JTdGF0ZSAqCi1BbGxvY2F0 ZUNvbXByZXNzb3IoaW50IGNvbXByZXNzaW9uLCBXcml0ZUZ1bmMgd3JpdGVGKQorQWxsb2NhdGVD b21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywK KwkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKQogewogCUNvbXByZXNzb3JTdGF0ZSAqY3M7Ci0JQ29t cHJlc3Npb25BbGdvcml0aG0gYWxnOwotCWludAkJCWxldmVsOwotCi0JUGFyc2VDb21wcmVzc2lv bk9wdGlvbihjb21wcmVzc2lvbiwgJmFsZywgJmxldmVsKTsKIAogI2lmbmRlZiBIQVZFX0xJQloK LQlpZiAoYWxnID09IENPTVBSX0FMR19MSUJaKQorCWlmIChjb21wcmVzc19zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxp YiBzdXBwb3J0Iik7CiAjZW5kaWYKIAogCWNzID0gKENvbXByZXNzb3JTdGF0ZSAqKSBwZ19tYWxs b2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKIAljcy0+d3JpdGVGID0gd3JpdGVGOwotCWNz LT5jb21wckFsZyA9IGFsZzsKKwljcy0+Y29tcHJlc3NfYWxnb3JpdGhtID0gY29tcHJlc3Nfc3Bl Yy5hbGdvcml0aG07CiAKIAkvKgogCSAqIFBlcmZvcm0gY29tcHJlc3Npb24gYWxnb3JpdGhtIHNw ZWNpZmljIGluaXRpYWxpemF0aW9uLgogCSAqLwogI2lmZGVmIEhBVkVfTElCWgotCWlmIChhbGcg PT0gQ09NUFJfQUxHX0xJQlopCi0JCUluaXRDb21wcmVzc29yWmxpYihjcywgbGV2ZWwpOworCWlm IChjcy0+Y29tcHJlc3NfYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCUluaXRD b21wcmVzc29yWmxpYihjcywgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CiAjZW5kaWYKIAogCXJldHVy biBjczsKQEAgLTE1NCwyMSArMTI4LDI0IEBAIEFsbG9jYXRlQ29tcHJlc3NvcihpbnQgY29tcHJl c3Npb24sIFdyaXRlRnVuYyB3cml0ZUYpCiAgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCiAgKi8KIHZv aWQKLVJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIGludCBjb21wcmVzc2lv biwgUmVhZEZ1bmMgcmVhZEYpCitSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCisJCQkJCVJlYWRGdW5j IHJlYWRGKQogewotCUNvbXByZXNzaW9uQWxnb3JpdGhtIGFsZzsKLQotCVBhcnNlQ29tcHJlc3Np b25PcHRpb24oY29tcHJlc3Npb24sICZhbGcsIE5VTEwpOwotCi0JaWYgKGFsZyA9PSBDT01QUl9B TEdfTk9ORSkKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKLQlpZiAoYWxn ID09IENPTVBSX0FMR19MSUJaKQorCXN3aXRjaCAoY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0pCiAJ eworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9u ZShBSCwgcmVhZEYpOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNp ZmRlZiBIQVZFX0xJQloKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKKwkJ CVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7CiAjZWxzZQotCQlwZ19mYXRhbCgi bm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CisJCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdp dGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdf ZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiB9CiAK QEAgLTE3OSwxOCArMTU2LDIxIEBAIHZvaWQKIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIAkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgZExlbikKIHsKLQlzd2l0Y2ggKGNzLT5jb21wckFsZykKKwlzd2l0Y2ggKGNzLT5jb21w cmVzc19hbGdvcml0aG0pCiAJewotCQljYXNlIENPTVBSX0FMR19MSUJaOgorCQljYXNlIFBHX0NP TVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCiAJCQlXcml0ZURhdGFUb0FyY2hpdmVa bGliKEFILCBjcywgZGF0YSwgZExlbik7CiAjZWxzZQogCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3 aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCiAJCQlicmVhazsKLQkJY2FzZSBDT01QUl9BTEdf Tk9ORToKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgogCQkJV3JpdGVEYXRhVG9BcmNoaXZl Tm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19m YXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOwogCX0KIH0KIApA QCAtMjAwLDExICsxODAsMjMgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKIHsKKwlzd2l0Y2ggKGNzLT5jb21wcmVzc19hbGdv cml0aG0pCisJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJa Ci0JaWYgKGNzLT5jb21wckFsZyA9PSBDT01QUl9BTEdfTElCWikKLQkJRW5kQ29tcHJlc3Nvclps aWIoQUgsIGNzKTsKKwkJCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7CisjZWxzZQorCQkJcGdf ZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JZnJlZShjcyk7 CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJZnJlZShjcyk7CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24g bWV0aG9kIik7CisJCQlicmVhazsKKwl9CiB9CiAKIC8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNp ZmljIHRvIGVhY2ggY29tcHJlc3Npb24gbWV0aG9kLiAqLwpAQCAtNDE4LDEwICs0MTAsOCBAQCBX cml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzLAogICovCiBzdHJ1Y3QgY2ZwCiB7Ci0JRklMRQkgICAqdW5jb21wcmVzc2VkZnA7Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JZ3pGaWxlCQljb21wcmVzc2VkZnA7Ci0jZW5kaWYKKwlwZ19jb21wcmVz c19hbGdvcml0aG0gY29tcHJlc3NfYWxnb3JpdGhtOworCXZvaWQJICAgKmZwOwogfTsKIAogI2lm ZGVmIEhBVkVfTElCWgpAQCAtNDUyLDIxICs0NDIsMjUgQEAgY2ZwICoKIGNmb3Blbl9yZWFkKGNv bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7CiAJY2ZwCQkgICAqZnA7CisJcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9OwogCisJY29tcHJlc3Nf c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogI2lmZGVmIEhBVkVfTElCWgog CWlmIChoYXNTdWZmaXgocGF0aCwgIi5neiIpKQotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCAx KTsKKwkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7CiAJZWxzZQogI2Vu ZGlmCiAJewotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCAwKTsKKwkJY29tcHJlc3Nfc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOworCQlmcCA9IGNmb3BlbihwYXRoLCBtb2Rl LCBjb21wcmVzc19zcGVjKTsKICNpZmRlZiBIQVZFX0xJQloKIAkJaWYgKGZwID09IE5VTEwpCiAJ CXsKIAkJCWNoYXIJICAgKmZuYW1lOwogCisJCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBH X0NPTVBSRVNTSU9OX0daSVA7CiAJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwot CQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIDEpOworCQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1v ZGUsIGNvbXByZXNzX3NwZWMpOwogCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAkJfQogI2Vu ZGlmCkBAIC00NzksMjYgKzQ3MywyNyBAQCBjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlKQogICogYmUgYSBmaWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3Blbigp IGFuZCBnem9wZW4oKSB0aGF0IGluZGljYXRlcyB3cml0aW5nCiAgKiAoInciLCAid2IiLCAiYSIs IG9yICJhYiIpLgogICoKLSAqIElmICdjb21wcmVzc2lvbicgaXMgbm9uLXplcm8sIGEgZ3ppcCBj b21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsIGFuZAotICogJ2NvbXByZXNzaW9uJyBpbmRpY2F0 ZXMgdGhlIGNvbXByZXNzaW9uIGxldmVsIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXgKLSAqIGlzIGF1 dG9tYXRpY2FsbHkgYWRkZWQgdG8gJ3BhdGgnIGluIHRoYXQgY2FzZS4KKyAqIElmICdjb21wcmVz c19zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXByZXNzZWQgc3RyZWFtIGlzIG9w ZW5lZCwKKyAqIGFuZCAnY29tcHJlc3Nfc3BlYy5sZXZlbCcgdXNlZC4gVGhlICIuZ3oiIHN1ZmZp eCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCisgKiAncGF0aCcgaW4gdGhhdCBjYXNlLgogICoK ICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4K ICAqLwogY2ZwICoKLWNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpt b2RlLCBpbnQgY29tcHJlc3Npb24pCitjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29u c3QgY2hhciAqbW9kZSwKKwkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzX3NwZWMpCiB7CiAJY2ZwCQkgICAqZnA7CiAKLQlpZiAoY29tcHJlc3Npb24gPT0gMCkKLQkJ ZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgMCk7CisJaWYgKGNvbXByZXNzX3NwZWMuYWxnb3JpdGht ID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXBy ZXNzX3NwZWMpOwogCWVsc2UKIAl7CiAjaWZkZWYgSEFWRV9MSUJaCiAJCWNoYXIJICAgKmZuYW1l OwogCiAJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCWZwID0gY2ZvcGVuKGZu YW1lLCBtb2RlLCBjb21wcmVzc2lvbik7CisJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21w cmVzc19zcGVjKTsKIAkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKICNlbHNlCiAJCXBnX2ZhdGFs KCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKQEAgLTUwOSw2MCArNTA0LDk2IEBAIGNm b3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJl c3Npb24pCiB9CiAKIC8qCi0gKiBPcGVucyBmaWxlICdwYXRoJyBpbiAnbW9kZScuIElmICdjb21w cmVzc2lvbicgaXMgbm9uLXplcm8sIHRoZSBmaWxlCi0gKiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6 b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3BlbigpLgorICogVGhpcyBpcyB0aGUgd29y a2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9y CisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlw dG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBp cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCisgKiBUaGUgY2FsbGVyIG11 c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0 aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0 aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1jZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBjb21wcmVzc2lvbikKK3N0YXRpYyBjZnAgKgor Y2ZvcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9k ZSwKKwkJCQlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3NfYWxnb3JpdGhtLCBpbnQgY29t cHJlc3Npb25MZXZlbCkKIHsKIAljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7 CiAKLQlpZiAoY29tcHJlc3Npb24gIT0gMCkKKwlmcC0+Y29tcHJlc3NfYWxnb3JpdGhtID0gY29t cHJlc3NfYWxnb3JpdGhtOworCisJc3dpdGNoIChjb21wcmVzc19hbGdvcml0aG0pCiAJewotI2lm ZGVmIEhBVkVfTElCWgotCQlpZiAoY29tcHJlc3Npb24gIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9O KQotCQl7Ci0JCQkvKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28g dGVsbCB6bGliIHRvIHVzZSBpdCAqLwotCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07CisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCWlmIChmZCA+PSAwKQorCQkJCWZwLT5mcCA9 IGZkb3BlbihmZCwgbW9kZSk7CisJCQllbHNlCisJCQkJZnAtPmZwID0gZm9wZW4ocGF0aCwgbW9k ZSk7CisJCQlpZiAoZnAtPmZwID09IE5VTEwpCisJCQl7CisJCQkJZnJlZV9rZWVwX2Vycm5vKGZw KTsKKwkJCQlmcCA9IE5VTEw7CisJCQl9CiAKLQkJCXNucHJpbnRmKG1vZGVfY29tcHJlc3Npb24s IHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAotCQkJCQkgbW9kZSwgY29tcHJlc3Np b24pOwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9u KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1 c2UgdGhlIHpsaWIgZGVmYXVsdCAqLwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRo LCBtb2RlKTsKLQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNp ZmRlZiBIQVZFX0xJQloKKwkJCWlmIChjb21wcmVzc2lvbkxldmVsICE9IFpfREVGQVVMVF9DT01Q UkVTU0lPTikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXBy ZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlCisJCQkJICogaXQKKwkJCQkgKi8KKwkJ CQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKKworCQkJCXNucHJpbnRmKG1vZGVfY29tcHJl c3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAorCQkJCQkJIG1vZGUsIGNv bXByZXNzaW9uTGV2ZWwpOworCQkJCWlmIChmZCA+PSAwKQorCQkJCQlmcC0+ZnAgPSBnemRvcGVu KGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCQllbHNlCisJCQkJCWZwLT5mcCA9IGd6b3Blbihw YXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBkb24n dCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KKwkJCQlpZiAo ZmQgPj0gMCkKKwkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZSk7CisJCQkJZWxzZQorCQkJ CQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7CisJCQl9CiAKLQkJZnAtPnVuY29tcHJlc3Nl ZGZwID0gTlVMTDsKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVMTCkKLQkJewotCQkJZnJl ZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQorCQkJaWYgKGZwLT5mcCA9PSBO VUxMKQorCQkJeworCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJCQkJZnAgPSBOVUxMOworCQkJ fQogI2Vsc2UKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2Vu ZGlmCi0JfQotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWZwLT5jb21wcmVzc2VkZnAg PSBOVUxMOworCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2Vu ZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQlpZiAoZnAt PnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0J CQlmcCA9IE5VTEw7Ci0JCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImlu dmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZnA7 CiB9CiAKK2NmcCAqCitjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK KwkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpCit7CisJ cmV0dXJuIGNmb3Blbl9pbnRlcm5hbChwYXRoLCAtMSwgbW9kZSwKKwkJCQkJCSAgIGNvbXByZXNz X3NwZWMuYWxnb3JpdGhtLAorCQkJCQkJICAgY29tcHJlc3Nfc3BlYy5sZXZlbCk7Cit9CisKK2Nm cCAqCitjZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJu YWwoTlVMTCwgZmQsIG1vZGUsCisJCQkJCQkgICBjb21wcmVzc19zcGVjLmFsZ29yaXRobSwKKwkJ CQkJCSAgIGNvbXByZXNzX3NwZWMubGV2ZWwpOworfQogCiBpbnQKIGNmcmVhZCh2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKQpAQCAtNTcyLDM4ICs2MDMsNjEgQEAgY2ZyZWFkKHZvaWQgKnB0 ciwgaW50IHNpemUsIGNmcCAqZnApCiAJaWYgKHNpemUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlzd2l0Y2ggKGZwLT5jb21w cmVzc19hbGdvcml0aG0pCiAJewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRy LCBzaXplKTsKLQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkK LQkJewotCQkJaW50CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihm cC0+Y29tcHJlc3NlZGZwLCAmZXJybnVtKTsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgor CQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+ZnApOworCQkJaWYgKHJldCAhPSBzaXpl ICYmICFmZW9mKGZwLT5mcCkpCisJCQkJUkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7CiAKLQkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwKLQkJCQkJIGVycm51 bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKLQkJfQotCX0KLQllbHNl CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElC WgorCQkJcmV0ID0gZ3pyZWFkKGZwLT5mcCwgcHRyLCBzaXplKTsKKwkJCWlmIChyZXQgIT0gc2l6 ZSAmJiAhZ3plb2YoZnAtPmZwKSkKKwkJCXsKKwkJCQlpbnQJCQllcnJudW07CisJCQkJY29uc3Qg Y2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+ZnAsICZlcnJudW0pOworCisJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCQkJIGVycm51bSA9PSBa X0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwkJCX0KKyNlbHNlCisJCQlwZ19m YXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQl7Ci0JCXJldCA9 IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCAhPSBz aXplICYmICFmZW9mKGZwLT51bmNvbXByZXNzZWRmcCkpCi0JCQlSRUFEX0VSUk9SX0VYSVQoZnAt PnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgi aW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOwogCX0KKwogCXJldHVybiBy ZXQ7CiB9CiAKIGludAogY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZw KQogeworCWludAkJCXJldCA9IDA7CisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0p CisJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmd3JpdGUocHRyLCAx LCBzaXplLCBmcC0+ZnApOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoK ICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6d3Jp dGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNlCisJCQlyZXQgPSBnendyaXRl KGZwLT5mcCwgcHRyLCBzaXplKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGgg emxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIGZw LT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJl dDsKIH0KIAogaW50CkBAIC02MTEsMjQgKzY2NSwzMSBAQCBjZmdldGMoY2ZwICpmcCkKIHsKIAlp bnQJCQlyZXQ7CiAKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlz d2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCiAJewotCQlyZXQgPSBnemdldGMoZnAtPmNv bXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgPT0gRU9GKQotCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5j b21wcmVzc2VkZnApKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZp bGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOwotCQl9Ci0JfQotCWVsc2UK KwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmdldGMoZnAtPmZwKTsKKwkJ CWlmIChyZXQgPT0gRU9GKQorCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOworCisJCQlicmVh azsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElCWgorCQkJcmV0 ID0gZ3pnZXRjKChnekZpbGUpIGZwLT5mcCk7CisJCQlpZiAocmV0ID09IEVPRikKKwkJCXsKKwkJ CQlpZiAoIWd6ZW9mKGZwLT5mcCkpCisJCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQllbHNlCisJCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJCQl9 CisjZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2Vu ZGlmCi0JewotCQlyZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09 IEVPRikKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsK KwkJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC02MzcsNjUgKzY5OCwxMDcgQEAgY2Zn ZXRjKGNmcCAqZnApCiBjaGFyICoKIGNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4p CiB7CisJY2hhcgkgICAqcmV0OworCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQor CXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmdldHMoYnVmLCBsZW4s IGZwLT5mcCk7CisKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZk ZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnemdldHMoZnAt PmNvbXByZXNzZWRmcCwgYnVmLCBsZW4pOwotCWVsc2UKKwkJCXJldCA9IGd6Z2V0cyhmcC0+ZnAs IGJ1ZiwgbGVuKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBw b3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZnZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21wcmVzc2Vk ZnApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVz c2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIGludAog Y2ZjbG9zZShjZnAgKmZwKQogewotCWludAkJCXJlc3VsdDsKKwlpbnQJCQlyZXQ7CiAKIAlpZiAo ZnAgPT0gTlVMTCkKIAl7CiAJCWVycm5vID0gRUJBREY7CiAJCXJldHVybiBFT0Y7CiAJfQotI2lm ZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCisJc3dpdGNoIChmcC0+Y29t cHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJcmVzdWx0ID0gZ3pjbG9zZShmcC0+Y29tcHJlc3NlZGZw KTsKLQkJZnAtPmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWVsc2UKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmNsb3NlKGZwLT5mcCk7CisJCQlmcC0+ZnAgPSBOVUxM OworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVf TElCWgorCQkJcmV0ID0gZ3pjbG9zZShmcC0+ZnApOworCQkJZnAtPmZwID0gTlVMTDsKKyNlbHNl CisJCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQl7 Ci0JCXJlc3VsdCA9IGZjbG9zZShmcC0+dW5jb21wcmVzc2VkZnApOwotCQlmcC0+dW5jb21wcmVz c2VkZnAgPSBOVUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgiaW52YWxp ZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOwogCX0KKwogCWZyZWVfa2VlcF9lcnJu byhmcCk7CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiByZXQ7CiB9CiAKIGludAogY2Zlb2Yo Y2ZwICpmcCkKIHsKKwlpbnQJCQlyZXQ7CisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0 aG0pCisJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmZW9mKGZwLT5m cCk7CisKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFW RV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnemVvZihmcC0+Y29tcHJl c3NlZGZwKTsKLQllbHNlCisJCQlyZXQgPSBnemVvZihmcC0+ZnApOworI2Vsc2UKKwkJCXBnX2Zh dGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCQlyZXR1cm4gZmVv ZihmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRh bCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVy biByZXQ7CiB9CiAKIGNvbnN0IGNoYXIgKgogZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQogewotI2lm ZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCWlmIChmcC0+Y29tcHJlc3Nf YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJeworI2lmZGVmIEhBVkVfTElCWgog CQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXBy ZXNzZWRmcCwgJmVycm51bSk7CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmZw LCAmZXJybnVtKTsKIAogCQlpZiAoZXJybnVtICE9IFpfRVJSTk8pCiAJCQlyZXR1cm4gZXJybXNn OwotCX0KKyNlbHNlCisJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsK ICNlbmRpZgorCX0KKwogCXJldHVybiBzdHJlcnJvcihlcnJubyk7CiB9CiAKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2lvLmgKaW5kZXggZjYzNTc4NzY5Mi4uZDYzMzVmZmYwMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgK QEAgLTIxLDEyICsyMSw2IEBACiAjZGVmaW5lIFpMSUJfT1VUX1NJWkUJNDA5NgogI2RlZmluZSBa TElCX0lOX1NJWkUJNDA5NgogCi10eXBlZGVmIGVudW0KLXsKLQlDT01QUl9BTEdfTk9ORSwKLQlD T01QUl9BTEdfTElCWgotfSBDb21wcmVzc2lvbkFsZ29yaXRobTsKLQogLyogUHJvdG90eXBlIGZv ciBjYWxsYmFjayBmdW5jdGlvbiB0byBXcml0ZURhdGFUb0FyY2hpdmUoKSAqLwogdHlwZWRlZiB2 b2lkICgqV3JpdGVGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6 ZV90IGxlbik7CiAKQEAgLTQ2LDggKzQwLDEwIEBAIHR5cGVkZWYgc2l6ZV90ICgqUmVhZEZ1bmMp IChBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwogLyogc3Ry dWN0IGRlZmluaXRpb24gYXBwZWFycyBpbiBjb21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVj dCBDb21wcmVzc29yU3RhdGUgQ29tcHJlc3NvclN0YXRlOwogCi1leHRlcm4gQ29tcHJlc3NvclN0 YXRlICpBbGxvY2F0ZUNvbXByZXNzb3IoaW50IGNvbXByZXNzaW9uLCBXcml0ZUZ1bmMgd3JpdGVG KTsKLWV4dGVybiB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIGlu dCBjb21wcmVzc2lvbiwKK2V4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nv cihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCisJCQkJCQkJ CQkJICAgV3JpdGVGdW5jIHdyaXRlRik7CitleHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZl KEFyY2hpdmVIYW5kbGUgKkFILAorCQkJCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzX3NwZWMsCiAJCQkJCQkJCVJlYWRGdW5jIHJlYWRGKTsKIGV4dGVybiB2b2lk IFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cywKIAkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CkBAIC01Niw5ICs1 MiwxMyBAQCBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKIAogdHlwZWRlZiBzdHJ1Y3QgY2ZwIGNmcDsKIAotZXh0ZXJuIGNm cCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBjb21wcmVz c2lvbik7CitleHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3Nw ZWMpOworZXh0ZXJuIGNmcCAqY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJ CXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyk7CiBleHRlcm4gY2ZwICpj Zm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBj ZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQg Y29tcHJlc3Npb24pOworZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc19zcGVjKTsKIGV4dGVybiBpbnQJY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUs IGNmcCAqZnApOwogZXh0ZXJuIGludAljZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50IHNpemUs IGNmcCAqZnApOwogZXh0ZXJuIGludAljZmdldGMoY2ZwICpmcCk7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5k ZXggZThiNzg5ODI5Ny4uNjFjNDEyYzhjYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMjMsNiArMjMs NyBAQAogI2lmbmRlZiBQR19CQUNLVVBfSAogI2RlZmluZSBQR19CQUNLVVBfSAogCisjaW5jbHVk ZSAiY29tbW9uL2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc2ltcGxlX2xpc3Qu aCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgogCkBAIC0xNDMsNyArMTQ0LDggQEAgdHlwZWRlZiBz dHJ1Y3QgX3Jlc3RvcmVPcHRpb25zCiAKIAlpbnQJCQlub0RhdGFGb3JGYWlsZWRUYWJsZXM7CiAJ aW50CQkJZXhpdF9vbl9lcnJvcjsKLQlpbnQJCQljb21wcmVzc2lvbjsKKwlwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWM7CS8qIFNwZWNpZmljYXRpb24gZm9yCisJCQkJCQkJ CQkJCQkgKiBjb21wcmVzc2lvbiAqLwogCWludAkJCXN1cHByZXNzRHVtcFdhcm5pbmdzOwkvKiBT dXBwcmVzcyBvdXRwdXQgb2YgV0FSTklORyBlbnRyaWVzCiAJCQkJCQkJCQkJICogdG8gc3RkZXJy ICovCiAJYm9vbAkJc2luZ2xlX3R4bjsKQEAgLTMwMyw3ICszMDUsOCBAQCBleHRlcm4gQXJjaGl2 ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQg Zm10KTsKIAogLyogQ3JlYXRlIGEgbmV3IGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpDcmVh dGVBcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwK LQkJCQkJCQkgIGNvbnN0IGludCBjb21wcmVzc2lvbiwgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2Rl IG1vZGUsCisJCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz X3NwZWMsCisJCQkJCQkJICBib29sIGRvc3luYywgQXJjaGl2ZU1vZGUgbW9kZSwKIAkJCQkJCQkg IFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cER1bXBXb3JrZXIpOwogCiAvKiBUaGUgLS1saXN0IG9w dGlvbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGYzOWMwZmEzNmYu LjMwNGNjMDcyY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTMxLDYg KzMxLDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUg ImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRp bHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKQEAgLTQzLDEz ICs0NCw2IEBACiAjZGVmaW5lIFRFWFRfRFVNUF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGR1bXBcbi0tXG5cbiIKICNkZWZpbmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1cbi0t IFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iCiAKLS8qIHN0YXRlIG5l ZWRlZCB0byBzYXZlL3Jlc3RvcmUgYW4gYXJjaGl2ZSdzIG91dHB1dCB0YXJnZXQgKi8KLXR5cGVk ZWYgc3RydWN0IF9vdXRwdXRDb250ZXh0Ci17Ci0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7 Ci19IE91dHB1dENvbnRleHQ7Ci0KIC8qCiAgKiBTdGF0ZSBmb3IgdHJhY2tpbmcgVG9jRW50cnlz IHRoYXQgYXJlIHJlYWR5IHRvIHByb2Nlc3MgZHVyaW5nIGEgcGFyYWxsZWwKICAqIHJlc3RvcmUu ICAoVGhpcyB1c2VkIHRvIGJlIGEgbGlzdCwgYW5kIHdlIHN0aWxsIGNhbGwgaXQgdGhhdCwgdGhv dWdoIG5vdwpAQCAtNzAsNyArNjQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfcGFyYWxsZWxSZWFkeUxp c3QKIAogCiBzdGF0aWMgQXJjaGl2ZUhhbmRsZSAqX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNw ZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAotCQkJCQkJCSAgIGNvbnN0IGludCBjb21wcmVz c2lvbiwgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCisJCQkJCQkJICAgY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQkJCSAgIGJvb2wgZG9z eW5jLCBBcmNoaXZlTW9kZSBtb2RlLAogCQkJCQkJCSAgIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1 cFdvcmtlclB0cik7CiBzdGF0aWMgdm9pZCBfZ2V0T2JqZWN0RGVzY3JpcHRpb24oUFFFeHBCdWZm ZXIgYnVmLCBjb25zdCBUb2NFbnRyeSAqdGUpOwogc3RhdGljIHZvaWQgX3ByaW50VG9jRW50cnko QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc0RhdGEpOwpAQCAtOTgsOSAr OTMsMTAgQEAgc3RhdGljIGludAlfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUg KkFIKTsKIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0 aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1w VGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0p Owotc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwgaW50IGNvbXByZXNzaW9uKTsKLXN0YXRpYyBPdXRwdXRDb250ZXh0IFNhdmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgT3V0cHV0Q29udGV4dCBzYXZlZENvbnRleHQpOworc3RhdGljIHZvaWQgU2V0 T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOworc3RhdGljIGNm cCAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGludAly ZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlz X3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNo aXZlSGFuZGxlICpBSCwKQEAgLTIzOSwxMiArMjM1LDEzIEBAIHNldHVwUmVzdG9yZVdvcmtlcihB cmNoaXZlICpBSFgpCiAvKiBQdWJsaWMgKi8KIEFyY2hpdmUgKgogQ3JlYXRlQXJjaGl2ZShjb25z dCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCi0JCQkgIGNvbnN0IGlu dCBjb21wcmVzc2lvbiwgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCisJCQkgIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywKKwkJCSAgYm9vbCBkb3N5 bmMsIEFyY2hpdmVNb2RlIG1vZGUsCiAJCQkgIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cER1bXBX b3JrZXIpCiAKIHsKLQlBcmNoaXZlSGFuZGxlICpBSCA9IF9hbGxvY0FIKEZpbGVTcGVjLCBmbXQs IGNvbXByZXNzaW9uLCBkb3N5bmMsCi0JCQkJCQkJCSBtb2RlLCBzZXR1cER1bXBXb3JrZXIpOwor CUFyY2hpdmVIYW5kbGUgKkFIID0gX2FsbG9jQUgoRmlsZVNwZWMsIGZtdCwgY29tcHJlc3Nfc3Bl YywKKwkJCQkJCQkJIGRvc3luYywgbW9kZSwgc2V0dXBEdW1wV29ya2VyKTsKIAogCXJldHVybiAo QXJjaGl2ZSAqKSBBSDsKIH0KQEAgLTI1NCw3ICsyNTEsMTIgQEAgQ3JlYXRlQXJjaGl2ZShjb25z dCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiBBcmNoaXZlICoKIE9w ZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCkK IHsKLQlBcmNoaXZlSGFuZGxlICpBSCA9IF9hbGxvY0FIKEZpbGVTcGVjLCBmbXQsIDAsIHRydWUs IGFyY2hNb2RlUmVhZCwgc2V0dXBSZXN0b3JlV29ya2VyKTsKKwlBcmNoaXZlSGFuZGxlICpBSDsK KwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7MH07CisKKwljb21w cmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJQUggPSBfYWxsb2NB SChGaWxlU3BlYywgZm10LCBjb21wcmVzc19zcGVjLCB0cnVlLAorCQkJCSAgYXJjaE1vZGVSZWFk LCBzZXR1cFJlc3RvcmVXb3JrZXIpOwogCiAJcmV0dXJuIChBcmNoaXZlICopIEFIOwogfQpAQCAt MjY5LDExICsyNzEsOCBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0 cihBSCk7CiAKIAkvKiBDbG9zZSB0aGUgb3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4g Y2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMg PSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0g ZmNsb3NlKEFILT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAog CWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTog JW0iKTsKQEAgLTM1NCw4ICszNTMsOSBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJ QXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlv bnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKKwlib29s CQlzdXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0 IHNhdjsKKwljZnAJCSAgICpzYXY7CiAKIAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7 CiAKQEAgLTM4MywxNiArMzgzLDIzIEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkv KgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBuZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0 IGdvdAogCSAqLwotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uICE9IDAg JiYgQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQorCXN1cHBvcnRzX2NvbXByZXNzaW9uID0g dHJ1ZTsKKwlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9O X05PTkUgJiYKKwkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQogCXsKIAkJZm9yICh0ZSA9 IEFILT50b2MtPm5leHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpCiAJCXsKIAkJCWlm ICh0ZS0+aGFkRHVtcGVyICYmICh0ZS0+cmVxcyAmIFJFUV9EQVRBKSAhPSAwKQotCQkJCXBnX2Zh dGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24g bm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCXsKKyNpZm5kZWYgSEFW RV9MSUJaCisJCQkJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9HWklQKQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOworI2VuZGlmCisJ CQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQorCQkJCQlwZ19mYXRhbCgiY2Fu bm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBw b3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl9CiAJCX0KIAl9Ci0jZW5kaWYKIAog CS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBhc3N1bWUgd2UgaGF2ZSB0 aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTQ1OSw4ICs0NjYsOCBAQCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgpCiAJICogU2V0dXAgdGhlIG91dHB1dCBmaWxlIGlmIG5lY2Vzc2FyeS4K IAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKLQlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9w dC0+Y29tcHJlc3Npb24pCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNv bXByZXNzaW9uKTsKKwlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Nfc3BlYy5h bGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5m aWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Nfc3BlYyk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC03MzksNyArNzQ2LDcgQEAg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCUFILT5zdGFnZSA9IFNUQUdFX0ZJ TkFMSVpJTkc7CiAKLQlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb24pCisJ aWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBH X0NPTVBSRVNTSU9OX05PTkUpCiAJCVJlc3RvcmVPdXRwdXQoQUgsIHNhdik7CiAKIAlpZiAocm9w dC0+dXNlREIpCkBAIC05NjksNiArOTc2LDggQEAgTmV3UmVzdG9yZU9wdGlvbnModm9pZCkKIAlv cHRzLT5mb3JtYXQgPSBhcmNoVW5rbm93bjsKIAlvcHRzLT5jcGFyYW1zLnByb21wdFBhc3N3b3Jk ID0gVFJJX0RFRkFVTFQ7CiAJb3B0cy0+ZHVtcFNlY3Rpb25zID0gRFVNUF9VTlNFQ1RJT05FRDsK KwlvcHRzLT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJ b3B0cy0+Y29tcHJlc3Nfc3BlYy5sZXZlbCA9IElOVF9NSU47CiAKIAlyZXR1cm4gb3B0czsKIH0K QEAgLTExMTUsMjMgKzExMjQsMjggQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlB cmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9u cyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlUb2NFbnRyeSAgICp0ZTsKKwlwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJT ZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAljb25zdCBjaGFy ICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKKwkvKiBUT0MgaXMgYWx3YXlzIHVu Y29tcHJlc3NlZCAqLworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX05PTkU7CisKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUp Ci0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIDAgLyogbm8gY29tcHJlc3Npb24gKi8g KTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzX3NwZWMpOwog CiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJG VElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQogCQlzdHJj cHkoc3RhbXBfc3RyLCAiW3Vua25vd25dIik7CiAKIAlhaHByaW50ZihBSCwgIjtcbjsgQXJjaGl2 ZSBjcmVhdGVkIGF0ICVzXG4iLCBzdGFtcF9zdHIpOwotCWFocHJpbnRmKEFILCAiOyAgICAgZGJu YW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjogJWRcbiIs CisJYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRc bjsgICAgIENvbXByZXNzaW9uOiAlc1xuIiwKIAkJCSBzYW5pdGl6ZV9saW5lKEFILT5hcmNoZGJu YW1lLCBmYWxzZSksCi0JCQkgQUgtPnRvY0NvdW50LCBBSC0+Y29tcHJlc3Npb24pOworCQkJIEFI LT50b2NDb3VudCwKKwkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoQUgtPmNvbXByZXNz X3NwZWMuYWxnb3JpdGhtKSk7CiAKIAlzd2l0Y2ggKEFILT5mb3JtYXQpCiAJewpAQCAtMTQ4NSw2 MCArMTQ5OSwzNSBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4u KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB2b2lkCi1TZXRP dXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY29tcHJl c3Npb24pCitTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKIHsK LQlpbnQJCQlmbjsKKwljb25zdCBjaGFyICptb2RlOworCWludAkJCWZuID0gLTE7CiAKIAlpZiAo ZmlsZW5hbWUpCiAJewogCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIpID09IDApCiAJCQlmbiA9 IGZpbGVubyhzdGRvdXQpOwotCQllbHNlCi0JCQlmbiA9IC0xOwogCX0KIAllbHNlIGlmIChBSC0+ RkgpCiAJCWZuID0gZmlsZW5vKEFILT5GSCk7CiAJZWxzZSBpZiAoQUgtPmZTcGVjKQogCXsKLQkJ Zm4gPSAtMTsKIAkJZmlsZW5hbWUgPSBBSC0+ZlNwZWM7CiAJfQogCWVsc2UKIAkJZm4gPSBmaWxl bm8oc3Rkb3V0KTsKIAotCS8qIElmIGNvbXByZXNzaW9uIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB1 c2UgZ3pvcGVuICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNzaW9uICE9IDApCi0J ewotCQljaGFyCQlmbW9kZVsxNF07CisJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQor CQltb2RlID0gUEdfQklOQVJZX0E7CisJZWxzZQorCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQkJ LyogRG9uJ3QgdXNlIFBHX0JJTkFSWV94IHNpbmNlIHRoaXMgaXMgemxpYiAqLwotCQlzcHJpbnRm KGZtb2RlLCAid2IlZCIsIGNvbXByZXNzaW9uKTsKLQkJaWYgKGZuID49IDApCi0JCQlBSC0+T0Yg PSBnemRvcGVuKGR1cChmbiksIGZtb2RlKTsKLQkJZWxzZQotCQkJQUgtPk9GID0gZ3pvcGVuKGZp bGVuYW1lLCBmbW9kZSk7Ci0JCUFILT5nek91dCA9IDE7Ci0JfQorCWlmIChmbiA+PSAwKQorCQlB SC0+T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUsIGNvbXByZXNzX3NwZWMpOwogCWVsc2UKLSNl bmRpZgotCXsJCQkJCQkJLyogVXNlIGZvcGVuICovCi0JCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9k ZUFwcGVuZCkKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgtPk9GID0gZmRvcGVuKGR1cChm biksIFBHX0JJTkFSWV9BKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0YgPSBmb3BlbihmaWxlbmFtZSwg UEdfQklOQVJZX0EpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgt Pk9GID0gZmRvcGVuKGR1cChmbiksIFBHX0JJTkFSWV9XKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0Yg PSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQl9Ci0JCUFILT5nek91dCA9IDA7Ci0J fQorCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzX3NwZWMpOwogCiAJ aWYgKCFBSC0+T0YpCiAJewpAQCAtMTU0OSwzMyArMTUzOCwyNCBAQCBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY29tcHJlc3Npb24pCiAJfQog fQogCi1zdGF0aWMgT3V0cHV0Q29udGV4dAorc3RhdGljIGNmcCAqCiBTYXZlT3V0cHV0KEFyY2hp dmVIYW5kbGUgKkFIKQogewotCU91dHB1dENvbnRleHQgc2F2OwotCi0Jc2F2Lk9GID0gQUgtPk9G OwotCXNhdi5nek91dCA9IEFILT5nek91dDsKLQotCXJldHVybiBzYXY7CisJcmV0dXJuIChjZnAg KikgQUgtPk9GOwogfQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgT3V0cHV0Q29udGV4dCBzYXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0g MDsJCQkJCS8qIGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5n ek91dCkKLQkJcmVzID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFI LT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAot CUFILT5nek91dCA9IHNhdmVkQ29udGV4dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQu T0Y7CisJQUgtPk9GID0gc2F2ZWRPdXRwdXQ7CiB9CiAKIApAQCAtMTY5OSwyMiArMTY3OSwxNyBA QCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJj aGl2ZUhhbmRsZSAqQUgpCiAKIAkJYnl0ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0J ZWxzZSBpZiAoQUgtPmd6T3V0KQotCQlieXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUs IG5tZW1iLCBBSC0+T0YpOwogCWVsc2UgaWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dy aXR0ZW4gPSBBSC0+Q3VzdG9tT3V0UHRyKEFILCBwdHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgor CSAqIElmIHdlJ3JlIGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQg d2UncmUgY29ubmVjdGVkCisJICogdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNl IGlmIChSZXN0b3JpbmdUb0RCKEFIKSkKKwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21t YW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJ ZWxzZQotCXsKLQkJLyoKLQkJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBk aXJlY3QgdG8gREIsIGFuZCB3ZSdyZQotCQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRo ZSBEQi4KLQkJICovCi0JCWlmIChSZXN0b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4g PSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBz aXplICogbm1lbWIpOwotCQllbHNlCi0JCQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6 ZSwgbm1lbWIsIEFILT5PRikgKiBzaXplOwotCX0KKwkJYnl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUo cHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXpl ICogbm1lbWIpCiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMTk4LDEwICsyMTczLDEyIEBAIF9k aXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAgKi8KIHN0YXRpYyBBcmNo aXZlSGFuZGxlICoKIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCwKLQkJIGNvbnN0IGludCBjb21wcmVzc2lvbiwgYm9vbCBkb3N5bmMsIEFyY2hp dmVNb2RlIG1vZGUsCisJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz X3NwZWMsCisJCSBib29sIGRvc3luYywgQXJjaGl2ZU1vZGUgbW9kZSwKIAkJIFNldHVwV29ya2Vy UHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2Rl YnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMgPyBG aWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIyNDksMTQgKzIyMjYsMTQgQEAgX2FsbG9j QUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCUFILT50 b2MtPnByZXYgPSBBSC0+dG9jOwogCiAJQUgtPm1vZGUgPSBtb2RlOwotCUFILT5jb21wcmVzc2lv biA9IGNvbXByZXNzaW9uOworCUFILT5jb21wcmVzc19zcGVjID0gY29tcHJlc3Nfc3BlYzsKIAlB SC0+ZG9zeW5jID0gZG9zeW5jOwogCiAJbWVtc2V0KCYoQUgtPnNxbHBhcnNlKSwgMCwgc2l6ZW9m KEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBzdGRvdXQgd2l0aCBubyBjb21wcmVzc2lvbiBm b3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5nek91dCA9IDA7Ci0JQUgtPk9GID0gc3Rkb3V0 OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJ QUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91dCkpLCBQR19CSU5BUllfQSwgb3V0X2Nv bXByZXNzX3NwZWMpOwogCiAJLyoKIAkgKiBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5h cnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0IGZpbGVzLApAQCAtMjI2NCw3ICsyMjQxLDcg QEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10 LAogCSAqIEZvcmNlIHN0ZGluL3N0ZG91dCBpbnRvIGJpbmFyeSBtb2RlIGlmIHRoYXQgaXMgd2hh dCB3ZSBhcmUgdXNpbmcuCiAJICovCiAjaWZkZWYgV0lOMzIKLQlpZiAoKGZtdCAhPSBhcmNoTnVs bCB8fCBjb21wcmVzc2lvbiAhPSAwKSAmJgorCWlmICgoZm10ICE9IGFyY2hOdWxsIHx8IGNvbXBy ZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpICYmCiAJCShBSC0+ZlNw ZWMgPT0gTlVMTCB8fCBzdHJjbXAoQUgtPmZTcGVjLCAiIikgPT0gMCkpCiAJewogCQlpZiAobW9k ZSA9PSBhcmNoTW9kZVdyaXRlKQpAQCAtMzY2OSw3ICszNjQ2LDcgQEAgV3JpdGVIZWFkKEFyY2hp dmVIYW5kbGUgKkFIKQogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5pbnRTaXplKTsKIAlBSC0+ V3JpdGVCeXRlUHRyKEFILCBBSC0+b2ZmU2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgt PmZvcm1hdCk7Ci0JV3JpdGVJbnQoQUgsIEFILT5jb21wcmVzc2lvbik7CisJV3JpdGVJbnQoQUgs IEFILT5jb21wcmVzc19zcGVjLmxldmVsKTsKIAljcnRtID0gKmxvY2FsdGltZSgmQUgtPmNyZWF0 ZURhdGUpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX3NlYyk7CiAJV3JpdGVJbnQoQUgsIGNydG0u dG1fbWluKTsKQEAgLTM3NDAsMjEgKzM3MTcsMjYgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAq QUgpCiAJCXBnX2ZhdGFsKCJleHBlY3RlZCBmb3JtYXQgKCVkKSBkaWZmZXJzIGZyb20gZm9ybWF0 IGZvdW5kIGluIGZpbGUgKCVkKSIsCiAJCQkJIEFILT5mb3JtYXQsIGZtdCk7CiAKKwlBSC0+Y29t cHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogCWlmIChBSC0+dmVy c2lvbiA+PSBLX1ZFUlNfMV8yKQogCXsKIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkK LQkJCUFILT5jb21wcmVzc2lvbiA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CisJCQlBSC0+Y29tcHJl c3Nfc3BlYy5sZXZlbCA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CiAJCWVsc2UKLQkJCUFILT5jb21w cmVzc2lvbiA9IFJlYWRJbnQoQUgpOworCQkJQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgPSBSZWFk SW50KEFIKTsKKworCQlpZiAoQUgtPmNvbXByZXNzX3NwZWMubGV2ZWwgIT0gMCkKKwkJCUFILT5j b21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJfQogCWVsc2UK LQkJQUgtPmNvbXByZXNzaW9uID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQlBSC0+Y29tcHJl c3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCiAjaWZuZGVmIEhBVkVf TElCWgotCWlmIChBSC0+Y29tcHJlc3Npb24gIT0gMCkKKwlpZiAoQUgtPmNvbXByZXNzX3NwZWMu YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCXBnX2xvZ193YXJuaW5nKCJhcmNo aXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIC0tIG5vIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUiKTsKICNlbmRpZgogCisK IAlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfNCkKIAl7CiAJCXN0cnVjdCB0bQljcnRtOwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQyNjg3YzRlYzguLmQyOTMwOTQ5 YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTMyLDMwICszMiw2IEBA CiAKICNkZWZpbmUgTE9CQlVGU0laRSAxNjM4NAogCi0jaWZkZWYgSEFWRV9MSUJaCi0jaW5jbHVk ZSA8emxpYi5oPgotI2RlZmluZSBHWkNMT1NFKGZoKSBnemNsb3NlKGZoKQotI2RlZmluZSBHWldS SVRFKHAsIHMsIG4sIGZoKSBnendyaXRlKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5lIEdaUkVB RChwLCBzLCBuLCBmaCkgZ3pyZWFkKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5lIEdaRU9GKGZo KQlnemVvZihmaCkKLSNlbHNlCi0jZGVmaW5lIEdaQ0xPU0UoZmgpIGZjbG9zZShmaCkKLSNkZWZp bmUgR1pXUklURShwLCBzLCBuLCBmaCkgKGZ3cml0ZShwLCBzLCBuLCBmaCkgKiAocykpCi0jZGVm aW5lIEdaUkVBRChwLCBzLCBuLCBmaCkgZnJlYWQocCwgcywgbiwgZmgpCi0jZGVmaW5lIEdaRU9G KGZoKQlmZW9mKGZoKQotLyogdGhpcyBpcyBqdXN0IHRoZSByZWRlZmluaXRpb24gb2YgYSBsaWJ6 IGNvbnN0YW50ICovCi0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEpCi0KLXR5cGVk ZWYgc3RydWN0IF96X3N0cmVhbQotewotCXZvaWQJICAgKm5leHRfaW47Ci0Jdm9pZAkgICAqbmV4 dF9vdXQ7Ci0Jc2l6ZV90CQlhdmFpbF9pbjsKLQlzaXplX3QJCWF2YWlsX291dDsKLX0gel9zdHJl YW07Ci10eXBlZGVmIHpfc3RyZWFtICp6X3N0cmVhbXA7Ci0jZW5kaWYKLQogLyogRGF0YSBibG9j ayB0eXBlcyAqLwogI2RlZmluZSBCTEtfREFUQSAxCiAjZGVmaW5lIEJMS19CTE9CUyAzCkBAIC0z MTksOCArMjk1LDcgQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAKIAljaGFyCSAgICpmU3BlYzsJ CQkvKiBBcmNoaXZlIEZpbGUgU3BlYyAqLwogCUZJTEUJICAgKkZIOwkJCQkvKiBHZW5lcmFsIHB1 cnBvc2UgZmlsZSBoYW5kbGUgKi8KLQl2b2lkCSAgICpPRjsKLQlpbnQJCQlnek91dDsJCQkvKiBP dXRwdXQgZmlsZSAqLworCXZvaWQJICAgKk9GOwkJCQkvKiBPdXRwdXQgZmlsZSAqLwogCiAJc3Ry dWN0IF90b2NFbnRyeSAqdG9jOwkJLyogSGVhZGVyIG9mIGNpcmN1bGFyIGxpc3Qgb2YgVE9DIGVu dHJpZXMgKi8KIAlpbnQJCQl0b2NDb3VudDsJCS8qIE51bWJlciBvZiBUT0MgZW50cmllcyAqLwpA QCAtMzMxLDE0ICszMDYsOCBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAlEdW1wSWQJICAgKnRh YmxlRGF0YUlkOwkvKiBUQUJMRSBEQVRBIGlkcywgaW5kZXhlZCBieSB0YWJsZSBkdW1wSWQgKi8K IAogCXN0cnVjdCBfdG9jRW50cnkgKmN1cnJUb2M7CS8qIFVzZWQgd2hlbiBkdW1waW5nIGRhdGEg Ki8KLQlpbnQJCQljb21wcmVzc2lvbjsJLyotLS0tLS0tLS0KLQkJCQkJCQkJICogQ29tcHJlc3Np b24gcmVxdWVzdGVkIG9uIG9wZW4oKS4KLQkJCQkJCQkJICogUG9zc2libGUgdmFsdWVzIGZvciBj b21wcmVzc2lvbjoKLQkJCQkJCQkJICogLTEJWl9ERUZBVUxUX0NPTVBSRVNTSU9OCi0JCQkJCQkJ CSAqICAwCUNPTVBSRVNTSU9OX05PTkUKLQkJCQkJCQkJICogMS05IGxldmVscyBmb3IgZ3ppcCBj b21wcmVzc2lvbgotCQkJCQkJCQkgKi0tLS0tLS0tLQotCQkJCQkJCQkgKi8KKwlwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWM7CS8qIFJlcXVlc3RlZCBzcGVjaWZpY2F0aW9u IGZvcgorCQkJCQkJCQkJCQkJICogY29tcHJlc3Npb24gKi8KIAlib29sCQlkb3N5bmM7CQkJLyog ZGF0YSByZXF1ZXN0ZWQgdG8gYmUgc3luY2VkIG9uIHNpZ2h0ICovCiAJQXJjaGl2ZU1vZGUgbW9k ZTsJCQkvKiBGaWxlIG1vZGUgLSByIG9yIHcgKi8KIAl2b2lkCSAgICpmb3JtYXREYXRhOwkJLyog SGVhZGVyIGRhdGEgc3BlY2lmaWMgdG8gZmlsZSBmb3JtYXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jCmluZGV4IGEwYTU1YTFlZGQuLjZhMjExMmM0NWYgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9jdXN0b20uYwpAQCAtMjk4LDcgKzI5OCw3IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlfV3JpdGVCeXRlKEFILCBCTEtfREFUQSk7CS8qIEJsb2Nr IHR5cGUgKi8KIAlXcml0ZUludChBSCwgdGUtPmR1bXBJZCk7CS8qIEZvciBzYW5pdHkgY2hlY2sg Ki8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uLCBfQ3Vz dG9tV3JpdGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVz c19zcGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTM3Nyw3ICszNzcsNyBAQCBf U3RhcnRCbG9iKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlX cml0ZUludChBSCwgb2lkKTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNv bXByZXNzaW9uLCBfQ3VzdG9tV3JpdGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVz c29yKEFILT5jb21wcmVzc19zcGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTU2 Niw3ICs1NjYsNyBAQCBfUHJpbnRUb2NEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAq dGUpCiBzdGF0aWMgdm9pZAogX1ByaW50RGF0YShBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlSZWFk RGF0YUZyb21BcmNoaXZlKEFILCBBSC0+Y29tcHJlc3Npb24sIF9DdXN0b21SZWFkRnVuYyk7CisJ UmVhZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgtPmNvbXByZXNzX3NwZWMsIF9DdXN0b21SZWFkRnVu Yyk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2RpcmVjdG9yeS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYwpp bmRleCA3OTgxODJiNmY3Li43ZDJjZGRiYjJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2RpcmVjdG9yeS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGly ZWN0b3J5LmMKQEAgLTMyNyw3ICszMjcsOCBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFI LCBUb2NFbnRyeSAqdGUpCiAKIAlzZXRGaWxlUGF0aChBSCwgZm5hbWUsIHRjdHgtPmZpbGVuYW1l KTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgQUgt PmNvbXByZXNzaW9uKTsKKwljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklO QVJZX1csCisJCQkJCQkJICAgQUgtPmNvbXByZXNzX3NwZWMpOwogCWlmIChjdHgtPmRhdGFGSCA9 PSBOVUxMKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsIGZuYW1lKTsKIH0KQEAgLTU3Myw2ICs1NzQsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVI YW5kbGUgKkFIKQogCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZVdyaXRlKQogCXsKIAkJY2ZwCQkg ICAqdG9jRkg7CisJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyA9IHsw fTsKIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKIAogCQlzZXRGaWxlUGF0aChBSCwgZm5hbWUs ICJ0b2MuZGF0Iik7CkBAIC01ODEsNyArNTgzLDggQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCkKIAkJY3R4LT5wc3RhdGUgPSBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFIKTsKIAogCQkv KiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVkIHVuY29tcHJlc3NlZCAqLwotCQl0b2NGSCA9IGNm b3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIDApOworCQljb21wcmVzc19zcGVjLmFsZ29y aXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJCXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1l LCBQR19CSU5BUllfVywgY29tcHJlc3Nfc3BlYyk7CiAJCWlmICh0b2NGSCA9PSBOVUxMKQogCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7 CiAJCWN0eC0+ZGF0YUZIID0gdG9jRkg7CkBAIC02MzksMTIgKzY0MiwxNCBAQCBzdGF0aWMgdm9p ZAogX1N0YXJ0QmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHsKIAlsY2xD b250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7MH07CiAJY2hhcgkJZm5hbWVbTUFYUEdQ QVRIXTsKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgImJsb2JzLnRvYyIpOwogCiAJLyogVGhl IGJsb2IgVE9DIGZpbGUgaXMgbmV2ZXIgY29tcHJlc3NlZCAqLwotCWN0eC0+YmxvYnNUb2NGSCA9 IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgMCk7CisJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0g PSBQR19DT01QUkVTU0lPTl9OT05FOworCWN0eC0+YmxvYnNUb2NGSCA9IGNmb3Blbl93cml0ZShm bmFtZSwgImFiIiwgY29tcHJlc3Nfc3BlYyk7CiAJaWYgKGN0eC0+YmxvYnNUb2NGSCA9PSBOVUxM KQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZu YW1lKTsKIH0KQEAgLTY2Miw3ICs2NjcsNyBAQCBfU3RhcnRCbG9iKEFyY2hpdmVIYW5kbGUgKkFI LCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlzbnByaW50ZihmbmFtZSwgTUFYUEdQQVRILCAi JXMvYmxvYl8ldS5kYXQiLCBjdHgtPmRpcmVjdG9yeSwgb2lkKTsKIAotCWN0eC0+ZGF0YUZIID0g Y2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgQUgtPmNvbXByZXNzaW9uKTsKKwljdHgt PmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc19z cGVjKTsKIAogCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQogCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rh ci5jCmluZGV4IDQwMmI5M2M2MTAuLmQ3NzNjMjkxYzggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAiY29t bW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImZl X3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgog I2luY2x1ZGUgInBnX2JhY2t1cF90YXIuaCIKQEAgLTE5NCw3ICsxOTUsNyBAQCBJbml0QXJjaGl2 ZUZtdF9UYXIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqIHBvc3NpYmxlIHNpbmNlIGd6ZG9wZW4g dXNlcyBidWZmZXJlZCBJTyB3aGljaCB0b3RhbGx5IHNjcmV3cyBmaWxlCiAJCSAqIHBvc2l0aW9u aW5nLgogCQkgKi8KLQkJaWYgKEFILT5jb21wcmVzc2lvbiAhPSAwKQorCQlpZiAoQUgtPmNvbXBy ZXNzX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCiAJCQlwZ19mYXRhbCgi Y29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3JtYXQiKTsKIAl9 CiAJZWxzZQpAQCAtMzI4LDcgKzMyOSw3IEBAIHRhck9wZW4oQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyIG1vZGUpCiAJCQl9CiAJCX0KIAotCQlpZiAoQUgtPmNv bXByZXNzaW9uID09IDApCisJCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fTk9ORSkKIAkJCXRtLT5uRkggPSBjdHgtPnRhckZIOwogCQllbHNlCiAJCQlw Z19mYXRhbCgiY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3Jt YXQiKTsKQEAgLTM4Myw3ICszODQsNyBAQCB0YXJPcGVuKEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpmaWxlbmFtZSwgY2hhciBtb2RlKQogCiAJCXVtYXNrKG9sZF91bWFzayk7CiAKLQkJ aWYgKEFILT5jb21wcmVzc2lvbiA9PSAwKQorCQlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCiAJCQl0bS0+bkZIID0gdG0tPnRtcEZIOwogCQll bHNlCiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJj aGl2ZSBmb3JtYXQiKTsKQEAgLTQwMSw3ICs0MDIsNyBAQCB0YXJPcGVuKEFyY2hpdmVIYW5kbGUg KkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciBtb2RlKQogc3RhdGljIHZvaWQKIHRhckNs b3NlKEFyY2hpdmVIYW5kbGUgKkFILCBUQVJfTUVNQkVSICp0aCkKIHsKLQlpZiAoQUgtPmNvbXBy ZXNzaW9uICE9IDApCisJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSAhPSBQR19DT01Q UkVTU0lPTl9OT05FKQogCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBi eSB0YXIgYXJjaGl2ZSBmb3JtYXQiKTsKIAogCWlmICh0aC0+bW9kZSA9PSAndycpCkBAIC04MDAs NyArODAxLDYgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJbWVtY3B5KHJv cHQsIEFILT5wdWJsaWMucm9wdCwgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CiAJCXJvcHQtPmZp bGVuYW1lID0gTlVMTDsKIAkJcm9wdC0+ZHJvcFNjaGVtYSA9IDE7Ci0JCXJvcHQtPmNvbXByZXNz aW9uID0gMDsKIAkJcm9wdC0+c3VwZXJ1c2VyID0gTlVMTDsKIAkJcm9wdC0+c3VwcHJlc3NEdW1w V2FybmluZ3MgPSB0cnVlOwogCkBAIC04ODgsNyArODg4LDcgQEAgX1N0YXJ0QmxvYihBcmNoaXZl SGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCWlmIChvaWQgPT0gMCkKIAkJcGdf ZmF0YWwoImludmFsaWQgT0lEIGZvciBsYXJnZSBvYmplY3QgKCV1KSIsIG9pZCk7CiAKLQlpZiAo QUgtPmNvbXByZXNzaW9uICE9IDApCisJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSAh PSBQR19DT01QUkVTU0lPTl9OT05FKQogCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gaXMgbm90IHN1 cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3JtYXQiKTsKIAogCXNwcmludGYoZm5hbWUsICJibG9i XyV1LmRhdCIsIG9pZCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBkYTQyN2Y0ZDRhLi5hOTdhMGYzYTg0IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKQEAgLTU0LDggKzU0LDEwIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXJfZC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZV9kLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbXByZXNzaW9uLmgiCiAj aW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgor I2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVk ZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0 aWxzLmgiCkBAIC0xNjQsNiArMTY2LDggQEAgc3RhdGljIHZvaWQgc2V0dXBfY29ubmVjdGlvbihB cmNoaXZlICpBSCwKIAkJCQkJCQkgY29uc3QgY2hhciAqZHVtcGVuY29kaW5nLCBjb25zdCBjaGFy ICpkdW1wc25hcHNob3QsCiAJCQkJCQkJIGNoYXIgKnVzZV9yb2xlKTsKIHN0YXRpYyBBcmNoaXZl Rm9ybWF0IHBhcnNlQXJjaGl2ZUZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIEFyY2hpdmVNb2Rl ICptb2RlKTsKK3N0YXRpYyBib29sIHBhcnNlX2NvbXByZXNzaW9uKGNvbnN0IGNoYXIgKm9wdCwK KwkJCQkJCQkgIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gKmNvbXByZXNzX3NwZWMpOwogc3Rh dGljIHZvaWQgZXhwYW5kX3NjaGVtYV9uYW1lX3BhdHRlcm5zKEFyY2hpdmUgKmZvdXQsCiAJCQkJ CQkJCQkJU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCQkJU2ltcGxlT2lkTGlz dCAqb2lkcywKQEAgLTM0MCw4ICszNDQsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAljb25zdCBjaGFyICpkdW1wc25hcHNob3QgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0g TlVMTDsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlpbnQJCQljb21wcmVzc0xldmVsID0gLTE7 CiAJaW50CQkJcGxhaW5UZXh0ID0gMDsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzX3NwZWMgPSB7MH07CisJYm9vbAkJdXNlcl9jb21wcmVzc2lvbl9kZWZpbmVkID0gZmFsc2U7 CiAJQXJjaGl2ZUZvcm1hdCBhcmNoaXZlRm9ybWF0ID0gYXJjaFVua25vd247CiAJQXJjaGl2ZU1v ZGUgYXJjaGl2ZU1vZGU7CiAKQEAgLTU2MSwxMCArNTY2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCWRvcHQuYWNsc1NraXAgPSB0cnVlOwogCQkJCWJyZWFrOwogCi0JCQlj YXNlICdaJzoJCQkvKiBDb21wcmVzc2lvbiBMZXZlbCAqLwotCQkJCWlmICghb3B0aW9uX3BhcnNl X2ludChvcHRhcmcsICItWi8tLWNvbXByZXNzIiwgMCwgOSwKLQkJCQkJCQkJCSAgJmNvbXByZXNz TGV2ZWwpKQorCQkJY2FzZSAnWic6CQkJLyogQ29tcHJlc3Npb24gKi8KKwkJCQlpZiAoIXBhcnNl X2NvbXByZXNzaW9uKG9wdGFyZywgJmNvbXByZXNzX3NwZWMpKQogCQkJCQlleGl0X25pY2VseSgx KTsKKwkJCQl1c2VyX2NvbXByZXNzaW9uX2RlZmluZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJ CQljYXNlIDA6CkBAIC02ODcsMjMgKzY5MiwyMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAlpZiAoYXJjaGl2ZUZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJcGxhaW5UZXh0ID0gMTsKIAot CS8qIEN1c3RvbSBhbmQgZGlyZWN0b3J5IGZvcm1hdHMgYXJlIGNvbXByZXNzZWQgYnkgZGVmYXVs dCwgb3RoZXJzIG5vdCAqLwotCWlmIChjb21wcmVzc0xldmVsID09IC0xKQorCS8qCisJICogQ3Vz dG9tIGFuZCBkaXJlY3RvcnkgZm9ybWF0cyBhcmUgY29tcHJlc3NlZCBieSBkZWZhdWx0ICh6bGli KSwgb3RoZXJzCisJICogbm90CisJICovCisJaWYgKHVzZXJfY29tcHJlc3Npb25fZGVmaW5lZCA9 PSBmYWxzZSkKIAl7CisJCXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRpb24oUEdfQ09NUFJFU1NJ T05fTk9ORSwgTlVMTCwgJmNvbXByZXNzX3NwZWMpOwogI2lmZGVmIEhBVkVfTElCWgogCQlpZiAo YXJjaGl2ZUZvcm1hdCA9PSBhcmNoQ3VzdG9tIHx8IGFyY2hpdmVGb3JtYXQgPT0gYXJjaERpcmVj dG9yeSkKLQkJCWNvbXByZXNzTGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047Ci0JCWVsc2UK KwkJCXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRpb24oUEdfQ09NUFJFU1NJT05fR1pJUCwgTlVM TCwKKwkJCQkJCQkJCQkgJmNvbXByZXNzX3NwZWMpOwogI2VuZGlmCi0JCQljb21wcmVzc0xldmVs ID0gMDsKIAl9CiAKLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNzTGV2ZWwgIT0gMCkK LQkJcGdfbG9nX3dhcm5pbmcoInJlcXVlc3RlZCBjb21wcmVzc2lvbiBub3QgYXZhaWxhYmxlIGlu IHRoaXMgaW5zdGFsbGF0aW9uIC0tIGFyY2hpdmUgd2lsbCBiZSB1bmNvbXByZXNzZWQiKTsKLQlj b21wcmVzc0xldmVsID0gMDsKLSNlbmRpZgotCiAJLyoKIAkgKiBJZiBlbWl0dGluZyBhbiBhcmNo aXZlIGZvcm1hdCwgd2UgYWx3YXlzIHdhbnQgdG8gZW1pdCBhIERBVEFCQVNFIGl0ZW0sCiAJICog aW4gY2FzZSAtLWNyZWF0ZSBpcyBzcGVjaWZpZWQgYXQgcGdfcmVzdG9yZSB0aW1lLgpAQCAtNzE2 LDggKzcxOCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlwZ19mYXRhbCgicGFy YWxsZWwgYmFja3VwIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBkaXJlY3RvcnkgZm9ybWF0Iik7CiAK IAkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLwotCWZvdXQgPSBDcmVhdGVBcmNoaXZlKGZpbGVu YW1lLCBhcmNoaXZlRm9ybWF0LCBjb21wcmVzc0xldmVsLCBkb3N5bmMsCi0JCQkJCQkgYXJjaGl2 ZU1vZGUsIHNldHVwRHVtcFdvcmtlcik7CisJZm91dCA9IENyZWF0ZUFyY2hpdmUoZmlsZW5hbWUs IGFyY2hpdmVGb3JtYXQsIGNvbXByZXNzX3NwZWMsCisJCQkJCQkgZG9zeW5jLCBhcmNoaXZlTW9k ZSwgc2V0dXBEdW1wV29ya2VyKTsKIAogCS8qIE1ha2UgZHVtcCBvcHRpb25zIGFjY2Vzc2libGUg cmlnaHQgYXdheSAqLwogCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCBOVUxMKTsKQEAg LTk0OCwxMCArOTUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJcm9wdC0+c2Vx dWVuY2VfZGF0YSA9IGRvcHQuc2VxdWVuY2VfZGF0YTsKIAlyb3B0LT5iaW5hcnlfdXBncmFkZSA9 IGRvcHQuYmluYXJ5X3VwZ3JhZGU7CiAKLQlpZiAoY29tcHJlc3NMZXZlbCA9PSAtMSkKLQkJcm9w dC0+Y29tcHJlc3Npb24gPSAwOwotCWVsc2UKLQkJcm9wdC0+Y29tcHJlc3Npb24gPSBjb21wcmVz c0xldmVsOworCXJvcHQtPmNvbXByZXNzX3NwZWMgPSBjb21wcmVzc19zcGVjOwogCiAJcm9wdC0+ c3VwcHJlc3NEdW1wV2FybmluZ3MgPSB0cnVlOwkvKiBXZSd2ZSBhbHJlYWR5IHNob3duIHRoZW0g Ki8KIApAQCAtOTk4LDcgKzk5Nyw4IEBAIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJp bnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFs bGVsIGpvYnMgdG8gZHVtcFxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAg ICAgICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAg ICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7 Ci0JcHJpbnRmKF8oIiAgLVosIC0tY29tcHJlc3M9MC05ICAgICAgICAgICBjb21wcmVzc2lvbiBs ZXZlbCBmb3IgY29tcHJlc3NlZCBmb3JtYXRzXG4iKSk7CisJcHJpbnRmKF8oIiAgLVosIC0tY29t cHJlc3M9TUVUSE9EWzpMRVZFTF1cbiIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbXByZXNzIGFzIHNwZWNpZmllZFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0 LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUg bG9ja1xuIikpOwogCXByaW50ZihfKCIgIC0tbm8tc3luYyAgICAgICAgICAgICAgICAgICAgZG8g bm90IHdhaXQgZm9yIGNoYW5nZXMgdG8gYmUgd3JpdHRlbiBzYWZlbHkgdG8gZGlza1xuIikpOwog CXByaW50ZihfKCIgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAs IHRoZW4gZXhpdFxuIikpOwpAQCAtMTI1OCw2ICsxMjU4LDYwIEBAIGdldF9zeW5jaHJvbml6ZWRf c25hcHNob3QoQXJjaGl2ZSAqZm91dCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogSW50 ZXJwcmV0cyBhbmQgdmFsaWRhdGVzIGEgY29tcHJlc3Npb24gb3B0aW9uIHVzaW5nIHRoZSBjb21t b24gY29tcHJlc3Npb24KKyAqIHBhcnNpbmcgZnVuY3Rpb25zLiBJZiB0aGUgcmVxdWVzdGVkIGNv bXByZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgdGhlbiB0aGUKKyAqIGFyY2hpdmVzIGFyZSB1bmNv bXByZXNzZWQuCisgKi8KK3N0YXRpYyBib29sCitwYXJzZV9jb21wcmVzc2lvbihjb25zdCBjaGFy ICpvcHQsIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gKmNvbXByZXNzX3NwZWMpCit7CisJY2hh cgkgICAqYWxnb3JpdGhtX3N0ciA9IE5VTEw7CisJY2hhcgkgICAqbGV2ZWxfc3RyID0gTlVMTDsK KwljaGFyCSAgICp2YWxpZGF0aW9uX2Vycm9yID0gTlVMTDsKKwlib29sCQlzdXBwb3J0c19jb21w cmVzc2lvbiA9IHRydWU7CisKKwljb21wcmVzc19zcGVjLT5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9OT05FOworCWNvbXByZXNzX3NwZWMtPmxldmVsID0gMDsKKworCXBhcnNlX2NvbXByZXNz X3VzZXJfb3B0aW9ucyhvcHQsICZhbGdvcml0aG1fc3RyLCAmbGV2ZWxfc3RyKTsKKwlpZiAoIXBh cnNlX2NvbXByZXNzX2FsZ29yaXRobShhbGdvcml0aG1fc3RyLCAmKGNvbXByZXNzX3NwZWMtPmFs Z29yaXRobSkpKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhv ZDogXCIlc1wiIChnemlwLCBub25lKSIsCisJCQkJCSBhbGdvcml0aG1fc3RyKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRpb24oY29tcHJlc3Nfc3Bl Yy0+YWxnb3JpdGhtLCBsZXZlbF9zdHIsCisJCQkJCQkJCSBjb21wcmVzc19zcGVjKTsKKwl2YWxp ZGF0aW9uX2Vycm9yID0gdmFsaWRhdGVfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbihjb21wcmVzc19z cGVjKTsKKwlpZiAodmFsaWRhdGlvbl9lcnJvcikKKwl7CisJCXBnX2xvZ19lcnJvcigiaW52YWxp ZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiAlcyIsIHZhbGlkYXRpb25fZXJyb3IpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJLyogU3dpdGNoIG9mZiB1bnN1cHBvcnRlZCBjb21wcmVzc2lv bnMgdGhhdCBtYWRlIGl0IHRocm91Z2ggcGFyc2luZyAqLworCWlmICh0ZXN0X2NvbXByZXNzX3N1 cHBvcnQoY29tcHJlc3Nfc3BlYykpCisJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CQor CisJLyogQWxzbyBzd2l0Y2ggb2ZmIHVuaW1wbGVtZW50ZWQgY29tcHJlc3Npb25zICovCisJaWYg KGNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FICYmCisJCWNv bXByZXNzX3NwZWMtPmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlzdXBwb3J0 c19jb21wcmVzc2lvbiA9IGZhbHNlOworCisJaWYgKCFzdXBwb3J0c19jb21wcmVzc2lvbikKKwl7 CisJCXBnX2xvZ193YXJuaW5nKCJyZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBp biB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7CisJ CXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRpb24oUEdfQ09NUFJFU1NJT05fTk9ORSwgTlVMTCwg Y29tcHJlc3Nfc3BlYyk7CisJfQorCisJcGdfZnJlZShhbGdvcml0aG1fc3RyKTsKKwlwZ19mcmVl KGxldmVsX3N0cik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIEFyY2hpdmVGb3JtYXQK IHBhcnNlQXJjaGl2ZUZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIEFyY2hpdmVNb2RlICptb2Rl KQogewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCmluZGV4IGE1ODNjOGE2ZDIuLmZmZmI5ZTA3NWIgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTEyMSwxMiArMTIxLDI3IEBAIGNvbW1hbmRfZmFpbHNf bGlrZSgKIAkncGdfcmVzdG9yZTogY2Fubm90IHNwZWNpZnkgYm90aCAtLXNpbmdsZS10cmFuc2Fj dGlvbiBhbmQgbXVsdGlwbGUgam9icycpOwogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdf ZHVtcCcsICctWicsICctMScgXSwKLQlxci9cUXBnX2R1bXA6IGVycm9yOiAtWlwvLS1jb21wcmVz cyBtdXN0IGJlIGluIHJhbmdlIDAuLjlcRS8sCi0JJ3BnX2R1bXA6IC1aLy0tY29tcHJlc3MgbXVz dCBiZSBpbiByYW5nZScpOworCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICdnYXJiYWdlJyBd LAorCXFyL1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kOiAiZ2Fy YmFnZSIgKGd6aXAsIG5vbmUpXEUvLAorCSdwZ19kdW1wOiBpbnZhbGlkIC0tY29tcHJlc3MnKTsK KworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICdub25l OjEnIF0sCisJcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZp Y2F0aW9uOiBjb21wcmVzc2lvbiBhbGdvcml0aG0gIm5vbmUiIGRvZXMgbm90IGFjY2VwdCBhIGNv bXByZXNzaW9uIGxldmVsXEUvLAorCSdwZ19kdW1wOiBpbnZhbGlkIGNvbXByZXNzaW9uIHNwZWNp ZmljYXRpb246IGNvbXByZXNzaW9uIGFsZ29yaXRobSAibm9uZSIgZG9lcyBub3QgYWNjZXB0IGEg Y29tcHJlc3Npb24gbGV2ZWwnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXAn LCAnLVonLCAnZ3ppcDpub25JbnQnIF0sCisJcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52YWxpZCBj b21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiB1bnJlY29nbml6ZWQgY29tcHJlc3Npb24gb3B0aW9u OiAibm9uSW50IlxFLywKKwkncGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0 aW9uOiBtdXN0IGJlIGFuIGludGVnZXInKTsKIAogaWYgKGNoZWNrX3BnX2NvbmZpZygiI2RlZmlu ZSBIQVZFX0xJQlogMSIpKQogeworCWNvbW1hbmRfZmFpbHNfbGlrZSgKKwkJWyAncGdfZHVtcCcs ICctWicsICcxNScgXSwKKwkJcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lv biBzcGVjaWZpY2F0aW9uOiBjb21wcmVzc2lvbiBhbGdvcml0aG0gImd6aXAiIGV4cGVjdHMgYSBj b21wcmVzc2lvbiBsZXZlbCBiZXR3ZWVuIDEgYW5kIDkgKGRlZmF1bHQgYXQgLTEpXEUvLAorCQkn cGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBtdXN0IGJlIGluIHJh bmdlJyk7CisKIAljb21tYW5kX2ZhaWxzX2xpa2UoCiAJCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVz cycsICcxJywgJy0tZm9ybWF0JywgJ3RhcicgXSwKIAkJcXIvXFFwZ19kdW1wOiBlcnJvcjogY29t cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBmb3JtYXRcRS8sCkBAIC0x MzQsNiArMTQ5LDExIEBAIGlmIChjaGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9MSUJaIDEi KSkKIH0KIGVsc2UKIHsKKwljb21tYW5kX2ZhaWxzX2xpa2UoCisJCVsgJ3BnX2R1bXAnLCAnLVon LCAnLTEnIF0sCisJCXFyL1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gc3Bl Y2lmaWNhdGlvbjogY29tcHJlc3Npb24gYWxnb3JpdGhtICJnemlwIiBleHBlY3RzIGEgY29tcHJl c3Npb24gbGV2ZWwgYmV0d2VlbiAxIGFuZCA5IChkZWZhdWx0IGF0IDApXEUvLAorCQkncGdfZHVt cDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBtdXN0IGJlIGluIHJhbmdlJyk7 CisKIAkjIC0tam9icyA+IDEgZm9yY2VzIGFuIGVycm9yIHdpdGggdGFyIGZvcm1hdC4KIAljb21t YW5kX2ZhaWxzX2xpa2UoCiAJCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICcxJywgJy0tZm9y bWF0JywgJ3RhcicsICctajMnIF0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJf cGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IDhkYzFm MGVjY2IuLmU5N2QwODY5NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19k dW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC04Nyw3ICs4 Nyw3IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJY29tcGlsZV9vcHRpb24gPT4gJ2d6aXAnLAog CQlkdW1wX2NtZCAgICAgICA9PiBbCiAJCQkncGdfZHVtcCcsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJy0tam9icz0yJywKLQkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAgICAgICAgICAg ICAgICAgICAnLS1jb21wcmVzcz0xJywKKwkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAgICAgICAg ICAgICAgICAgICAnLS1jb21wcmVzcz1nemlwOjEnLAogCQkJIi0tZmlsZT0kdGVtcGRpci9jb21w cmVzc2lvbl9nemlwX2RpciIsICdwb3N0Z3JlcycsCiAJCV0sCiAJCSMgR2l2ZSBjb3ZlcmFnZSBm b3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJpbmcKLS0gCjIuMzQuMQoK --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/x-patch; name=v8-0001-Export-gzip-program-to-pg_dump-tap-tests.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0001-Export-gzip-program-to-pg_dump-tap-tests.patch RnJvbSBmNTEyNWI0ZDRjYTViZmM3ZWY3ZjY4YjdkYmU0YTFjNzc3N2RlNmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjggTm92IDIwMjIgMTU6MDk6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4 IDEvNV0gRXhwb3J0IGd6aXAgcHJvZ3JhbSB0byBwZ19kdW1wIHRhcCB0ZXN0cwoKLS0tCiBzcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQgfCAzICsrKwogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0 aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBlNjZmNjMyYjU0Li42Y2ZmMmE2YzNkIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCkBAIC04OCw2ICs4OCw5IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwM19w Z19kdW1wX3dpdGhfc2VydmVyLnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nvbm5zdHIucGwnLAog ICAgIF0sCisgICAgJ2Vudic6IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKSwK KyAgICB9LAogICB9LAogfQogCi0tIAoyLjM0LjEKCg== --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/x-patch; name=v8-0002-Make-the-pg_receivewal-compression-parsing-functi.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0002-Make-the-pg_receivewal-compression-parsing-functi.patch RnJvbSBhNGNlNzIzZTY3MTllZDgwYzM2ZmQwYzRmZDg1Yzk2MmI2YjI1YTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjggTm92IDIwMjIgMTU6MTg6MjcgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4 IDIvNV0gTWFrZSB0aGUgcGdfcmVjZWl2ZXdhbCBjb21wcmVzc2lvbiBwYXJzaW5nIGZ1bmN0aW9u CiBjb21tb24KCkFsc28gYW5kIHJlbGF4IHBhcnNpbmcgZXJyb3JzIGluIHRoZSBoZWxwZXIgZnVu Y3Rpb25zIGFuZCByZS1pbnRyb2R1Y2UgdGhvc2UgYXMKYW4gaW5kZXBlbmRlZCBmdW5jdGlvbi4K CkFzIGl0IGlzIHNob3duIGluIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBzZXJpZXMsIHRoZXJlIGlz IGEgbG90IG9mIGR1cGxpY2F0aW9uCmJldHdlZW4gcGdfZHVtcCdzIHBhcnNpbmcgb2YgY29tcHJl c3Npb24gb3B0aW9ucyBhbmQgcGdfcmVjZWl2ZXdhbCdzLiBOb3cgdGhlCmNvcmUgd29yayBpcyBk b25lIGluIGNvbW1vbi4gSG93ZXZlciBwZ19kdW1wIHdvdWxkIG5vdCBlcnJvciBvdXQgaWYgdGhl CnJlcXVlc3RlZCBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUg YnVpbGQsIHdoZXJlYXMgb3RoZXIKY2FsbGVycyB3aWxsIGVycm9yIG91dC4gQWxzbyBpdCBzZWVt cyBhIGJpdCB3ZWlyZCBmb3Igb25seSBvbmUgb2YgdGhlIHBhcnNpbmcKZnVuY3Rpb25zIGZvciBj b21wcmVzc2lvbnMgdG8gZXJyb3Igb3V0IG9uIG1pc3Npbmcgc3VwcG9ydCBhbmQgdGhhdCBvbmUg dG8gbm90CmJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGlkZW50aWZ5aW5nIHRoZSBjb21wcmVz c2lvbiBhbGdvcml0aG0uCgpBIG5ldyBmdW5jdGlvbiBpcyBhZGRlZCB0byB0ZXN0IHRoZSBzdXBw b3J0IG9mIHRoZSBhbGdvcml0aG0gYWxsb3dpbmcgdGhlIHVzZXIKdG8gdHVuZSB0aGUgYmVoYXZp b3VyLgotLS0KIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMgICAgICAgfCAgIDEgKwog c3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYyB8ICAgMSArCiBzcmMvYmluL3Bn X2Jhc2ViYWNrdXAvcGdfcmVjZWl2ZXdhbC5jIHwgIDY1ICstLS0tLS0tLS0tLS0tCiBzcmMvY29t bW9uL2NvbXByZXNzaW9uLmMgICAgICAgICAgICAgIHwgMTE5ICsrKysrKysrKysrKysrKysrKysr KystLS0tCiBzcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICAzICsKIDUg ZmlsZXMgY2hhbmdlZCwgMTExIGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9iYWNr dXAvYmFzZWJhY2t1cC5jCmluZGV4IDc0ZmI1MjkzODAuLjcwY2Q3MjA4MjMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3Vw L2Jhc2ViYWNrdXAuYwpAQCAtOTQyLDYgKzk0Miw3IEBAIHBhcnNlX2Jhc2ViYWNrdXBfb3B0aW9u cyhMaXN0ICpvcHRpb25zLCBiYXNlYmFja3VwX29wdGlvbnMgKm9wdCkKIAogCQlwYXJzZV9jb21w cmVzc19zcGVjaWZpY2F0aW9uKG9wdC0+Y29tcHJlc3Npb24sIGNvbXByZXNzaW9uX2RldGFpbF9z dHIsCiAJCQkJCQkJCQkgJm9wdC0+Y29tcHJlc3Npb25fc3BlY2lmaWNhdGlvbik7CisJCSh2b2lk KSB0ZXN0X2NvbXByZXNzX3N1cHBvcnQoJm9wdC0+Y29tcHJlc3Npb25fc3BlY2lmaWNhdGlvbik7 CiAJCWVycm9yX2RldGFpbCA9CiAJCQl2YWxpZGF0ZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKCZv cHQtPmNvbXByZXNzaW9uX3NwZWNpZmljYXRpb24pOwogCQlpZiAoZXJyb3JfZGV0YWlsICE9IE5V TEwpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jIGIv c3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYwppbmRleCAyMjgzNmNhMDFhLi5j ZGQzMmM5NzYzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1 cC5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMKQEAgLTI1NTYs NiArMjU1Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgY29tcHJlc3Np b25fYWxnb3JpdGhtKTsKIAogCQlwYXJzZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKGFsZywgY29t cHJlc3Npb25fZGV0YWlsLCAmY2xpZW50X2NvbXByZXNzKTsKKwkJKHZvaWQpIHRlc3RfY29tcHJl c3Nfc3VwcG9ydCgmY2xpZW50X2NvbXByZXNzKTsKIAkJZXJyb3JfZGV0YWlsID0gdmFsaWRhdGVf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbigmY2xpZW50X2NvbXByZXNzKTsKIAkJaWYgKGVycm9yX2Rl dGFpbCAhPSBOVUxMKQogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gc3BlY2lmaWNh dGlvbjogJXMiLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3JlY2VpdmV3 YWwuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19yZWNlaXZld2FsLmMKaW5kZXggNjMyMDdj YTAyNS4uZDRhM2E0MjEzZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3Jl Y2VpdmV3YWwuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfcmVjZWl2ZXdhbC5jCkBA IC01Nyw4ICs1Nyw2IEBAIHN0YXRpYyBYTG9nUmVjUHRyIGVuZHBvcyA9IEludmFsaWRYTG9nUmVj UHRyOwogCiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwotc3RhdGljIHZvaWQgcGFyc2VfY29t cHJlc3Nfb3B0aW9ucyhjaGFyICpvcHRpb24sIGNoYXIgKiphbGdvcml0aG0sCi0JCQkJCQkJCSAg IGNoYXIgKipkZXRhaWwpOwogc3RhdGljIERJUiAqZ2V0X2Rlc3RpbmF0aW9uX2RpcihjaGFyICpk ZXN0X2ZvbGRlcik7CiBzdGF0aWMgdm9pZCBjbG9zZV9kZXN0aW5hdGlvbl9kaXIoRElSICpkZXN0 X2RpciwgY2hhciAqZGVzdF9mb2xkZXIpOwogc3RhdGljIFhMb2dSZWNQdHIgRmluZFN0cmVhbWlu Z1N0YXJ0KHVpbnQzMiAqdGxpKTsKQEAgLTEwOSw2NSArMTA3LDYgQEAgdXNhZ2Uodm9pZCkKIAlw cmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VS TCk7CiB9CiAKLS8qCi0gKiBCYXNpYyBwYXJzaW5nIG9mIGEgdmFsdWUgc3BlY2lmaWVkIGZvciAt Wi8tLWNvbXByZXNzCi0gKgotICogVGhlIHBhcnNpbmcgY29uc2lzdHMgb2YgYSBNRVRIT0Q6REVU QUlMIHN0cmluZyBmZWQgbGF0ZXIgb24gdG8gYSBtb3JlCi0gKiBhZHZhbmNlZCByb3V0aW5lIGlu IGNoYXJnZSBvZiBwcm9wZXIgdmFsaWRhdGlvbiBjaGVja3MuICBUaGlzIG9ubHkgZXh0cmFjdHMK LSAqIE1FVEhPRCBhbmQgREVUQUlMLiAgSWYgb25seSBhbiBpbnRlZ2VyIGlzIGZvdW5kLCB0aGUg bWV0aG9kIGlzIGltcGxpZWQgYnkKLSAqIHRoZSB2YWx1ZSBzcGVjaWZpZWQuCi0gKi8KLXN0YXRp YyB2b2lkCi1wYXJzZV9jb21wcmVzc19vcHRpb25zKGNoYXIgKm9wdGlvbiwgY2hhciAqKmFsZ29y aXRobSwgY2hhciAqKmRldGFpbCkKLXsKLQljaGFyCSAgICpzZXA7Ci0JY2hhcgkgICAqZW5kcDsK LQlsb25nCQlyZXN1bHQ7Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbXByZXNzaW9u IHNwZWNpZmljYXRpb24gY29uc2lzdHMgb2YgYSBiYXJlIGludGVnZXIuCi0JICoKLQkgKiBGb3Ig YmFja3dhcmQtY29tcGF0aWJpbGl0eSwgYXNzdW1lICJub25lIiBpZiB0aGUgaW50ZWdlciBmb3Vu ZCBpcyB6ZXJvCi0JICogYW5kICJnemlwIiBvdGhlcndpc2UuCi0JICovCi0JcmVzdWx0ID0gc3Ry dG9sKG9wdGlvbiwgJmVuZHAsIDEwKTsKLQlpZiAoKmVuZHAgPT0gJ1wwJykKLQl7Ci0JCWlmIChy ZXN1bHQgPT0gMCkKLQkJewotCQkJKmFsZ29yaXRobSA9IHBzdHJkdXAoIm5vbmUiKTsKLQkJCSpk ZXRhaWwgPSBOVUxMOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJKmFsZ29yaXRobSA9IHBzdHJkdXAo Imd6aXAiKTsKLQkJCSpkZXRhaWwgPSBwc3RyZHVwKG9wdGlvbik7Ci0JCX0KLQkJcmV0dXJuOwot CX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGNvbXByZXNzaW9uIGRldGFp bCBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobQotCSAqIG5hbWUuCi0JICovCi0Jc2VwID0gc3RyY2hy KG9wdGlvbiwgJzonKTsKLQlpZiAoc2VwID09IE5VTEwpCi0JewotCQkqYWxnb3JpdGhtID0gcHN0 cmR1cChvcHRpb24pOwotCQkqZGV0YWlsID0gTlVMTDsKLQl9Ci0JZWxzZQotCXsKLQkJY2hhcgkg ICAqYWxnOwotCi0JCWFsZyA9IHBhbGxvYygoc2VwIC0gb3B0aW9uKSArIDEpOwotCQltZW1jcHko YWxnLCBvcHRpb24sIHNlcCAtIG9wdGlvbik7Ci0JCWFsZ1tzZXAgLSBvcHRpb25dID0gJ1wwJzsK LQotCQkqYWxnb3JpdGhtID0gYWxnOwotCQkqZGV0YWlsID0gcHN0cmR1cChzZXAgKyAxKTsKLQl9 Ci19CiAKIC8qCiAgKiBDaGVjayBpZiB0aGUgZmlsZW5hbWUgbG9va3MgbGlrZSBhIFdBTCBmaWxl LCBsZXR0aW5nIGNhbGxlciBrbm93IGlmIHRoaXMKQEAgLTc4Niw4ICs3MjUsOCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQl2ZXJib3NlKys7CiAJCQkJYnJlYWs7CiAJCQljYXNl ICdaJzoKLQkJCQlwYXJzZV9jb21wcmVzc19vcHRpb25zKG9wdGFyZywgJmNvbXByZXNzaW9uX2Fs Z29yaXRobV9zdHIsCi0JCQkJCQkJCQkgICAmY29tcHJlc3Npb25fZGV0YWlsKTsKKwkJCQlwYXJz ZV9jb21wcmVzc191c2VyX29wdGlvbnMob3B0YXJnLCAmY29tcHJlc3Npb25fYWxnb3JpdGhtX3N0 ciwKKwkJCQkJCQkJCQkJJmNvbXByZXNzaW9uX2RldGFpbCk7CiAJCQkJYnJlYWs7CiAvKiBhY3Rp b24gKi8KIAkJCWNhc2UgMToKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vY29tcHJlc3Npb24uYyBi L3NyYy9jb21tb24vY29tcHJlc3Npb24uYwppbmRleCBkZjViNjI3ODM0Li41N2MyMzIyMWEyIDEw MDY0NAotLS0gYS9zcmMvY29tbW9uL2NvbXByZXNzaW9uLmMKKysrIGIvc3JjL2NvbW1vbi9jb21w cmVzc2lvbi5jCkBAIC0zOSw2ICszOSw2NiBAQAogc3RhdGljIGludAlleHBlY3RfaW50ZWdlcl92 YWx1ZShjaGFyICprZXl3b3JkLCBjaGFyICp2YWx1ZSwKIAkJCQkJCQkJIHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gKnJlc3VsdCk7CiAKKy8qCisgKiBCYXNpYyBwYXJzaW5nIG9mIGEgdmFsdWUg c3BlY2lmaWVkIGZvciAtWi8tLWNvbXByZXNzCisgKgorICogVGhlIHBhcnNpbmcgY29uc2lzdHMg b2YgYSBNRVRIT0Q6REVUQUlMIHN0cmluZyBmZWQgbGF0ZXIgb24gdG8gYSBtb3JlCisgKiBhZHZh bmNlZCByb3V0aW5lIGluIGNoYXJnZSBvZiBwcm9wZXIgdmFsaWRhdGlvbiBjaGVja3MuICBUaGlz IG9ubHkgZXh0cmFjdHMKKyAqIE1FVEhPRCBhbmQgREVUQUlMLiAgSWYgb25seSBhbiBpbnRlZ2Vy IGlzIGZvdW5kLCB0aGUgbWV0aG9kIGlzIGltcGxpZWQgYnkKKyAqIHRoZSB2YWx1ZSBzcGVjaWZp ZWQuCisgKi8KK3ZvaWQKK3BhcnNlX2NvbXByZXNzX3VzZXJfb3B0aW9ucyhjb25zdCBjaGFyICpv cHRpb24sIGNoYXIgKiphbGdvcml0aG0sIGNoYXIgKipkZXRhaWwpCit7CisJY2hhcgkgICAqc2Vw OworCWNoYXIJICAgKmVuZHA7CisJbG9uZwkJcmVzdWx0OworCisJLyoKKwkgKiBDaGVjayB3aGV0 aGVyIHRoZSBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uIGNvbnNpc3RzIG9mIGEgYmFyZSBpbnRl Z2VyLgorCSAqCisJICogRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHksIGFzc3VtZSAibm9uZSIg aWYgdGhlIGludGVnZXIgZm91bmQgaXMgemVybworCSAqIGFuZCAiZ3ppcCIgb3RoZXJ3aXNlLgor CSAqLworCXJlc3VsdCA9IHN0cnRvbChvcHRpb24sICZlbmRwLCAxMCk7CisJaWYgKCplbmRwID09 ICdcMCcpCisJeworCQlpZiAocmVzdWx0ID09IDApCisJCXsKKwkJCSphbGdvcml0aG0gPSBwc3Ry ZHVwKCJub25lIik7CisJCQkqZGV0YWlsID0gTlVMTDsKKwkJfQorCQllbHNlCisJCXsKKwkJCSph bGdvcml0aG0gPSBwc3RyZHVwKCJnemlwIik7CisJCQkqZGV0YWlsID0gcHN0cmR1cChvcHRpb24p OworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMg YSBjb21wcmVzc2lvbiBkZXRhaWwgZm9sbG93aW5nIHRoZSBhbGdvcml0aG0KKwkgKiBuYW1lLgor CSAqLworCXNlcCA9IHN0cmNocihvcHRpb24sICc6Jyk7CisJaWYgKHNlcCA9PSBOVUxMKQorCXsK KwkJKmFsZ29yaXRobSA9IHBzdHJkdXAob3B0aW9uKTsKKwkJKmRldGFpbCA9IE5VTEw7CisJfQor CWVsc2UKKwl7CisJCWNoYXIJICAgKmFsZzsKKworCQlhbGcgPSBwYWxsb2MoKHNlcCAtIG9wdGlv bikgKyAxKTsKKwkJbWVtY3B5KGFsZywgb3B0aW9uLCBzZXAgLSBvcHRpb24pOworCQlhbGdbc2Vw IC0gb3B0aW9uXSA9ICdcMCc7CisKKwkJKmFsZ29yaXRobSA9IGFsZzsKKwkJKmRldGFpbCA9IHBz dHJkdXAoc2VwICsgMSk7CisJfQorfQorCiAvKgogICogTG9vayB1cCBhIGNvbXByZXNzaW9uIGFs Z29yaXRobSBieSBuYW1lLiBSZXR1cm5zIHRydWUgYW5kIHNldHMgKmFsZ29yaXRobQogICogaWYg dGhlIG5hbWUgaXMgcmVjb2duaXplZC4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCkBAIC0xMDAs NiArMTYwLDkgQEAgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKHBnX2NvbXByZXNzX2FsZ29y aXRobSBhbGdvcml0aG0pCiAgKgogICogVXNlIHZhbGlkYXRlX2NvbXByZXNzX3NwZWNpZmljYXRp b24oKSB0byBmaW5kIG91dCB3aGV0aGVyIGEgY29tcHJlc3Npb24KICAqIHNwZWNpZmljYXRpb24g aXMgc2VtYW50aWNhbGx5IHNlbnNpYmxlLgorICoKKyAqIERvZXMgbm90IHRlc3Qgd2hldGhlciB0 aGlzIGJ1aWxkIG9mIFBvc3RncmVTUUwgc3VwcG9ydHMgdGhlIHJlcXVlc3RlZAorICogY29tcHJl c3Npb24gbWV0aG9kLgogICovCiB2b2lkCiBwYXJzZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKHBn X2NvbXByZXNzX2FsZ29yaXRobSBhbGdvcml0aG0sIGNoYXIgKnNwZWNpZmljYXRpb24sCkBAIC0x MjMsMzAgKzE4NiwxNiBAQCBwYXJzZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKHBnX2NvbXByZXNz X2FsZ29yaXRobSBhbGdvcml0aG0sIGNoYXIgKnNwZWNpZmljYXRpbwogCQkJcmVzdWx0LT5sZXZl bCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0jaWZkZWYgVVNF X0xaNAogCQkJcmVzdWx0LT5sZXZlbCA9IDA7CS8qIGZhc3QgY29tcHJlc3Npb24gbW9kZSAqLwot I2Vsc2UKLQkJCXJlc3VsdC0+cGFyc2VfZXJyb3IgPQotCQkJCXBzcHJpbnRmKF8oInRoaXMgYnVp bGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiksCi0JCQkJCQkgIkxaNCIp OwotI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgogI2lmZGVm IFVTRV9aU1RECiAJCQlyZXN1bHQtPmxldmVsID0gWlNURF9DTEVWRUxfREVGQVVMVDsKLSNlbHNl Ci0JCQlyZXN1bHQtPnBhcnNlX2Vycm9yID0KLQkJCQlwc3ByaW50ZihfKCJ0aGlzIGJ1aWxkIGRv ZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIpLAotCQkJCQkJICJaU1REIik7CiAj ZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFW RV9MSUJaCiAJCQlyZXN1bHQtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotI2Vsc2UK LQkJCXJlc3VsdC0+cGFyc2VfZXJyb3IgPQotCQkJCXBzcHJpbnRmKF8oInRoaXMgYnVpbGQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiksCi0JCQkJCQkgImd6aXAiKTsKICNl bmRpZgogCQkJYnJlYWs7CiAJfQpAQCAtMjY1LDcgKzMxNCw4IEBAIHBhcnNlX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24ocGdfY29tcHJlc3NfYWxnb3JpdGhtIGFsZ29yaXRobSwgY2hhciAqc3BlY2lm aWNhdGlvCiAgKiBhbmQgcmV0dXJuIC0xLgogICovCiBzdGF0aWMgaW50Ci1leHBlY3RfaW50ZWdl cl92YWx1ZShjaGFyICprZXl3b3JkLCBjaGFyICp2YWx1ZSwgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiAqcmVzdWx0KQorZXhwZWN0X2ludGVnZXJfdmFsdWUoY2hhciAqa2V5d29yZCwgY2hhciAq dmFsdWUsCisJCQkJCSBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uICpyZXN1bHQpCiB7CiAJaW50 CQkJaXZhbHVlOwogCWNoYXIJICAgKml2YWx1ZV9lbmRwOwpAQCAtMzU2LDMgKzQwNiw0MiBAQCB2 YWxpZGF0ZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g KnNwZWMpCiAKIAlyZXR1cm4gTlVMTDsKIH0KKworLyoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUg Y29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkLgorICogT3Ro ZXJ3aXNlLCByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UuIEluIHRoZSBsYXRlciBjYXNlLCB0aGUg ZXJyb3IgaXMgYXR0YWNoZWQKKyAqIHRvIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gdW5sZXNz IGFub3RoZXIgZXJyb3IgcHJlY2VlZHMgaXQuCisgKi8KK2NoYXIgKgordGVzdF9jb21wcmVzc19z dXBwb3J0KHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gKnNwZWMpCit7CisJY2hhciAqZXJyID0g TlVMTDsKKwlzd2l0Y2ggKHNwZWMtPmFsZ29yaXRobSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTk9ORToKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisjaWZuZGVm IEhBVkVfTElCWgorCQkJZXJyID0gcHNwcmludGYoXygidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBw b3J0IGNvbXByZXNzaW9uIHdpdGggJXMiKSwKKwkJCQkJCQkgImd6aXAiKTsKKyNlbmRpZgorCQkJ YnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorI2lmbmRlZiBVU0VfTFo0CisJCQll cnIgPSBwc3ByaW50ZihfKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24g d2l0aCAlcyIpLAorCQkJCQkJCSAiTFo0Iik7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFBH X0NPTVBSRVNTSU9OX1pTVEQ6CisjaWZuZGVmIFVTRV9aU1RECisJCQllcnIgPSBwc3ByaW50Zihf KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIpLAorCQkJ CQkJCSAiWlNURCIpOworI2VuZGlmCisJCQlicmVhazsKKwl9CisKKwlpZiAoZXJyICYmICFzcGVj LT5wYXJzZV9lcnJvcikKKwkJc3BlYy0+cGFyc2VfZXJyb3IgPSBlcnI7CisKKwlyZXR1cm4gZXJy OworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggYi9zcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAppbmRleCA1ZDY4MDA1OGVkLi5lYjMwYTdiNTQ3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAorKysgYi9zcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaApAQCAtMzMsNiArMzMsOCBAQCB0eXBlZGVmIHN0 cnVjdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uCiAJY2hhcgkgICAqcGFyc2VfZXJyb3I7CS8q IE5VTEwgaWYgcGFyc2luZyB3YXMgT0ssIGVsc2UgbWVzc2FnZSAqLwogfSBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uOwogCitleHRlcm4gdm9pZCBwYXJzZV9jb21wcmVzc191c2VyX29wdGlvbnMo Y29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICoqYWxnb3JpdGhtLAorCQkJCQkJCQkJCWNoYXIgKipk ZXRhaWwpOwogZXh0ZXJuIGJvb2wgcGFyc2VfY29tcHJlc3NfYWxnb3JpdGhtKGNoYXIgKm5hbWUs IHBnX2NvbXByZXNzX2FsZ29yaXRobSAqYWxnb3JpdGhtKTsKIGV4dGVybiBjb25zdCBjaGFyICpn ZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUocGdfY29tcHJlc3NfYWxnb3JpdGhtIGFsZ29yaXRo bSk7CiAKQEAgLTQwLDYgKzQyLDcgQEAgZXh0ZXJuIHZvaWQgcGFyc2VfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbihwZ19jb21wcmVzc19hbGdvcml0aG0gYWxnb3JpdGhtLAogCQkJCQkJCQkJCSBjaGFy ICpzcGVjaWZpY2F0aW9uLAogCQkJCQkJCQkJCSBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uICpy ZXN1bHQpOwogCitleHRlcm4gY2hhciAqdGVzdF9jb21wcmVzc19zdXBwb3J0KHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gKik7CiBleHRlcm4gY2hhciAqdmFsaWRhdGVfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbihwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uICopOwogCiAjZW5kaWYKLS0gCjIuMzQu MQoK --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/x-patch; name=v8-0004-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0004-Introduce-Compressor-API-in-pg_dump.patch RnJvbSBiMWZkNDAyYzYxMDhhYzg4ZjcwNWM3YmViYzc1MzMzOTgzNjI1MjIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjggTm92IDIwMjIgMTU6MzU6MTkgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4 IDQvNV0gSW50cm9kdWNlIENvbXByZXNzb3IgQVBJIGluIHBnX2R1bXAKClRoZSBwdXJwb3NlIG9m IHRoaXMgQVBJIGlzIHRvIGFsbG93IGZvciBlYXNpZXIgYWRkaXRpb24gb2YgbmV3IGNvbXByZXNz aW9uCm1ldGhvZHMuIENvbXByZXNzRmlsZUhhbmRsZSBpcyBzdWJzdGl0dXRpbmcgdGhlIGNmcCog ZmFtaWx5IG9mIGZ1bmN0aW9ucyB1bmRlciBhCnN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBm b3Igb3BlbmluZywgd3JpdGluZywgZXRjLiBUaGUgaW1wbGVtZW50b3Igb2YgYSBuZXcKY29tcHJl c3Npb24gbWV0aG9kIGlzIG5vdyBhYmxlIHRvICJzaW1wbHkiIGp1c3QgYWRkIHRob3NlIGRlZmlu aXRpb25zLgoKQ3VzdG9tIGNvbXByZXNzZWQgYXJjaGl2ZXMgbmVlZCB0byBub3cgc3RvcmUgdGhl IGNvbXByZXNzaW9uIG1ldGhvZCBpbiB0aGVpcgpoZWFkZXIuIFRoaXMgcmVxdWlyZXMgYSBidW1w IGluIHRoZSB2ZXJzaW9uIG51bWJlci4gVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uCmlzIG5vIGxv bmdlciBzdG9yZWQgaW4gdGhlIGR1bXAgYXMgaXQgaXMgaXJyZWxldmFudC4KLS0tCiBzcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMgICAgICAgfCAzOTAgKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5oICAgICAgIHwgICA5ICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5jICAgICAgICAgfCA4MTcgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5oICAgICAgICAgfCAgNjkgKystCiBzcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyAgfCAgOTMgKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgg IHwgICA0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwgIDIzICst CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDg1ICstLQogMTAgZmls ZXMgY2hhbmdlZCwgNzY1IGluc2VydGlvbnMoKyksIDcyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaAoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA5ZGM1 YTc4NGRkLi4yOWVhYjAyZDM3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIExERkxBR1Nf SU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQo bGlicHFfcGdwb3J0KQogCiBPQkpTID0gXAogCSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlw Lm8gXAogCWNvbXByZXNzX2lvLm8gXAogCWR1bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfZ3ppcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmJjNmQxYWJjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf Z3ppcC5jCkBAIC0wLDAgKzEsMzkwIEBACisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNs dWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKKwor I2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgInpsaWIuaCIKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0 eXBlZGVmIHN0cnVjdCBHemlwQ29tcHJlc3NvclN0YXRlCit7CisJaW50CQkJY29tcHJlc3Npb25M ZXZlbDsKKwl6X3N0cmVhbXAJenA7CisKKwl2b2lkCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRz aXplOworfQkJCUd6aXBDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhh dCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK0RlZmxh dGVDb21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywg Ym9vbCBmbHVzaCkKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXBy ZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZTsKKwl6X3N0cmVhbXAJenAgPSBnemlwY3MtPnpwOwor CXZvaWQJICAgKm91dCA9IGd6aXBjcy0+b3V0YnVmOworCWludAkJCXJlcyA9IFpfT0s7CisKKwl3 aGlsZSAoZ3ppcGNzLT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVzaCkKKwl7CisJCXJlcyA9IGRl ZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKKwkJaWYgKHJlcyA9PSBa X1NUUkVBTV9FUlJPUikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMi LCB6cC0+bXNnKTsKKwkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0 c2l6ZSkpCisJCQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQorCQkJfHwgKHpwLT5hdmFpbF9pbiAh PSAwKQorCQkJKQorCQl7CisJCQkvKgorCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8t bGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxlbmd0aAorCQkJICogY2h1bmsgaXMgdGhlIEVP RiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCisJCQkgKiBo YXBwZW4gYnV0Li4uCisJCQkgKi8KKwkJCWlmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRz aXplKQorCQkJeworCQkJCS8qCisJCQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBp dHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bworCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNo ZWNrIGhlcmUgYXMgd2VsbC4uLgorCQkJCSAqLworCQkJCXNpemVfdAkJbGVuID0gZ3ppcGNzLT5v dXRzaXplIC0genAtPmF2YWlsX291dDsKKworCQkJCWNzLT53cml0ZUYoQUgsIChjaGFyICopIG91 dCwgbGVuKTsKKwkJCX0KKwkJCXpwLT5uZXh0X291dCA9IG91dDsKKwkJCXpwLT5hdmFpbF9vdXQg PSBnemlwY3MtPm91dHNpemU7CisJCX0KKworCQlpZiAocmVzID09IFpfU1RSRUFNX0VORCkKKwkJ CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JHemlwKEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUg Kmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOworCXpfc3RyZWFt cAl6cDsKKworCWlmIChnemlwY3MtPnpwKQorCXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+ bmV4dF9pbiA9IE5VTEw7CisJCXpwLT5hdmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJl bWFpbmluZyBkYXRhIGZyb20gemxpYiBidWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlw KEFILCBjcywgdHJ1ZSk7CisKKwkJaWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19m YXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsK KworCQlwZ19mcmVlKGd6aXBjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9 CisKKwlwZ19mcmVlKGd6aXBjcyk7CisJY3MtPnByaXZhdGUgPSBOVUxMOworfQorCitzdGF0aWMg dm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCit7CisJ R3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3Mt PnByaXZhdGU7CisJel9zdHJlYW1wCXpwOworCisJaWYgKCFnemlwY3MtPnpwKQorCXsKKwkJenAg PSBnemlwY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOwor CQl6cC0+emFsbG9jID0gWl9OVUxMOworCQl6cC0+emZyZWUgPSBaX05VTEw7CisJCXpwLT5vcGFx dWUgPSBaX05VTEw7CisKKwkJLyoKKwkJICogb3V0c2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2Ug dGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQorCQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBv bmUgZXh0cmEgYnl0ZSBiZWNhdXNlIHNvbWUgcm91dGluZXMgd2FudCB0bworCQkgKiBhcHBlbmQg YSB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgorCQkgKi8KKwkJZ3ppcGNz LT5vdXRidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCQlnemlwY3MtPm91dHNp emUgPSBaTElCX09VVF9TSVpFOworCisJCWlmIChkZWZsYXRlSW5pdCh6cCwgZ3ppcGNzLT5jb21w cmVzc2lvbkxldmVsKSAhPSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXpl IGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJh bm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8K KwkJenAtPm5leHRfb3V0ID0gZ3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlw Y3MtPm91dHNpemU7CisJfQorCisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29u c3RpZnkodm9pZCAqLCBkYXRhKTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVm bGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVh ZERhdGFGcm9tQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpCit7CisJel9zdHJlYW1wCXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09L OworCXNpemVfdAkJY250OworCWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpw ID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2Mg PSBaX05VTEw7CisJenAtPnpmcmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisK KwlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7 CisKKwlvdXQgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJ bml0KHpwKSAhPSBaX09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJl c3Npb24gbGlicmFyeTogJXMiLAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1 bmsgc2l6ZSBmb3IgemxpYiAqLworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAm YnVmbGVuKSkpCisJeworCQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWls X2luID0gY250OworCisJCXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4 dF9vdXQgPSAodm9pZCAqKSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsK KworCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9 IFpfU1RSRUFNX0VORCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTog JXMiLCB6cC0+bXNnKTsKKworCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9 ICdcMCc7CisJCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQs IEFIKTsKKwkJfQorCX0KKworCXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAw OworCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZv aWQgKikgb3V0OworCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5m bGF0ZSh6cCwgMCk7CisJCWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisK KwkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUo b3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChp bmZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXBy ZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQp OworCWZyZWUoenApOworfQorCisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAg Y29tcHJlc3NlZCBkYXRhIEkvTyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNz b3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKQoreworCUd6aXBDb21wcmVzc29yU3Rh dGUgKmd6aXBjczsKKworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVHemlwOwor CWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVHemlwOworCWNzLT5lbmQgPSBFbmRD b21wcmVzc29yR3ppcDsKKworCWd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBnX21h bGxvYzAoc2l6ZW9mKEd6aXBDb21wcmVzc29yU3RhdGUpKTsKKwlnemlwY3MtPmNvbXByZXNzaW9u TGV2ZWwgPSBjb21wcmVzc2lvbkxldmVsOworCisJY3MtPnByaXZhdGUgPSBnemlwY3M7Cit9CisK KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR3ppcERhdGEKK3sKKwln ekZpbGUJCWZwOworCWludAkJCWNvbXByZXNzaW9uTGV2ZWw7Cit9CQkJR3ppcERhdGE7CisKK3N0 YXRpYyBzaXplX3QKK0d6aXBfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKiBDRkgpCit7CisJR3ppcERhdGEgICAqZ2QgPSAoR3ppcERhdGEgKikgQ0ZILT5w cml2YXRlOworCXNpemVfdAkJcmV0OworCisJcmV0ID0gZ3pyZWFkKGdkLT5mcCwgcHRyLCBzaXpl KTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGdkLT5mcCkpCisJeworCQlpbnQJCQllcnJu dW07CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZ2QtPmZwLCAmZXJybnVtKTsKKwor CQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVy cm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpn ZCA9IChHemlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZ3p3cml0ZShnZC0+ZnAs IHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVIYW5k bGUgKiBDRkgpCit7CisJR3ppcERhdGEgICAqZ2QgPSAoR3ppcERhdGEgKikgQ0ZILT5wcml2YXRl OworCWludAkJCXJldDsKKworCWVycm5vID0gMDsKKwlyZXQgPSBnemdldGMoZ2QtPmZwKTsKKwlp ZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZ3plb2YoZ2QtPmZwKSkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJ ZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9m IGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqCitHemlwX2dl dHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUd6 aXBEYXRhICAgKmdkID0gKEd6aXBEYXRhICopIENGSC0+cHJpdmF0ZTsKKworCXJldHVybiBnemdl dHMoZ2QtPmZwLCBwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50CitHemlwX2Nsb3NlKENvbXBy ZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpnZCA9IChHemlwRGF0YSAqKSBD RkgtPnByaXZhdGU7CisJaW50CQkJc2F2ZV9lcnJubzsKKwlpbnQJCQlyZXQ7CisKKwlDRkgtPnBy aXZhdGUgPSBOVUxMOworCisJcmV0ID0gZ3pjbG9zZShnZC0+ZnApOworCisJc2F2ZV9lcnJubyA9 IGVycm5vOworCWZyZWUoZ2QpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sK KwlHemlwRGF0YSAgICpnZCA9IChHemlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4g Z3plb2YoZ2QtPmZwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3Io Q29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBEYXRh ICopIENGSC0+cHJpdmF0ZTsKKwljb25zdCBjaGFyICplcnJtc2c7CisJaW50CQkJZXJybnVtOwor CisJZXJybXNnID0gZ3plcnJvcihnZC0+ZnAsICZlcnJudW0pOworCWlmIChlcnJudW0gPT0gWl9F UlJOTykKKwkJZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30K Kworc3RhdGljIGludAorR3ppcF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3Qg Y2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdk ID0gKEd6aXBEYXRhICopIENGSC0+cHJpdmF0ZTsKKwljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMy XTsKKworCWlmIChnZC0+Y29tcHJlc3Npb25MZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04p CisJeworCQkvKgorCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwg c28gdGVsbCB6bGliIHRvIHVzZSBpdAorCQkgKi8KKwkJc25wcmludGYobW9kZV9jb21wcmVzc2lv biwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCisJCQkJIG1vZGUsIGdkLT5jb21w cmVzc2lvbkxldmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHkobW9kZV9jb21wcmVzc2lvbiwgbW9k ZSk7CisKKwlpZiAoZmQgPj0gMCkKKwkJZ2QtPmZwID0gZ3pkb3BlbihkdXAoZmQpLCBtb2RlX2Nv bXByZXNzaW9uKTsKKwllbHNlCisJCWdkLT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNz aW9uKTsKKworCWlmIChnZC0+ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludAorR3ppcF9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwljaGFyCSAgICpmbmFt ZTsKKwlpbnQJCQlyZXQ7CisJaW50CQkJc2F2ZV9lcnJubzsKKworCWZuYW1lID0gcHNwcmludGYo IiVzLmd6IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsK KworCXNhdmVfZXJybm8gPSBlcnJubzsKKwlwZ19mcmVlKGZuYW1lKTsKKwllcnJubyA9IHNhdmVf ZXJybm87CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitJbml0Q29tcHJlc3NHemlwKENvbXBy ZXNzRmlsZUhhbmRsZSAqIENGSCwgaW50IGNvbXByZXNzaW9uTGV2ZWwpCit7CisJR3ppcERhdGEg ICAqZ2Q7CisKKwlDRkgtPm9wZW4gPSBHemlwX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlID0gR3pp cF9vcGVuX3dyaXRlOworCUNGSC0+cmVhZCA9IEd6aXBfcmVhZDsKKwlDRkgtPndyaXRlID0gR3pp cF93cml0ZTsKKwlDRkgtPmdldHMgPSBHemlwX2dldHM7CisJQ0ZILT5nZXRjID0gR3ppcF9nZXRj OworCUNGSC0+Y2xvc2UgPSBHemlwX2Nsb3NlOworCUNGSC0+ZW9mID0gR3ppcF9lb2Y7CisJQ0ZI LT5nZXRfZXJyb3IgPSBHemlwX2dldF9lcnJvcjsKKworCWdkID0gcGdfbWFsbG9jMChzaXplb2Yo R3ppcERhdGEpKTsKKwlnZC0+Y29tcHJlc3Npb25MZXZlbCA9IGNvbXByZXNzaW9uTGV2ZWw7CisK KwlDRkgtPnByaXZhdGUgPSBnZDsKK30KKyNlbHNlCQkJCQkJCS8qIEhBVkVfTElCWiAqLwordm9p ZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lv bkxldmVsKQoreworCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKK30K Kwordm9pZAorSW5pdENvbXByZXNzR3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBj b21wcmVzc2lvbkxldmVsKQoreworCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBv cnQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3pp cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFiMDM2MmMxZjMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCkBAIC0wLDAg KzEsOSBAQAorI2lmbmRlZiBfQ09NUFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJ UF9IXworCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXBy ZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKTsKK2V4 dGVybiB2b2lkIEluaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZILCBpbnQg Y29tcHJlc3Npb25MZXZlbCk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfR1pJUF9IXyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCA0YThmYzFlMzA2Li4zMDY1YmQ3NmZhIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfaW8uYwpAQCAtNTEsOSArNTEsMTIgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAi Y29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCiAjaWZkZWYg SEFWRV9MSUJaCkBAIC02NSwxMTMgKzY4LDczIEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqLwogCi0vKiB0eXBlZGVmIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uaCAqLwotc3RydWN0IENv bXByZXNzb3JTdGF0ZQorLyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgdW5jb21wcmVz c2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0JcGdfY29tcHJlc3NfYWxn b3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobTsKLQlXcml0ZUZ1bmMJd3JpdGVGOworCXNpemVfdAkJ Y250OworCWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKIAotI2lmZGVmIEhBVkVfTElC WgotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICp6bGliT3V0OwotCXNpemVfdAkJemxpYk91dFNp emU7Ci0jZW5kaWYKLX07CisJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOworCWJ1Zmxl biA9IFpMSUJfT1VUX1NJWkU7CiAKLS8qIFJvdXRpbmVzIHRoYXQgc3VwcG9ydCB6bGliIGNvbXBy ZXNzZWQgZGF0YSBJL08gKi8KLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyB2b2lkIEluaXRDb21w cmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwotc3RhdGljIHZvaWQg RGVmbGF0ZUNvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzLAotCQkJCQkJCQkgIGJvb2wgZmx1c2gpOwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJj aGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lk IFdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsKLXN0YXRp YyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzKTsKLSNlbmRpZgorCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVm bGVuKSkpCisJeworCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQogCi0vKiBSb3V0aW5l cyB0aGF0IHN1cHBvcnQgdW5jb21wcmVzc2VkIGRhdGEgSS9PICovCi1zdGF0aWMgdm9pZCBSZWFk RGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwot c3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRM ZW4pOworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZU5v bmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCSAgIGNvbnN0 IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCWNzLT53cml0ZUYoQUgsIGRhdGEsIGRMZW4p OworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nvck5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJLyogbm8gb3AgKi8KK30KKworc3RhdGljIHZvaWQK K0luaXRDb21wcmVzc29yTm9uZShDb21wcmVzc29yU3RhdGUgKmNzKQoreworCWNzLT5yZWFkRGF0 YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVOb25lOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFU b0FyY2hpdmVOb25lOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTm9uZTsKK30KIAogLyogUHVi bGljIGludGVyZmFjZSByb3V0aW5lcyAqLwogCiAvKiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVzc29y ICovCiBDb21wcmVzc29yU3RhdGUgKgogQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywKLQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVG KQorCQkJCSAgIFJlYWRGdW5jIHJlYWRGLCBXcml0ZUZ1bmMgd3JpdGVGKQogewogCUNvbXByZXNz b3JTdGF0ZSAqY3M7CiAKLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNzX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0 aCB6bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBn X21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JTdGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwog CWNzLT53cml0ZUYgPSB3cml0ZUY7Ci0JY3MtPmNvbXByZXNzX2FsZ29yaXRobSA9IGNvbXByZXNz X3NwZWMuYWxnb3JpdGhtOwotCi0JLyoKLQkgKiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRo bSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLQkgKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAo Y3MtPmNvbXByZXNzX2FsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlJbml0Q29t cHJlc3NvclpsaWIoY3MsIGNvbXByZXNzX3NwZWMubGV2ZWwpOwotI2VuZGlmCiAKLQlyZXR1cm4g Y3M7Ci19Ci0KLS8qCi0gKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQg c3RyZWFtICh2aWEgcmVhZEYpIGFuZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgot ICovCi12b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCi0JCQkJCVJlYWRGdW5jIHJlYWRGKQot ewogCXN3aXRjaCAoY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBS RVNTSU9OX05PTkU6Ci0JCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOworCQkJ SW5pdENvbXByZXNzb3JOb25lKGNzKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9O X0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwg cmVhZEYpOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQi KTsKLSNlbmRpZgorCQkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVzc19zcGVjLmxldmVs KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Np b24gbWV0aG9kIik7CiAJCQlicmVhazsKIAl9Ci19CiAKLS8qCi0gKiBDb21wcmVzcyBhbmQgd3Jp dGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCi0gKi8KLXZvaWQKLVdy aXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywK LQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQlzd2l0Y2ggKGNzLT5j b21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JCQlXcml0ZURhdGFUb0FyY2hpdmVabGliKEFILCBjcywgZGF0YSwgZExl bik7Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwot I2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVE YXRhVG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7Ci0JCWRlZmF1 bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFr OwotCX0KKwlyZXR1cm4gY3M7CiB9CiAKIC8qCkBAIC0xODAsMjQzICsxNDMsMjggQEAgV3JpdGVE YXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogdm9p ZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykK IHsKLQlzd2l0Y2ggKGNzLT5jb21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBS RVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlFbmRDb21wcmVzc29yWmxpYihBSCwg Y3MpOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsK LSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCWZyZWUo Y3MpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXBy ZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQotfQotCi0vKiBQcml2YXRlIHJvdXRpbmVz LCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KLQotI2lmZGVmIEhBVkVf TElCWgotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgemxpYiBjb21wcmVzc2VkIG91dHB1dC4KLSAqLwot Ci1zdGF0aWMgdm9pZAotSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3MsIGlu dCBsZXZlbCkKLXsKLQl6X3N0cmVhbXAJenA7Ci0KLQl6cCA9IGNzLT56cCA9ICh6X3N0cmVhbXAp IHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpw LT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JLyoKLQkgKiB6bGli T3V0U2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8u ICBXZQotCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSBy b3V0aW5lcyB3YW50IHRvIGFwcGVuZCBhCi0JICogdHJhaWxpbmcgemVybyBieXRlIHRvIHRoZSB6 bGliIG91dHB1dC4KLQkgKi8KLQljcy0+emxpYk91dCA9IChjaGFyICopIHBnX21hbGxvYyhaTElC X09VVF9TSVpFICsgMSk7Ci0JY3MtPnpsaWJPdXRTaXplID0gWkxJQl9PVVRfU0laRTsKLQotCWlm IChkZWZsYXRlSW5pdCh6cCwgbGV2ZWwpICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3Qg aW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJIHpwLT5tc2cpOwotCi0J LyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdp dGggbm8gV3JpdGUgKi8KLQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+emxpYk91dDsKLQl6 cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOwotfQotCi1zdGF0aWMgdm9pZAotRW5kQ29t cHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCi17Ci0J el9zdHJlYW1wCXpwID0gY3MtPnpwOwotCi0JenAtPm5leHRfaW4gPSBOVUxMOwotCXpwLT5hdmFp bF9pbiA9IDA7Ci0KLQkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6bGliIGJ1ZmZl ciAqLwotCURlZmxhdGVDb21wcmVzc29yWmxpYihBSCwgY3MsIHRydWUpOwotCi0JaWYgKGRlZmxh dGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Np b24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOwotCi0JZnJlZShjcy0+emxpYk91dCk7Ci0JZnJlZShj cy0+enApOworCWNzLT5lbmQoQUgsIGNzKTsKKwlwZ19mcmVlKGNzKTsKIH0KIAotc3RhdGljIHZv aWQKLURlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywgYm9vbCBmbHVzaCkKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0JY2hhcgkg ICAqb3V0ID0gY3MtPnpsaWJPdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQotCXdoaWxlIChjcy0+ enAtPmF2YWlsX2luICE9IDAgfHwgZmx1c2gpCi0JewotCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVz aCA/IFpfRklOSVNIIDogWl9OT19GTFVTSCk7Ci0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1Ip Ci0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0J CWlmICgoZmx1c2ggJiYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpKQotCQkJfHwg KHpwLT5hdmFpbF9vdXQgPT0gMCkKLQkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKLQkJCSkKLQkJ ewotCQkJLyoKLQkJCSAqIEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3Ms IHNpbmNlIGEgemVybyBsZW5ndGgKLQkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRo ZSBjdXN0b20gZm9ybWF0LiBUaGlzIHNob3VsZCBuZXZlcgotCQkJICogaGFwcGVuIGJ1dC4uLgot CQkJICovCi0JCQlpZiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIEFueSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBj aGVja2luZyBidXQgdG8KLQkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdl bGwuLi4KLQkJCQkgKi8KLQkJCQlzaXplX3QJCWxlbiA9IGNzLT56bGliT3V0U2l6ZSAtIHpwLT5h dmFpbF9vdXQ7Ci0KLQkJCQljcy0+d3JpdGVGKEFILCBvdXQsIGxlbik7Ci0JCQl9Ci0JCQl6cC0+ bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRT aXplOwotCQl9Ci0KLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCi0JCQlicmVhazsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qg ZExlbikKLXsKLQljcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KGNoYXIgKiwg ZGF0YSk7Ci0JY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47Ci0JRGVmbGF0ZUNvbXByZXNzb3JabGli KEFILCBjcywgZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZVps aWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKQotewotCXpfc3RyZWFtcAl6cDsK LQljaGFyCSAgICpvdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQlzaXplX3QJCWNudDsKLQljaGFy CSAgICpidWY7Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxv YyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9 IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJf SU5fU0laRSk7Ci0JYnVmbGVuID0gWkxJQl9JTl9TSVpFOwotCi0Jb3V0ID0gcGdfbWFsbG9jKFpM SUJfT1VUX1NJWkUgKyAxKTsKLQotCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJ CQkgenAtPm1zZyk7Ci0KLQkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8KLQl3 aGlsZSAoKGNudCA9IHJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQl6cC0+bmV4dF9p biA9ICh2b2lkICopIGJ1ZjsKLQkJenAtPmF2YWlsX2luID0gY250OwotCi0JCXdoaWxlICh6cC0+ YXZhaWxfaW4gPiAwKQotCQl7Ci0JCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6 cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKLQotCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7 Ci0JCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCQlwZ19mYXRh bCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQotCQkJb3V0W1pM SUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7Ci0JCQlhaHdyaXRlKG91dCwgMSwg WkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKLQkJfQotCX0KLQotCXpwLT5uZXh0 X2luID0gTlVMTDsKLQl6cC0+YXZhaWxfaW4gPSAwOwotCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1f RU5EKQotCXsKLQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQl6cC0+YXZhaWxfb3V0 ID0gWkxJQl9PVVRfU0laRTsKLQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0JCWlmIChyZXMgIT0g Wl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNv bXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+ YXZhaWxfb3V0XSA9ICdcMCc7Ci0JCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAt PmF2YWlsX291dCwgQUgpOwotCX0KLQotCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBaX09LKQotCQlw Z19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1z Zyk7Ci0KLQlmcmVlKGJ1Zik7Ci0JZnJlZShvdXQpOwotCWZyZWUoenApOwotfQotI2VuZGlmCQkJ CQkJCS8qIEhBVkVfTElCWiAqLwotCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHVuY29tcHJlc3Nl ZCBvdXRwdXQuCi0gKi8KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQlzaXplX3QJCWNudDsKLQljaGFy CSAgICpidWY7Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRf U0laRSk7Ci0JYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKLQotCXdoaWxlICgoY250ID0gcmVhZEYo QUgsICZidWYsICZidWZsZW4pKSkKLQl7Ci0JCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKLQl9 Ci0KLQlmcmVlKGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmVOb25l KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkgICBjb25zdCBj aGFyICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsK LX0KLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbXByZXNzZWQgc3RyZWFtIEFQ SQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyoKLSAqIGNmcCByZXByZXNlbnRz IGFuIG9wZW4gc3RyZWFtLCB3cmFwcGluZyB0aGUgdW5kZXJseWluZyBGSUxFIG9yIGd6RmlsZQot ICogcG9pbnRlci4gVGhpcyBpcyBvcGFxdWUgdG8gdGhlIGNhbGxlcnMuCi0gKi8KLXN0cnVjdCBj ZnAKK3N0YXRpYyBpbnQKK2hhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hh ciAqc3VmZml4KQogewotCXBnX2NvbXByZXNzX2FsZ29yaXRobSBjb21wcmVzc19hbGdvcml0aG07 Ci0Jdm9pZAkgICAqZnA7Ci19OworCWludAkJCWZpbGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1l KTsKKwlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3VmZml4KTsKIAotI2lmZGVmIEhBVkVfTElC Wgotc3RhdGljIGludAloYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIg KnN1ZmZpeCk7Ci0jZW5kaWYKKwlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCisJCXJldHVy biAwOworCisJcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5d LAorCQkJCSAgc3VmZml4LAorCQkJCSAgc3VmZml4bGVuKSA9PSAwOworfQogCiAvKiBmcmVlKCkg d2l0aG91dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVsIGluIHNldmVyYWwgcGxhY2VzIGJlbG93ICov CiBzdGF0aWMgdm9pZApAQCAtNDI5LDM5MiArMTc3LDIxOSBAQCBmcmVlX2tlZXBfZXJybm8odm9p ZCAqcCkKIH0KIAogLyoKLSAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhl IGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKLSAqIGJlIGVpdGhlciAiciIgb3IgInJi Ii4KLSAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVu ZCB0aGUgIi5neiIgc3VmZml4IChpZiAncGF0aCcKLSAqIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0 KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsCi0gKiB0aGlz IHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIuCi0gKgotICogT24gZmFpbHVyZSwg cmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICogQ29tcHJlc3Npb24g Tm9uZSBpbXBsZW1lbnRhdGlvbgogICovCi1jZnAgKgotY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAq cGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3N0YXRpYyBzaXplX3QKK19yZWFkKHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKIHsKLQljZnAJCSAgICpmcDsK LQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7MH07CisJRklMRQkg ICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGU7CisJc2l6ZV90CQlyZXQ7CiAKLQljb21wcmVz c19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0jaWZkZWYgSEFWRV9MSUJa Ci0JaWYgKGhhc1N1ZmZpeChwYXRoLCAiLmd6IikpCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUs IGNvbXByZXNzX3NwZWMpOwotCWVsc2UKLSNlbmRpZgotCXsKLQkJY29tcHJlc3Nfc3BlYy5hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBj b21wcmVzc19zcGVjKTsKLSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5VTEwpCi0JCXsK LQkJCWNoYXIJICAgKmZuYW1lOwotCi0JCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX0daSVA7Ci0JCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJ ZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzX3NwZWMpOwotCQkJZnJlZV9rZWVwX2Vy cm5vKGZuYW1lKTsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KKwlpZiAoc2l6ZSA9 PSAwKQorCQlyZXR1cm4gMDsKIAotLyoKLSAqIE9wZW4gYSBmaWxlIGZvciB3cml0aW5nLiAncGF0 aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFuZCAnbW9kZScgbXVzdAotICogYmUgYSBmaWxl bW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFuZCBnem9wZW4oKSB0aGF0IGluZGljYXRlcyB3 cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9yICJhYiIpLgotICoKLSAqIElmICdjb21wcmVz c19zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXByZXNzZWQgc3RyZWFtIGlzIG9w ZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Nfc3BlYy5sZXZlbCcgdXNlZC4gVGhlICIuZ3oiIHN1ZmZp eCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCi0gKiAncGF0aCcgaW4gdGhhdCBjYXNlLgotICoK LSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4K LSAqLwotY2ZwICoKLWNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpt b2RlLAotCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykK LXsKLQljZnAJCSAgICpmcDsKKwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwKTsKKwlpZiAo cmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CiAKLQlpZiAoY29tcHJl c3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBjZm9wZW4o cGF0aCwgbW9kZSwgY29tcHJlc3Nfc3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloK LQkJY2hhcgkgICAqZm5hbWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsK LQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzX3NwZWMpOwotCQlmcmVlX2tlZXBf ZXJybm8oZm5hbWUpOwotI2Vsc2UKLQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOwotCQlmcCA9IE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLSNlbmRp ZgotCX0KLQlyZXR1cm4gZnA7CisJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFRoaXMgaXMgdGhl IHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBmaWxlICdwYXRo JyBvcgotICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVz Y3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKLSAqIGRlc2NyaXB0b3IgaXMgbm90IGR1cCdlZCBhbmQg aXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgotICogVGhlIGNhbGxl ciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBzdXBwb3J0ZWQg YnkgdGhlCi0gKiBjdXJyZW50IGJ1aWxkLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxM IHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqLwotc3RhdGljIGNmcCAqCi1jZm9wZW5f aW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJ CXBnX2NvbXByZXNzX2FsZ29yaXRobSBjb21wcmVzc19hbGdvcml0aG0sIGludCBjb21wcmVzc2lv bkxldmVsKQorc3RhdGljIHNpemVfdAorX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKIHsKLQljZnAJCSAgICpmcCA9IHBnX21hbGxv YyhzaXplb2YoY2ZwKSk7Ci0KLQlmcC0+Y29tcHJlc3NfYWxnb3JpdGhtID0gY29tcHJlc3NfYWxn b3JpdGhtOwotCi0Jc3dpdGNoIChjb21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NP TVBSRVNTSU9OX05PTkU6Ci0JCQlpZiAoZmQgPj0gMCkKLQkJCQlmcC0+ZnAgPSBmZG9wZW4oZmQs IG1vZGUpOwotCQkJZWxzZQotCQkJCWZwLT5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQkJaWYg KGZwLT5mcCA9PSBOVUxMKQotCQkJewotCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQkJZnAg PSBOVUxMOwotCQkJfQotCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgot I2lmZGVmIEhBVkVfTElCWgotCQkJaWYgKGNvbXByZXNzaW9uTGV2ZWwgIT0gWl9ERUZBVUxUX0NP TVBSRVNTSU9OKQotCQkJewotCQkJCS8qCi0JCQkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29t cHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UKLQkJCQkgKiBpdAotCQkJCSAqLwot CQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOwotCi0JCQkJc25wcmludGYobW9kZV9jb21w cmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCi0JCQkJCQkgbW9kZSwg Y29tcHJlc3Npb25MZXZlbCk7Ci0JCQkJaWYgKGZkID49IDApCi0JCQkJCWZwLT5mcCA9IGd6ZG9w ZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJCWVsc2UKLQkJCQkJZnAtPmZwID0gZ3pvcGVu KHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIGRv bid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVsdCAqLwotCQkJCWlm IChmZCA+PSAwKQotCQkJCQlmcC0+ZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKLQkJCQllbHNlCi0J CQkJCWZwLT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJCX0KLQotCQkJaWYgKGZwLT5mcCA9 PSBOVUxMKQotCQkJewotCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQkJZnAgPSBOVUxMOwot CQkJfQotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsK LSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21w cmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBmcDsKKwlyZXR1cm4g ZndyaXRlKHB0ciwgMSwgc2l6ZSwgKEZJTEUgKikgQ0ZILT5wcml2YXRlKTsKIH0KIAotY2ZwICoK LWNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKK3N0YXRpYyBjb25zdCBjaGFy ICoKK19nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQogewotCXJldHVybiBjZm9w ZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsCi0JCQkJCQkgICBjb21wcmVzc19zcGVjLmFsZ29y aXRobSwKLQkJCQkJCSAgIGNvbXByZXNzX3NwZWMubGV2ZWwpOworCXJldHVybiBzdHJlcnJvcihl cnJubyk7CiB9CiAKLWNmcCAqCi1jZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJ Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQorc3RhdGljIGNo YXIgKgorX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZI KQogewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQsIG1vZGUsCi0JCQkJCQkgICBj b21wcmVzc19zcGVjLmFsZ29yaXRobSwKLQkJCQkJCSAgIGNvbXByZXNzX3NwZWMubGV2ZWwpOwor CXJldHVybiBmZ2V0cyhwdHIsIHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZSk7CiB9CiAKLWlu dAotY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCitzdGF0aWMgaW50CitfZ2V0 YyhDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBD RkgtPnByaXZhdGU7CiAJaW50CQkJcmV0OwogCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuIDA7 Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCisJcmV0ID0gZmdldGMoZnApOwor CWlmIChyZXQgPT0gRU9GKQogCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0 ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+ZnApOwotCQkJaWYgKHJldCAhPSBzaXplICYmICFm ZW9mKGZwLT5mcCkpCi0JCQkJUkVBRF9FUlJPUl9FWElUKGZwLT5mcCk7Ci0KLQkJCWJyZWFrOwot CQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBn enJlYWQoZnAtPmZwLCBwdHIsIHNpemUpOwotCQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihm cC0+ZnApKQotCQkJewotCQkJCWludAkJCWVycm51bTsKLQkJCQljb25zdCBjaGFyICplcnJtc2cg PSBnemVycm9yKGZwLT5mcCwgJmVycm51bSk7Ci0KLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJl YWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCQkgZXJybnVtID09IFpfRVJSTk8gPyBzdHJl cnJvcihlcnJubykgOiBlcnJtc2cpOwotCQkJfQotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVp bHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoK LQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7CisJ CWlmICghZmVvZihmcCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CiAJfQogCiAJcmV0dXJuIHJl dDsKIH0KIAotaW50Ci1jZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnAp CitzdGF0aWMgaW50CitfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQogeworCUZJTEUJ ICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlOwogCWludAkJCXJldCA9IDA7CiAKLQlzd2l0 Y2ggKGZwLT5jb21wcmVzc19hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05P TkU6Ci0JCQlyZXQgPSBmd3JpdGUocHRyLCAxLCBzaXplLCBmcC0+ZnApOwotCQkJYnJlYWs7Ci0J CWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6 d3JpdGUoZnAtPmZwLCBwdHIsIHNpemUpOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQg d2l0aCB6bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlw Z19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwotCX0KKwlD RkgtPnByaXZhdGUgPSBOVUxMOworCisJaWYgKGZwKQorCQlyZXQgPSBmY2xvc2UoZnApOwogCiAJ cmV0dXJuIHJldDsKIH0KIAotaW50Ci1jZmdldGMoY2ZwICpmcCkKK3N0YXRpYyBpbnQKK19lb2Yo Q29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQogewotCWludAkJCXJldDsKKwlyZXR1cm4gZmVvZigo RklMRSAqKSBDRkgtPnByaXZhdGUpOworfQogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3Jp dGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmdldGMoZnAt PmZwKTsKLQkJCWlmIChyZXQgPT0gRU9GKQotCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOwor c3RhdGljIGludAorX29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICpt b2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJQXNzZXJ0KENGSC0+cHJpdmF0ZSA9 PSBOVUxMKTsKIAotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRl ZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6Z2V0YygoZ3pGaWxlKSBmcC0+ZnApOwotCQkJaWYgKHJl dCA9PSBFT0YpCi0JCQl7Ci0JCQkJaWYgKCFnemVvZihmcC0+ZnApKQotCQkJCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0J CQkJZWxzZQotCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBl bmQgb2YgZmlsZSIpOwotCQkJfQotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6 bGliIHN1cHBvcnQiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRh bCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwotCX0KKwlpZiAoZmQg Pj0gMCkKKwkJQ0ZILT5wcml2YXRlID0gZmRvcGVuKGR1cChmZCksIG1vZGUpOworCWVsc2UKKwkJ Q0ZILT5wcml2YXRlID0gZm9wZW4ocGF0aCwgbW9kZSk7CiAKLQlyZXR1cm4gcmV0OworCWlmIChD RkgtPnByaXZhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAotY2hh ciAqCi1jZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludAorX29w ZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxl SGFuZGxlICogQ0ZIKQogewotCWNoYXIJICAgKnJldDsKKwlBc3NlcnQoQ0ZILT5wcml2YXRlID09 IE5VTEwpOwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQ R19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmdldHMoYnVmLCBsZW4sIGZwLT5mcCk7CisJ Q0ZILT5wcml2YXRlID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJpdmF0ZSA9PSBO VUxMKQorCQlyZXR1cm4gMTsKIAotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJ UDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6Z2V0cyhmcC0+ZnAsIGJ1ZiwgbGVuKTsK LSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5k aWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Np b24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJcmV0dXJuIDA7Cit9CiAKLQlyZXR1cm4gcmV0 Oworc3RhdGljIHZvaWQKK0luaXRDb21wcmVzc05vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZI KQoreworCUNGSC0+b3BlbiA9IF9vcGVuOworCUNGSC0+b3Blbl93cml0ZSA9IF9vcGVuX3dyaXRl OworCUNGSC0+cmVhZCA9IF9yZWFkOworCUNGSC0+d3JpdGUgPSBfd3JpdGU7CisJQ0ZILT5nZXRz ID0gX2dldHM7CisJQ0ZILT5nZXRjID0gX2dldGM7CisJQ0ZILT5jbG9zZSA9IF9jbG9zZTsKKwlD RkgtPmVvZiA9IF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3IgPSBfZ2V0X2Vycm9yOworCisJQ0ZILT5w cml2YXRlID0gTlVMTDsKIH0KIAotaW50Ci1jZmNsb3NlKGNmcCAqZnApCisvKgorICogUHVibGlj IGludGVyZmFjZQorICovCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdENvbXByZXNzRmlsZUhh bmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpCiB7Ci0J aW50CQkJcmV0OworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCi0JaWYgKGZwID09IE5VTEwp Ci0JewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9GOwotCX0KKwlDRkggPSBwZ19tYWxs b2MwKHNpemVvZihDb21wcmVzc0ZpbGVIYW5kbGUpKTsKIAotCXN3aXRjaCAoZnAtPmNvbXByZXNz X2FsZ29yaXRobSkKKwlzd2l0Y2ggKGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtKQogCXsKIAkJY2Fz ZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmNsb3NlKGZwLT5mcCk7Ci0JCQlmcC0+ ZnAgPSBOVUxMOwotCisJCQlJbml0Q29tcHJlc3NOb25lKENGSCk7CiAJCQlicmVhazsKIAkJY2Fz ZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3pjbG9z ZShmcC0+ZnApOwotCQkJZnAtPmZwID0gTlVMTDsKLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1 aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc0d6aXAoQ0ZI LCBjb21wcmVzc19zcGVjLmxldmVsKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CiAJCQlicmVhazsKIAl9CiAKLQlmcmVl X2tlZXBfZXJybm8oZnApOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gQ0ZIOwogfQogCi1pbnQK LWNmZW9mKGNmcCAqZnApCisvKgorICogT3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcuICdwYXRoJyBp cyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNob3VsZAorICogYmUgZWl0aGVyICJyIiBv ciAicmIiLgorICoKKyAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBkb2VzIG5vdCBleGlzdCwgd2Ug YXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlmCisgKiAncGF0aCcgZG9lc24ndCBhbHJlYWR5IGhh dmUgaXQpIGFuZCB0cnkgYWdhaW4uIFNvIGlmIHlvdSBwYXNzICJmb28iIGFzCisgKiAncGF0aCcs IHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvciAiZm9vLmd6IiwgdHJ5aW5nIGluIHRoYXQg b3JkZXIuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2Rl IGluIGVycm5vLgorICoKKyAqLworQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXREaXNjb3ZlckNv bXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogewot CWludAkJCXJldDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IE5VTEw7CisJc3RydWN0IHN0 YXQgc3Q7CisJY2hhcgkgICAqZm5hbWU7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc19zcGVjID0gezB9OwogCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQotCXsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZmVvZihmcC0+ZnApOworCWNv bXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKIAotCQkJYnJlYWs7 Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9 IGd6ZW9mKGZwLT5mcCk7Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIg c3VwcG9ydCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQorCUFzc2VydChzdHJj bXAobW9kZSwgInIiKSA9PSAwIHx8IHN0cmNtcChtb2RlLCAicmIiKSA9PSAwKTsKIAotCXJldHVy biByZXQ7Ci19CisJZm5hbWUgPSBzdHJkdXAocGF0aCk7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2Nm cF9lcnJvcihjZnAgKmZwKQotewotCWlmIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtID09IFBHX0NP TVBSRVNTSU9OX0daSVApCisJaWYgKGhhc1N1ZmZpeChmbmFtZSwgIi5neiIpKQorCQljb21wcmVz c19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJZWxzZQogCXsKKwkJYm9v bAkJZXhpc3RzOworCisJCWV4aXN0cyA9IChzdGF0KHBhdGgsICZzdCkgPT0gMCk7CisJCS8qIGF2 b2lkIHVudXNlZCB3YXJuaW5nIGlmIGl0IGlzIG5vdCBidWlsZCB3aXRoIGNvbXByZXNzaW9uICov CisJCWlmIChleGlzdHMpCisJCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX05PTkU7CiAjaWZkZWYgSEFWRV9MSUJaCi0JCWludAkJCWVycm51bTsKLQkJY29uc3QgY2hh ciAqZXJybXNnID0gZ3plcnJvcihmcC0+ZnAsICZlcnJudW0pOworCQlpZiAoIWV4aXN0cykKKwkJ eworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6 IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKIAotCQlpZiAo ZXJybnVtICE9IFpfRVJSTk8pCi0JCQlyZXR1cm4gZXJybXNnOwotI2Vsc2UKLQkJcGdfZmF0YWwo Im5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworCQkJaWYgKGV4aXN0cykKKwkJCQljb21w cmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJCX0KICNlbmRpZgog CX0KIAotCXJldHVybiBzdHJlcnJvcihlcnJubyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShjb21wcmVzc19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuKGZuYW1lLCAtMSwgbW9kZSwgQ0ZI KSkKKwl7CisJCWZyZWVfa2VlcF9lcnJubyhDRkgpOworCQlDRkggPSBOVUxMOworCX0KKwlmcmVl X2tlZXBfZXJybm8oZm5hbWUpOworCisJcmV0dXJuIENGSDsKIH0KIAotI2lmZGVmIEhBVkVfTElC Wgotc3RhdGljIGludAotaGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFy ICpzdWZmaXgpCitpbnQKK0Rlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFu ZGxlICogQ0ZIKQogewotCWludAkJCWZpbGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKLQlp bnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3VmZml4KTsKKwlpbnQJCQlyZXQgPSAwOwogCi0JaWYg KGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQotCQlyZXR1cm4gMDsKKwlpZiAoQ0ZILT5wcml2YXRl KQorCQlyZXQgPSBDRkgtPmNsb3NlKENGSCk7CiAKLQlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtm aWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCi0JCQkJICBzdWZmaXgsCi0JCQkJICBzdWZmaXhsZW4p ID09IDA7Ci19CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAKLSNlbmRpZgorCXJldHVybiByZXQ7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oCmluZGV4IGQ2MzM1ZmZmMDIuLmE5ODZmNWU2ZWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19pby5oCkBAIC0zNywzNCArMzcsNjEgQEAgdHlwZWRlZiB2b2lkICgqV3JpdGVG dW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiAg Ki8KIHR5cGVkZWYgc2l6ZV90ICgqUmVhZEZ1bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAq KmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwogCi0vKiBzdHJ1Y3QgZGVmaW5pdGlvbiBhcHBlYXJzIGlu IGNvbXByZXNzX2lvLmMgKi8KIHR5cGVkZWYgc3RydWN0IENvbXByZXNzb3JTdGF0ZSBDb21wcmVz c29yU3RhdGU7CitzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlCit7CisJLyoKKwkgKiBSZWFkIGFsbCBj b21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFuZCBwcmlu dCBpdAorCSAqIG91dCB3aXRoIGFod3JpdGUoKS4KKwkgKi8KKwl2b2lkCQkoKnJlYWREYXRhKSAo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJLyoKKwkgKiBDb21w cmVzcyBhbmQgd3JpdGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCisJ ICovCisJdm9pZAkJKCp3cml0ZURhdGEpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywKKwkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKKwl2b2lk CQkoKmVuZCkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworCVJl YWRGdW5jCXJlYWRGOworCVdyaXRlRnVuYwl3cml0ZUY7CisKKwl2b2lkCSAgICpwcml2YXRlOwor fTsKIAogZXh0ZXJuIENvbXByZXNzb3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywKKwkJCQkJCQkJCQkgICBSZWFk RnVuYyByZWFkRiwKIAkJCQkJCQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKTsKLWV4dGVybiB2b2lk IFJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsCi0JCQkJCQkJCWNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywKLQkJCQkJCQkJUmVhZEZ1bmMg cmVhZEYpOwotZXh0ZXJuIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKTsKIGV4dGVybiB2b2lkIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzb3JTdGF0ZSAqY3MpOwogCisvKgorICogQ29tcHJlc3MgRmlsZSBIYW5kbGUKKyAqLwor dHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NGaWxlSGFuZGxlIENvbXByZXNzRmlsZUhhbmRsZTsKKwor c3RydWN0IENvbXByZXNzRmlsZUhhbmRsZQoreworCWludAkJCSgqb3BlbikgKGNvbnN0IGNoYXIg KnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJCSBDb21wcmVzc0ZpbGVIYW5k bGUgKiBDRkgpOworCWludAkJCSgqb3Blbl93cml0ZSkgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsCisJCQkJCQkJICAgQ29tcHJlc3NGaWxlSGFuZGxlICogY3h0KTsKKwlzaXpl X3QJCSgqcmVhZCkgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq IENGSCk7CisJc2l6ZV90CQkoKndyaXRlKSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwK KwkJCQkJCSAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwljaGFyCSAgICooKmdl dHMpIChjaGFyICpzLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsKKwlpbnQJ CQkoKmdldGMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpOworCWludAkJCSgqZW9mKSAoQ29t cHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsKKwlpbnQJCQkoKmNsb3NlKSAoQ29tcHJlc3NGaWxlSGFu ZGxlICogQ0ZIKTsKKwljb25zdCBjaGFyICooKmdldF9lcnJvcikgKENvbXByZXNzRmlsZUhhbmRs ZSAqIENGSCk7CisKKwl2b2lkCSAgICpwcml2YXRlOworfTsKKwogCi10eXBlZGVmIHN0cnVjdCBj ZnAgY2ZwOworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAqIEluaXRDb21wcmVzc0ZpbGVIYW5k bGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKIAotZXh0 ZXJuIGNmcCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJ ICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKLWV4dGVy biBjZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQlwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpjZm9wZW5f d3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJCSBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwotZXh0ZXJuIGludAljZnJl YWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmd3JpdGUoY29u c3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZ2V0YyhjZnAg KmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKTsK LWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Zlb2YoY2ZwICpmcCk7 Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAgKmZwKTsKK2V4dGVybiBDb21w cmVzc0ZpbGVIYW5kbGUgKiBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hh ciAqcGF0aCwKKwkJCQkJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbW9kZSk7CiAKK2V4dGVybiBp bnQJRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpOwog I2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNmNmZjJhNmMzZC4uMDQxZTA4Y2Q1ZSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZApAQCAtMSw1ICsxLDYgQEAKIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxl cygKICAgJ2NvbXByZXNzX2lvLmMnLAorICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2R1bXB1dGls cy5jJywKICAgJ3BhcmFsbGVsLmMnLAogICAncGdfYmFja3VwX2FyY2hpdmVyLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDMwNGNjMDcyY2EuLjA5ZTIwZmI5N2IgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTk1LDggKzk1LDggQEAgc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsK IHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19z cGVjKTsKLXN0YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGlj IHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7 CitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c0ZpbGVIYW5kbGUgKiBzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9yZV90b2NfZW50 cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7CiBz dGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhhbmRsZSAqQUgs CkBAIC0yNzIsNyArMjcyLDcgQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAogCS8qIENs b3NlIHRoZSBvdXRwdXQgKi8KIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShBSC0+T0YpOwor CXJlcyA9IERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0g MCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTM1 NSw3ICszNTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJYm9vbAkJcGFyYWxs ZWxfbW9kZTsKIAlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsK LQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAKIAlBSC0+c3RhZ2Ug PSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTExMjYsNyArMTEyNiw3IEBAIFByaW50VE9DU3Vt bWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3VyU2VjdGlvbjsK LQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAJY29uc3QgY2hhciAq Zm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xNTAyLDYgKzE1MDIsNyBAQCBz dGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxl bmFtZSwKIAkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMp CiB7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKIAlpbnQJ CQlmbiA9IC0xOwogCkBAIC0xNTI0LDMzICsxNTI1LDMyIEBAIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZ X1c7CiAKLQlpZiAoZm4gPj0gMCkKLQkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBj b21wcmVzc19zcGVjKTsKLQllbHNlCi0JCUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwg Y29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc19z cGVjKTsKIAotCWlmICghQUgtPk9GKQorCWlmIChDRkgtPm9wZW4oZmlsZW5hbWUsIGZuLCBtb2Rl LCBDRkgpKQogCXsKIAkJaWYgKGZpbGVuYW1lKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAJCWVsc2UKIAkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZTogJW0iKTsKIAl9CisKKwlBSC0+T0YgPSBDRkg7 CiB9CiAKLXN0YXRpYyBjZnAgKgorc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqCiBTYXZlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFIKQogewotCXJldHVybiAoY2ZwICopIEFILT5PRjsKKwlyZXR1 cm4gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0 b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KQorUmVzdG9yZU91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICogc2F2ZWRPdXRwdXQp CiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsK KwlyZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0x Njg5LDcgKzE2ODksMTEgQEAgYWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBz aXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIo QUgpKQogCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMs IChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0JCWJ5dGVzX3dyaXR0 ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5tZW1iLCBBSC0+T0YpOworCXsKKwkJQ29tcHJlc3NG aWxlSGFuZGxlICpDRkggPSAoQ29tcHJlc3NGaWxlSGFuZGxlICopIEFILT5PRjsKKworCQlieXRl c193cml0dGVuID0gQ0ZILT53cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQ0ZIKTsKKwl9CiAKIAlp ZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIpCiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBA IC0yMDMxLDYgKzIwMzUsMTggQEAgUmVhZFN0cihBcmNoaXZlSGFuZGxlICpBSCkKIAlyZXR1cm4g YnVmOwogfQogCitzdGF0aWMgYm9vbAorX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFy ICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJ CWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMi LCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFt ZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0g MCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKwogc3RhdGljIGludAogX2Rpc2NvdmVyQXJj aGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKIHsKQEAgLTIwNjEsMjYgKzIwNzcsMTIgQEAg X2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKIAkJICovCiAJCWlmIChz dGF0KEFILT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKLQkJ CWNoYXIJCWJ1ZltNQVhQR1BBVEhdOwotCi0JCQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgs ICIlcy90b2MuZGF0IiwgQUgtPmZTcGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRp cmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlp ZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJ CUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rv cnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Iikp CiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9Ci0KICNpZmRlZiBIQVZFX0xJQloKLQkJCWlm IChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQuZ3oiLCBBSC0+ZlNwZWMpID49 IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNc IiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNf SVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7 CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmd6Iikp CiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9j LmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpAQCAtMjE3OCw2ICsy MTgwLDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3Jt YXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNldHVwV29ya2VyUHRyKQogewogCUFyY2hp dmVIYW5kbGUgKkFIOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAKIAlwZ19sb2dfZGVidWcoImFs bG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLApAQCAtMjIzMyw3ICsyMjM2LDEwIEBAIF9h bGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAog CS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJlc3Npb24gZm9yIEFIIG91dHB1dCBoYW5kbGUg Ki8KIAlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwot CUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQpKSwgUEdfQklOQVJZX0EsIG91dF9j b21wcmVzc19zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKG91dF9jb21wcmVz c19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuKE5VTEwsIGZpbGVubyhzdGRvdXQpLCBQR19CSU5BUllf QSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0ZG91dCBmb3IgYXBwZW5kaW5n OiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24gV2luZG93cywgd2UgbmVlZCB0 byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxlcywKQEAgLTM2NDYs NyArMzY1Miw3IEBAIFdyaXRlSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAlBSC0+V3JpdGVCeXRl UHRyKEFILCBBSC0+aW50U2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPm9mZlNpemUp OwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5mb3JtYXQpOwotCVdyaXRlSW50KEFILCBBSC0+ Y29tcHJlc3Nfc3BlYy5sZXZlbCk7CisJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmNvbXByZXNz X3NwZWMuYWxnb3JpdGhtKTsKIAljcnRtID0gKmxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpOwog CVdyaXRlSW50KEFILCBjcnRtLnRtX3NlYyk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fbWluKTsK QEAgLTM3MTgsNyArMzcyNCw5IEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQkJCSBB SC0+Zm9ybWF0LCBmbXQpOwogCiAJQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09N UFJFU1NJT05fTk9ORTsKLQlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikKKwlpZiAoQUgt PnZlcnNpb24gPj0gS19WRVJTXzFfMTUpCisJCUFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9 IEFILT5SZWFkQnl0ZVB0cihBSCk7CisJZWxzZSBpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFf MikKIAl7CiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVSU18xXzQpCiAJCQlBSC0+Y29tcHJlc3Nf c3BlYy5sZXZlbCA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CkBAIC0zNzMxLDExICszNzM5LDIwIEBA IFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAkJQUgtPmNvbXByZXNzX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAorCWlmIChBSC0+Y29tcHJlc3Nfc3Bl Yy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKKwl7CisJCWJvb2wgdW5zdXBwb3J0 ZWQgPSBmYWxzZTsKKwogI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgtPmNvbXByZXNzX3NwZWMu YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCXBnX2xvZ193YXJuaW5nKCJhcmNo aXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIC0tIG5vIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUiKTsKKwkJaWYgKEFILT5j b21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQkJdW5zdXBw b3J0ZWQgPSB0cnVlOwogI2VuZGlmCi0KKwkJaWYgKHVuc3VwcG9ydGVkKQorCQl7CisJCQlwZ19s b2dfd2FybmluZygiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24g ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxl Iik7CisJCQlBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05F OworCQl9CisJfQogCiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzQpCiAJewpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGQyOTMwOTQ5YWIuLmJiN2ZhZDJhZjEgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2NSwxMiBAQAogI2Rl ZmluZSBLX1ZFUlNfMV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdl IHNlYXJjaF9wYXRoCiAJCQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJT XzFfMTQgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisj ZGVmaW5lIEtfVkVSU18xXzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQg Y29tcHJlc3Npb25fYWxnb3JpdGhtCisJCQkJCQkJCQkJCQkJICogaW4gaGVhZGVyICovCiAKIC8q IEN1cnJlbnQgYXJjaGl2ZSB2ZXJzaW9uIG51bWJlciAodGhlIGZvcm1hdCB3ZSBjYW4gb3V0cHV0 KSAqLwogI2RlZmluZSBLX1ZFUlNfTUFKT1IgMQotI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTQKKyNk ZWZpbmUgS19WRVJTX01JTk9SIDE1CiAjZGVmaW5lIEtfVkVSU19SRVYgMAogI2RlZmluZSBLX1ZF UlNfU0VMRiBNQUtFX0FSQ0hJVkVfVkVSU0lPTihLX1ZFUlNfTUFKT1IsIEtfVkVSU19NSU5PUiwg S19WRVJTX1JFVikKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0 b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKaW5kZXggNmEyMTEyYzQ1 Zi4uNDllYzBlMzgxNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0 b20uYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgsNyAr Mjk4LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCV9X cml0ZUJ5dGUoQUgsIEJMS19EQVRBKTsJLyogQmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFILCB0 ZS0+ZHVtcElkKTsJLyogRm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9jYXRl Q29tcHJlc3NvcihBSC0+Y29tcHJlc3Nfc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5j cyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Nfc3BlYywKKwkJCQkJCQkJIE5VTEws CisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywxNSArMzE5LDE1 IEBAIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKQogCUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYgKGRMZW4gPiAw KQotCQkvKiBXcml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJv cnMgKi8KLQkJV3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywgZGF0YSwgZExlbik7CisJCS8qIHdy aXRlRGF0YSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLworCQljcy0+d3JpdGVE YXRhKEFILCBjcywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIGFyY2hp dmVyIHdoZW4gYSBkdW1wZXIncyAnRGF0YUR1bXBlcicgcm91dGluZSBoYXMKICAqIGZpbmlzaGVk LgogICoKLSAqIE9wdGlvbmFsLgorICogTWFuZGF0b3J5LgogICovCiBzdGF0aWMgdm9pZAogX0Vu ZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKQEAgLTMzMyw2ICszMzUsOCBA QCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29tcHJlc3NvcihB SCwgY3R4LT5jcyk7CisJY3R4LT5jcyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBlbmQgbWFya2Vy ICovCiAJV3JpdGVJbnQoQUgsIDApOwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9TdGFydEJsb2Io QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCVdyaXRlSW50KEFI LCBvaWQpOwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Nfc3Bl YywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+ Y29tcHJlc3Nfc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5j KTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1NzIsMTIgQEAgX1ByaW50VG9jRGF0YShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKQogc3RhdGljIHZvaWQKIF9QcmludERhdGEoQXJjaGl2ZUhh bmRsZSAqQUgpCiB7Ci0JUmVhZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgtPmNvbXByZXNzX3NwZWMs IF9DdXN0b21SZWFkRnVuYyk7CisJQ29tcHJlc3NvclN0YXRlICpjczsKKworCWNzID0gQWxsb2Nh dGVDb21wcmVzc29yKEFILT5jb21wcmVzc19zcGVjLAorCQkJCQkJCV9DdXN0b21SZWFkRnVuYywg TlVMTCk7CisJY3MtPnJlYWREYXRhKEFILCBjcyk7CisJRW5kQ29tcHJlc3NvcihBSCwgY3MpOwog fQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9k aXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXgg N2QyY2RkYmIyYy4uZTFjZTJmMzkzYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9y eS5jCkBAIC01MCw5ICs1MCw5IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGly ZWN0b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmls ZSAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqZGF0YUZIOyAvKiBjdXJyZW50bHkgb3BlbiBkYXRh IGZpbGUgKi8KIAotCWNmcAkJICAgKmJsb2JzVG9jRkg7CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxv YnMudG9jICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpibG9ic1RvY0ZIOyAvKiBmaWxlIGhhbmRs ZSBmb3IgYmxvYnMudG9jICovCiAJUGFyYWxsZWxTdGF0ZSAqcHN0YXRlOwkJLyogZm9yIHBhcmFs bGVsIGJhY2t1cCAvIHJlc3RvcmUgKi8KIH0gbGNsQ29udGV4dDsKIApAQCAtMTk4LDExICsxOTgs MTEgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UK IAl7CQkJCQkJCS8qIFJlYWQgTW9kZSAqLwogCQljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwotCQlj ZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsKIAogCQlzZXRGaWxl UGF0aChBSCwgZm5hbWUsICJ0b2MuZGF0Iik7CiAKLQkJdG9jRkggPSBjZm9wZW5fcmVhZChmbmFt ZSwgUEdfQklOQVJZX1IpOworCQl0b2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRs ZShmbmFtZSwgUEdfQklOQVJZX1IpOwogCQlpZiAodG9jRkggPT0gTlVMTCkKIAkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAKQEAgLTIx OCw3ICsyMTgsNyBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCVJlYWRUb2MoQUgpOwogCiAJCS8qIE5vdGhpbmcgZWxzZSBpbiB0aGUgZmlsZSwgc28gY2xv c2UgaXQgYWdhaW4uLi4gKi8KLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9IDApCisJCWlmIChEZXN0 cm95Q29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJY3R4LT5kYXRhRkggPSBOVUxMOwogCX0KQEAgLTMy Nyw5ICszMjcsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiAKIAlzZXRGaWxlUGF0aChBSCwgZm5hbWUsIHRjdHgtPmZpbGVuYW1lKTsKIAotCWN0eC0+ZGF0 YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywKLQkJCQkJCQkgICBBSC0+Y29t cHJlc3Nfc3BlYyk7Ci0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc19zcGVjKTsKKworCWlmIChjdHgtPmRh dGFGSC0+b3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9 CiAKQEAgLTM0NiwxNSArMzQ2LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVEYXRhKEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKIHsKIAlsY2xDb250ZXh0 ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChkTGVuID4gMCAmJiBj ZndyaXRlKGRhdGEsIGRMZW4sIGN0eC0+ZGF0YUZIKSAhPSBkTGVuKQorCWlmIChkTGVuID4gMCAm JiBDRkgtPndyaXRlKGRhdGEsIGRMZW4sIENGSCkgIT0gZExlbikKIAl7CiAJCS8qIGlmIHdyaXRl IGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJ aWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5v dCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0 YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yKENGSCkpOwogCX0KIH0KIApAQCAtMzcwLDcgKzM3 MSw3IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJbGNsQ29u dGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAkvKiBDbG9zZSB0 aGUgZmlsZSAqLwotCWlmIChjZmNsb3NlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCWlmIChEZXN0cm95 Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIGRhdGEgZmlsZTogJW0iKTsKIAogCWN0eC0+ZGF0YUZIID0gTlVMTDsKQEAgLTM4 NSwyNiArMzg2LDI1IEBAIF9QcmludEZpbGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICpm aWxlbmFtZSkKIAlzaXplX3QJCWNudDsKIAljaGFyCSAgICpidWY7CiAJc2l6ZV90CQlidWZsZW47 Ci0JY2ZwCQkgICAqY2ZwOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCiAJaWYgKCFmaWxl bmFtZSkKIAkJcmV0dXJuOwogCi0JY2ZwID0gY2ZvcGVuX3JlYWQoZmlsZW5hbWUsIFBHX0JJTkFS WV9SKTsKLQotCWlmICghY2ZwKQorCUNGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRs ZShmaWxlbmFtZSwgUEdfQklOQVJZX1IpOworCWlmICghQ0ZIKQogCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCiAJYnVmID0gcGdf bWFsbG9jKFpMSUJfT1VUX1NJWkUpOwogCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLQl3aGls ZSAoKGNudCA9IGNmcmVhZChidWYsIGJ1ZmxlbiwgY2ZwKSkpCisJd2hpbGUgKChjbnQgPSBDRkgt PnJlYWQoYnVmLCBidWZsZW4sIENGSCkpKQogCXsKIAkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgp OwogCX0KIAogCWZyZWUoYnVmKTsKLQlpZiAoY2ZjbG9zZShjZnApICE9IDApCisJaWYgKERlc3Ry b3lDb21wcmVzc0ZpbGVIYW5kbGUoQ0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIGRhdGEgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogfQogCkBAIC00MzUsNiArNDM1 LDcgQEAgX0xvYWRCbG9icyhBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlPaWQJCQlvaWQ7CiAJbGNs Q29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NG aWxlSGFuZGxlICpDRkg7CiAJY2hhcgkJdG9jZm5hbWVbTUFYUEdQQVRIXTsKIAljaGFyCQlsaW5l W01BWFBHUEFUSF07CiAKQEAgLTQ0MiwxNCArNDQzLDE0IEBAIF9Mb2FkQmxvYnMoQXJjaGl2ZUhh bmRsZSAqQUgpCiAKIAlzZXRGaWxlUGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAot CWN0eC0+YmxvYnNUb2NGSCA9IGNmb3Blbl9yZWFkKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CisJ Q0ZIID0gY3R4LT5ibG9ic1RvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKHRv Y2ZuYW1lLCBQR19CSU5BUllfUik7CiAKIAlpZiAoY3R4LT5ibG9ic1RvY0ZIID09IE5VTEwpCiAJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZv ciBpbnB1dDogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKIAkvKiBSZWFkIHRoZSBibG9icyBUT0Mg ZmlsZSBsaW5lLWJ5LWxpbmUsIGFuZCBwcm9jZXNzIGVhY2ggYmxvYiAqLwotCXdoaWxlICgoY2Zn ZXRzKGN0eC0+YmxvYnNUb2NGSCwgbGluZSwgTUFYUEdQQVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAo KENGSC0+Z2V0cyhsaW5lLCBNQVhQR1BBVEgsIENGSCkpICE9IE5VTEwpCiAJewogCQljaGFyCQli bG9iZm5hbWVbTUFYUEdQQVRIICsgMV07CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2 NCwxMSArNDY1LDExIEBAIF9Mb2FkQmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCV9QcmludEZp bGVEYXRhKEFILCBwYXRoKTsKIAkJRW5kUmVzdG9yZUJsb2IoQUgsIG9pZCk7CiAJfQotCWlmICgh Y2Zlb2YoY3R4LT5ibG9ic1RvY0ZIKSkKKwlpZiAoIUNGSC0+ZW9mKENGSCkpCiAJCXBnX2ZhdGFs KCJlcnJvciByZWFkaW5nIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCIiLAogCQkJCSB0b2Nm bmFtZSk7CiAKLQlpZiAoY2ZjbG9zZShjdHgtPmJsb2JzVG9jRkgpICE9IDApCisJaWYgKERlc3Ry b3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5ibG9ic1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgi Y291bGQgbm90IGNsb3NlIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkg dG9jZm5hbWUpOwogCkBAIC00ODgsMTUgKzQ4OSwxNiBAQCBfV3JpdGVCeXRlKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBpbnQgaSkKIHsKIAl1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hh cikgaTsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsK KwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwot CWlmIChjZndyaXRlKCZjLCAxLCBjdHgtPmRhdGFGSCkgIT0gMSkKKwlpZiAoQ0ZILT53cml0ZSgm YywgMSwgQ0ZIKSAhPSAxKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNz dW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJCWVy cm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBmaWxl OiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRf ZXJyb3IoQ0ZIKSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC01MTIsOCArNTE0LDkgQEAgc3RhdGlj IGludAogX1JlYWRCeXRlKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCWxjbENvbnRleHQgKmN0eCA9 IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI ID0gY3R4LT5kYXRhRkg7CiAKLQlyZXR1cm4gY2ZnZXRjKGN0eC0+ZGF0YUZIKTsKKwlyZXR1cm4g Q0ZILT5nZXRjKENGSCk7CiB9CiAKIC8qCkBAIC01MjQsMTUgKzUyNywxNiBAQCBzdGF0aWMgdm9p ZAogX1dyaXRlQnVmKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBs ZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsK LQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT53 cml0ZShidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0 IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9 PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8g b3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJ CSBDRkgtPmdldF9lcnJvcihDRkgpKTsKIAl9CiB9CiAKQEAgLTU0NSwxMiArNTQ5LDEzIEBAIHN0 YXRpYyB2b2lkCiBfUmVhZEJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgdm9pZCAqYnVmLCBzaXplX3Qg bGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRh OworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAkvKgotCSAqIElm IHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIGNmcmVhZCgpLCBz byBoZXJlIHdlCisJICogSWYgdGhlcmUgd2FzIGFuIEkvTyBlcnJvciwgd2UgYWxyZWFkeSBleGl0 ZWQgaW4gcmVhZEYoKSwgc28gaGVyZSB3ZQogCSAqIGV4aXQgb24gc2hvcnQgcmVhZHMuCiAJICov Ci0JaWYgKGNmcmVhZChidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT5y ZWFkKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZy b20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKIH0KIApAQCAtNTczLDcgKzU3OCw3IEBAIF9D bG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1v ZGVXcml0ZSkKIAl7Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRv Y0ZIOwogCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7MH07CiAJ CWNoYXIJCWZuYW1lW01BWFBHUEFUSF07CiAKQEAgLTU4NCw4ICs1ODksOCBAQCBfQ2xvc2VBcmNo aXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qIFRoZSBUT0MgaXMgYWx3YXlzIGNyZWF0ZWQg dW5jb21wcmVzc2VkICovCiAJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKLQkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjb21w cmVzc19zcGVjKTsKLQkJaWYgKHRvY0ZIID09IE5VTEwpCisJCXRvY0ZIID0gSW5pdENvbXByZXNz RmlsZUhhbmRsZShjb21wcmVzc19zcGVjKTsKKwkJaWYgKHRvY0ZILT5vcGVuX3dyaXRlKGZuYW1l LCBQR19CSU5BUllfVywgdG9jRkgpKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1 dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAJCWN0eC0+ZGF0YUZIID0gdG9jRkg7CiAKQEAg LTU5OCw3ICs2MDMsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlXcml0 ZUhlYWQoQUgpOwogCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKIAkJV3JpdGVUb2MoQUgp OwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVI YW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxl OiAlbSIpOwogCQlXcml0ZURhdGFDaHVua3MoQUgsIGN0eC0+cHN0YXRlKTsKIApAQCAtNjQ5LDgg KzY1NCw4IEBAIF9TdGFydEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAK IAkvKiBUaGUgYmxvYiBUT0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Nf c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+YmxvYnNUb2NGSCA9 IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgY29tcHJlc3Nfc3BlYyk7Ci0JaWYgKGN0eC0+Ymxv YnNUb2NGSCA9PSBOVUxMKQorCWN0eC0+YmxvYnNUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5k bGUoY29tcHJlc3Nfc3BlYyk7CisJaWYgKGN0eC0+YmxvYnNUb2NGSC0+b3Blbl93cml0ZShmbmFt ZSwgImFiIiwgY3R4LT5ibG9ic1RvY0ZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTY2Nyw5ICs2NzIsOCBAQCBf U3RhcnRCbG9iKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlz bnByaW50ZihmbmFtZSwgTUFYUEdQQVRILCAiJXMvYmxvYl8ldS5kYXQiLCBjdHgtPmRpcmVjdG9y eSwgb2lkKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllf VywgQUgtPmNvbXByZXNzX3NwZWMpOwotCi0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4 LT5kYXRhRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc19zcGVjKTsKKwlp ZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFG SCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwg Zm5hbWUpOwogfQogCkBAIC02ODIsMTcgKzY4NiwxOCBAQCBzdGF0aWMgdm9pZAogX0VuZEJsb2Io QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIHsKIAlsY2xDb250ZXh0 ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCA9IGN0eC0+YmxvYnNUb2NGSDsKIAljaGFyCQlidWZbNTBdOwogCWludAkJCWxlbjsK IAogCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEgZmlsZSBpdHNlbGYgKi8KLQlpZiAoY2ZjbG9zZShj dHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShjdHgtPmRh dGFGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBibG9iIGRhdGEgZmlsZTog JW0iKTsKIAljdHgtPmRhdGFGSCA9IE5VTEw7CiAKIAkvKiByZWdpc3RlciB0aGUgYmxvYiBpbiBi bG9icy50b2MgKi8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8l dS5kYXRcbiIsIG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5ibG9ic1Rv Y0ZIKSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGUoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCQlw Z19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIGJsb2JzIFRPQyBmaWxlIik7CiB9CiAKQEAgLTcw Niw3ICs3MTEsNyBAQCBfRW5kQmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkK IHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAot CWlmIChjZmNsb3NlKGN0eC0+YmxvYnNUb2NGSCkgIT0gMCkKKwlpZiAoRGVzdHJveUNvbXByZXNz RmlsZUhhbmRsZShjdHgtPmJsb2JzVG9jRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y2xvc2UgYmxvYnMgVE9DIGZpbGU6ICVtIik7CiAJY3R4LT5ibG9ic1RvY0ZIID0gTlVMTDsKIH0K LS0gCjIuMzQuMQoK --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck Content-Type: text/x-patch; name=v8-0005-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0005-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSBlZmQ1YWNkMGRjNGRlZGFiOGZlODIzYTkyMjM0MDRhNDNiYTI3OGQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjMgTm92IDIwMjIgMTY6NTk6MDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHY4 IDUvNV0gQWRkIExaNCBjb21wcmVzc2lvbiBpbiBwZ197ZHVtcHxyZXN0b3JlfQoKV2l0aGluIGNv bXByZXNzX2x6NC57YyxofSB0aGUgc3RyZWFtaW5nIEFQSSBhbmQgYSBmaWxlIEFQSSBjb21wcmVz c2lvbiBpcwppbXBsZW1lbnRlZC4uIFRoZSBmaXJzdCBvbmUsIGlzIGFpbWVkIGF0IGlubGluZWQg dXNlIGNhc2VzIGFuZCB0aHVzIHNpbXBsZQpsejQuaCBjYWxscyBjYW4gYmUgdXNlZCBkaXJlY3Rs eS4gVGhlIHNlY29uZCBvbmUgaXMgZ2VuZXJhdGluZyBvdXRwdXQsIG9yIGlzCnBhcnNpbmcgaW5w dXQsIHdoaWNoIGNhbiBiZSByZWFkL2dlbmVyYXRlZCB2aWEgdGhlIGx6NCB1dGlsaXR5LgoKV2hl cmV2ZXIgdGhlIExaNEYgYXBpIGRvZXMgbm90IGltcGxlbWVudCBhbGwgdGhlIGZ1bmN0aW9uYWxp dHkgY29ycmVzcG9uZGluZwp0byBmcmVhZCgpLCBmd3JpdGUoKSwgZmdldHMoKSwgZmdldGMoKSwg ZmVvZigpLCBhbmQgZmNsb3NlKCksIGl0IGhhcyBiZWVuCmltcGxlbWVudGVkIGxvY2FseS4KLS0t CiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCAgICAgICAgfCAgMjMgKy0KIHNyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYyAgICAgICAgfCAgNDEgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu YyAgICAgICB8IDU5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19sejQuaCAgICAgICB8ICAgOSArCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YyB8ICAxNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICB8ICA2OSArKystCiAxMCBmaWxlcyBjaGFuZ2Vk LCA3MzIgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19kdW1wLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAppbmRleCAzZmI4ZmRj ZTgxLi44NGQzNzc4Yzk5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMzI4LDkgKzMyOCwxMCBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgICAgbWFjaGluZS1yZWFkYWJsZSBm b3JtYXQgdGhhdCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICAgICAg ICAgIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3JtYXQgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0 ZWQgd2l0aAogICAgICAgICAgICBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmls ZXMgaW4gYW4gdW5jb21wcmVzc2VkIGFyY2hpdmUKLSAgICAgICAgICAgY2FuIGJlIGNvbXByZXNz ZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiB0b29sLgotICAgICAg ICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgYW5kIGFsc28gc3VwcG9y dHMgcGFyYWxsZWwKLSAgICAgICAgICAgZHVtcHMuCisgICAgICAgICAgIGNhbiBiZSBjb21wcmVz c2VkIHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gb3IKKyAgICAgICAg ICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+dG9vbC4KKyAgICAgICAgICAgVGhpcyBm b3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IHVzaW5nIDxsaXRlcmFsPmd6aXA8L2xpdGVy YWw+CisgICAgICAgICAgIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgogICAgICAg ICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgIDwvdmFybGlzdGVudHJ5 PgpAQCAtNjUyLDEyICs2NTMsMTIgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAg PHBhcmE+CiAgICAgICAgIFNwZWNpZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhl IGNvbXByZXNzaW9uIGxldmVsIHRvIHVzZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhv ZCBjYW4gYmUgc2V0IHRvIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRl cmFsPm5vbmU8L2xpdGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4gQSBjb21wcmVzc2lvbiBsZXZl bCBjYW4KLSAgICAgICAgYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQsIGJ5IGFwcGVuZGluZyB0aGUg bGV2ZWwgbnVtYmVyIGFmdGVyIGEgY29sb24KLSAgICAgICAgKDxsaXRlcmFsPjo8L2xpdGVyYWw+ KS4gSWYgbm8gbGV2ZWwgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbgotICAg ICAgICBsZXZlbCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLiBJZiBvbmx5 IGEgbGV2ZWwgaXMKLSAgICAgICAgc3BlY2lmaWVkIHdpdGhvdXQgbWVudGlvbmluZyBhIG1ldGhv ZCwgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gY29tcHJlc3Npb24KLSAgICAgICAgd2lsbCBiZSB1 c2VkLgorICAgICAgICA8bGl0ZXJhbD5sejQ8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPm5vbmU8L2xp dGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4gQQorICAgICAgICBjb21wcmVzc2lvbiBsZXZlbCBj YW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQsIGJ5IGFwcGVuZGluZyB0aGUgbGV2ZWwKKyAgICAg ICAgbnVtYmVyIGFmdGVyIGEgY29sb24gKDxsaXRlcmFsPjo8L2xpdGVyYWw+KS4gSWYgbm8gbGV2 ZWwgaXMgc3BlY2lmaWVkLAorICAgICAgICB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbCB3 aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLiBJZgorICAgICAgICBvbmx5IGEg bGV2ZWwgaXMgc3BlY2lmaWVkIHdpdGhvdXQgbWVudGlvbmluZyBhIG1ldGhvZCwKKyAgICAgICAg PGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gY29tcHJlc3Npb24gd2lsbGJlIHVzZWQuCiAgICAgICAg PC9wYXJhPgogCiAgICAgICAgPHBhcmE+CkBAIC02NjUsOCArNjY2LDggQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICAgIGluZGl2aWR1YWwgdGFibGUtZGF0YSBzZWdtZW50cywgYW5k IHRoZSBkZWZhdWx0IGlzIHRvIGNvbXByZXNzIHVzaW5nCiAgICAgICAgIDxsaXRlcmFsPmd6aXA8 L2xpdGVyYWw+IGF0IGEgbW9kZXJhdGUgbGV2ZWwuIEZvciBwbGFpbiB0ZXh0IG91dHB1dCwKICAg ICAgICAgc2V0dGluZyBhIG5vbnplcm8gY29tcHJlc3Npb24gbGV2ZWwgY2F1c2VzIHRoZSBlbnRp cmUgb3V0cHV0IGZpbGUgdG8gYmUgY29tcHJlc3NlZCwKLSAgICAgICAgYXMgdGhvdWdoIGl0IGhh ZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj47IGJ1dCB0 aGUgZGVmYXVsdAotICAgICAgICBpcyBub3QgdG8gY29tcHJlc3MuCisgICAgICAgIGFzIHRob3Vn aCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+ IG9yCisgICAgICAgIDxhcHBsaWNhdGlvbj5sejQ8L2FwcGxpY2F0aW9uPjsgYnV0IHRoZSBkZWZh dWx0IGlzIG5vdCB0byBjb21wcmVzcy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAg ICAgICAgIFRoZSB0YXIgYXJjaGl2ZSBmb3JtYXQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQg Y29tcHJlc3Npb24gYXQgYWxsLgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxl IGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDI5ZWFiMDJkMzcuLjI4YzFmYzI3Y2Mg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1 bXAvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4KIGlu Y2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAogZXhwb3J0IEdaSVBf UFJPR1JBTT0kKEdaSVApCitleHBvcnQgTFo0CiBleHBvcnQgd2l0aF9pY3UKIAogb3ZlcnJpZGUg Q1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBGTEFHUykKQEAgLTI1LDYgKzI2LDcg QEAgTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVfdXRpbHMgLWxw Z2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiBPQkpTID0gXAogCSQoV0lOMzJSRVMpIFwKIAljb21w cmVzc19nemlwLm8gXAorCWNvbXByZXNzX2x6NC5vIFwKIAljb21wcmVzc19pby5vIFwKIAlkdW1w dXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IDMwNjViZDc2 ZmEuLjI5ZTIzNTJjMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC0zOCwxMyArMzgsMTUgQEAK ICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKglUaGUgY29tcHJlc3NlZCBzdHJlYW0g QVBJIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgc3RhbmRhcmQgZm9wZW4oKSBhbmQKLSAqCWxp YnoncyBnem9wZW4oKSBBUElzLiBJdCBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlv bnMgZm9yCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgc3RyZWFtcy4gY2ZvcGVuX3Jl YWQoKSBmaXJzdCB0cmllcyB0byBvcGVuCi0gKgl0aGUgZmlsZSB3aXRoIGdpdmVuIG5hbWUsIGFu ZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZQotICoJZmlsZSB3aXRoIHRo ZSAuZ3ogc3VmZml4LiBjZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdyaXRpbmcsIGFu Ci0gKglleHRyYSBhcmd1bWVudCBzcGVjaWZpZXMgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGNvbXBy ZXNzZWQsIGFuZCBhZGRzIHRoZQotICoJLmd6IHN1ZmZpeCB0byB0aGUgZmlsZW5hbWUgaWYgc28u IFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFuZGxlIGJvdGgKLSAqCWNvbXByZXNzZWQgYW5k IHVuY29tcHJlc3NlZCBmaWxlcy4KKyAqCWxpYnoncyBnem9wZW4oKSBBUElzIGFuZCBjdXN0b20g TFo0IGNhbGxzIHdoaWNoIHByb3ZpZGUgc2ltaWxhcgorICoJZnVuY3Rpb25hbGl0eS4gSXQgYWxs b3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvciBjb21wcmVzc2VkIGFuZAorICoJ dW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbiB0 aGUgZmlsZSB3aXRoIGdpdmVuCisgKgluYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRv IG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3ogc3VmZml4LAorICoJZmFpbGluZyB0aGF0 IGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAubHo0IHN1ZmZpeC4KKyAq CWNmb3Blbl93cml0ZSgpIG9wZW5zIGEgZmlsZSBmb3Igd3JpdGluZywgYW4gZXh0cmEgYXJndW1l bnQgc3BlY2lmaWVzIHRoZQorICoJbWV0aG9kIHRvIHVzZSBzaG91bGQgdGhlIGZpbGUgYmUgY29t cHJlc3NlZCwgYW5kIGFkZHMgdGhlIGFwcHJvcHJpYXRlCisgKglzdWZmaXgsIC5neiBvciAubHo0 LCB0byB0aGUgZmlsZW5hbWUgaWYgc28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFuZGxl CisgKglib3RoIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KICAqCiAgKiBJREVO VElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU3LDYg KzU5LDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiY29tcHJlc3Nf Z3ppcC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6NC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCiAjaWZkZWYgSEFWRV9MSUJaCkBAIC0xMjksNiArMTMyLDkgQEAgQWxsb2NhdGVD b21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywK IAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogCQkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBj b21wcmVzc19zcGVjLmxldmVsKTsKIAkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xa NDoKKwkJCUluaXRDb21wcmVzc29yTFo0KGNzLCBjb21wcmVzc19zcGVjLmxldmVsKTsKKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9k Iik7CiAJCQlicmVhazsKQEAgLTE3OSw2ICsxODUsNyBAQCBmcmVlX2tlZXBfZXJybm8odm9pZCAq cCkKIC8qCiAgKiBDb21wcmVzc2lvbiBOb25lIGltcGxlbWVudGF0aW9uCiAgKi8KKwogc3RhdGlj IHNpemVfdAogX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxl ICogQ0ZIKQogewpAQCAtMzE0LDYgKzMyMSw5IEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogCQljYXNlIFBHX0NP TVBSRVNTSU9OX0daSVA6CiAJCQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29tcHJlc3Nfc3BlYy5s ZXZlbCk7CiAJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlJbml0Q29t cHJlc3NMWjQoQ0ZILCBjb21wcmVzc19zcGVjLmxldmVsKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0 OgogCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CiAJCQlicmVhazsK QEAgLTMyNiwxMiArMzM2LDEyIEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogICogT3BlbiBhIGZpbGUgZm9yIHJl YWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNob3VsZAogICog YmUgZWl0aGVyICJyIiBvciAicmIiLgogICoKLSAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBkb2Vz IG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlmCisgKiBJZiB0aGUgZmls ZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgInsuZ3osLmx6NH0iIHN1 ZmZpeCAoaQogICogJ3BhdGgnIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5IGFnYWlu LiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcwotICogJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBlaXRo ZXIgImZvbyIgb3IgImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgorICogJ3BhdGgnLCB0 aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIgb3IgImZvby5sejQiLCB0cnlp bmcgaW4gdGhhdAorICogb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0 aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgotICoKICAqLwogQ29tcHJlc3NGaWxlSGFuZGxlICoK IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBj aGFyICptb2RlKQpAQCAtMzY3LDYgKzM3NywxNyBAQCBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVI YW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIAkJCWlmIChleGlzdHMp CiAJCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCQl9 CisjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJCWlmICghZXhpc3RzKQorCQl7CisJCQlmcmVlX2tl ZXBfZXJybm8oZm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMubHo0IiwgcGF0aCk7CisJ CQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJ CQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xaNDsKKwkJfQogI2Vu ZGlmCiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgYi9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uNmY0NjgwYzM0NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19sejQuYwpAQCAtMCwwICsxLDU5MyBAQAorI2luY2x1ZGUgInBvc3RncmVzX2Zl LmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpbmNsdWRlICJjb21wcmVzc19s ejQuaCIKKworI2lmZGVmIFVTRV9MWjQKKyNpbmNsdWRlIDxsejQuaD4KKyNpbmNsdWRlIDxsejRm cmFtZS5oPgorCisjZGVmaW5lIExaNF9PVVRfU0laRQkoNCAqIDEwMjQpCisjZGVmaW5lIExaNF9J Tl9TSVpFCQkoMTYgKiAxMDI0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXBy ZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVj dCBMWjRDb21wcmVzc29yU3RhdGUKK3sKKwljaGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRz aXplOworfQkJCUxaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0 IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkIFJlYWREYXRh RnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwor c3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUxaNChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRfc3RyZWFtRGVj b2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAgICpkZWNidWY7 CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBMWjRfSU5fU0la RTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxsb2MoYnVmbGVu KTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVMTCwgMCk7CisK Kwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50 CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRTdHJlYW1EZWNv ZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJCWNudCwgYnVm bGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9CisKKwlwZ19m cmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRh VG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXByZXNzb3JTdGF0 ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOworCXNpemVfdAkJ Y29tcHJlc3NlZDsKKwlzaXplX3QJCXJlcXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0JvdW5kKGRM ZW4pOworCisJaWYgKHJlcXVpcmVkc2l6ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJTFo0Y3Mt Pm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsKKwkJTFo0 Y3MtPm91dHNpemUgPSByZXF1aXJlZHNpemU7CisJfQorCisJY29tcHJlc3NlZCA9IExaNF9jb21w cmVzc19kZWZhdWx0KGRhdGEsIExaNGNzLT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNz LT5vdXRzaXplKTsKKworCWlmIChjb21wcmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQg dG8gTFo0IGNvbXByZXNzIGRhdGEiKTsKKworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYs IGNvbXByZXNzZWQpOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUg KkxaNGNzOworCisJTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlOwor CWlmIChMWjRjcykKKwl7CisJCXBnX2ZyZWUoTFo0Y3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoTFo0 Y3MpOworCQljcy0+cHJpdmF0ZSA9IE5VTEw7CisJfQorfQorCisKKy8qIFB1YmxpYyByb3V0aW5l cyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21w cmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKQorewor CWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVMWjQ7CisJY3MtPndyaXRlRGF0YSA9 IFdyaXRlRGF0YVRvQXJjaGl2ZUxaNDsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3NvckxaNDsKKwor CS8qIFdpbGwgYmUgbGF6eSBpbml0J2QgKi8KKwljcy0+cHJpdmF0ZSA9IHBnX21hbGxvYzAoc2l6 ZW9mKExaNENvbXByZXNzb3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisv KgorICogU3RhdGUgbmVlZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5nIHRoZSBDb21w cmVzc0ZpbGVIYW5kbGUgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxlCit7CisJRklM RQkgICAqZnA7CisKKwlMWjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRGX2NvbXByZXNz aW9uQ29udGV4dF90IGN0eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QgZHR4OworCisJ Ym9vbAkJaW5pdGVkOworCWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQlidWZsZW47CisJ Y2hhcgkgICAqYnVmZmVyOworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAkJ b3ZlcmZsb3dsZW47CisJY2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJCWVycmNvZGU7 Cit9CQkJTFo0RmlsZTsKKworLyoKKyAqIExaNCBlcXVpdmFsZW50IHRvIGZlb2YoKSBvciBnemVv ZigpLiBUaGUgZW5kIG9mIGZpbGUKKyAqIGlzIHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gZGVjb21w cmVzc2VkIG91dHB1dCBpbiB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciBhbmQgdGhlIGVuZCBvZiB0 aGUgZmlsZSBpcyByZWFjaGVkLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2VvZihDb21wcmVz c0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgt PnByaXZhdGU7CisKKwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09IDAgJiYgZmVvZihmcy0+ZnAp OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dldF9lcnJvcihDb21wcmVzc0Zp bGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnBy aXZhdGU7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZfaXNFcnJvcihmcy0+ZXJy Y29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5lcnJjb2RlKTsKKwllbHNl CisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBlcnJtc2c7Cit9CisKKy8q CisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBzdHJ1Y3QgZm9yIHN1YnNl cXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVzc2FyeSBjb250ZXh0cyBmb3Ig dGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBpdCBhZGRpdGlvbmFsbHkgd3Jp dGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3RyZWFtLgorICovCitzdGF0aWMgaW50 CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQgc2l6ZSwgYm9vbCBjb21wcmVzc2luZykK K3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+aW5pdGVkKQorCQlyZXR1cm4gMDsKKwor CWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNzaW5nOworCWZzLT5pbml0ZWQgPSB0cnVlOworCisJ aWYgKGZzLT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5idWZsZW4gPSBMWjRGX2NvbXByZXNzQm91 bmQoTFo0X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlpZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVB REVSX1NJWkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVSX1NJWkVfTUFYOworCisJ CXN0YXR1cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZF UlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2Rl ID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9j KGZzLT5idWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVnaW4oZnMtPmN0eCwgZnMt PmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMpOworCisJCWlmIChMWjRG X2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1 cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnAp ICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOworCQkJcmV0dXJu IDE7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVEZWNvbXByZXNz aW9uQ29udGV4dCgmZnMtPmR0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYgKExaNEZfaXNFcnJvcihz dGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9 CisKKwkJZnMtPmJ1ZmxlbiA9IHNpemUgPiBMWjRfT1VUX1NJWkUgPyBzaXplIDogTFo0X09VVF9T SVpFOworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCisJCWZzLT5vdmVy Zmxvd2FsbG9jbGVuID0gZnMtPmJ1ZmxlbjsKKwkJZnMtPm92ZXJmbG93YnVmID0gcGdfbWFsbG9j KGZzLT5vdmVyZmxvd2FsbG9jbGVuKTsKKwkJZnMtPm92ZXJmbG93bGVuID0gMDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYWxyZWFkeSBkZWNvbXByZXNzZWQgY29udGVudCBm cm9tIHRoZSBvdmVyZmxvdyBidWZmZXIgaW50byAncHRyJyB1cCB0bworICogJ3NpemUnIGJ5dGVz LCBpZiBhdmFpbGFibGUuIElmIHRoZSBlb2xfZmxhZyBpcyBzZXQsIHRoZW4gc3RvcCBhdCB0aGUg Zmlyc3QKKyAqIG9jY3VyYW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6ZScg Ynl0ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZmZXIs IGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVh ZF9vdmVyZmxvdyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wgZW9sX2Zs YWcpCit7CisJY2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsKKworCWlmIChmcy0+b3Zl cmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID49IHNp emUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVyZmxvd2xl bjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYsICdcbics IHJlYWRsZW4pKSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0ZXJtaW5hdGluZyBjaGFyICovCisJ CXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJmbG93YnVmICsgMTsKKworCW1lbWNweShwdHIsIGZzLT5v dmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisKKwlp ZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZzLT5v dmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVhZGxl bjsKK30KKworLyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2VkIGNv bnRlbnQgb3V0IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQgd2ls bCByZWFkIHVwIHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8gdGhl IG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlzIHNl dC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2VuZXJh dGVkIGJ5IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwgZXhj ZWVkcworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50IGlz IHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBjb3Vy c2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5IHRv IGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0aGUg b3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQuCisg Ki8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRGaWxlICogZnMsIHZvaWQg KnB0ciwgaW50IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJc2l6ZV90CQlkc2l6ZSA9IDA7 CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBwdHJzaXplOworCWJvb2wJCWVvbF9m b3VuZCA9IGZhbHNlOworCisJdm9pZAkgICAqcmVhZGJ1ZjsKKworCS8qIExhenkgaW5pdCAqLwor CWlmICghZnMtPmluaXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIGZhbHNlIC8qIGRlY29t cHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyZml5IHRoYXQgdGhlcmUgaXMg ZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6ZSA+IGZzLT5idWZsZW4pCisJ eworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9IHBnX3JlYWxsb2MoZnMtPmJ1 ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQg aWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfb3ZlcmZsb3coZnMsIHB0ciwg c2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8IChlb2xfZmxhZyAmJiBtZW1j aHIocHRyLCAnXG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7CisKKwlyZWFkYnVmID0gcGdf bWFsbG9jKHNpemUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJwOworCQljaGFyCSAgICpyZW5k OworCisJCXJzaXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMtPmZwKTsKKwkJaWYgKHJz aXplIDwgc2l6ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0xOworCisJCXJwID0gKGNo YXIgKikgcmVhZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYgKyByc2l6ZTsKKworCQl3 aGlsZSAocnAgPCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsKKwkJCXNpemVfdAkJb3V0 bGVuID0gZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4gPSByZW5kIC0gcnA7CisK KwkJCW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3RhdHVzID0gTFo0Rl9kZWNv bXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJCQkJCQkgcnAsICZyZWFk X3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQl7CisJCQkJ ZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlycCArPSBy ZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFjZSBpcyBhdmFpbGFi bGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBlaXRoZXIgc2tpcCBpZiBv bmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBwcmVzZW50CisJCQkgKiBpbiB0 aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYmIGRzaXplIDwgc2l6ZSAmJiBl b2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAqcDsKKwkJCQlzaXplX3QJCWxp YiA9IChlb2xfZmxhZyA9PSAwKSA/IHNpemUgLSBkc2l6ZSA6IHNpemUgLSAxIC0gZHNpemU7CisJ CQkJc2l6ZV90CQlsZW4gPSBvdXRsZW4gPCBsaWIgPyBvdXRsZW4gOiBsaWI7CisKKwkJCQlpZiAo ZW9sX2ZsYWcgPT0gdHJ1ZSAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+YnVmZmVyLCAnXG4nLCBv dXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIgKyAxKSA8PSBsZW4pCisJ CQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJCWVvbF9mb3VuZCA9IHRy dWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRzaXplLCBmcy0+YnVmZmVy LCBsZW4pOworCQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQgbm90IGZp dCwgaWYgYW55LCBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlIGJ1ZiAqLworCQkJCWlmIChsZW4gPCBv dXRsZW4pCisJCQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZlciArIGxlbiwgb3V0bGVu IC0gbGVuKTsKKwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkvKiBpZiB0aGVyZSBpcyBh dmFpbGFibGUgb3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVuID4gMCkKKwkJCXsKKwkJ CQl3aGlsZSAoZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92ZXJmbG93YWxsb2NsZW4p CisJCQkJeworCQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOworCQkJCQlmcy0+b3ZlcmZs b3didWYgPSBwZ19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJCQkJCQkJCSBmcy0+b3Zl cmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVyZmxvd2J1ZiArIGZz LT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+b3ZlcmZsb3dsZW4g Kz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6ZSAmJiBkc2l6ZSA8 IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVmKTsKKworCXJldHVy biAoaW50KSBkc2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUgYnl0ZXMgZnJvbSBwdHIg YW5kIHdyaXRlIHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGljIHNpemVfdAorTFo0Rmls ZV93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUg KiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7CisJ c2l6ZV90CQlzdGF0dXM7CisJaW50CQkJcmVtYWluaW5nID0gc2l6ZTsKKworCWlmICghZnMtPmlu aXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIHRydWUpKQorCQlyZXR1cm4gLTE7CisKKwl3 aGlsZSAocmVtYWluaW5nID4gMCkKKwl7CisJCWludAkJCWNodW5rID0gcmVtYWluaW5nIDwgTFo0 X0lOX1NJWkUgPyByZW1haW5pbmcgOiBMWjRfSU5fU0laRTsKKworCQlyZW1haW5pbmcgLT0gY2h1 bms7CisKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc1VwZGF0ZShmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJIHB0ciwgY2h1bmssIE5VTEwpOworCQlpZiAoTFo0Rl9p c0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJu IC0xOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkg IT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4g MTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICogZnJlYWQoKSBlcXVpdmFs ZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLworc3RhdGlj IHNpemVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmls ZUhhbmRsZSAqIENGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJp dmF0ZTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0 ciwgc2l6ZSwgZmFsc2UpOworCWlmIChyZXQgIT0gc2l6ZSAmJiAhTFo0RmlsZV9lb2YoQ0ZIKSkK KwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxl X2dldF9lcnJvcihDRkgpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBmZ2V0YygpIGVx dWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgorICovCitz dGF0aWMgaW50CitMWjRGaWxlX2dldGMoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUxa NEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlOworCXVuc2lnbmVkIGNoYXIg YzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkK Kwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVsc2UK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxl Iik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBmZ2V0cygpIGVxdWl2YWxlbnQgaW1w bGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgorICovCitzdGF0aWMgY2hhciAq CitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICog Q0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlOworCXNp emVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBz aXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQg ZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOworCisJLyogRG9u ZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJu IHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChkZSljb21wcmVzc2lvbiBvZiBhIHN0cmVhbS4g V2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRlIGFueQorICogcmVtYWluaW5nIGNvbnRlbnQg YW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0aGUgTFo0IEFQSS4KKyAqLworc3RhdGljIGlu dAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJRklMRQkgICAq ZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGU7CisJc2l6ZV90 CQlzdGF0dXM7CisJaW50CQkJcmV0OworCisJZnAgPSBmcy0+ZnA7CisJaWYgKGZzLT5pbml0ZWQp CisJeworCQlpZiAoZnMtPmNvbXByZXNzaW5nKQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2NvbXBy ZXNzRW5kKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sIE5VTEwpOworCQkJaWYgKExa NEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXByZXNz aW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQllbHNlIGlm ICgocmV0ID0gZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZwKSkgIT0gc3RhdHVz KQorCQkJeworCQkJCWVycm5vID0gZXJybm8gPyA6IEVOT1NQQzsKKwkJCQlXUklURV9FUlJPUl9F WElUOworCQkJfQorCisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVDb21wcmVzc2lvbkNvbnRleHQoZnMt PmN0eCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxl ZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0 dXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfZnJlZURlY29tcHJlc3Np b25Db250ZXh0KGZzLT5kdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBn X2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGRlY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dl dEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCXBnX2ZyZWUoZnMtPm92ZXJmbG93YnVmKTsKKwkJfQor CisJCXBnX2ZyZWUoZnMtPmJ1ZmZlcik7CisJfQorCisJcGdfZnJlZShmcyk7CisKKwlyZXR1cm4g ZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVuKGNvbnN0IGNoYXIgKnBh dGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCSBDb21wcmVzc0ZpbGVIYW5kbGUgKiBD RkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAoTFo0RmlsZSAqKSBD RkgtPnByaXZhdGU7CisKKwlpZiAoZmQgPj0gMCkKKwkJZnAgPSBmZG9wZW4oZmQsIG1vZGUpOwor CWVsc2UKKwkJZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwlpZiAoZnAgPT0gTlVMTCkKKwl7CisJ CWx6NGZwLT5lcnJjb2RlID0gZXJybm87CisJCXJldHVybiAxOworCX0KKworCWx6NGZwLT5mcCA9 IGZwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbl93cml0ZShj b25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBD RkgpCit7CisJY2hhcgkgICAqZm5hbWU7CisJaW50CQkJcmV0OworCisJZm5hbWUgPSBwc3ByaW50 ZigiJXMubHo0IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuKGZuYW1lLCAtMSwgbW9kZSwgQ0ZI KTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK0luaXRDb21w cmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKQor eworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuID0gTFo0RmlsZV9vcGVuOworCUNG SC0+b3Blbl93cml0ZSA9IExaNEZpbGVfb3Blbl93cml0ZTsKKwlDRkgtPnJlYWQgPSBMWjRGaWxl X3JlYWQ7CisJQ0ZILT53cml0ZSA9IExaNEZpbGVfd3JpdGU7CisJQ0ZILT5nZXRzID0gTFo0Rmls ZV9nZXRzOworCUNGSC0+Z2V0YyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVvZiA9IExaNEZpbGVf ZW9mOworCUNGSC0+Y2xvc2UgPSBMWjRGaWxlX2Nsb3NlOworCUNGSC0+Z2V0X2Vycm9yID0gTFo0 RmlsZV9nZXRfZXJyb3I7CisKKwlsejRmcCA9IHBnX21hbGxvYzAoc2l6ZW9mKCpsejRmcCkpOwor CWlmIChjb21wcmVzc2lvbkxldmVsID49IDApCisJCWx6NGZwLT5wcmVmcy5jb21wcmVzc2lvbkxl dmVsID0gY29tcHJlc3Npb25MZXZlbDsKKworCUNGSC0+cHJpdmF0ZSA9IGx6NGZwOworfQorI2Vs c2UJCQkJCQkJLyogVVNFX0xaNCAqLwordm9pZAorSW5pdENvbXByZXNzb3JMWjQoQ29tcHJlc3Nv clN0YXRlICpjcywgaW50IGNvbXByZXNzaW9uTGV2ZWwpCit7CisJcGdfZmF0YWwoIm5vdCBidWls dCB3aXRoIExaNCBzdXBwb3J0Iik7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVz c0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKQoreworCXBnX2ZhdGFsKCJu b3QgYnVpbHQgd2l0aCBMWjQgc3VwcG9ydCIpOworfQorI2VuZGlmCQkJCQkJCS8qIFVTRV9MWjQg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaCBiL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19sejQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5mYmVjOWE1MDhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2x6NC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfQ09NUFJFU1NfTFo0X0hfCisjZGVm aW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVy biB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBjb21wcmVz c2lvbkxldmVsKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5k bGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01Q UkVTU19MWjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBi L3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCAwNDFlMDhjZDVlLi5mOTA2NWEzZTg0 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogcGdfZHVtcF9jb21tb25fc291cmNl cyA9IGZpbGVzKAogICAnY29tcHJlc3NfaW8uYycsCiAgICdjb21wcmVzc19nemlwLmMnLAorICAn Y29tcHJlc3NfbHo0LmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdw Z19iYWNrdXBfYXJjaGl2ZXIuYycsCkBAIC0xNSw3ICsxNiw3IEBAIHBnX2R1bXBfY29tbW9uX3Nv dXJjZXMgPSBmaWxlcygKIHBnX2R1bXBfY29tbW9uID0gc3RhdGljX2xpYnJhcnkoJ2xpYnBnZHVt cF9jb21tb24nLAogICBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzLAogICBjX3BjaDogcGNoX3Bvc3Rn cmVzX2ZlX2gsCi0gIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCB6bGliXSwK KyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIGx6NCwgemxpYl0sCiAgIGt3 YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCiApCiAKQEAgLTkxLDYgKzkyLDcgQEAgdGVzdHMgKz0g ewogICAgIF0sCiAgICAgJ2Vudic6IHsKICAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBhdGgo KSwKKyAgICAgICdMWjQnOiBwcm9ncmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0aCgp IDogJycsCiAgICAgfSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpp bmRleCAwOWUyMGZiOTdiLi5jOWIwNTNkNTcyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jCkBAIC0zOTQsNiArMzk0LDEwIEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkK ICNpZm5kZWYgSEFWRV9MSUJaCiAJCQkJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9 PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNl OworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQKKwkJCQlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24g PSBmYWxzZTsKICNlbmRpZgogCQkJCWlmIChzdXBwb3J0c19jb21wcmVzc2lvbiA9PSBmYWxzZSkK IAkJCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChj b21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOwpAQCAtMjA3 Myw3ICsyMDc3LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkK IAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUgaXMgYSBkaXJlY3Rv cnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChvciAidG9jLmRh dC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0 LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFILT5mU3BlYywgJnN0 KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwODMsNiArMjA4NywxMCBA QCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogI2lmZGVmIEhBVkVf TElCWgogCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5n eiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OworI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCQkJ aWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5sejQiKSkKKwkJ CQlyZXR1cm4gQUgtPmZvcm1hdDsKICNlbmRpZgogCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBcIiVz XCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2MuZGF0XCIgZG9l cyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CkBAIC0zNzQ2LDYgKzM3NTQsMTAgQEAg UmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQlpZiAoQUgt PmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCQl1bnN1 cHBvcnRlZCA9IHRydWU7CisjZW5kaWYKKyNpZm5kZWYgVVNFX0xaNAorCQlpZiAoQUgtPmNvbXBy ZXNzX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJCXVuc3VwcG9ydGVk ID0gdHJ1ZTsKICNlbmRpZgogCQlpZiAodW5zdXBwb3J0ZWQpCiAJCXsKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4 IGE5N2EwZjNhODQuLjkzYzY5ODM0ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTI3Nyw3ICsxMjc3LDcg QEAgcGFyc2VfY29tcHJlc3Npb24oY29uc3QgY2hhciAqb3B0LCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uICpjb21wcmVzc19zcGVjKQogCXBhcnNlX2NvbXByZXNzX3VzZXJfb3B0aW9ucyhvcHQs ICZhbGdvcml0aG1fc3RyLCAmbGV2ZWxfc3RyKTsKIAlpZiAoIXBhcnNlX2NvbXByZXNzX2FsZ29y aXRobShhbGdvcml0aG1fc3RyLCAmKGNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSkpKQogCXsKLQkJ cGdfbG9nX2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZDogXCIlc1wiIChnemlwLCBu b25lKSIsCisJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2Q6IFwiJXNc IiAoZ3ppcCwgbHo0LCBub25lKSIsCiAJCQkJCSBhbGdvcml0aG1fc3RyKTsKIAkJcmV0dXJuIGZh bHNlOwogCX0KQEAgLTEyOTcsNyArMTI5Nyw4IEBAIHBhcnNlX2NvbXByZXNzaW9uKGNvbnN0IGNo YXIgKm9wdCwgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY29tcHJlc3Nfc3BlYykKIAogCS8q IEFsc28gc3dpdGNoIG9mZiB1bmltcGxlbWVudGVkIGNvbXByZXNzaW9ucyAqLwogCWlmIChjb21w cmVzc19zcGVjLT5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSAmJgotCQljb21wcmVz c19zcGVjLT5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJY29tcHJlc3Nfc3Bl Yy0+YWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX0daSVAgJiYKKwkJY29tcHJlc3Nfc3BlYy0+ YWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX0xaNCkKIAkJc3VwcG9ydHNfY29tcHJlc3Npb24g PSBmYWxzZTsKIAogCWlmICghc3VwcG9ydHNfY29tcHJlc3Npb24pCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwKaW5kZXggZmZmYjllMDc1Yi4uZGEyNjZjMzAxMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApA QCAtMTIyLDcgKzEyMiw3IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAogY29tbWFuZF9mYWlsc19s aWtlKAogCVsgJ3BnX2R1bXAnLCAnLS1jb21wcmVzcycsICdnYXJiYWdlJyBdLAotCXFyL1xRcGdf ZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kOiAiZ2FyYmFnZSIgKGd6aXAs IG5vbmUpXEUvLAorCXFyL1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gbWV0 aG9kOiAiZ2FyYmFnZSIgKGd6aXAsIGx6NCwgbm9uZSlcRS8sCiAJJ3BnX2R1bXA6IGludmFsaWQg LS1jb21wcmVzcycpOwogCiBjb21tYW5kX2ZhaWxzX2xpa2UoCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1w LnBsCmluZGV4IGU5N2QwODY5NTYuLjg4ZjBlODNiNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1w LnBsCkBAIC0xMTYsNiArMTE2LDY3IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFyZ3MgICAg PT4gWyAnLWQnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oiLCBdLAog CQl9LAogCX0sCisKKwkjIERvIG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFn ZSBmb3IgZGF0YSBzeW5jLgorCWNvbXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0ZXN0X2tl eSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJ ZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1jdXN0b20n LAorCQkJJy0tY29tcHJlc3M9MScsICItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1 c3RvbS5kdW1wIiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJ CSdwZ19yZXN0b3JlJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3Rv bS5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCV0s CisJfSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZv ciBkYXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2RpciA9PiB7CisJCXRlc3Rfa2V5ICAgICAg ID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2Nt ZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jy0tam9icz0yJywKKwkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAgICAgICAgICAgICAgICAgICAn LS1jb21wcmVzcz1sejQ6MScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9k aXIiLCAncG9zdGdyZXMnLAorCQldLAorCQkjIEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNv bXByZXNzZWQgYmxvYi50b2MgZmlsZXMgZHVyaW5nCisJCSMgcmVzdG9yZS4KKwkJY29tcHJlc3Nf Y21kID0+IHsKKwkJCXByb2dyYW0gPT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJ CQknLXonLCAnLWYnLCAnLS1ybScsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIv YmxvYnMudG9jIiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2Mu bHo0IiwKKwkJCV0sCisJCX0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywg Jy0tam9icz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci5zcWwi LAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0sCisKKwljb21w cmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24n LAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJ J3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAorCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdwb3N0Z3JlcycsCisJ CV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVuIHRocm91Z2ggdGhl IHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwK KwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNz aW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3Bs YWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJCWR1bXBfY21kID0+ IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxMjcsMTEgKzQxODgsMTEgQEAgZm9yZWFjaCBteSAkcnVu IChzb3J0IGtleXMgJXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdwb3N0Z3Jlcyc7CiAK IAkjIFNraXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBpcyBubyBzdXBw b3J0IGZvciBpdC4KLQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxl X29wdGlvbn0pCi0JCSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAn Z3ppcCcKLQkJJiYgISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7JHJ1bn0tPntj b21waWxlX29wdGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9u fSBlcSAnZ3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9ydW5zeyRydW59 LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkKIAl7Ci0JCW5v dGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5vdGUgIiRydW46 IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBz dXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKLS0gCjIuMzQuMQoK --b1_D5uWpl6mj2OqM6bY2Szbo9CA70hKhuNuSVVorqgck--