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 1vmgVc-00FGgg-18 for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Feb 2026 23:05:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vmgVa-00AiCL-1X for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Feb 2026 23:05:35 +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 1vmgVZ-00AiCB-2L for pgsql-hackers@lists.postgresql.org; Sun, 01 Feb 2026 23:05:34 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vmgVY-0000000064o-1WJx for pgsql-hackers@lists.postgresql.org; Sun, 01 Feb 2026 23:05:33 +0000 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-38320cd563aso42083541fa.0 for ; Sun, 01 Feb 2026 15:05:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769987131; cv=none; d=google.com; s=arc-20240605; b=AIKfcopEDGfrMdHrXKQ1IjJoDxUCVD9s7Qti2lf8GasFwDpXvrVeeQrjAW2zEfm45E RzThJJwEZBXEuJ4hU6eVpVNtoCRFFGd/iaCFn3yE/JfHDmEnT0vDAVTZSae0uN4I42Z+ FtXXfUN0DCklaHQ4rWVwpM9HbrZZne3ER5a07qUN1xT6x0uEXUBs0PkBl/mfeBdZC/UC cUvOUILR/tBIF0FmCe94PIrGgQZCka0HbhEpbijI+MJ0IgiRo2EZcO4ZCb4B23Lc//7/ N6OlCc+zp/QBEtFLC56yVCRggZmknWqnfUPRvBpmvrTRavCjuAH0pdLUGm2qzThzqJpN 5FkQ== 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=VpaViWxhNfDQDPwfQbW5lQ030QJqCRbAq4I6q5kSLLo=; fh=6ksvPEPlmNatR11fLPjw6jLosxB2YB6pANM+E623lCI=; b=kCWo9khMl+NTC6OHmWPWu/MmYEYA+6tCgDVq7lRbw+cAeTtYYrRXmJ48l2nr/j2a54 cvwypyjGiw1eUTBLknNMWsLR0nlbzaj6rEAw0g/4pW6uVw8vEqBLNNPQTZ3KjhhDV5j3 vOeJcqz5IDw6LDWC17BE/r0/tvVOyKhEzhspl+JkHEcI4HERT9f21iPhBP92PqSYKZm7 C7H2RQwTMMIgkvzgoAPRZP3z58cssBm2Fp1GWk+cQMeNn+CxiaFRoVkdUTChtdan6Aho Rd9TmPj5qZGrwY6zeQBuBt0Q61wOAtO3XyNvmxAC07OKPY+ag6ZrbH4JiWcwkac3JIKD XNEQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769987131; x=1770591931; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VpaViWxhNfDQDPwfQbW5lQ030QJqCRbAq4I6q5kSLLo=; b=EtnANBJNSBkhzDznzCw7HGN6CL32Ss0RivpmE9Ux00+7NH+NYrju+dFusGqA0VEATa LP3VTQ1qKPgKS48aavJr0pDJJaK8/IPKwsrKrGPQU3WvgzbkRcrW9WHOLkOnFgtMPA3n iFz3lkPcss1Uw+dd4Yfm7BLW3UExMPxxljUym6YhZoWLuMJ/zH6lDaXDxXMb7CzS/WXa j6z9LcOcE0kU8dtr4FSbEOIysRSe3caNEiqALNjzGXEGkY5j3bJCllz9hCRlPLYbxikZ Am0FanMAgGI6jcPO/l4ct56IqIRXnXNvsiXOTVHwnonIA2CVoFyaYxEHWzpfyoIKqEbL VNaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769987131; x=1770591931; 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=VpaViWxhNfDQDPwfQbW5lQ030QJqCRbAq4I6q5kSLLo=; b=KejQSt9O9giOkvU0XNc1dYSavJYcEjK0Uhj6vK0vg2x/E5H3Al6WR6Cce4DYyrNcoB UDoZU8y1jrtUr8QRBbFO8dSWsJPRiKVtWPXdn/5XULVX6G+u5frNNzCxYs6nU6Ktg2/V RFHam9O5+NtTjP70QiFI+DV+nVPzBVlQ//4bXFF9IPefv8rQPE1jXRaBMRHIO64cMBlg hbiL+i7epIXJQ8lTH9sePtJZFmodFZZwb0njrJKd0CjIOybesRS4ie/aNAJcQKbuwinc s6kIr0mG8kQi6b1tKg6W4BKDoOi3T6zFam1yIBxg4bO9w7tnLugSD4HOQVMRKMfCxXM3 B7EQ== X-Forwarded-Encrypted: i=1; AJvYcCWtcqdnDTFC6vebseGtYWoQWCBrRLmf4hjv5RlxJykkv3NrELaoTq+xR/ylQbazkPUXzM+B/1MAmyhidrrH@lists.postgresql.org X-Gm-Message-State: AOJu0YzN5J8Sng9VgmtVQ9qtJyO2rJt7UM995zWu2jlKrNAGdt9rsIiJ PFaR91L6thdwufjjt1V4hITuc3uluc8Bns4Fys66z92lgIlpK1AXi9uSahqnnYad4MqxB26R58X QyD43j4kxbXv7ln5polWQ2tyyK9AS8js= X-Gm-Gg: AZuq6aL4UDF2m4nlnehkC4CbS2NsGimD1eNw4P3m0Z1eoGBlnUaXzhEKPY3QQjep4n4 8rMH1nS2qqjaBQXq+1+18zLjSJqUnoaoFZKFUsx5Basd7x73qniczTqLjTAPR6jDCi/oEJL7CX1 9xnRvZX9Q7Rve3NEpL6cF4nSF0PF0T0PitJc4nKTC9sXAfi1K+wRX0QqJGrVaHme8I7rhqiy1oZ 0JSF+OPGTLc5Cfs+uX5255H63A1KFWnWfj5x04AYIhGNNiRxV0hUk+yh/8TnNV5uJLr X-Received: by 2002:a2e:a58b:0:b0:385:bc69:fc5 with SMTP id 38308e7fff4ca-38646601123mr36559021fa.20.1769987130403; Sun, 01 Feb 2026 15:05:30 -0800 (PST) MIME-Version: 1.0 References: <48261e54-c4f1-4bde-a4a9-4f3698a6b380@app.fastmail.com> In-Reply-To: From: Gyan Sreejith Date: Sun, 1 Feb 2026 18:05:19 -0500 X-Gm-Features: AZwV_Qi47WBywjJ3Cxc1hmZstkTeUKu6vMBXgHloALH9aUI_KWTw5eeLLtebJlY Message-ID: Subject: Re: [Proposal] Adding Log File Capability to pg_createsubscriber To: vignesh C Cc: Amit Kapila , Euler Taveira , "kuroda.hayato@fujitsu.com" , "pgsql-hackers@lists.postgresql.org" , Peter Smith Content-Type: multipart/mixed; boundary="0000000000002a471c0649cb3e6d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002a471c0649cb3e6d Content-Type: multipart/alternative; boundary="0000000000002a471a0649cb3e6b" --0000000000002a471a0649cb3e6b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you! I have made the suggested changes. In addition, I added a wrapper for pg_fatal to write to the file and then do everything that pg_fatal would do= . I have attached the patch. Regards, Gyan On Fri, Jan 30, 2026 at 4:35=E2=80=AFAM vignesh C wro= te: > On Mon, 26 Jan 2026 at 07:08, Gyan Sreejith > wrote: > > > > Thank you, I have made the changes and attached the patch. > > Few comments: > 1) Adding \n at the end will assert as pg_log_generic_v has the > following Assert: > Assert(fmt[strlen(fmt) - 1] !=3D '\n'); > > @@ -1106,7 +1220,7 @@ check_subscriber(const struct LogicalRepInfo *dbinf= o) > int max_reporigins; > int max_wprocs; > > - pg_log_info("checking settings on subscriber"); > + INFO("checking settings on subscriber\n"); > > You can run in verbose mode without -l to see this issue > > 2) There is a chance that directory creation can fail, it should be > checked and error should be thrown: > + if (stat(opt.log_dir, &statbuf) !=3D 0) > + { > + if (errno =3D=3D ENOENT) > + { > + mkdir(opt.log_dir, > S_IRWXU); > + INFO("log directory > created"); > > 3) Can you include an fflush after the fprintf so that there is no log > content lost in case of abrupt failure: > + va_start(args, format); > + vfprintf(internal_log_file_fp, format, args); > + fprintf(internal_log_file_fp, "\n"); > + va_end(args); > > 4) Since you are closing the log file early, the logs after this point > like the drop publication/drop replication slot in error flow will be > lost. They will neither appear in the console nor in the log file: > * Clean up objects created by pg_createsubscriber. > @@ -212,6 +315,9 @@ cleanup_objects_atexit(void) > if (success) > return; > > + if (internal_log_file_fp !=3D NULL) > + fclose(internal_log_file_fp); > + > > 5) Since there is only one caller for this function and not needed by > anyone else, this code can be moved to the caller: > +static void > +populate_timestamp(char *timestr, size_t ts_len) > +{ > + struct timeval tval; > + time_t now; > + struct tm tmbuf; > + > + gettimeofday(&tval, NULL); > + > + /* > + * MSVC's implementation of timeval uses a long for tv_sec, > however, > + * localtime() expects a time_t pointer. Here we'll assign tv_se= c > to a > + * local time_t variable so that we pass localtime() the correct > pointer > + * type. > + */ > + now =3D tval.tv_sec; > + strftime(timestr, ts_len, > + "%Y-%m-%d-%H-%M-%S", > + localtime_r(&now, &tmbuf)); > + /* append microseconds */ > + snprintf(timestr + strlen(timestr), ts_len - strlen(timestr), > + ".%06u", (unsigned int) (tval.tv_usec)); > +} > > Regards, > Vignesh > --0000000000002a471a0649cb3e6b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you!

I have made the suggested ch= anges. In addition, I added a wrapper for pg_fatal to write to the file and= then do everything that pg_fatal would do.
I have attached the p= atch.

Regards,
Gyan

On Fri, Jan 30, 2026 at 4:35=E2=80=AFAM vignesh C <vignesh21@gmail.com> wrote:
On Mon, 26 Jan 2026 at 07:08, G= yan Sreejith <gyan.sreejith@gmail.com> wrote:
>
> Thank you, I have made the changes and attached the patch.

Few comments:
1) Adding \n at the end will assert as pg_log_generic_v has the
following Assert:
Assert(fmt[strlen(fmt) - 1] !=3D '\n');

@@ -1106,7 +1220,7 @@ check_subscriber(const struct LogicalRepInfo *dbinfo)=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0max_reporigins;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0max_wprocs;

-=C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_info("checking settings on subscrib= er");
+=C2=A0 =C2=A0 =C2=A0 =C2=A0INFO("checking settings on subscriber\n&qu= ot;);

You can run in verbose mode without -l to see this issue

2) There is a chance that directory creation can fail, it should be
checked and error should be thrown:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (stat(opt.log_dir, &statbuf) != =3D 0)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (errno= =3D=3D ENOENT)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0mkdir(opt.log_dir, S_IRWXU);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0INFO("log directory created");

3) Can you include an fflush after the fprintf so that there is no log
content lost in case of abrupt failure:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0va_start(args, form= at);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0vfprintf(internal_l= og_file_fp, format, args);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fprintf(internal_lo= g_file_fp, "\n");
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0va_end(args);

4) Since you are closing the log file early, the logs after this point
like the drop publication/drop replication slot in error flow will be
lost. They will neither appear in the console nor in the log file:
=C2=A0 * Clean up objects created by pg_createsubscriber.
@@ -212,6 +315,9 @@ cleanup_objects_atexit(void)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (success)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return;

+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fclose(internal_log= _file_fp);
+

5) Since there is only one caller for this function and not needed by
anyone else, this code can be moved to the caller:
+static void
+populate_timestamp(char *timestr, size_t ts_len)
+{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0struct timeval tval;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0time_t=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 now; +=C2=A0 =C2=A0 =C2=A0 =C2=A0struct tm=C2=A0 =C2=A0 =C2=A0 =C2=A0tmbuf;
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0gettimeofday(&tval, NULL);
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/*
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * MSVC's implementation of timeval uses a = long for tv_sec, however,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * localtime() expects a time_t pointer.=C2=A0 = Here we'll assign tv_sec to a
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * local time_t variable so that we pass localt= ime() the correct pointer
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * type.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0now =3D tval.tv_sec;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0strftime(timestr, ts_len,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 "%Y-%m-%d-%H-%M-%S",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 localtime_r(&now, &tmbuf));
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* append microseconds */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(timestr + strlen(timestr), ts_len - st= rlen(timestr),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 ".%06u", (unsigned int) (tval.tv_usec));
+}

