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 1tckJB-002MR5-TK for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jan 2025 12:03:10 +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 1tckJA-000i5D-KU for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jan 2025 12:03:08 +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 1tckJA-000i54-4R for pgsql-hackers@lists.postgresql.org; Tue, 28 Jan 2025 12:03:08 +0000 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tckJ6-001x6Q-2U for pgsql-hackers@lists.postgresql.org; Tue, 28 Jan 2025 12:03:07 +0000 Received: by mail-qt1-x834.google.com with SMTP id d75a77b69052e-4679eacf25cso31699161cf.3 for ; Tue, 28 Jan 2025 04:03:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738065783; x=1738670583; 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=uLzEBe2ka+iORxJme7W+OezemXKZPLetY0ON7lfycW8=; b=kcCAVY/P+dAhvV4s/M0FxIfzNhjZUaCuXabT5xGeig7mI4eg5fL7VboKYffcjlexzR LvZE7zA2+BXZdrqZWvD+skigrxJtzHrEDP3r0S+2RHnMzOaE4gRg9GCfMdc5m1yaIyQ3 39SXR2Ouj/NG5jQNjA5UhSEe5AulYaUIZ7RHPyvAZ2zm7gcZhjmSbeFh+jZbv8XxmDJC JnqdMybY14mNPzpJtzGlSRa6zhZDF67g/YZ2lQwPc7C0OFcyiJDUivCJXNZZy60kW8Fh dtS3BVJpH0UsnuFP0dAiH8ybqmEQxxVql86kxtftdB5IfLmMOPrXbOEHyd3mJKHNLWLZ 7bXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738065783; x=1738670583; 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=uLzEBe2ka+iORxJme7W+OezemXKZPLetY0ON7lfycW8=; b=dDqP8W5xl8IqbM1BCNhYk8hzrQjs8zBeO3E8RIZclo62Grs8pSh1B0reKF2xi08ZGG q9i2k/9q7mKbcp42UtahPP6xRynT/sXbMvj5l8bailRwoPxuXtpTU4fsX41JddXyECn5 L/t6wmdDzxNNQxaUDpA4UOx2osbA683S5d5Bp2gG8pWDeecZZ8Ynvc9KzMZobpTF//Em 7bV35Qb2qZJsgwFRLBrcdh8vM/IVp3neS2/ZcKhLKgFEHu3Y/D2+V5J2o2b/1U6HM8N6 WdT45prM9OJ8BYZUxSpjq/yrNz5lMiy21NHYcATwY7099Yv56C96Rp2tvLpoYunxA2H6 tJvg== X-Gm-Message-State: AOJu0YzIKbk0FIC8PapwDgrBGr2fH0hUwX5YkxHey22YcNJjBLe2xQU0 EZSebeo9NNyPJq0a5J9rczM4HXphTK+9DC0altJq5N7FgRYgpCX6wBLcS2FAcBZAQZUgkZg/WMO 2qXuX8QMuQMVYSy2UCVX6HA5o+5A= X-Gm-Gg: ASbGncvRi9JJIDgDhYqy46dLHdTc7D08hLbrb6Gt7aQ0i6IYHpZPnxSmPJb3oMDurXv Z1DmcXUOHRe6kuKqGjOEWhvzq2n5GWVASJav7nYy2ZTFEv8ppA+Bz4NOZTTjb08VqKL/HIy8hJA == X-Google-Smtp-Source: AGHT+IFdCy37yVhRWO9+nKp6KAtx1HY9ZfAPOgk2lNbuwgwTahpKG1Qwf/nBGd3KTFR9ZYTJMgTlupTCt2KPNesqbKo= X-Received: by 2002:a05:622a:3cb:b0:467:86fa:6b72 with SMTP id d75a77b69052e-46e12a5549bmr642843321cf.12.1738065783391; Tue, 28 Jan 2025 04:03:03 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 28 Jan 2025 17:32:51 +0530 X-Gm-Features: AWEUYZlTtB7Qnlm3dP872RjpgHJZ2Nw25P3x-pI2iocMfZJkBbvc0fQkByyuPBA Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Srinath Reddy Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000009dc938062cc2f966" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009dc938062cc2f966 Content-Type: multipart/alternative; boundary="0000000000009dc937062cc2f964" --0000000000009dc937062cc2f964 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 24 Jan 2025 at 20:50, jian he wrote: > > On Thu, Jan 23, 2025 at 6:35=E2=80=AFPM Mahendra Singh Thalor > wrote: > > hi. > After some tests and thinking about your reply, I admit that using > expand_dbname_patterns > in pg_restore will not work. > We need to do pattern matching against the map.dat file. > Please check the attached v12 series based on your > v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch > > v12-0001 cosmetic change. > v12-0002 implement pg_resore --exclude-database=3DPATTERN. > main gist of implementation: > for each database name in map.dat file, > check if this database name pattern matches with PATTERN or not. > pattern matching is using processSQLNamePattern. > > your substring will not work. > some of the test cases. > $BIN10/pg_restore --exclude-database=3D* -Cd template1 --verbose dir10 > > dir_format 2>&1 > $BIN10/pg_restore --exclude-database=3D*x* -Cd template1 --verbose dir10 > > dir_format 2>&1 > $BIN10/pg_restore --exclude-database=3D?* -Cd template1 --verbose dir10 > > dir_format 2>&1 I merged v12_0001 into the latest patch. There was one bug in v12_001* which was fixed in v12_0002*. -extern PGconn **connectDatabase*(const char *dbname, > - const char *connection_string, const char *pghost, > - const char *pgport, const char *pguser, > - trivalue prompt_password, bool fail_on_error, > - const char *progname, const char **connstr, int *server_version); > +extern PGconn *v(const char *dbname, const char *connection_string, cons= t > char *pghost, As per v12_0002*, I made some changes into the current patch to avoid using the substring function. On Tue, 28 Jan 2025 at 11:57, Mahendra Singh Thalor wrote: > > On Tue, 28 Jan 2025 at 10:19, Srinath Reddy wrote= : > > > > > > Hi mahendra, > > > > I have reviewed the code in the v11 patch and it looks good to me. > > > > But in common_dumpall_restore.c there's parseDumpFormat which is common between pg_dumpall and pg_restore ,as per the discussion in [1] thread i don't think we should create a common api ,as discussed in the thread there might chances in the future we might decide that some format is obsolete and desupport it in pg_dumpall ,while support in pg_restore for compatibility reasons. Fixed. In the latest patch, I removed the parseDumpFormat function. In older versions, I was using the same function for pg_dumpall and pg_restore but now some common code is already committed from this patch and as per discussion, we will keep separate handling for parsing so adding parseDumpFormat function only in pg_dumpall.c file. On Sun, 26 Jan 2025 at 20:17, jian he wrote: > > hi. > attached patching trying to refactor ReadOneStatement > for properly handling the single and double quotes. > the commit message also has some tests on it. > > it is based on your > v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch. Okay. I am doing some more testing and code review for this type of test cases. I will merge this delta into the next version. > > > > Oaky. Thanks for review. I will make changes as per discussion in > another thread. > > > On Tue, 28 Jan 2025 at 11:52, Srinath Reddy wrote= : > > > > make check-world fails,i think we don't need $port and $filename instead we can use something like 'xxx'.so fixed it in the below patch. > > In offline discussion, Andew already reported this test case. I will > fix this in the next version. > Fixed. Thanks Jian and Srinath for the testing and review. Here, I am attaching an updated patch for review and testing. I merged some of the delta patches that are shared by Jian and did some fixes also. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000009dc937062cc2f964 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Fri, 24 Jan 2025 at 20:50, jian he <jian.universality@gmail.com> wrote:>
> On Thu, Jan 23, 2025 at 6:35=E2=80=AFPM Mahendra Singh Thalo= r
> <mahi6run@gmail.com&= gt; wrote:
>
> hi.
> After some tests and thinking about = your reply, I admit that using
> expand_dbname_patterns
> in pg= _restore will not work.
> We need to do pattern matching against the = map.dat file.
> Please check the attached v12 series based on your> v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch
><= br>> v12-0001 cosmetic change.
> v12-0002 implement pg_resore --ex= clude-database=3DPATTERN.
> main gist of implementation:
> for = each database name in map.dat file,
> check if this database name pat= tern matches with PATTERN or not.
> pattern matching is using process= SQLNamePattern.
>
> your substring will not work.
> some = of the test cases.
> $BIN10/pg_restore --exclude-database=3D* -Cd tem= plate1 --verbose dir10 >
> dir_format 2>&1
> $BIN10/p= g_restore --exclude-database=3D*x* -Cd template1 --verbose dir10
> &g= t; dir_format 2>&1
> $BIN10/pg_restore --exclude-database=3D?*= -Cd template1 --verbose dir10
> > dir_format 2>&1

=
I merged v12_0001 into the latest patch. There was one bug in v1= 2_001* which was fixed in v12_0002*.

