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 1tVEu2-006ft9-ST for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Jan 2025 19:06:11 +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 1tVEt3-006gvw-Aa for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Jan 2025 19:05:08 +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 1tVEt2-006gvk-JE for pgsql-hackers@lists.postgresql.org; Tue, 07 Jan 2025 19:05:08 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tVEsw-000NPo-0D for pgsql-hackers@postgresql.org; Tue, 07 Jan 2025 19:05:07 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4362bae4d7dso114278285e9.1 for ; Tue, 07 Jan 2025 11:05:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736276700; x=1736881500; 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=Ys1GLDsZzBxPbfqDVei5i1kSU6Imvx6PopQ6yLlQxXk=; b=dJHd4/x07CZZHbhS0GD+QLwpWYN8a2i+L4Uin7l8v0vAflIg/0Jm50vzKtueuPESd5 1xALiB1DMtPjBrPrZRI1QIsPJzlLSoqFnnUZ04KrUQNg482iDEd6EVbtOo+arpxwE4Iq EFnlJMqZY0qLN4xW/Oa2vFot8aukxImNPoCXiXUE85woQlvr3jmgOQZqqske2CONbNcG wtSEhFpPk62fKou+hLFoUCu2Q3TxEilu4jsaE2d0mfuEUzjzcNTK8KIju2NKiCxtrxnB hw7eUIr/0/+yCvtZl7gAXhu9JKe8hR/KeA82X8WdndR8hCCID8/lpMBRFKlR3w+J4Z4o uRug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736276700; x=1736881500; 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=Ys1GLDsZzBxPbfqDVei5i1kSU6Imvx6PopQ6yLlQxXk=; b=qP8jmVVIn9mj6hLU+89BLogZHV3boxXqsKKZV9lcrBDeU4GT/KLD9u5TA9q15u/Ii/ JH8yBn7G/Pf/6t8umxCU3Se/djNTPwI4j6fpS0lL9RiYcztGZy3bZtgkBMJJbVGtv8Jk M2t1pno4zp+g1Y56NHDJGxFcVX3WZZonxqPPxolppKWH0FPQnbwbJemMOFixiOSbMqDS rqs0lhn/EQCoS9GrabyrpKXA7eL2hJtFlz/gYnjaHZaI/yltTSsgYYqAxSTbMWw9ZX0L 5xxXR4v1mR1Sbo9XF57SmBqCwsxqI50N10DCz5f3Lfz2MISC6+P9CaY2xzY0/t/5GPI4 3ASg== X-Forwarded-Encrypted: i=1; AJvYcCWQqjCojUyjJ4gwS4u9IItfOpWBOgCEKwTyfotqC2Fo33wLWT/qBPA7preCGUSXEB0knddJZJkQuhqkstFu@postgresql.org X-Gm-Message-State: AOJu0Yx8iQBPj8b9BYWjPiPFZGEy/Vb5f7INY9k6HBikvvQ3zPVBSAWx ADLCqSrsNbJGmQ9SaHThxJfvIuQy4lqjjPfSh2CqTkSGunlKGteaAAGoUtdgBAD+Hp28QMAWadr MpcK5+uhGcRd/QmT0Sgw0ek3eTMc= X-Gm-Gg: ASbGncuN3CPivxs0Qvz6DgL+0S9lQOhoqgsdiIg9QvmF8gxQA3WQxNkklAnSKycxHXC 9jAVPfvY6FPcKsK2Gq6+2ogWvX/F1kB33NcbhzaII X-Google-Smtp-Source: AGHT+IGyBOqi+v55+KkFjSIYj57wW1am4h0PraPPAHt6v5Al78o8SlLzSPcegh2L4I6KL762Hvg2C7UO+1zGv/9P7bw= X-Received: by 2002:a05:600c:1c87:b0:434:ffe3:bc7d with SMTP id 5b1f17b1804b1-4366864646fmr551029365e9.16.1736276699392; Tue, 07 Jan 2025 11:04:59 -0800 (PST) MIME-Version: 1.0 References: <740696.1718036463@sss.pgh.pa.us> In-Reply-To: From: Mahendra Singh Thalor Date: Wed, 8 Jan 2025 00:34:47 +0530 X-Gm-Features: AbW1kvbjppGOtdt6A_Kt-6nyorv1fLvDgaebvk6Hps4ro7pMBJfLRtroZoNj3HM Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Nathan Bossart Cc: Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000e6deb2062b226b36" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e6deb2062b226b36 Content-Type: multipart/alternative; boundary="000000000000e6deb1062b226b34" --000000000000e6deb1062b226b34 Content-Type: text/plain; charset="UTF-8" On Mon, 6 Jan 2025 at 23:05, Nathan Bossart wrote: > > On Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Thalor wrote: > > Here, I am attaching an updated patch. I fixed some bugs of v01 patch and > > did some code cleanup also. > > Thank you for picking this up! I started to review it, but the > documentation changes didn't build, and a few tests in check-world are > failing. Would you mind resolving those issues? Also, if you haven't > already, please add an entry to the next commitfest [0] to ensure that 1) > this feature is tracked and 2) the automated tests will run. Thanks Nathan for the quick response. I fixed bugs of documentation changes and check-world in the latest patch. Now docs are building and check-world is passing. I added entry into commitfest for this patch.[0] > > + if (dbfile) > + { > + printfPQExpBuffer(&cmd, "\"%s\" %s %s", pg_dump_bin, > + dbfile, create_opts); > + appendPQExpBufferStr(&cmd, " -F d "); > + } > > Have you given any thought to allowing a directory of custom format files, > as discussed upthread [1]? Perhaps that is better handled as a follow-up > patch, but it'd be good to understand the plan, anyway. I will make these changes and will test. I will update my findings after doing some testing. Apart from these bugs, I added code to handle --exclude-database= PATTERN. Earlier I was using NAME only to skip databases for restore. *TODO: .pl test cases for new added options.* Here, I am attaching an updated patch for review and feedback. > > [0] https://commitfest.postgresql.org > [1] https://postgr.es/m/CABUevExoQ26jo%2BaQ9QZq%2BUMA1aD6gfpm9xBnh_t5e0DhaCeRYA%40mail.gmail.com > > -- > nathan -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000e6deb1062b226b34 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, 6 Jan 2025 at 23:05, Nathan Bossart <nathandbossart@gmail.com> wrote:>
> On Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Tha= lor wrote:
> > Here, I am attaching an updated patch. I fixed some= bugs of v01 patch and
> > did some code cleanup also.
>
= > Thank you for picking this up!=C2=A0 I started to review it, but the> documentation changes didn't build, and a few tests in check-wor= ld are
> failing.=C2=A0 Would you mind resolving those issues?=C2=A0 = Also, if you haven't
> already, please add an entry to the next c= ommitfest [0] to ensure that 1)
> this feature is tracked and 2) the = automated tests will run.

