Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tmUeA-0075wm-Dq for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Feb 2025 09:21:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tmUe9-00HWM4-Mc for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Feb 2025 09:21:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tmUe9-00HWLw-0S for pgsql-hackers@lists.postgresql.org; Mon, 24 Feb 2025 09:21:05 +0000 Received: from mail-yw1-x112f.google.com ([2607:f8b0:4864:20::112f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tmUe6-000Rr2-0V for pgsql-hackers@postgresql.org; Mon, 24 Feb 2025 09:21:04 +0000 Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-6fcf0617523so6751527b3.3 for ; Mon, 24 Feb 2025 01:21:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740388862; x=1740993662; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6zVqcjX/GVQbjwW4BGDCfU5sZ2iW5yO+VqsvXy3oq0M=; b=LcCpyvadEdSjCqNpwdxr6pXFff+w0w7rJNdjOz2G4x14zE8GCW2ODg0pemwthNTcub /O1xewTmqEDehOcSrBiTPQNg/e2vAyColCPj3KAogqJu0/LvB3sfdwlLdorw9mJ2SnCj anS3d4mijmfiHDi1sdg+KiFb8tZXUQ5N5vJxkr7ZuTdb0V3MsYqmUMDm2TNfMo5DUn3E 1tvk/ABagvS1UIqzjBkYlIMlSmomSfiLjvU1FdRgBs9tnJGNKL6ttvESRMMkoJz/LRjn NxOISL2Qz2hA5P0sV5PcmlenRT/+/XqrLVAclrymBJj7vT1u3aBMEYWEa+Ye5Ux+Xxny RRUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740388862; x=1740993662; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6zVqcjX/GVQbjwW4BGDCfU5sZ2iW5yO+VqsvXy3oq0M=; b=ULX4bT633EfsjWacE7QxnnlkDpZPNRk4QRAng892/xFB1HMDI4LrtAwSRRPT2zoq53 rzZrS45SG18upIyXEIZ8QhMhNv/Yzcrfu1NMX8j5+ULpNaAHvdsqmKHO3U88lhvMcMaj 29QLMc72Y/INTydTDR99JEURtWmIPRCKCVUhVEKVx4e3P1LQJMsWU6SWOaeHEyQtSCRx 9TTttr1As9RtYeq+oMi+X4WctQYONs1IBGrwDiHbPzs0BgN/8WmLNgaueYrMYc5Zbykt qtM81gbFCYC4oG2/1HDwNDzcNnQFyHT33iQSE0j9/42yQ2ej5QqJEWZR8YK6WmUDRksG qUpw== X-Forwarded-Encrypted: i=1; AJvYcCU+Onl4dxHTV3YMPhEjq+fmZvwxmjkEGne+44bUfP6BgQhVrRJE6vWJFUOJPHKy7mc173tULSeIzNkGw5c7@postgresql.org X-Gm-Message-State: AOJu0Yy+CTnQQ3KFYV/cjJ0U9kwxgVhUVvCl/ShN7AC3flzzlu4HIo6K xd/TJNZ/vBjGFKYztOY3RdV4elJvdy+IF7QFhcp0GK9jQe/oqdsdMY2AQzg7xdqVUDITYRl4Pjf eN5MVm0FulgpN3OEMSh21ydt0Fjc= X-Gm-Gg: ASbGncuzM+cW/qS6ygFNpkzXXqW5bYOu2wvjOGJSXAlgR2rNFxgO9PLc7+XpDfURyK3 qv53fZWChfIa/N8coQpsZG5ufrP7VQ7X9YsFANvu5W7HhmaruGWuyuIxHGcyB3S2xVYA4JWrhLe 33Ab6yd4j7SLIEqLRDRTiEKGTK51sgQsBzhK0Uj9lebA== X-Google-Smtp-Source: AGHT+IHtWNSy2RUX3GCcav8U/tNAvLUGRpNJVg//TFlNxN19Ur85NdmP3GAcHmwEr3YMi9E3BygpyDf9fT2T96w5N7M= X-Received: by 2002:a05:690c:4c0b:b0:6f9:7ce7:b107 with SMTP id 00721157ae682-6fbcc3831ccmr102941537b3.29.1740388862483; Mon, 24 Feb 2025 01:21:02 -0800 (PST) MIME-Version: 1.0 References: <831d7f99-0618-48e5-8557-f3d57137f339@eisentraut.org> <64c2468c-3b69-44d7-863a-165931a70c1d@eisentraut.org> <8be3512a-a23f-4088-a9ec-bf68650a2997@eisentraut.org> <75eb1a6f-d59f-42e6-8a78-124ee808cda7@gmail.com> <8d6a3d4c-f630-4cf9-aced-6cead95776e5@Spark> <12d5cce9-917f-4a99-86d3-715bb3b363bb@Spark> In-Reply-To: From: Richard Guo Date: Mon, 24 Feb 2025 18:20:51 +0900 X-Gm-Features: AWEUYZndLPQAXlvKvRaearoAjLMHOnxMsQ7fvMrjvs7mXkGoDtZY00hdHHgc3dU Message-ID: Subject: Re: Virtual generated columns To: jian he Cc: Dean Rasheed , Peter Eisentraut , Zhang Mingli , Alexander Lakhin , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000eb9d6b062edfdba6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eb9d6b062edfdba6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Feb 24, 2025 at 3:50=E2=80=AFPM jian he wrote: > On Sat, Feb 22, 2025 at 11:12=E2=80=AFPM Richard Guo wrote: > > On Sat, Feb 22, 2025 at 11:55=E2=80=AFPM Richard Guo wrote: > > > Attached are the updated patches to fix all the mentioned issues. I > > > plan to push them early next week after staring at the code for a bit > > > longer, barring any objections. > > > > Sign... I neglected to make the change in 0001 that a Var newnode > > compares its varlevelsup with 0 when deciding to wrap it in a > > ReturningExpr. I made this change in 0002 though, so maybe we're good > > here. Still, I'll fix this later. > > > i also noticed this issue... > > some minor comments about v7. Thanks for reviewing. Here are the updated patches with revised comments and some tweaks to the commit messages. I plan to push them in one or two days. Thanks Richard --000000000000eb9d6b062edfdba6 Content-Type: application/octet-stream; name="v8-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Disposition: attachment; filename="v8-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7iukkl90 RnJvbSA3MWY1NGU3MDMwMTMwNzdkZDdjY2NkNDZkMDIzOTY1MzkzMDU5OTM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMSBGZWIgMjAyNSAwOTo0Njo1OSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg MS8yXSBFeHBhbmQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpbiB0aGUgcGxhbm5lcgoKQ29t bWl0IDgzZWE2YzU0MCBhZGRlZCBzdXBwb3J0IGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5z IHRoYXQgYXJlCmNvbXB1dGVkIG9uIHJlYWQuICBBbGwgVmFyIG5vZGVzIGluIHRoZSBxdWVyeSB0 aGF0IHJlZmVyZW5jZSB2aXJ0dWFsCmdlbmVyYXRlZCBjb2x1bW5zIG11c3QgYmUgcmVwbGFjZWQg d2l0aCB0aGUgY29ycmVzcG9uZGluZyBnZW5lcmF0aW9uCmV4cHJlc3Npb25zLiAgQ3VycmVudGx5 LCB0aGlzIHJlcGxhY2VtZW50IG9jY3VycyBpbiB0aGUgcmV3cml0ZXIuCkhvd2V2ZXIsIHRoaXMg YXBwcm9hY2ggaGFzIHNldmVyYWwgaXNzdWVzLiAgSWYgYSBWYXIgcmVmZXJlbmNpbmcgYQp2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW4gaGFzIGFueSB2YXJudWxsaW5ncmVscywgdGhvc2UgdmFybnVs bGluZ3JlbHMKbmVlZCB0byBiZSBwcm9wYWdhdGVkIGludG8gdGhlIGdlbmVyYXRpb24gZXhwcmVz c2lvbi4gIEZhaWxpbmcgdG8gZG8Kc28gY2FuIGxlYWQgdG8gIndyb25nIHZhcm51bGxpbmdyZWxz IiBlcnJvcnMgYW5kIGltcHJvcGVyIG91dGVyLWpvaW4KcmVtb3ZhbC4KCkFkZGl0aW9uYWxseSwg aWYgc3VjaCBhIFZhciBjb21lcyBmcm9tIHRoZSBudWxsYWJsZSBzaWRlIG9mIGFuIG91dGVyCmpv aW4sIHdlIG1heSBuZWVkIHRvIHdyYXAgdGhlIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBpbiBhClBs YWNlSG9sZGVyVmFyIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGV2YWx1YXRlZCBhdCB0aGUgcmlnaHQg cGxhY2UgYW5kCmhlbmNlIGlzIGZvcmNlZCB0byBudWxsIHdoZW4gdGhlIG91dGVyIGpvaW4gc2hv dWxkIGRvIHNvLiAgSW4gY2VydGFpbgpjYXNlcywgc3VjaCBhcyB3aGVuIHRoZSBxdWVyeSB1c2Vz IGdyb3VwaW5nIHNldHMsIHdlIGFsc28gbmVlZCBhClBsYWNlSG9sZGVyVmFyIGZvciBhbnl0aGlu ZyB0aGF0IGlzIG5vdCBhIHNpbXBsZSBWYXIgdG8gaXNvbGF0ZQpzdWJleHByZXNzaW9ucy4gIEZh aWx1cmUgdG8gZG8gc28gY2FuIHJlc3VsdCBpbiBpbmNvcnJlY3QgcmVzdWx0cy4KClRvIGZpeCB0 aGVzZSBpc3N1ZXMsIHRoaXMgcGF0Y2ggZXhwYW5kcyB0aGUgdmlydHVhbCBnZW5lcmF0ZWQgY29s dW1ucwppbiB0aGUgcGxhbm5lciByYXRoZXIgdGhhbiBpbiB0aGUgcmV3cml0ZXIsIGFuZCBsZXZl cmFnZXMgdGhlCnB1bGx1cF9yZXBsYWNlX3ZhcnMgYXJjaGl0ZWN0dXJlIHRvIGF2b2lkIGNvZGUg ZHVwbGljYXRpb24uICBUaGUKZ2VuZXJhdGlvbiBleHByZXNzaW9ucyB3aWxsIGJlIGNvcnJlY3Rs eSBtYXJrZWQgd2l0aCBudWxsaW5ncmVsIGJpdHMKYW5kIHdyYXBwZWQgaW4gUGxhY2VIb2xkZXJW YXJzIHdoZW4gbmVlZGVkIGJ5IHRoZSBwdWxsdXBfcmVwbGFjZV92YXJzCmNhbGxiYWNrIGZ1bmN0 aW9uLiAgVGhpcyByZXF1aXJlcyBoYW5kbGluZyB0aGUgT0xEL05FVyBSRVRVUk5JTkcgbGlzdApW YXJzIGluIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2ssIGFzIGl0IG1heSBub3cgZGVhbCB3 aXRoIFZhcnMKcmVmZXJlbmNpbmcgdGhlIHJlc3VsdCByZWxhdGlvbiBpbnN0ZWFkIG9mIGEgc3Vi cXVlcnkuCgpUaGUgIndyb25nIHZhcm51bGxpbmdyZWxzIiBlcnJvciB3YXMgcmVwb3J0ZWQgYnkg QWxleGFuZGVyIExha2hpbi4KVGhlIGluY29ycmVjdCByZXN1bHQgaXNzdWUgYW5kIHRoZSBpbXBy b3BlciBvdXRlci1qb2luIHJlbW92YWwgaXNzdWUKd2VyZSByZXBvcnRlZCBieSBSaWNoYXJkIEd1 by4KCkF1dGhvcjogUmljaGFyZCBHdW8gPGd1b2ZlbmdsaW51eEBnbWFpbC5jb20+CkF1dGhvcjog RGVhbiBSYXNoZWVkIDxkZWFuLmEucmFzaGVlZEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBKaWFu IEhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vNzVlYjFhNmYtZDU5Zi00MmU2LThhNzgtMTI0ZWU4MDhjZGE3QGdtYWlsLmNvbQot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAgOCAr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyAgICAgfCAxOTYgKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMgICAg ICAgICAgfCAgOTEgKysrKy0tLS0KIHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMg ICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAg ICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggICAgICAg ICAgICB8ICAgMyArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQg ICAgfCAxMzAgKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmly dHVhbC5zcWwgICAgfCAgNTcgKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDQ0NSBpbnNlcnRpb25z KCspLCA0NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5k ZXggN2IxYThhMGE5ZjEuLjM2ZWU2ZGQ0M2RlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCkBAIC03MzQsNiArNzM0LDE0IEBAIHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBQbGFubmVySW5mbyAqcGFyZW50X3Jvb3QsCiAJICovCiAJ cHJlcHJvY2Vzc19mdW5jdGlvbl9ydGVzKHJvb3QpOwogCisJLyoKKwkgKiBTY2FuIHRoZSByYW5n ZXRhYmxlIGZvciByZWxhdGlvbnMgd2l0aCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCBhbmQK KwkgKiByZXBsYWNlIGFsbCBWYXIgbm9kZXMgaW4gdGhlIHF1ZXJ5IHRoYXQgcmVmZXJlbmNlIHRo ZXNlIGNvbHVtbnMgd2l0aAorCSAqIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb25zLiAgUmVjdXJz aW9uIGlzc3VlcyBoZXJlIGFyZSBoYW5kbGVkIGluIHRoZQorCSAqIHNhbWUgd2F5IGFzIGZvciBT dWJMaW5rcy4KKwkgKi8KKwlwYXJzZSA9IHJvb3QtPnBhcnNlID0gZXhwYW5kX3ZpcnR1YWxfZ2Vu ZXJhdGVkX2NvbHVtbnMocm9vdCk7CisKIAkvKgogCSAqIENoZWNrIHRvIHNlZSBpZiBhbnkgc3Vi cXVlcmllcyBpbiB0aGUgam9pbnRyZWUgY2FuIGJlIG1lcmdlZCBpbnRvIHRoaXMKIAkgKiBxdWVy eS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggNWQ5MjI1 ZTk5MDkuLjhjZGFjYjZhYTYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJl cC9wcmVwam9pbnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9p bnRyZWUuYwpAQCAtNyw2ICs3LDcgQEAKICAqCQlyZXBsYWNlX2VtcHR5X2pvaW50cmVlCiAgKgkJ cHVsbF91cF9zdWJsaW5rcwogICoJCXByZXByb2Nlc3NfZnVuY3Rpb25fcnRlcworICoJCWV4cGFu ZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zCiAgKgkJcHVsbF91cF9zdWJxdWVyaWVzCiAgKgkJ ZmxhdHRlbl9zaW1wbGVfdW5pb25fYWxsCiAgKgkJZG8gZXhwcmVzc2lvbiBwcmVwcm9jZXNzaW5n IChpbmNsdWRpbmcgZmxhdHRlbmluZyBKT0lOIGFsaWFzIHZhcnMpCkBAIC0yNSw2ICsyNiw3IEBA CiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMzksNyArNDEsOSBAQAogI2luY2x1ZGUgIm9wdGltaXpl ci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgi CiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwu aCIKIAogCiB0eXBlZGVmIHN0cnVjdCBudWxsaW5ncmVsX2luZm8KQEAgLTU4LDYgKzYyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgcHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0CiAJUGxhbm5lckluZm8g KnJvb3Q7CiAJTGlzdAkgICAqdGFyZ2V0bGlzdDsJCS8qIHRsaXN0IG9mIHN1YnF1ZXJ5IGJlaW5n IHB1bGxlZCB1cCAqLwogCVJhbmdlVGJsRW50cnkgKnRhcmdldF9ydGU7CS8qIFJURSBvZiBzdWJx dWVyeSAqLworCWludAkJCXJlc3VsdF9yZWxhdGlvbjsJLyogdGhlIGluZGV4IG9mIHRoZSByZXN1 bHQgcmVsYXRpb24gaW4gdGhlCisJCQkJCQkJCQkgKiByZXdyaXR0ZW4gcXVlcnkgKi8KIAlSZWxp ZHMJCXJlbGlkczsJCQkvKiByZWxpZHMgd2l0aGluIHN1YnF1ZXJ5LCBhcyBudW1iZXJlZCBhZnRl cgogCQkJCQkJCQkgKiBwdWxsdXAgKHNldCBvbmx5IGlmIHRhcmdldF9ydGUtPmxhdGVyYWwpICov CiAJbnVsbGluZ3JlbF9pbmZvICpudWxsaW5mbzsJLyogcGVyLVJURSBudWxsaW5ncmVsIGluZm8g KHNldCBvbmx5IGlmCkBAIC05MTYsNiArOTIyLDEzMyBAQCBwcmVwcm9jZXNzX2Z1bmN0aW9uX3J0 ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJfQogfQogCisvKgorICogZXhwYW5kX3ZpcnR1YWxfZ2Vu ZXJhdGVkX2NvbHVtbnMKKyAqCQlFeHBhbmQgYWxsIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBy ZWZlcmVuY2VzIGluIGEgcXVlcnkuCisgKgorICogVGhpcyBzY2FucyB0aGUgcmFuZ2V0YWJsZSBm b3IgcmVsYXRpb25zIHdpdGggdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucywgYW5kCisgKiByZXBs YWNlcyBhbGwgVmFyIG5vZGVzIGluIHRoZSBxdWVyeSB0aGF0IHJlZmVyZW5jZSB0aGVzZSBjb2x1 bW5zIHdpdGggdGhlCisgKiBnZW5lcmF0aW9uIGV4cHJlc3Npb25zLiAgTm90ZSB0aGF0IHdlIGRv IG5vdCBkZXNjZW5kIGludG8gc3VicXVlcmllczsgdGhhdAorICogaXMgdGFrZW4gY2FyZSBvZiB3 aGVuIHRoZSBzdWJxdWVyaWVzIGFyZSBwbGFubmVkLgorICoKKyAqIFRoaXMgaGFzIHRvIGJlIGRv bmUgYWZ0ZXIgd2UgaGF2ZSBwdWxsZWQgdXAgYW55IFN1YkxpbmtzIHdpdGhpbiB0aGUgcXVlcnkn cworICogcXVhbHM7IG90aGVyd2lzZSBhbnkgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIHJlZmVy ZW5jZXMgd2l0aGluIHRoZSBTdWJMaW5rcworICogdGhhdCBzaG91bGQgYmUgdHJhbnNmb3JtZWQg aW50byBqb2lucyB3b3VsZG4ndCBnZXQgZXhwYW5kZWQuCisgKgorICogUmV0dXJucyBhIG1vZGlm aWVkIGNvcHkgb2YgdGhlIHF1ZXJ5IHRyZWUsIGlmIGFueSByZWxhdGlvbnMgd2l0aCB2aXJ0dWFs CisgKiBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgcHJlc2VudC4KKyAqLworUXVlcnkgKgorZXhwYW5k X3ZpcnR1YWxfZ2VuZXJhdGVkX2NvbHVtbnMoUGxhbm5lckluZm8gKnJvb3QpCit7CisJUXVlcnkJ ICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJaW50CQkJcnRfaW5kZXg7CisJTGlzdENlbGwgICAq bGM7CisKKwlydF9pbmRleCA9IDA7CisJZm9yZWFjaChsYywgcGFyc2UtPnJ0YWJsZSkKKwl7CisJ CVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYyk7CisJCVJl bGF0aW9uCXJlbDsKKwkJVHVwbGVEZXNjCXR1cGRlc2M7CisKKwkJKytydF9pbmRleDsKKworCQkv KgorCQkgKiBPbmx5IG5vcm1hbCByZWxhdGlvbnMgY2FuIGhhdmUgdmlydHVhbCBnZW5lcmF0ZWQg Y29sdW1ucy4KKwkJICovCisJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJ Y29udGludWU7CisKKwkJcmVsID0gdGFibGVfb3BlbihydGUtPnJlbGlkLCBOb0xvY2spOworCisJ CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCWlmICh0dXBkZXNjLT5jb25zdHIg JiYgdHVwZGVzYy0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpCisJCXsKKwkJCUxpc3QJ ICAgKnRsaXN0ID0gTklMOworCQkJcHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0IHJ2Y29udGV4 dDsKKworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJewor CQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOwor CQkJCVRhcmdldEVudHJ5ICp0bGU7CisKKwkJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkID09IEFU VFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQl7CisJCQkJCU5vZGUJICAgKmRlZmV4cHI7 CisKKwkJCQkJZGVmZXhwciA9IGJ1aWxkX2dlbmVyYXRpb25fZXhwcmVzc2lvbihyZWwsIGkgKyAx KTsKKwkJCQkJQ2hhbmdlVmFyTm9kZXMoZGVmZXhwciwgMSwgcnRfaW5kZXgsIDApOworCisJCQkJ CXRsZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBkZWZleHByLCBpICsgMSwgMCwgZmFsc2Up OworCQkJCQl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRsZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQl7CisJCQkJCVZhcgkJICAgKnZhcjsKKworCQkJCQl2YXIgPSBtYWtlVmFyKHJ0X2luZGV4LAor CQkJCQkJCQkgIGkgKyAxLAorCQkJCQkJCQkgIGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCQkgIGF0 dHItPmF0dHR5cG1vZCwKKwkJCQkJCQkJICBhdHRyLT5hdHRjb2xsYXRpb24sCisJCQkJCQkJCSAg MCk7CisKKwkJCQkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZhciwgaSArIDEsIDAs IGZhbHNlKTsKKwkJCQkJdGxpc3QgPSBsYXBwZW5kKHRsaXN0LCB0bGUpOworCQkJCX0KKwkJCX0K KworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHRsaXN0KSA+IDApOworCQkJQXNzZXJ0KCFydGUtPmxh dGVyYWwpOworCisJCQkvKgorCQkJICogVGhlIHJlbGF0aW9uJ3MgdGFyZ2V0bGlzdCBpdGVtcyBh cmUgbm93IGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtCisJCQkgKiB0byBpbnNlcnQgaW50byB0aGUg cXVlcnksIGV4Y2VwdCB0aGF0IHdlIG1heSBuZWVkIHRvIHdyYXAgdGhlbQorCQkJICogaW4gUGxh Y2VIb2xkZXJWYXJzLiAgU2V0IHVwIHJlcXVpcmVkIGNvbnRleHQgZGF0YSBmb3IKKwkJCSAqIHB1 bGx1cF9yZXBsYWNlX3ZhcnMuCisJCQkgKi8KKwkJCXJ2Y29udGV4dC5yb290ID0gcm9vdDsKKwkJ CXJ2Y29udGV4dC50YXJnZXRsaXN0ID0gdGxpc3Q7CisJCQlydmNvbnRleHQudGFyZ2V0X3J0ZSA9 IHJ0ZTsKKwkJCXJ2Y29udGV4dC5yZXN1bHRfcmVsYXRpb24gPSBwYXJzZS0+cmVzdWx0UmVsYXRp b247CisJCQkvKiB3b24ndCBuZWVkIHRoZXNlIHZhbHVlcyAqLworCQkJcnZjb250ZXh0LnJlbGlk cyA9IE5VTEw7CisJCQlydmNvbnRleHQubnVsbGluZm8gPSBOVUxMOworCQkJLyogcGFzcyBOVUxM IGZvciBvdXRlcl9oYXNTdWJMaW5rcyAqLworCQkJcnZjb250ZXh0Lm91dGVyX2hhc1N1Ykxpbmtz ID0gTlVMTDsKKwkJCXJ2Y29udGV4dC52YXJubyA9IHJ0X2luZGV4OworCQkJLyogdGhpcyBmbGFn IHdpbGwgYmUgc2V0IGJlbG93LCBpZiBuZWVkZWQgKi8KKwkJCXJ2Y29udGV4dC53cmFwX25vbl92 YXJzID0gZmFsc2U7CisJCQkvKiBpbml0aWFsaXplIGNhY2hlIGFycmF5IHdpdGggaW5kZXhlcyAw IC4uIGxlbmd0aCh0bGlzdCkgKi8KKwkJCXJ2Y29udGV4dC5ydl9jYWNoZSA9IHBhbGxvYzAoKGxp c3RfbGVuZ3RoKHRsaXN0KSArIDEpICoKKwkJCQkJCQkJCQkgc2l6ZW9mKE5vZGUgKikpOworCisJ CQkvKgorCQkJICogSWYgdGhlIHF1ZXJ5IHVzZXMgZ3JvdXBpbmcgc2V0cywgd2UgbmVlZCBhIFBs YWNlSG9sZGVyVmFyIGZvcgorCQkJICogYW55dGhpbmcgdGhhdCdzIG5vdCBhIHNpbXBsZSBWYXIu ICBBZ2FpbiwgdGhpcyBlbnN1cmVzIHRoYXQKKwkJCSAqIGV4cHJlc3Npb25zIHJldGFpbiB0aGVp ciBzZXBhcmF0ZSBpZGVudGl0eSBzbyB0aGF0IHRoZXkgd2lsbAorCQkJICogbWF0Y2ggZ3JvdXBp bmcgc2V0IGNvbHVtbnMgd2hlbiBhcHByb3ByaWF0ZS4gIChJdCdkIGJlCisJCQkgKiBzdWZmaWNp ZW50IHRvIHdyYXAgdmFsdWVzIHVzZWQgaW4gZ3JvdXBpbmcgc2V0IGNvbHVtbnMsIGFuZCBkbwor CQkJICogc28gb25seSBpbiBub24tYWdncmVnYXRlZCBwb3J0aW9ucyBvZiB0aGUgdGxpc3QgYW5k IGhhdmluZ1F1YWwsCisJCQkgKiBidXQgdGhhdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGluZnJh c3RydWN0dXJlIHRoYXQKKwkJCSAqIHB1bGx1cF9yZXBsYWNlX3ZhcnMgaGFzbid0IGN1cnJlbnRs eSBnb3QuKQorCQkJICovCisJCQlpZiAocGFyc2UtPmdyb3VwaW5nU2V0cykKKwkJCQlydmNvbnRl eHQud3JhcF9ub25fdmFycyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBBcHBseSBwdWxsdXAgdmFy aWFibGUgcmVwbGFjZW1lbnQgdGhyb3VnaG91dCB0aGUgcXVlcnkgdHJlZS4KKwkJCSAqLworCQkJ cGFyc2UgPSAoUXVlcnkgKikgcHVsbHVwX3JlcGxhY2VfdmFycygoTm9kZSAqKSBwYXJzZSwgJnJ2 Y29udGV4dCk7CisJCX0KKworCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CisJfQorCisJcmV0 dXJuIHBhcnNlOworfQorCiAvKgogICogcHVsbF91cF9zdWJxdWVyaWVzCiAgKgkJTG9vayBmb3Ig c3VicXVlcmllcyBpbiB0aGUgcmFuZ2V0YWJsZSB0aGF0IGNhbiBiZSBwdWxsZWQgdXAgaW50bwpA QCAtMTE5Nyw2ICsxMzMwLDEzIEBAIHB1bGxfdXBfc2ltcGxlX3N1YnF1ZXJ5KFBsYW5uZXJJbmZv ICpyb290LCBOb2RlICpqdG5vZGUsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkgKi8KIAlwcmVwcm9j ZXNzX2Z1bmN0aW9uX3J0ZXMoc3Vicm9vdCk7CiAKKwkvKgorCSAqIFNjYW4gdGhlIHJhbmdldGFi bGUgZm9yIHJlbGF0aW9ucyB3aXRoIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMsIGFuZAorCSAq IHJlcGxhY2UgYWxsIFZhciBub2RlcyBpbiB0aGUgcXVlcnkgdGhhdCByZWZlcmVuY2UgdGhlc2Ug Y29sdW1ucyB3aXRoCisJICogdGhlIGdlbmVyYXRpb24gZXhwcmVzc2lvbnMuCisJICovCisJc3Vi cXVlcnkgPSBzdWJyb290LT5wYXJzZSA9IGV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5z KHN1YnJvb3QpOworCiAJLyoKIAkgKiBSZWN1cnNpdmVseSBwdWxsIHVwIHRoZSBzdWJxdWVyeSdz IHN1YnF1ZXJpZXMsIHNvIHRoYXQKIAkgKiBwdWxsX3VwX3N1YnF1ZXJpZXMnIHByb2Nlc3Npbmcg aXMgY29tcGxldGUgZm9yIGl0cyBqb2ludHJlZSBhbmQKQEAgLTEyNzQsNiArMTQxNCw3IEBAIHB1 bGxfdXBfc2ltcGxlX3N1YnF1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsIFJh bmdlVGJsRW50cnkgKnJ0ZSwKIAlydmNvbnRleHQucm9vdCA9IHJvb3Q7CiAJcnZjb250ZXh0LnRh cmdldGxpc3QgPSBzdWJxdWVyeS0+dGFyZ2V0TGlzdDsKIAlydmNvbnRleHQudGFyZ2V0X3J0ZSA9 IHJ0ZTsKKwlydmNvbnRleHQucmVzdWx0X3JlbGF0aW9uID0gMDsKIAlpZiAocnRlLT5sYXRlcmFs KQogCXsKIAkJcnZjb250ZXh0LnJlbGlkcyA9IGdldF9yZWxpZHNfaW5fam9pbnRyZWUoKE5vZGUg Kikgc3VicXVlcnktPmpvaW50cmVlLApAQCAtMTgzNCw2ICsxOTc1LDcgQEAgcHVsbF91cF9zaW1w bGVfdmFsdWVzKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsIFJhbmdlVGJsRW50cnkg KnJ0ZSkKIAlydmNvbnRleHQucm9vdCA9IHJvb3Q7CiAJcnZjb250ZXh0LnRhcmdldGxpc3QgPSB0 bGlzdDsKIAlydmNvbnRleHQudGFyZ2V0X3J0ZSA9IHJ0ZTsKKwlydmNvbnRleHQucmVzdWx0X3Jl bGF0aW9uID0gMDsKIAlydmNvbnRleHQucmVsaWRzID0gTlVMTDsJLyogY2FuJ3QgYmUgYW55IGxh dGVyYWwgcmVmZXJlbmNlcyBoZXJlICovCiAJcnZjb250ZXh0Lm51bGxpbmZvID0gTlVMTDsKIAly dmNvbnRleHQub3V0ZXJfaGFzU3ViTGlua3MgPSAmcGFyc2UtPmhhc1N1YkxpbmtzOwpAQCAtMTk5 Myw2ICsyMTM1LDcgQEAgcHVsbF91cF9jb25zdGFudF9mdW5jdGlvbihQbGFubmVySW5mbyAqcm9v dCwgTm9kZSAqanRub2RlLAogCQkJCQkJCQkJCQkJCSAgTlVMTCwgLyogcmVzbmFtZSAqLwogCQkJ CQkJCQkJCQkJCSAgZmFsc2UpKTsJLyogcmVzanVuayAqLwogCXJ2Y29udGV4dC50YXJnZXRfcnRl ID0gcnRlOworCXJ2Y29udGV4dC5yZXN1bHRfcmVsYXRpb24gPSAwOwogCiAJLyoKIAkgKiBTaW5j ZSB0aGlzIGZ1bmN0aW9uIHdhcyByZWR1Y2VkIHRvIGEgQ29uc3QsIGl0IGRvZXNuJ3QgY29udGFp biBhbnkKQEAgLTI0OTAsNiArMjYzMywxMCBAQCBwdWxsdXBfcmVwbGFjZV92YXJzX2NhbGxiYWNr KFZhciAqdmFyLAogCWJvb2wJCW5lZWRfcGh2OwogCU5vZGUJICAgKm5ld25vZGU7CiAKKwkvKiBT eXN0ZW0gY29sdW1ucyBhcmUgbm90IHJlcGxhY2VkLiAqLworCWlmICh2YXJhdHRubyA8IEludmFs aWRBdHRyTnVtYmVyKQorCQlyZXR1cm4gKE5vZGUgKikgY29weU9iamVjdCh2YXIpOworCiAJLyoK IAkgKiBXZSBuZWVkIGEgUGxhY2VIb2xkZXJWYXIgaWYgdGhlIFZhci10by1iZS1yZXBsYWNlZCBo YXMgbm9uZW1wdHkKIAkgKiB2YXJudWxsaW5ncmVscyAodW5sZXNzIHdlIGZpbmQgYmVsb3cgdGhh dCB0aGUgcmVwbGFjZW1lbnQgZXhwcmVzc2lvbiBpcwpAQCAtMjU1OSw2ICsyNzA2LDIyIEBAIHB1 bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCXJvd2V4cHItPmxvY2F0aW9u ID0gdmFyLT5sb2NhdGlvbjsKIAkJbmV3bm9kZSA9IChOb2RlICopIHJvd2V4cHI7CiAKKwkJLyog SGFuZGxlIGFueSBPTEQvTkVXIFJFVFVSTklORyBsaXN0IFZhcnMgKi8KKwkJaWYgKHZhci0+dmFy cmV0dXJuaW5ndHlwZSAhPSBWQVJfUkVUVVJOSU5HX0RFRkFVTFQpCisJCXsKKwkJCS8qCisJCQkg KiBXcmFwIHRoZSBSb3dFeHByIGluIGEgUmV0dXJuaW5nRXhwciBub2RlLCBzbyB0aGF0IHRoZSBl eGVjdXRvcgorCQkJICogcmV0dXJucyBOVUxMIGlmIHRoZSBPTEQvTkVXIHJvdyBkb2VzIG5vdCBl eGlzdC4KKwkJCSAqLworCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5p bmdFeHByKTsKKworCQkJcmV4cHItPnJldGxldmVsc3VwID0gMDsKKwkJCXJleHByLT5yZXRvbGQg PSAodmFyLT52YXJyZXR1cm5pbmd0eXBlID09IFZBUl9SRVRVUk5JTkdfT0xEKTsKKwkJCXJleHBy LT5yZXRleHByID0gKEV4cHIgKikgbmV3bm9kZTsKKworCQkJbmV3bm9kZSA9IChOb2RlICopIHJl eHByOworCQl9CisKIAkJLyoKIAkJICogSW5zZXJ0IFBsYWNlSG9sZGVyVmFyIGlmIG5lZWRlZC4g IE5vdGljZSB0aGF0IHdlIGFyZSB3cmFwcGluZyBvbmUKIAkJICogUGxhY2VIb2xkZXJWYXIgYXJv dW5kIHRoZSB3aG9sZSBSb3dFeHByLCByYXRoZXIgdGhhbiBwdXR0aW5nIG9uZQpAQCAtMjU4OCw2 ICsyNzUxLDM5IEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCS8q IE1ha2UgYSBjb3B5IG9mIHRoZSB0bGlzdCBpdGVtIHRvIHJldHVybiAqLwogCQluZXdub2RlID0g KE5vZGUgKikgY29weU9iamVjdCh0bGUtPmV4cHIpOwogCisJCS8qIEhhbmRsZSBhbnkgT0xEL05F VyBSRVRVUk5JTkcgbGlzdCBWYXJzICovCisJCWlmICh2YXItPnZhcnJldHVybmluZ3R5cGUgIT0g VkFSX1JFVFVSTklOR19ERUZBVUxUKQorCQl7CisJCQkvKgorCQkJICogQ29weSB2YXJyZXR1cm5p bmd0eXBlIG9udG8gYW55IFZhcnMgaW4gdGhlIHRsaXN0IGl0ZW0gdGhhdAorCQkJICogcmVmZXIg dG8gcmVzdWx0X3JlbGF0aW9uICh3aGljaCBoYWQgYmV0dGVyIGJlIG5vbi16ZXJvKS4KKwkJCSAq LworCQkJaWYgKHJjb24tPnJlc3VsdF9yZWxhdGlvbiA9PSAwKQorCQkJCWVsb2coRVJST1IsICJ2 YXJpYWJsZSByZXR1cm5pbmcgb2xkL25ldyBmb3VuZCBvdXRzaWRlIFJFVFVSTklORyBsaXN0Iik7 CisKKwkJCVNldFZhclJldHVybmluZ1R5cGUoKE5vZGUgKikgbmV3bm9kZSwgcmNvbi0+cmVzdWx0 X3JlbGF0aW9uLAorCQkJCQkJCQkwLCB2YXItPnZhcnJldHVybmluZ3R5cGUpOworCisJCQkvKgor CQkJICogSWYgdGhlIHJlcGxhY2VtZW50IGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldGxpc3QgaXMg bm90IHNpbXBseSBhCisJCQkgKiBWYXIgcmVmZXJlbmNpbmcgcmVzdWx0X3JlbGF0aW9uLCB3cmFw IGl0IGluIGEgUmV0dXJuaW5nRXhwcgorCQkJICogbm9kZSwgc28gdGhhdCB0aGUgZXhlY3V0b3Ig cmV0dXJucyBOVUxMIGlmIHRoZSBPTEQvTkVXIHJvdyBkb2VzCisJCQkgKiBub3QgZXhpc3QuCisJ CQkgKi8KKwkJCWlmICghSXNBKG5ld25vZGUsIFZhcikgfHwKKwkJCQkoKFZhciAqKSBuZXdub2Rl KS0+dmFybm8gIT0gcmNvbi0+cmVzdWx0X3JlbGF0aW9uIHx8CisJCQkJKChWYXIgKikgbmV3bm9k ZSktPnZhcmxldmVsc3VwICE9IDApCisJCQl7CisJCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBt YWtlTm9kZShSZXR1cm5pbmdFeHByKTsKKworCQkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7CisJ CQkJcmV4cHItPnJldG9sZCA9ICh2YXItPnZhcnJldHVybmluZ3R5cGUgPT0gVkFSX1JFVFVSTklO R19PTEQpOworCQkJCXJleHByLT5yZXRleHByID0gKEV4cHIgKikgbmV3bm9kZTsKKworCQkJCW5l d25vZGUgPSAoTm9kZSAqKSByZXhwcjsKKwkJCX0KKwkJfQorCiAJCS8qIEluc2VydCBQbGFjZUhv bGRlclZhciBpZiBuZWVkZWQgKi8KIAkJaWYgKG5lZWRfcGh2KQogCQl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRl L3Jld3JpdGVIYW5kbGVyLmMKaW5kZXggZTk5NmJkYzBkMjEuLmYwYmNlNWY5ZWQ5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCkBAIC0yMTkwLDEwICsyMTkwLDYgQEAgZmlyZVJJ UnJ1bGVzKFF1ZXJ5ICpwYXJzZXRyZWUsIExpc3QgKmFjdGl2ZVJJUnMpCiAJICogcmVxdWlyZXMg c3BlY2lhbCByZWN1cnNpb24gZGV0ZWN0aW9uIGlmIHRoZSBuZXcgcXVhbHMgaGF2ZSBzdWJsaW5r CiAJICogc3VicXVlcmllcywgYW5kIGlmIHdlIGRpZCBpdCBpbiB0aGUgbG9vcCBhYm92ZSBxdWVy eV90cmVlX3dhbGtlciB3b3VsZAogCSAqIHRoZW4gcmVjdXJzZSBpbnRvIHRob3NlIHF1YWxzIGEg c2Vjb25kIHRpbWUuCi0JICoKLQkgKiBGaW5hbGx5LCB3ZSBleHBhbmQgYW55IHZpcnR1YWwgZ2Vu ZXJhdGVkIGNvbHVtbnMuICBXZSBkbyB0aGlzIGFmdGVyCi0JICogZWFjaCB0YWJsZSdzIFJMUyBw b2xpY2llcyBhcmUgYXBwbGllZCBiZWNhdXNlIHRoZSBSTFMgcG9saWNpZXMgbWlnaHQKLQkgKiBh bHNvIHJlZmVyIHRvIHRoZSB0YWJsZSdzIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMuCiAJICov CiAJcnRfaW5kZXggPSAwOwogCWZvcmVhY2gobGMsIHBhcnNldHJlZS0+cnRhYmxlKQpAQCAtMjIw NywxMSArMjIwMywxMCBAQCBmaXJlUklScnVsZXMoUXVlcnkgKnBhcnNldHJlZSwgTGlzdCAqYWN0 aXZlUklScykKIAogCQkrK3J0X2luZGV4OwogCi0JCS8qCi0JCSAqIE9ubHkgbm9ybWFsIHJlbGF0 aW9ucyBjYW4gaGF2ZSBSTFMgcG9saWNpZXMgb3IgdmlydHVhbCBnZW5lcmF0ZWQKLQkJICogY29s dW1ucy4KLQkJICovCi0JCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkvKiBP bmx5IG5vcm1hbCByZWxhdGlvbnMgY2FuIGhhdmUgUkxTIHBvbGljaWVzICovCisJCWlmIChydGUt PnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OIHx8CisJCQkocnRlLT5yZWxraW5kICE9IFJFTEtJTkRf UkVMQVRJT04gJiYKKwkJCSBydGUtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJM RSkpCiAJCQljb250aW51ZTsKIAogCQlyZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIE5vTG9j ayk7CkBAIC0yMzAwLDE2ICsyMjk1LDYgQEAgZmlyZVJJUnJ1bGVzKFF1ZXJ5ICpwYXJzZXRyZWUs IExpc3QgKmFjdGl2ZVJJUnMpCiAJCWlmIChoYXNTdWJMaW5rcykKIAkJCXBhcnNldHJlZS0+aGFz U3ViTGlua3MgPSB0cnVlOwogCi0JCS8qCi0JCSAqIEV4cGFuZCBhbnkgcmVmZXJlbmNlcyB0byB2 aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIG9mIHRoaXMgdGFibGUuCi0JCSAqIE5vdGUgdGhhdCBz dWJxdWVyaWVzIGluIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBleHByZXNzaW9ucyBhcmUKLQkJ ICogbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIHNvIHRoaXMgY2Fubm90IGFkZCBhbnkgbW9yZSBz dWJsaW5rcy4KLQkJICovCi0JCXBhcnNldHJlZSA9IChRdWVyeSAqKQotCQkJZXhwYW5kX2dlbmVy YXRlZF9jb2x1bW5zX2ludGVybmFsKChOb2RlICopIHBhcnNldHJlZSwKLQkJCQkJCQkJCQkJICBy ZWwsIHJ0X2luZGV4LCBydGUsCi0JCQkJCQkJCQkJCSAgcGFyc2V0cmVlLT5yZXN1bHRSZWxhdGlv bik7Ci0KIAkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOwogCX0KIApAQCAtNDQ1NywzNSArNDQ0 MiwxMiBAQCBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW50ZXJuYWwoTm9kZSAqbm9kZSwgUmVs YXRpb24gcmVsLCBpbnQgcnRfaW5kZXgsCiAJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkID09IEFU VFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKIAkJCXsKIAkJCQlOb2RlCSAgICpkZWZleHByOwot CQkJCWludAkJCWF0dG51bSA9IGkgKyAxOwotCQkJCU9pZAkJCWF0dGNvbGxpZDsKIAkJCQlUYXJn ZXRFbnRyeSAqdGU7CiAKLQkJCQlkZWZleHByID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBh dHRudW0pOwotCQkJCWlmIChkZWZleHByID09IE5VTEwpCi0JCQkJCWVsb2coRVJST1IsICJubyBn ZW5lcmF0aW9uIGV4cHJlc3Npb24gZm91bmQgZm9yIGNvbHVtbiBudW1iZXIgJWQgb2YgdGFibGUg XCIlc1wiIiwKLQkJCQkJCSBhdHRudW0sIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwot Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgY29sdW1uIGRlZmluaXRpb24gaGFzIGEgY29sbGF0aW9u IGFuZCBpdCBpcwotCQkJCSAqIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xsYXRpb24gb2YgdGhlIGdl bmVyYXRpb24gZXhwcmVzc2lvbiwKLQkJCQkgKiBwdXQgYSBDT0xMQVRFIGNsYXVzZSBhcm91bmQg dGhlIGV4cHJlc3Npb24uCi0JCQkJICovCi0JCQkJYXR0Y29sbGlkID0gYXR0ci0+YXR0Y29sbGF0 aW9uOwotCQkJCWlmIChhdHRjb2xsaWQgJiYgYXR0Y29sbGlkICE9IGV4cHJDb2xsYXRpb24oZGVm ZXhwcikpCi0JCQkJewotCQkJCQlDb2xsYXRlRXhwciAqY2UgPSBtYWtlTm9kZShDb2xsYXRlRXhw cik7Ci0KLQkJCQkJY2UtPmFyZyA9IChFeHByICopIGRlZmV4cHI7Ci0JCQkJCWNlLT5jb2xsT2lk ID0gYXR0Y29sbGlkOwotCQkJCQljZS0+bG9jYXRpb24gPSAtMTsKLQotCQkJCQlkZWZleHByID0g KE5vZGUgKikgY2U7Ci0JCQkJfQotCisJCQkJZGVmZXhwciA9IGJ1aWxkX2dlbmVyYXRpb25fZXhw cmVzc2lvbihyZWwsIGkgKyAxKTsKIAkJCQlDaGFuZ2VWYXJOb2RlcyhkZWZleHByLCAxLCBydF9p bmRleCwgMCk7CiAKLQkJCQl0ZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBkZWZleHByLCBh dHRudW0sIDAsIGZhbHNlKTsKKwkJCQl0ZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBkZWZl eHByLCBpICsgMSwgMCwgZmFsc2UpOwogCQkJCXRsaXN0ID0gbGFwcGVuZCh0bGlzdCwgdGUpOwog CQkJfQogCQl9CkBAIC00NTI4LDYgKzQ0OTAsNDcgQEAgZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5z X2luX2V4cHIoTm9kZSAqbm9kZSwgUmVsYXRpb24gcmVsLCBpbnQgcnRfaW5kZXgpCiAJcmV0dXJu IG5vZGU7CiB9CiAKKy8qCisgKiBCdWlsZCB0aGUgZ2VuZXJhdGlvbiBleHByZXNzaW9uIGZvciB0 aGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLgorICoKKyAqIEVycm9yIG91dCBpZiB0aGVyZSBp cyBubyBnZW5lcmF0aW9uIGV4cHJlc3Npb24gZm91bmQgZm9yIHRoZSBnaXZlbiBjb2x1bW4uCisg Ki8KK05vZGUgKgorYnVpbGRfZ2VuZXJhdGlvbl9leHByZXNzaW9uKFJlbGF0aW9uIHJlbCwgaW50 IGF0dHJubykKK3sKKwlUdXBsZURlc2MJcmRfYXR0ID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwor CUZvcm1fcGdfYXR0cmlidXRlIGF0dF90dXAgPSBUdXBsZURlc2NBdHRyKHJkX2F0dCwgYXR0cm5v IC0gMSk7CisJTm9kZQkgICAqZGVmZXhwcjsKKwlPaWQJCQlhdHRjb2xsaWQ7CisKKwlBc3NlcnQo cmRfYXR0LT5jb25zdHIgJiYgcmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCk7 CisJQXNzZXJ0KGF0dF90dXAtPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJ UlRVQUwpOworCisJZGVmZXhwciA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0cm5vKTsK KwlpZiAoZGVmZXhwciA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAibm8gZ2VuZXJhdGlvbiBleHBy ZXNzaW9uIGZvdW5kIGZvciBjb2x1bW4gbnVtYmVyICVkIG9mIHRhYmxlIFwiJXNcIiIsCisJCQkg YXR0cm5vLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCS8qCisJICogSWYgdGhl IGNvbHVtbiBkZWZpbml0aW9uIGhhcyBhIGNvbGxhdGlvbiBhbmQgaXQgaXMgZGlmZmVyZW50IGZy b20gdGhlCisJICogY29sbGF0aW9uIG9mIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24sIHB1dCBh IENPTExBVEUgY2xhdXNlIGFyb3VuZCB0aGUKKwkgKiBleHByZXNzaW9uLgorCSAqLworCWF0dGNv bGxpZCA9IGF0dF90dXAtPmF0dGNvbGxhdGlvbjsKKwlpZiAoYXR0Y29sbGlkICYmIGF0dGNvbGxp ZCAhPSBleHByQ29sbGF0aW9uKGRlZmV4cHIpKQorCXsKKwkJQ29sbGF0ZUV4cHIgKmNlID0gbWFr ZU5vZGUoQ29sbGF0ZUV4cHIpOworCisJCWNlLT5hcmcgPSAoRXhwciAqKSBkZWZleHByOworCQlj ZS0+Y29sbE9pZCA9IGF0dGNvbGxpZDsKKwkJY2UtPmxvY2F0aW9uID0gLTE7CisKKwkJZGVmZXhw ciA9IChOb2RlICopIGNlOworCX0KKworCXJldHVybiBkZWZleHByOworfQorCiAKIC8qCiAgKiBR dWVyeVJld3JpdGUgLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFu aXAuYyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKaW5kZXggOTQzMzU0OGQy NzkuLjY5OTRiOGM1NDI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVN YW5pcC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKQEAgLTEwMTAs NyArMTAxMCw3IEBAIFNldFZhclJldHVybmluZ1R5cGVfd2Fsa2VyKE5vZGUgKm5vZGUsIFNldFZh clJldHVybmluZ1R5cGVfY29udGV4dCAqY29udGV4dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVl X3dhbGtlcihub2RlLCBTZXRWYXJSZXR1cm5pbmdUeXBlX3dhbGtlciwgY29udGV4dCk7CiB9CiAK LXN0YXRpYyB2b2lkCit2b2lkCiBTZXRWYXJSZXR1cm5pbmdUeXBlKE5vZGUgKm5vZGUsIGludCBy ZXN1bHRfcmVsYXRpb24sIGludCBzdWJsZXZlbHNfdXAsCiAJCQkJCVZhclJldHVybmluZ1R5cGUg cmV0dXJuaW5nX3R5cGUpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDgzOWU3MWQ1MmY0Li5k MDU3NmRhM2UyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTIxNDcsNyArMjE0Nyw3IEBAIHR5 cGVkZWYgc3RydWN0IEluZmVyZW5jZUVsZW0KICAqIHJ1bGUsIHdoaWNoIG1heSBhbHNvIGNvbnRh aW4gYXJiaXRyYXJ5IGV4cHJlc3Npb25zLgogICoKICAqIFJldHVybmluZ0V4cHIgbm9kZXMgbmV2 ZXIgYXBwZWFyIGluIGEgcGFyc2VkIFF1ZXJ5IC0tLSB0aGV5IGFyZSBvbmx5IGV2ZXIKLSAqIGlu c2VydGVkIGJ5IHRoZSByZXdyaXRlci4KKyAqIGluc2VydGVkIGJ5IHRoZSByZXdyaXRlciBhbmQg dGhlIHBsYW5uZXIuCiAgKi8KIHR5cGVkZWYgc3RydWN0IFJldHVybmluZ0V4cHIKIHsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcHJlcC5oCmluZGV4IDBhZTU3ZWMyNGE0Li5kZjU2MjAyNzc3YyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJl cC5oCkBAIC0yNSw2ICsyNSw3IEBAIGV4dGVybiB2b2lkIHRyYW5zZm9ybV9NRVJHRV90b19qb2lu KFF1ZXJ5ICpwYXJzZSk7CiBleHRlcm4gdm9pZCByZXBsYWNlX2VtcHR5X2pvaW50cmVlKFF1ZXJ5 ICpwYXJzZSk7CiBleHRlcm4gdm9pZCBwdWxsX3VwX3N1YmxpbmtzKFBsYW5uZXJJbmZvICpyb290 KTsKIGV4dGVybiB2b2lkIHByZXByb2Nlc3NfZnVuY3Rpb25fcnRlcyhQbGFubmVySW5mbyAqcm9v dCk7CitleHRlcm4gUXVlcnkgKmV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zKFBsYW5u ZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIHB1bGxfdXBfc3VicXVlcmllcyhQbGFubmVySW5m byAqcm9vdCk7CiBleHRlcm4gdm9pZCBmbGF0dGVuX3NpbXBsZV91bmlvbl9hbGwoUGxhbm5lcklu Zm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgcmVkdWNlX291dGVyX2pvaW5zKFBsYW5uZXJJbmZvICpy b290KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCBi L3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuaAppbmRleCA4OGZlMTNjNWY0Zi4u OTljYWIxYTNiZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRs ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgKQEAgLTM5LDUg KzM5LDYgQEAgZXh0ZXJuIHZvaWQgZXJyb3Jfdmlld19ub3RfdXBkYXRhYmxlKFJlbGF0aW9uIHZp ZXcsCiAJCQkJCQkJCQkgY29uc3QgY2hhciAqZGV0YWlsKTsKIAogZXh0ZXJuIE5vZGUgKmV4cGFu ZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9leHByKE5vZGUgKm5vZGUsIFJlbGF0aW9uIHJlbCwgaW50 IHJ0X2luZGV4KTsKK2V4dGVybiBOb2RlICpidWlsZF9nZW5lcmF0aW9uX2V4cHJlc3Npb24oUmVs YXRpb24gcmVsLCBpbnQgYXR0cm5vKTsKIAogI2VuZGlmCQkJCQkJCS8qIFJFV1JJVEVIQU5ETEVS X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggYi9z cmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCmluZGV4IDVlYzQ3NWM2M2U5Li40NjZl ZGQ3YzFjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaAor KysgYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCkBAIC01NSw2ICs1NSw5IEBA IGV4dGVybiB2b2lkIEluY3JlbWVudFZhclN1YmxldmVsc1VwKE5vZGUgKm5vZGUsIGludCBkZWx0 YV9zdWJsZXZlbHNfdXAsCiBleHRlcm4gdm9pZCBJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcF9ydGFi bGUoTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCSAgIGludCBkZWx0YV9zdWJsZXZlbHNfdXAsIGlu dCBtaW5fc3VibGV2ZWxzX3VwKTsKIAorZXh0ZXJuIHZvaWQgU2V0VmFyUmV0dXJuaW5nVHlwZShO b2RlICpub2RlLCBpbnQgcmVzdWx0X3JlbGF0aW9uLCBpbnQgc3VibGV2ZWxzX3VwLAorCQkJCQkJ CQlWYXJSZXR1cm5pbmdUeXBlIHJldHVybmluZ190eXBlKTsKKwogZXh0ZXJuIGJvb2wgcmFuZ2VU YWJsZUVudHJ5X3VzZWQoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LAogCQkJCQkJCQkgaW50IHN1 YmxldmVsc191cCk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2Vu ZXJhdGVkX3ZpcnR1YWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRf dmlydHVhbC5vdXQKaW5kZXggMzU2Mzg4MTJiZTkuLmIzMzlmYmNlYmZhIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dApAQCAtMTM5OCwzICsx Mzk4LDEzMyBAQCBTRUxFQ1QgYXR0cmVsaWQsIGF0dG5hbWUsIGF0dGdlbmVyYXRlZCBGUk9NIHBn X2F0dHJpYnV0ZSBXSEVSRSBhdHRnZW5lcmF0ZWQgTk9UCiAtLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLQogKDAgcm93cykKIAorLS0KKy0tIHRlc3QgdGhlIGV4cGFuc2lvbiBvZiB2 aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCistLQorLS0gdGhlc2UgdGVzdHMgYXJlIHNwZWNpZmlj IHRvIGdlbmVyYXRlZF92aXJ0dWFsLnNxbAorLS0KK2NyZWF0ZSB0YWJsZSBndGVzdDMyICgKKyAg YSBpbnQgcHJpbWFyeSBrZXksCisgIGIgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKiAyKSwK KyAgYyBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoMTAgKyAxMCksCisgIGQgaW50IGdlbmVyYXRl ZCBhbHdheXMgYXMgKGNvYWxlc2NlKGEsIDEwMCkpCispOworaW5zZXJ0IGludG8gZ3Rlc3QzMiB2 YWx1ZXMgKDEpLCAoMik7CithbmFseXplIGd0ZXN0MzI7CistLSBFbnN1cmUgdGhhdCBudWxsaW5n cmVsIGJpdHMgYXJlIHByb3BhZ2F0ZWQgaW50byB0aGUgZ2VuZXJhdGlvbiBleHByZXNzaW9ucwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHN1bSh0Mi5iKSBvdmVyIChwYXJ0aXRpb24gYnkg dDIuYSksCisgICAgICAgc3VtKHQyLmMpIG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAg ICBzdW0odDIuZCkgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpCitmcm9tIGd0ZXN0MzIgYXMgdDEg bGVmdCBqb2luIGd0ZXN0MzIgYXMgdDIgb24gKHQxLmEgPSB0Mi5hKQorb3JkZXIgYnkgdDEuYTsK KyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U29ydAorICAgU29ydCBLZXk6IHQxLmEKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYQorICAgICAgICAgICAgICAgLT4gIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgICAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0 MS5hID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndGVzdDMy IHQxCisgICAgICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndGVzdDMyIHQyCisoMTAgcm93cykKKworc2Vs ZWN0IHN1bSh0Mi5iKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSksCisgICAgICAgc3VtKHQyLmMp IG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBzdW0odDIuZCkgb3ZlciAocGFydGl0 aW9uIGJ5IHQyLmEpCitmcm9tIGd0ZXN0MzIgYXMgdDEgbGVmdCBqb2luIGd0ZXN0MzIgYXMgdDIg b24gKHQxLmEgPSB0Mi5hKQorb3JkZXIgYnkgdDEuYTsKKyBzdW0gfCBzdW0gfCBzdW0gCistLS0t LSstLS0tLSstLS0tLQorICAgMiB8ICAyMCB8ICAgMQorICAgNCB8ICAyMCB8ICAgMgorKDIgcm93 cykKKworLS0gRW5zdXJlIHRoYXQgb3V0ZXItam9pbiByZW1vdmFsIGZ1bmN0aW9ucyBjb3JyZWN0 bHkgYWZ0ZXIgdGhlIHByb3BhZ2F0aW9uIG9mIG51bGxpbmdyZWwgYml0cworZXhwbGFpbiAoY29z dHMgb2ZmKQorc2VsZWN0IHQxLmEgZnJvbSBndGVzdDMyIHQxIGxlZnQgam9pbiBndGVzdDMyIHQy IG9uIHQxLmEgPSB0Mi5hCit3aGVyZSBjb2FsZXNjZSh0Mi5iLCAxKSA9IDI7CisgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAodDEuYSA9 IHQyLmEpCisgICBGaWx0ZXI6IChDT0FMRVNDRSgodDIuYSAqIDIpLCAxKSA9IDIpCisgICAtPiAg U2VxIFNjYW4gb24gZ3Rlc3QzMiB0MQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBndGVzdDMyIHQyCisoNiByb3dzKQorCitzZWxlY3QgdDEuYSBmcm9tIGd0ZXN0MzIgdDEg bGVmdCBqb2luIGd0ZXN0MzIgdDIgb24gdDEuYSA9IHQyLmEKK3doZXJlIGNvYWxlc2NlKHQyLmIs IDEpID0gMjsKKyBhIAorLS0tCisgMQorKDEgcm93KQorCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgdDEuYSBmcm9tIGd0ZXN0MzIgdDEgbGVmdCBqb2luIGd0ZXN0MzIgdDIgb24gdDEuYSA9 IHQyLmEKK3doZXJlIGNvYWxlc2NlKHQyLmIsIDEpID0gMiBvciB0MS5hIGlzIG51bGw7CisgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBMZWZ0IEpvaW4KKyAgIEhhc2ggQ29uZDogKHQxLmEgPSB0Mi5hKQorICAg RmlsdGVyOiAoKENPQUxFU0NFKCh0Mi5hICogMiksIDEpID0gMikgT1IgKHQxLmEgSVMgTlVMTCkp CisgICAtPiAgU2VxIFNjYW4gb24gZ3Rlc3QzMiB0MQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBndGVzdDMyIHQyCisoNiByb3dzKQorCitzZWxlY3QgdDEuYSBmcm9tIGd0 ZXN0MzIgdDEgbGVmdCBqb2luIGd0ZXN0MzIgdDIgb24gdDEuYSA9IHQyLmEKK3doZXJlIGNvYWxl c2NlKHQyLmIsIDEpID0gMiBvciB0MS5hIGlzIG51bGw7CisgYSAKKy0tLQorIDEKKygxIHJvdykK KworLS0gRW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRpb24gZXhwcmVzc2lvbnMgYXJlIHdyYXBwZWQg aW50byBQSFZzIGlmIG5lZWRlZAorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0 IHQyLiogZnJvbSBndGVzdDMyIHQxIGxlZnQgam9pbiBndGVzdDMyIHQyIG9uIGZhbHNlOworICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIE91dHB1dDogYSwgKGEgKiAyKSwgKDIwKSwgKENPQUxFU0NF KGEsIDEwMCkpCisgICBKb2luIEZpbHRlcjogZmFsc2UKKyAgIC0+ICBTZXEgU2NhbiBvbiBnZW5l cmF0ZWRfdmlydHVhbF90ZXN0cy5ndGVzdDMyIHQxCisgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQx LmIsIHQxLmMsIHQxLmQKKyAgIC0+ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogYSwgMjAsIENP QUxFU0NFKGEsIDEwMCkKKyAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKyg4IHJvd3Mp CisKK3NlbGVjdCB0Mi4qIGZyb20gZ3Rlc3QzMiB0MSBsZWZ0IGpvaW4gZ3Rlc3QzMiB0MiBvbiBm YWxzZTsKKyBhIHwgYiB8IGMgfCBkIAorLS0tKy0tLSstLS0rLS0tCisgICB8ICAgfCAgIHwgIAor ICAgfCAgIHwgICB8ICAKKygyIHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIsIGMs IGQpIGhhdmluZyBjID0gMjA7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBPdXRwdXQ6IGEsICgoYSAqIDIpKSwg KDIwKSwgKENPQUxFU0NFKGEsIDEwMCkpCisgICBIYXNoIEtleTogdC5hCisgICBIYXNoIEtleTog KHQuYSAqIDIpCisgICBIYXNoIEtleTogMjAKKyAgIEhhc2ggS2V5OiBDT0FMRVNDRSh0LmEsIDEw MCkKKyAgIEZpbHRlcjogKCgyMCkgPSAyMCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBnZW5lcmF0ZWRf dmlydHVhbF90ZXN0cy5ndGVzdDMyIHQKKyAgICAgICAgIE91dHB1dDogYSwgKGEgKiAyKSwgMjAs IENPQUxFU0NFKGEsIDEwMCkKKyg5IHJvd3MpCisKK3NlbGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdy b3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIsIGMsIGQpIGhhdmluZyBjID0gMjA7CisgYSB8IGIg fCBjICB8IGQgCistLS0rLS0tKy0tLS0rLS0tCisgICB8ICAgfCAyMCB8ICAKKygxIHJvdykKKwor ZHJvcCB0YWJsZSBndGVzdDMyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2Vu ZXJhdGVkX3ZpcnR1YWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1 YWwuc3FsCmluZGV4IDM0ODcwODEzOTEwLi5jODA2MzBjMTFhNSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbApAQCAtNzMyLDMgKzczMiw2MCBAQCBDUkVBVEUg VEFCTEUgZ3Rlc3QyOGIgKExJS0UgZ3Rlc3QyOGEgSU5DTFVESU5HIEdFTkVSQVRFRCk7CiAKIC0t IHNhbml0eSBjaGVjayBvZiBzeXN0ZW0gY2F0YWxvZwogU0VMRUNUIGF0dHJlbGlkLCBhdHRuYW1l LCBhdHRnZW5lcmF0ZWQgRlJPTSBwZ19hdHRyaWJ1dGUgV0hFUkUgYXR0Z2VuZXJhdGVkIE5PVCBJ TiAoJycsICdzJywgJ3YnKTsKKworCistLQorLS0gdGVzdCB0aGUgZXhwYW5zaW9uIG9mIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMKKy0tCistLSB0aGVzZSB0ZXN0cyBhcmUgc3BlY2lmaWMgdG8g Z2VuZXJhdGVkX3ZpcnR1YWwuc3FsCistLQorCitjcmVhdGUgdGFibGUgZ3Rlc3QzMiAoCisgIGEg aW50IHByaW1hcnkga2V5LAorICBiIGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICogMiksCisg IGMgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKDEwICsgMTApLAorICBkIGludCBnZW5lcmF0ZWQg YWx3YXlzIGFzIChjb2FsZXNjZShhLCAxMDApKQorKTsKKworaW5zZXJ0IGludG8gZ3Rlc3QzMiB2 YWx1ZXMgKDEpLCAoMik7CithbmFseXplIGd0ZXN0MzI7CisKKy0tIEVuc3VyZSB0aGF0IG51bGxp bmdyZWwgYml0cyBhcmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb25z CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qgc3VtKHQyLmIpIG92ZXIgKHBhcnRpdGlvbiBi eSB0Mi5hKSwKKyAgICAgICBzdW0odDIuYykgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpLAorICAg ICAgIHN1bSh0Mi5kKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSkKK2Zyb20gZ3Rlc3QzMiBhcyB0 MSBsZWZ0IGpvaW4gZ3Rlc3QzMiBhcyB0MiBvbiAodDEuYSA9IHQyLmEpCitvcmRlciBieSB0MS5h OworCitzZWxlY3Qgc3VtKHQyLmIpIG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBz dW0odDIuYykgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpLAorICAgICAgIHN1bSh0Mi5kKSBvdmVy IChwYXJ0aXRpb24gYnkgdDIuYSkKK2Zyb20gZ3Rlc3QzMiBhcyB0MSBsZWZ0IGpvaW4gZ3Rlc3Qz MiBhcyB0MiBvbiAodDEuYSA9IHQyLmEpCitvcmRlciBieSB0MS5hOworCistLSBFbnN1cmUgdGhh dCBvdXRlci1qb2luIHJlbW92YWwgZnVuY3Rpb25zIGNvcnJlY3RseSBhZnRlciB0aGUgcHJvcGFn YXRpb24gb2YgbnVsbGluZ3JlbCBiaXRzCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgdDEu YSBmcm9tIGd0ZXN0MzIgdDEgbGVmdCBqb2luIGd0ZXN0MzIgdDIgb24gdDEuYSA9IHQyLmEKK3do ZXJlIGNvYWxlc2NlKHQyLmIsIDEpID0gMjsKKworc2VsZWN0IHQxLmEgZnJvbSBndGVzdDMyIHQx IGxlZnQgam9pbiBndGVzdDMyIHQyIG9uIHQxLmEgPSB0Mi5hCit3aGVyZSBjb2FsZXNjZSh0Mi5i LCAxKSA9IDI7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hIGZyb20gZ3Rlc3Qz MiB0MSBsZWZ0IGpvaW4gZ3Rlc3QzMiB0MiBvbiB0MS5hID0gdDIuYQord2hlcmUgY29hbGVzY2Uo dDIuYiwgMSkgPSAyIG9yIHQxLmEgaXMgbnVsbDsKKworc2VsZWN0IHQxLmEgZnJvbSBndGVzdDMy IHQxIGxlZnQgam9pbiBndGVzdDMyIHQyIG9uIHQxLmEgPSB0Mi5hCit3aGVyZSBjb2FsZXNjZSh0 Mi5iLCAxKSA9IDIgb3IgdDEuYSBpcyBudWxsOworCistLSBFbnN1cmUgdGhhdCB0aGUgZ2VuZXJh dGlvbiBleHByZXNzaW9ucyBhcmUgd3JhcHBlZCBpbnRvIFBIVnMgaWYgbmVlZGVkCitleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgdDIuKiBmcm9tIGd0ZXN0MzIgdDEgbGVmdCBq b2luIGd0ZXN0MzIgdDIgb24gZmFsc2U7CitzZWxlY3QgdDIuKiBmcm9tIGd0ZXN0MzIgdDEgbGVm dCBqb2luIGd0ZXN0MzIgdDIgb24gZmFsc2U7CisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9m ZikKK3NlbGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIs IGMsIGQpIGhhdmluZyBjID0gMjA7CitzZWxlY3QgKiBmcm9tIGd0ZXN0MzIgdCBncm91cCBieSBn cm91cGluZyBzZXRzIChhLCBiLCBjLCBkKSBoYXZpbmcgYyA9IDIwOworCitkcm9wIHRhYmxlIGd0 ZXN0MzI7Ci0tIAoyLjQzLjAKCg== --000000000000eb9d6b062edfdba6 Content-Type: application/octet-stream; name="v8-0002-Eliminate-code-duplication-in-replace_rte_variables-callbacks.patch" Content-Disposition: attachment; filename="v8-0002-Eliminate-code-duplication-in-replace_rte_variables-callbacks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7iukydc1 RnJvbSA0ZWRiNDRkYWUwZGNmY2EyY2EyNTUyOGE4ODk4YWEwMmM1ZjlmN2JmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMSBGZWIgMjAyNSAxNDowMTo1NiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg Mi8yXSBFbGltaW5hdGUgY29kZSBkdXBsaWNhdGlvbiBpbiByZXBsYWNlX3J0ZV92YXJpYWJsZXMK IGNhbGxiYWNrcwoKVGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBSZXBsYWNlVmFyc0Zyb21UYXJnZXRM aXN0X2NhbGxiYWNrIGFuZApwdWxsdXBfcmVwbGFjZV92YXJzX2NhbGxiYWNrIGFyZSBib3RoIHVz ZWQgdG8gcmVwbGFjZSBWYXJzIGluIGFuCmV4cHJlc3Npb24gdHJlZSB0aGF0IHJlZmVyZW5jZSBh IHBhcnRpY3VsYXIgUlRFIHdpdGggaXRlbXMgZnJvbSBhCnRhcmdldGxpc3QsIGFuZCB0aGV5IGJv dGggbmVlZCB0byBleHBhbmQgd2hvbGUtdHVwbGUgcmVmZXJlbmNlcyBhbmQKZGVhbCB3aXRoIE9M RC9ORVcgUkVUVVJOSU5HIGxpc3QgVmFycy4gIEFzIGEgcmVzdWx0LCBjdXJyZW50bHkgdGhlcmUK aXMgc2lnbmlmaWNhbnQgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlv bnMuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIFJlcGxhY2VWYXJGcm9t VGFyZ2V0TGlzdCwgdG8KcGVyZm9ybSB0aGUgcmVwbGFjZW1lbnQgYW5kIGNhbGxzIGl0IGZyb20g Ym90aCBjYWxsYmFjayBmdW5jdGlvbnMsCnRoZXJlYnkgZWxpbWluYXRpbmcgY29kZSBkdXBsaWNh dGlvbi4KCkF1dGhvcjogRGVhbiBSYXNoZWVkIDxkZWFuLmEucmFzaGVlZEBnbWFpbC5jb20+CkF1 dGhvcjogUmljaGFyZCBHdW8gPGd1b2ZlbmdsaW51eEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBK aWFuIEhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FFWkFUQ1docj1GTTRYNWtDUHZWcy1nMlhFaytjZUxzTnRCS196Wk1rcUZu OXZVanN3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJl cGpvaW50cmVlLmMgfCAxNDEgKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlTWFuaXAuYyAgICAgICAgfCAgODggKysrKysrKysrKy0tLS0KIHNyYy9pbmNs dWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggICAgICAgIHwgICA5ICstCiAzIGZpbGVzIGNoYW5n ZWQsIDk2IGluc2VydGlvbnMoKyksIDE0MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wcmVwL3ByZXBqb2ludHJlZS5jCmluZGV4IDhjZGFjYjZhYTYzLi5iY2M0MGRkNWE4NCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKQEAgLTI2NjYsMTMx ICsyNjY2LDM4IEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCS8q IEp1c3QgY29weSB0aGUgZW50cnkgYW5kIGZhbGwgdGhyb3VnaCB0byBhZGp1c3QgcGhsZXZlbHN1 cCBldGMgKi8KIAkJbmV3bm9kZSA9IGNvcHlPYmplY3QocmNvbi0+cnZfY2FjaGVbdmFyYXR0bm9d KTsKIAl9Ci0JZWxzZSBpZiAodmFyYXR0bm8gPT0gSW52YWxpZEF0dHJOdW1iZXIpCisJZWxzZQog CXsKLQkJLyogTXVzdCBleHBhbmQgd2hvbGUtdHVwbGUgcmVmZXJlbmNlIGludG8gUm93RXhwciAq LwotCQlSb3dFeHByICAgICpyb3dleHByOwotCQlMaXN0CSAgICpjb2xuYW1lczsKLQkJTGlzdAkg ICAqZmllbGRzOwotCQlib29sCQlzYXZlX3dyYXBfbm9uX3ZhcnMgPSByY29uLT53cmFwX25vbl92 YXJzOwotCQlpbnQJCQlzYXZlX3N1YmxldmVsc3VwID0gY29udGV4dC0+c3VibGV2ZWxzX3VwOwot CiAJCS8qCi0JCSAqIElmIGdlbmVyYXRpbmcgYW4gZXhwYW5zaW9uIGZvciBhIHZhciBvZiBhIG5h bWVkIHJvd3R5cGUgKGllLCB0aGlzCi0JCSAqIGlzIGEgcGxhaW4gcmVsYXRpb24gUlRFKSwgdGhl biB3ZSBtdXN0IGluY2x1ZGUgZHVtbXkgaXRlbXMgZm9yCi0JCSAqIGRyb3BwZWQgY29sdW1ucy4g IElmIHRoZSB2YXIgaXMgUkVDT1JEIChpZSwgdGhpcyBpcyBhIEpPSU4pLCB0aGVuCi0JCSAqIG9t aXQgZHJvcHBlZCBjb2x1bW5zLiAgSW4gdGhlIGxhdHRlciBjYXNlLCBhdHRhY2ggY29sdW1uIG5h bWVzIHRvCi0JCSAqIHRoZSBSb3dFeHByIGZvciB1c2Ugb2YgdGhlIGV4ZWN1dG9yIGFuZCBydWxl dXRpbHMuYy4KLQkJICoKLQkJICogSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjYWNoZSB0aGUgcmVz dWx0cywgd2UgYWx3YXlzIGdlbmVyYXRlIHRoZQotCQkgKiBleHBhbnNpb24gd2l0aCB2YXJsZXZl bHN1cCA9IDAsIGFuZCB0aGVuIGFkanVzdCBiZWxvdyBpZiBuZWVkZWQuCisJCSAqIEdlbmVyYXRl IHRoZSByZXBsYWNlbWVudCBleHByZXNzaW9uLiAgVGhpcyB0YWtlcyBjYXJlIG9mIGV4cGFuZGlu ZworCQkgKiB3aG9sZXJvdyByZWZlcmVuY2VzIGFuZCBkZWFsaW5nIHdpdGggbm9uLWRlZmF1bHQg dmFycmV0dXJuaW5ndHlwZS4KIAkJICovCi0JCWV4cGFuZFJURShyY29uLT50YXJnZXRfcnRlLAot CQkJCSAgdmFyLT52YXJubywgMCAvKiBub3QgdmFybGV2ZWxzdXAgKi8gLAotCQkJCSAgdmFyLT52 YXJyZXR1cm5pbmd0eXBlLCB2YXItPmxvY2F0aW9uLAotCQkJCSAgKHZhci0+dmFydHlwZSAhPSBS RUNPUkRPSUQpLAotCQkJCSAgJmNvbG5hbWVzLCAmZmllbGRzKTsKLQkJLyogRXhwYW5kIHRoZSBn ZW5lcmF0ZWQgcGVyLWZpZWxkIFZhcnMsIGJ1dCBkb24ndCBpbnNlcnQgUEhWcyB0aGVyZSAqLwot CQlyY29uLT53cmFwX25vbl92YXJzID0gZmFsc2U7Ci0JCWNvbnRleHQtPnN1YmxldmVsc191cCA9 IDA7CS8qIHRvIG1hdGNoIHRoZSBleHBhbmRSVEUgb3V0cHV0ICovCi0JCWZpZWxkcyA9IChMaXN0 ICopIHJlcGxhY2VfcnRlX3ZhcmlhYmxlc19tdXRhdG9yKChOb2RlICopIGZpZWxkcywKLQkJCQkJ CQkJCQkJCQkJY29udGV4dCk7Ci0JCXJjb24tPndyYXBfbm9uX3ZhcnMgPSBzYXZlX3dyYXBfbm9u X3ZhcnM7Ci0JCWNvbnRleHQtPnN1YmxldmVsc191cCA9IHNhdmVfc3VibGV2ZWxzdXA7Ci0KLQkJ cm93ZXhwciA9IG1ha2VOb2RlKFJvd0V4cHIpOwotCQlyb3dleHByLT5hcmdzID0gZmllbGRzOwot CQlyb3dleHByLT5yb3dfdHlwZWlkID0gdmFyLT52YXJ0eXBlOwotCQlyb3dleHByLT5yb3dfZm9y bWF0ID0gQ09FUkNFX0lNUExJQ0lUX0NBU1Q7Ci0JCXJvd2V4cHItPmNvbG5hbWVzID0gKHZhci0+ dmFydHlwZSA9PSBSRUNPUkRPSUQpID8gY29sbmFtZXMgOiBOSUw7Ci0JCXJvd2V4cHItPmxvY2F0 aW9uID0gdmFyLT5sb2NhdGlvbjsKLQkJbmV3bm9kZSA9IChOb2RlICopIHJvd2V4cHI7Ci0KLQkJ LyogSGFuZGxlIGFueSBPTEQvTkVXIFJFVFVSTklORyBsaXN0IFZhcnMgKi8KLQkJaWYgKHZhci0+ dmFycmV0dXJuaW5ndHlwZSAhPSBWQVJfUkVUVVJOSU5HX0RFRkFVTFQpCi0JCXsKLQkJCS8qCi0J CQkgKiBXcmFwIHRoZSBSb3dFeHByIGluIGEgUmV0dXJuaW5nRXhwciBub2RlLCBzbyB0aGF0IHRo ZSBleGVjdXRvcgotCQkJICogcmV0dXJucyBOVUxMIGlmIHRoZSBPTEQvTkVXIHJvdyBkb2VzIG5v dCBleGlzdC4KLQkJCSAqLwotCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1 cm5pbmdFeHByKTsKLQotCQkJcmV4cHItPnJldGxldmVsc3VwID0gMDsKLQkJCXJleHByLT5yZXRv bGQgPSAodmFyLT52YXJyZXR1cm5pbmd0eXBlID09IFZBUl9SRVRVUk5JTkdfT0xEKTsKLQkJCXJl eHByLT5yZXRleHByID0gKEV4cHIgKikgbmV3bm9kZTsKLQotCQkJbmV3bm9kZSA9IChOb2RlICop IHJleHByOwotCQl9Ci0KLQkJLyoKLQkJICogSW5zZXJ0IFBsYWNlSG9sZGVyVmFyIGlmIG5lZWRl ZC4gIE5vdGljZSB0aGF0IHdlIGFyZSB3cmFwcGluZyBvbmUKLQkJICogUGxhY2VIb2xkZXJWYXIg YXJvdW5kIHRoZSB3aG9sZSBSb3dFeHByLCByYXRoZXIgdGhhbiBwdXR0aW5nIG9uZQotCQkgKiBh cm91bmQgZWFjaCBlbGVtZW50IG9mIHRoZSByb3cuICBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCB0 aGUKLQkJICogZXhwcmVzc2lvbiB0byB5aWVsZCBOVUxMLCBub3QgUk9XKE5VTEwsTlVMTCwuLi4p IHdoZW4gaXQgaXMgZm9yY2VkCi0JCSAqIHRvIG51bGwgYnkgYW4gb3V0ZXIgam9pbi4KLQkJICov Ci0JCWlmIChuZWVkX3BodikKLQkJewotCQkJbmV3bm9kZSA9IChOb2RlICopCi0JCQkJbWFrZV9w bGFjZWhvbGRlcl9leHByKHJjb24tPnJvb3QsCi0JCQkJCQkJCQkgIChFeHByICopIG5ld25vZGUs Ci0JCQkJCQkJCQkgIGJtc19tYWtlX3NpbmdsZXRvbihyY29uLT52YXJubykpOwotCQkJLyogY2Fj aGUgaXQgd2l0aCB0aGUgUEhWLCBhbmQgd2l0aCBwaGxldmVsc3VwIGV0YyBub3Qgc2V0IHlldCAq LwotCQkJcmNvbi0+cnZfY2FjaGVbSW52YWxpZEF0dHJOdW1iZXJdID0gY29weU9iamVjdChuZXdu b2RlKTsKLQkJfQotCX0KLQllbHNlCi0JewotCQkvKiBOb3JtYWwgY2FzZSByZWZlcmVuY2luZyBv bmUgdGFyZ2V0bGlzdCBlbGVtZW50ICovCi0JCVRhcmdldEVudHJ5ICp0bGUgPSBnZXRfdGxlX2J5 X3Jlc25vKHJjb24tPnRhcmdldGxpc3QsIHZhcmF0dG5vKTsKLQotCQlpZiAodGxlID09IE5VTEwp CQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg YXR0cmlidXRlICVkIGluIHN1YnF1ZXJ5IHRhcmdldGxpc3QiLAotCQkJCSB2YXJhdHRubyk7Ci0K LQkJLyogTWFrZSBhIGNvcHkgb2YgdGhlIHRsaXN0IGl0ZW0gdG8gcmV0dXJuICovCi0JCW5ld25v ZGUgPSAoTm9kZSAqKSBjb3B5T2JqZWN0KHRsZS0+ZXhwcik7Ci0KLQkJLyogSGFuZGxlIGFueSBP TEQvTkVXIFJFVFVSTklORyBsaXN0IFZhcnMgKi8KLQkJaWYgKHZhci0+dmFycmV0dXJuaW5ndHlw ZSAhPSBWQVJfUkVUVVJOSU5HX0RFRkFVTFQpCi0JCXsKLQkJCS8qCi0JCQkgKiBDb3B5IHZhcnJl dHVybmluZ3R5cGUgb250byBhbnkgVmFycyBpbiB0aGUgdGxpc3QgaXRlbSB0aGF0Ci0JCQkgKiBy ZWZlciB0byByZXN1bHRfcmVsYXRpb24gKHdoaWNoIGhhZCBiZXR0ZXIgYmUgbm9uLXplcm8pLgot CQkJICovCi0JCQlpZiAocmNvbi0+cmVzdWx0X3JlbGF0aW9uID09IDApCi0JCQkJZWxvZyhFUlJP UiwgInZhcmlhYmxlIHJldHVybmluZyBvbGQvbmV3IGZvdW5kIG91dHNpZGUgUkVUVVJOSU5HIGxp c3QiKTsKLQotCQkJU2V0VmFyUmV0dXJuaW5nVHlwZSgoTm9kZSAqKSBuZXdub2RlLCByY29uLT5y ZXN1bHRfcmVsYXRpb24sCi0JCQkJCQkJCTAsIHZhci0+dmFycmV0dXJuaW5ndHlwZSk7Ci0KLQkJ CS8qCi0JCQkgKiBJZiB0aGUgcmVwbGFjZW1lbnQgZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0bGlz dCBpcyBub3Qgc2ltcGx5IGEKLQkJCSAqIFZhciByZWZlcmVuY2luZyByZXN1bHRfcmVsYXRpb24s IHdyYXAgaXQgaW4gYSBSZXR1cm5pbmdFeHByCi0JCQkgKiBub2RlLCBzbyB0aGF0IHRoZSBleGVj dXRvciByZXR1cm5zIE5VTEwgaWYgdGhlIE9MRC9ORVcgcm93IGRvZXMKLQkJCSAqIG5vdCBleGlz dC4KLQkJCSAqLwotCQkJaWYgKCFJc0EobmV3bm9kZSwgVmFyKSB8fAotCQkJCSgoVmFyICopIG5l d25vZGUpLT52YXJubyAhPSByY29uLT5yZXN1bHRfcmVsYXRpb24gfHwKLQkJCQkoKFZhciAqKSBu ZXdub2RlKS0+dmFybGV2ZWxzdXAgIT0gMCkKLQkJCXsKLQkJCQlSZXR1cm5pbmdFeHByICpyZXhw ciA9IG1ha2VOb2RlKFJldHVybmluZ0V4cHIpOwotCi0JCQkJcmV4cHItPnJldGxldmVsc3VwID0g MDsKLQkJCQlyZXhwci0+cmV0b2xkID0gKHZhci0+dmFycmV0dXJuaW5ndHlwZSA9PSBWQVJfUkVU VVJOSU5HX09MRCk7Ci0JCQkJcmV4cHItPnJldGV4cHIgPSAoRXhwciAqKSBuZXdub2RlOwotCi0J CQkJbmV3bm9kZSA9IChOb2RlICopIHJleHByOwotCQkJfQotCQl9CisJCW5ld25vZGUgPSBSZXBs YWNlVmFyRnJvbVRhcmdldExpc3QodmFyLAorCQkJCQkJCQkJCSAgIHJjb24tPnRhcmdldF9ydGUs CisJCQkJCQkJCQkJICAgcmNvbi0+dGFyZ2V0bGlzdCwKKwkJCQkJCQkJCQkgICByY29uLT5yZXN1 bHRfcmVsYXRpb24sCisJCQkJCQkJCQkJICAgUkVQTEFDRVZBUlNfUkVQT1JUX0VSUk9SLAorCQkJ CQkJCQkJCSAgIDApOwogCiAJCS8qIEluc2VydCBQbGFjZUhvbGRlclZhciBpZiBuZWVkZWQgKi8K IAkJaWYgKG5lZWRfcGh2KQogCQl7CiAJCQlib29sCQl3cmFwOwogCi0JCQlpZiAobmV3bm9kZSAm JiBJc0EobmV3bm9kZSwgVmFyKSAmJgotCQkJCSgoVmFyICopIG5ld25vZGUpLT52YXJsZXZlbHN1 cCA9PSAwKQorCQkJaWYgKHZhcmF0dG5vID09IEludmFsaWRBdHRyTnVtYmVyKQorCQkJeworCQkJ CS8qCisJCQkJICogSW5zZXJ0IFBsYWNlSG9sZGVyVmFyIGZvciB3aG9sZS10dXBsZSByZWZlcmVu Y2UuICBOb3RpY2UKKwkJCQkgKiB0aGF0IHdlIGFyZSB3cmFwcGluZyBvbmUgUGxhY2VIb2xkZXJW YXIgYXJvdW5kIHRoZSB3aG9sZQorCQkJCSAqIFJvd0V4cHIsIHJhdGhlciB0aGFuIHB1dHRpbmcg b25lIGFyb3VuZCBlYWNoIGVsZW1lbnQgb2YgdGhlCisJCQkJICogcm93LiAgVGhpcyBpcyBiZWNh dXNlIHdlIG5lZWQgdGhlIGV4cHJlc3Npb24gdG8geWllbGQgTlVMTCwKKwkJCQkgKiBub3QgUk9X KE5VTEwsTlVMTCwuLi4pIHdoZW4gaXQgaXMgZm9yY2VkIHRvIG51bGwgYnkgYW4KKwkJCQkgKiBv dXRlciBqb2luLgorCQkJCSAqLworCQkJCXdyYXAgPSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAo bmV3bm9kZSAmJiBJc0EobmV3bm9kZSwgVmFyKSAmJgorCQkJCQkgKChWYXIgKikgbmV3bm9kZSkt PnZhcmxldmVsc3VwID09IDApCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBTaW1wbGUgVmFycyBhbHdh eXMgZXNjYXBlIGJlaW5nIHdyYXBwZWQsIHVubGVzcyB0aGV5IGFyZQpAQCAtMjkzNiw3ICsyODQz LDcgQEAgcHVsbHVwX3JlcGxhY2VfdmFyc19jYWxsYmFjayhWYXIgKnZhciwKIAkJCQkgKiBDYWNo ZSBpdCBpZiBwb3NzaWJsZSAoaWUsIGlmIHRoZSBhdHRubyBpcyBpbiByYW5nZSwgd2hpY2gKIAkJ CQkgKiBpdCBwcm9iYWJseSBhbHdheXMgc2hvdWxkIGJlKS4KIAkJCQkgKi8KLQkJCQlpZiAodmFy YXR0bm8gPiBJbnZhbGlkQXR0ck51bWJlciAmJgorCQkJCWlmICh2YXJhdHRubyA+PSBJbnZhbGlk QXR0ck51bWJlciAmJgogCQkJCQl2YXJhdHRubyA8PSBsaXN0X2xlbmd0aChyY29uLT50YXJnZXRs aXN0KSkKIAkJCQkJcmNvbi0+cnZfY2FjaGVbdmFyYXR0bm9dID0gY29weU9iamVjdChuZXdub2Rl KTsKIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMg Yi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCmluZGV4IDY5OTRiOGM1NDI1Li45 OGEyNjVjZDNkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAu YworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCkBAIC0xMDEwLDcgKzEw MTAsNyBAQCBTZXRWYXJSZXR1cm5pbmdUeXBlX3dhbGtlcihOb2RlICpub2RlLCBTZXRWYXJSZXR1 cm5pbmdUeXBlX2NvbnRleHQgKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxr ZXIobm9kZSwgU2V0VmFyUmV0dXJuaW5nVHlwZV93YWxrZXIsIGNvbnRleHQpOwogfQogCi12b2lk CitzdGF0aWMgdm9pZAogU2V0VmFyUmV0dXJuaW5nVHlwZShOb2RlICpub2RlLCBpbnQgcmVzdWx0 X3JlbGF0aW9uLCBpbnQgc3VibGV2ZWxzX3VwLAogCQkJCQlWYXJSZXR1cm5pbmdUeXBlIHJldHVy bmluZ190eXBlKQogewpAQCAtMTc5Nyw2ICsxNzk3LDExIEBAIG1hcF92YXJpYWJsZV9hdHRub3Mo Tm9kZSAqbm9kZSwKICAqIHJlZmVyZW5jaW5nIHJlc3VsdF9yZWxhdGlvbiwgaXQgaXMgd3JhcHBl ZCBpbiBhIFJldHVybmluZ0V4cHIgbm9kZSAoY2F1c2luZwogICogdGhlIGV4ZWN1dG9yIHRvIHJl dHVybiBOVUxMIGlmIHRoZSBPTEQvTkVXIHJvdyBkb2Vzbid0IGV4aXN0KS4KICAqCisgKiBOb3Rl IHRoYXQgUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0IGFsd2F5cyBnZW5lcmF0ZXMgdGhlIHJlcGxh Y2VtZW50CisgKiBleHByZXNzaW9uIHdpdGggdmFybGV2ZWxzdXAgPSAwLiAgVGhlIGNhbGxlciBp cyByZXNwb25zaWJsZSBmb3IgYWRqdXN0aW5nCisgKiB0aGUgdmFybGV2ZWxzdXAgaWYgbmVlZGVk LiAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjYWxsZXIncyBsaWZlIGlmIGl0IHdhbnRzIHRvCisgKiBj YWNoZSB0aGUgcmVwbGFjZW1lbnQgZXhwcmVzc2lvbnMuCisgKgogICogb3V0ZXJfaGFzU3ViTGlu a3Mgd29ya3MgdGhlIHNhbWUgYXMgZm9yIHJlcGxhY2VfcnRlX3ZhcmlhYmxlcygpLgogICovCiAK QEAgLTE4MTQsNiArMTgxOSwzMCBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNr KFZhciAqdmFyLAogCQkJCQkJCQkgICByZXBsYWNlX3J0ZV92YXJpYWJsZXNfY29udGV4dCAqY29u dGV4dCkKIHsKIAlSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NvbnRleHQgKnJjb24gPSAoUmVw bGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9jb250ZXh0ICopIGNvbnRleHQtPmNhbGxiYWNrX2FyZzsK KwlOb2RlCSAgICpuZXdub2RlOworCisJbmV3bm9kZSA9IFJlcGxhY2VWYXJGcm9tVGFyZ2V0TGlz dCh2YXIsCisJCQkJCQkJCQkgICByY29uLT50YXJnZXRfcnRlLAorCQkJCQkJCQkJICAgcmNvbi0+ dGFyZ2V0bGlzdCwKKwkJCQkJCQkJCSAgIHJjb24tPnJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJ CSAgIHJjb24tPm5vbWF0Y2hfb3B0aW9uLAorCQkJCQkJCQkJICAgcmNvbi0+bm9tYXRjaF92YXJu byk7CisKKwkvKiBNdXN0IGFkanVzdCB2YXJsZXZlbHN1cCBpZiByZXBsYWNlZCBWYXIgaXMgd2l0 aGluIGEgc3VicXVlcnkgKi8KKwlpZiAodmFyLT52YXJsZXZlbHN1cCA+IDApCisJCUluY3JlbWVu dFZhclN1YmxldmVsc1VwKG5ld25vZGUsIHZhci0+dmFybGV2ZWxzdXAsIDApOworCisJcmV0dXJu IG5ld25vZGU7Cit9CisKK05vZGUgKgorUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0KFZhciAqdmFy LAorCQkJCQkJIFJhbmdlVGJsRW50cnkgKnRhcmdldF9ydGUsCisJCQkJCQkgTGlzdCAqdGFyZ2V0 bGlzdCwKKwkJCQkJCSBpbnQgcmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJIFJlcGxhY2VWYXJzTm9N YXRjaE9wdGlvbiBub21hdGNoX29wdGlvbiwKKwkJCQkJCSBpbnQgbm9tYXRjaF92YXJubykKK3sK IAlUYXJnZXRFbnRyeSAqdGxlOwogCiAJaWYgKHZhci0+dmFyYXR0bm8gPT0gSW52YWxpZEF0dHJO dW1iZXIpCkBAIC0xODIyLDYgKzE4NTEsNyBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2Nh bGxiYWNrKFZhciAqdmFyLAogCQlSb3dFeHByICAgICpyb3dleHByOwogCQlMaXN0CSAgICpjb2xu YW1lczsKIAkJTGlzdAkgICAqZmllbGRzOworCQlMaXN0Q2VsbCAgICpsYzsKIAogCQkvKgogCQkg KiBJZiBnZW5lcmF0aW5nIGFuIGV4cGFuc2lvbiBmb3IgYSB2YXIgb2YgYSBuYW1lZCByb3d0eXBl IChpZSwgdGhpcwpAQCAtMTgzMCwyOSArMTg2MCw0NiBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRM aXN0X2NhbGxiYWNrKFZhciAqdmFyLAogCQkgKiBvbWl0IGRyb3BwZWQgY29sdW1ucy4gIEluIHRo ZSBsYXR0ZXIgY2FzZSwgYXR0YWNoIGNvbHVtbiBuYW1lcyB0bwogCQkgKiB0aGUgUm93RXhwciBm b3IgdXNlIG9mIHRoZSBleGVjdXRvciBhbmQgcnVsZXV0aWxzLmMuCiAJCSAqCisJCSAqIEluIG9y ZGVyIHRvIGJlIGFibGUgdG8gY2FjaGUgdGhlIHJlc3VsdHMsIHdlIGFsd2F5cyBnZW5lcmF0ZSB0 aGUKKwkJICogZXhwYW5zaW9uIHdpdGggdmFybGV2ZWxzdXAgPSAwLiAgVGhlIGNhbGxlciBpcyBy ZXNwb25zaWJsZSBmb3IKKwkJICogYWRqdXN0aW5nIGl0IGlmIG5lZWRlZC4KKwkJICoKIAkJICog VGhlIHZhcnJldHVybmluZ3R5cGUgaXMgY29waWVkIG9udG8gZWFjaCBpbmRpdmlkdWFsIGZpZWxk IFZhciwgc28KIAkJICogdGhhdCBpdCBpcyBoYW5kbGVkIGNvcnJlY3RseSB3aGVuIHdlIHJlY3Vy c2UuCiAJCSAqLwotCQlleHBhbmRSVEUocmNvbi0+dGFyZ2V0X3J0ZSwKLQkJCQkgIHZhci0+dmFy bm8sIHZhci0+dmFybGV2ZWxzdXAsIHZhci0+dmFycmV0dXJuaW5ndHlwZSwKLQkJCQkgIHZhci0+ bG9jYXRpb24sICh2YXItPnZhcnR5cGUgIT0gUkVDT1JET0lEKSwKKwkJZXhwYW5kUlRFKHRhcmdl dF9ydGUsCisJCQkJICB2YXItPnZhcm5vLCAwIC8qIG5vdCB2YXJsZXZlbHN1cCAqLyAsCisJCQkJ ICB2YXItPnZhcnJldHVybmluZ3R5cGUsIHZhci0+bG9jYXRpb24sCisJCQkJICAodmFyLT52YXJ0 eXBlICE9IFJFQ09SRE9JRCksCiAJCQkJICAmY29sbmFtZXMsICZmaWVsZHMpOwotCQkvKiBBZGp1 c3QgdGhlIGdlbmVyYXRlZCBwZXItZmllbGQgVmFycy4uLiAqLwotCQlmaWVsZHMgPSAoTGlzdCAq KSByZXBsYWNlX3J0ZV92YXJpYWJsZXNfbXV0YXRvcigoTm9kZSAqKSBmaWVsZHMsCi0JCQkJCQkJ CQkJCQkJCWNvbnRleHQpOwogCQlyb3dleHByID0gbWFrZU5vZGUoUm93RXhwcik7Ci0JCXJvd2V4 cHItPmFyZ3MgPSBmaWVsZHM7CisJCS8qIHRoZSBmaWVsZHMgd2lsbCBiZSBzZXQgYmVsb3cgKi8K KwkJcm93ZXhwci0+YXJncyA9IE5JTDsKIAkJcm93ZXhwci0+cm93X3R5cGVpZCA9IHZhci0+dmFy dHlwZTsKIAkJcm93ZXhwci0+cm93X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOwogCQly b3dleHByLT5jb2xuYW1lcyA9ICh2YXItPnZhcnR5cGUgPT0gUkVDT1JET0lEKSA/IGNvbG5hbWVz IDogTklMOwogCQlyb3dleHByLT5sb2NhdGlvbiA9IHZhci0+bG9jYXRpb247CisJCS8qIEFkanVz dCB0aGUgZ2VuZXJhdGVkIHBlci1maWVsZCBWYXJzLi4uICovCisJCWZvcmVhY2gobGMsIGZpZWxk cykKKwkJeworCQkJTm9kZQkgICAqZmllbGQgPSBsZmlyc3QobGMpOworCisJCQlpZiAoZmllbGQg JiYgSXNBKGZpZWxkLCBWYXIpKQorCQkJCWZpZWxkID0gUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0 KChWYXIgKikgZmllbGQsCisJCQkJCQkJCQkJCQkgdGFyZ2V0X3J0ZSwKKwkJCQkJCQkJCQkJCSB0 YXJnZXRsaXN0LAorCQkJCQkJCQkJCQkJIHJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBu b21hdGNoX29wdGlvbiwKKwkJCQkJCQkJCQkJCSBub21hdGNoX3Zhcm5vKTsKKwkJCXJvd2V4cHIt PmFyZ3MgPSBsYXBwZW5kKHJvd2V4cHItPmFyZ3MsIGZpZWxkKTsKKwkJfQogCiAJCS8qIFdyYXAg aXQgaW4gYSBSZXR1cm5pbmdFeHByLCBpZiBuZWVkZWQsIHBlciBjb21tZW50cyBhYm92ZSAqLwog CQlpZiAodmFyLT52YXJyZXR1cm5pbmd0eXBlICE9IFZBUl9SRVRVUk5JTkdfREVGQVVMVCkKIAkJ ewogCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5pbmdFeHByKTsKIAot CQkJcmV4cHItPnJldGxldmVsc3VwID0gdmFyLT52YXJsZXZlbHN1cDsKKwkJCXJleHByLT5yZXRs ZXZlbHN1cCA9IDA7CiAJCQlyZXhwci0+cmV0b2xkID0gKHZhci0+dmFycmV0dXJuaW5ndHlwZSA9 PSBWQVJfUkVUVVJOSU5HX09MRCk7CiAJCQlyZXhwci0+cmV0ZXhwciA9IChFeHByICopIHJvd2V4 cHI7CiAKQEAgLTE4NjMsMTIgKzE5MTAsMTIgQEAgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9j YWxsYmFjayhWYXIgKnZhciwKIAl9CiAKIAkvKiBOb3JtYWwgY2FzZSByZWZlcmVuY2luZyBvbmUg dGFyZ2V0bGlzdCBlbGVtZW50ICovCi0JdGxlID0gZ2V0X3RsZV9ieV9yZXNubyhyY29uLT50YXJn ZXRsaXN0LCB2YXItPnZhcmF0dG5vKTsKKwl0bGUgPSBnZXRfdGxlX2J5X3Jlc25vKHRhcmdldGxp c3QsIHZhci0+dmFyYXR0bm8pOwogCiAJaWYgKHRsZSA9PSBOVUxMIHx8IHRsZS0+cmVzanVuaykK IAl7CiAJCS8qIEZhaWxlZCB0byBmaW5kIGNvbHVtbiBpbiB0YXJnZXRsaXN0ICovCi0JCXN3aXRj aCAocmNvbi0+bm9tYXRjaF9vcHRpb24pCisJCXN3aXRjaCAobm9tYXRjaF9vcHRpb24pCiAJCXsK IAkJCWNhc2UgUkVQTEFDRVZBUlNfUkVQT1JUX0VSUk9SOgogCQkJCS8qIGZhbGwgdGhyb3VnaCwg dGhyb3cgZXJyb3IgYmVsb3cgKi8KQEAgLTE4NzYsNyArMTkyMyw4IEBAIFJlcGxhY2VWYXJzRnJv bVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAKIAkJCWNhc2UgUkVQTEFDRVZBUlNfQ0hB TkdFX1ZBUk5POgogCQkJCXZhciA9IGNvcHlPYmplY3QodmFyKTsKLQkJCQl2YXItPnZhcm5vID0g cmNvbi0+bm9tYXRjaF92YXJubzsKKwkJCQl2YXItPnZhcm5vID0gbm9tYXRjaF92YXJubzsKKwkJ CQl2YXItPnZhcmxldmVsc3VwID0gMDsKIAkJCQkvKiB3ZSBsZWF2ZSB0aGUgc3ludGFjdGljIHJl ZmVyZW50IGFsb25lICovCiAJCQkJcmV0dXJuIChOb2RlICopIHZhcjsKIApAQCAtMTkwNiwxMCAr MTk1NCw2IEBAIFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAJ CS8qIE1ha2UgYSBjb3B5IG9mIHRoZSB0bGlzdCBpdGVtIHRvIHJldHVybiAqLwogCQlFeHByCSAg ICpuZXdub2RlID0gY29weU9iamVjdCh0bGUtPmV4cHIpOwogCi0JCS8qIE11c3QgYWRqdXN0IHZh cmxldmVsc3VwIGlmIHRsaXN0IGl0ZW0gaXMgZnJvbSBoaWdoZXIgcXVlcnkgKi8KLQkJaWYgKHZh ci0+dmFybGV2ZWxzdXAgPiAwKQotCQkJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikg bmV3bm9kZSwgdmFyLT52YXJsZXZlbHN1cCwgMCk7Ci0KIAkJLyoKIAkJICogQ2hlY2sgdG8gc2Vl IGlmIHRoZSB0bGlzdCBpdGVtIGNvbnRhaW5zIGEgUEFSQU1fTVVMVElFWFBSIFBhcmFtLAogCQkg KiBhbmQgdGhyb3cgZXJyb3IgaWYgc28uICBUaGlzIGNhc2UgY291bGQgb25seSBoYXBwZW4gd2hl biBleHBhbmRpbmcKQEAgLTE5MzIsMjAgKzE5NzYsMjAgQEAgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0 TGlzdF9jYWxsYmFjayhWYXIgKnZhciwKIAkJCSAqIENvcHkgdmFycmV0dXJuaW5ndHlwZSBvbnRv IGFueSBWYXJzIGluIHRoZSB0bGlzdCBpdGVtIHRoYXQKIAkJCSAqIHJlZmVyIHRvIHJlc3VsdF9y ZWxhdGlvbiAod2hpY2ggaGFkIGJldHRlciBiZSBub24temVybykuCiAJCQkgKi8KLQkJCWlmIChy Y29uLT5yZXN1bHRfcmVsYXRpb24gPT0gMCkKKwkJCWlmIChyZXN1bHRfcmVsYXRpb24gPT0gMCkK IAkJCQllbG9nKEVSUk9SLCAidmFyaWFibGUgcmV0dXJuaW5nIG9sZC9uZXcgZm91bmQgb3V0c2lk ZSBSRVRVUk5JTkcgbGlzdCIpOwogCi0JCQlTZXRWYXJSZXR1cm5pbmdUeXBlKChOb2RlICopIG5l d25vZGUsIHJjb24tPnJlc3VsdF9yZWxhdGlvbiwKLQkJCQkJCQkJdmFyLT52YXJsZXZlbHN1cCwg dmFyLT52YXJyZXR1cm5pbmd0eXBlKTsKKwkJCVNldFZhclJldHVybmluZ1R5cGUoKE5vZGUgKikg bmV3bm9kZSwgcmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJCQkwLCB2YXItPnZhcnJldHVybmluZ3R5 cGUpOwogCiAJCQkvKiBXcmFwIGl0IGluIGEgUmV0dXJuaW5nRXhwciwgaWYgbmVlZGVkLCBwZXIg Y29tbWVudHMgYWJvdmUgKi8KIAkJCWlmICghSXNBKG5ld25vZGUsIFZhcikgfHwKLQkJCQkoKFZh ciAqKSBuZXdub2RlKS0+dmFybm8gIT0gcmNvbi0+cmVzdWx0X3JlbGF0aW9uIHx8Ci0JCQkJKChW YXIgKikgbmV3bm9kZSktPnZhcmxldmVsc3VwICE9IHZhci0+dmFybGV2ZWxzdXApCisJCQkJKChW YXIgKikgbmV3bm9kZSktPnZhcm5vICE9IHJlc3VsdF9yZWxhdGlvbiB8fAorCQkJCSgoVmFyICop IG5ld25vZGUpLT52YXJsZXZlbHN1cCAhPSAwKQogCQkJewogCQkJCVJldHVybmluZ0V4cHIgKnJl eHByID0gbWFrZU5vZGUoUmV0dXJuaW5nRXhwcik7CiAKLQkJCQlyZXhwci0+cmV0bGV2ZWxzdXAg PSB2YXItPnZhcmxldmVsc3VwOworCQkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7CiAJCQkJcmV4 cHItPnJldG9sZCA9ICh2YXItPnZhcnJldHVybmluZ3R5cGUgPT0gVkFSX1JFVFVSTklOR19PTEQp OwogCQkJCXJleHByLT5yZXRleHByID0gbmV3bm9kZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmgKaW5kZXggNDY2ZWRkN2MxYzIuLmVhMzkwODczOWM2IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCisrKyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmgKQEAgLTU1LDkgKzU1LDYgQEAgZXh0ZXJuIHZvaWQgSW5jcmVtZW50VmFyU3Vi bGV2ZWxzVXAoTm9kZSAqbm9kZSwgaW50IGRlbHRhX3N1YmxldmVsc191cCwKIGV4dGVybiB2b2lk IEluY3JlbWVudFZhclN1YmxldmVsc1VwX3J0YWJsZShMaXN0ICpydGFibGUsCiAJCQkJCQkJCQkJ ICAgaW50IGRlbHRhX3N1YmxldmVsc191cCwgaW50IG1pbl9zdWJsZXZlbHNfdXApOwogCi1leHRl cm4gdm9pZCBTZXRWYXJSZXR1cm5pbmdUeXBlKE5vZGUgKm5vZGUsIGludCByZXN1bHRfcmVsYXRp b24sIGludCBzdWJsZXZlbHNfdXAsCi0JCQkJCQkJCVZhclJldHVybmluZ1R5cGUgcmV0dXJuaW5n X3R5cGUpOwotCiBleHRlcm4gYm9vbCByYW5nZVRhYmxlRW50cnlfdXNlZChOb2RlICpub2RlLCBp bnQgcnRfaW5kZXgsCiAJCQkJCQkJCSBpbnQgc3VibGV2ZWxzX3VwKTsKIApAQCAtOTIsNiArODks MTIgQEAgZXh0ZXJuIE5vZGUgKm1hcF92YXJpYWJsZV9hdHRub3MoTm9kZSAqbm9kZSwKIAkJCQkJ CQkJIGNvbnN0IHN0cnVjdCBBdHRyTWFwICphdHRub19tYXAsCiAJCQkJCQkJCSBPaWQgdG9fcm93 dHlwZSwgYm9vbCAqZm91bmRfd2hvbGVfcm93KTsKIAorZXh0ZXJuIE5vZGUgKlJlcGxhY2VWYXJG cm9tVGFyZ2V0TGlzdChWYXIgKnZhciwKKwkJCQkJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqdGFyZ2V0 X3J0ZSwKKwkJCQkJCQkJCSAgTGlzdCAqdGFyZ2V0bGlzdCwKKwkJCQkJCQkJCSAgaW50IHJlc3Vs dF9yZWxhdGlvbiwKKwkJCQkJCQkJCSAgUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uIG5vbWF0Y2hf b3B0aW9uLAorCQkJCQkJCQkJICBpbnQgbm9tYXRjaF92YXJubyk7CiBleHRlcm4gTm9kZSAqUmVw bGFjZVZhcnNGcm9tVGFyZ2V0TGlzdChOb2RlICpub2RlLAogCQkJCQkJCQkJICAgaW50IHRhcmdl dF92YXJubywgaW50IHN1YmxldmVsc191cCwKIAkJCQkJCQkJCSAgIFJhbmdlVGJsRW50cnkgKnRh cmdldF9ydGUsCi0tIAoyLjQzLjAKCg== --000000000000eb9d6b062edfdba6--