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 1p7P48-0003Pi-0g for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 22:57:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p7P46-00087j-OO for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 22:56:58 +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 1p7P45-00087G-Re for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 22:56:58 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p7P3z-00047C-7C for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 22:56:56 +0000 Received: by mail-ej1-x636.google.com with SMTP id bj12so25074697ejb.13 for ; Mon, 19 Dec 2022 14:56:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=u6PzSZNZaHJhN+2vol0jYwSovu641llh+KlEB17lVVA=; b=LzcpSlnssXoYzOEdXysK52fUDLm1DHYafhJDNrPeHQFOfzM0HqZ7iU27E1ll2a0h8H 5Jrd4KvnVz1+U2loL5fFD82wHKTLEk07WumcUrEXCKsElU5qEuHBom4kMhhqsoMrZ5cb kYTSb2vR1GC3NxTD8BD6afasQewBAEisiOQEtLZQ01o5k4OLjuwc7fG73FSp9z9njjW+ Oz0G+nknUzu02S9o0P92hX1MrNtWRPw+vxOxoH+9Ic0dE47RuwVOqnvmSB+KDv/ElZoD O/wiFfIoy8da4YvJwoxOPe9XoR9faHfj9VPcqm3S71FlKMakDcaEswbKMOaSbM+3eJmh sSGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=u6PzSZNZaHJhN+2vol0jYwSovu641llh+KlEB17lVVA=; b=RS81fQkF5WmL9fU7Tz8FrQB2BKpy/MLtwSxckEs6v00QOBDIawtIvFy8InIEBLI5ov oeT7KmbBtxKQr6c7KxZ7P3/RH0ua2bQLdBfFyOT9fQmoxZOflIYH6efD3vjb9uWi2xeq D2c31TPj2ds8vXG73Ge3OTOIg4JJkLY9D2cDjh24y+K0RlBsAC9FMpCZXOq7ZAk9oAGs bejfw+tD1SGUAT+wL6t4X8Av9+5mzXMFvg+ybZBXLVQX5d6VOGz6CbE/4WsIMWmGcX5g mEeZAj67rKId+SfY7AZdfXlrXxLbmQg039GRcIFku7FFChCL8YeMU4CuPVobFSmwHVc+ 6VuQ== X-Gm-Message-State: ANoB5pmmyMPczaIac3UBlajGuAnX7I1MXnff9AaDGJmqxXQzNKFZLkla V9OR89Tp73esz4ycXXwW+ddZMBSZ/QmlmwHOfBTMKijTQnk= X-Google-Smtp-Source: AA0mqf4jsbUPaC6+PicB5Cdg1cu+/2iQIoY1kg5a6Fxl41zf9RWUQvkA2Z3FhqKgoV1Z2OajKExpbEAANGsPDZi5Pgg= X-Received: by 2002:a17:907:7884:b0:7c0:e6d8:6f22 with SMTP id ku4-20020a170907788400b007c0e6d86f22mr19620516ejc.670.1671490609301; Mon, 19 Dec 2022 14:56:49 -0800 (PST) MIME-Version: 1.0 From: Corey Huinker Date: Mon, 19 Dec 2022 17:56:37 -0500 Message-ID: Subject: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000039f2b05f0363c51" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000039f2b05f0363c51 Content-Type: multipart/alternative; boundary="000000000000039f2705f0363c4f" --000000000000039f2705f0363c4f Content-Type: text/plain; charset="UTF-8" Attached is my work in progress to implement the changes to the CAST() function as proposed by Vik Fearing. This work builds upon the Error-safe User Functions work currently ongoing. The proposed changes are as follows: CAST(expr AS typename) continues to behave as before. CAST(expr AS typename ERROR ON ERROR) has the identical behavior as the unadorned CAST() above. CAST(expr AS typename NULL ON ERROR) will use error-safe functions to do the cast of expr, and will return NULL if the cast fails. CAST(expr AS typename DEFAULT expr2 ON ERROR) will use error-safe functions to do the cast of expr, and will return expr2 if the cast fails. There is an additional FORMAT parameter that I have not yet implemented, my understanding is that it is largely intended for DATE/TIME field conversions, but others are certainly possible. CAST(expr AS typename FORMAT fmt DEFAULT expr2 ON ERROR) What is currently working: - Any scalar expression that can be evaluated at parse time. These tests from cast.sql all currently work: VALUES (CAST('error' AS integer)); VALUES (CAST('error' AS integer ERROR ON ERROR)); VALUES (CAST('error' AS integer NULL ON ERROR)); VALUES (CAST('error' AS integer DEFAULT 42 ON ERROR)); SELECT CAST('{123,abc,456}' AS integer[] DEFAULT '{-789}' ON ERROR) as array_test1; - Scalar values evaluated at runtime. CREATE TEMPORARY TABLE t(t text); INSERT INTO t VALUES ('a'), ('1'), ('b'), (2); SELECT CAST(t.t AS integer DEFAULT -1 ON ERROR) AS foo FROM t; foo ----- -1 1 -1 2 (4 rows) Along the way, I made a few design decisions, each of which is up for debate: First, I created OidInputFunctionCallSafe, which is to OidInputFunctionCall what InputFunctionCallSafe is to InputFunctionCall. Given that the only place I ended up using it was stringTypeDatumSafe(), it may be possible to just move that code inside stringTypeDatumSafe. Next, I had a need for FuncExpr, CoerceViaIO, and ArrayCoerce to all report if their expr argument failed, and if not, just past the evaluation of expr2. Rather than duplicate this logic in several places, I chose instead to modify CoalesceExpr to allow for an error-test mode in addition to its default null-test mode, and then to provide this altered node with two expressions, the first being the error-safe typecast of expr and the second being the non-error-safe typecast of expr2. I still don't have array-to-array casts working, as the changed I would likely need to make to ArrayCoerce get somewhat invasive, so this seemed like a good time to post my work so far and solicit some feedback beyond what I've already been getting from Jeff Davis and Michael Paquier. I've sidestepped domains as well for the time being as well as avoiding JIT issues entirely. No documentation is currently prepared. All but one of the regression test queries work, the one that is currently failing is: SELECT CAST('{234,def,567}'::text[] AS integer[] DEFAULT '{-1011}' ON ERROR) as array_test2; Other quirks: - an unaliased CAST ON DEFAULT will return the column name of "coalesce", which internally is true, but obviously would be quite confusing to a user. As a side observation, I noticed that the optimizer already tries to resolve expressions based on constants and to collapse expression trees where possible, which makes me wonder if the work done to do the same in transformTypeCast/ and coerce_to_target_type and coerce_type isn't also wasted. --000000000000039f2705f0363c4f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Attached is my work in progress to implement the = changes to the CAST() function as proposed by Vik Fearing.

This work builds upon the Error-safe User Functions work currently= ongoing.

The proposed changes are as follows:

CAST(expr AS typename)
=C2=A0 =C2=A0 continues to = behave as before.

CAST(expr AS typename=C2=A0ERROR= ON ERROR)
=C2=A0 =C2=A0 has the identical behavior as the unadorned CAS= T() above.

CAST(expr AS typename NULL ON ERRO= R)
=C2=A0 =C2=A0 will use error-safe functions to do the cast of = expr, and will return NULL if the cast fails.

CAST(expr AS typename DEFAULT expr2 ON ERROR)
=C2=A0 =C2=A0 will use er= ror-safe functions to do the cast of expr, and will return expr2 if the cas= t fails.

There is an additional FORMAT parameter t= hat I have not yet implemented, my understanding is that it is largely inte= nded for DATE/TIME field conversions, but others are certainly possible.
CAST(expr AS typename FORMAT fmt DEFAULT expr2 ON ERROR)
=

What is currently working:
= - Any scalar expression that can be evaluated at parse time. These tests fr= om cast.sql all currently work:

VALUES (CAST('= error' AS integer));
VALUES (CAST('error' AS integer ERROR O= N ERROR));
VALUES (CAST('error' AS integer NULL ON ERROR));
V= ALUES (CAST('error' AS integer DEFAULT 42 ON ERROR));

SELECT= CAST('{123,abc,456}' AS integer[] DEFAULT '{-789}' ON ERRO= R) as array_test1;

- Scalar values evaluated at runtime.

CREATE TEMPORARY TABLE t(t text);
INSERT INTO t VALUES= ('a'), ('1'), ('b'), (2);
SELECT CAS= T(t.t AS integer DEFAULT -1 ON ERROR) AS foo FROM t;
=C2=A0foo
-----=
=C2=A0 -1
=C2=A0 =C2=A01
=C2=A0 -1
=C2=A0 =C2=A02
(4 rows)<= br>


Along the way, I made a few des= ign decisions, each of which is up for debate:

Fir= st, I created OidInputFunctionCallSafe, which is to OidInputFunctionCall wh= at InputFunctionCallSafe is to InputFunctionCall. Given that the only place= I ended up using it was stringTypeDatumSafe(), it may be possible to just = move that code inside=C2=A0stringTypeDatumSafe.

Next, I had a need f= or FuncExpr, CoerceViaIO, and ArrayCoerce to all report if their expr argum= ent failed, and if not, just past the evaluation of expr2. Rather than dupl= icate this logic in several places, I chose instead to modify CoalesceExpr= =C2=A0to allow for an error-test mode in addition to its default null-test = mode, and then to provide this altered node with two expressions, the first= being the error-safe typecast of expr and the second being the non-error-s= afe typecast of expr2.

I still don't have array-to-array casts w= orking, as the changed I would likely need to make to ArrayCoerce get somew= hat invasive, so this seemed like a good time to post my work so far and so= licit some feedback beyond what I've already been getting from Jeff Dav= is and Michael Paquier.

I've sidestepped domains as well for the= time being as well as avoiding JIT issues entirely.

No documentation is currently prepared. All but one of the regression te= st queries work, the one that is currently failing is:

