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 1vUTTF-00CWl6-1y for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Dec 2025 17:31:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vUTTE-00BFPL-0n for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Dec 2025 17:31:53 +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 1vUTTD-00BFPD-1I for pgsql-hackers@lists.postgresql.org; Sat, 13 Dec 2025 17:31:52 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vUTT9-000V8P-0J for pgsql-hackers@postgresql.org; Sat, 13 Dec 2025 17:31:51 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b735e278fa1so434176666b.0 for ; Sat, 13 Dec 2025 09:31:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765647105; x=1766251905; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=bue4fep52Us5JQwBWAWW1XRK4T+E+p/NCiRIC8utPPI=; b=mycdvmv5GhivpRyMYE9F0e22mcOG/4fqtgsa5x3zExRu7+UtKlDRL7C9+m7+CfMr5Y CtY8Is+7CGGhjwbL542PKN87/QV2/TcmTzIgkwwuPDxWMDx8FQ/Hwmj7L2o4JY+f5PGg yOdQOc0qLcrJiKbLFiuaP/OfG6nFaDGwN63VwSmui638s+qRIaB0S/wlJu7mjsg1Cpi+ IK5Ho95G2uRfzAFey7Y9QFEnzSYy38YGVnWr2H/q9YAUya2TmWNYxd8o+xxe2FBh4tQZ Ga99qERy3EJZwQ9IhNp96v8E2tY4s2XEm5CDA59UOW0NjoJsYPCTauy2EgFCzEEJ3q2q JrZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765647105; x=1766251905; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bue4fep52Us5JQwBWAWW1XRK4T+E+p/NCiRIC8utPPI=; b=eeQGbPg2r2/oTeYO6pXh8XSujmNpa5uRiRrN1mlaOSdgmwig4edtsyPTn5TwIP6vkh u97dulDFAghfPYu+wge8/mZpFv6qQ7LKY4+FY6x8en6cEdGCtdzlPRtVmpsluHPR/DWq xjkx0uHRKbW9TZAFS1VqcMC343QbWvlW6VH5A98Poymc3fNDL4WnpmQIOYvtI6rmPXPl IHx2JFMbVh1w1oD/pEf7dmqx3qnUCeoAAU78OA61wcAQxPeIx5R/ykYHneymvA/oqCM6 JJaN1XFvCYMdVGIDKAZPGG5IHLT1Cx0B1klYkWaqAsd9GoU4iQf9BakT0BO5tT6oV2wn Rcng== X-Gm-Message-State: AOJu0Yx/45r5mBG6RbxoTwsOm27wr20GZxK2Pk+Sjo/8yK/79gZfUL8i A0knH2ojr07y9xCkrc2Oiax5qvwtr7nU4tzR1RScoftUG0Oo3HNpsswF62hYZTI6TEkGC+oAKKS 33eTTe536TaKPI19fqEZahJ9tQdqhmFpS26EI X-Gm-Gg: AY/fxX72ROsV0akWFN2DhaSnNUMcJdDJduz+ZGXiht4E5NkgmI8IaTriQkt8kdShMO/ XmJ+9jDsHFqzOoHrrjfuJshnzmRK7T1va/U+94axe0Qtk2zm4Z456+FNBJBd3kP7iM40AsgrRvS 2zz+ylHNH1WiQOy/hiZN9If42Gfvf/xWtTgCgrXD7YAnnT6Fhqae/48yAm+q/CxaX6Nifd6Us4q 3ej6jrRvKnHXJW0Nw0SRM7fZjPY/3c5GsmsRxP8b8NlDBOsqhWFQDtSHTUBWupD+RIr9a4mV+DN SQPUJYeDBXOKLPvZMbK/gi+GEEjeSQ== X-Google-Smtp-Source: AGHT+IFAq/I7zkdqUibynlhQ9s+eqbQduueNDlZIaXGhyI7BJ/X0ZkqTNKeaZvrFxedqtwlsnoSCwp/uL1Q4g18Z2yY= X-Received: by 2002:a17:906:c115:b0:b77:1166:7d63 with SMTP id a640c23a62f3a-b7d238c34f1mr619886266b.40.1765647104742; Sat, 13 Dec 2025 09:31:44 -0800 (PST) MIME-Version: 1.0 From: Dharin Shah Date: Sat, 13 Dec 2025 18:31:32 +0100 X-Gm-Features: AQt7F2qyD8-5yq9sRGlO3xJEdcZWZN2eIX5Me1uDd9f62_qVL2lnwjipCvFKedE Message-ID: Subject: [PATCH] Add zstd compression for TOAST using extended header format To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000007a4fcf0645d8c026" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007a4fcf0645d8c026 Content-Type: multipart/alternative; boundary="0000000000007a4fcd0645d8c024" --0000000000007a4fcd0645d8c024 Content-Type: text/plain; charset="UTF-8" Hello PG Hackers, Want to submit a patch that implements zstd compression for TOAST data using a 20-byte TOAST pointer format, directly addressing the concerns raised in prior discussions [1 ][2 ][3 ]. A bit of a background in the 2022 thread [3 ], Robert Haas suggested: "we had better reserve the fourth bit pattern for something extensible e.g. another byte or several to specify the actual method" i.e. something like: 00 = PGLZ 01 = LZ4 10 = reserved for future emergencies 11 = extended header with additional type byte Michael also asked whether we should have "something a bit more extensible for the design of an extensible varlena header." This patch implements that idea. The format: struct varatt_external_extended { int32 va_rawsize; /* same as legacy */ uint32 va_extinfo; /* cmid=3 signals extended format */ uint8 va_flags; /* feature flags */ uint8 va_data[3]; /* va_data[0] = compression method */ Oid va_valueid; /* same as legacy */ Oid va_toastrelid; /* same as legacy */ }; *A few notes:* - Zstd only applies to external TOAST, not inline compression. The 2-bit limit in va_tcinfo stays as-is for inline data, where pglz/lz4 work fine anyway. Zstd's wins show up on larger values. - A GUC use_extended_toast_header controls whether pglz/lz4 also use the 20-byte format (defaults to off for compatibility, can enable it if you want consistency). - Legacy 16-byte pointers continue to work - we check the vartag to determine which format to read. The 4 extra bytes per pointer is negligible for typical TOAST data sizes, and it gives us room to grow. Regards, Dharin --0000000000007a4fcd0645d8c024 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello PG Hackers,

Want to submit a patch that = implements zstd compression for TOAST data using a 20-byte TOAST pointer fo= rmat, directly addressing the concerns raised in prior discussions [2][3= ].

A bit of a background in the 2022 thread [3], Ro= bert Haas suggested:
"we had better reserve the fourth bit pattern = for something extensible e.g. another byte or several to specify the actual= method"

i.e. something like:
00 =3D PGLZ
01 =3D LZ4
1= 0 =3D reserved for future emergencies
11 =3D extended header with additi= onal type byte

Michael also asked whether we should have "somet= hing a bit more extensible for the design of an extensible varlena header.&= quot;

This patch implements that idea.
The format:

=C2=A0 = struct varatt_external_extended {
=C2=A0 =C2=A0 =C2=A0 int32 =C2=A0 va_r= awsize; =C2=A0 =C2=A0 /* same as legacy */
=C2=A0 =C2=A0 =C2=A0 uint32 = =C2=A0va_extinfo; =C2=A0 =C2=A0 /* cmid=3D3 signals extended format */
= =C2=A0 =C2=A0 =C2=A0 uint8 =C2=A0 va_flags; =C2=A0 =C2=A0 =C2=A0 /* feature= flags */
=C2=A0 =C2=A0 =C2=A0 uint8 =C2=A0 va_data[3]; =C2=A0 =C2=A0 /*= va_data[0] =3D compression method */
=C2=A0 =C2=A0 =C2=A0 Oid =C2=A0 = =C2=A0 va_valueid; =C2=A0 =C2=A0 /* same as legacy */
=C2=A0 =C2=A0 =C2= =A0 Oid =C2=A0 =C2=A0 va_toastrelid; =C2=A0/* same as legacy */
=C2=A0 }= ;

A few notes:

- Zstd only applies to exter= nal TOAST, not inline compression. The 2-bit limit in va_tcinfo stays as-is= for inline data, where pglz/lz4 work fine anyway. Zstd's wins show up = on larger values.
- A GUC use_extended_toast_header controls whether pgl= z/lz4 also use the 20-byte format (defaults to off for compatibility, can e= nable it if you want consistency).
- Legacy 16-byte pointers continue to= work - we check the vartag to determine which format to read.

The 4= extra bytes per pointer is negligible for typical TOAST data sizes, and it= gives us room to grow.