Regards,
Vignesh
--0000000000002a471a0649cb3e6b-- --0000000000002a471c0649cb3e6d Content-Type: application/octet-stream; name="v4-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Disposition: attachment; filename="v4-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml4cl4ye0 RnJvbSA2YWNiYzc2MWRjZTNkOWJlODlhNWJjNDYxZTIxYjYwNGQ0YjMwZGE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHeWFuIFNyZWVqaXRoIDxneWFuLnNyZWVqaXRoQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAxIEZlYiAyMDI2IDE3OjU5OjQ0IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NF0gQWRkIGEgbmV3IGFyZ3VtZW50IC1sIDxsb2dkaXI+IHRvIHBnX2NyZWF0ZXN1YnNjcmliZXIu CgpFbmFibGluZyB0aGUgb3B0aW9uIHRvIHdyaXRlIG1lc3NhZ2VzIHRvIGxvZyBmaWxlcyBpbiB0 aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KQSBuZXcgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaWYgcmVx dWlyZWQsIGFuZCB0d28gbmV3IGxvZ2ZpbGVzICh3aXRoIHRpbWVzdGFtcHMgaW4gdGhlaXIgbmFt ZXMpIGFyZSBhZGRlZCB0byB0aGUgZGlyZWN0b3J5OgoxLiBwZ19jcmVhdGVzdWJzY3JpYmVyX3Nl cnZlcl90aW1lc3RhbXAubG9nICAtIGNhcHR1cmVzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gc3RhcnRp bmcgYW5kIHN0b3BwaW5nIHRoZSBzdGFuZGJ5IHNlcnZlci4KMi4gcGdfY3JlYXRlc3Vic2NyaWJl cl9pbnRlcm5hbF90aW1lc3RhbXAubG9nIC0gY2FwdHVyZXMgaW50ZXJuYWwgZGlhZ25vc3RpYyBv dXRwdXQgZnJvbSBwZ19jcmVhdGVzdWJzY3JpYmVyLgoKRm9yIGV4YW1wbGUsIGlmIHdlIHNwZWNp ZnkgLWwgYWJjIGFzIGFuIGFyZ3VtZW50LCBhbmQgaWYgdGhlIHRpbWVzdGFtcCBvbiBydW5uaW5n IGl0IGlzIDIwMjYtMDEtMTktMjAtNDMtMTcuMjA0MjQwLCBhIGRpcmVjdG9yeSBhYmMgaXMgY3Jl YXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHksIGFuZCB0aGUgZGlyZWN0b3J5IHdpbGwg Y29udGFpbiB0aGUgdHdvIGxvZyBmaWxlcyBwZ19jcmVhdGVzdWJzY3JpYmVyX3NlcnZlcl8yMDI2 LTAxLTE5LTIwLTQzLTE3LjIwNDI0MC5sb2cgYW5kIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJu YWxfMjAyNi0wMS0xOS0yMC00My0xNy4yMDQyNDAubG9nCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z19jcmVhdGVzdWJzY3JpYmVyLnNnbWwgICAgIHwgIDIyICsKIHNyYy9iaW4vcGdfYmFzZWJhY2t1 cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgICB8IDQwNiArKysrKysrKysrKystLS0tLS0KIC4uLi90 LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsICAgICAgICAgICAgICB8ICAzNiArLQogMyBmaWxl cyBjaGFuZ2VkLCAzMzMgaW5zZXJ0aW9ucygrKSwgMTMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKaW5kZXggY2Y0NWZmMzU3M2QuLjhjYjcw NDAzOTMxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbApAQCAt MTM2LDYgKzEzNiwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgPC9saXN0aXRl bT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJt PjxvcHRpb24+LWwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRpcmVjdG9yeTwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICA8dGVybT48b3B0aW9uPi0tbG9nZGlyPTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgU3BlY2lm eSB0aGUgbmFtZSBvZiB0aGUgbG9nIGRpcmVjdG9yeS4gQSBuZXcgZGlyZWN0b3J5IGlzIGNyZWF0 ZWQgd2l0aCB0aGlzIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhpc3QuIFRoZSBmb2xsb3dpbmcgdHdv IGxvZyBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHVtYXNrIG9mIDA3NyBzbyB0aGF0IGFj Y2VzcyBpcyBkaXNhbGxvd2VkIHRvIG90aGVyIHVzZXJzIGJ5IGRlZmF1bHQuIFRoZSB0aW1lc3Rh bXAgdGhhdCBpcyBhZGRlZCB0byB0aGUgbmFtZSB3aWxsIGluZGljYXRlIHRoZSB0aW1lIGF0IHdo aWNoIHBnX2NyZWF0ZXN1YnNjcmliZXIgd2FzIHJ1bi4KKyAgICAgICA8aXRlbWl6ZWRsaXN0Pgor ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBwZ19jcmVhdGVz dWJzY3JpYmVyX3NlcnZlcl90aW1lc3RhbXAubG9nIHdoaWNoIGNhcHR1cmVzIGxvZ3MgcmVsYXRl ZCB0byBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGhlIHN0YW5kYnkgc2VydmVyLAorICAgICAgICAg PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICBwZ19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsX3RpbWVzdGFt cC5sb2cgd2hpY2ggY2FwdHVyZXMgaW50ZXJuYWwgZGlhZ25vc3RpYyBvdXRwdXQgKHZhbGlkYXRp b25zLCBjaGVja3MsIGV0Yy4pCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+ CisgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT48 b3B0aW9uPi1uPC9vcHRpb24+PC90ZXJtPgogICAgICA8dGVybT48b3B0aW9uPi0tZHJ5LXJ1bjwv b3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVh dGVzdWJzY3JpYmVyLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJl ci5jCmluZGV4IDJiYzg0NTA1YWFiLi4zN2NjNjhlZmJjNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYworKysgYi9zcmMvYmluL3BnX2Jhc2Vi YWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCkBAIC00OSwxMCArNDksNDIgQEAKICNkZWZpbmUg SU5DTFVERURfQ09ORl9GSUxFCQkJInBnX2NyZWF0ZXN1YnNjcmliZXIuY29uZiIKICNkZWZpbmUg SU5DTFVERURfQ09ORl9GSUxFX0RJU0FCTEVECUlOQ0xVREVEX0NPTkZfRklMRSAiLmRpc2FibGVk IgogCisjZGVmaW5lIFNFUlZFUl9MT0dfRklMRV9OQU1FICJwZ19jcmVhdGVzdWJzY3JpYmVyX3Nl cnZlciIKKyNkZWZpbmUgSU5URVJOQUxfTE9HX0ZJTEVfTkFNRSAicGdfY3JlYXRlc3Vic2NyaWJl cl9pbnRlcm5hbCIKKworI2RlZmluZSBJTkZPKC4uLikgZG97XAorCWlmIChpbnRlcm5hbF9sb2df ZmlsZV9mcCAhPSBOVUxMKSBcCisJCWludGVybmFsX2xvZ19maWxlX3dyaXRlKF9fVkFfQVJHU19f KTsgXAorCWVsc2UgXAorCQlwZ19sb2dfaW5mbyhfX1ZBX0FSR1NfXyk7XAorfSB3aGlsZSgwKQor CisjZGVmaW5lIElORk9fSElOVCguLi4pIGRve1wKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAg IT0gTlVMTCkgXAorCQlpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShfX1ZBX0FSR1NfXyk7IFwKKwll bHNlIFwKKwkJcGdfbG9nX2luZm9faGludChfX1ZBX0FSR1NfXyk7XAorfSB3aGlsZSgwKQorCisj ZGVmaW5lIERFQlVHKC4uLikgZG97XAorCWlmIChpbnRlcm5hbF9sb2dfZmlsZV9mcCAhPSBOVUxM KSBcCisJCWludGVybmFsX2xvZ19maWxlX3dyaXRlKF9fVkFfQVJHU19fKTsgXAorCWVsc2UgXAor CQlwZ19sb2dfZGVidWcoX19WQV9BUkdTX18pO1wKK30gd2hpbGUoMCkKKworI2RlZmluZSBGQVRB TCguLi4pIGRve1wKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkgXAorCQlpbnRl cm5hbF9sb2dfZmlsZV93cml0ZShfX1ZBX0FSR1NfXyk7IFwKKwlwZ19mYXRhbChfX1ZBX0FSR1Nf Xyk7IC8qIGNhbGwgcGdfZmF0YWwgYWZ0ZXIgd3JpdGluZyB0byBsb2dzICovIFwKK30gd2hpbGUo MCkKKworCiAvKiBDb21tYW5kLWxpbmUgb3B0aW9ucyAqLwogc3RydWN0IENyZWF0ZVN1YnNjcmli ZXJPcHRpb25zCiB7CiAJY2hhcgkgICAqY29uZmlnX2ZpbGU7CS8qIGNvbmZpZ3VyYXRpb24gZmls ZSAqLworCWNoYXIJICAgKmxvZ19kaXI7CQkvKiBsb2cgZGlyZWN0b3J5IG5hbWUgKi8KIAljaGFy CSAgICpwdWJfY29ubmluZm9fc3RyOwkvKiBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8K IAljaGFyCSAgICpzb2NrZXRfZGlyOwkJLyogZGlyZWN0b3J5IGZvciBVbml4LWRvbWFpbiBzb2Nr ZXQsIGlmIGFueSAqLwogCWNoYXIJICAgKnN1Yl9wb3J0OwkJLyogc3Vic2NyaWJlciBwb3J0IG51 bWJlciAqLwpAQCAtMTQ2LDYgKzE3OCw5IEBAIHN0YXRpYyB2b2lkIGRyb3BfZXhpc3Rpbmdfc3Vi c2NyaXB0aW9uKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3VibmFtZSwKIAkJCQkJCQkJCSAg IGNvbnN0IGNoYXIgKmRibmFtZSk7CiBzdGF0aWMgdm9pZCBnZXRfcHVibGlzaGVyX2RhdGFiYXNl cyhzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwKIAkJCQkJCQkJCWJvb2wgZGJu YW1lc3BlY2lmaWVkKTsKK3N0YXRpYyB2b2lkCisJCQlpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShj b25zdCBjaGFyICpmb3JtYXQsLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAy KSkpOworCiAKICNkZWZpbmUJV0FJVF9JTlRFUlZBTAkxCQkvKiAxIHNlY29uZCAqLwogCkBAIC0x NjcsNiArMjAyLDEwIEBAIHN0YXRpYyBwZ19wcm5nX3N0YXRlIHBybmdfc3RhdGU7CiBzdGF0aWMg Y2hhciAqcGdfY3RsX3BhdGggPSBOVUxMOwogc3RhdGljIGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGgg PSBOVUxMOwogCitzdGF0aWMgRklMRSAqaW50ZXJuYWxfbG9nX2ZpbGVfZnAgPSBOVUxMOwkvKiBG aWxlIHB0ciB0byBsb2cgYWxsIG1lc3NhZ2VzIHRvICovCitzdGF0aWMgY2hhciAqbG9nX3RpbWVz dGFtcCA9IE5VTEw7CS8qIFRpbWVzdGFtcCB0byBiZSB1c2VkIGluIGFsbCBsb2cgZmlsZQorCQkJ CQkJCQkJICogbmFtZXMgKi8KKwogLyogc3RhbmRieSAvIHN1YnNjcmliZXIgZGF0YSBkaXJlY3Rv cnkgKi8KIHN0YXRpYyBjaGFyICpzdWJzY3JpYmVyX2RpciA9IE5VTEw7CiAKQEAgLTE3NCw2ICsy MTMsNTAgQEAgc3RhdGljIGJvb2wgcmVjb3ZlcnlfZW5kZWQgPSBmYWxzZTsKIHN0YXRpYyBib29s IHN0YW5kYnlfcnVubmluZyA9IGZhbHNlOwogc3RhdGljIGJvb2wgcmVjb3ZlcnlfcGFyYW1zX3Nl dCA9IGZhbHNlOwogCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfbG9nX2ZpbGVfd3JpdGUoY29uc3Qg Y2hhciAqZm9ybWF0LC4uLikKK3sKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkK Kwl7CisJCXZhX2xpc3QJCWFyZ3M7CisKKwkJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwkJdmZw cmludGYoaW50ZXJuYWxfbG9nX2ZpbGVfZnAsIGZvcm1hdCwgYXJncyk7CisJCWZwcmludGYoaW50 ZXJuYWxfbG9nX2ZpbGVfZnAsICJcbiIpOworCQlmZmx1c2goaW50ZXJuYWxfbG9nX2ZpbGVfZnAp OworCQl2YV9lbmQoYXJncyk7CisJfQorfQorCisvKgorICogT3BlbiBhIG5ldyBsb2dmaWxlIHdp dGggcHJvcGVyIHBlcm1pc3Npb25zLgorICogRnJvbSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5 c2xvZ2dlci5jCisgKi8KK3N0YXRpYyBGSUxFICoKK2xvZ2ZpbGVfb3Blbihjb25zdCBjaGFyICpm aWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFCSAgICpmaDsKKwltb2RlX3QJCW91 bWFzazsKKworCW91bWFzayA9IHVtYXNrKChtb2RlX3QpICgofihTX0lSVVNSIHwgU19JV1VTUikp ICYgKFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykpKTsKKwlmaCA9IGZvcGVuKGZpbGVuYW1l LCBtb2RlKTsKKwl1bWFzayhvdW1hc2spOworCisJaWYgKGZoKQorCXsKKwkJc2V0dmJ1ZihmaCwg TlVMTCwgUEdfSU9MQkYsIDApOworCisjaWZkZWYgV0lOMzIKKwkJLyogdXNlIENSTEYgbGluZSBl bmRpbmdzIG9uIFdpbmRvd3MgKi8KKwkJX3NldG1vZGUoX2ZpbGVubyhmaCksIF9PX1RFWFQpOwor I2VuZGlmCisJfQorCWVsc2UKKwkJRkFUQUwoImNvdWxkIG5vdCBvcGVuIGxvZyBmaWxlIFwiJXNc IjogJW0iLAorCQkJICBmaWxlbmFtZSk7CisKKwlyZXR1cm4gZmg7Cit9CiAKIC8qCiAgKiBDbGVh biB1cCBvYmplY3RzIGNyZWF0ZWQgYnkgcGdfY3JlYXRlc3Vic2NyaWJlci4KQEAgLTI2OSw2ICsz NTIsMTIgQEAgY2xlYW51cF9vYmplY3RzX2F0ZXhpdCh2b2lkKQogCiAJaWYgKHN0YW5kYnlfcnVu bmluZykKIAkJc3RvcF9zdGFuZGJ5X3NlcnZlcihzdWJzY3JpYmVyX2Rpcik7CisKKwlpZiAoaW50 ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwl7CisJCWZjbG9zZShpbnRlcm5hbF9sb2dfZmls ZV9mcCk7CisJCWludGVybmFsX2xvZ19maWxlX2ZwID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2 b2lkCkBAIC0yODMsNiArMzcyLDcgQEAgdXNhZ2Uodm9pZCkKIAkJCSAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlcyBhbmQgZGF0YWJhc2VzIHRoYXQgZG9uJ3QgYWxs b3cgY29ubmVjdGlvbnNcbiIpKTsKIAlwcmludGYoXygiICAtZCwgLS1kYXRhYmFzZT1EQk5BTUUg ICAgICAgICAgIGRhdGFiYXNlIGluIHdoaWNoIHRvIGNyZWF0ZSBhIHN1YnNjcmlwdGlvblxuIikp OwogCXByaW50ZihfKCIgIC1ELCAtLXBnZGF0YT1EQVRBRElSICAgICAgICAgICAgbG9jYXRpb24g Zm9yIHRoZSBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLWws IC0tbG9nZGlyPUxPR0RJUiAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgdGhlIG5ldyBsb2cgZGly ZWN0b3J5XG4iKSk7CiAJcHJpbnRmKF8oIiAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAg ICBkcnkgcnVuLCBqdXN0IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lXG4iKSk7CiAJcHJpbnRmKF8o IiAgLXAsIC0tc3Vic2NyaWJlci1wb3J0PVBPUlQgICAgICBzdWJzY3JpYmVyIHBvcnQgbnVtYmVy IChkZWZhdWx0ICVzKVxuIiksIERFRkFVTFRfU1VCX1BPUlQpOwogCXByaW50ZihfKCIgIC1QLCAt LXB1Ymxpc2hlci1zZXJ2ZXI9Q09OTlNUUiAgcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nXG4i KSk7CkBAIC00MTksMTQgKzUwOSwxNCBAQCBnZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKmFyZ3Yw LCBjb25zdCBjaGFyICpwcm9nbmFtZSkKIAkJCXN0cmxjcHkoZnVsbF9wYXRoLCBwcm9nbmFtZSwg c2l6ZW9mKGZ1bGxfcGF0aCkpOwogCiAJCWlmIChyZXQgPT0gLTEpCi0JCQlwZ19mYXRhbCgicHJv Z3JhbSBcIiVzXCIgaXMgbmVlZGVkIGJ5ICVzIGJ1dCB3YXMgbm90IGZvdW5kIGluIHRoZSBzYW1l IGRpcmVjdG9yeSBhcyBcIiVzXCIiLAotCQkJCQkgcHJvZ25hbWUsICJwZ19jcmVhdGVzdWJzY3Jp YmVyIiwgZnVsbF9wYXRoKTsKKwkJCUZBVEFMKCJwcm9ncmFtIFwiJXNcIiBpcyBuZWVkZWQgYnkg JXMgYnV0IHdhcyBub3QgZm91bmQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIFwiJXNcIiIsCisJ CQkJICBwcm9nbmFtZSwgInBnX2NyZWF0ZXN1YnNjcmliZXIiLCBmdWxsX3BhdGgpOwogCQllbHNl Ci0JCQlwZ19mYXRhbCgicHJvZ3JhbSBcIiVzXCIgd2FzIGZvdW5kIGJ5IFwiJXNcIiBidXQgd2Fz IG5vdCB0aGUgc2FtZSB2ZXJzaW9uIGFzICVzIiwKLQkJCQkJIHByb2duYW1lLCBmdWxsX3BhdGgs ICJwZ19jcmVhdGVzdWJzY3JpYmVyIik7CisJCQlGQVRBTCgicHJvZ3JhbSBcIiVzXCIgd2FzIGZv dW5kIGJ5IFwiJXNcIiBidXQgd2FzIG5vdCB0aGUgc2FtZSB2ZXJzaW9uIGFzICVzIiwKKwkJCQkg IHByb2duYW1lLCBmdWxsX3BhdGgsICJwZ19jcmVhdGVzdWJzY3JpYmVyIik7CiAJfQogCi0JcGdf bG9nX2RlYnVnKCIlcyBwYXRoIGlzOiAgJXMiLCBwcm9nbmFtZSwgZXhlY19wYXRoKTsKKwlERUJV RygiJXMgcGF0aCBpczogICVzIiwgcHJvZ25hbWUsIGV4ZWNfcGF0aCk7CiAKIAlyZXR1cm4gZXhl Y19wYXRoOwogfQpAQCAtNDQzLDE1ICs1MzMsMTUgQEAgY2hlY2tfZGF0YV9kaXJlY3RvcnkoY29u c3QgY2hhciAqZGF0YWRpcikKIAl1aW50MzIJCW1ham9yX3ZlcnNpb247CiAJY2hhcgkgICAqdmVy c2lvbl9zdHI7CiAKLQlwZ19sb2dfaW5mbygiY2hlY2tpbmcgaWYgZGlyZWN0b3J5IFwiJXNcIiBp cyBhIGNsdXN0ZXIgZGF0YSBkaXJlY3RvcnkiLAotCQkJCWRhdGFkaXIpOworCUlORk8oImNoZWNr aW5nIGlmIGRpcmVjdG9yeSBcIiVzXCIgaXMgYSBjbHVzdGVyIGRhdGEgZGlyZWN0b3J5IiwKKwkJ IGRhdGFkaXIpOwogCiAJaWYgKHN0YXQoZGF0YWRpciwgJnN0YXRidWYpICE9IDApCiAJewogCQlp ZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJcGdfZmF0YWwoImRhdGEgZGlyZWN0b3J5IFwiJXNcIiBk b2VzIG5vdCBleGlzdCIsIGRhdGFkaXIpOworCQkJRkFUQUwoImRhdGEgZGlyZWN0b3J5IFwiJXNc IiBkb2VzIG5vdCBleGlzdCIsIGRhdGFkaXIpOwogCQllbHNlCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IGFjY2VzcyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRhdGFkaXIpOworCQkJRkFUQUwoImNv dWxkIG5vdCBhY2Nlc3MgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYXRhZGlyKTsKIAl9CiAKIAkv KgpAQCAtNTQ3LDE0ICs2MzcsMTQgQEAgc3RvcmVfcHViX3N1Yl9pbmZvKGNvbnN0IHN0cnVjdCBD cmVhdGVTdWJzY3JpYmVyT3B0aW9ucyAqb3B0LAogCQkJZGJpbmZvW2ldLnN1Ym5hbWUgPSBOVUxM OwogCQkvKiBPdGhlciBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgbGF0ZXIgKi8KIAotCQlwZ19sb2df ZGVidWcoInB1Ymxpc2hlciglZCk6IHB1YmxpY2F0aW9uOiAlcyA7IHJlcGxpY2F0aW9uIHNsb3Q6 ICVzIDsgY29ubmVjdGlvbiBzdHJpbmc6ICVzIiwgaSwKLQkJCQkJIGRiaW5mb1tpXS5wdWJuYW1l ID8gZGJpbmZvW2ldLnB1Ym5hbWUgOiAiKGF1dG8pIiwKLQkJCQkJIGRiaW5mb1tpXS5yZXBsc2xv dG5hbWUgPyBkYmluZm9baV0ucmVwbHNsb3RuYW1lIDogIihhdXRvKSIsCi0JCQkJCSBkYmluZm9b aV0ucHViY29ubmluZm8pOwotCQlwZ19sb2dfZGVidWcoInN1YnNjcmliZXIoJWQpOiBzdWJzY3Jp cHRpb246ICVzIDsgY29ubmVjdGlvbiBzdHJpbmc6ICVzLCB0d29fcGhhc2U6ICVzIiwgaSwKLQkJ CQkJIGRiaW5mb1tpXS5zdWJuYW1lID8gZGJpbmZvW2ldLnN1Ym5hbWUgOiAiKGF1dG8pIiwKLQkJ CQkJIGRiaW5mb1tpXS5zdWJjb25uaW5mbywKLQkJCQkJIGRiaW5mb3MudHdvX3BoYXNlID8gInRy dWUiIDogImZhbHNlIik7CisJCURFQlVHKCJwdWJsaXNoZXIoJWQpOiBwdWJsaWNhdGlvbjogJXMg OyByZXBsaWNhdGlvbiBzbG90OiAlcyA7IGNvbm5lY3Rpb24gc3RyaW5nOiAlcyIsIGksCisJCQkg IGRiaW5mb1tpXS5wdWJuYW1lID8gZGJpbmZvW2ldLnB1Ym5hbWUgOiAiKGF1dG8pIiwKKwkJCSAg ZGJpbmZvW2ldLnJlcGxzbG90bmFtZSA/IGRiaW5mb1tpXS5yZXBsc2xvdG5hbWUgOiAiKGF1dG8p IiwKKwkJCSAgZGJpbmZvW2ldLnB1YmNvbm5pbmZvKTsKKwkJREVCVUcoInN1YnNjcmliZXIoJWQp OiBzdWJzY3JpcHRpb246ICVzIDsgY29ubmVjdGlvbiBzdHJpbmc6ICVzLCB0d29fcGhhc2U6ICVz IiwgaSwKKwkJCSAgZGJpbmZvW2ldLnN1Ym5hbWUgPyBkYmluZm9baV0uc3VibmFtZSA6ICIoYXV0 bykiLAorCQkJICBkYmluZm9baV0uc3ViY29ubmluZm8sCisJCQkgIGRiaW5mb3MudHdvX3BoYXNl ID8gInRydWUiIDogImZhbHNlIik7CiAKIAkJaWYgKG51bV9wdWJzID4gMCkKIAkJCXB1YmNlbGwg PSBwdWJjZWxsLT5uZXh0OwpAQCAtNjM1LDcgKzcyNSw3IEBAIGdldF9wcmltYXJ5X3N5c2lkKGNv bnN0IGNoYXIgKmNvbm5pbmZvKQogCVBHcmVzdWx0ICAgKnJlczsKIAl1aW50NjQJCXN5c2lkOwog Ci0JcGdfbG9nX2luZm8oImdldHRpbmcgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBwdWJsaXNoZXIi KTsKKwlJTkZPKCJnZXR0aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gcHVibGlzaGVyIik7CiAK IAljb25uID0gY29ubmVjdF9kYXRhYmFzZShjb25uaW5mbywgdHJ1ZSk7CiAKQEAgLTY1NSw3ICs3 NDUsNyBAQCBnZXRfcHJpbWFyeV9zeXNpZChjb25zdCBjaGFyICpjb25uaW5mbykKIAogCXN5c2lk ID0gc3RydG91NjQoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBOVUxMLCAxMCk7CiAKLQlwZ19sb2df aW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJSIgUFJJdTY0ICIgb24gcHVibGlzaGVyIiwgc3lz aWQpOworCUlORk8oInN5c3RlbSBpZGVudGlmaWVyIGlzICUiIFBSSXU2NCAiIG9uIHB1Ymxpc2hl ciIsIHN5c2lkKTsKIAogCVBRY2xlYXIocmVzKTsKIAlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4s IGZhbHNlKTsKQEAgLTY3NSwxNSArNzY1LDE1IEBAIGdldF9zdGFuZGJ5X3N5c2lkKGNvbnN0IGNo YXIgKmRhdGFkaXIpCiAJYm9vbAkJY3JjX29rOwogCXVpbnQ2NAkJc3lzaWQ7CiAKLQlwZ19sb2df aW5mbygiZ2V0dGluZyBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHN1YnNjcmliZXIiKTsKKwlJTkZP KCJnZXR0aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20gc3Vic2NyaWJlciIpOwogCiAJY2YgPSBn ZXRfY29udHJvbGZpbGUoZGF0YWRpciwgJmNyY19vayk7CiAJaWYgKCFjcmNfb2spCi0JCXBnX2Zh dGFsKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CisJCUZBVEFMKCJjb250 cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CiAKIAlzeXNpZCA9IGNmLT5zeXN0ZW1f aWRlbnRpZmllcjsKIAotCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRlbnRpZmllciBpcyAlIiBQUkl1 NjQgIiBvbiBzdWJzY3JpYmVyIiwgc3lzaWQpOworCUlORk8oInN5c3RlbSBpZGVudGlmaWVyIGlz ICUiIFBSSXU2NCAiIG9uIHN1YnNjcmliZXIiLCBzeXNpZCk7CiAKIAlwZ19mcmVlKGNmKTsKIApA QCAtNzAyLDE4ICs3OTIsMTkgQEAgbW9kaWZ5X3N1YnNjcmliZXJfc3lzaWQoY29uc3Qgc3RydWN0 IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zICpvcHQpCiAJYm9vbAkJY3JjX29rOwogCXN0cnVjdCB0 aW1ldmFsIHR2OwogCisJY2hhcgkgICAqb3V0X2ZpbGU7CiAJY2hhcgkgICAqY21kX3N0cjsKIAot CXBnX2xvZ19pbmZvKCJtb2RpZnlpbmcgc3lzdGVtIGlkZW50aWZpZXIgb2Ygc3Vic2NyaWJlciIp OworCUlORk8oIm1vZGlmeWluZyBzeXN0ZW0gaWRlbnRpZmllciBvZiBzdWJzY3JpYmVyIik7CiAK IAljZiA9IGdldF9jb250cm9sZmlsZShzdWJzY3JpYmVyX2RpciwgJmNyY19vayk7CiAJaWYgKCFj cmNfb2spCi0JCXBnX2ZhdGFsKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7 CisJCUZBVEFMKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CiAKIAkvKgog CSAqIFNlbGVjdCBhIG5ldyBzeXN0ZW0gaWRlbnRpZmllci4KIAkgKgotCSAqIFhYWCB0aGlzIGNv ZGUgd2FzIGV4dHJhY3RlZCBmcm9tIEJvb3RTdHJhcFhMT0coKS4KKwkgKiBYWFggdGhpcyBjb2Rl IHdhcyBleHRyYWN0ZWQgZnJvbSBCb290U3RyYXBYSU5GTygpLgogCSAqLwogCWdldHRpbWVvZmRh eSgmdHYsIE5VTEwpOwogCWNmLT5zeXN0ZW1faWRlbnRpZmllciA9ICgodWludDY0KSB0di50dl9z ZWMpIDw8IDMyOwpAQCAtNzIxLDMzICs4MTIsMzkgQEAgbW9kaWZ5X3N1YnNjcmliZXJfc3lzaWQo Y29uc3Qgc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zICpvcHQpCiAJY2YtPnN5c3RlbV9p ZGVudGlmaWVyIHw9IGdldHBpZCgpICYgMHhGRkY7CiAKIAlpZiAoZHJ5X3J1bikKLQkJcGdfbG9n X2luZm8oImRyeS1ydW46IHdvdWxkIHNldCBzeXN0ZW0gaWRlbnRpZmllciB0byAlIiBQUkl1NjQg IiBvbiBzdWJzY3JpYmVyIiwKLQkJCQkJY2YtPnN5c3RlbV9pZGVudGlmaWVyKTsKKwkJSU5GTygi ZHJ5LXJ1bjogd291bGQgc2V0IHN5c3RlbSBpZGVudGlmaWVyIHRvICUiIFBSSXU2NCAiIG9uIHN1 YnNjcmliZXIiLAorCQkJIGNmLT5zeXN0ZW1faWRlbnRpZmllcik7CiAJZWxzZQogCXsKIAkJdXBk YXRlX2NvbnRyb2xmaWxlKHN1YnNjcmliZXJfZGlyLCBjZiwgdHJ1ZSk7Ci0JCXBnX2xvZ19pbmZv KCJzeXN0ZW0gaWRlbnRpZmllciBpcyAlIiBQUkl1NjQgIiBvbiBzdWJzY3JpYmVyIiwKLQkJCQkJ Y2YtPnN5c3RlbV9pZGVudGlmaWVyKTsKKwkJSU5GTygic3lzdGVtIGlkZW50aWZpZXIgaXMgJSIg UFJJdTY0ICIgb24gc3Vic2NyaWJlciIsCisJCQkgY2YtPnN5c3RlbV9pZGVudGlmaWVyKTsKIAl9 CiAKIAlpZiAoZHJ5X3J1bikKLQkJcGdfbG9nX2luZm8oImRyeS1ydW46IHdvdWxkIHJ1biBwZ19y ZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlciIpOworCQlJTkZPKCJkcnktcnVuOiB3b3VsZCBydW4g cGdfcmVzZXR3YWwgb24gdGhlIHN1YnNjcmliZXIiKTsKKwllbHNlCisJCUlORk8oInJ1bm5pbmcg cGdfcmVzZXR3YWwgb24gdGhlIHN1YnNjcmliZXIiKTsKKworCisJaWYgKG9wdC0+bG9nX2RpciAh PSBOVUxMKQorCQlvdXRfZmlsZSA9IHBzcHJpbnRmKCIlcy8lc18lcy5sb2ciLCBvcHQtPmxvZ19k aXIsIFNFUlZFUl9MT0dfRklMRV9OQU1FLCBsb2dfdGltZXN0YW1wKTsKIAllbHNlCi0JCXBnX2xv Z19pbmZvKCJydW5uaW5nIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3JpYmVyIik7CisJCW91dF9m aWxlID0gREVWTlVMTDsKIAotCWNtZF9zdHIgPSBwc3ByaW50ZigiXCIlc1wiIC1EIFwiJXNcIiA+ IFwiJXNcIiIsIHBnX3Jlc2V0d2FsX3BhdGgsCi0JCQkJCSAgIHN1YnNjcmliZXJfZGlyLCBERVZO VUxMKTsKKwljbWRfc3RyID0gcHNwcmludGYoIlwiJXNcIiAtRCBcIiVzXCIgPj4gXCIlc1wiIiwg cGdfcmVzZXR3YWxfcGF0aCwKKwkJCQkJICAgc3Vic2NyaWJlcl9kaXIsIG91dF9maWxlKTsKIAot CXBnX2xvZ19kZWJ1ZygicGdfcmVzZXR3YWwgY29tbWFuZCBpczogJXMiLCBjbWRfc3RyKTsKKwlE RUJVRygicGdfcmVzZXR3YWwgY29tbWFuZCBpczogJXMiLCBjbWRfc3RyKTsKIAogCWlmICghZHJ5 X3J1bikKIAl7CiAJCWludAkJCXJjID0gc3lzdGVtKGNtZF9zdHIpOwogCiAJCWlmIChyYyA9PSAw KQotCQkJcGdfbG9nX2luZm8oInN1Y2Nlc3NmdWxseSByZXNldCBXQUwgb24gdGhlIHN1YnNjcmli ZXIiKTsKKwkJCUlORk8oInN1Y2Nlc3NmdWxseSByZXNldCBXQUwgb24gdGhlIHN1YnNjcmliZXIi KTsKIAkJZWxzZQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZXNldCBXQUwgb24gc3Vic2NyaWJl cjogJXMiLCB3YWl0X3Jlc3VsdF90b19zdHIocmMpKTsKKwkJCUZBVEFMKCJjb3VsZCBub3QgcmVz ZXQgV0FMIG9uIHN1YnNjcmliZXI6ICVzIiwgd2FpdF9yZXN1bHRfdG9fc3RyKHJjKSk7CiAJfQog CiAJcGdfZnJlZShjZik7CkBAIC04NzMsOCArOTcwLDggQEAgc2V0dXBfcHVibGlzaGVyKHN0cnVj dCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQogCQlpZiAoZmluZF9wdWJsaWNhdGlvbihjb25uLCBk YmluZm9baV0ucHVibmFtZSwgZGJpbmZvW2ldLmRibmFtZSkpCiAJCXsKIAkJCS8qIFJldXNlIGV4 aXN0aW5nIHB1YmxpY2F0aW9uIG9uIHB1Ymxpc2hlci4gKi8KLQkJCXBnX2xvZ19pbmZvKCJ1c2Ug ZXhpc3RpbmcgcHVibGljYXRpb24gXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJCQlk YmluZm9baV0ucHVibmFtZSwgZGJpbmZvW2ldLmRibmFtZSk7CisJCQlJTkZPKCJ1c2UgZXhpc3Rp bmcgcHVibGljYXRpb24gXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkJIGRiaW5mb1tp XS5wdWJuYW1lLCBkYmluZm9baV0uZGJuYW1lKTsKIAkJCS8qIERvbid0IHJlbW92ZSBwcmUtZXhp c3RpbmcgcHVibGljYXRpb24gaWYgYW4gZXJyb3Igb2NjdXJzLiAqLwogCQkJZGJpbmZvW2ldLm1h ZGVfcHVibGljYXRpb24gPSBmYWxzZTsKIAkJfQpAQCAtOTcxLDcgKzEwNjgsNyBAQCBjaGVja19w dWJsaXNoZXIoY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCiAJaW50CQkJbWF4 X3ByZXBhcmVkX3RyYW5zYWN0aW9uczsKIAljaGFyCSAgICptYXhfc2xvdF93YWxfa2VlcF9zaXpl OwogCi0JcGdfbG9nX2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOworCUlO Rk8oImNoZWNraW5nIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOwogCiAJY29ubiA9IGNvbm5lY3Rf ZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvLCB0cnVlKTsKIApAQCAtMTAyMiwxNSArMTEx OSwxNSBAQCBjaGVja19wdWJsaXNoZXIoY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8pCiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlwZ19sb2dfZGVidWcoInB1Ymxpc2hlcjogd2FsX2xl dmVsOiAlcyIsIHdhbF9sZXZlbCk7Ci0JcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IG1heF9yZXBs aWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVwc2xvdHMpOwotCXBnX2xvZ19kZWJ1ZygicHVibGlz aGVyOiBjdXJyZW50IHJlcGxpY2F0aW9uIHNsb3RzOiAlZCIsIGN1cl9yZXBzbG90cyk7Ci0JcGdf bG9nX2RlYnVnKCJwdWJsaXNoZXI6IG1heF93YWxfc2VuZGVyczogJWQiLCBtYXhfd2Fsc2VuZGVy cyk7Ci0JcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IGN1cnJlbnQgd2FsIHNlbmRlcnM6ICVkIiwg Y3VyX3dhbHNlbmRlcnMpOwotCXBnX2xvZ19kZWJ1ZygicHVibGlzaGVyOiBtYXhfcHJlcGFyZWRf dHJhbnNhY3Rpb25zOiAlZCIsCi0JCQkJIG1heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMpOwotCXBn X2xvZ19kZWJ1ZygicHVibGlzaGVyOiBtYXhfc2xvdF93YWxfa2VlcF9zaXplOiAlcyIsCi0JCQkJ IG1heF9zbG90X3dhbF9rZWVwX3NpemUpOworCURFQlVHKCJwdWJsaXNoZXI6IHdhbF9sZXZlbDog JXMiLCB3YWxfbGV2ZWwpOworCURFQlVHKCJwdWJsaXNoZXI6IG1heF9yZXBsaWNhdGlvbl9zbG90 czogJWQiLCBtYXhfcmVwc2xvdHMpOworCURFQlVHKCJwdWJsaXNoZXI6IGN1cnJlbnQgcmVwbGlj YXRpb24gc2xvdHM6ICVkIiwgY3VyX3JlcHNsb3RzKTsKKwlERUJVRygicHVibGlzaGVyOiBtYXhf d2FsX3NlbmRlcnM6ICVkIiwgbWF4X3dhbHNlbmRlcnMpOworCURFQlVHKCJwdWJsaXNoZXI6IGN1 cnJlbnQgd2FsIHNlbmRlcnM6ICVkIiwgY3VyX3dhbHNlbmRlcnMpOworCURFQlVHKCJwdWJsaXNo ZXI6IG1heF9wcmVwYXJlZF90cmFuc2FjdGlvbnM6ICVkIiwKKwkJICBtYXhfcHJlcGFyZWRfdHJh bnNhY3Rpb25zKTsKKwlERUJVRygicHVibGlzaGVyOiBtYXhfc2xvdF93YWxfa2VlcF9zaXplOiAl cyIsCisJCSAgbWF4X3Nsb3Rfd2FsX2tlZXBfc2l6ZSk7CiAKIAlkaXNjb25uZWN0X2RhdGFiYXNl KGNvbm4sIGZhbHNlKTsKIApAQCAtMTEwNiw3ICsxMjAzLDcgQEAgY2hlY2tfc3Vic2NyaWJlcihj b25zdCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKIAlpbnQJCQltYXhfcmVwbG9yaWdp bnM7CiAJaW50CQkJbWF4X3dwcm9jczsKIAotCXBnX2xvZ19pbmZvKCJjaGVja2luZyBzZXR0aW5n cyBvbiBzdWJzY3JpYmVyIik7CisJSU5GTygiY2hlY2tpbmcgc2V0dGluZ3Mgb24gc3Vic2NyaWJl ciIpOwogCiAJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnN1YmNvbm5pbmZvLCB0 cnVlKTsKIApAQCAtMTE0OCwxMiArMTI0NSwxMiBAQCBjaGVja19zdWJzY3JpYmVyKGNvbnN0IHN0 cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQogCWlmIChzdHJjbXAoUFFnZXR2YWx1ZShyZXMs IDMsIDApLCAiIikgIT0gMCkKIAkJcHJpbWFyeV9zbG90X25hbWUgPSBwZ19zdHJkdXAoUFFnZXR2 YWx1ZShyZXMsIDMsIDApKTsKIAotCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X2xvZ2lj YWxfcmVwbGljYXRpb25fd29ya2VyczogJWQiLAotCQkJCSBtYXhfbHJ3b3JrZXJzKTsKLQlwZ19s b2dfZGVidWcoInN1YnNjcmliZXI6IG1heF9hY3RpdmVfcmVwbGljYXRpb25fb3JpZ2luczogJWQi LCBtYXhfcmVwbG9yaWdpbnMpOwotCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X3dvcmtl cl9wcm9jZXNzZXM6ICVkIiwgbWF4X3dwcm9jcyk7CisJREVCVUcoInN1YnNjcmliZXI6IG1heF9s b2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM6ICVkIiwKKwkJICBtYXhfbHJ3b3JrZXJzKTsKKwlE RUJVRygic3Vic2NyaWJlcjogbWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zOiAlZCIsIG1h eF9yZXBsb3JpZ2lucyk7CisJREVCVUcoInN1YnNjcmliZXI6IG1heF93b3JrZXJfcHJvY2Vzc2Vz OiAlZCIsIG1heF93cHJvY3MpOwogCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSkKLQkJcGdfbG9nX2Rl YnVnKCJzdWJzY3JpYmVyOiBwcmltYXJ5X3Nsb3RfbmFtZTogJXMiLCBwcmltYXJ5X3Nsb3RfbmFt ZSk7CisJCURFQlVHKCJzdWJzY3JpYmVyOiBwcmltYXJ5X3Nsb3RfbmFtZTogJXMiLCBwcmltYXJ5 X3Nsb3RfbmFtZSk7CiAKIAlQUWNsZWFyKHJlcyk7CiAKQEAgLTEyMTUsMTIgKzEzMTIsMTIgQEAg ZHJvcF9leGlzdGluZ19zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzdWJu YW1lLCBjb25zdCBjaGFyICpkYm5hbWUKIAlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiBEUk9Q IFNVQlNDUklQVElPTiAlczsiLCBzdWJuYW1lKTsKIAogCWlmIChkcnlfcnVuKQotCQlwZ19sb2df aW5mbygiZHJ5LXJ1bjogd291bGQgZHJvcCBzdWJzY3JpcHRpb24gXCIlc1wiIGluIGRhdGFiYXNl IFwiJXNcIiIsCi0JCQkJCXN1Ym5hbWUsIGRibmFtZSk7CisJCUlORk8oImRyeS1ydW46IHdvdWxk IGRyb3Agc3Vic2NyaXB0aW9uIFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJIHN1Ym5h bWUsIGRibmFtZSk7CiAJZWxzZQogCXsKLQkJcGdfbG9nX2luZm8oImRyb3BwaW5nIHN1YnNjcmlw dGlvbiBcIiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKLQkJCQkJc3VibmFtZSwgZGJuYW1lKTsK KwkJSU5GTygiZHJvcHBpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIi LAorCQkJIHN1Ym5hbWUsIGRibmFtZSk7CiAKIAkJcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5LT5k YXRhKTsKIApAQCAtMTM3Myw3ICsxNDcwLDcgQEAgc2V0dXBfcmVjb3ZlcnkoY29uc3Qgc3RydWN0 IExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmRhdGFkaXIsIGNvbnN0IGMKIAkJ CQkJCSAgbHNuKTsKIAl9CiAKLQlwZ19sb2dfZGVidWcoInJlY292ZXJ5IHBhcmFtZXRlcnM6XG4l cyIsIHJlY292ZXJ5Y29uZmNvbnRlbnRzLT5kYXRhKTsKKwlERUJVRygicmVjb3ZlcnkgcGFyYW1l dGVyczpcbiVzIiwgcmVjb3Zlcnljb25mY29udGVudHMtPmRhdGEpOwogCiAJaWYgKCFkcnlfcnVu KQogCXsKQEAgLTEzODUsMTAgKzE0ODIsMTAgQEAgc2V0dXBfcmVjb3ZlcnkoY29uc3Qgc3RydWN0 IExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmRhdGFkaXIsIGNvbnN0IGMKIAkJ CQkgSU5DTFVERURfQ09ORl9GSUxFKTsKIAkJZmQgPSBmb3Blbihjb25mX2ZpbGVuYW1lLCAidyIp OwogCQlpZiAoZmQgPT0gTlVMTCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwi JXNcIjogJW0iLCBjb25mX2ZpbGVuYW1lKTsKKwkJCUZBVEFMKCJjb3VsZCBub3Qgb3BlbiBmaWxl IFwiJXNcIjogJW0iLCBjb25mX2ZpbGVuYW1lKTsKIAogCQlpZiAoZndyaXRlKHJlY292ZXJ5Y29u ZmNvbnRlbnRzLT5kYXRhLCByZWNvdmVyeWNvbmZjb250ZW50cy0+bGVuLCAxLCBmZCkgIT0gMSkK LQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgY29uZl9m aWxlbmFtZSk7CisJCQlGQVRBTCgiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIs IGNvbmZfZmlsZW5hbWUpOwogCiAJCWZjbG9zZShmZCk7CiAJCXJlY292ZXJ5X3BhcmFtc19zZXQg PSB0cnVlOwpAQCAtMTQ5NCwxMSArMTU5MSwxMSBAQCBjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlv bl9zbG90KFBHY29ubiAqY29ubiwgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCiAJQXNz ZXJ0KGNvbm4gIT0gTlVMTCk7CiAKIAlpZiAoZHJ5X3J1bikKLQkJcGdfbG9nX2luZm8oImRyeS1y dW46IHdvdWxkIGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgaW4gZGF0YWJhc2Ug XCIlc1wiIG9uIHB1Ymxpc2hlciIsCi0JCQkJCXNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUpOwor CQlJTkZPKCJkcnktcnVuOiB3b3VsZCBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wi IGluIGRhdGFiYXNlIFwiJXNcIiBvbiBwdWJsaXNoZXIiLAorCQkJIHNsb3RfbmFtZSwgZGJpbmZv LT5kYm5hbWUpOwogCWVsc2UKLQkJcGdfbG9nX2luZm8oImNyZWF0aW5nIHRoZSByZXBsaWNhdGlv biBzbG90IFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIgb24gcHVibGlzaGVyIiwKLQkJCQkJc2xv dF9uYW1lLCBkYmluZm8tPmRibmFtZSk7CisJCUlORk8oImNyZWF0aW5nIHRoZSByZXBsaWNhdGlv biBzbG90IFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIgb24gcHVibGlzaGVyIiwKKwkJCSBzbG90 X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsKIAogCXNsb3RfbmFtZV9lc2MgPSBQUWVzY2FwZUxpdGVy YWwoY29ubiwgc2xvdF9uYW1lLCBzdHJsZW4oc2xvdF9uYW1lKSk7CiAKQEAgLTE1MDksNyArMTYw Niw3IEBAIGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBzdHJ1 Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKIAogCVBRZnJlZW1lbShzbG90X25hbWVfZXNjKTsK IAotCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCURFQlVHKCJj b21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CiAKIAlpZiAoIWRyeV9ydW4pCiAJewpAQCAtMTU0 NywxMSArMTY0NCwxMSBAQCBkcm9wX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBzdHJ1 Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKIAlBc3NlcnQoY29ubiAhPSBOVUxMKTsKIAogCWlm IChkcnlfcnVuKQotCQlwZ19sb2dfaW5mbygiZHJ5LXJ1bjogd291bGQgZHJvcCB0aGUgcmVwbGlj YXRpb24gc2xvdCBcIiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKLQkJCQkJc2xvdF9uYW1lLCBk YmluZm8tPmRibmFtZSk7CisJCUlORk8oImRyeS1ydW46IHdvdWxkIGRyb3AgdGhlIHJlcGxpY2F0 aW9uIHNsb3QgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkgc2xvdF9uYW1lLCBkYmlu Zm8tPmRibmFtZSk7CiAJZWxzZQotCQlwZ19sb2dfaW5mbygiZHJvcHBpbmcgdGhlIHJlcGxpY2F0 aW9uIHNsb3QgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJCXNsb3RfbmFtZSwgZGJp bmZvLT5kYm5hbWUpOworCQlJTkZPKCJkcm9wcGluZyB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVz XCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCSBzbG90X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsK IAogCXNsb3RfbmFtZV9lc2MgPSBQUWVzY2FwZUxpdGVyYWwoY29ubiwgc2xvdF9uYW1lLCBzdHJs ZW4oc2xvdF9uYW1lKSk7CiAKQEAgLTE1NTksNyArMTY1Niw3IEBAIGRyb3BfcmVwbGljYXRpb25f c2xvdChQR2Nvbm4gKmNvbm4sIHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAogCiAJUFFm cmVlbWVtKHNsb3RfbmFtZV9lc2MpOwogCi0JcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIs IHN0ci0+ZGF0YSk7CisJREVCVUcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKIAogCWlm ICghZHJ5X3J1bikKIAl7CkBAIC0xNjUwLDEyICsxNzQ3LDE3IEBAIHN0YXJ0X3N0YW5kYnlfc2Vy dmVyKGNvbnN0IHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucyAqb3B0LCBib29sIHJlc3Ry aWN0ZWRfCiAJaWYgKHJlc3RyaWN0X2xvZ2ljYWxfd29ya2VyKQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihwZ19jdGxfY21kLCAiIC1vIFwiLWMgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vy cz0wXCIiKTsKIAotCXBnX2xvZ19kZWJ1ZygicGdfY3RsIGNvbW1hbmQgaXM6ICVzIiwgcGdfY3Rs X2NtZC0+ZGF0YSk7CisJaWYgKG9wdC0+bG9nX2RpciAhPSBOVUxMKQorCXsKKwkJYXBwZW5kUFFF eHBCdWZmZXIocGdfY3RsX2NtZCwgIiAtbCAlcy8lc18lcy5sb2ciLCBvcHQtPmxvZ19kaXIsIFNF UlZFUl9MT0dfRklMRV9OQU1FLCBsb2dfdGltZXN0YW1wKTsKKwl9CisKKwlERUJVRygicGdfY3Rs IGNvbW1hbmQgaXM6ICVzIiwgcGdfY3RsX2NtZC0+ZGF0YSk7CiAJcmMgPSBzeXN0ZW0ocGdfY3Rs X2NtZC0+ZGF0YSk7CiAJcGdfY3RsX3N0YXR1cyhwZ19jdGxfY21kLT5kYXRhLCByYyk7CiAJc3Rh bmRieV9ydW5uaW5nID0gdHJ1ZTsKIAlkZXN0cm95UFFFeHBCdWZmZXIocGdfY3RsX2NtZCk7Ci0J cGdfbG9nX2luZm8oInNlcnZlciB3YXMgc3RhcnRlZCIpOworCUlORk8oInNlcnZlciB3YXMgc3Rh cnRlZCIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTY2NiwxMSArMTc2OCwxMSBAQCBzdG9wX3N0 YW5kYnlfc2VydmVyKGNvbnN0IGNoYXIgKmRhdGFkaXIpCiAKIAlwZ19jdGxfY21kID0gcHNwcmlu dGYoIlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAtcyIsIHBnX2N0bF9wYXRoLAogCQkJCQkJICBkYXRh ZGlyKTsKLQlwZ19sb2dfZGVidWcoInBnX2N0bCBjb21tYW5kIGlzOiAlcyIsIHBnX2N0bF9jbWQp OworCURFQlVHKCJwZ19jdGwgY29tbWFuZCBpczogJXMiLCBwZ19jdGxfY21kKTsKIAlyYyA9IHN5 c3RlbShwZ19jdGxfY21kKTsKIAlwZ19jdGxfc3RhdHVzKHBnX2N0bF9jbWQsIHJjKTsKIAlzdGFu ZGJ5X3J1bm5pbmcgPSBmYWxzZTsKLQlwZ19sb2dfaW5mbygic2VydmVyIHdhcyBzdG9wcGVkIik7 CisJSU5GTygic2VydmVyIHdhcyBzdG9wcGVkIik7CiB9CiAKIC8qCkBAIC0xNjg5LDcgKzE3OTEs NyBAQCB3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqY29ubmluZm8sIGNvbnN0IHN0 cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucwogCWJvb2wJCXJlYWR5ID0gZmFsc2U7CiAJaW50 CQkJdGltZXIgPSAwOwogCi0JcGdfbG9nX2luZm8oIndhaXRpbmcgZm9yIHRoZSB0YXJnZXQgc2Vy dmVyIHRvIHJlYWNoIHRoZSBjb25zaXN0ZW50IHN0YXRlIik7CisJSU5GTygid2FpdGluZyBmb3Ig dGhlIHRhcmdldCBzZXJ2ZXIgdG8gcmVhY2ggdGhlIGNvbnNpc3RlbnQgc3RhdGUiKTsKIAogCWNv bm4gPSBjb25uZWN0X2RhdGFiYXNlKGNvbm5pbmZvLCB0cnVlKTsKIApAQCAtMTcxOSwxMCArMTgy MSwxMCBAQCB3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqY29ubmluZm8sIGNvbnN0 IHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucwogCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29u biwgZmFsc2UpOwogCiAJaWYgKCFyZWFkeSkKLQkJcGdfZmF0YWwoInNlcnZlciBkaWQgbm90IGVu ZCByZWNvdmVyeSIpOworCQlGQVRBTCgic2VydmVyIGRpZCBub3QgZW5kIHJlY292ZXJ5Iik7CiAK LQlwZ19sb2dfaW5mbygidGFyZ2V0IHNlcnZlciByZWFjaGVkIHRoZSBjb25zaXN0ZW50IHN0YXRl Iik7Ci0JcGdfbG9nX2luZm9faGludCgiSWYgcGdfY3JlYXRlc3Vic2NyaWJlciBmYWlscyBhZnRl ciB0aGlzIHBvaW50LCB5b3UgbXVzdCByZWNyZWF0ZSB0aGUgcGh5c2ljYWwgcmVwbGljYSBiZWZv cmUgY29udGludWluZy4iKTsKKwlJTkZPKCJ0YXJnZXQgc2VydmVyIHJlYWNoZWQgdGhlIGNvbnNp c3RlbnQgc3RhdGUiKTsKKwlJTkZPX0hJTlQoIklmIHBnX2NyZWF0ZXN1YnNjcmliZXIgZmFpbHMg YWZ0ZXIgdGhpcyBwb2ludCwgeW91IG11c3QgcmVjcmVhdGUgdGhlIHBoeXNpY2FsIHJlcGxpY2Eg YmVmb3JlIGNvbnRpbnVpbmcuIik7CiB9CiAKIC8qCkBAIC0xNzcyLDE2ICsxODc0LDE2IEBAIGNy ZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKQogCXJlc2V0UFFFeHBCdWZmZXIoc3RyKTsKIAogCWlmIChkcnlfcnVuKQotCQlwZ19sb2df aW5mbygiZHJ5LXJ1bjogd291bGQgY3JlYXRlIHB1YmxpY2F0aW9uIFwiJXNcIiBpbiBkYXRhYmFz ZSBcIiVzXCIiLAotCQkJCQlkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwkJSU5G TygiZHJ5LXJ1bjogd291bGQgY3JlYXRlIHB1YmxpY2F0aW9uIFwiJXNcIiBpbiBkYXRhYmFzZSBc IiVzXCIiLAorCQkJIGRiaW5mby0+cHVibmFtZSwgZGJpbmZvLT5kYm5hbWUpOwogCWVsc2UKLQkJ cGdfbG9nX2luZm8oImNyZWF0aW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVz XCIiLAotCQkJCQlkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwkJSU5GTygiY3Jl YXRpbmcgcHVibGljYXRpb24gXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkgZGJpbmZv LT5wdWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsICJD UkVBVEUgUFVCTElDQVRJT04gJXMgRk9SIEFMTCBUQUJMRVMiLAogCQkJCQkgIGlwdWJuYW1lX2Vz Yyk7CiAKLQlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKwlERUJV RygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOwogCiAJaWYgKCFkcnlfcnVuKQogCXsKQEAg LTE4MTksMTcgKzE5MjEsMTcgQEAgZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKnB1Ym5hbWUsIGNvbnN0IGNoYXIgKmRibmFtZSwKIAlwdWJuYW1lX2VzYyA9IFBRZXNj YXBlSWRlbnRpZmllcihjb25uLCBwdWJuYW1lLCBzdHJsZW4ocHVibmFtZSkpOwogCiAJaWYgKGRy eV9ydW4pCi0JCXBnX2xvZ19pbmZvKCJkcnktcnVuOiB3b3VsZCBkcm9wIHB1YmxpY2F0aW9uIFwi JXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIiLAotCQkJCQlwdWJuYW1lLCBkYm5hbWUpOworCQlJTkZP KCJkcnktcnVuOiB3b3VsZCBkcm9wIHB1YmxpY2F0aW9uIFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVz XCIiLAorCQkJIHB1Ym5hbWUsIGRibmFtZSk7CiAJZWxzZQotCQlwZ19sb2dfaW5mbygiZHJvcHBp bmcgcHVibGljYXRpb24gXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJCXB1Ym5hbWUs IGRibmFtZSk7CisJCUlORk8oImRyb3BwaW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBpbiBkYXRhYmFz ZSBcIiVzXCIiLAorCQkJIHB1Ym5hbWUsIGRibmFtZSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlcihz dHIsICJEUk9QIFBVQkxJQ0FUSU9OICVzIiwgcHVibmFtZV9lc2MpOwogCiAJUFFmcmVlbWVtKHB1 Ym5hbWVfZXNjKTsKIAotCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEp OworCURFQlVHKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CiAKIAlpZiAoIWRyeV9ydW4p CiAJewpAQCAtMTg3Miw4ICsxOTc0LDggQEAgY2hlY2tfYW5kX2Ryb3BfcHVibGljYXRpb25zKFBH Y29ubiAqY29ubiwgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCiAKIAlpZiAoZHJvcF9h bGxfcHVicykKIAl7Ci0JCXBnX2xvZ19pbmZvKCJkcm9wcGluZyBhbGwgZXhpc3RpbmcgcHVibGlj YXRpb25zIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJCWRiaW5mby0+ZGJuYW1lKTsKKwkJSU5G TygiZHJvcHBpbmcgYWxsIGV4aXN0aW5nIHB1YmxpY2F0aW9ucyBpbiBkYXRhYmFzZSBcIiVzXCIi LAorCQkJIGRiaW5mby0+ZGJuYW1lKTsKIAogCQkvKiBGZXRjaCBhbGwgcHVibGljYXRpb24gbmFt ZXMgKi8KIAkJcmVzID0gUFFleGVjKGNvbm4sICJTRUxFQ1QgcHVibmFtZSBGUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb247Iik7CkBAIC0xOTAzLDExICsyMDA1LDExIEBAIGNoZWNrX2FuZF9k cm9wX3B1YmxpY2F0aW9ucyhQR2Nvbm4gKmNvbm4sIHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKQogCQllbHNlCiAJCXsKIAkJCWlmIChkcnlfcnVuKQotCQkJCXBnX2xvZ19pbmZvKCJkcnkt cnVuOiB3b3VsZCBwcmVzZXJ2ZSBleGlzdGluZyBwdWJsaWNhdGlvbiBcIiVzXCIgaW4gZGF0YWJh c2UgXCIlc1wiIiwKLQkJCQkJCQlkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwkJ CQlJTkZPKCJkcnktcnVuOiB3b3VsZCBwcmVzZXJ2ZSBleGlzdGluZyBwdWJsaWNhdGlvbiBcIiVz XCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQkJIGRiaW5mby0+cHVibmFtZSwgZGJpbmZvLT5k Ym5hbWUpOwogCQkJZWxzZQotCQkJCXBnX2xvZ19pbmZvKCJwcmVzZXJ2ZSBleGlzdGluZyBwdWJs aWNhdGlvbiBcIiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKLQkJCQkJCQlkYmluZm8tPnB1Ym5h bWUsIGRiaW5mby0+ZGJuYW1lKTsKKwkJCQlJTkZPKCJwcmVzZXJ2ZSBleGlzdGluZyBwdWJsaWNh dGlvbiBcIiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQkJIGRiaW5mby0+cHVibmFtZSwg ZGJpbmZvLT5kYm5hbWUpOwogCQl9CiAJfQogfQpAQCAtMTk0MSwxMSArMjA0MywxMSBAQCBjcmVh dGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZv ICpkYmluZm8pCiAJcmVwbHNsb3RuYW1lX2VzYyA9IFBRZXNjYXBlTGl0ZXJhbChjb25uLCBkYmlu Zm8tPnJlcGxzbG90bmFtZSwgc3RybGVuKGRiaW5mby0+cmVwbHNsb3RuYW1lKSk7CiAKIAlpZiAo ZHJ5X3J1bikKLQkJcGdfbG9nX2luZm8oImRyeS1ydW46IHdvdWxkIGNyZWF0ZSBzdWJzY3JpcHRp b24gXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJCWRiaW5mby0+c3VibmFtZSwgZGJp bmZvLT5kYm5hbWUpOworCQlJTkZPKCJkcnktcnVuOiB3b3VsZCBjcmVhdGUgc3Vic2NyaXB0aW9u IFwiJXNcIiBpbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJIGRiaW5mby0+c3VibmFtZSwgZGJpbmZv LT5kYm5hbWUpOwogCWVsc2UKLQkJcGdfbG9nX2luZm8oImNyZWF0aW5nIHN1YnNjcmlwdGlvbiBc IiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKLQkJCQkJZGJpbmZvLT5zdWJuYW1lLCBkYmluZm8t PmRibmFtZSk7CisJCUlORk8oImNyZWF0aW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgaW4gZGF0YWJh c2UgXCIlc1wiIiwKKwkJCSBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKIAogCWFw cGVuZFBRRXhwQnVmZmVyKHN0ciwKIAkJCQkJICAiQ1JFQVRFIFNVQlNDUklQVElPTiAlcyBDT05O RUNUSU9OICVzIFBVQkxJQ0FUSU9OICVzICIKQEAgLTE5NTksNyArMjA2MSw3IEBAIGNyZWF0ZV9z dWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBjb25zdCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRi aW5mbykKIAlQUWZyZWVtZW0ocHViY29ubmluZm9fZXNjKTsKIAlQUWZyZWVtZW0ocmVwbHNsb3Ru YW1lX2VzYyk7CiAKLQlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsK KwlERUJVRygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOwogCiAJaWYgKCFkcnlfcnVuKQog CXsKQEAgLTIwNDMsMTggKzIxNDUsMTggQEAgc2V0X3JlcGxpY2F0aW9uX3Byb2dyZXNzKFBHY29u biAqY29ubiwgY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnMKIAlvcmln aW5uYW1lID0gcHNwcmludGYoInBnXyV1Iiwgc3Vib2lkKTsKIAogCWlmIChkcnlfcnVuKQotCQlw Z19sb2dfaW5mbygiZHJ5LXJ1bjogd291bGQgc2V0IHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyAo bm9kZSBuYW1lIFwiJXNcIiwgTFNOICVzKSBpbiBkYXRhYmFzZSBcIiVzXCIiLAotCQkJCQlvcmln aW5uYW1lLCBsc25zdHIsIGRiaW5mby0+ZGJuYW1lKTsKKwkJSU5GTygiZHJ5LXJ1bjogd291bGQg c2V0IHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyAobm9kZSBuYW1lIFwiJXNcIiwgTFNOICVzKSBp biBkYXRhYmFzZSBcIiVzXCIiLAorCQkJIG9yaWdpbm5hbWUsIGxzbnN0ciwgZGJpbmZvLT5kYm5h bWUpOwogCWVsc2UKLQkJcGdfbG9nX2luZm8oInNldHRpbmcgdGhlIHJlcGxpY2F0aW9uIHByb2dy ZXNzIChub2RlIG5hbWUgXCIlc1wiLCBMU04gJXMpIGluIGRhdGFiYXNlIFwiJXNcIiIsCi0JCQkJ CW9yaWdpbm5hbWUsIGxzbnN0ciwgZGJpbmZvLT5kYm5hbWUpOworCQlJTkZPKCJzZXR0aW5nIHRo ZSByZXBsaWNhdGlvbiBwcm9ncmVzcyAobm9kZSBuYW1lIFwiJXNcIiwgTFNOICVzKSBpbiBkYXRh YmFzZSBcIiVzXCIiLAorCQkJIG9yaWdpbm5hbWUsIGxzbnN0ciwgZGJpbmZvLT5kYm5hbWUpOwog CiAJcmVzZXRQUUV4cEJ1ZmZlcihzdHIpOwogCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKIAkJCQkJ ICAiU0VMRUNUIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fb3JpZ2luX2FkdmFuY2UoJyVzJywg JyVzJykiLAogCQkJCQkgIG9yaWdpbm5hbWUsIGxzbnN0cik7CiAKLQlwZ19sb2dfZGVidWcoImNv bW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKwlERUJVRygiY29tbWFuZCBpczogJXMiLCBzdHIt PmRhdGEpOwogCiAJaWYgKCFkcnlfcnVuKQogCXsKQEAgLTIwOTMsMTUgKzIxOTUsMTUgQEAgZW5h YmxlX3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIGNvbnN0IHN0cnVjdCBMb2dpY2FsUmVwSW5m byAqZGJpbmZvKQogCXN1Ym5hbWUgPSBQUWVzY2FwZUlkZW50aWZpZXIoY29ubiwgZGJpbmZvLT5z dWJuYW1lLCBzdHJsZW4oZGJpbmZvLT5zdWJuYW1lKSk7CiAKIAlpZiAoZHJ5X3J1bikKLQkJcGdf bG9nX2luZm8oImRyeS1ydW46IHdvdWxkIGVuYWJsZSBzdWJzY3JpcHRpb24gXCIlc1wiIGluIGRh dGFiYXNlIFwiJXNcIiIsCi0JCQkJCWRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUpOwor CQlJTkZPKCJkcnktcnVuOiB3b3VsZCBlbmFibGUgc3Vic2NyaXB0aW9uIFwiJXNcIiBpbiBkYXRh YmFzZSBcIiVzXCIiLAorCQkJIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUpOwogCWVs c2UKLQkJcGdfbG9nX2luZm8oImVuYWJsaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgaW4gZGF0YWJh c2UgXCIlc1wiIiwKLQkJCQkJZGJpbmZvLT5zdWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CisJCUlO Rk8oImVuYWJsaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgaW4gZGF0YWJhc2UgXCIlc1wiIiwKKwkJ CSBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVy KHN0ciwgIkFMVEVSIFNVQlNDUklQVElPTiAlcyBFTkFCTEUiLCBzdWJuYW1lKTsKIAotCXBnX2xv Z19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCURFQlVHKCJjb21tYW5kIGlz OiAlcyIsIHN0ci0+ZGF0YSk7CiAKIAlpZiAoIWRyeV9ydW4pCiAJewpAQCAtMjE4MSw2ICsyMjgz LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsiYWxsIiwgbm9fYXJndW1lbnQs IE5VTEwsICdhJ30sCiAJCXsiZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2Qn fSwKIAkJeyJwZ2RhdGEiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKKwkJeyJsb2dk aXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2wnfSwKIAkJeyJkcnktcnVuIiwgbm9fYXJn dW1lbnQsIE5VTEwsICduJ30sCiAJCXsic3Vic2NyaWJlci1wb3J0IiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICdwJ30sCiAJCXsicHVibGlzaGVyLXNlcnZlciIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnUCd9LApAQCAtMjIxNSw2ICsyMzE4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJY2hhcgkgICAqY29uc2lzdGVudF9sc247CiAKIAljaGFyCQlwaWRmaWxlW01BWFBH UEFUSF07CisJY2hhcgkgICAqaW50ZXJuYWxfbG9nX2ZpbGU7CiAKIAlwZ19sb2dnaW5nX2luaXQo YXJndlswXSk7CiAJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOwpAQCAtMjIz OSw2ICsyMzQzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJLyogRGVmYXVsdCBz ZXR0aW5ncyAqLwogCXN1YnNjcmliZXJfZGlyID0gTlVMTDsKIAlvcHQuY29uZmlnX2ZpbGUgPSBO VUxMOworCW9wdC5sb2dfZGlyID0gTlVMTDsKIAlvcHQucHViX2Nvbm5pbmZvX3N0ciA9IE5VTEw7 CiAJb3B0LnNvY2tldF9kaXIgPSBOVUxMOwogCW9wdC5zdWJfcG9ydCA9IERFRkFVTFRfU1VCX1BP UlQ7CkBAIC0yMjY3LDkgKzIzNzIsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAK IAlnZXRfcmVzdHJpY3RlZF90b2tlbigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgImFkOkQ6bnA6UDpzOnQ6VFU6diIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgImFkOkQ6bDpucDpQOnM6dDpUVTp2IiwKIAkJCQkJCQlsb25nX29wdGlvbnMs ICZvcHRpb25faW5kZXgpKSAhPSAtMSkKIAl7CisJCWNoYXIJCXRpbWVzdGFtcFsxMjhdOworCQlz dHJ1Y3QgdGltZXZhbCB0dmFsOworCQl0aW1lX3QJCW5vdzsKKwkJc3RydWN0IHRtCXRtYnVmOwor CiAJCXN3aXRjaCAoYykKIAkJewogCQkJY2FzZSAnYSc6CkBAIC0yMjgyLDExICsyMzkyLDQ0IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQludW1fZGJzKys7CiAJCQkJfQogCQkJ CWVsc2UKLQkJCQkJcGdfZmF0YWwoImRhdGFiYXNlIFwiJXNcIiBzcGVjaWZpZWQgbW9yZSB0aGFu IG9uY2UgZm9yIC1kLy0tZGF0YWJhc2UiLCBvcHRhcmcpOworCQkJCQlGQVRBTCgiZGF0YWJhc2Ug XCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBmb3IgLWQvLS1kYXRhYmFzZSIsIG9wdGFy Zyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdEJzoKIAkJCQlzdWJzY3JpYmVyX2RpciA9IHBnX3N0 cmR1cChvcHRhcmcpOwogCQkJCWNhbm9uaWNhbGl6ZV9wYXRoKHN1YnNjcmliZXJfZGlyKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJCWdldHRpbWVvZmRheSgmdHZhbCwgTlVMTCk7CisJ CQkJbm93ID0gdHZhbC50dl9zZWM7CisJCQkJc3RyZnRpbWUodGltZXN0YW1wLCBzaXplb2YodGlt ZXN0YW1wKSwgIiVZLSVtLSVkLSVILSVNLSVTIiwgbG9jYWx0aW1lX3IoJm5vdywgJnRtYnVmKSk7 CisJCQkJLyogYXBwZW5kIG1pY3Jvc2Vjb25kcyAqLworCQkJCXNucHJpbnRmKHRpbWVzdGFtcCAr IHN0cmxlbih0aW1lc3RhbXApLCBzaXplb2YodGltZXN0YW1wKSAtIHN0cmxlbih0aW1lc3RhbXAp LAorCQkJCQkJICIuJTA2dSIsICh1bnNpZ25lZCBpbnQpICh0dmFsLnR2X3VzZWMpKTsKKwkJCQls b2dfdGltZXN0YW1wID0gcGdfc3RyZHVwKHRpbWVzdGFtcCk7CisKKwkJCQlvcHQubG9nX2RpciA9 IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWNhbm9uaWNhbGl6ZV9wYXRoKG9wdC5sb2dfZGlyKTsK KworCQkJCWlmIChzdGF0KG9wdC5sb2dfZGlyLCAmc3RhdGJ1ZikgIT0gMCkKKwkJCQl7CisJCQkJ CWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJCXsKKwkJCQkJCWlmIChta2RpcihvcHQubG9nX2Rp ciwgU19JUldYVSkgPT0gMCkKKwkJCQkJCQlJTkZPKCJsb2cgZGlyZWN0b3J5IGNyZWF0ZWQiKTsK KwkJCQkJCWVsc2UgaWYgKGVycm5vID09IEVBQ0NFUykKKwkJCQkJCQlGQVRBTCgicGVybWlzc2lv biBkZW5pZWQgdHJ5aW5nIHRvIGNyZWF0ZSBsb2cgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBvcHQu bG9nX2Rpcik7CisJCQkJCQllbHNlCisJCQkJCQkJRkFUQUwoImNvdWxkIG5vdCBjcmVhdGUgbG9n IGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgb3B0LmxvZ19kaXIpOworCQkJCQl9CisJCQkJCWVsc2Ug aWYgKGVycm5vID09IEVBQ0NFUykKKwkJCQkJCUZBVEFMKCJwZXJtaXNzaW9uIGRlbmllZCB0cnlp bmcgdG8gYWNjZXNzIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgb3B0LmxvZ19kaXIpOworCQkJCQll bHNlCisJCQkJCQlGQVRBTCgiY291bGQgbm90IGFjY2VzcyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs IG9wdC5sb2dfZGlyKTsKKwkJCQl9CisJCQkJaW50ZXJuYWxfbG9nX2ZpbGUgPSBwc3ByaW50Zigi JXMvJXNfJXMubG9nIiwgb3B0LmxvZ19kaXIsIElOVEVSTkFMX0xPR19GSUxFX05BTUUsIGxvZ190 aW1lc3RhbXApOworCQkJCWlmICgoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgPSBsb2dmaWxlX29wZW4o aW50ZXJuYWxfbG9nX2ZpbGUsICJhIikpID09IE5VTEwpCisJCQkJCUZBVEFMKCJjb3VsZCBub3Qg b3BlbiBsb2cgZmlsZSBcIiVzXCI6ICVtIiwgaW50ZXJuYWxfbG9nX2ZpbGUpOworCiAJCQkJYnJl YWs7CiAJCQljYXNlICduJzoKIAkJCQlkcnlfcnVuID0gdHJ1ZTsKQEAgLTIzMjMsNyArMjQ2Niw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQludW1fcHVicysrOwogCQkJCX0K IAkJCQllbHNlCi0JCQkJCXBnX2ZhdGFsKCJwdWJsaWNhdGlvbiBcIiVzXCIgc3BlY2lmaWVkIG1v cmUgdGhhbiBvbmNlIGZvciAtLXB1YmxpY2F0aW9uIiwgb3B0YXJnKTsKKwkJCQkJRkFUQUwoInB1 YmxpY2F0aW9uIFwiJXNcIiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UgZm9yIC0tcHVibGljYXRp b24iLCBvcHRhcmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgogCQkJCWlmICghc2ltcGxlX3N0 cmluZ19saXN0X21lbWJlcigmb3B0LnJlcGxzbG90X25hbWVzLCBvcHRhcmcpKQpAQCAtMjMzMiw3 ICsyNDc1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCW51bV9yZXBsc2xv dHMrKzsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQlwZ19mYXRhbCgicmVwbGljYXRpb24gc2xvdCBc IiVzXCIgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIGZvciAtLXJlcGxpY2F0aW9uLXNsb3QiLCBv cHRhcmcpOworCQkJCQlGQVRBTCgicmVwbGljYXRpb24gc2xvdCBcIiVzXCIgc3BlY2lmaWVkIG1v cmUgdGhhbiBvbmNlIGZvciAtLXJlcGxpY2F0aW9uLXNsb3QiLCBvcHRhcmcpOwogCQkJCWJyZWFr OwogCQkJY2FzZSA0OgogCQkJCWlmICghc2ltcGxlX3N0cmluZ19saXN0X21lbWJlcigmb3B0LnN1 Yl9uYW1lcywgb3B0YXJnKSkKQEAgLTIzNDEsMTMgKzI0ODQsMTMgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJCW51bV9zdWJzKys7CiAJCQkJfQogCQkJCWVsc2UKLQkJCQkJcGdf ZmF0YWwoInN1YnNjcmlwdGlvbiBcIiVzXCIgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIGZvciAt LXN1YnNjcmlwdGlvbiIsIG9wdGFyZyk7CisJCQkJCUZBVEFMKCJzdWJzY3JpcHRpb24gXCIlc1wi IHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBmb3IgLS1zdWJzY3JpcHRpb24iLCBvcHRhcmcpOwog CQkJCWJyZWFrOwogCQkJY2FzZSA1OgogCQkJCWlmICghc2ltcGxlX3N0cmluZ19saXN0X21lbWJl cigmb3B0Lm9iamVjdHR5cGVzX3RvX2NsZWFuLCBvcHRhcmcpKQogCQkJCQlzaW1wbGVfc3RyaW5n X2xpc3RfYXBwZW5kKCZvcHQub2JqZWN0dHlwZXNfdG9fY2xlYW4sIG9wdGFyZyk7CiAJCQkJZWxz ZQotCQkJCQlwZ19mYXRhbCgib2JqZWN0IHR5cGUgXCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4g b25jZSBmb3IgLS1jbGVhbiIsIG9wdGFyZyk7CisJCQkJCUZBVEFMKCJvYmplY3QgdHlwZSBcIiVz XCIgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIGZvciAtLWNsZWFuIiwgb3B0YXJnKTsKIAkJCQli cmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEg Y29tcGxhaW50ICovCkBAIC0yNDAyLDcgKzI1NDUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJY2hhcgkJY3dkW01BWFBHUEFUSF07CiAKIAkJaWYgKCFnZXRjd2QoY3dkLCBNQVhQ R1BBVEgpKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBkaXJlY3Rv cnkiKTsKKwkJCUZBVEFMKCJjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgZGlyZWN0b3J5Iik7 CiAJCW9wdC5zb2NrZXRfZGlyID0gcGdfc3RyZHVwKGN3ZCk7CiAJCWNhbm9uaWNhbGl6ZV9wYXRo KG9wdC5zb2NrZXRfZGlyKTsKIAl9CkBAIC0yNDI1LDE2ICsyNTY4LDE2IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCX0KIAogCWlmIChkcnlfcnVuKQotCQlwZ19sb2dfaW5mbygiRXhl Y3V0aW5nIGluIGRyeS1ydW4gbW9kZS5cbiIKLQkJCQkJIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHdp bGwgbm90IGJlIG1vZGlmaWVkLiIpOworCQlJTkZPKCJFeGVjdXRpbmcgaW4gZHJ5LXJ1biBtb2Rl LlxuIgorCQkJICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBtb2RpZmllZC4iKTsK IAotCXBnX2xvZ19pbmZvKCJ2YWxpZGF0aW5nIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyIp OworCUlORk8oInZhbGlkYXRpbmcgcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIik7CiAJcHVi X2Jhc2VfY29ubmluZm8gPSBnZXRfYmFzZV9jb25uaW5mbyhvcHQucHViX2Nvbm5pbmZvX3N0ciwK IAkJCQkJCQkJCQkgICZkYm5hbWVfY29ubmluZm8pOwogCWlmIChwdWJfYmFzZV9jb25uaW5mbyA9 PSBOVUxMKQogCQlleGl0KDEpOwogCi0JcGdfbG9nX2luZm8oInZhbGlkYXRpbmcgc3Vic2NyaWJl ciBjb25uZWN0aW9uIHN0cmluZyIpOworCUlORk8oInZhbGlkYXRpbmcgc3Vic2NyaWJlciBjb25u ZWN0aW9uIHN0cmluZyIpOwogCXN1Yl9iYXNlX2Nvbm5pbmZvID0gZ2V0X3N1Yl9jb25uaW5mbygm b3B0KTsKIAogCS8qCkBAIC0yNDUxLDcgKzI1OTQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAogCWlmIChvcHQuZGF0YWJhc2VfbmFtZXMuaGVhZCA9PSBOVUxMKQogCXsKLQkJcGdf bG9nX2luZm8oIm5vIGRhdGFiYXNlIHdhcyBzcGVjaWZpZWQiKTsKKwkJSU5GTygibm8gZGF0YWJh c2Ugd2FzIHNwZWNpZmllZCIpOwogCiAJCS8qCiAJCSAqIFRyeSB0byBvYnRhaW4gdGhlIGRibmFt ZSBmcm9tIHRoZSBwdWJsaXNoZXIgY29ubmluZm8uIElmIGRibmFtZQpAQCAtMjQ2Miw4ICsyNjA1 LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlzaW1wbGVfc3RyaW5nX2xpc3Rf YXBwZW5kKCZvcHQuZGF0YWJhc2VfbmFtZXMsIGRibmFtZV9jb25uaW5mbyk7CiAJCQludW1fZGJz Kys7CiAKLQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwiJXNcIiB3YXMgZXh0cmFjdGVk IGZyb20gdGhlIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyIsCi0JCQkJCQlkYm5hbWVfY29u bmluZm8pOworCQkJSU5GTygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgd2FzIGV4dHJhY3RlZCBmcm9t IHRoZSBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmciLAorCQkJCSBkYm5hbWVfY29ubmluZm8p OwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMjUzNyw3ICsyNjgwLDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJcHViX3N5c2lkID0gZ2V0X3ByaW1hcnlfc3lzaWQoZGJpbmZvcy5kYmlu Zm9bMF0ucHViY29ubmluZm8pOwogCXN1Yl9zeXNpZCA9IGdldF9zdGFuZGJ5X3N5c2lkKHN1YnNj cmliZXJfZGlyKTsKIAlpZiAocHViX3N5c2lkICE9IHN1Yl9zeXNpZCkKLQkJcGdfZmF0YWwoInN1 YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgaXMgbm90IGEgY29weSBvZiB0aGUgc291cmNlIGRhdGFi YXNlIGNsdXN0ZXIiKTsKKwkJRkFUQUwoInN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgaXMgbm90 IGEgY29weSBvZiB0aGUgc291cmNlIGRhdGFiYXNlIGNsdXN0ZXIiKTsKIAogCS8qIFN1YnNjcmli ZXIgUElEIGZpbGUgKi8KIAlzbnByaW50ZihwaWRmaWxlLCBNQVhQR1BBVEgsICIlcy9wb3N0bWFz dGVyLnBpZCIsIHN1YnNjcmliZXJfZGlyKTsKQEAgLTI1NjAsNyArMjcwMyw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zKS4gVGhlIGdv YWwgaXMgdG8gYXZvaWQgY29ubmVjdGlvbnMgZHVyaW5nIHRoZQogCSAqIHRyYW5zZm9ybWF0aW9u IHN0ZXBzLgogCSAqLwotCXBnX2xvZ19pbmZvKCJzdGFydGluZyB0aGUgc3RhbmRieSBzZXJ2ZXIg d2l0aCBjb21tYW5kLWxpbmUgb3B0aW9ucyIpOworCUlORk8oInN0YXJ0aW5nIHRoZSBzdGFuZGJ5 IHNlcnZlciB3aXRoIGNvbW1hbmQtbGluZSBvcHRpb25zIik7CiAJc3RhcnRfc3RhbmRieV9zZXJ2 ZXIoJm9wdCwgdHJ1ZSwgZmFsc2UpOwogCiAJLyogQ2hlY2sgaWYgdGhlIHN0YW5kYnkgc2VydmVy IGlzIHJlYWR5IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCkBAIC0yNTc2LDcgKzI3MTksNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBndWFyYW50ZWVzIGl0KSAqYmVmb3Jl KiBjcmVhdGluZyB0aGUgcmVwbGljYXRpb24gc2xvdHMgaW4KIAkgKiBzZXR1cF9wdWJsaXNoZXIo KS4KIAkgKi8KLQlwZ19sb2dfaW5mbygic3RvcHBpbmcgdGhlIHN1YnNjcmliZXIiKTsKKwlJTkZP KCJzdG9wcGluZyB0aGUgc3Vic2NyaWJlciIpOwogCXN0b3Bfc3RhbmRieV9zZXJ2ZXIoc3Vic2Ny aWJlcl9kaXIpOwogCiAJLyogQ3JlYXRlIHRoZSByZXF1aXJlZCBvYmplY3RzIGZvciBlYWNoIGRh dGFiYXNlIG9uIHB1Ymxpc2hlciAqLwpAQCAtMjU5MCw3ICsyNzMzLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJICogdW50aWwgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLiBXZSBkb24n dCB3YW50IHRvIHN0YXJ0IGxvZ2ljYWwgcmVwbGljYXRpb24KIAkgKiBkdXJpbmcgc2V0dXAuCiAJ ICovCi0JcGdfbG9nX2luZm8oInN0YXJ0aW5nIHRoZSBzdWJzY3JpYmVyIik7CisJSU5GTygic3Rh cnRpbmcgdGhlIHN1YnNjcmliZXIiKTsKIAlzdGFydF9zdGFuZGJ5X3NlcnZlcigmb3B0LCB0cnVl LCB0cnVlKTsKIAogCS8qIFdhaXRpbmcgdGhlIHN1YnNjcmliZXIgdG8gYmUgcHJvbW90ZWQgKi8K QEAgLTI2MTEsNyArMjc1NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWRyb3Bf ZmFpbG92ZXJfcmVwbGljYXRpb25fc2xvdHMoZGJpbmZvcy5kYmluZm8pOwogCiAJLyogU3RvcCB0 aGUgc3Vic2NyaWJlciAqLwotCXBnX2xvZ19pbmZvKCJzdG9wcGluZyB0aGUgc3Vic2NyaWJlciIp OworCUlORk8oInN0b3BwaW5nIHRoZSBzdWJzY3JpYmVyIik7CiAJc3RvcF9zdGFuZGJ5X3NlcnZl cihzdWJzY3JpYmVyX2Rpcik7CiAKIAkvKiBDaGFuZ2Ugc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBz dWJzY3JpYmVyICovCkBAIC0yNjE5LDcgKzI3NjIsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAKIAlzdWNjZXNzID0gdHJ1ZTsKIAotCXBnX2xvZ19pbmZvKCJEb25lISIpOworCUlO Rk8oIkRvbmUhIik7CisKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwkJZmNs b3NlKGludGVybmFsX2xvZ19maWxlX2ZwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwgYi9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbAppbmRleCAwYzI3 ZmNhN2JiNy4uY2RiMTI2MjNiM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90 LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90 LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsCkBAIC0xMyw3ICsxMyw4IEBAIHByb2dyYW1faGVs cF9vaygncGdfY3JlYXRlc3Vic2NyaWJlcicpOwogcHJvZ3JhbV92ZXJzaW9uX29rKCdwZ19jcmVh dGVzdWJzY3JpYmVyJyk7CiBwcm9ncmFtX29wdGlvbnNfaGFuZGxpbmdfb2soJ3BnX2NyZWF0ZXN1 YnNjcmliZXInKTsKIAotbXkgJGRhdGFkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVt cGRpcjsKK215ICRkYXRhZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXIgKyAi L2RhdGFkaXIiOworbXkgJGxvZ2RpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGly ICsgIi9sb2dkaXIiOwogCiAjIEdlbmVyYXRlIGEgZGF0YWJhc2Ugd2l0aCBhIG5hbWUgbWFkZSBv ZiBhIHJhbmdlIG9mIEFTQ0lJIGNoYXJhY3RlcnMuCiAjIEV4dHJhY3RlZCBmcm9tIDAwMl9wZ191 cGdyYWRlLnBsLgpAQCAtNjI5LDEwICs2MzAsNDMgQEAgY29tbWFuZF9vaygKICMgbm90IGJlaW5n IHRyYWNrZWQsIHNvbWV0aGluZyB0aGF0IGlzIHNldCB3aXRoaW4gJG5vZGUtPnN0YXJ0KCkuCiBz eXN0ZW1fbG9nKCdwZ19jdGwnLCAnc3RvcCcsICctLXBnZGF0YScsICRub2RlX2stPmRhdGFfZGly KTsKIAorJG5vZGVfcC0+YmFja3VwKCdiYWNrdXBfMycpOworCisjIFNldCB1cCBub2RlIFIgYXMg YSBsb2dpY2FsIHJlcGxpY2Egbm9kZQorbXkgJG5vZGVfciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygnbm9kZV9yJyk7Ciskbm9kZV9yLT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3As ICdiYWNrdXBfMycsIGhhc19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9yLT5hcHBlbmRfY29uZigK KwkncG9zdGdyZXNxbC5jb25mJywgcXFbCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRwY29ubnN0ciBk Ym5hbWU9cG9zdGdyZXMnCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCitdKTsKKyRub2RlX3It PnNldF9zdGFuZGJ5X21vZGUoKTsKKworIyBUZXN0IHRoYXQgLS1sb2dkaXIgd29ya3MgZm9yIHBn X2NyZWF0ZXN1YnNjcmliZXIKK2NvbW1hbmRfb2soCisJWworCQkncGdfY3JlYXRlc3Vic2NyaWJl cicsCisJCSctLXZlcmJvc2UnLAorCQknLS1wZ2RhdGEnID0+ICRub2RlX3ItPmRhdGFfZGlyLAor CQknLS1wdWJsaXNoZXItc2VydmVyJyA9PiAkcGNvbm5zdHIsCisJCSctLWRhdGFiYXNlJyA9PiAn cG9zdGdyZXMnLAorCQknLS1sb2dkaXInID0+ICRsb2dkaXIsCisJXSwKKwknY2hlY2sgZm9yIGxv ZyBmaWxlIGNyZWF0aW9uIGZvciBwZ19jcmVhdGVTdWJzY3JpYmVyJyk7CisKKyMgQ2hlY2sgdGhh dCB0aGUgbG9nIGZpbGVzIHdlcmUgY3JlYXRlZAorbXkgQHNlcnZlcl9sb2dfZmlsZXMgPSBnbG9i ICIkbG9nZGlyL3BnX2NyZWF0ZXN1YnNjcmliZXJfc2VydmVyXyoubG9nIjsKK2lzKCBzY2FsYXIo QHNlcnZlcl9sb2dfZmlsZXMpLCAxLCAiCisgICAgcGdfY3JlYXRlc3Vic2NyaWJlcl9zZXJ2ZXIu bG9nIGZpbGUgd2FzIGNyZWF0ZWQiKTsKK215IEBpbnRlcm5hbF9sb2dfZmlsZXMgPSBnbG9iICIk bG9nZGlyL3BnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWxfKi5sb2ciOworaXMoIHNjYWxhcihA aW50ZXJuYWxfbG9nX2ZpbGVzKSwgMSwgIgorICAgIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJu YWwubG9nIGZpbGUgd2FzIGNyZWF0ZWQiKTsKKwogIyBjbGVhbiB1cAogJG5vZGVfcC0+dGVhcmRv d25fbm9kZTsKICRub2RlX3MtPnRlYXJkb3duX25vZGU7CiAkbm9kZV90LT50ZWFyZG93bl9ub2Rl OwogJG5vZGVfZi0+dGVhcmRvd25fbm9kZTsKKyRub2RlX3ItPnRlYXJkb3duX25vZGU7CiAKIGRv bmVfdGVzdGluZygpOwotLSAKMi40My4wCgo= --0000000000002a471c0649cb3e6d--