SELECT CAST(&= #39;{234,def,567}'::text[] AS integer[] DEFAULT '{-1011}' ON ER= ROR) as array_test2;

Other quirks:
- an unaliased CAST ON = DEFAULT will return the column name of "coalesce", which internal= ly is true, but obviously would be quite confusing to a user.

As a s= ide observation, I noticed that the optimizer already tries to resolve expr= essions based on constants and to collapse expression trees where possible,= which makes me wonder if the work done to do the same in transformTypeCast= / and coerce_to_target_type and coerce_type isn't also wasted.

<= /div>
--000000000000039f2705f0363c4f-- --000000000000039f2b05f0363c51 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-add-OidInputFunctionCall.patch" Content-Disposition: attachment; filename="0001-add-OidInputFunctionCall.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvebayg0 RnJvbSA4OTdjOWM2OGEyOWFkMGZhNTdmMjg3MzRkZjBjNzc1NTNlMDI2ZDgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBjb3JleWh1aW5rZXIgPGNvcmV5Lmh1aW5rZXJAZ21haWwuY29t PgpEYXRlOiBTdW4sIDE4IERlYyAyMDIyIDE2OjIwOjAxIC0wNTAwClN1YmplY3Q6IFtQQVRDSCAx LzNdIGFkZCBPaWRJbnB1dEZ1bmN0aW9uQ2FsbAoKLS0tCiBzcmMvYmFja2VuZC91dGlscy9mbWdy L2ZtZ3IuYyB8IDEzICsrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2ZtZ3IuaCAgICAgICAgICAg IHwgIDQgKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMgYi9zcmMvYmFja2VuZC91dGlscy9mbWdy L2ZtZ3IuYwppbmRleCAwZDM3ZjY5Mjk4Li5lOWExOWNlNjUzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9mbWdyL2ZtZ3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3Iu YwpAQCAtMTcwMSw2ICsxNzAxLDE5IEBAIE9pZElucHV0RnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlv bklkLCBjaGFyICpzdHIsIE9pZCB0eXBpb3BhcmFtLCBpbnQzMiB0eXBtb2QpCiAJcmV0dXJuIElu cHV0RnVuY3Rpb25DYWxsKCZmbGluZm8sIHN0ciwgdHlwaW9wYXJhbSwgdHlwbW9kKTsKIH0KIAor Ym9vbAorT2lkSW5wdXRGdW5jdGlvbkNhbGxTYWZlKE9pZCBmdW5jdGlvbklkLCBjaGFyICpzdHIs IE9pZCB0eXBpb3BhcmFtLAorCQkJCQkJIGludDMyIHR5cG1vZCwgZm1Ob2RlUHRyIGVzY29udGV4 dCwKKwkJCQkJCSBEYXR1bSAqcmVzdWx0KQoreworCUZtZ3JJbmZvCQkJZmxpbmZvOworCisJZm1n cl9pbmZvKGZ1bmN0aW9uSWQsICZmbGluZm8pOworCisJcmV0dXJuIElucHV0RnVuY3Rpb25DYWxs U2FmZSgmZmxpbmZvLCBzdHIsIHR5cGlvcGFyYW0sIHR5cG1vZCwKKwkJCQkJCQkJIGVzY29udGV4 dCwgcmVzdWx0KTsKK30KKwogY2hhciAqCiBPaWRPdXRwdXRGdW5jdGlvbkNhbGwoT2lkIGZ1bmN0 aW9uSWQsIERhdHVtIHZhbCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZtZ3IuaCBiL3Ny Yy9pbmNsdWRlL2ZtZ3IuaAppbmRleCBiNzgzMmQwYWEyLi5iODM1ZWY3MmI1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9mbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvZm1nci5oCkBAIC03MDYsNiAr NzA2LDEwIEBAIGV4dGVybiBib29sIElucHV0RnVuY3Rpb25DYWxsU2FmZShGbWdySW5mbyAqZmxp bmZvLCBjaGFyICpzdHIsCiAJCQkJCQkJCSAgRGF0dW0gKnJlc3VsdCk7CiBleHRlcm4gRGF0dW0g T2lkSW5wdXRGdW5jdGlvbkNhbGwoT2lkIGZ1bmN0aW9uSWQsIGNoYXIgKnN0ciwKIAkJCQkJCQkJ ICBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kKTsKK2V4dGVybiBib29sCitPaWRJbnB1dEZ1 bmN0aW9uQ2FsbFNhZmUoT2lkIGZ1bmN0aW9uSWQsIGNoYXIgKnN0ciwgT2lkIHR5cGlvcGFyYW0s CisJCQkJCQkgaW50MzIgdHlwbW9kLCBmbU5vZGVQdHIgZXNjb250ZXh0LAorCQkJCQkJIERhdHVt ICpyZXN1bHQpOwogZXh0ZXJuIGNoYXIgKk91dHB1dEZ1bmN0aW9uQ2FsbChGbWdySW5mbyAqZmxp bmZvLCBEYXR1bSB2YWwpOwogZXh0ZXJuIGNoYXIgKk9pZE91dHB1dEZ1bmN0aW9uQ2FsbChPaWQg ZnVuY3Rpb25JZCwgRGF0dW0gdmFsKTsKIGV4dGVybiBEYXR1bSBSZWNlaXZlRnVuY3Rpb25DYWxs KEZtZ3JJbmZvICpmbGluZm8sIGZtU3RyaW5nSW5mbyBidWYsCi0tIAoyLjM4LjEKCg== --000000000000039f2b05f0363c51 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-add-stringTypeDatumSafe.patch" Content-Disposition: attachment; filename="0002-add-stringTypeDatumSafe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvebwy82 RnJvbSAxMTUzYzk3N2JhMTUzZjExNjE3MGNhMjkyMmUwNzg1ZjlkMjYwNGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBjb3JleWh1aW5rZXIgPGNvcmV5Lmh1aW5rZXJAZ21haWwuY29t PgpEYXRlOiBNb24sIDE5IERlYyAyMDIyIDEzOjM5OjE2IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAy LzNdIGFkZCBzdHJpbmdUeXBlRGF0dW1TYWZlCgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90eXBlLmMgfCAxMyArKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfdHlw ZS5oIHwgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90eXBlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdHlwZS5jCmluZGV4IGY3YWQ2ODk0NTkuLjBlNmRmZTNiNDkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3R5cGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNz LmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X3R5cGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJy YXkuaCIKQEAgLTY2MCw2ICs2NjEsMTggQEAgc3RyaW5nVHlwZURhdHVtKFR5cGUgdHAsIGNoYXIg KnN0cmluZywgaW50MzIgYXR0dHlwbW9kKQogCXJldHVybiBPaWRJbnB1dEZ1bmN0aW9uQ2FsbCh0 eXBpbnB1dCwgc3RyaW5nLCB0eXBpb3BhcmFtLCBhdHR0eXBtb2QpOwogfQogCitib29sCitzdHJp bmdUeXBlRGF0dW1TYWZlKFR5cGUgdHAsIGNoYXIgKnN0cmluZywgaW50MzIgYXR0dHlwbW9kLCBE YXR1bSAqcmVzdWx0KQoreworCUZvcm1fcGdfdHlwZSB0eXBmb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKHRwKTsKKwlPaWQJCQl0eXBpbnB1dCA9IHR5cGZvcm0tPnR5cGlucHV0OworCU9p ZAkJCXR5cGlvcGFyYW0gPSBnZXRUeXBlSU9QYXJhbSh0cCk7CisJRXJyb3JTYXZlQ29udGV4dCBl c2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCXJldHVybiBPaWRJbnB1dEZ1bmN0 aW9uQ2FsbFNhZmUodHlwaW5wdXQsIHN0cmluZywgdHlwaW9wYXJhbSwgYXR0dHlwbW9kLAorCQkJ CQkJCQkJKGZtTm9kZVB0cikgJmVzY29udGV4dCwgcmVzdWx0KTsKK30KKwogLyoKICAqIEdpdmVu IGEgdHlwZWlkLCByZXR1cm4gdGhlIHR5cGUncyB0eXByZWxpZCAoYXNzb2NpYXRlZCByZWxhdGlv biksIGlmIGFueS4KICAqIFJldHVybnMgSW52YWxpZE9pZCBpZiB0eXBlIGlzIG5vdCBhIGNvbXBv c2l0ZSB0eXBlLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX3R5cGUuaCBi L3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmgKaW5kZXggNGU1NjI0ZDcyMS4uNzQ2OGY3 NTgyMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX3R5cGUuaAorKysgYi9z cmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfdHlwZS5oCkBAIC00Nyw2ICs0Nyw4IEBAIGV4dGVybiBj aGFyICp0eXBlVHlwZU5hbWUoVHlwZSB0KTsKIGV4dGVybiBPaWQJdHlwZVR5cGVSZWxpZChUeXBl IHR5cCk7CiBleHRlcm4gT2lkCXR5cGVUeXBlQ29sbGF0aW9uKFR5cGUgdHlwKTsKIGV4dGVybiBE YXR1bSBzdHJpbmdUeXBlRGF0dW0oVHlwZSB0cCwgY2hhciAqc3RyaW5nLCBpbnQzMiBhdHR0eXBt b2QpOworZXh0ZXJuIGJvb2wgc3RyaW5nVHlwZURhdHVtU2FmZShUeXBlIHRwLCBjaGFyICpzdHJp bmcsIGludDMyIGF0dHR5cG1vZCwKKwkJCQkJCQkJRGF0dW0gKnJlc3VsdCk7CiAKIGV4dGVybiBP aWQJdHlwZWlkVHlwZVJlbGlkKE9pZCB0eXBlX2lkKTsKIGV4dGVybiBPaWQJdHlwZU9yRG9tYWlu VHlwZVJlbGlkKE9pZCB0eXBlX2lkKTsKLS0gCjIuMzguMQoK --000000000000039f2b05f0363c51 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-CAST-ON-DEFAULT-work-in-progress.patch" Content-Disposition: attachment; filename="0003-CAST-ON-DEFAULT-work-in-progress.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvec74g2 RnJvbSA3NGFhZjA2OGEyZDA3MWY2ZmVmYWIyNzMwOWQ3YTAyNTJmMjhjY2VlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBjb3JleWh1aW5rZXIgPGNvcmV5Lmh1aW5rZXJAZ21haWwuY29t PgpEYXRlOiBNb24sIDE5IERlYyAyMDIyIDE3OjExOjQ5IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAz LzNdIENBU1QgT04gREVGQVVMVCB3b3JrIGluIHByb2dyZXNzCgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgICAgfCAxNzMgKysrKysrKysrKystLS0tLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgIHwgIDM1ICsrKy0KIHNyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jICAgICAgfCAgMTUgKysKIHNyYy9iYWNrZW5kL25v ZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGls L2NsYXVzZXMuYyAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgfCAgNDYgKysrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYyAgICAg ICAgICAgfCAgMTUgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jb2VyY2UuYyAgICAgICAg fCAyMTUgKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9l eHByLmMgICAgICAgICAgfCAgODcgKysrKysrKy0tCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcv cGFydGJvdW5kcy5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVTZWFy Y2hDeWNsZS5jIHwgICA0ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAg ICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICB8ICAgMyArLQog c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9w YXJzZXIva3dsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3BhcnNlci9w YXJzZV9jb2VyY2UuaCAgICAgICAgfCAgMTUgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y2FzdC5vdXQgICAgICAgfCAgNDAgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUgICAgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nhc3Quc3FsICAgICAg ICAgICAgfCAgMTEgKysKIDIyIGZpbGVzIGNoYW5nZWQsIDU1MSBpbnNlcnRpb25zKCspLCAxNTgg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jYXN0Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Nhc3Qu c3FsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggODE0MjliOWYwNS4uOWFhYTUzYjY3ZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiaml0 L2ppdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j cy5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVG dW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3N1YnNjcmlwdGluZy5oIgogI2luY2x1ZGUgIm9wdGlt aXplci9vcHRpbWl6ZXIuaCIKQEAgLTYxLDEwICs2MiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBMYXN0 QXR0bnVtSW5mbwogCiBzdGF0aWMgdm9pZCBFeGVjUmVhZHlFeHByKEV4cHJTdGF0ZSAqc3RhdGUp Owogc3RhdGljIHZvaWQgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3Rh dGUsCi0JCQkJCQkJRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOworCQkJCQkJCURhdHVtICpy ZXN2LCBib29sICpyZXNudWxsLCBib29sICpyZXNlcnJvcik7CiBzdGF0aWMgdm9pZCBFeGVjSW5p dEZ1bmMoRXhwckV2YWxTdGVwICpzY3JhdGNoLCBFeHByICpub2RlLCBMaXN0ICphcmdzLAogCQkJ CQkJIE9pZCBmdW5jaWQsIE9pZCBpbnB1dGNvbGxpZCwKLQkJCQkJCSBFeHByU3RhdGUgKnN0YXRl KTsKKwkJCQkJCSBFeHByU3RhdGUgKnN0YXRlLCBFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQp Owogc3RhdGljIHZvaWQgRXhlY0luaXRFeHByU2xvdHMoRXhwclN0YXRlICpzdGF0ZSwgTm9kZSAq bm9kZSk7CiBzdGF0aWMgdm9pZCBFeGVjUHVzaEV4cHJTbG90cyhFeHByU3RhdGUgKnN0YXRlLCBM YXN0QXR0bnVtSW5mbyAqaW5mbyk7CiBzdGF0aWMgYm9vbCBnZXRfbGFzdF9hdHRudW1zX3dhbGtl cihOb2RlICpub2RlLCBMYXN0QXR0bnVtSW5mbyAqaW5mbyk7CkBAIC03NCwxMSArNzUsMTEgQEAg c3RhdGljIHZvaWQgRXhlY0luaXRXaG9sZVJvd1ZhcihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIFZh ciAqdmFyaWFibGUsCiBzdGF0aWMgdm9pZCBFeGVjSW5pdFN1YnNjcmlwdGluZ1JlZihFeHByRXZh bFN0ZXAgKnNjcmF0Y2gsCiAJCQkJCQkJCQlTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwKIAkJCQkJ CQkJCUV4cHJTdGF0ZSAqc3RhdGUsCi0JCQkJCQkJCQlEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVs bCk7CisJCQkJCQkJCQlEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwgYm9vbCAqcmVzZXJyb3Ip Owogc3RhdGljIGJvb2wgaXNBc3NpZ25tZW50SW5kaXJlY3Rpb25FeHByKEV4cHIgKmV4cHIpOwog c3RhdGljIHZvaWQgRXhlY0luaXRDb2VyY2VUb0RvbWFpbihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gs IENvZXJjZVRvRG9tYWluICpjdGVzdCwKIAkJCQkJCQkJICAgRXhwclN0YXRlICpzdGF0ZSwKLQkJ CQkJCQkJICAgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOworCQkJCQkJCQkgICBEYXR1bSAq cmVzdiwgYm9vbCAqcmVzbnVsbCwgYm9vbCAqcmVzZXJyb3IpOwogc3RhdGljIHZvaWQgRXhlY0J1 aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUsIEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAkJ CQkJCQkJICBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsCiAJCQkJCQkJCSAgRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMsCkBAIC0xNDAsNyArMTQxLDcgQEAg RXhlY0luaXRFeHByKEV4cHIgKm5vZGUsIFBsYW5TdGF0ZSAqcGFyZW50KQogCUV4ZWNJbml0RXhw clNsb3RzKHN0YXRlLCAoTm9kZSAqKSBub2RlKTsKIAogCS8qIENvbXBpbGUgdGhlIGV4cHJlc3Np b24gcHJvcGVyICovCi0JRXhlY0luaXRFeHByUmVjKG5vZGUsIHN0YXRlLCAmc3RhdGUtPnJlc3Zh bHVlLCAmc3RhdGUtPnJlc251bGwpOworCUV4ZWNJbml0RXhwclJlYyhub2RlLCBzdGF0ZSwgJnN0 YXRlLT5yZXN2YWx1ZSwgJnN0YXRlLT5yZXNudWxsLCAmc3RhdGUtPnJlc2Vycm9yKTsKIAogCS8q IEZpbmFsbHksIGFwcGVuZCBhIERPTkUgc3RlcCAqLwogCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9E T05FOwpAQCAtMTc3LDcgKzE3OCw3IEBAIEV4ZWNJbml0RXhwcldpdGhQYXJhbXMoRXhwciAqbm9k ZSwgUGFyYW1MaXN0SW5mbyBleHRfcGFyYW1zKQogCUV4ZWNJbml0RXhwclNsb3RzKHN0YXRlLCAo Tm9kZSAqKSBub2RlKTsKIAogCS8qIENvbXBpbGUgdGhlIGV4cHJlc3Npb24gcHJvcGVyICovCi0J RXhlY0luaXRFeHByUmVjKG5vZGUsIHN0YXRlLCAmc3RhdGUtPnJlc3ZhbHVlLCAmc3RhdGUtPnJl c251bGwpOworCUV4ZWNJbml0RXhwclJlYyhub2RlLCBzdGF0ZSwgJnN0YXRlLT5yZXN2YWx1ZSwg JnN0YXRlLT5yZXNudWxsLCAmc3RhdGUtPnJlc2Vycm9yKTsKIAogCS8qIEZpbmFsbHksIGFwcGVu ZCBhIERPTkUgc3RlcCAqLwogCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9ET05FOwpAQCAtMjUxLDcg KzI1Miw3IEBAIEV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCkKIAkJ RXhwcgkgICAqbm9kZSA9IChFeHByICopIGxmaXJzdChsYyk7CiAKIAkJLyogZmlyc3QgZXZhbHVh dGUgZXhwcmVzc2lvbiAqLwotCQlFeGVjSW5pdEV4cHJSZWMobm9kZSwgc3RhdGUsICZzdGF0ZS0+ cmVzdmFsdWUsICZzdGF0ZS0+cmVzbnVsbCk7CisJCUV4ZWNJbml0RXhwclJlYyhub2RlLCBzdGF0 ZSwgJnN0YXRlLT5yZXN2YWx1ZSwgJnN0YXRlLT5yZXNudWxsLCAmc3RhdGUtPnJlc2Vycm9yKTsK IAogCQkvKiB0aGVuIGVtaXQgRUVPUF9RVUFMIHRvIGRldGVjdCBpZiBpdCdzIGZhbHNlIChvciBu dWxsKSAqLwogCQlzY3JhdGNoLmQucXVhbGV4cHIuanVtcGRvbmUgPSAtMTsKQEAgLTQ1NSw3ICs0 NTYsNyBAQCBFeGVjQnVpbGRQcm9qZWN0aW9uSW5mbyhMaXN0ICp0YXJnZXRMaXN0LAogCQkJICog aW50byB0aGUgRXhwclN0YXRlJ3MgcmVzdmFsdWUvcmVzbnVsbCBhbmQgdGhlbiBtb3ZlLgogCQkJ ICovCiAJCQlFeGVjSW5pdEV4cHJSZWModGxlLT5leHByLCBzdGF0ZSwKLQkJCQkJCQkmc3RhdGUt PnJlc3ZhbHVlLCAmc3RhdGUtPnJlc251bGwpOworCQkJCQkJCSZzdGF0ZS0+cmVzdmFsdWUsICZz dGF0ZS0+cmVzbnVsbCwgJnN0YXRlLT5yZXNlcnJvcik7CiAKIAkJCS8qCiAJCQkgKiBDb2x1bW4g bWlnaHQgYmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcyBpbiB1cHBlciBub2Rlcywgc28KQEAg LTY1OSw3ICs2NjAsNyBAQCBFeGVjQnVpbGRVcGRhdGVQcm9qZWN0aW9uKExpc3QgKnRhcmdldExp c3QsCiAJCQkgKiBwYXRoIGFuZCBpdCBkb2Vzbid0IHNlZW0gd29ydGggZXhwZW5kaW5nIGNvZGUg Zm9yIHRoYXQuCiAJCQkgKi8KIAkJCUV4ZWNJbml0RXhwclJlYyh0bGUtPmV4cHIsIHN0YXRlLAot CQkJCQkJCSZzdGF0ZS0+cmVzdmFsdWUsICZzdGF0ZS0+cmVzbnVsbCk7CisJCQkJCQkJJnN0YXRl LT5yZXN2YWx1ZSwgJnN0YXRlLT5yZXNudWxsLCAmc3RhdGUtPnJlc2Vycm9yKTsKIAkJCS8qIE5l ZWRuJ3Qgd29ycnkgYWJvdXQgcmVhZC1vbmx5LW5lc3MgaGVyZSwgZWl0aGVyLiAqLwogCQkJc2Ny YXRjaC5vcGNvZGUgPSBFRU9QX0FTU0lHTl9UTVA7CiAJCQlzY3JhdGNoLmQuYXNzaWduX3RtcC5y ZXN1bHRudW0gPSB0YXJnZXRhdHRudW0gLSAxOwpAQCAtNjg4LDcgKzY4OSw3IEBAIEV4ZWNCdWls ZFVwZGF0ZVByb2plY3Rpb24oTGlzdCAqdGFyZ2V0TGlzdCwKIAogCQkJQXNzZXJ0KHRsZS0+cmVz anVuayk7CiAJCQlFeGVjSW5pdEV4cHJSZWModGxlLT5leHByLCBzdGF0ZSwKLQkJCQkJCQkmc3Rh dGUtPnJlc3ZhbHVlLCAmc3RhdGUtPnJlc251bGwpOworCQkJCQkJCSZzdGF0ZS0+cmVzdmFsdWUs ICZzdGF0ZS0+cmVzbnVsbCwgJnN0YXRlLT5yZXNlcnJvcik7CiAJCX0KIAl9CiAKQEAgLTg5OSw3 ICs5MDAsNyBAQCBFeGVjUmVhZHlFeHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAgKi8KIHN0YXRpYyB2 b2lkCiBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKLQkJCQlE YXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCkKKwkJCQlEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVs bCwgYm9vbCAqcmVzZXJyb3IpCiB7CiAJRXhwckV2YWxTdGVwIHNjcmF0Y2ggPSB7MH07CiAKQEAg LTkxMCw2ICs5MTEsNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpz dGF0ZSwKIAlBc3NlcnQocmVzdiAhPSBOVUxMICYmIHJlc251bGwgIT0gTlVMTCk7CiAJc2NyYXRj aC5yZXN2YWx1ZSA9IHJlc3Y7CiAJc2NyYXRjaC5yZXNudWxsID0gcmVzbnVsbDsKKwlzY3JhdGNo LnJlc2Vycm9yID0gcmVzZXJyb3I7CiAKIAkvKiBjYXNlcyBzaG91bGQgYmUgb3JkZXJlZCBhcyB0 aGV5IGFyZSBpbiBlbnVtIE5vZGVUYWcgKi8KIAlzd2l0Y2ggKG5vZGVUYWcobm9kZSkpCkBAIC0x MTI2LDE3ICsxMTI4LDI0IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUg KnN0YXRlLAogCQkJewogCQkJCVN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmID0gKFN1YnNjcmlwdGlu Z1JlZiAqKSBub2RlOwogCi0JCQkJRXhlY0luaXRTdWJzY3JpcHRpbmdSZWYoJnNjcmF0Y2gsIHNi c3JlZiwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQkJCUV4ZWNJbml0U3Vic2NyaXB0aW5nUmVm KCZzY3JhdGNoLCBzYnNyZWYsIHN0YXRlLCByZXN2LCByZXNudWxsLCBOVUxMKTsKIAkJCQlicmVh azsKIAkJCX0KIAogCQljYXNlIFRfRnVuY0V4cHI6CiAJCQl7Ci0JCQkJRnVuY0V4cHIgICAqZnVu YyA9IChGdW5jRXhwciAqKSBub2RlOworCQkJCUZ1bmNFeHByCQkgICAqZnVuYyA9IChGdW5jRXhw ciAqKSBub2RlOworCQkJCUVycm9yU2F2ZUNvbnRleHQgICAqZXNjb250ZXh0ID0gTlVMTDsKKwor CQkJCWlmICh1bmxpa2VseShmdW5jLT5zYWZlX21vZGUpKQorCQkJCXsKKwkJCQkJZXNjb250ZXh0 ID0gcGFsbG9jMChzaXplb2YoRXJyb3JTYXZlQ29udGV4dCkpOworCQkJCQllc2NvbnRleHQtPnR5 cGUgPSBUX0Vycm9yU2F2ZUNvbnRleHQ7CisJCQkJfQogCiAJCQkJRXhlY0luaXRGdW5jKCZzY3Jh dGNoLCBub2RlLAogCQkJCQkJCSBmdW5jLT5hcmdzLCBmdW5jLT5mdW5jaWQsIGZ1bmMtPmlucHV0 Y29sbGlkLAotCQkJCQkJCSBzdGF0ZSk7CisJCQkJCQkJIHN0YXRlLCBlc2NvbnRleHQpOwogCQkJ CUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIAkJCQlicmVhazsKIAkJCX0KQEAg LTExNDcsNyArMTE1Niw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUg KnN0YXRlLAogCiAJCQkJRXhlY0luaXRGdW5jKCZzY3JhdGNoLCBub2RlLAogCQkJCQkJCSBvcC0+ YXJncywgb3AtPm9wZnVuY2lkLCBvcC0+aW5wdXRjb2xsaWQsCi0JCQkJCQkJIHN0YXRlKTsKKwkJ CQkJCQkgc3RhdGUsIE5VTEwpOwogCQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNo KTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExNTgsNyArMTE2Nyw3IEBAIEV4ZWNJbml0RXhwclJl YyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCiAJCQkJRXhlY0luaXRGdW5jKCZzY3Jh dGNoLCBub2RlLAogCQkJCQkJCSBvcC0+YXJncywgb3AtPm9wZnVuY2lkLCBvcC0+aW5wdXRjb2xs aWQsCi0JCQkJCQkJIHN0YXRlKTsKKwkJCQkJCQkgc3RhdGUsIE5VTEwpOwogCiAJCQkJLyoKIAkJ CQkgKiBDaGFuZ2Ugb3Bjb2RlIG9mIGNhbGwgaW5zdHJ1Y3Rpb24gdG8gRUVPUF9ESVNUSU5DVC4K QEAgLTExODAsNyArMTE4OSw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3Rh dGUgKnN0YXRlLAogCiAJCQkJRXhlY0luaXRGdW5jKCZzY3JhdGNoLCBub2RlLAogCQkJCQkJCSBv cC0+YXJncywgb3AtPm9wZnVuY2lkLCBvcC0+aW5wdXRjb2xsaWQsCi0JCQkJCQkJIHN0YXRlKTsK KwkJCQkJCQkgc3RhdGUsIE5VTEwpOwogCiAJCQkJLyoKIAkJCQkgKiBDaGFuZ2Ugb3Bjb2RlIG9m IGNhbGwgaW5zdHJ1Y3Rpb24gdG8gRUVPUF9OVUxMSUYuCkBAIC0xMjYzLDcgKzEyNzIsNyBAQCBF eGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQl7CiAJCQkJ CS8qIEV2YWx1YXRlIHNjYWxhciBkaXJlY3RseSBpbnRvIGxlZnQgZnVuY3Rpb24gYXJndW1lbnQg Ki8KIAkJCQkJRXhlY0luaXRFeHByUmVjKHNjYWxhcmFyZywgc3RhdGUsCi0JCQkJCQkJCQkmZmNp bmZvLT5hcmdzWzBdLnZhbHVlLCAmZmNpbmZvLT5hcmdzWzBdLmlzbnVsbCk7CisJCQkJCQkJCQkm ZmNpbmZvLT5hcmdzWzBdLnZhbHVlLCAmZmNpbmZvLT5hcmdzWzBdLmlzbnVsbCwgTlVMTCk7CiAK IAkJCQkJLyoKIAkJCQkJICogRXZhbHVhdGUgYXJyYXkgYXJndW1lbnQgaW50byBvdXIgcmV0dXJu IHZhbHVlLiAgVGhlcmUncwpAQCAtMTI3Miw3ICsxMjgxLDcgQEAgRXhlY0luaXRFeHByUmVjKEV4 cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCSAqIEVFT1BfSEFTSEVEX1NDQUxBUkFS UkFZT1AsIGFuZCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8KIAkJCQkJICogYW55IG90aGVyIGV4cHJl c3Npb24uCiAJCQkJCSAqLwotCQkJCQlFeGVjSW5pdEV4cHJSZWMoYXJyYXlhcmcsIHN0YXRlLCBy ZXN2LCByZXNudWxsKTsKKwkJCQkJRXhlY0luaXRFeHByUmVjKGFycmF5YXJnLCBzdGF0ZSwgcmVz diwgcmVzbnVsbCwgTlVMTCk7CiAKIAkJCQkJLyogQW5kIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiAq LwogCQkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSEFTSEVEX1NDQUxBUkFSUkFZT1A7CkBAIC0x Mjg5LDcgKzEyOTgsNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpz dGF0ZSwKIAkJCQkJLyogRXZhbHVhdGUgc2NhbGFyIGRpcmVjdGx5IGludG8gbGVmdCBmdW5jdGlv biBhcmd1bWVudCAqLwogCQkJCQlFeGVjSW5pdEV4cHJSZWMoc2NhbGFyYXJnLCBzdGF0ZSwKIAkJ CQkJCQkJCSZmY2luZm8tPmFyZ3NbMF0udmFsdWUsCi0JCQkJCQkJCQkmZmNpbmZvLT5hcmdzWzBd LmlzbnVsbCk7CisJCQkJCQkJCQkmZmNpbmZvLT5hcmdzWzBdLmlzbnVsbCwgTlVMTCk7CiAKIAkJ CQkJLyoKIAkJCQkJICogRXZhbHVhdGUgYXJyYXkgYXJndW1lbnQgaW50byBvdXIgcmV0dXJuIHZh bHVlLiAgVGhlcmUncwpAQCAtMTI5Nyw3ICsxMzA2LDcgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIg Km5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCSAqIGd1YXJhbnRlZWQgdG8gYmUgb3Zlcndy aXR0ZW4gYnkgRUVPUF9TQ0FMQVJBUlJBWU9QLCBhbmQKIAkJCQkJICogd2lsbCBub3QgYmUgcGFz c2VkIHRvIGFueSBvdGhlciBleHByZXNzaW9uLgogCQkJCQkgKi8KLQkJCQkJRXhlY0luaXRFeHBy UmVjKGFycmF5YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCQkJCUV4ZWNJbml0RXhwclJl YyhhcnJheWFyZywgc3RhdGUsIHJlc3YsIHJlc251bGwsIE5VTEwpOwogCiAJCQkJCS8qIEFuZCBw ZXJmb3JtIHRoZSBvcGVyYXRpb24gKi8KIAkJCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX1NDQUxB UkFSUkFZT1A7CkBAIC0xMzQyLDcgKzEzNTEsNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9k ZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkJRXhwcgkgICAqYXJnID0gKEV4cHIgKikgbGZpcnN0 KGxjKTsKIAogCQkJCQkvKiBFdmFsdWF0ZSBhcmd1bWVudCBpbnRvIG91ciBvdXRwdXQgdmFyaWFi bGUgKi8KLQkJCQkJRXhlY0luaXRFeHByUmVjKGFyZywgc3RhdGUsIHJlc3YsIHJlc251bGwpOwor CQkJCQlFeGVjSW5pdEV4cHJSZWMoYXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgTlVMTCk7CiAK IAkJCQkJLyogUGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgc3RlcCB0eXBlICovCiAJCQkJCXN3aXRj aCAoYm9vbGV4cHItPmJvb2xvcCkKQEAgLTE0MjMsNyArMTQzMiw3IEBAIEV4ZWNJbml0RXhwclJl YyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCUZpZWxkU2VsZWN0ICpmc2VsZWN0 ID0gKEZpZWxkU2VsZWN0ICopIG5vZGU7CiAKIAkJCQkvKiBldmFsdWF0ZSByb3cvcmVjb3JkIGFy Z3VtZW50IGludG8gcmVzdWx0IGFyZWEgKi8KLQkJCQlFeGVjSW5pdEV4cHJSZWMoZnNlbGVjdC0+ YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCQkJRXhlY0luaXRFeHByUmVjKGZzZWxlY3Qt PmFyZywgc3RhdGUsIHJlc3YsIHJlc251bGwsIE5VTEwpOwogCiAJCQkJLyogYW5kIGV4dHJhY3Qg ZmllbGQgKi8KIAkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfRklFTERTRUxFQ1Q7CkBAIC0xNDYw LDcgKzE0NjksNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0 ZSwKIAkJCQlyb3djYWNoZXAtPmNhY2hlcHRyID0gTlVMTDsKIAogCQkJCS8qIGVtaXQgY29kZSB0 byBldmFsdWF0ZSB0aGUgY29tcG9zaXRlIGlucHV0IHZhbHVlICovCi0JCQkJRXhlY0luaXRFeHBy UmVjKGZzdG9yZS0+YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCQkJRXhlY0luaXRFeHBy UmVjKGZzdG9yZS0+YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgTlVMTCk7CiAKIAkJCQkvKiBu ZXh0LCBkZWZvcm0gdGhlIGlucHV0IHR1cGxlIGludG8gb3VyIHdvcmtzcGFjZSAqLwogCQkJCXNj cmF0Y2gub3Bjb2RlID0gRUVPUF9GSUVMRFNUT1JFX0RFRk9STTsKQEAgLTE1MTQsNyArMTUyMyw3 IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCiAJCQkJ CUV4ZWNJbml0RXhwclJlYyhlLCBzdGF0ZSwKIAkJCQkJCQkJCSZ2YWx1ZXNbZmllbGRudW0gLSAx XSwKLQkJCQkJCQkJCSZudWxsc1tmaWVsZG51bSAtIDFdKTsKKwkJCQkJCQkJCSZudWxsc1tmaWVs ZG51bSAtIDFdLCBOVUxMKTsKIAogCQkJCQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSBzYXZl X2lubmVybW9zdF9jYXNldmFsOwogCQkJCQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gc2F2 ZV9pbm5lcm1vc3RfY2FzZW51bGw7CkBAIC0xNTM2LDcgKzE1NDUsNyBAQCBFeGVjSW5pdEV4cHJS ZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkvKiByZWxhYmVsIGRvZXNuJ3Qg bmVlZCB0byBkbyBhbnl0aGluZyBhdCBydW50aW1lICovCiAJCQkJUmVsYWJlbFR5cGUgKnJlbGFi ZWwgPSAoUmVsYWJlbFR5cGUgKikgbm9kZTsKIAotCQkJCUV4ZWNJbml0RXhwclJlYyhyZWxhYmVs LT5hcmcsIHN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJCQlFeGVjSW5pdEV4cHJSZWMocmVsYWJl bC0+YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgTlVMTCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAK QEAgLTE1NDcsOSArMTU1NiwxMCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0 YXRlICpzdGF0ZSwKIAkJCQlib29sCQl0eXBpc3ZhcmxlbmE7CiAJCQkJT2lkCQkJdHlwaW9wYXJh bTsKIAkJCQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mb19pbjsKKwkJCQlFcnJvclNhdmVDb250ZXh0 ICplc2NvbnRleHQgPSBOVUxMOwogCiAJCQkJLyogZXZhbHVhdGUgYXJndW1lbnQgaW50byBzdGVw J3MgcmVzdWx0IGFyZWEgKi8KLQkJCQlFeGVjSW5pdEV4cHJSZWMoaW9jb2VyY2UtPmFyZywgc3Rh dGUsIHJlc3YsIHJlc251bGwpOworCQkJCUV4ZWNJbml0RXhwclJlYyhpb2NvZXJjZS0+YXJnLCBz dGF0ZSwgcmVzdiwgcmVzbnVsbCwgcmVzZXJyb3IpOwogCiAJCQkJLyoKIAkJCQkgKiBQcmVwYXJl IGJvdGggb3V0cHV0IGFuZCBpbnB1dCBmdW5jdGlvbiBjYWxscywgdG8gYmUKQEAgLTE1ODEsOSAr MTU5MSwxNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwK IAkJCQkJCQkJICZpb2Z1bmMsICZ0eXBpb3BhcmFtKTsKIAkJCQlmbWdyX2luZm8oaW9mdW5jLCBz Y3JhdGNoLmQuaW9jb2VyY2UuZmluZm9faW4pOwogCQkJCWZtZ3JfaW5mb19zZXRfZXhwcigoTm9k ZSAqKSBub2RlLCBzY3JhdGNoLmQuaW9jb2VyY2UuZmluZm9faW4pOworCisJCQkJLyogaWYgdGhp cyBpcyBhIHNhZmUtbW9kZSBjb2VyY2UgKi8KKwkJCQlpZiAodW5saWtlbHkoaW9jb2VyY2UtPnNh ZmVfbW9kZSkpCisJCQkJeworCQkJCQllc2NvbnRleHQgPSBwYWxsb2MwKHNpemVvZihFcnJvclNh dmVDb250ZXh0KSk7CisJCQkJCWVzY29udGV4dC0+dHlwZSA9IFRfRXJyb3JTYXZlQ29udGV4dDsK KwkJCQl9CisKIAkJCQlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnNjcmF0Y2guZC5pb2NvZXJj ZS5mY2luZm9fZGF0YV9pbiwKIAkJCQkJCQkJCQkgc2NyYXRjaC5kLmlvY29lcmNlLmZpbmZvX2lu LAotCQkJCQkJCQkJCSAzLCBJbnZhbGlkT2lkLCBOVUxMLCBOVUxMKTsKKwkJCQkJCQkJCQkgMywg SW52YWxpZE9pZCwgKGZtTm9kZVB0cikgZXNjb250ZXh0LCBOVUxMKTsKIAogCQkJCS8qCiAJCQkJ ICogV2UgY2FuIHByZWxvYWQgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIGZvciB0aGUg aW5wdXQKQEAgLTE2MDYsNyArMTYyNCw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBF eHByU3RhdGUgKnN0YXRlLAogCQkJCUV4cHJTdGF0ZSAgKmVsZW1zdGF0ZTsKIAogCQkJCS8qIGV2 YWx1YXRlIGFyZ3VtZW50IGludG8gc3RlcCdzIHJlc3VsdCBhcmVhICovCi0JCQkJRXhlY0luaXRF eHByUmVjKGFjb2VyY2UtPmFyZywgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQkJCUV4ZWNJbml0 RXhwclJlYyhhY29lcmNlLT5hcmcsIHN0YXRlLCByZXN2LCByZXNudWxsLCByZXNlcnJvcik7CiAK IAkJCQlyZXN1bHRlbGVtdHlwZSA9IGdldF9lbGVtZW50X3R5cGUoYWNvZXJjZS0+cmVzdWx0dHlw ZSk7CiAJCQkJaWYgKCFPaWRJc1ZhbGlkKHJlc3VsdGVsZW10eXBlKSkKQEAgLTE2MjcsOSArMTY0 NSwxMSBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAog CQkJCWVsZW1zdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSAoRGF0dW0gKikgcGFsbG9jKHNpemVv ZihEYXR1bSkpOwogCQkJCWVsZW1zdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gKGJvb2wgKikg cGFsbG9jKHNpemVvZihib29sKSk7CisJCQkJZWxlbXN0YXRlLT5pbm5lcm1vc3RfY2FzZWVycm9y ID0gKGJvb2wgKikgcGFsbG9jKHNpemVvZihib29sKSk7CiAKIAkJCQlFeGVjSW5pdEV4cHJSZWMo YWNvZXJjZS0+ZWxlbWV4cHIsIGVsZW1zdGF0ZSwKLQkJCQkJCQkJJmVsZW1zdGF0ZS0+cmVzdmFs dWUsICZlbGVtc3RhdGUtPnJlc251bGwpOworCQkJCQkJCQkmZWxlbXN0YXRlLT5yZXN2YWx1ZSwg JmVsZW1zdGF0ZS0+cmVzbnVsbCwKKwkJCQkJCQkJJmVsZW1zdGF0ZS0+cmVzZXJyb3IpOwogCiAJ CQkJaWYgKGVsZW1zdGF0ZS0+c3RlcHNfbGVuID09IDEgJiYKIAkJCQkJZWxlbXN0YXRlLT5zdGVw c1swXS5vcGNvZGUgPT0gRUVPUF9DQVNFX1RFU1RWQUwpCkBAIC0xNjc3LDcgKzE2OTcsNyBAQCBF eGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQlyb3djYWNo ZXBbMV0uY2FjaGVwdHIgPSBOVUxMOwogCiAJCQkJLyogZXZhbHVhdGUgYXJndW1lbnQgaW50byBz dGVwJ3MgcmVzdWx0IGFyZWEgKi8KLQkJCQlFeGVjSW5pdEV4cHJSZWMoY29udmVydC0+YXJnLCBz dGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCQkJRXhlY0luaXRFeHByUmVjKGNvbnZlcnQtPmFyZywg c3RhdGUsIHJlc3YsIHJlc251bGwsIE5VTEwpOwogCiAJCQkJLyogYW5kIHB1c2ggY29udmVyc2lv biBzdGVwICovCiAJCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0NPTlZFUlRfUk9XVFlQRTsKQEAg LTE2OTksNiArMTcxOSw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUg KnN0YXRlLAogCQkJCUxpc3QJICAgKmFkanVzdF9qdW1wcyA9IE5JTDsKIAkJCQlEYXR1bQkgICAq Y2FzZXZhbCA9IE5VTEw7CiAJCQkJYm9vbAkgICAqY2FzZW51bGwgPSBOVUxMOworCQkJCWJvb2wJ ICAgKmNhc2VlcnJvciA9IE5VTEw7CiAJCQkJTGlzdENlbGwgICAqbGM7CiAKIAkJCQkvKgpAQCAt MTcxMSw5ICsxNzMyLDEwIEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUg KnN0YXRlLAogCQkJCQkvKiBFdmFsdWF0ZSB0ZXN0ZXhwciBpbnRvIGNhc2V2YWwvY2FzZW51bGwg d29ya3NwYWNlICovCiAJCQkJCWNhc2V2YWwgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSk7CiAJCQkJ CWNhc2VudWxsID0gcGFsbG9jKHNpemVvZihib29sKSk7CisJCQkJCWNhc2VlcnJvciA9IHBhbGxv YyhzaXplb2YoYm9vbCkpOwogCiAJCQkJCUV4ZWNJbml0RXhwclJlYyhjYXNlRXhwci0+YXJnLCBz dGF0ZSwKLQkJCQkJCQkJCWNhc2V2YWwsIGNhc2VudWxsKTsKKwkJCQkJCQkJCWNhc2V2YWwsIGNh c2VudWxsLCBjYXNlZXJyb3IpOwogCiAJCQkJCS8qCiAJCQkJCSAqIFNpbmNlIHZhbHVlIG1pZ2h0 IGJlIHJlYWQgbXVsdGlwbGUgdGltZXMsIGZvcmNlIHRvIFIvTwpAQCAtMTcyNSw4ICsxNzQ3LDEw IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJ c2NyYXRjaC5vcGNvZGUgPSBFRU9QX01BS0VfUkVBRE9OTFk7CiAJCQkJCQlzY3JhdGNoLnJlc3Zh bHVlID0gY2FzZXZhbDsKIAkJCQkJCXNjcmF0Y2gucmVzbnVsbCA9IGNhc2VudWxsOworCQkJCQkJ c2NyYXRjaC5yZXNlcnJvciA9IGNhc2VlcnJvcjsKIAkJCQkJCXNjcmF0Y2guZC5tYWtlX3JlYWRv bmx5LnZhbHVlID0gY2FzZXZhbDsKIAkJCQkJCXNjcmF0Y2guZC5tYWtlX3JlYWRvbmx5LmlzbnVs bCA9IGNhc2VudWxsOworCQkJCQkJc2NyYXRjaC5kLm1ha2VfcmVhZG9ubHkuaXNlcnJvciA9IGNh c2VlcnJvcjsKIAkJCQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIAkJCQkJ CS8qIHJlc3RvcmUgbm9ybWFsIHNldHRpbmdzIG9mIHNjcmF0Y2ggZmllbGRzICovCiAJCQkJCQlz Y3JhdGNoLnJlc3ZhbHVlID0gcmVzdjsKQEAgLTE3NDUsNiArMTc2OSw3IEBAIEV4ZWNJbml0RXhw clJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCQlDYXNlV2hlbiAgICp3aGVu ID0gKENhc2VXaGVuICopIGxmaXJzdChsYyk7CiAJCQkJCURhdHVtCSAgICpzYXZlX2lubmVybW9z dF9jYXNldmFsOwogCQkJCQlib29sCSAgICpzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwkJCQkJ Ym9vbAkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZWVycm9yOwogCQkJCQlpbnQJCQl3aGVuc3RlcDsK IAogCQkJCQkvKgpAQCAtMTc1OSwxNCArMTc4NCwxNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAq bm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkJICovCiAJCQkJCXNhdmVfaW5uZXJtb3N0X2Nh c2V2YWwgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWw7CiAJCQkJCXNhdmVfaW5uZXJtb3N0X2Nh c2VudWxsID0gc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbDsKKwkJCQkJc2F2ZV9pbm5lcm1vc3Rf Y2FzZWVycm9yID0gc3RhdGUtPmlubmVybW9zdF9jYXNlZXJyb3I7CiAJCQkJCXN0YXRlLT5pbm5l cm1vc3RfY2FzZXZhbCA9IGNhc2V2YWw7CiAJCQkJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwg PSBjYXNlbnVsbDsKKwkJCQkJc3RhdGUtPmlubmVybW9zdF9jYXNlZXJyb3IgPSBjYXNlZXJyb3I7 CiAKIAkJCQkJLyogZXZhbHVhdGUgY29uZGl0aW9uIGludG8gQ0FTRSdzIHJlc3VsdCB2YXJpYWJs ZXMgKi8KLQkJCQkJRXhlY0luaXRFeHByUmVjKHdoZW4tPmV4cHIsIHN0YXRlLCByZXN2LCByZXNu dWxsKTsKKwkJCQkJRXhlY0luaXRFeHByUmVjKHdoZW4tPmV4cHIsIHN0YXRlLCByZXN2LCByZXNu dWxsLCBOVUxMKTsKIAogCQkJCQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSBzYXZlX2lubmVy bW9zdF9jYXNldmFsOwogCQkJCQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VudWxsID0gc2F2ZV9pbm5l cm1vc3RfY2FzZW51bGw7CisJCQkJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZWVycm9yID0gc2F2ZV9p bm5lcm1vc3RfY2FzZWVycm9yOwogCiAJCQkJCS8qIElmIFdIRU4gcmVzdWx0IGlzbid0IHRydWUs IGp1bXAgdG8gbmV4dCBDQVNFIGFybSAqLwogCQkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSlVN UF9JRl9OT1RfVFJVRTsKQEAgLTE3NzgsNyArMTgwNiw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHBy ICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkgKiBJZiBXSEVOIHJlc3VsdCBpcyB0cnVl LCBldmFsdWF0ZSBUSEVOIHJlc3VsdCwgc3RvcmluZwogCQkJCQkgKiBpdCBpbnRvIHRoZSBDQVNF J3MgcmVzdWx0IHZhcmlhYmxlcy4KIAkJCQkJICovCi0JCQkJCUV4ZWNJbml0RXhwclJlYyh3aGVu LT5yZXN1bHQsIHN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJCQkJRXhlY0luaXRFeHByUmVjKHdo ZW4tPnJlc3VsdCwgc3RhdGUsIHJlc3YsIHJlc251bGwsIHJlc2Vycm9yKTsKIAogCQkJCQkvKiBF bWl0IEpVTVAgc3RlcCB0byBqdW1wIHRvIGVuZCBvZiBDQVNFJ3MgY29kZSAqLwogCQkJCQlzY3Jh dGNoLm9wY29kZSA9IEVFT1BfSlVNUDsKQEAgLTE4MDQsNyArMTgzMiw3IEBAIEV4ZWNJbml0RXhw clJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCiAJCQkJLyogZXZhbHVhdGUgRUxT RSBleHByIGludG8gQ0FTRSdzIHJlc3VsdCB2YXJpYWJsZXMgKi8KIAkJCQlFeGVjSW5pdEV4cHJS ZWMoY2FzZUV4cHItPmRlZnJlc3VsdCwgc3RhdGUsCi0JCQkJCQkJCXJlc3YsIHJlc251bGwpOwor CQkJCQkJCQlyZXN2LCByZXNudWxsLCByZXNlcnJvcik7CiAKIAkJCQkvKiBhZGp1c3QganVtcCB0 YXJnZXRzICovCiAJCQkJZm9yZWFjaChsYywgYWRqdXN0X2p1bXBzKQpAQCAtMTgzMyw2ICsxODYx LDcgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJ c2NyYXRjaC5vcGNvZGUgPSBFRU9QX0NBU0VfVEVTVFZBTDsKIAkJCQlzY3JhdGNoLmQuY2FzZXRl c3QudmFsdWUgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWw7CiAJCQkJc2NyYXRjaC5kLmNhc2V0 ZXN0LmlzbnVsbCA9IHN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGw7CisJCQkJc2NyYXRjaC5kLmNh c2V0ZXN0LmlzZXJyb3IgPSBzdGF0ZS0+aW5uZXJtb3N0X2Nhc2VlcnJvcjsKIAogCQkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIAkJCQlicmVhazsKQEAgLTE4NzUsNyArMTkw NCw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCiAJ CQkJCUV4ZWNJbml0RXhwclJlYyhlLCBzdGF0ZSwKIAkJCQkJCQkJCSZzY3JhdGNoLmQuYXJyYXll eHByLmVsZW12YWx1ZXNbZWxlbW9mZl0sCi0JCQkJCQkJCQkmc2NyYXRjaC5kLmFycmF5ZXhwci5l bGVtbnVsbHNbZWxlbW9mZl0pOworCQkJCQkJCQkJJnNjcmF0Y2guZC5hcnJheWV4cHIuZWxlbW51 bGxzW2VsZW1vZmZdLCBOVUxMKTsKIAkJCQkJZWxlbW9mZisrOwogCQkJCX0KIApAQCAtMTk2OSw3 ICsxOTk4LDcgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUs CiAJCQkJCS8qIEV2YWx1YXRlIGNvbHVtbiBleHByIGludG8gYXBwcm9wcmlhdGUgd29ya3NwYWNl IHNsb3QgKi8KIAkJCQkJRXhlY0luaXRFeHByUmVjKGUsIHN0YXRlLAogCQkJCQkJCQkJJnNjcmF0 Y2guZC5yb3cuZWxlbXZhbHVlc1tpXSwKLQkJCQkJCQkJCSZzY3JhdGNoLmQucm93LmVsZW1udWxs c1tpXSk7CisJCQkJCQkJCQkmc2NyYXRjaC5kLnJvdy5lbGVtbnVsbHNbaV0sIE5VTEwpOwogCQkJ CQlpKys7CiAJCQkJfQogCkBAIC0yMDQ3LDkgKzIwNzYsOSBAQCBFeGVjSW5pdEV4cHJSZWMoRXhw ciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAogCQkJCQkvKiBldmFsdWF0ZSBsZWZ0IGFuZCBy aWdodCBhcmdzIGRpcmVjdGx5IGludG8gZmNpbmZvICovCiAJCQkJCUV4ZWNJbml0RXhwclJlYyhs ZWZ0X2V4cHIsIHN0YXRlLAotCQkJCQkJCQkJJmZjaW5mby0+YXJnc1swXS52YWx1ZSwgJmZjaW5m by0+YXJnc1swXS5pc251bGwpOworCQkJCQkJCQkJJmZjaW5mby0+YXJnc1swXS52YWx1ZSwgJmZj aW5mby0+YXJnc1swXS5pc251bGwsIE5VTEwpOwogCQkJCQlFeGVjSW5pdEV4cHJSZWMocmlnaHRf ZXhwciwgc3RhdGUsCi0JCQkJCQkJCQkmZmNpbmZvLT5hcmdzWzFdLnZhbHVlLCAmZmNpbmZvLT5h cmdzWzFdLmlzbnVsbCk7CisJCQkJCQkJCQkmZmNpbmZvLT5hcmdzWzFdLnZhbHVlLCAmZmNpbmZv LT5hcmdzWzFdLmlzbnVsbCwgTlVMTCk7CiAKIAkJCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX1JP V0NPTVBBUkVfU1RFUDsKIAkJCQkJc2NyYXRjaC5kLnJvd2NvbXBhcmVfc3RlcC5maW5mbyA9IGZp bmZvOwpAQCAtMjEwNCw2ICsyMTMzLDEzIEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBF eHByU3RhdGUgKnN0YXRlLAogCQkJCUNvYWxlc2NlRXhwciAqY29hbGVzY2UgPSAoQ29hbGVzY2VF eHByICopIG5vZGU7CiAJCQkJTGlzdAkgICAqYWRqdXN0X2p1bXBzID0gTklMOwogCQkJCUxpc3RD ZWxsICAgKmxjOworCQkJCUV4cHJFdmFsT3AganVtcF90ZXN0X29wY29kZTsKKworCQkJCS8qIENv YWxlc2NlIGNhbiBoYW5kbGUgcmVzbnVsbCBhbmQgcmVzZXJyb3IgdGVzdHMgKi8KKwkJCQlpZiAo bGlrZWx5KGNvYWxlc2NlLT5vcCA9PSBOVUxMX1RFU1QpKQorCQkJCQlqdW1wX3Rlc3Rfb3Bjb2Rl ID0gRUVPUF9KVU1QX0lGX05PVF9OVUxMOworCQkJCWVsc2UKKwkJCQkJanVtcF90ZXN0X29wY29k ZSA9IEVFT1BfSlVNUF9JRl9OT1RfRVJST1I7CiAKIAkJCQkvKiBXZSBhc3N1bWUgdGhlcmUncyBh dCBsZWFzdCBvbmUgYXJnICovCiAJCQkJQXNzZXJ0KGNvYWxlc2NlLT5hcmdzICE9IE5JTCk7CkBA IC0yMTE3LDEwICsyMTUzLDEwIEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3Rh dGUgKnN0YXRlLAogCQkJCQlFeHByCSAgICplID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKIAogCQkJ CQkvKiBldmFsdWF0ZSBhcmd1bWVudCwgZGlyZWN0bHkgaW50byByZXN1bHQgZGF0dW0gKi8KLQkJ CQkJRXhlY0luaXRFeHByUmVjKGUsIHN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJCQkJRXhlY0lu aXRFeHByUmVjKGUsIHN0YXRlLCByZXN2LCByZXNudWxsLCByZXNlcnJvcik7CiAKLQkJCQkJLyog aWYgaXQncyBub3QgbnVsbCwgc2tpcCB0byBlbmQgb2YgQ09BTEVTQ0UgZXhwciAqLwotCQkJCQlz Y3JhdGNoLm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OT1RfTlVMTDsKKwkJCQkJLyogaWYgaXQncyBu b3QgbnVsbC9lcnJvciwgc2tpcCB0byBlbmQgb2YgQ09BTEVTQ0UgZXhwciAqLworCQkJCQlzY3Jh dGNoLm9wY29kZSA9IGp1bXBfdGVzdF9vcGNvZGU7CiAJCQkJCXNjcmF0Y2guZC5qdW1wLmp1bXBk b25lID0gLTE7CS8qIGFkanVzdCBsYXRlciAqLwogCQkJCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRl LCAmc2NyYXRjaCk7CiAKQEAgLTIxMzksNyArMjE3NSw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHBy ICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCXsKIAkJCQkJRXhwckV2YWxTdGVwICphcyA9 ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChsYyldOwogCi0JCQkJCUFzc2VydChhcy0+b3Bjb2Rl ID09IEVFT1BfSlVNUF9JRl9OT1RfTlVMTCk7CisJCQkJCUFzc2VydChhcy0+b3Bjb2RlID09IGp1 bXBfdGVzdF9vcGNvZGUpOwogCQkJCQlBc3NlcnQoYXMtPmQuanVtcC5qdW1wZG9uZSA9PSAtMSk7 CiAJCQkJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVuOwogCQkJCX0KQEAg LTIyMDEsNyArMjIzNyw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUg KnN0YXRlLAogCiAJCQkJCUV4ZWNJbml0RXhwclJlYyhlLCBzdGF0ZSwKIAkJCQkJCQkJCSZzY3Jh dGNoLmQubWlubWF4LnZhbHVlc1tvZmZdLAotCQkJCQkJCQkJJnNjcmF0Y2guZC5taW5tYXgubnVs bHNbb2ZmXSk7CisJCQkJCQkJCQkmc2NyYXRjaC5kLm1pbm1heC5udWxsc1tvZmZdLCBOVUxMKTsK IAkJCQkJb2ZmKys7CiAJCQkJfQogCkBAIC0yMjU2LDcgKzIyOTIsNyBAQCBFeGVjSW5pdEV4cHJS ZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAogCQkJCQlFeGVjSW5pdEV4cHJSZWMo ZSwgc3RhdGUsCiAJCQkJCQkJCQkmc2NyYXRjaC5kLnhtbGV4cHIubmFtZWRfYXJndmFsdWVbb2Zm XSwKLQkJCQkJCQkJCSZzY3JhdGNoLmQueG1sZXhwci5uYW1lZF9hcmdudWxsW29mZl0pOworCQkJ CQkJCQkJJnNjcmF0Y2guZC54bWxleHByLm5hbWVkX2FyZ251bGxbb2ZmXSwgTlVMTCk7CiAJCQkJ CW9mZisrOwogCQkJCX0KIApAQCAtMjI2Nyw3ICsyMzAzLDcgQEAgRXhlY0luaXRFeHByUmVjKEV4 cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAKIAkJCQkJRXhlY0luaXRFeHByUmVjKGUsIHN0 YXRlLAogCQkJCQkJCQkJJnNjcmF0Y2guZC54bWxleHByLmFyZ3ZhbHVlW29mZl0sCi0JCQkJCQkJ CQkmc2NyYXRjaC5kLnhtbGV4cHIuYXJnbnVsbFtvZmZdKTsKKwkJCQkJCQkJCSZzY3JhdGNoLmQu eG1sZXhwci5hcmdudWxsW29mZl0sIE5VTEwpOwogCQkJCQlvZmYrKzsKIAkJCQl9CiAKQEAgLTIz MDQsNyArMjM0MCw3IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0 YXRlLAogCiAJCQkJLyogZmlyc3QgZXZhbHVhdGUgYXJndW1lbnQgaW50byByZXN1bHQgdmFyaWFi bGUgKi8KIAkJCQlFeGVjSW5pdEV4cHJSZWMobnRlc3QtPmFyZywgc3RhdGUsCi0JCQkJCQkJCXJl c3YsIHJlc251bGwpOworCQkJCQkJCQlyZXN2LCByZXNudWxsLCBOVUxMKTsKIAogCQkJCS8qIHRo ZW4gcHVzaCB0aGUgdGVzdCBvZiB0aGF0IGFyZ3VtZW50ICovCiAJCQkJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgJnNjcmF0Y2gpOwpAQCAtMjMyMSw3ICsyMzU3LDcgQEAgRXhlY0luaXRFeHByUmVj KEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJICogYW5kIHdpbGwgZ2V0IG92ZXJ3 cml0dGVuIGJ5IHRoZSBiZWxvdyBFRU9QX0JPT0xURVNUX0lTXyoKIAkJCQkgKiBzdGVwLgogCQkJ CSAqLwotCQkJCUV4ZWNJbml0RXhwclJlYyhidGVzdC0+YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVs bCk7CisJCQkJRXhlY0luaXRFeHByUmVjKGJ0ZXN0LT5hcmcsIHN0YXRlLCByZXN2LCByZXNudWxs LCBOVUxMKTsKIAogCQkJCXN3aXRjaCAoYnRlc3QtPmJvb2x0ZXN0dHlwZSkKIAkJCQl7CkBAIC0y MzU5LDcgKzIzOTUsNyBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpz dGF0ZSwKIAkJCQlDb2VyY2VUb0RvbWFpbiAqY3Rlc3QgPSAoQ29lcmNlVG9Eb21haW4gKikgbm9k ZTsKIAogCQkJCUV4ZWNJbml0Q29lcmNlVG9Eb21haW4oJnNjcmF0Y2gsIGN0ZXN0LCBzdGF0ZSwK LQkJCQkJCQkJCSAgIHJlc3YsIHJlc251bGwpOworCQkJCQkJCQkJICAgcmVzdiwgcmVzbnVsbCwg TlVMTCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTI0NDIsNyArMjQ3OCw3IEBAIEV4cHJFdmFs UHVzaFN0ZXAoRXhwclN0YXRlICplcywgY29uc3QgRXhwckV2YWxTdGVwICpzKQogICovCiBzdGF0 aWMgdm9pZAogRXhlY0luaXRGdW5jKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgRXhwciAqbm9kZSwg TGlzdCAqYXJncywgT2lkIGZ1bmNpZCwKLQkJCSBPaWQgaW5wdXRjb2xsaWQsIEV4cHJTdGF0ZSAq c3RhdGUpCisJCQkgT2lkIGlucHV0Y29sbGlkLCBFeHByU3RhdGUgKnN0YXRlLCBFcnJvclNhdmVD b250ZXh0ICplc2NvbnRleHQpCiB7CiAJaW50CQkJbmFyZ3MgPSBsaXN0X2xlbmd0aChhcmdzKTsK IAlBY2xSZXN1bHQJYWNscmVzdWx0OwpAQCAtMjQ4Myw3ICsyNTE5LDcgQEAgRXhlY0luaXRGdW5j KEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgRXhwciAqbm9kZSwgTGlzdCAqYXJncywgT2lkIGZ1bmNp ZCwKIAogCS8qIEluaXRpYWxpemUgZnVuY3Rpb24gY2FsbCBwYXJhbWV0ZXIgc3RydWN0dXJlIHRv byAqLwogCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgqZmNpbmZvLCBmbGluZm8sCi0JCQkJCQkJ IG5hcmdzLCBpbnB1dGNvbGxpZCwgTlVMTCwgTlVMTCk7CisJCQkJCQkJIG5hcmdzLCBpbnB1dGNv bGxpZCwgKGZtTm9kZVB0cikgZXNjb250ZXh0LCBOVUxMKTsKIAogCS8qIEtlZXAgZXh0cmEgY29w aWVzIG9mIHRoaXMgaW5mbyB0byBzYXZlIGFuIGluZGlyZWN0aW9uIGF0IHJ1bnRpbWUgKi8KIAlz Y3JhdGNoLT5kLmZ1bmMuZm5fYWRkciA9IGZsaW5mby0+Zm5fYWRkcjsKQEAgLTI1MTksNyArMjU1 NSw3IEBAIEV4ZWNJbml0RnVuYyhFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIEV4cHIgKm5vZGUsIExp c3QgKmFyZ3MsIE9pZCBmdW5jaWQsCiAJCXsKIAkJCUV4ZWNJbml0RXhwclJlYyhhcmcsIHN0YXRl LAogCQkJCQkJCSZmY2luZm8tPmFyZ3NbYXJnbm9dLnZhbHVlLAotCQkJCQkJCSZmY2luZm8tPmFy Z3NbYXJnbm9dLmlzbnVsbCk7CisJCQkJCQkJJmZjaW5mby0+YXJnc1thcmdub10uaXNudWxsLCBO VUxMKTsKIAkJfQogCQlhcmdubysrOwogCX0KQEAgLTI1NzAsNiArMjYwNiw3IEBAIEV4ZWNQdXNo RXhwclNsb3RzKEV4cHJTdGF0ZSAqc3RhdGUsIExhc3RBdHRudW1JbmZvICppbmZvKQogCiAJc2Ny YXRjaC5yZXN2YWx1ZSA9IE5VTEw7CiAJc2NyYXRjaC5yZXNudWxsID0gTlVMTDsKKwlzY3JhdGNo LnJlc2Vycm9yID0gTlVMTDsKIAogCS8qIEVtaXQgc3RlcHMgYXMgbmVlZGVkICovCiAJaWYgKGlu Zm8tPmxhc3RfaW5uZXIgPiAwKQpAQCAtMjgzNCw3ICsyODcxLDcgQEAgRXhlY0luaXRXaG9sZVJv d1ZhcihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIFZhciAqdmFyaWFibGUsIEV4cHJTdGF0ZSAqc3Rh dGUpCiAgKi8KIHN0YXRpYyB2b2lkCiBFeGVjSW5pdFN1YnNjcmlwdGluZ1JlZihFeHByRXZhbFN0 ZXAgKnNjcmF0Y2gsIFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLAotCQkJCQkJRXhwclN0YXRlICpz dGF0ZSwgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpCisJCQkJCQlFeHByU3RhdGUgKnN0YXRl LCBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwgYm9vbCAqcmVzZXJyb3IpCiB7CiAJYm9vbAkJ aXNBc3NpZ25tZW50ID0gKHNic3JlZi0+cmVmYXNzZ25leHByICE9IE5VTEwpOwogCWludAkJCW51 cHBlciA9IGxpc3RfbGVuZ3RoKHNic3JlZi0+cmVmdXBwZXJpbmRleHByKTsKQEAgLTI4OTcsNyAr MjkzNCw3IEBAIEV4ZWNJbml0U3Vic2NyaXB0aW5nUmVmKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwg U3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsCiAJICogYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGZpbmFs IEVFT1BfU0JTUkVGX0ZFVENIL0FTU0lHTiBzdGVwLCB3aGljaCBpcwogCSAqIHB1c2hlZCBsYXN0 LgogCSAqLwotCUV4ZWNJbml0RXhwclJlYyhzYnNyZWYtPnJlZmV4cHIsIHN0YXRlLCByZXN2LCBy ZXNudWxsKTsKKwlFeGVjSW5pdEV4cHJSZWMoc2JzcmVmLT5yZWZleHByLCBzdGF0ZSwgcmVzdiwg cmVzbnVsbCwgTlVMTCk7CiAKIAkvKgogCSAqIElmIHJlZmV4cHIgeWllbGRzIE5VTEwsIGFuZCB0 aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBzdHJpY3QsIHRoZW4gcmVzdWx0CkBAIC0yOTMxLDcgKzI5 NjgsNyBAQCBFeGVjSW5pdFN1YnNjcmlwdGluZ1JlZihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIFN1 YnNjcmlwdGluZ1JlZiAqc2JzcmVmLAogCQkJLyogRWFjaCBzdWJzY3JpcHQgaXMgZXZhbHVhdGVk IGludG8gYXBwcm9wcmlhdGUgYXJyYXkgZW50cnkgKi8KIAkJCUV4ZWNJbml0RXhwclJlYyhlLCBz dGF0ZSwKIAkJCQkJCQkmc2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhbaV0sCi0JCQkJCQkJJnNic3Jl ZnN0YXRlLT51cHBlcmluZGV4bnVsbFtpXSk7CisJCQkJCQkJJnNic3JlZnN0YXRlLT51cHBlcmlu ZGV4bnVsbFtpXSwgTlVMTCk7CiAJCX0KIAkJaSsrOwogCX0KQEAgLTI5NTQsNyArMjk5MSw3IEBA IEV4ZWNJbml0U3Vic2NyaXB0aW5nUmVmKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgU3Vic2NyaXB0 aW5nUmVmICpzYnNyZWYsCiAJCQkvKiBFYWNoIHN1YnNjcmlwdCBpcyBldmFsdWF0ZWQgaW50byBh cHByb3ByaWF0ZSBhcnJheSBlbnRyeSAqLwogCQkJRXhlY0luaXRFeHByUmVjKGUsIHN0YXRlLAog CQkJCQkJCSZzYnNyZWZzdGF0ZS0+bG93ZXJpbmRleFtpXSwKLQkJCQkJCQkmc2JzcmVmc3RhdGUt Pmxvd2VyaW5kZXhudWxsW2ldKTsKKwkJCQkJCQkmc2JzcmVmc3RhdGUtPmxvd2VyaW5kZXhudWxs W2ldLCBOVUxMKTsKIAkJfQogCQlpKys7CiAJfQpAQCAtMzAxOCw3ICszMDU1LDcgQEAgRXhlY0lu aXRTdWJzY3JpcHRpbmdSZWYoRXhwckV2YWxTdGVwICpzY3JhdGNoLCBTdWJzY3JpcHRpbmdSZWYg KnNic3JlZiwKIAogCQkvKiBldmFsdWF0ZSByZXBsYWNlbWVudCB2YWx1ZSBpbnRvIHJlcGxhY2V2 YWx1ZS9yZXBsYWNlbnVsbCAqLwogCQlFeGVjSW5pdEV4cHJSZWMoc2JzcmVmLT5yZWZhc3NnbmV4 cHIsIHN0YXRlLAotCQkJCQkJJnNic3JlZnN0YXRlLT5yZXBsYWNldmFsdWUsICZzYnNyZWZzdGF0 ZS0+cmVwbGFjZW51bGwpOworCQkJCQkJJnNic3JlZnN0YXRlLT5yZXBsYWNldmFsdWUsICZzYnNy ZWZzdGF0ZS0+cmVwbGFjZW51bGwsIE5VTEwpOwogCiAJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZh bCA9IHNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7CiAJCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwg PSBzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKQEAgLTMxMDcsMTEgKzMxNDQsMTIgQEAgaXNBc3Np Z25tZW50SW5kaXJlY3Rpb25FeHByKEV4cHIgKmV4cHIpCiAgKi8KIHN0YXRpYyB2b2lkCiBFeGVj SW5pdENvZXJjZVRvRG9tYWluKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgQ29lcmNlVG9Eb21haW4g KmN0ZXN0LAotCQkJCQkgICBFeHByU3RhdGUgKnN0YXRlLCBEYXR1bSAqcmVzdiwgYm9vbCAqcmVz bnVsbCkKKwkJCQkJICAgRXhwclN0YXRlICpzdGF0ZSwgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251 bGwsIGJvb2wgKnJlc2Vycm9yKQogewogCURvbWFpbkNvbnN0cmFpbnRSZWYgKmNvbnN0cmFpbnRf cmVmOwogCURhdHVtCSAgICpkb21haW52YWwgPSBOVUxMOwogCWJvb2wJICAgKmRvbWFpbm51bGwg PSBOVUxMOworCWJvb2wJICAgKmRvbWFpbmVycm9yID0gTlVMTDsKIAlMaXN0Q2VsbCAgICpsOwog CiAJc2NyYXRjaC0+ZC5kb21haW5jaGVjay5yZXN1bHR0eXBlID0gY3Rlc3QtPnJlc3VsdHR5cGU7 CkBAIC0zMTI0LDcgKzMxNjIsNyBAQCBFeGVjSW5pdENvZXJjZVRvRG9tYWluKEV4cHJFdmFsU3Rl cCAqc2NyYXRjaCwgQ29lcmNlVG9Eb21haW4gKmN0ZXN0LAogCSAqIGlmIHRoZXJlJ3MgY29uc3Ry YWludCBmYWlsdXJlcyB0aGVyZSdsbCBiZSBlcnJvcnMsIG90aGVyd2lzZSBpdCdzIHdoYXQKIAkg KiBuZWVkcyB0byBiZSByZXR1cm5lZC4KIAkgKi8KLQlFeGVjSW5pdEV4cHJSZWMoY3Rlc3QtPmFy Zywgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCUV4ZWNJbml0RXhwclJlYyhjdGVzdC0+YXJnLCBz dGF0ZSwgcmVzdiwgcmVzbnVsbCwgTlVMTCk7CiAKIAkvKgogCSAqIE5vdGU6IGlmIHRoZSBhcmd1 bWVudCBpcyBvZiB2YXJsZW5hIHR5cGUsIGl0IGNvdWxkIGJlIGEgUi9XIGV4cGFuZGVkCkBAIC0z MTk2LDExICszMjM0LDEzIEBAIEV4ZWNJbml0Q29lcmNlVG9Eb21haW4oRXhwckV2YWxTdGVwICpz Y3JhdGNoLCBDb2VyY2VUb0RvbWFpbiAqY3Rlc3QsCiAJCQkJCQkvKiBZZXMsIHNvIG1ha2Ugb3V0 cHV0IHdvcmtzcGFjZSBmb3IgTUFLRV9SRUFET05MWSAqLwogCQkJCQkJZG9tYWludmFsID0gKERh dHVtICopIHBhbGxvYyhzaXplb2YoRGF0dW0pKTsKIAkJCQkJCWRvbWFpbm51bGwgPSAoYm9vbCAq KSBwYWxsb2Moc2l6ZW9mKGJvb2wpKTsKKwkJCQkJCWRvbWFpbmVycm9yID0gKGJvb2wgKikgcGFs bG9jKHNpemVvZihib29sKSk7CiAKIAkJCQkJCS8qIEVtaXQgTUFLRV9SRUFET05MWSAqLwogCQkJ CQkJc2NyYXRjaDIub3Bjb2RlID0gRUVPUF9NQUtFX1JFQURPTkxZOwogCQkJCQkJc2NyYXRjaDIu cmVzdmFsdWUgPSBkb21haW52YWw7CiAJCQkJCQlzY3JhdGNoMi5yZXNudWxsID0gZG9tYWlubnVs bDsKKwkJCQkJCXNjcmF0Y2gyLnJlc2Vycm9yID0gZG9tYWluZXJyb3I7CiAJCQkJCQlzY3JhdGNo Mi5kLm1ha2VfcmVhZG9ubHkudmFsdWUgPSByZXN2OwogCQkJCQkJc2NyYXRjaDIuZC5tYWtlX3Jl YWRvbmx5LmlzbnVsbCA9IHJlc251bGw7CiAJCQkJCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCAm c2NyYXRjaDIpOwpAQCAtMzIyNyw3ICszMjY3LDcgQEAgRXhlY0luaXRDb2VyY2VUb0RvbWFpbihF eHByRXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9tYWluICpjdGVzdCwKIAkJCQkvKiBldmFs dWF0ZSBjaGVjayBleHByZXNzaW9uIHZhbHVlICovCiAJCQkJRXhlY0luaXRFeHByUmVjKGNvbi0+ Y2hlY2tfZXhwciwgc3RhdGUsCiAJCQkJCQkJCXNjcmF0Y2gtPmQuZG9tYWluY2hlY2suY2hlY2t2 YWx1ZSwKLQkJCQkJCQkJc2NyYXRjaC0+ZC5kb21haW5jaGVjay5jaGVja251bGwpOworCQkJCQkJ CQlzY3JhdGNoLT5kLmRvbWFpbmNoZWNrLmNoZWNrbnVsbCwgTlVMTCk7CiAKIAkJCQlzdGF0ZS0+ aW5uZXJtb3N0X2RvbWFpbnZhbCA9IHNhdmVfaW5uZXJtb3N0X2RvbWFpbnZhbDsKIAkJCQlzdGF0 ZS0+aW5uZXJtb3N0X2RvbWFpbm51bGwgPSBzYXZlX2lubmVybW9zdF9kb21haW5udWxsOwpAQCAt MzMxOSw3ICszMzU5LDcgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBB Z2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCQl7CiAJCQkvKiBldmFsdWF0ZSBmaWx0ZXIgZXhwcmVz c2lvbiAqLwogCQkJRXhlY0luaXRFeHByUmVjKHBlcnRyYW5zLT5hZ2dyZWYtPmFnZ2ZpbHRlciwg c3RhdGUsCi0JCQkJCQkJJnN0YXRlLT5yZXN2YWx1ZSwgJnN0YXRlLT5yZXNudWxsKTsKKwkJCQkJ CQkmc3RhdGUtPnJlc3ZhbHVlLCAmc3RhdGUtPnJlc251bGwsIE5VTEwpOwogCQkJLyogYW5kIGp1 bXAgb3V0IGlmIGZhbHNlICovCiAJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OT1Rf VFJVRTsKIAkJCXNjcmF0Y2guZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIGFkanVzdCBsYXRlciAq LwpAQCAtMzM1OSw3ICszMzk5LDcgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0 YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCQkJCSAqLwogCQkJCUV4ZWNJbml0RXhwclJl Yyhzb3VyY2VfdGxlLT5leHByLCBzdGF0ZSwKIAkJCQkJCQkJJnRyYW5zX2ZjaW5mby0+YXJnc1th cmdubyArIDFdLnZhbHVlLAotCQkJCQkJCQkmdHJhbnNfZmNpbmZvLT5hcmdzW2FyZ25vICsgMV0u aXNudWxsKTsKKwkJCQkJCQkJJnRyYW5zX2ZjaW5mby0+YXJnc1thcmdubyArIDFdLmlzbnVsbCwg TlVMTCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0zMzY4LDcgKzM0MDgsNyBAQCBFeGVjQnVp bGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJ CQkJLyogZXZhbHVhdGUgYXJndW1lbnQgKi8KIAkJCQlFeGVjSW5pdEV4cHJSZWMoc291cmNlX3Rs ZS0+ZXhwciwgc3RhdGUsCiAJCQkJCQkJCSZkc19mY2luZm8tPmFyZ3NbMF0udmFsdWUsCi0JCQkJ CQkJCSZkc19mY2luZm8tPmFyZ3NbMF0uaXNudWxsKTsKKwkJCQkJCQkJJmRzX2ZjaW5mby0+YXJn c1swXS5pc251bGwsIE5VTEwpOwogCiAJCQkJLyogRHVtbXkgc2Vjb25kIGFyZ3VtZW50IGZvciB0 eXBlLXNhZmV0eSByZWFzb25zICovCiAJCQkJZHNfZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0gUG9p bnRlckdldERhdHVtKE5VTEwpOwpAQCAtMzQzMCw3ICszNDcwLDcgQEAgRXhlY0J1aWxkQWdnVHJh bnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCQkJCSAqLwog CQkJCUV4ZWNJbml0RXhwclJlYyhzb3VyY2VfdGxlLT5leHByLCBzdGF0ZSwKIAkJCQkJCQkJJnRy YW5zX2ZjaW5mby0+YXJnc1thcmdubyArIDFdLnZhbHVlLAotCQkJCQkJCQkmdHJhbnNfZmNpbmZv LT5hcmdzW2FyZ25vICsgMV0uaXNudWxsKTsKKwkJCQkJCQkJJnRyYW5zX2ZjaW5mby0+YXJnc1th cmdubyArIDFdLmlzbnVsbCwgTlVMTCk7CiAJCQkJYXJnbm8rKzsKIAkJCX0KIAkJCUFzc2VydChw ZXJ0cmFucy0+bnVtVHJhbnNJbnB1dHMgPT0gYXJnbm8pOwpAQCAtMzQ0OCw3ICszNDg4LDcgQEAg RXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBo YXNlLAogCiAJCQlFeGVjSW5pdEV4cHJSZWMoc291cmNlX3RsZS0+ZXhwciwgc3RhdGUsCiAJCQkJ CQkJJnN0YXRlLT5yZXN2YWx1ZSwKLQkJCQkJCQkmc3RhdGUtPnJlc251bGwpOworCQkJCQkJCSZz dGF0ZS0+cmVzbnVsbCwgTlVMTCk7CiAJCQlzdHJpY3RudWxscyA9ICZzdGF0ZS0+cmVzbnVsbDsK IAkJCWFyZ25vKys7CiAKQEAgLTM0NzEsNyArMzUxMSw3IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFn Z1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKIAkJCQlUYXJnZXRFbnRy eSAqc291cmNlX3RsZSA9IChUYXJnZXRFbnRyeSAqKSBsZmlyc3QoYXJnKTsKIAogCQkJCUV4ZWNJ bml0RXhwclJlYyhzb3VyY2VfdGxlLT5leHByLCBzdGF0ZSwKLQkJCQkJCQkJJnZhbHVlc1thcmdu b10sICZudWxsc1thcmdub10pOworCQkJCQkJCQkmdmFsdWVzW2FyZ25vXSwgJm51bGxzW2FyZ25v XSwgTlVMTCk7CiAJCQkJYXJnbm8rKzsKIAkJCX0KIAkJCUFzc2VydChwZXJ0cmFucy0+bnVtSW5w dXRzID09IGFyZ25vKTsKQEAgLTM1ODUsNiArMzYyNSw3IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFn Z1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKIAogCXNjcmF0Y2gucmVz dmFsdWUgPSBOVUxMOwogCXNjcmF0Y2gucmVzbnVsbCA9IE5VTEw7CisJc2NyYXRjaC5yZXNlcnJv ciA9IE5VTEw7CiAJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0RPTkU7CiAJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgJnNjcmF0Y2gpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpp bmRleCAxZGFiMjc4N2I3Li42Y2M2ZmExNzE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAi bm9kZXMvbWlzY25vZGVzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC00MzQsNiArNDM1LDcg QEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0 LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX0pVTVAsCiAJCSYmQ0FTRV9FRU9QX0pVTVBf SUZfTlVMTCwKIAkJJiZDQVNFX0VFT1BfSlVNUF9JRl9OT1RfTlVMTCwKKwkJJiZDQVNFX0VFT1Bf SlVNUF9JRl9OT1RfRVJST1IsCiAJCSYmQ0FTRV9FRU9QX0pVTVBfSUZfTk9UX1RSVUUsCiAJCSYm Q0FTRV9FRU9QX05VTExURVNUX0lTTlVMTCwKIAkJJiZDQVNFX0VFT1BfTlVMTFRFU1RfSVNOT1RO VUxMLApAQCAtNzI5LDYgKzczMSwxMyBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRl LCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJCSpvcC0+cmVzdmFsdWUg PSBkOwogCQkJKm9wLT5yZXNudWxsID0gZmNpbmZvLT5pc251bGw7CiAKKwkJCWlmIChTT0ZUX0VS Uk9SX09DQ1VSUkVEKGZjaW5mby0+Y29udGV4dCkpCisJCQl7CisJCQkJRXJyb3JTYXZlQ29udGV4 dCAqZXNjb250ZXh0ID0gKEVycm9yU2F2ZUNvbnRleHQgKikgZmNpbmZvLT5jb250ZXh0OworCQkJ CWVzY29udGV4dC0+ZXJyb3Jfb2NjdXJyZWQgPSBmYWxzZTsKKwkJCQkqb3AtPnJlc2Vycm9yID0g dHJ1ZTsKKwkJCX0KKwogCQkJRUVPX05FWFQoKTsKIAkJfQogCkBAIC05NjYsNiArOTc1LDIxIEBA IEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwg Ym9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfSlVN UF9JRl9OT1RfRVJST1IpCisJCXsKKwkJCS8qIFRyYW5zZmVyIGNvbnRyb2wgaWYgY3VycmVudCBy ZXN1bHQgaXMgbm9uLWVycm9yICovCisJCQlpZiAoISpvcC0+cmVzZXJyb3IpCisJCQl7CisJCQkJ Km9wLT5yZXNlcnJvciA9IGZhbHNlOworCQkJCUVFT19KVU1QKG9wLT5kLmp1bXAuanVtcGRvbmUp OworCQkJfQorCisJCQkvKiByZXNldCBlcnJvciBmbGFnICovCisJCQkqb3AtPnJlc2Vycm9yID0g ZmFsc2U7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0pVTVBfSUZf Tk9UX1RSVUUpCiAJCXsKIAkJCS8qIFRyYW5zZmVyIGNvbnRyb2wgaWYgY3VycmVudCByZXN1bHQg aXMgbnVsbCBvciBmYWxzZSAqLwpAQCAtMTE4MSwxMCArMTIwNSwxNyBAQCBFeGVjSW50ZXJwRXhw cihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkK IAogCQkJCWZjaW5mb19pbi0+aXNudWxsID0gZmFsc2U7CiAJCQkJZCA9IEZ1bmN0aW9uQ2FsbElu dm9rZShmY2luZm9faW4pOworCiAJCQkJKm9wLT5yZXN2YWx1ZSA9IGQ7CiAKLQkJCQkvKiBTaG91 bGQgZ2V0IG51bGwgcmVzdWx0IGlmIGFuZCBvbmx5IGlmIHN0ciBpcyBOVUxMICovCi0JCQkJaWYg KHN0ciA9PSBOVUxMKQorCQkJCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKGZjaW5mb19pbi0+Y29u dGV4dCkpCisJCQkJeworCQkJCQlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQgPSAoRXJyb3JT YXZlQ29udGV4dCAqKSBmY2luZm9faW4tPmNvbnRleHQ7CisJCQkJCWVzY29udGV4dC0+ZXJyb3Jf b2NjdXJyZWQgPSBmYWxzZTsKKwkJCQkJKm9wLT5yZXNlcnJvciA9IHRydWU7CisJCQkJfQorCQkJ CS8qIElmIG5vIGVycm9yLCBzaG91bGQgZ2V0IG51bGwgcmVzdWx0IGlmIGFuZCBvbmx5IGlmIHN0 ciBpcyBOVUxMICovCisJCQkJZWxzZSBpZiAoc3RyID09IE5VTEwpCiAJCQkJewogCQkJCQlBc3Nl cnQoKm9wLT5yZXNudWxsKTsKIAkJCQkJQXNzZXJ0KGZjaW5mb19pbi0+aXNudWxsKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggZjExNDMzN2Y4ZS4uZjk5YjEwOGNlYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2Jh Y2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTkxOSw2ICs5MTksMjEgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCisJCQlj YXNlIEVFT1BfSlVNUF9JRl9OT1RfRVJST1I6CisJCQkJeworCQkJCQlMTFZNVmFsdWVSZWYgdl9y ZXNlcnJvcjsKKworCQkJCQkvKiBUcmFuc2ZlciBjb250cm9sIGlmIGN1cnJlbnQgcmVzdWx0IGlz IG5vbi1lcnJvciAqLworCisJCQkJCXZfcmVzbnVsbCA9IExMVk1CdWlsZExvYWQoYiwgdl9yZXNl cnJvcnAsICIiKTsKKworCQkJCQlMTFZNQnVpbGRDb25kQnIoYiwKKwkJCQkJCQkJCUxMVk1CdWls ZElDbXAoYiwgTExWTUludEVRLCB2X3Jlc2Vycm9yLAorCQkJCQkJCQkJCQkJICBsX3Nib29sX2Nv bnN0KDApLCAiIiksCisJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qdW1wLmp1bXBkb25lXSwKKwkJ CQkJCQkJCW9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0KIAogCQkJY2Fz ZSBFRU9QX0pVTVBfSUZfTk9UX1RSVUU6CiAJCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCBj ODVkOGZlOTc1Li4yMjlkMWU4NGM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtl ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtNTE3LDcgKzUx Nyw4IEBAIG1ha2VDb2x1bW5EZWYoY29uc3QgY2hhciAqY29sbmFtZSwgT2lkIHR5cGVPaWQsIGlu dDMyIHR5cG1vZCwgT2lkIGNvbGxPaWQpCiAgKi8KIEZ1bmNFeHByICoKIG1ha2VGdW5jRXhwcihP aWQgZnVuY2lkLCBPaWQgcmV0dHlwZSwgTGlzdCAqYXJncywKLQkJCSBPaWQgZnVuY2NvbGxpZCwg T2lkIGlucHV0Y29sbGlkLCBDb2VyY2lvbkZvcm0gZmZvcm1hdCkKKwkJCSBPaWQgZnVuY2NvbGxp ZCwgT2lkIGlucHV0Y29sbGlkLCBDb2VyY2lvbkZvcm0gZmZvcm1hdCwKKwkJCSBib29sIHNhZmVf bW9kZSkKIHsKIAlGdW5jRXhwciAgICpmdW5jZXhwcjsKIApAQCAtNTMwLDYgKzUzMSw3IEBAIG1h a2VGdW5jRXhwcihPaWQgZnVuY2lkLCBPaWQgcmV0dHlwZSwgTGlzdCAqYXJncywKIAlmdW5jZXhw ci0+ZnVuY2NvbGxpZCA9IGZ1bmNjb2xsaWQ7CiAJZnVuY2V4cHItPmlucHV0Y29sbGlkID0gaW5w dXRjb2xsaWQ7CiAJZnVuY2V4cHItPmFyZ3MgPSBhcmdzOworCWZ1bmNleHByLT5zYWZlX21vZGUg PSBzYWZlX21vZGU7CiAJZnVuY2V4cHItPmxvY2F0aW9uID0gLTE7CiAKIAlyZXR1cm4gZnVuY2V4 cHI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNr ZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4IGFmODYyMGNlYjcuLjdiYzNlMTMyMDggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL25vZGVGdW5jcy5jCkBAIC0xNTIyLDEzICsxNTIyLDE2IEBAIGV4cHJMb2NhdGlvbihjb25z dCBOb2RlICpleHByKQogCQkJewogCQkJCWNvbnN0IFR5cGVDYXN0ICp0YyA9IChjb25zdCBUeXBl Q2FzdCAqKSBleHByOwogCi0JCQkJLyoKLQkJCQkgKiBUaGlzIGNvdWxkIHJlcHJlc2VudCBDQVNU KCksIDo6LCBvciBUeXBlTmFtZSAnbGl0ZXJhbCcsIHNvCi0JCQkJICogYW55IG9mIHRoZSBjb21w b25lbnRzIG1pZ2h0IGJlIGxlZnRtb3N0LgotCQkJCSAqLwogCQkJCWxvYyA9IGV4cHJMb2NhdGlv bih0Yy0+YXJnKTsKLQkJCQlsb2MgPSBsZWZ0bW9zdExvYyhsb2MsIHRjLT50eXBlTmFtZS0+bG9j YXRpb24pOwotCQkJCWxvYyA9IGxlZnRtb3N0TG9jKGxvYywgdGMtPmxvY2F0aW9uKTsKKwkJCQlp ZiAobGlrZWx5KCF0Yy0+c2FmZV9tb2RlKSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMg Y291bGQgcmVwcmVzZW50IENBU1QoKSwgOjosIG9yIFR5cGVOYW1lICdsaXRlcmFsJywKKwkJCQkJ ICogc28gYW55IG9mIHRoZSBjb21wb25lbnRzIG1pZ2h0IGJlIGxlZnRtb3N0LgorCQkJCQkgKi8K KwkJCQkJbG9jID0gbGVmdG1vc3RMb2MobG9jLCB0Yy0+dHlwZU5hbWUtPmxvY2F0aW9uKTsKKwkJ CQkJbG9jID0gbGVmdG1vc3RMb2MobG9jLCB0Yy0+bG9jYXRpb24pOworCQkJCX0KIAkJCX0KIAkJ CWJyZWFrOwogCQljYXNlIFRfQ29sbGF0ZUNsYXVzZToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Ns YXVzZXMuYwppbmRleCBiZmZjODExMmFhLi5lMGIwZmZiOWE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvY2xhdXNlcy5jCkBAIC0yODk0LDYgKzI4OTQsNyBAQCBldmFsX2NvbnN0X2V4cHJlc3Np b25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQluZXdleHByLT5yZXN1bHR0eXBlID0gZXhwci0+ cmVzdWx0dHlwZTsKIAkJCQluZXdleHByLT5yZXN1bHRjb2xsaWQgPSBleHByLT5yZXN1bHRjb2xs aWQ7CiAJCQkJbmV3ZXhwci0+Y29lcmNlZm9ybWF0ID0gZXhwci0+Y29lcmNlZm9ybWF0OworCQkJ CW5ld2V4cHItPnNhZmVfbW9kZSA9IGV4cHItPnNhZmVfbW9kZTsKIAkJCQluZXdleHByLT5sb2Nh dGlvbiA9IGV4cHItPmxvY2F0aW9uOwogCQkJCXJldHVybiAoTm9kZSAqKSBuZXdleHByOwogCQkJ fQpAQCAtMzE1OCw3ICszMTU5LDcgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5v ZGUgKm5vZGUsCiAJCQkJCSAqIGRyb3AgZm9sbG93aW5nIGFyZ3VtZW50cyBzaW5jZSB0aGV5IHdp bGwgbmV2ZXIgYmUKIAkJCQkJICogcmVhY2hlZC4KIAkJCQkJICovCi0JCQkJCWlmIChJc0EoZSwg Q29uc3QpKQorCQkJCQlpZiAoKGNvYWxlc2NlZXhwci0+b3AgPT0gTlVMTF9URVNUKSAmJiBJc0Eo ZSwgQ29uc3QpKQogCQkJCQl7CiAJCQkJCQlpZiAoKChDb25zdCAqKSBlKS0+Y29uc3Rpc251bGwp CiAJCQkJCQkJY29udGludWU7CS8qIGRyb3AgbnVsbCBjb25zdGFudCAqLwpAQCAtMzE4Myw2ICsz MTg0LDcgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJ bmV3Y29hbGVzY2UtPmNvYWxlc2NldHlwZSA9IGNvYWxlc2NlZXhwci0+Y29hbGVzY2V0eXBlOwog CQkJCW5ld2NvYWxlc2NlLT5jb2FsZXNjZWNvbGxpZCA9IGNvYWxlc2NlZXhwci0+Y29hbGVzY2Vj b2xsaWQ7CiAJCQkJbmV3Y29hbGVzY2UtPmFyZ3MgPSBuZXdhcmdzOworCQkJCW5ld2NvYWxlc2Nl LT5vcCA9IGNvYWxlc2NlZXhwci0+b3A7CiAJCQkJbmV3Y29hbGVzY2UtPmxvY2F0aW9uID0gY29h bGVzY2VleHByLT5sb2NhdGlvbjsKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3Y29hbGVzY2U7CiAJ CQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueQppbmRleCBhZGMzZjhjZWQzLi4zZTI0ZmU1ZjcwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK QEAgLTY0Miw2ICs2NDIsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3Qo Y2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPHBhcnRi b3VuZHNwZWM+IFBhcnRpdGlvbkJvdW5kU3BlYwogJXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3Vu ZAogJXR5cGUgPGRlZmVsdD4JCWhhc2hfcGFydGJvdW5kX2VsZW0KKyV0eXBlIDxub2RlPgljYXN0 X29uX2Vycm9yX2NsYXVzZQorJXR5cGUgPG5vZGU+CWNhc3Rfb25fZXJyb3JfYWN0aW9uCiAKIAog LyoKQEAgLTY5MCw3ICs2OTIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxl Y3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCURFVEFDSCBE SUNUSU9OQVJZIERJU0FCTEVfUCBESVNDQVJEIERJU1RJTkNUIERPIERPQ1VNRU5UX1AgRE9NQUlO X1AKIAlET1VCTEVfUCBEUk9QCiAKLQlFQUNIIEVMU0UgRU5BQkxFX1AgRU5DT0RJTkcgRU5DUllQ VEVEIEVORF9QIEVOVU1fUCBFU0NBUEUgRVZFTlQgRVhDRVBUCisJRUFDSCBFTFNFIEVOQUJMRV9Q IEVOQ09ESU5HIEVOQ1JZUFRFRCBFTkRfUCBFTlVNX1AgRVJST1JfUCBFU0NBUEUgRVZFTlQgRVhD RVBUCiAJRVhDTFVERSBFWENMVURJTkcgRVhDTFVTSVZFIEVYRUNVVEUgRVhJU1RTIEVYUExBSU4g RVhQUkVTU0lPTgogCUVYVEVOU0lPTiBFWFRFUk5BTCBFWFRSQUNUCiAKQEAgLTE0Mzk5LDggKzE0 NDAxLDcgQEAgaW50ZXJ2YWxfc2Vjb25kOgogICogeW91IGV4cGVjdCEgIFNvIHdlIHVzZSAlcHJl YyBhbm5vdGF0aW9ucyBmcmVlbHkgdG8gc2V0IHByZWNlZGVuY2VzLgogICovCiBhX2V4cHI6CQlj X2V4cHIJCQkJCQkJCQl7ICQkID0gJDE7IH0KLQkJCXwgYV9leHByIFRZUEVDQVNUIFR5cGVuYW1l Ci0JCQkJCXsgJCQgPSBtYWtlVHlwZUNhc3QoJDEsICQzLCBAMik7IH0KKwkJCXwgYV9leHByIFRZ UEVDQVNUIFR5cGVuYW1lIHsgJCQgPSBtYWtlVHlwZUNhc3QoJDEsICQzLCBAMik7IH0KIAkJCXwg YV9leHByIENPTExBVEUgYW55X25hbWUKIAkJCQl7CiAJCQkJCUNvbGxhdGVDbGF1c2UgKm4gPSBt YWtlTm9kZShDb2xsYXRlQ2xhdXNlKTsKQEAgLTE1MzMwLDggKzE1MzMxLDI2IEBAIGZ1bmNfZXhw cl9jb21tb25fc3ViZXhwcjoKIAkJCQkJCQkJCQkJICAgQ09FUkNFX1NRTF9TWU5UQVgsCiAJCQkJ CQkJCQkJCSAgIEAxKTsKIAkJCQl9Ci0JCQl8IENBU1QgJygnIGFfZXhwciBBUyBUeXBlbmFtZSAn KScKLQkJCQl7ICQkID0gbWFrZVR5cGVDYXN0KCQzLCAkNSwgQDEpOyB9CisJCQl8IENBU1QgJygn IGFfZXhwciBBUyBUeXBlbmFtZSBjYXN0X29uX2Vycm9yX2NsYXVzZSAnKScKKwkJCQl7CisJCQkJ CVR5cGVDYXN0ICpjYXN0ID0gKFR5cGVDYXN0ICopIG1ha2VUeXBlQ2FzdCgkMywgJDUsIEAxKTsK KwkJCQkJaWYgKCQ2ID09IE5VTEwpCisJCQkJCQkkJCA9IChOb2RlICopIGNhc3Q7CisJCQkJCWVs c2UKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIE9uLWVycm9yIGFjdGlvbnMgbXVzdCB0aGVt c2VsdmVzIGJlIHR5cGVjYXN0IHRvIHRoZQorCQkJCQkJICogc2FtZSB0eXBlIGFzIHRoZSBvcmln aW5hbCBleHByZXNzaW9uLgorCQkJCQkJICovCisJCQkJCQlUeXBlQ2FzdCAqb25fZXJyID0gKFR5 cGVDYXN0ICopIG1ha2VUeXBlQ2FzdCgkNiwgJDUsIEA2KTsKKwkJCQkJCUNvYWxlc2NlRXhwciAq YyA9IG1ha2VOb2RlKENvYWxlc2NlRXhwcik7CisJCQkJCQljYXN0LT5zYWZlX21vZGUgPSB0cnVl OworCQkJCQkJYy0+YXJncyA9IGxpc3RfbWFrZTIoY2FzdCwgb25fZXJyKTsKKwkJCQkJCWMtPm9w ID0gRVJST1JfVEVTVDsKKwkJCQkJCWMtPmxvY2F0aW9uID0gQDE7CisJCQkJCQkkJCA9IChOb2Rl ICopIGM7CisJCQkJCX0KKwkJCQl9CiAJCQl8IEVYVFJBQ1QgJygnIGV4dHJhY3RfbGlzdCAnKScK IAkJCQl7CiAJCQkJCSQkID0gKE5vZGUgKikgbWFrZUZ1bmNDYWxsKFN5c3RlbUZ1bmNOYW1lKCJl eHRyYWN0IiksCkBAIC0xNTQ2Miw2ICsxNTQ4MSw3IEBAIGZ1bmNfZXhwcl9jb21tb25fc3ViZXhw cjoKIAkJCQkJQ29hbGVzY2VFeHByICpjID0gbWFrZU5vZGUoQ29hbGVzY2VFeHByKTsKIAogCQkJ CQljLT5hcmdzID0gJDM7CisJCQkJCWMtPm9wID0gTlVMTF9URVNUOwogCQkJCQljLT5sb2NhdGlv biA9IEAxOwogCQkJCQkkJCA9IChOb2RlICopIGM7CiAJCQkJfQpAQCAtMTU1NTEsNiArMTU1NzEs MTUgQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHByOgogCQkJCX0KIAkJOwogCitjYXN0X29uX2Vy cm9yX2NsYXVzZTogY2FzdF9vbl9lcnJvcl9hY3Rpb24gT04gRVJST1JfUCB7ICQkID0gJDE7IH0K KwkJCXwgLyogRU1QVFkgKi8geyAkJCA9IE5VTEw7IH0KKwkJOworCitjYXN0X29uX2Vycm9yX2Fj dGlvbjogRVJST1JfUCB7ICQkID0gTlVMTDsgfQorCQkJfCBOVUxMX1AgeyAkJCA9IG1ha2VOdWxs QUNvbnN0KC0xKTsgfQorCQkJfCBERUZBVUxUIGFfZXhwciB7ICQkID0gJDI7IH0KKwkJOworCiAv KgogICogU1FML1hNTCBzdXBwb3J0CiAgKi8KQEAgLTE2MTM4LDggKzE2MTY3LDggQEAgc3Vic3Ry X2xpc3Q6CiAJCQkJCSAqIGlzIHVua25vd24gb3IgZG9lc24ndCBoYXZlIGFuIGltcGxpY2l0IGNh c3QgdG8gaW50NC4KIAkJCQkJICovCiAJCQkJCSQkID0gbGlzdF9tYWtlMygkMSwgbWFrZUludENv bnN0KDEsIC0xKSwKLQkJCQkJCQkJCW1ha2VUeXBlQ2FzdCgkMywKLQkJCQkJCQkJCQkJCSBTeXN0 ZW1UeXBlTmFtZSgiaW50NCIpLCAtMSkpOworCQkJCQkJCQkJbWFrZVR5cGVDYXN0KCQzLCBTeXN0 ZW1UeXBlTmFtZSgiaW50NCIpLAorCQkJCQkJCQkJLTEpKTsKIAkJCQl9CiAJCQl8IGFfZXhwciBT SU1JTEFSIGFfZXhwciBFU0NBUEUgYV9leHByCiAJCQkJewpAQCAtMTY3OTksNiArMTY4MjgsNyBA QCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IEVOQ09ESU5HCiAJCQl8IEVOQ1JZUFRFRAogCQkJ fCBFTlVNX1AKKwkJCXwgRVJST1JfUAogCQkJfCBFU0NBUEUKIAkJCXwgRVZFTlQKIAkJCXwgRVhD TFVERQpAQCAtMTczNDYsNiArMTczNzYsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IEVO Q1JZUFRFRAogCQkJfCBFTkRfUAogCQkJfCBFTlVNX1AKKwkJCXwgRVJST1JfUAogCQkJfCBFU0NB UEUKIAkJCXwgRVZFTlQKIAkJCXwgRVhDTFVERQpAQCAtMTc3NDksNiArMTc3ODAsNyBAQCBtYWtl VHlwZUNhc3QoTm9kZSAqYXJnLCBUeXBlTmFtZSAqdHlwZW5hbWUsIGludCBsb2NhdGlvbikKIAog CW4tPmFyZyA9IGFyZzsKIAluLT50eXBlTmFtZSA9IHR5cGVuYW1lOworCW4tPnNhZmVfbW9kZSA9 IGZhbHNlOwogCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CiAJcmV0dXJuIChOb2RlICopIG47CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfYWdnLmMKaW5kZXggM2VmOWU4ZWU1ZS4uYjA4NDIyMjk3ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9hZ2cuYwpAQCAtMjAwNCw3ICsyMDA0LDggQEAgYnVpbGRfYWdncmVnYXRlX3Ry YW5zZm5fZXhwcihPaWQgKmFnZ19pbnB1dF90eXBlcywKIAkJCQkJCSBhcmdzLAogCQkJCQkJIElu dmFsaWRPaWQsCiAJCQkJCQkgYWdnX2lucHV0X2NvbGxhdGlvbiwKLQkJCQkJCSBDT0VSQ0VfRVhQ TElDSVRfQ0FMTCk7CisJCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NBTEwsCisJCQkJCQkgTlVMTCk7 CiAJZmV4cHItPmZ1bmN2YXJpYWRpYyA9IGFnZ192YXJpYWRpYzsKIAkqdHJhbnNmbmV4cHIgPSAo RXhwciAqKSBmZXhwcjsKIApAQCAtMjAyMCw3ICsyMDIxLDggQEAgYnVpbGRfYWdncmVnYXRlX3Ry YW5zZm5fZXhwcihPaWQgKmFnZ19pbnB1dF90eXBlcywKIAkJCQkJCQkJIGFyZ3MsCiAJCQkJCQkJ CSBJbnZhbGlkT2lkLAogCQkJCQkJCQkgYWdnX2lucHV0X2NvbGxhdGlvbiwKLQkJCQkJCQkJIENP RVJDRV9FWFBMSUNJVF9DQUxMKTsKKwkJCQkJCQkJIENPRVJDRV9FWFBMSUNJVF9DQUxMLAorCQkJ CQkJCQkgTlVMTCk7CiAJCQlmZXhwci0+ZnVuY3ZhcmlhZGljID0gYWdnX3ZhcmlhZGljOwogCQkJ KmludnRyYW5zZm5leHByID0gKEV4cHIgKikgZmV4cHI7CiAJCX0KQEAgLTIwNDgsNyArMjA1MCw4 IEBAIGJ1aWxkX2FnZ3JlZ2F0ZV9zZXJpYWxmbl9leHByKE9pZCBzZXJpYWxmbl9vaWQsCiAJCQkJ CQkgYXJncywKIAkJCQkJCSBJbnZhbGlkT2lkLAogCQkJCQkJIEludmFsaWRPaWQsCi0JCQkJCQkg Q09FUkNFX0VYUExJQ0lUX0NBTEwpOworCQkJCQkJIENPRVJDRV9FWFBMSUNJVF9DQUxMLAorCQkJ CQkJIE5VTEwpOwogCSpzZXJpYWxmbmV4cHIgPSAoRXhwciAqKSBmZXhwcjsKIH0KIApAQCAtMjA3 Miw3ICsyMDc1LDggQEAgYnVpbGRfYWdncmVnYXRlX2Rlc2VyaWFsZm5fZXhwcihPaWQgZGVzZXJp YWxmbl9vaWQsCiAJCQkJCQkgYXJncywKIAkJCQkJCSBJbnZhbGlkT2lkLAogCQkJCQkJIEludmFs aWRPaWQsCi0JCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NBTEwpOworCQkJCQkJIENPRVJDRV9FWFBM SUNJVF9DQUxMLAorCQkJCQkJIE5VTEwpOwogCSpkZXNlcmlhbGZuZXhwciA9IChFeHByICopIGZl eHByOwogfQogCkBAIC0yMTA5LDcgKzIxMTMsOCBAQCBidWlsZF9hZ2dyZWdhdGVfZmluYWxmbl9l eHByKE9pZCAqYWdnX2lucHV0X3R5cGVzLAogCQkJCQkJCQkJCSBhcmdzLAogCQkJCQkJCQkJCSBJ bnZhbGlkT2lkLAogCQkJCQkJCQkJCSBhZ2dfaW5wdXRfY29sbGF0aW9uLAotCQkJCQkJCQkJCSBD T0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisJCQkJCQkJCQkJIENPRVJDRV9FWFBMSUNJVF9DQUxMLAor CQkJCQkJCQkJCSBOVUxMKTsKIAkvKiBmaW5hbGZuIGlzIGN1cnJlbnRseSBuZXZlciB0cmVhdGVk IGFzIHZhcmlhZGljICovCiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9jb2VyY2UuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jb2VyY2UuYwppbmRleCA2MDkw ODExMWM4Li5jMDBlZjFiZDcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf Y29lcmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NvZXJjZS5jCkBAIC0zNiwx MyArMzYsMTUgQEAgc3RhdGljIE5vZGUgKmNvZXJjZV90eXBlX3R5cG1vZChOb2RlICpub2RlLAog CQkJCQkJCQlPaWQgdGFyZ2V0VHlwZUlkLCBpbnQzMiB0YXJnZXRUeXBNb2QsCiAJCQkJCQkJCUNv ZXJjaW9uQ29udGV4dCBjY29udGV4dCwgQ29lcmNpb25Gb3JtIGNmb3JtYXQsCiAJCQkJCQkJCWlu dCBsb2NhdGlvbiwKLQkJCQkJCQkJYm9vbCBoaWRlSW5wdXRDb2VyY2lvbik7CisJCQkJCQkJCWJv b2wgaGlkZUlucHV0Q29lcmNpb24sCisJCQkJCQkJCWJvb2wgKmNhc3RfZXJyb3JfZm91bmQpOwog c3RhdGljIHZvaWQgaGlkZV9jb2VyY2lvbl9ub2RlKE5vZGUgKm5vZGUpOwogc3RhdGljIE5vZGUg KmJ1aWxkX2NvZXJjaW9uX2V4cHJlc3Npb24oTm9kZSAqbm9kZSwKIAkJCQkJCQkJCSAgIENvZXJj aW9uUGF0aFR5cGUgcGF0aHR5cGUsCiAJCQkJCQkJCQkgICBPaWQgZnVuY0lkLAogCQkJCQkJCQkJ ICAgT2lkIHRhcmdldFR5cGVJZCwgaW50MzIgdGFyZ2V0VHlwTW9kLAogCQkJCQkJCQkJICAgQ29l cmNpb25Db250ZXh0IGNjb250ZXh0LCBDb2VyY2lvbkZvcm0gY2Zvcm1hdCwKKwkJCQkJCQkJCSAg IGJvb2wgKmNhc3RfZXJyb3JfZm91bmQsCiAJCQkJCQkJCQkgICBpbnQgbG9jYXRpb24pOwogc3Rh dGljIE5vZGUgKmNvZXJjZV9yZWNvcmRfdG9fY29tcGxleChQYXJzZVN0YXRlICpwc3RhdGUsIE5v ZGUgKm5vZGUsCiAJCQkJCQkJCQkgIE9pZCB0YXJnZXRUeXBlSWQsCkBAIC04MCw2ICs4MiwxOSBA QCBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBP aWQgZXhwcnR5cGUsCiAJCQkJCSAgQ29lcmNpb25Db250ZXh0IGNjb250ZXh0LAogCQkJCQkgIENv ZXJjaW9uRm9ybSBjZm9ybWF0LAogCQkJCQkgIGludCBsb2NhdGlvbikKK3sKKwlyZXR1cm4gY29l cmNlX3RvX3RhcmdldF90eXBlX3NhZmUocHN0YXRlLCBleHByLCBleHBydHlwZSwgdGFyZ2V0dHlw ZSwKKwkJCQkJCQkJCSAgdGFyZ2V0dHlwbW9kLCBjY29udGV4dCwgY2Zvcm1hdCwKKwkJCQkJCQkJ CSAgTlVMTCwgbG9jYXRpb24pOworfQorCitOb2RlICoKK2NvZXJjZV90b190YXJnZXRfdHlwZV9z YWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwciwgT2lkIGV4cHJ0eXBlLAorCQkJCQkg IE9pZCB0YXJnZXR0eXBlLCBpbnQzMiB0YXJnZXR0eXBtb2QsCisJCQkJCSAgQ29lcmNpb25Db250 ZXh0IGNjb250ZXh0LAorCQkJCQkgIENvZXJjaW9uRm9ybSBjZm9ybWF0LAorCQkJCQkgIGJvb2wg KmNhc3RfZXJyb3JfZm91bmQsCisJCQkJCSAgaW50IGxvY2F0aW9uKQogewogCU5vZGUJICAgKnJl c3VsdDsKIAlOb2RlCSAgICpvcmlnZXhwcjsKQEAgLTEwMSwxOSArMTE2LDMwIEBAIGNvZXJjZV90 b190YXJnZXRfdHlwZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIsIE9pZCBleHBydHlw ZSwKIAl3aGlsZSAoZXhwciAmJiBJc0EoZXhwciwgQ29sbGF0ZUV4cHIpKQogCQlleHByID0gKE5v ZGUgKikgKChDb2xsYXRlRXhwciAqKSBleHByKS0+YXJnOwogCi0JcmVzdWx0ID0gY29lcmNlX3R5 cGUocHN0YXRlLCBleHByLCBleHBydHlwZSwKLQkJCQkJCSB0YXJnZXR0eXBlLCB0YXJnZXR0eXBt b2QsCi0JCQkJCQkgY2NvbnRleHQsIGNmb3JtYXQsIGxvY2F0aW9uKTsKKwlyZXN1bHQgPSBjb2Vy Y2VfdHlwZV9zYWZlKHBzdGF0ZSwgZXhwciwgZXhwcnR5cGUsCisJCQkJCQkJICB0YXJnZXR0eXBl LCB0YXJnZXR0eXBtb2QsCisJCQkJCQkJICBjY29udGV4dCwgY2Zvcm1hdCwKKwkJCQkJCQkgIGNh c3RfZXJyb3JfZm91bmQsIGxvY2F0aW9uKTsKKworCS8qCisJICogSWYgdGhpcyBjb2VyY2lvbiBm YWlsZWQgb24gYmFkIGlucHV0LCB3ZSB3YW50IHRvIHJlcG9ydCB0aGF0IHRvIHRoZQorCSAqIGNh bGxlci4KKwkgKi8KKwlpZiAoY2FzdF9lcnJvcl9mb3VuZCAhPSBOVUxMICYmICpjYXN0X2Vycm9y X2ZvdW5kKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogSWYgdGhlIHRhcmdldCBpcyBhIGZp eGVkLWxlbmd0aCB0eXBlLCBpdCBtYXkgbmVlZCBhIGxlbmd0aCBjb2VyY2lvbiBhcwogCSAqIHdl bGwgYXMgYSB0eXBlIGNvZXJjaW9uLiAgSWYgd2UgZmluZCBvdXJzZWx2ZXMgYWRkaW5nIGJvdGgs IGZvcmNlIHRoZQogCSAqIGlubmVyIGNvZXJjaW9uIG5vZGUgdG8gaW1wbGljaXQgZGlzcGxheSBm b3JtLgogCSAqLwotCXJlc3VsdCA9IGNvZXJjZV90eXBlX3R5cG1vZChyZXN1bHQsCi0JCQkJCQkJ CXRhcmdldHR5cGUsIHRhcmdldHR5cG1vZCwKKwlyZXN1bHQgPSBjb2VyY2VfdHlwZV90eXBtb2Qo cmVzdWx0LCB0YXJnZXR0eXBlLCB0YXJnZXR0eXBtb2QsCiAJCQkJCQkJCWNjb250ZXh0LCBjZm9y bWF0LCBsb2NhdGlvbiwKLQkJCQkJCQkJKHJlc3VsdCAhPSBleHByICYmICFJc0EocmVzdWx0LCBD b25zdCkpKTsKKwkJCQkJCQkJKHJlc3VsdCAhPSBleHByICYmICFJc0EocmVzdWx0LCBDb25zdCkp LAorCQkJCQkJCQljYXN0X2Vycm9yX2ZvdW5kKTsKKworCWlmIChjYXN0X2Vycm9yX2ZvdW5kICE9 IE5VTEwgJiYgKmNhc3RfZXJyb3JfZm91bmQpCisJCXJldHVybiBOVUxMOwogCiAJaWYgKGV4cHIg IT0gb3JpZ2V4cHIgJiYgdHlwZV9pc19jb2xsYXRhYmxlKHRhcmdldHR5cGUpKQogCXsKQEAgLTE1 Nyw2ICsxODMsMTggQEAgTm9kZSAqCiBjb2VyY2VfdHlwZShQYXJzZVN0YXRlICpwc3RhdGUsIE5v ZGUgKm5vZGUsCiAJCQlPaWQgaW5wdXRUeXBlSWQsIE9pZCB0YXJnZXRUeXBlSWQsIGludDMyIHRh cmdldFR5cGVNb2QsCiAJCQlDb2VyY2lvbkNvbnRleHQgY2NvbnRleHQsIENvZXJjaW9uRm9ybSBj Zm9ybWF0LCBpbnQgbG9jYXRpb24pCit7CisJcmV0dXJuIGNvZXJjZV90eXBlX3NhZmUocHN0YXRl LCBub2RlLCBpbnB1dFR5cGVJZCwgdGFyZ2V0VHlwZUlkLAorCQkJCQkJCXRhcmdldFR5cGVNb2Qs IGNjb250ZXh0LCBjZm9ybWF0LAorCQkJCQkJCU5VTEwsIGxvY2F0aW9uKTsKK30KKworTm9kZSAq Citjb2VyY2VfdHlwZV9zYWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqbm9kZSwKKwkJCQkg T2lkIGlucHV0VHlwZUlkLCBPaWQgdGFyZ2V0VHlwZUlkLCBpbnQzMiB0YXJnZXRUeXBlTW9kLAor CQkJCSBDb2VyY2lvbkNvbnRleHQgY2NvbnRleHQsIENvZXJjaW9uRm9ybSBjZm9ybWF0LAorCQkJ CSBib29sICpjYXN0X2Vycm9yX2ZvdW5kLAorCQkJCSBpbnQgbG9jYXRpb24pCiB7CiAJTm9kZQkg ICAqcmVzdWx0OwogCUNvZXJjaW9uUGF0aFR5cGUgcGF0aHR5cGU7CkBAIC0yNTUsNiArMjkzLDcg QEAgY29lcmNlX3R5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpub2RlLAogCQlpbnQzMgkJ aW5wdXRUeXBlTW9kOwogCQlUeXBlCQliYXNlVHlwZTsKIAkJUGFyc2VDYWxsYmFja1N0YXRlIHBj YnN0YXRlOworCQlib29sCQljb2VyY2VfZmFpbGVkID0gZmFsc2U7CiAKIAkJLyoKIAkJICogSWYg dGhlIHRhcmdldCB0eXBlIGlzIGEgZG9tYWluLCB3ZSB3YW50IHRvIGNhbGwgaXRzIGJhc2UgdHlw ZSdzCkBAIC0zMDcsMjEgKzM0Niw0NyBAQCBjb2VyY2VfdHlwZShQYXJzZVN0YXRlICpwc3RhdGUs IE5vZGUgKm5vZGUsCiAJCSAqIFdlIGFzc3VtZSBoZXJlIHRoYXQgVU5LTk9XTidzIGludGVybmFs IHJlcHJlc2VudGF0aW9uIGlzIHRoZSBzYW1lCiAJCSAqIGFzIENTVFJJTkcuCiAJCSAqLwotCQlp ZiAoIWNvbi0+Y29uc3Rpc251bGwpCi0JCQluZXdjb24tPmNvbnN0dmFsdWUgPSBzdHJpbmdUeXBl RGF0dW0oYmFzZVR5cGUsCi0JCQkJCQkJCQkJCQkgRGF0dW1HZXRDU3RyaW5nKGNvbi0+Y29uc3R2 YWx1ZSksCi0JCQkJCQkJCQkJCQkgaW5wdXRUeXBlTW9kKTsKKwkJaWYgKGNhc3RfZXJyb3JfZm91 bmQgPT0gTlVMTCkKKwkJeworCQkJaWYgKCFjb24tPmNvbnN0aXNudWxsKQorCQkJCW5ld2Nvbi0+ Y29uc3R2YWx1ZSA9IHN0cmluZ1R5cGVEYXR1bShiYXNlVHlwZSwKKwkJCQkJCQkJCQkJCQkgRGF0 dW1HZXRDU3RyaW5nKGNvbi0+Y29uc3R2YWx1ZSksCisJCQkJCQkJCQkJCQkJIGlucHV0VHlwZU1v ZCk7CisJCQllbHNlCisJCQkJbmV3Y29uLT5jb25zdHZhbHVlID0gc3RyaW5nVHlwZURhdHVtKGJh c2VUeXBlLAorCQkJCQkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJCQkJCSBpbnB1dFR5cGVNb2Qp OworCQl9CiAJCWVsc2UKLQkJCW5ld2Nvbi0+Y29uc3R2YWx1ZSA9IHN0cmluZ1R5cGVEYXR1bShi YXNlVHlwZSwKLQkJCQkJCQkJCQkJCSBOVUxMLAotCQkJCQkJCQkJCQkJIGlucHV0VHlwZU1vZCk7 CisJCXsKKwkJCS8qIElmIHdlIGZpbmQgYW4gZXJyb3IsIGp1c3QgY2FycnkgaXQgdXAgdG8gdGhl IGNhbGxlciAqLworCQkJRGF0dW0gdmFsMjsKKwkJCWJvb2wgc3VjY2VzczsKKworCQkJaWYgKCFj b24tPmNvbnN0aXNudWxsKQorCQkJCXN1Y2Nlc3MgPSBzdHJpbmdUeXBlRGF0dW1TYWZlKGJhc2VU eXBlLAorCQkJCQkJCQkJCQkgIERhdHVtR2V0Q1N0cmluZyhjb24tPmNvbnN0dmFsdWUpLAorCQkJ CQkJCQkJCQkgIGlucHV0VHlwZU1vZCwgJnZhbDIpOworCQkJZWxzZQorCQkJCXN1Y2Nlc3MgPSBz dHJpbmdUeXBlRGF0dW1TYWZlKGJhc2VUeXBlLCBOVUxMLCBpbnB1dFR5cGVNb2QsCisJCQkJCQkJ CQkJCSAgJnZhbDIpOworCisJCQlpZiAoc3VjY2VzcykKKwkJCQluZXdjb24tPmNvbnN0dmFsdWUg PSB2YWwyOworCQkJZWxzZQorCQkJeworCQkJCSpjYXN0X2Vycm9yX2ZvdW5kID0gdHJ1ZTsKKwkJ CQljb2VyY2VfZmFpbGVkID0gdHJ1ZTsKKwkJCQlyZXN1bHQgPSBOVUxMOworCQkJfQorCQl9CiAK IAkJLyoKIAkJICogSWYgaXQncyBhIHZhcmxlbmEgdmFsdWUsIGZvcmNlIGl0IHRvIGJlIGluIG5v bi1leHBhbmRlZAogCQkgKiAobm9uLXRvYXN0ZWQpIGZvcm1hdDsgdGhpcyBhdm9pZHMgYW55IHBv c3NpYmxlIGRlcGVuZGVuY3kgb24KIAkJICogZXh0ZXJuYWwgdmFsdWVzIGFuZCBpbXByb3ZlcyBj b25zaXN0ZW5jeSBvZiByZXByZXNlbnRhdGlvbi4KIAkJICovCi0JCWlmICghY29uLT5jb25zdGlz bnVsbCAmJiBuZXdjb24tPmNvbnN0bGVuID09IC0xKQorCQlpZiAoIWNvZXJjZV9mYWlsZWQgJiYg IWNvbi0+Y29uc3Rpc251bGwgJiYgbmV3Y29uLT5jb25zdGxlbiA9PSAtMSkKIAkJCW5ld2Nvbi0+ Y29uc3R2YWx1ZSA9CiAJCQkJUG9pbnRlckdldERhdHVtKFBHX0RFVE9BU1RfREFUVU0obmV3Y29u LT5jb25zdHZhbHVlKSk7CiAKQEAgLTMzOCwzMiArNDAzLDUzIEBAIGNvZXJjZV90eXBlKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTm9kZSAqbm9kZSwKIAkJICogaWRlbnRpY2FsIG1heSBub3QgZ2V0IHJl Y29nbml6ZWQgYXMgc3VjaC4gIFNlZSBwZ3NxbC1oYWNrZXJzCiAJCSAqIGRpc2N1c3Npb24gb2Yg MjAwOC0wNC0wNC4KIAkJICovCi0JCWlmICghY29uLT5jb25zdGlzbnVsbCAmJiAhbmV3Y29uLT5j b25zdGJ5dmFsKQorCQlpZiAoIWNvZXJjZV9mYWlsZWQgJiYgIWNvbi0+Y29uc3Rpc251bGwgJiYg IW5ld2Nvbi0+Y29uc3RieXZhbCkKIAkJewogCQkJRGF0dW0JCXZhbDI7CiAKLQkJCXZhbDIgPSBz dHJpbmdUeXBlRGF0dW0oYmFzZVR5cGUsCi0JCQkJCQkJCSAgIERhdHVtR2V0Q1N0cmluZyhjb24t PmNvbnN0dmFsdWUpLAotCQkJCQkJCQkgICBpbnB1dFR5cGVNb2QpOwotCQkJaWYgKG5ld2Nvbi0+ Y29uc3RsZW4gPT0gLTEpCi0JCQkJdmFsMiA9IFBvaW50ZXJHZXREYXR1bShQR19ERVRPQVNUX0RB VFVNKHZhbDIpKTsKLQkJCWlmICghZGF0dW1Jc0VxdWFsKG5ld2Nvbi0+Y29uc3R2YWx1ZSwgdmFs MiwgZmFsc2UsIG5ld2Nvbi0+Y29uc3RsZW4pKQotCQkJCWVsb2coV0FSTklORywgInR5cGUgJXMg aGFzIHVuc3RhYmxlIGlucHV0IGNvbnZlcnNpb24gZm9yIFwiJXNcIiIsCi0JCQkJCSB0eXBlVHlw ZU5hbWUoYmFzZVR5cGUpLCBEYXR1bUdldENTdHJpbmcoY29uLT5jb25zdHZhbHVlKSk7CisJCQlp ZiAoY2FzdF9lcnJvcl9mb3VuZCAhPSBOVUxMKQorCQkJeworCQkJCWlmICghc3RyaW5nVHlwZURh dHVtU2FmZShiYXNlVHlwZSwKKwkJCQkJCQkJCSAgICAgRGF0dW1HZXRDU3RyaW5nKGNvbi0+Y29u c3R2YWx1ZSksCisJCQkJCQkJCQkgICAgIGlucHV0VHlwZU1vZCwgJnZhbDIpKQorCQkJCXsKKwkJ CQkJY29lcmNlX2ZhaWxlZCA9IHRydWU7CisJCQkJCSpjYXN0X2Vycm9yX2ZvdW5kID0gdHJ1ZTsK KwkJCQkJcmVzdWx0ID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQkJdmFsMiA9IHN0 cmluZ1R5cGVEYXR1bShiYXNlVHlwZSwKKwkJCQkJCQkJCSAgIERhdHVtR2V0Q1N0cmluZyhjb24t PmNvbnN0dmFsdWUpLAorCQkJCQkJCQkJICAgaW5wdXRUeXBlTW9kKTsKKwkJCWlmICghY29lcmNl X2ZhaWxlZCkKKwkJCXsKKwkJCQlpZiAobmV3Y29uLT5jb25zdGxlbiA9PSAtMSkKKwkJCQkJdmFs MiA9IFBvaW50ZXJHZXREYXR1bShQR19ERVRPQVNUX0RBVFVNKHZhbDIpKTsKKwkJCQlpZiAoIWRh dHVtSXNFcXVhbChuZXdjb24tPmNvbnN0dmFsdWUsIHZhbDIsCisJCQkJCQkJCQkJCQkJZmFsc2Us IG5ld2Nvbi0+Y29uc3RsZW4pKQorCQkJCQllbG9nKFdBUk5JTkcsCisJCQkJCQkgInR5cGUgJXMg aGFzIHVuc3RhYmxlIGlucHV0IGNvbnZlcnNpb24gZm9yIFwiJXNcIiIsCisJCQkJCQkgdHlwZVR5 cGVOYW1lKGJhc2VUeXBlKSwKKwkJCQkJCSBEYXR1bUdldENTdHJpbmcoY29uLT5jb25zdHZhbHVl KSk7CisJCQl9CiAJCX0KICNlbmRpZgogCiAJCWNhbmNlbF9wYXJzZXJfZXJycG9zaXRpb25fY2Fs bGJhY2soJnBjYnN0YXRlKTsKIAotCQlyZXN1bHQgPSAoTm9kZSAqKSBuZXdjb247CisJCWlmICgh Y29lcmNlX2ZhaWxlZCkKKwkJeworCQkJcmVzdWx0ID0gKE5vZGUgKikgbmV3Y29uOwogCi0JCS8q IElmIHRhcmdldCBpcyBhIGRvbWFpbiwgYXBwbHkgY29uc3RyYWludHMuICovCi0JCWlmIChiYXNl VHlwZUlkICE9IHRhcmdldFR5cGVJZCkKLQkJCXJlc3VsdCA9IGNvZXJjZV90b19kb21haW4ocmVz dWx0LAotCQkJCQkJCQkJICBiYXNlVHlwZUlkLCBiYXNlVHlwZU1vZCwKLQkJCQkJCQkJCSAgdGFy Z2V0VHlwZUlkLAotCQkJCQkJCQkJICBjY29udGV4dCwgY2Zvcm1hdCwgbG9jYXRpb24sCi0JCQkJ CQkJCQkgIGZhbHNlKTsKKwkJCS8qIElmIHRhcmdldCBpcyBhIGRvbWFpbiwgYXBwbHkgY29uc3Ry YWludHMuICovCisJCQlpZiAoYmFzZVR5cGVJZCAhPSB0YXJnZXRUeXBlSWQpCisJCQkJcmVzdWx0 ID0gY29lcmNlX3RvX2RvbWFpbl9zYWZlKHJlc3VsdCwKKwkJCQkJCQkJCQkJICAgYmFzZVR5cGVJ ZCwgYmFzZVR5cGVNb2QsCisJCQkJCQkJCQkJCSAgIHRhcmdldFR5cGVJZCwKKwkJCQkJCQkJCQkJ ICAgY2NvbnRleHQsIGNmb3JtYXQsIGxvY2F0aW9uLAorCQkJCQkJCQkJCQkgICBmYWxzZSwgY2Fz dF9lcnJvcl9mb3VuZCk7CisJCX0KIAogCQlSZWxlYXNlU3lzQ2FjaGUoYmFzZVR5cGUpOwogCkBA IC0zOTYsOSArNDgyLDE1IEBAIGNvZXJjZV90eXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAq bm9kZSwKIAkJICovCiAJCUNvbGxhdGVFeHByICpjb2xsID0gKENvbGxhdGVFeHByICopIG5vZGU7 CiAKLQkJcmVzdWx0ID0gY29lcmNlX3R5cGUocHN0YXRlLCAoTm9kZSAqKSBjb2xsLT5hcmcsCi0J CQkJCQkJIGlucHV0VHlwZUlkLCB0YXJnZXRUeXBlSWQsIHRhcmdldFR5cGVNb2QsCi0JCQkJCQkJ IGNjb250ZXh0LCBjZm9ybWF0LCBsb2NhdGlvbik7CisJCXJlc3VsdCA9IGNvZXJjZV90eXBlX3Nh ZmUocHN0YXRlLCAoTm9kZSAqKSBjb2xsLT5hcmcsCisJCQkJCQkJCSAgaW5wdXRUeXBlSWQsIHRh cmdldFR5cGVJZCwgdGFyZ2V0VHlwZU1vZCwKKwkJCQkJCQkJICBjY29udGV4dCwgY2Zvcm1hdCwK KwkJCQkJCQkJICBjYXN0X2Vycm9yX2ZvdW5kLAorCQkJCQkJCQkgIGxvY2F0aW9uKTsKKworCQlp ZiAoY2FzdF9lcnJvcl9mb3VuZCAhPSBOVUxMICYmICpjYXN0X2Vycm9yX2ZvdW5kKQorCQkJcmV0 dXJuIE5VTEw7CisKIAkJaWYgKHR5cGVfaXNfY29sbGF0YWJsZSh0YXJnZXRUeXBlSWQpKQogCQl7 CiAJCQlDb2xsYXRlRXhwciAqbmV3Y29sbCA9IG1ha2VOb2RlKENvbGxhdGVFeHByKTsKQEAgLTQz MSwxNyArNTIzLDIzIEBAIGNvZXJjZV90eXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqbm9k ZSwKIAogCQkJcmVzdWx0ID0gYnVpbGRfY29lcmNpb25fZXhwcmVzc2lvbihub2RlLCBwYXRodHlw ZSwgZnVuY0lkLAogCQkJCQkJCQkJCQkgICBiYXNlVHlwZUlkLCBiYXNlVHlwZU1vZCwKLQkJCQkJ CQkJCQkJICAgY2NvbnRleHQsIGNmb3JtYXQsIGxvY2F0aW9uKTsKKwkJCQkJCQkJCQkJICAgY2Nv bnRleHQsIGNmb3JtYXQsCisJCQkJCQkJCQkJCSAgIGNhc3RfZXJyb3JfZm91bmQsCisJCQkJCQkJ CQkJCSAgIGxvY2F0aW9uKTsKIAogCQkJLyoKIAkJCSAqIElmIGRvbWFpbiwgY29lcmNlIHRvIHRo ZSBkb21haW4gdHlwZSBhbmQgcmVsYWJlbCB3aXRoIGRvbWFpbgogCQkJICogdHlwZSBJRCwgaGlk aW5nIHRoZSBwcmV2aW91cyBjb2VyY2lvbiBub2RlLgogCQkJICovCiAJCQlpZiAodGFyZ2V0VHlw ZUlkICE9IGJhc2VUeXBlSWQpCi0JCQkJcmVzdWx0ID0gY29lcmNlX3RvX2RvbWFpbihyZXN1bHQs IGJhc2VUeXBlSWQsIGJhc2VUeXBlTW9kLAorCQkJeworCQkJCXJlc3VsdCA9IGNvZXJjZV90b19k b21haW5fc2FmZShyZXN1bHQsIGJhc2VUeXBlSWQsIGJhc2VUeXBlTW9kLAogCQkJCQkJCQkJCSAg dGFyZ2V0VHlwZUlkLAogCQkJCQkJCQkJCSAgY2NvbnRleHQsIGNmb3JtYXQsIGxvY2F0aW9uLAot CQkJCQkJCQkJCSAgdHJ1ZSk7CisJCQkJCQkJCQkJICB0cnVlLCBjYXN0X2Vycm9yX2ZvdW5kKTsK KwkJCQlpZiAoY2FzdF9lcnJvcl9mb3VuZCAhPSBOVUxMICYmICpjYXN0X2Vycm9yX2ZvdW5kKQor CQkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KIAkJfQogCQllbHNlCiAJCXsKQEAgLTQ1NCw5ICs1NTIs MTEgQEAgY29lcmNlX3R5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpub2RlLAogCQkJICog dGhhdCBtdXN0IGJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUgZGVzdGluYXRpb24gaXMgYSBkb21h aW4KIAkJCSAqIHRoZW4gd2Ugd29uJ3QgbmVlZCBhIFJlbGFiZWxUeXBlIG5vZGUuCiAJCQkgKi8K LQkJCXJlc3VsdCA9IGNvZXJjZV90b19kb21haW4obm9kZSwgSW52YWxpZE9pZCwgLTEsIHRhcmdl dFR5cGVJZCwKKwkJCXJlc3VsdCA9IGNvZXJjZV90b19kb21haW5fc2FmZShub2RlLCBJbnZhbGlk T2lkLCAtMSwgdGFyZ2V0VHlwZUlkLAogCQkJCQkJCQkJICBjY29udGV4dCwgY2Zvcm1hdCwgbG9j YXRpb24sCi0JCQkJCQkJCQkgIGZhbHNlKTsKKwkJCQkJCQkJCSAgZmFsc2UsIGNhc3RfZXJyb3Jf Zm91bmQpOworCQkJaWYgKGNhc3RfZXJyb3JfZm91bmQgIT0gTlVMTCAmJiAqY2FzdF9lcnJvcl9m b3VuZCkKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCWlmIChyZXN1bHQgPT0gbm9kZSkKIAkJCXsKIAkJ CQkvKgpAQCAtNjc2LDYgKzc3NiwxNyBAQCBOb2RlICoKIGNvZXJjZV90b19kb21haW4oTm9kZSAq YXJnLCBPaWQgYmFzZVR5cGVJZCwgaW50MzIgYmFzZVR5cGVNb2QsIE9pZCB0eXBlSWQsCiAJCQkJ IENvZXJjaW9uQ29udGV4dCBjY29udGV4dCwgQ29lcmNpb25Gb3JtIGNmb3JtYXQsIGludCBsb2Nh dGlvbiwKIAkJCQkgYm9vbCBoaWRlSW5wdXRDb2VyY2lvbikKK3sKKwlyZXR1cm4gY29lcmNlX3Rv X2RvbWFpbl9zYWZlKGFyZywgYmFzZVR5cGVJZCwgYmFzZVR5cGVNb2QsIHR5cGVJZCwKKwkJCQkJ CQkJIGNjb250ZXh0LCBjZm9ybWF0LCBsb2NhdGlvbiwKKwkJCQkJCQkJIGhpZGVJbnB1dENvZXJj aW9uLCBOVUxMKTsKK30KKworTm9kZSAqCitjb2VyY2VfdG9fZG9tYWluX3NhZmUoTm9kZSAqYXJn LCBPaWQgYmFzZVR5cGVJZCwgaW50MzIgYmFzZVR5cGVNb2QsIE9pZCB0eXBlSWQsCisJCQkJCSAg Q29lcmNpb25Db250ZXh0IGNjb250ZXh0LCBDb2VyY2lvbkZvcm0gY2Zvcm1hdCwKKwkJCQkJICBp bnQgbG9jYXRpb24sIGJvb2wgaGlkZUlucHV0Q29lcmNpb24sCisJCQkJCSAgYm9vbCAqY2FzdF9l cnJvcl9mb3VuZCkKIHsKIAlDb2VyY2VUb0RvbWFpbiAqcmVzdWx0OwogCkBAIC03MDYsNyArODE3 LDcgQEAgY29lcmNlX3RvX2RvbWFpbihOb2RlICphcmcsIE9pZCBiYXNlVHlwZUlkLCBpbnQzMiBi YXNlVHlwZU1vZCwgT2lkIHR5cGVJZCwKIAkgKi8KIAlhcmcgPSBjb2VyY2VfdHlwZV90eXBtb2Qo YXJnLCBiYXNlVHlwZUlkLCBiYXNlVHlwZU1vZCwKIAkJCQkJCQkgY2NvbnRleHQsIENPRVJDRV9J TVBMSUNJVF9DQVNULCBsb2NhdGlvbiwKLQkJCQkJCQkgZmFsc2UpOworCQkJCQkJCSBmYWxzZSwg Y2FzdF9lcnJvcl9mb3VuZCk7CiAKIAkvKgogCSAqIE5vdyBidWlsZCB0aGUgZG9tYWluIGNvZXJj aW9uIG5vZGUuICBUaGlzIHJlcHJlc2VudHMgcnVuLXRpbWUgY2hlY2tpbmcKQEAgLTc1Myw3ICs4 NjQsNyBAQCBzdGF0aWMgTm9kZSAqCiBjb2VyY2VfdHlwZV90eXBtb2QoTm9kZSAqbm9kZSwgT2lk IHRhcmdldFR5cGVJZCwgaW50MzIgdGFyZ2V0VHlwTW9kLAogCQkJCSAgIENvZXJjaW9uQ29udGV4 dCBjY29udGV4dCwgQ29lcmNpb25Gb3JtIGNmb3JtYXQsCiAJCQkJICAgaW50IGxvY2F0aW9uLAot CQkJCSAgIGJvb2wgaGlkZUlucHV0Q29lcmNpb24pCisJCQkJICAgYm9vbCBoaWRlSW5wdXRDb2Vy Y2lvbiwgYm9vbCAqY2FzdF9lcnJvcl9mb3VuZCkKIHsKIAlDb2VyY2lvblBhdGhUeXBlIHBhdGh0 eXBlOwogCU9pZAkJCWZ1bmNJZDsKQEAgLTc4MCw3ICs4OTEsOSBAQCBjb2VyY2VfdHlwZV90eXBt b2QoTm9kZSAqbm9kZSwgT2lkIHRhcmdldFR5cGVJZCwgaW50MzIgdGFyZ2V0VHlwTW9kLAogCXsK IAkJbm9kZSA9IGJ1aWxkX2NvZXJjaW9uX2V4cHJlc3Npb24obm9kZSwgcGF0aHR5cGUsIGZ1bmNJ ZCwKIAkJCQkJCQkJCQkgdGFyZ2V0VHlwZUlkLCB0YXJnZXRUeXBNb2QsCi0JCQkJCQkJCQkJIGNj b250ZXh0LCBjZm9ybWF0LCBsb2NhdGlvbik7CisJCQkJCQkJCQkJIGNjb250ZXh0LCBjZm9ybWF0 LAorCQkJCQkJCQkJCSBjYXN0X2Vycm9yX2ZvdW5kLAorCQkJCQkJCQkJCSBsb2NhdGlvbik7CiAJ fQogCWVsc2UKIAl7CkBAIC04NDEsOSArOTU0LDEwIEBAIGJ1aWxkX2NvZXJjaW9uX2V4cHJlc3Np b24oTm9kZSAqbm9kZSwKIAkJCQkJCSAgT2lkIGZ1bmNJZCwKIAkJCQkJCSAgT2lkIHRhcmdldFR5 cGVJZCwgaW50MzIgdGFyZ2V0VHlwTW9kLAogCQkJCQkJICBDb2VyY2lvbkNvbnRleHQgY2NvbnRl eHQsIENvZXJjaW9uRm9ybSBjZm9ybWF0LAotCQkJCQkJICBpbnQgbG9jYXRpb24pCisJCQkJCQkg IGJvb2wgKmNhc3RfZXJyb3JfZm91bmQsIGludCBsb2NhdGlvbikKIHsKIAlpbnQJCQluYXJncyA9 IDA7CisJYm9vbAkJc2FmZV9tb2RlID0gKGNhc3RfZXJyb3JfZm91bmQgIT0gTlVMTCk7CiAKIAlp ZiAoT2lkSXNWYWxpZChmdW5jSWQpKQogCXsKQEAgLTkxMywxMyArMTAyNywxNCBAQCBidWlsZF9j b2VyY2lvbl9leHByZXNzaW9uKE5vZGUgKm5vZGUsCiAJCX0KIAogCQlmZXhwciA9IG1ha2VGdW5j RXhwcihmdW5jSWQsIHRhcmdldFR5cGVJZCwgYXJncywKLQkJCQkJCQkgSW52YWxpZE9pZCwgSW52 YWxpZE9pZCwgY2Zvcm1hdCk7CisJCQkJCQkJIEludmFsaWRPaWQsIEludmFsaWRPaWQsIGNmb3Jt YXQsIHNhZmVfbW9kZSk7CiAJCWZleHByLT5sb2NhdGlvbiA9IGxvY2F0aW9uOwogCQlyZXR1cm4g KE5vZGUgKikgZmV4cHI7CiAJfQogCWVsc2UgaWYgKHBhdGh0eXBlID09IENPRVJDSU9OX1BBVEhf QVJSQVlDT0VSQ0UpCiAJewogCQkvKiBXZSBuZWVkIHRvIGJ1aWxkIGFuIEFycmF5Q29lcmNlRXhw ciAqLworCQkvKiBUT0RPIHBhc3MgaW4gU2FmZSBwYXJhbSAqLwogCQlBcnJheUNvZXJjZUV4cHIg KmFjb2VyY2UgPSBtYWtlTm9kZShBcnJheUNvZXJjZUV4cHIpOwogCQlDYXNlVGVzdEV4cHIgKmN0 ZXN0ID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKIAkJT2lkCQkJc291cmNlQmFzZVR5cGVJZDsK QEAgLTk1MSwxNCArMTA2NiwyMCBAQCBidWlsZF9jb2VyY2lvbl9leHByZXNzaW9uKE5vZGUgKm5v ZGUsCiAJCXRhcmdldEVsZW1lbnRUeXBlID0gZ2V0X2VsZW1lbnRfdHlwZSh0YXJnZXRUeXBlSWQp OwogCQlBc3NlcnQoT2lkSXNWYWxpZCh0YXJnZXRFbGVtZW50VHlwZSkpOwogCi0JCWVsZW1leHBy ID0gY29lcmNlX3RvX3RhcmdldF90eXBlKE5VTEwsCisJCS8qCisJCSAqIE5vIG5vZGUgZ2V0cyBy ZXNvbHZlZCBoZXJlLCBzbyB0aGlzIGNhc3QgY2Fubm90IGZhaWwKKwkJICogYXQgcGFyc2UgdGlt ZS4KKwkJICovCisJCWVsZW1leHByID0gY29lcmNlX3RvX3RhcmdldF90eXBlX3NhZmUoTlVMTCwK IAkJCQkJCQkJCQkgKE5vZGUgKikgY3Rlc3QsCiAJCQkJCQkJCQkJIGN0ZXN0LT50eXBlSWQsCiAJ CQkJCQkJCQkJIHRhcmdldEVsZW1lbnRUeXBlLAogCQkJCQkJCQkJCSB0YXJnZXRUeXBNb2QsCiAJ CQkJCQkJCQkJIGNjb250ZXh0LAogCQkJCQkJCQkJCSBjZm9ybWF0LAorCQkJCQkJCQkJCSBjYXN0 X2Vycm9yX2ZvdW5kLAogCQkJCQkJCQkJCSBsb2NhdGlvbik7CisKIAkJaWYgKGVsZW1leHByID09 IE5VTEwpCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KIAkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8g Y29lcmNlIGFycmF5IGVsZW1lbnQgdHlwZSBhcyBleHBlY3RlZCIpOwogCkBAIC05NzMsNiArMTA5 NCw3IEBAIGJ1aWxkX2NvZXJjaW9uX2V4cHJlc3Npb24oTm9kZSAqbm9kZSwKIAkJYWNvZXJjZS0+ cmVzdWx0dHlwbW9kID0gZXhwclR5cG1vZChlbGVtZXhwcik7CiAJCS8qIHJlc3VsdGNvbGxpZCB3 aWxsIGJlIHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KIAkJYWNvZXJjZS0+Y29lcmNlZm9ybWF0 ID0gY2Zvcm1hdDsKKwkJYWNvZXJjZS0+c2FmZV9tb2RlID0gc2FmZV9tb2RlOwogCQlhY29lcmNl LT5sb2NhdGlvbiA9IGxvY2F0aW9uOwogCiAJCXJldHVybiAoTm9kZSAqKSBhY29lcmNlOwpAQCAt OTg4LDYgKzExMTAsNyBAQCBidWlsZF9jb2VyY2lvbl9leHByZXNzaW9uKE5vZGUgKm5vZGUsCiAJ CWlvY29lcmNlLT5yZXN1bHR0eXBlID0gdGFyZ2V0VHlwZUlkOwogCQkvKiByZXN1bHRjb2xsaWQg d2lsbCBiZSBzZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCiAJCWlvY29lcmNlLT5jb2VyY2Vmb3Jt YXQgPSBjZm9ybWF0OworCQlpb2NvZXJjZS0+c2FmZV9tb2RlID0gc2FmZV9tb2RlOwogCQlpb2Nv ZXJjZS0+bG9jYXRpb24gPSBsb2NhdGlvbjsKIAogCQlyZXR1cm4gKE5vZGUgKikgaW9jb2VyY2U7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCAxNTBhODA5OWMyLi41NDIyNGI5ZjA2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTU3LDcgKzU3LDggQEAgc3RhdGljIE5vZGUgKnRyYW5z Zm9ybU11bHRpQXNzaWduUmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTXVsdGlBc3NpZ25SZWYgKm1h cmVmKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1DYXNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IENhc2VFeHByICpjKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1TdWJMaW5rKFBhcnNlU3RhdGUg KnBzdGF0ZSwgU3ViTGluayAqc3VibGluayk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtQXJyYXlF eHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCi0JCQkJCQkJCU9pZCBhcnJh eV90eXBlLCBPaWQgZWxlbWVudF90eXBlLCBpbnQzMiB0eXBtb2QpOworCQkJCQkJCQlPaWQgYXJy YXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlwZSwgaW50MzIgdHlwbW9kLAorCQkJCQkJCQlib29sICpj YXN0X2Vycm9yX2ZvdW5kKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Sb3dFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgUm93RXhwciAqciwgYm9vbCBhbGxvd0RlZmF1bHQpOwogc3RhdGljIE5vZGUg KnRyYW5zZm9ybUNvYWxlc2NlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIENvYWxlc2NlRXhwciAq Yyk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtTWluTWF4RXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IE1pbk1heEV4cHIgKm0pOwpAQCAtMTM3LDcgKzEzOCw3IEBAIHRyYW5zZm9ybUV4cHJSZWN1cnNl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcikKIAogCQljYXNlIFRfQV9BcnJheUV4cHI6 CiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1BcnJheUV4cHIocHN0YXRlLCAoQV9BcnJheUV4cHIgKikg ZXhwciwKLQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBJbnZhbGlkT2lkLCAtMSk7CisJCQkJCQkJCQkJ SW52YWxpZE9pZCwgSW52YWxpZE9pZCwgLTEsIE5VTEwpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBU X1R5cGVDYXN0OgpAQCAtMTkwNyw3ICsxOTA4LDggQEAgdHJhbnNmb3JtU3ViTGluayhQYXJzZVN0 YXRlICpwc3RhdGUsIFN1YkxpbmsgKnN1YmxpbmspCiAgKi8KIHN0YXRpYyBOb2RlICoKIHRyYW5z Zm9ybUFycmF5RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICphLAotCQkJCSAg IE9pZCBhcnJheV90eXBlLCBPaWQgZWxlbWVudF90eXBlLCBpbnQzMiB0eXBtb2QpCisJCQkJICAg T2lkIGFycmF5X3R5cGUsIE9pZCBlbGVtZW50X3R5cGUsIGludDMyIHR5cG1vZCwKKwkJCQkgICBi b29sICpjYXN0X2Vycm9yX2ZvdW5kKQogewogCUFycmF5RXhwciAgKm5ld2EgPSBtYWtlTm9kZShB cnJheUV4cHIpOwogCUxpc3QJICAgKm5ld2VsZW1zID0gTklMOwpAQCAtMTkzOCw3ICsxOTQwLDEy IEBAIHRyYW5zZm9ybUFycmF5RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICph LAogCQkJCQkJCQkJICAoQV9BcnJheUV4cHIgKikgZSwKIAkJCQkJCQkJCSAgYXJyYXlfdHlwZSwK IAkJCQkJCQkJCSAgZWxlbWVudF90eXBlLAotCQkJCQkJCQkJICB0eXBtb2QpOworCQkJCQkJCQkJ ICB0eXBtb2QsCisJCQkJCQkJCQkgIGNhc3RfZXJyb3JfZm91bmQpOworCisJCQlpZiAoY2FzdF9l cnJvcl9mb3VuZCAhPSBOVUxMICYmICpjYXN0X2Vycm9yX2ZvdW5kKQorCQkJCXJldHVybiBOVUxM OworCiAJCQkvKiB3ZSBjZXJ0YWlubHkgaGF2ZSBhbiBhcnJheSBoZXJlICovCiAJCQlBc3NlcnQo YXJyYXlfdHlwZSA9PSBJbnZhbGlkT2lkIHx8IGFycmF5X3R5cGUgPT0gZXhwclR5cGUobmV3ZSkp OwogCQkJbmV3YS0+bXVsdGlkaW1zID0gdHJ1ZTsKQEAgLTIwMjcsMTMgKzIwMzQsMTggQEAgdHJh bnNmb3JtQXJyYXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCiAKIAkJ aWYgKGNvZXJjZV9oYXJkKQogCQl7Ci0JCQluZXdlID0gY29lcmNlX3RvX3RhcmdldF90eXBlKHBz dGF0ZSwgZSwKKwkJCW5ld2UgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGVfc2FmZShwc3RhdGUsIGUs CiAJCQkJCQkJCQkJIGV4cHJUeXBlKGUpLAogCQkJCQkJCQkJCSBjb2VyY2VfdHlwZSwKIAkJCQkJ CQkJCQkgdHlwbW9kLAogCQkJCQkJCQkJCSBDT0VSQ0lPTl9FWFBMSUNJVCwKIAkJCQkJCQkJCQkg Q09FUkNFX0VYUExJQ0lUX0NBU1QsCisJCQkJCQkJCQkJIGNhc3RfZXJyb3JfZm91bmQsCiAJCQkJ CQkJCQkJIC0xKTsKKworCQkJaWYgKGNhc3RfZXJyb3JfZm91bmQgIT0gTlVMTCAmJiAqY2FzdF9l cnJvcl9mb3VuZCkKKwkJCQlyZXR1cm4gTlVMTDsKKwogCQkJaWYgKG5ld2UgPT0gTlVMTCkKIAkJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwK QEAgLTIxMDUsMTMgKzIxMTcsMTkgQEAgdHJhbnNmb3JtQ29hbGVzY2VFeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ29hbGVzY2VFeHByICpjKQogCUxpc3QJICAgKm5ld2NvZXJjZWRhcmdzID0gTklM OwogCUxpc3RDZWxsICAgKmFyZ3M7CiAKKwogCWZvcmVhY2goYXJncywgYy0+YXJncykKIAl7CiAJ CU5vZGUJICAgKmUgPSAoTm9kZSAqKSBsZmlyc3QoYXJncyk7CiAJCU5vZGUJICAgKm5ld2U7CiAK IAkJbmV3ZSA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgZSk7Ci0JCW5ld2FyZ3MgPSBs YXBwZW5kKG5ld2FyZ3MsIG5ld2UpOworCQkvKgorCQkgKiBTb21lIGNoaWxkIG5vZGVzIGNhbiBy ZXR1cm4gTlVMTCBpZiB0aGV5IHdvdWxkIHJlc3VsdCBpbiBhCisJCSAqIHNhZmVfbW9kZSBlcnJv ci4gRmlsdGVyIHRob3NlIG91dCBoZXJlCisJCSAqLworCQlpZiAobmV3ZSAhPSBOVUxMKQorCQkJ bmV3YXJncyA9IGxhcHBlbmQobmV3YXJncywgbmV3ZSk7CiAJfQogCiAJbmV3Yy0+Y29hbGVzY2V0 eXBlID0gc2VsZWN0X2NvbW1vbl90eXBlKHBzdGF0ZSwgbmV3YXJncywgIkNPQUxFU0NFIiwgTlVM TCk7CkBAIC0yMTQxLDYgKzIxNTksNyBAQCB0cmFuc2Zvcm1Db2FsZXNjZUV4cHIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDb2FsZXNjZUV4cHIgKmMpCiAJCQkJCQkJCQlleHByTG9jYXRpb24ocHN0YXRl LT5wX2xhc3Rfc3JmKSkpKTsKIAogCW5ld2MtPmFyZ3MgPSBuZXdjb2VyY2VkYXJnczsKKwluZXdj LT5vcCA9IGMtPm9wOwogCW5ld2MtPmxvY2F0aW9uID0gYy0+bG9jYXRpb247CiAJcmV0dXJuIChO b2RlICopIG5ld2M7CiB9CkBAIC0yMzQ1LDggKzIzNjQsNyBAQCB0cmFuc2Zvcm1YbWxTZXJpYWxp emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBYbWxTZXJpYWxpemUgKnhzKQogCXJlc3VsdCA9IGNvZXJj ZV90b190YXJnZXRfdHlwZShwc3RhdGUsIChOb2RlICopIHhleHByLAogCQkJCQkJCQkgICBURVhU T0lELCB0YXJnZXRUeXBlLCB0YXJnZXRUeXBtb2QsCiAJCQkJCQkJCSAgIENPRVJDSU9OX0lNUExJ Q0lULAotCQkJCQkJCQkgICBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKLQkJCQkJCQkJICAgLTEpOwor CQkJCQkJCQkgICBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwgLTEpOwogCWlmIChyZXN1bHQgPT0gTlVM TCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0Up LApAQCAtMjUyNCwxMCArMjU0MiwyNSBAQCB0cmFuc2Zvcm1UeXBlQ2FzdChQYXJzZVN0YXRlICpw c3RhdGUsIFR5cGVDYXN0ICp0YykKIAlPaWQJCQlpbnB1dFR5cGU7CiAJT2lkCQkJdGFyZ2V0VHlw ZTsKIAlpbnQzMgkJdGFyZ2V0VHlwbW9kOwotCWludAkJCWxvY2F0aW9uOworCWludAkJCWxvY2F0 aW9uID0gdGMtPmxvY2F0aW9uOworCVR5cGVOYW1lICAgKnR5cGVOYW1lID0gdGMtPnR5cGVOYW1l OworCWJvb2wJCWNhc3RfZXJyb3I7CisJYm9vbAkgICAqY2FzdF9lcnJvcl9mb3VuZDsKKworCisJ aWYgKHRjLT5zYWZlX21vZGUpCisJeworCQljYXN0X2Vycm9yID0gZmFsc2U7CisJCWNhc3RfZXJy b3JfZm91bmQgPSAmY2FzdF9lcnJvcjsKKwl9CisJZWxzZQorCXsKKwkJY2FzdF9lcnJvcl9mb3Vu ZCA9IE5VTEw7CisJfQorCiAKIAkvKiBMb29rIHVwIHRoZSB0eXBlIG5hbWUgZmlyc3QgKi8KLQl0 eXBlbmFtZVR5cGVJZEFuZE1vZChwc3RhdGUsIHRjLT50eXBlTmFtZSwgJnRhcmdldFR5cGUsICZ0 YXJnZXRUeXBtb2QpOworCXR5cGVuYW1lVHlwZUlkQW5kTW9kKHBzdGF0ZSwgdHlwZU5hbWUsICZ0 YXJnZXRUeXBlLCAmdGFyZ2V0VHlwbW9kKTsKIAogCS8qCiAJICogSWYgdGhlIHN1YmplY3Qgb2Yg dGhlIHR5cGVjYXN0IGlzIGFuIEFSUkFZW10gY29uc3RydWN0IGFuZCB0aGUgdGFyZ2V0CkBAIC0y NTU3LDcgKzI1OTAsMTYgQEAgdHJhbnNmb3JtVHlwZUNhc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBU eXBlQ2FzdCAqdGMpCiAJCQkJCQkJCQkgIChBX0FycmF5RXhwciAqKSBhcmcsCiAJCQkJCQkJCQkg IHRhcmdldEJhc2VUeXBlLAogCQkJCQkJCQkJICBlbGVtZW50VHlwZSwKLQkJCQkJCQkJCSAgdGFy Z2V0QmFzZVR5cG1vZCk7CisJCQkJCQkJCQkgIHRhcmdldEJhc2VUeXBtb2QsCisJCQkJCQkJCQkg IGNhc3RfZXJyb3JfZm91bmQpOworCisJCQkvKgorCQkJICogaWYgYW55IGVsZW1lbnQgb2YgdGhl IHRyYW5mb3JtYXRpb24gZmFpbGVkLCB0aGVuIHRoYXQgbWVhbnMgdGhhdCB0aGUKKwkJCSAqIGxh cmdlciBjYXN0IGhhcyBmYWlsZWQuIFJldHVybmluZyBOVUxMIGhlcmUgaXMgc2FmZSB3aGVuIHRo ZQorCQkJICogcGFyZW50IG5vZGUgKENvYWxlc2NlRXhwcikga25vd3MgdG8gbG9vayBmb3IgaXQg KGFuZCBmaWx0ZXIgaXQgb3V0KS4KKwkJCSAqLworCQkJaWYgKGNhc3RfZXJyb3JfZm91bmQgIT0g TlVMTCAmJiAqY2FzdF9lcnJvcl9mb3VuZCkKKwkJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQllbHNl CiAJCQlleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCBhcmcpOwpAQCAtMjU3NCwx NSArMjYxNiwyNCBAQCB0cmFuc2Zvcm1UeXBlQ2FzdChQYXJzZVN0YXRlICpwc3RhdGUsIFR5cGVD YXN0ICp0YykKIAkgKiBDQVNUIHN5bWJvbCwgYnV0IGlmIHRoZXJlIGlzIG5vbmUgdGhlbiB1c2Ug dGhlIGxvY2F0aW9uIG9mIHRoZSB0eXBlCiAJICogbmFtZSAodGhpcyBjYW4gaGFwcGVuIGluIFR5 cGVOYW1lICdzdHJpbmcnIHN5bnRheCwgZm9yIGluc3RhbmNlKS4KIAkgKi8KLQlsb2NhdGlvbiA9 IHRjLT5sb2NhdGlvbjsKIAlpZiAobG9jYXRpb24gPCAwKQotCQlsb2NhdGlvbiA9IHRjLT50eXBl TmFtZS0+bG9jYXRpb247CisJCWxvY2F0aW9uID0gdHlwZU5hbWUtPmxvY2F0aW9uOworCisJcmVz dWx0ID0gY29lcmNlX3RvX3RhcmdldF90eXBlX3NhZmUocHN0YXRlLCBleHByLCBpbnB1dFR5cGUs CisJCQkJCQkJCQkJdGFyZ2V0VHlwZSwgdGFyZ2V0VHlwbW9kLAorCQkJCQkJCQkJCUNPRVJDSU9O X0VYUExJQ0lULAorCQkJCQkJCQkJCUNPRVJDRV9FWFBMSUNJVF9DQVNULAorCQkJCQkJCQkJCWNh c3RfZXJyb3JfZm91bmQsCisJCQkJCQkJCQkJbG9jYXRpb24pOworCisJLyoKKwkgKiBJZiB0aGlz IHR5cGVjYXN0IHJlcG9ydGVkIGEgY2FzdCBlcnJvciwgYW5kIHRoZSBjYXN0IGZhaWxlZCBvdXRy aWdodCwKKwkgKiB0aGVuIHdlIHdhbnQgdG8gcmVwbGFjZSB0aGlzIG5vZGUgZW50aXJlbHkgd2l0 aCB0aGUgZGVmYXVsdCwKKwkgKiBhbmQgd2Ugc2lnbmFsIHRoZSBwYXJlbnQgbm9kZSB0byBkbyB0 aGF0IGJ5IHJldHVybmluZyBOVUxMLgorCSAqLworCWlmIChjYXN0X2Vycm9yX2ZvdW5kICE9IE5V TEwgJiYgKmNhc3RfZXJyb3JfZm91bmQpCisJCXJldHVybiBOVUxMOwogCi0JcmVzdWx0ID0gY29l cmNlX3RvX3RhcmdldF90eXBlKHBzdGF0ZSwgZXhwciwgaW5wdXRUeXBlLAotCQkJCQkJCQkgICB0 YXJnZXRUeXBlLCB0YXJnZXRUeXBtb2QsCi0JCQkJCQkJCSAgIENPRVJDSU9OX0VYUExJQ0lULAot CQkJCQkJCQkgICBDT0VSQ0VfRVhQTElDSVRfQ0FTVCwKLQkJCQkJCQkJICAgbG9jYXRpb24pOwog CWlmIChyZXN1bHQgPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX0NBTk5PVF9DT0VSQ0UpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5n L3BhcnRib3VuZHMuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmMKaW5k ZXggMjk2NDNmYjRhYi4uOTJhM2M2MDk1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0 aW9uaW5nL3BhcnRib3VuZHMuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGJv dW5kcy5jCkBAIC00MDQ5LDcgKzQwNDksOCBAQCBnZXRfcXVhbF9mb3JfaGFzaChSZWxhdGlvbiBw YXJlbnQsIFBhcnRpdGlvbkJvdW5kU3BlYyAqc3BlYykKIAkJCQkJCSBhcmdzLAogCQkJCQkJIElu dmFsaWRPaWQsCiAJCQkJCQkgSW52YWxpZE9pZCwKLQkJCQkJCSBDT0VSQ0VfRVhQTElDSVRfQ0FM TCk7CisJCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NBTEwsCisJCQkJCQkgTlVMTCk7CiAKIAlyZXR1 cm4gbGlzdF9tYWtlMShmZXhwcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdyaXRl L3Jld3JpdGVTZWFyY2hDeWNsZS5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlU2VhcmNo Q3ljbGUuYwppbmRleCA1OGY2ODRjZDUyLi5hZTkzYzA2NzAyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXdyaXRlL3Jld3JpdGVTZWFyY2hDeWNsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3Jp dGUvcmV3cml0ZVNlYXJjaEN5Y2xlLmMKQEAgLTE5MSw3ICsxOTEsNyBAQCBtYWtlX3BhdGhfY2F0 X2V4cHIoUm93RXhwciAqcm93ZXhwciwgQXR0ck51bWJlciBwYXRoX3ZhcmF0dG5vKQogCWZleHBy ID0gbWFrZUZ1bmNFeHByKEZfQVJSQVlfQ0FULCBSRUNPUkRBUlJBWU9JRCwKIAkJCQkJCSBsaXN0 X21ha2UyKG1ha2VWYXIoMSwgcGF0aF92YXJhdHRubywgUkVDT1JEQVJSQVlPSUQsIC0xLCAwLCAw KSwKIAkJCQkJCQkJCWFyciksCi0JCQkJCQkgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgQ09FUkNF X0VYUExJQ0lUX0NBTEwpOworCQkJCQkJIEludmFsaWRPaWQsIEludmFsaWRPaWQsIENPRVJDRV9F WFBMSUNJVF9DQUxMLCBOVUxMKTsKIAogCXJldHVybiAoRXhwciAqKSBmZXhwcjsKIH0KQEAgLTUy MSw3ICs1MjEsNyBAQCByZXdyaXRlU2VhcmNoQW5kQ3ljbGUoQ29tbW9uVGFibGVFeHByICpjdGUp CiAJCQlmcy0+cmVzdWx0dHlwZSA9IElOVDhPSUQ7CiAJCQlmcy0+cmVzdWx0dHlwbW9kID0gLTE7 CiAKLQkJCWZleHByID0gbWFrZUZ1bmNFeHByKEZfSU5UOElOQywgSU5UOE9JRCwgbGlzdF9tYWtl MShmcyksIEludmFsaWRPaWQsIEludmFsaWRPaWQsIENPRVJDRV9FWFBMSUNJVF9DQUxMKTsKKwkJ CWZleHByID0gbWFrZUZ1bmNFeHByKEZfSU5UOElOQywgSU5UOE9JRCwgbGlzdF9tYWtlMShmcyks IEludmFsaWRPaWQsIEludmFsaWRPaWQsIENPRVJDRV9FWFBMSUNJVF9DQUxMLCBOVUxMKTsKIAog CQkJbGZpcnN0KGxpc3RfaGVhZChzZWFyY2hfY29sX3Jvd2V4cHItPmFyZ3MpKSA9IGZleHByOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCAwNTU3MzAyYjkyLi4zYWI1ZjhiMDAwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCB0eXBlZGVmIGVudW0gRXhw ckV2YWxPcAogCS8qIGNvbmRpdGlvbmFsIGp1bXBzIGJhc2VkIG9uIGN1cnJlbnQgcmVzdWx0IHZh bHVlICovCiAJRUVPUF9KVU1QX0lGX05VTEwsCiAJRUVPUF9KVU1QX0lGX05PVF9OVUxMLAorCUVF T1BfSlVNUF9JRl9OT1RfRVJST1IsCiAJRUVPUF9KVU1QX0lGX05PVF9UUlVFLAogCiAJLyogcGVy Zm9ybSBOVUxMIHRlc3RzIGZvciBzY2FsYXIgdmFsdWVzICovCkBAIC0yNzMsNiArMjc0LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJLyogd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3Vs dCBvZiB0aGlzIHN0ZXAgKi8KIAlEYXR1bQkgICAqcmVzdmFsdWU7CiAJYm9vbAkgICAqcmVzbnVs bDsKKwlib29sCSAgICpyZXNlcnJvcjsKIAogCS8qCiAJICogSW5saW5lIGRhdGEgZm9yIHRoZSBv cGVyYXRpb24uICBJbmxpbmUgZGF0YSBpcyBmYXN0ZXIgdG8gYWNjZXNzLCBidXQKQEAgLTM5NSw2 ICszOTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJewogCQkJRGF0dW0JICAg KnZhbHVlOwkvKiB2YWx1ZSB0byByZXR1cm4gKi8KIAkJCWJvb2wJICAgKmlzbnVsbDsKKwkJCWJv b2wJICAgKmlzZXJyb3I7CiAJCX0JCQljYXNldGVzdDsKIAogCQkvKiBmb3IgRUVPUF9NQUtFX1JF QURPTkxZICovCkBAIC00MDIsNiArNDA1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVw CiAJCXsKIAkJCURhdHVtCSAgICp2YWx1ZTsJLyogdmFsdWUgdG8gY29lcmNlIHRvIHJlYWQtb25s eSAqLwogCQkJYm9vbAkgICAqaXNudWxsOworCQkJYm9vbAkgICAqaXNlcnJvcjsKIAkJfQkJCW1h a2VfcmVhZG9ubHk7CiAKIAkJLyogZm9yIEVFT1BfSU9DT0VSQ0UgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKaW5kZXggOWE2NGE4MzBhMi4uZmI5YjJmNzk2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAg LTk1LDYgKzk1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwclN0YXRlCiAjZGVmaW5lIEZJRUxETk9f RVhQUlNUQVRFX1JFU1VMVFNMT1QgNAogCVR1cGxlVGFibGVTbG90ICpyZXN1bHRzbG90OwogCisj ZGVmaW5lIEZJRUxETk9fRVhQUlNUQVRFX1JFU0VSUk9SIDUKKwlib29sCQlyZXNlcnJvcjsKKwog CS8qCiAJICogSW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUgZXhwcmVzc2lvbidzIHJldHVybiB2YWx1 ZS4KIAkgKi8KQEAgLTEyNiw2ICsxMjksNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKIAog CURhdHVtCSAgICppbm5lcm1vc3RfY2FzZXZhbDsKIAlib29sCSAgICppbm5lcm1vc3RfY2FzZW51 bGw7CisJYm9vbAkgICAqaW5uZXJtb3N0X2Nhc2VlcnJvcjsKIAogCURhdHVtCSAgICppbm5lcm1v c3RfZG9tYWludmFsOwogCWJvb2wJICAgKmlubmVybW9zdF9kb21haW5udWxsOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtl ZnVuY3MuaAppbmRleCA1MGRlNGM2MmFmLi41MGE5YmRkZTU5IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3Mu aApAQCAtNzcsNyArNzcsOCBAQCBleHRlcm4gQ29sdW1uRGVmICptYWtlQ29sdW1uRGVmKGNvbnN0 IGNoYXIgKmNvbG5hbWUsCiAJCQkJCQkJCU9pZCB0eXBlT2lkLCBpbnQzMiB0eXBtb2QsIE9pZCBj b2xsT2lkKTsKIAogZXh0ZXJuIEZ1bmNFeHByICptYWtlRnVuY0V4cHIoT2lkIGZ1bmNpZCwgT2lk IHJldHR5cGUsIExpc3QgKmFyZ3MsCi0JCQkJCQkJICBPaWQgZnVuY2NvbGxpZCwgT2lkIGlucHV0 Y29sbGlkLCBDb2VyY2lvbkZvcm0gZmZvcm1hdCk7CisJCQkJCQkJICBPaWQgZnVuY2NvbGxpZCwg T2lkIGlucHV0Y29sbGlkLAorCQkJCQkJCSAgQ29lcmNpb25Gb3JtIGZmb3JtYXQsIGJvb2wgc2Fm ZV9tb2RlKTsKIAogZXh0ZXJuIEZ1bmNDYWxsICptYWtlRnVuY0NhbGwoTGlzdCAqbmFtZSwgTGlz dCAqYXJncywKIAkJCQkJCQkgIENvZXJjaW9uRm9ybSBmdW5jZm9ybWF0LCBpbnQgbG9jYXRpb24p OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDhmZTliMmZjZmUuLmM0ZWU5YzQ2ZDAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTM0MCw2ICszNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBUeXBl Q2FzdAogCU5vZGVUYWcJCXR5cGU7CiAJTm9kZQkgICAqYXJnOwkJCS8qIHRoZSBleHByZXNzaW9u IGJlaW5nIGNhc3RlZCAqLwogCVR5cGVOYW1lICAgKnR5cGVOYW1lOwkJLyogdGhlIHRhcmdldCB0 eXBlICovCisJYm9vbAkJc2FmZV9tb2RlOwkJLyogY2FzdCBjYW4gZXJldHVybiBlcnJvciB2cyBl cmVwb3J0ICovCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLwogfSBUeXBlQ2FzdDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA3NGYyMjhk OTU5Li4yZWEyMzkxNGIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtNjA0LDYgKzYwNCw3IEBA IHR5cGVkZWYgc3RydWN0IEZ1bmNFeHByCiAJT2lkCQkJZnVuY2NvbGxpZDsJCS8qIE9JRCBvZiBj b2xsYXRpb24gb2YgcmVzdWx0ICovCiAJT2lkCQkJaW5wdXRjb2xsaWQ7CS8qIE9JRCBvZiBjb2xs YXRpb24gdGhhdCBmdW5jdGlvbiBzaG91bGQgdXNlICovCiAJTGlzdAkgICAqYXJnczsJCQkvKiBh cmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uICovCisJYm9vbAkJc2FmZV9tb2RlOwkJLyogdXNlIHNh ZmUgbW9kZSAqLwogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlm IHVua25vd24gKi8KIH0gRnVuY0V4cHI7CiAKQEAgLTEwMjMsNiArMTAyNCw3IEBAIHR5cGVkZWYg c3RydWN0IENvZXJjZVZpYUlPCiAJLyogb3V0cHV0IHR5cG1vZCBpcyBub3Qgc3RvcmVkLCBidXQg aXMgcHJlc3VtZWQgLTEgKi8KIAlPaWQJCQlyZXN1bHRjb2xsaWQ7CS8qIE9JRCBvZiBjb2xsYXRp b24sIG9yIEludmFsaWRPaWQgaWYgbm9uZSAqLwogCUNvZXJjaW9uRm9ybSBjb2VyY2Vmb3JtYXQ7 CS8qIGhvdyB0byBkaXNwbGF5IHRoaXMgbm9kZSAqLworCWJvb2wJCXNhZmVfbW9kZTsJCS8qIHVz ZSBzYWZlIG1vZGUgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAt MSBpZiB1bmtub3duICovCiB9IENvZXJjZVZpYUlPOwogCkBAIC0xMDQ4LDYgKzEwNTAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcnJheUNvZXJjZUV4cHIKIAlpbnQzMgkJcmVzdWx0dHlwbW9kOwkvKiBv dXRwdXQgdHlwbW9kIChhbHNvIGVsZW1lbnQgdHlwbW9kKSAqLwogCU9pZAkJCXJlc3VsdGNvbGxp ZDsJLyogT0lEIG9mIGNvbGxhdGlvbiwgb3IgSW52YWxpZE9pZCBpZiBub25lICovCiAJQ29lcmNp b25Gb3JtIGNvZXJjZWZvcm1hdDsJLyogaG93IHRvIGRpc3BsYXkgdGhpcyBub2RlICovCisJYm9v bAkJc2FmZV9tb2RlOwkJLyogdXNlIHNhZmUgbW9kZSAqLwogCWludAkJCWxvY2F0aW9uOwkJLyog dG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gQXJyYXlDb2VyY2VFeHByOwog CkBAIC0xMjYwLDggKzEyNjMsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUm93Q29tcGFyZUV4cHIKIAlM aXN0CSAgICpyYXJnczsJCQkvKiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBhcmd1bWVudHMgKi8KIH0g Um93Q29tcGFyZUV4cHI7CiAKK3R5cGVkZWYgZW51bSBDb2FsZXNjZU9wCit7CisJTlVMTF9URVNU LAkJCQkJLyogVGVzdCBmb3IgTlVMTCwgbGlrZSBTUUwgQ09BTEVDRSgpICovCisJRVJST1JfVEVT VAkJCQkJLyogVGVzdCBmb3IgZXJyb3IgZmxhZyAqLworfSBDb2FsZXNjZU9wOworCiAvKgotICog Q29hbGVzY2VFeHByIC0gYSBDT0FMRVNDRSBleHByZXNzaW9uCisgKiBDb2FsZXNjZUV4cHIgLSBh IENPQUxFU0NFIGV4cHJlc3Npb24gb3IgT25FcnJvciBleHByZXNzaW9uCiAgKi8KIHR5cGVkZWYg c3RydWN0IENvYWxlc2NlRXhwcgogewpAQCAtMTI2OSw2ICsxMjc4LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29hbGVzY2VFeHByCiAJT2lkCQkJY29hbGVzY2V0eXBlOwkvKiB0eXBlIG9mIGV4cHJlc3Np b24gcmVzdWx0ICovCiAJT2lkCQkJY29hbGVzY2Vjb2xsaWQ7IC8qIE9JRCBvZiBjb2xsYXRpb24s IG9yIEludmFsaWRPaWQgaWYgbm9uZSAqLwogCUxpc3QJICAgKmFyZ3M7CQkJLyogdGhlIGFyZ3Vt ZW50cyAqLworCUNvYWxlc2NlT3AJb3A7CQkJCS8qIHRlc3QgZm9yIE5VTEwgb3IgdGVzdCBmb3Ig RVJST1IgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCiB9IENvYWxlc2NlRXhwcjsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IDk1N2VlMThk ODQuLmVkN2Q2NzA4MTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAor KysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTE1MSw2ICsxNTEsNyBAQCBQR19L RVlXT1JEKCJlbmNvZGluZyIsIEVOQ09ESU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJlbmNyeXB0ZWQiLCBFTkNSWVBURUQsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuZCIsIEVORF9QLCBSRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW51bSIsIEVOVU1fUCwgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiZXJyb3IiLCBFUlJPUl9QLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlc2NhcGUiLCBFU0NBUEUsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImV2ZW50IiwgRVZFTlQsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImV4Y2VwdCIsIEVYQ0VQ VCwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w YXJzZXIvcGFyc2VfY29lcmNlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY29lcmNlLmgK aW5kZXggZGRiYzk5NTA3Ny4uZGI4ZTE1ZjIyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFy c2VyL3BhcnNlX2NvZXJjZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9jb2VyY2Uu aApAQCAtNDMsMTUgKzQzLDMwIEBAIGV4dGVybiBOb2RlICpjb2VyY2VfdG9fdGFyZ2V0X3R5cGUo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkgICBDb2VyY2lvbkNvbnRleHQgY2NvbnRleHQs CiAJCQkJCQkJCSAgIENvZXJjaW9uRm9ybSBjZm9ybWF0LAogCQkJCQkJCQkgICBpbnQgbG9jYXRp b24pOworZXh0ZXJuIE5vZGUgKmNvZXJjZV90b190YXJnZXRfdHlwZV9zYWZlKFBhcnNlU3RhdGUg KnBzdGF0ZSwKKwkJCQkJCQkJCQlOb2RlICpleHByLCBPaWQgZXhwcnR5cGUsCisJCQkJCQkJCQkJ T2lkIHRhcmdldHR5cGUsIGludDMyIHRhcmdldHR5cG1vZCwKKwkJCQkJCQkJCQlDb2VyY2lvbkNv bnRleHQgY2NvbnRleHQsCisJCQkJCQkJCQkJQ29lcmNpb25Gb3JtIGNmb3JtYXQsCisJCQkJCQkJ CQkJYm9vbCAqY2FzdF9lcnJvcl9mb3VuZCwKKwkJCQkJCQkJCQlpbnQgbG9jYXRpb24pOwogZXh0 ZXJuIGJvb2wgY2FuX2NvZXJjZV90eXBlKGludCBuYXJncywgY29uc3QgT2lkICppbnB1dF90eXBl aWRzLCBjb25zdCBPaWQgKnRhcmdldF90eXBlaWRzLAogCQkJCQkJCUNvZXJjaW9uQ29udGV4dCBj Y29udGV4dCk7CiBleHRlcm4gTm9kZSAqY29lcmNlX3R5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBO b2RlICpub2RlLAogCQkJCQkJIE9pZCBpbnB1dFR5cGVJZCwgT2lkIHRhcmdldFR5cGVJZCwgaW50 MzIgdGFyZ2V0VHlwZU1vZCwKIAkJCQkJCSBDb2VyY2lvbkNvbnRleHQgY2NvbnRleHQsIENvZXJj aW9uRm9ybSBjZm9ybWF0LCBpbnQgbG9jYXRpb24pOworZXh0ZXJuIE5vZGUgKmNvZXJjZV90eXBl X3NhZmUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpub2RlLAorCQkJCQkJCSAgT2lkIGlucHV0 VHlwZUlkLCBPaWQgdGFyZ2V0VHlwZUlkLCBpbnQzMiB0YXJnZXRUeXBlTW9kLAorCQkJCQkJCSAg Q29lcmNpb25Db250ZXh0IGNjb250ZXh0LCBDb2VyY2lvbkZvcm0gY2Zvcm1hdCwKKwkJCQkJCQkg IGJvb2wgKmNhc3RfZXJyb3JfZm91bmQsIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9kZSAqY29l cmNlX3RvX2RvbWFpbihOb2RlICphcmcsIE9pZCBiYXNlVHlwZUlkLCBpbnQzMiBiYXNlVHlwZU1v ZCwKIAkJCQkJCQkgIE9pZCB0eXBlSWQsCiAJCQkJCQkJICBDb2VyY2lvbkNvbnRleHQgY2NvbnRl eHQsIENvZXJjaW9uRm9ybSBjZm9ybWF0LCBpbnQgbG9jYXRpb24sCiAJCQkJCQkJICBib29sIGhp ZGVJbnB1dENvZXJjaW9uKTsKK2V4dGVybiBOb2RlICpjb2VyY2VfdG9fZG9tYWluX3NhZmUoTm9k ZSAqYXJnLCBPaWQgYmFzZVR5cGVJZCwgaW50MzIgYmFzZVR5cGVNb2QsCisJCQkJCQkJCSAgIE9p ZCB0eXBlSWQsCisJCQkJCQkJCSAgIENvZXJjaW9uQ29udGV4dCBjY29udGV4dCwgQ29lcmNpb25G b3JtIGNmb3JtYXQsIGludCBsb2NhdGlvbiwKKwkJCQkJCQkJICAgYm9vbCBoaWRlSW5wdXRDb2Vy Y2lvbiwgYm9vbCAqY2FzdF9lcnJvcl9mb3VuZCk7CiAKIGV4dGVybiBOb2RlICpjb2VyY2VfdG9f Ym9vbGVhbihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm5vZGUsCiAJCQkJCQkJICAgY29uc3Qg Y2hhciAqY29uc3RydWN0TmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2Nhc3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jYXN0Lm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44N2NkMWMxMDFiCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jYXN0Lm91dApAQCAtMCwwICsxLDQwIEBA CisvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdl cikpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiZXJy b3IiCitMSU5FIDI6IFZBTFVFUyAoQ0FTVCgnZXJyb3InIEFTIGludGVnZXIpKTsKKyAgICAgICAg ICAgICAgICAgICAgIF4KK1ZBTFVFUyAoQ0FTVCgnZXJyb3InIEFTIGludGVnZXIgRVJST1IgT04g RVJST1IpKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjog ImVycm9yIgorTElORSAxOiBWQUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIEVSUk9SIE9O IEVSUk9SKSk7CisgICAgICAgICAgICAgICAgICAgICBeCitWQUxVRVMgKENBU1QoJ2Vycm9yJyBB UyBpbnRlZ2VyIE5VTEwgT04gRVJST1IpKTsKKyBjb2x1bW4xIAorLS0tLS0tLS0tCisgICAgICAg IAorKDEgcm93KQorCitWQUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIERFRkFVTFQgNDIg T04gRVJST1IpKTsKKyBjb2x1bW4xIAorLS0tLS0tLS0tCisgICAgICA0MgorKDEgcm93KQorCitT RUxFQ1QgQ0FTVCgnezEyMyxhYmMsNDU2fScgQVMgaW50ZWdlcltdIERFRkFVTFQgJ3stNzg5fScg T04gRVJST1IpIGFzIGFycmF5X3Rlc3QxOworIGFycmF5X3Rlc3QxIAorLS0tLS0tLS0tLS0tLQor IHstNzg5fQorKDEgcm93KQorCitTRUxFQ1QgQ0FTVCgnezIzNCxkZWYsNTY3fSc6OnRleHRbXSBB UyBpbnRlZ2VyW10gREVGQVVMVCAney0xMDExfScgT04gRVJST1IpIGFzIGFycmF5X3Rlc3QyOwor IGFycmF5X3Rlc3QyIAorLS0tLS0tLS0tLS0tLQorIHstMTAxMX0KKygxIHJvdykKKworU0VMRUNU IENBU1QodS5hcmcgQVMgaW50ZWdlciBERUZBVUxUIC0xIE9OIEVSUk9SKSBBUyB1bm5lc3RfdGVz dDEgRlJPTSB1bm5lc3QoJ3szNDUsZ2hpLDY3OH0nOjp0ZXh0W10pIEFTIHUoYXJnKTsKKyB1bm5l c3RfdGVzdDEgCistLS0tLS0tLS0tLS0tLQorICAgICAgICAgIDM0NQorICAgICAgICAgICAtMQor ICAgICAgICAgIDY3OAorKDMgcm93cykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4 IDlhMTM5ZjFlMjQuLjFkNDliOWI5NWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpA QCAtNDEsNyArNDEsNyBAQCB0ZXN0OiBnZW9tZXRyeSBob3JvbG9neSB0c3R5cGVzIHJlZ2V4IHR5 cGVfc2FuaXR5IG9wcl9zYW5pdHkgbWlzY19zYW5pdHkgY29tbWVudAogIyBleGVjdXRlIHR3byBj b3B5IHRlc3RzIGluIHBhcmFsbGVsLCB0byBjaGVjayB0aGF0IGNvcHkgaXRzZWxmCiAjIGlzIGNv bmN1cnJlbnQgc2FmZS4KICMgLS0tLS0tLS0tLQotdGVzdDogY29weSBjb3B5c2VsZWN0IGNvcHlk bWwgaW5zZXJ0IGluc2VydF9jb25mbGljdAordGVzdDogY29weSBjb3B5c2VsZWN0IGNvcHlkbWwg aW5zZXJ0IGluc2VydF9jb25mbGljdCBjYXN0CiAKICMgLS0tLS0tLS0tLQogIyBNb3JlIGdyb3Vw cyBvZiBwYXJhbGxlbCB0ZXN0cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY2Fz dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jYXN0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5mYWI4Y2I3ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY2FzdC5zcWwKQEAgLTAsMCArMSwxMSBAQAorLyogT04gRVJST1IgYmVo YXZpb3IgKi8KKworVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlcikpOworVkFMVUVTIChD QVNUKCdlcnJvcicgQVMgaW50ZWdlciBFUlJPUiBPTiBFUlJPUikpOworVkFMVUVTIChDQVNUKCdl cnJvcicgQVMgaW50ZWdlciBOVUxMIE9OIEVSUk9SKSk7CitWQUxVRVMgKENBU1QoJ2Vycm9yJyBB UyBpbnRlZ2VyIERFRkFVTFQgNDIgT04gRVJST1IpKTsKKworU0VMRUNUIENBU1QoJ3sxMjMsYWJj LDQ1Nn0nIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTc4OX0nIE9OIEVSUk9SKSBhcyBhcnJheV90 ZXN0MTsKK1NFTEVDVCBDQVNUKCd7MjM0LGRlZiw1Njd9Jzo6dGV4dFtdIEFTIGludGVnZXJbXSBE RUZBVUxUICd7LTEwMTF9JyBPTiBFUlJPUikgYXMgYXJyYXlfdGVzdDI7CisKK1NFTEVDVCBDQVNU KHUuYXJnIEFTIGludGVnZXIgREVGQVVMVCAtMSBPTiBFUlJPUikgQVMgdW5uZXN0X3Rlc3QxIEZS T00gdW5uZXN0KCd7MzQ1LGdoaSw2Nzh9Jzo6dGV4dFtdKSBBUyB1KGFyZyk7Ci0tIAoyLjM4LjEK Cg== --000000000000039f2b05f0363c51--