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 1vFt9F-002zsJ-Jk for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 11:54:57 +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 1vFt9E-002le5-Cy for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 11:54:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vFt9D-002ldF-T3 for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 11:54:55 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFt9A-005jxK-00 for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 11:54:54 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4ecf03363c9so41048611cf.1 for ; Mon, 03 Nov 2025 03:54:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762170890; x=1762775690; darn=lists.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=qEJzxYHwI3l0HGwUgjnp+2ghbk9ZBrEOwkqDQ16nAC0=; b=i2HikeNvgpGJ5FszXIVpmDrRyWi4VUfOx6Ol1x+TI8bJcrFdQ6f3q/IcacZvwen5+f Sl8hPuhbySTzZikPL/NRRJtEbJBBzvIDLkt6hwvWnad2/v7NkMcE+0rmAzgPVWfDnH3v QT+QgWyge4u1nzhNsyNPnZlCx0XNMtTN3371snC3IUMo2R77NaInT1He1Hu63GESBbTi rOGEqlnkpfQixGRO2xLuUGh3xpKXJkJUlm5V02qMG8E1KaW+ZWjQtcp0GrPVJKKPOM09 Gh2WICF00rjei1l7ixkOOR85Nup6j5mqBxMLTeAEupo/lPyIwdz1ALzUfYayiEVoKuM3 3GoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762170890; x=1762775690; 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=qEJzxYHwI3l0HGwUgjnp+2ghbk9ZBrEOwkqDQ16nAC0=; b=RHZ/rUWLX28R5lMzjcNqnKaydKOC/IbxMK1owodQrWvlAj/H+t6Tasirc7P5AXADQ2 GJff9eK/Xe+9yO9giT+xGQrf7YTH6lslM8vdXqXmPRwX+X08rE/etbiFqMCz0OwcYwVZ qJxH7OEo6THMtbQbW2JVtC+ZP/t0cIMH8LgdYAslIeiqWSeSqibp5AKBREedLorfAYqU DsB1qeD1Ka52yaU9n1j0d47Y8L6DykerzvorqVb6pcL3XHg5uem+P8DktqDkWBfbM9jH SxNoZeDHLWfurflRaSOVnvayBgpjTNWO+oRNPIDSgPIgVAYFBv0rs4wrE0kz6kYe7sXs 8Xlg== X-Gm-Message-State: AOJu0YyUbTrvcY3oJSoy2UjjQxT2GOcDsxFys0h7o6hW7f7QdOBlTH+r A2i4rk6dk0jt5tq4eEjo1+1xR56Q/btrGLnK2CimMeAHlkzNjD2WZJy4ZSHbNX2sq0hyoskZ2rb T2/GoQZhuHBud0JY0C5aprtfFmo511Xo= X-Gm-Gg: ASbGncu64PJnMyzAbZ0tAzWpaVKFzQJGu3LcmPgCjIByGu2mhV0a3a1LACoF+oXRt8F rk8ZcNiQ34hL1T8VDOA068VLLwfPuyuJgwGFsfHxc6zuuy95o+NKXwOKaBLtw6EzXAgckG6Y8lJ b8g2Hk9Q0YUEvm6CpxgyGTY9HU50MEdIpTxYJVYBqlXLxr/aJGvTLd6gA/I7RMQoDuNsDyKjGKl bwcMO2spt6QUqotagQfUfb0BvcS5r5WzD5lsAPhOLHs/7NSdKNWuAzoWB7XJPUS4gbB8kGv X-Google-Smtp-Source: AGHT+IFN5Kyro94S7arI+m1VN+ScD+pBUtohdc/BZIriBtAGOTimV8kkF2nbXkp95mWJK370heZA43/wzVs/y5k2Hjs= X-Received: by 2002:a05:622a:8c0a:b0:4ed:43fe:f50e with SMTP id d75a77b69052e-4ed43fefa83mr84513711cf.53.1762170889839; Mon, 03 Nov 2025 03:54:49 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Mon, 3 Nov 2025 17:24:37 +0530 X-Gm-Features: AWmQ_bk9IDPNqBV-2DE_Cm-GJnaetNAeReob4a9bz9vUuIE7hipIUiHkWUTTqSk Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Vaibhav Dalvi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ec74690642af61f8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ec74690642af61f8 Content-Type: multipart/alternative; boundary="000000000000ec74680642af61f6" --000000000000ec74680642af61f6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 3 Nov 2025 at 12:06, Vaibhav Dalvi wrote: > > Hi Mahendra, > > Thank you for your work on this feature. > I have just begun reviewing the latest patch and > encountered the following errors during the initial setup: > > ``` > $ ./db/bin/pg_restore testdump_dir -C -d postgres -F d -p 5556 > pg_restore: error: could not execute query: ERROR: syntax error at or near "\\" > LINE 1: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj... > ^ > Command was: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj9vg3Xxys1b3hb > > pg_restore: error: could not execute query: ERROR: syntax error at or near "\\" > LINE 1: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCj... > ^ > Command was: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj9vg3Xxys1b3hb > > pg_restore: error: could not execute query: ERROR: syntax error at or near "\\" > LINE 1: \connect template1 > ^ > Command was: \connect template1 > > pg_restore: error: could not execute query: ERROR: syntax error at or near "\\" > LINE 1: \connect postgres > ^ > Command was: \connect postgres > ``` > To cross-check tried with plain dump(with pg_dumpall) and > restored(SQL file restore) without patch and didn't get above > connection errors. > > It appears there might be an issue with the dump file itself. > Please note that this is my first observation as I have just > started the review. I will continue with my assessment. > > Regards, > Vaibhav Dalvi > EnterpriseDB Thanks Vaibhav for the review. This change was added by me in v04. Only in the case of a file, we should restore these commands. Attached patch is fixing the same. If we dump and restore the same file with the same user, then we will get an error of ROLE CREATE as the same role is already created. I think, either we can ignore this error, or we can keep it as a restore can be done with different users. > mst@localhost bin]$ ./pg_restore d1 -C -d postgres > pg_restore: error: could not execute query: ERROR: role "mst" already > exists > Command was: CREATE ROLE mst; > ALTER ROLE mst WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN > REPLICATION BYPASSRLS; > > > pg_restore: warning: errors ignored on restore: 1 > > On Fri, Oct 31, 2025 at 2:51=E2=80=AFPM Mahendra Singh Thalor wrote: >> >> On Tue, 28 Oct 2025 at 11:32, Mahendra Singh Thalor wrote: >> > >> > On Thu, 16 Oct 2025 at 16:24, Mahendra Singh Thalor wrote: >> > > >> > > On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor < mahi6run@gmail.com> wrote: >> > > > >> > > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: >> > > > > >> > > > > >> > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: >> > > > > >> > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wrote: >> > > > > >> > > > > OK, now that's reverted we should discuss how to proceed. I had two thoughts >> > > > > - we could use invent a JSON format for the globals, or we could just use >> > > > > the existing archive format. I think the archive format is pretty flexible, >> > > > > and should be able to accommodate this. The downside is it's not humanly >> > > > > readable. The upside is that we don't need to do anything special either to >> > > > > write it or parse it. >> > > > > >> > > > > I would first try to use the existing archiver API, because that makes it >> > > > > harder to miss bugs. Any tension between that API and pg_dumpall is likely to >> > > > > have corresponding tension on the pg_restore side. Resolving that tension >> > > > > will reveal much of the project's scope that remained hidden during the v18 >> > > > > attempt. Perhaps more important than that, using the archiver API means >> > > > > future pg_dump and pg_restore options are more likely to cooperate properly >> > > > > with $SUBJECT. In other words, I want it to be hard to add pg_dump/pg_restore >> > > > > features that malfunction only for $SUBJECT archives. The strength of the >> > > > > archiver architecture shows in how rarely new features need format-specific >> > > > > logic and how rarely format-specific bugs get reported. We've had little or >> > > > > no trouble with e.g. bugs that appear in -Fd but not in -Fc. >> > > > > >> > > > > >> > > > > Yeah, that's what we're going to try. >> > > > > >> > > > > >> > > > > cheers >> > > > > >> > > > > >> > > > > andrew >> > > > > >> > > > > -- >> > > > > Andrew Dunstan >> > > > > EDB: https://www.enterprisedb.com >> > > > >> > > > Thanks Andrew, Noah and all others for feedback. >> > > > >> > > > Based on the above suggestions and discussions, I removed sql commands >> > > > from the global.dat file. For global commands, now we are making >> > > > toc.dat/toc.dmp/toc.tar file based on format specified and based o= n >> > > > format specified, we are making archive entries for these global >> > > > commands. By this approach, we removed the hard-coded parsing part of >> > > > the global.dat file and we are able to skip DROP DATABASE with the >> > > > globals-only option. >> > > > >> > > > Here, I am attaching a patch for review, testing and feedback. This is >> > > > a WIP patch. I will do some more code cleanup and will add some more >> > > > comments also. Please review this and let me know design level >> > > > feedback. Thanks Tushar Ahuja for some internal testing and feedback. >> > > > >> > > >> > > Hi, >> > > Here, I am attaching an updated patch. In offline discussion, Andrew >> > > reported some test-case failures(Thanks Andrew). I fixed those. >> > > Please let me know feedback for the patch. >> > > >> > >> > Hi, >> > Here I am attaching a re-based patch as v02 was failing on head. >> > Thanks Tushar for the testing. >> > Please review this and let me know feedback. >> > >> >> Hi all, >> Here I am attaching an updated patch for review and testing. Based on >> some offline comments by Andrew, I did some code cleanup. >> Please consider this patch for feedback. >> >> -- >> Thanks and Regards >> Mahendra Singh Thalor >> EnterpriseDB: http://www.enterprisedb.com --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000ec74680642af61f6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, 3 Nov 2025 at 12:06, Vaibhav Dalvi <vaibhav.dalvi@enterprisedb.com&g= t; wrote:
>
> Hi Mahendra,
>
> Thank you for your w= ork on this feature.
> I have just begun reviewing the latest patch a= nd
> encountered the following errors during the initial setup:
&g= t;
> ```
> $ ./db/bin/pg_restore testdump_dir -C -d postgres -F= d -p 5556
> pg_restore: error: could not execute query: ERROR: synta= x error at or near "\\"
> LINE 1: \restrict aO9K1gzVZTlafid= F5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj...
> ^
> Command was: \rest= rict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj9vg3Xxys1b3hb
>= ;
> pg_restore: error: could not execute query: ERROR: syntax error a= t or near "\\"
> LINE 1: \unrestrict aO9K1gzVZTlafidF5fWx8A= DGzUnIiAcguFz5qskGaFDygTCj...
> ^
> Command was: \unrestrict aO= 9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjCj9vg3Xxys1b3hb
>
&g= t; pg_restore: error: could not execute query: ERROR: syntax error at or ne= ar "\\"
> LINE 1: \connect template1
> ^
> Comm= and was: \connect template1
>
> pg_restore: error: could not ex= ecute query: ERROR: syntax error at or near "\\"
> LINE 1: = \connect postgres
> ^
> Command was: \connect postgres
> = ```
> To cross-check tried with plain dump(with pg_dumpall) and
&g= t; =C2=A0restored(SQL file restore) without patch and didn't get above<= br>> connection errors.
>
> It appears there might be an iss= ue with the dump file itself.
> Please note that this is my first obs= ervation as I have just
> started the review. I will continue with my= assessment.
>
> Regards,
> Vaibhav Dalvi
> Enterpr= iseDB

