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 1wfEr7-005Lou-2j for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 10:41:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfEq6-001PNM-2K for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 10:40:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfEq5-001PND-2E for pgsql-hackers@lists.postgresql.org; Thu, 02 Jul 2026 10:40:14 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfEpx-00000001DzC-17Jr for pgsql-hackers@lists.postgresql.org; Thu, 02 Jul 2026 10:40:07 +0000 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-c125bce2294so188103566b.3 for ; Thu, 02 Jul 2026 03:40:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782988803; cv=none; d=google.com; s=arc-20260327; b=RMhutj4ygGdfVAAR499p5AsmgZ2wGQLKSrt8XEs8338bswrItS4HTfrrwWbuKX/v4k xXCpVaOm0I2r4gWjzxB1UGl13MsObXGEhoxSHdM46XEj5QDFQUaGkve3fTU/4jU+8o04 pPoTuOiNHJRL9Qp/rL0W598hYZlYccw6fKSJBj4StVXB+zPfnOtgeCEQ6XtSsB4uaawi wL4GkeKz7l+o7ktdD8seWtIFvtgnvTk0igtZ7Zpi/9iyJ9rAHETyvHGfJTpvGctHcDHy 6wc1m78g09kiWcbUOfnh+1d+dARwtpXrFT5suQ8FZ0qxJRzQe2DIV270ufvj9gq8VDkS FvsA== 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=9UFu0s5+bA67FMPH67nOxQzkqH6lt1rVJuKGV8IuFUs=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=XdfTZPDi4BZdATxpRSSlCiVJrki5quu+Uw3+rwKG/cMdfTEwVJL4hMJ++k92V96r0L Mbcoy9sdQKCU9Eq4K1T/ATpaJsAiv9OV5RhLeixW2kDwTlYiyb++nX+86ySAWUfcPyFY koalNOEugdL21wN80hLPnwvSHLDIryG1iU47Lr1r5BK5PTww8/EjMOF+fs49wFGIu0Zu 8CCOTFPd0BolijKQXKFDfl19H5rz2jfniC+rkfXxGXyZBAWYV4NMq4hYwDQlj1GIdOmb 2miK52/wVTJv6KwWei1cQwbOIjwfD6dmr4q/3queoBC60MXAdkuR6Xwpvfx9qvqQAUVY a/aQ==; 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=1782988803; x=1783593603; 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=9UFu0s5+bA67FMPH67nOxQzkqH6lt1rVJuKGV8IuFUs=; b=O5Ug0GqnUxcfRGjISwWTvgGjVyMBVMtxdhRPe0dozeF1E288tbeeXIYR1sR5kqvdYQ 9hEo+ed4fwar1D7mUHK0WjWgrnBpbQSluDJI+nA98JYvY4JEGHNXTbcHSbTs4xkHfd3y xu2sDCSbo96hgQKSEFFIQ3Q7PE15Kq/cyGsVXXiZlYF5GbO0MKhL4L2PWRU4/XASej11 f4hhVwrfI95PCs+CkVyugUIiY1B8Wxfa9XkBO/GsQC0LppdT6Qksjnspzeof6xhmaBFg mL0I4lYxT9FsGc6aAZKtbs9+M9FMwKC7ZpEykv2s37LFPj9OobFWyTjqTCT0CScY8l1Z nnIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782988803; x=1783593603; 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=9UFu0s5+bA67FMPH67nOxQzkqH6lt1rVJuKGV8IuFUs=; b=oZbL8mX/itwzSSApEdtcc3wYwK5b0YgVvKts7qdPyFKu8tHrmBdyMEl+eZRP6VAvZj MYuOIjpnBVzHmnfrWJqSzMFKBJCggxsVL1Ll5N2NGGWSEjLPTAxAkXpXYfkUEWdb49Ex GB28k5yNklmBCUP0VqqIaoMPEdwxUnvxnkp+66+EQYFMY4d8NJxb53Sx4FlLrof2c7Ma 13yyHU6sqLPTO48FN36oXW6CB1B4hUj/kb8f1F1/e8aa7Ls+ZRpNOPnaB3EkOIElw3V/ MWsMEJXiUEnq57hhRQTzGIynbMI53FQM10DBxzJbB+EfacxMJtkjAhnoSqCk8jAopLKA S7DQ== X-Gm-Message-State: AOJu0YxlGp1SUI+yMphqBpKYwuenZkoZkz4WrvuzM9hFu4winw67V3I5 5sqMZERMVd3UvzJsk/yENzr07VSUhJrAQfidPA1GeDyCa+iGwuoxLzkfcOoskAS8TR4t4KlYosg N4PRxVD03gBrmhg6QDEjGjk9fq+Xcs5QrptVRhXmK X-Gm-Gg: AfdE7clqbf1JprwuugwE4IGUDMLT2O0RMNCk4ptLxw+F4WPKcu5rgZqptCABK/jxur0 genUYDBoc8hr05VKsX3WCfF3AmEq06ZYMRWYlQztP3rnHTImDxlnK4zsFEKU62dyit3qcdfPqWy Ynd1EvmyHidvxm4Klx9W0OWcnLS2Jtr5yiIs3ZWysr/GMyE4daF/x9bgScv31rCSjvTPMIInXnd /2AD20SNh7VpHa3vIXVclKn3HWqWBOdcXjahVwN5S5Tq4jDX5b6asCcgvLTWJcT5lBCQODPkQ== X-Received: by 2002:a17:907:84b:b0:c12:4bc8:1b5b with SMTP id a640c23a62f3a-c12ae4748dbmr234235766b.7.1782988802696; Thu, 02 Jul 2026 03:40:02 -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: Thu, 2 Jul 2026 16:09:50 +0530 X-Gm-Features: AVVi8CddVxy378A2a3Y5pU1TOLwUdtQWGF51rJs0Cqem8UGcMp6r1O9q2sCpaO0 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="000000000000398b2d06559e6e44" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000398b2d06559e6e44 Content-Type: multipart/alternative; boundary="000000000000398b2c06559e6e42" --000000000000398b2c06559e6e42 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review, I have fixed the mentioned issue. The v15 patch is ready for review. On Thu, Jul 2, 2026 at 3:50=E2=80=AFAM Zsolt Parragi wrote: > I did some more testing, I noticed one more issue with self > referencing foreign keys: > > CREATE TABLE t (id int PRIMARY KEY, parent_id int REFERENCES t(id)); > SELECT pg_get_table_ddl('t'::regclass); > -- CREATE TABLE public.t (id integer NOT NULL, parent_id integer); > -- ALTER TABLE public.t OWNER TO postgres; > -- ALTER TABLE public.t ADD CONSTRAINT t_parent_id_fkey FOREIGN KEY > (parent_id) REFERENCES public.t(id); > -- ALTER TABLE public.t ADD CONSTRAINT t_pkey PRIMARY KEY (id); > > It tries to add the foreign key before the primary, and fails with > `ERROR: there is no unique constraint matching given keys for > referenced table "t"` > > There's also another issue in schema_qualified false, with partitions > in different schemas: > > CREATE SCHEMA s; > CREATE SCHEMA other; > CREATE TABLE s.pt (id int, val int) PARTITION BY RANGE (id); > CREATE TABLE other.pt_c PARTITION OF s.pt FOR VALUES FROM (0) TO (100); > SELECT pg_get_table_ddl('s.pt'::regclass, schema_qualified =3D> false); > -- CREATE TABLE pt (id integer, val integer) PARTITION BY RANGE (id); > -- ALTER TABLE pt OWNER TO postgres; > -- CREATE TABLE pt_c PARTITION OF s.pt FOR VALUES FROM (0) TO (100); > -- ALTER TABLE pt_c OWNER TO postgres; > > The second create table statement references pt as s.pt, which seems > incorrect. > It is also missing its own schema qualification, which I'm unsure if > it is wrong or not. If I interpret the documentation strictly, it > isn't the target table, so it should appear with its schema > qualification? > > > --000000000000398b2c06559e6e42 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the review, I have fixed the mentioned issue.The v15 patch is ready for review.

On Thu, Jul 2, 20= 26 at 3:50=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
I did some more testing, I noticed one m= ore issue with self
referencing foreign keys:

CREATE TABLE t (id int PRIMARY KEY, parent_id int REFERENCES t(id));
SELECT pg_get_table_ddl('t'::regclass);
-- CREATE TABLE public.t (id integer NOT NULL, parent_id integer);
-- ALTER TABLE public.t OWNER TO postgres;
-- ALTER TABLE public.t ADD CONSTRAINT t_parent_id_fkey FOREIGN KEY
(parent_id) REFERENCES public.t(id);
-- ALTER TABLE public.t ADD CONSTRAINT t_pkey PRIMARY KEY (id);

It tries to add the foreign key before the primary, and fails with
`ERROR:=C2=A0 there is no unique constraint matching given keys for
referenced table "t"`

There's also another issue in schema_qualified false, with partitions in different schemas:

CREATE SCHEMA s;
CREATE SCHEMA other;
CREATE TABLE s= .pt (id int, val int) PARTITION BY RANGE (id);
CREATE TABLE other.pt_c PARTITION OF s.pt FOR VALUES FROM (0) TO (100);
SELECT pg_get_table_ddl('s.pt'::regclass, schema_qualified =3D> false); -- CREATE TABLE pt (id integer, val integer) PARTITION BY RANGE (id);
-- ALTER TABLE pt OWNER TO postgres;
-- CREATE TABLE pt_c PARTITION OF s.pt FOR VALUES FROM (0) TO (100);
-- ALTER TABLE pt_c OWNER TO postgres;

The second create table statement references pt as s.pt, which seems incorrect.
It is also missing its own schema qualification, which I'm unsure if it is wrong or not. If I interpret the documentation strictly, it
isn't the target table, so it should appear with its schema
qualification?


