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.96) (envelope-from ) id 1vt1r5-00GBot-2T for pgpool-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 11:06:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vt1r4-003O5U-2Q for pgpool-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 11:05:58 +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.96) (envelope-from ) id 1vt1r3-003O5K-3D for pgpool-hackers@lists.postgresql.org; Thu, 19 Feb 2026 11:05:58 +0000 Received: from mail-yx1-xb134.google.com ([2607:f8b0:4864:20::b134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vt1qy-000000007fy-3F1w for pgpool-hackers@lists.postgresql.org; Thu, 19 Feb 2026 11:05:56 +0000 Received: by mail-yx1-xb134.google.com with SMTP id 956f58d0204a3-64ad79df972so718408d50.1 for ; Thu, 19 Feb 2026 03:05:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771499153; cv=none; d=google.com; s=arc-20240605; b=Cgrug8JvfRn7aJVHhhj0TcAo/9YfdGRdexXMM0e+R8yphmRZ2dYYyjzsIGBBlun8Ho jG63oNgpBENw0ARGorvkUFg96ktlCk0Ki6nqpu+AojejD7cB2VKoj0R7gw9/7XUMpi4R WCDyPwhDgoV5CLCAbUr1eYXEcGY60vvp+D1HXoKq8fCPH9NgUuQ3l1FGyaBQNVcyTsiS j14hjsMbOamnJGekS8M+TDRqBfX3/pK+/fP4gPFZ18xmn26RpWrZyEMZKuopF/kdsM7n RaDXQ071pFRfBHofi9GSsEiQS0sY7o+HBn7vFV/hN4ogX68mqwGL9O0PGIDgTTJA1yvW /mrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=/z3Ff0pRBjL633C9zkL22DPvVoVkCyMRNdz0rSZDbig=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=lWf2t/M7x4BMRD+GhSEnm+H54jpux6WEB4Y2hXYsMETBMWdhU/YaQULNK4PrbseW+0 8xCRt3wSLB77UpLDaHZqLDrNHj+4nAFz0+e5j6/MbiqITLLG4oMWtE/Ip8DcsgaOj/9U THZUxo70yJTG35Gfqw6uFhTEgxHTpy8MsXdJhadf6TzJRIcihPVTMoB+NpxJ8kxZ5S/1 Bm1FnU9IlOrTklxwSvAuumcpiPTYBBoszONorvXZIy0tqStfS3b2XlyRHuzA2VrnOuae JMvCM2WNFJjDR6rkzMfLlbQQYm2qqI15RtQpzIEbZzAHnYg2ss6kWnUgB1NivLZOgX4m 6LCA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1771499153; x=1772103953; 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=/z3Ff0pRBjL633C9zkL22DPvVoVkCyMRNdz0rSZDbig=; b=A5ev2sW1xZNynVu5TJ+lPC0F7lJJsprzNvd+EpMBx1xQM8JhAQYfU+CSgArvp96Uln 1IVTb+rJAQsjBgevzKobwFeRxmYQdWe8u47URvmbhFrjaD+UVsuLcxMZhlRlqlyB8MaO 4ElTnULub/cDkKRwZ5B9maEutL8RQFraHwg5aRIqJMvK/DSFodsukzvi2LjvqD1ppYy2 RZ8qbyz8Zkx054Ek7QUOQLZg6HN68iepr1gUJdcpWOOQKFDHqqQ7QdIbNYYZS18MPbCm WPRLLUSOf1gKzCcDt3+bi8Cyzp3oprein/AhENm3JwRHHv7eEEcihID7eD1tNDymx+r7 lppA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771499153; x=1772103953; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/z3Ff0pRBjL633C9zkL22DPvVoVkCyMRNdz0rSZDbig=; b=vw/hPjej34nJ+BUSCujYFWJooiFLbP+9j8YuHv08Tys/uT6liRMKbNJ8u7s3BOKqxN 4bg2IoYQ5b+caAv8/f/O9gVssSgzBKpUpivDcMPaVf1vBY2KgaGNl1//pAs5Suh6AHx5 CscTEoJG7GY5Q4yzSQq5x1dfyShRqjHsr0pbNeJOmeASygcZyhXcvu68a4oLA3LivFve 1fjzEs80kASI0bZgUQGCPWZvKi7WFMNBOk4j10sUuXXrhXZmw0GfJ8QFK59eI0L7qUyh p4WsCNNZDSAUxM8f20bce6Udf/5jraf7tCQlbSqMHmtyEa7Br5hwtY7KaghQQcZPXBmK hL1Q== X-Gm-Message-State: AOJu0YwJqUaNOuLC189yaBj8gXoNpHgbcralTPWxbC5zFBAzHOCJyYIR Sgzs3nSeBhTExI4DD2qbZM/It1HrLYZZ+EjF7V7UxGg93JKK0GEyJFOPeuOXsDNueA6Czy5rWNk SBwYB4FXKQwUBsAihb24KPnTv60C0tB0UlcR6jxDC3A== X-Gm-Gg: AZuq6aIoF05SGTYRZ+mIXYSmn+RPokn4kPHw8XROe3Rnlv8jbte5+nvBW1DhyCQEJSj xCLwuot9mFnCil90hMfzJzXhcaoq7Z4VLIYVmtZM3eXr9qx7Bh+u9zjAXq4KNdNEYQd573nTMrH chluVEF3QEUmEgPaAQ8ucJxTwCqpd76Ytbb9qBHEHl3FJbaDF5r5JQjleC6p5VkJpfqbA24R5L4 wxaiZN+yUNfra2Na8S1VrNqkhNEYkwKcB+OyGWKkfLderWfTb/t6LYKE9dHBxwisD4uZGi5aUfo H1dsOoIezxPGsi2ulhO8XSFl9bp6pJ/vf8chMPpBeTf5fXC1qlCMW/8fmFt2Ff4RFaCIBFnsb3z Af+pEk+8pDb/5OYeHqziHwcXnZUm9EMysyDln X-Received: by 2002:a05:690e:1516:b0:649:cf3f:b318 with SMTP id 956f58d0204a3-64c21b27c2dmr13304019d50.54.1771499152883; Thu, 19 Feb 2026 03:05:52 -0800 (PST) MIME-Version: 1.0 References: <20260211.192845.1888610184173239311.ishii@postgresql.org> <20260219.085121.1424536813757196179.ishii@postgresql.org> In-Reply-To: From: Nadav Shatz Date: Thu, 19 Feb 2026 13:05:41 +0200 X-Gm-Features: AaiRm52exm5Jg6NuWFamo7_s_L20dSuMnSIGe60S33PygZbW2hqbF-XCuvWjKbM Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000baf5c8064b2b4904" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000baf5c8064b2b4904 Content-Type: multipart/alternative; boundary="000000000000baf5c7064b2b4902" --000000000000baf5c7064b2b4902 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Added some handling for possible causes - works now. On Thu, Feb 19, 2026 at 6:40=E2=80=AFAM Nadav Shatz wrote: > Thanks! I=E2=80=99ll look into it and share an updated patch > > Nadav Shatz > Tailor Brands | CTO > > > On Thu, Feb 19, 2026 at 1:51=E2=80=AFAM Tatsuo Ishii wrote: > >> > Hi Tatsuo, >> > >> > Thank you for the careful review. You raised an important concern. >> I've >> > addressed it in the updated patch =E2=80=95 here's the explanation: >> > >> > The attack scenario you describe is now handled. In the updated patc= h, >> > writes inside explicit transactions are only flushed to the >> shared-memory >> > table map at COMMIT time. If the transaction is rolled back, the table >> is >> > never marked as stale. So the attack pattern: >> > >> > BEGIN; >> > UPDATE t1 SET i =3D 1 WHERE FALSE; >> > ROLLBACK; >> > >> > has zero effect on the shared-memory table map. The >> dml_adaptive_global >> > mode piggybacks on the existing dml_adaptive per-transaction write lis= t >> > (transaction_temp_write_list). On COMMIT, the accumulated table names >> are >> > resolved to OIDs and flushed to shared memory. On ROLLBACK, >> > the list is simply discarded (the existing dml_adaptive behavior). >> > >> > For autocommit statements (outside explicit transactions), tables ar= e >> > marked immediately =E2=80=95 but in that case the write is committed, = so this is >> > correct. >> > >> > Regression test included. Test 042 now includes: >> > - Test 10: verifies that BEGIN; INSERT; ROLLBACK; SELECT does NOT >> route >> > the SELECT to primary >> > - Test 11: verifies that BEGIN; INSERT; COMMIT; SELECT DOES route th= e >> > SELECT to primary >> > >> > Additional context on the threat model: >> > >> > 1. This feature requires disable_load_balance_on_write =3D >> > 'dml_adaptive_global' =E2=80=95 it is opt-in, not enabled by default. = Operators >> who >> > enable it accept documented trade-offs (additional shared memory, >> TTL-based >> > staleness window). >> > 2. An attacker who can connect and execute SQL against pgpool alread= y >> has >> > the ability to cause far more damage (DROP TABLE, mass DELETEs, resour= ce >> > exhaustion via expensive queries, connection flooding, etc.). The >> > table-marking via committed writes is a minor concern compared to >> > those vectors. Authentication, connection limits, and network securi= ty >> > are the appropriate defenses at that layer. >> > 3. Even in the worst case (an attacker commits real writes in a loop= ), >> > the impact is bounded: the stale marking is temporary (TTL-based, >> typically >> > a few seconds), and only affects load-balancing decisions =E2=80=95 it= doesn't >> > cause data loss or correctness issues. >> > 4. The existing dml_adaptive mode has analogous behavior: within a >> > transaction, a write to table T causes all reads of T to go to primary >> for >> > the remainder of that transaction. The only difference is scope =E2=80= =95 >> > dml_adaptive_global extends this across sessions with a TTL. >> > >> > Thanks! >> >> Thank you for the patch. While I am looking into it, I noticed a >> regression test failure. >> >> t-ishii$ ./regress.sh 04[12] >> creating pgpool-II temporary installation ... >> : >> : >> testing 041.external_replication_delay...ok. >> testing 042.track_table_mutation...failed. >> out of 2 ok:1 failed:1 timeout:0 >> >> However if I run 042 only, it succeeds. >> >> t-ishii$ ./regress.sh 042 >> : >> : >> testing 042.track_table_mutation...ok. >> out of 1 ok:1 failed:0 timeout:0 >> >> Can you please take a look at this? log/042.track_table_mutation >> attached. >> >> Best regards, >> -- >> Tatsuo Ishii >> SRA OSS K.K. >> English: http://www.sraoss.co.jp/index_en/ >> Japanese:http://www.sraoss.co.jp >> > --=20 Nadav Shatz Tailor Brands | CTO --000000000000baf5c7064b2b4902 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Added some handling for possible causes - works now.
=
On Thu, Feb 19, 2026 at 6:40=E2=80=AFAM Nadav Shatz <nadav@tailorbrands.com> wrote= :
Thanks! I=E2=80=99ll look into it and share an updated patch

=
Nadav Shatz
Tailor Brands=C2=A0| CTO


On Thu, Feb 19, 2026 at 1:5= 1=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:
>=C2=A0 Hi Tatsuo,
>
>=C2=A0 =C2=A0Thank you for the careful review. You raised an important = concern. I've
> addressed it in the updated patch =E2=80=95 here's the explanation= :
>
>=C2=A0 =C2=A0The attack scenario you describe is now handled. In the up= dated patch,
> writes inside explicit transactions are only flushed to the shared-mem= ory
> table map at COMMIT time. If the transaction is rolled back, the table= is
> never marked as stale. So the attack pattern:
>
>=C2=A0 =C2=A0BEGIN;
>=C2=A0 =C2=A0UPDATE t1 SET i =3D 1 WHERE FALSE;
>=C2=A0 =C2=A0ROLLBACK;
>
>=C2=A0 =C2=A0has zero effect on the shared-memory table map. The dml_ad= aptive_global
> mode piggybacks on the existing dml_adaptive per-transaction write lis= t
> (transaction_temp_write_list). On COMMIT, the accumulated table names = are
> resolved to OIDs and flushed to shared memory. On ROLLBACK,
>=C2=A0 =C2=A0the list is simply discarded (the existing dml_adaptive be= havior).
>
>=C2=A0 =C2=A0For autocommit statements (outside explicit transactions),= tables are
> marked immediately =E2=80=95 but in that case the write is committed, = so this is
> correct.
>
>=C2=A0 =C2=A0Regression test included. Test 042 now includes:
>=C2=A0 =C2=A0- Test 10: verifies that BEGIN; INSERT; ROLLBACK; SELECT d= oes NOT route
> the SELECT to primary
>=C2=A0 =C2=A0- Test 11: verifies that BEGIN; INSERT; COMMIT; SELECT DOE= S route the
> SELECT to primary
>
>=C2=A0 =C2=A0Additional context on the threat model:
>
>=C2=A0 =C2=A01. This feature requires disable_load_balance_on_write =3D=
> 'dml_adaptive_global' =E2=80=95 it is opt-in, not enabled by d= efault. Operators who
> enable it accept documented trade-offs (additional shared memory, TTL-= based
> staleness window).
>=C2=A0 =C2=A02. An attacker who can connect and execute SQL against pgp= ool already has
> the ability to cause far more damage (DROP TABLE, mass DELETEs, resour= ce
> exhaustion via expensive queries, connection flooding, etc.). The
> table-marking via committed writes is a minor concern compared to
>=C2=A0 =C2=A0those vectors. Authentication, connection limits, and netw= ork security
> are the appropriate defenses at that layer.
>=C2=A0 =C2=A03. Even in the worst case (an attacker commits real writes= in a loop),
> the impact is bounded: the stale marking is temporary (TTL-based, typi= cally
> a few seconds), and only affects load-balancing decisions =E2=80=95 it= doesn't
> cause data loss or correctness issues.
>=C2=A0 =C2=A04. The existing dml_adaptive mode has analogous behavior: = within a
> transaction, a write to table T causes all reads of T to go to primary= for
> the remainder of that transaction. The only difference is scope =E2=80= =95
> dml_adaptive_global extends this across sessions with a TTL.
>
> Thanks!

Thank you for the patch. While I am looking into it, I noticed a
regression test failure.

t-ishii$ ./regress.sh 04[12]
creating pgpool-II temporary installation ...
:
:
testing 041.external_replication_delay...ok.
testing 042.track_table_mutation...failed.
out of 2 ok:1 failed:1 timeout:0

However if I run 042 only, it succeeds.

t-ishii$ ./regress.sh 042
:
:
testing 042.track_table_mutation...ok.
out of 1 ok:1 failed:0 timeout:0

Can you please take a look at this? log/042.track_table_mutation
attached.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--000000000000baf5c7064b2b4902-- --000000000000baf5c8064b2b4904 Content-Type: application/octet-stream; name="table_track.patch" Content-Disposition: attachment; filename="table_track.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mltcucus0 RnJvbSBkODE5NjMyZjJkYWM0MWNiZTFlMDEzNjM2MjhkMWQxYzJmNjQ4OTYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCgpJbnRyb2R1Y2VzICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyBhcyBhIG5l dyB2YWx1ZSBmb3IgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUuClRoaXMgbW9kZSBpcyBh IHN1cGVyc2V0IG9mIGRtbF9hZGFwdGl2ZTogaXQgcGVyZm9ybXMgcGVyLXRyYW5zYWN0aW9uIGxv Y2FsIHRyYWNraW5nCkFORCBjcm9zcy1zZXNzaW9uIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgb2Yg cmVjZW50bHkgd3JpdHRlbiB0YWJsZXMsIHJvdXRpbmcgcmVhZHMKdG8gcHJpbWFyeSB1bnRpbCBh IFRUTCAoYmFzZWQgb24gbWVhc3VyZWQgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCgpTdWIt cGFyYW1ldGVycyAodHJhY2tfdGFibGVfbXV0YXRpb25fKikgY29udHJvbCBUVEwgZmFjdG9yLCBj b2xkIHN0YXJ0IGR1cmF0aW9uLApoYXNoIHRhYmxlIHNpemluZywgYW5kIHF1ZXJ5IHBhcnNlIGNh Y2hlIHNpemluZy4KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBi L2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCmluZGV4IGVlMTlmYWJlYmFiMjIxMGNkNGFi ZTU5YTcxMWEwMzZhYzBhYzg5NDMuLjc0MTYyZWYyZjgxZjM4ODc5YzU1MjQzOGVlOTMyMWRmZGUz NGE0YmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCkBAIC0xMTA4LDYgKzExMDgsMTggQEAgYXBwX25h bWVfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVy ZW5jZV9saXN0ICZndDsgdXMKIAkJRGVwZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2 aWV3cyBvbiB0aGUgdGFibGVzIGNhbiBiZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtl bmQ9Imd1Yy1kbWwtYWRhcHRpdmUtb2JqZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9w YXJhPgorCisgICAgIDxwYXJhPgorCQlJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5h bWU+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvdmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wt SUk8Lz4gYmVoYXZlcyBsaWtlIDx2YXJuYW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBl ci10cmFuc2FjdGlvbiB3cml0ZSB0cmFja2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJl ZCBtZW1vcnkgdG8gdHJhY2sKKwkJcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBz ZXNzaW9ucyBjbHVzdGVyLXdpZGUuIFdoZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBz ZXNzaW9uLCBzdWJzZXF1ZW50IHJlYWRzIG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBh cmUKKwkJcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJl cGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFm dGVyIHdyaXRlcyBldmVuIGFjcm9zcyBkaWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJl ZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbiI+IGZvciB0aGUg c3ViLXBhcmFtZXRlcnMKKwkJdGhhdCBjb250cm9sIHRoZSBzaGFyZWQtbWVtb3J5IHRyYWNraW5n IGJlaGF2aW9yLgorICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVu dHJ5PgogCkBAIC0xMTkzLDQgKzEyMDUsMjU1IEBAIGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QgPSAndGFibGVfMTp0YWJsZV8yJwogCiAgIDwvdmFyaWFibGVsaXN0PgogIDwv c2VjdDI+CisKKyA8c2VjdDIgaWQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+ CisgIDx0aXRsZT5UYWJsZSBNdXRhdGlvbiBNYXAgQ29uZmlndXJhdGlvbiAoTGFnbGVzcyBSZXBs aWNhIFJlYWRzKTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJhbWV0ZXJzIGNvbmZp Z3VyZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2ggaXMgYWN0aXZhdGVk IGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxvYWQtYmFsYW5jZS1v bi13cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAg VGhlIGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3Rh bGUgcmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGljYXRpb24gbGFnLCBp bXBsZW1lbnRpbmcgdGhlICJsYWdsZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJp YnV0ZWQgc3lzdGVtcworICAgd2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwg aXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJl cGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJh bD4pLiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24gc3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRv IHRoZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBvZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRl ci13cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0 dXJlIHJlcXVpcmVzIDx4cmVmIGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1kZWxheS1zb3VyY2Ut Y21kIj4gdG8gYmUgY29uZmlndXJlZAorICAgZm9yIG1vbml0b3JpbmcgcmVwbGljYXRpb24gZGVs YXkgZnJvbSByZXBsaWNhcy4KKyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+Cisg ICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4gaW5jcmVh c2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdpdGggZGVmYXVsdCBzZXR0aW5ncywKKyAg ICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDYuNCBNQiBvZiBzaGFyZWQgbWVt b3J5ICgwLjEgTUIgZm9yIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIGZvciBxdWVyeSBjYWNoZSku CisgICAgTWVtb3J5IHVzYWdlIHNjYWxlcyB3aXRoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoK KyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIFRhYmxlIHRyYWNraW5nOiA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl90 YWJsZV9zaXplICogNDAgYnl0ZXM8L2xpdGVyYWw+IChkZWZhdWx0OiAyMDQ4ICogNDAgPSB+ODAg S0IpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBRdWVyeSBjYWNoZTogPGxpdGVyYWw+dHJhY2tfdGFibGVfbXV0YXRpb25f cXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSAqIDY0MCBieXRlczwvbGl0ZXJhbD4gKGRlZmF1bHQ6IDEw MDAwICogNjQwID0gfjYuMyBNQikKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L2l0ZW1pemVkbGlzdD4KKyAgIDxwYXJhPgorICAgIEZvciBoaWdoLXRyYWZmaWMgc3lzdGVtcyB3 aXRoIGxhcmdlIGNhY2hlIHNpemVzIChlLmcuLCA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlv bl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gMTAwMDAwPC9saXRlcmFsPiksCisgICAgbWVtb3J5 IHVzYWdlIGNhbiByZWFjaCA2NCBNQiBvciBtb3JlLiBDb25zaWRlciB5b3VyIHN5c3RlbSdzIGF2 YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHdoZW4gdXNpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFibGVs aXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdHRs LWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yIj4KKyAg ICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC92YXJuYW1l PiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFt ZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTXVsdGlwbGll ciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVwbGljYXRpb25fZGVs YXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPi4KKyAgICAgIEhp Z2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1heSByZWR1Y2UgcmVh ZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAg VmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41LjA8L2xpdGVyYWw+ LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8 cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlk PSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tY29sZC1zdGFydC1kdXJhdGlvbiIgeHJlZmxhYmVs PSJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uIj4KKyAgICA8dGVybT48 dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlv biBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBh IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3 aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSB0cmFjayB0YWJs ZSBtdXRhdGlvbgorICAgICAgaXMgcG9wdWxhdGVkIHdpdGggcmVjZW50IHdyaXRlIGhpc3Rvcnku CisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHdhdGNoZG9nIGlzIGVuYWJs ZWQgYW5kIHRoZSBsb2NhbCBub2RlIGJlY29tZXMgdGhlIGxlYWRlciwgUGdwb29sLUlJIGFsc28g dHJpZ2dlcnMgYQorICAgICAgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yIHRoaXMgZHVyYXRpb24gdG8g YXZvaWQgc3RhbGUgcmVhZHMgYWZ0ZXIgbGVhZGVyc2hpcCBjaGFuZ2VzLgorICAgICA8L3BhcmE+ CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDAtNjAwMDAgbXMuIERlZmF1bHQgaXMg PGxpdGVyYWw+MjAwMDwvbGl0ZXJhbD4gKDIgc2Vjb25kcykuCisgICAgICBTZXQgdG8gMCB0byBk aXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUg Y2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmln dXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJs ZS1idWNrZXRzIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMi PgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8 L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxl LgorICAgICAgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGFuZCBpbXByb3Zl IGxvb2t1cCBwZXJmb3JtYW5jZS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZh bGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDI0PC9saXRlcmFsPi4K KyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIiB4cmVm bGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRl Z2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0aGF0 IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlv bi4KKyAgICAgIFdoZW4gZnVsbCwgb2xkZXN0IGVudHJpZXMgYXJlIGV2aWN0ZWQgdXNpbmcgYSBz aW1wbGUgZXZpY3Rpb24gc3RyYXRlZ3kuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAg ICBWYWxpZCByYW5nZTogMTI4LTEzMTA3Mi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRl cmFsPi4KKyAgICAgIE1lbW9yeSB1c2FnZTogYXBwcm94aW1hdGVseSA0MCBieXRlcyBwZXIgZW50 cnkuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0 LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVlcnktYnVja2V0 cyIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIj4KKyAgICA8 dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFz aCBidWNrZXRzIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUuIFRoZSBjYWNoZSBzdG9yZXMgbm9y bWFsaXplZAorICAgICAgcXVlcnkgc3RyaW5ncyBtYXBwZWQgdG8gdGhlaXIgdGFibGUgZGVwZW5k ZW5jaWVzIHRvIGF2b2lkIHJlcGVhdGVkIHBhcnNpbmcuCisgICAgIDwvcGFyYT4KKyAgICAgPHBh cmE+CisgICAgICBWYWxpZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMgPGxpdGVyYWw+MjA0 ODwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2Vy dmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVl cnktcGFyc2UtY2FjaGUtc2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVy eV9wYXJzZV9jYWNoZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRh dGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlw ZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBw YXJzZSByZXN1bHRzIHRvIGNhY2hlLiBVc2VzIExSVSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAg ICBMYXJnZXIgY2FjaGVzIHJlZHVjZSBwYXJzaW5nIG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUg c2hhcmVkIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJh bmdlOiAxMDAtMTAwMDAwMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisg ICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRlbHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYu MyBNQiBmb3IgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDAgZW50cmllcykuCisgICAgICBUaGlz IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0 PgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tZXhh bXBsZSI+CisgICA8dGl0bGU+VHJhY2sgVGFibGUgTXV0YXRpb24gQ29uZmlndXJhdGlvbiBFeGFt cGxlPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRvIGVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlv biB3aXRoIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJv Z3JhbWxpc3Rpbmc+CisjIEVuYWJsZSBkbWxfYWRhcHRpdmVfZ2xvYmFsIG1vZGUgKGluY2x1ZGVz IHRyYWNrIHRhYmxlIG11dGF0aW9uKQorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1 LjAKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMg Q29uZmlndXJlIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3JpbmcKK3JlcGxpY2F0 aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnL3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNo JworcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMAorCisjIEFkanVzdCBjYWNo ZSBzaXplcyBiYXNlZCBvbiB3b3JrbG9hZCAoaW5jcmVhc2VzIG1lbW9yeSB1c2FnZSkKK3RyYWNr X3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSA0MDk2ICAgICAgIyBUcmFjayB1cCB0byA0MDk2 IHRhYmxlcyAofjE2MCBLQikKK3RyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hl X3NpemUgPSA1MDAwMCAgIyBDYWNoZSA1MGsgcXVlcmllcyAofjMxIE1CKQorICAgPC9wcm9ncmFt bGlzdGluZz4KKyAgIDxwYXJhPgorICAgIFRvdGFsIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9y IGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJveGltYXRlbHkgMzEuMiBNQiAoMzEgTUIgcXVlcnkg Y2FjaGUgKyAwLjIgTUIgdGFibGUgbWFwICsgb3ZlcmhlYWQpLgorICAgIERlZmF1bHQgY29uZmln dXJhdGlvbiAoMTAwMDAgcXVlcnkgY2FjaGUgZW50cmllcywgMjA0OCB0YWJsZXMpIHJlcXVpcmVz IGFwcHJveGltYXRlbHkgNi40IE1CLgorICAgPC9wYXJhPgorICA8L3NlY3QzPgorCisgIDxzZWN0 MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tbGltaXRhdGlvbnMiPgor ICAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRoZSB0cmFjayB0 YWJsZSBtdXRhdGlvbiBmZWF0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb246CisgICA8 L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIGFyZSBub3QgdHJhY2tl ZC4gV2hlbiBhIHByZXBhcmVkIHN0YXRlbWVudAorICAgICAgY29udGFpbmluZyBkYXRhIG1vZGlm aWNhdGlvbiBpcyBleGVjdXRlZCwgdGhlIHRhYmxlIG11dGF0aW9uIGlzIG5vdCByZWNvcmRlZC4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDxw YXJhPgorICAgIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyBwcmVwYXJlZCBzdGF0ZW1lbnRzIGFu ZCByZXF1aXJlcyByZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5LAorICAgIGNvbnNpZGVyIHVz aW5nIGV4cGxpY2l0IHRyYW5zYWN0aW9uIHJvdXRpbmcgb3IgdGhlIDxsaXRlcmFsPi8qTk8gTE9B RCBCQUxBTkNFKi88L2xpdGVyYWw+CisgICAgY29tbWVudCBkaXJlY3RpdmUgZm9yIGFmZmVjdGVk IHF1ZXJpZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBUaGUgZm9sbG93aW5nIHN0YXRl bWVudCB0eXBlcyA8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4gdHJhY2tlZCBhbmQgd2lsbCBtYXJr IHRhYmxlcyBhcyBzdGFsZToKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPklOU0VSVDwvbGl0ZXJhbD4sIDxs aXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIDxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD4KKyAgICAg IHN0YXRlbWVudHMgKGluY2x1ZGluZyB0aG9zZSB3aXRoIDxsaXRlcmFsPlJFVFVSTklORzwvbGl0 ZXJhbD4gY2xhdXNlcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4gc3Rh dGVtZW50cyAoaW5jbHVkaW5nIG11bHRpcGxlIHRhYmxlcykuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5N RVJHRTwvbGl0ZXJhbD4gc3RhdGVtZW50cyAoUG9zdGdyZVNRTCAxNSspLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxp dGVyYWw+V0lUSDwvbGl0ZXJhbD4gY2xhdXNlcyBjb250YWluaW5nIGRhdGEgbW9kaWZpY2F0aW9u cyAoQ29tbW9uIFRhYmxlIEV4cHJlc3Npb25zCisgICAgICB3aXRoIDxsaXRlcmFsPklOU0VSVDwv bGl0ZXJhbD4sIDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPkRFTEVURTwv bGl0ZXJhbD4pLgorICAgICAgRm9yIGV4YW1wbGUsIDxsaXRlcmFsPldJVEggZGVsZXRlZCBBUyAo REVMRVRFIEZST00gdDEgUkVUVVJOSU5HICopIFNFTEVDVCAqIEZST00gZGVsZXRlZDwvbGl0ZXJh bD4KKyAgICAgIHdpbGwgcHJvcGVybHkgbWFyayB0YWJsZSA8bGl0ZXJhbD50MTwvbGl0ZXJhbD4g YXMgc3RhbGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxp c3Q+CisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+VHJhbnNhY3Rpb24gUm9sbGJhY2sgQmVoYXZp b3I6PC9lbXBoYXNpcz4gV2l0aGluIGV4cGxpY2l0IHRyYW5zYWN0aW9ucywgdGFibGVzCisgICAg YXJlIG9ubHkgbWFya2VkIGFzIHN0YWxlIGluIHNoYXJlZCBtZW1vcnkgd2hlbiB0aGUgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkLiBJZiB0aGUKKyAgICB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFj aywgbm8gdGFibGVzIGFyZSBtYXJrZWQsIHNpbmNlIG5vIGFjdHVhbCBkYXRhIG1vZGlmaWNhdGlv bgorICAgIG9jY3VycmVkIG9uIHJlcGxpY2FzLiBUaGlzIHByZXZlbnRzIHJvbGxlZC1iYWNrIHRy YW5zYWN0aW9ucyBmcm9tIHVubmVjZXNzYXJpbHkKKyAgICBkaXNhYmxpbmcgbG9hZCBiYWxhbmNp bmcuIEZvciBhdXRvY29tbWl0IHN0YXRlbWVudHMgKG91dHNpZGUgZXhwbGljaXQgdHJhbnNhY3Rp b25zKSwKKyAgICB0YWJsZXMgYXJlIG1hcmtlZCBpbW1lZGlhdGVseSB1cG9uIGNvbW1hbmQgY29t cGxldGlvbi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisKIDwvc2VjdDE+ CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3 OGFiNTMwNTVlODI4YTM3YjY0Nzc4MDE2NDBhZmYxN2ZmODRhNy4uMzk1ODhhZjU4ZGViYTA0NWRm ZmMwMWFlOTMyMTE1YjhhOWRiZmNmMiAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKyBi L3NyYy9NYWtlZmlsZS5hbQpAQCAtMzUsNiArMzUsNyBAQCBwZ3Bvb2xfU09VUkNFUyA9IG1haW4v bWFpbi5jIFwKIAlyZXdyaXRlL3Bvb2xfdGltZXN0YW1wLmMgXAogCXJld3JpdGUvcG9vbF9sb2Jq LmMgXAogCXV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5jIFwKKwl1dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmMgXAogCXV0aWxzL3N0cmxjcHkuYyBcCiAJdXRpbHMvcHNwcmludGYuYyBc CiAJdXRpbHMvcG9vbF9wYXJhbXMuYyBcCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL3Bvb2xfY29u ZmlnX3ZhcmlhYmxlcy5jIGIvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwppbmRl eCA2OGFiYjdmNDFjYjk2ZDg1NmM4MjRhMTQ4ODQyNzQ4YmZiN2E0ZDEyLi42MjNkODc1MTY3N2Zk NmYzOWQwZTEyZjBlM2U4OTkxNzE4OTBmNmUwIDEwMDY0NAotLS0gYS9zcmMvY29uZmlnL3Bvb2xf Y29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVz LmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVtX2Vu dHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlvbnNbXSA9CiAJeyJ0cmFuc190 cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBmYWxzZX0sCiAJeyJhbHdheXMi LCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2ZSIsIERMQk9XX0RNTF9BREFQ VElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIsIERMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9OwogCkBAIC0xNzU3LDYgKzE3 NTgsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5IENvbmZpZ3VyZU5hbWVzSW50 QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJsZSBDb25maWd1cmVOYW1lc0Rv dWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciIsIENG R0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiVFRMIG11bHRpcGxpZXIgZm9y IHRyYWNrIHRhYmxlIG11dGF0aW9uIChUVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIGZhY3Rvciki LAorCQkJQ09ORklHX1ZBUl9UWVBFX0RPVUJMRSwgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9vbF9j b25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciwKKwkJNS4wLAkJCQkJLyogYm9v dCB2YWx1ZTogNXggcmVwbGljYXRpb24gZGVsYXkgKi8KKwkJMS4wLCAxMDAuMCwJCQkJLyogbWlu LCBtYXggKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJr ZXIgKi8KIAlFTVBUWV9DT05GSUdfRE9VQkxFCiB9OwpAQCAtMjM1NSw2ICsyMzY3LDYxIEBAIHN0 YXRpYyBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbiIsIENGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiRHVyYXRp b24gaW4gbWlsbGlzZWNvbmRzIHRvIGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19V TklUX01TCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRf c3RhcnRfZHVyYXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAs CQkJCS8qIDAgdG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsK KwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExP QURfQkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sg dGFibGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0s CisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJ CTEwMjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsi dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFO Q0VfQ09ORklHLAorCQkJIk1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdHJhY2sgdGFibGUg bXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZn X3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUsCisJCTIwNDgsCisJ CTEyOCwgMTMxMDcyLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190 YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5DRV9D T05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2FjaGUu IiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29u ZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0LCA2 NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0 YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFOQ0Vf Q09ORklHLAorCQkJIk1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlcnkgcGFyc2UgY2Fj aGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xf Y29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUsCisJCTEw MDAwLAorCQkxMDAsIDEwMDAwMDAsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJLyogRW5k LW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0lOVAogfTsKZGlmZiAtLWdpdCBhL3Ny Yy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9j b250ZXh0LmMKaW5kZXggN2NmOTgxM2ViN2Q1ODY3OGJjODZhMGFhYTM4YmQzYzY0NDViNjY4Ny4u YWExMjMyMjJlY2NhYTg1MDVmOTg0ZGJlMzIyNDk1OGZjNzk0MjRjOCAxMDA2NDQKLS0tIGEvc3Jj L2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVy eV9jb250ZXh0LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zdGF0aXN0aWNz LmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmgiCiAjaW5jbHVkZSAidXRp bHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uLmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1 ZGUgImNvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVz LmgiCkBAIC0xODI4LDcgKzE4MjksNyBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUsIExpc3QgKmxp c3QpCiBzdGF0aWMgYm9vbAogaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9k ZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8IHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkUp CisJaWYgKG5vZGUgPT0gTlVMTCB8fCAhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlm IChJc0Eobm9kZSwgUmFuZ2VWYXIpKQpAQCAtMTgzNiw3ICsxODM3LDcgQEAgaXNfc2VsZWN0X29i amVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJUmFu Z2VWYXIgICAqcmd2ID0gKFJhbmdlVmFyICopIG5vZGU7CiAJCVBPT0xfU0VTU0lPTl9DT05URVhU ICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOwogCi0J CWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1df RE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCisJCWlm IChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlKSAmJiBzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQogCQl7CiAJ CQllcmVwb3J0KERFQlVHMSwKIAkJCQkJKGVycm1zZygiaXNfc2VsZWN0X29iamVjdF9pbl90ZW1w X3dyaXRlX2xpc3Q6IFwiJXNcIiwgZm91bmQgcmVsYXRpb24gXCIlc1wiIiwgKGNoYXIgKikgY29u dGV4dCwgcmd2LT5yZWxuYW1lKSkpOwpAQCAtMTg4MCw3ICsxODgxLDcgQEAgc3RhdGljIGNoYXIg KmdldF9hc3NvY2lhdGVkX29iamVjdF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKIHZvaWQK IGNoZWNrX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdChjaGFyICpuYW1lLCBib29sIGlzX2Z1bmNf bmFtZSkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2 ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHBvb2xfY29uZmln LT5wYXJzZWRfZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKIAl7CiAJCVBP T0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2Nv bnRleHQoZmFsc2UpOwogCkBAIC0xOTQ0LDcgKzE5NDUsNyBAQCBhZGRfb2JqZWN0X2ludG9fdGVt cF93cml0ZV9saXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiBzdGF0aWMgdm9pZAogZG1s X2FkYXB0aXZlKE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogewotCWlmIChwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlm IChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlKSkKIAl7CiAJCS8qIFNldC9VbnNldCB0cmFuc2FjdGlvbiBzdGF0dXMgZmxhZ3Mg Ki8KIAkJaWYgKElzQShub2RlLCBUcmFuc2FjdGlvblN0bXQpKQpAQCAtMTk2Myw2ICsxOTY0LDM0 IEBAIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpxdWVyeSkKIAkJCX0KIAkJCWVsc2Ug aWYgKGlzX2NvbW1pdF9vcl9yb2xsYmFja19xdWVyeShub2RlKSkKIAkJCXsKKwkJCQkvKgorCQkJ CSAqIEZvciBkbWxfYWRhcHRpdmVfZ2xvYmFsOiBvbiBDT01NSVQsIGZsdXNoIHRoZSBhY2N1bXVs YXRlZAorCQkJCSAqIHRhYmxlIHdyaXRlcyB0byBzaGFyZWQgbWVtb3J5LiBPbiBST0xMQkFDSywg c2tpcCDigJQgdGhlCisJCQkJICogd3JpdGVzIG5ldmVyIGNvbW1pdHRlZCBzbyBubyBzdGFsZS1y ZWFkIHJpc2sgZXhpc3RzLgorCQkJCSAqIFRoaXMgcHJldmVudHMgYXR0YWNrZXJzIGZyb20gcG9s bHV0aW5nIHRoZSB0YWJsZSBtYXAgd2l0aAorCQkJCSAqIHJvbGxlZC1iYWNrIHRyYW5zYWN0aW9u cy4KKwkJCQkgKi8KKwkJCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJCQkJaXNfY29tbWl0X3F1 ZXJ5KG5vZGUpICYmCisJCQkJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0 ZV9saXN0ICE9IE5JTCkKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQkJCWludAkJ CWRib2lkOworCisJCQkJCWRib2lkID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkKCk7CisJCQkJCWlmIChkYm9pZCA+IDApCisJCQkJCXsKKwkJCQkJCWZvcmVhY2go Y2VsbCwgc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QpCisJCQkJ CQl7CisJCQkJCQkJY2hhcgkgICAqdGFibGVfbmFtZSA9IChjaGFyICopIGxmaXJzdChjZWxsKTsK KwkJCQkJCQlpbnQJCQl0YWJsZV9vaWQgPSBwb29sX3RhYmxlX25hbWVfdG9fb2lkKHRhYmxlX25h bWUpOworCisJCQkJCQkJaWYgKHRhYmxlX29pZCA+IDApCisJCQkJCQkJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fbWFya190YWJsZV93cml0dGVuKHRhYmxlX29pZCwgZGJvaWQpOworCQkJCQkJ fQorCQkJCQl9CisJCQkJfQorCiAJCQkJc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2FjdGlv biA9IGZhbHNlOwogCiAJCQkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93 cml0ZV9saXN0ICE9IE5JTCkKQEAgLTIwMTAsNiArMjAzOSwxOCBAQCB3aGVyZV90b19zZW5kX21h aW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5 LCBOb2RlCiAJaWYgKGRlc3QgPT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90 b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICog UmVzb2x2ZSB0YWJsZSBhbmQgZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUu CisJCSAqIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hl cmUgd2Ugc2hvdWxkbid0CisJCSAqIGJlIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUg YmFja2VuZC4KKwkJICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJeworCQkJaW50ICpvaWRz OworCQkJcG9vbF9leHRyYWN0X3RhYmxlX29pZHMobm9kZSwgJm9pZHMpOworCQkJcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCX0KIAl9CiAJLyogU2hvdWxk IGJlIHNlbnQgdG8gYm90aCBwcmltYXJ5IGFuZCBzdGFuZGJ5PyAqLwogCWVsc2UgaWYgKGRlc3Qg PT0gUE9PTF9CT1RIKQpAQCAtMjEzOSw2ICsyMTgwLDEwNyBAQCB3aGVyZV90b19zZW5kX21haW5f cmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBO b2RlCiAJCQkJewogCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwg UFJJTUFSWV9OT0RFX0lEKTsKIAkJCQl9CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0cmFjayB0YWJs ZSBtdXRhdGlvbiBmb3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuCisJCQkJICogSWYgaW4gY29s ZCBzdGFydCBvciBhbnkgdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4sCisJCQkJICogcm91dGUg dG8gcHJpbWFyeSB0byBhdm9pZCBzdGFsZSByZWFkcy4KKwkJCQkgKi8KKwkJCQllbHNlIGlmIChw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FE QVBUSVZFX0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJCWZvcmNlX3ByaW1hcnkgPSBmYWxzZTsK KworCQkJCQkvKiBEdXJpbmcgY29sZCBzdGFydCwgcm91dGUgZXZlcnl0aGluZyB0byBwcmltYXJ5 ICovCisJCQkJCWlmIChwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQoKSkK KwkJCQkJeworCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCShlcnJtc2coImNvdWxkIG5v dCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0 IiksCisJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uID0gUFJJTUFSWSBmb3IgcXVlcnk9 IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCS8qIEV4dHJhY3QgdGFibGUgb2lkcyBhbmQgY2hlY2sg aWYgYW55IGFyZSBzdGFsZSAqLworCQkJCQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJCQkJaW50CQkJ ZGJvaWQ7CisJCQkJCWludAkJCW51bV9vaWRzOworCQkJCQlpbnQJCQlpOworCisJCQkJCW1lbXNl dCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7CisJCQkJCW51bV9vaWRzID0gcG9vbF9leHRyYWN0X3Rh YmxlX29pZHNfZnJvbV9zZWxlY3Rfc3RtdChub2RlLCAmY3R4KTsKKwkJCQkJaWYgKG51bV9vaWRz ID4gMCkKKwkJCQkJeworCQkJCQkJZGJvaWQgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dl dF9kYXRhYmFzZV9vaWQoKTsKKworCQkJCQkJaWYgKGRib2lkIDw9IDApCisJCQkJCQl7CisJCQkJ CQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2UgZGF0YWJhc2Ugb2lkIHdhcyB1bmF2YWlsYWJsZSIpLAorCQkJCQkJCQkJIGVy cmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkp KSk7CisJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQl9CisJCQkJCQllbHNlCisJ CQkJCQl7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBpKyspCisJCQkJCQkJewor CQkJCQkJCQlpZiAocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZShjdHgu dGFibGVfb2lkc1tpXSwgZGJvaWQpKQorCQkJCQkJCQl7CisJCQkJCQkJCQllcmVwb3J0KERFQlVH MSwKKwkJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRh YmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRlbiIsCisJCQkJCQkJCQkJCQkJY3R4LnRhYmxl X25hbWVzW2ldKSwKKwkJCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZ IGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkpKSk7CisJCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0g dHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJ CQl9CisJCQkJfQorCisJCQkJCWlmIChmb3JjZV9wcmltYXJ5KQorCQkJCQl7CisJCQkJCQlwb29s X3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKwkJ CQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIFByb2NlZWQgd2l0aCBsb2FkIGJhbGFu Y2luZyAqLworCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxh bmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQgPSBzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOworCQkJCQkJfQorCisJCQkJCQkvKgor CQkJCQkJICogQXMgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHRvbyBtdWNoLCBpZgor CQkJCQkJICogcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgdHJ1ZSB0aGVuIGVsZWN0IG5l dyBsb2FkCisJCQkJCQkgKiBiYWxhbmNlIG5vZGUgd2hpY2ggaXMgbG93ZXN0IGRlbGF5ZWQsIGZh bHNlIHRoZW4gc2VuZAorCQkJCQkJICogdG8gdGhlIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJ CWlmIChTVFJFQU0gJiYgY2hlY2tfcmVwbGljYXRpb25fZGVsYXkoc2Vzc2lvbl9jb250ZXh0LT5s b2FkX2JhbGFuY2Vfbm9kZV9pZCkpCisJCQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJ CQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdG9vIG11 Y2ggcmVwbGljYXRpb24gZGVsYXkiKSwKKwkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9u ID0gJWQgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBkZXN0LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChw b29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJ CQlpbnQJCQluZXdfbG9hZF9iYWxhbmNpbmdfbm9kZSA9IHNlbGVjdF9sb2FkX2JhbGFuY2luZ19u b2RlKCk7CisKKwkJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9 IG5ld19sb2FkX2JhbGFuY2luZ19ub2RlOworCQkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5 X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2Jh bGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2Nv bnRleHQsIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwb29sX3NldF9u b2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9 CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5x dWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9IHNlc3Npb25fY29udGV4dC0+bG9h ZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5 X2NvbnRleHQsCisJCQkJCQkJCQkJCQkJIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+ bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJCWVsc2UK IAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5j ZSkKZGlmZiAtLWdpdCBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgYi9zcmMv Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCmluZGV4IGRlZDQxYzdmYzY0Y2ViYTFkMWZh ZmQ2ZjRhOWYxMGE3NTA4NzIzNzQuLmE5NTk2NTYxYTdlMDI2NWU5MjhiOTU3YTI3NjZmNDZmYjRl OWViYWEgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysr IGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwpAQCAtNTMyLDcgKzUzMiw3IEBA IGR1bXBfc2VudF9tZXNzYWdlKGNoYXIgKmNhbGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBz dGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlp ZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSkpCiAJewogCQlzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0g ZmFsc2U7CiAJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0g TklMOwpAQCAtNTQyLDcgKzU0Miw3IEBAIGRtbF9hZGFwdGl2ZV9pbml0KHZvaWQpCiBzdGF0aWMg dm9pZAogZG1sX2FkYXB0aXZlX2Rlc3Ryb3kodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRp c2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNz aW9uX2NvbnRleHQpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHNlc3Npb25fY29udGV4dCkKIAl7CiAJCWlm IChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCiAJ CQlsaXN0X2ZyZWVfZGVlcChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVf bGlzdCk7CkBAIC03MzgsMTAgKzczOCwxMCBAQCB2b2lkCiBwb29sX3NldF93cml0aW5nX3RyYW5z YWN0aW9uKHZvaWQpCiB7CiAJLyoKLQkgKiBJZiBkaXNhYmxlX3RyYW5zYWN0aW9uX29uX3dyaXRl IGlzICdvZmYnIG9yICdkbWxfYWRhcHRpdmUnLCB0aGVuIG5ldmVyCi0JICogdHVybiBvbiB3cml0 aW5nIHRyYW5zYWN0aW9uIGZsYWcuCisJICogSWYgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgaXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2ZScgb3IKKwkgKiAnZG1sX2FkYXB0aXZlX2dsb2Jh bCcsIHRoZW4gbmV2ZXIgdHVybiBvbiB3cml0aW5nIHRyYW5zYWN0aW9uIGZsYWcuCiAJICovCi0J aWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19P RkYgJiYgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9X X0RNTF9BREFQVElWRSkKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlICE9IERMQk9XX09GRiAmJiAhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQlwb29sX2dldF9zZXNzaW9u X2NvbnRleHQoZmFsc2UpLT53cml0aW5nX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIAkJZXJlcG9ydChE RUJVRzUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sLmggYi9zcmMvaW5jbHVkZS9wb29s LmgKaW5kZXggZWE2Zjg3ZTEyMGFmODY2YjhlZDNhMTU3OTBkOWQ4YThlMDA5ZmU5MS4uNzE2OGMx YWVhODc3ODU2YjU5NzhkZTMzMmFkNjM2MzI1ZWI5YzMwYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcgKzQyNCw3IEBAIHR5 cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCiAK IAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFYX05VTV9TRU1BUEhP UkVTCQkxMAogI2RlZmluZSBDT05OX0NPVU5URVJfU0VNCQkwCiAjZGVmaW5lIFJFUVVFU1RfSU5G T19TRU0JCTEKICNkZWZpbmUgUVVFUllfQ0FDSEVfU1RBVFNfU0VNCTIKQEAgLTQzNCw2ICs0MzQs OCBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgRk9MTE9XX1BSSU1BUllfU0VNCQk2CiAjZGVmaW5l IE1BSU5fRVhJVF9IQU5ETEVSX1NFTQk3CS8qIHVzZWQgaW4gZXhpdF9oYW5kZXIgaW4gcGdwb29s IG1haW4KIAkJCQkJCQkJCSAqIHByb2Nlc3MgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJ T05fVEFCTEVfU0VNCTgKKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fUVVFUllfU0VNCTkK ICNkZWZpbmUgTUFYX1JFUVVFU1RfUVVFVUVfU0laRQkxMAogCiAjZGVmaW5lIE1BWF9TRUNfV0FJ VF9GT1JfQ0xVU1RFUl9UUkFOU0FDVElPTiAxMCAvKiB0aW1lIGluIHNlY29uZHMgdG8ga2VlcApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBiL3NyYy9pbmNsdWRlL3Bvb2xf Y29uZmlnLmgKaW5kZXggNzQxZGU2Y2M1ZmMzMzY4ZjgxM2Q2YjZlZmE2OGViN2Y4YTc5NTA2Yi4u ODc5OGI4NmViMzYyMGFiMzZiZTczM2JiNjBiYmI4NDY0YjAwNjNjOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCkBA IC0xMDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJPV19PUFRJT04KIAlETEJPV19UUkFO U0FDVElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwKIAlETEJPV19BTFdBWVMsCi0JRExC T1dfRE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZFLAorCURMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5lIERMQk9XX0lTX0RNTF9BREFQVElW RShvcHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBUSVZFIHx8IChvcHQpID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51bSBSRUxRVEFSR0VUX09QVElPTgog ewogCVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjUsNiArMzY5LDE1IEBAIHR5cGVkZWYg c3RydWN0CiAJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBjaGVjayAqLwogCWNoYXIJICAgKnJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNvbW1hbmQgZm9yIHJlcGxpY2F0 aW9uIGRlbGF5ICovCiAJaW50CQkJcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8q IHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1hbmQgaW4gc2Vjb25kcyAqLworCisJLyogVHJhY2sg dGFibGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiBmb3IgdHJhY2tpbmcgcmVjZW50bHkgd3JpdHRl biB0YWJsZXMgKi8KKwlkb3VibGUJCXRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I7CQkv KiBUVEwgbXVsdGlwbGllciBmb3IgcmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190 YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOwkvKiBDb2xkIHN0YXJ0IGR1cmF0aW9u IGluIG1zICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsJLyog TnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGFibGUgbWFwICovCisJaW50CQkJdHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfc2l6ZTsJCS8qIE1heCBlbnRyaWVzIGluIHRhYmxlIG1hcCAqLwor CWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM7CS8qIE51bWJlciBvZiBo YXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IGNhY2hlICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRp b25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsJLyogTWF4IGVudHJpZXMgaW4gcXVlcnkgcGFyc2Ug Y2FjaGUgKi8KKwogCWNoYXIJICAgKmZhaWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFu ZCB3aGVuIGZhaWxvdmVyIGhhcHBlbnMgKi8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21t YW5kOyAvKiBleGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVu ZGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uNWNkNWQ0ZWY0MDk2NDVmZTc3ZTNiYjAyMjM5ZTE0MDQ1NmRlMDU1NAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b24uaApAQCAtMCwwICsxLDIzNyBAQAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9v bDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0 Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykg MjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu ZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBp cyBoZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9y dGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBu b3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICog ZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHBy aW9yCisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBh Ym91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl LiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQg d2FycmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oOiBJbi1tZW1vcnkg dHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMKKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2FzIGR1cmluZyByZXBs aWNhdGlvbiBsYWcKKyAqLworCisjaWZuZGVmIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSAor I2RlZmluZSBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKworI2luY2x1ZGUgInBvb2wuaCIK KyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKgorICogTWF4aW11bSB0YWJsZSBuYW1lIGxlbmd0 aCBpbmNsdWRpbmcgc2NoZW1hOiAic2NoZW1hIi4idGFibGUiCisgKiBVc2luZyBOQU1FREFUQUxF TiAqIDIgKyA0IGZvciBxdW90ZXMgYW5kIGRvdAorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01V VEFUSU9OX1RBQkxFX05BTUVfTEVOCShOQU1FREFUQUxFTiAqIDIgKyA0KQorCisvKgorICogTWF4 aW11bSBudW1iZXIgb2YgdGFibGVzIHdlIHRyYWNrIHBlciBxdWVyeQorICovCisjZGVmaW5lIFRS QUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZCTgKKworLyoKKyAqIEludmFs aWQgaW5kZXggbWFya2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRMIGluIG1p Y3Jvc2Vjb25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1bmtub3du CisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJKDEwMCAq IDEwMDApCisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAo a2V5ZWQgYnkgdGFibGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tU YWJsZU11dGF0aW9uRW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkJCS8qIFRhYmxlIG9pZCAq LworCWludAkJCWRib2lkOwkJCQkJLyogRGF0YWJhc2Ugb2lkICovCisJc3RydWN0IHRpbWV2YWwg bGFzdF93cml0ZV90aW1lOwkJLyogV2hlbiB0aGUgdGFibGUgd2FzIGxhc3Qgd3JpdHRlbiAqLwor CXVpbnQzMgkJaGFzaDsJCQkJCS8qIFByZS1jb21wdXRlZCBoYXNoIHZhbHVlICovCisJaW50CQkJ bmV4dDsJCQkJCS8qIE5leHQgZW50cnkgaW4gY29sbGlzaW9uIGNoYWluICgtMSBpZiBub25lKSAq LworCWJvb2wJCWluX3VzZTsJCQkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBUcmFj a1RhYmxlTXV0YXRpb25FbnRyeTsKKworLyoKKyAqIEhlYWRlciBmb3IgdGhlIHRhYmxlIG11dGF0 aW9uIGhhc2ggdGFibGUgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFj a1RhYmxlTXV0YXRpb25IYXNoVGFibGUKK3sKKwlpbnQJCQludW1fYnVja2V0czsJCS8qIE51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJCS8qIE1heGltdW0gZW50 cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBDdXJyZW50IG51bWJlciBv ZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBIZWFkIG9mIGZyZWUgZW50 cnkgbGlzdCAqLworCS8qIEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBt ZW1vcnk6CisJICogaW50IGJ1Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFRyYWNrVGFibGVNdXRh dGlvbkVudHJ5IGVudHJpZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRp b25IYXNoVGFibGU7CisKKy8qCisgKiBFbnRyeSBpbiB0aGUgcXVlcnkgcGFyc2UgY2FjaGUKKyAq LwordHlwZWRlZiBzdHJ1Y3QgUXVlcnlQYXJzZUVudHJ5Cit7CisJdWludDY0CQlxdWVyeV9oYXNo OwkJCS8qIEhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeSAqLworCWJvb2wJCWlzX3dyaXRlOwkJCS8q IFRydWUgaWYgSU5TRVJUL1VQREFURS9ERUxFVEUgKi8KKwlpbnQJCQludW1fdGFibGVzOwkJCS8q IE51bWJlciBvZiB0YWJsZXMgaW4gcXVlcnkgKi8KKwljaGFyCQl0YWJsZV9uYW1lc1tUUkFDS19U QUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWV1bVFJBQ0tfVEFCTEVfTVVUQVRJT05f VEFCTEVfTkFNRV9MRU5dOworCWludAkJCW5leHQ7CQkJCS8qIE5leHQgZW50cnkgaW4gY29sbGlz aW9uIGNoYWluICovCisJaW50CQkJbHJ1X3ByZXY7CQkJLyogUHJldmlvdXMgaW4gTFJVIGxpc3Qg Ki8KKwlpbnQJCQlscnVfbmV4dDsJCQkvKiBOZXh0IGluIExSVSBsaXN0ICovCisJYm9vbAkJaW5f dXNlOwkJCQkvKiBJcyB0aGlzIGVudHJ5IGluIHVzZT8gKi8KK30gUXVlcnlQYXJzZUVudHJ5Owor CisvKgorICogSGVhZGVyIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9y eQorICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlQ2FjaGUKK3sKKwlpbnQJCQludW1fYnVj a2V0czsJCS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJ CS8qIE1heGltdW0gZW50cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBD dXJyZW50IG51bWJlciBvZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBI ZWFkIG9mIGZyZWUgZW50cnkgbGlzdCAqLworCWludAkJCWxydV9oZWFkOwkJCS8qIE1vc3QgcmVj ZW50bHkgdXNlZCAqLworCWludAkJCWxydV90YWlsOwkJCS8qIExlYXN0IHJlY2VudGx5IHVzZWQg Ki8KKwkvKiBGbGV4aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFyZWQgbWVtb3J5Ogor CSAqIGludCBidWNrZXRzW251bV9idWNrZXRzXTsKKwkgKiBRdWVyeVBhcnNlRW50cnkgZW50cmll c1ttYXhfZW50cmllc107CisJICovCit9IFF1ZXJ5UGFyc2VDYWNoZTsKKworLyoKKyAqIEdsb2Jh bCBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZQorICovCit0eXBlZGVmIHN0 cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZQoreworCWJvb2wJCWluaXRpYWxpemVkOwkJCS8q IEhhcyBzaGFyZWQgbWVtb3J5IGJlZW4gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50 X3R0bF91czsJCQkvKiBDdXJyZW50IFRUTCBpbiBtaWNyb3NlY29uZHMgKi8KKwlzdHJ1Y3QgdGlt ZXZhbCB0dGxfbGFzdF91cGRhdGVkOwkvKiBXaGVuIFRUTCB3YXMgbGFzdCB1cGRhdGVkICovCisJ c3RydWN0IHRpbWV2YWwgbGFzdF9jbGVhbnVwX3RpbWU7CS8qIFdoZW4gbGFzdCBleHBpcmVkIGNs ZWFudXAgcmFuICovCisJc3RydWN0IHRpbWV2YWwgZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWw7CS8q IEdsb2JhbCBjb2xkIHN0YXJ0IGVuZCB0aW1lICovCisJdm9sYXRpbGUgdWludDMyIHN0YXRzX3F1 ZXJpZXNfY2hlY2tlZDsJLyogTnVtYmVyIG9mIHF1ZXJpZXMgY2hlY2tlZCAqLworCXZvbGF0aWxl IHVpbnQzMiBzdGF0c19mb3JjZWRfcHJpbWFyeTsJCS8qIFF1ZXJpZXMgZm9yY2VkIHRvIHByaW1h cnkgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNfYWxsb3dlZF9yZXBsaWNhOwkvKiBRdWVyaWVz IGFsbG93ZWQgdG8gcmVwbGljYSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZTsKKworLyoK KyAqIE1haW4gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgY29tcG9uZW50 cworICovCit0eXBlZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TaG1lbQoreworCVRyYWNr VGFibGVNdXRhdGlvblN0YXRlCXN0YXRlOworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQkq dGFibGVfbWFwOworCVF1ZXJ5UGFyc2VDYWNoZQkJKnF1ZXJ5X2NhY2hlOworfSBUcmFja1RhYmxl TXV0YXRpb25TaG1lbTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBmdW5j dGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzaGFy ZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVk IGZyb20gcGdwb29sX21haW4uYyBhZnRlciBwb29sX2luaXRfcG9vbF9pbmZvKCkuCisgKi8KK2V4 dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCh2b2lkKTsKKworLyoKKyAq IEluaXRpYWxpemUgcGVyLWNoaWxkIHByb2Nlc3Mgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0 aW9uLgorICogQ2FsbGVkIGZyb20gY2hpbGQuYyB3aGVuIGEgbmV3IGNoaWxkIHByb2Nlc3Mgc3Rh cnRzLgorICogU2V0cyB1cCBjb2xkIHN0YXJ0IHRyYWNraW5nLgorICovCitleHRlcm4gdm9pZCBw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCk7CisKKy8qCisgKiBDaGVj ayBpZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBpbiBjb2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmlu ZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBhcmUgcm91dGVkIHRvIHByaW1hcnkuCisgKiBSZXR1 cm5zIHRydWUgaWYgaW4gY29sZCBzdGFydCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4g Ym9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCk7CisKKy8q CisgKiBUcmlnZ2VyIGEgZ2xvYmFsIGNvbGQgc3RhcnQgcGVyaW9kIGZvciBhbGwgcHJvY2Vzc2Vz LgorICogVXNlZCBhZnRlciB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGF2b2lkIHN0YWxlIHJl YWRzLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJf Z2xvYmFsX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBHZXQgb2lkIG9mIGN1cnJlbnQgZGF0 YWJhc2UuCisgKi8KK2V4dGVybiBpbnQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkKHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgYSB0YWJsZSB3YXMgcmVjZW50bHkg d3JpdHRlbiB0byAoaXMgInN0YWxlIikuCisgKiBJZiBzdGFsZSwgcmVhZHMgZnJvbSB0aGlzIHRh YmxlIHNob3VsZCBnbyB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIHRhYmxlIGlzIHN0 YWxlIChyZWNlbnRseSB3cml0dGVuKSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9v bCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKGludCB0YWJsZV9vaWQs IGludCBkYm9pZCk7CisKKy8qCisgKiBNYXJrIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgor ICogQ2FsbGVkIGFmdGVyIElOU0VSVC9VUERBVEUvREVMRVRFIHF1ZXJpZXMgY29tcGxldGUuCisg KiB0YWJsZV9vaWRzOiBhcnJheSBvZiB0YWJsZSBvaWRzCisgKiBudW1fdGFibGVzOiBudW1iZXIg b2YgdGFibGVzIGluIGFycmF5CisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8KK2V4dGVybiB2 b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbihjb25zdCBp bnQgKnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpOworCisvKgorICogQ29u dmVuaWVuY2UgZnVuY3Rpb24gdG8gbWFyayBhIHNpbmdsZSB0YWJsZSBhcyB3cml0dGVuLgorICog dGFibGVfb2lkOiB0YWJsZSBvaWQKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJu IHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oaW50IHRh YmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIFVwZGF0ZSB0aGUgVFRMIGJhc2VkIG9uIGN1 cnJlbnQgcmVwbGljYXRpb24gZGVsYXkuCisgKiBDYWxsZWQgZnJvbSBwb29sX3dvcmtlcl9jaGls ZC5jIHdoZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdXBkYXRlZC4KKyAqIGRlbGF5X3VzOiByZXBs aWNhdGlvbiBkZWxheSBpbiBtaWNyb3NlY29uZHMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cyk7CisKKy8qCisgKiBM b29rIHVwIGNhY2hlZCBwYXJzZSByZXN1bHQgZm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9m IG5vcm1hbGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiBvdXRwdXQgLSB0cnVlIGlmIHF1ZXJ5IGlz IGEgd3JpdGUKKyAqIHRhYmxlX25hbWVzOiBvdXRwdXQgLSBhcnJheSB0byBmaWxsIHdpdGggdGFi bGUgbmFtZXMKKyAqIG51bV90YWJsZXM6IG91dHB1dCAtIG51bWJlciBvZiB0YWJsZXMgZm91bmQK KyAqIFJldHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiBjYWNoZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICov CitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9jYWNoZWRfcGFyc2Uo dWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkJCQkgY2hhciB0YWJsZV9uYW1l c1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJCQkJIGlu dCAqbnVtX3RhYmxlcyk7CisKKy8qCisgKiBDYWNoZSBhIHBhcnNlIHJlc3VsdCBmb3IgYSBxdWVy eS4KKyAqIGhhc2g6IGhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeQorICogaXNfd3JpdGU6IHRydWUg aWYgcXVlcnkgaXMgYSB3cml0ZQorICogdGFibGVfbmFtZXM6IGFycmF5IG9mIHRhYmxlIG5hbWVz CisgKiBudW1fdGFibGVzOiBudW1iZXIgb2YgdGFibGVzCisgKi8KK2V4dGVybiB2b2lkIHBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25fY2FjaGVfcGFyc2UodWludDY0IGhhc2gsIGJvb2wgaXNfd3Jp dGUsCisJCQkJCQkJCQkJY29uc3QgY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJCQlpbnQgbnVtX3RhYmxlcyk7CisKKy8qCisg KiBOb3JtYWxpemUgYSBxdWVyeSBhbmQgY29tcHV0ZSBpdHMgaGFzaC4KKyAqIFN0cmlwcyBjb21t ZW50cywgbm9ybWFsaXplcyB3aGl0ZXNwYWNlIGFuZCBsaXRlcmFscy4KKyAqIHF1ZXJ5OiBpbnB1 dCBTUUwgcXVlcnkgc3RyaW5nCisgKiBSZXR1cm5zOiA2NC1iaXQgaGFzaCBvZiBub3JtYWxpemVk IHF1ZXJ5CisgKi8KK2V4dGVybiB1aW50NjQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9ub3Jt YWxpemVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkpOworCisvKgorICogQ2FsY3VsYXRlIHJl cXVpcmVkIHNoYXJlZCBtZW1vcnkgc2l6ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKi8K K2V4dGVybiBTaXplIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSh2b2lkKTsK KworI2VuZGlmIC8qIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL21haW4vcGdwb29sX21haW4uYyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKaW5kZXggZmEw NWUxNWU3YWM0MzVlMDcyMjk4MDYzZjkxOGM3MGFhNGU1NjgwYy4uYjg4YjA0NzhjYjE1MGY4OWJk OWI2YjhhYjM4ZGIwZDY5MTJmZGRkMCAxMDA2NDQKLS0tIGEvc3JjL21haW4vcGdwb29sX21haW4u YworKysgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVk ZSAiYXV0aC9wb29sX3Bhc3N3ZC5oIgogI2luY2x1ZGUgImF1dGgvcG9vbF9oYmEuaCIKICNpbmNs dWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xf dHJhY2tfdGFibGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJ3YXRjaGRvZy93ZF9pbnRlcm5hbF9j b21tYW5kcy5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2xpZmVjaGVjay5oIgogI2luY2x1ZGUg IndhdGNoZG9nL3dhdGNoZG9nLmgiCkBAIC0xNDg1LDExICsxNDg2LDE0IEBAIHNpZ3VzcjFfaW50 ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCiAJaWYgKHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxh Z3NbU0lHX1dBVENIRE9HX1NUQVRFX0NIQU5HRURdKQogCXsKKwkJV0RfU1RBVEVTCXdkX3N0YXRl OworCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIlBncG9vbC1JSSBwYXJlbnQgcHJvY2Vz cyByZWNlaXZlZCB3YXRjaGRvZyBzdGF0ZSBjaGFuZ2Ugc2lnbmFsIGZyb20gd2F0Y2hkb2ciKSkp OwogCiAJCXVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX1dBVENIRE9HX1NUQVRFX0NI QU5HRURdID0gZmFsc2U7Ci0JCWlmICh3ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9jYWxfbm9k ZV9zdGF0ZSgpID09IFdEX1NUQU5EQlkpCisJCXdkX3N0YXRlID0gd2RfaW50ZXJuYWxfZ2V0X3dh dGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKTsKKwkJaWYgKHdkX3N0YXRlID09IFdEX1NUQU5EQlkp CiAJCXsKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJybXNnKCJ3ZSBoYXZlIGpvaW5lZCB0aGUg d2F0Y2hkb2cgY2x1c3RlciBhcyBTVEFOREJZIG5vZGUiKSwKQEAgLTE1MDMsNiArMTUwNywxMCBA QCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkKIAkJCSAqLwogCQkJcG9vbF9yZWxl YXNlX2ZvbGxvd19wcmltYXJ5X2xvY2sodHJ1ZSk7CiAJCX0KKwkJZWxzZSBpZiAod2Rfc3RhdGUg PT0gV0RfQ09PUkRJTkFUT1IgJiYgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCXsKKwkJCXBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9iYWxfY29sZF9zdGFydCgpOworCQl9CiAJfQogCWlm ICh1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZsYWdzW1NJR19GQUlMT1ZFUl9JTlRFUlJVUFRdKQog CXsKQEAgLTMwNjgsNiArMzA3NiwxMiBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0cyhi b29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCWVsb2coREVCVUcxLCAid2F0Y2hkb2c6ICV6 dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJlZCBtZW1vcnkiLCBNQVhBTElHTih3ZF9pcGNfZ2V0 X3NoYXJlZF9tZW1fc2l6ZSgpKSk7CiAJfQogCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJ c2l6ZSArPSBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKSk7 CisJCWVsb2coREVCVUcxLCAidHJhY2tfdGFibGVfbXV0YXRpb246ICV6dSBieXRlcyByZXF1ZXN0 ZWQgZm9yIHNoYXJlZCBtZW1vcnkiLCBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtX3NpemUoKSkpOworCX0KKwogCWluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3Nl Z21lbnQoc2l6ZSk7CiAKIAkvKiBNb3ZlIHRoZSBiYWNrZW5kIGRlc2NyaXB0b3JzIHRvIHNoYXJl ZCBtZW1vcnkgKi8KQEAgLTMxODQsNiArMzE5OCwxMiBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1f b2JqZWN0cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCXdkX2lwY19pbml0aWFsaXpl X2RhdGEoKTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZvciB0 cmFja2luZyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyAqLworCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkK Kwl7CisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCgpOworCX0KKwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jIGIvc3JjL3Byb3RvY29s L0NvbW1hbmRDb21wbGV0ZS5jCmluZGV4IGEzYjhmMGVhMTk0ZmZlY2M3OWU1ODU2NmJlODA1NjJh NDZlYjc1YWIuLmIxNWRiNTMyNDg0MzNjYjMxMTIyNDYyNzRlZDc3MWI3OWFiZTEzOTIgMTAwNjQ0 Ci0tLSBhL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYworKysgYi9zcmMvcHJvdG9jb2wv Q29tbWFuZENvbXBsZXRlLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJ1dGlscy9wYWxs b2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xf c3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgor I2luY2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCiAKIHN0YXRpYyBpbnQJZXh0 cmFjdF9udHVwbGVzKGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIFBPT0xfU1RBVFVTIGhhbmRsZV9t aXNtYXRjaF90dXBsZXMoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9O X1BPT0wgKmJhY2tlbmQsIGNoYXIgKnBhY2tldCwgaW50IHBhY2tldGxlbiwgYm9vbCBjb21tYW5k X2NvbXBsZXRlKTsKQEAgLTMwNCw2ICszMDYsMjkgQEAgaGFuZGxlX3F1ZXJ5X2NvbnRleHQoUE9P TF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQpCiAKIAlub2RlID0gc2Vzc2lvbl9jb250ZXh0LT5x dWVyeV9jb250ZXh0LT5wYXJzZV90cmVlOwogCisJLyoKKwkgKiBUcmFjayB0YWJsZSB3cml0ZXMg Zm9yIGRtbF9hZGFwdGl2ZV9nbG9iYWwgZmVhdHVyZS4KKwkgKiBGb3IgYXV0b2NvbW1pdCBzdGF0 ZW1lbnRzIChub3QgaW4gZXhwbGljaXQgdHJhbnNhY3Rpb24pLCBtYXJrIHRhYmxlcworCSAqIGlt bWVkaWF0ZWx5LiBGb3IgZXhwbGljaXQgdHJhbnNhY3Rpb25zLCBtYXJraW5nIGlzIGRlZmVycmVk IHRvIENPTU1JVAorCSAqIGluIGRtbF9hZGFwdGl2ZSgpIHNvIHRoYXQgUk9MTEJBQ0tlZCB3cml0 ZXMgZG9uJ3QgcG9sbHV0ZSB0aGUgc2hhcmVkCisJICogbWVtb3J5IHRhYmxlIG1hcC4KKwkgKi8K KwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJbm9kZSAhPSBOVUxMICYmICFzZXNzaW9uX2NvbnRl eHQtPmlzX2luX3RyYW5zYWN0aW9uKQorCXsKKwkJaW50CQkgICAqb2lkczsKKwkJaW50CQkJbnVt X29pZHM7CisKKwkJbnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lk cyk7CisJCWlmIChudW1fb2lkcyA+IDApCisJCXsKKwkJCWludAkJCWRib2lkID0gcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisKKwkJCWlmIChkYm9pZCA+IDAp CisJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKG9pZHMs IG51bV9vaWRzLCBkYm9pZCk7CisJCX0KKwl9CisKIAlpZiAoSXNBKG5vZGUsIFByZXBhcmVTdG10 KSkKIAl7CiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPnVuY29tcGxldGVkX21lc3NhZ2UpCmRpZmYg LS1naXQgYS9zcmMvcHJvdG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCmluZGV4 IGMzNGYwNTcyODFiZTYyZmVhZjM5ZGIxYmI2MDUwNjJmNTZkYzM5OGMuLmQ1M2Y1NzE0MjE5Njhi ZDc4OWQwYjU1Zjk3ZTBhMWViNjhhODEzZTUgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGls ZC5jCisrKyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVk ZSAidXRpbHMvZWxvZy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIKICNp bmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC0yMTMsNiArMjE0LDEy IEBAIGRvX2NoaWxkKGludCAqZmRzKQogCS8qIEluaXRpYWxpemUgcGVyIHByb2Nlc3MgY29udGV4 dCAqLwogCXBvb2xfaW5pdF9wcm9jZXNzX2NvbnRleHQoKTsKIAorCS8qIEluaXRpYWxpemUgdHJh Y2sgdGFibGUgbXV0YXRpb24gY2hpbGQgc3RhdGUgZm9yIGNvbGQgc3RhcnQgdHJhY2tpbmcgKi8K KwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2No aWxkX2luaXQoKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIGNvbm5lY3Rpb24gcG9vbCAqLwogCWlm IChwb29sX2luaXRfY3AoKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9wcm90 b19tb2R1bGVzLmMgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMKaW5kZXggNDdi NWM4Zjk4YTViNGM5MmQ2NzU4NDBlZWE4OGY3ZTAzYmIxOGI0Yy4uNzVmYzc1MDg0ODBkNzlhYWNj MjgxZGQ1ZTYyNGY5ZTM0YTk5ODgzMyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL3Bvb2xfcHJv dG9fbW9kdWxlcy5jCisrKyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYwpAQCAt MTQ2MSw3ICsxNDYxLDcgQEAgUGFyc2UoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9D T05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsCiAJCXBvb2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250 ZXh0LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9xdWVyeSwKIAkJCQkJCSAgIHF1ZXJ5X2NvbnRl eHQtPnBhcnNlX3RyZWUpOwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHN0cmxlbihuYW1lKSAhPSAwKQor CQlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSkgJiYgc3RybGVuKG5hbWUpICE9IDApCiAJCQlwb29sX3NldGFsbF9ub2Rl X3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCk7CiAKIAkJaWYgKFJFUExJQ0FUSU9OKQpAQCAtMTgw NCw3ICsxODA0LDcgQEAgQmluZChQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5F Q1RJT05fUE9PTCAqYmFja2VuZCwKIAkJCXJldHVybiBQT09MX0VORDsKIAl9CiAKLQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSAmJgorCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJgogCQlUU1RBVEUoYmFja2VuZCwgTUFJTl9SRVBMSUNB ID8gUFJJTUFSWV9OT0RFX0lEIDogUkVBTF9NQUlOX05PREVfSUQpID09ICdUJykKIAl7CiAJCXBv b2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250ZXh0LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9x dWVyeSwKZGlmZiAtLWdpdCBhL3NyYy9xdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5jIGIvc3Jj L3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKaW5kZXggZjM4ZjcxMTQ2OTU3NjM0MmNlNTk0 NjliMDg1Yzk3MzY1MTE2MDA0Yy4uZGNhOTMzMzRlOWU0N2JiNzk3ODA2NGVkZWNlNWNhMGU0MDAy MWNlMyAxMDA2NDQKLS0tIGEvc3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKKysrIGIv c3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKQEAgLTEzMDUsNiArMTMwNSwxMiBAQCBw b29sX2V4dHJhY3RfdGFibGVfb2lkcyhOb2RlICpub2RlLCBpbnQgKipvaWRzcCkKIAkJfQogCQly ZXR1cm4gbnVtX29pZHM7CiAJfQorCWVsc2UgaWYgKElzQShub2RlLCBNZXJnZVN0bXQpKQorCXsK KwkJTWVyZ2VTdG10ICAqc3RtdCA9IChNZXJnZVN0bXQgKikgbm9kZTsKKworCQl0YWJsZSA9IG1h a2VfdGFibGVfbmFtZV9mcm9tX3JhbmdldmFyKHN0bXQtPnJlbGF0aW9uKTsKKwl9CiAJZWxzZSBp ZiAoSXNBKG5vZGUsIEV4cGxhaW5TdG10KSkKIAl7CiAJCUxpc3RDZWxsICAgKmNlbGw7CmRpZmYg LS1naXQgYS9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0gYi9zcmMvc2FtcGxl L3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KaW5kZXggNDU0ZmRiOWU1ZDFmZDY1NDM3YjZhNjdm MTJhYjYyNjU4ZWEwOGY0OS4uZGU5OWE3YTk3YmE0YTFhMDNjYjNkNTU4OWQ1NWVhNjFjYjZlNTFm YSAxMDA2NDQKLS0tIGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCisrKyBi L3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQpAQCAtNDc4LDYgKzQ3OCwxNCBA QCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBtb2RpZmllZCB3aXRoaW4gdGhlIGN1 cnJlbnQgZXhwbGljaXQgdHJhbnNhY3Rpb24gd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjICAgICBub3QgYmUgbG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgZW5kIG9mIHRo ZSB0cmFuc2FjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRtbF9hZGFwdGl2ZV9nbG9iYWw6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIFN1cGVyc2V0IG9mIGRtbF9h ZGFwdGl2ZS4gSW4gYWRkaXRpb24gdG8gcGVyLXRyYW5zYWN0aW9uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgICAgIHRyYWNraW5nLCB1c2VzIHNoYXJlZCBtZW1vcnkgdG8g dHJhY2sgcmVjZW50bHkgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjICAgICB0YWJsZXMgYWNyb3NzIGFsbCBzZXNzaW9ucy4gUmVhZHMgZnJvbSByZWNlbnRseSB3 cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHRhYmxlcyBh cmUgcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgICAgIHJlcGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLiBS ZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICAgICBtZW1vcnkuIFNlZSB0cmFja190YWJsZV9tdXRhdGlvbl8qIHBhcmFtZXRlcnMg YmVsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHdheXM6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgICAgIGlmIGEgd3JpdGUgcXVlcnkgaXMgaXNzdWVkLCByZWFkIHF1ZXJp ZXMgd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3QgYmUg bG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgc2Vzc2lvbiBlbmRzLgpAQCAtNDk5LDYgKzUwNyw0NiBA QCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogI3N0YXRl bWVudF9sZXZlbF9sb2FkX2JhbGFuY2UgPSBvZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBFbmFibGVzIHN0YXRlbWVudCBsZXZlbCBsb2FkIGJhbGFuY2luZwogCisjIC0g VHJhY2sgVGFibGUgTXV0YXRpb24gKHVzZWQgYnkgZG1sX2FkYXB0aXZlX2dsb2JhbCkgLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdBUk5JTkc6IGRtbF9hZGFwdGl2ZV9n bG9iYWwgaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBEZWZhdWx0IHNldHRpbmdzIHJlcXVpcmUgfjYuNCBNQiBzaGFyZWQg bWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKDAuMSBNQiB0YWJs ZSB0cmFja2luZyArIDYuMyBNQiBxdWVyeSBjYWNoZSkKKworI3RyYWNrX3RhYmxlX211dGF0aW9u X3R0bF9mYWN0b3IgPSA1LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBU VEwgbXVsdGlwbGllcjogVFRMID0gcmVwbGljYXRpb25fZGVsYXkgKiBmYWN0b3IKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBz YWZldHkgbWFyZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6 IDEuMC0xMDAuMCAoZGVmYXVsdDogNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8g cHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGNoaWxk IHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0YXJ0IHBlcmlvZCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBSYW5nZTogMC02MDAwMCBtcyAoZGVmYXVsdDogMjAwMCBtcyA9IDIg c2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8gMCB0 byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3RyYWNrX3RhYmxlX211dGF0 aW9uX3RhYmxlX2J1Y2tldHMgPSAxMDI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHJlZHVjZSBo YXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5n ZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0YXRp b25fdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sgc2ltdWx0YW5lb3VzbHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTI4LTEzMTA3MiAoZGVmYXVs dDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJl cXVpcmVzIHJlc3RhcnQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzID0g MjA0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNo IGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3Ry YWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUgPSAxMDAwMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHBh cnNlIHJlc3VsdHMgdG8gY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBSYW5nZTogMTAwLTEwMDAwMDAgKGRlZmF1bHQ6IDEwMDAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIE1lbW9yeSB1c2FnZTogfjY0MCBieXRlcyBwZXIgZW50cnkgKH42 LjMgTUIgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCiAjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAjIFNUUkVBTUlORyBSRVBMSUNBVElPTiBNT0RFCiAjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2Vy X2NoaWxkLmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMK aW5kZXggMzExYjYzODY1OGU2NmViYjU2MTYyYWQ5ZmE0MzkyMzE1YjJkZjY0ZS4uMzQ3Zjg4YTg4 Njg4MzA5YjI5ODMxMWEyODJmZTFjMWVmMmFhMGY3MyAxMDA2NDQKLS0tIGEvc3JjL3N0cmVhbWlu Z19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyBiL3NyYy9zdHJlYW1pbmdfcmVw bGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUg InV0aWxzL3Bvb2xfaXAuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRl ICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIK ICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC02OTUsNiArNjk2 LDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAlkb3VibGUJ CWRlbGF5X21zOwogCXVpbnQ2NAkJZGVsYXk7CiAJdWludDY0CQlkZWxheV90aHJlc2hvbGRfYnlf dGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7CS8qIFRyYWNrIG1heGltdW0gZGVsYXkg Zm9yIHRhYmxlIG11dGF0aW9uIG1hcCAqLwogCWludAkJCXRva2VuX2NvdW50ID0gMDsKIAlpbnQJ CQlwcmltYXJ5X25vZGVfaWQ7CiAJaW50CQkJc2F2ZV9lcnJubzsKQEAgLTEwMDMsNiArMTAwNSwx MCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2NtZCh2b2lkKQogCQkJYmtpbmZv LT5zdGFuZGJ5X2RlbGF5ID0gZGVsYXk7CiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXlfYnlfdGlt ZSA9IHRydWU7CiAKKwkJCS8qIFRyYWNrIG1heGltdW0gZGVsYXkgZm9yIHRhYmxlIG11dGF0aW9u IG1hcCBUVEwgY2FsY3VsYXRpb24gKi8KKwkJCWlmIChkZWxheSA+IG1heF9kZWxheV91cykKKwkJ CQltYXhfZGVsYXlfdXMgPSBkZWxheTsKKwogCQkJLyoKIAkJCSAqIExvZyBkZWxheSBpZiBuZWNl c3NhcnkuIHRocmVzaG9sZCBpcyBpbiBtaWxsaXNlY29uZHMsIGNvbnZlcnQKIAkJCSAqIHRvIG1p Y3Jvc2Vjb25kcy4KQEAgLTEwMjEsNiArMTAyNywxMCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1l X2xhZ193aXRoX2NtZCh2b2lkKQogCQkJdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCAiIFx0XG4iLCAm c2F2ZXB0cik7CiAJCX0KIAorCQkvKiBVcGRhdGUgdHJhY2sgdGFibGUgbXV0YXRpb24gVFRMIGJh c2VkIG9uIG1heGltdW0gb2JzZXJ2ZWQgZGVsYXkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5kaXNh YmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMICYm IG1heF9kZWxheV91cyA+IDApCisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90 dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQR19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaApp bmRleCA3YzVhMGMxODIxMTkxYTU3MjQzMGI2NThkODBhYjM0NTU0MTEwMzYzLi4xYzhhZTM5MmRh YTEwMDU2MTE5YzA5YzcxMjdlODM5ZDg1OWQ3MDBkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzaW9uL2xpYnMuc2gKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCkBAIC00Miw2 ICs0Miw4IEBAIGZ1bmN0aW9uIHdhaXRfZm9yX2ZhaWxvdmVyX2RvbmUgewogZnVuY3Rpb24gY2xl YW5fYWxsIHsKIAlwZ3JlcCBwZ3Bvb2wgfCB4YXJncyBraWxsIC05ID4gL2Rldi9udWxsIDI+JjEK IAlwZ3JlcCBwb3N0Z3JlcyB8IHhhcmdzIGtpbGwgLTkgPiAvZGV2L251bGwgMj4mMQorCSMgQ2xl YW4gdXAgbGVha2VkIFN5c1YgSVBDIHJlc291cmNlcyBsZWZ0IGJlaGluZCBieSBraWxsIC05CisJ aXBjcm0gLS1hbGwgMj4vZGV2L251bGwgfHwgdHJ1ZQogCXJtIC1mICRQR1NPQ0tFVF9ESVIvLnMu UEdTUUwuKgogCW5ldHN0YXQgLXQgLXAgMj4vZGV2L251bGx8Z3JlcCBwZ3Bvb2wKIH0KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxlX211dGF0aW9u L3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRh dGlvbi90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiNGRkMTdiODIwZDM2ZTNmYzQ4MjE2YWM3ZjA1NDRj YmYwZjVhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0 Mi50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoCkBAIC0wLDAgKzEsMzU0IEBACisjIS91c3Iv YmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgdHJhY2sgdGFibGUg bXV0YXRpb24gZmVhdHVyZSAoaW4tbWVtb3J5IHRhYmxlIHRyYWNraW5nKS4KKyMgVGVzdHMgcm91 dGluZyBvZiBxdWVyaWVzIGJhc2VkIG9uIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLgorIworc291 cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3FsCitQU1FMT1BU Uz0iLWEgLXEgLVgiCitQR1BPT0xCSU49JFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4KK2V4cG9ydCBQ R0RBVEFCQVNFPXRlc3QKKworIyBPbmx5IHJ1biBpbiBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9k ZSBzaW5jZSB0aGF0J3MgdGhlIHRhcmdldCB1c2UgY2FzZQorZm9yIG1vZGUgaW4gcworZG8KKyAg ICBybSAtZnIgJFRFU1RESVIKKyAgICBta2RpciAkVEVTVERJUgorICAgIGNkICRURVNURElSCisK KyAgICAjIENyZWF0ZSB0ZXN0IGVudmlyb25tZW50IHdpdGggMiBub2RlcworICAgIGVjaG8gLW4g ImNyZWF0aW5nIHRlc3QgZW52aXJvbm1lbnQuLi4iCisgICAgJFBHUE9PTF9TRVRVUCAtbSAkbW9k ZSAtbiAyIHx8IGV4aXQgMQorICAgIGVjaG8gImRvbmUuIgorCisgICAgc291cmNlIC4vYmFzaHJj LnBvcnRzCisKKyAgICAjIENvbmZpZ3VyZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIHZp YSBkbWxfYWRhcHRpdmVfZ2xvYmFsCisgICAgZWNobyAiZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPSAnZG1sX2FkYXB0aXZlX2dsb2JhbCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVj aG8gInRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAiID4+IGV0Yy9wZ3Bvb2wu Y29uZgorICAgIGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24g PSAxMDAwMCIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBsb2FkIGJhbGFuY2lu ZyBleHBsaWNpdGx5CisgICAgZWNobyAibG9hZF9iYWxhbmNlX21vZGUgPSBvbiIgPj4gZXRjL3Bn cG9vbC5jb25mCisKKyAgICAjIENvbmZpZ3VyZSB3ZWlnaHRzIHNvIHdlIGNhbiBkaXN0aW5ndWlz aCByb3V0aW5nCisgICAgIyBCYWNrZW5kIDAgKHByaW1hcnkpIHdlaWdodD0wLCBCYWNrZW5kIDEg KHN0YW5kYnkpIHdlaWdodD0xCisgICAgIyBUaGlzIG1lYW5zIGxvYWQgYmFsYW5jZWQgcXVlcmll cyBnbyB0byBub2RlIDEgYnkgZGVmYXVsdAorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MCA9IDAi ID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MSA9IDEiID4+IGV0 Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgcm91dGlu ZyBkZWNpc2lvbnMKKyAgICBlY2hvICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIiA+PiBldGMv cGdwb29sLmNvbmYKKworICAgIC4vc3RhcnRhbGwKKworICAgIGV4cG9ydCBQR1BPUlQ9JFBHUE9P TF9QT1JUCisgICAgZXhwb3J0IFBHSE9TVD1sb2NhbGhvc3QKKworICAgIHdhaXRfZm9yX3BncG9v bF9zdGFydHVwCisKKyAgICAjIENyZWF0ZSB0ZXN0IHRhYmxlcworICAgICRQU1FMIHRlc3QgPDxF T0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQyKGkgSU5URUdF Uik7CitDUkVBVEUgVEFCTEUgdDMoaSBJTlRFR0VSKTsKK0VPRgorCisgICAgZWNobyAiPT09IFRl c3QgMTogQ29sZCBTdGFydCBSb3V0aW5nID09PSIKKyAgICAjIER1cmluZyBjb2xkIHN0YXJ0LCBh bGwgcXVlcmllcyBzaG91bGQgZ28gdG8gcHJpbWFyeQorICAgICMgUmVzdGFydCBwZ3Bvb2wgdG8g dHJpZ2dlciBjb2xkIHN0YXJ0CisgICAgLi9zaHV0ZG93bmFsbAorICAgIC4vc3RhcnRhbGwKKyAg ICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBJbW1lZGlhdGVseSBxdWVyeSAtIHNo b3VsZCBnbyB0byBwcmltYXJ5IGR1ZSB0byBjb2xkIHN0YXJ0CisgICAgJFBTUUwgdGVzdCAtYyAi U0VMRUNUICdjb2xkX3N0YXJ0X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOyIgPiAvZGV2L251 bGwgMj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9yIGNvbGQgc3RhcnQgbWVzc2FnZSAodXNlIC1h IHRvIGhhbmRsZSBiaW5hcnkgbG9nIGZpbGVzKQorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5v dCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0 IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDEgUEFTU0VEOiBDb2xk IHN0YXJ0IHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDEgRkFJ TEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgbm90IGRldGVjdGVkIgorICAgICAgICAuL3NodXRkb3du YWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAyOiBXYWl0 IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9PT0iCisgICAgIyBXYWl0IGZvciBjb2xkIHN0YXJ0IHBl cmlvZCB0byBlbmQgKDEwIHNlY29uZHMpLgorICAgICMgVXNlIGdlbmVyb3VzIG1hcmdpbiB0byBh dm9pZCBmbGFraW5lc3MgdW5kZXIgbG9hZCAoZS5nLiBmdWxsIHJlZ3Jlc3Npb24gc3VpdGUpLgor ICAgIHNsZWVwIDEyCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9n CisKKyAgICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2UgKGdv IHRvIG5vZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3RhcnQn IGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRlciBj b2xkIHN0YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNlCisg ICAgIyBDaGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0byB0 cmFjayB0YWJsZSBtdXRhdGlvbgorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJh bGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cvcGdw b29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDIgRkFJTEVEOiBTdGlsbCBpbiBjb2xk IHN0YXJ0IGFmdGVyIHdhaXRpbmciCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhp dCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDIgUEFTU0VEOiBDb2xkIHN0YXJ0IGVuZGVkIGNv cnJlY3RseSIKKworICAgIGVjaG8gIj09PSBUZXN0IDM6IFdyaXRlLXRoZW4tUmVhZCBSb3V0aW5n ID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAj IFdyaXRlIHRvIHQxIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24gdG8gZW5z dXJlIHNhbWUgc2Vzc2lvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0lOU0VSVCBJTlRPIHQxIFZB TFVFUyAoMSk7CitTRUxFQ1QgJ3dyaXRlX3JlYWRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7 CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAg c2xlZXAgMC41CisKKyAgICAjIENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1lc3NhZ2UK KyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUu KndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hv ICJUZXN0IDMgUEFTU0VEOiBXcml0ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNl CisgICAgICAgIGVjaG8gIlRlc3QgMyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3QgZGV0ZWN0 ZWQgYWZ0ZXIgd3JpdGUiCisgICAgICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmllcyBmb3Ig ZGVidWdnaW5nCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cv cGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhp dCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDQ6IENsZWFuIFRhYmxlIFN0aWxsIExv YWQgQmFsYW5jZXMgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5s b2cKKworICAgICMgUmVhZCBmcm9tIHQyIChuZXZlciB3cml0dGVuIHRvKSAtIHNob3VsZCBsb2Fk IGJhbGFuY2UKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NsZWFuX3RhYmxlX3Rlc3QnIGFz IG1hcmtlciwgKiBGUk9NIHQyOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBTaG91bGQgTk9U IHNlZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBibG9ja2luZyBtZXNzYWdlIGZvciB0MgorICAgIGlm IGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdDIuKndh cyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJU ZXN0IDQgRkFJTEVEOiBDbGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3RhbGUiCisg ICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJU ZXN0IDQgUEFTU0VEOiBDbGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisgICAgZWNo byAiPT09IFRlc3QgNTogVVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENs ZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0MiBhbmQg dGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgor VVBEQVRFIHQyIFNFVCBpID0gOTk5IFdIRVJFIGkgPSAwOworU0VMRUNUICd1cGRhdGVfdGVzdCcg YXMgbWFya2VyLCAqIEZST00gdDI7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJl IGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3Vs ZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBs b2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDUgUEFTU0VEOiBVUERBVEUg bWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDUgRkFJ TEVEOiBVUERBVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRk b3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA2OiBE RUxFVEUgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAg ID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgRGVsZXRlIGZyb20gdDMgYW5kIHRoZW4gcmVhZCAt IHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0RFTEVURSBGUk9N IHQzIFdIRVJFIGkgPSAwOworU0VMRUNUICdkZWxldGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00g dDM7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisg ICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNl IGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhl bgorICAgICAgICBlY2hvICJUZXN0IDYgUEFTU0VEOiBERUxFVEUgbWFya3MgdGFibGUgYXMgc3Rh bGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDYgRkFJTEVEOiBERUxFVEUgZGlkIG5v dCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4 aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA3OiBUUlVOQ0FURSBNYXJrcyBUYWJs ZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxv ZworCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3IgVFJVTkNBVEUgdGVzdAorICAgICRQ U1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X3RydW5jYXRlKGkgSU5URUdFUik7IiA+IC9kZXYv bnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF90cnVuY2F0ZSBWQUxV RVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55 IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4K KyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFRydW5jYXRlIGFuZCB0aGVuIHJlYWQgLSB1 c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitUUlVOQ0FURSB0X3Ry dW5jYXRlOworU0VMRUNUICd0cnVuY2F0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X3RydW5j YXRlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAor ICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5j ZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRo ZW4KKyAgICAgICAgZWNobyAiVGVzdCA3IFBBU1NFRDogVFJVTkNBVEUgbWFya3MgdGFibGUgYXMg c3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDcgRkFJTEVEOiBUUlVOQ0FURSBk aWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3Rh YmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRv d25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDg6IFdJ VEggQ2xhdXNlIChDVEUgd2l0aCBERUxFVEUpIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAg ICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0ZSBh IGZyZXNoIHRhYmxlIGZvciBXSVRIIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFC TEUgdF9jdGUoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0IC1j ICJJTlNFUlQgSU5UTyB0X2N0ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+ JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAg ICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVz ZSBXSVRIIGNsYXVzZSB3aXRoIERFTEVURSwgdGhlbiByZWFkIGZyb20gdGhlIHRhYmxlCisgICAg JFBTUUwgdGVzdCA8PEVPRgorV0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0X2N0ZSBXSEVS RSBpID0gMSBSRVRVUk5JTkcgKikKK1NFTEVDVCAqIEZST00gZGVsZXRlZDsKK1NFTEVDVCAnY3Rl X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfY3RlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5 IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAt YSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkg d3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA4IFBBU1NF RDogV0lUSCBjbGF1c2UgKENURSkgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAg ICAgICBlY2hvICJUZXN0IDggRkFJTEVEOiBXSVRIIGNsYXVzZSAoQ1RFKSBkaWQgbm90IG1hcmsg dGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9u IiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAg ICAgZXhpdCAxCisgICAgZmkKKworICAgICMgVGVzdCA5OiBNRVJHRSAoUG9zdGdyZVNRTCAxNSsg b25seSkKKyAgICBQR19NQUpPUl9WRVJTSU9OPSQoJFBTUUwgLXQgLWMgIlNFTEVDVCBzdWJzdHJp bmcodmVyc2lvbigpIGZyb20gJ1Bvc3RncmVTUUwgKFswLTldKyknKTsiIHwgdHIgLWQgJyAnKQor ICAgIGlmIFsgIiRQR19NQUpPUl9WRVJTSU9OIiAtZ2UgMTUgXSAyPi9kZXYvbnVsbDsgdGhlbgor ICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBNYXJrcyBUYWJsZSBhcyBTdGFsZSAoUG9z dGdyZVNRTCAkUEdfTUFKT1JfVkVSU0lPTikgPT09IgorICAgICAgICAjIENsZWFyIHRoZSBsb2cK KyAgICAgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgQ3JlYXRlIHRhYmxlcyBmb3Ig TUVSR0UgdGVzdAorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV90 YXJnZXQoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4m MQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV9zb3VyY2UoaWQg SU5URUdFUiwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0 IC1jICJJTlNFUlQgSU5UTyB0X21lcmdlX3RhcmdldCBWQUxVRVMgKDEsICdvbGQnKTsiID4gL2Rl di9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9tZXJnZV9z b3VyY2UgVkFMVUVTICgxLCAnbmV3JyksICgyLCAnaW5zZXJ0Jyk7IiA+IC9kZXYvbnVsbCAyPiYx CisKKyAgICAgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgICAgICBzbGVlcCAz CisKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgICAgID4gbG9nL3BncG9vbC5s b2cKKworICAgICAgICAjIFVzZSBNRVJHRSwgdGhlbiByZWFkIGZyb20gdGhlIHRhcmdldCB0YWJs ZQorICAgICAgICAkUFNRTCB0ZXN0IDw8RU9GCitNRVJHRSBJTlRPIHRfbWVyZ2VfdGFyZ2V0IHQK K1VTSU5HIHRfbWVyZ2Vfc291cmNlIHMgT04gdC5pZCA9IHMuaWQKK1dIRU4gTUFUQ0hFRCBUSEVO IFVQREFURSBTRVQgdmFsID0gcy52YWwKK1dIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgVkFM VUVTIChzLmlkLCBzLnZhbCk7CitTRUxFQ1QgJ21lcmdlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9N IHRfbWVyZ2VfdGFyZ2V0OworRU9GCisKKyAgICAgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUg bG9nIGlzIGZsdXNoZWQKKyAgICAgICAgc2xlZXAgMC41CisKKyAgICAgICAgaWYgZ3JlcCAtYSAt cSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3Jp dHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBQQVNT RUQ6IE1FUkdFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBlbHNlCisgICAgICAgICAg ICBlY2hvICJUZXN0IDkgRkFJTEVEOiBNRVJHRSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUi CisgICAgICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9v bC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICAgICAg ZXhpdCAxCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBN RVJHRSBza2lwcGVkIChyZXF1aXJlcyBQb3N0Z3JlU1FMIDE1KywgaGF2ZSAkUEdfTUFKT1JfVkVS U0lPTikgPT09IgorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAxMDogUk9MTEJBQ0sgRG9l cyBOT1QgTWFyayBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJs ZSBmb3Igcm9sbGJhY2sgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X3Jv bGxiYWNrKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFu eSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAg PiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgdGhl biByb2xsYmFjaworICAgICRQU1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElOVE8gdF9y b2xsYmFjayBWQUxVRVMgKDEpOworUk9MTEJBQ0s7CitTRUxFQ1QgJ3JvbGxiYWNrX3Rlc3QnIGFz IG1hcmtlciwgKiBGUk9NIHRfcm9sbGJhY2s7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8g ZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICAjIFNob3VsZCBOT1Qg c2VlIHRfcm9sbGJhY2sgbWFya2VkIGFzIHN0YWxlIHNpbmNlIHRoZSB3cml0ZSB3YXMgcm9sbGVk IGJhY2sKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ug dGFibGUuKnRfcm9sbGJhY2suKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsg dGhlbgorICAgICAgICBlY2hvICJUZXN0IDEwIEZBSUxFRDogUm9sbGVkLWJhY2sgd3JpdGUgaW5j b3JyZWN0bHkgbWFya2VkIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFj a190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3No dXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCAxMCBQQVNT RUQ6IFJPTExCQUNLIGRvZXMgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisKKyAgICBlY2hvICI9 PT0gVGVzdCAxMTogQ09NTUlUIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENyZWF0 ZSBhIGZyZXNoIHRhYmxlIGZvciBjb21taXQgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFU RSBUQUJMRSB0X2NvbW1pdChpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBX YWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhl IGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgaW5zaWRlIGEgdHJhbnNh Y3Rpb24sIHRoZW4gY29tbWl0LCB0aGVuIHJlYWQKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitCRUdJ TjsKK0lOU0VSVCBJTlRPIHRfY29tbWl0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgJ2Nv bW1pdF90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X2NvbW1pdDsKK0VPRgorCisgICAgIyBTbWFs bCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlm IGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJl Y2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3Qg MTEgUEFTU0VEOiBDT01NSVQgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAg ICBlY2hvICJUZXN0IDExIEZBSUxFRDogQ29tbWl0dGVkIHdyaXRlIGRpZCBub3QgbWFyayB0YWJs ZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxv Zy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBl eGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiIgorICAgIGVjaG8gIj09PSBBbGwgVHJhY2sgVGFi bGUgTXV0YXRpb24gVGVzdHMgUEFTU0VEID09PSIKKworICAgIC4vc2h1dGRvd25hbGwKKworICAg IGNkIC4uCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvLmdpdGlnbm9yZSBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nLy5n aXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNiOTNkMjdhN2U3ZThhNWVmZTZlYWNmYjBmODhmNmYzYzhi Yzc2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRy YWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACits ZWFkZXIKK3N0YW5kYnkKKyoucGlkCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rl c3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZiBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL2xl YWRlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0NWNmZjk4NjBkMDM1N2ZiYjBlM2U5YTU2NDMxMjRkOTE2 YmQ5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50 cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZgpAQCAtMCwwICsxLDI1IEBA CisjIGxlYWRlciB3YXRjaGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxlX211dGF0aW9uIHdhdGNo ZG9nIHRlc3QKK3VzZV93YXRjaGRvZyA9IG9uCit3ZF9pbnRlcnZhbCA9IDEKK3dkX3ByaW9yaXR5 ID0gMgorCitob3N0bmFtZTAgPSAnbG9jYWxob3N0Jword2RfcG9ydDAgPSAyMTAwNAorcGdwb29s X3BvcnQwID0gMTEwMDAKK2hvc3RuYW1lMSA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MSA9IDIxMTA0 CitwZ3Bvb2xfcG9ydDEgPSAxMTEwMAorCitoZWFydGJlYXRfaG9zdG5hbWUwID0gJ2xvY2FsaG9z dCcKK2hlYXJ0YmVhdF9wb3J0MCA9IDIxMDA1CitoZWFydGJlYXRfaG9zdG5hbWUxID0gJ2xvY2Fs aG9zdCcKK2hlYXJ0YmVhdF9wb3J0MSA9IDIxMTA1CisKK2VuYWJsZV9jb25zZW5zdXNfd2l0aF9o YWxmX3ZvdGVzID0gb24KKworIyBFbmFibGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2 aWEgZG1sX2FkYXB0aXZlX2dsb2JhbAorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVy YXRpb24gPSAyMDAwCisKKyMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIGZlYXR1cmUgbWVz c2FnZXMKK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3N0YW5kYnku Y29uZiBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9u X3dhdGNoZG9nL3N0YW5kYnkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTFjM2RmY2E0MjdjZjZiMjQ2NDUx ZDA2N2MzMGIwMjU1YjljNGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvc3RhbmRieS5jb25mCkBA IC0wLDAgKzEsMjcgQEAKKyMgc3RhbmRieSB3YXRjaGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxl X211dGF0aW9uIHdhdGNoZG9nIHRlc3QKK3BvcnQgPSAxMTEwMAorcGNwX3BvcnQgPSAxMTEwNQor dXNlX3dhdGNoZG9nID0gb24KK3dkX2ludGVydmFsID0gMQord2RfcHJpb3JpdHkgPSAxCisKK2hv c3RuYW1lMCA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MCA9IDIxMDA0CitwZ3Bvb2xfcG9ydDAgPSAx MTAwMAoraG9zdG5hbWUxID0gJ2xvY2FsaG9zdCcKK3dkX3BvcnQxID0gMjExMDQKK3BncG9vbF9w b3J0MSA9IDExMTAwCisKK2hlYXJ0YmVhdF9ob3N0bmFtZTAgPSAnbG9jYWxob3N0JworaGVhcnRi ZWF0X3BvcnQwID0gMjEwMDUKK2hlYXJ0YmVhdF9ob3N0bmFtZTEgPSAnbG9jYWxob3N0JworaGVh cnRiZWF0X3BvcnQxID0gMjExMDUKKworZW5hYmxlX2NvbnNlbnN1c193aXRoX2hhbGZfdm90ZXMg PSBvbgorCisjIEVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIHZpYSBkbWxfYWRh cHRpdmVfZ2xvYmFsCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRp dmVfZ2xvYmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIw MDAKKworIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgZmVhdHVyZSBtZXNzYWdlcworbG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCBiL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Qu c2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uNzUyYTZlNmFhMzc3ZmUwYzU0MjQ0OTc1ZTYwNjY0ODEwMWM5OGNmOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3Rh YmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxNzkgQEAKKyMhL3Vzci9i aW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBt dXRhdGlvbiBnbG9iYWwgY29sZCBzdGFydCBvbiB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlLgorIyBU ZXN0cyB0aGF0IHdoZW4gdGhlIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2VzLCB0aGUgbmV3IGxlYWRl ciB0cmlnZ2VycworIyBhIGdsb2JhbCBjb2xkIHN0YXJ0IHRvIGZvcmNlIGFsbCBxdWVyaWVzIHRv IHByaW1hcnkuCisjCitzb3VyY2UgJFRFU1RMSUJTCitMRUFERVJfRElSPWxlYWRlcgorU1RBTkRC WV9ESVI9c3RhbmRieQorUFNRTD0kUEdCSU4vcHNxbAorc3VjY2Vzc19jb3VudD0wCisKK3JtIC1m ciAkTEVBREVSX0RJUgorcm0gLWZyICRTVEFOREJZX0RJUgorCitta2RpciAkTEVBREVSX0RJUgor bWtkaXIgJFNUQU5EQllfRElSCisKKyMgZGlyIGluIGxlYWRlciBkaXJlY3RvcnkKK2NkICRMRUFE RVJfRElSCisKKyMgY3JlYXRlIGxlYWRlciBlbnZpcm9ubWVudCB3aXRoIHN0cmVhbWluZyByZXBs aWNhdGlvbgorZWNobyAtbiAiY3JlYXRpbmcgbGVhZGVyIHBncG9vbC4uLiIKKyRQR1BPT0xfU0VU VVAgLW0gcyAtbiAyIC1wIDExMDAwIHx8IGV4aXQgMQorZWNobyAibGVhZGVyIHNldHVwIGRvbmUu IgorCisjIGNvcHkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN0YW5kYnkKK2NwIC1yIGV0YyAuLi8k U1RBTkRCWV9ESVIvCisKK3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworY2F0IC4uL2xlYWRlci5jb25m ID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAwID4gZXRjL3BncG9vbF9ub2RlX2lkCisKKy4vc3Rh cnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgYmFjayB0byB0ZXN0IHJvb3QgZGly CitjZCAuLgorCisjIGNyZWF0ZSBzdGFuZGJ5IGVudmlyb25tZW50Citta2RpciAkU1RBTkRCWV9E SVIvbG9nCitlY2hvIC1uICJjcmVhdGluZyBzdGFuZGJ5IHBncG9vbC4uLiIKK2NhdCBzdGFuZGJ5 LmNvbmYgPj4gJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZgorIyBzaW5jZSB3ZSBhcmUgdXNp bmcgdGhlIHNhbWUgcGdwb29sLUlJIGNvbmYgYXMgb2YgbGVhZGVyLCBjaGFuZ2UgdGhlIHBpZCBm aWxlIHBhdGgKK2VjaG8gInBpZF9maWxlX25hbWUgPSAnJFBXRC9wZ3Bvb2wyLnBpZCciID4+ICRT VEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYKK2VjaG8gMSA+ICRTVEFOREJZX0RJUi9ldGMvcGdw b29sX25vZGVfaWQKKyMgc3RhcnQgdGhlIHN0YW5kYnkgcGdwb29sLUlJIGJ5IGhhbmQKKyRQR1BP T0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtRCAtbiAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9v bC5jb25mIC1GICRTVEFOREJZX0RJUi9ldGMvcGNwLmNvbmYgLWEgJFNUQU5EQllfRElSL2V0Yy9w b29sX2hiYS5jb25mID4gJFNUQU5EQllfRElSL2xvZy9wZ3Bvb2wubG9nIDI+JjEgJgorCisjIFRl c3QgMTogQ2hlY2sgaWYgbGVhZGVyIHBncG9vbC1JSSBzdGFydGVkIGNvcnJlY3RseQorZWNobyAi PT09IFRlc3QgMTogV2FpdGluZyBmb3IgdGhlIHBncG9vbCBsZWFkZXIuLi4gPT09IgorZm9yIGkg aW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAiSSBhbSB0aGUgY2x1c3RlciBsZWFk ZXIgbm9kZS4gU3RhcnRpbmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAkTEVBREVSX0RJUi9sb2cvcGdw b29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNz X2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDEgUEFTU0VEOiBM ZWFkZXIgYnJvdWdodCB1cCBzdWNjZXNzZnVsbHkuIgorCQlicmVhaworCWZpCisJZWNobyAiW2No ZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0 IDEgXTsgdGhlbgorCWVjaG8gIlRlc3QgMSBGQUlMRUQ6IExlYWRlciBkaWQgbm90IHN0YXJ0Igor CSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9v bC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRv d25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCAyOiBDaGVjayBpZiBzdGFuZGJ5IGhhcyBzdWNj ZXNzZnVsbHkgam9pbmVkCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZvciB0aGUgc3RhbmRi eSB0byBqb2luIGNsdXN0ZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAK K2RvCisJZ3JlcCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciBhcyBz dGFuZGJ5IG5vZGUiICRTVEFOREJZX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYx CisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50 ICsgMSApKQorCQllY2hvICJUZXN0IDIgUEFTU0VEOiBTdGFuZGJ5IHN1Y2Nlc3NmdWxseSBjb25u ZWN0ZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAy Citkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0IDIgXTsgdGhlbgorCWVjaG8gIlRlc3Qg MiBGQUlMRUQ6IFN0YW5kYnkgZGlkIG5vdCBqb2luIGNsdXN0ZXIiCisJJFBHUE9PTF9JTlNUQUxM X0RJUi9iaW4vcGdwb29sIC1mICRTVEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9w IDI+L2Rldi9udWxsCisJY2QgJExFQURFUl9ESVIgJiYgLi9zaHV0ZG93bmFsbAorCWV4aXQgMQor ZmkKKworIyBUZXN0IDM6IFZlcmlmeSB0cmFja190YWJsZV9tdXRhdGlvbiBpcyBlbmFibGVkIGFu ZCB3b3JraW5nIG9uIGxlYWRlcgorZWNobyAiPT09IFRlc3QgMzogVmVyaWZ5IHRyYWNrX3RhYmxl X211dGF0aW9uIGlzIGVuYWJsZWQgPT09IgoraWYgZ3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRp b246IGluaXRpYWxpemVkIiAkTEVBREVSX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAy PiYxOyB0aGVuCisJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwllY2hv ICJUZXN0IDMgUEFTU0VEOiB0cmFja190YWJsZV9tdXRhdGlvbiBpbml0aWFsaXplZCBvbiBsZWFk ZXIiCitlbHNlCisJZWNobyAiVGVzdCAzIEZBSUxFRDogdHJhY2tfdGFibGVfbXV0YXRpb24gbm90 IGluaXRpYWxpemVkIG9uIGxlYWRlciIKKwkkUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wg LWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwlj ZCAkTEVBREVSX0RJUiAmJiAuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNDog U3RvcCBsZWFkZXIgcGdwb29sIGFuZCB0cmlnZ2VyIGZhaWxvdmVyCitlY2hvICI9PT0gVGVzdCA0 OiBUcmlnZ2VyaW5nIGxlYWRlciBmYWlsb3Zlci4uLiA9PT0iCiskUEdQT09MX0lOU1RBTExfRElS L2Jpbi9wZ3Bvb2wgLWYgJExFQURFUl9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcAorCitl Y2hvICJDaGVja2luZyBpZiB0aGUgU3RhbmRieSBwZ3Bvb2wtSUkgZGV0ZWN0ZWQgdGhlIGxlYWRl ciBzaHV0ZG93bi4uLiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAg LWEgIiBpcyBzaHV0dGluZyBkb3duIiAkU1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2 L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3Vj Y2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCA0IFBBU1NFRDogTGVhZGVyIHNodXRkb3du IGRldGVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xl ZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hvICJU ZXN0IDQgRkFJTEVEOiBMZWFkZXIgc2h1dGRvd24gbm90IGRldGVjdGVkIgorCSRQR1BPT0xfSU5T VEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYg c3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0 IDEKK2ZpCisKKyMgVGVzdCA1OiBWZXJpZnkgc3RhbmRieSBiZWNvbWVzIG5ldyBsZWFkZXIKK2Vj aG8gIj09PSBUZXN0IDU6IENoZWNraW5nIGlmIHN0YW5kYnkgdGFrZXMgb3ZlciBhcyBsZWFkZXIu Li4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBh bSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZS4gU3RhcnRpbmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAk U1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAw IF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNo byAiVGVzdCA1IFBBU1NFRDogU3RhbmRieSBiZWNhbWUgdGhlIG5ldyBsZWFkZXIuIgorCQlicmVh aworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsg JHN1Y2Nlc3NfY291bnQgLWx0IDUgXTsgdGhlbgorCWVjaG8gIlRlc3QgNSBGQUlMRUQ6IFN0YW5k YnkgZGlkIG5vdCBiZWNvbWUgbGVhZGVyIgorCSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9v bCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAor CWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCA2 OiBWZXJpZnkgZ2xvYmFsIGNvbGQgc3RhcnQgd2FzIHRyaWdnZXJlZCBvbiBuZXcgbGVhZGVyCitl Y2hvICI9PT0gVGVzdCA2OiBDaGVja2luZyBpZiBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dl cmVkLi4uID09PSIKKyMgVGhlIG5ldyBsZWFkZXIgc2hvdWxkIHRyaWdnZXIgZ2xvYmFsIGNvbGQg c3RhcnQgd2hlbiBpdCBiZWNvbWVzIGNvb3JkaW5hdG9yCisjIExvb2sgZm9yIHRoZSBsb2cgbWVz c2FnZSB0aGF0IGluZGljYXRlcyBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkCitmb3Ig aSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJsZV9tdXRh dGlvbjogZW50ZXJpbmcgZ2xvYmFsIGNvbGQgc3RhcnQiICRTVEFOREJZX0RJUi9sb2cvcGdwb29s LmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2Nv dW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9i YWwgY29sZCBzdGFydCB0cmlnZ2VyZWQgb24gbmV3IGxlYWRlci4iCisJCWJyZWFrCisJZmkKKwll Y2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworIyBDbGVhbnVwCiskUEdQ T09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29u ZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKK2NkICRMRUFERVJfRElSCisuL3NodXRkb3duYWxsCisK K2VjaG8gIiIKK2VjaG8gIiRzdWNjZXNzX2NvdW50IG91dCBvZiA2IHN1Y2Nlc3NmdWwiCisKK2lm IHRlc3QgJHN1Y2Nlc3NfY291bnQgLWVxIDYKK3RoZW4KKwllY2hvICI9PT0gQWxsIFRyYWNrIFRh YmxlIE11dGF0aW9uIFdhdGNoZG9nIFRlc3RzIFBBU1NFRCA9PT0iCisJZXhpdCAwCitmaQorCitl eGl0IDEKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMg Yi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZDRm MDM4MGQ0M2EyMzdmNTE4YzYwY2RkNzNhYmEyZmY1MWI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCkBAIC0wLDAgKzEsMTE4OCBAQAor LyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVu dCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRh dHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24g Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICog Y29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQg dGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUg YXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5 IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisg KiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbi5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3Jp dHRlbiB0YWJsZXMKKyAqICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBm cm9tIHJlcGxpY2FzIGR1cmluZyByZXBsaWNhdGlvbiBsYWcKKyAqCisgKiBCYXNlZCBvbiB0aGUg ImxhZ2xlc3MiIGFyY2hpdGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHM6CisgKiBodHRwczovL21l ZGl1bS5jb20vdGFpbG9yLXRlY2gvdXNpbmctZGF0YWJhc2UtcmVhZC1yZXBsaWNhcy1pbi1kaXN0 cmlidXRlZC1zeXN0ZW1zLWQ4MGVhZjZiYmY4YQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmlnLmgiCisj aW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgorI2luY2x1ZGUgInV0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJ1dGlscy9lbG9nLmgiCisj aW5jbHVkZSAidXRpbHMvcG9vbF9pcGMuaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2MuaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3JlbGNhY2hlLmgiCisKKyNkZWZpbmUgREFUQUJBU0VfVE9fT0lE X1FVRVJZICJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSBXSEVSRSBkYXRu YW1lID0gJyVzJyIKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0 cnVjdHVyZSAqLworc3RhdGljIFRyYWNrVGFibGVNdXRhdGlvblNobWVtICp0cmFja190YWJsZV9t dXRhdGlvbl9zaG1lbSA9IE5VTEw7CisKKy8qIFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tp bmcgKG5vdCBpbiBzaGFyZWQgbWVtb3J5KSAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nl c3Nfc3RhcnRfdGltZTsKK3N0YXRpYyBib29sIGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxz ZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5n IGZsZXhpYmxlIGFycmF5cyBpbiBzaGFyZWQgbWVtb3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyogR2V0IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHRhYmxlIG1hcCAqLworI2Rl ZmluZSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApIFwKKwkoKGludCAqKSgoY2hhciAqKShtYXApICsg c2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQgcG9pbnRlciB0 byBlbnRyeSBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0VOVFJJRVMo bWFwKSBcCisJKChUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCQkJCQkJKG1hcCktPm51bV9i dWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiBHZXQgcG9pbnRlciB0byBidWNrZXQgYXJyYXkg aW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSkgXAor CSgoaW50ICopKChjaGFyICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpKSkKKwor LyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUg UVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSkgXAorCSgoUXVlcnlQYXJzZUVudHJ5ICopKChjaGFy ICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpICsgXAorCQkJCQkJIChjYWNoZSkt Pm51bV9idWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBT ZW1hcGhvcmUgbG9jayBoZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGlj IGlubGluZSB2b2lkCit0YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xv Y2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9tYXBfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRS QUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor cXVlcnlfY2FjaGVfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tfVEFC TEVfTVVUQVRJT05fUVVFUllfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxdWVyeV9j YWNoZV91bmxvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV91bmxvY2soVFJBQ0tfVEFCTEVf TVVUQVRJT05fUVVFUllfU0VNKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGFzaCBm dW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogRk5WLTFhIGhhc2gg Zm9yIHRhYmxlL2RhdGFiYXNlIG9pZCBwYWlyCisgKi8KK3N0YXRpYyB1aW50MzIKK2ZudjFhX2hh c2hfdGFibGVfa2V5KGludCB0YWJsZV9vaWQsIGludCBkYm9pZCkKK3sKKwl1aW50MzIgaGFzaCA9 IDIxNjYxMzYyNjF1OyAgLyogRk5WIG9mZnNldCBiYXNpcyAqLworCXVpbnQzMiBkYXRhWzJdOwor CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdCBpOworCisJZGF0YVswXSA9ICh1 aW50MzIpIHRhYmxlX29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMgPSAo Y29uc3QgdW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihk YXRhKTsgaSsrKQorCXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYxOXU7 ICAvKiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIEZOVi0x YSBoYXNoIGZvciA2NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIHVpbnQ2NAorZm52MWFfaGFzaF82 NChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJdWludDY0IGhhc2ggPSAxNDY5NTk4 MTAzOTM0NjY1NjAzN1VMTDsgIC8qIEZOViBvZmZzZXQgYmFzaXMgZm9yIDY0LWJpdCAqLworCXNp emVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkJaGFzaCBePSAodWlu dDgpc3RyW2ldOworCQloYXNoICo9IDEwOTk1MTE2MjgyMTFVTEw7ICAvKiBGTlYgcHJpbWUgZm9y IDY0LWJpdCAqLworCX0KKworCXJldHVybiBoYXNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKiBUaW1lIHV0aWxpdGllcworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBH ZXQgZWxhcHNlZCB0aW1lIGluIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHR3byB0aW1ldmFscworICov CitzdGF0aWMgaW50NjQKK2VsYXBzZWRfdXMoc3RydWN0IHRpbWV2YWwgKnN0YXJ0LCBzdHJ1Y3Qg dGltZXZhbCAqZW5kKQoreworCXJldHVybiAoKGludDY0KShlbmQtPnR2X3NlYyAtIHN0YXJ0LT50 dl9zZWMpICogMTAwMDAwMCkgKworCQkgICAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMp OworfQorCisvKgorICogR2V0IGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgdm9pZAorZ2V0X2N1 cnJlbnRfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJZ2V0dGltZW9mZGF5KHR2LCBOVUxM KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YWJhc2Ugb2lkIGxvb2t1cAorICog LS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQKK3RyYWNrX3RhYmxlX211dGF0aW9u X2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwodm9pZCkKK3sKKwlpbnQJCQlvaWQgPSAwOworCXN0 YXRpYyBQT09MX1JFTENBQ0hFICpyZWxjYWNoZTsKKwlQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFj a2VuZDsKKwlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0OworCisJLyogU2Fm ZXR5IGNoZWNrOiBtdXN0IGhhdmUgc2htZW0gaW5pdGlhbGl6ZWQgKi8KKwlpZiAodHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCXNlc3Npb25fY29u dGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJaWYgKHNlc3Npb25fY29u dGV4dCA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIHdlIGhhdmUgYSB2YWxp ZCBxdWVyeSBjb250ZXh0ICovCisJaWYgKHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dCA9 PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJYmFja2VuZCA9IHNlc3Npb25fY29udGV4dC0+YmFj a2VuZDsKKwlpZiAoYmFja2VuZCA9PSBOVUxMIHx8IE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKSA9 PSBOVUxMIHx8IE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AgPT0gTlVMTCkKKwkJcmV0dXJu IG9pZDsKKworCS8qIEVuc3VyZSBkYXRhYmFzZSBuYW1lIGlzIHZhbGlkICovCisJaWYgKE1BSU5f Q09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlID09IE5VTEwpCisJCXJldHVybiBvaWQ7 CisKKwlpZiAoIXJlbGNhY2hlKQorCXsKKwkJcmVsY2FjaGUgPSBwb29sX2NyZWF0ZV9yZWxjYWNo ZShwb29sX2NvbmZpZy0+cmVsY2FjaGVfc2l6ZSwKKwkJCQkJCQkJCQlEQVRBQkFTRV9UT19PSURf UVVFUlksCisJCQkJCQkJCQkJaW50X3JlZ2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJaW50X3VucmVn aXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlmYWxzZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQor CQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246 IGVycm9yIGNyZWF0aW5nIHJlbGNhY2hlIHdoaWxlIGdldHRpbmcgZGF0YWJhc2UgT0lEIikpKTsK KwkJCXJldHVybiBvaWQ7CisJCX0KKwl9CisKKwlvaWQgPSAoaW50KSAoaW50cHRyX3QpIHBvb2xf c2VhcmNoX3JlbGNhY2hlKHJlbGNhY2hlLCBiYWNrZW5kLAorCQkJCQkJCQkJCQkJTUFJTl9DT05O RUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJhc2UpOworCXJldHVybiBvaWQ7Cit9CisKK2ludAor cG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQpCit7CisJcmV0 dXJuIHRyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwoKTsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBvcGVy YXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgdGFi bGUgbXV0YXRpb24gaGFzaCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luaXQo VHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsIGludCBudW1fYnVja2V0cywgaW50IG1h eF9lbnRyaWVzKQoreworCWludCAqYnVja2V0czsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAq ZW50cmllczsKKwlpbnQgaTsKKworCW1hcC0+bnVtX2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwlt YXAtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJbWFwLT5udW1fZW50cmllcyA9IDA7CisJ bWFwLT5mcmVlX2xpc3RfaGVhZCA9IDA7CisKKwlidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMo bWFwKTsKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCS8qIEluaXRpYWxp emUgYWxsIGJ1Y2tldHMgdG8gZW1wdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7 IGkrKykKKwkJYnVja2V0c1tpXSA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisKKwkvKiBJbml0aWFsaXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVzICovCisJZm9y IChpID0gMDsgaSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9 IGZhbHNlOworCQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPyBpICsg MSA6IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJfQorCisJZXJlcG9ydChE RUJVRzEsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgdGFi bGUgbWFwIHdpdGggJWQgYnVja2V0cywgJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0 cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRo ZSBmcmVlIGxpc3QKKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNr VGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5 ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlpbnQgaWR4OworCisJaWYgKG1h cC0+ZnJlZV9saXN0X2hlYWQgPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkK KwkJcmV0dXJuIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBt YXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9 IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJbWFwLT5udW1fZW50cmllcysr OworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIEZyZWUgYW4gZW50cnkgYmFjayB0byB0aGUg ZnJlZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfZnJlZV9lbnRyeShUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRp b25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwllbnRyaWVzW2lk eF0uaW5fdXNlID0gZmFsc2U7CisJZW50cmllc1tpZHhdLm5leHQgPSBtYXAtPmZyZWVfbGlzdF9o ZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBpZHg7CisJbWFwLT5udW1fZW50cmllcy0tOwor fQorCisvKgorICogTG9vayB1cCBhIHRhYmxlIGluIHRoZSBoYXNoIHRhYmxlCisgKiBSZXR1cm5z IGVudHJ5IGluZGV4IG9yIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVggaWYgbm90 IGZvdW5kCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZAorICovCitzdGF0aWMgaW50 Cit0YWJsZV9tYXBfbG9va3VwKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQg dGFibGVfb2lkLCBpbnQgZGJvaWQsIHVpbnQzMiBoYXNoKQoreworCWludCAqYnVja2V0cyA9IFRB QkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMg PSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCWludCBidWNrZXQgPSBoYXNoICUgbWFwLT5udW1f YnVja2V0czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBU UkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4 XS5oYXNoID09IGhhc2ggJiYKKwkJCWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPT0gdGFibGVfb2lk ICYmCisJCQllbnRyaWVzW2lkeF0uZGJvaWQgPT0gZGJvaWQpCisJCXsKKwkJCXJldHVybiBpZHg7 CisJCX0KKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgdXBkYXRl IGEgdGFibGUgZW50cnkKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkCisgKi8KK3N0 YXRpYyB2b2lkCit0YWJsZV9tYXBfaW5zZXJ0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAq bWFwLCBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQsCisJCQkJIHVpbnQzMiBoYXNoLCBzdHJ1Y3Qg dGltZXZhbCAqd3JpdGVfdGltZSkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VU UyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VO VFJJRVMobWFwKTsKKwlpbnQgYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50 IGlkeDsKKworCS8qIENoZWNrIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJaWR4ID0gdGFi bGVfbWFwX2xvb2t1cChtYXAsIHRhYmxlX29pZCwgZGJvaWQsIGhhc2gpOworCWlmIChpZHggIT0g VFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7CisJCS8qIFVwZGF0ZSBleGlz dGluZyBlbnRyeSAqLworCQllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3Rp bWU7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKi8KKwlpZHggPSB0 YWJsZV9tYXBfYWxsb2NfZW50cnkobWFwKTsKKwlpZiAoaWR4ID09IFRSQUNLX1RBQkxFX01VVEFU SU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlpbnQgYjsKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2 aWN0IGFuIGVudHJ5ICovCisJCS8qIEZvciBzaW1wbGljaXR5LCBqdXN0IHVzZSB0aGUgZmlyc3Qg ZW50cnkgaW4gZmlyc3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBiIDwgbWFw LT5udW1fYnVja2V0czsgYisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCQkJeworCQkJCWludCB2aWN0aW0gPSBidWNrZXRz W2JdOworCQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9t YXBfZnJlZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2Vu dHJ5KG1hcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJ CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0ZSBlbnRy eSBmb3IgdGFibGUgb2lkICVkIChkYm9pZCAlZCkiLAorCQkJCQkJCXRhYmxlX29pZCwgZGJvaWQp KSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAqLwor CWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRib2lk ID0gZGJvaWQ7CisJZW50cmllc1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5sYXN0 X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tl dCBjaGFpbiAqLworCWVudHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tl dHNbYnVja2V0XSA9IGlkeDsKKworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tf dGFibGVfbXV0YXRpb246IG1hcmtlZCB0YWJsZSBvaWQgJWQgKGRib2lkICVkKSBhcyB3cml0dGVu IiwKKwkJCQkJdGFibGVfb2lkLCBkYm9pZCkpKTsKK30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVk IGVudHJpZXMgZnJvbSB0aGUgdGFibGUgbWFwCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sg aGVsZAorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2NsZWFudXBfZXhwaXJlZChUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQgKmJ1Y2tl dHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICpl bnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJ aW50IHJlbW92ZWQgPSAwOworCWludCBiOworCisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKwor CWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZf cHRyID0gJmJ1Y2tldHNbYl07CisJCWludCBpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChp ZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJeworCQkJaW50NjQg ZWxhcHNlZCA9IGVsYXBzZWRfdXMoJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cp OworCisJCQlpZiAoZWxhcHNlZCA+IChpbnQ2NCl0dGxfdXMpCisJCQl7CisJCQkJLyogRW50cnkg aGFzIGV4cGlyZWQgLSByZW1vdmUgaXQgKi8KKwkJCQlpbnQgbmV4dCA9IGVudHJpZXNbaWR4XS5u ZXh0OworCQkJCSpwcmV2X3B0ciA9IG5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFw LCBpZHgpOworCQkJCWlkeCA9IG5leHQ7CisJCQkJcmVtb3ZlZCsrOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCXByZXZfcHRyID0gJmVudHJpZXNbaWR4XS5uZXh0OworCQkJCWlkeCA9IGVudHJp ZXNbaWR4XS5uZXh0OworCQkJfQorCQl9CisJfQorCisJaWYgKHJlbW92ZWQgPiAwKQorCXsKKwkJ ZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGNsZWFu ZWQgdXAgJWQgZXhwaXJlZCB0YWJsZSBlbnRyaWVzIiwgcmVtb3ZlZCkpKTsKKwl9Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqIFF1ZXJ5IHBhcnNlIGNhY2hlIG9wZXJhdGlvbnMKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBxdWVyeSBwYXJzZSBjYWNo ZQorICovCitzdGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfaW5pdChRdWVyeVBhcnNlQ2FjaGUgKmNh Y2hlLCBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7 CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCWludCBpOworCisJY2FjaGUtPm51bV9idWNr ZXRzID0gbnVtX2J1Y2tldHM7CisJY2FjaGUtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJ Y2FjaGUtPm51bV9lbnRyaWVzID0gMDsKKwljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSAwOworCWNh Y2hlLT5scnVfaGVhZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJY2Fj aGUtPmxydV90YWlsID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWJ1 Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsKKwllbnRyaWVzID0gUVVFUllfQ0FD SEVfRU5UUklFUyhjYWNoZSk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5 ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBU UkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyogSW5pdGlhbGl6ZSBmcmVl IGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJp ZXNbaV0uaW5fdXNlID0gZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJp ZXMgLSAxKSA/IGkgKyAxIDogVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJ ZW50cmllc1tpXS5scnVfcHJldiA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisJCWVudHJpZXNbaV0ubHJ1X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYOworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0 YXRpb246IGluaXRpYWxpemVkIHF1ZXJ5IGNhY2hlIHdpdGggJWQgYnVja2V0cywgJWQgbWF4IGVu dHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBN b3ZlIGVudHJ5IHRvIGZyb250IG9mIExSVSBsaXN0IChtb3N0IHJlY2VudGx5IHVzZWQpCisgKi8K K3N0YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9scnVfdG91Y2goUXVlcnlQYXJzZUNhY2hlICpjYWNo ZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9F TlRSSUVTKGNhY2hlKTsKKworCS8qIEFscmVhZHkgYXQgaGVhZD8gKi8KKwlpZiAoY2FjaGUtPmxy dV9oZWFkID09IGlkeCkKKwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGZyb20gY3VycmVudCBwb3Np dGlvbiAqLworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X3ByZXYgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJ T05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X3ByZXZdLmxydV9u ZXh0ID0gZW50cmllc1tpZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQg IT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVz W2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWlmIChj YWNoZS0+bHJ1X3RhaWwgPT0gaWR4KQorCQljYWNoZS0+bHJ1X3RhaWwgPSBlbnRyaWVzW2lkeF0u bHJ1X3ByZXY7CisKKwkvKiBJbnNlcnQgYXQgaGVhZCAqLworCWVudHJpZXNbaWR4XS5scnVfcHJl diA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxy dV9uZXh0ID0gY2FjaGUtPmxydV9oZWFkOworCWlmIChjYWNoZS0+bHJ1X2hlYWQgIT0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tjYWNoZS0+bHJ1X2hlYWRd LmxydV9wcmV2ID0gaWR4OworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKwlpZiAoY2FjaGUtPmxy dV90YWlsID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5s cnVfdGFpbCA9IGlkeDsKK30KKworLyoKKyAqIEFkZCBlbnRyeSB0byBMUlUgbGlzdCAoYXQgaGVh ZCkKKyAqLworc3RhdGljIHZvaWQKK3F1ZXJ5X2NhY2hlX2xydV9hZGQoUXVlcnlQYXJzZUNhY2hl ICpjYWNoZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9D QUNIRV9FTlRSSUVTKGNhY2hlKTsKKworCWVudHJpZXNbaWR4XS5scnVfcHJldiA9IFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gY2Fj aGUtPmxydV9oZWFkOworCisJaWYgKGNhY2hlLT5scnVfaGVhZCAhPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYKQorCQllbnRyaWVzW2NhY2hlLT5scnVfaGVhZF0ubHJ1X3ByZXYg PSBpZHg7CisKKwljYWNoZS0+bHJ1X2hlYWQgPSBpZHg7CisKKwlpZiAoY2FjaGUtPmxydV90YWls ID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5scnVfdGFp bCA9IGlkeDsKK30KKworLyoKKyAqIFJlbW92ZSBlbnRyeSBmcm9tIExSVSBsaXN0CisgKi8KK3N0 YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9scnVfcmVtb3ZlKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUs IGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5U UklFUyhjYWNoZSk7CisKKwlpZiAoZW50cmllc1tpZHhdLmxydV9wcmV2ICE9IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2 XS5scnVfbmV4dCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKwllbHNlCisJCWNhY2hlLT5scnVf aGVhZCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25l eHQgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRy aWVzW2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWVs c2UKKwkJY2FjaGUtPmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJZW50cmll c1tpZHhdLmxydV9wcmV2ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwll bnRyaWVzW2lkeF0ubHJ1X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworfQorCisvKgorICogQWxsb2NhdGUgZW50cnkgZnJvbSBmcmVlIGxpc3QsIGV2aWN0aW5nIExS VSBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGludAorcXVlcnlfY2FjaGVfYWxsb2NfZW50cnko UXVlcnlQYXJzZUNhY2hlICpjYWNoZSkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBR VUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9C VUNLRVRTKGNhY2hlKTsKKwlpbnQgaWR4OworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAh PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWR4ID0gY2FjaGUt PmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJCWVudHJpZXNbaWR4XS5uZXh0 ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJY2FjaGUtPm51bV9lbnRy aWVzKys7CisJCXJldHVybiBpZHg7CisJfQorCisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZpY3Qg TFJVICovCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZB TElEX0lOREVYKQorCQlyZXR1cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsK KworCWlkeCA9IGNhY2hlLT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0 ICovCisJaW50IGJ1Y2tldCA9IGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoICUgY2FjaGUtPm51bV9i dWNrZXRzOworCWludCAqcHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCWludCBjdXJyID0g YnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGN1cnIgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05f SU5WQUxJRF9JTkRFWCkKKwl7CisJCWlmIChjdXJyID09IGlkeCkKKwkJeworCQkJKnByZXZfcHRy ID0gZW50cmllc1tjdXJyXS5uZXh0OworCQkJYnJlYWs7CisJCX0KKwkJcHJldl9wdHIgPSAmZW50 cmllc1tjdXJyXS5uZXh0OworCQljdXJyID0gZW50cmllc1tjdXJyXS5uZXh0OworCX0KKworCS8q IFJlbW92ZSBmcm9tIExSVSBsaXN0ICovCisJcXVlcnlfY2FjaGVfbHJ1X3JlbW92ZShjYWNoZSwg aWR4KTsKKworCS8qIFJlaW5pdGlhbGl6ZSBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5pbl91c2Ug PSB0cnVlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJ RF9JTkRFWDsKKworCXJldHVybiBpZHg7Cit9CisKKy8qCisgKiBMb29rIHVwIGEgcXVlcnkgaW4g dGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbnQKK3F1ZXJ5X2NhY2hlX2xvb2t1cChRdWVyeVBhcnNl Q2FjaGUgKmNhY2hlLCB1aW50NjQgaGFzaCkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNI RV9CVUNLRVRTKGNhY2hlKTsKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNI RV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0 czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBUUkFDS19U QUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5xdWVy eV9oYXNoID09IGhhc2gpCisJCQlyZXR1cm4gaWR4OworCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4 dDsKKwl9CisKKwlyZXR1cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUXVlcnkgbm9ybWFsaXphdGlvbgorICogLS0tLS0t LS0tLS0tLS0tLQorICovCisKKy8qCisgKiBTaW1wbGUgcXVlcnkgbm9ybWFsaXphdGlvbjoKKyAq IC0gU3RyaXAgY29tbWVudHMgKC0tIHN0eWxlIGFuZCBDLXN0eWxlIGJsb2NrIGNvbW1lbnRzKQor ICogLSBDb2xsYXBzZSB3aGl0ZXNwYWNlCisgKiAtIENvbnZlcnQgdG8gbG93ZXJjYXNlIChleGNl cHQgaW5zaWRlIHN0cmluZ3MpCisgKiAtIFJlcGxhY2UgbGl0ZXJhbCB2YWx1ZXMgd2l0aCBwbGFj ZWhvbGRlcnMKKyAqCisgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIC0gcGdwb29sMiBh bHJlYWR5IGRvZXMgdGhpcyBlbHNld2hlcmUsCisgKiBidXQgd2UgbmVlZCBhIHN0YW5kYWxvbmUg dmVyc2lvbiBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUuCisgKi8KK3N0YXRp YyBzaXplX3QKK25vcm1hbGl6ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeSwgY2hhciAqb3V0cHV0 LCBzaXplX3Qgb3V0cHV0X3NpemUpCit7CisJY29uc3QgY2hhciAqc3JjID0gcXVlcnk7CisJY2hh ciAqZHN0ID0gb3V0cHV0OworCWNoYXIgKmRzdF9lbmQgPSBvdXRwdXQgKyBvdXRwdXRfc2l6ZSAt IDE7CisJYm9vbCBpbl9zdHJpbmcgPSBmYWxzZTsKKwljaGFyIHN0cmluZ19jaGFyID0gMDsKKwli b29sIGxhc3Rfd2FzX3NwYWNlID0gdHJ1ZTsgIC8qIFN0YXJ0IHRydWUgdG8gc2tpcCBsZWFkaW5n IHNwYWNlICovCisKKwl3aGlsZSAoKnNyYyAmJiBkc3QgPCBkc3RfZW5kKQorCXsKKwkJLyogSGFu ZGxlIHN0cmluZyBsaXRlcmFscyAqLworCQlpZiAoaW5fc3RyaW5nKQorCQl7CisJCQlpZiAoKnNy YyA9PSBzdHJpbmdfY2hhcikKKwkJCXsKKwkJCQlpZiAoKihzcmMgKyAxKSA9PSBzdHJpbmdfY2hh cikKKwkJCQl7CisJCQkJCS8qIEVzY2FwZWQgcXVvdGUgKi8KKwkJCQkJc3JjICs9IDI7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKwkJCQlpbl9zdHJpbmcgPSBmYWxzZTsKKwkJCQkqZHN0KysgPSAn JCc7ICAvKiBSZXBsYWNlIHN0cmluZyBjb250ZW50IHdpdGggcGxhY2Vob2xkZXIgKi8KKwkJCX0K KwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDaGVjayBmb3Igc3RyaW5nIHN0 YXJ0ICovCisJCWlmICgqc3JjID09ICdcJycgfHwgKnNyYyA9PSAnIicpCisJCXsKKwkJCWluX3N0 cmluZyA9IHRydWU7CisJCQlzdHJpbmdfY2hhciA9ICpzcmM7CisJCQlzcmMrKzsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNpbmdsZS1saW5lIGNvbW1lbnRzICovCisJCWlmICgq c3JjID09ICctJyAmJiAqKHNyYyArIDEpID09ICctJykKKwkJeworCQkJd2hpbGUgKCpzcmMgJiYg KnNyYyAhPSAnXG4nKQorCQkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5k bGUgbXVsdGktbGluZSBjb21tZW50cyAqLworCQlpZiAoKnNyYyA9PSAnLycgJiYgKihzcmMgKyAx KSA9PSAnKicpCisJCXsKKwkJCXNyYyArPSAyOworCQkJd2hpbGUgKCpzcmMgJiYgISgqc3JjID09 ICcqJyAmJiAqKHNyYyArIDEpID09ICcvJykpCisJCQkJc3JjKys7CisJCQlpZiAoKnNyYykKKwkJ CQlzcmMgKz0gMjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHdoaXRlc3BhY2Ug Ki8KKwkJaWYgKCpzcmMgPT0gJyAnIHx8ICpzcmMgPT0gJ1x0JyB8fCAqc3JjID09ICdcbicgfHwg KnNyYyA9PSAnXHInKQorCQl7CisJCQlpZiAoIWxhc3Rfd2FzX3NwYWNlKQorCQkJeworCQkJCSpk c3QrKyA9ICcgJzsKKwkJCQlsYXN0X3dhc19zcGFjZSA9IHRydWU7CisJCQl9CisJCQlzcmMrKzsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIG51bWJlcnMgLSByZXBsYWNlIHdpdGgg cGxhY2Vob2xkZXIgKi8KKwkJaWYgKCgqc3JjID49ICcwJyAmJiAqc3JjIDw9ICc5JykgfHwKKwkJ CSgqc3JjID09ICcuJyAmJiAqKHNyYyArIDEpID49ICcwJyAmJiAqKHNyYyArIDEpIDw9ICc5Jykp CisJCXsKKwkJCXdoaWxlICgqc3JjICYmICgoKnNyYyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8 ICpzcmMgPT0gJy4nKSkKKwkJCQlzcmMrKzsKKwkJCWlmICghbGFzdF93YXNfc3BhY2UgJiYgZHN0 ID4gb3V0cHV0ICYmICooZHN0IC0gMSkgIT0gJyQnKQorCQkJCSpkc3QrKyA9ICckJzsKKwkJCWxh c3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlZ3VsYXIg Y2hhcmFjdGVyIC0gY29udmVydCB0byBsb3dlcmNhc2UgKi8KKwkJaWYgKCpzcmMgPj0gJ0EnICYm ICpzcmMgPD0gJ1onKQorCQkJKmRzdCsrID0gKnNyYyArIDMyOworCQllbHNlCisJCQkqZHN0Kysg PSAqc3JjOworCisJCWxhc3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCXNyYysrOworCX0KKworCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworCWlmIChkc3QgPiBvdXRwdXQgJiYgKihkc3QgLSAx KSA9PSAnICcpCisJCWRzdC0tOworCisJKmRzdCA9ICdcMCc7CisJcmV0dXJuIGRzdCAtIG91dHB1 dDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBpbXBsZW1lbnRhdGlv bgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW1fc2l6ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJaW50IHRhYmxlX2J1 Y2tldHMgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsK KwlpbnQgdGFibGVfc2l6ZSA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplOworCWludCBxdWVyeV9idWNrZXRzID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211 dGF0aW9uX3F1ZXJ5X2J1Y2tldHM7CisJaW50IHF1ZXJ5X2NhY2hlX3NpemUgPSBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsKKworCS8qIE1h aW4gc3RydWN0dXJlICovCisJc2l6ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0p OworCisJLyogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAqLworCXNpemUgKz0gc2l6ZW9mKFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7CisJc2l6ZSArPSB0YWJsZV9idWNrZXRzICogc2l6 ZW9mKGludCk7ICAvKiBidWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSB0YWJsZV9zaXplICogc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5KTsgIC8qIGVudHJpZXMgYXJyYXkgKi8KKworCS8q IFF1ZXJ5IHBhcnNlIGNhY2hlICovCisJc2l6ZSArPSBzaXplb2YoUXVlcnlQYXJzZUNhY2hlKTsK KwlzaXplICs9IHF1ZXJ5X2J1Y2tldHMgKiBzaXplb2YoaW50KTsgIC8qIGJ1Y2tldHMgYXJyYXkg Ki8KKwlzaXplICs9IHF1ZXJ5X2NhY2hlX3NpemUgKiBzaXplb2YoUXVlcnlQYXJzZUVudHJ5KTsg IC8qIGVudHJpZXMgYXJyYXkgKi8KKworCXJldHVybiBzaXplOworfQorCit2b2lkCitwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJ U2l6ZSBzaG1lbV9zaXplOworCWNoYXIgKnNobWVtX3B0cjsKKworCWlmIChwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JB TCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0 aW9uOiBmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCXNobWVtX3NpemUg PSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKTsKKworCS8qCisJICogQWxs b2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisJICogTWVtb3J5IGlz IGFscmVhZHkgemVyb2VkIGJ5IGluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQo KS4KKwkgKi8KKwlzaG1lbV9wdHIgPSBwb29sX3NoYXJlZF9tZW1vcnlfc2VnbWVudF9nZXRfY2h1 bmsoc2htZW1fc2l6ZSk7CisJaWYgKHNobWVtX3B0ciA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogZmFpbGVkIHRvIGFsbG9j YXRlICV6dSBieXRlcyBvZiBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJCXNobWVtX3NpemUpKSk7CisJ CXJldHVybjsKKwl9CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB3aXRoaW4g c2hhcmVkIG1lbW9yeSAqLworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID0gKFRyYWNrVGFi bGVNdXRhdGlvblNobWVtICopc2htZW1fcHRyOworCXNobWVtX3B0ciArPSBzaXplb2YoVHJhY2tU YWJsZU11dGF0aW9uU2htZW0pOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxl X21hcCA9IChUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKilzaG1lbV9wdHI7CisJc2htZW1f cHRyICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNobWVtX3B0ciAr PSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyAqIHNpemVv ZihpbnQpOworCXNobWVtX3B0ciArPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25f dGFibGVfc2l6ZSAqIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwl0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGUgPSAoUXVlcnlQYXJzZUNhY2hlICopc2ht ZW1fcHRyOworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJdGFibGVfbWFwX2luaXQo dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcCwKKwkJCQkgICBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cywKKwkJCQkgICBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSk7CisKKwlxdWVyeV9jYWNoZV9pbml0 KHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSwKKwkJCQkJIHBvb2xfY29u ZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzLAorCQkJCQkgcG9vbF9jb25m aWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUpOworCisJLyog SW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8KKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+ c3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZS5jdXJyZW50X3R0bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VT OworCWdldF9jdXJyZW50X3RpbWUoJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS50 dGxfbGFzdF91cGRhdGVkKTsKKwlnZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlv bl9zaG1lbS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUpOworCXRyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgPSAwOworCXRyYWNr X3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91 c2VjID0gMDsKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfcXVlcmll c19jaGVja2VkID0gMDsKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNf Zm9yY2VkX3ByaW1hcnkgPSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5z dGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0 cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgd2l0aCAlenUgYnl0ZXMgc2hhcmVkIG1l bW9yeSIsCisJCQkJCXNobWVtX3NpemUpKSk7CisjZW5kaWYKK30KKwordm9pZAorcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KHZvaWQpCit7CisJaWYgKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFM IHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWdl dF9jdXJyZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGltZSk7CisJY29sZF9zdGFydF9pbml0aWFs aXplZCA9IHRydWU7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxl X211dGF0aW9uOiBjaGlsZCBpbml0aWFsaXplZCwgY29sZCBzdGFydCBwZXJpb2QgJWQgbXMiLAor CQkJCQlwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlv bikpKTsKK30KKworYm9vbAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0 KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludDY0IGVsYXBzZWRfbXM7CisKKwlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl9jb2xkX3N0YXJ0X2R1cmF0aW9uIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWdldF9jdXJy ZW50X3RpbWUoJm5vdyk7CisKKwkvKiBDaGVjayBmb3Igd2F0Y2hkb2ctdHJpZ2dlcmVkIGdsb2Jh bCBjb2xkIHN0YXJ0IGZpcnN0ICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgIT0gMCAmJgorCQllbGFwc2VkX3Vz KCZub3csICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3Rh cnRfdW50aWwpID4gMCkKKwl7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIENoZWNrIHBlci1w cm9jZXNzIGNvbGQgc3RhcnQgKi8KKwlpZiAoIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQpCisJCXJl dHVybiBmYWxzZTsKKworCWVsYXBzZWRfbXMgPSBlbGFwc2VkX3VzKCZwcm9jZXNzX3N0YXJ0X3Rp bWUsICZub3cpIC8gMTAwMDsKKworCWlmIChlbGFwc2VkX21zIDwgcG9vbF9jb25maWctPnRyYWNr X3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24pCisJeworCQllcmVwb3J0KERFQlVH MiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW4gY29sZCBzdGFydCAoJWxk LyVkIG1zKSIsCisJCQkJCQkobG9uZyllbGFwc2VkX21zLCBwb29sX2NvbmZpZy0+dHJhY2tfdGFi bGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3Ry aWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJ aW50IGR1cmF0aW9uX21zOworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWR1cmF0aW9uX21zID0gcG9vbF9j b25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1 cmF0aW9uX21zIDw9IDApCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJ dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGls ID0gbm93OworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9z dGFydF91bnRpbC50dl9zZWMgKz0gZHVyYXRpb25fbXMgLyAxMDAwOworCXRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjICs9IChk dXJhdGlvbl9tcyAlIDEwMDApICogMTAwMDsKKwlpZiAodHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgPj0gMTAwMDAwMCkKKwl7 CisJCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91 bnRpbC50dl9zZWMgKz0KKwkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9i YWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjIC8gMTAwMDAwMDsKKwkJdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgJT0KKwkJ CTEwMDAwMDA7CisJfQorCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9t dXRhdGlvbjogZW50ZXJpbmcgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yICVkIG1zIiwKKwkJCQkJZHVy YXRpb25fbXMpKSk7Cit9CisKK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf aXNfc3RhbGUoaW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlv bkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl1aW50NjQgdHRsX3VzOwor CXVpbnQzMiBoYXNoOworCWludCBpZHg7CisJYm9vbCBpc19zdGFsZSA9IGZhbHNlOworCisJaWYg KHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxf QURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKworCWlmICh0YWJsZV9vaWQgPD0gMCB8fCBkYm9pZCA8PSAwKQorCXsK KwkJaXNfc3RhbGUgPSB0cnVlOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwltYXAgPSB0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWhhc2ggPSBmbnYxYV9oYXNo X3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwlp ZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfb2lkLCBkYm9pZCwgaGFzaCk7CisJaWYg KGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJVHJhY2tU YWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCQln ZXRfY3VycmVudF90aW1lKCZub3cpOworCQl0dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbS0+c3RhdGUuY3VycmVudF90dGxfdXM7CisKKwkJaW50NjQgZWxhcHNlZCA9IGVsYXBzZWRf dXMoJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChl bGFwc2VkIDwgKGludDY0KXR0bF91cyk7CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1z ZygidHJhY2tfdGFibGVfbXV0YXRpb246IHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIGVsYXBzZWQ9 JWxkIHVzLCB0dGw9JWx1IHVzLCBzdGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLCAo bG9uZyllbGFwc2VkLCAodW5zaWduZWQgbG9uZyl0dGxfdXMsIGlzX3N0YWxlKSkpOworCX0KKwor CXRhYmxlX21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0 aWNzIC0gc2tpcCBpZiBzaG1lbSBub3QgYXZhaWxhYmxlICovCisJaWYgKHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtICE9IE5VTEwpCisJeworCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCwgMSk7CisJ CWlmIChpc19zdGFsZSkKKwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZ0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfZm9yY2VkX3ByaW1hcnksIDEpOworCQllbHNlCisJCQlf X3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0 YXRzX2FsbG93ZWRfcmVwbGljYSwgMSk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxlOworfQorCit2 b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oY29uc3Qg aW50ICp0YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgaTsK KworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCB8fCB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29pZHMgPT0g TlVMTCB8fCBkYm9pZCA8PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwl0YWJs ZV9tYXBfbG9jaygpOworCisJLyogUGVyaW9kaWNhbGx5IGNsZWFuIHVwIGV4cGlyZWQgZW50cmll cyAqLworCWlmIChtYXAtPm51bV9lbnRyaWVzID4gbWFwLT5tYXhfZW50cmllcyAqIDMgLyA0KQor CXsKKwkJLyogTGltaXQgY2xlYW51cCBmcmVxdWVuY3kgdG8gYXZvaWQgTyhOKSBzY2FuIG9uIGV2 ZXJ5IHdyaXRlICovCisJCS8qIDEwMG1zIGludGVydmFsICovCisJCWlmIChlbGFwc2VkX3VzKCZ0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUsICZub3cp ID4gMTAwMDAwKQorCQl7CisJCQl0YWJsZV9tYXBfY2xlYW51cF9leHBpcmVkKG1hcCwgdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzKTsKKwkJCXRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5sYXN0X2NsZWFudXBfdGltZSA9IG5vdzsKKwkJfQor CX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fdGFibGVzOyBpKyspCisJeworCQl1aW50MzIgaGFz aDsKKwkJaW50IHRhYmxlX29pZCA9IHRhYmxlX29pZHNbaV07CisKKwkJaWYgKHRhYmxlX29pZCA+ IDApCisJCXsKKwkJCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lk KTsKKwkJCXRhYmxlX21hcF9pbnNlcnQobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoLCAmbm93 KTsKKwkJfQorCX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIENvbnZlbmll bmNlIGZ1bmN0aW9uIHRvIG1hcmsgYSBzaW5nbGUgdGFibGUgYXMgd3JpdHRlbgorICovCit2b2lk Citwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbihpbnQgdGFibGVf b2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsK KwkJY29uc3QgaW50IHRhYmxlc1sxXSA9IHsgdGFibGVfb2lkIH07CisJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbih0YWJsZXMsIDEsIGRib2lkKTsKKwl9Cit9 CisKK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVs YXlfdXMpCit7CisJdWludDY0IG5ld190dGw7CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2FsY3Vs YXRlIG5ldyBUVEw6IGRlbGF5ICogZmFjdG9yLCB3aXRoIG1pbmltdW0gb2YgZGVmYXVsdCBUVEwg Ki8KKwluZXdfdHRsID0gKHVpbnQ2NCkoZGVsYXlfdXMgKiBwb29sX2NvbmZpZy0+dHJhY2tfdGFi bGVfbXV0YXRpb25fdHRsX2ZhY3Rvcik7CisJaWYgKG5ld190dGwgPCBUUkFDS19UQUJMRV9NVVRB VElPTl9ERUZBVUxUX1RUTF9VUykKKwkJbmV3X3R0bCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RF RkFVTFRfVFRMX1VTOworCisJLyogTWF4aW11bSBUVEwgb2YgMSBob3VyICovCisJaWYgKG5ld190 dGwgPiAzNjAwVUxMICogMTAwMDAwMFVMTCkKKwkJbmV3X3R0bCA9IDM2MDBVTEwgKiAxMDAwMDAw VUxMOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3Vz ID0gbmV3X3R0bDsKKwlnZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+c3RhdGUudHRsX2xhc3RfdXBkYXRlZCk7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJt c2coInRyYWNrX3RhYmxlX211dGF0aW9uOiB1cGRhdGVkIFRUTCB0byAlbHUgdXMgKGRlbGF5PSVs dSB1cywgZmFjdG9yPSUuMWYpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3R0bCwgKHVuc2ln bmVkIGxvbmcpZGVsYXlfdXMsCisJCQkJCXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl90dGxfZmFjdG9yKSkpOworfQorCitib29sCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dl dF9jYWNoZWRfcGFyc2UodWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkgY2hh ciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJ CQkJCQkJIGludCAqbnVtX3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlOworCWlu dCBpZHg7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxl X2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWNh Y2hlID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hlOworCisJcXVlcnlf Y2FjaGVfbG9jaygpOworCisJaWR4ID0gcXVlcnlfY2FjaGVfbG9va3VwKGNhY2hlLCBoYXNoKTsK KwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlR dWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwkJ aW50IGk7CisKKwkJKmlzX3dyaXRlID0gZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3Rh YmxlcyA9IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRy aWVzW2lkeF0ubnVtX3RhYmxlcyAmJiBpIDwgVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxF U19QRVJfUVVFUlk7IGkrKykKKwkJeworCQkJc3RybGNweSh0YWJsZV9uYW1lc1tpXSwgZW50cmll c1tpZHhdLnRhYmxlX25hbWVzW2ldLCBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xF Tik7CisJCX0KKworCQkvKiBNb3ZlIHRvIGZyb250IG9mIExSVSAqLworCQlxdWVyeV9jYWNoZV9s cnVfdG91Y2goY2FjaGUsIGlkeCk7CisJCWZvdW5kID0gdHJ1ZTsKKwl9CisKKwlxdWVyeV9jYWNo ZV91bmxvY2soKTsKKworCXJldHVybiBmb3VuZDsKK30KKwordm9pZAorcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193cml0ZSwKKwkJCQkJ CQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFN RV9MRU5dLAorCQkJCQkJCWludCBudW1fdGFibGVzKQoreworCVF1ZXJ5UGFyc2VDYWNoZSAqY2Fj aGU7CisJaW50ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllczsKKwlpbnQgaWR4 OworCWludCBidWNrZXQ7CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY2FjaGUgPSB0cmFja190YWJsZV9t dXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlxdWVyeV9jYWNoZV9sb2NrKCk7CisKKwkv KiBDaGVjayBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHF1ZXJ5X2NhY2hlX2xvb2t1cChj YWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYKQorCXsKKwkJcXVlcnlfY2FjaGVfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBB bGxvY2F0ZSBuZXcgZW50cnkgKG1heSBldmljdCBMUlUpICovCisJaWR4ID0gcXVlcnlfY2FjaGVf YWxsb2NfZW50cnkoY2FjaGUpOworCWlmIChpZHggPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5W QUxJRF9JTkRFWCkKKwl7CisJCXF1ZXJ5X2NhY2hlX3VubG9jaygpOworCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0 ZSBxdWVyeSBjYWNoZSBlbnRyeSIpKSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyaWVzID0gUVVF UllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJYnVja2V0cyA9IFFVRVJZX0NBQ0hFX0JVQ0tFVFMo Y2FjaGUpOworCisJLyogRmlsbCBpbiBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5xdWVyeV9oYXNo ID0gaGFzaDsKKwllbnRyaWVzW2lkeF0uaXNfd3JpdGUgPSBpc193cml0ZTsKKwllbnRyaWVzW2lk eF0ubnVtX3RhYmxlcyA9IChudW1fdGFibGVzID4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RB QkxFU19QRVJfUVVFUlkpID8KKwkJCQkJCQkgIFRSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJM RVNfUEVSX1FVRVJZIDogbnVtX3RhYmxlczsKKworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7 IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3RhYmxlczsgaSsrKQorCQl7CisJCQlzdHJsY3B5KGVudHJp ZXNbaWR4XS50YWJsZV9uYW1lc1tpXSwgdGFibGVfbmFtZXNbaV0sIFRSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX05BTUVfTEVOKTsKKwkJfQorCX0KKworCS8qIEluc2VydCBpbnRvIGhhc2ggYnVj a2V0ICovCisJYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwllbnRyaWVzW2lk eF0ubmV4dCA9IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwkv KiBBZGQgdG8gTFJVIGxpc3QgKi8KKwlxdWVyeV9jYWNoZV9scnVfYWRkKGNhY2hlLCBpZHgpOwor CisJcXVlcnlfY2FjaGVfdW5sb2NrKCk7Cit9CisKK3VpbnQ2NAorcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl9ub3JtYWxpemVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkpCit7CisJY2hhciBu b3JtYWxpemVkWzgxOTJdOworCXNpemVfdCBsZW47CisKKwlpZiAocXVlcnkgPT0gTlVMTCB8fCBx dWVyeVswXSA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG5vcm1hbGl6ZV9xdWVyeShx dWVyeSwgbm9ybWFsaXplZCwgc2l6ZW9mKG5vcm1hbGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJ CXJldHVybiAwOworCisJcmV0dXJuIGZudjFhX2hhc2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30K LS0gCjIuNTMuMAoK --000000000000baf5c8064b2b4904--