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 1pIDn3-0002UL-Px for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jan 2023 19:08:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pIDn2-0005HV-OZ for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jan 2023 19:08:04 +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 1pIDlF-0008Qj-4H for pgsql-hackers@lists.postgresql.org; Wed, 18 Jan 2023 19:06:13 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIDl1-0001vw-Pq for pgsql-hackers@lists.postgresql.org; Wed, 18 Jan 2023 19:06:12 +0000 Date: Wed, 18 Jan 2023 19:05:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674068754; x=1674327954; bh=2Ozz93nW0rFtKBj6G9SpKAbJI94oIfvUr5Gqrcpy5YQ=; 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=F0XpOiuXYywcnm84Q7y6Y6KEyCKOSJ/m5Ir32uthafrwl5K//T7JBmBuvpHsj7o70 bHiUDveAAkWt+vqgO9B1RUNDLAbZLwFIrcPU754LU+fY6EFot4YncFaetUUqx1cD1K nyo8QC6ISAxpZz7zd2yRmBcH0adovzDHmyqRE3EyM8Ccnd7KZCaC0xMJwRzdkhWa2s Teeegs3dnmSuOONLIzGQLHB5ivJTz0IB9Hf4z9ZuE7+uzARDvOxGX9U01GJ+EbzVYh PHJ/5NkFT9pkJNkXhONT/yiaIA3DrcAIXCDbPLphMXLK4S1DrKZ23FH6Ic0TurQXtX cxf4+bDpRTycA== To: Tomas Vondra From: gkokolatos@pm.me Cc: Michael Paquier , Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: <41036470-041b-08a3-469d-fe07de2bc58e@enterprisedb.com> References: <20221222170859.GO1153@telsasoft.com> <20230108194524.GA27637@telsasoft.com> <20230114214308.GC9837@telsasoft.com> <20230116015625.GH9837@telsasoft.com> <41036470-041b-08a3-469d-fe07de2bc58e@enterprisedb.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw" 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_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Wednesday, January 18th, 2023 at 3:00 PM, Tomas Vondra wrote: >=20 >=20 > Hi, >=20 > On 1/16/23 16:14, gkokolatos@pm.me wrote: >=20 > > Hi, > >=20 > > I admit I am completely at lost as to what is expected from me anymore. >=20 >=20 > Unfortunately, this plays against this patch - I'm certainly in favor of > adding lz4 (and other compression algos) into pg_dump, but if I commit > 0001 we get little benefit, and the other parts actually adding lz4/zstd > are treated as "WIP / for completeness" so it's unclear when we'd get to > commit them. Thank you for your kindness and for taking the time to explain. =20 > So if I could recommend one thing, it'd be to get at least one of those > WIP patches into a shape that's likely committable right after 0001. This was clearly my fault. I misunderstood a suggestion upthread to focus on the first patch of the series and ignore documentation and comments on the rest. Please find v21 to contain 0002 and 0003 in a state which I no longer consi= der as WIP but worthy of proper consideration. Some guidance on where is best t= o add documentation in 0002 for the function pointers in CompressFileHandle will be welcomed. >=20 > > I had posted v19-0001 for a committer's consideration and v19-000{2,3} = for completeness. > > Please find a rebased v20 attached. >=20 >=20 > I took a quick look at 0001, so a couple comments (sorry if some of this > was already discussed in the thread): Much appreciated! >=20 > 1) I don't think a "refactoring" patch should reference particular > compression algorithms (lz4/zstd), and in particular I don't think we > should have "not yet implemented" messages. We only have a couple other > places doing that, when we didn't have a better choice. But here we can > simply reject the algorithm when parsing the options, we don't need to > do that in a dozen other places. I have now removed lz4/zstd from where they were present with the exception of pg_dump.c which is responsible for parsing. > 2) I wouldn't reorder the cases in WriteDataToArchive, i.e. I'd keep > "none" at the end. It might make backpatches harder. Agreed. However a 'default' is needed in order to avoid compilation warning= s. Also note that 0002 completely does away with cases within WriteDataToArchi= ve. > 3) While building, I get bunch of warnings about missing cfdopen() > prototype and pg_backup_archiver.c not knowing about cfdopen() and > adding an implicit prototype (so I doubt it actually works). Fixed. cfdopen() got prematurely introduced in 5e73a6048 and then got remov= ed in 69fb29d1af. v20 failed to properly take 69fb29d1af in consideration. Not= e that cfdopen is removed in 0002 which explains why cfbot didn't complain. =20 > 4) "cfp" struct no longer wraps gzFile, but the comment was not updated. > FWIW I'm not sure switching to "void *" is an improvement, maybe it'd be > better to have a "union" of correct types? Please find and updated comment and a union in place of the void *. Also note that 0002 completely does away with cfp in favour of a new struct CompressFileHandle. I maintained the void * there because it is used by private methods of the compressors. 0003 contains such an example with LZ4CompressorState. > 5) cfopen/cfdopen are missing comments. cfopen_internal has an updated > comment, but that's a static function while cfopen/cfdopen are the > actual API. Added comments to cfopen/cfdopen. >=20 > > Also please let me know if I should silently step away from it and let = other people lead > > it. I would be glad to comply either way. >=20 >=20 > Please don't. I promise to take a look at this patch again. Thank you very much. > Thanks for doing all the work. Thank you. Cheers, //Georgios > regards >=20 > -- > Tomas Vondra > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company --b1_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw Content-Type: text/x-patch; name=v21-0002-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v21-0002-Introduce-Compressor-API-in-pg_dump.patch RnJvbSAyYTdlMzhiZjM2MTNmODZiYWQxYzA4OTEyM2UxNjUxOTcyMTE5NTAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMTggSmFuIDIwMjMgMTg6MjQ6MzEgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MSAyLzNdIEludHJvZHVjZSBDb21wcmVzc29yIEFQSSBpbiBwZ19kdW1wCgpUaGUgcHVycG9zZSBv ZiB0aGlzIEFQSSBpcyB0byBhbGxvdyBmb3IgZWFzaWVyIGFkZGl0aW9uIG9mIG5ldyBjb21wcmVz c2lvbgptZXRob2RzLiBDb21wcmVzc0ZpbGVIYW5kbGUgaXMgc3Vic3RpdHV0aW5nIHRoZSBjZnAq IGZhbWlseSBvZiBmdW5jdGlvbnMgdW5kZXIgYQpzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMg Zm9yIG9wZW5pbmcsIHdyaXRpbmcsIGV0Yy4gVGhlIGltcGxlbWVudG9yIG9mIGEgbmV3CmNvbXBy ZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0aG9zZSBkZWZp bml0aW9ucy4KCkN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVzIG5vdyBuZWVkIHRvIHN0b3JlIHRo ZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyLiBUaGlzIHJlcXVpcmVzIGEg YnVtcCBpbiB0aGUgdmVyc2lvbiBudW1iZXIuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgppcyBu byBsb25nZXIgc3RvcmVkIGluIHRoZSBkdW1wIGFzIGl0IGlzIG5vdyBpcnJlbGV2YW50LgotLS0K IHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2d6aXAuYyAgICAgICB8IDQwNiArKysrKysrKysrKwogc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2d6aXAuaCAgICAgICB8ICAyMiArCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYyAgICAgICAgIHwgOTMzICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAgICAgICAgIHwgIDcyICstCiBzcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYyAgfCAxMDIgKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggIHwgICA1ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwg IDIzICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDk0ICstLQog c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICB8ICAxMCArLQogc3JjL3Rvb2xz L3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgIHwgICAyICsKIDEzIGZpbGVzIGNoYW5nZWQsIDg2OCBpbnNlcnRp b25zKCspLCA4MDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmgKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9z cmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggZWYxZWQwZjNlNS4uN2ExOWY1ZDYxNyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9N YWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVp bGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscyAkKGxpYnBxX3BncG9ydCkKIAogT0JKUyA9 IFwKIAkkKFdJTjMyUkVTKSBcCisJY29tcHJlc3NfZ3ppcC5vIFwKIAljb21wcmVzc19pby5vIFwK IAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfZ3ppcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mMzY1YjkzYjc2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwpAQCAtMCwwICsxLDQwNiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3NfZ3ppcC5jCisgKgkgUm91dGlu ZXMgZm9yIGFyY2hpdmVycyB0byB3cml0ZSBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBk YXRhCisgKgkgc3RyZWFtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKKyNpbmNs dWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgInps aWIuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzc29yIEFQSQorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IEd6aXBDb21wcmVzc29y U3RhdGUKK3sKKwl6X3N0cmVhbXAJenA7CisKKwl2b2lkCSAgICpvdXRidWY7CisJc2l6ZV90CQlv dXRzaXplOworfSBHemlwQ29tcHJlc3NvclN0YXRlOworCisvKiBQcml2YXRlIHJvdXRpbmVzIHRo YXQgc3VwcG9ydCBnemlwIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkCitEZWZs YXRlQ29tcHJlc3Nvckd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Ms IGJvb2wgZmx1c2gpCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21w cmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJenAgPSBnemlwY3Mt PnpwOworCXZvaWQJICAgKm91dCA9IGd6aXBjcy0+b3V0YnVmOworCWludAkJCXJlcyA9IFpfT0s7 CisKKwl3aGlsZSAoZ3ppcGNzLT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVzaCkKKwl7CisJCXJl cyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKKwkJaWYgKHJl cyA9PSBaX1NUUkVBTV9FUlJPUikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0 YTogJXMiLCB6cC0+bXNnKTsKKwkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGd6aXBj cy0+b3V0c2l6ZSkpCisJCQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQorCQkJfHwgKHpwLT5hdmFp bF9pbiAhPSAwKQorCQkJKQorCQl7CisJCQkvKgorCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lk IHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxlbmd0aAorCQkJICogY2h1bmsgaXMg dGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCisJ CQkgKiBoYXBwZW4gYnV0Li4uCisJCQkgKi8KKwkJCWlmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNz LT5vdXRzaXplKQorCQkJeworCQkJCS8qCisJCQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3Vs ZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bworCQkJCSAqIG1ha2Ugc3VyZSB3ZSBk byBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgorCQkJCSAqLworCQkJCXNpemVfdAkJbGVuID0gZ3pp cGNzLT5vdXRzaXplIC0genAtPmF2YWlsX291dDsKKworCQkJCWNzLT53cml0ZUYoQUgsIChjaGFy ICopIG91dCwgbGVuKTsKKwkJCX0KKwkJCXpwLT5uZXh0X291dCA9IG91dDsKKwkJCXpwLT5hdmFp bF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJCX0KKworCQlpZiAocmVzID09IFpfU1RSRUFNX0VO RCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JHemlwKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUd6aXBDb21wcmVzc29y U3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7 CisJel9zdHJlYW1wCXpwOworCisJaWYgKGd6aXBjcy0+enApCisJeworCQl6cCA9IGd6aXBjcy0+ enA7CisJCXpwLT5uZXh0X2luID0gTlVMTDsKKwkJenAtPmF2YWlsX2luID0gMDsKKworCQkvKiBG bHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6bGliIGJ1ZmZlciAqLworCQlEZWZsYXRlQ29t cHJlc3Nvckd6aXAoQUgsIGNzLCB0cnVlKTsKKworCQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9P SykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIs IHpwLT5tc2cpOworCisJCXBnX2ZyZWUoZ3ppcGNzLT5vdXRidWYpOworCQlwZ19mcmVlKGd6aXBj cy0+enApOworCX0KKworCXBnX2ZyZWUoZ3ppcGNzKTsKKwljcy0+cHJpdmF0ZV9kYXRhID0gTlVM TDsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBkTGVuKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJl c3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJel9zdHJlYW1wCXpwOworCisJaWYgKCFn emlwY3MtPnpwKQorCXsKKwkJenAgPSBnemlwY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9j KHNpemVvZih6X3N0cmVhbSkpOworCQl6cC0+emFsbG9jID0gWl9OVUxMOworCQl6cC0+emZyZWUg PSBaX05VTEw7CisJCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwkJLyoKKwkJICogb3V0c2l6ZSBp cyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQorCQkg KiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUgZXh0cmEgYnl0ZSBiZWNhdXNlIHNvbWUgcm91dGluZXMg d2FudCB0bworCQkgKiBhcHBlbmQgYSB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0 cHV0LgorCQkgKi8KKwkJZ3ppcGNzLT5vdXRidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSAr IDEpOworCQlnemlwY3MtPm91dHNpemUgPSBaTElCX09VVF9TSVpFOworCisJCS8qCisJCSAqIEEg bGV2ZWwgb2YgemVybyBzaW1wbHkgY29waWVzIHRoZSBpbnB1dCBvbmUgYmxvY2sgYXQgdGhlIHRp bWUuCisJCSAqIFRoaXMgaXMgcHJvYmFibHkgbm90IHdoYXQgdGhlIHVzZXIgd2FudGVkIHdoZW4g Y2FsbGluZyB0aGlzCisJCSAqIGludGVyZmFjZS4KKwkJICovCisJCWlmIChjcy0+Y29tcHJlc3Np b25fc3BlYy5sZXZlbCA9PSAwKQorCQkJcGdfZmF0YWwoInJlcXVlc3RlZCB0byBjb21wcmVzcyB0 aGUgYXJjaGl2ZSB5ZXQgbm8gbGV2ZWwgd2FzIHNwZWNpZmllZCIpOworCisJCWlmIChkZWZsYXRl SW5pdCh6cCwgY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpICE9IFpfT0spCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLCB6cC0+bXNn KTsKKworCQkvKiBKdXN0IGJlIHBhcmFub2lkIC0gbWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBT dGFydCwgd2l0aCBubyBXcml0ZSAqLworCQl6cC0+bmV4dF9vdXQgPSBnemlwY3MtPm91dGJ1ZjsK KwkJenAtPmF2YWlsX291dCA9IGd6aXBjcy0+b3V0c2l6ZTsKKwl9CisKKwlnemlwY3MtPnpwLT5u ZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeSh2b2lkICosIGRhdGEpOworCWd6aXBjcy0+enAt PmF2YWlsX2luID0gZExlbjsKKwlEZWZsYXRlQ29tcHJlc3Nvckd6aXAoQUgsIGNzLCBmYWxzZSk7 Cit9CisKK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwl6X3N0cmVhbXAJenA7CisJY2hhcgkgICAq b3V0OworCWludAkJCXJlcyA9IFpfT0s7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkgICAqYnVmOwor CXNpemVfdAkJYnVmbGVuOworCisJenAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpf c3RyZWFtKSk7CisJenAtPnphbGxvYyA9IFpfTlVMTDsKKwl6cC0+emZyZWUgPSBaX05VTEw7CisJ enAtPm9wYXF1ZSA9IFpfTlVMTDsKKworCWJ1ZiA9IHBnX21hbGxvYyhaTElCX0lOX1NJWkUpOwor CWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKKworCW91dCA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpF ICsgMSk7CisKKwlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCisJCQkJIHpwLT5tc2cp OworCisJLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICovCisJd2hpbGUgKChjbnQg PSBjcy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCXpwLT5uZXh0X2luID0gKHZv aWQgKikgYnVmOworCQl6cC0+YXZhaWxfaW4gPSBjbnQ7CisKKwkJd2hpbGUgKHpwLT5hdmFpbF9p biA+IDApCisJCXsKKwkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKKwkJCXpwLT5hdmFp bF9vdXQgPSBaTElCX09VVF9TSVpFOworCisJCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKKwkJCWlm IChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOworCisJCQlvdXRbWkxJQl9PVVRf U0laRSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKKwkJCWFod3JpdGUob3V0LCAxLCBaTElCX09V VF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCQl9CisJfQorCisJenAtPm5leHRfaW4gPSBO VUxMOworCXpwLT5hdmFpbF9pbiA9IDA7CisJd2hpbGUgKHJlcyAhPSBaX1NUUkVBTV9FTkQpCisJ eworCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7CisJCXpwLT5hdmFpbF9vdXQgPSBaTElC X09VVF9TSVpFOworCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKKwkJaWYgKHJlcyAhPSBaX09LICYm IHJlcyAhPSBaX1NUUkVBTV9FTkQpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3Mg ZGF0YTogJXMiLCB6cC0+bXNnKTsKKworCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9v dXRdID0gJ1wwJzsKKwkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxf b3V0LCBBSCk7CisJfQorCisJaWYgKGluZmxhdGVFbmQoenApICE9IFpfT0spCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLCB6cC0+bXNnKTsKKwor CWZyZWUoYnVmKTsKKwlmcmVlKG91dCk7CisJZnJlZSh6cCk7Cit9CisKKy8qIFB1YmxpYyByb3V0 aW5lcyB0aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9PICovCit2b2lkCitJbml0 Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6 aXBjczsKKworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVHemlwOworCWNzLT53 cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVHemlwOworCWNzLT5lbmQgPSBFbmRDb21wcmVz c29yR3ppcDsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKwor CWd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBD b21wcmVzc29yU3RhdGUpKTsKKworCWNzLT5wcml2YXRlX2RhdGEgPSBnemlwY3M7Cit9CisKKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHNpemVfdAorR3ppcF9yZWFkKHZvaWQgKnB0 ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pm cCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0OworCisJcmV0ID0g Z3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihnemZw KSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihn emZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJy bXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90CitHemlwX3dyaXRl KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJu IGd6d3JpdGUoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3RhdGljIGludAorR3ppcF9nZXRjKENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+ cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCWVycm5vID0gMDsKKwlyZXQgPSBnemdldGMo Z3pmcCk7CisJaWYgKHJldCA9PSBFT0YpCisJeworCQlpZiAoIWd6ZW9mKGd6ZnApKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJu bykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxl OiBlbmQgb2YgZmlsZSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICoK K0d6aXBfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVy biBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3RhdGljIGludAorR3ppcF9jbG9zZShD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgt PnByaXZhdGVfZGF0YTsKKwlpbnQJCQlzYXZlX2Vycm5vOworCWludAkJCXJldDsKKworCUNGSC0+ cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXJldCA9IGd6Y2xvc2UoZ3pmcCk7CisKKwlzYXZlX2Vy cm5vID0gZXJybm87CisJZXJybm8gPSBzYXZlX2Vycm5vOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludAorR3ppcF9lb2YoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxl CQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3plb2YoZ3pm cCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0d6aXBfZ2V0X2Vycm9yKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9k YXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKwlpbnQJCQllcnJudW07CisKKwllcnJtc2cgPSBn emVycm9yKGd6ZnAsICZlcnJudW0pOworCWlmIChlcnJudW0gPT0gWl9FUlJOTykKKwkJZXJybXNn ID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworc3RhdGljIGludAor R3ppcF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwgQ29t cHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwOworCWNoYXIJCW1vZGVfY29t cHJlc3Npb25bMzJdOworCisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RF RkFVTFRfQ09NUFJFU1NJT04pCisJeworCQkvKgorCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBj b21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdAorCQkgKi8KKwkJc25wcmlu dGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCisJ CQkJIG1vZGUsIENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7CisJfQorCWVsc2UKKwkJc3Ry Y3B5KG1vZGVfY29tcHJlc3Npb24sIG1vZGUpOworCisJaWYgKGZkID49IDApCisJCWd6ZnAgPSBn emRvcGVuKGR1cChmZCksIG1vZGVfY29tcHJlc3Npb24pOworCWVsc2UKKwkJZ3pmcCA9IGd6b3Bl bihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKworCWlmIChnemZwID09IE5VTEwpCisJCXJldHVy biAxOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBnemZwOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQKK0d6aXBfb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpt b2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwljaGFyCSAgICpmbmFtZTsKKwlpbnQJ CQlyZXQ7CisJaW50CQkJc2F2ZV9lcnJubzsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmd6Iiwg cGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBDRkgpOworCisJ c2F2ZV9lcnJubyA9IGVycm5vOworCXBnX2ZyZWUoZm5hbWUpOworCWVycm5vID0gc2F2ZV9lcnJu bzsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKK3sKKwlDRkgtPm9wZW5fZnVuYyA9IEd6aXBfb3BlbjsKKwlDRkgtPm9wZW5fd3Jp dGVfZnVuYyA9IEd6aXBfb3Blbl93cml0ZTsKKwlDRkgtPnJlYWRfZnVuYyA9IEd6aXBfcmVhZDsK KwlDRkgtPndyaXRlX2Z1bmMgPSBHemlwX3dyaXRlOworCUNGSC0+Z2V0c19mdW5jID0gR3ppcF9n ZXRzOworCUNGSC0+Z2V0Y19mdW5jID0gR3ppcF9nZXRjOworCUNGSC0+Y2xvc2VfZnVuYyA9IEd6 aXBfY2xvc2U7CisJQ0ZILT5lb2ZfZnVuYyA9IEd6aXBfZW9mOworCUNGSC0+Z2V0X2Vycm9yX2Z1 bmMgPSBHemlwX2dldF9lcnJvcjsKKworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNz aW9uX3NwZWM7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisjZWxzZQkJCQkJCQkv KiBIQVZFX0xJQlogKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUg KmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRo ICVzIiwgImd6aXAiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNzR3ppcChDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Np b24gd2l0aCAlcyIsICJnemlwIik7Cit9CisjZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li42ZGZkMGViMDRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2d6aXAuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21w cmVzc19nemlwLmgKKyAqCSBJbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaAorICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19HWklQX0hfCisjZGVmaW5lIF9DT01QUkVTU19H WklQX0hfCisKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29t cHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0d6aXAo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfR1pJUF9IXyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCA0NGQ5YjBkNGE1Li5kNjAxMTFiMmI4IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfaW8uYwpAQCAtOSw0MiArOSw1NCBAQAogICoKICAqIFRoaXMgZmlsZSBpbmNsdWRl cyB0d28gQVBJcyBmb3IgZGVhbGluZyB3aXRoIGNvbXByZXNzZWQgZGF0YS4gVGhlIGZpcnN0CiAg KiBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5LCB1c2luZyBjYWxsYmFja3MgdG8gcmVhZC93cml0 ZSBkYXRhIGZyb20gdGhlCi0gKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMg YSB3cmFwcGVyIGFyb3VuZCBmb3Blbi9nem9wZW4gYW5kCisgKiB1bmRlcmx5aW5nIHN0cmVhbS4g VGhlIHNlY29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBmb3BlbiBhbmQKICAqIGZyaWVuZHMs IHByb3ZpZGluZyBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aG9zZSwgYnV0IGFic3RyYWN0cyBh d2F5Ci0gKiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIEJvdGggQVBJcyB1c2UgbGlieiBmb3Ig dGhlIGNvbXByZXNzaW9uLCBidXQKLSAqIHRoZSBzZWNvbmQgQVBJIHVzZXMgZ3ppcCBoZWFkZXJz LCBzbyB0aGUgcmVzdWx0aW5nIGZpbGVzIGNhbiBiZSBlYXNpbHkKLSAqIG1hbmlwdWxhdGVkIHdp dGggdGhlIGd6aXAgdXRpbGl0eS4KKyAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gVGhlIHNl Y29uZCBBUEkgaXMgYWltZWQgZm9yIHRoZSByZXN1bHRpbmcKKyAqIGZpbGVzIHRvIGJlIGVhc2ls eSBtYW5pcHVsYXRlZCB3aXRoIGFuIGV4dGVybmFsIGNvbXByZXNzaW9uIHV0aWxpdHkKKyAqIHBy b2dyYW0uCisgKgorICogVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgdGhlIGltcGxlbWVudGF0aW9u IHdoZW4gY29tcHJlc3Npb24gaXMgbm9uZSBmb3IKKyAqIGJvdGggQVBJJ3MuCiAgKgogICogQ29t cHJlc3NvciBBUEkKICAqIC0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhlIGludGVyZmFjZSBmb3Ig d3JpdGluZyB0byBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRocmVlIGZ1bmN0aW9uczoKLSAqCUFs bG9jYXRlQ29tcHJlc3NvciwgV3JpdGVEYXRhVG9BcmNoaXZlIGFuZCBFbmRDb21wcmVzc29yLiBG aXJzdCB5b3UgY2FsbAotICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVuIHdyaXRlIGFsbCB0aGUg ZGF0YSBieSBjYWxsaW5nIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYXMgbWFueSB0aW1lcyBhcyBu ZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJ YW5kIEVuZENvbXByZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlk ZWQgdG8KLSAqCUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZiBjb21wcmVzc2Vk IGRhdGEuCi0gKgotICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNp c3RzIG9mIGp1c3Qgb25lIGZ1bmN0aW9uOgotICoJUmVhZERhdGFGcm9tQXJjaGl2ZS4gUmVhZERh dGFGcm9tQXJjaGl2ZSByZWFkcyB0aGUgd2hvbGUgY29tcHJlc3NlZCBpbnB1dAotICoJc3RyZWFt LCBieSByZXBlYXRlZGx5IGNhbGxpbmcgdGhlIGdpdmVuIFJlYWRGdW5jLiBSZWFkRnVuYyByZXR1 cm5zIHRoZQotICoJY29tcHJlc3NlZCBkYXRhIGNodW5rIGF0IGEgdGltZSwgYW5kIFJlYWREYXRh RnJvbUFyY2hpdmUgZGVjb21wcmVzc2VzIGl0Ci0gKglhbmQgcGFzc2VzIHRoZSBkZWNvbXByZXNz ZWQgZGF0YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5jIHJldHVybnMgMAotICoJdG8gc2ln bmFsIEVPRi4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3JpdGVEYXRhLCBhbmQgRW5kQ29tcHJl c3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgdGhlbiB3cml0ZSBh bGwgdGhlIGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEgYXMgbWFueQorICoJdGltZXMgYXMgbmVl ZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29yLiB3cml0ZURhdGEgd2lsbCBjYWxsIHRoZQor ICoJV3JpdGVGdW5jIHRoYXQgd2FzIHByb3ZpZGVkIHRvIEFsbG9jYXRlQ29tcHJlc3NvciBmb3Ig ZWFjaCBjaHVuayBvZgorICoJY29tcHJlc3NlZCBkYXRhLgogICoKLSAqCVRoZSBpbnRlcmZhY2Ug aXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoJ VGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRoZSBzYW1l IHRocmVlIGZ1bmN0aW9uczoKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgcmVhZERhdGEsIGFuZCBF bmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICogIEFsbG9jYXRlQ29tcHJlc3NvciwgdGhl biByZWFkIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIHJlYWREYXRhIHRvIHJlYWQgdGhlCisgKgl3 aG9sZSBjb21wcmVzc2VkIHN0cmVhbSB3aGljaCByZXBlYXRlZGx5IGNhbGxzIHRoZSBnaXZlbiBS ZWFkRnVuYy4gUmVhZEZ1bmMKKyAqCXJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBvbmUgY2h1 bmsgYXQgYSB0aW1lLiBUaGVuIHJlYWREYXRhIGRlY29tcHJlc3NlcworICoJaXQgYW5kIHBhc3Nl cyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVuYyByZXR1 cm5zIDAKKyAqCXRvIHNpZ25hbCBFT0YuIFRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNv bXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZAorICoJc3RyZWFtcy4KICAqCiAgKiBDb21wcmVzc2Vk IHN0cmVhbSBBUEkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKglUaGUgY29tcHJl c3NlZCBzdHJlYW0gQVBJIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgc3RhbmRhcmQgZm9wZW4o KSBhbmQKLSAqCWxpYnoncyBnem9wZW4oKSBBUElzLiBJdCBhbGxvd3MgeW91IHRvIHVzZSB0aGUg c2FtZSBmdW5jdGlvbnMgZm9yCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgc3RyZWFt cy4gY2ZvcGVuX3JlYWQoKSBmaXJzdCB0cmllcyB0byBvcGVuCi0gKgl0aGUgZmlsZSB3aXRoIGdp dmVuIG5hbWUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZQotICoJ ZmlsZSB3aXRoIHRoZSAuZ3ogc3VmZml4LiBjZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9y IHdyaXRpbmcsIGFuCi0gKglleHRyYSBhcmd1bWVudCBzcGVjaWZpZXMgaWYgdGhlIGZpbGUgc2hv dWxkIGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZQotICoJLmd6IHN1ZmZpeCB0byB0aGUgZmls ZW5hbWUgaWYgc28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFuZGxlIGJvdGgKLSAqCWNv bXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KKyAqCVRoZSBjb21wcmVzc2VkIHN0cmVh bSBBUEkgaXMgcHJvdmlkaW5nIGEgc2V0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZvcgorICogIG9w ZW5pbmcsIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBmaW5hbGx5IGNsb3NpbmcgZmlsZXMuIFRoZSBp bXBsZW1lbnRlZAorICogIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBj b3JyZXNwb25kaW5nIGhlYWRlciBmaWxlIGFuZCBhcmUKKyAqICBjb21tb24gZm9yIGFsbCBzdHJl YW1zLiBJdCBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgor ICogIGJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuCisgKgorICogIFRo ZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zLCBJbml0Q29tcHJlc3NGaWxl SGFuZGxlLAorICogIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSwgYW5kIEVuZENvbXBy ZXNzRmlsZUhhbmRsZS4gSWYgdGhlCisgKiAgY29tcHJlc3Npb24gaXMga25vd24sIHRoZW4gc3Rh cnQgYnkgY2FsbGluZyBJbml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICogIG90aGVyd2lzZSBkaXNj b3ZlciBpdCBieSB1c2luZyBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUuIFRoZW4gY2Fs bAorICogIHRoZSBmdW5jdGlvbiBwb2ludGVycyBhcyByZXF1aXJlZCBmb3IgdGhlIHJlYWQvd3Jp dGUgb3BlcmF0aW9ucy4gRmluYWxseQorICogIGNhbGwgRW5kQ29tcHJlc3NGaWxlSGFuZGxlIHRv IGVuZCB0aGUgc3RyZWFtLgorICoKKyAqCUluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSB0 cmllcyB0byBkZWZmZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRoZQorICoJZmlsZW5hbWUgc3VmZml4 LiBJZiB0aGUgc3VmZml4IGlzIG5vdCB5ZXQga25vd24sIHRoZW4gaXQgdHJpZXMgdG8gc2ltcGx5 CisgKglvcGVuIHRoZSBmaWxlLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhl IHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3oKKyAqCXN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElP TgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTUzLDEyOCArNjUsOTQg QEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5o PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNs dWRlICJjb21wcmVzc19nemlwLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKLSNp ZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc29yIEFQSQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KIAotLyogdHlwZWRlZiBhcHBlYXJzIGluIGNvbXByZXNzX2lvLmggKi8KLXN0cnVjdCBD b21wcmVzc29yU3RhdGUKKy8qIFByaXZhdGUgcm91dGluZXMgKi8KKworc3RhdGljIHZvaWQKK1Jl YWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQogewotCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKLQlX cml0ZUZ1bmMJd3JpdGVGOworCXNpemVfdAkJY250OworCWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJ CWJ1ZmxlbjsKIAotI2lmZGVmIEhBVkVfTElCWgotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICp6 bGliT3V0OwotCXNpemVfdAkJemxpYk91dFNpemU7Ci0jZW5kaWYKLX07CisJYnVmID0gcGdfbWFs bG9jKFpMSUJfT1VUX1NJWkUpOworCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLS8qIFJvdXRp bmVzIHRoYXQgc3VwcG9ydCB6bGliIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KLSNpZmRlZiBIQVZF X0xJQloKLXN0YXRpYyB2b2lkIEluaXRDb21wcmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNz LCBpbnQgbGV2ZWwpOwotc3RhdGljIHZvaWQgRGVmbGF0ZUNvbXByZXNzb3JabGliKEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgIGJvb2wgZmx1c2gpOwot c3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJl YWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIg KmRhdGEsIHNpemVfdCBkTGVuKTsKLXN0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKLSNlbmRpZgorCXdoaWxlICgoY250 ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdyaXRlKGJ1ZiwgMSwg Y250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQogCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBv cnQgdW5jb21wcmVzc2VkIGRhdGEgSS9PICovCi1zdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNo aXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQg V3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pOworLyogQ29t cHJlc3NvciBBUEkgTm9uZSBpbXBsZW1lbnRhdGlvbiAqLwogCi0vKiBQdWJsaWMgaW50ZXJmYWNl IHJvdXRpbmVzICovCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGRMZW4pCit7CisJY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7Cit9CiAKLS8q IEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KLUNvbXByZXNzb3JTdGF0ZSAqCi1BbGxvY2F0 ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nv ck5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0JQ29tcHJl c3NvclN0YXRlICpjczsKKwkvKiBubyBvcCAqLworfQogCi0jaWZuZGVmIEhBVkVfTElCWgotCWlm IChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlw Z19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMi LCAiZ3ppcCIpOwotI2VuZGlmCitzdGF0aWMgdm9pZAorSW5pdENvbXByZXNzb3JOb25lKENvbXBy ZXNzb3JTdGF0ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKQoreworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVO b25lOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVOb25lOworCWNzLT5lbmQg PSBFbmRDb21wcmVzc29yTm9uZTsKIAotCWNzID0gKENvbXByZXNzb3JTdGF0ZSAqKSBwZ19tYWxs b2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKLQljcy0+d3JpdGVGID0gd3JpdGVGOwogCWNz LT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKLQotCS8qCi0JICogUGVyZm9y bSBjb21wcmVzc2lvbiBhbGdvcml0aG0gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0JICovCi0j aWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQ R19DT01QUkVTU0lPTl9HWklQKQotCQlJbml0Q29tcHJlc3NvclpsaWIoY3MsIGNzLT5jb21wcmVz c2lvbl9zcGVjLmxldmVsKTsKLSNlbmRpZgotCi0JcmV0dXJuIGNzOwogfQogCisvKiBQdWJsaWMg aW50ZXJmYWNlIHJvdXRpbmVzICovCisKIC8qCi0gKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEg ZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFuZCBwcmludCBpdAotICogb3V0IHdp dGggYWh3cml0ZSgpLgorICogQWxsb2NhdGUgYSBuZXcgY29tcHJlc3Nvci4KICAqLwotdm9pZAot UmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJCQkJY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCQlSZWFkRnVuYyByZWFk RikKK0NvbXByZXNzb3JTdGF0ZSAqCitBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkJCSAgIFJlYWRGdW5jIHJlYWRG LCBXcml0ZUZ1bmMgd3JpdGVGKQogeworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IChD b21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9jMChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7CisJ Y3MtPnJlYWRGID0gcmVhZEY7CisJY3MtPndyaXRlRiA9IHdyaXRlRjsKKwogCXN3aXRjaCAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6 Ci0JCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOworCQkJSW5pdENvbXByZXNz b3JOb25lKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBS RVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxp YihBSCwgcmVhZEYpOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYKKwkJCUluaXRDb21w cmVzc29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoK IAkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAogCQkJCQkg Z2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7 CiAJCQlicmVhazsKIAl9Ci19CiAKLS8qCi0gKiBDb21wcmVzcyBhbmQgd3JpdGUgZGF0YSB0byB0 aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCi0gKi8KLXZvaWQKLVdyaXRlRGF0YVRvQXJj aGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkgICBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQlzd2l0Y2ggKGNzLT5jb21wcmVzc2lvbl9z cGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBI QVZFX0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsK LSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRM ZW4pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVz c2lvbiBtZXRob2QgXCIlc1wiIiwKLQkJCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShj cy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKLQkJCWJyZWFrOwotCX0KKwlyZXR1cm4g Y3M7CiB9CiAKIC8qCkBAIC0xODMsNDA0ICsxNjEsMTgzIEBAIFdyaXRlRGF0YVRvQXJjaGl2ZShB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVuZENvbXByZXNz b3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0Jc3dpdGNoIChj cy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBSRVNTSU9O X05PTkU6Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhB VkVfTElCWgotCQkJRW5kQ29tcHJlc3NvclpsaWIoQUgsIGNzKTsKLSNlbHNlCi0JCQlwZ19mYXRh bCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJ CQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAotCQkJCQkgZ2V0X2NvbXByZXNzX2Fs Z29yaXRobV9uYW1lKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwotCQkJYnJlYWs7 Ci0JfQotCi0JZnJlZShjcyk7CisJY3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQog Ci0vKiBQcml2YXRlIHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhv ZC4gKi8KLQotI2lmZGVmIEhBVkVfTElCWgotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgemxpYiBjb21w cmVzc2VkIG91dHB1dC4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NlZCBz dHJlYW0gQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1zdGF0aWMgdm9pZAot SW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3MsIGludCBsZXZlbCkKLXsKLQl6 X3N0cmVhbXAJenA7Ci0KLQl6cCA9IGNzLT56cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXpl b2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVM TDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JLyoKLQkgKiB6bGliT3V0U2l6ZSBpcyB0aGUg YnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQotCSAqIGFjdHVh bGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRv IGFwcGVuZCBhCi0JICogdHJhaWxpbmcgemVybyBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KLQkg Ki8KLQljcy0+emxpYk91dCA9IChjaGFyICopIHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7 Ci0JY3MtPnpsaWJPdXRTaXplID0gWkxJQl9PVVRfU0laRTsKLQotCWlmIChkZWZsYXRlSW5pdCh6 cCwgbGV2ZWwpICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21w cmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJIHpwLT5tc2cpOwotCi0JLyogSnVzdCBiZSBwYXJh bm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8K LQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+emxpYk91dDsKLQl6cC0+YXZhaWxfb3V0ID0g Y3MtPnpsaWJPdXRTaXplOwotfQorLyogUHJpdmF0ZSByb3V0aW5lcyAqLwogCi1zdGF0aWMgdm9p ZAotRW5kQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNo YXIgKnN1ZmZpeCkKIHsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0KLQl6cC0+bmV4dF9pbiA9 IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQotCS8qIEZsdXNoIGFueSByZW1haW5pbmcgZGF0 YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0ZUNvbXByZXNzb3JabGliKEFILCBjcywgdHJ1 ZSk7CisJaW50CQkJZmlsZW5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCWludAkJCXN1ZmZp eGxlbiA9IHN0cmxlbihzdWZmaXgpOwogCi0JaWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5t c2cpOworCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKKwkJcmV0dXJuIDA7CiAKLQlmcmVl KGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7CisJcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVb ZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAorCQkJCSAgc3VmZml4LAorCQkJCSAgc3VmZml4bGVu KSA9PSAwOwogfQogCisvKiBmcmVlKCkgd2l0aG91dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVsIGlu IHNldmVyYWwgcGxhY2VzIGJlbG93ICovCiBzdGF0aWMgdm9pZAotRGVmbGF0ZUNvbXByZXNzb3Ja bGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQor ZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCiB7Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNo YXIJICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAo Y3MtPnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwg Zmx1c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VS Uk9SKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cp OwotCQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJ CXx8ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkp Ci0JCXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1 bmtzLCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBp biB0aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQu Li4KLQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7 Ci0JCQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJy b3IgY2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBh cyB3ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6 cC0+YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJ enAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGli T3V0U2l6ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0J fQotfQorCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKIAotc3RhdGljIHZvaWQKLVdyaXRlRGF0 YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0J CQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCWNzLT56cC0+bmV4dF9p biA9ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRhKTsKLQljcy0+enAtPmF2YWlsX2lu ID0gZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCBmYWxzZSk7CisJZnJlZShw KTsKKwllcnJubyA9IHNhdmVfZXJybm87CiB9CiAKLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21B cmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCisvKgorICogQ29t cHJlc3NlZCBzdHJlYW0gQVBJIE5vbmUgaW1wbGVtZW50YXRpb24KKyAqLworc3RhdGljIHNpemVf dAorcmVhZF9ub25lKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKQogewotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICpvdXQ7Ci0JaW50CQkJcmVzID0gWl9P SzsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQl6 cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9j ID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwor CUZJTEUJICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJc2l6ZV90CQlyZXQ7 CiAKLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKLQlidWZsZW4gPSBaTElCX0lOX1NJ WkU7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIDA7CiAKLQlvdXQgPSBwZ19tYWxsb2MoWkxJ Ql9PVVRfU0laRSArIDEpOworCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnApOworCWlmIChy ZXQgIT0gc2l6ZSAmJiAhZmVvZihmcCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6ICVzIiwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKIAotCWlmIChpbmZsYXRl SW5pdCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXBy ZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7CisJcmV0dXJuIHJldDsKK30KIAot CS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAqLwotCXdoaWxlICgoY250ID0gcmVh ZEYoQUgsICZidWYsICZidWZsZW4pKSkKLQl7Ci0JCXpwLT5uZXh0X2luID0gKHZvaWQgKikgYnVm OwotCQl6cC0+YXZhaWxfaW4gPSBjbnQ7CitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJl dHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9 CiAKLQkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+IDApCi0JCXsKLQkJCXpwLT5uZXh0X291dCA9ICh2 b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9TSVpFOworc3RhdGljIGNv bnN0IGNoYXIgKgorZ2V0X2Vycm9yX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJ cmV0dXJuIHN0cmVycm9yKGVycm5vKTsKK30KIAotCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0J CQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCQlwZ19mYXRhbCgi Y291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKK3N0YXRpYyBjaGFyICoK K2dldHNfbm9uZShjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7 Cit9CiAKLQkJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJ YWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0K LQl9CitzdGF0aWMgaW50CitnZXRjX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJ RklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQlyZXQ7CiAK LQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9 IFpfU1RSRUFNX0VORCkKKwlyZXQgPSBmZ2V0YyhmcCk7CisJaWYgKHJldCA9PSBFT0YpCiAJewot CQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCXpwLT5hdmFpbF9vdXQgPSBaTElCX09V VF9TSVpFOwotCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJaWYgKHJlcyAhPSBaX09LICYmIHJl cyAhPSBaX1NUUkVBTV9FTkQpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0 YTogJXMiLCB6cC0+bXNnKTsKLQotCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXRd ID0gJ1wwJzsKLQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0 LCBBSCk7CisJCWlmICghZmVvZihmcCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CiAJfQogCi0J aWYgKGluZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug Y29tcHJlc3Npb24gbGlicmFyeTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUoYnVmKTsKLQlmcmVl KG91dCk7Ci0JZnJlZSh6cCk7CisJcmV0dXJuIHJldDsKIH0KLSNlbmRpZgkJCQkJCQkvKiBIQVZF X0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXByZXNzZWQgb3V0cHV0Lgot ICovCiAKLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxl ICpBSCwgUmVhZEZ1bmMgcmVhZEYpCitzdGF0aWMgaW50CitjbG9zZV9ub25lKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQogewotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlzaXplX3QJ CWJ1ZmxlbjsKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWlu dAkJCXJldCA9IDA7CiAKLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7Ci0JYnVmbGVu ID0gWkxJQl9PVVRfU0laRTsKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKLQl3aGlsZSAo KGNudCA9IHJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwg Y250LCBBSCk7Ci0JfQorCWlmIChmcCkKKwkJcmV0ID0gZmNsb3NlKGZwKTsKIAotCWZyZWUoYnVm KTsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3Qg Y2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCitzdGF0aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKIHsKLQljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKKwlyZXR1cm4g ZmVvZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gKiBDb21wcmVzc2VkIHN0cmVhbSBBUEkKLSAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotICovCi0KLS8qCi0gKiBjZnAgcmVwcmVzZW50cyBhbiBvcGVuIHN0cmVhbSwgd3JhcHBp bmcgdGhlIHVuZGVybHlpbmcgRklMRSBvciBnekZpbGUKLSAqIHBvaW50ZXIuIFRoaXMgaXMgb3Bh cXVlIHRvIHRoZSBjYWxsZXJzLgotICovCi1zdHJ1Y3QgY2ZwCitzdGF0aWMgaW50CitvcGVuX25v bmUoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKIHsKLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWM7Ci0JdW5pb24gewotCQlGSUxFICAgKmZwOwotI2lmZGVmIEhBVkVfTElCWgotCQlnekZp bGUJZ3pmcDsKLSNlbmRpZgotCX0gZmlsZTsKLX07CisJQXNzZXJ0KENGSC0+cHJpdmF0ZV9kYXRh ID09IE5VTEwpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50CWhhc1N1ZmZpeChjb25z dCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgorCWlmIChmZCA+ PSAwKQorCQlDRkgtPnByaXZhdGVfZGF0YSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNl CisJCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CiAKLS8qIGZyZWUoKSB3 aXRob3V0IGNoYW5naW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2ZXJhbCBwbGFjZXMgYmVsb3cgKi8K LXN0YXRpYyB2b2lkCi1mcmVlX2tlZXBfZXJybm8odm9pZCAqcCkKLXsKLQlpbnQJCQlzYXZlX2Vy cm5vID0gZXJybm87CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAx OwogCi0JZnJlZShwKTsKLQllcnJubyA9IHNhdmVfZXJybm87CisJcmV0dXJuIDA7CiB9CiAKLS8q Ci0gKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4s IGFuZCAnbW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCi0gKgotICogSWYg dGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICIuZ3oiIHN1 ZmZpeCAoaWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fp bi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhpcyB3aWxsIG9wZW4gZWl0 aGVyICJmb28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdp dGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqLwotY2ZwICoKLWNmb3Blbl9yZWFkKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitzdGF0aWMgaW50CitvcGVuX3dyaXRlX25v bmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkgpCiB7Ci0JY2ZwCQkgICAqZnA7CisJQXNzZXJ0KENGSC0+cHJpdmF0ZV9kYXRhID09IE5V TEwpOwogCi0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9 OworCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJp dmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGhhc1N1ZmZpeChwYXRoLCAiLmd6IikpCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXBy ZXNzaW9uX3NwZWMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9k ZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9PSBOVUxM KQotCQl7Ci0JCQljaGFyCSAgICpmbmFtZTsKKwlyZXR1cm4gMDsKK30KIAotCQkJZm5hbWUgPSBw c3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0g UEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVz c2lvbl9zcGVjKTsKLQkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgotCX0K LQlyZXR1cm4gZnA7CitzdGF0aWMgdm9pZAorSW5pdENvbXByZXNzTm9uZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwKKwkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQoreworCUNGSC0+b3Blbl9mdW5jID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93 cml0ZV9mdW5jID0gb3Blbl93cml0ZV9ub25lOworCUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25l OworCUNGSC0+d3JpdGVfZnVuYyA9IHdyaXRlX25vbmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRz X25vbmU7CisJQ0ZILT5nZXRjX2Z1bmMgPSBnZXRjX25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0g Y2xvc2Vfbm9uZTsKKwlDRkgtPmVvZl9mdW5jID0gZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3Jf ZnVuYyA9IGdldF9lcnJvcl9ub25lOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOwogfQog CiAvKgotICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcuICdwYXRoJyBpbmRpY2F0ZXMgdGhlIHBh dGggbmFtZSwgYW5kICdtb2RlJyBtdXN0Ci0gKiBiZSBhIGZpbGVtb2RlIGFzIGFjY2VwdGVkIGJ5 IGZvcGVuKCkgYW5kIGd6b3BlbigpIHRoYXQgaW5kaWNhdGVzIHdyaXRpbmcKLSAqICgidyIsICJ3 YiIsICJhIiwgb3IgImFiIikuCi0gKgotICogSWYgJ2NvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht JyBpcyBHWklQLCBhIGd6aXAgY29tcHJlc3NlZCBzdHJlYW0gaXMgb3BlbmVkLAotICogYW5kICdj b21wcmVzc2lvbl9zcGVjLmxldmVsJyB1c2VkLiBUaGUgIi5neiIgc3VmZml4IGlzIGF1dG9tYXRp Y2FsbHkgYWRkZWQgdG8KLSAqICdwYXRoJyBpbiB0aGF0IGNhc2UuCi0gKgotICogT24gZmFpbHVy ZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICogUHVibGljIGlu dGVyZmFjZQogICovCi1jZnAgKgotY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsCi0JCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQotewotCWNmcAkJICAgKmZwOwotCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUs IGNvbXByZXNzaW9uX3NwZWMpOwotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWNoYXIJ ICAgKmZuYW1lOwotCi0JCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCWZwID0g Y2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJZnJlZV9rZWVwX2Vycm5v KGZuYW1lKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQg Y29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0JCWZwID0gTlVMTDsJCQkJLyoga2VlcCBj b21waWxlciBxdWlldCAqLwotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KIAogLyoKLSAqIFRo aXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBm aWxlICdwYXRoJyBvcgotICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEg dmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKLSAqIGRlc2NyaXB0b3IgaXMgbm90IGR1 cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgotICog VGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBz dXBwb3J0ZWQgYnkgdGhlCi0gKiBjdXJyZW50IGJ1aWxkLgotICoKLSAqIE9uIGZhaWx1cmUsIHJl dHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIEluaXRpYWxpemUgYSBj b21wcmVzcyBmaWxlIGhhbmRsZSBmb3IgdGhlIHNwZWNpZmllZCBjb21wcmVzc2lvbiBhbGdvcml0 aG0uCiAgKi8KLXN0YXRpYyBjZnAgKgotY2ZvcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgs IGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdENvbXByZXNzRmls ZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp CiB7Ci0JY2ZwCQkgICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkpOworCUNvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIOwogCi0JZnAtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVj OworCUNGSCA9IHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzRmlsZUhhbmRsZSkpOwogCiAJc3dp dGNoIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7CiAJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTk9ORToKLQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5maWxlLmZwID0gZmRvcGVuKGZkLCBt b2RlKTsKLQkJCWVsc2UKLQkJCQlmcC0+ZmlsZS5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQkJ aWYgKGZwLT5maWxlLmZwID09IE5VTEwpCi0JCQl7Ci0JCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsK LQkJCQlmcCA9IE5VTEw7Ci0JCQl9Ci0KKwkJCUluaXRDb21wcmVzc05vbmUoQ0ZILCBjb21wcmVz c2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JCQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRf Q09NUFJFU1NJT04pCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBj b21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZQotCQkJCSAqIGl0Ci0JCQkJICov Ci0JCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07Ci0KLQkJCQlzbnByaW50Zihtb2RlX2Nv bXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJCSBtb2Rl LCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJCQlpZiAoZmQgPj0gMCkKLQkJCQkJZnAtPmZp bGUuZ3pmcCA9IGd6ZG9wZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJCWVsc2UKLQkJCQkJ ZnAtPmZpbGUuZ3pmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLQkJCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6 bGliIGRlZmF1bHQgKi8KLQkJCQlpZiAoZmQgPj0gMCkKLQkJCQkJZnAtPmZpbGUuZ3pmcCA9IGd6 ZG9wZW4oZmQsIG1vZGUpOwotCQkJCWVsc2UKLQkJCQkJZnAtPmZpbGUuZ3pmcCA9IGd6b3Blbihw YXRoLCBtb2RlKTsKLQkJCX0KLQotCQkJaWYgKGZwLT5maWxlLmd6ZnAgPT0gTlVMTCkKLQkJCXsK LQkJCQlmcmVlX2tlZXBfZXJybm8oZnApOwotCQkJCWZwID0gTlVMTDsKLQkJCX0KLSNlbHNlCi0J CQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGgg JXMiLCAiZ3ppcCIpOwotI2VuZGlmCisJCQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29tcHJlc3Np b25fc3BlYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNv bXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLApAQCAtNTg4LDI2OCArMzQ1LDg0IEBAIGNmb3Blbl9p bnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQli cmVhazsKIAl9CiAKLQlyZXR1cm4gZnA7CisJcmV0dXJuIENGSDsKIH0KIAogLyoKLSAqIE9wZW5z IGZpbGUgJ3BhdGgnIGluICdtb2RlJyBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5lZCBpbgotICog Y29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSBjb21wcmVz c2lvbgotICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICogT3BlbiBhIGZp bGUgZm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNo b3VsZAorICogYmUgZWl0aGVyICJyIiBvciAicmIiLgogICoKLSAqIE9uIGZhaWx1cmUsIHJldHVy biBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqLwotY2ZwICoKLWNmb3Blbihj b25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKLXsKLQlyZXR1cm4gY2ZvcGVuX2ludGVy bmFsKHBhdGgsIC0xLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLX0KLQotLyoKLSAqIEFzc29j aWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdt b2RlJwotICogYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4gY29tcHJlc3Npb25fc3BlYy4g VGhlIGNhbGxlciBtdXN0Ci0gKiB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24gaXMgc3VwcG9y dGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGNvbnRh aW5zIHRoZSBzdWZmaXggb2YgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kLAorICogY3Vy cmVudGx5IHRoaXMgaW5jbHVkZXMgb25seSAiLmd6IiwgdGhlbiB0aGlzIGNvbXByZXNzaW9uIHdp bGwgYmUgdXNlZAorICogdGhyb3VnaG91dC4gT3RoZXJ3aXNlIHRoZSBjb21wcmVzc2lvbiB3aWxs IGJlIGRlZmVycmVkIGJ5IGl0ZXJhdGl2ZWx5IHRyeWluZworICogdG8gb3BlbiB0aGUgZmlsZSBh dCAncGF0aCcsIGZpcnN0IGFzIGlzLCB0aGVuIGJ5IGFwcGVuZGluZyBrbm93biBjb21wcmVzc2lv bgorICogc3VmZml4ZXMuIFNvIGlmIHlvdSBwYXNzICJmb28iIGFzICdwYXRoJywgdGhpcyB3aWxs IG9wZW4gZWl0aGVyICJmb28iIG9yCisgKiAiZm9vLmd6IiwgdHJ5aW5nIGluIHRoYXQgb3JkZXIu CiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVy cm5vLgogICovCi1jZnAgKgotY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCWNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKLXsKLQlyZXR1 cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLX0K LQotaW50Ci1jZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKK0NvbXByZXNzRmls ZUhhbmRsZSAqCitJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0 aCwgY29uc3QgY2hhciAqbW9kZSkKIHsKLQlpbnQJCQlyZXQgPSAwOwotCi0JaWYgKHNpemUgPT0g MCkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZyZWFkKHB0ciwg MSwgc2l6ZSwgZnAtPmZpbGUuZnApOwotCQkJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKGZwLT5m aWxlLmZwKSkKLQkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZpbGUuZnApOwotCi0JCQlicmVhazsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0g Z3pyZWFkKGZwLT5maWxlLmd6ZnAsIHB0ciwgc2l6ZSk7Ci0JCQlpZiAocmV0ICE9IHNpemUgJiYg IWd6ZW9mKGZwLT5maWxlLmd6ZnApKQotCQkJewotCQkJCWludAkJCWVycm51bTsKLQkJCQljb25z dCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5maWxlLmd6ZnAsICZlcnJudW0pOwotCi0JCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJCQkJIGVy cm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKLQkJCX0KLSNlbHNl Ci0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdp dGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAotCQkJCQkgZ2V0 X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkp OwotCQkJYnJlYWs7Ci0JfQorCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gTlVMTDsKKwlzdHJ1 Y3Qgc3RhdCBzdDsKKwljaGFyCSAgICpmbmFtZTsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAKLQlyZXR1cm4gcmV0OwotfQorCWNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKIAotaW50Ci1jZndyaXRlKGNv bnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCi17Ci0JaW50CQkJcmV0ID0gMDsKKwlB c3NlcnQoc3RyY21wKG1vZGUsICJyIikgPT0gMCB8fCBzdHJjbXAobW9kZSwgInJiIikgPT0gMCk7 CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT5m aWxlLmZwKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYg SEFWRV9MSUJaCi0JCQlyZXQgPSBnendyaXRlKGZwLT5maWxlLmd6ZnAsIHB0ciwgc2l6ZSk7Ci0j ZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6 Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wiIiwKLQkJCQkJ IGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0pKTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotY2ZnZXRjKGNm cCAqZnApCi17Ci0JaW50CQkJcmV0ID0gMDsKKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAotCXN3 aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQorCWlmIChoYXNTdWZmaXgoZm5h bWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9HWklQOworCWVsc2UKIAl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9 IGZnZXRjKGZwLT5maWxlLmZwKTsKLQkJCWlmIChyZXQgPT0gRU9GKQotCQkJCVJFQURfRVJST1Jf RVhJVChmcC0+ZmlsZS5mcCk7CisJCWJvb2wJCWV4aXN0czsKIAotCQkJYnJlYWs7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fR1pJUDoKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsK KwkJLyogYXZvaWQgdW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWxkIHdpdGggY29tcHJl c3Npb24gKi8KKwkJaWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0g UEdfQ09NUFJFU1NJT05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6Z2V0Yyhm cC0+ZmlsZS5nemZwKTsKLQkJCWlmIChyZXQgPT0gRU9GKQotCQkJewotCQkJCWlmICghZ3plb2Yo ZnAtPmZpbGUuZ3pmcCkpCi0JCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQllbHNlCi0JCQkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7Ci0JCQl9Ci0jZWxz ZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0J CQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wiIiwKLQkJCQkJIGdl dF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0p KTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWNoYXIgKgotY2ZnZXRzKGNm cCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQljaGFyCSAgICpyZXQgPSBOVUxMOwotCi0J c3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NP TVBSRVNTSU9OX05PTkU6Ci0JCQlyZXQgPSBmZ2V0cyhidWYsIGxlbiwgZnAtPmZpbGUuZnApOwor CQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1l ID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0 KSA9PSAwKTsKIAotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRl ZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6Z2V0cyhmcC0+ZmlsZS5nemZwLCBidWYsIGxlbik7Ci0j ZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKKwkJCWlmIChleGlzdHMpCisJCQkJY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOworCQl9CiAjZW5kaWYKLQkJ CWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0 aG9kIFwiJXNcIiIsCi0JCQkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoZnAtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7Ci0JCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcmV0Owot fQotCi1pbnQKLWNmY2xvc2UoY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQgPSAwOwotCi0JaWYgKGZw ID09IE5VTEwpCisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVj KTsKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBDRkgpKQogCXsKLQkJZXJy bm8gPSBFQkFERjsKLQkJcmV0dXJuIEVPRjsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNG SCA9IE5VTEw7CiAJfQorCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAKLQlzd2l0Y2ggKGZwLT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9O RToKLQkJCXJldCA9IGZjbG9zZShmcC0+ZmlsZS5mcCk7Ci0JCQlmcC0+ZmlsZS5mcCA9IE5VTEw7 Ci0KLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9M SUJaCi0JCQlyZXQgPSBnemNsb3NlKGZwLT5maWxlLmd6ZnApOwotCQkJZnAtPmZpbGUuZ3pmcCA9 IE5VTEw7Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wi IiwKLQkJCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShmcC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0pKTsKLQkJCWJyZWFrOwotCX0KLQotCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0K LQlyZXR1cm4gcmV0OworCXJldHVybiBDRkg7CiB9CiAKKy8qCisgKiBDbG9zZSBhbiBvcGVuIGZp bGUgaGFuZGxlIGFuZCByZWxlYXNlIGl0cyBtZW1vcnkuCisgKgorICogT24gZmFpbHVyZSwgcmV0 dXJucyBhbiBlcnJvciB2YWx1ZSBhbmQgc2V0cyBlcnJubyBhcHByb3ByaWF0ZWx5LgorICovCiBp bnQKLWNmZW9mKGNmcCAqZnApCitFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpCiB7CiAJaW50CQkJcmV0ID0gMDsKIAotCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0 ID0gZmVvZihmcC0+ZmlsZS5mcCk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhKQorCQlyZXQgPSBD RkgtPmNsb3NlX2Z1bmMoQ0ZIKTsKIAotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05f R1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6ZW9mKGZwLT5maWxlLmd6ZnApOwot I2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Np b24gd2l0aCAlcyIsCi0JCQkJCSJnemlwIik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0 OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIsCi0JCQkJ CSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtKSk7Ci0JCQlicmVhazsKLQl9CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAKIAlyZXR1cm4g cmV0OwogfQotCi1jb25zdCBjaGFyICoKLWdldF9jZnBfZXJyb3IoY2ZwICpmcCkKLXsKLQlpZiAo ZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0J ewotI2lmZGVmIEhBVkVfTElCWgotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1z ZyA9IGd6ZXJyb3IoZnAtPmZpbGUuZ3pmcCwgJmVycm51bSk7Ci0KLQkJaWYgKGVycm51bSAhPSBa X0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxk IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYK LQl9Ci0KLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQotCi0jaWZkZWYgSEFWRV9MSUJaCi1z dGF0aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1 ZmZpeCkKLXsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJ c3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7Ci0KLQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhs ZW4pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4g LSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAotCQkJCSAgc3VmZml4bGVuKSA9PSAwOwotfQot Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKaW5kZXggYTZjZGY1ODhkZC4uYmQyYjU2MjNhNSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmgKQEAgLTM3LDM0ICszNyw2NCBAQCB0eXBlZGVmIHZvaWQgKCpX cml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVu KTsKICAqLwogdHlwZWRlZiBzaXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBj aGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZpbml0aW9uIGFwcGVh cnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENv bXByZXNzb3JTdGF0ZTsKK3N0cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkvKgorCSAqIFJlYWQg YWxsIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5k IHByaW50IGl0CisJICogb3V0IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZvaWQJCSgqcmVhZERh dGEpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAq IENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVG KS4KKwkgKi8KKwl2b2lkCQkoKndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAorCQkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOwor CisJLyoKKwkgKiBFbmQgY29tcHJlc3Npb24gYW5kIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMgaWYg YW55LgorCSAqLworCXZvaWQJCSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MpOworCisJUmVhZEZ1bmMJcmVhZEY7CisJV3JpdGVGdW5jCXdyaXRlRjsKKworCXBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKKwl2b2lkCSAgICpwcml2 YXRlX2RhdGE7Cit9OwogCiBleHRlcm4gQ29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXByZXNz b3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkJ CQkJCQkJCSAgIFJlYWRGdW5jIHJlYWRGLAogCQkJCQkJCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYp OwotZXh0ZXJuIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJ CQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAot CQkJCQkJCQlSZWFkRnVuYyByZWFkRik7Ci1leHRlcm4gdm9pZCBXcml0ZURhdGFUb0FyY2hpdmUo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJICAgY29uc3Qg dm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOwogZXh0ZXJuIHZvaWQgRW5kQ29tcHJlc3NvcihBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CiAKKy8qCisgKiBDb21wcmVzcyBG aWxlIEhhbmRsZQorICovCit0eXBlZGVmIHN0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUgQ29tcHJl c3NGaWxlSGFuZGxlOwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOworc3RydWN0IENvbXByZXNz RmlsZUhhbmRsZQoreworCWludAkJCSgqb3Blbl9mdW5jKSAoY29uc3QgY2hhciAqcGF0aCwgaW50 IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCQkJCSAgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp OworCWludAkJCSgqb3Blbl93cml0ZV9mdW5jKSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hh ciAqbW9kZSwKKwkJCQkJCQkJCUNvbXByZXNzRmlsZUhhbmRsZSAqY3h0KTsKKwlzaXplX3QJCSgq cmVhZF9mdW5jKSAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpOworCXNpemVfdAkJKCp3cml0ZV9mdW5jKSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSwKKwkJCQkJCQkgICBzdHJ1Y3QgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWNoYXIJICAg KigqZ2V0c19mdW5jKSAoY2hhciAqcywgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KTsKKwlpbnQJCQkoKmdldGNfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJ CQkoKmVvZl9mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCWludAkJCSgqY2xvc2Vf ZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwljb25zdCBjaGFyICooKmdldF9lcnJv cl9mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi1leHRlcm4gY2ZwICpjZm9wZW4o Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkgICBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2Zkb3Bl bihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBjZnAgKmNmb3Blbl93cml0 ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQkJIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gaW50CWNmcmVh ZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Z3cml0ZShjb25z dCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2ZnZXRjKGNmcCAq ZnApOwotZXh0ZXJuIGNoYXIgKmNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pOwot ZXh0ZXJuIGludAljZmNsb3NlKGNmcCAqZnApOwotZXh0ZXJuIGludAljZmVvZihjZnAgKmZwKTsK LWV4dGVybiBjb25zdCBjaGFyICpnZXRfY2ZwX2Vycm9yKGNmcCAqZnApOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKKwl2b2lkCSAgICpwcml2YXRlX2RhdGE7 Cit9OwogCitleHRlcm4gQ29tcHJlc3NGaWxlSGFuZGxlICpJbml0Q29tcHJlc3NGaWxlSGFuZGxl KGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRl cm4gQ29tcHJlc3NGaWxlSGFuZGxlICpJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29u c3QgY2hhciAqcGF0aCwKKwkJCQkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptb2RlKTsKK2V4dGVy biBpbnQJRW5kQ29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKICNl bmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGNhNjJmOWEzNzQuLmFhMmM5MTgyOWMgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxl cygKICAgJ2NvbXByZXNzX2lvLmMnLAorICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2R1bXB1dGls cy5jJywKICAgJ3BhcmFsbGVsLmMnLAogICAncGdfYmFja3VwX2FyY2hpdmVyLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGZiOTQzMTdhZDkuLmNjM2I3ZjA5OTIgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTk1LDggKzk1LDggQEAgc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsK IHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKTsKLXN0YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3Rh dGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1 dCk7CitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFIKTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2Vu dHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwog c3RhdGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFI LApAQCAtMjcyLDcgKzI3Miw3IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAKIAkvKiBD bG9zZSB0aGUgb3V0cHV0ICovCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsK KwlyZXMgPSBFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkK IAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTM1NSw3 ICszNTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJYm9vbAkJcGFyYWxsZWxf bW9kZTsKIAlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsKLQlj ZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAKIAlBSC0+c3RhZ2UgPSBT VEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTExMjcsNyArMTEyNyw3IEBAIFByaW50VE9DU3VtbWFy eShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3VyU2VjdGlvbjsK LQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAJY29uc3QgY2hhciAq Zm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xMTQzLDkgKzExNDMsMTAgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAkJc3RyY3B5KHN0YW1wX3N0ciwgIlt1bmtu b3duXSIpOwogCiAJYWhwcmludGYoQUgsICI7XG47IEFyY2hpdmUgY3JlYXRlZCBhdCAlc1xuIiwg c3RhbXBfc3RyKTsKLQlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsgICAgIFRPQyBF bnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVkXG4iLAorCWFocHJpbnRmKEFILCAiOyAg ICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjog JXNcbiIsCiAJCQkgc2FuaXRpemVfbGluZShBSC0+YXJjaGRibmFtZSwgZmFsc2UpLAotCQkJIEFI LT50b2NDb3VudCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCQkJIEFILT50b2NDb3Vu dCwKKwkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoQUgtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtKSk7CiAKIAlzd2l0Y2ggKEFILT5mb3JtYXQpCiAJewpAQCAtMTUwMiw2ICsxNTAz LDcgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQogeworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1v ZGU7CiAJaW50CQkJZm4gPSAtMTsKIApAQCAtMTUyNCwzMyArMTUyNiwzMiBAQCBTZXRPdXRwdXQo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJbW9kZSA9 IFBHX0JJTkFSWV9XOwogCi0JaWYgKGZuID49IDApCi0JCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZu KSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCQlBSC0+T0YgPSBjZm9wZW4oZmls ZW5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVI YW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CiAKLQlpZiAoIUFILT5PRikKKwlpZiAoQ0ZILT5vcGVu X2Z1bmMoZmlsZW5hbWUsIGZuLCBtb2RlLCBDRkgpKQogCXsKIAkJaWYgKGZpbGVuYW1lKQogCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFt ZSk7CiAJCWVsc2UKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZTogJW0i KTsKIAl9CisKKwlBSC0+T0YgPSBDRkg7CiB9CiAKLXN0YXRpYyBjZnAgKgorc3RhdGljIENvbXBy ZXNzRmlsZUhhbmRsZSAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKQogewotCXJldHVy biAoY2ZwICopIEFILT5PRjsKKwlyZXR1cm4gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7 CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAg KnNhdmVkT3V0cHV0KQorUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NG aWxlSGFuZGxlICpzYXZlZE91dHB1dCkKIHsKIAlpbnQJCQlyZXM7CiAKIAllcnJubyA9IDA7Ci0J cmVzID0gY2ZjbG9zZShBSC0+T0YpOworCXJlcyA9IEVuZENvbXByZXNzRmlsZUhhbmRsZShBSC0+ T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1 dCBmaWxlOiAlbSIpOwpAQCAtMTY4OSw3ICsxNjkwLDExIEBAIGFod3JpdGUoY29uc3Qgdm9pZCAq cHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNl IGlmIChSZXN0b3JpbmdUb0RCKEFIKSkKIAkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21t YW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJ ZWxzZQotCQlieXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9G KTsKKwl7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gKENvbXByZXNzRmlsZUhhbmRsZSAq KSBBSC0+T0Y7CisKKwkJYnl0ZXNfd3JpdHRlbiA9IENGSC0+d3JpdGVfZnVuYyhwdHIsIHNpemUg KiBubWVtYiwgQ0ZIKTsKKwl9CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIp CiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMDMxLDYgKzIwMzYsMTggQEAgUmVhZFN0cihBcmNo aXZlSGFuZGxlICpBSCkKIAlyZXR1cm4gYnVmOwogfQogCitzdGF0aWMgYm9vbAorX2ZpbGVFeGlz dHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorewor CXN0cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRm KGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJ CXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJl dHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKwog c3RhdGljIGludAogX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKIHsK QEAgLTIwNjEsMjYgKzIwNzgsMTIgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFu ZGxlICpBSCkKIAkJICovCiAJCWlmIChzdGF0KEFILT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNE SVIoc3Quc3RfbW9kZSkpCiAJCXsKLQkJCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOwotCi0JCQlpZiAo c25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0IiwgQUgtPmZTcGVjKSA+PSBNQVhQ R1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLAot CQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVH KHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCQkJ QUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9y eShBSC0+ZlNwZWMsICJ0b2MuZGF0IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9Ci0K ICNpZmRlZiBIQVZFX0xJQloKLQkJCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3Rv Yy5kYXQuZ3oiLCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0 b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChz dGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgt PmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShB SC0+ZlNwZWMsICJ0b2MuZGF0Lmd6IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9CiAj ZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBi ZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBB SC0+ZlNwZWMpOwpAQCAtMjE3OCw2ICsyMTgxLDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmls ZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNl dHVwV29ya2VyUHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCUNvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7 MH07CiAKIAlwZ19sb2dfZGVidWcoImFsbG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLApA QCAtMjIzMyw3ICsyMjM3LDEwIEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25z dCBBcmNoaXZlRm9ybWF0IGZtdCwKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJlc3Np b24gZm9yIEFIIG91dHB1dCBoYW5kbGUgKi8KIAlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0g PSBQR19DT01QUkVTU0lPTl9OT05FOwotCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRv dXQpKSwgUEdfQklOQVJZX0EsIG91dF9jb21wcmVzc19zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJl c3NGaWxlSGFuZGxlKG91dF9jb21wcmVzc19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoTlVM TCwgZmlsZW5vKHN0ZG91dCksIFBHX0JJTkFSWV9BLCBDRkgpKQorCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gc3Rkb3V0IGZvciBhcHBlbmRpbmc6ICVtIik7CisJQUgtPk9GID0gQ0ZIOwogCiAJ LyoKIAkgKiBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dy aXRlIG5vbi10ZXh0IGZpbGVzLApAQCAtMzY0NiwxMiArMzY1Myw3IEBAIFdyaXRlSGVhZChBcmNo aXZlSGFuZGxlICpBSCkKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+aW50U2l6ZSk7CiAJQUgt PldyaXRlQnl0ZVB0cihBSCwgQUgtPm9mZlNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFI LT5mb3JtYXQpOwotCS8qCi0JICogRm9yIG5vdyB0aGUgY29tcHJlc3Npb24gdHlwZSBpcyBpbXBs aWVkIGJ5IHRoZSBsZXZlbC4gIFRoaXMgd2lsbCBuZWVkCi0JICogdG8gY2hhbmdlIG9uY2Ugc3Vw cG9ydCBmb3IgbW9yZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGlzIGFkZGVkLAotCSAqIHJlcXVp cmluZyBhIGZvcm1hdCBidW1wLgotCSAqLwotCVdyaXRlSW50KEFILCBBSC0+Y29tcHJlc3Npb25f c3BlYy5sZXZlbCk7CisJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtKTsKIAljcnRtID0gKmxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpOwogCVdyaXRl SW50KEFILCBjcnRtLnRtX3NlYyk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fbWluKTsKQEAgLTM3 MjIsMTAgKzM3MjQsMTEgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXBnX2ZhdGFs KCJleHBlY3RlZCBmb3JtYXQgKCVkKSBkaWZmZXJzIGZyb20gZm9ybWF0IGZvdW5kIGluIGZpbGUg KCVkKSIsCiAJCQkJIEFILT5mb3JtYXQsIGZtdCk7CiAKLQkvKiBHdWVzcyB0aGUgY29tcHJlc3Np b24gbWV0aG9kIGJhc2VkIG9uIHRoZSBsZXZlbCAqLwotCUFILT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JaWYgKEFILT52ZXJzaW9uID49IEtfVkVS U18xXzIpCisJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzE1KQorCQlBSC0+Y29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOworCWVsc2UgaWYgKEFILT52 ZXJzaW9uID49IEtfVkVSU18xXzIpCiAJeworCQkvKiBHdWVzcyB0aGUgY29tcHJlc3Npb24gbWV0 aG9kIGJhc2VkIG9uIHRoZSBsZXZlbCAqLwogCQlpZiAoQUgtPnZlcnNpb24gPCBLX1ZFUlNfMV80 KQogCQkJQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOwog CQllbHNlCkBAIC0zNzM3LDEwICszNzQwLDE3IEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFI KQogCWVsc2UKIAkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fR1pJUDsKIAorCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09N UFJFU1NJT05fTk9ORSkKKwl7CisJCWJvb2wJCXVuc3VwcG9ydGVkID0gZmFsc2U7CisKICNpZm5k ZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9HWklQKQotCQlwZ19mYXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQg dGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOworCQlpZiAo QUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJ CQl1bnN1cHBvcnRlZCA9IHRydWU7CiAjZW5kaWYKKwkJaWYgKHVuc3VwcG9ydGVkKQorCQkJcGdf ZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKKwl9CiAKIAlpZiAoQUgtPnZlcnNpb24gPj0gS19W RVJTXzFfNCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggNDcyNWU0 OTc0Ny4uMThiMzhjMTdhYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAt NjUsMTAgKzY1LDEzIEBACiAjZGVmaW5lIEtfVkVSU18xXzEzIE1BS0VfQVJDSElWRV9WRVJTSU9O KDEsIDEzLCAwKQkvKiBjaGFuZ2Ugc2VhcmNoX3BhdGgKIAkJCQkJCQkJCQkJCQkgKiBiZWhhdmlv ciAqLwogI2RlZmluZSBLX1ZFUlNfMV8xNCBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxNCwgMCkJ LyogYWRkIHRhYmxlYW0gKi8KKyNkZWZpbmUgS19WRVJTXzFfMTUgTUFLRV9BUkNISVZFX1ZFUlNJ T04oMSwgMTUsIDApCS8qIGFkZAorCQkJCQkJCQkJCQkJCSAqIGNvbXByZXNzaW9uX2FsZ29yaXRo bQorCQkJCQkJCQkJCQkJCSAqIGluIGhlYWRlciAqLwogCiAvKiBDdXJyZW50IGFyY2hpdmUgdmVy c2lvbiBudW1iZXIgKHRoZSBmb3JtYXQgd2UgY2FuIG91dHB1dCkgKi8KICNkZWZpbmUgS19WRVJT X01BSk9SIDEKLSNkZWZpbmUgS19WRVJTX01JTk9SIDE0CisjZGVmaW5lIEtfVkVSU19NSU5PUiAx NQogI2RlZmluZSBLX1ZFUlNfUkVWIDAKICNkZWZpbmUgS19WRVJTX1NFTEYgTUFLRV9BUkNISVZF X1ZFUlNJT04oS19WRVJTX01BSk9SLCBLX1ZFUlNfTUlOT1IsIEtfVkVSU19SRVYpCiAKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2N1c3RvbS5jCmluZGV4IGQxZTU0NjQ0YTkuLjUxMmFiMDQzYWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwpAQCAtMjk4LDcgKzI5OCw5IEBAIF9TdGFydERhdGEo QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlfV3JpdGVCeXRlKEFILCBCTEtfREFU QSk7CS8qIEJsb2NrIHR5cGUgKi8KIAlXcml0ZUludChBSCwgdGUtPmR1bXBJZCk7CS8qIEZvciBz YW5pdHkgY2hlY2sgKi8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXBy ZXNzaW9uX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXBy ZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1 c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC0zMTcsMTUgKzMxOSwxNSBAQCBfV3JpdGVEYXRh KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKIAlDb21w cmVzc29yU3RhdGUgKmNzID0gY3R4LT5jczsKIAogCWlmIChkTGVuID4gMCkKLQkJLyogV3JpdGVE YXRhVG9BcmNoaXZlKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJyb3JzICovCi0JCVdyaXRl RGF0YVRvQXJjaGl2ZShBSCwgY3MsIGRhdGEsIGRMZW4pOworCQkvKiB3cml0ZURhdGEoKSBpbnRl cm5hbGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KKwkJY3MtPndyaXRlRGF0YShBSCwgY3MsIGRh dGEsIGRMZW4pOwogfQogCiAvKgogICogQ2FsbGVkIGJ5IHRoZSBhcmNoaXZlciB3aGVuIGEgZHVt cGVyJ3MgJ0RhdGFEdW1wZXInIHJvdXRpbmUgaGFzCiAgKiBmaW5pc2hlZC4KICAqCi0gKiBPcHRp b25hbC4KKyAqIE1hbmRhdG9yeS4KICAqLwogc3RhdGljIHZvaWQKIF9FbmREYXRhKEFyY2hpdmVI YW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCkBAIC0zMzMsNiArMzM1LDggQEAgX0VuZERhdGEoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29u dGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCUVuZENvbXByZXNzb3IoQUgsIGN0eC0+Y3MpOwor CWN0eC0+Y3MgPSBOVUxMOworCiAJLyogU2VuZCB0aGUgZW5kIG1hcmtlciAqLwogCVdyaXRlSW50 KEFILCAwKTsKIH0KQEAgLTM3Nyw3ICszODEsOSBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpB SCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJV3JpdGVJbnQoQUgsIG9pZCk7CiAKLQljdHgt PmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3Jp dGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAv KgpAQCAtNTY2LDcgKzU3MiwxMiBAQCBfUHJpbnRUb2NEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBU b2NFbnRyeSAqdGUpCiBzdGF0aWMgdm9pZAogX1ByaW50RGF0YShBcmNoaXZlSGFuZGxlICpBSCkK IHsKLQlSZWFkRGF0YUZyb21BcmNoaXZlKEFILCBBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3Rv bVJlYWRGdW5jKTsKKwlDb21wcmVzc29yU3RhdGUgKmNzOworCisJY3MgPSBBbGxvY2F0ZUNvbXBy ZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJX0N1c3RvbVJlYWRGdW5jLCBOVUxM KTsKKwljcy0+cmVhZERhdGEoQUgsIGNzKTsKKwlFbmRDb21wcmVzc29yKEFILCBjcyk7CiB9CiAK IHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVj dG9yeS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYwppbmRleCA2ODAw YzNjY2VlLi5hMmY4ODk5NWMwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2RpcmVjdG9yeS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMK QEAgLTUwLDkgKzUwLDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAkgKi8KIAljaGFyCSAgICpkaXJlY3Rv cnk7CiAKLQljZnAJCSAgICpkYXRhRkg7CQkJLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxlICov Ci0KLQljZnAJCSAgICpMT3NUb2NGSDsJCS8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8K KwlDb21wcmVzc0ZpbGVIYW5kbGUgKmRhdGFGSDsgLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxl ICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpMT3NUb2NGSDsgLyogZmlsZSBoYW5kbGUgZm9yIGJs b2JzLnRvYyAqLwogCVBhcmFsbGVsU3RhdGUgKnBzdGF0ZTsJCS8qIGZvciBwYXJhbGxlbCBiYWNr dXAgLyByZXN0b3JlICovCiB9IGxjbENvbnRleHQ7CiAKQEAgLTE5OCwxMSArMTk3LDExIEBAIElu aXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJewkJCQkJ CQkvKiBSZWFkIE1vZGUgKi8KIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKLQkJY2ZwCQkgICAq dG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAKIAkJc2V0RmlsZVBhdGgoQUgs IGZuYW1lLCAidG9jLmRhdCIpOwogCi0JCXRvY0ZIID0gY2ZvcGVuX3JlYWQoZm5hbWUsIFBHX0JJ TkFSWV9SKTsKKwkJdG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZm5hbWUs IFBHX0JJTkFSWV9SKTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCkBAIC0yMTgsNyArMjE3 LDcgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFIKQogCQlSZWFk VG9jKEFIKTsKIAogCQkvKiBOb3RoaW5nIGVsc2UgaW4gdGhlIGZpbGUsIHNvIGNsb3NlIGl0IGFn YWluLi4uICovCi0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRW5kQ29tcHJlc3NG aWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0Mg ZmlsZTogJW0iKTsKIAkJY3R4LT5kYXRhRkggPSBOVUxMOwogCX0KQEAgLTMyNyw5ICszMjYsOSBA QCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAKIAlzZXRGaWxl UGF0aChBSCwgZm5hbWUsIHRjdHgtPmZpbGVuYW1lKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVu X3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywKLQkJCQkJCQkgICBBSC0+Y29tcHJlc3Npb25fc3Bl Yyk7Ci0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJbml0Q29tcHJl c3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKworCWlmIChjdHgtPmRhdGFGSC0+ b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0K IApAQCAtMzQ2LDE1ICszNDUsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZURhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogewogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGRMZW4gPiAwICYmIGNm d3JpdGUoZGF0YSwgZExlbiwgY3R4LT5kYXRhRkgpICE9IGRMZW4pCisJaWYgKGRMZW4gPiAwICYm IENGSC0+d3JpdGVfZnVuYyhkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4pCiAJewogCQkvKiBpZiB3 cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICov CiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgt PmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0KIH0KIApAQCAt MzcwLDcgKzM3MCw3IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAkv KiBDbG9zZSB0aGUgZmlsZSAqLwotCWlmIChjZmNsb3NlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCWlm IChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY2xvc2UgZGF0YSBmaWxlOiAlbSIpOwogCiAJY3R4LT5kYXRhRkggPSBOVUxMOwpA QCAtMzg1LDI2ICszODUsMjUgQEAgX1ByaW50RmlsZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNo YXIgKmZpbGVuYW1lKQogCXNpemVfdAkJY250OwogCWNoYXIJICAgKmJ1ZjsKIAlzaXplX3QJCWJ1 ZmxlbjsKLQljZnAJCSAgICpjZnA7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKIAlpZiAo IWZpbGVuYW1lKQogCQlyZXR1cm47CiAKLQljZnAgPSBjZm9wZW5fcmVhZChmaWxlbmFtZSwgUEdf QklOQVJZX1IpOwotCi0JaWYgKCFjZnApCisJQ0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxl SGFuZGxlKGZpbGVuYW1lLCBQR19CSU5BUllfUik7CisJaWYgKCFDRkgpCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAKIAlidWYg PSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CiAJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKIAot CXdoaWxlICgoY250ID0gY2ZyZWFkKGJ1ZiwgYnVmbGVuLCBjZnApKSkKKwl3aGlsZSAoKGNudCA9 IENGSC0+cmVhZF9mdW5jKGJ1ZiwgYnVmbGVuLCBDRkgpKSkKIAl7CiAJCWFod3JpdGUoYnVmLCAx LCBjbnQsIEFIKTsKIAl9CiAKIAlmcmVlKGJ1Zik7Ci0JaWYgKGNmY2xvc2UoY2ZwKSAhPSAwKQor CWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIGRhdGEgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogfQogCkBAIC00MzUs NiArNDM0LDcgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CiAJT2lkCQkJb2lkOwog CWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNoYXIJCXRvY2ZuYW1lW01BWFBHUEFUSF07CiAJY2hhcgkJ bGluZVtNQVhQR1BBVEhdOwogCkBAIC00NDIsMTQgKzQ0MiwxNCBAQCBfTG9hZExPcyhBcmNoaXZl SGFuZGxlICpBSCkKIAogCXNldEZpbGVQYXRoKEFILCB0b2NmbmFtZSwgImJsb2JzLnRvYyIpOwog Ci0JY3R4LT5MT3NUb2NGSCA9IGNmb3Blbl9yZWFkKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CisJ Q0ZIID0gY3R4LT5MT3NUb2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSh0b2Nm bmFtZSwgUEdfQklOQVJZX1IpOwogCiAJaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKIAkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCIgZm9yIGlu cHV0OiAlbSIsCiAJCQkJIHRvY2ZuYW1lKTsKIAogCS8qIFJlYWQgdGhlIExPcyBUT0MgZmlsZSBs aW5lLWJ5LWxpbmUsIGFuZCBwcm9jZXNzIGVhY2ggTE8gKi8KLQl3aGlsZSAoKGNmZ2V0cyhjdHgt PkxPc1RvY0ZILCBsaW5lLCBNQVhQR1BBVEgpKSAhPSBOVUxMKQorCXdoaWxlICgoQ0ZILT5nZXRz X2Z1bmMobGluZSwgTUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJY2hhcgkJbG9mbmFt ZVtNQVhQR1BBVEggKyAxXTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwpAQCAtNDY0LDExICs0 NjQsMTEgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCV9QcmludEZpbGVEYXRhKEFI LCBwYXRoKTsKIAkJRW5kUmVzdG9yZUxPKEFILCBvaWQpOwogCX0KLQlpZiAoIWNmZW9mKGN0eC0+ TE9zVG9jRkgpKQorCWlmICghQ0ZILT5lb2ZfZnVuYyhDRkgpKQogCQlwZ19mYXRhbCgiZXJyb3Ig cmVhZGluZyBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIiwKIAkJCQkgdG9jZm5hbWUpOwog Ci0JaWYgKGNmY2xvc2UoY3R4LT5MT3NUb2NGSCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxl SGFuZGxlKGN0eC0+TE9zVG9jRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug bGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIjogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKQEAg LTQ4OCwxNSArNDg4LDE2IEBAIF9Xcml0ZUJ5dGUoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGlu dCBpKQogewogCXVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSBpOwogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoJmMs IDEsIGN0eC0+ZGF0YUZIKSAhPSAxKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoJmMsIDEsIENGSCkg IT0gMSkKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVt IGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVOT1NQ QzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAotCQkJ CSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1bmMo Q0ZIKSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC01MTIsOCArNTEzLDkgQEAgc3RhdGljIGludAog X1JlYWRCeXRlKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xD b250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4 LT5kYXRhRkg7CiAKLQlyZXR1cm4gY2ZnZXRjKGN0eC0+ZGF0YUZIKTsKKwlyZXR1cm4gQ0ZILT5n ZXRjX2Z1bmMoQ0ZIKTsKIH0KIAogLyoKQEAgLTUyNCwxNSArNTI2LDE2IEBAIHN0YXRpYyB2b2lk CiBfV3JpdGVCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxl bikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsK KwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwot CWlmIChjZndyaXRlKGJ1ZiwgbGVuLCBjdHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPndy aXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0 IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJy bm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRl IHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsK KwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTU0NSwxMiArNTQ4 LDEzIEBAIHN0YXRpYyB2b2lkCiBfUmVhZEJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgdm9pZCAqYnVm LCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5m b3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAkv KgotCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIGNm cmVhZCgpLCBzbyBoZXJlIHdlCisJICogSWYgdGhlcmUgd2FzIGFuIEkvTyBlcnJvciwgd2UgYWxy ZWFkeSBleGl0ZWQgaW4gcmVhZEYoKSwgc28gaGVyZSB3ZQogCSAqIGV4aXQgb24gc2hvcnQgcmVh ZHMuCiAJICovCi0JaWYgKGNmcmVhZChidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlp ZiAoQ0ZILT5yZWFkX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOwogfQogCkBAIC01NzMs NyArNTc3LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCWlmIChBSC0+ bW9kZSA9PSBhcmNoTW9kZVdyaXRlKQogCXsKLQkJY2ZwCQkgICAqdG9jRkg7CisJCUNvbXByZXNz RmlsZUhhbmRsZSAqdG9jRkg7CiAJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYyA9IHswfTsKIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKIApAQCAtNTg0LDggKzU4 OCw4IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyogVGhlIFRPQyBp cyBhbHdheXMgY3JlYXRlZCB1bmNvbXByZXNzZWQgKi8KIAkJY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCQl0b2NGSCA9IGNmb3Blbl93cml0ZShmbmFt ZSwgUEdfQklOQVJZX1csIGNvbXByZXNzaW9uX3NwZWMpOwotCQlpZiAodG9jRkggPT0gTlVMTCkK KwkJdG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCQlp ZiAodG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIHRvY0ZIKSkKIAkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUp OwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBAIC01OTgsNyArNjAyLDcgQEAgX0Nsb3NlQXJj aGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3JpdGVIZWFkKEFIKTsKIAkJQUgtPmZvcm1hdCA9 IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9 IDApCisJCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQlXcml0ZURhdGFDaHVua3MoQUgs IGN0eC0+cHN0YXRlKTsKIApAQCAtNjQ5LDggKzY1Myw4IEBAIF9TdGFydExPcyhBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJLyogVGhlIExPIFRPQyBmaWxlIGlzIG5ldmVyIGNv bXByZXNzZWQgKi8KIAljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9O X05PTkU7Ci0JY3R4LT5MT3NUb2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgY29tcHJl c3Npb25fc3BlYyk7Ci0JaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKKwljdHgtPkxPc1RvY0ZI ID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoY3R4LT5M T3NUb2NGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCAiYWIiLCBjdHgtPkxPc1RvY0ZIKSkKIAkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7 CiB9CiAKQEAgLTY2Nyw5ICs2NzEsOCBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9j RW50cnkgKnRlLCBPaWQgb2lkKQogCiAJc25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwgIiVzL2Js b2JfJXUuZGF0IiwgY3R4LT5kaXJlY3RvcnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Bl bl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQotCWlm IChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRl X2Z1bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02ODIs MTggKzY4NSwxOSBAQCBzdGF0aWMgdm9pZAogX0VuZExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUsIE9pZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikg QUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPkxPc1RvY0ZI OwogCWNoYXIJCWJ1Zls1MF07CiAJaW50CQkJbGVuOwogCi0JLyogQ2xvc2UgdGhlIExPIGRhdGEg ZmlsZSBpdHNlbGYgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKLQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBMTyBkYXRhIGZpbGU6ICVtIik7CisJLyogQ2xvc2UgdGhlIEJM T0IgZGF0YSBmaWxlIGl0c2VsZiAqLworCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5k YXRhRkgpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYiBkYXRhIGZpbGU6 ICVtIik7CiAJY3R4LT5kYXRhRkggPSBOVUxMOwogCiAJLyogcmVnaXN0ZXIgdGhlIExPIGluIGJs b2JzLnRvYyAqLwogCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSBibG9iXyV1 LmRhdFxuIiwgb2lkLCBvaWQpOwotCWlmIChjZndyaXRlKGJ1ZiwgbGVuLCBjdHgtPkxPc1RvY0ZI KSAhPSBsZW4pCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gTE9zIFRPQyBmaWxlIik7 CisJaWYgKENGSC0+d3JpdGVfZnVuYyhidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCisJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgd3JpdGUgdG8gYmxvYnMgVE9DIGZpbGUiKTsKIH0KIAogLyoKQEAgLTcwNiw4 ICs3MTAsOCBAQCBfRW5kTE9zKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB7CiAJ bGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKLQlpZiAo Y2ZjbG9zZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3Nl IExPcyBUT0MgZmlsZTogJW0iKTsKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+TE9z VG9jRkgpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYnMgVE9DIGZpbGU6 ICVtIik7CiAJY3R4LT5MT3NUb2NGSCA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwKaW5kZXggMmVlZWYyYTQ3OC4uZjNiYTkyNjMyMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwKQEAgLTk0LDcgKzk0LDcgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PiBb CiAJCQkJJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9jdXN0 b20uZHVtcCIsCiAJCQldLAotCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IDEvLAorCQkJ ZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IGd6aXAvLAogCQkJbmFtZSAgICAgPT4gJ2RhdGEg Y29udGVudCBpcyBnemlwLWNvbXByZXNzZWQnCiAJCX0sCiAJfSwKQEAgLTIzOSw4ICsyMzksOCBA QCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUn LCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVsdHNfY3VzdG9tX2Zvcm1hdC5kdW1wIiwgXSwKIAkJCWV4 cGVjdGVkID0+ICRzdXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJ cXIvQ29tcHJlc3Npb246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0Nv bXByZXNzaW9uOiBub25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXBy ZXNzZWQgYnkgZGVmYXVsdCBpZiBhdmFpbGFibGUnLAogCQl9LAogCX0sCkBAIC0yNjQsOCArMjY0 LDggQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0 b3JlJywgJy1sJywgIiR0ZW1wZGlyL2RlZmF1bHRzX2Rpcl9mb3JtYXQiLCBdLAogCQkJZXhwZWN0 ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9D b21wcmVzc2lvbjogMC8sCisJCQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJl c3Npb246IG5vbmUvLAogCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3Nl ZCBieSBkZWZhdWx0JywKIAkJfSwKIAkJZ2xvYl9wYXR0ZXJucyA9PiBbCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9j cGx1c3BsdXNjaGVjawppbmRleCBlNTJmZTlmNTA5Li5kYThlNDg2MWY0IDEwMDc1NQotLS0gYS9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCisrKyBiL3NyYy90b29scy9wZ2luY2x1 ZGUvY3BsdXNwbHVzY2hlY2sKQEAgLTE1MCw2ICsxNTAsNyBAQCBkbwogCiAJIyBwZ19kdW1wIGlz IG5vdCBDKystY2xlYW4gYmVjYXVzZSBpdCB1c2VzICJwdWJsaWMiIGFuZCAibmFtZXNwYWNlIgog CSMgYXMgZmllbGQgbmFtZXMsIHdoaWNoIGlzIHVuZm9ydHVuYXRlIGJ1dCB3ZSB3b24ndCBjaGFu Z2UgaXQgbm93LgorCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgg JiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAm JiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNv bnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o ICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIzYmFmZWM1ZjcuLjg0 MDE5MWQ2ODAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MjgsNiArNDI4LDcgQEAg Q29tcGlsZWRFeHByU3RhdGUKIENvbXBvc2l0ZUlPRGF0YQogQ29tcG9zaXRlVHlwZVN0bXQKIENv bXBvdW5kQWZmaXhGbGFnCitDb21wcmVzc0ZpbGVIYW5kbGUKIENvbXByZXNzaW9uTG9jYXRpb24K IENvbXByZXNzb3JTdGF0ZQogQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0CkBAIC0xMDM0LDYgKzEw MzUsNyBAQCBHdWNTdGFjawogR3VjU3RhY2tTdGF0ZQogR3VjU3RyaW5nQXNzaWduSG9vawogR3Vj U3RyaW5nQ2hlY2tIb29rCitHemlwQ29tcHJlc3NvclN0YXRlCiBIQU5ETEUKIEhBU0hBQ1RJT04K IEhBU0hCVUNLRVQKLS0gCjIuMzQuMQoK --b1_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw Content-Type: text/x-patch; name=v21-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v21-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSA0NGEzODUwNDIzODg3ZDk2MjMzMzZjZjYyM2IyZWU3MDJkODkxNDMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMTggSmFuIDIwMjMgMTg6MjA6NDMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MSAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgMzgyICsrKysrKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyB8IDEyOCArKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaCB8ICAyNyArLQogNCBmaWxlcyBjaGFuZ2VkLCAzMTYgaW5zZXJ0aW9u cygrKSwgMjIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggN2EyYzgwYmJj NC4uNDRkOWIwZDRhNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU2LDYgKzU2LDEwIEBACiAj aW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAor I2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCiAvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqIENvbXByZXNzb3IgQVBJCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KQEAgLTEyOCwxNSArMTMyLDIyIEBAIFJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRs ZSAqQUgsCiAJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywKIAkJCQkJUmVhZEZ1bmMgcmVhZEYpCiB7Ci0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVOb25l KEFILCByZWFkRik7Ci0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBS RVNTSU9OX0daSVApCisJc3dpdGNoIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7CisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFI LCByZWFkRik7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVm IEhBVkVfTElCWgotCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOworCQkJUmVh ZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKICNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlz IGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7CisJ CQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGgg JXMiLCAiZ3ppcCIpOwogI2VuZGlmCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFs KCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0X2NvbXByZXNz X2FsZ29yaXRobV9uYW1lKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7CisJCQlicmVhazsK IAl9CiB9CiAKQEAgLTE1OSwxMCArMTcwLDkgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05P TkU6CiAJCQlXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExlbik7CiAJCQli cmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwot CQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVz c2lvbiBtZXRob2QiKTsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNz aW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGNz LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwogCQkJYnJlYWs7CiAJfQogfQpAQCAtMTcz LDEwICsxODMsMjQgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcykKIHsKKwlzd2l0Y2ggKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCWJyZWFrOworCQlj YXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNzLT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlFbmRDb21w cmVzc29yWmxpYihBSCwgY3MpOworCQkJRW5kQ29tcHJlc3NvclpsaWIoQUgsIGNzKTsKKyNlbHNl CisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdp dGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0 X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkp OworCQkJYnJlYWs7CisJfQorCiAJZnJlZShjcyk7CiB9CiAKQEAgLTM5MSwxMCArNDE1LDEzIEBA IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsCiAgKi8KIHN0cnVjdCBjZnAKIHsKLQlGSUxFCSAgICp1bmNvbXByZXNzZWRmcDsKKwlw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisJdW5pb24geworCQlG SUxFICAgKmZwOwogI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJY29tcHJlc3NlZGZwOworCQln ekZpbGUJZ3pmcDsKICNlbmRpZgorCX0gZmlsZTsKIH07CiAKICNpZmRlZiBIQVZFX0xJQloKQEAg LTQ5MCwxMjcgKzUxNywyMDggQEAgY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsCiB9CiAKIC8qCi0gKiBPcGVucyBmaWxlICdwYXRoJyBpbiAnbW9kZScuIElm IGNvbXByZXNzaW9uIGlzIEdaSVAsIHRoZSBmaWxlCi0gKiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6 b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3BlbigpLgorICogVGhpcyBpcyB0aGUgd29y a2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9y CisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlw dG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBp cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCisgKiBUaGUgY2FsbGVyIG11 c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0 aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0 aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1jZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQorc3RhdGljIGNmcCAqCitjZm9wZW5faW50ZXJuYWwoY29u c3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKIAljZnAJCSAgICpmcCA9IHBnX21h bGxvYyhzaXplb2YoY2ZwKSk7CiAKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0g UEdfQ09NUFJFU1NJT05fR1pJUCkKKwlmcC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9u X3NwZWM7CisKKwlzd2l0Y2ggKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKLSNpZmRl ZiBIQVZFX0xJQloKLQkJaWYgKGNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NP TVBSRVNTSU9OKQotCQl7Ci0JCQkvKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBs ZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdCAqLwotCQkJY2hhcgkJbW9kZV9jb21wcmVzc2lv blszMl07CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCWlmIChmZCA+PSAwKQorCQkJ CWZwLT5maWxlLmZwID0gZmRvcGVuKGZkLCBtb2RlKTsKKwkJCWVsc2UKKwkJCQlmcC0+ZmlsZS5m cCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQkJaWYgKGZwLT5maWxlLmZwID09IE5VTEwpCisJCQl7 CisJCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKKwkJCQlmcCA9IE5VTEw7CisJCQl9CiAKLQkJCXNu cHJpbnRmKG1vZGVfY29tcHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQi LAotCQkJCQkgbW9kZSwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCQlmcC0+Y29tcHJlc3Nl ZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQl9Ci0JCWVsc2UKLQkJewot CQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICov Ci0JCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwotCQl9CisJCQlicmVh azsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElCWgorCQkJaWYg KGNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQorCQkJewor CQkJCS8qCisJCQkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNv IHRlbGwgemxpYiB0byB1c2UKKwkJCQkgKiBpdAorCQkJCSAqLworCQkJCWNoYXIJCW1vZGVfY29t cHJlc3Npb25bMzJdOworCisJCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1v ZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCisJCQkJCQkgbW9kZSwgY29tcHJlc3Npb25fc3BlYy5s ZXZlbCk7CisJCQkJaWYgKGZkID49IDApCisJCQkJCWZwLT5maWxlLmd6ZnAgPSBnemRvcGVuKGZk LCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCQllbHNlCisJCQkJCWZwLT5maWxlLmd6ZnAgPSBnem9w ZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyog ZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCisJCQkJ aWYgKGZkID49IDApCisJCQkJCWZwLT5maWxlLmd6ZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKKwkJ CQllbHNlCisJCQkJCWZwLT5maWxlLmd6ZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7CisJCQl9CiAK LQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0g TlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQor CQkJaWYgKGZwLT5maWxlLmd6ZnAgPT0gTlVMTCkKKwkJCXsKKwkJCQlmcmVlX2tlZXBfZXJybm8o ZnApOworCQkJCWZwID0gTlVMTDsKKwkJCX0KICNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxk IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYK LQl9Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJZnAtPmNvbXByZXNzZWRmcCA9IE5V TEw7CisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLCAiZ3ppcCIpOwogI2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVu KHBhdGgsIG1vZGUpOwotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJ CWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIs CisJCQkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0pKTsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBmcDsKIH0KIAorLyoKKyAqIE9wZW5z IGZpbGUgJ3BhdGgnIGluICdtb2RlJyBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5lZCBpbgorICog Y29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSBjb21wcmVz c2lvbgorICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICoKKyAqIE9uIGZh aWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqLworY2Zw ICoKK2Nmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAorCSAgIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlyZXR1cm4g Y2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKK30KKwor LyoKKyAqIEFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2Ny aXB0b3IsIGluICdtb2RlJworICogYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4gY29tcHJl c3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0CisgKiB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Np b24gaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICoKKyAqIE9uIGZhaWx1cmUs IHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqLworY2ZwICoKK2Nm ZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQljb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChO VUxMLCBmZCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Cit9CiAKIGludAogY2ZyZWFkKHZvaWQg KnB0ciwgaW50IHNpemUsIGNmcCAqZnApCiB7Ci0JaW50CQkJcmV0OworCWludAkJCXJldCA9IDA7 CiAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIEhBVkVfTElCWgotCWlm IChmcC0+Y29tcHJlc3NlZGZwKQorCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtKQogCXsKLQkJcmV0ID0gZ3pyZWFkKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0J CWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZnAtPmNvbXByZXNzZWRmcCkpCi0JCXsKLQkJCWlu dAkJCWVycm51bTsKLQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNz ZWRmcCwgJmVycm51bSk7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZy ZWFkKHB0ciwgMSwgc2l6ZSwgZnAtPmZpbGUuZnApOworCQkJaWYgKHJldCAhPSBzaXplICYmICFm ZW9mKGZwLT5maWxlLmZwKSkKKwkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZpbGUuZnApOwogCi0J CQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBl cnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9Ci0J ZWxzZQorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZF X0xJQloKKwkJCXJldCA9IGd6cmVhZChmcC0+ZmlsZS5nemZwLCBwdHIsIHNpemUpOworCQkJaWYg KHJldCAhPSBzaXplICYmICFnemVvZihmcC0+ZmlsZS5nemZwKSkKKwkJCXsKKwkJCQlpbnQJCQll cnJudW07CisJCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+ZmlsZS5nemZwLCAm ZXJybnVtKTsKKworCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 ICVzIiwKKwkJCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1z Zyk7CisJCQl9CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgotCXsKLQkJcmV0 ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9 IHNpemUgJiYgIWZlb2YoZnAtPnVuY29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChm cC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgi aW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wiIiwKKwkJCQkJIGdldF9jb21wcmVzc19h bGdvcml0aG1fbmFtZShmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKKwkJCWJyZWFr OwogCX0KKwogCXJldHVybiByZXQ7CiB9CiAKIGludAogY2Z3cml0ZShjb25zdCB2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKQogeworCWludAkJCXJldCA9IDA7CisKKwlzd2l0Y2ggKGZwLT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKKwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9O RToKKwkJCXJldCA9IGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT5maWxlLmZwKTsKKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZw LT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnendyaXRlKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwg c2l6ZSk7Ci0JZWxzZQorCQkJcmV0ID0gZ3p3cml0ZShmcC0+ZmlsZS5nemZwLCBwdHIsIHNpemUp OworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJl c3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShw dHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkg Z2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSkpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogaW50CiBjZmdldGMoY2Zw ICpmcCkKIHsKLQlpbnQJCQlyZXQ7CisJaW50CQkJcmV0ID0gMDsKIAotI2lmZGVmIEhBVkVfTElC WgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5jb21wcmVzc2VkZnApOwotCQlpZiAo cmV0ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJCQlw Z19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVy cm5vKSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTk9ORToKKwkJCXJldCA9IGZnZXRjKGZwLT5maWxlLmZwKTsKKwkJCWlmIChyZXQgPT0gRU9G KQorCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZmlsZS5mcCk7CisKKwkJCWJyZWFrOworCQljYXNl IFBHX0NPTVBSRVNTSU9OX0daSVA6CisjaWZkZWYgSEFWRV9MSUJaCisJCQlyZXQgPSBnemdldGMo ZnAtPmZpbGUuZ3pmcCk7CisJCQlpZiAocmV0ID09IEVPRikKKwkJCXsKKwkJCQlpZiAoIWd6ZW9m KGZwLT5maWxlLmd6ZnApKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1 dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJfQorI2Vs c2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24g d2l0aCAlcyIsCisJCQkJCSJnemlwIik7CiAjZW5kaWYKLQl7Ci0JCXJldCA9IGZnZXRjKGZwLT51 bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgPT0gRU9GKQotCQkJUkVBRF9FUlJPUl9FWElUKGZw LT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0X2NvbXByZXNzX2Fs Z29yaXRobV9uYW1lKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOworCQkJYnJlYWs7 CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTYxOSw2NSArNzI3LDExMyBAQCBjZmdldGMoY2ZwICpm cCkKIGNoYXIgKgogY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKKwljaGFy CSAgICpyZXQgPSBOVUxMOworCisJc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0pCisJeworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlyZXQgPSBmZ2V0cyhidWYs IGxlbiwgZnAtPmZpbGUuZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9H WklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4g Z3pnZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVuKTsKLQllbHNlCisJCQlyZXQgPSBnemdl dHMoZnAtPmZpbGUuZ3pmcCwgYnVmLCBsZW4pOworI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1 aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJnemlwIik7 CiAjZW5kaWYKLQkJcmV0dXJuIGZnZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21wcmVzc2VkZnApOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBt ZXRob2QgXCIlc1wiIiwKKwkJCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShmcC0+Y29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7 CiB9CiAKIGludAogY2ZjbG9zZShjZnAgKmZwKQogewotCWludAkJCXJlc3VsdDsKKwlpbnQJCQly ZXQgPSAwOwogCiAJaWYgKGZwID09IE5VTEwpCiAJewogCQllcnJubyA9IEVCQURGOwogCQlyZXR1 cm4gRU9GOwogCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwor CXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKLQkJcmVzdWx0ID0g Z3pjbG9zZShmcC0+Y29tcHJlc3NlZGZwKTsKLQkJZnAtPmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0J fQotCWVsc2UKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmNsb3NlKGZw LT5maWxlLmZwKTsKKwkJCWZwLT5maWxlLmZwID0gTlVMTDsKKworCQkJYnJlYWs7CisJCWNhc2Ug UEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6Y2xvc2Uo ZnAtPmZpbGUuZ3pmcCk7CisJCQlmcC0+ZmlsZS5nemZwID0gTlVMTDsKKyNlbHNlCisJCQlwZ19m YXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAor CQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JewotCQlyZXN1bHQgPSBmY2xvc2UoZnAtPnVuY29tcHJl c3NlZGZwKTsKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIsCisJ CQkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtKSk7CisJCQlicmVhazsKIAl9CisKIAlmcmVlX2tlZXBfZXJybm8oZnApOwogCi0JcmV0 dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmZW9mKGNmcCAqZnApCiB7CisJ aW50CQkJcmV0ID0gMDsKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht KQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmVvZihmcC0+Zmls ZS5mcCk7CisKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZkZWYg SEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnemVvZihmcC0+Y29t cHJlc3NlZGZwKTsKLQllbHNlCisJCQlyZXQgPSBnemVvZihmcC0+ZmlsZS5nemZwKTsKKyNlbHNl CisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdp dGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JCXJldHVybiBmZW9mKGZwLT51bmNvbXBy ZXNzZWRmcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNv bXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9u YW1lKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOworCQkJYnJlYWs7CisJfQorCisJ cmV0dXJuIHJldDsKIH0KIAogY29uc3QgY2hhciAqCiBnZXRfY2ZwX2Vycm9yKGNmcCAqZnApCiB7 Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCisJaWYgKGZwLT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCXsKKyNpZmRl ZiBIQVZFX0xJQloKIAkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVy cm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCQljb25zdCBjaGFyICplcnJtc2cgPSBn emVycm9yKGZwLT5maWxlLmd6ZnAsICZlcnJudW0pOwogCiAJCWlmIChlcnJudW0gIT0gWl9FUlJO TykKIAkJCXJldHVybiBlcnJtc2c7Ci0JfQorI2Vsc2UKKwkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKICNlbmRpZgor CX0KKwogCXJldHVybiBzdHJlcnJvcihlcnJubyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKaW5k ZXggYTQyOWRjNDc4OS4uYTZjZGY1ODhkZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKQEAgLTU0LDYg KzU0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgY2ZwIGNmcDsKIAogZXh0ZXJuIGNmcCAqY2ZvcGVuKGNv bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQkJICAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiBjZnAgKmNmZG9wZW4o aW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwogZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7CiBleHRlcm4gY2ZwICpjZm9wZW5fd3JpdGUo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAkJCQkJCSBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jCmluZGV4IDdmN2EwZjFjZTcuLmZiOTQzMTdhZDkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNlbmRpZgogCiAjaW5jbHVk ZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAi ZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVk ZSAibGliL3N0cmluZ2luZm8uaCIKQEAgLTQzLDEzICs0NCw2IEBACiAjZGVmaW5lIFRFWFRfRFVN UF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIKICNkZWZp bmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3Rl ciBkdW1wXG4tLVxuXG4iCiAKLS8qIHN0YXRlIG5lZWRlZCB0byBzYXZlL3Jlc3RvcmUgYW4gYXJj aGl2ZSdzIG91dHB1dCB0YXJnZXQgKi8KLXR5cGVkZWYgc3RydWN0IF9vdXRwdXRDb250ZXh0Ci17 Ci0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7Ci19IE91dHB1dENvbnRleHQ7Ci0KIC8qCiAg KiBTdGF0ZSBmb3IgdHJhY2tpbmcgVG9jRW50cnlzIHRoYXQgYXJlIHJlYWR5IHRvIHByb2Nlc3Mg ZHVyaW5nIGEgcGFyYWxsZWwKICAqIHJlc3RvcmUuICAoVGhpcyB1c2VkIHRvIGJlIGEgbGlzdCwg YW5kIHdlIHN0aWxsIGNhbGwgaXQgdGhhdCwgdGhvdWdoIG5vdwpAQCAtMTAxLDggKzk1LDggQEAg c3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQg ZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3Qg dGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKLXN0YXRpYyBPdXRwdXRDb250ZXh0IFNhdmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgpOwotc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg T3V0cHV0Q29udGV4dCBzYXZlZENvbnRleHQpOworc3RhdGljIGNmcCAqU2F2ZU91dHB1dChBcmNo aXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRyeShB cmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0YXRp YyB2b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAg LTI3NywxMSArMjcxLDggQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlBSC0+Q2xvc2VQ dHIoQUgpOwogCiAJLyogQ2xvc2UgdGhlIG91dHB1dCAqLwotCWVycm5vID0gMDsJCQkJCS8qIGlu IGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVz ID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UgaWYgKEFILT5PRiAhPSBzdGRvdXQpCi0JCXJlcyA9 IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAK IAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6 ICVtIik7CkBAIC0zNjIsOCArMzUzLDkgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQog CUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CisJYm9v bAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7Ci0JT3V0cHV0Q29udGV4 dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5H OwogCkBAIC0zOTEsMTcgKzM4MywyNCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJ LyoKIAkgKiBNYWtlIHN1cmUgd2Ugd29uJ3QgbmVlZCAoZGUpY29tcHJlc3Npb24gd2UgaGF2ZW4n dCBnb3QKIAkgKi8KLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQICYmCisJc3VwcG9ydHNfY29tcHJlc3Np b24gPSB0cnVlOworCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09N UFJFU1NJT05fTk9ORSAmJgorCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fR1pJUCAmJgogCQlBSC0+UHJpbnRUb2NEYXRhUHRyICE9IE5VTEwpCiAJewog CQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0gQUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkK IAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRlLT5yZXFzICYgUkVRX0RBVEEpICE9IDAp Ci0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChj b21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOworCQkJewor I2lmbmRlZiBIQVZFX0xJQloKKwkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFs c2U7CisjZW5kaWYKKwkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Npb24gPT0gZmFsc2UpCisJCQkJ CXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJl c3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCX0KIAkJfQog CX0KLSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJlIGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFz c3VtZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCByZXN0b3JlLgpAQCAtMTEyOCw3ICsxMTI3LDcg QEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2Vj dGlvbgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAlj b25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKQEAgLTE1MDMsNTgg KzE1MDIsMzIgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKQogewotCWludAkJCWZuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50 CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUs ICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7 CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlm IChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9 CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhw bGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAo Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0J CWNoYXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1v ZGUgPSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBE b24ndCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0JCXNwcmludGYoZm1v ZGUsICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCWlmIChmbiA+PSAwKQotCQkJ QUgtPk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6 b3BlbihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0g MCkKKwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsK IAllbHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUg PT0gYXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZk b3BlbihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAw KQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0J CQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pP dXQgPSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lv bl9zcGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsKQEAgLTE1NjUsMzMgKzE1MzgsMjQgQEAgU2V0 T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAl9CiB9CiAK LXN0YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMgY2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBzYXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0J c2F2Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBB SC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBPdXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJ CQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0 KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9G KTsKKwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAw KQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgt Pmd6T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0OwotCUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsK KwlBSC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAogCkBAIC0xNzE1LDIyICsxNjc5LDE3IEBAIGFo d3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZl SGFuZGxlICpBSCkKIAogCQlieXRlc193cml0dGVuID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNl IGlmIChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1l bWIsIEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRl biA9IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICog SWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdy ZSBjb25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYg KFJlc3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRC dWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNl Ci0JewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVj dCB0byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERC LgotCQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIoQUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4 ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUg KiBubWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBu bWVtYiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQlieXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIs IHNpemUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBu bWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIyMTksNiArMjE3OCw3IEBAIF9hbGxvY0FI KGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVw V29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdf bG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNw ZWMgPyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIyNzIsOCArMjIzMiw4IEBAIF9h bGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAlt ZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNxbHBhcnNlKSk7CiAKIAkvKiBP cGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxlICovCi0J QUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJb3V0X2NvbXByZXNzX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxl bm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nfc3BlYyk7CiAKIAkvKgogCSAq IE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9u LXRleHQgZmlsZXMsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggZjcyNDQ2 ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAt MzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JCVUZTSVpFIDE2Mzg0CiAKLSNpZmRlZiBIQVZF X0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xPU0UoZmgpIGd6Y2xvc2UoZmgp Ci0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIGd6d3JpdGUoZmgsIHAsIChuKSAqIChzKSkK LSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBnenJlYWQoZmgsIHAsIChuKSAqIChzKSkKLSNk ZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vsc2UKLSNkZWZpbmUgR1pDTE9TRShmaCkgZmNs b3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMsIG4sIGZoKSAoZndyaXRlKHAsIHMsIG4sIGZo KSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBmcmVhZChwLCBzLCBuLCBmaCkK LSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0vKiB0aGlzIGlzIGp1c3QgdGhlIHJlZGVmaW5p dGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9O ICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3RyZWFtCi17Ci0Jdm9pZAkgICAqbmV4dF9pbjsK LQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJCWF2YWlsX2luOwotCXNpemVfdAkJYXZhaWxf b3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFtcDsKLSNlbmRpZgot CiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVmaW5lIEJMS19EQVRBIDEKICNkZWZpbmUgQkxL X0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAogCWNo YXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmlsZSBTcGVjICovCiAJRklMRQkgICAqRkg7CQkJ CS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsZSAqLwotCXZvaWQJICAgKk9GOwotCWludAkJ CWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJdm9pZAkgICAqT0Y7CQkJCS8qIE91dHB1dCBm aWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBIZWFkZXIgb2YgY2lyY3VsYXIg bGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJCXRvY0NvdW50OwkJLyogTnVtYmVyIG9mIFRP QyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw Content-Type: text/x-patch; name=v21-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v21-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSA4NTRmMmVjNTAwMzAwZGZmZjhhZDdlZGEwNDMwMGE4M2FkZmQzZjQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMTggSmFuIDIwMjMgMTg6MTU6NDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MSAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKSwgaXQgaGFzIGJlZW4KaW1wbGVtZW50ZWQgbG9jYWx5LgotLS0KIGRvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcC5zZ21sICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1wL01h a2VmaWxlICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5j ICAgICAgICB8ICAyMiArLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jICAgICAgIHwg NjE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5oICAgICAgIHwgIDIyICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAg ICB8ICAgOCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgIDE0ICst CiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICB8ICA4MiArKystCiBzcmMvdG9vbHMvcGdpbmNs dWRlL2NwbHVzcGx1c2NoZWNrICAgfCAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAxICsKIDExIGZpbGVzIGNoYW5nZWQsIDc3MCBpbnNlcnRpb25zKCspLCAx OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3ZTEuLjQ5ZDIxODkwNWYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGlyZWN0 b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAgIHN0 YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNzZWQg YXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGljYXRp b24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlzIGNv bXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAgICAg ICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0 aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9h cHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5 IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5kIGFs c28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAg PC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC02NTQsNyArNjU1LDcgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZnkg dGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRvIHVz ZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBjYW4gYmUgc2V0IHRvIDxsaXRlcmFs Pmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZvciBu byBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0ZXJh bD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCiAgICAgICAgIEEgY29tcHJlc3Np b24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQuICBJZiB0aGUKICAg ICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIGNvbXBy ZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpAQCAtNjc1LDggKzY3Niw4IEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2Vn bWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8bGl0 ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBv dXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNl cyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFzIHRo b3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRp b24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAg ICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2Fw cGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47IGJ1 dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAgICAg IDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA3YTE5ZjVkNjE3Li5h MTQwMTM3N2FiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9IC4u Ly4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIGV4 cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1CiAK IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBAIC0y NSw2ICsyNiw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2Zl X3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogT0JKUyA9IFwKIAkkKFdJTjMyUkVT KSBcCiAJY29tcHJlc3NfZ3ppcC5vIFwKKwljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3NfaW8u byBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBkNjAxMTFiMmI4Li45Njk0N2NkM2VhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCiAjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTE0Niw2ICsxNDcsOSBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQljYXNlIFBHX0NPTVBSRVNT SU9OX0daSVA6CiAJCQlJbml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwog CQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJSW5pdENvbXByZXNzb3JM WjQoY3MsIGNvbXByZXNzaW9uX3NwZWMpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwZ19m YXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wiIiwKIAkJCQkJIGdldF9jb21w cmVzc19hbGdvcml0aG1fbmFtZShjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwpAQCAtMzM5 LDYgKzM0Myw5IEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6 CiAJCQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsK KwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlJbml0Q29tcHJlc3NMWjQoQ0ZILCBjb21w cmVzc2lvbl9zcGVjKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFs aWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIsCiAJCQkJCSBnZXRfY29tcHJlc3NfYWxnb3Jp dGhtX25hbWUoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKQEAgLTM1Nyw3ICszNjQsNyBA QCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYykKICAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Np b24gd2lsbCBiZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKICAqIHRvIG9wZW4gdGhl IGZpbGUgYXQgJ3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29t cHJlc3Npb24KICAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRo aXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvcgotICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0 IG9yZGVyLgorICogImZvby5neiIgb3IgImZvby5sejQiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4K ICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJy bm8uCiAgKi8KQEAgLTM5NSw2ICs0MDIsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3RzKQog CQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJ fQorI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9r ZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOwor CQkJZXhpc3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJ CQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0K ICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmM5N2UxNjE4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw2MTggQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGNvbXByZXNzX2x6NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3 cml0ZSBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0Cisj aW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4KKworI2RlZmluZSBMWjRfT1VU X1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJKDE2ICogMTAyNCkKKworLyoK KyAqIExaNEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVkIGluIHYxLjcuNSBvZiB0aGUg bGlicmFyeS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRpb25zIHdpdGggYSBsZXNzZXIg dmVyc2lvbi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpFX01BWAorI2RlZmluZSBMWjRG X0hFQURFUl9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVk ZWYgc3RydWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJICAgKm91dGJ1ZjsKKwlzaXpl X3QJCW91dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5l cyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkIFJl YWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2 ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRfc3Ry ZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAgICpk ZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBMWjRf SU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxsb2Mo YnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVMTCwg MCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsK KwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRTdHJl YW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJCWNu dCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9CisK KwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAorV3Jp dGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXByZXNz b3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7 CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWlyZWRzaXplID0gTFo0X2NvbXBy ZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4gTFo0Y3MtPm91dHNpemUpCisJ eworCQlMWjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+b3V0YnVmLCByZXF1aXJlZHNp emUpOworCQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsKKwl9CisKKwljb21wcmVzc2Vk ID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91dGJ1ZiwKKwkJCQkJCQkJCSAg ZExlbiwgTFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNzZWQgPD0gMCkKKwkJcGdfZmF0 YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJY3MtPndyaXRlRihBSCwgTFo0 Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29y TFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUxaNENvbXBy ZXNzb3JTdGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21wcmVzc29yU3RhdGUgKikgY3Mt PnByaXZhdGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19mcmVlKExaNGNzLT5vdXRidWYp OworCQlwZ19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorfQor CisKKy8qIFB1YmxpYyByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJ L08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+cmVh ZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEgPSBXcml0ZURh dGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisKKwljcy0+Y29t cHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKiBXaWxsIGJlIGxhenkgaW5p dCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21hbGxvYzAoc2l6ZW9mKExaNENvbXByZXNz b3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZp bGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU3RhdGUgbmVl ZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5nIHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUg QVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxlCit7CisJRklMRQkgICAqZnA7CisKKwlM WjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90IGN0 eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QgZHR4OworCisJYm9vbAkJaW5pdGVkOwor CWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQlidWZsZW47CisJY2hhcgkgICAqYnVmZmVy OworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAkJb3ZlcmZsb3dsZW47CisJ Y2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJCWVycmNvZGU7Cit9CQkJTFo0RmlsZTsK KworLyoKKyAqIExaNCBlcXVpdmFsZW50IHRvIGZlb2YoKSBvciBnemVvZigpLiBUaGUgZW5kIG9m IGZpbGUKKyAqIGlzIHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gZGVjb21wcmVzc2VkIG91dHB1dCBp biB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciBhbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFj aGVkLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CisJcmV0dXJuIGZzLT5vdmVyZmxvd2xlbiA9PSAwICYmIGZlb2YoZnMtPmZwKTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgorTFo0RmlsZV9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsK Kwljb25zdCBjaGFyICplcnJtc2c7CisKKwlpZiAoTFo0Rl9pc0Vycm9yKGZzLT5lcnJjb2RlKSkK KwkJZXJybXNnID0gTFo0Rl9nZXRFcnJvck5hbWUoZnMtPmVycmNvZGUpOworCWVsc2UKKwkJZXJy bXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworLyoKKyAqIFBy ZXBhcmUgYW4gYWxyZWFkeSBhbGxvYydlZCBMWjRGaWxlIHN0cnVjdCBmb3Igc3Vic2VxdWVudCBj YWxscy4KKyAqCisgKiBJdCBjcmVhdGVzIHRoZSBuZXNzYXJ5IGNvbnRleHRzIGZvciB0aGUgb3Bl cmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0IGFkZGl0aW9uYWxseSB3cml0ZXMgdGhl IExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZp bGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBib29sIGNvbXByZXNzaW5nKQoreworCXNp emVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQpCisJCXJldHVybiAwOworCisJZnMtPmNv bXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmluaXRlZCA9IHRydWU7CisKKwlpZiAoZnMt PmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9IExaNEZfY29tcHJlc3NCb3VuZChMWjRf SU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+YnVmbGVuIDwgTFo0Rl9IRUFERVJfU0la RV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFERVJfU0laRV9NQVg7CisKKwkJc3RhdHVz ID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQoJmZzLT5jdHgsIExaNEZfVkVSU0lPTik7 CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0 dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1 Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NCZWdpbihmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVmcyk7CisKKwkJaWYgKExaNEZfaXNFcnJv cihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOwor CQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkgIT0gc3Rh dHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsKKwkJ fQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJlc3Npb25Db250 ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykp CisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlm cy0+YnVmbGVuID0gc2l6ZSA+IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7CisJ CWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93YWxs b2NsZW4gPSBmcy0+YnVmbGVuOworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMtPm92 ZXJmbG93YWxsb2NsZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVybiAw OworfQorCisvKgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhl IG92ZXJmbG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlmIGF2 YWlsYWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJzdAor ICogb2NjdXJhbmNlIG9mIHRoZSBuZXcgbGluZSBjaGFyIHByaW9yIHRvICdzaXplJyBieXRlcy4K KyAqCisgKiBBbnkgdW5yZWFkIGNvbnRlbnQgaW4gdGhlIG92ZXJmbG93IGJ1ZmZlciwgaXMgbW92 ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX292ZXJm bG93KExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sK KwljaGFyCSAgICpwOworCWludAkJCXJlYWRsZW4gPSAwOworCisJaWYgKGZzLT5vdmVyZmxvd2xl biA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPj0gc2l6ZSkKKwkJ cmVhZGxlbiA9IHNpemU7CisJZWxzZQorCQlyZWFkbGVuID0gZnMtPm92ZXJmbG93bGVuOworCisJ aWYgKGVvbF9mbGFnICYmIChwID0gbWVtY2hyKGZzLT5vdmVyZmxvd2J1ZiwgJ1xuJywgcmVhZGxl bikpKQorCQkvKiBJbmNsdWRlIHRoZSBsaW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKwkJcmVhZGxl biA9IHAgLSBmcy0+b3ZlcmZsb3didWYgKyAxOworCisJbWVtY3B5KHB0ciwgZnMtPm92ZXJmbG93 YnVmLCByZWFkbGVuKTsKKwlmcy0+b3ZlcmZsb3dsZW4gLT0gcmVhZGxlbjsKKworCWlmIChmcy0+ b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1tb3ZlKGZzLT5vdmVyZmxvd2J1ZiwgZnMtPm92ZXJmbG93 YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJmbG93bGVuKTsKKworCXJldHVybiByZWFkbGVuOworfQor CisvKgorICogVGhlIHdvcmtob3JzZSBmb3IgcmVhZGluZyBkZWNvbXByZXNzZWQgY29udGVudCBv dXQgb2YgYW4gTFo0IGNvbXByZXNzZWQKKyAqIHN0cmVhbS4KKyAqCisgKiBJdCB3aWxsIHJlYWQg dXAgdG8gJ3B0cnNpemUnIGRlY29tcHJlc3NlZCBjb250ZW50LCBvciB1cCB0byB0aGUgbmV3IGxp bmUgY2hhcgorICogaWYgZm91bmQgZmlyc3Qgd2hlbiB0aGUgZW9sX2ZsYWcgaXMgc2V0LiBJdCBp cyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQKKyAqIG91dHB1dCBnZW5lcmF0ZWQgYnkg cmVhZGluZyBhbnkgY29tcHJlc3NlZCBpbnB1dCB2aWEgdGhlIExaNEYgQVBJLCBleGNlZWRzCisg KiAncHRyc2l6ZScuIEFueSBleGNlZWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgaXMgc3RvcmVk IGF0IGFuIG92ZXJmbG93CisgKiBidWZmZXIgd2l0aGluIExaNEZpbGUuIE9mIGNvdXJzZSwgd2hl biB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCB3aWxsIGZpcnN0CisgKiB0cnkgdG8gY29uc3Vt ZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRlbnQgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvdmVyZmxv dworICogYnVmZmVyLCBiZWZvcmUgZGVjb21wcmVzc2luZyBuZXcgY29udGVudC4KKyAqLworc3Rh dGljIGludAorTFo0RmlsZV9yZWFkX2ludGVybmFsKExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBp bnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwlzaXplX3QJCWRzaXplID0gMDsKKwlzaXpl X3QJCXJzaXplOworCXNpemVfdAkJc2l6ZSA9IHB0cnNpemU7CisJYm9vbAkJZW9sX2ZvdW5kID0g ZmFsc2U7CisKKwl2b2lkCSAgICpyZWFkYnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKCFm cy0+aW5pdGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFsc2UgLyogZGVjb21wcmVzc2lu ZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJmaXkgdGhhdCB0aGVyZSBpcyBlbm91Z2gg c3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4gZnMtPmJ1ZmxlbikKKwl7CisJCWZz LT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdfcmVhbGxvYyhmcy0+YnVmZmVyLCBz aXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXByZXNzZWQgY29udGVudCBpZiBhdmFp bGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVyZmxvdyhmcywgcHRyLCBzaXplLCBl b2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVvbF9mbGFnICYmIG1lbWNocihwdHIs ICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKworCXJlYWRidWYgPSBwZ19tYWxsb2Mo c2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJCWNoYXIJICAgKnJlbmQ7CisKKwkJ cnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnApOworCQlpZiAocnNpemUgPCBz aXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJcnAgPSAoY2hhciAqKSBy ZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiArIHJzaXplOworCisJCXdoaWxlIChy cCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOworCQkJc2l6ZV90CQlvdXRsZW4gPSBm cy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9IHJlbmQgLSBycDsKKworCQkJbWVt c2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0dXMgPSBMWjRGX2RlY29tcHJlc3Mo ZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJCQkJCSBycCwgJnJlYWRfcmVtYWlu LCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCXsKKwkJCQlmcy0+ZXJy Y29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCXJwICs9IHJlYWRfcmVt YWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBw dHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVpdGhlciBza2lwIGlmIG9uZSBhbHJl YWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNlbnQKKwkJCSAqIGluIHRoZSBvdXRi dWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNpemUgPCBzaXplICYmIGVvbF9mb3Vu ZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOworCQkJCXNpemVfdAkJbGliID0gKGVv bF9mbGFnID09IDApID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAtIDEgLSBkc2l6ZTsKKwkJCQlzaXpl X3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxpYjsKKworCQkJCWlmIChlb2xfZmxh ZyA9PSB0cnVlICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5idWZmZXIsICdcbicsIG91dGxlbikp ICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciArIDEpIDw9IGxlbikKKwkJCQl7CisJ CQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJZW9sX2ZvdW5kID0gdHJ1ZTsKKwkJ CQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNpemUsIGZzLT5idWZmZXIsIGxlbik7 CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3aGF0IGRpZCBub3QgZml0LCBpZiBh bnksIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgYnVmICovCisJCQkJaWYgKGxlbiA8IG91dGxlbikK KwkJCQkJbWVtbW92ZShmcy0+YnVmZmVyLCBmcy0+YnVmZmVyICsgbGVuLCBvdXRsZW4gLSBsZW4p OworCQkJCW91dGxlbiAtPSBsZW47CisJCQl9CisKKwkJCS8qIGlmIHRoZXJlIGlzIGF2YWlsYWJs ZSBvdXRwdXQsIHNhdmUgaXQgKi8KKwkJCWlmIChvdXRsZW4gPiAwKQorCQkJeworCQkJCXdoaWxl IChmcy0+b3ZlcmZsb3dsZW4gKyBvdXRsZW4gPiBmcy0+b3ZlcmZsb3dhbGxvY2xlbikKKwkJCQl7 CisJCQkJCWZzLT5vdmVyZmxvd2FsbG9jbGVuICo9IDI7CisJCQkJCWZzLT5vdmVyZmxvd2J1ZiA9 IHBnX3JlYWxsb2MoZnMtPm92ZXJmbG93YnVmLAorCQkJCQkJCQkJCQkJIGZzLT5vdmVyZmxvd2Fs bG9jbGVuKTsKKwkJCQl9CisKKwkJCQltZW1jcHkoZnMtPm92ZXJmbG93YnVmICsgZnMtPm92ZXJm bG93bGVuLCBmcy0+YnVmZmVyLCBvdXRsZW4pOworCQkJCWZzLT5vdmVyZmxvd2xlbiArPSBvdXRs ZW47CisJCQl9CisJCX0KKwl9IHdoaWxlIChyc2l6ZSA9PSBzaXplICYmIGRzaXplIDwgc2l6ZSAm JiBlb2xfZm91bmQgPT0gMCk7CisKKwlwZ19mcmVlKHJlYWRidWYpOworCisJcmV0dXJuIChpbnQp IGRzaXplOworfQorCisvKgorICogQ29tcHJlc3Mgc2l6ZSBieXRlcyBmcm9tIHB0ciBhbmQgd3Jp dGUgdGhlbSB0byB0aGUgc3RyZWFtLgorICovCitzdGF0aWMgc2l6ZV90CitMWjRGaWxlX3dyaXRl KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJc2l6 ZV90CQlzdGF0dXM7CisJaW50CQkJcmVtYWluaW5nID0gc2l6ZTsKKworCWlmICghZnMtPmluaXRl ZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIHRydWUpKQorCQlyZXR1cm4gLTE7CisKKwl3aGls ZSAocmVtYWluaW5nID4gMCkKKwl7CisJCWludAkJCWNodW5rID0gcmVtYWluaW5nIDwgTFo0X0lO X1NJWkUgPyByZW1haW5pbmcgOiBMWjRfSU5fU0laRTsKKworCQlyZW1haW5pbmcgLT0gY2h1bms7 CisKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc1VwZGF0ZShmcy0+Y3R4LCBmcy0+YnVmZmVyLCBm cy0+YnVmbGVuLAorCQkJCQkJCQkJIHB0ciwgY2h1bmssIE5VTEwpOworCQlpZiAoTFo0Rl9pc0Vy cm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIC0x OworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkgIT0g c3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsK KwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICogZnJlYWQoKSBlcXVpdmFsZW50 IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLworc3RhdGljIHNp emVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRl X2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9yZWFkX2ludGVybmFsKGZzLCBw dHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIUxaNEZpbGVfZW9mKENGSCkp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0Rmls ZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZmdldGMoKSBl cXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxa NEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQg Y2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgJmMsIDEsIGZhbHNlKSAh PSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKwkJ ZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9m IGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIGZnZXRzKCkgZXF1aXZhbGVu dCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBj aGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChm cywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOwor CisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDApCisJCXJldHVybiBOVUxMOwor CisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChkZSljb21wcmVzc2lvbiBvZiBh IHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRlIGFueQorICogcmVtYWluaW5n IGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0aGUgTFo0IEFQSS4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlG SUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJldDsKKworCWZwID0gZnMtPmZwOworCWlm IChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2luZykKKwkJeworCQkJc3RhdHVz ID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLCBOVUxM KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRv IGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykp OworCQkJZWxzZSBpZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5m cCkpICE9IHN0YXR1cykKKwkJCXsKKwkJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQkJ V1JJVEVfRVJST1JfRVhJVDsKKwkJCX0KKworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Np b25Db250ZXh0KGZzLT5jdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBn X2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRF cnJvck5hbWUoc3RhdHVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2Zy ZWVEZWNvbXByZXNzaW9uQ29udGV4dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3Rh dHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJ CQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxv d2J1Zik7CisJCX0KKworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMp OworCisJcmV0dXJuIGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihj b25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9IGZk b3BlbihmZCwgbW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChm cCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7CisJ fQorCisJbHo0ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorTFo0 RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwor CWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9mdW5j KGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUxaNEZp bGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1bmMgPSBMWjRGaWxlX29wZW47CisJQ0ZILT5v cGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBM WjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gTFo0RmlsZV93cml0ZTsKKwlDRkgtPmdl dHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsK KwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7CisJQ0ZILT5jbG9zZV9mdW5jID0gTFo0Rmls ZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gTFo0RmlsZV9nZXRfZXJyb3I7CisKKwlD RkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCWx6NGZwID0gcGdfbWFs bG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+ PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25MZXZlbCA9IENGSC0+Y29tcHJlc3Npb25f c3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJ CQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUg KmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRo ICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLCAiTFo0Iik7Cit9CisjZW5kaWYJCQkJCQkJLyogVVNFX0xaNCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc0NTk1 ZGIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmgK QEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3NfbHo0 LmgKKyAqCSBJbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNp bmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChD b21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzTFo0KENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0xaNF9IXyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxk CmluZGV4IGFhMmM5MTgyOWMuLjQ3M2Q0MGQ0NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTMsNiAr Myw3IEBACiBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21wcmVzc19pby5j JywKICAgJ2NvbXByZXNzX2d6aXAuYycsCisgICdjb21wcmVzc19sejQuYycsCiAgICdkdW1wdXRp bHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX2JhY2t1cF9hcmNoaXZlci5jJywKQEAgLTE3 LDcgKzE4LDcgQEAgcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogcGdfZHVtcF9jb21t b24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCiAgIHBnX2R1bXBfY29tbW9u X3NvdXJjZXMsCiAgIGNfcGNoOiBwY2hfcG9zdGdyZXNfZmVfaCwKLSAgZGVwZW5kZW5jaWVzOiBb ZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWJdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9j b2RlLCBsaWJwcSwgbHo0LCB6bGliXSwKICAga3dhcmdzOiBpbnRlcm5hbF9saWJfYXJncywKICkK IApAQCAtODUsNyArODYsMTAgQEAgdGVzdHMgKz0gewogICAnc2QnOiBtZXNvbi5jdXJyZW50X3Nv dXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKICAgJ3RhcCc6 IHsKLSAgICAnZW52JzogeydHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKX0sCisgICAgJ2Vudic6 IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKSwKKyAgICAgICdMWjQnOiBwcm9n cmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0aCgpIDogJycsCisgICAgfSwKICAgICAn dGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwnLAogICAgICAgJ3QvMDAyX3BnX2R1bXAu cGwnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGNjM2I3ZjA5OTIuLjcw MDVmZmNkNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTM5NSw2ICsz OTUsMTAgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogI2lmbmRlZiBIQVZFX0xJQloK IAkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVApCiAJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKyNpZm5k ZWYgVVNFX0xaNAorCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fTFo0KQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOwogI2Vu ZGlmCiAJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQogCQkJCQlwZ19mYXRh bCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CkBAIC0yMDc0LDcgKzIwNzgsNyBA QCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qCiAJCSAq IENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeS4gSWYgc28sIGNo ZWNrIGlmCi0JCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0Lmd6IikgZmlsZSBp biBpdC4KKwkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQue2d6LGx6NH0iKSBm aWxlIGluIGl0LgogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19J U0RJUihzdC5zdF9tb2RlKSkKIAkJewpAQCAtMjA4NCw2ICsyMDg4LDEwIEBAIF9kaXNjb3ZlckFy Y2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZkZWYgSEFWRV9MSUJaCiAJCQlpZiAo X2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmd6IikpCiAJCQkJcmV0 dXJuIEFILT5mb3JtYXQ7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJCQlpZiAoX2ZpbGVFeGlz dHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmx6NCIpKQorCQkJCXJldHVybiBBSC0+ Zm9ybWF0OwogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBh cHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCki LAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTM3NDcsNiArMzc1NSwxMCBAQCBSZWFkSGVhZChBcmNo aXZlSGFuZGxlICpBSCkKICNpZm5kZWYgSEFWRV9MSUJaCiAJCWlmIChBSC0+Y29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCXVuc3VwcG9ydGVkID0g dHJ1ZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCWlmIChBSC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJdW5zdXBwb3J0ZWQgPSB0cnVl OwogI2VuZGlmCiAJCWlmICh1bnN1cHBvcnRlZCkKIAkJCXBnX2ZhdGFsKCJhcmNoaXZlIGlzIGNv bXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwppbmRleCA1MjdjNzY1MWFiLi4wODEwNTMzN2IxIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTcxNSwxMyArNzE1LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlj YXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CiAJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFBH X0NPTVBSRVNTSU9OX0daSVA6CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFBHX0NPTVBS RVNTSU9OX0xaNDoKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CiAJCQlw Z19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1RE Iik7CiAJCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgi Y29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJy ZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGYzYmE5MjYzMjEu LmY0OTdlYzYwNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0xMzksNiArMTM5LDgw IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFyZ3MgICAgPT4gWyAnLWQnLCAiJHRlbXBkaXIv Y29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oiLCBdLAogCQl9LAogCX0sCisKKwkjIERvIG5v dCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNv bXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Np b24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWwor CQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1jdXN0b20nLAorCQkJJy0tY29tcHJlc3M9bHo0 JywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQkJJ3Bv c3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLAorCQkJ Ii0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJXSwKKwkJY29tbWFuZF9saWtlID0+ IHsKKwkJCWNvbW1hbmQgPT4gWworCQkJCSdwZ19yZXN0b3JlJywKKwkJCQknLWwnLCAiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJCV0sCisJCQlleHBlY3RlZCA9PiBx ci9Db21wcmVzc2lvbjogbHo0LywKKwkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBsejQgY29t cHJlc3NlZCcKKwkJfSwKKwl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRl c3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfZGlyID0+IHsKKwkJ dGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6 NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnLS1qb2JzPTInLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAg ICAgICAgICAgICAgICctLWNvbXByZXNzPWx6NDoxJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X2RpciIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFnZSBm b3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0b3Jl LgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFy Z3MgICAgPT4gWworCQkJCScteicsICctZicsICctLXJtJywKKwkJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2Rpci9ibG9icy50b2MiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRf ZGlyL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJfSwKKwkJIyBWZXJpZnkgdGhhdCBkYXRhIGZp bGVzIHdoZXJlIGNvbXByZXNzZWQKKwkJZ2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRlbXBkaXIv Y29tcHJlc3Npb25fbHo0X2Rpci90b2MuZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21wcmVzc2lv bl9sejRfZGlyLyouZGF0Lmx6NCIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy0tam9icz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0 X2Rpci5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0s CisKKwljb21wcmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29t cHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAg PT4gWworCQkJJ3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAor CQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdwb3N0 Z3JlcycsCisJCV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVuIHRo cm91Z2ggdGhlIHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5W eydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1wZGly L2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Np b25fbHo0X3BsYWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJCWR1 bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxNzUsMTEgKzQyNDksMTEgQEAgZm9yZWFj aCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdwb3N0 Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBp cyBubyBzdXBwb3J0IGZvciBpdC4KLQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0t Pntjb21waWxlX29wdGlvbn0pCi0JCSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0 aW9ufSBlcSAnZ3ppcCcKLQkJJiYgISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7 JHJ1bn0tPntjb21waWxlX29wdGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSBlcSAnZ3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9y dW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkK IAl7Ci0JCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5v dGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVf b3B0aW9ufSBzdXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2No ZWNrCmluZGV4IGRhOGU0ODYxZjQuLjFmN2Y4MTdlNGQgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9w Z2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3Bs dXNjaGVjawpAQCAtMTUyLDYgKzE1Miw3IEBAIGRvCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2gg aXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9 IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIg PSBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDg0MDE5MWQ2ODAuLjIzMjIyOGQ0MjcgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0xMzgxLDYgKzEzODEsNyBAQCBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdMb2Nr TW9kZQogTFdMb2NrUGFkZGVkCitMWjRDb21wcmVzc29yU3RhdGUKIExaNEZfY29tcHJlc3Npb25D b250ZXh0X3QKIExaNEZfZGVjb21wcmVzc09wdGlvbnNfdAogTFo0Rl9kZWNvbXByZXNzaW9uQ29u dGV4dF90Ci0tIAoyLjM0LjEKCg== --b1_Sd9FUzNxdqg0AN5VN3g9UoAeZNNi8BSKmywcJOw--