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 1pL0NZ-0007iR-8D for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 11:25:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pL0NY-0005Wa-5y for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 11:25:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL0NX-0005W2-9P for pgsql-hackers@lists.postgresql.org; Thu, 26 Jan 2023 11:25:15 +0000 Received: from mail-40134.protonmail.ch ([185.70.40.134]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL0NO-0005Hw-Mj for pgsql-hackers@lists.postgresql.org; Thu, 26 Jan 2023 11:25:14 +0000 Date: Thu, 26 Jan 2023 11:24:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674732301; x=1674991501; bh=IhQ2ZWtv/5T4Tfl6nq+WhnuAw3ZtBWo0yAgGTWZtjI0=; 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=f6zumguKvroM0Jj9WTHpdR6x8Qd3ZMZMCyDiv3RcUw8Rg4KTIVibzcbUuXheF7u0L FPxPNjw5Lw6oHV8ATp5+0FN0NJWKntdMbIBdvgyULHZDlRRmSfeCWDs6hGROaEBA2r 2YkpA7k+Yq7YybbiL3Gj9D2a0QV/AH/U/aEWWffZ2NiTD0Mu90xZ6Goyvp8SkCM6yl rbX5NsdQAsIWWxH9EiTzUQl2y7LvRP1H2EYbJt7z5MvFdwziXGtt6ILf9WWt2IbTGR Lr+c8dqcrr8DbF0wd7/Hd8g8WBZUtflngNkqy/o0hX7OqemuYx6myxUBolBHODC4cw yR6qc7MaIzjpA== To: Justin Pryzby From: gkokolatos@pm.me Cc: Michael Paquier , Tomas Vondra , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: <6YZqN2HEE4yJxxxXWiMl4QWwKzLon0SdKETTGVkT9zjWnXMftGZjLKHHjGFuwC_5I6xL2s8nMXdLQGA4vEFveYXSHbfD9K9pDQvEJF2y99o=@pm.me> In-Reply-To: <20230126062846.GO22427@telsasoft.com> References: <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <20230123180014.GX13860@telsasoft.com> <20230125014203.GL13860@telsasoft.com> <-myGeDiZ-ePDRyi18026Iu2HTTfmwfjWaJn4OWJ2F3oglZUfJTOQ7FARPW7gYxE4vK3b0HpwYoiHR45nfOWReRvvJZfCBfJzPP5iJyn4muk=@pm.me> <20230125180020.GF22427@telsasoft.com> <20230126062846.GO22427@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M" 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_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Thursday, January 26th, 2023 at 7:28 AM, Justin Pryzby wrote: >=20 >=20 > On Thu, Jan 26, 2023 at 02:49:27PM +0900, Michael Paquier wrote: >=20 > > On Wed, Jan 25, 2023 at 12:00:20PM -0600, Justin Pryzby wrote: > >=20 > > > While looking at this, I realized that commit 5e73a6048 introduced a > > > regression: > > >=20 > > > @@ -3740,19 +3762,24 @@ ReadHead(ArchiveHandle *AH) > > >=20 > > > - if (AH->compression !=3D 0) > > > - pg_log_warning("archive is compressed, but this installation does n= ot support compression -- no data will be available"); > > > + if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) > > > + pg_fatal("archive is compressed, but this installation does not sup= port compression"); > > >=20 > > > Before, it was possible to restore non-data chunks of a dump file, ev= en > > > if the current build didn't support its compression. But that's now > > > impossible - and it makes the code we're discussing in RestoreArchive= () > > > unreachable. > >=20 > > Right. The impacts the possibility of looking at the header data, > > which is useful with pg_restore -l for example. >=20 >=20 > It's not just header data - it's schema and (I think) everything other > than table data. >=20 > > > The coverage report disagrees with me, though... > > > https://coverage.postgresql.org/src/bin/pg_dump/pg_backup_archiver.c.= gcov.html#3901 > >=20 > > Isn't that one of the tests like compression_gzip_plain? >=20 >=20 > I'm not sure what you mean. Plain dump is restored with psql and not > with pg_restore. >=20 > My line number was wrong: > https://coverage.postgresql.org/src/bin/pg_dump/pg_backup_archiver.c.gcov= .html#390 >=20 > What test would hit that code without rebuilding ? >=20 > 394 : #ifndef HAVE_LIBZ > 395 : if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP && >=20 > > Thoughts? > > #ifndef HAVE_LIBZ > > if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) > > - pg_fatal("archive is compressed, but this installation does not suppo= rt compression"); > > + pg_log_warning("archive is compressed, but this installation does not= support compression -- no data will be available"); >=20 >=20 > Your patch is fine for now, but these errors should eventually specify > which compression algorithm is unavailable. I think that should be a > part of the 001 patch, ideally in a way that minimizes the number of > places which need to be updated when adding an algorithm. I gave this a little bit of thought. I think that ReadHead should not emit a warning, or at least not this warning as it is slightly misleading. It implies that it will automatically turn off data restoration, which is false. Further ahead, the code will fail with a conflicting error message stating that the compression is not available. Instead, it would be cleaner both for the user and the maintainer to move the check in RestoreArchive and make it the sole responsible for this logic. Please find v26 attached. 0001 does the above and 0002 addresses Justin's complaints regarding the code footprint. //Cheers, Georgios=20 >=20 > -- > Justin --b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M Content-Type: text/x-patch; name=v26-0002-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v26-0002-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSAzMGFlMjI3ODIzYmFmMzY5NGU1YmI5ZjBiYWM3MTUwODJhMzE3ZjA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMTE6MTE6MTQgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NiAyLzRdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDkyICsrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uaCAgICAgICAgfCAgIDQgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jIHwgMTI1ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstLS0tLQogNCBmaWxlcyBjaGFuZ2Vk LCAxMjQgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMK aW5kZXggN2EyYzgwYmJjNC4uZTE3MzNjZTU3YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU2 LDYgKzU2LDM2IEBACiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJwZ19iYWNr dXBfdXRpbHMuaCIKIAorI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRp ZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdlbmVyaWMgZnVuY3Rpb25zCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitjaGFyICoKK3N1cHBvcnRzX2NvbXByZXNzaW9u KGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlj b25zdCBwZ19jb21wcmVzc19hbGdvcml0aG0JYWxnb3JpdGhtID0gY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG07CisJYm9vbAkJCQkJCXN1cHBvcnRlZCA9IGZhbHNlOworCisJaWYgKGFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQorCQlzdXBwb3J0ZWQgPSB0cnVlOworI2lmZGVmIEhB VkVfTElCWgorCWlmIChhbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJc3VwcG9y dGVkID0gdHJ1ZTsKKyNlbmRpZgorCisJaWYgKCFzdXBwb3J0ZWQpCisJCXJldHVybiBwc3ByaW50 ZigidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJ CQkJZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGFsZ29yaXRobSkpOworCisJcmV0dXJuIE5V TEw7Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc29yIEFQSQog ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00OTAsMTYgKzUyMCwxOSBAQCBjZm9wZW5fd3Jp dGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIH0KIAogLyoKLSAqIE9wZW5z IGZpbGUgJ3BhdGgnIGluICdtb2RlJy4gSWYgY29tcHJlc3Npb24gaXMgR1pJUCwgdGhlIGZpbGUK LSAqIGlzIG9wZW5lZCB3aXRoIGxpYnogZ3pvcGVuKCksIG90aGVyd2lzZSB3aXRoIHBsYWluIGZv cGVuKCkuCisgKiBUaGlzIGlzIHRoZSB3b3JraG9yc2UgZm9yIGNmb3BlbigpIG9yIGNmZG9wZW4o KS4gSXQgb3BlbnMgZmlsZSAncGF0aCcgb3IKKyAqIGFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywg aWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2RlJy4gVGhlCisgKiBkZXNjcmlw dG9yIGlzIG5vdCBkdXAnZWQgYW5kIGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0 byBkbyBzby4KKyAqIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgJ2NvbXByZXNzX2Fs Z29yaXRobScgaXMgc3VwcG9ydGVkIGJ5IHRoZQorICogY3VycmVudCBidWlsZC4KICAqCiAgKiBP biBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8K LWNmcCAqCi1jZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitzdGF0aWMg Y2ZwICoKK2Nmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNo YXIgKm1vZGUsCisJCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQogewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jKHNpemVvZihjZnApKTsKKwljZnAJCSAgICpm cCA9IHBnX21hbGxvYzAoc2l6ZW9mKGNmcCkpOwogCiAJaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJewpAQCAtNTExLDE1ICs1NDQsMjAgQEAg Y2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAKIAkJCXNucHJpbnRm KG1vZGVfY29tcHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAogCQkJ CQkgbW9kZSwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCQlmcC0+Y29tcHJlc3NlZGZwID0g Z3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOworCQkJaWYgKGZkID49IDApCisJCQkJZnAt PmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOworCQkJZWxzZQor CQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7CiAJ CX0KIAkJZWxzZQogCQl7CiAJCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRo ZSB6bGliIGRlZmF1bHQgKi8KLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9k ZSk7CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pkb3BlbihmZCwg bW9kZSk7CisJCQllbHNlCisJCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2Rl KTsKIAkJfQogCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7CiAJCWlmIChmcC0+Y29tcHJl c3NlZGZwID09IE5VTEwpCiAJCXsKIAkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CkBAIC01MzEsMTAg KzU2OSwxMSBAQCBjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAl9 CiAJZWxzZQogCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJZnAtPmNvbXByZXNzZWRmcCA9IE5VTEw7 Ci0jZW5kaWYKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJCWlm IChmZCA+PSAwKQorCQkJZnAtPnVuY29tcHJlc3NlZGZwID0gZmRvcGVuKGZkLCBtb2RlKTsKKwkJ ZWxzZQorCQkJZnAtPnVuY29tcHJlc3NlZGZwID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKIAkJaWYg KGZwLT51bmNvbXByZXNzZWRmcCA9PSBOVUxMKQogCQl7CiAJCQlmcmVlX2tlZXBfZXJybm8oZnAp OwpAQCAtNTQ1LDYgKzU4NCwzMyBAQCBjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hh ciAqbW9kZSwKIAlyZXR1cm4gZnA7CiB9CiAKKy8qCisgKiBPcGVucyBmaWxlICdwYXRoJyBpbiAn bW9kZScgYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4KKyAqIGNvbXByZXNzaW9uX3NwZWMu IFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24KKyAqIGlzIHN1cHBv cnRlZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVM TCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKi8KK2NmcCAqCitjZm9wZW4oY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKKwkgICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChw YXRoLCAtMSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Cit9CisKKy8qCisgKiBBc3NvY2lhdGVz IGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScK KyAqIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluIGNvbXByZXNzaW9uX3NwZWMuIFRoZSBj YWxsZXIgbXVzdAorICogdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudCBidWlsZC4KKyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRo IGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKi8KK2NmcCAqCitjZmRvcGVuKGludCBmZCwgY29u c3QgY2hhciAqbW9kZSwKKwkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNv bXByZXNzaW9uX3NwZWMpOworfQogCiBpbnQKIGNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBj ZnAgKmZwKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCBhNDI5ZGM0Nzg5Li44YmViMTA1OGVjIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMjEsNiArMjEsOCBAQAogI2RlZmluZSBaTElCX09VVF9T SVpFCTQwOTYKICNkZWZpbmUgWkxJQl9JTl9TSVpFCTQwOTYKIAorZXh0ZXJuIGNoYXIgKnN1cHBv cnRzX2NvbXByZXNzaW9uKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYyk7CisKIC8qIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gV3JpdGVE YXRhVG9BcmNoaXZlKCkgKi8KIHR5cGVkZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogCkBAIC01NCw2ICs1Niw4IEBA IHR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CiAKIGV4dGVybiBjZnAgKmNmb3Blbihjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gY2ZwICpjZmRvcGVuKGludCBmZCwg Y29uc3QgY2hhciAqbW9kZSwKKwkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKTsKIGV4dGVybiBjZnAgKmNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpOwogZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYwppbmRleCAyNWIxZWEwMDI2Li5mM2I5MmIwMWQ5IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1v bi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImR1bXB1dGls cy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImxpYi9z dHJpbmdpbmZvLmgiCkBAIC00MywxMyArNDQsNiBAQAogI2RlZmluZSBURVhUX0RVTVBfSEVBREVS ICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iCiAjZGVmaW5lIFRFWFRf RFVNUEFMTF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxu LS1cblxuIgogCi0vKiBzdGF0ZSBuZWVkZWQgdG8gc2F2ZS9yZXN0b3JlIGFuIGFyY2hpdmUncyBv dXRwdXQgdGFyZ2V0ICovCi10eXBlZGVmIHN0cnVjdCBfb3V0cHV0Q29udGV4dAotewotCXZvaWQJ ICAgKk9GOwotCWludAkJCWd6T3V0OwotfSBPdXRwdXRDb250ZXh0OwotCiAvKgogICogU3RhdGUg Zm9yIHRyYWNraW5nIFRvY0VudHJ5cyB0aGF0IGFyZSByZWFkeSB0byBwcm9jZXNzIGR1cmluZyBh IHBhcmFsbGVsCiAgKiByZXN0b3JlLiAgKFRoaXMgdXNlZCB0byBiZSBhIGxpc3QsIGFuZCB3ZSBz dGlsbCBjYWxsIGl0IHRoYXQsIHRob3VnaCBub3cKQEAgLTEwMSw4ICs5NSw4IEBAIHN0YXRpYyB2 b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1l c3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBz dGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYyk7Ci1zdGF0aWMgT3V0cHV0Q29udGV4dCBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI KTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIE91dHB1dENv bnRleHQgc2F2ZWRDb250ZXh0KTsKK3N0YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2Zw ICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7CiBzdGF0aWMgdm9pZCBy ZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC0yNzcsMTEg KzI3MSw4IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJQUgtPkNsb3NlUHRyKEFIKTsK IAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KLQllcnJubyA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6 Y2xvc2UoKSBkb2Vzbid0IHNldCBpdCAqLwotCWlmIChBSC0+Z3pPdXQpCi0JCXJlcyA9IEdaQ0xP U0UoQUgtPk9GKTsKLQllbHNlIGlmIChBSC0+T0YgIT0gc3Rkb3V0KQotCQlyZXMgPSBmY2xvc2Uo QUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0YpOwogCiAJaWYgKHJl cyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpA QCAtMzYzLDcgKzM1NCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlSZXN0b3Jl T3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlib29sCQlwYXJhbGxlbF9tb2RlOwog CVRvY0VudHJ5ICAgKnRlOwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAog CUFILT5zdGFnZSA9IFNUQUdFX0lOSVRJQUxJWklORzsKIApAQCAtMzkxLDE3ICszODIsMjAgQEAg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCS8qCiAJICogTWFrZSBzdXJlIHdlIHdvbid0 IG5lZWQgKGRlKWNvbXByZXNzaW9uIHdlIGhhdmVuJ3QgZ290CiAJICovCi0jaWZuZGVmIEhBVkVf TElCWgotCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCAmJgotCQlBSC0+UHJpbnRUb2NEYXRhUHRyICE9IE5VTEwpCisJaWYgKEFILT5Qcmlu dFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUgPSBBSC0+dG9jLT5uZXh0OyB0ZSAh PSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlpZiAodGUtPmhhZER1bXBlciAmJiAo dGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlwZ19mYXRhbCgiY2Fubm90IHJlc3RvcmUg ZGF0YSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBp biB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCXsKKwkJCQljaGFyICplcnJtc2cgPSBzdXBwb3J0 c19jb21wcmVzc2lvbihBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisJCQkJaWYgKGVycm1zZykJCisJ CQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBkYXRhIGZyb20gY29tcHJlc3NlZCBhcmNoaXZl ICglcykiLCBlcnJtc2cpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9Ci0j ZW5kaWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBhc3N1bWUg d2UgaGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTExMzMsNyArMTEyNyw3IEBAIFBy aW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24J Y3VyU2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAJY29uc3Qg Y2hhciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xNTA4LDU4ICsxNTAy LDMyIEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKIHsKLQlpbnQJCQlmbjsKKwljb25zdCBjaGFyICptb2RlOworCWludAkJCWZu ID0gLTE7CiAKIAlpZiAoZmlsZW5hbWUpCiAJewogCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIp ID09IDApCiAJCQlmbiA9IGZpbGVubyhzdGRvdXQpOwotCQllbHNlCi0JCQlmbiA9IC0xOwogCX0K IAllbHNlIGlmIChBSC0+RkgpCiAJCWZuID0gZmlsZW5vKEFILT5GSCk7CiAJZWxzZSBpZiAoQUgt PmZTcGVjKQogCXsKLQkJZm4gPSAtMTsKIAkJZmlsZW5hbWUgPSBBSC0+ZlNwZWM7CiAJfQogCWVs c2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCS8qIElmIGNvbXByZXNzaW9uIGV4cGxpY2l0 bHkgcmVxdWVzdGVkLCB1c2UgZ3pvcGVuICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotCQljaGFy CQlmbW9kZVsxNF07CisJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCQltb2RlID0g UEdfQklOQVJZX0E7CisJZWxzZQorCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQkJLyogRG9uJ3Qg dXNlIFBHX0JJTkFSWV94IHNpbmNlIHRoaXMgaXMgemxpYiAqLwotCQlzcHJpbnRmKGZtb2RlLCAi d2IlZCIsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFILT5P RiA9IGd6ZG9wZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBnem9wZW4o ZmlsZW5hbWUsIGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZuID49IDApCisJ CUFILT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CiAJZWxz ZQotI2VuZGlmCi0JewkJCQkJCQkvKiBVc2UgZm9wZW4gKi8KLQkJaWYgKEFILT5tb2RlID09IGFy Y2hNb2RlQXBwZW5kKQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBmZG9wZW4o ZHVwKGZuKSwgUEdfQklOQVJZX0EpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVuKGZpbGVu YW1lLCBQR19CSU5BUllfQSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJ CQlBSC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdfQklOQVJZX1cpOwotCQkJZWxzZQotCQkJCUFI LT5PRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCX0KLQkJQUgtPmd6T3V0ID0g MDsKLQl9CisJCUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3Bl Yyk7CiAKIAlpZiAoIUFILT5PRikKIAl7CkBAIC0xNTcwLDMzICsxNTM4LDI0IEBAIFNldE91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJfQogfQogCi1zdGF0 aWMgT3V0cHV0Q29udGV4dAorc3RhdGljIGNmcCAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFIKQogewotCU91dHB1dENvbnRleHQgc2F2OwotCi0Jc2F2Lk9GID0gQUgtPk9GOwotCXNhdi5n ek91dCA9IEFILT5nek91dDsKLQotCXJldHVybiBzYXY7CisJcmV0dXJuIChjZnAgKikgQUgtPk9G OwogfQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgT3V0 cHV0Q29udGV4dCBzYXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjZnAgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0gMDsJCQkJCS8q IGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJ cmVzID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJ ZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAotCUFILT5nek91 dCA9IHNhdmVkQ29udGV4dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQuT0Y7CisJQUgt Pk9GID0gc2F2ZWRPdXRwdXQ7CiB9CiAKIApAQCAtMTcyMCwyMiArMTY3OSwxNyBAQCBhaHdyaXRl KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRs ZSAqQUgpCiAKIAkJYnl0ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAo QUgtPmd6T3V0KQotCQlieXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBB SC0+T0YpOwogCWVsc2UgaWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBB SC0+Q3VzdG9tT3V0UHRyKEFILCBwdHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgorCSAqIElmIHdl J3JlIGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUgY29u bmVjdGVkCisJICogdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNlIGlmIChSZXN0 b3JpbmdUb0RCKEFIKSkKKwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZB SC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCXsK LQkJLyoKLQkJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8g REIsIGFuZCB3ZSdyZQotCQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KLQkJ ICovCi0JCWlmIChSZXN0b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRl U3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1l bWIpOwotCQllbHNlCi0JCQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIs IEFILT5PRikgKiBzaXplOwotCX0KKwkJYnl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUocHRyLCBzaXpl ICogbm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIp CiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMjI0LDYgKzIxNzgsNyBAQCBfYWxsb2NBSChjb25z dCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtl clB0clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19k ZWJ1ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCiAJCQkJIEZpbGVTcGVjID8g RmlsZVNwZWMgOiAiKHN0ZGlvKSIsIGZtdCk7CkBAIC0yMjc3LDggKzIyMzIsOCBAQCBfYWxsb2NB SChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJbWVtc2V0 KCYoQUgtPnNxbHBhcnNlKSwgMCwgc2l6ZW9mKEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBz dGRvdXQgd2l0aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5n ek91dCA9IDA7Ci0JQUgtPk9GID0gc3Rkb3V0OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0 ZG91dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOwogCiAJLyoKIAkgKiBPbiBX aW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0 IGZpbGVzLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGY3MjQ0NmVkNWIu LjQ3MjVlNDk3NDcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTMyLDMw ICszMiw2IEBACiAKICNkZWZpbmUgTE9CQlVGU0laRSAxNjM4NAogCi0jaWZkZWYgSEFWRV9MSUJa Ci0jaW5jbHVkZSA8emxpYi5oPgotI2RlZmluZSBHWkNMT1NFKGZoKSBnemNsb3NlKGZoKQotI2Rl ZmluZSBHWldSSVRFKHAsIHMsIG4sIGZoKSBnendyaXRlKGZoLCBwLCAobikgKiAocykpCi0jZGVm aW5lIEdaUkVBRChwLCBzLCBuLCBmaCkgZ3pyZWFkKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5l IEdaRU9GKGZoKQlnemVvZihmaCkKLSNlbHNlCi0jZGVmaW5lIEdaQ0xPU0UoZmgpIGZjbG9zZShm aCkKLSNkZWZpbmUgR1pXUklURShwLCBzLCBuLCBmaCkgKGZ3cml0ZShwLCBzLCBuLCBmaCkgKiAo cykpCi0jZGVmaW5lIEdaUkVBRChwLCBzLCBuLCBmaCkgZnJlYWQocCwgcywgbiwgZmgpCi0jZGVm aW5lIEdaRU9GKGZoKQlmZW9mKGZoKQotLyogdGhpcyBpcyBqdXN0IHRoZSByZWRlZmluaXRpb24g b2YgYSBsaWJ6IGNvbnN0YW50ICovCi0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEp Ci0KLXR5cGVkZWYgc3RydWN0IF96X3N0cmVhbQotewotCXZvaWQJICAgKm5leHRfaW47Ci0Jdm9p ZAkgICAqbmV4dF9vdXQ7Ci0Jc2l6ZV90CQlhdmFpbF9pbjsKLQlzaXplX3QJCWF2YWlsX291dDsK LX0gel9zdHJlYW07Ci10eXBlZGVmIHpfc3RyZWFtICp6X3N0cmVhbXA7Ci0jZW5kaWYKLQogLyog RGF0YSBibG9jayB0eXBlcyAqLwogI2RlZmluZSBCTEtfREFUQSAxCiAjZGVmaW5lIEJMS19CTE9C UyAzCkBAIC0zMTksOCArMjk1LDcgQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAKIAljaGFyCSAg ICpmU3BlYzsJCQkvKiBBcmNoaXZlIEZpbGUgU3BlYyAqLwogCUZJTEUJICAgKkZIOwkJCQkvKiBH ZW5lcmFsIHB1cnBvc2UgZmlsZSBoYW5kbGUgKi8KLQl2b2lkCSAgICpPRjsKLQlpbnQJCQlnek91 dDsJCQkvKiBPdXRwdXQgZmlsZSAqLworCXZvaWQJICAgKk9GOwkJCQkvKiBPdXRwdXQgZmlsZSAq LwogCiAJc3RydWN0IF90b2NFbnRyeSAqdG9jOwkJLyogSGVhZGVyIG9mIGNpcmN1bGFyIGxpc3Qg b2YgVE9DIGVudHJpZXMgKi8KIAlpbnQJCQl0b2NDb3VudDsJCS8qIE51bWJlciBvZiBUT0MgZW50 cmllcyAqLwotLSAKMi4zNC4xCgo= --b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M Content-Type: text/x-patch; name=v26-0001-Address-regression-in-pg_dump-s-ReadHead.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v26-0001-Address-regression-in-pg_dump-s-ReadHead.patch RnJvbSAyYzJkYjYzZWRlMzhjMmU2MWZiNjU1YWIzODMwM2Y0MTYwZWMzZjZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMDk6NTg6MTAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NiAxLzRdIEFkZHJlc3MgcmVncmVzc2lvbiBpbiBwZ19kdW1wJ3MgUmVhZEhlYWQKCkNvbW1pdCA1 ZTczYTYwNDggdXBncmFkZWQgdGhlIGNoZWNrIGZvciBzdXBwb3J0ZWQgY29tcHJlc3Npb24gd2hp bGUgcGFyc2luZyBhbgphcmNoaXZlJ3MgaGVhZGVyLCBmcm9tIHdhcm5pbmcgdG8gZmF0YWwuIFBy aW9yIHRvIHRoaXMgY29tbWl0LCBpdCB3YXMgcG9zc2libGUKdG8gcmVzdG9yZSBhIGNvbXByZXNz ZWQgYXJjaGl2ZSdzIHNjaGVtYSBldmVuIHdoZW4gdGhlIGNvbXByZXNzaW9uIHdhcyBub3QKc3Vw cG9ydGVkIGJ5IHRoZSBiaW5hcnkuCgpCZWZvcmUgdGhlIGFib3ZlbWVudGlvbmVkIGNvbW1pdCwg YSB3YXJuaW5nIG1lc3NhZ2Ugd291bGQgYmUgZW1taXRlZDoKCglwZ19sb2dfd2FybmluZygiYXJj aGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7CgpUaGlzIG1lc3Nh Z2UgaXMgc2xpZ2h0bHkgbWlzcy1sZWFkaW5nLCBhcyBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQgdGhh dCB0aGUgYmluYXJ5CndpbGwgYWN0aXZlbHkgc3dpdGNoIGludG8gc2NoZW1hIG9ubHkgbW9kZSwg d2hpY2ggaXMgbm90IHRoZSBjYXNlLiBJbnN0ZWFkIGEgbmV3CmZhdGFsIG1lc3NhZ2Ugd2lsbCBh cHBlYXIgaW5mb3JtaW5nIHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUuCgpU aGlzIGNvbW1pdCBjaG9vc2VzIHRvIHJlbW92ZSB0aGUgY2hlY2sgaW4gUmVhZEhlYWQgYWx0b2dl dGhlciBpbiBmYXZvdXIgb2YgYQptb3JlIGNvbXByZWhlbnNpdmUgZXJyb3IgbWVzc2FnZSB3aGVu IGNoZWNraW5nIHRoZSBhcmNoaXZlIGZvciBkYXRhLgoKUmVncmVzc2lvbiBzcG90dGVkIGJ5OiBK dXN0aW4gUHJ5emJ5Ci0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwg NyArLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGJhNWU2YWNiYmIuLjI1YjFl YTAwMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTM5OCw3ICszOTgs NyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJCWZvciAodGUgPSBBSC0+dG9jLT5u ZXh0OyB0ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlpZiAodGUtPmhhZER1 bXBlciAmJiAodGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlwZ19mYXRhbCgiY2Fubm90 IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0 ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3Jl IGRhdGEgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQg aW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTM3ODIsMTEgKzM3 ODIsNiBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFILT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAKLSNpZm5kZWYgSEFW RV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9HWklQKQotCQlwZ19mYXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBp bnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOwotI2VuZGlmCi0KIAlp ZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfNCkKIAl7CiAJCXN0cnVjdCB0bQljcnRtOwotLSAK Mi4zNC4xCgo= --b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M Content-Type: text/x-patch; name=v26-0004-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v26-0004-Add-LZ4-compression-to-pg_dump.patch RnJvbSBmMDVmZWI1YzQ0NmNiMzdiNTgwNjI5ZmE1MWUwYjU3NTdhZDA5YzYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTQ6NDY6MDcgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NiA0LzRdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUg b2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2NhbHkuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyAgICAgICAgIHwgIDI0ICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgICAg ICAgIHwgNjI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmggICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg fCAgIDYgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgIDkgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgODIgKysrLQogc3JjL3Rvb2xzL3BnaW5j bHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDc4MCBpbnNlcnRpb25zKCsp LCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3ZTEuLjQ5ZDIxODkwNWYgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNh dGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGly ZWN0b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAg IHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNz ZWQgYXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGlj YXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlz IGNvbXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAg ICAgICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxp Y2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0 PC9hcHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5k IGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC02NTQsNyArNjU1LDcg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNp ZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRv IHVzZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBjYW4gYmUgc2V0IHRvIDxsaXRl cmFsPmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZv ciBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0 ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCiAgICAgICAgIEEgY29tcHJl c3Npb24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQuICBJZiB0aGUK ICAgICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIGNv bXByZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpAQCAtNjc1LDggKzY3Niw4IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEg c2VnbWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8 bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4 dCBvdXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNh dXNlcyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFz IHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGlj YXRpb24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAg ICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8 L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47 IGJ1dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAwMDEzYmMwODBj Li5lYjhmNTk0NTlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9 IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAK IGV4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1 CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBA IC0yNiw2ICsyNyw3IEBAIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWNvbXByZXNzX2d6aXAu byBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX25vbmUu byBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBlNGUwMDhkMmUxLi42NTYzZjY3Njg5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2d6aXAuaCIKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgImNvbXByZXNzX25vbmUuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIApAQCAtOTAsNiArOTEsMTAgQEAgc3VwcG9ydHNfY29tcHJlc3Npb24oY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogCWlmIChhbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJc3VwcG9ydGVkID0gdHJ1ZTsKICNlbmRpZgorI2lm ZGVmIFVTRV9MWjQKKwlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJc3Vw cG9ydGVkID0gdHJ1ZTsKKyNlbmRpZgogCiAJaWYgKCFzdXBwb3J0ZWQpCiAJCXJldHVybiBwc3By aW50ZigidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLApA QCAtMTIxLDYgKzEyNiw4IEBAIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAJCUluaXRDb21wcmVzc29yTm9uZShjcywg Y29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVz c2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9MWjQpCisJCUluaXRDb21wcmVzc29yTFo0KGNzLCBjb21wcmVzc2lvbl9zcGVj KTsKIAogCXJldHVybiBjczsKIH0KQEAgLTE4NSw2ICsxOTIsOCBAQCBJbml0Q29tcHJlc3NGaWxl SGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK IAkJSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAll bHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQogCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwor CWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xa NCkKKwkJSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwog CiAJcmV0dXJuIENGSDsKIH0KQEAgLTE5OCw3ICsyMDcsNyBAQCBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKICAq IHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Npb24gd2lsbCBiZSBkZWZlcnJlZCBi eSBpdGVyYXRpdmVseSB0cnlpbmcKICAqIHRvIG9wZW4gdGhlIGZpbGUgYXQgJ3BhdGgnLCBmaXJz dCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29tcHJlc3Npb24KICAqIHN1ZmZpeGVz LiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAi Zm9vIiBvcgotICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgorICogImZvby5neiIg b3IgImZvby5sejQiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KICAqCiAgKiBPbiBmYWlsdXJlLCBy ZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8KQEAgLTIzNiw2ICsy NDUsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3RzKQogCQkJCWNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJfQorI2VuZGlmCisjaWZkZWYgVVNF X0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJ CWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCQkJZXhpc3RzID0gKHN0YXQoZm5h bWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJCQkJY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0KICNlbmRpZgogCX0KIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmVlNzRj YzhlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMK QEAgLTAsMCArMSw2MjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2x6 NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3cml0ZSBhIExaNCBjb21wcmVzc2Vk IGRhdGEgc3RyZWFtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2lu Y2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisK KyNpZmRlZiBVU0VfTFo0CisjaW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4K KworI2RlZmluZSBMWjRfT1VUX1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJ KDE2ICogMTAyNCkKKworLyoKKyAqIExaNEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVk IGluIHYxLjcuNSBvZiB0aGUgbGlicmFyeS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRp b25zIHdpdGggYSBsZXNzZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpF X01BWAorI2RlZmluZSBMWjRGX0hFQURFUl9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKK3R5cGVkZWYgc3RydWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJ ICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKwor LyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08g Ki8KK3N0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0 KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0 IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAor UmVhZERhdGFGcm9tQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcykKK3sKKwlMWjRfc3RyZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAg KmJ1ZjsKKwljaGFyCSAgICpkZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7 CisKKwlidWZsZW4gPSBMWjRfSU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlk ZWNidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0 cmVhbURlY29kZSwgTlVMTCwgMCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1 ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZl X2NvbnRpbnVlKCZsejRTdHJlYW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwK KwkJCQkJCQkJCQkJCQkJCWNudCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVj Qnl0ZXMsIEFIKTsKKwl9CisKKwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQor CitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KQoreworCUxaNENvbXByZXNzb3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICop IGNzLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWly ZWRzaXplID0gTFo0X2NvbXByZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4g TFo0Y3MtPm91dHNpemUpCisJeworCQlMWjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+ b3V0YnVmLCByZXF1aXJlZHNpemUpOworCQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsK Kwl9CisKKwljb21wcmVzc2VkID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91 dGJ1ZiwKKwkJCQkJCQkJCSAgZExlbiwgTFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNz ZWQgPD0gMCkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJ Y3MtPndyaXRlRihBSCwgTFo0Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2 b2lkCitFbmRDb21wcmVzc29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQoreworCUxaNENvbXByZXNzb3JTdGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21w cmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19m cmVlKExaNGNzLT5vdXRidWYpOworCQlwZ19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0 YSA9IE5VTEw7CisJfQorfQorCisKKy8qCisgKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0 IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PCisgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENv bXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKK3sKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0Owor CWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENv bXByZXNzb3JMWjQ7CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7 CisKKwkvKiBXaWxsIGJlIGxhenkgaW5pdCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21h bGxvYzAoc2l6ZW9mKExaNENvbXByZXNzb3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogU3RhdGUgbmVlZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5n IHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxl Cit7CisJRklMRQkgICAqZnA7CisKKwlMWjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRG X2NvbXByZXNzaW9uQ29udGV4dF90IGN0eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3Qg ZHR4OworCisJYm9vbAkJaW5pdGVkOworCWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQli dWZsZW47CisJY2hhcgkgICAqYnVmZmVyOworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOwor CXNpemVfdAkJb3ZlcmZsb3dsZW47CisJY2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJ CWVycmNvZGU7Cit9CUxaNEZpbGU7CisKKy8qCisgKiBMWjQgZXF1aXZhbGVudCB0byBmZW9mKCkg b3IgZ3plb2YoKS4gVGhlIGVuZCBvZiBmaWxlCisgKiBpcyByZWFjaGVkIGlmIHRoZXJlIGlzIG5v IGRlY29tcHJlc3NlZCBvdXRwdXQgaW4gdGhlCisgKiBvdmVyZmxvdyBidWZmZXIgYW5kIHRoZSBl bmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9lb2Yo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAq KSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+b3ZlcmZsb3dsZW4gPT0gMCAmJiBm ZW9mKGZzLT5mcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0xaNEZpbGVfZ2V0X2Vycm9y KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUg KikgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZf aXNFcnJvcihmcy0+ZXJyY29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5l cnJjb2RlKTsKKwllbHNlCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBl cnJtc2c7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBz dHJ1Y3QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVjZXNz YXJ5IGNvbnRleHRzIGZvciB0aGUgb3BlcmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0 IGFkZGl0aW9uYWxseSB3cml0ZXMgdGhlIExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0u CisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBi b29sIGNvbXByZXNzaW5nKQoreworCXNpemVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQp CisJCXJldHVybiAwOworCisJZnMtPmNvbXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmlu aXRlZCA9IHRydWU7CisKKwlpZiAoZnMtPmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9 IExaNEZfY29tcHJlc3NCb3VuZChMWjRfSU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+ YnVmbGVuIDwgTFo0Rl9IRUFERVJfU0laRV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFE RVJfU0laRV9NQVg7CisKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQo JmZzLT5jdHgsIExaNEZfVkVSU0lPTik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJ eworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5i dWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NC ZWdpbihmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVm cyk7CisKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9 IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAx LCBzdGF0dXMsIGZzLT5mcCkgIT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IChlcnJubykgPyBl cnJubyA6IEVOT1NQQzsKKwkJCXJldHVybiAxOworCQl9CisJfQorCWVsc2UKKwl7CisJCXN0YXR1 cyA9IExaNEZfY3JlYXRlRGVjb21wcmVzc2lvbkNvbnRleHQoJmZzLT5kdHgsIExaNEZfVkVSU0lP Tik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBz dGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZsZW4gPSBzaXplID4gTFo0X09V VF9TSVpFID8gc2l6ZSA6IExaNF9PVVRfU0laRTsKKwkJZnMtPmJ1ZmZlciA9IHBnX21hbGxvYyhm cy0+YnVmbGVuKTsKKworCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiA9IGZzLT5idWZsZW47CisJCWZz LT5vdmVyZmxvd2J1ZiA9IHBnX21hbGxvYyhmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCWZzLT5v dmVyZmxvd2xlbiA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGFscmVh ZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQgZnJvbSB0aGUgb3ZlcmZsb3cgYnVmZmVyIGludG8gJ3B0 cicgdXAgdG8KKyAqICdzaXplJyBieXRlcywgaWYgYXZhaWxhYmxlLiBJZiB0aGUgZW9sX2ZsYWcg aXMgc2V0LCB0aGVuIHN0b3AgYXQgdGhlIGZpcnN0CisgKiBvY2N1cnJlbmNlIG9mIHRoZSBuZXcg bGluZSBjaGFyIHByaW9yIHRvICdzaXplJyBieXRlcy4KKyAqCisgKiBBbnkgdW5yZWFkIGNvbnRl bnQgaW4gdGhlIG92ZXJmbG93IGJ1ZmZlciwgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX292ZXJmbG93KExaNEZpbGUgKiBmcywgdm9pZCAq cHRyLCBpbnQgc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwljaGFyCSAgICpwOworCWludAkJCXJl YWRsZW4gPSAwOworCisJaWYgKGZzLT5vdmVyZmxvd2xlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwor CWlmIChmcy0+b3ZlcmZsb3dsZW4gPj0gc2l6ZSkKKwkJcmVhZGxlbiA9IHNpemU7CisJZWxzZQor CQlyZWFkbGVuID0gZnMtPm92ZXJmbG93bGVuOworCisJaWYgKGVvbF9mbGFnICYmIChwID0gbWVt Y2hyKGZzLT5vdmVyZmxvd2J1ZiwgJ1xuJywgcmVhZGxlbikpKQorCQkvKiBJbmNsdWRlIHRoZSBs aW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKwkJcmVhZGxlbiA9IHAgLSBmcy0+b3ZlcmZsb3didWYg KyAxOworCisJbWVtY3B5KHB0ciwgZnMtPm92ZXJmbG93YnVmLCByZWFkbGVuKTsKKwlmcy0+b3Zl cmZsb3dsZW4gLT0gcmVhZGxlbjsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1t b3ZlKGZzLT5vdmVyZmxvd2J1ZiwgZnMtPm92ZXJmbG93YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJm bG93bGVuKTsKKworCXJldHVybiByZWFkbGVuOworfQorCisvKgorICogVGhlIHdvcmtob3JzZSBm b3IgcmVhZGluZyBkZWNvbXByZXNzZWQgY29udGVudCBvdXQgb2YgYW4gTFo0IGNvbXByZXNzZWQK KyAqIHN0cmVhbS4KKyAqCisgKiBJdCB3aWxsIHJlYWQgdXAgdG8gJ3B0cnNpemUnIGRlY29tcHJl c3NlZCBjb250ZW50LCBvciB1cCB0byB0aGUgbmV3IGxpbmUgY2hhcgorICogaWYgZm91bmQgZmly c3Qgd2hlbiB0aGUgZW9sX2ZsYWcgaXMgc2V0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNv bXByZXNzZWQKKyAqIG91dHB1dCBnZW5lcmF0ZWQgYnkgcmVhZGluZyBhbnkgY29tcHJlc3NlZCBp bnB1dCB2aWEgdGhlIExaNEYgQVBJLCBleGNlZWRzCisgKiAncHRyc2l6ZScuIEFueSBleGNlZWRp bmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgaXMgc3RvcmVkIGF0IGFuIG92ZXJmbG93CisgKiBidWZm ZXIgd2l0aGluIExaNEZpbGUuIE9mIGNvdXJzZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVk LCBpdCB3aWxsIGZpcnN0CisgKiB0cnkgdG8gY29uc3VtZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRl bnQgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvdmVyZmxvdworICogYnVmZmVyLCBiZWZvcmUgZGVj b21wcmVzc2luZyBuZXcgY29udGVudC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX2lu dGVybmFsKExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxh ZykKK3sKKwlzaXplX3QJCWRzaXplID0gMDsKKwlzaXplX3QJCXJzaXplOworCXNpemVfdAkJc2l6 ZSA9IHB0cnNpemU7CisJYm9vbAkJZW9sX2ZvdW5kID0gZmFsc2U7CisKKwl2b2lkCSAgICpyZWFk YnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFs c2UgLyogZGVjb21wcmVzc2luZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJpZnkgdGhh dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4gZnMt PmJ1ZmxlbikKKwl7CisJCWZzLT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdfcmVh bGxvYyhmcy0+YnVmZmVyLCBzaXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXByZXNz ZWQgY29udGVudCBpZiBhdmFpbGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVyZmxv dyhmcywgcHRyLCBzaXplLCBlb2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVvbF9m bGFnICYmIG1lbWNocihwdHIsICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKworCXJl YWRidWYgPSBwZ19tYWxsb2Moc2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJCWNo YXIJICAgKnJlbmQ7CisKKwkJcnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnAp OworCQlpZiAocnNpemUgPCBzaXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisK KwkJcnAgPSAoY2hhciAqKSByZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiArIHJz aXplOworCisJCXdoaWxlIChycCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOworCQkJ c2l6ZV90CQlvdXRsZW4gPSBmcy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9IHJl bmQgLSBycDsKKworCQkJbWVtc2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0dXMg PSBMWjRGX2RlY29tcHJlc3MoZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJCQkJ CSBycCwgJnJlYWRfcmVtYWluLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkK KwkJCXsKKwkJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisK KwkJCXJwICs9IHJlYWRfcmVtYWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNwYWNl IGlzIGF2YWlsYWJsZSBpbiBwdHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVpdGhl ciBza2lwIGlmIG9uZSBhbHJlYWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNlbnQK KwkJCSAqIGluIHRoZSBvdXRidWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNpemUg PCBzaXplICYmIGVvbF9mb3VuZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOworCQkJ CXNpemVfdAkJbGliID0gKCFlb2xfZmxhZykgPyBzaXplIC0gZHNpemUgOiBzaXplIC0gMSAtIGRz aXplOworCQkJCXNpemVfdAkJbGVuID0gb3V0bGVuIDwgbGliID8gb3V0bGVuIDogbGliOworCisJ CQkJaWYgKGVvbF9mbGFnICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5idWZmZXIsICdcbicsIG91 dGxlbikpICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciArIDEpIDw9IGxlbikKKwkJ CQl7CisJCQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJZW9sX2ZvdW5kID0gdHJ1 ZTsKKwkJCQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNpemUsIGZzLT5idWZmZXIs IGxlbik7CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3aGF0IGRpZCBub3QgZml0 LCBpZiBhbnksIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZiAqLworCQkJCWlmIChsZW4gPCBv dXRsZW4pCisJCQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZlciArIGxlbiwgb3V0bGVu IC0gbGVuKTsKKwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkvKiBpZiB0aGVyZSBpcyBh dmFpbGFibGUgb3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVuID4gMCkKKwkJCXsKKwkJ CQl3aGlsZSAoZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92ZXJmbG93YWxsb2NsZW4p CisJCQkJeworCQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOworCQkJCQlmcy0+b3ZlcmZs b3didWYgPSBwZ19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJCQkJCQkJCSBmcy0+b3Zl cmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVyZmxvd2J1ZiArIGZz LT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+b3ZlcmZsb3dsZW4g Kz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6ZSAmJiBkc2l6ZSA8 IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVmKTsKKworCXJldHVy biAoaW50KSBkc2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUgYnl0ZXMgZnJvbSBwdHIg YW5kIHdyaXRlIHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGljIHNpemVfdAorTFo0Rmls ZV93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRh OworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNpemU7CisKKwkvKiBMYXp5 IGluaXQgKi8KKwlpZiAoTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkKKwkJcmV0dXJuIC0x OworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVuayA9IHJlbWFpbmlu ZyA8IExaNF9JTl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisKKwkJcmVtYWluaW5n IC09IGNodW5rOworCisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUoZnMtPmN0eCwgZnMt PmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBOVUxMKTsKKwkJaWYg KExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJ CXJldHVybiAtMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBm cy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJybm8pID8gZXJybm8gOiBFTk9T UEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICog ZnJlYWQoKSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxl cy4KKyAqLworc3RhdGljIHNpemVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZp bGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9y ZWFkX2ludGVybmFsKGZzLCBwdHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYg IUxaNEZpbGVfZW9mKENGSCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogZmdldGMoKSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJl c3NlZCBmaWxlcy4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRl X2RhdGE7CisJdW5zaWduZWQgY2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChm cywgJmMsIDEsIGZhbHNlKSAhPSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dl dF9lcnJvcihDRkgpKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAq IGZnZXRzKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmls ZXMuCisgKi8KK3N0YXRpYyBjaGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXpl LCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZp bGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQor CQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVf Z2V0X2Vycm9yKENGSCkpOworCisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDAp CisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChk ZSljb21wcmVzc2lvbiBvZiBhIHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRl IGFueQorICogcmVtYWluaW5nIGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0 aGUgTFo0IEFQSS4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJldDsKKwor CWZwID0gZnMtPmZwOworCWlmIChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2lu ZykKKwkJeworCQkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlw Z19mYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0 RXJyb3JOYW1lKHN0YXR1cykpOworCQkJZWxzZSBpZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVy LCAxLCBzdGF0dXMsIGZzLT5mcCkpICE9IHN0YXR1cykKKwkJCXsKKwkJCQllcnJubyA9IChlcnJu bykgPyBlcnJubyA6IEVOT1NQQzsKKwkJCQlXUklURV9FUlJPUl9FWElUOworCQkJfQorCisJCQlz dGF0dXMgPSBMWjRGX2ZyZWVDb21wcmVzc2lvbkNvbnRleHQoZnMtPmN0eCk7CisJCQlpZiAoTFo0 Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Np b246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCXN0YXR1cyA9IExaNEZfZnJlZURlY29tcHJlc3Npb25Db250ZXh0KGZzLT5kdHgp OworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g ZW5kIGRlY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMp KTsKKwkJCXBnX2ZyZWUoZnMtPm92ZXJmbG93YnVmKTsKKwkJfQorCisJCXBnX2ZyZWUoZnMtPmJ1 ZmZlcik7CisJfQorCisJcGdfZnJlZShmcyk7CisKKwlyZXR1cm4gZmNsb3NlKGZwKTsKK30KKwor c3RhdGljIGludAorTFo0RmlsZV9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3Qg Y2hhciAqbW9kZSwKKwkJCSBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpm cDsKKwlMWjRGaWxlICAgICpsejRmcCA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CisJaWYgKGZkID49IDApCisJCWZwID0gZmRvcGVuKGZkLCBtb2RlKTsKKwllbHNlCisJCWZwID0g Zm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKGZwID09IE5VTEwpCisJeworCQlsejRmcC0+ZXJyY29k ZSA9IGVycm5vOworCQlyZXR1cm4gMTsKKwl9CisKKwlsejRmcC0+ZnAgPSBmcDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50CitMWjRGaWxlX29wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0 aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJY2hhcgkg ICAqZm5hbWU7CisJaW50CQkJcmV0OworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMubHo0IiwgcGF0 aCk7CisJcmV0ID0gQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBDRkgpOworCXBnX2Zy ZWUoZm5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1YmxpYyByb3V0aW5lcwor ICovCit2b2lkCitJbml0Q29tcHJlc3NGaWxlSGFuZGxlTFo0KENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZILAorCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCit7CisJTFo0RmlsZSAgICAqbHo0ZnA7CisKKwlDRkgtPm9wZW5fZnVuYyA9IExaNEZp bGVfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGVfZnVuYyA9IExaNEZpbGVfb3Blbl93cml0ZTsKKwlD RkgtPnJlYWRfZnVuYyA9IExaNEZpbGVfcmVhZDsKKwlDRkgtPndyaXRlX2Z1bmMgPSBMWjRGaWxl X3dyaXRlOworCUNGSC0+Z2V0c19mdW5jID0gTFo0RmlsZV9nZXRzOworCUNGSC0+Z2V0Y19mdW5j ID0gTFo0RmlsZV9nZXRjOworCUNGSC0+ZW9mX2Z1bmMgPSBMWjRGaWxlX2VvZjsKKwlDRkgtPmNs b3NlX2Z1bmMgPSBMWjRGaWxlX2Nsb3NlOworCUNGSC0+Z2V0X2Vycm9yX2Z1bmMgPSBMWjRGaWxl X2dldF9lcnJvcjsKKworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7 CisJbHo0ZnAgPSBwZ19tYWxsb2MwKHNpemVvZigqbHo0ZnApKTsKKwlpZiAoQ0ZILT5jb21wcmVz c2lvbl9zcGVjLmxldmVsID49IDApCisJCWx6NGZwLT5wcmVmcy5jb21wcmVzc2lvbkxldmVsID0g Q0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBsejRm cDsKK30KKyNlbHNlCQkJCQkJCS8qIFVTRV9MWjQgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0 KENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qg c3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0Q29t cHJlc3NGaWxlSGFuZGxlTFo0KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0 YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxa NCIpOworfQorI2VuZGlmCQkJCQkJCS8qIFVTRV9MWjQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19sejQuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MGRiZTAwZDQ2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCkBAIC0wLDAgKzEsMjQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2x6NC5oCisgKgkgTFo0IGlu dGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfbHo0LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBf Q09NUFJFU1NfTFo0X0hfCisjZGVmaW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUgImNv bXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JT dGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19M WjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA4NGU5ZjBkZWZhLi4wZGE0NzZhNGMzIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZp bGVzKAogICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2NvbXByZXNzX2lvLmMnLAorICAnY29tcHJl c3NfbHo0LmMnLAogICAnY29tcHJlc3Nfbm9uZS5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ3Bh cmFsbGVsLmMnLApAQCAtMTgsNyArMTksNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmls ZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9uJywK ICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9oLAot ICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxpYl0sCisgIGRlcGVuZGVu Y2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWJdLAogICBrd2FyZ3M6IGludGVy bmFsX2xpYl9hcmdzLAogKQogCkBAIC04Niw3ICs4NywxMCBAQCB0ZXN0cyArPSB7CiAgICdzZCc6 IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxk X2RpcigpLAogICAndGFwJzogewotICAgICdlbnYnOiB7J0daSVBfUFJPR1JBTSc6IGd6aXAucGF0 aCgpfSwKKyAgICAnZW52JzogeworICAgICAgJ0daSVBfUFJPR1JBTSc6IGd6aXAucGF0aCgpLAor ICAgICAgJ0xaNCc6IHByb2dyYW1fbHo0LmZvdW5kKCkgPyBwcm9ncmFtX2x6NC5wYXRoKCkgOiAn JywKKyAgICB9LAogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9iYXNpYy5wbCcsCiAgICAg ICAndC8wMDJfcGdfZHVtcC5wbCcsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5k ZXggMTQwNTQ1OTcyMy4uNzE3MDAyYmY5MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYwpAQCAtMjA3NCw3ICsyMDc0LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZl SGFuZGxlICpBSCkKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUg aXMgYSBkaXJlY3RvcnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQi IChvciAidG9jLmRhdC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIg KG9yICJ0b2MuZGF0LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFI LT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwODQs NiArMjA4NCwxMCBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQog I2lmZGVmIEhBVkVfTElCWgogCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVj LCAidG9jLmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OworI2VuZGlmCisjaWZkZWYg VVNFX0xaNAorCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRh dC5sejQiKSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKICNlbmRpZgogCQkJcGdfZmF0YWwoImRp cmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0 b2MuZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kaXJlY3RvcnkuYwppbmRleCBhMmY4ODk5NWMwLi5jZTJhMDgzOGZhIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKQEAgLTc3OSwxMCArNzc5LDEzIEBAIF9Q cmVwUGFyYWxsZWxSZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCWlmIChzdGF0KGZuYW1l LCAmc3QpID09IDApCiAJCQl0ZS0+ZGF0YUxlbmd0aCA9IHN0LnN0X3NpemU7Ci0JCWVsc2UKKwkJ ZWxzZSBpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9O X05PTkUpCiAJCXsKLQkJCS8qIEl0IG1pZ2h0IGJlIGNvbXByZXNzZWQgKi8KLQkJCXN0cmxjYXQo Zm5hbWUsICIuZ3oiLCBzaXplb2YoZm5hbWUpKTsKKwkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJCQlzdHJsY2F0KGZuYW1lLCAi Lmd6Iiwgc2l6ZW9mKGZuYW1lKSk7CisJCQllbHNlIGlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJCXN0cmxjYXQoZm5hbWUsICIubHo0 Iiwgc2l6ZW9mKGZuYW1lKSk7CisKIAkJCWlmIChzdGF0KGZuYW1lLCAmc3QpID09IDApCiAJCQkJ dGUtPmRhdGFMZW5ndGggPSBzdC5zdF9zaXplOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA1MjdjNzY1 MWFiLi4wODEwNTMzN2IxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTcxNSwxMyArNzE1LDEyIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CiAJCQkv KiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisJCQkvKiBmYWxs dGhyb3VnaCAqLworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKIAkJCWJyZWFrOwogCQljYXNl IFBHX0NPTVBSRVNTSU9OX1pTVEQ6CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBp cyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CiAJCQlicmVhazsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0 IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCmluZGV4IDc4NDU0OTI4Y2MuLjcyYjE5ZWU2Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCkBAIC0xMzksNiArMTM5LDgwIEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFy Z3MgICAgPT4gWyAnLWQnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oi LCBdLAogCQl9LAogCX0sCisKKwkjIERvIG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBj b3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNvbXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0 ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0 JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1j dXN0b20nLAorCQkJJy0tY29tcHJlc3M9bHo0JywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lv bl9sejRfY3VzdG9tLmR1bXAiLAorCQkJJ3Bvc3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9s ejRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1w IiwKKwkJXSwKKwkJY29tbWFuZF9saWtlID0+IHsKKwkJCWNvbW1hbmQgPT4gWworCQkJCSdwZ19y ZXN0b3JlJywKKwkJCQknLWwnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1w IiwKKwkJCV0sCisJCQlleHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogbHo0LywKKwkJCW5hbWUg PT4gJ2RhdGEgY29udGVudCBpcyBsejQgY29tcHJlc3NlZCcKKwkJfSwKKwl9LAorCisJIyBEbyBu b3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwlj b21wcmVzc2lvbl9sejRfZGlyID0+IHsKKwkJdGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9u JywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJ CSdwZ19kdW1wJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1qb2JzPTInLAorCQkJ Jy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAgICAgICAgICAgICAgICctLWNvbXByZXNzPWx6NDox JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2RpciIsICdwb3N0Z3Jlcycs CisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRv YyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0b3JlLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJv Z3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCScteicsICctZicsICct LXJtJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MiLAorCQkJ CSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJ fSwKKwkJIyBWZXJpZnkgdGhhdCBkYXRhIGZpbGVzIHdlcmUgY29tcHJlc3NlZAorCQlnbG9iX3Bh dHRlcm5zID0+IFsKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL3RvYy5kYXQiLAor CQkgICAgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvKi5kYXQubHo0IiwKKwkJXSwKKwkJ cmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLS1qb2JzPTInLAorCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2RpciIsCisJCV0sCisJfSwKKworCWNvbXByZXNzaW9uX2x6NF9wbGFpbiA9PiB7 CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICctLWZvcm1hdD1w bGFpbicsICctLWNvbXByZXNzPWx6NCcsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9u X2x6NF9wbGFpbi5zcWwubHo0IiwgJ3Bvc3RncmVzJywKKwkJXSwKKwkJIyBEZWNvbXByZXNzIHRo ZSBnZW5lcmF0ZWQgZmlsZSB0byBydW4gdGhyb3VnaCB0aGUgdGVzdHMuCisJCWNvbXByZXNzX2Nt ZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9LAorCQkJYXJncyAgICA9PiBbCisJCQkJ Jy1kJywgJy1mJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbC5sejQi LAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsIiwKKwkJCV0sCisJCX0s CisJfSwKKwogCWNsZWFuID0+IHsKIAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLApAQCAt NDE3NSwxMSArNDI0OSwxMSBAQCBmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1 bnMpCiAJbXkgJHJ1bl9kYiAgID0gJ3Bvc3RncmVzJzsKIAogCSMgU2tpcCBjb21tYW5kLWxldmVs IHRlc3RzIGZvciBnemlwIGlmIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGl0LgotCWlmICggICBk ZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSkKLQkJJiYgJHBnZHVt cF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJwotCQkmJiAhJHN1cHBvcnRz X2d6aXApCisJaWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSAmJgorCQko JHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJyAmJiAhJHN1cHBv cnRzX2d6aXApIHx8CisJCSgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEg J2x6NCcgJiYgISRzdXBwb3J0c19sejQpKQogCXsKLQkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUg dG8gbm8gZ3ppcCBzdXBwb3J0IjsKKwkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUgdG8gbm8gJHBn ZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IHN1cHBvcnQiOwogCQluZXh0OwogCX0K IApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjayBiL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKaW5kZXggZGI0Mjk0NzRhMi4uMmM1MDQyZWI0 MSAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjaworKysgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCkBAIC0xNTIsNiArMTUyLDcgQEAgZG8K IAkjIGFzIGZpZWxkIG5hbWVzLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29uJ3QgY2hh bmdlIGl0IG5vdy4KIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgg JiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0Lmgg JiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYg Y29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggJiYgY29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggN2U2MmM2ZWYzZC4u NjkyYzVjZWIwYiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzODMsNiArMTM4Myw3 IEBAIExXTG9jawogTFdMb2NrSGFuZGxlCiBMV0xvY2tNb2RlCiBMV0xvY2tQYWRkZWQKK0xaNENv bXByZXNzb3JTdGF0ZQogTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdAogTFo0Rl9kZWNvbXByZXNz T3B0aW9uc190CiBMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QKLS0gCjIuMzQuMQoK --b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M Content-Type: text/x-patch; name=v26-0003-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v26-0003-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSBmNTIzZDJhMmVkZWU0YjliNzgwNGEyNTM5MjMwODMyYjhkMWJkZjJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTQ6NDU6NTAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NiAzLzRdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCA0MDEgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NCArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAgOTEgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICA0ICsKIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICB8ICAgMiArCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDUxIGluc2VydGlvbnMo KyksIDc0OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2d6aXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCmluZGV4IGVmMWVkMGYzZTUuLjAwMTNiYzA4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTI0 LDcgKzI0LDkgQEAgTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVf dXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiAKIE9CSlMgPSBcCiAJJChXSU4zMlJF UykgXAorCWNvbXByZXNzX2d6aXAubyBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3Nfbm9u ZS5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCiAJcGdfYmFja3VwX2FyY2hpdmVy Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMjRlNjhmZDAyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGNvbXByZXNzX2d6aXAuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gcmVhZCBv ciB3cml0ZSBhIGd6aXAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19nemlwLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJj b21wcmVzc19nemlwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpZmRlZiBI QVZFX0xJQloKKyNpbmNsdWRlICJ6bGliLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVm IHN0cnVjdCBHemlwQ29tcHJlc3NvclN0YXRlCit7CisJel9zdHJlYW1wCXpwOworCisJdm9pZAkg ICAqb3V0YnVmOworCXNpemVfdAkJb3V0c2l6ZTsKK30gR3ppcENvbXByZXNzb3JTdGF0ZTsKKwor LyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9P ICovCitzdGF0aWMgdm9pZAorRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQoreworCUd6aXBDb21wcmVzc29yU3Rh dGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJ el9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsKKwl2b2lkCSAgICpvdXQgPSBnemlwY3MtPm91dGJ1 ZjsKKwlpbnQJCQlyZXMgPSBaX09LOworCisJd2hpbGUgKGd6aXBjcy0+enAtPmF2YWlsX2luICE9 IDAgfHwgZmx1c2gpCisJeworCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDog Wl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisJCWlmICgoZmx1c2ggJiYg KHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpKQorCQkJfHwgKHpwLT5hdmFpbF9vdXQg PT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKKwkJCSkKKwkJeworCQkJLyoKKwkJCSAq IEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNpbmNlIGEgemVybyBs ZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBjdXN0b20gZm9ybWF0 LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICogaGFwcGVuIGJ1dC4uLgorCQkJICovCisJCQlpZiAo enAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFu eSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8K KwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KKwkJCQkgKi8K KwkJCQlzaXplX3QJCWxlbiA9IGd6aXBjcy0+b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisKKwkJ CQljcy0+d3JpdGVGKEFILCAoY2hhciAqKSBvdXQsIGxlbik7CisJCQl9CisJCQl6cC0+bmV4dF9v dXQgPSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXplOworCQl9CisKKwkJ aWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CitFbmRDb21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0 ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cDsKKworCWlmIChnemlwY3MtPnpw KQorCXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+bmV4dF9pbiA9IE5VTEw7CisJCXpwLT5h dmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxpYiBi dWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisKKwkJaWYg KGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNv bXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKKworCQlwZ19mcmVlKGd6aXBjcy0+b3V0 YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9CisKKwlwZ19mcmVlKGd6aXBjcyk7CisJ Y3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0Fy Y2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkg ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRl ICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpf c3RyZWFtcAl6cDsKKworCWlmICghZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cCA9 ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwkJenAtPnphbGxvYyA9 IFpfTlVMTDsKKwkJenAtPnpmcmVlID0gWl9OVUxMOworCQl6cC0+b3BhcXVlID0gWl9OVUxMOwor CisJCS8qCisJCSAqIG91dHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBj YW4gb3V0cHV0IHRvLiAgV2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUg YmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5kIGEgdHJhaWxpbmcgemVy byBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBjcy0+b3V0YnVmID0gcGdf bWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRzaXplID0gWkxJQl9PVVRf U0laRTsKKworCQkvKgorCQkgKiBBIGxldmVsIG9mIHplcm8gc2ltcGx5IGNvcGllcyB0aGUgaW5w dXQgb25lIGJsb2NrIGF0IHRoZSB0aW1lLiBUaGlzCisJCSAqIGlzIHByb2JhYmx5IG5vdCB3aGF0 IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2UuCisJCSAqLworCQlp ZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPT0gMCkKKwkJCXBnX2ZhdGFsKCJyZXF1ZXN0 ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVsIHdhcyBzcGVjaWZpZWQiKTsK KworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKSAhPSBa X09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJh cnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBp cyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwkJenAtPm5leHRfb3V0ID0g Z3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJfQor CisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBkYXRh KTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JHemlw KEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUd6 aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJlYW1w CXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250Owor CWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkgcGdf bWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAtPnpm cmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxsb2Mo WkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19tYWxs b2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQor CQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMi LAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAq LworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQl6 cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2luID0gY250OworCisJCXdo aWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBv dXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKworCQkJcmVzID0gaW5mbGF0 ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKKwkJ CQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKwor CQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdyaXRl KG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0KKwor CXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMgIT0g Wl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6cC0+ YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCWlm IChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9T SVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBa X09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVz IiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenApOworfQor CisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkv TyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJ ICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjczsKKworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRh RnJvbUFyY2hpdmVHemlwOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVHemlw OworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yR3ppcDsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVj ID0gY29tcHJlc3Npb25fc3BlYzsKKworCWd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICop IHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBDb21wcmVzc29yU3RhdGUpKTsKKworCWNzLT5wcml2YXRl X2RhdGEgPSBnemlwY3M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21w cmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHNp emVfdAorR3ppcF9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOwor CXNpemVfdAkJcmV0OworCisJcmV0ID0gZ3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJl dCAhPSBzaXplICYmICFnemVvZihnemZwKSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3Qg Y2hhciAqZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5P ID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+ cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6d3JpdGUoZ3pmcCwgcHRyLCBzaXplKTsKK30KKwor c3RhdGljIGludAorR3ppcF9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6Rmls ZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCWVy cm5vID0gMDsKKwlyZXQgPSBnemdldGMoZ3pmcCk7CisJaWYgKHJldCA9PSBFT0YpCisJeworCQlp ZiAoIWd6ZW9mKGd6ZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK0d6aXBfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgt PnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKwor c3RhdGljIGludAorR3ppcF9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZp bGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCUNGSC0+cHJpdmF0ZV9k YXRhID0gTlVMTDsKKworCXJldHVybiBnemNsb3NlKGd6ZnApOworfQorCitzdGF0aWMgaW50CitH emlwX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pG aWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemVvZihnemZwKTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp Cit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3Qg Y2hhciAqZXJybXNnOworCWludAkJCWVycm51bTsKKworCWVycm1zZyA9IGd6ZXJyb3IoZ3pmcCwg JmVycm51bSk7CisJaWYgKGVycm51bSA9PSBaX0VSUk5PKQorCQllcnJtc2cgPSBzdHJlcnJvcihl cnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCitzdGF0aWMgaW50CitHemlwX29wZW4oY29u c3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnA7CisJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07 CisKKwlpZiAoQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01QUkVT U0lPTikKKwl7CisJCS8qCisJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxl dmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlIGl0CisJCSAqLworCQlzbnByaW50Zihtb2RlX2NvbXBy ZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJCQkgbW9kZSwgQ0ZI LT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHkobW9kZV9jb21w cmVzc2lvbiwgbW9kZSk7CisKKwlpZiAoZmQgPj0gMCkKKwkJZ3pmcCA9IGd6ZG9wZW4oZHVwKGZk KSwgbW9kZV9jb21wcmVzc2lvbik7CisJZWxzZQorCQlnemZwID0gZ3pvcGVuKHBhdGgsIG1vZGVf Y29tcHJlc3Npb24pOworCisJaWYgKGd6ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlDRkgt PnByaXZhdGVfZGF0YSA9IGd6ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3pp cF9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwlpbnQJ CQlzYXZlX2Vycm5vOworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwlyZXQg PSBDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCk7CisKKwlzYXZlX2Vycm5vID0g ZXJybm87CisJcGdfZnJlZShmbmFtZSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCisJcmV0dXJu IHJldDsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBHemlwX29wZW47CisJQ0ZILT5v cGVuX3dyaXRlX2Z1bmMgPSBHemlwX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBHemlw X3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gR3ppcF93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9 IEd6aXBfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9IEd6aXBfZ2V0YzsKKwlDRkgtPmNsb3NlX2Z1 bmMgPSBHemlwX2Nsb3NlOworCUNGSC0+ZW9mX2Z1bmMgPSBHemlwX2VvZjsKKwlDRkgtPmdldF9l cnJvcl9mdW5jID0gR3ppcF9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBj b21wcmVzc2lvbl9zcGVjOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQorI2Vsc2UJ CQkJCQkJLyogSEFWRV9MSUJaICovCit2b2lkCitJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3Nv clN0YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmls ZUhhbmRsZUd6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRo aXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsK K30KKyNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIzOTJjNjk3YjQKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCkBAIC0wLDAgKzEsMjQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2d6aXAuaAorICoJIEdaSVAg aW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfQ09NUFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVk ZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXBy ZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVH emlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJCQkJICAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9D T01QUkVTU19HWklQX0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IGUxNzMzY2U1N2MuLmU0 ZTAwOGQyZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC05LDQyICs5LDU0IEBACiAgKgogICog VGhpcyBmaWxlIGluY2x1ZGVzIHR3byBBUElzIGZvciBkZWFsaW5nIHdpdGggY29tcHJlc3NlZCBk YXRhLiBUaGUgZmlyc3QKICAqIHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHksIHVzaW5nIGNhbGxi YWNrcyB0byByZWFkL3dyaXRlIGRhdGEgZnJvbSB0aGUKLSAqIHVuZGVybHlpbmcgc3RyZWFtLiBU aGUgc2Vjb25kIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIGZvcGVuL2d6b3BlbiBhbmQKKyAqIHVu ZGVybHlpbmcgc3RyZWFtLiBUaGUgc2Vjb25kIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIGZvcGVu IGFuZAogICogZnJpZW5kcywgcHJvdmlkaW5nIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRob3Nl LCBidXQgYWJzdHJhY3RzIGF3YXkKLSAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gQm90aCBB UElzIHVzZSBsaWJ6IGZvciB0aGUgY29tcHJlc3Npb24sIGJ1dAotICogdGhlIHNlY29uZCBBUEkg dXNlcyBnemlwIGhlYWRlcnMsIHNvIHRoZSByZXN1bHRpbmcgZmlsZXMgY2FuIGJlIGVhc2lseQot ICogbWFuaXB1bGF0ZWQgd2l0aCB0aGUgZ3ppcCB1dGlsaXR5LgorICogdGhlIHBvc3NpYmxlIGNv bXByZXNzaW9uLiBUaGUgc2Vjb25kIEFQSSBpcyBhaW1lZCBmb3IgdGhlIHJlc3VsdGluZworICog ZmlsZXMgdG8gYmUgZWFzaWx5IG1hbmlwdWxhdGVkIHdpdGggYW4gZXh0ZXJuYWwgY29tcHJlc3Np b24gdXRpbGl0eQorICogcHJvZ3JhbS4KKyAqCisgKiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyB0 aGUgaW1wbGVtZW50YXRpb24gd2hlbiBjb21wcmVzc2lvbiBpcyBub25lIGZvcgorICogYm90aCBB UEkncy4KICAqCiAgKiBDb21wcmVzc29yIEFQSQogICogLS0tLS0tLS0tLS0tLS0KICAqCiAgKglU aGUgaW50ZXJmYWNlIGZvciB3cml0aW5nIHRvIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhyZWUg ZnVuY3Rpb25zOgotICoJQWxsb2NhdGVDb21wcmVzc29yLCBXcml0ZURhdGFUb0FyY2hpdmUgYW5k IEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCi0gKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRo ZW4gd3JpdGUgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgV3JpdGVEYXRhVG9BcmNoaXZlCi0gKglh cyBtYW55IHRpbWVzIGFzIG5lZWRlZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gV3JpdGVE YXRhVG9BcmNoaXZlCi0gKglhbmQgRW5kQ29tcHJlc3NvciB3aWxsIGNhbGwgdGhlIFdyaXRlRnVu YyB0aGF0IHdhcyBwcm92aWRlZCB0bwotICoJQWxsb2NhdGVDb21wcmVzc29yIGZvciBlYWNoIGNo dW5rIG9mIGNvbXByZXNzZWQgZGF0YS4KLSAqCi0gKglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5n IGFuIGFyY2hpdmUgY29uc2lzdHMgb2YganVzdCBvbmUgZnVuY3Rpb246Ci0gKglSZWFkRGF0YUZy b21BcmNoaXZlLiBSZWFkRGF0YUZyb21BcmNoaXZlIHJlYWRzIHRoZSB3aG9sZSBjb21wcmVzc2Vk IGlucHV0Ci0gKglzdHJlYW0sIGJ5IHJlcGVhdGVkbHkgY2FsbGluZyB0aGUgZ2l2ZW4gUmVhZEZ1 bmMuIFJlYWRGdW5jIHJldHVybnMgdGhlCi0gKgljb21wcmVzc2VkIGRhdGEgY2h1bmsgYXQgYSB0 aW1lLCBhbmQgUmVhZERhdGFGcm9tQXJjaGl2ZSBkZWNvbXByZXNzZXMgaXQKLSAqCWFuZCBwYXNz ZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50aWwgUmVhZEZ1bmMgcmV0 dXJucyAwCi0gKgl0byBzaWduYWwgRU9GLgorICoJQWxsb2NhdGVDb21wcmVzc29yLCB3cml0ZURh dGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICoJQWxsb2NhdGVDb21wcmVz c29yLCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIHdyaXRlRGF0YSBhcyBtYW55 CisgKgl0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIHdyaXRlRGF0 YSB3aWxsIGNhbGwgdGhlCisgKglXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlkZWQgdG8gQWxsb2Nh dGVDb21wcmVzc29yIGZvciBlYWNoIGNodW5rIG9mCisgKgljb21wcmVzc2VkIGRhdGEuCiAgKgot ICoJVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVz c2VkIHN0cmVhbXMuCisgKglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29u c2lzdHMgb2YgdGhlIHNhbWUgdGhyZWUgZnVuY3Rpb25zOgorICoJQWxsb2NhdGVDb21wcmVzc29y LCByZWFkRGF0YSwgYW5kIEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0 ZUNvbXByZXNzb3IsIHRoZW4gcmVhZCBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyByZWFkRGF0YSB0 byByZWFkIHRoZQorICoJd2hvbGUgY29tcHJlc3NlZCBzdHJlYW0gd2hpY2ggcmVwZWF0ZWRseSBj YWxscyB0aGUgZ2l2ZW4gUmVhZEZ1bmMuIFJlYWRGdW5jCisgKglyZXR1cm5zIHRoZSBjb21wcmVz c2VkIGRhdGEgb25lIGNodW5rIGF0IGEgdGltZS4gVGhlbiByZWFkRGF0YSBkZWNvbXByZXNzZXMK KyAqCWl0IGFuZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50 aWwgUmVhZEZ1bmMgcmV0dXJucyAwCisgKgl0byBzaWduYWwgRU9GLiBUaGUgaW50ZXJmYWNlIGlz IHRoZSBzYW1lIGZvciBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQKKyAqCXN0cmVhbXMuCiAg KgogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KgotICoJVGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBD IHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dz IHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5j b21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJ dGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9w ZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkg b3BlbnMgYSBmaWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVz IGlmIHRoZSBmaWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBz dWZmaXggdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhh bmRsZSBib3RoCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglUaGUg Y29tcHJlc3NlZCBzdHJlYW0gQVBJIGlzIHByb3ZpZGluZyBhIHNldCBvZiBmdW5jdGlvbiBwb2lu dGVycyBmb3IKKyAqCW9wZW5pbmcsIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBmaW5hbGx5IGNsb3Np bmcgZmlsZXMuIFRoZSBpbXBsZW1lbnRlZAorICoJZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGRvY3Vt ZW50ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgYW5kIGFyZQorICoJY29tbW9u IGZvciBhbGwgc3RyZWFtcy4gSXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gdXNlIHRoZSBzYW1lIGZ1 bmN0aW9ucyBmb3IKKyAqCWJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMu CisgKgorICoJVGhlIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aHJlZSBmdW5jdGlvbnMsIEluaXRD b21wcmVzc0ZpbGVIYW5kbGUsCisgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUsIGFu ZCBFbmRDb21wcmVzc0ZpbGVIYW5kbGUuIElmIHRoZQorICoJY29tcHJlc3Npb24gaXMga25vd24s IHRoZW4gc3RhcnQgYnkgY2FsbGluZyBJbml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICoJb3RoZXJ3 aXNlIGRpc2NvdmVyIGl0IGJ5IHVzaW5nIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZS4g VGhlbiBjYWxsCisgKgl0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXMgcmVxdWlyZWQgZm9yIHRoZSBy ZWFkL3dyaXRlIG9wZXJhdGlvbnMuIEZpbmFsbHkKKyAqCWNhbGwgRW5kQ29tcHJlc3NGaWxlSGFu ZGxlIHRvIGVuZCB0aGUgc3RyZWFtLgorICoKKyAqCUluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhh bmRsZSB0cmllcyB0byBkZWZmZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRoZQorICoJZmlsZW5hbWUg c3VmZml4LiBJZiB0aGUgc3VmZml4IGlzIG5vdCB5ZXQga25vd24sIHRoZW4gaXQgdHJpZXMgdG8g c2ltcGx5CisgKglvcGVuIHRoZSBmaWxlLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9w ZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3oKKyAqCXN1ZmZpeC4KICAqCiAgKiBJREVOVElG SUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTUzLDEzICs2 NSwxNCBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjb21wcmVzc19nemlwLmgi CiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21wcmVzc19ub25lLmgiCiAj aW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRl IDx6bGliLmg+Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBHZW5lcmlj IGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MSwxMTAgKzEwNCwyNSBA QCBzdXBwb3J0c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiB0eXBl ZGVmIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uaCAqLwotc3RydWN0IENvbXByZXNzb3JTdGF0ZQot ewotCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKLQlXcml0ZUZ1 bmMJd3JpdGVGOwotCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAg KnpsaWJPdXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKLQotLyogUm91dGlu ZXMgdGhhdCBzdXBwb3J0IHpsaWIgY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotI2lmZGVmIEhBVkVf TElCWgotc3RhdGljIHZvaWQgSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3Ms IGludCBsZXZlbCk7Ci1zdGF0aWMgdm9pZCBEZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgYm9vbCBmbHVzaCk7Ci1z dGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVh ZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAq ZGF0YSwgc2l6ZV90IGRMZW4pOwotc3RhdGljIHZvaWQgRW5kQ29tcHJlc3NvclpsaWIoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwotI2VuZGlmCi0KLS8qIFJvdXRpbmVz IHRoYXQgc3VwcG9ydCB1bmNvbXByZXNzZWQgZGF0YSBJL08gKi8KLXN0YXRpYyB2b2lkIFJlYWRE YXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1z dGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExl bik7Ci0KLS8qIFB1YmxpYyBpbnRlcmZhY2Ugcm91dGluZXMgKi8KLQotLyogQWxsb2NhdGUgYSBu ZXcgY29tcHJlc3NvciAqLworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IuCisgKi8K IENvbXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYp CisJCQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0ZUYpCiB7CiAJQ29tcHJlc3Nv clN0YXRlICpjczsKIAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgot CiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JT dGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwogCWNzLT53cml0ZUYgPSB3cml0ZUY7Ci0JY3Mt PmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwotCi0JLyoKLQkgKiBQZXJmb3Jt IGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLQkgKi8KLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxpYihjcywgY3MtPmNvbXByZXNz aW9uX3NwZWMubGV2ZWwpOwotI2VuZGlmCi0KLQlyZXR1cm4gY3M7Ci19CiAKLS8qCi0gKiBSZWFk IGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFu ZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgotICovCi12b2lkCi1SZWFkRGF0YUZy b21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCVJlYWRGdW5jIHJlYWRGKQotewogCWlm IChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlS ZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOwotCWlmIChjb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCXsKLSNpZmRlZiBIQVZFX0xJQloK LQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKLSNlbHNlCi0JCXBnX2ZhdGFs KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlw Iik7Ci0jZW5kaWYKLQl9Ci19CisJCUluaXRDb21wcmVzc29yTm9uZShjcywgY29tcHJlc3Npb25f c3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fR1pJUCkKKwkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsK IAotLyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2 aWEgd3JpdGVGKS4KLSAqLwotdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKQotewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJV3JpdGVE YXRhVG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRMZW4pOwotI2Vsc2UKLQkJCXBnX2ZhdGFs KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlw Iik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlX cml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExlbik7Ci0JCQlicmVhazsKLQkJ Y2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIFBH X0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRo b2QiKTsKLQkJCWJyZWFrOwotCX0KKwlyZXR1cm4gY3M7CiB9CiAKIC8qCkBAIC0yMDMsMjMzICsx MzEsMzEgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcykKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUVuZENvbXByZXNzb3Ja bGliKEFILCBjcyk7Ci0jZW5kaWYKLQlmcmVlKGNzKTsKKwljcy0+ZW5kKEFILCBjcyk7CisJcGdf ZnJlZShjcyk7CiB9CiAKLS8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRvIGVhY2ggY29t cHJlc3Npb24gbWV0aG9kLiAqLwotCi0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICogRnVuY3Rpb25z IGZvciB6bGliIGNvbXByZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1Jbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQotewotCXpfc3RyZWFt cAl6cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0 cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpw LT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRoZSBidWZmZXIg c2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0dWFsbHkgYWxs b2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8gYXBwZW5k IGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgotCSAqLwotCWNz LT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQljcy0+ emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0KHpwLCBsZXZl bCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9u IGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBhcmFub2lkIC0g bWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLwotCXpwLT5u ZXh0X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxp Yk91dFNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1FbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7 Ci0KLQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQotCS8qIEZsdXNo IGFueSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0ZUNvbXByZXNz b3JabGliKEFILCBjcywgdHJ1ZSk7Ci0KLQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1z Zyk7Ci0KLQlmcmVlKGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1EZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsIGJvb2wgZmx1c2gpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNoYXIJ ICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAoY3Mt PnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwgZmx1 c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VSUk9S KQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwot CQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJCXx8 ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkpCi0J CXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1bmtz LCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBpbiB0 aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQuLi4K LQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7Ci0J CQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJyb3Ig Y2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBhcyB3 ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6cC0+ YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJenAt Pm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0 U2l6ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0JfQot fQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90 IGRMZW4pCi17Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeShjaGFyICos IGRhdGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21wcmVzc29yWmxp YihBSCwgY3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVa bGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQl6X3N0cmVhbXAJenA7 Ci0JY2hhcgkgICAqb3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JenAgPSAoel9zdHJlYW1wKSBwZ19tYWxs b2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUg PSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElC X0lOX1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKLQotCW91dCA9IHBnX21hbGxvYyha TElCX09VVF9TSVpFICsgMSk7Ci0KLQlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCi0JCXBn X2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0J CQkJIHpwLT5tc2cpOwotCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICovCi0J d2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJenAtPm5leHRf aW4gPSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsKLQotCQl3aGlsZSAoenAt PmF2YWlsX2luID4gMCkKLQkJewotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJ enAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0KLQkJCXJlcyA9IGluZmxhdGUoenAsIDAp OwotCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJCW91dFta TElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQsIDEs IFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9Ci0KLQl6cC0+bmV4 dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpfU1RSRUFN X0VORCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWlsX291 dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVzICE9 IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5j b21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0genAt PmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpw LT5hdmFpbF9vdXQsIEFIKTsKLQl9Ci0KLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5t c2cpOwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKLX0KLSNlbmRpZgkJ CQkJCQkvKiBIQVZFX0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXByZXNz ZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VU X1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7Ci0KLQl3aGlsZSAoKGNudCA9IHJlYWRG KEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7Ci0J fQotCi0JZnJlZShidWYpOwotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3Qg Y2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7 Ci19Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBB UEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKIC8qCi0gKiBjZnAgcmVwcmVzZW50 cyBhbiBvcGVuIHN0cmVhbSwgd3JhcHBpbmcgdGhlIHVuZGVybHlpbmcgRklMRSBvciBnekZpbGUK LSAqIHBvaW50ZXIuIFRoaXMgaXMgb3BhcXVlIHRvIHRoZSBjYWxsZXJzLgorICogUHJpdmF0ZSBy b3V0aW5lcwogICovCi1zdHJ1Y3QgY2ZwCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQlGSUxFCSAgICp1bmNvbXByZXNz ZWRmcDsKLSNpZmRlZiBIQVZFX0xJQloKLQlnekZpbGUJCWNvbXByZXNzZWRmcDsKLSNlbmRpZgot fTsKKwlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisJaW50CQkJc3VmZml4 bGVuID0gc3RybGVuKHN1ZmZpeCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBpbnQJaGFz U3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpOwotI2VuZGlm CisJaWYgKGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBt ZW1jbXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0gc3VmZml4bGVuXSwKKwkJCQkgIHN1ZmZpeCwK KwkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKK30KIAogLyogZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcg ZXJybm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwogc3RhdGljIHZvaWQKQEAg LTQ0MiwzMjQgKzE2OCwxMDIgQEAgZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCiB9CiAKIC8qCi0g KiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFu ZCAnbW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCi0gKgotICogSWYgdGhl IGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICIuZ3oiIHN1ZmZp eCAoaWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4g U28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhpcyB3aWxsIG9wZW4gZWl0aGVy ICJmb28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGgg YW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIFB1YmxpYyBpbnRlcmZhY2UKICAqLwotY2ZwICoK LWNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCi17Ci0JY2Zw CQkgICAqZnA7Ci0KLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMg PSB7MH07Ci0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oiKSkK LQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsK LQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JfQotCWVsc2UK LSNlbmRpZgotCXsKLQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9OT05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLSNp ZmRlZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5VTEwpCi0JCXsKLQkJCWNoYXIJICAgKmZuYW1l OwotCi0JCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotCQkJZnAgPSBjZm9wZW4oZm5h bWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsK LQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KIAogLyoKLSAqIE9wZW4gYSBmaWxlIGZv ciB3cml0aW5nLiAncGF0aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFuZCAnbW9kZScgbXVz dAotICogYmUgYSBmaWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFuZCBnem9wZW4oKSB0 aGF0IGluZGljYXRlcyB3cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9yICJhYiIpLgotICoK LSAqIElmICdjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXBy ZXNzZWQgc3RyZWFtIGlzIG9wZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Npb25fc3BlYy5sZXZlbCcg dXNlZC4gVGhlICIuZ3oiIHN1ZmZpeCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCi0gKiAncGF0 aCcgaW4gdGhhdCBjYXNlLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4g ZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIEluaXRpYWxpemUgYSBjb21wcmVzcyBmaWxlIGhhbmRs ZSBmb3IgdGhlIHNwZWNpZmllZCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAgKi8KLWNmcCAqCi1j Zm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCSBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0Zp bGVIYW5kbGUgKgorSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JY2ZwCQkgICAqZnA7Ci0KLQlpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBj Zm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBI QVZFX0xJQloKLQkJY2hhcgkgICAqZm5hbWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oi LCBwYXRoKTsKLQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwot CQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLQkJZnAgPSBO VUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZw OwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRv cGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCi0gKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdm ZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQotICogZGVz Y3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp dHkgdG8gZG8gc28uCi0gKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVz c19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKLSAqIGN1cnJlbnQgYnVpbGQuCi0gKgot ICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgot ICovCi1zdGF0aWMgY2ZwICoKLWNmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQg ZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQotewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jMChzaXplb2YoY2ZwKSk7 Ci0KLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChjb21wcmVzc2lvbl9zcGVjLmxldmVsICE9 IFpfREVGQVVMVF9DT01QUkVTU0lPTikKLQkJewotCQkJLyogdXNlciBoYXMgc3BlY2lmaWVkIGEg Y29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQgKi8KLQkJCWNoYXIJCW1v ZGVfY29tcHJlc3Npb25bMzJdOwotCi0JCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXpl b2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMubGV2ZWwpOwotCQkJaWYgKGZkID49IDApCi0JCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9w ZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJZWxzZQotCQkJCWZwLT5jb21wcmVzc2VkZnAg PSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkv KiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJ CWlmIChmZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsK LQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwotCQl9 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0g TlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQot I2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotCQlpZiAoZmQgPj0g MCkKLQkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9kZSk7Ci0JCWVsc2UKLQkJ CWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCUNGSCA9IHBnX21hbGxv YzAoc2l6ZW9mKENvbXByZXNzRmlsZUhhbmRsZSkpOwogCi0JCWlmIChmcC0+dW5jb21wcmVzc2Vk ZnAgPT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsK LQkJfQotCX0KKwlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fTk9ORSkKKwkJSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ0ZILCBjb21wcmVzc2lvbl9z cGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9HWklQKQorCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDRkgsIGNvbXByZXNzaW9u X3NwZWMpOwogCi0JcmV0dXJuIGZwOworCXJldHVybiBDRkg7CiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScgYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4KLSAqIGNv bXByZXNzaW9uX3NwZWMuIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Np b24KLSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIE9wZW4gYSBmaWxl IGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91 bGQKKyAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4g TlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8KLWNmcCAqCi1jZm9wZW4oY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCi17Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5h bChwYXRoLCAtMSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19Ci0KLS8qCi0gKiBBc3NvY2lh dGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9k ZScKLSAqIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluIGNvbXByZXNzaW9uX3NwZWMuIFRo ZSBjYWxsZXIgbXVzdAotICogdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIHN1cHBvcnRl ZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBjb250YWlu cyB0aGUgc3VmZml4IG9mIGEgc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZCwKKyAqIGN1cnJl bnRseSB0aGlzIGluY2x1ZGVzIG9ubHkgIi5neiIsIHRoZW4gdGhpcyBjb21wcmVzc2lvbiB3aWxs IGJlIHVzZWQKKyAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Npb24gd2lsbCBi ZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKKyAqIHRvIG9wZW4gdGhlIGZpbGUgYXQg J3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29tcHJlc3Npb24K KyAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRoaXMgd2lsbCBv cGVuIGVpdGhlciAiZm9vIiBvcgorICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgog ICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJu by4KICAqLwotY2ZwICoKLWNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQljb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0Zp bGVIYW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBm ZCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgg PSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJICAgKmZuYW1lOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAotaW50Ci1jZnJlYWQodm9p ZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7CisJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogCi0JaWYgKHNpemUgPT0gMCkK LQkJcmV0dXJuIDA7CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAiciIpID09IDAgfHwgc3RyY21wKG1v ZGUsICJyYiIpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2Vk ZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQkJ aWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJewotCQkJaW50 CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+Y29tcHJlc3Nl ZGZwLCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAotCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJCQkgZXJybnVtID09IFpfRVJS Tk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQl9Ci0JfQorCWlmIChoYXNTdWZmaXgo Zm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9HWklQOwogCWVsc2UKLSNlbmRpZgogCXsKLQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXpl LCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnAtPnVu Y29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwot CX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQg c2l6ZSwgY2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRm cCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNl Ci0jZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRm cCk7Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0JaW50CQkJcmV0OworCQlib29sCQll eGlzdHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQg dW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWx0IHdpdGggY29tcHJlc3Npb24gKi8KKwkJ aWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQl7Ci0J CXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCisJCWlm ICghZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5jb21wcmVzc2VkZnApKQotCQkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJy bm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiBlbmQgb2YgZmlsZSIpOworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1l ID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0 KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KLQl9Ci0JZWxzZQogI2VuZGlmCi0JewotCQly ZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJCVJF QURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwogCX0KIAotCXJldHVybiByZXQ7Ci19 Ci0KLWNoYXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLSNpZmRl ZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+ Y29tcHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZ2V0cyhi dWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmNsb3NlKGNmcCAqZnAp Ci17Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5VTEwpCi0JewotCQllcnJubyA9IEVC QURGOwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXBy ZXNzZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMp OworCWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCkpCiAJewotCQlyZXN1 bHQgPSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVM TDsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7CiAJfQotCWVsc2UKLSNl bmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWZwLT51 bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJZnJlZV9r ZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIENGSDsKIH0KIAor LyoKKyAqIENsb3NlIGFuIG9wZW4gZmlsZSBoYW5kbGUgYW5kIHJlbGVhc2UgaXRzIG1lbW9yeS4K KyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGFuIGVycm9yIHZhbHVlIGFuZCBzZXRzIGVycm5v IGFwcHJvcHJpYXRlbHkuCisgKi8KIGludAotY2Zlb2YoY2ZwICpmcCkKK0VuZENvbXByZXNzRmls ZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlp ZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZwLT5jb21wcmVzc2VkZnApOwot CWVsc2UKLSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5jb21wcmVzc2VkZnApOwotfQorCWlu dAkJCXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQotewot I2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJaW50CQkJZXJy bnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZl cnJudW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJcmV0ID0gQ0ZILT5jbG9zZV9mdW5j KENGSCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKLQl9 Ci0jZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQorCWZyZWVfa2VlcF9lcnJubyhD RkgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9 IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7Ci0K LQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIG1l bWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAot CQkJCSAgc3VmZml4bGVuKSA9PSAwOworCXJldHVybiByZXQ7CiB9Ci0KLSNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uaAppbmRleCA4YmViMTA1OGVjLi44MjgwZDdiMGRjIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uaApAQCAtMjMsNTAgKzIzLDE2MCBAQAogCiBleHRlcm4gY2hhciAqc3VwcG9ydHNfY29tcHJl c3Npb24oY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsK IAotLyogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0byBXcml0ZURhdGFUb0FyY2hp dmUoKSAqLworLyoKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBpbiB3 cml0ZURhdGEoKQorICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogLyoKLSAqIFByb3RvdHlwZSBm b3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gUmVhZERhdGFGcm9tQXJjaGl2ZSgpCisgKiBQcm90b3R5 cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgaW4gcmVhZERhdGEoKQogICoKLSAqIFJlYWRE YXRhRnJvbUFyY2hpdmUgd2lsbCBjYWxsIHRoZSByZWFkIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVu dGlsIGl0Ci0gKiByZXR1cm5zIDAgdG8gc2lnbmFsIEVPRi4gUmVhZERhdGFGcm9tQXJjaGl2ZSBw YXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUKLSAqIGRhdGEgaW50byBpbiAqYnVmLCBvZiBsZW5n dGggKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUKLSAqIGNhbGxiYWNr IGZ1bmN0aW9uLCBpdCBjYW4gZnJlZSgpIGl0IGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVy bmluZyB0aGUKLSAqIG5ldyBidWZmZXIgYW5kIGl0cyBzaXplIGluICpidWYgYW5kICpidWZsZW4u CisgKiByZWFkRGF0YSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVuY3Rpb24gcmVwZWF0ZWRseSwgdW50 aWwgaXQgcmV0dXJucyAwIHRvIHNpZ25hbAorICogRU9GLiByZWFkRGF0YSBwYXNzZXMgYSBidWZm ZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aAorICogKmJ1Zmxlbi4g SWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNh biBmcmVlKCkgaXQKKyAqIGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUgbmV3 IGJ1ZmZlciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQKKyAqICpidWZsZW4uCiAgKgogICogUmV0 dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byAqYnVmLCBvciAwIG9uIEVPRi4KICAq LwogdHlwZWRlZiBzaXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICoq YnVmLCBzaXplX3QgKmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4g Y29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNz b3JTdGF0ZTsKK3N0cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkvKgorCSAqIFJlYWQgYWxsIGNv bXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5kIHByaW50 IGl0CisJICogb3V0IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZvaWQJCSgqcmVhZERhdGEpIChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENvbXBy ZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KKwkg Ki8KKwl2b2lkCQkoKndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAorCQkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOworCisJLyoK KwkgKiBFbmQgY29tcHJlc3Npb24gYW5kIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMgaWYgYW55Lgor CSAqLworCXZvaWQJCSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpOworCisJLyoKKwkgKiBDYWxsYmFjayBmdW5jdGlvbiB0byByZWFkIGZyb20gYW4gYWxyZWFk eSBwcm9jZXNzZWQgaW5wdXQgc3RyZWFtCisJICovCisJUmVhZEZ1bmMJcmVhZEY7CisKKwkvKgor CSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIGFuIGFscmVhZHkgcHJvY2Vzc2VkIGNodW5r IG9mIGRhdGEuCisJICovCisJV3JpdGVGdW5jCXdyaXRlRjsKKworCS8qCisJICogQ29tcHJlc3Np b24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBzdGF0ZS4KKwkgKi8KKwlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgorCSAqIFByaXZhdGUgZGF0YSB0byBi ZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsK K307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCQkJICAg UmVhZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4g dm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQkJCQljb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCQkJCVJl YWRGdW5jIHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZpbGUgSGFuZGxl CisgKi8KK3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVzc0ZpbGVIYW5k bGU7CisKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwkvKgorCSAqIE9wZW4gYSBmaWxl IGluIG1vZGUuCisJICoKKwkgKiBQYXNzIGVpdGhlciAncGF0aCcgb3IgJ2ZkJyBkZXBlbmRpbmcg b24gd2hldGhlciBhIGZpbGVwYXRoIG9yIGEgZmlsZQorCSAqIGRlc2NyaXB0b3IgaXMgYXZhaWxh YmxlLiAnbW9kZScgY2FuIGJlIG9uZSBvZiAncicsICdyYicsICd3JywgJ3diJywKKwkgKiAnYScs IGFuZCAnYWInLiBSZXF1cmlyZXMgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVI YW5kbGUuCisJICovCisJaW50CQkJKCpvcGVuX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBpbnQg ZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJICBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7 CisKKwkvKgorCSAqIE9wZW4gYSBmaWxlIGZvciB3cml0aW5nLgorCSAqCisJICogJ21vZGUnIGNh biBiZSBvbmUgb2YgJyd3JywgJ3diJywgJ2EnLCBhbmQgJ2FiJy4gUmVxdXJpcmVzIGFuIGFscmVh ZHkKKwkgKiBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJICovCisJaW50CQkJKCpv cGVuX3dyaXRlX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAorCQkJ CQkJCQkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2Zw OworCS8qCisJICogUmVhZCAnc2l6ZScgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBmaWxlIGFuZCBz dG9yZSB0aGVtIGludG8gJ3B0cicuCisJICovCisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQg KnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAotZXh0ZXJuIGNm cCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBj ZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQljb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2ZvcGVu X3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpj Zm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJCSBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJu IGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNm d3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNm Z2V0YyhjZnAgKmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBp bnQgbGVuKTsKLWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Zlb2Yo Y2ZwICpmcCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAgKmZwKTsKKwkv KgorCSAqIFdyaXRlICdzaXplJyBieXRlcyBvZiBkYXRhIGludG8gdGhlIGZpbGUgZnJvbSAncHRy Jy4KKwkgKi8KKwlzaXplX3QJCSgqd3JpdGVfZnVuYykgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAorCS8q CisJICogUmVhZCBhdCBtb3N0IHNpemUgLSAxIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29tcHJlc3Mg ZmlsZSBoYW5kbGUgaW50bworCSAqICdzJy4KKwkgKgorCSAqIFN0b3AgaWYgYW4gRU9GIG9yIGEg bmV3bGluZSBpcyBmb3VuZCBmaXJzdC4gJ3MnIGlzIGFsd2F5cyBudWxsCisJICogdGVybWluYXRl ZCBhbmQgY29udGFpbnMgdGhlIG5ld2xpbmUgaWYgaXQgd2FzIGZvdW5kLgorCSAqLworCWNoYXIJ ICAgKigqZ2V0c19mdW5jKSAoY2hhciAqcywgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKTsKKworCS8qCisJICogUmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tcHJl c3MgZmlsZSBoYW5kbGUgYXMgJ3Vuc2lnbmVkCisJICogY2hhcicgY2FzdCBpbnRvICdpbnQnLgor CSAqLworCWludAkJCSgqZ2V0Y19mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJ LyoKKwkgKiBUZXN0IGlmIEVPRiBpcyByZWFjaGVkIGluIHRoZSBjb21wcmVzcyBmaWxlIGhhbmRs ZS4KKwkgKi8KKwlpbnQJCQkoKmVvZl9mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwor CisJLyoKKwkgKiBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLgorCSAqLworCWludAkJCSgqY2xv c2VfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogR2V0IGEgcG9p bnRlciB0byBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyBhbiBlcnJvciB0aGF0IG9jY3VyZWQgZHVy aW5nIGEKKwkgKiBjb21wcmVzcyBmaWxlIGhhbmRsZSBvcGVyYXRpb24uCisJICovCisJY29uc3Qg Y2hhciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8q CisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBmaWxlIGhhbmRsZS4KKwkg Ki8KKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgor CSAqIFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZv aWQJICAgKnByaXZhdGVfZGF0YTsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29tcHJlc3Mg ZmlsZSBoYW5kbGUgd2l0aCB0aGUgcmVxdWVzdGVkIGNvbXByZXNzaW9uLgorICovCitleHRlcm4g Q29tcHJlc3NGaWxlSGFuZGxlICpJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKy8qCisgKiBJbml0aWFsaXpl IGEgY29tcHJlc3MgZmlsZSBzdHJlYW0uIERlZmZlciB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGht CisgKiBmcm9tICdwYXRoJywgZWl0aGVyIGJ5IGV4YW1pbmluZyBpdHMgc3VmZml4IG9yIGJ5IGFw cGVuZGluZyB0aGUgc3VwcG9ydGVkCisgKiBzdWZmaXhlcyBpbiAncGF0aCcuCisgKi8KK2V4dGVy biBDb21wcmVzc0ZpbGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25z dCBjaGFyICpwYXRoLAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1vZGUpOworZXh0ZXJu IGludAlFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jIGIvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lY2JjZjRiMDRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX25vbmUuYwpAQCAtMCwwICsxLDIwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogY29tcHJlc3Nfbm9uZS5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byByZWFkIG9y IHdyaXRlIGFuIHVuY29tcHJlc3NlZCBzdHJlYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3Nfbm9uZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3Nf bm9uZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkCitSZWFkRGF0 YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykK K3sKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwli dWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsK KworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlh aHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQorCisKK3N0YXRp YyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sK Kwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXBy ZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8q IG5vIG9wICovCit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5p dENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCWNzLT5yZWFkRGF0YSA9 IFJlYWREYXRhRnJvbUFyY2hpdmVOb25lOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0Fy Y2hpdmVOb25lOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTm9uZTsKKworCWNzLT5jb21wcmVz c2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyBzaXplX3QKK3JlYWRf bm9uZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0 OworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBmcmVhZChwdHIsIDEs IHNpemUsIGZwKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5v KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJl dHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9 CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9lcnJvcl9ub25lKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCXJldHVybiBzdHJlcnJvcihlcnJubyk7Cit9CisKK3N0YXRpYyBjaGFyICoK K2dldHNfbm9uZShjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7 Cit9CisKK3N0YXRpYyBpbnQKK2dldGNfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsK KworCXJldCA9IGZnZXRjKGZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZmVvZihm cCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0 cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludAorY2xvc2Vfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAg ICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldCA9IDA7CisKKwlD RkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmVvZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7 Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fbm9uZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChDRkgt PnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCWlmIChmZCA+PSAwKQorCQlDRkgtPnByaXZhdGVf ZGF0YSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNlCisJCUNGSC0+cHJpdmF0ZV9kYXRh ID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCkK KwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3Blbl93cml0ZV9u b25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCUNGSC0+ cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRh ID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQdWJsaWMg aW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBvcGVuX25vbmU7CisJ Q0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBvcGVuX3dyaXRlX25vbmU7CisJQ0ZILT5yZWFkX2Z1bmMg PSByZWFkX25vbmU7CisJQ0ZILT53cml0ZV9mdW5jID0gd3JpdGVfbm9uZTsKKwlDRkgtPmdldHNf ZnVuYyA9IGdldHNfbm9uZTsKKwlDRkgtPmdldGNfZnVuYyA9IGdldGNfbm9uZTsKKwlDRkgtPmNs b3NlX2Z1bmMgPSBjbG9zZV9ub25lOworCUNGSC0+ZW9mX2Z1bmMgPSBlb2Zfbm9uZTsKKwlDRkgt PmdldF9lcnJvcl9mdW5jID0gZ2V0X2Vycm9yX25vbmU7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9 IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oIGIv c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4xNDNlNTk5ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX25vbmUuaApAQCAtMCwwICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBjb21wcmVzc19ub25lLmgKKyAqCSBVbmNvbXByZXNzZWQgaW50ZXJmYWNlIHRvIGNv bXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfQ09NUFJFU1NfTk9O RV9IXworI2RlZmluZSBfQ09NUFJFU1NfTk9ORV9IXworCisjaW5jbHVkZSAiY29tcHJlc3NfaW8u aCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3Ms CisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVOb25lKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZILAorCQkJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19OT05FX0hf ICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKaW5kZXggY2E2MmY5YTM3NC4uODRlOWYwZGVmYSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZApAQCAtMSw3ICsxLDkgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMg PSBmaWxlcygKKyAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdjb21wcmVzc19pby5jJywKKyAgJ2Nv bXByZXNzX25vbmUuYycsCiAgICdkdW1wdXRpbHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3Bn X2JhY2t1cF9hcmNoaXZlci5jJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRl eCBmM2I5MmIwMWQ5Li4xNDA1NDU5NzIzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5k bGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1zdGF0aWMgY2ZwICpTYXZlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpOworc3RhdGljIENvbXByZXNzRmlsZUhhbmRs ZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsK IAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJp ZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAgLTI3Miw3ICsyNzIsNyBAQCBDbG9zZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKQogCiAJLyogQ2xvc2UgdGhlIG91dHB1dCAqLwogCWVycm5vID0g MDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVzID0gRW5kQ29tcHJlc3NGaWxlSGFuZGxl KEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug b3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTQsNyArMzU0LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKQogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJv b2wJCXBhcmFsbGVsX21vZGU7CiAJVG9jRW50cnkgICAqdGU7Ci0JY2ZwCQkgICAqc2F2OworCUNv bXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5H OwogCkBAIC0xMTI3LDcgKzExMjcsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQog CVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNz aW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247Ci0JY2ZwCQkgICAqc2F2Owor CUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7CiAJY2hhcgkJ c3RhbXBfc3RyWzY0XTsKIApAQCAtMTE0Myw5ICsxMTQzLDEwIEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAJCXN0cmNweShzdGFtcF9zdHIsICJbdW5rbm93bl0iKTsKIAogCWFocHJp bnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0ZWQgYXQgJXNcbiIsIHN0YW1wX3N0cik7Ci0JYWhw cmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRcbjsgICAg IENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsg ICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVzXG4iLAogCQkJIHNhbml0 aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZhbHNlKSwKLQkJCSBBSC0+dG9jQ291bnQsIEFILT5j b21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCSBBSC0+dG9jQ291bnQsCisJCQkgZ2V0X2NvbXBy ZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwogCiAJ c3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE1MDIsNiArMTUwMyw3IEBAIHN0YXRpYyB2b2lk CiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKKwlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwogCWludAkJCWZuID0g LTE7CiAKQEAgLTE1MjQsMzMgKzE1MjYsMzIgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKIAot CWlmIChmbiA+PSAwKQotCQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUsIGNvbXByZXNz aW9uX3NwZWMpOwotCWVsc2UKLQkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21w cmVzc2lvbl9zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9u X3NwZWMpOwogCi0JaWYgKCFBSC0+T0YpCisJaWYgKENGSC0+b3Blbl9mdW5jKGZpbGVuYW1lLCBm biwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQllbHNlCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQorCisJQUgtPk9G ID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKgog U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7 CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOwogfQogCiBzdGF0aWMgdm9p ZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkKK1Jl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRP dXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgt Pk9GKTsKKwlyZXMgPSBFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAg LTE2ODksNyArMTY5MCwxMSBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUs IHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZSBpZiAoUmVzdG9yaW5nVG9E QihBSCkpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1Ymxp YywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQkJYnl0ZXNfd3Jp dHRlbiA9IGNmd3JpdGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CisJeworCQlDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOworCisJCWJ5 dGVzX3dyaXR0ZW4gPSBDRkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJ fQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9F WElUOwpAQCAtMjAzMSw2ICsyMDM2LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ cmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29u c3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsK KwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwg IiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0 b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAm c3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNj b3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMDYxLDI2ICsyMDc4 LDEyIEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwog CQlpZiAoc3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQog CQl7Ci0JCQljaGFyCQlidWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFY UEdQQVRILCAiJXMvdG9jLmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2Zh dGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMp OwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJ CXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNo RGlyZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9j LmRhdCIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJa Ci0JCQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgtPmZT cGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25n OiBcIiVzXCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0g MCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGly ZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRh dC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlwZ19mYXRh bCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZl IChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIx NzgsNiArMjE4MSw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsK IAlBcmNoaXZlSGFuZGxlICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2Rl YnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyMzMsNyArMjIzNywx MCBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBm bXQsCiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQg aGFuZGxlICovCiAJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKLQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9B LCBvdXRfY29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRf Y29tcHJlc3Nfc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVubyhzdGRvdXQp LCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0ZG91dCBm b3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24gV2luZG93 cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxl cywKQEAgLTM2NDYsMTIgKzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ QUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgs IEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKLQkvKgot CSAqIEZvciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUgaXMgaW1wbGllZCBieSB0aGUgbGV2ZWwu ICBUaGlzIHdpbGwgbmVlZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1cHBvcnQgZm9yIG1vcmUgY29t cHJlc3Npb24gYWxnb3JpdGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1aXJpbmcgYSBmb3JtYXQgYnVt cC4KLQkgKi8KLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCUFI LT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSk7CiAJY3J0 bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9z ZWMpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzIyLDEwICszNzI0LDExIEBA IFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0 ICglZCkgZGlmZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+ Zm9ybWF0LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBv biB0aGUgbGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQorCWlmIChBSC0+ dmVyc2lvbiA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNf MV8yKQogCXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUg bGV2ZWwgKi8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkKIAkJCUFILT5jb21wcmVz c2lvbl9zcGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVlNDk3NDcuLjE4YjM4YzE3YWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2NSwxMyBAQAogI2RlZmlu ZSBLX1ZFUlNfMV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdlIHNl YXJjaF9wYXRoCiAJCQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJTXzFf MTQgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisjZGVm aW5lIEtfVkVSU18xXzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQKKwkJ CQkJCQkJCQkJCQkgKiBjb21wcmVzc2lvbl9hbGdvcml0aG0KKwkJCQkJCQkJCQkJCQkgKiBpbiBo ZWFkZXIgKi8KIAogLyogQ3VycmVudCBhcmNoaXZlIHZlcnNpb24gbnVtYmVyICh0aGUgZm9ybWF0 IHdlIGNhbiBvdXRwdXQpICovCiAjZGVmaW5lIEtfVkVSU19NQUpPUiAxCi0jZGVmaW5lIEtfVkVS U19NSU5PUiAxNAorI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTUKICNkZWZpbmUgS19WRVJTX1JFViAw CiAjZGVmaW5lIEtfVkVSU19TRUxGIE1BS0VfQVJDSElWRV9WRVJTSU9OKEtfVkVSU19NQUpPUiwg S19WRVJTX01JTk9SLCBLX1ZFUlNfUkVWKQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwpp bmRleCBkMWU1NDY0NGE5Li41MTJhYjA0M2FmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2N1c3RvbS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9t LmMKQEAgLTI5OCw3ICsyOTgsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpCiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RBVEEpOwkvKiBCbG9jayB0eXBlICovCiAJ V3JpdGVJbnQoQUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Igc2FuaXR5IGNoZWNrICovCiAKLQljdHgt PmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3Jp dGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAv KgpAQCAtMzE3LDE1ICszMTksMTUgQEAgX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiAJQ29tcHJlc3NvclN0YXRlICpjcyA9IGN0eC0+ Y3M7CiAKIAlpZiAoZExlbiA+IDApCi0JCS8qIFdyaXRlRGF0YVRvQXJjaGl2ZSgpIGludGVybmFs bHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLwotCQlXcml0ZURhdGFUb0FyY2hpdmUoQUgsIGNzLCBk YXRhLCBkTGVuKTsKKwkJLyogd3JpdGVEYXRhKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJy b3JzICovCisJCWNzLT53cml0ZURhdGEoQUgsIGNzLCBkYXRhLCBkTGVuKTsKIH0KIAogLyoKICAq IENhbGxlZCBieSB0aGUgYXJjaGl2ZXIgd2hlbiBhIGR1bXBlcidzICdEYXRhRHVtcGVyJyByb3V0 aW5lIGhhcwogICogZmluaXNoZWQuCiAgKgotICogT3B0aW9uYWwuCisgKiBNYW5kYXRvcnkuCiAg Ki8KIHN0YXRpYyB2b2lkCiBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRl KQpAQCAtMzMzLDYgKzMzNSw4IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRy eSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7 CiAKIAlFbmRDb21wcmVzc29yKEFILCBjdHgtPmNzKTsKKwljdHgtPmNzID0gTlVMTDsKKwogCS8q IFNlbmQgdGhlIGVuZCBtYXJrZXIgKi8KIAlXcml0ZUludChBSCwgMCk7CiB9CkBAIC0zNzcsNyAr MzgxLDkgQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9p ZCkKIAogCVdyaXRlSW50KEFILCBvaWQpOwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3Nv cihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFs bG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJ CQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1NzIsMTIgQEAg X1ByaW50VG9jRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogc3RhdGljIHZv aWQKIF9QcmludERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JUmVhZERhdGFGcm9tQXJjaGl2 ZShBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21SZWFkRnVuYyk7CisJQ29tcHJlc3Nv clN0YXRlICpjczsKKworCWNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLAorCQkJCQkJCV9DdXN0b21SZWFkRnVuYywgTlVMTCk7CisJY3MtPnJlYWREYXRhKEFILCBj cyk7CisJRW5kQ29tcHJlc3NvcihBSCwgY3MpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZS4uYTJmODg5OTVjMCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBAIC01MCw5ICs1MCw4IEBAIHR5cGVk ZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGlyZWN0b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZI OwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLwotCi0JY2ZwCQkgICAqTE9zVG9jRkg7 CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpk YXRhRkg7IC8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLworCUNvbXByZXNzRmlsZUhhbmRs ZSAqTE9zVG9jRkg7IC8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KIAlQYXJhbGxlbFN0 YXRlICpwc3RhdGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFja3VwIC8gcmVzdG9yZSAqLwogfSBsY2xD b250ZXh0OwogCkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3Rvcnko QXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJCQkJLyogUmVhZCBNb2RlICovCiAJCWNo YXIJCWZuYW1lW01BWFBHUEFUSF07Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVI YW5kbGUgKnRvY0ZIOwogCiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgInRvYy5kYXQiKTsKIAot CQl0b2NGSCA9IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19CSU5BUllfUik7CisJCXRvY0ZIID0gSW5p dERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZuYW1lLCBQR19CSU5BUllfUik7CiAJCWlmICh0 b2NGSCA9PSBOVUxMKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIl c1wiOiAlbSIsIGZuYW1lKTsKIApAQCAtMjE4LDcgKzIxNyw3IEBAIEluaXRBcmNoaXZlRm10X0Rp cmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAkJUmVhZFRvYyhBSCk7CiAKIAkJLyogTm90aGlu ZyBlbHNlIGluIHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBhZ2Fpbi4uLiAqLwotCQlpZiAoY2ZjbG9z ZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkK IAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9DIGZpbGU6ICVtIik7CiAJCWN0eC0+ZGF0 YUZIID0gTlVMTDsKIAl9CkBAIC0zMjcsOSArMzI2LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5m aWxlbmFtZSk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZ X1csCi0JCQkJCQkJICAgQUgtPmNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPmRhdGFGSCA9 PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJl c3Npb25fc3BlYyk7CisKKwlpZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwg UEdfQklOQVJZX1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTM0NiwxNSArMzQ1LDE2IEBA IHN0YXRpYyB2b2lkCiBfV3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpk YXRhLCBzaXplX3QgZExlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBB SC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwog CiAJZXJybm8gPSAwOwotCWlmIChkTGVuID4gMCAmJiBjZndyaXRlKGRhdGEsIGRMZW4sIGN0eC0+ ZGF0YUZIKSAhPSBkTGVuKQorCWlmIChkTGVuID4gMCAmJiBDRkgtPndyaXRlX2Z1bmMoZGF0YSwg ZExlbiwgQ0ZIKSAhPSBkTGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywg YXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJ CWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBm aWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5n ZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBfRW5kRGF0 YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQlp ZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxl KGN0eC0+ZGF0YUZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRhdGEgZmls ZTogJW0iKTsKIAogCWN0eC0+ZGF0YUZIID0gTlVMTDsKQEAgLTM4NSwyNiArMzg1LDI1IEBAIF9Q cmludEZpbGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICpmaWxlbmFtZSkKIAlzaXplX3QJ CWNudDsKIAljaGFyCSAgICpidWY7CiAJc2l6ZV90CQlidWZsZW47Ci0JY2ZwCQkgICAqY2ZwOwor CUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwog Ci0JY2ZwID0gY2ZvcGVuX3JlYWQoZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKLQotCWlmICghY2Zw KQorCUNGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShmaWxlbmFtZSwgUEdfQklO QVJZX1IpOworCWlmICghQ0ZIKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmls ZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCiAJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJ WkUpOwogCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLQl3aGlsZSAoKGNudCA9IGNmcmVhZChi dWYsIGJ1ZmxlbiwgY2ZwKSkpCisJd2hpbGUgKChjbnQgPSBDRkgtPnJlYWRfZnVuYyhidWYsIGJ1 ZmxlbiwgQ0ZIKSkpCiAJewogCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CiAJfQogCiAJZnJl ZShidWYpOwotCWlmIChjZmNsb3NlKGNmcCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFu ZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZpbGUgXCIl c1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNCw3IEBAIF9Mb2FkTE9zKEFy Y2hpdmVIYW5kbGUgKkFIKQogewogCU9pZAkJCW9pZDsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNs Q29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlj aGFyCQl0b2NmbmFtZVtNQVhQR1BBVEhdOwogCWNoYXIJCWxpbmVbTUFYUEdQQVRIXTsKIApAQCAt NDQyLDE0ICs0NDIsMTQgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlzZXRGaWxl UGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAotCWN0eC0+TE9zVG9jRkggPSBjZm9w ZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNGSCA9IGN0eC0+TE9zVG9jRkggPSBJ bml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsKIAog CWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBs YXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZvciBpbnB1dDogJW0iLAogCQkJCSB0b2NmbmFt ZSk7CiAKIAkvKiBSZWFkIHRoZSBMT3MgVE9DIGZpbGUgbGluZS1ieS1saW5lLCBhbmQgcHJvY2Vz cyBlYWNoIExPICovCi0Jd2hpbGUgKChjZmdldHMoY3R4LT5MT3NUb2NGSCwgbGluZSwgTUFYUEdQ QVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAoKENGSC0+Z2V0c19mdW5jKGxpbmUsIE1BWFBHUEFUSCwg Q0ZIKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIJCWxvZm5hbWVbTUFYUEdQQVRIICsgMV07CiAJCWNo YXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2NCwxMSArNDY0LDExIEBAIF9Mb2FkTE9zKEFyY2hp dmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0YShBSCwgcGF0aCk7CiAJCUVuZFJlc3RvcmVM TyhBSCwgb2lkKTsKIAl9Ci0JaWYgKCFjZmVvZihjdHgtPkxPc1RvY0ZIKSkKKwlpZiAoIUNGSC0+ ZW9mX2Z1bmMoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcgbGFyZ2Ugb2JqZWN0IFRP QyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9z VG9jRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAh PSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBc IiVzXCI6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCkBAIC00ODgsMTUgKzQ4OCwxNiBAQCBfV3Jp dGVCeXRlKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBpbnQgaSkKIHsKIAl1bnNpZ25lZCBjaGFy IGMgPSAodW5zaWduZWQgY2hhcikgaTsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAq KSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZI OwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKCZjLCAxLCBjdHgtPmRhdGFGSCkgIT0gMSkK KwlpZiAoQ0ZILT53cml0ZV9mdW5jKCZjLCAxLCBDRkgpICE9IDEpCiAJewogCQkvKiBpZiB3cml0 ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJ CWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRh dGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0KIAogCXJldHVybiAx OwpAQCAtNTEyLDggKzUxMyw5IEBAIHN0YXRpYyBpbnQKIF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxl ICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNm Z2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+Z2V0Y19mdW5jKENGSCk7CiB9CiAKIC8q CkBAIC01MjQsMTUgKzUyNiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRlQnVmKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4 ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpD RkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwg Y3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKGJ1ZiwgbGVuLCBDRkgp ICE9IGxlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9i bGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVO T1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAot CQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1 bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OCwxMyBAQCBzdGF0aWMgdm9pZAogX1Jl YWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xD b250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJZiB0aGVyZSB3YXMgYW4g SS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwgc28gaGVyZSB3ZQorCSAq IElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIHJlYWRGKCks IHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAqLwotCWlmIChjZnJlYWQo YnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+cmVhZF9mdW5jKGJ1Ziwg bGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogZW5kIG9mIGZpbGUiKTsKIH0KIApAQCAtNTczLDcgKzU3Nyw3IEBAIF9DbG9zZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVXcml0ZSkK IAl7Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCQlw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJCWNoYXIJ CWZuYW1lW01BWFBHUEFUSF07CiAKQEAgLTU4NCw4ICs1ODgsOCBAQCBfQ2xvc2VBcmNoaXZlKEFy Y2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qIFRoZSBUT0MgaXMgYWx3YXlzIGNyZWF0ZWQgdW5jb21w cmVzc2VkICovCiAJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKLQkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjb21wcmVz c2lvbl9zcGVjKTsKLQkJaWYgKHRvY0ZIID09IE5VTEwpCisJCXRvY0ZIID0gSW5pdENvbXByZXNz RmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwkJaWYgKHRvY0ZILT5vcGVuX3dyaXRlX2Z1 bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCB0b2NGSCkpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIAkJY3R4LT5kYXRhRkggPSB0b2NG SDsKIApAQCAtNTk4LDcgKzYwMiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCVdyaXRlSGVhZChBSCk7CiAJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OwogCQlXcml0 ZVRvYyhBSCk7Ci0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRW5kQ29tcHJlc3NG aWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0Mg ZmlsZTogJW0iKTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0 OSw4ICs2NTMsOCBAQCBfU3RhcnRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkK IAogCS8qIFRoZSBMTyBUT0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+TE9zVG9jRkgg PSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgt PkxPc1RvY0ZIID09IE5VTEwpCisJY3R4LT5MT3NUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5k bGUoY29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+TE9zVG9jRkgtPm9wZW5fd3JpdGVfZnVu YyhmbmFtZSwgImFiIiwgY3R4LT5MT3NUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcxLDgg QEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAog CXNucHJpbnRmKGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRhdCIsIGN0eC0+ZGlyZWN0 b3J5LCBvaWQpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFS WV9XLCBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0KLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkK KwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3Nw ZWMpOworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllf VywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUg XCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjgyLDE4ICs2ODUsMTkgQEAgc3RhdGljIHZv aWQKIF9FbmRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogewog CWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5MT3NUb2NGSDsKIAljaGFyCQlidWZbNTBdOwogCWlu dAkJCWxlbjsKIAotCS8qIENsb3NlIHRoZSBMTyBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNm Y2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE8g ZGF0YSBmaWxlOiAlbSIpOworCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEgZmlsZSBpdHNlbGYgKi8K KwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0YSBmaWxlOiAlbSIpOwogCWN0eC0+ZGF0YUZIID0g TlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBMTyBpbiBibG9icy50b2MgKi8KIAlsZW4gPSBzbnBy aW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8ldS5kYXRcbiIsIG9pZCwgb2lkKTsKLQlp ZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5MT3NUb2NGSCkgIT0gbGVuKQotCQlwZ19mYXRhbCgi Y291bGQgbm90IHdyaXRlIHRvIExPcyBUT0MgZmlsZSIpOworCWlmIChDRkgtPndyaXRlX2Z1bmMo YnVmLCBsZW4sIENGSCkgIT0gbGVuKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIGJs b2JzIFRPQyBmaWxlIik7CiB9CiAKIC8qCkBAIC03MDYsOCArNzEwLDggQEAgX0VuZExPcyhBcmNo aXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xD b250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCi0JaWYgKGNmY2xvc2UoY3R4LT5MT3NUb2NGSCkg IT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMT3MgVE9DIGZpbGU6ICVtIik7CisJ aWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQorCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIGJsb2JzIFRPQyBmaWxlOiAlbSIpOwogCWN0eC0+TE9zVG9jRkgg PSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5w bCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGQ5MjI0N2M5MTUuLjc4 NDU0OTI4Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC05NCw3ICs5NCw3IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4gWwogCQkJCSdwZ19yZXN0b3JlJywgJy1s JywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfY3VzdG9tLmR1bXAiLAogCQkJXSwKLQkJCWV4 cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiAxLywKKwkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNz aW9uOiBnemlwLywKIAkJCW5hbWUgICAgID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVz c2VkJwogCQl9LAogCX0sCkBAIC0yMzksOCArMjM5LDggQEAgbXkgJXBnZHVtcF9ydW5zID0gKAog CQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2RlZmF1 bHRzX2N1c3RvbV9mb3JtYXQuZHVtcCIsIF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3pp cCA/Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJ CXFyL0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQlu YW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQgaWYgYXZh aWxhYmxlJywKIAkJfSwKIAl9LApAQCAtMjY0LDggKzI2NCw4IEBAIG15ICVwZ2R1bXBfcnVucyA9 ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9k ZWZhdWx0c19kaXJfZm9ybWF0IiwgXSwKIAkJCWV4cGVjdGVkID0+ICRzdXBwb3J0c19nemlwID8K LQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Npb246IDAvLAorCQkJcXIv Q29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBub25lLywKIAkJCW5hbWUg PT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVmYXVsdCcsCiAJCX0sCiAJ CWdsb2JfcGF0dGVybnMgPT4gWwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXBy ZXNzaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAppbmRleCA5YTQ3MWU0 MGFhLi5kNDRlYmIwNmNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Np b24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaApAQCAtMTQsNiArMTQs MTAgQEAKICNpZm5kZWYgUEdfQ09NUFJFU1NJT05fSAogI2RlZmluZSBQR19DT01QUkVTU0lPTl9I CiAKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBkaXNjLCBmb3IgZXhhbXBsZSBp biBmaWxlcyBnZW5lcmF0ZWQgYnkgcGdfZHVtcC4KKyAqIENyZWF0ZSB0aGUgbmVjZXNzYXJ5IGJh Y2t3YXJkcyBjb21wYXRpYmlsaXR5IGxheWVycyBpZiB0aGVpciBvcmRlciBjaGFuZ2VzLgorICov CiB0eXBlZGVmIGVudW0gcGdfY29tcHJlc3NfYWxnb3JpdGhtCiB7CiAJUEdfQ09NUFJFU1NJT05f Tk9ORSwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1MmZlOWY1MDkuLmRiNDI5 NDc0YTIgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysr IGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAtMTUwLDcgKzE1MCw5IEBA IGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNlIGl0IHVzZXMgInB1Ymxp YyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0dW5h dGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdf ZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAmJiBjb250aW51ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA1MTQ4NGNhN2UyLi43ZTYyYzZlZjNkIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt NDI4LDYgKzQyOCw3IEBAIENvbXBpbGVkRXhwclN0YXRlCiBDb21wb3NpdGVJT0RhdGEKIENvbXBv c2l0ZVR5cGVTdG10CiBDb21wb3VuZEFmZml4RmxhZworQ29tcHJlc3NGaWxlSGFuZGxlCiBDb21w cmVzc2lvbkxvY2F0aW9uCiBDb21wcmVzc29yU3RhdGUKIENvbXB1dGVYaWRIb3Jpem9uc1Jlc3Vs dApAQCAtMTAzNCw2ICsxMDM1LDcgQEAgR3VjU3RhY2sKIEd1Y1N0YWNrU3RhdGUKIEd1Y1N0cmlu Z0Fzc2lnbkhvb2sKIEd1Y1N0cmluZ0NoZWNrSG9vaworR3ppcENvbXByZXNzb3JTdGF0ZQogSEFO RExFCiBIQVNIQUNUSU9OCiBIQVNIQlVDS0VUCi0tIAoyLjM0LjEKCg== --b1_4QEnbtLEGFcLaBsxh20o9VNO3HtJYgAqA4y9ey653M--