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 1tjuw7-00EeWw-Co for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 06:48:59 +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 1tjuw5-00DlBh-Pc for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 06:48:57 +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 1tjuw4-00DlBZ-U9 for pgsql-hackers@lists.postgresql.org; Mon, 17 Feb 2025 06:48:57 +0000 Received: from mail-ua1-x936.google.com ([2607:f8b0:4864:20::936]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tjuw3-001G9P-0I for pgsql-hackers@postgresql.org; Mon, 17 Feb 2025 06:48:55 +0000 Received: by mail-ua1-x936.google.com with SMTP id a1e0cc1a2514c-86911fd168dso420774241.1 for ; Sun, 16 Feb 2025 22:48:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739774934; x=1740379734; 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=UfESd6+C7aGIASJVdDfQ2p5Iww0pU8DCsZ4NFoTjQ2k=; b=MMFzPDdWxfioCtW4wVS9SWmwVLn3ZDWLnHH62tAlcKyLVK/qe8WHd1PlGk7ZQ73yhP 8EJsFi1YfTd8pOmPtKgXGv2CstpyHFVBWYPN+fdV11CkILP/dHOw3h9clDsDsMskBRzw iJ1kbNUxs3/4E73K514j617up2qKlohyc3MhPkdhZ/C/UJd/CLU7ORNXypyw6CC3naaZ MM+jvvbvkog5oUg0eCWXdvqPvQvdXiMGaaT14Umtm564X2yk3/hMVf9KYiO580yQ+cRf R3W/VpMUBkFmxD/8CWmpkmnwUNWvMKzwv4ytG4rQ6PnLXwrD+JXrKa9gOyiWtZi8IOF2 3eUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739774934; x=1740379734; 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=UfESd6+C7aGIASJVdDfQ2p5Iww0pU8DCsZ4NFoTjQ2k=; b=Ozi0sbQUVA4Jpxrum1OlxouZmPzUDtOyLKa8qlMKhW5y0sBeHzwLKwlbVc6Vd+5o3O GzTDwOl9k+UmhfD6xTXp2mKrYjdt3H0Pp/X3bT1sNcX62gTSPIUHR6Bk/FgbkSHG5Zp4 UYDwJkqtsxvDLeAhn9v71ivQOZeBzRGM+Rn986TlAQOZDyqVyk+EDFF133euJ6v1wfas V5VygvW5GcKYa5MxwfzdFXVTfcpfRlsaMHvCuORmS8aTwpXdiHm5hhpD4mnibKocUKep qbvf0/Z2N8rtwR0KYQcaPdsDktYcvsP6d7FQh/o70asC8B9hzlfU968dEyuk3Se4Wbua jXyw== X-Forwarded-Encrypted: i=1; AJvYcCVG4tnVfiAYbasztOJLrW9LNqXugCfJcBJRGFDRSwi5WVEPryEB8SBdRquyPqwxUbjsH+0SzuvAJwZDtmrr@postgresql.org X-Gm-Message-State: AOJu0YxNI5b/cnMZHbUduwXZj19IEkX1kMfK//8ZacQyI+3cY54/tJkU 2edd2o9DFvHQnWDoILUFRzr3DkSEm55d+vjP1Yqh+02hvoAhUPhHooWLJyjbQ9unU21uEk1LR4O +c+SH1xpSSs2GjWwjaEvnfZV4YXCzYp+tSW4fYw== X-Gm-Gg: ASbGncvTuHPKwr1Jbpxvp9IOzEym7FIRp2XQlphp2j5kLVah9dJTzHsdbvJ+ANb3mRO k56sUFwfB/VBB3Gnx1iSmrm9n8lSGhamaRldIQu9KwIis0yZtvLY9d4crMfm8xnWkOrkX8c3Bw3 V6iLwyiAAZ05ksN1xOxIZAJbT16Zw= X-Google-Smtp-Source: AGHT+IEb7KCmTsEpUp5J9QwNM7w1awG8N+I91q2kwR4mBqqtsl01AIucAu5TPVcFPcFsNoNyKN4zlRXgeNLfn7grj+g= X-Received: by 2002:a05:6102:5e91:b0:4bb:f1f0:1b34 with SMTP id ada2fe7eead31-4bd3fc81852mr4316395137.2.1739774934130; Sun, 16 Feb 2025 22:48:54 -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: jian he Date: Mon, 17 Feb 2025 14:48:18 +0800 X-Gm-Features: AWEUYZmqFXNL-g5EETosInJoFjGIWK2ssgxQ2j3M4DNyhdag0uEtefnoD7nlOPI Message-ID: Subject: Re: Virtual generated columns To: Dean Rasheed Cc: Peter Eisentraut , Richard Guo , Zhang Mingli , Alexander Lakhin , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000f08f40062e50ea52" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f08f40062e50ea52 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Feb 15, 2025 at 8:37=E2=80=AFPM Dean Rasheed wrote: > > On Fri, 14 Feb 2025 at 10:59, Peter Eisentraut wro= te: > > > > On 13.02.25 14:06, jian he wrote: > > > I didn't solve the out join semantic issue. > > > i am wondering, can we do the virtual generated column expansion in > > > the rewrite stage as is, > > > and wrap the expressions in PHVs if the virtual generated > > > columns come from the nullable side of an outer join. > > > > PlaceHolderVar looks like a fitting mechanism for this. But it's so fa= r > > a planner node, so it might take some additional consideration if we > > want to expand where it's used. > > It seems pretty baked into how PHVs work that they should only be > added by the planner, so I think that I agree with Richard -- virtual > generated columns probably have to be expanded in the planner rather > than the rewriter. > > > Maybe a short-term fix would be to error out if we find ourselves about > > to expand a Var with varnullingrels !=3D NULL. That would mean you > > couldn't use a virtual generated column on the nullable output side of > > an outer join, which is annoying but not fatal, and we could fix it > > incrementally later. > > I think that would be rather a sad limitation to have. It would be > nice to have this fully working for the next release. > error out seems not that hard, IMHO. i think, we still have time to figure out how to make it fully working in v= 18. > Attached is a rough patch that moves the expansion of virtual > generated columns to the planner. It needs a lot more testing (and > some regression tests), but it does seem to fix all the issues > mentioned in this thread. > I will review it later. In the meantime, I also came up with my patch (including tests) that solves all the issues. --000000000000f08f40062e50ea52 Content-Type: application/x-patch; name="0001-fix-expand-virtual-generated-column-Var-node-varnull.patch" Content-Disposition: attachment; filename="0001-fix-expand-virtual-generated-column-Var-node-varnull.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m78p0xbw0 RnJvbSA2OWQ0NzQ5NjEzMTI3MzIzYmQwMWZjYWQ0MWM4MTU0ZjY3NDRhNTJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTcgRmViIDIwMjUgMTQ6Mzc6MTcgKzA4MDAKU3ViamVjdDogW1BBVENIXSBm aXggZXhwYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBWYXIgbm9kZSB2YXJudWxsaW5ncmVs cwogZmllbGQKClRvIGV4cGFuZCB0aGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIFZhciBub2Rl LAp3ZSBuZWVkIHRvIGNvcHkgdGhlIGZpZWxkcyBvZiB0aGUgb3JpZ2luYWwgdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1uIFZhciBub2RlLAppbmNsdWRpbmcgdmFybnVsbGluZ3JlbHMsIHZhcmxldmVs c3VwLCB2YXJyZXR1cm5pbmd0eXBlLCBhbmQgdmFyYXR0bm8sCnRvIHRoZSBuZXdseSBleHBhbmRl ZCBWYXIgbm9kZS4KClJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2sgZGlkbid0IHRh a2VuIGNhcmUgb2YgdmFybnVsbGluZ3JlbHMsCnRoaXMgcGF0Y2ggZml4IHRoaXMgaXNzdWUuCgpk aXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzc1ZWIxYTZmLWQ1OWYtNDJlNi04YTc4LTEy NGVlODA4Y2RhN0BnbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpv aW50cmVlLmMgICAgIHwgMTIyICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5jICAgICAgICAgIHwgIDM5ICsrKystLQogc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlTWFuaXAuYyAgICAgICAgICAgIHwgMTIwICsrKysrKysrKysrKysrKysrCiBz cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggICAgICAgICAgICB8ICAgNCArCiAuLi4vcmVn cmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQgICAgfCAgNTkgKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwgICAgfCAgMTcgKysrCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMTAg ZmlsZXMgY2hhbmdlZCwgMzU5IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3YjFhOGEwYTlmMS4uOGYwYmUzZGZhZGMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNp bmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0 cmVlLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRkZXNjLmgiCisjaW5jbHVkZSAicmV3 cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgi CiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBA IC03MDYsNiArNzA3LDEwIEBAIHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwg UXVlcnkgKnBhcnNlLCBQbGFubmVySW5mbyAqcGFyZW50X3Jvb3QsCiAJaWYgKHBhcnNlLT5jdGVM aXN0KQogCQlTU19wcm9jZXNzX2N0ZXMocm9vdCk7CiAKKwlwYXJzZSA9IChRdWVyeSAqKSBwcmVw cm9jZXNzX251bGxhYmxlX2dlbmVyYXRlZF9jb2xzKHJvb3QsIChOb2RlICopIHJvb3QtPnBhcnNl KTsKKwlwYXJzZSA9IChRdWVyeSAqKSBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnMoKE5vZGUgKikg cGFyc2UpOworCXJvb3QtPnBhcnNlID0gcGFyc2U7CisKIAkvKgogCSAqIElmIGl0J3MgYSBNRVJH RSBjb21tYW5kLCB0cmFuc2Zvcm0gdGhlIGpvaW5saXN0IGFzIGFwcHJvcHJpYXRlLgogCSAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwppbmRleCA1ZDkyMjVlOTkw OS4uODIyNGE1M2RhNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXBqb2ludHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJl ZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtNDAsNiArNDEsNyBA QAogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBhcnNlci9w YXJzZXRyZWUuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgorI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogCiAKIHR5cGVkZWYgc3RydWN0IG51bGxpbmdyZWxfaW5mbwpAQCAtNjgs NiArNzAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgcHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0CiAJ Tm9kZQkgICoqcnZfY2FjaGU7CQkvKiBjYWNoZSBmb3IgcmVzdWx0cyB3aXRoIFBIVnMgKi8KIH0g cHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0OwogCit0eXBlZGVmIHN0cnVjdCByZXBsYWNlX3Zh cnNudWxsaW5nX2NvbnRleHQKK3sKKwlQbGFubmVySW5mbyAqcm9vdDsKKwlSYW5nZVRibEVudHJ5 ICp0YXJnZXRfcnRlOwkvKiBSVEUgb2Ygc3VicXVlcnkgKi8KKwlCaXRtYXBzZXQgICpnZW5fdmFy YXR0bm87CisJaW50CQkJdGFyZ2V0X3Zhcm5vOwkvKiBSVEUgaW5kZXggdG8gc2VhcmNoIGZvciAq LworCWludAkJCXN1YmxldmVsc191cDsJLyogKGN1cnJlbnQpIG5lc3RpbmcgZGVwdGggKi8KK30g cmVwbGFjZV92YXJzbnVsbGluZ19jb250ZXh0OwogdHlwZWRlZiBzdHJ1Y3QgcmVkdWNlX291dGVy X2pvaW5zX3Bhc3MxX3N0YXRlCiB7CiAJUmVsaWRzCQlyZWxpZHM7CQkJLyogYmFzZSByZWxpZHMg d2l0aGluIHRoaXMgc3VidHJlZSAqLwpAQCAtMTYwLDYgKzE3MCwxMTggQEAgc3RhdGljIHZvaWQg Z2V0X251bGxpbmdyZWxzX3JlY3Vyc2UoTm9kZSAqanRub2RlLCBSZWxpZHMgdXBwZXJfbnVsbGlu Z3JlbHMsCiAJCQkJCQkJCQludWxsaW5ncmVsX2luZm8gKmluZm8pOwogCiAKK3N0YXRpYyBOb2Rl ICoKK3JlcGxhY2VfdmFybnVsbGluZ192YXJpYWJsZXNfbXV0YXRvcihOb2RlICpub2RlLAorCQkJ CQkJCQkJIHJlcGxhY2VfdmFyc251bGxpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlpZiAobm9k ZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoSXNBKG5vZGUsIFZhcikpCisJeworCQlW YXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJaWYgKHZhci0+dmFybm8gPT0gY29udGV4 dC0+dGFyZ2V0X3Zhcm5vICYmCisJCQl2YXItPnZhcmxldmVsc3VwID09IGNvbnRleHQtPnN1Ymxl dmVsc191cCAmJgorCQkJYm1zX2lzX21lbWJlcih2YXItPnZhcmF0dG5vLCBjb250ZXh0LT5nZW5f dmFyYXR0bm8pICYmCisJCQl2YXItPnZhcm51bGxpbmdyZWxzICE9IE5VTEwpCisJCXsKKwkJCU5v ZGUJICAgKm5ld25vZGU7CisJCQlQbGFjZUhvbGRlclZhciAqbmV3cGh2OworCQkJbmV3bm9kZSA9 IChOb2RlICopIGNvcHlPYmplY3QodmFyKTsKKworCQkJbmV3bm9kZSA9IChOb2RlICopCisJCQkJ bWFrZV9wbGFjZWhvbGRlcl9leHByKGNvbnRleHQtPnJvb3QsCisJCQkJCQkJCQkgKEV4cHIgKikg bmV3bm9kZSwKKwkJCQkJCQkJCSBibXNfbWFrZV9zaW5nbGV0b24oY29udGV4dC0+dGFyZ2V0X3Zh cm5vKSk7CisKKwkJCW5ld3BodiA9IChQbGFjZUhvbGRlclZhciAqKSBuZXdub2RlOworCQkJbmV3 cGh2LT5waG51bGxpbmdyZWxzID0gYm1zX2FkZF9tZW1iZXJzKG5ld3Bodi0+cGhudWxsaW5ncmVs cywKKwkJCQkJCQkJCQkJCQkJdmFyLT52YXJudWxsaW5ncmVscyk7CisJCQluZXdwaHYtPnBobGV2 ZWxzdXAgPSB2YXItPnZhcmxldmVsc3VwOworCQkJcmV0dXJuIG5ld25vZGU7CisJCX0KKwl9CisJ ZWxzZSBpZiAoSXNBKG5vZGUsIFF1ZXJ5KSkKKwl7CisJCVF1ZXJ5CSAgICpuZXdub2RlOworCQlj b250ZXh0LT5zdWJsZXZlbHNfdXArKzsKKwkJbmV3bm9kZSA9IHF1ZXJ5X3RyZWVfbXV0YXRvcigo UXVlcnkgKikgbm9kZSwKKwkJCQkJCQkJCSByZXBsYWNlX3Zhcm51bGxpbmdfdmFyaWFibGVzX211 dGF0b3IsCisJCQkJCQkJCQkgY29udGV4dCwKKwkJCQkJCQkJCSAwKTsKKwkJY29udGV4dC0+c3Vi bGV2ZWxzX3VwLS07CisJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCX0KKwlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX211dGF0b3Iobm9kZSwgcmVwbGFjZV92YXJudWxsaW5nX3ZhcmlhYmxlc19t dXRhdG9yLCBjb250ZXh0KTsKK30KKworc3RhdGljIE5vZGUgKgorcmVwbGFjZV92YXJzbnVsbGlu ZyhOb2RlICpub2RlLCByZXBsYWNlX3ZhcnNudWxsaW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJ Tm9kZQkgICAqcmVzdWx0OworCisJcmVzdWx0ID0gcXVlcnlfb3JfZXhwcmVzc2lvbl90cmVlX211 dGF0b3Iobm9kZSwKKwkJCQkJCQkJCQkJICByZXBsYWNlX3Zhcm51bGxpbmdfdmFyaWFibGVzX211 dGF0b3IsCisJCQkJCQkJCQkJCSAgY29udGV4dCwKKwkJCQkJCQkJCQkJICAwKTsKKwlyZXR1cm4g cmVzdWx0OworfQorCitOb2RlICoKK3ByZXByb2Nlc3NfbnVsbGFibGVfZ2VuZXJhdGVkX2NvbHMo UGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUpCit7CisJaW50CQkJcnRfaW5kZXggPSAwOwor CVF1ZXJ5CSAgICpwYXJzZSA9IChRdWVyeSAqKSBub2RlOworCisJZm9yZWFjaF9ub2RlKFJhbmdl VGJsRW50cnksIHJ0ZSwgcGFyc2UtPnJ0YWJsZSkKKwl7CisJCSsrcnRfaW5kZXg7CisKKwkJaWYg KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pCisJCXsKKwkJCVJlbGF0aW9uCXJlbDsKKwkJ CVR1cGxlRGVzYwl0dXBkZXNjOworCisJCQlyZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIE5v TG9jayk7CisJCQl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCisJCQlpZiAodHVw ZGVzYy0+Y29uc3RyICYmIHR1cGRlc2MtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKQor CQkJeworCQkJCWludAkJCWk7CisJCQkJQml0bWFwc2V0ICAqZ2VuZXJhdGVkX2NvbHMJPSBOVUxM OworCisJCQkJZm9yIChpID0gMTsgaSA8PSB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJCXsKKwkJ CQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSAtIDEp OworCisJCQkJCS8qIElnbm9yZSBkcm9wcGVkIGF0dHJpYnV0ZXMuICovCisJCQkJCWlmIChhdHRy LT5hdHRpc2Ryb3BwZWQpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlpZiAoYXR0ci0+YXR0Z2Vu ZXJhdGVkICE9IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQkJCWNvbnRpbnVlOwor CisJCQkJCWlmIChhdHRub19jb250YWluX3Zhcm51bGxpbmdyZWwoKE5vZGUgKikgcGFyc2UtPnRh cmdldExpc3QsIHJ0X2luZGV4LCBhdHRyLT5hdHRudW0pKQorCQkJCQkJZ2VuZXJhdGVkX2NvbHMg PSBibXNfYWRkX21lbWJlcihnZW5lcmF0ZWRfY29scywgYXR0ci0+YXR0bnVtKTsKKwkJCQl9CisJ CQkJaWYgKGdlbmVyYXRlZF9jb2xzICE9IE5VTEwpCisJCQkJeworCQkJCQlyZXBsYWNlX3ZhcnNu dWxsaW5nX2NvbnRleHQgcnZjb250ZXh0OworCQkJCQlydmNvbnRleHQucm9vdCA9IHJvb3Q7CisJ CQkJCXJ2Y29udGV4dC50YXJnZXRfcnRlID0gcnRlOworCQkJCQlydmNvbnRleHQuZ2VuX3ZhcmF0 dG5vID0gZ2VuZXJhdGVkX2NvbHM7CisJCQkJCXJ2Y29udGV4dC50YXJnZXRfdmFybm8gPSBydF9p bmRleDsKKwkJCQkJcnZjb250ZXh0LnN1YmxldmVsc191cCA9IDA7CisKKwkJCQkJcGFyc2UtPnRh cmdldExpc3QgPSAoTGlzdCAqKSByZXBsYWNlX3ZhcnNudWxsaW5nKChOb2RlICopIHBhcnNlLT50 YXJnZXRMaXN0LCAmcnZjb250ZXh0KTsKKwkJCQl9CisJCQl9CisJCQl0YWJsZV9jbG9zZShyZWws IE5vTG9jayk7CisJCX0KKwl9CisJcmV0dXJuIChOb2RlICopcGFyc2U7Cit9CisKIC8qCiAgKiB0 cmFuc2Zvcm1fTUVSR0VfdG9fam9pbgogICoJCVJlcGxhY2UgYSBNRVJHRSdzIGpvaW50cmVlIHRv IGFsc28gaW5jbHVkZSB0aGUgdGFyZ2V0IHJlbGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRl SGFuZGxlci5jCmluZGV4IGU5OTZiZGMwZDIxLi4yYWI5NTY2ZTFhMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3Jp dGUvcmV3cml0ZUhhbmRsZXIuYwpAQCAtMjMwMCwxNiArMjMwMCw2IEBAIGZpcmVSSVJydWxlcyhR dWVyeSAqcGFyc2V0cmVlLCBMaXN0ICphY3RpdmVSSVJzKQogCQlpZiAoaGFzU3ViTGlua3MpCiAJ CQlwYXJzZXRyZWUtPmhhc1N1YkxpbmtzID0gdHJ1ZTsKIAotCQkvKgotCQkgKiBFeHBhbmQgYW55 IHJlZmVyZW5jZXMgdG8gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBvZiB0aGlzIHRhYmxlLgot CQkgKiBOb3RlIHRoYXQgc3VicXVlcmllcyBpbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gZXhw cmVzc2lvbnMgYXJlCi0JCSAqIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBzbyB0aGlzIGNhbm5v dCBhZGQgYW55IG1vcmUgc3VibGlua3MuCi0JCSAqLwotCQlwYXJzZXRyZWUgPSAoUXVlcnkgKikK LQkJCWV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbnRlcm5hbCgoTm9kZSAqKSBwYXJzZXRyZWUs Ci0JCQkJCQkJCQkJCSAgcmVsLCBydF9pbmRleCwgcnRlLAotCQkJCQkJCQkJCQkgIHBhcnNldHJl ZS0+cmVzdWx0UmVsYXRpb24pOwotCiAJCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKIAl9CiAK QEAgLTQ1MDEsNiArNDQ5MSwzNSBAQCBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW50ZXJuYWwo Tm9kZSAqbm9kZSwgUmVsYXRpb24gcmVsLCBpbnQgcnRfaW5kZXgsCiAJcmV0dXJuIG5vZGU7CiB9 CiAKK05vZGUgKgorZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zKE5vZGUgKm5vZGUpCit7CisJaW50 CQkJcnRfaW5kZXggPSAwOworCVF1ZXJ5ICpwYXJzZSA9IChRdWVyeSAqKSBub2RlOworCWZvcmVh Y2hfbm9kZShSYW5nZVRibEVudHJ5LCBydGUsIHBhcnNlLT5ydGFibGUpCisJeworCQlSZWxhdGlv bglyZWw7CisKKwkJKytydF9pbmRleDsKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVF UlkpCisJCXsKKwkJCXJ0ZS0+c3VicXVlcnkgPSAoUXVlcnkgKikKKwkJCQlleHBhbmRfZ2VuZXJh dGVkX2NvbHVtbnMoKE5vZGUgKikgcnRlLT5zdWJxdWVyeSk7CisJCX0KKworCQlpZiAocnRlLT5y dGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCWNvbnRpbnVlOworCisJCXJlbCA9IHRhYmxlX29w ZW4ocnRlLT5yZWxpZCwgTm9Mb2NrKTsKKwkJcGFyc2UgPSAoUXVlcnkgKikKKwkJCWV4cGFuZF9n ZW5lcmF0ZWRfY29sdW1uc19pbnRlcm5hbCgoTm9kZSAqKSBwYXJzZSwKKwkJCQkJCQkJCQkJICAg cmVsLCBydF9pbmRleCwgcnRlLAorCQkJCQkJCQkJCQkgICBwYXJzZS0+cmVzdWx0UmVsYXRpb24p OworCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CisJfQorCXJldHVybiAoTm9kZSAqKSBwYXJz ZTsKK30KKwogLyoKICAqIEV4cGFuZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGluIGFuIGV4 cHJlc3Npb24KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5p cC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYwppbmRleCBhMTE1YjIxN2M5 MS4uZDFmMmUwMGIzYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYwpAQCAtMzAsNiAr MzAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlzdWJsZXZlbHNfdXA7CiB9IGNvbnRhaW5f YWdnc19vZl9sZXZlbF9jb250ZXh0OwogCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCXZhcm5v OworCWludAkJCXN1YmxldmVsc191cDsKKwlpbnQJCQl2YXJhdHRubzsKK30gYXR0bm9fdmFybnVs bGluZ3JlbF9jb250ZXh0OworCiB0eXBlZGVmIHN0cnVjdAogewogCWludAkJCWFnZ19sb2NhdGlv bjsKQEAgLTg4NCw2ICs4OTEsNjQgQEAgSW5jcmVtZW50VmFyU3VibGV2ZWxzVXBfcnRhYmxlKExp c3QgKnJ0YWJsZSwgaW50IGRlbHRhX3N1YmxldmVsc191cCwKIAkJCQkJICAgUVRXX0VYQU1JTkVf UlRFU19CRUZPUkUpOwogfQogCisvKgorICogU2V0VmFyTnVsbGluZ3JlbHMgLSBhZGp1c3QgVmFy IG5vZGVzIGZvciBhIHNwZWNpZmllZCB2YXJudWxsaW5ncmVscy4KKyAqCisgKiBGaW5kIGFsbCBW YXIgbm9kZXMgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpZWQgdmFybm8gaW4gdGhlIGdpdmVuCisg KiBleHByZXNzaW9uIGFuZCBzZXQgdGhlaXIgdmFybnVsbGluZ3JlbHMgdG8gdGhlIHNwZWNpZmll ZCB2YWx1ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQlzdWJsZXZlbHNfdXA7CisJ aW50CQkJdmFybm87CisJQml0bWFwc2V0ICp2YXJudWxsaW5ncmVsczsKK30gU2V0VmFyTnVsbGlu Z3JlbHNfY29udGV4dDsKKworc3RhdGljIGJvb2wKK1NldFZhck51bGxpbmdyZWxzX3dhbGtlcihO b2RlICpub2RlLAorCQkJCQkJIFNldFZhck51bGxpbmdyZWxzX2NvbnRleHQgKmNvbnRleHQpCit7 CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShub2RlLCBW YXIpKQorCXsKKwkJVmFyCQkgICAqdmFyID0gKFZhciAqKSBub2RlOworCisJCWlmICh2YXItPnZh cmxldmVsc3VwID09IGNvbnRleHQtPnN1YmxldmVsc191cCAmJgorCQkJdmFyLT52YXJubyA9PSBj b250ZXh0LT52YXJubykKKwkJCXZhci0+dmFybnVsbGluZ3JlbHMgPSBibXNfdW5pb24oY29udGV4 dC0+dmFybnVsbGluZ3JlbHMsCisJCQkJCQkJCQkJCXZhci0+dmFybnVsbGluZ3JlbHMpOworCisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoSXNBKG5vZGUsIFF1ZXJ5KSkKKwl7CisJCS8qIFJl Y3Vyc2UgaW50byBzdWJzZWxlY3RzICovCisJCWJvb2wJCXJlc3VsdDsKKworCQljb250ZXh0LT5z dWJsZXZlbHNfdXArKzsKKwkJcmVzdWx0ID0gcXVlcnlfdHJlZV93YWxrZXIoKFF1ZXJ5ICopIG5v ZGUsIFNldFZhck51bGxpbmdyZWxzX3dhbGtlciwKKwkJCQkJCQkJICAgY29udGV4dCwgMCk7CisJ CWNvbnRleHQtPnN1YmxldmVsc191cC0tOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXR1cm4g ZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBTZXRWYXJOdWxsaW5ncmVsc193YWxrZXIsIGNv bnRleHQpOworfQordm9pZAorU2V0VmFyTnVsbGluZ3JlbHMoTm9kZSAqbm9kZSwgaW50IHN1Ymxl dmVsc191cCwgaW50IHZhcm5vLCBCaXRtYXBzZXQgKnZhcm51bGxpbmdyZWxzKQoreworCVNldFZh ck51bGxpbmdyZWxzX2NvbnRleHQgY29udGV4dDsKKworCWNvbnRleHQuc3VibGV2ZWxzX3VwID0g c3VibGV2ZWxzX3VwOworCWNvbnRleHQudmFybm8gPSB2YXJubzsKKwljb250ZXh0LnZhcm51bGxp bmdyZWxzID0gdmFybnVsbGluZ3JlbHM7CisKKwkvKiBFeHBlY3QgdG8gc3RhcnQgd2l0aCBhbiBl eHByZXNzaW9uICovCisJU2V0VmFyTnVsbGluZ3JlbHNfd2Fsa2VyKG5vZGUsICZjb250ZXh0KTsK K30KKwogLyoKICAqIFNldFZhclJldHVybmluZ1R5cGUgLSBhZGp1c3QgVmFyIG5vZGVzIGZvciBh IHNwZWNpZmllZCB2YXJyZXR1cm5pbmd0eXBlLgogICoKQEAgLTExOTksNiArMTI2NCw1NyBAQCBB ZGRJbnZlcnRlZFF1YWwoUXVlcnkgKnBhcnNldHJlZSwgTm9kZSAqcXVhbCkKIH0KIAogCitzdGF0 aWMgYm9vbAorYXR0bm9fY29udGFpbl92YXJudWxsaW5ncmVsX3dhbGtlcihOb2RlICpub2RlLAor CQkJCQkJCQkgICBhdHRub192YXJudWxsaW5ncmVsX2NvbnRleHQgKmNvbnRleHQpCit7CisJaWYg KG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChJc0Eobm9kZSwgVmFyKSkKKwl7 CisJCVZhcgkJICAgKnZhciA9IChWYXIgKikgbm9kZTsKKworCQlpZiAodmFyLT52YXJubyA9PSBj b250ZXh0LT52YXJubworCQkJJiYgdmFyLT52YXJhdHRubyA9PSBjb250ZXh0LT52YXJhdHRubwor CQkJJiYgdmFyLT52YXJsZXZlbHN1cCA9PSBjb250ZXh0LT5zdWJsZXZlbHNfdXApCisJCXsKKwkJ CWlmICh2YXItPnZhcm51bGxpbmdyZWxzICE9IE5VTEwpCisJCQkJcmV0dXJuIHRydWU7CisJCX0K KwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoSXNBKG5vZGUsIFF1ZXJ5KSkKKwl7CisJCS8qIFJl Y3Vyc2UgaW50byBzdWJzZWxlY3RzICovCisJCWJvb2wJCXJlc3VsdDsKKworCQljb250ZXh0LT5z dWJsZXZlbHNfdXArKzsKKwkJcmVzdWx0ID0gcXVlcnlfdHJlZV93YWxrZXIoKFF1ZXJ5ICopIG5v ZGUsCisJCQkJCQkJCSAgIGF0dG5vX2NvbnRhaW5fdmFybnVsbGluZ3JlbF93YWxrZXIsCisJCQkJ CQkJCSAgIGNvbnRleHQsIDApOworCQljb250ZXh0LT5zdWJsZXZlbHNfdXAtLTsKKworCQlyZXR1 cm4gcmVzdWx0OworCX0KKwlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBhdHRu b19jb250YWluX3Zhcm51bGxpbmdyZWxfd2Fsa2VyLAorCQkJCQkJCQkgIGNvbnRleHQpOworfQor Citib29sCithdHRub19jb250YWluX3Zhcm51bGxpbmdyZWwoTm9kZSAqbm9kZSwgaW50IHZhcm5v LCBpbnQgdmFyYXR0bm8pCit7CisJYXR0bm9fdmFybnVsbGluZ3JlbF9jb250ZXh0IGNvbnRleHQ7 CisKKwljb250ZXh0LnZhcm5vID0gdmFybm87CisJY29udGV4dC5zdWJsZXZlbHNfdXAgPSAwOwor CWNvbnRleHQudmFyYXR0bm8gPSB2YXJhdHRubzsKKworCXJldHVybiBxdWVyeV9vcl9leHByZXNz aW9uX3RyZWVfd2Fsa2VyKG5vZGUsCisJCQkJCQkJCQkJICAgYXR0bm9fY29udGFpbl92YXJudWxs aW5ncmVsX3dhbGtlciwKKwkJCQkJCQkJCQkgICAmY29udGV4dCwKKwkJCQkJCQkJCQkgICAwKTsK K30KKwogLyoKICAqIGFkZF9udWxsaW5nX3JlbGlkcygpIGZpbmRzIFZhcnMgYW5kIFBsYWNlSG9s ZGVyVmFycyB0aGF0IGJlbG9uZyB0byBhbnkKICAqIG9mIHRoZSB0YXJnZXRfcmVsaWRzLCBhbmQg YWRkcyBhZGRlZF9yZWxpZHMgdG8gdGhlaXIgdmFybnVsbGluZ3JlbHMKQEAgLTE4MzIsNiArMTk0 OCwxMCBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqdmFyLAogCQlp ZiAodmFyLT52YXJsZXZlbHN1cCA+IDApCiAJCQlJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcCgoTm9k ZSAqKSBuZXdub2RlLCB2YXItPnZhcmxldmVsc3VwLCAwKTsKIAorCQlpZiAodmFyLT52YXJudWxs aW5ncmVscyAhPSBOVUxMKQorCQkJU2V0VmFyTnVsbGluZ3JlbHMoKE5vZGUgKikgbmV3bm9kZSwg dmFyLT52YXJsZXZlbHN1cCwKKwkJCQkJCQkgIHZhci0+dmFybm8sCisJCQkJCQkJICB2YXItPnZh cm51bGxpbmdyZWxzKTsKIAkJLyoKIAkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB0bGlzdCBpdGVt IGNvbnRhaW5zIGEgUEFSQU1fTVVMVElFWFBSIFBhcmFtLAogCQkgKiBhbmQgdGhyb3cgZXJyb3Ig aWYgc28uICBUaGlzIGNhc2UgY291bGQgb25seSBoYXBwZW4gd2hlbiBleHBhbmRpbmcKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcHJlcC5oCmluZGV4IDBhZTU3ZWMyNGE0Li5lNjNhZjFmMmE4NSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJl cC5oCkBAIC0zMyw2ICszMyw3IEBAIGV4dGVybiBSZWxpZHMgZ2V0X3JlbGlkc19pbl9qb2ludHJl ZShOb2RlICpqdG5vZGUsIGJvb2wgaW5jbHVkZV9vdXRlcl9qb2lucywKIAkJCQkJCQkJCSBib29s IGluY2x1ZGVfaW5uZXJfam9pbnMpOwogZXh0ZXJuIFJlbGlkcyBnZXRfcmVsaWRzX2Zvcl9qb2lu KFF1ZXJ5ICpxdWVyeSwgaW50IGpvaW5yZWxpZCk7CiAKK2V4dGVybiBOb2RlICpwcmVwcm9jZXNz X251bGxhYmxlX2dlbmVyYXRlZF9jb2xzKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlKTsK IC8qCiAgKiBwcm90b3R5cGVzIGZvciBwcmVwdGxpc3QuYwogICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmggYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jl d3JpdGVIYW5kbGVyLmgKaW5kZXggODhmZTEzYzVmNGYuLmRmZjU3NDZjMGQ2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oCkBAIC0zOSw1ICszOSw2IEBAIGV4dGVybiB2b2lkIGVy cm9yX3ZpZXdfbm90X3VwZGF0YWJsZShSZWxhdGlvbiB2aWV3LAogCQkJCQkJCQkJIGNvbnN0IGNo YXIgKmRldGFpbCk7CiAKIGV4dGVybiBOb2RlICpleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW5f ZXhwcihOb2RlICpub2RlLCBSZWxhdGlvbiByZWwsIGludCBydF9pbmRleCk7CitleHRlcm4gTm9k ZSAqZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zKE5vZGUgKm5vZGUpOwogCiAjZW5kaWYJCQkJCQkJ LyogUkVXUklURUhBTkRMRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9y ZXdyaXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKaW5kZXgg NTEyODIzMDMzYjkuLmMxNmQxODM0NWFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXdyaXRl L3Jld3JpdGVNYW5pcC5oCisrKyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgK QEAgLTQ4LDYgKzQ4LDkgQEAgZXh0ZXJuIHZvaWQgQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwg aW50IHJ0X2luZGV4LCBpbnQgbmV3X2luZGV4LAogCQkJCQkJICAgaW50IHN1YmxldmVsc191cCk7 CiBleHRlcm4gdm9pZCBJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcChOb2RlICpub2RlLCBpbnQgZGVs dGFfc3VibGV2ZWxzX3VwLAogCQkJCQkJCQkJaW50IG1pbl9zdWJsZXZlbHNfdXApOworZXh0ZXJu IHZvaWQgU2V0VmFyTnVsbGluZ3JlbHMoTm9kZSAqbm9kZSwgaW50IHN1YmxldmVsc191cCwKKwkJ CQkJCQkgIGludCB2YXJubywKKwkJCQkJCQkgIEJpdG1hcHNldCAqdmFybnVsbGluZ3JlbHMpOwog ZXh0ZXJuIHZvaWQgSW5jcmVtZW50VmFyU3VibGV2ZWxzVXBfcnRhYmxlKExpc3QgKnJ0YWJsZSwK IAkJCQkJCQkJCQkgICBpbnQgZGVsdGFfc3VibGV2ZWxzX3VwLCBpbnQgbWluX3N1YmxldmVsc191 cCk7CiAKQEAgLTYwLDYgKzYzLDcgQEAgZXh0ZXJuIHZvaWQgQWRkUXVhbChRdWVyeSAqcGFyc2V0 cmVlLCBOb2RlICpxdWFsKTsKIGV4dGVybiB2b2lkIEFkZEludmVydGVkUXVhbChRdWVyeSAqcGFy c2V0cmVlLCBOb2RlICpxdWFsKTsKIAogZXh0ZXJuIGJvb2wgY29udGFpbl9hZ2dzX29mX2xldmVs KE5vZGUgKm5vZGUsIGludCBsZXZlbHN1cCk7CitleHRlcm4gYm9vbCBhdHRub19jb250YWluX3Zh cm51bGxpbmdyZWwoTm9kZSAqbm9kZSwgaW50IHZhcm5vLCBpbnQgdmFyYXR0bm8pOwogZXh0ZXJu IGludAlsb2NhdGVfYWdnX29mX2xldmVsKE5vZGUgKm5vZGUsIGludCBsZXZlbHN1cCk7CiBleHRl cm4gYm9vbCBjb250YWluX3dpbmRvd2Z1bmNzKE5vZGUgKm5vZGUpOwogZXh0ZXJuIGludAlsb2Nh dGVfd2luZG93ZnVuYyhOb2RlICpub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKaW5kZXggMzU2Mzg4MTJiZTkuLmJhYmYxNmRiOGJhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dApA QCAtMTksNiArMTksMTQgQEAgU0VMRUNUIHRhYmxlX25hbWUsIGNvbHVtbl9uYW1lLCBkZXBlbmRl bnRfY29sdW1uIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbl8KICBndGVzdDEgICAgIHwg YSAgICAgICAgICAgfCBiCiAoMSByb3cpCiAKKy0tbGVmdCBqb2luIGdlbmVyYXRlZCBleHByZXNz aW9uIGV4cGFuZHNpb24gdmFybnVsbGluZyBmaWVsZCBpcyBzYW5lCitpbnNlcnQgaW50byBndGVz dDAgdmFsdWVzKDEpOworc2VsZWN0IHQyLmIgaXMgbnVsbCBhcyB0cnVlIGZyb20gZ3Rlc3QwIHQx IGxlZnQgam9pbiBndGVzdDAgdDIgb24gZmFsc2U7CisgdHJ1ZSAKKy0tLS0tLQorIHQKKygxIHJv dykKKwogXGQgZ3Rlc3QxCiAgICAgICAgICAgICAgICAgVGFibGUgImdlbmVyYXRlZF92aXJ0dWFs X3Rlc3RzLmd0ZXN0MSIKICBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUg fCAgICAgICAgICAgRGVmYXVsdCAgICAgICAgICAgCkBAIC0xNjYsNiArMTc0LDEyIEBAIFNFTEVD VCBhLCBiIEZST00gZ3Rlc3QxIFdIRVJFIGIgPSA0IE9SREVSIEJZIGE7CiAgMiB8IDQKICgxIHJv dykKIAorU0VMRUNUIHQyLmIgaXMgbnVsbCBhcyB0cnVlIEZST00gZ3Rlc3QxIHQxIExFRlQgSk9J TiBndGVzdDEgdDIgT04gZmFsc2UgV0hFUkUgdDEuYiA9IDQ7CisgdHJ1ZSAKKy0tLS0tLQorIHQK KygxIHJvdykKKwogLS0gdGVzdCB0aGF0IG92ZXJmbG93IGVycm9yIGhhcHBlbnMgb24gcmVhZAog SU5TRVJUIElOVE8gZ3Rlc3QxIFZBTFVFUyAoMjAwMDAwMDAwMCk7CiBTRUxFQ1QgKiBGUk9NIGd0 ZXN0MTsKQEAgLTE4MSw2ICsxOTUsNTEgQEAgU0VMRUNUICogRlJPTSBndGVzdHgsIGd0ZXN0MSBX SEVSRSBndGVzdHgueSA9IGd0ZXN0MS5hOwogIDIyIHwgMiB8IDIgfCA0CiAoMiByb3dzKQogCist LWJ1ZzogaHR0cHM6Ly9wb3N0Z3IuZXMvbS83NWViMWE2Zi1kNTlmLTQyZTYtOGE3OC0xMjRlZTgw OGNkYTdAZ21haWwuY29tCitTRUxFQ1QgU1VNKHQuYikgT1ZFUiAoUEFSVElUSU9OIEJZIHQuYSkg RlJPTSBndGVzdHggQVMgdDEgTEVGVCBKT0lOIGd0ZXN0MSBUIE9OIHRydWU7Cisgc3VtIAorLS0t LS0KKyAgIDYKKyAgIDYKKyAgIDYKKyAgMTIKKyAgMTIKKyAgMTIKKyg2IHJvd3MpCisKKy0tdGhp cyBxdWVyeSByZXN1bHQgc2hvdWxkIGJlIHNhbWUgYXMgYXMgdGhlIGFib3ZlCitTRUxFQ1QgU1VN KChzZWxlY3QgdC5iIGZyb20gKChzZWxlY3QgdC5iIGZyb20gZ3Rlc3QxIGFzIHQgb3JkZXIgYnkg dC5iIGxpbWl0IDEpKSkpIE9WRVIgKFBBUlRJVElPTiBCWSB0LmEpCitGUk9NIGd0ZXN0eCBBUyB0 MSBsZWZ0IEpPSU4gZ3Rlc3QxIFQgT04gdHJ1ZTsKKyBzdW0gCistLS0tLQorICAgNgorICAgNgor ICAgNgorICAxMgorICAxMgorICAxMgorKDYgcm93cykKKworU0VMRUNUIFNVTSgoc2VsZWN0IHQu YiBmcm9tIGd0ZXN0MSBhcyB0IG9yZGVyIGJ5IHQuYiBsaW1pdCAxKSkgT1ZFUiAoUEFSVElUSU9O IEJZIHQuYSkKK0ZST00gZ3Rlc3R4IEFTIHQxIGxlZnQgSk9JTiBndGVzdDEgVCBPTiB0cnVlOwor IHN1bSAKKy0tLS0tCisgICA2CisgICA2CisgICA2CisgICA2CisgICA2CisgICA2CisoNiByb3dz KQorCitTRUxFQ1QgdC54IEZST00gZ3Rlc3R4IHQgTEVGVCBKT0lOIGd0ZXN0MSB2dCBvbiB0Lngg PSB2dC5hIFdIRVJFIGNvYWxlc2NlKHZ0LmIsIDEpID0gMSBPUiB0LnggSVMgTlVMTDsKKyB4ICAK Ky0tLS0KKyAxMQorIDIyCisgMzMKKygzIHJvd3MpCisKIERST1AgVEFCTEUgZ3Rlc3R4OwogLS0g dGVzdCBVUERBVEUvREVMRVRFIHF1YWxzCiBTRUxFQ1QgKiBGUk9NIGd0ZXN0MSBPUkRFUiBCWSBh OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4IDM0ODcw ODEzOTEwLi5hYWY1NjYxZWEzZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2Vu ZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92 aXJ0dWFsLnNxbApAQCAtMTIsNiArMTIsMTAgQEAgU0VMRUNUIHRhYmxlX25hbWUsIGNvbHVtbl9u YW1lLCBjb2x1bW5fZGVmYXVsdCwgaXNfbnVsbGFibGUsIGlzX2dlbmVyYXRlZCwgZ2VuZXIKIAog U0VMRUNUIHRhYmxlX25hbWUsIGNvbHVtbl9uYW1lLCBkZXBlbmRlbnRfY29sdW1uIEZST00gaW5m b3JtYXRpb25fc2NoZW1hLmNvbHVtbl9jb2x1bW5fdXNhZ2UgV0hFUkUgdGFibGVfc2NoZW1hID0g J2dlbmVyYXRlZF92aXJ0dWFsX3Rlc3RzJyBPUkRFUiBCWSAxLCAyLCAzOwogCistLWxlZnQgam9p biBnZW5lcmF0ZWQgZXhwcmVzc2lvbiBleHBhbmRzaW9uIHZhcm51bGxpbmcgZmllbGQgaXMgc2Fu ZQoraW5zZXJ0IGludG8gZ3Rlc3QwIHZhbHVlcygxKTsKK3NlbGVjdCB0Mi5iIGlzIG51bGwgYXMg dHJ1ZSBmcm9tIGd0ZXN0MCB0MSBsZWZ0IGpvaW4gZ3Rlc3QwIHQyIG9uIGZhbHNlOworCiBcZCBn dGVzdDEKIAogLS0gZHVwbGljYXRlIGdlbmVyYXRlZApAQCAtNzEsNiArNzUsOCBAQCBTRUxFQ1Qg KiBGUk9NIGd0ZXN0MSBPUkRFUiBCWSBhOwogU0VMRUNUIGEsIGIsIGIgKiAyIEFTIGIyIEZST00g Z3Rlc3QxIE9SREVSIEJZIGE7CiBTRUxFQ1QgYSwgYiBGUk9NIGd0ZXN0MSBXSEVSRSBiID0gNCBP UkRFUiBCWSBhOwogCitTRUxFQ1QgdDIuYiBpcyBudWxsIGFzIHRydWUgRlJPTSBndGVzdDEgdDEg TEVGVCBKT0lOIGd0ZXN0MSB0MiBPTiBmYWxzZSBXSEVSRSB0MS5iID0gNDsKKwogLS0gdGVzdCB0 aGF0IG92ZXJmbG93IGVycm9yIGhhcHBlbnMgb24gcmVhZAogSU5TRVJUIElOVE8gZ3Rlc3QxIFZB TFVFUyAoMjAwMDAwMDAwMCk7CiBTRUxFQ1QgKiBGUk9NIGd0ZXN0MTsKQEAgLTgwLDYgKzg2LDE3 IEBAIERFTEVURSBGUk9NIGd0ZXN0MSBXSEVSRSBhID0gMjAwMDAwMDAwMDsKIENSRUFURSBUQUJM RSBndGVzdHggKHggaW50LCB5IGludCk7CiBJTlNFUlQgSU5UTyBndGVzdHggVkFMVUVTICgxMSwg MSksICgyMiwgMiksICgzMywgMyk7CiBTRUxFQ1QgKiBGUk9NIGd0ZXN0eCwgZ3Rlc3QxIFdIRVJF IGd0ZXN0eC55ID0gZ3Rlc3QxLmE7CistLWJ1ZzogaHR0cHM6Ly9wb3N0Z3IuZXMvbS83NWViMWE2 Zi1kNTlmLTQyZTYtOGE3OC0xMjRlZTgwOGNkYTdAZ21haWwuY29tCitTRUxFQ1QgU1VNKHQuYikg T1ZFUiAoUEFSVElUSU9OIEJZIHQuYSkgRlJPTSBndGVzdHggQVMgdDEgTEVGVCBKT0lOIGd0ZXN0 MSBUIE9OIHRydWU7CistLXRoaXMgcXVlcnkgcmVzdWx0IHNob3VsZCBiZSBzYW1lIGFzIGFzIHRo ZSBhYm92ZQorU0VMRUNUIFNVTSgoc2VsZWN0IHQuYiBmcm9tICgoc2VsZWN0IHQuYiBmcm9tIGd0 ZXN0MSBhcyB0IG9yZGVyIGJ5IHQuYiBsaW1pdCAxKSkpKSBPVkVSIChQQVJUSVRJT04gQlkgdC5h KQorRlJPTSBndGVzdHggQVMgdDEgbGVmdCBKT0lOIGd0ZXN0MSBUIE9OIHRydWU7CisKK1NFTEVD VCBTVU0oKHNlbGVjdCB0LmIgZnJvbSBndGVzdDEgYXMgdCBvcmRlciBieSB0LmIgbGltaXQgMSkp IE9WRVIgKFBBUlRJVElPTiBCWSB0LmEpCitGUk9NIGd0ZXN0eCBBUyB0MSBsZWZ0IEpPSU4gZ3Rl c3QxIFQgT04gdHJ1ZTsKKworU0VMRUNUIHQueCBGUk9NIGd0ZXN0eCB0IExFRlQgSk9JTiBndGVz dDEgdnQgb24gdC54ID0gdnQuYSBXSEVSRSBjb2FsZXNjZSh2dC5iLCAxKSA9IDEgT1IgdC54IElT IE5VTEw7CisKIERST1AgVEFCTEUgZ3Rlc3R4OwogCiAtLSB0ZXN0IFVQREFURS9ERUxFVEUgcXVh bHMKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYjZjMTcwYWMyNDkuLjZjYjM5YWM3NmM1 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjYzMyw2ICsyNjMzLDcgQEAgU2V0T3Bl cmF0aW9uCiBTZXRPcGVyYXRpb25TdG10CiBTZXRRdWFudGlmaWVyCiBTZXRUb0RlZmF1bHQKK1Nl dFZhck51bGxpbmdyZWxzX2NvbnRleHQKIFNldFZhclJldHVybmluZ1R5cGVfY29udGV4dAogU2V0 dXBXb3JrZXJQdHJUeXBlCiBTaERlcGVuZE9iamVjdEluZm8KLS0gCjIuMzQuMQoK --000000000000f08f40062e50ea52--