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 1w0Oja-001sDO-25 for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 18:56:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0OjZ-00BMXw-07 for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 18:56:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0OjY-00BMXo-1x for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 18:56:41 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0OjV-00000002BKs-3Q92 for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 18:56:39 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b93698bb57aso52877966b.0 for ; Wed, 11 Mar 2026 11:56:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773255391; cv=none; d=google.com; s=arc-20240605; b=gQoNS50HCfCaoASXODWxGDbTP0u9uNlkNBuYy4DS9P8BC7o9tYwQdnXDFpppaMXIlT q3/jSy4Upm+Vrw+os8qyL+eG8PIqkfEoQFA/SPMvBOPuLN3QEyiB7jqwRtpemimSuRgL 3MA/eW4qhYCzquPMhKQ589DVJHQ7hU5qsCVuvfqUU+bPMgTrIk2zcDbB0kyDXCSAoV2r PoYucvz+VtgB2ls3lggRmktGlQXdxMj4N2WypjnNt2qQzrv9ND7z2SxlEkeEIGzQGdsE hyh7EhfalzZYlYRScRint7O5J2isDhYbWqLyA9V8273uCYKjUDUQPM2bl2iphh6BDdD/ 65bw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=bQm1IyY2zME8SmlmzxbdQhkqljhPmKdGMLfX0GPPPu4=; fh=bbYlSNUcRiGm1PCddCR7mzlE2nAYMuOk66x3biufMPI=; b=X86KFGJlcaHWEhJVUcl7JJywn+oWUs1CDIMDwIV36a+DSIhbs1nBcSZ4vVpfiTyj/c A5i9dq8sOEEfP0MeaQeTNW99wBrlnj0WOZILLJ0kA4sybCDdv6mTmZl8a/yu9PinHKgj GQ1d3rBoBF3F7lAZq0kOiF5xYWgD7oxPMv1zXgWSSyJlnzi8HkNcZrFPwzNl49obrxdh U8qgIY9CMLIt/WQien0TG9r1JJQgp7Zbu7vW4DIrjcnajDGpyIloytBuiSU+aFs3cMHW cogPD+Wn2hOGb0Jwc7yw+cXb/k8VETJKmtdjp/OTun8H9h6pb5AG+MDS4PPJ2oNwgavF Fgiw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1773255391; x=1773860191; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bQm1IyY2zME8SmlmzxbdQhkqljhPmKdGMLfX0GPPPu4=; b=HeMxjjiaVOWwAn86aBJ4SXpHi/+pm73/3hQjPXWO+xgV+vdh6BgJ1I+zgkMhwAGLRo pRk2EGHbAPzJFtOkRhbgO07odg+d3bF1++zIc20UXGNf/fIznPM/D15lkgz0AnWxrKNf S4P96oV2sBvJERVfEctYkekrmUoiwjGCEDs57ThVI0thnAklDPdiMSvS4oUZCA/hrXpe 7sdByu7Vl+iRGTDnr41tlRihZUYQAFIa7xD8kPJ4idJBfkgqN2I3YAVbXK56I9JnYfHD uu85MBtDbgwx1pcPjtrwv3bdadcDz9vomRA7MvwidgN/nP3MLvbliNqr933JTvjtuaut IGeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773255391; x=1773860191; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bQm1IyY2zME8SmlmzxbdQhkqljhPmKdGMLfX0GPPPu4=; b=nhJs2ssFNyKw26r/Fiq37uLJiS2Rhofcwe9gtCWF5WRixavHV8zJ88IiBpEtT3bDwQ /OE18zGuSnWyXb0aAzFzdzqkGyUpy9HGprofOKzWLVwc2xP/Eq5AfNB51K0/6tlUKLTK +e6w9T/q4RMfc0W8zPPZl/tJ2y4m+1LdfmTTFlPap3VEQcDef3kYKjpG49raSc+QGSsK d1sMH6uqJmQcKDrMKDDA49ZCg2RUn2wpzmqd0XpGHNR0x9ogZ9fIeFO26849F/rSH0lM /JiuJ4bJRtjjTtfWNI6ZtTlU+7fievutN+FPFqhWZjN0+BGn7J3ic4qechGdqL9aL1wL YiQw== X-Forwarded-Encrypted: i=1; AJvYcCWv4FiZXPbdm1OXMLX28JmnWTZi7JhbsWh+JhXS/RKeZ6VxXmASKv6FIO+Z8TXg8el2t3hVQPRSVHz3MciJ@postgresql.org X-Gm-Message-State: AOJu0YzK74ksJE5XSgsMOTybS0blvOh3LMQzYGmzXNMQmD+rNragoMZy D9OR8c/11ZwUUAeNx5J/QHC6yN2kom3jxom6CYUPQbRomdznG2TeJjCBCq49ZtxmY3VMok/JnUE Qgs/vYkr6OP/PM22RVKihZgKi6hODjsMLMctg+9K8 X-Gm-Gg: ATEYQzyt3Db0WyYzhMWb2PQeKZcaFjeGYgxDBfpV7hfq5YtwD13b1kfoXQBWdqIA8i9 r3kCZu5b7mgO1t0MVYNSRwGBKdLyRRicGgUsFeAGvUsbY33Mph90WzbHNUXPfHlsT1XVRiNG2L/ +xdZVHNNjyhTstwcjhsMOOxlkZb+T/Oox+lC/71mtAfHkYaIptNgDd9x3WZRCbOUmxAgHknPYTH PfwZhut6LC+nVU5pzMmnsL5QOZfxFQONMkM+NA7JFegRkWHKXPcWWd8/QezTxyGXxcdRjz4t8KK A47TLzrc1w== X-Received: by 2002:a17:907:7243:b0:b88:5b72:ec39 with SMTP id a640c23a62f3a-b973fc1ec29mr45954366b.5.1773255390755; Wed, 11 Mar 2026 11:56:30 -0700 (PDT) MIME-Version: 1.0 References: <202603040943.2jvgphmddgcs@alvherre.pgsql> In-Reply-To: From: Akshay Joshi Date: Thu, 12 Mar 2026 00:26:17 +0530 X-Gm-Features: AaiRm51HrG6hrrz57j_n71uAulwqh2OUXF8NPA07g6crQk_3pMoO9HzN8HcoVLM Message-ID: Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement To: Zsolt Parragi Cc: Kirill Reshke , Japin Li , Rafia Sabih , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Euler Taveira , Amul Sul , Andrew Dunstan , Chao Li , Quan Zongliang , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000a9c539064cc43114" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a9c539064cc43114 Content-Type: multipart/alternative; boundary="000000000000a9c537064cc43112" --000000000000a9c537064cc43112 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 11, 2026 at 3:35=E2=80=AFAM Zsolt Parragi wrote: > Hello > > Is ruleutils.c the best place for this function? > > It's already huge, and it has a different scope: "Functions to convert > stored expressions/querytrees back to source text" > Created the ddlutils.c file. > > + /* Fetch the value of COLLATION_VERSION */ > + dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database, > + Anum_pg_database_datcollversion, &attr_isnull); > + if (!attr_isnull) > + get_formatted_string(&buf, pretty_flags, 8, "COLLATION_VERSION =3D %s", > + quote_literal_cstr(TextDatumGetCString(dbvalue))); > > pg_dumpall only shows this for binary upgrade, otherwise skips it. Is > it okay for this command to print it by default, shouldn't it depend > on is_with_defaults or something similar? > Shows only when `is_with_defaults` is true. > > +#ifndef DDL_DEFAULTS_H > +#define DDL_DEFAULTS_H > + > +static const struct > +{ > + struct > + { > .... > > This file seems strange. A static const struct in a header with > uppercase names doesn't seem to follow postgres conventions? > DATCONNLIMIT_UNLIMITED alredy exists as a definition, and probably > should be used instead or referenced, or the existing uses should > refer to the new way of defining it. > Removed the header file and implemented an alternative logic. Note that a similar file may be necessary in the future to handle default values for other pg_get__ddl. > > + /* Fetch the value of LC_COLLATE */ > + dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database, > + Anum_pg_database_datcollate, &attr_isnull); > + if (!attr_isnull) > + get_formatted_string(&buf, pretty_flags, 8, "LC_COLLATE =3D %s", > + quote_literal_cstr(TextDatumGetCString(dbvalue))); > + /* Fetch the value of LC_CTYPE */ > + dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database, > + Anum_pg_database_datctype, &attr_isnull); > > Can these be ever nulls? > > Also, pg_dump only emits LOCALE if ctype=3D=3Dcollate, shouldn't this > follow the same pattern? > > + else if (is_with_defaults) > + get_formatted_string(&buf, pretty_flags, 8, "LOCALE_PROVIDER =3D libc")= ; > > Doesn't pg_dump always emit this? Shouldn't this function follow the > same convention? Emitting it seems to be a safer default, in case > postgres ever changes this. > > + /* Build the CREATE DATABASE statement */ > + appendStringInfo(&buf, "CREATE DATABASE %s", > + quote_identifier(dbform->datname.data)); > + get_formatted_string(&buf, pretty_flags, 4, "WITH"); > > Shouldn't we only emit "WITH" if it is actually followed by something, > not unconditionally? > > +/* > + * get_formatted_string > + * > + * Return a formatted version of the string. > > But it's a void function. > > > + else if (!attr_isnull) > + get_formatted_string(&buf, pretty_flags, 8, "LOCALE =3D %s", > + quote_literal_cstr(TextDatumGetCString(dbvalue))); > + > > Can this ever happen, shouldn't it be an assertion instead? > Fixed all the preceding review comments. Attached is the *v15 patch*, now ready for further review. --000000000000a9c537064cc43112 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, Mar 11, 2026= at 3:35=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
Hello

Is ruleutils.c the best place for this function?

It's already huge, and it has a different scope: "Functions to con= vert
stored expressions/querytrees back to source text"

=C2=A0 =C2=A0 Created the ddlutils.c file.=C2=A0

