From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id A3B1C386D619; Thu, 11 Jan 2024 00:00:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A3B1C386D619 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 A3B1C386D619 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704931292; cv=none; b=te1MCTLOInGS54brD59ZRw9aB8ziGb6h2E1wbnbgDLIR1a6Kr4inGrtFhGhD82EIf+K3CkgszHKg8JOtbyHJxiuyQY1wfG2M/K+L7ONwM8AKaLBrAhALnJz6tw6zTaENjaq0uUnOSAiwrPKgM2bvTCDWyvnc4r617pndWMehENs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704931292; c=relaxed/simple; bh=05gkbPULkmKF2SMO1gAWHj5RzJpG2GDgtZzTU1ujzp8=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=gaMcpSIw+IiyVYWnQfqMC2Xm/GA1bAlFuwupL5J+SMsapZYgbZ4EC4GwbbdIFj0BSyOvuV0kkbGNqw/uU3zEa2yDwkIs5beqbn19LXme8EQk0dwW8GatDqLv6coOoCSNI41M49TDxYKMFnEXLfC0AFDaBbVA+NXVKm/KfeDeVHM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40d87df95ddso49306455e9.0; Wed, 10 Jan 2024 16:00:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704931255; x=1705536055; 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=V+KiFVtpUJPmiZuXk9ldBfqFAnIcGfJmWreWnc7wARg=; b=lOVCLYiEctGB4bGNl/LZsZuzFDIQZVrhS5aUOm4G09VCWsmT1ImUO1qXB9vsIU/3kW z3QLQypXMqnqTy0E7N5wPFDmaUwoJVzn8ScQKLkv3ZuHSYc5WE7VbHhFzpfq3sgmWdfo cimZHTJs/hlxYqMpjUgFa2ZYdum7+aTdZ795dHpMyfSs9iNZlXJ/ckzpwUTiP/ZoFS3F CySJ2UtSf0hPktSUsiiJ16XvZekipOfyC3q7cRvPZChtDP6ditDhLZlSS5TzWI+L8ilF qJiXU3zSBeAiCoFAPuU8mARXQiusPDrjcT7AQ2L3KrgsYXCikYqUY7oWbMdO77QoTXv/ 3fqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704931255; x=1705536055; 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=V+KiFVtpUJPmiZuXk9ldBfqFAnIcGfJmWreWnc7wARg=; b=bsj8wSEPVxx1AQBXP0/RjoJhoalpVzH3FwMdqkr9HjiRk+JKup6fERFFxM2hz/y3GD L89YV2HAibWNZXL/s8OQoZft3aUNR+gsIIXSqRC9/l/MmdUwFJ+mOS0oshwkEDqnyAaB 7t8hG0thyhjoYwCshLqGTSZm1RyFLLAK5Pbwv7pXsUfG5dZv5DxRmP3gkrCnq5oK+b2P F5R4QduqBut9Es7QlkvsHpMrVHv/HPP6EG/DGWYRhqkuwVBs/GMS+uc1r3wGpCH9k92T I+L2TYGIynFr1fGkkGCoXV5aj57qOy+2k7cJWDmEoV0qYY3lKAvRWsFJ2b/FMrM1cMmL Mlog== X-Gm-Message-State: AOJu0YygUuI4GoRS2Jn/Ja5DIbo6EKx9aUyrARMu8Wabf0zX+MSGo/KA PDrL9JzAaTEJooepDxKj24aQdht49703SQ0psSQ= X-Google-Smtp-Source: AGHT+IFTUQQVQfQgVyvXRHOUPj0dMV3USHx3DuUez8b41U2+rGVhKZmrJBiQCT5Li1M/FApSHdCf87iYy6mpo8hlz20= X-Received: by 2002:adf:fec9:0:b0:336:817c:89f2 with SMTP id q9-20020adffec9000000b00336817c89f2mr82971wrs.220.1704931254981; Wed, 10 Jan 2024 16:00:54 -0800 (PST) MIME-Version: 1.0 References: <319a998a3c63eaf0e28d7267a901ad2c016dba49.camel@redhat.com> In-Reply-To: <319a998a3c63eaf0e28d7267a901ad2c016dba49.camel@redhat.com> From: Guillaume Gomez Date: Thu, 11 Jan 2024 01:00:43 +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="000000000000d1f289060ea03db9" X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,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: --000000000000d1f289060ea03db9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi David. Thanks for the review! > > +.. function:: void\ > > + gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *va= riable, > > + enum gcc_jit_fn_at= tribute 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! Le mar. 9 janv. 2024 =C3=A0 20:59, David Malcolm a = =C3=A9crit : > > On Wed, 2023-11-15 at 17:53 +0100, Guillaume Gomez wrote: > > Hi, > > > > This patch adds the (incomplete) support for function and variable > > attributes. The added attributes are the ones we're using in > > rustc_codegen_gcc but all the groundwork is done to add more (and we > > will very likely add more as we didn't add all the ones we use in > > rustc_codegen_gcc yet). > > > > The only big question with this patch is about `inline`. We currently > > handle it as an attribute because it is more convenient for us but is > > it ok or should we create a separate function to mark a function as > > inlined? > > > > Thanks in advance for the review. > > Thanks for the patch; sorry for the delay in reviewing. > > At a high-level I think the API is OK as-is, but I have some nitpicks > with the implementation: > > [...snip...] > > > diff --git a/gcc/jit/docs/topics/types.rst b/gcc/jit/docs/topics/types.= rst > > index d8c1d15d69d..6c72c99cbd9 100644 > > --- a/gcc/jit/docs/topics/types.rst > > +++ b/gcc/jit/docs/topics/types.rst > > [...snip...] > > > +.. function:: void\ > > + gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *va= riable, > > + enum gcc_jit_fn_at= tribute attribute, > ^^ > > This got out of sync with the declaration in the header file; it should > be > enum gcc_jit_variable_attribute attribute > > [...snip...] > > > diff --git a/gcc/jit/dummy-frontend.cc b/gcc/jit/dummy-frontend.cc > > index a729086bafb..898b4d6e7f8 100644 > > --- a/gcc/jit/dummy-frontend.cc > > +++ b/gcc/jit/dummy-frontend.cc > > It's unfortunate that jit/dummy-frontend.cc has its own copy of the > material in c-common/c-attribs.cc. I glanced through this code, and it > seems that there are already various differences between the two copies > in the existing code, and the patch adds more such differences. > > Bother - but I think this part of the patch is inevitable (and OK) > given the existing state of attribute handling here. > > [...snip...] > > 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 rustcc, > right? > > [..snip...] > > > diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc > > index 0451b4df7f9..337d4ea3b95 100644 > > --- a/gcc/jit/libgccjit.cc > > +++ b/gcc/jit/libgccjit.cc > > @@ -3965,6 +3965,51 @@ gcc_jit_type_get_aligned (gcc_jit_type *type, > > return (gcc_jit_type *)type->get_aligned (alignment_in_bytes); > > } > > > > +void > > +gcc_jit_function_add_attribute (gcc_jit_function *func, > > + gcc_jit_fn_attribute attribute) > > +{ > > + RETURN_IF_FAIL (func, NULL, NULL, "NULL func"); > > + > > + func->add_attribute (attribute); > > Ideally should validate parameter "attribute" here with a > RETURN_IF_FAIL. > > > +} > > + > > +void > > +gcc_jit_function_add_string_attribute (gcc_jit_function *func, > > + gcc_jit_fn_attribute attribute, > > + const char* value) > > +{ > > + RETURN_IF_FAIL (func, NULL, NULL, "NULL func"); > > Likewise, ideally should validate parameter "attribute" here with a > RETURN_IF_FAIL. > > Can "value" be NULL? If not, then we should add a RETURN_IF_FAIL for > it here at the API boundary. > > > + > > + func->add_string_attribute (attribute, value); > > +} > > + > > +/* This function adds an attribute with multiple integer values. For = example > > + `nonnull(1, 2)`. The numbers in `values` are supposed to map how t= hey > > + should be written in C code. So for `nonnull(1, 2)`, you should pa= ss `1` > > + and `2` in `values` (and set `length` to `2`). */ > > +void > > +gcc_jit_function_add_integer_array_attribute (gcc_jit_function *func, > > + gcc_jit_fn_attribute attrib= ute, > > + const int* values, > > + size_t length) > > +{ > > + RETURN_IF_FAIL (func, NULL, NULL, "NULL func"); > > As before, ideally should validate parameter "attribute" here with a > RETURN_IF_FAIL. > > > + RETURN_IF_FAIL (values, NULL, NULL, "NULL values"); > > + > > + func->add_integer_array_attribute (attribute, values, length); > > +} > > + > > +void > > +gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *variable, > > + gcc_jit_variable_attribute attribute= , > > + const char* value) > > +{ > > + RETURN_IF_FAIL (variable, NULL, NULL, "NULL variable"); > > As before, we should validate parameters "attribute" and "value" here > with RETURN_IF_FAILs. > > We should also validate here that "variable" is indeed a variable, not > some arbitrary lvalue e.g. the address of the element of an array (or > whatever). > > > > + > > + variable->add_string_attribute (attribute, value); > > +} > > + > > [...snip...] > > > diff --git a/gcc/testsuite/jit.dg/jit.exp b/gcc/testsuite/jit.dg/jit.ex= p > > index 8bf7e51c24f..657b454a003 100644 > > --- a/gcc/testsuite/jit.dg/jit.exp > > +++ b/gcc/testsuite/jit.dg/jit.exp > > @@ -899,8 +899,41 @@ proc jit-verify-assembler-output { args } { > > pass "${asm_filename} output pattern test, ${dg-output-text}" > > verbose "Passed test for output pattern ${dg-output-text}" 3 > > } > > +} > > + > > +# Assuming that a .s file has been written out named > > +# OUTPUT_FILENAME, check that the argument doesn't match > > +# the output file. > > +proc jit-verify-assembler-output-not { args } { > > + verbose "jit-verify-assembler: $args" > > + > > + set dg-output-text [lindex $args 0] > > + verbose "dg-output-text: ${dg-output-text}" > > + > > + upvar 2 name name > > + verbose "name: $name" > > + > > + upvar 2 prog prog > > + verbose "prog: $prog" > > + set asm_filename [jit-get-output-filename $prog] > > + verbose " asm_filename: ${asm_filename}" > > > > + # Read the assembly file. > > + set f [open $asm_filename r] > > + set content [read $f] > > + close $f > > + > > + # Verify that the assembly matches the regex. > > + if { [regexp ${dg-output-text} $content] } { > > + fail "${asm_filename} output pattern test, is ${content}, should = match ${dg-output-text}" > > The wording of the "fail" message seems wrong; presumably this should > read "should not match", rather than "should match". > > > + verbose "Failed test for output pattern ${dg-output-text}" 3 > > + } else { > > + pass "${asm_filename} output pattern test, ${dg-output-text}" > > + verbose "Passed test for output pattern ${dg-output-text}" 3 > > + } > > } > > + > > + > > # Assuming that a .o file has been written out named > > # OUTPUT_FILENAME, invoke the driver to try to turn it into > > # an executable, and try to run the result. > > [...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. */ > > The above comment doesn't make sense to me; harness.h effectively sets > -O3; and -O2 is wanted by this test, right? > > I think the comment can be omitted given that the intent below is > clear. > > > +#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/testsuit= e/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. */ > > Again, this comment doesn't make sense to me, but I think it can be > removed. > > > +#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...] > > > + > > + /* if (x >>=3D 1) */ > > + /* Since gccjit doesn't (yet?) have support for `>>=3D` operator, we= will decompose it into: > > + `if (x =3D x >> 1)` */ > > I think it does (in theory, at least), via: > > gcc_jit_block_add_assignment_op > > with > > GCC_JIT_BINARY_OP_RSHIFT > > But I haven't tried it, and there's no need to update the test to make > use of it. > > [...snip...] > > > diff --git a/gcc/testsuite/jit.dg/test-noinline-attribute.c b/gcc/tests= uite/jit.dg/test-noinline-attribute.c > > new file mode 100644 > > index 00000000000..84933e60010 > > --- /dev/null > > +++ b/gcc/testsuite/jit.dg/test-noinline-attribute.c > > @@ -0,0 +1,114 @@ > > +/* { 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. */ > > Again, please lose this 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/testsu= ite/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. */ > > Likewise. > > > +#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. */ > > Likewise. > > > +#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...] > > 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. > > 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. > > Thanks again for the patch. > Dave > --000000000000d1f289060ea03db9 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_lr8g12nu0 RnJvbSBkYzI3ZjY2Mzk2YmE5ZDA1YmM4MDA3ZDg1MDk2MjBlNWFlMTRkODM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBXZWQsIDEwIEphbiAyMDI0IDE1OjIzOjM3ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBsaWJnY2NqaXQ6IEFkZCBzdXBwb3J0IGZvciBmdW5jdGlvbiBhdHRyaWJ1 dGVzIGFuZAogdmFyaWFibGUgIGF0dHJpYnV0ZXMuCgpnY2Mvaml0L0NoYW5nZUxvZzoKCgkqIGR1 bW15LWZyb250ZW5kLmNjIChoYW5kbGVfYWxpYXNfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJ KGhhbmRsZV9hbHdheXNfaW5saW5lX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVf Y29sZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUp OiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0 aW9uLgoJKGhhbmRsZV9mb3JtYXRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9u b2lubGluZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX3RhcmdldF9hdHRyaWJ1 dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX3VzZWRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9u LgoJKGhhbmRsZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVf d2Vha19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2FsaWFzX2lmdW5jX2F0dHJp YnV0ZSk6IE5ldyBmdW5jdGlvbi4KCSogaml0LXBsYXliYWNrLmNjIChmbl9hdHRyaWJ1dGVfdG9f c3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHZhcmlhYmxlX2F0dHJpYnV0ZV90b19zdHJpbmcpOiBO ZXcgZnVuY3Rpb24uCgkoZ2xvYmFsX25ld19kZWNsKTogQWRkIGF0dHJpYnV0ZXMgc3VwcG9ydC4K CShzZXRfdmFyaWFibGVfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKG5ld19nbG9iYWwpOiBB ZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQpOiBBZGQgYXR0 cmlidXRlcyBzdXBwb3J0LgoJKG5ld19sb2NhbCk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkq IGppdC1wbGF5YmFjay5oIChmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJ KHNldF92YXJpYWJsZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkqIGppdC1yZWNvcmRpbmcu Y2MgKHJlY29yZGluZzo6bHZhbHVlOjphZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKHJl Y29yZGluZzo6ZnVuY3Rpb246OmZ1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGluZzo6 ZnVuY3Rpb246OndyaXRlX3RvX2R1bXApOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKHJlY29y ZGluZzo6ZnVuY3Rpb246OmFkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5n OjpmdW5jdGlvbjo6YWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3Jk aW5nOjpmdW5jdGlvbjo6YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9u LgoJKHJlY29yZGluZzo6Z2xvYmFsOjpyZXBsYXlfaW50byk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBv cnQuCgkocmVjb3JkaW5nOjpsb2NhbDo6cmVwbGF5X2ludG8pOiBBZGQgYXR0cmlidXRlcyBzdXBw b3J0LgoJKiBsaWJnY2NqaXQuY2MgKGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSk6IE5l dyBmdW5jdGlvbi4KCShnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlKTogTmV3 IGZ1bmN0aW9uLgoJKGdjY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRl KTogTmV3IGZ1bmN0aW9uLgoJKGdjY19qaXRfbHZhbHVlX2FkZF9hdHRyaWJ1dGUpOiBOZXcgZnVu Y3Rpb24uCgkqIGxpYmdjY2ppdC5oIChlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlKTogTmV3IGVu dW0uCgkoZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdj Y19qaXRfZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZ2Nj X2ppdF9mdW5jdGlvbl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24u CgkoZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShnY2Nf aml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCSogbGliZ2Nj aml0Lm1hcDogRGVjbGFyZSBuZXcgZnVuY3Rpb25zLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6 CgoJKiBqaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmg6IEFkZCBuZXcgYXR0cmlidXRlcyB0 ZXN0cy4KCSogaml0LmRnL2ppdC5leHA6IEFkZCBgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 LW5vdGAgdGVzdCBjb21tYW5kLgoJKiBqaXQuZGcvdGVzdC1yZXN0cmljdC5jOiBOZXcgdGVzdC4K CSogaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcv dGVzdC1hbGlhcy1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWFsd2F5c19p bmxpbmUtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0 ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtY29uc3QtYXR0cmlidXRlLmM6IE5ldyB0ZXN0 LgoJKiBqaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5k Zy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC1wdXJl LWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYzog TmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LXZhcmlhYmxlLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4K CSogaml0LmRnL3Rlc3Qtd2Vhay1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgpnY2Mvaml0L0NoYW5n ZUxvZzoKCSogZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3Q6IEFkZCBkb2N1bWVudGF0aW9u IGZvciBMSUJHQ0NKSVRfQUJJXzI2LgoJKiBkb2NzL3RvcGljcy90eXBlcy5yc3Q6IEFkZCBkb2N1 bWVudGF0aW9uIGZvciBuZXcgZnVuY3Rpb25zLgoKQ28tYXV0aG9yZWQtYnk6IEFudG9uaSBCb3Vj aGVyIDxib3VhbnRvQHpvaG8uY29tPgpTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgR29tZXogPGd1 aWxsYXVtZTEuZ29tZXpAZ21haWwuY29tPgotLS0KIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0 aWJpbGl0eS5yc3QgICAgICAgICB8ICAxMiArCiBnY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJz dCAgICAgICAgICAgICAgICAgfCAgNzcgKysrCiBnY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjICAg ICAgICAgICAgICAgICAgICAgfCA1MTIgKysrKysrKysrKysrKysrKy0tCiBnY2Mvaml0L2ppdC1w bGF5YmFjay5jYyAgICAgICAgICAgICAgICAgICAgICAgfCAxNjkgKysrKystCiBnY2Mvaml0L2pp dC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKy0KIGdjYy9qaXQvaml0 LXJlY29yZGluZy5jYyAgICAgICAgICAgICAgICAgICAgICB8IDE2NiArKysrKy0KIGdjYy9qaXQv aml0LXJlY29yZGluZy5oICAgICAgICAgICAgICAgICAgICAgICB8ICAyMiArLQogZ2NjL2ppdC9s aWJnY2NqaXQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDY3ICsrKwogZ2NjL2ppdC9s aWJnY2NqaXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU1ICsrCiBnY2Mvaml0L2xp YmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmggIHwgIDMyICstCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy9qaXQuZXhwICAgICAgICAgICAgICAgICAgfCAgMzMgKysKIGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMgICB8ICA1MCArKwogLi4uL2ppdC5kZy90ZXN0 LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMgICAgIHwgMTUzICsrKysrKwogZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jICAgIHwgIDU0ICsrCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jICAgfCAxMzQgKysrKysKIC4uLi9qaXQuZGcv dGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYyAgICAgICAgICB8IDEyMSArKysrKwogZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1ub25udWxsLWF0dHJpYnV0ZS5jIHwgIDk0ICsrKysKIGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYyAgICB8IDEzNCArKysrKwogLi4uL2pp dC5kZy90ZXN0LXJlc3RyaWN0LWF0dHJpYnV0ZS5jICAgICAgICAgIHwgIDc3ICsrKwogZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC11c2VkLWF0dHJpYnV0ZS5jICAgIHwgMTEyICsrKysKIC4uLi9q aXQuZGcvdGVzdC12YXJpYWJsZS1hdHRyaWJ1dGUuYyAgICAgICAgICB8ICA0NiArKwogZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jICAgIHwgIDQxICsrCiAyMyBmaWxl cyBjaGFuZ2VkLCAyMTMyIGluc2VydGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFsd2F5c19pbmxpbmUt YXR0cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWNvbGQtYXR0cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXVzZWQtYXR0 cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZh cmlhYmxlLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGlj cy9jb21wYXRpYmlsaXR5LnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5y c3QKaW5kZXggNzA0ZGUxYjUxZWQuLmNiZjViNDE0ZDhjIDEwMDY0NAotLS0gYS9nY2Mvaml0L2Rv Y3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29t cGF0aWJpbGl0eS5yc3QKQEAgLTM3OCwzICszNzgsMTUgQEAgYWxpZ25tZW50IG9mIGEgdmFyaWFi bGU6CiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogYGBMSUJHQ0NKSVRfQUJJXzI1YGAgY292ZXJzIHRo ZSBhZGRpdGlvbiBvZgogOmZ1bmM6YGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3RgCisKKy4uIF9M SUJHQ0NKSVRfQUJJXzI2OgorCitgYExJQkdDQ0pJVF9BQklfMjZgYAorLS0tLS0tLS0tLS0tLS0t LS0tLS0KK2BgTElCR0NDSklUX0FCSV8yNmBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YgZnVuY3Rp b25zIHRvIHNldCBhdHRyaWJ1dGVzCitvbiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlczoKKworICAq IDpmdW5jOmBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19q aXRfZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19qaXRfZnVu Y3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlYAorICAqIDpmdW5jOmBnY2Nfaml0X2x2 YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZWAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3Bp Y3MvdHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggYmI1MWYw MzdiN2UuLmIxYWVkYzAzNzg3IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVz LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtNTUzLDMgKzU1Myw4 MCBAQCBSZWZsZWN0aW9uIEFQSQogICAgLi4gY29kZS1ibG9jazo6IGMKIAogICAgICAgI2lmZGVm IExJQkdDQ0pJVF9IQVZFX2djY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QKKworLi4gZnVuY3Rpb246 OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAo Z2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCisKKyAg ICAgQWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHRvIGEgZnVuY3Rpb24gYGBmdW5jYGAu CisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToKKworICAu LiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisK KyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yNmA7 IHlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJs b2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisuLiBm dW5jdGlvbjo6ICB2b2lkXAorICAgICAgICAgICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3Ry aW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRy aWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGEgc3RyaW5nIGF0 dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgZnVuY3Rpb24K KyAgICAgYGBmdW5jYGAuCisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dp bmcgY29kZToKKworICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXyAoKGFs aWFzICgieHh4IikpKQorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJ QkdDQ0pJVF9BQklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcK KworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FU VFJJQlVURVMKKworLi4gZnVuY3Rpb246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRf ZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpm dW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKKworICAgICBBZGQgYW4gYXR0cmlidXRl IGBgYXR0cmlidXRlYGAgd2l0aCBgYGxlbmd0aGBgIGludGVnZXIgdmFsdWVzIGBgdmFsdWVgYCB0 byBhCisgICAgIGZ1bmN0aW9uIGBgZnVuY2BgLiBUaGUgaW50ZWdlciB2YWx1ZXMgbXVzdCBiZSB0 aGUgc2FtZSBhcyB5b3Ugd291bGQgd3JpdGUKKyAgICAgdGhlbSBpbiBhIEMgY29kZS4KKworICAg ICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjb2RlOgorCisgIC4uIGNvZGUt YmxvY2s6OiBjCisKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9ubnVsbCAoMSwgMikpKQorCisgICBU aGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5b3Ug Y2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6 IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKworLi4gZnVuY3Rp b246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfbHZhbHVlX2FkZF9zdHJpbmdfYXR0 cmlidXRlIChnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJp YnV0ZSBhdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGFuIGF0dHJpYnV0ZSBg YGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgdmFyaWFibGUgYGB2YXJpYWJs ZWBgLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9B QklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4g Y29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMK ZGlmZiAtLWdpdCBhL2djYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgYi9nY2Mvaml0L2R1bW15LWZy b250ZW5kLmNjCmluZGV4IDIxMWYxYmU5OGZhLi5kYmVlYWNkMTdhOCAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9kdW1teS1mcm9udGVuZC5jYworKysgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjCkBA IC0yOSwzMCArMjksNDIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5o IgogI2luY2x1ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJ0 YXJnZXQuaCIKIAogI2luY2x1ZGUgPG1wZnIuaD4KIAogLyogQXR0cmlidXRlIGhhbmRsaW5nLiAg Ki8KIAotc3RhdGljIHRyZWUgaGFuZGxlX25vcmV0dXJuX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVl LCB0cmVlLCBpbnQsIGJvb2wgKik7Ci1zdGF0aWMgdHJlZSBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX2Fs aWFzX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMg dHJlZSBoYW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwg aW50LAorCQkJCQkgICAgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9jb2xkX2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVf Y29uc3RfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRp YyB0cmVlIGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwg Ym9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9mb3JtYXRfYXJnX2F0dHJpYnV0ZSAodHJlZSAq LCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfZm9ybWF0X2F0 dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBo YW5kbGVfbGVhZl9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwog c3RhdGljIHRyZWUgaGFuZGxlX21hbGxvY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwg aW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3B1cmVfYXR0cmlidXRlICh0cmVlICos IHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9ub3ZvcHNfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhh bmRsZV9ub2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICop Owogc3RhdGljIHRyZWUgaGFuZGxlX25vbm51bGxfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRy ZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFuZGxlX25v dGhyb3dfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRp YyB0cmVlIGhhbmRsZV9zZW50aW5lbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50 LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUgKHRy ZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3RyYW5z YWN0aW9uX3B1cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsK LXN0YXRpYyB0cmVlIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVl LCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfbm92b3BzX2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVf cGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLAog CQkJCQkJICAgICAgIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX3B1 cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0 cmVlIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBp bnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfc2VudGluZWxfYXR0cmlidXRlICh0cmVl ICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV90YXJnZXRf YXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVl IGhhbmRsZV90cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBp bnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdHlwZV9nZW5lcmljX2F0dHJpYnV0ZSAo dHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdXNl ZF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRy ZWUgaGFuZGxlX3Zpc2liaWxpdHlfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwK KwkJCQkJIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfd2Vha19hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopIDsKIAotc3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1h dF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRy ZWUgaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29s ICopOwotc3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlICh0cmVlICosIHRy ZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUgKHRy ZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogCiAvKiBIZWxwZXIgdG8gZGVmaW5lIGF0 dHJpYnV0ZSBleGNsdXNpb25zLiAgKi8KICNkZWZpbmUgQVRUUl9FWENMKG5hbWUsIGZ1bmN0aW9u LCB0eXBlLCB2YXJpYWJsZSkJXApAQCAtNjEsNyArNzMsNiBAQCBzdGF0aWMgdHJlZSBoYW5kbGVf Zm9ybWF0X2FyZ19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwog LyogRGVmaW5lIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggb25l IGFub3RoZXIuICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYzo6ZXhjbHVz aW9ucyBhdHRyX25vcmV0dXJuX2V4Y2x1c2lvbnNbXSA9CiB7Ci0gIEFUVFJfRVhDTCAoIm5vcmV0 dXJuIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFUVFJfRVhDTCAoImFsbG9jX2FsaWduIiwgdHJ1 ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFUVFJfRVhDTCAoImFsbG9jX3NpemUiLCB0cnVlLCB0cnVlLCB0 cnVlKSwKICAgQVRUUl9FWENMICgiY29uc3QiLCB0cnVlLCB0cnVlLCB0cnVlKSwKQEAgLTc4LDU3 ICs4OSwxMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYzo6ZXhjbHVzaW9u cyBhdHRyX3JldHVybnNfdHdpY2VfZXhjbHVzaW9uc1tdID0KICAgQVRUUl9FWENMIChOVUxMLCBm YWxzZSwgZmFsc2UsIGZhbHNlKSwKIH07CiAKKy8qIEV4Y2x1c2lvbnMgdGhhdCBhcHBseSB0byBh dHRyaWJ1dGUgYWxsb2NfYWxpZ24sIGFsbG9jX3NpemUsIGFuZCBtYWxsb2MuICAqLworc3RhdGlj IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYzo6ZXhjbHVzaW9ucyBhdHRyX2FsbG9jX2V4Y2x1 c2lvbnNbXSA9Cit7CisgIEFUVFJfRVhDTCAoImNvbnN0IiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisg IEFUVFJfRVhDTCAoIm5vcmV0dXJuIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAo InB1cmUiLCB0cnVlLCB0cnVlLCB0cnVlKSwKKyAgQVRUUl9FWENMIChOVUxMLCBmYWxzZSwgZmFs c2UsIGZhbHNlKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4 Y2x1c2lvbnMgYXR0cl9jb25zdF9wdXJlX2V4Y2x1c2lvbnNbXSA9CiB7CiAgIEFUVFJfRVhDTCAo ImNvbnN0IiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoImFsbG9jX2FsaWduIiwg dHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoImFsbG9jX3NpemUiLCB0cnVlLCB0cnVl LCB0cnVlKSwKKyAgQVRUUl9FWENMICgibWFsbG9jIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFU VFJfRVhDTCAoIm5vcmV0dXJuIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgIEFUVFJfRVhDTCAoInB1 cmUiLCB0cnVlLCB0cnVlLCB0cnVlKSwKICAgQVRUUl9FWENMIChOVUxMLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYzo6ZXhjbHVz aW9ucyBhdHRyX2Fsd2F5c19pbmxpbmVfZXhjbHVzaW9uc1tdID0KK3sKKyAgQVRUUl9FWENMICgi bm9pbmxpbmUiLCB0cnVlLCB0cnVlLCB0cnVlKSwKKyAgQVRUUl9FWENMICgidGFyZ2V0X2Nsb25l cyIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKE5VTEwsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpLAorfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYzo6ZXhjbHVz aW9ucyBhdHRyX2NvbGRfaG90X2V4Y2x1c2lvbnNbXSA9Cit7CisgIEFUVFJfRVhDTCAoImNvbGQi LCB0cnVlLCB0cnVlLCB0cnVlKSwKKyAgQVRUUl9FWENMICgiaG90IiwgdHJ1ZSwgdHJ1ZSwgdHJ1 ZSksCisgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9ub2lubGluZV9l eGNsdXNpb25zW10gPQoreworICBBVFRSX0VYQ0wgKCJhbHdheXNfaW5saW5lIiwgdHJ1ZSwgdHJ1 ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoImdudV9pbmxpbmUiLCB0cnVlLCB0cnVlLCB0cnVlKSwK KyAgQVRUUl9FWENMIChOVUxMLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl90YXJnZXRfZXhjbHVz aW9uc1tdID0KK3sKKyAgQVRUUl9FWENMICgidGFyZ2V0X2Nsb25lcyIsIFRBUkdFVF9IQVNfRk1W X1RBUkdFVF9BVFRSSUJVVEUsCisgICAgICAgICAgICAgVEFSR0VUX0hBU19GTVZfVEFSR0VUX0FU VFJJQlVURSwgVEFSR0VUX0hBU19GTVZfVEFSR0VUX0FUVFJJQlVURSksCisgIEFUVFJfRVhDTCAo TlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSksCit9OworCiAvKiBUYWJsZSBvZiBtYWNoaW5lLWlu ZGVwZW5kZW50IGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGluIGxpYmdjY2ppdC4gICovCiBzdGF0aWMg Y29uc3QgYXR0cmlidXRlX3NwZWMgaml0X2dudV9hdHRyaWJ1dGVzW10gPQogewogICAvKiB7IG5h bWUsIG1pbl9sZW4sIG1heF9sZW4sIGRlY2xfcmVxLCB0eXBlX3JlcSwgZm5fdHlwZV9yZXEsCiAg ICAgICAgYWZmZWN0c190eXBlX2lkZW50aXR5LCBoYW5kbGVyLCBleGNsdWRlIH0gKi8KLSAgeyAi bm9yZXR1cm4iLCAgICAgICAgICAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNl LAotCQkJICAgICAgaGFuZGxlX25vcmV0dXJuX2F0dHJpYnV0ZSwKLQkJCSAgICAgIGF0dHJfbm9y ZXR1cm5fZXhjbHVzaW9ucyB9LAotICB7ICJsZWFmIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxz ZSwgZmFsc2UsIGZhbHNlLAotCQkJICAgICAgaGFuZGxlX2xlYWZfYXR0cmlidXRlLCBOVUxMIH0s CisgIHsgImFsaWFzIiwJCSAgICAgIDEsIDEsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAor CQkJICAgICAgaGFuZGxlX2FsaWFzX2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7ICJhbHdheXNfaW5s aW5lIiwJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAgICBo YW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUsCisJCQkgICAgICBhdHRyX2Fsd2F5c19pbmxp bmVfZXhjbHVzaW9ucyB9LAorICB7ICJjb2xkIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwg ZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX2NvbGRfYXR0cmlidXRlLAorCQkJICAgICAg YXR0cl9jb2xkX2hvdF9leGNsdXNpb25zIH0sCiAgIC8qIFRoZSBzYW1lIGNvbW1lbnRzIGFzIGZv ciBub3JldHVybiBhdHRyaWJ1dGVzIGFwcGx5IHRvIGNvbnN0IG9uZXMuICAqLwotICB7ICJjb25z dCIsICAgICAgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisg IHsgImNvbnN0IiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJ ICAgICAgaGFuZGxlX2NvbnN0X2F0dHJpYnV0ZSwKIAkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9l eGNsdXNpb25zIH0sCi0gIHsgIm1hbGxvYyIsICAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9tYWxsb2NfYXR0cmlidXRlLCBO VUxMIH0sCi0gIHsgInB1cmUiLCAgICAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2Us IGZhbHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9wdXJlX2F0dHJpYnV0ZSwKLQkJCSAgICAg IGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25zIH0sCi0gIHsgIm5vIHZvcHMiLCAgICAgICAgICAg ICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAiZm4gc3BlYyIsCQkg ICAgICAxLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfZm5z cGVjX2F0dHJpYnV0ZSwgTlVMTCB9LAorCisgIHsgImxlYWYiLAkJICAgICAgMCwgMCwgdHJ1ZSwg IGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUsIE5V TEwgfSwKKyAgeyAibWFsbG9jIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZh bHNlLAorCQkJICAgICAgaGFuZGxlX21hbGxvY19hdHRyaWJ1dGUsIGF0dHJfYWxsb2NfZXhjbHVz aW9ucyB9LAorICB7ICJub3JldHVybiIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNl LCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUsCisJCQkgICAgICBh dHRyX25vcmV0dXJuX2V4Y2x1c2lvbnMgfSwKKyAgeyAibm8gdm9wcyIsCQkgICAgICAwLCAwLCB0 cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3ZvcHNfYXR0cmli dXRlLCBOVUxMIH0sCi0gIHsgIm5vbm51bGwiLCAgICAgICAgICAgICAgICAwLCAtMSwgZmFsc2Us IHRydWUsIHRydWUsIGZhbHNlLAorICB7ICJub2lubGluZSIsCQkgICAgICAwLCAwLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUs CisJCQkgICAgICBhdHRyX25vaW5saW5lX2V4Y2x1c2lvbnMgfSwKKyAgeyAibm9ubnVsbCIsCQkg ICAgICAwLCAtMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX25v bm51bGxfYXR0cmlidXRlLCBOVUxMIH0sCi0gIHsgIm5vdGhyb3ciLCAgICAgICAgICAgICAgICAw LCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAibm90aHJvdyIsCQkgICAgICAw LCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3Rocm93 X2F0dHJpYnV0ZSwgTlVMTCB9LAogICB7ICJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnkiLCAxLCAy LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3BhdGNoYWJsZV9m dW5jdGlvbl9lbnRyeV9hdHRyaWJ1dGUsCiAJCQkgICAgICBOVUxMIH0sCi0gIHsgInJldHVybnNf dHdpY2UiLCAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAi cHVyZSIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAg IGhhbmRsZV9wdXJlX2F0dHJpYnV0ZSwKKwkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9leGNsdXNp b25zIH0sCisgIHsgInJldHVybnNfdHdpY2UiLAkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZh bHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSwKIAkJ CSAgICAgIGF0dHJfcmV0dXJuc190d2ljZV9leGNsdXNpb25zIH0sCi0gIHsgInNlbnRpbmVsIiwg ICAgICAgICAgICAgICAwLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisgIHsgInNlbnRp bmVsIiwJCSAgICAgIDAsIDEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhh bmRsZV9zZW50aW5lbF9hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAidHlwZSBnZW5lcmljIiwgICAg ICAgICAgIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKKyAgeyAidGFyZ2V0IiwJCSAg ICAgIDEsIC0xLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3Rh cmdldF9hdHRyaWJ1dGUsIGF0dHJfdGFyZ2V0X2V4Y2x1c2lvbnMgfSwKKyAgeyAidHlwZSBnZW5l cmljIiwJICAgICAgMCwgMCwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFu ZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAiZm4gc3BlYyIsCSAJICAg ICAgMSwgMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAotCQkJICAgICAgaGFuZGxlX2Zuc3Bl Y19hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAidHJhbnNhY3Rpb25fcHVyZSIsCSAgICAgIDAsIDAs IGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV90cmFuc2FjdGlvbl9w dXJlX2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7ICJ1c2VkIiwgICAgICAgICAwLCAwLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgIGhhbmRsZV91c2VkX2F0dHJpYnV0ZSwg TlVMTCB9LAorICB7ICJ2aXNpYmlsaXR5IiwgICAgICAgMSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsCisgICAgICAgICAgICBoYW5kbGVfdmlzaWJpbGl0eV9hdHRyaWJ1dGUsIE5VTEwg fSwKKyAgeyAid2VhayIsICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2Us CisgICAgICAgICAgICBoYW5kbGVfd2Vha19hdHRyaWJ1dGUsIE5VTEwgfSwKICAgLyogRm9yIGlu dGVybmFsIHVzZSBvbmx5LiAgVGhlIGxlYWRpbmcgJyonIGJvdGggcHJldmVudHMgaXRzIHVzYWdl IGluCiAgICAgIHNvdXJjZSBjb2RlIGFuZCBzaWduYWxzIHRoYXQgaXQgbWF5IGJlIG92ZXJyaWRk ZW4gYnkgbWFjaGluZSB0YWJsZXMuICAqLwogICB7ICIqdG0gcmVncGFybSIsICAgICAgICAgICAg MCwgMCwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAotCQkJICAgICAgaWdub3JlX2F0dHJpYnV0 ZSwgTlVMTCB9CisJCQkgICAgICBpZ25vcmVfYXR0cmlidXRlLCBOVUxMIH0sCiB9OwogCiBzdGF0 aWMgY29uc3Qgc2NvcGVkX2F0dHJpYnV0ZV9zcGVjcyBqaXRfZ251X2F0dHJpYnV0ZV90YWJsZSA9 CkBAIC0xNDMsNyArMjE0LDcgQEAgc3RhdGljIGNvbnN0IGF0dHJpYnV0ZV9zcGVjIGppdF9mb3Jt YXRfYXR0cmlidXRlc1tdID0KIHsKICAgLyogeyBuYW1lLCBtaW5fbGVuLCBtYXhfbGVuLCBkZWNs X3JlcSwgdHlwZV9yZXEsIGZuX3R5cGVfcmVxLAogICAgICAgIGFmZmVjdHNfdHlwZV9pZGVudGl0 eSwgaGFuZGxlciwgZXhjbHVkZSB9ICovCi0gIHsgImZvcm1hdCIsICAgICAgICAgICAgICAgICAz LCAzLCBmYWxzZSwgdHJ1ZSwgIHRydWUsIGZhbHNlLAorICB7ICJmb3JtYXQiLAkJICAgICAgMywg MywgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9mb3JtYXRfYXR0 cmlidXRlLCBOVUxMIH0sCiAgIHsgImZvcm1hdF9hcmciLCAgICAgICAgICAgICAxLCAxLCBmYWxz ZSwgdHJ1ZSwgIHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmli dXRlLCBOVUxMIH0KQEAgLTIxMiwxNCArMjgzLDkgQEAgaGFuZGxlX2xlYWZfYXR0cmlidXRlICh0 cmVlICpub2RlLCB0cmVlIG5hbWUsCiAgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4g ICovCiAKIHN0YXRpYyB0cmVlCi1oYW5kbGVfY29uc3RfYXR0cmlidXRlICh0cmVlICpub2RlLCB0 cmVlIEFSR19VTlVTRUQgKG5hbWUpLAotCQkJdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwgaW50IEFS R19VTlVTRUQgKGZsYWdzKSwKLQkJCWJvb2wgKiBBUkdfVU5VU0VEIChub19hZGRfYXR0cnMpKQor aGFuZGxlX2NvbnN0X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIEFSR19V TlVTRUQgKGFyZ3MpLAorCQkJaW50IEFSR19VTlVTRUQgKGZsYWdzKSwgYm9vbCAqbm9fYWRkX2F0 dHJzKQogewotICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgIT0gRlVOQ1RJT05fREVDTAotICAgICAg fHwgIWZuZGVjbF9idWlsdF9pbl9wICgqbm9kZSkpCi0gICAgaW5mb3JtIChVTktOT1dOX0xPQ0FU SU9OLCAiJXM6JXM6ICVFOiAlRSIsIF9fRklMRV9fLCBfX2Z1bmNfXywgKm5vZGUsIG5hbWUpOwot CiAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoKm5vZGUpOwogCiAgIC8qIFNlZSBGSVhNRSBjb21t ZW50IG9uIG5vcmV0dXJuIGluIGNfY29tbW9uX2F0dHJpYnV0ZV90YWJsZS4gICovCkBAIC0yMjgs MTEgKzI5NCwxNiBAQCBoYW5kbGVfY29uc3RfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIEFS R19VTlVTRUQgKG5hbWUpLAogICBlbHNlIGlmIChUUkVFX0NPREUgKHR5cGUpID09IFBPSU5URVJf VFlQRQogCSAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0eXBlKSkgPT0gRlVOQ1RJT05fVFlQ RSkKICAgICBUUkVFX1RZUEUgKCpub2RlKQotICAgICAgPSBidWlsZF9wb2ludGVyX3R5cGUKLQko YnVpbGRfdHlwZV92YXJpYW50IChUUkVFX1RZUEUgKHR5cGUpLCAxLAotCQkJICAgICBUUkVFX1RI SVNfVk9MQVRJTEUgKFRSRUVfVFlQRSAodHlwZSkpKSk7CisgICAgICA9IChidWlsZF9xdWFsaWZp ZWRfdHlwZQorCSAoYnVpbGRfcG9pbnRlcl90eXBlCisJICAoYnVpbGRfdHlwZV92YXJpYW50IChU UkVFX1RZUEUgKHR5cGUpLCAxLAorCQkJICAgICAgIFRSRUVfVEhJU19WT0xBVElMRSAoVFJFRV9U WVBFICh0eXBlKSkpKSwKKwkgIFRZUEVfUVVBTFMgKHR5cGUpKSk7CiAgIGVsc2UKLSAgICBnY2Nf dW5yZWFjaGFibGUgKCk7CisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAi JXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1 ZTsKKyAgICB9CiAKICAgcmV0dXJuIE5VTExfVFJFRTsKIH0KQEAgLTQ5NCw2ICs1NjUsMzU3IEBA IGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICpub2RlIEFUVFJJQlVURV9VTlVTRUQsIHRy ZWUgQVJHX1VOVVNFRCAobmFtZSksCiAgIHJldHVybiBOVUxMX1RSRUU7CiB9CiAKKy8qIEhhbmRs ZSBhbiAidmlzaWJpbGl0eSIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBh dHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV92aXNpYmls aXR5X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCisJCQkgICAg IGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCQkgICAgIGJvb2wgKkFSR19VTlVTRUQgKG5vX2Fk ZF9hdHRycykpCit7CisgIHRyZWUgZGVjbCA9ICpub2RlOworICB0cmVlIGlkID0gVFJFRV9WQUxV RSAoYXJncyk7CisgIGVudW0gc3ltYm9sX3Zpc2liaWxpdHkgdmlzOworCisgIGlmIChUWVBFX1Ag KCpub2RlKSkKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgPT0gRU5VTUVSQUxf VFlQRSkKKwkvKiBPSy4gICovOworICAgICAgZWxzZSBpZiAoIVJFQ09SRF9PUl9VTklPTl9UWVBF X1AgKCpub2RlKSkKKwl7CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmli dXRlIGlnbm9yZWQgb24gbm9uLWNsYXNzIHR5cGVzIiwKKwkJICAgbmFtZSk7CisJICByZXR1cm4g TlVMTF9UUkVFOworCX0KKyAgICAgIGVsc2UgaWYgKFRZUEVfRklFTERTICgqbm9kZSkpCisJewor CSAgZXJyb3IgKCIlcUUgYXR0cmlidXRlIGlnbm9yZWQgYmVjYXVzZSAlcVQgaXMgYWxyZWFkeSBk ZWZpbmVkIiwKKwkJIG5hbWUsICpub2RlKTsKKwkgIHJldHVybiBOVUxMX1RSRUU7CisJfQorICAg IH0KKyAgZWxzZSBpZiAoZGVjbF9mdW5jdGlvbl9jb250ZXh0IChkZWNsKSAhPSAwIHx8ICFUUkVF X1BVQkxJQyAoZGVjbCkpCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAi JXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICByZXR1cm4gTlVMTF9UUkVFOwor ICAgIH0KKworICBpZiAoVFJFRV9DT0RFIChpZCkgIT0gU1RSSU5HX0NTVCkKKyAgICB7CisgICAg ICBlcnJvciAoInZpc2liaWxpdHkgYXJndW1lbnQgbm90IGEgc3RyaW5nIik7CisgICAgICByZXR1 cm4gTlVMTF9UUkVFOworICAgIH0KKworICAvKiAgSWYgdGhpcyBpcyBhIHR5cGUsIHNldCB0aGUg dmlzaWJpbGl0eSBvbiB0aGUgdHlwZSBkZWNsLiAgKi8KKyAgaWYgKFRZUEVfUCAoZGVjbCkpCisg ICAgeworICAgICAgZGVjbCA9IFRZUEVfTkFNRSAoZGVjbCk7CisgICAgICBpZiAoIWRlY2wpCisJ cmV0dXJuIE5VTExfVFJFRTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IElERU5USUZJ RVJfTk9ERSkKKwl7CisJICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0 ZSBpZ25vcmVkIG9uIHR5cGVzIiwKKwkJICAgIG5hbWUpOworCSAgIHJldHVybiBOVUxMX1RSRUU7 CisJfQorICAgIH0KKworICBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lOVEVSIChpZCksICJk ZWZhdWx0IikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZX0RFRkFVTFQ7CisgIGVsc2UgaWYg KHN0cmNtcCAoVFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpLCAiaW50ZXJuYWwiKSA9PSAwKQorICAg IHZpcyA9IFZJU0lCSUxJVFlfSU5URVJOQUw7CisgIGVsc2UgaWYgKHN0cmNtcCAoVFJFRV9TVFJJ TkdfUE9JTlRFUiAoaWQpLCAiaGlkZGVuIikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZX0hJ RERFTjsKKyAgZWxzZSBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lOVEVSIChpZCksICJwcm90 ZWN0ZWQiKSA9PSAwKQorICAgIHZpcyA9IFZJU0lCSUxJVFlfUFJPVEVDVEVEOworICBlbHNlCisg ICAgeworICAgICAgZXJyb3IgKCJhdHRyaWJ1dGUgJXFFIGFyZ3VtZW50IG11c3QgYmUgb25lIG9m ICVxcywgJXFzLCAlcXMsIG9yICVxcyIsCisJICAgICBuYW1lLCAiZGVmYXVsdCIsICJoaWRkZW4i LCAicHJvdGVjdGVkIiwgImludGVybmFsIik7CisgICAgICB2aXMgPSBWSVNJQklMSVRZX0RFRkFV TFQ7CisgICAgfQorCisgIGlmIChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChkZWNsKQorICAg ICAgJiYgdmlzICE9IERFQ0xfVklTSUJJTElUWSAoZGVjbCkpCisgICAgeworICAgICAgdHJlZSBh dHRyaWJ1dGVzID0gKFRZUEVfUCAoKm5vZGUpCisJCQkgPyBUWVBFX0FUVFJJQlVURVMgKCpub2Rl KQorCQkJIDogREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisgICAgICBpZiAobG9va3VwX2F0dHJp YnV0ZSAoInZpc2liaWxpdHkiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCByZWRlY2xhcmVk IHdpdGggZGlmZmVyZW50IHZpc2liaWxpdHkiLCBkZWNsKTsKKyAgICAgIGVsc2UgaWYgKFRBUkdF VF9ETExJTVBPUlRfREVDTF9BVFRSSUJVVEVTCisJICAgICAgICYmIGxvb2t1cF9hdHRyaWJ1dGUg KCJkbGxpbXBvcnQiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCB3YXMgZGVjbGFyZWQgJXFz IHdoaWNoIGltcGxpZXMgZGVmYXVsdCB2aXNpYmlsaXR5IiwKKwkgICAgICAgZGVjbCwgImRsbGlt cG9ydCIpOworICAgICAgZWxzZSBpZiAoVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FUVFJJQlVURVMK KwkgICAgICAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoImRsbGV4cG9ydCIsIGF0dHJpYnV0ZXMpKQor CWVycm9yICgiJXFEIHdhcyBkZWNsYXJlZCAlcXMgd2hpY2ggaW1wbGllcyBkZWZhdWx0IHZpc2li aWxpdHkiLAorCSAgICAgICBkZWNsLCAiZGxsZXhwb3J0Iik7CisgICAgfQorCisgIERFQ0xfVklT SUJJTElUWSAoZGVjbCkgPSB2aXM7CisgIERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKGRlY2wp ID0gMTsKKworICAvKiBHbyBhaGVhZCBhbmQgYXR0YWNoIHRoZSBhdHRyaWJ1dGUgdG8gdGhlIG5v ZGUgYXMgd2VsbC4gIFRoaXMgaXMgbmVlZGVkCisgICAgIHNvIHdlIGNhbiBkZXRlcm1pbmUgd2hl dGhlciB3ZSBoYXZlIFZJU0lCSUxJVFlfREVGQVVMVCBiZWNhdXNlIHRoZQorICAgICB2aXNpYmls aXR5IHdhcyBub3Qgc3BlY2lmaWVkLCBvciBiZWNhdXNlIGl0IHdhcyBleHBsaWNpdGx5IG92ZXJy aWRkZW4KKyAgICAgZnJvbSB0aGUgY29udGFpbmluZyBzY29wZS4gICovCisKKyAgcmV0dXJuIE5V TExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgImFsd2F5c19pbmxpbmUiIGF0dHJpYnV0ZTsgYXJn dW1lbnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCisKK3N0 YXRpYyB0cmVlCitoYW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRy ZWUgbmFtZSwKKwkJCQl0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkJCWludCBBUkdfVU5VU0VE IChmbGFncyksCisJCQkJYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICBpZiAoVFJFRV9DT0RFICgq bm9kZSkgPT0gRlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIGF0dHJpYnV0 ZSBhbmQgbWFyayBpdCBmb3IgZGlzcmVnYXJkaW5nIGlubGluZQorCSBsaW1pdHMuICAqLworICAg ICAgREVDTF9ESVNSRUdBUkRfSU5MSU5FX0xJTUlUUyAoKm5vZGUpID0gMTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRl IGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAgIH0KKwor ICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBIYW5kbGUgYSAiY29sZCIgYW5kIGF0dHJpYnV0 ZTsgYXJndW1lbnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICov CisKK3N0YXRpYyB0cmVlCitoYW5kbGVfY29sZF9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUg bmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJICAgICAgIGludCBBUkdfVU5VU0VEIChm bGFncyksIGJvb2wgKm5vX2FkZF9hdHRycykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09 IEZVTkNUSU9OX0RFQ0wKKyAgICAgIHx8IFRSRUVfQ09ERSAoKm5vZGUpID09IExBQkVMX0RFQ0wp CisgICAgeworICAgICAgLyogQXR0cmlidXRlIGNvbGQgcHJvY2Vzc2luZyBpcyBkb25lIGxhdGVy IHdpdGggbG9va3VwX2F0dHJpYnV0ZS4gICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAg d2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7 CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJF RTsKK30KKworLyogSGFuZGxlIGEgIm5vaW5saW5lIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBp bgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJlZQor aGFuZGxlX25vaW5saW5lX2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLAorCQkJICAg dHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJCSAgIGludCBBUkdfVU5VU0VEIChmbGFncyksIGJv b2wgKm5vX2FkZF9hdHRycykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09IEZVTkNUSU9O X0RFQ0wpCisgICAgREVDTF9VTklOTElOQUJMRSAoKm5vZGUpID0gMTsKKyAgZWxzZQorICAgIHsK KyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIs IG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorCisgIHJldHVybiBO VUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJ3ZWFrIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBh cyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJl ZQoraGFuZGxlX3dlYWtfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsCisJCSAgICAg ICB0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkgICAgICAgaW50IEFSR19VTlVTRUQgKGZsYWdz KSwKKwkJICAgICAgIGJvb2wgKiBBUkdfVU5VU0VEIChub19hZGRfYXR0cnMpKQoreworICBpZiAo VFJFRV9DT0RFICgqbm9kZSkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVDTF9ERUNMQVJF RF9JTkxJTkVfUCAoKm5vZGUpKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRl cywgImlubGluZSBmdW5jdGlvbiAlcStEIGRlY2xhcmVkIHdlYWsiLCAqbm9kZSk7CisgICAgICAq bm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKGxvb2t1cF9hdHRyaWJ1dGUg KCJpZnVuYyIsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKyAgICB7CisgICAgICBlcnJvciAo ImluZGlyZWN0IGZ1bmN0aW9uICVxK0QgY2Fubm90IGJlIGRlY2xhcmVkIHdlYWsiLCAqbm9kZSk7 CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMX1RSRUU7Cisg ICAgfQorICBlbHNlIGlmIChWQVJfT1JfRlVOQ1RJT05fREVDTF9QICgqbm9kZSkpCisgICAgZGVj bGFyZV93ZWFrICgqbm9kZSk7CisgIGVsc2UKKyAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMs ICIlcUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKworICByZXR1cm4gTlVMTF9UUkVFOwor fQorCisvKiBIYW5kbGUgYSAidGFyZ2V0IiBhdHRyaWJ1dGUuICAqLworCitzdGF0aWMgdHJlZQor aGFuZGxlX3RhcmdldF9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHJlZSBhcmdz LCBpbnQgZmxhZ3MsCisJCQkgYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICAvKiBFbnN1cmUgd2Ug aGF2ZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUp ICE9IEZVTkNUSU9OX0RFQ0wpCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVz LCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0g dHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCEgdGFyZ2V0bS50YXJnZXRfb3B0aW9uLnZhbGlkX2F0 dHJpYnV0ZV9wICgqbm9kZSwgbmFtZSwgYXJncywKKwkJCQkJCSAgICAgIGZsYWdzKSkKKyAgICAq bm9fYWRkX2F0dHJzID0gdHJ1ZTsKKworICAvKiBDaGVjayB0aGF0IHRoZXJlJ3Mgbm8gZW1wdHkg c3RyaW5nIGluIHZhbHVlcyBvZiB0aGUgYXR0cmlidXRlLiAgKi8KKyAgZm9yICh0cmVlIHQgPSBh cmdzOyB0ICE9IE5VTExfVFJFRTsgdCA9IFRSRUVfQ0hBSU4gKHQpKQorICAgIHsKKyAgICAgIHRy ZWUgdmFsdWUgPSBUUkVFX1ZBTFVFICh0KTsKKyAgICAgIGlmIChUUkVFX0NPREUgKHZhbHVlKSA9 PSBTVFJJTkdfQ1NUCisJICAmJiBUUkVFX1NUUklOR19MRU5HVEggKHZhbHVlKSA9PSAxCisJICAm JiBUUkVFX1NUUklOR19QT0lOVEVSICh2YWx1ZSlbMF0gPT0gJ1wwJykKKwl7CisJICB3YXJuaW5n IChPUFRfV2F0dHJpYnV0ZXMsICJlbXB0eSBzdHJpbmcgaW4gYXR0cmlidXRlICU8dGFyZ2V0JT4i KTsKKwkgICpub19hZGRfYXR0cnMgPSB0cnVlOworCX0KKyAgICB9CisKKyAgcmV0dXJuIE5VTExf VFJFRTsKK30KKworLyogSGFuZGxlIGEgInVzZWQiIGF0dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGlu CisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCisKK3N0YXRpYyB0cmVlCito YW5kbGVfdXNlZF9hdHRyaWJ1dGUgKHRyZWUgKnBub2RlLCB0cmVlIG5hbWUsIHRyZWUgQVJHX1VO VVNFRCAoYXJncyksCisJCSAgICAgICBpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19h ZGRfYXR0cnMpCit7CisgIHRyZWUgbm9kZSA9ICpwbm9kZTsKKworICBpZiAoVFJFRV9DT0RFIChu b2RlKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICB8fCAoVkFSX1AgKG5vZGUpICYmIFRSRUVfU1RB VElDIChub2RlKSkKKyAgICAgIHx8IChUUkVFX0NPREUgKG5vZGUpID09IFRZUEVfREVDTCkpCisg ICAgeworICAgICAgVFJFRV9VU0VEIChub2RlKSA9IDE7CisgICAgICBERUNMX1BSRVNFUlZFX1Ag KG5vZGUpID0gMTsKKyAgICAgIGlmIChWQVJfUCAobm9kZSkpCisJREVDTF9SRUFEX1AgKG5vZGUp ID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0 ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMg PSB0cnVlOworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBIYW5kbGUgYW4g ImFsaWFzIiBvciAiaWZ1bmMiIGF0dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGluCisgICBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWMuaGFuZGxlciwgZXhjZXB0IHRoYXQgSVNfQUxJQVMgdGVsbHMgdXMKKyAg IHdoZXRoZXIgdGhpcyBpcyBhbiBhbGlhcyBhcyBvcHBvc2VkIHRvIGlmdW5jIGF0dHJpYnV0ZS4g ICovCisKK3N0YXRpYyB0cmVlCitoYW5kbGVfYWxpYXNfaWZ1bmNfYXR0cmlidXRlIChib29sIGlz X2FsaWFzLCB0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgYXJncywKKwkJCSAgICAgIGJvb2wg Km5vX2FkZF9hdHRycykKK3sKKyAgdHJlZSBkZWNsID0gKm5vZGU7CisKKyAgaWYgKFRSRUVfQ09E RSAoZGVjbCkgIT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgKCFpc19hbGlhcyB8fCAhVkFSX1Ag KGRlY2wpKSkKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0 cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAg IH0KKyAgZWxzZSBpZiAoKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTCAmJiBERUNM X0lOSVRJQUwgKGRlY2wpKQorICAgICAgfHwgKFRSRUVfQ09ERSAoZGVjbCkgIT0gRlVOQ1RJT05f REVDTAorCSAgJiYgVFJFRV9QVUJMSUMgKGRlY2wpICYmICFERUNMX0VYVEVSTkFMIChkZWNsKSkK KyAgICAgIC8qIEEgc3RhdGljIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlzIGFsd2F5cyBhIHRlbnRh dGl2ZSBkZWZpbml0aW9uLAorCSBidXQgdGhlIGFsaWFzIGlzIGEgbm9uLXRlbnRhdGl2ZSBkZWZp bml0aW9uIHdoaWNoIG92ZXJyaWRlcy4gICovCisgICAgICB8fCAoVFJFRV9DT0RFIChkZWNsKSAh PSBGVU5DVElPTl9ERUNMCisJICAmJiAhIFRSRUVfUFVCTElDIChkZWNsKSAmJiBERUNMX0lOSVRJ QUwgKGRlY2wpKSkKKyAgICB7CisgICAgICBlcnJvciAoIiVxK0QgZGVmaW5lZCBib3RoIG5vcm1h bGx5IGFuZCBhcyAlcUUgYXR0cmlidXRlIiwgZGVjbCwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0 dHJzID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMX1RSRUU7CisgICAgfQorICBlbHNlIGlmICgh aXNfYWxpYXMKKwkgICAmJiAobG9va3VwX2F0dHJpYnV0ZSAoIndlYWsiLCBERUNMX0FUVFJJQlVU RVMgKGRlY2wpKQorCSAgICAgICB8fCBsb29rdXBfYXR0cmlidXRlICgid2Vha3JlZiIsIERFQ0xf QVRUUklCVVRFUyAoZGVjbCkpKSkKKyAgICB7CisgICAgICBlcnJvciAoIndlYWsgJXErRCBjYW5u b3QgYmUgZGVmaW5lZCAlcUUiLCBkZWNsLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0 cnVlOworICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisKKyAgLyogTm90ZSB0aGF0IHRo ZSB2ZXJ5IGZpcnN0IHRpbWUgd2UgcHJvY2VzcyBhIG5lc3RlZCBkZWNsYXJhdGlvbiwKKyAgICAg ZGVjbF9mdW5jdGlvbl9jb250ZXh0IHdpbGwgbm90IGJlIHNldC4gIEluZGVlZCwgKndvdWxkKiBu ZXZlcgorICAgICBiZSBzZXQgZXhjZXB0IGZvciB0aGUgREVDTF9JTklUSUFML0RFQ0xfRVhURVJO QUwgZnJvYmJlcnkgdGhhdAorICAgICB3ZSBkbyBiZWxvdy4gIEFmdGVyIHN1Y2ggZnJvYmJlcnks IHB1c2hkZWNsIHdvdWxkIHNldCB0aGUgY29udGV4dC4KKyAgICAgSW4gYW55IGNhc2UsIHRoaXMg aXMgbmV2ZXIgd2hhdCB3ZSB3YW50LiAgKi8KKyAgZWxzZSBpZiAoZGVjbF9mdW5jdGlvbl9jb250 ZXh0IChkZWNsKSA9PSAwICYmIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9PSBOVUxMKQorICAgIHsK KyAgICAgIHRyZWUgaWQ7CisKKyAgICAgIGlkID0gVFJFRV9WQUxVRSAoYXJncyk7CisgICAgICBp ZiAoVFJFRV9DT0RFIChpZCkgIT0gU1RSSU5HX0NTVCkKKwl7CisJICBlcnJvciAoImF0dHJpYnV0 ZSAlcUUgYXJndW1lbnQgbm90IGEgc3RyaW5nIiwgbmFtZSk7CisJICAqbm9fYWRkX2F0dHJzID0g dHJ1ZTsKKwkgIHJldHVybiBOVUxMX1RSRUU7CisJfQorICAgICAgaWQgPSBnZXRfaWRlbnRpZmll ciAoVFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpKTsKKyAgICAgIC8qIFRoaXMgY291bnRzIGFzIGEg dXNlIG9mIHRoZSBvYmplY3QgcG9pbnRlZCB0by4gICovCisgICAgICBUUkVFX1VTRUQgKGlkKSA9 IDE7CisKKyAgICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wpCisJREVD TF9JTklUSUFMIChkZWNsKSA9IGVycm9yX21hcmtfbm9kZTsKKyAgICAgIGVsc2UKKwlUUkVFX1NU QVRJQyAoZGVjbCkgPSAxOworCisgICAgICBpZiAoIWlzX2FsaWFzKQorCXsKKwkgIC8qIGlmdW5j cyBhcmUgYWxzbyBhbGlhc2VzLCBzbyBzZXQgdGhhdCBhdHRyaWJ1dGUgdG9vLiAgKi8KKwkgIERF Q0xfQVRUUklCVVRFUyAoZGVjbCkKKwkgICAgPSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgi YWxpYXMiKSwgYXJncywKKwkJCSBERUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKwkgIERFQ0xfQVRU UklCVVRFUyAoZGVjbCkgPSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgiaWZ1bmMiKSwKKwkJ CQkJICAgICAgTlVMTCwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisJfQorICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUg aWdub3JlZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorCisg IGlmIChkZWNsX2luX3N5bXRhYl9wICgqbm9kZSkpCisgICAgeworICAgICAgc3RydWN0IHN5bXRh Yl9ub2RlICpuID0gc3ltdGFiX25vZGU6OmdldCAoZGVjbCk7CisgICAgICBpZiAobiAmJiBuLT5y ZWZ1c2VfdmlzaWJpbGl0eV9jaGFuZ2VzKQorCWVycm9yICgiJStxRCBkZWNsYXJlZCAlcXMgYWZ0 ZXIgYmVpbmcgdXNlZCIsCisJICAgICAgIGRlY2wsIGlzX2FsaWFzID8gImFsaWFzIiA6ICJpZnVu YyIpOworICAgIH0KKworCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhbiAi YWxpYXMiIG9yICJpZnVuYyIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBh dHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV9hbGlhc19h dHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHJlZSBhcmdzLAorCQkJaW50IEFSR19V TlVTRUQgKGZsYWdzKSwgYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICByZXR1cm4gaGFuZGxlX2Fs aWFzX2lmdW5jX2F0dHJpYnV0ZSAodHJ1ZSwgbm9kZSwgbmFtZSwgYXJncywgbm9fYWRkX2F0dHJz KTsKK30KKwogLyogKGVuZCBvZiBhdHRyaWJ1dGUtaGFuZGxpbmcpLiAgKi8KIAogLyogTGFuZ3Vh Z2UtZGVwZW5kZW50IGNvbnRlbnRzIG9mIGEgdHlwZS4gICovCmRpZmYgLS1naXQgYS9nY2Mvaml0 L2ppdC1wbGF5YmFjay5jYyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCmluZGV4IGY4NzM1MWVh ZjgyLi44NGRmNmMxMDBlNiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKKysr IGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKQEAgLTIwLDYgKzIwLDcgQEAgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKIAogI2luY2x1ZGUgImNvbmZp Zy5oIgogI2RlZmluZSBJTkNMVURFX01VVEVYCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCiAjaW5j bHVkZSAic3lzdGVtLmgiCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiCiAjaW5jbHVkZSAidGFyZ2V0 LmgiCkBAIC00OTksNiArNTAwLDU0IEBAIG5ld19wYXJhbSAobG9jYXRpb24gKmxvYywKICAgcmV0 dXJuIG5ldyBwYXJhbSAodGhpcywgaW5uZXIpOwogfQogCitjb25zdCBjaGFyKiBmbl9hdHRyaWJ1 dGVfdG9fc3RyaW5nIChnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyKQoreworICBzd2l0Y2ggKGF0 dHIpCisgIHsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMSUFTOgorICAgICAgcmV0 dXJuICJhbGlhcyI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9BTFdBWVNfSU5MSU5F OgorICAgICAgcmV0dXJuICJhbHdheXNfaW5saW5lIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRU UklCVVRFX0lOTElORToKKyAgICAgIHJldHVybiBOVUxMOworICAgIGNhc2UgR0NDX0pJVF9GTl9B VFRSSUJVVEVfTk9JTkxJTkU6CisgICAgICByZXR1cm4gIm5vaW5saW5lIjsKKyAgICBjYXNlIEdD Q19KSVRfRk5fQVRUUklCVVRFX1RBUkdFVDoKKyAgICAgIHJldHVybiAidGFyZ2V0IjsKKyAgICBj YXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX1VTRUQ6CisgICAgICByZXR1cm4gInVzZWQiOworICAg IGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVklTSUJJTElUWToKKyAgICAgIHJldHVybiAidmlz aWJpbGl0eSI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9DT0xEOgorICAgICAgcmV0 dXJuICJjb2xkIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX1JFVFVSTlNfVFdJQ0U6 CisgICAgICByZXR1cm4gInJldHVybnNfdHdpY2UiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRS SUJVVEVfUFVSRToKKyAgICAgIHJldHVybiAicHVyZSI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FU VFJJQlVURV9DT05TVDoKKyAgICAgIHJldHVybiAiY29uc3QiOworICAgIGNhc2UgR0NDX0pJVF9G Tl9BVFRSSUJVVEVfV0VBSzoKKyAgICAgIHJldHVybiAid2VhayI7CisgICAgY2FzZSBHQ0NfSklU X0ZOX0FUVFJJQlVURV9OT05OVUxMOgorICAgICAgcmV0dXJuICJub25udWxsIjsKKyAgICBjYXNl IEdDQ19KSVRfRk5fQVRUUklCVVRFX01BWDoKKyAgICAgIHJldHVybiBOVUxMOworICB9CisgIHJl dHVybiBOVUxMOworfQorCitjb25zdCBjaGFyKiB2YXJpYWJsZV9hdHRyaWJ1dGVfdG9fc3RyaW5n IChnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyKQoreworICBzd2l0Y2ggKGF0dHIpCisg IHsKKyAgICBjYXNlIEdDQ19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX1ZJU0lCSUxJVFk6CisgICAg ICByZXR1cm4gInZpc2liaWxpdHkiOworICAgIGNhc2UgR0NDX0pJVF9WQVJJQUJMRV9BVFRSSUJV VEVfTUFYOgorICAgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKIC8q IENvbnN0cnVjdCBhIHBsYXliYWNrOjpmdW5jdGlvbiBpbnN0YW5jZS4gICovCiAKIHBsYXliYWNr OjpmdW5jdGlvbiAqCkBAIC01MDksNyArNTU4LDEzIEBAIG5ld19mdW5jdGlvbiAobG9jYXRpb24g KmxvYywKIAkgICAgICBjb25zdCBjaGFyICpuYW1lLAogCSAgICAgIGNvbnN0IGF1dG9fdmVjPHBh cmFtICo+ICpwYXJhbXMsCiAJICAgICAgaW50IGlzX3ZhcmlhZGljLAotCSAgICAgIGVudW0gYnVp bHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCkKKwkgICAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9u IGJ1aWx0aW5faWQsCisJICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2NjX2ppdF9mbl9hdHRyaWJ1 dGU+ICZhdHRyaWJ1dGVzLAorCSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nf aml0X2ZuX2F0dHJpYnV0ZSwKKwkJCQkJICBzdGQ6OnN0cmluZz4+ICZzdHJpbmdfYXR0cmlidXRl cywKKwkgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1 dGUsCisJCQkJCSAgc3RkOjp2ZWN0b3I8aW50Pj4+CisJCQkJCSAgJmludF9hcnJheV9hdHRyaWJ1 dGVzKQogewogICBpbnQgaTsKICAgcGFyYW0gKnBhcmFtOwpAQCAtNTQzLDYgKzU5OCw4IEBAIG5l d19mdW5jdGlvbiAobG9jYXRpb24gKmxvYywKICAgREVDTF9SRVNVTFQgKGZuZGVjbCkgPSByZXNk ZWNsOwogICBERUNMX0NPTlRFWFQgKHJlc2RlY2wpID0gZm5kZWNsOwogCisgIHRyZWUgZm5fYXR0 cmlidXRlcyA9IE5VTExfVFJFRTsKKwogICBpZiAoYnVpbHRpbl9pZCkKICAgICB7CiAgICAgICBn Y2NfYXNzZXJ0IChsb2MgPT0gTlVMTCk7CkBAIC01ODgsMTIgKzY0NSw2MiBAQCBuZXdfZnVuY3Rp b24gKGxvY2F0aW9uICpsb2MsCiAgICAgICBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChmbmRlY2wp ID0gMTsKIAogICAgICAgLyogQWRkIGF0dHJpYnV0ZSAiYWx3YXlzX2lubGluZSI6ICovCi0gICAg ICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkgPQotCXRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIg KCJhbHdheXNfaW5saW5lIiksCi0JCSAgIE5VTEwsCi0JCSAgIERFQ0xfQVRUUklCVVRFUyAoZm5k ZWNsKSk7CisgICAgICBmbl9hdHRyaWJ1dGVzID0gdHJlZV9jb25zIChnZXRfaWRlbnRpZmllciAo ImFsd2F5c19pbmxpbmUiKSwKKwkJCQkgTlVMTCwKKwkJCQkgZm5fYXR0cmlidXRlcyk7CiAgICAg fQogCisgIC8qIEFsbCBhdHRyaWJ1dGVzIG5lZWQgdG8gYmUgZGVjbGFyZWQgaW4gYGR1bW15LWZy b250ZW5kLmNjYCBhbmQgbW9yZQorICAgICBzcGVjaWZpY2FsbHkgaW4gYGppdF9hdHRyaWJ1dGVf dGFibGVgLiAqLworICBmb3IgKGF1dG8gYXR0cjogYXR0cmlidXRlcykKKyAgeworICAgIGlmIChh dHRyID09IEdDQ19KSVRfRk5fQVRUUklCVVRFX0lOTElORSkKKyAgICAgIERFQ0xfREVDTEFSRURf SU5MSU5FX1AgKGZuZGVjbCkgPSAxOworCisgICAgY29uc3QgY2hhciogYXR0cmlidXRlID0gZm5f YXR0cmlidXRlX3RvX3N0cmluZyAoYXR0cik7CisgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICB7Cisg ICAgICB0cmVlIGlkZW50ID0gZ2V0X2lkZW50aWZpZXIgKGF0dHJpYnV0ZSk7CisgICAgICBmbl9h dHRyaWJ1dGVzID0gdHJlZV9jb25zIChpZGVudCwgTlVMTF9UUkVFLCBmbl9hdHRyaWJ1dGVzKTsK KyAgICB9CisgIH0KKworICBmb3IgKGF1dG8gYXR0cjogc3RyaW5nX2F0dHJpYnV0ZXMpCisgIHsK KyAgICBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSYgbmFtZSA9IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAg IHN0ZDo6c3RyaW5nJiB2YWx1ZSA9IHN0ZDo6Z2V0PDE+KGF0dHIpOworICAgIHRyZWUgYXR0cmli dXRlX3ZhbHVlID0gYnVpbGRfdHJlZV9saXN0IChOVUxMX1RSRUUsCisJOjpidWlsZF9zdHJpbmcg KHZhbHVlLmxlbmd0aCAoKSArIDEsIHZhbHVlLmNfc3RyICgpKSk7CisgICAgY29uc3QgY2hhciog YXR0cmlidXRlID0gZm5fYXR0cmlidXRlX3RvX3N0cmluZyAobmFtZSk7CisgICAgdHJlZSBpZGVu dCA9IGF0dHJpYnV0ZSA/IGdldF9pZGVudGlmaWVyIChhdHRyaWJ1dGUpIDogTlVMTDsKKworICAg IGlmIChpZGVudCkKKyAgICAgIGZuX2F0dHJpYnV0ZXMgPSB0cmVlX2NvbnMgKGlkZW50LCBhdHRy aWJ1dGVfdmFsdWUsIGZuX2F0dHJpYnV0ZXMpOworICB9CisKKyAgZm9yIChhdXRvIGF0dHI6IGlu dF9hcnJheV9hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUmIG5hbWUg PSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+JiB2YWx1ZXMgPSBzdGQ6 OmdldDwxPihhdHRyKTsKKworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0 ZV90b19zdHJpbmcgKG5hbWUpOworICAgIHRyZWUgaWRlbnQgPSBhdHRyaWJ1dGUgPyBnZXRfaWRl bnRpZmllciAoYXR0cmlidXRlKSA6IE5VTEw7CisKKyAgICBpZiAoIWlkZW50KQorICAgICAgY29u dGludWU7CisKKyAgICB0cmVlIHRyZWVfbGlzdCA9IE5VTExfVFJFRTsKKyAgICB0cmVlICpwX3Ry ZWVfbGlzdCA9ICZ0cmVlX2xpc3Q7CisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAg IHsKKyAgICAgIHRyZWUgaW50X3ZhbHVlID0gYnVpbGRfaW50X2NzdCAoaW50ZWdlcl90eXBlX25v ZGUsIHZhbHVlKTsKKyAgICAgICpwX3RyZWVfbGlzdCA9IGJ1aWxkX3RyZWVfbGlzdCAoTlVMTCwg aW50X3ZhbHVlKTsKKyAgICAgIHBfdHJlZV9saXN0ID0gJlRSRUVfQ0hBSU4gKCpwX3RyZWVfbGlz dCk7CisgICAgfQorICAgIGZuX2F0dHJpYnV0ZXMgPSB0cmVlX2NvbnMgKGlkZW50LCB0cmVlX2xp c3QsIGZuX2F0dHJpYnV0ZXMpOworICB9CisKKyAgZGVjbF9hdHRyaWJ1dGVzICgmZm5kZWNsLCBm bl9hdHRyaWJ1dGVzLCAwKTsKICAgZnVuY3Rpb24gKmZ1bmMgPSBuZXcgZnVuY3Rpb24gKHRoaXMs IGZuZGVjbCwga2luZCk7CiAgIG1fZnVuY3Rpb25zLnNhZmVfcHVzaCAoZnVuYyk7CiAgIHJldHVy biBmdW5jOwpAQCAtNjA3LDcgKzcxNCw5IEBAIGdsb2JhbF9uZXdfZGVjbCAobG9jYXRpb24gKmxv YywKIAkJIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCQkgdHlwZSAqdHlwZSwKIAkJ IGNvbnN0IGNoYXIgKm5hbWUsCi0JCSBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCisJCSBl bnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MsCisJCSBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBh aXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkJCSAgICAgc3RkOjpzdHJpbmc+PiAm YXR0cmlidXRlcykKIHsKICAgZ2NjX2Fzc2VydCAodHlwZSk7CiAgIGdjY19hc3NlcnQgKG5hbWUp OwpAQCAtNjUyLDkgKzc2MSwzMiBAQCBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAg IGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyLCBsb2MpOwogCisgIHNldF92 YXJpYWJsZV9zdHJpbmdfYXR0cmlidXRlIChhdHRyaWJ1dGVzLCBpbm5lcik7CisKICAgcmV0dXJu IGlubmVyOwogfQogCit2b2lkCitwbGF5YmFjazo6CitzZXRfdmFyaWFibGVfc3RyaW5nX2F0dHJp YnV0ZSAoCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0 dHJpYnV0ZSwKKwkJCSAgICAgICBzdGQ6OnN0cmluZz4+ICZzdHJpbmdfYXR0cmlidXRlcywKKyAg dHJlZSBkZWNsKQoreworICB0cmVlIHZhcl9hdHRyaWJ1dGVzID0gTlVMTF9UUkVFOworICBmb3Ig KGF1dG8gYXR0cjogc3RyaW5nX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBnY2Nfaml0X3ZhcmlhYmxl X2F0dHJpYnV0ZSYgbmFtZSA9IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAgIHN0ZDo6c3RyaW5nJiB2 YWx1ZSA9IHN0ZDo6Z2V0PDE+KGF0dHIpOworICAgIHRyZWUgYXR0cmlidXRlX3ZhbHVlID0gYnVp bGRfdHJlZV9saXN0IChOVUxMX1RSRUUsCisJOjpidWlsZF9zdHJpbmcgKHZhbHVlLmxlbmd0aCAo KSArIDEsIHZhbHVlLmNfc3RyICgpKSk7CisgICAgdHJlZSBpZGVudCA9IGdldF9pZGVudGlmaWVy ICh2YXJpYWJsZV9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKSk7CisgICAgaWYgKGlkZW50KQor ICAgICAgdmFyX2F0dHJpYnV0ZXMgPSB0cmVlX2NvbnMgKGlkZW50LCBhdHRyaWJ1dGVfdmFsdWUs IHZhcl9hdHRyaWJ1dGVzKTsKKyAgfQorICBkZWNsX2F0dHJpYnV0ZXMgKCZkZWNsLCB2YXJfYXR0 cmlidXRlcywgMCk7Cit9CisKIC8qIEluIHVzZSBieSBuZXdfZ2xvYmFsIGFuZCBuZXdfZ2xvYmFs X2luaXRpYWxpemVkLiAgKi8KIAogcGxheWJhY2s6Omx2YWx1ZSAqCkBAIC02NzQsMTAgKzgwNiwx MiBAQCBuZXdfZ2xvYmFsIChsb2NhdGlvbiAqbG9jLAogCSAgICBlbnVtIGdjY19qaXRfZ2xvYmFs X2tpbmQga2luZCwKIAkgICAgdHlwZSAqdHlwZSwKIAkgICAgY29uc3QgY2hhciAqbmFtZSwKLQkg ICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQorCSAgICBlbnVtIGdsb2JhbF92YXJfZmxh Z3MgZmxhZ3MsCisJICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3Zhcmlh YmxlX2F0dHJpYnV0ZSwKKwkJCQkJc3RkOjpzdHJpbmc+PiAmYXR0cmlidXRlcykKIHsKICAgdHJl ZSBpbm5lciA9Ci0gICAgZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZs YWdzKTsKKyAgICBnbG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSwgZmxhZ3Ms IGF0dHJpYnV0ZXMpOwogCiAgIHJldHVybiBnbG9iYWxfZmluYWxpemVfbHZhbHVlIChpbm5lcik7 CiB9CkBAIC04MTgsMTMgKzk1MiwxNSBAQCBwbGF5YmFjazo6Y29udGV4dDo6CiBuZXdfZ2xvYmFs X2luaXRpYWxpemVkIChsb2NhdGlvbiAqbG9jLAogCQkJZW51bSBnY2Nfaml0X2dsb2JhbF9raW5k IGtpbmQsCiAJCQl0eXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVs ZW1lbnRfc2l6ZSwKKwkJCXNpemVfdCBlbGVtZW50X3NpemUsCiAJCQlzaXplX3QgaW5pdGlhbGl6 ZXJfbnVtX2VsZW0sCiAJCQljb25zdCB2b2lkICppbml0aWFsaXplciwKIAkJCWNvbnN0IGNoYXIg Km5hbWUsCi0JCQllbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCisJCQllbnVtIGdsb2JhbF92 YXJfZmxhZ3MgZmxhZ3MsCisJCQljb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92 YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkJCQkgICAgc3RkOjpzdHJpbmc+PiAmYXR0cmlidXRlcykK IHsKLSAgdHJlZSBpbm5lciA9IGdsb2JhbF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1l LCBmbGFncyk7CisgIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlw ZSwgbmFtZSwgZmxhZ3MsIGF0dHJpYnV0ZXMpOwogCiAgIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZh X2djPiAqY29uc3RydWN0b3JfZWxlbWVudHMgPSBOVUxMOwogCkBAIC0xODEyLDcgKzE5NDgsOSBA QCBwbGF5YmFjazo6bHZhbHVlICoKIHBsYXliYWNrOjpmdW5jdGlvbjo6CiBuZXdfbG9jYWwgKGxv Y2F0aW9uICpsb2MsCiAJICAgdHlwZSAqdHlwZSwKLQkgICBjb25zdCBjaGFyICpuYW1lKQorCSAg IGNvbnN0IGNoYXIgKm5hbWUsCisJICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19q aXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJCSAgICAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1 dGVzKQogewogICBnY2NfYXNzZXJ0ICh0eXBlKTsKICAgZ2NjX2Fzc2VydCAobmFtZSk7CkBAIC0x ODI1LDYgKzE5NjMsOCBAQCBuZXdfbG9jYWwgKGxvY2F0aW9uICpsb2MsCiAgIERFQ0xfQ0hBSU4g KGlubmVyKSA9IEJJTkRfRVhQUl9WQVJTIChtX2lubmVyX2JpbmRfZXhwcik7CiAgIEJJTkRfRVhQ Ul9WQVJTIChtX2lubmVyX2JpbmRfZXhwcikgPSBpbm5lcjsKIAorICBzZXRfdmFyaWFibGVfc3Ry aW5nX2F0dHJpYnV0ZSAoYXR0cmlidXRlcywgaW5uZXIpOworCiAgIGlmIChsb2MpCiAgICAgc2V0 X3RyZWVfbG9jYXRpb24gKGlubmVyLCBsb2MpOwogICByZXR1cm4gbmV3IGx2YWx1ZSAobV9jdHh0 LCBpbm5lcik7CkBAIC0xOTQ3LDYgKzIwODcsOSBAQCBwb3N0cHJvY2VzcyAoKQogCiAgICAgICBj dXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBOVUxMOwogICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBB ZGQgdG8gY2dyYXBoIHRvIG91dHB1dCBhbGlhc2VzOiAqLworICAgICAgcmVzdF9vZl9kZWNsX2Nv bXBpbGF0aW9uIChtX2lubmVyX2ZuZGVjbCwgdHJ1ZSwgMCk7CiB9CiAKIC8qIERvbid0IGxlYWsg dmVjJ3MgaW50ZXJuYWwgYnVmZmVyIChpbiBub24tR0MgaGVhcCkgd2hlbiB3ZSBhcmUKQEAgLTMz NjUsNyArMzUwOCw3IEBAIHZvaWQKIHBsYXliYWNrOjpjb250ZXh0OjoKIGluaXRfdHlwZXMgKCkK IHsKLSAgLyogU2VlIGx0b19pbml0KCkgaW4gbHRvLWxhbmcuY2Mgb3Igdm9pZCB2aXNpdCAoVHlw ZUJhc2ljICp0KSBpbiBEJ3MgdHlwZXMuY2MgCisgIC8qIFNlZSBsdG9faW5pdCAoKSBpbiBsdG8t bGFuZy5jYyBvciB2b2lkIHZpc2l0IChUeXBlQmFzaWMgKnQpIGluIEQncyB0eXBlcy5jYwogICAg ICBmb3IgcmVmZXJlbmNlLiBJZiBUWVBFX05BTUUgaXMgbm90IHNldCwgZGVidWcgaW5mbyB3aWxs IG5vdCBjb250YWluIHR5cGVzICovCiAjZGVmaW5lIE5BTUVfVFlQRSh0LG4pIFwKIGlmICh0KSBc CmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJh Y2suaAppbmRleCA5NjU0NTA3YTM0ZC4uMDViYWZjZDIxYzQgMTAwNjQ0Ci0tLSBhL2djYy9qaXQv aml0LXBsYXliYWNrLmgKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaApAQCAtMjEsNyArMjEs OSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQog I2lmbmRlZiBKSVRfUExBWUJBQ0tfSAogI2RlZmluZSBKSVRfUExBWUJBQ0tfSAogCisjaW5jbHVk ZSA8c3RyaW5nPgogI2luY2x1ZGUgPHV0aWxpdHk+IC8vIGZvciBzdGQ6OnBhaXIKKyNpbmNsdWRl IDx2ZWN0b3I+CiAKICNpbmNsdWRlICJ0aW1ldmFyLmgiCiAjaW5jbHVkZSAidmFyYXNtLmgiCkBA IC0zNSwxMiArMzcsMjEgQEAgbmFtZXNwYWNlIGdjYyB7CiAKIG5hbWVzcGFjZSBqaXQgewogCitj b25zdCBjaGFyKiBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBh dHRyKTsKK2NvbnN0IGNoYXIqIHZhcmlhYmxlX2F0dHJpYnV0ZV90b19zdHJpbmcgKGdjY19qaXRf dmFyaWFibGVfYXR0cmlidXRlIGF0dHIpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIFBsYXliYWNrLgog ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCiAKIG5hbWVzcGFjZSBwbGF5YmFjayB7CiAKK3ZvaWQKK3NldF92YXJp YWJsZV9zdHJpbmdfYXR0cmlidXRlICgKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdj Y19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJICAgICAgc3RkOjpzdHJpbmc+PiAmYXR0cmli dXRlcywKKyAgdHJlZSBkZWNsKTsKKwogLyogcGxheWJhY2s6OmNvbnRleHQgaXMgYW4gYWJzdHJh Y3QgYmFzZSBjbGFzcy4KIAogICAgVGhlIHR3byBjb25jcmV0ZSBzdWJjbGFzc2VzIGFyZToKQEAg LTEwNCwxNCArMTE1LDIyIEBAIHB1YmxpYzoKIAkJY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qg YXV0b192ZWM8cGFyYW0gKj4gKnBhcmFtcywKIAkJaW50IGlzX3ZhcmlhZGljLAotCQllbnVtIGJ1 aWx0X2luX2Z1bmN0aW9uIGJ1aWx0aW5faWQpOworCQllbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1 aWx0aW5faWQsCisJCWNvbnN0IHN0ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiAmYXR0 cmlidXRlcywKKwkJY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfZm5fYXR0cmli dXRlLAorCQkJCQkgICAgc3RkOjpzdHJpbmc+PiAmc3RyaW5nX2F0dHJpYnV0ZXMsCisJCWNvbnN0 IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwKKwkJCQkJICAgIHN0 ZDo6dmVjdG9yPGludD4+PgorCQkJCQkgICAgJmludF9hcnJheV9hdHRyaWJ1dGVzKTsKIAogICBs dmFsdWUgKgogICBuZXdfZ2xvYmFsIChsb2NhdGlvbiAqbG9jLAogCSAgICAgIGVudW0gZ2NjX2pp dF9nbG9iYWxfa2luZCBraW5kLAogCSAgICAgIHR5cGUgKnR5cGUsCiAJICAgICAgY29uc3QgY2hh ciAqbmFtZSwKLQkgICAgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOworCSAgICAgIGVu dW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywKKwkgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6 OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkJCSAgc3RkOjpzdHJpbmc+PiAm YXR0cmlidXRlcyk7CiAKICAgbHZhbHVlICoKICAgbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9j YXRpb24gKmxvYywKQEAgLTEyMSw3ICsxNDAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgaW5pdGlhbGl6ZXJfbnVtX2VsZW0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKmluaXRpYWxpemVyLAogCQkJICBjb25zdCBjaGFyICpuYW1l LAotCQkJICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOworCQkJICBlbnVtIGdsb2JhbF92 YXJfZmxhZ3MgZmxhZ3MsCisJCQkgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjwKKwkJCQkJ ICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJCQkgICAgc3RkOjpzdHJpbmc+Pgor CQkJCQkgICAgJmF0dHJpYnV0ZXMpOwogCiAgIHJ2YWx1ZSAqCiAgIG5ld19jdG9yIChsb2NhdGlv biAqbG9nLApAQCAtMzA2LDcgKzMyOSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg ZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAgICAgICAgICAgICAgICAgICAgdHlwZSAq dHlwZSwKIAkJICAgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdz IGZsYWdzKTsKKwkJICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzLAorCQkgICBjb25zdCBz dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJCQkJCSAg ICAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKTsKICAgbHZhbHVlICoKICAgZ2xvYmFsX2Zp bmFsaXplX2x2YWx1ZSAodHJlZSBpbm5lcik7CiAKQEAgLTUwMCw3ICs1MjUsOSBAQCBwdWJsaWM6 CiAgIGx2YWx1ZSAqCiAgIG5ld19sb2NhbCAobG9jYXRpb24gKmxvYywKIAkgICAgIHR5cGUgKnR5 cGUsCi0JICAgICBjb25zdCBjaGFyICpuYW1lKTsKKwkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJ ICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1 dGUsCisJCQkJCSBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKTsKIAogICBibG9jayoKICAgbmV3 X2Jsb2NrIChjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29y ZGluZy5jYyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jYwppbmRleCA2ODZjMDU4NzA3OS4uNmZm YWRiZWExMjcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jYworKysgYi9nY2Mv aml0L2ppdC1yZWNvcmRpbmcuY2MKQEAgLTI5LDYgKzI5LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJqaXQtYnVpbHRpbnMu aCIKICNpbmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCiAjaW5jbHVkZSAiaml0LXBsYXliYWNrLmgi CisjaW5jbHVkZSA8c3N0cmVhbT4KIAogbmFtZXNwYWNlIGdjYyB7CiBuYW1lc3BhY2Ugaml0IHsK QEAgLTIwNjgsNyArMjA2OSw3IEBAIHJlY29yZGluZzo6bWVtZW50bzo6Z2V0X2RlYnVnX3N0cmlu ZyAoKQogdm9pZAogcmVjb3JkaW5nOjptZW1lbnRvOjp3cml0ZV90b19kdW1wIChkdW1wICZkKQog ewotICBkLndyaXRlKCIgICVzXG4iLCBnZXRfZGVidWdfc3RyaW5nICgpKTsKKyAgZC53cml0ZSAo IiAgJXNcbiIsIGdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCiAvKiBUaGUgaW1wbGVtZW50YXRp b24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6c3RyaW5nLiAgKi8KQEAgLTQwMjYsNiAr NDAyNywxMyBAQCB2b2lkIHJlY29yZGluZzo6bHZhbHVlOjpzZXRfYWxpZ25tZW50ICh1bnNpZ25l ZCBieXRlcykKICAgbV9hbGlnbm1lbnQgPSBieXRlczsKIH0KIAordm9pZCByZWNvcmRpbmc6Omx2 YWx1ZTo6YWRkX3N0cmluZ19hdHRyaWJ1dGUgKAorCWdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRl IGF0dHJpYnV0ZSwKKwljb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgbV9zdHJpbmdfYXR0cmlidXRl cy5wdXNoX2JhY2sgKHN0ZDo6bWFrZV9wYWlyIChhdHRyaWJ1dGUsIHN0ZDo6c3RyaW5nICh2YWx1 ZSkpKTsKK30KKwogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNv cmRpbmc6OnBhcmFtLiAgKi8KIAogLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhv b2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bwpAQCAtNDEwMiw3ICs0MTEwLDEwIEBA IHJlY29yZGluZzo6ZnVuY3Rpb246OmZ1bmN0aW9uIChjb250ZXh0ICpjdHh0LAogICBtX2J1aWx0 aW5faWQgKGJ1aWx0aW5faWQpLAogICBtX2xvY2FscyAoKSwKICAgbV9ibG9ja3MgKCksCi0gIG1f Zm5fcHRyX3R5cGUgKE5VTEwpCisgIG1fZm5fcHRyX3R5cGUgKE5VTEwpLAorICBtX2F0dHJpYnV0 ZXMgKCksCisgIG1fc3RyaW5nX2F0dHJpYnV0ZXMgKCksCisgIG1faW50X2FycmF5X2F0dHJpYnV0 ZXMgKCkKIHsKICAgZm9yIChpbnQgaSA9IDA7IGk8IG51bV9wYXJhbXM7IGkrKykKICAgICB7CkBA IC00MTYxLDcgKzQxNzIsMTAgQEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6cmVwbGF5X2ludG8gKHJl cGxheWVyICpyKQogCQkJCSAgICAgbV9uYW1lLT5jX3N0ciAoKSwKIAkJCQkgICAgICZwYXJhbXMs CiAJCQkJICAgICBtX2lzX3ZhcmlhZGljLAotCQkJCSAgICAgbV9idWlsdGluX2lkKSk7CisJCQkJ ICAgICBtX2J1aWx0aW5faWQsCisJCQkJICAgICBtX2F0dHJpYnV0ZXMsCisJCQkJICAgICBtX3N0 cmluZ19hdHRyaWJ1dGVzLAorCQkJCSAgICAgbV9pbnRfYXJyYXlfYXR0cmlidXRlcykpOwogfQog CiAvKiBDcmVhdGUgYSByZWNvcmRpbmc6OmxvY2FsIGluc3RhbmNlIGFuZCBhZGQgaXQgdG8KQEAg LTQyMTAsNiArNDIyNCw0MCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpuZXdfYmxvY2sgKGNvbnN0 IGNoYXIgKm5hbWUpCiB2b2lkCiByZWNvcmRpbmc6OmZ1bmN0aW9uOjp3cml0ZV90b19kdW1wIChk dW1wICZkKQogeworICBmb3IgKGF1dG8gYXR0cjogbV9hdHRyaWJ1dGVzKQorICB7CisgICAgY29u c3QgY2hhciogYXR0cmlidXRlID0gZm5fYXR0cmlidXRlX3RvX3N0cmluZyAoYXR0cik7CisgICAg aWYgKGF0dHJpYnV0ZSkKKyAgICAgIGQud3JpdGUgKCJfX2F0dHJpYnV0ZSglcylfX1xuIiwgYXR0 cmlidXRlKTsKKyAgfQorICBmb3IgKGF1dG8gYXR0cjogbV9zdHJpbmdfYXR0cmlidXRlcykKKyAg eworICAgIGdjY19qaXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0cik7Cisg ICAgc3RkOjpzdHJpbmcmIHZhbHVlID0gc3RkOjpnZXQ8MT4oYXR0cik7CisgICAgY29uc3QgY2hh ciogYXR0cmlidXRlID0gZm5fYXR0cmlidXRlX3RvX3N0cmluZyAobmFtZSk7CisKKyAgICBpZiAo YXR0cmlidXRlKQorICAgICAgZC53cml0ZSAoIl9fYXR0cmlidXRlKCVzKFwiJXNcIikpX19cbiIs IGF0dHJpYnV0ZSwgdmFsdWUuY19zdHIoKSk7CisgIH0KKyAgZm9yIChhdXRvIGF0dHI6IG1faW50 X2FycmF5X2F0dHJpYnV0ZXMpCisgIHsKKyAgICBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSYgbmFtZSA9 IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAgIHN0ZDo6dmVjdG9yPGludD4mIHZhbHVlcyA9IHN0ZDo6 Z2V0PDE+KGF0dHIpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90 b19zdHJpbmcgKG5hbWUpOworICAgIGlmIChhdHRyaWJ1dGUpCisgICAgeworICAgICAgZC53cml0 ZSAoIl9fYXR0cmlidXRlKCVzKCIsIGF0dHJpYnV0ZSk7CisgICAgICBmb3IgKHNpemVfdCBpID0g MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgIHsKKwlpZiAoaSA+IDApCisJICBkLndy aXRlICgiLCAlZCIsIHZhbHVlc1tpXSk7CisJZWxzZQorCSAgZC53cml0ZSAoIiVkIiwgdmFsdWVz W2ldKTsKKyAgICAgIH0KKyAgICAgIGQud3JpdGUgKCIpKV9fXG4iKTsKKyAgICB9CisgIH0KKwog ICBzd2l0Y2ggKG1fa2luZCkKICAgICB7CiAgICAgZGVmYXVsdDogZ2NjX3VucmVhY2hhYmxlICgp OwpAQCAtNDQwNCw2ICs0NDUyLDMxIEBAIHJlY29yZGluZzo6ZnVuY3Rpb246OmdldF9hZGRyZXNz IChyZWNvcmRpbmc6OmxvY2F0aW9uICpsb2MpCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQK K3JlY29yZGluZzo6ZnVuY3Rpb246OmFkZF9hdHRyaWJ1dGUgKGdjY19qaXRfZm5fYXR0cmlidXRl IGF0dHJpYnV0ZSkKK3sKKyAgbV9hdHRyaWJ1dGVzLnB1c2hfYmFjayAoYXR0cmlidXRlKTsKK30K Kwordm9pZAorcmVjb3JkaW5nOjpmdW5jdGlvbjo6YWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19q aXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwkJCQkJICAgY29uc3QgY2hhciogdmFsdWUpCit7 CisgIG1fc3RyaW5nX2F0dHJpYnV0ZXMucHVzaF9iYWNrICgKKwlzdGQ6Om1ha2VfcGFpciAoYXR0 cmlidXRlLCBzdGQ6OnN0cmluZyAodmFsdWUpKSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6ZnVu Y3Rpb246OmFkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoCisJZ2NjX2ppdF9mbl9hdHRyaWJ1 dGUgYXR0cmlidXRlLAorCWNvbnN0IGludCogdmFsdWUsCisJc2l6ZV90IGxlbmd0aCkKK3sKKyAg bV9pbnRfYXJyYXlfYXR0cmlidXRlcy5wdXNoX2JhY2sgKHN0ZDo6bWFrZV9wYWlyICgKKyAgICBh dHRyaWJ1dGUsCisgICAgc3RkOjp2ZWN0b3I8aW50PiAodmFsdWUsIHZhbHVlICsgbGVuZ3RoKSkp OworfQorCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiByZWNvcmRpbmc6Om1lbWVudG86Om1ha2VfZGVi dWdfc3RyaW5nIGZvcgogICAgZnVuY3Rpb25zLiAgKi8KIApAQCAtNDQyNSw2ICs0NDk4LDM5IEBA IHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNfb2ZfZnVuY3Rpb25fa2luZHNbXSA9IHsK IAogLyogSW1wbGVtZW50YXRpb24gb2YgcmVjb3JkaW5nOjptZW1lbnRvOjp3cml0ZV9yZXByb2R1 Y2VyIGZvciBmdW5jdGlvbnMuICovCiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZm5fYXR0 cmlidXRlX3JlcHJvZHVjZXJfc3RyaW5nc1tdID0KK3sKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRF X0FMSUFTIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkUiLAorICAiR0ND X0pJVF9GTl9BVFRSSUJVVEVfSU5MSU5FIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX05PSU5M SU5FIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1RBUkdFVCIsCisgICJHQ0NfSklUX0ZOX0FU VFJJQlVURV9VU0VEIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1ZJU0lCSUxJVFkiLAorICAi R0NDX0pJVF9GTl9BVFRSSUJVVEVfQ09MRCIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9SRVRV Uk5TX1RXSUNFIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1BVUkUiLAorICAiR0NDX0pJVF9G Tl9BVFRSSUJVVEVfQ09OU1QiLAorICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfV0VBSyIsCisgICJH Q0NfSklUX0ZOX0FUVFJJQlVURV9OT05OVUxMIiwKK307CisKK3N0ZDo6c3RyaW5nCitnZXRfdmVj dG9yX2ludF9kZWJ1ZyAoc3RkOjp2ZWN0b3I8aW50PiAmdmFsdWVzKQoreworICBzdGQ6OnN0cmlu Z3N0cmVhbSBzOworCisgIHMgPDwgInsiOworICBmb3IoYXV0byBpdCA9IHZhbHVlcy5iZWdpbigp OyBpdCAhPSB2YWx1ZXMuZW5kKCk7ICsraXQpCisgICAgeworICAgICAgaWYgKGl0ICE9IHZhbHVl cy5iZWdpbigpICkKKwkgcyA8PCAiLCAiOworICAgICAgcyA8PCAqaXQ7CisgICAgfQorICBzIDw8 ICJ9IjsKKyAgcmV0dXJuIHMuc3RyKCk7Cit9CisKIHZvaWQKIHJlY29yZGluZzo6ZnVuY3Rpb246 OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiB7CkBAIC00NDY3LDYgKzQ1NzMsMjUg QEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikK IAkgICBtX3BhcmFtcy5sZW5ndGggKCksCiAJICAgcGFyYW1zX2lkLAogCSAgIG1faXNfdmFyaWFk aWMpOworICBmb3IgKGF1dG8gYXR0cmlidXRlIDogbV9hdHRyaWJ1dGVzKQorICAgIHIud3JpdGUo IiAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlICglcywgJXMpO1xuIiwKKwkgICAgaWQs CisJICAgIGZuX2F0dHJpYnV0ZV9yZXByb2R1Y2VyX3N0cmluZ3NbYXR0cmlidXRlXSk7CisgIGZv ciAoYXV0byBhdHRyaWJ1dGUgOiBtX3N0cmluZ19hdHRyaWJ1dGVzKQorICAgIHIud3JpdGUoIiAg Z2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoJXMsICVzLCBcIiVzXCIpO1xu IiwKKwkgICAgaWQsCisJICAgIGZuX2F0dHJpYnV0ZV9yZXByb2R1Y2VyX3N0cmluZ3Nbc3RkOjpn ZXQ8MD4oYXR0cmlidXRlKV0sCisJICAgIHN0ZDo6Z2V0PDE+KGF0dHJpYnV0ZSkuY19zdHIoKSk7 CisgIGZvciAoYXV0byBhdHRyaWJ1dGUgOiBtX2ludF9hcnJheV9hdHRyaWJ1dGVzKSB7CisgICAg ci53cml0ZSgiICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAo JXMsXG4iCisJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAlcyxcbiIKKwkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpbnRbXSklcyxcbiIKKwkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICVsdSk7XG4iLAorCSAgICBpZCwKKwkgICAgZm5fYXR0cmli dXRlX3JlcHJvZHVjZXJfc3RyaW5nc1tzdGQ6OmdldDwwPihhdHRyaWJ1dGUpXSwKKwkgICAgZ2V0 X3ZlY3Rvcl9pbnRfZGVidWcgKHN0ZDo6Z2V0PDE+KGF0dHJpYnV0ZSkpLmNfc3RyKCksCisJICAg IHN0ZDo6Z2V0PDE+KGF0dHJpYnV0ZSkuc2l6ZSAoKSk7CisgIH0KIH0KIAogCkBAIC00ODc5LDEy ICs1MDA0LDE0IEBAIHJlY29yZGluZzo6Z2xvYmFsOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIp CiAJCQkJIC8gbV90eXBlLT5kZXJlZmVyZW5jZSAoKS0+Z2V0X3NpemUgKCksCiAJCQkJIG1faW5p dGlhbGl6ZXIsCiAJCQkJIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwKLQkJCQkgbV9mbGFncykK KwkJCQkgbV9mbGFncywKKwkJCQkgbV9zdHJpbmdfYXR0cmlidXRlcykKICAgICA6IHItPm5ld19n bG9iYWwgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCiAJCSAgICAgbV9raW5kLAogCQkg ICAgIG1fdHlwZS0+cGxheWJhY2tfdHlwZSAoKSwKIAkJICAgICBwbGF5YmFja19zdHJpbmcgKG1f bmFtZSksCi0JCSAgICAgbV9mbGFncyk7CisJCSAgICAgbV9mbGFncywKKwkJICAgICBtX3N0cmlu Z19hdHRyaWJ1dGVzKTsKIAogICBpZiAobV90bHNfbW9kZWwgIT0gR0NDX0pJVF9UTFNfTU9ERUxf Tk9ORSkKICAgICBnbG9iYWwtPnNldF90bHNfbW9kZWwgKHJlY29yZGluZzo6dGxzX21vZGVsc1tt X3Rsc19tb2RlbF0pOwpAQCAtNDk0Myw2ICs1MDcwLDE1IEBAIHJlY29yZGluZzo6Z2xvYmFsOjp3 cml0ZV90b19kdW1wIChkdW1wICZkKQogICAgICAgYnJlYWs7CiAgICAgfQogCisgIGZvciAoYXV0 byBhdHRyOiBtX3N0cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF92YXJpYWJsZV9h dHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYgdmFs dWUgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUgPSB2YXJp YWJsZV9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsKKworICAgIGlmIChhdHRyaWJ1dGUpCisg ICAgICBkLndyaXRlICgiX19hdHRyaWJ1dGUoJXMoXCIlc1wiKSlfX1xuIiwgYXR0cmlidXRlLCB2 YWx1ZS5jX3N0cigpKTsKKyAgfQogICBkLndyaXRlICgiJXMgJXMiLAogCSAgIG1fdHlwZS0+Z2V0 X2RlYnVnX3N0cmluZyAoKSwKIAkgICBnZXRfZGVidWdfc3RyaW5nICgpKTsKQEAgLTUwMTMsNiAr NTE0OSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRsc19tb2RlbF9lbnVtX3N0cmlu Z3NbXSA9IHsKICAgIkdDQ19KSVRfVExTX01PREVMX0xPQ0FMX0VYRUMiLAogfTsKIAorc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZV9lbnVtX3N0cmlu Z3NbXSA9IHsKKyAgIkdDQ19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX1ZJU0lCSUxJVFkiLAorfTsK Kwogdm9pZAogcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIg JnIpCiB7CkBAIC01MDQyLDYgKzUxODIsMTMgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3Jl cHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAgICAgIGlkLAogICAgICBtX2xpbmtfc2VjdGlvbi0+ Y19zdHIgKCkpOwogCisgIGZvciAoYXV0byBhdHRyaWJ1dGUgOiBtX3N0cmluZ19hdHRyaWJ1dGVz KQorICAgIHIud3JpdGUoIiAgZ2NjX2ppdF9sdmFsdWVfYWRkX3N0cmluZ19hdHRyaWJ1dGUgKCVz LCAlcywgXCIlc1wiKTtcbiIsCisJICAgIGlkLAorCSAgICBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJp YnV0ZV9lbnVtX3N0cmluZ3Nbc3RkOjpnZXQ8MD4oYXR0cmlidXRlKV0sCisJICAgIHN0ZDo6Z2V0 PDE+KGF0dHJpYnV0ZSkuY19zdHIoKSk7CisKKwogICBpZiAobV9pbml0aWFsaXplcikKICAgICBz d2l0Y2ggKG1fdHlwZS0+ZGVyZWZlcmVuY2UgKCktPmdldF9zaXplICgpKQogICAgICAgewpAQCAt NjYyMiw3ICs2NzY5LDggQEAgcmVjb3JkaW5nOjpsb2NhbDo6cmVwbGF5X2ludG8gKHJlcGxheWVy ICpyKQogICBwbGF5YmFjazo6bHZhbHVlICpvYmogPSBtX2Z1bmMtPnBsYXliYWNrX2Z1bmN0aW9u ICgpCiAgICAgICAtPm5ld19sb2NhbCAocGxheWJhY2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKIAkJ ICAgbV90eXBlLT5wbGF5YmFja190eXBlICgpLAotCQkgICBwbGF5YmFja19zdHJpbmcgKG1fbmFt ZSkpOworCQkgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSksCisJCSAgIG1fc3RyaW5nX2F0dHJp YnV0ZXMpOwogCiAgIGlmIChtX3JlZ19uYW1lICE9IE5VTEwpCiAgICAgb2JqLT5zZXRfcmVnaXN0 ZXJfbmFtZSAobV9yZWdfbmFtZS0+Y19zdHIgKCkpOwpAQCAtNjY0NCw5ICs2NzkyLDkgQEAgcmVj b3JkaW5nOjpsb2NhbDo6d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKIHsKICAgaWYgKGQudXBkYXRl X2xvY2F0aW9ucyAoKSkKICAgICBtX2xvYyA9IGQubWFrZV9sb2NhdGlvbiAoKTsKLSAgZC53cml0 ZSgiICAlcyAlcztcbiIsCi0JICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCi0JICBnZXRf ZGVidWdfc3RyaW5nICgpKTsKKyAgZC53cml0ZSAoIiAgJXMgJXM7XG4iLAorCSAgIG1fdHlwZS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICBnZXRfZGVidWdfc3RyaW5nICgpKTsKIH0KIAogdm9p ZApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0L2ppdC1yZWNv cmRpbmcuaAppbmRleCBiOTUxYzcxNWNhNS4uY2QyZTBhZGJlMzAgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCkBAIC0yMyw2 ICsyMywxMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQogCiAjaW5jbHVkZSAiaml0LWNvbW1vbi5oIgogI2luY2x1ZGUgImppdC1sb2dnaW5nLmgi CisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8 dmVjdG9yPgogCiBjbGFzcyB0aW1lcjsKIApAQCAtMTIxNiw3ICsxMjIwLDggQEAgcHVibGljOgog ICAgIG1fbGlua19zZWN0aW9uIChOVUxMKSwKICAgICBtX3JlZ19uYW1lIChOVUxMKSwKICAgICBt X3Rsc19tb2RlbCAoR0NDX0pJVF9UTFNfTU9ERUxfTk9ORSksCi0gICAgbV9hbGlnbm1lbnQgKDAp CisgICAgbV9hbGlnbm1lbnQgKDApLAorICAgIG1fc3RyaW5nX2F0dHJpYnV0ZXMgKCkKICAge30K IAogICBwbGF5YmFjazo6bHZhbHVlICoKQEAgLTEyMzYsOCArMTI0MSwxMiBAQCBwdWJsaWM6CiAg IGFzX3J2YWx1ZSAoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgY29uc3QgY2hhciAqYWNjZXNzX2Fz X3J2YWx1ZSAocmVwcm9kdWNlciAmcikgb3ZlcnJpZGU7CisKKyAgdm9pZCBhZGRfc3RyaW5nX2F0 dHJpYnV0ZSAoZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBjaGFy KiB2YWx1ZSk7CisKICAgdmlydHVhbCBjb25zdCBjaGFyICphY2Nlc3NfYXNfbHZhbHVlIChyZXBy b2R1Y2VyICZyKTsKICAgdmlydHVhbCBib29sIGlzX2dsb2JhbCAoKSBjb25zdCB7IHJldHVybiBm YWxzZTsgfQorICB2aXJ0dWFsIGJvb2wgaXNfbG9jYWwgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7 IH0KICAgdm9pZCBzZXRfdGxzX21vZGVsIChlbnVtIGdjY19qaXRfdGxzX21vZGVsIG1vZGVsKTsK ICAgdm9pZCBzZXRfbGlua19zZWN0aW9uIChjb25zdCBjaGFyICpuYW1lKTsKICAgdm9pZCBzZXRf cmVnaXN0ZXJfbmFtZSAoY29uc3QgY2hhciAqcmVnX25hbWUpOwpAQCAtMTI0OSw2ICsxMjU4LDgg QEAgcHJvdGVjdGVkOgogICBzdHJpbmcgKm1fcmVnX25hbWU7CiAgIGVudW0gZ2NjX2ppdF90bHNf bW9kZWwgbV90bHNfbW9kZWw7CiAgIHVuc2lnbmVkIG1fYWxpZ25tZW50OworICBzdGQ6OnZlY3Rv cjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisJICAgICAgc3RkOjpzdHJp bmc+PiBtX3N0cmluZ19hdHRyaWJ1dGVzOwogfTsKIAogY2xhc3MgcGFyYW0gOiBwdWJsaWMgbHZh bHVlCkBAIC0xMzQyLDYgKzEzNTMsMTAgQEAgcHVibGljOgogCiAgIHJ2YWx1ZSAqZ2V0X2FkZHJl c3MgKGxvY2F0aW9uICpsb2MpOwogCisgIHZvaWQgYWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9h dHRyaWJ1dGUgYXR0cmlidXRlKTsKKyAgdm9pZCBhZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2pp dF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisgIHZvaWQgYWRk X2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUs IGNvbnN0IGludCogdmFsdWUsIHNpemVfdCBsZW5ndGgpOworCiBwcml2YXRlOgogICBzdHJpbmcg KiBtYWtlX2RlYnVnX3N0cmluZyAoKSBmaW5hbCBvdmVycmlkZTsKICAgdm9pZCB3cml0ZV9yZXBy b2R1Y2VyIChyZXByb2R1Y2VyICZyKSBmaW5hbCBvdmVycmlkZTsKQEAgLTEzNTcsNiArMTM3Miw5 IEBAIHByaXZhdGU6CiAgIGF1dG9fdmVjPGxvY2FsICo+IG1fbG9jYWxzOwogICBhdXRvX3ZlYzxi bG9jayAqPiBtX2Jsb2NrczsKICAgdHlwZSAqbV9mbl9wdHJfdHlwZTsKKyAgc3RkOjp2ZWN0b3I8 Z2NjX2ppdF9mbl9hdHRyaWJ1dGU+IG1fYXR0cmlidXRlczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpw YWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLCBzdGQ6OnN0cmluZz4+IG1fc3RyaW5nX2F0dHJpYnV0 ZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwgc3RkOjp2 ZWN0b3I8aW50Pj4+IG1faW50X2FycmF5X2F0dHJpYnV0ZXM7CiB9OwogCiBjbGFzcyBibG9jayA6 IHB1YmxpYyBtZW1lbnRvCkBAIC0yMDg2LDYgKzIxMDQsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCB2 aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3IgKikgZmluYWwgb3ZlcnJpZGUge30KIAorICBi b29sIGlzX2xvY2FsICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwog ICB2b2lkIHdyaXRlX3RvX2R1bXAgKGR1bXAgJmQpIGZpbmFsIG92ZXJyaWRlOwogCiBwcml2YXRl OgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuY2MgYi9nY2Mvaml0L2xpYmdjY2ppdC5j YwppbmRleCA4ZWNmZTRhYWE0Mi4uOTYxNmYzODAyYjggMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGli Z2Njaml0LmNjCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmNjCkBAIC0zOTY1LDYgKzM5NjUsNzMg QEAgZ2NjX2ppdF90eXBlX2dldF9hbGlnbmVkIChnY2Nfaml0X3R5cGUgKnR5cGUsCiAgIHJldHVy biAoZ2NjX2ppdF90eXBlICopdHlwZS0+Z2V0X2FsaWduZWQgKGFsaWdubWVudF9pbl9ieXRlcyk7 CiB9CiAKK3ZvaWQKK2djY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5j dGlvbiAqZnVuYywKKwkJCQlnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCit7CisgIFJF VFVSTl9JRl9GQUlMIChmdW5jLCBOVUxMLCBOVUxMLCAiTlVMTCBmdW5jIik7CisgIFJFVFVSTl9J Rl9GQUlMICgoYXR0cmlidXRlID49IDAgJiYgYXR0cmlidXRlIDwgR0NDX0pJVF9GTl9BVFRSSUJV VEVfTUFYKSwKKwkJICBOVUxMLAorCQkgIE5VTEwsCisJCSAgImF0dHJpYnV0ZSBzaG91bGQgYmUg YSBgZ2NjX2ppdF9mbl9hdHRyaWJ1dGVgIGVudW0gdmFsdWUiKTsKKworICBmdW5jLT5hZGRfYXR0 cmlidXRlIChhdHRyaWJ1dGUpOworfQorCit2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJp bmdfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorCQkJCSAgICAgICBnY2Nfaml0 X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlKQor eworICBSRVRVUk5fSUZfRkFJTCAoZnVuYywgTlVMTCwgTlVMTCwgIk5VTEwgZnVuYyIpOworICBS RVRVUk5fSUZfRkFJTCAodmFsdWUsIE5VTEwsIE5VTEwsICJOVUxMIHZhbHVlIik7CisgIFJFVFVS Tl9JRl9GQUlMICgoYXR0cmlidXRlID49IDAgJiYgYXR0cmlidXRlIDwgR0NDX0pJVF9GTl9BVFRS SUJVVEVfTUFYKSwKKwkJICBOVUxMLAorCQkgIE5VTEwsCisJCSAgImF0dHJpYnV0ZSBzaG91bGQg YmUgYSBgZ2NjX2ppdF9mbl9hdHRyaWJ1dGVgIGVudW0gdmFsdWUiKTsKKworICBmdW5jLT5hZGRf c3RyaW5nX2F0dHJpYnV0ZSAoYXR0cmlidXRlLCB2YWx1ZSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rp b24gYWRkcyBhbiBhdHRyaWJ1dGUgd2l0aCBtdWx0aXBsZSBpbnRlZ2VyIHZhbHVlcy4gIEZvciBl eGFtcGxlCisgICBgbm9ubnVsbCgxLCAyKWAuICBUaGUgbnVtYmVycyBpbiBgdmFsdWVzYCBhcmUg c3VwcG9zZWQgdG8gbWFwIGhvdyB0aGV5CisgICBzaG91bGQgYmUgd3JpdHRlbiBpbiBDIGNvZGUu ICBTbyBmb3IgYG5vbm51bGwoMSwgMilgLCB5b3Ugc2hvdWxkIHBhc3MgYDFgCisgICBhbmQgYDJg IGluIGB2YWx1ZXNgIChhbmQgc2V0IGBsZW5ndGhgIHRvIGAyYCkuICovCit2b2lkCitnY2Nfaml0 X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAq ZnVuYywKKwkJCQkJICAgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCQkg ICAgICBjb25zdCBpbnQqIHZhbHVlcywKKwkJCQkJICAgICAgc2l6ZV90IGxlbmd0aCkKK3sKKyAg UkVUVVJOX0lGX0ZBSUwgKGZ1bmMsIE5VTEwsIE5VTEwsICJOVUxMIGZ1bmMiKTsKKyAgUkVUVVJO X0lGX0ZBSUwgKHZhbHVlcywgTlVMTCwgTlVMTCwgIk5VTEwgdmFsdWVzIik7CisgIFJFVFVSTl9J Rl9GQUlMICgoYXR0cmlidXRlID49IDAgJiYgYXR0cmlidXRlIDwgR0NDX0pJVF9GTl9BVFRSSUJV VEVfTUFYKSwKKwkJICBOVUxMLAorCQkgIE5VTEwsCisJCSAgImF0dHJpYnV0ZSBzaG91bGQgYmUg YSBgZ2NjX2ppdF9mbl9hdHRyaWJ1dGVgIGVudW0gdmFsdWUiKTsKKworICBmdW5jLT5hZGRfaW50 ZWdlcl9hcnJheV9hdHRyaWJ1dGUgKGF0dHJpYnV0ZSwgdmFsdWVzLCBsZW5ndGgpOworfQorCit2 b2lkCitnY2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9sdmFsdWUg KnZhcmlhYmxlLAorCQkJCSAgICAgZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUgYXR0cmlidXRl LAorCQkJCSAgICAgY29uc3QgY2hhciogdmFsdWUpCit7CisgIFJFVFVSTl9JRl9GQUlMICh2YXJp YWJsZSwgTlVMTCwgTlVMTCwgIk5VTEwgdmFyaWFibGUiKTsKKyAgUkVUVVJOX0lGX0ZBSUwgKHZh bHVlLCBOVUxMLCBOVUxMLCAiTlVMTCB2YWx1ZSIpOworICBSRVRVUk5fSUZfRkFJTCAodmFyaWFi bGUtPmlzX2dsb2JhbCAoKSB8fCB2YXJpYWJsZS0+aXNfbG9jYWwgKCksCisJCSAgTlVMTCwKKwkJ ICBOVUxMLAorCQkgICJ2YXJpYWJsZSBzaG91bGQgYmUgYSB2YXJpYWJsZSIpOworICBSRVRVUk5f SUZfRkFJTCAoKGF0dHJpYnV0ZSA+PSAwICYmIGF0dHJpYnV0ZSA8IEdDQ19KSVRfVkFSSUFCTEVf QVRUUklCVVRFX01BWCksCisJCSAgTlVMTCwKKwkJICBOVUxMLAorCQkgICJhdHRyaWJ1dGUgc2hv dWxkIGJlIGEgYGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlYCBlbnVtIHZhbHVlIik7CisKKyAg dmFyaWFibGUtPmFkZF9zdHJpbmdfYXR0cmlidXRlIChhdHRyaWJ1dGUsIHZhbHVlKTsKK30KKwog LyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAK ICAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCmRp ZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRl eCBjYmNmYWJiYTNlOC4uMjM1Y2FiMDUzZTAgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0 LmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuaApAQCAtMTk5OSw2ICsxOTk5LDYxIEBAIGdjY19q aXRfdmVjdG9yX3R5cGVfZ2V0X2VsZW1lbnRfdHlwZSAoZ2NjX2ppdF92ZWN0b3JfdHlwZSAqdmVj dG9yX3R5cGUpOwogZXh0ZXJuIGdjY19qaXRfdHlwZSAqCiBnY2Nfaml0X3R5cGVfdW5xdWFsaWZp ZWQgKGdjY19qaXRfdHlwZSAqdHlwZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfQVRUUklC VVRFUworCisvKiBGdW5jdGlvbiBhdHRyaWJ1dGVzLiAgKi8KK2VudW0gZ2NjX2ppdF9mbl9hdHRy aWJ1dGUKK3sKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVMsCisgIEdDQ19KSVRfRk5fQVRU UklCVVRFX0FMV0FZU19JTkxJTkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0lOTElORSwKKyAg R0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9JTkxJTkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1RB UkdFVCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJV VEVfVklTSUJJTElUWSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQ09MRCwKKyAgR0NDX0pJVF9G Tl9BVFRSSUJVVEVfUkVUVVJOU19UV0lDRSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUFVSRSwK KyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQ09OU1QsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1dF QUssCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX05PTk5VTEwsCisKKyAgLyogTWF4aW11bSB2YWx1 ZSBvZiB0aGlzIGVudW0sIHNob3VsZCBhbHdheXMgYmUgbGFzdC4gKi8KKyAgR0NDX0pJVF9GTl9B VFRSSUJVVEVfTUFYLAorfTsKKworLyogQWRkIGFuIGF0dHJpYnV0ZSB0byBhIGZ1bmN0aW9uLiAg Ki8KK2V4dGVybiB2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUgKGdjY19qaXRf ZnVuY3Rpb24gKmZ1bmMsCisJCQkJZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUp OworCitleHRlcm4gdm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAo Z2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKwkJCQkgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJp YnV0ZSBhdHRyaWJ1dGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlKTsKKworZXh0ZXJu IHZvaWQKK2djY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlICgKKyAg Z2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRy aWJ1dGUsCisgIGNvbnN0IGludCogdmFsdWUsCisgIHNpemVfdCBsZW5ndGgpOworCisvKiBWYXJp YWJsZSBhdHRyaWJ1dGVzLiAgKi8KK2VudW0gZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUKK3sK KyAgR0NDX0pJVF9WQVJJQUJMRV9BVFRSSUJVVEVfVklTSUJJTElUWSwKKworICAvKiBNYXhpbXVt IHZhbHVlIG9mIHRoaXMgZW51bSwgc2hvdWxkIGFsd2F5cyBiZSBsYXN0LiAqLworICBHQ0NfSklU X1ZBUklBQkxFX0FUVFJJQlVURV9NQVgsCit9OworCisvKiBBZGQgYSBzdHJpbmcgYXR0cmlidXRl IHRvIGEgdmFyaWFibGUuICAqLworZXh0ZXJuIHZvaWQKK2djY19qaXRfbHZhbHVlX2FkZF9zdHJp bmdfYXR0cmlidXRlIChnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUsCisJCQkJICAgICBlbnVtIGdj Y19qaXRfdmFyaWFibGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIq IHZhbHVlKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYgLyogX19jcGx1c3BsdXMg Ki8KZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0 Lm1hcAppbmRleCBiNjJmNWRlNzJkMC4uZGZiOGE5ZDUxZmIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQv bGliZ2Njaml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTI3NiwzICsyNzYs MTEgQEAgTElCR0NDSklUX0FCSV8yNSB7CiAgIGdsb2JhbDoKICAgICBnY2Nfaml0X3R5cGVfZ2V0 X3Jlc3RyaWN0OwogfSBMSUJHQ0NKSVRfQUJJXzI0OworCitMSUJHQ0NKSVRfQUJJXzI2IHsKKyAg Z2xvYmFsOgorICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZTsKKyAgICBnY2Nfaml0 X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlOworICAgIGdjY19qaXRfbHZhbHVlX2FkZF9z dHJpbmdfYXR0cmlidXRlOworICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlf YXR0cmlidXRlOworfSBMSUJHQ0NKSVRfQUJJXzI1OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmggYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9h bGwtbm9uLWZhaWxpbmctdGVzdHMuaAppbmRleCBlNzYyNTYzZjliZC4uODQwMDEyMDMzNTIgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCisr KyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCkBAIC0zMiw2 ICszMiw5IEBACiAvKiB0ZXN0LWFkZC1kcml2ZXItb3B0aW9ucy5jOiBXZSBkb24ndCB1c2UgdGhp cyBvbmUsIHNpbmNlIHRoZSBleHRyYSBvcHRpb25zCiAgICBhZmZlY3QgdGhlIHdob2xlIGNvbnRl eHQuICAqLwogCisvKiB0ZXN0LWFsaWFzLWF0dHJpYnV0ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRo ZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQKKyAgIGRvZXNuJ3QgaGF2ZSBhIHZlcmlmeV9jb2RlIGlt cGxlbWVudGF0aW9uLiAgKi8KKwogLyogdGVzdC1hbGlnbm1lbnQuYyAqLwogI2RlZmluZSBjcmVh dGVfY29kZSBjcmVhdGVfY29kZV9hbGlnbm1lbnQKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5 X2NvZGVfYWxpZ25tZW50CkBAIC0zOSw2ICs0Miw5IEBACiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1 bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmM6IFRo aXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAt TzBgIGZsYWcuICAqLworCiAvKiB0ZXN0LWFyaXRoLW92ZXJmbG93LmMgKi8KICNkZWZpbmUgY3Jl YXRlX2NvZGUgY3JlYXRlX2NvZGVfYXJpdGhfb3ZlcmZsb3cKICNkZWZpbmUgdmVyaWZ5X2NvZGUg dmVyaWZ5X2NvZGVfYXJpdGhfb3ZlcmZsb3cKQEAgLTExOSw2ICsxMjUsOSBAQAogI3VuZGVmIGNy ZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC1jb2xkLWF0dHJpYnV0ZS5j OiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQgbmVlZHMKKyAgIHRo ZSBgLU8yYCBmbGFnLiAgKi8KKwogLyogdGVzdC1jb25zdGFudHMuYyAqLwogI2RlZmluZSBjcmVh dGVfY29kZSBjcmVhdGVfY29kZV9jb25zdGFudHMKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5 X2NvZGVfY29uc3RhbnRzCkBAIC0xMjYsNiArMTM1LDkgQEAKICN1bmRlZiBjcmVhdGVfY29kZQog I3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtY29uc3QtYXR0cmlidXRlLmM6IFRoaXMgY2Fu J3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAtTzNgIGZs YWcuICAqLworCiAvKiB0ZXN0LWRlYnVnLXN0cmluZ3MuYyAqLwogI2RlZmluZSBjcmVhdGVfY29k ZSBjcmVhdGVfY29kZV9kZWJ1Z19zdHJpbmdzCiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9j b2RlX2RlYnVnX3N0cmluZ3MKQEAgLTI2OCw2ICsyODAsMTIgQEAKICN1bmRlZiBjcmVhdGVfY29k ZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3Qtbm9pbmxpbmUtYXR0cmlidXRlLmM6IFRo aXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAt TzJgIGZsYWcuICAqLworCisvKiB0ZXN0LW5vbm51bGwtYXR0cmlidXRlLmM6IFRoaXMgY2FuJ3Qg YmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAtTzJgIGZsYWcu ICAqLworCiAvKiB0ZXN0LXByMTAzNTYyLmM6IFdlIGRvbid0IGFkZCB0aGlzIG9uZSwgc2luY2Ug aXQgdG91Y2hlcwogICAgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgY29udGV4dCBhcyBh IHdob2xlLiAgKi8KIApAQCAtMjk5LDYgKzMxNyw5IEBACiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1 bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LXB1cmUtYXR0cmlidXRlLmM6IFRoaXMgY2FuJ3Qg YmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVkcworICAgdGhlIGAtTzNgIGZsYWcu ICAqLworCiAvKiB0ZXN0LXJlYWRpbmctc3RydWN0LmMgKi8KICNkZWZpbmUgY3JlYXRlX2NvZGUg Y3JlYXRlX2NvZGVfcmVhZGluZ19zdHJ1Y3QKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2Nv ZGVfcmVhZGluZ19zdHJ1Y3QKQEAgLTMxMyw3ICszMzQsNyBAQAogI3VuZGVmIGNyZWF0ZV9jb2Rl CiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAotLyogdGVzdC1yZXN0cmljdC5jOiBUaGlzIGNhbid0IGJl IGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQgbmVlZHMKKy8qIHRlc3QtcmVzdHJpY3QtYXR0 cmlidXRlLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdCBuZWVk cwogICAgdGhlIGAtTzNgIGZsYWcuICAqLwogCiAvKiB0ZXN0LXJlZ2lzdGVyLXZhcmlhYmxlLmM6 IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBpdApAQCAtMzUwLDYgKzM3 MSw5IEBACiAjdW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0 LXVzZWQtYXR0cmlidXRlLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBh cyBpdCBuZWVkcworICAgdGhlIGAtTzJgIGZsYWcuICAqLworCiAvKiB0ZXN0LXVzaW5nLWdsb2Jh bC5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX3VzaW5nX2dsb2JhbAogI2Rl ZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV91c2luZ19nbG9iYWwKQEAgLTM2MSw2ICszODUs OSBAQAogICAgb2YgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2FsbG93X3VucmVhY2hhYmxlX2Js b2NrcyBhZmZlY3RzIHRoZSB3aG9sZQogICAgY29udGV4dC4gICovCiAKKy8qIHRlc3QtdmFyaWFi bGUtYXR0cmlidXRlLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHRlc3RjYXNlcyBhcnJheSBhcyBp dAorICAgZG9lc24ndCBoYXZlIGEgdmVyaWZ5X2NvZGUgaW1wbGVtZW50YXRpb24uICAqLworCiAv KiB0ZXN0LXZlY3Rvci10eXBlcy5jYzogV2UgZG9uJ3QgdXNlIHRoaXMsIHNpbmNlIGl0J3MgQysr LiAgKi8KIAogLyogdGVzdC12ZXJzaW9uLmMgKi8KQEAgLTM3Nyw2ICs0MDQsOSBAQAogI3VuZGVm IGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC13ZWFrLWF0dHJpYnV0 ZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQKKyAgIGRvZXNu J3QgaGF2ZSBhIHZlcmlmeV9jb2RlIGltcGxlbWVudGF0aW9uLiAgKi8KKwogLyogTm93IGV4cG9z ZSB0aGUgaW5kaXZpZHVhbCB0ZXN0Y2FzZXMgYXMgaW5zdGFuY2VzIG9mIHRoaXMgc3RydWN0LiAg Ki8KIAogc3RydWN0IHRlc3RjYXNlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9q aXQuZXhwIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvaml0LmV4cAppbmRleCA4YmY3ZTUxYzI0Zi4u NTY5NzIwNjRkMzAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvaml0LmV4cApAQCAtODk5LDggKzg5OSw0MSBAQCBwcm9j IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dCB7IGFyZ3MgfSB7CiAJcGFzcyAiJHthc21fZmls ZW5hbWV9IG91dHB1dCBwYXR0ZXJuIHRlc3QsICR7ZGctb3V0cHV0LXRleHR9IgogCXZlcmJvc2Ug IlBhc3NlZCB0ZXN0IGZvciBvdXRwdXQgcGF0dGVybiAke2RnLW91dHB1dC10ZXh0fSIgMwogICAg IH0KK30KKworIyBBc3N1bWluZyB0aGF0IGEgLnMgZmlsZSBoYXMgYmVlbiB3cml0dGVuIG91dCBu YW1lZAorIyBPVVRQVVRfRklMRU5BTUUsIGNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50IGRvZXNuJ3Qg bWF0Y2gKKyMgdGhlIG91dHB1dCBmaWxlLgorcHJvYyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRw dXQtbm90IHsgYXJncyB9IHsKKyAgICB2ZXJib3NlICJqaXQtdmVyaWZ5LWFzc2VtYmxlcjogJGFy Z3MiCisKKyAgICBzZXQgZGctb3V0cHV0LXRleHQgW2xpbmRleCAkYXJncyAwXQorICAgIHZlcmJv c2UgImRnLW91dHB1dC10ZXh0OiAke2RnLW91dHB1dC10ZXh0fSIKKworICAgIHVwdmFyIDIgbmFt ZSBuYW1lCisgICAgdmVyYm9zZSAibmFtZTogJG5hbWUiCisKKyAgICB1cHZhciAyIHByb2cgcHJv ZworICAgIHZlcmJvc2UgInByb2c6ICRwcm9nIgorICAgIHNldCBhc21fZmlsZW5hbWUgW2ppdC1n ZXQtb3V0cHV0LWZpbGVuYW1lICRwcm9nXQorICAgIHZlcmJvc2UgIiAgYXNtX2ZpbGVuYW1lOiAk e2FzbV9maWxlbmFtZX0iCiAKKyAgICAjIFJlYWQgdGhlIGFzc2VtYmx5IGZpbGUuCisgICAgc2V0 IGYgW29wZW4gJGFzbV9maWxlbmFtZSByXQorICAgIHNldCBjb250ZW50IFtyZWFkICRmXQorICAg IGNsb3NlICRmCisKKyAgICAjIFZlcmlmeSB0aGF0IHRoZSBhc3NlbWJseSBtYXRjaGVzIHRoZSBy ZWdleC4KKyAgICBpZiB7IFtyZWdleHAgJHtkZy1vdXRwdXQtdGV4dH0gJGNvbnRlbnRdIH0gewor CWZhaWwgIiR7YXNtX2ZpbGVuYW1lfSBvdXRwdXQgcGF0dGVybiB0ZXN0LCBpcyAke2NvbnRlbnR9 LCBzaG91bGQgbm90IG1hdGNoICR7ZGctb3V0cHV0LXRleHR9IgorCXZlcmJvc2UgIkZhaWxlZCB0 ZXN0IGZvciBvdXRwdXQgcGF0dGVybiAke2RnLW91dHB1dC10ZXh0fSIgMworICAgIH0gZWxzZSB7 CisJcGFzcyAiJHthc21fZmlsZW5hbWV9IG91dHB1dCBwYXR0ZXJuIHRlc3QsICR7ZGctb3V0cHV0 LXRleHR9IgorCXZlcmJvc2UgIlBhc3NlZCB0ZXN0IGZvciBvdXRwdXQgcGF0dGVybiAke2RnLW91 dHB1dC10ZXh0fSIgMworICAgIH0KIH0KKworCiAjIEFzc3VtaW5nIHRoYXQgYSAubyBmaWxlIGhh cyBiZWVuIHdyaXR0ZW4gb3V0IG5hbWVkCiAjIE9VVFBVVF9GSUxFTkFNRSwgaW52b2tlIHRoZSBk cml2ZXIgdG8gdHJ5IHRvIHR1cm4gaXQgaW50bwogIyBhbiBleGVjdXRhYmxlLCBhbmQgdHJ5IHRv IHJ1biB0aGUgcmVzdWx0LgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1h bGlhcy1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmli dXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViMjkwMDNkZmM5 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbGlhcy1hdHRy aWJ1dGUuYwpAQCAtMCwwICsxLDUwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeDg2 XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19G SUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJM RVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3QtYWxpYXMtYXR0cmli dXRlLmMucyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0J3MgdHJ5IHRv IGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKKwordm9pZCB4eHggKCkge30KK3ZvaWQgZiAoKSBf X2F0dHJpYnV0ZV9fICgoYWxpYXMgKCJ4eHgiKSkpOworICAqLworICBnY2Nfaml0X3R5cGUgKnZv aWRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZ UEVfVk9JRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGB4eHhgIGZ1bmN0aW9uLiAqLworICBnY2Nf aml0X2Z1bmN0aW9uICp4eHhfZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlv biAoY3R4dCwgTlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAg ICAgICAgIHZvaWRfdHlwZSwKKyAgICAgICAgICAieHh4IiwKKyAgICAgICAgICAwLCBOVUxMLAor ICAgICAgICAgIDApOworCisgIC8qIENyZWF0aW5nIHRoZSBgZmAgZnVuY3Rpb24uICovCisgIGdj Y19qaXRfZnVuY3Rpb24gKmZfZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlv biAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfRlVOQ1RJT05fSU1QT1JURUQsCisJCQkJICB2 b2lkX3R5cGUsCisJCQkJICAiZiIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisgIGdjY19q aXRfZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGUoZl9mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJ QlVURV9BTElBUywgInh4eCIpOworCisgIC8qIHZvaWQgeHh4ICgpIHt9ICovCisgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCBOVUxM KTsKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF92b2lkX3JldHVybiAoYmxvY2ssIE5VTEwpOwor fQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAi IiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0 bHkgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi5zZXRc XHMrZix4eHgiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1h bHdheXNfaW5saW5lLWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbHdh eXNfaW5saW5lLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi41YzNmMzg2NjYzZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDE1MyBAQAorLyogeyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNk ZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8gU2V0ICIt TzAiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9JTlRf T1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMCk7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJ TkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRf QVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LWFsd2F5 c19pbmxpbmUtYXR0cmlidXRlLmMucyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK2djY19qaXRf ZnVuY3Rpb24qCitjcmVhdGVfZnVuY3Rpb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJIGNv bnN0IGNoYXIgKmZ1bmNfbmFtZSwKKwkJIGdjY19qaXRfdHlwZSAqaW50X3R5cGUsCisJCSBnY2Nf aml0X3R5cGUgKnBpbnRfdHlwZSkKK3sKKyAgLyogVGhlIGBhYCBmdW5jdGlvbiBhcmd1bWVudCAq LworICBnY2Nfaml0X3BhcmFtICphID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwg TlVMTCwgcGludF90eXBlLCAiYSIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19K SVRfRlVOQ1RJT05fSU5URVJOQUwsCisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVu Y19uYW1lLAorICAgICAgICAgIDEsICZhLAorICAgICAgICAgIDApOworCisgIGdjY19qaXRfYmxv Y2sgKmlmX2NvbmQgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jLCAiaWZf Y29uZCIpOworICBnY2Nfaml0X2Jsb2NrICppZl9ib2R5ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZnVuYywgImlmX2JvZHkiKTsKKyAgZ2NjX2ppdF9ibG9jayAqYWZ0ZXJfaWYg PQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jLCAiYWZ0ZXJfaWYiKTsKKwor ICAvKiBpZiAoIWEpICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9uYWwgKAor ICAgIGlmX2NvbmQsIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgK KyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEsCisgICAgICBn Y2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbnVsbCAo Y3R4dCwgcGludF90eXBlKSksCisgICAgaWZfYm9keSwKKyAgICBhZnRlcl9pZik7CisgIC8qIHJl dHVybiAtMTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAgIGlmX2Jv ZHksIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQs IGludF90eXBlLCAtMSkpOworCisgIC8qIHJldHVybiAqYTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19l bmRfd2l0aF9yZXR1cm4gKAorICAgIGFmdGVyX2lmLCBOVUxMLAorICAgIGdjY19qaXRfbHZhbHVl X2FzX3J2YWx1ZSAoCisgICAgICBnY2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAoCisJZ2NjX2pp dF9wYXJhbV9hc19ydmFsdWUgKGEpLCBOVUxMKSkpOworCisgIHJldHVybiBmdW5jOworfQorCisK K3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0 YSkKK3sKKyAgLyogTGV0J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKK19fYXR0 cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKK3N0YXRpYyBpbmxpbmUgaW50IHJlbW92ZWQgKGlu dCAqYSkgeworICBpZiAoIWEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuICphOwor fQorc3RhdGljIGludCBub3RfcmVtb3ZlZCAoaW50ICphKSB7CisgIGlmICghYSkgeworICAgIHJl dHVybiAtMTsKKyAgfQorICByZXR1cm4gKmE7Cit9CitpbnQgZm9vICgpIHsKKyAgaW50IHggPSAw OworICB4ICs9IHJlbW92ZWQoTlVMTCk7CisgIHggKz0gbm90X3JlbW92ZWQoTlVMTCk7CisgIHJl dHVybiB4OworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5 cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoaW50X3R5cGUpOworCisg IC8qIENyZWF0aW5nIHRoZSBgcmVtb3ZlZGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rp b24gKnJlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAicmVtb3ZlZCIs IGludF90eXBlLCBwaW50X3R5cGUpOworICAvKiBUaGlzIG9uZSBpcyB0byBkZWNsYXJlIHRoZSBm dW5jdGlvbiBhcyAiaW5saW5lIiAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUo cmVtb3ZlZF9mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9JTkxJTkUpOworICAvKiBfX2F0dHJp YnV0ZV9fICgoYWx3YXlzX2lubGluZSkpICovCisgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJp YnV0ZShyZW1vdmVkX2Z1bmMsIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkUpOwor CisgIC8qIENyZWF0aW5nIHRoZSBgbm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0 X2Z1bmN0aW9uICpub3RfcmVtb3ZlZF9mdW5jID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQs ICJub3RfcmVtb3ZlZCIsIGludF90eXBlLCBwaW50X3R5cGUpOworCisgIC8qIENyZWF0aW5nIHRo ZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vX2Z1bmMgPQorICAg IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklU X0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAiZm9vIiwKKwkJCQkg IDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nfaml0X2Jsb2NrICpmb29fYmxvY2sgPSBnY2Nf aml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vX2Z1bmMsIE5VTEwpOworCisgIC8qIEJ1aWxkIGxv Y2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25l d19sb2NhbCAoZm9vX2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIpOworCisgIC8qIGludCB4ID0g MDsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgZm9vX2Jsb2NrLCBO VUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0 eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyogeCArPSByZW1vdmVkKE5VTEwpOyAqLworICBnY2Nf aml0X3J2YWx1ZSAqbnVsbCA9IGdjY19qaXRfY29udGV4dF9udWxsIChjdHh0LCBwaW50X3R5cGUp OworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBmb29fYmxvY2ssIE5V TEwsCisgICAgeCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfY2FsbCAoY3R4dCwgTlVMTCwgcmVtb3ZlZF9mdW5jLCAxLCAmbnVsbCkpOworICAK KyAgLyogeCArPSBub3RfcmVtb3ZlZChOVUxMKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNz aWdubWVudF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9C SU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEws IG5vdF9yZW1vdmVkX2Z1bmMsIDEsICZudWxsKSk7CisKKyAgLyogcmV0dXJuIHg7ICovCisgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChmb29fYmxvY2ssIE5VTEwsIGdjY19qaXRfbHZh bHVlX2FzX3J2YWx1ZSh4KSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1 dC1maWxlLXdhcy1jcmVhdGVkICIiIH0gfSAqLworLyogQ2hlY2sgdGhhdCB0aGUgInJlbW92ZWQi IGZ1bmN0aW9uIHdhcyBpbmxpbmVkLCBidXQgbm90IHRoZSBvdGhlcnMgKi8KKy8qIHsgZGctZmlu YWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90ICIudHlwZVxccytyZW1vdmVkLFxc cytAZnVuY3Rpb24iIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVy LW91dHB1dCAiLnR5cGVcXHMrbm90X3JlbW92ZWQsXFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIudHlwZVxccytmb28sXFxz K0BmdW5jdGlvbiIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWNvbGQtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmli dXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhkYzdlYzVhMzRi Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJp YnV0ZS5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZf NjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K KworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25z KCkgaW4gaGFybmVzcy5oIHRvIHNldCAtTzIgdG8gc2VlIHRoYXQgdGhlIGNvbGQKKyAgIGF0dHJp YnV0ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1Nf U0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAvLyBTZXQgIi1PMiIuCisgIGdjY19qaXRfY29u dGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9O X0xFVkVMLCAyKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5l IE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUg T1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3QtY29sZC1hdHRyaWJ1dGUuYy5zIgorI2lu Y2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAq Y3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBl cXVpdmFsZW50IG9mOgoraW50CitfX2F0dHJpYnV0ZV9fICgoY29sZCkpCit0KCkKK3sKKyAgcmV0 dXJuIC0xOworfQorCisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgZ2NjX2pp dF9mdW5jdGlvbiAqZnVuY190ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChj dHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90 eXBlLAorCQkJCSAgInQiLAorCQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworICBnY2Nfaml0X2Z1 bmN0aW9uX2FkZF9hdHRyaWJ1dGUoZnVuY190LCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9DT0xEKTsK KyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVu Y190LCBOVUxMKTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnJldCA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LAorICAgIGludF90eXBlLAorICAgIC0xKTsKKworICBnY2Nf aml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIE5VTEwsIHJldCk7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVhdGVkICIiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dCAib3JsIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29uc3QtYXR0cmlidXRlLmMg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMDY3NDJkMTYzZgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29uc3QtYXR0cmlidXRlLmMKQEAgLTAsMCAr MSwxMzQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLwor CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxp YmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkgaW4gaGFybmVzcy5o IHRvIHNldCAtTzMgdG8gc2VlIHRoYXQgdGhlIGNvbnN0CisgICBhdHRyaWJ1dGUgYWZmZWN0cyB0 aGUgb3B0aW1pemF0aW9ucy4gKi8KKyNkZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitz dGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFy ICphcmd2MCkKK3sKKyAgLy8gU2V0ICItTzMiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9v cHRpb24oY3R4dCwgR0NDX0pJVF9JTlRfT1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMyk7Cit9 CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAg ICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFN RSAgIm91dHB1dC1vZi10ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVz cy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1 c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6 CitfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQoraW50IGZvbyAoaW50IHgpOworaW50IHh4eCh2b2lk KQoreworICBpbnQgeCA9IDQ1OworICBpbnQgc3VtID0gMDsKKworICB3aGlsZSAoeCA+Pj0gMSkK KyAgICBzdW0gKz0gZm9vICh4KSAqIDI7CisgIHJldHVybiBzdW07Cit9CisgICovCisgIGdjY19q aXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwg R0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmb29gIGZ1bmN0aW9uLiAq LworICBnY2Nfaml0X3BhcmFtICpuID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChj dHh0LCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW1zWzFdID0g e259OworICBnY2Nfaml0X2Z1bmN0aW9uICpmb29fZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lN UE9SVEVELAorICAgICAgICAgIGludF90eXBlLAorICAgICAgICAgICJmb28iLAorICAgICAgICAg IDEsIHBhcmFtcywKKyAgICAgICAgICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmli dXRlKGZvb19mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9DT05TVCk7CisKKyAgLyogQ3JlYXRp bmcgdGhlIGB4eHhgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICp4eHhfZnVuYyA9 CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKwkJCQkgIEdD Q19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICBpbnRfdHlwZSwKKwkJCQkgICJ4eHgiLAor CQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2Nj X2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCBOVUxMKTsKKworICAvKiBCdWlsZCBs b2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfbG9jYWwgKHh4eF9mdW5jLCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2ppdF9sdmFs dWUgKnN1bSA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKHh4eF9mdW5jLCBOVUxM LCBpbnRfdHlwZSwgInN1bSIpOworCisgIC8qIGludCB4ID0gNDUgKi8KKyAgZ2NjX2ppdF9ibG9j a19hZGRfYXNzaWdubWVudCAoCisgICAgYmxvY2ssIE5VTEwsCisgICAgeCwKKyAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDQ1KSk7CisgIC8q IGludCBzdW0gPSAwICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgIGJs b2NrLCBOVUxMLAorICAgIHN1bSwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoY3R4dCwgaW50X3R5cGUsIDApKTsKKworICAvKiB3aGlsZSAoeCA+Pj0gMSkgeyBzdW0g Kz0gZm9vICh4KSAqIDI7IH0gKi8KKyAgZ2NjX2ppdF9ibG9jayAqbG9vcF9jb25kID0KKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsICJsb29wX2NvbmQiKTsKKyAgZ2Nj X2ppdF9ibG9jayAqbG9vcF9ib2R5ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAo eHh4X2Z1bmMsICJsb29wX2JvZHkiKTsKKyAgZ2NjX2ppdF9ibG9jayAqYWZ0ZXJfbG9vcCA9Cisg ICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCAiYWZ0ZXJfbG9vcCIpOwor CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfanVtcCAoYmxvY2ssIE5VTEwsIGxvb3BfY29uZCk7 CisKKworICAvKiBpZiAoeCA+Pj0gMSkgKi8KKyAgLyogU2luY2UgZ2Njaml0IGRvZXNuJ3QgKHll dD8pIGhhdmUgc3VwcG9ydCBmb3IgYD4+PWAgb3BlcmF0b3IsIHdlIHdpbGwgZGVjb21wb3NlIGl0 IGludG86CisgICAgIGBpZiAoeCA9IHggPj4gMSlgICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fz c2lnbm1lbnRfb3AgKAorICAgIGxvb3BfY29uZCwgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRf QklOQVJZX09QX1JTSElGVCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoY3R4dCwgaW50X3R5cGUsIDEpKTsKKyAgLyogVGhlIGNvbmRpdGlvbiBpdHNlbGYgKi8KKyAg Z2NjX2ppdF9ibG9ja19lbmRfd2l0aF9jb25kaXRpb25hbCAoCisgICAgbG9vcF9jb25kLCBOVUxM LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY29tcGFyaXNvbiAoCisgICAgICAgY3R4dCwgTlVM TCwKKyAgICAgICBHQ0NfSklUX0NPTVBBUklTT05fTkUsCisgICAgICAgZ2NjX2ppdF9sdmFsdWVf YXNfcnZhbHVlICh4KSwKKyAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoY3R4dCwgaW50X3R5cGUsIDApKSwKKyAgICBhZnRlcl9sb29wLAorICAgIGxvb3BfYm9keSk7 CisKKyAgLyogc3VtICs9IGZvbyAoeCkgKiAyOyAqLworICBnY2Nfaml0X3J2YWx1ZSAqYXJnID0g Z2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKHgpOworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25t ZW50X29wICgKKyAgICBsb29wX2JvZHksIE5VTEwsCisgICAgeCwKKyAgICBHQ0NfSklUX0JJTkFS WV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wICgKKyAgICAgIGN0 eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULCBpbnRfdHlwZSwKKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwgTlVMTCwgZm9vX2Z1bmMsIDEsICZhcmcp LAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorCWN0eHQsCisJ aW50X3R5cGUsCisJMikpKTsKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9qdW1wIChsb29wX2Jv ZHksIE5VTEwsIGxvb3BfY29uZCk7CisKKyAgLyogcmV0dXJuIHN1bTsgKi8KKyAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKGFmdGVyX2xvb3AsIE5VTEwsIGdjY19qaXRfbHZhbHVlX2Fz X3J2YWx1ZShzdW0pKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZp bGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSBsb29wIHdhcyBvcHRp bWl6ZWQgYXdheSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1 dC1ub3QgImpuZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LW5vaW5saW5lLWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lubGlu ZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ1 NWI0NDkzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5v aW5saW5lLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsMTIxIEBACisvKiB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworLyogV2UgZG9uJ3Qgd2Fu dCBzZXRfb3B0aW9ucygpIGluIGhhcm5lc3MuaCB0byBzZXQgLU8yIHRvIHNlZSB0aGF0IHRoZSBg bm9pbmxpbmVgCisgICBhdHRyaWJ1dGUgYWZmZWN0cyB0aGUgb3B0aW1pemF0aW9ucy4gKi8KKyNk ZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9ucyAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8gU2V0ICIt TzIiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9JTlRf T1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMik7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJ TkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRf QVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LW5vaW5s aW5lLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0 aW9uKgorY3JlYXRlX2Z1bmN0aW9uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBj aGFyICpmdW5jX25hbWUsCisJCSBnY2Nfaml0X3R5cGUgKmludF90eXBlLAorCQkgaW50IHJldHVy bmVkX3ZhbHVlKQoreworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jCisgICAgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2Z1bmN0aW9uKGN0eHQsIE5VTEwsCisJICBHQ0NfSklUX0ZVTkNUSU9OX0lOVEVS TkFMLAorCSAgaW50X3R5cGUsCisJICBmdW5jX25hbWUsCisJICAwLCBOVUxMLAorCSAgMCk7Cisg IGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMs IE5VTEwpOworCisgIGdjY19qaXRfYmxvY2tfYWRkX2V4dGVuZGVkX2FzbSAoYmxvY2ssIE5VTEws ICIiKTsKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCBOVUxMLAorICAg IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgcmV0 dXJuZWRfdmFsdWUpKTsKKworICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdz IHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fICgobm9pbmxp bmUpKQorc3RhdGljIGludCBub3RfcmVtb3ZlZCgpIHsKKyAgYXNtKCIiKTsKKyAgcmV0dXJuIDE7 Cit9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7CisgIGFzbSgiIik7CisgIHJldHVybiAyOworfQor aW50IGZvbyAoKSB7CisgIGludCB4ID0gMDsKKyAgeCArPSByZW1vdmVkKCk7CisgIHggKz0gbm90 X3JlbW92ZWQoKTsKKyAgcmV0dXJuIHg7Cit9CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5 cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lO VCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBub3RfcmVtb3ZlZGAgZnVuY3Rpb24uICovCisgIGdj Y19qaXRfZnVuY3Rpb24gKm5vdF9yZW1vdmVkX2Z1bmMgPQorICAgIGNyZWF0ZV9mdW5jdGlvbiAo Y3R4dCwgIm5vdF9yZW1vdmVkIiwgaW50X3R5cGUsIDEpOworICAvKiBfX2F0dHJpYnV0ZV9fICgo bm9faW5saW5lKSkgKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKG5vdF9yZW1v dmVkX2Z1bmMsIEdDQ19KSVRfRk5fQVRUUklCVVRFX05PSU5MSU5FKTsKKworICAvKiBDcmVhdGlu ZyB0aGUgYHJlbW92ZWRgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpyZW1vdmVk X2Z1bmMgPQorICAgIGNyZWF0ZV9mdW5jdGlvbiAoY3R4dCwgInJlbW92ZWQiLCBpbnRfdHlwZSwg Mik7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmb29gIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1 bmN0aW9uICpmb29fZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4 dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICBpbnRfdHlw ZSwKKwkJCQkgICJmb28iLAorCQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworCisgIGdjY19qaXRf YmxvY2sgKmZvb19ibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb29fZnVuYywg TlVMTCk7CisKKyAgLyogQnVpbGQgbG9jYWxzOiAgKi8KKyAgZ2NjX2ppdF9sdmFsdWUgKnggPQor ICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb29fZnVuYywgTlVMTCwgaW50X3R5cGUs ICJ4Iik7CisKKyAgLyogaW50IHggPSAwOyAqLworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25t ZW50ICgKKyAgICBmb29fYmxvY2ssIE5VTEwsCisgICAgeCwKKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDApKTsKKworICAvKiB4ICs9IHJl bW92ZWQoKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgZm9v X2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEwsIHJlbW92ZWRfZnVuYywgMCwgTlVM TCkpOworICAKKyAgLyogeCArPSBub3RfcmVtb3ZlZCgpOyAqLworICBnY2Nfaml0X2Jsb2NrX2Fk ZF9hc3NpZ25tZW50X29wICgKKyAgICBmb29fYmxvY2ssIE5VTEwsCisgICAgeCwKKyAgICBHQ0Nf SklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwg TlVMTCwgbm90X3JlbW92ZWRfZnVuYywgMCwgTlVMTCkpOworCisgIC8qIHJldHVybiB4OyAqLwor ICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoZm9vX2Jsb2NrLCBOVUxMLCBnY2Nfaml0 X2x2YWx1ZV9hc19ydmFsdWUoeCkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1v dXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlICJyZW1v dmVkIiBmdW5jdGlvbiB3YXMgaW5saW5lZCwgYnV0IG5vdCB0aGUgb3RoZXJzICovCisvKiB7IGRn LWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAiLnR5cGVcXHMrcmVtb3Zl ZC5pc3JhLjAsXFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlm eS1hc3NlbWJsZXItb3V0cHV0ICIudHlwZVxccytub3RfcmVtb3ZlZC5pc3JhLjAsXFxzK0BmdW5j dGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 ICIudHlwZVxccytmb28sXFxzK0BmdW5jdGlvbiIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjMzMDZmODkwNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1ub25udWxsLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisv KiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkgaW4gaGFybmVzcy5oIHRvIHNldCAtTzIgdG8g c2VlIHRoYXQgdGhlIG5vbm51bGwKKyAgIGF0dHJpYnV0ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRp b25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1NfU0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNl dF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQorewor ICAvLyBTZXQgIi1PMiIuCisgIGdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBH Q0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAyKTsKK30KKworI2RlZmluZSBU RVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9P VVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9m LXRlc3Qtbm9ubnVsbC5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVf Y29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExl dCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK19fYXR0cmlidXRlX18oKG5v bm51bGwoMSkpKQoraW50IHQoaW50ICphKSB7CisgIGlmICghYSkgeworICAgIHJldHVybiAtMTsK KyAgfQorICByZXR1cm4gKmE7Cit9CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQor ICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7Cisg IGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGludF90 eXBlKTsKKworICBnY2Nfaml0X3BhcmFtICphID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3Bh cmFtIChjdHh0LCBOVUxMLCBwaW50X3R5cGUsICJhIik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAq ZnVuY190ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAor CSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkgIGludF90eXBlLAorCSAgInQiLAorCSAg MSwgJmEsCisJICAwKTsKKyAgLyogQWRkaW5nIGBub25udWxsKDEpYCBhdHRyaWJ1dGUuICovCisg IGludCBpbmRleGVzWzFdID0gezF9OworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2Fy cmF5X2F0dHJpYnV0ZSAoCisgICAgZnVuY190LAorICAgIEdDQ19KSVRfRk5fQVRUUklCVVRFX05P Tk5VTEwsCisgICAgaW5kZXhlcywKKyAgICAxCisgICk7CisKKyAgLyogaWYgKCFhKSB7CisgICAg cmV0dXJuIC0xOworICB9ICovCisgIGdjY19qaXRfYmxvY2sgKmlmX2NvbmQgPQorICAgIGdjY19q aXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsICJpZl9jb25kIik7CisgIGdjY19qaXRfYmxv Y2sgKmlmX2JvZHkgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsICJp Zl9ib2R5Iik7CisgIGdjY19qaXRfYmxvY2sgKmFmdGVyX2lmID0KKyAgICBnY2Nfaml0X2Z1bmN0 aW9uX25ld19ibG9jayAoZnVuY190LCAiYWZ0ZXJfaWYiKTsKKworICAvKiBpZiAoIWEpICovCisg IGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9uYWwgKAorICAgIGlmX2NvbmQsIE5VTEws CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgKKyAgICAgIGN0eHQsIE5VTEws CisgICAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEsCisgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2 YWx1ZSAoYSksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbnVsbCAoY3R4dCwgcGludF90eXBlKSks CisgICAgaWZfYm9keSwKKyAgICBhZnRlcl9pZik7CisgIC8qIHJldHVybiAtMTsgKi8KKyAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAgIGlmX2JvZHksIE5VTEwsCisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAtMSkpOwor CisgIC8qIHJldHVybiAqYTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAor ICAgIGFmdGVyX2lmLCBOVUxMLAorICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoCisgICAg ICBnY2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAoCisJZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUg KGEpLCBOVUxMKSkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmls ZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlICJpZiBibG9jayIgd2Fz IG9wdGltaXplZCBhd2F5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXIt b3V0cHV0LW5vdCAidGVzdHEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNz ZW1ibGVyLW91dHB1dC1ub3QgIi0xIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt cHVyZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MGM5YmExMzY2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LXB1cmUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7 IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk ZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50 IHNldF9vcHRpb25zKCkgaW4gaGFybmVzcy5oIHRvIHNldCAtTzMgdG8gc2VlIHRoYXQgdGhlIHB1 cmUKKyAgIGF0dHJpYnV0ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBU RVNUX0VTQ0hFV1NfU0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAvLyBTZXQgIi1PMyIuCisg IGdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05f T1BUSU1JWkFUSU9OX0xFVkVMLCAzKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19G SUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJM RVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3QtcHVyZS1hdHRyaWJ1 dGUuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8g aW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRyaWJ1dGVfXyAoKHB1cmUpKQoraW50IGZv byAoaW50IHgpOworaW50IHh4eCh2b2lkKQoreworICBpbnQgeCA9IDQ1OworICBpbnQgc3VtID0g MDsKKworICB3aGlsZSAoeCA+Pj0gMSkKKyAgICBzdW0gKz0gZm9vICh4KSAqIDI7CisgIHJldHVy biBzdW07Cit9CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRf Y29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgLyogQ3JlYXRp bmcgdGhlIGBmb29gIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X3BhcmFtICpuID0KKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW1zWzFdID0ge259OworICBnY2Nfaml0X2Z1bmN0aW9uICpmb29fZnVu YyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAg ICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lNUE9SVEVELAorICAgICAgICAgIGludF90eXBlLAorICAg ICAgICAgICJmb28iLAorICAgICAgICAgIDEsIHBhcmFtcywKKyAgICAgICAgICAwKTsKKyAgZ2Nj X2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZvb19mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVU RV9QVVJFKTsKKworICAvKiBDcmVhdGluZyB0aGUgYHh4eGAgZnVuY3Rpb24uICovCisgIGdjY19q aXRfZnVuY3Rpb24gKnh4eF9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9u IChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGlu dF90eXBlLAorCQkJCSAgInh4eCIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2Nj X2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMs IE5VTEwpOworCisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0K KyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoeHh4X2Z1bmMsIE5VTEwsIGludF90eXBl LCAieCIpOworICBnY2Nfaml0X2x2YWx1ZSAqc3VtID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25l d19sb2NhbCAoeHh4X2Z1bmMsIE5VTEwsIGludF90eXBlLCAic3VtIik7CisKKyAgLyogaW50IHgg PSA0NSAqLworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50ICgKKyAgICBibG9jaywgTlVM TCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCBpbnRfdHlwZSwgNDUpKTsKKyAgLyogaW50IHN1bSA9IDAgKi8KKyAgZ2NjX2ppdF9ibG9ja19h ZGRfYXNzaWdubWVudCAoCisgICAgYmxvY2ssIE5VTEwsCisgICAgc3VtLAorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8q IHdoaWxlICh4ID4+PSAxKSB7IHN1bSArPSBmb28gKHgpICogMjsgfSAqLworICBnY2Nfaml0X2Js b2NrICpsb29wX2NvbmQgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVu YywgImxvb3BfY29uZCIpOworICBnY2Nfaml0X2Jsb2NrICpsb29wX2JvZHkgPQorICAgIGdjY19q aXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywgImxvb3BfYm9keSIpOworICBnY2Nfaml0 X2Jsb2NrICphZnRlcl9sb29wID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4 X2Z1bmMsICJhZnRlcl9sb29wIik7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9qdW1wIChi bG9jaywgTlVMTCwgbG9vcF9jb25kKTsKKworCisgIC8qIGlmICh4ID4+PSAxKSAqLworICAvKiBT aW5jZSBnY2NqaXQgZG9lc24ndCAoeWV0PykgaGF2ZSBzdXBwb3J0IGZvciBgPj49YCBvcGVyYXRv ciwgd2Ugd2lsbCBkZWNvbXBvc2UgaXQgaW50bzoKKyAgICAgYGlmICh4ID0geCA+PiAxKWAgKi8K KyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgbG9vcF9jb25kLCBOVUxM LAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZULAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMSkpOworICAvKiBUaGUg Y29uZGl0aW9uIGl0c2VsZiAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2NvbmRpdGlvbmFs ICgKKyAgICBsb29wX2NvbmQsIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJp c29uICgKKyAgICAgICBjdHh0LCBOVUxMLAorICAgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9ORSwK KyAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKHgpLAorICAgICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpLAorICAgIGFmdGVy X2xvb3AsCisgICAgbG9vcF9ib2R5KTsKKworICAvKiBzdW0gKz0gZm9vICh4KSAqIDI7ICovCisg IGdjY19qaXRfcnZhbHVlICphcmcgPSBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoeCk7CisgIGdj Y19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGxvb3BfYm9keSwgTlVMTCwKKyAg ICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19iaW5hcnlfb3AgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09Q X01VTFQsIGludF90eXBlLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBO VUxMLCBmb29fZnVuYywgMSwgJmFyZyksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisJY3R4dCwKKwlpbnRfdHlwZSwKKwkyKSkpOworICBnY2Nfaml0X2Jsb2Nr X2VuZF93aXRoX2p1bXAgKGxvb3BfYm9keSwgTlVMTCwgbG9vcF9jb25kKTsKKworICAvKiByZXR1 cm4gc3VtOyAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYWZ0ZXJfbG9vcCwg TlVMTCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKHN1bSkpOworfQorCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNr IHRoYXQgdGhlIGxvb3Agd2FzIG9wdGltaXplZCBhd2F5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0 LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAiam5lIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43ZDc0NDRiNjI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw3NyBA QAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisKKy8qIFdlIGRvbid0IHdhbnQgc2V0X29wdGlvbnMoKSBpbiBoYXJuZXNzLmggdG8gc2V0 IC1PMyB0byBzZWUgdGhhdCB0aGUgcmVzdHJpY3QKKwkgYXR0cmlidXRlIGFmZmVjdHMgdGhlIG9w dGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGlj IHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJn djApCit7CisJLy8gU2V0ICItTzMiLgorCWdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlvbihj dHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAzKTsKK30KKworI2Rl ZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0ND X0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0 cHV0LW9mLXRlc3QtcmVzdHJpY3QuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAor Y3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQorewor CS8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6Cit2b2lkIHQoaW50ICpf X3Jlc3RyaWN0X18gYSwgaW50ICpfX3Jlc3RyaWN0X18gYiwgY2hhciAqX19yZXN0cmljdF9fIGMp IHsKKwkqYSArPSAqYzsKKwkqYiArPSAqYzsKK30KKwkqLworCWdjY19qaXRfdHlwZSAqaW50X3R5 cGUgPQorCQlnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQp OworCWdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGlu dF90eXBlKTsKKwlnY2Nfaml0X3R5cGUgKnBpbnRfcmVzdHJpY3RfdHlwZSA9IGdjY19qaXRfdHlw ZV9nZXRfcmVzdHJpY3QocGludF90eXBlKTsKKworCWdjY19qaXRfdHlwZSAqdm9pZF90eXBlID0K KwkJZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVk9JRCk7CisK KwlnY2Nfaml0X3BhcmFtICphID0KKwkJZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwg TlVMTCwgcGludF9yZXN0cmljdF90eXBlLCAiYSIpOworCWdjY19qaXRfcGFyYW0gKmIgPQorCQln Y2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3Jlc3RyaWN0X3R5cGUs ICJiIik7CisJZ2NjX2ppdF9wYXJhbSAqYyA9CisJCWdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0g KGN0eHQsIE5VTEwsIHBpbnRfcmVzdHJpY3RfdHlwZSwgImMiKTsKKwlnY2Nfaml0X3BhcmFtICpw YXJhbXNbM10gPSB7YSwgYiwgY307CisKKwlnY2Nfaml0X2Z1bmN0aW9uICpmdW5jX3QgPQorCQln Y2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCQlHQ0NfSklUX0ZV TkNUSU9OX0VYUE9SVEVELAorCQkJCQl2b2lkX3R5cGUsCisJCQkJCSJ0IiwKKwkJCQkJMywgcGFy YW1zLAorCQkJCQkwKTsKKworCWdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlv bl9uZXdfYmxvY2sgKGZ1bmNfdCwgTlVMTCk7CisKKwkvKiAqYSArPSAqYzsgKi8KKwlnY2Nfaml0 X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdjY19qaXRfcnZh bHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksIE5VTEwpLAorCQlH Q0NfSklUX0JJTkFSWV9PUF9QTFVTLAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJ Z2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChjKSwg TlVMTCkpKTsKKwkvKiAqYiArPSAqYzsgKi8KKwlnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50 X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdjY19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nf aml0X3BhcmFtX2FzX3J2YWx1ZSAoYiksIE5VTEwpLAorCQlHQ0NfSklUX0JJTkFSWV9PUF9QTFVT LAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJZ2NjX2ppdF9ydmFsdWVfZGVyZWZl cmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChjKSwgTlVMTCkpKTsKKworCWdjY19qaXRf YmxvY2tfZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1m aW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICJhZGRsXFxzKyVlYXgsXFxz KyglcmRpKQorXFxzK2FkZGxcXHMrJWVheCxcXHMrKCVyc2kpIiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uY2IyMDk1MmM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXVzZWQtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisj ZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAi LU8yIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5U X09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElM SU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5E X0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC11c2Vk LWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9u KgorY3JlYXRlX2Z1bmN0aW9uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFy ICpmdW5jX25hbWUsCisJCSBnY2Nfaml0X3R5cGUgKmludF90eXBlLAorCQkgaW50IHJldHVybmVk X3ZhbHVlKQoreworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05f SU5URVJOQUwsCisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVuY19uYW1lLAorICAg ICAgICAgIDAsIE5VTEwsCisgICAgICAgICAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Js b2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsIE5VTEwpOworICBnY2Nfaml0 X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoZm9vX2Jsb2NrLCBOVUxMLAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgcmV0dXJuZWRfdmFsdWUp KTsKKworICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmpl Y3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKK3N0YXRpYyBpbnQg bm90X3JlbW92ZWQoKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVy biAyOyB9CitpbnQgZm9vKCkgeworICBpbnQgeCA9IDA7CisgIHggKz0gbm90X3JlbW92ZWQoKTsK KyAgeCArPSByZW1vdmVkKCk7CisgIHJldHVybiB4OworfQorICAqLworICBnY2Nfaml0X3R5cGUg KmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRf VFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5nIHRoZSBgbm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAq LworICBnY2Nfaml0X2Z1bmN0aW9uICpub3RfcmVtb3ZlZF9mdW5jID0KKyAgICBjcmVhdGVfZnVu Y3Rpb24gKGN0eHQsICJub3RfcmVtb3ZlZCIsIGludF90eXBlLCAxKTsKKyAgLyogX19hdHRyaWJ1 dGVfXyAoKHVzZWQpKSAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3Jl bW92ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCk7CisKKyAgLyogQ3JlYXRpbmcg dGhlIGByZW1vdmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqcmVtb3ZlZF9m dW5jID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQsICJyZW1vdmVkIiwgaW50X3R5cGUsIDIp OworCisgIC8qIENyZWF0aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5j dGlvbiAqZm9vX2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQs IE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUs CisJCQkJICAiZm9vIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nfaml0X2Js b2NrICpmb29fYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vX2Z1bmMsIE5V TEwpOworCisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAg ICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vX2Z1bmMsIE5VTEwsIGludF90eXBlLCAi eCIpOworCisgIC8qIGludCB4ID0gMDsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyogeCArPSByZW1v dmVkKCk7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19i bG9jaywgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCByZW1vdmVkX2Z1bmMsIDAsIE5VTEwp KTsKKyAgCisgIC8qIHggKz0gbm90X3JlbW92ZWQoKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJ VF9CSU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5V TEwsIG5vdF9yZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsKKworICAvKiByZXR1cm4geDsgKi8KKyAg Z2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19ibG9jaywgTlVMTCwgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlKHgpKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0 cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSAicmVtb3Zl ZCIgZnVuY3Rpb24gd2FzIGlubGluZWQsIGJ1dCBub3QgdGhlIG90aGVycyAqLworLyogeyBkZy1m aW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi50eXBlXFxzK3JlbW92ZWQs XFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJs ZXItb3V0cHV0ICIudHlwZVxccytub3RfcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK2Zvbyxc XHMrQGZ1bmN0aW9uIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtdmFyaWFibGUtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZhcmlh YmxlLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5l YTg1NGZmNGE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt dmFyaWFibGUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9D T01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVU X0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0 LXZhcmlhYmxlLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK2ludCBQUklWQVRF IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSA9IDQyOworaW50IFBVQkxJ QyA9IDEyOworICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5n IHRoZSBgUFJJVkFURWAgdmFyaWFibGUuICovCisgIGdjY19qaXRfbHZhbHVlICpwcml2YXRlID0g Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVMTCwgR0NDX0pJVF9HTE9C QUxfRVhQT1JURUQsIGludF90eXBlLCAiUFJJVkFURSIpOworICBnY2Nfaml0X2x2YWx1ZV9hZGRf c3RyaW5nX2F0dHJpYnV0ZSAocHJpdmF0ZSwKKyAgICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVU RV9WSVNJQklMSVRZLCAiaGlkZGVuIik7CisgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQy KTsKKyAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocHJpdmF0ZSwgcnZh bCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBQVUJMSUNgIHZhcmlhYmxlLiAqLworICBnY2Nfaml0 X2x2YWx1ZSAqcHVibGljID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAg TlVMTCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsIGludF90eXBlLCAiUFVCTElDIik7CisgIGdj Y19qaXRfcnZhbHVlICpydmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAxMik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKHB1YmxpYywgcnZhbDIpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0 LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQg dGhlIGF0dHJpYnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0bHkgKi8KKy8qIHsgZGctZmluYWwgeyBq aXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi5oaWRkZW5cXHMrUFJJVkFURSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIuZ2xvYmxcXHMrUFJJ VkFURSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 LW5vdCAiLmhpZGRlblxccytQVUJMSUMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJp ZnktYXNzZW1ibGVyLW91dHB1dCAiLmdsb2JsXFxzK1BVQkxJQyIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjU0NmFkZTFjM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisj ZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBH Q0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJv dXRwdXQtb2YtdGVzdC13ZWFrLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgor Cit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2Rh dGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK19f YXR0cmlidXRlX18gKCh3ZWFrKSkKK3ZvaWQgZiAoKSB7fQorICAqLworICBnY2Nfaml0X3R5cGUg KnZvaWRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklU X1RZUEVfVk9JRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmYCBmdW5jdGlvbi4gKi8KKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqZl9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9u IChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIHZv aWRfdHlwZSwKKwkJCQkgICJmIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKyAgZ2NjX2pp dF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfV0VB Syk7CisKKyAgLyogdm9pZCBmICgpIHt9ICovCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2Nj X2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tf ZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7 IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0 aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIud2Vha1xccytmIiB9IH0gKi8KLS0gCjIu MzQuMQoK --000000000000d1f289060ea03db9--