-extern PGconn *connectDatabase(con= st char *dbname,
- const char *connection_string, const char *pghost,- const char *pgport, const char *pguser,
- trivalue prompt_password= , bool fail_on_error,
- const char *progname, const char **connstr, int= *server_version);
+extern PGconn *v(const char *dbname, const char *con= nection_string, const char *pghost,

As per = v12_0002*, I made some changes into the current patch to avoid using the su= bstring function.

On Tue, 28 Jan 2025 at 11:57, Mahendra Sing= h Thalor <mahi6run@gmail.com&g= t; wrote:
>
> On Tue, 28 Jan 2025 at 10:19, Srinath Reddy <<= a href=3D"mailto:srinath2133@gmail.com">srinath2133@gmail.com> wrote= :
> >
> >
> > Hi mahendra,
> >
> = > I have reviewed the code in the v11 patch and it looks good to me.
= > >
> > But in common_dumpall_restore.c there's =C2=A0pa= rseDumpFormat which is common between pg_dumpall and pg_restore ,as per the= discussion in [1] thread i don't think we should create a common api ,= as discussed in the thread there might chances in the future we might decid= e that some format is obsolete and desupport it in pg_dumpall ,while suppor= t in pg_restore for compatibility reasons.

Fixed. = In the latest=C2=A0patch, I removed the parseDumpFormat function.
In older versions, I was using the same function for pg_dumpall and pg_res= tore but now some common code is already committed=C2=A0from this patch and= as per discussion, we will keep separate=C2=A0handling for parsing so addi= ng parseDumpFormat function only in pg_dumpall.c file.

=
On Sun, 26 Jan 2025 at 20:17, jian he <jian.universality@gmail.com> wrote:
>
&g= t; hi.
> attached patching trying to refactor ReadOneStatement
>= ; for properly handling the single and double quotes.
> the commit me= ssage also has some tests on it.
>
> it is based on your
>= ; v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch.
<= br>
Okay. I am doing some more testing and code review for this t= ype of test cases. I will merge this delta into the next version.

> >
>
> Oaky. Thanks for review. I will make changes= as per discussion in
> another thread.
>
>
> On Tu= e, 28 Jan 2025 at 11:52, Srinath Reddy <srinath2133@gmail.com> wrote:
> >
> > mak= e check-world fails,i think we don't need $port and $filename instead w= e can use something like 'xxx'.so fixed it in the below patch.
&= gt;
> In offline discussion, Andew already reported this test case. I= will
> fix this in the next version.
>
Fixed.
Thanks Jian and Srinath for the testing and review.

Here, I am atta= ching an updated patch for review and testing.

I merged some of the = delta patches that are shared by Jian and did some fixes also.
--
Thanks and Regards
Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com
--0000000000009dc937062cc2f964-- --0000000000009dc938062cc2f966 Content-Type: application/octet-stream; name="v13_pg_dumpall-with-directory-tar-custom-format-28-jan.patch" Content-Disposition: attachment; filename="v13_pg_dumpall-with-directory-tar-custom-format-28-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6gfaljw0 RnJvbSBlNDIyYWE2MGM5OWMxZmM0NDU3ODc0MTU5NGM1MmMzMDM1OWIxMTJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAyOCBKYW4gMjAyNSAwMzozMzo1MSAtMDgwMApTdWJqZWN0OiBbUEFU Q0hdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJlc3Rv cmUgIGl0IAogYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1m b3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkp CgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1l CkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdf ZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoK Z2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0 Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2Vz IGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9p ZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3Jt YXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRlZCwg cmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3RvcmUg LS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81CiAg IC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBkYm9p ZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9u cyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJO ICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBn aXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywg bm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmll ZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpm b3IgZ2xvYmFsLmRhdCBhbmQgbWFwLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGJv dGggZmlsZXMgYXJlIGV4aXN0cyBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwg Z2xvYmFscyBmcm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9u ZSBieSBvbmUKZnJvbSBtYXAuZGF0IGxpc3QuCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCmFzIG9mIG5vdywgU0VM RUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xM QVRFIHBnX2NhdGFsb2cuZGVmYXVsdAoKVE9ETzI6IFdlIG5lZWQgdG8gbWFrZSBjaGFuZ2VzIGZv ciBleGl0X25pY2VseSBhcyB3ZSBhcmUgb25lIGVudHJ5IGZvciBlYWNoIGRhdGFiYXNlIHdoaWxl CnJlc3RvcmluZy4gTUFYX09OX0VYSVRfTklDRUxZCgpUT0RPMzogc29tZSBtb3JlIHRlc3QgY2Fz ZXMgZm9yIG5ldyBhZGRlZCBvcHRpb25zLgoKVE9ETzQ6IFdlIGNhbiBkdW1wIGFuZCByZXN0b3Jl IGRhdGFiYXNlcyBpbiBwYXJhbGxlbCBtb2RlLgpUaGlzIG5lZWRzIG1vcmUgc3R1ZHkKCnRocmVh ZDoKaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS1l0TkFwOXZP dHlkWEwzX3BuR0olMkJUZXRadE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4UGclNDBtYWlsLmdtYWls LmNvbSMwNjY0MzNjYjVhZTAwN2NiZTM1ZmVmZGRmNzk2ZDUyZgoKOnEKLS0tCiBkb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgICAgIHwgIDc4ICsrKy0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgMjkgKysKIHNyYy9iaW4vcGdfZHVtcC9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmMgfCAyODEgKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAgICAg ICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICAgICB8 ICAxNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgICAgICB8ICAgMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgICAgICB8ICAgMyArLQogc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDU1MCArKysrKysrKysrKy0tLS0tLS0t LS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgICAgICB8IDcyOCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwgICAgICAgICAgIHwgIDExICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgIHwgICAyICsKIDE1IGZpbGVzIGNoYW5nZWQsIDE0MTYgaW5zZXJ0aW9ucygrKSwgMzIz IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t bW9uX2R1bXBhbGxfcmVzdG9yZS5oCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYv cGdfZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXgg MzlkOTNjMi4uNDI5ODA4MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxs LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTEyMSw3ICsx MjEsODMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAg IFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwg dGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgotICAgICAgIDwvcGFyYT4KKyAg ICAgICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIGJlIG9taXR0ZWQgb25seSB3aGVuIDxvcHRpb24+ LS1mb3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LUYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFj ZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkg Zm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJZiB3ZSB3YW50IHRvIGR1bXAgYWxsIHRoZSBkYXRhYmFz ZXMsCisgICAgICAgIHRoZW4gcGFzcyB0aGlzIGFzIG5vbi1wbGFpbiBzbyB0aGF0IGR1bXAgb2Yg YWxsIGRhdGFiYXNlcyBjYW4gYmUgdGFrZW4KKyAgICAgICAgaW4gc2VwYXJhdGUgc3ViZGlyZWN0 b3J5IGluIGFyY2hpdmUgZm9ybWF0LgorICAgICAgICBieSBkZWZhdWx0LCB0aGlzIGlzIHBsYWlu IGZvcm1hdC4KKworICAgICAgICBJZiBub24tcGxhaW4gbW9kZSBpcyBwYXNzZWQsIHRoZW4gZ2xv YmFsLmRhdCAoZ2xvYmFsIHNxbCBjb21tYW5kcykgYW5kCisgICAgICAgIG1hcC5kYXQoZGJvaWQg YW5kIGRibmFtZXMgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcykgZmlsZXMgd2lsbCBiZSBjcmVh dGVkLgorICAgICAgICBBcGFydCBmcm9tIHRoZXNlIGZpbGVzLCBvbmUgc3ViZGlyZWN0b3J5IHdp dGggZGF0YWJhc2VzIG5hbWUgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBVbmRlciB0aGlzIGRh dGFiYXNlcyBzdWJkaXJlY3RvcnksIHRoZXJlIHdpbGwgYmUgZmlsZXMgd2l0aCBkYm9pZCBuYW1l IGZvciBlYWNoCisgICAgICAgIGRhdGFiYXNlIGFuZCBpZiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRp b24+IGlzIGRpcmVjdG9yeSwgdGhlbiB0b2MuZGF0IGFuZCBvdGhlcgorICAgICAgICBkdW1wIGZp bGVzIHdpbGwgYmUgdW5kZXIgZGJvaWQgc3ViZGlyZWN0b3J5LgorCisgICAgICAgPHZhcmlhYmxl bGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICAgT3V0cHV0IGEgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1 dCBpbnRvIHBnX3Jlc3RvcmUuIFVuZGVyIGRib2lkCisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwg dGhpcyB3aWxsIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxl IGFuZCBsYXJnZQorICAgICAgICAgICBvYmplY3QgYmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2Fs bGVkIFRhYmxlIG9mIENvbnRlbnRzIGZpbGUgZGVzY3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAg ICAgIG9iamVjdHMgaW4gYSBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUg Y2FuIHJlYWQuIEEgZGlyZWN0b3J5IGZvcm1hdAorICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBt YW5pcHVsYXRlZCB3aXRoIHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBp biBhbgorICAgICAgICAgICB1bmNvbXByZXNzZWQgYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3 aXRoIHRoZSBnemlwLCBsejQsIG9yIHpzdGQgdG9vbHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0 IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCB1c2luZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBh cmFsbGVsIGR1bXBzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUg KHRoZSBkZWZhdWx0KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgor ICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAg ICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0 ZXJhbD5jdXN0b208L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3Vp dGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAg ICAgICAgZGlyZWN0b3J5IG91dHB1dCBmb3JtYXQsIHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUg b3V0cHV0IGZvcm1hdCBpbiB0aGF0IGl0IGFsbG93cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0 aW9uIGFuZCByZW9yZGVyaW5nIG9mIGFyY2hpdmVkIGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlz IGZvcm1hdCBpcyBhbHNvCisgICAgICAgICAgIGNvbXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAg ICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jl c3RvcmUuIFRoZSB0YXIgZm9ybWF0IGlzCisgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUg ZGlyZWN0b3J5IGZvcm1hdDogZXh0cmFjdGluZyBhIHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNl cyBhIHZhbGlkCisgICAgICAgICAgIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwg dGhlIHRhciBmb3JtYXQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAg ICAgICAgd2hlbiB1c2luZyB0YXIgZm9ybWF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBk YXRhIGl0ZW1zIGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyByZXN0b3JlLgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBi OGIyN2UxLi5iYTI5MTNiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTY3LDYgKzE2 NywyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgPC92YXJsaXN0ZW50cnk+CiAK ICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFi YXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAg ICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUK KyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBU aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxh Y2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFj Y29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFu ZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNv IG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRj YXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRj YXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQg dG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRy eT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48 b3B0aW9uPi0tZXhpdC1vbi1lcnJvcjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4K QEAgLTMxNiw2ICszMzUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCiAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1n PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVz dG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRh YmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlz dGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3Bn X2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNS4uYTRlNTU3ZCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtNDcs MTEgKzQ3LDExIEBAIGFsbDogcGdfZHVtcCBwZ19yZXN0b3JlIHBnX2R1bXBhbGwKIHBnX2R1bXA6 IHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQubyAkKE9CSlMpIHwgc3VibWFrZS1saWJw cSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdT KSBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChPQkpTKSAkKExERkxBR1MpICQo TERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5v ICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdm ZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykg JChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQorcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5v IGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtl LWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0 b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxB R1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX2R1bXBhbGw6IHBnX2R1bXBhbGwubyBkdW1w dXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJw Z3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgcGdfZHVtcGFsbC5v IGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdTX0VY KSAkKExJQlMpIC1vICRAJChYKQorcGdfZHVtcGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5v IGZpbHRlci5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2Ut bGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENG TEFHUykgcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vIGNvbW1vbl9kdW1wYWxsX3Jl c3RvcmUubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAk QCQoWCkKIAogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCiAJJChJTlNUQUxMX1BST0dSQU0pIHBn X2R1bXAkKFgpICckKERFU1RESVIpJChiaW5kaXIpJy9wZ19kdW1wJChYKQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNDQ2ZjMyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiB0aGlzIGlzIGEgY29tbW9uIGZpbGUgZm9yIHBnX2R1bXBhbGwg YW5kIHBnX3Jlc3RvcmUuCisgKiBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9y ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2Zl LmgiCisKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dn aW5nLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuaCIKKyNpbmNsdWRlICJkdW1wdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGls cy9zdHJpbmdfdXRpbHMuaCIKKworc3RhdGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3Qg Y2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKTsKKyNkZWZpbmUgZXhpdF9uaWNl bHkoY29kZSkgZXhpdChjb2RlKQorCisvKgorICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24g d2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBw cm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCisgKgorICogSWYgZmFp bF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkg bWVzc2FnZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29y ZCBmb3IgdGhlIG5leHQgdHJ5LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFi bGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCisgKiBjb250YWluaW5n IHRoZSBvcHRpb25zIHVzZWQuCisgKi8KK1BHY29ubiAqCitjb25uZWN0RGF0YWJhc2UoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKKwkJCQljb25zdCBj aGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJ CXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLCBjb25zdCBjaGFy ICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lv bikKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7CisJY29uc3QgY2hhciAq cmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwljb25zdCBjaGFyICoqa2V5 d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOworCVBRY29ubmluZm9P cHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsK KwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBU UklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29y ZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50 aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICov CisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29u bl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQlpID0gMDsKKworCQlm cmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5pbmZvRnJlZShjb25uX29w dHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVu IGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90aGVyIG9wdGlvbnMuICBF eHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKKwkJICogY29ubmVjdGlv biBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQK KwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KKwkJ ICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29ubl9vcHRzID0gUFFjb25u aW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJCQlpZiAoY29ubl9vcHRz ID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisKKwkJCWZvciAoY29ubl9v cHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJ CQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9 ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkK KwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdj b3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBj b25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJ CQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcg JiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQl7 CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJCQkJCXZhbHVlc1tpXSA9 IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7 CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdv cmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2 YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImhv c3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3BvcnQp CisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVzW2ldID0gcGdwb3J0Owor CQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInVzZXIi OworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJCWlmIChwYXNzd29yZCkK KwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFsdWVzW2ldID0gcGFzc3dv cmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAi ZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsKKwkJfQorCQlrZXl3b3Jk c1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFsdWVzW2ldID0gcHJvZ25h bWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25uID0gUFFjb25uZWN0ZGJQ YXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFjb25uKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CisKKwkJ aWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJCQlQUWNvbm5lY3Rpb25O ZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJCXByb21wdF9wYXNzd29y ZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJcGFzc3dvcmQgPSBzaW1w bGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bhc3MgPSB0cnVlOworCQl9 CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tl bmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlpZiAoUFFzdGF0dXMoY29u bikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9lcnJvcikKKwkJCXBnX2Zh dGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQorCQl7CisJCQlQUWZpbmlz aChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZhbHVlcyk7CisJCQlQUWNv bm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCS8q CisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVz ZWQsIGluIHRoZSBmb3JtIG9mIGEKKwkgKiBjb25uZWN0aW9uIHN0cmluZy4KKwkgKi8KKwlpZiAo Y29ubnN0cikKKwkJKmNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMp OworCisJZnJlZShrZXl3b3Jkcyk7CisJZnJlZSh2YWx1ZXMpOworCVBRY29ubmluZm9GcmVlKGNv bm5fb3B0cyk7CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJcmVtb3RldmVyc2lvbl9zdHIgPSBQ UXBhcmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKKwlpZiAoIXJlbW90ZXZl cnNpb25fc3RyKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwor CXNlcnZlcl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24oY29ubik7CisJaWYgKHNlcnZl cl92ZXJzaW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIg dmVyc2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisKKwkvKiBJZiBuZWVk ZWQsIHRoZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXRlciBmdW5jdGlvbi4gKi8KKwlpZiAo c2VydmVyX3ZlcnNpb24pCisJCSpzZXJ2ZXJfdmVyc2lvbiA9IHNlcnZlcl92ZXJzaW9uX3RlbXA7 CisKKwlteV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07CisKKwkvKgorCSAqIFdlIGFsbG93IHRo ZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBv ZgorCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGlu IHBnX2R1bXAuYy4pCisJICovCisJaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb25fdGVt cAorCQkmJiAoc2VydmVyX3ZlcnNpb25fdGVtcCA8IDkwMjAwIHx8CisJCQkoc2VydmVyX3ZlcnNp b25fdGVtcCAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIik7CisJCXBnX2xv Z19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAorCQkJ CQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7CisJCWV4aXRfbmlj ZWx5KDEpOworCX0KKworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVf U0VBUkNIX1BBVEhfU1FMKSk7CisKKwlyZXR1cm4gY29ubjsKK30KKworLyogLS0tLS0tLS0tLQor ICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5d29yZC92 YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBvcHRpb25z IHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXJhbWV0 ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19kdW1wIGlu dm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBwYXNzd29y ZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIC0gd2Un bGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBjaGFyICoK K2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFs dWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hhcgkg ICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7CisKKwkv KiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0 LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKKwl7CisJCWlmIChz dHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29yZHNb aV0sICJwYXNzd29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNr X2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdGtl eXdvcmQpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOworCQlmaXJzdGtleXdv cmQgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0p OworCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisKKwljb25uc3RyID0g cGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJcmV0dXJu IGNvbm5zdHI7Cit9CisKKy8qCisgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBl eGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdyZXN1bHQgKgorZXhlY3V0ZVF1ZXJ5KFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJ cGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9IFBRZXhlYyhjb25u LCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19U VVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9y TWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBx dWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlyZXR1 cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMWMwMAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKQEAgLTAsMCArMSwyNCBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisg KiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9yZQor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElP TgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSAor I2RlZmluZSBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gKKworI2luY2x1ZGUgInBnX2JhY2t1cC5o IgorCitleHRlcm4gUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRy aXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNv bnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVy c2lvbik7CitleHRlcm4gIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICpxdWVyeSk7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTU1P Tl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDYwM2JhNmMuLmRkZWNh YzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTQ5LDYgKzQ5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdf ZHVtcAogCiBwZ19kdW1wYWxsX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2R1bXBhbGwuYycsCisg ICdjb21tb25fZHVtcGFsbF9yZXN0b3JlLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2lu ZG93cycKQEAgLTY4LDYgKzY5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcGFsbAogCiBwZ19y ZXN0b3JlX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX3Jlc3RvcmUuYycsCisgICdjb21tb25fZHVt cGFsbF9yZXN0b3JlLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXAuaAppbmRleCBmMGYxOWJiLi42NTAwMGU1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMDYs NyArMzA2LDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1 bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vz c0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0 b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNo aXZlICovCiBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKQEAgLTMxOSw3ICszMTksNyBAQCBleHRlcm4gQXJj aGl2ZSAqQ3JlYXRlQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZv cm1hdCBmbXQsCiAJCQkJCQkJICBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCk7CiAKIC8q IFRoZSAtLWxpc3Qgb3B0aW9uICovCi1leHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2 ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wg YXBwZW5kX2RhdGEpOwogCiBleHRlcm4gUmVzdG9yZU9wdGlvbnMgKk5ld1Jlc3RvcmVPcHRpb25z KHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNzA3YTNmYy4u NzE1M2Q0YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODIsNyArODIs NyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsK IHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0z MzMsNyArMzMzLDcgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgp CiAKIC8qIFB1YmxpYyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVz dG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVI YW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0 ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtNDUwLDcgKzQ1MCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+Zmls ZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJ T05fTk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Np b25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNz aW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVT UUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTEyNjMsNyArMTI2Myw3IEBAIEFyY2hp dmVFbnRyeShBcmNoaXZlICpBSFgsIENhdGFsb2dJZCBjYXRhbG9nSWQsIER1bXBJZCBkdW1wSWQs CiAKIC8qIFB1YmxpYyAqLwogdm9pZAotUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKK1By aW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2 ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJv cHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC0xMjc5LDcgKzEyNzksNyBAQCBQcmludFRPQ1N1bW1h cnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZp bGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25f c3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9z cGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3Rh bXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRl RGF0ZSkpID09IDApCkBAIC0xNjU4LDcgKzE2NTgsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFI LCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE2NzgsNyAr MTY3OSw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5h bWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFy Y2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFw cGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9X OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNC4uZDk0ZDBkZSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZl SGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1 YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJ CVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9w dGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3V0aWxzLmMKaW5kZXggNzlhZWM1Zi4uZjcwZWE5MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dXRpbHMuYwpAQCAtMjEsNyArMjEsOCBAQAogLyogR2xvYmFscyBleHBvcnRlZCBieSB0aGlzIGZp bGUgKi8KIGNvbnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKIAotI2RlZmluZSBNQVhfT05fRVhJ VF9OSUNFTFkJCQkJMjAKKy8qIFRPRE86IGluY3JlYXNpbmcgdGhpcyB0byBrZWVwIDEwMCBkYiBy ZXN0b3JpbmcgYnkgc2luZ2xlIHBnX3Jlc3RvcmUgY29tbWFuZC4gKi8KKyNkZWZpbmUgTUFYX09O X0VYSVRfTklDRUxZCQkJCTEwMAogCiBzdGF0aWMgc3RydWN0CiB7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAw MmUxZmRmLi42MTA2N2UxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExNDgsNyArMTE0OCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5U ZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFs c2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCAzOTZm Nzk3Li4zZTAyMmVjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUg PHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtMjQsMTQgKzI1LDE3IEBACiAjaW5j bHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5n LmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxs X3Jlc3RvcmUuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9z dHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9u Zy5oIgogI2luY2x1ZGUgInBnX2JhY2t1cC5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZl ci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8K ICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVS U0lPTiAiXG4iCisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKIAogdHlwZWRl ZiBzdHJ1Y3QKIHsKQEAgLTY0LDI4ICs2OCwyNSBAQCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFj ZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNv bm4pOwogc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVt cFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMg dm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMg dm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVt cChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRpYyBp bnQgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMs CisJCQkJCSBjaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3Rh dGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNo YXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0 eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwot c3RhdGljIFBHY29ubiAqY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwKLQkJCQkJ CQkgICBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAot CQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAotCQkJCQkJ CSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKTsKLXN0YXRp YyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hh ciAqKnZhbHVlcyk7Ci1zdGF0aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0 ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkg ICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBhbGxfZmls dGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybik7Citz dGF0aWMgdm9pZCBjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CitzdGF0 aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KTsKIAog c3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBjb25zdCBjaGFyICpw cm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwotc3RhdGljIGNoYXIgKmNv bm5zdHIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7CiBzdGF0aWMgYm9v bCBvdXRwdXRfY2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNscyA9IGZhbHNlOwog c3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtMTA3LDcgKzEwOCw3IEBAIHN0YXRpYyBp bnQJbm9fc3Vic2NyaXB0aW9ucyA9IDA7CiBzdGF0aWMgaW50CW5vX3RvYXN0X2NvbXByZXNzaW9u ID0gMDsKIHN0YXRpYyBpbnQJbm9fdW5sb2dnZWRfdGFibGVfZGF0YSA9IDA7CiBzdGF0aWMgaW50 CW5vX3JvbGVfcGFzc3dvcmRzID0gMDsKLXN0YXRpYyBpbnQJc2VydmVyX3ZlcnNpb247CitzdGF0 aWMgaW50IHNlcnZlcl92ZXJzaW9uOwogc3RhdGljIGludAlsb2FkX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IDA7CiBzdGF0aWMgaW50CW9uX2NvbmZsaWN0X2RvX25vdGhpbmcgPSAwOwogCkBAIC0xMjEs OCArMTIyLDYgQEAgc3RhdGljIGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKIHN0YXRpYyBTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0 aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9 OwogCi0jZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKLQogaW50CiBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0xNDcsNiArMTQ2LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30s CiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFj bCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24n dCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTg4LDYgKzE4OCw4 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0gTlVMTDsK IAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29kaW5nID0g TlVMTDsKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJY29uc3Qg Y2hhciAqZm9ybWF0TmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklf REVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxzX29ubHkg PSBmYWxzZTsKQEAgLTIzNyw3ICsyMzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25n X29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywg Jm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI2NSw3ICsyNjcs OSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRz LCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUg PSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2Jh bHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC00MTQsNiArNDE4LDIxIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZv cm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3Jt YXROYW1lKTsKKworCS8qCisJICogSWYgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhl biB3ZSBtdXN0IHByb3ZpZGUgdGhlCisJICogZmlsZSBuYW1lIHRvIGNyZWF0ZSBvbmUgbWFpbiBk aXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCQko IWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJvcHRpb25zIC1GLy0tZm9ybWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUg d2l0aCBub24tZW1wdHkgc3RyaW5nIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAt LWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5 KDEpOworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQg aW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFs bHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00NjEs NiArNDgwLDMzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLW9uLWNvbmZsaWN0LWRvLW5vdGhpbmciKTsKIAogCS8q CisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rk b3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xv YmFsLmRhdCBmaWxlLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7 CisJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9y eSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29y X29wZW5fZGlyKGZpbGVuYW1lKTsKKworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAi JXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdf QklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9i YWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5h bWUpCisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9Q RikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwK KwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKKwkvKgogCSAq IElmIHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1 c2UgdGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3Rn cmVzIiwgYW5kIGZhaWxpbmcgdGhhdAogCSAqICJ0ZW1wbGF0ZTEiLgpAQCAtNDY4LDcgKzUxNCw4 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAocGdkYikKIAl7CiAJCWNvbm4g PSBjb25uZWN0RGF0YWJhc2UocGdkYiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwK LQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJCQkJCQkgICBwcm9tcHRfcGFz c3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJz aW9uKTsKIAogCQlpZiAoIWNvbm4pCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8g ZGF0YWJhc2UgXCIlc1wiIiwgcGdkYik7CkBAIC00NzYsMTAgKzUyMywxMiBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAJZWxzZQogCXsKIAkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgi cG9zdGdyZXMiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHBy b21wdF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2Us CisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCQlpZiAo IWNvbm4pCiAJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBjb25uc3RyLCBw Z2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUp OworCQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJCQkJCQkJCSAgIHByb2duYW1l LCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAogCQlpZiAoIWNvbm4pCiAJCXsKQEAgLTQ5 NywxOSArNTQ2LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCQkJICAgJmRh dGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCiAJLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBp ZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmlsZW5hbWUpCi0J ewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikKLQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJ IGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KLQkvKgogCSAqIFNldCB0 aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KIAlpZiAoZHVtcGVuY29kaW5n KQpAQCAtNjA3LDcgKzY0Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAK IAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkK LQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNoRHVtcEZv cm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjIwLDcgKzY1Niw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVz dWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlm IChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3lu Y19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjM3LDYgKzY3Myw4IEBAIGhlbHAo dm9pZCkKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygi ICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlw cmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1h dCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwg LS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIg IC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24s IHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9V VCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAt MTQ4NywxMCArMTUyNSwxMyBAQCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwK ICAqIER1bXAgY29udGVudHMgb2YgZGF0YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCitkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2 ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsK KwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFU SF07CisJRklMRSAgICAgICAqbWFwX2ZpbGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFi YXNlcyBtYXJrZWQgbm90IGRhdGFsbG93Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29u bmVjdApAQCAtMTUwNCw3ICsxNTQ1LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ ICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAly ZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJ ICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIK IAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJ CQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwpAQCAt MTUxMiw5ICsxNTUzLDMzIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCWlmIChQUW50 dXBsZXMocmVzKSA+IDApCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxu Iik7CiAKKwkvKgorCSAqIElmIGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZp ZWQgdGhlbiBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3Rv cnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIHN1YmRpcmVjdG9yeSB3aWxsCisJICogYmUg Y3JlYXRlZCB1bmRlciB0aGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2lu Z2xlIGRiIHBnX2R1bXAuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CXsKKwkJY2hhcgltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3Vi ZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRl IGEgc3ViZGlyZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9y eS4gKi8KKwkJaWYgKG1rZGlyKGRiX3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2xvZ19lcnJv cigiY291bGQgbm90IGNyZWF0ZSBzdWJkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7 CisKKwkJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZp bGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRi bmFtZSkgKi8KKwkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7 CisJCWlmICghbWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwIGZpbGU6 ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVz KHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAw KTsKKwkJY2hhcgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwogCQljb25zdCBjaGFy ICpjcmVhdGVfb3B0czsKIAkJaW50CQkJcmV0OwogCkBAIC0xNTI5LDYgKzE1OTQsMTggQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAq IElmIHRoaXMgaXMgbm9uLXBsYWluIGR1bXAgZm9ybWF0LCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQg ZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFU SCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGlu ZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYo bWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBwZ19zdHJkdXAoZGJuYW1lKSk7CisJCX0KKwogCQlw Z19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUpOwpA QCAtMTU0Nyw5ICsxNjI0LDE3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJCWNy ZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOwogCQkJZWxzZQogCQkJewotCQkJCWNyZWF0 ZV9vcHRzID0gIiI7CiAJCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3Qg Y29tbWFuZCwgd2UgbXVzdCAqLwotCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIs IGRibmFtZSk7CisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCXsKKwkJ CQkJY3JlYXRlX29wdHMgPSAiIjsKKwkJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxu IiwgZGJuYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogRHVtcGluZyBhbGwg ZGF0YWJhc2VzIHNvIGFkZCAtLWNyZWF0ZSBvcHRpb24uICovCisJCQkJCWNyZWF0ZV9vcHRzID0g Ii0tY3JlYXRlIjsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTU1OCwxOSArMTY0Mywz MCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJaWYgKGZpbGVuYW1lKQogCQkJZmNs b3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQly ZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBG b3JtYXQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24g ZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAogCQlpZiAoZmlsZW5hbWUpCiAJ CXsKLQkJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CisJCQljaGFyCXRvY19w YXRoW01BWFBHUEFUSF07CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJ CQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1l KTsKKwkJCWVsc2UKKwkJCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBmaWxl bmFtZSk7CisKKwkJCU9QRiA9IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfQSk7CiAJCQlpZiAo IU9QRikKIAkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlLW9wZW4gdGhlIG91dHB1dCBmaWxlIFwi JXNcIjogJW0iLAotCQkJCQkJIGZpbGVuYW1lKTsKKwkJCQkJCSB0b2NfcGF0aCk7CiAJCX0KIAl9 CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVs bCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTU4MCw3 ICsxNjc2LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBv biBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdE dW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRi ZmlsZSwKKwkJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4cEJ1ZmZlckRh dGEgY29ubnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTU4OSwxNyArMTY4Niwz NiBAQCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0 cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21k KTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2Jp biwKLQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElm IHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBn X2R1bXAKLQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZm9ybWF0IGR1bXAs IHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVt cCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQg IT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVz ICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNtZCwgIiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1m b3JtYXQ9Y3VzdG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQor CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAll bHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRm UFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJcGdk dW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8qCisJCSogSWYgd2UgaGF2ZSBhIGZp bGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkqIGZv cm1hdC4KKwkJKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNt ZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZw ICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJl YWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAtMTY1MCwyNTYgKzE3NjYsNiBA QCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1l LCBPaWQgb2JqZWN0SWQsCiB9CiAKIC8qCi0gKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3 aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KLSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHBy b21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWls X29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBt ZXNzYWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3Jk IGZvciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24gc3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJs ZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKLSAqIGNvbnRhaW5pbmcg dGhlIG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGljIFBHY29ubiAqCi1jb25uZWN0RGF0YWJhc2Uo Y29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKLQkJCQlj b25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2Vy LAotCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKQotewot CVBHY29ubgkgICAqY29ubjsKLQlib29sCQluZXdfcGFzczsKLQljb25zdCBjaGFyICpyZW1vdGV2 ZXJzaW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9uOwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9 IE5VTEw7Ci0JY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAq Y29ubl9vcHRzID0gTlVMTDsKLQlzdGF0aWMgY2hhciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYg KHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBz aW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUg Y29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBi eQotCSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJ UFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7Ci0JCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwot CQlpbnQJCQlpID0gMDsKLQotCQlmcmVlKGtleXdvcmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQ UWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0 aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJICog YW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBp biB0aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJh bXMoKSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBj b25uZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlmIChjb25uZWN0aW9uX3N0cmluZykKLQkJewot CQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21z Zyk7Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwpCi0JCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21z Zyk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9 IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAm JiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3 b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJCQkJYXJnY291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29y ZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJ dmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0K LQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7 IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25u X29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAi ZGJuYW1lIikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdv cmQ7Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0J CQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50 ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdj b3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQkJfQotCi0JCWlmIChwZ2hvc3QpCi0JCXsK LQkJCWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJdmFsdWVzW2ldID0gcGdob3N0OwotCQkJaSsr OwotCQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBvcnQiOwotCQkJ dmFsdWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3VzZXIpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFsdWVzW2ldID0gcGd1c2VyOwotCQkJaSsrOwot CQl9Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwot CQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJ ewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJ CWkrKzsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsK LQkJdmFsdWVzW2ldID0gcHJvZ25hbWU7Ci0JCWkrKzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwot CQljb25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJ aWYgKCFjb25uKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwi JXNcIiIsIGRibmFtZSk7Ci0KLQkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFE ICYmCi0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQg JiYKLQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4p OwotCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJ bmV3X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGlsZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sg dG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUg Ki8KLQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCi0JewotCQlpZiAoZmFp bF9vbl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJ ZWxzZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQotCQkJZnJlZShrZXl3b3Jkcyk7Ci0JCQlm cmVlKHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCQlyZXR1cm4g TlVMTDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJl bWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRoZSBmb3JtIG9mIGEKLQkgKiBjb25uZWN0aW9u IHN0cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFs dWVzKTsKLQotCWZyZWUoa2V5d29yZHMpOwotCWZyZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJl ZShjb25uX29wdHMpOwotCi0JLyogQ2hlY2sgdmVyc2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3Ry ID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1v dGV2ZXJzaW9uX3N0cikKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24i KTsKLQlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVy X3ZlcnNpb24gPT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lv biBcIiVzXCIiLAotCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdf VkVSU0lPTl9OVU07Ci0KLQkvKgotCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0 byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3Ig dmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCi0JICovCi0J aWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb24KLQkJJiYgKHNlcnZlcl92ZXJzaW9uIDwg OTAyMDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkp KQotCXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9u IG1pc21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsg JXMgdmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdf VkVSU0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5 KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsK LX0KLQotLyogLS0tLS0tLS0tLQotICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJv bSB0aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0 aGUgY29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICog VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJp ZXMgaW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KLSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2Vj dXJlIHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19h cHBsaWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0t Ci0gKi8KLXN0YXRpYyBjaGFyICoKLWNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdv cmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKQotewotCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0 a2V5d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcg aW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5V TEw7IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8 Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKLQkJCXN0cmNtcChr ZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQotCQkJY29udGlu dWU7Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVm LCAnICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVm LCAiJXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ld KTsKLQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhw QnVmZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5zdHI7Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwg cmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGlj IFBHcmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5 KQotewotCVBHcmVzdWx0ICAgKnJlczsKLQotCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBx dWVyeSk7Ci0KLQlyZXMgPSBQUWV4ZWMoY29ubiwgcXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBR cmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9y KCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJy b3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJ ZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQotLyoKICAqIEFzIGFib3Zl IGZvciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1cm5zIG5vdGhpbmcpLgogICovCiBzdGF0aWMg dm9pZApAQCAtMTk5NCwzICsxODYwLDkxIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUo JmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Blbl9kaXIKKyAqCisgKiBUaGlzIHdp bGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdpdmVuIG5hbWUuICBJZiB0aGVyZSBpcyBh bHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9yeSBleGlzdCwgdGhlbiB1c2UgaXQuCisgKi8K K3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sK KwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJYm9vbAkJCWlzX2VtcHR5ID0gZmFsc2U7CisKKwkvKiB3ZSBh Y2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICovCisJaWYgKHN0YXQoZGlybmFtZSwg JnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJeworCQlESVIJCSpkaXIgPSBvcGVu ZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJCXN0cnVjdCBkaXJlbnQJKmQ7CisK KwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVycm5vID0gMCwgKGQgPSByZWFkZGly KGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9uYW1lLCAiLiIpICE9IDAgJiYgc3Ry Y21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJCQkJCWlzX2VtcHR5ID0gZmFsc2U7 CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGVycm5vKQorCQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsK KworCQkJaWYgKGNsb3NlZGlyKGRpcikpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBk aXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKwkJfQorCisJCWlmKCFpc19l bXB0eSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJkaXJlY3RvcnkgXCIlc1wiIGV4aXN0cyBidXQg aXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSWYgeW91IHdh bnQgdG8gZHVtcCBkYXRhIG9uIHRoaXMgZGlyZWN0b3J5LCBlaXRoZXIgcmVtb3ZlIG9yIGVtcHR5 ICIKKwkJCQkJCQkgICJ0aGlzIGRpcmVjdG9yeSBcIiVzXCIgb3IgcnVuICVzICIKKwkJCQkJCQkg ICJ3aXRoIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4gXCIlc1wiLiIsCisJCQkJCQkJICBkaXJuYW1l LCBwcm9nbmFtZSwgZGlybmFtZSk7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCX0KKwllbHNl IGlmIChta2RpcihkaXJuYW1lLCAwNzAwKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3Jl YXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7Cit9CisKKy8qCisgKiBwYXJzZUR1 bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitz dGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkK K3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFy Y2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25p emVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBc InBcIiwgb3IgXCJ0XCIiLAorCQkJCWZvcm1hdCk7CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCBjNjAyMjcyLi5mYzI0OGE0IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0 b3JlLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3Jl IGlzIGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwot ICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJj aGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVt cGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3Jl IHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwyNyArNDEsNjkgQEAKICNp bmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgog I2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNs dWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNs dWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisjaW5jbHVkZSAicGdf YmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKK3R5cGVk ZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlkYl9vaWQ7CisJY29uc3QgY2hh cgkJCQkJCQkqZGJfbmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbDsKKwordHlwZWRl ZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbCAqaGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICp0YWlsOworfSBTaW1wbGVE YXRhYmFzZU9pZExpc3Q7CisKK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5k KFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwgY29uc3QgY2hhciAqZGJu YW1lKTsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGlj IHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVP cHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0 IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25l RGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJUmVzdG9yZU9wdGlvbnMgKm9w dHMsIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhKTsKK3N0YXRpYyBpbnQgUmVhZE9u ZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IHJl c3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwK KwkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVP cHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMgdm9pZCBleGVjdXRlX2dsb2Jh bF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJ CQkJCQkJCQljb25zdCBjaGFyICpvdXRmaWxlKTsKK3N0YXRpYyBpbnQgZmlsdGVyX2RibmFtZXNf Zm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFt ZV9vaWRfbGlzdCwgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRp YyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJw YXRoLAorCQkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3Qp Oworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9p ZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7 CitzdGF0aWMgdm9pZCBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5n TGlzdCAqbGlzdCk7CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUo U2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRf bGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsICpwcmV2KTsKK3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbChj aGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMgY2hhciAqcXVv dGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cik7CiAKIGludAogbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlp bnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7 CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMg PSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CkBAIC03NywxMSArMTE5 LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJc3RyaWN0X25h bWVzID0gMDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25seSA9 IGZhbHNlOworCWJvb2wJCQkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlz dAlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCiAJc3RydWN0IG9wdGlvbiBj bWRvcHRzW10gPSB7CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAs IE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxz LW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsi ZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBO VUxMLCAnTid9LApAQCAtMTI4LDYgKzE3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7Im5vLXNlY3VyaXR5LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFi ZWxzLCAxfSwKIAkJeyJuby1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3Jp cHRpb25zLCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJ CXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7 TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTU2LDcgKzIwMiw3IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdoOkk6ajpsTDpu Ok46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkK IAl7CiAJCXN3aXRjaCAoYykKQEAgLTE4MywxMSArMjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3Jt YXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJ CQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJ Z2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChz dHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1 cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVz dG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9i cyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMzAyLDYgKzM1MSwxMCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29u X2Vycm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRh dGFiYXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLwor CQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFy Zyk7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFk eSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zMjksNiArMzgyLDEzIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZp bGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJu YW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRl X3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJy b3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0 aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgx KTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1 c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQw NCw2ICs0NjQsNzYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5m b3JtYXROYW1lKTsKIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2VzIG5vdCBwcmVz ZW50IGluIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwuZGF0LiAgSWYg Z2xvYmFsLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlCisJICogZGF0 YWJhc2VzIGZyb20gbWFwLmRhdChpZiBleGlzdCkgZmlsZSBsaXN0IGFuZCBza2lwIHJlc3Rvcmlu ZyBmb3IKKwkgKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0 RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkhSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxl U3BlYywgInRvYy5kYXQiKSkKKwl7CisJCS8qIElmIGdsb2JhbC5kYXQgaXMgZXhpc3QsIHRoZW4g cHJvY2VzcyBpdC4gKi8KKwkJaWYgKElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChp bnB1dEZpbGVTcGVjKSwgImdsb2JhbC5kYXQiKSkKKwkJeworCQkJUEdjb25uICAqY29ubiA9IE5V TEw7IC8qIENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJ aW50ICAgICBleGl0X2NvZGUgPSAwOworCisJCQkvKgorCQkJICogQ29ubmVjdCB0byBkYXRhYmFz ZSB0byBleGVjdXRlIGdsb2JhbCBzcWwgY29tbWFuZHMgZnJvbQorCQkJICogZ2xvYmFsLmRhdCBm aWxlLgorCQkJICovCisJCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCQl7CisJCQkJY29u biA9IGNvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3Bh cmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3Bh cmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUs IE5VTEwsIE5VTEwpOworCisJCQkJaWYgKCFjb25uKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQkJ fQorCisJCQkvKgorCQkJICogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5k IGFsbCB0aGUgZ2xvYmFsIHNxbAorCQkJICogY29tbWFuZHMuCisJCQkgKi8KKwkJCWV4ZWN1dGVf Z2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxlbmFtZSk7 CisKKwkJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQkJ aWYgKGdsb2JhbHNfb25seSkKKwkJCXsKKwkJCQlpZiAoY29ubikKKwkJCQkJUFFmaW5pc2goY29u bik7CisJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyAt Zy8tLWdsb2JhbHMtb25seSBvcHRpb24gaXMgc3BlY2lmaWVkIik7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZp bGUuICovCisJCQkJZXhpdF9jb2RlID0gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25uLCBpbnB1dEZp bGVTcGVjLAorCQkJCQkJZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0cywgbnVtV29ya2Vycyk7CisJ CQl9CisKKwkJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQkJc2ltcGxlX3N0cmluZ19m dWxsX2xpc3RfZGVsZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCQkJcmV0dXJuIGV4aXRf Y29kZTsKKwkJfQorCX0KKworCXJldHVybiByZXN0b3JlT25lRGF0YWJhc2UoaW5wdXRGaWxlU3Bl Yywgb3B0cywgbnVtV29ya2VycywgZmFsc2UpOworfQorLyoKKyAqIHJlc3RvcmVPbmVEYXRhYmFz ZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0b2MuZGF0IGZp bGUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1 dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkgICBpbnQgbnVtV29ya2Vycywg Ym9vbCBhcHBlbmRfZGF0YSkKK3sKKwlBcmNoaXZlCQkqQUg7CisJaW50CQkJZXhpdF9jb2RlOwor CiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0 QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDI5LDExICs1NTksMTEgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJQUgtPm51bVdvcmtlcnMgPSBudW1Xb3JrZXJzOwog CiAJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCi0JCVByaW50VE9DU3VtbWFyeShBSCk7CisJCVByaW50 VE9DU3VtbWFyeShBSCwgYXBwZW5kX2RhdGEpOwogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZl UmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNo aXZlKEFILCBhcHBlbmRfZGF0YSk7CiAJfQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9m IGlnbm9yZWQgZXJyb3JzICovCkBAIC00NjksNiArNTk5LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVh biAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50 ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0 YWJhc2VcbiIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4 aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAt ZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywg bm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAg ICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1O VU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxu IikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxl IG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNDgxLDYgKzYxMiw3IEBAIHVz YWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1O QU1FICAgICAgICAgc3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmln Z2Vyc1xuIikpOwogCXByaW50ZihfKCIgIC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVz dG9yZSBuYW1lZCByZWxhdGlvbiAodGFibGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8o IiAgLVQsIC0tdHJpZ2dlcj1OQU1FICAgICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIp KTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0 YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygi ICAteCwgLS1uby1wcml2aWxlZ2VzICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNz IHByaXZpbGVnZXMgKGdyYW50L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5n bGUtdHJhbnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsK IAlwcmludGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dl cnMgZHVyaW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC02MTksMyArNzUxLDU4NSBAQCBy ZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMg Km9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0 c0luRGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVu dCBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShj b25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJ c3Q7CisJY2hhcgkJCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBH UEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgi ZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQo YnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBSZWFk T25lU3RhdGVtZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQg ZmlsZSBwb2ludGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwg c3RhdGVtZW50IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5zcWwgZmlsZSkKKyAqCisgKiBFT0YgaXMg cmV0dXJuZWQgaWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24u CisgKi8KKworc3RhdGljIGludAorUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBG SUxFICpwZmlsZSkKK3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAq LworCisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJz IHVudGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJ d2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCisJCWlmIChjID09ICdcbicpCisJCXsKKwkJCWlmKGlu QnVmLT5sZW4gPiAxICYmCisJCQkJCWluQnVmLT5kYXRhW2luQnVmLT5sZW4gLSAyXSA9PSAnOycp CisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKiBObyBp bnB1dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMgPT0g RU9GICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAnXDAnIHRv IG1ha2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisKKy8qCisg KiBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCByZW1vdmUgbmFt ZXMgZnJvbSBhbGwgZGJsaXN0IHRob3NlIGNhbgorICogYmUgY29uc3RydWN0ZWQgZnJvbSBkYXRh YmFzZV9leGNsdWRlX3BhdHRlcm4gbGlzdC4KKyAqCisgKiByZXR1cm5zIG51bWJlciBvZiBkYm5h bWVzIHRob3NlIHdpbGwgYmUgcmVzdG9yZWQuCisgKi8KK3N0YXRpYyBpbnQKK2ZpbHRlcl9kYm5h bWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5h bWVfb2lkX2xpc3QsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sK KwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZF9jZWxsID0gZGJuYW1lX29pZF9saXN0 LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkcHJlY2VsbCA9IE5VTEw7 CisJaW50CQkJCQkJCWNvdW50X2RiID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3Vs dCAgICpyZXM7CisKKwkvKiBSZXR1cm4gMCBpZiB0aGVyZSBpcyBubyBkYiB0byByZXN0b3JlLiAq LworCWlmIChkYm9pZF9jZWxsID09IE5VTEwpCisJCXJldHVybiAwOworCisJcXVlcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFt ZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBk Ym5hbWUgZnJvbSBsaXN0LgorCSAqLworCXdoaWxlIChkYm9pZF9jZWxsICE9IE5VTEwpCisJewor CQlib29sCQkJCQkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwJKm5leHQgPSBkYm9pZF9jZWxsLT5uZXh0OworCisJCWZvciAoU2ltcGxlU3RyaW5n TGlzdENlbGwgKmNlbGxkYiA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxs ZGIgPSBjZWxsZGItPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiB0aGUgY29uc3RydWN0IHBhdHRl cm4gbWF0Y2hpbmcgcXVlcnk6CisJCQkgKiBTRUxFQ1QgMSBXSEVSRSBYWFggT1BFUkFUT1IocGdf Y2F0YWxvZy5+KSAnXihQQVRURVJOKSQnIENPTExBVEUKKwkJCSAqIHBnX2NhdGFsb2cuZGVmYXVs dAorCQkJICoKKwkJCSAqIFhYWCByZXByZXNlbnRzIHRoZSBzdHJpbmcgbGl0ZXJhbCBkYXRhYmFz ZSBuYW1lIGRlcml2ZWQgZnJvbSB0aGUKKwkJCSAqIGRib2lkX2xpc3QgdmFyaWFibGUsIHdoaWNo IGlzIGluaXRpYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUKKwkJCSAqIG1hcC5kYXQgZmlsZSBsb2Nh dGVkIGluIHRoZSBiYWNrdXAgZGlyZWN0b3J5LiAgdGhhdCdzIHdoeSB3ZQorCQkJICogbmVlZCBx dW90ZV9saXRlcmFsX2NzdHIuCisJCQkgKgorCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBkYiBjb25u ZWN0aW9uLCB0aGVuIGNvbnNpZGVyIHBhdHRlcm5zIGFzIE5BTUUKKwkJCSAqIG9ubHkuCisJCQkg Ki8KKwkJCWlmICghY29ubiAmJiAocGdfc3RyY2FzZWNtcChkYm9pZF9jZWxsLT5kYl9uYW1lLCBj ZWxsZGItPnZhbCkgPT0gMCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBBcyB3ZSBuZWVkIHRvIHNr aXAgdGhpcyBkYm5hbWUgc28gc2V0IGZsYWcgdG8gcmVtb3ZlIGl0IGZyb20KKwkJCQkgKiBsaXN0 LgorCQkJCSAqLworCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJaW50CWRvdGNudDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4s IHF1ZXJ5LCBjZWxsZGItPnZhbCwgZmFsc2UsCisJCQkJCQlmYWxzZSwgTlVMTCwgcXVvdGVfbGl0 ZXJhbF9jc3RyKGRib2lkX2NlbGwtPmRiX25hbWUpLAorCQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwg JmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJv cigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6ICVzIiwK KwkJCQkJCQljZWxsZGItPnZhbCk7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25p Y2VseSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRh dGEpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19PSykg JiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOwor CQkJCQlwZ19sb2dfaW5mbygiXCIlc1wiIGRhdGFiYXNlIGlzIG1hdGNoaW5nIHdpdGggZXhjbHVk ZSBcIiVzXCIgcGF0dGVybiIsIGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJ CQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisK KwkJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8q IEluY3JlbWVudCBjb3VudCBpZiBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwkJaWYgKHNr aXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBc IiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9uYW1lKTsKKwkJCXNpbXBsZV9kYl9vaWRfbGlzdF9kZWxl dGUoZGJuYW1lX29pZF9saXN0LCBkYm9pZF9jZWxsLCBkYm9pZHByZWNlbGwpOworCQl9CisJCWVs c2UKKwkJeworCQkJY291bnRfZGIrKzsgLyogSW5jcmVtZW50IGRiIGNvdXRlci4gKi8KKwkJCWRi b2lkcHJlY2VsbCA9IGRib2lkX2NlbGw7CisJCX0KKworCQkvKiBQcm9jZXNzIG5leHQgZGJuYW1l IGZyb20gZGJuYW1lIGxpc3QuICovCisJCWRib2lkX2NlbGwgPSBuZXh0OworCX0KKworCXJldHVy biBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQor ICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBw cmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvZGluZyBkYl9v aWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1h cC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFt ZV9vaWRfbGlzdCkKK3sKKwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhb TUFYUEdQQVRIXTsKKwljaGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0g MDsKKworCWlmICghSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGR1bXBkaXJwYXRo KSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJtYXAuZGF0IGZpbGUgaXMgbm90IHBy ZXNlbnQgaW4gZHVtcCBvZiBwZ19kdW1wYWxsLCBzbyBub3RoaW5nIHRvIHJlc3RvcmUuIik7CisJ CXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVz L21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlw ZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9 PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwLmRhdCBmaWxlOiBcIiVzXCIi LCBtYXBfZmlsZV9wYXRoKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRibmFtZSBhbmQgZGJfb2lk IHRvIHRoZSBsaXN0LiAqLworCXdoaWxlKChmZ2V0cyhsaW5lLCBNQVhQR1BBVEgsIHBmaWxlKSkg IT0gTlVMTCkKKwl7CisJCU9pZCAgICAgICAgIGRiX29pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltN QVhQR1BBVEggKyAxXTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdOworCisJ CS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiICwgJmRiX29pZCk7CisJ CXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNvcHkgZGJuYW1l LiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsgMSk7CisK KwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVuKGRibmFtZSkg LSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRibmFtZSBhcyA6IFwiJXNcIiBh bmQgZGJfb2lkOiV1IGluIG1hcC5kYXQgZmlsZSB3aGlsZSByZXN0b3JpbmciLCBkYm5hbWUsIGRi X29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGlmIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0 YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgc3RybGVuKGRibmFtZSkgPT0gMCkK KwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIG1hcC5kYXQgZmlsZSBhdCBsaW5lIDogJWQi LCBjb3VudCArIDEpOworCisJCS8qCisJCSAqIFhYWCA6IGJlZm9yZSBhZGRpbmcgZGJuYW1lIGlu dG8gbGlzdCwgd2UgY2FuIHZlcmlmeSB0aGF0IHRoaXMgZGIKKwkJICogbmVlZHMgdG8gc2tpcHBl ZCBmb3IgcmVzdG9yZSBvciBub3QgYnV0IGFzIG9mIG5vdywgd2UgYXJlIG1ha2luZworCQkgKiBh IGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMuCisJCSAqLworCQlzaW1wbGVfZGJfb2lkX2xpc3Rf YXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJfb2lkLCBkYm5hbWUpOworCQljb3VudCsrOworCX0K KworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJu IGNvdW50OworfQorCisvKgorICogcmVzdG9yZUFsbERhdGFiYXNlcworICoKKyAqIFRoaXMgd2ls bCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0 b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lw IHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNs dWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqLworc3RhdGljIGludAorcmVzdG9yZUFsbERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQlTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVt V29ya2VycykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7 TlVMTCwgTlVMTH07CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJ aW50CQkJCQkJCQlleGl0X2NvZGUgPSAwOworCWludAkJCQkJCQkJbnVtX2RiX3Jlc3RvcmU7CisJ aW50CQkJCQkJCQludW1fdG90YWxfZGI7CisKKwludW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29p ZF9saXN0X2Zyb21fbWZpbGUoZHVtcGRpcnBhdGgsICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyog SWYgbWFwLmRhdCBoYXMgbm8gZW50cnksIHJldHVybiBmcm9tIGhlcmUuICovCisJaWYgKGRibmFt ZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2luZm8oImZv dW5kIHRvdGFsICVkIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9k Yik7CisKKwlpZiAoIWNvbm4pCisJeworCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3Qg ZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiICB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25u ID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1l LCBUUklfREVGQVVMVCwKKwkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOwor CisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19s b2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWls ZWQgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91dCBm aWxlIik7CisKKwkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9w dHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0 cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9n bmFtZSwgTlVMTCwgTlVMTCk7CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19sb2dfaW5mbygidGhl cmUgaXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiBzbyBjb25zaWRlciBwYXR0ZXJuIGFzIHNpbXBs ZSBuYW1lIGZvciBleGNsdWRlLWRhdGFiYXNlIik7CisJCX0KKwl9CisKKwkvKgorCSAqIHByb2Nl c3NpbmcgcGdfcmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTi4KKwkgKi8KKwludW1f ZGJfcmVzdG9yZSA9IGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lk X2xpc3QsCisJCQlkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25u ZWN0aW9uIGFzIHdlIGFyZSBkb25lIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25u KQorCQlQUWZpbmlzaChjb25uKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVz dG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiAw OworCisJcGdfbG9nX2luZm8oIm5lZWRzIHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAl ZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICog VG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlv biBzaG91bGQgYmUgc3BlY2lmaWVkCisJICogb3IgYWxsIGRhdGFiYXNlcyBzaG91bGQgYmUgY3Jl YXRlZCBiZWZvcmUgcGdfcmVzdG9yZS4KKwkgKi8KKwlpZiAob3B0cy0+Y3JlYXRlREIgIT0gMSkK KwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkdW1wIG9mIHBnX2R1bXBhbGwgd2l0aG91dCAtQyBv cHRpb24sIHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIGRhdGFiYXNlcyBpbiBkaXJlY3RvcnkuIik7 CisKKwkvKiBUT0RPOiBNQVhfT05fRVhJVF9OSUNFTFkgaXMgMTAwIG5vdy4uLiBtYXggQUggaGFu ZGxlIHJlZ2lzdGVyIG9uIGV4aXQgLiovCisJaWYgKG51bV9kYl9yZXN0b3JlID4gMTAwKQorCXsK KwkJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCQlw Z19mYXRhbCgiY291bmQgbm90IHJlc3RvcmUgbW9yZSB0aGFuIDEwMCBkYXRhYmFzZXMgYnkgc2lu Z2xlIHBnX3Jlc3RvcmUsIGhlcmUgdG90YWwgZGI6JWQiLCBudW1fZGJfcmVzdG9yZSk7CisJfQor CisJLyoKKwkgKiBYWFg6IFRPRE8gdGlsbCBub3csIHdlIG1hZGUgYSBsaXN0IG9mIGRhdGFiYXNl cywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkgKiBhZnRlciBza2lwcGluZyBuYW1lcyBv ZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2ggcGFyYWxsZWwKKwkgKiB3b3Jr ZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAqLworCWRib2lkX2NlbGwgPSBkYm5h bWVfb2lkX2xpc3QuaGVhZDsKKworCXdoaWxlKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWNo YXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJaW50CQkJZGJleGl0X2NvZGU7CisKKwkJLyoK KwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNh biBiZSByZXN0b3JlZCBpbnRvCisJCSAqIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQg d2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVy cmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1l KTsKKwkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNu cHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJw YXRoLCBkYm9pZF9jZWxsLT5kYl9vaWQpOworCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0 YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJZGJleGl0X2NvZGUgPSBy ZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29ya2VycywgdHJ1ZSk7CisK KwkJLyogU3RvcmUgZXhpdF9jb2RlIHRvIHJlcG9ydCBpdCBiYWNrLiAqLworCQlpZiAoZXhpdF9j b2RlID09IDAgJiYgZGJleGl0X2NvZGUgIT0gMCkKKwkJCWV4aXRfY29kZSA9IGRiZXhpdF9jb2Rl OworCisJCWRib2lkX2NlbGwgPSBkYm9pZF9jZWxsLT5uZXh0OworCX0gLyogZW5kIHdoaWxlICov CisKKwkvKiBMb2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5m bygibnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7 CisKKwkvKiBGcmVlIGRibmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1 bGxfbGlzdF9kZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gZXhpdF9jb2RlOwor fQorCisvKgorICogZXhlY3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRzCisgKgorICogVGhpcyB3aWxs IG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29t bWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50LgorICogU2VtaWNvbG9uIGlzIGNvbnNpZGVy ZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBvdXRmaWxlIGlzIHBhc3NlZCwgdGhlbgor ICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5kcyBpbnRvIG91dGZpbGUgcmF0aGVyIHRo ZW4gZXhlY3V0aW5nIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkCitleGVjdXRlX2dsb2JhbF9zcWxf Y29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hh ciAqb3V0ZmlsZSkKK3sKKwljaGFyICAgICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BB VEhdOworCVBHcmVzdWx0CQkqcmVzdWx0OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsK KwlGSUxFCQkJKnBmaWxlOworCisJc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRI LCAiJXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5k YXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9S KTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xv YmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYg b3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRh IGludG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY2hhciAgICAg ICAgICAgIG91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwkJRklMRSAgICAgICAgICAgICpvZmls ZTsKKwkJaW50CQkJCWM7CisKKwkJc25wcmludGYob3V0X2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAi JXMiLCBvdXRmaWxlKTsKKworCQlvZmlsZSA9IGZvcGVuKG91dF9maWxlX3BhdGgsIFBHX0JJTkFS WV9XKTsKKworCQlpZiAob2ZpbGUgPT0gTlVMTCkKKwkJeworCQkJZmNsb3NlKHBmaWxlKTsKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBvdXRfZmlsZV9wYXRoKTsK KwkJfQorCisJCS8qIE5vdyBhcHBlbmQgZ2xvYmFsLmRhdCBpbm90IG91dGZpbGUuICovCisJCXdo aWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQl7CisJCQlmcHV0YyhjLCBvZmlsZSk7 CisJCX0KKworCQlmY2xvc2UocGZpbGUpOworCQlmY2xvc2Uob2ZpbGUpOworCQlyZXR1cm47CisJ fQorCisJLyogSW5pdCBzcWxzdGF0ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRzICovCisJaW5pdFN0 cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNzIGZpbGUgdGlsbCBFT0YgYW5k IGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMgKi8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgmc3Fs c3RhdGVtZW50LCBwZmlsZSkgIT0gRU9GKQorCXsKKwkJcmVzdWx0ID0gUFFleGVjKGNvbm4sIHNx bHN0YXRlbWVudC5kYXRhKTsKKworCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpCisJ CXsKKwkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoKKwkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgor CQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3 YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJ CX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCWZjbG9zZShwZmlsZSk7Cit9CisKKy8qCisg KiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhl IGxpc3QgaW4gdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9h cHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBj aGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNl bGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2Vs bC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUg PSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5u ZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBj ZWxsOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICog ZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMg dm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVh ZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGls ZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOwor CQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFp bCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAq CisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQK K3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQor eworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJp bmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQlj ZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7 CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8q CisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBk YXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xp c3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sK KwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBm cmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJ cGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbAorICov CitzdGF0aWMgc2l6ZV90CitxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3Qg Y2hhciAqc3JjLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnM7CisJY2hhcgkgICAqc2F2 ZWRzdCA9IGRzdDsKKworCWZvciAocyA9IHNyYzsgcyA8IHNyYyArIGxlbjsgcysrKQorCXsKKwkJ aWYgKCpzID09ICdcXCcpCisJCXsKKwkJCSpkc3QrKyA9IEVTQ0FQRV9TVFJJTkdfU1lOVEFYOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwkqZHN0KysgPSAnXCcnOworCXdoaWxlIChsZW4tLSA+IDAp CisJeworCQlpZiAoU1FMX1NUUl9ET1VCTEUoKnNyYywgdHJ1ZSkpCisJCQkqZHN0KysgPSAqc3Jj OworCQkqZHN0KysgPSAqc3JjKys7CisJfQorCSpkc3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0 IC0gc2F2ZWRzdDsKK30KKworLyoKKyAqIHF1b3RlX2xpdGVyYWxfY3N0ciAtCisgKgkgIHJldHVy bnMgYSBwcm9wZXJseSBxdW90ZWQgbGl0ZXJhbAorICogY29waWVkIGZyb20gc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3F1b3RlLmMKKyAqLworc3RhdGljIGNoYXIgKgorcXVvdGVfbGl0ZXJhbF9jc3Ry KGNvbnN0IGNoYXIgKnJhd3N0cikKK3sKKwljaGFyCSAgICpyZXN1bHQ7CisJaW50CQkJbGVuOwor CWludAkJCW5ld2xlbjsKKworCWxlbiA9IHN0cmxlbihyYXdzdHIpOworCisJLyogV2UgbWFrZSBh IHdvcnN0LWNhc2UgcmVzdWx0IGFyZWE7IHdhc3RpbmcgYSBsaXR0bGUgc3BhY2UgaXMgT0sgKi8K KwlyZXN1bHQgPSBwZ19tYWxsb2MobGVuICogMiArIDMgKyAxKTsKKworCW5ld2xlbiA9IHF1b3Rl X2xpdGVyYWxfaW50ZXJuYWwocmVzdWx0LCByYXdzdHIsIGxlbik7CisJcmVzdWx0W25ld2xlbl0g PSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApvbGQgbW9k ZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDIxNDI0MGYuLmViZmQwN2IKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbApAQCAtMjE5LDExICsyMTksMjAgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19y ZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9u IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsg J3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScg XSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19y ZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQs IGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29t bWFuZF9mYWlsc19saWtlKAotCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZv bycsICctLWdsb2JhbHMtb25seScgXSwKKwlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVkZS1kYXRh YmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAogCXFyL1xRcGdfZHVt cGFsbDogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9n ZXRoZXIgd2l0aCAtZ1wvLS1nbG9iYWxzLW9ubHlcRS8sCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2Jh bHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0t Zm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIGFy Y2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBhcmNoaXZl IGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGEyNjQ0YTIuLjk2ZjQ2MGQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjczLDYg KzI2NzMsOCBAQCBTaHV0ZG93bk1vZGUKIFNpZ25UU1ZlY3RvcgogU2ltcGxlQWN0aW9uTGlzdAog U2ltcGxlQWN0aW9uTGlzdENlbGwKK1NpbXBsZURhdGFiYXNlT2lkTGlzdAorU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAogU2ltcGxlRWNvbnRleHRTdGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0CiBT aW1wbGVPaWRMaXN0Q2VsbAotLSAKMS44LjMuMQoK --0000000000009dc938062cc2f966--