+ /* Fetch the value of COLLATION_VERSION */
+ dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database,
+=C2=A0 =C2=A0Anum_pg_database_datcollversion, &attr_isnull);
+ if (!attr_isnull)
+ get_formatted_string(&buf, pretty_flags, 8, "COLLATION_VERSION = =3D %s",
+ quote_literal_cstr(TextDatumGetCString(dbvalue)));

pg_dumpall only shows this for binary upgrade, otherwise skips it. Is
it okay for this command to print it by default, shouldn't it depend on is_with_defaults or something similar?

=C2=A0 = =C2=A0 Shows only when `is_with_defaults` is true.

+#ifndef DDL_DEFAULTS_H
+#define DDL_DEFAULTS_H
+
+static const struct
+{
+ struct
+ {
....

This file seems strange. A static const struct in a header with
uppercase names doesn't seem to follow postgres conventions?
DATCONNLIMIT_UNLIMITED alredy exists as a definition, and probably
should be used instead or referenced, or the existing uses should
refer to the new way of defining it.

=C2=A0 =C2=A0= Removed the header file and implemented an alternative logic. Note that a = similar file may be necessary in the future to handle default values for ot= her pg_get_<object>_ddl.=C2=A0

+ /* Fetch the value of LC_COLLATE */
+ dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database,
+=C2=A0 =C2=A0Anum_pg_database_datcollate, &attr_isnull);
+ if (!attr_isnull)
+ get_formatted_string(&buf, pretty_flags, 8, "LC_COLLATE =3D %s&q= uot;,
+ quote_literal_cstr(TextDatumGetCString(dbvalue)));
+ /* Fetch the value of LC_CTYPE */
+ dbvalue =3D SysCacheGetAttr(DATABASEOID, tuple_database,
+=C2=A0 =C2=A0Anum_pg_database_datctype, &attr_isnull);

Can these be ever nulls?

Also, pg_dump only emits LOCALE if ctype=3D=3Dcollate, shouldn't this follow the same pattern?

+ else if (is_with_defaults)
+ get_formatted_string(&buf, pretty_flags, 8, "LOCALE_PROVIDER =3D= libc");

Doesn't pg_dump always emit this? Shouldn't this function follow th= e
same convention? Emitting it seems to be a safer default, in case
postgres ever changes this.

+ /* Build the CREATE DATABASE statement */
+ appendStringInfo(&buf, "CREATE DATABASE %s",
+ quote_identifier(dbform->datname.data));
+ get_formatted_string(&buf, pretty_flags, 4, "WITH");

Shouldn't we only emit "WITH" if it is actually followed by s= omething,
not unconditionally?

+/*
+ * get_formatted_string
+ *
+ * Return a formatted version of the string.

But it's a void function.


+ else if (!attr_isnull)
+ get_formatted_string(&buf, pretty_flags, 8, "LOCALE =3D %s"= ,
+ quote_literal_cstr(TextDatumGetCString(dbvalue)));
+

Can this ever happen, shouldn't it be an assertion instead?

=C2=A0Fixed all the preceding review comments.
=C2=A0Attac= hed is the=C2=A0v15 patch, now ready for further review.
=C2=A0
--000000000000a9c537064cc43112-- --000000000000a9c539064cc43114 Content-Type: application/x-patch; name="v15-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Disposition: attachment; filename="v15-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmme58nx0 RnJvbSA3NTcwOThiYjI3OGNjNmVlMWRlOWIzZDEwMjI4MjlmNGI3NGZmYmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDYgTWFyIDIwMjYgMTY6NDY6MDIgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxNV0gQWRkIHBnX2dldF9kYXRhYmFzZV9kZGwoKSBmdW5jdGlvbiB0byByZWNvbnN0cnVj dCBDUkVBVEUKIERBVEFCQVNFIHN0YXRlbWVudHMuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIGFkZHMgYSBuZXcgc3lzdGVtIGZ1bmN0aW9uLCBwZ19nZXRfZGF0YWJhc2Vf ZGRsKGRhdGFiYXNlX25hbWUvZGF0YWJhc2Vfb2lkLCBkZGxfb3B0aW9ucyksCndoaWNoIHJlY29u c3RydWN0cyB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBkYXRhYmFz ZSBuYW1lIG9yIE9JRC4KClN1cHBvcnRlZCBkZGxfb3B0aW9ucyBhcmUgJ3ByZXR0eScsICdvd25l cicsICd0YWJsZXNwYWNlJyBhbmQgJ2RlZmF1bHRzJyBhbmQgcmVzcGVjdGl2ZQp2YWx1ZXMgY291 bGQgYmUgJ3llcycvJ29uJy90cnVlLycxJyBvciAnbm8nLydvZmYnL2ZhbHNlLycwJy4KClVzYWdl OgogU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcics ICdubycsICdkZWZhdWx0cycsICd5ZXMnKTsKIFNFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdy ZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnMCcsICd0YWJsZXNwYWNlJywgJzAnLCAnZGVmYXVs dHMnLCAnMScpOwogU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcs ICdvd25lcicsICdvZmYnLCAncHJldHR5JywgJ29uJyk7CiBTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNl X2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgZmFsc2UsICdkZWZhdWx0cycsICd0cnVl JywgJ3RhYmxlc3BhY2UnLCAnbm8nKTsKClJlZmVyZW5jZTogUEctMTUwCkF1dGhvcjogQWtzaGF5 IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZh cm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+ClJldmlld2VkLWJ5OiBFdWxlciBUYXZl aXJhIDxldWxlckBldWxlcnRvLmNvbT4KUmV2aWV3ZWQtYnk6IFF1YW4gWm9uZ2xpYW5nIDxxdWFu em9uZ2xpYW5nQHllYWgubmV0PgpSZXZpZXdlZC1ieTogSmFwaW4gTGkgPGphcGlubGlAaG90bWFp bC5jb20+ClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3 ZWQtYnk6IFJhZmlhIFNhYmloIDxyYWZpYS5wZ2hhY2tlcnNAZ21haWwuY29tPgotLS0KIGRvYy9z cmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgfCAgOTEgKysrKysKIHNyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgfCAgIDYgKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQv ZGRsdXRpbHMuYyAgICAgICAgIHwgNDg2ICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgICAgICAgICAgfCAgIDcgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9k YXRhYmFzZS5vdXQgICB8IDE4NiArKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFi YXNlLnNxbCAgICAgICAgfCAxMjAgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgIHwgICAxICsKIDEwIGZpbGVzIGNoYW5nZWQsIDkwMCBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RkbHV0aWxzLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dt bCBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCmluZGV4IDI5NGY0NWU4MmEzLi42 OTE1NDA4YWUzMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM4NDUsNCArMzg0NSw5 NSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jl c30KIAogICA8L3NlY3QyPgogCisgIDxzZWN0MiBpZD0iZnVuY3Rpb25zLWdldC1vYmplY3QtZGRs Ij4KKyAgIDx0aXRsZT5HZXQgT2JqZWN0IERETCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICA8cGFy YT4KKyAgICBUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJmdW5jdGlv bnMtZ2V0LW9iamVjdC1kZGwtdGFibGUiLz4KKyAgICByZXR1cm4gdGhlIERhdGEgRGVmaW5pdGlv biBMYW5ndWFnZSAoRERMKSBzdGF0ZW1lbnQgZm9yIGFueSBnaXZlbiBkYXRhYmFzZSBvYmplY3Qu CisgICAgVGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIGRpc3RpbmN0IGZ1 bmN0aW9ucywgb25lIGZvciBlYWNoIG9iamVjdCB0eXBlLgorICAgPC9wYXJhPgorCisgICA8dGFi bGUgaWQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSI+CisgICAgPHRpdGxlPkdldCBP YmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICAg PHRoZWFkPgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFkPgorCisgICAgIDx0Ym9keT4K KyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxw cmltYXJ5PnBnX2dldF9kYXRhYmFzZV9kZGw8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2RhdGFiYXNlX2RkbDwvZnVuY3Rpb24+CisgICAg ICAgICggPHBhcmFtZXRlcj5kYXRhYmFzZV9pZDwvcGFyYW1ldGVyPiA8dHlwZT5yZWdkYXRhYmFz ZTwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFESUM8L2xpdGVyYWw+ IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAgICAgICA8dHlwZT4iYW55IjwvdHlw ZT4gPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+dGV4dDwvcmV0dXJudmFsdWU+ CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhl IDxjb21tYW5kPkNSRUFURSBEQVRBQkFTRTwvY29tbWFuZD4gc3RhdGVtZW50IGZvciB0aGUKKyAg ICAgICAgc3BlY2lmaWVkIGRhdGFiYXNlIChpZGVudGlmaWVkIGJ5IG5hbWUgb3IgT0lEKSBmcm9t IHRoZSBzeXN0ZW0KKyAgICAgICAgY2F0YWxvZ3MuIFRoZSBvcHRpb25hbCB2YXJpYWRpYyBhcmd1 bWVudHMgYXJlIG5hbWUvdmFsdWUgcGFpcnMgdGhhdAorICAgICAgICBjb250cm9sIHRoZSBvdXRw dXQKKyAgICAgICAgZm9ybWF0dGluZyBhbmQgY29udGVudCAoZS5nLiwgPGxpdGVyYWw+J3ByZXR0 eScsIHRydWUsICdvd25lcicsIGZhbHNlPC9saXRlcmFsPikuCisgICAgICAgIFN1cHBvcnRlZCBv cHRpb25zIGFyZSBleHBsYWluZWQgYmVsb3cuCisgICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICAgPC9yb3c+CisgICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICA8L3RhYmxlPgorCisg IDxwYXJhPgorICAgIFRoZSA8cGFyYW1ldGVyPm9wdGlvbnM8L3BhcmFtZXRlcj4gZm9yIDxmdW5j dGlvbj5wZ19nZXRfZGF0YWJhc2VfZGRsPC9mdW5jdGlvbj4KKyAgICBwcm92aWRlIGZpbmUtZ3Jh aW5lZCBjb250cm9sIG92ZXIgdGhlIGdlbmVyYXRlZCBTUUwuIE9wdGlvbnMgYXJlIHBhc3NlZCBh cworICAgIGFsdGVybmF0aW5nIGtleS92YWx1ZSBwYWlycyB3aGVyZSB0aGUga2V5IGlzIGEgdGV4 dCBzdHJpbmcgYW5kIHRoZQorICAgIHZhbHVlIGlzIGVpdGhlciBhIGJvb2xlYW4gb3IgYSB0ZXh0 IHN0cmluZyByZXByZXNlbnRpbmcgYSBib29sZWFuCisgICAgKDxsaXRlcmFsPnRydWU8L2xpdGVy YWw+LCA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnllczwvbGl0ZXJhbD4sCisg ICAgPGxpdGVyYWw+bm88L2xpdGVyYWw+LCA8bGl0ZXJhbD4xPC9saXRlcmFsPiwgPGxpdGVyYWw+ MDwvbGl0ZXJhbD4sCisgICAgPGxpdGVyYWw+b248L2xpdGVyYWw+LCA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+KToKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJh PgorICAgICAgPGxpdGVyYWw+J3ByZXR0eScsIHRydWU8L2xpdGVyYWw+IChvciA8bGl0ZXJhbD4n cHJldHR5JywgJ3llcyc8L2xpdGVyYWw+KToKKyAgICAgIEZvcm1hdHMgdGhlIG91dHB1dCB3aXRo IG5ld2xpbmVzIGFuZCBpbmRlbnRhdGlvbiBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgorICAgICAg VGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPidvd25l cicsIGZhbHNlPC9saXRlcmFsPiAob3IgPGxpdGVyYWw+J293bmVyJywgJ25vJzwvbGl0ZXJhbD4p OgorICAgICAgT21pdHMgdGhlIDxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPiBjbGF1c2UgZnJvbSB0 aGUgcmVjb25zdHJ1Y3RlZCBzdGF0ZW1lbnQuCisgICAgICBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0 byB0cnVlLgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgor ICAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD4ndGFibGVzcGFjZScsIGZhbHNlPC9saXRlcmFs PiAob3IgPGxpdGVyYWw+J3RhYmxlc3BhY2UnLCAnMCc8L2xpdGVyYWw+KToKKyAgICAgIE9taXRz IHRoZSA8bGl0ZXJhbD5UQUJMRVNQQUNFPC9saXRlcmFsPiBjbGF1c2UgZnJvbSB0aGUgcmVjb25z dHJ1Y3RlZCBzdGF0ZW1lbnQuCisgICAgICBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlLgor ICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBh cmE+CisgICAgICA8bGl0ZXJhbD4nZGVmYXVsdHMnLCB0cnVlPC9saXRlcmFsPiAob3IgPGxpdGVy YWw+J2RlZmF1bHRzJywgJzEnPC9saXRlcmFsPik6CisgICAgICBJbmNsdWRlcyBjbGF1c2VzIGZv ciBwYXJhbWV0ZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhdCB0aGVpciBkZWZhdWx0IHZhbHVlcwor ICAgICAgKGUuZy4sIDxsaXRlcmFsPkNPTk5FQ1RJT04gTElNSVQgLTE8L2xpdGVyYWw+KSwgd2hp Y2ggYXJlIG5vcm1hbGx5IG9taXR0ZWQgZm9yIGJyZXZpdHkuCisgICAgICBUaGlzIG9wdGlvbiBk ZWZhdWx0cyB0byBmYWxzZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDwv aXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogICA8L3NlY3QxPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggMWM1YjZkNmRmMDUuLmZh NDhlMmYwNzc1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlv bnMuc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAg LTM3MiwzICszNzIsOSBAQCBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0c19kZWJ1Zyhkb2N1 bWVudCB0ZXh0LAogQkVHSU4gQVRPTUlDCiAgICAgU0VMRUNUICogRlJPTSB0c19kZWJ1ZyhnZXRf Y3VycmVudF90c19jb25maWcoKSwgJDEpOwogRU5EOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTgorICBwZ19nZXRfZGF0YWJhc2VfZGRsKGRhdGFiYXNlX2lkIHJlZ2RhdGFiYXNlLCBWQVJJ QURJQyBvcHRpb25zICJhbnkiIERFRkFVTFQgTlVMTCkKK1JFVFVSTlMgdGV4dAorTEFOR1VBR0Ug aW50ZXJuYWwKK0FTICdwZ19nZXRfZGF0YWJhc2VfZGRsJzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9NYWtlZmlsZQpp bmRleCBhOGZkNjgwNTg5Zi4uNGZkZDU0MWY3YmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZpbGUKQEAg LTEwMiw2ICsxMDIsNyBAQCBPQkpTID0gXAogCXJlZ3Byb2MubyBcCiAJcmlfdHJpZ2dlcnMubyBc CiAJcm93dHlwZXMubyBcCisJZGRsdXRpbHMubyBcCiAJcnVsZXV0aWxzLm8gXAogCXNlbGZ1bmNz Lm8gXAogCXNraXBzdXBwb3J0Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RkbHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU4OGI4YTFhOTIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtMCwwICsxLDQ4NiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsdXRpbHMuYworICoJICBGdW5jdGlvbnMgdG8g cmVjb25zdHJ1Y3QgRERMIHN0YXRlbWVudHMgZnJvbSBjYXRhbG9nIGRhdGEuCisgKgorICogVW5s aWtlIHJ1bGV1dGlscy5jICh3aGljaCBkZXBhcnNlcyBleHByZXNzaW9ucyBhbmQgcXVlcnkgdHJl ZXMpLAorICogdGhlc2UgZnVuY3Rpb25zIGdlbmVyYXRlIERETCBieSByZWFkaW5nIGNhdGFsb2cg YXR0cmlidXRlcyBkaXJlY3RseS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9k ZGx1dGlscy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBQcmV0dHkgZmxhZ3MgKHN1YnNldCBuZWVkZWQgZm9y IERETCBmb3JtYXR0aW5nKSAqLworI2RlZmluZSBQUkVUVFlGTEFHX0lOREVOVAkJMHgwMDAyCisK Ky8qIERETCBPcHRpb25zIGZsYWdzICovCisjZGVmaW5lIFBHX0RETF9QUkVUVFlfSU5ERU5UCTB4 MDAwMDAwMDEKKyNkZWZpbmUgUEdfRERMX1dJVEhfREVGQVVMVFMJMHgwMDAwMDAwMgorI2RlZmlu ZSBQR19ERExfTk9fT1dORVIJCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHX0RETF9OT19UQUJMRVNQ QUNFCTB4MDAwMDAwMDgKKworLyoKKyAqIFN0cnVjdHVyZSB0byBkZWZpbmUgRERMIG9wdGlvbnMg Zm9yIHBhcnNlX2RkbF9vcHRpb25zKCkuCisgKiBUaGlzIGFsbG93cyBlYXN5IGFkZGl0aW9uIG9m IG5ldyBvcHRpb25zIGluIHRoZSBmdXR1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERETE9wdGlv bkRlZgoreworCWNvbnN0IGNoYXIgKm5hbWU7CQkJLyogT3B0aW9uIG5hbWUgKGNhc2UtaW5zZW5z aXRpdmUpICovCisJdWludDMyCQlmbGFnOwkJCS8qIEZsYWcgdG8gc2V0ICovCisJYm9vbAkJc2V0 X29uX3RydWU7CS8qIElmIHRydWUsIHNldCBmbGFnIHdoZW4gdmFsdWUgaXMgdHJ1ZTsgaWYKKwkJ CQkJCQkJICogZmFsc2UsIHNldCBmbGFnIHdoZW4gdmFsdWUgaXMgZmFsc2UgKi8KK30gRERMT3B0 aW9uRGVmOworCisvKgorICogQXJyYXkgb2Ygc3VwcG9ydGVkIERETCBvcHRpb25zLgorICogVG8g YWRkIGEgbmV3IG9wdGlvbiwgc2ltcGx5IGFkZCBhbiBlbnRyeSB0byB0aGlzIGFycmF5LgorICov CitzdGF0aWMgY29uc3QgRERMT3B0aW9uRGVmIGRkbF9vcHRpb25fZGVmc1tdID0geworCXsicHJl dHR5IiwgUEdfRERMX1BSRVRUWV9JTkRFTlQsIHRydWV9LAorCXsiZGVmYXVsdHMiLCBQR19ERExf V0lUSF9ERUZBVUxUUywgdHJ1ZX0sCisJeyJvd25lciIsIFBHX0RETF9OT19PV05FUiwgZmFsc2V9 LAorCXsidGFibGVzcGFjZSIsIFBHX0RETF9OT19UQUJMRVNQQUNFLCBmYWxzZX0sCit9OworCisj ZGVmaW5lIEdFVF9ERExfUFJFVFRZX0ZMQUdTKHByZXR0eSkgXAorCSgocHJldHR5KSA/IChQUkVU VFlGTEFHX0lOREVOVCkgXAorCSA6IDApCisKKy8qIExvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0aW9u cyAqLworc3RhdGljIGNoYXIgKnBnX2dldF9kYXRhYmFzZV9kZGxfd29ya2VyKE9pZCBkYl9vaWQs IHVpbnQzMiBkZGxfZmxhZ3MpOworc3RhdGljIHZvaWQgZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3Ry aW5nSW5mbyBidWYsIGludCBwcmV0dHlGbGFncywgaW50IG5TcGFjZXMsIGNvbnN0IGNoYXIgKmZt dCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoNCwgNSk7CitzdGF0aWMgdWludDMyIHBhcnNlX2Rk bF9vcHRpb25zKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQpOwor CisvKgorICogZ2V0X2Zvcm1hdHRlZF9zdHJpbmcKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8g YXBwZW5kIGZvcm1hdHRlZCBzdHJpbmdzIHRvIGEgU3RyaW5nSW5mbyBidWZmZXIsIHdpdGgKKyAq IG9wdGlvbmFsIHByZXR0eS1wcmludGluZyBiYXNlZCBvbiBmbGFncy4KKyAqCisgKiBwcmV0dHlG bGFncyAtIEJhc2VkIG9uIHByZXR0eUZsYWdzIHRoZSBvdXRwdXQgaW5jbHVkZXMgc3BhY2VzIGFu ZAorICogICAgICAgICAgICAgICBuZXdsaW5lcyAoXG4pLgorICogblNwYWNlcyAtIGluZGVudCB3 aXRoIHNwZWNpZmllZCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy4KKyAqIGZtdCAtIHByaW50 Zi1zdHlsZSBmb3JtYXQgc3RyaW5nIHVzZWQgYnkgYXBwZW5kU3RyaW5nSW5mb1ZBLgorICovCitz dGF0aWMgdm9pZAorZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIGludCBwcmV0 dHlGbGFncywgaW50IG5TcGFjZXMsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJ YXJnczsKKworCWlmIChwcmV0dHlGbGFncyAmIFBSRVRUWUZMQUdfSU5ERU5UKQorCXsKKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJLyogSW5kZW50IHdpdGggc3BhY2VzICov CisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXMoYnVmLCBuU3BhY2VzKTsKKwl9CisJZWxzZQorCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisKKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJ bmVlZGVkOworCisJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJCW5lZWRlZCA9IGFwcGVuZFN0cmlu Z0luZm9WQShidWYsIGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwkJaWYgKG5lZWRlZCA9 PSAwKQorCQkJYnJlYWs7CisJCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgbmVlZGVkKTsKKwl9Cit9 CisKKy8qCisgKiBwYXJzZV9kZGxfb3B0aW9ucyAtIEdlbmVyaWMgaGVscGVyIHRvIHBhcnNlIHZh cmlhZGljIG5hbWUvdmFsdWUgb3B0aW9ucworICogZmNpbmZvOiBUaGUgRnVuY3Rpb25DYWxsSW5m byBmcm9tIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgKiB2YXJpYWRpY19zdGFydDogVGhlIGFyZ3Vt ZW50IHBvc2l0aW9uIHdoZXJlIHZhcmlhZGljIGFyZ3VtZW50cyBzdGFydAorICoKKyAqIFJldHVy bnM6IEJpdG1hc2sgb2YgZmxhZ3MgYmFzZWQgb24gdGhlIHBhcnNlZCBvcHRpb25zLgorICoKKyAq IE9wdGlvbnMgYXJlIHBhc3NlZCBhcyBuYW1lL3ZhbHVlIHBhaXJzLgorICogRm9yIGV4YW1wbGU6 IHBnX2dldF9kYXRhYmFzZV9kZGwoJ215ZGInLCAnb3duZXInLCBmYWxzZSwgJ3ByZXR0eScsIHRy dWUpCisgKi8KK3N0YXRpYyB1aW50MzIKK3BhcnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQpCit7CisJdWludDMyCQlmbGFncyA9IDA7CisJ dWludDMyCQlzZWVuX2ZsYWdzID0gMDsKKwlEYXR1bQkgICAqYXJnczsKKwlib29sCSAgICpudWxs czsKKwlPaWQJCSAgICp0eXBlczsKKwlpbnQJCQluYXJnczsKKworCS8qIEV4dHJhY3QgdmFyaWFk aWMgYXJndW1lbnRzICovCisJbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2FyZ3MoZmNpbmZvLCB2 YXJpYWRpY19zdGFydCwgdHJ1ZSwKKwkJCQkJCQkJICAmYXJncywgJnR5cGVzLCAmbnVsbHMpOwor CisJLyogSWYgbm8gb3B0aW9ucyBwcm92aWRlZCAoVkFSSUFESUMgTlVMTCksIHJldHVybiB0aGUg ZW1wdHkgYml0bWFzayAqLworCWlmIChuYXJncyA8PSAwKQorCQlyZXR1cm4gZmxhZ3M7CisKKwkv KgorCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBERUZBVUxUIE5VTEwgd2FzIHVzZWQgYW5kIG5v IGV4cGxpY2l0IHZhcmlhZGljCisJICogYXJndW1lbnRzIHdlcmUgcHJvdmlkZWQuIEluIHRoaXMg Y2FzZSwgd2UgZ2V0IGEgc2luZ2xlIE5VTEwgYXJndW1lbnQuCisJICovCisJaWYgKG5hcmdzID09 IDEgJiYgbnVsbHNbMF0pCisJCXJldHVybiBmbGFnczsKKworCS8qIEFyZ3VtZW50cyBtdXN0IGNv bWUgaW4gbmFtZS92YWx1ZSBwYWlycyAqLworCWlmIChuYXJncyAlIDIgIT0gMCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJ2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBuYW1lL3ZhbHVlIHBhaXJz IiksCisJCQkJIGVycmhpbnQoIlByb3ZpZGUgYW4gZXZlbiBudW1iZXIgb2YgdmFyaWFkaWMgYXJn dW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBwYWlycy4iKSkpOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBuYXJnczsgaSArPSAyKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJYm9vbAkJ YnZhbDsKKwkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQkvKiBLZXkgbXVzdCBub3QgYmUgbnVs bCAqLworCQlpZiAobnVsbHNbaV0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibmFtZSBhdCB2 YXJpYWRpYyBwb3NpdGlvbiAlZCBpcyBudWxsIiwgaSArIDEpKSk7CisKKwkJLyogS2V5IG11c3Qg YmUgdGV4dCB0eXBlICovCisJCWlmICh0eXBlc1tpXSAhPSBURVhUT0lEKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCSBlcnJtc2coIm5hbWUgYXQgdmFyaWFkaWMgcG9zaXRpb24gJWQgaGFzIHR5cGUgJXMsIGV4 cGVjdGVkIHR5cGUgJXMiLAorCQkJCQkJCWkgKyAxLCBmb3JtYXRfdHlwZV9iZSh0eXBlc1tpXSks CisJCQkJCQkJZm9ybWF0X3R5cGVfYmUoVEVYVE9JRCkpKSk7CisKKwkJbmFtZSA9IFRleHREYXR1 bUdldENTdHJpbmcoYXJnc1tpXSk7CisKKwkJLyogVmFsdWUgbXVzdCBub3QgYmUgbnVsbCAqLwor CQlpZiAobnVsbHNbaSArIDFdKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInZhbHVlIGZvciBv cHRpb24gXCIlc1wiIG11c3Qgbm90IGJlIG51bGwiLAorCQkJCQkJCW5hbWUpKSk7CisKKwkJLyog VmFsdWUgbXVzdCBiZSBib29sZWFuIG9yIHRleHQgdHlwZSAqLworCQlpZiAodHlwZXNbaSArIDFd ID09IEJPT0xPSUQpCisJCXsKKwkJCWJ2YWwgPSBEYXR1bUdldEJvb2woYXJnc1tpICsgMV0pOwor CQl9CisJCWVsc2UgaWYgKHR5cGVzW2kgKyAxXSA9PSBURVhUT0lEKQorCQl7CisJCQljaGFyCSAg ICp2YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGFyZ3NbaSArIDFdKTsKKworCQkJaWYgKCFw YXJzZV9ib29sKHZhbHN0ciwgJmJ2YWwpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coInZh bHVlIGZvciBvcHRpb24gXCIlc1wiIGF0IHBvc2l0aW9uICVkIGhhcyBpbnZhbGlkIHZhbHVlIFwi JXNcIiIsCisJCQkJCQkJCW5hbWUsIGkgKyAyLCB2YWxzdHIpLAorCQkJCQkJIGVycmhpbnQoIlZh bGlkIHZhbHVlcyBhcmU6IHRydWUsIGZhbHNlLCB5ZXMsIG5vLCAxLCAwLCBvbiwgb2ZmLiIpKSk7 CisJCQlwZnJlZSh2YWxzdHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBl cnJtc2coInZhbHVlIGZvciBvcHRpb24gXCIlc1wiIGF0IHBvc2l0aW9uICVkIGhhcyB0eXBlICVz LCBleHBlY3RlZCB0eXBlIGJvb2xlYW4gb3IgdGV4dCIsCisJCQkJCQkJbmFtZSwgaSArIDIsIGZv cm1hdF90eXBlX2JlKHR5cGVzW2kgKyAxXSkpKSk7CisJCX0KKworCQkvKgorCQkgKiBMb29rIHVw IHRoZSBvcHRpb24gaW4gdGhlIGRkbF9vcHRpb25fZGVmcyBhcnJheSBhbmQgc2V0IHRoZQorCQkg KiBhcHByb3ByaWF0ZSBmbGFnIGJhc2VkIG9uIHRoZSB2YWx1ZS4KKwkJICovCisJCWZvciAoaW50 IGogPSAwOyBqIDwgbGVuZ3Rob2YoZGRsX29wdGlvbl9kZWZzKTsgaisrKQorCQl7CisJCQljb25z dCBERExPcHRpb25EZWYgKm9wdCA9ICZkZGxfb3B0aW9uX2RlZnNbal07CisKKwkJCWlmIChwZ19z dHJjYXNlY21wKG5hbWUsIG9wdC0+bmFtZSkgPT0gMCkKKwkJCXsKKwkJCQkvKiBFcnJvciBpZiB0 aGlzIG9wdGlvbiB3YXMgYWxyZWFkeSBzcGVjaWZpZWQgKi8KKwkJCQlpZiAoc2Vlbl9mbGFncyAm IG9wdC0+ZmxhZykKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCQkgZXJybXNnKCJvcHRpb24gXCIlc1wi IGlzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIsIG5hbWUpKSk7CisKKwkJCQlzZWVuX2ZsYWdz IHw9IG9wdC0+ZmxhZzsKKworCQkJCS8qCisJCQkJICogU2V0IHRoZSBmbGFnIGlmIHRoZSB2YWx1 ZSBtYXRjaGVzIHRoZSBzZXRfb25fdHJ1ZQorCQkJCSAqIGNvbmRpdGlvbjogaWYgc2V0X29uX3Ry dWUgaXMgdHJ1ZSwgc2V0IGZsYWcgd2hlbiBidmFsIGlzCisJCQkJICogdHJ1ZTsgaWYgc2V0X29u X3RydWUgaXMgZmFsc2UsIHNldCBmbGFnIHdoZW4gYnZhbCBpcyBmYWxzZS4KKwkJCQkgKi8KKwkJ CQlpZiAoYnZhbCA9PSBvcHQtPnNldF9vbl90cnVlKQorCQkJCQlmbGFncyB8PSBvcHQtPmZsYWc7 CisKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZv dW5kKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBvcHRpb246IFwiJXNc IiIsIG5hbWUpKSk7CisKKwkJcGZyZWUobmFtZSk7CisJfQorCisJcmV0dXJuIGZsYWdzOworfQor CisvKgorICogcGdfZ2V0X2RhdGFiYXNlX2RkbAorICoKKyAqIEdlbmVyYXRlIGEgQ1JFQVRFIERB VEFCQVNFIHN0YXRlbWVudCBmb3IgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBvaWQuCisgKgorICog ZGJfb2lkIC0gT0lEIG9mIHRoZSBkYXRhYmFzZSBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIERE TC4KKyAqIG9wdGlvbnMgLSBWYXJpYWRpYyBuYW1lL3ZhbHVlIHBhaXJzIHRvIG1vZGlmeSB0aGUg b3V0cHV0LgorICovCitEYXR1bQorcGdfZ2V0X2RhdGFiYXNlX2RkbChQR19GVU5DVElPTl9BUkdT KQoreworCU9pZAkJCWRiX29pZDsKKwl1aW50MzIJCWRkbF9mbGFnczsKKwljaGFyCSAgICpyZXM7 CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJZGJfb2lk ID0gUEdfR0VUQVJHX09JRCgwKTsKKworCS8qIFBhcnNlIHZhcmlhZGljIG9wdGlvbnMgc3RhcnRp bmcgZnJvbSBhcmd1bWVudCAxICovCisJZGRsX2ZsYWdzID0gcGFyc2VfZGRsX29wdGlvbnMoZmNp bmZvLCAxKTsKKworCXJlcyA9IHBnX2dldF9kYXRhYmFzZV9kZGxfd29ya2VyKGRiX29pZCwgZGRs X2ZsYWdzKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlcykpOworfQor CitzdGF0aWMgY2hhciAqCitwZ19nZXRfZGF0YWJhc2VfZGRsX3dvcmtlcihPaWQgZGJfb2lkLCB1 aW50MzIgZGRsX2ZsYWdzKQoreworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWJvb2wJCWF0dHJf aXNudWxsOworCURhdHVtCQlkYnZhbHVlOworCUhlYXBUdXBsZQl0dXBsZV9kYXRhYmFzZTsKKwlG b3JtX3BnX2RhdGFiYXNlIGRiZm9ybTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJU3RyaW5nSW5m b0RhdGEgb3B0YnVmOworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisJSGVhcFR1cGxlCXRtcGxfdHVw bGU7CisJaW50CQkJdG1wbF9lbmNvZGluZyA9IC0xOworCWNoYXIJICAgKmNvbGxhdGU7CisJY2hh cgkgICAqY3R5cGU7CisKKwkvKiBWYXJpYWJsZXMgZm9yIGRkbF9vcHRpb25zIHBhcnNpbmcgKi8K KwlpbnQJCQlwcmV0dHlfZmxhZ3MgPSAwOworCWJvb2wJCWlzX3dpdGhfZGVmYXVsdHMgPSBmYWxz ZTsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKi8KKwlpZiAoZGRsX2ZsYWdzICYg UEdfRERMX1BSRVRUWV9JTkRFTlQpCisJCXByZXR0eV9mbGFncyA9IEdFVF9ERExfUFJFVFRZX0ZM QUdTKDEpOworCisJaXNfd2l0aF9kZWZhdWx0cyA9IChkZGxfZmxhZ3MgJiBQR19ERExfV0lUSF9E RUZBVUxUUykgIT0gMDsKKworCS8qCisJICogVXNlciBtdXN0IGhhdmUgY29ubmVjdCBwcml2aWxl Z2UgZm9yIHRhcmdldCBkYXRhYmFzZS4KKwkgKi8KKwlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hl Y2soRGF0YWJhc2VSZWxhdGlvbklkLCBkYl9vaWQsIEdldFVzZXJJZCgpLAorCQkJCQkJCQlBQ0xf Q09OTkVDVCk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSyAmJgorCQkhaGFzX3ByaXZz X29mX3JvbGUoR2V0VXNlcklkKCksIFJPTEVfUEdfUkVBRF9BTExfU1RBVFMpKQorCXsKKwkJYWNs Y2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfREFUQUJBU0UsCisJCQkJCSAgIGdldF9kYXRh YmFzZV9uYW1lKGRiX29pZCkpOworCX0KKworCS8qIExvb2sgdXAgdGhlIGRhdGFiYXNlIGluIHBn X2RhdGFiYXNlICovCisJdHVwbGVfZGF0YWJhc2UgPSBTZWFyY2hTeXNDYWNoZTEoREFUQUJBU0VP SUQsIE9iamVjdElkR2V0RGF0dW0oZGJfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlX2RhdGFiYXNlKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfVU5E RUZJTkVEX09CSkVDVCksCisJCQkJZXJybXNnKCJkYXRhYmFzZSB3aXRoIG9pZCAldSBkb2VzIG5v dCBleGlzdCIsIGRiX29pZCkpOworCisJZGJmb3JtID0gKEZvcm1fcGdfZGF0YWJhc2UpIEdFVFNU UlVDVCh0dXBsZV9kYXRhYmFzZSk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlpbml0U3Ry aW5nSW5mbygmb3B0YnVmKTsKKworCS8qCisJICogQnVpbGQgdGhlIG9wdGlvbnMgaW50byBhIHNl cGFyYXRlIGJ1ZmZlciBmaXJzdCwgc28gd2UgY2FuIGVtaXQgV0lUSAorCSAqIG9ubHkgd2hlbiB0 aGVyZSBhcmUgb3B0aW9ucyB0byBzaG93LgorCSAqLworCisJLyogU2V0IHRoZSBPV05FUiBpbiB0 aGUgRERMIGlmIG93bmVyIGlzIG5vdCBvbWl0dGVkICovCisJaWYgKE9pZElzVmFsaWQoZGJmb3Jt LT5kYXRkYmEpICYmICEoZGRsX2ZsYWdzICYgUEdfRERMX05PX09XTkVSKSkKKwl7CisJCWNoYXIJ ICAgKmRib3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChkYmZvcm0tPmRhdGRiYSwgZmFsc2UpOwor CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZvcHRidWYsIHByZXR0eV9mbGFncywgOCwgIk9XTkVS ID0gJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGRib3duZXIpKTsKKwl9CisKKwkvKgor CSAqIEVtaXQgRU5DT0RJTkcgaWYgaXQgZGlmZmVycyBmcm9tIHRlbXBsYXRlMSdzIGVuY29kaW5n LCBvciBpZiBkZWZhdWx0cworCSAqIGFyZSByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCBlbmNvZGlu ZyBmb3IgQ1JFQVRFIERBVEFCQVNFIGNvbWVzIGZyb20gdGhlCisJICogdGVtcGxhdGUgZGF0YWJh c2UgKHRlbXBsYXRlMSksIG5vdCBhIGZpeGVkIHZhbHVlLgorCSAqLworCWVuY29kaW5nID0gcGdf ZW5jb2RpbmdfdG9fY2hhcihkYmZvcm0tPmVuY29kaW5nKTsKKworCXRtcGxfdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoREFUQUJBU0VPSUQsCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKFRlbXBs YXRlMURiT2lkKSk7CisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodG1wbF90dXBsZSkpCisJeworCQlG b3JtX3BnX2RhdGFiYXNlIHRtcGxmb3JtID0gKEZvcm1fcGdfZGF0YWJhc2UpIEdFVFNUUlVDVCh0 bXBsX3R1cGxlKTsKKworCQl0bXBsX2VuY29kaW5nID0gdG1wbGZvcm0tPmVuY29kaW5nOworCQlS ZWxlYXNlU3lzQ2FjaGUodG1wbF90dXBsZSk7CisJfQorCisJaWYgKGlzX3dpdGhfZGVmYXVsdHMg fHwgZGJmb3JtLT5lbmNvZGluZyAhPSB0bXBsX2VuY29kaW5nKQorCQlnZXRfZm9ybWF0dGVkX3N0 cmluZygmb3B0YnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJFTkNPRElORyA9ICVzIiwKKwkJCQkJCQkg cXVvdGVfbGl0ZXJhbF9jc3RyKGVuY29kaW5nKSk7CisKKwkvKgorCSAqIExDX0NPTExBVEUgYW5k IExDX0NUWVBFIGFyZSBCS0lfRk9SQ0VfTk9UX05VTEwsIGFsd2F5cyBwcmVzZW50LiBFbWl0CisJ ICogTE9DQUxFIHdoZW4gdGhleSBtYXRjaCAobGlrZSBwZ19kdW1wKSwgb3RoZXJ3aXNlIGVtaXQg c2VwYXJhdGVseS4KKwkgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lE LCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkJQW51bV9wZ19kYXRhYmFzZV9kYXRjb2xsYXRlLCAm YXR0cl9pc251bGwpOworCUFzc2VydCghYXR0cl9pc251bGwpOworCWNvbGxhdGUgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRidmFsdWUpOworCisJZGJ2YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRB QkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJCQkJCUFudW1fcGdfZGF0YWJhc2VfZGF0Y3R5 cGUsICZhdHRyX2lzbnVsbCk7CisJQXNzZXJ0KCFhdHRyX2lzbnVsbCk7CisJY3R5cGUgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpOworCisJaWYgKHN0cmNtcChjb2xsYXRlLCBjdHlwZSkg PT0gMCkKKwl7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZvcHRidWYsIHByZXR0eV9mbGFncywg OCwgIkxPQ0FMRSA9ICVzIiwKKwkJCQkJCQkJcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbGxhdGUpKTsK Kwl9CisJZWxzZQorCXsKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJm9wdGJ1ZiwgcHJldHR5X2Zs YWdzLCA4LCAiTENfQ09MTEFURSA9ICVzIiwKKwkJCQkJCQkJcXVvdGVfbGl0ZXJhbF9jc3RyKGNv bGxhdGUpKTsKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJm9wdGJ1ZiwgcHJldHR5X2ZsYWdzLCA4 LCAiTENfQ1RZUEUgPSAlcyIsCisJCQkJCQkJCXF1b3RlX2xpdGVyYWxfY3N0cihjdHlwZSkpOwor CX0KKworCisJLyoKKwkgKiBGZXRjaCBkYXRsb2NhbGU6IGVtaXQgYXMgQlVJTFRJTl9MT0NBTEUg b3IgSUNVX0xPQ0FMRSBkZXBlbmRpbmcgb24gdGhlCisJICogcHJvdmlkZXIuICBGb3IgbGliYywg ZGF0bG9jYWxlIHNob3VsZCBhbHdheXMgYmUgTlVMTC4KKwkgKi8KKwlkYnZhbHVlID0gU3lzQ2Fj aGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdf ZGF0YWJhc2VfZGF0bG9jYWxlLCAmYXR0cl9pc251bGwpOworCWlmICghYXR0cl9pc251bGwgJiYg ZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfQlVJTFRJTikKKwkJZ2V0X2Zv cm1hdHRlZF9zdHJpbmcoJm9wdGJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiQlVJTFRJTl9MT0NBTEUg PSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRi dmFsdWUpKSk7CisJZWxzZSBpZiAoIWF0dHJfaXNudWxsICYmIGRiZm9ybS0+ZGF0bG9jcHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJm9wdGJ1Ziwg cHJldHR5X2ZsYWdzLCA4LCAiSUNVX0xPQ0FMRSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJh bF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKwllbHNlCisJCUFzc2VydChh dHRyX2lzbnVsbCk7CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgSUNVX1JVTEVTICovCisJZGJ2 YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVfZGF0YWJhc2UsCisJCQkJ CQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGljdXJ1bGVzLCAmYXR0cl9pc251bGwpOworCWlmICgh YXR0cl9pc251bGwgJiYgZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNV KQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmb3B0YnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJJQ1Vf UlVMRVMgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0RGF0dW1HZXRDU3Ry aW5nKGRidmFsdWUpKSk7CisKKwkvKgorCSAqIEVtaXQgQ09MTEFUSU9OX1ZFUlNJT04gb25seSB3 aGVuIGRlZmF1bHRzIGFyZSByZXF1ZXN0ZWQuICBOb3JtYWxseSB0aGlzCisJICogaXMgYW4gaW50 ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIHRoYXQgc2hvdWxkIGJlIGRldGVybWluZWQgZnJl c2hseQorCSAqIGJ5IHRoZSB0YXJnZXQgY2x1c3RlciAoc2ltaWxhciB0byBob3cgcGdfZHVtcCBv bmx5IGVtaXRzIGl0IGR1cmluZworCSAqIGJpbmFyeSB1cGdyYWRlcykuCisJICovCisJaWYgKGlz X3dpdGhfZGVmYXVsdHMpCisJeworCQlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNF T0lELCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGNvbGx2 ZXJzaW9uLCAmYXR0cl9pc251bGwpOworCQlpZiAoIWF0dHJfaXNudWxsKQorCQkJZ2V0X2Zvcm1h dHRlZF9zdHJpbmcoJm9wdGJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiQ09MTEFUSU9OX1ZFUlNJT04g PSAlcyIsCisJCQkJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoVGV4dERhdHVtR2V0Q1N0cmluZyhk YnZhbHVlKSkpOworCX0KKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgTE9DQUxFX1BST1ZJREVS ICovCisJaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4p CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZvcHRidWYsIHByZXR0eV9mbGFncywgOCwgIkxPQ0FM RV9QUk9WSURFUiA9IGJ1aWx0aW4iKTsKKwllbHNlIGlmIChkYmZvcm0tPmRhdGxvY3Byb3ZpZGVy ID09IENPTExQUk9WSURFUl9JQ1UpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZvcHRidWYsIHBy ZXR0eV9mbGFncywgOCwgIkxPQ0FMRV9QUk9WSURFUiA9IGljdSIpOworCWVsc2UKKwkJZ2V0X2Zv cm1hdHRlZF9zdHJpbmcoJm9wdGJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiTE9DQUxFX1BST1ZJREVS ID0gbGliYyIpOworCisJLyogU2V0IHRoZSBUQUJMRVNQQUNFIGluIHRoZSBEREwgaWYgdGFibGVz cGFjZSBpcyBub3Qgb21pdHRlZCAqLworCWlmIChPaWRJc1ZhbGlkKGRiZm9ybS0+ZGF0dGFibGVz cGFjZSkgJiYgIShkZGxfZmxhZ3MgJiBQR19ERExfTk9fVEFCTEVTUEFDRSkpCisJeworCQlpZiAo aXNfd2l0aF9kZWZhdWx0cyB8fAorCQkJZGJmb3JtLT5kYXR0YWJsZXNwYWNlICE9IERFRkFVTFRU QUJMRVNQQUNFX09JRCkKKwkJeworCQkJY2hhcgkgICAqZGJUYWJsZXNwYWNlID0gZ2V0X3RhYmxl c3BhY2VfbmFtZShkYmZvcm0tPmRhdHRhYmxlc3BhY2UpOworCisJCQlnZXRfZm9ybWF0dGVkX3N0 cmluZygmb3B0YnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJUQUJMRVNQQUNFID0gJXMiLAorCQkJCQkJ CQkgcXVvdGVfaWRlbnRpZmllcihkYlRhYmxlc3BhY2UpKTsKKwkJfQorCX0KKworCWlmIChpc193 aXRoX2RlZmF1bHRzIHx8ICFkYmZvcm0tPmRhdGFsbG93Y29ubikKKwl7CisJCWdldF9mb3JtYXR0 ZWRfc3RyaW5nKCZvcHRidWYsIHByZXR0eV9mbGFncywgOCwgIkFMTE9XX0NPTk5FQ1RJT05TID0g JXMiLAorCQkJCQkJCSBkYmZvcm0tPmRhdGFsbG93Y29ubiA/ICJ0cnVlIiA6ICJmYWxzZSIpOwor CX0KKworCWlmIChpc193aXRoX2RlZmF1bHRzIHx8CisJCWRiZm9ybS0+ZGF0Y29ubmxpbWl0ICE9 IERBVENPTk5MSU1JVF9VTkxJTUlURUQpCisJeworCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmb3B0 YnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJDT05ORUNUSU9OIExJTUlUID0gJWQiLAorCQkJCQkJCSBk YmZvcm0tPmRhdGNvbm5saW1pdCk7CisJfQorCisJaWYgKGlzX3dpdGhfZGVmYXVsdHMgfHwgZGJm b3JtLT5kYXRpc3RlbXBsYXRlKQorCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmb3B0YnVmLCBwcmV0 dHlfZmxhZ3MsIDgsICJJU19URU1QTEFURSA9ICVzIiwKKwkJCQkJCQkgZGJmb3JtLT5kYXRpc3Rl bXBsYXRlID8gInRydWUiIDogImZhbHNlIik7CisKKwkvKiBCdWlsZCB0aGUgQ1JFQVRFIERBVEFC QVNFIHN0YXRlbWVudCAqLworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBEQVRBQkFT RSAlcyIsCisJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGRiZm9ybS0+ZGF0bmFtZS5kYXRhKSk7CisK KwkvKiBPbmx5IGVtaXQgV0lUSCBpZiB0aGVyZSBhcmUgb3B0aW9ucyAqLworCWlmIChvcHRidWYu bGVuID4gMCkKKwl7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywg NCwgIldJVEgiKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCBvcHRidWYuZGF0YSk7 CisJfQorCisJcGZyZWUob3B0YnVmLmRhdGEpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICc7Jyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGVfZGF0YWJhc2UpOworCisJcmV0dXJuIGJ1 Zi5kYXRhOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21lc29uLmJ1aWxkCmluZGV4IGZiODI5NGQ3ZTRhLi5m OTg5M2I1ZGZiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21lc29uLmJ1aWxk CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZApAQCAtOTgsNiArOTgsNyBA QCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdyZWdwcm9jLmMnLAogICAncmlfdHJpZ2dl cnMuYycsCiAgICdyb3d0eXBlcy5jJywKKyAgJ2RkbHV0aWxzLmMnLAogICAncnVsZXV0aWxzLmMn LAogICAnc2VsZnVuY3MuYycsCiAgICdza2lwc3VwcG9ydC5jJywKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYwppbmRleCBmMTZmMTUzNTc4NS4uOTk3YzY3MWFlZjAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVI YW5kbGVyLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJy ZXdyaXRlL3Jld3JpdGVTdXBwb3J0LmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCkBAIC01NDcsNyArNTQ4LDYgQEAgc3RhdGljIHZvaWQgZ2V0X2pz b25fdGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgSnNvblRhYmxlUGxhbiAqcGxh biwKIAkJCQkJCQkJCQkgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgIGJv b2wgc2hvd2ltcGxpY2l0LAogCQkJCQkJCQkJCSAgYm9vbCBuZWVkY29tbWEpOwotCiAjZGVmaW5l IG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQogCiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CmluZGV4IDM2MWUyY2ZmZmViLi4xZTJmN2QzYWMzNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC00MDM0LDYgKzQwMzQsMTMgQEAKICAgcHJvbmFtZSA9PiAncGdf Z2V0X2Z1bmN0aW9uX3NxbGJvZHknLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUg PT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkJywKICAgcHJvc3JjID0+ICdwZ19nZXRfZnVu Y3Rpb25fc3FsYm9keScgfSwKK3sgb2lkID0+ICc5NDkyJywgZGVzY3IgPT4gJ2dldCBDUkVBVEUg c3RhdGVtZW50IGZvciBkYXRhYmFzZSBuYW1lIGFuZCBvaWQnLAorICBwcm9uYW1lID0+ICdwZ19n ZXRfZGF0YWJhc2VfZGRsJywgcHJvdmFyaWFkaWMgPT4gJ2FueScsIHByb2lzc3RyaWN0ID0+ICdm JywKKyAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJn dHlwZXMgPT4gJ3JlZ2RhdGFiYXNlIGFueScsCisgIHByb2FyZ21vZGVzID0+ICd7aSx2fScsCisg IHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnZGF0YWJhc2UsYW55fScsCisgIHByb3NyYyA9PiAncGdf Z2V0X2RhdGFiYXNlX2RkbCcgfSwKIAogeyBvaWQgPT4gJzE2ODYnLCBkZXNjciA9PiAnbGlzdCBv ZiBTUUwga2V5d29yZHMnLAogICBwcm9uYW1lID0+ICdwZ19nZXRfa2V5d29yZHMnLCBwcm9jb3N0 ID0+ICcxMCcsIHByb3Jvd3MgPT4gJzUwMCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2RhdGFiYXNlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJh c2Uub3V0CmluZGV4IDZiODc5YjBmNjJhLi43NmVjYTIyY2YzYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFzZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9kYXRhYmFzZS5vdXQKQEAgLTEsMyArMSw2NSBAQAorLS0KKy0tIFJlY29uc3RydWN0 IERETAorLS0KKy0tIFRvIHByb2R1Y2Ugc3RhYmxlIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQsIGl0 J3MgdXN1YWxseSBuZWNlc3NhcnkgdG8KKy0tIGlnbm9yZSBjb2xsYXRpb24gYW5kIGxvY2FsZSBy ZWxhdGVkIGRldGFpbHMuIFRoaXMgZmlsdGVyCistLSBmdW5jdGlvbnMgcmVtb3ZlcyBjb2xsYXRp b24gYW5kIGxvY2FsZSByZWxhdGVkIGRldGFpbHMuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TiBkZGxfZmlsdGVyKGRkbF9pbnB1dCBURVhUKQorUkVUVVJOUyBURVhUIEFTICQkCitERUNMQVJF CisgICAgY2xlYW5lZF9kZGwgVEVYVDsKK0JFR0lOCisgICAgLS0gUmVtb3ZlICVMT0NBTEVfUFJP VklERVIlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAor ICAgICAgICBkZGxfaW5wdXQsCisgICAgICAgICdccypcbUxPQ0FMRV9QUk9WSURFUlxNXHMqPVxz KihbJyciXT9bXicnIlxzXStbJyciXT8pJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAg ICApOworCisgICAgLS0gUmVtb3ZlIExDX0NPTExBVEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVk X2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdc cypMQ19DT0xMQVRFXHMqPVxzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAg ICAgJ2dpJworICAgICk7CisKKyAgICAtLSBSZW1vdmUgTENfQ1RZUEUgYXNzaWdubWVudHMKKyAg ICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisg ICAgICAgICdccypMQ19DVFlQRVxzKj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycs CisgICAgICAgICdnaScKKyAgICApOworCisgICAgLS0gUmVtb3ZlICVMT0NBTEUlIHBsYWNlaG9s ZGVycworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVk X2RkbCwKKyAgICAgICAgJ1xzKlxTKkxPQ0FMRVxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScs CisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKworICAgIC0tIFJlbW92ZSAlQ09M TEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgK KyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypcUypDT0xMQVRJT05cUypccyo9P1xz KihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisK KyAgICAtLSBSZW1vdmUgRU5DT0RJTkcgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSBy ZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypFTkNPRElO R1xzKj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAg ICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3Nx bDsKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZAogCUVOQ09ESU5HIHV0ZjggTENfQ09M TEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRFIHRlbXBsYXRlMDsKIEFMVEVSIERBVEFCQVNF IHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdyZXNzaW9uX3V0Zjg7CkBAIC0xNiw2ICs3OCwx MzAgQEAgQ1JFQVRFIFJPTEUgcmVncmVzc19kYXRkYmFfYmVmb3JlOwogQ1JFQVRFIFJPTEUgcmVn cmVzc19kYXRkYmFfYWZ0ZXI7CiBBTFRFUiBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggT1dORVIg VE8gcmVncmVzc19kYXRkYmFfYmVmb3JlOwogUkVBU1NJR04gT1dORUQgQlkgcmVncmVzc19kYXRk YmFfYmVmb3JlIFRPIHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyOworLS0gVGVzdCBwZ19nZXRfZGF0YWJh c2VfZGRsCistLSBEYXRhYmFzZSBkb2Vzbid0IGV4aXN0cworU0VMRUNUIHBnX2dldF9kYXRhYmFz ZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2UnKTsKK0VSUk9SOiAgZGF0YWJhc2UgInJlZ3Jlc3Np b25fZGF0YWJhc2UiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IFNFTEVDVCBwZ19nZXRfZGF0YWJh c2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KKy0tIFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9k ZGwoTlVMTCk7CisgcGdfZ2V0X2RhdGFiYXNlX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBXaXRob3V0IG9wdGlvbnMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dl dF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggT1dORVIgPSByZWdyZXNzX2RhdGRiYV9h ZnRlciBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCistLSBXaXRoIE5vIE93bmVy CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0Zjgn LCAnb3duZXInLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVy ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jl c3Npb25fdXRmOCBXSVRIIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdp dGggTm8gVGFibGVzcGFjZQorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgn cmVncmVzc2lvbl91dGY4JywgJ2RlZmF1bHRzJywgdHJ1ZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJhX2Fm dGVyIEFMTE9XX0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlUID0gMTIzIElTX1RF TVBMQVRFID0gZmFsc2U7CisoMSByb3cpCisKKy0tIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxf ZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdkZWZhdWx0cycs IHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg REFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggT1dORVIgPSByZWdyZXNzX2RhdGRiYV9hZnRl ciBUQUJMRVNQQUNFID0gcGdfZGVmYXVsdCBBTExPV19DT05ORUNUSU9OUyA9IHRydWUgQ09OTkVD VElPTiBMSU1JVCA9IDEyMyBJU19URU1QTEFURSA9IGZhbHNlOworKDEgcm93KQorCistLSBXaXRo IE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCitTRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCBmYWxz ZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSwgJ2RlZmF1bHRzJywgdHJ1ZSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jl c3Npb25fdXRmOCBXSVRIIEFMTE9XX0NPTk5FQ1RJT05TID0gdHJ1ZSBDT05ORUNUSU9OIExJTUlU ID0gMTIzIElTX1RFTVBMQVRFID0gZmFsc2U7CisoMSByb3cpCisKKy0tIFdpdGggUHJldHR5IGZv cm1hdHRlZAorXHBzZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRydWUpKTsKK2RkbF9m aWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAg IE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIKKyAgICAgICAgQ09OTkVDVElPTiBMSU1JVCA9 IDEyMzsKKygxIHJvdykKKy0tIFdpdGggTm8gT3duZXIgYW5kIE5vIFRhYmxlc3BhY2UKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0 dHknLCB0cnVlLCAnb3duZXInLCBmYWxzZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSkpOworZGRsX2Zp bHRlcgorQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOAorICAgIFdJVEgKKyAgICAgICAg Q09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKy0tIFdpdGggRGVmYXVsdHMKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0 dHknLCB0cnVlLCAnZGVmYXVsdHMnLCB0cnVlKSk7CitkZGxfZmlsdGVyCitDUkVBVEUgREFUQUJB U0UgcmVncmVzc2lvbl91dGY4CisgICAgV0lUSAorICAgICAgICBPV05FUiA9IHJlZ3Jlc3NfZGF0 ZGJhX2FmdGVyCisgICAgICAgIFRBQkxFU1BBQ0UgPSBwZ19kZWZhdWx0CisgICAgICAgIEFMTE9X X0NPTk5FQ1RJT05TID0gdHJ1ZQorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzCisgICAg ICAgIElTX1RFTVBMQVRFID0gZmFsc2U7CisoMSByb3cpCistLSBXaXRoIE5vIE93bmVyLCBObyBU YWJsZXNwYWNlIGFuZCBXaXRoIERlZmF1bHRzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0 YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgdHJ1ZSwgJ293bmVyJywgZmFs c2UsICd0YWJsZXNwYWNlJywgZmFsc2UsICdkZWZhdWx0cycsIHRydWUpKTsKK2RkbF9maWx0ZXIK K0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAgIEFMTE9X X0NPTk5FQ1RJT05TID0gdHJ1ZQorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzCisgICAg ICAgIElTX1RFTVBMQVRFID0gZmFsc2U7CisoMSByb3cpCistLSBUZXN0IHdpdGggdGV4dCB2YWx1 ZXM6ICd5ZXMnLCAnbm8nLCAnMScsICcwJywgJ29uJywgJ29mZicKK1xwc2V0IGZvcm1hdCBhbGln bmVkCistLSBVc2luZyAneWVzJyBhbmQgJ25vJworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2Rh dGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJ25vJywgJ2RlZmF1bHRzJywg J3llcycpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBE QVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBUQUJMRVNQQUNFID0gcGdfZGVmYXVsdCBBTExP V19DT05ORUNUSU9OUyA9IHRydWUgQ09OTkVDVElPTiBMSU1JVCA9IDEyMyBJU19URU1QTEFURSA9 IGZhbHNlOworKDEgcm93KQorCistLSBVc2luZyAnMScgYW5kICcwJworU0VMRUNUIGRkbF9maWx0 ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJzAnLCAn dGFibGVzcGFjZScsICcwJywgJ2RlZmF1bHRzJywgJzEnKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91 dGY4IFdJVEggQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjMg SVNfVEVNUExBVEUgPSBmYWxzZTsKKygxIHJvdykKKworLS0gVXNpbmcgJ29uJyBhbmQgJ29mZicK K1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcs ICdvd25lcicsICdvZmYnLCAncHJldHR5JywgJ29uJykpOworICAgICAgICAgICBkZGxfZmlsdGVy ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg REFUQUJBU0UgcmVncmVzc2lvbl91dGY4KworICAgICBXSVRIICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorCistLSBNaXhl ZCBib29sZWFuIGFuZCB0ZXh0IHZhbHVlcworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFi YXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgZmFsc2UsICdkZWZhdWx0cycsICd0 cnVlJywgJ3RhYmxlc3BhY2UnLCAnbm8nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEgg QUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjMgSVNfVEVNUExB VEUgPSBmYWxzZTsKKygxIHJvdykKKworLS0gVGVzdCBkdXBsaWNhdGUgb3B0aW9uIChzaG91bGQg ZXJyb3IpCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293 bmVyJywgZmFsc2UsICdvd25lcicsIHRydWUpOworRVJST1I6ICBvcHRpb24gIm93bmVyIiBpcyBz cGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKKy0tIFRlc3QgaW52YWxpZCB0ZXh0IHZhbHVlIChzaG91 bGQgZXJyb3IpCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4Jywg J293bmVyJywgJ2ludmFsaWQnKTsKK0VSUk9SOiAgdmFsdWUgZm9yIG9wdGlvbiAib3duZXIiIGF0 IHBvc2l0aW9uIDIgaGFzIGludmFsaWQgdmFsdWUgImludmFsaWQiCitISU5UOiAgVmFsaWQgdmFs dWVzIGFyZTogdHJ1ZSwgZmFsc2UsIHllcywgbm8sIDEsIDAsIG9uLCBvZmYuCiBEUk9QIERBVEFC QVNFIHJlZ3Jlc3Npb25fdXRmODsKK0RST1AgRlVOQ1RJT04gZGRsX2ZpbHRlcih0ZXh0KTsKIERS T1AgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBEUk9QIFJPTEUgcmVncmVzc19kYXRkYmFf YWZ0ZXI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5zcWwKaW5kZXggNGVmMzYxMjcyOTEuLjllZjky NmZhYzljIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uuc3FsCkBAIC0xLDMgKzEsNjcgQEAKKy0t CistLSBSZWNvbnN0cnVjdCBEREwKKy0tCistLSBUbyBwcm9kdWNlIHN0YWJsZSByZWdyZXNzaW9u IHRlc3Qgb3V0cHV0LCBpdCdzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvCistLSBpZ25vcmUgY29sbGF0 aW9uIGFuZCBsb2NhbGUgcmVsYXRlZCBkZXRhaWxzLiBUaGlzIGZpbHRlcgorLS0gZnVuY3Rpb25z IHJlbW92ZXMgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVsYXRlZCBkZXRhaWxzLgorCitDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBkZGxfZmlsdGVyKGRkbF9pbnB1dCBURVhUKQorUkVUVVJOUyBU RVhUIEFTICQkCitERUNMQVJFCisgICAgY2xlYW5lZF9kZGwgVEVYVDsKK0JFR0lOCisgICAgLS0g UmVtb3ZlICVMT0NBTEVfUFJPVklERVIlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRsIDo9 IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBkZGxfaW5wdXQsCisgICAgICAgICdccypcbUxPQ0FM RV9QUk9WSURFUlxNXHMqPVxzKihbJyciXT9bXicnIlxzXStbJyciXT8pJywKKyAgICAgICAgJycs CisgICAgICAgICdnaScKKyAgICApOworCisgICAgLS0gUmVtb3ZlIExDX0NPTExBVEUgYXNzaWdu bWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5l ZF9kZGwsCisgICAgICAgICdccypMQ19DT0xMQVRFXHMqPVxzKihbJyciXSlbXicnIl0qXDEnLAor ICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisKKyAgICAtLSBSZW1vdmUgTENfQ1RZ UEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAg ICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DVFlQRVxzKj1ccyooWycnIl0pW14nJyJd KlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisgICAgLS0gUmVtb3Zl ICVMT0NBTEUlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNl KAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xzKlxTKkxPQ0FMRVxTKlxzKj0/XHMq KFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKwor ICAgIC0tIFJlbW92ZSAlQ09MTEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2RkbCA6 PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypcUypD T0xMQVRJT05cUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAg ICAgJ2dpJworICAgICk7CisKKyAgICAtLSBSZW1vdmUgRU5DT0RJTkcgYXNzaWdubWVudHMKKyAg ICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisg ICAgICAgICdccypFTkNPRElOR1xzKj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycs CisgICAgICAgICdnaScKKyAgICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5EOwor JCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwogQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkCiAJ RU5DT0RJTkcgdXRmOCBMQ19DT0xMQVRFICJDIiBMQ19DVFlQRSAiQyIgVEVNUExBVEUgdGVtcGxh dGUwOwogQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl90YmQgUkVOQU1FIFRPIHJlZ3Jlc3Npb25f dXRmODsKQEAgLTE5LDYgKzgzLDYyIEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2FmdGVy OwogQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IE9XTkVSIFRPIHJlZ3Jlc3NfZGF0ZGJh X2JlZm9yZTsKIFJFQVNTSUdOIE9XTkVEIEJZIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZSBUTyByZWdy ZXNzX2RhdGRiYV9hZnRlcjsKIAorLS0gVGVzdCBwZ19nZXRfZGF0YWJhc2VfZGRsCistLSBEYXRh YmFzZSBkb2Vzbid0IGV4aXN0cworU0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Np b25fZGF0YWJhc2UnKTsKKworLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdfZ2V0X2RhdGFi YXNlX2RkbChOVUxMKTsKKworLS0gV2l0aG91dCBvcHRpb25zCitTRUxFQ1QgZGRsX2ZpbHRlcihw Z19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnKSk7CisKKy0tIFdpdGggTm8gT3du ZXIKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRm OCcsICdvd25lcicsIGZhbHNlKSk7CisKKy0tIFdpdGggTm8gVGFibGVzcGFjZQorU0VMRUNUIGRk bF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ2RlZmF1bHRz JywgdHJ1ZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSkpOworCistLSBXaXRoIERlZmF1bHRzCitTRUxF Q1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnZGVm YXVsdHMnLCB0cnVlKSk7CisKKy0tIFdpdGggTm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdp dGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fdXRmOCcsICdvd25lcicsIGZhbHNlLCAndGFibGVzcGFjZScsIGZhbHNlLCAnZGVmYXVs dHMnLCB0cnVlKSk7CisKKy0tIFdpdGggUHJldHR5IGZvcm1hdHRlZAorXHBzZXQgZm9ybWF0IHVu YWxpZ25lZAorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lv bl91dGY4JywgJ3ByZXR0eScsIHRydWUpKTsKKworLS0gV2l0aCBObyBPd25lciBhbmQgTm8gVGFi bGVzcGFjZQorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lv bl91dGY4JywgJ3ByZXR0eScsIHRydWUsICdvd25lcicsIGZhbHNlLCAndGFibGVzcGFjZScsIGZh bHNlKSk7CisKKy0tIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRh YmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdwcmV0dHknLCB0cnVlLCAnZGVmYXVsdHMnLCB0 cnVlKSk7CisKKy0tIFdpdGggTm8gT3duZXIsIE5vIFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVs dHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRm OCcsICdwcmV0dHknLCB0cnVlLCAnb3duZXInLCBmYWxzZSwgJ3RhYmxlc3BhY2UnLCBmYWxzZSwg J2RlZmF1bHRzJywgdHJ1ZSkpOworCistLSBUZXN0IHdpdGggdGV4dCB2YWx1ZXM6ICd5ZXMnLCAn bm8nLCAnMScsICcwJywgJ29uJywgJ29mZicKK1xwc2V0IGZvcm1hdCBhbGlnbmVkCistLSBVc2lu ZyAneWVzJyBhbmQgJ25vJworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgn cmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJ25vJywgJ2RlZmF1bHRzJywgJ3llcycpKTsKKwor LS0gVXNpbmcgJzEnIGFuZCAnMCcKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9k ZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICcwJywgJ3RhYmxlc3BhY2UnLCAnMCcsICdk ZWZhdWx0cycsICcxJykpOworCistLSBVc2luZyAnb24nIGFuZCAnb2ZmJworU0VMRUNUIGRkbF9m aWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJ29m ZicsICdwcmV0dHknLCAnb24nKSk7CisKKy0tIE1peGVkIGJvb2xlYW4gYW5kIHRleHQgdmFsdWVz CitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0Zjgn LCAnb3duZXInLCBmYWxzZSwgJ2RlZmF1bHRzJywgJ3RydWUnLCAndGFibGVzcGFjZScsICdubycp KTsKKworLS0gVGVzdCBkdXBsaWNhdGUgb3B0aW9uIChzaG91bGQgZXJyb3IpCitTRUxFQ1QgcGdf Z2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgZmFsc2UsICdvd25l cicsIHRydWUpOworCistLSBUZXN0IGludmFsaWQgdGV4dCB2YWx1ZSAoc2hvdWxkIGVycm9yKQor U0VMRUNUIHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdp bnZhbGlkJyk7CisKIERST1AgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4OworRFJPUCBGVU5DVElP TiBkZGxfZmlsdGVyKHRleHQpOwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0ZGJhX2JlZm9yZTsKIERS T1AgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggM2RhMTlkNDE0MTMuLjYyMmQxMDU0MWQwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtNjAyLDYgKzYwMiw3IEBAIEN5Y2xlQ3RyCiBEQlN0YXRlCiBEYk9pZE5hbWUKIERDSENhY2hl RW50cnkKK0RETE9wdGlvbkRlZgogREVBRExPQ0tfSU5GTwogREVDb3VudEl0ZW0KIERICi0tIAoy LjUxLjAKCg== --000000000000a9c539064cc43114--