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 1wevgI-0058hS-18 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Jul 2026 14:12:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wevgH-00E3RH-0h for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Jul 2026 14:12:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wevgG-00E3R8-28 for pgsql-hackers@lists.postgresql.org; Wed, 01 Jul 2026 14:12:48 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wevgD-00000001Coi-2L1u for pgsql-hackers@lists.postgresql.org; Wed, 01 Jul 2026 14:12:47 +0000 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-5aeb77b3afbso679719e87.1 for ; Wed, 01 Jul 2026 07:12:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782915164; cv=none; d=google.com; s=arc-20260327; b=EC7gf35z8+RGqcah0j5Ohz8xEpJ45tlvZ841d5fW1lp1ABznq+eXUUhHsM9MwgX75Z Yn7PcnmJSZ86M+WIrDundUB2/nrtbVHH7gQIlfJh3D2qbHl4a1LHNNKXzZd3qk7LbUc8 Al/WFMy2kNmjBoafyZ5eqJMGalUS4NXHcY8B2d/ZtLJZJct1Enunv503LBhx2tcPnqWG vSz1FjJovNSUkRUjkj/FNMGdAnaUfGiwEd7dJoAduHXc4bJPjWP5CYCqVfFd5trwheK1 f28X+6rOaHdHmuAjPCwPyAJFgZYVc5qyAQzVAluhWpC9x7BaJzZJmJWKoDYesAyOLGrT z2ag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=3QqIoCmCVjvogdJx+5nz9HLeLotbAP4AMsR4pYNdid8=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=Ha8Tq2bBoJsBypSiQc9NJ/A0ep8DVzIC7VTkLFDcSbjVUd5/jI57SYDqwrPJzvwB5c tN07u4OnMAKZhwqzA8hpvHWCXG2JP8iXERczI7jUuoINlLmkIePG/DKscfKtdgFqU+x1 LMvm3bVPxmoXoczvVR1x+QuoRBYQF94VFM8E4St1XzRu5O2bmboYW1JPYTUM4bnxcsLM GDpAadXewdG//3z6E/BEMcvF/k7jvgArOr5hDIbybGSOOxFaes1XvJuZSTlc1eFKHkCY eMEAbAtYFZTHUhHtLA+4/KbNl9HMYMVFlq+iv2lMTtl8MwVfUnn0cgokCEEBXid6BqQB TxJw==; 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=enterprisedb.com; s=google; t=1782915164; x=1783519964; 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=3QqIoCmCVjvogdJx+5nz9HLeLotbAP4AMsR4pYNdid8=; b=LrhKdJA2XyGeKsbCPYuxqCUF4F6I9wwkq393BSqbpQFegp68hrmYhWw3VyE1x5xm72 oflF8NuY9Cbvi3gL3y76eknRriet1JLRyca8D9sSykBxqza+niAnX6BcUu1ecVYUTbmh mDaB8R9hTDpefHlQ2e/RVdMZilvdZ+H2F2aU+2rh59TpRx+bMGCfVZV5rpKDIlhFMhg9 jN5BsnWPDv0kRPIvgY0L0pjme4RcXq3BsiR3H6MV0Fnm93j7jkju5QGezOAMHSAfFUCP JoBZ5OoC7gCYo2SKbLFAPz/BJ++/4tcW15C7SVEIN5EswaQXFFL446ntPx/nE+OYLXAf YfEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782915164; x=1783519964; 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=3QqIoCmCVjvogdJx+5nz9HLeLotbAP4AMsR4pYNdid8=; b=X4GZzgbVzq7WHP33k5hatmETleK6WsZDc5iv+yY6zbG7G2wsi/curtf4xJ5oTGMF2Y L57hwQ3ahABW8nXsUOzank0klteRBuD1xQ3xeJnZzkkXyjWawfSRww1dKWjje/m+D7e0 HOqqQzSZuVKxH2S6/xNWyJbEO2lgbn0ahYsciXHdVQI9dxfI0/W5iDNvz6hWFfFZB0vV Hf0cZ0vSntJCF7SpAt4Ni5togd2/PN3YnD/ReuNWN53NFU1ReI8m5nbtKetlrM0Z9hQQ 0wOF9JOZJVQe0LvtBrtGW60nMQMoWlgmrlbNnF0UafNcWDONaALGKAzEpXyOBh9+lXQl b0jQ== X-Gm-Message-State: AOJu0YyxJJ7MXVwt1oDSdUEwtZZZgYV5JZSY4lTfFykI7/zVA4H6KKgl ceO1W1JP+rcY13b5lFMyhu/H/fu1gvOret/imkDEkJi3zCeb45I1eul5GWwCfFv9MR2q7eoPINF /eZuLBuY8bEZt4/ReMTeZ+9BJGItVpLLU781ciRH9 X-Gm-Gg: AfdE7cl/c679uM823mlpX4Cw2Y7cuR7EqsszD5yVI9VUvRcQPINA4Hu1xUIoAqbLEJm WHLmTj2Ccw8cgIzZuM+ZGhVlSf9upQEshfPkWPXW873k7SzX7lI7uOKJarq7n7BobDICgXB5RiY TZmLW5e4av2kJY7MnYHmGf/j28kAIq/mZ16zRlF5t1hVdP3Xg5kFftIdVVEllD5JEJWRQHBgg7Z ud4+slziYgLzwIe6ua6PdiWUd+jhsJawPMcvhPfrZrofHHT7IuWkK6YWKX7Ri8wbKYbDsdZMg== X-Received: by 2002:a05:6512:4287:b0:5aa:6290:f78d with SMTP id 2adb3069b0e04-5aec67a29c4mr509189e87.2.1782915163882; Wed, 01 Jul 2026 07:12:43 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Wed, 1 Jul 2026 19:42:31 +0530 X-Gm-Features: AVVi8CdMqQIe2nVTzjqO3x3xcod1QJcf2ww3NpskDwtjQy2deWMHzqtxKWUm8rc Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Zsolt Parragi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000234a106558d494b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000234a106558d494b Content-Type: multipart/alternative; boundary="0000000000000234a106558d4949" --0000000000000234a106558d4949 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the continued review. I've rebased and updated the patch. Andrew's commit replaced the VARIADIC text[] option interface on pg_get_role_ddl(), pg_get_tablespace_ddl(), and pg_get_database_ddl() with typed named boolean parameters. pg_get_table_ddl() now follows the exact same convention: pretty, owner, tablespace, and schema_qualified are plain boolean parameters with DEFAULT values, using PG_GETARG_BOOL() directly rather than parse_ddl_options(). The shared DdlOptType / DdlOption / parse_ddl_options infrastructure is gone entirely. *Filtering parameters:* *only_kinds* / *except_kinds* as text[] Based on review feedback the filtering parameters(*include/exclude*) have been revised: The two mutually-exclusive filter arguments are now named *only_kinds* and *except_kinds* (matching the SQL set-operation vocabulary) and take text[] rather than a comma-separated text value (e.g. only_kinds =3D> ARRAY['index','foreign_key']). This provides type safety and allows named-argument syntax. *Note*: only and except are the keywords, and I couldn't find any better name. Suggestions are welcome. The *v14* patch is ready for review/test. On Tue, Jun 30, 2026 at 3:01=E2=80=AFAM Zsolt Parragi wrote: > Hello > > I noticed that there's an inconsistency with schema qualification, if > the schema is in the search path: > > CREATE SCHEMA s; > CREATE TABLE s.parent (id int PRIMARY KEY); > CREATE TABLE s.t (id int PRIMARY KEY, pid int REFERENCES s.parent(id), > name text); > CREATE INDEX t_name_idx ON s.t (name); > CREATE STATISTICS s.t_stat ON id, pid FROM s.t; > SET search_path =3D s, public; > SELECT pg_get_table_ddl('s.t', 'owner', 'false'); > > outputs: > > CREATE TABLE s.t (id integer NOT NULL, pid integer, name text); > CREATE INDEX t_name_idx ON t USING btree (name); -- should be s.t > ALTER TABLE s.t ADD CONSTRAINT t_pid_fkey FOREIGN KEY (pid) REFERENCES > parent(id); -- should be s.parent > ALTER TABLE s.t ADD CONSTRAINT t_pkey PRIMARY KEY (id); > CREATE STATISTICS t_stat ON id, pid FROM t; -- should be s.t > > > In the included testcase: > > +drop cascades to view v > +drop cascades to sequence s > +ERROR: relation "parted_range_1" already exists > +CONTEXT: SQL statement "CREATE TABLE pgtbl_ddl_test.parted_range_1 > PARTITION OF pgtbl_ddl_test.parted_range FOR VALUES FROM (0) TO > (100);" > +PL/pgSQL function inline_code_block line 22 at EXECUTE > > is this error expected, doesn't it break the test? > > > --0000000000000234a106558d4949 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0Thanks for the continued review. I've rebased an= d updated the patch.
=C2=A0=C2=A0
Andrew's commit replaced the VARIADIC text[] option interfac= e on=C2=A0pg_get_role_d= dl(), pg_get_tablespace_ddl(), and pg_get_database_ddl()=C2=A0with typed named boolean parameters.= pg_get_table_ddl() now follows=C2=A0the exact same convention: pretty, owner, tablespace, and=C2= =A0schema_qualified are= plain boolean parameters with DEFAULT values, using=C2=A0PG_GETARG_BOOL() directly rather than pa= rse_ddl_options().=C2=A0 The shared=C2=A0DdlOptType / DdlOption / parse_ddl_options infrastructure= is gone=C2=A0entirely.=

<= /div>
Filtering parameters: only_kinds / except_kinds as text[]<= /span>=C2=A0
Based = on review feedback the filtering parameters(include/exclude) have be= en revised:
The two mutually-exclusive filter arguments are now n= amed only_kinds and except_kinds (matching the SQL set-operat= ion vocabulary) and take text[] rather than a comma-separated text value (e= .g. only_kinds =3D> ARRAY['index','foreign_key']).=C2=A0= This provides type safety and allows named-argument syntax.=C2=A0

<= b>Note
: only and except are the keywords, and I couldn't find any b= etter name. Suggestions are welcome.=C2=A0

The=C2=A0v14=C2=A0= patch is ready for review/test.

On Tue, Jun 30, 2026 at 3:01=E2= =80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
Hello

I noticed that there's an inconsistency with schema qualification, if the schema is in the search path:

CREATE SCHEMA s;
CREATE TABLE s.parent (id int PRIMARY KEY);
CREATE TABLE s.t (id int PRIMARY KEY, pid int REFERENCES s.parent(id),
name text);
CREATE INDEX t_name_idx ON s.t (name);
CREATE STATISTICS s.t_stat ON id, pid FROM s.t;
SET search_path =3D s, public;
SELECT pg_get_table_ddl('s.t', 'owner', 'false');
outputs:

CREATE TABLE s.t (id integer NOT NULL, pid integer, name text);
CREATE INDEX t_name_idx ON t USING btree (name); -- should be s.t
ALTER TABLE s.t ADD CONSTRAINT t_pid_fkey FOREIGN KEY (pid) REFERENCES
parent(id); -- should be s.parent
ALTER TABLE s.t ADD CONSTRAINT t_pkey PRIMARY KEY (id);
CREATE STATISTICS t_stat ON id, pid FROM t; -- should be s.t


In the included testcase:

+drop cascades to view v
+drop cascades to sequence s
+ERROR:=C2=A0 relation "parted_range_1" already exists
+CONTEXT:=C2=A0 SQL statement "CREATE TABLE pgtbl_ddl_test.parted_rang= e_1
PARTITION OF pgtbl_ddl_test.parted_range FOR VALUES FROM (0) TO
(100);"
+PL/pgSQL function inline_code_block line 22 at EXECUTE

is this error expected, doesn't it break the test?


