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 1ssRCp-008Pi3-LI for pgsql-hackers@arkaria.postgresql.org; Sun, 22 Sep 2024 18:21:12 +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 1ssRCp-00A9ag-15 for pgsql-hackers@arkaria.postgresql.org; Sun, 22 Sep 2024 18:21:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ssRCo-00A9aX-9q for pgsql-hackers@lists.postgresql.org; Sun, 22 Sep 2024 18:21:10 +0000 Received: from mail-vk1-xa33.google.com ([2607:f8b0:4864:20::a33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1ssRCl-000WJE-6Y for pgsql-hackers@lists.postgresql.org; Sun, 22 Sep 2024 18:21:09 +0000 Received: by mail-vk1-xa33.google.com with SMTP id 71dfb90a1353d-501269674daso995658e0c.0 for ; Sun, 22 Sep 2024 11:21:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727029265; x=1727634065; 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=330yoVV5nqfiGJBP2Ij9K1LbouQpuL2GCiuuL6/FXX8=; b=X9gY6eX5u7LSssY9fzfiFhI2VnsRI0nITjQWCyT2PBhaQ49aoFeXGyfUk29ZzPyHf1 PTwl6Fc5vAc57krBxrYKARA1l6F865v3nv56bUx77K6AI2kYxYKH0YCsCtzTP2ix2g7S 3K3UMT78EeWZj/boBV+pMQPTo80oyZU30Bw1vOOXc2jviC3Y3/vcZDgySy/fK/7wtBnC z7ZtGXC4pm3scfJIm9sttNkPFmJAyVF4ETDRcjjNlyMYWLKKcYGvnJ9xv3qc8JyX7taz OG+BrU0pBEB75cWAk36CjeojzyhhXHOPZRDFuS87MnhwFgqlg8F6Pl5RokuiyXUJ523D rBxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727029265; x=1727634065; 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=330yoVV5nqfiGJBP2Ij9K1LbouQpuL2GCiuuL6/FXX8=; b=SR1eIVVPwPIi5m3kUcCl253HkUs4ztxKdEl+TFf8FQMOlZMAmgFiumK3cP0p8rU20O SDBYwtuZi4jGAp3wUMvfYbq8nG0TZXj2YmhOkZJgdfMcFHmFDXwoJNGN0IOhlSbrvIV4 zHySLOzcLz5/y5EOKNXZY/lMbNNfDovM7As8h/LnBCW4mZ6HDUC0ndQW0GbwgRHdbCjy DPDF6/ovnDIuM6HqAxQZPx/UMtU5e4/mt4ZnNMucY6tDO56gDINDy+H+pc6jzdXRP9CI 9GCx/9VcodaatlLoeEyMp5Hy/WhDruPbgcLVMnKqAThThS06fCKTNl13wPJ2a65YoS9W bShA== X-Forwarded-Encrypted: i=1; AJvYcCUWVWVIbrcF1eYJMHVNwySyFPRGJTuxHDsj+xumVSMf5kOADNj/+mm8mnUt/cBUPfuTKvwE+iBt6f8pX8lH@lists.postgresql.org X-Gm-Message-State: AOJu0Yx3AHDX59fUQQ5qJir8iQQ5DZBP0VhGrm6h0LujExmE00Ic6Wod fErx1Q2GAsu69G0IgK52HtD+cAWUHa2zh0dPAsHVSB48BLmveTMm0QotyUcaw56VbkhY0fJcE0W KJWabbfmwjPicxhUOO7nT4sH0gaQ= X-Google-Smtp-Source: AGHT+IGLMSCXtp4zKu3b73LH3hk8MDQXAUa7J5WVF52Wrbj6KTryoBgrSVZBaMuMBiEMymqa4TuYDOa3AydsiD//Ulk= X-Received: by 2002:a05:6102:374a:b0:49b:cfbc:e782 with SMTP id ada2fe7eead31-49fc7623a40mr5924833137.21.1727029265116; Sun, 22 Sep 2024 11:21:05 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Shayon Mukherjee Date: Sun, 22 Sep 2024 14:20:53 -0400 Message-ID: Subject: Re: [PATCH] Re: Proposal to Enable/Disable Index using ALTER INDEX To: David Rowley Cc: Nathan Bossart , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000dd4d7a0622b95539" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd4d7a0622b95539 Content-Type: multipart/alternative; boundary="000000000000dd4d780622b95537" --000000000000dd4d780622b95537 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, I realized there were some white spaces in the diff and a compiler warning error from CI, so I have fixed those and the updated patch with v2 is now attached. Shayon On Sun, Sep 22, 2024 at 1:42=E2=80=AFPM Shayon Mukherjee wrote: > Hello, > > Thank you for all the feedback and insights. Work was busy, so I didn't > get to follow up earlier. > > This patch introduces the ability to enable or disable indexes using ALTE= R > INDEX > and CREATE INDEX commands. > > Original motivation for the problem and proposal for a patch > can be found here[0] > > This patch contains the relevant implementation details, new regression > tests and documentation. > It passes all the existing specs and the newly added regression tests. It > compiles, so the > patch can be applied for testing as well. > > I have attached the patch in this email, and have also shared it on my > Github fork[1]. Mostly so > that I can ensure the full CI passes. > > > *Implementation details:* > - New Grammar: > * ALTER INDEX ... ENABLE/DISABLE > * CREATE INDEX ... DISABLE > > - Default state is enabled. Indexes are only disabled when explicitly > instructed via CREATE INDEX ... DISABLE or ALTER INDEX ... DISABLE. > > - Primary Key and Unique constraint indexes are always enabled as well. > The > ENABLE/DISABLE grammar is not supported for these types of indexes. The= y > can > be later disabled via ALTER INDEX ... ENABLE/DISABLE. > > - ALTER INDEX ... ENABLE/DISABLE performs an in-place update of the > pg_index > catalog to protect against indcheckxmin. > > - pg_get_indexdef() support for the new functionality and grammar. This > change is > reflected in \d output for tables and pg_dump. We show the DISABLE > syntax accordingly. > > - Updated create_index.sql regression test to cover the new grammar and > verify > that disabled indexes are not used in queries. > > - Modified get_index_paths() and build_index_paths() to exclude disabled > indexes from consideration during query planning. > > - No changes are made to stop the index from getting rebuilt. This way we > ensure no > data miss or corruption when index is re-enabled. > > - TOAST indexes are supported and enabled by default. > > - REINDEX CONCURRENTLY is supported as well and the existing state of > pg_index.indisenabled > is carried over accordingly. > > - catversion.h is updated with a new CATALOG_VERSION_NO to reflect change > in pg_index > schema. > > - See the changes in create_index.sql to get an idea of the grammar and > sql statements. > > - See the changes in create_index.out to get an idea of the catalogue > states and EXPLAIN > output to see when an index is getting used or isn't (when disabled). > > I am looking forward to any and all feedback on this patch, including but > not limited to > code quality, tests, and fundamental logic. > > Thank you for the reviews and feedback. > > [0] > https://www.postgresql.org/message-id/CANqtF-oXKe0M%3D0QOih6H%2BsZRjE2BWA= bkW_1%2B9nMEAMLxUJg5jA%40mail.gmail.com > [1] https://github.com/shayonj/postgres/pull/1 > > Best, > Shayon > > On Tue, Sep 10, 2024 at 5:35=E2=80=AFPM David Rowley wrote: > >> On Wed, 11 Sept 2024 at 03:12, Nathan Bossart >> wrote: >> > >> > On Tue, Sep 10, 2024 at 10:16:34AM +1200, David Rowley wrote: >> > > If we get the skip scan feature for PG18, then there's likely going = to >> > > be lots of people with indexes that they might want to consider >> > > removing after upgrading. Maybe this is a good time to consider this >> > > feature as it possibly won't ever be more useful than it will be aft= er >> > > we get skip scans. >> > >> > +1, this is something I've wanted for some time. There was some past >> > discussion, too [0]. >> > >> > [0] >> https://postgr.es/m/flat/ed8c9ed7-bb5d-aaec-065b-ad4893645deb%402ndQuadr= ant.com >> >> Thanks for digging that up. I'd forgotten about that. I see there was >> pushback from having this last time, which is now over 6 years ago. >> In the meantime, we still have nothing to make this easy for people. >> >> I think the most important point I read in that thread is [1]. Maybe >> what I mentioned in [2] is a good workaround. >> >> Additionally, I think there will need to be syntax in CREATE INDEX for >> this. Without that pg_get_indexdef() might return SQL that does not >> reflect the current state of the index. MySQL seems to use "CREATE >> INDEX name ON table (col) [VISIBLE|INVISIBLE]". >> >> David >> >> [1] >> https://www.postgresql.org/message-id/20180618215635.m5vrnxdxhxytvmcm%40= alap3.anarazel.de >> [2] >> https://www.postgresql.org/message-id/CAKJS1f_L7y_BTGESp5Qd6BSRHXP0mj3x9= O9C_U27GU478UwpBw%40mail.gmail.com >> > > > -- > Kind Regards, > Shayon Mukherjee > --=20 Kind Regards, Shayon Mukherjee --000000000000dd4d780622b95537 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

I realized there were some white= spaces in the diff and a compiler=C2=A0warning error from CI, so I have fi= xed those and the updated patch with=C2=A0v2 is now attached.=C2=A0

Shayon

On Sun, Sep 22, 2024 at 1:42=E2=80=AFPM Shayo= n Mukherjee <shayonj@gmail.com&= gt; wrote:
Hello,

Thank you for = all the feedback and insights. Work was busy, so I didn't get to follow= up earlier.=C2=A0

This pa= tch introduces the ability to enable or disable indexes using ALTER INDEXand CREATE INDEX commands.

Original motivation for the problem an= d proposal for a patch
can be found here[0]

This patch contains t= he relevant implementation details, new regression tests and documentation.=
It passes all the existing specs and the newly added regression tests.= It compiles, so the
patch can be applied for testing as well.

I have attached the patch in this email, and have also= shared it on my Github fork[1]. Mostly so
that I can ensure the full CI= passes.

Implementation details:

- = New Grammar:
=C2=A0 * ALTER INDEX ... ENABLE/DISABLE
=C2=A0 * CREATE= INDEX ... DISABLE

- Default state is enabled. Indexes are only disa= bled when explicitly
=C2=A0 instructed via CREATE INDEX ... DISABLE or = ALTER INDEX ... DISABLE.

- Primary Key and Unique constraint indexes= are always enabled as well. The
=C2=A0 ENABLE/DISABLE grammar is not s= upported for these types of indexes. They can
=C2=A0 be later disabled v= ia ALTER INDEX ... ENABLE/DISABLE.

- ALTER INDEX ... ENABLE/DISABLE = performs an in-place update of the pg_index
=C2=A0 catalog to protect a= gainst indcheckxmin.

- pg_get_indexdef() support=C2=A0for the new fu= nctionality and grammar. This change is
=C2=A0 reflected in \d output f= or tables and pg_dump. We show the DISABLE syntax accordingly.

- Upd= ated create_index.sql regression test to cover the new grammar and verify <= br>=C2=A0 that disabled indexes are not used in queries.

- Modified = get_index_paths() and build_index_paths() to exclude disabled
=C2=A0 in= dexes from consideration during query planning.

- No changes are mad= e to stop the index from getting rebuilt. This way we ensure no
=C2=A0 d= ata miss or corruption when index is re-enabled.

- TOAST indexes are= supported and enabled by default.

- REINDEX CONCURRENTLY is support= ed as well and the existing state of pg_index.indisenabled
=C2=A0 is car= ried over accordingly.

- catversion.h is updated with a new CATALOG_= VERSION_NO to reflect change in pg_index
=C2=A0 schema.

- See the= changes in create_index.sql to get an idea of the grammar and sql statemen= ts.

- See the changes in create_index.out to get an idea of the cat= alogue states and EXPLAIN
=C2=A0 output to see when an index is getting = used or isn't (when disabled).

I am looking forward to any and a= ll feedback on this patch, including but not limited to
code quality, te= sts, and fundamental logic.=C2=A0

= Thank you for the reviews and feedback.

Best,
Shayon
On= Tue, Sep 10, 2024 at 5:35=E2=80=AFPM David Rowley <dgrowleyml@gmail.com> wrote:
On Wed, 11 Sept 2= 024 at 03:12, Nathan Bossart <nathandbossart@gmail.com> wrote:
>
> On Tue, Sep 10, 2024 at 10:16:34AM +1200, David Rowley wrote:
> > If we get the skip scan feature for PG18, then there's likely= going to
> > be lots of people with indexes that they might want to consider > > removing after upgrading. Maybe this is a good time to consider t= his
> > feature as it possibly won't ever be more useful than it will= be after
> > we get skip scans.
>
> +1, this is something I've wanted for some time.=C2=A0 There was s= ome past
> discussion, too [0].
>
> [0] https://post= gr.es/m/flat/ed8c9ed7-bb5d-aaec-065b-ad4893645deb%402ndQuadrant.com

Thanks for digging that up. I'd forgotten about that.=C2=A0 I see there= was
pushback from having this last time, which is now over 6 years ago.
In the meantime, we still have nothing to make this easy for people.

I think the most important point I read in that thread is [1]. Maybe
what I mentioned in [2] is a good workaround.

Additionally, I think there will need to be syntax in CREATE INDEX for
this. Without that pg_get_indexdef() might return SQL that does not
reflect the current state of the index. MySQL seems to use "CREATE
INDEX name ON table (col) [VISIBLE|INVISIBLE]".

David

[1] https:/= /www.postgresql.org/message-id/20180618215635.m5vrnxdxhxytvmcm%40alap3.anar= azel.de
[2] https://www.postgresql.org/message-id/CAKJS1f_L7y_BTGESp5Qd6BSR= HXP0mj3x9O9C_U27GU478UwpBw%40mail.gmail.com


--
Kind Regards,
Shayon Mukherjee


--
Kind Regards,
Shayon Mukherjee
--000000000000dd4d780622b95537-- --000000000000dd4d7a0622b95539 Content-Type: application/octet-stream; name="v2-0001-Introduce-the-ability-to-enable-disable-indexes.patch" Content-Disposition: attachment; filename="v2-0001-Introduce-the-ability-to-enable-disable-indexes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m1dwmequ0 RnJvbSA4NDhiMTQzZDZhZTE4MTc2MDJhYTY4NzEwZTliY2MwMzNjMDYxZGE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGF5b24gTXVraGVyamVlIDxzaGF5b25qQGdtYWlsLmNvbT4K RGF0ZTogU3VuLCAyMiBTZXAgMjAyNCAxNDowMTo0NSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IEludHJvZHVjZSB0aGUgYWJpbGl0eSB0byBlbmFibGUvZGlzYWJsZSBpbmRleGVzCgotLS0KIGRv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICB8ICAxMSArCiBkb2Mvc3Jj L3NnbWwvcmVmL2FsdGVyX2luZGV4LnNnbWwgICAgICAgICAgfCAgMzkgKysrKwogZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCAgICAgICAgIHwgIDI5ICsrKwogc3JjL2JhY2tlbmQv Ym9vdHN0cmFwL2Jvb3RwYXJzZS55ICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyAgICAgICAgICAgICAgICB8ICAzMSArKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cv dG9hc3RpbmcuYyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jICAgICAgICAgICB8ICA5NCArKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyAgICAgIHwgIDEyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAg ICAgICAgfCAgNDggKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICAg ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAgICB8 ICAgNCArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggICAgICAgICAgIHwgICAyICstCiBz cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfaW5kZXguaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8IDI1MCArKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgICAgICB8IDE0MCArKysrKysrKysrKysK IDIxIGZpbGVzIGNoYW5nZWQsIDY3MSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRh bG9ncy5zZ21sCmluZGV4IGJmYjk3ODY1ZTEuLjYxZmJmNWJlYjUgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBA IC00NTkwLDYgKzQ1OTAsMTcgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJh dGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgICBwYXJ0 aWFsIGluZGV4LgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgorCisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5pbmRpc2VuYWJsZWQ8L3N0 cnVjdGZpZWxkPiA8dHlwZT5ib29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+ CisgICAgICAgSWYgdHJ1ZSwgdGhlIGluZGV4IGlzIGN1cnJlbnRseSBlbmFibGVkIGFuZCBzaG91 bGQgYmUgdXNlZCBmb3IgcXVlcmllcy4KKyAgICAgICBJZiBmYWxzZSwgdGhlIGluZGV4IGlzIGRp c2FibGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHF1ZXJpZXMsCisgICAgICAgYnV0IGlz IHN0aWxsIG1haW50YWluZWQgd2hlbiB0aGUgdGFibGUgaXMgbW9kaWZpZWQuIERlZmF1bHQgaXMg dHJ1ZS4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KICAgICA8L3Rib2R5Pgog ICAgPC90Z3JvdXA+CiAgIDwvdGFibGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Fs dGVyX2luZGV4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX2luZGV4LnNnbWwKaW5kZXgg ZTI2ZWZlYzA2NC4uNjEzZDYzYjc0NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfaW5kZXguc2dtbApAQCAt MzEsNiArMzEsOCBAQCBBTFRFUiBJTkRFWCBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gQUxURQogICAgIFNFVCBTVEFUSVNUSUNT IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbnRlZ2VyPC9yZXBsYWNlYWJsZT4KIEFM VEVSIElOREVYIEFMTCBJTiBUQUJMRVNQQUNFIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5uYW1lPC9yZXBsYWNlYWJsZT4gWyBPV05FRCBCWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cm9sZV9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gXQogICAgIFNFVCBUQUJMRVNQ QUNFIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uZXdfdGFibGVzcGFjZTwvcmVwbGFj ZWFibGU+IFsgTk9XQUlUIF0KK0FMVEVSIElOREVYIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBFTkFCTEUKK0FMVEVSIElOREVY IFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxh Y2VhYmxlPiBESVNBQkxFCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAKQEAgLTE1 OCw2ICsxNjAsMjkgQEAgQUxURVIgSU5ERVggQUxMIElOIFRBQkxFU1BBQ0UgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgIDwvbGlzdGl0ZW0+CiAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJh bD5FTkFCTEU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBFbmFibGUgdGhlIHNwZWNpZmllZCBpbmRleC4gVGhlIGluZGV4IHdpbGwgYmUgdXNlZCBi eSB0aGUgcXVlcnkgcGxhbm5lcgorICAgICAgZm9yIHF1ZXJ5IG9wdGltaXphdGlvbi4gVGhpcyBp cyB0aGUgZGVmYXVsdCBzdGF0ZSBmb3IgbmV3bHkgY3JlYXRlZCBpbmRleGVzLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPkRJU0FCTEU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW5kZXgu IEEgZGlzYWJsZWQgaW5kZXggaXMgbm90IHVzZWQgYnkgdGhlIHF1ZXJ5IHBsYW5uZXIKKyAgICAg IGZvciBxdWVyeSBvcHRpbWl6YXRpb24sIGJ1dCBpdCBpcyBzdGlsbCBtYWludGFpbmVkIHdoZW4g dGhlIHVuZGVybHlpbmcgdGFibGUKKyAgICAgIGRhdGEgY2hhbmdlcy4gVGhpcyBjYW4gYmUgdXNl ZnVsIGZvciB0ZXN0aW5nIHF1ZXJ5IHBlcmZvcm1hbmNlIHdpdGggYW5kIHdpdGhvdXQKKyAgICAg IHNwZWNpZmljIGluZGV4ZXMsIG9yIGZvciB0ZW1wb3JhcmlseSByZWR1Y2luZyB0aGUgb3Zlcmhl YWQgb2YgaW5kZXggbWFpbnRlbmFuY2UKKyAgICAgIGR1cmluZyBidWxrIGRhdGEgbG9hZGluZyBv cGVyYXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCiAgIDwvdmFyaWFibGVsaXN0PgogICA8L3BhcmE+CiAKQEAgLTMwMCw2ICszMjUsMjAg QEAgQ1JFQVRFIElOREVYIGNvb3JkX2lkeCBPTiBtZWFzdXJlZCAoeCwgeSwgKHogKyB0KSk7CiBB TFRFUiBJTkRFWCBjb29yZF9pZHggQUxURVIgQ09MVU1OIDMgU0VUIFNUQVRJU1RJQ1MgMTAwMDsK IDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgogCisgIDxwYXJhPgorICAgVG8gZW5hYmxlIGFuIGlu ZGV4OgorPHByb2dyYW1saXN0aW5nPgorQUxURVIgSU5ERVggaWR4X25hbWUgRU5BQkxFOworPC9w cm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gZGlzYWJsZSBhbiBp bmRleDoKKzxwcm9ncmFtbGlzdGluZz4KK0FMVEVSIElOREVYIGlkeF9uYW1lIERJU0FCTEU7Cis8 L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisKICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3Qx PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXggNjIxYmMwZTI1My4uZjFlZWJmYTI1 MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCkBAIC0yOCw2ICsyOCw3IEBAIENSRUFU RSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9CiAgICAgWyBXSVRIICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnN0b3JhZ2VfcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkgXQogICAgIFsg VEFCTEVTUEFDRSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVzcGFjZV9uYW1l PC9yZXBsYWNlYWJsZT4gXQogICAgIFsgV0hFUkUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnByZWRpY2F0ZTwvcmVwbGFjZWFibGU+IF0KKyAgICBbIERJU0FCTEUgXQogPC9zeW5vcHNp cz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCkBAIC0zODAsNiArMzgxLDE5IEBAIENSRUFURSBbIFVO SVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFj ZWFibGUgY2xhc3M9CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48bGl0ZXJhbD5ESVNBQkxFPC9saXRlcmFs PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQ3JlYXRl cyB0aGUgaW5kZXggaW4gYSBkaXNhYmxlZCBzdGF0ZSAoZGVmYXVsdCBlbmFibGVkKS4gQSBkaXNh YmxlZCBpbmRleCBpcyBub3QgdXNlZCBieSB0aGUKKyAgICAgICAgcXVlcnkgcGxhbm5lciBmb3Ig cXVlcnkgb3B0aW1pemF0aW9uLCBidXQgaXQgaXMgc3RpbGwgbWFpbnRhaW5lZCB3aGVuIHRoZQor ICAgICAgICB1bmRlcmx5aW5nIHRhYmxlIGRhdGEgY2hhbmdlcy4gVGhpcyBjYW4gYmUgdXNlZnVs IHdoZW4geW91IHdhbnQgdG8gY3JlYXRlCisgICAgICAgIGFuIGluZGV4IHdpdGhvdXQgaW1tZWRp YXRlbHkgaW1wYWN0aW5nIHF1ZXJ5IHBlcmZvcm1hbmNlLCBhbGxvd2luZyB5b3UgdG8KKyAgICAg ICAgZW5hYmxlIGl0IGxhdGVyIGF0IGEgbW9yZSBjb252ZW5pZW50IHRpbWUuIFRoZSBpbmRleCBj YW4gYmUgZW5hYmxlZCBsYXRlcgorICAgICAgICB1c2luZyA8Y29tbWFuZD5BTFRFUiBJTkRFWCAu Li4gRU5BQkxFPC9jb21tYW5kPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KIAogICA8cmVmc2VjdDIg aWQ9InNxbC1jcmVhdGVpbmRleC1zdG9yYWdlLXBhcmFtZXRlcnMiIHhyZWZsYWJlbD0iSW5kZXgg U3RvcmFnZSBQYXJhbWV0ZXJzIj4KQEAgLTcwMSw2ICs3MTUsMTQgQEAgSW5kZXhlczoKICAgICBw YXJ0aXRpb25lZCBpbmRleCBpcyBhIG1ldGFkYXRhIG9ubHkgb3BlcmF0aW9uLgogICAgPC9wYXJh PgogCisgIDxwYXJhPgorICAgV2hlbiBjcmVhdGluZyBhbiBpbmRleCB3aXRoIHRoZSA8bGl0ZXJh bD5ESVNBQkxFPC9saXRlcmFsPiBvcHRpb24sIHRoZSBpbmRleAorICAgd2lsbCBiZSBjcmVhdGVk IGJ1dCBub3QgdXNlZCBmb3IgcXVlcnkgcGxhbm5pbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IK KyAgIHByZXBhcmluZyBhbiBpbmRleCBpbiBhZHZhbmNlIG9mIGl0cyB1c2UsIG9yIGZvciB0ZXN0 aW5nIHB1cnBvc2VzLiBUaGUgaW5kZXgKKyAgIHdpbGwgc3RpbGwgYmUgbWFpbnRhaW5lZCBhcyB0 aGUgdGFibGUgaXMgbW9kaWZpZWQsIHNvIGl0IGNhbiBiZSBlbmFibGVkCisgICBsYXRlciB3aXRo b3V0IG5lZWRpbmcgdG8gYmUgcmVidWlsdC4gQnkgZGVmYXVsdCBhbGwgbmV3IGluZGV4ZXMgYXJl IGVuYWJsZWQuCisgIDwvcGFyYT4KKwogICA8L3JlZnNlY3QyPgogIDwvcmVmc2VjdDE+CiAKQEAg LTk4MCw2ICsxMDAyLDEzIEBAIFNFTEVDVCAqIEZST00gcG9pbnRzCiBDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIHNhbGVzX3F1YW50aXR5X2luZGV4IE9OIHNhbGVzX3RhYmxlIChxdWFudGl0eSk7 CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRvIGNyZWF0ZSBhbiBp bmRleCBvbiB0aGUgdGFibGUgPGxpdGVyYWw+dGVzdF90YWJsZTwvbGl0ZXJhbD4gd2l0aCB0aGUg ZGVmYXVsdAorICAgbmFtZSwgYnV0IGhhdmUgaXQgaW5pdGlhbGx5IGRpc2FibGVkOgorPHByb2dy YW1saXN0aW5nPgorQ1JFQVRFIElOREVYIE9OIHRlc3RfdGFibGUgKGNvbDEpIERJU0FCTEU7Cis8 L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290cGFyc2UueSBiL3NyYy9iYWNr ZW5kL2Jvb3RzdHJhcC9ib290cGFyc2UueQppbmRleCA3M2E3NTkyZmI3Li42MDIzZDU4NDkwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHBhcnNlLnkKKysrIGIvc3JjL2Jh Y2tlbmQvYm9vdHN0cmFwL2Jvb3RwYXJzZS55CkBAIC0zMDIsNiArMzAyLDcgQEAgQm9vdF9EZWNs YXJlSW5kZXhTdG10OgogCQkJCQlzdG10LT5jb25jdXJyZW50ID0gZmFsc2U7CiAJCQkJCXN0bXQt PmlmX25vdF9leGlzdHMgPSBmYWxzZTsKIAkJCQkJc3RtdC0+cmVzZXRfZGVmYXVsdF90YmxzcGMg PSBmYWxzZTsKKwkJCQkJc3RtdC0+aXNlbmFibGVkID0gdHJ1ZTsKIAogCQkJCQkvKiBsb2NrcyBh bmQgcmFjZXMgbmVlZCBub3QgY29uY2VybiB1cyBpbiBib290c3RyYXAgbW9kZSAqLwogCQkJCQly ZWxhdGlvbklkID0gUmFuZ2VWYXJHZXRSZWxpZChzdG10LT5yZWxhdGlvbiwgTm9Mb2NrLApAQCAt MzU1LDYgKzM1Niw3IEBAIEJvb3RfRGVjbGFyZVVuaXF1ZUluZGV4U3RtdDoKIAkJCQkJc3RtdC0+ Y29uY3VycmVudCA9IGZhbHNlOwogCQkJCQlzdG10LT5pZl9ub3RfZXhpc3RzID0gZmFsc2U7CiAJ CQkJCXN0bXQtPnJlc2V0X2RlZmF1bHRfdGJsc3BjID0gZmFsc2U7CisJCQkJCXN0bXQtPmlzZW5h YmxlZCA9IHRydWU7CiAKIAkJCQkJLyogbG9ja3MgYW5kIHJhY2VzIG5lZWQgbm90IGNvbmNlcm4g dXMgaW4gYm9vdHN0cmFwIG1vZGUgKi8KIAkJCQkJcmVsYXRpb25JZCA9IFJhbmdlVmFyR2V0UmVs aWQoc3RtdC0+cmVsYXRpb24sIE5vTG9jaywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCBiMmIzZWNiNTI0 Li4xOTg5Y2I4Y2U5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0xMTgsNyArMTE4LDggQEAgc3RhdGlj IHZvaWQgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsIE9pZCBoZWFwb2lkLAogCQkJ CQkJCQlib29sIGlzZXhjbHVzaW9uLAogCQkJCQkJCQlib29sIGltbWVkaWF0ZSwKIAkJCQkJCQkJ Ym9vbCBpc3ZhbGlkLAotCQkJCQkJCQlib29sIGlzcmVhZHkpOworCQkJCQkJCQlib29sIGlzcmVh ZHksCisJCQkJCQkJCWJvb2wgaXNlbmFibGVkKTsKIHN0YXRpYyB2b2lkIGluZGV4X3VwZGF0ZV9z dGF0cyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJICAgYm9vbCBoYXNpbmRleCwKIAkJCQkJCQkgICBk b3VibGUgcmVsdHVwbGVzKTsKQEAgLTU2OSw3ICs1NzAsOCBAQCBVcGRhdGVJbmRleFJlbGF0aW9u KE9pZCBpbmRleG9pZCwKIAkJCQkJYm9vbCBpc2V4Y2x1c2lvbiwKIAkJCQkJYm9vbCBpbW1lZGlh dGUsCiAJCQkJCWJvb2wgaXN2YWxpZCwKLQkJCQkJYm9vbCBpc3JlYWR5KQorCQkJCQlib29sIGlz cmVhZHksCisJCQkJCWJvb2wgaXNlbmFibGVkKQogewogCWludDJ2ZWN0b3IgKmluZGtleTsKIAlv aWR2ZWN0b3IgICppbmRjb2xsYXRpb247CkBAIC02NDcsNiArNjQ5LDcgQEAgVXBkYXRlSW5kZXhS ZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAJdmFsdWVzW0FudW1fcGdfaW5kZXhfaW5kaXNyZWFkeSAt IDFdID0gQm9vbEdldERhdHVtKGlzcmVhZHkpOwogCXZhbHVlc1tBbnVtX3BnX2luZGV4X2luZGlz bGl2ZSAtIDFdID0gQm9vbEdldERhdHVtKHRydWUpOwogCXZhbHVlc1tBbnVtX3BnX2luZGV4X2lu ZGlzcmVwbGlkZW50IC0gMV0gPSBCb29sR2V0RGF0dW0oZmFsc2UpOworCXZhbHVlc1tBbnVtX3Bn X2luZGV4X2luZGlzZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKGlzZW5hYmxlZCk7CiAJdmFs dWVzW0FudW1fcGdfaW5kZXhfaW5ka2V5IC0gMV0gPSBQb2ludGVyR2V0RGF0dW0oaW5ka2V5KTsK IAl2YWx1ZXNbQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24gLSAxXSA9IFBvaW50ZXJHZXREYXR1 bShpbmRjb2xsYXRpb24pOwogCXZhbHVlc1tBbnVtX3BnX2luZGV4X2luZGNsYXNzIC0gMV0gPSBQ b2ludGVyR2V0RGF0dW0oaW5kY2xhc3MpOwpAQCAtNzEyLDYgKzcxNSw4IEBAIFVwZGF0ZUluZGV4 UmVsYXRpb24oT2lkIGluZGV4b2lkLAogICoJCQlhbHJlYWR5IGV4aXN0cy4KICAqCQlJTkRFWF9D UkVBVEVfUEFSVElUSU9ORUQ6CiAgKgkJCWNyZWF0ZSBhIHBhcnRpdGlvbmVkIGluZGV4ICh0YWJs ZSBtdXN0IGJlIHBhcnRpdGlvbmVkKQorICoJCUlOREVYX0NSRUFURV9ESVNBQkxFRDoKKyoJCQkJ Y3JlYXRlIHRoZSBpbmRleCBhcyBkaXNhYmxlZCBpZiBpbnN0cnVjdGVkLCBkZWZhdWx0cyB0byBi ZWluZyBlbmFibGVkLgogICogY29uc3RyX2ZsYWdzOiBmbGFncyBwYXNzZWQgdG8gaW5kZXhfY29u c3RyYWludF9jcmVhdGUKICAqCQkob25seSBpZiBJTkRFWF9DUkVBVEVfQUREX0NPTlNUUkFJTlQg aXMgc2V0KQogICogYWxsb3dfc3lzdGVtX3RhYmxlX21vZHM6IGFsbG93IHRhYmxlIHRvIGJlIGEg c3lzdGVtIGNhdGFsb2cKQEAgLTc1Nyw2ICs3NjIsNyBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCWJvb2wJCWludmFsaWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVfSU5W QUxJRCkgIT0gMDsKIAlib29sCQljb25jdXJyZW50ID0gKGZsYWdzICYgSU5ERVhfQ1JFQVRFX0NP TkNVUlJFTlQpICE9IDA7CiAJYm9vbAkJcGFydGl0aW9uZWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVB VEVfUEFSVElUSU9ORUQpICE9IDA7CisJYm9vbCAJCWlzZW5hYmxlZCAgPSAoZmxhZ3MgJiBJTkRF WF9DUkVBVEVfRU5BQkxFRCkgIT0gMDsKIAljaGFyCQlyZWxraW5kOwogCVRyYW5zYWN0aW9uSWQg cmVsZnJvemVueGlkOwogCU11bHRpWGFjdElkIHJlbG1pbm14aWQ7CkBAIC0xMDQwLDEzICsxMDQ2 LDE1IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICoJICAoT3IsIGNv dWxkIGRlZmluZSBhIHJ1bGUgdG8gbWFpbnRhaW4gdGhlIHByZWRpY2F0ZSkgLS1OZWxzLCBGZWIg JzkyCiAJICogLS0tLS0tLS0tLS0tLS0tLQogCSAqLworCiAJVXBkYXRlSW5kZXhSZWxhdGlvbihp bmRleFJlbGF0aW9uSWQsIGhlYXBSZWxhdGlvbklkLCBwYXJlbnRJbmRleFJlbGlkLAogCQkJCQkJ aW5kZXhJbmZvLAogCQkJCQkJY29sbGF0aW9uSWRzLCBvcGNsYXNzSWRzLCBjb2xvcHRpb25zLAog CQkJCQkJaXNwcmltYXJ5LCBpc19leGNsdXNpb24sCiAJCQkJCQkoY29uc3RyX2ZsYWdzICYgSU5E RVhfQ09OU1RSX0NSRUFURV9ERUZFUlJBQkxFKSA9PSAwLAogCQkJCQkJIWNvbmN1cnJlbnQgJiYg IWludmFsaWQsCi0JCQkJCQkhY29uY3VycmVudCk7CisJCQkJCQkhY29uY3VycmVudCwKKwkJCQkJ CWlzZW5hYmxlZCk7CiAKIAkvKgogCSAqIFJlZ2lzdGVyIHJlbGNhY2hlIGludmFsaWRhdGlvbiBv biB0aGUgaW5kZXhlcycgaGVhcCByZWxhdGlvbiwgdG8KQEAgLTEzMTUsNiArMTMyMyw4IEBAIGlu ZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBv bGRJbmRleElkLAogCUxpc3QJICAgKmluZGV4Q29sTmFtZXMgPSBOSUw7CiAJTGlzdAkgICAqaW5k ZXhFeHBycyA9IE5JTDsKIAlMaXN0CSAgICppbmRleFByZWRzID0gTklMOworCUZvcm1fcGdfaW5k ZXggaW5kZXhGb3JtOworCWJpdHMxNiAJIGNyZWF0ZUZsYWdzOwogCiAJaW5kZXhSZWxhdGlvbiA9 IGluZGV4X29wZW4ob2xkSW5kZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKQEAgLTEzNDIsNiAr MTM1Miw5IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVs YXRpb24sIE9pZCBvbGRJbmRleElkLAogCQkJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZG9wdGlv bik7CiAJaW5kY29sb3B0aW9ucyA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihjb2xP cHRpb25EYXR1bSk7CiAKKwkvKiBHZXQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG9yaWdpbmFs IGluZGV4ICovCisJaW5kZXhGb3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChpbmRleFR1 cGxlKTsKKwogCS8qIEZldGNoIHJlbG9wdGlvbnMgb2YgaW5kZXggaWYgYW55ICovCiAJY2xhc3NU dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ob2xkSW5kZXhJ ZCkpOwogCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc1R1cGxlKSkKQEAgLTE0MzMsNiArMTQ0 NiwxNiBAQCBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0 aW9uLCBPaWQgb2xkSW5kZXhJZCwKIAkJc3RhdHRhcmdldHNbaV0uaXNudWxsID0gaXNudWxsOwog CX0KIAorCS8qCisJKiBEZXRlcm1pbmUgdGhlIGNyZWF0ZSBmbGFncyBmb3IgdGhlIG5ldyBpbmRl eC4KKwkqIFdlIGFsd2F5cyB1c2UgU0tJUF9CVUlMRCBhbmQgQ09OQ1VSUkVOVCBmb3IgY29uY3Vy cmVudCByZWluZGV4aW5nLgorCSogSWYgdGhlIG9yaWdpbmFsIGluZGV4IHdhcyBlbmFibGVkLCB3 ZSBhbHNvIHNldCB0aGUgRU5BQkxFRCBmbGFnCisJKiB0byBtYWludGFpbiB0aGUgc2FtZSBzdGF0 ZSBpbiB0aGUgbmV3IGluZGV4LgorCSovCisJY3JlYXRlRmxhZ3MgPSBJTkRFWF9DUkVBVEVfU0tJ UF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5UOworCWlmIChpbmRleEZvcm0tPmluZGlz ZW5hYmxlZCkKKwkJCWNyZWF0ZUZsYWdzIHw9IElOREVYX0NSRUFURV9FTkFCTEVEOworCiAJLyoK IAkgKiBOb3cgY3JlYXRlIHRoZSBuZXcgaW5kZXguCiAJICoKQEAgLTE0NTYsNyArMTQ3OSw3IEBA IGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9p ZCBvbGRJbmRleElkLAogCQkJCQkJCSAgaW5kY29sb3B0aW9ucy0+dmFsdWVzLAogCQkJCQkJCSAg c3RhdHRhcmdldHMsCiAJCQkJCQkJICByZWxvcHRpb25zRGF0dW0sCi0JCQkJCQkJICBJTkRFWF9D UkVBVEVfU0tJUF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5ULAorCQkJCQkJCSAgY3Jl YXRlRmxhZ3MsCiAJCQkJCQkJICAwLAogCQkJCQkJCSAgdHJ1ZSwgLyogYWxsb3cgdGFibGUgdG8g YmUgYSBzeXN0ZW0gY2F0YWxvZz8gKi8KIAkJCQkJCQkgIGZhbHNlLAkvKiBpc19pbnRlcm5hbD8g Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCA3MzhiYzQ2YWU4Li5jZTQ5N2VlZDU4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy90b2FzdGluZy5jCkBAIC0zMjQsNyArMzI0LDcgQEAgY3JlYXRlX3RvYXN0X3RhYmxl KFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAkJCQkgQlRS RUVfQU1fT0lELAogCQkJCSByZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSwKIAkJCQkgY29sbGF0 aW9uSWRzLCBvcGNsYXNzSWRzLCBOVUxMLCBjb2xvcHRpb25zLCBOVUxMLCAoRGF0dW0pIDAsCi0J CQkJIElOREVYX0NSRUFURV9JU19QUklNQVJZLCAwLCB0cnVlLCB0cnVlLCBOVUxMKTsKKwkJCQkg SU5ERVhfQ1JFQVRFX0lTX1BSSU1BUlkgfCBJTkRFWF9DUkVBVEVfRU5BQkxFRCwgMCwgdHJ1ZSwg dHJ1ZSwgTlVMTCk7CiAKIAl0YWJsZV9jbG9zZSh0b2FzdF9yZWwsIE5vTG9jayk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggZjk5YzJkMmRlZS4uN2NkMjA0MTMwMCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMKQEAgLTExOTEsNiArMTE5MSwxMCBAQCBEZWZpbmVJbmRleChPaWQg dGFibGVJZCwKIAkJZmxhZ3MgfD0gSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVEOwogCWlmIChzdG10 LT5wcmltYXJ5KQogCQlmbGFncyB8PSBJTkRFWF9DUkVBVEVfSVNfUFJJTUFSWTsKKyAgIGlmIChz dG10LT5pc2VuYWJsZWQpCisJCWZsYWdzIHw9IElOREVYX0NSRUFURV9FTkFCTEVEOworICAgZWxz ZQorCQlmbGFncyAmPSB+SU5ERVhfQ1JFQVRFX0VOQUJMRUQ7CiAKIAkvKgogCSAqIElmIHRoZSB0 YWJsZSBpcyBwYXJ0aXRpb25lZCwgYW5kIHJlY3Vyc2lvbiB3YXMgZGVjbGluZWQgYnV0IHBhcnRp dGlvbnMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMmQ3MDNhYTIyZS4uOTA1YTNmNThh MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTY2NCw3ICs2NjQsNyBAQCBzdGF0aWMg TGlzdCAqR2V0UGFyZW50ZWRGb3JlaWduS2V5UmVmcyhSZWxhdGlvbiBwYXJ0aXRpb24pOwogc3Rh dGljIHZvaWQgQVREZXRhY2hDaGVja05vRm9yZWlnbktleVJlZnMoUmVsYXRpb24gcGFydGl0aW9u KTsKIHN0YXRpYyBjaGFyIEdldEF0dHJpYnV0ZUNvbXByZXNzaW9uKE9pZCBhdHR0eXBpZCwgY29u c3QgY2hhciAqY29tcHJlc3Npb24pOwogc3RhdGljIGNoYXIgR2V0QXR0cmlidXRlU3RvcmFnZShP aWQgYXR0dHlwaWQsIGNvbnN0IGNoYXIgKnN0b3JhZ2Vtb2RlKTsKLQorc3RhdGljIHZvaWQgQVRF eGVjRW5hYmxlRGlzYWJsZUluZGV4KFJlbGF0aW9uIHJlbCwgYm9vbCBlbmFibGUpOwogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgkJRGVmaW5lUmVsYXRpb24KQEAgLTQ1NDYsNiArNDU0Niw4IEBAIEFsdGVyVGFi bGVHZXRMb2NrTGV2ZWwoTGlzdCAqY21kcykKIAkJCWNhc2UgQVRfU2V0RXhwcmVzc2lvbjoKIAkJ CWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CiAJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJ Y2FzZSBBVF9FbmFibGVJbmRleDoKKwkJCWNhc2UgQVRfRGlzYWJsZUluZGV4OgogCQkJCWNtZF9s b2NrbW9kZSA9IEFjY2Vzc0V4Y2x1c2l2ZUxvY2s7CiAJCQkJYnJlYWs7CiAKQEAgLTUxMjMsNiAr NTEyNSwxMiBAQCBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRh YmxlQ21kICpjbWQsCiAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAJ CQlwYXNzID0gQVRfUEFTU19NSVNDOwogCQkJYnJlYWs7CisJCWNhc2UgQVRfRW5hYmxlSW5kZXg6 CisJCWNhc2UgQVRfRGlzYWJsZUluZGV4OgorCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhjbWQtPnN1 YnR5cGUsIHJlbCwgQVRUX0lOREVYIHwgQVRUX1BBUlRJVElPTkVEX0lOREVYKTsKKwkJCS8qIE5v IGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8KKwkJCXBhc3MgPSBBVF9QQVNTX01JU0M7 CisJCQlicmVhazsKIAkJZGVmYXVsdDoJCQkJLyogb29wcyAqLwogCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBhbHRlciB0YWJsZSB0eXBlOiAlZCIsCiAJCQkJIChpbnQpIGNtZC0+c3VidHlw ZSk7CkBAIC01NTE5LDYgKzU1MjcsMTIgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwKIAkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZToKIAkJ CWFkZHJlc3MgPSBBVEV4ZWNEZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZShyZWwsICgoUGFydGl0aW9u Q21kICopIGNtZC0+ZGVmKS0+bmFtZSk7CiAJCQlicmVhazsKKwkJY2FzZSBBVF9FbmFibGVJbmRl eDoKKwkJCQlBVEV4ZWNFbmFibGVEaXNhYmxlSW5kZXgocmVsLCB0cnVlKTsKKwkJCQlicmVhazsK KwkJY2FzZSBBVF9EaXNhYmxlSW5kZXg6CisJCQkJQVRFeGVjRW5hYmxlRGlzYWJsZUluZGV4KHJl bCwgZmFsc2UpOworCQkJCWJyZWFrOwogCQlkZWZhdWx0OgkJCQkvKiBvb3BzICovCiAJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIGFsdGVyIHRhYmxlIHR5cGU6ICVkIiwKIAkJCQkgKGludCkg Y21kLT5zdWJ0eXBlKTsKQEAgLTY0MTgsNiArNjQzMiw4IEBAIGFsdGVyX3RhYmxlX3R5cGVfdG9f c3RyaW5nKEFsdGVyVGFibGVUeXBlIGNtZHR5cGUpCiAJCQlyZXR1cm4gIkRST1AgQ09MVU1OIjsK IAkJY2FzZSBBVF9BZGRJbmRleDoKIAkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQljYXNlIEFUX0Vu YWJsZUluZGV4OgorCQljYXNlIEFUX0Rpc2FibGVJbmRleDoKIAkJCXJldHVybiBOVUxMOwkJLyog bm90IHJlYWwgZ3JhbW1hciAqLwogCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CiAJCWNhc2UgQVRf UmVBZGRDb25zdHJhaW50OgpAQCAtMjAyMTQsMyArMjAyMzAsNzkgQEAgR2V0QXR0cmlidXRlU3Rv cmFnZShPaWQgYXR0dHlwaWQsIGNvbnN0IGNoYXIgKnN0b3JhZ2Vtb2RlKQogCiAJcmV0dXJuIGNz dG9yYWdlOwogfQorCisvKgorICogQVRFeGVjRW5hYmxlRGlzYWJsZUluZGV4IGZ1bmN0aW9uIGhh bmRsZXMgdGhlIGV4ZWN1dGlvbiBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW5kZXguCisg KiBJdCBwZXJmb3JtcyBhbiBpbi1wbGFjZSB1cGRhdGUgdG8gcHJlc2VydmUgdGhlIHBnX2luZGV4 IHJvdydzIHhtaW4uCisgKi8KK3N0YXRpYyB2b2lkCitBVEV4ZWNFbmFibGVEaXNhYmxlSW5kZXgo UmVsYXRpb24gcmVsLCBib29sIGVuYWJsZSkKK3sKKwkJT2lkICAgICAgICAgaW5kZXhPaWQgPSBS ZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCVJlbGF0aW9uICAgIHBnX2luZGV4OworCQlIZWFwVHVw bGUgICBpbmRleFR1cGxlOworCQlGb3JtX3BnX2luZGV4IGluZGV4Rm9ybTsKKwkJYm9vbCAgICAg ICAgdXBkYXRlZCA9IGZhbHNlOworCisJCS8qIE9wZW4gcGdfaW5kZXggKi8KKwkJcGdfaW5kZXgg PSB0YWJsZV9vcGVuKEluZGV4UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJLyog RmV0Y2ggdGhlIGluZGV4J3MgcGdfaW5kZXggdHVwbGUgKi8KKwkJaW5kZXhUdXBsZSA9IFNlYXJj aFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4T2lkKSk7CisJCWlm ICghSGVhcFR1cGxlSXNWYWxpZChpbmRleFR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGluZGV4T2lkKTsKKworCQlpbmRleEZvcm0gPSAo Rm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGluZGV4VHVwbGUpOworCisJCS8qIENoZWNrIGlmIHRo ZSBpbmRleCdzIGN1cnJlbnQgc3RhdGUgZGlmZmVycyBmcm9tIHRoZSBkZXNpcmVkIHN0YXRlICov CisJCWlmIChpbmRleEZvcm0tPmluZGlzZW5hYmxlZCAhPSBlbmFibGUpCisJCXsKKwkJCUhlYXBU dXBsZSBjb3B5VHVwbGU7CisKKwkJCS8qIENyZWF0ZSBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUg dHVwbGUgKi8KKwkJCWNvcHlUdXBsZSA9IGhlYXBfY29weXR1cGxlKGluZGV4VHVwbGUpOworCQkJ aW5kZXhGb3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChjb3B5VHVwbGUpOworCisJCQlp bmRleEZvcm0tPmluZGlzZW5hYmxlZCA9IGVuYWJsZTsKKworCQkJLyogUGVyZm9ybSBhbiBpbi1w bGFjZSB1cGRhdGUgKi8KKwkJCWhlYXBfaW5wbGFjZV91cGRhdGUocGdfaW5kZXgsIGNvcHlUdXBs ZSk7CisKKwkJCS8qIEZyZWUgdGhlIGNvcHkgKi8KKwkJCWhlYXBfZnJlZXR1cGxlKGNvcHlUdXBs ZSk7CisKKwkJCXVwZGF0ZWQgPSB0cnVlOworCisJCQkvKiBVcGRhdGUgcmVsY2FjaGUgKi8KKwkJ CUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlKHJlbCk7CisKKwkJCS8qCisJCQkJKiBJbnZhbGlkYXRl IHRoZSByZWxjYWNoZSBmb3IgdGhlIHRhYmxlLCBzbyB0aGF0IGFmdGVyIHdlIGNvbW1pdAorCQkJ CSogYWxsIHNlc3Npb25zIHdpbGwgcmVmcmVzaCB0aGUgdGFibGUncyBpbmRleCBzdGF0ZSBiZWZv cmUKKwkJCQkqIGF0dGVtcHRpbmcgdG8gdXNlIHRoaXMgaW5kZXguCisJCQkqLworCQkJQ2FjaGVJ bnZhbGlkYXRlUmVsY2FjaGUocmVsKTsKKworCQkJZXJlcG9ydChOT1RJQ0UsCisJCQkJKGVycm1z ZygiaW5kZXggXCIlc1wiIGlzIG5vdyAlcyIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksCisJCQkJCWVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQllcmVwb3J0KE5PVElDRSwKKwkJCQkoZXJybXNnKCJpbmRleCBcIiVzXCIg aXMgYWxyZWFkeSAlcyIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJ CWVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKSk7CisJCX0KKworCQkvKiBDbGVhbiB1 cCAqLworCQlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CisJCXRhYmxlX2Nsb3NlKHBnX2lu ZGV4LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCQkvKiBJbnZva2UgdGhlIG9iamVjdCBhY2Nlc3Mg aG9vayBpZiB3ZSB1cGRhdGVkIHRoZSBpbmRleCAqLworCQlpZiAodXBkYXRlZCkKKwkJeworCQkJ SW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhJbmRleFJlbGF0aW9uSWQsIGluZGV4T2lkLCAwKTsK KwkJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGgu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggYzBmY2M3ZDc4 ZC4uODQzMjM3ZGFkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0y NTQsNiArMjU0LDEwIEBAIGNyZWF0ZV9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsKQogCXsKIAkJSW5kZXhPcHRJbmZvICppbmRleCA9IChJbmRleE9wdEluZm8g KikgbGZpcnN0KGxjKTsKIAorCQkvKiBTa2lwIGRpc2FibGVkIGluZGV4ZXMgKi8KKwkJaWYgKCFp bmRleC0+ZW5hYmxlZCkKKwkJCQljb250aW51ZTsKKwogCQkvKiBQcm90ZWN0IGxpbWl0ZWQtc2l6 ZSBhcnJheSBpbiBJbmRleENsYXVzZVNldHMgKi8KIAkJQXNzZXJ0KGluZGV4LT5ua2V5Y29sdW1u cyA8PSBJTkRFWF9NQVhfS0VZUyk7CiAKQEAgLTcxNSw2ICs3MTksMTAgQEAgZ2V0X2luZGV4X3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJYm9vbAkJc2tpcF9ub25u YXRpdmVfc2FvcCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKmxjOwogCisJLyogU2tpcCBkaXNhYmxl ZCBpbmRleGVzICovCisJaWYgKCFpbmRleC0+ZW5hYmxlZCkKKwkJCXJldHVybjsKKwogCS8qCiAJ ICogQnVpbGQgc2ltcGxlIGluZGV4IHBhdGhzIHVzaW5nIHRoZSBjbGF1c2VzLiAgQWxsb3cgU2Nh bGFyQXJyYXlPcEV4cHIKIAkgKiBjbGF1c2VzIG9ubHkgaWYgdGhlIGluZGV4IEFNIHN1cHBvcnRz IHRoZW0gbmF0aXZlbHkuCkBAIC04MjMsNiArODMxLDEwIEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAlBc3NlcnQoc2tpcF9ub25uYXRp dmVfc2FvcCAhPSBOVUxMIHx8IHNjYW50eXBlID09IFNUX0JJVE1BUFNDQU4pOwogCisJLyogU2tp cCBkaXNhYmxlZCBpbmRleGVzICovCisJaWYgKCFpbmRleC0+ZW5hYmxlZCkKKwkJcmV0dXJuIE5J TDsKKwogCS8qCiAJICogQ2hlY2sgdGhhdCBpbmRleCBzdXBwb3J0cyB0aGUgZGVzaXJlZCBzY2Fu IHR5cGUocykKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bs YW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBiOTEz ZjkxZmYwLi4zMGRjNjM1M2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBA IC0xOTIsNiArMTkyLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9p ZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJfQogCX0KIAorCiAJLyoKIAkg KiBFc3RpbWF0ZSByZWxhdGlvbiBzaXplIC0tLSB1bmxlc3MgaXQncyBhbiBpbmhlcml0YW5jZSBw YXJlbnQsIGluIHdoaWNoCiAJICogY2FzZSB0aGUgc2l6ZSB3ZSB3YW50IGlzIG5vdCB0aGUgcmVs J3Mgb3duIHNpemUgYnV0IHRoZSBzaXplIG9mIGl0cwpAQCAtNDU5LDYgKzQ2MCw3IEBAIGdldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9v bCBpbmhwYXJlbnQsCiAJCQlpbmZvLT51bmlxdWUgPSBpbmRleC0+aW5kaXN1bmlxdWU7CiAJCQlp bmZvLT5pbW1lZGlhdGUgPSBpbmRleC0+aW5kaW1tZWRpYXRlOwogCQkJaW5mby0+aHlwb3RoZXRp Y2FsID0gZmFsc2U7CisJCQlpbmZvLT5lbmFibGVkID0gaW5kZXgtPmluZGlzZW5hYmxlZDsKIAog CQkJLyoKIAkJCSAqIEVzdGltYXRlIHRoZSBpbmRleCBzaXplLiAgSWYgaXQncyBub3QgYSBwYXJ0 aWFsIGluZGV4LCB3ZSBsb2NrCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBhYjMwNGNhOTg5Li43ZTQ3NTQxNTQx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkKQEAgLTMzMyw3ICszMzMsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogJXR5cGUgPGl2YWw+CWFkZF9kcm9wIG9wdF9hc2NfZGVzYyBvcHRfbnVsbHNfb3JkZXIKIAog JXR5cGUgPG5vZGU+CWFsdGVyX3RhYmxlX2NtZCBhbHRlcl90eXBlX2NtZCBvcHRfY29sbGF0ZV9j bGF1c2UKLQkgICByZXBsaWNhX2lkZW50aXR5IHBhcnRpdGlvbl9jbWQgaW5kZXhfcGFydGl0aW9u X2NtZAorCSAgIHJlcGxpY2FfaWRlbnRpdHkgcGFydGl0aW9uX2NtZCBpbmRleF9wYXJ0aXRpb25f Y21kIGluZGV4X2FsdGVyX2NtZAogJXR5cGUgPGxpc3Q+CWFsdGVyX3RhYmxlX2NtZHMgYWx0ZXJf dHlwZV9jbWRzCiAldHlwZSA8bGlzdD4gICAgYWx0ZXJfaWRlbnRpdHlfY29sdW1uX29wdGlvbl9s aXN0CiAldHlwZSA8ZGVmZWx0PiAgYWx0ZXJfaWRlbnRpdHlfY29sdW1uX29wdGlvbgpAQCAtNDk2 LDYgKzQ5Niw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8Ym9vbGVhbj4gb3B0 X3VuaXF1ZSBvcHRfdmVyYm9zZSBvcHRfZnVsbAogJXR5cGUgPGJvb2xlYW4+IG9wdF9mcmVlemUg b3B0X2FuYWx5emUgb3B0X2RlZmF1bHQKICV0eXBlIDxkZWZlbHQ+CW9wdF9iaW5hcnkgY29weV9k ZWxpbWl0ZXIKKyV0eXBlIDxib29sZWFuPiAgb3B0X2luZGV4X2VuYWJsZWQKIAogJXR5cGUgPGJv b2xlYW4+IGNvcHlfZnJvbSBvcHRfcHJvZ3JhbQogCkBAIC0yMTQ0LDYgKzIxNDUsMjQgQEAgQWx0 ZXJUYWJsZVN0bXQ6CiAJCQkJCW4tPm5vd2FpdCA9ICQxMzsKIAkJCQkJJCQgPSAoTm9kZSAqKSBu OwogCQkJCX0KKwkJfCBBTFRFUiBJTkRFWCBxdWFsaWZpZWRfbmFtZSBpbmRleF9hbHRlcl9jbWQK KwkJCQl7CisJCQkJCUFsdGVyVGFibGVTdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJUYWJsZVN0bXQp OworCQkJCQluLT5yZWxhdGlvbiA9ICQzOworCQkJCQluLT5jbWRzID0gbGlzdF9tYWtlMSgkNCk7 CisJCQkJCW4tPm9ianR5cGUgPSBPQkpFQ1RfSU5ERVg7CisJCQkJCW4tPm1pc3Npbmdfb2sgPSBm YWxzZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJfCBBTFRFUiBJTkRFWCBJRl9Q IEVYSVNUUyBxdWFsaWZpZWRfbmFtZSBpbmRleF9hbHRlcl9jbWQKKwkJCQl7CisJCQkJCUFsdGVy VGFibGVTdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJUYWJsZVN0bXQpOworCQkJCQluLT5yZWxhdGlv biA9ICQ1OworCQkJCQluLT5jbWRzID0gbGlzdF9tYWtlMSgkNik7CisJCQkJCW4tPm9ianR5cGUg PSBPQkpFQ1RfSU5ERVg7CisJCQkJCW4tPm1pc3Npbmdfb2sgPSB0cnVlOworCQkJCQkkJCA9IChO b2RlICopIG47CisJCQkJfQogCQl8CUFMVEVSIElOREVYIHF1YWxpZmllZF9uYW1lIGFsdGVyX3Rh YmxlX2NtZHMKIAkJCQl7CiAJCQkJCUFsdGVyVGFibGVTdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJU YWJsZVN0bXQpOwpAQCAtMjM2OSw2ICsyMzg4LDIxIEBAIGluZGV4X3BhcnRpdGlvbl9jbWQ6CiAJ CQkJfQogCQk7CiAKK2luZGV4X2FsdGVyX2NtZDoKKwkJLyogQUxURVIgSU5ERVggPG5hbWU+IEVO QUJMRXxESVNBQkxFICovCisJCUVOQUJMRV9QCisJCQl7CisJCQkJQWx0ZXJUYWJsZUNtZCAqbiA9 IG1ha2VOb2RlKEFsdGVyVGFibGVDbWQpOworCQkJCW4tPnN1YnR5cGUgPSBBVF9FbmFibGVJbmRl eDsKKwkJCQkkJCA9IChOb2RlICopIG47CisJCQl9CisJCXwgRElTQUJMRV9QCisJCQl7CisJCQkJ QWx0ZXJUYWJsZUNtZCAqbiA9IG1ha2VOb2RlKEFsdGVyVGFibGVDbWQpOworCQkJCW4tPnN1YnR5 cGUgPSBBVF9EaXNhYmxlSW5kZXg7CisJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJfQorCQk7CiBh bHRlcl90YWJsZV9jbWQ6CiAJCQkvKiBBTFRFUiBUQUJMRSA8bmFtZT4gQUREIDxjb2xkZWY+ICov CiAJCQlBRERfUCBjb2x1bW5EZWYKQEAgLTgxMDIsNyArODEzNiw3IEBAIGRlZmFjbF9wcml2aWxl Z2VfdGFyZ2V0OgogCiBJbmRleFN0bXQ6CUNSRUFURSBvcHRfdW5pcXVlIElOREVYIG9wdF9jb25j dXJyZW50bHkgb3B0X3NpbmdsZV9uYW1lCiAJCQlPTiByZWxhdGlvbl9leHByIGFjY2Vzc19tZXRo b2RfY2xhdXNlICcoJyBpbmRleF9wYXJhbXMgJyknCi0JCQlvcHRfaW5jbHVkZSBvcHRfdW5pcXVl X251bGxfdHJlYXRtZW50IG9wdF9yZWxvcHRpb25zIE9wdFRhYmxlU3BhY2Ugd2hlcmVfY2xhdXNl CisJCQlvcHRfaW5jbHVkZSBvcHRfdW5pcXVlX251bGxfdHJlYXRtZW50IG9wdF9yZWxvcHRpb25z IE9wdFRhYmxlU3BhY2Ugd2hlcmVfY2xhdXNlIG9wdF9pbmRleF9lbmFibGVkCiAJCQkJewogCQkJ CQlJbmRleFN0bXQgKm4gPSBtYWtlTm9kZShJbmRleFN0bXQpOwogCkBAIC04MTE3LDYgKzgxNTEs NyBAQCBJbmRleFN0bXQ6CUNSRUFURSBvcHRfdW5pcXVlIElOREVYIG9wdF9jb25jdXJyZW50bHkg b3B0X3NpbmdsZV9uYW1lCiAJCQkJCW4tPm9wdGlvbnMgPSAkMTQ7CiAJCQkJCW4tPnRhYmxlU3Bh Y2UgPSAkMTU7CiAJCQkJCW4tPndoZXJlQ2xhdXNlID0gJDE2OworCQkJCQluLT5pc2VuYWJsZWQg PSAkMTc7CiAJCQkJCW4tPmV4Y2x1ZGVPcE5hbWVzID0gTklMOwogCQkJCQluLT5pZHhjb21tZW50 ID0gTlVMTDsKIAkJCQkJbi0+aW5kZXhPaWQgPSBJbnZhbGlkT2lkOwpAQCAtODEzNCw3ICs4MTY5 LDcgQEAgSW5kZXhTdG10OglDUkVBVEUgb3B0X3VuaXF1ZSBJTkRFWCBvcHRfY29uY3VycmVudGx5 IG9wdF9zaW5nbGVfbmFtZQogCQkJCX0KIAkJCXwgQ1JFQVRFIG9wdF91bmlxdWUgSU5ERVggb3B0 X2NvbmN1cnJlbnRseSBJRl9QIE5PVCBFWElTVFMgbmFtZQogCQkJT04gcmVsYXRpb25fZXhwciBh Y2Nlc3NfbWV0aG9kX2NsYXVzZSAnKCcgaW5kZXhfcGFyYW1zICcpJwotCQkJb3B0X2luY2x1ZGUg b3B0X3VuaXF1ZV9udWxsX3RyZWF0bWVudCBvcHRfcmVsb3B0aW9ucyBPcHRUYWJsZVNwYWNlIHdo ZXJlX2NsYXVzZQorCQkJb3B0X2luY2x1ZGUgb3B0X3VuaXF1ZV9udWxsX3RyZWF0bWVudCBvcHRf cmVsb3B0aW9ucyBPcHRUYWJsZVNwYWNlIHdoZXJlX2NsYXVzZSBvcHRfaW5kZXhfZW5hYmxlZAog CQkJCXsKIAkJCQkJSW5kZXhTdG10ICpuID0gbWFrZU5vZGUoSW5kZXhTdG10KTsKIApAQCAtODE0 OSw2ICs4MTg0LDcgQEAgSW5kZXhTdG10OglDUkVBVEUgb3B0X3VuaXF1ZSBJTkRFWCBvcHRfY29u Y3VycmVudGx5IG9wdF9zaW5nbGVfbmFtZQogCQkJCQluLT5vcHRpb25zID0gJDE3OwogCQkJCQlu LT50YWJsZVNwYWNlID0gJDE4OwogCQkJCQluLT53aGVyZUNsYXVzZSA9ICQxOTsKKwkJCQkJbi0+ aXNlbmFibGVkID0gJDIwOwogCQkJCQluLT5leGNsdWRlT3BOYW1lcyA9IE5JTDsKIAkJCQkJbi0+ aWR4Y29tbWVudCA9IE5VTEw7CiAJCQkJCW4tPmluZGV4T2lkID0gSW52YWxpZE9pZDsKQEAgLTgx NzEsNiArODIwNywxMiBAQCBvcHRfdW5pcXVlOgogCQkJfCAvKkVNUFRZKi8JCQkJCQkJCXsgJCQg PSBmYWxzZTsgfQogCQk7CiAKK29wdF9pbmRleF9lbmFibGVkOgorCQkJRU5BQkxFX1AgICAgICAg ICAgICAgICAgICAgICAgeyAkJCA9IHRydWU7IH0KKwkJCXwgRElTQUJMRV9QICAgICAgICAgICAg ICAgICAgIHsgJCQgPSBmYWxzZTsgfQorCQkJfCAvKkVNUFRZKi8gICAgICAgICAgICAgICAgIAl7 ICQkID0gdHJ1ZTsgfQorCQk7CisKIGFjY2Vzc19tZXRob2RfY2xhdXNlOgogCQkJVVNJTkcgbmFt ZQkJCQkJCQkJeyAkJCA9ICQyOyB9CiAJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IERFRkFV TFRfSU5ERVhfVFlQRTsgfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0 aWxjbWQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKaW5kZXggMWUxNWNl MTBiNC4uMzI1NTQ2MTJlZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0 aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCkBAIC0xNTg4 LDYgKzE1ODgsNyBAQCBnZW5lcmF0ZUNsb25lZEluZGV4U3RtdChSYW5nZVZhciAqaGVhcFJlbCwg UmVsYXRpb24gc291cmNlX2lkeCwKIAlpbmRleC0+Y29uY3VycmVudCA9IGZhbHNlOwogCWluZGV4 LT5pZl9ub3RfZXhpc3RzID0gZmFsc2U7CiAJaW5kZXgtPnJlc2V0X2RlZmF1bHRfdGJsc3BjID0g ZmFsc2U7CisJaW5kZXgtPmlzZW5hYmxlZCA9IGlkeHJlYy0+aW5kaXNlbmFibGVkOwogCiAJLyoK IAkgKiBXZSBkb24ndCB0cnkgdG8gcHJlc2VydmUgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBpbmRl eDsgaW5zdGVhZCwganVzdApAQCAtMjIxNCw2ICsyMjE1LDggQEAgdHJhbnNmb3JtSW5kZXhDb25z dHJhaW50KENvbnN0cmFpbnQgKmNvbnN0cmFpbnQsIENyZWF0ZVN0bXRDb250ZXh0ICpjeHQpCiAJ aW5kZXgtPmNvbmN1cnJlbnQgPSBmYWxzZTsKIAlpbmRleC0+aWZfbm90X2V4aXN0cyA9IGZhbHNl OwogCWluZGV4LT5yZXNldF9kZWZhdWx0X3RibHNwYyA9IGNvbnN0cmFpbnQtPnJlc2V0X2RlZmF1 bHRfdGJsc3BjOworCS8qIEVuc3VyZSBpbmRleGVzIGZvciBjb25zdHJhaW50cyBhcmUgY3JlYXRl ZCBhcyBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKwlpbmRleC0+aXNlbmFibGVkID0gdHJ1ZTsKIAog CS8qCiAJICogSWYgaXQncyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBVU0lORyBJTkRFWCwg bG9vayB1cCB0aGUgaW5kZXggYW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggMjE3 N2QxN2UyNy4uMDViMjdjYTIzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMTU1 OSw2ICsxNTU5LDEwIEBAIHBnX2dldF9pbmRleGRlZl93b3JrZXIoT2lkIGluZGV4cmVsaWQsIGlu dCBjb2xubywKIAkJCWVsc2UKIAkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgV0hFUkUgJXMi LCBzdHIpOwogCQl9CisKKwkJLyogQWRkIERJU0FCTEUgY2xhdXNlIGlmIHRoZSBpbmRleCBpcyBk aXNhYmxlZCAqLworCQlpZiAoIWlkeHJlYy0+aW5kaXNlbmFibGVkKQorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmJ1ZiwgIiBESVNBQkxFIik7CiAJfQogCiAJLyogQ2xlYW4gdXAgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDViNmI3YjgwOWMuLjdjZDU5MDJhZDcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtMjM0NCw2ICsyMzQ0LDcgQEAgUmVsYXRp b25SZWxvYWRJbmRleEluZm8oUmVsYXRpb24gcmVsYXRpb24pCiAJCXJlbGF0aW9uLT5yZF9pbmRl eC0+aW5kaXNyZWFkeSA9IGluZGV4LT5pbmRpc3JlYWR5OwogCQlyZWxhdGlvbi0+cmRfaW5kZXgt PmluZGlzbGl2ZSA9IGluZGV4LT5pbmRpc2xpdmU7CiAJCXJlbGF0aW9uLT5yZF9pbmRleC0+aW5k aXNyZXBsaWRlbnQgPSBpbmRleC0+aW5kaXNyZXBsaWRlbnQ7CisJCXJlbGF0aW9uLT5yZF9pbmRl eC0+aW5kaXNlbmFibGVkID0gaW5kZXgtPmluZGlzZW5hYmxlZDsKIAogCQkvKiBDb3B5IHhtaW4g dG9vLCBhcyB0aGF0IGlzIG5lZWRlZCB0byBtYWtlIHNlbnNlIG9mIGluZGNoZWNreG1pbiAqLwog CQlIZWFwVHVwbGVIZWFkZXJTZXRYbWluKHJlbGF0aW9uLT5yZF9pbmRleHR1cGxlLT50X2RhdGEs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IDEwYmIyNmYyZTQuLmEyMGFmODNkYTQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCkBAIC01Nyw2ICs1Nyw2IEBACiAgKi8KIAogLyoJCQkJ CQkJeXl5eW1tZGROICovCi0jZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwkyMDI0MDkyMTEKKyNk ZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjQwOTIyMAogCiAjZW5kaWYKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXgu aAppbmRleCAyZGVhOTZmNDdjLi44YTQ3Y2ZkMTc0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC02NSw2 ICs2NSw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2NoZWNrX3ByaW1hcnlfa2V5KFJlbGF0aW9uIGhl YXBSZWwsCiAjZGVmaW5lCUlOREVYX0NSRUFURV9JRl9OT1RfRVhJU1RTCQkJKDEgPDwgNCkKICNk ZWZpbmUJSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVECQkJKDEgPDwgNSkKICNkZWZpbmUgSU5ERVhf Q1JFQVRFX0lOVkFMSUQJCQkJKDEgPDwgNikKKyNkZWZpbmUgSU5ERVhfQ1JFQVRFX0VOQUJMRUQg ICAgICAgICgxIDw8IDcpCiAKIGV4dGVybiBPaWQJaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAkJCQkJCSBjb25zdCBjaGFyICppbmRleFJlbGF0aW9uTmFtZSwKQEAgLTE3NSw3 ICsxNzYsNiBAQCBleHRlcm4gdm9pZCBSZXN0b3JlUmVpbmRleFN0YXRlKGNvbnN0IHZvaWQgKnJl aW5kZXhzdGF0ZSk7CiAKIGV4dGVybiB2b2lkIEluZGV4U2V0UGFyZW50SW5kZXgoUmVsYXRpb24g cGFydGl0aW9uSWR4LCBPaWQgcGFyZW50T2lkKTsKIAotCiAvKgogICogaXRlbXB0cl9lbmNvZGUg LSBFbmNvZGUgSXRlbVBvaW50ZXIgYXMgaW50NjQvaW50OAogICoKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5kZXgu aAppbmRleCA2Yzg5NjM5YTllLi5iMGM3ZTVmMzY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oCkBA IC00NCw2ICs0NCw3IEBAIENBVEFMT0cocGdfaW5kZXgsMjYxMCxJbmRleFJlbGF0aW9uSWQpIEJL SV9TQ0hFTUFfTUFDUk8KIAlib29sCQlpbmRpc3JlYWR5OwkJLyogaXMgdGhpcyBpbmRleCByZWFk eSBmb3IgaW5zZXJ0cz8gKi8KIAlib29sCQlpbmRpc2xpdmU7CQkvKiBpcyB0aGlzIGluZGV4IGFs aXZlIGF0IGFsbD8gKi8KIAlib29sCQlpbmRpc3JlcGxpZGVudDsgLyogaXMgdGhpcyBpbmRleCB0 aGUgaWRlbnRpdHkgZm9yIHJlcGxpY2F0aW9uPyAqLworCWJvb2wJCWluZGlzZW5hYmxlZDsJLyog aXMgdGhpcyBpbmRleCBlbmFibGVkIGZvciB1c2UgYnkgcXVlcmllcz8gKi8KIAogCS8qIHZhcmlh YmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSwgYnV0IHdlIGFsbG93IGRpcmVjdCBhY2Nlc3Mg dG8gaW5ka2V5ICovCiAJaW50MnZlY3RvcglpbmRrZXkgQktJX0ZPUkNFX05PVF9OVUxMOwkvKiBj b2x1bW4gbnVtYmVycyBvZiBpbmRleGVkIGNvbHMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXgg ZTYyY2UxYjc1My4uZTUxMjU4OTViMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjQxMyw2 ICsyNDEzLDggQEAgdHlwZWRlZiBlbnVtIEFsdGVyVGFibGVUeXBlCiAJQVRfU2V0SWRlbnRpdHks CQkJCS8qIFNFVCBpZGVudGl0eSBjb2x1bW4gb3B0aW9ucyAqLwogCUFUX0Ryb3BJZGVudGl0eSwJ CQkvKiBEUk9QIElERU5USVRZICovCiAJQVRfUmVBZGRTdGF0aXN0aWNzLAkJCS8qIGludGVybmFs IHRvIGNvbW1hbmRzL3RhYmxlY21kcy5jICovCisJQVRfRW5hYmxlSW5kZXgsCQkJCS8qIEVOQUJM RSBJTkRFWCAqLworICBBVF9EaXNhYmxlSW5kZXgsCQkJLyogRElTQUJMRSBJTkRFWCAqLwogfSBB bHRlclRhYmxlVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgUmVwbGljYUlkZW50aXR5U3RtdApAQCAt MzM3OCw2ICszMzgwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTdG10CiAJYm9vbAkJaWZfbm90 X2V4aXN0czsJLyoganVzdCBkbyBub3RoaW5nIGlmIGluZGV4IGFscmVhZHkgZXhpc3RzPyAqLwog CWJvb2wJCXJlc2V0X2RlZmF1bHRfdGJsc3BjOwkvKiByZXNldCBkZWZhdWx0X3RhYmxlc3BhY2Ug cHJpb3IgdG8KIAkJCQkJCQkJCQkgKiBleGVjdXRpbmcgKi8KKyAgYm9vbCAgICBpc2VuYWJsZWQ7 CQkvKiB0cnVlIGlmIEVOQUJMRSAoZGVmYXVsdCksIGZhbHNlIGlmIERJU0FCTEUgKi8KIH0gSW5k ZXhTdG10OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmlu ZGV4IDA3ZTI0MTUzOTguLjQwOTZjNGI3OTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMTg4 LDYgKzExODgsOCBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJaW1tZWRpYXRlOwogCS8q IHRydWUgaWYgaW5kZXggZG9lc24ndCByZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhldGlj YWw7CisJLyogaXMgaW5kZXggZW5hYmxlPyAqLworICBib29sCQllbmFibGVkOwogCiAJLyoKIAkg KiBSZW1haW5pbmcgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgaW5kZXggQU0ncyBBUEkgc3Ry dWN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggZDMz NThkZmMzOS4uNTdhZGQ3NTdhYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRl X2luZGV4Lm91dApAQCAtMjk2NSw2ICsyOTY1LDI1NiBAQCBFUlJPUjogIFJFSU5ERVggU0NIRU1B IGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sKIEVORDsKIC0tIGNvbmN1cnJl bnRseQogUkVJTkRFWCBTQ0hFTUEgQ09OQ1VSUkVOVExZIHNjaGVtYV90b19yZWluZGV4OworLS0g VGVzdCBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbmFsaXR5IGZvciBpbmRleGVzCistLSBTZXR1cAor Q1JFQVRFIFRBQkxFIGVuYWJsZV9kaXNhYmxlX3Rlc3QoaWQgaW50IHByaW1hcnkga2V5LCBkYXRh IHRleHQpOworSU5TRVJUIElOVE8gZW5hYmxlX2Rpc2FibGVfdGVzdCBTRUxFQ1QgZywgJ2RhdGEg JyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CistLSBDUkVBVEUgSU5ERVgg d2l0aCBFTkFCTEVEL0RJU0FCTEVECitDUkVBVEUgSU5ERVggZW5hYmxlX2Rpc2FibGVfaWR4MSBP TiBlbmFibGVfZGlzYWJsZV90ZXN0KGRhdGEpIERJU0FCTEU7CitDUkVBVEUgSU5ERVggZW5hYmxl X2Rpc2FibGVfaWR4MiBPTiBlbmFibGVfZGlzYWJsZV90ZXN0KGRhdGEpOworU0VMRUNUIGluZGV4 cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlz ZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kcmVsaWQgPSAnZW5hYmxlX2Rpc2FibGVf dGVzdCc6OnJlZ2NsYXNzCitPUkRFUiBCWSBpbmRleHJlbGlkOjpyZWdjbGFzczo6dGV4dDsKKyAg ICAgICAgaW5kZXhyZWxpZCAgICAgICAgfCBpbmRpc3ZhbGlkIHwgaW5kaXNyZWFkeSB8IGluZGlz bGl2ZSB8IGluZGlzZW5hYmxlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyBlbmFibGVfZGlz YWJsZV9pZHgxICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICB8IGYK KyBlbmFibGVfZGlzYWJsZV9pZHgyICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQg ICAgICAgICB8IHQKKyBlbmFibGVfZGlzYWJsZV90ZXN0X3BrZXkgfCB0ICAgICAgICAgIHwgdCAg ICAgICAgICB8IHQgICAgICAgICB8IHQKKygzIHJvd3MpCisKKy0tIEFMVEVSIElOREVYIC4uLiBF TkFCTEUvRElTQUJMRQorLS0gQmVmb3JlCitTRUxFQ1QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGlu ZGlzdmFsaWQsIGluZGlzcmVhZHksIGluZGlzbGl2ZSwgaW5kaXNlbmFibGVkCitGUk9NIHBnX2lu ZGV4CitXSEVSRSBpbmRyZWxpZCA9ICdlbmFibGVfZGlzYWJsZV90ZXN0Jzo6cmVnY2xhc3MKK09S REVSIEJZIGluZGV4cmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0OworICAgICAgICBpbmRleHJlbGlkICAg ICAgICB8IGluZGlzdmFsaWQgfCBpbmRpc3JlYWR5IHwgaW5kaXNsaXZlIHwgaW5kaXNlbmFibGVk IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIGVuYWJsZV9kaXNhYmxlX2lkeDEgICAgICB8IHQg ICAgICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgIHwgZgorIGVuYWJsZV9kaXNhYmxlX2lk eDIgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgIHwgdAorIGVuYWJs ZV9kaXNhYmxlX3Rlc3RfcGtleSB8IHQgICAgICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAg IHwgdAorKDMgcm93cykKKworQUxURVIgSU5ERVggZW5hYmxlX2Rpc2FibGVfaWR4MiBESVNBQkxF OworTk9USUNFOiAgaW5kZXggImVuYWJsZV9kaXNhYmxlX2lkeDIiIGlzIG5vdyBkaXNhYmxlZAor LS0gQWZ0ZXIKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFzcywgaW5kaXN2YWxpZCwgaW5kaXNy ZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00gcGdfaW5kZXgKK1dIRVJFIGluZHJl bGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpyZWdjbGFzcworT1JERVIgQlkgaW5kZXhyZWxp ZDo6cmVnY2xhc3M6OnRleHQ7CisgICAgICAgIGluZGV4cmVsaWQgICAgICAgIHwgaW5kaXN2YWxp ZCB8IGluZGlzcmVhZHkgfCBpbmRpc2xpdmUgfCBpbmRpc2VuYWJsZWQgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tCisgZW5hYmxlX2Rpc2FibGVfaWR4MSAgICAgIHwgdCAgICAgICAgICB8IHQgICAg ICAgICAgfCB0ICAgICAgICAgfCBmCisgZW5hYmxlX2Rpc2FibGVfaWR4MiAgICAgIHwgdCAgICAg ICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCBmCisgZW5hYmxlX2Rpc2FibGVfdGVzdF9w a2V5IHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCB0CisoMyByb3dzKQor CistLSBFbmFibGUgYWxsIGluZGV4ZXMKK0FMVEVSIElOREVYIGVuYWJsZV9kaXNhYmxlX2lkeDIg RU5BQkxFOworTk9USUNFOiAgaW5kZXggImVuYWJsZV9kaXNhYmxlX2lkeDIiIGlzIG5vdyBlbmFi bGVkCitBTFRFUiBJTkRFWCBlbmFibGVfZGlzYWJsZV9pZHgxIEVOQUJMRTsKK05PVElDRTogIGlu ZGV4ICJlbmFibGVfZGlzYWJsZV9pZHgxIiBpcyBub3cgZW5hYmxlZAorU0VMRUNUIGluZGV4cmVs aWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5h YmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kcmVsaWQgPSAnZW5hYmxlX2Rpc2FibGVfdGVz dCc6OnJlZ2NsYXNzCitPUkRFUiBCWSBpbmRleHJlbGlkOjpyZWdjbGFzczo6dGV4dDsKKyAgICAg ICAgaW5kZXhyZWxpZCAgICAgICAgfCBpbmRpc3ZhbGlkIHwgaW5kaXNyZWFkeSB8IGluZGlzbGl2 ZSB8IGluZGlzZW5hYmxlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyBlbmFibGVfZGlzYWJs ZV9pZHgxICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICB8IHQKKyBl bmFibGVfZGlzYWJsZV9pZHgyICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQgICAg ICAgICB8IHQKKyBlbmFibGVfZGlzYWJsZV90ZXN0X3BrZXkgfCB0ICAgICAgICAgIHwgdCAgICAg ICAgICB8IHQgICAgICAgICB8IHQKKygzIHJvd3MpCisKKy0tIFJFSU5ERVggVEFCTEUKK1JFSU5E RVggVEFCTEUgZW5hYmxlX2Rpc2FibGVfdGVzdDsKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFz cywgaW5kaXN2YWxpZCwgaW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00g cGdfaW5kZXgKK1dIRVJFIGluZHJlbGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpyZWdjbGFz cworT1JERVIgQlkgaW5kZXhyZWxpZDo6cmVnY2xhc3M6OnRleHQ7CisgICAgICAgIGluZGV4cmVs aWQgICAgICAgIHwgaW5kaXN2YWxpZCB8IGluZGlzcmVhZHkgfCBpbmRpc2xpdmUgfCBpbmRpc2Vu YWJsZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgZW5hYmxlX2Rpc2FibGVfaWR4MSAgICAg IHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCB0CisgZW5hYmxlX2Rpc2Fi bGVfaWR4MiAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCB0Cisg ZW5hYmxlX2Rpc2FibGVfdGVzdF9wa2V5IHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAg ICAgICAgfCB0CisoMyByb3dzKQorCistLSBSRUlOREVYIElOREVYIHdpdGggZW5hYmxlL2Rpc2Fi bGUKK0FMVEVSIElOREVYIGVuYWJsZV9kaXNhYmxlX2lkeDEgRElTQUJMRTsKK05PVElDRTogIGlu ZGV4ICJlbmFibGVfZGlzYWJsZV9pZHgxIiBpcyBub3cgZGlzYWJsZWQKK1JFSU5ERVggSU5ERVgg ZW5hYmxlX2Rpc2FibGVfaWR4MTsKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFzcywgaW5kaXN2 YWxpZCwgaW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00gcGdfaW5kZXgK K1dIRVJFIGluZHJlbGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpyZWdjbGFzcworT1JERVIg QlkgaW5kZXhyZWxpZDo6cmVnY2xhc3M6OnRleHQ7CisgICAgICAgIGluZGV4cmVsaWQgICAgICAg IHwgaW5kaXN2YWxpZCB8IGluZGlzcmVhZHkgfCBpbmRpc2xpdmUgfCBpbmRpc2VuYWJsZWQgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgZW5hYmxlX2Rpc2FibGVfaWR4MSAgICAgIHwgdCAgICAg ICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCBmCisgZW5hYmxlX2Rpc2FibGVfaWR4MiAg ICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCB0CisgZW5hYmxlX2Rp c2FibGVfdGVzdF9wa2V5IHwgdCAgICAgICAgICB8IHQgICAgICAgICAgfCB0ICAgICAgICAgfCB0 CisoMyByb3dzKQorCistLSBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSB3aXRoIGVuYWJsZS9k aXNhYmxlCitBTFRFUiBJTkRFWCBlbmFibGVfZGlzYWJsZV9pZHgxIEVOQUJMRTsKK05PVElDRTog IGluZGV4ICJlbmFibGVfZGlzYWJsZV9pZHgxIiBpcyBub3cgZW5hYmxlZAorUkVJTkRFWCBJTkRF WCBlbmFibGVfZGlzYWJsZV9pZHgxOworU0VMRUNUIGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmRp c3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRl eAorV0hFUkUgaW5kcmVsaWQgPSAnZW5hYmxlX2Rpc2FibGVfdGVzdCc6OnJlZ2NsYXNzCitPUkRF UiBCWSBpbmRleHJlbGlkOjpyZWdjbGFzczo6dGV4dDsKKyAgICAgICAgaW5kZXhyZWxpZCAgICAg ICAgfCBpbmRpc3ZhbGlkIHwgaW5kaXNyZWFkeSB8IGluZGlzbGl2ZSB8IGluZGlzZW5hYmxlZCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyBlbmFibGVfZGlzYWJsZV9pZHgxICAgICAgfCB0ICAg ICAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICB8IHQKKyBlbmFibGVfZGlzYWJsZV9pZHgy ICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICB8IHQKKyBlbmFibGVf ZGlzYWJsZV90ZXN0X3BrZXkgfCB0ICAgICAgICAgIHwgdCAgICAgICAgICB8IHQgICAgICAgICB8 IHQKKygzIHJvd3MpCisKKy0tIFRlc3QgRU5BQkxFL0RJU0FCTEUgb24gVE9BU1QgaW5kZXgKK0NS RUFURSBUQUJMRSB0b2FzdF90ZXN0IChpZCBpbnQgcHJpbWFyeSBrZXksIGRhdGEgdGV4dCk7CitJ TlNFUlQgSU5UTyB0b2FzdF90ZXN0IFNFTEVDVCBnLCByZXBlYXQoJ2xvbmcgdGV4dCAnLCAxMDAw KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgZzsKKy0tIENoZWNrIGluaXRpYWwgc3RhdGUg b2YgVE9BU1QgaW5kZXgKK1NFTEVDVCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUs IGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kZXhyZWxpZCA9IChTRUxFQ1Qg aW5kZXhyZWxpZCBGUk9NIHBnX2luZGV4IFdIRVJFIGluZHJlbGlkID0gKFNFTEVDVCByZWx0b2Fz dHJlbGlkIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3RvYXN0X3Rlc3QnOjpyZWdjbGFzcykp OworIGluZGlzdmFsaWQgfCBpbmRpc3JlYWR5IHwgaW5kaXNsaXZlIHwgaW5kaXNlbmFibGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgIHwgdAorKDEgcm93KQorCistLSBEaXNh YmxlIFRPQVNUIGluZGV4CitBTFRFUiBJTkRFWCBwZ190b2FzdC5wZ190b2FzdF8xNjM4NV9pbmRl eCBESVNBQkxFOworRVJST1I6ICByZWxhdGlvbiAicGdfdG9hc3QucGdfdG9hc3RfMTYzODVfaW5k ZXgiIGRvZXMgbm90IGV4aXN0CistLSBDaGVjayBzdGF0ZSBhZnRlciBkaXNhYmxpbmcgVE9BU1Qg aW5kZXgKK1NFTEVDVCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5h YmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kZXhyZWxpZCA9IChTRUxFQ1QgaW5kZXhyZWxp ZCBGUk9NIHBnX2luZGV4IFdIRVJFIGluZHJlbGlkID0gKFNFTEVDVCByZWx0b2FzdHJlbGlkIEZS T00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3RvYXN0X3Rlc3QnOjpyZWdjbGFzcykpOworIGluZGlz dmFsaWQgfCBpbmRpc3JlYWR5IHwgaW5kaXNsaXZlIHwgaW5kaXNlbmFibGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg fCB0ICAgICAgICAgIHwgdCAgICAgICAgIHwgdAorKDEgcm93KQorCistLSBFbmFibGUgVE9BU1Qg aW5kZXgKK0FMVEVSIElOREVYIHBnX3RvYXN0LnBnX3RvYXN0XzE2Mzg1X2luZGV4IEVOQUJMRTsK K0VSUk9SOiAgcmVsYXRpb24gInBnX3RvYXN0LnBnX3RvYXN0XzE2Mzg1X2luZGV4IiBkb2VzIG5v dCBleGlzdAorLS0gQ2hlY2sgc3RhdGUgYWZ0ZXIgZW5hYmxpbmcgVE9BU1QgaW5kZXgKK1NFTEVD VCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBw Z19pbmRleAorV0hFUkUgaW5kZXhyZWxpZCA9IChTRUxFQ1QgaW5kZXhyZWxpZCBGUk9NIHBnX2lu ZGV4IFdIRVJFIGluZHJlbGlkID0gKFNFTEVDVCByZWx0b2FzdHJlbGlkIEZST00gcGdfY2xhc3Mg V0hFUkUgb2lkID0gJ3RvYXN0X3Rlc3QnOjpyZWdjbGFzcykpOworIGluZGlzdmFsaWQgfCBpbmRp c3JlYWR5IHwgaW5kaXNsaXZlIHwgaW5kaXNlbmFibGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCB0ICAgICAgICAg IHwgdCAgICAgICAgIHwgdAorKDEgcm93KQorCistLSBUZXN0IENSRUFURSBUQUJMRSB3aXRoIFVO SVFVRSBjb25zdHJhaW50CitDUkVBVEUgVEFCTEUgdW5pcXVlX2NvbnN0cmFpbnRfdGVzdCAoaWQg aW50IFVOSVFVRSwgZGF0YSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHVuaXF1ZV9jb25zdHJhaW50X3Rl c3QgU0VMRUNUIGcsICdkYXRhICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBn OworU0VMRUNUIGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBp bmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kcmVsaWQgPSAn dW5pcXVlX2NvbnN0cmFpbnRfdGVzdCc6OnJlZ2NsYXNzOworICAgICAgICAgIGluZGV4cmVsaWQg ICAgICAgICAgIHwgaW5kaXN2YWxpZCB8IGluZGlzcmVhZHkgfCBpbmRpc2xpdmUgfCBpbmRpc2Vu YWJsZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyB1bmlxdWVfY29uc3RyYWludF90 ZXN0X2lkX2tleSB8IHQgICAgICAgICAgfCB0ICAgICAgICAgIHwgdCAgICAgICAgIHwgdAorKDEg cm93KQorCistLSBUZXN0IHRoYXQgdGhlIHVuaXF1ZSBjb25zdHJhaW50IGluZGV4IGlzIHVzZWQK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB1bmlxdWVfY29uc3RyYWludF90ZXN0 IFdIRVJFIGlkID0gNTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyB1bmlxdWVfY29uc3RyYWludF90ZXN0X2lkX2tleSBvbiB1bmlxdWVf Y29uc3RyYWludF90ZXN0CisgICBJbmRleCBDb25kOiAoaWQgPSA1MDApCisoMiByb3dzKQorCitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdW5pcXVlX2NvbnN0cmFpbnRfdGVzdCBX SEVSRSBpZCBJTiAoMTAwLCAyMDAsIDMwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2Nh biBvbiB1bmlxdWVfY29uc3RyYWludF90ZXN0CisgICBSZWNoZWNrIENvbmQ6IChpZCA9IEFOWSAo J3sxMDAsMjAwLDMwMH0nOjppbnRlZ2VyW10pKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHVuaXF1ZV9jb25zdHJhaW50X3Rlc3RfaWRfa2V5CisgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBBTlkgKCd7MTAwLDIwMCwzMDB9Jzo6aW50ZWdlcltdKSkKKyg0IHJvd3MpCisKKy0tIFRlc3Qg Q1JFQVRFIFRBQkxFIHdpdGggSU5ERVgKK0NSRUFURSBUQUJMRSBpbmRleF90ZXN0IChpZCBpbnQs IGRhdGEgdGV4dCk7CitJTlNFUlQgSU5UTyBpbmRleF90ZXN0IFNFTEVDVCBnLCAnZGF0YSAnIHx8 IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBpbmRl eF90ZXN0IChkYXRhKTsKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFzcywgaW5kaXN2YWxpZCwg aW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00gcGdfaW5kZXgKK1dIRVJF IGluZHJlbGlkID0gJ2luZGV4X3Rlc3QnOjpyZWdjbGFzczsKKyAgICAgaW5kZXhyZWxpZCAgICAg IHwgaW5kaXN2YWxpZCB8IGluZGlzcmVhZHkgfCBpbmRpc2xpdmUgfCBpbmRpc2VuYWJsZWQgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLQorIGluZGV4X3Rlc3RfZGF0YV9pZHggfCB0ICAgICAgICAgIHwgdCAg ICAgICAgICB8IHQgICAgICAgICB8IHQKKygxIHJvdykKKworLS0gVGVzdCB0aGF0IHRoZSBpbmRl eCBpcyB1c2VkCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gaW5kZXhfdGVzdCBX SEVSRSBkYXRhID0gJ2RhdGEgNTAwJzsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBpbmRleF90ZXN0CisgICBSZWNoZWNrIENv bmQ6IChkYXRhID0gJ2RhdGEgNTAwJzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biBpbmRleF90ZXN0X2RhdGFfaWR4CisgICAgICAgICBJbmRleCBDb25kOiAoZGF0YSA9ICdkYXRh IDUwMCc6OnRleHQpCisoNCByb3dzKQorCistLSBUZXN0IGluZGV4IHVzYWdlIHdpdGggam9pbnMK K0NSRUFURSBUQUJMRSBqb2luX3Rlc3QgKGlkIGludCBQUklNQVJZIEtFWSwgcmVmX2lkIGludCk7 CitJTlNFUlQgSU5UTyBqb2luX3Rlc3QgU0VMRUNUIGcsIGcgJSAxMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMCkgZzsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBqdC5pZCwgaXQu ZGF0YQorRlJPTSBqb2luX3Rlc3QganQKK0pPSU4gaW5kZXhfdGVzdCBpdCBPTiBqdC5yZWZfaWQg PSBpdC5pZAorV0hFUkUganQuaWQgQkVUV0VFTiAxMDAgQU5EIDIwMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChpdC5pZCA9IGp0LnJlZl9pZCkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBpbmRleF90ZXN0IGl0CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEJpdG1h cCBIZWFwIFNjYW4gb24gam9pbl90ZXN0IGp0CisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6 ICgoaWQgPj0gMTAwKSBBTkQgKGlkIDw9IDIwMCkpCisgICAgICAgICAgICAgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gam9pbl90ZXN0X3BrZXkKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6ICgoaWQgPj0gMTAwKSBBTkQgKGlkIDw9IDIwMCkpCisoOCByb3dzKQorCistLSBUZXN0 IGluZGV4IHVzYWdlIHdpdGggT1JERVIgQlkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq CitGUk9NIGluZGV4X3Rlc3QKK09SREVSIEJZIGRhdGEKK0xJTUlUIDEwOworICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0 CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBpbmRleF90ZXN0X2RhdGFfaWR4IG9uIGluZGV4X3Rl c3QKKygyIHJvd3MpCisKKy0tIFRlc3QgZGlzYWJsaW5nIGFuIGluZGV4IGFuZCBpdHMgZWZmZWN0 IG9uIHF1ZXJ5IHBsYW4KK0FMVEVSIElOREVYIGluZGV4X3Rlc3RfZGF0YV9pZHggRElTQUJMRTsK K05PVElDRTogIGluZGV4ICJpbmRleF90ZXN0X2RhdGFfaWR4IiBpcyBub3cgZGlzYWJsZWQKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBpbmRleF90ZXN0IFdIRVJFIGRhdGEgPSAn ZGF0YSA1MDAnOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIGluZGV4X3Rlc3QK KyAgIEZpbHRlcjogKGRhdGEgPSAnZGF0YSA1MDAnOjp0ZXh0KQorKDIgcm93cykKKworLS0gUmUt ZW5hYmxlIHRoZSBpbmRleAorQUxURVIgSU5ERVggaW5kZXhfdGVzdF9kYXRhX2lkeCBFTkFCTEU7 CitOT1RJQ0U6ICBpbmRleCAiaW5kZXhfdGVzdF9kYXRhX2lkeCIgaXMgbm93IGVuYWJsZWQKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBpbmRleF90ZXN0IFdIRVJFIGRhdGEgPSAn ZGF0YSA1MDAnOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBC aXRtYXAgSGVhcCBTY2FuIG9uIGluZGV4X3Rlc3QKKyAgIFJlY2hlY2sgQ29uZDogKGRhdGEgPSAn ZGF0YSA1MDAnOjp0ZXh0KQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIGluZGV4X3Rlc3Rf ZGF0YV9pZHgKKyAgICAgICAgIEluZGV4IENvbmQ6IChkYXRhID0gJ2RhdGEgNTAwJzo6dGV4dCkK Kyg0IHJvd3MpCisKKy0tIENsZWFuIHVwCitEUk9QIFRBQkxFIGVuYWJsZV9kaXNhYmxlX3Rlc3Q7 CitEUk9QIFRBQkxFIHRvYXN0X3Rlc3Q7CitEUk9QIFRBQkxFIHVuaXF1ZV9jb25zdHJhaW50X3Rl c3Q7CitEUk9QIFRBQkxFIGpvaW5fdGVzdDsKK0RST1AgVEFCTEUgaW5kZXhfdGVzdDsKIC0tIEZh aWx1cmUgZm9yIHVuYXV0aG9yaXplZCB1c2VyCiBDUkVBVEUgUk9MRSByZWdyZXNzX3JlaW5kZXh1 c2VyIE5PTE9HSU47CiBTRVQgU0VTU0lPTiBST0xFIHJlZ3Jlc3NfcmVpbmRleHVzZXI7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCBmZTE2MmNjN2MzLi5kNTk5NzE3YzZm IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTEyOTcsNiArMTI5Nywx NDYgQEAgRU5EOwogLS0gY29uY3VycmVudGx5CiBSRUlOREVYIFNDSEVNQSBDT05DVVJSRU5UTFkg c2NoZW1hX3RvX3JlaW5kZXg7CiAKKy0tIFRlc3QgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0 eSBmb3IgaW5kZXhlcworCistLSBTZXR1cAorQ1JFQVRFIFRBQkxFIGVuYWJsZV9kaXNhYmxlX3Rl c3QoaWQgaW50IHByaW1hcnkga2V5LCBkYXRhIHRleHQpOworSU5TRVJUIElOVE8gZW5hYmxlX2Rp c2FibGVfdGVzdCBTRUxFQ1QgZywgJ2RhdGEgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGc7CisKKy0tIENSRUFURSBJTkRFWCB3aXRoIEVOQUJMRUQvRElTQUJMRUQKK0NSRUFU RSBJTkRFWCBlbmFibGVfZGlzYWJsZV9pZHgxIE9OIGVuYWJsZV9kaXNhYmxlX3Rlc3QoZGF0YSkg RElTQUJMRTsKK0NSRUFURSBJTkRFWCBlbmFibGVfZGlzYWJsZV9pZHgyIE9OIGVuYWJsZV9kaXNh YmxlX3Rlc3QoZGF0YSk7CitTRUxFQ1QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFsaWQs IGluZGlzcmVhZHksIGluZGlzbGl2ZSwgaW5kaXNlbmFibGVkCitGUk9NIHBnX2luZGV4CitXSEVS RSBpbmRyZWxpZCA9ICdlbmFibGVfZGlzYWJsZV90ZXN0Jzo6cmVnY2xhc3MKK09SREVSIEJZIGlu ZGV4cmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0OworCistLSBBTFRFUiBJTkRFWCAuLi4gRU5BQkxFL0RJ U0FCTEUKKy0tIEJlZm9yZQorU0VMRUNUIGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlk LCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hF UkUgaW5kcmVsaWQgPSAnZW5hYmxlX2Rpc2FibGVfdGVzdCc6OnJlZ2NsYXNzCitPUkRFUiBCWSBp bmRleHJlbGlkOjpyZWdjbGFzczo6dGV4dDsKKworQUxURVIgSU5ERVggZW5hYmxlX2Rpc2FibGVf aWR4MiBESVNBQkxFOworLS0gQWZ0ZXIKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFzcywgaW5k aXN2YWxpZCwgaW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00gcGdfaW5k ZXgKK1dIRVJFIGluZHJlbGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpyZWdjbGFzcworT1JE RVIgQlkgaW5kZXhyZWxpZDo6cmVnY2xhc3M6OnRleHQ7CisKKy0tIEVuYWJsZSBhbGwgaW5kZXhl cworQUxURVIgSU5ERVggZW5hYmxlX2Rpc2FibGVfaWR4MiBFTkFCTEU7CitBTFRFUiBJTkRFWCBl bmFibGVfZGlzYWJsZV9pZHgxIEVOQUJMRTsKK1NFTEVDVCBpbmRleHJlbGlkOjpyZWdjbGFzcywg aW5kaXN2YWxpZCwgaW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQKK0ZST00gcGdf aW5kZXgKK1dIRVJFIGluZHJlbGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpyZWdjbGFzcwor T1JERVIgQlkgaW5kZXhyZWxpZDo6cmVnY2xhc3M6OnRleHQ7CisKKy0tIFJFSU5ERVggVEFCTEUK K1JFSU5ERVggVEFCTEUgZW5hYmxlX2Rpc2FibGVfdGVzdDsKK1NFTEVDVCBpbmRleHJlbGlkOjpy ZWdjbGFzcywgaW5kaXN2YWxpZCwgaW5kaXNyZWFkeSwgaW5kaXNsaXZlLCBpbmRpc2VuYWJsZWQK K0ZST00gcGdfaW5kZXgKK1dIRVJFIGluZHJlbGlkID0gJ2VuYWJsZV9kaXNhYmxlX3Rlc3QnOjpy ZWdjbGFzcworT1JERVIgQlkgaW5kZXhyZWxpZDo6cmVnY2xhc3M6OnRleHQ7CisKKy0tIFJFSU5E RVggSU5ERVggd2l0aCBlbmFibGUvZGlzYWJsZQorQUxURVIgSU5ERVggZW5hYmxlX2Rpc2FibGVf aWR4MSBESVNBQkxFOworUkVJTkRFWCBJTkRFWCBlbmFibGVfZGlzYWJsZV9pZHgxOworU0VMRUNU IGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUs IGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kcmVsaWQgPSAnZW5hYmxlX2Rp c2FibGVfdGVzdCc6OnJlZ2NsYXNzCitPUkRFUiBCWSBpbmRleHJlbGlkOjpyZWdjbGFzczo6dGV4 dDsKKworLS0gUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBlbmFibGUvZGlzYWJsZQor QUxURVIgSU5ERVggZW5hYmxlX2Rpc2FibGVfaWR4MSBFTkFCTEU7CitSRUlOREVYIElOREVYIGVu YWJsZV9kaXNhYmxlX2lkeDE7CitTRUxFQ1QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFs aWQsIGluZGlzcmVhZHksIGluZGlzbGl2ZSwgaW5kaXNlbmFibGVkCitGUk9NIHBnX2luZGV4CitX SEVSRSBpbmRyZWxpZCA9ICdlbmFibGVfZGlzYWJsZV90ZXN0Jzo6cmVnY2xhc3MKK09SREVSIEJZ IGluZGV4cmVsaWQ6OnJlZ2NsYXNzOjp0ZXh0OworCistLSBUZXN0IEVOQUJMRS9ESVNBQkxFIG9u IFRPQVNUIGluZGV4CitDUkVBVEUgVEFCTEUgdG9hc3RfdGVzdCAoaWQgaW50IHByaW1hcnkga2V5 LCBkYXRhIHRleHQpOworSU5TRVJUIElOVE8gdG9hc3RfdGVzdCBTRUxFQ1QgZywgcmVwZWF0KCds b25nIHRleHQgJywgMTAwMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGc7CisKKy0tIENo ZWNrIGluaXRpYWwgc3RhdGUgb2YgVE9BU1QgaW5kZXgKK1NFTEVDVCBpbmRpc3ZhbGlkLCBpbmRp c3JlYWR5LCBpbmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5k ZXhyZWxpZCA9IChTRUxFQ1QgaW5kZXhyZWxpZCBGUk9NIHBnX2luZGV4IFdIRVJFIGluZHJlbGlk ID0gKFNFTEVDVCByZWx0b2FzdHJlbGlkIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3RvYXN0 X3Rlc3QnOjpyZWdjbGFzcykpOworCistLSBEaXNhYmxlIFRPQVNUIGluZGV4CitBTFRFUiBJTkRF WCBwZ190b2FzdC5wZ190b2FzdF8xNjM4NV9pbmRleCBESVNBQkxFOworCistLSBDaGVjayBzdGF0 ZSBhZnRlciBkaXNhYmxpbmcgVE9BU1QgaW5kZXgKK1NFTEVDVCBpbmRpc3ZhbGlkLCBpbmRpc3Jl YWR5LCBpbmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kZXhy ZWxpZCA9IChTRUxFQ1QgaW5kZXhyZWxpZCBGUk9NIHBnX2luZGV4IFdIRVJFIGluZHJlbGlkID0g KFNFTEVDVCByZWx0b2FzdHJlbGlkIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3RvYXN0X3Rl c3QnOjpyZWdjbGFzcykpOworCistLSBFbmFibGUgVE9BU1QgaW5kZXgKK0FMVEVSIElOREVYIHBn X3RvYXN0LnBnX3RvYXN0XzE2Mzg1X2luZGV4IEVOQUJMRTsKKworLS0gQ2hlY2sgc3RhdGUgYWZ0 ZXIgZW5hYmxpbmcgVE9BU1QgaW5kZXgKK1NFTEVDVCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBp bmRpc2xpdmUsIGluZGlzZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kZXhyZWxpZCA9 IChTRUxFQ1QgaW5kZXhyZWxpZCBGUk9NIHBnX2luZGV4IFdIRVJFIGluZHJlbGlkID0gKFNFTEVD VCByZWx0b2FzdHJlbGlkIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3RvYXN0X3Rlc3QnOjpy ZWdjbGFzcykpOworCistLSBUZXN0IENSRUFURSBUQUJMRSB3aXRoIFVOSVFVRSBjb25zdHJhaW50 CitDUkVBVEUgVEFCTEUgdW5pcXVlX2NvbnN0cmFpbnRfdGVzdCAoaWQgaW50IFVOSVFVRSwgZGF0 YSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHVuaXF1ZV9jb25zdHJhaW50X3Rlc3QgU0VMRUNUIGcsICdk YXRhICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworU0VMRUNUIGluZGV4 cmVsaWQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlkLCBpbmRpc3JlYWR5LCBpbmRpc2xpdmUsIGluZGlz ZW5hYmxlZAorRlJPTSBwZ19pbmRleAorV0hFUkUgaW5kcmVsaWQgPSAndW5pcXVlX2NvbnN0cmFp bnRfdGVzdCc6OnJlZ2NsYXNzOworCistLSBUZXN0IHRoYXQgdGhlIHVuaXF1ZSBjb25zdHJhaW50 IGluZGV4IGlzIHVzZWQKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB1bmlxdWVf Y29uc3RyYWludF90ZXN0IFdIRVJFIGlkID0gNTAwOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgKiBGUk9NIHVuaXF1ZV9jb25zdHJhaW50X3Rlc3QgV0hFUkUgaWQgSU4gKDEwMCwgMjAwLCAz MDApOworCistLSBUZXN0IENSRUFURSBUQUJMRSB3aXRoIElOREVYCitDUkVBVEUgVEFCTEUgaW5k ZXhfdGVzdCAoaWQgaW50LCBkYXRhIHRleHQpOworSU5TRVJUIElOVE8gaW5kZXhfdGVzdCBTRUxF Q1QgZywgJ2RhdGEgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVB VEUgSU5ERVggT04gaW5kZXhfdGVzdCAoZGF0YSk7CitTRUxFQ1QgaW5kZXhyZWxpZDo6cmVnY2xh c3MsIGluZGlzdmFsaWQsIGluZGlzcmVhZHksIGluZGlzbGl2ZSwgaW5kaXNlbmFibGVkCitGUk9N IHBnX2luZGV4CitXSEVSRSBpbmRyZWxpZCA9ICdpbmRleF90ZXN0Jzo6cmVnY2xhc3M7CisKKy0t IFRlc3QgdGhhdCB0aGUgaW5kZXggaXMgdXNlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIGluZGV4X3Rlc3QgV0hFUkUgZGF0YSA9ICdkYXRhIDUwMCc7CisKKy0tIFRlc3QgaW5k ZXggdXNhZ2Ugd2l0aCBqb2lucworQ1JFQVRFIFRBQkxFIGpvaW5fdGVzdCAoaWQgaW50IFBSSU1B UlkgS0VZLCByZWZfaWQgaW50KTsKK0lOU0VSVCBJTlRPIGpvaW5fdGVzdCBTRUxFQ1QgZywgZyAl IDEwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QganQuaWQsIGl0LmRhdGEKK0ZST00gam9pbl90ZXN0IGp0CitKT0lOIGluZGV4 X3Rlc3QgaXQgT04ganQucmVmX2lkID0gaXQuaWQKK1dIRVJFIGp0LmlkIEJFVFdFRU4gMTAwIEFO RCAyMDA7CisKKy0tIFRlc3QgaW5kZXggdXNhZ2Ugd2l0aCBPUkRFUiBCWQorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICoKK0ZST00gaW5kZXhfdGVzdAorT1JERVIgQlkgZGF0YQorTElNSVQg MTA7CisKKy0tIFRlc3QgZGlzYWJsaW5nIGFuIGluZGV4IGFuZCBpdHMgZWZmZWN0IG9uIHF1ZXJ5 IHBsYW4KK0FMVEVSIElOREVYIGluZGV4X3Rlc3RfZGF0YV9pZHggRElTQUJMRTsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGluZGV4X3Rlc3QgV0hFUkUgZGF0YSA9ICdkYXRh IDUwMCc7CisKKy0tIFJlLWVuYWJsZSB0aGUgaW5kZXgKK0FMVEVSIElOREVYIGluZGV4X3Rlc3Rf ZGF0YV9pZHggRU5BQkxFOworCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gaW5k ZXhfdGVzdCBXSEVSRSBkYXRhID0gJ2RhdGEgNTAwJzsKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFC TEUgZW5hYmxlX2Rpc2FibGVfdGVzdDsKK0RST1AgVEFCTEUgdG9hc3RfdGVzdDsKK0RST1AgVEFC TEUgdW5pcXVlX2NvbnN0cmFpbnRfdGVzdDsKK0RST1AgVEFCTEUgam9pbl90ZXN0OworRFJPUCBU QUJMRSBpbmRleF90ZXN0OworCiAtLSBGYWlsdXJlIGZvciB1bmF1dGhvcml6ZWQgdXNlcgogQ1JF QVRFIFJPTEUgcmVncmVzc19yZWluZGV4dXNlciBOT0xPR0lOOwogU0VUIFNFU1NJT04gUk9MRSBy ZWdyZXNzX3JlaW5kZXh1c2VyOwotLSAKMi4zNy4xIChBcHBsZSBHaXQtMTM3LjEpCgo= --000000000000dd4d7a0622b95539--