From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by sourceware.org (Postfix) with ESMTPS id 689833858D1E; Fri, 12 Jan 2024 13:47:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 689833858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 689833858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705067246; cv=none; b=vKOIueWeb4DS+JJhHOroQTHoyQG5jxBXZ6/nK8athMXJD4RX+Ao/HKStwZajxAE9DOsqgaPwyj51Plc8Pwoe80arha99/DS7ca3jfFY6OZzVhv/rLfS9pWLOj09Urvk+AP8ivranWlCHQ7iO3Rk3La7o+mniseGzVWVM9Onhqto= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705067246; c=relaxed/simple; bh=HCZelJt/qqMwvrocSSjlyLHGU9/FK/1zK8H8OxiuNuk=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=VIM2OIF0xL/m2wJU3EmT+kRm1ny0IN9CdV+g6z/ZzHvIDdzcnGzxsa76l8//iLBfbGSzJEEI1LaGpeA+J3iQTAm40kBuhLrFZa+7VbZmIg4tSfoUxs4qltSRr/9onQMNNXaVwaqLpq+BWT5/xC1Oq5lWQF0k3k8kzvh9lIUMwFE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-3374eb61cbcso5656962f8f.0; Fri, 12 Jan 2024 05:47:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705067235; x=1705672035; darn=gcc.gnu.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=GLwYlsdmjm3ZIIZSwR+CJsSmQkaxgE+ATyAgclKDbdI=; b=GU5OrsGBmUe9uK44dJN98Qheq6x8k8m5yS+frMvAj4LG+lrdbu/qPDOI870/zmzSPE e5bo4wVhTUqzDDhd3rRJ7OvYUgopryodEV3BX28xFMFve2luqeK+I9NPkOwOZtudNVve UZlvII5dYaVsjSo/EeXCid/62C2+f/ia5cct5x8kVRY1Rw9QNotJMozu5mM0eiUkRdQE 0/ubf5vAlTtmKP9Beyscsza7wwAN2hHGAAGEcHv1xd+i38q6a+b5VhNdm8rp2GaMcovK ldd+BOgR8dmuU1fvoR5rkOuCMmQyLc5TDM7agYKSobkWTERpp1FJnKwl+Y/CJe2UWN9M tNng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705067235; x=1705672035; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GLwYlsdmjm3ZIIZSwR+CJsSmQkaxgE+ATyAgclKDbdI=; b=Bc4iwuCn79nynE15OVbNF4fRwe3LNOgb3VJ9R/pbVWnBrK0onv7Djn/yH2Ziy+P2NQ YVLGlAJIM7S06pa721HAWmnjyplx51LBhJP8cc0PT3EdNDXv5+GFBrRz0GBYL7l+G5rH sxgdPmCJlJ7oeXRIAoXzk2/5+rmWq9x2okJVvHP2cOYWkIayaGge4kQhz5QfdsJKJFx/ AFrC+De2sPRdthq/770PObLlUZnQjCYSP0Vey5kmNs8WktyLOdFhYlPxQE+Im7wcVxWP nOrBZBi9pExXTbdXWyqhVZFjW13MuIHRouFMrHfZACIAj5+9LNz5q4UDCiIqvKi9V/7x sWtg== X-Gm-Message-State: AOJu0YxBMBQWVJ8Jq5jNukcmsnJ+wfoTd+WgzDJRM8f5ZG2GY9C0j/4Q L5dG0J6VTK/7NBiqF1UVvl+ovKOPGSH1OO4mc8ycVnSm X-Google-Smtp-Source: AGHT+IE9X3k3JZOrUB2rGEwAxMlxySVh+5/c6uq6+dN9BO24T/OXJ5Q8HBzaSgOBvKQZzCybPtVXR4V9lgwc/aACthI= X-Received: by 2002:a5d:4484:0:b0:337:5c47:233e with SMTP id j4-20020a5d4484000000b003375c47233emr791975wrq.100.1705067234849; Fri, 12 Jan 2024 05:47:14 -0800 (PST) MIME-Version: 1.0 References: <319a998a3c63eaf0e28d7267a901ad2c016dba49.camel@redhat.com> <686f67b56fd0a95a6b3ce8d2a60826aa9c446255.camel@redhat.com> In-Reply-To: From: Guillaume Gomez Date: Fri, 12 Jan 2024 14:47:02 +0100 Message-ID: Subject: Re: [PATCH] Add support for function attributes and variable attributes To: David Malcolm Cc: jit@gcc.gnu.org, Antoni , gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="000000000000da0a40060ebfe68c" X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000da0a40060ebfe68c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Just realized that you were asking for the patch I forgot to join... Here it is. Le ven. 12 janv. 2024 =C3=A0 11:09, Guillaume Gomez a =C3=A9crit : > > > It sounds like the patch you have locally is ready, but it has some > > nontrivial changes compared to the last version you posted to the list. > > Please post your latest version to the list. > > Sure! > > This patch adds the support for attributes on functions and variables. It= does > so by adding the following functions: > > * gcc_jit_function_add_attribute > * gcc_jit_function_add_string_attribute > * gcc_jit_function_add_integer_array_attribute > * gcc_jit_lvalue_add_string_attribute > > It adds the following types: > > * gcc_jit_fn_attribute > * gcc_jit_variable_attribute > > It adds tests to ensure that the attributes are correctly applied. > > > Do you have push rights, or do you need me to push it for you? > > I have push rights so I'll merge the patch myself. But thanks for offerin= g to > do it. > > Le jeu. 11 janv. 2024 =C3=A0 23:38, David Malcolm a= =C3=A9crit : > > > > On Thu, 2024-01-11 at 22:40 +0100, Guillaume Gomez wrote: > > > Hi David, > > > > > > > The above looks correct, but the patch adds the entrypoint > > > > descriptions > > > > to topics/types.rst, which seems like the wrong place. The > > > > function- > > > > related ones should be in topics/functions.rst in the "Functions" > > > > section and the lvalue/variable one in topics/expression.rst after > > > > the > > > > "Global variables" section. > > > > > > Ah indeed. Mix-up on my end. Fixed it. > > > > > > > test-restrict.c is a pre-existing testcase, so please don't delete > > > > its > > > > entry. > > > > > > Ah indeed, I went too quickly and thought it was a test I renamed... > > > > > > > BTW, the ChangeLog entry mentions adding test-restrict.c, but the > > > > patch > > > > doesn't add it, so that part of the proposed ChangeLog is wrong. > > > > > > > > Does the patch pass ./contrib/gcc-changelog/git_check_commit.py ? > > > > > > I messed up a bit, fixed it thanks to you. I didn't run the script in > > > my last > > > update but just did: > > > > > > ``` > > > $ contrib/gcc-changelog/git_check_commit.py $(git log -1 --format=3D%= h) > > > Checking 3849ee2eadf0eeec2b0080a5142ced00be96a60d: OK > > > ``` > > > > > > > Otherwise, looks good, assuming that the patch has been tested with > > > > the > > > > full jit testsuite. > > > > > > When rebasing on upstream yesterday I discovered that two tests > > > were not working anymore. For the first one, it was simply because of > > > the changes in `dummy-frontend.cc`. For the second one > > > (test-noinline-attribute.c), it was because the rules for inlining > > > changed > > > since we wrote this patch apparently (our fork is very late). Antoni > > > discovered > > > that we could just add a call to `asm` to prevent this from happening > > > so I > > > added it. > > > > > > So yes, all jit tests are passing as expected. :) > > > > Good. > > > > It sounds like the patch you have locally is ready, but it has some > > nontrivial changes compared to the last version you posted to the list. > > Please post your latest version to the list. > > > > Do you have push rights, or do you need me to push it for you? > > > > Thanks > > Dave > > > > > > > > Le jeu. 11 janv. 2024 =C3=A0 19:46, David Malcolm a > > > =C3=A9crit : > > > > > > > > On Thu, 2024-01-11 at 01:00 +0100, Guillaume Gomez wrote: > > > > > Hi David. > > > > > > > > > > Thanks for the review! > > > > > > > > > > > > +.. function:: void\ > > > > > > > + gcc_jit_lvalue_add_string_attribute > > > > > > > (gcc_jit_lvalue *variable, > > > > > > > + enum > > > > > > > gcc_jit_fn_attribute attribute, > > > > > > > > > > > > ^^ > > > > > > > > > > > > This got out of sync with the declaration in the header file; > > > > > > it > > > > > > should > > > > > > be enum gcc_jit_variable_attribute attribute > > > > > > > > > > Indeed, good catch! > > > > > > > > > > > I took a brief look through the handler functions and with the > > > > > > above > > > > > > caveat I didn't see anything obviously wrong. I'm going to > > > > > > assume > > > > > > this > > > > > > code is OK given that presumably you've been testing it within > > > > > > rustc, > > > > > > right? > > > > > > > > > > Both in rustc and in the JIT tests we added. > > > > > > > > > > [..snip...] > > > > > > > > > > I added all the missing `RETURN_IF_FAIL` you mentioned. None of > > > > > the > > > > > arguments should be `NULL` so it was a mistake not to check it. > > > > > > > > > > [..snip...] > > > > > > > > > > I removed the tests comments as you mentioned. > > > > > > > > > > > Please update jit.dg/all-non-failing-tests.h for the new tests; > > > > > > it's > > > > > > meant to list all of the (non failing) tests alphabetically. > > > > > > > > > > It's not always correctly sorted. Might be worth sending a patch > > > > > after this > > > > > one gets merged to fix that. > > > > > > > > > > > I *think* all of the new tests aren't suitable to be run as > > > > > > part of > > > > > > a > > > > > > shared context (e.g. due to touching the optimization level or > > > > > > examining generated asm), so they should be listed in that > > > > > > header > > > > > > with > > > > > > comments explaining why. > > > > > > > > > > I added them with a comment on top of each of them. > > > > > > > > > > I joined the new patch version. > > > > > > > > > > Thanks again for the review! > > > > > > > > Thanks for the updated patch. I noticed a few minor issues: > > > > > > > > > diff --git a/gcc/jit/docs/topics/types.rst > > > > > b/gcc/jit/docs/topics/types.rst > > > > > index bb51f037b7e..b1aedc03787 100644 > > > > > --- a/gcc/jit/docs/topics/types.rst > > > > > +++ b/gcc/jit/docs/topics/types.rst > > > > > @@ -553,3 +553,80 @@ Reflection API > > > > > .. code-block:: c > > > > > > > > > > #ifdef LIBGCCJIT_HAVE_gcc_jit_type_get_restrict > > > > > + > > > > > +.. function:: void\ > > > > > + gcc_jit_function_add_attribute (gcc_jit_function > > > > > *func, > > > > > + enum > > > > > gcc_jit_fn_attribute attribute) > > > > > + > > > > > + Add an attribute ``attribute`` to a function ``func``. > > > > > + > > > > > + This is equivalent to the following code: > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + __attribute__((always_inline)) > > > > > + > > > > > + This entrypoint was added in :ref:`LIBGCCJIT_ABI_26`; you can > > > > > test for > > > > > + its presence using > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + #ifdef LIBGCCJIT_HAVE_ATTRIBUTES > > > > > + > > > > > +.. function:: void\ > > > > > + gcc_jit_function_add_string_attribute > > > > > (gcc_jit_function *func, > > > > > + enum > > > > > gcc_jit_fn_attribute attribute, > > > > > + const char > > > > > *value) > > > > > + > > > > > + Add a string attribute ``attribute`` with value ``value`` > > > > > to a function > > > > > + ``func``. > > > > > + > > > > > + This is equivalent to the following code: > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + __attribute__ ((alias ("xxx"))) > > > > > + > > > > > + This entrypoint was added in :ref:`LIBGCCJIT_ABI_26`; you can > > > > > test for > > > > > + its presence using > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + #ifdef LIBGCCJIT_HAVE_ATTRIBUTES > > > > > + > > > > > +.. function:: void\ > > > > > + gcc_jit_function_add_integer_array_attribute > > > > > (gcc_jit_function *func, > > > > > + > > > > > enum gcc_jit_fn_attribute attribute, > > > > > + > > > > > const int *value, > > > > > + > > > > > size_t length) > > > > > + > > > > > + Add an attribute ``attribute`` with ``length`` integer > > > > > values ``value`` to a > > > > > + function ``func``. The integer values must be the same as > > > > > you would write > > > > > + them in a C code. > > > > > + > > > > > + This is equivalent to the following code: > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + __attribute__ ((nonnull (1, 2))) > > > > > + > > > > > + This entrypoint was added in :ref:`LIBGCCJIT_ABI_26`; you can > > > > > test for > > > > > + its presence using > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + #ifdef LIBGCCJIT_HAVE_ATTRIBUTES > > > > > + > > > > > +.. function:: void\ > > > > > + gcc_jit_lvalue_add_string_attribute > > > > > (gcc_jit_lvalue *variable, > > > > > + enum > > > > > gcc_jit_variable_attribute attribute, > > > > > + const char > > > > > *value) > > > > > + > > > > > + Add an attribute ``attribute`` with value ``value`` to a > > > > > variable ``variable``. > > > > > + > > > > > + This entrypoint was added in :ref:`LIBGCCJIT_ABI_26`; you can > > > > > test for > > > > > + its presence using > > > > > + > > > > > + .. code-block:: c > > > > > + > > > > > + #ifdef LIBGCCJIT_HAVE_ATTRIBUTES > > > > > > > > The above looks correct, but the patch adds the entrypoint > > > > descriptions > > > > to topics/types.rst, which seems like the wrong place. The > > > > function- > > > > related ones should be in topics/functions.rst in the "Functions" > > > > section and the lvalue/variable one in topics/expression.rst after > > > > the > > > > "Global variables" section. > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h > > > > b/gcc/testsuite/jit.dg/all-non-failing-tests.h > > > > > index e762563f9bd..84001203352 100644 > > > > > --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h > > > > > +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h > > > > > > > > [...snip...] > > > > > > > > > @@ -313,7 +334,7 @@ > > > > > #undef create_code > > > > > #undef verify_code > > > > > > > > > > -/* test-restrict.c: This can't be in the testcases array as it > > > > > needs > > > > > +/* test-restrict-attribute.c: This can't be in the testcases > > > > > array as it needs > > > > > the `-O3` flag. */ > > > > > > > > test-restrict.c is a pre-existing testcase, so please don't delete > > > > its > > > > entry. > > > > BTW, the ChangeLog entry mentions adding test-restrict.c, but the > > > > patch > > > > doesn't add it, so that part of the proposed ChangeLog is wrong. > > > > > > > > Does the patch pass ./contrib/gcc-changelog/git_check_commit.py ? > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-cold-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-cold-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..8dc7ec5a34b > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-cold-attribute.c > > > > > @@ -0,0 +1,54 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O2 to see > > > > > that the cold > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete the above comment. > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O2". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 2); > > > > > +} > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-const-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-const-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..c06742d163f > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-const-attribute.c > > > > > @@ -0,0 +1,134 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O3 to see > > > > > that the const > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete the above comment. > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O3". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 3); > > > > > +} > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-noinline-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-noinline-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..a455b4493fd > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-noinline-attribute.c > > > > > @@ -0,0 +1,121 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O2 to see > > > > > that the `noinline` > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete the above comment. > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O2". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 2); > > > > > +} > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-nonnull-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-nonnull-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..3306f890657 > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-nonnull-attribute.c > > > > > @@ -0,0 +1,94 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O2 to see > > > > > that the nonnull > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete the above comment. > > > > > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O2". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 2); > > > > > +} > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-pure-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-pure-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..0c9ba1366e0 > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-pure-attribute.c > > > > > @@ -0,0 +1,134 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O3 to see > > > > > that the pure > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete the above comment. > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O3". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 3); > > > > > +} > > > > > + > > > > > > > > [...snip...] > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-restrict-attribute.c > > > > > b/gcc/testsuite/jit.dg/test-restrict-attribute.c > > > > > new file mode 100644 > > > > > index 00000000000..7d7444b624f > > > > > --- /dev/null > > > > > +++ b/gcc/testsuite/jit.dg/test-restrict-attribute.c > > > > > @@ -0,0 +1,77 @@ > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > + > > > > > +#include > > > > > +#include > > > > > + > > > > > +#include "libgccjit.h" > > > > > + > > > > > +/* We don't want set_options() in harness.h to set -O3 to see > > > > > that the restrict > > > > > + attribute affects the optimizations. */ > > > > > > > > Please delete this comment. > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > +static void set_options (gcc_jit_context *ctxt, const char > > > > > *argv0) > > > > > +{ > > > > > + // Set "-O3". > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 3); > > > > > +} > > > > > + > > > > > > > > [...snip...] > > > > > > > > Otherwise, looks good, assuming that the patch has been tested with > > > > the > > > > full jit testsuite. > > > > > > > > Thanks again > > > > Dave > > > > > > > > > --000000000000da0a40060ebfe68c Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PATCH-libgccjit-Add-support-for-function-attributes-.patch" Content-Disposition: attachment; filename="0001-PATCH-libgccjit-Add-support-for-function-attributes-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lraozzbd0 RnJvbSAzODQ5ZWUyZWFkZjBlZWVjMmIwMDgwYTUxNDJjZWQwMGJlOTZhNjBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBXZWQsIDEwIEphbiAyMDI0IDE1OjIzOjM3ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBsaWJnY2NqaXQ6IEFkZCBzdXBwb3J0IGZvciBmdW5jdGlvbiBhdHRyaWJ1 dGVzIGFuZAogdmFyaWFibGUgYXR0cmlidXRlcy4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoKCSogZHVt bXktZnJvbnRlbmQuY2MgKGhhbmRsZV9hbGlhc19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgko aGFuZGxlX2Fsd2F5c19pbmxpbmVfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9j b2xkX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfZm5zcGVjX2F0dHJpYnV0ZSk6 IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfZm9ybWF0X2FyZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rp b24uCgkoaGFuZGxlX2Zvcm1hdF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX25v aW5saW5lX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0 ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfdXNlZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24u CgkoaGFuZGxlX3Zpc2liaWxpdHlfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV93 ZWFrX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfYWxpYXNfaWZ1bmNfYXR0cmli dXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBqaXQtcGxheWJhY2suY2MgKGZuX2F0dHJpYnV0ZV90b19z dHJpbmcpOiBOZXcgZnVuY3Rpb24uCgkodmFyaWFibGVfYXR0cmlidXRlX3RvX3N0cmluZyk6IE5l dyBmdW5jdGlvbi4KCShnbG9iYWxfbmV3X2RlY2wpOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJ KHNldF92YXJpYWJsZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkobmV3X2dsb2JhbCk6IEFk ZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkobmV3X2dsb2JhbF9pbml0aWFsaXplZCk6IEFkZCBhdHRy aWJ1dGVzIHN1cHBvcnQuCgkobmV3X2xvY2FsKTogQWRkIGF0dHJpYnV0ZXMgc3VwcG9ydC4KCSog aml0LXBsYXliYWNrLmggKGZuX2F0dHJpYnV0ZV90b19zdHJpbmcpOiBOZXcgZnVuY3Rpb24uCgko c2V0X3ZhcmlhYmxlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCSogaml0LXJlY29yZGluZy5j YyAocmVjb3JkaW5nOjpsdmFsdWU6OmFkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVj b3JkaW5nOjpmdW5jdGlvbjo6ZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5nOjpm dW5jdGlvbjo6d3JpdGVfdG9fZHVtcCk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkocmVjb3Jk aW5nOjpmdW5jdGlvbjo6YWRkX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShyZWNvcmRpbmc6 OmZ1bmN0aW9uOjphZGRfc3RyaW5nX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShyZWNvcmRp bmc6OmZ1bmN0aW9uOjphZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24u CgkocmVjb3JkaW5nOjpnbG9iYWw6OnJlcGxheV9pbnRvKTogQWRkIGF0dHJpYnV0ZXMgc3VwcG9y dC4KCShyZWNvcmRpbmc6OmxvY2FsOjpyZXBsYXlfaW50byk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBv cnQuCgkqIGppdC1yZWNvcmRpbmcuaDogQWRkIGF0dHJpYnV0ZXMgc3VwcG9ydC4KCSogbGliZ2Nj aml0LmNjIChnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgko Z2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShn Y2Nfaml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlv bi4KCShnY2Nfaml0X2x2YWx1ZV9hZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBsaWJn Y2NqaXQuaCAoZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSk6IE5ldyBlbnVtLgoJKGdjY19qaXRf ZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShnY2Nfaml0X2Z1bmN0aW9u X2FkZF9zdHJpbmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdjY19qaXRfZnVuY3Rpb25f YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGVudW0gZ2NjX2pp dF92YXJpYWJsZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZ2NjX2ppdF9sdmFsdWVfYWRk X3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkqIGxpYmdjY2ppdC5tYXA6IERlY2xh cmUgbmV3IGZ1bmN0aW9ucy4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogaml0LmRnL2Fs bC1ub24tZmFpbGluZy10ZXN0cy5oOiBBZGQgbmV3IGF0dHJpYnV0ZXMgdGVzdHMuCgkqIGppdC5k Zy9qaXQuZXhwOiBBZGQgYGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3RgIHRlc3QgY29t bWFuZC4KCSogaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBq aXQuZGcvdGVzdC1hbGlhcy1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWFs d2F5c19pbmxpbmUtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC1jb2xkLWF0 dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtY29uc3QtYXR0cmlidXRlLmM6IE5l dyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkq IGppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVz dC1wdXJlLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1 dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LXZhcmlhYmxlLWF0dHJpYnV0ZS5jOiBOZXcg dGVzdC4KCSogaml0LmRnL3Rlc3Qtd2Vhay1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgpnY2Mvaml0 L0NoYW5nZUxvZzoKCSogZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3Q6IEFkZCBkb2N1bWVu dGF0aW9uIGZvciBMSUJHQ0NKSVRfQUJJXzI2LgoJKiBkb2NzL3RvcGljcy9mdW5jdGlvbnMucnN0 OiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGZ1bmN0aW9ucy4KCSogZG9jcy90b3BpY3MvZXhw cmVzc2lvbnMucnN0OiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGZ1bmN0aW9ucy4KCkNvLWF1 dGhvcmVkLWJ5OiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KU2lnbmVkLW9mZi1i eTogR3VpbGxhdW1lIEdvbWV6IDxndWlsbGF1bWUxLmdvbWV6QGdtYWlsLmNvbT4KLS0tCiBnY2Mv aml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0ICAgICAgICAgfCAgMTIgKwogZ2NjL2pp dC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QgICAgICAgICAgIHwgIDE3ICsKIGdjYy9qaXQv ZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdCAgICAgICAgICAgICB8ICA2MyArKysKIGdjYy9qaXQv ZHVtbXktZnJvbnRlbmQuY2MgICAgICAgICAgICAgICAgICAgICB8IDUxMiArKysrKysrKysrKysr KysrLS0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAgICAgICAgICAgICAgICAgICAgICB8IDE2 OSArKysrKy0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAzNyArLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAgICAgIHwg MTY2ICsrKysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAgICAgICAgICAg IHwgIDIyICstCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgNjcgKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgNTUgKysKIGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgOCArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCAgfCAg MzMgKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAgICAgICAgICAgICAgICAgICB8ICAz MyArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbGlhcy1hdHRyaWJ1dGUuYyAgIHwgIDUw ICsrCiAuLi4vaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYyAgICAgfCAxNTMg KysrKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmMgICAgfCAg NTIgKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29uc3QtYXR0cmlidXRlLmMgICB8IDEz MiArKysrKwogLi4uL2ppdC5kZy90ZXN0LW5vaW5saW5lLWF0dHJpYnV0ZS5jICAgICAgICAgIHwg MTE5ICsrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYyB8 ICA5MiArKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmMgICAg fCAxMzIgKysrKysKIC4uLi9qaXQuZGcvdGVzdC1yZXN0cmljdC1hdHRyaWJ1dGUuYyAgICAgICAg ICB8ICA3NSArKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYyAg ICB8IDExMiArKysrCiAuLi4vaml0LmRnL3Rlc3QtdmFyaWFibGUtYXR0cmlidXRlLmMgICAgICAg ICAgfCAgNDYgKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtd2Vhay1hdHRyaWJ1dGUuYyAg ICB8ICA0MSArKwogMjQgZmlsZXMgY2hhbmdlZCwgMjEyNSBpbnNlcnRpb25zKCspLCA3MyBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFs aWFzLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1hbHdheXNfaW5saW5lLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb25zdC1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtbm9pbmxpbmUtYXR0cmlidXRlLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmli dXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXB1cmUt YXR0cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LXJlc3RyaWN0LWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC11c2VkLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC12YXJpYWJsZS1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtd2Vhay1hdHRyaWJ1dGUuYwoKZGlmZiAtLWdpdCBh L2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QgYi9nY2Mvaml0L2RvY3MvdG9w aWNzL2NvbXBhdGliaWxpdHkucnN0CmluZGV4IDcwNGRlMWI1MWVkLi5jYmY1YjQxNGQ4YyAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAorKysgYi9nY2Mv aml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CkBAIC0zNzgsMyArMzc4LDE1IEBAIGFs aWdubWVudCBvZiBhIHZhcmlhYmxlOgogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGBgTElCR0NDSklU X0FCSV8yNWBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YKIDpmdW5jOmBnY2Nfaml0X3R5cGVfZ2V0 X3Jlc3RyaWN0YAorCisuLiBfTElCR0NDSklUX0FCSV8yNjoKKworYGBMSUJHQ0NKSVRfQUJJXzI2 YGAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitgYExJQkdDQ0pJVF9BQklfMjZgYCBjb3ZlcnMgdGhl IGFkZGl0aW9uIG9mIGZ1bmN0aW9ucyB0byBzZXQgYXR0cmlidXRlcworb24gZnVuY3Rpb25zIGFu ZCB2YXJpYWJsZXM6CisKKyAgKiA6ZnVuYzpgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRl YAorICAqIDpmdW5jOmBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlYAorICAq IDpmdW5jOmBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZWAKKyAg KiA6ZnVuYzpgZ2NjX2ppdF9sdmFsdWVfYWRkX3N0cmluZ19hdHRyaWJ1dGVgCmRpZmYgLS1naXQg YS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCBiL2djYy9qaXQvZG9jcy90b3Bp Y3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IGNlZTZhMzA4NTgyLi4zNWVlMDVjYTU5NyAxMDA2NDQK LS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKKysrIGIvZ2NjL2ppdC9k b2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAgLTk0NCw2ICs5NDQsMjMgQEAgR2xvYmFsIHZh cmlhYmxlcwogCiAgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKIAorVmFyaWFibGVz CisqKioqKioqKioKKworLi4gZnVuY3Rpb246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19q aXRfbHZhbHVlX2FkZF9zdHJpbmdfYXR0cmlidXRlIChnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisK KyAgICAgQWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBg IHRvIGEgdmFyaWFibGUgYGB2YXJpYWJsZWBgLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFk ZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMg cHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJ QkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKwogV29ya2luZyB3aXRoIHBvaW50ZXJzLCBzdHJ1Y3Rz IGFuZCB1bmlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK ZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdCBiL2djYy9qaXQv ZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdAppbmRleCAxMjdiYzBlNTZjZi4uODA0NjA1ZWE5Mzkg MTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdAorKysgYi9nY2Mv aml0L2RvY3MvdG9waWNzL2Z1bmN0aW9ucy5yc3QKQEAgLTE5Nyw2ICsxOTcsNjkgQEAgRnVuY3Rp b25zCiAKICAgIC4uIHR5cGU6OiBnY2Nfaml0X2Nhc2UKIAorLi4gZnVuY3Rpb246OiAgdm9pZFwK KyAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9m dW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCisKKyAgICAgQWRkIGFu IGF0dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHRvIGEgZnVuY3Rpb24gYGBmdW5jYGAuCisKKyAgICAg VGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToKKworICAuLiBjb2RlLWJs b2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKKyAgIFRoaXMg ZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yNmA7IHlvdSBjYW4g dGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJsb2NrOjogYwor CisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisuLiBmdW5jdGlvbjo6 ICB2b2lkXAorICAgICAgICAgICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJp YnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0 cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGEgc3RyaW5nIGF0dHJpYnV0ZSBg YGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgZnVuY3Rpb24KKyAgICAgYGBm dW5jYGAuCisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToK KworICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgieHh4 IikpKQorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9B QklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4g Y29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMK KworLi4gZnVuY3Rpb246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25f YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqdmFs dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IGxlbmd0aCkKKworICAgICBBZGQgYW4gYXR0cmlidXRlIGBgYXR0cmli dXRlYGAgd2l0aCBgYGxlbmd0aGBgIGludGVnZXIgdmFsdWVzIGBgdmFsdWVgYCB0byBhCisgICAg IGZ1bmN0aW9uIGBgZnVuY2BgLiBUaGUgaW50ZWdlciB2YWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBh cyB5b3Ugd291bGQgd3JpdGUKKyAgICAgdGhlbSBpbiBhIEMgY29kZS4KKworICAgICBUaGlzIGlz IGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjb2RlOgorCisgIC4uIGNvZGUtYmxvY2s6OiBj CisKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9ubnVsbCAoMSwgMikpKQorCisgICBUaGlzIGVudHJ5 cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5b3UgY2FuIHRlc3Qg Zm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAg ICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKwogQmxvY2tzCiAtLS0tLS0KIC4u IHR5cGU6OiBnY2Nfaml0X2Jsb2NrCmRpZmYgLS1naXQgYS9nY2Mvaml0L2R1bW15LWZyb250ZW5k LmNjIGIvZ2NjL2ppdC9kdW1teS1mcm9udGVuZC5jYwppbmRleCAyMTFmMWJlOThmYS4uZGJlZWFj ZDE3YTggMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MKKysrIGIvZ2NjL2pp dC9kdW1teS1mcm9udGVuZC5jYwpAQCAtMjksMzAgKzI5LDQyIEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAib3B0aW9ucy5oIgog I2luY2x1ZGUgInN0cmluZ3Bvb2wuaCIKICNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAi Y2dyYXBoLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCiAKICNpbmNsdWRlIDxtcGZyLmg+CiAKIC8q IEF0dHJpYnV0ZSBoYW5kbGluZy4gICovCiAKLXN0YXRpYyB0cmVlIGhhbmRsZV9ub3JldHVybl9h dHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUg aGFuZGxlX2xlYWZfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsK K3N0YXRpYyB0cmVlIGhhbmRsZV9hbGlhc19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwg aW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX2Fsd2F5c19pbmxpbmVfYXR0cmlidXRl ICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwKKwkJCQkJICAgIGJvb2wgKik7CitzdGF0aWMgdHJl ZSBoYW5kbGVfY29sZF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICop Owogc3RhdGljIHRyZWUgaGFuZGxlX2NvbnN0X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVl LCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfZm5zcGVjX2F0dHJpYnV0ZSAodHJl ZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfZm9ybWF0 X2FyZ19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGlj IHRyZWUgaGFuZGxlX2Zvcm1hdF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBi b29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX2xlYWZfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRsZV9tYWxsb2NfYXR0cmlidXRl ICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9w dXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7Ci1zdGF0aWMg dHJlZSBoYW5kbGVfbm92b3BzX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJv b2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfbm9pbmxpbmVfYXR0cmlidXRlICh0cmVlICosIHRy ZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRsZV9ub25udWxsX2F0dHJp YnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5k bGVfbm9yZXR1cm5fYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsK IHN0YXRpYyB0cmVlIGhhbmRsZV9ub3Rocm93X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVl LCBpbnQsIGJvb2wgKik7Ci1zdGF0aWMgdHJlZSBoYW5kbGVfc2VudGluZWxfYXR0cmlidXRlICh0 cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV90eXBl X2dlbmVyaWNfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0 YXRpYyB0cmVlIGhhbmRsZV90cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVl LCB0cmVlLCBpbnQsIGJvb2wgKik7Ci1zdGF0aWMgdHJlZSBoYW5kbGVfcmV0dXJuc190d2ljZV9h dHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUg aGFuZGxlX25vdm9wc19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICop Owogc3RhdGljIHRyZWUgaGFuZGxlX3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwKIAkJCQkJCSAgICAgICBpbnQsIGJvb2wgKik7Ci1zdGF0aWMg dHJlZSBpZ25vcmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsK K3N0YXRpYyB0cmVlIGhhbmRsZV9wdXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBp bnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfcmV0dXJuc190d2ljZV9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX3Nl bnRpbmVsX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0 aWMgdHJlZSBoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQs IGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdHJhbnNhY3Rpb25fcHVyZV9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX3R5 cGVfZ2VuZXJpY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwor c3RhdGljIHRyZWUgaGFuZGxlX3VzZWRfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGlu dCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSAodHJl ZSAqLCB0cmVlLCB0cmVlLCBpbnQsCisJCQkJCSBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxl X3dlYWtfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKSA7CiAKLXN0 YXRpYyB0cmVlIGhhbmRsZV9mb3JtYXRfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGlu dCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICos IHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9mb3JtYXRfYXJn X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJl ZSBpZ25vcmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIAog LyogSGVscGVyIHRvIGRlZmluZSBhdHRyaWJ1dGUgZXhjbHVzaW9ucy4gICovCiAjZGVmaW5lIEFU VFJfRVhDTChuYW1lLCBmdW5jdGlvbiwgdHlwZSwgdmFyaWFibGUpCVwKQEAgLTYxLDcgKzczLDYg QEAgc3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKIC8qIERlZmluZSBhdHRyaWJ1dGVzIHRoYXQgYXJlIG11dHVh bGx5IGV4Y2x1c2l2ZSB3aXRoIG9uZSBhbm90aGVyLiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9ub3JldHVybl9leGNsdXNpb25zW10gPQog ewotICBBVFRSX0VYQ0wgKCJub3JldHVybiIsIHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VY Q0wgKCJhbGxvY19hbGlnbiIsIHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJhbGxv Y19zaXplIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFUVFJfRVhDTCAoImNvbnN0IiwgdHJ1ZSwg dHJ1ZSwgdHJ1ZSksCkBAIC03OCw1NyArODksMTE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0 cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9yZXR1cm5zX3R3aWNlX2V4Y2x1c2lvbnNbXSA9 CiAgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSksCiB9OwogCisvKiBFeGNs dXNpb25zIHRoYXQgYXBwbHkgdG8gYXR0cmlidXRlIGFsbG9jX2FsaWduLCBhbGxvY19zaXplLCBh bmQgbWFsbG9jLiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1 c2lvbnMgYXR0cl9hbGxvY19leGNsdXNpb25zW10gPQoreworICBBVFRSX0VYQ0wgKCJjb25zdCIs IHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKCJub3JldHVybiIsIHRydWUsIHRydWUs IHRydWUpLAorICBBVFRSX0VYQ0wgKCJwdXJlIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJf RVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSksCit9OworCiBzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25z W10gPQogewogICBBVFRSX0VYQ0wgKCJjb25zdCIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRS X0VYQ0wgKCJhbGxvY19hbGlnbiIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKCJh bGxvY19zaXplIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoIm1hbGxvYyIsIHRy dWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJub3JldHVybiIsIHRydWUsIHRydWUsIHRy dWUpLAogICBBVFRSX0VYQ0wgKCJwdXJlIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFUVFJfRVhD TCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9hbHdheXNfaW5saW5lX2V4Y2x1c2lvbnNb XSA9Cit7CisgIEFUVFJfRVhDTCAoIm5vaW5saW5lIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFU VFJfRVhDTCAoInRhcmdldF9jbG9uZXMiLCB0cnVlLCB0cnVlLCB0cnVlKSwKKyAgQVRUUl9FWENM IChOVUxMLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9jb2xkX2hvdF9leGNsdXNpb25zW10gPQor eworICBBVFRSX0VYQ0wgKCJjb2xkIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAo ImhvdCIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKE5VTEwsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNs dXNpb25zIGF0dHJfbm9pbmxpbmVfZXhjbHVzaW9uc1tdID0KK3sKKyAgQVRUUl9FWENMICgiYWx3 YXlzX2lubGluZSIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKCJnbnVfaW5saW5l IiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBm YWxzZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNsdXNp b25zIGF0dHJfdGFyZ2V0X2V4Y2x1c2lvbnNbXSA9Cit7CisgIEFUVFJfRVhDTCAoInRhcmdldF9j bG9uZXMiLCBUQVJHRVRfSEFTX0ZNVl9UQVJHRVRfQVRUUklCVVRFLAorICAgICAgICAgICAgIFRB UkdFVF9IQVNfRk1WX1RBUkdFVF9BVFRSSUJVVEUsIFRBUkdFVF9IQVNfRk1WX1RBUkdFVF9BVFRS SUJVVEUpLAorICBBVFRSX0VYQ0wgKE5VTEwsIGZhbHNlLCBmYWxzZSwgZmFsc2UpLAorfTsKKwog LyogVGFibGUgb2YgbWFjaGluZS1pbmRlcGVuZGVudCBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBpbiBs aWJnY2NqaXQuICAqLwogc3RhdGljIGNvbnN0IGF0dHJpYnV0ZV9zcGVjIGppdF9nbnVfYXR0cmli dXRlc1tdID0KIHsKICAgLyogeyBuYW1lLCBtaW5fbGVuLCBtYXhfbGVuLCBkZWNsX3JlcSwgdHlw ZV9yZXEsIGZuX3R5cGVfcmVxLAogICAgICAgIGFmZmVjdHNfdHlwZV9pZGVudGl0eSwgaGFuZGxl ciwgZXhjbHVkZSB9ICovCi0gIHsgIm5vcmV0dXJuIiwgICAgICAgICAgICAgICAwLCAwLCB0cnVl LCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1 dGUsCi0JCQkgICAgICBhdHRyX25vcmV0dXJuX2V4Y2x1c2lvbnMgfSwKLSAgeyAibGVhZiIsCQkg ICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9s ZWFmX2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7ICJhbGlhcyIsCQkgICAgICAxLCAxLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9hbGlhc19hdHRyaWJ1dGUsIE5V TEwgfSwKKyAgeyAiYWx3YXlzX2lubGluZSIsCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFs c2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX2Fsd2F5c19pbmxpbmVfYXR0cmlidXRlLAorCQkJ ICAgICAgYXR0cl9hbHdheXNfaW5saW5lX2V4Y2x1c2lvbnMgfSwKKyAgeyAiY29sZCIsCQkgICAg ICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9jb2xk X2F0dHJpYnV0ZSwKKwkJCSAgICAgIGF0dHJfY29sZF9ob3RfZXhjbHVzaW9ucyB9LAogICAvKiBU aGUgc2FtZSBjb21tZW50cyBhcyBmb3Igbm9yZXR1cm4gYXR0cmlidXRlcyBhcHBseSB0byBjb25z dCBvbmVzLiAgKi8KLSAgeyAiY29uc3QiLCAgICAgICAgICAgICAgICAgIDAsIDAsIHRydWUsICBm YWxzZSwgZmFsc2UsIGZhbHNlLAorICB7ICJjb25zdCIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFs c2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9jb25zdF9hdHRyaWJ1dGUsCiAJCQkg ICAgICBhdHRyX2NvbnN0X3B1cmVfZXhjbHVzaW9ucyB9LAotICB7ICJtYWxsb2MiLCAgICAgICAg ICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0JCQkgICAgICBoYW5k bGVfbWFsbG9jX2F0dHJpYnV0ZSwgTlVMTCB9LAotICB7ICJwdXJlIiwgICAgICAgICAgICAgICAg ICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0JCQkgICAgICBoYW5kbGVfcHVy ZV9hdHRyaWJ1dGUsCi0JCQkgICAgICBhdHRyX2NvbnN0X3B1cmVfZXhjbHVzaW9ucyB9LAotICB7 ICJubyB2b3BzIiwgICAgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFs c2UsCisgIHsgImZuIHNwZWMiLAkJICAgICAgMSwgMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNl LAorCQkJICAgICAgaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUsIE5VTEwgfSwKKworICB7ICJsZWFm IiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFu ZGxlX2xlYWZfYXR0cmlidXRlLCBOVUxMIH0sCisgIHsgIm1hbGxvYyIsCQkgICAgICAwLCAwLCB0 cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9tYWxsb2NfYXR0cmli dXRlLCBhdHRyX2FsbG9jX2V4Y2x1c2lvbnMgfSwKKyAgeyAibm9yZXR1cm4iLAkJICAgICAgMCwg MCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfbm9yZXR1cm5f YXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9ub3JldHVybl9leGNsdXNpb25zIH0sCisgIHsgIm5v IHZvcHMiLAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCiAJCQkgICAg ICBoYW5kbGVfbm92b3BzX2F0dHJpYnV0ZSwgTlVMTCB9LAotICB7ICJub25udWxsIiwgICAgICAg ICAgICAgICAgMCwgLTEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKKyAgeyAibm9pbmxpbmUi LAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5k bGVfbm9pbmxpbmVfYXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9ub2lubGluZV9leGNsdXNpb25z IH0sCisgIHsgIm5vbm51bGwiLAkJICAgICAgMCwgLTEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxz ZSwKIAkJCSAgICAgIGhhbmRsZV9ub25udWxsX2F0dHJpYnV0ZSwgTlVMTCB9LAotICB7ICJub3Ro cm93IiwgICAgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisg IHsgIm5vdGhyb3ciLAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCiAJ CQkgICAgICBoYW5kbGVfbm90aHJvd19hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAicGF0Y2hhYmxl X2Z1bmN0aW9uX2VudHJ5IiwgMSwgMiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAg ICAgIGhhbmRsZV9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnlfYXR0cmlidXRlLAogCQkJICAgICAg TlVMTCB9LAotICB7ICJyZXR1cm5zX3R3aWNlIiwgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNl LCBmYWxzZSwgZmFsc2UsCisgIHsgInB1cmUiLAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBm YWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfcHVyZV9hdHRyaWJ1dGUsCisJCQkgICAgICBh dHRyX2NvbnN0X3B1cmVfZXhjbHVzaW9ucyB9LAorICB7ICJyZXR1cm5zX3R3aWNlIiwJICAgICAg MCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCiAJCQkgICAgICBoYW5kbGVfcmV0dXJu c190d2ljZV9hdHRyaWJ1dGUsCiAJCQkgICAgICBhdHRyX3JldHVybnNfdHdpY2VfZXhjbHVzaW9u cyB9LAotICB7ICJzZW50aW5lbCIsICAgICAgICAgICAgICAgMCwgMSwgZmFsc2UsIHRydWUsIHRy dWUsIGZhbHNlLAorICB7ICJzZW50aW5lbCIsCQkgICAgICAwLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1 ZSwgZmFsc2UsCiAJCQkgICAgICBoYW5kbGVfc2VudGluZWxfYXR0cmlidXRlLCBOVUxMIH0sCi0g IHsgInR5cGUgZ2VuZXJpYyIsICAgICAgICAgICAwLCAwLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFs c2UsCisgIHsgInRhcmdldCIsCQkgICAgICAxLCAtMSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwKKwkJCSAgICAgIGhhbmRsZV90YXJnZXRfYXR0cmlidXRlLCBhdHRyX3RhcmdldF9leGNsdXNp b25zIH0sCisgIHsgInR5cGUgZ2VuZXJpYyIsCSAgICAgIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVl LCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV90eXBlX2dlbmVyaWNfYXR0cmlidXRlLCBOVUxMIH0s Ci0gIHsgImZuIHNwZWMiLAkgCSAgICAgIDEsIDEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwK LQkJCSAgICAgIGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlLCBOVUxMIH0sCiAgIHsgInRyYW5zYWN0 aW9uX3B1cmUiLAkgICAgICAwLCAwLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCiAJCQkgICAg ICBoYW5kbGVfdHJhbnNhY3Rpb25fcHVyZV9hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAidXNlZCIs ICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICBo YW5kbGVfdXNlZF9hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAidmlzaWJpbGl0eSIsICAgICAgIDEs IDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgaGFuZGxlX3Zpc2li aWxpdHlfYXR0cmlidXRlLCBOVUxMIH0sCisgIHsgIndlYWsiLCAgICAgICAgIDAsIDAsIHRydWUs ICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgaGFuZGxlX3dlYWtfYXR0cmlidXRl LCBOVUxMIH0sCiAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seS4gIFRoZSBsZWFkaW5nICcqJyBi b3RoIHByZXZlbnRzIGl0cyB1c2FnZSBpbgogICAgICBzb3VyY2UgY29kZSBhbmQgc2lnbmFscyB0 aGF0IGl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IG1hY2hpbmUgdGFibGVzLiAgKi8KICAgeyAiKnRt IHJlZ3Bhcm0iLCAgICAgICAgICAgIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKLQkJ CSAgICAgIGlnbm9yZV9hdHRyaWJ1dGUsIE5VTEwgfQorCQkJICAgICAgaWdub3JlX2F0dHJpYnV0 ZSwgTlVMTCB9LAogfTsKIAogc3RhdGljIGNvbnN0IHNjb3BlZF9hdHRyaWJ1dGVfc3BlY3Mgaml0 X2dudV9hdHRyaWJ1dGVfdGFibGUgPQpAQCAtMTQzLDcgKzIxNCw3IEBAIHN0YXRpYyBjb25zdCBh dHRyaWJ1dGVfc3BlYyBqaXRfZm9ybWF0X2F0dHJpYnV0ZXNbXSA9CiB7CiAgIC8qIHsgbmFtZSwg bWluX2xlbiwgbWF4X2xlbiwgZGVjbF9yZXEsIHR5cGVfcmVxLCBmbl90eXBlX3JlcSwKICAgICAg ICBhZmZlY3RzX3R5cGVfaWRlbnRpdHksIGhhbmRsZXIsIGV4Y2x1ZGUgfSAqLwotICB7ICJmb3Jt YXQiLCAgICAgICAgICAgICAgICAgMywgMywgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwKKyAg eyAiZm9ybWF0IiwJCSAgICAgIDMsIDMsIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgZmFsc2UsCiAJCQkg ICAgICBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0ZSwgTlVMTCB9LAogICB7ICJmb3JtYXRfYXJnIiwg ICAgICAgICAgICAgMSwgMSwgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhh bmRsZV9mb3JtYXRfYXJnX2F0dHJpYnV0ZSwgTlVMTCB9CkBAIC0yMTIsMTQgKzI4Myw5IEBAIGhh bmRsZV9sZWFmX2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLAogICAgc3RydWN0IGF0 dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLwogCiBzdGF0aWMgdHJlZQotaGFuZGxlX2NvbnN0X2F0 dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBBUkdfVU5VU0VEIChuYW1lKSwKLQkJCXRyZWUgQVJH X1VOVVNFRCAoYXJncyksIGludCBBUkdfVU5VU0VEIChmbGFncyksCi0JCQlib29sICogQVJHX1VO VVNFRCAobm9fYWRkX2F0dHJzKSkKK2hhbmRsZV9jb25zdF9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUs IHRyZWUgbmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJCWludCBBUkdfVU5VU0VEIChm bGFncyksIGJvb2wgKm5vX2FkZF9hdHRycykKIHsKLSAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpICE9 IEZVTkNUSU9OX0RFQ0wKLSAgICAgIHx8ICFmbmRlY2xfYnVpbHRfaW5fcCAoKm5vZGUpKQotICAg IGluZm9ybSAoVU5LTk9XTl9MT0NBVElPTiwgIiVzOiVzOiAlRTogJUUiLCBfX0ZJTEVfXywgX19m dW5jX18sICpub2RlLCBuYW1lKTsKLQogICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKCpub2RlKTsK IAogICAvKiBTZWUgRklYTUUgY29tbWVudCBvbiBub3JldHVybiBpbiBjX2NvbW1vbl9hdHRyaWJ1 dGVfdGFibGUuICAqLwpAQCAtMjI4LDExICsyOTQsMTYgQEAgaGFuZGxlX2NvbnN0X2F0dHJpYnV0 ZSAodHJlZSAqbm9kZSwgdHJlZSBBUkdfVU5VU0VEIChuYW1lKSwKICAgZWxzZSBpZiAoVFJFRV9D T0RFICh0eXBlKSA9PSBQT0lOVEVSX1RZUEUKIAkgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAo dHlwZSkpID09IEZVTkNUSU9OX1RZUEUpCiAgICAgVFJFRV9UWVBFICgqbm9kZSkKLSAgICAgID0g YnVpbGRfcG9pbnRlcl90eXBlCi0JKGJ1aWxkX3R5cGVfdmFyaWFudCAoVFJFRV9UWVBFICh0eXBl KSwgMSwKLQkJCSAgICAgVFJFRV9USElTX1ZPTEFUSUxFIChUUkVFX1RZUEUgKHR5cGUpKSkpOwor ICAgICAgPSAoYnVpbGRfcXVhbGlmaWVkX3R5cGUKKwkgKGJ1aWxkX3BvaW50ZXJfdHlwZQorCSAg KGJ1aWxkX3R5cGVfdmFyaWFudCAoVFJFRV9UWVBFICh0eXBlKSwgMSwKKwkJCSAgICAgICBUUkVF X1RISVNfVk9MQVRJTEUgKFRSRUVfVFlQRSAodHlwZSkpKSksCisJICBUWVBFX1FVQUxTICh0eXBl KSkpOwogICBlbHNlCi0gICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIHsKKyAgICAgIHdhcm5p bmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUpOworICAg ICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQogCiAgIHJldHVybiBOVUxMX1RSRUU7CiB9 CkBAIC00OTQsNiArNTY1LDM1NyBAQCBoYW5kbGVfZm5zcGVjX2F0dHJpYnV0ZSAodHJlZSAqbm9k ZSBBVFRSSUJVVEVfVU5VU0VELCB0cmVlIEFSR19VTlVTRUQgKG5hbWUpLAogICByZXR1cm4gTlVM TF9UUkVFOwogfQogCisvKiBIYW5kbGUgYW4gInZpc2liaWxpdHkiIGF0dHJpYnV0ZTsgYXJndW1l bnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCisKK3N0YXRp YyB0cmVlCitoYW5kbGVfdmlzaWJpbGl0eV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFt ZSwgdHJlZSBhcmdzLAorCQkJICAgICBpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLAorCQkJICAgICBi b29sICpBUkdfVU5VU0VEIChub19hZGRfYXR0cnMpKQoreworICB0cmVlIGRlY2wgPSAqbm9kZTsK KyAgdHJlZSBpZCA9IFRSRUVfVkFMVUUgKGFyZ3MpOworICBlbnVtIHN5bWJvbF92aXNpYmlsaXR5 IHZpczsKKworICBpZiAoVFlQRV9QICgqbm9kZSkpCisgICAgeworICAgICAgaWYgKFRSRUVfQ09E RSAoKm5vZGUpID09IEVOVU1FUkFMX1RZUEUpCisJLyogT0suICAqLzsKKyAgICAgIGVsc2UgaWYg KCFSRUNPUkRfT1JfVU5JT05fVFlQRV9QICgqbm9kZSkpCisJeworCSAgd2FybmluZyAoT1BUX1dh dHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIG9uIG5vbi1jbGFzcyB0eXBlcyIsCisJ CSAgIG5hbWUpOworCSAgcmV0dXJuIE5VTExfVFJFRTsKKwl9CisgICAgICBlbHNlIGlmIChUWVBF X0ZJRUxEUyAoKm5vZGUpKQorCXsKKwkgIGVycm9yICgiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIGJl Y2F1c2UgJXFUIGlzIGFscmVhZHkgZGVmaW5lZCIsCisJCSBuYW1lLCAqbm9kZSk7CisJICByZXR1 cm4gTlVMTF9UUkVFOworCX0KKyAgICB9CisgIGVsc2UgaWYgKGRlY2xfZnVuY3Rpb25fY29udGV4 dCAoZGVjbCkgIT0gMCB8fCAhVFJFRV9QVUJMSUMgKGRlY2wpKQorICAgIHsKKyAgICAgIHdhcm5p bmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUpOworICAg ICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisKKyAgaWYgKFRSRUVfQ09ERSAoaWQpICE9IFNU UklOR19DU1QpCisgICAgeworICAgICAgZXJyb3IgKCJ2aXNpYmlsaXR5IGFyZ3VtZW50IG5vdCBh IHN0cmluZyIpOworICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisKKyAgLyogIElmIHRo aXMgaXMgYSB0eXBlLCBzZXQgdGhlIHZpc2liaWxpdHkgb24gdGhlIHR5cGUgZGVjbC4gICovCisg IGlmIChUWVBFX1AgKGRlY2wpKQorICAgIHsKKyAgICAgIGRlY2wgPSBUWVBFX05BTUUgKGRlY2wp OworICAgICAgaWYgKCFkZWNsKQorCXJldHVybiBOVUxMX1RSRUU7CisgICAgICBpZiAoVFJFRV9D T0RFIChkZWNsKSA9PSBJREVOVElGSUVSX05PREUpCisJeworCSAgIHdhcm5pbmcgKE9QVF9XYXR0 cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCBvbiB0eXBlcyIsCisJCSAgICBuYW1lKTsK KwkgICByZXR1cm4gTlVMTF9UUkVFOworCX0KKyAgICB9CisKKyAgaWYgKHN0cmNtcCAoVFJFRV9T VFJJTkdfUE9JTlRFUiAoaWQpLCAiZGVmYXVsdCIpID09IDApCisgICAgdmlzID0gVklTSUJJTElU WV9ERUZBVUxUOworICBlbHNlIGlmIChzdHJjbXAgKFRSRUVfU1RSSU5HX1BPSU5URVIgKGlkKSwg ImludGVybmFsIikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZX0lOVEVSTkFMOworICBlbHNl IGlmIChzdHJjbXAgKFRSRUVfU1RSSU5HX1BPSU5URVIgKGlkKSwgImhpZGRlbiIpID09IDApCisg ICAgdmlzID0gVklTSUJJTElUWV9ISURERU47CisgIGVsc2UgaWYgKHN0cmNtcCAoVFJFRV9TVFJJ TkdfUE9JTlRFUiAoaWQpLCAicHJvdGVjdGVkIikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZ X1BST1RFQ1RFRDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yICgiYXR0cmlidXRlICVxRSBh cmd1bWVudCBtdXN0IGJlIG9uZSBvZiAlcXMsICVxcywgJXFzLCBvciAlcXMiLAorCSAgICAgbmFt ZSwgImRlZmF1bHQiLCAiaGlkZGVuIiwgInByb3RlY3RlZCIsICJpbnRlcm5hbCIpOworICAgICAg dmlzID0gVklTSUJJTElUWV9ERUZBVUxUOworICAgIH0KKworICBpZiAoREVDTF9WSVNJQklMSVRZ X1NQRUNJRklFRCAoZGVjbCkKKyAgICAgICYmIHZpcyAhPSBERUNMX1ZJU0lCSUxJVFkgKGRlY2wp KQorICAgIHsKKyAgICAgIHRyZWUgYXR0cmlidXRlcyA9IChUWVBFX1AgKCpub2RlKQorCQkJID8g VFlQRV9BVFRSSUJVVEVTICgqbm9kZSkKKwkJCSA6IERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOwor ICAgICAgaWYgKGxvb2t1cF9hdHRyaWJ1dGUgKCJ2aXNpYmlsaXR5IiwgYXR0cmlidXRlcykpCisJ ZXJyb3IgKCIlcUQgcmVkZWNsYXJlZCB3aXRoIGRpZmZlcmVudCB2aXNpYmlsaXR5IiwgZGVjbCk7 CisgICAgICBlbHNlIGlmIChUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUworCSAgICAg ICAmJiBsb29rdXBfYXR0cmlidXRlICgiZGxsaW1wb3J0IiwgYXR0cmlidXRlcykpCisJZXJyb3Ig KCIlcUQgd2FzIGRlY2xhcmVkICVxcyB3aGljaCBpbXBsaWVzIGRlZmF1bHQgdmlzaWJpbGl0eSIs CisJICAgICAgIGRlY2wsICJkbGxpbXBvcnQiKTsKKyAgICAgIGVsc2UgaWYgKFRBUkdFVF9ETExJ TVBPUlRfREVDTF9BVFRSSUJVVEVTCisJICAgICAgICYmIGxvb2t1cF9hdHRyaWJ1dGUgKCJkbGxl eHBvcnQiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCB3YXMgZGVjbGFyZWQgJXFzIHdoaWNo IGltcGxpZXMgZGVmYXVsdCB2aXNpYmlsaXR5IiwKKwkgICAgICAgZGVjbCwgImRsbGV4cG9ydCIp OworICAgIH0KKworICBERUNMX1ZJU0lCSUxJVFkgKGRlY2wpID0gdmlzOworICBERUNMX1ZJU0lC SUxJVFlfU1BFQ0lGSUVEIChkZWNsKSA9IDE7CisKKyAgLyogR28gYWhlYWQgYW5kIGF0dGFjaCB0 aGUgYXR0cmlidXRlIHRvIHRoZSBub2RlIGFzIHdlbGwuICBUaGlzIGlzIG5lZWRlZAorICAgICBz byB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBWSVNJQklMSVRZX0RFRkFVTFQgYmVj YXVzZSB0aGUKKyAgICAgdmlzaWJpbGl0eSB3YXMgbm90IHNwZWNpZmllZCwgb3IgYmVjYXVzZSBp dCB3YXMgZXhwbGljaXRseSBvdmVycmlkZGVuCisgICAgIGZyb20gdGhlIGNvbnRhaW5pbmcgc2Nv cGUuICAqLworCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJhbHdheXNf aW5saW5lIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9z cGVjLmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2Fsd2F5c19pbmxpbmVfYXR0 cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsCisJCQkJdHJlZSBBUkdfVU5VU0VEIChhcmdz KSwKKwkJCQlpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLAorCQkJCWJvb2wgKm5vX2FkZF9hdHRycykK K3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09IEZVTkNUSU9OX0RFQ0wpCisgICAgeworICAg ICAgLyogU2V0IHRoZSBhdHRyaWJ1dGUgYW5kIG1hcmsgaXQgZm9yIGRpc3JlZ2FyZGluZyBpbmxp bmUKKwkgbGltaXRzLiAgKi8KKyAgICAgIERFQ0xfRElTUkVHQVJEX0lOTElORV9MSU1JVFMgKCpu b2RlKSA9IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRy aWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0 dHJzID0gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxl IGEgImNvbGQiIGFuZCBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJp YnV0ZV9zcGVjLmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2NvbGRfYXR0cmli dXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCSAg ICAgICBpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlm IChUUkVFX0NPREUgKCpub2RlKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUg KCpub2RlKSA9PSBMQUJFTF9ERUNMKQorICAgIHsKKyAgICAgIC8qIEF0dHJpYnV0ZSBjb2xkIHBy b2Nlc3NpbmcgaXMgZG9uZSBsYXRlciB3aXRoIGxvb2t1cF9hdHRyaWJ1dGUuICAqLworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRy aWJ1dGUgaWdub3JlZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAg fQorCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJub2lubGluZSIgYXR0 cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVy LiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKm5v ZGUsIHRyZWUgbmFtZSwKKwkJCSAgIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCQkgICBpbnQg QVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NP REUgKCpub2RlKSA9PSBGVU5DVElPTl9ERUNMKQorICAgIERFQ0xfVU5JTkxJTkFCTEUgKCpub2Rl KSA9IDE7CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIl cUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVl OworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBIYW5kbGUgYSAid2VhayIg YXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5k bGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV93ZWFrX2F0dHJpYnV0ZSAodHJlZSAqbm9k ZSwgdHJlZSBuYW1lLAorCQkgICAgICAgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJICAgICAg IGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCSAgICAgICBib29sICogQVJHX1VOVVNFRCAobm9f YWRkX2F0dHJzKSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09IEZVTkNUSU9OX0RFQ0wK KyAgICAgICYmIERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKCpub2RlKSkKKyAgICB7CisgICAgICB3 YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICJpbmxpbmUgZnVuY3Rpb24gJXErRCBkZWNsYXJlZCB3 ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorICBlbHNl IGlmIChsb29rdXBfYXR0cmlidXRlICgiaWZ1bmMiLCBERUNMX0FUVFJJQlVURVMgKCpub2RlKSkp CisgICAgeworICAgICAgZXJyb3IgKCJpbmRpcmVjdCBmdW5jdGlvbiAlcStEIGNhbm5vdCBiZSBk ZWNsYXJlZCB3ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAg ICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKyAgZWxzZSBpZiAoVkFSX09SX0ZVTkNUSU9OX0RF Q0xfUCAoKm5vZGUpKQorICAgIGRlY2xhcmVfd2VhayAoKm5vZGUpOworICBlbHNlCisgICAgd2Fy bmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisK KyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgInRhcmdldCIgYXR0cmlidXRl LiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV90YXJnZXRfYXR0cmlidXRlICh0cmVlICpub2Rl LCB0cmVlIG5hbWUsIHRyZWUgYXJncywgaW50IGZsYWdzLAorCQkJIGJvb2wgKm5vX2FkZF9hdHRy cykKK3sKKyAgLyogRW5zdXJlIHdlIGhhdmUgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gICovCisg IGlmIChUUkVFX0NPREUgKCpub2RlKSAhPSBGVU5DVElPTl9ERUNMKQorICAgIHsKKyAgICAgIHdh cm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUpOwor ICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorICBlbHNlIGlmICghIHRhcmdldG0u dGFyZ2V0X29wdGlvbi52YWxpZF9hdHRyaWJ1dGVfcCAoKm5vZGUsIG5hbWUsIGFyZ3MsCisJCQkJ CQkgICAgICBmbGFncykpCisgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisKKyAgLyogQ2hlY2sg dGhhdCB0aGVyZSdzIG5vIGVtcHR5IHN0cmluZyBpbiB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZS4g ICovCisgIGZvciAodHJlZSB0ID0gYXJnczsgdCAhPSBOVUxMX1RSRUU7IHQgPSBUUkVFX0NIQUlO ICh0KSkKKyAgICB7CisgICAgICB0cmVlIHZhbHVlID0gVFJFRV9WQUxVRSAodCk7CisgICAgICBp ZiAoVFJFRV9DT0RFICh2YWx1ZSkgPT0gU1RSSU5HX0NTVAorCSAgJiYgVFJFRV9TVFJJTkdfTEVO R1RIICh2YWx1ZSkgPT0gMQorCSAgJiYgVFJFRV9TVFJJTkdfUE9JTlRFUiAodmFsdWUpWzBdID09 ICdcMCcpCisJeworCSAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiZW1wdHkgc3RyaW5nIGlu IGF0dHJpYnV0ZSAlPHRhcmdldCU+Iik7CisJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9Cisg ICAgfQorCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJ1c2VkIiBhdHRy aWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIu ICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX3VzZWRfYXR0cmlidXRlICh0cmVlICpwbm9kZSwg dHJlZSBuYW1lLCB0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkgICAgICAgaW50IEFSR19VTlVT RUQgKGZsYWdzKSwgYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICB0cmVlIG5vZGUgPSAqcG5vZGU7 CisKKyAgaWYgKFRSRUVfQ09ERSAobm9kZSkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgfHwgKFZB Ul9QIChub2RlKSAmJiBUUkVFX1NUQVRJQyAobm9kZSkpCisgICAgICB8fCAoVFJFRV9DT0RFIChu b2RlKSA9PSBUWVBFX0RFQ0wpKQorICAgIHsKKyAgICAgIFRSRUVfVVNFRCAobm9kZSkgPSAxOwor ICAgICAgREVDTF9QUkVTRVJWRV9QIChub2RlKSA9IDE7CisgICAgICBpZiAoVkFSX1AgKG5vZGUp KQorCURFQ0xfUkVBRF9QIChub2RlKSA9IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg d2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7 CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJF RTsKK30KKworLyogSGFuZGxlIGFuICJhbGlhcyIgb3IgImlmdW5jIiBhdHRyaWJ1dGU7IGFyZ3Vt ZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIsIGV4Y2VwdCB0aGF0 IElTX0FMSUFTIHRlbGxzIHVzCisgICB3aGV0aGVyIHRoaXMgaXMgYW4gYWxpYXMgYXMgb3Bwb3Nl ZCB0byBpZnVuYyBhdHRyaWJ1dGUuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2FsaWFzX2lm dW5jX2F0dHJpYnV0ZSAoYm9vbCBpc19hbGlhcywgdHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVl IGFyZ3MsCisJCQkgICAgICBib29sICpub19hZGRfYXR0cnMpCit7CisgIHRyZWUgZGVjbCA9ICpu b2RlOworCisgIGlmIChUUkVFX0NPREUgKGRlY2wpICE9IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYm ICghaXNfYWxpYXMgfHwgIVZBUl9QIChkZWNsKSkpCisgICAgeworICAgICAgd2FybmluZyAoT1BU X1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9f YWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKChUUkVFX0NPREUgKGRlY2wpID09 IEZVTkNUSU9OX0RFQ0wgJiYgREVDTF9JTklUSUFMIChkZWNsKSkKKyAgICAgIHx8IChUUkVFX0NP REUgKGRlY2wpICE9IEZVTkNUSU9OX0RFQ0wKKwkgICYmIFRSRUVfUFVCTElDIChkZWNsKSAmJiAh REVDTF9FWFRFUk5BTCAoZGVjbCkpCisgICAgICAvKiBBIHN0YXRpYyB2YXJpYWJsZSBkZWNsYXJh dGlvbiBpcyBhbHdheXMgYSB0ZW50YXRpdmUgZGVmaW5pdGlvbiwKKwkgYnV0IHRoZSBhbGlhcyBp cyBhIG5vbi10ZW50YXRpdmUgZGVmaW5pdGlvbiB3aGljaCBvdmVycmlkZXMuICAqLworICAgICAg fHwgKFRSRUVfQ09ERSAoZGVjbCkgIT0gRlVOQ1RJT05fREVDTAorCSAgJiYgISBUUkVFX1BVQkxJ QyAoZGVjbCkgJiYgREVDTF9JTklUSUFMIChkZWNsKSkpCisgICAgeworICAgICAgZXJyb3IgKCIl cStEIGRlZmluZWQgYm90aCBub3JtYWxseSBhbmQgYXMgJXFFIGF0dHJpYnV0ZSIsIGRlY2wsIG5h bWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgICByZXR1cm4gTlVMTF9UUkVF OworICAgIH0KKyAgZWxzZSBpZiAoIWlzX2FsaWFzCisJICAgJiYgKGxvb2t1cF9hdHRyaWJ1dGUg KCJ3ZWFrIiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkKKwkgICAgICAgfHwgbG9va3VwX2F0dHJp YnV0ZSAoIndlYWtyZWYiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSkpCisgICAgeworICAgICAg ZXJyb3IgKCJ3ZWFrICVxK0QgY2Fubm90IGJlIGRlZmluZWQgJXFFIiwgZGVjbCwgbmFtZSk7Cisg ICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMX1RSRUU7CisgICAg fQorCisgIC8qIE5vdGUgdGhhdCB0aGUgdmVyeSBmaXJzdCB0aW1lIHdlIHByb2Nlc3MgYSBuZXN0 ZWQgZGVjbGFyYXRpb24sCisgICAgIGRlY2xfZnVuY3Rpb25fY29udGV4dCB3aWxsIG5vdCBiZSBz ZXQuICBJbmRlZWQsICp3b3VsZCogbmV2ZXIKKyAgICAgYmUgc2V0IGV4Y2VwdCBmb3IgdGhlIERF Q0xfSU5JVElBTC9ERUNMX0VYVEVSTkFMIGZyb2JiZXJ5IHRoYXQKKyAgICAgd2UgZG8gYmVsb3cu ICBBZnRlciBzdWNoIGZyb2JiZXJ5LCBwdXNoZGVjbCB3b3VsZCBzZXQgdGhlIGNvbnRleHQuCisg ICAgIEluIGFueSBjYXNlLCB0aGlzIGlzIG5ldmVyIHdoYXQgd2Ugd2FudC4gICovCisgIGVsc2Ug aWYgKGRlY2xfZnVuY3Rpb25fY29udGV4dCAoZGVjbCkgPT0gMCAmJiBjdXJyZW50X2Z1bmN0aW9u X2RlY2wgPT0gTlVMTCkKKyAgICB7CisgICAgICB0cmVlIGlkOworCisgICAgICBpZCA9IFRSRUVf VkFMVUUgKGFyZ3MpOworICAgICAgaWYgKFRSRUVfQ09ERSAoaWQpICE9IFNUUklOR19DU1QpCisJ eworCSAgZXJyb3IgKCJhdHRyaWJ1dGUgJXFFIGFyZ3VtZW50IG5vdCBhIHN0cmluZyIsIG5hbWUp OworCSAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisJICByZXR1cm4gTlVMTF9UUkVFOworCX0KKyAg ICAgIGlkID0gZ2V0X2lkZW50aWZpZXIgKFRSRUVfU1RSSU5HX1BPSU5URVIgKGlkKSk7CisgICAg ICAvKiBUaGlzIGNvdW50cyBhcyBhIHVzZSBvZiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8uICAqLwor ICAgICAgVFJFRV9VU0VEIChpZCkgPSAxOworCisgICAgICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9 PSBGVU5DVElPTl9ERUNMKQorCURFQ0xfSU5JVElBTCAoZGVjbCkgPSBlcnJvcl9tYXJrX25vZGU7 CisgICAgICBlbHNlCisJVFJFRV9TVEFUSUMgKGRlY2wpID0gMTsKKworICAgICAgaWYgKCFpc19h bGlhcykKKwl7CisJICAvKiBpZnVuY3MgYXJlIGFsc28gYWxpYXNlcywgc28gc2V0IHRoYXQgYXR0 cmlidXRlIHRvby4gICovCisJICBERUNMX0FUVFJJQlVURVMgKGRlY2wpCisJICAgID0gdHJlZV9j b25zIChnZXRfaWRlbnRpZmllciAoImFsaWFzIiksIGFyZ3MsCisJCQkgREVDTF9BVFRSSUJVVEVT IChkZWNsKSk7CisJICBERUNMX0FUVFJJQlVURVMgKGRlY2wpID0gdHJlZV9jb25zIChnZXRfaWRl bnRpZmllciAoImlmdW5jIiksCisJCQkJCSAgICAgIE5VTEwsIERFQ0xfQVRUUklCVVRFUyAoZGVj bCkpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJp YnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0 cnMgPSB0cnVlOworICAgIH0KKworICBpZiAoZGVjbF9pbl9zeW10YWJfcCAoKm5vZGUpKQorICAg IHsKKyAgICAgIHN0cnVjdCBzeW10YWJfbm9kZSAqbiA9IHN5bXRhYl9ub2RlOjpnZXQgKGRlY2wp OworICAgICAgaWYgKG4gJiYgbi0+cmVmdXNlX3Zpc2liaWxpdHlfY2hhbmdlcykKKwllcnJvciAo IiUrcUQgZGVjbGFyZWQgJXFzIGFmdGVyIGJlaW5nIHVzZWQiLAorCSAgICAgICBkZWNsLCBpc19h bGlhcyA/ICJhbGlhcyIgOiAiaWZ1bmMiKTsKKyAgICB9CisKKworICByZXR1cm4gTlVMTF9UUkVF OworfQorCisvKiBIYW5kbGUgYW4gImFsaWFzIiBvciAiaWZ1bmMiIGF0dHJpYnV0ZTsgYXJndW1l bnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCisKK3N0YXRp YyB0cmVlCitoYW5kbGVfYWxpYXNfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRy ZWUgYXJncywKKwkJCWludCBBUkdfVU5VU0VEIChmbGFncyksIGJvb2wgKm5vX2FkZF9hdHRycykK K3sKKyAgcmV0dXJuIGhhbmRsZV9hbGlhc19pZnVuY19hdHRyaWJ1dGUgKHRydWUsIG5vZGUsIG5h bWUsIGFyZ3MsIG5vX2FkZF9hdHRycyk7Cit9CisKIC8qIChlbmQgb2YgYXR0cmlidXRlLWhhbmRs aW5nKS4gICovCiAKIC8qIExhbmd1YWdlLWRlcGVuZGVudCBjb250ZW50cyBvZiBhIHR5cGUuICAq LwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MgYi9nY2Mvaml0L2ppdC1wbGF5 YmFjay5jYwppbmRleCBmODczNTFlYWY4Mi4uODRkZjZjMTAwZTYgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvaml0LXBsYXliYWNrLmNjCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCkBAIC0yMCw2 ICsyMCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNkZWZpbmUgSU5DTFVERV9NVVRFWAorI2luY2x1 ZGUgImxpYmdjY2ppdC5oIgogI2luY2x1ZGUgInN5c3RlbS5oIgogI2luY2x1ZGUgImNvcmV0eXBl cy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgpAQCAtNDk5LDYgKzUwMCw1NCBAQCBuZXdfcGFyYW0g KGxvY2F0aW9uICpsb2MsCiAgIHJldHVybiBuZXcgcGFyYW0gKHRoaXMsIGlubmVyKTsKIH0KIAor Y29uc3QgY2hhciogZm5fYXR0cmlidXRlX3RvX3N0cmluZyAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUg YXR0cikKK3sKKyAgc3dpdGNoIChhdHRyKQorICB7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJ QlVURV9BTElBUzoKKyAgICAgIHJldHVybiAiYWxpYXMiOworICAgIGNhc2UgR0NDX0pJVF9GTl9B VFRSSUJVVEVfQUxXQVlTX0lOTElORToKKyAgICAgIHJldHVybiAiYWx3YXlzX2lubGluZSI7Cisg ICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9JTkxJTkU6CisgICAgICByZXR1cm4gTlVMTDsK KyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX05PSU5MSU5FOgorICAgICAgcmV0dXJuICJu b2lubGluZSI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9UQVJHRVQ6CisgICAgICBy ZXR1cm4gInRhcmdldCI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9VU0VEOgorICAg ICAgcmV0dXJuICJ1c2VkIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX1ZJU0lCSUxJ VFk6CisgICAgICByZXR1cm4gInZpc2liaWxpdHkiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRS SUJVVEVfQ09MRDoKKyAgICAgIHJldHVybiAiY29sZCI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FU VFJJQlVURV9SRVRVUk5TX1RXSUNFOgorICAgICAgcmV0dXJuICJyZXR1cm5zX3R3aWNlIjsKKyAg ICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX1BVUkU6CisgICAgICByZXR1cm4gInB1cmUiOwor ICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQ09OU1Q6CisgICAgICByZXR1cm4gImNvbnN0 IjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX1dFQUs6CisgICAgICByZXR1cm4gIndl YWsiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9OTlVMTDoKKyAgICAgIHJldHVy biAibm9ubnVsbCI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9NQVg6CisgICAgICBy ZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciogdmFyaWFi bGVfYXR0cmlidXRlX3RvX3N0cmluZyAoZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUgYXR0cikK K3sKKyAgc3dpdGNoIChhdHRyKQorICB7CisgICAgY2FzZSBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJ QlVURV9WSVNJQklMSVRZOgorICAgICAgcmV0dXJuICJ2aXNpYmlsaXR5IjsKKyAgICBjYXNlIEdD Q19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX01BWDoKKyAgICAgIHJldHVybiBOVUxMOworICB9Cisg IHJldHVybiBOVUxMOworfQorCiAvKiBDb25zdHJ1Y3QgYSBwbGF5YmFjazo6ZnVuY3Rpb24gaW5z dGFuY2UuICAqLwogCiBwbGF5YmFjazo6ZnVuY3Rpb24gKgpAQCAtNTA5LDcgKzU1OCwxMyBAQCBu ZXdfZnVuY3Rpb24gKGxvY2F0aW9uICpsb2MsCiAJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkg ICAgICBjb25zdCBhdXRvX3ZlYzxwYXJhbSAqPiAqcGFyYW1zLAogCSAgICAgIGludCBpc192YXJp YWRpYywKLQkgICAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0aW5faWQpCisJICAgICAg ZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkLAorCSAgICAgIGNvbnN0IHN0ZDo6dmVj dG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiAmYXR0cmlidXRlcywKKwkgICAgICBjb25zdCBzdGQ6 OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1dGUsCisJCQkJCSAgc3RkOjpzdHJp bmc+PiAmc3RyaW5nX2F0dHJpYnV0ZXMsCisJICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpw YWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLAorCQkJCQkgIHN0ZDo6dmVjdG9yPGludD4+PgorCQkJ CQkgICZpbnRfYXJyYXlfYXR0cmlidXRlcykKIHsKICAgaW50IGk7CiAgIHBhcmFtICpwYXJhbTsK QEAgLTU0Myw2ICs1OTgsOCBAQCBuZXdfZnVuY3Rpb24gKGxvY2F0aW9uICpsb2MsCiAgIERFQ0xf UkVTVUxUIChmbmRlY2wpID0gcmVzZGVjbDsKICAgREVDTF9DT05URVhUIChyZXNkZWNsKSA9IGZu ZGVjbDsKIAorICB0cmVlIGZuX2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7CisKICAgaWYgKGJ1aWx0 aW5faWQpCiAgICAgewogICAgICAgZ2NjX2Fzc2VydCAobG9jID09IE5VTEwpOwpAQCAtNTg4LDEy ICs2NDUsNjIgQEAgbmV3X2Z1bmN0aW9uIChsb2NhdGlvbiAqbG9jLAogICAgICAgREVDTF9ERUNM QVJFRF9JTkxJTkVfUCAoZm5kZWNsKSA9IDE7CiAKICAgICAgIC8qIEFkZCBhdHRyaWJ1dGUgImFs d2F5c19pbmxpbmUiOiAqLwotICAgICAgREVDTF9BVFRSSUJVVEVTIChmbmRlY2wpID0KLQl0cmVl X2NvbnMgKGdldF9pZGVudGlmaWVyICgiYWx3YXlzX2lubGluZSIpLAotCQkgICBOVUxMLAotCQkg ICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkpOworICAgICAgZm5fYXR0cmlidXRlcyA9IHRyZWVf Y29ucyAoZ2V0X2lkZW50aWZpZXIgKCJhbHdheXNfaW5saW5lIiksCisJCQkJIE5VTEwsCisJCQkJ IGZuX2F0dHJpYnV0ZXMpOwogICAgIH0KIAorICAvKiBBbGwgYXR0cmlidXRlcyBuZWVkIHRvIGJl IGRlY2xhcmVkIGluIGBkdW1teS1mcm9udGVuZC5jY2AgYW5kIG1vcmUKKyAgICAgc3BlY2lmaWNh bGx5IGluIGBqaXRfYXR0cmlidXRlX3RhYmxlYC4gKi8KKyAgZm9yIChhdXRvIGF0dHI6IGF0dHJp YnV0ZXMpCisgIHsKKyAgICBpZiAoYXR0ciA9PSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9JTkxJTkUp CisgICAgICBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChmbmRlY2wpID0gMTsKKworICAgIGNvbnN0 IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90b19zdHJpbmcgKGF0dHIpOworICAgIGlm IChhdHRyaWJ1dGUpCisgICAgeworICAgICAgdHJlZSBpZGVudCA9IGdldF9pZGVudGlmaWVyIChh dHRyaWJ1dGUpOworICAgICAgZm5fYXR0cmlidXRlcyA9IHRyZWVfY29ucyAoaWRlbnQsIE5VTExf VFJFRSwgZm5fYXR0cmlidXRlcyk7CisgICAgfQorICB9CisKKyAgZm9yIChhdXRvIGF0dHI6IHN0 cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUmIG5hbWUgPSBz dGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYgdmFsdWUgPSBzdGQ6OmdldDwxPihh dHRyKTsKKyAgICB0cmVlIGF0dHJpYnV0ZV92YWx1ZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9U UkVFLAorCTo6YnVpbGRfc3RyaW5nICh2YWx1ZS5sZW5ndGggKCkgKyAxLCB2YWx1ZS5jX3N0ciAo KSkpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90b19zdHJpbmcg KG5hbWUpOworICAgIHRyZWUgaWRlbnQgPSBhdHRyaWJ1dGUgPyBnZXRfaWRlbnRpZmllciAoYXR0 cmlidXRlKSA6IE5VTEw7CisKKyAgICBpZiAoaWRlbnQpCisgICAgICBmbl9hdHRyaWJ1dGVzID0g dHJlZV9jb25zIChpZGVudCwgYXR0cmlidXRlX3ZhbHVlLCBmbl9hdHRyaWJ1dGVzKTsKKyAgfQor CisgIGZvciAoYXV0byBhdHRyOiBpbnRfYXJyYXlfYXR0cmlidXRlcykKKyAgeworICAgIGdjY19q aXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0cik7CisgICAgc3RkOjp2ZWN0 b3I8aW50PiYgdmFsdWVzID0gc3RkOjpnZXQ8MT4oYXR0cik7CisKKyAgICBjb25zdCBjaGFyKiBh dHRyaWJ1dGUgPSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsKKyAgICB0cmVlIGlkZW50 ID0gYXR0cmlidXRlID8gZ2V0X2lkZW50aWZpZXIgKGF0dHJpYnV0ZSkgOiBOVUxMOworCisgICAg aWYgKCFpZGVudCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgdHJlZSB0cmVlX2xpc3QgPSBOVUxM X1RSRUU7CisgICAgdHJlZSAqcF90cmVlX2xpc3QgPSAmdHJlZV9saXN0OworICAgIGZvciAoYXV0 byB2YWx1ZSA6IHZhbHVlcykKKyAgICB7CisgICAgICB0cmVlIGludF92YWx1ZSA9IGJ1aWxkX2lu dF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCB2YWx1ZSk7CisgICAgICAqcF90cmVlX2xpc3QgPSBi dWlsZF90cmVlX2xpc3QgKE5VTEwsIGludF92YWx1ZSk7CisgICAgICBwX3RyZWVfbGlzdCA9ICZU UkVFX0NIQUlOICgqcF90cmVlX2xpc3QpOworICAgIH0KKyAgICBmbl9hdHRyaWJ1dGVzID0gdHJl ZV9jb25zIChpZGVudCwgdHJlZV9saXN0LCBmbl9hdHRyaWJ1dGVzKTsKKyAgfQorCisgIGRlY2xf YXR0cmlidXRlcyAoJmZuZGVjbCwgZm5fYXR0cmlidXRlcywgMCk7CiAgIGZ1bmN0aW9uICpmdW5j ID0gbmV3IGZ1bmN0aW9uICh0aGlzLCBmbmRlY2wsIGtpbmQpOwogICBtX2Z1bmN0aW9ucy5zYWZl X3B1c2ggKGZ1bmMpOwogICByZXR1cm4gZnVuYzsKQEAgLTYwNyw3ICs3MTQsOSBAQCBnbG9iYWxf bmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAJCSBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2lu ZCwKIAkJIHR5cGUgKnR5cGUsCiAJCSBjb25zdCBjaGFyICpuYW1lLAotCQkgZW51bSBnbG9iYWxf dmFyX2ZsYWdzIGZsYWdzKQorCQkgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzLAorCQkgY29u c3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJ CQkgICAgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7CiAgIGdjY19hc3NlcnQgKHR5cGUp OwogICBnY2NfYXNzZXJ0IChuYW1lKTsKQEAgLTY1Miw5ICs3NjEsMzIgQEAgZ2xvYmFsX25ld19k ZWNsIChsb2NhdGlvbiAqbG9jLAogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChp bm5lciwgbG9jKTsKIAorICBzZXRfdmFyaWFibGVfc3RyaW5nX2F0dHJpYnV0ZSAoYXR0cmlidXRl cywgaW5uZXIpOworCiAgIHJldHVybiBpbm5lcjsKIH0KIAordm9pZAorcGxheWJhY2s6Ogorc2V0 X3ZhcmlhYmxlX3N0cmluZ19hdHRyaWJ1dGUgKAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBh aXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkgICAgICAgc3RkOjpzdHJpbmc+PiAm c3RyaW5nX2F0dHJpYnV0ZXMsCisgIHRyZWUgZGVjbCkKK3sKKyAgdHJlZSB2YXJfYXR0cmlidXRl cyA9IE5VTExfVFJFRTsKKyAgZm9yIChhdXRvIGF0dHI6IHN0cmluZ19hdHRyaWJ1dGVzKQorICB7 CisgICAgZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRy KTsKKyAgICBzdGQ6OnN0cmluZyYgdmFsdWUgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICB0cmVl IGF0dHJpYnV0ZV92YWx1ZSA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLAorCTo6YnVpbGRf c3RyaW5nICh2YWx1ZS5sZW5ndGggKCkgKyAxLCB2YWx1ZS5jX3N0ciAoKSkpOworICAgIHRyZWUg aWRlbnQgPSBnZXRfaWRlbnRpZmllciAodmFyaWFibGVfYXR0cmlidXRlX3RvX3N0cmluZyAobmFt ZSkpOworICAgIGlmIChpZGVudCkKKyAgICAgIHZhcl9hdHRyaWJ1dGVzID0gdHJlZV9jb25zIChp ZGVudCwgYXR0cmlidXRlX3ZhbHVlLCB2YXJfYXR0cmlidXRlcyk7CisgIH0KKyAgZGVjbF9hdHRy aWJ1dGVzICgmZGVjbCwgdmFyX2F0dHJpYnV0ZXMsIDApOworfQorCiAvKiBJbiB1c2UgYnkgbmV3 X2dsb2JhbCBhbmQgbmV3X2dsb2JhbF9pbml0aWFsaXplZC4gICovCiAKIHBsYXliYWNrOjpsdmFs dWUgKgpAQCAtNjc0LDEwICs4MDYsMTIgQEAgbmV3X2dsb2JhbCAobG9jYXRpb24gKmxvYywKIAkg ICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAJICAgIHR5cGUgKnR5cGUsCiAJICAg IGNvbnN0IGNoYXIgKm5hbWUsCi0JICAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncykKKwkg ICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzLAorCSAgICBjb25zdCBzdGQ6OnZlY3Rvcjxz dGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkJCXN0ZDo6c3RyaW5nPj4g JmF0dHJpYnV0ZXMpCiB7CiAgIHRyZWUgaW5uZXIgPQotICAgIGdsb2JhbF9uZXdfZGVjbCAobG9j LCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncyk7CisgICAgZ2xvYmFsX25ld19kZWNsIChsb2MsIGtp bmQsIHR5cGUsIG5hbWUsIGZsYWdzLCBhdHRyaWJ1dGVzKTsKIAogICByZXR1cm4gZ2xvYmFsX2Zp bmFsaXplX2x2YWx1ZSAoaW5uZXIpOwogfQpAQCAtODE4LDEzICs5NTIsMTUgQEAgcGxheWJhY2s6 OmNvbnRleHQ6OgogbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKIAkJCWVu dW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCQkJdHlwZSAqdHlwZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBlbGVtZW50X3NpemUsCisJCQlzaXplX3QgZWxlbWVudF9zaXpl LAogCQkJc2l6ZV90IGluaXRpYWxpemVyX251bV9lbGVtLAogCQkJY29uc3Qgdm9pZCAqaW5pdGlh bGl6ZXIsCiAJCQljb25zdCBjaGFyICpuYW1lLAotCQkJZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZs YWdzKQorCQkJZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzLAorCQkJY29uc3Qgc3RkOjp2ZWN0 b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJCQkJICAgIHN0ZDo6 c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7Ci0gIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wg KGxvYywga2luZCwgdHlwZSwgbmFtZSwgZmxhZ3MpOworICB0cmVlIGlubmVyID0gZ2xvYmFsX25l d19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdzLCBhdHRyaWJ1dGVzKTsKIAogICB2 ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKmNvbnN0cnVjdG9yX2VsZW1lbnRzID0gTlVMTDsK IApAQCAtMTgxMiw3ICsxOTQ4LDkgQEAgcGxheWJhY2s6Omx2YWx1ZSAqCiBwbGF5YmFjazo6ZnVu Y3Rpb246OgogbmV3X2xvY2FsIChsb2NhdGlvbiAqbG9jLAogCSAgIHR5cGUgKnR5cGUsCi0JICAg Y29uc3QgY2hhciAqbmFtZSkKKwkgICBjb25zdCBjaGFyICpuYW1lLAorCSAgIGNvbnN0IHN0ZDo6 dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkgICAgICAg c3RkOjpzdHJpbmc+PiAmYXR0cmlidXRlcykKIHsKICAgZ2NjX2Fzc2VydCAodHlwZSk7CiAgIGdj Y19hc3NlcnQgKG5hbWUpOwpAQCAtMTgyNSw2ICsxOTYzLDggQEAgbmV3X2xvY2FsIChsb2NhdGlv biAqbG9jLAogICBERUNMX0NIQUlOIChpbm5lcikgPSBCSU5EX0VYUFJfVkFSUyAobV9pbm5lcl9i aW5kX2V4cHIpOwogICBCSU5EX0VYUFJfVkFSUyAobV9pbm5lcl9iaW5kX2V4cHIpID0gaW5uZXI7 CiAKKyAgc2V0X3ZhcmlhYmxlX3N0cmluZ19hdHRyaWJ1dGUgKGF0dHJpYnV0ZXMsIGlubmVyKTsK KwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChpbm5lciwgbG9jKTsKICAgcmV0 dXJuIG5ldyBsdmFsdWUgKG1fY3R4dCwgaW5uZXIpOwpAQCAtMTk0Nyw2ICsyMDg3LDkgQEAgcG9z dHByb2Nlc3MgKCkKIAogICAgICAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0gTlVMTDsKICAgICB9 CisgICAgZWxzZQorICAgICAgLyogQWRkIHRvIGNncmFwaCB0byBvdXRwdXQgYWxpYXNlczogKi8K KyAgICAgIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiAobV9pbm5lcl9mbmRlY2wsIHRydWUsIDAp OwogfQogCiAvKiBEb24ndCBsZWFrIHZlYydzIGludGVybmFsIGJ1ZmZlciAoaW4gbm9uLUdDIGhl YXApIHdoZW4gd2UgYXJlCkBAIC0zMzY1LDcgKzM1MDgsNyBAQCB2b2lkCiBwbGF5YmFjazo6Y29u dGV4dDo6CiBpbml0X3R5cGVzICgpCiB7Ci0gIC8qIFNlZSBsdG9faW5pdCgpIGluIGx0by1sYW5n LmNjIG9yIHZvaWQgdmlzaXQgKFR5cGVCYXNpYyAqdCkgaW4gRCdzIHR5cGVzLmNjIAorICAvKiBT ZWUgbHRvX2luaXQgKCkgaW4gbHRvLWxhbmcuY2Mgb3Igdm9pZCB2aXNpdCAoVHlwZUJhc2ljICp0 KSBpbiBEJ3MgdHlwZXMuY2MKICAgICAgZm9yIHJlZmVyZW5jZS4gSWYgVFlQRV9OQU1FIGlzIG5v dCBzZXQsIGRlYnVnIGluZm8gd2lsbCBub3QgY29udGFpbiB0eXBlcyAqLwogI2RlZmluZSBOQU1F X1RZUEUodCxuKSBcCiBpZiAodCkgXApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2su aCBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKaW5kZXggOTY1NDUwN2EzNGQuLjA1YmFmY2QyMWM0 IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCisrKyBiL2djYy9qaXQvaml0LXBs YXliYWNrLmgKQEAgLTIxLDcgKzIxLDkgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpZm5kZWYgSklUX1BMQVlCQUNLX0gKICNkZWZpbmUgSklU X1BMQVlCQUNLX0gKIAorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PiAvLyBm b3Igc3RkOjpwYWlyCisjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAidGltZXZhci5oIgog I2luY2x1ZGUgInZhcmFzbS5oIgpAQCAtMzUsMTIgKzM3LDIxIEBAIG5hbWVzcGFjZSBnY2Mgewog CiBuYW1lc3BhY2Ugaml0IHsKIAorY29uc3QgY2hhciogZm5fYXR0cmlidXRlX3RvX3N0cmluZyAo Z2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cik7Citjb25zdCBjaGFyKiB2YXJpYWJsZV9hdHRyaWJ1 dGVfdG9fc3RyaW5nIChnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyKTsKKwogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKICBQbGF5YmFjay4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBuYW1lc3BhY2UgcGxheWJh Y2sgewogCit2b2lkCitzZXRfdmFyaWFibGVfc3RyaW5nX2F0dHJpYnV0ZSAoCisgIGNvbnN0IHN0 ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCSAgICAg IHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMsCisgIHRyZWUgZGVjbCk7CisKIC8qIHBsYXliYWNr Ojpjb250ZXh0IGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MuCiAKICAgIFRoZSB0d28gY29uY3Jl dGUgc3ViY2xhc3NlcyBhcmU6CkBAIC0xMDQsMTQgKzExNSwyMiBAQCBwdWJsaWM6CiAJCWNvbnN0 IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGF1dG9fdmVjPHBhcmFtICo+ICpwYXJhbXMsCiAJCWludCBp c192YXJpYWRpYywKLQkJZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkKTsKKwkJZW51 bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkLAorCQljb25zdCBzdGQ6OnZlY3RvcjxnY2Nf aml0X2ZuX2F0dHJpYnV0ZT4gJmF0dHJpYnV0ZXMsCisJCWNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6 cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwKKwkJCQkJICAgIHN0ZDo6c3RyaW5nPj4gJnN0cmlu Z19hdHRyaWJ1dGVzLAorCQljb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9h dHRyaWJ1dGUsCisJCQkJCSAgICBzdGQ6OnZlY3RvcjxpbnQ+Pj4KKwkJCQkJICAgICZpbnRfYXJy YXlfYXR0cmlidXRlcyk7CiAKICAgbHZhbHVlICoKICAgbmV3X2dsb2JhbCAobG9jYXRpb24gKmxv YywKIAkgICAgICBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKIAkgICAgICB0eXBlICp0 eXBlLAogCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JICAgICAgZW51bSBnbG9iYWxfdmFyX2Zs YWdzIGZsYWdzKTsKKwkgICAgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MsCisJICAgICAg Y29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAor CQkJCQkgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpOwogCiAgIGx2YWx1ZSAqCiAgIG5ld19n bG9iYWxfaW5pdGlhbGl6ZWQgKGxvY2F0aW9uICpsb2MsCkBAIC0xMjEsNyArMTQwLDExIEBAIHB1 YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluaXRpYWxpemVyX251bV9l bGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbml0aWFsaXplciwK IAkJCSAgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdz KTsKKwkJCSAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzLAorCQkJICBjb25zdCBzdGQ6OnZl Y3RvcjxzdGQ6OnBhaXI8CisJCQkJCSAgICBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJ CQkJICAgIHN0ZDo6c3RyaW5nPj4KKwkJCQkJICAgICZhdHRyaWJ1dGVzKTsKIAogICBydmFsdWUg KgogICBuZXdfY3RvciAobG9jYXRpb24gKmxvZywKQEAgLTMwNiw3ICszMjksOSBAQCBwcml2YXRl OgogICAgICAgICAgICAgICAgICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogICAg ICAgICAgICAgICAgICAgIHR5cGUgKnR5cGUsCiAJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAg IGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CisJCSAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFn cyBmbGFncywKKwkJICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFi bGVfYXR0cmlidXRlLAorCQkJCQkgICAgICAgc3RkOjpzdHJpbmc+PiAmYXR0cmlidXRlcyk7CiAg IGx2YWx1ZSAqCiAgIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKHRyZWUgaW5uZXIpOwogCkBAIC01 MDAsNyArNTI1LDkgQEAgcHVibGljOgogICBsdmFsdWUgKgogICBuZXdfbG9jYWwgKGxvY2F0aW9u ICpsb2MsCiAJICAgICB0eXBlICp0eXBlLAotCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CisJICAg ICBjb25zdCBjaGFyICpuYW1lLAorCSAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdj Y19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJCQkgc3RkOjpzdHJpbmc+PiAmYXR0cmlidXRl cyk7CiAKICAgYmxvY2sqCiAgIG5ld19ibG9jayAoY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1n aXQgYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MK aW5kZXggNjg2YzA1ODcwNzkuLjZmZmFkYmVhMTI3IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuY2MKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCkBAIC0yOSw2ICsyOSw3 IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAj aW5jbHVkZSAiaml0LWJ1aWx0aW5zLmgiCiAjaW5jbHVkZSAiaml0LXJlY29yZGluZy5oIgogI2lu Y2x1ZGUgImppdC1wbGF5YmFjay5oIgorI2luY2x1ZGUgPHNzdHJlYW0+CiAKIG5hbWVzcGFjZSBn Y2MgewogbmFtZXNwYWNlIGppdCB7CkBAIC0yMDY4LDcgKzIwNjksNyBAQCByZWNvcmRpbmc6Om1l bWVudG86OmdldF9kZWJ1Z19zdHJpbmcgKCkKIHZvaWQKIHJlY29yZGluZzo6bWVtZW50bzo6d3Jp dGVfdG9fZHVtcCAoZHVtcCAmZCkKIHsKLSAgZC53cml0ZSgiICAlc1xuIiwgZ2V0X2RlYnVnX3N0 cmluZyAoKSk7CisgIGQud3JpdGUgKCIgICVzXG4iLCBnZXRfZGVidWdfc3RyaW5nICgpKTsKIH0K IAogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNvcmRpbmc6OnN0 cmluZy4gICovCkBAIC00MDI2LDYgKzQwMjcsMTMgQEAgdm9pZCByZWNvcmRpbmc6Omx2YWx1ZTo6 c2V0X2FsaWdubWVudCAodW5zaWduZWQgYnl0ZXMpCiAgIG1fYWxpZ25tZW50ID0gYnl0ZXM7CiB9 CiAKK3ZvaWQgcmVjb3JkaW5nOjpsdmFsdWU6OmFkZF9zdHJpbmdfYXR0cmlidXRlICgKKwlnY2Nf aml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJY29uc3QgY2hhciogdmFsdWUpCit7 CisgIG1fc3RyaW5nX2F0dHJpYnV0ZXMucHVzaF9iYWNrIChzdGQ6Om1ha2VfcGFpciAoYXR0cmli dXRlLCBzdGQ6OnN0cmluZyAodmFsdWUpKSk7Cit9CisKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBv ZiBjbGFzcyBnY2M6OmppdDo6cmVjb3JkaW5nOjpwYXJhbS4gICovCiAKIC8qIEltcGxlbWVudGF0 aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8K QEAgLTQxMDIsNyArNDExMCwxMCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpmdW5jdGlvbiAoY29u dGV4dCAqY3R4dCwKICAgbV9idWlsdGluX2lkIChidWlsdGluX2lkKSwKICAgbV9sb2NhbHMgKCks CiAgIG1fYmxvY2tzICgpLAotICBtX2ZuX3B0cl90eXBlIChOVUxMKQorICBtX2ZuX3B0cl90eXBl IChOVUxMKSwKKyAgbV9hdHRyaWJ1dGVzICgpLAorICBtX3N0cmluZ19hdHRyaWJ1dGVzICgpLAor ICBtX2ludF9hcnJheV9hdHRyaWJ1dGVzICgpCiB7CiAgIGZvciAoaW50IGkgPSAwOyBpPCBudW1f cGFyYW1zOyBpKyspCiAgICAgewpAQCAtNDE2MSw3ICs0MTcyLDEwIEBAIHJlY29yZGluZzo6ZnVu Y3Rpb246OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKIAkJCQkgICAgIG1fbmFtZS0+Y19zdHIg KCksCiAJCQkJICAgICAmcGFyYW1zLAogCQkJCSAgICAgbV9pc192YXJpYWRpYywKLQkJCQkgICAg IG1fYnVpbHRpbl9pZCkpOworCQkJCSAgICAgbV9idWlsdGluX2lkLAorCQkJCSAgICAgbV9hdHRy aWJ1dGVzLAorCQkJCSAgICAgbV9zdHJpbmdfYXR0cmlidXRlcywKKwkJCQkgICAgIG1faW50X2Fy cmF5X2F0dHJpYnV0ZXMpKTsKIH0KIAogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpsb2NhbCBpbnN0 YW5jZSBhbmQgYWRkIGl0IHRvCkBAIC00MjEwLDYgKzQyMjQsNDAgQEAgcmVjb3JkaW5nOjpmdW5j dGlvbjo6bmV3X2Jsb2NrIChjb25zdCBjaGFyICpuYW1lKQogdm9pZAogcmVjb3JkaW5nOjpmdW5j dGlvbjo6d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKIHsKKyAgZm9yIChhdXRvIGF0dHI6IG1fYXR0 cmlidXRlcykKKyAgeworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90 b19zdHJpbmcgKGF0dHIpOworICAgIGlmIChhdHRyaWJ1dGUpCisgICAgICBkLndyaXRlICgiX19h dHRyaWJ1dGUoJXMpX19cbiIsIGF0dHJpYnV0ZSk7CisgIH0KKyAgZm9yIChhdXRvIGF0dHI6IG1f c3RyaW5nX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSYgbmFtZSA9 IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAgIHN0ZDo6c3RyaW5nJiB2YWx1ZSA9IHN0ZDo6Z2V0PDE+ KGF0dHIpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90b19zdHJp bmcgKG5hbWUpOworCisgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICAgIGQud3JpdGUgKCJfX2F0dHJp YnV0ZSglcyhcIiVzXCIpKV9fXG4iLCBhdHRyaWJ1dGUsIHZhbHVlLmNfc3RyKCkpOworICB9Cisg IGZvciAoYXV0byBhdHRyOiBtX2ludF9hcnJheV9hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2pp dF9mbl9hdHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnZlY3Rv cjxpbnQ+JiB2YWx1ZXMgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICBjb25zdCBjaGFyKiBhdHRy aWJ1dGUgPSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsKKyAgICBpZiAoYXR0cmlidXRl KQorICAgIHsKKyAgICAgIGQud3JpdGUgKCJfX2F0dHJpYnV0ZSglcygiLCBhdHRyaWJ1dGUpOwor ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICB7 CisJaWYgKGkgPiAwKQorCSAgZC53cml0ZSAoIiwgJWQiLCB2YWx1ZXNbaV0pOworCWVsc2UKKwkg IGQud3JpdGUgKCIlZCIsIHZhbHVlc1tpXSk7CisgICAgICB9CisgICAgICBkLndyaXRlICgiKSlf X1xuIik7CisgICAgfQorICB9CisKICAgc3dpdGNoIChtX2tpbmQpCiAgICAgewogICAgIGRlZmF1 bHQ6IGdjY191bnJlYWNoYWJsZSAoKTsKQEAgLTQ0MDQsNiArNDQ1MiwzMSBAQCByZWNvcmRpbmc6 OmZ1bmN0aW9uOjpnZXRfYWRkcmVzcyAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jKQogICByZXR1 cm4gcmVzdWx0OwogfQogCit2b2lkCityZWNvcmRpbmc6OmZ1bmN0aW9uOjphZGRfYXR0cmlidXRl IChnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCit7CisgIG1fYXR0cmlidXRlcy5wdXNo X2JhY2sgKGF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6ZnVuY3Rpb246OmFkZF9z dHJpbmdfYXR0cmlidXRlIChnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJCQkJCSAg IGNvbnN0IGNoYXIqIHZhbHVlKQoreworICBtX3N0cmluZ19hdHRyaWJ1dGVzLnB1c2hfYmFjayAo CisJc3RkOjptYWtlX3BhaXIgKGF0dHJpYnV0ZSwgc3RkOjpzdHJpbmcgKHZhbHVlKSkpOworfQor Cit2b2lkCityZWNvcmRpbmc6OmZ1bmN0aW9uOjphZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUg KAorCWdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwljb25zdCBpbnQqIHZhbHVlLAor CXNpemVfdCBsZW5ndGgpCit7CisgIG1faW50X2FycmF5X2F0dHJpYnV0ZXMucHVzaF9iYWNrIChz dGQ6Om1ha2VfcGFpciAoCisgICAgYXR0cmlidXRlLAorICAgIHN0ZDo6dmVjdG9yPGludD4gKHZh bHVlLCB2YWx1ZSArIGxlbmd0aCkpKTsKK30KKwogLyogSW1wbGVtZW50YXRpb24gb2YgcmVjb3Jk aW5nOjptZW1lbnRvOjptYWtlX2RlYnVnX3N0cmluZyBmb3IKICAgIGZ1bmN0aW9ucy4gICovCiAK QEAgLTQ0MjUsNiArNDQ5OCwzOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzX29m X2Z1bmN0aW9uX2tpbmRzW10gPSB7CiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6 bWVtZW50bzo6d3JpdGVfcmVwcm9kdWNlciBmb3IgZnVuY3Rpb25zLiAqLwogCitzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IGZuX2F0dHJpYnV0ZV9yZXByb2R1Y2VyX3N0cmluZ3NbXSA9Cit7Cisg ICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9BTElBUyIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9B TFdBWVNfSU5MSU5FIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX0lOTElORSIsCisgICJHQ0Nf SklUX0ZOX0FUVFJJQlVURV9OT0lOTElORSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9UQVJH RVQiLAorICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCIsCisgICJHQ0NfSklUX0ZOX0FUVFJJ QlVURV9WSVNJQklMSVRZIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTEQiLAorICAiR0ND X0pJVF9GTl9BVFRSSUJVVEVfUkVUVVJOU19UV0lDRSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVU RV9QVVJFIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTlNUIiwKKyAgIkdDQ19KSVRfRk5f QVRUUklCVVRFX1dFQUsiLAorICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9OTlVMTCIsCit9Owor CitzdGQ6OnN0cmluZworZ2V0X3ZlY3Rvcl9pbnRfZGVidWcgKHN0ZDo6dmVjdG9yPGludD4gJnZh bHVlcykKK3sKKyAgc3RkOjpzdHJpbmdzdHJlYW0gczsKKworICBzIDw8ICJ7IjsKKyAgZm9yKGF1 dG8gaXQgPSB2YWx1ZXMuYmVnaW4oKTsgaXQgIT0gdmFsdWVzLmVuZCgpOyArK2l0KQorICAgIHsK KyAgICAgIGlmIChpdCAhPSB2YWx1ZXMuYmVnaW4oKSApCisJIHMgPDwgIiwgIjsKKyAgICAgIHMg PDwgKml0OworICAgIH0KKyAgcyA8PCAifSI7CisgIHJldHVybiBzLnN0cigpOworfQorCiB2b2lk CiByZWNvcmRpbmc6OmZ1bmN0aW9uOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQog ewpAQCAtNDQ2Nyw2ICs0NTczLDI1IEBAIHJlY29yZGluZzo6ZnVuY3Rpb246OndyaXRlX3JlcHJv ZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAgbV9wYXJhbXMubGVuZ3RoICgpLAogCSAgIHBhcmFt c19pZCwKIAkgICBtX2lzX3ZhcmlhZGljKTsKKyAgZm9yIChhdXRvIGF0dHJpYnV0ZSA6IG1fYXR0 cmlidXRlcykKKyAgICByLndyaXRlKCIgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAo JXMsICVzKTtcbiIsCisJICAgIGlkLAorCSAgICBmbl9hdHRyaWJ1dGVfcmVwcm9kdWNlcl9zdHJp bmdzW2F0dHJpYnV0ZV0pOworICBmb3IgKGF1dG8gYXR0cmlidXRlIDogbV9zdHJpbmdfYXR0cmli dXRlcykKKyAgICByLndyaXRlKCIgIGdjY19qaXRfZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1 dGUgKCVzLCAlcywgXCIlc1wiKTtcbiIsCisJICAgIGlkLAorCSAgICBmbl9hdHRyaWJ1dGVfcmVw cm9kdWNlcl9zdHJpbmdzW3N0ZDo6Z2V0PDA+KGF0dHJpYnV0ZSldLAorCSAgICBzdGQ6OmdldDwx PihhdHRyaWJ1dGUpLmNfc3RyKCkpOworICBmb3IgKGF1dG8gYXR0cmlidXRlIDogbV9pbnRfYXJy YXlfYXR0cmlidXRlcykgeworICAgIHIud3JpdGUoIiAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfaW50 ZWdlcl9hcnJheV9hdHRyaWJ1dGUgKCVzLFxuIgorCSAgICAiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsXG4iCisJICAgICIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50W10pJXMsXG4iCisJICAgICIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlbHUpO1xuIiwKKwkg ICAgaWQsCisJICAgIGZuX2F0dHJpYnV0ZV9yZXByb2R1Y2VyX3N0cmluZ3Nbc3RkOjpnZXQ8MD4o YXR0cmlidXRlKV0sCisJICAgIGdldF92ZWN0b3JfaW50X2RlYnVnIChzdGQ6OmdldDwxPihhdHRy aWJ1dGUpKS5jX3N0cigpLAorCSAgICBzdGQ6OmdldDwxPihhdHRyaWJ1dGUpLnNpemUgKCkpOwor ICB9CiB9CiAKIApAQCAtNDg3OSwxMiArNTAwNCwxNCBAQCByZWNvcmRpbmc6Omdsb2JhbDo6cmVw bGF5X2ludG8gKHJlcGxheWVyICpyKQogCQkJCSAvIG1fdHlwZS0+ZGVyZWZlcmVuY2UgKCktPmdl dF9zaXplICgpLAogCQkJCSBtX2luaXRpYWxpemVyLAogCQkJCSBwbGF5YmFja19zdHJpbmcgKG1f bmFtZSksCi0JCQkJIG1fZmxhZ3MpCisJCQkJIG1fZmxhZ3MsCisJCQkJIG1fc3RyaW5nX2F0dHJp YnV0ZXMpCiAgICAgOiByLT5uZXdfZ2xvYmFsIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2Mp LAogCQkgICAgIG1fa2luZCwKIAkJICAgICBtX3R5cGUtPnBsYXliYWNrX3R5cGUgKCksCiAJCSAg ICAgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpLAotCQkgICAgIG1fZmxhZ3MpOworCQkgICAgIG1f ZmxhZ3MsCisJCSAgICAgbV9zdHJpbmdfYXR0cmlidXRlcyk7CiAKICAgaWYgKG1fdGxzX21vZGVs ICE9IEdDQ19KSVRfVExTX01PREVMX05PTkUpCiAgICAgZ2xvYmFsLT5zZXRfdGxzX21vZGVsIChy ZWNvcmRpbmc6OnRsc19tb2RlbHNbbV90bHNfbW9kZWxdKTsKQEAgLTQ5NDMsNiArNTA3MCwxNSBA QCByZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKICAgICAgIGJyZWFr OwogICAgIH0KIAorICBmb3IgKGF1dG8gYXR0cjogbV9zdHJpbmdfYXR0cmlidXRlcykKKyAgewor ICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0cik7 CisgICAgc3RkOjpzdHJpbmcmIHZhbHVlID0gc3RkOjpnZXQ8MT4oYXR0cik7CisgICAgY29uc3Qg Y2hhciogYXR0cmlidXRlID0gdmFyaWFibGVfYXR0cmlidXRlX3RvX3N0cmluZyAobmFtZSk7CisK KyAgICBpZiAoYXR0cmlidXRlKQorICAgICAgZC53cml0ZSAoIl9fYXR0cmlidXRlKCVzKFwiJXNc IikpX19cbiIsIGF0dHJpYnV0ZSwgdmFsdWUuY19zdHIoKSk7CisgIH0KICAgZC53cml0ZSAoIiVz ICVzIiwKIAkgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCiAJICAgZ2V0X2RlYnVnX3N0 cmluZyAoKSk7CkBAIC01MDEzLDYgKzUxNDksMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCB0bHNfbW9kZWxfZW51bV9zdHJpbmdzW10gPSB7CiAgICJHQ0NfSklUX1RMU19NT0RFTF9MT0NB TF9FWEVDIiwKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2NjX2ppdF92YXJpYWJs ZV9hdHRyaWJ1dGVfZW51bV9zdHJpbmdzW10gPSB7CisgICJHQ0NfSklUX1ZBUklBQkxFX0FUVFJJ QlVURV9WSVNJQklMSVRZIiwKK307CisKIHZvaWQKIHJlY29yZGluZzo6Z2xvYmFsOjp3cml0ZV9y ZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogewpAQCAtNTA0Miw2ICs1MTgyLDEzIEBAIHJlY29y ZGluZzo6Z2xvYmFsOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogICAgICBpZCwK ICAgICAgbV9saW5rX3NlY3Rpb24tPmNfc3RyICgpKTsKIAorICBmb3IgKGF1dG8gYXR0cmlidXRl IDogbV9zdHJpbmdfYXR0cmlidXRlcykKKyAgICByLndyaXRlKCIgIGdjY19qaXRfbHZhbHVlX2Fk ZF9zdHJpbmdfYXR0cmlidXRlICglcywgJXMsIFwiJXNcIik7XG4iLAorCSAgICBpZCwKKwkgICAg Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGVfZW51bV9zdHJpbmdzW3N0ZDo6Z2V0PDA+KGF0dHJp YnV0ZSldLAorCSAgICBzdGQ6OmdldDwxPihhdHRyaWJ1dGUpLmNfc3RyKCkpOworCisKICAgaWYg KG1faW5pdGlhbGl6ZXIpCiAgICAgc3dpdGNoIChtX3R5cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRf c2l6ZSAoKSkKICAgICAgIHsKQEAgLTY2MjIsNyArNjc2OSw4IEBAIHJlY29yZGluZzo6bG9jYWw6 OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKICAgcGxheWJhY2s6Omx2YWx1ZSAqb2JqID0gbV9m dW5jLT5wbGF5YmFja19mdW5jdGlvbiAoKQogICAgICAgLT5uZXdfbG9jYWwgKHBsYXliYWNrX2xv Y2F0aW9uIChyLCBtX2xvYyksCiAJCSAgIG1fdHlwZS0+cGxheWJhY2tfdHlwZSAoKSwKLQkJICAg cGxheWJhY2tfc3RyaW5nIChtX25hbWUpKTsKKwkJICAgcGxheWJhY2tfc3RyaW5nIChtX25hbWUp LAorCQkgICBtX3N0cmluZ19hdHRyaWJ1dGVzKTsKIAogICBpZiAobV9yZWdfbmFtZSAhPSBOVUxM KQogICAgIG9iai0+c2V0X3JlZ2lzdGVyX25hbWUgKG1fcmVnX25hbWUtPmNfc3RyICgpKTsKQEAg LTY2NDQsOSArNjc5Miw5IEBAIHJlY29yZGluZzo6bG9jYWw6OndyaXRlX3RvX2R1bXAgKGR1bXAg JmQpCiB7CiAgIGlmIChkLnVwZGF0ZV9sb2NhdGlvbnMgKCkpCiAgICAgbV9sb2MgPSBkLm1ha2Vf bG9jYXRpb24gKCk7Ci0gIGQud3JpdGUoIiAgJXMgJXM7XG4iLAotCSAgbV90eXBlLT5nZXRfZGVi dWdfc3RyaW5nICgpLAotCSAgZ2V0X2RlYnVnX3N0cmluZyAoKSk7CisgIGQud3JpdGUgKCIgICVz ICVzO1xuIiwKKwkgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgZ2V0X2RlYnVn X3N0cmluZyAoKSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGlu Zy5oIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggYjk1MWM3MTVjYTUuLmNkMmUwYWRi ZTMwIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysgYi9nY2Mvaml0L2pp dC1yZWNvcmRpbmcuaApAQCAtMjMsNiArMjMsMTAgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKIAogI2luY2x1ZGUgImppdC1jb21tb24uaCIKICNp bmNsdWRlICJqaXQtbG9nZ2luZy5oIgorI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVk ZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogY2xhc3MgdGltZXI7CiAKQEAgLTEyMTYs NyArMTIyMCw4IEBAIHB1YmxpYzoKICAgICBtX2xpbmtfc2VjdGlvbiAoTlVMTCksCiAgICAgbV9y ZWdfbmFtZSAoTlVMTCksCiAgICAgbV90bHNfbW9kZWwgKEdDQ19KSVRfVExTX01PREVMX05PTkUp LAotICAgIG1fYWxpZ25tZW50ICgwKQorICAgIG1fYWxpZ25tZW50ICgwKSwKKyAgICBtX3N0cmlu Z19hdHRyaWJ1dGVzICgpCiAgIHt9CiAKICAgcGxheWJhY2s6Omx2YWx1ZSAqCkBAIC0xMjM2LDgg KzEyNDEsMTIgQEAgcHVibGljOgogICBhc19ydmFsdWUgKCkgeyByZXR1cm4gdGhpczsgfQogCiAg IGNvbnN0IGNoYXIgKmFjY2Vzc19hc19ydmFsdWUgKHJlcHJvZHVjZXIgJnIpIG92ZXJyaWRlOwor CisgIHZvaWQgYWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRl IGF0dHJpYnV0ZSwgY29uc3QgY2hhciogdmFsdWUpOworCiAgIHZpcnR1YWwgY29uc3QgY2hhciAq YWNjZXNzX2FzX2x2YWx1ZSAocmVwcm9kdWNlciAmcik7CiAgIHZpcnR1YWwgYm9vbCBpc19nbG9i YWwgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgdmlydHVhbCBib29sIGlzX2xvY2FsICgp IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHZvaWQgc2V0X3Rsc19tb2RlbCAoZW51bSBnY2Nf aml0X3Rsc19tb2RlbCBtb2RlbCk7CiAgIHZvaWQgc2V0X2xpbmtfc2VjdGlvbiAoY29uc3QgY2hh ciAqbmFtZSk7CiAgIHZvaWQgc2V0X3JlZ2lzdGVyX25hbWUgKGNvbnN0IGNoYXIgKnJlZ19uYW1l KTsKQEAgLTEyNDksNiArMTI1OCw4IEBAIHByb3RlY3RlZDoKICAgc3RyaW5nICptX3JlZ19uYW1l OwogICBlbnVtIGdjY19qaXRfdGxzX21vZGVsIG1fdGxzX21vZGVsOwogICB1bnNpZ25lZCBtX2Fs aWdubWVudDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmli dXRlLAorCSAgICAgIHN0ZDo6c3RyaW5nPj4gbV9zdHJpbmdfYXR0cmlidXRlczsKIH07CiAKIGNs YXNzIHBhcmFtIDogcHVibGljIGx2YWx1ZQpAQCAtMTM0Miw2ICsxMzUzLDEwIEBAIHB1YmxpYzoK IAogICBydmFsdWUgKmdldF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKTsKIAorICB2b2lkIGFkZF9h dHRyaWJ1dGUgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSk7CisgIHZvaWQgYWRkX3N0 cmluZ19hdHRyaWJ1dGUgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgY2hh ciogdmFsdWUpOworICB2b2lkIGFkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9m bl9hdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBpbnQqIHZhbHVlLCBzaXplX3QgbGVuZ3RoKTsK KwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgZmluYWwgb3ZlcnJp ZGU7CiAgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJp ZGU7CkBAIC0xMzU3LDYgKzEzNzIsOSBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxsb2NhbCAqPiBt X2xvY2FsczsKICAgYXV0b192ZWM8YmxvY2sgKj4gbV9ibG9ja3M7CiAgIHR5cGUgKm1fZm5fcHRy X3R5cGU7CisgIHN0ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7 CisgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwgc3RkOjpzdHJp bmc+PiBtX3N0cmluZ19hdHRyaWJ1dGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2pp dF9mbl9hdHRyaWJ1dGUsIHN0ZDo6dmVjdG9yPGludD4+PiBtX2ludF9hcnJheV9hdHRyaWJ1dGVz OwogfTsKIAogY2xhc3MgYmxvY2sgOiBwdWJsaWMgbWVtZW50bwpAQCAtMjA4Niw2ICsyMTA0LDgg QEAgcHVibGljOgogCiAgIHZvaWQgdmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICopIGZp bmFsIG92ZXJyaWRlIHt9CiAKKyAgYm9vbCBpc19sb2NhbCAoKSBjb25zdCBmaW5hbCBvdmVycmlk ZSB7IHJldHVybiB0cnVlOyB9CisKICAgdm9pZCB3cml0ZV90b19kdW1wIChkdW1wICZkKSBmaW5h bCBvdmVycmlkZTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNj IGIvZ2NjL2ppdC9saWJnY2NqaXQuY2MKaW5kZXggOGVjZmU0YWFhNDIuLjk2MTZmMzgwMmI4IDEw MDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5j YwpAQCAtMzk2NSw2ICszOTY1LDczIEBAIGdjY19qaXRfdHlwZV9nZXRfYWxpZ25lZCAoZ2NjX2pp dF90eXBlICp0eXBlLAogICByZXR1cm4gKGdjY19qaXRfdHlwZSAqKXR5cGUtPmdldF9hbGlnbmVk IChhbGlnbm1lbnRfaW5fYnl0ZXMpOwogfQogCit2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9h dHRyaWJ1dGUgKGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMsCisJCQkJZ2NjX2ppdF9mbl9hdHRyaWJ1 dGUgYXR0cmlidXRlKQoreworICBSRVRVUk5fSUZfRkFJTCAoZnVuYywgTlVMTCwgTlVMTCwgIk5V TEwgZnVuYyIpOworICBSRVRVUk5fSUZfRkFJTCAoKGF0dHJpYnV0ZSA+PSAwICYmIGF0dHJpYnV0 ZSA8IEdDQ19KSVRfRk5fQVRUUklCVVRFX01BWCksCisJCSAgTlVMTCwKKwkJICBOVUxMLAorCQkg ICJhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgYGdjY19qaXRfZm5fYXR0cmlidXRlYCBlbnVtIHZhbHVl Iik7CisKKyAgZnVuYy0+YWRkX2F0dHJpYnV0ZSAoYXR0cmlidXRlKTsKK30KKwordm9pZAorZ2Nj X2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVu YywKKwkJCQkgICAgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCSAgICAg ICBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKGZ1bmMsIE5VTEwsIE5V TEwsICJOVUxMIGZ1bmMiKTsKKyAgUkVUVVJOX0lGX0ZBSUwgKHZhbHVlLCBOVUxMLCBOVUxMLCAi TlVMTCB2YWx1ZSIpOworICBSRVRVUk5fSUZfRkFJTCAoKGF0dHJpYnV0ZSA+PSAwICYmIGF0dHJp YnV0ZSA8IEdDQ19KSVRfRk5fQVRUUklCVVRFX01BWCksCisJCSAgTlVMTCwKKwkJICBOVUxMLAor CQkgICJhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgYGdjY19qaXRfZm5fYXR0cmlidXRlYCBlbnVtIHZh bHVlIik7CisKKyAgZnVuYy0+YWRkX3N0cmluZ19hdHRyaWJ1dGUgKGF0dHJpYnV0ZSwgdmFsdWUp OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYW4gYXR0cmlidXRlIHdpdGggbXVsdGlwbGUg aW50ZWdlciB2YWx1ZXMuICBGb3IgZXhhbXBsZQorICAgYG5vbm51bGwoMSwgMilgLiAgVGhlIG51 bWJlcnMgaW4gYHZhbHVlc2AgYXJlIHN1cHBvc2VkIHRvIG1hcCBob3cgdGhleQorICAgc2hvdWxk IGJlIHdyaXR0ZW4gaW4gQyBjb2RlLiAgU28gZm9yIGBub25udWxsKDEsIDIpYCwgeW91IHNob3Vs ZCBwYXNzIGAxYAorICAgYW5kIGAyYCBpbiBgdmFsdWVzYCAoYW5kIHNldCBgbGVuZ3RoYCB0byBg MmApLiAqLwordm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1 dGUgKGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMsCisJCQkJCSAgICAgIGdjY19qaXRfZm5fYXR0cmli dXRlIGF0dHJpYnV0ZSwKKwkJCQkJICAgICAgY29uc3QgaW50KiB2YWx1ZXMsCisJCQkJCSAgICAg IHNpemVfdCBsZW5ndGgpCit7CisgIFJFVFVSTl9JRl9GQUlMIChmdW5jLCBOVUxMLCBOVUxMLCAi TlVMTCBmdW5jIik7CisgIFJFVFVSTl9JRl9GQUlMICh2YWx1ZXMsIE5VTEwsIE5VTEwsICJOVUxM IHZhbHVlcyIpOworICBSRVRVUk5fSUZfRkFJTCAoKGF0dHJpYnV0ZSA+PSAwICYmIGF0dHJpYnV0 ZSA8IEdDQ19KSVRfRk5fQVRUUklCVVRFX01BWCksCisJCSAgTlVMTCwKKwkJICBOVUxMLAorCQkg ICJhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgYGdjY19qaXRfZm5fYXR0cmlidXRlYCBlbnVtIHZhbHVl Iik7CisKKyAgZnVuYy0+YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChhdHRyaWJ1dGUsIHZh bHVlcywgbGVuZ3RoKTsKK30KKwordm9pZAorZ2NjX2ppdF9sdmFsdWVfYWRkX3N0cmluZ19hdHRy aWJ1dGUgKGdjY19qaXRfbHZhbHVlICp2YXJpYWJsZSwKKwkJCQkgICAgIGdjY19qaXRfdmFyaWFi bGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIqIHZhbHVlKQorewor ICBSRVRVUk5fSUZfRkFJTCAodmFyaWFibGUsIE5VTEwsIE5VTEwsICJOVUxMIHZhcmlhYmxlIik7 CisgIFJFVFVSTl9JRl9GQUlMICh2YWx1ZSwgTlVMTCwgTlVMTCwgIk5VTEwgdmFsdWUiKTsKKyAg UkVUVVJOX0lGX0ZBSUwgKHZhcmlhYmxlLT5pc19nbG9iYWwgKCkgfHwgdmFyaWFibGUtPmlzX2xv Y2FsICgpLAorCQkgIE5VTEwsCisJCSAgTlVMTCwKKwkJICAidmFyaWFibGUgc2hvdWxkIGJlIGEg dmFyaWFibGUiKTsKKyAgUkVUVVJOX0lGX0ZBSUwgKChhdHRyaWJ1dGUgPj0gMCAmJiBhdHRyaWJ1 dGUgPCBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVURV9NQVgpLAorCQkgIE5VTEwsCisJCSAgTlVM TCwKKwkJICAiYXR0cmlidXRlIHNob3VsZCBiZSBhIGBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0 ZWAgZW51bSB2YWx1ZSIpOworCisgIHZhcmlhYmxlLT5hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoYXR0 cmlidXRlLCB2YWx1ZSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0 aW9uIGluIGxpYmdjY2ppdC5oLgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwg d29yayBpcyBkb25lIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBiL2dj Yy9qaXQvbGliZ2Njaml0LmgKaW5kZXggY2JjZmFiYmEzZTguLjIzNWNhYjA1M2UwIDEwMDY0NAot LS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgKQEAgLTE5 OTksNiArMTk5OSw2MSBAQCBnY2Nfaml0X3ZlY3Rvcl90eXBlX2dldF9lbGVtZW50X3R5cGUgKGdj Y19qaXRfdmVjdG9yX3R5cGUgKnZlY3Rvcl90eXBlKTsKIGV4dGVybiBnY2Nfaml0X3R5cGUgKgog Z2NjX2ppdF90eXBlX3VucXVhbGlmaWVkIChnY2Nfaml0X3R5cGUgKnR5cGUpOwogCisjZGVmaW5l IExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKworLyogRnVuY3Rpb24gYXR0cmlidXRlcy4gICov CitlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlCit7CisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FM SUFTLAorICBHQ0NfSklUX0ZOX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5FLAorICBHQ0NfSklUX0ZO X0FUVFJJQlVURV9JTkxJTkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX05PSU5MSU5FLAorICBH Q0NfSklUX0ZOX0FUVFJJQlVURV9UQVJHRVQsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1VTRUQs CisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1ZJU0lCSUxJVFksCisgIEdDQ19KSVRfRk5fQVRUUklC VVRFX0NPTEQsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1JFVFVSTlNfVFdJQ0UsCisgIEdDQ19K SVRfRk5fQVRUUklCVVRFX1BVUkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTlNULAorICBH Q0NfSklUX0ZOX0FUVFJJQlVURV9XRUFLLAorICBHQ0NfSklUX0ZOX0FUVFJJQlVURV9OT05OVUxM LAorCisgIC8qIE1heGltdW0gdmFsdWUgb2YgdGhpcyBlbnVtLCBzaG91bGQgYWx3YXlzIGJlIGxh c3QuICovCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX01BWCwKK307CisKKy8qIEFkZCBhbiBhdHRy aWJ1dGUgdG8gYSBmdW5jdGlvbi4gICovCitleHRlcm4gdm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9h ZGRfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorCQkJCWVudW0gZ2NjX2ppdF9m bl9hdHRyaWJ1dGUgYXR0cmlidXRlKTsKKworZXh0ZXJuIHZvaWQKK2djY19qaXRfZnVuY3Rpb25f YWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMsCisJCQkJICAgICAg IGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCSAgICAgICBjb25zdCBj aGFyKiB2YWx1ZSk7CisKK2V4dGVybiB2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2Vy X2FycmF5X2F0dHJpYnV0ZSAoCisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMsCisgIGVudW0gZ2Nj X2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorICBjb25zdCBpbnQqIHZhbHVlLAorICBzaXpl X3QgbGVuZ3RoKTsKKworLyogVmFyaWFibGUgYXR0cmlidXRlcy4gICovCitlbnVtIGdjY19qaXRf dmFyaWFibGVfYXR0cmlidXRlCit7CisgIEdDQ19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX1ZJU0lC SUxJVFksCisKKyAgLyogTWF4aW11bSB2YWx1ZSBvZiB0aGlzIGVudW0sIHNob3VsZCBhbHdheXMg YmUgbGFzdC4gKi8KKyAgR0NDX0pJVF9WQVJJQUJMRV9BVFRSSUJVVEVfTUFYLAorfTsKKworLyog QWRkIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBhIHZhcmlhYmxlLiAgKi8KK2V4dGVybiB2b2lkCitn Y2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9sdmFsdWUgKnZhcmlh YmxlLAorCQkJCSAgICAgZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyaWJ1dGUs CisJCQkJICAgICBjb25zdCBjaGFyKiB2YWx1ZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQog I2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5t YXAgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggYjYyZjVkZTcyZDAuLmRmYjhhOWQ1MWZi IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2Nq aXQubWFwCkBAIC0yNzYsMyArMjc2LDExIEBAIExJQkdDQ0pJVF9BQklfMjUgewogICBnbG9iYWw6 CiAgICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdDsKIH0gTElCR0NDSklUX0FCSV8yNDsKKwor TElCR0NDSklUX0FCSV8yNiB7CisgIGdsb2JhbDoKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9h dHRyaWJ1dGU7CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAg ICBnY2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAgICBnY2Nfaml0X2Z1bmN0 aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZTsKK30gTElCR0NDSklUX0FCSV8yNTsKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKaW5kZXggZTc2MjU2 M2Y5YmQuLjdmOTdkYmU3MzA2IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwt bm9uLWZhaWxpbmctdGVzdHMuaAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZh aWxpbmctdGVzdHMuaApAQCAtMzIsNiArMzIsOSBAQAogLyogdGVzdC1hZGQtZHJpdmVyLW9wdGlv bnMuYzogV2UgZG9uJ3QgdXNlIHRoaXMgb25lLCBzaW5jZSB0aGUgZXh0cmEgb3B0aW9ucwogICAg YWZmZWN0IHRoZSB3aG9sZSBjb250ZXh0LiAgKi8KIAorLyogdGVzdC1hbGlhcy1hdHRyaWJ1dGUu YzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2VzIGFycmF5IGFzIGl0CisgICBkb2Vzbid0 IGhhdmUgYSB2ZXJpZnlfY29kZSBpbXBsZW1lbnRhdGlvbi4gICovCisKIC8qIHRlc3QtYWxpZ25t ZW50LmMgKi8KICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfYWxpZ25tZW50CiAjZGVm aW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2FsaWdubWVudApAQCAtMzksNiArNDIsOSBAQAog I3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC1hbHdheXNf aW5saW5lLWF0dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkg YXMgaXQgbmVlZHMKKyAgIHRoZSBgLU8wYCBmbGFnLiAgKi8KKwogLyogdGVzdC1hcml0aC1vdmVy Zmxvdy5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2FyaXRoX292ZXJmbG93 CiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2FyaXRoX292ZXJmbG93CkBAIC0xMTks NiArMTI1LDkgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8q IHRlc3QtY29sZC1hdHRyaWJ1dGUuYzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2VzIGFy cmF5IGFzIGl0IG5lZWRzCisgICB0aGUgYC1PMmAgZmxhZy4gICovCisKIC8qIHRlc3QtY29uc3Rh bnRzLmMgKi8KICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29uc3RhbnRzCiAjZGVm aW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2NvbnN0YW50cwpAQCAtMTI2LDYgKzEzNSw5IEBA CiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWNvbnN0 LWF0dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQg bmVlZHMKKyAgIHRoZSBgLU8zYCBmbGFnLiAgKi8KKwogLyogdGVzdC1kZWJ1Zy1zdHJpbmdzLmMg Ki8KICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfZGVidWdfc3RyaW5ncwogI2RlZmlu ZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9kZWJ1Z19zdHJpbmdzCkBAIC0yNjgsNiArMjgwLDEy IEBACiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LW5v aW5saW5lLWF0dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkg YXMgaXQgbmVlZHMKKyAgIHRoZSBgLU8yYCBmbGFnLiAgKi8KKworLyogdGVzdC1ub25udWxsLWF0 dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQgbmVl ZHMKKyAgIHRoZSBgLU8yYCBmbGFnLiAgKi8KKwogLyogdGVzdC1wcjEwMzU2Mi5jOiBXZSBkb24n dCBhZGQgdGhpcyBvbmUsIHNpbmNlIGl0IHRvdWNoZXMKICAgIHRoZSBvcHRpbWl6YXRpb24gbGV2 ZWwgb2YgdGhlIGNvbnRleHQgYXMgYSB3aG9sZS4gICovCiAKQEAgLTI5OSw2ICszMTcsOSBAQAog I3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC1wdXJlLWF0 dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQgbmVl ZHMKKyAgIHRoZSBgLU8zYCBmbGFnLiAgKi8KKwogLyogdGVzdC1yZWFkaW5nLXN0cnVjdC5jICov CiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX3JlYWRpbmdfc3RydWN0CiAjZGVmaW5l IHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX3JlYWRpbmdfc3RydWN0CkBAIC0zMTYsNiArMzM3LDkg QEAKIC8qIHRlc3QtcmVzdHJpY3QuYzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2VzIGFy cmF5IGFzIGl0IG5lZWRzCiAgICB0aGUgYC1PM2AgZmxhZy4gICovCiAKKy8qIHRlc3QtcmVzdHJp Y3QtYXR0cmlidXRlLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBp dCBuZWVkcworICAgdGhlIGAtTzNgIGZsYWcuICAqLworCiAvKiB0ZXN0LXJlZ2lzdGVyLXZhcmlh YmxlLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdAogICAgaXMg dGFyZ2V0LXNwZWNpZmljLiAgKi8KIApAQCAtMzUwLDYgKzM3NCw5IEBACiAjdW5kZWYgY3JlYXRl X2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LXVzZWQtYXR0cmlidXRlLmM6IFRo aXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAt TzJgIGZsYWcuICAqLworCiAvKiB0ZXN0LXVzaW5nLWdsb2JhbC5jICovCiAjZGVmaW5lIGNyZWF0 ZV9jb2RlIGNyZWF0ZV9jb2RlX3VzaW5nX2dsb2JhbAogI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJp ZnlfY29kZV91c2luZ19nbG9iYWwKQEAgLTM2MSw2ICszODgsOSBAQAogICAgb2YgZ2NjX2ppdF9j b250ZXh0X3NldF9ib29sX2FsbG93X3VucmVhY2hhYmxlX2Jsb2NrcyBhZmZlY3RzIHRoZSB3aG9s ZQogICAgY29udGV4dC4gICovCiAKKy8qIHRlc3QtdmFyaWFibGUtYXR0cmlidXRlLmM6IFRoaXMg Y2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdAorICAgZG9lc24ndCBoYXZlIGEg dmVyaWZ5X2NvZGUgaW1wbGVtZW50YXRpb24uICAqLworCiAvKiB0ZXN0LXZlY3Rvci10eXBlcy5j YzogV2UgZG9uJ3QgdXNlIHRoaXMsIHNpbmNlIGl0J3MgQysrLiAgKi8KIAogLyogdGVzdC12ZXJz aW9uLmMgKi8KQEAgLTM3Nyw2ICs0MDcsOSBAQAogI3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYg dmVyaWZ5X2NvZGUKIAorLyogdGVzdC13ZWFrLWF0dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGlu IHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQKKyAgIGRvZXNuJ3QgaGF2ZSBhIHZlcmlmeV9jb2Rl IGltcGxlbWVudGF0aW9uLiAgKi8KKwogLyogTm93IGV4cG9zZSB0aGUgaW5kaXZpZHVhbCB0ZXN0 Y2FzZXMgYXMgaW5zdGFuY2VzIG9mIHRoaXMgc3RydWN0LiAgKi8KIAogc3RydWN0IHRlc3RjYXNl CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9qaXQuZXhwIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvaml0LmV4cAppbmRleCA4YmY3ZTUxYzI0Zi4uNTY5NzIwNjRkMzAgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvaml0LmV4cApAQCAtODk5LDggKzg5OSw0MSBAQCBwcm9jIGppdC12ZXJpZnktYXNzZW1ibGVy LW91dHB1dCB7IGFyZ3MgfSB7CiAJcGFzcyAiJHthc21fZmlsZW5hbWV9IG91dHB1dCBwYXR0ZXJu IHRlc3QsICR7ZGctb3V0cHV0LXRleHR9IgogCXZlcmJvc2UgIlBhc3NlZCB0ZXN0IGZvciBvdXRw dXQgcGF0dGVybiAke2RnLW91dHB1dC10ZXh0fSIgMwogICAgIH0KK30KKworIyBBc3N1bWluZyB0 aGF0IGEgLnMgZmlsZSBoYXMgYmVlbiB3cml0dGVuIG91dCBuYW1lZAorIyBPVVRQVVRfRklMRU5B TUUsIGNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50IGRvZXNuJ3QgbWF0Y2gKKyMgdGhlIG91dHB1dCBm aWxlLgorcHJvYyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90IHsgYXJncyB9IHsKKyAg ICB2ZXJib3NlICJqaXQtdmVyaWZ5LWFzc2VtYmxlcjogJGFyZ3MiCisKKyAgICBzZXQgZGctb3V0 cHV0LXRleHQgW2xpbmRleCAkYXJncyAwXQorICAgIHZlcmJvc2UgImRnLW91dHB1dC10ZXh0OiAk e2RnLW91dHB1dC10ZXh0fSIKKworICAgIHVwdmFyIDIgbmFtZSBuYW1lCisgICAgdmVyYm9zZSAi bmFtZTogJG5hbWUiCisKKyAgICB1cHZhciAyIHByb2cgcHJvZworICAgIHZlcmJvc2UgInByb2c6 ICRwcm9nIgorICAgIHNldCBhc21fZmlsZW5hbWUgW2ppdC1nZXQtb3V0cHV0LWZpbGVuYW1lICRw cm9nXQorICAgIHZlcmJvc2UgIiAgYXNtX2ZpbGVuYW1lOiAke2FzbV9maWxlbmFtZX0iCiAKKyAg ICAjIFJlYWQgdGhlIGFzc2VtYmx5IGZpbGUuCisgICAgc2V0IGYgW29wZW4gJGFzbV9maWxlbmFt ZSByXQorICAgIHNldCBjb250ZW50IFtyZWFkICRmXQorICAgIGNsb3NlICRmCisKKyAgICAjIFZl cmlmeSB0aGF0IHRoZSBhc3NlbWJseSBtYXRjaGVzIHRoZSByZWdleC4KKyAgICBpZiB7IFtyZWdl eHAgJHtkZy1vdXRwdXQtdGV4dH0gJGNvbnRlbnRdIH0geworCWZhaWwgIiR7YXNtX2ZpbGVuYW1l fSBvdXRwdXQgcGF0dGVybiB0ZXN0LCBpcyAke2NvbnRlbnR9LCBzaG91bGQgbm90IG1hdGNoICR7 ZGctb3V0cHV0LXRleHR9IgorCXZlcmJvc2UgIkZhaWxlZCB0ZXN0IGZvciBvdXRwdXQgcGF0dGVy biAke2RnLW91dHB1dC10ZXh0fSIgMworICAgIH0gZWxzZSB7CisJcGFzcyAiJHthc21fZmlsZW5h bWV9IG91dHB1dCBwYXR0ZXJuIHRlc3QsICR7ZGctb3V0cHV0LXRleHR9IgorCXZlcmJvc2UgIlBh c3NlZCB0ZXN0IGZvciBvdXRwdXQgcGF0dGVybiAke2RnLW91dHB1dC10ZXh0fSIgMworICAgIH0K IH0KKworCiAjIEFzc3VtaW5nIHRoYXQgYSAubyBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gb3V0IG5h bWVkCiAjIE9VVFBVVF9GSUxFTkFNRSwgaW52b2tlIHRoZSBkcml2ZXIgdG8gdHJ5IHRvIHR1cm4g aXQgaW50bwogIyBhbiBleGVjdXRhYmxlLCBhbmQgdHJ5IHRvIHJ1biB0aGUgcmVzdWx0LgpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbGlhcy1hdHRyaWJ1dGUuYyBiL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViMjkwMDNkZmM5Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbGlhcy1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDUw IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2Nq aXQuaCIKKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9L SU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJ TEVOQU1FICAib3V0cHV0LW9mLXRlc3QtYWxpYXMtYXR0cmlidXRlLmMucyIKKyNpbmNsdWRlICJo YXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZv aWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1aXZhbGVu dCBvZjoKKwordm9pZCB4eHggKCkge30KK3ZvaWQgZiAoKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMg KCJ4eHgiKSkpOworICAqLworICBnY2Nfaml0X3R5cGUgKnZvaWRfdHlwZSA9CisgICAgZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9JRCk7CisKKyAgLyogQ3Jl YXRpbmcgdGhlIGB4eHhgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICp4eHhfZnVu YyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAg ICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgICAgICAgIHZvaWRfdHlwZSwKKyAg ICAgICAgICAieHh4IiwKKyAgICAgICAgICAwLCBOVUxMLAorICAgICAgICAgIDApOworCisgIC8q IENyZWF0aW5nIHRoZSBgZmAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKmZfZnVu YyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKwkJCQkg IEdDQ19KSVRfRlVOQ1RJT05fSU1QT1JURUQsCisJCQkJICB2b2lkX3R5cGUsCisJCQkJICAiZiIs CisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisgIGdjY19qaXRfZnVuY3Rpb25fYWRkX3N0cmlu Z19hdHRyaWJ1dGUoZl9mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9BTElBUywgInh4eCIpOwor CisgIC8qIHZvaWQgeHh4ICgpIHt9ICovCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCBOVUxMKTsKKyAgZ2NjX2ppdF9ibG9ja19l bmRfd2l0aF92b2lkX3JldHVybiAoYmxvY2ssIE5VTEwpOworfQorCisvKiB7IGRnLWZpbmFsIHsg aml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRo YXQgdGhlIGF0dHJpYnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0bHkgKi8KKy8qIHsgZGctZmluYWwg eyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi5zZXRcXHMrZix4eHgiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbHdheXNfaW5saW5lLWF0dHJpYnV0 ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbHdheXNfaW5saW5lLWF0dHJpYnV0ZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YzNmMzg2NjYzZgotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1h dHRyaWJ1dGUuYwpAQCAtMCwwICsxLDE1MyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9FU0NIRVdTX1NF VF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8gU2V0ICItTzAiLgorICBnY2Nfaml0X2NvbnRl eHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9JTlRfT1BUSU9OX09QVElNSVpBVElPTl9M RVZFTCwgMCk7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBP VVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9V VFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMu cyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK2djY19qaXRfZnVuY3Rpb24qCitjcmVhdGVfZnVu Y3Rpb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwK KwkJIGdjY19qaXRfdHlwZSAqaW50X3R5cGUsCisJCSBnY2Nfaml0X3R5cGUgKnBpbnRfdHlwZSkK K3sKKyAgLyogVGhlIGBhYCBmdW5jdGlvbiBhcmd1bWVudCAqLworICBnY2Nfaml0X3BhcmFtICph ID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwgcGludF90eXBlLCAiYSIp OworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1 bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05fSU5URVJOQUws CisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVuY19uYW1lLAorICAgICAgICAgIDEs ICZhLAorICAgICAgICAgIDApOworCisgIGdjY19qaXRfYmxvY2sgKmlmX2NvbmQgPQorICAgIGdj Y19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jLCAiaWZfY29uZCIpOworICBnY2Nfaml0X2Js b2NrICppZl9ib2R5ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuYywgImlm X2JvZHkiKTsKKyAgZ2NjX2ppdF9ibG9jayAqYWZ0ZXJfaWYgPQorICAgIGdjY19qaXRfZnVuY3Rp b25fbmV3X2Jsb2NrIChmdW5jLCAiYWZ0ZXJfaWYiKTsKKworICAvKiBpZiAoIWEpICovCisgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9uYWwgKAorICAgIGlmX2NvbmQsIE5VTEwsCisg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgKKyAgICAgIGN0eHQsIE5VTEwsCisg ICAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEsCisgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1 ZSAoYSksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbnVsbCAoY3R4dCwgcGludF90eXBlKSksCisg ICAgaWZfYm9keSwKKyAgICBhZnRlcl9pZik7CisgIC8qIHJldHVybiAtMTsgKi8KKyAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAgIGlmX2JvZHksIE5VTEwsCisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAtMSkpOworCisg IC8qIHJldHVybiAqYTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAg IGFmdGVyX2lmLCBOVUxMLAorICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoCisgICAgICBn Y2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAoCisJZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGEp LCBOVUxMKSkpOworCisgIHJldHVybiBmdW5jOworfQorCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0J3MgdHJ5 IHRvIGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKK19fYXR0cmlidXRlX18gKChhbHdheXNfaW5s aW5lKSkKK3N0YXRpYyBpbmxpbmUgaW50IHJlbW92ZWQgKGludCAqYSkgeworICBpZiAoIWEpIHsK KyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuICphOworfQorc3RhdGljIGludCBub3RfcmVt b3ZlZCAoaW50ICphKSB7CisgIGlmICghYSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1 cm4gKmE7Cit9CitpbnQgZm9vICgpIHsKKyAgaW50IHggPSAwOworICB4ICs9IHJlbW92ZWQoTlVM TCk7CisgIHggKz0gbm90X3JlbW92ZWQoTlVMTCk7CisgIHJldHVybiB4OworfQorICAqLworICBn Y2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUgKnBpbnRfdHlwZSA9IGdjY19q aXRfdHlwZV9nZXRfcG9pbnRlciAoaW50X3R5cGUpOworCisgIC8qIENyZWF0aW5nIHRoZSBgcmVt b3ZlZGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKnJlbW92ZWRfZnVuYyA9Cisg ICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAicmVtb3ZlZCIsIGludF90eXBlLCBwaW50X3R5cGUp OworICAvKiBUaGlzIG9uZSBpcyB0byBkZWNsYXJlIHRoZSBmdW5jdGlvbiBhcyAiaW5saW5lIiAq LworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUocmVtb3ZlZF9mdW5jLCBHQ0NfSklU X0ZOX0FUVFJJQlVURV9JTkxJTkUpOworICAvKiBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGlu ZSkpICovCisgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZShyZW1vdmVkX2Z1bmMsIEdD Q19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkUpOworCisgIC8qIENyZWF0aW5nIHRoZSBg bm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpub3RfcmVtb3Zl ZF9mdW5jID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQsICJub3RfcmVtb3ZlZCIsIGludF90 eXBlLCBwaW50X3R5cGUpOworCisgIC8qIENyZWF0aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8K KyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vX2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdf ZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAor CQkJCSAgaW50X3R5cGUsCisJCQkJICAiZm9vIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsK KworICBnY2Nfaml0X2Jsb2NrICpmb29fYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9j ayAoZm9vX2Z1bmMsIE5VTEwpOworCisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRf bHZhbHVlICp4ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vX2Z1bmMsIE5V TEwsIGludF90eXBlLCAieCIpOworCisgIC8qIGludCB4ID0gMDsgKi8KKyAgZ2NjX2ppdF9ibG9j a19hZGRfYXNzaWdubWVudCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisK KyAgLyogeCArPSByZW1vdmVkKE5VTEwpOyAqLworICBnY2Nfaml0X3J2YWx1ZSAqbnVsbCA9IGdj Y19qaXRfY29udGV4dF9udWxsIChjdHh0LCBwaW50X3R5cGUpOworICBnY2Nfaml0X2Jsb2NrX2Fk ZF9hc3NpZ25tZW50X29wICgKKyAgICBmb29fYmxvY2ssIE5VTEwsCisgICAgeCwKKyAgICBHQ0Nf SklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwg TlVMTCwgcmVtb3ZlZF9mdW5jLCAxLCAmbnVsbCkpOworICAKKyAgLyogeCArPSBub3RfcmVtb3Zl ZChOVUxMKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgZm9v X2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEwsIG5vdF9yZW1vdmVkX2Z1bmMsIDEs ICZudWxsKSk7CisKKyAgLyogcmV0dXJuIHg7ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhf cmV0dXJuIChmb29fYmxvY2ssIE5VTEwsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSh4KSk7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVhdGVkICIi IH0gfSAqLworLyogQ2hlY2sgdGhhdCB0aGUgInJlbW92ZWQiIGZ1bmN0aW9uIHdhcyBpbmxpbmVk LCBidXQgbm90IHRoZSBvdGhlcnMgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2Vt Ymxlci1vdXRwdXQtbm90ICIudHlwZVxccytyZW1vdmVkLFxccytAZnVuY3Rpb24iIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dCAiLnR5cGVcXHMrbm90 X3JlbW92ZWQsXFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlm eS1hc3NlbWJsZXItb3V0cHV0ICIudHlwZVxccytmb28sXFxzK0BmdW5jdGlvbiIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmMgYi9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBjNzZkM2UzNjgxCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsNTIg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0 X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7Cisg IC8vIFNldCAiLU8yIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdD Q19KSVRfSU5UX09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQorCisjZGVmaW5lIFRF U1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09V VFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2Yt dGVzdC1jb2xkLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitpbnQKK19fYXR0cmli dXRlX18gKChjb2xkKSkKK3QoKQoreworICByZXR1cm4gLTE7Cit9CisKKyAgKi8KKyAgZ2NjX2pp dF90eXBlICppbnRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBH Q0NfSklUX1RZUEVfSU5UKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jX3QgPQorICAgIGdj Y19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZV TkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAidCIsCisJCQkJICAwLCBO VUxMLAorCQkJCSAgMCk7CisgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZShmdW5jX3Qs IEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTEQpOworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdj Y19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsIE5VTEwpOworICBnY2Nfaml0X3J2YWx1 ZSAqcmV0ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsCisgICAg aW50X3R5cGUsCisgICAgLTEpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChi bG9jaywgTlVMTCwgcmV0KTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0 LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1h c3NlbWJsZXItb3V0cHV0ICJvcmwiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1jb25zdC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt Y29uc3QtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjdiOTgwNDFjOWJiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1jb25zdC1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDEzMiBAQAorLyogeyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9F U0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8gU2V0ICItTzMiLgorICBnY2Nf aml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9JTlRfT1BUSU9OX09QVElN SVpBVElPTl9MRVZFTCwgMyk7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQor I2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisj ZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LWNvbnN0LWF0dHJpYnV0ZS5j LnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmpl Y3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQoraW50IGZvbyAo aW50IHgpOworaW50IHh4eCh2b2lkKQoreworICBpbnQgeCA9IDQ1OworICBpbnQgc3VtID0gMDsK KworICB3aGlsZSAoeCA+Pj0gMSkKKyAgICBzdW0gKz0gZm9vICh4KSAqIDI7CisgIHJldHVybiBz dW07Cit9CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgLyogQ3JlYXRpbmcg dGhlIGBmb29gIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X3BhcmFtICpuID0KKyAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2pp dF9wYXJhbSAqcGFyYW1zWzFdID0ge259OworICBnY2Nfaml0X2Z1bmN0aW9uICpmb29fZnVuYyA9 CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAg ICBHQ0NfSklUX0ZVTkNUSU9OX0lNUE9SVEVELAorICAgICAgICAgIGludF90eXBlLAorICAgICAg ICAgICJmb28iLAorICAgICAgICAgIDEsIHBhcmFtcywKKyAgICAgICAgICAwKTsKKyAgZ2NjX2pp dF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZvb19mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9D T05TVCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGB4eHhgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0 X2Z1bmN0aW9uICp4eHhfZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAo Y3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICBpbnRf dHlwZSwKKwkJCQkgICJ4eHgiLAorCQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworCisgIGdjY19q aXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCBO VUxMKTsKKworICAvKiBCdWlsZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9Cisg ICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKHh4eF9mdW5jLCBOVUxMLCBpbnRfdHlwZSwg IngiKTsKKyAgZ2NjX2ppdF9sdmFsdWUgKnN1bSA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdf bG9jYWwgKHh4eF9mdW5jLCBOVUxMLCBpbnRfdHlwZSwgInN1bSIpOworCisgIC8qIGludCB4ID0g NDUgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgYmxvY2ssIE5VTEws CisgICAgeCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwg aW50X3R5cGUsIDQ1KSk7CisgIC8qIGludCBzdW0gPSAwICovCisgIGdjY19qaXRfYmxvY2tfYWRk X2Fzc2lnbm1lbnQgKAorICAgIGJsb2NrLCBOVUxMLAorICAgIHN1bSwKKyAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDApKTsKKworICAvKiB3 aGlsZSAoeCA+Pj0gMSkgeyBzdW0gKz0gZm9vICh4KSAqIDI7IH0gKi8KKyAgZ2NjX2ppdF9ibG9j ayAqbG9vcF9jb25kID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMs ICJsb29wX2NvbmQiKTsKKyAgZ2NjX2ppdF9ibG9jayAqbG9vcF9ib2R5ID0KKyAgICBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsICJsb29wX2JvZHkiKTsKKyAgZ2NjX2ppdF9i bG9jayAqYWZ0ZXJfbG9vcCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9m dW5jLCAiYWZ0ZXJfbG9vcCIpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfanVtcCAoYmxv Y2ssIE5VTEwsIGxvb3BfY29uZCk7CisKKworICAvKiBpZiAoeCA+Pj0gMSkgKi8KKyAgLyogU2lu Y2UgZ2Njaml0IGRvZXNuJ3QgKHlldD8pIGhhdmUgc3VwcG9ydCBmb3IgYD4+PWAgb3BlcmF0b3Is IHdlIHdpbGwgZGVjb21wb3NlIGl0IGludG86CisgICAgIGBpZiAoeCA9IHggPj4gMSlgICovCisg IGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGxvb3BfY29uZCwgTlVMTCwK KyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1JTSElGVCwKKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKTsKKyAgLyogVGhlIGNv bmRpdGlvbiBpdHNlbGYgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9jb25kaXRpb25hbCAo CisgICAgbG9vcF9jb25kLCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY29tcGFyaXNv biAoCisgICAgICAgY3R4dCwgTlVMTCwKKyAgICAgICBHQ0NfSklUX0NPTVBBUklTT05fTkUsCisg ICAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlICh4KSwKKyAgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDApKSwKKyAgICBhZnRlcl9s b29wLAorICAgIGxvb3BfYm9keSk7CisKKyAgLyogc3VtICs9IGZvbyAoeCkgKiAyOyAqLworICBn Y2Nfaml0X3J2YWx1ZSAqYXJnID0gZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKHgpOworICBnY2Nf aml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBsb29wX2JvZHksIE5VTEwsCisgICAg eCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf YmluYXJ5X29wICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9N VUxULCBpbnRfdHlwZSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwgTlVM TCwgZm9vX2Z1bmMsIDEsICZhcmcpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKAorCWN0eHQsCisJaW50X3R5cGUsCisJMikpKTsKKyAgZ2NjX2ppdF9ibG9ja19l bmRfd2l0aF9qdW1wIChsb29wX2JvZHksIE5VTEwsIGxvb3BfY29uZCk7CisKKyAgLyogcmV0dXJu IHN1bTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGFmdGVyX2xvb3AsIE5V TEwsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShzdW0pKTsKK30KKworLyogeyBkZy1maW5hbCB7 IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0 aGF0IHRoZSBsb29wIHdhcyBvcHRpbWl6ZWQgYXdheSAqLworLyogeyBkZy1maW5hbCB7IGppdC12 ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgImpuZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vaW5saW5lLWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZWFjNmNhZTZiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LW5vaW5saW5lLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsMTE5IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQu aCIKKworI2RlZmluZSBURVNUX0VTQ0hFV1NfU0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9v cHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAv LyBTZXQgIi1PMiIuCisgIGdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0Nf SklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAyKTsKK30KKworI2RlZmluZSBURVNU X0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQ VVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRl c3Qtbm9pbmxpbmUtYXR0cmlidXRlLmMucyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK2djY19q aXRfZnVuY3Rpb24qCitjcmVhdGVfZnVuY3Rpb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJ IGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwKKwkJIGdjY19qaXRfdHlwZSAqaW50X3R5cGUsCisJCSBp bnQgcmV0dXJuZWRfdmFsdWUpCit7CisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMKKyAgICA9IGdj Y19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24oY3R4dCwgTlVMTCwKKwkgIEdDQ19KSVRfRlVOQ1RJ T05fSU5URVJOQUwsCisJICBpbnRfdHlwZSwKKwkgIGZ1bmNfbmFtZSwKKwkgIDAsIE5VTEwsCisJ ICAwKTsKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9j ayAoZnVuYywgTlVMTCk7CisKKyAgZ2NjX2ppdF9ibG9ja19hZGRfZXh0ZW5kZWRfYXNtIChibG9j aywgTlVMTCwgIiIpOworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIE5V TEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90 eXBlLCByZXR1cm5lZF92YWx1ZSkpOworCisgIHJldHVybiBmdW5jOworfQorCisKK3ZvaWQKK2Ny ZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAg LyogTGV0J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKK19fYXR0cmlidXRlX18g KChub2lubGluZSkpCitzdGF0aWMgaW50IG5vdF9yZW1vdmVkKCkgeworICBhc20oIiIpOworICBy ZXR1cm4gMTsKK30KK3N0YXRpYyBpbnQgcmVtb3ZlZCgpIHsKKyAgYXNtKCIiKTsKKyAgcmV0dXJu IDI7Cit9CitpbnQgZm9vICgpIHsKKyAgaW50IHggPSAwOworICB4ICs9IHJlbW92ZWQoKTsKKyAg eCArPSBub3RfcmVtb3ZlZCgpOworICByZXR1cm4geDsKK30KKyAgKi8KKyAgZ2NjX2ppdF90eXBl ICppbnRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklU X1RZUEVfSU5UKTsKKworICAvKiBDcmVhdGluZyB0aGUgYG5vdF9yZW1vdmVkYCBmdW5jdGlvbi4g Ki8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqbm90X3JlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRlX2Z1 bmN0aW9uIChjdHh0LCAibm90X3JlbW92ZWQiLCBpbnRfdHlwZSwgMSk7CisgIC8qIF9fYXR0cmli dXRlX18gKChub19pbmxpbmUpKSAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUo bm90X3JlbW92ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9JTkxJTkUpOworCisgIC8q IENyZWF0aW5nIHRoZSBgcmVtb3ZlZGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24g KnJlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAicmVtb3ZlZCIsIGlu dF90eXBlLCAyKTsKKworICAvKiBDcmVhdGluZyB0aGUgYGZvb2AgZnVuY3Rpb24uICovCisgIGdj Y19qaXRfZnVuY3Rpb24gKmZvb19mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0 aW9uIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkg IGludF90eXBlLAorCQkJCSAgImZvbyIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAg Z2NjX2ppdF9ibG9jayAqZm9vX2Jsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZv b19mdW5jLCBOVUxMKTsKKworICAvKiBCdWlsZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1 ZSAqeCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvb19mdW5jLCBOVUxMLCBp bnRfdHlwZSwgIngiKTsKKworICAvKiBpbnQgeCA9IDA7ICovCisgIGdjY19qaXRfYmxvY2tfYWRk X2Fzc2lnbm1lbnQgKAorICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8q IHggKz0gcmVtb3ZlZCgpOyAqLworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgK KyAgICBmb29fYmxvY2ssIE5VTEwsCisgICAgeCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVT LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwgTlVMTCwgcmVtb3ZlZF9mdW5j LCAwLCBOVUxMKSk7CisgIAorICAvKiB4ICs9IG5vdF9yZW1vdmVkKCk7ICovCisgIGdjY19qaXRf YmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAor ICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxs IChjdHh0LCBOVUxMLCBub3RfcmVtb3ZlZF9mdW5jLCAwLCBOVUxMKSk7CisKKyAgLyogcmV0dXJu IHg7ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChmb29fYmxvY2ssIE5VTEws IGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSh4KSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQt dmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVhdGVkICIiIH0gfSAqLworLyogQ2hlY2sgdGhhdCB0 aGUgInJlbW92ZWQiIGZ1bmN0aW9uIHdhcyBpbmxpbmVkLCBidXQgbm90IHRoZSBvdGhlcnMgKi8K Ky8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90ICIudHlwZVxc cytyZW1vdmVkLmlzcmEuMCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBq aXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK25vdF9yZW1vdmVkLmlzcmEuMCxc XHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxl ci1vdXRwdXQgIi50eXBlXFxzK2ZvbyxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNDJjMzhhY2I5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw5MiBA QAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisKKyNkZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRf b3B0aW9ucyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAg Ly8gU2V0ICItTzIiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0ND X0pJVF9JTlRfT1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMik7Cit9CisKKyNkZWZpbmUgVEVT VF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VU UFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10 ZXN0LW5vbm51bGwuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2Nv ZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQn cyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorCitfX2F0dHJpYnV0ZV9fKChub25u dWxsKDEpKSkKK2ludCB0KGludCAqYSkgeworICBpZiAoIWEpIHsKKyAgICByZXR1cm4gLTE7Cisg IH0KKyAgcmV0dXJuICphOworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAg ICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworICBn Y2Nfaml0X3R5cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlcihpbnRfdHlw ZSk7CisKKyAgZ2NjX2ppdF9wYXJhbSAqYSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19wYXJh bSAoY3R4dCwgTlVMTCwgcGludF90eXBlLCAiYSIpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1 bmNfdCA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKwkg IEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJICBpbnRfdHlwZSwKKwkgICJ0IiwKKwkgIDEs ICZhLAorCSAgMCk7CisgIC8qIEFkZGluZyBgbm9ubnVsbCgxKWAgYXR0cmlidXRlLiAqLworICBp bnQgaW5kZXhlc1sxXSA9IHsxfTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfaW50ZWdlcl9hcnJh eV9hdHRyaWJ1dGUgKAorICAgIGZ1bmNfdCwKKyAgICBHQ0NfSklUX0ZOX0FUVFJJQlVURV9OT05O VUxMLAorICAgIGluZGV4ZXMsCisgICAgMQorICApOworCisgIC8qIGlmICghYSkgeworICAgIHJl dHVybiAtMTsKKyAgfSAqLworICBnY2Nfaml0X2Jsb2NrICppZl9jb25kID0KKyAgICBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuY190LCAiaWZfY29uZCIpOworICBnY2Nfaml0X2Jsb2Nr ICppZl9ib2R5ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuY190LCAiaWZf Ym9keSIpOworICBnY2Nfaml0X2Jsb2NrICphZnRlcl9pZiA9CisgICAgZ2NjX2ppdF9mdW5jdGlv bl9uZXdfYmxvY2sgKGZ1bmNfdCwgImFmdGVyX2lmIik7CisKKyAgLyogaWYgKCFhKSAqLworICBn Y2Nfaml0X2Jsb2NrX2VuZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBpZl9jb25kLCBOVUxMLAor ICAgIGdjY19qaXRfY29udGV4dF9uZXdfY29tcGFyaXNvbiAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9DT01QQVJJU09OX0VRLAorICAgICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFs dWUgKGEpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X251bGwgKGN0eHQsIHBpbnRfdHlwZSkpLAor ICAgIGlmX2JvZHksCisgICAgYWZ0ZXJfaWYpOworICAvKiByZXR1cm4gLTE7ICovCisgIGdjY19q aXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuICgKKyAgICBpZl9ib2R5LCBOVUxMLAorICAgIGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgLTEpKTsKKwor ICAvKiByZXR1cm4gKmE7ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuICgKKyAg ICBhZnRlcl9pZiwgTlVMTCwKKyAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorICAgICAg Z2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKAorCWdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChh KSwgTlVMTCkpKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZpbGUt d2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSAiaWYgYmxvY2siIHdhcyBv cHRpbWl6ZWQgYXdheSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91 dHB1dC1ub3QgInRlc3RxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2Vt Ymxlci1vdXRwdXQtbm90ICItMSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXB1 cmUtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBj NzczYmMyNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1w dXJlLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworI2RlZmluZSBURVNUX0VTQ0hF V1NfU0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAvLyBTZXQgIi1PMyIuCisgIGdjY19qaXRf Y29udGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFU SU9OX0xFVkVMLCAzKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVm aW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZp bmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3QtcHVyZS1hdHRyaWJ1dGUuYy5zIgor I2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4 dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRo ZSBlcXVpdmFsZW50IG9mOgorX19hdHRyaWJ1dGVfXyAoKHB1cmUpKQoraW50IGZvbyAoaW50IHgp OworaW50IHh4eCh2b2lkKQoreworICBpbnQgeCA9IDQ1OworICBpbnQgc3VtID0gMDsKKworICB3 aGlsZSAoeCA+Pj0gMSkKKyAgICBzdW0gKz0gZm9vICh4KSAqIDI7CisgIHJldHVybiBzdW07Cit9 CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBm b29gIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X3BhcmFtICpuID0KKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2ppdF9wYXJh bSAqcGFyYW1zWzFdID0ge259OworICBnY2Nfaml0X2Z1bmN0aW9uICpmb29fZnVuYyA9CisgICAg Z2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAgICBHQ0Nf SklUX0ZVTkNUSU9OX0lNUE9SVEVELAorICAgICAgICAgIGludF90eXBlLAorICAgICAgICAgICJm b28iLAorICAgICAgICAgIDEsIHBhcmFtcywKKyAgICAgICAgICAwKTsKKyAgZ2NjX2ppdF9mdW5j dGlvbl9hZGRfYXR0cmlidXRlKGZvb19mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9QVVJFKTsK KworICAvKiBDcmVhdGluZyB0aGUgYHh4eGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rp b24gKnh4eF9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBO VUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAor CQkJCSAgInh4eCIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9ibG9j ayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsIE5VTEwpOwor CisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBnY2Nf aml0X2Z1bmN0aW9uX25ld19sb2NhbCAoeHh4X2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIpOwor ICBnY2Nfaml0X2x2YWx1ZSAqc3VtID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAo eHh4X2Z1bmMsIE5VTEwsIGludF90eXBlLCAic3VtIik7CisKKyAgLyogaW50IHggPSA0NSAqLwor ICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50ICgKKyAgICBibG9jaywgTlVMTCwKKyAgICB4 LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlw ZSwgNDUpKTsKKyAgLyogaW50IHN1bSA9IDAgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdu bWVudCAoCisgICAgYmxvY2ssIE5VTEwsCisgICAgc3VtLAorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHdoaWxlICh4 ID4+PSAxKSB7IHN1bSArPSBmb28gKHgpICogMjsgfSAqLworICBnY2Nfaml0X2Jsb2NrICpsb29w X2NvbmQgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywgImxvb3Bf Y29uZCIpOworICBnY2Nfaml0X2Jsb2NrICpsb29wX2JvZHkgPQorICAgIGdjY19qaXRfZnVuY3Rp b25fbmV3X2Jsb2NrICh4eHhfZnVuYywgImxvb3BfYm9keSIpOworICBnY2Nfaml0X2Jsb2NrICph ZnRlcl9sb29wID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsICJh ZnRlcl9sb29wIik7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9qdW1wIChibG9jaywgTlVM TCwgbG9vcF9jb25kKTsKKworCisgIC8qIGlmICh4ID4+PSAxKSAqLworICAvKiBTaW5jZSBnY2Nq aXQgZG9lc24ndCAoeWV0PykgaGF2ZSBzdXBwb3J0IGZvciBgPj49YCBvcGVyYXRvciwgd2Ugd2ls bCBkZWNvbXBvc2UgaXQgaW50bzoKKyAgICAgYGlmICh4ID0geCA+PiAxKWAgKi8KKyAgZ2NjX2pp dF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgbG9vcF9jb25kLCBOVUxMLAorICAgIHgs CisgICAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZULAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMSkpOworICAvKiBUaGUgY29uZGl0aW9u IGl0c2VsZiAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBs b29wX2NvbmQsIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgKKyAg ICAgICBjdHh0LCBOVUxMLAorICAgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9ORSwKKyAgICAgICBn Y2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKHgpLAorICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpLAorICAgIGFmdGVyX2xvb3AsCisg ICAgbG9vcF9ib2R5KTsKKworICAvKiBzdW0gKz0gZm9vICh4KSAqIDI7ICovCisgIGdjY19qaXRf cnZhbHVlICphcmcgPSBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoeCk7CisgIGdjY19qaXRfYmxv Y2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGxvb3BfYm9keSwgTlVMTCwKKyAgICB4LAorICAg IEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlf b3AgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQsIGlu dF90eXBlLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBmb29f ZnVuYywgMSwgJmFyZyksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoCisJY3R4dCwKKwlpbnRfdHlwZSwKKwkyKSkpOworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRo X2p1bXAgKGxvb3BfYm9keSwgTlVMTCwgbG9vcF9jb25kKTsKKworICAvKiByZXR1cm4gc3VtOyAq LworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYWZ0ZXJfbG9vcCwgTlVMTCwgZ2Nj X2ppdF9sdmFsdWVfYXNfcnZhbHVlKHN1bSkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZl cmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhl IGxvb3Agd2FzIG9wdGltaXplZCBhd2F5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1h c3NlbWJsZXItb3V0cHV0LW5vdCAiam5lIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LXJlc3RyaWN0LWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5kNzI0NDcyYzY1MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw3NSBAQAorLyogeyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNk ZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKwkvLyBTZXQgIi1P MyIuCisJZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09Q VElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDMpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5H X1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FT U0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC1yZXN0cmlj dC1hdHRyaWJ1dGUuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2Nv ZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworCS8qIExldCdz IHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6Cit2b2lkIHQoaW50ICpfX3Jlc3RyaWN0 X18gYSwgaW50ICpfX3Jlc3RyaWN0X18gYiwgY2hhciAqX19yZXN0cmljdF9fIGMpIHsKKwkqYSAr PSAqYzsKKwkqYiArPSAqYzsKK30KKwkqLworCWdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorCQln Y2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCWdjY19q aXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGludF90eXBlKTsK KwlnY2Nfaml0X3R5cGUgKnBpbnRfcmVzdHJpY3RfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcmVz dHJpY3QocGludF90eXBlKTsKKworCWdjY19qaXRfdHlwZSAqdm9pZF90eXBlID0KKwkJZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9JRCk7CisKKwlnY2Nfaml0 X3BhcmFtICphID0KKwkJZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwgcGlu dF9yZXN0cmljdF90eXBlLCAiYSIpOworCWdjY19qaXRfcGFyYW0gKmIgPQorCQlnY2Nfaml0X2Nv bnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3Jlc3RyaWN0X3R5cGUsICJiIik7CisJ Z2NjX2ppdF9wYXJhbSAqYyA9CisJCWdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIE5V TEwsIHBpbnRfcmVzdHJpY3RfdHlwZSwgImMiKTsKKwlnY2Nfaml0X3BhcmFtICpwYXJhbXNbM10g PSB7YSwgYiwgY307CisKKwlnY2Nfaml0X2Z1bmN0aW9uICpmdW5jX3QgPQorCQlnY2Nfaml0X2Nv bnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCQlHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorCQkJCQl2b2lkX3R5cGUsCisJCQkJCSJ0IiwKKwkJCQkJMywgcGFyYW1zLAorCQkJ CQkwKTsKKworCWdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxv Y2sgKGZ1bmNfdCwgTlVMTCk7CisKKwkvKiAqYSArPSAqYzsgKi8KKwlnY2Nfaml0X2Jsb2NrX2Fk ZF9hc3NpZ25tZW50X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdjY19qaXRfcnZhbHVlX2RlcmVm ZXJlbmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksIE5VTEwpLAorCQlHQ0NfSklUX0JJ TkFSWV9PUF9QTFVTLAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJZ2NjX2ppdF9y dmFsdWVfZGVyZWZlcmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChjKSwgTlVMTCkpKTsK KwkvKiAqYiArPSAqYzsgKi8KKwlnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKwkJ YmxvY2ssIE5VTEwsCisJCWdjY19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFt X2FzX3J2YWx1ZSAoYiksIE5VTEwpLAorCQlHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorCQlnY2Nf aml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKGdj Y19qaXRfcGFyYW1fYXNfcnZhbHVlIChjKSwgTlVMTCkpKTsKKworCWdjY19qaXRfYmxvY2tfZW5k X3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGpp dC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICJhZGRsXFxzKyVlYXgsXFxzKyglcmRpKQor XFxzK2FkZGxcXHMrJWVheCxcXHMrKCVyc2kpIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uY2IyMDk1MmM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LXVzZWQtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjZGVmaW5lIFRF U1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAiLU8yIi4KKyAg Z2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9P UFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJ TEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxF UgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC11c2VkLWF0dHJpYnV0 ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9uKgorY3JlYXRl X2Z1bmN0aW9uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmdW5jX25h bWUsCisJCSBnY2Nfaml0X3R5cGUgKmludF90eXBlLAorCQkgaW50IHJldHVybmVkX3ZhbHVlKQor eworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1 bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05fSU5URVJOQUws CisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVuY19uYW1lLAorICAgICAgICAgIDAs IE5VTEwsCisgICAgICAgICAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Jsb2NrID0gZ2Nj X2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsIE5VTEwpOworICBnY2Nfaml0X2Jsb2NrX2Vu ZF93aXRoX3JldHVybiAoZm9vX2Jsb2NrLCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgcmV0dXJuZWRfdmFsdWUpKTsKKworICBy ZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpj dHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVx dWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKK3N0YXRpYyBpbnQgbm90X3JlbW92 ZWQoKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVybiAyOyB9Citp bnQgZm9vKCkgeworICBpbnQgeCA9IDA7CisgIHggKz0gbm90X3JlbW92ZWQoKTsKKyAgeCArPSBy ZW1vdmVkKCk7CisgIHJldHVybiB4OworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBl ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQp OworCisgIC8qIENyZWF0aW5nIHRoZSBgbm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAqLworICBnY2Nf aml0X2Z1bmN0aW9uICpub3RfcmVtb3ZlZF9mdW5jID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0 eHQsICJub3RfcmVtb3ZlZCIsIGludF90eXBlLCAxKTsKKyAgLyogX19hdHRyaWJ1dGVfXyAoKHVz ZWQpKSAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3JlbW92ZWRfZnVu YywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGByZW1v dmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqcmVtb3ZlZF9mdW5jID0KKyAg ICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQsICJyZW1vdmVkIiwgaW50X3R5cGUsIDIpOworCisgIC8q IENyZWF0aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9v X2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJ CQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAi Zm9vIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nfaml0X2Jsb2NrICpmb29f YmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vX2Z1bmMsIE5VTEwpOworCisg IC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBnY2Nfaml0 X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vX2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIpOworCisg IC8qIGludCB4ID0gMDsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAg Zm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyogeCArPSByZW1vdmVkKCk7ICov CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19ibG9jaywgTlVM TCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCByZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsKKyAgCisg IC8qIHggKz0gbm90X3JlbW92ZWQoKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllf T1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEwsIG5vdF9y ZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsKKworICAvKiByZXR1cm4geDsgKi8KKyAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19ibG9jaywgTlVMTCwgZ2NjX2ppdF9sdmFsdWVfYXNf cnZhbHVlKHgpKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZpbGUt d2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSAicmVtb3ZlZCIgZnVuY3Rp b24gd2FzIGlubGluZWQsIGJ1dCBub3QgdGhlIG90aGVycyAqLworLyogeyBkZy1maW5hbCB7IGpp dC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi50eXBlXFxzK3JlbW92ZWQsXFxzK0BmdW5j dGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 ICIudHlwZVxccytub3RfcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK2ZvbyxcXHMrQGZ1bmN0 aW9uIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdmFyaWFi bGUtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZhcmlhYmxlLWF0dHJp YnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYTg1NGZmNGE5 ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdmFyaWFibGUt YXR0cmlidXRlLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9DT01QSUxJTkdf VE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRfQVNT RU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LXZhcmlhYmxl LWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdz IHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK2ludCBQUklWQVRFIF9fYXR0cmli dXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSA9IDQyOworaW50IFBVQkxJQyA9IDEyOwor ICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5nIHRoZSBgUFJJ VkFURWAgdmFyaWFibGUuICovCisgIGdjY19qaXRfbHZhbHVlICpwcml2YXRlID0gZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVMTCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JU RUQsIGludF90eXBlLCAiUFJJVkFURSIpOworICBnY2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0 dHJpYnV0ZSAocHJpdmF0ZSwKKyAgICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVURV9WSVNJQklM SVRZLCAiaGlkZGVuIik7CisgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQyKTsKKyAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocHJpdmF0ZSwgcnZhbCk7CisKKyAg LyogQ3JlYXRpbmcgdGhlIGBQVUJMSUNgIHZhcmlhYmxlLiAqLworICBnY2Nfaml0X2x2YWx1ZSAq cHVibGljID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVMTCwgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsIGludF90eXBlLCAiUFVCTElDIik7CisgIGdjY19qaXRfcnZh bHVlICpydmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg IGN0eHQsIGludF90eXBlLCAxMik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9y dmFsdWUgKHB1YmxpYywgcnZhbDIpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1v dXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlIGF0dHJp YnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0bHkgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5 LWFzc2VtYmxlci1vdXRwdXQgIi5oaWRkZW5cXHMrUFJJVkFURSIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIuZ2xvYmxcXHMrUFJJVkFURSIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAiLmhp ZGRlblxccytQVUJMSUMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1i bGVyLW91dHB1dCAiLmdsb2JsXFxzK1BVQkxJQyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LXdlYWstYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjU0NmFkZTFjM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjZGVmaW5lIFRF U1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09V VFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2Yt dGVzdC13ZWFrLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK19fYXR0cmlidXRl X18gKCh3ZWFrKSkKK3ZvaWQgZiAoKSB7fQorICAqLworICBnY2Nfaml0X3R5cGUgKnZvaWRfdHlw ZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9J RCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5j dGlvbiAqZl9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBO VUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIHZvaWRfdHlwZSwK KwkJCQkgICJmIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlv bl9hZGRfYXR0cmlidXRlKGZfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfV0VBSyk7CisKKyAg Lyogdm9pZCBmICgpIHt9ICovCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5j dGlvbl9uZXdfYmxvY2sgKGZfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhf dm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJp Znktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSBh dHRyaWJ1dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZl cmlmeS1hc3NlbWJsZXItb3V0cHV0ICIud2Vha1xccytmIiB9IH0gKi8KLS0gCjIuMzQuMQoK --000000000000da0a40060ebfe68c--