Regards,
Dharin=C2=A0
--0000000000007a4fcd0645d8c024-- --0000000000007a4fcf0645d8c026 Content-Type: application/octet-stream; name="zstd-toast-compression-external.patch" Content-Disposition: attachment; filename="zstd-toast-compression-external.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj4knlq80 RnJvbSBlZTdiYTNhMGExNjBiZmU4ODExYmFkMjIzMGIyYTAyMzE3NTE4MGQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaGFyaW4gU2hhaCA8ODYxNjEzMCtEaGFyaW4tc2hhaEB1c2Vy cy5ub3JlcGx5LmdpdGh1Yi5jb20+CkRhdGU6IFNhdCwgMTMgRGVjIDIwMjUgMTE6MTY6MzUgKzAx MDAKU3ViamVjdDogW1BBVENIXSBBZGQgenN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0IGZvciBUT0FT VCB1c2luZyBleHRlbmRlZCBoZWFkZXIKIGZvcm1hdAoKLS0tCiBjb250cmliL2FtY2hlY2svdmVy aWZ5X2hlYXBhbS5jICAgICAgICAgICAgICAgfCAgNjkgKysrKystCiBzcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL2RldG9hc3QuYyAgICAgICAgICAgfCAxNjQgKysrKysrKysrKy0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9jb21wcmVzc2lvbi5jIHwgMTk5ICsrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyAgIHwgMTk4 ICsrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RvYXN0X2hlbHBlci5j ICAgICAgIHwgICAyICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMg ICAgICAgfCAgMzggKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgICAgICAg ICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAg ICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9kZXRvYXN0LmggICAgICAgICAgICAgICAg ICB8ICA0MSArKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCAgICAg ICAgfCAgMzYgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmggICAgICAg ICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL3ZhcmF0dC5oICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDE2MCArKysrKysrKysrKy0KIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L01ha2Vm aWxlICAgICAgfCAgMjAgKysKIC4uLi9leHBlY3RlZC90ZXN0X3RvYXN0X2V4dC5vdXQgICAgICAg ICAgICAgICB8IDIyOSArKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF90 b2FzdF9leHQvbWVzb24uYnVpbGQgICB8ICAzMyArKysKIC4uLi90ZXN0X3RvYXN0X2V4dC9zcWwv dGVzdF90b2FzdF9leHQuc3FsICAgICB8IDE2OSArKysrKysrKysrKysrCiAuLi4vdGVzdF90b2Fz dF9leHQvdGVzdF90b2FzdF9leHQtLTEuMC5zcWwgICAgfCAgMTkgKysKIC4uLi9tb2R1bGVzL3Rl c3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3RfZXh0LmMgICB8IDIwMCArKysrKysrKysrKysrKysKIC4u Li90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jb250cm9sICAgICB8ICAgNSArCiAyMSBm aWxlcyBjaGFuZ2VkLCAxNTM4IGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L2V4cGVjdGVk L3Rlc3RfdG9hc3RfZXh0Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF90b2FzdF9leHQvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3NxbC90ZXN0X3RvYXN0X2V4dC5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9hc3RfZXh0LS0x LjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4 dC90ZXN0X3RvYXN0X2V4dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jb250cm9sCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFt LmMKaW5kZXggMTMwYjM1MzM0NjMuLjI1Y2FlNGQwMzgwIDEwMDY0NAotLS0gYS9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X2hlYXBhbS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFt LmMKQEAgLTE2NjUsNiArMTY2NSw4IEBAIGNoZWNrX3R1cGxlX2F0dHJpYnV0ZShIZWFwQ2hlY2tD b250ZXh0ICpjdHgpCiAJdWludDE2CQlpbmZvbWFzazsKIAlDb21wYWN0QXR0cmlidXRlICp0aGlz YXR0OwogCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwlzdHJ1Y3QgdmFy YXR0X2V4dGVybmFsX2V4dGVuZGVkIHRvYXN0X3BvaW50ZXJfZXh0OworCWJvb2wJCWlzX2V4dGVu ZGVkOwogCiAJaW5mb21hc2sgPSBjdHgtPnR1cGhkci0+dF9pbmZvbWFzazsKIAl0aGlzYXR0ID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIoUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCksIGN0eC0+YXR0 bnVtKTsKQEAgLTE3MTcsMTMgKzE3MTksMTQgQEAgY2hlY2tfdHVwbGVfYXR0cmlidXRlKEhlYXBD aGVja0NvbnRleHQgKmN0eCkKIAogCS8qCiAJICogQ2hlY2sgdGhhdCBWQVJUQUdfU0laRSB3b24n dCBoaXQgYW4gQXNzZXJ0IG9uIGEgY29ycnVwdCB2YV90YWcgYmVmb3JlCi0JICogcmlza2luZyBh IGNhbGwgaW50byBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIKKwkgKiByaXNraW5nIGEgY2FsbCBpbnRv IGF0dF9hZGRsZW5ndGhfcG9pbnRlci4gIEJvdGggbGVnYWN5IChWQVJUQUdfT05ESVNLKQorCSAq IGFuZCBleHRlbmRlZCAoVkFSVEFHX09ORElTS19FWFRFTkRFRCkgb24tZGlzayBmb3JtYXRzIGFy ZSB2YWxpZC4KIAkgKi8KIAlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMKHRwICsgY3R4LT5vZmZzZXQp KQogCXsKIAkJdWludDgJCXZhX3RhZyA9IFZBUlRBR19FWFRFUk5BTCh0cCArIGN0eC0+b2Zmc2V0 KTsKIAotCQlpZiAodmFfdGFnICE9IFZBUlRBR19PTkRJU0spCisJCWlmICh2YV90YWcgIT0gVkFS VEFHX09ORElTSyAmJiB2YV90YWcgIT0gVkFSVEFHX09ORElTS19FWFRFTkRFRCkKIAkJewogCQkJ cmVwb3J0X2NvcnJ1cHRpb24oY3R4LAogCQkJCQkJCSAgcHNwcmludGYoInRvYXN0ZWQgYXR0cmli dXRlIGhhcyB1bmV4cGVjdGVkIFRPQVNUIHRhZyAldSIsCkBAIC0xNzY4LDkgKzE3NzEsMjMgQEAg Y2hlY2tfdHVwbGVfYXR0cmlidXRlKEhlYXBDaGVja0NvbnRleHQgKmN0eCkKIAkvKiBJdCBpcyBl eHRlcm5hbCwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYWdlIG9uIGRpc2sgKi8KIAogCS8qCi0J ICogTXVzdCBjb3B5IGF0dHIgaW50byB0b2FzdF9wb2ludGVyIGZvciBhbGlnbm1lbnQgY29uc2lk ZXJhdGlvbnMKKwkgKiBNdXN0IGNvcHkgYXR0ciBpbnRvIHRvYXN0X3BvaW50ZXIgZm9yIGFsaWdu bWVudCBjb25zaWRlcmF0aW9ucy4KKwkgKiBIYW5kbGUgYm90aCBsZWdhY3kgKFZBUlRBR19PTkRJ U0spIGFuZCBleHRlbmRlZCAoVkFSVEFHX09ORElTS19FWFRFTkRFRCkKKwkgKiBmb3JtYXRzLgog CSAqLwotCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsK Kwlpc19leHRlbmRlZCA9IChWQVJUQUdfRVhURVJOQUwoYXR0cikgPT0gVkFSVEFHX09ORElTS19F WFRFTkRFRCk7CisKKwlpZiAoaXNfZXh0ZW5kZWQpCisJeworCQlWQVJBVFRfRVhURVJOQUxfR0VU X1BPSU5URVJfRVhURU5ERUQodG9hc3RfcG9pbnRlcl9leHQsIGF0dHIpOworCQkvKiBDb3B5IGNv bW1vbiBmaWVsZHMgZm9yIHNpbXBsZXIgY29kZSBiZWxvdyAqLworCQl0b2FzdF9wb2ludGVyLnZh X3Jhd3NpemUgPSB0b2FzdF9wb2ludGVyX2V4dC52YV9yYXdzaXplOworCQl0b2FzdF9wb2ludGVy LnZhX2V4dGluZm8gPSB0b2FzdF9wb2ludGVyX2V4dC52YV9leHRpbmZvOworCQl0b2FzdF9wb2lu dGVyLnZhX3ZhbHVlaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV92YWx1ZWlkOworCQl0b2FzdF9w b2ludGVyLnZhX3RvYXN0cmVsaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV90b2FzdHJlbGlkOwor CX0KKwllbHNlCisJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBh dHRyKTsKIAogCS8qIFRvYXN0ZWQgYXR0cmlidXRlcyB0b28gbGFyZ2UgdG8gYmUgdW50b2FzdGVk IHNob3VsZCBuZXZlciBiZSBzdG9yZWQgKi8KIAlpZiAodG9hc3RfcG9pbnRlci52YV9yYXdzaXpl ID4gVkFSTEVOQV9TSVpFX0xJTUlUKQpAQCAtMTc4NSw4ICsxODAyLDExIEBAIGNoZWNrX3R1cGxl X2F0dHJpYnV0ZShIZWFwQ2hlY2tDb250ZXh0ICpjdHgpCiAJCVRvYXN0Q29tcHJlc3Npb25JZCBj bWlkOwogCQlib29sCQl2YWxpZCA9IGZhbHNlOwogCi0JCS8qIENvbXByZXNzZWQgYXR0cmlidXRl cyBzaG91bGQgaGF2ZSBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotCQljbWlkID0gVE9B U1RfQ09NUFJFU1NfTUVUSE9EKCZ0b2FzdF9wb2ludGVyKTsKKwkJLyoKKwkJICogQ29tcHJlc3Nl ZCBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kLgorCQkg KiBGb3IgZXh0ZW5kZWQgcG9pbnRlcnMgd2l0aCBjbWlkPT0zLCB0aGUgYWN0dWFsIG1ldGhvZCBp cyBpbiB2YV9kYXRhWzBdLgorCQkgKi8KKwkJY21pZCA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfQ09N UFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIpOwogCQlzd2l0Y2ggKGNtaWQpCiAJCXsKIAkJCQkv KiBMaXN0IG9mIGFsbCB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgSURzICovCkBAIC0xNzk1LDYg KzE4MTUsMjcgQEAgY2hlY2tfdHVwbGVfYXR0cmlidXRlKEhlYXBDaGVja0NvbnRleHQgKmN0eCkK IAkJCQl2YWxpZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAKKwkJCQkvKiBFeHRlbmRlZCBjb21wcmVz c2lvbiAoenN0ZCBvciBwZ2x6L2x6NCBpbiBleHRlbmRlZCBmb3JtYXQpICovCisJCQljYXNlIFRP QVNUX0VYVEVOREVEX0NPTVBSRVNTSU9OX0lEOgorCQkJCWlmIChpc19leHRlbmRlZCkKKwkJCQl7 CisJCQkJCXVpbnQ4CWV4dF9tZXRob2QgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVF9DT01QUkVT U0lPTl9NRVRIT0QodG9hc3RfcG9pbnRlcl9leHQpOworCisJCQkJCS8qIFZhbGlkYXRlIGV4dGVu ZGVkIGNvbXByZXNzaW9uIG1ldGhvZCAqLworCQkJCQlzd2l0Y2ggKGV4dF9tZXRob2QpCisJCQkJ CXsKKwkJCQkJCWNhc2UgVE9BU1RfUEdMWl9FWFRfTUVUSE9EOgorCQkJCQkJY2FzZSBUT0FTVF9M WjRfRVhUX01FVEhPRDoKKwkJCQkJCWNhc2UgVE9BU1RfWlNURF9FWFRfTUVUSE9EOgorCQkJCQkJ CXZhbGlkID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJLyog SW52YWxpZCBleHRlbmRlZCBtZXRob2Qgd2lsbCBiZSByZXBvcnRlZCBiZWxvdyAqLworCQkJCQkJ CWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCiAJCQkJLyogUmVjb2duaXplZCBi dXQgaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgSUQgKi8KIAkJCWNhc2UgVE9BU1RfSU5WQUxJ RF9DT01QUkVTU0lPTl9JRDoKIAkJCQlicmVhazsKQEAgLTE4NDAsNyArMTg4MSwyMSBAQCBjaGVj a190dXBsZV9hdHRyaWJ1dGUoSGVhcENoZWNrQ29udGV4dCAqY3R4KQogCiAJCXRhID0gcGFsbG9j MF9vYmplY3QoVG9hc3RlZEF0dHJpYnV0ZSk7CiAKLQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lO VEVSKHRhLT50b2FzdF9wb2ludGVyLCBhdHRyKTsKKwkJLyoKKwkJICogRXh0cmFjdCB0b2FzdCBw b2ludGVyIGJhc2VkIG9uIGZvcm1hdC4gIEZvciBleHRlbmRlZCBmb3JtYXQsCisJCSAqIGNvcHkg Y29tbW9uIGZpZWxkcyBmcm9tIHRvYXN0X3BvaW50ZXIgd2hpY2ggd2UgYWxyZWFkeSBleHRyYWN0 ZWQKKwkJICogYWJvdmUuCisJCSAqLworCQlpZiAoaXNfZXh0ZW5kZWQpCisJCXsKKwkJCXRhLT50 b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPSB0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemU7CisJCQl0 YS0+dG9hc3RfcG9pbnRlci52YV9leHRpbmZvID0gdG9hc3RfcG9pbnRlci52YV9leHRpbmZvOwor CQkJdGEtPnRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXIudmFfdmFsdWVp ZDsKKwkJCXRhLT50b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQgPSB0b2FzdF9wb2ludGVyLnZh X3RvYXN0cmVsaWQ7CisJCX0KKwkJZWxzZQorCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVS KHRhLT50b2FzdF9wb2ludGVyLCBhdHRyKTsKKwogCQl0YS0+Ymxrbm8gPSBjdHgtPmJsa25vOwog CQl0YS0+b2ZmbnVtID0gY3R4LT5vZmZudW07CiAJCXRhLT5hdHRudW0gPSBjdHgtPmF0dG51bTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vZGV0b2FzdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi9kZXRvYXN0LmMKaW5kZXggNjI2NTE3ODc3NDIuLjZkMWMwODkw MGU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3QuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3QuYwpAQCAtMTYsNiArMTYsNyBAQAog I2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJl c3Npb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAi Y29tbW9uL2ludC5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19semNvbXByZXNzLmgiCkBAIC0yMjUs MTIgKzIyNiw0NyBAQCBkZXRvYXN0X2F0dHJfc2xpY2Uoc3RydWN0IHZhcmxlbmEgKmF0dHIsCiAK IAlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMX09ORElTSyhhdHRyKSkKIAl7Ci0JCXN0cnVjdCB2YXJh dHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKwkJaW50MzIJCW1heF9zaXplOworCQlib29sCQlp c19jb21wcmVzc2VkOworCQlib29sCQlpc19wZ2x6ID0gZmFsc2U7CiAKLQkJVkFSQVRUX0VYVEVS TkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCQkvKgorCQkgKiBIYW5kbGUg Ym90aCBsZWdhY3kgMTYtYnl0ZSBhbmQgZXh0ZW5kZWQgMjAtYnl0ZSBvbi1kaXNrIFRPQVNUCisJ CSAqIHBvaW50ZXJzLiAgQ2hlY2sgdGhlIHZhcnRhZyB0byBkZXRlcm1pbmUgd2hpY2ggZm9ybWF0 LgorCQkgKi8KKwkJaWYgKFZBUlRBR19FWFRFUk5BTChhdHRyKSA9PSBWQVJUQUdfT05ESVNLX0VY VEVOREVEKQorCQl7CisJCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkIHRvYXN0X3Bv aW50ZXJfZXh0OworCQkJdWludDgJCWV4dF9tZXRob2Q7CisKKwkJCVZBUkFUVF9FWFRFUk5BTF9H RVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCwgYXR0cik7CisJCQltYXhfc2l6 ZSA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUU0laRV9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4 dCk7CisJCQlpc19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRURfRVhU RU5ERUQodG9hc3RfcG9pbnRlcl9leHQpOworCisJCQkvKiBDaGVjayBpZiB0aGlzIGlzIHBnbHog Zm9yIHNsaWNlIG9wdGltaXphdGlvbiAqLworCQkJaWYgKGlzX2NvbXByZXNzZWQgJiYKKwkJCQlW QVJBVFRfRVhURVJOQUxfSEFTX0ZMQUcodG9hc3RfcG9pbnRlcl9leHQsIFRPQVNUX0VYVF9GTEFH X0NPTVBSRVNTSU9OKSkKKwkJCXsKKwkJCQlleHRfbWV0aG9kID0gVkFSQVRUX0VYVEVSTkFMX0dF VF9FWFRfQ09NUFJFU1NJT05fTUVUSE9EKHRvYXN0X3BvaW50ZXJfZXh0KTsKKwkJCQlpc19wZ2x6 ID0gKGV4dF9tZXRob2QgPT0gVE9BU1RfUEdMWl9FWFRfTUVUSE9EKTsKKwkJCX0KKwkJfQorCQll bHNlCisJCXsKKwkJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKworCQkJ VkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCQkJbWF4 X3NpemUgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CisJCQlp c19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRl cik7CisKKwkJCS8qIENoZWNrIGlmIHRoaXMgaXMgcGdseiBmb3Igc2xpY2Ugb3B0aW1pemF0aW9u ICovCisJCQlpZiAoaXNfY29tcHJlc3NlZCkKKwkJCQlpc19wZ2x6ID0gKFZBUkFUVF9FWFRFUk5B TF9HRVRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIpID09CisJCQkJCQkgICBUT0FTVF9Q R0xaX0NPTVBSRVNTSU9OX0lEKTsKKwkJfQogCiAJCS8qIGZhc3QgcGF0aCBmb3Igbm9uLWNvbXBy ZXNzZWQgZXh0ZXJuYWwgZGF0dW1zICovCi0JCWlmICghVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBS RVNTRUQodG9hc3RfcG9pbnRlcikpCisJCWlmICghaXNfY29tcHJlc3NlZCkKIAkJCXJldHVybiB0 b2FzdF9mZXRjaF9kYXR1bV9zbGljZShhdHRyLCBzbGljZW9mZnNldCwgc2xpY2VsZW5ndGgpOwog CiAJCS8qCkBAIC0yNDAsMTkgKzI3NiwxNiBAQCBkZXRvYXN0X2F0dHJfc2xpY2Uoc3RydWN0IHZh cmxlbmEgKmF0dHIsCiAJCSAqLwogCQlpZiAoc2xpY2VsaW1pdCA+PSAwKQogCQl7Ci0JCQlpbnQz MgkJbWF4X3NpemUgPSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7 Ci0KIAkJCS8qCiAJCQkgKiBEZXRlcm1pbmUgbWF4aW11bSBhbW91bnQgb2YgY29tcHJlc3NlZCBk YXRhIG5lZWRlZCBmb3IgYSBwcmVmaXgKIAkJCSAqIG9mIGEgZ2l2ZW4gbGVuZ3RoIChhZnRlciBk ZWNvbXByZXNzaW9uKS4KIAkJCSAqCi0JCQkgKiBBdCBsZWFzdCBmb3Igbm93LCBpZiBpdCdzIExa NCBkYXRhLCB3ZSdsbCBoYXZlIHRvIGZldGNoIHRoZQotCQkJICogd2hvbGUgdGhpbmcsIGJlY2F1 c2UgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFuIEFQSSBjYWxsIHRvCi0JCQkgKiBkZXRlcm1p bmUgaG93IG11Y2ggY29tcHJlc3NlZCBkYXRhIHdlIG5lZWQgdG8gYmUgc3VyZSBvZiBiZWluZwot CQkJICogYWJsZSB0byBkZWNvbXByZXNzIHRoZSByZXF1aXJlZCBzbGljZS4KKwkJCSAqIEF0IGxl YXN0IGZvciBub3csIGlmIGl0J3MgTFo0IG9yIHpzdGQgZGF0YSwgd2UnbGwgaGF2ZSB0byBmZXRj aAorCQkJICogdGhlIHdob2xlIHRoaW5nLCBiZWNhdXNlIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBi ZSBhbiBBUEkgY2FsbAorCQkJICogdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIGNvbXByZXNzZWQgZGF0 YSB3ZSBuZWVkIHRvIGJlIHN1cmUgb2YKKwkJCSAqIGJlaW5nIGFibGUgdG8gZGVjb21wcmVzcyB0 aGUgcmVxdWlyZWQgc2xpY2UuCiAJCQkgKi8KLQkJCWlmIChWQVJBVFRfRVhURVJOQUxfR0VUX0NP TVBSRVNTX01FVEhPRCh0b2FzdF9wb2ludGVyKSA9PQotCQkJCVRPQVNUX1BHTFpfQ09NUFJFU1NJ T05fSUQpCisJCQlpZiAoaXNfcGdseikKIAkJCQltYXhfc2l6ZSA9IHBnbHpfbWF4aW11bV9jb21w cmVzc2VkX3NpemUoc2xpY2VsaW1pdCwgbWF4X3NpemUpOwogCiAJCQkvKgpAQCAtMzQ0LDIwICsz NzcsNDIgQEAgdG9hc3RfZmV0Y2hfZGF0dW0oc3RydWN0IHZhcmxlbmEgKmF0dHIpCiB7CiAJUmVs YXRpb24JdG9hc3RyZWw7CiAJc3RydWN0IHZhcmxlbmEgKnJlc3VsdDsKLQlzdHJ1Y3QgdmFyYXR0 X2V4dGVybmFsIHRvYXN0X3BvaW50ZXI7CiAJaW50MzIJCWF0dHJzaXplOworCU9pZAkJCXRvYXN0 cmVsaWQ7CisJT2lkCQkJdmFsdWVpZDsKKwlib29sCQlpc19jb21wcmVzc2VkOwogCiAJaWYgKCFW QVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIpKQogCQllbG9nKEVSUk9SLCAidG9hc3RfZmV0 Y2hfZGF0dW0gc2hvdWxkbid0IGJlIGNhbGxlZCBmb3Igbm9uLW9uZGlzayBkYXR1bXMiKTsKIAot CS8qIE11c3QgY29weSB0byBhY2Nlc3MgYWxpZ25lZCBmaWVsZHMgKi8KLQlWQVJBVFRfRVhURVJO QUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7CisJLyoKKwkgKiBIYW5kbGUgYm90 aCBsZWdhY3kgMTYtYnl0ZSBhbmQgZXh0ZW5kZWQgMjAtYnl0ZSBvbi1kaXNrIFRPQVNUIHBvaW50 ZXJzLgorCSAqIENoZWNrIHRoZSB2YXJ0YWcgdG8gZGV0ZXJtaW5lIHdoaWNoIGZvcm1hdCB3ZSdy ZSBkZWFsaW5nIHdpdGguCisJICovCisJaWYgKFZBUlRBR19FWFRFUk5BTChhdHRyKSA9PSBWQVJU QUdfT05ESVNLX0VYVEVOREVEKQorCXsKKwkJc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRl ZCB0b2FzdF9wb2ludGVyX2V4dDsKKworCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVJfRVhU RU5ERUQodG9hc3RfcG9pbnRlcl9leHQsIGF0dHIpOworCQlhdHRyc2l6ZSA9IFZBUkFUVF9FWFRF Uk5BTF9HRVRfRVhUU0laRV9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCk7CisJCXRvYXN0cmVs aWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV90b2FzdHJlbGlkOworCQl2YWx1ZWlkID0gdG9hc3Rf cG9pbnRlcl9leHQudmFfdmFsdWVpZDsKKwkJaXNfY29tcHJlc3NlZCA9IFZBUkFUVF9FWFRFUk5B TF9JU19DT01QUkVTU0VEX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0KTsKKwl9CisJZWxzZQor CXsKKwkJc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOwogCi0JYXR0cnNpemUg PSBWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CisJCVZBUkFUVF9F WFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsKKwkJYXR0cnNpemUgPSBW QVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcik7CisJCXRvYXN0cmVsaWQg PSB0b2FzdF9wb2ludGVyLnZhX3RvYXN0cmVsaWQ7CisJCXZhbHVlaWQgPSB0b2FzdF9wb2ludGVy LnZhX3ZhbHVlaWQ7CisJCWlzX2NvbXByZXNzZWQgPSBWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJF U1NFRCh0b2FzdF9wb2ludGVyKTsKKwl9CiAKIAlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikg cGFsbG9jKGF0dHJzaXplICsgVkFSSERSU1opOwogCi0JaWYgKFZBUkFUVF9FWFRFUk5BTF9JU19D T01QUkVTU0VEKHRvYXN0X3BvaW50ZXIpKQorCWlmIChpc19jb21wcmVzc2VkKQogCQlTRVRfVkFS U0laRV9DT01QUkVTU0VEKHJlc3VsdCwgYXR0cnNpemUgKyBWQVJIRFJTWik7CiAJZWxzZQogCQlT RVRfVkFSU0laRShyZXN1bHQsIGF0dHJzaXplICsgVkFSSERSU1opOwpAQCAtMzY5LDEwICs0MjQs MTAgQEAgdG9hc3RfZmV0Y2hfZGF0dW0oc3RydWN0IHZhcmxlbmEgKmF0dHIpCiAJLyoKIAkgKiBP cGVuIHRoZSB0b2FzdCByZWxhdGlvbiBhbmQgaXRzIGluZGV4ZXMKIAkgKi8KLQl0b2FzdHJlbCA9 IHRhYmxlX29wZW4odG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCXRvYXN0cmVsID0gdGFibGVfb3Blbih0b2FzdHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwog CiAJLyogRmV0Y2ggYWxsIGNodW5rcyAqLwotCXRhYmxlX3JlbGF0aW9uX2ZldGNoX3RvYXN0X3Ns aWNlKHRvYXN0cmVsLCB0b2FzdF9wb2ludGVyLnZhX3ZhbHVlaWQsCisJdGFibGVfcmVsYXRpb25f ZmV0Y2hfdG9hc3Rfc2xpY2UodG9hc3RyZWwsIHZhbHVlaWQsCiAJCQkJCQkJCQkgYXR0cnNpemUs IDAsIGF0dHJzaXplLCByZXN1bHQpOwogCiAJLyogQ2xvc2UgdG9hc3QgdGFibGUgKi8KQEAgLTM5 OCwyMyArNDUzLDQ1IEBAIHRvYXN0X2ZldGNoX2RhdHVtX3NsaWNlKHN0cnVjdCB2YXJsZW5hICph dHRyLCBpbnQzMiBzbGljZW9mZnNldCwKIHsKIAlSZWxhdGlvbgl0b2FzdHJlbDsKIAlzdHJ1Y3Qg dmFybGVuYSAqcmVzdWx0OwotCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsK IAlpbnQzMgkJYXR0cnNpemU7CisJT2lkCQkJdG9hc3RyZWxpZDsKKwlPaWQJCQl2YWx1ZWlkOwor CWJvb2wJCWlzX2NvbXByZXNzZWQ7CiAKIAlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0so YXR0cikpCiAJCWVsb2coRVJST1IsICJ0b2FzdF9mZXRjaF9kYXR1bV9zbGljZSBzaG91bGRuJ3Qg YmUgY2FsbGVkIGZvciBub24tb25kaXNrIGRhdHVtcyIpOwogCi0JLyogTXVzdCBjb3B5IHRvIGFj Y2VzcyBhbGlnbmVkIGZpZWxkcyAqLwotCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2Fz dF9wb2ludGVyLCBhdHRyKTsKKwkvKgorCSAqIEhhbmRsZSBib3RoIGxlZ2FjeSAxNi1ieXRlIGFu ZCBleHRlbmRlZCAyMC1ieXRlIG9uLWRpc2sgVE9BU1QgcG9pbnRlcnMuCisJICogQ2hlY2sgdGhl IHZhcnRhZyB0byBkZXRlcm1pbmUgd2hpY2ggZm9ybWF0IHdlJ3JlIGRlYWxpbmcgd2l0aC4KKwkg Ki8KKwlpZiAoVkFSVEFHX0VYVEVSTkFMKGF0dHIpID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQp CisJeworCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkIHRvYXN0X3BvaW50ZXJfZXh0 OworCisJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVy X2V4dCwgYXR0cik7CisJCWF0dHJzaXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFX0VY VEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0KTsKKwkJdG9hc3RyZWxpZCA9IHRvYXN0X3BvaW50ZXJf ZXh0LnZhX3RvYXN0cmVsaWQ7CisJCXZhbHVlaWQgPSB0b2FzdF9wb2ludGVyX2V4dC52YV92YWx1 ZWlkOworCQlpc19jb21wcmVzc2VkID0gVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRURfRVhU RU5ERUQodG9hc3RfcG9pbnRlcl9leHQpOworCX0KKwllbHNlCisJeworCQlzdHJ1Y3QgdmFyYXR0 X2V4dGVybmFsIHRvYXN0X3BvaW50ZXI7CisKKwkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVS KHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCQlhdHRyc2l6ZSA9IFZBUkFUVF9FWFRFUk5BTF9HRVRf RVhUU0laRSh0b2FzdF9wb2ludGVyKTsKKwkJdG9hc3RyZWxpZCA9IHRvYXN0X3BvaW50ZXIudmFf dG9hc3RyZWxpZDsKKwkJdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwkJaXNf Y29tcHJlc3NlZCA9IFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEKHRvYXN0X3BvaW50ZXIp OworCX0KIAogCS8qCiAJICogSXQncyBub25zZW5zZSB0byBmZXRjaCBzbGljZXMgb2YgYSBjb21w cmVzc2VkIGRhdHVtIHVubGVzcyB3aGVuIGl0J3MgYQogCSAqIHByZWZpeCAtLSB0aGlzIGlzbid0 IGxvXyogd2UgY2FuJ3QgcmV0dXJuIGEgY29tcHJlc3NlZCBkYXR1bSB3aGljaCBpcwogCSAqIG1l YW5pbmdmdWwgdG8gdG9hc3QgbGF0ZXIuCiAJICovCi0JQXNzZXJ0KCFWQVJBVFRfRVhURVJOQUxf SVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVyKSB8fCAwID09IHNsaWNlb2Zmc2V0KTsKLQotCWF0 dHJzaXplID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3BvaW50ZXIpOworCUFz c2VydCghaXNfY29tcHJlc3NlZCB8fCAwID09IHNsaWNlb2Zmc2V0KTsKIAogCWlmIChzbGljZW9m ZnNldCA+PSBhdHRyc2l6ZSkKIAl7CkBAIC00MjcsNyArNTA0LDcgQEAgdG9hc3RfZmV0Y2hfZGF0 dW1fc2xpY2Uoc3RydWN0IHZhcmxlbmEgKmF0dHIsIGludDMyIHNsaWNlb2Zmc2V0LAogCSAqIHNw YWNlIHJlcXVpcmVkIGJ5IHZhX3RjaW5mbywgd2hpY2ggaXMgc3RvcmVkIGF0IHRoZSBiZWdpbm5p bmcgYXMgYW4KIAkgKiBpbnQzMiB2YWx1ZS4KIAkgKi8KLQlpZiAoVkFSQVRUX0VYVEVSTkFMX0lT X0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcikgJiYgc2xpY2VsZW5ndGggPiAwKQorCWlmIChpc19j b21wcmVzc2VkICYmIHNsaWNlbGVuZ3RoID4gMCkKIAkJc2xpY2VsZW5ndGggPSBzbGljZWxlbmd0 aCArIHNpemVvZihpbnQzMik7CiAKIAkvKgpAQCAtNDQwLDcgKzUxNyw3IEBAIHRvYXN0X2ZldGNo X2RhdHVtX3NsaWNlKHN0cnVjdCB2YXJsZW5hICphdHRyLCBpbnQzMiBzbGljZW9mZnNldCwKIAog CXJlc3VsdCA9IChzdHJ1Y3QgdmFybGVuYSAqKSBwYWxsb2Moc2xpY2VsZW5ndGggKyBWQVJIRFJT Wik7CiAKLQlpZiAoVkFSQVRUX0VYVEVSTkFMX0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcikp CisJaWYgKGlzX2NvbXByZXNzZWQpCiAJCVNFVF9WQVJTSVpFX0NPTVBSRVNTRUQocmVzdWx0LCBz bGljZWxlbmd0aCArIFZBUkhEUlNaKTsKIAllbHNlCiAJCVNFVF9WQVJTSVpFKHJlc3VsdCwgc2xp Y2VsZW5ndGggKyBWQVJIRFJTWik7CkBAIC00NDksMTAgKzUyNiwxMCBAQCB0b2FzdF9mZXRjaF9k YXR1bV9zbGljZShzdHJ1Y3QgdmFybGVuYSAqYXR0ciwgaW50MzIgc2xpY2VvZmZzZXQsCiAJCXJl dHVybiByZXN1bHQ7CQkJLyogQ2FuIHNhdmUgYSBsb3Qgb2Ygd29yayBhdCB0aGlzIHBvaW50ISAq LwogCiAJLyogT3BlbiB0aGUgdG9hc3QgcmVsYXRpb24gKi8KLQl0b2FzdHJlbCA9IHRhYmxlX29w ZW4odG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCXRvYXN0 cmVsID0gdGFibGVfb3Blbih0b2FzdHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJLyogRmV0 Y2ggYWxsIGNodW5rcyAqLwotCXRhYmxlX3JlbGF0aW9uX2ZldGNoX3RvYXN0X3NsaWNlKHRvYXN0 cmVsLCB0b2FzdF9wb2ludGVyLnZhX3ZhbHVlaWQsCisJdGFibGVfcmVsYXRpb25fZmV0Y2hfdG9h c3Rfc2xpY2UodG9hc3RyZWwsIHZhbHVlaWQsCiAJCQkJCQkJCQkgYXR0cnNpemUsIHNsaWNlb2Zm c2V0LCBzbGljZWxlbmd0aCwKIAkJCQkJCQkJCSByZXN1bHQpOwogCkBAIC00ODUsNiArNTYyLDkg QEAgdG9hc3RfZGVjb21wcmVzc19kYXR1bShzdHJ1Y3QgdmFybGVuYSAqYXR0cikKIAkJCXJldHVy biBwZ2x6X2RlY29tcHJlc3NfZGF0dW0oYXR0cik7CiAJCWNhc2UgVE9BU1RfTFo0X0NPTVBSRVNT SU9OX0lEOgogCQkJcmV0dXJuIGx6NF9kZWNvbXByZXNzX2RhdHVtKGF0dHIpOworCQljYXNlIFRP QVNUX0VYVEVOREVEX0NPTVBSRVNTSU9OX0lEOgorCQkJLyogenN0ZC1jb21wcmVzc2VkIGRhdGEg Ki8KKwkJCXJldHVybiB6c3RkX2RlY29tcHJlc3NfZGF0dW0oYXR0cik7CiAJCWRlZmF1bHQ6CiAJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgaWQgJWQiLCBjbWlkKTsK IAkJCXJldHVybiBOVUxMOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwpAQCAtNTI4LDYgKzYw OCw5IEBAIHRvYXN0X2RlY29tcHJlc3NfZGF0dW1fc2xpY2Uoc3RydWN0IHZhcmxlbmEgKmF0dHIs IGludDMyIHNsaWNlbGVuZ3RoKQogCQkJcmV0dXJuIHBnbHpfZGVjb21wcmVzc19kYXR1bV9zbGlj ZShhdHRyLCBzbGljZWxlbmd0aCk7CiAJCWNhc2UgVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEOgog CQkJcmV0dXJuIGx6NF9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGF0dHIsIHNsaWNlbGVuZ3RoKTsK KwkJY2FzZSBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRDoKKwkJCS8qIHpzdGQtY29tcHJl c3NlZCBkYXRhICovCisJCQlyZXR1cm4genN0ZF9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGF0dHIs IHNsaWNlbGVuZ3RoKTsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvbXBy ZXNzaW9uIG1ldGhvZCBpZCAlZCIsIGNtaWQpOwogCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCkBAIC01NDksMTEgKzYzMiwxNSBAQCB0b2FzdF9yYXdfZGF0dW1fc2l6 ZShEYXR1bSB2YWx1ZSkKIAogCWlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIpKQog CXsKLQkJLyogdmFfcmF3c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgZGF0dW0gLS0g aW5jbHVkaW5nIGhlYWRlciAqLwotCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0X3BvaW50 ZXI7CisJCS8qCisJCSAqIHZhX3Jhd3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsIGRh dHVtIC0tIGluY2x1ZGluZyBoZWFkZXIuCisJCSAqIEl0J3MgYXQgb2Zmc2V0IDAgaW4gYm90aCB2 YXJhdHRfZXh0ZXJuYWwgYW5kIHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCwKKwkJICogc28gd2Ug Y2FuIHJlYWQganVzdCB0aGUgZmlyc3QgNCBieXRlcyByZWdhcmRsZXNzIG9mIGZvcm1hdC4KKwkJ ICovCisJCWludDMyCXZhX3Jhd3NpemU7CiAKLQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVS KHRvYXN0X3BvaW50ZXIsIGF0dHIpOwotCQlyZXN1bHQgPSB0b2FzdF9wb2ludGVyLnZhX3Jhd3Np emU7CisJCW1lbWNweSgmdmFfcmF3c2l6ZSwgVkFSREFUQV9FWFRFUk5BTChhdHRyKSwgc2l6ZW9m KHZhX3Jhd3NpemUpKTsKKwkJcmVzdWx0ID0gdmFfcmF3c2l6ZTsKIAl9CiAJZWxzZSBpZiAoVkFS QVRUX0lTX0VYVEVSTkFMX0lORElSRUNUKGF0dHIpKQogCXsKQEAgLTYwOSwxMSArNjk2LDE4IEBA IHRvYXN0X2RhdHVtX3NpemUoRGF0dW0gdmFsdWUpCiAJCSAqIEF0dHJpYnV0ZSBpcyBzdG9yZWQg ZXh0ZXJuYWxseSAtIHJldHVybiB0aGUgZXh0c2l6ZSB3aGV0aGVyCiAJCSAqIGNvbXByZXNzZWQg b3Igbm90LiAgV2UgZG8gbm90IGNvdW50IHRoZSBzaXplIG9mIHRoZSB0b2FzdCBwb2ludGVyCiAJ CSAqIC4uLiBzaG91bGQgd2U/CisJCSAqCisJCSAqIHZhX2V4dGluZm8gaXMgYXQgb2Zmc2V0IDQg aW4gYm90aCB2YXJhdHRfZXh0ZXJuYWwgYW5kCisJCSAqIHZhcmF0dF9leHRlcm5hbF9leHRlbmRl ZCwgc28gd2UgY2FuIHJlYWQgdGhlIGZpcnN0IDggYnl0ZXMKKwkJICogcmVnYXJkbGVzcyBvZiBm b3JtYXQuCiAJCSAqLwotCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0X3BvaW50ZXI7CisJ CXN0cnVjdCB7CisJCQlpbnQzMgl2YV9yYXdzaXplOworCQkJdWludDMyCXZhX2V4dGluZm87CisJ CX0gY29tbW9uOwogCi0JCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVy LCBhdHRyKTsKLQkJcmVzdWx0ID0gVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3Bv aW50ZXIpOworCQltZW1jcHkoJmNvbW1vbiwgVkFSREFUQV9FWFRFUk5BTChhdHRyKSwgc2l6ZW9m KGNvbW1vbikpOworCQlyZXN1bHQgPSBjb21tb24udmFfZXh0aW5mbyAmIFZBUkxFTkFfRVhUU0la RV9NQVNLOwogCX0KIAllbHNlIGlmIChWQVJBVFRfSVNfRVhURVJOQUxfSU5ESVJFQ1QoYXR0cikp CiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9jb21wcmVz c2lvbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9jb21wcmVzc2lvbi5jCmlu ZGV4IDkyNmYxZTQwMDhhLi40MjJlMmM1OTY3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi90b2FzdF9jb21wcmVzc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vdG9hc3RfY29tcHJlc3Npb24uYwpAQCAtMTcsMTMgKzE3LDE5IEBACiAjaW5jbHVkZSA8 bHo0Lmg+CiAjZW5kaWYKIAorI2lmZGVmIFVTRV9aU1RECisjaW5jbHVkZSA8enN0ZC5oPgorI2Vu ZGlmCisKICNpbmNsdWRlICJhY2Nlc3MvZGV0b2FzdC5oIgogI2luY2x1ZGUgImFjY2Vzcy90b2Fz dF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19semNvbXByZXNzLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ2YXJhdHQuaCIKIAogLyogR1VDICov CiBpbnQJCQlkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gVE9BU1RfUEdMWl9DT01QUkVTU0lP TjsKK2Jvb2wJCXVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBmYWxzZTsKIAogI2RlZmluZSBO T19DT01QUkVTU0lPTl9TVVBQT1JUKG1ldGhvZCkgXAogCWVyZXBvcnQoRVJST1IsIFwKQEAgLTI0 OSwxMSArMjU1LDE2IEBAIGx6NF9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGNvbnN0IHN0cnVjdCB2 YXJsZW5hICp2YWx1ZSwgaW50MzIgc2xpY2VsZW5ndGgpCiAgKiBFeHRyYWN0IGNvbXByZXNzaW9u IElEIGZyb20gYSB2YXJsZW5hLgogICoKICAqIFJldHVybnMgVE9BU1RfSU5WQUxJRF9DT01QUkVT U0lPTl9JRCBpZiB0aGUgdmFybGVuYSBpcyBub3QgY29tcHJlc3NlZC4KKyAqCisgKiBGb3IgZXh0 ZXJuYWwgZGF0YSBzdG9yZWQgaW4gZXh0ZW5kZWQgZm9ybWF0IChWQVJUQUdfT05ESVNLX0VYVEVO REVEKSwKKyAqIHRoZSBhY3R1YWwgY29tcHJlc3Npb24gbWV0aG9kIGlzIHN0b3JlZCBpbiB2YV9k YXRhWzBdLiAgV2UgbWFwIHRoYXQKKyAqIGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIFRvYXN0Q29t cHJlc3Npb25JZCBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkuCiAgKi8KIFRvYXN0Q29tcHJlc3Np b25JZAogdG9hc3RfZ2V0X2NvbXByZXNzaW9uX2lkKHN0cnVjdCB2YXJsZW5hICphdHRyKQogewog CVRvYXN0Q29tcHJlc3Npb25JZCBjbWlkID0gVE9BU1RfSU5WQUxJRF9DT01QUkVTU0lPTl9JRDsK Kwl2YXJ0YWdfZXh0ZXJuYWwgdGFnOwogCiAJLyoKIAkgKiBJZiBpdCBpcyBzdG9yZWQgZXh0ZXJu YWxseSB0aGVuIGZldGNoIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaWQgZnJvbQpAQCAtMjYyLDEy ICsyNzMsNTIgQEAgdG9hc3RfZ2V0X2NvbXByZXNzaW9uX2lkKHN0cnVjdCB2YXJsZW5hICphdHRy KQogCSAqLwogCWlmIChWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKGF0dHIpKQogCXsKLQkJc3Ry dWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOwotCi0JCVZBUkFUVF9FWFRFUk5BTF9H RVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsKLQotCQlpZiAoVkFSQVRUX0VYVEVSTkFM X0lTX0NPTVBSRVNTRUQodG9hc3RfcG9pbnRlcikpCi0JCQljbWlkID0gVkFSQVRUX0VYVEVSTkFM X0dFVF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRlcik7CisJCXRhZyA9IFZBUlRBR19FWFRF Uk5BTChhdHRyKTsKKwkJaWYgKHRhZyA9PSBWQVJUQUdfT05ESVNLKQorCQl7CisJCQlzdHJ1Y3Qg dmFyYXR0X2V4dGVybmFsIHRvYXN0X3BvaW50ZXI7CisKKwkJCVZBUkFUVF9FWFRFUk5BTF9HRVRf UE9JTlRFUih0b2FzdF9wb2ludGVyLCBhdHRyKTsKKworCQkJaWYgKFZBUkFUVF9FWFRFUk5BTF9J U19DT01QUkVTU0VEKHRvYXN0X3BvaW50ZXIpKQorCQkJCWNtaWQgPSBWQVJBVFRfRVhURVJOQUxf R0VUX0NPTVBSRVNTX01FVEhPRCh0b2FzdF9wb2ludGVyKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQ7CisJCQl1 aW50OAkJZXh0X21ldGhvZDsKKworCQkJQXNzZXJ0KHRhZyA9PSBWQVJUQUdfT05ESVNLX0VYVEVO REVEKTsKKwkJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCh0b2FzdF9wb2lu dGVyX2V4dCwgYXR0cik7CisKKwkJCWlmIChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRF9F WFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBFeHRlbmRl ZCBmb3JtYXQgc3RvcmVzIHRoZSBhY3R1YWwgbWV0aG9kIGluIHZhX2RhdGFbMF0uCisJCQkJICog TWFwIGl0IGJhY2sgdG8gVG9hc3RDb21wcmVzc2lvbklkIGZvciByZXBvcnRpbmcgcHVycG9zZXMu CisJCQkJICovCisJCQkJZXh0X21ldGhvZCA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUX0NPTVBS RVNTSU9OX01FVEhPRCh0b2FzdF9wb2ludGVyX2V4dCk7CisJCQkJc3dpdGNoIChleHRfbWV0aG9k KQorCQkJCXsKKwkJCQkJY2FzZSBUT0FTVF9QR0xaX0VYVF9NRVRIT0Q6CisJCQkJCQljbWlkID0g VE9BU1RfUEdMWl9DT01QUkVTU0lPTl9JRDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFRPQVNU X0xaNF9FWFRfTUVUSE9EOgorCQkJCQkJY21pZCA9IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRDsK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFRPQVNUX1pTVERfRVhUX01FVEhPRDoKKwkJCQkJCWNt aWQgPSBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRDsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFRPQVNUX1VOQ09NUFJFU1NFRF9FWFRfTUVUSE9EOgorCQkJCQkJLyogVW5jb21wcmVzc2Vk IGRhdGEgaW4gZXh0ZW5kZWQgZm9ybWF0ICovCisJCQkJCQljbWlkID0gVE9BU1RfSU5WQUxJRF9D T01QUkVTU0lPTl9JRDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJZWxvZyhF UlJPUiwgImludmFsaWQgZXh0ZW5kZWQgY29tcHJlc3Npb24gbWV0aG9kICVkIiwKKwkJCQkJCQkg ZXh0X21ldGhvZCk7CisJCQkJfQorCQkJfQorCQl9CiAJfQogCWVsc2UgaWYgKFZBUkFUVF9JU19D T01QUkVTU0VEKGF0dHIpKQogCQljbWlkID0gVkFSREFUQV9DT01QUkVTU0VEX0dFVF9DT01QUkVT U19NRVRIT0QoYXR0cik7CkBAIC0yNzUsNiArMzI2LDEzMyBAQCB0b2FzdF9nZXRfY29tcHJlc3Np b25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpCiAJcmV0dXJuIGNtaWQ7CiB9CiAKKy8qCisgKiBa c3RhbmRhcmQgKHpzdGQpIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZm9yIFRPQVNUIChleHRl bmRlZCBtZXRob2RzKS4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyB1c2UgdGhlIHNhbWUgYmFzaWMg c2hhcGUgYXMgdGhlIHBnbHogYW5kIExaNCBoZWxwZXJzLAorICogYnV0IGFyZSBvbmx5IGF2YWls YWJsZSB3aGVuIFBvc3RncmVTUUwgaXMgYnVpbHQgd2l0aCBVU0VfWlNURC4KKyAqLworCisvKgor ICogQ29tcHJlc3MgYSB2YXJsZW5hIHVzaW5nIFpTVEQuCisgKgorICogUmV0dXJucyB0aGUgY29t cHJlc3NlZCB2YXJsZW5hLCBvciBOVUxMIGlmIGNvbXByZXNzaW9uIGZhaWxzIG9yIGRvZXMKKyAq IG5vdCBzYXZlIHNwYWNlLgorICovCitzdGF0aWMgc3RydWN0IHZhcmxlbmEgKgorenN0ZF9jb21w cmVzc19kYXR1bV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUsIGludCBsZXZl bCkKK3sKKyNpZm5kZWYgVVNFX1pTVEQKKwlOT19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3RkIik7 CisJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKyNlbHNlCisJU2l6 ZQkJdmFsc2l6ZTsKKwlTaXplCQltYXhfc2l6ZTsKKwlTaXplCQlvdXRfc2l6ZTsKKwlzdHJ1Y3Qg dmFybGVuYSAqdG1wOworCXNpemVfdAkJcmM7CisKKwl2YWxzaXplID0gVkFSU0laRV9BTllfRVhI RFIodmFsdWUpOworCisJLyoKKwkgKiBDb21wdXRlIGFuIHVwcGVyIGJvdW5kIGZvciB0aGUgY29t cHJlc3NlZCBzaXplIGFuZCBhbGxvY2F0ZSBlbm91Z2gKKwkgKiBzcGFjZSBmb3IgdGhlIGNvbXBy ZXNzZWQgcGF5bG9hZCBwbHVzIHRoZSB2YXJsZW5hIGhlYWRlci4KKwkgKi8KKwltYXhfc2l6ZSA9 IFpTVERfY29tcHJlc3NCb3VuZCh2YWxzaXplKTsKKwlpZiAobWF4X3NpemUgPiAoU2l6ZSkgKE1h eEFsbG9jU2l6ZSAtIFZBUkhEUlNaX0NPTVBSRVNTRUQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCisJCQkJIGVycm1zZygi Y29tcHJlc3NlZCBkYXRhIHdvdWxkIGV4Y2VlZCBtYXhpbXVtIGFsbG9jYXRpb24gc2l6ZSIpKSk7 CisKKwl0bXAgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKG1heF9zaXplICsgVkFSSERSU1pf Q09NUFJFU1NFRCk7CisKKwlyYyA9IFpTVERfY29tcHJlc3MoKGNoYXIgKikgdG1wICsgVkFSSERS U1pfQ09NUFJFU1NFRCwgbWF4X3NpemUsCisJCQkJCSAgIFZBUkRBVEFfQU5ZKHZhbHVlKSwgdmFs c2l6ZSwgbGV2ZWwpOworCWlmIChaU1REX2lzRXJyb3IocmMpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2dfaW50ZXJu YWwoInpzdGQgY29tcHJlc3Npb24gZmFpbGVkOiAlcyIsCisJCQkJCQkJCSBaU1REX2dldEVycm9y TmFtZShyYykpKSk7CisKKwlvdXRfc2l6ZSA9IChTaXplKSByYzsKKworCS8qCisJICogSWYgdGhl IGNvbXByZXNzZWQgcmVwcmVzZW50YXRpb24gaXMgbm90IHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2lu YWwKKwkgKiBwYXlsb2FkLCBnaXZlIHVwIGFuZCByZXR1cm4gTlVMTCBzbyB0aGF0IGNhbGxlcnMg Y2FuIGZhbGwgYmFjayB0bworCSAqIHN0b3JpbmcgdGhlIGRhdHVtIHVuY29tcHJlc3NlZCBvciB3 aXRoIGEgZGlmZmVyZW50IG1ldGhvZC4KKwkgKi8KKwlpZiAob3V0X3NpemUgPj0gdmFsc2l6ZSkK Kwl7CisJCXBmcmVlKHRtcCk7CisJCXJldHVybiBOVUxMOworCX0KKworCVNFVF9WQVJTSVpFX0NP TVBSRVNTRUQodG1wLCBvdXRfc2l6ZSArIFZBUkhEUlNaX0NPTVBSRVNTRUQpOworCisJcmV0dXJu IHRtcDsKKyNlbmRpZgkJCQkJCQkvKiBVU0VfWlNURCAqLworfQorCitzdHJ1Y3QgdmFybGVuYSAq Cit6c3RkX2NvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSkKK3sKKyNp Zm5kZWYgVVNFX1pTVEQKKwlOT19DT01QUkVTU0lPTl9TVVBQT1JUKCJ6c3RkIik7CisJcmV0dXJu IE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKyNlbHNlCisJcmV0dXJuIHpzdGRf Y29tcHJlc3NfZGF0dW1faW50ZXJuYWwodmFsdWUsIFpTVERfQ0xFVkVMX0RFRkFVTFQpOworI2Vu ZGlmCit9CisKKy8qCisgKiBEZWNvbXByZXNzIGEgdmFybGVuYSB0aGF0IHdhcyBjb21wcmVzc2Vk IHVzaW5nIFpTVEQuCisgKi8KK3N0cnVjdCB2YXJsZW5hICoKK3pzdGRfZGVjb21wcmVzc19kYXR1 bShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUpCit7CisjaWZuZGVmIFVTRV9aU1RECisJTk9f Q09NUFJFU1NJT05fU1VQUE9SVCgienN0ZCIpOworCXJldHVybiBOVUxMOwkJCQkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCisjZWxzZQorCXN0cnVjdCB2YXJsZW5hICpyZXN1bHQ7CisJU2l6ZQkJ cmF3c2l6ZTsKKwlzaXplX3QJCXJjOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdW5j b21wcmVzc2VkIGRhdGEgKi8KKwlyYXdzaXplID0gVkFSREFUQV9DT01QUkVTU0VEX0dFVF9FWFRT SVpFKHZhbHVlKTsKKwlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKHJhd3NpemUg KyBWQVJIRFJTWik7CisKKwlyYyA9IFpTVERfZGVjb21wcmVzcyhWQVJEQVRBKHJlc3VsdCksIHJh d3NpemUsCisJCQkJCQkgKGNoYXIgKikgdmFsdWUgKyBWQVJIRFJTWl9DT01QUkVTU0VELAorCQkJ CQkJIFZBUlNJWkUodmFsdWUpIC0gVkFSSERSU1pfQ09NUFJFU1NFRCk7CisJaWYgKFpTVERfaXNF cnJvcihyYykgfHwgcmMgIT0gcmF3c2l6ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJjb21wcmVz c2VkIHpzdGQgZGF0YSBpcyBjb3JydXB0IG9yIHRydW5jYXRlZCIpKSk7CisKKwlTRVRfVkFSU0la RShyZXN1bHQsIHJhd3NpemUgKyBWQVJIRFJTWik7CisKKwlyZXR1cm4gcmVzdWx0OworI2VuZGlm CQkJCQkJCS8qIFVTRV9aU1REICovCit9CisKKy8qCisgKiBEZWNvbXByZXNzIHBhcnQgb2YgYSB2 YXJsZW5hIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgWlNURC4KKyAqCisgKiBBdCBsZWFzdCBp bml0aWFsbHkgd2UgZG9uJ3QgdHJ5IHRvIGJlIGNsZXZlciB3aXRoIHN0cmVhbWluZyBzbGljZQor ICogZGVjb21wcmVzc2lvbiBoZXJlOyBpbnN0ZWFkIHdlIGp1c3QgZGVjb21wcmVzcyB0aGUgZnVs bCBkYXR1bSBhbmQKKyAqIGxldCBoaWdoZXIgbGF5ZXJzIHBlcmZvcm0gdGhlIHNsaWNpbmcuICBD YWxsZXJzIHNob3VsZCBwcmVmZXIgdGhlCisgKiByZWd1bGFyIHpzdGRfZGVjb21wcmVzc19kYXR1 bSgpIHdoZW4gdGhleSBrbm93IHRoZXkgbmVlZCB0aGUgd2hvbGUKKyAqIHZhbHVlIGFueXdheS4K KyAqLworc3RydWN0IHZhcmxlbmEgKgorenN0ZF9kZWNvbXByZXNzX2RhdHVtX3NsaWNlKGNvbnN0 IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSwgaW50MzIgc2xpY2VsZW5ndGgpCit7CisJLyogRm9yIG5v dywganVzdCBmYWxsIGJhY2sgdG8gZnVsbCBkZWNvbXByZXNzaW9uLiAqLworCSh2b2lkKSBzbGlj ZWxlbmd0aDsKKwlyZXR1cm4genN0ZF9kZWNvbXByZXNzX2RhdHVtKHZhbHVlKTsKK30KKwogLyoK ICAqIENvbXByZXNzaW9uTmFtZVRvTWV0aG9kIC0gR2V0IGNvbXByZXNzaW9uIG1ldGhvZCBmcm9t IGNvbXByZXNzaW9uIG5hbWUKICAqCkBAIC0yOTMsNiArNDcxLDEzIEBAIENvbXByZXNzaW9uTmFt ZVRvTWV0aG9kKGNvbnN0IGNoYXIgKmNvbXByZXNzaW9uKQogI2VuZGlmCiAJCXJldHVybiBUT0FT VF9MWjRfQ09NUFJFU1NJT047CiAJfQorCWVsc2UgaWYgKHN0cmNtcChjb21wcmVzc2lvbiwgInpz dGQiKSA9PSAwKQorCXsKKyNpZm5kZWYgVVNFX1pTVEQKKwkJTk9fQ09NUFJFU1NJT05fU1VQUE9S VCgienN0ZCIpOworI2VuZGlmCisJCXJldHVybiBUT0FTVF9aU1REX0NPTVBSRVNTSU9OOworCX0K IAogCXJldHVybiBJbnZhbGlkQ29tcHJlc3Npb25NZXRob2Q7CiB9CkBAIC0zMDksNiArNDk0LDgg QEAgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGNoYXIgbWV0aG9kKQogCQkJcmV0dXJuICJwZ2x6 IjsKIAkJY2FzZSBUT0FTVF9MWjRfQ09NUFJFU1NJT046CiAJCQlyZXR1cm4gImx6NCI7CisJCWNh c2UgVE9BU1RfWlNURF9DT01QUkVTU0lPTjoKKwkJCXJldHVybiAienN0ZCI7CiAJCWRlZmF1bHQ6 CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgJWMiLCBtZXRob2Qp OwogCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwppbmRleCBkMDZhZjgyZGUxNS4uMDM5 Y2NjNDIyNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfaW50 ZXJuYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMu YwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvaGVhcHRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2lu dGVybmFscy5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9j YXRhbG9nLmgiCkBAIC03MSw2ICs3Miw5IEBAIHRvYXN0X2NvbXByZXNzX2RhdHVtKERhdHVtIHZh bHVlLCBjaGFyIGNtZXRob2QpCiAJCQl0bXAgPSBsejRfY29tcHJlc3NfZGF0dW0oKGNvbnN0IHN0 cnVjdCB2YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2YWx1ZSkpOwogCQkJY21pZCA9IFRPQVNU X0xaNF9DT01QUkVTU0lPTl9JRDsKIAkJCWJyZWFrOworCQljYXNlIFRPQVNUX1pTVERfQ09NUFJF U1NJT046CisJCQkvKiB6c3RkIHVzZXMgZXh0ZXJuYWwgc3RvcmFnZSBvbmx5OyBoYW5kbGVkIGJ5 IHRvYXN0X3NhdmVfZGF0dW0gKi8KKwkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJ CWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgJWMi LCBjbWV0aG9kKTsKIAl9CkBAIC0xMTMsMTEgKzExNywxMyBAQCB0b2FzdF9jb21wcmVzc19kYXR1 bShEYXR1bSB2YWx1ZSwgY2hhciBjbWV0aG9kKQogICogdmFsdWU6IGRhdHVtIHRvIGJlIHB1c2hl ZCB0byB0b2FzdCBzdG9yYWdlCiAgKiBvbGRleHRlcm5hbDogaWYgbm90IE5VTEwsIHRvYXN0IHBv aW50ZXIgcHJldmlvdXNseSByZXByZXNlbnRpbmcgdGhlIGRhdHVtCiAgKiBvcHRpb25zOiBvcHRp b25zIHRvIGJlIHBhc3NlZCB0byBoZWFwX2luc2VydCgpIGZvciB0b2FzdCByb3dzCisgKiBjbWV0 aG9kOiBjb21wcmVzc2lvbiBtZXRob2QgdG8gdXNlIGZvciB1bmNvbXByZXNzZWQgZGF0YQogICog LS0tLS0tLS0tLQogICovCiBEYXR1bQogdG9hc3Rfc2F2ZV9kYXR1bShSZWxhdGlvbiByZWwsIERh dHVtIHZhbHVlLAotCQkJCSBzdHJ1Y3QgdmFybGVuYSAqb2xkZXh0ZXJuYWwsIGludCBvcHRpb25z KQorCQkJCSBzdHJ1Y3QgdmFybGVuYSAqb2xkZXh0ZXJuYWwsIGludCBvcHRpb25zLAorCQkJCSBj aGFyIGNtZXRob2QpCiB7CiAJUmVsYXRpb24JdG9hc3RyZWw7CiAJUmVsYXRpb24gICAqdG9hc3Rp ZHhzOwpAQCAtMTI1LDEyICsxMzEsMTYgQEAgdG9hc3Rfc2F2ZV9kYXR1bShSZWxhdGlvbiByZWws IERhdHVtIHZhbHVlLAogCUNvbW1hbmRJZAlteWNpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1 ZSk7CiAJc3RydWN0IHZhcmxlbmEgKnJlc3VsdDsKIAlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRv YXN0X3BvaW50ZXI7CisJc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCB0b2FzdF9wb2lu dGVyX2V4dDsKIAlpbnQzMgkJY2h1bmtfc2VxID0gMDsKIAljaGFyCSAgICpkYXRhX3A7CiAJaW50 MzIJCWRhdGFfdG9kbzsKIAlQb2ludGVyCQlkdmFsID0gRGF0dW1HZXRQb2ludGVyKHZhbHVlKTsK IAlpbnQJCQludW1faW5kZXhlczsKIAlpbnQJCQl2YWxpZEluZGV4OworCWJvb2wJCXVzZV9leHRl bmRlZCA9IGZhbHNlOworCXVpbnQ4CQlleHRfbWV0aG9kID0gMDsKKwlzdHJ1Y3QgdmFybGVuYSAq Y29tcHJlc3NlZF90b19mcmVlID0gTlVMTDsJLyogdHJhY2sgYWxsb2NhdGVkIGJ1ZmZlciAqLwog CiAJQXNzZXJ0KCFWQVJBVFRfSVNfRVhURVJOQUwoZHZhbCkpOwogCkBAIC0xNjcsMjMgKzE3Nyw5 OSBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCiAJfQogCWVs c2UgaWYgKFZBUkFUVF9JU19DT01QUkVTU0VEKGR2YWwpKQogCXsKKwkJVG9hc3RDb21wcmVzc2lv bklkIGNtaWQ7CisKIAkJZGF0YV9wID0gVkFSREFUQShkdmFsKTsKIAkJZGF0YV90b2RvID0gVkFS U0laRShkdmFsKSAtIFZBUkhEUlNaOwogCQkvKiByYXdzaXplIGluIGEgY29tcHJlc3NlZCBkYXR1 bSBpcyBqdXN0IHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkICovCiAJCXRvYXN0X3BvaW50ZXIudmFf cmF3c2l6ZSA9IFZBUkRBVEFfQ09NUFJFU1NFRF9HRVRfRVhUU0laRShkdmFsKSArIFZBUkhEUlNa OwogCisJCS8qIEdldCBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSBjb21wcmVzc2VkIGRhdHVtICov CisJCWNtaWQgPSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0NPTVBSRVNTX01FVEhPRChkdmFsKTsK KworCQkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgZXh0ZW5kZWQgMjAtYnl0ZSBvciBsZWdhY3kg MTYtYnl0ZSBmb3JtYXQgKi8KKwkJaWYgKGNtaWQgPT0gVE9BU1RfRVhURU5ERURfQ09NUFJFU1NJ T05fSUQpCisJCXsKKwkJCXVzZV9leHRlbmRlZCA9IHRydWU7CisJCQlleHRfbWV0aG9kID0gVE9B U1RfWlNURF9FWFRfTUVUSE9EOworCQl9CisJCWVsc2UgaWYgKHVzZV9leHRlbmRlZF90b2FzdF9o ZWFkZXIpCisJCXsKKwkJCS8qIFVzZSBleHRlbmRlZCBmb3JtYXQgZm9yIHBnbHovbHo0IHdoZW4g R1VDIGlzIGVuYWJsZWQgKi8KKwkJCXVzZV9leHRlbmRlZCA9IHRydWU7CisJCQlzd2l0Y2ggKGNt aWQpCisJCQl7CisJCQkJY2FzZSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OX0lEOgorCQkJCQlleHRf bWV0aG9kID0gVE9BU1RfUEdMWl9FWFRfTUVUSE9EOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRP QVNUX0xaNF9DT01QUkVTU0lPTl9JRDoKKwkJCQkJZXh0X21ldGhvZCA9IFRPQVNUX0xaNF9FWFRf TUVUSE9EOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBTaG91bGQgbm90IGhh cHBlbiwgYnV0IGZhbGwgYmFjayB0byBsZWdhY3kgZm9ybWF0ICovCisJCQkJCXVzZV9leHRlbmRl ZCA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCiAJCS8qIHNldCBleHRlcm5hbCBz aXplIGFuZCBjb21wcmVzc2lvbiBtZXRob2QgKi8KLQkJVkFSQVRUX0VYVEVSTkFMX1NFVF9TSVpF X0FORF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRlciwgZGF0YV90b2RvLAotCQkJCQkJCQkJ CQkJCSBWQVJEQVRBX0NPTVBSRVNTRURfR0VUX0NPTVBSRVNTX01FVEhPRChkdmFsKSk7CisJCWlm ICh1c2VfZXh0ZW5kZWQpCisJCQlWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNT X01FVEhPRCh0b2FzdF9wb2ludGVyLCBkYXRhX3RvZG8sCisJCQkJCQkJCQkJCQkJCVZBUkFUVF9F WFRFUk5BTF9FWFRFTkRFRF9DTUlEKTsKKwkJZWxzZQorCQkJVkFSQVRUX0VYVEVSTkFMX1NFVF9T SVpFX0FORF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRlciwgZGF0YV90b2RvLCBjbWlkKTsK KwogCQkvKiBBc3NlcnQgdGhhdCB0aGUgbnVtYmVycyBsb29rIGxpa2UgaXQncyBjb21wcmVzc2Vk ICovCiAJCUFzc2VydChWQVJBVFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRCh0b2FzdF9wb2ludGVy KSk7CiAJfQogCWVsc2UKIAl7Ci0JCWRhdGFfcCA9IFZBUkRBVEEoZHZhbCk7Ci0JCWRhdGFfdG9k byA9IFZBUlNJWkUoZHZhbCkgLSBWQVJIRFJTWjsKLQkJdG9hc3RfcG9pbnRlci52YV9yYXdzaXpl ID0gVkFSU0laRShkdmFsKTsKLQkJdG9hc3RfcG9pbnRlci52YV9leHRpbmZvID0gZGF0YV90b2Rv OworCQkvKgorCQkgKiBVbmNvbXByZXNzZWQgZGF0YS4gIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVk IHpzdGQgY29tcHJlc3Npb24sCisJCSAqIHRyeSB0byBjb21wcmVzcyBpdCBub3cgYmVmb3JlIHN0 b3JpbmcgdG8gdGhlIFRPQVNUIHRhYmxlLgorCQkgKi8KKwkJaWYgKGNtZXRob2QgPT0gVE9BU1Rf WlNURF9DT01QUkVTU0lPTikKKwkJeworCQkJc3RydWN0IHZhcmxlbmEgKmNvbXByZXNzZWQ7CisJ CQlpbnQzMgkJcmF3c2l6ZTsKKworCQkJcmF3c2l6ZSA9IFZBUlNJWkVfQU5ZX0VYSERSKChjb25z dCBzdHJ1Y3QgdmFybGVuYSAqKSBkdmFsKTsKKwkJCWNvbXByZXNzZWQgPSB6c3RkX2NvbXByZXNz X2RhdHVtKChjb25zdCBzdHJ1Y3QgdmFybGVuYSAqKSBkdmFsKTsKKwkJCWlmIChjb21wcmVzc2Vk ICE9IE5VTEwpCisJCQl7CisJCQkJLyogU2V0IGNvbXByZXNzaW9uIG1ldGhvZCBpbiB2YV90Y2lu Zm8gKi8KKwkJCQlUT0FTVF9DT01QUkVTU19TRVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9EKGNv bXByZXNzZWQsIHJhd3NpemUsCisJCQkJCQkJCQkJCQkJCQlUT0FTVF9FWFRFTkRFRF9DT01QUkVT U0lPTl9JRCk7CisKKwkJCQkvKiBDb21wcmVzc2lvbiBzdWNjZWVkZWQgLSB1c2UgdGhlIGNvbXBy ZXNzZWQgZGF0YSAqLworCQkJCWNvbXByZXNzZWRfdG9fZnJlZSA9IGNvbXByZXNzZWQ7CS8qIHRy YWNrIGZvciBjbGVhbnVwICovCisJCQkJZHZhbCA9IChQb2ludGVyKSBjb21wcmVzc2VkOworCQkJ CWRhdGFfcCA9IFZBUkRBVEEoY29tcHJlc3NlZCk7CisJCQkJZGF0YV90b2RvID0gVkFSU0laRShj b21wcmVzc2VkKSAtIFZBUkhEUlNaOworCQkJCXRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSA9IHJh d3NpemUgKyBWQVJIRFJTWjsKKworCQkJCS8qIFVzZSBleHRlbmRlZCBmb3JtYXQgZm9yIHpzdGQg Ki8KKwkJCQl1c2VfZXh0ZW5kZWQgPSB0cnVlOworCQkJCWV4dF9tZXRob2QgPSBUT0FTVF9aU1RE X0VYVF9NRVRIT0Q7CisJCQkJVkFSQVRUX0VYVEVSTkFMX1NFVF9TSVpFX0FORF9DT01QUkVTU19N RVRIT0QodG9hc3RfcG9pbnRlciwgZGF0YV90b2RvLAorCQkJCQkJCQkJCQkJCQkJVkFSQVRUX0VY VEVSTkFMX0VYVEVOREVEX0NNSUQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIENvbXBy ZXNzaW9uIGZhaWxlZCBvciBkaWRuJ3Qgc2F2ZSBzcGFjZSAtIHN0b3JlIHVuY29tcHJlc3NlZCAq LworCQkJCWRhdGFfcCA9IFZBUkRBVEEoZHZhbCk7CisJCQkJZGF0YV90b2RvID0gVkFSU0laRShk dmFsKSAtIFZBUkhEUlNaOworCQkJCXRvYXN0X3BvaW50ZXIudmFfcmF3c2l6ZSA9IFZBUlNJWkUo ZHZhbCk7CisJCQkJdG9hc3RfcG9pbnRlci52YV9leHRpbmZvID0gZGF0YV90b2RvOworCQkJfQor CQl9CisJCWVsc2UKKwkJeworCQkJZGF0YV9wID0gVkFSREFUQShkdmFsKTsKKwkJCWRhdGFfdG9k byA9IFZBUlNJWkUoZHZhbCkgLSBWQVJIRFJTWjsKKwkJCXRvYXN0X3BvaW50ZXIudmFfcmF3c2l6 ZSA9IFZBUlNJWkUoZHZhbCk7CisJCQl0b2FzdF9wb2ludGVyLnZhX2V4dGluZm8gPSBkYXRhX3Rv ZG87CisJCX0KIAl9CiAKIAkvKgpAQCAtMjI1LDE1ICszMTEsMzYgQEAgdG9hc3Rfc2F2ZV9kYXR1 bShSZWxhdGlvbiByZWwsIERhdHVtIHZhbHVlLAogCQl0b2FzdF9wb2ludGVyLnZhX3ZhbHVlaWQg PSBJbnZhbGlkT2lkOwogCQlpZiAob2xkZXh0ZXJuYWwgIT0gTlVMTCkKIAkJewotCQkJc3RydWN0 IHZhcmF0dF9leHRlcm5hbCBvbGRfdG9hc3RfcG9pbnRlcjsKKwkJCU9pZAkJCW9sZF90b2FzdHJl bGlkOworCQkJT2lkCQkJb2xkX3ZhbHVlaWQ7CiAKIAkJCUFzc2VydChWQVJBVFRfSVNfRVhURVJO QUxfT05ESVNLKG9sZGV4dGVybmFsKSk7Ci0JCQkvKiBNdXN0IGNvcHkgdG8gYWNjZXNzIGFsaWdu ZWQgZmllbGRzICovCi0JCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIob2xkX3RvYXN0X3Bv aW50ZXIsIG9sZGV4dGVybmFsKTsKLQkJCWlmIChvbGRfdG9hc3RfcG9pbnRlci52YV90b2FzdHJl bGlkID09IHJlbC0+cmRfdG9hc3RvaWQpCisKKwkJCS8qCisJCQkgKiBFeHRyYWN0IHRvYXN0cmVs aWQgYW5kIHZhbHVlaWQgZnJvbSB0aGUgb2xkIHBvaW50ZXIuCisJCQkgKiBIYW5kbGUgYm90aCBs ZWdhY3kgMTYtYnl0ZSBhbmQgZXh0ZW5kZWQgMjAtYnl0ZSBmb3JtYXRzLgorCQkJICovCisJCQlp ZiAoVkFSVEFHX0VYVEVSTkFMKG9sZGV4dGVybmFsKSA9PSBWQVJUQUdfT05ESVNLX0VYVEVOREVE KQorCQkJeworCQkJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgb2xkX3RvYXN0X3Bv aW50ZXJfZXh0OworCisJCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSX0VYVEVOREVEKG9s ZF90b2FzdF9wb2ludGVyX2V4dCwgb2xkZXh0ZXJuYWwpOworCQkJCW9sZF90b2FzdHJlbGlkID0g b2xkX3RvYXN0X3BvaW50ZXJfZXh0LnZhX3RvYXN0cmVsaWQ7CisJCQkJb2xkX3ZhbHVlaWQgPSBv bGRfdG9hc3RfcG9pbnRlcl9leHQudmFfdmFsdWVpZDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIG9sZF90b2FzdF9wb2ludGVyOworCisJCQkJVkFSQVRU X0VYVEVSTkFMX0dFVF9QT0lOVEVSKG9sZF90b2FzdF9wb2ludGVyLCBvbGRleHRlcm5hbCk7CisJ CQkJb2xkX3RvYXN0cmVsaWQgPSBvbGRfdG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlkOworCQkJ CW9sZF92YWx1ZWlkID0gb2xkX3RvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwkJCX0KKworCQkJ aWYgKG9sZF90b2FzdHJlbGlkID09IHJlbC0+cmRfdG9hc3RvaWQpCiAJCQl7CiAJCQkJLyogVGhp cyB2YWx1ZSBjYW1lIGZyb20gdGhlIG9sZCB0b2FzdCB0YWJsZTsgcmV1c2UgaXRzIE9JRCAqLwot CQkJCXRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZCA9IG9sZF90b2FzdF9wb2ludGVyLnZhX3ZhbHVl aWQ7CisJCQkJdG9hc3RfcG9pbnRlci52YV92YWx1ZWlkID0gb2xkX3ZhbHVlaWQ7CiAKIAkJCQkv KgogCQkJCSAqIFRoZXJlIGlzIGEgY29ybmVyIGNhc2UgaGVyZTogdGhlIHRhYmxlIHJld3JpdGUg bWlnaHQgaGF2ZQpAQCAtMzQ4LDYgKzQ1NSwxMCBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9u IHJlbCwgRGF0dW0gdmFsdWUsCiAJCWRhdGFfcCArPSBjaHVua19zaXplOwogCX0KIAorCS8qIEZy ZWUgY29tcHJlc3NlZCBidWZmZXIgaWYgd2UgYWxsb2NhdGVkIG9uZSAqLworCWlmIChjb21wcmVz c2VkX3RvX2ZyZWUgIT0gTlVMTCkKKwkJcGZyZWUoY29tcHJlc3NlZF90b19mcmVlKTsKKwogCS8q CiAJICogRG9uZSAtIGNsb3NlIHRvYXN0IHJlbGF0aW9uIGFuZCBpdHMgaW5kZXhlcyBidXQga2Vl cCB0aGUgbG9jayB1bnRpbAogCSAqIGNvbW1pdCwgc28gYXMgYSBjb25jdXJyZW50IHJlaW5kZXgg ZG9uZSBkaXJlY3RseSBvbiB0aGUgdG9hc3QgcmVsYXRpb24KQEAgLTM1NiwxMiArNDY3LDM1IEBA IHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAl0b2FzdF9jbG9z ZV9pbmRleGVzKHRvYXN0aWR4cywgbnVtX2luZGV4ZXMsIE5vTG9jayk7CiAJdGFibGVfY2xvc2Uo dG9hc3RyZWwsIE5vTG9jayk7CiAKLQkvKgotCSAqIENyZWF0ZSB0aGUgVE9BU1QgcG9pbnRlciB2 YWx1ZSB0aGF0IHdlJ2xsIHJldHVybgotCSAqLwotCXJlc3VsdCA9IChzdHJ1Y3QgdmFybGVuYSAq KSBwYWxsb2MoVE9BU1RfUE9JTlRFUl9TSVpFKTsKLQlTRVRfVkFSVEFHX0VYVEVSTkFMKHJlc3Vs dCwgVkFSVEFHX09ORElTSyk7Ci0JbWVtY3B5KFZBUkRBVEFfRVhURVJOQUwocmVzdWx0KSwgJnRv YXN0X3BvaW50ZXIsIHNpemVvZih0b2FzdF9wb2ludGVyKSk7CisJLyogQ3JlYXRlIHRoZSBUT0FT VCBwb2ludGVyIHZhbHVlIHRoYXQgd2UnbGwgcmV0dXJuICovCisJaWYgKHVzZV9leHRlbmRlZCkK Kwl7CisJCS8qCisJCSAqIEJ1aWxkIGV4dGVuZGVkIFRPQVNUIHBvaW50ZXIuICBDb3B5IHRoZSBj b21tb24gZmllbGRzIGZyb20KKwkJICogdG9hc3RfcG9pbnRlciwgdGhlbiBzZXQgdGhlIGV4dGVu ZGVkLWZvcm1hdC1zcGVjaWZpYyBmaWVsZHMuCisJCSAqLworCQl0b2FzdF9wb2ludGVyX2V4dC52 YV9yYXdzaXplID0gdG9hc3RfcG9pbnRlci52YV9yYXdzaXplOworCQl0b2FzdF9wb2ludGVyX2V4 dC52YV9leHRpbmZvID0gdG9hc3RfcG9pbnRlci52YV9leHRpbmZvOworCQl0b2FzdF9wb2ludGVy X2V4dC52YV92YWx1ZWlkID0gdG9hc3RfcG9pbnRlci52YV92YWx1ZWlkOworCQl0b2FzdF9wb2lu dGVyX2V4dC52YV90b2FzdHJlbGlkID0gdG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlkOworCisJ CS8qIFNldCBleHRlbmRlZCBmb3JtYXQgZmllbGRzICovCisJCXRvYXN0X3BvaW50ZXJfZXh0LnZh X2ZsYWdzID0gVE9BU1RfRVhUX0ZMQUdfQ09NUFJFU1NJT047CisJCXRvYXN0X3BvaW50ZXJfZXh0 LnZhX2RhdGFbMF0gPSBleHRfbWV0aG9kOworCQl0b2FzdF9wb2ludGVyX2V4dC52YV9kYXRhWzFd ID0gMDsKKwkJdG9hc3RfcG9pbnRlcl9leHQudmFfZGF0YVsyXSA9IDA7CisKKwkJcmVzdWx0ID0g KHN0cnVjdCB2YXJsZW5hICopIHBhbGxvYyhUT0FTVF9QT0lOVEVSX1NJWkVfRVhURU5ERUQpOwor CQlTRVRfVkFSVEFHX0VYVEVSTkFMKHJlc3VsdCwgVkFSVEFHX09ORElTS19FWFRFTkRFRCk7CisJ CW1lbWNweShWQVJEQVRBX0VYVEVSTkFMKHJlc3VsdCksICZ0b2FzdF9wb2ludGVyX2V4dCwgc2l6 ZW9mKHRvYXN0X3BvaW50ZXJfZXh0KSk7CisJfQorCWVsc2UKKwl7CisJCS8qIFN0YW5kYXJkIDE2 LWJ5dGUgVE9BU1QgcG9pbnRlciAqLworCQlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFs bG9jKFRPQVNUX1BPSU5URVJfU0laRSk7CisJCVNFVF9WQVJUQUdfRVhURVJOQUwocmVzdWx0LCBW QVJUQUdfT05ESVNLKTsKKwkJbWVtY3B5KFZBUkRBVEFfRVhURVJOQUwocmVzdWx0KSwgJnRvYXN0 X3BvaW50ZXIsIHNpemVvZih0b2FzdF9wb2ludGVyKSk7CisJfQogCiAJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShyZXN1bHQpOwogfQpAQCAtMzc3LDYgKzUxMSw3IEBAIHRvYXN0X2RlbGV0ZV9kYXR1 bShSZWxhdGlvbiByZWwsIERhdHVtIHZhbHVlLCBib29sIGlzX3NwZWN1bGF0aXZlKQogewogCXN0 cnVjdCB2YXJsZW5hICphdHRyID0gKHN0cnVjdCB2YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2 YWx1ZSk7CiAJc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOworCXN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQ7CiAJUmVsYXRpb24JdG9h c3RyZWw7CiAJUmVsYXRpb24gICAqdG9hc3RpZHhzOwogCVNjYW5LZXlEYXRhIHRvYXN0a2V5OwpA QCAtMzg0LDE3ICs1MTksMzYgQEAgdG9hc3RfZGVsZXRlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0 dW0gdmFsdWUsIGJvb2wgaXNfc3BlY3VsYXRpdmUpCiAJSGVhcFR1cGxlCXRvYXN0dHVwOwogCWlu dAkJCW51bV9pbmRleGVzOwogCWludAkJCXZhbGlkSW5kZXg7CisJT2lkCQkJdG9hc3RyZWxpZDsK KwlPaWQJCQl2YWx1ZWlkOworCWJvb2wJCWlzX2V4dGVuZGVkOwogCiAJaWYgKCFWQVJBVFRfSVNf RVhURVJOQUxfT05ESVNLKGF0dHIpKQogCQlyZXR1cm47CiAKLQkvKiBNdXN0IGNvcHkgdG8gYWNj ZXNzIGFsaWduZWQgZmllbGRzICovCi0JVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0 X3BvaW50ZXIsIGF0dHIpOworCS8qCisJICogTXVzdCBjb3B5IHRvIGFjY2VzcyBhbGlnbmVkIGZp ZWxkcy4gIEhhbmRsZSBib3RoIGxlZ2FjeSAoMTYtYnl0ZSkgYW5kCisJICogZXh0ZW5kZWQgKDIw LWJ5dGUpIG9uLWRpc2sgVE9BU1QgcG9pbnRlcnMgYmFzZWQgb24gdGhlIHRhZy4KKwkgKi8KKwlp c19leHRlbmRlZCA9IChWQVJUQUdfRVhURVJOQUwoYXR0cikgPT0gVkFSVEFHX09ORElTS19FWFRF TkRFRCk7CisKKwlpZiAoIWlzX2V4dGVuZGVkKQorCXsKKwkJVkFSQVRUX0VYVEVSTkFMX0dFVF9Q T0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpOworCQl0b2FzdHJlbGlkID0gdG9hc3RfcG9pbnRl ci52YV90b2FzdHJlbGlkOworCQl2YWx1ZWlkID0gdG9hc3RfcG9pbnRlci52YV92YWx1ZWlkOwor CX0KKwllbHNlCisJeworCQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVJfRVhURU5ERUQodG9h c3RfcG9pbnRlcl9leHQsIGF0dHIpOworCQl0b2FzdHJlbGlkID0gdG9hc3RfcG9pbnRlcl9leHQu dmFfdG9hc3RyZWxpZDsKKwkJdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXJfZXh0LnZhX3ZhbHVlaWQ7 CisJfQogCiAJLyoKIAkgKiBPcGVuIHRoZSB0b2FzdCByZWxhdGlvbiBhbmQgaXRzIGluZGV4ZXMK IAkgKi8KLQl0b2FzdHJlbCA9IHRhYmxlX29wZW4odG9hc3RfcG9pbnRlci52YV90b2FzdHJlbGlk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwl0b2FzdHJlbCA9IHRhYmxlX29wZW4odG9hc3RyZWxpZCwg Um93RXhjbHVzaXZlTG9jayk7CiAKIAkvKiBGZXRjaCB2YWxpZCByZWxhdGlvbiB1c2VkIGZvciBw cm9jZXNzICovCiAJdmFsaWRJbmRleCA9IHRvYXN0X29wZW5faW5kZXhlcyh0b2FzdHJlbCwKQEAg LTQwOCw3ICs1NjIsNyBAQCB0b2FzdF9kZWxldGVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2 YWx1ZSwgYm9vbCBpc19zcGVjdWxhdGl2ZSkKIAlTY2FuS2V5SW5pdCgmdG9hc3RrZXksCiAJCQkJ KEF0dHJOdW1iZXIpIDEsCiAJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAotCQkJ CU9iamVjdElkR2V0RGF0dW0odG9hc3RfcG9pbnRlci52YV92YWx1ZWlkKSk7CisJCQkJT2JqZWN0 SWRHZXREYXR1bSh2YWx1ZWlkKSk7CiAKIAkvKgogCSAqIEZpbmQgYWxsIHRoZSBjaHVua3MuICAo V2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSB3aGV0aGVyIHdlIHNlZSB0aGVtIGluCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKaW5kZXggMTFmOTdkNjUzNjcuLjIxMzgxMDA0YmE2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RvYXN0X2hlbHBlci5jCkBAIC0yNjEsNyArMjYx LDcgQEAgdG9hc3RfdHVwbGVfZXh0ZXJuYWxpemUoVG9hc3RUdXBsZUNvbnRleHQgKnR0YywgaW50 IGF0dHJpYnV0ZSwgaW50IG9wdGlvbnMpCiAKIAlhdHRyLT50YWlfY29sZmxhZ3MgfD0gVE9BU1RD T0xfSUdOT1JFOwogCSp2YWx1ZSA9IHRvYXN0X3NhdmVfZGF0dW0odHRjLT50dGNfcmVsLCBvbGRf dmFsdWUsIGF0dHItPnRhaV9vbGRleHRlcm5hbCwKLQkJCQkJCQkgIG9wdGlvbnMpOworCQkJCQkJ CSAgb3B0aW9ucywgYXR0ci0+dGFpX2NvbXByZXNzaW9uKTsKIAlpZiAoKGF0dHItPnRhaV9jb2xm bGFncyAmIFRPQVNUQ09MX05FRURTX0ZSRUUpICE9IDApCiAJCXBmcmVlKERhdHVtR2V0UG9pbnRl cihvbGRfdmFsdWUpKTsKIAlhdHRyLT50YWlfY29sZmxhZ3MgfD0gVE9BU1RDT0xfTkVFRFNfRlJF RTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMK aW5kZXggZjE4YzZmYjUyYjUuLjllODNhYjU5NzhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtNTEzNywxMSArNTEzNywxNyBAQCBS ZW9yZGVyQnVmZmVyVG9hc3RSZXBsYWNlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAKIAkJLyogdmFfcmF3c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwg ZGF0dW0gLS0gaW5jbHVkaW5nIGhlYWRlciAqLwogCQlzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRv YXN0X3BvaW50ZXI7CisJCXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9p bnRlcl9leHQ7CiAJCXN0cnVjdCB2YXJhdHRfaW5kaXJlY3QgcmVkaXJlY3RfcG9pbnRlcjsKIAkJ c3RydWN0IHZhcmxlbmEgKm5ld19kYXR1bSA9IE5VTEw7CiAJCXN0cnVjdCB2YXJsZW5hICpyZWNv bnN0cnVjdGVkOwogCQlkbGlzdF9pdGVyCWl0OwogCQlTaXplCQlkYXRhX2RvbmUgPSAwOworCQli b29sCQlpc19leHRlbmRlZDsKKwkJT2lkCQkJdmFsdWVpZDsKKwkJaW50MzIJCXJhd3NpemU7CisJ CWludDMyCQlleHRzaXplOworCQlib29sCQlpc19jb21wcmVzc2VkOwogCiAJCWlmIChhdHRyLT5h dHRpc2Ryb3BwZWQpCiAJCQljb250aW51ZTsKQEAgLTUxNjEsMTQgKzUxNjcsMzYgQEAgUmVvcmRl ckJ1ZmZlclRvYXN0UmVwbGFjZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAogCQlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTCh2YXJsZW5hKSkKIAkJCWNvbnRpbnVlOwog Ci0JCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9JTlRFUih0b2FzdF9wb2ludGVyLCB2YXJsZW5hKTsK KwkJLyoKKwkJICogSGFuZGxlIGJvdGggbGVnYWN5IDE2LWJ5dGUgYW5kIGV4dGVuZGVkIDIwLWJ5 dGUgb24tZGlzayBUT0FTVAorCQkgKiBwb2ludGVycyBiYXNlZCBvbiB0aGUgdGFnLgorCQkgKi8K KwkJaXNfZXh0ZW5kZWQgPSBWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKHZhcmxlbmEpICYmCisJ CQkJCSAgKFZBUlRBR19FWFRFUk5BTCh2YXJsZW5hKSA9PSBWQVJUQUdfT05ESVNLX0VYVEVOREVE KTsKKworCQlpZiAoaXNfZXh0ZW5kZWQpCisJCXsKKwkJCVZBUkFUVF9FWFRFUk5BTF9HRVRfUE9J TlRFUl9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCwgdmFybGVuYSk7CisJCQl2YWx1ZWlkID0g dG9hc3RfcG9pbnRlcl9leHQudmFfdmFsdWVpZDsKKwkJCXJhd3NpemUgPSB0b2FzdF9wb2ludGVy X2V4dC52YV9yYXdzaXplOworCQkJZXh0c2l6ZSA9IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUU0la RV9FWFRFTkRFRCh0b2FzdF9wb2ludGVyX2V4dCk7CisJCQlpc19jb21wcmVzc2VkID0gVkFSQVRU X0VYVEVSTkFMX0lTX0NPTVBSRVNTRURfRVhURU5ERUQodG9hc3RfcG9pbnRlcl9leHQpOworCQl9 CisJCWVsc2UKKwkJeworCQkJVkFSQVRUX0VYVEVSTkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50 ZXIsIHZhcmxlbmEpOworCQkJdmFsdWVpZCA9IHRvYXN0X3BvaW50ZXIudmFfdmFsdWVpZDsKKwkJ CXJhd3NpemUgPSB0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemU7CisJCQlleHRzaXplID0gVkFSQVRU X0VYVEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3BvaW50ZXIpOworCQkJaXNfY29tcHJlc3NlZCA9 IFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVTU0VEKHRvYXN0X3BvaW50ZXIpOworCQl9CiAKIAkJ LyoKIAkJICogQ2hlY2sgd2hldGhlciB0aGUgdG9hc3QgdHVwbGUgY2hhbmdlZCwgcmVwbGFjZSBp ZiBzby4KIAkJICovCiAJCWVudCA9IChSZW9yZGVyQnVmZmVyVG9hc3RFbnQgKikKIAkJCWhhc2hf c2VhcmNoKHR4bi0+dG9hc3RfaGFzaCwKLQkJCQkJCSZ0b2FzdF9wb2ludGVyLnZhX3ZhbHVlaWQs CisJCQkJCQkmdmFsdWVpZCwKIAkJCQkJCUhBU0hfRklORCwKIAkJCQkJCU5VTEwpOwogCQlpZiAo ZW50ID09IE5VTEwpCkBAIC01MTc5LDcgKzUyMDcsNyBAQCBSZW9yZGVyQnVmZmVyVG9hc3RSZXBs YWNlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJZnJlZVtu YXR0XSA9IHRydWU7CiAKLQkJcmVjb25zdHJ1Y3RlZCA9IHBhbGxvYzAodG9hc3RfcG9pbnRlci52 YV9yYXdzaXplKTsKKwkJcmVjb25zdHJ1Y3RlZCA9IHBhbGxvYzAocmF3c2l6ZSk7CiAKIAkJZW50 LT5yZWNvbnN0cnVjdGVkID0gcmVjb25zdHJ1Y3RlZDsKIApAQCAtNTIwNCwxMCArNTIzMiwxMCBA QCBSZW9yZGVyQnVmZmVyVG9hc3RSZXBsYWNlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJICAgVkFSU0laRShjaHVuaykgLSBWQVJIRFJTWik7CiAJCQlkYXRh X2RvbmUgKz0gVkFSU0laRShjaHVuaykgLSBWQVJIRFJTWjsKIAkJfQotCQlBc3NlcnQoZGF0YV9k b25lID09IFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUU0laRSh0b2FzdF9wb2ludGVyKSk7CisJCUFz c2VydChkYXRhX2RvbmUgPT0gZXh0c2l6ZSk7CiAKIAkJLyogbWFrZSBzdXJlIGl0cyBtYXJrZWQg YXMgY29tcHJlc3NlZCBvciBub3QgKi8KLQkJaWYgKFZBUkFUVF9FWFRFUk5BTF9JU19DT01QUkVT U0VEKHRvYXN0X3BvaW50ZXIpKQorCQlpZiAoaXNfY29tcHJlc3NlZCkKIAkJCVNFVF9WQVJTSVpF X0NPTVBSRVNTRUQocmVjb25zdHJ1Y3RlZCwgZGF0YV9kb25lICsgVkFSSERSU1opOwogCQllbHNl CiAJCQlTRVRfVkFSU0laRShyZWNvbnN0cnVjdGVkLCBkYXRhX2RvbmUgKyBWQVJIRFJTWik7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCBiYWE1YjQ0ZWE4ZC4uNzFhNDEwZGM2MTcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtNDIwNiw2ICs0MjA2LDEwIEBAIHBnX2NvbHVtbl9jb21w cmVzc2lvbihQR19GVU5DVElPTl9BUkdTKQogCQljYXNlIFRPQVNUX0xaNF9DT01QUkVTU0lPTl9J RDoKIAkJCXJlc3VsdCA9ICJsejQiOwogCQkJYnJlYWs7CisJCWNhc2UgVE9BU1RfRVhURU5ERURf Q09NUFJFU1NJT05fSUQ6CisJCQkvKiBFeHRlbmRlZCBmb3JtYXQgY3VycmVudGx5IG9ubHkgc3Vw cG9ydHMgenN0ZCAqLworCQkJcmVzdWx0ID0gInpzdGQiOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6 CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgaWQgJWQiLCBjbWlk KTsKIAl9CkBAIC00MjIyLDcgKzQyMjYsNyBAQCBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoUEdf RlVOQ1RJT05fQVJHUykKIHsKIAlpbnQJCQl0eXBsZW47CiAJc3RydWN0IHZhcmxlbmEgKmF0dHI7 Ci0Jc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9wb2ludGVyOworCU9pZAkJCXZhbHVlaWQ7 CiAKIAkvKiBPbiBmaXJzdCBjYWxsLCBnZXQgdGhlIGlucHV0IHR5cGUncyB0eXBsZW4sIGFuZCBz YXZlIGF0ICpmbl9leHRyYSAqLwogCWlmIChmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmEgPT0gTlVM TCkKQEAgLTQyNDksOSArNDI1MywyNSBAQCBwZ19jb2x1bW5fdG9hc3RfY2h1bmtfaWQoUEdfRlVO Q1RJT05fQVJHUykKIAlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTF9PTkRJU0soYXR0cikpCiAJCVBH X1JFVFVSTl9OVUxMKCk7CiAKLQlWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVIodG9hc3RfcG9p bnRlciwgYXR0cik7CisJLyoKKwkgKiBIYW5kbGUgYm90aCBsZWdhY3kgMTYtYnl0ZSBhbmQgZXh0 ZW5kZWQgMjAtYnl0ZSBvbi1kaXNrIFRPQVNUIHBvaW50ZXJzLgorCSAqLworCWlmIChWQVJUQUdf RVhURVJOQUwoYXR0cikgPT0gVkFSVEFHX09ORElTS19FWFRFTkRFRCkKKwl7CisJCXN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQ7CisKKwkJVkFSQVRUX0VY VEVSTkFMX0dFVF9QT0lOVEVSX0VYVEVOREVEKHRvYXN0X3BvaW50ZXJfZXh0LCBhdHRyKTsKKwkJ dmFsdWVpZCA9IHRvYXN0X3BvaW50ZXJfZXh0LnZhX3ZhbHVlaWQ7CisJfQorCWVsc2UKKwl7CisJ CXN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgdG9hc3RfcG9pbnRlcjsKKworCQlWQVJBVFRfRVhURVJO QUxfR0VUX1BPSU5URVIodG9hc3RfcG9pbnRlciwgYXR0cik7CisJCXZhbHVlaWQgPSB0b2FzdF9w b2ludGVyLnZhX3ZhbHVlaWQ7CisJfQogCi0JUEdfUkVUVVJOX09JRCh0b2FzdF9wb2ludGVyLnZh X3ZhbHVlaWQpOworCVBHX1JFVFVSTl9PSUQodmFsdWVpZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDNiOWQ4MzQ5MDc4Li4zOGM2OGQx ZDBhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTcz OCw3ICs3MzgsNiBAQAogICBib290X3ZhbCA9PiAnVE9BU1RfUEdMWl9DT01QUkVTU0lPTicsCiAg IG9wdGlvbnMgPT4gJ2RlZmF1bHRfdG9hc3RfY29tcHJlc3Npb25fb3B0aW9ucycsCiB9LAotCiB7 IG5hbWUgPT4gJ2RlZmF1bHRfdHJhbnNhY3Rpb25fZGVmZXJyYWJsZScsIHR5cGUgPT4gJ2Jvb2wn LCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdDTElFTlRfQ09OTl9TVEFURU1F TlQnLAogICBzaG9ydF9kZXNjID0+ICdTZXRzIHRoZSBkZWZhdWx0IGRlZmVycmFibGUgc3RhdHVz IG9mIG5ldyB0cmFuc2FjdGlvbnMuJywKICAgdmFyaWFibGUgPT4gJ0RlZmF1bHRYYWN0RGVmZXJy YWJsZScsCkBAIC0zMTc1LDYgKzMxNzQsMTIgQEAKICAgYm9vdF92YWwgPT4gJ0RFRkFVTFRfVVBE QVRFX1BST0NFU1NfVElUTEUnLAogfSwKIAoreyBuYW1lID0+ICd1c2VfZXh0ZW5kZWRfdG9hc3Rf aGVhZGVyJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAg PT4gJ0NMSUVOVF9DT05OX1NUQVRFTUVOVCcsCisgIHNob3J0X2Rlc2MgPT4gJ1VzZSAyMC1ieXRl IGV4dGVuZGVkIFRPQVNUIGhlYWRlciBmb3JtYXQgKHJlcXVpcmVkIGZvciB6c3RkKS4nLAorICB2 YXJpYWJsZSA9PiAndXNlX2V4dGVuZGVkX3RvYXN0X2hlYWRlcicsCisgIGJvb3RfdmFsID0+ICdm YWxzZScsCit9LAorCiB7IG5hbWUgPT4gJ3ZhY3V1bV9idWZmZXJfdXNhZ2VfbGltaXQnLCB0eXBl ID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdSRVNPVVJDRVNf TUVNJywKICAgc2hvcnRfZGVzYyA9PiAnU2V0cyB0aGUgYnVmZmVyIHBvb2wgc2l6ZSBmb3IgVkFD VVVNLCBBTkFMWVpFLCBhbmQgYXV0b3ZhY3V1bS4nLAogICBmbGFncyA9PiAnR1VDX1VOSVRfS0In LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBmODdiNTU4YzJjNi4uZjZjMDky NjBmMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC00NjAsNiArNDYwLDkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBkZWZhdWx0X3RvYXN0X2Nv bXByZXNzaW9uX29wdGlvbnNbXSA9IHsKIAl7InBnbHoiLCBUT0FTVF9QR0xaX0NPTVBSRVNTSU9O LCBmYWxzZX0sCiAjaWZkZWYgIFVTRV9MWjQKIAl7Imx6NCIsIFRPQVNUX0xaNF9DT01QUkVTU0lP TiwgZmFsc2V9LAorI2VuZGlmCisjaWZkZWYgIFVTRV9aU1RECisJeyJ6c3RkIiwgVE9BU1RfWlNU RF9DT01QUkVTU0lPTiwgZmFsc2V9LAogI2VuZGlmCiAJe05VTEwsIDAsIGZhbHNlfQogfTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9kZXRvYXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvZGV0b2FzdC5oCmluZGV4IGU2MDNhMjI3NmMzLi5lNTkxYTU5NTY5YiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2RldG9hc3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZGV0 b2FzdC5oCkBAIC0xNCwyNSArMTQsNTggQEAKIAogLyoKICAqIE1hY3JvIHRvIGZldGNoIHRoZSBw b3NzaWJseS11bmFsaWduZWQgY29udGVudHMgb2YgYW4gRVhURVJOQUwgZGF0dW0KLSAqIGludG8g YSBsb2NhbCAic3RydWN0IHZhcmF0dF9leHRlcm5hbCIgdG9hc3QgcG9pbnRlci4gIFRoaXMgc2hv dWxkIGJlCi0gKiBqdXN0IGEgbWVtY3B5LCBidXQgc29tZSB2ZXJzaW9ucyBvZiBnY2Mgc2VlbSB0 byBwcm9kdWNlIGJyb2tlbiBjb2RlCi0gKiB0aGF0IGFzc3VtZXMgdGhlIGRhdHVtIGNvbnRlbnRz IGFyZSBhbGlnbmVkLiAgSW50cm9kdWNpbmcgYW4gZXhwbGljaXQKLSAqIGludGVybWVkaWF0ZSAi dmFyYXR0cmliXzFiX2UgKiIgdmFyaWFibGUgc2VlbXMgdG8gZml4IGl0LgorICogaW50byBhIGxv Y2FsICJzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIiB0b2FzdCBwb2ludGVyLgorICoKKyAqIFRoaXMg Y3VycmVudGx5IHN1cHBvcnRzIG9ubHkgdGhlIGxlZ2FjeSBvbi1kaXNrIFRPQVNUIHBvaW50ZXIg Zm9ybWF0LAorICogd2hpY2ggaGFzIFZBUlRBR19PTkRJU0sgYW5kIGEgcGF5bG9hZCBzaXplIG9m IHNpemVvZih2YXJhdHRfZXh0ZXJuYWwpLgorICogRXh0ZW5kZWQgb24tZGlzayBwb2ludGVycyAo VkFSVEFHX09ORElTS19FWFRFTkRFRCkgbXVzdCBiZSBhY2Nlc3NlZCB2aWEKKyAqIFZBUkFUVF9F WFRFUk5BTF9HRVRfUE9JTlRFUl9FWFRFTkRFRCgpLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGp1 c3QgYSBtZW1jcHksIGJ1dCBzb21lIHZlcnNpb25zIG9mIGdjYyBzZWVtIHRvIHByb2R1Y2UKKyAq IGJyb2tlbiBjb2RlIHRoYXQgYXNzdW1lcyB0aGUgZGF0dW0gY29udGVudHMgYXJlIGFsaWduZWQu ICBJbnRyb2R1Y2luZworICogYW4gZXhwbGljaXQgaW50ZXJtZWRpYXRlICJ2YXJhdHRyaWJfMWJf ZSAqIiB2YXJpYWJsZSBzZWVtcyB0byBmaXggaXQuCiAgKi8KICNkZWZpbmUgVkFSQVRUX0VYVEVS TkFMX0dFVF9QT0lOVEVSKHRvYXN0X3BvaW50ZXIsIGF0dHIpIFwKIGRvIHsgXAogCXZhcmF0dHJp Yl8xYl9lICphdHRyZSA9ICh2YXJhdHRyaWJfMWJfZSAqKSAoYXR0cik7IFwKIAlBc3NlcnQoVkFS QVRUX0lTX0VYVEVSTkFMKGF0dHJlKSk7IFwKKwlBc3NlcnQoVkFSVEFHX0VYVEVSTkFMKGF0dHJl KSA9PSBWQVJUQUdfT05ESVNLKTsgXAogCUFzc2VydChWQVJTSVpFX0VYVEVSTkFMKGF0dHJlKSA9 PSBzaXplb2YodG9hc3RfcG9pbnRlcikgKyBWQVJIRFJTWl9FWFRFUk5BTCk7IFwKIAltZW1jcHko Jih0b2FzdF9wb2ludGVyKSwgVkFSREFUQV9FWFRFUk5BTChhdHRyZSksIHNpemVvZih0b2FzdF9w b2ludGVyKSk7IFwKIH0gd2hpbGUgKDApCiAKKy8qCisgKiBWYXJpYW50IG9mIFZBUkFUVF9FWFRF Uk5BTF9HRVRfUE9JTlRFUiBmb3IgdGhlIGV4dGVuZGVkIG9uLWRpc2sgVE9BU1QKKyAqIHBvaW50 ZXIgZm9ybWF0LiAgQ2FsbGVycyBzaG91bGQgb25seSB1c2UgdGhpcyB3aGVuIHRoZXkgaGF2ZSBh bHJlYWR5CisgKiBlc3RhYmxpc2hlZCB0aGF0IHRoZSB0YWcgaXMgVkFSVEFHX09ORElTS19FWFRF TkRFRC4KKyAqLworI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfR0VUX1BPSU5URVJfRVhURU5ERUQo dG9hc3RfcG9pbnRlcl9leHQsIGF0dHIpIFwKK2RvIHsgXAorCXZhcmF0dHJpYl8xYl9lICphdHRy ZSA9ICh2YXJhdHRyaWJfMWJfZSAqKSAoYXR0cik7IFwKKwlBc3NlcnQoVkFSQVRUX0lTX0VYVEVS TkFMKGF0dHJlKSk7IFwKKwlBc3NlcnQoVkFSVEFHX0VYVEVSTkFMKGF0dHJlKSA9PSBWQVJUQUdf T05ESVNLX0VYVEVOREVEKTsgXAorCUFzc2VydChWQVJTSVpFX0VYVEVSTkFMKGF0dHJlKSA9PSBz aXplb2YodG9hc3RfcG9pbnRlcl9leHQpICsgVkFSSERSU1pfRVhURVJOQUwpOyBcCisJbWVtY3B5 KCYodG9hc3RfcG9pbnRlcl9leHQpLCBWQVJEQVRBX0VYVEVSTkFMKGF0dHJlKSwgc2l6ZW9mKHRv YXN0X3BvaW50ZXJfZXh0KSk7IFwKK30gd2hpbGUgKDApCisKIC8qIFNpemUgb2YgYW4gRVhURVJO QUwgZGF0dW0gdGhhdCBjb250YWlucyBhIHN0YW5kYXJkIFRPQVNUIHBvaW50ZXIgKi8KICNkZWZp bmUgVE9BU1RfUE9JTlRFUl9TSVpFIChWQVJIRFJTWl9FWFRFUk5BTCArIHNpemVvZih2YXJhdHRf ZXh0ZXJuYWwpKQogCiAvKiBTaXplIG9mIGFuIEVYVEVSTkFMIGRhdHVtIHRoYXQgY29udGFpbnMg YW4gaW5kaXJlY3Rpb24gcG9pbnRlciAqLwogI2RlZmluZSBJTkRJUkVDVF9QT0lOVEVSX1NJWkUg KFZBUkhEUlNaX0VYVEVSTkFMICsgc2l6ZW9mKHZhcmF0dF9pbmRpcmVjdCkpCiAKKy8qIFNpemUg b2YgYW4gRVhURVJOQUwgZGF0dW0gdGhhdCBjb250YWlucyBhbiBleHRlbmRlZCBUT0FTVCBwb2lu dGVyICovCisjZGVmaW5lIFRPQVNUX1BPSU5URVJfU0laRV9FWFRFTkRFRCAoVkFSSERSU1pfRVhU RVJOQUwgKyBzaXplb2YodmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkKSkKKworLyogVmFsaWRhdGlv biBoZWxwZXJzIGZvciBUT0FTVCBwb2ludGVyIHNpemVzICovCisjZGVmaW5lIFRPQVNUX1BPSU5U RVJfU0laRV9JU19WQUxJRChzaXplKSBcCisJKChzaXplKSA9PSBUT0FTVF9QT0lOVEVSX1NJWkUg fHwgXAorCSAoc2l6ZSkgPT0gVE9BU1RfUE9JTlRFUl9TSVpFX0VYVEVOREVEIHx8IFwKKwkgKHNp emUpID09IElORElSRUNUX1BPSU5URVJfU0laRSkKKworI2RlZmluZSBUT0FTVF9QT0lOVEVSX0lT X0VYVEVOREVEX1NJWkUoc2l6ZSkgXAorCSgoc2l6ZSkgPT0gVE9BU1RfUE9JTlRFUl9TSVpFX0VY VEVOREVEKQorCiAvKiAtLS0tLS0tLS0tCiAgKiBkZXRvYXN0X2V4dGVybmFsX2F0dHIoKSAtCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaAppbmRleCAxM2M0NjEyY2VlZC4u Yjc2OWQxYmM3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVz c2lvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oCkBAIC0x MywxNCArMTMsMjEgQEAKICNpZm5kZWYgVE9BU1RfQ09NUFJFU1NJT05fSAogI2RlZmluZSBUT0FT VF9DT01QUkVTU0lPTl9ICiAKKyNpbmNsdWRlICJ2YXJhdHQuaCIKKwogLyoKICAqIEdVQyBzdXBw b3J0LgogICoKICAqIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gaXMgYW4gaW50ZWdlciBmb3Ig cHVycG9zZXMgb2YgdGhlIEdVQyBtYWNoaW5lcnksCiAgKiBidXQgdGhlIHZhbHVlIGlzIG9uZSBv ZiB0aGUgY2hhciB2YWx1ZXMgZGVmaW5lZCBiZWxvdywgYXMgdGhleSBhcHBlYXIgaW4KICAqIHBn X2F0dHJpYnV0ZS5hdHRjb21wcmVzc2lvbiwgZS5nLiBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OLgor ICoKKyAqIHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgY29udHJvbHMgd2hldGhlciB0byB1c2Ug dGhlIDIwLWJ5dGUgZXh0ZW5kZWQKKyAqIFRPQVNUIHBvaW50ZXIgZm9ybWF0IChyZXF1aXJlZCBm b3IgenN0ZCkgaW5zdGVhZCBvZiB0aGUgbGVnYWN5IDE2LWJ5dGUKKyAqIGZvcm1hdC4gV2hlbiBm YWxzZSwgenN0ZCBjb21wcmVzc2lvbiBmYWxscyBiYWNrIHRvIHBnbHouCiAgKi8KIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbjsKK2V4dGVybiBQR0RMTElN UE9SVCBib29sIHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXI7CiAKIC8qCiAgKiBCdWlsdC1pbiBj b21wcmVzc2lvbiBtZXRob2QgSUQuICBUaGUgdG9hc3QgY29tcHJlc3Npb24gaGVhZGVyIHdpbGwg c3RvcmUKQEAgLTM5LDYgKzQ2LDcgQEAgdHlwZWRlZiBlbnVtIFRvYXN0Q29tcHJlc3Npb25JZAog CVRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQgPSAwLAogCVRPQVNUX0xaNF9DT01QUkVTU0lPTl9J RCA9IDEsCiAJVE9BU1RfSU5WQUxJRF9DT01QUkVTU0lPTl9JRCA9IDIsCisJVE9BU1RfRVhURU5E RURfQ09NUFJFU1NJT05fSUQgPSAzLAkvKiBleHRlbmRlZCBmb3JtYXQgZm9yIGZ1dHVyZSBtZXRo b2RzICovCiB9IFRvYXN0Q29tcHJlc3Npb25JZDsKIAogLyoKQEAgLTQ4LDYgKzU2LDcgQEAgdHlw ZWRlZiBlbnVtIFRvYXN0Q29tcHJlc3Npb25JZAogICovCiAjZGVmaW5lIFRPQVNUX1BHTFpfQ09N UFJFU1NJT04JCQkncCcKICNkZWZpbmUgVE9BU1RfTFo0X0NPTVBSRVNTSU9OCQkJJ2wnCisjZGVm aW5lIFRPQVNUX1pTVERfQ09NUFJFU1NJT04JCQkneicKICNkZWZpbmUgSW52YWxpZENvbXByZXNz aW9uTWV0aG9kCQknXDAnCiAKICNkZWZpbmUgQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGNtKSAg KChjbSkgIT0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kKQpAQCAtNjUsOSArNzQsMzYgQEAgZXh0 ZXJuIHN0cnVjdCB2YXJsZW5hICpsejRfZGVjb21wcmVzc19kYXR1bShjb25zdCBzdHJ1Y3QgdmFy bGVuYSAqdmFsdWUpOwogZXh0ZXJuIHN0cnVjdCB2YXJsZW5hICpsejRfZGVjb21wcmVzc19kYXR1 bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUsCiAJCQkJCQkJCQkJCQkgIGludDMy IHNsaWNlbGVuZ3RoKTsKIAorLyogenN0ZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHJvdXRp bmVzIChleHRlbmRlZCBtZXRob2RzKSAqLworZXh0ZXJuIHN0cnVjdCB2YXJsZW5hICp6c3RkX2Nv bXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSk7CitleHRlcm4gc3RydWN0 IHZhcmxlbmEgKnpzdGRfZGVjb21wcmVzc19kYXR1bShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFs dWUpOworZXh0ZXJuIHN0cnVjdCB2YXJsZW5hICp6c3RkX2RlY29tcHJlc3NfZGF0dW1fc2xpY2Uo Y29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlLAorCQkJCQkJCQkJCQkJICAgaW50MzIgc2xpY2Vs ZW5ndGgpOworCiAvKiBvdGhlciBzdHVmZiAqLwogZXh0ZXJuIFRvYXN0Q29tcHJlc3Npb25JZCB0 b2FzdF9nZXRfY29tcHJlc3Npb25faWQoc3RydWN0IHZhcmxlbmEgKmF0dHIpOwogZXh0ZXJuIGNo YXIgQ29tcHJlc3Npb25OYW1lVG9NZXRob2QoY29uc3QgY2hhciAqY29tcHJlc3Npb24pOwogZXh0 ZXJuIGNvbnN0IGNoYXIgKkdldENvbXByZXNzaW9uTWV0aG9kTmFtZShjaGFyIG1ldGhvZCk7CiAK Ky8qCisgKiBGZWF0dXJlIGZsYWdzIGZvciBleHRlbmRlZCBUT0FTVCBwb2ludGVycyAodmFyYXR0 X2V4dGVybmFsX2V4dGVuZGVkKS4KKyAqIFRoZXNlIGFsaWFzIFZBUkFUVF9FWFRFUk5BTF9GTEFH XyogZnJvbSB2YXJhdHQuaC4KKyAqLworI2RlZmluZSBUT0FTVF9FWFRfRkxBR19DT01QUkVTU0lP TiAgICAgIFZBUkFUVF9FWFRFUk5BTF9GTEFHX0NPTVBSRVNTSU9OCisjZGVmaW5lIFRPQVNUX0VY VF9GTEFHX0NIRUNLU1VNICAgICAgICAgVkFSQVRUX0VYVEVSTkFMX0ZMQUdfQ0hFQ0tTVU0KKwor LyoKKyAqIEV4dGVuZGVkIGNvbXByZXNzaW9uIG1ldGhvZCBJRHMgZm9yIHVzZSB3aXRoIGV4dGVu ZGVkIFRPQVNUIGZvcm1hdC4KKyAqIFN0b3JlZCBpbiB2YV9kYXRhWzBdIHdoZW4gVE9BU1RfRVhU X0ZMQUdfQ09NUFJFU1NJT04gaXMgc2V0LgorICovCisjZGVmaW5lIFRPQVNUX1BHTFpfRVhUX01F VEhPRCAgICAgICAgICAwCisjZGVmaW5lIFRPQVNUX0xaNF9FWFRfTUVUSE9EICAgICAgICAgICAx CisjZGVmaW5lIFRPQVNUX1pTVERfRVhUX01FVEhPRCAgICAgICAgICAyCisjZGVmaW5lIFRPQVNU X1VOQ09NUFJFU1NFRF9FWFRfTUVUSE9EICAzCisKKy8qIFZhbGlkYXRpb24gbWFjcm9zIGZvciBl eHRlbmRlZCBmb3JtYXQgKi8KKyNkZWZpbmUgRXh0ZW5kZWRDb21wcmVzc2lvbk1ldGhvZElzVmFs aWQobWV0aG9kKSAoKG1ldGhvZCkgPD0gMjU1KQorI2RlZmluZSBFeHRlbmRlZEZsYWdzQXJlVmFs aWQoZmxhZ3MpIFwKKwkoKChmbGFncykgJiB+KFRPQVNUX0VYVF9GTEFHX0NPTVBSRVNTSU9OIHwg VE9BU1RfRVhUX0ZMQUdfQ0hFQ0tTVU0pKSA9PSAwKQorCiAjZW5kaWYJCQkJCQkJLyogVE9BU1Rf Q09NUFJFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2lu dGVybmFscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVybmFscy5oCmluZGV4IDA2 YWU4NTgzYzFlLi5kNmJjNWM0ZDE3OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Rv YXN0X2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9pbnRlcm5hbHMu aApAQCAtMzYsMTEgKzM2LDE2IEBAIHR5cGVkZWYgc3RydWN0IHRvYXN0X2NvbXByZXNzX2hlYWRl cgogI2RlZmluZSBUT0FTVF9DT01QUkVTU19NRVRIT0QocHRyKSBcCiAJKCgodG9hc3RfY29tcHJl c3NfaGVhZGVyICopIChwdHIpKS0+dGNpbmZvID4+IFZBUkxFTkFfRVhUU0laRV9CSVRTKQogCisv KgorICogU2V0IHRoZSBzaXplIGFuZCBjb21wcmVzc2lvbiBtZXRob2QgaW4gYSBjb21wcmVzc2Vk IGRhdHVtJ3MgaGVhZGVyLgorICogQWNjZXB0cyBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9J RCBmb3IgZXh0ZW5kZWQgY29tcHJlc3Npb24gbWV0aG9kcy4KKyAqLwogI2RlZmluZSBUT0FTVF9D T01QUkVTU19TRVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9EKHB0ciwgbGVuLCBjbV9tZXRob2Qp IFwKIAlkbyB7IFwKIAkJQXNzZXJ0KChsZW4pID4gMCAmJiAobGVuKSA8PSBWQVJMRU5BX0VYVFNJ WkVfTUFTSyk7IFwKIAkJQXNzZXJ0KChjbV9tZXRob2QpID09IFRPQVNUX1BHTFpfQ09NUFJFU1NJ T05fSUQgfHwgXAotCQkJICAgKGNtX21ldGhvZCkgPT0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lE KTsgXAorCQkJICAgKGNtX21ldGhvZCkgPT0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lEIHx8IFwK KwkJCSAgIChjbV9tZXRob2QpID09IFRPQVNUX0VYVEVOREVEX0NPTVBSRVNTSU9OX0lEKTsgXAog CQkoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAqKSAocHRyKSktPnRjaW5mbyA9IFwKIAkJCShsZW4p IHwgKCh1aW50MzIpIChjbV9tZXRob2QpIDw8IFZBUkxFTkFfRVhUU0laRV9CSVRTKTsgXAogCX0g d2hpbGUgKDApCkBAIC01MCw3ICs1NSw4IEBAIGV4dGVybiBPaWQJdG9hc3RfZ2V0X3ZhbGlkX2lu ZGV4KE9pZCB0b2FzdG9pZCwgTE9DS01PREUgbG9jayk7CiAKIGV4dGVybiB2b2lkIHRvYXN0X2Rl bGV0ZV9kYXR1bShSZWxhdGlvbiByZWwsIERhdHVtIHZhbHVlLCBib29sIGlzX3NwZWN1bGF0aXZl KTsKIGV4dGVybiBEYXR1bSB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFs dWUsCi0JCQkJCQkJICBzdHJ1Y3QgdmFybGVuYSAqb2xkZXh0ZXJuYWwsIGludCBvcHRpb25zKTsK KwkJCQkJCQkgIHN0cnVjdCB2YXJsZW5hICpvbGRleHRlcm5hbCwgaW50IG9wdGlvbnMsCisJCQkJ CQkJICBjaGFyIGNtZXRob2QpOwogCiBleHRlcm4gaW50CXRvYXN0X29wZW5faW5kZXhlcyhSZWxh dGlvbiB0b2FzdHJlbCwKIAkJCQkJCQkgICBMT0NLTU9ERSBsb2NrLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdmFyYXR0LmggYi9zcmMvaW5jbHVkZS92YXJhdHQuaAppbmRleCBhZWVhYmY5MTQ1 Yi4uNWY1ODI5YTFlYzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3ZhcmF0dC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3ZhcmF0dC5oCkBAIC00NSw2ICs0NSwyMyBAQCB0eXBlZGVmIHN0cnVjdCB2YXJh dHRfZXh0ZXJuYWwKICNkZWZpbmUgVkFSTEVOQV9FWFRTSVpFX0JJVFMJMzAKICNkZWZpbmUgVkFS TEVOQV9FWFRTSVpFX01BU0sJKCgxVSA8PCBWQVJMRU5BX0VYVFNJWkVfQklUUykgLSAxKQogCisv KgorICogQ29tcHJlc3Npb24gbWV0aG9kIElEIHN0b3JlZCBpbiB0aGUgMiBoaWdoLW9yZGVyIGJp dHMgb2YgdmFfZXh0aW5mby4KKyAqIFZhbHVlIDMgaW5kaWNhdGVzIGFuIGV4dGVuZGVkIFRPQVNU IHBvaW50ZXIgZm9ybWF0ICh2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpLgorICogVGhpcyBjb25z dGFudCBpcyBhbHNvIGRlZmluZWQgaW4gdG9hc3RfY29tcHJlc3Npb24uaCBmb3IgdXNlIGJ5IFRP QVNUIGNvZGUuCisgKi8KKyNkZWZpbmUgVkFSQVRUX0VYVEVSTkFMX0VYVEVOREVEX0NNSUQJMwor CisvKgorICogRmVhdHVyZSBmbGFncyBmb3IgZXh0ZW5kZWQgb24tZGlzayBUT0FTVCBwb2ludGVy cyAodmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkKS4KKyAqCisgKiBLZWVwIHRoZXNlIGluIHZhcmF0 dC5oIChub3QgYWNjZXNzL3RvYXN0IGhlYWRlcnMpIHNvIGxvdy1sZXZlbCBjb2RlIGNhbgorICog c2FmZWx5IG1hbmlwdWxhdGUgdGhlIG9uLWRpc2sgcmVwcmVzZW50YXRpb24gd2l0aG91dCBkZXBl bmRpbmcgb24gaGlnaGVyCisgKiBsYXllcnMnIGhlYWRlciBpbmNsdWRlIG9yZGVyLgorICovCisj ZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9GTEFHX0NPTVBSRVNTSU9OCTB4MDEJLyogdmFfZGF0YVsw XSA9IG1ldGhvZCBJRCAqLworI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfRkxBR19DSEVDS1NVTQkJ MHgwMgkvKiB2YV9kYXRhWzEtMl0gPSBjaGVja3N1bSAqLworCiAvKgogICogc3RydWN0IHZhcmF0 dF9pbmRpcmVjdCBpcyBhICJUT0FTVCBwb2ludGVyIiByZXByZXNlbnRpbmcgYW4gb3V0LW9mLWxp bmUKICAqIERhdHVtIHRoYXQncyBzdG9yZWQgaW4gbWVtb3J5LCBub3QgaW4gYW4gZXh0ZXJuYWwg dG9hc3QgcmVsYXRpb24uCkBAIC03Niw2ICs5MywyNiBAQCB0eXBlZGVmIHN0cnVjdCB2YXJhdHRf ZXhwYW5kZWQKIAlFeHBhbmRlZE9iamVjdEhlYWRlciAqZW9ocHRyOwogfSB2YXJhdHRfZXhwYW5k ZWQ7CiAKKy8qCisgKiBFeHRlbmRlZCBUT0FTVCBwb2ludGVyLCBleHRlbmRpbmcgdmFyYXR0X2V4 dGVybmFsIGZyb20gMTYgdG8gMjAgYnl0ZXMuCisgKgorICogSWRlbnRpZmllZCBieSBjb21wcmVz c2lvbiBtZXRob2QgSUQgMyBpbiB2YV9leHRpbmZvIGJpdHMgMzAtMzEuICBUaGUKKyAqIHZhX2Zs YWdzIGZpZWxkIGluZGljYXRlcyB3aGljaCBvcHRpb25hbCBmZWF0dXJlcyBhcmUgZW5hYmxlZDsg dmFfZGF0YVtdCisgKiBjb250YWlucyBmZWF0dXJlLXNwZWNpZmljIGRhdGEgKGUuZy4sIGNvbXBy ZXNzaW9uIG1ldGhvZCBpbiB2YV9kYXRhWzBdKS4KKyAqCisgKiBMaWtlIHZhcmF0dF9leHRlcm5h bCwgc3RvcmVkIHVuYWxpZ25lZCBhbmQgcmVxdWlyZXMgbWVtY3B5IGZvciBhY2Nlc3MuCisgKi8K K3R5cGVkZWYgc3RydWN0IHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZAoreworCWludDMyCQl2YV9y YXdzaXplOwkJLyogT3JpZ2luYWwgZGF0YSBzaXplIChpbmNsdWRlcyBoZWFkZXIpICovCisJdWlu dDMyCQl2YV9leHRpbmZvOwkJLyogRXh0ZXJuYWwgc2F2ZWQgc2l6ZSAoMzAgYml0cykgKyBleHRl bmRlZAorCQkJCQkJCQkgKiBpbmRpY2F0b3IgKDIgYml0cywgdmFsdWUgPSAzKSAqLworCXVpbnQ4 CQl2YV9mbGFnczsJCS8qIEZlYXR1cmUgZmxhZ3MgaW5kaWNhdGluZyBlbmFibGVkIGV4dGVuc2lv bnMgKi8KKwl1aW50OAkJdmFfZGF0YVszXTsJCS8qIEV4dGVuc2lvbiBkYXRhIC0gaW50ZXJwcmV0 YXRpb24gZGVwZW5kcyBvbiBmbGFncyAqLworCU9pZAkJCXZhX3ZhbHVlaWQ7CQkvKiBVbmlxdWUg SUQgb2YgdmFsdWUgd2l0aGluIFRPQVNUIHRhYmxlICovCisJT2lkCQkJdmFfdG9hc3RyZWxpZDsJ LyogUmVsSUQgb2YgVE9BU1QgdGFibGUgY29udGFpbmluZyBpdCAqLworfQkJCXZhcmF0dF9leHRl cm5hbF9leHRlbmRlZDsKKwogLyoKICAqIFR5cGUgdGFnIGZvciB0aGUgdmFyaW91cyBzb3J0cyBv ZiAiVE9BU1QgcG9pbnRlciIgZGF0dW1zLiAgVGhlIHBlY3VsaWFyCiAgKiB2YWx1ZSBmb3IgVkFS VEFHX09ORElTSyBjb21lcyBmcm9tIGEgcmVxdWlyZW1lbnQgZm9yIG9uLWRpc2sgY29tcGF0aWJp bGl0eQpAQCAtODYsNyArMTIzLDE3IEBAIHR5cGVkZWYgZW51bSB2YXJ0YWdfZXh0ZXJuYWwKIAlW QVJUQUdfSU5ESVJFQ1QgPSAxLAogCVZBUlRBR19FWFBBTkRFRF9STyA9IDIsCiAJVkFSVEFHX0VY UEFOREVEX1JXID0gMywKLQlWQVJUQUdfT05ESVNLID0gMTgKKwlWQVJUQUdfT05ESVNLID0gMTgs CisKKwkvKgorCSAqIFZBUlRBR19PTkRJU0tfRVhURU5ERUQgaXMgdXNlZCBmb3IgdGhlIGV4dGVu ZGVkIFRPQVNUIHBvaW50ZXIgZm9ybWF0LAorCSAqIHdoaWNoIGluY3JlYXNlcyB0aGUgb24tZGlz ayBwYXlsb2FkIGZyb20gMTYgdG8gMjAgYnl0ZXMuICBUaGUgZmlyc3QKKwkgKiA4IGJ5dGVzICh2 YV9yYXdzaXplLCB2YV9leHRpbmZvKSBhcmUgbGF5b3V0LWNvbXBhdGlibGUgd2l0aAorCSAqIHN0 cnVjdCB2YXJhdHRfZXh0ZXJuYWwgc28gdGhhdCBleGlzdGluZyBjb2RlIGluc3BlY3RpbmcgdGhv c2UgZmllbGRzCisJICogY29udGludWVzIHRvIHdvcmsuICBPbGRlciBQb3N0Z3JlU1FMIHZlcnNp b25zIGRvIG5vdCBrbm93IGFib3V0IHRoaXMKKwkgKiB0YWcgYW5kIHRoZXJlZm9yZSBtdXN0IG5v dCBiZSB1c2VkIHRvIHJlYWQgY2x1c3RlcnMgdGhhdCBjb250YWluIGl0LgorCSAqLworCVZBUlRB R19PTkRJU0tfRVhURU5ERUQgPSAxOQogfSB2YXJ0YWdfZXh0ZXJuYWw7CiAKIC8qIElzIGEgVE9B U1QgcG9pbnRlciBlaXRoZXIgdHlwZSBvZiBleHBhbmRlZC1vYmplY3QgcG9pbnRlcj8gKi8KQEAg LTk3LDcgKzE0NCwxNCBAQCBWQVJUQUdfSVNfRVhQQU5ERUQodmFydGFnX2V4dGVybmFsIHRhZykK IAlyZXR1cm4gKCh0YWcgJiB+MSkgPT0gVkFSVEFHX0VYUEFOREVEX1JPKTsKIH0KIAotLyogU2l6 ZSBvZiB0aGUgZGF0YSBwYXJ0IG9mIGEgIlRPQVNUIHBvaW50ZXIiIGRhdHVtICovCisvKgorICog U2l6ZSBvZiB0aGUgZGF0YSBwYXJ0IG9mIGEgIlRPQVNUIHBvaW50ZXIiIGRhdHVtLgorICoKKyAq IEZvciBvbi1kaXNrIFRPQVNUIHBvaW50ZXJzIHdlIG5vdyBzdXBwb3J0IHR3byBwYXlsb2FkIHNp emVzOgorICogdGhlIG9yaWdpbmFsIDE2LWJ5dGUgZm9ybWF0IChWQVJUQUdfT05ESVNLKSBkZXNj cmliZWQgYnkgc3RydWN0CisgKiB2YXJhdHRfZXh0ZXJuYWwsIGFuZCBhIDIwLWJ5dGUgZXh0ZW5k ZWQgZm9ybWF0CisgKiAoVkFSVEFHX09ORElTS19FWFRFTkRFRCkgZGVzY3JpYmVkIGJ5IHN0cnVj dCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQuCisgKi8KIHN0YXRpYyBpbmxpbmUgU2l6ZQogVkFS VEFHX1NJWkUodmFydGFnX2V4dGVybmFsIHRhZykKIHsKQEAgLTEwNyw2ICsxNjEsOCBAQCBWQVJU QUdfU0laRSh2YXJ0YWdfZXh0ZXJuYWwgdGFnKQogCQlyZXR1cm4gc2l6ZW9mKHZhcmF0dF9leHBh bmRlZCk7CiAJZWxzZSBpZiAodGFnID09IFZBUlRBR19PTkRJU0spCiAJCXJldHVybiBzaXplb2Yo dmFyYXR0X2V4dGVybmFsKTsKKwllbHNlIGlmICh0YWcgPT0gVkFSVEFHX09ORElTS19FWFRFTkRF RCkKKwkJcmV0dXJuIHNpemVvZih2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpOwogCWVsc2UKIAl7 CiAJCUFzc2VydChmYWxzZSk7CkBAIC0zNjAsNyArNDE2LDEzIEBAIFZBUkFUVF9JU19FWFRFUk5B TChjb25zdCB2b2lkICpQVFIpCiBzdGF0aWMgaW5saW5lIGJvb2wKIFZBUkFUVF9JU19FWFRFUk5B TF9PTkRJU0soY29uc3Qgdm9pZCAqUFRSKQogewotCXJldHVybiBWQVJBVFRfSVNfRVhURVJOQUwo UFRSKSAmJiBWQVJUQUdfRVhURVJOQUwoUFRSKSA9PSBWQVJUQUdfT05ESVNLOworCXZhcnRhZ19l eHRlcm5hbCB0YWc7CisKKwlpZiAoIVZBUkFUVF9JU19FWFRFUk5BTChQVFIpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwl0YWcgPSBWQVJUQUdfRVhURVJOQUwoUFRSKTsKKwlyZXR1cm4gdGFnID09IFZB UlRBR19PTkRJU0sgfHwgdGFnID09IFZBUlRBR19PTkRJU0tfRVhURU5ERUQ7CiB9CiAKIC8qIElz IHZhcmxlbmEgZGF0dW0gYW4gaW5kaXJlY3QgcG9pbnRlcj8gKi8KQEAgLTUxNiwxMSArNTc4LDEx IEBAIFZBUkFUVF9FWFRFUk5BTF9HRVRfQ09NUFJFU1NfTUVUSE9EKHN0cnVjdCB2YXJhdHRfZXh0 ZXJuYWwgdG9hc3RfcG9pbnRlcikKIH0KIAogLyogU2V0IHNpemUgYW5kIGNvbXByZXNzIG1ldGhv ZCBvZiBhbiBleHRlcm5hbGx5LXN0b3JlZCB2YXJsZW5hIGRhdHVtICovCi0vKiBUaGlzIGhhcyB0 byByZW1haW4gYSBtYWNybzsgYmV3YXJlIG11bHRpcGxlIGV2YWx1YXRpb25zISAqLwogI2RlZmlu ZSBWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0b2FzdF9wb2lu dGVyLCBsZW4sIGNtKSBcCiAJZG8geyBcCiAJCUFzc2VydCgoY20pID09IFRPQVNUX1BHTFpfQ09N UFJFU1NJT05fSUQgfHwgXAotCQkJICAgKGNtKSA9PSBUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQp OyBcCisJCQkgICAoY20pID09IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRCB8fCBcCisJCQkgICAo Y20pID09IFZBUkFUVF9FWFRFUk5BTF9FWFRFTkRFRF9DTUlEKTsgXAogCQkoKHRvYXN0X3BvaW50 ZXIpLnZhX2V4dGluZm8gPSBcCiAJCQkobGVuKSB8ICgodWludDMyKSAoY20pIDw8IFZBUkxFTkFf RVhUU0laRV9CSVRTKSk7IFwKIAl9IHdoaWxlICgwKQpAQCAtNTM5LDQgKzYwMSw5MiBAQCBWQVJB VFRfRVhURVJOQUxfSVNfQ09NUFJFU1NFRChzdHJ1Y3QgdmFyYXR0X2V4dGVybmFsIHRvYXN0X3Bv aW50ZXIpCiAJCShTaXplKSAodG9hc3RfcG9pbnRlci52YV9yYXdzaXplIC0gVkFSSERSU1opOwog fQogCisvKiBNYWNyb3MgZm9yIGV4dGVuZGVkIFRPQVNUIHBvaW50ZXJzICh2YXJhdHRfZXh0ZXJu YWxfZXh0ZW5kZWQpICovCisKKy8qCisgKiBDaGVjayBpZiBhIFRPQVNUIHBvaW50ZXIgdXNlcyB0 aGUgZXh0ZW5kZWQgb24tZGlzayBmb3JtYXQuCisgKgorICogQ2FsbGVycyBtdXN0IGhhdmUgYWxy ZWFkeSB2ZXJpZmllZCBWQVJBVFRfSVNfRVhURVJOQUxfT05ESVNLKCkgYmVmb3JlCisgKiBjYWxs aW5nIHRoaXM7IGhlcmUgd2UgbG9vayBvbmx5IGF0IHRoZSBjb21wcmVzc2lvbi1tZXRob2QgYml0 cyBlbWJlZGRlZAorICogaW4gdmFfZXh0aW5mby4KKyAqLworc3RhdGljIGlubGluZSBib29sCitW QVJBVFRfRVhURVJOQUxfSVNfRVhURU5ERUQoc3RydWN0IHZhcmF0dF9leHRlcm5hbCB0b2FzdF9w b2ludGVyKQoreworCXJldHVybiBWQVJBVFRfRVhURVJOQUxfR0VUX0NPTVBSRVNTX01FVEhPRCh0 b2FzdF9wb2ludGVyKSA9PQorCQlWQVJBVFRfRVhURVJOQUxfRVhURU5ERURfQ01JRDsKK30KKwor LyogR2V0IGZlYXR1cmUgZmxhZ3MgZnJvbSBleHRlbmRlZCBwb2ludGVyICovCitzdGF0aWMgaW5s aW5lIHVpbnQ4CitWQVJBVFRfRVhURVJOQUxfR0VUX0ZMQUdTKHN0cnVjdCB2YXJhdHRfZXh0ZXJu YWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQpCit7CisJcmV0dXJuIHRvYXN0X3BvaW50ZXJf ZXh0LnZhX2ZsYWdzOworfQorCisvKiBTZXQgZmVhdHVyZSBmbGFncyBpbiBleHRlbmRlZCBwb2lu dGVyICovCisjZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9TRVRfRkxBR1ModG9hc3RfcG9pbnRlcl9l eHQsIGZsYWdzKSBcCisJZG8geyBcCisJCSh0b2FzdF9wb2ludGVyX2V4dCkudmFfZmxhZ3MgPSAo ZmxhZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworLyogVGVzdCBpZiBhIHNwZWNpZmljIGZsYWcgaXMg c2V0ICovCisjZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9IQVNfRkxBRyh0b2FzdF9wb2ludGVyX2V4 dCwgZmxhZykgXAorCSgoKHRvYXN0X3BvaW50ZXJfZXh0KS52YV9mbGFncyAmIChmbGFnKSkgIT0g MCkKKworLyogR2V0IHBvaW50ZXIgdG8gZXh0ZW5zaW9uIGRhdGEgYXJyYXkgKi8KKyNkZWZpbmUg VkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRfREFUQSh0b2FzdF9wb2ludGVyX2V4dCkgXAorCSgodG9h c3RfcG9pbnRlcl9leHQpLnZhX2RhdGEpCisKKy8qIEdldCBleHRlbmRlZCBjb21wcmVzc2lvbiBt ZXRob2QgKHdoZW4gVE9BU1RfRVhUX0ZMQUdfQ09NUFJFU1NJT04gaXMgc2V0KSAqLworc3RhdGlj IGlubGluZSB1aW50OAorVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRfQ09NUFJFU1NJT05fTUVUSE9E KHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQpCit7CisJ cmV0dXJuIHRvYXN0X3BvaW50ZXJfZXh0LnZhX2RhdGFbMF07Cit9CisKKy8qIFNldCBleHRlbmRl ZCBjb21wcmVzc2lvbiBtZXRob2QgKi8KKyNkZWZpbmUgVkFSQVRUX0VYVEVSTkFMX1NFVF9FWFRf Q09NUFJFU1NJT05fTUVUSE9EKHRvYXN0X3BvaW50ZXJfZXh0LCBtZXRob2QpIFwKKwlkbyB7IFwK KwkJKHRvYXN0X3BvaW50ZXJfZXh0KS52YV9kYXRhWzBdID0gKG1ldGhvZCk7IFwKKwl9IHdoaWxl ICgwKQorCisvKiBHZXQgZXh0c2l6ZSBhbmQgY29tcHJlc3MgbWV0aG9kIGZyb20gZXh0ZW5kZWQg cG9pbnRlciAoc2FtZSBhcyBzdGFuZGFyZCkgKi8KK3N0YXRpYyBpbmxpbmUgU2l6ZQorVkFSQVRU X0VYVEVSTkFMX0dFVF9FWFRTSVpFX0VYVEVOREVEKHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0 ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQpCit7CisJcmV0dXJuIHRvYXN0X3BvaW50ZXJfZXh0LnZh X2V4dGluZm8gJiBWQVJMRU5BX0VYVFNJWkVfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1aW50 MzIKK1ZBUkFUVF9FWFRFUk5BTF9HRVRfQ09NUFJFU1NfTUVUSE9EX0VYVEVOREVEKHN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9pbnRlcl9leHQpCit7CisJcmV0dXJuIHRv YXN0X3BvaW50ZXJfZXh0LnZhX2V4dGluZm8gPj4gVkFSTEVOQV9FWFRTSVpFX0JJVFM7Cit9CisK Ky8qIFNldCBzaXplIGFuZCBleHRlbmRlZCBpbmRpY2F0b3IgaW4gdmFfZXh0aW5mbyAqLworI2Rl ZmluZSBWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0VYVF9GTEFHUyh0b2FzdF9wb2ludGVy X2V4dCwgbGVuLCBmbGFncykgXAorCWRvIHsgXAorCQlBc3NlcnQoKGxlbikgPiAwICYmIChsZW4p IDw9IFZBUkxFTkFfRVhUU0laRV9NQVNLKTsgXAorCQkodG9hc3RfcG9pbnRlcl9leHQpLnZhX2V4 dGluZm8gPSBcCisJCQkobGVuKSB8ICgodWludDMyKSBWQVJBVFRfRVhURVJOQUxfRVhURU5ERURf Q01JRCA8PCBWQVJMRU5BX0VYVFNJWkVfQklUUyk7IFwKKwkJKHRvYXN0X3BvaW50ZXJfZXh0KS52 YV9mbGFncyA9IChmbGFncyk7IFwKKwkJbWVtc2V0KCh0b2FzdF9wb2ludGVyX2V4dCkudmFfZGF0 YSwgMCwgMyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBDb252ZW5pZW5jZSBtYWNybyBmb3Igc2V0 dGluZyBleHRlbmRlZCBwb2ludGVyIHdpdGggY29tcHJlc3Npb24gbWV0aG9kICovCisjZGVmaW5l IFZBUkFUVF9FWFRFUk5BTF9TRVRfU0laRV9BTkRfRVhUX0NPTVBSRVNTSU9OKHRvYXN0X3BvaW50 ZXJfZXh0LCBsZW4sIG1ldGhvZCkgXAorCWRvIHsgXAorCQlWQVJBVFRfRVhURVJOQUxfU0VUX1NJ WkVfQU5EX0VYVF9GTEFHUyh0b2FzdF9wb2ludGVyX2V4dCwgbGVuLCBWQVJBVFRfRVhURVJOQUxf RkxBR19DT01QUkVTU0lPTik7IFwKKwkJVkFSQVRUX0VYVEVSTkFMX1NFVF9FWFRfQ09NUFJFU1NJ T05fTUVUSE9EKHRvYXN0X3BvaW50ZXJfZXh0LCBtZXRob2QpOyBcCisJfSB3aGlsZSAoMCkKKwor LyogVGVzdCBpZiBleHRlbmRlZCBwb2ludGVyIGlzIGNvbXByZXNzZWQgKHNhbWUgbG9naWMgYXMg c3RhbmRhcmQpICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1ZBUkFUVF9FWFRFUk5BTF9JU19DT01Q UkVTU0VEX0VYVEVOREVEKHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQgdG9hc3RfcG9p bnRlcl9leHQpCit7CisJcmV0dXJuIFZBUkFUVF9FWFRFUk5BTF9HRVRfRVhUU0laRV9FWFRFTkRF RCh0b2FzdF9wb2ludGVyX2V4dCkgPAorCQkoU2l6ZSkgKHRvYXN0X3BvaW50ZXJfZXh0LnZhX3Jh d3NpemUgLSBWQVJIRFJTWik7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMDY4 ZmQ4NTlhOGYuLjlkZmYxMTlhYTIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTQ3LDYgKzQ3LDcg QEAgc3ViZGlyKCd0ZXN0X3Jsc19ob29rcycpCiBzdWJkaXIoJ3Rlc3Rfc2htX21xJykKIHN1YmRp cigndGVzdF9zbHJ1JykKIHN1YmRpcigndGVzdF90aWRzdG9yZScpCitzdWJkaXIoJ3Rlc3RfdG9h c3RfZXh0JykKIHN1YmRpcigndHlwY2FjaGUnKQogc3ViZGlyKCd1bnNhZmVfdGVzdHMnKQogc3Vi ZGlyKCd3b3JrZXJfc3BpJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2Fz dF9leHQvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L01ha2VmaWxl Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTI0MDlmOTE4YwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvTWFrZWZpbGUK QEAgLTAsMCArMSwyMCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L01ha2Vm aWxlCisKK01PRFVMRV9iaWcgPSB0ZXN0X3RvYXN0X2V4dAorT0JKUyA9IHRlc3RfdG9hc3RfZXh0 Lm8KKworRVhURU5TSU9OID0gdGVzdF90b2FzdF9leHQKK0RBVEEgPSB0ZXN0X3RvYXN0X2V4dC0t MS4wLnNxbAorCitSRUdSRVNTID0gdGVzdF90b2FzdF9leHQKKworaWZkZWYgVVNFX1BHWFMKK1BH X0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMp CitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF90 b2FzdF9leHQKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9j b250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF90b2FzdF9leHQvZXhwZWN0ZWQvdGVzdF90b2FzdF9leHQub3V0IGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3RvYXN0X2V4dC9leHBlY3RlZC90ZXN0X3RvYXN0X2V4dC5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFhZDA3M2RjZWY5Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC9leHBlY3RlZC90ZXN0X3RvYXN0X2V4 dC5vdXQKQEAgLTAsMCArMSwyMjkgQEAKKy0tCistLSBUZXN0cyBmb3IgZXh0ZW5kZWQgVE9BU1Qg aGVhZGVyIHN0cnVjdHVyZXMgYW5kIHpzdGQgY29tcHJlc3Npb24KKy0tCitDUkVBVEUgRVhURU5T SU9OIHRlc3RfdG9hc3RfZXh0OworLS0KKy0tIENvbXBpbGUtdGltZSB2YWxpZGF0aW9uIHRlc3Rz IChhbHdheXMgcnVuKQorLS0KKy0tIFZlcmlmeSBzdHJ1Y3R1cmUgc2l6ZXMgbWF0Y2ggZXhwZWN0 ZWQgdmFsdWVzIChjYXRjaGVzIEFCSSBpc3N1ZXMpCitTRUxFQ1QgdGVzdF90b2FzdF9zdHJ1Y3R1 cmVfc2l6ZXMoKTsKKyAgICAgICAgICB0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXplcworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBQQVNTOiB2YXJhdHRf ZXh0ZXJuYWwgaXMgMTYgYnl0ZXMgICAgICAgICAgICArCisgUEFTUzogdmFyYXR0X2V4dGVybmFs X2V4dGVuZGVkIGlzIDIwIGJ5dGVzICAgKworIFBBU1M6IFRPQVNUX1BPSU5URVJfU0laRSBpcyAx OCBieXRlcyAgICAgICAgICsKKyBQQVNTOiBUT0FTVF9QT0lOVEVSX1NJWkVfRVhURU5ERUQgaXMg MjIgYnl0ZXMrCisgUEFTUzogQWxsIGZpZWxkIG9mZnNldHMgY29ycmVjdCAobm8gcGFkZGluZykg KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyBSZXN1 bHQ6IEFMTCBURVNUUyBQQVNTRUQgICAgICAgICAgICAgICAgICAgICArCisKKygxIHJvdykKKwor LS0gVmVyaWZ5IGZsYWcgdmFsaWRhdGlvbiBtYWNyb3Mgd29yayBjb3JyZWN0bHkKK1NFTEVDVCB0 ZXN0X3RvYXN0X2ZsYWdfdmFsaWRhdGlvbigpOworICAgICAgIHRlc3RfdG9hc3RfZmxhZ192YWxp ZGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUEFTUzog VmFsaWQgZmxhZ3MgKDB4MDAtMHgwMykgYWNjZXB0ZWQrCisgUEFTUzogSW52YWxpZCBmbGFncyAo MHgwNCspIHJlamVjdGVkICArCisgUEFTUzogQ29tcHJlc3Npb24gbWV0aG9kcyAwLTI1NSB2YWxp ZCArCisgUEFTUzogQ29tcHJlc3Npb24gbWV0aG9kIElEcyBjb3JyZWN0ICArCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgUmVzdWx0OiBBTEwgVEVTVFMgUEFTU0VE ICAgICAgICAgICAgICArCisKKygxIHJvdykKKworLS0gVmVyaWZ5IGNvbXByZXNzaW9uIElEIGNv bnN0YW50cyBhcmUgY29uc2lzdGVudAorU0VMRUNUIHRlc3RfdG9hc3RfY29tcHJlc3Npb25faWRz KCk7CisgICAgICAgICAgICB0ZXN0X3RvYXN0X2NvbXByZXNzaW9uX2lkcworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBQQVNTOiBTdGFuZGFyZCBj b21wcmVzc2lvbiBJRHMgY29ycmVjdCAoMCwxLDIsMykrCisgUEFTUzogUEdMWi9MWjQgSURzIGNv bnNpc3RlbnQgYmV0d2VlbiBmb3JtYXRzICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyBSZXN1bHQ6IEFMTCBURVNUUyBQQVNTRUQgICAgICAg ICAgICAgICAgICAgICAgICArCisKKygxIHJvdykKKworLS0KKy0tIEZ1bmN0aW9uYWwgdGVzdHMg Zm9yIHpzdGQgVE9BU1QgY29tcHJlc3Npb24KKy0tIFRoZXNlIHRlc3RzIHJlcXVpcmUgUG9zdGdy ZVNRTCBidWlsdCB3aXRoIFVTRV9aU1RECistLQorU0VMRUNUIE5PVChlbnVtdmFscyBAPiAne3pz dGR9JykgQVMgc2tpcF90ZXN0IEZST00gcGdfc2V0dGluZ3MgV0hFUkUKKyAgbmFtZSA9ICdkZWZh dWx0X3RvYXN0X2NvbXByZXNzaW9uJyBcZ3NldAorXGlmIDpza2lwX3Rlc3QKKyAgIFxlY2hvICcq Kiogc2tpcHBpbmcgVE9BU1QgdGVzdHMgd2l0aCB6c3RkIChub3Qgc3VwcG9ydGVkKSAqKionCisg ICBccXVpdAorXGVuZGlmCistLSBUZXN0IGJhc2ljIHpzdGQgY29tcHJlc3Npb24gcm91bmQtdHJp cAorQ1JFQVRFIFRBQkxFIHRlc3RfenN0ZF9iYXNpYyAoaWQgc2VyaWFsLCBkYXRhIHRleHQgQ09N UFJFU1NJT04genN0ZCk7CitJTlNFUlQgSU5UTyB0ZXN0X3pzdGRfYmFzaWMgKGRhdGEpCisgICAg VkFMVUVTIChyZXBlYXQoJ1Bvc3RncmVTUUwgenN0ZCBUT0FTVCBjb21wcmVzc2lvbiB0ZXN0LiAn LCAzMDAwKSk7CistLSBWZXJpZnkgY29tcHJlc3Npb24gYW5kIHJlYWRiYWNrCitTRUxFQ1QgaWQs CisgICAgICAgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAg ICAgIGxlbmd0aChkYXRhKSBBUyBkYXRhX2xlbmd0aCwKKyAgICAgICBsZWZ0KGRhdGEsIDQyKSBB UyBkYXRhX3ByZWZpeAorRlJPTSB0ZXN0X3pzdGRfYmFzaWM7CisgaWQgfCBjb21wcmVzc2lvbiB8 IGRhdGFfbGVuZ3RoIHwgICAgICAgICAgICAgICAgZGF0YV9wcmVmaXgKKy0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgIDEgfCB6c3RkICAgICAgICB8ICAgICAgMTIwMDAwIHwgUG9zdGdyZVNRTCB6c3Rk IFRPQVNUIGNvbXByZXNzaW9uIHRlc3QuIFBvCisoMSByb3cpCisKKy0tIFRlc3Qgc2xpY2UgYWNj ZXNzIChwYXJ0aWFsIGRlY29tcHJlc3Npb24pCitTRUxFQ1QgaWQsIHN1YnN0cihkYXRhLCAxMDAs IDQyKSBBUyBzbGljZSBGUk9NIHRlc3RfenN0ZF9iYXNpYzsKKyBpZCB8ICAgICAgICAgICAgICAg ICAgIHNsaWNlCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgIDEgfCBTVCBjb21wcmVzc2lvbiB0ZXN0LiBQb3N0Z3JlU1FMIHpzdGQgVE9BU1QKKygx IHJvdykKKworLS0gVGVzdCBVUERBVEUgd2l0aCB6c3RkIGNvbXByZXNzZWQgZGF0YQorVVBEQVRF IHRlc3RfenN0ZF9iYXNpYyBTRVQgZGF0YSA9IHJlcGVhdCgnVXBkYXRlZCB6c3RkIGRhdGEgZm9y IFRPQVNUIHRlc3QuICcsIDMwMDApOworU0VMRUNUIGlkLAorICAgICAgIHBnX2NvbHVtbl9jb21w cmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBsZW5ndGgoZGF0YSkgQVMgZGF0 YV9sZW5ndGgsCisgICAgICAgbGVmdChkYXRhLCAzNSkgQVMgZGF0YV9wcmVmaXgKK0ZST00gdGVz dF96c3RkX2Jhc2ljOworIGlkIHwgY29tcHJlc3Npb24gfCBkYXRhX2xlbmd0aCB8ICAgICAgICAg ICAgIGRhdGFfcHJlZml4CistLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCB6c3RkICAgICAgICB8ICAgICAg MTAyMDAwIHwgVXBkYXRlZCB6c3RkIGRhdGEgZm9yIFRPQVNUIHRlc3QuIFUKKygxIHJvdykKKwor LS0KKy0tIFRlc3QgZXh0ZW5kZWQgaGVhZGVyIGZvcm1hdCB3aXRoIGxlZ2FjeSBjb21wcmVzc2lv biBtZXRob2RzCistLQorLS0gV2hlbiB1c2VfZXh0ZW5kZWRfdG9hc3RfaGVhZGVyIGlzIG9uLCBw Z2x6L2x6NCB1c2UgdGhlIDIwLWJ5dGUgZm9ybWF0CitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hl YWRlciA9IG9uOworQ1JFQVRFIFRBQkxFIHRlc3RfcGdsel9leHRlbmRlZCAoZGF0YSB0ZXh0IENP TVBSRVNTSU9OIHBnbHopOworSU5TRVJUIElOVE8gdGVzdF9wZ2x6X2V4dGVuZGVkIChkYXRhKQor ICAgIFZBTFVFUyAocmVwZWF0KCdQR0xaIHdpdGggZXh0ZW5kZWQgaGVhZGVyIGZvcm1hdC4gJywg MzAwMCkpOworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lv biwKKyAgICAgICBsZW5ndGgoZGF0YSkgQVMgZGF0YV9sZW5ndGgKK0ZST00gdGVzdF9wZ2x6X2V4 dGVuZGVkOworIGNvbXByZXNzaW9uIHwgZGF0YV9sZW5ndGgKKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLQorIHBnbHogICAgICAgIHwgICAgICAxMDIwMDAKKygxIHJvdykKKworLS0gVmVyaWZ5 IHNsaWNlIGFjY2VzcyB3b3JrcyB3aXRoIGV4dGVuZGVkIGZvcm1hdAorU0VMRUNUIHN1YnN0cihk YXRhLCA1MCwgMzQpIEFTIHNsaWNlIEZST00gdGVzdF9wZ2x6X2V4dGVuZGVkOworICAgICAgICAg ICAgICAgc2xpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRlZCBo ZWFkZXIgZm9ybWF0LiBQR0xaIHdpdGggZXh0ZW4KKygxIHJvdykKKworLS0KKy0tIFRlc3QgZGF0 YSBpbnRlZ3JpdHkgYWNyb3NzIGNvbXByZXNzaW9uIG1ldGhvZHMKKy0tCitDUkVBVEUgVEFCTEUg dGVzdF9pbnRlZ3JpdHkgKAorICAgIG1ldGhvZCB0ZXh0LAorICAgIG9yaWdpbmFsX2RhdGEgdGV4 dCwKKyAgICBjb21wcmVzc2VkX2RhdGEgdGV4dAorKTsKKy0tIFN0b3JlIHRlc3QgZGF0YSB3aXRo IGVhY2ggbWV0aG9kCitJTlNFUlQgSU5UTyB0ZXN0X2ludGVncml0eSBWQUxVRVMKKyAgICAoJ3Bn bHonLCByZXBlYXQoJ0ludGVncml0eSB0ZXN0IGRhdGEgcGF0dGVybi4gJywgMjAwMCksIE5VTEwp LAorICAgICgnenN0ZCcsIHJlcGVhdCgnSW50ZWdyaXR5IHRlc3QgZGF0YSBwYXR0ZXJuLiAnLCAy MDAwKSwgTlVMTCk7CistLSBDcmVhdGUgY29tcHJlc3NlZCB2ZXJzaW9ucworQ1JFQVRFIFRBQkxF IHRlc3RfcGdsel9pbnRlZ3JpdHkgKGRhdGEgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0NSRUFU RSBUQUJMRSB0ZXN0X3pzdGRfaW50ZWdyaXR5IChkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7 CitJTlNFUlQgSU5UTyB0ZXN0X3BnbHpfaW50ZWdyaXR5IFNFTEVDVCBvcmlnaW5hbF9kYXRhIEZS T00gdGVzdF9pbnRlZ3JpdHkgV0hFUkUgbWV0aG9kID0gJ3BnbHonOworSU5TRVJUIElOVE8gdGVz dF96c3RkX2ludGVncml0eSBTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5 IFdIRVJFIG1ldGhvZCA9ICd6c3RkJzsKKy0tIFZlcmlmeSBjaGVja3N1bXMgbWF0Y2gKK1NFTEVD VCAncGdseicgQVMgbWV0aG9kLAorICAgICAgIG1kNSgoU0VMRUNUIG9yaWdpbmFsX2RhdGEgRlJP TSB0ZXN0X2ludGVncml0eSBXSEVSRSBtZXRob2QgPSAncGdseicpKSA9CisgICAgICAgbWQ1KChT RUxFQ1QgZGF0YSBGUk9NIHRlc3RfcGdsel9pbnRlZ3JpdHkpKSBBUyBjaGVja3N1bV9tYXRjaDsK KyBtZXRob2QgfCBjaGVja3N1bV9tYXRjaAorLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHBn bHogICB8IHQKKygxIHJvdykKKworU0VMRUNUICd6c3RkJyBBUyBtZXRob2QsCisgICAgICAgbWQ1 KChTRUxFQ1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5IFdIRVJFIG1ldGhvZCA9 ICd6c3RkJykpID0KKyAgICAgICBtZDUoKFNFTEVDVCBkYXRhIEZST00gdGVzdF96c3RkX2ludGVn cml0eSkpIEFTIGNoZWNrc3VtX21hdGNoOworIG1ldGhvZCB8IGNoZWNrc3VtX21hdGNoCistLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tCisgenN0ZCAgIHwgdAorKDEgcm93KQorCistLQorLS0gVGVz dCB0YWJsZSByZXdyaXRlIG9wZXJhdGlvbnMgKENMVVNURVIsIFZBQ1VVTSBGVUxMKQorLS0KK0NS RUFURSBUQUJMRSB0ZXN0X2NsdXN0ZXJfenN0ZCAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZLCBkYXRh IHRleHQgQ09NUFJFU1NJT04genN0ZCk7CitJTlNFUlQgSU5UTyB0ZXN0X2NsdXN0ZXJfenN0ZCAo ZGF0YSkKKyAgICBWQUxVRVMgKHJlcGVhdCgnRGF0YSBmb3IgQ0xVU1RFUiB0ZXN0IHdpdGggenN0 ZCBjb21wcmVzc2lvbi4gJywgMjUwMCkpOworLS0gQ2FwdHVyZSBvcmlnaW5hbCBkYXRhIGhhc2gK K1NFTEVDVCAnYmVmb3JlX2NsdXN0ZXInIEFTIHN0YWdlLCBtZDUoZGF0YSkgQVMgaGFzaCBGUk9N IHRlc3RfY2x1c3Rlcl96c3RkOworICAgICBzdGFnZSAgICAgIHwgICAgICAgICAgICAgICBoYXNo CistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBi ZWZvcmVfY2x1c3RlciB8IGI0MTMyZTc5OWJiZDA2NWE3ZTkyNjYxNTlhYTgyZGMxCisoMSByb3cp CisKK0NMVVNURVIgdGVzdF9jbHVzdGVyX3pzdGQgVVNJTkcgdGVzdF9jbHVzdGVyX3pzdGRfcGtl eTsKK1NFTEVDVCAnYWZ0ZXJfY2x1c3RlcicgQVMgc3RhZ2UsCisgICAgICAgcGdfY29sdW1uX2Nv bXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAgICAgIG1kNShkYXRhKSBBUyBoYXNo CitGUk9NIHRlc3RfY2x1c3Rlcl96c3RkOworICAgICBzdGFnZSAgICAgfCBjb21wcmVzc2lvbiB8 ICAgICAgICAgICAgICAgaGFzaAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGFmdGVyX2NsdXN0ZXIgfCB6c3RkICAgICAg ICB8IGI0MTMyZTc5OWJiZDA2NWE3ZTkyNjYxNTlhYTgyZGMxCisoMSByb3cpCisKK1ZBQ1VVTSBG VUxMIHRlc3RfY2x1c3Rlcl96c3RkOworU0VMRUNUICdhZnRlcl92YWN1dW1fZnVsbCcgQVMgc3Rh Z2UsCisgICAgICAgcGdfY29sdW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAor ICAgICAgIG1kNShkYXRhKSBBUyBoYXNoCitGUk9NIHRlc3RfY2x1c3Rlcl96c3RkOworICAgICAg IHN0YWdlICAgICAgIHwgY29tcHJlc3Npb24gfCAgICAgICAgICAgICAgIGhhc2gKKy0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgYWZ0ZXJfdmFjdXVtX2Z1bGwgfCB6c3RkICAgICAgICB8IGI0MTMyZTc5OWJiZDA2NWE3 ZTkyNjYxNTlhYTgyZGMxCisoMSByb3cpCisKKy0tCistLSBUZXN0IG1peGVkIGZvcm1hdCBkYXRh IChHVUMgdG9nZ2xpbmcpCistLQorU0VUIHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBvbjsK K0NSRUFURSBUQUJMRSB0ZXN0X2d1Y190b2dnbGUgKGlkIHNlcmlhbCwgZGF0YSB0ZXh0IENPTVBS RVNTSU9OIHBnbHopOworSU5TRVJUIElOVE8gdGVzdF9ndWNfdG9nZ2xlIChkYXRhKQorICAgIFZB TFVFUyAocmVwZWF0KCdEYXRhIGNyZWF0ZWQgd2l0aCBleHRlbmRlZCBoZWFkZXIgb24uICcsIDMw MDApKTsKK1NFTEVDVCAnd2l0aF9leHRfb24nIEFTIHN0YWdlLAorICAgICAgIHBnX2NvbHVtbl9j b21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBsZW5ndGgoZGF0YSkgQVMg ZGF0YV9sZW5ndGgKK0ZST00gdGVzdF9ndWNfdG9nZ2xlOworICAgIHN0YWdlICAgIHwgY29tcHJl c3Npb24gfCBkYXRhX2xlbmd0aAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyB3aXRoX2V4dF9vbiB8IHBnbHogICAgICAgIHwgICAgICAxMTQwMDAKKygxIHJvdykK KworU0VUIHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBvZmY7CitJTlNFUlQgSU5UTyB0ZXN0 X2d1Y190b2dnbGUgKGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ0RhdGEgY3JlYXRlZCB3aXRo IGV4dGVuZGVkIGhlYWRlciBvZmYuICcsIDMwMDApKTsKKy0tIEJvdGggcm93cyByZWFkYWJsZQor U0VMRUNUIGlkLAorICAgICAgIHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVz c2lvbiwKKyAgICAgICBsZW5ndGgoZGF0YSkgQVMgZGF0YV9sZW5ndGgsCisgICAgICAgbGVmdChk YXRhLCAzOSkgQVMgZGF0YV9wcmVmaXgKK0ZST00gdGVzdF9ndWNfdG9nZ2xlIE9SREVSIEJZIGlk OworIGlkIHwgY29tcHJlc3Npb24gfCBkYXRhX2xlbmd0aCB8ICAgICAgICAgICAgICAgZGF0YV9w cmVmaXgKKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCBwZ2x6ICAgICAgICB8ICAgICAgMTE0MDAw IHwgRGF0YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVyIG9uLiBECisgIDIgfCBwZ2x6ICAg ICAgICB8ICAgICAgMTE3MDAwIHwgRGF0YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVyIG9m Zi4KKygyIHJvd3MpCisKK1NFVCB1c2VfZXh0ZW5kZWRfdG9hc3RfaGVhZGVyID0gb247CitTRUxF Q1QgaWQsIGxlbmd0aChkYXRhKSBBUyBkYXRhX2xlbmd0aCBGUk9NIHRlc3RfZ3VjX3RvZ2dsZSBP UkRFUiBCWSBpZDsKKyBpZCB8IGRhdGFfbGVuZ3RoCistLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8 ICAgICAgMTE0MDAwCisgIDIgfCAgICAgIDExNzAwMAorKDIgcm93cykKKworLS0KKy0tIENsZWFu dXAKKy0tCitEUk9QIFRBQkxFIHRlc3RfenN0ZF9iYXNpYzsKK0RST1AgVEFCTEUgdGVzdF9wZ2x6 X2V4dGVuZGVkOworRFJPUCBUQUJMRSB0ZXN0X2ludGVncml0eTsKK0RST1AgVEFCTEUgdGVzdF9w Z2x6X2ludGVncml0eTsKK0RST1AgVEFCTEUgdGVzdF96c3RkX2ludGVncml0eTsKK0RST1AgVEFC TEUgdGVzdF9jbHVzdGVyX3pzdGQ7CitEUk9QIFRBQkxFIHRlc3RfZ3VjX3RvZ2dsZTsKK0RST1Ag RVhURU5TSU9OIHRlc3RfdG9hc3RfZXh0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3RvYXN0X2V4dC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9l eHQvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYx YzA3ZWExOTEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0 X2V4dC9tZXNvbi5idWlsZApAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoYykgMjAyMi0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3RvYXN0X2V4 dF9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3RvYXN0X2V4dC5jJywKKykKKworaWYgaG9zdF9z eXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfdG9hc3RfZXh0X3NvdXJjZXMgKz0gcmNfbGliX2dl bi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0 X3RvYXN0X2V4dCcsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF90b2FzdF9leHQgLSB0ZXN0IGNv ZGUgZm9yIGV4dGVuZGVkIFRPQVNUIGhlYWRlcnMnLF0pCitlbmRpZgorCit0ZXN0X3RvYXN0X2V4 dCA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfdG9hc3RfZXh0JywKKyAgdGVzdF90b2FzdF9leHRfc291 cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMg Kz0gdGVzdF90b2FzdF9leHQKKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0 X3RvYXN0X2V4dC5jb250cm9sJywKKyAgJ3Rlc3RfdG9hc3RfZXh0LS0xLjAuc3FsJywKKykKKwor dGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3RvYXN0X2V4dCcsCisgICdzZCc6IG1lc29uLmN1 cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAor ICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3RfdG9hc3RfZXh0JywKKyAg ICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4 dC9zcWwvdGVzdF90b2FzdF9leHQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4 dC9zcWwvdGVzdF90b2FzdF9leHQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5hNjZmNDAwNzg5MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF90b2FzdF9leHQvc3FsL3Rlc3RfdG9hc3RfZXh0LnNxbApAQCAtMCwwICsxLDE2OSBAQAor LS0KKy0tIFRlc3RzIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXIgc3RydWN0dXJlcyBhbmQgenN0 ZCBjb21wcmVzc2lvbgorLS0KKworQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X3RvYXN0X2V4dDsKKwor LS0KKy0tIENvbXBpbGUtdGltZSB2YWxpZGF0aW9uIHRlc3RzIChhbHdheXMgcnVuKQorLS0KKwor LS0gVmVyaWZ5IHN0cnVjdHVyZSBzaXplcyBtYXRjaCBleHBlY3RlZCB2YWx1ZXMgKGNhdGNoZXMg QUJJIGlzc3VlcykKK1NFTEVDVCB0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXplcygpOworCistLSBW ZXJpZnkgZmxhZyB2YWxpZGF0aW9uIG1hY3JvcyB3b3JrIGNvcnJlY3RseQorU0VMRUNUIHRlc3Rf dG9hc3RfZmxhZ192YWxpZGF0aW9uKCk7CisKKy0tIFZlcmlmeSBjb21wcmVzc2lvbiBJRCBjb25z dGFudHMgYXJlIGNvbnNpc3RlbnQKK1NFTEVDVCB0ZXN0X3RvYXN0X2NvbXByZXNzaW9uX2lkcygp OworCistLQorLS0gRnVuY3Rpb25hbCB0ZXN0cyBmb3IgenN0ZCBUT0FTVCBjb21wcmVzc2lvbgor LS0gVGhlc2UgdGVzdHMgcmVxdWlyZSBQb3N0Z3JlU1FMIGJ1aWx0IHdpdGggVVNFX1pTVEQKKy0t CisKK1NFTEVDVCBOT1QoZW51bXZhbHMgQD4gJ3t6c3RkfScpIEFTIHNraXBfdGVzdCBGUk9NIHBn X3NldHRpbmdzIFdIRVJFCisgIG5hbWUgPSAnZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbicgXGdz ZXQKK1xpZiA6c2tpcF90ZXN0CisgICBcZWNobyAnKioqIHNraXBwaW5nIFRPQVNUIHRlc3RzIHdp dGggenN0ZCAobm90IHN1cHBvcnRlZCkgKioqJworICAgXHF1aXQKK1xlbmRpZgorCistLSBUZXN0 IGJhc2ljIHpzdGQgY29tcHJlc3Npb24gcm91bmQtdHJpcAorQ1JFQVRFIFRBQkxFIHRlc3RfenN0 ZF9iYXNpYyAoaWQgc2VyaWFsLCBkYXRhIHRleHQgQ09NUFJFU1NJT04genN0ZCk7CitJTlNFUlQg SU5UTyB0ZXN0X3pzdGRfYmFzaWMgKGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ1Bvc3RncmVT UUwgenN0ZCBUT0FTVCBjb21wcmVzc2lvbiB0ZXN0LiAnLCAzMDAwKSk7CisKKy0tIFZlcmlmeSBj b21wcmVzc2lvbiBhbmQgcmVhZGJhY2sKK1NFTEVDVCBpZCwKKyAgICAgICBwZ19jb2x1bW5fY29t cHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRh dGFfbGVuZ3RoLAorICAgICAgIGxlZnQoZGF0YSwgNDIpIEFTIGRhdGFfcHJlZml4CitGUk9NIHRl c3RfenN0ZF9iYXNpYzsKKworLS0gVGVzdCBzbGljZSBhY2Nlc3MgKHBhcnRpYWwgZGVjb21wcmVz c2lvbikKK1NFTEVDVCBpZCwgc3Vic3RyKGRhdGEsIDEwMCwgNDIpIEFTIHNsaWNlIEZST00gdGVz dF96c3RkX2Jhc2ljOworCistLSBUZXN0IFVQREFURSB3aXRoIHpzdGQgY29tcHJlc3NlZCBkYXRh CitVUERBVEUgdGVzdF96c3RkX2Jhc2ljIFNFVCBkYXRhID0gcmVwZWF0KCdVcGRhdGVkIHpzdGQg ZGF0YSBmb3IgVE9BU1QgdGVzdC4gJywgMzAwMCk7CitTRUxFQ1QgaWQsCisgICAgICAgcGdfY29s dW1uX2NvbXByZXNzaW9uKGRhdGEpIEFTIGNvbXByZXNzaW9uLAorICAgICAgIGxlbmd0aChkYXRh KSBBUyBkYXRhX2xlbmd0aCwKKyAgICAgICBsZWZ0KGRhdGEsIDM1KSBBUyBkYXRhX3ByZWZpeAor RlJPTSB0ZXN0X3pzdGRfYmFzaWM7CisKKy0tCistLSBUZXN0IGV4dGVuZGVkIGhlYWRlciBmb3Jt YXQgd2l0aCBsZWdhY3kgY29tcHJlc3Npb24gbWV0aG9kcworLS0KKworLS0gV2hlbiB1c2VfZXh0 ZW5kZWRfdG9hc3RfaGVhZGVyIGlzIG9uLCBwZ2x6L2x6NCB1c2UgdGhlIDIwLWJ5dGUgZm9ybWF0 CitTRVQgdXNlX2V4dGVuZGVkX3RvYXN0X2hlYWRlciA9IG9uOworCitDUkVBVEUgVEFCTEUgdGVz dF9wZ2x6X2V4dGVuZGVkIChkYXRhIHRleHQgQ09NUFJFU1NJT04gcGdseik7CitJTlNFUlQgSU5U TyB0ZXN0X3BnbHpfZXh0ZW5kZWQgKGRhdGEpCisgICAgVkFMVUVTIChyZXBlYXQoJ1BHTFogd2l0 aCBleHRlbmRlZCBoZWFkZXIgZm9ybWF0LiAnLCAzMDAwKSk7CisKK1NFTEVDVCBwZ19jb2x1bW5f Y29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisgICAgICAgbGVuZ3RoKGRhdGEpIEFT IGRhdGFfbGVuZ3RoCitGUk9NIHRlc3RfcGdsel9leHRlbmRlZDsKKworLS0gVmVyaWZ5IHNsaWNl IGFjY2VzcyB3b3JrcyB3aXRoIGV4dGVuZGVkIGZvcm1hdAorU0VMRUNUIHN1YnN0cihkYXRhLCA1 MCwgMzQpIEFTIHNsaWNlIEZST00gdGVzdF9wZ2x6X2V4dGVuZGVkOworCistLQorLS0gVGVzdCBk YXRhIGludGVncml0eSBhY3Jvc3MgY29tcHJlc3Npb24gbWV0aG9kcworLS0KKworQ1JFQVRFIFRB QkxFIHRlc3RfaW50ZWdyaXR5ICgKKyAgICBtZXRob2QgdGV4dCwKKyAgICBvcmlnaW5hbF9kYXRh IHRleHQsCisgICAgY29tcHJlc3NlZF9kYXRhIHRleHQKKyk7CisKKy0tIFN0b3JlIHRlc3QgZGF0 YSB3aXRoIGVhY2ggbWV0aG9kCitJTlNFUlQgSU5UTyB0ZXN0X2ludGVncml0eSBWQUxVRVMKKyAg ICAoJ3BnbHonLCByZXBlYXQoJ0ludGVncml0eSB0ZXN0IGRhdGEgcGF0dGVybi4gJywgMjAwMCks IE5VTEwpLAorICAgICgnenN0ZCcsIHJlcGVhdCgnSW50ZWdyaXR5IHRlc3QgZGF0YSBwYXR0ZXJu LiAnLCAyMDAwKSwgTlVMTCk7CisKKy0tIENyZWF0ZSBjb21wcmVzc2VkIHZlcnNpb25zCitDUkVB VEUgVEFCTEUgdGVzdF9wZ2x6X2ludGVncml0eSAoZGF0YSB0ZXh0IENPTVBSRVNTSU9OIHBnbHop OworQ1JFQVRFIFRBQkxFIHRlc3RfenN0ZF9pbnRlZ3JpdHkgKGRhdGEgdGV4dCBDT01QUkVTU0lP TiB6c3RkKTsKKworSU5TRVJUIElOVE8gdGVzdF9wZ2x6X2ludGVncml0eSBTRUxFQ1Qgb3JpZ2lu YWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5IFdIRVJFIG1ldGhvZCA9ICdwZ2x6JzsKK0lOU0VS VCBJTlRPIHRlc3RfenN0ZF9pbnRlZ3JpdHkgU0VMRUNUIG9yaWdpbmFsX2RhdGEgRlJPTSB0ZXN0 X2ludGVncml0eSBXSEVSRSBtZXRob2QgPSAnenN0ZCc7CisKKy0tIFZlcmlmeSBjaGVja3N1bXMg bWF0Y2gKK1NFTEVDVCAncGdseicgQVMgbWV0aG9kLAorICAgICAgIG1kNSgoU0VMRUNUIG9yaWdp bmFsX2RhdGEgRlJPTSB0ZXN0X2ludGVncml0eSBXSEVSRSBtZXRob2QgPSAncGdseicpKSA9Cisg ICAgICAgbWQ1KChTRUxFQ1QgZGF0YSBGUk9NIHRlc3RfcGdsel9pbnRlZ3JpdHkpKSBBUyBjaGVj a3N1bV9tYXRjaDsKKworU0VMRUNUICd6c3RkJyBBUyBtZXRob2QsCisgICAgICAgbWQ1KChTRUxF Q1Qgb3JpZ2luYWxfZGF0YSBGUk9NIHRlc3RfaW50ZWdyaXR5IFdIRVJFIG1ldGhvZCA9ICd6c3Rk JykpID0KKyAgICAgICBtZDUoKFNFTEVDVCBkYXRhIEZST00gdGVzdF96c3RkX2ludGVncml0eSkp IEFTIGNoZWNrc3VtX21hdGNoOworCistLQorLS0gVGVzdCB0YWJsZSByZXdyaXRlIG9wZXJhdGlv bnMgKENMVVNURVIsIFZBQ1VVTSBGVUxMKQorLS0KKworQ1JFQVRFIFRBQkxFIHRlc3RfY2x1c3Rl cl96c3RkIChpZCBzZXJpYWwgUFJJTUFSWSBLRVksIGRhdGEgdGV4dCBDT01QUkVTU0lPTiB6c3Rk KTsKK0lOU0VSVCBJTlRPIHRlc3RfY2x1c3Rlcl96c3RkIChkYXRhKQorICAgIFZBTFVFUyAocmVw ZWF0KCdEYXRhIGZvciBDTFVTVEVSIHRlc3Qgd2l0aCB6c3RkIGNvbXByZXNzaW9uLiAnLCAyNTAw KSk7CisKKy0tIENhcHR1cmUgb3JpZ2luYWwgZGF0YSBoYXNoCitTRUxFQ1QgJ2JlZm9yZV9jbHVz dGVyJyBBUyBzdGFnZSwgbWQ1KGRhdGEpIEFTIGhhc2ggRlJPTSB0ZXN0X2NsdXN0ZXJfenN0ZDsK KworQ0xVU1RFUiB0ZXN0X2NsdXN0ZXJfenN0ZCBVU0lORyB0ZXN0X2NsdXN0ZXJfenN0ZF9wa2V5 OworCitTRUxFQ1QgJ2FmdGVyX2NsdXN0ZXInIEFTIHN0YWdlLAorICAgICAgIHBnX2NvbHVtbl9j b21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBtZDUoZGF0YSkgQVMgaGFz aAorRlJPTSB0ZXN0X2NsdXN0ZXJfenN0ZDsKKworVkFDVVVNIEZVTEwgdGVzdF9jbHVzdGVyX3pz dGQ7CisKK1NFTEVDVCAnYWZ0ZXJfdmFjdXVtX2Z1bGwnIEFTIHN0YWdlLAorICAgICAgIHBnX2Nv bHVtbl9jb21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBtZDUoZGF0YSkg QVMgaGFzaAorRlJPTSB0ZXN0X2NsdXN0ZXJfenN0ZDsKKworLS0KKy0tIFRlc3QgbWl4ZWQgZm9y bWF0IGRhdGEgKEdVQyB0b2dnbGluZykKKy0tCisKK1NFVCB1c2VfZXh0ZW5kZWRfdG9hc3RfaGVh ZGVyID0gb247CitDUkVBVEUgVEFCTEUgdGVzdF9ndWNfdG9nZ2xlIChpZCBzZXJpYWwsIGRhdGEg dGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKK0lOU0VSVCBJTlRPIHRlc3RfZ3VjX3RvZ2dsZSAoZGF0 YSkKKyAgICBWQUxVRVMgKHJlcGVhdCgnRGF0YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQgaGVhZGVy IG9uLiAnLCAzMDAwKSk7CisKK1NFTEVDVCAnd2l0aF9leHRfb24nIEFTIHN0YWdlLAorICAgICAg IHBnX2NvbHVtbl9jb21wcmVzc2lvbihkYXRhKSBBUyBjb21wcmVzc2lvbiwKKyAgICAgICBsZW5n dGgoZGF0YSkgQVMgZGF0YV9sZW5ndGgKK0ZST00gdGVzdF9ndWNfdG9nZ2xlOworCitTRVQgdXNl X2V4dGVuZGVkX3RvYXN0X2hlYWRlciA9IG9mZjsKK0lOU0VSVCBJTlRPIHRlc3RfZ3VjX3RvZ2ds ZSAoZGF0YSkKKyAgICBWQUxVRVMgKHJlcGVhdCgnRGF0YSBjcmVhdGVkIHdpdGggZXh0ZW5kZWQg aGVhZGVyIG9mZi4gJywgMzAwMCkpOworCistLSBCb3RoIHJvd3MgcmVhZGFibGUKK1NFTEVDVCBp ZCwKKyAgICAgICBwZ19jb2x1bW5fY29tcHJlc3Npb24oZGF0YSkgQVMgY29tcHJlc3Npb24sCisg ICAgICAgbGVuZ3RoKGRhdGEpIEFTIGRhdGFfbGVuZ3RoLAorICAgICAgIGxlZnQoZGF0YSwgMzkp IEFTIGRhdGFfcHJlZml4CitGUk9NIHRlc3RfZ3VjX3RvZ2dsZSBPUkRFUiBCWSBpZDsKKworU0VU IHVzZV9leHRlbmRlZF90b2FzdF9oZWFkZXIgPSBvbjsKK1NFTEVDVCBpZCwgbGVuZ3RoKGRhdGEp IEFTIGRhdGFfbGVuZ3RoIEZST00gdGVzdF9ndWNfdG9nZ2xlIE9SREVSIEJZIGlkOworCistLQor LS0gQ2xlYW51cAorLS0KKworRFJPUCBUQUJMRSB0ZXN0X3pzdGRfYmFzaWM7CitEUk9QIFRBQkxF IHRlc3RfcGdsel9leHRlbmRlZDsKK0RST1AgVEFCTEUgdGVzdF9pbnRlZ3JpdHk7CitEUk9QIFRB QkxFIHRlc3RfcGdsel9pbnRlZ3JpdHk7CitEUk9QIFRBQkxFIHRlc3RfenN0ZF9pbnRlZ3JpdHk7 CitEUk9QIFRBQkxFIHRlc3RfY2x1c3Rlcl96c3RkOworRFJPUCBUQUJMRSB0ZXN0X2d1Y190b2dn bGU7CisKK0RST1AgRVhURU5TSU9OIHRlc3RfdG9hc3RfZXh0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC0tMS4wLnNxbCBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQtLTEuMC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFkYTdjMTkxNmMzCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC0t MS4wLnNxbApAQCAtMCwwICsxLDE5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3Rf ZXh0L3Rlc3RfdG9hc3RfZXh0LS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBp cyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNo byBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF90b2FzdF9leHQiIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gdGVzdF90b2FzdF9zdHJ1Y3R1cmVfc2l6ZXMoKQor UkVUVVJOUyB0ZXh0CitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K0NSRUFURSBGVU5DVElPTiB0ZXN0X3RvYXN0X2ZsYWdfdmFsaWRhdGlvbigpCitSRVRVUk5TIHRl eHQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZV TkNUSU9OIHRlc3RfdG9hc3RfY29tcHJlc3Npb25faWRzKCkKK1JFVFVSTlMgdGV4dAorQVMgJ01P RFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3RvYXN0X2V4dC90ZXN0X3RvYXN0X2V4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44MjUxZTg5Y2I1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQuYwpAQCAtMCwwICsxLDIwMCBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF90b2FzdF9leHQuYworICoJCVRlc3Qg bW9kdWxlIGZvciBleHRlbmRlZCBUT0FTVCBoZWFkZXIgc3RydWN0dXJlcyBhbmQgenN0ZCBjb21w cmVzc2lvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL2RldG9hc3Qu aCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInZhcmF0dC5oIgorCitQR19NT0RVTEVfTUFHSUM7CisK Ky8qCisgKiBUZXN0IHN0cnVjdHVyZSBzaXplcyBmb3IgZXh0ZW5kZWQgVE9BU1QgcG9pbnRlcnMK KyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXplcyk7CisK K0RhdHVtCit0ZXN0X3RvYXN0X3N0cnVjdHVyZV9zaXplcyhQR19GVU5DVElPTl9BUkdTKQorewor CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlib29sCQlhbGxfcGFzc2VkID0gdHJ1ZTsKKworCWluaXRT dHJpbmdJbmZvKCZidWYpOworCisJLyogVGVzdCBzdGFuZGFyZCBzdHJ1Y3R1cmUgc2l6ZSAqLwor CWlmIChzaXplb2YodmFyYXR0X2V4dGVybmFsKSAhPSAxNikKKwl7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIkZBSUw6IHZhcmF0dF9leHRlcm5hbCBpcyAlenUgYnl0ZXMsIGV4cGVjdGVkIDE2 XG4iLAorCQkJCQkJIHNpemVvZih2YXJhdHRfZXh0ZXJuYWwpKTsKKwkJYWxsX3Bhc3NlZCA9IGZh bHNlOworCX0KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIlBBU1M6IHZhcmF0dF9l eHRlcm5hbCBpcyAxNiBieXRlc1xuIik7CisKKwkvKiBUZXN0IGV4dGVuZGVkIHN0cnVjdHVyZSBz aXplICovCisJaWYgKHNpemVvZih2YXJhdHRfZXh0ZXJuYWxfZXh0ZW5kZWQpICE9IDIwKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVk IGlzICV6dSBieXRlcywgZXhwZWN0ZWQgMjBcbiIsCisJCQkJCQkgc2l6ZW9mKHZhcmF0dF9leHRl cm5hbF9leHRlbmRlZCkpOworCQlhbGxfcGFzc2VkID0gZmFsc2U7CisJfQorCWVsc2UKKwkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiUEFTUzogdmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkIGlzIDIw IGJ5dGVzXG4iKTsKKworCS8qIFRlc3QgVE9BU1QgcG9pbnRlciBzaXplcyAqLworCWlmIChUT0FT VF9QT0lOVEVSX1NJWkUgIT0gMTgpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJGQUlM OiBUT0FTVF9QT0lOVEVSX1NJWkUgaXMgJXp1LCBleHBlY3RlZCAxOFxuIiwKKwkJCQkJCSAoU2l6 ZSkgVE9BU1RfUE9JTlRFUl9TSVpFKTsKKwkJYWxsX3Bhc3NlZCA9IGZhbHNlOworCX0KKwllbHNl CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIlBBU1M6IFRPQVNUX1BPSU5URVJfU0laRSBpcyAx OCBieXRlc1xuIik7CisKKwlpZiAoVE9BU1RfUE9JTlRFUl9TSVpFX0VYVEVOREVEICE9IDIyKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogVE9BU1RfUE9JTlRFUl9TSVpFX0VY VEVOREVEIGlzICV6dSwgZXhwZWN0ZWQgMjJcbiIsCisJCQkJCQkgKFNpemUpIFRPQVNUX1BPSU5U RVJfU0laRV9FWFRFTkRFRCk7CisJCWFsbF9wYXNzZWQgPSBmYWxzZTsKKwl9CisJZWxzZQorCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICJQQVNTOiBUT0FTVF9QT0lOVEVSX1NJWkVfRVhURU5ERUQg aXMgMjIgYnl0ZXNcbiIpOworCisJLyogVGVzdCBmaWVsZCBvZmZzZXRzICovCisJaWYgKG9mZnNl dG9mKHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCwgdmFfcmF3c2l6ZSkgIT0gMCkKKwkJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiRkFJTDogdmFfcmF3c2l6ZSBvZmZzZXRcbiIpLCBhbGxfcGFzc2Vk ID0gZmFsc2U7CisJaWYgKG9mZnNldG9mKHZhcmF0dF9leHRlcm5hbF9leHRlbmRlZCwgdmFfZXh0 aW5mbykgIT0gNCkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogdmFfZXh0aW5mbyBv ZmZzZXRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJaWYgKG9mZnNldG9mKHZhcmF0dF9leHRl cm5hbF9leHRlbmRlZCwgdmFfZmxhZ3MpICE9IDgpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1Ziwg IkZBSUw6IHZhX2ZsYWdzIG9mZnNldFxuIiksIGFsbF9wYXNzZWQgPSBmYWxzZTsKKwlpZiAob2Zm c2V0b2YodmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkLCB2YV9kYXRhKSAhPSA5KQorCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICJGQUlMOiB2YV9kYXRhIG9mZnNldFxuIiksIGFsbF9wYXNzZWQgPSBm YWxzZTsKKwlpZiAob2Zmc2V0b2YodmFyYXR0X2V4dGVybmFsX2V4dGVuZGVkLCB2YV92YWx1ZWlk KSAhPSAxMikKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogdmFfdmFsdWVpZCBvZmZz ZXRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJaWYgKG9mZnNldG9mKHZhcmF0dF9leHRlcm5h bF9leHRlbmRlZCwgdmFfdG9hc3RyZWxpZCkgIT0gMTYpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIkZBSUw6IHZhX3RvYXN0cmVsaWQgb2Zmc2V0XG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOwor CWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiUEFTUzogQWxsIGZpZWxkIG9mZnNldHMg Y29ycmVjdCAobm8gcGFkZGluZylcbiIpOworCisJaWYgKGFsbF9wYXNzZWQpCisJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwgIlxuUmVzdWx0OiBBTEwgVEVTVFMgUEFTU0VEXG4iKTsKKwllbHNlCisJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIlxuUmVzdWx0OiBTT01FIFRFU1RTIEZBSUxFRFxuIik7 CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChidWYuZGF0YSkpOworfQorCisv KgorICogVGVzdCBmbGFnIHZhbGlkYXRpb24gbWFjcm9zCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9f VjEodGVzdF90b2FzdF9mbGFnX3ZhbGlkYXRpb24pOworCitEYXR1bQordGVzdF90b2FzdF9mbGFn X3ZhbGlkYXRpb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJ Ym9vbAkJYWxsX3Bhc3NlZCA9IHRydWU7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCS8q IFRlc3QgdmFsaWQgZmxhZ3MgKi8KKwlpZiAoIUV4dGVuZGVkRmxhZ3NBcmVWYWxpZCgweDAwKSkK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogZmxhZ3MgMHgwMCBzaG91bGQgYmUgdmFs aWRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJaWYgKCFFeHRlbmRlZEZsYWdzQXJlVmFsaWQo MHgwMSkpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkZBSUw6IGZsYWdzIDB4MDEgc2hvdWxk IGJlIHZhbGlkXG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWlmICghRXh0ZW5kZWRGbGFnc0Fy ZVZhbGlkKDB4MDIpKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJGQUlMOiBmbGFncyAweDAy IHNob3VsZCBiZSB2YWxpZFxuIiksIGFsbF9wYXNzZWQgPSBmYWxzZTsKKwlpZiAoIUV4dGVuZGVk RmxhZ3NBcmVWYWxpZCgweDAzKSkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogZmxh Z3MgMHgwMyBzaG91bGQgYmUgdmFsaWRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJZWxzZQor CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJQQVNTOiBWYWxpZCBmbGFncyAoMHgwMC0weDAzKSBh Y2NlcHRlZFxuIik7CisKKwkvKiBUZXN0IGludmFsaWQgZmxhZ3MgKi8KKwlpZiAoRXh0ZW5kZWRG bGFnc0FyZVZhbGlkKDB4MDQpKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJGQUlMOiBmbGFn cyAweDA0IHNob3VsZCBiZSBpbnZhbGlkXG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWlmIChF eHRlbmRlZEZsYWdzQXJlVmFsaWQoMHgwOCkpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkZB SUw6IGZsYWdzIDB4MDggc2hvdWxkIGJlIGludmFsaWRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7 CisJaWYgKEV4dGVuZGVkRmxhZ3NBcmVWYWxpZCgweEZGKSkKKwkJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAiRkFJTDogZmxhZ3MgMHhGRiBzaG91bGQgYmUgaW52YWxpZFxuIiksIGFsbF9wYXNzZWQg PSBmYWxzZTsKKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIlBBU1M6IEludmFsaWQg ZmxhZ3MgKDB4MDQrKSByZWplY3RlZFxuIik7CisKKwkvKiBUZXN0IGNvbXByZXNzaW9uIG1ldGhv ZCB2YWxpZGF0aW9uICovCisJaWYgKCFFeHRlbmRlZENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZCgw KSkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogbWV0aG9kIDAgc2hvdWxkIGJlIHZh bGlkXG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWlmICghRXh0ZW5kZWRDb21wcmVzc2lvbk1l dGhvZElzVmFsaWQoMjU1KSkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogbWV0aG9k IDI1NSBzaG91bGQgYmUgdmFsaWRcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJZWxzZQorCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICJQQVNTOiBDb21wcmVzc2lvbiBtZXRob2RzIDAtMjU1IHZh bGlkXG4iKTsKKworCS8qIFRlc3QgY29tcHJlc3Npb24gbWV0aG9kIElEcyAqLworCWlmIChUT0FT VF9QR0xaX0VYVF9NRVRIT0QgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDog VE9BU1RfUEdMWl9FWFRfTUVUSE9EIHNob3VsZCBiZSAwXG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNl OworCWlmIChUT0FTVF9MWjRfRVhUX01FVEhPRCAhPSAxKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICJGQUlMOiBUT0FTVF9MWjRfRVhUX01FVEhPRCBzaG91bGQgYmUgMVxuIiksIGFsbF9wYXNz ZWQgPSBmYWxzZTsKKwlpZiAoVE9BU1RfWlNURF9FWFRfTUVUSE9EICE9IDIpCisJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwgIkZBSUw6IFRPQVNUX1pTVERfRVhUX01FVEhPRCBzaG91bGQgYmUgMlxu IiksIGFsbF9wYXNzZWQgPSBmYWxzZTsKKwlpZiAoVE9BU1RfVU5DT01QUkVTU0VEX0VYVF9NRVRI T0QgIT0gMykKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogVE9BU1RfVU5DT01QUkVT U0VEX0VYVF9NRVRIT0Qgc2hvdWxkIGJlIDNcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJZWxz ZQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJQQVNTOiBDb21wcmVzc2lvbiBtZXRob2QgSURz IGNvcnJlY3RcbiIpOworCisJaWYgKGFsbF9wYXNzZWQpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIlxuUmVzdWx0OiBBTEwgVEVTVFMgUEFTU0VEXG4iKTsKKwllbHNlCisJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIlxuUmVzdWx0OiBTT01FIFRFU1RTIEZBSUxFRFxuIik7CisKKwlQR19SRVRV Uk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChidWYuZGF0YSkpOworfQorCisvKgorICogVGVzdCBj b21wcmVzc2lvbiBJRCBjb25zdGFudHMKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3Rv YXN0X2NvbXByZXNzaW9uX2lkcyk7CisKK0RhdHVtCit0ZXN0X3RvYXN0X2NvbXByZXNzaW9uX2lk cyhQR19GVU5DVElPTl9BUkdTKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlib29sCQlhbGxf cGFzc2VkID0gdHJ1ZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJLyogU3RhbmRhcmQg Y29tcHJlc3Npb24gSURzICovCisJaWYgKFRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQgIT0gMCkK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9J RCAhPSAwXG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWlmIChUT0FTVF9MWjRfQ09NUFJFU1NJ T05fSUQgIT0gMSkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogVE9BU1RfTFo0X0NP TVBSRVNTSU9OX0lEICE9IDFcbiIpLCBhbGxfcGFzc2VkID0gZmFsc2U7CisJaWYgKFRPQVNUX0lO VkFMSURfQ09NUFJFU1NJT05fSUQgIT0gMikKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJ TDogVE9BU1RfSU5WQUxJRF9DT01QUkVTU0lPTl9JRCAhPSAyXG4iKSwgYWxsX3Bhc3NlZCA9IGZh bHNlOworCWlmIChUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRCAhPSAzKQorCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICJGQUlMOiBUT0FTVF9FWFRFTkRFRF9DT01QUkVTU0lPTl9JRCAhPSAz XG4iKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVm LCAiUEFTUzogU3RhbmRhcmQgY29tcHJlc3Npb24gSURzIGNvcnJlY3QgKDAsMSwyLDMpXG4iKTsK KworCS8qIEV4dGVuZGVkIGNvbXByZXNzaW9uIElEcyBtYXRjaCBzdGFuZGFyZCB3aGVyZSBhcHBs aWNhYmxlICovCisJaWYgKFRPQVNUX1BHTFpfRVhUX01FVEhPRCAhPSBUT0FTVF9QR0xaX0NPTVBS RVNTSU9OX0lEKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJGQUlMOiBQR0xaIElEcyBkb24n dCBtYXRjaCAoc3RhbmRhcmQ9JWQsIGV4dGVuZGVkPSVkKVxuIiwKKwkJCQkJCSBUT0FTVF9QR0xa X0NPTVBSRVNTSU9OX0lELCBUT0FTVF9QR0xaX0VYVF9NRVRIT0QpLCBhbGxfcGFzc2VkID0gZmFs c2U7CisJaWYgKFRPQVNUX0xaNF9FWFRfTUVUSE9EICE9IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9J RCkKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRkFJTDogTFo0IElEcyBkb24ndCBtYXRjaCAo c3RhbmRhcmQ9JWQsIGV4dGVuZGVkPSVkKVxuIiwKKwkJCQkJCSBUT0FTVF9MWjRfQ09NUFJFU1NJ T05fSUQsIFRPQVNUX0xaNF9FWFRfTUVUSE9EKSwgYWxsX3Bhc3NlZCA9IGZhbHNlOworCWVsc2UK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiUEFTUzogUEdMWi9MWjQgSURzIGNvbnNpc3RlbnQg YmV0d2VlbiBmb3JtYXRzXG4iKTsKKworCWlmIChhbGxfcGFzc2VkKQorCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJcblJlc3VsdDogQUxMIFRFU1RTIFBBU1NFRFxuIik7CisJZWxzZQorCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJcblJlc3VsdDogU09NRSBURVNUUyBGQUlMRURcbiIpOworCisJ UEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoYnVmLmRhdGEpKTsKK30KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQuY29udHJv bCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF90b2FzdF9leHQvdGVzdF90b2FzdF9leHQuY29udHJv bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDU5ZWUxNGFkNjQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfdG9hc3RfZXh0L3Rlc3RfdG9h c3RfZXh0LmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHRlc3RfdG9hc3RfZXh0IGV4dGVuc2lv bgorY29tbWVudCA9ICdUZXN0IG1vZHVsZSBmb3IgZXh0ZW5kZWQgVE9BU1QgaGVhZGVycyBhbmQg enN0ZCBjb21wcmVzc2lvbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5h bWUgPSAnJGxpYmRpci90ZXN0X3RvYXN0X2V4dCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi4z OS4zIChBcHBsZSBHaXQtMTQ2KQoK --0000000000007a4fcf0645d8c026--