<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>122460</bug_id>
          
          <creation_ts>2013-10-07 12:12:34 -0700</creation_ts>
          <short_desc>Transition op_new_* JITStubs to JIT operations</short_desc>
          <delta_ts>2013-10-14 10:59:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>937176</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-07 12:12:34 -0700</bug_when>
    <thetext>Move the following JITStubs to CCallHelper functions placing the new function in JITOperations:
    cti_op_new_array
    cti_op_new_array_with_size
    cti_op_new_array_buffer
    cti_op_new_func
    cti_op_new_func_exp
    cti_op_new_object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938807</commentid>
    <comment_count>1</comment_count>
      <attachid>213990</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-11 08:42:33 -0700</bug_when>
    <thetext>Created attachment 213990
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938811</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-11 08:43:49 -0700</bug_when>
    <thetext>Attachment 213990 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/jit/JSInterfaceJIT.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JIT.h:54:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938833</commentid>
    <comment_count>3</comment_count>
      <attachid>213990</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-11 09:54:29 -0700</bug_when>
    <thetext>Comment on attachment 213990
the patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=213990&amp;action=review

Please make the changes suggested.

&gt; Source/JavaScriptCore/jit/JIT.h:872
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_EAapJcpZ, int, ArrayAllocationProfile*, GPRReg, int);
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_EAapJcpZ, int, ArrayAllocationProfile*, const JSValue*, int);

Make the int arguments int32_t.

&gt; Source/JavaScriptCore/jit/JIT.h:879
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_EP, int, void*);
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_ESt, int, Structure*);

Please move these up with the other J_* call operations.

&gt; Source/JavaScriptCore/jit/JIT.h:893
&gt; +#if USE(JSVALUE64)
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_EAapJ, int, ArrayAllocationProfile*, GPRReg);
&gt; +#else
&gt; +        MacroAssembler::Call callOperation(J_JITOperation_EAapJ, int, ArrayAllocationProfile*, GPRReg, GPRReg);
&gt; +#endif
&gt; +

Move these to be with the other callOperation(J_*) declarations.

&gt; Source/JavaScriptCore/jit/JITInlines.h:43
&gt; +#if USE(JSVALUE32_64)
&gt; +// EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned even-numbered register (r0, r2 or [sp]).
&gt; +// To avoid assemblies from using wrong registers, let&apos;s occupy r1 or r3 with a dummy argument when necessary.
&gt; +#if (COMPILER_SUPPORTS(EABI) &amp;&amp; CPU(ARM)) || CPU(MIPS)
&gt; +#define EABI_32BIT_DUMMY_ARG      TrustedImm32(0),
&gt; +#else
&gt; +#define EABI_32BIT_DUMMY_ARG
&gt; +#endif
&gt; +#endif // (JSVALUE32_64)
&gt; +

This is already in ToT along with the define of SH4_32BIT_DUMMY_ARG.  This may be a better location for the defines.  Rebaseline and either put both defines here or keep the current location.

&gt; Source/JavaScriptCore/jit/JITInlines.h:264
&gt; +ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EAapJcpZ operation, int dst, ArrayAllocationProfile* arg1, GPRReg arg2, int arg3)

Make the int argument int32_t.

&gt; Source/JavaScriptCore/jit/JITInlines.h:270
&gt; +ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EAapJcpZ operation, int dst, ArrayAllocationProfile* arg1, const JSValue* arg2, int arg3)

Make the int argument int32_t.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1244
&gt; +    ArrayAllocationProfile* profile = currentInstruction[4].u.arrayAllocationProfile;
&gt; +    int valuesIndex = currentInstruction[2].u.operand;
&gt; +    int size = currentInstruction[3].u.operand;
&gt; +    move(TrustedImmPtr(valuesIndex * sizeof(Register)), regT0);
&gt; +    addPtr(callFrameRegister, regT0);
&gt; +    callOperation(operationNewArrayWithProfile, dst, profile, regT0, size);

Handle the arguments in byte code order.
I don&apos;t think you need temporaries for all the arguments.
Use the three op addPtr() variant - addPtr(TrustedImm32(valuesIndex * sizeof(Register)), callFrameRegister, regT0)

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1251
&gt; +    int dst = currentInstruction[1].u.operand;
&gt; +    ArrayAllocationProfile* profile = currentInstruction[3].u.arrayAllocationProfile;
&gt; +    int sizeIndex = currentInstruction[2].u.operand;

ditto

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1267
&gt; +    ArrayAllocationProfile* profile = currentInstruction[4].u.arrayAllocationProfile;
&gt; +    int valuesIndex = currentInstruction[2].u.operand;
&gt; +    int size = currentInstruction[3].u.operand;
&gt; +    const JSValue* values = codeBlock()-&gt;constantBuffer(valuesIndex);

ditto

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:784
&gt; +EncodedJSValue JIT_OPERATION operationNewObjectReturningJSValue(ExecState* exec, Structure* structure)
&gt; +{
&gt; +    VM* vm = &amp;exec-&gt;vm();
&gt; +    NativeCallFrameTracer tracer(vm, exec);
&gt; +    
&gt; +    return JSValue::encode(constructEmptyObject(exec, structure));
&gt; +}

Instead of adding this new operation, move the DFG version of operationNewObject to JITOperations and then make a callOperation(C_JITOperation_ESt) for the baseline JIT that will emitStoreCell() the result.