Thanks Vaibhav for the review.
This change was added by me = in v04. Only in the case of a file, we should restore these commands. Attac= hed patch is fixing the same.

If we dump and restore the same file w= ith the same user, then we will get an error of ROLE CREATE as the same rol= e is already created. I think, either we can ignore this error, or we can k= eep it as a restore can be done with different users.
mst@localhost bin]$ ./pg_restore d1 =C2=A0= -C -d postgres
pg_restore: error: could not execute query: ERROR: =C2=A0= role "mst" already exists
Command was: CREATE ROLE mst;
ALT= ER ROLE mst WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BY= PASSRLS;


pg_restore: warning: errors ignored on restore: 1


>
> On Fri, Oct 31, 2025 at 2:51=E2=80=AFPM Ma= hendra Singh Thalor <mahi6run@gmai= l.com> wrote:
>>
>> On Tue, 28 Oct 2025 at 11:32, = Mahendra Singh Thalor <mahi6run@gm= ail.com> wrote:
>> >
>> > On Thu, 16 Oct 202= 5 at 16:24, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
>> > >
>> > &= gt; On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
>> > &= gt; >
>> > > > On Sun, 24 Aug 2025 at 22:12, Andrew Du= nstan <andrew@dunslane.net>= ; wrote:
>> > > > >
>> > > > >>> > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote:>> > > > >
>> > > > > On Wed, Jul = 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wrote:
>> > > &= gt; >
>> > > > > OK, now that's reverted we sho= uld discuss how to proceed. I had two thoughts
>> > > > &= gt; - we could use invent a JSON format for the globals, or we could just u= se
>> > > > > the existing archive format. I think the= archive format is pretty flexible,
>> > > > > and sho= uld be able to accommodate this. The downside is it's not humanly
&g= t;> > > > > readable. The upside is that we don't need t= o do anything special either to
>> > > > > write it or= parse it.
>> > > > >
>> > > > > = I would first try to use the existing archiver API, because that makes it>> > > > > harder to miss bugs.=C2=A0 Any tension betwe= en that API and pg_dumpall is likely to
>> > > > > hav= e corresponding tension on the pg_restore side.=C2=A0 Resolving that tensio= n
>> > > > > will reveal much of the project's sco= pe that remained hidden during the v18
>> > > > > atte= mpt.=C2=A0 Perhaps more important than that, using the archiver API means>> > > > > future pg_dump and pg_restore options are mo= re likely to cooperate properly
>> > > > > with $SUBJE= CT.=C2=A0 In other words, I want it to be hard to add pg_dump/pg_restore>> > > > > features that malfunction only for $SUBJECT a= rchives.=C2=A0 The strength of the
>> > > > > archiver= architecture shows in how rarely new features need format-specific
>= > > > > > logic and how rarely format-specific bugs get repo= rted.=C2=A0 We've had little or
>> > > > > no trou= ble with e.g. bugs that appear in -Fd but not in -Fc.
>> > >= > >
>> > > > >
>> > > > > = Yeah, that's what we're going to try.
>> > > > &g= t;
>> > > > >
>> > > > > cheers>> > > > >
>> > > > >
>> = > > > > andrew
>> > > > >
>> >= > > > --
>> > > > > Andrew Dunstan
>&g= t; > > > > EDB: https:= //www.enterprisedb.com
>> > > >
>> > >= > Thanks Andrew, Noah and all others for feedback.
>> > >= ; >
>> > > > Based on the above suggestions and discus= sions, I removed sql commands
>> > > > from the global.da= t file. For global commands, now we are making
>> > > > t= oc.dat/toc.dmp/toc.tar file based on format specified and based on
>&= gt; > > > format specified, we are making archive entries for thes= e global
>> > > > commands. By this approach, we removed = the hard-coded parsing part of
>> > > > the global.dat fi= le and we are able to skip DROP DATABASE with the
>> > > >= ; globals-only option.
>> > > >
>> > > >= ; Here, I am attaching a patch for review, testing and feedback. This is>> > > > a WIP patch. I will do some more code cleanup and = will add some more
>> > > > comments also. Please review = this and let me know design level
>> > > > feedback. Than= ks Tushar Ahuja for some internal testing and feedback.
>> > &g= t; >
>> > >
>> > > Hi,
>> > &g= t; Here, I am attaching an updated patch. In offline discussion, Andrew
= >> > > reported some test-case failures(Thanks Andrew). I fixed= those.
>> > > Please let me know feedback for the patch.>> > >
>> >
>> > Hi,
>> > = Here I am attaching a re-based patch as v02 was failing on head.
>>= ; > Thanks Tushar for the testing.
>> > Please review this a= nd let me know feedback.
>> >
>>
>> Hi all,>> Here I am attaching an updated patch for review and testing. Bas= ed on
>> some offline comments by Andrew, I did some code cleanup.=
>> Please consider this patch for feedback.
>>
>&g= t; --
>> Thanks and Regards
>> Mahendra Singh Thalor
&= gt;> EnterpriseDB: http://www.en= terprisedb.com