--000000000000398b2c06559e6e42-- --000000000000398b2d06559e6e44 Content-Type: application/octet-stream; name="v15-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v15-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3dhiu10 RnJvbSBjMzAwMTcyZGJiNTIyOThlMzlkMzYyYWNmNjZmOGU5OTNmZDE1NWRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxNV0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC 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 MTQ2ICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDE5 OTIgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTMxNiArKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSAgICAgICAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3Rh YmxlX2RkbC5zcWwgICAgIHwgIDc2OCArKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgICAyICsKIDEzIGZpbGVzIGNoYW5nZWQsIDQ0MzUgaW5z ZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbAppbmRleCA2OWVmMzg1N2NmYS4uNTVjNmI4NzMyNDAgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1 bmMtaW5mby5zZ21sCkBAIC0zOTYwLDYgKzM5NjAsMTUyIEBAIGFjbCAgICAgIHwge3Bvc3RncmVz 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 c3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgorICAgICAgICBGb3JlaWdu LWtleSBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGVtaXR0ZWQgYWZ0ZXIgYWxsIG90aGVyCisgICAg ICAgIGNvbnN0cmFpbnRzIHNvIHRoYXQgc2VsZi1yZWZlcmVuY2luZyBmb3JlaWduIGtleXMgKHdo ZXJlIHRoZQorICAgICAgICByZWZlcmVuY2VkIHByaW1hcnkgb3IgdW5pcXVlIGtleSBpcyBvbiB0 aGUgc2FtZSB0YWJsZSkgY2FuIGJlCisgICAgICAgIGFkZGVkIG9uY2UgdGhhdCBrZXkgYWxyZWFk eSBleGlzdHMuCisgICAgICAgIFdoZW4gPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gaXMg dHJ1ZSwgdGhlIG91dHB1dCBpcworICAgICAgICBwcmV0dHktcHJpbnRlZC4gIFdoZW4gPHBhcmFt ZXRlcj5vd25lcjwvcGFyYW1ldGVyPiBpcyBmYWxzZSwgdGhlCisgICAgICAgIDxjb21tYW5kPkFM VEVSIFRBQkxFIC4uLiBPV05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50IGlzIG9taXR0ZWQuCisg ICAgICAgIFdoZW4gPHBhcmFtZXRlcj50YWJsZXNwYWNlPC9wYXJhbWV0ZXI+IGlzIGZhbHNlLCB0 aGUKKyAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0 ZWQgZnJvbSB0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0 ZW1lbnQuICBUaGUKKyAgICAgICAgPHBhcmFtZXRlcj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+IGFu ZCA8cGFyYW1ldGVyPmV4Y2VwdF9raW5kczwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXJz IGRlc2NyaWJlZCBiZWxvdyBjb250cm9sIHdoaWNoIG9iamVjdCBjbGFzc2VzIGFyZSBlbWl0dGVk LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0ZXI+ b25seV9raW5kczwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5leGNlcHRfa2luZHM8L3BhcmFt ZXRlcj4KKyAgICAgICAgcGFyYW1ldGVycyBlYWNoIHRha2UgYSB0ZXh0IGFycmF5IG9mIG9iamVj dC1jbGFzcyBraW5kIG5hbWVzCisgICAgICAgIGFuZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIChz cGVjaWZ5aW5nIGJvdGggcmFpc2VzIGFuCisgICAgICAgIGVycm9yKS4gIFdoZW4gPHBhcmFtZXRl cj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+IGlzIHNldCwgb25seSB0aGUKKyAgICAgICAgbGlzdGVk IGtpbmRzIGFyZSBlbWl0dGVkOyB3aGVuIDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0 ZXI+IGlzCisgICAgICAgIHNldCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhjZXB0PC9lbXBoYXNp cz4gdGhlIGxpc3RlZCBvbmVzIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVuIG5laXRoZXIgaXMg c2V0ICh0aGUgZGVmYXVsdCksIGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1pdHRlZC4gIExlYWRp bmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gZWFjaCBhcnJheSBlbGVtZW50CisgICAgICAg IGlzIGlnbm9yZWQgYW5kIG1hdGNoaW5nIGlzIGNhc2UtaW5zZW5zaXRpdmU7IGFuIHVucmVjb2du aXplZAorICAgICAgICBraW5kIG5hbWUgcmFpc2VzIGFuIGVycm9yLgorICAgICAgICBUaGUga2lu ZCB2b2NhYnVsYXJ5IGlzCisgICAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRlcmFsPiwKKyAgICAg ICAgPGxpdGVyYWw+aW5kZXg8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5wcmltYXJ5X2tl eTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAgICAg IDxsaXRlcmFsPmNoZWNrPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Zm9yZWlnbl9rZXk8 L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVyYWw+LAorICAgICAg ICA8bGl0ZXJhbD5ydWxlPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+c3RhdGlzdGljczwv bGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnRyaWdnZXI8L2xpdGVyYWw+LAorICAgICAgICA8 bGl0ZXJhbD5wb2xpY3k8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5ybHM8L2xpdGVyYWw+ ICh0aGUKKyAgICAgICAgPGNvbW1hbmQ+RU5BQkxFPC9jb21tYW5kPi88Y29tbWFuZD5GT1JDRSBS T1cgTEVWRUwgU0VDVVJJVFk8L2NvbW1hbmQ+CisgICAgICAgIHRvZ2dsZXMpLAorICAgICAgICA8 bGl0ZXJhbD5yZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPiwgYW5kCisgICAgICAgIDxsaXRlcmFs PnBhcnRpdGlvbjwvbGl0ZXJhbD4gKHRoZSBEREwgZm9yIGVhY2ggZGlyZWN0CisgICAgICAgIHBh cnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCkuCisgICAgICAgIE5v dGUgdGhhdCA8bGl0ZXJhbD50cmlnZ2VyPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+cG9saWN5PC9s aXRlcmFsPgorICAgICAgICBhcmUgYWNjZXB0ZWQgaW4gdGhlIHZvY2FidWxhcnkgYnV0IGN1cnJl bnRseSBwcm9kdWNlIG5vIG91dHB1dDsKKyAgICAgICAgdGhleSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1 dHVyZSB1c2Ugd2hlbiBzdGFuZGFsb25lCisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfdHJpZ2dl cl9kZGw8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lfZGRs PC9mdW5jdGlvbj4gaGVscGVycyBiZWNvbWUgYXZhaWxhYmxlLiAgVGhlCisgICAgICAgIDxsaXRl cmFsPnRhYmxlPC9saXRlcmFsPiBraW5kIGdyb3VwcyB0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JF QVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0ZW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAg cmVsYXRlZCBwZXItdGFibGUgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+IHBhc3NlczoK KyAgICAgICAgPGNvbW1hbmQ+T1dORVIgVE88L2NvbW1hbmQ+LCBjaGlsZC1kZWZhdWx0CisgICAg ICAgIDxjb21tYW5kPlNFVCBERUZBVUxUPC9jb21tYW5kPiwgYW5kIHBlci1jb2x1bW4KKyAgICAg ICAgPGNvbW1hbmQ+U0VUICg8cmVwbGFjZWFibGU+YXR0b3B0aW9uczwvcmVwbGFjZWFibGU+KTwv Y29tbWFuZD4uCisgICAgICAgIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFsPiBjb25zdHJhaW50 cyBhcmUgbm90IHBhcnQgb2YgdGhlCisgICAgICAgIHZvY2FidWxhcnk7IHRoZXkgYXJlIGFsd2F5 cyBlbWl0dGVkIGFzIHBhcnQgb2YgdGhlIHRhYmxlIHRvCisgICAgICAgIGF2b2lkIHByb2R1Y2lu ZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0CisgICAgICAgIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IHZhbHVlcyB0aGUgc291cmNlIHdvdWxkIGhhdmUgcmVqZWN0ZWQuCisgICAgICAgIEZv ciBleGFtcGxlLCB0aGUgc2Vjb25kIHBhc3Mgb2YgYSB0d28tcGFzcyBzY2hlbWEgY2xvbmUgdGhh dAorICAgICAgICBhZGRzIGNyb3NzLXRhYmxlIGZvcmVpZ24ga2V5cyBhZnRlciBkYXRhIGhhcyBs b2FkZWQgY2FuIGJlCisgICAgICAgIHdyaXR0ZW4gYXMKKyAgICAgICAgPGxpdGVyYWw+b25seV9r aW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXTwvbGl0ZXJhbD4sIGFuZCB0aGUKKyAgICAgICAg cHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkgYnV0IGRyb3BzIGV2 ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4gYXMKKyAgICAgICAg PGxpdGVyYWw+ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVpZ25f a2V5JywnZXhjbHVzaW9uJ108L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgV2hlbiB0aGUgdGFibGUgaGFzCisgICAgICAgIDxsaXRlcmFsPlJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVg8L2xpdGVyYWw+IGFuZCB0aGUKKyAgICAgICAgPGxpdGVyYWw+ cmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4ga2luZCBpcyBpbiB0aGUgYWN0aXZlCisgICAgICAg IGZpbHRlciwgdGhlIGtpbmQgdGhhdCBlbWl0cyB0aGUgcmVmZXJlbmNlZCBpbmRleAorICAgICAg ICAoPGxpdGVyYWw+cHJpbWFyeV9rZXk8L2xpdGVyYWw+LCA8bGl0ZXJhbD51bmlxdWU8L2xpdGVy YWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5p bmRleDwvbGl0ZXJhbD4pIG11c3QKKyAgICAgICAgYWxzbyBiZSBpbiB0aGUgZmlsdGVyLiAgT3Ro ZXJ3aXNlIHRoZSBlbWl0dGVkCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYPC9jb21tYW5kPgorICAgICAgICB3b3VsZCByZWZlcmVu Y2UgYW4gaW5kZXggdGhlIHNhbWUgRERMIG5ldmVyIHByb2R1Y2VkLCBhbmQgdGhlCisgICAgICAg IGZ1bmN0aW9uIHJlcG9ydHMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFueSBzdGF0ZW1lbnRz LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0ZXI+ c2NoZW1hX3F1YWxpZmllZDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgKGRlZmF1bHQKKyAgICAgICAg PGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4pIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHRhcmdldCB0YWJs ZSdzIG93bgorICAgICAgICBzY2hlbWEgaXMgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBEREwu ICBXaGVuIHNldCB0bworICAgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSB0YWJs ZSBuYW1lIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQKKyAgICAgICAgaW4gdGhlIDxjb21tYW5kPkNS RUFURSBUQUJMRTwvY29tbWFuZD4gYW5kIGV2ZXJ5IHN1YnNlcXVlbnQKKyAgICAgICAgPGNvbW1h bmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+ LAorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgUlVMRTwvY29tbWFuZD4sIGFuZAorICAgICAgICA8 Y29tbWFuZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4gc3RhdGVtZW50LiAgUmVmZXJlbmNl cyB0bworICAgICAgICBvYmplY3RzIGluIHRoZSBzYW1lIHNjaGVtYSBhcyB0aGUgdGFyZ2V0IHRh YmxlIChpbmhlcml0YW5jZQorICAgICAgICBwYXJlbnRzLCBwYXJ0aXRpb24gcGFyZW50cywgaWRl bnRpdHkgc2VxdWVuY2VzLCBhbmQgYW55CisgICAgICAgIHNhbWUtc2NoZW1hIG9iamVjdCB0aGUg ZGVwYXJzZSBoZWxwZXJzIGhhcHBlbiB0byBtZW50aW9uKSBhcmUKKyAgICAgICAgYWxzbyBlbWl0 dGVkIHVucXVhbGlmaWVkLCBzbyB0aGUgc2NyaXB0IGNhbiBiZSByZXBsYXllZCB1bmRlciBhCisg ICAgICAgIGRpZmZlcmVudCA8dmFybmFtZT5zZWFyY2hfcGF0aDwvdmFybmFtZT4gdG8gcmVjcmVh dGUgdGhlIHRhYmxlCisgICAgICAgIGluIGFub3RoZXIgc2NoZW1hLiAgQ3Jvc3Mtc2NoZW1hIHJl ZmVyZW5jZXMgKGZvciBleGFtcGxlIGEKKyAgICAgICAgZm9yZWlnbiBrZXkgdGFyZ2V0IGluIGEg ZGlmZmVyZW50IHNjaGVtYSkgcmVtYWluIHF1YWxpZmllZCBmb3IKKyAgICAgICAgY29ycmVjdG5l c3MuICBQYXJ0aXRpb24gY2hpbGRyZW4gdGhhdCByZXNpZGUgaW4gYSBkaWZmZXJlbnQKKyAgICAg ICAgc2NoZW1hIHRoYW4gdGhlIHRhcmdldCB0YWJsZSBhcmUgYWx3YXlzIGVtaXR0ZWQgd2l0aCBm dWxsIHNjaGVtYQorICAgICAgICBxdWFsaWZpY2F0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwYXJh bWV0ZXIsIGJlY2F1c2UgdGhlIG91dHB1dAorICAgICAgICB3b3VsZCBvdGhlcndpc2UgcGxhY2Ug dGhlIGNoaWxkIGluIHRoZSB3cm9uZyBzY2hlbWEgd2hlbgorICAgICAgICByZXBsYXllZC4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIEFsbCB0aHJlZSBmb3JtcyBvZiA8 Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgIHRo ZSBvcmRpbmFyeSBjb2x1bW4tbGlzdCBmb3JtLCB0aGUgdHlwZWQtdGFibGUgZm9ybQorICAgICAg ICAoPGxpdGVyYWw+T0YgPHJlcGxhY2VhYmxlPnR5cGVfbmFtZTwvcmVwbGFjZWFibGU+PC9saXRl cmFsPiwgd2l0aAorICAgICAgICBwZXItY29sdW1uIDxsaXRlcmFsPldJVEggT1BUSU9OUzwvbGl0 ZXJhbD4gb3ZlcnJpZGVzIGZvciBsb2NhbAorICAgICAgICBkZWZhdWx0cywgPGxpdGVyYWw+Tk9U IE5VTEw8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+Q0hFQ0s8L2xpdGVyYWw+CisgICAgICAgIGNv bnN0cmFpbnRzKSwgYW5kIHRoZSA8bGl0ZXJhbD5QQVJUSVRJT04gT0Y8L2xpdGVyYWw+IGZvcm0u CisgICAgICAgIDxsaXRlcmFsPlRFTVBPUkFSWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPlVOTE9H R0VEPC9saXRlcmFsPgorICAgICAgICBwZXJzaXN0ZW5jZSBtb2RlcyBhcmUgZW1pdHRlZCBmcm9t CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5yZWxwZXJzaXN0ZW5jZTwvc3RydWN0ZmllbGQ+LiAgRm9y IHRlbXBvcmFyeSB0YWJsZXMKKyAgICAgICAgcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCBzZXNz aW9uLCB0aGUKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIERFTEVURSBST1dTPC9saXRlcmFs PiBhbmQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIERST1A8L2xpdGVyYWw+IGNsYXVzZXMg YXJlIGVtaXR0ZWQ7IHRoZSBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFsPk9OIENPTU1JVCBQUkVT RVJWRSBST1dTPC9saXRlcmFsPiBpcyBvbWl0dGVkLgorICAgICAgIDwvcGFyYT48L2VudHJ5Pgor ICAgICAgPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IDRiOTgwMmFhZmNjLi44OTcxNTFiZDZkMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYwpAQCAtMjM2LDYgKzIzNiw5OSBAQCBmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0X2Rl dGFjaGVkLAogfQogCiAKKy8qCisgKiBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMKKyAqCisgKiBS ZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHRoZSBPSURzIG9mIGFsbCByZWxhdGlvbnMgdGhhdCB0 aGUgcmVsYXRpb24gd2l0aAorICogT0lEICdyZWxpZCcgaW5oZXJpdHMgKmRpcmVjdGx5KiBmcm9t LCBpbiBpbmhzZXFubyBvcmRlciAodGhlIG9yZGVyIGluIHdoaWNoCisgKiB0aGV5IHNob3VsZCBh cHBlYXIgaW4gYW4gSU5IRVJJVFMgY2xhdXNlKS4KKyAqCisgKiBUaGUgc3BlY2lmaWVkIGxvY2sg dHlwZSBpcyBhY3F1aXJlZCBvbiBlYWNoIHBhcmVudCByZWxhdGlvbiAoYnV0IG5vdCBvbiB0aGUK KyAqIGdpdmVuIHJlbDsgY2FsbGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgbG9ja2VkIGl0KS4gIElm IGxvY2ttb2RlIGlzIE5vTG9jaworICogdGhlbiBubyBsb2NrcyBhcmUgYWNxdWlyZWQsIGJ1dCBj YWxsZXIgbXVzdCBiZXdhcmUgb2YgcmFjZSBjb25kaXRpb25zCisgKiBhZ2FpbnN0IHBvc3NpYmxl IERST1BzIG9mIHBhcmVudCByZWxhdGlvbnMuCisgKgorICogUGFydGl0aW9uIGNoaWxkcmVuIGFs c28gaGF2ZSBhIHBnX2luaGVyaXRzIGVudHJ5IHBvaW50aW5nIHRvIHRoZQorICogcGFydGl0aW9u ZWQgcGFyZW50OyBjYWxsZXJzIHRoYXQgZGlzdGluZ3Vpc2ggSU5IRVJJVFMgZnJvbSBQQVJUSVRJ T04gT0YKKyAqIG11c3QgY2hlY2sgcmVsaXNwYXJ0aXRpb24gdGhlbXNlbHZlcy4KKyAqLworTGlz dCAqCitmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9k ZSkKK3sKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCVJlbGF0aW9uCXJlbGF0aW9uOworCVN5c1Nj YW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5WzFdOworCUhlYXBUdXBsZQlpbmhlcml0c1R1 cGxlOworCU9pZAkJCWluaHBhcmVudDsKKwlPaWQJCSAgICpvaWRhcnI7CisJaW50CQkJbWF4b2lk cywKKwkJCQludW1vaWRzLAorCQkJCWk7CisKKwkvKgorCSAqIFNjYW4gcGdfaW5oZXJpdHMgdmlh IHRoZSAoaW5ocmVsaWQsIGluaHNlcW5vKSBpbmRleCBzbyB0aGF0IHRoZSByb3dzCisJICogY29t ZSBvdXQgaW4gaW5oc2Vxbm8gb3JkZXIsIHdoaWNoIGlzIHRoZSBvcmRlciByZXF1aXJlZCBmb3Ig dGhlCisJICogSU5IRVJJVFMgY2xhdXNlLgorCSAqLworCW1heG9pZHMgPSA4OworCW9pZGFyciA9 IChPaWQgKikgcGFsbG9jKG1heG9pZHMgKiBzaXplb2YoT2lkKSk7CisJbnVtb2lkcyA9IDA7CisK KwlyZWxhdGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJl bGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdl dERhdHVtKHJlbGlkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHJlbGF0aW9uLCBJ bmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsK KworCXdoaWxlICgoaW5oZXJpdHNUdXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpICE9IE5V TEwpCisJeworCQlpbmhwYXJlbnQgPSAoKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVChpbmhl cml0c1R1cGxlKSktPmluaHBhcmVudDsKKwkJaWYgKG51bW9pZHMgPj0gbWF4b2lkcykKKwkJewor CQkJbWF4b2lkcyAqPSAyOworCQkJb2lkYXJyID0gKE9pZCAqKSByZXBhbGxvYyhvaWRhcnIsIG1h eG9pZHMgKiBzaXplb2YoT2lkKSk7CisJCX0KKwkJb2lkYXJyW251bW9pZHMrK10gPSBpbmhwYXJl bnQ7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKworCXRhYmxlX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBBY3F1aXJlIGxvY2tzIGFuZCBidWls ZCB0aGUgcmVzdWx0IGxpc3QuICBVbmxpa2UKKwkgKiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVu IHdlIGRvICpub3QqIHNvcnQgYnkgT0lEOiBjYWxsZXJzIG5lZWQgdGhlCisJICogc2Vxbm8tb3Jk ZXJlZCB0cmF2ZXJzYWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bW9pZHM7IGkrKykKKwl7 CisJCWluaHBhcmVudCA9IG9pZGFycltpXTsKKworCQlpZiAobG9ja21vZGUgIT0gTm9Mb2NrKQor CQl7CisJCQlMb2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisKKwkJCWlmICgh U2VhcmNoU3lzQ2FjaGVFeGlzdHMxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmhwYXJlbnQp KSkKKwkJCXsKKwkJCQlVbmxvY2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKwkJ CQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kX29pZChsaXN0LCBpbmhw YXJlbnQpOworCX0KKworCXBmcmVlKG9pZGFycik7CisKKwlyZXR1cm4gbGlzdDsKK30KKworCiAv KgogICogZmluZF9hbGxfaW5oZXJpdG9ycyAtCiAgKgkJUmV0dXJucyBhIGxpc3Qgb2YgcmVsYXRp b24gT0lEcyBpbmNsdWRpbmcgdGhlIGdpdmVuIHJlbCBwbHVzCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCmluZGV4IDk1YWJhZjQ4OTBjLi4wNmFmYTY4MTFlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKQEAgLTc0Niw3ICs3NDYsNiBAQCBzdGF0aWMgT2JqZWN0QWRkcmVzcyBBVEV4ZWNTZXRD b21wcmVzc2lvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpjb2x1bW4s IE5vZGUgKm5ld1ZhbHVlLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKIHN0YXRpYyB2b2lkIGluZGV4 X2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKTsKLXN0 YXRpYyBjb25zdCBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKIAogc3RhdGljIHZvaWQgUmFu Z2VWYXJDYWxsYmFja0ZvckRyb3BSZWxhdGlvbihjb25zdCBSYW5nZVZhciAqcmVsLCBPaWQgcmVs T2lkLAogCQkJCQkJCQkJCQlPaWQgb2xkUmVsT2lkLCB2b2lkICphcmcpOwpAQCAtMjUyNCw3ICsy NTIzLDcgQEAgdHJ1bmNhdGVfY2hlY2tfYWN0aXZpdHkoUmVsYXRpb24gcmVsKQogICogc3RvcmFn ZV9uYW1lCiAgKgkgIHJldHVybnMgdGhlIG5hbWUgY29ycmVzcG9uZGluZyB0byBhIHR5cHN0b3Jh Z2UvYXR0c3RvcmFnZSBlbnVtIHZhbHVlCiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK2NvbnN0 IGNoYXIgKgogc3RvcmFnZV9uYW1lKGNoYXIgYykKIHsKIAlzd2l0Y2ggKGMpCkBAIC0xOTgzNyw2 ICsxOTgzNiwzMyBAQCByZW1vdmVfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpCiAJfQogfQog CisvKgorICogTG9vayB1cCB0aGUgcmVnaXN0ZXJlZCBPTiBDT01NSVQgYWN0aW9uIGZvciBhIHJl bGF0aW9uLgorICoKKyAqIFJldHVybnMgT05DT01NSVRfTk9PUCB3aGVuIG5vdGhpbmcgd2FzIHJl Z2lzdGVyZWQsIHdoaWNoIGFsc28gY292ZXJzCisgKiB0ZW1wb3JhcnkgdGFibGVzIGNyZWF0ZWQg d2l0aCB0aGUgZGVmYXVsdCBPTiBDT01NSVQgUFJFU0VSVkUgUk9XUworICogYmVoYXZpb3IgKHJl Z2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oKSBza2lwcyB0aG9zZSwgc2luY2Ugbm8gYWN0aW9uIGlz CisgKiBuZWVkZWQgYXQgY29tbWl0KS4gIEVudHJpZXMgbWFya2VkIGZvciBkZWxldGlvbiBpbiB0 aGUgY3VycmVudAorICogdHJhbnNhY3Rpb24gYXJlIGlnbm9yZWQuCisgKi8KK09uQ29tbWl0QWN0 aW9uCitnZXRfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpCit7CisJTGlzdENlbGwgICAqbDsK KworCWZvcmVhY2gobCwgb25fY29tbWl0cykKKwl7CisJCU9uQ29tbWl0SXRlbSAqb2MgPSAoT25D b21taXRJdGVtICopIGxmaXJzdChsKTsKKworCQlpZiAob2MtPnJlbGlkICE9IHJlbGlkKQorCQkJ Y29udGludWU7CisJCWlmIChvYy0+ZGVsZXRpbmdfc3ViaWQgIT0gSW52YWxpZFN1YlRyYW5zYWN0 aW9uSWQpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIG9jLT5vbmNvbW1pdDsKKwl9CisJcmV0dXJu IE9OQ09NTUlUX05PT1A7Cit9CisKIC8qCiAgKiBQZXJmb3JtIE9OIENPTU1JVCBhY3Rpb25zLgog ICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggYTcwZjFjMjg2NTUuLjcyMTBhNjM1M2U2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBUaGlz IGZpbGUgY29udGFpbnMgdGhlIHBnX2dldF8qX2RkbCBmYW1pbHkgb2YgZnVuY3Rpb25zIHRoYXQg Z2VuZXJhdGUKICAqIERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRlIGRhdGFiYXNlIG9iamVjdHMg c3VjaCBhcyByb2xlcywgdGFibGVzcGFjZXMsCi0gKiBhbmQgZGF0YWJhc2VzLCBhbG9uZyB3aXRo IGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igb3B0aW9uIHBhcnNpbmcgYW5kCisgKiBkYXRhYmFz ZXMsIGFuZCB0YWJsZXMsIGFsb25nIHdpdGggY29tbW9uIGluZnJhc3RydWN0dXJlIGZvcgogICog cHJldHR5LXByaW50aW5nLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtMjEsMzAgKzIxLDg5IEBA CiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9j b21wcmVzc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhp ZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RiX3JvbGVf c2V0dGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICNp bmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCi0jaW5jbHVkZSAiY29tbW9uL3JlbHBhdGgu aCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGls cy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMv ZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxz L2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgotI2luY2x1ZGUgInV0aWxzL3Bn X2xvY2FsZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3J1bGV1 dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdGlt ZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCisvKgorICogT2JqZWN0LWNs YXNzIGtpbmRzIHRoYXQgdGhlIG9ubHkgLyBleGNlcHQgb3B0aW9ucyBvbgorICogcGdfZ2V0X3Rh YmxlX2RkbCBjYW4gZmlsdGVyIG9uLiAgTWVtYmVycyBhcmUgc3RvcmVkIGFzIGludGVnZXJzIGlu IGEKKyAqIEJpdG1hcHNldCBvbiBUYWJsZURkbENvbnRleHQuICBLZWVwIHRhYmxlX2RkbF9raW5k X25hbWVzW10gaW4gc3luYworICogd2l0aCB0aGUgb3JkZXIgb2YgYWRkaXRpb25zIGhlcmUuCisg Ki8KK3R5cGVkZWYgZW51bSBUYWJsZURkbEtpbmQKK3sKKwlUQUJMRV9ERExfS0lORF9UQUJMRSwK KwlUQUJMRV9ERExfS0lORF9JTkRFWCwKKwlUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSwKKwlU QUJMRV9ERExfS0lORF9VTklRVUUsCisJVEFCTEVfRERMX0tJTkRfQ0hFQ0ssCisJVEFCTEVfRERM X0tJTkRfRk9SRUlHTl9LRVksCisJVEFCTEVfRERMX0tJTkRfRVhDTFVTSU9OLAorCVRBQkxFX0RE TF9LSU5EX1JVTEUsCisJVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUywKKwlUQUJMRV9ERExfS0lO RF9UUklHR0VSLAorCVRBQkxFX0RETF9LSU5EX1BPTElDWSwKKwlUQUJMRV9ERExfS0lORF9STFMs CisJVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWSwKKwlUQUJMRV9ERExfS0lORF9QQVJU SVRJT04sCit9CQkJVGFibGVEZGxLaW5kOworCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisJY29u c3QgY2hhciAqbmFtZTsKKwlUYWJsZURkbEtpbmQga2luZDsKK30JCQl0YWJsZV9kZGxfa2luZF9u YW1lc1tdID0KK3sKKwl7InRhYmxlIiwgVEFCTEVfRERMX0tJTkRfVEFCTEV9LAorCXsiaW5kZXgi LCBUQUJMRV9ERExfS0lORF9JTkRFWH0sCisJeyJwcmltYXJ5X2tleSIsIFRBQkxFX0RETF9LSU5E X1BSSU1BUllfS0VZfSwKKwl7InVuaXF1ZSIsIFRBQkxFX0RETF9LSU5EX1VOSVFVRX0sCisJeyJj aGVjayIsIFRBQkxFX0RETF9LSU5EX0NIRUNLfSwKKwl7ImZvcmVpZ25fa2V5IiwgVEFCTEVfRERM X0tJTkRfRk9SRUlHTl9LRVl9LAorCXsiZXhjbHVzaW9uIiwgVEFCTEVfRERMX0tJTkRfRVhDTFVT SU9OfSwKKwl7InJ1bGUiLCBUQUJMRV9ERExfS0lORF9SVUxFfSwKKwl7InN0YXRpc3RpY3MiLCBU QUJMRV9ERExfS0lORF9TVEFUSVNUSUNTfSwKKwl7InRyaWdnZXIiLCBUQUJMRV9ERExfS0lORF9U UklHR0VSfSwKKwl7InBvbGljeSIsIFRBQkxFX0RETF9LSU5EX1BPTElDWX0sCisJeyJybHMiLCBU QUJMRV9ERExfS0lORF9STFN9LAorCXsicmVwbGljYV9pZGVudGl0eSIsIFRBQkxFX0RETF9LSU5E X1JFUExJQ0FfSURFTlRJVFl9LAorCXsicGFydGl0aW9uIiwgVEFCTEVfRERMX0tJTkRfUEFSVElU SU9OfSwKK307CisKK3N0YXRpYyBCaXRtYXBzZXQgKnBhcnNlX2tpbmRfYXJyYXkoY29uc3QgY2hh ciAqcGFyYW1uYW1lLCBBcnJheVR5cGUgKmFycik7CiBzdGF0aWMgdm9pZCBhcHBlbmRfZGRsX29w dGlvbihTdHJpbmdJbmZvIGJ1ZiwgYm9vbCBwcmV0dHksIGludCBpbmRlbnQsCiAJCQkJCQkJICBj b25zdCBjaGFyICpmbXQsIC4uLikKIAkJCXBnX2F0dHJpYnV0ZV9wcmludGYoNCwgNSk7CkBAIC01 Nyw2ICsxMTYsMTgzIEBAIHN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCk7CiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2Rh dGFiYXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBi b29sIG5vX293bmVyLCBib29sIG5vX3RhYmxlc3BhY2UpOwogCisvKgorICogUGVyLWNvbHVtbiBj YWNoZSBvZiBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQnVpbHQgb25j ZQorICogYnkgY29sbGVjdF9sb2NhbF9ub3RfbnVsbCgpIGFuZCBjb25zdWx0ZWQgYnkgdGhlIGNv bHVtbi1lbWl0IGhlbHBlcnMKKyAqIGFuZCB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29w LiAgRW50cmllcyB3aXRoIGNvbm9pZCA9PSBJbnZhbGlkT2lkCisgKiBtZWFuIHRoZSBjb2x1bW4g aGFzIG5vIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFpbnQgcm93IGluIHBnX2NvbnN0cmFpbnQKKyAq ICh0aGUgY29sdW1uIG1heSBzdGlsbCBoYXZlIGF0dG5vdG51bGw9dHJ1ZSBvbiBhIHByZS1QRy0x OC11cGdyYWRlZAorICogY2F0YWxvZywgaW4gd2hpY2ggY2FzZSBlbWl0IHBsYWluIGlubGluZSBO T1QgTlVMTCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IExvY2FsTm90TnVsbEVudHJ5Cit7CisJT2lk CQkJY29ub2lkOworCWNoYXIJICAgKm5hbWU7CisJYm9vbAkJaXNfYXV0bzsJCS8qIG1hdGNoZXMg Ijx0YWJsZT5fPGNvbD5fbm90X251bGwiICovCisJYm9vbAkJbm9faW5oZXJpdDsKK30JCQlMb2Nh bE5vdE51bGxFbnRyeTsKKworLyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdo IHRoZSBwZXItcGFzcyBoZWxwZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVk IG9wdGlvbiBmbGFncykgYXJlIGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dl dF90YWJsZV9kZGxfaW50ZXJuYWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIu ICBEZXJpdmVkCisgKiBmaWVsZHMgKHF1YWxuYW1lLCBubl9lbnRyaWVzLCBza2lwX25vdG51bGxf b2lkcykgYXJlIGNvbXB1dGVkIG9uY2UKKyAqIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBhcHBl bmRzIHRvIGN0eC0+YnVmIGFuZCBwdXNoZXMgdGhlIGZpbmlzaGVkCisgKiBzdGF0ZW1lbnQgb250 byBjdHgtPnN0YXRlbWVudHMgdmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IFRhYmxlRGRsQ29udGV4dAoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwlib29s CQlwcmV0dHk7CisJYm9vbAkJbm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwlib29s CQlzY2hlbWFfcXVhbGlmaWVkOworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5nLiAg SWYgb25seV9raW5kcyBpcyBub24tTlVMTCwgb25seSB0aGUKKwkgKiBraW5kcyBpbiB0aGF0IHNl dCBhcmUgZW1pdHRlZDsgaWYgZXhjZXB0X2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBraW5k cyAqZXhjZXB0KiB0aG9zZSBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUgTlVM TCwKKwkgKiBldmVyeSBraW5kIGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28gYXJl IG11dHVhbGx5CisJICogZXhjbHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhlIFNS RiBlbnRyeSByZWplY3RzCisJICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBzZXQg ICpvbmx5X2tpbmRzOworCUJpdG1hcHNldCAgKmV4Y2VwdF9raW5kczsKKworCS8qIERlcml2ZWQg ZHVyaW5nIHNldHVwICovCisJT2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVhbG5h bWU7CisJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7IC8qID49IDAgaWYgd2UgbmFycm93ZWQgc2VhcmNo X3BhdGggKi8KKwlMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllczsKKwlMaXN0CSAgICpza2lw X25vdG51bGxfb2lkczsKKworCS8qIE11dGFibGUgd29ya2luZyBzdGF0ZSAqLworCVN0cmluZ0lu Zm9EYXRhIGJ1ZjsKKwlMaXN0CSAgICpzdGF0ZW1lbnRzOworfQkJCVRhYmxlRGRsQ29udGV4dDsK Kworc3RhdGljIExpc3QgKnBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0 ICpjdHgpOworc3RhdGljIGJvb2wgaXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRl eHQgKmN0eCwgVGFibGVEZGxLaW5kIGtpbmQpOworc3RhdGljIHZvaWQgYXBwZW5kX2NvbHVtbl9k ZWZzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAg IGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkgICBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJ CQkJCQkJICAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBw ZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwK KwkJCQkJCQkJCQkgIGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJCQkJ ICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRfaW5s aW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCisJCQkJ CQkJCQkJCWJvb2wgcHJldHR5LCBib29sICpmaXJzdCk7CitzdGF0aWMgY2hhciAqZmluZF9hdHRy ZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKKwkJCQkJCQkgICBMaXN0 ICoqZHBjb250ZXh0KTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChPaWQg cmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCSBPaWQgYmFzZV9uYW1lc3Bh Y2UpOworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICpjb2xsZWN0X2xvY2FsX25vdF9udWxsKFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CisKK3N0YXRpYyB2 b2lkIGFwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRf Y3JlYXRlX3RhYmxlX3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1p dF9vd25lcl9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfY2hp bGRfZGVmYXVsdF9vdmVycmlkZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQg ZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRf aW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2xvY2FsX2Nv bnN0cmFpbnRzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcnVsZXMo VGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9zdGF0aXN0aWNzKFRhYmxl RGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcmVwbGljYV9pZGVudGl0eShUYWJs ZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3Jsc190b2dnbGVzKFRhYmxlRGRs Q29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxl RGRsQ29udGV4dCAqY3R4KTsKKworCisvKgorICogcGFyc2Vfa2luZF9hcnJheQorICoJCVBhcnNl IGEgdGV4dFtdIG9mIG9iamVjdC1jbGFzcyBraW5kIG5hbWVzIGludG8gYSBCaXRtYXBzZXQgb2YK KyAqCQlUYWJsZURkbEtpbmQgdmFsdWVzLgorICoKKyAqIEVhY2ggZWxlbWVudCBpcyBtYXRjaGVk IGNhc2UtaW5zZW5zaXRpdmVseTsgc3Vycm91bmRpbmcgd2hpdGVzcGFjZSBpcworICogc3RyaXBw ZWQuICBOVUxMIGVsZW1lbnRzIGFyZSByZWplY3RlZC4gIFVua25vd24ga2luZCBuYW1lcyByYWlz ZSBhbiBlcnJvcgorICogY2l0aW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXIgbmFtZS4gIEFuIGVt cHR5IGFycmF5IGlzIGFsc28gcmVqZWN0ZWQuCisgKiBEdXBsaWNhdGUgZW50cmllcyBhcmUgc2ls ZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUgQml0bWFwc2V0LgorICovCitzdGF0aWMgQml0bWFw c2V0ICoKK3BhcnNlX2tpbmRfYXJyYXkoY29uc3QgY2hhciAqcGFyYW1uYW1lLCBBcnJheVR5cGUg KmFycikKK3sKKwlEYXR1bQkgICAqZWxlbXM7CisJYm9vbAkgICAqbnVsbHM7CisJaW50CQkJbmVs ZW1zOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlkZWNvbnN0cnVjdF9hcnJheV9i dWlsdGluKGFyciwgVEVYVE9JRCwgJmVsZW1zLCAmbnVsbHMsICZuZWxlbXMpOworCisJaWYgKG5l bGVtcyA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInBhcmFtZXRlciBcIiVzXCIgbXVzdCBz cGVjaWZ5IGF0IGxlYXN0IG9uZSBraW5kIiwKKwkJCQkJCXBhcmFtbmFtZSkpKTsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJeworCQljaGFyCSAgICpyYXc7CisJCWNoYXIJ ICAgKnRva2VuOworCQljaGFyCSAgICplbmQ7CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJ aWYgKG51bGxzW2ldKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInBhcmFtZXRlciBcIiVzXCIg bXVzdCBub3QgY29udGFpbiBOVUxMIGVsZW1lbnRzIiwKKwkJCQkJCQlwYXJhbW5hbWUpKSk7CisK KwkJcmF3ID0gdGV4dF90b19jc3RyaW5nKERhdHVtR2V0VGV4dFBQKGVsZW1zW2ldKSk7CisKKwkJ LyogVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UuICovCisJCXRva2VuID0gcmF3OworCQl3aGlsZSAo KnRva2VuID09ICcgJyB8fCAqdG9rZW4gPT0gJ1x0JykKKwkJCXRva2VuKys7CisKKwkJLyogVHJp bSB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCQllbmQgPSB0b2tlbiArIHN0cmxlbih0b2tlbik7 CisJCXdoaWxlIChlbmQgPiB0b2tlbiAmJiAoZW5kWy0xXSA9PSAnICcgfHwgZW5kWy0xXSA9PSAn XHQnKSkKKwkJCWVuZC0tOworCQkqZW5kID0gJ1wwJzsKKworCQlmb3IgKHNpemVfdCBqID0gMDsg aiA8IGxlbmd0aG9mKHRhYmxlX2RkbF9raW5kX25hbWVzKTsgaisrKQorCQl7CisJCQlpZiAocGdf c3RyY2FzZWNtcCh0b2tlbiwgdGFibGVfZGRsX2tpbmRfbmFtZXNbal0ubmFtZSkgPT0gMCkKKwkJ CXsKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsCisJCQkJCQkJCQkJKGludCkg dGFibGVfZGRsX2tpbmRfbmFtZXNbal0ua2luZCk7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJ1bnJlY29nbml6ZWQga2luZCBcIiVzXCIgaW4gcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJCQkJ dG9rZW4sIHBhcmFtbmFtZSkpKTsKKworCQlwZnJlZShyYXcpOworCX0KKworCXJldHVybiByZXN1 bHQ7Cit9CisKKy8qCisgKiBpc19raW5kX2luY2x1ZGVkCisgKgkJRGV0ZXJtaW5lIHdoZXRoZXIg RERMIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LWNsYXNzIGtpbmQgc2hvdWxkIGJlCisgKgkJZW1pdHRl ZCB1bmRlciB0aGUgY3VycmVudCBvcHRpb25zLgorICovCitzdGF0aWMgYm9vbAoraXNfa2luZF9p bmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFibGVEZGxLaW5kIGtpbmQpCit7 CisJaWYgKGN0eC0+b25seV9raW5kcyAhPSBOVUxMKQorCQlyZXR1cm4gYm1zX2lzX21lbWJlcigo aW50KSBraW5kLCBjdHgtPm9ubHlfa2luZHMpOworCWlmIChjdHgtPmV4Y2VwdF9raW5kcyAhPSBO VUxMKQorCQlyZXR1cm4gIWJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5leGNlcHRfa2lu ZHMpOworCXJldHVybiB0cnVlOworfQogCiAvKgogICogSGVscGVyIHRvIGFwcGVuZCBhIGZvcm1h dHRlZCBzdHJpbmcgd2l0aCBvcHRpb25hbCBwcmV0dHktcHJpbnRpbmcuCkBAIC05NzUsMyArMTIx MSwxNzUzIEBAIHBnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKIAkJU1JGX1JF VFVSTl9ET05FKGZ1bmNjdHgpOwogCX0KIH0KKworLyoKKyAqIGxvb2t1cF9yZWxuYW1lX2Zvcl9l bWl0CisgKgkJUmV0dXJuIGVpdGhlciB0aGUgc2NoZW1hLXF1YWxpZmllZCBvciB0aGUgYmFyZSBx dW90ZWQgbmFtZSBvZiBhCisgKgkJcmVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgc2NoZW1hX3F1 YWxpZmllZCBmbGFnLgorICoKKyAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG5ldmVyIHNjaGVt YS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgorICogc2NoZW1hX3F1YWxpZmllZDogdGhlIFRFTVBP UkFSWSBrZXl3b3JkIGluIENSRUFURSBURU1QT1JBUlkgVEFCTEUKKyAqIGFscmVhZHkgcGxhY2Vz IHRoZSB0YWJsZSBpbiB0aGUgc2Vzc2lvbidzIHRlbXAgc2NoZW1hLCBzbyBlbWl0dGluZworICog cGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIHByb2R1Y2UgRERMIHRoYXQgY2Fubm90IGJlIHJlcGxh eWVkLgorICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0cnVlIHRoZSBzY2hlbWEtcXVh bGlmaWVkIG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZCBmb3Igbm9uLXRlbXBvcmFyeSByZWxh dGlvbnMuICBXaGVuIGZhbHNlLCB0aGUgYmFyZSByZWxuYW1lCisgKiBpcyByZXR1cm5lZCBvbmx5 IGlmIHRoZSB0YXJnZXQgcmVsYXRpb24gbGl2ZXMgaW4gYmFzZV9uYW1lc3BhY2UgKHRoZQorICog bmFtZXNwYWNlIG9mIHRoZSB0YWJsZSB3aG9zZSBEREwgaXMgYmVpbmcgZ2VuZXJhdGVkKTsgb3Ro ZXJ3aXNlIHRoZQorICogc2NoZW1hLXF1YWxpZmllZCBmb3JtIGlzIHJldHVybmVkLCBiZWNhdXNl IGNyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisgKiAoZm9yIGV4YW1wbGUgYW4gaW5oZXJpdGFuY2Ug cGFyZW50IG9yIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhCisgKiBkaWZmZXJlbnQgc2NoZW1hKSBh cmUgbm90IHNhZmUgdG8gb21pdC4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIHRoZSB1bnNhZmUgcGF0 dGVybgorICoJICBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo Z2V0X3JlbF9uYW1lc3BhY2Uob2lkKSksCisgKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdldF9yZWxfbmFtZShvaWQpKQorICogd2hpY2ggZGVyZWZlcmVuY2VzIE5VTEwgd2hlbiBhIGNv bmN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGRyb3BwZWQgdGhlCisgKiByZWZlcmVuY2VkIHJlbGF0 aW9uIChvciBpdHMgc2NoZW1hKSBiZXR3ZWVuIHdoZW4gd2UgY2FjaGVkIGl0cyBPSUQgYW5kCisg KiB3aGVuIHdlIGFzayB0aGUgc3lzY2FjaGUgZm9yIGl0cyBuYW1lLiAgSG9sZGluZyBBY2Nlc3NT aGFyZUxvY2sgb24gYQorICogZGVwZW5kZW50IHJlbGF0aW9uIG1ha2VzIHRoaXMgcmFjZSB2YW5p c2hpbmdseSB1bmxpa2VseSBpbiBwcmFjdGljZSwgYnV0CisgKiB3ZSBzdGlsbCBkZWZlbmQgYWdh aW5zdCBpdCBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIFNJR1NFR1YuCisgKgorICogQ2Fs bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZnJlZSgpaW5nIHRoZSByZXN1bHQuCisgKi8KK3N0YXRp YyBjaGFyICoKK2xvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCByZWxpZCwgYm9vbCBzY2hlbWFf cXVhbGlmaWVkLCBPaWQgYmFzZV9uYW1lc3BhY2UpCit7CisJSGVhcFR1cGxlCXRwOworCUZvcm1f cGdfY2xhc3MgcmVsdHVwOworCWNoYXIJICAgKm5zcG5hbWU7CisJY2hhcgkgICAqcmVzdWx0Owor CisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIHdp dGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgcmVsaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1h eSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKworCXJlbHR1cCA9IChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QodHApOworCisJLyoKKwkgKiBUZW1wb3JhcnkgcmVsYXRpb25z IGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkOiB0aGUgVEVNUE9SQVJZIGtleXdvcmQKKwkgKiBh bHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZCBwZ190ZW1wX05OLnJlbG5hbWUgY2Fu bm90IGJlCisJICogcmVwbGF5ZWQgaW4gYW55IG90aGVyIHNlc3Npb24uCisJICovCisJaWYgKGlz VGVtcE5hbWVzcGFjZShyZWx0dXAtPnJlbG5hbWVzcGFjZSkpCisJeworCQlyZXN1bHQgPSBwc3Ry ZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKSk7CisJCVJlbGVh c2VTeXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogQmFyZSBuYW1lIG9u bHkgd2hlbiBjYWxsZXIgYXNrZWQgYW5kIHRhcmdldCBpcyBpbiB0aGUgYmFzZSBuYW1lc3BhY2Uu ICovCisJaWYgKCFzY2hlbWFfcXVhbGlmaWVkICYmIHJlbHR1cC0+cmVsbmFtZXNwYWNlID09IGJh c2VfbmFtZXNwYWNlKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5h bWVTdHIocmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlyZXR1 cm4gcmVzdWx0OworCX0KKworCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUocmVsdHVwLT5y ZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJeworCQlPaWQJCQluc3BvaWQg PSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJ IGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgbnNwb2lkKSwKKwkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwbmFtZSwgTmFt ZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVlKG5zcG5hbWUpOworCVJlbGVhc2VTeXND YWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogY29sbGVjdF9sb2NhbF9u b3RfbnVsbAorICoJCVNjYW4gcGdfY29uc3RyYWludCBvbmNlIGZvciBsb2NhbGx5LWRlY2xhcmVk IE5PVCBOVUxMIGNvbnN0cmFpbnRzCisgKgkJb24gcmVsLCByZXR1cm5pbmcgYSBwYWxsb2MnZCBh cnJheSBpbmRleGVkIGJ5IGF0dG51bSAoMS4ubmF0dHMpLgorICoKKyAqIEVudHJpZXMgd2l0aCBj b25vaWQ9PUludmFsaWRPaWQgbWVhbiAibm8gbG9jYWwgTk9UIE5VTEwgcm93IGZvciB0aGlzCisg KiBjb2x1bW4iLiAgV2hlbiB0aGUgY29uc3RyYWludCBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBh dXRvLWdlbmVyYXRlZAorICogcGF0dGVybiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X25vdF9u dWxsIiwgdGhlIGNvbnN0cmFpbnQgT0lEIGlzCisgKiBhcHBlbmRlZCB0byAqc2tpcF9vaWRzIHNv IHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkCisgKiByZS1lbWl0dGlu ZyBpdCBhcyBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLSB0aGUgY29sdW1uLWVtaXQK KyAqIHBhc3Mgd2lsbCBwcm9kdWNlIGl0IGlubGluZSBhcyAiQ09OU1RSQUlOVCBuYW1lIE5PVCBO VUxMIiBpbnN0ZWFkLgorICovCitzdGF0aWMgTG9jYWxOb3ROdWxsRW50cnkgKgorY29sbGVjdF9s b2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsIExpc3QgKipza2lwX29pZHMpCit7CisJVHVwbGVE ZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJbmF0dHMgPSB0dXBk ZXNjLT5uYXR0czsKKwlMb2NhbE5vdE51bGxFbnRyeSAqZW50cmllczsKKwljb25zdCBjaGFyICpy ZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsKKwlSZWxhdGlvbgljb25SZWw7 CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1cGxl CWNvblR1cDsKKworCWVudHJpZXMgPSAoTG9jYWxOb3ROdWxsRW50cnkgKikgcGFsbG9jMChzaXpl b2YoTG9jYWxOb3ROdWxsRW50cnkpICoKKwkJCQkJCQkJCQkJKG5hdHRzICsgMSkpOworCisJY29u UmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwK KwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1 bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2Fu KGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUs IE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0g c3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29u ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCURhdHVtCQljb25r ZXlEYXQ7CisJCWJvb2wJCWNvbmtleU51bGw7CisJCUFycmF5VHlwZSAgKmNvbmtleUFycjsKKwkJ aW50MTYJICAgKmNvbmtleVZhbHM7CisJCWludAkJCWF0dG51bTsKKwkJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0OworCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJaWYgKGNvbi0+Y29u dHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCFjb24tPmNv bmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQljb25rZXlEYXQgPSBoZWFwX2dldGF0dHIoY29u VHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJCQkgUmVsYXRpb25HZXREZXNj cihjb25SZWwpLCAmY29ua2V5TnVsbCk7CisJCWlmIChjb25rZXlOdWxsKQorCQkJY29udGludWU7 CisJCWNvbmtleUFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChjb25rZXlEYXQpOworCisJCS8qCisJ CSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFsZm9ybWVkIGNvbmtleTogYSBOT1QgTlVMTCBjb25zdHJh aW50IGlzIGFsd2F5cworCQkgKiBhIHNpbmdsZS1jb2x1bW4gMS1EIGludDIgYXJyYXksIGJ1dCBh IGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEgZnV0dXJlCisJCSAqIHBhdGNoIHRoYXQgc3RvcmVzIHdp ZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlwIHVzIGludG8gcmVhZGluZyBwYXN0CisJCSAqIHRoZSBh cnJheSBoZWFkZXIuCisJCSAqLworCQlpZiAoQVJSX05ESU0oY29ua2V5QXJyKSAhPSAxIHx8CisJ CQlBUlJfRElNUyhjb25rZXlBcnIpWzBdIDwgMSB8fAorCQkJQVJSX0hBU05VTEwoY29ua2V5QXJy KSB8fAorCQkJQVJSX0VMRU1UWVBFKGNvbmtleUFycikgIT0gSU5UMk9JRCkKKwkJCWNvbnRpbnVl OworCisJCWNvbmtleVZhbHMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycik7CisJ CWF0dG51bSA9IGNvbmtleVZhbHNbMF07CisJCWlmIChhdHRudW0gPCAxIHx8IGF0dG51bSA+IG5h dHRzKQorCQkJY29udGludWU7CisKKwkJYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRu dW0gLSAxKTsKKwkJc25wcmludGYoYXV0b25hbWUsIHNpemVvZihhdXRvbmFtZSksICIlc18lc19u b3RfbnVsbCIsCisJCQkJIHJlbG5hbWUsIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisKKwkJZW50 cmllc1thdHRudW1dLmNvbm9pZCA9IGNvbi0+b2lkOworCQllbnRyaWVzW2F0dG51bV0ubmFtZSA9 IHBzdHJkdXAoTmFtZVN0cihjb24tPmNvbm5hbWUpKTsKKwkJZW50cmllc1thdHRudW1dLmlzX2F1 dG8gPSAoc3RyY21wKE5hbWVTdHIoY29uLT5jb25uYW1lKSwgYXV0b25hbWUpID09IDApOworCQll bnRyaWVzW2F0dG51bV0ubm9faW5oZXJpdCA9IGNvbi0+Y29ubm9pbmhlcml0OworCisJCS8qCisJ CSAqIElubGluZSBlbWlzc2lvbiBvZiBOT1QgTlVMTCBvbmx5IGhhcHBlbnMgZm9yIGNvbHVtbnMg dGhhdCB0aGUKKwkJICogY29sdW1uIGxpc3QgYWN0dWFsbHkgZW1pdHMsIGkuZS4gYXR0aXNsb2Nh bCBjb2x1bW5zLiAgRm9yIHRob3NlCisJCSAqIHRoZSBpbmxpbmUgcGFzcyBhbHJlYWR5IG1hdGVy aWFsaXplcyB0aGUgY29uc3RyYWludCAoZWl0aGVyIGFzCisJCSAqICJDT05TVFJBSU5UIG5hbWUg Tk9UIE5VTEwiIGZvciB1c2VyLW5hbWVkLCBvciBhcyBhIGJhcmUKKwkJICogIk5PVCBOVUxMIiB0 aGF0IFBHIHJlLWNyZWF0ZXMgdW5kZXIgdGhlIGF1dG8tbmFtZSBwYXR0ZXJuKSwgc28KKwkJICog dGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5vdCBlbWl0IGEgc2Vjb25kCisJ CSAqIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3IgdGhlIHNhbWUgY29sdW1uIC0g UEcgb25seQorCQkgKiBhbGxvd3Mgb25lIE5PVCBOVUxMIGNvbnN0cmFpbnQgcGVyIGNvbHVtbiBh bmQgcmVqZWN0cyB0aGUKKwkJICogc2Vjb25kIHdpdGggYSBuYW1lIG1pc21hdGNoIHdoZW5ldmVy IHRoZSBzYXZlZCBhdXRvLW5hbWUgbm8KKwkJICogbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQg dGFibGUgbmFtZSAoZS5nLiBhZnRlciBhIHJlbmFtZSwgb3IKKwkJICogd2hlbiBDUkVBVEUgVEFC TEUgdW5pcXVpZmllcyB0aGUgYXV0by1uYW1lIHRvIGRvZGdlIGEgc2VxdWVuY2UKKwkJICogY29s bGlzaW9uKS4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgc2l0dGluZyBvbiBhbgor CQkgKiBpbmhlcml0ZWQgKG5vbi1sb2NhbCkgY29sdW1uIHRoZSBpbmxpbmUgcGF0aCBuZXZlciBm aXJlcywgc28KKwkJICogbGVhdmUgdGhlIE9JRCBvdXQgb2Ygc2tpcF9vaWRzIGFuZCBsZXQgdGhl IHBvc3QtQ1JFQVRFIGxvb3AKKwkJICogZW1pdCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJ TlQuCisJCSAqLworCQlpZiAoYXR0LT5hdHRpc2xvY2FsICYmIHNraXBfb2lkcyAhPSBOVUxMKQor CQkJKnNraXBfb2lkcyA9IGxhcHBlbmRfb2lkKCpza2lwX29pZHMsIGNvbi0+b2lkKTsKKwl9CisJ c3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gZW50cmllczsKK30KKworLyoKKyAqIGZpbmRfYXR0cmRlZl90 ZXh0CisgKgkJUmV0dXJuIHRoZSBkZXBhcnNlZCBERUZBVUxUL0dFTkVSQVRFRCBleHByZXNzaW9u IGZvciBhdHRudW0gb24gcmVsLAorICoJCW9yIE5VTEwgaWYgbm8gZW50cnkgZXhpc3RzIGluIFR1 cGxlQ29uc3RyLT5kZWZ2YWwuCisgKgorICogVGhlIGNhbGxlciBwYXNzZXMgYSBMaXN0ICoqIHNv IHRoYXQgdGhlIGRlcGFyc2UgY29udGV4dCBpcyBidWlsdCBsYXppbHkKKyAqIGFuZCByZXVzZWQg YWNyb3NzIGNhbGxzIChkZXBhcnNlX2NvbnRleHRfZm9yIGlzIG5vdCBjaGVhcCkuICBSZXR1cm5l ZAorICogc3RyaW5nIGlzIHBhbGxvYydkIGluIHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0OyBj YWxsZXIgcGZyZWUncyBpdC4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9hdHRyZGVmX3RleHQo UmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgTGlzdCAqKmRwY29udGV4dCkKK3sKKwlU dXBsZUNvbnN0ciAqY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5jb25zdHI7CisKKwlp ZiAoY29uc3RyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpbnQgaiA9IDA7IGog PCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwl7CisJCWlmIChjb25zdHItPmRlZnZhbFtqXS5h ZG51bSAhPSBhdHRudW0pCisJCQljb250aW51ZTsKKworCQlpZiAoKmRwY29udGV4dCA9PSBOSUwp CisJCQkqZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpLAorCQkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKworCQlyZXR1 cm4gZGVwYXJzZV9leHByZXNzaW9uKHN0cmluZ1RvTm9kZShjb25zdHItPmRlZnZhbFtqXS5hZGJp biksCisJCQkJCQkJCSAgKmRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisJcmV0dXJuIE5V TEw7Cit9CisKKy8qCisgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzCisgKgkJRW1p dCBlYWNoIGxvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludCBvbiByZWwgYXMKKyAqCQki Q09OU1RSQUlOVCBuYW1lIDxwZ19nZXRfY29uc3RyYWludGRlZj4iLCBzZXBhcmF0ZWQgYnkgJywn IGZyb20gYW55CisgKgkJcHJldmlvdXNseS1lbWl0dGVkIGNvbHVtbiBvciBjb25zdHJhaW50Lgor ICoKKyAqICpmaXJzdCB0cmFja3Mgd2hldGhlciBhbnl0aGluZyBoYXMgYmVlbiBlbWl0dGVkIG9u IHRoaXMgbGlzdCB5ZXQsIHNvIHRoZQorICogY2FsbGVyIGNhbiBjaGFpbiBjb2x1bW4gZW1pc3Np b24gYW5kIGNvbnN0cmFpbnQgZW1pc3Npb24gdGhyb3VnaCB0aGUgc2FtZQorICogYnVmZmVyLiAg SW5oZXJpdGVkIENIRUNLIGNvbnN0cmFpbnRzICghY29uaXNsb2NhbCkgY29tZSBmcm9tIHRoZSBw YXJlbnQncworICogRERMIGFuZCBhcmVuJ3QgcmVwZWF0ZWQgaGVyZS4KKyAqLworc3RhdGljIHZv aWQKK2FwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoU3RyaW5nSW5mbyBidWYsIFJlbGF0 aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJCWJvb2wgKmZpcnN0KQoreworCVJlbGF0aW9u CWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2FuOworCVNjYW5LZXlEYXRhIGNvbktleTsKKwlI ZWFwVHVwbGUJY29uVHVwOworCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1f cGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lE RVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25T Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1l SW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhl YXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJewor CQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNU KGNvblR1cCk7CisJCURhdHVtCQlkZWZEYXR1bTsKKwkJY2hhcgkgICAqZGVmYm9keTsKKworCQlp ZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRfQ0hFQ0spCisJCQljb250aW51ZTsKKwkJaWYg KCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQlpZiAoISpmaXJzdCkKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAgIik7CisJCWVsc2UgaWYgKCEqZmlyc3QpCisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCSpmaXJzdCA9IGZhbHNlOworCisJCWRl ZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9DT05TVFJBSU5UREVGX09JRCwKKwkJ CQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKwkJZGVmYm9keSA9IFRleHREYXR1 bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkNPTlNUUkFJ TlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUp KSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9keSk7CisJfQorCXN5c3RhYmxlX2Vu ZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor fQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJQXBwZW5kIHRoZSBjb21tYS1zZXBh cmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0YWJsZS4KKyAqCisgKiBFbWl0cyBl YWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNvbHVtbiBhcworICoJCW5hbWUgdHlw ZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJT04gY10KKyAqCQlbR0VORVJBVEVE IC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9sbG93ZWQgYnkgYW55IGxvY2FsbHkt ZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAgT3B0aW9uYWwKKyAqIGNsYXVzZXMg YXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIHN5c3RlbSB3b3Vs ZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5cGUtZGVmYXVsdCBDT0xMQVRFLCB0 eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfY29sdW1uX2Rl ZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJICAgYm9v bCBpbmNsdWRlX2NoZWNrLAorCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkgICBM b2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKKwlPaWQJCQliYXNlX25hbWVzcGFjZSA9IFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCWJvb2wJCWZpcnN0 ID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7 CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJ CWNoYXIJICAgKnR5cHN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51 ZTsKKworCQkvKgorCQkgKiBDb2x1bW5zIGluaGVyaXRlZCBmcm9tIGEgcGFyZW50IGFyZSBjb3Zl cmVkIGJ5IHRoZSBJTkhFUklUUyBjbGF1c2UsCisJCSAqIG5vdCB0aGUgY29sdW1uIGxpc3QsIHVu bGVzcyB0aGUgY2hpbGQgcmVkZWNsYXJlZCB0aGVtIGxvY2FsbHkKKwkJICogKGF0dGlzbG9jYWw9 dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+YXR0aXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJ CWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWlmIChw cmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuICAgICIpOworCQllbHNl IGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWZpcnN0 ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg JyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoYXR0LT5hdHR0eXBp ZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgdHlwc3Ry KTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkvKiBDT0xMQVRFIGNsYXVzZSwgb25seSBpZiBpdCBk aWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoT2lkSXNWYWxpZChhdHQt PmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+YXR0Y29sbGF0aW9uICE9IGdldF90eXBjb2xsYXRp b24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT0xMQVRFICVz IiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoYXR0LT5hdHRjb2xsYXRpb24pKTsK KworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUn cyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5hdHRzdG9yYWdlICE9IGdldF90eXBzdG9yYWdlKGF0 dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgU1RPUkFHRSAlcyIsIHN0 b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKworCQkvKiBDT01QUkVTU0lPTiBjbGF1c2Us IG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24gdGhlIGNvbHVtbi4gKi8KKwkJaWYgKENvbXByZXNz aW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNvbXByZXNzaW9uKSkKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwKKwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2RO YW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsKKworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBkZWZh dWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRleHQgdXAgZnJvbnQ7IGdlbmVyYXRlZAorCQkgKiBj b2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUgd2l0aCBhbiBlbnRyeSBpbiBwZ19hdHRyZGVmIGp1 c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1bHRzLgorCQkgKi8KKwkJeworCQkJY2hhcgkgICAq ZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChhdHQtPmF0dGhhc2RlZikKKwkJCQlkZWZleHByID0g ZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisKKwkJCS8q IEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVGQVVMVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAq LworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVE ICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZ UyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIpOworCQkJZWxzZSBpZiAoYXR0LT5hdHRnZW5lcmF0 ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMICYmIGRlZmV4cHIpCisJCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFZJUlRVQUwiLCBkZWZl eHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZ X0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlf QllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25zdCBjaGFyICppZGtpbmQgPQorCQkJCQkoYXR0LT5h dHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQkJCQk/ICJBTFdBWVMi IDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJCXNlcWlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShy ZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdF TkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlka2luZCk7CisKKwkJCQkvKgorCQkJCSAqIEVtaXQg b25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRoZWlyCisJCQkJICog ZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0X2RhdGFiYXNlX2RkbCdzIHBhdHRlcm4gb2YKKwkJ CQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0aGUgc3lzdGVtIHdvdWxkIHJlYXBwbHkgb24gaXRz IG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChzZXFpZCkpCisJCQkJeworCQkJCQlI ZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNFUVJFTElELAorCQkJCQkJCQkJCQkJ CQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOworCisJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlk KHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZvcm1fcGdfc2VxdWVuY2Ugc2VxID0gKEZvcm1fcGdf c2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXApOworCQkJCQkJU3RyaW5nSW5mb0RhdGEgb3B0czsK KwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRydWU7CisJCQkJCQlpbnQ2NAkJZGVmX21pbiwKKwkJ CQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlkZWZfc3RhcnQ7CisJCQkJCQlpbnQ2NAkJdHlwX21p biwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBQZXItdHlwZSBib3Vu ZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVybHlpbmcKKwkJCQkJCSAqIGludGVnZXIgdHlwZS4g IERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNvbHVtbiB0eXBlCisJCQkJCQkgKiBpcyBzb21ldGhp bmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBmb3IgSURFTlRJVFksCisJCQkJCQkgKiBidXQgYmUg ZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJCQkJc3dpdGNoIChhdHQtPmF0dHR5cGlkKQorCQkJ CQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoKKwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDE2X01J TjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDE2X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJ CQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UMzJfTUlOOworCQkJCQkJ CQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0 OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UNjRfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdf SU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKworCQkJCQkJaWYgKHNlcS0+c2Vx aW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlkZWZfbWluID0gMTsKKwkJCQkJCQlkZWZf bWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWluOworCQkJCQkJfQorCQkJ CQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSB0eXBfbWluOworCQkJCQkJCWRlZl9t YXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWF4OworCQkJCQkJfQorCisJCQkJCQlp bml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBTRVFVRU5DRSBOQU1F IC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhlIGltcGxpY2l0CisJCQkJCQkgKiAiPHRhYmxlbmFt ZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVybiBpbiB0aGUgc2FtZQorCQkJCQkJICogc2NoZW1h LCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCByZWdlbmVyYXRlIHRoYXQKKwkJCQkJCSAqIGV4YWN0 IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4gSU5URVJOQUwgZGVwZW5kZW5jeQorCQkJCQkJICog b2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sgd2UgaG9sZCBvbiB0aGUgdGFibGUKKwkJCQkJCSAq IGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29rdXAgaGVscGVyIHN0aWxsIGRlZmVuZHMKKwkJCQkJ CSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2NsYXNzIHJvdy4KKwkJCQkJCSAqLworCQkJCQkJewor CQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1cDsKKwkJCQkJCQlGb3JtX3BnX2NsYXNzIHNlcUNs YXNzOworCQkJCQkJCWNoYXIJCWF1dG9uYW1lW05BTUVEQVRBTEVOXTsKKworCQkJCQkJCXNlcUNs YXNzVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwKKwkJCQkJCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKHNlcWlkKSk7CisJCQkJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcUNsYXNz VHVwKSkKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkJCSBlcnJtc2coImlkZW50aXR5IHNlcXVlbmNl IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJCQkJCXNlcWlkKSwKKwkJCQkJ CQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIp KSk7CisJCQkJCQkJc2VxQ2xhc3MgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHNlcUNsYXNz VHVwKTsKKworCQkJCQkJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXplb2YoYXV0b25hbWUpLCAiJXNf JXNfc2VxIiwKKwkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJ CQkJIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisJCQkJCQkJaWYgKHNlcUNsYXNzLT5yZWxuYW1l c3BhY2UgIT0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSB8fAorCQkJCQkJCQlzdHJjbXAoTmFt ZVN0cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1dG9uYW1lKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJ CQkJY2hhcgkgICAqc2VxUXVhbCA9CisJCQkJCQkJCQlsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChz ZXFpZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJCQli YXNlX25hbWVzcGFjZSk7CisKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzU0VR VUVOQ0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcVF1 YWwpOworCQkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCQkJcGZyZWUoc2VxUXVhbCk7 CisJCQkJCQkJfQorCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFDbGFzc1R1cCk7CisJCQkJCQl9 CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFydCkKKwkJCQkJCXsKKwkJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRIICIgSU5UNjRfRk9STUFULAor CQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2Vxc3RhcnQpOworCQkJCQkJ CWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50 ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzSU5DUkVN RU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIs IHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0K KwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJCQkJeworCQkJCQkJCWFwcGVu ZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJ CQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1heCAhPSBkZWZfbWF4KQorCQkJ CQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01BWFZBTFVFICIgSU5UNjRf Rk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWF4KTsK KwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWNh Y2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ0FD SEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2Vx LT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlp ZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRz LCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBm YWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQpCisJCQkJCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJCQkJCXBmcmVlKG9wdHMuZGF0 YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0K KwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgREVGQVVM VCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHByKTsK KwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVudHJ5 ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJaWYgKG5uLT5uYW1lICE9IE5V TEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTlNUUkFJ TlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOwor CQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIE5PVCBOVUxMIik7CisJ CQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgIiBOTyBJTkhFUklUIik7CisJCX0KKwl9CisKKwkvKgorCSAqIFRh YmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIC0gZW1pdHRlZCBpbmxpbmUgaW4gdGhlIENSRUFU RSBUQUJMRSBib2R5CisJICogc28gdGhleSBhcHBlYXIgYWxvbmdzaWRlIHRoZSBjb2x1bW5zICh0 aGUgcGdfZHVtcCBzaGFwZSkuICBUaGUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgaW4gcGdf Z2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBza2lwcyBDSEVDSworCSAqIGNvbnN0cmFpbnRzIHRvIGF2 b2lkIGRvdWJsZS1lbWlzc2lvbi4KKwkgKi8KKwlpZiAoaW5jbHVkZV9jaGVjaykKKwkJYXBwZW5k X2lubGluZV9jaGVja19jb25zdHJhaW50cyhidWYsIHJlbCwgcHJldHR5LCAmZmlyc3QpOworfQor CisvKgorICogYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMKKyAqCQlGb3IgYSB0eXBlZCB0 YWJsZSAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBlX25hbWUpLCBhcHBlbmQgdGhlCisgKgkJb3B0 aW9uYWwgIihjb2wgV0lUSCBPUFRJT05TIC4uLiwgLi4uKSIgbGlzdCBjYXJyeWluZyBsb2NhbGx5 CisgKgkJYXBwbGllZCBwZXItY29sdW1uIG92ZXJyaWRlcyAtIERFRkFVTFQsIE5PVCBOVUxMLCBh bmQgYW55IGxvY2FsbHkKKyAqCQlkZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cy4KKyAqCisgKiBD b2x1bW5zIHdob3NlIHR5cGUgaXMgZnVsbHkgZGljdGF0ZWQgYnkgcmVsb2Z0eXBlIGVtaXQgbm90 aGluZy4gIFRoZQorICogcGFyZW50aGVzaXNlZCBsaXN0IGlzIHN1cHByZXNzZWQgZW50aXJlbHkg d2hlbiBubyBjb2x1bW4gbmVlZHMgYW4KKyAqIG92ZXJyaWRlIGFuZCB0aGVyZSBhcmUgbm8gbG9j YWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cywgbWF0Y2hpbmcKKyAqIHRoZSBjYW5vbmlj YWwgIkNSRUFURSBUQUJMRSB4IE9GIHQ7IiBzaGFwZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJv b2wgcHJldHR5LAorCQkJCQkJCSAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCQkJCSAgTG9jYWxO b3ROdWxsRW50cnkgKm5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCVN0cmluZ0luZm9E YXRhIGlubmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWluaXRTdHJpbmdJbmZvKCZpbm5l cik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQljaGFy CSAgICpkZWZleHByID0gTlVMTDsKKwkJYm9vbAkJaGFzX2RlZmF1bHQ7CisJCWJvb2wJCWhhc19u b3RudWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWlm IChhdHQtPmF0dGhhc2RlZikKKwkJCWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChyZWwsIGF0 dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQloYXNfZGVmYXVsdCA9IChkZWZleHByICE9IE5V TEwpOworCQloYXNfbm90bnVsbCA9IGF0dC0+YXR0bm90bnVsbDsKKworCQlpZiAoIWhhc19kZWZh dWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVm ZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBw ZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMiLAorCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlmIChoYXNfZGVmYXVsdCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwkJaWYg KGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmll c1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0 bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxM IiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5u YW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYgKGRlZmV4cHIpCisJCQlwZnJl ZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3Ry YWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJICogY29sdW1uLWxpc3QgcGFy ZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUuICBUaGUgb3V0LW9mLWxpbmUK KwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMgQ0hFQ0tzLgorCSAqLworCWlm IChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKCZpbm5l ciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0KQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg aW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJ fQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBwZW5kX3N0bXQKKyAqCQlQdXNo IGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAqIFVzZWQgZm9yIGFsbCBEREwg ZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUKKyAqIGFjdGl2 ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2VkIHRvIHRoZSBiYXNlIHNjaGVt YSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5kZXhkZWZfZGRsLCBwZ19nZXRf cnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5LCBwZ19nZXRfc3RhdGlz dGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVkIG5hbWVzIGZvciBzYW1lLXNj aGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3Rt dChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRlbWVudHMgPSBsYXBwZW5kKGN0 eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisKKy8qCisgKiBlbWl0 X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JFQVRFIFRBQkxFIHN0 YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFSWSAvIFVOTE9HR0VE KSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBBUlRJVElPTiBPRiBw YXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2QsCisgKgkJV0lUSCAo cmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8KK3N0YXRpYyB2b2lk CitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVJlbGF0 aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3RlbmNlID0gcmVsLT5yZF9yZWwt PnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsK Kwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisJ SGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1bTsKKwlib29sCQlyZWxvcHRJ c251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGN0eC0+ cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFzc3R1 cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZyZWxvcHRJc251bGwpOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiVEVNUE9SQVJZ ICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VE KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlVOTE9HR0VEICIpOworCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBjdHgtPnF1YWxuYW1lKTsKKwor CWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJeworCQlPaWQJCQlwYXJlbnRPaWQg PSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVlKTsKKwkJY2hhcgkgICAqcGFy ZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVudE9pZCwKKwkJCQkJCQkJCQkJ CQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+YmFzZV9uYW1l c3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVudE9p ZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3VuZElzbnVsbDsKKwkJY2hhcgkg ICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRTdHIgPSBOVUxMOworCisJCWlm IChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJwYXJ0aXRpb24gcGFy ZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlwYXJlbnRPaWQpLAorCQkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAorCQkJ CQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91bmRJc251bGwpOworCQlpZiAo IWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5vZGU7CisJCQlMaXN0CSAgICpk cGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVt KTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0cik7CisJCQlkcGNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBhcmVudE9pZCk7CisJCQlmb3JW YWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBkcGNvbnRleHQsIGZhbHNlLCBm YWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04g T0YgJXMgJXMiLAorCQkJCQkJIHBhcmVudFF1YWwsIGZvclZhbHVlcyA/IGZvclZhbHVlcyA6ICJE RUZBVUxUIik7CisJCWlmIChmb3JWYWx1ZXMpCisJCQlwZnJlZShmb3JWYWx1ZXMpOworCQlpZiAo Ym91bmRTdHIpCisJCQlwZnJlZShib3VuZFN0cik7CisJCXBmcmVlKHBhcmVudFF1YWwpOworCQlw ZnJlZShwYXJlbnRSZWxuYW1lKTsKKwl9CisJZWxzZSBpZiAoaXNfdHlwZWQpCisJeworCQljaGFy CSAgICp0eXBuYW1lID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHJlbC0+cmRfcmVsLT5yZWxv ZnR5cGUpOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIE9GICVzIiwgdHlwbmFt ZSk7CisJCXBmcmVlKHR5cG5hbWUpOworCisJCWFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVz KCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCQkJCSAgaXNfa2luZF9pbmNsdWRl ZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRyaWVz KTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAqbGM7 CisJCWJvb2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAi ICgiKTsKKworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5 LAorCQkJCQkJICAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwK KwkJCQkJCSAgIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwgY3R4LT5ubl9lbnRyaWVzKTsKKworCQlp ZiAoY3R4LT5wcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlxu KSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7CisK KwkJcGFyZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhjdHgtPnJlbGlkLCBOb0xvY2sp OworCQlpZiAocGFyZW50cyAhPSBOSUwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmN0eC0+YnVmLCAiIElOSEVSSVRTICgiKTsKKwkJCWZpcnN0ID0gdHJ1ZTsKKwkJCWZvcmVhY2go bGMsIHBhcmVudHMpCisJCQl7CisJCQkJT2lkCQkJcG9pZCA9IGxmaXJzdF9vaWQobGMpOworCQkJ CWNoYXIJICAgKnBuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQocG9pZCwKKwkJCQkJCQkJ CQkJCQkJCWN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWN0eC0+YmFzZV9u YW1lc3BhY2UpOworCisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY3R4LT5idWYsICIsICIpOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmY3R4LT5idWYsIHBuYW1lKTsKKwkJCQlwZnJlZShwbmFtZSk7CisJCQl9CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7CisJCQlsaXN0X2ZyZWUocGFy ZW50cyk7CisJCX0KKwl9CisKKwlpZiAocmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCXsKKwkJRGF0dW0JCXBhcnRrZXlEYXR1bTsKKwkJY2hhcgkgICAqcGFydGtleTsKKwor CQlwYXJ0a2V5RGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX1BBUlRLRVlERUYsCisJ CQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXBhcnRrZXkgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHBhcnRrZXlEYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+ YnVmLCAiIFBBUlRJVElPTiBCWSAlcyIsIHBhcnRrZXkpOworCQlwZnJlZShwYXJ0a2V5KTsKKwl9 CisKKwlpZiAoT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsYW0pICYmCisJCXJlbC0+cmRfcmVs LT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwl7CisJCWNoYXIJICAgKmFtbmFtZSA9IGdl dF9hbV9uYW1lKHJlbC0+cmRfcmVsLT5yZWxhbSk7CisKKwkJaWYgKGFtbmFtZSAhPSBOVUxMKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBVU0lORyAlcyIsCisJCQkJCQkJ IHF1b3RlX2lkZW50aWZpZXIoYW1uYW1lKSk7CisJCQlwZnJlZShhbW5hbWUpOworCQl9CisJfQor CisJaWYgKCFyZWxvcHRJc251bGwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgt PmJ1ZiwgIiBXSVRIICgiKTsKKwkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCByZWxvcHREYXR1 bSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwl9CisKKwlSZWxl YXNlU3lzQ2FjaGUoY2xhc3N0dXApOworCisJaWYgKCFjdHgtPm5vX3RhYmxlc3BhY2UgJiYgT2lk SXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSkpCisJeworCQljaGFyCSAgICp0c25h bWUgPSBnZXRfdGFibGVzcGFjZV9uYW1lKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKTsKKwor CQlpZiAodHNuYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LCAiIFRBQkxFU1BBQ0UgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHRzbmFtZSkpOwor CQkJcGZyZWUodHNuYW1lKTsKKwkJfQorCX0KKworCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24gb2MgPSBnZXRfb25fY29tbWl0 X2FjdGlvbihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05DT01NSVRfREVMRVRFX1JPV1Mp CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgREVMRVRF IFJPV1MiKTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJPUCkKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9QIik7CisJfQorCisJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnOycpOworCWFwcGVuZF9zdG10KGN0eCk7Cit9CisK Ky8qCisgKiBlbWl0X293bmVyX3N0bXQKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBPV05FUiBU TyByb2xlLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9vd25lcl9zdG10KFRhYmxlRGRsQ29udGV4 dCAqY3R4KQoreworCWNoYXIJICAgKm93bmVyOworCisJaWYgKGN0eC0+bm9fb3duZXIpCisJCXJl dHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVGcm9tSWQoY3R4LT5yZWwtPnJkX3JlbC0+cmVs b3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwlhcHBlbmRTdHJp bmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVzIE9XTkVSIFRPICVzOyIsCisJCQkJCSBj dHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVyKG93bmVyKSk7CisJYXBwZW5kX3N0bXQoY3R4 KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisgKiBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJp ZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIgQ09MVU1OIGNvbCBTRVQgREVGQVVM VCBleHByIC0gb25lIHBlcgorICoJCWluaGVyaXRlZCAoYXR0aXNsb2NhbD1mYWxzZSkgbm9uLWdl bmVyYXRlZCBjb2x1bW4gY2FycnlpbmcgYQorICoJCWxvY2FsbHktc2V0IGRlZmF1bHQuICBHZW5l cmF0ZWQgY29sdW1ucyBhcmUgc2tpcHBlZDogdGhlaXIKKyAqCQlleHByZXNzaW9uIGlzIGluaGVy aXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBTRVQgREVGQVVMVCB3b3VsZAorICoJCWZhaWwgYXQgcmVw bGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcyhUYWJs ZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0 dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKmRlZnN0cjsKKworCQlp ZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2FsIHx8ICFhdHQtPmF0dGhhc2Rl ZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgIT0gJ1wwJykKKwkJCWNv bnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0cmRlZl90ZXh0KGN0eC0+cmVsLCBhdHQtPmF0 dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZzdHIgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwor CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgt PmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCBERUZBVUxU ICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5h bWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3RyKTsKKwkJYXBwZW5kX3N0bXQoY3R4 KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2F0dG9wdGlvbnMKKyAq CQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4gY29sIFNFVCAoLi4uKSAtIG9uZSBw ZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRyaWJ1dGUuYXR0b3B0aW9ucy4gIFRo ZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMgaXNuJ3QgYXZhaWxhYmxlIGluIENS RUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorZW1p dF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNj ID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1 cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURl c2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0VHVwOworCQlEYXR1bQkJb3B0RGF0 dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQlj b250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJCQkg T2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJCQkJIEludDE2R2V0RGF0dW0oYXR0 LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cCkpCisJCQljb250aW51 ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFROVU0sIGF0dFR1cCwKKwkJCQkJ CQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywgJm9wdElzbnVsbCk7CisJCWlmICgh b3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09M VU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRl bnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJCWdldF9yZWxvcHRpb25zKCZjdHgt PmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIp OyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlSZWxlYXNlU3lzQ2FjaGUoYXR0VHVw KTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlDUkVBVEUgSU5ERVggcGVyIG5v bi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRpb24uCisgKgkJSW5kZXhlcyB0 aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkCisg KgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50cyAodGhlIEFMVEVSIFRBQkxF IC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVhdGVzIHRoZSBpbmRleCBpbXBs aWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQg KmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAo IWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9JTkRFWCkpCisJCXJldHVybjsK KworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0eC0+cmVsKTsKKwlmb3JlYWNo KGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJ Y2hhcgkgICAqaWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdldF9pbmRleF9jb25zdHJhaW50 KGlkeG9pZCkpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0gcGdfZ2V0X2luZGV4ZGVmX2Rk bChpZHhvaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5n SW5mbygmY3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlw ZnJlZShpZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRzKTsKK30KKworLyoKKyAqIGVt aXRfbG9jYWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg Zm9yIGVhY2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAqCQlvbiB0aGUgcmVsYXRpb24u ICBJbmhlcml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFsc2UpIGNvbWUKKyAqCQlmcm9t IHRoZSBwYXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBhcmUgZW1pdHRlZCBpbmxpbmUg Zm9yCisgKgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVyZSkgYnV0IG91dC1vZi1saW5l IGZvciBwYXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1uIGxpc3QgdG8gbGl2ZSBpbiku ICBMb2NhbCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0dGlzbG9jYWwgY29sdW1ucyAt IHdoZXRoZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRoZSBhdXRvLW5hbWUgcGF0dGVy biAtIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1bW4tZW1pdCBoZWxwZXJzIGFu ZCBhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisgKgkJYmVjYXVzZSBQRyBvbmx5 IGFsbG93cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291bGQgcmVqZWN0CisgKgkJYSBz ZWNvbmQgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAgUGFydGl0aW9uIGNoaWxkcmVu CisgKgkJaGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9UIE5VTExzIGZhbGwgdGhyb3Vn aCBoZXJlLgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gdGhlIG1hdGNoaW5nIGtp bmQgaW4gdGhlIG9ubHkgLyBleGNlcHQKKyAqCQl2b2NhYnVsYXJ5LCBzbyBjYWxsZXJzIGNhbiBw cm9kdWNlIGUuZy4gYW4gRkstb25seSBwYXNzCisgKgkJKG9ubHkgPT4gJ2ZvcmVpZ25fa2V5Jykg b3IgYSBwdWIvc3ViIGNsb25lIHRoYXQga2VlcHMgb25seQorICoJCXRoZSBwcmltYXJ5IGtleSAo ZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJykuCisgKgkJTk9U IE5VTEwgaXMgaW50ZW50aW9uYWxseSBub3QgaW4gdGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1p dHRlZAorICoJCXNvIGNsb25lZCBzY2hlbWFzIGRvbid0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0 aGUgc291cmNlIHdvdWxkCisgKgkJaGF2ZSByZWplY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2Vt aXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVsYXRpb24J Y29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhl YXBUdXBsZQljb25UdXA7CisJYm9vbAkJaXNfcGFydGl0aW9uID0gY3R4LT5yZWwtPnJkX3JlbC0+ cmVsaXNwYXJ0aXRpb247CisJTGlzdAkgICAqZmtfc3RtdHMgPSBOSUw7CisKKwljb25SZWwgPSB0 YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5L ZXlJbml0KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+ cmVsaWQpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWlu dFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkp OworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChj b25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3Ry YWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQlj b250aW51ZTsKKworCQkvKgorCQkgKiBFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gaXRzIGtpbmQg aW4gdGhlIG9ubHkgLyBleGNlcHQKKwkJICogdm9jYWJ1bGFyeS4gIENIRUNLIGlzIGFsc28gc2tp cHBlZCBmb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICogYmVjYXVzZSBhcHBlbmRfaW5s aW5lX2NoZWNrX2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGluZSBpbgorCQkgKiB0aGUgQ1JF QVRFIFRBQkxFIGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZlIG5vIGNvbHVtbiBsaXN0CisJ CSAqIHRvIGxpdmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRoaXMgbG9vcC4gIE5PVCBOVUxM IGlzIG5vdCBhCisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0ZWQgdW5jb25kaXRpb25hbGx5 IHRvIGF2b2lkIHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5V TExzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3RlZC4KKwkJICovCisJCXN3aXRj aCAoY29uLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQlp ZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSkpCisJ CQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJ CQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9VTklRVUUpKQorCQkJ CQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQlp ZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSykpCisJCQkJCWNv bnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMsIENI RUNLIGlzIG5vcm1hbGx5IGVtaXR0ZWQKKwkJCQkgKiBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJM RSBib2R5IGJ5CisJCQkJICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cywgc28gd2Ug c2tpcCBpdCBoZXJlIHRvCisJCQkJICogYXZvaWQgZG91YmxlIGVtaXNzaW9uLiAgQnV0IHdoZW4g S0lORF9UQUJMRSBpcyBub3QgaW4KKwkJCQkgKiB0aGUgYWN0aXZlIGZpbHRlciAoZS5nLiBvbmx5 PT4nY2hlY2snIG9yIGEgY2xvbmUgdGhhdAorCQkJCSAqIHRhcmdldHMgb25seSBzdWItb2JqZWN0 cyksIHRoZSBpbmxpbmUgcGFzcyBuZXZlciBydW5zOworCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQg ZW1pdCBlYWNoIENIRUNLIHZpYSBBTFRFUiBUQUJMRSBzbyB0aGUKKwkJCQkgKiB1c2VyIGFjdHVh bGx5IGdldHMgdGhlIGNvbnN0cmFpbnQgdGhleSBhc2tlZCBmb3IuCisJCQkJICovCisJCQkJaWYg KCFpc19wYXJ0aXRpb24gJiYKKwkJCQkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9L SU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJ TlRfRk9SRUlHTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lO RF9GT1JFSUdOX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05T VFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9FWENMVVNJT04pKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug Q09OU1RSQUlOVF9OT1ROVUxMOgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9UIE5VTEwg aXMgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlvbjogZ2F0 aW5nIGl0IG9uIEtJTkRfVEFCTEUgbWVhbnMgYW4KKwkJCQkgKiBvbmx5PWZvcmVpZ25fa2V5IHNl Y29uZCBwYXNzIGRvZXMgbm90IHJlLWVtaXQKKwkJCQkgKiBOT1QgTlVMTHMgdGhhdCB0aGUgZmly c3QgcGFzcyBhbHJlYWR5IGNyZWF0ZWQsCisJCQkJICogd2hpbGUgdGhlIG5vLW9wdGlvbnMgZGVm YXVsdCBzdGlsbCBlbWl0cyB0aGVtLgorCQkJCSAqLworCQkJCWlmICghaXNfa2luZF9pbmNsdWRl ZChjdHgsIFRBQkxFX0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFp c19wYXJ0aXRpb24gJiYKKwkJCQkJbGlzdF9tZW1iZXJfb2lkKGN0eC0+c2tpcF9ub3RudWxsX29p ZHMsIGNvbi0+b2lkKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCS8qCisJCQkJICogQW55IGZ1dHVyZSBjb250eXBlIHRoZSB2b2NhYnVsYXJ5IGRvZXMgbm90 IHlldCBjb3ZlcjoKKwkJCQkgKiBmYWxsIHRocm91Z2ggYW5kIGVtaXQgaXQgdmlhIHBnX2dldF9j b25zdHJhaW50ZGVmX2NvbW1hbmQsCisJCQkJICogbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGxvb3An cyAiZW1pdCB1bmxlc3MgZmlsdGVyZWQiCisJCQkJICogYmVoYXZpb3IuICBUaGlzIGlzIHVucmVh Y2hhYmxlIGluIGN1cnJlbnQgUEcgKGV2ZXJ5CisJCQkJICogY29udHlwZSBhYm92ZSBpcyBlbnVt ZXJhdGVkKSBidXQga2VwdCBkZWZlbnNpdmUgYWdhaW5zdAorCQkJCSAqIGEgbmV3IGNvbnR5cGUg YmVpbmcgaW50cm9kdWNlZC4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCWNo YXIJICAgKmNvbmJvZHkgPSBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KGNvbi0+b2lkKTsKKwor CQkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgt PmJ1ZiwgIkFMVEVSIFRBQkxFICVzIEFERCBDT05TVFJBSU5UICVzICVzOyIsCisJCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5h bWUpKSwKKwkJCQkJCQkgY29uYm9keSk7CisKKwkJCS8qCisJCQkgKiBEZWZlciBGSyBzdGF0ZW1l bnRzIHNvIHRoZXkgYXJlIGVtaXR0ZWQgYWZ0ZXIgYWxsIG90aGVyCisJCQkgKiBjb25zdHJhaW50 cy4gIEEgc2VsZi1yZWZlcmVuY2luZyBGSyAoUkVGRVJFTkNFUyBzYW1lX3RhYmxlKQorCQkJICog cmVxdWlyZXMgdGhlIFBLL1VOSVFVRSBpdCB0YXJnZXRzIHRvIGV4aXN0IGZpcnN0LCBhbmQgYmVj YXVzZQorCQkJICogdGhlIGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGluIG5hbWUg b3JkZXIsIGFuIEZLIHdob3NlCisJCQkgKiBuYW1lIHNvcnRzIGJlZm9yZSB0aGUgUEsgbmFtZSB3 b3VsZCBvdGhlcndpc2UgYmUgZW1pdHRlZCBmaXJzdAorCQkJICogYW5kIGZhaWwgd2l0aCAidGhl cmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQgbWF0Y2hpbmcgZ2l2ZW4KKwkJCSAqIGtleXMiLgor CQkJICovCisJCQlpZiAoY29uLT5jb250eXBlID09IENPTlNUUkFJTlRfRk9SRUlHTikKKwkJCQlm a19zdG10cyA9IGxhcHBlbmQoZmtfc3RtdHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkpOworCQkJ ZWxzZQorCQkJCWFwcGVuZF9zdG10KGN0eCk7CisKKwkJCXBmcmVlKGNvbmJvZHkpOworCQl9CisJ fQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCisJLyogQXBwZW5kIGRlZmVycmVkIEZLIHN0YXRlbWVudHMgYWZ0ZXIg YWxsIG90aGVyIGNvbnN0cmFpbnRzLiAqLworCWN0eC0+c3RhdGVtZW50cyA9IGxpc3RfY29uY2F0 KGN0eC0+c3RhdGVtZW50cywgZmtfc3RtdHMpOworfQorCisvKgorICogZW1pdF9ydWxlcworICoJ CUNSRUFURSBSVUxFIHBlciBjYWNoZWQgcmV3cml0ZSBydWxlIG9uIHRoZSByZWxhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK2VtaXRfcnVsZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJaWYg KCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUlVMRSkgfHwKKwkJY3R4LT5y ZWwtPnJkX3J1bGVzID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaW50IGkgPSAwOyBpIDwg Y3R4LT5yZWwtPnJkX3J1bGVzLT5udW1Mb2NrczsgaSsrKQorCXsKKwkJT2lkCQkJcnVsZWlkID0g Y3R4LT5yZWwtPnJkX3J1bGVzLT5ydWxlc1tpXS0+cnVsZUlkOworCQljaGFyCSAgICpydWxlZGVm X3N0cjsKKworCQlydWxlZGVmX3N0ciA9IHBnX2dldF9ydWxlZGVmX2RkbChydWxlaWQpOworCQly ZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4 LT5idWYsIHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUocnVsZWRl Zl9zdHIpOworCX0KK30KKworLyoKKyAqIGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFURSBTVEFU SVNUSUNTIHBlciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRpb24uCisg Ki8KK3N0YXRpYyB2b2lkCitlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7 CisJUmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0 YSBzdGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVk KGN0eCwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0YXRSZWwg PSB0YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ U2NhbktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eHJlbGlk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihzdGF0UmVs LCBTdGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnN0 YXRLZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3RhYmxlX2dl dG5leHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ID0gKEZv cm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAgICpzdGF0 ZGVmID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKHN0YXQtPm9pZCk7CisKKwkJcmVzZXRT dHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7 Iiwgc3RhdGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0K KwlzeXN0YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nl c3NTaGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxU RVIgVEFCTEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hl biB0aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1 c2UgcHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5 KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFkpKQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVs LT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJl dHVybjsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwt PnJkX3JlbC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJ Tkc6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsK KwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0ZVTEw6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRB QkxFICVzIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsK KwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0lOREVYOgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRl eChjdHgtPnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJ CWNoYXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlk eG5hbWUgPT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVS UkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRp dHkgaW5kZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgp LAorCQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9w cGVkLiIpKSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkg IkFMVEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJ CQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkp OworCQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJ CQl9CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxU RVIgVEFCTEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICov CitzdGF0aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sK KwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9STFMpKQorCQlyZXR1 cm47CisKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93c2VjdXJpdHkpCisJeworCQlyZXNl dFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJ CQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJ CSBjdHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0eC0+cmVs LT5yZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0 eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRB QkxFICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUp OworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoKKyAqIGVtaXRfcGFydGl0aW9uX2No aWxkcmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlv bmVkLXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBjYWxsIHBnX2dldF90YWJsZV9kZGxf aW50ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJCXN0YXRlbWVudHMuICBFYWNoIGNo aWxkJ3Mgb3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0aGUgc2Ft ZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3BhcnRpdGlvbl9jaGlsZHJlbihU YWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAg ICpsYzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJ VElPTikgfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElP TkVEX1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hp bGRyZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJl bikKKwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxlRGRsQ29u dGV4dCBjaGlsZGN0eCA9IHswfTsKKwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkvKgorCQkg KiBFYWNoIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWwsIG5hbWVz cGFjZSwKKwkJICogcXVhbG5hbWUsIE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBzdGF0ZW1l bnQgbGlzdCBpbnNpZGUKKwkJICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRoZSB1c2Vy LXN1cHBsaWVkIG9wdGlvbiBmaWVsZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3aXRoIG9u ZSBleGNlcHRpb246IEtJTkRfUEFSVElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQgdGhhdCBj b250cm9scyB3aGV0aGVyIHdlIHJlY3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5kIHRoYXQg dGhlIGNoaWxkcmVuIHRoZW1zZWx2ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRlZAorCQkg KiBhbiBvbmx5LXNldCB0aGF0IGNvbnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxkLCB0aGUg Y2hpbGQKKwkJICogd291bGQgbm90IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJTkRfVEFC TEUgYWJzZW50KSBub3IKKwkJICogYW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vyc2lvbiB3 b3VsZCBwcm9kdWNlIG5vdGhpbmcuICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0IG9mIG9u bHlfa2luZHMgd2hlbiByZWN1cnNpbmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUgc2V0LCBk cm9wIHRoZSBmaWx0ZXIgZW50aXJlbHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0cyBmdWxs IERETC4gIGV4Y2VwdF9raW5kcyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVzZQorCQkg KiBQQVJUSVRJT04gaW4gdGhlIGV4Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZyb20gZ2V0 dGluZworCQkgKiBoZXJlLgorCQkgKi8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9pZDsKKwkJ Y2hpbGRjdHgucHJldHR5ID0gY3R4LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVyID0gY3R4 LT5ub19vd25lcjsKKwkJY2hpbGRjdHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFibGVzcGFj ZTsKKwkJY2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxpZmllZDsK KwkJY2hpbGRjdHgub25seV9raW5kcyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRjdHguZXhj ZXB0X2tpbmRzID0gY3R4LT5leGNlcHRfa2luZHM7CisKKwkJLyoKKwkJICogV2hlbiBzY2hlbWFf cXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUgY29udHJhY3QgaXMgdGhhdCB0aGUgb3V0cHV0CisJCSAq IGlzIHJlcGxheWFibGUgd2l0aCB0aGUgcGFyZW50J3Mgc2NoZW1hIGluIHNlYXJjaF9wYXRoLiAg VGhhdAorCQkgKiBjb250cmFjdCBjYW5ub3QgaG9sZCBmb3IgYSBjaGlsZCB0aGF0IGxpdmVzIGlu IGEgZGlmZmVyZW50IHNjaGVtYToKKwkJICogaXRzIG93biBuYW1lIHdvdWxkIGJlIGFtYmlndW91 cyAobGFuZGluZyBpbiB3aGF0ZXZlciBzY2hlbWEgaXMKKwkJICogZmlyc3QgaW4gc2VhcmNoX3Bh dGgpIGFuZCByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIHBhcmVudCB3b3VsZCBoYXZlCisJCSAqIHRv IGJlIHNjaGVtYS1xdWFsaWZpZWQgYW55d2F5LiAgRm9yY2UgZnVsbCBxdWFsaWZpY2F0aW9uIHNv IHRoZQorCQkgKiBjaGlsZCdzIERETCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9mIHRoZSBj YWxsZXIncyBzZWFyY2hfcGF0aC4KKwkJICovCisJCWlmICghY2hpbGRjdHguc2NoZW1hX3F1YWxp ZmllZCAmJgorCQkJZ2V0X3JlbF9uYW1lc3BhY2UoY2hpbGRvaWQpICE9IGN0eC0+YmFzZV9uYW1l c3BhY2UpCisJCQljaGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKworCQlpZiAoY2hp bGRjdHgub25seV9raW5kcyAhPSBOVUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxF X0RETF9LSU5EX1BBUlRJVElPTiwKKwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsK KwkJCUJpdG1hcHNldCAgKmNoaWxkX29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRz KTsKKworCQkJY2hpbGRfb25seSA9IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJ CQkJKGludCkgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHko Y2hpbGRfb25seSkpCisJCQl7CisJCQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRj dHgub25seV9raW5kcyA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9r aW5kcyA9IGNoaWxkX29ubHk7CisJCX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2Rk bF9pbnRlcm5hbCgmY2hpbGRjdHgpOworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChj dHgtPnN0YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOwor fQorCisvKgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBz dGF0ZW1lbnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAq CisgKiBUaGUgY2FsbGVyIGluaXRpYWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBv cHRpb24gZmllbGRzCisgKiAocmVsaWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2Us IHNjaGVtYV9xdWFsaWZpZWQsCisgKiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBm dW5jdGlvbiBvcGVucyB0aGUgcmVsYXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0 ZXMgdGhlIGRlcml2ZWQgZmllbGRzIChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4u KSwgcnVucyB0aGUgZW1pc3Npb24gcGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxh dGVkIHN0YXRlbWVudCBsaXN0LgorICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRz IGlzX2tpbmRfaW5jbHVkZWQoKSB0byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4g IFRoZSB0YWJsZS1wcm9wZXIgcGFzc2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRF UiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFy ZQorICogZ3JvdXBlZCB1bmRlciBLSU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVj dC1vbmx5IHdvcmtmbG93CisgKiBpcyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4 Y2VwdCBsaXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZv bGRlZCBidXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29t ZSBhIHNpbmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJp Z2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBM aXN0ICoKK3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7 CisJUmVsYXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsK KworCXJlbCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl bGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0 IG9ubHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAor CSAqIG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3Np dGUgdHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cu CisJICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1 cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9X Uk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFy eSBvciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENh bGxlciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICov CisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCks IEFDTF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNr X2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4 IHdvdWxkIG5vdCBiZSBlbWl0dGVkIHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBl bWl0dGVkIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0 aGUgc2FtZSBEREwKKwkgKiBuZXZlciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdv dWxkIGVtaXQgdGhlIGluZGV4IChvbmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4 Y2x1c2lvbiBmb3IgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhl IGdlbmVyaWMgImluZGV4IiBraW5kKSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAq IHdoZW5ldmVyICJyZXBsaWNhX2lkZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRf aW5jbHVkZWQgc28KKwkgKiBpdCBjb3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNl cHQiIGxpc3QgdGhhdCBvbWl0cyB0aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBs aXN0IHRoYXQgb21pdHMgaXQuCisJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQg PT0gUkVQTElDQV9JREVOVElUWV9JTkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFC TEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVs YXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkK KwkJeworCQkJVGFibGVEZGxLaW5kIGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJ CQlPaWQJCQljb25vaWQgPSBnZXRfaW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYg KE9pZElzVmFsaWQoY29ub2lkKSkKKwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNo U3lzQ2FjaGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25v aWQpKTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlG b3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNv blR1cCk7CisKKwkJCQkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2Ug Q09OU1RSQUlOVF9QUklNQVJZOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJ TUFSWV9LRVk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgor CQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOwor CQkJCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxF X0RETF9LSU5EX0VYQ0xVU0lPTjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJ CQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQor CQkJfQorCisJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJ CQkJY2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSk7CisJCQkJY29uc3QgY2hhciAqaWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50 KSBpZHhfa2luZF0ubmFtZTsKKworCQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJs ZSBcIiVzXCIgcmVxdWlyZXMga2luZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJl bG5hbWUsIGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUg XCIlc1wiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJ CQkgICBpZHhfbmFtZSksCisJCQkJCQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhl IGZpbHRlciBvciByZW1vdmUgXCJyZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJ CQkgaWR4X25hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2 ZWQgZmllbGRzIG5vdyB0aGF0IHRoZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJ ICogVGhlIHJlbWFpbmluZyBkZXJpdmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxs X29pZHMsIGJ1ZiwKKwkgKiBzdGF0ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIn cyBgVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBO VUxMIGNhY2hlIGlzIHBvcHVsYXRlZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRo ZSBidWZmZXIgaXMgaW5pdFN0cmluZ0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMg dG8KKwkgKiBzdGF0ZW1lbnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOwor CWN0eC0+YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+ c2F2ZV9uZXN0bGV2ZWwgPSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9y X2VtaXQoY3R4LT5yZWxpZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgt PmJhc2VfbmFtZXNwYWNlKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3ZlcnJpZGUgc2VhcmNo X3BhdGggc28gdGhhdCB0aGUgcnVsZXV0aWxzIGhlbHBlcnMKKwkgKiAocGdfZ2V0X2luZGV4ZGVm X2RkbCwgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwKKwkgKiBwZ19nZXRfc3RhdGlzdGljc29i amRlZl9kZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwgZXRjLikgcHJvZHVjZSBuYW1lcworCSAqIHRo YXQgbWF0Y2ggdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4gIFRob3NlIGhlbHBlcnMgZGVjaWRl IHdoZXRoZXIgdG8KKwkgKiBxdWFsaWZ5IGEgbmFtZSBieSBjYWxsaW5nIFJlbGF0aW9uSXNWaXNp YmxlKCksIHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIG9iamVjdCdzIHNjaGVtYSBhcHBl YXJzIGluIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGguCisJICoKKwkgKiBzY2hlbWFfcXVhbGlmaWVk ID0gZmFsc2U6IG5hcnJvdyB0byB0aGUgYmFzZSBzY2hlbWEgc28gdGhhdCBzYW1lLXNjaGVtYQor CSAqIHJlZmVyZW5jZXMgaW4gREVGQVVMVCBleHByZXNzaW9ucywgRksgdGFyZ2V0cywgaW5kZXhl cywgcnVsZXMsIGFuZAorCSAqIHN0YXRpc3RpY3MgY29tZSBvdXQgdW5xdWFsaWZpZWQgYXV0b21h dGljYWxseS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisJICogc3RheSBxdWFsaWZpZWQsIHdo aWNoIGlzIHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKgorCSAqIHNjaGVtYV9xdWFs aWZpZWQgPSB0cnVlOiBuYXJyb3cgdG8gcGdfY2F0YWxvZyBvbmx5IHNvIHRoYXQgb2JqZWN0cyBp bgorCSAqIHRoZSBiYXNlIHNjaGVtYSAob3IgYW55IHVzZXIgc2NoZW1hIHRoZSBjYWxsZXIgcGxh Y2VkIG9uIHNlYXJjaF9wYXRoKQorCSAqIGFyZSBub3QgcmVhY2hhYmxlIHdpdGhvdXQgcXVhbGlm aWNhdGlvbiwgZm9yY2luZyBmdWxseS1xdWFsaWZpZWQgb3V0cHV0CisJICogZnJvbSBldmVyeSBo ZWxwZXIgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbiBzZWFyY2hfcGF0aC4KKwkg KgorCSAqIEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhpbmcgdGhy b3dzIGJldHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxvdzsgb24g dGhlIG5vcm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJuaW5nLgor CSAqLworCWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAqbnNwbmFt ZSA9IGdldF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNw bmFtZSAhPSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmll cihuc3BuYW1lKTsKKworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgp OworCQkJKHZvaWQpIHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3AsCisJCQkJ CQkJCQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FDVElPTl9T QVZFLCB0cnVlLCAwLCBmYWxzZSk7CisJCQlpZiAocW5zcCAhPSBuc3BuYW1lKQorCQkJCXBmcmVl KChjaGFyICopIHFuc3ApOworCQkJcGZyZWUobnNwbmFtZSk7CisJCX0KKwl9CisJZWxzZQorCXsK KwkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkodm9pZCkgc2V0 X2NvbmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgInBnX2NhdGFsb2ciLAorCQkJCQkJCQkgUEdD X1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUs IDAsIGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5V TEwgY29uc3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBj YW4gcHJvZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFt ZWQKKwkgKiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lk IGRvdWJsZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNvbGxlY3Rf bG9jYWxfbm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlpbml0U3Ry aW5nSW5mbygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBPcmRlciBp cyBzaWduaWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0aGUgcGVy LWNvbHVtbiBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOwor CSAqIHN1Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4ZXMgYmVm b3JlIGNvbnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4ZXMgYXJl IGVtaXR0ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsgcGFydGl0 aW9uIGNoaWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAqIGF0IHJl cGxheSB0aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5jbHVkZWQg Zm9yIHRoZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0YWJsZSBp dHNlbGYiIHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJMRSBzbyBh bGwgb2YgQ1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VUICguLi4p IGRyb3Agb3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWItb2JqZWN0 cworCSAqIChlLmcuIG9ubHkgPT4gJ2ZvcmVpZ25fa2V5JyBmb3IgdGhlIHNlY29uZCBwYXNzIG9m IGEgdHdvLXBhc3MgRksKKwkgKiBjbG9uZSkuCisJICovCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQo Y3R4LCBUQUJMRV9ERExfS0lORF9UQUJMRSkpCisJeworCQllbWl0X2NyZWF0ZV90YWJsZV9zdG10 KGN0eCk7CisJCWVtaXRfb3duZXJfc3RtdChjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1bHRfb3Zl cnJpZGVzKGN0eCk7CisJCWVtaXRfYXR0b3B0aW9ucyhjdHgpOworCX0KKwllbWl0X2luZGV4ZXMo Y3R4KTsKKwllbWl0X2xvY2FsX2NvbnN0cmFpbnRzKGN0eCk7CisJZW1pdF9ydWxlcyhjdHgpOwor CWVtaXRfc3RhdGlzdGljcyhjdHgpOworCWVtaXRfcmVwbGljYV9pZGVudGl0eShjdHgpOworCWVt aXRfcmxzX3RvZ2dsZXMoY3R4KTsKKworCS8qCisJICogVHJpZ2dlcnMgYW5kIHJvdy1sZXZlbCBz ZWN1cml0eSBwb2xpY2llcyAtIGRpc2FibGVkIHVudGlsIHRoZQorCSAqIHN0YW5kYWxvbmUgcGdf Z2V0X3RyaWdnZXJfZGRsKCkgYW5kIHBnX2dldF9wb2xpY3lfZGRsKCkgaGVscGVycyBsYW5kLgor CSAqIFRoZSBzY2FuICsgbG9jayArIGZpbHRlciBzY2FmZm9sZGluZyBiZWxvdyBpcyBwcmVzZXJ2 ZWQgKGluc2lkZSAjaWYgMCkKKwkgKiBzbyB3aXJpbmcgdXAgZWFjaCBlbWlzc2lvbiBiZWNvbWVz IGEgb25lLWxpbmVyIGluIHRoZSBsb29wIGJvZHkgb25jZQorCSAqIHRob3NlIGhlbHBlcnMgYXJl IGF2YWlsYWJsZS4KKwkgKi8KKyNpZiAwCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJM RV9ERExfS0lORF9UUklHR0VSKSkKKwl7CisJCVJlbGF0aW9uCXRyaWdSZWw7CisJCVN5c1NjYW5E ZXNjIHRyaWdTY2FuOworCQlTY2FuS2V5RGF0YSB0cmlnS2V5OworCQlIZWFwVHVwbGUJdHJpZ1R1 cDsKKworCQl0cmlnUmVsID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJU2NhbktleUluaXQoJnRyaWdLZXksCisJCQkJCUFudW1fcGdfdHJpZ2dlcl90 Z3JlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVj dElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCQl0cmlnU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bih0cmlnUmVsLCBUcmlnZ2VyUmVsaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1ZSwgTlVM TCwgMSwgJnRyaWdLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0cmlnVHVwID0gc3lz dGFibGVfZ2V0bmV4dCh0cmlnU2NhbikpKQorCQl7CisJCQlGb3JtX3BnX3RyaWdnZXIgdHJnID0g KEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQlpZiAodHJnLT50Z2lz aW50ZXJuYWwpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfdHJp Z2dlcl9kZGwodHJnLT5vaWQpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2VuZHNj YW4odHJpZ1NjYW4pOworCQl0YWJsZV9jbG9zZSh0cmlnUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CX0KKworCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUE9MSUNZKSkK Kwl7CisJCVJlbGF0aW9uCXBvbFJlbDsKKwkJU3lzU2NhbkRlc2MgcG9sU2NhbjsKKwkJU2Nhbktl eURhdGEgcG9sS2V5OworCQlIZWFwVHVwbGUJcG9sVHVwOworCisJCXBvbFJlbCA9IHRhYmxlX29w ZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJU2NhbktleUluaXQoJnBv bEtleSwKKwkJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJ CXBvbFNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocG9sUmVsLCBQb2xpY3lQb2xyZWxpZFBvbG5h bWVJbmRleElkLAorCQkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZwb2xLZXkpOworCQl3aGlsZSAo SGVhcFR1cGxlSXNWYWxpZChwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHBvbFNjYW4pKSkKKwkJ eworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF9wb2xpY3lfZGRsKHJlbGlkLCBwb2xuYW1lKSBv dXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRzY2FuKHBvbFNjYW4pOworCQl0YWJs ZV9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorI2VuZGlmCisKKwllbWl0X3Bh cnRpdGlvbl9jaGlsZHJlbihjdHgpOworCisJeworCQlpbnQJCQluYXR0cyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKS0+bmF0dHM7CisKKwkJZm9yIChpbnQgaSA9IDE7IGkgPD0gbmF0dHM7IGkrKykK KwkJCWlmIChjdHgtPm5uX2VudHJpZXNbaV0ubmFtZSAhPSBOVUxMKQorCQkJCXBmcmVlKGN0eC0+ bm5fZW50cmllc1tpXS5uYW1lKTsKKwl9CisJcGZyZWUoY3R4LT5ubl9lbnRyaWVzKTsKKworCXRh YmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlwZnJlZShjdHgtPmJ1Zi5kYXRhKTsK KwlwZnJlZShjdHgtPnF1YWxuYW1lKTsKKwlsaXN0X2ZyZWUoY3R4LT5za2lwX25vdG51bGxfb2lk cyk7CisKKwkvKgorCSAqIFBvcCB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggbm93IHRoYXQgYWxs IGhlbHBlcnMgaGF2ZSBydW4uICBFcnJvcnMKKwkgKiB0aHJvd24gZWFybGllciBhcmUgY2xlYW5l ZCB1cCBieSBBdEVPWGFjdF9HVUMgYXQgeGFjdCBlbmQuCisJICovCisJaWYgKGN0eC0+c2F2ZV9u ZXN0bGV2ZWwgPj0gMCkKKwkJQXRFT1hhY3RfR1VDKHRydWUsIGN0eC0+c2F2ZV9uZXN0bGV2ZWwp OworCisJcmV0dXJuIGN0eC0+c3RhdGVtZW50czsKK30KKworLyoKKyAqIHBnX2dldF90YWJsZV9k ZGwKKyAqCQlSZXR1cm4gRERMIHRvIHJlY3JlYXRlIGEgdGFibGUgYXMgYSBzZXQgb2YgdGV4dCBy b3dzLgorICovCitEYXR1bQorcGdfZ2V0X3RhYmxlX2RkbChQR19GVU5DVElPTl9BUkdTKQorewor CUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlMaXN0CSAgICpzdGF0ZW1lbnRzOworCisJaWYg KFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwkJ VGFibGVEZGxDb250ZXh0IGN0eCA9IHswfTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9J TklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVs dGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQl7CisJCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCQlTUkZfUkVUVVJOX0RPTkUoZnVu Y2N0eCk7CisJCX0KKworCQlpZiAoIVBHX0FSR0lTTlVMTCg1KSAmJiAhUEdfQVJHSVNOVUxMKDYp KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIlwib25seV9raW5kc1wiIGFuZCBcImV4Y2VwdF9r aW5kc1wiIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKSk7CisKKwkJLyogT3B0 aW9uIGRlZmF1bHRzIChtYXRjaCBwcm9hcmdkZWZhdWx0cyBpbiBwZ19wcm9jLmRhdCkuICovCisJ CWN0eC5yZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCWN0eC5wcmV0dHkgPSBmYWxzZTsKKwkJ Y3R4Lm5vX293bmVyID0gZmFsc2U7CQkvKiBvd25lciBERUZBVUxUIHRydWUgIC0+IG5vX293bmVy ID0gZmFsc2UgKi8KKwkJY3R4Lm5vX3RhYmxlc3BhY2UgPSBmYWxzZTsJLyogdGFibGVzcGFjZSBE RUZBVUxUIHRydWUgLT4gbm9fdGFibGVzcGFjZSA9IGZhbHNlICovCisJCWN0eC5zY2hlbWFfcXVh bGlmaWVkID0gdHJ1ZTsKKwkJY3R4Lm9ubHlfa2luZHMgPSBOVUxMOworCQljdHguZXhjZXB0X2tp bmRzID0gTlVMTDsKKworCQkvKiBPdmVycmlkZSBkZWZhdWx0cyB3aXRoIGFueSBleHBsaWNpdGx5 IHN1cHBsaWVkIHZhbHVlcy4gKi8KKwkJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCQljdHgucHJl dHR5ID0gUEdfR0VUQVJHX0JPT0woMSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDIpKQorCQkJY3R4 Lm5vX293bmVyID0gIVBHX0dFVEFSR19CT09MKDIpOworCQlpZiAoIVBHX0FSR0lTTlVMTCgzKSkK KwkJCWN0eC5ub190YWJsZXNwYWNlID0gIVBHX0dFVEFSR19CT09MKDMpOworCQlpZiAoIVBHX0FS R0lTTlVMTCg0KSkKKwkJCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gUEdfR0VUQVJHX0JPT0woNCk7 CisJCWlmICghUEdfQVJHSVNOVUxMKDUpKQorCQkJY3R4Lm9ubHlfa2luZHMgPSBwYXJzZV9raW5k X2FycmF5KCJvbmx5X2tpbmRzIiwKKwkJCQkJCQkJCQkJICBQR19HRVRBUkdfQVJSQVlUWVBFX1Ao NSkpOworCQlpZiAoIVBHX0FSR0lTTlVMTCg2KSkKKwkJCWN0eC5leGNlcHRfa2luZHMgPSBwYXJz ZV9raW5kX2FycmF5KCJleGNlcHRfa2luZHMiLAorCQkJCQkJCQkJCQkJUEdfR0VUQVJHX0FSUkFZ VFlQRV9QKDYpKTsKKworCQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCgm Y3R4KTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0eC0+bWF4 X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOwor CXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0 eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAqc3RtdDsK KworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKKwor CQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10KSk7CisJ fQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZfUkVUVVJO X0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDg4 ZGU1YzA0ODFjLi43MTg2Y2Y4M2UxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAt MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlk LmgiCkBAIC0zNzAsNyArMzcxLDcgQEAgc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3JhcGhkZWZfZWxl bWVudHMoU3RyaW5nSW5mbyBidWYsIE9pZCBwZ3JlbGlkLCBjaGFyIHBnZWtpbmQKIHN0YXRpYyB2 b2lkIG1ha2VfcHJvcGdyYXBoZGVmX2xhYmVscyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIGVsaWQsIGNv bnN0IGNoYXIgKmVsYWxpYXMsIE9pZCBlbHJlbGlkKTsKIHN0YXRpYyB2b2lkIG1ha2VfcHJvcGdy YXBoZGVmX3Byb3BlcnRpZXMoU3RyaW5nSW5mbyBidWYsIE9pZCBlbGxhYmVsaWQsIE9pZCBlbHJl bGlkKTsKIHN0YXRpYyBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRl eHRpZCwgYm9vbCBjb2x1bW5zX29ubHksCi0JCQkJCQkJCQkJIGJvb2wgbWlzc2luZ19vayk7CisJ CQkJCQkJCQkJIGJvb2wgbWlzc2luZ19vaywgaW50IHByZXR0eUZsYWdzKTsKIHN0YXRpYyBjaGFy ICpwZ19nZXRfcGFydGtleWRlZl93b3JrZXIoT2lkIHJlbGlkLCBpbnQgcHJldHR5RmxhZ3MsCiAJ CQkJCQkJCQkgIGJvb2wgYXR0cnNPbmx5LCBib29sIG1pc3Npbmdfb2spOwogc3RhdGljIGNoYXIg KnBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihPaWQgY29uc3RyYWludElkLCBib29sIGZ1bGxD b21tYW5kLApAQCAtNjAzLDYgKzYwNCwxOSBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdfRlVOQ1RJ T05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisv KgorICogcGdfZ2V0X3J1bGVkZWZfZGRsCisgKgkJTGlrZSBwZ19nZXRfcnVsZWRlZiBidXQgdXNl cyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRvIGRlY2lkZQorICoJCXdoZXRoZXIgdG8gc2NoZW1h LXF1YWxpZnkgdGhlIHJ1bGUncyB0YXJnZXQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3IgdXNlIGJ5 IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisgKgkJ dG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLworY2hh ciAqCitwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpCit7CisJcmV0dXJuIHBnX2dldF9y dWxlZGVmX3dvcmtlcihydWxlb2lkLCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZMQUdfU0NI RU1BKTsKK30KKwogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1 bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEyNDEsNiArMTI1NSwyMiBAQCBwZ19nZXRfaW5k ZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKQogCQkJCQkJCQkgIDAsIGZhbHNlKTsKIH0KIAor LyoKKyAqIHBnX2dldF9pbmRleGRlZl9kZGwKKyAqCQlMaWtlIHBnX2dldF9pbmRleGRlZl9zdHJp bmcgYnV0IHVzZXMgdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aCB0bworICoJCWRlY2lkZSB3aGV0aGVy IHRvIHNjaGVtYS1xdWFsaWZ5IHRoZSBpbmRleGVkIHJlbGF0aW9uIG5hbWUuCisgKgkJRm9yIHVz ZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFyY2hfcGF0aAor ICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCisgKi8K K2NoYXIgKgorcGdfZ2V0X2luZGV4ZGVmX2RkbChPaWQgaW5kZXhyZWxpZCkKK3sKKwlyZXR1cm4g cGdfZ2V0X2luZGV4ZGVmX3dvcmtlcihpbmRleHJlbGlkLCAwLCBOVUxMLAorCQkJCQkJCQkgIGZh bHNlLCBmYWxzZSwKKwkJCQkJCQkJICB0cnVlLCB0cnVlLAorCQkJCQkJCQkgIFBSRVRUWUZMQUdf U0NIRU1BLCBmYWxzZSk7Cit9CisKIC8qIEludGVybmFsIHZlcnNpb24gdGhhdCBqdXN0IHJlcG9y dHMgdGhlIGtleS1jb2x1bW4gZGVmaW5pdGlvbnMgKi8KIGNoYXIgKgogcGdfZ2V0X2luZGV4ZGVm X2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KQpAQCAtMTk2OSw3ICsxOTk5LDcg QEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlzdGF0 ZXh0aWQgPSBQR19HRVRBUkdfT0lEKDApOwogCWNoYXIJICAgKnJlczsKIAotCXJlcyA9IHBnX2dl dF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCB0cnVlKTsKKwlyZXMgPSBw Z19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgdHJ1ZSwgMCk7CiAK IAlpZiAocmVzID09IE5VTEwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0xOTg0LDcgKzIwMTQs MjAgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIGNoYXIgKgog cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpCiB7Ci0JcmV0dXJu IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxzZSk7CisJ cmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxz ZSwgMCk7Cit9CisKKy8qCisgKiBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwKKyAqCQlMaWtl IHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyBidXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJj aF9wYXRoCisgKgkJdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdGhlIHN0YXRp c3RpY3Mgb2JqZWN0IG5hbWUuCisgKgkJRm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNo IGhhcyBhbHJlYWR5IHNldCBzZWFyY2hfcGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVu IHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3N0YXRpc3RpY3Nv YmpkZWZfZGRsKE9pZCBzdGF0ZXh0aWQpCit7CisJcmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2Jq X3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxzZSwgUFJFVFRZRkxBR19TQ0hFTUEpOwogfQog CiAvKgpAQCAtMTk5Nyw3ICsyMDQwLDcgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfY29sdW1u cyhQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRleHRpZCA9IFBHX0dFVEFSR19PSUQoMCk7 CiAJY2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0 YXRleHRpZCwgdHJ1ZSwgdHJ1ZSk7CisJcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2Vy KHN0YXRleHRpZCwgdHJ1ZSwgdHJ1ZSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJCVBHX1JF VFVSTl9OVUxMKCk7CkBAIC0yMDA5LDcgKzIwNTIsOCBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRl Zl9jb2x1bW5zKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVj b21waWxlIGFuIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0LgogICovCiBzdGF0aWMgY2hhciAq Ci1wZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5z X29ubHksIGJvb2wgbWlzc2luZ19vaykKK3BnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQg c3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwgYm9vbCBtaXNzaW5nX29rLAorCQkJCQkJCWlu dCBwcmV0dHlGbGFncykKIHsKIAlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGV4dHJlYzsKIAlI ZWFwVHVwbGUJc3RhdGV4dHR1cDsKQEAgLTIwNjksMTAgKzIxMTMsMTggQEAgcGdfZ2V0X3N0YXRp c3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1p c3Npbmdfb2spCiAKIAlpZiAoIWNvbHVtbnNfb25seSkKIAl7Ci0JCW5zcCA9IGdldF9uYW1lc3Bh Y2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7Ci0JCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKLQkJCQkJCSBxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihuc3AsCi0JCQkJCQkJCQkJCQkJTmFtZVN0cihzdGF0ZXh0cmVjLT5zdHhu YW1lKSkpOworCQlpZiAoKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19TQ0hFTUEpICYmCisJCQlT dGF0aXN0aWNzT2JqSXNWaXNpYmxlKHN0YXRleHRpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFt ZVN0cihzdGF0ZXh0cmVjLT5zdHhuYW1lKSkpOworCQllbHNlCisJCXsKKwkJCW5zcCA9IGdldF9u YW1lc3BhY2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7CisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJIHF1b3Rl X3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcCwKKwkJCQkJCQkJCQkJCQkJTmFtZVN0cihzdGF0ZXh0 cmVjLT5zdHhuYW1lKSkpOworCQkJcGZyZWUobnNwKTsKKwkJfQogCiAJCS8qCiAJCSAqIERlY29k ZSB0aGUgc3R4a2luZCBjb2x1bW4gc28gdGhhdCB3ZSBrbm93IHdoaWNoIHN0YXRzIHR5cGVzIHRv CkBAIC0yMTYzLDEwICsyMjE1LDkgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBz dGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2spCiAJewogCQlOb2Rl CSAgICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKIAkJY2hhcgkgICAqc3RyOwotCQlpbnQJ CQlwcmV0dHlGbGFncyA9IFBSRVRUWUZMQUdfUEFSRU47CiAKIAkJc3RyID0gZGVwYXJzZV9leHBy ZXNzaW9uX3ByZXR0eShleHByLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UsCi0JCQkJCQkJCQkJcHJl dHR5RmxhZ3MsIDApOworCQkJCQkJCQkJCVBSRVRUWUZMQUdfUEFSRU4sIDApOwogCiAJCWlmIChj b2xubyA+IDApCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIsICIpOwpAQCAtMjU0 NCw2ICsyNTk1LDIwIEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFp bnRJZCkKIAlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwg dHJ1ZSwgMCwgZmFsc2UpOwogfQogCisvKgorICogcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keQor ICoJCVJldHVybnMgdGhlIGNvbnN0cmFpbnQgZGVmaW5pdGlvbiBib2R5IHdpdGhvdXQgdGhlCisg KgkJIkFMVEVSIFRBQkxFIG5hbWUgQUREIENPTlNUUkFJTlQgY25hbWUiIHByZWZpeC4KKyAqCQlG SyB0YXJnZXQgcmVsYXRpb24gbmFtZXMgaW4gdGhlIGJvZHkgYWxyZWFkeSB1c2UKKyAqCQlnZW5l cmF0ZV9yZWxhdGlvbl9uYW1lIChzZWFyY2hfcGF0aC1hd2FyZSkuICBGb3IgdXNlIGJ5CisgKgkJ cGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBidWlsZHMgdGhlIEFMVEVSIFRBQkxFIHByZWZpeCBpdHNl bGYuCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29uc3RyYWlu dElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElk LCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICogQXMgb2YgOS40LCB3ZSBub3cgdXNlIGFu IE1WQ0Mgc25hcHNob3QgZm9yIHRoaXMuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfaW5oZXJpdHMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApp bmRleCBjYzg3NGFiYWFiYi4uMWU0NjNiMDEwNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfaW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRz LmgKQEAgLTU1LDYgKzU1LDcgQEAgREVDTEFSRV9JTkRFWChwZ19pbmhlcml0c19wYXJlbnRfaW5k ZXgsIDIxODcsIEluaGVyaXRzUGFyZW50SW5kZXhJZCwgcGdfaW5oZXJpdHMKIGV4dGVybiBMaXN0 ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9j a21vZGUpOwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQo T2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJCQkJCQkJCQkJCQlMT0NLTU9E RSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVk X3htaW4pOworZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQs IExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogZXh0ZXJuIExpc3QgKmZpbmRfYWxsX2luaGVyaXRvcnMo T2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJCQkJIExpc3QgKipudW1w YXJlbnRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDNjYjg0MzU5YWRmLi5kODZhZjU2 YmE3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NjM0LDYgKzg2MzQsMTQgQEAKICAg cHJvYXJndHlwZXMgPT4gJ3JlZ2RhdGFiYXNlIGJvb2wgYm9vbCBib29sJywKICAgcHJvYXJnbmFt ZXMgPT4gJ3tkYXRhYmFzZSxwcmV0dHksb3duZXIsdGFibGVzcGFjZX0nLAogICBwcm9hcmdkZWZh dWx0cyA9PiAne2ZhbHNlLHRydWUsdHJ1ZX0nLCBwcm9zcmMgPT4gJ3BnX2dldF9kYXRhYmFzZV9k ZGwnIH0sCit7IG9pZCA9PiAnODIxNScsIGRlc2NyID0+ICdnZXQgRERMIHRvIHJlY3JlYXRlIGEg dGFibGUnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfdGFibGVfZGRsJywgcHJvcm93cyA9PiAnNTAn LAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzYnLCBwcm9y ZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIGJvb2wgYm9vbCBi b29sIGJvb2wgX3RleHQgX3RleHQnLAorICBwcm9hcmduYW1lcyA9PiAne3JlbGF0aW9uLHByZXR0 eSxvd25lcix0YWJsZXNwYWNlLHNjaGVtYV9xdWFsaWZpZWQsb25seV9raW5kcyxleGNlcHRfa2lu ZHN9JywKKyAgcHJvYXJnZGVmYXVsdHMgPT4gJ3tmYWxzZSx0cnVlLHRydWUsdHJ1ZSxOVUxMLE5V TEx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDkn LAogICBkZXNjciA9PiAnZGVwYXJzZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHkt cHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xhdGlsZSA9 PiAncycsIHByb3JldHR5cGUgPT4gJ3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAppbmRl eCBjM2Q4NTE4Y2I2Mi4uZDMzNTYzZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBA IC05Miw2ICs5Miw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1cGxlIHR5cGV0 dXBsZSk7CiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlk LCBPbkNvbW1pdEFjdGlvbiBhY3Rpb24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29uX2NvbW1pdF9h Y3Rpb24oT2lkIHJlbGlkKTsKK2V4dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25fY29tbWl0X2Fj dGlvbihPaWQgcmVsaWQpOwogCiBleHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29tbWl0X2FjdGlv bnModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9ucyhib29sIGlz Q29tbWl0KTsKQEAgLTEwOCw0ICsxMDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxiYWNr T3duc1JlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBib29sIFBhcnRD b25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAogCQkJCQkJ CQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0b3Jh Z2VfbmFtZShjaGFyIGMpOworCiAjZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmgKaW5kZXggMjVjMDVlMmY2NDkuLmMzYjNkYzY1YzkzIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdCBQbGFu bmVkU3RtdDsKICNkZWZpbmUgUlVMRV9JTkRFWERFRl9LRVlTX09OTFkJCTB4MDIJLyogaWdub3Jl IGluY2x1ZGVkIGF0dHJpYnV0ZXMgKi8KIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9z dHJpbmcoT2lkIGluZGV4cmVsaWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9kZGwo T2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9p ZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVm X2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkJCSAgdWludDE2IGZs YWdzKTsKQEAgLTM0LDYgKzM1LDcgQEAgZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2Nv bHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRj b25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29uc3RyYWludElk KTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlzdCAqZHBj b250ZXh0LAogCQkJCQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7CiBl eHRlcm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25hbWUsIE9p ZCByZWxpZCk7CkBAIC01NCw1ICs1Niw3IEBAIGV4dGVybiBjaGFyICpnZXRfcmFuZ2VfcGFydGJv dW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOwogZXh0ZXJuIHZvaWQgZ2V0X3JlbG9wdGlv bnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiBleHRlcm4gY2hhciAqcGdf Z2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIGNoYXIg KnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbChPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiBjaGFy ICpwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogUlVM RVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0 X3RhYmxlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90YWJsZV9k ZGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDE2Mzk4Mjkw MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3Rh YmxlX2RkbC5vdXQKQEAgLTAsMCArMSwxMzE2IEBACistLQorLS0gcGdfZ2V0X3RhYmxlX2RkbAor LS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFCTEUgT1dO RVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJsZSBhY3Jv c3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQgcm9sZSBu YW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFyY2hfcGF0 aCA9IHBndGJsX2RkbF90ZXN0OworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtFWSwgTk9U IE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAgIGlkIGlu dCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5vbicgQ09M TEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2lj IChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5v bic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFE RCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0t IElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNlIG9wdGlv bnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQgQlkgREVG QVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRf Y29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyAoaWRfYWx3 YXlzIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTCwgaWRfZGVm YXVsdCBpbnRlZ2VyIEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZIE5PVCBOVUxMKTsK KygxIHJvdykKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRfY3VzdG9tX3Zf c2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAgICAgIE1JTlZB TFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAgICApCispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jdXN0b20gKHYgaW50ZWdlciBHRU5F UkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNSBN SU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7CisoMSBy b3cpCisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xz ICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdBWVMg QVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmdlbl9jb2xz IChjZW50cyBpbnRlZ2VyLCBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoKChj ZW50cyk6Om51bWVyaWMgLyAxMDAuMCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0tIEdlbmVyYXRl ZCB2aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBp bnQsCisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRV QUwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuZ2VuX3ZpcnR1YWwgKGJhc2UgaW50ZWdlciwgZGVyaXZlZCBpbnRlZ2VyIEdFTkVSQVRFRCBB TFdBWVMgQVMgKChiYXNlICogMikpIFZJUlRVQUwpOworKDEgcm93KQorCistLSBTVE9SQUdFIGFu ZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9yIHRoZSB0eXBl KS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9SQUdFIEVYVEVS TkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBSRVNTSU9OIHBn bHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2VfY29scyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnN0b3JhZ2VfY29scyAoYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsIGIgdGV4dCBTVE9SQUdF IE1BSU4sIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKKygxIHJvdykKKworLS0gQ29uc3RyYWlu dHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJM RSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEg aW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5D RVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdl ciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tl eSBVTklRVUUgKGIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNU UkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rl c3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCist LSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChQRyAxNSk6IG51bGwgdmFsdWVzIGFyZSB0cmVh dGVkIGFzIGVxdWFsIGZvcgorLS0gdW5pcXVlbmVzcyBwdXJwb3Nlcywgc28gdGhlIE5VTExTIE5P VCBESVNUSU5DVCBjbGF1c2UgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIG51bGxzX25k ICgKKyAgICBhIGludCwKKyAgICBiIGludCwKKyAgICBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNU IChhLCBiKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbnVsbHNfbmQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5udWxsc19uZCAoYSBpbnRlZ2Vy LCBiIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm51bGxzX25kIEFERCBD T05TVFJBSU5UIG51bGxzX25kX2FfYl9rZXkgVU5JUVVFIE5VTExTIE5PVCBESVNUSU5DVCAoYSwg Yik7CisoMiByb3dzKQorCistLSBJTkNMVURFIGNvbHVtbnMgb24gYSBjb25zdHJhaW50LWJhY2tl ZCBVTklRVUUgaW5kZXggKFBHIDExKTogdGhlCistLSBjb3ZlcmluZyBjb2x1bW5zIGFwcGVhciBp biBhbiBJTkNMVURFICguLi4pIGNsYXVzZSBvbiB0aGUgQUxURVIgVEFCTEUKKy0tIEFERCBDT05T VFJBSU5UIHN0YXRlbWVudCwgbm90IGluIHRoZSBrZXkgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFC TEUgaWR4X2luYyAoCisgICAgaWQgICBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0ZXh0LAor ICAgIGV4dHJhIHRleHQsCisgICAgVU5JUVVFIChuYW1lKSBJTkNMVURFIChleHRyYSkKKyk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9pbmMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2luYyAoaWQgaW50ZWdlciBOT1QgTlVMTCwg bmFtZSB0ZXh0LCBleHRyYSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhf aW5jIEFERCBDT05TVFJBSU5UIGlkeF9pbmNfbmFtZV9leHRyYV9rZXkgVU5JUVVFIChuYW1lKSBJ TkNMVURFIChleHRyYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2luYyBBREQg Q09OU1RSQUlOVCBpZHhfaW5jX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3MpCisKKy0t IEZPUkVJR04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFsIGFjdGlv bnMgYW5kIE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIgdmVyYmF0 aW0gaW4gdGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNfdGd0IChp ZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEgaW50LAor ICAgIGIgaW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQgZmtfY2Fz Y2FkZSAgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVTVFJJQ1Qs CisgICAgQ09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBm a19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBTRVQg TlVMTCwKKyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBSRUZFUkVO Q0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRF IFNFVCBERUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBLRVkgKGQp IFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBN QVRDSCBGVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19hY3RzJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIChhIGludGVnZXIsIGIg aW50ZWdlciwgYyBpbnRlZ2VyLCBkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJTlQgZmtfY2FzY2FkZSBGT1JFSUdOIEtFWSAoYSkgUkVG RVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gVVBEQVRFIFJFU1RSSUNU IE9OIERFTEVURSBDQVNDQURFOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZrX2FjdHMg QUREIENPTlNUUkFJTlQgZmtfbWF0Y2ggRk9SRUlHTiBLRVkgKGQpIFJFRkVSRU5DRVMgcGd0Ymxf ZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE1BVENIIEZVTEw7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19zZXRkZWYgRk9SRUlHTiBLRVkgKGMp IFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE9OIERFTEVURSBTRVQg REVGQVVMVDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIEFERCBDT05TVFJB SU5UIGZrX3NldG51bGwgRk9SRUlHTiBLRVkgKGIpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3Qu ZmtfYWN0c190Z3QoaWQpIE9OIERFTEVURSBTRVQgTlVMTDsKKyg1IHJvd3MpCisKKy0tIE5PVCBF TkZPUkNFRCBmb3JlaWduIGtleSAoUEcgMTcpOiB0aGUgY29uc3RyYWludCBpcyByZWNvcmRlZCBp biB0aGUKKy0tIGNhdGFsb2cgYnV0IG5vdCB2YWxpZGF0ZWQgYnkgdGhlIGVuZ2luZTsgTk9UIEVO Rk9SQ0VEIG11c3QgYXBwZWFyIGluCistLSB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVBVEUg VEFCTEUgbm90ZW5mX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBub3Rl bmYgKAorICAgIGEgaW50LAorICAgIENPTlNUUkFJTlQgbm90ZW5mX2ZrIEZPUkVJR04gS0VZIChh KSBSRUZFUkVOQ0VTIG5vdGVuZl90Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgTk9U IEVORk9SQ0VECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub3RlbmYnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5vdGVuZiAoYSBpbnRlZ2VyKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ub3RlbmYgQUREIENPTlNUUkFJTlQgbm90ZW5m X2ZrIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0Lm5vdGVuZl90Z3Qo aWQpIE5PVCBFTkZPUkNFRDsKKygyIHJvd3MpCisKKy0tIFNlbGYtcmVmZXJlbmNpbmcgRks6IHRo ZSBQSyBtdXN0IGFwcGVhciBiZWZvcmUgdGhlIEZLIHRoYXQgcmVmZXJlbmNlcyBpdC4KKy0tIFRo ZSBjYXRhbG9nIHNjYW4gcmV0dXJucyBjb25zdHJhaW50cyBpbiBuYW1lIG9yZGVyOyB3aXRob3V0 IHRoZSBmaXgsCistLSAic2VsZl9yZWZfcGFyZW50X2lkX2ZrZXkiIHNvcnRzIGJlZm9yZSAic2Vs Zl9yZWZfcGtleSIgYW5kIHRoZSBGSyBBREQKKy0tIENPTlNUUkFJTlQgZmFpbHMgd2l0aCAidGhl cmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQgbWF0Y2hpbmcgZ2l2ZW4ga2V5cyIuCitDUkVBVEUg VEFCTEUgc2VsZl9yZWYgKAorICAgIGlkICAgICAgICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGFy ZW50X2lkIGludCBSRUZFUkVOQ0VTIHNlbGZfcmVmKGlkKQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnc2VsZl9yZWYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnNlbGZfcmVmIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBw YXJlbnRfaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYg QUREIENPTlNUUkFJTlQgc2VsZl9yZWZfcGtleSBQUklNQVJZIEtFWSAoaWQpOworIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LnNlbGZfcmVmIEFERCBDT05TVFJBSU5UIHNlbGZfcmVmX3BhcmVu dF9pZF9ma2V5IEZPUkVJR04gS0VZIChwYXJlbnRfaWQpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rl c3Quc2VsZl9yZWYoaWQpOworKDMgcm93cykKKworLS0gV0lUSE9VVCBPVkVSTEFQUyBvbiBhIFBS SU1BUlkgS0VZIChQRyAxNyk6IHRoZSByYW5nZS10eXBlIHBlcmlvZAorLS0gY29sdW1uIGZvcm1z IGEgdGVtcG9yYWwgcHJpbWFyeSBrZXk7IFdJVEhPVVQgT1ZFUkxBUFMgbXVzdCBhcHBlYXIKKy0t IGluc2lkZSB0aGUga2V5IGNvbHVtbiBsaXN0IGluIHRoZSByZWNvbnN0cnVjdGVkIEFMVEVSIFRB QkxFLgorLS0gQm90aCBjb2x1bW5zIHVzZSByYW5nZSB0eXBlcyB3aXRoIG5hdGl2ZSBHaVNUIHN1 cHBvcnQgc28gbm8KKy0tIGJ0cmVlX2dpc3QgZXh0ZW5zaW9uIGlzIG5lZWRlZC4KK0NSRUFURSBU QUJMRSB0ZW1wb3JhbF9wayAoCisgICAgZ3JwICBpbnQ0cmFuZ2UsCisgICAgZHVyaW5nIGRhdGVy YW5nZSwKKyAgICBQUklNQVJZIEtFWSAoZ3JwLCBkdXJpbmcgV0lUSE9VVCBPVkVSTEFQUykKKyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBvcmFsX3BrJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC50 ZW1wb3JhbF9wayAoZ3JwIGludDRyYW5nZSBOT1QgTlVMTCwgZHVyaW5nIGRhdGVyYW5nZSBOT1Qg TlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudGVtcG9yYWxfcGsgQUREIENPTlNU UkFJTlQgdGVtcG9yYWxfcGtfcGtleSBQUklNQVJZIEtFWSAoZ3JwLCBkdXJpbmcgV0lUSE9VVCBP VkVSTEFQUyk7CisoMiByb3dzKQorCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFs LiAgQ29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFy ZSBlbWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlk IGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9O IGlkeGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAo aWQpIFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUgSU5E RVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihu YW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhk IFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAoaWQpOwor KDQgcm93cykKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBhIGNoaWxkIERFRkFVTFQgb3Zl cnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXIgKGEgaW50IERF RkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBpbnQpIElOSEVSSVRTIChwYXIp OworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5jaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3QucGFy KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVG QVVMVCA5OTk7CisoMiByb3dzKQorCistLSBQZXItY29sdW1uIGF0dG9wdGlvbnM6IGVtaXR0ZWQg YXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KK0NSRUFURSBUQUJMRSBhdHRvcHQgKGEgaW50LCBi IHRleHQpOworQUxURVIgVEFCTEUgYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9kaXN0aW5j dCA9IDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2F0dG9wdCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IChhIGludGVnZXIsIGIgdGV4 dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNF VCAobl9kaXN0aW5jdD0nMTAwJyk7CisoMiByb3dzKQorCistLSBQYXJ0aXRpb25lZCB0YWJsZSBw YXJlbnRzIChSQU5HRSwgSEFTSCwgYW5kIExJU1QpLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5n ZSAoaWQgaW50LCBrIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9y YW5nZSAoaWQgaW50ZWdlciwgayBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKygx IHJvdykKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoIChpZCBpbnQpIFBBUlRJVElPTiBCWSBI QVNIIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNo IChpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworKDEgcm93KQorCitDUkVBVEUg VEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2xpc3QgKGlkIGludGVnZXIsIHJlZ2lvbiB0 ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKygxIHJvdykKKworLS0gUGFydGl0aW9u IGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZBVUxULgor Q1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UKKyAg ICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFydGVkX3Jhbmdl XzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04g T0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw MCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgQUxURVIgQ09M VU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFz aF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1 cyAyLCByZW1haW5kZXIgMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRl ZF9oYXNoXzAnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1 cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2Vf ZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gUnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGlu dCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2lu c2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBW QUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucnQgKGlkIGludGVn ZXIpOworIENSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRs X3Rlc3QucnQgRE8gIElOU0VSVCBJTlRPIHBndGJsX2RkbF90ZXN0LnJ0X2xvZyAoaWQpKworICAg VkFMVUVTIChuZXcuaWQpOworKDIgcm93cykKKworLS0gRXh0ZW5kZWQgc3RhdGlzdGljcy4KK0NS RUFURSBUQUJMRSBzdHggKGEgaW50LCBiIGludCwgYyBpbnQpOworQ1JFQVRFIFNUQVRJU1RJQ1Mg c3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBp bnRlZ2VyKTsKKyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5zdHhfbmR2IChuZGlz dGluY3QpIE9OIGEsIGIgRlJPTSBwZ3RibF9kZGxfdGVzdC5zdHg7CisoMiByb3dzKQorCistLSBS b3ctbGV2ZWwgc2VjdXJpdHkgdG9nZ2xlcy4KK0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitB TFRFUiBUQUJMRSBybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJs cyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5ybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5ybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworKDMgcm93cykKKworLS0g UkVQTElDQSBJREVOVElUWTogZW1pdHRlZCBvbmx5IHdoZW4gbm90IHRoZSBkZWZhdWx0LgorQ1JF QVRFIFRBQkxFIHJpX2Z1bGwgKGEgaW50KTsKK0FMVEVSIFRBQkxFIHJpX2Z1bGwgUkVQTElDQSBJ REVOVElUWSBGVUxMOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5yaV9mdWxsIChhIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworKDIgcm93cykKKworQ1JFQVRFIFRBQkxF IHJpX2lkeCAoYSBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBP TiByaV9pZHggKGEpOworQUxURVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggcmlfaWR4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4IChhIGludGVnZXIg Tk9UIE5VTEwpOworIENSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcGd0YmxfZGRsX3Rl c3QucmlfaWR4IFVTSU5HIGJ0cmVlIChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5y aV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKKygzIHJvd3MpCisK Ky0tIFVOTE9HR0VEICsgcmVsb3B0aW9ucy4KK0NSRUFURSBVTkxPR0dFRCBUQUJMRSB1bm8gKGlk IGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDcwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgndW5vJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVU5MT0dHRUQgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QudW5vIChpZCBpbnRlZ2VyKSBXSVRIIChmaWxsZmFjdG9yPSc3MCcpOworKDEg cm93KQorCistLSBUeXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIE9GIHR5cGVfbmFtZSkuICBDb2x1 bW5zIGluaGVyaXRlZCBmcm9tIHRoZQorLS0gdHlwZSBlbWl0IG5vdGhpbmc7IGxvY2FsbHktYXBw bGllZCBERUZBVUxULCBOT1QgTlVMTCBhbmQgQ0hFQ0sgY29tZQorLS0gb3V0IHRocm91Z2ggYSBz aW5nbGUgIihjb2wgV0lUSCBPUFRJT05TIC4uLikiIGxpc3QuCitDUkVBVEUgVFlQRSB0eXBlZF90 IEFTIChhIGludCwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0eXBlZF9wbGFpbiBPRiB0eXBlZF90 OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9wbGFpbic6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRfcGxhaW4gT0YgcGd0YmxfZGRsX3Rlc3QudHlwZWRfdDsK KygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisgICAgYSBX SVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05TIE5PVCBO VUxMLAorICAgIENPTlNUUkFJTlQgYl9ub25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4gMCkKKyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC50eXBlZF9vdmVyIE9GIHBndGJsX2RkbF90ZXN0LnR5cGVkX3QgKGEgV0lUSCBPUFRJT05TIERF RkFVTFQgNyBOT1QgTlVMTCwgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsIENPTlNUUkFJTlQgYl9u b25lbXB0eSBDSEVDSyAoKGxlbmd0aChiKSA+IDApKSk7CisoMSByb3cpCisKKy0tIFRlbXBvcmFy eSB0YWJsZXMgKyBPTiBDT01NSVQuICBUZW1wIHRhYmxlcyBtdXN0IG5ldmVyIGJlIGVtaXR0ZWQg d2l0aAorLS0gdGhlIHNlc3Npb24tcHJpdmF0ZSBwZ190ZW1wX05OIHNjaGVtYSBwcmVmaXggLS0g dGhlIFRFTVBPUkFSWSBrZXl3b3JkCistLSBhbHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gcGdf dGVtcCBhbmQgdGhlIHByZWZpeCBpcyBub24tcmVwbGF5YWJsZS4KKy0tIE9OIENPTU1JVCBEUk9Q IG9ubHkgZmlyZXMgYXQgY29tbWl0LCBzbyB0aGUgcXVlcmllcyB0aGF0IG5lZWQgdG8gc2VlCist LSB0aGUgY2F0YWxvZyBlbnRyeSBtdXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcyB0 aGUgQ1JFQVRFLgorQkVHSU47CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGlu dCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2RlbGV0ZSAoaWQgaW50KSBPTiBDT01NSVQgREVM RVRFIFJPV1M7CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2Ryb3AgKGlkIGludCkgT04gQ09NTUlU IERST1A7CitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVmYXVsdCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVB VEUgJSc7CisgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBURU1QT1JBUlkgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnRlZ2VyKTsKKygxIHJv dykKKworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlbGV0ZSc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUg JSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkg VEFCTEUgdGVtcF9kZWxldGUgKGlkIGludGVnZXIpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKKygx IHJvdykKKworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRF ICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlbXBfZHJvcCAo aWQgaW50ZWdlcikgT04gQ09NTUlUIERST1A7CisoMSByb3cpCisKK1JPTExCQUNLOworLS0gUHJl dHR5IG1vZGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBwcmV0dHkgPT4gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5i YXNpYyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIGlk IGludGVnZXIgTk9UIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24n Ojp0ZXh0IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgKworICk7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtF WSAoaWQpOworKDIgcm93cykKKworLS0gb25seV9raW5kcyAvIGV4Y2VwdF9raW5kcyBnYXRpbmc6 IGVhY2ggZW1pdHMgZWl0aGVyIG9ubHkgdGhlIGxpc3RlZCBraW5kcworLS0gKG9ubHlfa2luZHMp IG9yIGV2ZXJ5IGtpbmQgZXhjZXB0IHRoZSBsaXN0ZWQgb25lcyAoZXhjZXB0X2tpbmRzKS4gIFRo ZSB0d28KKy0tIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICBLaW5kIHZvY2FidWxhcnk6IHRhYmxl LCBpbmRleCwKKy0tIHByaW1hcnlfa2V5LCB1bmlxdWUsIGNoZWNrLCBmb3JlaWduX2tleSwgZXhj bHVzaW9uLCBydWxlLAorLS0gc3RhdGlzdGljcywgdHJpZ2dlciwgcG9saWN5LCBybHMsIHJlcGxp Y2FfaWRlbnRpdHksIHBhcnRpdGlvbi4KKy0tIE5PVCBOVUxMIGlzIG5vdCBpbiB0aGUgdm9jYWJ1 bGFyeSAtIGFsd2F5cyBlbWl0dGVkIHRvIHByZXZlbnQKKy0tIHByb2R1Y2luZyBzY2hlbWFzIHRo YXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKy0tIGhhdmUgcmVqZWN0 ZWQuCistLQorLS0gZXhjZXB0X2tpbmRzPWluZGV4IGhpZGVzIHRoZSBDUkVBVEUgSU5ERVggc3Rh dGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZ IEtFWSAoaWQpOworKDIgcm93cykKKworLS0gZXhjZXB0X2tpbmRzPXByaW1hcnlfa2V5LHVuaXF1 ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24gaGlkZXMgZXZlcnkKKy0tIHRhYmxlLWxldmVs IGNvbnN0cmFpbnQuICBJbmxpbmUgQ0hFQ0sgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGlzCist LSBzdXBwcmVzc2VkIHRvby4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5 X2tleScsJ3VuaXF1ZScsJ2NoZWNrJywnZm9yZWlnbl9rZXknLCdleGNsdXNpb24nXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25z IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0 X2tpbmRzPWZvcmVpZ25fa2V5IHN1cHByZXNzZXMgb25seSBGT1JFSUdOIEtFWSBjb25zdHJhaW50 czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENIRUNLLCBhbmQgbmFtZWQgTk9UIE5VTEwgc3Rh eS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZSB3 b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91dAorLS0gY3Jvc3MtdGFibGUgRktzLCBsb2FkIGRh dGEsIHRoZW4gcmUtcnVuIHdpdGggb25seV9raW5kcz1mb3JlaWduX2tleQorLS0gdG8gYWRkIHRo ZW0gb25jZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZ Wydmb3JlaWduX2tleSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVn ZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAo KGEgPiAwKSkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJ TlQgY29uc19iX2tleSBVTklRVUUgKGIpOworKDIgcm93cykKKworLS0gb25seV9raW5kcz1mb3Jl aWduX2tleSBpcyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lCistLSB3 b3JrZmxvdzogZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4u IEZPUkVJR04KKy0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBldmVyeSBub24tRksg c3ViLW9iamVjdCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBm cm9tIHRoZSBmaXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWln bl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RS QUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVz dC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygxIHJvdykKKworLS0g QSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24ga2V5cyBwcm9kdWNlcyBubyByb3dzIHVuZGVyCistLSBv bmx5X2tpbmRzPWZvcmVpZ25fa2V5LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy ZWZkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3Jl aWduX2tleSddKTsKKyBwZ19nZXRfdGFibGVfZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCBy b3dzKQorCistLSBvbmx5X2tpbmRzPXRhYmxlIGVtaXRzIG9ubHkgdGhlIGJhcmUgQ1JFQVRFIFRB QkxFICh3aXRoIGFueSBpbmxpbmUKKy0tIGNvbHVtbi1sZXZlbCBOT1QgTlVMTCBhbmQgQ0hFQ0sp IC0gbm8gaW5kZXhlcywgbm8gUFJJTUFSWSBLRVkgQUxURVIsCistLSBubyBvdGhlciBzdWItb2Jq ZWN0cy4gIFVzZWZ1bCBmb3IgY2FwdHVyaW5nIGEgdGFibGUncyBzaGFwZSB3aXRob3V0CistLSBw dWxsaW5nIGluIGV2ZXJ5dGhpbmcgYXR0YWNoZWQgdG8gaXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3RhYmxlJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7 CisoMSByb3cpCisKKy0tIG9ubHlfa2luZHM9Y2hlY2sgb24gYSBub24tcGFydGl0aW9uIHRhYmxl LiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IGVtaXQKKy0tIGNvbHVtbi1sZXZlbCBhbmQgdGFi bGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWludHMgdmlhIEFMVEVSIFRBQkxFIGhlcmUsCistLSBiZWNh dXNlIHRoZSBpbmxpbmUgcGF0aCBpbiBDUkVBVEUgVEFCTEUgbmV2ZXIgcnVucyAoS0lORF9UQUJM RSBpcworLS0gbm90IGluIHRoZSBmaWx0ZXIpLgorQ1JFQVRFIFRBQkxFIGNoa19vbmx5ICgKKyAg ICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHF0eSBpbnQgQ0hFQ0sgKHF0eSA+IDApLAorICAg IENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNLIChpZCA+IDApCispOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaGtfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsnY2hlY2snXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LmNoa19vbmx5IEFERCBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3Bv cyBDSEVDSyAoKGlkID4gMCkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoa19vbmx5 IEFERCBDT05TVFJBSU5UIGNoa19vbmx5X3F0eV9jaGVjayBDSEVDSyAoKHF0eSA+IDApKTsKKygy IHJvd3MpCisKK0RST1AgVEFCTEUgY2hrX29ubHk7CistLSBvbmx5X2tpbmRzPXBhcnRpdGlvbiBv biBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGlsZCdzIGZ1bGwgRERMCistLSBp cyBlbWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBPRiAuLi4pLiAgVGhlICJwYXJ0 aXRpb24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFyZW50IGxldmVsOyBpdCBpcyBz dHJpcHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIgc28gdGhlIGNoaWxkIGRvZXMg bm90IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgorQ1JFQVRFIFRBQkxFIHBfb25s eSAoaWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MDApOworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVF UyBGUk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw X29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3Bh cnRpdGlvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9hIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfdGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucF9vbmx5X2IgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBf b25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7CisoMiByb3dzKQorCitEUk9QIFRB QkxFIHBfb25seTsKKy0tIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcyBhcmUgbXV0dWFsbHkg ZXhjbHVzaXZlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlf a2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKK0VSUk9SOiAgIm9u bHlfa2luZHMiIGFuZCAiZXhjZXB0X2tpbmRzIiBwYXJhbWV0ZXJzIGFyZSBtdXR1YWxseSBleGNs dXNpdmUKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25lOiBrZWVwIHRoZSB0YWJsZSBhbmQgaXRzIHBy aW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBvZiB0aGUgY29uc3RyYWludHMgc28gdGhlIHN1 YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0CistLSBwdWxsaW5nIGNyb3NzLXRhYmxlIGRl cGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUn LCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ10pOworICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBi IGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1ydWxlIGhp ZGVzIHRoZSBDUkVBVEUgUlVMRS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVsZSdd KTsKKyAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucnQgKGlkIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2lu ZHM9c3RhdGlzdGljcyBoaWRlcyB0aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGludGVnZXIs IGMgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1ybHMgaGlkZXMgdGhlIEVO QUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2lu ZHMgPT4gQVJSQVlbJ3JscyddKTsKKyAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgKGlkIGludGVnZXIpOworKDEg cm93KQorCistLSBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVudGl0eSBoaWRlcyB0aGUgUkVQTElD QSBJREVOVElUWSBjbGF1c2UuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1 bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncmVw bGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsIChhIGludGVnZXIp OworKDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hpbGRyZW4gYXJlIGVtaXR0ZWQgYnkgZGVmYXVs dDsgZXhjZXB0X2tpbmRzPXBhcnRpdGlvbgorLS0gc3VwcHJlc3NlcyB0aGVtIHNvIG9ubHkgdGhl IHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCBjb21lcyBvdXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWydwYXJ0aXRpb24nXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSAoaWQgaW50ZWdlciwgayBpbnRlZ2Vy KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKygxIHJvdykKKworLS0gV2hpdGVzcGFjZSBhcm91 bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBjYXNlIGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWycgIElOREVYICAnLCcgIFJVTEUgICddKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu aWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAoaWQp OworKDIgcm93cykKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBzdHJpcHMgdGhlIHNjaGVt YSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgaXRzZWxmCistLSBhbmQgZnJvbSBzYW1lLXNjaGVtYSBz aWJsaW5nIHJlZmVyZW5jZXMgKGluaGVyaXRhbmNlL3BhcnRpdGlvbgorLS0gcGFyZW50cywgaWRl bnRpdHkgc2VxdWVuY2VzIGluIHRoZSBzYW1lIHNjaGVtYSksIHdoaWxlIGNyb3NzLXNjaGVtYQor LS0gcmVmZXJlbmNlcyBhcmUga2VwdCBxdWFsaWZpZWQgZm9yIGNvcnJlY3RuZXNzLgorLS0KKy0t IEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBhbiBvcmRpbmFyeSB0YWJsZS4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBiYXNpYyAoaWQgaW50ZWdlciBO T1QgTlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBO VUxMKTsKKyBBTFRFUiBUQUJMRSBiYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1B UlkgS0VZIChpZCk7CisoMiByb3dzKQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUg c2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgY2ggKGMgaW50ZWdlcikg SU5IRVJJVFMgKHBhcik7CisgQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFV TFQgOTk5OworKDIgcm93cykKKworLS0gUGFydGl0aW9uIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hl bWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRF UiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZL IHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0g cGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEg YW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlm aWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJM RSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVG RVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBpZCBp bnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFf ZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENP TlNUUkFJTlQgeHNjaGVtYV9ma19waWRfZmtleSBGT1JFSUdOIEtFWSAocGlkKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF9vdGhlci5wYXJlbnQoaWQpOworKDMgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1h IEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRzIHdpdGggdGhlIGJhc2Ugc2NoZW1hIG5h bWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVuZHMgd2l0aCAicGd0YmxfZGRsX3Rlc3Qi KS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291bGQgbWFuZ2xlICJ4cGd0YmxfZGRsX3Rl c3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRpbmcKKy0tIHF1YWxpZmljYXRpb24gYXQg Z2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxlbSBlbnRpcmVseS4KK0NSRUFURSBTQ0hF TUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxFIHhwZ3RibF9kZGxfdGVzdC5yZWZ0Ymwg KGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVtYV9mayAoCisg ICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYgaW50IFJFRkVSRU5DRVMgeHBndGJsX2Rk bF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3VmZml4 X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIChpZCBpbnRl Z2VyIE5PVCBOVUxMLCByZWYgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVtYV9m ayBBREQgQ09OU1RSQUlOVCBzdWZmaXhfc2NoZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsK KyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHN1ZmZpeF9zY2hl bWFfZmtfcmVmX2ZrZXkgRk9SRUlHTiBLRVkgKHJlZikgUkVGRVJFTkNFUyB4cGd0YmxfZGRsX3Rl c3QucmVmdGJsKGlkKTsKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9mazsK K0RST1AgU0NIRU1BIHhwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNj YWRlcyB0byB0YWJsZSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsCistLSBJZGVudGl0eSBjb2x1bW4g d2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1lIGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1p dHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3Vz dG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBpZF9jdXN0b20gKHYgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZ IChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAw IENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7CisoMSByb3cpCisKKy0tIFJvdW5kLXRyaXA6IHdp dGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0g RERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVB VEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4 dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsK KyAgICBGT1Igc3RtdCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpIEFTIGxp bmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VORCAk JDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQorRlJP TSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2NsYXNz OworICAgcmVsbmFtZXNwYWNlICAgfCByZWxuYW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBiYXNpYworKDEgcm93KQorCitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NI RU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50CistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9uIGNo aWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNhcnJ5 IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJlZ2Fy ZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBzZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4LCB0 aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhlIGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5kaW5n IGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmlyc3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCistLSB0 aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUgdGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBhcyB0 aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0aGUg RERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBsYXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFURSBU QUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAgICBQ QVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9wYXJ0 X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVk ID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcHQgKGlkIGludGVnZXIsIHZhbCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3BhcnRfb3RoZXIucHRfYyBQQVJUSVRJT04g T0YgcGd0YmxfZGRsX3BhcnRfcy5wdCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworKDIg cm93cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3BhcnRfcyBDQVNDQURFOworTk9USUNFOiAg ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcGFydF9zLnB0CitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfcGFydF9vdGhlciBDQVNDQURFOworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBv biBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZl IGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2Vw YXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBU QUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsK KyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFM VUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw YXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGtfY2hpbGQgQUREIENPTlNUUkFJTlQg Y2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcGFy dGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEgcGFyZW50IHdpdGggYSBnZW5l cmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxURVIgQ09MVU1OIC4uLiBTRVQg REVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhlIEdFTkVS QVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGluaGVyaXRhbmNlLAorLS0gYW5k IFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0ZWQgY29s dW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGludCwKKyAgICBnICBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitDUkVBVEUgVEFCTEUgY2hfZ2Vu ICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn Y2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9nZW4gKCkg SU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcl9nZW4pOworKDEgcm93KQorCitEUk9QIFRBQkxF IHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgY2hfZ2Vu CistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBp bmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBu YW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwg Y29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQRyBy ZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxF IHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgYm90aCBmb3JtcyB0byBhdm9pZCB0 aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNp b24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gTk9UIE5V TEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBhIGludCBDT05TVFJB SU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 Lm5uX25hbWVkIChhIGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRlZ2Vy IE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9uYW1lZDsKKy0tIFJlbmFtaW5n IHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElUWSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVk CistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdp bmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0 YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRlcm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBz dGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3RyYWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBU QUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBzZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBU QUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElERU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRv LU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0 cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAg ICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIg VEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8gbm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQyJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAoYSBpbnRl Z2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0YmxfZGRs X3Rlc3Qubm5fcmVuYW1lZF9hX3NlcSkgQ09OU1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90X251bGwg Tk9UIE5VTEwpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworLS0gTG9jYWxs eS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBp dHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNs b2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0 IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxp bmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIg aW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5U IG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2No Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5u X2NoIChiIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5ubl9wYXIpOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxM IGE7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOworTk9USUNFOiAgZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBubl9jaAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0 IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9ucyBhbmQg aW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2JqZWN0 cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBUaGlz CistLSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNlYXJj aF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRFIFND SEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5teXNl cTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQgTEFO R1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9kZGxf eHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHBn dGJsX2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHQgKGlkIGlu dGVnZXIgREVGQVVMVCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVnZXIsIENP TlNUUkFJTlQgY2hrIENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMyBv dGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBndGJsX2Rk bF94cmVmLm15c2VxCitkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94cmVmLmYo aW50ZWdlcikKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAorLS0gc2No ZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9z ZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2Vk IGJ5IGEgZG90LiAgU3RyaW5nCistLSBsaXRlcmFsIHRleHQgaXMgb3V0cHV0IHZlcmJhdGltIGJ5 IHRoZSBkZXBhcnNlciBhbmQgaXMgdW5hZmZlY3RlZCBieQorLS0gc2VhcmNoX3BhdGggbmFycm93 aW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9zdHIucAor ICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQn KSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMgUEFS VElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBw YyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3Jl dCc6OnRleHQpKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIgQ0FTQ0FE RTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3N0ci5wCistLSBz Y2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVu dGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBu YW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5 IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgbWVj aGFuaXNtIGlzIHB1cmVseSBzZWFyY2hfcGF0aCBuYXJyb3dpbmc6IHRoZSBkZXBhcnNlcgorLS0g b3V0cHV0cyBhdHRyaWJ1dGUgbmFtZXMgdmVyYmF0aW0gZnJvbSBwZ19hdHRyaWJ1dGUsIHNvIHRo ZSBxdW90ZWQKKy0tIGlkZW50aWZpZXIgY29udGVudCBpcyBuZXZlciBleGFtaW5lZCBmb3Igc2No ZW1hIHByZWZpeGVzLiAgVGhpcyBob2xkcworLS0gZXZlbiB3aGVuIHRoZSBzY2hlbWEgbmFtZSBp cyBhIHNpbmdsZSBsZXR0ZXIuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQp CisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Fp ZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENI RUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlk LnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4g ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVS IFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlkLndlaXJk IiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FERTsK K05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCistLSBTYW1l IHdpdGggYSBzaG9ydCAoc2luZ2xlLWxldHRlcikgc2NoZW1hIG5hbWUgdG8gY29uZmlybSB0aGVy ZSBpcyBubworLS0gbWluaW11bS1sZW5ndGggYXNzdW1wdGlvbiBpbiB0aGUgc3RyaXBwaW5nIHBh dGguCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xMTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf cTEucCAoaWQgaW50LCAicGd0YmxfZGRsX3ExLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3ExLnBjIFBBUlRJVElPTiBPRiBw Z3RibF9kZGxfcTEucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xMS53 ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcTEucGMnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5U IGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcTEud2VpcmQiID4gMCkpOworKDIgcm93cykKKworRFJP UCBTQ0hFTUEgcGd0YmxfZGRsX3ExIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHBndGJsX2RkbF9xMS5wCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhl IGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4 IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93 ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVS IFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAor LS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUg cHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQ Z1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hF Q0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEi LiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1R Ii4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVk ID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgIlQiIChpZCBpbnRlZ2VyLCB2YWwgaW50ZWdlciwgQ09OU1RSQUlO VCBjaGsgQ0hFQ0sgKCh2YWwgPiAwKSkpOworIENSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAi VCIgVVNJTkcgYnRyZWUgKHZhbCk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSAiUGdUYmwtRGRs LVEiIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlICJQZ1RibC1EZGwt USIuIlQiCistLSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLgor Q1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworRVJST1I6ICAidiIgaXMgbm90IGFuIG9yZGluYXJ5IG9y IHBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsKK0VSUk9SOiAgInMiIGlzIG5vdCBhbiBvcmRp bmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQorLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJv d3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisgcGdfZ2V0X3RhYmxl X2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVmZXJlbmNlZCBpbmRleAorLS0gd291 bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJjZSBraW5kIGlzIHN1cHByZXNzZWQp IGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291bGQgYmUsIHRoZSBmdW5jdGlvbiBy YWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERETCBuZXZlciBkYW5nbGVzLiAgRXhl cmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCistLSBmb3JtcyAoUEssIFVOSVFVRSwg RVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUgSU5ERVgsIGluCistLSBib3RoIHRo ZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4KKy0tCistLSBQSy1iYWNrZWQ6IGV4 Y2VwdF9raW5kcz1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2VwdF9raW5kcz1yZXBsaWNhX2lkZW50 aXR5LgorQ1JFQVRFIFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVS IFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9wa19leGNs X3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXkn XSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9wa19leGNsIiByZXF1 aXJlcyBraW5kICJwcmltYXJ5X2tleSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxl J3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1 Y2VkIGJ5IHRoZSAicHJpbWFyeV9rZXkiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZl IGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJwcmltYXJ5X2tleSIgdG8gdGhlIGZpbHRlciBv ciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBTYW1lIGNhbGwgYnV0IGFs c28gZXhjbHVkaW5nIHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4 Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdyZXBsaWNhX2lkZW50aXR5J10pOwor ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX3BrX2V4Y2wgKGEg aW50ZWdlciBOT1QgTlVMTCk7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfcGtfZXhjbDsKKy0t IFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4LgorQ1JFQVRF IFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRF UiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV91bmlx X2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhj bCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlx dWUnXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV91bmlxX2V4Y2wi IHJlcXVpcmVzIGtpbmQgInVuaXF1ZSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxl J3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1 Y2VkIGJ5IHRoZSAidW5pcXVlIiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0 ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAidW5pcXVlIiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAi cmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMg PT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV91 bmlxX2V4Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKworRFJP UCBUQUJMRSByaV91bmlxX2V4Y2w7CistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5vIGJh Y2tpbmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGluZGV4 IGlzIGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5kZXgi IHdpdGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3IuCitD UkVBVEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVBVEUg VU5JUVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitBTFRF UiBUQUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9l eGNsX2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgn XSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV9pZHhfZXhjbCIgcmVx dWlyZXMga2luZCAiaW5kZXgiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBi eSB0aGUgImluZGV4IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitI SU5UOiAgRWl0aGVyIGFkZCAiaW5kZXgiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNh X2lkZW50aXR5IiBmcm9tIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9p ZHhfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZ WydpbmRleCcsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4X2V4Y2wgKGEg aW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSByaV9p ZHhfZXhjbDsKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHlfa2luZHM9cmVwbGljYV9pZGVu dGl0eSBtdXN0IGluY2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1pdHMgdGhlIGluZGV4LCBvciB0 aGUgZnVuY3Rpb24gZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29ubHkgKGEgaW50IE5PVCBOVUxM IFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfb25seSBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHJpX29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J3JlcGxpY2FfaWRlbnRpdHknXSk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxl ICJyaV9vbmx5IiByZXF1aXJlcyBraW5kICJ1bmlxdWUiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDog IFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBp bmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIga2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBh Y3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgInVuaXF1ZSIgdG8gdGhlIGZpbHRlciBv ciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQuCistLSBJbmNsdWRpbmcgYm90aCBr aW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25seSc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndW5pcXVlJywn cmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX29ubHkgQUREIENP TlNUUkFJTlQgcmlfb25seV9hX2tleSBVTklRVUUgKGEpOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ffa2V5 OworKDIgcm93cykKKworRFJPUCBUQUJMRSByaV9vbmx5OworLS0gUGVyLWtpbmQgb25seV9raW5k cyAvIGV4Y2VwdF9raW5kcyBjb3ZlcmFnZS4gIEZvciBlYWNoIGtpbmQgaW4gdGhlIHZvY2FidWxh cnksCistLSB2ZXJpZnkgdGhhdCBvbmx5X2tpbmRzPUsgZW1pdHMganVzdCB0aGF0IGtpbmQncyBv dXRwdXQgYW5kIHRoYXQgZXhjZXB0X2tpbmRzPUsKKy0tIG9taXRzIGp1c3QgdGhhdCBraW5kJ3Mg b3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2VyLAorLS0gcG9saWN5 KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90aGluZzsgb25seV9r aW5kcz1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1cmVzIHVzZWQ6Cist LSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0tICAgY29uczogUEsg KyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0tICAgcnQ6ICAgQ1JF QVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAgcmxzOiAgRU5BQkxF L0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBMSUNBIElERU5USVRZ IEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFCTEUgZXhjbF9maXgg KHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAmJikpOwor LS0gb25seV9raW5kcz1LOiBlbWl0IG9ubHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg b25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93 ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENS RUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJl ZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJ TlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9r aW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jf a2V5IFVOSVFVRSAoYik7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnZXhjbF9maXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJS QVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IEFERCBDT05TVFJBSU5UIGV4 Y2xfZml4X3JuZ19leGNsIEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpOworKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBSVUxFIHJ0X2xvZ19pbnNl cnQgQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor ICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rlc3QucnQgRE8gIElOU0VSVCBJTlRPIHBndGJs X2RkbF90ZXN0LnJ0X2xvZyAoaWQpKworICAgVkFMVUVTIChuZXcuaWQpOworKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZS T00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsncmxzJ10pOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEVO QUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmxz IEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9r aW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworKDEgcm93KQor CistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1lbnQg d2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBs YW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndHJpZ2dlciddKTsKKy0tIFNF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsKKy0tIGV4Y2VwdF9raW5kcz1L OiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklRVUUv CistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7 CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBi dHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMyByb3dz KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRl Z2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOworIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlH TiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJ TklUSUFMTFkgREVGRVJSRUQ7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBB UlJBWVsnY2hlY2snXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEg aW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBVTklRVUUgKGIpOworIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlH TiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJ TklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMg PT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZXhj bF9maXggKHJuZyBpbnQ0cmFuZ2UpOworKDEgcm93KQorCistLSB0cmlnZ2VyIC8gcG9saWN5IGFy ZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJf ZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+ IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9dGFibGUgc3VwcHJlc3NlcyB0aGUg Q1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCArIGF0 dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJ10pOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBp ZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUp KTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJ TkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMyBy b3dzKQorCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9 PiBBUlJBWVsndGFibGUnLCdpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUgSU5ERVgg aWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1l KSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVT SU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdmb3JlaWduX2tleSddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZP UkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFC TEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBEdXBsaWNhdGUgZW50cmllcyBp biB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUKKy0tIEJpdG1hcHNl dC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdpbmRleCddKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVl IChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxf dGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygyIHJvd3MpCisK K0RST1AgVEFCTEUgZXhjbF9maXg7CistLSBvbmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0aGF0IGRv ZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRlciBhbmQg cmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25fa2V5Cist LSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRl bnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5IFBLICsg Y29sdW1ucykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3J1bGUnXSk7CisgcnVsZV9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygx IHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnc3RhdGlzdGljcyddKTsKKyBzdGF0c19yb3dzIAorLS0tLS0tLS0tLS0tCisgICAgICAg ICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsncmxzJ10pOworIHJsc19yb3dzIAorLS0tLS0tLS0tLQorICAgICAgICAwCiso MSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJS QVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7Cisgcmlfcm93cyAKKy0tLS0tLS0tLQorICAgICAgIDAK KygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydleGNsdXNpb24nXSk7CisgZXhjbF9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAg IDAKKygxIHJvdykKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0aGUga2lu ZCBhcnJheS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3I7IHRoZSBmdW5jdGlvbiBu ZXZlciByZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0eSBhcnJheToKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJB WVtdOjp0ZXh0W10pOworRVJST1I6ICBwYXJhbWV0ZXIgIm9ubHlfa2luZHMiIG11c3Qgc3BlY2lm eSBhdCBsZWFzdCBvbmUga2luZAorLS0gTlVMTCBlbGVtZW50OgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZW05VTEw6 OnRleHRdKTsKK0VSUk9SOiAgcGFyYW1ldGVyICJvbmx5X2tpbmRzIiBtdXN0IG5vdCBjb250YWlu IE5VTEwgZWxlbWVudHMKKy0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZWydub19z dWNoX2tpbmQnXSk7CitFUlJPUjogIHVucmVjb2duaXplZCBraW5kICJub19zdWNoX2tpbmQiIGlu IHBhcmFtZXRlciAib25seV9raW5kcyIKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBi b3RoIHBhcmFtZXRlcnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitFUlJPUjogICJv bmx5X2tpbmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhj bHVzaXZlCistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxl LCBjYXB0dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1h LCByZXBsYXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNv bmZpcm0gdGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9u IG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11 c3QKKy0tIHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRf b3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0Ymxf ZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUwor ICAgICAgICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xz JyksICgnZ2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyks ICgnY29ucycpLCAoJ251bGxzX25kJyksICgnaWR4X2luYycpLAorICAgICAgICAoJ2ZrX2FjdHNf dGd0JyksICgnZmtfYWN0cycpLCAoJ25vdGVuZl90Z3QnKSwgKCdub3RlbmYnKSwgKCdzZWxmX3Jl ZicpLCAoJ3RlbXBvcmFsX3BrJyksCisgICAgICAgICgnaWR4ZCcpLAorICAgICAgICAoJ3Bhcicp LCAoJ2NoJyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVk X3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gn KSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAg KCdydF9sb2cnKSwgKCdydCcpLAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwn KSwgKCdyaV9pZHgnKSwgKCd1bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwg cGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBPUkRJ TkFMSVRZIG8obGluZSwgb3JkKTsKK0RPICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5U IHRleHRbXSA6PSBBUlJBWVsKKyAgICAgICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9t JywgJ2dlbl9jb2xzJywgJ2dlbl92aXJ0dWFsJywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdy ZWZkJywgJ2NvbnMnLCAnbnVsbHNfbmQnLCAnaWR4X2luYycsCisgICAgICAgICdma19hY3RzX3Rn dCcsICdma19hY3RzJywgJ25vdGVuZl90Z3QnLCAnbm90ZW5mJywgJ3NlbGZfcmVmJywgJ3RlbXBv cmFsX3BrJywKKyAgICAgICAgJ2lkeGQnLAorICAgICAgICAncGFyJywgJ2NoJywgJ2F0dG9wdCcs CisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAncGFydGVkX3JhbmdlXzEnLCAncGFydGVkX3Jhbmdl X2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFzaCcsICdwYXJ0ZWRfaGFzaF8wJywKKyAgICAgICAg J3BhcnRlZF9saXN0JywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAn cmxzJywgJ3JpX2Z1bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAg ICBzdG10IHRleHQ7CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NB REU7CisgICAgQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4g QVJSQVkgdGFibGVzIExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVD VCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3Jk CisgICAgICAgIExPT1AKKyAgICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgICAgRVhFQ1VU RSBzdG10OworICAgICAgICAgICAgRVhDRVBUSU9OIFdIRU4gZHVwbGljYXRlX3RhYmxlIFRIRU4K KyAgICAgICAgICAgICAgICBOVUxMOyAgLS0gcGFydGl0aW9uIGNoaWxkIGFscmVhZHkgY3JlYXRl ZCBieSBpdHMgcGFyZW50J3MgRERMCisgICAgICAgICAgICBFTkQ7CisgICAgICAgIEVORCBMT09Q OworICAgIEVORCBMT09QOworRU5EICQkOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAzNSBv dGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3Vz dG9tCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGdlbl92aXJ0dWFsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgbnVsbHNfbmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4 X2luYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma19hY3RzX3RndAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBma19hY3RzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG5vdGVuZl90Z3QKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgbm90ZW5mCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHNlbGZfcmVm Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHRlbXBvcmFsX3BrCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2xpc3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgdW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitk cm9wIGNhc2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitXSVRI IGFmdGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorICAgIEZS T00gKFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpIEFTIHQsCisg ICAgICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQu bmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVy ID0+IGZhbHNlKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNz aW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9v cmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUg RlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtp bmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0 cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JE RVIgQlkga2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3JkIHwgbGluZSAKKy0tLS0t LSstLS0tLS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVhbnVwLgorRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMzAg b3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1 c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBnZW5fdmlydHVhbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIG51bGxzX25kCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlk eF9pbmMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtfYWN0c190Z3QKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgZmtfYWN0cworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmZfdGd0Citkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIG5vdGVuZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzZWxmX3Jl ZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0ZW1wb3JhbF9waworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBpZHhkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBjaAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcGFydGVkX3JhbmdlCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNoCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9saXN0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBzdHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJpX2Z1bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHVubwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggOGZhMGE2YzQ3ZmIu LjllY2E2NGNjYTNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTgxLDcgKzgx LDcgQEAgdGVzdDogY3JlYXRlX3RhYmxlX2xpa2UgYWx0ZXJfZ2VuZXJpYyBhbHRlcl9vcGVyYXRv ciBtaXNjIGFzeW5jIGRic2l6ZSBtZXJnZSBtaXMKICMgY29sbGF0ZS5saW51eC51dGY4IGFuZCBj b2xsYXRlLmljdS51dGY4IHRlc3RzIGNhbm5vdCBiZSBydW4gaW4gcGFyYWxsZWwgd2l0aCBlYWNo IG90aGVyCiAjIHBzcWwgZGVwZW5kcyBvbiBjcmVhdGVfYW0KICMgYW11dGlscyBkZXBlbmRzIG9u IGdlb21ldHJ5LCBjcmVhdGVfaW5kZXhfc3BnaXN0LCBoYXNoX2luZGV4LCBicmluCi10ZXN0OiBy dWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0aWxzIHN0YXRzX2V4dCBj b2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIKK3Rlc3Q6IHJ1bGVzIHBz cWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUu bGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MiBwZ19nZXRfdGFibGVfZGRsCiAKICMg LS0tLS0tLS0tLQogIyBSdW4gdGhlc2UgYWxvbmUgc28gdGhleSBkb24ndCBydW4gb3V0IG9mIHBh cmFsbGVsIHdvcmtlcnMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90 YWJsZV9kZGwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE4YmFhMTYzN2VkCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK QEAgLTAsMCArMSw3NjggQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRl c3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlz IG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5l cnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRs X3Rlc3Q7CisKKy0tIEJhc2ljIHRhYmxlIHdpdGggUFJJTUFSWSBLRVksIE5PVCBOVUxMLCBERUZB VUxULCBDT0xMQVRFLgorQ1JFQVRFIFRBQkxFIGJhc2ljICgKKyAgICBpZCBpbnQgUFJJTUFSWSBL RVksCisgICAgbmFtZSB0ZXh0IE5PVCBOVUxMIERFRkFVTFQgJ2Fub24nIENPTExBVEUgIkMiCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3Vz dG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fs d2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGlu dCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKK0NS RUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBT VEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxV RSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAor ICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAo Y2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdnZW5fY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEdlbmVyYXRlZCB2 aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBpbnQs CisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRVQUwK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gU1RPUkFHRSBhbmQgQ09NUFJFU1NJT04gKG9ubHkg ZW1pdHRlZCB3aGVuIG5vbi1kZWZhdWx0IGZvciB0aGUgdHlwZSkuCitDUkVBVEUgVEFCTEUgc3Rv cmFnZV9jb2xzICgKKyAgICBhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwKKyAgICBiIHRleHQgU1RP UkFHRSBNQUlOLAorICAgIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6CispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdzdG9yYWdlX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVS UkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUs CisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZF UlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKFBHIDE1 KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVuZXNzIHB1 cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9UIERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVtaXR0ZWQu CitDUkVBVEUgVEFCTEUgbnVsbHNfbmQgKAorICAgIGEgaW50LAorICAgIGIgaW50LAorICAgIFVO SVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKGEsIGIpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdudWxsc19uZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIElO Q0xVREUgY29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2VkIFVOSVFVRSBpbmRleCAoUEcgMTEp OiB0aGUKKy0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGluIGFuIElOQ0xVREUgKC4uLikgY2xh dXNlIG9uIHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LCBub3Qg aW4gdGhlIGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJMRSBpZHhfaW5jICgKKyAgICBpZCAg IGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAgZXh0cmEgdGV4dCwKKyAgICBV TklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEZPUkVJ R04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFsIGFjdGlvbnMgYW5k IE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4g dGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEgaW50LAorICAgIGIg aW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQgZmtfY2FzY2FkZSAg Rk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVTVFJJQ1QsCisgICAg Q09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBma19hY3Rz X3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBTRVQgTlVMTCwK KyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBE RUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBLRVkgKGQpIFJFRkVS RU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRDSCBG VUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19hY3RzJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gTk9UIEVORk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAx Nyk6IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGluIHRoZQorLS0gY2F0YWxvZyBidXQgbm90 IHZhbGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5GT1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0t IHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBUQUJMRSBub3RlbmZfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVuZiAoCisgICAgYSBpbnQsCisgICAgQ09O U1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgbm90ZW5mX3RndChp ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgRU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKKy0tIFNlbGYtcmVmZXJlbmNpbmcgRks6IHRoZSBQSyBtdXN0IGFwcGVhciBiZWZvcmUgdGhl IEZLIHRoYXQgcmVmZXJlbmNlcyBpdC4KKy0tIFRoZSBjYXRhbG9nIHNjYW4gcmV0dXJucyBjb25z dHJhaW50cyBpbiBuYW1lIG9yZGVyOyB3aXRob3V0IHRoZSBmaXgsCistLSAic2VsZl9yZWZfcGFy ZW50X2lkX2ZrZXkiIHNvcnRzIGJlZm9yZSAic2VsZl9yZWZfcGtleSIgYW5kIHRoZSBGSyBBREQK Ky0tIENPTlNUUkFJTlQgZmFpbHMgd2l0aCAidGhlcmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQg bWF0Y2hpbmcgZ2l2ZW4ga2V5cyIuCitDUkVBVEUgVEFCTEUgc2VsZl9yZWYgKAorICAgIGlkICAg ICAgICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGFyZW50X2lkIGludCBSRUZFUkVOQ0VTIHNlbGZf cmVmKGlkKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc2VsZl9yZWYnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJ TUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMg YSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0g aW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFC TEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3Vw cG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJh bmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFsLiAg Q29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFyZSBl bWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlk eGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAoaWQp IFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBh IGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBU QUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBp bnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERF RkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBh cyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIg dGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0 ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAoUkFO R0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwg ayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVB VEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0t IFBhcnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwg REVGQVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVk X3JhbmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBh cnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRlZF9o YXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBP RiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFJ1bGVz LgorQ1JFQVRFIFRBQkxFIHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50 KTsKK0NSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8g QUxTTyBJTlNFUlQgSU5UTyBydF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEV4 dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50 KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0 eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlKTsKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFC TEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJ VFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor CistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQu CitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBM SUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1 bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcmlfaWR4IChh IGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCAo YSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9p ZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRpb25zLgorQ1JFQVRFIFVO TE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gNzApOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworCistLSBUeXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIE9GIHR5cGVfbmFtZSkuICBDb2x1bW5z IGluaGVyaXRlZCBmcm9tIHRoZQorLS0gdHlwZSBlbWl0IG5vdGhpbmc7IGxvY2FsbHktYXBwbGll ZCBERUZBVUxULCBOT1QgTlVMTCBhbmQgQ0hFQ0sgY29tZQorLS0gb3V0IHRocm91Z2ggYSBzaW5n bGUgIihjb2wgV0lUSCBPUFRJT05TIC4uLikiIGxpc3QuCitDUkVBVEUgVFlQRSB0eXBlZF90IEFT IChhIGludCwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0eXBlZF9wbGFpbiBPRiB0eXBlZF90Owor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9wbGFpbic6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAor ICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9O UyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+ IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENPTU1J VC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUgZW1pdHRlZCB3aXRoCistLSB0aGUgc2Vzc2lv bi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHByZWZpeCAtLSB0aGUgVEVNUE9SQVJZIGtleXdv cmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiBwZ190ZW1wIGFuZCB0aGUgcHJlZml4 IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBjb21t aXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0byBzZWUKKy0tIHRoZSBjYXRhbG9nIGVudHJ5 IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSBDUkVBVEUuCitCRUdJTjsK K0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1QIFRB QkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFURSBU RU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKKworU0VMRUNUIGxp bmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2RlZmF1bHQnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1Qg bGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRlJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKworU0VMRUNU IGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworUk9MTEJBQ0s7 CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgcHJldHR5ID0+IHRydWUpOworCistLSBvbmx5 X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGdhdGluZzogZWFjaCBlbWl0cyBlaXRoZXIgb25seSB0aGUg bGlzdGVkIGtpbmRzCistLSAob25seV9raW5kcykgb3IgZXZlcnkga2luZCBleGNlcHQgdGhlIGxp c3RlZCBvbmVzIChleGNlcHRfa2luZHMpLiAgVGhlIHR3bworLS0gYXJlIG11dHVhbGx5IGV4Y2x1 c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4LAorLS0gcHJpbWFyeV9rZXksIHVu aXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24sIHJ1bGUsCistLSBzdGF0aXN0aWNz LCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0aW9uLgorLS0g Tk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0ZWQgdG8gcHJl dmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQgTlVMTHMgdGhl IHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0tCistLSBleGNlcHRfa2luZHM9aW5k ZXggaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2lu ZHMgPT4gQVJSQVlbJ2luZGV4J10pOworCistLSBleGNlcHRfa2luZHM9cHJpbWFyeV9rZXksdW5p cXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lvbiBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2 ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMK Ky0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25z Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1h cnlfa2V5JywndW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKwor LS0gZXhjZXB0X2tpbmRzPWZvcmVpZ25fa2V5IHN1cHByZXNzZXMgb25seSBGT1JFSUdOIEtFWSBj b25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENIRUNLLCBhbmQgbmFtZWQgTk9U IE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBwYXNzIG9mIHRoZSB0d28tcGFzcyBG Sy1jbG9uZSB3b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91dAorLS0gY3Jvc3MtdGFibGUgRktz LCBsb2FkIGRhdGEsIHRoZW4gcmUtcnVuIHdpdGggb25seV9raW5kcz1mb3JlaWduX2tleQorLS0g dG8gYWRkIHRoZW0gb25jZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRz ID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gb25seV9raW5kcz1mb3JlaWduX2tleSBp cyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lCistLSB3b3JrZmxvdzog ZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIEZPUkVJR04K Ky0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBldmVyeSBub24tRksgc3ViLW9iamVj dCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBmcm9tIHRoZSBm aXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7 CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRl cgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJB WVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIG9ubHlfa2luZHM9dGFibGUgZW1pdHMgb25seSB0aGUg YmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55IGlubGluZQorLS0gY29sdW1uLWxldmVsIE5PVCBO VUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVzLCBubyBQUklNQVJZIEtFWSBBTFRFUiwKKy0tIG5v IG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBl IHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0aGluZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsndGFibGUnXSk7CisKKy0tIG9ubHlfa2luZHM9Y2hlY2sg b24gYSBub24tcGFydGl0aW9uIHRhYmxlLiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IGVtaXQK Ky0tIGNvbHVtbi1sZXZlbCBhbmQgdGFibGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWludHMgdmlhIEFM VEVSIFRBQkxFIGhlcmUsCistLSBiZWNhdXNlIHRoZSBpbmxpbmUgcGF0aCBpbiBDUkVBVEUgVEFC TEUgbmV2ZXIgcnVucyAoS0lORF9UQUJMRSBpcworLS0gbm90IGluIHRoZSBmaWx0ZXIpLgorQ1JF QVRFIFRBQkxFIGNoa19vbmx5ICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHF0eSBp bnQgQ0hFQ0sgKHF0eSA+IDApLAorICAgIENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNL IChpZCA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaGtfb25seSc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnY2hlY2snXSk7 CitEUk9QIFRBQkxFIGNoa19vbmx5OworCistLSBvbmx5X2tpbmRzPXBhcnRpdGlvbiBvbiBhIHBh cnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGlsZCdzIGZ1bGwgRERMCistLSBpcyBlbWl0 dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBPRiAuLi4pLiAgVGhlICJwYXJ0aXRpb24i CistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFyZW50IGxldmVsOyBpdCBpcyBzdHJpcHBl ZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIgc28gdGhlIGNoaWxkIGRvZXMgbm90IGV4 Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgorQ1JFQVRFIFRBQkxFIHBfb25seSAoaWQg aW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcF9v bmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor Q1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9N ICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwX29ubHkn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BhcnRpdGlv biddKTsKK0RST1AgVEFCTEUgcF9vbmx5OworCistLSBvbmx5X2tpbmRzIGFuZCBleGNlcHRfa2lu ZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXkn XSk7CisKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25lOiBrZWVwIHRoZSB0YWJsZSBhbmQgaXRzIHBy aW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBvZiB0aGUgY29uc3RyYWludHMgc28gdGhlIHN1 YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0CistLSBwdWxsaW5nIGNyb3NzLXRhYmxlIGRl cGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUn LCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9uJ10pOworCistLSBleGNlcHRfa2luZHM9 cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3J1bGUnXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1zdGF0aXN0aWNzIGhpZGVzIHRoZSBDUkVBVEUg U1RBVElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3MnXSk7 CisKKy0tIGV4Y2VwdF9raW5kcz1ybHMgaGlkZXMgdGhlIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwg U0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3JscyddKTsK KworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURF TlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2Ff aWRlbnRpdHknXSk7CisKKy0tIFBhcnRpdGlvbiBjaGlsZHJlbiBhcmUgZW1pdHRlZCBieSBkZWZh dWx0OyBleGNlcHRfa2luZHM9cGFydGl0aW9uCistLSBzdXBwcmVzc2VzIHRoZW0gc28gb25seSB0 aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBl eGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BhcnRpdGlvbiddKTsKKworLS0gV2hpdGVzcGFjZSBhcm91 bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBjYXNlIGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWycgIElOREVYICAnLCcgIFJVTEUgICddKTsKKworLS0gc2NoZW1hX3F1 YWxpZmllZD1mYWxzZSBzdHJpcHMgdGhlIHNjaGVtYSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgaXRz ZWxmCistLSBhbmQgZnJvbSBzYW1lLXNjaGVtYSBzaWJsaW5nIHJlZmVyZW5jZXMgKGluaGVyaXRh bmNlL3BhcnRpdGlvbgorLS0gcGFyZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzIGluIHRoZSBzYW1l IHNjaGVtYSksIHdoaWxlIGNyb3NzLXNjaGVtYQorLS0gcmVmZXJlbmNlcyBhcmUga2VwdCBxdWFs aWZpZWQgZm9yIGNvcnJlY3RuZXNzLgorLS0KKy0tIEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBhbiBv cmRpbmFyeSB0YWJsZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0aGUg c2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIFBhcnRp dGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9x dWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBDcm9zcy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBzIHF1 YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCistLSBwZ3RibF9kZGxfdGVzdDsg cGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0Cist LSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitDUkVB VEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfb3RoZXIu cGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKAor ICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBSRUZFUkVOQ0VTIHBndGJsX2Rk bF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3hzY2hl bWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIENyb3NzLXNjaGVtYSBG SyB3aG9zZSB0YXJnZXQgc2NoZW1hIG5hbWUgZW5kcyB3aXRoIHRoZSBiYXNlIHNjaGVtYSBuYW1l CistLSAoZS5nLiAieHBndGJsX2RkbF90ZXN0IiBlbmRzIHdpdGggInBndGJsX2RkbF90ZXN0Iiku ICBBIHBvc3QtaG9jIHRleHQKKy0tIHN0cmlwIHdvdWxkIG1hbmdsZSAieHBndGJsX2RkbF90ZXN0 LnJlZnRibCIgaW50byAieHJlZnRibCI7IGRlY2lkaW5nCistLSBxdWFsaWZpY2F0aW9uIGF0IGdl bmVyYXRpb24gdGltZSBhdm9pZHMgdGhlIHByb2JsZW0gZW50aXJlbHkuCitDUkVBVEUgU0NIRU1B IHhwZ3RibF9kZGxfdGVzdDsKK0NSRUFURSBUQUJMRSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIChp ZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZmsgKAorICAg IGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcmVmIGludCBSRUZFUkVOQ0VTIHhwZ3RibF9kZGxf dGVzdC5yZWZ0YmwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N1ZmZpeF9z Y2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIHN1ZmZp eF9zY2hlbWFfZms7CitEUk9QIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKworLS0g SWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBz Y2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKworLS0g Um91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRlciBTRVQgc2VhcmNo X3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZmZXJlbnQgdGFyZ2V0 IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RPICQkCitERUNMQVJF CisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNoX3BhdGggPSBwZ3Ri bF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVDVCBsaW5lIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9 PiBmYWxzZSkgQVMgbGluZQorICAgIExPT1AKKyAgICAgICAgRVhFQ1VURSBzdG10OworICAgIEVO RCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlOjp0ZXh0 LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdwZ3RibF9kZGxfcmVwbGF5LmJh c2ljJzo6cmVnY2xhc3M7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitE Uk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXIgQ0FTQ0FE RTsKKworLS0gQ3Jvc3Mtc2NoZW1hIHBhcnRpdGlvbiBjaGlsZCB3aXRoIHNjaGVtYV9xdWFsaWZp ZWQ9ZmFsc2U6IHRoZSBjaGlsZCBtdXN0CistLSBjYXJyeSBpdHMgb3duIHNjaGVtYSBwcmVmaXgg c28gdGhlIG91dHB1dCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9mIHRoZQorLS0gY2FsbGVy J3Mgc2VhcmNoX3BhdGguICBCZWZvcmUgdGhlIGZpeCwgdGhlIGNoaWxkIHdhcyBlbWl0dGVkIGFz IHRoZSBiYXJlCistLSBuYW1lICJwdF9jIiAobGFuZGluZyBpbiB3aGljaGV2ZXIgc2NoZW1hIGlz IGZpcnN0IGluIHNlYXJjaF9wYXRoKSB3aGlsZQorLS0gdGhlIHBhcmVudCByZWZlcmVuY2UgaW5z aWRlIHRoZSBDUkVBVEUgVEFCTEUgY2FtZSBvdXQgYXMgdGhlIGZ1bGx5LXF1YWxpZmllZAorLS0g InBndGJsX2RkbF9wYXJ0X3MucHQiLCBtYWtpbmcgdGhlIERETCBpbmNvbnNpc3RlbnQgYW5kIHVu cmVwbGF5YWJsZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3BhcnRfczsKK0NSRUFURSBTQ0hF TUEgcGd0YmxfZGRsX3BhcnRfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3BhcnRfcy5w dCAoaWQgaW50LCB2YWwgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJM RSBwZ3RibF9kZGxfcGFydF9vdGhlci5wdF9jCisgICAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9w YXJ0X3MucHQKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcGFydF9zLnB0Jzo6cmVnY2xhc3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfcGFydF9zIENBU0NBREU7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9v dGhlciBDQVNDQURFOworCistLSBMb2NhbGx5LWRlY2xhcmVkIENIRUNLIG9uIGEgcGFydGl0aW9u IGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1uCistLSBsaXN0IHRvIGxpdmUgaW4gKFBBUlRJVElP TiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21lIG91dCBhcyBhCistLSBzZXBhcmF0ZSBBTFRFUiBU QUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9j aGsgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGFydGVkX2NoaworICAgIChDT05TVFJB SU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hp bGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOwor CistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB3aXRoIGEgZ2VuZXJhdGVkIGNv bHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFuIEFMVEVSIENPTFVNTiAuLi4gU0VUIERFRkFVTFQg Zm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVkCistLSBjb2x1bW46IHRoZSBHRU5FUkFURUQgZXhw cmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3VnaCBpbmhlcml0YW5jZSwKKy0tIGFuZCBTRVQgREVG QVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBhZ2FpbnN0IGEgZ2VuZXJhdGVkIGNvbHVtbi4KK0NS RUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBpZCBpbnQsCisgICAgZyAgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgKGlkICogMikgU1RPUkVECispOworQ1JFQVRFIFRBQkxFIGNoX2dlbiAoKSBJTkhF UklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoX2dlbic6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsK KworLS0gQSB1c2VyLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQg aW5saW5lIGFzCistLSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBzbyB0aGUgb3JpZ2luYWwg bmFtZSBpcyBwcmVzZXJ2ZWQuICBBbgorLS0gYXV0by1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2Fs IGNvbHVtbiBpcyBlbWl0dGVkIGFzIGEgcGxhaW4gaW5saW5lCistLSAiTk9UIE5VTEwiIC0gUEcg cmUtY3JlYXRlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IHdoZW4gQ1JFQVRFCistLSBUQUJM RSBydW5zLCBzbyB0aGUgY29uc3RyYWludCBsb29wIHNraXBzIGJvdGggZm9ybXMgdG8gYXZvaWQg dGhlCistLSByZWR1bmRhbnQgKGFuZCBvbiB0YWJsZS1yZW5hbWUgb3Igc2VxdWVuY2UtY29sbGlz aW9uLCBicm9rZW4pCistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIE5PVCBO VUxMIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworRFJPUCBUQUJMRSBubl9uYW1lZDsKKworLS0gUmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFu IElERU5USVRZIE5PVCBOVUxMIGNvbHVtbiB3YXMgZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0 by1uYW1lZCBjb25zdHJhaW50IGZyb3plbiBhdCB0aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0t IG5vIGxvbmdlciBtYXRjaGVzIHRoZSBwb3N0LXJlbmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVs bCIgcGF0dGVybi4KKy0tIFRoZSBlbWl0dGVkIERETCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRo ZSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RS QUlOVCBhIHNlY29uZCBOT1QgTlVMTCwgc2luY2UgQ1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBp bmxpbmUgSURFTlRJVFkgYWxyZWFkeSBjcmVhdGVzIGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhl CistLSBuZXcgdGFibGUgbmFtZSBhbmQgUEcgb25seSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIg Y29sdW1uLgorQ1JFQVRFIFRBQkxFIG5uX3JlbmFtZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwKKyk7CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJF TkFNRSBUTyBubl9yZW5hbWVkMjsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5f cmVuYW1lZDInOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBubl9yZW5h bWVkMjsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29s dW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBj b2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1Qg TlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9v cCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVB VEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5u X2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFC TEUgbm5fcGFyIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9w IHRoZSBzY2hlbWEgcHJlZml4IGZyb20gREVGQVVMVAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGlu ZSBDSEVDSyBib2RpZXMgdGhhdCByZWZlcmVuY2Ugc2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNl cXVlbmNlIHZpYSBuZXh0dmFsLCBmdW5jdGlvbiB2aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0g cmVsaWVzIG9uIHRoZSBkZXBhcnNlciByZXNwZWN0aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0 aCByYXRoZXIKKy0tIHRoYW4gb24gc3Vic3RyaW5nIHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEg cGd0YmxfZGRsX3hyZWY7CitDUkVBVEUgU0VRVUVOQ0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitD UkVBVEUgRlVOQ1RJT04gcGd0YmxfZGRsX3hyZWYuZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdF IHNxbCBJTU1VVEFCTEUKKyAgICBBUyAnU0VMRUNUICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9k ZGxfeHJlZi50ICgKKyAgICBpZCAgaW50IERFRkFVTFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYu bXlzZXEnKSwKKyAgICB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9k ZGxfeHJlZi5mKHZhbCkgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGd0YmxfZGRsX3hyZWYudCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVt YV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FE RTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBs aXRlcmFscyB3aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBu YW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgU3RyaW5nCistLSBsaXRlcmFsIHRleHQgaXMgb3V0cHV0 IHZlcmJhdGltIGJ5IHRoZSBkZXBhcnNlciBhbmQgaXMgdW5hZmZlY3RlZCBieQorLS0gc2VhcmNo X3BhdGggbmFycm93aW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJs X2RkbF9zdHIucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRs X3N0ci5zZWNyZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFND SEVNQSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ug bXVzdCBOT1QgY29ycnVwdCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250 ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QK Ky0tIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJk IiBpbnNpZGUgdGhhdAorLS0gc2NoZW1hKS4gIFRoZSBtZWNoYW5pc20gaXMgcHVyZWx5IHNlYXJj aF9wYXRoIG5hcnJvd2luZzogdGhlIGRlcGFyc2VyCistLSBvdXRwdXRzIGF0dHJpYnV0ZSBuYW1l cyB2ZXJiYXRpbSBmcm9tIHBnX2F0dHJpYnV0ZSwgc28gdGhlIHF1b3RlZAorLS0gaWRlbnRpZmll ciBjb250ZW50IGlzIG5ldmVyIGV4YW1pbmVkIGZvciBzY2hlbWEgcHJlZml4ZXMuICBUaGlzIGhv bGRzCistLSBldmVuIHdoZW4gdGhlIHNjaGVtYSBuYW1lIGlzIGEgc2luZ2xlIGxldHRlci4KK0NS RUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAg KGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBwZ3Ri bF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndl aXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xaWQucGMnOjpyZWdjbGFzcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1B IHBndGJsX2RkbF9xaWQgQ0FTQ0FERTsKKy0tIFNhbWUgd2l0aCBhIHNob3J0IChzaW5nbGUtbGV0 dGVyKSBzY2hlbWEgbmFtZSB0byBjb25maXJtIHRoZXJlIGlzIG5vCistLSBtaW5pbXVtLWxlbmd0 aCBhc3N1bXB0aW9uIGluIHRoZSBzdHJpcHBpbmcgcGF0aC4KK0NSRUFURSBTQ0hFTUEgcGd0Ymxf ZGRsX3ExOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xMS5wIChpZCBpbnQsICJwZ3RibF9kZGxf cTEud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJM RSBwZ3RibF9kZGxfcTEucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xMS5wCisgICAgKENPTlNU UkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3ExLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bn dGJsX2RkbF9xMS5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9x dWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3ExIENBU0NBREU7CisK Ky0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hlbiB0aGUgYmFzZSBzY2hlbWEgbmFtZSBpdHNl bGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBwcmVmaXggc3RhcnRzIHdpdGggIikuICBCb3Ro IGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3RlZCAtIG11 c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0gQUxURVIgVEFCTEUgLyBPTiAvIENSRUFURSBJ TkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVvdGVkCistLSBpZGVudGlmaWVycyB0aGF0IGhh cHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVzdCBiZSBwcmVzZXJ2ZWQuCitDUkVBVEUgU0NI RU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFCTEUgIlBnVGJsLURkbC1RIi4iVCIgKGlkIGlu dCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAodmFsID4gMCkpOworQ1JFQVRF IElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1EZGwtUSIuIlQiICh2YWwpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwtRGRsLVEiLiJUIic6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hF TUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworCistLSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9y IHBhcnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworCitDUkVBVEUgU0VR VUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsK KworLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJvd3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoTlVMTCk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFs aWRhdGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVk IChiZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2Ff aWRlbnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNv CistLSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBj b25zdHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEg YmFyZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5k IG9ubHktbGlzdCBzaGFwZXMuCistLQorLS0gUEstYmFja2VkOiBleGNlcHRfa2luZHM9cHJpbWFy eV9rZXkgd2l0aG91dCBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJM RSByaV9wa19leGNsIChhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNs IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworLS0gU2FtZSBjYWxs IGJ1dCBhbHNvIGV4Y2x1ZGluZyByZXBsaWNhX2lkZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5JywncmVwbGljYV9pZGVudGl0 eSddKTsKK0RST1AgVEFCTEUgcmlfcGtfZXhjbDsKKworLS0gVU5JUVVFLWNvbnN0cmFpbnQtYmFj a2VkIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXguCitDUkVBVEUgVEFCTEUgcmlfdW5pcV9leGNsIChh IGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJpX3VuaXFfZXhjbCBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX3VuaXFfZXhjbF9hX2tleTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitE Uk9QIFRBQkxFIHJpX3VuaXFfZXhjbDsKKworLS0gQmFyZSBDUkVBVEUgVU5JUVVFIElOREVYIChu byBiYWNraW5nIGNvbnN0cmFpbnQpIHVzZWQgYXMgUkVQTElDQQorLS0gSURFTlRJVFk6IHRoZSBp bmRleCBpcyBlbWl0dGVkIGJ5IHRoZSAiaW5kZXgiIGtpbmQsIHNvIGV4Y2x1ZGluZworLS0gImlu ZGV4IiB3aXRob3V0IGFsc28gZXhjbHVkaW5nICJyZXBsaWNhX2lkZW50aXR5IiBtdXN0IGVycm9y LgorQ1JFQVRFIFRBQkxFIHJpX2lkeF9leGNsIChhIGludCBOT1QgTlVMTCwgYiBpbnQpOworQ1JF QVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXEgT04gcmlfaWR4X2V4Y2wgKGEpOwor QUxURVIgVEFCTEUgcmlfaWR4X2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9p ZHhfZXhjbF9hX3VuaXE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9l eGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2lu ZGV4J10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCcsJ3Jl cGxpY2FfaWRlbnRpdHknXSk7CitEUk9QIFRBQkxFIHJpX2lkeF9leGNsOworCistLSBJbmNsdWRl LXNpZGUgYW5hbG9nOiBvbmx5X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRo ZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRleCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4K K0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FM VEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ff a2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10p OworLS0gSW5jbHVkaW5nIGJvdGgga2luZHMgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitEUk9QIFRBQkxFIHJp X29ubHk7CisKKy0tIFBlci1raW5kIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgY292ZXJhZ2Uu ICBGb3IgZWFjaCBraW5kIGluIHRoZSB2b2NhYnVsYXJ5LAorLS0gdmVyaWZ5IHRoYXQgb25seV9r aW5kcz1LIGVtaXRzIGp1c3QgdGhhdCBraW5kJ3Mgb3V0cHV0IGFuZCB0aGF0IGV4Y2VwdF9raW5k cz1LCistLSBvbWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dC4gIEtpbmRzIHdpdGggbm8gZml4 dHVyZSBhYm92ZSAodHJpZ2dlciwKKy0tIHBvbGljeSkgYXJlIHN0aWxsIHJlY29nbml6ZWQgYnV0 IGN1cnJlbnRseSBlbWl0IG5vdGhpbmc7IG9ubHlfa2luZHM9SworLS0gcmV0dXJucyB6ZXJvIHJv d3MgZm9yIHRoZW0uICBGaXh0dXJlcyB1c2VkOgorLS0gICBpZHhkOiBQSyArIHR3byBzZWNvbmRh cnkgQ1JFQVRFIElOREVYCistLSAgIGNvbnM6IFBLICsgVU5JUVVFICsgQ0hFQ0sgKyBGSyAoY29u c3RyYWludC1iYWNrZWQpCistLSAgIHJ0OiAgIENSRUFURSBSVUxFCistLSAgIHN0eDogIENSRUFU RSBTVEFUSVNUSUNTCistLSAgIHJsczogIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkK Ky0tICAgcmlfZnVsbDogUkVQTElDQSBJREVOVElUWSBGVUxMIChubyBzb3VyY2Uta2luZCBkZXBl bmRlbmN5KQorQ1JFQVRFIFRBQkxFIGV4Y2xfZml4IChybmcgaW50NHJhbmdlLAorICAgIEVYQ0xV REUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpKTsKKworLS0gb25seV9raW5kcz1LOiBlbWl0IG9u bHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5k ZXgnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tp bmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydy dWxlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3MnXSk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10pOworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90 IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAv IHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3RyaWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydw b2xpY3knXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1LOiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtp bmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklRVUUvCistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9u IHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2 YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsn cHJpbWFyeV9rZXknXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10p OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7CistLSB0cmlnZ2VyIC8gcG9saWN5 IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdn ZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRz ID0+IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9dGFibGUgc3VwcHJlc3NlcyB0 aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCAr IGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJ10pOworCistLSBNdWx0aS1raW5k IGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndGFibGUnLCdpbmRl eCddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCdmb3JlaWdu X2tleSddKTsKKy0tIER1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBzaWxlbnRseSBk ZS1kdXBsaWNhdGVkIGJ5IHRoZQorLS0gQml0bWFwc2V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydpbmRleCcsJ2luZGV4J10pOworCitEUk9QIFRBQkxFIGV4Y2xfZml4OworCistLSBv bmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBr aW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRlciBhbmQgcmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQg cHJldmlvdXNseSB3aXRoIGZvcmVpZ25fa2V5CistLSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxl LCBzdGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9u ICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5IFBLICsgY29sdW1ucykuCitTRUxFQ1QgY291bnQoKikg QVMgcnVsZV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitTRUxFQ1QgY291 bnQoKikgQVMgc3RhdHNfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10p OworU0VMRUNUIGNvdW50KCopIEFTIHJsc19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3Js cyddKTsKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J3JlcGxpY2FfaWRlbnRpdHknXSk7CitTRUxFQ1QgY291bnQoKikgQVMgZXhjbF9yb3dzCisgIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ2V4Y2x1c2lvbiddKTsKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBl ZGdlIGNhc2VzIGZvciB0aGUga2luZCBhcnJheS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4g ZXJyb3I7IHRoZSBmdW5jdGlvbiBuZXZlciByZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0 eSBhcnJheToKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFz cywgb25seV9raW5kcyA9PiBBUlJBWVtdOjp0ZXh0W10pOworLS0gTlVMTCBlbGVtZW50OgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRz ID0+IEFSUkFZW05VTEw6OnRleHRdKTsKKy0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFS UkFZWydub19zdWNoX2tpbmQnXSk7CistLSBTYW1lIGtpbmQgc3BlY2lmaWVkIHRocm91Z2ggYm90 aCBwYXJhbWV0ZXJzIGlzIHN0aWxsIG11dGV4LXJlamVjdGVkLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworCistLSBSb3VuZC10 cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxlLCBjYXB0dXJlIHRoZSBEREwg dGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1hLCByZXBsYXkgZWFjaCB0YWJs ZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNvbmZpcm0gdGhhdCBwZ19nZXRf dGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9uIG1hdGNoZXMgdGhlIG9yaWdp bmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11c3QKKy0tIHJldHVybiB6ZXJv IHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRfb3JpZyAobmFtZSB0ZXh0LCBv cmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0YmxfZGRsX3J0X29yaWcKK1NFTEVD VCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUworICAgICAgICAoJ2Jhc2ljJyks ICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xzJyksICgnZ2VuX3ZpcnR1YWwn KSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyksICgnY29ucycpLCAoJ251bGxz X25kJyksICgnaWR4X2luYycpLAorICAgICAgICAoJ2ZrX2FjdHNfdGd0JyksICgnZmtfYWN0cycp LCAoJ25vdGVuZl90Z3QnKSwgKCdub3RlbmYnKSwgKCdzZWxmX3JlZicpLCAoJ3RlbXBvcmFsX3Br JyksCisgICAgICAgICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgnYXR0b3B0 JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwgKCdwYXJ0 ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRfaGFzaF8w JyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdydCcp LAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwgKCd1 bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgo J3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3Jk KTsKKworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09OU1RBTlQgdGV4dFtdIDo9IEFSUkFZ WworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9jdXN0b20nLCAnZ2VuX2NvbHMnLCAn Z2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAnY29ucycsICdu dWxsc19uZCcsICdpZHhfaW5jJywKKyAgICAgICAgJ2ZrX2FjdHNfdGd0JywgJ2ZrX2FjdHMnLCAn bm90ZW5mX3RndCcsICdub3RlbmYnLCAnc2VsZl9yZWYnLCAndGVtcG9yYWxfcGsnLAorICAgICAg ICAnaWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRl ZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAg J3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncGFydGVkX2xpc3QnLAor ICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAgICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcs ICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAgdCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JF R0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUg U0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9P UAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3Ri bF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBPUkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAor ICAgICAgICAgICAgQkVHSU4KKyAgICAgICAgICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgICAg ICAgICBFWENFUFRJT04gV0hFTiBkdXBsaWNhdGVfdGFibGUgVEhFTgorICAgICAgICAgICAgICAg IE5VTEw7ICAtLSBwYXJ0aXRpb24gY2hpbGQgYWxyZWFkeSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQn cyBEREwKKyAgICAgICAgICAgIEVORDsKKyAgICAgICAgRU5EIExPT1A7CisgICAgRU5EIExPT1A7 CitFTkQgJCQ7CisKK1dJVEggYWZ0ZXJfZGRsIEFTICgKKyAgICBTRUxFQ1QgdC5uYW1lLCBvLm9y ZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNUIG5hbWUgRlJPTSBwZ3RibF9kZGxf cnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJs X2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCkK KykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZS T00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3NpbmctaW4tY29weScs IG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNFTEVDVCAnZXh0 cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsCisgRVhD RVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0Ymxf ZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBuYW1lLCBvcmQ7CisKKy0tIENsZWFudXAuCitE Uk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCAxMTdlNzM3OWYxMC4uZWIxMTg5NzYyYTAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xNjQ4LDYgKzE2NDgsNyBAQCBMaXN0ZW5lckVudHJ5CiBMb0luZm8KIExvYWRTdG10 CiBMb2NhbEJ1ZmZlckxvb2t1cEVudAorTG9jYWxOb3ROdWxsRW50cnkKIExvY2FsUGdCYWNrZW5k U3RhdHVzCiBMb2NhbFRyYW5zYWN0aW9uSWQKIExvY2F0aW9uCkBAIC0zMTUyLDYgKzMxNTMsNyBA QCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKIFRhYmxlRnVuY1R5cGUKIFRhYmxl SW5mbworVGFibGVEZGxDb250ZXh0CiBUYWJsZUxpa2VDbGF1c2UKIFRhYmxlU2FtcGxlQ2xhdXNl CiBUYWJsZVNjYW5EZXNjCi0tIAoyLjUxLjAKCg== --000000000000398b2d06559e6e44--