Thanks Nathan for the quick response.
<= br>I fixed bugs of documentation changes and check-world in the latest patc= h. Now docs are building and check-world is passing.

I added entry i= nto commitfest for this patch.[0]

>
> + =C2=A0 =C2=A0 =C2=A0 if (dbfile)> + =C2=A0 =C2=A0 =C2=A0 {
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 printfPQExpBuffer(&cmd, "\"%s\" %s %s&quo= t;, pg_dump_bin,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dbfile, create_opts);
>= + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 appendPQExpBufferStr(&a= mp;cmd, " -F d ");
> + =C2=A0 =C2=A0 =C2=A0 }
>
&g= t; Have you given any thought to allowing a directory of custom format file= s,
> as discussed upthread [1]?=C2=A0 Perhaps that is better handled = as a follow-up
> patch, but it'd be good to understand the plan, = anyway.

I will make these changes and will test. I will = update my findings after doing some testing.

Apart= from these bugs, I added code to handle --exclude-database=3D PATTERN. Ear= lier=C2=A0I was using NAME only to skip databases for restore.
TODO: .pl test cases for new added options.
<= br>
Here, I am attaching an updated patch for review and feedback= .

--000000000000e6deb1062b226b34-- --000000000000e6deb2062b226b36 Content-Type: application/octet-stream; name="v03-pg_dumpall-with-directory-format-and-restore-08_jan.patch" Content-Disposition: attachment; filename="v03-pg_dumpall-with-directory-format-and-restore-08_jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5mua5tu0 RnJvbSA5ZTg1NGY5MzE5N2MyMzBiODIwNDdkZmQ4MDJjMWI2NGNiM2QyOTAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCA4IEphbiAyMDI1IDAwOjE1OjU0ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeSBmb3JtYXQgYW5kIHJlc3RvcmUgaXQgYnkgcGdf cmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1mb3JtYXQ9ZHxwfGRpcmVj dG9yeXxwbGFpbiBvdXRwdXQgZmlsZSBmb3JtYXQgKGRpcmVjdG9yeSwgcGxhaW4gdGV4dCAoZGVm YXVsdCkpCgpFeDogLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERp ck5hbWUKCmR1bXBzIGFyZSBhczoKZ2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBp biBzaW1wbGUgcGxhaW4gZm9ybWF0Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRy aWVzIGZvciBhbGwgZGF0YWJhc2VzIGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoK ICAgICAgc3ViZGlyICAgICBkYm9pZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJj aGl2ZSBmb3JtYXQKICAgICAgc3ViZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEg ZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCk5PVEU6CmlmIG5lZWRlZCwgcmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJk aXIKCkV4OiAuL3BnX3Jlc3RvcmUgLS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBE aXJOYW1lL2RhdGFiYXNlcy81CiAgIC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVz IGRiCiAgIC0tIHRvIGdldCBkYm9pZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpuZXcgb3B0aW9ucyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkg ICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhj bHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNo ZXMgcGF0dGVybgoKV2hlbiB3ZSBnaXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBv bmx5IHJlc3RvcmUgZ2xvYmFscywgbm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9y bWF0PWRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYW5kIHRoZXJlIGlzIG5vIHRvYy5kYXQgaW4gbWFp biBkaXJlY3RvcnksIHRoZW4gY2hlY2sKZm9yIGdsb2JhbC5kYXQgYW5kIG1hcC5kYXQgdG8gcmVz dG9yZSBhbGwgZGF0YWJhc2VzLiBJZiBib3RoIGZpbGVzIGFyZSBleGlzdHMgaW4gZGlyZWN0b3J5 LAp0aGVuIGZpcnN0IHJlc3RvcmUgYWxsIGdsb2JhbHMgZnJvbSBnbG9iYWwuZGF0IGFuZCB0aGVu IHJlc3RvcmUgYWxsIGRhdGFiYXNlcyBvbmUgYnkgb25lCmZyb20gbWFwLmRhdCBsaXN0LgoKVE9E TzogV2UgY2FuIGR1bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRo aXMgbmVlZHMgbW9yZSBzdHVkeS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bCB8ICAzNSArKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgfCAgMzAgKysKIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgIHwgMTUwICsrKystLQogc3JjL2Jpbi9wZ19k dW1wL3BnX3Jlc3RvcmUuYyAgICAgfCA3NjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogNCBmaWxlcyBjaGFuZ2VkLCA5NDUgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCAwMTRmMjc5MjU4Li41MWRlYWFlMGQxIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTI1LDYgKzEyNSw0MSBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCis8 dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3Jt YXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIElmIHdlIHdh bnQgdG8gZHVtcCBhbGwgdGhlIGRhdGFiYXNlcywKKyAgICAgICAgdGhlbiBwYXNzIHRoaXMgYXMg ZGlyZWN0b3J5IHNvIHRoYXQgZHVtcCBvZiBhbGwgZGF0YWJhc2VzIGNhbiBiZSB0YWtlbgorICAg ICAgICBpbiBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBmb3JtYXQuCisgICAgICAg IGJ5IGRlZmF1bHQsIHRoaXMgaXMgcGxhaW4uCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAg ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBUaGUg YXJjaGl2ZSBpcyBhIGRpcmVjdG9yeSBhcmNoaXZlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgVGhlIGFyY2hpdmUgaXMgYSBw bGFpbiBhcmNoaXZlLihieSBkZWZhdWx0IGFsc28pCisgICAgICAgICAgPC9wYXJhPgorICAgICAg ICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFi bGVsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWZp bHRlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZmlsZW5hbWU8L3JlcGxhY2VhYmxl Pjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNn bWwKaW5kZXggYjhiMjdlMTcxOS4uYWIyZTAzNTY3MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNn bWwKQEAgLTMxNSw2ICszMTUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5k IHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlz dGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAg ICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4 PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgpAQCAtOTMyLDYgKzk0MiwyNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9y ZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBh dHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1l dGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhl IHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRp b24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYg bGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRh YmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBj aGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVm dWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hl bGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+ CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisKICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgIDwvcGFy YT4KICA8L3JlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggMzk2Zjc5NzgxYy4uY2ViNGM5 MDhkOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx0aW1lLmg+ CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTI5LDYgKzMwLDcgQEAKICNpbmNsdWRlICJmaWx0 ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBnX2JhY2t1cC5oIgor I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBl eHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBn X2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC02NCw5ICs2NiwxMCBAQCBz dGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1 bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nvbm4g KmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7 CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgYm9vbCBkaXJlY3Rvcnlf Zm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0 YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMpOworc3RhdGljIGludCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBj aGFyICpjcmVhdGVfb3B0cywKKwkJCQkJIGNoYXIgKmRiZmlsZSk7CiBzdGF0aWMgdm9pZCBidWls ZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19u YW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNo YXIgKm9iam5hbWUsCkBAIC0xNDcsNiArMTUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJp dmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAn Rid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVx dWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTg4LDExICsxOTIsMTMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAg KnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNv bnN0IGNoYXIgKmZvcm1hdE5hbWUgPSBOVUxMOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9 IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNf b25seSA9IGZhbHNlOwogCWJvb2wJCXJvbGVzX29ubHkgPSBmYWxzZTsKIAlib29sCQl0YWJsZXNw YWNlc19vbmx5ID0gZmFsc2U7CisJYm9vbAkJZGlyZWN0b3J5X2Zvcm1hdCA9IGZhbHNlOwogCVBH Y29ubgkgICAqY29ubjsKIAlpbnQJCQllbmNvZGluZzsKIAljb25zdCBjaGFyICpzdGRfc3RyaW5n czsKQEAgLTIzNyw3ICsyNDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlw Z2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlv bnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGlu ZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI2NSw3ICsyNzEsOSBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdk dW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxl bmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUgPSBvcHRh cmc7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwog CQkJCWJyZWFrOwpAQCAtNDE0LDYgKzQyMiwyNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCWlmIChmb3JtYXROYW1lKQorCXsKKwkJc3dp dGNoIChmb3JtYXROYW1lWzBdKQorCQl7CisJCQljYXNlICdkJzoKKwkJCWNhc2UgJ0QnOgorCQkJ CWRpcmVjdG9yeV9mb3JtYXQgPSB0cnVlOworCQkJCWJyZWFrOworCisJCQljYXNlICdwJzoKKwkJ CWNhc2UgJ1AnOgorCQkJCS8qIERlZmF1bHQgcGxhaW4gZm9ybWF0LiAqLworCQkJCWJyZWFrOwor CisJCQlkZWZhdWx0OgorCQkJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgZHVtcCBmb3JtYXQgXCIl c1wiOyBwbGVhc2Ugc3BlY2lmeSBcImRcIiwgb3IgXCJwXCIgIiwKKwkJCQkJCWZvcm1hdE5hbWUp OworCQl9CisJfQorCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJl ZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1 YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5 Nyw5ICs1MjUsMzEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCQkJICAgJmRh dGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCiAJLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBp ZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmls ZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuCiAJICovCi0JaWYgKGZpbGVuYW1l KQorCWlmIChkaXJlY3RvcnlfZm9ybWF0KQorCXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhd OworCisJCS8qCisJCSAqIElmIGRpcmVjdG9yeSBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gd2Ug bXVzdCBwcm92aWRlIHRoZSBkaXJlY3RvcnkKKwkJICogbmFtZS4KKwkJICovCisJCWlmICghZmls ZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkKKwkJCXBnX2ZhdGFsKCJubyBvdXRw dXQgZGlyZWN0b3J5IHNwZWNpZmllZCIpOworCisJCS8qIFRPRE86IGFjY2VwdCB0aGUgZW1wdHkg ZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZmlsZW5hbWUsIDA3MDApIDwgMCkK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJ CQkJIGZpbGVuYW1lKTsKKworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xv YmFsLmRhdCIsIGZpbGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgInciKTsKKwkJ aWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiAl cyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJT1BG ID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKIAkJaWYgKCFPUEYpCkBAIC02MDcsNyAr NjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xvYmFs c19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJh c2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGRpcmVjdG9yeV9mb3JtYXQpOwogCiAJ UFFmaW5pc2goY29ubik7CiAKQEAgLTYyMCw3ICs2NzAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCWZjbG9zZShPUEYpOwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxl LCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5jICYm ICFkaXJlY3RvcnlfZm9ybWF0KQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxz ZSk7CiAJfQogCkBAIC02MzcsNiArNjg3LDcgQEAgaGVscCh2b2lkKQogCiAJcHJpbnRmKF8oIlxu R2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklMRU5BTUUg ICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIgIC1GLCAtLWZvcm1h dD1kfHAgICAgICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChkaXJlY3RvcnksIHBsYWluIHRl eHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAg ICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJ cHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRp bmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTM4LDEzIEBA IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBv ZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIGRpcmVjdG9yeV9mb3JtYXQpCiB7 CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFU SF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUgICAgICAgKm1hcF9maWxl OwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRhdGFsbG93Y29ubiwgc2lu Y2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTUwNCw3ICsxNTU4LDcgQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2Rl IHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAg IlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkg ICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQg ZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1w bGF0ZTEnKSwgZGF0bmFtZSIpOwpAQCAtMTUxMiw5ICsxNTY2LDMwIEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJCWZwcmludGYoT1BGLCAi LS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKKwkvKgorCSAqIElmIGRpcmVjdG9yeSBmb3Jt YXQgaXMgc3BlY2lmaWVkIHRoZW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZQorCSAq IG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSB3aWxsIGJlIGNyZWF0 ZWQgdW5kZXIgdGhlCisJICogc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2lu Z2xlIGRiIHBnX2R1bXAuCisJICovCisJaWYgKGRpcmVjdG9yeV9mb3JtYXQpCisJeworCQljaGFy ICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1B WFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKwkJaWYgKG1rZGlyKGRiX3N1YmRp ciwgMDc1NSkgIT0gMCkKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBzdWJkaXJl Y3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUg KHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgs IE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisJCW1hcF9maWxlID0gZm9wZW4o bWFwX2ZpbGVfcGF0aCwgInciKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwogCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0g UFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywg aSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7CiAKQEAgLTE1 MjIsNiArMTU5NywxNCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJaWYgKHN0cmNt cChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSA9PSAwKQogCQkJY29udGludWU7CiAKKwkJaWYgKGRpcmVj dG9yeV9mb3JtYXQpCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIi1m ICVzLyVzIiwgZGJfc3ViZGlyLCBvaWQpOworCisJCQkvKiBhcHBlbmQgZGJvaWQgYW5kIGRibmFt ZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBk Ym5hbWUpOworCQl9CisKIAkJLyogU2tpcCBhbnkgZXhwbGljaXRseSBleGNsdWRlZCBkYXRhYmFz ZSAqLwogCQlpZiAoc2ltcGxlX3N0cmluZ19saXN0X21lbWJlcigmZGF0YWJhc2VfZXhjbHVkZV9u YW1lcywgZGJuYW1lKSkKIAkJewpAQCAtMTUzMSw3ICsxNjE0LDggQEAgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCiAKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwg ZGJuYW1lKTsKIAotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxu LS1cblxuIiwgZGJuYW1lKTsKKwkJaWYgKCFkaXJlY3RvcnlfZm9ybWF0KQorCQkJZnByaW50ZihP UEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CiAKIAkJ LyoKIAkJICogV2UgYXNzdW1lIHRoYXQgInRlbXBsYXRlMSIgYW5kICJwb3N0Z3JlcyIgYWxyZWFk eSBleGlzdCBpbiB0aGUKQEAgLTE1NDksMjAgKzE2MzMsMjEgQEAgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pCiAJCQl7CiAJCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19k dW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50 ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoIWRpcmVjdG9yeV9m b3JtYXQpCisJCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CiAJ CQl9CiAJCX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlmIChm aWxlbmFtZSkKKwkJaWYgKCFkaXJlY3RvcnlfZm9ybWF0ICYmIGZpbGVuYW1lKQogCQkJZmNsb3Nl KE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQlyZXQg PSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGlyZWN0b3J5X2Zvcm1hdCA/IGRiZmls ZXBhdGggOiBOVUxMKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAgZmFp bGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZpbGVu YW1lKQorCQlpZiAoIWRpcmVjdG9yeV9mb3JtYXQgJiYgZmlsZW5hbWUpCiAJCXsKIAkJCU9QRiA9 IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE1NzEsNiAr MTY1NiwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8qIGNs b3NlIG1hcCBmaWxlICovCisJaWYgKGRpcmVjdG9yeV9mb3JtYXQpCisJCWZjbG9zZShtYXBfZmls ZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE1ODAsNyArMTY2OSw3IEBAIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNp ZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJu YW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5h bWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUpCiB7CiAJUFFFeHBCdWZm ZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE1ODksMTcgKzE2 NzgsMjYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIo JmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVt cF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCi0JLyoKLQkg KiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVu ZCBwZ19kdW1wCi0JICogZm9ybWF0LgotCSAqLwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGRiZmlsZSkKKwl7CisJCXByaW50ZlBR RXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJm aWxlLCBjcmVhdGVfb3B0cyk7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUYgZCAi KTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl7 CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwK KwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkqIElmIHdl IGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1 bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0 byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jCmluZGV4IDg4YWUzOWQ5MzguLjI3M2YyMDAyZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAt NDEsMjcgKzQxLDY5IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0 eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2lu Y2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIK KyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNp bmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJp bmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5o IgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgi CiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAq bmV4dDsKKwlPaWQgICAgICAgICBkYm9pZDsKKwljb25zdCBjaGFyICAqZGJuYW1lOworfSBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFzZU9p ZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsKKworc3RhdGlj IHZvaWQKK3NpbXBsZV9kYm9pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxp c3QsIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKKwogc3RhdGljIHZvaWQgdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29s IF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxl bmFtZSk7CitzdGF0aWMgYm9vbCByZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRG aWxlU3BlYywKKwkJUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRp YyBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNvbm5fc3RyaW5nLAorCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwg Y29uc3QgY2hhciAqcGd1c2VyLAorCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFp bF9vbl9lcnJvcik7CitzdGF0aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK3N0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJ bmZvIGluQnVmLCBGSUxFICpmX2dsbyk7CitzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwlTaW1wbGVTdHJpbmdMaXN0 IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vy cyk7CitzdGF0aWMgdm9pZCBleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCk7CitzdGF0aWMgaW50IGZpbHRlcl9kYm5hbWVzX2Zv cl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVf b2lkX2xpc3QsIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMg aW50IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0 aCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZv aWQgc2ltcGxlX2Rib2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwg T2lkIGRib2lkLAorCQljb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIGJvb2wgaXNfZnVsbF9w YXR0ZXJuKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwdHJuKTsK K3N0YXRpYyB2b2lkIHNpbXBsZV9zdHJpbmdfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAq bGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGwsIFNpbXBsZVN0cmluZ0xpc3RDZWxs ICpwcmV2KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYm9pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRh YmFzZU9pZExpc3QgKmxpc3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsIFNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnByZXYpOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJ ZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNo YXIJICAgKmlucHV0RmlsZVNwZWM7CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsK IAlzdGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwpAQCAtNzcsMTEgKzExOSwxNCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzdGF0aWMgaW50CXN0cmljdF9uYW1lcyA9 IDA7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxz ZTsKKwlTaW1wbGVTdHJpbmdMaXN0ICAgIGRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVM TH07CisJYm9vbAkJCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKIAogCXN0cnVjdCBvcHRpb24gY21k b3B0c1tdID0gewogCQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBO VUxMLCAnQyd9LAogCQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1v bmx5IiwgMCwgTlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4 aXQtb24tZXJyb3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVM TCwgJ04nfSwKQEAgLTEyOCw2ICsxNzMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJeyJuby1zZWN1cml0eS1sYWJlbHMiLCBub19hcmd1bWVudCwgJm5vX3NlY3VyaXR5X2xhYmVs cywgMX0sCiAJCXsibm8tc3Vic2NyaXB0aW9ucyIsIG5vX2FyZ3VtZW50LCAmbm9fc3Vic2NyaXB0 aW9ucywgMX0sCiAJCXsiZmlsdGVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7 ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJe05V TEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE1Niw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGls ZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYUFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpO Ok9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJ ewogCQlzd2l0Y2ggKGMpCkBAIC0xODMsMTEgKzIyOSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0 TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJ LyogcmVzdG9yZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWds b2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3Ry bGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAo b3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3Rv cmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMi LCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMwMiw2ICszNTEsMTQgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9l cnJvciA9IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRh YmFzZXMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJCQlzaW1wbGVf c3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCS8q CisJCQkJICogWFhYOiBUT0RPIGFzIG9mIG5vdywgY29uc2lkZXJpbmcgb25seSBkYiBuYW1lcyBi dXQgd2UgY2FuCisJCQkJICogaW1wbGVtZW50IGZvciBwYXR0ZXJucyBhbHNvLgorCQkJCSAqLwor CQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1p dHRlZCBhIGNvbXBsYWludCAqLwpAQCAtMzI5LDYgKzM4NiwxNiBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFt ZSAmJiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBh bmQgLWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0 ZXJucy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcv LS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJ fQorCisJaWYgKGdsb2JhbHNfb25seSAmJiBvcHRzLT5jcGFyYW1zLmRibmFtZSA9PSBOVUxMKQor CQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IHJlcXVpcmVzIG9wdGlvbiAtZC8t LWRibmFtZSIpOworCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVs c2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBA IC00MDYsNiArNDczLDY5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQog CisJLyoKKwkgKiBJZiBkaXJlY3RvcnkgZm9ybWF0LCB0aGVuIGZpcnN0IGNoZWNrIHRoYXQgdG9j LmRhdCBmaWxlIGV4aXN0IG9yIG5vdD8KKwkgKgorCSAqIGlmIHRvYy5kYXQgZXhpc3QsIHRoZW4g bm8gbmVlZCB0byBjaGVjayBmb3IgbWFwLmRhdCBhbmQgZ2xvYmFsLmRhdAorCSAqCisJICovCisJ aWYgKG9wdHMtPmZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5ICYmCisJCQlpbnB1dEZpbGVTcGVjICE9 IE5VTEwgJiYKKwkJCSFfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2Mu ZGF0IikpCisJeworCQkvKiBpZiBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IGFyZSBleGlzdCwgdGhl biBvcGVuIHRoZW0gKi8KKwkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGlu cHV0RmlsZVNwZWMpLCAiZ2xvYmFsLmRhdCIpCisJCQkJJiYgX2ZpbGVFeGlzdHNJbkRpcmVjdG9y eShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJtYXAuZGF0IikpCisJCXsKKwkJCS8qIEZvdW5k IHRoZSBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IGZpbGUgc28gcHJvY2Vzcy4gKi8KKwkJCVBHY29u bgkJCQkqY29ubiA9IE5VTEw7CisKKwkJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSA9PSBOVUxM KQorCQkJCXBnX2ZhdGFsKCIgLWQvLS1kYmFubWUgc2hvdWxkIGJlIGdpdmVuIGlmIHVzaW5nIGR1 bXAgb2YgZHVtcGFsbCBhbmQgZ2xvYmFsLmRhdCIpOworCisJCQlpZiAob3B0cy0+Y3JlYXRlREIg IT0gMSkKKwkJCQlwZ19mYXRhbCgib3B0aW9uIC1DLy0tY3JlYXRlIHNob3VsZCBiZSBzcGVjaWZp ZWQgaWYgdXNpbmcgZHVtcCBvZiBkdW1wYWxsIHdpdGggZ2xvYmFsLmRhdCIpOworCisJCQkvKiBD b25uZWN0IHRvIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGV4ZWN1dGUgZ2xvYmFsLmRhdCAqLwor CQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwKKwkJ CQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFy YW1zLnVzZXJuYW1lLAorCQkJCQlUUklfREVGQVVMVCwgZmFsc2UpOworCisJCQlpZiAoIWNvbm4p CisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9w dHMtPmNwYXJhbXMuZGJuYW1lKTsKKworCQkJLyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4 ZWN1dGUgYWxsIHRoZSBzcWwgY29tbWFuZHMgKi8KKwkJCWV4ZWN1dGVfZ2xvYmFsX3NxbF9jb21t YW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjKTsKKworCQkJLyogaWYgZ2xvYmFscy1vbmx5LCB0aGVu IHJldHVybiBmcm9tIGhlcmUgKi8KKwkJCWlmIChnbG9iYWxzX29ubHkpCisJCQl7CisJCQkJUFFm aW5pc2goY29ubik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCS8qIE5vdyByZXN0b3JlIGFs bCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCBmaWxlICovCisJCQlyZXR1cm4gcmVzdG9yZUFs bERhdGFiYXNlcyhjb25uLCBpbnB1dEZpbGVTcGVjLAorCQkJCQlkYl9leGNsdWRlX3BhdHRlcm5z LAorCQkJCQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfS8qIGVuZCBpZiAqLworCX0vKiBlbmQgaWYg Ki8KKworCXJldHVybiByZXN0b3JlT25lRGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVt V29ya2Vycyk7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisgKiBUaGlzIHdp bGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICovCitzdGF0aWMg Ym9vbAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycykKK3sKKwlBcmNoaXZlCQkqQUg7CisJ Ym9vbAkJZXhpdF9jb2RlOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRz LT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDcx LDYgKzYwMSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1j LCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMg YmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywgLS1jcmVhdGUgICAgICAg ICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAg LWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRv IGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAg ICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50 ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxu IikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMg bWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtTCwgLS11 c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmls ZSBmb3JcbiIKQEAgLTQ4Myw2ICs2MTQsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkK IAlwcmludGYoXygiICAtUywgLS1zdXBlcnVzZXI9TkFNRSAgICAgICAgIHN1cGVydXNlciB1c2Vy IG5hbWUgdG8gdXNlIGZvciBkaXNhYmxpbmcgdHJpZ2dlcnNcbiIpKTsKIAlwcmludGYoXygiICAt dCwgLS10YWJsZT1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgcmVsYXRpb24gKHRhYmxl LCB2aWV3LCBldGMuKVxuIikpOwogCXByaW50ZihfKCIgIC1ULCAtLXRyaWdnZXI9TkFNRSAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCB0cmlnZ2VyXG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRl LWRhdGFiYXNlPVBBVFRFUk4gICBleGNsdWRlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMg d2l0aCBwYXR0ZXJuXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXgsIC0tbm8tcHJpdmlsZWdlcyAgICAg ICAgICBza2lwIHJlc3RvcmF0aW9uIG9mIGFjY2VzcyBwcml2aWxlZ2VzIChncmFudC9yZXZva2Up XG4iKSk7CiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3Jl IGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRy aWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9y ZVxuIikpOwpAQCAtNjIxLDMgKzc1Myw2MjMgQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZz dGF0ZSk7CiB9CisKK3N0YXRpYyBib29sCitfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNo YXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJCXN0OworCWNo YXIJCQkgYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIl cy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9y eSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0 KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogTWFrZSBhIGRhdGFi YXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFj dGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQu CisgKgorICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91 dCBwcmludGluZyBhbnkgbWVzc2FnZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBw cm9tcHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgorICoKKyAqLworc3RhdGljIFBHY29u biAqCitjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25u ZWN0aW9uX3N0cmluZywKKwkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9y dCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9v bCBmYWlsX29uX2Vycm9yKQoreworCVBHY29ubgkgICAqY29ubjsKKwlib29sCQluZXdfcGFzczsK Kwljb25zdCBjaGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKKwlpbnQJCQlteV92ZXJzaW9uOworCWNv bnN0IGNoYXIgKiprZXl3b3JkcyA9IE5VTEw7CisJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7 CisJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKKwlzdGF0aWMgY2hhciAqcGFz c3dvcmQgPSBOVUxMOworCXN0YXRpYyBpbnQgIHNlcnZlcl92ZXJzaW9uOworCisJaWYgKHByb21w dF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVf cHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVj dGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAq IGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25u aW5mb09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJ CQlpID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5p bmZvRnJlZShjb25uX29wdHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGlu Zm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90 aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUK KwkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3 b3VsZCBpbnRlcnByZXQKKwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0 aW9uIHN0cmluZy4KKwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29u bl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJ CQlpZiAoY29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisK KwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7 IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25u X29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAi ZGJuYW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBw Z19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVz ID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZv ciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5f b3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+ dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1l IikgIT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJ CQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJ CX0KKwkJZWxzZQorCQl7CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkg KiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCAr IDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtl eXdvcmRzW2ldID0gImhvc3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9 CisJCWlmIChwZ3BvcnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVz W2ldID0gcGdwb3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdv cmRzW2ldID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJ CWlmIChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFs dWVzW2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJ a2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsK KwkJfQorCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFs dWVzW2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25u ID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFj b25uKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIs IGRibmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJ CQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJ CXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bh c3MgPSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2Vl IHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlp ZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9l cnJvcikKKwkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQor CQl7CisJCQlQUWZpbmlzaChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZh bHVlcyk7CisJCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCX0KKworCWZyZWUoa2V5d29yZHMpOworCWZyZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZv RnJlZShjb25uX29wdHMpOworCisJLyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90ZXZlcnNpb25f c3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7CisJaWYgKCFy ZW1vdGV2ZXJzaW9uX3N0cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNp b24iKTsKKwlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKKwlpZiAoc2Vy dmVyX3ZlcnNpb24gPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVy c2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisKKwlteV92ZXJzaW9uID0g UEdfVkVSU0lPTl9OVU07CisKKwkvKgorCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFj ayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgorCSAqIG91ciBvd24gbWFq b3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCisJICov CisJaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb24KKwkJJiYgKHNlcnZlcl92ZXJzaW9u IDwgOTAyMDAgfHwKKwkJCShzZXJ2ZXJfdmVyc2lvbiAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEw MCkpKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJz aW9uIG1pc21hdGNoIik7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAl czsgJXMgdmVyc2lvbjogJXMiLAorCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwg UEdfVkVSU0lPTik7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCVBRY2xlYXIoZXhlY3V0ZVF1 ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7CisKKwlyZXR1cm4gY29u bjsKK30KKworLyoKKyAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhlIHJlc3VsdHMsIGV4aXQgcHJv Z3JhbSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgUEdyZXN1bHQgKgorZXhlY3V0ZVF1ZXJ5KFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJ cGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9IFBRZXhlYyhjb25u LCBxdWVyeSk7CisJaWYgKCFyZXMgfHwgUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBM RVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVy eSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlyZXR1cm4g cmVzOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKglSZWFkT25lU3RhdGVtZW50KCkKKyAq CisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIgdXNp bmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVybWlu YXRvciBmb3IgZ2xvYmFsLnNxbCBmaWxlKQorICoKKyAqCUVPRiBpcyByZXR1cm5lZCBpZiBlbmQt b2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4KKyAqIC0tLS0tLS0tLS0t LS0tLS0KKyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5C dWYsIEZJTEUgKmZfZ2xvKQoreworCWludAkJCWM7CQkJCS8qIGNoYXJhY3RlciByZWFkIGZyb20g Z2V0YygpICovCisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFkIGNo YXJhY3RlcnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vlbi4K KwkgKi8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhmX2dsbykpICE9IEVPRikKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJewor CQkJaWYoaW5CdWYtPmxlbiA+IDEgJiYKKwkJCQkJaW5CdWYtPmRhdGFbaW5CdWYtPmxlbiAtIDJd ID09ICc7JykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfQorCX0KKwor CS8qIE5vIGlucHV0IGJlZm9yZSBFT0Ygc2lnbmFsIG1lYW5zIHRpbWUgdG8gcXVpdC4gKi8KKwlp ZiAoYyA9PSBFT0YgJiYgaW5CdWYtPmxlbiA9PSAwKQorCQlyZXR1cm4gRU9GOworCisJLyogQWRk ICdcMCcgdG8gbWFrZSBpdCBsb29rIHRoZSBzYW1lIGFzIG1lc3NhZ2UgY2FzZS4gKi8KKwlhcHBl bmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICdcMCcpOworCisJcmV0dXJuICdRJzsKK30K KworLyoKKyAqIFRoaXMgd2lsbCByZW1vdmUgbmFtZXMgZnJvbSBhbGwgZGJsaXN0IHRoYXQgYXJl IGdpdmVuIHdpdGggZXhjbHVkZS1kYXRhYmFzZQorICogb3B0aW9uLgorICoKKyAqIHJldHVybnMg bnVtYmVyIG9mIGRibmFtZXMgdGhvc2Ugd2lsbCBiZSByZXN0b3JlZC4KKyAqLworc3RhdGljIGlu dAorZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLCBTaW1wbGVEYXRhYmFz ZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zKQoreworCWludAkJCQkJY291bnRkYiA9IDA7CisJU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbAkqY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsCSpwcmVjZWxsID0gTlVMTDsKKworCS8qIFJldHVybiAwIGlmIHRoZXJlIGlzIG5v IGRiIHRvIHJlc3RvcmUuICovCisJaWYgKGNlbGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl3 aGlsZSAoY2VsbCAhPSBOVUxMKQorCXsKKwkJYm9vbAkJCQkJc2tpcF9kYl9yZXN0b3JlID0gZmFs c2U7CisJCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpwcmV2ID0gTlVMTDsKKwkJU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAkJKm5leHQgPSBjZWxsLT5uZXh0OworCisJCS8qIE5vdyBtYXRjaCB0aGlz IGRibmFtZSB3aXRoIGV4Y2x1ZGUtZGF0YWJhc2UgbGlzdC4gKi8KKwkJZm9yIChTaW1wbGVTdHJp bmdMaXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBjZWxsZGI7IGNl bGxkYiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJaWYgKGlzX2Z1bGxfcGF0dGVybihjb25uLCBj ZWxsLT5kYm5hbWUsIGNlbGxkYi0+dmFsKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFzIHdlIG5l ZWQgdG8gc2tpcCB0aGlzIGRibmFtZSBzbyBzZXQgZmxhZyB0byByZW1vdmUgaXQgZnJvbQorCQkJ CSAqIGxpc3QuCisJCQkJICovCisJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKworCQkJCS8q CisJCQkJICogQXMgdGhpcyBwYXR0ZXJuIGlzIHNraXBwZWQsIG5vdyBkZWxldGUgZW50cnkgZnJv bSBsaXN0IHRvCisJCQkJICogYXZvaWQgbXVsdGlwbGUgbG9vcGluZy4KKwkJCQkgKi8KKwkJCQlz aW1wbGVfc3RyaW5nX2xpc3RfZGVsZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBjZWxsZGIsIHBy ZXYpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwcmV2ID0gY2VsbGRiOworCQl9CisKKwkJLyog SW5jcmVtZW50IGNvdW50IGlmIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCQlpZiAoc2tp cF9kYl9yZXN0b3JlKQorCQkJc2ltcGxlX2Rib2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRfbGlz dCwgY2VsbCwgcHJlY2VsbCk7CisJCWVsc2UKKwkJeworCQkJY291bnRkYisrOyAvKiBJbmNyZW1l bnQgZGIgY291dGVyLiAqLworCQkJcHJlY2VsbCA9IGNlbGw7CisJCX0KKworCQljZWxsID0gbmV4 dDsgLyogUHJvY2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCX0KKworCXJl dHVybiBjb3VudGRiOworfQorCisvKgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGlu ZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBh bmQgY29ycmVzcG9kaW5nIGRib2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5h bWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklMRSAgICAqcGZpbGU7CisJY2hh ciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAgICBsaW5lW01BWFBHUEFUSF07 CisJaW50ICAgICBjb3VudCA9IDA7CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BB VEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUu ICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCAiciIpOworCisJaWYgKHBmaWxlID09 IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRibmFtZSBhbmQgZGJvaWQgdG8g dGhlIGxpc3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBO VUxMKQorCXsKKwkJT2lkICAgICAgICAgZGJvaWQ7CisJCWNoYXIgICAgICAgIGRibmFtZVtNQVhQ R1BBVEggKyAxXTsKKworCQkvKiBFeHRyYWN0IGRibmFtZSBhbmQgZGJvaWQgZnJvbSBsaW5lICov CisJCXNzY2FuZihsaW5lLCAiJXUgJXMiICwgJmRib2lkLCBkYm5hbWUpOworCisJCXBnX2xvZ19p bmZvKCJmb3VuZCBkYm5hbWUgYXMgOiVzIGFuZCBkYm9pZDolZCBpbiBtYXAuZGF0IGZpbGUgd2hp bGUgcmVzdG9yaW5nIiwgZGJuYW1lLCBkYm9pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGlmIGZp bGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRib2lkKSB8 fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFw LmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIsIGNvdW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDog YmVmb3JlIGFkZGluZyBkYmFubWUgaW50byBsaXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBk YgorCQkgKiBuZWVkcyB0byBza2lwcGVkIGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93 LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICov CisJCXNpbXBsZV9kYm9pZF9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRib2lkLCBkYm5h bWUpOworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xv c2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogVGhpcyB3aWxsIHJlc3Rv cmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFz ZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9y aW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0 YWJhc2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJz KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBO VUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqY2VsbDsKKwlpbnQJCQkJCQkJCWV4 aXRfY29kZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVzdG9yZTsKKwlpbnQJCQkJCQkJCW51 bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhh cyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0Lmhl YWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2dfaW5mbygiZm91bmQgdG90YWwgJWQg ZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3RvdGFsX2RiKTsKKworCS8qIFNr aXAgYW55IGV4cGxpY2l0bHkgZXhjbHVkZWQgZGF0YWJhc2UuICovCisJbnVtX2RiX3Jlc3RvcmUg PSBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJ ZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3 ZSBhcmUgZG9uZSBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlQUWZpbmlzaChjb25uKTsKKwor CS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9v aWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2luZm8oIm5lZWRz IHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVz dG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogWFhYOiBUT0RPIHRpbGwgbm93LCB3ZSBt YWRlIGEgbGlzdCBvZiBkYXRhYmFzZXMsIHRob3NlIG5lZWRzIHRvIGJlIHJlc3RvcmVkCisJICog YWZ0ZXIgc2tpcHBpbmcgbmFtZXMgb2YgZXhjbHVkZS1kYXRhYmFzZS4gIE5vdyB3ZSBjYW4gbGF1 bmNoIHBhcmFsbGVsCisJICogd29ya2VycyB0byByZXN0b3JlIHRoZXNlIGRhdGFiYXNlcy4KKwkg Ki8KKwljZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisKKwl3aGlsZShjZWxsICE9IE5VTEwp CisJeworCQljaGFyCQlzdWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWludAkJCWRiZXhpdF9jb2Rl OworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQg b2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQgaW50bworCQkgKiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJh c2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNw YXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJy aWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJ CX0KKworCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUi LCBkdW1wZGlycGF0aCwgY2VsbC0+ZGJvaWQpOworCisJCS8qCisJCSAqIERhdGFiYXNlIC1kLy0t ZGJuYW1lIGlzIGFscmVhZHkgY3JlYXRlZCBzbyByZXNldCBjcmVhdGVEQiB0byBpZ25vcmUKKwkJ ICogZGF0YWJhc2UgY3JlYXRpb24gZXJyb3IuCisJCSAqLworCQlpZiAoc3RyY21wKGNlbGwtPmRi bmFtZSwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpID09IDApCisJCQlvcHRzLT5jcmVhdGVEQiA9IDA7 CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBjZWxsLT5kYm5h bWUpOworCisJCWRiZXhpdF9jb2RlID0gcmVzdG9yZU9uZURhdGFiYXNlKHN1YmRpcnBhdGgsIG9w dHMsIG51bVdvcmtlcnMpOworCisJCS8qIFN0b3JlIGV4aXRfY29kZSB0byByZXBvcnQgaXQgYmFj ay4gKi8KKwkJaWYgKGV4aXRfY29kZSA9PSAwICYmIGRiZXhpdF9jb2RlICE9IDApCisJCQlleGl0 X2NvZGUgPSBkYmV4aXRfY29kZTsKKworCQkvKiBTZXQgY3JlYXRlREIgb3B0aW9uIHRvIGNyZWF0 ZSBuZXcgZGF0YWJhc2UuICovCisJCWlmIChzdHJjbXAoY2VsbC0+ZGJuYW1lLCBvcHRzLT5jcGFy YW1zLmRibmFtZSkgPT0gMCkKKwkJCW9wdHMtPmNyZWF0ZURCID0gMTsKKworCQljZWxsID0gY2Vs bC0+bmV4dDsKKwl9IC8qIGVuZCB3aGlsZSAqLworCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNz ZWQgZGF0YWJhc2VzLiovCisJcGdfbG9nX2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFz ZXMgYXJlICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKwor LyoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgd2lsbCBleGVjdXRlIGFs bCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkgb25lIHN0YXRlbWVudC4KKyAqCisgKiBz ZW1pY29sb24gaXMgY29uc2lkZXJlZCBhcyBzdGF0ZW1lbnQgdGVybWluYXRvci4KKyAqLworc3Rh dGljIHZvaWQKK2V4ZWN1dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoKQoreworCWNoYXIgICAgICAgICAgICBnbG9iYWxfZmlsZV9wYXRo W01BWFBHUEFUSF07CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisJU3RyaW5nSW5mb0RhdGEJc3Fsc3Rh dGVtZW50OworCUZJTEUJCQkqcGZpbGU7CisKKwlzbnByaW50ZihnbG9iYWxfZmlsZV9wYXRoLCBN QVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogbm93IG9wZW4g Z2xvYmFsLmRhdCBmaWxlICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCAiciIp OworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9i YWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIEluaXQgc3Fsc3RhdGVt ZW50IHRvIGFwcGVuZCBjb21tYW5kcyAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxzdGF0ZW1lbnQp OworCisJLyogUHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBzdGF0ZW1lbnRz ICovCisJd2hpbGUgKFJlYWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVP RikKKwl7CisJCXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJ c3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1B TkRfT0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVF Ulk6CisJCQljYXNlIFBHUkVTX0NPUFlfSU46CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUgcXVlcnk6ICVzIFxuQ29tbWFuZCB3YXM6 ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQ UWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBmaWxlKTsKK30KKworLyoKKyAqIGFwcGVu ZHMgYSBub2RlIHRvIHRoZSBsaXN0IGluIHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1w bGVfZGJvaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJv aWQsIGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpj ZWxsOworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYm9pZCA9IGRib2lkOworCWNlbGwt PmRibmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3Qt PnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+ dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBkZWxldGUgY2VsbCBmcm9tIHN0cmluZyBsaXN0Lgor ICovCitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmluZ19saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdM aXN0ICpsaXN0LCBTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlU3RyaW5nTGlz dENlbGwgKnByZXYpCit7CisJaWYgKHByZXYgPT0gTlVMTCkKKwl7CisJCWxpc3QtPmhlYWQgPSBj ZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9CisJZWxzZQorCXsKKwkJcHJldi0+bmV4dCA9 IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KK30KKworLyoKKyAqIGRlbGV0ZSBjZWxs IGZyb20gZGF0YWJhc2UgYW5kIG9pZCBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2Ri b2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikK K3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJ CXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsK KwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogaXNfZnVsbF9wYXR0ZXJuCisgKgorICog UmV0dXJucyB0cnVlIGlmIHdlIGNhbiBjb25zdHVjdCAxc3Qgc3RyaW5nIGZyb20gZ2l2ZW4gcGF0 dGVybi4KKyAqCisgKi8KK3N0YXRpYyBib29sCitpc19mdWxsX3BhdHRlcm4oUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnB0cm4pCit7CisJUFFFeHBCdWZmZXIJCXF1 ZXJ5OworCVBHcmVzdWx0CQkqcmVzdWx0OworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJcHJpbnRmUFFFeHBCdWZmZXIocXVlcnksCisJCQkiU0VMRUNUIHN1YnN0cmluZyAoICIK KwkJCSIgJyVzJyAsICIKKwkJCSIgJyVzJyApICIsIHN0ciwgcHRybik7CisKKyAgIHJlc3VsdCA9 IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMo cmVzdWx0KSA9PSBQR1JFU19UVVBMRVNfT0spCisJeworCQlpZiAoUFFudHVwbGVzKHJlc3VsdCkg PT0gMSkKKwkJeworCQkJY29uc3QgY2hhcgkJKm91dHN0cjsKKworCQkJb3V0c3RyID0gUFFnZXR2 YWx1ZShyZXN1bHQsIDAsIDApOworCisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCQlkZXN0cm95UFFF eHBCdWZmZXIocXVlcnkpOworCisJCQkvKgorCQkJICogSWYgb3V0cHV0IHN0cmluZyBvZiBzdWJz dHJpbmcgZnVuY3Rpb24gaXMgbWF0Y2hlcyB3aXRoIHN0ciwgdGhlbgorCQkJICogd2UgY2FuIGNv bnN0cnVjdCBzdHIgZnJvbSBwYXR0ZXJuLgorCQkJICovCisJCQlpZiAoc3RyY21wKG91dHN0ciwg c3RyKSA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQkJZWxzZQorCQkJCXJldHVybiBmYWxzZTsK KwkJfQorCX0KKwllbHNlCisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGV4ZWN1dGUgcXVlcnk6 ICVzIFxuQ29tbWFuZCB3YXM6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHF1ZXJ5LT5kYXRh KTsKKworCVBRY2xlYXIocmVzdWx0KTsKKwlkZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOworCisJ cmV0dXJuIGZhbHNlOworfQotLSAKMi4zOS4zCgo= --000000000000e6deb2062b226b36--