&gt; Source/JavaScriptCore/jit/JITOperations.h:-59
&gt; -    V: void
&gt; -    J: JSValue
&gt; -    P: pointer (void*)
&gt; +    A: JSArray*
&gt; +    Aap: ArrayAllocationProfile*
&gt;      C: JSCell*
&gt;      Cb: CodeBlock*
&gt; -    A: JSArray*
&gt; +    D: double
&gt; +    I: StringImpl*
&gt; +    J: JSValue
&gt; +    Jcp: const JSValue*
&gt; +    P: pointer (void*)
&gt;      R: Register
&gt;      S: size_t
&gt; +    St: Structure*
&gt; +    V: void
&gt;      Z: int32_t
&gt; -    D: double
&gt; -    I: StringImpl*

If you are going to reorganize these, please add the missing ones (InlineCallFrame*, JSString*, ...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938885</commentid>
    <comment_count>4</comment_count>
      <attachid>214003</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-11 11:21:24 -0700</bug_when>
    <thetext>Created attachment 214003
patch 2: with Michael&apos;s feedback applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938886</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-11 11:22:17 -0700</bug_when>
    <thetext>Attachment 214003 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/jit/JSInterfaceJIT.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JIT.h:54:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938897</commentid>
    <comment_count>6</comment_count>
      <attachid>214003</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-11 11:35:42 -0700</bug_when>
    <thetext>Comment on attachment 214003
patch 2: with Michael&apos;s feedback applied.

View in context: https://bugs.webkit.org/attachment.cgi?id=214003&amp;action=review

r+

&gt; Source/JavaScriptCore/jit/JITInlines.h:1068
&gt; +#undef EABI_32BIT_DUMMY_ARG
&gt; +#undef SH4_32BIT_DUMMY_ARG

This should be inside the #if USE(JSVALUE32_64) / #endif.

Move back to ToT placement for these defines. This puts the #define / #undef immediately around the use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938919</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-11 12:04:28 -0700</bug_when>
    <thetext>Thanks for the review.

Per our offline discussion, I&apos;ve moved the J_JITOperation_EAapJ callOperation() into the JSVALUE32_64 block along with the EABI macros. 

Landed in r157313: &lt;http://trac.webkit.org/r157313&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939539</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-14 10:59:44 -0700</bug_when>
    <thetext>Nice!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213990</attachid>
            <date>2013-10-11 08:42:33 -0700</date>
            <delta_ts>2013-10-11 11:21:24 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122460.patch</filename>
            <type>text/plain</type>
            <size>29926</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEzLTEwLTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uIG9wX25ld18qIEpJVFN0dWJzIHRvIEpJVCBvcGVyYXRpb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDYwLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc286CisgICAgICAgIC0g
UmVtb3ZlZCB0aGUgcmVkdW5kYW50IG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbigpLiAg
SXQgaXMgaWRlbnRpY2FsIHRvCisgICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNr
KCkuCisgICAgICAgIC0gU29ydGVkIGNhbGxPcGVyYXRpb25zIGluIEpJVC5oIGFuZCBKSVRJbmxp
bmVzLmggdG8gYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorICAgICAgICAtIFNvcnRlZCBKSVQg
b3BlcmF0aW9uIHNpZ25hdHVyZSBrZXlzIGluIHRoZSBjb21tZW50IGluIEpJVE9wZXJhdGlvbnMu
aC4KKyAgICAgICAgLSBSZW1vdmVkIHRoZSB1bnVzZWQgcmV0dXJuVmFsdWUyUmVnaXN0ZXIgZGVm
aW5pdGlvbiBmb3IgWDg2XzY0LgorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d0Z1bmN0aW9uRXhwcmVzc2lvbik6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmV3X2Z1bmNfZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV9idWZmZXIpOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmg6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisKIDIwMTMtMTAt
MTEgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZUBjaXNjby5jb20+CiAKICAgICAgICAgW3No
NF0gRml4IGJ1aWxkIGFmdGVyIHIxNTcyMDkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzI5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MCwy
NiArNzkwLDYgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aQogICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCi17Ci0gICAgQVNTRVJUKGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhl
Yy0+c2NvcGUoKSkpOwotfQotCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVu
Y3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFi
bGVBc0NlbGwpCi17Ci0gICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJp
dHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKLQotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPQotICAgICAgICBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpOwotICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhlYy0+
c2NvcGUoKSk7Ci19Ci0KIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNP
YmplY3RUeXBlKGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NzI5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsOCArMTAwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1l
bnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFy
Z3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3Rh
dGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
LUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhl
Y1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlv
bihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NzI5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Mzg5LDcgKzQzODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3RnVuY3Rpb25FCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNr
LAogICAgICAgICByZXN1bHRHUFIsCiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5mdW5jdGlv
bkV4cHIobm9kZS0+ZnVuY3Rpb25FeHBySW5kZXgoKSkpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5MiwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgVHJ1c3Rl
ZEltbTMyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxs
QXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgfQor
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgcmVzZXRD
YWxsQXJndW1lbnRzKCk7CkBAIC0yMzcsNiArMjQ2LDI0IEBAIHB1YmxpYzoKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwg
VHJ1c3RlZEltbTMyIGFyZzMpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
Mik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJn
MSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW1Q
dHIgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtODIzLDYg
Kzg1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0
ZWRJbW0zMiBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAgIG1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7
CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAg
IHsKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIsIGFyZzMpOwpAQCAtOTEy
LDYgKzk0NywyMiBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQ
UlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAgIG1vdmUoYXJnMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3Rl
ZEltbTMyIGFyZzMpCisgICAgeworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAg
ICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgY2xh
c3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBK
SVQ7CkBAIC04NjcsMTEgKzg2OCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyJik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
JiwgaW50KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FLCBpbnQpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQLCBpbnQsIHZvaWQqKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwgaW50LCBB
cnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBpbnQpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKY3BaLCBpbnQsIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25zdCBKU1ZhbHVlKiwgaW50KTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQywgaW50LCBK
U0NlbGwqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJ
VE9wZXJhdGlvbl9FQ0MsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklE
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJh
dGlvbl9FSkosIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VPSnNzLCBSZWdpc3RlcklELCBS
ZWdpc3RlcklEKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FUCwgaW50LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVN0LCBpbnQsIFN0cnVjdHVyZSopOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSk7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihW
X0pJVE9wZXJhdGlvbl9FQ2IsIENvZGVCbG9jayopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oWl9KSVRP
cGVyYXRpb25fRSk7CkBAIC04ODAsNiArODg1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiwg
UmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAjZW5kaWYK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUFhcEosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIEdQUlJlZyk7CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKLCBpbnQsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUq
LCBHUFJSZWcsIEdQUlJlZyk7CisjZW5kaWYKKwogICAgICAgICBKdW1wIGNoZWNrU3RydWN0dXJl
KFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAKICAgICAgICAgdm9pZCBy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDE2IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCiAKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGlu
dGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25l
ZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCisvLyBUbyBhdm9pZCBh
c3NlbWJsaWVzIGZyb20gdXNpbmcgd3JvbmcgcmVnaXN0ZXJzLCBsZXQncyBvY2N1cHkgcjEgb3Ig
cjMgd2l0aCBhIGR1bW15IGFyZ3VtZW50IHdoZW4gbmVjZXNzYXJ5LgorI2lmIChDT01QSUxFUl9T
VVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKSkgfHwgQ1BVKE1JUFMpCisjZGVmaW5lIEVBQklfMzJC
SVRfRFVNTVlfQVJHICAgICAgVHJ1c3RlZEltbTMyKDApLAorI2Vsc2UKKyNkZWZpbmUgRUFCSV8z
MkJJVF9EVU1NWV9BUkcKKyNlbmRpZgorI2VuZGlmIC8vIChKU1ZBTFVFMzJfNjQpCisKIG5hbWVz
cGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZURvdWJsZShpbnQgc3JjKQpAQCAtMjM3LDkgKzI0NywzNSBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAotQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRVAgb3BlcmF0aW9uLCBpbnQgZHN0LCB2b2lkKiBwb2ludGVyKQorI2lmIFVTRShKU1ZB
TFVFNjQpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSiBvcGVyYXRpb24sIGludCBkc3QsIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBhcmcyKQogewotICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihhcmcxKSwgYXJnMik7CisgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsK
K30KKyNlbHNlCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSiBvcGVyYXRpb24sIGludCBkc3QsIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUqIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQp
Cit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSks
IEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKKyAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBk
c3QpOworfQorI2VuZGlmCisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKY3BaIG9wZXJhdGlvbiwgaW50IGRz
dCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogYXJnMSwgR1BSUmVnIGFyZzIsIGludCBhcmczKQor
eworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBh
cmcyLCBUcnVzdGVkSW1tMzIoYXJnMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VBYXBKY3BaIG9wZXJhdGlvbiwgaW50IGRzdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSog
YXJnMSwgY29uc3QgSlNWYWx1ZSogYXJnMiwgaW50IGFyZzMpCit7CisgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSksIFRydXN0ZWRJbW1QdHIoYXJnMiks
IFRydXN0ZWRJbW0zMihhcmczKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKworQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUMgb3BlcmF0aW9uLCBpbnQgZHN0LCBKU0NlbGwqIGNlbGwpCit7CisgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9
CiAKQEAgLTI2Nyw2ICszMDMsMTggQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgaW50IGRzdCwgdm9pZCogcG9pbnRl
cikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2lu
dGVyKSk7CisgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwg
aW50IGRzdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKK30K
KwogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
bikKIHsKICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMTAyNSw2ICsxMDczLDgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAorI3VuZGVmIEVBQklfMzJCSVRfRFVNTVlfQVJHCisKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCiAjZW5kaWYgLy8gSklUSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTcyOTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfbmV3X29iamVjdCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3Ry
dWN0dXJlKCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0UmV0dXJuaW5nSlNWYWx1ZSwgZHN0LCBzdHJ1Y3R1cmUpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMyw5IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfb2JqZWN0KTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKSkpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3RSZXR1cm5pbmdKU1ZhbHVlLCBkc3QsIHN0cnVj
dHVyZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX2hhc19pbnN0YW5jZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIxMyw5ICsxMjEzLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogI2VuZGlmCiAgICAgfQogCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jKTsKLSAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7Cisg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRl
Y2woY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCBmdW5jRXhlYyk7CiAKICAgICBpZiAoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpICAgICAgICAK
QEAgLTEyMjksMzkgKzEyMjgsNDQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1
Y3Rpb24qIAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfbmV3X2Z1bmNfZXhwKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4cHIgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgZnVuY0V4cHIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlKSk7Ci0gICAgc3R1
YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTsKKyAgICBpbnQgdmFsdWVzSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGludCBzaXplID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwg
cmVnVDApOworICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBwcm9maWxlLCByZWdU
MCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LmFycmF5QWxsb2NhdGlvblByb2ZpbGU7
CisgICAgaW50IHNpemVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
aXplSW5kZXgsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIHByb2ZpbGUsIHJlZ1QwKTsKICNlbHNlCi0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgZW1p
dExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcHJvZmlsZSwgcmVnVDEsIHJlZ1Qw
KTsKICNlbmRpZgotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSkpOwotICAgIHN0dWJDYWxs
LmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV9idWZmZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5X2J1ZmZl
cik7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSkpOwotICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgaW50IHZhbHVlc0luZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSlNWYWx1ZSogdmFsdWVzID0gY29kZUJs
b2NrKCktPmNvbnN0YW50QnVmZmVyKHZhbHVlc0luZGV4KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5QnVmZmVyV2l0aFByb2ZpbGUsIGRzdCwgcHJvZmlsZSwgdmFsdWVzLCBz
aXplKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzI5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDEyICsyNywxNCBAQAogI2lmIEVOQUJMRShKSVQpCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogCisjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQ
YXRocy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldy
YXBwZXJzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJSZXBhdGNoLmgiCiAKQEAgLTc0Myw2ICs3NDUsNDQgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSGFzUHJvcGVydAogfQogICAgIAogCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFs
bG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGludCBzaXpl
KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0
QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgcHJvZmlsZSwgdmFsdWVzLCBzaXplKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXJXaXRo
UHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50IHNpemUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJheShleGVjLCBwcm9maWxlLCB2YWx1
ZXMsIHNpemUpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUqIHByb2ZpbGUsIEVuY29kZWRKU1ZhbHVlIHNpemUpCit7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgSlNWYWx1ZSBzaXplVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoc2l6ZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgcHJv
ZmlsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzaXplVmFsdWUpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VSVChmdW5jdGlv
bkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSks
IGV4ZWMtPnNjb3BlKCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdPYmplY3RSZXR1cm5pbmdKU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKK30KKwogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBl
eGVjLCB2b2lkKiByZWdleHBQdHIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTcy
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogLy8gdGhpcyBoZWxw
cyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVu
dHMhCiAvKgogICAgIEtleToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBv
aW50ZXIgKHZvaWQqKQorICAgIEE6IEpTQXJyYXkqCisgICAgQWFwOiBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKgogICAgIEM6IEpTQ2VsbCoKICAgICBDYjogQ29kZUJsb2NrKgotICAgIEE6IEpTQXJy
YXkqCisgICAgRDogZG91YmxlCisgICAgSTogU3RyaW5nSW1wbCoKKyAgICBKOiBKU1ZhbHVlCisg
ICAgSmNwOiBjb25zdCBKU1ZhbHVlKgorICAgIFA6IHBvaW50ZXIgKHZvaWQqKQogICAgIFI6IFJl
Z2lzdGVyCiAgICAgUzogc2l6ZV90CisgICAgU3Q6IFN0cnVjdHVyZSoKKyAgICBWOiB2b2lkCiAg
ICAgWjogaW50MzJfdAotICAgIEQ6IGRvdWJsZQotICAgIEk6IFN0cmluZ0ltcGwqCiAqLwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRSkoRXhl
Y1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwpAQCAtNzQsOSArNzcsMTIgQEAgdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9F
UCkoRXhlY1N0YXRlKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUFhcEopKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWikoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSosIGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRlKiwgdm9p
ZCosIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklU
T3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSos
IHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRl
KiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSos
IGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKQEAgLTIxOSw2ICsy
MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Dbwogc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmCiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
U3RyaW5nKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGludDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldpdGhQ
cm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25zdCBKU1ZhbHVl
KiB2YWx1ZXMsIGludDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZShFeGVjU3RhdGUq
LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpTVmFsdWUgc2l6ZSkgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFJldHVybmluZ0pTVmFsdWUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5BTDsKIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NzI5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzYsMTMgKzQzNiw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIGhhbmRsZV93
YXRjaGQKICAgICB9CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3
X29iamVjdCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5zdHJ1Y3R1cmUoKSk7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV9pZF9nZW5lcmljKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKQEAgLTExMzksMTQgKzExMzIsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mdW5jKQotewotICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICAKLSAgICBBU1NFUlQoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29k
ZSB8fCAhc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCkgfHwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LT52bSgpLCBzdGFja0ZyYW1lLmFyZ3NbMF0uZnVuY3Rpb24oKSwgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPnNjb3BlKCkpOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1
c2hfYWN0aXZhdGlvbikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CkBAIC0xMjAyLDI3ICsxMTg3LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJv
ZmlsZV9kaQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2FycmF5KQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhl
ZChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzJdLmFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oJnN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKV0pLCBzdGFja0ZyYW1l
LmFyZ3NbMV0uaW50MzIoKSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwg
b3BfbmV3X2FycmF5X3dpdGhfc2l6ZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3Rh
Y2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKEpT
T2JqZWN0Kiwgb3BfbmV3X2FycmF5X2J1ZmZlcikKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KHN0YWNrRnJh
bWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMl0uYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKHN0YWNr
RnJhbWUuYXJnc1swXS5pbnQzMigpKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCkpOwotfQot
CiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCiB7CkBAIC0xNDQ0LDE4ICsxNDA4LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCosIG9wX2xvYWRfdmFyYQogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAKLURFRklO
RV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2Z1bmNfZXhwKQotewotICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IHN0YWNrRnJhbWUuYXJnc1swXS5mdW5jdGlvbigpOwotICAgIEpTRnVuY3Rpb24qIGZ1bmMg
PSBKU0Z1bmN0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBmdW5jdGlvbiwgY2FsbEZyYW1l
LT5zY29wZSgpKTsKLSAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUo
KSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKSB8fCBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0KLSAgICByZXR1
cm4gZnVuYzsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3Rocm93KQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDE1NzI5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDEyICszNDgsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2Vv
ZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV90b19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19hcnJheShTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKLUpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUpTT2JqZWN0KiBK
SVRfU1RVQiBjdGlfb3BfbmV3X2FycmF5X2J1ZmZlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKLUpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2Z1bmMoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX25l
d19mdW5jX2V4cChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUpTT2JqZWN0
KiBKSVRfU1RVQiBjdGlfb3BfbmV3X29iamVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHVz
aF9uYW1lX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBK
SVRfU1RVQiBjdGlfb3BfcHVzaF93aXRoX3Njb3BlKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0lu
dGVyZmFjZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBob3dldmVyIHRoZSBjb2RlIHdpbGwgc3RpbGwgZnVuY3Rpb24gY29y
cmVjdGx5LgogI2lmIENQVShYODZfNjQpCiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJldHVyblZhbHVlUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWUyUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVk
eDsKICAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FjaGVkUmVzdWx0UmVnaXN0ZXIg
PSBYODZSZWdpc3RlcnM6OmVheDsKICNpZiAhT1MoV0lORE9XUykKICAgICAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplZGk7
Cg==
</data>
<flag name="review"
          id="236460"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214003</attachid>
            <date>2013-10-11 11:21:24 -0700</date>
            <delta_ts>2013-10-11 11:35:42 -0700</delta_ts>
            <desc>patch 2: with Michael&apos;s feedback applied.</desc>
            <filename>bug-122460.patch</filename>
            <type>text/plain</type>
            <size>31235</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDEzLTEwLTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBU
cmFuc2l0aW9uIG9wX25ld18qIEpJVFN0dWJzIHRvIEpJVCBvcGVyYXRpb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDYwLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc286CisgICAgICAgIC0g
UmVtb3ZlZCB0aGUgcmVkdW5kYW50IG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbigpLiAg
SXQgaXMgaWRlbnRpY2FsIHRvCisgICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNr
KCkuCisgICAgICAgIC0gU29ydGVkIEpJVCBvcGVyYXRpb24gc2lnbmF0dXJlIGtleXMgaW4gdGhl
IGNvbW1lbnQgaW4gSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAtIFJlbW92ZWQgdGhlIHVudXNl
ZCByZXR1cm5WYWx1ZTJSZWdpc3RlciBkZWZpbml0aW9uIGZvciBYODZfNjQuCisKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAg
KiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZnVuYyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHApOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X2J1
ZmZlcik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvSlNJ
bnRlcmZhY2VKSVQuaDoKKwogMjAxMy0xMC0xMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFNlcGFyYXRlIG91dCBhcnJheSBpdGVyYXRpb24gaW50cmluc2ljcwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNTcyOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsMTQgKzIyMCw2IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmFsbG9jYXRpb25Qcm9maWxl
KGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJlKCkpOwogfQogCi1KU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwpAQCAtNzkwLDI2ICs3ODIsNiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RnVuY3RpCiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2Nv
cGUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKLXsKLSAg
ICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6
OmluZm8oKSkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5j
dGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKSk7Ci19Ci0KLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbCkKLXsKLSAgICBBU1NFUlQoZnVuY3Rpb25FeGVj
dXRhYmxlQXNDZWxsLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOwotCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhl
Y3V0YWJsZUFzQ2VsbCk7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rp
b25FeGVjdXRhYmxlLCBleGVjLT5zY29wZSgpKTsKLX0KLQogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICByZXR1cm4ganNJc09iamVjdFR5cGUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAgZXh0ZXJuICJDIiB7CiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpICBXVEZfSU5URVJOQUw7IAogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBj
YWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29t
cGxleCB0byBKSVQuCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3Rvciwg
aW50MzJfdCBpbmxpbmVDYXBhY2l0eSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkg
V1RGX0lOVEVSTkFMOwpAQCAtMTAwLDggKzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJh
bWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkg
V1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9u
Tm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlv
bkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogZG91YmxlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDE1NzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzg5LDcgKzQzODksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25FCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgb3BlcmF0aW9uTmV3
RnVuY3Rpb25Ob0NoZWNrLAogICAgICAgICByZXN1bHRHUFIsCiAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLT5mdW5jdGlvbkV4cHIobm9kZS0+ZnVuY3Rpb25FeHBySW5kZXgoKSkpOwogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5MiwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKICAgICB9CiAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczKQorICAgIHsKKyAg
ICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnMyk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsK
ICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CkBAIC0yMzcsNiArMjQ2LDI0IEBAIHB1Ymxp
YzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcx
LCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMpCisgICAgeworICAgICAgICByZXNldENh
bGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykK
KyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFy
ZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50
cygpOwpAQCAtODIzLDYgKzg1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7Cisg
ICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShh
cmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86
OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQogICAgIHsKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIs
IGFyZzMpOwpAQCAtOTEyLDYgKzk0NywyMiBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAg
ICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFy
Z3VtZW50R1BSMyk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0ZWRJbW1Q
dHIgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMpCisgICAgeworICAgICAgICBtb3ZlKGFyZzEsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAg
ICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJ
bW1QdHIgYXJnMykKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU3Mjk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiAr
NTEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGU7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKICAgICBjbGFzcyBKSVQ7CkBAIC04NjYsNyArODY3LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGNvbnN0IEZ1bmN0aW9uUHRyJik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciYp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYsIGludCk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVN0LCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FLCBpbnQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUFhcEosIGludCwgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSosIEdQUlJlZyk7CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKLCBpbnQsIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUqLCBHUFJSZWcsIEdQUlJlZyk7CisjZW5kaWYKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwg
aW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBpbnQzMl90KTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNw
WiwgaW50LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSosIGludDMyX3Qp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VDLCBpbnQsIEpTQ2VsbCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQLCBpbnQsIHZvaWQqKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FQ0MsIFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTcyOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMjYg
QEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKIAorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRl
Z2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQg
ZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gVG8gYXZvaWQgYXNz
ZW1ibGllcyBmcm9tIHVzaW5nIHdyb25nIHJlZ2lzdGVycywgbGV0J3Mgb2NjdXB5IHIxIG9yIHIz
IHdpdGggYSBkdW1teSBhcmd1bWVudCB3aGVuIG5lY2Vzc2FyeS4KKyNpZiAoQ09NUElMRVJfU1VQ
UE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkpIHx8IENQVShNSVBTKQorI2RlZmluZSBFQUJJXzMyQklU
X0RVTU1ZX0FSRyAgICAgIFRydXN0ZWRJbW0zMigwKSwKKyNlbHNlCisjZGVmaW5lIEVBQklfMzJC
SVRfRFVNTVlfQVJHCisjZW5kaWYKKworLy8gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVn
ZXIgdGhhdCBjYW5ub3QgYmUgcHV0IGhhbGYgaW4gYW4gYXJndW1lbnQgcmVnaXN0ZXIgYW5kIGhh
bGYgb24gc3RhY2sgd2hlbiB1c2luZyBTSDQgYXJjaGl0ZWN0dXJlLgorLy8gVG8gYXZvaWQgdGhp
cywgbGV0J3Mgb2NjdXB5IHRoZSA0dGggYXJndW1lbnQgcmVnaXN0ZXIgKHI3KSB3aXRoIGEgZHVt
bXkgYXJndW1lbnQgd2hlbiBuZWNlc3NhcnkuCisjaWYgQ1BVKFNINCkKKyNkZWZpbmUgU0g0XzMy
QklUX0RVTU1ZX0FSRyAgICAgIFRydXN0ZWRJbW0zMigwKSwKKyNlbHNlCisjZGVmaW5lIFNINF8z
MkJJVF9EVU1NWV9BUkcKKyNlbmRpZgorCisjZW5kaWYgLy8gKEpTVkFMVUUzMl82NCkKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlRG91YmxlKGludCBzcmMpCkBAIC0yMzEsMTIgKzI1MSw1MCBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Cit9CisKIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBpbnQgZHN0KQogewogICAgIHNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCitBTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FQWFwSiBvcGVyYXRpb24sIGludCBkc3QsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUq
IGFyZzEsIEdQUlJlZyBhcmcyKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworfQorI2Vsc2UKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VBYXBKIG9wZXJhdGlvbiwgaW50IGRzdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKK3sKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihhcmcxKSwgRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9CisjZW5k
aWYKKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUFhcEpjcFogb3BlcmF0aW9uLCBpbnQgZHN0LCBBcnJheUFsbG9j
YXRpb25Qcm9maWxlKiBhcmcxLCBHUFJSZWcgYXJnMiwgaW50MzJfdCBhcmczKQoreworICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBhcmcyLCBUcnVz
dGVkSW1tMzIoYXJnMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBK
Y3BaIG9wZXJhdGlvbiwgaW50IGRzdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogYXJnMSwgY29u
c3QgSlNWYWx1ZSogYXJnMiwgaW50MzJfdCBhcmczKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpLCBUcnVzdGVkSW1tUHRyKGFyZzIpLCBUcnVz
dGVkSW1tMzIoYXJnMykpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDIG9w
ZXJhdGlvbiwgaW50IGRzdCwgSlNDZWxsKiBjZWxsKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3QpOworfQorCiBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIGludCBkc3QsIHZvaWQqIHBvaW50ZXIpCiB7CiAgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAt
Mjg3LDIyICszNDUsNiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi0vLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVF
MzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFC
SSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBb
c3BdKS4KLS8vIFRvIGF2b2lkIGFzc2VtYmxpZXMgZnJvbSB1c2luZyB3cm9uZyByZWdpc3RlcnMs
IGxldCdzIG9jY3VweSByMSBvciByMyB3aXRoIGEgZHVtbXkgYXJndW1lbnQgd2hlbiBuZWNlc3Nh
cnkuCi0jaWYgKENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pKSB8fCBDUFUoTUlQ
UykKLSNkZWZpbmUgRUFCSV8zMkJJVF9EVU1NWV9BUkcgICAgICBUcnVzdGVkSW1tMzIoMCksCi0j
ZWxzZQotI2RlZmluZSBFQUJJXzMyQklUX0RVTU1ZX0FSRwotI2VuZGlmCi0KLS8vIEpTVkFMVUUz
Ml82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyIHRoYXQgY2Fubm90IGJlIHB1dCBoYWxmIGluIGFuIGFy
Z3VtZW50IHJlZ2lzdGVyIGFuZCBoYWxmIG9uIHN0YWNrIHdoZW4gdXNpbmcgU0g0IGFyY2hpdGVj
dHVyZS4KLS8vIFRvIGF2b2lkIHRoaXMsIGxldCdzIG9jY3VweSB0aGUgNHRoIGFyZ3VtZW50IHJl
Z2lzdGVyIChyNykgd2l0aCBhIGR1bW15IGFyZ3VtZW50IHdoZW4gbmVjZXNzYXJ5LgotI2lmIENQ
VShTSDQpCi0jZGVmaW5lIFNINF8zMkJJVF9EVU1NWV9BUkcgICAgICBUcnVzdGVkSW1tMzIoMCks
Ci0jZWxzZQotI2RlZmluZSBTSDRfMzJCSVRfRFVNTVlfQVJHCi0jZW5kaWYKLQogQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRUogb3BlcmF0aW9uLCBSZWdpc3RlcklEIGFyZ1RhZywgUmVnaXN0ZXJJRCBhcmdQYXlsb2Fk
KQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmdQYXlsb2FkLCBhcmdUYWcpOwpAQCAtMzE1LDkgKzM1Nyw2IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogfQogCi0jdW5kZWYgRUFCSV8zMkJJVF9EVU1NWV9BUkcK
LSN1bmRlZiBTSDRfMzJCSVRfRFVNTVlfQVJHCi0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmNoZWNrU3RydWN0dXJlKFJlZ2lzdGVy
SUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTEwMjUsNiArMTA2NCw5IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKKyN1bmRlZiBFQUJJXzMyQklUX0RVTU1ZX0FSRworI3VuZGVmIFNINF8zMkJJVF9EVU1NWV9B
UkcKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNlbmRpZiAvLyBKSVRJbmxpbmVzX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDE1NzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNywxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X29iamVjdCk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfaGFzX2luc3RhbmNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1
NzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw5ICsxMTMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX25ld19vYmplY3QpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld09iamVjdCwgc3RydWN0dXJlKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmV0dXJuVmFsdWVSZWdpc3Rlcik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX2hhc19p
bnN0YW5jZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIxMyw5ICsxMjE0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogI2VuZGlmCiAg
ICAgfQogCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19mdW5jKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2Fs
bC5jYWxsKGRzdCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCBmdW5jRXhlYyk7CiAKICAg
ICBpZiAoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkgewogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpICAgICAgICAKQEAgLTEyMjksMzkgKzEyMjksNDMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfbmV3X2Z1bmNfZXhwKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4cHIgPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgZnVuY0V4cHIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9m
aWxlKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgdmFsdWVzSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGlu
dCBzaXplID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9m
aWxlLCBkc3QsCisgICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5QWxsb2NhdGlv
blByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZUlu
ZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwKKyAgICAgICAgY3VycmVudEluc3RydWN0aW9uWzNdLnUuYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDApOwogI2Vsc2UKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LAorICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMSwgcmVnVDApOwogI2VuZGlmCi0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5hcnJheUFsbG9jYXRpb25Q
cm9maWxlKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X2J1ZmZlcihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9uZXdfYXJyYXlfYnVmZmVyKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlKSk7Ci0gICAgc3R1YkNhbGwuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWVzSW5kZXggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBzaXplID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMgPSBjb2RlQmxvY2soKS0+
Y29uc3RhbnRCdWZmZXIodmFsdWVzSW5kZXgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXJXaXRoUHJvZmlsZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCB2YWx1ZXMsIHNpemUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTU3Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDE0IEBACiAjaWYgRU5BQkxF
KEpJVCkKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAKKyNpbmNsdWRlICJBcnJheUNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZh
bHVlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNzQzLDYg
Kzc0NSw0NCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNQcm9wZXJ0CiB9CiAg
ICAgCiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50IHNpemUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVj
LCBwcm9maWxlLCB2YWx1ZXMsIHNpemUpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldpdGhQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBp
bnQgc2l6ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNv
bnN0cnVjdEFycmF5KGV4ZWMsIHByb2ZpbGUsIHZhbHVlcywgc2l6ZSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgRW5jb2Rl
ZEpTVmFsdWUgc2l6ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIHNpemVWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShzaXplKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0
cnVjdEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBwcm9maWxlLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHNpemVWYWx1ZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4
ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVu
Y3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkpOworfQorCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9p
ZCogcmVnZXhwUHRyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3Mjk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDE3ICs0NiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIHRoaXMgaGVscHMgcHJldmVu
dCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1lbnRzIQogLyoK
ICAgICBLZXk6Ci0gICAgVjogdm9pZAotICAgIEo6IEpTVmFsdWUKLSAgICBQOiBwb2ludGVyICh2
b2lkKikKKyAgICBBOiBKU0FycmF5KgorICAgIEFhcDogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSoK
ICAgICBDOiBKU0NlbGwqCiAgICAgQ2I6IENvZGVCbG9jayoKLSAgICBBOiBKU0FycmF5KgorICAg
IEQ6IGRvdWJsZQorICAgIEU6IEV4ZWNTdGF0ZSoKKyAgICBJOiBTdHJpbmdJbXBsKgorICAgIElj
ZjogSW5saW5lQ2FsTEZyYW1lKgorICAgIEo6IEVuY29kZWRKU1ZhbHVlCisgICAgSmNwOiBjb25z
dCBKU1ZhbHVlKgorICAgIEpzczogSlNTdHJpbmcqCisgICAgTzogSlNPYmplY3QqCisgICAgUDog
cG9pbnRlciAodm9pZCopCiAgICAgUjogUmVnaXN0ZXIKICAgICBTOiBzaXplX3QKKyAgICBTdDog
U3RydWN0dXJlKgorICAgIFY6IHZvaWQKKyAgICBXOiBXYXRjaHBvaW50U2V0KgogICAgIFo6IGlu
dDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgogKi8KIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSop
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKQEAgLTc0LDYgKzgyLDggQEAgdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
aW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUCkoRXhlY1N0
YXRlKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRUFhcEopKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpK
X0pJVE9wZXJhdGlvbl9FQWFwSmNwWikoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSosIHNpemVfdCwg
c2l6ZV90KTsKQEAgLTIxOSw2ICsyMjksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Dbwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFM
OwogI2VuZGlmCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNQcm9wZXJ0eShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTU3RyaW5nKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlKEV4ZWNTdGF0ZSos
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGludDMyX3Qg
c2l6ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheUJ1ZmZlcldpdGhQcm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGludDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZShFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpT
VmFsdWUgc2l6ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTcyOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDM2LDEzICs0MzYsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBoYW5kbGVfd2F0
Y2hkCiAgICAgfQogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19v
YmplY3QpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAg
cmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0Zy
YW1lLmFyZ3NbMF0uc3RydWN0dXJlKCkpOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wdXRfYnlfaWRfZ2VuZXJpYykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CkBAIC0xMTM5LDE0ICsxMTMyLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IAotREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZnVuYykKLXsKLSAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgCi0gICAgQVNTRVJUKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUg
fHwgIXN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpIHx8IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT51bmNoZWNrZWRSKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
dm0oKSwgc3RhY2tGcmFtZS5hcmdzWzBdLmZ1bmN0aW9uKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1l
LT5zY29wZSgpKTsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNo
X2FjdGl2YXRpb24pCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpA
QCAtMTIwMiwyNyArMTE4Nyw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2Zp
bGVfZGkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUs
IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElP
TihKU09iamVjdCosIG9wX25ld19hcnJheSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQo
c3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1syXS5hcnJheUFsbG9jYXRpb25Q
cm9maWxlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCldKSwgc3RhY2tGcmFtZS5h
cmdzWzFdLmludDMyKCkpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9w
X25ld19hcnJheV93aXRoX3NpemUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwotICAgIAotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5hcnJheUFsbG9jYXRpb25Qcm9m
aWxlKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihKU09i
amVjdCosIG9wX25ld19hcnJheV9idWZmZXIpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwotICAgIAotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzJdLmFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwg
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFja0Zy
YW1lLmFyZ3NbMF0uaW50MzIoKSksIHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpKTsKLX0KLQog
c3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQogewpAQCAtMTQ0NCwxOCArMTQwOCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQqLCBvcF9sb2FkX3ZhcmEKICAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCi1ERUZJTkVf
U1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mdW5jX2V4cCkKLXsKLSAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24g
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uZnVuY3Rpb24oKTsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgZnVuY3Rpb24sIGNhbGxGcmFtZS0+
c2NvcGUoKSk7Ci0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkg
IT0gRnVuY3Rpb25Db2RlIHx8ICFjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKCkgfHwgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwotCi0gICAgcmV0dXJu
IGZ1bmM7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxNTcyOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0OCwxMiArMzQ4LDYgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YQogRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2Yo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
U1RVQiBjdGlfdG9fb2JqZWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwot
SlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfYXJyYXkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19hcnJheV93aXRo
X3NpemUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1KU09iamVjdCogSklU
X1NUVUIgY3RpX29wX25ld19hcnJheV9idWZmZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7Ci1KU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19mdW5jKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdf
ZnVuY19leHAoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci1KU09iamVjdCog
SklUX1NUVUIgY3RpX29wX25ld19vYmplY3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1c2hf
bmFtZV9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklU
X1NUVUIgY3RpX29wX3B1c2hfd2l0aF9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgJKHJldmlzaW9uIDE1NzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRl
cmZhY2VKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gaG93ZXZlciB0aGUgY29kZSB3aWxsIHN0aWxsIGZ1bmN0aW9uIGNvcnJl
Y3RseS4KICNpZiBDUFUoWDg2XzY0KQogICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBy
ZXR1cm5WYWx1ZVJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlMlJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplZHg7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0g
WDg2UmVnaXN0ZXJzOjplYXg7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWRpOwo=
</data>
<flag name="review"
          id="236474"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>