--0000000000000234a106558d4949-- --0000000000000234a106558d494b Content-Type: application/octet-stream; name="v14-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v14-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr25jpu60 RnJvbSBlNDY3ZGYxOWIwODA3Y2E0MzUxYmU1YzlhZDI0NmQzOTU5OTI5YzVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxNF0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM IChpbmNsdWRpbmcgbmFtZWQgTk9UIE5VTEwgY29uc3RyYWludHMpLCBhbmQKcGVyLWNvbHVtbiBh dHRvcHRpb25zIGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KClN1cHBvcnRlZCB0 YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRTLCBQQVJUSVRJT04gQlkgKFJB TkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBPRiBwYXJlbnQgRk9SIFZBTFVF UyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVGQVVMVCksIFVTSU5HIHRhYmxl IGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgaW5saW5l IENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZSBDUkVBVEUKVEFCTEUgYm9keS4KClN1cHBvcnRlZCBz dWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBoZWxwZXJzIGZyb20KcnVsZXV0 aWxzLmMpOiBpbmRleGVzIChpbmNsdWRpbmcgcGFydGlhbCBhbmQgZnVuY3Rpb25hbCkgdmlhCnBn X2dldF9pbmRleGRlZl9kZGw7IGNvbnN0cmFpbnRzIChQUklNQVJZIEtFWSB3aXRoIFdJVEhPVVQg T1ZFUkxBUFMgZm9yCnRlbXBvcmFsIGtleXMsIFVOSVFVRSB3aXRoIE5VTExTIE5PVCBESVNUSU5D VCBhbmQgSU5DTFVERSBjb2x1bW5zLApGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURS9VUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0ggY2xhdXNlLApOT1QgRU5GT1JDRUQgZm9yZWln biBrZXlzLCBFWENMVURFLCBuYW1lZCBOT1QgTlVMTCkgdmlhCnBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHk7IHJ1bGVzIHZpYSBwZ19nZXRfcnVsZWRlZl9kZGw7IGV4dGVuZGVkCnN0YXRpc3RpY3Mg dmlhIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbDsgUkVQTElDQSBJREVOVElUWQpOT1RISU5H L0ZVTEwvVVNJTkcgSU5ERVg7IEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CmFuZCBjaGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9w YXJ0aXRpb24gY2hpbGRyZW4uCkRETCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuIG9mIGEgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50IGlzIGFwcGVuZGVkCmFmdGVyIHRoZSBwYXJlbnQgYnkgZGVmYXVs dC4KClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9sbG93cyB0aGUgbmFtZWQtcGFyYW1ldGVyIGNv bnZlbnRpb24KZXN0YWJsaXNoZWQgYnkgcGdfZ2V0X3JvbGVfZGRsKCksIHBnX2dldF90YWJsZXNw YWNlX2RkbCgpLCBhbmQKcGdfZ2V0X2RhdGFiYXNlX2RkbCgpOgoKICBwZ19nZXRfdGFibGVfZGRs KHJlbGF0aW9uICAgICAgICAgcmVnY2xhc3MsCiAgICAgICAgICAgICAgICAgICBwcmV0dHkgICAg ICAgICAgIGJvb2xlYW4gIERFRkFVTFQgZmFsc2UsCiAgICAgICAgICAgICAgICAgICBvd25lciAg ICAgICAgICAgIGJvb2xlYW4gIERFRkFVTFQgdHJ1ZSwKICAgICAgICAgICAgICAgICAgIHRhYmxl c3BhY2UgICAgICAgYm9vbGVhbiAgREVGQVVMVCB0cnVlLAogICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCBib29sZWFuICBERUZBVUxUIHRydWUsCiAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzICAgICAgIHRleHRbXSAgIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgICAg IGV4Y2VwdF9raW5kcyAgICAgdGV4dFtdICAgREVGQVVMVCBOVUxMKQoKcHJldHR5IGNvbnRyb2xz IHByZXR0eS1wcmludGVkIG91dHB1dC4gIG93bmVyIGNvbnRyb2xzIGVtaXNzaW9uIG9mIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gc3RhdGVtZW50LiAgdGFibGVzcGFjZSBjb250cm9scyB0 aGUgVEFCTEVTUEFDRQpjbGF1c2Ugb24gQ1JFQVRFIFRBQkxFLiAgc2NoZW1hX3F1YWxpZmllZCBj b250cm9scyB3aGV0aGVyIG9iamVjdCBuYW1lcwphcmUgZW1pdHRlZCB3aXRoIHRoZWlyIHNjaGVt YSBwcmVmaXg6IHdoZW4gdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZQphY3RpdmUgc2VhcmNoX3BhdGgg aXMgdGVtcG9yYXJpbHkgbmFycm93ZWQgdG8gcGdfY2F0YWxvZyBzbyBldmVyeQpkZXBhcnNlIGhl bHBlciBwcm9kdWNlcyBmdWxseS1xdWFsaWZpZWQgbmFtZXM7IHdoZW4gZmFsc2UgaXQgaXMgbmFy cm93ZWQKdG8gdGhlIHRhcmdldCB0YWJsZSdzIG93biBzY2hlbWEgc28gc2FtZS1zY2hlbWEgcmVm ZXJlbmNlcyBjb21lIG91dAp1bnF1YWxpZmllZCB3aGlsZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNl cyByZW1haW4gcXVhbGlmaWVkIGZvcgpjb3JyZWN0bmVzcy4gIFRlbXBvcmFyeSB0YWJsZXMgYXJl IG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgp0aGlzIHNldHRpbmc6IHRoZSBU RU1QT1JBUlkga2V5d29yZCBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZAplbWl0 dGluZyBwZ190ZW1wX05OLnJlbG5hbWUgd291bGQgcHJvZHVjZSBub24tcmVwbGF5YWJsZSBEREwu CgpPYmplY3QtY2xhc3MgZmlsdGVyaW5nIHVzZXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSB0ZXh0 LWFycmF5CnBhcmFtZXRlcnMsIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcy4gIFdoZW4gb25s eV9raW5kcyBpcyBzZXQsIG9ubHkKdGhlIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiBl eGNlcHRfa2luZHMgaXMgc2V0LCBldmVyeSBraW5kCmV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgaXMg ZW1pdHRlZDsgd2hlbiBuZWl0aGVyIGlzIHNldCBldmVyeSBraW5kIGlzCmVtaXR0ZWQuICBFYWNo IGFycmF5IGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHkgd2l0aApsZWFkaW5n L3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZDsgYW4gdW5yZWNvZ25pemVkIG5hbWUgcmFpc2Vz IGFuCmVycm9yLiAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpczoKCiAgdGFibGUsIGluZGV4LCBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwKICBydWxlLCBz dGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbgoKdHJpZ2dlciBhbmQg cG9saWN5IGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9jYWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1 Y2UKbm8gb3V0cHV0OyB0aGV5IGFyZSByZXNlcnZlZCBmb3Igd2hlbiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpCmFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgYmVjb21lIGF2 YWlsYWJsZS4KCk5PVCBOVUxMIGlzIG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5OiBpdCBpcyBh bHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CnByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkg YWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgcmVqZWN0LgpXaGVuIHJlcGxpY2FfaWRlbnRp dHkgaXMgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIHRoZSB0YWJsZSdzIFJFUExJQ0EKSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCB0aGF0IHRoZSBmaWx0ZXIgd291bGQg c3VwcHJlc3MsCnRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBvdXRwdXQsIHNvIHRoZQpnZW5lcmF0ZWQgRERMIG5ldmVyIHJlZmVyZW5jZXMgYW4gaW5kZXgg aXQgZGlkIG5vdCBwcm9kdWNlLgoKRGVmYXVsdCBvbWlzc2lvbiBjb252ZW50aW9uOiBldmVyeSBv cHRpb25hbCBjbGF1c2UgaXMgb21pdHRlZCB3aGVuIGl0cwp2YWx1ZSBtYXRjaGVzIHdoYXQgdGhl IHNlcnZlciB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGluY2x1ZGluZwp0eXBlLWRlZmF1 bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8tZ2VuZXJhdGVkIGlkZW50aXR5 CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywgaGVhcCBhY2Nlc3MgbWV0aG9k LCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJMUyB0b2dnbGVzLCBlbXB0eSBy ZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4KCkF1dGhvcjogQWtzaGF5IEpv c2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNvcyBQ ZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6 c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogS3lvdGFybyBIb3JpZ3VjaGkg PGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5j aGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJ1aSBaaGFvIDx6aGFvcnVpMTI2QGdtYWlsLmNv bT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAg MTM4ICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDE5 NTkgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTI3NCArKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSAgICAgICAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3Rh YmxlX2RkbC5zcWwgICAgIHwgIDc0MCArKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgICAyICsKIDEzIGZpbGVzIGNoYW5nZWQsIDQzMjQgaW5z ZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbAppbmRleCA2OWVmMzg1N2NmYS4uZmEyNDMxYmVmNGEgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1 bmMtaW5mby5zZ21sCkBAIC0zOTYwLDYgKzM5NjAsMTQ0IEBAIGFjbCAgICAgIHwge3Bvc3RncmVz PWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogICAgICAgICBpcyBmYWxzZSwgdGhl IDxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPiBjbGF1c2UgaXMgb21pdHRlZC4KICAgICAgICA8L3Bh cmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9s ZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAg ICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X3RhYmxlX2RkbDwvcHJpbWFy eT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfdGFibGVf ZGRsPC9mdW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnJlbGF0aW9uPC9wYXJhbWV0ZXI+ IDx0eXBlPnJlZ2NsYXNzPC90eXBlPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPnBy ZXR0eTwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5E RUZBVUxUPC9saXRlcmFsPiBmYWxzZTwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4sIDxw YXJhbWV0ZXI+b3duZXI8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAg PGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gdHJ1ZTwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRp b25hbD4sIDxwYXJhbWV0ZXI+dGFibGVzcGFjZTwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90 eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiB0cnVlPC9vcHRpb25hbD4K KyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5zY2hlbWFfcXVhbGlmaWVkPC9wYXJhbWV0 ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAgIDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVy YWw+IHRydWU8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPm9ubHlf a2luZHM8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dFtdPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5E RUZBVUxUPC9saXRlcmFsPiBOVUxMPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBh cmFtZXRlcj5leGNlcHRfa2luZHM8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dFtdPC90eXBlPgorICAg ICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiBOVUxMPC9vcHRpb25hbD4gKQorICAgICAg ICA8cmV0dXJudmFsdWU+c2V0b2YgdGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBU QUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG9yZGlu YXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgPGNvbW1h bmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+ LAorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgUlVMRTwvY29tbWFuZD4sIGFuZCA8Y29tbWFuZD5D UkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4KKyAgICAgICAgc3RhdGVtZW50cyBuZWVkZWQgdG8g cmVjcmVhdGUgdGhlIHRhYmxlJ3MgY29sdW1ucywgY29uc3RyYWludHMsCisgICAgICAgIGluZGV4 ZXMsIHJ1bGVzLCBleHRlbmRlZCBzdGF0aXN0aWNzLCBhbmQgcm93LWxldmVsIHNlY3VyaXR5IGZs YWdzLgorICAgICAgICBJbmhlcml0ZWQgY29sdW1ucyBhbmQgY29uc3RyYWludHMgYXJlIGVtaXR0 ZWQgYnkgdGhlIHBhcmVudCB0YWJsZSdzCisgICAgICAgIERETCBhbmQgYXJlIG5vdCBkdXBsaWNh dGVkIG9uIGluaGVyaXRhbmNlIGNoaWxkcmVuIG9yIHBhcnRpdGlvbnMuCisgICAgICAgIEVhY2gg c3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgorICAgICAgICBXaGVuIDxw YXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IGlzIHRydWUsIHRoZSBvdXRwdXQgaXMKKyAgICAg ICAgcHJldHR5LXByaW50ZWQuICBXaGVuIDxwYXJhbWV0ZXI+b3duZXI8L3BhcmFtZXRlcj4gaXMg ZmFsc2UsIHRoZQorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRSAuLi4gT1dORVIgVE88L2Nv bW1hbmQ+IHN0YXRlbWVudCBpcyBvbWl0dGVkLgorICAgICAgICBXaGVuIDxwYXJhbWV0ZXI+dGFi bGVzcGFjZTwvcGFyYW1ldGVyPiBpcyBmYWxzZSwgdGhlCisgICAgICAgIDxsaXRlcmFsPlRBQkxF U1BBQ0U8L2xpdGVyYWw+IGNsYXVzZSBpcyBvbWl0dGVkIGZyb20gdGhlCisgICAgICAgIDxjb21t YW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50LiAgVGhlCisgICAgICAgIDxwYXJh bWV0ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5leGNlcHRfa2luZHM8 L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVycyBkZXNjcmliZWQgYmVsb3cgY29udHJvbCB3 aGljaCBvYmplY3QgY2xhc3NlcyBhcmUgZW1pdHRlZC4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIFRoZSA8cGFyYW1ldGVyPm9ubHlfa2luZHM8L3BhcmFtZXRlcj4gYW5k IDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+CisgICAgICAgIHBhcmFtZXRlcnMg ZWFjaCB0YWtlIGEgdGV4dCBhcnJheSBvZiBvYmplY3QtY2xhc3Mga2luZCBuYW1lcworICAgICAg ICBhbmQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAoc3BlY2lmeWluZyBib3RoIHJhaXNlcyBhbgor ICAgICAgICBlcnJvcikuICBXaGVuIDxwYXJhbWV0ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBp cyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiA8 cGFyYW1ldGVyPmV4Y2VwdF9raW5kczwvcGFyYW1ldGVyPiBpcworICAgICAgICBzZXQsIGV2ZXJ5 IGtpbmQgPGVtcGhhc2lzPmV4Y2VwdDwvZW1waGFzaXM+IHRoZSBsaXN0ZWQgb25lcyBpcworICAg ICAgICBlbWl0dGVkLiAgV2hlbiBuZWl0aGVyIGlzIHNldCAodGhlIGRlZmF1bHQpLCBldmVyeSBr aW5kIGlzCisgICAgICAgIGVtaXR0ZWQuICBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNl IGluIGVhY2ggYXJyYXkgZWxlbWVudAorICAgICAgICBpcyBpZ25vcmVkIGFuZCBtYXRjaGluZyBp cyBjYXNlLWluc2Vuc2l0aXZlOyBhbiB1bnJlY29nbml6ZWQKKyAgICAgICAga2luZCBuYW1lIHJh aXNlcyBhbiBlcnJvci4KKyAgICAgICAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpcworICAgICAgICA8 bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmluZGV4PC9saXRlcmFs PiwKKyAgICAgICAgPGxpdGVyYWw+cHJpbWFyeV9rZXk8L2xpdGVyYWw+LAorICAgICAgICA8bGl0 ZXJhbD51bmlxdWU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5jaGVjazwvbGl0ZXJhbD4s CisgICAgICAgIDxsaXRlcmFsPmZvcmVpZ25fa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVy YWw+ZXhjbHVzaW9uPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+cnVsZTwvbGl0ZXJhbD4s CisgICAgICAgIDxsaXRlcmFsPnN0YXRpc3RpY3M8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD50cmlnZ2VyPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+cG9saWN5PC9saXRlcmFsPiwK KyAgICAgICAgPGxpdGVyYWw+cmxzPC9saXRlcmFsPiAodGhlCisgICAgICAgIDxjb21tYW5kPkVO QUJMRTwvY29tbWFuZD4vPGNvbW1hbmQ+Rk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZPC9jb21tYW5k PgorICAgICAgICB0b2dnbGVzKSwKKyAgICAgICAgPGxpdGVyYWw+cmVwbGljYV9pZGVudGl0eTwv bGl0ZXJhbD4sIGFuZAorICAgICAgICA8bGl0ZXJhbD5wYXJ0aXRpb248L2xpdGVyYWw+ICh0aGUg RERMIGZvciBlYWNoIGRpcmVjdAorICAgICAgICBwYXJ0aXRpb24gY2hpbGQgb2YgYSBwYXJ0aXRp b25lZC10YWJsZSBwYXJlbnQpLgorICAgICAgICBOb3RlIHRoYXQgPGxpdGVyYWw+dHJpZ2dlcjwv bGl0ZXJhbD4gYW5kIDxsaXRlcmFsPnBvbGljeTwvbGl0ZXJhbD4KKyAgICAgICAgYXJlIGFjY2Vw dGVkIGluIHRoZSB2b2NhYnVsYXJ5IGJ1dCBjdXJyZW50bHkgcHJvZHVjZSBubyBvdXRwdXQ7Cisg ICAgICAgIHRoZXkgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdoZW4gc3RhbmRhbG9uZQor ICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RyaWdnZXJfZGRsPC9mdW5jdGlvbj4gYW5kCisgICAg ICAgIDxmdW5jdGlvbj5wZ19nZXRfcG9saWN5X2RkbDwvZnVuY3Rpb24+IGhlbHBlcnMgYmVjb21l IGF2YWlsYWJsZS4gIFRoZQorICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBn cm91cHMgdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVt ZW50IHRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgIHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5k PkFMVEVSIFRBQkxFPC9jb21tYW5kPiBwYXNzZXM6CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRP PC9jb21tYW5kPiwgY2hpbGQtZGVmYXVsdAorICAgICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwv Y29tbWFuZD4sIGFuZCBwZXItY29sdW1uCisgICAgICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2Vh YmxlPmF0dG9wdGlvbnM8L3JlcGxhY2VhYmxlPik8L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJh bD5OT1QgTlVMTDwvbGl0ZXJhbD4gY29uc3RyYWludHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAg ICAgICB2b2NhYnVsYXJ5OyB0aGV5IGFyZSBhbHdheXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0 YWJsZSB0bworICAgICAgICBhdm9pZCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFj Y2VwdAorICAgICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3 b3VsZCBoYXZlIHJlamVjdGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNz IG9mIGEgdHdvLXBhc3Mgc2NoZW1hIGNsb25lIHRoYXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJs ZSBmb3JlaWduIGtleXMgYWZ0ZXIgZGF0YSBoYXMgbG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0 dGVuIGFzCisgICAgICAgIDxsaXRlcmFsPm9ubHlfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5 J108L2xpdGVyYWw+LCBhbmQgdGhlCisgICAgICAgIHB1Yi9zdWItc3R5bGUgY2xvbmUgdGhhdCBr ZWVwcyBhIHByaW1hcnkga2V5IGJ1dCBkcm9wcyBldmVyeQorICAgICAgICBvdGhlciBjb25zdHJh aW50IGNhbiBiZSB3cml0dGVuIGFzCisgICAgICAgIDxsaXRlcmFsPmV4Y2VwdF9raW5kcyA9PiBB UlJBWVsndW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddPC9saXRlcmFs Pi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIHRhYmxl IGhhcworICAgICAgICA8bGl0ZXJhbD5SRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYPC9saXRl cmFsPiBhbmQgdGhlCisgICAgICAgIDxsaXRlcmFsPnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+ IGtpbmQgaXMgaW4gdGhlIGFjdGl2ZQorICAgICAgICBmaWx0ZXIsIHRoZSBraW5kIHRoYXQgZW1p dHMgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKyAgICAgICAgKDxsaXRlcmFsPnByaW1hcnlfa2V5PC9s aXRlcmFsPiwgPGxpdGVyYWw+dW5pcXVlPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+ZXhj bHVzaW9uPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+aW5kZXg8L2xpdGVyYWw+KSBtdXN0CisgICAg ICAgIGFsc28gYmUgaW4gdGhlIGZpbHRlci4gIE90aGVyd2lzZSB0aGUgZW1pdHRlZAorICAgICAg ICA8Y29tbWFuZD5BTFRFUiBUQUJMRSAuLi4gUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWDwv Y29tbWFuZD4KKyAgICAgICAgd291bGQgcmVmZXJlbmNlIGFuIGluZGV4IHRoZSBzYW1lIERETCBu ZXZlciBwcm9kdWNlZCwgYW5kIHRoZQorICAgICAgICBmdW5jdGlvbiByZXBvcnRzIGFuIGVycm9y IGJlZm9yZSBlbWl0dGluZyBhbnkgc3RhdGVtZW50cy4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIFRoZSA8cGFyYW1ldGVyPnNjaGVtYV9xdWFsaWZpZWQ8L3BhcmFtZXRl cj4gcGFyYW1ldGVyIChkZWZhdWx0CisgICAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+KSBj b250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFibGUncyBvd24KKyAgICAgICAgc2NoZW1hIGlz IGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERMLiAgV2hlbiBzZXQgdG8KKyAgICAgICAgPGxp dGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFibGUgbmFtZSBpcyBlbWl0dGVkIHVucXVhbGlm aWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFuZCBl dmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiwg PGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRF IFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8 L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5jZXMgdG8KKyAgICAgICAgb2JqZWN0cyBpbiB0 aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0YWJsZSAoaW5oZXJpdGFuY2UKKyAgICAgICAg cGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcywgYW5kIGFueQor ICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhlIGRlcGFyc2UgaGVscGVycyBoYXBwZW4gdG8g bWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1pdHRlZCB1bnF1YWxpZmllZCwgc28gdGhlIHNj cmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQorICAgICAgICBkaWZmZXJlbnQgPHZhcm5hbWU+ c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3JlYXRlIHRoZSB0YWJsZQorICAgICAgICBpbiBh bm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzIChmb3IgZXhhbXBsZSBhCisg ICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEpIHJlbWFpbiBx dWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZvcm1zIG9mIDxjb21tYW5kPkNSRUFURSBUQUJM RTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgdGhlIG9yZGluYXJ5IGNvbHVtbi1s aXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3JtCisgICAgICAgICg8bGl0ZXJhbD5PRiA8cmVw bGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+LCB3aXRoCisgICAgICAg IHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJT05TPC9saXRlcmFsPiBvdmVycmlkZXMgZm9y IGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4sIGFu ZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAgICAgICAgY29uc3RyYWludHMpLCBhbmQgdGhl IDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJhbD4gZm9ybS4KKyAgICAgICAgPGxpdGVyYWw+ VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+VU5MT0dHRUQ8L2xpdGVyYWw+CisgICAg ICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0dGVkIGZyb20KKyAgICAgICAgPHN0cnVjdGZp ZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVsZD4uICBGb3IgdGVtcG9yYXJ5IHRhYmxlcwor ICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24sIHRoZQorICAgICAgICA8 bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0 ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyBhcmUgZW1pdHRlZDsgdGhlIGRl ZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIFBSRVNFUlZFIFJPV1M8L2xpdGVyYWw+ IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KICAgICAg PC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVy aXRzLmMKaW5kZXggNGI5ODAyYWFmY2MuLjg5NzE1MWJkNmQxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19p bmhlcml0cy5jCkBAIC0yMzYsNiArMjM2LDk5IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5f ZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiB9CiAKIAorLyoK KyAqIGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cworICoKKyAqIFJldHVybnMgYSBsaXN0IGNvbnRh aW5pbmcgdGhlIE9JRHMgb2YgYWxsIHJlbGF0aW9ucyB0aGF0IHRoZSByZWxhdGlvbiB3aXRoCisg KiBPSUQgJ3JlbGlkJyBpbmhlcml0cyAqZGlyZWN0bHkqIGZyb20sIGluIGluaHNlcW5vIG9yZGVy ICh0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZXkgc2hvdWxkIGFwcGVhciBpbiBhbiBJTkhFUklU UyBjbGF1c2UpLgorICoKKyAqIFRoZSBzcGVjaWZpZWQgbG9jayB0eXBlIGlzIGFjcXVpcmVkIG9u IGVhY2ggcGFyZW50IHJlbGF0aW9uIChidXQgbm90IG9uIHRoZQorICogZ2l2ZW4gcmVsOyBjYWxs ZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBsb2NrZWQgaXQpLiAgSWYgbG9ja21vZGUgaXMgTm9Mb2Nr CisgKiB0aGVuIG5vIGxvY2tzIGFyZSBhY3F1aXJlZCwgYnV0IGNhbGxlciBtdXN0IGJld2FyZSBv ZiByYWNlIGNvbmRpdGlvbnMKKyAqIGFnYWluc3QgcG9zc2libGUgRFJPUHMgb2YgcGFyZW50IHJl bGF0aW9ucy4KKyAqCisgKiBQYXJ0aXRpb24gY2hpbGRyZW4gYWxzbyBoYXZlIGEgcGdfaW5oZXJp dHMgZW50cnkgcG9pbnRpbmcgdG8gdGhlCisgKiBwYXJ0aXRpb25lZCBwYXJlbnQ7IGNhbGxlcnMg dGhhdCBkaXN0aW5ndWlzaCBJTkhFUklUUyBmcm9tIFBBUlRJVElPTiBPRgorICogbXVzdCBjaGVj ayByZWxpc3BhcnRpdGlvbiB0aGVtc2VsdmVzLgorICovCitMaXN0ICoKK2ZpbmRfaW5oZXJpdGFu Y2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxpc3QJICAgKmxp c3QgPSBOSUw7CisJUmVsYXRpb24JcmVsYXRpb247CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2Fu S2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCWluaGVyaXRzVHVwbGU7CisJT2lkCQkJaW5ocGFy ZW50OworCU9pZAkJICAgKm9pZGFycjsKKwlpbnQJCQltYXhvaWRzLAorCQkJCW51bW9pZHMsCisJ CQkJaTsKKworCS8qCisJICogU2NhbiBwZ19pbmhlcml0cyB2aWEgdGhlIChpbmhyZWxpZCwgaW5o c2Vxbm8pIGluZGV4IHNvIHRoYXQgdGhlIHJvd3MKKwkgKiBjb21lIG91dCBpbiBpbmhzZXFubyBv cmRlciwgd2hpY2ggaXMgdGhlIG9yZGVyIHJlcXVpcmVkIGZvciB0aGUKKwkgKiBJTkhFUklUUyBj bGF1c2UuCisJICovCisJbWF4b2lkcyA9IDg7CisJb2lkYXJyID0gKE9pZCAqKSBwYWxsb2MobWF4 b2lkcyAqIHNpemVvZihPaWQpKTsKKwludW1vaWRzID0gMDsKKworCXJlbGF0aW9uID0gdGFibGVf b3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5p dCgma2V5WzBdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsYXRpb24sIEluaGVyaXRzUmVsaWRTZXFub0lu ZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJd2hpbGUgKChpbmhlcml0 c1R1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkgIT0gTlVMTCkKKwl7CisJCWluaHBhcmVu dCA9ICgoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKGluaGVyaXRzVHVwbGUpKS0+aW5ocGFy ZW50OworCQlpZiAobnVtb2lkcyA+PSBtYXhvaWRzKQorCQl7CisJCQltYXhvaWRzICo9IDI7CisJ CQlvaWRhcnIgPSAoT2lkICopIHJlcGFsbG9jKG9pZGFyciwgbWF4b2lkcyAqIHNpemVvZihPaWQp KTsKKwkJfQorCQlvaWRhcnJbbnVtb2lkcysrXSA9IGluaHBhcmVudDsKKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCisJdGFibGVfY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkvKgorCSAqIEFjcXVpcmUgbG9ja3MgYW5kIGJ1aWxkIHRoZSByZXN1bHQgbGlzdC4g IFVubGlrZQorCSAqIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4gd2UgZG8gKm5vdCogc29ydCBi eSBPSUQ6IGNhbGxlcnMgbmVlZCB0aGUKKwkgKiBzZXFuby1vcmRlcmVkIHRyYXZlcnNhbC4KKwkg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2lkczsgaSsrKQorCXsKKwkJaW5ocGFyZW50ID0gb2lk YXJyW2ldOworCisJCWlmIChsb2NrbW9kZSAhPSBOb0xvY2spCisJCXsKKwkJCUxvY2tSZWxhdGlv bk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKworCQkJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0 czEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGluaHBhcmVudCkpKQorCQkJeworCQkJCVVubG9j a1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCQkJCWNvbnRpbnVlOworCQkJfQor CQl9CisKKwkJbGlzdCA9IGxhcHBlbmRfb2lkKGxpc3QsIGluaHBhcmVudCk7CisJfQorCisJcGZy ZWUob2lkYXJyKTsKKworCXJldHVybiBsaXN0OworfQorCisKIC8qCiAgKiBmaW5kX2FsbF9pbmhl cml0b3JzIC0KICAqCQlSZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlvbiBPSURzIGluY2x1ZGluZyB0 aGUgZ2l2ZW4gcmVsIHBsdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNDcyZGIxMTJm YTcuLjJlMTA4NTY0ZGUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNzQ2LDcgKzc0 Niw2IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENvbXByZXNzaW9uKFJlbGF0aW9u IHJlbCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwgTm9kZSAqbmV3VmFsdWUsIExP Q0tNT0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9u IHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3RhdGljIGNvbnN0IGNoYXIgKnN0 b3JhZ2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5nZVZhckNhbGxiYWNrRm9yRHJv cFJlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxPaWQsCiAJCQkJCQkJCQkJCU9p ZCBvbGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yNTIyLDcgKzI1MjEsNyBAQCB0cnVuY2F0ZV9j aGVja19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdlX25hbWUKICAqCSAgcmV0dXJu cyB0aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFnZS9hdHRzdG9yYWdlIGVudW0g dmFsdWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBzdG9yYWdlX25h bWUoY2hhciBjKQogewogCXN3aXRjaCAoYykKQEAgLTE5Nzc2LDYgKzE5Nzc1LDMzIEBAIHJlbW92 ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKIAl9CiB9CiAKKy8qCisgKiBMb29rIHVwIHRo ZSByZWdpc3RlcmVkIE9OIENPTU1JVCBhY3Rpb24gZm9yIGEgcmVsYXRpb24uCisgKgorICogUmV0 dXJucyBPTkNPTU1JVF9OT09QIHdoZW4gbm90aGluZyB3YXMgcmVnaXN0ZXJlZCwgd2hpY2ggYWxz byBjb3ZlcnMKKyAqIHRlbXBvcmFyeSB0YWJsZXMgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IE9O IENPTU1JVCBQUkVTRVJWRSBST1dTCisgKiBiZWhhdmlvciAocmVnaXN0ZXJfb25fY29tbWl0X2Fj dGlvbigpIHNraXBzIHRob3NlLCBzaW5jZSBubyBhY3Rpb24gaXMKKyAqIG5lZWRlZCBhdCBjb21t aXQpLiAgRW50cmllcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGluIHRoZSBjdXJyZW50CisgKiB0cmFu c2FjdGlvbiBhcmUgaWdub3JlZC4KKyAqLworT25Db21taXRBY3Rpb24KK2dldF9vbl9jb21taXRf YWN0aW9uKE9pZCByZWxpZCkKK3sKKwlMaXN0Q2VsbCAgICpsOworCisJZm9yZWFjaChsLCBvbl9j b21taXRzKQorCXsKKwkJT25Db21taXRJdGVtICpvYyA9IChPbkNvbW1pdEl0ZW0gKikgbGZpcnN0 KGwpOworCisJCWlmIChvYy0+cmVsaWQgIT0gcmVsaWQpCisJCQljb250aW51ZTsKKwkJaWYgKG9j LT5kZWxldGluZ19zdWJpZCAhPSBJbnZhbGlkU3ViVHJhbnNhY3Rpb25JZCkKKwkJCWNvbnRpbnVl OworCQlyZXR1cm4gb2MtPm9uY29tbWl0OworCX0KKwlyZXR1cm4gT05DT01NSVRfTk9PUDsKK30K KwogLyoKICAqIFBlcmZvcm0gT04gQ09NTUlUIGFjdGlvbnMuCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRs dXRpbHMuYwppbmRleCBhNzBmMWMyODY1NS4uYjU2ZjU5ZjBmNDEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9k ZGx1dGlscy5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUg cGdfZ2V0XypfZGRsIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCBnZW5lcmF0ZQogICogRERMIHN0 YXRlbWVudHMgdG8gcmVjcmVhdGUgZGF0YWJhc2Ugb2JqZWN0cyBzdWNoIGFzIHJvbGVzLCB0YWJs ZXNwYWNlcywKLSAqIGFuZCBkYXRhYmFzZXMsIGFsb25nIHdpdGggY29tbW9uIGluZnJhc3RydWN0 dXJlIGZvciBvcHRpb24gcGFyc2luZyBhbmQKKyAqIGRhdGFiYXNlcywgYW5kIHRhYmxlcywgYWxv bmcgd2l0aCBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yCiAgKiBwcmV0dHktcHJpbnRpbmcuCiAg KgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCkBAIC0yMSwzMCArMjEsODkgQEAKICNpbmNsdWRlICJhY2Nlc3Mv Z2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhf bWVtYmVycy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRh YmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf c3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5o IgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Rh Ymxlc3BhY2UuaCIKLSNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgImZ1bmNh cGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2luY2x1 ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCi0jaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRl ICJ1dGlscy92YXJsZW5hLmgiCiAKKy8qCisgKiBPYmplY3QtY2xhc3Mga2luZHMgdGhhdCB0aGUg b25seSAvIGV4Y2VwdCBvcHRpb25zIG9uCisgKiBwZ19nZXRfdGFibGVfZGRsIGNhbiBmaWx0ZXIg b24uICBNZW1iZXJzIGFyZSBzdG9yZWQgYXMgaW50ZWdlcnMgaW4gYQorICogQml0bWFwc2V0IG9u IFRhYmxlRGRsQ29udGV4dC4gIEtlZXAgdGFibGVfZGRsX2tpbmRfbmFtZXNbXSBpbiBzeW5jCisg KiB3aXRoIHRoZSBvcmRlciBvZiBhZGRpdGlvbnMgaGVyZS4KKyAqLwordHlwZWRlZiBlbnVtIFRh YmxlRGRsS2luZAoreworCVRBQkxFX0RETF9LSU5EX1RBQkxFLAorCVRBQkxFX0RETF9LSU5EX0lO REVYLAorCVRBQkxFX0RETF9LSU5EX1BSSU1BUllfS0VZLAorCVRBQkxFX0RETF9LSU5EX1VOSVFV RSwKKwlUQUJMRV9ERExfS0lORF9DSEVDSywKKwlUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tFWSwK KwlUQUJMRV9ERExfS0lORF9FWENMVVNJT04sCisJVEFCTEVfRERMX0tJTkRfUlVMRSwKKwlUQUJM RV9ERExfS0lORF9TVEFUSVNUSUNTLAorCVRBQkxFX0RETF9LSU5EX1RSSUdHRVIsCisJVEFCTEVf RERMX0tJTkRfUE9MSUNZLAorCVRBQkxFX0RETF9LSU5EX1JMUywKKwlUQUJMRV9ERExfS0lORF9S RVBMSUNBX0lERU5USVRZLAorCVRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwKK30JCQlUYWJsZURk bEtpbmQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICpuYW1lOworCVRh YmxlRGRsS2luZCBraW5kOworfQkJCXRhYmxlX2RkbF9raW5kX25hbWVzW10gPQoreworCXsidGFi bGUiLCBUQUJMRV9ERExfS0lORF9UQUJMRX0sCisJeyJpbmRleCIsIFRBQkxFX0RETF9LSU5EX0lO REVYfSwKKwl7InByaW1hcnlfa2V5IiwgVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVl9LAorCXsi dW5pcXVlIiwgVEFCTEVfRERMX0tJTkRfVU5JUVVFfSwKKwl7ImNoZWNrIiwgVEFCTEVfRERMX0tJ TkRfQ0hFQ0t9LAorCXsiZm9yZWlnbl9rZXkiLCBUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tFWX0s CisJeyJleGNsdXNpb24iLCBUQUJMRV9ERExfS0lORF9FWENMVVNJT059LAorCXsicnVsZSIsIFRB QkxFX0RETF9LSU5EX1JVTEV9LAorCXsic3RhdGlzdGljcyIsIFRBQkxFX0RETF9LSU5EX1NUQVRJ U1RJQ1N9LAorCXsidHJpZ2dlciIsIFRBQkxFX0RETF9LSU5EX1RSSUdHRVJ9LAorCXsicG9saWN5 IiwgVEFCTEVfRERMX0tJTkRfUE9MSUNZfSwKKwl7InJscyIsIFRBQkxFX0RETF9LSU5EX1JMU30s CisJeyJyZXBsaWNhX2lkZW50aXR5IiwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWX0s CisJeyJwYXJ0aXRpb24iLCBUQUJMRV9ERExfS0lORF9QQVJUSVRJT059LAorfTsKKworc3RhdGlj IEJpdG1hcHNldCAqcGFyc2Vfa2luZF9hcnJheShjb25zdCBjaGFyICpwYXJhbW5hbWUsIEFycmF5 VHlwZSAqYXJyKTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9kZGxfb3B0aW9uKFN0cmluZ0luZm8gYnVm LCBib29sIHByZXR0eSwgaW50IGluZGVudCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4u KQogCQkJcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1KTsKQEAgLTU3LDYgKzExNiwxODMgQEAgc3Rh dGljIERhdHVtIHBnX2dldF90YWJsZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIE9pZCB0c2lkKTsKIHN0YXRpYyBMaXN0ICpwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVybmFs KE9pZCBkYmlkLCBib29sIHByZXR0eSwKIAkJCQkJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJvb2wg bm9fdGFibGVzcGFjZSk7CiAKKy8qCisgKiBQZXItY29sdW1uIGNhY2hlIG9mIGxvY2FsbHktZGVj bGFyZWQgTk9UIE5VTEwgY29uc3RyYWludHMuICBCdWlsdCBvbmNlCisgKiBieSBjb2xsZWN0X2xv Y2FsX25vdF9udWxsKCkgYW5kIGNvbnN1bHRlZCBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVycwor ICogYW5kIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AuICBFbnRyaWVzIHdpdGggY29u b2lkID09IEludmFsaWRPaWQKKyAqIG1lYW4gdGhlIGNvbHVtbiBoYXMgbm8gbG9jYWwgTk9UIE5V TEwgY29uc3RyYWludCByb3cgaW4gcGdfY29uc3RyYWludAorICogKHRoZSBjb2x1bW4gbWF5IHN0 aWxsIGhhdmUgYXR0bm90bnVsbD10cnVlIG9uIGEgcHJlLVBHLTE4LXVwZ3JhZGVkCisgKiBjYXRh bG9nLCBpbiB3aGljaCBjYXNlIGVtaXQgcGxhaW4gaW5saW5lIE5PVCBOVUxMKS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgTG9jYWxOb3ROdWxsRW50cnkKK3sKKwlPaWQJCQljb25vaWQ7CisJY2hhcgkg ICAqbmFtZTsKKwlib29sCQlpc19hdXRvOwkJLyogbWF0Y2hlcyAiPHRhYmxlPl88Y29sPl9ub3Rf bnVsbCIgKi8KKwlib29sCQlub19pbmhlcml0OworfQkJCUxvY2FsTm90TnVsbEVudHJ5OworCisv KgorICogV29ya2luZyBjb250ZXh0IHRocmVhZGVkIHRocm91Z2ggdGhlIHBlci1wYXNzIGhlbHBl cnMgYmVsb3cuICBJbnB1dHMKKyAqIChjYWxsZXItcHJvdmlkZWQgb3B0aW9uIGZsYWdzKSBhcmUg ZmlsbGVkIGluIG9uY2UgYXQgdGhlIHRvcCBvZgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5h bCBhbmQgdHJlYXRlZCBhcyByZWFkLW9ubHkgdGhlcmVhZnRlci4gIERlcml2ZWQKKyAqIGZpZWxk cyAocXVhbG5hbWUsIG5uX2VudHJpZXMsIHNraXBfbm90bnVsbF9vaWRzKSBhcmUgY29tcHV0ZWQg b25jZQorICogZHVyaW5nIHNldHVwLiAgRWFjaCBwYXNzIGFwcGVuZHMgdG8gY3R4LT5idWYgYW5k IHB1c2hlcyB0aGUgZmluaXNoZWQKKyAqIHN0YXRlbWVudCBvbnRvIGN0eC0+c3RhdGVtZW50cyB2 aWEgYXBwZW5kX3N0bXQoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVEZGxDb250ZXh0Cit7 CisJUmVsYXRpb24JcmVsOworCU9pZAkJCXJlbGlkOworCWJvb2wJCXByZXR0eTsKKwlib29sCQlu b19vd25lcjsKKwlib29sCQlub190YWJsZXNwYWNlOworCWJvb2wJCXNjaGVtYV9xdWFsaWZpZWQ7 CisKKwkvKgorCSAqIE9iamVjdC1jbGFzcyBmaWx0ZXJpbmcuICBJZiBvbmx5X2tpbmRzIGlzIG5v bi1OVUxMLCBvbmx5IHRoZQorCSAqIGtpbmRzIGluIHRoYXQgc2V0IGFyZSBlbWl0dGVkOyBpZiBl eGNlcHRfa2luZHMgaXMgbm9uLU5VTEwsIGFsbAorCSAqIGtpbmRzICpleGNlcHQqIHRob3NlIGlu IHRoYXQgc2V0IGFyZSBlbWl0dGVkOyBpZiBib3RoIGFyZSBOVUxMLAorCSAqIGV2ZXJ5IGtpbmQg aXMgZW1pdHRlZCAodGhlIGRlZmF1bHQpLiAgVGhlIHR3byBhcmUgbXV0dWFsbHkKKwkgKiBleGNs dXNpdmUgYXQgdGhlIHVzZXItZmFjaW5nIGxheWVyICh0aGUgU1JGIGVudHJ5IHJlamVjdHMKKwkg KiBzcGVjaWZ5aW5nIGJvdGgpLgorCSAqLworCUJpdG1hcHNldCAgKm9ubHlfa2luZHM7CisJQml0 bWFwc2V0ICAqZXhjZXB0X2tpbmRzOworCisJLyogRGVyaXZlZCBkdXJpbmcgc2V0dXAgKi8KKwlP aWQJCQliYXNlX25hbWVzcGFjZTsKKwljaGFyCSAgICpxdWFsbmFtZTsKKwlpbnQJCQlzYXZlX25l c3RsZXZlbDsgLyogPj0gMCBpZiB3ZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCAqLworCUxvY2FsTm90 TnVsbEVudHJ5ICpubl9lbnRyaWVzOworCUxpc3QJICAgKnNraXBfbm90bnVsbF9vaWRzOworCisJ LyogTXV0YWJsZSB3b3JraW5nIHN0YXRlICovCisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUxpc3QJ ICAgKnN0YXRlbWVudHM7Cit9CQkJVGFibGVEZGxDb250ZXh0OworCitzdGF0aWMgTGlzdCAqcGdf Z2V0X3RhYmxlX2RkbF9pbnRlcm5hbChUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgYm9v bCBpc19raW5kX2luY2x1ZGVkKGNvbnN0IFRhYmxlRGRsQ29udGV4dCAqY3R4LCBUYWJsZURkbEtp bmQga2luZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJICAgYm9vbCBpbmNsdWRlX2NoZWNr LAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkgICBMb2NhbE5vdE51 bGxFbnRyeSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRfdHlwZWRfY29sdW1uX292 ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSAgYm9vbCBw cmV0dHksIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkJCQkgIExvY2FsTm90TnVsbEVudHJ5 ICpubl9lbnRyaWVzKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWlu dHMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJYm9vbCBwcmV0dHks IGJvb2wgKmZpcnN0KTsKK3N0YXRpYyBjaGFyICpmaW5kX2F0dHJkZWZfdGV4dChSZWxhdGlvbiBy ZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAorCQkJCQkJCSAgIExpc3QgKipkcGNvbnRleHQpOworc3Rh dGljIGNoYXIgKmxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCByZWxpZCwgYm9vbCBzY2hlbWFf cXVhbGlmaWVkLAorCQkJCQkJCQkJIE9pZCBiYXNlX25hbWVzcGFjZSk7CitzdGF0aWMgTG9jYWxO b3ROdWxsRW50cnkgKmNvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLAorCQkJCQkJ CQkJCQkJICBMaXN0ICoqc2tpcF9vaWRzKTsKKworc3RhdGljIHZvaWQgYXBwZW5kX3N0bXQoVGFi bGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9jcmVhdGVfdGFibGVfc3RtdChU YWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVE ZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRl cyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2F0dG9wdGlvbnMoVGFi bGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29u dGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxD b250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9ydWxlcyhUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpjdHgpOwor c3RhdGljIHZvaWQgZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsK K3N0YXRpYyB2b2lkIGVtaXRfcmxzX3RvZ2dsZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3Rh dGljIHZvaWQgZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0ICpjdHgpOwor CisKKy8qCisgKiBwYXJzZV9raW5kX2FycmF5CisgKgkJUGFyc2UgYSB0ZXh0W10gb2Ygb2JqZWN0 LWNsYXNzIGtpbmQgbmFtZXMgaW50byBhIEJpdG1hcHNldCBvZgorICoJCVRhYmxlRGRsS2luZCB2 YWx1ZXMuCisgKgorICogRWFjaCBlbGVtZW50IGlzIG1hdGNoZWQgY2FzZS1pbnNlbnNpdGl2ZWx5 OyBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIGlzCisgKiBzdHJpcHBlZC4gIE5VTEwgZWxlbWVudHMg YXJlIHJlamVjdGVkLiAgVW5rbm93biBraW5kIG5hbWVzIHJhaXNlIGFuIGVycm9yCisgKiBjaXRp bmcgdGhlIHN1cHBsaWVkIHBhcmFtZXRlciBuYW1lLiAgQW4gZW1wdHkgYXJyYXkgaXMgYWxzbyBy ZWplY3RlZC4KKyAqIER1cGxpY2F0ZSBlbnRyaWVzIGFyZSBzaWxlbnRseSBkZS1kdXBsaWNhdGVk IGJ5IHRoZSBCaXRtYXBzZXQuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGFyc2Vfa2luZF9h cnJheShjb25zdCBjaGFyICpwYXJhbW5hbWUsIEFycmF5VHlwZSAqYXJyKQoreworCURhdHVtCSAg ICplbGVtczsKKwlib29sCSAgICpudWxsczsKKwlpbnQJCQluZWxlbXM7CisJQml0bWFwc2V0ICAq cmVzdWx0ID0gTlVMTDsKKworCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oYXJyLCBURVhUT0lE LCAmZWxlbXMsICZudWxscywgJm5lbGVtcyk7CisKKwlpZiAobmVsZW1zID09IDApCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJIGVycm1zZygicGFyYW1ldGVyIFwiJXNcIiBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25l IGtpbmQiLAorCQkJCQkJcGFyYW1uYW1lKSkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxl bXM7IGkrKykKKwl7CisJCWNoYXIJICAgKnJhdzsKKwkJY2hhcgkgICAqdG9rZW47CisJCWNoYXIJ ICAgKmVuZDsKKwkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQlpZiAobnVsbHNbaV0pCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygicGFyYW1ldGVyIFwiJXNcIiBtdXN0IG5vdCBjb250YWluIE5V TEwgZWxlbWVudHMiLAorCQkJCQkJCXBhcmFtbmFtZSkpKTsKKworCQlyYXcgPSB0ZXh0X3RvX2Nz dHJpbmcoRGF0dW1HZXRUZXh0UFAoZWxlbXNbaV0pKTsKKworCQkvKiBUcmltIGxlYWRpbmcgd2hp dGVzcGFjZS4gKi8KKwkJdG9rZW4gPSByYXc7CisJCXdoaWxlICgqdG9rZW4gPT0gJyAnIHx8ICp0 b2tlbiA9PSAnXHQnKQorCQkJdG9rZW4rKzsKKworCQkvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3Bh Y2UuICovCisJCWVuZCA9IHRva2VuICsgc3RybGVuKHRva2VuKTsKKwkJd2hpbGUgKGVuZCA+IHRv a2VuICYmIChlbmRbLTFdID09ICcgJyB8fCBlbmRbLTFdID09ICdcdCcpKQorCQkJZW5kLS07CisJ CSplbmQgPSAnXDAnOworCisJCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgbGVuZ3Rob2YodGFibGVf ZGRsX2tpbmRfbmFtZXMpOyBqKyspCisJCXsKKwkJCWlmIChwZ19zdHJjYXNlY21wKHRva2VuLCB0 YWJsZV9kZGxfa2luZF9uYW1lc1tqXS5uYW1lKSA9PSAwKQorCQkJeworCQkJCXJlc3VsdCA9IGJt c19hZGRfbWVtYmVyKHJlc3VsdCwKKwkJCQkJCQkJCQkoaW50KSB0YWJsZV9kZGxfa2luZF9uYW1l c1tqXS5raW5kKTsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwor CQlpZiAoIWZvdW5kKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBraW5k IFwiJXNcIiBpbiBwYXJhbWV0ZXIgXCIlc1wiIiwKKwkJCQkJCQl0b2tlbiwgcGFyYW1uYW1lKSkp OworCisJCXBmcmVlKHJhdyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGlz X2tpbmRfaW5jbHVkZWQKKyAqCQlEZXRlcm1pbmUgd2hldGhlciBEREwgZm9yIHRoZSBnaXZlbiBv YmplY3QtY2xhc3Mga2luZCBzaG91bGQgYmUKKyAqCQllbWl0dGVkIHVuZGVyIHRoZSBjdXJyZW50 IG9wdGlvbnMuCisgKi8KK3N0YXRpYyBib29sCitpc19raW5kX2luY2x1ZGVkKGNvbnN0IFRhYmxl RGRsQ29udGV4dCAqY3R4LCBUYWJsZURkbEtpbmQga2luZCkKK3sKKwlpZiAoY3R4LT5vbmx5X2tp bmRzICE9IE5VTEwpCisJCXJldHVybiBibXNfaXNfbWVtYmVyKChpbnQpIGtpbmQsIGN0eC0+b25s eV9raW5kcyk7CisJaWYgKGN0eC0+ZXhjZXB0X2tpbmRzICE9IE5VTEwpCisJCXJldHVybiAhYm1z X2lzX21lbWJlcigoaW50KSBraW5kLCBjdHgtPmV4Y2VwdF9raW5kcyk7CisJcmV0dXJuIHRydWU7 Cit9CiAKIC8qCiAgKiBIZWxwZXIgdG8gYXBwZW5kIGEgZm9ybWF0dGVkIHN0cmluZyB3aXRoIG9w dGlvbmFsIHByZXR0eS1wcmludGluZy4KQEAgLTk3NSwzICsxMjExLDE3MjAgQEAgcGdfZ2V0X2Rh dGFiYXNlX2RkbChQR19GVU5DVElPTl9BUkdTKQogCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7 CiAJfQogfQorCisvKgorICogbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQKKyAqCQlSZXR1cm4gZWl0 aGVyIHRoZSBzY2hlbWEtcXVhbGlmaWVkIG9yIHRoZSBiYXJlIHF1b3RlZCBuYW1lIG9mIGEKKyAq CQlyZWxhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2hlbWFfcXVhbGlmaWVkIGZsYWcuCisgKgor ICogVGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgbmV2ZXIgc2NoZW1hLXF1YWxpZmllZCByZWdhcmRs ZXNzIG9mCisgKiBzY2hlbWFfcXVhbGlmaWVkOiB0aGUgVEVNUE9SQVJZIGtleXdvcmQgaW4gQ1JF QVRFIFRFTVBPUkFSWSBUQUJMRQorICogYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxlIGluIHRoZSBz ZXNzaW9uJ3MgdGVtcCBzY2hlbWEsIHNvIGVtaXR0aW5nCisgKiBwZ190ZW1wX05OLnJlbG5hbWUg d291bGQgcHJvZHVjZSBEREwgdGhhdCBjYW5ub3QgYmUgcmVwbGF5ZWQuCisgKgorICogV2hlbiBz Y2hlbWFfcXVhbGlmaWVkIGlzIHRydWUgdGhlIHNjaGVtYS1xdWFsaWZpZWQgbmFtZSBpcyBhbHdh eXMKKyAqIHJldHVybmVkIGZvciBub24tdGVtcG9yYXJ5IHJlbGF0aW9ucy4gIFdoZW4gZmFsc2Us IHRoZSBiYXJlIHJlbG5hbWUKKyAqIGlzIHJldHVybmVkIG9ubHkgaWYgdGhlIHRhcmdldCByZWxh dGlvbiBsaXZlcyBpbiBiYXNlX25hbWVzcGFjZSAodGhlCisgKiBuYW1lc3BhY2Ugb2YgdGhlIHRh YmxlIHdob3NlIERETCBpcyBiZWluZyBnZW5lcmF0ZWQpOyBvdGhlcndpc2UgdGhlCisgKiBzY2hl bWEtcXVhbGlmaWVkIGZvcm0gaXMgcmV0dXJuZWQsIGJlY2F1c2UgY3Jvc3Mtc2NoZW1hIHJlZmVy ZW5jZXMKKyAqIChmb3IgZXhhbXBsZSBhbiBpbmhlcml0YW5jZSBwYXJlbnQgb3IgZm9yZWlnbiBr ZXkgdGFyZ2V0IGluIGEKKyAqIGRpZmZlcmVudCBzY2hlbWEpIGFyZSBub3Qgc2FmZSB0byBvbWl0 LgorICoKKyAqIFRoaXMgcmVwbGFjZXMgdGhlIHVuc2FmZSBwYXR0ZXJuCisgKgkgIHF1b3RlX3F1 YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShv aWQpKSwKKyAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3JlbF9uYW1lKG9pZCkp CisgKiB3aGljaCBkZXJlZmVyZW5jZXMgTlVMTCB3aGVuIGEgY29uY3VycmVudCB0cmFuc2FjdGlv biBoYXMgZHJvcHBlZCB0aGUKKyAqIHJlZmVyZW5jZWQgcmVsYXRpb24gKG9yIGl0cyBzY2hlbWEp IGJldHdlZW4gd2hlbiB3ZSBjYWNoZWQgaXRzIE9JRCBhbmQKKyAqIHdoZW4gd2UgYXNrIHRoZSBz eXNjYWNoZSBmb3IgaXRzIG5hbWUuICBIb2xkaW5nIEFjY2Vzc1NoYXJlTG9jayBvbiBhCisgKiBk ZXBlbmRlbnQgcmVsYXRpb24gbWFrZXMgdGhpcyByYWNlIHZhbmlzaGluZ2x5IHVubGlrZWx5IGlu IHByYWN0aWNlLCBidXQKKyAqIHdlIHN0aWxsIGRlZmVuZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhl IGFsdGVybmF0aXZlIGlzIGEgU0lHU0VHVi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUg Zm9yIHBmcmVlKClpbmcgdGhlIHJlc3VsdC4KKyAqLworc3RhdGljIGNoYXIgKgorbG9va3VwX3Jl bG5hbWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsIE9pZCBiYXNl X25hbWVzcGFjZSkKK3sKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19jbGFzcyByZWx0dXA7CisJ Y2hhcgkgICAqbnNwbmFtZTsKKwljaGFyCSAgICpyZXN1bHQ7CisKKwl0cCA9IFNlYXJjaFN5c0Nh Y2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHApKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJIGVycm1zZygicmVsYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3Qg ZXhpc3QiLCByZWxpZCksCisJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJy ZW50bHkgZHJvcHBlZC4iKSkpOworCisJcmVsdHVwID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVD VCh0cCk7CisKKwkvKgorCSAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG5ldmVyIHNjaGVtYS1x dWFsaWZpZWQ6IHRoZSBURU1QT1JBUlkga2V5d29yZAorCSAqIGFscmVhZHkgcGxhY2VzIHRoZW0g aW4gcGdfdGVtcCwgYW5kIHBnX3RlbXBfTk4ucmVsbmFtZSBjYW5ub3QgYmUKKwkgKiByZXBsYXll ZCBpbiBhbnkgb3RoZXIgc2Vzc2lvbi4KKwkgKi8KKwlpZiAoaXNUZW1wTmFtZXNwYWNlKHJlbHR1 cC0+cmVsbmFtZXNwYWNlKSkKKwl7CisJCXJlc3VsdCA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmll cihOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJ cmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBCYXJlIG5hbWUgb25seSB3aGVuIGNhbGxlciBhc2tl ZCBhbmQgdGFyZ2V0IGlzIGluIHRoZSBiYXNlIG5hbWVzcGFjZS4gKi8KKwlpZiAoIXNjaGVtYV9x dWFsaWZpZWQgJiYgcmVsdHVwLT5yZWxuYW1lc3BhY2UgPT0gYmFzZV9uYW1lc3BhY2UpCisJewor CQlyZXN1bHQgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJlbG5h bWUpKSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJ bnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShyZWx0dXAtPnJlbG5hbWVzcGFjZSk7CisJaWYg KG5zcG5hbWUgPT0gTlVMTCkKKwl7CisJCU9pZAkJCW5zcG9pZCA9IHJlbHR1cC0+cmVsbmFtZXNw YWNlOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkgZXJybXNnKCJzY2hlbWEgd2l0 aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBuc3BvaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1h eSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKwl9CisKKwlyZXN1bHQgPSBx dW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3BuYW1lLCBOYW1lU3RyKHJlbHR1cC0+cmVsbmFt ZSkpOworCisJcGZyZWUobnNwbmFtZSk7CisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBjb2xsZWN0X2xvY2FsX25vdF9udWxsCisgKgkJU2NhbiBw Z19jb25zdHJhaW50IG9uY2UgZm9yIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgY29uc3RyYWlu dHMKKyAqCQlvbiByZWwsIHJldHVybmluZyBhIHBhbGxvYydkIGFycmF5IGluZGV4ZWQgYnkgYXR0 bnVtICgxLi5uYXR0cykuCisgKgorICogRW50cmllcyB3aXRoIGNvbm9pZD09SW52YWxpZE9pZCBt ZWFuICJubyBsb2NhbCBOT1QgTlVMTCByb3cgZm9yIHRoaXMKKyAqIGNvbHVtbiIuICBXaGVuIHRo ZSBjb25zdHJhaW50IG5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIGF1dG8tZ2VuZXJhdGVkCisgKiBw YXR0ZXJuICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fbm90X251bGwiLCB0aGUgY29uc3RyYWlu dCBPSUQgaXMKKyAqIGFwcGVuZGVkIHRvICpza2lwX29pZHMgc28gdGhlIHBvc3QtQ1JFQVRFIGNv bnN0cmFpbnQgbG9vcCBjYW4gYXZvaWQKKyAqIHJlLWVtaXR0aW5nIGl0IGFzIEFMVEVSIFRBQkxF IC4uLiBBREQgQ09OU1RSQUlOVCAtIHRoZSBjb2x1bW4tZW1pdAorICogcGFzcyB3aWxsIHByb2R1 Y2UgaXQgaW5saW5lIGFzICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIGluc3RlYWQuCisgKi8K K3N0YXRpYyBMb2NhbE5vdE51bGxFbnRyeSAqCitjb2xsZWN0X2xvY2FsX25vdF9udWxsKFJlbGF0 aW9uIHJlbCwgTGlzdCAqKnNraXBfb2lkcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsKTsKKwlpbnQJCQluYXR0cyA9IHR1cGRlc2MtPm5hdHRzOworCUxvY2Fs Tm90TnVsbEVudHJ5ICplbnRyaWVzOworCWNvbnN0IGNoYXIgKnJlbG5hbWUgPSBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpOworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25T Y2FuOworCVNjYW5LZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCisJZW50cmll cyA9IChMb2NhbE5vdE51bGxFbnRyeSAqKSBwYWxsb2MwKHNpemVvZihMb2NhbE5vdE51bGxFbnRy eSkgKgorCQkJCQkJCQkJCQkobmF0dHMgKyAxKSk7CisKKwljb25SZWwgPSB0YWJsZV9vcGVuKENv bnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZjb25L ZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50 UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7 CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNv blNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJh aW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0JCWNvbmtleURhdDsKKwkJYm9vbAkJY29u a2V5TnVsbDsKKwkJQXJyYXlUeXBlICAqY29ua2V5QXJyOworCQlpbnQxNgkgICAqY29ua2V5VmFs czsKKwkJaW50CQkJYXR0bnVtOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCWNoYXIJCWF1 dG9uYW1lW05BTUVEQVRBTEVOXTsKKworCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRf Tk9UTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJCWNvbnRp bnVlOworCisJCWNvbmtleURhdCA9IGhlYXBfZ2V0YXR0cihjb25UdXAsIEFudW1fcGdfY29uc3Ry YWludF9jb25rZXksCisJCQkJCQkJCSBSZWxhdGlvbkdldERlc2NyKGNvblJlbCksICZjb25rZXlO dWxsKTsKKwkJaWYgKGNvbmtleU51bGwpCisJCQljb250aW51ZTsKKwkJY29ua2V5QXJyID0gRGF0 dW1HZXRBcnJheVR5cGVQKGNvbmtleURhdCk7CisKKwkJLyoKKwkJICogRGVmZW5kIGFnYWluc3Qg YSBtYWxmb3JtZWQgY29ua2V5OiBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgaXMgYWx3YXlzCisJCSAq IGEgc2luZ2xlLWNvbHVtbiAxLUQgaW50MiBhcnJheSwgYnV0IGEgY29ycnVwdGVkIGNhdGFsb2cg b3IgYSBmdXR1cmUKKwkJICogcGF0Y2ggdGhhdCBzdG9yZXMgd2lkZXIgY29ua2V5cyBtdXN0bid0 IHRyaXAgdXMgaW50byByZWFkaW5nIHBhc3QKKwkJICogdGhlIGFycmF5IGhlYWRlci4KKwkJICov CisJCWlmIChBUlJfTkRJTShjb25rZXlBcnIpICE9IDEgfHwKKwkJCUFSUl9ESU1TKGNvbmtleUFy cilbMF0gPCAxIHx8CisJCQlBUlJfSEFTTlVMTChjb25rZXlBcnIpIHx8CisJCQlBUlJfRUxFTVRZ UEUoY29ua2V5QXJyKSAhPSBJTlQyT0lEKQorCQkJY29udGludWU7CisKKwkJY29ua2V5VmFscyA9 IChpbnQxNiAqKSBBUlJfREFUQV9QVFIoY29ua2V5QXJyKTsKKwkJYXR0bnVtID0gY29ua2V5VmFs c1swXTsKKwkJaWYgKGF0dG51bSA8IDEgfHwgYXR0bnVtID4gbmF0dHMpCisJCQljb250aW51ZTsK KworCQlhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOworCQlzbnByaW50 ZihhdXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVzX25vdF9udWxsIiwKKwkJCQkgcmVs bmFtZSwgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKworCQllbnRyaWVzW2F0dG51bV0uY29ub2lk ID0gY29uLT5vaWQ7CisJCWVudHJpZXNbYXR0bnVtXS5uYW1lID0gcHN0cmR1cChOYW1lU3RyKGNv bi0+Y29ubmFtZSkpOworCQllbnRyaWVzW2F0dG51bV0uaXNfYXV0byA9IChzdHJjbXAoTmFtZVN0 cihjb24tPmNvbm5hbWUpLCBhdXRvbmFtZSkgPT0gMCk7CisJCWVudHJpZXNbYXR0bnVtXS5ub19p bmhlcml0ID0gY29uLT5jb25ub2luaGVyaXQ7CisKKwkJLyoKKwkJICogSW5saW5lIGVtaXNzaW9u IG9mIE5PVCBOVUxMIG9ubHkgaGFwcGVucyBmb3IgY29sdW1ucyB0aGF0IHRoZQorCQkgKiBjb2x1 bW4gbGlzdCBhY3R1YWxseSBlbWl0cywgaS5lLiBhdHRpc2xvY2FsIGNvbHVtbnMuICBGb3IgdGhv c2UKKwkJICogdGhlIGlubGluZSBwYXNzIGFscmVhZHkgbWF0ZXJpYWxpemVzIHRoZSBjb25zdHJh aW50IChlaXRoZXIgYXMKKwkJICogIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgZm9yIHVzZXIt bmFtZWQsIG9yIGFzIGEgYmFyZQorCQkgKiAiTk9UIE5VTEwiIHRoYXQgUEcgcmUtY3JlYXRlcyB1 bmRlciB0aGUgYXV0by1uYW1lIHBhdHRlcm4pLCBzbworCQkgKiB0aGUgcG9zdC1DUkVBVEUgY29u c3RyYWludCBsb29wIG11c3Qgbm90IGVtaXQgYSBzZWNvbmQKKwkJICogQUxURVIgVEFCTEUgLi4u IEFERCBDT05TVFJBSU5UIGZvciB0aGUgc2FtZSBjb2x1bW4gLSBQRyBvbmx5CisJCSAqIGFsbG93 cyBvbmUgTk9UIE5VTEwgY29uc3RyYWludCBwZXIgY29sdW1uIGFuZCByZWplY3RzIHRoZQorCQkg KiBzZWNvbmQgd2l0aCBhIG5hbWUgbWlzbWF0Y2ggd2hlbmV2ZXIgdGhlIHNhdmVkIGF1dG8tbmFt ZSBubworCQkgKiBsb25nZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB0YWJsZSBuYW1lIChlLmcuIGFm dGVyIGEgcmVuYW1lLCBvcgorCQkgKiB3aGVuIENSRUFURSBUQUJMRSB1bmlxdWlmaWVzIHRoZSBh dXRvLW5hbWUgdG8gZG9kZ2UgYSBzZXF1ZW5jZQorCQkgKiBjb2xsaXNpb24pLiAgRm9yIGEgbG9j YWxseS1kZWNsYXJlZCBOT1QgTlVMTCBzaXR0aW5nIG9uIGFuCisJCSAqIGluaGVyaXRlZCAobm9u LWxvY2FsKSBjb2x1bW4gdGhlIGlubGluZSBwYXRoIG5ldmVyIGZpcmVzLCBzbworCQkgKiBsZWF2 ZSB0aGUgT0lEIG91dCBvZiBza2lwX29pZHMgYW5kIGxldCB0aGUgcG9zdC1DUkVBVEUgbG9vcAor CQkgKiBlbWl0IEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVC4KKwkJICovCisJCWlmIChh dHQtPmF0dGlzbG9jYWwgJiYgc2tpcF9vaWRzICE9IE5VTEwpCisJCQkqc2tpcF9vaWRzID0gbGFw cGVuZF9vaWQoKnNraXBfb2lkcywgY29uLT5vaWQpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNv blNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBlbnRyaWVzOworfQorCisvKgorICogZmluZF9hdHRyZGVmX3RleHQKKyAqCQlSZXR1cm4gdGhl IGRlcGFyc2VkIERFRkFVTFQvR0VORVJBVEVEIGV4cHJlc3Npb24gZm9yIGF0dG51bSBvbiByZWws CisgKgkJb3IgTlVMTCBpZiBubyBlbnRyeSBleGlzdHMgaW4gVHVwbGVDb25zdHItPmRlZnZhbC4K KyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBhIExpc3QgKiogc28gdGhhdCB0aGUgZGVwYXJzZSBj b250ZXh0IGlzIGJ1aWx0IGxhemlseQorICogYW5kIHJldXNlZCBhY3Jvc3MgY2FsbHMgKGRlcGFy c2VfY29udGV4dF9mb3IgaXMgbm90IGNoZWFwKS4gIFJldHVybmVkCisgKiBzdHJpbmcgaXMgcGFs bG9jJ2QgaW4gdGhlIGN1cnJlbnQgbWVtb3J5IGNvbnRleHQ7IGNhbGxlciBwZnJlZSdzIGl0Lgor ICovCitzdGF0aWMgY2hhciAqCitmaW5kX2F0dHJkZWZfdGV4dChSZWxhdGlvbiByZWwsIEF0dHJO dW1iZXIgYXR0bnVtLCBMaXN0ICoqZHBjb250ZXh0KQoreworCVR1cGxlQ29uc3RyICpjb25zdHIg PSBSZWxhdGlvbkdldERlc2NyKHJlbCktPmNvbnN0cjsKKworCWlmIChjb25zdHIgPT0gTlVMTCkK KwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGludCBqID0gMDsgaiA8IGNvbnN0ci0+bnVtX2RlZnZh bDsgaisrKQorCXsKKwkJaWYgKGNvbnN0ci0+ZGVmdmFsW2pdLmFkbnVtICE9IGF0dG51bSkKKwkJ CWNvbnRpbnVlOworCisJCWlmICgqZHBjb250ZXh0ID09IE5JTCkKKwkJCSpkcGNvbnRleHQgPSBk ZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJ CQkJCSBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCisJCXJldHVybiBkZXBhcnNlX2V4cHJlc3Np b24oc3RyaW5nVG9Ob2RlKGNvbnN0ci0+ZGVmdmFsW2pdLmFkYmluKSwKKwkJCQkJCQkJICAqZHBj b250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFw cGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMKKyAqCQlFbWl0IGVhY2ggbG9jYWxseS1kZWNs YXJlZCBDSEVDSyBjb25zdHJhaW50IG9uIHJlbCBhcworICoJCSJDT05TVFJBSU5UIG5hbWUgPHBn X2dldF9jb25zdHJhaW50ZGVmPiIsIHNlcGFyYXRlZCBieSAnLCcgZnJvbSBhbnkKKyAqCQlwcmV2 aW91c2x5LWVtaXR0ZWQgY29sdW1uIG9yIGNvbnN0cmFpbnQuCisgKgorICogKmZpcnN0IHRyYWNr cyB3aGV0aGVyIGFueXRoaW5nIGhhcyBiZWVuIGVtaXR0ZWQgb24gdGhpcyBsaXN0IHlldCwgc28g dGhlCisgKiBjYWxsZXIgY2FuIGNoYWluIGNvbHVtbiBlbWlzc2lvbiBhbmQgY29uc3RyYWludCBl bWlzc2lvbiB0aHJvdWdoIHRoZSBzYW1lCisgKiBidWZmZXIuICBJbmhlcml0ZWQgQ0hFQ0sgY29u c3RyYWludHMgKCFjb25pc2xvY2FsKSBjb21lIGZyb20gdGhlIHBhcmVudCdzCisgKiBEREwgYW5k IGFyZW4ndCByZXBlYXRlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2lubGluZV9j aGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0 eSwKKwkJCQkJCQkJYm9vbCAqZmlyc3QpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5E ZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisK Kwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCVNjYW5LZXlJbml0KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJl bGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdl dERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdp bnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkg dHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25U dXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWlu dCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0J CWRlZkRhdHVtOworCQljaGFyCSAgICpkZWZib2R5OworCisJCWlmIChjb24tPmNvbnR5cGUgIT0g Q09OU1RSQUlOVF9DSEVDSykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghKmZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnLCcpOworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs ICJcbiAgICAiKTsKKwkJZWxzZSBpZiAoISpmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGJ1ZiwgJyAnKTsKKwkJKmZpcnN0ID0gZmFsc2U7CisKKwkJZGVmRGF0dW0gPSBPaWRGdW5jdGlv bkNhbGwxKEZfUEdfR0VUX0NPTlNUUkFJTlRERUZfT0lELAorCQkJCQkJCQkJT2JqZWN0SWRHZXRE YXR1bShjb24tPm9pZCkpOworCQlkZWZib2R5ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkZWZEYXR1 bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiQ09OU1RSQUlOVCAlcyAlcyIsCisJCQkJCQkg cXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGNvbi0+Y29ubmFtZSkpLAorCQkJCQkJIGRlZmJvZHkp OworCQlwZnJlZShkZWZib2R5KTsKKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0 YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBhcHBlbmRf Y29sdW1uX2RlZnMKKyAqCQlBcHBlbmQgdGhlIGNvbW1hLXNlcGFyYXRlZCBjb2x1bW4gZGVmaW5p dGlvbiBsaXN0IGZvciBhIHRhYmxlLgorICoKKyAqIEVtaXRzIGVhY2ggbm9uLWRyb3BwZWQsIGxv Y2FsbHktZGVjbGFyZWQgY29sdW1uIGFzCisgKgkJbmFtZSB0eXBlIFtDT0xMQVRFIHhdIFtTVE9S QUdFIHNdIFtDT01QUkVTU0lPTiBjXQorICoJCVtHRU5FUkFURUQgLi4uIHwgREVGQVVMVCBlXSBb Tk9UIE5VTExdCisgKiBmb2xsb3dlZCBieSBhbnkgbG9jYWxseS1kZWNsYXJlZCBpbmxpbmUgQ0hF Q0sgY29uc3RyYWludHMuICBPcHRpb25hbAorICogY2xhdXNlcyBhcmUgb21pdHRlZCB3aGVuIHRo ZWlyIHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUgc3lzdGVtIHdvdWxkCisgKiByZWFwcGx5IG9uIHJv dW5kLXRyaXAgKGUuZy4gdHlwZS1kZWZhdWx0IENPTExBVEUsIHR5cGUtZGVmYXVsdCBTVE9SQUdF KS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1Ziwg UmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJ CQkJICAgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLAorCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICpu bl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OworCU9pZAkJCWJhc2VfbmFtZXNwYWNlID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwlM aXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJZm9yIChp bnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAqdHlwc3RyOwor CisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENv bHVtbnMgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgYXJlIGNvdmVyZWQgYnkgdGhlIElOSEVSSVRT IGNsYXVzZSwKKwkJICogbm90IHRoZSBjb2x1bW4gbGlzdCwgdW5sZXNzIHRoZSBjaGlsZCByZWRl Y2xhcmVkIHRoZW0gbG9jYWxseQorCQkgKiAoYXR0aXNsb2NhbD10cnVlKS4KKwkJICovCisJCWlm ICghYXR0LT5hdHRpc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAgIik7CisJCWVsc2UgaWYgKCFmaXJzdCkKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0 bmFtZSkpKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJCXR5cHN0ciA9 IGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChhdHQtPmF0dHR5cGlkLCBhdHQtPmF0dHR5cG1vZCk7 CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCB0eXBzdHIpOworCQlwZnJlZSh0eXBzdHIp OworCisJCS8qIENPTExBVEUgY2xhdXNlLCBvbmx5IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdHlw ZSdzIGRlZmF1bHQuICovCisJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSAmJgor CQkJYXR0LT5hdHRjb2xsYXRpb24gIT0gZ2V0X3R5cGNvbGxhdGlvbihhdHQtPmF0dHR5cGlkKSkK KwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0 ZV9jb2xsYXRpb25fbmFtZShhdHQtPmF0dGNvbGxhdGlvbikpOworCisJCS8qIFNUT1JBR0UgY2xh dXNlLCBvbmx5IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZSdzIGRlZmF1bHQuICovCisJCWlm IChhdHQtPmF0dHN0b3JhZ2UgIT0gZ2V0X3R5cHN0b3JhZ2UoYXR0LT5hdHR0eXBpZCkpCisJCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBTVE9SQUdFICVzIiwgc3RvcmFnZV9uYW1lKGF0dC0+YXR0 c3RvcmFnZSkpOworCisJCS8qIENPTVBSRVNTSU9OIGNsYXVzZSwgb25seSBpZiBleHBsaWNpdGx5 IHNldCBvbiB0aGUgY29sdW1uLiAqLworCQlpZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0 dC0+YXR0Y29tcHJlc3Npb24pKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09NUFJFU1NJ T04gJXMiLAorCQkJCQkJCSBHZXRDb21wcmVzc2lvbk1ldGhvZE5hbWUoYXR0LT5hdHRjb21wcmVz c2lvbikpOworCisJCS8qCisJCSAqIExvb2sgdXAgdGhlIGRlZmF1bHQvZ2VuZXJhdGVkIGV4cHJl c3Npb24gdGV4dCB1cCBmcm9udDsgZ2VuZXJhdGVkCisJCSAqIGNvbHVtbnMgaGF2ZSBhdHRoYXNk ZWY9dHJ1ZSB3aXRoIGFuIGVudHJ5IGluIHBnX2F0dHJkZWYganVzdCBsaWtlCisJCSAqIHJlZ3Vs YXIgZGVmYXVsdHMuCisJCSAqLworCQl7CisJCQljaGFyCSAgICpkZWZleHByID0gTlVMTDsKKwor CQkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJCWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChy ZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQkJLyogR0VORVJBVEVEIC8gSURFTlRJ VFkgLyBERUZBVUxUIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovCisJCQlpZiAoYXR0LT5hdHRn ZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQgJiYgZGVmZXhwcikKKwkJCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5FUkFURUQgQUxXQVlTIEFTICglcykgU1RPUkVEIiwg ZGVmZXhwcik7CisJCQllbHNlIGlmIChhdHQtPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VO RVJBVEVEX1ZJUlRVQUwgJiYgZGVmZXhwcikKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBH RU5FUkFURUQgQUxXQVlTIEFTICglcykgVklSVFVBTCIsIGRlZmV4cHIpOworCQkJZWxzZSBpZiAo YXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTIHx8CisJCQkJCSBh dHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQkJewor CQkJCWNvbnN0IGNoYXIgKmlka2luZCA9CisJCQkJCShhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJ QlVURV9JREVOVElUWV9BTFdBWVMpCisJCQkJCT8gIkFMV0FZUyIgOiAiQlkgREVGQVVMVCI7CisJ CQkJT2lkCQkJc2VxaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbCwgYXR0LT5hdHRudW0sIHRy dWUpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEICVzIEFTIElERU5U SVRZIiwgaWRraW5kKTsKKworCQkJCS8qCisJCQkJICogRW1pdCBvbmx5IHRoZSBzZXF1ZW5jZSBv cHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhlaXIKKwkJCQkgKiBkZWZhdWx0cyAtIG1pcnJvcmlu ZyBwZ19nZXRfZGF0YWJhc2VfZGRsJ3MgcGF0dGVybiBvZgorCQkJCSAqIG9taXR0aW5nIHZhbHVl cyB0aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVhcHBseSBvbiBpdHMgb3duLgorCQkJCSAqLworCQkJ CWlmIChPaWRJc1ZhbGlkKHNlcWlkKSkKKwkJCQl7CisJCQkJCUhlYXBUdXBsZQlzZXFUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoU0VRUkVMSUQsCisJCQkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVt KHNlcWlkKSk7CisKKwkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoc2VxVHVwKSkKKwkJCQkJewor CQkJCQkJRm9ybV9wZ19zZXF1ZW5jZSBzZXEgPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNU KHNlcVR1cCk7CisJCQkJCQlTdHJpbmdJbmZvRGF0YSBvcHRzOworCQkJCQkJYm9vbAkJZmlyc3Rf b3B0ID0gdHJ1ZTsKKwkJCQkJCWludDY0CQlkZWZfbWluLAorCQkJCQkJCQkJZGVmX21heCwKKwkJ CQkJCQkJCWRlZl9zdGFydDsKKwkJCQkJCWludDY0CQl0eXBfbWluLAorCQkJCQkJCQkJdHlwX21h eDsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFBlci10eXBlIGJvdW5kcyBmb3IgdGhlIHNlcXVlbmNl J3MgdW5kZXJseWluZworCQkJCQkJICogaW50ZWdlciB0eXBlLiAgRGVmYXVsdHMgdG8gaW50OCBp ZiB0aGUgY29sdW1uIHR5cGUKKwkJCQkJCSAqIGlzIHNvbWV0aGluZyBlbHNlIChzaG91bGRuJ3Qg aGFwcGVuIGZvciBJREVOVElUWSwKKwkJCQkJCSAqIGJ1dCBiZSBkZWZlbnNpdmUpLgorCQkJCQkJ ICovCisJCQkJCQlzd2l0Y2ggKGF0dC0+YXR0dHlwaWQpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBJ TlQyT0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UMTZfTUlOOworCQkJCQkJCQl0eXBfbWF4 ID0gUEdfSU5UMTZfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIElOVDRPSUQ6CisJ CQkJCQkJCXR5cF9taW4gPSBQR19JTlQzMl9NSU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQz Ml9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXR5cF9taW4g PSBQR19JTlQ2NF9NSU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQ2NF9NQVg7CisJCQkJCQkJ CWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAoc2VxLT5zZXFpbmNyZW1lbnQgPiAwKQorCQkJ CQkJeworCQkJCQkJCWRlZl9taW4gPSAxOworCQkJCQkJCWRlZl9tYXggPSB0eXBfbWF4OworCQkJ CQkJCWRlZl9zdGFydCA9IGRlZl9taW47CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJ CQkJCQkJZGVmX21pbiA9IHR5cF9taW47CisJCQkJCQkJZGVmX21heCA9IC0xOworCQkJCQkJCWRl Zl9zdGFydCA9IGRlZl9tYXg7CisJCQkJCQl9CisKKwkJCQkJCWluaXRTdHJpbmdJbmZvKCZvcHRz KTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFNFUVVFTkNFIE5BTUUgLSBvbWl0IHdoZW4gaXQgbWF0 Y2hlcyB0aGUgaW1wbGljaXQKKwkJCQkJCSAqICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fc2Vx IiBwYXR0ZXJuIGluIHRoZSBzYW1lCisJCQkJCQkgKiBzY2hlbWEsIHNpbmNlIENSRUFURSBUQUJM RSB3aWxsIHJlZ2VuZXJhdGUgdGhhdAorCQkJCQkJICogZXhhY3QgbmFtZS4gIFRoZSBzZXF1ZW5j ZSBpcyBhbiBJTlRFUk5BTCBkZXBlbmRlbmN5CisJCQkJCQkgKiBvZiB0aGUgY29sdW1uLCBzbyB0 aGUgbG9jayB3ZSBob2xkIG9uIHRoZSB0YWJsZQorCQkJCQkJICogYWxzbyBwaW5zIGl0LCBidXQg dGhlIGxvb2t1cCBoZWxwZXIgc3RpbGwgZGVmZW5kcworCQkJCQkJICogYWdhaW5zdCBhIG1pc3Np bmcgcGdfY2xhc3Mgcm93LgorCQkJCQkJICovCisJCQkJCQl7CisJCQkJCQkJSGVhcFR1cGxlCXNl cUNsYXNzVHVwOworCQkJCQkJCUZvcm1fcGdfY2xhc3Mgc2VxQ2xhc3M7CisJCQkJCQkJY2hhcgkJ YXV0b25hbWVbTkFNRURBVEFMRU5dOworCisJCQkJCQkJc2VxQ2xhc3NUdXAgPSBTZWFyY2hTeXND YWNoZTEoUkVMT0lELAorCQkJCQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oc2VxaWQpKTsK KwkJCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxQ2xhc3NUdXApKQorCQkJCQkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCks CisJCQkJCQkJCQkJIGVycm1zZygiaWRlbnRpdHkgc2VxdWVuY2Ugd2l0aCBPSUQgJXUgZG9lcyBu b3QgZXhpc3QiLAorCQkJCQkJCQkJCQkJc2VxaWQpLAorCQkJCQkJCQkJCSBlcnJkZXRhaWwoIkl0 IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKwkJCQkJCQlzZXFDbGFz cyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1Qoc2VxQ2xhc3NUdXApOworCisJCQkJCQkJc25w cmludGYoYXV0b25hbWUsIHNpemVvZihhdXRvbmFtZSksICIlc18lc19zZXEiLAorCQkJCQkJCQkJ IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkgTmFtZVN0cihhdHQtPmF0 dG5hbWUpKTsKKwkJCQkJCQlpZiAoc2VxQ2xhc3MtPnJlbG5hbWVzcGFjZSAhPSBSZWxhdGlvbkdl dE5hbWVzcGFjZShyZWwpIHx8CisJCQkJCQkJCXN0cmNtcChOYW1lU3RyKHNlcUNsYXNzLT5yZWxu YW1lKSwgYXV0b25hbWUpICE9IDApCisJCQkJCQkJeworCQkJCQkJCQljaGFyCSAgICpzZXFRdWFs ID0KKwkJCQkJCQkJCWxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHNlcWlkLAorCQkJCQkJCQkJCQkJ CQkJc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWJhc2VfbmFtZXNwYWNlKTsKKwor CQkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTRVFVRU5DRSBOQU1FICVzIiwKKwkJ CQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxUXVhbCk7CisJCQkJCQkJCWZpcnN0 X29wdCA9IGZhbHNlOworCQkJCQkJCQlwZnJlZShzZXFRdWFsKTsKKwkJCQkJCQl9CisJCQkJCQkJ UmVsZWFzZVN5c0NhY2hlKHNlcUNsYXNzVHVwKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKHNlcS0+ c2Vxc3RhcnQgIT0gZGVmX3N0YXJ0KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8o Jm9wdHMsICIlc1NUQVJUIFdJVEggIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9v cHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFzdGFydCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7 CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFpbmNyZW1lbnQgIT0gMSkKKwkJCQkJCXsKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNJTkNSRU1FTlQgQlkgIiBJTlQ2NF9GT1JN QVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFpbmNyZW1lbnQp OworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2Vx bWluICE9IGRlZl9taW4pCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywg IiVzTUlOVkFMVUUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6 ICIgIiwgc2VxLT5zZXFtaW4pOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQor CQkJCQkJaWYgKHNlcS0+c2VxbWF4ICE9IGRlZl9tYXgpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbygmb3B0cywgIiVzTUFYVkFMVUUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJ CSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFtYXgpOworCQkJCQkJCWZpcnN0X29wdCA9 IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxY2FjaGUgIT0gMSkKKwkJCQkJCXsK KwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNDQUNIRSAiIElOVDY0X0ZPUk1BVCwK KwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcWNhY2hlKTsKKwkJCQkJ CQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWN5Y2xlKQor CQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0NZQ0xFIiwgZmlyc3Rf b3B0ID8gIiIgOiAiICIpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCisJ CQkJCQlpZiAoIWZpcnN0X29wdCkKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAoJXMp Iiwgb3B0cy5kYXRhKTsKKworCQkJCQkJcGZyZWUob3B0cy5kYXRhKTsKKwkJCQkJCVJlbGVhc2VT eXNDYWNoZShzZXFUdXApOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGVmZXhw cikKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBERUZBVUxUICVzIiwgZGVmZXhwcik7CisK KwkJCWlmIChkZWZleHByKQorCQkJCXBmcmVlKGRlZmV4cHIpOworCQl9CisKKwkJaWYgKGF0dC0+ YXR0bm90bnVsbCkKKwkJeworCQkJTG9jYWxOb3ROdWxsRW50cnkgKm5uID0gJm5uX2VudHJpZXNb YXR0LT5hdHRudW1dOworCisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiAhbm4tPmlzX2F1dG8p CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09OU1RSQUlOVCAlcyBOT1QgTlVMTCIsCisJ CQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKG5uLT5uYW1lKSk7CisJCQllbHNlCisJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICIgTk9UIE5VTEwiKTsKKwkJCWlmIChubi0+bmFtZSAhPSBO VUxMICYmIG5uLT5ub19pbmhlcml0KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAi IE5PIElOSEVSSVQiKTsKKwkJfQorCX0KKworCS8qCisJICogVGFibGUtbGV2ZWwgQ0hFQ0sgY29u c3RyYWludHMgLSBlbWl0dGVkIGlubGluZSBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkKKwkgKiBz byB0aGV5IGFwcGVhciBhbG9uZ3NpZGUgdGhlIGNvbHVtbnMgKHRoZSBwZ19kdW1wIHNoYXBlKS4g IFRoZQorCSAqIGNvbnN0cmFpbnQgbG9vcCBsYXRlciBpbiBwZ19nZXRfdGFibGVfZGRsX2ludGVy bmFsIHNraXBzIENIRUNLCisJICogY29uc3RyYWludHMgdG8gYXZvaWQgZG91YmxlLWVtaXNzaW9u LgorCSAqLworCWlmIChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0 cmFpbnRzKGJ1ZiwgcmVsLCBwcmV0dHksICZmaXJzdCk7Cit9CisKKy8qCisgKiBhcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcworICoJCUZvciBhIHR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUg Li4uIE9GIHR5cGVfbmFtZSksIGFwcGVuZCB0aGUKKyAqCQlvcHRpb25hbCAiKGNvbCBXSVRIIE9Q VElPTlMgLi4uLCAuLi4pIiBsaXN0IGNhcnJ5aW5nIGxvY2FsbHkKKyAqCQlhcHBsaWVkIHBlci1j b2x1bW4gb3ZlcnJpZGVzIC0gREVGQVVMVCwgTk9UIE5VTEwsIGFuZCBhbnkgbG9jYWxseQorICoJ CWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnRzLgorICoKKyAqIENvbHVtbnMgd2hvc2UgdHlwZSBp cyBmdWxseSBkaWN0YXRlZCBieSByZWxvZnR5cGUgZW1pdCBub3RoaW5nLiAgVGhlCisgKiBwYXJl bnRoZXNpc2VkIGxpc3QgaXMgc3VwcHJlc3NlZCBlbnRpcmVseSB3aGVuIG5vIGNvbHVtbiBuZWVk cyBhbgorICogb3ZlcnJpZGUgYW5kIHRoZXJlIGFyZSBubyBsb2NhbGx5LWRlY2xhcmVkIENIRUNL IGNvbnN0cmFpbnRzLCBtYXRjaGluZworICogdGhlIGNhbm9uaWNhbCAiQ1JFQVRFIFRBQkxFIHgg T0YgdDsiIHNoYXBlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVy cmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJ ICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50 cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlM aXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJU3RyaW5nSW5mb0RhdGEgaW5uZXI7CisJYm9vbAkJ Zmlyc3QgPSB0cnVlOworCisJaW5pdFN0cmluZ0luZm8oJmlubmVyKTsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0 dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKmRlZmV4cHIgPSBOVUxM OworCQlib29sCQloYXNfZGVmYXVsdDsKKwkJYm9vbAkJaGFzX25vdG51bGw7CisKKwkJaWYgKGF0 dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGF0dC0+YXR0aGFzZGVmKQor CQkJZGVmZXhwciA9IGZpbmRfYXR0cmRlZl90ZXh0KHJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRl eHQpOworCisJCWhhc19kZWZhdWx0ID0gKGRlZmV4cHIgIT0gTlVMTCk7CisJCWhhc19ub3RudWxs ID0gYXR0LT5hdHRub3RudWxsOworCisJCWlmICghaGFzX2RlZmF1bHQgJiYgIWhhc19ub3RudWxs KQorCQl7CisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHByKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZpbm5lciwg JywnKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAi XG4gICAgIik7CisJCWVsc2UgaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZp bm5lciwgJyAnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5l ciwgIiVzIFdJVEggT1BUSU9OUyIsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0 dC0+YXR0bmFtZSkpKTsKKwkJaWYgKGhhc19kZWZhdWx0KQorCQkJYXBwZW5kU3RyaW5nSW5mbygm aW5uZXIsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCQlpZiAoaGFzX25vdG51bGwpCisJCXsK KwkJCUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKwor CQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmlu Z0luZm8oJmlubmVyLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmlubmVyLCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+ bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOTyBJTkhF UklUIik7CisJCX0KKworCQlpZiAoZGVmZXhwcikKKwkJCXBmcmVlKGRlZmV4cHIpOworCX0KKwor CS8qCisJICogTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cyBvbiBhIHR5cGVkIHRh YmxlIGJlbG9uZyBpbiB0aGUKKwkgKiBjb2x1bW4tbGlzdCBwYXJlbnRoZXNlcywgc2FtZSBhcyBm b3IgYW4gdW50eXBlZCB0YWJsZS4gIFRoZSBvdXQtb2YtbGluZQorCSAqIGNvbnN0cmFpbnQgbG9v cCBsYXRlciBzdGlsbCBza2lwcyBDSEVDS3MuCisJICovCisJaWYgKGluY2x1ZGVfY2hlY2spCisJ CWFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoJmlubmVyLCByZWwsIHByZXR0eSwgJmZp cnN0KTsKKworCWlmICghZmlyc3QpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiAoIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBpbm5lci5kYXRhKTsKKwkJaWYg KHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4pIik7CisJCWVsc2UK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwl9CisJcGZyZWUoaW5uZXIuZGF0 YSk7Cit9CisKKy8qCisgKiBhcHBlbmRfc3RtdAorICoJCVB1c2ggY3R4LT5idWYgb250byBjdHgt PnN0YXRlbWVudHMuCisgKgorICogVXNlZCBmb3IgYWxsIERETCBlbWlzc2lvbnMuICBXaGVuIHNj aGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIHRoZQorICogYWN0aXZlIHNlYXJjaF9wYXRoIGhhcyBh bHJlYWR5IGJlZW4gbmFycm93ZWQgdG8gdGhlIGJhc2Ugc2NoZW1hLCBzbworICogcnVsZXV0aWxz IGhlbHBlcnMgKHBnX2dldF9pbmRleGRlZl9kZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwKKyAqIHBn X2dldF9jb25zdHJhaW50ZGVmX2JvZHksIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbCkgcHJv ZHVjZQorICogdW5xdWFsaWZpZWQgbmFtZXMgZm9yIHNhbWUtc2NoZW1hIG9iamVjdHMgYXV0b21h dGljYWxseS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAq Y3R4KQoreworCWN0eC0+c3RhdGVtZW50cyA9IGxhcHBlbmQoY3R4LT5zdGF0ZW1lbnRzLCBwc3Ry ZHVwKGN0eC0+YnVmLmRhdGEpKTsKK30KKworLyoKKyAqIGVtaXRfY3JlYXRlX3RhYmxlX3N0bXQK KyAqCQlCdWlsZCB0aGUgbGVhZGluZyBDUkVBVEUgVEFCTEUgc3RhdGVtZW50LCBpbmNsdWRpbmcg cGVyc2lzdGVuY2UKKyAqCQkoVEVNUE9SQVJZIC8gVU5MT0dHRUQpLCBib2R5IChjb2x1bW4gbGlz dCAvIE9GIHR5cGVfbmFtZSAvCisgKgkJUEFSVElUSU9OIE9GIHBhcmVudCksIElOSEVSSVRTLCBQ QVJUSVRJT04gQlksIFVTSU5HIG1ldGhvZCwKKyAqCQlXSVRIIChyZWxvcHRpb25zKSwgVEFCTEVT UEFDRSwgYW5kIE9OIENPTU1JVC4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfY3JlYXRlX3RhYmxl X3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVsYXRpb24JcmVsID0gY3R4LT5yZWw7 CisJY2hhcgkJcmVscGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CisJ Y2hhcgkJcmVsa2luZCA9IHJlbC0+cmRfcmVsLT5yZWxraW5kOworCWJvb2wJCWlzX3R5cGVkID0g T2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsb2Z0eXBlKTsKKwlIZWFwVHVwbGUJY2xhc3N0dXA7 CisJRGF0dW0JCXJlbG9wdERhdHVtOworCWJvb2wJCXJlbG9wdElzbnVsbDsKKworCWNsYXNzdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNsYXNzdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwgY3R4LT5yZWxpZCk7CisKKwlyZWxvcHRE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAorCQkJCQkJCQkgIEFudW1f cGdfY2xhc3NfcmVsb3B0aW9ucywgJnJlbG9wdElzbnVsbCk7CisKKwlyZXNldFN0cmluZ0luZm8o JmN0eC0+YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIkNSRUFURSAi KTsKKwlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICJURU1QT1JBUlkgIik7CisJZWxzZSBpZiAocmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCAiVU5MT0dHRUQgIik7CisJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICJUQUJMRSAlcyIsIGN0eC0+cXVhbG5hbWUpOworCisJaWYgKHJlbC0+cmRfcmVsLT5y ZWxpc3BhcnRpdGlvbikKKwl7CisJCU9pZAkJCXBhcmVudE9pZCA9IGdldF9wYXJ0aXRpb25fcGFy ZW50KGN0eC0+cmVsaWQsIHRydWUpOworCQljaGFyCSAgICpwYXJlbnRRdWFsID0gbG9va3VwX3Jl bG5hbWVfZm9yX2VtaXQocGFyZW50T2lkLAorCQkJCQkJCQkJCQkJCQkgY3R4LT5zY2hlbWFfcXVh bGlmaWVkLAorCQkJCQkJCQkJCQkJCQkgY3R4LT5iYXNlX25hbWVzcGFjZSk7CisJCWNoYXIJICAg KnBhcmVudFJlbG5hbWUgPSBnZXRfcmVsX25hbWUocGFyZW50T2lkKTsKKwkJRGF0dW0JCWJvdW5k RGF0dW07CisJCWJvb2wJCWJvdW5kSXNudWxsOworCQljaGFyCSAgICpmb3JWYWx1ZXMgPSBOVUxM OworCQljaGFyCSAgICpib3VuZFN0ciA9IE5VTEw7CisKKwkJaWYgKHBhcmVudFJlbG5hbWUgPT0g TlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVE X09CSkVDVCksCisJCQkJCSBlcnJtc2coInBhcnRpdGlvbiBwYXJlbnQgd2l0aCBPSUQgJXUgZG9l cyBub3QgZXhpc3QiLAorCQkJCQkJCXBhcmVudE9pZCksCisJCQkJCSBlcnJkZXRhaWwoIkl0IG1h eSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKworCQlib3VuZERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgY2xhc3N0dXAsCisJCQkJCQkJCQkgQW51bV9wZ19jbGFz c19yZWxwYXJ0Ym91bmQsICZib3VuZElzbnVsbCk7CisJCWlmICghYm91bmRJc251bGwpCisJCXsK KwkJCU5vZGUJICAgKmJvdW5kTm9kZTsKKwkJCUxpc3QJICAgKmRwY29udGV4dDsKKworCQkJYm91 bmRTdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pOworCQkJYm91bmROb2RlID0g c3RyaW5nVG9Ob2RlKGJvdW5kU3RyKTsKKwkJCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IocGFyZW50UmVsbmFtZSwgcGFyZW50T2lkKTsKKwkJCWZvclZhbHVlcyA9IGRlcGFyc2VfZXhw cmVzc2lvbihib3VuZE5vZGUsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwkJfQorCisJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFBBUlRJVElPTiBPRiAlcyAlcyIsCisJCQkJCQkg cGFyZW50UXVhbCwgZm9yVmFsdWVzID8gZm9yVmFsdWVzIDogIkRFRkFVTFQiKTsKKwkJaWYgKGZv clZhbHVlcykKKwkJCXBmcmVlKGZvclZhbHVlcyk7CisJCWlmIChib3VuZFN0cikKKwkJCXBmcmVl KGJvdW5kU3RyKTsKKwkJcGZyZWUocGFyZW50UXVhbCk7CisJCXBmcmVlKHBhcmVudFJlbG5hbWUp OworCX0KKwllbHNlIGlmIChpc190eXBlZCkKKwl7CisJCWNoYXIJICAgKnR5cG5hbWUgPSBmb3Jt YXRfdHlwZV9iZV9xdWFsaWZpZWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisKKwkJYXBwZW5k U3RyaW5nSW5mbygmY3R4LT5idWYsICIgT0YgJXMiLCB0eXBuYW1lKTsKKwkJcGZyZWUodHlwbmFt ZSk7CisKKwkJYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoJmN0eC0+YnVmLCByZWwsIGN0 eC0+cHJldHR5LAorCQkJCQkJCQkJICBpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJ TkRfQ0hFQ0spLAorCQkJCQkJCQkJICBjdHgtPm5uX2VudHJpZXMpOworCX0KKwllbHNlCisJewor CQlMaXN0CSAgICpwYXJlbnRzOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJZmlyc3Q7CisK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgKCIpOworCisJCWFwcGVuZF9j b2x1bW5fZGVmcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkgICBpc19raW5k X2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfQ0hFQ0spLAorCQkJCQkJICAgY3R4LT5zY2hl bWFfcXVhbGlmaWVkLCBjdHgtPm5uX2VudHJpZXMpOworCisJCWlmIChjdHgtPnByZXR0eSkKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiXG4pIik7CisJCWVsc2UKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKworCQlwYXJlbnRzID0gZmluZF9p bmhlcml0YW5jZV9wYXJlbnRzKGN0eC0+cmVsaWQsIE5vTG9jayk7CisJCWlmIChwYXJlbnRzICE9 IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgSU5IRVJJ VFMgKCIpOworCQkJZmlyc3QgPSB0cnVlOworCQkJZm9yZWFjaChsYywgcGFyZW50cykKKwkJCXsK KwkJCQlPaWQJCQlwb2lkID0gbGZpcnN0X29pZChsYyk7CisJCQkJY2hhcgkgICAqcG5hbWUgPSBs b29rdXBfcmVsbmFtZV9mb3JfZW1pdChwb2lkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5zY2hlbWFf cXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5iYXNlX25hbWVzcGFjZSk7CisKKwkJCQlp ZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiwgIik7 CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1 ZiwgcG5hbWUpOworCQkJCXBmcmVlKHBuYW1lKTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwkJCWxpc3RfZnJlZShwYXJlbnRzKTsKKwkJfQorCX0KKwor CWlmIChyZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlEYXR1bQkJ cGFydGtleURhdHVtOworCQljaGFyCSAgICpwYXJ0a2V5OworCisJCXBhcnRrZXlEYXR1bSA9IE9p ZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfUEFSVEtFWURFRiwKKwkJCQkJCQkJCQlPYmplY3RJZEdl dERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcGFydGtleSA9IFRleHREYXR1bUdldENTdHJpbmcocGFy dGtleURhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgUEFSVElUSU9OIEJZ ICVzIiwgcGFydGtleSk7CisJCXBmcmVlKHBhcnRrZXkpOworCX0KKworCWlmIChPaWRJc1ZhbGlk KHJlbC0+cmRfcmVsLT5yZWxhbSkgJiYKKwkJcmVsLT5yZF9yZWwtPnJlbGFtICE9IEhFQVBfVEFC TEVfQU1fT0lEKQorCXsKKwkJY2hhcgkgICAqYW1uYW1lID0gZ2V0X2FtX25hbWUocmVsLT5yZF9y ZWwtPnJlbGFtKTsKKworCQlpZiAoYW1uYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmN0eC0+YnVmLCAiIFVTSU5HICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihh bW5hbWUpKTsKKwkJCXBmcmVlKGFtbmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbG9wdElzbnVs bCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIFdJVEggKCIpOwor CQlnZXRfcmVsb3B0aW9ucygmY3R4LT5idWYsIHJlbG9wdERhdHVtKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmN0eC0+YnVmLCAnKScpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1 cCk7CisKKwlpZiAoIWN0eC0+bm9fdGFibGVzcGFjZSAmJiBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVs LT5yZWx0YWJsZXNwYWNlKSkKKwl7CisJCWNoYXIJICAgKnRzbmFtZSA9IGdldF90YWJsZXNwYWNl X25hbWUocmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpOworCisJCWlmICh0c25hbWUgIT0gTlVM TCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgVEFCTEVTUEFDRSAlcyIs CisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHNuYW1lKSk7CisJCQlwZnJlZSh0c25hbWUpOwor CQl9CisJfQorCisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJ eworCQlPbkNvbW1pdEFjdGlvbiBvYyA9IGdldF9vbl9jb21taXRfYWN0aW9uKGN0eC0+cmVsaWQp OworCisJCWlmIChvYyA9PSBPTkNPTU1JVF9ERUxFVEVfUk9XUykKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBERUxFVEUgUk9XUyIpOworCQllbHNlIGlm IChvYyA9PSBPTkNPTU1JVF9EUk9QKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5i dWYsICIgT04gQ09NTUlUIERST1AiKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4 LT5idWYsICc7Jyk7CisJYXBwZW5kX3N0bXQoY3R4KTsKK30KKworLyoKKyAqIGVtaXRfb3duZXJf c3RtdAorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIE9XTkVSIFRPIHJvbGUuCisgKi8KK3N0YXRp YyB2b2lkCitlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJY2hhcgkg ICAqb3duZXI7CisKKwlpZiAoY3R4LT5ub19vd25lcikKKwkJcmV0dXJuOworCisJb3duZXIgPSBH ZXRVc2VyTmFtZUZyb21JZChjdHgtPnJlbC0+cmRfcmVsLT5yZWxvd25lciwgZmFsc2UpOworCXJl c2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAi QUxURVIgVEFCTEUgJXMgT1dORVIgVE8gJXM7IiwKKwkJCQkJIGN0eC0+cXVhbG5hbWUsIHF1b3Rl X2lkZW50aWZpZXIob3duZXIpKTsKKwlhcHBlbmRfc3RtdChjdHgpOworCXBmcmVlKG93bmVyKTsK K30KKworLyoKKyAqIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4gY29sIFNFVCBERUZBVUxUIGV4cHIgLSBvbmUgcGVyCisg KgkJaW5oZXJpdGVkIChhdHRpc2xvY2FsPWZhbHNlKSBub24tZ2VuZXJhdGVkIGNvbHVtbiBjYXJy eWluZyBhCisgKgkJbG9jYWxseS1zZXQgZGVmYXVsdC4gIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBz a2lwcGVkOiB0aGVpcgorICoJCWV4cHJlc3Npb24gaXMgaW5oZXJpdGVkIGF1dG9tYXRpY2FsbHkg YW5kIFNFVCBERUZBVUxUIHdvdWxkCisgKgkJZmFpbCBhdCByZXBsYXkuCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KQor eworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisJTGlz dAkgICAqZHBjb250ZXh0ID0gTklMOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5u YXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0 dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAqZGVmc3RyOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBl ZCB8fCBhdHQtPmF0dGlzbG9jYWwgfHwgIWF0dC0+YXR0aGFzZGVmKQorCQkJY29udGludWU7CisJ CWlmIChhdHQtPmF0dGdlbmVyYXRlZCAhPSAnXDAnKQorCQkJY29udGludWU7CisKKwkJZGVmc3Ry ID0gZmluZF9hdHRyZGVmX3RleHQoY3R4LT5yZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsK KwkJaWYgKGRlZnN0ciA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcmVzZXRTdHJpbmdJbmZv KCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJICJBTFRF UiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUIERFRkFVTFQgJXM7IiwKKwkJCQkJCSBjdHgt PnF1YWxuYW1lLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUp KSwKKwkJCQkJCSBkZWZzdHIpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlwZnJlZShkZWZzdHIp OworCX0KK30KKworLyoKKyAqIGVtaXRfYXR0b3B0aW9ucworICoJCUFMVEVSIFRBQkxFIHF1YWxu YW1lIEFMVEVSIENPTFVNTiBjb2wgU0VUICguLi4pIC0gb25lIHBlciBjb2x1bW4KKyAqCQl3aXRo IG5vbi1udWxsIHBnX2F0dHJpYnV0ZS5hdHRvcHRpb25zLiAgVGhlIGlubGluZSBmb3JtIG9mIHRo ZXNlCisgKgkJb3B0aW9ucyBpc24ndCBhdmFpbGFibGUgaW4gQ1JFQVRFIFRBQkxFLCBzbyB0aGV5 IGNvbWUgb3V0IGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2F0dG9wdGlvbnMoVGFibGVE ZGxDb250ZXh0ICpjdHgpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KGN0eC0+cmVsKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykK Kwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7 CisJCUhlYXBUdXBsZQlhdHRUdXA7CisJCURhdHVtCQlvcHREYXR1bTsKKwkJYm9vbAkJb3B0SXNu dWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWF0dFR1 cCA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKGN0 eC0+cmVsaWQpLAorCQkJCQkJCQkgSW50MTZHZXREYXR1bShhdHQtPmF0dG51bSkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwKSkKKwkJCWNvbnRpbnVlOworCisJCW9wdERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKEFUVE5VTSwgYXR0VHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX2F0dHJp YnV0ZV9hdHRvcHRpb25zLCAmb3B0SXNudWxsKTsKKwkJaWYgKCFvcHRJc251bGwpCisJCXsKKwkJ CXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5i dWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUICgiLAorCQkJ CQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0 LT5hdHRuYW1lKSkpOworCQkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCBvcHREYXR1bSk7CisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIik7Iik7CisJCQlhcHBlbmRfc3Rt dChjdHgpOworCQl9CisJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXApOworCX0KK30KKworLyoKKyAq IGVtaXRfaW5kZXhlcworICoJCUNSRUFURSBJTkRFWCBwZXIgbm9uLWNvbnN0cmFpbnQtYmFja2Vk IGluZGV4IG9uIHRoZSByZWxhdGlvbi4KKyAqCQlJbmRleGVzIHRoYXQgYmFjayBQSyAvIFVOSVFV RSAvIEVYQ0xVREUgY29uc3RyYWludHMgYXJlIGVtaXR0ZWQKKyAqCQlvdXQtb2YtbGluZSBieSBl bWl0X2xvY2FsX2NvbnN0cmFpbnRzICh0aGUgQUxURVIgVEFCTEUgLi4uIEFERAorICoJCUNPTlNU UkFJTlQgc3RhdGVtZW50IGNyZWF0ZXMgdGhlIGluZGV4IGltcGxpY2l0bHkpLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCUxpc3QJICAg KmluZGV4b2lkczsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChj dHgsIFRBQkxFX0RETF9LSU5EX0lOREVYKSkKKwkJcmV0dXJuOworCisJaW5kZXhvaWRzID0gUmVs YXRpb25HZXRJbmRleExpc3QoY3R4LT5yZWwpOworCWZvcmVhY2gobGMsIGluZGV4b2lkcykKKwl7 CisJCU9pZAkJCWlkeG9pZCA9IGxmaXJzdF9vaWQobGMpOworCQljaGFyCSAgICppZHhkZWY7CisK KwkJaWYgKE9pZElzVmFsaWQoZ2V0X2luZGV4X2NvbnN0cmFpbnQoaWR4b2lkKSkpCisJCQljb250 aW51ZTsKKworCQlpZHhkZWYgPSBwZ19nZXRfaW5kZXhkZWZfZGRsKGlkeG9pZCk7CisJCXJlc2V0 U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiVz OyIsIGlkeGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKGlkeGRlZik7CisJfQor CWxpc3RfZnJlZShpbmRleG9pZHMpOworfQorCisvKgorICogZW1pdF9sb2NhbF9jb25zdHJhaW50 cworICoJCUFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3IgZWFjaCBsb2NhbGx5LWRl ZmluZWQgY29uc3RyYWludAorICoJCW9uIHRoZSByZWxhdGlvbi4gIEluaGVyaXRlZCBjb25zdHJh aW50cyAoY29uaXNsb2NhbD1mYWxzZSkgY29tZQorICoJCWZyb20gdGhlIHBhcmVudCdzIERETC4g IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGlubGluZSBmb3IKKyAqCQlyZWd1bGFyL3R5 cGVkIHRhYmxlcyAoc2tpcCBoZXJlKSBidXQgb3V0LW9mLWxpbmUgZm9yIHBhcnRpdGlvbgorICoJ CWNoaWxkcmVuIChubyBjb2x1bW4gbGlzdCB0byBsaXZlIGluKS4gIExvY2FsIE5PVCBOVUxMCisg KgkJY29uc3RyYWludHMgb24gYXR0aXNsb2NhbCBjb2x1bW5zIC0gd2hldGhlciB1c2VyLW5hbWVk IG9yCisgKgkJbWF0Y2hpbmcgdGhlIGF1dG8tbmFtZSBwYXR0ZXJuIC0gYXJlIGVtaXR0ZWQgaW5s aW5lIGJ5IHRoZQorICoJCWNvbHVtbi1lbWl0IGhlbHBlcnMgYW5kIGFyZSBza2lwcGVkIHZpYSBz a2lwX25vdG51bGxfb2lkcywKKyAqCQliZWNhdXNlIFBHIG9ubHkgYWxsb3dzIG9uZSBOT1QgTlVM TCBwZXIgY29sdW1uIGFuZCB3b3VsZCByZWplY3QKKyAqCQlhIHNlY29uZCBBTFRFUiBUQUJMRSAu Li4gQUREIENPTlNUUkFJTlQuICBQYXJ0aXRpb24gY2hpbGRyZW4KKyAqCQloYXZlIG5vIGNvbHVt biBsaXN0LCBzbyB0aGVpciBOT1QgTlVMTHMgZmFsbCB0aHJvdWdoIGhlcmUuCisgKgorICoJCUVh Y2ggY29udHlwZSBpcyBnYXRlZCBvbiB0aGUgbWF0Y2hpbmcga2luZCBpbiB0aGUgb25seSAvIGV4 Y2VwdAorICoJCXZvY2FidWxhcnksIHNvIGNhbGxlcnMgY2FuIHByb2R1Y2UgZS5nLiBhbiBGSy1v bmx5IHBhc3MKKyAqCQkob25seSA9PiAnZm9yZWlnbl9rZXknKSBvciBhIHB1Yi9zdWIgY2xvbmUg dGhhdCBrZWVwcyBvbmx5CisgKgkJdGhlIHByaW1hcnkga2V5IChleGNlcHQgPT4gJ3VuaXF1ZSxj aGVjayxmb3JlaWduX2tleSxleGNsdXNpb24nKS4KKyAqCQlOT1QgTlVMTCBpcyBpbnRlbnRpb25h bGx5IG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBlbWl0dGVkCisgKgkJc28gY2xvbmVk IHNjaGVtYXMgZG9uJ3Qgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKyAq CQloYXZlIHJlamVjdGVkLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50 cyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRl c2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKwli b29sCQlpc19wYXJ0aXRpb24gPSBjdHgtPnJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbjsKKwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVs LCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwg MSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJs ZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9y bV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCQlpZiAoIWNvbi0+Y29uaXNs b2NhbCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEVhY2ggY29udHlwZSBpcyBnYXRlZCBv biBpdHMga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorCQkgKiB2b2NhYnVsYXJ5LiAgQ0hFQ0sg aXMgYWxzbyBza2lwcGVkIGZvciBub24tcGFydGl0aW9uIHJlbGF0aW9ucworCQkgKiBiZWNhdXNl IGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMgZW1pdHMgdGhvc2UgaW5saW5lIGluCisJ CSAqIHRoZSBDUkVBVEUgVEFCTEUgYm9keTsgcGFydGl0aW9uIGNoaWxkcmVuIGhhdmUgbm8gY29s dW1uIGxpc3QKKwkJICogdG8gbGl2ZSBpbiwgc28gdGhleSBjb21lIHRocm91Z2ggdGhpcyBsb29w LiAgTk9UIE5VTEwgaXMgbm90IGEKKwkJICogZmlsdGVyYWJsZSBraW5kIC0gZW1pdHRlZCB1bmNv bmRpdGlvbmFsbHkgdG8gYXZvaWQgcHJvZHVjaW5nCisJCSAqIHNjaGVtYXMgdGhhdCBzaWxlbnRs eSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlCisJCSAqIHJlamVjdGVkLgorCQkg Ki8KKwkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklN QVJZOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BSSU1B UllfS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRf VU5JUVVFOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1VO SVFVRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0NI RUNLOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNL KSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIEZvciBub24tcGFydGl0aW9uIHJl bGF0aW9ucywgQ0hFQ0sgaXMgbm9ybWFsbHkgZW1pdHRlZAorCQkJCSAqIGlubGluZSBpbiB0aGUg Q1JFQVRFIFRBQkxFIGJvZHkgYnkKKwkJCQkgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFp bnRzLCBzbyB3ZSBza2lwIGl0IGhlcmUgdG8KKwkJCQkgKiBhdm9pZCBkb3VibGUgZW1pc3Npb24u ICBCdXQgd2hlbiBLSU5EX1RBQkxFIGlzIG5vdCBpbgorCQkJCSAqIHRoZSBhY3RpdmUgZmlsdGVy IChlLmcuIG9ubHk9PidjaGVjaycgb3IgYSBjbG9uZSB0aGF0CisJCQkJICogdGFyZ2V0cyBvbmx5 IHN1Yi1vYmplY3RzKSwgdGhlIGlubGluZSBwYXNzIG5ldmVyIHJ1bnM7CisJCQkJICogZmFsbCB0 aHJvdWdoIGFuZCBlbWl0IGVhY2ggQ0hFQ0sgdmlhIEFMVEVSIFRBQkxFIHNvIHRoZQorCQkJCSAq IHVzZXIgYWN0dWFsbHkgZ2V0cyB0aGUgY29uc3RyYWludCB0aGV5IGFza2VkIGZvci4KKwkJCQkg Ki8KKwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlpc19raW5kX2luY2x1ZGVkKGN0eCwg VEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChj dHgsIFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTikpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX05PVE5VTEw6CisJCQkJLyoKKwkJCQkgKiBPdXQtb2YtbGlu ZSBOT1QgTlVMTCBpcyBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGUKKwkJCQkgKiB0YWJsZSBkZWZp bml0aW9uOiBnYXRpbmcgaXQgb24gS0lORF9UQUJMRSBtZWFucyBhbgorCQkJCSAqIG9ubHk9Zm9y ZWlnbl9rZXkgc2Vjb25kIHBhc3MgZG9lcyBub3QgcmUtZW1pdAorCQkJCSAqIE5PVCBOVUxMcyB0 aGF0IHRoZSBmaXJzdCBwYXNzIGFscmVhZHkgY3JlYXRlZCwKKwkJCQkgKiB3aGlsZSB0aGUgbm8t b3B0aW9ucyBkZWZhdWx0IHN0aWxsIGVtaXRzIHRoZW0uCisJCQkJICovCisJCQkJaWYgKCFpc19r aW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCQkJCQljb250aW51ZTsK KwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlsaXN0X21lbWJlcl9vaWQoY3R4LT5za2lw X25vdG51bGxfb2lkcywgY29uLT5vaWQpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBBbnkgZnV0dXJlIGNvbnR5cGUgdGhlIHZvY2FidWxh cnkgZG9lcyBub3QgeWV0IGNvdmVyOgorCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQgZW1pdCBpdCB2 aWEgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwKKwkJCQkgKiBtYXRjaGluZyB0aGUgb3Jp Z2luYWwgbG9vcCdzICJlbWl0IHVubGVzcyBmaWx0ZXJlZCIKKwkJCQkgKiBiZWhhdmlvci4gIFRo aXMgaXMgdW5yZWFjaGFibGUgaW4gY3VycmVudCBQRyAoZXZlcnkKKwkJCQkgKiBjb250eXBlIGFi b3ZlIGlzIGVudW1lcmF0ZWQpIGJ1dCBrZXB0IGRlZmVuc2l2ZSBhZ2FpbnN0CisJCQkJICogYSBu ZXcgY29udHlwZSBiZWluZyBpbnRyb2R1Y2VkLgorCQkJCSAqLworCQkJCWJyZWFrOworCQl9CisK KwkJeworCQkJY2hhcgkgICAqY29uYm9keSA9IHBnX2dldF9jb25zdHJhaW50ZGVmX2JvZHkoY29u LT5vaWQpOworCisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgQUREIENPTlNUUkFJTlQgJXMgJXM7IiwK KwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3Ry KGNvbi0+Y29ubmFtZSkpLAorCQkJCQkJCSBjb25ib2R5KTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7 CisJCQlwZnJlZShjb25ib2R5KTsKKwkJfQorCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNvblNjYW4p OworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIGVt aXRfcnVsZXMKKyAqCQlDUkVBVEUgUlVMRSBwZXIgY2FjaGVkIHJld3JpdGUgcnVsZSBvbiB0aGUg cmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAq Y3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JVTEUp IHx8CisJCWN0eC0+cmVsLT5yZF9ydWxlcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGN0eC0+cmVsLT5yZF9ydWxlcy0+bnVtTG9ja3M7IGkrKykKKwl7CisJCU9p ZAkJCXJ1bGVpZCA9IGN0eC0+cmVsLT5yZF9ydWxlcy0+cnVsZXNbaV0tPnJ1bGVJZDsKKwkJY2hh cgkgICAqcnVsZWRlZl9zdHI7CisKKwkJcnVsZWRlZl9zdHIgPSBwZ19nZXRfcnVsZWRlZl9kZGwo cnVsZWlkKTsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCBydWxlZGVmX3N0cik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJ CXBmcmVlKHJ1bGVkZWZfc3RyKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3N0YXRpc3RpY3MKKyAq CQlDUkVBVEUgU1RBVElTVElDUyBwZXIgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3Qgb24gdGhl IHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9zdGF0aXN0aWNzKFRhYmxlRGRsQ29u dGV4dCAqY3R4KQoreworCVJlbGF0aW9uCXN0YXRSZWw7CisJU3lzU2NhbkRlc2Mgc3RhdFNjYW47 CisJU2NhbktleURhdGEgc3RhdEtleTsKKwlIZWFwVHVwbGUJc3RhdFR1cDsKKworCWlmICghaXNf a2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1NUQVRJU1RJQ1MpKQorCQlyZXR1cm47 CisKKwlzdGF0UmVsID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZzdGF0S2V5LAorCQkJCUFudW1fcGdfc3RhdGlzdGlj X2V4dF9zdHhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ T2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJc3RhdFNjYW4gPSBzeXN0YWJsZV9iZWdp bnNjYW4oc3RhdFJlbCwgU3RhdGlzdGljRXh0UmVsaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUs IE5VTEwsIDEsICZzdGF0S2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHN0YXRUdXAg PSBzeXN0YWJsZV9nZXRuZXh0KHN0YXRTY2FuKSkpCisJeworCQlGb3JtX3BnX3N0YXRpc3RpY19l eHQgc3RhdCA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVChzdGF0VHVwKTsKKwkJ Y2hhcgkgICAqc3RhdGRlZiA9IHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbChzdGF0LT5vaWQp OworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZj dHgtPmJ1ZiwgIiVzOyIsIHN0YXRkZWYpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlwZnJlZShz dGF0ZGVmKTsKKwl9CisJc3lzdGFibGVfZW5kc2NhbihzdGF0U2Nhbik7CisJdGFibGVfY2xvc2Uo c3RhdFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIGVtaXRfcmVwbGljYV9pZGVu dGl0eQorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIFJFUExJQ0EgSURFTlRJVFkgLi4uIC0gZW1p dHRlZCBvbmx5IHdoZW4gdGhlCisgKgkJcmVscmVwbGlkZW50IGRpZmZlcnMgZnJvbSB0aGUgZGVm YXVsdCAoJ2QnID0gdXNlIHByaW1hcnkga2V5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcmVw bGljYV9pZGVudGl0eShUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlpZiAoIWlzX2tpbmRfaW5j bHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZKSkKKwkJcmV0dXJuOwor CWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9E RUZBVUxUKQorCQlyZXR1cm47CisKKwlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwlzd2l0 Y2ggKGN0eC0+cmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCkKKwl7CisJCWNhc2UgUkVQTElDQV9J REVOVElUWV9OT1RISU5HOgorCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJ ICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7IiwKKwkJCQkJCQkgY3R4 LT5xdWFsbmFtZSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQ TElDQV9JREVOVElUWV9GVUxMOgorCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJ CQkJICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNBIElERU5USVRZIEZVTEw7IiwKKwkJCQkJCQkgY3R4 LT5xdWFsbmFtZSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQ TElDQV9JREVOVElUWV9JTkRFWDoKKwkJCXsKKwkJCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25H ZXRSZXBsaWNhSW5kZXgoY3R4LT5yZWwpOworCisJCQkJaWYgKE9pZElzVmFsaWQocmVwbGlkeCkp CisJCQkJeworCQkJCQljaGFyCSAgICppZHhuYW1lID0gZ2V0X3JlbF9uYW1lKHJlcGxpZHgpOwor CisJCQkJCWlmIChpZHhuYW1lID09IE5VTEwpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkgZXJybXNnKCJy ZXBsaWNhIGlkZW50aXR5IGluZGV4IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJ CQkJCQlyZXBsaWR4KSwKKwkJCQkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25j dXJyZW50bHkgZHJvcHBlZC4iKSkpOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LAorCQkJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY ICVzOyIsCisJCQkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkJCSBxdW90ZV9pZGVudGlm aWVyKGlkeG5hbWUpKTsKKwkJCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJCQkJcGZyZWUoaWR4bmFt ZSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogZW1pdF9ybHNfdG9n Z2xlcworICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIEVOQUJMRSAvIEZPUkNFIFJPVyBMRVZFTCBT RUNVUklUWS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcmxzX3RvZ2dsZXMoVGFibGVEZGxDb250 ZXh0ICpjdHgpCit7CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRf UkxTKSkKKwkJcmV0dXJuOworCisJaWYgKGN0eC0+cmVsLT5yZF9yZWwtPnJlbHJvd3NlY3VyaXR5 KQorCXsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8o JmN0eC0+YnVmLAorCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJfQor CWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxmb3JjZXJvd3NlY3VyaXR5KQorCXsKKwkJcmVzZXRT dHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJ CQkJICJBTFRFUiBUQUJMRSAlcyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBj dHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9Cit9CisKKy8qCisgKiBlbWl0 X3BhcnRpdGlvbl9jaGlsZHJlbgorICoJCUZvciBlYWNoIGRpcmVjdCBwYXJ0aXRpb24gY2hpbGQg b2YgYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQsCisgKgkJcmVjdXJzaXZlbHkgY2FsbCBwZ19n ZXRfdGFibGVfZGRsX2ludGVybmFsIGFuZCBhcHBlbmQgdGhlIGNoaWxkJ3MKKyAqCQlzdGF0ZW1l bnRzLiAgRWFjaCBjaGlsZCdzIG93biBEREwgaGFuZGxlcyBmdXJ0aGVyIGxldmVscyB0aHJvdWdo CisgKgkJdGhlIHNhbWUgcmVjdXJzaW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9wYXJ0aXRp b25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJTGlzdAkgICAqY2hpbGRyZW47 CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9QQVJUSVRJT04pIHx8CisJCWN0eC0+cmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJcmV0dXJuOworCisJY2hpbGRyZW4gPSBmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuKGN0eC0+cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZm9yZWFj aChsYywgY2hpbGRyZW4pCisJeworCQlPaWQJCQljaGlsZG9pZCA9IGxmaXJzdF9vaWQobGMpOwor CQlUYWJsZURkbENvbnRleHQgY2hpbGRjdHggPSB7MH07CisJCUxpc3QJICAgKmNoaWxkc3RtdHM7 CisKKwkJLyoKKwkJICogRWFjaCByZWN1cnNpdmUgaW52b2NhdGlvbiByZS1kZXJpdmVzIGl0cyBv d24gcmVsLCBuYW1lc3BhY2UsCisJCSAqIHF1YWxuYW1lLCBOT1QgTlVMTCBjYWNoZSwgYnVmZmVy LCBhbmQgc3RhdGVtZW50IGxpc3QgaW5zaWRlCisJCSAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwuICBUaGUgdXNlci1zdXBwbGllZCBvcHRpb24gZmllbGRzCisJCSAqIGNhcnJ5IG92ZXIgdmVy YmF0aW0gd2l0aCBvbmUgZXhjZXB0aW9uOiBLSU5EX1BBUlRJVElPTiBpcyBhCisJCSAqICJnYXRl IiBraW5kIHRoYXQgY29udHJvbHMgd2hldGhlciB3ZSByZWN1cnNlIGF0IGFsbCwgbm90IGEKKwkJ ICoga2luZCB0aGF0IHRoZSBjaGlsZHJlbiB0aGVtc2VsdmVzIGV2ZXIgZW1pdC4gIElmIHdlIHBy b3BhZ2F0ZWQKKwkJICogYW4gb25seS1zZXQgdGhhdCBjb250YWluZWQgUEFSVElUSU9OIGludG8g YSBjaGlsZCwgdGhlIGNoaWxkCisJCSAqIHdvdWxkIG5vdCBlbWl0IGl0cyBvd24gQ1JFQVRFIFRB QkxFIChLSU5EX1RBQkxFIGFic2VudCkgbm9yCisJCSAqIGFueSBzdWItb2JqZWN0cywgYW5kIHRo ZSByZWN1cnNpb24gd291bGQgcHJvZHVjZSBub3RoaW5nLiAgU28KKwkJICogc3RyaXAgUEFSVElU SU9OIG91dCBvZiBvbmx5X2tpbmRzIHdoZW4gcmVjdXJzaW5nOyBpZiB0aGF0CisJCSAqIGVtcHRp ZXMgdGhlIHNldCwgZHJvcCB0aGUgZmlsdGVyIGVudGlyZWx5IHNvIHRoZSBjaGlsZCBlbWl0cwor CQkgKiBpdHMgZnVsbCBEREwuICBleGNlcHRfa2luZHMgcGFzc2VzIHRocm91Z2ggdW5jaGFuZ2Vk IGJlY2F1c2UKKwkJICogUEFSVElUSU9OIGluIHRoZSBleGNlcHQtc2V0IGFscmVhZHkgc3RvcHBl ZCB1cyBmcm9tIGdldHRpbmcKKwkJICogaGVyZS4KKwkJICovCisJCWNoaWxkY3R4LnJlbGlkID0g Y2hpbGRvaWQ7CisJCWNoaWxkY3R4LnByZXR0eSA9IGN0eC0+cHJldHR5OworCQljaGlsZGN0eC5u b19vd25lciA9IGN0eC0+bm9fb3duZXI7CisJCWNoaWxkY3R4Lm5vX3RhYmxlc3BhY2UgPSBjdHgt Pm5vX3RhYmxlc3BhY2U7CisJCWNoaWxkY3R4LnNjaGVtYV9xdWFsaWZpZWQgPSBjdHgtPnNjaGVt YV9xdWFsaWZpZWQ7CisJCWNoaWxkY3R4Lm9ubHlfa2luZHMgPSBjdHgtPm9ubHlfa2luZHM7CisJ CWNoaWxkY3R4LmV4Y2VwdF9raW5kcyA9IGN0eC0+ZXhjZXB0X2tpbmRzOworCisJCWlmIChjaGls ZGN0eC5vbmx5X2tpbmRzICE9IE5VTEwgJiYKKwkJCWJtc19pc19tZW1iZXIoKGludCkgVEFCTEVf RERMX0tJTkRfUEFSVElUSU9OLAorCQkJCQkJICBjaGlsZGN0eC5vbmx5X2tpbmRzKSkKKwkJewor CQkJQml0bWFwc2V0ICAqY2hpbGRfb25seSA9IGJtc19jb3B5KGNoaWxkY3R4Lm9ubHlfa2luZHMp OworCisJCQljaGlsZF9vbmx5ID0gYm1zX2RlbF9tZW1iZXIoY2hpbGRfb25seSwKKwkJCQkJCQkJ CQkoaW50KSBUQUJMRV9ERExfS0lORF9QQVJUSVRJT04pOworCQkJaWYgKGJtc19pc19lbXB0eShj aGlsZF9vbmx5KSkKKwkJCXsKKwkJCQlibXNfZnJlZShjaGlsZF9vbmx5KTsKKwkJCQljaGlsZGN0 eC5vbmx5X2tpbmRzID0gTlVMTDsKKwkJCX0KKwkJCWVsc2UKKwkJCQljaGlsZGN0eC5vbmx5X2tp bmRzID0gY2hpbGRfb25seTsKKwkJfQorCisJCWNoaWxkc3RtdHMgPSBwZ19nZXRfdGFibGVfZGRs X2ludGVybmFsKCZjaGlsZGN0eCk7CisJCWN0eC0+c3RhdGVtZW50cyA9IGxpc3RfY29uY2F0KGN0 eC0+c3RhdGVtZW50cywgY2hpbGRzdG10cyk7CisJfQorCWxpc3RfZnJlZShjaGlsZHJlbik7Cit9 CisKKy8qCisgKiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsCisgKgkJR2VuZXJhdGUgRERMIHN0 YXRlbWVudHMgdG8gcmVjcmVhdGUgYSByZWd1bGFyIG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorICoK KyAqIFRoZSBjYWxsZXIgaW5pdGlhbGl6ZXMgKmN0eCB3aXRoIHRoZSB1c2VyLXN1cHBsaWVkIG9w dGlvbiBmaWVsZHMKKyAqIChyZWxpZCwgcHJldHR5LCBub19vd25lciwgbm9fdGFibGVzcGFjZSwg c2NoZW1hX3F1YWxpZmllZCwKKyAqIG9ubHlfa2luZHMsIGV4Y2VwdF9raW5kcykuICBUaGlzIGZ1 bmN0aW9uIG9wZW5zIHRoZSByZWxhdGlvbiwKKyAqIHZhbGlkYXRlcyBhY2Nlc3MsIHBvcHVsYXRl cyB0aGUgZGVyaXZlZCBmaWVsZHMgKHJlbCwgcXVhbG5hbWUsCisgKiBubl9lbnRyaWVzLCAuLi4p LCBydW5zIHRoZSBlbWlzc2lvbiBwYXNzZXMsIGFuZCByZXR1cm5zIHRoZQorICogYWNjdW11bGF0 ZWQgc3RhdGVtZW50IGxpc3QuCisgKgorICogRWFjaCBlbWlzc2lvbiBoZWxwZXIgY29uc3VsdHMg aXNfa2luZF9pbmNsdWRlZCgpIHRvIGRlY2lkZSB3aGV0aGVyCisgKiBpdCBzaG91bGQgcnVuLiAg VGhlIHRhYmxlLXByb3BlciBwYXNzZXMgKENSRUFURSBUQUJMRSAvIE9XTkVSIC8KKyAqIEFMVEVS IENPTFVNTiAuLi4gU0VUIERFRkFVTFQgLyBBTFRFUiBDT0xVTU4gLi4uIFNFVCAoLi4uKSkgYXJl CisgKiBncm91cGVkIHVuZGVyIEtJTkRfVEFCTEUgc28gdGhlIEZLLW9ubHkgLyBzdWItb2JqZWN0 LW9ubHkgd29ya2Zsb3cKKyAqIGlzIGV4cHJlc3NpYmxlIGFzIGEgc2luZ2xlIG9ubHkgb3IgZXhj ZXB0IGxpc3QuCisgKgorICogVHJpZ2dlciBhbmQgcG9saWN5IGVtaXNzaW9uIGFyZSBzY2FmZm9s ZGVkIGJ1dCBjdXJyZW50bHkgZGlzYWJsZWQKKyAqICgjaWYgMCkgLSB0aGV5IHdpbGwgYmVjb21l IGEgc2luZ2xlIGhlbHBlciBjYWxsIG9uY2UgdGhlIHN0YW5kYWxvbmUKKyAqIHBnX2dldF90cmln Z2VyX2RkbCAvIHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKyAqLworc3RhdGljIExp c3QgKgorcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sK KwlSZWxhdGlvbglyZWw7CisJY2hhcgkJcmVsa2luZDsKKwlBY2xSZXN1bHQJYWNscmVzdWx0Owor CisJcmVsID0gdGFibGVfb3BlbihjdHgtPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmVs a2luZCA9IHJlbC0+cmRfcmVsLT5yZWxraW5kOworCisJLyoKKwkgKiBUaGUgaW5pdGlhbCBjdXQg b25seSBzdXBwb3J0cyBvcmRpbmFyeSBhbmQgcGFydGl0aW9uZWQgdGFibGVzLiAgVmlld3MsCisJ ICogbWF0dmlld3MsIGZvcmVpZ24gdGFibGVzLCBzZXF1ZW5jZXMsIGluZGV4ZXMsIGNvbXBvc2l0 ZSB0eXBlcywgYW5kCisJICogVE9BU1QgdGFibGVzIGFyZSBvdXQgb2Ygc2NvcGUgZm9yIG5vdy4K KwkgKi8KKwlpZiAocmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYmIHJlbGtpbmQgIT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCWNoYXIJICAgKnJlbG5hbWUgPSBwc3RyZHVw KFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dS T05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGFuIG9yZGluYXJ5 IG9yIHBhcnRpdGlvbmVkIHRhYmxlIiwKKwkJCQkJCXJlbG5hbWUpKSk7CisJfQorCisJLyogQ2Fs bGVyIG5lZWRzIFNFTEVDVCBvbiB0aGUgdGFibGUgdG8gcmVhZCBpdHMgZGVmaW5pdGlvbi4gKi8K KwlhY2xyZXN1bHQgPSBwZ19jbGFzc19hY2xjaGVjayhjdHgtPnJlbGlkLCBHZXRVc2VySWQoKSwg QUNMX1NFTEVDVCk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKKwkJYWNsY2hlY2tf ZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfVEFCTEUsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCkpOworCisJLyoKKwkgKiBWYWxpZGF0aW9uOiBpZiB0aGUgdGFibGUgaGFzIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggYW5kIHRoZQorCSAqIHJlZmVyZW5jZWQgaW5kZXgg d291bGQgbm90IGJlIGVtaXR0ZWQgdW5kZXIgdGhlIGFjdGl2ZSBmaWx0ZXIsIHRoZQorCSAqIGVt aXR0ZWQgUkVQTElDQSBJREVOVElUWSBjbGF1c2Ugd291bGQgcmVmZXJlbmNlIGFuIGluZGV4IHRo ZSBzYW1lIERETAorCSAqIG5ldmVyIHByb2R1Y2VkLiAgRGV0ZXJtaW5lIHdoaWNoIGtpbmQgd291 bGQgZW1pdCB0aGUgaW5kZXggKG9uZSBvZgorCSAqIHByaW1hcnlfa2V5IC8gdW5pcXVlIC8gZXhj bHVzaW9uIGZvciBjb25zdHJhaW50LWJhY2tlZCBpbmRleGVzLAorCSAqIG90aGVyd2lzZSB0aGUg Z2VuZXJpYyAiaW5kZXgiIGtpbmQpIGFuZCByZXF1aXJlIGl0IHRvIGJlIGluIHNjb3BlCisJICog d2hlbmV2ZXIgInJlcGxpY2FfaWRlbnRpdHkiIGlzLiAgVGhlIGNoZWNrIHVzZXMgaXNfa2luZF9p bmNsdWRlZCBzbworCSAqIGl0IGNvdmVycyBib3RoIGZvcm1zIG5hdHVyYWxseTogYW4gImV4Y2Vw dCIgbGlzdCB0aGF0IG9taXRzIHRoZQorCSAqIHNvdXJjZSBraW5kLCBhbmQgYW4gIm9ubHkiIGxp c3QgdGhhdCBvbWl0cyBpdC4KKwkgKi8KKwlpZiAocmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9 PSBSRVBMSUNBX0lERU5USVRZX0lOREVYICYmCisJCWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJM RV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZKSkKKwl7CisJCU9pZAkJCXJlcGxpZHggPSBSZWxh dGlvbkdldFJlcGxpY2FJbmRleChyZWwpOworCisJCWlmIChPaWRJc1ZhbGlkKHJlcGxpZHgpKQor CQl7CisJCQlUYWJsZURkbEtpbmQgaWR4X2tpbmQgPSBUQUJMRV9ERExfS0lORF9JTkRFWDsKKwkJ CU9pZAkJCWNvbm9pZCA9IGdldF9pbmRleF9jb25zdHJhaW50KHJlcGxpZHgpOworCisJCQlpZiAo T2lkSXNWYWxpZChjb25vaWQpKQorCQkJeworCQkJCUhlYXBUdXBsZQljb25UdXAgPSBTZWFyY2hT eXNDYWNoZTEoQ09OU1RST0lELAorCQkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKGNvbm9p ZCkpOworCisJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJCQl7CisJCQkJCUZv cm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29u VHVwKTsKKworCQkJCQlzd2l0Y2ggKGNvbi0+Y29udHlwZSkKKwkJCQkJeworCQkJCQkJY2FzZSBD T05TVFJBSU5UX1BSSU1BUlk6CisJCQkJCQkJaWR4X2tpbmQgPSBUQUJMRV9ERExfS0lORF9QUklN QVJZX0tFWTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJ CQkJCQkJaWR4X2tpbmQgPSBUQUJMRV9ERExfS0lORF9VTklRVUU7CisJCQkJCQkJYnJlYWs7CisJ CQkJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVf RERMX0tJTkRfRVhDTFVTSU9OOworCQkJCQkJCWJyZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJCQkJ CQlicmVhazsKKwkJCQkJfQorCQkJCQlSZWxlYXNlU3lzQ2FjaGUoY29uVHVwKTsKKwkJCQl9CisJ CQl9CisKKwkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIGlkeF9raW5kKSkKKwkJCXsKKwkJ CQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp KTsKKwkJCQljb25zdCBjaGFyICppZHhfbmFtZSA9IHRhYmxlX2RkbF9raW5kX25hbWVzWyhpbnQp IGlkeF9raW5kXS5uYW1lOworCisJCQkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coIlJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxl IFwiJXNcIiByZXF1aXJlcyBraW5kIFwiJXNcIiB0byBiZSBlbWl0dGVkIiwKKwkJCQkJCQkJcmVs bmFtZSwgaWR4X25hbWUpLAorCQkJCQkJIGVycmRldGFpbCgiVGhlIHRhYmxlJ3MgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1Y2VkIGJ5IHRoZSBc IiVzXCIga2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLiIsCisJCQkJCQkJ CSAgIGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJoaW50KCJFaXRoZXIgYWRkIFwiJXNcIiB0byB0aGUg ZmlsdGVyIG9yIHJlbW92ZSBcInJlcGxpY2FfaWRlbnRpdHlcIiBmcm9tIGl0LiIsCisJCQkJCQkJ CSBpZHhfbmFtZSkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogUG9wdWxhdGUgZGVyaXZl ZCBmaWVsZHMgbm93IHRoYXQgdGhlIHJlbGF0aW9uIGlzIG9wZW4gYW5kIHZhbGlkYXRlZC4KKwkg KiBUaGUgcmVtYWluaW5nIGRlcml2ZWQgZmllbGRzIChubl9lbnRyaWVzLCBza2lwX25vdG51bGxf b2lkcywgYnVmLAorCSAqIHN0YXRlbWVudHMpIHN0YXJ0IHplcm9lZCB2aWEgdGhlIGNhbGxlcidz IGBUYWJsZURkbENvbnRleHQgY3R4ID0gezB9YAorCSAqIGluaXRpYWxpemVyOyB0aGUgTk9UIE5V TEwgY2FjaGUgaXMgcG9wdWxhdGVkIGJ5IGNvbGxlY3RfbG9jYWxfbm90X251bGwsCisJICogdGhl IGJ1ZmZlciBpcyBpbml0U3RyaW5nSW5mbydkLCBhbmQgZWFjaCBlbWl0IHBhc3MgYXBwZW5kcyB0 bworCSAqIHN0YXRlbWVudHMgdmlhIGxhcHBlbmQuCisJICovCisJY3R4LT5yZWwgPSByZWw7CisJ Y3R4LT5iYXNlX25hbWVzcGFjZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJY3R4LT5z YXZlX25lc3RsZXZlbCA9IC0xOworCWN0eC0+cXVhbG5hbWUgPSBsb29rdXBfcmVsbmFtZV9mb3Jf ZW1pdChjdHgtPnJlbGlkLCBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCWN0eC0+ YmFzZV9uYW1lc3BhY2UpOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBvdmVycmlkZSBzZWFyY2hf cGF0aCBzbyB0aGF0IHRoZSBydWxldXRpbHMgaGVscGVycworCSAqIChwZ19nZXRfaW5kZXhkZWZf ZGRsLCBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5LAorCSAqIHBnX2dldF9zdGF0aXN0aWNzb2Jq ZGVmX2RkbCwgcGdfZ2V0X3J1bGVkZWZfZGRsLCBldGMuKSBwcm9kdWNlIG5hbWVzCisJICogdGhh dCBtYXRjaCB0aGUgc2NoZW1hX3F1YWxpZmllZCBmbGFnLiAgVGhvc2UgaGVscGVycyBkZWNpZGUg d2hldGhlciB0bworCSAqIHF1YWxpZnkgYSBuYW1lIGJ5IGNhbGxpbmcgUmVsYXRpb25Jc1Zpc2li bGUoKSwgd2hpY2ggY2hlY2tzIHdoZXRoZXIgdGhlCisJICogb2JqZWN0J3Mgc2NoZW1hIGFwcGVh cnMgaW4gdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aC4KKwkgKgorCSAqIHNjaGVtYV9xdWFsaWZpZWQg PSBmYWxzZTogbmFycm93IHRvIHRoZSBiYXNlIHNjaGVtYSBzbyB0aGF0IHNhbWUtc2NoZW1hCisJ ICogcmVmZXJlbmNlcyBpbiBERUZBVUxUIGV4cHJlc3Npb25zLCBGSyB0YXJnZXRzLCBpbmRleGVz LCBydWxlcywgYW5kCisJICogc3RhdGlzdGljcyBjb21lIG91dCB1bnF1YWxpZmllZCBhdXRvbWF0 aWNhbGx5LiAgQ3Jvc3Mtc2NoZW1hIHJlZmVyZW5jZXMKKwkgKiBzdGF5IHF1YWxpZmllZCwgd2hp Y2ggaXMgdGhlIGNvcnJlY3RuZXNzIHJlcXVpcmVtZW50LgorCSAqCisJICogc2NoZW1hX3F1YWxp ZmllZCA9IHRydWU6IG5hcnJvdyB0byBwZ19jYXRhbG9nIG9ubHkgc28gdGhhdCBvYmplY3RzIGlu CisJICogdGhlIGJhc2Ugc2NoZW1hIChvciBhbnkgdXNlciBzY2hlbWEgdGhlIGNhbGxlciBwbGFj ZWQgb24gc2VhcmNoX3BhdGgpCisJICogYXJlIG5vdCByZWFjaGFibGUgd2l0aG91dCBxdWFsaWZp Y2F0aW9uLCBmb3JjaW5nIGZ1bGx5LXF1YWxpZmllZCBvdXRwdXQKKwkgKiBmcm9tIGV2ZXJ5IGhl bHBlciByZWdhcmRsZXNzIG9mIHRoZSBjYWxsZXIncyBzZXNzaW9uIHNlYXJjaF9wYXRoLgorCSAq CisJICogQXRFT1hhY3RfR1VDIGNsZWFucyB1cCBhdCB4YWN0IGVuZCBpZiBhbnl0aGluZyB0aHJv d3MgYmV0d2VlbiBoZXJlIGFuZAorCSAqIHRoZSBleHBsaWNpdCByZXN0b3JlIGJlbG93OyBvbiB0 aGUgbm9ybWFsIHBhdGggd2UgcmVzdG9yZSByaWdodCBiZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJ ICovCisJaWYgKCFjdHgtPnNjaGVtYV9xdWFsaWZpZWQpCisJeworCQljaGFyCSAgICpuc3BuYW1l ID0gZ2V0X25hbWVzcGFjZV9uYW1lKGN0eC0+YmFzZV9uYW1lc3BhY2UpOworCisJCWlmIChuc3Bu YW1lICE9IE5VTEwpCisJCXsKKwkJCWNvbnN0IGNoYXIgKnFuc3AgPSBxdW90ZV9pZGVudGlmaWVy KG5zcG5hbWUpOworCisJCQljdHgtPnNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7 CisJCQkodm9pZCkgc2V0X2NvbmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgcW5zcCwKKwkJCQkJ CQkJCSBQR0NfVVNFUlNFVCwgUEdDX1NfU0VTU0lPTiwKKwkJCQkJCQkJCSBHVUNfQUNUSU9OX1NB VkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJCXBmcmVlKG5zcG5hbWUpOworCQl9CisJfQorCWVsc2UK Kwl7CisJCWN0eC0+c2F2ZV9uZXN0bGV2ZWwgPSBOZXdHVUNOZXN0TGV2ZWwoKTsKKwkJKHZvaWQp IHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsICJwZ19jYXRhbG9nIiwKKwkJCQkJCQkJ IFBHQ19VU0VSU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJCQkgR1VDX0FDVElPTl9TQVZFLCB0 cnVlLCAwLCBmYWxzZSk7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsb2NhbGx5LWRlY2xhcmVkIE5P VCBOVUxMIGNvbnN0cmFpbnQgbWV0YWRhdGEgc28gdGhlIGNvbHVtbi0gZW1pdAorCSAqIGhlbHBl cnMgY2FuIHByb2R1Y2UgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5saW5lIGZvciB1c2Vy LW5hbWVkCisJICogY29uc3RyYWludHMsIGFuZCBzbyB0aGUgY29uc3RyYWludCBsb29wIGNhbiBh dm9pZCBkb3VibGUtZW1pdHRpbmcgdGhlbS4KKwkgKi8KKwljdHgtPm5uX2VudHJpZXMgPSBjb2xs ZWN0X2xvY2FsX25vdF9udWxsKHJlbCwgJmN0eC0+c2tpcF9ub3RudWxsX29pZHMpOworCisJaW5p dFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKworCS8qCisJICogRW1pc3Npb24gcGFzc2VzLiAgT3Jk ZXIgaXMgc2lnbmlmaWNhbnQ6IENSRUFURSBUQUJMRSBmaXJzdDsgT1dORVIgYW5kCisJICogdGhl IHBlci1jb2x1bW4gQUxURVIgQ09MVU1OIHBhc3NlcyBiZWZvcmUgc3ViLW9iamVjdCBlbWlzc2lv bjsKKwkgKiBzdWItb2JqZWN0cyBpbiBkZXBlbmRlbmN5LWZyaWVuZGx5IG9yZGVyIChpbmRleGVz IGJlZm9yZSBjb25zdHJhaW50cywKKwkgKiBzaW5jZSBjb25zdHJhaW50LWJhY2tlZCBpbmRleGVz IGFyZSBlbWl0dGVkIG91dC1vZi1saW5lIGJ5IHRoZQorCSAqIGNvbnN0cmFpbnQgbG9vcCk7IHBh cnRpdGlvbiBjaGlsZHJlbiBsYXN0IHNvIHRoZSBwYXJlbnQgYWxyZWFkeSBleGlzdHMKKwkgKiBh dCByZXBsYXkgdGltZS4gIEVhY2ggaGVscGVyIGdhdGVzIGl0c2VsZiBvbiBpc19raW5kX2luY2x1 ZGVkIGZvciB0aGUKKwkgKiByZWxldmFudCBUQUJMRV9ERExfS0lORF8qOyB0aGUgZm91ciAidGFi bGUgaXRzZWxmIiBwYXNzZXMgYXJlIGdyb3VwZWQKKwkgKiBoZXJlIHVuZGVyIEtJTkRfVEFCTEUg c28gYWxsIG9mIENSRUFURSBUQUJMRSAvIE9XTkVSIC8gU0VUIERFRkFVTFQgLworCSAqIFNFVCAo Li4uKSBkcm9wIG91dCB0b2dldGhlciB3aGVuIHRoZSB1c2VyIGFza3MgZm9yIG9ubHkgc3ViLW9i amVjdHMKKwkgKiAoZS5nLiBvbmx5ID0+ICdmb3JlaWduX2tleScgZm9yIHRoZSBzZWNvbmQgcGFz cyBvZiBhIHR3by1wYXNzIEZLCisJICogY2xvbmUpLgorCSAqLworCWlmIChpc19raW5kX2luY2x1 ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCXsKKwkJZW1pdF9jcmVhdGVfdGFibGVf c3RtdChjdHgpOworCQllbWl0X293bmVyX3N0bXQoY3R4KTsKKwkJZW1pdF9jaGlsZF9kZWZhdWx0 X292ZXJyaWRlcyhjdHgpOworCQllbWl0X2F0dG9wdGlvbnMoY3R4KTsKKwl9CisJZW1pdF9pbmRl eGVzKGN0eCk7CisJZW1pdF9sb2NhbF9jb25zdHJhaW50cyhjdHgpOworCWVtaXRfcnVsZXMoY3R4 KTsKKwllbWl0X3N0YXRpc3RpY3MoY3R4KTsKKwllbWl0X3JlcGxpY2FfaWRlbnRpdHkoY3R4KTsK KwllbWl0X3Jsc190b2dnbGVzKGN0eCk7CisKKwkvKgorCSAqIFRyaWdnZXJzIGFuZCByb3ctbGV2 ZWwgc2VjdXJpdHkgcG9saWNpZXMgLSBkaXNhYmxlZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25l IHBnX2dldF90cmlnZ2VyX2RkbCgpIGFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFu ZC4KKwkgKiBUaGUgc2NhbiArIGxvY2sgKyBmaWx0ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJl c2VydmVkIChpbnNpZGUgI2lmIDApCisJICogc28gd2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVj b21lcyBhIG9uZS1saW5lciBpbiB0aGUgbG9vcCBib2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJz IGFyZSBhdmFpbGFibGUuCisJICovCisjaWYgMAorCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwg VEFCTEVfRERMX0tJTkRfVFJJR0dFUikpCisJeworCQlSZWxhdGlvbgl0cmlnUmVsOworCQlTeXNT Y2FuRGVzYyB0cmlnU2NhbjsKKwkJU2NhbktleURhdGEgdHJpZ0tleTsKKwkJSGVhcFR1cGxlCXRy aWdUdXA7CisKKwkJdHJpZ1JlbCA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZ0cmlnS2V5LAorCQkJCQlBbnVtX3BnX3RyaWdn ZXJfdGdyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlP YmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJdHJpZ1NjYW4gPSBzeXN0YWJsZV9iZWdp bnNjYW4odHJpZ1JlbCwgVHJpZ2dlclJlbGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCQkgIHRydWUs IE5VTEwsIDEsICZ0cmlnS2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHJpZ1R1cCA9 IHN5c3RhYmxlX2dldG5leHQodHJpZ1NjYW4pKSkKKwkJeworCQkJRm9ybV9wZ190cmlnZ2VyIHRy ZyA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJaWYgKHRyZy0+ dGdpc2ludGVybmFsKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0 X3RyaWdnZXJfZGRsKHRyZy0+b2lkKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9l bmRzY2FuKHRyaWdTY2FuKTsKKwkJdGFibGVfY2xvc2UodHJpZ1JlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwl9CisKKwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BPTElD WSkpCisJeworCQlSZWxhdGlvbglwb2xSZWw7CisJCVN5c1NjYW5EZXNjIHBvbFNjYW47CisJCVNj YW5LZXlEYXRhIHBvbEtleTsKKwkJSGVhcFR1cGxlCXBvbFR1cDsKKworCQlwb2xSZWwgPSB0YWJs ZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCVNjYW5LZXlJbml0 KCZwb2xLZXksCisJCQkJCUFudW1fcGdfcG9saWN5X3BvbHJlbGlkLAorCQkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkp OworCQlwb2xTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBvbFJlbCwgUG9saWN5UG9scmVsaWRQ b2xuYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmcG9sS2V5KTsKKwkJd2hp bGUgKEhlYXBUdXBsZUlzVmFsaWQocG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChwb2xTY2FuKSkp CisJCXsKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfcG9saWN5X2RkbChyZWxpZCwgcG9sbmFt ZSkgb3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbihwb2xTY2FuKTsKKwkJ dGFibGVfY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKyNlbmRpZgorCisJZW1p dF9wYXJ0aXRpb25fY2hpbGRyZW4oY3R4KTsKKworCXsKKwkJaW50CQkJbmF0dHMgPSBSZWxhdGlv bkdldERlc2NyKHJlbCktPm5hdHRzOworCisJCWZvciAoaW50IGkgPSAxOyBpIDw9IG5hdHRzOyBp KyspCisJCQlpZiAoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUgIT0gTlVMTCkKKwkJCQlwZnJlZShj dHgtPm5uX2VudHJpZXNbaV0ubmFtZSk7CisJfQorCXBmcmVlKGN0eC0+bm5fZW50cmllcyk7CisK Kwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoY3R4LT5idWYuZGF0 YSk7CisJcGZyZWUoY3R4LT5xdWFsbmFtZSk7CisJbGlzdF9mcmVlKGN0eC0+c2tpcF9ub3RudWxs X29pZHMpOworCisJLyoKKwkgKiBQb3AgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIG5vdyB0aGF0 IGFsbCBoZWxwZXJzIGhhdmUgcnVuLiAgRXJyb3JzCisJICogdGhyb3duIGVhcmxpZXIgYXJlIGNs ZWFuZWQgdXAgYnkgQXRFT1hhY3RfR1VDIGF0IHhhY3QgZW5kLgorCSAqLworCWlmIChjdHgtPnNh dmVfbmVzdGxldmVsID49IDApCisJCUF0RU9YYWN0X0dVQyh0cnVlLCBjdHgtPnNhdmVfbmVzdGxl dmVsKTsKKworCXJldHVybiBjdHgtPnN0YXRlbWVudHM7Cit9CisKKy8qCisgKiBwZ19nZXRfdGFi bGVfZGRsCisgKgkJUmV0dXJuIERETCB0byByZWNyZWF0ZSBhIHRhYmxlIGFzIGEgc2V0IG9mIHRl eHQgcm93cy4KKyAqLworRGF0dW0KK3BnX2dldF90YWJsZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqc3RhdGVtZW50czsKKwor CWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisJCVRhYmxlRGRsQ29udGV4dCBjdHggPSB7MH07CisKKwkJZnVuY2N0eCA9IFNSRl9GSVJTVENB TExfSU5JVCgpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgt Pm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisKKwkJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJewor CQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQkJU1JGX1JFVFVSTl9ET05F KGZ1bmNjdHgpOworCQl9CisKKwkJaWYgKCFQR19BUkdJU05VTEwoNSkgJiYgIVBHX0FSR0lTTlVM TCg2KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJcIm9ubHlfa2luZHNcIiBhbmQgXCJleGNl cHRfa2luZHNcIiBwYXJhbWV0ZXJzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSkpOworCisJCS8q IE9wdGlvbiBkZWZhdWx0cyAobWF0Y2ggcHJvYXJnZGVmYXVsdHMgaW4gcGdfcHJvYy5kYXQpLiAq LworCQljdHgucmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCQljdHgucHJldHR5ID0gZmFsc2U7 CisJCWN0eC5ub19vd25lciA9IGZhbHNlOwkJLyogb3duZXIgREVGQVVMVCB0cnVlICDihpIgbm9f b3duZXIgPSBmYWxzZSAqLworCQljdHgubm9fdGFibGVzcGFjZSA9IGZhbHNlOwkvKiB0YWJsZXNw YWNlIERFRkFVTFQgdHJ1ZSDihpIgbm9fdGFibGVzcGFjZSA9IGZhbHNlICovCisJCWN0eC5zY2hl bWFfcXVhbGlmaWVkID0gdHJ1ZTsKKwkJY3R4Lm9ubHlfa2luZHMgPSBOVUxMOworCQljdHguZXhj ZXB0X2tpbmRzID0gTlVMTDsKKworCQkvKiBPdmVycmlkZSBkZWZhdWx0cyB3aXRoIGFueSBleHBs aWNpdGx5IHN1cHBsaWVkIHZhbHVlcy4gKi8KKwkJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCQlj dHgucHJldHR5ID0gUEdfR0VUQVJHX0JPT0woMSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDIpKQor CQkJY3R4Lm5vX293bmVyID0gIVBHX0dFVEFSR19CT09MKDIpOworCQlpZiAoIVBHX0FSR0lTTlVM TCgzKSkKKwkJCWN0eC5ub190YWJsZXNwYWNlID0gIVBHX0dFVEFSR19CT09MKDMpOworCQlpZiAo IVBHX0FSR0lTTlVMTCg0KSkKKwkJCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gUEdfR0VUQVJHX0JP T0woNCk7CisJCWlmICghUEdfQVJHSVNOVUxMKDUpKQorCQkJY3R4Lm9ubHlfa2luZHMgPSBwYXJz ZV9raW5kX2FycmF5KCJvbmx5X2tpbmRzIiwKKwkJCQkJCQkJCQkJICBQR19HRVRBUkdfQVJSQVlU WVBFX1AoNSkpOworCQlpZiAoIVBHX0FSR0lTTlVMTCg2KSkKKwkJCWN0eC5leGNlcHRfa2luZHMg PSBwYXJzZV9raW5kX2FycmF5KCJleGNlcHRfa2luZHMiLAorCQkJCQkJCQkJCQkJUEdfR0VUQVJH X0FSUkFZVFlQRV9QKDYpKTsKKworCQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRl cm5hbCgmY3R4KTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0 eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRV UCgpOworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAo ZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAq c3RtdDsKKworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRy KTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10 KSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZf UkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmlu ZGV4IDg4ZGU1YzA0ODFjLi43MTg2Y2Y4M2UxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNp bmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNp bmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVn YXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf YXV0aGlkLmgiCkBAIC0zNzAsNyArMzcxLDcgQEAgc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3JhcGhk ZWZfZWxlbWVudHMoU3RyaW5nSW5mbyBidWYsIE9pZCBwZ3JlbGlkLCBjaGFyIHBnZWtpbmQKIHN0 YXRpYyB2b2lkIG1ha2VfcHJvcGdyYXBoZGVmX2xhYmVscyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIGVs aWQsIGNvbnN0IGNoYXIgKmVsYWxpYXMsIE9pZCBlbHJlbGlkKTsKIHN0YXRpYyB2b2lkIG1ha2Vf cHJvcGdyYXBoZGVmX3Byb3BlcnRpZXMoU3RyaW5nSW5mbyBidWYsIE9pZCBlbGxhYmVsaWQsIE9p ZCBlbHJlbGlkKTsKIHN0YXRpYyBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lk IHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksCi0JCQkJCQkJCQkJIGJvb2wgbWlzc2luZ19v ayk7CisJCQkJCQkJCQkJIGJvb2wgbWlzc2luZ19vaywgaW50IHByZXR0eUZsYWdzKTsKIHN0YXRp YyBjaGFyICpwZ19nZXRfcGFydGtleWRlZl93b3JrZXIoT2lkIHJlbGlkLCBpbnQgcHJldHR5Rmxh Z3MsCiAJCQkJCQkJCQkgIGJvb2wgYXR0cnNPbmx5LCBib29sIG1pc3Npbmdfb2spOwogc3RhdGlj IGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihPaWQgY29uc3RyYWludElkLCBib29s IGZ1bGxDb21tYW5kLApAQCAtNjAzLDYgKzYwNCwxOSBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdf RlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwog fQogCisvKgorICogcGdfZ2V0X3J1bGVkZWZfZGRsCisgKgkJTGlrZSBwZ19nZXRfcnVsZWRlZiBi dXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRvIGRlY2lkZQorICoJCXdoZXRoZXIgdG8g c2NoZW1hLXF1YWxpZnkgdGhlIHJ1bGUncyB0YXJnZXQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3Ig dXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRo CisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAq LworY2hhciAqCitwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpCit7CisJcmV0dXJuIHBn X2dldF9ydWxlZGVmX3dvcmtlcihydWxlb2lkLCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZM QUdfU0NIRU1BKTsKK30KKwogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIo T2lkIHJ1bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEyNDEsNiArMTI1NSwyMiBAQCBwZ19n ZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKQogCQkJCQkJCQkgIDAsIGZhbHNlKTsK IH0KIAorLyoKKyAqIHBnX2dldF9pbmRleGRlZl9kZGwKKyAqCQlMaWtlIHBnX2dldF9pbmRleGRl Zl9zdHJpbmcgYnV0IHVzZXMgdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aCB0bworICoJCWRlY2lkZSB3 aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHRoZSBpbmRleGVkIHJlbGF0aW9uIG5hbWUuCisgKgkJ Rm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFyY2hf cGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Uu CisgKi8KK2NoYXIgKgorcGdfZ2V0X2luZGV4ZGVmX2RkbChPaWQgaW5kZXhyZWxpZCkKK3sKKwly ZXR1cm4gcGdfZ2V0X2luZGV4ZGVmX3dvcmtlcihpbmRleHJlbGlkLCAwLCBOVUxMLAorCQkJCQkJ CQkgIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkJICB0cnVlLCB0cnVlLAorCQkJCQkJCQkgIFBSRVRU WUZMQUdfU0NIRU1BLCBmYWxzZSk7Cit9CisKIC8qIEludGVybmFsIHZlcnNpb24gdGhhdCBqdXN0 IHJlcG9ydHMgdGhlIGtleS1jb2x1bW4gZGVmaW5pdGlvbnMgKi8KIGNoYXIgKgogcGdfZ2V0X2lu ZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KQpAQCAtMTk2OSw3ICsx OTk5LDcgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJ CQlzdGF0ZXh0aWQgPSBQR19HRVRBUkdfT0lEKDApOwogCWNoYXIJICAgKnJlczsKIAotCXJlcyA9 IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCB0cnVlKTsKKwly ZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgdHJ1ZSwg MCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0xOTg0LDcg KzIwMTQsMjAgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIGNo YXIgKgogcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpCiB7Ci0J cmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxz ZSk7CisJcmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNl LCBmYWxzZSwgMCk7Cit9CisKKy8qCisgKiBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwKKyAq CQlMaWtlIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyBidXQgdXNlcyB0aGUgYWN0aXZl IHNlYXJjaF9wYXRoCisgKgkJdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdGhl IHN0YXRpc3RpY3Mgb2JqZWN0IG5hbWUuCisgKgkJRm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRs IHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFyY2hfcGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVt YSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3N0YXRp c3RpY3NvYmpkZWZfZGRsKE9pZCBzdGF0ZXh0aWQpCit7CisJcmV0dXJuIHBnX2dldF9zdGF0aXN0 aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxzZSwgUFJFVFRZRkxBR19TQ0hFTUEp OwogfQogCiAvKgpAQCAtMTk5Nyw3ICsyMDQwLDcgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZf Y29sdW1ucyhQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRleHRpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJY2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29y a2VyKHN0YXRleHRpZCwgdHJ1ZSwgdHJ1ZSk7CisJcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpf d29ya2VyKHN0YXRleHRpZCwgdHJ1ZSwgdHJ1ZSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJ CVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0yMDA5LDcgKzIwNTIsOCBAQCBwZ19nZXRfc3RhdGlzdGlj c29iamRlZl9jb2x1bW5zKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKiBJbnRlcm5hbCB3b3JraG9yc2Ug dG8gZGVjb21waWxlIGFuIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0LgogICovCiBzdGF0aWMg Y2hhciAqCi1wZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBj b2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19vaykKK3BnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtl cihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwgYm9vbCBtaXNzaW5nX29rLAorCQkJ CQkJCWludCBwcmV0dHlGbGFncykKIHsKIAlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGV4dHJl YzsKIAlIZWFwVHVwbGUJc3RhdGV4dHR1cDsKQEAgLTIwNjksMTAgKzIxMTMsMTggQEAgcGdfZ2V0 X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBi b29sIG1pc3Npbmdfb2spCiAKIAlpZiAoIWNvbHVtbnNfb25seSkKIAl7Ci0JCW5zcCA9IGdldF9u YW1lc3BhY2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7Ci0JCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKLQkJCQkJCSBxdW90ZV9x dWFsaWZpZWRfaWRlbnRpZmllcihuc3AsCi0JCQkJCQkJCQkJCQkJTmFtZVN0cihzdGF0ZXh0cmVj LT5zdHhuYW1lKSkpOworCQlpZiAoKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19TQ0hFTUEpICYm CisJCQlTdGF0aXN0aWNzT2JqSXNWaXNpYmxlKHN0YXRleHRpZCkpCisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZp ZXIoTmFtZVN0cihzdGF0ZXh0cmVjLT5zdHhuYW1lKSkpOworCQllbHNlCisJCXsKKwkJCW5zcCA9 IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7CisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJ IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcCwKKwkJCQkJCQkJCQkJCQkJTmFtZVN0cihz dGF0ZXh0cmVjLT5zdHhuYW1lKSkpOworCQkJcGZyZWUobnNwKTsKKwkJfQogCiAJCS8qCiAJCSAq IERlY29kZSB0aGUgc3R4a2luZCBjb2x1bW4gc28gdGhhdCB3ZSBrbm93IHdoaWNoIHN0YXRzIHR5 cGVzIHRvCkBAIC0yMTYzLDEwICsyMjE1LDkgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2Vy KE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2spCiAJewog CQlOb2RlCSAgICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKIAkJY2hhcgkgICAqc3RyOwot CQlpbnQJCQlwcmV0dHlGbGFncyA9IFBSRVRUWUZMQUdfUEFSRU47CiAKIAkJc3RyID0gZGVwYXJz ZV9leHByZXNzaW9uX3ByZXR0eShleHByLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UsCi0JCQkJCQkJ CQkJcHJldHR5RmxhZ3MsIDApOworCQkJCQkJCQkJCVBSRVRUWUZMQUdfUEFSRU4sIDApOwogCiAJ CWlmIChjb2xubyA+IDApCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIsICIpOwpA QCAtMjU0NCw2ICsyNTk1LDIwIEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNv bnN0cmFpbnRJZCkKIAlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFp bnRJZCwgdHJ1ZSwgMCwgZmFsc2UpOwogfQogCisvKgorICogcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Ym9keQorICoJCVJldHVybnMgdGhlIGNvbnN0cmFpbnQgZGVmaW5pdGlvbiBib2R5IHdpdGhvdXQg dGhlCisgKgkJIkFMVEVSIFRBQkxFIG5hbWUgQUREIENPTlNUUkFJTlQgY25hbWUiIHByZWZpeC4K KyAqCQlGSyB0YXJnZXQgcmVsYXRpb24gbmFtZXMgaW4gdGhlIGJvZHkgYWxyZWFkeSB1c2UKKyAq CQlnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lIChzZWFyY2hfcGF0aC1hd2FyZSkuICBGb3IgdXNlIGJ5 CisgKgkJcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBidWlsZHMgdGhlIEFMVEVSIFRBQkxFIHByZWZp eCBpdHNlbGYuCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29u c3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3Ry YWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICogQXMgb2YgOS40LCB3ZSBub3cg dXNlIGFuIE1WQ0Mgc25hcHNob3QgZm9yIHRoaXMuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJp dHMuaAppbmRleCBjYzg3NGFiYWFiYi4uMWU0NjNiMDEwNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2lu aGVyaXRzLmgKQEAgLTU1LDYgKzU1LDcgQEAgREVDTEFSRV9JTkRFWChwZ19pbmhlcml0c19wYXJl bnRfaW5kZXgsIDIxODcsIEluaGVyaXRzUGFyZW50SW5kZXhJZCwgcGdfaW5oZXJpdHMKIGV4dGVy biBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01P REUgbG9ja21vZGUpOwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0 ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJCQkJCQkJCQkJCQlM T0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRyYW5zYWN0aW9uSWQgKmRl dGFjaGVkX3htaW4pOworZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQg cmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogZXh0ZXJuIExpc3QgKmZpbmRfYWxsX2luaGVy aXRvcnMoT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJCQkJIExpc3Qg KipudW1wYXJlbnRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDczYmI3ZmJiNDMwLi44 MjA5YWNmNDY4MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NjIwLDYgKzg2MjAsMTQg QEAKICAgcHJvYXJndHlwZXMgPT4gJ3JlZ2RhdGFiYXNlIGJvb2wgYm9vbCBib29sJywKICAgcHJv YXJnbmFtZXMgPT4gJ3tkYXRhYmFzZSxwcmV0dHksb3duZXIsdGFibGVzcGFjZX0nLAogICBwcm9h cmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWUsdHJ1ZX0nLCBwcm9zcmMgPT4gJ3BnX2dldF9kYXRh YmFzZV9kZGwnIH0sCit7IG9pZCA9PiAnODIxNScsIGRlc2NyID0+ICdnZXQgRERMIHRvIHJlY3Jl YXRlIGEgdGFibGUnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfdGFibGVfZGRsJywgcHJvcm93cyA9 PiAnNTAnLAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0 aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzYn LCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIGJvb2wg Ym9vbCBib29sIGJvb2wgX3RleHQgX3RleHQnLAorICBwcm9hcmduYW1lcyA9PiAne3JlbGF0aW9u LHByZXR0eSxvd25lcix0YWJsZXNwYWNlLHNjaGVtYV9xdWFsaWZpZWQsb25seV9raW5kcyxleGNl cHRfa2luZHN9JywKKyAgcHJvYXJnZGVmYXVsdHMgPT4gJ3tmYWxzZSx0cnVlLHRydWUsdHJ1ZSxO VUxMLE5VTEx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQgPT4g JzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJzZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBw cmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xh dGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMu aAppbmRleCBjM2Q4NTE4Y2I2Mi4uZDMzNTYzZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21k cy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1cGxl IHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oT2lk IHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rpb24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29uX2Nv bW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25fY29t bWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBleHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29tbWl0 X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9ucyhi b29sIGlzQ29tbWl0KTsKQEAgLTEwOCw0ICsxMDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZhckNh bGxiYWNrT3duc1JlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBib29s IFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAog CQkJCQkJCQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIg KnN0b3JhZ2VfbmFtZShjaGFyIGMpOworCiAjZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggMjVjMDVlMmY2NDkuLmMzYjNkYzY1YzkzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3Rt dCBQbGFubmVkU3RtdDsKICNkZWZpbmUgUlVMRV9JTkRFWERFRl9LRVlTX09OTFkJCTB4MDIJLyog aWdub3JlIGluY2x1ZGVkIGF0dHJpYnV0ZXMgKi8KIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRl eGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRl Zl9kZGwoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1 bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2lu ZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkJCSAgdWlu dDE2IGZsYWdzKTsKQEAgLTM0LDYgKzM1LDcgQEAgZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5 ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFp bnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29uc3Ry YWludElkKTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlz dCAqZHBjb250ZXh0LAogCQkJCQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNp dCk7CiBleHRlcm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25h bWUsIE9pZCByZWxpZCk7CkBAIC01NCw1ICs1Niw3IEBAIGV4dGVybiBjaGFyICpnZXRfcmFuZ2Vf cGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOwogZXh0ZXJuIHZvaWQgZ2V0X3Jl bG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiBleHRlcm4gY2hh ciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJu IGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbChPaWQgc3RhdGV4dGlkKTsKK2V4dGVy biBjaGFyICpwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpOwogCiAjZW5kaWYJCQkJCQkJ LyogUlVMRVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGdfZ2V0X3RhYmxlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90 YWJsZV9kZGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44Nzk1 ODRmMTAxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdf Z2V0X3RhYmxlX2RkbC5vdXQKQEAgLTAsMCArMSwxMjc0IEBACistLQorLS0gcGdfZ2V0X3RhYmxl X2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFC TEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJs ZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQg cm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFy Y2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtF WSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAg IGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5v bicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmJhc2ljIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVM VCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJh c2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3Mp CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNl IG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQg QlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWRfY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyAo aWRfYWx3YXlzIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTCwg aWRfZGVmYXVsdCBpbnRlZ2VyIEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZIE5PVCBO VUxMKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRfY3Vz dG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAgICAg IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAgICAp CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jdXN0b20gKHYgaW50ZWdl ciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQg QlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7 CisoMSByb3cpCisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdl bl9jb2xzICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmdl bl9jb2xzIChjZW50cyBpbnRlZ2VyLCBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBB UyAoKChjZW50cyk6Om51bWVyaWMgLyAxMDAuMCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0tIEdl bmVyYXRlZCB2aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAg YmFzZSBpbnQsCisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIp IFZJUlRVQUwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFs Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuZ2VuX3ZpcnR1YWwgKGJhc2UgaW50ZWdlciwgZGVyaXZlZCBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgKChiYXNlICogMikpIFZJUlRVQUwpOworKDEgcm93KQorCistLSBTVE9S QUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9yIHRo ZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9SQUdF IEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBSRVNT SU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2VfY29s cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnN0b3JhZ2VfY29scyAoYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsIGIgdGV4dCBT VE9SQUdFIE1BSU4sIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKKygxIHJvdykKKworLS0gQ29u c3RyYWludHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFU RSBUQUJMRSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAor ICAgIGEgaW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJF RkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIg aW50ZWdlciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAw KSkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29u c19iX2tleSBVTklRVUUgKGIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQURE IENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0Ymxf ZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dz KQorCistLSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChQRyAxNSk6IG51bGwgdmFsdWVzIGFy ZSB0cmVhdGVkIGFzIGVxdWFsIGZvcgorLS0gdW5pcXVlbmVzcyBwdXJwb3Nlcywgc28gdGhlIE5V TExTIE5PVCBESVNUSU5DVCBjbGF1c2UgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIG51 bGxzX25kICgKKyAgICBhIGludCwKKyAgICBiIGludCwKKyAgICBVTklRVUUgTlVMTFMgTk9UIERJ U1RJTkNUIChhLCBiKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbnVsbHNf bmQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5udWxsc19uZCAoYSBp bnRlZ2VyLCBiIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm51bGxzX25k IEFERCBDT05TVFJBSU5UIG51bGxzX25kX2FfYl9rZXkgVU5JUVVFIE5VTExTIE5PVCBESVNUSU5D VCAoYSwgYik7CisoMiByb3dzKQorCistLSBJTkNMVURFIGNvbHVtbnMgb24gYSBjb25zdHJhaW50 LWJhY2tlZCBVTklRVUUgaW5kZXggKFBHIDExKTogdGhlCistLSBjb3ZlcmluZyBjb2x1bW5zIGFw cGVhciBpbiBhbiBJTkNMVURFICguLi4pIGNsYXVzZSBvbiB0aGUgQUxURVIgVEFCTEUKKy0tIEFE RCBDT05TVFJBSU5UIHN0YXRlbWVudCwgbm90IGluIHRoZSBrZXkgY29sdW1uIGxpc3QuCitDUkVB VEUgVEFCTEUgaWR4X2luYyAoCisgICAgaWQgICBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0 ZXh0LAorICAgIGV4dHJhIHRleHQsCisgICAgVU5JUVVFIChuYW1lKSBJTkNMVURFIChleHRyYSkK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9pbmMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2luYyAoaWQgaW50ZWdlciBOT1Qg TlVMTCwgbmFtZSB0ZXh0LCBleHRyYSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVz dC5pZHhfaW5jIEFERCBDT05TVFJBSU5UIGlkeF9pbmNfbmFtZV9leHRyYV9rZXkgVU5JUVVFIChu YW1lKSBJTkNMVURFIChleHRyYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2lu YyBBREQgQ09OU1RSQUlOVCBpZHhfaW5jX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3Mp CisKKy0tIEZPUkVJR04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFs IGFjdGlvbnMgYW5kIE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIg dmVyYmF0aW0gaW4gdGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNf dGd0IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEg aW50LAorICAgIGIgaW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQg ZmtfY2FzY2FkZSAgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVT VFJJQ1QsCisgICAgQ09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJF TkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVU RSBTRVQgTlVMTCwKKyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBS RUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04g REVMRVRFIFNFVCBERUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBL RVkgKGQpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBNQVRDSCBGVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19h Y3RzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIChhIGludGVn ZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJTlQgZmtfY2FzY2FkZSBGT1JFSUdOIEtFWSAo YSkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gVVBEQVRFIFJF U1RSSUNUIE9OIERFTEVURSBDQVNDQURFOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZr X2FjdHMgQUREIENPTlNUUkFJTlQgZmtfbWF0Y2ggRk9SRUlHTiBLRVkgKGQpIFJFRkVSRU5DRVMg cGd0YmxfZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE1BVENIIEZVTEw7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19zZXRkZWYgRk9SRUlHTiBL RVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE9OIERFTEVU RSBTRVQgREVGQVVMVDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIEFERCBD T05TVFJBSU5UIGZrX3NldG51bGwgRk9SRUlHTiBLRVkgKGIpIFJFRkVSRU5DRVMgcGd0YmxfZGRs X3Rlc3QuZmtfYWN0c190Z3QoaWQpIE9OIERFTEVURSBTRVQgTlVMTDsKKyg1IHJvd3MpCisKKy0t IE5PVCBFTkZPUkNFRCBmb3JlaWduIGtleSAoUEcgMTcpOiB0aGUgY29uc3RyYWludCBpcyByZWNv cmRlZCBpbiB0aGUKKy0tIGNhdGFsb2cgYnV0IG5vdCB2YWxpZGF0ZWQgYnkgdGhlIGVuZ2luZTsg Tk9UIEVORk9SQ0VEIG11c3QgYXBwZWFyIGluCistLSB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitD UkVBVEUgVEFCTEUgbm90ZW5mX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJM RSBub3RlbmYgKAorICAgIGEgaW50LAorICAgIENPTlNUUkFJTlQgbm90ZW5mX2ZrIEZPUkVJR04g S0VZIChhKSBSRUZFUkVOQ0VTIG5vdGVuZl90Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgTk9UIEVORk9SQ0VECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub3Rl bmYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5vdGVuZiAoYSBpbnRl Z2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ub3RlbmYgQUREIENPTlNUUkFJTlQg bm90ZW5mX2ZrIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0Lm5vdGVu Zl90Z3QoaWQpIE5PVCBFTkZPUkNFRDsKKygyIHJvd3MpCisKKy0tIFdJVEhPVVQgT1ZFUkxBUFMg b24gYSBQUklNQVJZIEtFWSAoUEcgMTcpOiB0aGUgcmFuZ2UtdHlwZSBwZXJpb2QKKy0tIGNvbHVt biBmb3JtcyBhIHRlbXBvcmFsIHByaW1hcnkga2V5OyBXSVRIT1VUIE9WRVJMQVBTIG11c3QgYXBw ZWFyCistLSBpbnNpZGUgdGhlIGtleSBjb2x1bW4gbGlzdCBpbiB0aGUgcmVjb25zdHJ1Y3RlZCBB TFRFUiBUQUJMRS4KKy0tIEJvdGggY29sdW1ucyB1c2UgcmFuZ2UgdHlwZXMgd2l0aCBuYXRpdmUg R2lTVCBzdXBwb3J0IHNvIG5vCistLSBidHJlZV9naXN0IGV4dGVuc2lvbiBpcyBuZWVkZWQuCitD UkVBVEUgVEFCTEUgdGVtcG9yYWxfcGsgKAorICAgIGdycCAgaW50NHJhbmdlLAorICAgIGR1cmlu ZyBkYXRlcmFuZ2UsCisgICAgUFJJTUFSWSBLRVkgKGdycCwgZHVyaW5nIFdJVEhPVVQgT1ZFUkxB UFMpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wb3JhbF9wayc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QudGVtcG9yYWxfcGsgKGdycCBpbnQ0cmFuZ2UgTk9UIE5VTEwsIGR1cmluZyBkYXRlcmFu Z2UgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnRlbXBvcmFsX3BrIEFE RCBDT05TVFJBSU5UIHRlbXBvcmFsX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGdycCwgZHVyaW5nIFdJ VEhPVVQgT1ZFUkxBUFMpOworKDIgcm93cykKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQg cGFydGlhbC4gIENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAo dGhleSBhcmUgZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBp ZHhkIChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9s b3dlciBPTiBpZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9O IGlkeGQgKGlkKSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JF QVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAo bG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rl c3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkg KGlkKTsKKyg0IHJvd3MpCisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcgYSBjaGlsZCBERUZB VUxUIG92ZXJyaWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyIChh IGludCBERUZBVUxUIDEsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMgaW50KSBJTkhFUklU UyAocGFyKTsKK0FMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2ggKGMgaW50ZWdlcikgSU5IRVJJVFMgKHBndGJsX2RkbF90 ZXN0LnBhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEg U0VUIERFRkFVTFQgOTk5OworKDIgcm93cykKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBl bWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChh IGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5f ZGlzdGluY3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCAoYSBpbnRlZ2Vy LCBiIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBDT0xV TU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykKKworLS0gUGFydGl0aW9uZWQg dGFibGUgcGFyZW50cyAoUkFOR0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfcmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChp ZCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJ T04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRf aGFzaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfaGFzaCAoaWQgaW50ZWdlcikgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKwor Q1JFQVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X2xpc3QnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9saXN0IChpZCBpbnRlZ2VyLCBy ZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisoMSByb3cpCisKKy0tIFBh cnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwgREVG QVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3Jh bmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBhcnRl ZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFS VElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIEFM VEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUgcGFy dGVkX2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAgICBGT1IgVkFMVUVTIFdJVEgg KG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdwYXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaF8w IFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaCBGT1IgVkFMVUVTIFdJVEgg KG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworKDEgcm93KQorCitDUkVBVEUgVEFCTEUgcGFydGVk X3JhbmdlX2RlZiBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlIERFRkFVTFQ7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV9kZWYnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3JhbmdlX2RlZiBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX3JhbmdlIERFRkFVTFQ7CisoMSByb3cpCisKKy0tIFJ1bGVzLgorQ1JFQVRFIFRBQkxFIHJ0 IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50KTsKK0NSRUFURSBSVUxFIHJ0 X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8gQUxTTyBJTlNFUlQgSU5UTyBy dF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy dCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChp ZCBpbnRlZ2VyKTsKKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHBn dGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cgKGlk KSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3MpCisKKy0tIEV4dGVuZGVkIHN0YXRpc3Rp Y3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBTVEFU SVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGludGVn ZXIsIGMgaW50ZWdlcik7CisgQ1JFQVRFIFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4X25k diAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDIgcm93cykK KworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChpZCBp bnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBU QUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygzIHJvd3Mp CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVmYXVs dC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxsIFJF UExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlf ZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygyIHJvd3MpCisKK0NSRUFU RSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlf aWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy aV9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAoYSBp bnRlZ2VyIE5PVCBOVUxMKTsKKyBDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHBndGJs X2RkbF90ZXN0LnJpX2lkeCBVU0lORyBidHJlZSAoYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3QucmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CisoMyBy b3dzKQorCistLSBVTkxPR0dFRCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUg dW5vIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3Vubyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFVOTE9HR0VEIFRB QkxFIHBndGJsX2RkbF90ZXN0LnVubyAoaWQgaW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0nNzAn KTsKKygxIHJvdykKKworLS0gVHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUp LiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2Nh bGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJv dWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUg dHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0Yg dHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0LnR5 cGVkX3Q7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAor ICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9O UyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+ IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QudHlwZWRfb3ZlciBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90IChhIFdJVEggT1BU SU9OUyBERUZBVUxUIDcgTk9UIE5VTEwsIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLCBDT05TVFJB SU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKChsZW5ndGgoYikgPiAwKSkpOworKDEgcm93KQorCistLSBU ZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBiZSBl bWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEgcHJl Zml4IC0tIHRoZSBURU1QT1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxl IGluIHBnX3RlbXAgYW5kIHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBDT01N SVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVkIHRv IHNlZQorLS0gdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rp b24gYXMgdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0 IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09N TUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9O IENPTU1JVCBEUk9QOworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Rl ZmF1bHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElL RSAnQ1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50ZWdlcik7 CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWxl dGUnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAn Q1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEVN UE9SQVJZIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnRlZ2VyKSBPTiBDT01NSVQgREVMRVRFIFJP V1M7CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9k cm9wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0Ug J0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0ZW1w X2Ryb3AgKGlkIGludGVnZXIpIE9OIENPTU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFDSzsK Ky0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgcHJldHR5ID0+IHRydWUpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor ICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxU ICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICsKKyApOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJ TUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMg Z2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChvbmx5 X2tpbmRzKSBvciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9raW5k cykuICBUaGUgdHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVsYXJ5 OiB0YWJsZSwgaW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9r ZXksIGV4Y2x1c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxz LCByZXBsaWNhX2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4gdGhl IHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcgc2No ZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBoYXZl IHJlamVjdGVkLgorLS0KKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRFIElO REVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkg UFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tl eSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uIGhpZGVzIGV2ZXJ5CistLSB0YWJs ZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5lIENIRUNLIGluIHRoZSBDUkVBVEUgVEFCTEUgYm9k eSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn cHJpbWFyeV9rZXknLCd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ10p OworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisKKy0t IGV4Y2VwdF9raW5kcz1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkgY29u c3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5PVCBO VUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkst Y2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZLcywg bG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkKKy0tIHRv IGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAo YSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sg Q0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBD T05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKygyIHJvd3MpCisKKy0tIG9ubHlfa2lu ZHM9Zm9yZWlnbl9rZXkgaXMgdGhlIHNlY29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9u ZQorLS0gd29ya2Zsb3c6IGVtaXQgb25seSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJB SU5UIC4uLiBGT1JFSUdOCistLSBLRVkgcm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZlcnkg bm9uLUZLIHN1Yi1vYmplY3QgYXJlCistLSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFkeSBl eGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFzcykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J2ZvcmVpZ25fa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQURE IENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0Ymxf ZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSByb3cp CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRl cgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJB WVsnZm9yZWlnbl9rZXknXSk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0t LQorKDAgcm93cykKKworLS0gb25seV9raW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJlIENS RUFURSBUQUJMRSAod2l0aCBhbnkgaW5saW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwgYW5k IENIRUNLKSAtIG5vIGluZGV4ZXMsIG5vIFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3RoZXIg c3ViLW9iamVjdHMuICBVc2VmdWwgZm9yIGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0aG91 dAorLS0gcHVsbGluZyBpbiBldmVyeXRoaW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWyd0YWJsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1l IHRleHQpOworKDEgcm93KQorCistLSBvbmx5X2tpbmRzPWNoZWNrIG9uIGEgbm9uLXBhcnRpdGlv biB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBlbWl0CistLSBjb2x1bW4tbGV2ZWwg YW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJMRSBoZXJlLAor LS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRFIFRBQkxFIG5ldmVyIHJ1bnMgKEtJ TkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4KK0NSRUFURSBUQUJMRSBjaGtfb25s eSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBxdHkgaW50IENIRUNLIChxdHkgPiAw KSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBDSEVDSyAoaWQgPiAwKQorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29ubHknOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB TFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25s eV9pZF9wb3MgQ0hFQ0sgKChpZCA+IDApKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j aGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25seV9xdHlfY2hlY2sgQ0hFQ0sgKChxdHkgPiAw KSk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGNoa19vbmx5OworLS0gb25seV9raW5kcz1wYXJ0 aXRpb24gb24gYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxsIERE TAorLS0gaXMgZW1pdHRlZCAoQ1JFQVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4gIFRo ZSAicGFydGl0aW9uIgorLS0ga2V5d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZlbDsg aXQgaXMgc3RyaXBwZWQgZnJvbSB0aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBjaGls ZCBkb2VzIG5vdCBleGNsdWRlIGl0cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBUQUJM RSBwX29ubHkgKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JF QVRFIFRBQkxFIHBfb25seV9hIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoMTAwKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5IEZP UiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncF9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWydwYXJ0aXRpb24nXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wX29ubHlfYSBQQVJUSVRJT04gT0Yg cGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9iIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxf dGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworKDIgcm93cykKKwor RFJPUCBUQUJMRSBwX29ubHk7CistLSBvbmx5X2tpbmRzIGFuZCBleGNlcHRfa2luZHMgYXJlIG11 dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CitFUlJP UjogICJvbmx5X2tpbmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFs bHkgZXhjbHVzaXZlCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUgYW5k IGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRzIHNv IHRoZSBzdWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9zcy10 YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn dW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50 ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9 cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3J1bGUnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhj ZXB0X2tpbmRzPXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us IGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKGEgaW50ZWdlciwgYiBp bnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9cmxzIGhpZGVz IHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRlZ2Vy KTsKKygxIHJvdykKKworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhl IFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBp bnRlZ2VyKTsKKygxIHJvdykKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVkIGJ5 IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1wYXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBzbyBv bmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsg aW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKKy0tIFdoaXRlc3Bh Y2UgYXJvdW5kIGtpbmQgbmFtZXMgaXMgYWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us IGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnICBJTkRFWCAgJywnICBSVUxFICAnXSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBL RVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRo ZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1z Y2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVu dHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1z Y2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4K Ky0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFzaWMgKGlkIGlu dGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6dGV4 dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtl eSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSU5IRVJJVFMgcGFyZW50IGluIHRo ZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoIChjIGlu dGVnZXIpIElOSEVSSVRTIChwYXIpOworIEFMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNF VCBERUZBVUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNh bWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3Jhbmdl IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGFydGVkX3Jhbmdl XzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKKy0tIENyb3NzLXNj aGVtYSBGSyB0YXJnZXQga2VlcHMgcXVhbGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFibGUgaXMg aW4KKy0tIHBndGJsX2RkbF90ZXN0OyBwbGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZmZXJlbnQg c2NoZW1hIGFuZCB2ZXJpZnkgaXQKKy0tIHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGggc2NoZW1h X3F1YWxpZmllZD1mYWxzZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOworQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF9vdGhlci5wYXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVB VEUgVEFCTEUgeHNjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBwaWQg aW50IFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgneHNjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB4c2NoZW1hX2ZrIChpZCBpbnRlZ2VyIE5PVCBOVUxM LCBwaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgeHNjaGVtYV9mayBBREQgQ09OU1RSQUlOVCB4 c2NoZW1hX2ZrX3BpZF9ma2V5IEZPUkVJR04gS0VZIChwaWQpIFJFRkVSRU5DRVMgcGd0YmxfZGRs X290aGVyLnBhcmVudChpZCk7CisgQUxURVIgVEFCTEUgeHNjaGVtYV9mayBBREQgQ09OU1RSQUlO VCB4c2NoZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3MpCisKKy0tIENyb3Nz LXNjaGVtYSBGSyB3aG9zZSB0YXJnZXQgc2NoZW1hIG5hbWUgZW5kcyB3aXRoIHRoZSBiYXNlIHNj aGVtYSBuYW1lCistLSAoZS5nLiAieHBndGJsX2RkbF90ZXN0IiBlbmRzIHdpdGggInBndGJsX2Rk bF90ZXN0IikuICBBIHBvc3QtaG9jIHRleHQKKy0tIHN0cmlwIHdvdWxkIG1hbmdsZSAieHBndGJs X2RkbF90ZXN0LnJlZnRibCIgaW50byAieHJlZnRibCI7IGRlY2lkaW5nCistLSBxdWFsaWZpY2F0 aW9uIGF0IGdlbmVyYXRpb24gdGltZSBhdm9pZHMgdGhlIHByb2JsZW0gZW50aXJlbHkuCitDUkVB VEUgU0NIRU1BIHhwZ3RibF9kZGxfdGVzdDsKK0NSRUFURSBUQUJMRSB4cGd0YmxfZGRsX3Rlc3Qu cmVmdGJsIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHN1ZmZpeF9zY2hlbWFf ZmsgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcmVmIGludCBSRUZFUkVOQ0VTIHhw Z3RibF9kZGxfdGVzdC5yZWZ0YmwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3N1ZmZpeF9zY2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVtYV9mayAo aWQgaW50ZWdlciBOT1QgTlVMTCwgcmVmIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHN1ZmZpeF9z Y2hlbWFfZmsgQUREIENPTlNUUkFJTlQgc3VmZml4X3NjaGVtYV9ma19wa2V5IFBSSU1BUlkgS0VZ IChpZCk7CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVtYV9mayBBREQgQ09OU1RSQUlOVCBzdWZm aXhfc2NoZW1hX2ZrX3JlZl9ma2V5IEZPUkVJR04gS0VZIChyZWYpIFJFRkVSRU5DRVMgeHBndGJs X2RkbF90ZXN0LnJlZnRibChpZCk7CisoMyByb3dzKQorCitEUk9QIFRBQkxFIHN1ZmZpeF9zY2hl bWFfZms7CitEUk9QIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorLS0gSWRlbnRpdHkg Y29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMK Ky0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICh2IGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJ REVOVElUWSAoU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUgTUlOVkFMVUUgNTAgTUFYVkFM VUUgMTAwMCBDQUNIRSAxMCBDWUNMRSkgTk9UIE5VTEwpOworKDEgcm93KQorCistLSBSb3VuZC10 cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UsIGFmdGVyIFNFVCBzZWFyY2hfcGF0aCB0 aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5ZWQgaW50byBhIGRpZmZlcmVudCB0YXJnZXQgc2NoZW1h LgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5OworRE8gJCQKK0RFQ0xBUkUKKyAgICBz dG10IHRleHQ7CitCRUdJTgorICAgIFNFVCBMT0NBTCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF9y ZXBsYXk7CisgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwZ3RibF9kZGxfdGVzdC5iYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNl KSBBUyBsaW5lCisgICAgTE9PUAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7 CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5h bWUKK0ZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpy ZWdjbGFzczsKKyAgIHJlbG5hbWVzcGFjZSAgIHwgcmVsbmFtZSAKKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0KKyBwZ3RibF9kZGxfcmVwbGF5IHwgYmFzaWMKKygxIHJvdykKKworRFJPUCBT Q0hFTUEgcGd0YmxfZGRsX3JlcGxheSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBwZ3RibF9kZGxfcmVwbGF5LmJhc2ljCitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitE Uk9QIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2Fk ZXMgdG8gdGFibGUgcGd0YmxfZGRsX290aGVyLnBhcmVudAorLS0gTG9jYWxseS1kZWNsYXJlZCBD SEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0 byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQor LS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NS RUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRl ZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBG T1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04g T0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGtfY2hpbGQgQUREIENPTlNU UkFJTlQgY2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgVEFC TEUgcGFydGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEgcGFyZW50IHdpdGgg YSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxURVIgQ09MVU1OIC4u LiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhl IEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGluaGVyaXRhbmNlLAor LS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0 ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGludCwKKyAgICBnICBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitDUkVBVEUgVEFCTEUg Y2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9n ZW4gKCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcl9nZW4pOworKDEgcm93KQorCitEUk9Q IFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUg Y2hfZ2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1p dHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIHRoZSBvcmln aW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEg bG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxpbmUKKy0tICJOT1QgTlVMTCIg LSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0t IFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgYm90aCBmb3JtcyB0byBh dm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1j b2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4g Tk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBhIGludCBD T05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0Lm5uX25hbWVkIChhIGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBp bnRlZ2VyIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9uYW1lZDsKKy0tIFJl bmFtaW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElUWSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRl Y2xhcmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCBmcm96ZW4gYXQgdGhl IG9yaWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5h bWUgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRlcm4uCistLSBUaGUgZW1pdHRlZCBEREwg bXVzdCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3RyYWludCBsb29wIG11c3Qgbm90CistLSBB TFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBzZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENS RUFURSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElERU5USVRZIGFscmVhZHkgY3JlYXRlcyBh biBhdXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkg cGVybWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBubl9yZW5hbWVk ICgKKyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMCispOwor QUxURVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8gbm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQyJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAo YSBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0 YmxfZGRsX3Rlc3Qubm5fcmVuYW1lZF9hX3NlcSkgQ09OU1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90 X251bGwgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworLS0g TG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNv bHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAo YXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNv bWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhh biBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5f Y2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05T VFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J25uX2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0Lm5uX2NoIChiIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5ubl9wYXIpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5P VCBOVUxMIGE7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBubl9jaAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxz ZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9u cyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0g b2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCku ICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2Vk IHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JF QVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJl Zi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBp bnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3Ri bF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hF Q0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHQg KGlkIGludGVnZXIgREVGQVVMVCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVn ZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJP UCBTQ0hFTUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMg dG8gMyBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBn dGJsX2RkbF94cmVmLm15c2VxCitkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94 cmVmLmYoaW50ZWdlcikKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAor LS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFs cyB3aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZv bGxvd2VkIGJ5IGEgZG90LiAgU3RyaW5nCistLSBsaXRlcmFsIHRleHQgaXMgb3V0cHV0IHZlcmJh dGltIGJ5IHRoZSBkZXBhcnNlciBhbmQgaXMgdW5hZmZlY3RlZCBieQorLS0gc2VhcmNoX3BhdGgg bmFycm93aW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9z dHIucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5z ZWNyZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGMgUEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBU QUJMRSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKChub3RlIDw+ICdwZ3RibF9kZGxfc3Ry LnNlY3JldCc6OnRleHQpKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIg Q0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3N0ci5w CistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3Rl ZCBpZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNj aGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0 ZXJhbGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBU aGUgbWVjaGFuaXNtIGlzIHB1cmVseSBzZWFyY2hfcGF0aCBuYXJyb3dpbmc6IHRoZSBkZXBhcnNl cgorLS0gb3V0cHV0cyBhdHRyaWJ1dGUgbmFtZXMgdmVyYmF0aW0gZnJvbSBwZ19hdHRyaWJ1dGUs IHNvIHRoZSBxdW90ZWQKKy0tIGlkZW50aWZpZXIgY29udGVudCBpcyBuZXZlciBleGFtaW5lZCBm b3Igc2NoZW1hIHByZWZpeGVzLiAgVGhpcyBob2xkcworLS0gZXZlbiB3aGVuIHRoZSBzY2hlbWEg bmFtZSBpcyBhIHNpbmdsZSBsZXR0ZXIuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7CitD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndlaXJk IiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJTlQg Y2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZS T00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9k ZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3du ZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxp ZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlk LndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCist LSBTYW1lIHdpdGggYSBzaG9ydCAoc2luZ2xlLWxldHRlcikgc2NoZW1hIG5hbWUgdG8gY29uZmly bSB0aGVyZSBpcyBubworLS0gbWluaW11bS1sZW5ndGggYXNzdW1wdGlvbiBpbiB0aGUgc3RyaXBw aW5nIHBhdGguCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xMTsKK0NSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfcTEucCAoaWQgaW50LCAicGd0YmxfZGRsX3ExLndlaXJkIiBpbnQpCisgICAgUEFSVElU SU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3ExLnBjIFBBUlRJVElP TiBPRiBwZ3RibF9kZGxfcTEucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2Rk bF9xMS53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcTEucGMnOjpyZWdjbGFzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0Yg cCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05T VFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcTEud2VpcmQiID4gMCkpOworKDIgcm93cykK KworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3ExIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9xMS5wCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdo ZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMg cHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJh cmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0t IEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1 b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11 c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRB QkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBj aGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwt RGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJs LURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv d25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVh bGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgIlQiIChpZCBpbnRlZ2VyLCB2YWwgaW50ZWdlciwgQ09O U1RSQUlOVCBjaGsgQ0hFQ0sgKCh2YWwgPiAwKSkpOworIENSRUFURSBJTkRFWCAiVF92YWxfaWR4 IiBPTiAiVCIgVVNJTkcgYnRyZWUgKHZhbCk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSAiUGdU YmwtRGRsLVEiIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlICJQZ1Ri bC1EZGwtUSIuIlQiCistLSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRh YmxlLgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworRVJST1I6ICAidiIgaXMgbm90IGFuIG9yZGlu YXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsKK0VSUk9SOiAgInMiIGlzIG5vdCBh biBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQorLS0gTlVMTCBhcmd1bWVudCByZXR1cm5z IG5vIHJvd3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisgcGdfZ2V0 X3RhYmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVmZXJlbmNlZCBpbmRleAor LS0gd291bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJjZSBraW5kIGlzIHN1cHBy ZXNzZWQpIGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291bGQgYmUsIHRoZSBmdW5j dGlvbiByYWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERETCBuZXZlciBkYW5nbGVz LiAgRXhlcmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCistLSBmb3JtcyAoUEssIFVO SVFVRSwgRVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUgSU5ERVgsIGluCistLSBi b3RoIHRoZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4KKy0tCistLSBQSy1iYWNr ZWQ6IGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2VwdF9raW5kcz1yZXBsaWNh X2lkZW50aXR5LgorQ1JFQVRFIFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50IFBSSU1BUlkgS0VZKTsK K0FMVEVSIFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9w a19leGNsX3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFy eV9rZXknXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9wa19leGNs IiByZXF1aXJlcyBraW5kICJwcmltYXJ5X2tleSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhl IHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4 IHByb2R1Y2VkIGJ5IHRoZSAicHJpbWFyeV9rZXkiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUg YWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJwcmltYXJ5X2tleSIgdG8gdGhlIGZp bHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBTYW1lIGNhbGwg YnV0IGFsc28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdyZXBsaWNhX2lkZW50aXR5 J10pOworICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX3BrX2V4 Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCk7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfcGtfZXhj bDsKKy0tIFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4Lgor Q1JFQVRFIFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7 CitBTFRFUiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBy aV91bmlxX2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3Vu aXFfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZ Wyd1bmlxdWUnXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV91bmlx X2V4Y2wiIHJlcXVpcmVzIGtpbmQgInVuaXF1ZSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhl IHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4 IHByb2R1Y2VkIGJ5IHRoZSAidW5pcXVlIiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2 ZSBmaWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAidW5pcXVlIiB0byB0aGUgZmlsdGVyIG9yIHJl bW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRf a2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5yaV91bmlxX2V4Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykK KworRFJPUCBUQUJMRSByaV91bmlxX2V4Y2w7CistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVgg KG5vIGJhY2tpbmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhl IGluZGV4IGlzIGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAi aW5kZXgiIHdpdGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJy b3IuCitDUkVBVEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitD UkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7 CitBTFRFUiBUQUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJp X2lkeF9leGNsX2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4 X2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn aW5kZXgnXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9pZHhfZXhj bCIgcmVxdWlyZXMga2luZCAiaW5kZXgiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJs ZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9k dWNlZCBieSB0aGUgImluZGV4IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0 ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAiaW5kZXgiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJy ZXBsaWNhX2lkZW50aXR5IiBmcm9tIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyaV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+ IEFSUkFZWydpbmRleCcsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4X2V4 Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKworRFJPUCBUQUJM RSByaV9pZHhfZXhjbDsKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHlfa2luZHM9cmVwbGlj YV9pZGVudGl0eSBtdXN0IGluY2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1pdHMgdGhlIGluZGV4 LCBvciB0aGUgZnVuY3Rpb24gZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29ubHkgKGEgaW50IE5P VCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfb25seSBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHJpX29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9y IHRhYmxlICJyaV9vbmx5IiByZXF1aXJlcyBraW5kICJ1bmlxdWUiIHRvIGJlIGVtaXR0ZWQKK0RF VEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNl cyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIga2luZCwgd2hpY2ggaXMgbm90IGlu IHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgInVuaXF1ZSIgdG8gdGhlIGZp bHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBJbmNsdWRpbmcg Ym90aCBraW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlf b25seSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndW5p cXVlJywncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX29ubHkg QUREIENPTlNUUkFJTlQgcmlfb25seV9hX2tleSBVTklRVUUgKGEpOworIEFMVEVSIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5 X2Ffa2V5OworKDIgcm93cykKKworRFJPUCBUQUJMRSByaV9vbmx5OworLS0gUGVyLWtpbmQgb25s eV9raW5kcyAvIGV4Y2VwdF9raW5kcyBjb3ZlcmFnZS4gIEZvciBlYWNoIGtpbmQgaW4gdGhlIHZv Y2FidWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5X2tpbmRzPUsgZW1pdHMganVzdCB0aGF0IGtp bmQncyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0X2tpbmRzPUsKKy0tIG9taXRzIGp1c3QgdGhhdCBr aW5kJ3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2VyLAorLS0g cG9saWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90aGluZzsg b25seV9raW5kcz1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1cmVzIHVz ZWQ6CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0tICAgY29u czogUEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0tICAgcnQ6 ICAgQ1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAgcmxzOiAg RU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBMSUNBIElE RU5USVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFCTEUgZXhj bF9maXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAm JikpOworLS0gb25seV9raW5kcz1LOiBlbWl0IG9ubHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlk eGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkp OworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lO RyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlf a2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENP TlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMSByb3cpCisKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg b25seV9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBj b25zX2Jfa2V5IFVOSVFVRSAoYik7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMg PT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IEFERCBDT05TVFJB SU5UIGV4Y2xfZml4X3JuZ19leGNsIEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpOwor KDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBSVUxFIHJ0X2xv Z19pbnNlcnQgQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rlc3QucnQgRE8gIElOU0VSVCBJTlRP IHBndGJsX2RkbF90ZXN0LnJ0X2xvZyAoaWQpKworICAgVkFMVUVTIChuZXcuaWQpOworKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4X25kdiAobmRpc3RpbmN0KSBPTiBh LCBiIEZST00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsncmxzJ10pOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QucmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg b25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworKDEg cm93KQorCistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNv bW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVs cGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndHJpZ2dlciddKTsK Ky0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsKKy0tIGV4Y2VwdF9r aW5kcz1LOiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9V TklRVUUvCistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUg dGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBV U0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04g cGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7Ciso MyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwg YyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkg Rk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJS QUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnY2hlY2snXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNv bnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBVTklRVUUgKGIpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkg Rk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJS QUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRf a2luZHMgPT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UpOworKDEgcm93KQorCistLSB0cmlnZ2VyIC8gcG9s aWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3Ry aWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLgorLS0gU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tp bmRzID0+IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9dGFibGUgc3VwcHJlc3Nl cyB0aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVM VCArIGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2Vz LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJ TkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2Vy KG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0Lmlk eGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7 CisoMyByb3dzKQorCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9r aW5kcyA9PiBBUlJBWVsndGFibGUnLCdpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUg SU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dl cihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5p ZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygzIHJvd3MpCisKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdmb3JlaWduX2tleSddKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19m a2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERF RkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBEdXBsaWNhdGUgZW50 cmllcyBpbiB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUKKy0tIEJp dG1hcHNldC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdpbmRleCddKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5H IGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3Ri bF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygyIHJv d3MpCisKK0RST1AgVEFCTEUgZXhjbF9maXg7CistLSBvbmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0 aGF0IGRvZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRl ciBhbmQgcmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25f a2V5CistLSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxp Y2FfaWRlbnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5 IFBLICsgY29sdW1ucykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisgcnVsZV9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAg IDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyBzdGF0c19yb3dzIAorLS0tLS0tLS0tLS0tCisg ICAgICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworIHJsc19yb3dzIAorLS0tLS0tLS0tLQorICAgICAg ICAwCisoMSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7Cisgcmlfcm93cyAKKy0tLS0tLS0tLQorICAg ICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tp bmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7CisgZXhjbF9yb3dzIAorLS0tLS0tLS0tLS0KKyAg ICAgICAgIDAKKygxIHJvdykKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0 aGUga2luZCBhcnJheS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3I7IHRoZSBmdW5j dGlvbiBuZXZlciByZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0eSBhcnJheToKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9 PiBBUlJBWVtdOjp0ZXh0W10pOworRVJST1I6ICBwYXJhbWV0ZXIgIm9ubHlfa2luZHMiIG11c3Qg c3BlY2lmeSBhdCBsZWFzdCBvbmUga2luZAorLS0gTlVMTCBlbGVtZW50OgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZ W05VTEw6OnRleHRdKTsKK0VSUk9SOiAgcGFyYW1ldGVyICJvbmx5X2tpbmRzIiBtdXN0IG5vdCBj b250YWluIE5VTEwgZWxlbWVudHMKKy0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZ Wydub19zdWNoX2tpbmQnXSk7CitFUlJPUjogIHVucmVjb2duaXplZCBraW5kICJub19zdWNoX2tp bmQiIGluIHBhcmFtZXRlciAib25seV9raW5kcyIKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhy b3VnaCBib3RoIHBhcmFtZXRlcnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitFUlJP UjogICJvbmx5X2tpbmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFs bHkgZXhjbHVzaXZlCistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0 IHRhYmxlLCBjYXB0dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUg c2NoZW1hLCByZXBsYXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwg YW5kIGNvbmZpcm0gdGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJl bGF0aW9uIG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VM RUNUIG11c3QKKy0tIHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9k ZGxfcnRfb3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8g cGd0YmxfZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZB TFVFUworICAgICAgICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dl bl9jb2xzJyksICgnZ2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdy ZWZkJyksICgnY29ucycpLCAoJ251bGxzX25kJyksICgnaWR4X2luYycpLAorICAgICAgICAoJ2Zr X2FjdHNfdGd0JyksICgnZmtfYWN0cycpLCAoJ25vdGVuZl90Z3QnKSwgKCdub3RlbmYnKSwgKCd0 ZW1wb3JhbF9waycpLAorICAgICAgICAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwgKCdjaCcp LCAoJ2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9yYW5nZV8x JyksICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyksICgncGFy dGVkX2hhc2hfMCcpLAorICAgICAgICAoJ3BhcnRlZF9saXN0JyksCisgICAgICAgICgncnRfbG9n JyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyksICgncmlf aWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBnX2dldF90 YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJVEggT1JESU5BTElUWSBv KGxpbmUsIG9yZCk7CitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0W10g Oj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3RvbScsICdnZW5f Y29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdlX2NvbHMnLAorICAgICAgICAncmVmZCcsICdj b25zJywgJ251bGxzX25kJywgJ2lkeF9pbmMnLAorICAgICAgICAnZmtfYWN0c190Z3QnLCAnZmtf YWN0cycsICdub3RlbmZfdGd0JywgJ25vdGVuZicsICd0ZW1wb3JhbF9waycsCisgICAgICAgICdp ZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdhdHRvcHQnLAorICAgICAgICAncGFydGVkX3Jh bmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRlZF9yYW5nZV9kZWYnLAorICAgICAgICAncGFy dGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisgICAgICAgICdwYXJ0ZWRfbGlzdCcsCisgICAg ICAgICdydF9sb2cnLCAncnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9mdWxsJywgJ3Jp X2lkeCcsICd1bm8nCisgICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0OworQkVHSU4K KyAgICBEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENSRUFURSBTQ0hF TUEgcGd0YmxfZGRsX3Rlc3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxlcyBMT09QCisg ICAgICAgIEZPUiBzdG10IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBndGJsX2Rk bF9ydF9vcmlnIFdIRVJFIG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBMT09QCisgICAg ICAgICAgICBCRUdJTgorICAgICAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgICAg IEVYQ0VQVElPTiBXSEVOIGR1cGxpY2F0ZV90YWJsZSBUSEVOCisgICAgICAgICAgICAgICAgTlVM TDsgIC0tIHBhcnRpdGlvbiBjaGlsZCBhbHJlYWR5IGNyZWF0ZWQgYnkgaXRzIHBhcmVudCdzIERE TAorICAgICAgICAgICAgRU5EOworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VO RCAkJDsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMzQgb3RoZXIgb2JqZWN0cworREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBp ZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fdmlydHVhbAorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG51bGxzX25kCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeF9pbmMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgZmtfYWN0c190Z3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtfYWN0cworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmZfdGd0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG5v dGVuZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0ZW1wb3JhbF9waworZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBpZHhkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBjaAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcGFydGVkX3JhbmdlCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNo Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9saXN0Citkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHJ0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBzdHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHJpX2Z1bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHVubworZHJvcCBjYXNjYWRlcyB0byB0eXBlIHR5cGVkX3QKK2Ryb3AgY2FzY2Fk ZXMgdG8gdGFibGUgdHlwZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdHlwZWRfb3Zl cgorZHJvcCBjYXNjYWRlcyB0byB2aWV3IHYKK2Ryb3AgY2FzY2FkZXMgdG8gc2VxdWVuY2Ugcwor V0lUSCBhZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAg ICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0 LAorICAgICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8 fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv d25lciA9PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAn bWlzc2luZy1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxf cnRfb3JpZworIEVYQ0VQVAorIFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBs aW5lIEZST00gYWZ0ZXJfZGRsKQorVU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBB UyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1Qg J2V4dHJhLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykK K09SREVSIEJZIGtpbmQsIG5hbWUsIG9yZDsKKyBraW5kIHwgbmFtZSB8IG9yZCB8IGxpbmUgCist LS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tLQorKDAgcm93cykKKworLS0gQ2xlYW51cC4KK0RST1Ag U0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRv IDI5IG90aGVyIG9iamVjdHMKK0RFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgYmFzaWMK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBp ZF9jdXN0b20KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZ2VuX2NvbHMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgZ2VuX3ZpcnR1YWwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3RvcmFnZV9jb2xz Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJlZmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgY29u cworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBudWxsc19uZAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBpZHhfaW5jCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGZrX2FjdHNfdGd0Citkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIGZrX2FjdHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgbm90ZW5mX3RndAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmYKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdGVt cG9yYWxfcGsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4ZAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgY2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgYXR0b3B0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9yYW5nZQorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFzaAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRf bGlzdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJscworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHJpX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1bm8KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCmluZGV4IDhmYTBhNmM0N2ZiLi45ZWNhNjRjY2EzYiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3IEBAIHRlc3Q6IGNyZWF0ZV90YWJsZV9saWtl IGFsdGVyX2dlbmVyaWMgYWx0ZXJfb3BlcmF0b3IgbWlzYyBhc3luYyBkYnNpemUgbWVyZ2UgbWlz CiAjIGNvbGxhdGUubGludXgudXRmOCBhbmQgY29sbGF0ZS5pY3UudXRmOCB0ZXN0cyBjYW5ub3Qg YmUgcnVuIGluIHBhcmFsbGVsIHdpdGggZWFjaCBvdGhlcgogIyBwc3FsIGRlcGVuZHMgb24gY3Jl YXRlX2FtCiAjIGFtdXRpbHMgZGVwZW5kcyBvbiBnZW9tZXRyeSwgY3JlYXRlX2luZGV4X3NwZ2lz dCwgaGFzaF9pbmRleCwgYnJpbgotdGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxf cGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2lu ZG93cy53aW4xMjUyCit0ZXN0OiBydWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGlu ZSBhbXV0aWxzIHN0YXRzX2V4dCBjb2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndp bjEyNTIgcGdfZ2V0X3RhYmxlX2RkbAogCiAjIC0tLS0tLS0tLS0KICMgUnVuIHRoZXNlIGFsb25l IHNvIHRoZXkgZG9uJ3QgcnVuIG91dCBvZiBwYXJhbGxlbCB3b3JrZXJzCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mN2JmNThhYjIxMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCkBAIC0wLDAgKzEsNzQwIEBACistLQorLS0gcGdf Z2V0X3RhYmxlX2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUg QUxURVIgVEFCTEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0 cHV0IHN0YWJsZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBk aWZmZXJlbnQgcm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsK K1NFVCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworCistLSBCYXNpYyB0YWJsZSB3aXRo IFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBi YXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBE RUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBJZGVudGl0eSBj b2x1bW5zICh3aXRoIGRlZmF1bHQgYW5kIGN1c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFU RSBUQUJMRSBpZF9jb2xzICgKKyAgICBpZF9hbHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMg SURFTlRJVFksCisgICAgaWRfZGVmYXVsdCBpbnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURF TlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICgKKyAgICB2 IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZICgKKyAgICAgICAgU0VRVUVOQ0UgTkFN RSBpZF9jdXN0b21fdl9zZXEKKyAgICAgICAgU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUK KyAgICAgICAgTUlOVkFMVUUgNTAgTUFYVkFMVUUgMTAwMAorICAgICAgICBDQUNIRSAxMCBDWUNM RQorICAgICkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1u LgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xzICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBu dW1lcmljIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworCistLSBHZW5lcmF0ZWQgdmlydHVhbCBjb2x1bW4uCitDUkVBVEUgVEFCTEUg Z2VuX3ZpcnR1YWwgKAorICAgIGJhc2UgaW50LAorICAgIGRlcml2ZWQgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgKGJhc2UgKiAyKSBWSVJUVUFMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdnZW5fdmlydHVhbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFNU T1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3Ig dGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JB R0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJF U1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9j b2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gQ29uc3RyYWludHM6IENIRUNL LCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZkIChp ZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENIRUNL IChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVmZChp ZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBVTklR VUUgTlVMTFMgTk9UIERJU1RJTkNUIChQRyAxNSk6IG51bGwgdmFsdWVzIGFyZSB0cmVhdGVkIGFz IGVxdWFsIGZvcgorLS0gdW5pcXVlbmVzcyBwdXJwb3Nlcywgc28gdGhlIE5VTExTIE5PVCBESVNU SU5DVCBjbGF1c2UgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIG51bGxzX25kICgKKyAg ICBhIGludCwKKyAgICBiIGludCwKKyAgICBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChhLCBi KQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbnVsbHNfbmQnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBJTkNMVURFIGNvbHVtbnMgb24gYSBjb25zdHJhaW50 LWJhY2tlZCBVTklRVUUgaW5kZXggKFBHIDExKTogdGhlCistLSBjb3ZlcmluZyBjb2x1bW5zIGFw cGVhciBpbiBhbiBJTkNMVURFICguLi4pIGNsYXVzZSBvbiB0aGUgQUxURVIgVEFCTEUKKy0tIEFE RCBDT05TVFJBSU5UIHN0YXRlbWVudCwgbm90IGluIHRoZSBrZXkgY29sdW1uIGxpc3QuCitDUkVB VEUgVEFCTEUgaWR4X2luYyAoCisgICAgaWQgICBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0 ZXh0LAorICAgIGV4dHJhIHRleHQsCisgICAgVU5JUVVFIChuYW1lKSBJTkNMVURFIChleHRyYSkK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9pbmMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURSAvIE9OIFVQ REFURSByZWZlcmVudGlhbCBhY3Rpb25zIGFuZCBNQVRDSAorLS0gY2xhdXNlLiAgRWFjaCB2YXJp YW50IG11c3QgYXBwZWFyIHZlcmJhdGltIGluIHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFU RSBUQUJMRSBma19hY3RzX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBm a19hY3RzICgKKyAgICBhIGludCwKKyAgICBiIGludCwKKyAgICBjIGludCwKKyAgICBkIGludCwK KyAgICBDT05TVFJBSU5UIGZrX2Nhc2NhZGUgIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIENBU0NB REUgT04gVVBEQVRFIFJFU1RSSUNULAorICAgIENPTlNUUkFJTlQgZmtfc2V0bnVsbCAgRk9SRUlH TiBLRVkgKGIpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPTiBERUxFVEUgU0VUIE5VTEwsCisgICAgQ09OU1RSQUlOVCBma19zZXRkZWYgICBG T1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9OIERFTEVURSBTRVQgREVGQVVMVCwKKyAgICBDT05TVFJBSU5UIGZrX21h dGNoICAgIEZPUkVJR04gS0VZIChkKSBSRUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggRlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZmtfYWN0cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE5P VCBFTkZPUkNFRCBmb3JlaWduIGtleSAoUEcgMTcpOiB0aGUgY29uc3RyYWludCBpcyByZWNvcmRl ZCBpbiB0aGUKKy0tIGNhdGFsb2cgYnV0IG5vdCB2YWxpZGF0ZWQgYnkgdGhlIGVuZ2luZTsgTk9U IEVORk9SQ0VEIG11c3QgYXBwZWFyIGluCistLSB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVB VEUgVEFCTEUgbm90ZW5mX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBu b3RlbmYgKAorICAgIGEgaW50LAorICAgIENPTlNUUkFJTlQgbm90ZW5mX2ZrIEZPUkVJR04gS0VZ IChhKSBSRUZFUkVOQ0VTIG5vdGVuZl90Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAg Tk9UIEVORk9SQ0VECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub3RlbmYn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEg UFJJTUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9y bXMgYSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgor LS0gaW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIg VEFCTEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qg c3VwcG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRF IFRBQkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0 ZXJhbmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFs LiAgQ29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFy ZSBlbWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlk IGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9O IGlkeGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAo aWQpIFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGlu ZyBhIGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFU RSBUQUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAo YyBpbnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VU IERFRkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRl ZCBhcyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQs IGIgdGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3Rp bmN0ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAo UkFOR0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGlu dCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitD UkVBVEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVn aW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisK Ky0tIFBhcnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVy KSwgREVGQVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFy dGVkX3JhbmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxF IHBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRl ZF9oYXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElP TiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFJ1 bGVzLgorQ1JFQVRFIFRBQkxFIHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQg aW50KTsKK0NSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAg RE8gQUxTTyBJTlNFUlQgSU5UTyBydF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0t IEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMg aW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9N IHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlKTsKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUg VEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VD VVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworCistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1 bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBS RVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jp X2Z1bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcmlfaWR4 IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lk eCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBy aV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRpb25zLgorQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gNzApOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBUeXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIE9GIHR5cGVfbmFtZSkuICBDb2x1 bW5zIGluaGVyaXRlZCBmcm9tIHRoZQorLS0gdHlwZSBlbWl0IG5vdGhpbmc7IGxvY2FsbHktYXBw bGllZCBERUZBVUxULCBOT1QgTlVMTCBhbmQgQ0hFQ0sgY29tZQorLS0gb3V0IHRocm91Z2ggYSBz aW5nbGUgIihjb2wgV0lUSCBPUFRJT05TIC4uLikiIGxpc3QuCitDUkVBVEUgVFlQRSB0eXBlZF90 IEFTIChhIGludCwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0eXBlZF9wbGFpbiBPRiB0eXBlZF90 OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9wbGFpbic6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3Qg KAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BU SU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChi KSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENP TU1JVC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUgZW1pdHRlZCB3aXRoCistLSB0aGUgc2Vz c2lvbi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHByZWZpeCAtLSB0aGUgVEVNUE9SQVJZIGtl eXdvcmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiBwZ190ZW1wIGFuZCB0aGUgcHJl Zml4IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBj b21taXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0byBzZWUKKy0tIHRoZSBjYXRhbG9nIGVu dHJ5IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSBDUkVBVEUuCitCRUdJ TjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1Q IFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFU RSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKKworU0VMRUNU IGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1bHQnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworCitTRUxF Q1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRlJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKworU0VM RUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworUk9MTEJB Q0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgcHJldHR5ID0+IHRydWUpOworCistLSBv bmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGdhdGluZzogZWFjaCBlbWl0cyBlaXRoZXIgb25seSB0 aGUgbGlzdGVkIGtpbmRzCistLSAob25seV9raW5kcykgb3IgZXZlcnkga2luZCBleGNlcHQgdGhl IGxpc3RlZCBvbmVzIChleGNlcHRfa2luZHMpLiAgVGhlIHR3bworLS0gYXJlIG11dHVhbGx5IGV4 Y2x1c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4LAorLS0gcHJpbWFyeV9rZXks IHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24sIHJ1bGUsCistLSBzdGF0aXN0 aWNzLCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0aW9uLgor LS0gTk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0ZWQgdG8g cHJldmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQgTlVMTHMg dGhlIHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0tCistLSBleGNlcHRfa2luZHM9 aW5kZXggaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRf a2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworCistLSBleGNlcHRfa2luZHM9cHJpbWFyeV9rZXks dW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lvbiBoaWRlcyBldmVyeQorLS0gdGFibGUt bGV2ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkg aXMKKy0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj b25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3By aW1hcnlfa2V5JywndW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsK KworLS0gZXhjZXB0X2tpbmRzPWZvcmVpZ25fa2V5IHN1cHByZXNzZXMgb25seSBGT1JFSUdOIEtF WSBjb25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENIRUNLLCBhbmQgbmFtZWQg Tk9UIE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBwYXNzIG9mIHRoZSB0d28tcGFz cyBGSy1jbG9uZSB3b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91dAorLS0gY3Jvc3MtdGFibGUg RktzLCBsb2FkIGRhdGEsIHRoZW4gcmUtcnVuIHdpdGggb25seV9raW5kcz1mb3JlaWduX2tleQor LS0gdG8gYWRkIHRoZW0gb25jZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tp bmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gb25seV9raW5kcz1mb3JlaWduX2tl eSBpcyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lCistLSB3b3JrZmxv dzogZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIEZPUkVJ R04KKy0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBldmVyeSBub24tRksgc3ViLW9i amVjdCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBmcm9tIHRo ZSBmaXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXkn XSk7CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1 bmRlcgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIG9ubHlfa2luZHM9dGFibGUgZW1pdHMgb25seSB0 aGUgYmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55IGlubGluZQorLS0gY29sdW1uLWxldmVsIE5P VCBOVUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVzLCBubyBQUklNQVJZIEtFWSBBTFRFUiwKKy0t IG5vIG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNo YXBlIHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0aGluZyBhdHRhY2hlZCB0byBpdC4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndGFibGUnXSk7CisKKy0tIG9ubHlfa2luZHM9Y2hl Y2sgb24gYSBub24tcGFydGl0aW9uIHRhYmxlLiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IGVt aXQKKy0tIGNvbHVtbi1sZXZlbCBhbmQgdGFibGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWludHMgdmlh IEFMVEVSIFRBQkxFIGhlcmUsCistLSBiZWNhdXNlIHRoZSBpbmxpbmUgcGF0aCBpbiBDUkVBVEUg VEFCTEUgbmV2ZXIgcnVucyAoS0lORF9UQUJMRSBpcworLS0gbm90IGluIHRoZSBmaWx0ZXIpLgor Q1JFQVRFIFRBQkxFIGNoa19vbmx5ICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHF0 eSBpbnQgQ0hFQ0sgKHF0eSA+IDApLAorICAgIENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENI RUNLIChpZCA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaGtfb25s eSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnY2hlY2sn XSk7CitEUk9QIFRBQkxFIGNoa19vbmx5OworCistLSBvbmx5X2tpbmRzPXBhcnRpdGlvbiBvbiBh IHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGlsZCdzIGZ1bGwgRERMCistLSBpcyBl bWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBPRiAuLi4pLiAgVGhlICJwYXJ0aXRp b24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFyZW50IGxldmVsOyBpdCBpcyBzdHJp cHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIgc28gdGhlIGNoaWxkIGRvZXMgbm90 IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgorQ1JFQVRFIFRBQkxFIHBfb25seSAo aWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBG Uk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwX29u bHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BhcnRp dGlvbiddKTsKK0RST1AgVEFCTEUgcF9vbmx5OworCistLSBvbmx5X2tpbmRzIGFuZCBleGNlcHRf a2luZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9r ZXknXSk7CisKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25lOiBrZWVwIHRoZSB0YWJsZSBhbmQgaXRz IHByaW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBvZiB0aGUgY29uc3RyYWludHMgc28gdGhl IHN1YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0CistLSBwdWxsaW5nIGNyb3NzLXRhYmxl IGRlcGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlx dWUnLCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ10pOworCistLSBleGNlcHRfa2lu ZHM9cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ3J1bGUnXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1zdGF0aXN0aWNzIGhpZGVzIHRoZSBDUkVB VEUgU1RBVElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3Mn XSk7CisKKy0tIGV4Y2VwdF9raW5kcz1ybHMgaGlkZXMgdGhlIEVOQUJMRS9GT1JDRSBST1cgTEVW RUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxz Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3Jscydd KTsKKworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0Eg SURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxs Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3JlcGxp Y2FfaWRlbnRpdHknXSk7CisKKy0tIFBhcnRpdGlvbiBjaGlsZHJlbiBhcmUgZW1pdHRlZCBieSBk ZWZhdWx0OyBleGNlcHRfa2luZHM9cGFydGl0aW9uCistLSBzdXBwcmVzc2VzIHRoZW0gc28gb25s eSB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BhcnRpdGlvbiddKTsKKworLS0gV2hpdGVzcGFjZSBh cm91bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBjYXNlIGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWycgIElOREVYICAnLCcgIFJVTEUgICddKTsKKworLS0gc2NoZW1h X3F1YWxpZmllZD1mYWxzZSBzdHJpcHMgdGhlIHNjaGVtYSBmcm9tIHRoZSB0YXJnZXQgdGFibGUg aXRzZWxmCistLSBhbmQgZnJvbSBzYW1lLXNjaGVtYSBzaWJsaW5nIHJlZmVyZW5jZXMgKGluaGVy aXRhbmNlL3BhcnRpdGlvbgorLS0gcGFyZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzIGluIHRoZSBz YW1lIHNjaGVtYSksIHdoaWxlIGNyb3NzLXNjaGVtYQorLS0gcmVmZXJlbmNlcyBhcmUga2VwdCBx dWFsaWZpZWQgZm9yIGNvcnJlY3RuZXNzLgorLS0KKy0tIEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBh biBvcmRpbmFyeSB0YWJsZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0 aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIFBh cnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVt YV9xdWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBDcm9zcy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBz IHF1YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCistLSBwZ3RibF9kZGxfdGVz dDsgcGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0 CistLSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfb3Ro ZXIucGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsg KAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBSRUZFUkVOQ0VTIHBndGJs X2RkbF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3hz Y2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIENyb3NzLXNjaGVt YSBGSyB3aG9zZSB0YXJnZXQgc2NoZW1hIG5hbWUgZW5kcyB3aXRoIHRoZSBiYXNlIHNjaGVtYSBu YW1lCistLSAoZS5nLiAieHBndGJsX2RkbF90ZXN0IiBlbmRzIHdpdGggInBndGJsX2RkbF90ZXN0 IikuICBBIHBvc3QtaG9jIHRleHQKKy0tIHN0cmlwIHdvdWxkIG1hbmdsZSAieHBndGJsX2RkbF90 ZXN0LnJlZnRibCIgaW50byAieHJlZnRibCI7IGRlY2lkaW5nCistLSBxdWFsaWZpY2F0aW9uIGF0 IGdlbmVyYXRpb24gdGltZSBhdm9pZHMgdGhlIHByb2JsZW0gZW50aXJlbHkuCitDUkVBVEUgU0NI RU1BIHhwZ3RibF9kZGxfdGVzdDsKK0NSRUFURSBUQUJMRSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJs IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZmsgKAor ICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcmVmIGludCBSRUZFUkVOQ0VTIHhwZ3RibF9k ZGxfdGVzdC5yZWZ0YmwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N1ZmZp eF9zY2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIHN1 ZmZpeF9zY2hlbWFfZms7CitEUk9QIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKwor LS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2Ft ZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKwor LS0gUm91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRlciBTRVQgc2Vh cmNoX3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZmZXJlbnQgdGFy Z2V0IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RPICQkCitERUNM QVJFCisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNoX3BhdGggPSBw Z3RibF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVDVCBsaW5lIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmll ZCA9PiBmYWxzZSkgQVMgbGluZQorICAgIExPT1AKKyAgICAgICAgRVhFQ1VURSBzdG10OworICAg IEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlOjp0 ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdwZ3RibF9kZGxfcmVwbGF5 LmJhc2ljJzo6cmVnY2xhc3M7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7 CitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXIgQ0FT Q0FERTsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBo YXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9y bSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4u IEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBp bnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtf aW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKworLS0gSW5o ZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hv dWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUg aW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24g Y2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291 bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFC TEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBh cl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NBREU7CisKKy0tIEEg dXNlci1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGlubGluZSBh cworLS0gIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgc28gdGhlIG9yaWdpbmFsIG5hbWUgaXMg cHJlc2VydmVkLiAgQW4KKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4g aXMgZW1pdHRlZCBhcyBhIHBsYWluIGlubGluZQorLS0gIk5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0 ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCB3aGVuIENSRUFURQorLS0gVEFCTEUgcnVucywg c28gdGhlIGNvbnN0cmFpbnQgbG9vcCBza2lwcyBib3RoIGZvcm1zIHRvIGF2b2lkIHRoZQorLS0g cmVkdW5kYW50IChhbmQgb24gdGFibGUtcmVuYW1lIG9yIHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJv a2VuKQorLS0gQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0 ZW1lbnQuCitDUkVBVEUgVEFCTEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlf bm4gTk9UIE5VTEwsCisgICAgYiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ25uX25hbWVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1Ag VEFCTEUgbm5fbmFtZWQ7CisKKy0tIFJlbmFtaW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElU WSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQg Y29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25n ZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRl cm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3Ry YWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBz ZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElE RU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3 IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4K K0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8g bm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQy Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbm5fcmVuYW1lZDI7CisK Ky0tIExvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4gIFRo ZSBjb2x1bW4gaXRzZWxmCistLSBpcyBvbWl0dGVkIGZyb20gdGhlIGNoaWxkJ3MgY29sdW1uIGxp c3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0tIHVzZXItbmFtZWQgTk9UIE5VTEwgbXVz dCBjb21lIG91dCB2aWEgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQKKy0tIGxvb3AgcmF0aGVy IHRoYW4gaW5saW5lLgorQ1JFQVRFIFRBQkxFIG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxF IG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQg Q09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX3Bh ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2No ZW1hIHByZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sg Ym9kaWVzIHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2 aWEgbmV4dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBv biB0aGUgZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVy CistLSB0aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2Rk bF94cmVmOworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZV TkNUSU9OIHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1N VVRBQkxFCisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYu dCAoCisgICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyks CisgICAgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYu Zih2YWwpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2Rk bF94cmVmLnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENBU0NBREU7CisKKy0t IHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMg d2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xs b3dlZCBieSBhIGRvdC4gIFN0cmluZworLS0gbGl0ZXJhbCB0ZXh0IGlzIG91dHB1dCB2ZXJiYXRp bSBieSB0aGUgZGVwYXJzZXIgYW5kIGlzIHVuYWZmZWN0ZWQgYnkKKy0tIHNlYXJjaF9wYXRoIG5h cnJvd2luZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3Ry LnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2Vj cmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0 YmxfZGRsX3N0ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9U IGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFw cGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9y IGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRl IHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgbWVjaGFuaXNtIGlzIHB1cmVseSBzZWFyY2hfcGF0aCBu YXJyb3dpbmc6IHRoZSBkZXBhcnNlcgorLS0gb3V0cHV0cyBhdHRyaWJ1dGUgbmFtZXMgdmVyYmF0 aW0gZnJvbSBwZ19hdHRyaWJ1dGUsIHNvIHRoZSBxdW90ZWQKKy0tIGlkZW50aWZpZXIgY29udGVu dCBpcyBuZXZlciBleGFtaW5lZCBmb3Igc2NoZW1hIHByZWZpeGVzLiAgVGhpcyBob2xkcworLS0g ZXZlbiB3aGVuIHRoZSBzY2hlbWEgbmFtZSBpcyBhIHNpbmdsZSBsZXR0ZXIuCitDUkVBVEUgU0NI RU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQs ICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Fp ZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAw KSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfcWlkIENBU0NBREU7CistLSBTYW1lIHdpdGggYSBzaG9ydCAoc2luZ2xlLWxldHRlcikgc2No ZW1hIG5hbWUgdG8gY29uZmlybSB0aGVyZSBpcyBubworLS0gbWluaW11bS1sZW5ndGggYXNzdW1w dGlvbiBpbiB0aGUgc3RyaXBwaW5nIHBhdGguCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xMTsK K0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcTEucCAoaWQgaW50LCAicGd0YmxfZGRsX3ExLndlaXJk IiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3ExLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcTEucAorICAgIChDT05TVFJBSU5UIGNo ayBDSEVDSyAoInBndGJsX2RkbF9xMS53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxf cTEucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVk ID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xMSBDQVNDQURFOworCistLSBzY2hl bWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVp cmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBv ZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0 cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJl Zml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8g YmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdU YmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBp bnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAi VF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BICJQZ1Ri bC1EZGwtUSIgQ0FTQ0FERTsKKworLS0gRXJyb3I6IG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRp b25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VMRUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNzKTsKKworQ1JFQVRFIFNFUVVFTkNFIHM7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpyZWdjbGFzcyk7CisKKy0tIE5V TEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKE5VTEwpOworCistLSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHZhbGlkYXRpb246 IGlmIHRoZSByZWZlcmVuY2VkIGluZGV4CistLSB3b3VsZCBub3QgYmUgZW1pdHRlZCAoYmVjYXVz ZSBpdHMgc291cmNlIGtpbmQgaXMgc3VwcHJlc3NlZCkgYnV0CistLSByZXBsaWNhX2lkZW50aXR5 IGl0c2VsZiB3b3VsZCBiZSwgdGhlIGZ1bmN0aW9uIHJhaXNlcyBhbiBlcnJvciBzbworLS0gdGhl IGVtaXR0ZWQgRERMIG5ldmVyIGRhbmdsZXMuICBFeGVyY2lzZSBhbGwgdGhyZWUgY29uc3RyYWlu dC1iYWNrZWQKKy0tIGZvcm1zIChQSywgVU5JUVVFLCBFWENMVVNJT04pIGFuZCBhIGJhcmUgQ1JF QVRFIFVOSVFVRSBJTkRFWCwgaW4KKy0tIGJvdGggdGhlIGV4Y2VwdC1saXN0IGFuZCBvbmx5LWxp c3Qgc2hhcGVzLgorLS0KKy0tIFBLLWJhY2tlZDogZXhjZXB0X2tpbmRzPXByaW1hcnlfa2V5IHdp dGhvdXQgZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkuCitDUkVBVEUgVEFCTEUgcmlfcGtf ZXhjbCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmlfcGtfZXhjbCBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJpX3BrX2V4Y2xfcGtleTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKKy0tIFNhbWUgY2FsbCBidXQgYWxz byBleGNsdWRpbmcgcmVwbGljYV9pZGVudGl0eSBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitE Uk9QIFRBQkxFIHJpX3BrX2V4Y2w7CisKKy0tIFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBs aWNhIGlkZW50aXR5IGluZGV4LgorQ1JFQVRFIFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9U IE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCByaV91bmlxX2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJM RSByaV91bmlxX2V4Y2w7CisKKy0tIEJhcmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCAobm8gYmFja2lu ZyBjb25zdHJhaW50KSB1c2VkIGFzIFJFUExJQ0EKKy0tIElERU5USVRZOiB0aGUgaW5kZXggaXMg ZW1pdHRlZCBieSB0aGUgImluZGV4IiBraW5kLCBzbyBleGNsdWRpbmcKKy0tICJpbmRleCIgd2l0 aG91dCBhbHNvIGV4Y2x1ZGluZyAicmVwbGljYV9pZGVudGl0eSIgbXVzdCBlcnJvci4KK0NSRUFU RSBUQUJMRSByaV9pZHhfZXhjbCAoYSBpbnQgTk9UIE5VTEwsIGIgaW50KTsKK0NSRUFURSBVTklR VUUgSU5ERVggcmlfaWR4X2V4Y2xfYV91bmlxIE9OIHJpX2lkeF9leGNsIChhKTsKK0FMVEVSIFRB QkxFIHJpX2lkeF9leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2V4Y2xf YV91bmlxOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdyZXBsaWNhX2lk ZW50aXR5J10pOworRFJPUCBUQUJMRSByaV9pZHhfZXhjbDsKKworLS0gSW5jbHVkZS1zaWRlIGFu YWxvZzogb25seV9raW5kcz1yZXBsaWNhX2lkZW50aXR5IG11c3QgaW5jbHVkZSB0aGUga2luZAor LS0gdGhhdCBlbWl0cyB0aGUgaW5kZXgsIG9yIHRoZSBmdW5jdGlvbiBlcnJvcnMuCitDUkVBVEUg VEFCTEUgcmlfb25seSAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJM RSByaV9vbmx5IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfb25seV9hX2tleTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKy0tIElu Y2x1ZGluZyBib3RoIGtpbmRzIHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWyd1bmlxdWUnLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJMRSByaV9vbmx5Owor CistLSBQZXIta2luZCBvbmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGNvdmVyYWdlLiAgRm9yIGVh Y2gga2luZCBpbiB0aGUgdm9jYWJ1bGFyeSwKKy0tIHZlcmlmeSB0aGF0IG9ubHlfa2luZHM9SyBl bWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dCBhbmQgdGhhdCBleGNlcHRfa2luZHM9SworLS0g b21pdHMganVzdCB0aGF0IGtpbmQncyBvdXRwdXQuICBLaW5kcyB3aXRoIG5vIGZpeHR1cmUgYWJv dmUgKHRyaWdnZXIsCistLSBwb2xpY3kpIGFyZSBzdGlsbCByZWNvZ25pemVkIGJ1dCBjdXJyZW50 bHkgZW1pdCBub3RoaW5nOyBvbmx5X2tpbmRzPUsKKy0tIHJldHVybnMgemVybyByb3dzIGZvciB0 aGVtLiAgRml4dHVyZXMgdXNlZDoKKy0tICAgaWR4ZDogUEsgKyB0d28gc2Vjb25kYXJ5IENSRUFU RSBJTkRFWAorLS0gICBjb25zOiBQSyArIFVOSVFVRSArIENIRUNLICsgRksgKGNvbnN0cmFpbnQt YmFja2VkKQorLS0gICBydDogICBDUkVBVEUgUlVMRQorLS0gICBzdHg6ICBDUkVBVEUgU1RBVElT VElDUworLS0gICBybHM6ICBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZCistLSAgIHJp X2Z1bGw6IFJFUExJQ0EgSURFTlRJVFkgRlVMTCAobm8gc291cmNlLWtpbmQgZGVwZW5kZW5jeSkK K0NSRUFURSBUQUJMRSBleGNsX2ZpeCAocm5nIGludDRyYW5nZSwKKyAgICBFWENMVURFIFVTSU5H IGdpc3QgKHJuZyBXSVRIICYmKSk7CisKKy0tIG9ubHlfa2luZHM9SzogZW1pdCBvbmx5IGtpbmQg SydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZXhjbHVzaW9uJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlf a2luZHMgPT4gQVJSQVlbJ3JscyddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn cmVwbGljYV9pZGVudGl0eSddKTsKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIG5vdCB5ZXQgaW1w bGVtZW50ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRf cG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ Wyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncG9saWN5J10p OworCistLSBleGNlcHRfa2luZHM9SzogZW1pdCBldmVyeXRoaW5nIGV4Y2VwdCBraW5kIEsncyBz dGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5ERVggYXJlIGV4ZXJjaXNlZCBvbiB0YWJsZXMg d2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYCistLSBzbyB0aGUgdmFsaWRhdGlv biBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlf a2V5J10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydjaGVjayddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9r aW5kcyA9PiBBUlJBWVsnZXhjbHVzaW9uJ10pOworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90 IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAv IHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndHJpZ2dlciddKTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsncG9saWN5J10pOworLS0gZXhjZXB0X2tpbmRzPXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFU RSBUQUJMRSArIE9XTkVSICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRp b25zIHBhc3NlcywgbGVhdmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd0YWJsZSddKTsKKworLS0gTXVsdGkta2luZCBjb21wb3Np dGlvbnMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJywnaW5kZXgnXSk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5JywnZm9yZWlnbl9rZXknXSk7 CistLSBEdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGlj YXRlZCBieSB0aGUKKy0tIEJpdG1hcHNldC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn aW5kZXgnLCdpbmRleCddKTsKKworRFJPUCBUQUJMRSBleGNsX2ZpeDsKKworLS0gb25seV9raW5k cz1LIG9uIGEgdGFibGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBLIG9mIHRoYXQga2luZCBpcyBh IHZhbGlkCistLSBmaWx0ZXIgYW5kIHJldHVybnMgemVybyByb3dzLiAgVGVzdGVkIHByZXZpb3Vz bHkgd2l0aCBmb3JlaWduX2tleQorLS0gb24gJ3JlZmQnOyBoZXJlIGFsc28gcnVsZSwgc3RhdGlz dGljcywgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBhbmQKKy0tIGV4Y2x1c2lvbiBvbiAnYmFzaWMn ICh3aGljaCBoYXMgb25seSBQSyArIGNvbHVtbnMpLgorU0VMRUNUIGNvdW50KCopIEFTIHJ1bGVf cm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworU0VMRUNUIGNvdW50KCopIEFT IHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKK1NFTEVD VCBjb3VudCgqKSBBUyBybHNfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CitT RUxFQ1QgY291bnQoKikgQVMgcmlfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBsaWNh X2lkZW50aXR5J10pOworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRz ID0+IEFSUkFZWydleGNsdXNpb24nXSk7CisKKy0tIElucHV0LXZhbGlkYXRpb24gZWRnZSBjYXNl cyBmb3IgdGhlIGtpbmQgYXJyYXkuICBBbGwKKy0tIG9mIHRoZXNlIHJhaXNlIGFuIGVycm9yOyB0 aGUgZnVuY3Rpb24gbmV2ZXIgcmVhY2hlcyByZWxhdGlvbiBvcGVuLgorLS0gRW1wdHkgYXJyYXk6 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlf a2luZHMgPT4gQVJSQVlbXTo6dGV4dFtdKTsKKy0tIE5VTEwgZWxlbWVudDoKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJB WVtOVUxMOjp0ZXh0XSk7CistLSBVbnJlY29nbml6ZWQga2luZDoKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVsnbm9f c3VjaF9raW5kJ10pOworLS0gU2FtZSBraW5kIHNwZWNpZmllZCB0aHJvdWdoIGJvdGggcGFyYW1l dGVycyBpcyBzdGlsbCBtdXRleC1yZWplY3RlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKKworLS0gUm91bmQtdHJpcCB2ZXJp ZmljYXRpb24uICBGb3IgZXZlcnkgdGVzdCB0YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRoZQorLS0g ZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhlIHNjaGVtYSwgcmVwbGF5IGVhY2ggdGFibGUncyBEREwg aW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIsIGFuZCBjb25maXJtIHRoYXQgcGdfZ2V0X3RhYmxlX2Rk bCBvbiB0aGUgcmVjcmVhdGVkCistLSByZWxhdGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5hbCBsaW5l LWZvci1saW5lLiAgVGhlIGZpbmFsIFNFTEVDVCBtdXN0CistLSByZXR1cm4gemVybyByb3dzLgor Q1JFQVRFIFRFTVAgVEFCTEUgcGd0YmxfZGRsX3J0X29yaWcgKG5hbWUgdGV4dCwgb3JkIGludCwg bGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHBndGJsX2RkbF9ydF9vcmlnCitTRUxFQ1QgdC5uYW1l LCBvLm9yZCwgby5saW5lCitGUk9NIChWQUxVRVMKKyAgICAgICAgKCdiYXNpYycpLCAoJ2lkX2Nv bHMnKSwgKCdpZF9jdXN0b20nKSwgKCdnZW5fY29scycpLCAoJ2dlbl92aXJ0dWFsJyksICgnc3Rv cmFnZV9jb2xzJyksCisgICAgICAgICgncmVmZCcpLCAoJ2NvbnMnKSwgKCdudWxsc19uZCcpLCAo J2lkeF9pbmMnKSwKKyAgICAgICAgKCdma19hY3RzX3RndCcpLCAoJ2ZrX2FjdHMnKSwgKCdub3Rl bmZfdGd0JyksICgnbm90ZW5mJyksICgndGVtcG9yYWxfcGsnKSwKKyAgICAgICAgKCdpZHhkJyks CisgICAgICAgICgncGFyJyksICgnY2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAgKCdwYXJ0ZWRf cmFuZ2UnKSwgKCdwYXJ0ZWRfcmFuZ2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYnKSwKKyAgICAg ICAgKCdwYXJ0ZWRfaGFzaCcpLCAoJ3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAgKCdwYXJ0ZWRf bGlzdCcpLAorICAgICAgICAoJ3J0X2xvZycpLCAoJ3J0JyksCisgICAgICAgICgnc3R4JyksICgn cmxzJyksICgncmlfZnVsbCcpLCAoJ3JpX2lkeCcpLCAoJ3VubycpCisgICAgICkgQVMgdChuYW1l KSwKKyAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0 Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ IGZhbHNlKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpOworCitETyAkJAorREVDTEFSRQor ICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0W10gOj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdp ZF9jb2xzJywgJ2lkX2N1c3RvbScsICdnZW5fY29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdl X2NvbHMnLAorICAgICAgICAncmVmZCcsICdjb25zJywgJ251bGxzX25kJywgJ2lkeF9pbmMnLAor ICAgICAgICAnZmtfYWN0c190Z3QnLCAnZmtfYWN0cycsICdub3RlbmZfdGd0JywgJ25vdGVuZics ICd0ZW1wb3JhbF9waycsCisgICAgICAgICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdh dHRvcHQnLAorICAgICAgICAncGFydGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRl ZF9yYW5nZV9kZWYnLAorICAgICAgICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisg ICAgICAgICdwYXJ0ZWRfbGlzdCcsCisgICAgICAgICdydF9sb2cnLCAncnQnLAorICAgICAgICAn c3R4JywgJ3JscycsICdyaV9mdWxsJywgJ3JpX2lkeCcsICd1bm8nCisgICAgXTsKKyAgICB0IHRl eHQ7CisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVz dCBDQVNDQURFOworICAgIENSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CisgICAgRk9SRUFD SCB0IElOIEFSUkFZIHRhYmxlcyBMT09QCisgICAgICAgIEZPUiBzdG10IElOCisgICAgICAgICAg ICBTRUxFQ1QgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnIFdIRVJFIG5hbWUgPSB0IE9SREVS IEJZIG9yZAorICAgICAgICBMT09QCisgICAgICAgICAgICBCRUdJTgorICAgICAgICAgICAgICAg IEVYRUNVVEUgc3RtdDsKKyAgICAgICAgICAgIEVYQ0VQVElPTiBXSEVOIGR1cGxpY2F0ZV90YWJs ZSBUSEVOCisgICAgICAgICAgICAgICAgTlVMTDsgIC0tIHBhcnRpdGlvbiBjaGlsZCBhbHJlYWR5 IGNyZWF0ZWQgYnkgaXRzIHBhcmVudCdzIERETAorICAgICAgICAgICAgRU5EOworICAgICAgICBF TkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKKworV0lUSCBhZnRlcl9kZGwgQVMgKAor ICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9NIChTRUxFQ1QgRElTVElO Q1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAgICAgICAgTEFURVJBTCBw Z19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBP UkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JyBBUyBr aW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZworIEVYQ0VQVAorIFNF TEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsKQor VU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxp bmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJhLWluLWNvcHknLCBuYW1l LCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVSIEJZIGtpbmQsIG5hbWUs IG9yZDsKKworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7 CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDNhMjcyMGZiNWY5Li40OWE3ODExMDUwYyAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2NDUsNiArMTY0NSw3IEBAIExpc3RlbmVy RW50cnkKIExvSW5mbwogTG9hZFN0bXQKIExvY2FsQnVmZmVyTG9va3VwRW50CitMb2NhbE5vdE51 bGxFbnRyeQogTG9jYWxQZ0JhY2tlbmRTdGF0dXMKIExvY2FsVHJhbnNhY3Rpb25JZAogTG9jYXRp b24KQEAgLTMxNDksNiArMzE1MCw3IEBAIFRhYmxlRnVuY1NjYW4KIFRhYmxlRnVuY1NjYW5TdGF0 ZQogVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCitUYWJsZURkbENvbnRleHQKIFRhYmxlTGlrZUNs YXVzZQogVGFibGVTYW1wbGVDbGF1c2UKIFRhYmxlU2NhbkRlc2MKLS0gCjIuNTEuMAoK --0000000000000234a106558d494b--