--
Thanks and Regards
Mahendra Sin= gh Thalor
EnterpriseDB: http://w= ww.enterprisedb.com
--000000000000ec74680642af61f6-- --000000000000ec74690642af61f8 Content-Type: application/octet-stream; name="v05_03112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v05_03112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhj31fxv0 RnJvbSAxYmVjMDA4OTgwOWY5YmEwNGI5NWI5OTNjYWVlZmZmMDY4MzI2YzJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBNb24sIDMgTm92IDIwMjUgMTc6MTc6MDkgKzA1MzAKU3ViamVjdDogW1BBVENIXSBOb24g dGV4dCBtb2RlcyBmb3IgcGdfZHVtcGFsbCwgY29ycmVzcG9uZGluZ2x5IGNoYW5nZSAKIHBnX3Jl c3RvcmUKCiAgICBwZ19kdW1wYWxsIGFjcXVpcmVzIGEgbmV3IC1GLy0tZm9ybWF0IG9wdGlvbiwg d2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcwogICAgcGdfZHVtcC4gVGhlIGRlZmF1bHQgaXMgcCwg bWVhbmluZyBwbGFpbiB0ZXh0LiBGb3IgYW55IG90aGVyIHZhbHVlLCBhCiAgICBkaXJlY3Rvcnkg aXMgY3JlYXRlZCBjb250YWluaW5nIHR3byBmaWxlcywgdG9jLmRhdC8uZG1wLy50YXIgYW5kIG1h cC5kYXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9i YWwgZGF0YSBiYXNlZCBvbiAtRiwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFwIGZy b20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcy4gSXQgd2lsbCBhbHNvIGNvbnRhaW4gYQogICAgc3Vi ZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGljaCBpdCB3aWxsIGNyZWF0ZSBh cmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5hbWVkIHVzaW5nIHRoZSBkYXRh YmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYgYXJndW1lbnQgaXMgcmVxdWly ZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcg bWFwLmRhdCwKICAgIGl0IHJlc3RvcmVzIHRoZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZGF0 Ly5kbXAvLnRhciBpZiBleGlzdCwgYW5kIHRoZW4KICAgIHJlc3RvcmVzIGVhY2ggZGF0YWJhc2Uu CgogICAgcGdfcmVzdG9yZSBhY3F1aXJlcyB0d28gbmV3IG9wdGlvbnM6IC1nLy0tZ2xvYmFscy1v bmx5IHdoaWNoIHN1cHByZXNzZXMKICAgIHJlc3RvcmF0aW9uIG9mIGFueSBkYXRhYmFzZXMsIGFu ZCAtLWV4Y2x1ZGUtZGF0YWJhc2Ugd2hpY2ggaW5oaWJpdHMKICAgIHJlc3RvcmF0aW9uIG9mIHBh cnRpY3VhbHIgZGF0YWJhc2UocykgaW4gdGhlIHNhbWUgd2F5IHRoZSBzYW1lIG9wdGlvbgogICAg d29ya3MgaW4gcGdfZHVtcGFsbC4KCnYwNQotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFs bC5zZ21sICAgICB8ICA4OSArKystCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCAg ICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgICAgICAgICAgfCAgIDEg LQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyB8ICAzMSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwg ICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8ICAgMiArLQogc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MDggKysrKysrKysrKysrKysrKysrKysrKy0tLS0t CiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA1OTMgKysrKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAx MCArCiBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAgfCAzOTYgKysrKysrKysr KysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDE2NjYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0 aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmluL3BnX2R1bXAvdC8w MDFfYmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdf ZHVtcGFsbC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggOWY2MzlmNjFkYjAuLjQw NjNlODhkMzg4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsMTAgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+cGdf ZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEgc2NyaXB0IGZp bGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQgYSA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNj cmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+ CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlv bj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90 ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwot ICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNv bnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZpbGUgb3IgYW4gYXJj aGl2ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29t bWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBw LXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBj YWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4g dGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdpbGwgYmUgd3JpdHRl biB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4gdGV4dCBTUUwgc2Ny aXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKICAg IDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4gb3B0aW9uIG9yIHNo ZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUuCiAgIDwvcGFyYT4K IAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMgd2lsbCBiZSBwbGFjZWQg aW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9uPi1mPC9vcHRpb24+Lzxv cHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0aGlzIGNhc2UuCisg IDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpAQCAtMTMxLDEwICsx MzksODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAg IFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwg dGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlz IG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9u PiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1G IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IHRoZSBmb3JtYXQg b2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1wIGRhdGEgaXMKKyAg ICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4K KworICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9h cHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT50 b2MuZGF0L3RvYy5kbXAvdG9jLnRhcjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwv ZmlsZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0aW9u Pi0tZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMgZ2xvYmFs IGRhdGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzLiBUaGUgc2Vjb25kCisgICAgICAg IGNvbnRhaW5zIGEgbWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIG9pZHMgYW5kIG5hbWVzLiBUaGVz ZSBmaWxlcyBhcmUgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBw bGljYXRpb24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBwbGFjZWQgaW4KKyAg ICAgICAgPGZpbGVuYW1lPmRhdGFiYXNlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSwgbmFtZWQg dXNpbmcgdGhlIGRhdGFiYXNlJ3MgPHR5cGU+b2lkPC90eXBlPi4KKworICAgICAgIDx2YXJpYWJs ZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5k PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBlYWNoIGRhdGFiYXNl LAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgZGly ZWN0b3J5CisgICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8dHlwZT5vaWQ8L3R5cGU+IGFz IGl0cyBuYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRo ZSBkZWZhdWx0KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5jdXN0b208L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgZm9yIGVh Y2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3Rv cmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lk LmRtcDwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAg ICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1m b3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9y IGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBu YW1lZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5 cGU+IGlzIHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICAgIE5vdGU6IHNlZSA8 eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBkZXRhaWxzCisgICAgICAgb2YgaG93IHRo ZSB2YXJpb3VzIG5vbiBwbGFpbiB0ZXh0IGFyY2hpdmVzIHdvcmsuCisKKyAgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jl c3RvcmUuc2dtbAppbmRleCBhNDY4YTM4MzYxYS4uNzQ5N2I1MjdhZTYgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdf cmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAgIDxyZWZwdXJwb3NlPgotICAgcmVz dG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJv bSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2Fw cGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hpdmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5w Z19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBs aWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5 LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0 aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBh Ci0gICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20g YW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGlu IG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0 ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0i YXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0 cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0 aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2Fz IHNhdmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBn X3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUg c3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZl cyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAg IGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIg dGhlIGl0ZW1zCi0gICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMg YXJlIGRlc2lnbmVkIHRvIGJlCisgICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hp dmUgZm9ybWF0cyBhcmUgZGVzaWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRl Y3R1cmVzLgogICA8L3BhcmE+CiAKQEAgLTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9w ZXJhdGUgaW4gdHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwg PGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhh dCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0g ICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAot ICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQg YW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBk dW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiwKKyAgIGVh Y2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVuIHRoZSByZXN0b3JhdGlvbiB3aWxs IGJlIHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAgT3RoZXJ3aXNlLCB3aGVuIGEgZGF0 YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwK KyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVy IGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRvIGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQu ICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQg b3V0cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAg dGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBw bGljYXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+Lgor CiAgICBTb21lIG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJl Zm9yZSBhbmFsb2dvdXMgdG8KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4g b3B0aW9ucy4KICAgPC9wYXJhPgpAQCAtMTUyLDYgKzE2MSw4IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAg ICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28g cmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNw ZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3 aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBhbiBhcmNoaXZl IGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAg ICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2ICsyNTgsMTkgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBn bG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSBy ZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAg ICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRl eDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWlu ZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgpAQCAtNTkxLDYgKzYxNSwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRp b24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVz dG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxl IHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxv cHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAg IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFy YW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8g dGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGlj YXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhy ZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBk YXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAg ICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNh cmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQg c2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9t IGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVy PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCmluZGV4IGQ1NWQ1 M2RiZWVhLi5mNDRhOGE0NWZjYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3Rk Yi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpAQCAtMjg3LDcgKzI4Nyw2IEBA IGV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQogCXsKIAkJcGdf bG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwogCQlw Z19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChj b25uKTsKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggZjNjNjY5 ZjQ4NGUuLjNlMjFhYWY1NzgwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xMDMsNiArMTAzLDcgQEAg dGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwnLAogICAgICAgJ3Qv MDA1X3BnX2R1bXBfZmlsdGVyZmlsZS5wbCcsCiAgICAgICAndC8wMDZfcGdfZHVtcF9jb21wcmVz cy5wbCcsCisJICAndC8wMDdfcGdfZHVtcGFsbC5wbCcsCiAgICAgICAndC8wMTBfZHVtcF9jb25u c3RyLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCAwODZhZGNkYzUwMi4uNTk3 NGQ2NzA2ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMsNiArMzMzLDE2IEBAIG9uX2V4aXRfY2xv c2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25fZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9j b25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7CiB9CiAKKy8qCisgKiBXaGVuIHBnX3Jlc3RvcmUg cmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHVwZGF0ZSBhbHJlYWR5IGFkZGVkIGVu dHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVhbnVwLgorICovCit2b2lkCityZXBsYWNlX29uX2V4 aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCit7CisJc2h1dGRvd25faW5mby5BSFggPSBB SFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZvciBzaHV0dGluZyBkb3du IGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAogICogd29ya2VyIHByb2Nlc3NlcyBjbGVhbmx5Lgpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oCmluZGV4IGQ5MDQxZGFkNzIwLi5mNjMxZDk0NTQ3MiAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaApAQCAtMzEyLDcgKzMxMiw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFy Y2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVy biB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0 ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29u bHkpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpP cGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDU5ZWFlY2I0ZWQ3Li5lNGNm YTlhOTYzYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODYsNyArODYs NyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsK IHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAq U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsKIApA QCAtMzM5LDkgKzMzOSwxNCBAQCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUg KkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhyb3B0KTsKIH0KIAotLyogUHVibGljICovCisvKgor ICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBw ZW5kIGRhdGEgaW50byBmaWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlw bGUgZGF0YWJhc2VzIHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgorICovCiB2b2lkCi1S ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgs IGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5KQogewogCUFyY2hpdmVIYW5kbGUg KkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgt PnB1YmxpYy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUg KkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUg fHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9O RSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3Bl Yyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0 YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsMTcgQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCQkJaWYgKCh0ZS0+cmVxcyAmIChSRVFfU0NIRU1BIHwgUkVRX0RB VEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRpbnVlOwkJLyogaWdub3JlIGlmIG5vdCB0 byBiZSBkdW1wZWQgYXQgYWxsICovCiAKKwkJCS8qIFNraXAgRFJPUCBEQVRBQkFTRSBpZiBnbG9i YWxzX29ubHkuICovCisJCQlpZiAoZ2xvYmFsc19vbmx5ICYmIHRlICYmIHRlLT50YWcgJiYgKHN0 cmNtcCh0ZS0+dGFnLCAiRFJPUF9EQVRBQkFTRSIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJ CQkvKiBTa2lwIGZvciBSRVNUUklDVCwgVU5SRVNUUklDVCwgQ09OTkVDVC4gKi8KKwkJCWlmICgh cm9wdC0+ZmlsZW5hbWUgJiYgdGUgJiYgdGUtPnRhZyAmJgorCQkJCQkoKHN0cmNtcCh0ZS0+dGFn LCAiUkVTVFJJQ1QiKSA9PSAwKSB8fAorCQkJCQkgKHN0cmNtcCh0ZS0+dGFnLCAiVU5SRVNUUklD VCIpID09IDApIHx8CisJCQkJCSAoc3RyY21wKHRlLT50YWcsICJDT05ORUNUIikgPT0gMCkpKQor CQkJCWNvbnRpbnVlOworCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRlKSkKIAkJ CXsKIAkJCQljYXNlIFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzMyLDcgQEAgUHJp bnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlm IChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2Nv bXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29t cHJlc3Npb25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9m KHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNy ZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY5NSw3ICsxNzExLDggQEAgYXJjaHByaW50ZihBcmNoaXZl ICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQog ewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNzE1 LDcgKzE3MzIsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9 PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1v ZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5B UllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCAzMjViNTNmYzliZC4u MzY1MDczYjNlYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5NCw2 ICszOTQsNyBAQCBzdHJ1Y3QgX3RvY0VudHJ5CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9y ZShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRf Y2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9leGl0 X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9leGl0 X2hvcnJpYmx5KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRy aWJ1dGVfcHJpbnRmKDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0 NmRkOS4uODE4YjgwYTkzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgy Niw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBB SC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9y ZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBB SCwgZmFsc2UsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwg c2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDQ3OTEzMTc4YTkzLi4wMGNlOTQ2 YWFiMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVz dG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlLCBmYWxzZSk7 CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGJiNDUxYzFi YWUxLi42MDFiOWY5NzM4ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0zMCw2ICszMCw3IEBACiAj aW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAj aW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIK IAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAjZGVm aW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJT04g IlxuIgpAQCAtNjUsOSArNjYsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29u biAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0 YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29u ZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVt cFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQkJCQkg IGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9p ZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0 YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNv bnN0IGNoYXIgKm9iam5hbWUsCkBAIC03Niw2ICs3OCw5IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVD b21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhw YW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCBy ZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlz dCAqcGF0dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3Qg Y2hhciAqZm9ybWF0KTsKK3N0YXRpYyBpbnQgY3JlYXRlRHVtcElkKHZvaWQpOworc3RhdGljIHZv aWQgY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0 YWcpOwogCiBzdGF0aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIFBRRXhw QnVmZmVyIHBnZHVtcG9wdHM7CkBAIC0xMjMsNiArMTI4LDEzIEBAIHN0YXRpYyBTaW1wbGVTdHJp bmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMg U2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9Owog CiBzdGF0aWMgY2hhciAqcmVzdHJpY3Rfa2V5Oworc3RhdGljIEFyY2hpdmUgKmZvdXQgPSBOVUxM Oworc3RhdGljIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHsw fTsKK3N0YXRpYyBpbnQgZHVtcElkVmFsID0gMDsKK3N0YXRpYyBjb25zdCBDYXRhbG9nSWQgbmls Q2F0YWxvZ0lkID0gezAsIDB9Oworc3RhdGljIEFyY2hpdmVNb2RlIGFyY2hpdmVNb2RlID0gYXJj aE1vZGVXcml0ZTsKK3N0YXRpYyBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCA9IERBVEFf RElSX1NZTkNfTUVUSE9EX0ZTWU5DOworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3Jt YXQgPSBhcmNoTnVsbDsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0x NDgsNiArMTYwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3Jk Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAor CQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAq IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0 aW9uIGxldHRlcgpAQCAtMTk3LDYgKzIxMCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAljaGFyCSAgICpwZ2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJ Y29uc3QgY2hhciAqZHVtcGVuY29kaW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1l ID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJ CWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjA4 LDYgKzIyMiw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQJCQljLAogCQkJ CXJldDsKIAlpbnQJCQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBkb3B0OworCWNoYXIgICAgICAg IGdsb2JhbF9wYXRoW01BWFBHUEFUSF07CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CiAJ cGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjQ2LDcgKzI2Miw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpF OmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEp CisJSW5pdER1bXBPcHRpb25zKCZkb3B0KTsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywg Jm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI1Nyw2ICsyNzUs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ2MnOgogCQkJCW91 dHB1dF9jbGVhbiA9IHRydWU7CisJCQkJZG9wdC5vdXRwdXRDbGVhbiA9IDE7CiAJCQkJYnJlYWs7 CiAKIAkJCWNhc2UgJ2QnOgpAQCAtMjc0LDcgKzI5Myw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwog CQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsK LQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJ CWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVh azsKQEAgLTMxNCw2ICszMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJ CWNhc2UgJ1UnOgogCQkJCXBndXNlciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWRvcHQuY3Bh cmFtcy51c2VybmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNl ICd2JzoKQEAgLTQyOSw2ICs0NTEsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFy Y2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJ ZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZpbGUgbmFtZSBpcyBhbHNvIHJl cXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhlIG1haW4gZGlyZWN0b3J5LgorCSAqLworCWlm IChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChm aWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUYvLS1mb3Jt YXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSIpOworCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwor CQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUg bm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3 aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJp Y3RlZApAQCAtNDg5LDYgKzUyNiwzNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ aWYgKHNlcXVlbmNlX2RhdGEpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIg LS1zZXF1ZW5jZS1kYXRhIik7CiAKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJl cXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3Jl YXRlIG5ldyBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxs KQorCXsKKwkJQXNzZXJ0KGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBv ciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29w ZW5fZGlyKGZpbGVuYW1lKTsKKworCQkvKiBzZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNv bW1hbmRzLiAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCXNucHJp bnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZG1wIiwgZmlsZW5hbWUpOworCQll bHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJc25wcmludGYoZ2xvYmFsX3Bh dGgsIE1BWFBHUEFUSCwgIiVzL3RvYy50YXIiLCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFY UEdQQVRILCAiJXMiLCBmaWxlbmFtZSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJ T1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxl bmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5b3UgZG9u J3QgcHJvdmlkZSBhIHJlc3RyaWN0IGtleSwgb25lIHdpbGwgYmUgYXBwb2ludGVkIGZvciB5b3Uu CiAJICovCkBAIC01MzgsMTkgKzYwNCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5z LAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRo ZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlp ZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwot CQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVz XCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0K IAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAg LTU4NSwzNyArNjM4LDExNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHF1 b3RlX2FsbF9pZGVudGlmaWVycykKIAkJZXhlY3V0ZUNvbW1hbmQoY29ubiwgIlNFVCBxdW90ZV9h bGxfaWRlbnRpZmllcnMgPSB0cnVlIik7CiAKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3Jl U1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CiAJaWYgKHZlcmJvc2UpCiAJCWR1 bXBUaW1lc3RhbXAoIlN0YXJ0ZWQgb24iKTsKIAotCS8qCi0JICogRW50ZXIgcmVzdHJpY3RlZCBt b2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKLQkgKiBt YWxpY2lvdXMgc291cmNlIG1pZ2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2 aWEgYm9ndXMKLQkgKiByZXNwb25zZXMgdG8gcXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2 ZW50IHN1Y2ggc291cmNlcyBmcm9tCi0JICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCBy ZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCi0JICogbWV0YS1jb21tYW5kcyBzbyB0aGF0 IHRoZSBjbGllbnQgbWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCi0JICogb3V0 cHV0IHJlbWFpbnMgdW5hZmZlY3RlZC4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3Qg JXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwkvKiBjcmVhdGUgYSBhcmNoaXZlIGZpbGUgZm9yIGds b2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisJeworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRl QXJjaGl2ZShnbG9iYWxfcGF0aCwgYXJjaER1bXBGb3JtYXQsIGNvbXByZXNzaW9uX3NwZWMsCisJ CQkJZG9zeW5jLCBhcmNoaXZlTW9kZSwgTlVMTCwgc3luY19tZXRob2QpOwogCi0JLyoKLQkgKiBX ZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5v IHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0aW9u cyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVz dG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdlJ3Jl IGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8qIE1ha2UgZHVt cCBvcHRpb25zIGFjY2Vzc2libGUgcmlnaHQgYXdheSAqLworCQlTZXRBcmNoaXZlT3B0aW9ucyhm b3V0LCAmZG9wdCwgTlVMTCk7CisKKwkJKChBcmNoaXZlSGFuZGxlICogKWZvdXQpIC0+Y29ubmVj dGlvbiA9IGNvbm47CisJCSgoQXJjaGl2ZUhhbmRsZSAqICkgZm91dCkgLT4gcHVibGljLm51bVdv cmtlcnMgPSAxOworCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhp dF9jbG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cg bm9pc3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICog V2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5v ciByZWxlYXNlIG9mCisJCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJz aW9uIGNoZWNrIGluIHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJz aW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0g LyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAxOworCisJCWNyZWF0ZU9u ZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4t LVxuXG4iLCAiQ09NTUVOVCIpOworCisJCS8qIGNyZWF0ZSBlbnRyeSBmb3IgcmVzdHJpY3QgKi8K KwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCS8qIFJl c3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmlu dGYoT1BGLCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsK KwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJSRVNUUklDVCIpOwor CQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkZWZhdWx0X3RyYW5zYWN0 aW9uX3JlYWRfb25seSA9IG9mZiAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIGRlZmF1bHRfdHJhbnNhY3Rp b25fcmVhZF9vbmx5ID0gb2ZmIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJTRVQgZGVm YXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG4iKTsKKwkJCWNyZWF0ZU9uZUFyY2hp dmVFbnRyeShxcnktPmRhdGEsICJERUZBVUxUX1RSQU5TQUNUSU9OX1JFQURfT05MWSIpOworCQkJ ZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKworCQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0 aGUgY29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCVBRRXhwQnVm ZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQljb25zdCBjaGFyICplbmNuYW1lID0g cGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CiAKLQkvKiBSZXBsaWNhdGUgZW5jb2Rpbmcg YW5kIHN0ZF9zdHJpbmdzIGluIG91dHB1dCAqLwotCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9l bmNvZGluZyA9ICclcyc7XG4iLAotCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwot CWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xuIiwg c3RkX3N0cmluZ3MpOwotCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQotCQlm cHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKLQlmcHJp bnRmKE9QRiwgIlxuIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50 X2VuY29kaW5nID0gIik7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBm b3V0KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCisJCQlwZ19sb2df aW5mbygic2F2aW5nIGVuY29kaW5nID0gJXMiLCBlbmNuYW1lKTsKKwkJCWNyZWF0ZU9uZUFyY2hp dmVFbnRyeShxcnktPmRhdGEsICJFTkNPRElORyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFy eSk7CisJCX0KKworCQkvKiBkdW1wU3RkU3RyaW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBz dHJpbmcgYmVoYXZpb3IgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpz dGRzdHJpbmdzID0gc3RkX3N0cmluZ3MgPyAib24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBx cnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3Rh bmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXNcIiIsIHN0ZHN0cmluZ3MpOworCQkJYXBwZW5k UFFFeHBCdWZmZXIocXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7 XG4iLAorCQkJCQlzdGRzdHJpbmdzKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRh dGEsICJTVERTVFJJTkdTIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0K KwllbHNlCisJeworCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNs dXN0ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2Rl IHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFs aWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3Mgdmlh IGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZl bnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCBy ZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhh dCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBv dXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3Ry aWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0 IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAq IG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBw b3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUg aXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQg dG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVl ZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQg ZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxp Y2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BG LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2No YXIoZW5jb2RpbmcpKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19z dHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3Ms ICJvZmYiKSA9PSAwKQorCQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5n ID0gb2ZmO1xuIik7CisJCWZwcmludGYoT1BGLCAiXG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25s eSAmJiAhc3RhdGlzdGljc19vbmx5ICYmICFub19zY2hlbWEpCiAJewpAQCAtNjU5LDI3ICs3OTAs NTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNv bm4pOwogCX0KIAotCS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVt cGluZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJl c3RyaWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwg IlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3Qg YmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAorCQkgKiBoYW5kbGUg ZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCQkgKi8KKwkJ ZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9CisJ ZWxzZQorCXsKKwkJLyogY3JlYXRlIGVudHJ5IGZvciB1bnJlc3RyaWN0ICovCisJCVBRRXhwQnVm ZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKLQlpZiAoIWdsb2JhbHNfb25seSAmJiAh cm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsK KwkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0 X2tleSk7CisJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJVTlJFU1RSSUNUIik7 CisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCX0KIAotCVBRZmluaXNoKGNvbm4pOworCWlm ICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQorCQlk dW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAogCWlmICh2ZXJib3NlKQogCQlk dW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAKLQlpZiAo ZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1c blxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlSZXN0b3Jl T3B0aW9ucyAqcm9wdDsKKworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3Jl U1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsK KwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQs ICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1 dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hp dmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9QRik7CiAK IAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0J CWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjkw LDEyICs4NDUsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQK IGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJh c2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50Zihf KCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3Jp cHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNh Z2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAK IAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0t ZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8o IiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3Rv bSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3Nl ICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZl cnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhp dFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBh ZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcwLDYgKzky Nyw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBRRXhwQnVm ZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xuYW1lOwog CWludAkJCWk7CkBAIC03OTEsNyArOTQ5LDEyIEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJ aV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMo cmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOwor CXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIt LVxuLS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtNzk5LDE1ICs5NjIsMjEg QEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVz LCBpLCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAor CQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZf ZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVs UXJ5LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0 YSwgImRyb3BSb2xlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZm ZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04ODksNyAr MTA1OCwxMiBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCWlfaXNfY3VycmVudF91c2VyID0g UFFmbnVtYmVyKHJlcywgImlzX2N1cnJlbnRfdXNlciIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9s ZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBS b2xlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVw bGVzKHJlcyk7IGkrKykKIAl7CkBAIC05OTMsNyArMTE2NywxMCBAQCBkdW1wUm9sZXMoUEdjb25u ICpjb25uKQogCQkJCQkJCSAiUk9MRSIsIHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlcyIpOwogCX0KIAogCS8qCkBA IC0xMDAxLDE1ICsxMTc4LDEzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8g aXQgdGhpcyB3YXkgYmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRp b24gdGhlCiAJICogbmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4t LVxuIik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVz ZXJDb25maWcoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVh cihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZl cihidWYpOwogfQpAQCAtMTA4OCw3ICsxMjYzLDEyIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nv bm4gKmNvbm4pCiAJaV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsK IAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUg bWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7 CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hp cHNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRo ZXNlIEdSQU5UIGNvbW1hbmRzIGluIGFyYml0cmFyeSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAg LTExNjcsNiArMTM0Nyw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJ Y2hhcgkgICAqZ3JhbnRvcjsKIAkJCQljaGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJ CWJvb2wJCWZvdW5kOworCQkJCVBRRXhwQnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOwogCiAJCQkJLyogSWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQg YWdhaW4uICovCiAJCQkJaWYgKGRvbmVbaSAtIHN0YXJ0XSkKQEAgLTEyMjMsOCArMTQwNCw4IEBA IGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUg YWN0dWFsIEdSQU5UIHN0YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7 Ci0JCQkJZnByaW50ZihPUEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRm KE9QRiwgIiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNy ZWFRcnksICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihj cmVhUXJ5LCAiIFRPICVzIiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24g PT0gJ3QnKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04i KTsKIAkJCQlpZiAoZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTI0NSwxMCArMTQyNiwxNSBAQCBk dW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihvcHRidWYsICJTRVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAh PSAnXDAnKQotCQkJCQlmcHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsK IAkJCQlpZiAoZHVtcF9ncmFudG9ycykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAl cyIsIGZtdElkKGdyYW50b3IpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBl bmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7 CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ ZGF0YSk7CisJCQkJZWxzZQorCQkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0 YSwgImR1bXBSb2xlTWVtYmVyc2hpcCIpOwogCQkJfQogCQl9CiAKQEAgLTEyNjAsNyArMTQ0Niw4 IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAog CkBAIC0xMjg4LDcgKzE0NzUsMTIgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJ CQkJCSAgICJPUkRFUiBCWSAxIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXJzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcnNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0t XG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4i LCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsr KQogCXsKQEAgLTEzMTIsMTQgKzE1MDQsMTkgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNv bm4pCiAJCQlleGl0X25pY2VseSgxKTsKIAkJfQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYt PmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9Q RiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1 Zi0+ZGF0YSwgImR1bXBSb2xlR1VDUHJpdnMiKTsKIAogCQlmcmVlKGZwYXJuYW1lKTsKIAkJZGVz dHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BG LCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRm KE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMzMxLDYgKzE1MjgsNyBAQCBkcm9wVGFibGVzcGFj ZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCVBRRXhw QnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkvKgogCSAqIEdldCBhbGwg dGFibGVzcGFjZXMgZXhjZXB0IGJ1aWx0LWluIG9uZXMgKHdoaWNoIHdlIGFzc3VtZSBhcmUgbmFt ZWQKQEAgLTEzNDIsMjAgKzE1NDAsMzEgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikK IAkJCQkJICAgIk9SREVSIEJZIDEiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZw cmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJv cCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eSgiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJ Zm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpzcGNu YW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBUQUJM RVNQQUNFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxF U1BBQ0UgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJ Zm10SWQoc3BjbmFtZSkpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiZHJvcFRhYmxlc3BhY2VzIik7CiAJfQogCiAJUFFj bGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzODIs NyArMTU5MSwxMiBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiT1JE RVIgQlkgMSIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICIt LVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xu LS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CkBAIC0xNDUxLDE0ICsxNjY1LDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nv bm4gKmNvbm4pCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsK IAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UK KwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsK IAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJ UFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDgy LDcgKzE3MDEsMTIgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSBk YXRuYW1lIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxu XG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRl MSlcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBE cm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iLCAi Q09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQog CXsKQEAgLTE0OTcsMTUgKzE3MjEsMjMgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQlzdHJj bXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAmJgogCQkJc3RyY21wKGRibmFtZSwgInBvc3Rn cmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihPUEYsICJEUk9QIERBVEFCQVNFICVzJXM7XG4i LAorCQkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBw ZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKIAkJCQkJaWZf ZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJCWZtdElkKGRibmFtZSkpOworCisJCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRl bFFyeS0+ZGF0YSk7CisJCQllbHNlCisJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ ZGF0YSwgIkRST1BfREFUQUJBU0UiKTsKIAkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZw cmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ ZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTUzMiw3ICsxNzY0LDE4IEBAIGR1bXBV c2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCWNoYXIJICAg KnNhbml0aXplZDsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVl KTsKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIs IHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXpl ZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIl c1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJ ZnJlZShzYW5pdGl6ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxNzg1LDExIEBAIGR1bXBVc2VyQ29u ZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZp Z0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwg dXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIl cyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJ ZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hp dmVFbnRyeShidWYtPmRhdGEsICJkdW1wVXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVz KTsKQEAgLTE2MDgsMTAgKzE4NTUsMTMgQEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4g KmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRzIG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQK LWR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4s IEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWlu dAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtN QVhQR1BBVEhdOworCUZJTEUJICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBk YXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRv IGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE4NzUsNDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkg Ki8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIK KwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFz ZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0y ICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIp OwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0 YWJhc2VzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIiwgIkNPTU1F TlQiKTsKKwl9CisKKwkvKgorCSAqIElmIGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBz cGVjaWZpZWQsIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVj dG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2ls bCBiZSBjcmVhdGVkIGluIHRoYXQgc3ViZGlyZWN0b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBp ZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisgICB7CisJICAgY2hhciAgICAgICAgbWFw X2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJICAgc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BB VEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJl Y3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAg IGlmIChta2RpcihkYl9zdWJkaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdf ZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIp OworCisJICAgc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIs IGZpbGVuYW1lKTsKKworCSAgIC8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBh bmQgZGJuYW1lKSAqLworCSAgIG1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklO QVJZX1cpOworCSAgIGlmICghbWFwX2ZpbGUpCisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9wYXRoKTsKKyAgIH0KIAogCWZvciAoaSA9IDA7 IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2 YWx1ZShyZXMsIGksIDApOwogCQljaGFyCSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNy ZWF0ZV9vcHRzOworCQljaGFyICAgICAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJ CWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lw IHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAg LTE2NTQsNyArMTkzMywxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9n X2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQg PSBzYW5pdGl6ZV9saW5lKGRibmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERh dGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwi JXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVm ZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFy eSwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJ CWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95 UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAt MTY2OSwyNCArMTk1OSw0NiBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJ aWYgKG91dHB1dF9jbGVhbikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsK KwkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11 c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmlu dGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CiAJCQllbHNlCiAJCQl7Ci0JCQkJ Y3JlYXRlX29wdHMgPSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29u bmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNc blxuIiwgZGJuYW1lKTsKKwkJCQlQUUV4cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFt ZSk7CisJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTk5FQ1QiKTsKKwkJ CQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKIAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVf b3B0cyA9ICItLWNyZWF0ZSI7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYg YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBy dW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90 IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJ ICogdGhlIG1hcC5kYXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNo TnVsbCkKKwkJeworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25w cmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJk aXIsIG9pZCk7CisJCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNu cHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3Vi ZGlyLCBvaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwg IlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBl bnRyeSBmb3IgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFw X2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBkYm5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1w KGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYg KHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNc IiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUg JiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCXsKIAkJCU9QRiA9IGZvcGVuKGZpbGVu YW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE2OTUsNiArMjAwNywxMCBAQCBk dW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxl ICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUp OworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNzA0LDcgKzIwMjAsOCBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZp ZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQkgIEFyY2hpdmVGb3Jt YXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFF eHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE3MTMsMTcgKzIwMzAsMzYgQEAgcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVy KCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1 ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0 cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUs IHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0Lgor CSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUg bmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBh cmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJewor CQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVzICVzIiwgcGdfZHVtcF9iaW4s CisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3Jt YXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9t KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIpOwor CQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwg IlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBj cmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhl IHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJCSAqLwor CQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsK KwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJ LyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0 ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xODA3LDcgKzIxNDMsMTggQEAgZHVtcFRpbWVzdGFt cChjb25zdCBjaGFyICptc2cpCiAJdGltZV90CQlub3cgPSB0aW1lKE5VTEwpOwogCiAJaWYgKHN0 cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFBHRFVNUF9TVFJGVElNRV9GTVQsIGxvY2FsdGltZSgm bm93KSkgIT0gMCkKLQkJZnByaW50ZihPUEYsICItLSAlcyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJ eworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0t ICVzICVzXG5cbiIsIG1zZywgYnVmKTsKKwkJZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlcglxcnkg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICItLSAl cyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRh LCAiQ09NTUVOVCIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CiB9CiAK IC8qCkBAIC0xODY4LDMgKzIyMTUsNTQgQEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hh ciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgm ZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2 YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1 bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBG b3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi Y3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJj aERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIp ID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19z dHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxs OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNo RHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi dCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJj YXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsK KwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCBcIiVzXCI7IHBs ZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQkgZm9ybWF0 KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KKworc3RhdGljIGludAorY3JlYXRlRHVt cElkKHZvaWQpCit7CisJcmV0dXJuICsrZHVtcElkVmFsOworfQorCitzdGF0aWMgdm9pZAorY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0YWcpCit7 CisJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8K KwkJCWNyZWF0ZUR1bXBJZCgpLCAvKiBkdW1wIElEICovCisJCQlBUkNISVZFX09QVFMoLnRhZyA9 IHRhZywKKwkJCQkuZGVzY3JpcHRpb24gPSB0YWcsCisJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BS RV9EQVRBLAorCQkJCS5jcmVhdGVTdG10ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmlu ZGV4IGM5Nzc2MzA2YzVjLi4wMjE3NmE3N2JkNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcg KzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5 IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNr dXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9t IGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhl IGFyY2hpdmVyCiAgKglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhl IGJhY2t1cCBhcmNoaXZlIGFuZApAQCAtNDEsMzEgKzQxLDYwIEBACiAjaW5jbHVkZSAicG9zdGdy ZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp ZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5j bHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUg ImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1 ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19i YWNrdXBfdXRpbHMuaCIKIAorCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGlu dAlyZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3Jl T3B0aW9ucyAqb3B0cywKKwkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRh LCBpbnQgbnVtLAorCQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludCByZXN0 b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRp b25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwg Ym9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29u c3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4 Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7Citz dGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJ CQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBT aW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0YWJh c2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBE Yk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07IC8qIG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAog aW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0 czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsK LQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFf b25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJv cnMgPSAwOworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3Qg ZGJfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVf dHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3Rh dGljIGludAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE4LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAs IE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxz LW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsi ZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBO VUxMLCAnTid9LApAQCAtMTQyLDYgKzE3Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAx fSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJp Y3Qta2V5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJh c2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9 CiAJfTsKQEAgLTE3MCw3ICsyMDEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ fQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6 aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6 dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK QEAgLTE5NywxMSArMjI4LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlm IChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVw KG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkg Z2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1 ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAw KQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJy ZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJ aWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkg IFBHX01BWF9KT0JTLApAQCAtMzE2LDYgKzM1MCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQkJCQlleGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJyb3IgPSB0cnVlOwogCQkJ CWJyZWFrOworCQkJY2FzZSA3OgkJCQkvKiBkYXRhYmFzZSBwYXR0ZXJucyB0byBza2lwICovCisJ CQkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJn KTsKKwkJCQlicmVhazsKIAogCQkJY2FzZSA2OgogCQkJCW9wdHMtPnJlc3RyaWN0X2tleSA9IHBn X3N0cmR1cChvcHRhcmcpOwpAQCAtMzQ3LDYgKzM4NCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAm JiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQg LWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRp b24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQor CiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBj b25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00NzIsNiArNTE2 LDEwNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5h bWUpOwogCX0KIAorCS8qCisJICogSWYgbWFwLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVz dG9yZSBhbGwgdGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAsIGJ1dCBza2lwIHJlc3Rv cmluZyB0aG9zZSBtYXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkg Ki8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGlucHV0RmlsZVNwZWMsICJtYXAuZGF0IikgfHwKKwkJCSBmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy50YXIiKSB8fAorCQkJIGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRtcCIpKSkKKwl7CisJCWNoYXIgICAgICAg IGdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIpKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1B WFBHUEFUSCwgIiVzL3RvYy50YXIiLCBpbnB1dEZpbGVTcGVjKTsKKwkJZWxzZSBpZiAoZmlsZV9l eGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCQlzbnByaW50 ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOwor CQllbHNlCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1dEZp bGVTcGVjKTsKKworCQkvKgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qg b3B0aW9ucyB3aXRoIGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAo b3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5vdCBi ZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7 CisJCWVsc2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1MLy0tdXNl LWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1wYWxs IGFyY2hpdmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNwZWNp ZmllZCB1bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlpZiAo IWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJy b3IoIm9wdGlvbiAtQy8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQo IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJ CXBnX2xvZ19lcnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQg dXNpbmcgdGhlaXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJ fQorCisJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlp ZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29iamVj dHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9iYWxzX29ubHkp OworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVzZSBv cHRpb24gLWcvLS1nbG9iYWxzLW9ubHkgd2FzIHNwZWNpZmllZCIpOworCQl9CisJCWVsc2UKKwkJ eworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICovCisJ CQluX2Vycm9ycyA9IHJlc3RvcmVfYWxsX2RhdGFiYXNlcyhpbnB1dEZpbGVTcGVjLCBkYl9leGNs dWRlX3BhdHRlcm5zLAorCQkJCQkJCQkJCQkgb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkv KiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJc2ltcGxlX3N0cmluZ19saXN0X2Rlc3Ryb3ko JmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNlCQkJCQkJLyogcHJvY2VzcyBpZiBtYXAu ZGF0IGZpbGUgZG9lcyBub3QgZXhpc3QuICovCisJeworCQluX2Vycm9ycyA9IHJlc3RvcmVfb25l X2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBnbG9i YWxzX29ubHkpOworCX0KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVy cm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2Fy bmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVy biAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0 cworICoKKyAqIFRoaXMgcmVzdG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKgorICogSWYgZ2xv YmFsc19vbmx5IGlzIHNldCwgdGhlbiBza2lwIERST1AgREFUQUJBU0UgY29tbWFuZHMgZnJvbSBy ZXN0b3JlLgorICovCitzdGF0aWMgaW50IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJz LCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkKK3sKKwlyZXR1 cm4gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2Vycywg YXBwZW5kX2RhdGEsIG51bSwgZ2xvYmFsc19vbmx5KTsKK30KKworLyoKKyAqIHJlc3RvcmVfb25l X2RhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRv Yy5kYXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRv aW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0 IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgaW50IG51 bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5KQor eworCUFyY2hpdmUgICAgKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJjaGl2 ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgs IE5VTEwsIG9wdHMpOwpAQCAtNDc5LDkgKzYyMiwxNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBk b2Vzbid0IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxM IGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQn cyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4K KwkgKiBpdCdzIHN0aWxsIE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBh IG5vLW9wLiBJZiB3ZSBhcmUKKwkgKiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVu IG9ubHkgdXBkYXRlIEFYIGhhbmRsZSBmb3IgY2xlYW51cCBhcworCSAqIHRoZSBwcmV2aW91cyBl bnRyeSB3YXMgYWxyZWFkeSBpbiB0aGUgYXJyYXkgYW5kIHdlIGhhZCBjbG9zZWQgcHJldmlvdXMK KwkgKiBjb25uZWN0aW9uLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGFycmF5IHNsb3QuCiAJICov Ci0Jb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9 PSAwKQorCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOworCWVsc2UKKwkJcmVwbGFjZV9vbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBu b2lzeSB0byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKQEAgLTUwMSwyNSAr NjUwLDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWVsc2UKIAl7CiAJCVByb2Nl c3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJl c3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSwgZ2xvYmFsc19vbmx5KTsKIAl9CiAKLQkvKiBk b25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KLQlpZiAoQUgtPm5fZXJy b3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBB SC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3JzOwogCiAJLyogQUggbWF5IGJl IGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAx IDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVy biBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KQogewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYo XygiJXMgcmVzdG9yZXMgUG9zdGdyZVNRTCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVk IGJ5IHBnX2R1bXAgb3IgcGdfZHVtcGFsbC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygi VXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJv Z25hbWUpOwogCkBAIC01MzcsNiArNjgyLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkg ZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1D LCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIp KTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJy b3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9i YWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJh c2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0 b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAg ICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXBy aW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRl bnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNTUzLDYgKzY5OSw3IEBAIHVzYWdlKGNvbnN0 IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAg ICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0t ZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1v bmx5IHJlc3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtLWVuYWJsZS1yb3ctc2VjdXJpdHkgICAg ICAgIGVuYWJsZSByb3cgc2VjdXJpdHlcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0 YWJhc2U9UEFUVEVSTiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2Uocylc biIpKTsKIAlwcmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIHJlc3RvcmUg b3Igc2tpcCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4iCiAJCQkgIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwogCXByaW50ZihfKCIgIC0taWYt ZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9iamVj dHNcbiIpKTsKQEAgLTU4OCw4ICs3MzUsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkK IAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3Jl IHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1u LCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNp ZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5c biIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9u LCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxuIgorCQkJICJjb21iaW5lZCBhbmQgc3Bl Y2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwog CXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFu ZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwl cz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwl cz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTY5NCwzICs4NDEsNDE1IEBA IHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9u cyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogZmlsZV9leGlz dHNfaW5fZGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBp biB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5f ZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3Ry dWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVm LCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdf ZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJu IChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgor ICogZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIG1hcmsgZm9y IHNraXBwaW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9saXN0IHRoYXQgcGF0dGVybiBt YXRjaCBhbgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0dGVybnMgbGlzdC4KKyAqCisg KiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8gYmUgcmVzdG9yZWQuCisgKgorICov CitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAor CQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJp bmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBR RXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKKworCWlmICghY29ubiAmJiBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0g TlVMTCkKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFNRSBmb3IgLS1l eGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYXRhYmFzZSBjb25uZWN0aW9uIHdoaWxlIGRv aW5nIHBnX3Jlc3RvcmUiKTsKKworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5h bWVzIGFuZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUg ZGJuYW1lIGZyb20gbGlzdC4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxs ID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwt Pm5leHQpCisJeworCQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2Vs bC0+cHRyOworCQlib29sCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJUFFFeHBCdWZmZXIg ZGJfbGl0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29u bihkYl9saXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlz dENlbGwgKnBhdF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0 X2NlbGwgPSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIGFu IGV4YWN0IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkgYSBwYXR0ZXJuCisJCQkgKiBt YXRjaAorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYmlkbmFtZS0+c3RyLCBwYXRfY2Vs bC0+dmFsKSA9PSAwKQorCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkvKiBPdGhlcndp c2UsIHRyeSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9uICovCisJCQll bHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAkJCWRvdGNudDsKKworCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJu KGNvbm4sIHF1ZXJ5LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2UsIE5V TEwsIGRiX2xpdC0+ZGF0YSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7 CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9w ZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJ IGRiaWRuYW1lLT5zdHIpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9uaWNlbHko MSk7CisJCQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsK KworCQkJCWlmICgoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBR bnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJ cGdfbG9nX2luZm8oImRhdGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJu IFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpOworCQkJCX0KKworCQkJCVBR Y2xlYXIocmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYg KHNraXBfZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lQUUV4cEJ1ZmZl cihkYl9saXQpOworCisJCS8qCisJCSAqIE1hcmsgZGIgdG8gYmUgc2tpcHBlZCBvciBpbmNyZW1l bnQgdGhlIGNvdW50ZXIgb2YgZGJzIHRvIGJlCisJCSAqIHJlc3RvcmVkCisJCSAqLworCQlpZiAo c2tpcF9kYl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5nIGRhdGFiYXNl IFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCQkJZGJpZG5hbWUtPm9pZCA9IEludmFsaWRPaWQ7 CisJCX0KKwkJZWxzZQorCQl7CisJCQljb3VudF9kYisrOworCQl9CisJfQorCisJZGVzdHJveVBR RXhwQnVmZmVyKHF1ZXJ5KTsKKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCBy ZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICog bmFtZXMgYW5kIGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51 bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQK K2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwg U2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVi dWY7CisJRklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOwor CWludAkJCWNvdW50ID0gMDsKKworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5k YXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkgKiB0aGVyZSBpcyBu byBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNfaW5fZGlyZWN0 b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFiYXNl IHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3Qg aW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4g MDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0 IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBm b3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkK KwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3Bh dGgpOworCisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUg ZGJuYW1lL2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dl dF9saW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxp ZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJaW50 CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBFeHRyYWN0 IGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnApKQorCQkJcCsr OworCQlpZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsKKwkJCXNzY2FuZihs aW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJuYW1l IGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4gPSBz dHJsZW4oZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZpbGUg aGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwg bmFtZWxlbiA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIg b24gbGluZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCXBnX2xv Z19pbmZvKCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZpbGUgXCIlc1wiIiwK KwkJCQkJZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRiaWRuYW1lID0gcGdf bWFsbG9jKG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJpZG5h bWUtPm9pZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVs ZW4pOworCisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlkbmFt ZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9z ZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRh YmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJl IHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4K KyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBz cGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJu cywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50 CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJ ICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpv cHRzLAorCQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1lX29p ZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJ CQludW1fdG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJaW50CQkJY291bnQgPSAw OworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERhdGEgPSBvcHRz LT5kdW1wRGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlib29s CQlkdW1wU3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25uICpjb25uID0gTlVM TDsKKwljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyogQmFzZWQgb24gZmlsZSwg c2V0IHBhdGguICovCisJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVj LCAidG9jLnRhciIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9j LnRhciIsIGlucHV0RmlsZVNwZWMpOworCWVsc2UgaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eShpbnB1dEZpbGVTcGVjLCAidG9jLmRtcCIpKQorCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFY UEdQQVRILCAiJXMvdG9jLmRtcCIsIGlucHV0RmlsZVNwZWMpOworCWVsc2UKKwkJc25wcmludGYo Z2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZl IGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMt PmNwYXJhbXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsK KworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZp bGVTcGVjLCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJp ZXMsIHJldHVybiBhZnRlciBwcm9jZXNzaW5nIGdsb2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJu YW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVj dHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwLCBmYWxzZSk7CisKKwlw Z19sb2dfaW5mbyhuZ2V0dGV4dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAor CQkJCQkJICJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90 b3RhbF9kYiksCisJCQkJbnVtX3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBl eGNsdWRlLXBhdHRlcm5zIGlzIGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRv IHByb2Nlc3MKKwkgKiBpdC4KKwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9 IE5VTEwpCisJeworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBD b25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMu cGdob3N0LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFt ZSwgVFJJX0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCk7CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3Qg dG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYg KCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJh c2UgXCIlc1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBv c3RncmVzIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMu cGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2Us IHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdpdGggdGVt cGxhdGUxLiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcg dG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJCQljb25u ID0gQ29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9z dCwKKwkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwKKwkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0aGUgZGIgbGlzdCBhY2NvcmRp bmcgdG8gdGhlIGV4Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9k Ym5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJ CQkJIGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rpb24g YXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAoY29ubikK KwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9h cHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0g IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZh bHNlLCAwLCBmYWxzZSk7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVk LiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3Jl ID09IDApCisJeworCQlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVz dG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyBy ZXN0b3Jpbmcgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90 b3RhbF9kYik7CisJCXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygi bmVlZCB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2Ri X3Jlc3RvcmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRh dGFiYXNlcyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRh YmFzZSBzd2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkg Ki8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0Lmhl YWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFt ZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRp cnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNo YXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdu b3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IElu dmFsaWRPaWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92 ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8g YW4gYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlv bikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJ cGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5v dmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBN QVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBM b29rIGZvciB0aGUgZGF0YWJhc2UgZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0u dGFyIG9yCisJCSAqIHtvaWR9LmRtcCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNl IGEgZGlyZWN0b3J5IGNhbGxlZAorCQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxl bmFtZSwgTUFYUEdQQVRILCAiJXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4 aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRm KHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVT cGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1l LCBNQVhQR1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhp c3RzX2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRm KHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVT cGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBN QVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lk KTsKKwkJfQorCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJp ZG5hbWUtPnN0cik7CisKKwkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVu IGRvbid0IHNldCBjcmVhdGVEQiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUp CisJCXsKKwkJCVBHY29ubgkgICAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0 RGF0YWJhc2UoZGJpZG5hbWUtPnN0ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJ CQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9E RUZBVUxULAorCQkJCQkJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCk7CisJCQlpZiAodGVzdF9jb25uKQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisK KwkJCQkvKiBVc2UgYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLwor CQkJCW9wdHMtPmNyZWF0ZURCID0gMDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRu YW1lLT5zdHI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVh dGUgaXQgKi8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5h bWUgPSBjb25uZWN0ZWRfZGI7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAt IG1pZ2h0IGhhdmUgYmVlbiByZXNldCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJ ICogcHJldmlvdXMgcmVzdG9yZS4KKwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7 CisJCW9wdHMtPmR1bXBTY2hlbWEgPSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGlj cyA9IGR1bXBTdGF0aXN0aWNzOworCisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4g Ki8KKwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBu dW1Xb3JrZXJzLCB0cnVlLCAxLCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGln bm9yZWQgZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5f ZXJyb3JzKQorCQl7CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193 YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBk YmlkbmFtZS0+c3RyLCBuX2Vycm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExv ZyBudW1iZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVy IG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBpcyAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZy ZWUgZGJuYW1lIGFuZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KCZk Ym5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAx X2Jhc2ljLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVl NmEuLjU2ZTg5ZGExZTVlCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTIgQEAgY29t bWFuZF9mYWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQg LTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAor Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNl PWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3Jl OiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhj bHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1v bmx5JworKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2lu dGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAog CVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25s eScgXSwKQEAgLTI0NCw0ICsyNTAsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBh bGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0 aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19k dW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5y ZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25p emVkIG91dHB1dCBmb3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdf ZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMC4uM2M3ZDJh ZDdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFs bC5wbApAQCAtMCwwICsxLDM5NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIg PSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdy ZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8gIlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNl IGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0 YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAi JHt0ZW1wZGlyfSR7c2VwfXRibDIiOworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGly ICR0YWJsZXNwYWNlMSAkISI7Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRh Ymxlc3BhY2UyICQhIjsKKworIyBTY2FwZSB0YWJsZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dz LgorJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxc XC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFi bGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19k dW1wYWxsIHdpbGwgYmUgZXhlY3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIERlZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisj CisjIEVhY2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFy ZSB1c2VkIGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFu ZCByZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0Lgor IworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5z IFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRo ZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVz dCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0 aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBt dXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRo YXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIg aXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1 dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNl cyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMi IHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3Jl X3JvbGVzID0+IHsKKwkJc2V0dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRI IEVOQ1JZUFRFRCBQQVNTV09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBk dW1wYWxsMiBXSVRIIFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJ CQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypc UUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lU SCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQ TElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAor CisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJP TEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRh Ymxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04g JyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+ IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3Fs IiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJF IiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcg b24KKwkJIyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFD RSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJ CVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJ L3htLAorCX0sCisKKwlyZXN0b3JlX2dyYW50cyA9PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNS RUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKKwkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlD UkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkg UkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4KKwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBs cGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOworCQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNS RUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBn cmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlD UkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBST0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFC TEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJU IE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0 IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50 c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBU TyBncmFudDU7CisJCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJp YWwgVE8gZ3JhbnQ2OworCQlHUkFOVCBzdXBlciBUTyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUg T04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7CisJCSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdw Z19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJ CQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIv cmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBl ciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJ CQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4p KgorCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUK KwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBU TyBncmFudDY7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVi bGljLnQgVE8gZ3JhbnQxO1xFCisJCQlcblxRR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50 IFRPIGdyYW50MjtcRQorCQkJXG5cUUdSQU5UIEFMTCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFu dDM7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFT RSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUKKwkJL3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0 YWJhc2VzID0+IHsKKwkJc2V0dXBfc3FsID0+ICdDUkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBk YjEKKwkJQ1JFQVRFIFRBQkxFIHQxIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQyIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNF IGRiMjsKKwkJXGMgZGIyCisJCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDMgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNS RUFURSBEQVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJleDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVB VEUgVEFCTEUgdDYgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwg KDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVB VEUgVEFCTEUgdDcgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwg KDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDgg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlc YyBkYjUKKwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxV RVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJ TlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4 Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYmV4KicsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJ CSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhj bHVkZS1kYXRhYmFzZScgPT4gJ2RiNScsCisJCQkiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNl cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQor CQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikq CisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFD UkVBVEUgREFUQUJBU0UgZGIyXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQzIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94 bSwKKwkJdW5saWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSgu KlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJ XG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRF IERBVEFCQVNFIGRiNFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 NyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJ XG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDkgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 MTAgKFxFCisJCS94bSwKKwl9LAorCisJZm9ybWF0X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3Nx bCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0 ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICdu YW1lMScpLCAoMiwgZmFsc2UsICduYW1lMicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19k dW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAi JHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJ CSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGly L2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMu Zm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0 X3RhciA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQs IGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEs IGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsK KwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdw Z19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAor CQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykg RlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9 PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9jdXN0b20oYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsK KwkJSU5TRVJUIElOVE8gZm9ybWF0X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwg KDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywK KwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2N1c3RvbSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywg Jy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZm9ybWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQld LAorCQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMp IEZST00gc3RkaW47L3htCisJfSwKKworCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBf c3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFuLCBjIHRleHQp OworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAo MiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAor CQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWdsb2JhbHMtb25seScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlyZXN0b3Jl X2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsICctLWdsb2JhbHMtb25seScsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBf Z2xvYmFsc19vbmx5LnNxbCIsCisJCQkiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQld LAorCQlsaWtlID0+IHFyLworICAgICAgICAgICAgXlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtc RVxzKlxuCisJCQkveG0KKwl9LCk7CisKKyMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitm b3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1 bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pCisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRy dW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOworCX0KK30KKworIyBF eGVjdXRlIHRoZSB0ZXN0cworZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9y dW5zKQoreworCSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFj aCB0ZXN0IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9m IHRoZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4K KwlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdl dF8kcnVuIik7CisJJHRhcmdldF9ub2RlLT5pbml0OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisK KwkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRw Z2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBy dW5zIik7CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgor CW15IEByZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9y ZV9jbWR9IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFy Z2V0X25vZGUtPnBvcnQpOworCisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQo XEByZXN0b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15 ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlm ICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxf cnVuc3skcnVufS0+e3VubGlrZX0pKQorCXsKKwkJZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwi dW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1biIpOworCX0KKworCWlmICgkcGdkdW1wYWxs X3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJdW5saWtlKAorCQkJJG91dHB1dF9maWxlLAor CQkJJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAg JHJ1biIpOworCX0KK30KKworIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3 aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwK KyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVt cGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTog ZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3Jp bmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90 IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3Qg Y2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0 ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAor CQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwld LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1 c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAor CSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwnKTsKKworIyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4g d2l0aCAtZCBvcHRpb24KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVz dG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9 PiAnY3VzdG9tJywKKwkJJy1kJyA9PiAnZGJwcScsCisJXSwKKwlxci9cUUZBVEFMOiAgZGF0YWJh c2UgImRicHEiIGRvZXMgbm90IGV4aXN0XEUvLAorCSdXaGVuIG5vbi1leGlzdGVudCBkYXRhYmFz ZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19k dW1wYWxsJworKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjM5LjMKCg== --000000000000ec74690642af61f8--