<?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>124245</bug_id>
          
          <creation_ts>2013-11-12 16:19:59 -0800</creation_ts>
          <short_desc>Add tracking of endColumn for Executables</short_desc>
          <delta_ts>2013-11-19 13:53:39 -0800</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>122836</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>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949922</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-12 16:19:59 -0800</bug_when>
    <thetext>To implement bytecode level breakpoint efficiently, the Debugger needs to be able to tell if a given source location (e.g. for a breakpoint) falls within the bounds of a block of source code.  From the Executable, we currently have the start line, end line, and start column which gets us most of the info we need.  The missing piece is the end column.  Will be adding support for tracking this end column value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950499</commentid>
    <comment_count>1</comment_count>
      <attachid>216892</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-13 20:16:51 -0800</bug_when>
    <thetext>Created attachment 216892
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950500</commentid>
    <comment_count>2</comment_count>
      <attachid>216892</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-13 20:19:53 -0800</bug_when>
    <thetext>Comment on attachment 216892
the patch.

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

&gt; Source/WebCore/testing/Internals.h:-37
&gt; -#include &lt;wtf/PassRefPtr.h&gt;
&gt; -#include &lt;wtf/RefCounted.h&gt;

Oops.  Will revert this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950501</commentid>
    <comment_count>3</comment_count>
      <attachid>216893</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-13 20:23:22 -0800</bug_when>
    <thetext>Created attachment 216893
patch 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950502</commentid>
    <comment_count>4</comment_count>
      <attachid>216893</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-13 20:26:51 -0800</bug_when>
    <thetext>Comment on attachment 216893
patch 2.

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

&gt; Source/WebCore/testing/Internals.idl:141
&gt; +    // Calling scriptBoundsForFunction() with null gets the bounds for the script of the current scope.

Stale comment.  &quot;scriptBoundsForFunction&quot; ==&gt; &quot;scriptBoundsFor&quot;.  Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950503</commentid>
    <comment_count>5</comment_count>
      <attachid>216893</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-13 20:28:41 -0800</bug_when>
    <thetext>Comment on attachment 216893
patch 2.

Attachment 216893 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/22899211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950506</commentid>
    <comment_count>6</comment_count>
      <attachid>216894</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-13 20:31:10 -0800</bug_when>
    <thetext>Created attachment 216894
patch 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950524</commentid>
    <comment_count>7</comment_count>
      <attachid>216894</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-11-13 21:50:57 -0800</bug_when>
    <thetext>Comment on attachment 216894
patch 3.

Attachment 216894 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/22640232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950526</commentid>
    <comment_count>8</comment_count>
      <attachid>216894</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-13 22:02:21 -0800</bug_when>
    <thetext>Comment on attachment 216894
patch 3.

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Add tracking of endColumn for Executables.

Your ChangeLog should include a sentence about what you&apos;re going to use this for.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt; +    if (!m_lineCount)
&gt; +        m_functionEndColumn -= m_functionStartColumn;

Why?

&gt; Source/JavaScriptCore/runtime/VM.cpp:782
&gt; +JSValue VM::scriptBoundsFor(ExecState* exec, JSValue script)

This function doesn&apos;t really belong in VM, since it doesn&apos;t pertain to maintaining the internal invariants of the VM. I would put this and GetCallerCodeBlockFunctor inside JSInternals::scriptBoundsFor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950529</commentid>
    <comment_count>9</comment_count>
      <attachid>216894</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-13 22:24:13 -0800</bug_when>
    <thetext>Comment on attachment 216894
patch 3.

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

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt; +    , m_endColumn(UINT_MAX)

Why do we track an end column but not a start column?

&gt; Source/JavaScriptCore/parser/Parser.cpp:1240
&gt; +        unsigned bodyEndColumn = endLocation.startOffset - endLocation.lineStartOffset;
&gt; +        if (endLocation.line == bodyStartLine)
&gt; +            bodyEndColumn = endLocation.startOffset - m_token.m_data.lineStartOffset;

Why is endLocation.lineStartOffset not equal to m_token.m_data.lineStartOffset in this case?

&gt; Source/JavaScriptCore/runtime/Executable.h:375
&gt; +        , m_endColumn(UINT_MAX)

Why is this a property of the executable and not of the SourceCode (m_source)? SourceCode already tracks firstLine, startColumn, startOffset, endOffset, and length.

&gt; Source/JavaScriptCore/runtime/Executable.h:416
&gt; +        ASSERT(endColumn != UINT_MAX);

Why does endColumn get a special signaling value, but startColumn doesn&apos;t? Let&apos;s not add arbitrary differences to the code just because two different engineers worked on the two column variables.

&gt; Source/JavaScriptCore/runtime/VM.h:463
&gt; +        // This is only used for testing purposes:

If you move this function into window.internals, you won&apos;t need this comment. The comment is a good indication that the function is in the wrong place.

&gt; Source/WebCore/testing/Internals.idl:141
&gt; +    // Calling scriptBoundsFor() with null gets the bounds for the script of the current scope.

A more JavaScript-y API way to do things is to make passing no arguments, or passing undefined, return the metadata for the current scope.

&gt; Source/WebCore/testing/Internals.idl:142
&gt; +    [Custom] DOMString scriptBoundsFor(any funcOrNull);

Let&apos;s call this &quot;parserMetadata&quot;. &quot;script&quot; is not a great word to put in a JS function name because everything has to do with script. &quot;bounds&quot; is not a great word because it isn&apos;t a term of art in the parser, and because this function returns more than just boundary information.

&gt; Source/WebCore/testing/JSInternalsCustom.cpp:34
&gt; +JSC::JSValue JSInternals::scriptBoundsFor(JSC::ExecState* exec)

Why can&apos;t this go into Internals.cpp, like other functions? That&apos;s a good thing to explain in your ChangeLog.

&gt; LayoutTests/js/dom/script-tests/script-start-end-locations.js:1
&gt; +var value = 10; var sum = 1; debug(window.internals.scriptBoundsFor(null)); function f0() { bounds(f0); function f0a() { bounds(f0a); function f0b() { bounds(f0b); eval(&apos;sum += value; debug(window.internals.scriptBoundsFor(null));&apos;); } f0b(); } f0a(); } f0();  var x0 = function(key) { bounds(x0);var x0a = function() { bounds(x0a); var x0b = function() { bounds(x0b); sum += value; eval(&apos;sum += value; debug(window.internals.scriptBoundsFor(null));&apos;); }; x0b(); }; x0a(); }; x0();

Can you move the explicit calls to bounds, which pass in function names, to a stand-alone part of the file toward the end? Having all the calls in one place will make the test easier to reduce if it starts failing. Mixing the output code like this into the thing that&apos;s being debugged makes this pretty hard to work with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950719</commentid>
    <comment_count>10</comment_count>
      <attachid>216894</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-11-14 09:32:39 -0800</bug_when>
    <thetext>Comment on attachment 216894
patch 3.

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

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt;&gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt; 
&gt; Why?

Presumably this is because in unlinked bytecode all locations are relative to the start of the function

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt;&gt; +    , m_endColumn(UINT_MAX)
&gt; 
&gt; Why do we track an end column but not a start column?

In unlinked bytecode the start column is always 0 IIRC

We may actually need to change how we track function bodies now, as deconstruction can result in exceptions occurring ahead of the function body

&gt;&gt; Source/JavaScriptCore/runtime/Executable.h:375
&gt;&gt; +        , m_endColumn(UINT_MAX)
&gt; 
&gt; Why is this a property of the executable and not of the SourceCode (m_source)? SourceCode already tracks firstLine, startColumn, startOffset, endOffset, and length.

The endOffset is the offset into the sourceProvider, to get the end column you would have to walk back an arbitrary disantce until you found a newline to get the column

&gt;&gt; Source/JavaScriptCore/runtime/Executable.h:416
&gt;&gt; +        ASSERT(endColumn != UINT_MAX);
&gt; 
&gt; Why does endColumn get a special signaling value, but startColumn doesn&apos;t? Let&apos;s not add arbitrary differences to the code just because two different engineers worked on the two column variables.

Yeah i agree with this sentiment -- i also don&apos;t understand why we would ever not have the start and end column</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950729</commentid>
    <comment_count>11</comment_count>
      <attachid>216952</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-14 09:45:52 -0800</bug_when>
    <thetext>Created attachment 216952
patch 4: work in progress.

This patch addresses most of Gepff&apos;s feedback except for the parts about why the endColumn is not handled as a pair with startColumn (to be investigated and potentially address in another patch update).  Will address specifics of feedback in a separate comment to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950742</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-14 10:15:32 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt; &gt;&gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt; &gt; 
&gt; &gt; Why?
&gt; 
&gt; Presumably this is because in unlinked bytecode all locations are relative to the start of the function

So &quot;!m_lineCount&quot; means &quot;this is unlinked bytecode&quot;? Can we find a better way to say that?

&gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt; &gt;&gt; +    , m_endColumn(UINT_MAX)
&gt; &gt; 
&gt; &gt; Why do we track an end column but not a start column?
&gt; 
&gt; In unlinked bytecode the start column is always 0 IIRC

In that case, it doesn&apos;t make sense to me that we would track an end column in unlinked bytecode at all. If the start column is bogus, so is the end column.

&gt; &gt;&gt; Source/JavaScriptCore/runtime/Executable.h:375
&gt; &gt;&gt; +        , m_endColumn(UINT_MAX)
&gt; &gt; 
&gt; &gt; Why is this a property of the executable and not of the SourceCode (m_source)? SourceCode already tracks firstLine, startColumn, startOffset, endOffset, and length.
&gt; 
&gt; The endOffset is the offset into the sourceProvider, to get the end column you would have to walk back an arbitrary disantce until you found a newline to get the column

I think you&apos;re saying that we have a SourceCode before we parse the function body, but we don&apos;t know what the end column will be until after we&apos;ve parsed the function body.

Is it really true that the parser doesn&apos;t scan for line and column information when it parses a FunctionBodyNode? I don&apos;t think that&apos;s true.

If it is true, then endColumn should be a property of CodeBlock, not Executable, since CodeBlock is the object that represents our state after we parse the internals of our function body.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950752</commentid>
    <comment_count>13</comment_count>
      <attachid>216952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 10:33:01 -0800</bug_when>
    <thetext>Comment on attachment 216952
patch 4: work in progress.

Attachment 216952 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/23608012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950755</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-11-14 10:39:57 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt; &gt; &gt;&gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why?
&gt; &gt; 
&gt; &gt; Presumably this is because in unlinked bytecode all locations are relative to the start of the function
&gt; 
&gt; So &quot;!m_lineCount&quot; means &quot;this is unlinked bytecode&quot;? Can we find a better way to say that?

No, the fact that you&apos;re in an UnlinkedCodeBlock is what tells you that :D

I&apos;m not sure what the !m_lineCount is about sorry

&gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt; &gt; &gt;&gt; +    , m_endColumn(UINT_MAX)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do we track an end column but not a start column?
&gt; &gt; 
&gt; &gt; In unlinked bytecode the start column is always 0 IIRC
&gt; 
&gt; In that case, it doesn&apos;t make sense to me that we would track an end column in unlinked bytecode at all. If the start column is bogus, so is the end column.

We need that end column, so that we can compute the actual end column in the linked version of the code.

On the other hand when i think about this our string match means that the end co,umm should not be a relative offset.  Hmmm - MarkL thoughts?


&gt; &gt; The endOffset is the offset into the sourceProvider, to get the end column you would have to walk back an arbitrary disantce until you found a newline to get the column
&gt; 
&gt; I think you&apos;re saying that we have a SourceCode before we parse the function body, but we don&apos;t know what the end column will be until after we&apos;ve parsed the function body.
&gt; 
&gt; Is it really true that the parser doesn&apos;t scan for line and column information when it parses a FunctionBodyNode? I don&apos;t think that&apos;s true.

It does accumulate this info, but it hasn&apos;t been recording it (FunctionBodyNode doesn&apos;t hang around post codegen)

&gt; 
&gt; If it is true, then endColumn should be a property of CodeBlock, not Executable, since CodeBlock is the object that represents our state after we parse the internals of our function body.

I agree with this whole heartedly, that where all the other source location properties live (the code block accessor functions do m_&lt;property&gt; + m_unlinkedCodeBlock-&gt;&lt;property&gt;Offset()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950760</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-14 10:49:39 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 216894 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216894&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        Add tracking of endColumn for Executables.
&gt; 
&gt; Your ChangeLog should include a sentence about what you&apos;re going to use this for.

Fixed in patch 4.
 
&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt; &gt; +    if (!m_lineCount)
&gt; &gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt; 
&gt; Why?

As Oliver pointed out, this is because UnlinkedCodeBlock needs to adjust its positions relative to the start of the function.  However, for columns, there&apos;s the additional trickiness that the column only need to be adjusted if the position is in the first line of text.  If the end position is also on the same line as the start position (the entire function is on 1 line), then m_lineCount will be 0.  Yes, this is funky because one would expect m_lineCount to be 1 in that case.  Regardless, this is a pre-existing condition, and I didn&apos;t want to do the extra work to change how that works as it is orthogonal to the endColumn tracking implementation.
 
&gt; &gt; Source/JavaScriptCore/runtime/VM.cpp:782
&gt; &gt; +JSValue VM::scriptBoundsFor(ExecState* exec, JSValue script)
&gt; 
&gt; This function doesn&apos;t really belong in VM, since it doesn&apos;t pertain to maintaining the internal invariants of the VM. I would put this and GetCallerCodeBlockFunctor inside JSInternals::scriptBoundsFor.

Fixed in patch 4.  I did it this way because I originally didn&apos;t want to export a lot more of JSC in order to get it to work.  That said, I like that putting the functionality there in JSInternals::scriptBoundsFor does have the added benefit of not having that code linked in (it&apos;s in a separate link object) when we&apos;re not running tests.  The side effect of this change is that I had to add a ForwardingHeader for CodeBlock.h, export a s_info struct, and moved a bunch of seemingly unrelated header files in the xcode project in order for JSInternals::scriptBoundsFor() (now Internals::parserMetaData()) to build. 


(In reply to comment #9)
&gt; (From update of attachment 216894 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216894&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt; &gt; +    , m_endColumn(UINT_MAX)
&gt; 
&gt; Why do we track an end column but not a start column?

I did start out with the assumption and goal that startColumn and endColumn should be computed as a set along with startLine and endLine.  However, upon working through the code, I discovered that, contrary to intuition, startColumn and endColumn values come from different sources:
1. startColumn comes from the SourceProvider.
2. endColumn comes from the Lexer / Parser.

This resulted in the 2 values being computed at different phases in the parsing process, which in turn precipitate in the asymmetric implementation.  That said, I find myself wondering how SourceProvider computed startColumn ahead of time.  I wrote that code but have since purged it from memory.  I will go back and take a second look to see if there&apos;s a way to have some greater symmetry between startColumn and endColumn.  Note: patch 4 does not include this work.

&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:1240
&gt; &gt; +        unsigned bodyEndColumn = endLocation.startOffset - endLocation.lineStartOffset;
&gt; &gt; +        if (endLocation.line == bodyStartLine)
&gt; &gt; +            bodyEndColumn = endLocation.startOffset - m_token.m_data.lineStartOffset;
&gt; 
&gt; Why is endLocation.lineStartOffset not equal to m_token.m_data.lineStartOffset in this case?

endlocation.lineStartOffset came from cachedInfo which may have been computed based on a different SourceProvider.  This is my educated guess, and has not been proven yet.  I do know empirically that it can be different.  I will take another look at this to see if I can confirm the cause of the difference.

&gt; &gt; Source/JavaScriptCore/runtime/Executable.h:375
&gt; &gt; +        , m_endColumn(UINT_MAX)
&gt; 
&gt; Why is this a property of the executable and not of the SourceCode (m_source)? SourceCode already tracks firstLine, startColumn, startOffset, endOffset, and length.

Because, contrary to intuition, startColumn and endColumn are not computed in the same places.  I will revisit to see if I can improve their symmetry.

&gt; &gt; Source/JavaScriptCore/runtime/Executable.h:416
&gt; &gt; +        ASSERT(endColumn != UINT_MAX);
&gt; 
&gt; Why does endColumn get a special signaling value, but startColumn doesn&apos;t? Let&apos;s not add arbitrary differences to the code just because two different engineers worked on the two column variables.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/VM.h:463
&gt; &gt; +        // This is only used for testing purposes:
&gt; 
&gt; If you move this function into window.internals, you won&apos;t need this comment. The comment is a good indication that the function is in the wrong place.

Fixed in patch 4.

&gt; &gt; Source/WebCore/testing/Internals.idl:141
&gt; &gt; +    // Calling scriptBoundsFor() with null gets the bounds for the script of the current scope.
&gt; 
&gt; A more JavaScript-y API way to do things is to make passing no arguments, or passing undefined, return the metadata for the current scope.

Fixed in patch 4.  I had consider this, but the scriptBoundsFor() name did not lend itself to this.  The much better parserMetaData() name you suggested makes it work nicely.  

&gt; &gt; Source/WebCore/testing/Internals.idl:142
&gt; &gt; +    [Custom] DOMString scriptBoundsFor(any funcOrNull);
&gt; 
&gt; Let&apos;s call this &quot;parserMetadata&quot;. &quot;script&quot; is not a great word to put in a JS function name because everything has to do with script. &quot;bounds&quot; is not a great word because it isn&apos;t a term of art in the parser, and because this function returns more than just boundary information.

Fixed in patch 4.

&gt; &gt; Source/WebCore/testing/JSInternalsCustom.cpp:34
&gt; &gt; +JSC::JSValue JSInternals::scriptBoundsFor(JSC::ExecState* exec)
&gt; 
&gt; Why can&apos;t this go into Internals.cpp, like other functions? That&apos;s a good thing to explain in your ChangeLog.

Fixed in patch 4.  I thought I needed the more raw interface of a custom implementation.  Hence, I implemented it as a member JSInternals and place it in JSInternalsCustom.cpp.  I&apos;ve now made it work as Internals::parseMetaData().

&gt; &gt; LayoutTests/js/dom/script-tests/script-start-end-locations.js:1
&gt; &gt; +var value = 10; var sum = 1; debug(window.internals.scriptBoundsFor(null)); function f0() { bounds(f0); function f0a() { bounds(f0a); function f0b() { bounds(f0b); eval(&apos;sum += value; debug(window.internals.scriptBoundsFor(null));&apos;); } f0b(); } f0a(); } f0();  var x0 = function(key) { bounds(x0);var x0a = function() { bounds(x0a); var x0b = function() { bounds(x0b); sum += value; eval(&apos;sum += value; debug(window.internals.scriptBoundsFor(null));&apos;); }; x0b(); }; x0a(); }; x0();
&gt; 
&gt; Can you move the explicit calls to bounds, which pass in function names, to a stand-alone part of the file toward the end? Having all the calls in one place will make the test easier to reduce if it starts failing. Mixing the output code like this into the thing that&apos;s being debugged makes this pretty hard to work with.

1. Can&apos;t do this because f0a() and f0b() (and many many other functions like them in this test) are inner functions that are not addressable by name once we get to the end of the file.
2. It&apos;s not that hard to work with since:
    a. The test is designed them to be evaluated in order.
    b. You can always find them by proximity to adjacent test cases that are correct.  The correct ones will have start and end positions that will point out the approximate position in the source file where the failed test case is.
    c. The failure will result in a text diff in the test results.  The text diff of the expected result will tell you the exact start and end locations of the function which is failing.

    Any of these 3 can be used to find the failing test case.

Incidentally, I renamed bounds() to dump() in patch 4.


(In reply to comment #12)
&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:103
&gt; &gt; &gt;&gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why?
&gt; &gt; 
&gt; &gt; Presumably this is because in unlinked bytecode all locations are relative to the start of the function
&gt; 
&gt; So &quot;!m_lineCount&quot; means &quot;this is unlinked bytecode&quot;? Can we find a better way to say that?

No.  This code is in UnlinkedFunctionExecutable which means it needs the special handling of unlinked code.  The &quot;!m_lineCount&quot; means that the entire function source is on 1 line.  Hence, the functionEndColumn needs to be adjusted relative to some start offset when the executable gets linked later just like functionStartColumn.  Hence, it needs to be encoded as relative to the start of the function.

Sounds like I should put a comment here for the benefit of folks who are not familiar with this code?

&gt; &gt; &gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:211
&gt; &gt; &gt;&gt; +    , m_endColumn(UINT_MAX)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do we track an end column but not a start column?
&gt; &gt; 
&gt; &gt; In unlinked bytecode the start column is always 0 IIRC
&gt; 
&gt; In that case, it doesn&apos;t make sense to me that we would track an end column in unlinked bytecode at all. If the start column is bogus, so is the end column.

The start column can be computed by adding the start of the SourceProvider to some offset.  The end column on the other hand, if we don&apos;t track it, requires a reverse walk of the characters in the source string to find the start of the last line.  This can turn out to be expensive if the source is on a single very long line (as past experience has shown).  Again, the issue here is that contrary to intuition, startColumn and endColumn computation is not symmetrical ... at least not yet.  My next step is to look into whether we can make this symmetrical.

&gt; &gt; &gt;&gt; Source/JavaScriptCore/runtime/Executable.h:375
&gt; &gt; &gt;&gt; +        , m_endColumn(UINT_MAX)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this a property of the executable and not of the SourceCode (m_source)? SourceCode already tracks firstLine, startColumn, startOffset, endOffset, and length.
&gt; &gt; 
&gt; &gt; The endOffset is the offset into the sourceProvider, to get the end column you would have to walk back an arbitrary disantce until you found a newline to get the column
&gt; 
&gt; I think you&apos;re saying that we have a SourceCode before we parse the function body, but we don&apos;t know what the end column will be until after we&apos;ve parsed the function body.

Yes.  This is true.

&gt; Is it really true that the parser doesn&apos;t scan for line and column information when it parses a FunctionBodyNode? I don&apos;t think that&apos;s true.

Oliver already answered this better than I can.

&gt; If it is true, then endColumn should be a property of CodeBlock, not Executable, since CodeBlock is the object that represents our state after we parse the internals of our function body.

Don&apos;t forget that there is also a linked Executable (see ScriptExecutable).  That&apos;s where the start line (m_firstLine), end line (m_lastLine), start column (m_startColumn) actually lives.  I&apos;m just continuing with the same organization.  When the CodeBlock wants to compute its position, it used these values from its ownerExecutable.  Hence, there is nothing wrong with putting these values in the Executable whose role is to track the source code (and these values pertain to the source code).  I&apos;d argue that it is the proper place to put them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950777</commentid>
    <comment_count>16</comment_count>
      <attachid>216963</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-14 11:27:37 -0800</bug_when>
    <thetext>Created attachment 216963
patch 5: fixes export bug that the Window build revealed, but still a work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950789</commentid>
    <comment_count>17</comment_count>
      <attachid>216952</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-14 12:03:21 -0800</bug_when>
    <thetext>Comment on attachment 216952
patch 4: work in progress.

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

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;      , m_functionStartColumn(node-&gt;startColumn())
&gt; +    , m_functionEndColumn(node-&gt;endColumn())
&gt;      , m_startOffset(node-&gt;source().startOffset() - source.startOffset())
&gt;      , m_sourceLength(node-&gt;source().length())
&gt;      , m_features(node-&gt;features())
&gt;      , m_functionNameIsInScopeToggle(node-&gt;functionNameIsInScopeToggle())
&gt;  {
&gt; +    if (!m_lineCount)
&gt; +        m_functionEndColumn -= m_functionStartColumn;
&gt;  }

Bearing in mind the fact that UnlinkedFunctionExecutable wants context-free relocatable source code location information, I have a few comments:

(1) I think this would be more clearly expressed as: m_functionEndColumn(m_lineCount ? node-&gt;endColumn() : node-&gt;endColumn() - node-&gt;startColumn()). It&apos;s FunctionBodyNode that holds the unrelocatable data, so it&apos;s clearer to express fixup in terms of it.

(2) I would rename &quot;function*&quot; to &quot;unlinked*&quot;. So, &quot;m_unlinkedEndColumn&quot;. That helps to express why we&apos;re doing this transformation, and why we do inverse transformation in CodeBlock.

(3) Why don&apos;t we need to fix up m_functionStartColumn? In a context-free relocatable format, I would expect the start column to be 0, or perhaps just the offset between &quot;f&quot; and &quot;{&quot; in &quot;function f() { ...&quot;. In other words, what happens in this case?:

     &lt;script&gt;function f() { }&lt;/script&gt;
&lt;script&gt;function f() { }&lt;/script&gt;

The first function starts on column 14, and the second on column 9. The cache will hold the UnlinkedFunctionExecutable from the first function. Will the second function report that it starts on column 14?

&gt; Source/JavaScriptCore/runtime/Executable.h:366
&gt; +        , m_endColumn(UINT_MAX)

I still think it&apos;s weird to initialize and test m_endColumn with sentinel value, but not m_startColumn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950792</commentid>
    <comment_count>18</comment_count>
      <attachid>216963</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 12:08:07 -0800</bug_when>
    <thetext>Comment on attachment 216963
patch 5: fixes export bug that the Window build revealed, but still a work in progress.

Attachment 216963 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/22298042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951922</commentid>
    <comment_count>19</comment_count>
      <attachid>217262</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-18 18:48:42 -0800</bug_when>
    <thetext>Created attachment 217262
patch 6: addressed all feedback + many bug fixes.

This column computation work is turning out to be more complex than the bytecode level breakpoint patch that depends on it.  Anyway, the patch looks much better now and we have more tests to prove that it works.

(In reply to comment #17)
&gt; (1) I think this would be more clearly expressed as: m_functionEndColumn(m_lineCount ? node-&gt;endColumn() : node-&gt;endColumn() - node-&gt;startColumn()). It&apos;s FunctionBodyNode that holds the unrelocatable data, so it&apos;s clearer to express fixup in terms of it.

I agree, but I ended up renaming m_functionStart/EndColumn to m_unlinkedBodyStart/EndColumn to distinguish it from m_unlinkedFunctionNameStart which points to the start of the function name instead.

&gt; (2) I would rename &quot;function*&quot; to &quot;unlinked*&quot;. So, &quot;m_unlinkedEndColumn&quot;. That helps to express why we&apos;re doing this transformation, and why we do inverse transformation in CodeBlock.

Done.

&gt; (3) Why don&apos;t we need to fix up m_functionStartColumn? In a context-free relocatable format, I would expect the start column to be 0, or perhaps just the offset between &quot;f&quot; and &quot;{&quot; in &quot;function f() { ...&quot;. In other words, what happens in this case?:
&gt; 
&gt;      &lt;script&gt;function f() { }&lt;/script&gt;
&gt; &lt;script&gt;function f() { }&lt;/script&gt;
&gt; 
&gt; The first function starts on column 14, and the second on column 9. The cache will hold the UnlinkedFunctionExecutable from the first function. Will the second function report that it starts on column 14?

Previously, both &lt;script&gt; tag cases are reported as starting at column 1 where column 1 is the char immediately following the &lt;script&gt; tag.  This is similar to how eval code is handled.  However, it is unsatisfying and we can do better (as you expected in your comment).  This is now fixed.  The handling of this case is in UnlinkedFunctionExecutable::link() which now adjusts startColumn accordingly.  I&apos;ve also added test cases to the new test that exercises this code.

&gt; &gt; Source/JavaScriptCore/runtime/Executable.h:366
&gt; &gt; +        , m_endColumn(UINT_MAX)
&gt; 
&gt; I still think it&apos;s weird to initialize and test m_endColumn with sentinel value, but not m_startColumn.

Agreed.  m_startColumn is now initialized to UINT_MAX as well, and asserted accordingly at all the appropriate places.

Previously, I also said that I would look into increasing the symmetry of the way we compute startColumn and endColumn.  After revisiting all the cases, I decided that:
1. It doesn&apos;t make sense to store the endColumn in SourceCode because the endColumn is computed by the lexer / parser after SourceCode is instantiated.
2. It also doesn&apos;t make sense to go back and update SourceCode with an appropriate endColumn value post-parsing.  This is because the SourceCode instance used for a subsequent linkage of the UnlinkedExecutable may be different anyway.  The best place to store the endColumn is still in the UnlinkedExecutable along with the start line, last line, and startColumn that were already there.

That said, I did re-factored the code to be more symmetrical in the handling of startColumn and endColumn.  Now, when a class / struct has an endColumn, it also has a startColumn.  However, in the case of UnlinkedCodeBlock and EvalNode, m_startColumn is always a constant 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952168</commentid>
    <comment_count>20</comment_count>
      <attachid>217262</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-19 12:06:45 -0800</bug_when>
    <thetext>Comment on attachment 217262
patch 6: addressed all feedback + many bug fixes.

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

r=me

Much improved. I think this is ready to land, with some fixups below.

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +           FunctionExecutables. This has been fixed so that they all use base-0
&gt; +           columns. When the executable gets linked, the column is adjusted into
&gt; +           a base-1 value.

Why should unlinked and linked executables disagree on the base used for column counting?

&gt; Source/JavaScriptCore/ChangeLog:42
&gt; +           The second case is needed so that we can add an appropriate to the end

Missing a word after &quot;appropriate&quot;.

&gt; Source/JavaScriptCore/ChangeLog:52
&gt; +           This interpretation is janky, but was present before this patch. We can
&gt; +           clean that up later in a nother patch.

&quot;another&quot;

&gt; Source/JavaScriptCore/parser/Parser.h:417
&gt; +    JSTextPosition positionBeforeLastLineFeed() const { return m_lexer-&gt;positionBeforeLastLineFeed(); }

We idiomatically call these &quot;newlines&quot; -- as in &quot;positionBeforeLastNewline&quot; -- and not line feeds. &quot;\n&quot; is the newline character.

&gt; Source/JavaScriptCore/runtime/Executable.h:569
&gt; +    static FunctionExecutable* create(VM&amp; vm, const SourceCode&amp; source, UnlinkedFunctionExecutable* unlinkedExecutable, unsigned firstLine, unsigned lastLine, unsigned startColumn, unsigned endColumn, bool bodyExcludesBraces = false)

&quot;excludes = false&quot;, in English, would be stated as &quot;does not not include&quot;. Double negatives are notoriously hard for humans to read, even though computers can handle them just fine. Better to name this variable &quot;bodyIncludesBraces&quot;, and invert the code.

&gt; Source/WebCore/testing/Internals.cpp:1301
&gt; +

Stray newline.

&gt; Source/WebCore/testing/Internals.cpp:1305
&gt; +

Stray newline.

&gt; Source/WebCore/testing/Internals.cpp:1329
&gt; +    } else {
&gt; +        if (executable-&gt;isEvalExecutable())
&gt; +            result.append(&quot;eval&quot;);
&gt; +        else {
&gt; +            ASSERT(executable-&gt;isProgramExecutable());
&gt; +            result.append(&quot;program&quot;);
&gt; +        }
&gt; +    }

Using &quot;else if&quot; here will reduce the indentation.

&gt; Source/WebCore/testing/Internals.idl:141
&gt; +    // Calling scriptBoundsFor() with null gets the bounds for the script of the current scope.

This comment should mention that you can call with no arguments. That&apos;s the preferred way to get the metadata for the current scope. This comment should also say &quot;metadata&quot;, to match the function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952222</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-19 13:45:54 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #20)
&gt; &gt; Source/JavaScriptCore/ChangeLog:18
&gt; &gt; +           FunctionExecutables. This has been fixed so that they all use base-0
&gt; &gt; +           columns. When the executable gets linked, the column is adjusted into
&gt; &gt; +           a base-1 value.
&gt; 
&gt; Why should unlinked and linked executables disagree on the base used for column counting?

For column (and lines based on a quick glance), the linked executables were always using base-1 values.  The unlinked executables were previously using a mix of base-0 and base-1.  The underlying parser Nodes were using base-0.  Long term, we would like to go towards base-0 for everything.

This change only fixes the inconsistency in unlinked executables, and I chose base-0 because we hope to make everything base-0 eventually.  As for the linked executables, I left them as base-1 for now because changing them to be base-0 is not strictly needed for this task, and also because that change can have other repercussions down-stream (client code that currently expects it to be base-1 will need to be converted as well).  It&apos;ll be a task for another day.

Will fix the rest of the issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952224</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-19 13:53:39 -0800</bug_when>
    <thetext>Landed in r159520: &lt;http://trac.webkit.org/r159520&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216892</attachid>
            <date>2013-11-13 20:16:51 -0800</date>
            <delta_ts>2013-11-13 20:23:22 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-124245.patch</filename>
            <type>text/plain</type>
            <size>77704</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6ZnVuY3Rpb25FbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
cmVjb3JkUGFyc2UpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1u
KToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgor
ICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25C
b2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpzdGFydENvbHVtbik6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbmRD
b2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAo
SlNDOjpFdmFsTm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbklu
Zm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6
CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4
Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJv
bUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0
RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1
dGFibGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnJlY29y
ZFBhcnNlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpHZXRDYWxsZXJDb2RlQmxvY2tG
dW5jdG9yOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6R2V0Q2Fs
bGVyQ29kZUJsb2NrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkdldENhbGxl
ckNvZGVCbG9ja0Z1bmN0b3I6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlZNOjpzY3JpcHRC
b3VuZHNGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0xMS0xMyAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBBUk02NCBidWlsZCBh
ZnRlciByZWNlbnQgSmF2YVNjcmlwdENvcmUgY2hhbmdlcwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQwLDEwICsxNjQwLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5s
aW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvblN0YXJ0
Q29sdW1uKCk7CiAgICAgICAgIHN0YXJ0Q29sdW1uICs9ICh1bmxpbmtlZEV4ZWN1dGFibGUtPmZp
cnN0TGluZU9mZnNldCgpID8gMSA6IG93bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25F
bmRDb2x1bW4oKTsKKyAgICAgICAgZW5kQ29sdW1uICs9ICFsaW5lQ291bnQgPyBzdGFydENvbHVt
biA6IDE7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5s
aW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VM
ZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3Vy
Y2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxl
bmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1
bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFy
dENvbHVtbik7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZp
cnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
ICAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBl
eGVjdXRhYmxlKTsKICAgICB9CiAKQEAgLTE2NTQsMTAgKzE2NTYsMTIgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUg
PSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExp
bmVPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPmZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgc3RhcnRDb2x1bW4gKz0gKHVu
bGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCkgPyAxIDogb3duZXJFeGVjdXRhYmxl
LT5zdGFydENvbHVtbigpKTsKKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRF
eGVjdXRhYmxlLT5mdW5jdGlvbkVuZENvbHVtbigpOworICAgICAgICBlbmRDb2x1bW4gKz0gIWxp
bmVDb3VudCA/IHN0YXJ0Q29sdW1uIDogMTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVu
Z3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0
YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExp
bmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVu
bGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0
Q29sdW1uLCBlbmRDb2x1bW4pOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTQgQEAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuYwogICAgICwgbV9saW5lQ291bnQobm9k
ZS0+bGFzdExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQogICAgICwgbV9mdW5jdGlvblN0YXJ0
T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uU3RhcnQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAg
ICwgbV9mdW5jdGlvblN0YXJ0Q29sdW1uKG5vZGUtPnN0YXJ0Q29sdW1uKCkpCisgICAgLCBtX2Z1
bmN0aW9uRW5kQ29sdW1uKG5vZGUtPmVuZENvbHVtbigpKQogICAgICwgbV9zdGFydE9mZnNldChu
b2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCiAgICAg
LCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKICAgICAsIG1fZmVhdHVy
ZXMobm9kZS0+ZmVhdHVyZXMoKSkKICAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xl
KG5vZGUtPmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKQogeworICAgIGlmICghbV9saW5l
Q291bnQpCisgICAgICAgIG1fZnVuY3Rpb25FbmRDb2x1bW4gLT0gbV9mdW5jdGlvblN0YXJ0Q29s
dW1uOwogfQogCiBzaXplX3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNv
dW50KCkgY29uc3QKQEAgLTEyNCw4ICsxMjcsOSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlu
a2VkRnVuY3Rpb25FeGVjCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1f
Zmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0
ICsgbV9zdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fZnVuY3Rpb25T
dGFydENvbHVtbiArIDE7IC8vIHN0YXJ0Q29sdW1uIHNob3VsZCBzdGFydCBmcm9tIDEsIG5vdCAw
LgorICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IG1fZnVuY3Rpb25FbmRDb2x1bW4gKyAoIW1fbGlu
ZUNvdW50ID8gc3RhcnRDb2x1bW4gOiAxKTsKICAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnBy
b3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJz
dExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0
YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUodm0sIGNv
ZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4pOwogfQogCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
T2JqZWN0KiogZXhjZXB0aW9uKQpAQCAtMjA0LDYgKzIwOCw3IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSoKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFs
c2UpCiAgICAgLCBtX2ZpcnN0TGluZSgwKQogICAgICwgbV9saW5lQ291bnQoMCkKKyAgICAsIG1f
ZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgICwgbV9mZWF0dXJlcygwKQogICAgICwgbV9jb2RlVHlw
ZShjb2RlVHlwZSkKICAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9u
U3RhcnRPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0Q29sdW1uOyB9CisgICAgdW5zaWduZWQgZnVuY3Rpb25F
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRW5kQ29sdW1uOyB9CiAgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CiAgICAg
dW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KIApAQCAt
MTYyLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAg
dW5zaWduZWQgbV9mdW5jdGlvblN0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25T
dGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uRW5kQ29sdW1uOwogICAgIHVuc2ln
bmVkIG1fc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CiAKQEAgLTQ0
MSwxOCArNDQzLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAogICAgICAgICBp
bnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGluZUNvdW50KQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxp
bmVDb3VudCwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKICAgICAgICAgbV9mZWF0dXJlcyA9
IGZlYXR1cmVzOwogICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CiAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICBtX2xp
bmVDb3VudCA9IGxpbmVDb3VudDsKKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAg
ICAgfQogCiAgICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXM7IH0KICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQogICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsK
QEAgLTQ5Miw2ICs0OTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlh
YmxlcyA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlczsKICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
OSArMjgzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJv
ZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExv
Y2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV92bSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAg
ICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fdm0sIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBp
bnQgZnVuY3Rpb25TdGFydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE1ICsxMTQsMTYgQEAgU3RhdGVtZW50Tm9k
ZSogU2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5s
aW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK2lubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVt
bikKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2Rl
OjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBu
ZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVt
biwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5v
ZGUgPSBuZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFy
dENvbHVtbiwgZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1
cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNT
RVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVt
b3ZlTGFzdCgpOwpAQCAtMTMzLDE0ICsxMzQsMTUgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4g
UHJvZ3JhbU5vZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZh
bE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpF
dmFsTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmll
clNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFs
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAg
OiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51
bUNvbnN0YW50cykKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVz
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoVk0qIHZt
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAg
ICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUodm0sIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxO
b2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
ZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+
bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7
CkBAIC0xNzksMTUgKzE4MSwxNyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFt
ZXRlcnMoCiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLWlubGluZSBGdW5j
dGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVuY3Rp
b25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCiAgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0
cmljdENvbnRleHQpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9l
bmRDb2x1bW4oZW5kQ29sdW1uKQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVu
Y3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlv
blN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZh
cmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3Rh
cnRDb2x1bW4pCisgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiB7CiB9CiAKQEAgLTIwNSwx
NCArMjA5LDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMKICAg
ICBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZN
KiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25C
b2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0
cmljdENvbnRleHQpOworICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29u
dGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9k
ZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3Jl
YXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2Rl
ID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBz
dGFydENvbHVtbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiAsIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9k
ZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsMzMgKzE0NjgsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25O
b2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVh
dGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
cm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgeyByZXR1cm4gbV9zdGFy
dENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnRDb2x1bW47IH0KKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRDb2x1bW47IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgT1ZFUlJJ
REU7CiAKICAgICAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKKyAgICAgICAgdW5zaWduZWQg
bV9lbmRDb2x1bW47CiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3Bl
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9u
Tm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICB1bnNpZ25lZCBz
dGFydENvbHVtbigpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Nv
cGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShW
TSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZp
ZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKKyAgICAgICAgRXZhbE5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBPVkVSUklERTsKKworICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9Owog
CiAgICAgY2xhc3MgRnVuY3Rpb25QYXJhbWV0ZXJzIDogcHVibGljIFJlZkNvdW50ZWQ8RnVuY3Rp
b25QYXJhbWV0ZXJzPiB7CkBAIC0xNTE5LDggKzE1MjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAg
ICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
c3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAg
ICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5z
aXplKCk7IH0KQEAgLTE1NDAsMTIgKzE1NDUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQgZnVuY3Rpb25TdGFydCkgeyBtX2Z1bmN0aW9uU3Rh
cnQgPSBmdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBlbmRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CkBAIC0xNTUzLDYgKzE1NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBp
bnQgbV9mdW5jdGlvblN0YXJ0OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOworICAg
ICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY0V4cHJO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2MiwxMyArMTE2Miwx
NiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgIG5leHQoKTsKIAotICAgIGlmICht
YXRjaChDTE9TRUJSQUNFKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHN0cmljdE1v
ZGUoKSk7CisgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIHVuc2lnbmVkIGVu
ZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1l
bnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAg
ICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIo
Y29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShw
YXJzZVNvdXJjZUVsZW1lbnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIpLCAiQ2Fu
bm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIpOwotICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29s
dW1uLCBzdHJpY3RNb2RlKCkpOworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1u
KCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsK
IH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBh
cnNlTW9kZSBtb2RlKQpAQCAtMTIzMiw4ICsxMjM1LDExIEBAIHRlbXBsYXRlIDxGdW5jdGlvblJl
cXVpcmVtZW50cyByZXF1aXJlbWUKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBj
YWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogICAgICAg
ICBBU1NFUlQoZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0
YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBpZiAoZW5k
TG9jYXRpb24ubGluZSA9PSBib2R5U3RhcnRMaW5lKQorICAgICAgICAgICAgYm9keUVuZENvbHVt
biA9IGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zm
c2V0OwogCi0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RN
b2RlKTsKKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIGVuZExvY2F0aW9uLCBib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hl
ZEluZm8tPnN0cmljdE1vZGUpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVz
dG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZG
YWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFi
bGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsMTMgKzkwMCwxNSBAQCBQYXNzUmVm
UHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+
IHJlc3VsdDsKICAgICBpZiAobV9zb3VyY2VFbGVtZW50cykgewogICAgICAgICBKU1Rva2VuTG9j
YXRpb24gZW5kTG9jYXRpb247Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpOworICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGlu
ZU51bWJlcigpOwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGVuZExvY2F0aW9uLnN0YXJ0T2Zm
c2V0ID0gbV9sZXhlci0+Y3VycmVudE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1
bW4gPSBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCArIDE7CiAgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX3ZtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3NvdXJjZUVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVu
Y0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCkBAIC05MTQsNyArOTE2LDcgQEAgUGFzc1JlZlB0cjxQ
YXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKm1fc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQ29u
c3RhbnRzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBt
X2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9s
ZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
bV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xleGVyLT5saW5lTnVtYmVyKCksIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4g
cmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8vIHJl
cG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBl
dmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsx
NTMsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwg
RXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRl
RnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgYm9vbCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHko
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGJvb2wpIHsgcmV0dXJuIDE7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50LCBpbnQp
IHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsOCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAg
ICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0ganNDYXN0PFVubGlu
a2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7
CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlu
a2VkQ29kZS0+Zmlyc3RMaW5lKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gc291
cmNlLmZpcnN0TGluZSgpID8gc291cmNlLnN0YXJ0Q29sdW1uKCkgOiAwOwotICAgICAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtl
ZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5s
aW5rZWRDb2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4pOworICAgICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4gPSB1bmxpbmtlZENvZGUtPmVuZENvbHVtbigpOworICAgICAgICBleGVjdXRhYmxl
LT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRD
b2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIHJldHVy
biB1bmxpbmtlZENvZGU7CiAgICAgfQogCkBAIC05NCwxMCArOTUsMTEgQEAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZAogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3Zl
KGFkZFJlc3VsdC5pdGVyYXRvcik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5l
KCksIHJvb3ROb2RlLT5zdGFydENvbHVtbigpKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHJvb3ROb2RlLT5zdGFy
dENvbHVtbigpLCByb290Tm9kZS0+ZW5kQ29sdW1uKCkpOwogCiAgICAgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlKiB1bmxpbmtlZENvZGUgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0s
IGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOwotICAgIHVubGlua2VkQ29kZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5s
YXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAgICB1bmxpbmtlZENvZGUtPnJlY29y
ZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+
bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmVuZENvbHVtbigpKTsK
KwogICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcih2bSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRl
KCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MCw3ICsxODAsOCBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6CiAgICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhlYXAuaXNE
ZWZlcnJlZCgpKTsKLSAgICAKKyAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0gVUlOVF9NQVgpOwor
CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CkBAIC0y
MDksNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Ogog
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KICAgICAg
ICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKICAgICAg
ICAgICAgICp2bSwgZXhlY3V0YWJsZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7Ci0gICAgcmVjb3JkUGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1
bW4oKSk7IAorICAgIHJlY29yZFBhcnNlKGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5mZWF0dXJlcygpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCksIGVuZENv
bHVtbigpKTsgCiAgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewogICAgICAgICBleGNlcHRp
b24gPSB2bS0+dGhyb3dFeGNlcHRpb24oCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwKQEAgLTM2Miw3ICszNjMsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogCiAKIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIkZ1bmN0aW9uRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogCi1GdW5jdGlv
bkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1
bW4pCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbikKICAgICA6IFNjcmlwdEV4ZWN1dGFi
bGUodm0uZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2VkRXhl
Y3V0YWJsZSh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogewpAQCAtMzcxLDYgKzM3Miw3
IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICBtX2ZpcnN0
TGluZSA9IGZpcnN0TGluZTsKICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9zdGFy
dENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwogfQog
CiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01NzAs
OSArNTcyLDEwIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAg
ICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZEZ1bmN0
aW9uLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZS5zdGFydE9mZnNldCgpICsgdW5saW5rZWRGdW5jdGlvbi0+c3RhcnRPZmZzZXQoKTsKICAgICB1
bnNpZ25lZCBzdGFydENvbHVtbiA9IHNvdXJjZS5zdGFydENvbHVtbigpOworICAgIHVuc2lnbmVk
IGVuZENvbHVtbiA9IHVubGlua2VkRnVuY3Rpb24tPmZ1bmN0aW9uRW5kQ29sdW1uKCkgKyAxOwog
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0
aCgpOwogICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0
YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENv
bHVtbik7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVu
Y3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0
aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVt
biwgZW5kQ29sdW1uKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJp
bmcoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTggQEAgcHVibGljOgog
ICAgICAgICAKICAgICBDb2RlQmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCkgY29uc3Q7CiAKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5
cGU7CisgICAgfQogICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGVUeXBlOwogICAgIH0KKyAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBQcm9ncmFt
RXhlY3V0YWJsZVR5cGU7CisgICAgfQogCiAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0
CiAgICAgewpAQCAtMzU1LDYgKzM2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShz
b3VyY2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1v
ZGVGZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAs
IG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTM2Myw2ICszNzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZmVhdHVy
ZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgICwg
bV9uZXZlcklubGluZShmYWxzZSkKKyAgICAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKICAg
ICB7CiAgICAgfQogCkBAIC0zNzgsNiArMzg4LDcgQEAgcHVibGljOgogICAgIGludCBsaW5lTm8o
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZTsgfQogICAgIGludCBsYXN0TGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQogICAgIGJvb2wgdXNlc0FyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlOyB9CkBAIC0z
OTUsMTMgKzQwNiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uKQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29s
IGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgewogICAgICAgICBtX2Zl
YXR1cmVzID0gZmVhdHVyZXM7CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAg
ICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKICAgICAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0
Q29sdW1uOworICAgICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKKyAgICAgICAg
bV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAgICAgfQogCiAgICAgdm9pZCBpbnN0YWxsQ29kZShD
b2RlQmxvY2sqKTsKQEAgLTQzNyw2ICs0NTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fZmly
c3RMaW5lOwogICAgIGludCBtX2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47
CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiB9OwogCiBjbGFzcyBFdmFsRXhlY3V0YWJsZSA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTU0OSw5ICs1NjMsOSBAQCBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTY3Jp
cHRFeGVjdXRhYmxlIEJhc2U7CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVh
dGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKQorICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1
dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5l
LCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbikKICAgICB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1
bmN0aW9uRXhlY3V0YWJsZSh2bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGlu
ZSwgbGFzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0
YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CiAgICAgfQpAQCAtNjM5LDcgKzY1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
Q29kZSgpOwogCiBwcml2YXRlOgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGlu
ZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKTsKIAogICAgIGJvb2wgaXNDb21waWxpbmco
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzU0LDQgKzc1NCw4MSBAQCB2b2lkIFZNOjpkdW1wUmVnRXhwVHJhY2UoKQog
fQogI2VuZGlmCiAKK2NsYXNzIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgeworcHVibGljOgor
ICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IoKQorICAgICAgICA6IG1faXRlcmF0aW9ucygw
KQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgICsrbV9pdGVyYXRpb25zOworICAg
ICAgICBpZiAobV9pdGVyYXRpb25zIDwgMikKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworCisgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2Nr
KCk7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorCitwcml2
YXRlOgorICAgIGludCBtX2l0ZXJhdGlvbnM7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
K307CisKK0pTVmFsdWUgVk06OnNjcmlwdEJvdW5kc0ZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgc2NyaXB0KQoreworICAgIEFTU0VSVChleGVjID09IHRvcENhbGxGcmFtZSk7CisgICAgU2Ny
aXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKKworICAgIGlmIChzY3JpcHQuaXNOdWxsKCkpIHsK
KyAgICAgICAgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvciBpdGVyOworICAgICAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0ZXIuY29kZUJs
b2NrKCk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OyAKKworICAgIH0gZWxzZSBpZiAoc2NyaXB0LmlzRnVuY3Rpb24oKSkgeworICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihzY3JpcHQudG9PYmplY3QoZXhl
YykpOworICAgICAgICBleGVjdXRhYmxlID0gZnVuY09iai0+anNFeGVjdXRhYmxlKCk7CisKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICB1bnNpZ25lZCBz
dGFydExpbmUgPSBleGVjdXRhYmxlLT5saW5lTm8oKTsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVt
biA9IGV4ZWN1dGFibGUtPnN0YXJ0Q29sdW1uKCk7CisgICAgdW5zaWduZWQgZW5kTGluZSA9IGV4
ZWN1dGFibGUtPmxhc3RMaW5lKCk7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gZXhlY3V0YWJs
ZS0+ZW5kQ29sdW1uKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgIGlmIChl
eGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBTdHJpbmcgaW5mZXJyZWROYW1lID0gZnVuY0V4
ZWN1dGFibGUtPmluZmVycmVkTmFtZSgpLnN0cmluZygpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCJmdW5jdGlvbiBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGluZmVycmVkTmFtZSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzRXZhbEV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ImV2YWwiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+
aXNQcm9ncmFtRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInByb2dy
YW0iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoIiB7ICIpOworICAg
IHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhcnRMaW5lKTsKKyAgICByZXN1bHQuYXBwZW5kKCI6Iik7
CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihzdGFydENvbHVtbik7CisgICAgcmVzdWx0LmFwcGVu
ZCgiIC0gIik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRMaW5lKTsKKyAgICByZXN1bHQu
YXBwZW5kKCI6Iik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRDb2x1bW4pOworICAgIHJl
c3VsdC5hcHBlbmQoIiB9Iik7CisKKyAgICByZXR1cm4gSlNWYWx1ZShqc1N0cmluZyhleGVjLCBy
ZXN1bHQudG9TdHJpbmcoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkaXNjYXJkQWxsQ29kZSgpOwogCisgICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIGZvciB0
ZXN0aW5nIHB1cnBvc2VzOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHNjcmlw
dEJvdW5kc0ZvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIHNjcmlwdCk7CisKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgQ2xlYXJFeGNlcHRpb25TY29wZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1
OTI3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIyIEBACisyMDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBqcy9kb20v
c2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9X
ZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0pTSW50
ZXJuYWxzQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0ludGVybmFsczo6
c2NyaXB0Qm91bmRzRm9yKToKKwogMjAxMy0xMS0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyIGltcHJvdmVtZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yOTY5LDYgKzI5NjksNyBAQCBzZXQoV2ViQ29yZVRlc3RTdXBwb3J0X1NPVVJDRVMKIAog
ICAgIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKICAgICB0ZXN0aW5nL0ludGVybmFscy5j
cHAKKyAgICB0ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAogKQogCiBzZXQoV2ViQ29yZVRl
c3RTdXBwb3J0X0xJQlJBUklFUwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1
OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBA
IC04MjQsNiArODI0LDcgQEAgX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjRy
ZQogX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjlzZXRJc1ByaW1hcnlTbmFw
c2hvdHRlZFBsdWdJbkViCiBfX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMxNHNo
YXJlZEZlYXR1cmVzRXYKIF9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDI2Y2Fu
U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNFdgorX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0MnZtRXYKIF9fWk43V2ViQ29yZTIyU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjM0ZGlzcGF0
Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lc0VSTlNfOVBhZ2VHcm91cEVSS04zV1RGNlZlY3Rv
cklOUzNfNlJlZlB0cklOU181RnJhbWVFRUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFUktO
UzNfNlN0cmluZ0VTRV9TRV9TRV9QTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTIy
VVJMV2l0aFVzZXJUeXBlZFN0cmluZ0VQOE5TU3RyaW5nUDVOU1VSTAogX19aTjdXZWJDb3JlMjJj
b3VudGVyVmFsdWVGb3JFbGVtZW50RVBOU183RWxlbWVudEUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjeHBy
b2oJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzU2LDYgKzc1Niw2
OCBAQAogICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+DQogICAgICAgPC9Gb3JjZWRJbmNs
dWRlRmlsZXM+DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHRlc3RpbmdcSlNJbnRlcm5hbHNDdXN0b20uY3BwIj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFk
ZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4z
MiciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVh
ZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFk
ZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5D
YWlyb3xXaW4zMiciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNv
bXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWdfV2luQ2Fpcm98eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAg
ICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+
DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhl
YWRlcj4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1OzQ3
MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0
NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4N
CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1
OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+NDA2NTs0Mjcz
OzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPjQwNjU7
NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNw
ZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+NDA2
NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgICA8
L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgICAg
PC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMy
JyI+DQorICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVG
aWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dp
bkNhaXJvfHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAgICAgIDxGb3Jj
ZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAg
ICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxl
cz4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgICAgPC9QcmVjb21waWxlZEhl
YWRlcj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRI
ZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPg0KKyAgICAgIDwv
UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj4N
CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2lu
MzInIj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhl
YWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8RGlzYWJsZVNw
ZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8RGlzYWJsZVNw
ZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfHg2NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2Fi
bGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERp
c2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7
JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAg
ICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3
MDI7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0K
KyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0
NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4N
CisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZp
bGVzPg0KKyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVk
ZUZpbGVzPg0KKyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+DQorICAgICAg
PC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0
JyI+DQorICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVG
aWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258V2luMzInIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2Vk
SW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UHJvZHVjdGlvbnx4NjQnIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgPC9D
bENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGVzdGluZ1xqc1xXZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwIj4NCiAgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KICAgICAgIDwv
UHJlY29tcGlsZWRIZWFkZXI+DQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0ZXN0aW5nXEludGVybmFsU2V0
dGluZ3MuY3BwIj4NCiAgICAgICA8RmlsdGVyPnRlc3Rpbmc8L0ZpbHRlcj4NCiAgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGVzdGluZ1xKU0ludGVybmFsc0N1
c3RvbS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+dGVzdGluZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0ZXN0aW5nXGpzXFdlYkNvcmVUZXN0
U3VwcG9ydC5jcHAiPg0KICAgICAgIDxGaWx0ZXI+dGVzdGluZzwvRmlsdGVyPg0KICAgICA8L0Ns
Q29tcGlsZT4NCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYyODcsNiAr
NjI4Nyw3IEBACiAJCUZFOUU4OUZDMTZFMkRDMDUwMEE5MDhGOCAvKiBPcmlnaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTlFODlGQTE2RTJE
QzA0MDBBOTA4RjggLyogT3JpZ2luTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFu
c2FjdGlvbkJhY2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmRTeW5jLmNwcCAqLzsgfTsKIAkJRkVBRDdEODgxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRy
YW5zYWN0aW9uQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQUQ3RDg2MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmRTeW5jLmggKi87IH07CisJCUZFQUY1Rjk4MTgzNDdFODAwMDEyNkYyMSAvKiBKU0ludGVy
bmFsc0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUFGNUY5NzE4MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICov
OyB9OwogCQlGRUFGNjY1NDE2Nzk3MDMyMDA2MkQwQzUgLyogRGF0YWJhc2VTZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUY2NjUzMTY3OTcw
MDcwMDYyRDBDNSAvKiBEYXRhYmFzZVNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQjI2RDI4MTY3QThGMkEwMEZERDI2QiAvKiBEYXRh
YmFzZVNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwICovOyB9
OwogCQlGRUJDNUYzMTE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQkM1RjJGMTZCRDBDQzMw
MDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuY3BwICovOyB9OwpAQCAtMTM0NjAsNiArMTM0NjEsNyBA
QAogCQlGRTlFODlGQTE2RTJEQzA0MDBBOTA4RjggLyogT3JpZ2luTG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcmlnaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFQUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tl
bmRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5z
YWN0aW9uQmFja2VuZFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUFE
N0Q4NjE2QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQUY1Rjk3MTgzNDdFODAwMDEyNkYyMSAv
KiBKU0ludGVybmFsc0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0ludGVybmFsc0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFQUY2NjUzMTY3OTcwMDcwMDYyRDBDNSAvKiBEYXRhYmFzZVNlcnZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VTZXJ2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUJDNUYyRjE2QkQwQ0MzMDA2NTlC
RDMgLyogRGF0YWJhc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGFiYXNlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDc1
Miw2ICsxNDc1NCw3IEBACiAJCTQxN0RBNENEMTM3MzQyMDQwMDdDNTdGQiAvKiB0ZXN0aW5nICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRUFGNUY5NzE4
MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICovLAogCQkJCTQxODE1QzFC
MTM4MzE5NjMwMDU3QUFBNCAvKiBqcyAqLywKIAkJCQk0MTdEQTRDRjEzNzM0MzI2MDA3QzU3RkIg
LyogSW50ZXJuYWxzLmNwcCAqLywKIAkJCQk0MTdEQTRDRTEzNzM0MzI2MDA3QzU3RkIgLyogSW50
ZXJuYWxzLmggKi8sCkBAIC0yNTQ4MSw2ICsyNTQ4NCw3IEBACiAJCQkJQTdCRjdFREYxNEM5MTc1
QTAwMTQ0ODlEIC8qIEludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTNF
MjlFNUUxNjdBOEExOTAwNTg2RDNEIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDE3REE3MUQxMzczNURGQTAwN0M1N0ZCIC8qIEpTSW50ZXJuYWxz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFQUY1Rjk4MTgzNDdFODAwMDEyNkYyMSAvKiBKU0lu
dGVybmFsc0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzQwQjVBNzE0QzkzNUFGMDBB
NzdGQTQgLyogSlNJbnRlcm5hbFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzRUQz
RkRFMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc0MEI1OTcxNEM5MzVBRjAwQTc3RkE0IC8qIEpTTWFsbG9jU3Rh
dGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShy
ZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsOSBAQAogICAgIHZvaWQgZW1pdEluc3BlY3Rv
ckRpZEJlZ2luRnJhbWUoKTsKICAgICB2b2lkIGVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcmFtZSgp
OwogCisgICAgLy8gQ2FsbGluZyBzY3JpcHRCb3VuZHNGb3JGdW5jdGlvbigpIHdpdGggbnVsbCBn
ZXRzIHRoZSBib3VuZHMgZm9yIHRoZSBzY3JpcHQgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCisgICAg
W0N1c3RvbV0gRE9NU3RyaW5nIHNjcmlwdEJvdW5kc0ZvcihhbnkgZnVuY09yTnVsbCk7CisKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcgZnJvbSwg
bG9uZyBsZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3JhbW1hck1h
cmtlcihsb25nIGZyb20sIGxvbmcgbGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29s
ZWFuIGhhc0F1dG9jb3JyZWN0ZWRNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSlNJbnRlcm5hbHNDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTSW50
ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNDOjpKU1ZhbHVlIEpTSW50ZXJu
YWxzOjpzY3JpcHRCb3VuZHNGb3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNWYWx1ZSBzY3JpcHQgPSBleGVjLT5hcmd1
bWVudCgwKTsKKyAgICByZXR1cm4gdm0uc2NyaXB0Qm91bmRzRm9yKGV4ZWMsIHNjcmlwdCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTI3MykKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
dHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5k
LWxvY2F0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQt
c3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0
LXRlc3RzL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmpzOiBBZGRlZC4KKwogMjAxMy0xMS0x
MyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlv
dXQgVGVzdCBhbmltYXRpb25zL3Jlc3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWwgaXMgZmxha3kK
SW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1l
bmQtbG9jYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODMgQEAKK3Byb2dyYW0geyA3OjkgLSAxODoxIH0KK3Byb2dyYW0geyAx
OjEgLSAzNDg6MSB9CitmdW5jdGlvbiAiZjAiIHsgMTo5MSAtIDE6MjUzIH0KK2Z1bmN0aW9uICJm
MGEiIHsgMToxMjAgLSAxOjI0NCB9CitmdW5jdGlvbiAiZjBiIiB7IDE6MTUwIC0gMToyMzUgfQor
ZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gIngwIiB7IDE6Mjg1IC0gMTo0NzQgfQorZnVu
Y3Rpb24gIngwYSIgeyAxOjMxOSAtIDE6NDY0IH0KK2Z1bmN0aW9uICJ4MGIiIHsgMTozNTUgLSAx
OjQ1NCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZjEiIHsgOToyMiAtIDk6MTIw
IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmMiIgeyAxMjoyMiAtIDE2OjUgfQor
ZnVuY3Rpb24gImYyYSIgeyAxNDoyNCAtIDE0OjEyMyB9CitldmFsIHsgMToxIC0gMTo2MSB9Citm
dW5jdGlvbiAiZjMiIHsgMTk6MjIgLSAzMTo1IH0KK2Z1bmN0aW9uICJmM2EiIHsgMjE6MjQgLSAy
OTo5IH0KK2Z1bmN0aW9uICJmM2IiIHsgMjM6MjggLSAyNzoxMyB9CitldmFsIHsgMToxIC0gMTo2
MSB9CitmdW5jdGlvbiAiZjQiIHsgMzQ6MjIgLSAzNDo3NSB9CitmdW5jdGlvbiAiZjRhIiB7IDM0
OjUxIC0gMzQ6NTIgfQorZnVuY3Rpb24gImY1IiB7IDM2OjIyIC0gMzY6MTYwIH0KK2Z1bmN0aW9u
ICJmNWEiIHsgMzY6NTEgLSAzNjoxNTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
ImY2IiB7IDM4OjIyIC0gMzg6MjAwIH0KK2Z1bmN0aW9uICJmNmEiIHsgMzg6NTEgLSAzODoxOTAg
fQorZnVuY3Rpb24gImY2YiIgeyAzODo4MSAtIDM4OjE4MCB9CitldmFsIHsgMToxIC0gMTo2MSB9
CitmdW5jdGlvbiAiZmkxIiB7IDQzOjI3IC0gNDM6MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0K
K2Z1bmN0aW9uICJmaTIiIHsgNDY6MjcgLSA1MDo5IH0KK2Z1bmN0aW9uICJmaTJhIiB7IDQ4OjI5
IC0gNDg6MTI5IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTMiIHsgNTM6Mjcg
LSA2NTo5IH0KK2Z1bmN0aW9uICJmaTNhIiB7IDU1OjI5IC0gNjM6MTMgfQorZnVuY3Rpb24gImZp
M2IiIHsgNTc6MzMgLSA2MToxNyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZmk0
IiB7IDY4OjI3IC0gNjg6ODQgfQorZnVuY3Rpb24gImZpNGEiIHsgNjg6NTggLSA2ODo1OSB9Citm
dW5jdGlvbiAiZmk1IiB7IDcwOjI3IC0gNzA6MTY5IH0KK2Z1bmN0aW9uICJmaTVhIiB7IDcwOjU4
IC0gNzA6MTU4IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTYiIHsgNzI6Mjcg
LSA3MjoyMTIgfQorZnVuY3Rpb24gImZpNmEiIHsgNzI6NTggLSA3MjoyMDEgfQorZnVuY3Rpb24g
ImZpNmIiIHsgNzI6OTAgLSA3MjoxOTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
IngxIiB7IDc3OjI4IC0gNzc6MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4
MiIgeyA4MDoyOCAtIDg0OjUgfQorZnVuY3Rpb24gIngyYSIgeyA4MjozMCAtIDgyOjEyOSB9Citl
dmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDMiIHsgODc6MjggLSA5OTo1IH0KK2Z1bmN0
aW9uICJ4M2EiIHsgODk6MzAgLSA5Nzo5IH0KK2Z1bmN0aW9uICJ4M2IiIHsgOTE6MzQgLSA5NTox
MyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDQiIHsgMTAyOjI4IC0gMTAyOjg3
IH0KK2Z1bmN0aW9uICJ4NGEiIHsgMTAyOjYzIC0gMTAyOjY0IH0KK2Z1bmN0aW9uICJ4NSIgeyAx
MDQ6MjggLSAxMDQ6MTcyIH0KK2Z1bmN0aW9uICJ4NWEiIHsgMTA0OjYzIC0gMTA0OjE2MiB9Citl
dmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDYiIHsgMTA2OjI4IC0gMTA2OjIxOCB9Citm
dW5jdGlvbiAieDZhIiB7IDEwNjo2MyAtIDEwNjoyMDggfQorZnVuY3Rpb24gIng2YiIgeyAxMDY6
OTkgLSAxMDY6MTk4IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTEiIHsgMTEx
OjMzIC0gMTExOjEzMiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieGkyIiB7IDEx
NDozMyAtIDExODo5IH0KK2Z1bmN0aW9uICJ4aTJhIiB7IDExNjozNSAtIDExNjoxMzUgfQorZXZh
bCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gInhpMyIgeyAxMjE6MzMgLSAxMzM6OSB9CitmdW5j
dGlvbiAieGkzYSIgeyAxMjM6MzUgLSAxMzE6MTMgfQorZnVuY3Rpb24gInhpM2IiIHsgMTI1OjM5
IC0gMTI5OjE3IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTQiIHsgMTM2OjMz
IC0gMTM2Ojk2IH0KK2Z1bmN0aW9uICJ4aTRhIiB7IDEzNjo3MCAtIDEzNjo3MSB9CitmdW5jdGlv
biAieGk1IiB7IDEzODozMyAtIDEzODoxODEgfQorZnVuY3Rpb24gInhpNWEiIHsgMTM4OjcwIC0g
MTM4OjE3MCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieGk2IiB7IDE0MDozMyAt
IDE0MDoyMzAgfQorZnVuY3Rpb24gInhpNmEiIHsgMTQwOjcwIC0gMTQwOjIxOSB9CitmdW5jdGlv
biAieGk2YiIgeyAxNDA6MTA4IC0gMTQwOjIwOCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5j
dGlvbiAiIiB7IDE0Njo1OCAtIDE1MTo1IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJnZjEiIHsgMTYwOjE5IC0gMTYwOjExOCB9CitldmFsIHsg
MToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ2YyIiB7IDE2MzoxOSAtIDE2NzoxIH0KK2Z1bmN0aW9u
ICJnZjJhIiB7IDE2NToyMSAtIDE2NToxMjEgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rp
b24gImdmMyIgeyAxNzA6MTkgLSAxODI6MSB9CitmdW5jdGlvbiAiZ2YzYSIgeyAxNzI6MjEgLSAx
ODA6NSB9CitmdW5jdGlvbiAiZ2YzYiIgeyAxNzQ6MjUgLSAxNzg6OSB9CitldmFsIHsgMToxIC0g
MTo2MSB9CitmdW5jdGlvbiAiZ2Y0IiB7IDE4NToxOSAtIDE4NTo3NiB9CitmdW5jdGlvbiAiZ2Y0
YSIgeyAxODU6NTAgLSAxODU6NTEgfQorZnVuY3Rpb24gImdmNSIgeyAxODc6MTkgLSAxODc6MTYx
IH0KK2Z1bmN0aW9uICJnZjVhIiB7IDE4Nzo1MCAtIDE4NzoxNTAgfQorZXZhbCB7IDE6MSAtIDE6
NjEgfQorZnVuY3Rpb24gImdmNiIgeyAxODk6MTkgLSAxODk6MjA0IH0KK2Z1bmN0aW9uICJnZjZh
IiB7IDE4OTo1MCAtIDE4OToxOTMgfQorZnVuY3Rpb24gImdmNmIiIHsgMTg5OjgyIC0gMTg5OjE4
MiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ2ZpMSIgeyAxOTQ6MjQgLSAxOTQ6
MTI0IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJnZmkyIiB7IDE5NzoyNCAtIDIw
MTo1IH0KK2Z1bmN0aW9uICJnZmkyYSIgeyAxOTk6MjYgLSAxOTk6MTI3IH0KK2V2YWwgeyAxOjEg
LSAxOjYxIH0KK2Z1bmN0aW9uICJnZmkzIiB7IDIwNDoyNCAtIDIxNjo1IH0KK2Z1bmN0aW9uICJn
ZmkzYSIgeyAyMDY6MjYgLSAyMTQ6OSB9CitmdW5jdGlvbiAiZ2ZpM2IiIHsgMjA4OjMwIC0gMjEy
OjEzIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJnZmk0IiB7IDIxOToyNCAtIDIx
OTo4NSB9CitmdW5jdGlvbiAiZ2ZpNGEiIHsgMjE5OjU3IC0gMjE5OjU4IH0KK2Z1bmN0aW9uICJn
Zmk1IiB7IDIyMToyNCAtIDIyMToxNzAgfQorZnVuY3Rpb24gImdmaTVhIiB7IDIyMTo1NyAtIDIy
MToxNTggfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImdmaTYiIHsgMjIzOjI0IC0g
MjIzOjIxNiB9CitmdW5jdGlvbiAiZ2ZpNmEiIHsgMjIzOjU3IC0gMjIzOjIwNCB9CitmdW5jdGlv
biAiZ2ZpNmIiIHsgMjIzOjkxIC0gMjIzOjE5MiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5j
dGlvbiAiZ3gxIiB7IDIyODoyNSAtIDIyODoxMjQgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVu
Y3Rpb24gImd4MiIgeyAyMzE6MjUgLSAyMzU6MSB9CitmdW5jdGlvbiAiZ3gyYSIgeyAyMzM6Mjcg
LSAyMzM6MTI3IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJneDMiIHsgMjM4OjI1
IC0gMjUwOjEgfQorZnVuY3Rpb24gImd4M2EiIHsgMjQwOjI3IC0gMjQ4OjUgfQorZnVuY3Rpb24g
Imd4M2IiIHsgMjQyOjMxIC0gMjQ2OjkgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
Imd4NCIgeyAyNTM6MjUgLSAyNTM6ODggfQorZnVuY3Rpb24gImd4NGEiIHsgMjUzOjYyIC0gMjUz
OjYzIH0KK2Z1bmN0aW9uICJneDUiIHsgMjU1OjI1IC0gMjU1OjE3MyB9CitmdW5jdGlvbiAiZ3g1
YSIgeyAyNTU6NjIgLSAyNTU6MTYyIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJn
eDYiIHsgMjU3OjI1IC0gMjU3OjIyMiB9CitmdW5jdGlvbiAiZ3g2YSIgeyAyNTc6NjIgLSAyNTc6
MjExIH0KK2Z1bmN0aW9uICJneDZiIiB7IDI1NzoxMDAgLSAyNTc6MjAwIH0KK2V2YWwgeyAxOjEg
LSAxOjYxIH0KK2Z1bmN0aW9uICJneGkxIiB7IDI2MjozMCAtIDI2MjoxMzAgfQorZXZhbCB7IDE6
MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4aTIiIHsgMjY1OjMwIC0gMjY5OjUgfQorZnVuY3Rpb24g
Imd4aTJhIiB7IDI2NzozMiAtIDI2NzoxMzMgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rp
b24gImd4aTMiIHsgMjcyOjMwIC0gMjg0OjUgfQorZnVuY3Rpb24gImd4aTNhIiB7IDI3NDozMiAt
IDI4Mjo5IH0KK2Z1bmN0aW9uICJneGkzYiIgeyAyNzY6MzYgLSAyODA6MTMgfQorZXZhbCB7IDE6
MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4aTQiIHsgMjg3OjMwIC0gMjg3Ojk3IH0KK2Z1bmN0aW9u
ICJneGk0YSIgeyAyODc6NjkgLSAyODc6NzAgfQorZnVuY3Rpb24gImd4aTUiIHsgMjg5OjMwIC0g
Mjg5OjE4MiB9CitmdW5jdGlvbiAiZ3hpNWEiIHsgMjg5OjY5IC0gMjg5OjE3MCB9CitldmFsIHsg
MToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ3hpNiIgeyAyOTE6MzAgLSAyOTE6MjM0IH0KK2Z1bmN0
aW9uICJneGk2YSIgeyAyOTE6NjkgLSAyOTE6MjIyIH0KK2Z1bmN0aW9uICJneGk2YiIgeyAyOTE6
MTA5IC0gMjkxOjIxMCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiIiB7IDI5ODo1
NiAtIDMwMzoxIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEgLSAxNjo3IH0KK2Z1
bmN0aW9uICJlZjMiIHsgMzoyMCAtIDE0OjUgfQorZnVuY3Rpb24gImVmM2EiIHsgNToyNSAtIDEy
OjkgfQorZnVuY3Rpb24gImVmM2IiIHsgNzoyOSAtIDEwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjYx
IH0KK2V2YWwgeyAxOjEgLSAxOjI0MSB9CitmdW5jdGlvbiAiZXgzIiB7IDE6NjQgLSAxOjIzMyB9
CitmdW5jdGlvbiAiZXgzYSIgeyAxOjk1IC0gMToyMjMgfQorZnVuY3Rpb24gImV4M2IiIHsgMTox
MjcgLSAxOjIxMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitldmFsIHsgMToxIC0gMTc6OCB9Citm
dW5jdGlvbiAiZWZpMyIgeyA0OjIxIC0gMTU6NSB9CitmdW5jdGlvbiAiZWZpM2EiIHsgNjoyNiAt
IDEzOjkgfQorZnVuY3Rpb24gImVmaTNiIiB7IDg6MzAgLSAxMToxMyB9CitldmFsIHsgMToxIC0g
MTo2MSB9CitldmFsIHsgMToxIC0gMToyNTAgfQorZnVuY3Rpb24gImV4aTMiIHsgMTo2NSAtIDE6
MjQxIH0KK2Z1bmN0aW9uICJleGkzYSIgeyAxOjk4IC0gMToyMzAgfQorZnVuY3Rpb24gImV4aTNi
IiB7IDE6MTMyIC0gMToyMTkgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gc28gdGhhdCBzY3JpcHQtdGVz
dHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKKyAgICAvLyBjYW4gYmUgbGVzcyB2ZXJi
b3NlIGZvciBjYXNlcyB3aGVyZSB3ZSBoYXZlIGEgZnVuY3Rpb24gd2hvc2UgYm91bmRzIHdlCisg
ICAgLy8gd2FudCB0byBwcmludC4KKyAgICBmdW5jdGlvbiBib3VuZHMoZnVuYykgeworICAgICAg
ICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihmdW5jKSk7CisgICAgfQor
CisgICAgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOworCis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2Nh
dGlvbnMuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL2RvbS9zY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5k
LWxvY2F0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQt
dGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDcgQEAKK3ZhciB2YWx1ZSA9IDEwOyB2YXIgc3VtID0gMTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOyBmdW5jdGlvbiBmMCgpIHsgYm91bmRzKGYw
KTsgZnVuY3Rpb24gZjBhKCkgeyBib3VuZHMoZjBhKTsgZnVuY3Rpb24gZjBiKCkgeyBib3VuZHMo
ZjBiKTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJv
dW5kc0ZvcihudWxsKSk7Jyk7IH0gZjBiKCk7IH0gZjBhKCk7IH0gZjAoKTsgIHZhciB4MCA9IGZ1
bmN0aW9uKGtleSkgeyBib3VuZHMoeDApO3ZhciB4MGEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHgw
YSk7IHZhciB4MGIgPSBmdW5jdGlvbigpIHsgYm91bmRzKHgwYik7IHN1bSArPSB2YWx1ZTsgZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0Zvcihu
dWxsKSk7Jyk7IH07IHgwYigpOyB9OyB4MGEoKTsgfTsgeDAoKTsKKworZnVuY3Rpb24gZ2xvYmFs
RnVuYygpIHsKKyAgICB2YXIgYXJyYXkgPSBbMl07CisgICAgdmFyIHN1bSA9IDA7CisgICAgdmFy
IHZhbHVlID0gNTsKKworICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9u
OgorICAgIGZ1bmN0aW9uIGYxKGtleSkgeyBib3VuZHMoZjEpOyBzdW0gKz0gdmFsdWU7IGV2YWwo
J3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVs
bCkpOycpOyB9CisgICAgZjEoKTsKKworICAgIGZ1bmN0aW9uIGYyKGtleSkgeworICAgICAgICBi
b3VuZHMoZjIpOworICAgICAgICBmdW5jdGlvbiBmMmEoKSB7IGJvdW5kcyhmMmEpOyBzdW0gKz0g
dmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRC
b3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgIGYyYSgpOworICAgIH0KKyAgICBmMigpOwor
CisgICAgZnVuY3Rpb24gZjMoa2V5KSB7CisgICAgICAgIGJvdW5kcyhmMyk7CisgICAgICAgIGZ1
bmN0aW9uIGYzYSgpIHsKKyAgICAgICAgICAgIGJvdW5kcyhmM2EpOworICAgICAgICAgICAgZnVu
Y3Rpb24gZjNiKCkgeworICAgICAgICAgICAgICAgIGJvdW5kcyhmM2IpOworICAgICAgICAgICAg
ICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1
bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkp
OycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZjNiKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZjNhKCk7CisgICAgfQorICAgIGYzKCk7CisKKyAgICBmdW5jdGlvbiBmNChrZXkpIHsgYm91
bmRzKGY0KTsgZnVuY3Rpb24gZjRhKCkge307IGJvdW5kcyhmNGEpOyBmNGEoKTsgfQorICAgIGY0
KCk7CisgICAgZnVuY3Rpb24gZjUoa2V5KSB7IGJvdW5kcyhmNSk7IGZ1bmN0aW9uIGY1YSgpIHsg
Ym91bmRzKGY1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGY1YSgpOyB9CisgICAg
ZjUoKTsKKyAgICBmdW5jdGlvbiBmNihrZXkpIHsgYm91bmRzKGY2KTsgZnVuY3Rpb24gZjZhKCkg
eyBib3VuZHMoZjZhKTsgZnVuY3Rpb24gZjZiKCkgeyBib3VuZHMoZjZiKTsgc3VtICs9IHZhbHVl
OyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsnKTsgfTsgZjZiKCk7IH07IGY2YSgpOyB9CisgICAgZjYoKTsKKworICAgIC8v
IEluZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHsKKyAg
ICAgICAgZnVuY3Rpb24gZmkxKGtleSkgeyBib3VuZHMoZmkxKTsgc3VtICs9IHZhbHVlOyBldmFs
KCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51
bGwpKTsnKTsgfQorICAgICAgICBmaTEoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTIoa2V5KSB7
CisgICAgICAgICAgICBib3VuZHMoZmkyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZpMmEoKSB7
IGJvdW5kcyhmaTJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICAgICAg
ZmkyYSgpOworICAgICAgICB9CisgICAgICAgIGZpMigpOworCisgICAgICAgIGZ1bmN0aW9uIGZp
MyhrZXkpIHsKKyAgICAgICAgICAgIGJvdW5kcyhmaTMpOworICAgICAgICAgICAgZnVuY3Rpb24g
ZmkzYSgpIHsKKyAgICAgICAgICAgICAgICBib3VuZHMoZmkzYSk7CisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gZmkzYigpIHsKKyAgICAgICAgICAgICAgICAgICAgYm91bmRzKGZpM2IpOworICAg
ICAgICAgICAgICAgICAgICBzdW0gKz0gdmFsdWU7IHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlw
dEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGZpM2IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpM2EoKTsKKyAgICAgICAgfQor
ICAgICAgICBmaTMoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTQoa2V5KSB7IGJvdW5kcyhmaTQp
OyBmdW5jdGlvbiBmaTRhKCkge307IGJvdW5kcyhmaTRhKTsgZmk0YSgpOyB9CisgICAgICAgIGZp
NCgpOworICAgICAgICBmdW5jdGlvbiBmaTUoa2V5KSB7IGJvdW5kcyhmaTUpOyBmdW5jdGlvbiBm
aTVhKCkgeyBib3VuZHMoZmk1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBk
ZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNWEo
KTsgfQorICAgICAgICBmaTUoKTsKKyAgICAgICAgZnVuY3Rpb24gZmk2KGtleSkgeyBib3VuZHMo
Zmk2KTsgZnVuY3Rpb24gZmk2YSgpIHsgYm91bmRzKGZpNmEpOyBmdW5jdGlvbiBmaTZiKCkgeyBi
b3VuZHMoZmk2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNmIoKTsgfTsgZmk2
YSgpOyB9CisgICAgICAgIGZpNigpOworICAgIH0KKworICAgIC8vIEZ1bmN0aW9uIGV4cHJlc3Np
b25zIGluIGEgZnVuY3Rpb246CisgICAgdmFyIHgxID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4
MSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICB4MSgpOworCisgICAgdmFyIHgy
ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGJvdW5kcyh4Mik7CisgICAgICAgIHZhciB4MmEg
PSBmdW5jdGlvbigpIHsgYm91bmRzKHgyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0K
KyAgICAgICAgeDJhKCk7CisgICAgfQorICAgIHgyKCk7CisKKyAgICB2YXIgeDMgPSBmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgYm91bmRzKHgzKTsKKyAgICAgICAgdmFyIHgzYSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgYm91bmRzKHgzYSk7CisgICAgICAgICAgICB2YXIgeDNiID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgYm91bmRzKHgzYik7CisgICAgICAgICAgICAgICAg
c3VtICs9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWco
d2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgeDNiKCk7CisgICAgICAgIH0KKyAgICAgICAgeDNhKCk7CisgICAgfQor
ICAgIHgzKCk7CisKKyAgICB2YXIgeDQgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg0KTsgdmFy
IHg0YSA9IGZ1bmN0aW9uKCkge307IGJvdW5kcyh4NGEpOyB4NGEoKTsgfQorICAgIHg0KCk7Cisg
ICAgdmFyIHg1ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4NSk7IHZhciB4NWEgPSBmdW5jdGlv
bigpIHsgYm91bmRzKHg1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IHg1YSgpOyB9
CisgICAgeDUoKTsKKyAgICB2YXIgeDYgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg2KTsgdmFy
IHg2YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoeDZhKTsgdmFyIHg2YiA9IGZ1bmN0aW9uKCkgeyBi
b3VuZHMoeDZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgeDZiKCk7IH07IHg2YSgp
OyB9CisgICAgeDYoKTsKKworICAgIC8vIEluZGVudGVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGlu
IGEgZnVuY3Rpb246CisgICAgeworICAgICAgICB2YXIgeGkxID0gZnVuY3Rpb24oa2V5KSB7IGJv
dW5kcyh4aTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgIHhpMSgpOwor
CisgICAgICAgIHZhciB4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGJvdW5kcyh4
aTIpOworICAgICAgICAgICAgdmFyIHhpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHhpMmEpOyBz
dW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5z
Y3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgICAgICB4aTJhKCk7CisgICAgICAg
IH0KKyAgICAgICAgeGkyKCk7CisKKyAgICAgICAgdmFyIHhpMyA9IGZ1bmN0aW9uKGtleSkgewor
ICAgICAgICAgICAgYm91bmRzKHhpMyk7CisgICAgICAgICAgICB2YXIgeGkzYSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIGJvdW5kcyh4aTNhKTsKKyAgICAgICAgICAgICAgICB2YXIg
eGkzYiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBib3VuZHMoeGkzYik7Cisg
ICAgICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAg
ICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2Ny
aXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgeGkzYigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeGkzYSgpOworICAgICAgICB9
CisgICAgICAgIHhpMygpOworCisgICAgICAgIHZhciB4aTQgPSBmdW5jdGlvbihrZXkpIHsgYm91
bmRzKHhpNCk7IHZhciB4aTRhID0gZnVuY3Rpb24oKSB7fTsgYm91bmRzKHhpNGEpOyB4aTRhKCk7
IH0KKyAgICAgICAgeGk0KCk7CisgICAgICAgIHZhciB4aTUgPSBmdW5jdGlvbihrZXkpIHsgYm91
bmRzKHhpNSk7IHZhciB4aTVhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTVhKTsgc3VtICs9IHZh
bHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsnKTsgfTsgeGk1YSgpOyB9CisgICAgICAgIHhpNSgpOworICAgICAgICB2
YXIgeGk2ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4aTYpOyB2YXIgeGk2YSA9IGZ1bmN0aW9u
KCkgeyBib3VuZHMoeGk2YSk7IHZhciB4aTZiID0gZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTZiKTsg
c3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
c2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgeGk2YigpOyB9OyB4aTZhKCk7IH0KKyAgICAg
ICAgeGk2KCk7CisgICAgfQorCisgICAgLy8gQW5ub3ltb3VzIGZ1bmN0aW9uIGluIGEgZnVuY3Rp
b246CisgICAgdmFyIGZvckVhY2ggPSBbIF0uZm9yRWFjaDsKKyAgICB2YXIgYm91bmRGb3JFYWNo
ID0gZm9yRWFjaC5iaW5kKGFycmF5LCBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZGVidWcod2lu
ZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOworICAgICAgICBzdW0gKz0gdmFs
dWU7CisgICAgICAgIHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBk
ZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgfSk7
CisgICAgYm91bmRGb3JFYWNoKCk7CisKK30KK2dsb2JhbEZ1bmMoKTsKKworZXZhbCgnc3VtICs9
IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7
CisKKy8vIEdsb2JhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnM6CitmdW5jdGlvbiBnZjEoa2V5KSB7
IGJvdW5kcyhnZjEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CitnZjEoKTsKKworZnVu
Y3Rpb24gZ2YyKGtleSkgeworICAgIGJvdW5kcyhnZjIpOworICAgIGZ1bmN0aW9uIGdmMmEoKSB7
IGJvdW5kcyhnZjJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgIGdmMmEoKTsK
K30KK2dmMigpOworCitmdW5jdGlvbiBnZjMoa2V5KSB7CisgICAgYm91bmRzKGdmMyk7CisgICAg
ZnVuY3Rpb24gZ2YzYSgpIHsKKyAgICAgICAgYm91bmRzKGdmM2EpOworICAgICAgICBmdW5jdGlv
biBnZjNiKCkgeworICAgICAgICAgICAgYm91bmRzKGdmM2IpOworICAgICAgICAgICAgc3VtICs9
IHZhbHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRl
YnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAg
fQorICAgICAgICBnZjNiKCk7CisgICAgfQorICAgIGdmM2EoKTsKK30KK2dmMygpOworCitmdW5j
dGlvbiBnZjQoa2V5KSB7IGJvdW5kcyhnZjQpOyBmdW5jdGlvbiBnZjRhKCkge307IGJvdW5kcyhn
ZjRhKTsgZ2Y0YSgpOyB9CitnZjQoKTsKK2Z1bmN0aW9uIGdmNShrZXkpIHsgYm91bmRzKGdmNSk7
IGZ1bmN0aW9uIGdmNWEoKSB7IGJvdW5kcyhnZjVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsn
KTsgfTsgZ2Y1YSgpOyB9CitnZjUoKTsKK2Z1bmN0aW9uIGdmNihrZXkpIHsgYm91bmRzKGdmNik7
IGZ1bmN0aW9uIGdmNmEoKSB7IGJvdW5kcyhnZjZhKTsgZnVuY3Rpb24gZ2Y2YigpIHsgYm91bmRz
KGdmNmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBnZjZiKCk7IH07IGdmNmEoKTsg
fQorZ2Y2KCk7CisKKy8vIEluZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0
aW9uOgoreworICAgIGZ1bmN0aW9uIGdmaTEoa2V5KSB7IGJvdW5kcyhnZmkxKTsgc3VtICs9IHZh
bHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsnKTsgfQorICAgIGdmaTEoKTsKKworICAgIGZ1bmN0aW9uIGdmaTIoa2V5
KSB7CisgICAgICAgIGJvdW5kcyhnZmkyKTsKKyAgICAgICAgZnVuY3Rpb24gZ2ZpMmEoKSB7IGJv
dW5kcyhnZmkyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICAgICAgZ2ZpMmEo
KTsKKyAgICB9CisgICAgZ2ZpMigpOworCisgICAgZnVuY3Rpb24gZ2ZpMyhrZXkpIHsKKyAgICAg
ICAgYm91bmRzKGdmaTMpOworICAgICAgICBmdW5jdGlvbiBnZmkzYSgpIHsKKyAgICAgICAgICAg
IGJvdW5kcyhnZmkzYSk7CisgICAgICAgICAgICBmdW5jdGlvbiBnZmkzYigpIHsKKyAgICAgICAg
ICAgICAgICBib3VuZHMoZ2ZpM2IpOworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3Vt
ICo9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2ZpM2IoKTsKKyAgICAgICAgfQorICAgICAgICBnZmkzYSgpOworICAgIH0K
KyAgICBnZmkzKCk7CisKKyAgICBmdW5jdGlvbiBnZmk0KGtleSkgeyBib3VuZHMoZ2ZpNCk7IGZ1
bmN0aW9uIGdmaTRhKCkge307IGJvdW5kcyhnZmk0YSk7IGdmaTRhKCk7IH0KKyAgICBnZmk0KCk7
CisgICAgZnVuY3Rpb24gZ2ZpNShrZXkpIHsgYm91bmRzKGdmaTUpOyBmdW5jdGlvbiBnZmk1YSgp
IHsgYm91bmRzKGdmaTVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2ZpNWEoKTsg
fQorICAgIGdmaTUoKTsKKyAgICBmdW5jdGlvbiBnZmk2KGtleSkgeyBib3VuZHMoZ2ZpNik7IGZ1
bmN0aW9uIGdmaTZhKCkgeyBib3VuZHMoZ2ZpNmEpOyBmdW5jdGlvbiBnZmk2YigpIHsgYm91bmRz
KGdmaTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2ZpNmIoKTsgfTsgZ2ZpNmEo
KTsgfQorICAgIGdmaTYoKTsKK30KKworLy8gRnVuY3Rpb24gZXhwcmVzc2lvbnMgaW4gYSBmdW5j
dGlvbjoKK3ZhciBneDEgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKGd4MSk7IHN1bSArPSB2YWx1
ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5k
c0ZvcihudWxsKSk7Jyk7IH0KK2d4MSgpOworCit2YXIgZ3gyID0gZnVuY3Rpb24oa2V5KSB7Cisg
ICAgYm91bmRzKGd4Mik7CisgICAgdmFyIGd4MmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4MmEp
OyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFs
cy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgZ3gyYSgpOworfQorZ3gyKCk7CisK
K3ZhciBneDMgPSBmdW5jdGlvbihrZXkpIHsKKyAgICBib3VuZHMoZ3gzKTsKKyAgICB2YXIgZ3gz
YSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBib3VuZHMoZ3gzYSk7CisgICAgICAgIHZhciBneDNi
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBib3VuZHMoZ3gzYik7CisgICAgICAgICAgICBz
dW0gKz0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgfQorICAgICAg
ICBneDNiKCk7CisgICAgfQorICAgIGd4M2EoKTsKK30KK2d4MygpOworCit2YXIgZ3g0ID0gZnVu
Y3Rpb24oa2V5KSB7IGJvdW5kcyhneDQpOyB2YXIgZ3g0YSA9IGZ1bmN0aW9uKCkge307IGJvdW5k
cyhneDRhKTsgZ3g0YSgpOyB9CitneDQoKTsKK3ZhciBneDUgPSBmdW5jdGlvbihrZXkpIHsgYm91
bmRzKGd4NSk7IHZhciBneDVhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneDVhKTsgc3VtICs9IHZh
bHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsnKTsgfTsgZ3g1YSgpOyB9CitneDUoKTsKK3ZhciBneDYgPSBmdW5jdGlv
bihrZXkpIHsgYm91bmRzKGd4Nik7IHZhciBneDZhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneDZh
KTsgdmFyIGd4NmIgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4NmIpOyBzdW0gKz0gdmFsdWU7IGV2
YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3Io
bnVsbCkpOycpOyB9OyBneDZiKCk7IH07IGd4NmEoKTsgfQorZ3g2KCk7CisKKy8vIEluZGVudGVk
IGZ1bmN0aW9uIGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246Cit7CisgICAgdmFyIGd4aTEgPSBm
dW5jdGlvbihrZXkpIHsgYm91bmRzKGd4aTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2
YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9
CisgICAgZ3hpMSgpOworCisgICAgdmFyIGd4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAg
Ym91bmRzKGd4aTIpOworICAgICAgICB2YXIgZ3hpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4
aTJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICBneGkyYSgpOworICAg
IH0KKyAgICBneGkyKCk7CisKKyAgICB2YXIgZ3hpMyA9IGZ1bmN0aW9uKGtleSkgeworICAgICAg
ICBib3VuZHMoZ3hpMyk7CisgICAgICAgIHZhciBneGkzYSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgYm91bmRzKGd4aTNhKTsKKyAgICAgICAgICAgIHZhciBneGkzYiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGJvdW5kcyhneGkzYik7CisgICAgICAgICAgICAgICAgc3VtICs9
IHZhbHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBneGkzYigpOworICAgICAgICB9CisgICAgICAgIGd4aTNh
KCk7CisgICAgfQorICAgIGd4aTMoKTsKKworICAgIHZhciBneGk0ID0gZnVuY3Rpb24oa2V5KSB7
IGJvdW5kcyhneGk0KTsgdmFyIGd4aTRhID0gZnVuY3Rpb24oKSB7fTsgYm91bmRzKGd4aTRhKTsg
Z3hpNGEoKTsgfQorICAgIGd4aTQoKTsKKyAgICB2YXIgZ3hpNSA9IGZ1bmN0aW9uKGtleSkgeyBi
b3VuZHMoZ3hpNSk7IHZhciBneGk1YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hpNWEpOyBzdW0g
Kz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3Jp
cHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBneGk1YSgpOyB9CisgICAgZ3hpNSgpOworICAgIHZh
ciBneGk2ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyhneGk2KTsgdmFyIGd4aTZhID0gZnVuY3Rp
b24oKSB7IGJvdW5kcyhneGk2YSk7IHZhciBneGk2YiA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hp
NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBneGk2YigpOyB9OyBneGk2YSgpOyB9
CisgICAgZ3hpNigpOworfQorCisvLyBHbG9iYWwgYW5ub3ltb3VzIGZ1bmN0aW9uOgordmFyIGFy
cmF5ID0gWzJdOwordmFyIGdmb3JFYWNoID0gWyBdLmZvckVhY2g7Cit2YXIgZ2JvdW5kRm9yRWFj
aCA9IGdmb3JFYWNoLmJpbmQoYXJyYXksIGZ1bmN0aW9uKGtleSkgeworICAgIGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsKKyAgICBzdW0gKz0gdmFsdWU7Cisg
ICAgc3VtICo9IHZhbHVlOworICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworfSk7CitnYm91bmRGb3JFYWNoKCk7
CisKK2V2YWwoIiBcbiIgKworIiAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5k
c0ZvcihudWxsKSk7XG4iICsKKyIgICAgZnVuY3Rpb24gZWYzKCkge1xuIiArCisiICAgICAgICBi
b3VuZHMoZWYzKTtcbiIgKworIiAgICAgICAgZnVuY3Rpb24gZWYzYSgpIHtcbiIgKworIiAgICAg
ICAgICAgIGJvdW5kcyhlZjNhKTtcbiIgKworIiAgICAgICAgICAgIGZ1bmN0aW9uIGVmM2IoKSB7
XG4iICsKKyIgICAgICAgICAgICAgICAgYm91bmRzKGVmM2IpO1xuIiArCisiICAgICAgICAgICAg
ICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3Vu
ZHNGb3IobnVsbCkpOycpO1xuIiArCisiICAgICAgICAgICAgfVxuIiArCisiICAgICAgICAgICAg
ZWYzYigpO1xuIiArCisiICAgICAgICB9XG4iICsKKyIgICAgICAgIGVmM2EoKTtcbiIgKworIiAg
ICB9XG4iICsKKyJcbiIgKworImVmMygpOyIKKyk7CisKK2V2YWwoIiBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7IGZ1bmN0aW9uIGV4MygpIHsgYm91bmRzKGV4
Myk7IGZ1bmN0aW9uIGV4M2EoKSB7IGJvdW5kcyhleDNhKTsgZnVuY3Rpb24gZXgzYigpIHsgYm91
bmRzKGV4M2IpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2Ny
aXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfSBleDNiKCk7IH0gZXgzYSgpOyB9IGV4MygpOyIpOwor
Cit7CisgICAgZXZhbCgiIFxuIiArCisgICAgICAgICAiICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5h
bHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTtcbiIgKworICAgICAgICAgIiAgICAvLyBUZXN0IGlu
ZGVudGVkIGZ1bmN0aW9uIHdpdGggaW5uZXIgZnVuY3Rpb25zLiBcbiIgKworICAgICAgICAgIiAg
ICBmdW5jdGlvbiBlZmkzKCkge1xuIiArCisgICAgICAgICAiICAgICAgICBib3VuZHMoZWZpMyk7
XG4iICsKKyAgICAgICAgICIgICAgICAgIGZ1bmN0aW9uIGVmaTNhKCkge1xuIiArCisgICAgICAg
ICAiICAgICAgICAgICAgYm91bmRzKGVmaTNhKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAg
IGZ1bmN0aW9uIGVmaTNiKCkge1xuIiArCisgICAgICAgICAiICAgICAgICAgICAgICAgIGJvdW5k
cyhlZmkzYik7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7XG4i
ICsKKyAgICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBl
ZmkzYigpO1xuIiArCisgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAg
IGVmaTNhKCk7XG4iICsKKyAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAiXG4iICsKKyAg
ICAgICAgICJlZmkzKCk7IgorICAgICAgICApOworCisgICAgZXZhbCgiIGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsgZnVuY3Rpb24gZXhpMygpIHsgYm91bmRz
KGV4aTMpOyBmdW5jdGlvbiBleGkzYSgpIHsgYm91bmRzKGV4aTNhKTsgZnVuY3Rpb24gZXhpM2Io
KSB7IGJvdW5kcyhleGkzYik7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9IGV4aTNiKCk7IH0gZXhpM2EoKTsgfSBl
eGkzKCk7Iik7Cit9Cg==
</data>
<flag name="review"
          id="239942"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216893</attachid>
            <date>2013-11-13 20:23:22 -0800</date>
            <delta_ts>2013-11-13 20:31:10 -0800</delta_ts>
            <desc>patch 2.</desc>
            <filename>bug-124245.patch</filename>
            <type>text/plain</type>
            <size>77227</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6ZnVuY3Rpb25FbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
cmVjb3JkUGFyc2UpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1u
KToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgor
ICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25C
b2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpzdGFydENvbHVtbik6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbmRD
b2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAo
SlNDOjpFdmFsTm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbklu
Zm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6
CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4
Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJv
bUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0
RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1
dGFibGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnJlY29y
ZFBhcnNlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpHZXRDYWxsZXJDb2RlQmxvY2tG
dW5jdG9yOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6R2V0Q2Fs
bGVyQ29kZUJsb2NrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkdldENhbGxl
ckNvZGVCbG9ja0Z1bmN0b3I6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlZNOjpzY3JpcHRC
b3VuZHNGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0xMS0xMyAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBBUk02NCBidWlsZCBh
ZnRlciByZWNlbnQgSmF2YVNjcmlwdENvcmUgY2hhbmdlcwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQwLDEwICsxNjQwLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5s
aW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvblN0YXJ0
Q29sdW1uKCk7CiAgICAgICAgIHN0YXJ0Q29sdW1uICs9ICh1bmxpbmtlZEV4ZWN1dGFibGUtPmZp
cnN0TGluZU9mZnNldCgpID8gMSA6IG93bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25F
bmRDb2x1bW4oKTsKKyAgICAgICAgZW5kQ29sdW1uICs9ICFsaW5lQ291bnQgPyBzdGFydENvbHVt
biA6IDE7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5s
aW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VM
ZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3Vy
Y2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxl
bmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1
bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFy
dENvbHVtbik7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZp
cnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
ICAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBl
eGVjdXRhYmxlKTsKICAgICB9CiAKQEAgLTE2NTQsMTAgKzE2NTYsMTIgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUg
PSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExp
bmVPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPmZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgc3RhcnRDb2x1bW4gKz0gKHVu
bGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCkgPyAxIDogb3duZXJFeGVjdXRhYmxl
LT5zdGFydENvbHVtbigpKTsKKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRF
eGVjdXRhYmxlLT5mdW5jdGlvbkVuZENvbHVtbigpOworICAgICAgICBlbmRDb2x1bW4gKz0gIWxp
bmVDb3VudCA/IHN0YXJ0Q29sdW1uIDogMTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVu
Z3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0
YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExp
bmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVu
bGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0
Q29sdW1uLCBlbmRDb2x1bW4pOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTQgQEAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuYwogICAgICwgbV9saW5lQ291bnQobm9k
ZS0+bGFzdExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQogICAgICwgbV9mdW5jdGlvblN0YXJ0
T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uU3RhcnQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAg
ICwgbV9mdW5jdGlvblN0YXJ0Q29sdW1uKG5vZGUtPnN0YXJ0Q29sdW1uKCkpCisgICAgLCBtX2Z1
bmN0aW9uRW5kQ29sdW1uKG5vZGUtPmVuZENvbHVtbigpKQogICAgICwgbV9zdGFydE9mZnNldChu
b2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCiAgICAg
LCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKICAgICAsIG1fZmVhdHVy
ZXMobm9kZS0+ZmVhdHVyZXMoKSkKICAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xl
KG5vZGUtPmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKQogeworICAgIGlmICghbV9saW5l
Q291bnQpCisgICAgICAgIG1fZnVuY3Rpb25FbmRDb2x1bW4gLT0gbV9mdW5jdGlvblN0YXJ0Q29s
dW1uOwogfQogCiBzaXplX3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNv
dW50KCkgY29uc3QKQEAgLTEyNCw4ICsxMjcsOSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlu
a2VkRnVuY3Rpb25FeGVjCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1f
Zmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0
ICsgbV9zdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fZnVuY3Rpb25T
dGFydENvbHVtbiArIDE7IC8vIHN0YXJ0Q29sdW1uIHNob3VsZCBzdGFydCBmcm9tIDEsIG5vdCAw
LgorICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IG1fZnVuY3Rpb25FbmRDb2x1bW4gKyAoIW1fbGlu
ZUNvdW50ID8gc3RhcnRDb2x1bW4gOiAxKTsKICAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnBy
b3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJz
dExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0
YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUodm0sIGNv
ZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4pOwogfQogCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
T2JqZWN0KiogZXhjZXB0aW9uKQpAQCAtMjA0LDYgKzIwOCw3IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSoKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFs
c2UpCiAgICAgLCBtX2ZpcnN0TGluZSgwKQogICAgICwgbV9saW5lQ291bnQoMCkKKyAgICAsIG1f
ZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgICwgbV9mZWF0dXJlcygwKQogICAgICwgbV9jb2RlVHlw
ZShjb2RlVHlwZSkKICAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9u
U3RhcnRPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0Q29sdW1uOyB9CisgICAgdW5zaWduZWQgZnVuY3Rpb25F
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRW5kQ29sdW1uOyB9CiAgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CiAgICAg
dW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KIApAQCAt
MTYyLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAg
dW5zaWduZWQgbV9mdW5jdGlvblN0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25T
dGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uRW5kQ29sdW1uOwogICAgIHVuc2ln
bmVkIG1fc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CiAKQEAgLTQ0
MSwxOCArNDQzLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAogICAgICAgICBp
bnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGluZUNvdW50KQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxp
bmVDb3VudCwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKICAgICAgICAgbV9mZWF0dXJlcyA9
IGZlYXR1cmVzOwogICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CiAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICBtX2xp
bmVDb3VudCA9IGxpbmVDb3VudDsKKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAg
ICAgfQogCiAgICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXM7IH0KICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQogICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsK
QEAgLTQ5Miw2ICs0OTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlh
YmxlcyA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlczsKICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
OSArMjgzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJv
ZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExv
Y2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV92bSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAg
ICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fdm0sIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBp
bnQgZnVuY3Rpb25TdGFydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE1ICsxMTQsMTYgQEAgU3RhdGVtZW50Tm9k
ZSogU2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5s
aW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK2lubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVt
bikKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2Rl
OjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBu
ZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVt
biwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5v
ZGUgPSBuZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFy
dENvbHVtbiwgZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1
cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNT
RVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVt
b3ZlTGFzdCgpOwpAQCAtMTMzLDE0ICsxMzQsMTUgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4g
UHJvZ3JhbU5vZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZh
bE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpF
dmFsTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmll
clNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFs
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAg
OiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51
bUNvbnN0YW50cykKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVz
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoVk0qIHZt
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAg
ICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUodm0sIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxO
b2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
ZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+
bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7
CkBAIC0xNzksMTUgKzE4MSwxNyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFt
ZXRlcnMoCiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLWlubGluZSBGdW5j
dGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVuY3Rp
b25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCiAgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0
cmljdENvbnRleHQpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9l
bmRDb2x1bW4oZW5kQ29sdW1uKQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVu
Y3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlv
blN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZh
cmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3Rh
cnRDb2x1bW4pCisgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiB7CiB9CiAKQEAgLTIwNSwx
NCArMjA5LDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMKICAg
ICBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZN
KiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25C
b2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0
cmljdENvbnRleHQpOworICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29u
dGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9k
ZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3Jl
YXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2Rl
ID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBz
dGFydENvbHVtbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiAsIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9k
ZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsMzMgKzE0NjgsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25O
b2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVh
dGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
cm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgeyByZXR1cm4gbV9zdGFy
dENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnRDb2x1bW47IH0KKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRDb2x1bW47IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgT1ZFUlJJ
REU7CiAKICAgICAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKKyAgICAgICAgdW5zaWduZWQg
bV9lbmRDb2x1bW47CiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3Bl
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9u
Tm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICB1bnNpZ25lZCBz
dGFydENvbHVtbigpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Nv
cGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShW
TSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZp
ZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKKyAgICAgICAgRXZhbE5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBPVkVSUklERTsKKworICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9Owog
CiAgICAgY2xhc3MgRnVuY3Rpb25QYXJhbWV0ZXJzIDogcHVibGljIFJlZkNvdW50ZWQ8RnVuY3Rp
b25QYXJhbWV0ZXJzPiB7CkBAIC0xNTE5LDggKzE1MjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAg
ICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
c3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAg
ICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5z
aXplKCk7IH0KQEAgLTE1NDAsMTIgKzE1NDUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQgZnVuY3Rpb25TdGFydCkgeyBtX2Z1bmN0aW9uU3Rh
cnQgPSBmdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBlbmRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CkBAIC0xNTUzLDYgKzE1NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBp
bnQgbV9mdW5jdGlvblN0YXJ0OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOworICAg
ICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY0V4cHJO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2MiwxMyArMTE2Miwx
NiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgIG5leHQoKTsKIAotICAgIGlmICht
YXRjaChDTE9TRUJSQUNFKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHN0cmljdE1v
ZGUoKSk7CisgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIHVuc2lnbmVkIGVu
ZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1l
bnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAg
ICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIo
Y29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShw
YXJzZVNvdXJjZUVsZW1lbnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIpLCAiQ2Fu
bm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIpOwotICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29s
dW1uLCBzdHJpY3RNb2RlKCkpOworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1u
KCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsK
IH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBh
cnNlTW9kZSBtb2RlKQpAQCAtMTIzMiw4ICsxMjM1LDExIEBAIHRlbXBsYXRlIDxGdW5jdGlvblJl
cXVpcmVtZW50cyByZXF1aXJlbWUKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBj
YWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogICAgICAg
ICBBU1NFUlQoZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0
YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBpZiAoZW5k
TG9jYXRpb24ubGluZSA9PSBib2R5U3RhcnRMaW5lKQorICAgICAgICAgICAgYm9keUVuZENvbHVt
biA9IGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zm
c2V0OwogCi0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RN
b2RlKTsKKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIGVuZExvY2F0aW9uLCBib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hl
ZEluZm8tPnN0cmljdE1vZGUpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVz
dG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZG
YWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFi
bGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsMTMgKzkwMCwxNSBAQCBQYXNzUmVm
UHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+
IHJlc3VsdDsKICAgICBpZiAobV9zb3VyY2VFbGVtZW50cykgewogICAgICAgICBKU1Rva2VuTG9j
YXRpb24gZW5kTG9jYXRpb247Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpOworICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGlu
ZU51bWJlcigpOwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGVuZExvY2F0aW9uLnN0YXJ0T2Zm
c2V0ID0gbV9sZXhlci0+Y3VycmVudE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1
bW4gPSBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCArIDE7CiAgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX3ZtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3NvdXJjZUVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVu
Y0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCkBAIC05MTQsNyArOTE2LDcgQEAgUGFzc1JlZlB0cjxQ
YXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKm1fc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQ29u
c3RhbnRzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBt
X2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9s
ZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
bV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xleGVyLT5saW5lTnVtYmVyKCksIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4g
cmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8vIHJl
cG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBl
dmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsx
NTMsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwg
RXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRl
RnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgYm9vbCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHko
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGJvb2wpIHsgcmV0dXJuIDE7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50LCBpbnQp
IHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsOCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAg
ICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0ganNDYXN0PFVubGlu
a2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7
CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlu
a2VkQ29kZS0+Zmlyc3RMaW5lKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gc291
cmNlLmZpcnN0TGluZSgpID8gc291cmNlLnN0YXJ0Q29sdW1uKCkgOiAwOwotICAgICAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtl
ZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5s
aW5rZWRDb2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4pOworICAgICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4gPSB1bmxpbmtlZENvZGUtPmVuZENvbHVtbigpOworICAgICAgICBleGVjdXRhYmxl
LT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRD
b2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIHJldHVy
biB1bmxpbmtlZENvZGU7CiAgICAgfQogCkBAIC05NCwxMCArOTUsMTEgQEAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZAogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3Zl
KGFkZFJlc3VsdC5pdGVyYXRvcik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5l
KCksIHJvb3ROb2RlLT5zdGFydENvbHVtbigpKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHJvb3ROb2RlLT5zdGFy
dENvbHVtbigpLCByb290Tm9kZS0+ZW5kQ29sdW1uKCkpOwogCiAgICAgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlKiB1bmxpbmtlZENvZGUgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0s
IGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOwotICAgIHVubGlua2VkQ29kZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5s
YXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAgICB1bmxpbmtlZENvZGUtPnJlY29y
ZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+
bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmVuZENvbHVtbigpKTsK
KwogICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcih2bSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRl
KCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MCw3ICsxODAsOCBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6CiAgICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhlYXAuaXNE
ZWZlcnJlZCgpKTsKLSAgICAKKyAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0gVUlOVF9NQVgpOwor
CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CkBAIC0y
MDksNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Ogog
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KICAgICAg
ICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKICAgICAg
ICAgICAgICp2bSwgZXhlY3V0YWJsZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7Ci0gICAgcmVjb3JkUGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1
bW4oKSk7IAorICAgIHJlY29yZFBhcnNlKGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5mZWF0dXJlcygpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCksIGVuZENv
bHVtbigpKTsgCiAgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewogICAgICAgICBleGNlcHRp
b24gPSB2bS0+dGhyb3dFeGNlcHRpb24oCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwKQEAgLTM2Miw3ICszNjMsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogCiAKIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIkZ1bmN0aW9uRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogCi1GdW5jdGlv
bkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1
bW4pCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbikKICAgICA6IFNjcmlwdEV4ZWN1dGFi
bGUodm0uZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2VkRXhl
Y3V0YWJsZSh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogewpAQCAtMzcxLDYgKzM3Miw3
IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICBtX2ZpcnN0
TGluZSA9IGZpcnN0TGluZTsKICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9zdGFy
dENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwogfQog
CiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01NzAs
OSArNTcyLDEwIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAg
ICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZEZ1bmN0
aW9uLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZS5zdGFydE9mZnNldCgpICsgdW5saW5rZWRGdW5jdGlvbi0+c3RhcnRPZmZzZXQoKTsKICAgICB1
bnNpZ25lZCBzdGFydENvbHVtbiA9IHNvdXJjZS5zdGFydENvbHVtbigpOworICAgIHVuc2lnbmVk
IGVuZENvbHVtbiA9IHVubGlua2VkRnVuY3Rpb24tPmZ1bmN0aW9uRW5kQ29sdW1uKCkgKyAxOwog
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0
aCgpOwogICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0
YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENv
bHVtbik7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVu
Y3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0
aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVt
biwgZW5kQ29sdW1uKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJp
bmcoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTggQEAgcHVibGljOgog
ICAgICAgICAKICAgICBDb2RlQmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCkgY29uc3Q7CiAKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5
cGU7CisgICAgfQogICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGVUeXBlOwogICAgIH0KKyAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBQcm9ncmFt
RXhlY3V0YWJsZVR5cGU7CisgICAgfQogCiAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0
CiAgICAgewpAQCAtMzU1LDYgKzM2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShz
b3VyY2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1v
ZGVGZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAs
IG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTM2Myw2ICszNzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZmVhdHVy
ZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgICwg
bV9uZXZlcklubGluZShmYWxzZSkKKyAgICAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKICAg
ICB7CiAgICAgfQogCkBAIC0zNzgsNiArMzg4LDcgQEAgcHVibGljOgogICAgIGludCBsaW5lTm8o
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZTsgfQogICAgIGludCBsYXN0TGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQogICAgIGJvb2wgdXNlc0FyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlOyB9CkBAIC0z
OTUsMTMgKzQwNiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uKQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29s
IGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgewogICAgICAgICBtX2Zl
YXR1cmVzID0gZmVhdHVyZXM7CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAg
ICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKICAgICAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0
Q29sdW1uOworICAgICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKKyAgICAgICAg
bV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAgICAgfQogCiAgICAgdm9pZCBpbnN0YWxsQ29kZShD
b2RlQmxvY2sqKTsKQEAgLTQzNyw2ICs0NTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fZmly
c3RMaW5lOwogICAgIGludCBtX2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47
CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiB9OwogCiBjbGFzcyBFdmFsRXhlY3V0YWJsZSA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTU0OSw5ICs1NjMsOSBAQCBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTY3Jp
cHRFeGVjdXRhYmxlIEJhc2U7CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVh
dGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKQorICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1
dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5l
LCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbikKICAgICB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1
bmN0aW9uRXhlY3V0YWJsZSh2bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGlu
ZSwgbGFzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0
YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CiAgICAgfQpAQCAtNjM5LDcgKzY1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
Q29kZSgpOwogCiBwcml2YXRlOgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGlu
ZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKTsKIAogICAgIGJvb2wgaXNDb21waWxpbmco
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzU0LDQgKzc1NCw4MSBAQCB2b2lkIFZNOjpkdW1wUmVnRXhwVHJhY2UoKQog
fQogI2VuZGlmCiAKK2NsYXNzIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgeworcHVibGljOgor
ICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IoKQorICAgICAgICA6IG1faXRlcmF0aW9ucygw
KQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgICsrbV9pdGVyYXRpb25zOworICAg
ICAgICBpZiAobV9pdGVyYXRpb25zIDwgMikKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworCisgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2Nr
KCk7CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorCitwcml2
YXRlOgorICAgIGludCBtX2l0ZXJhdGlvbnM7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
K307CisKK0pTVmFsdWUgVk06OnNjcmlwdEJvdW5kc0ZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgc2NyaXB0KQoreworICAgIEFTU0VSVChleGVjID09IHRvcENhbGxGcmFtZSk7CisgICAgU2Ny
aXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKKworICAgIGlmIChzY3JpcHQuaXNOdWxsKCkpIHsK
KyAgICAgICAgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvciBpdGVyOworICAgICAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGl0ZXIuY29kZUJs
b2NrKCk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OyAKKworICAgIH0gZWxzZSBpZiAoc2NyaXB0LmlzRnVuY3Rpb24oKSkgeworICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihzY3JpcHQudG9PYmplY3QoZXhl
YykpOworICAgICAgICBleGVjdXRhYmxlID0gZnVuY09iai0+anNFeGVjdXRhYmxlKCk7CisKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICB1bnNpZ25lZCBz
dGFydExpbmUgPSBleGVjdXRhYmxlLT5saW5lTm8oKTsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVt
biA9IGV4ZWN1dGFibGUtPnN0YXJ0Q29sdW1uKCk7CisgICAgdW5zaWduZWQgZW5kTGluZSA9IGV4
ZWN1dGFibGUtPmxhc3RMaW5lKCk7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gZXhlY3V0YWJs
ZS0+ZW5kQ29sdW1uKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgIGlmIChl
eGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBTdHJpbmcgaW5mZXJyZWROYW1lID0gZnVuY0V4
ZWN1dGFibGUtPmluZmVycmVkTmFtZSgpLnN0cmluZygpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCJmdW5jdGlvbiBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGluZmVycmVkTmFtZSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzRXZhbEV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ImV2YWwiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+
aXNQcm9ncmFtRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInByb2dy
YW0iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoIiB7ICIpOworICAg
IHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhcnRMaW5lKTsKKyAgICByZXN1bHQuYXBwZW5kKCI6Iik7
CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihzdGFydENvbHVtbik7CisgICAgcmVzdWx0LmFwcGVu
ZCgiIC0gIik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRMaW5lKTsKKyAgICByZXN1bHQu
YXBwZW5kKCI6Iik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRDb2x1bW4pOworICAgIHJl
c3VsdC5hcHBlbmQoIiB9Iik7CisKKyAgICByZXR1cm4gSlNWYWx1ZShqc1N0cmluZyhleGVjLCBy
ZXN1bHQudG9TdHJpbmcoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkaXNjYXJkQWxsQ29kZSgpOwogCisgICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIGZvciB0
ZXN0aW5nIHB1cnBvc2VzOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHNjcmlw
dEJvdW5kc0ZvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIHNjcmlwdCk7CisKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgQ2xlYXJFeGNlcHRpb25TY29wZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1
OTI3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIxIEBACisyMDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBqcy9kb20v
c2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9X
ZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6
CisgICAgICAgICogdGVzdGluZy9KU0ludGVybmFsc0N1c3RvbS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbnRlcm5hbHM6OnNjcmlwdEJvdW5kc0Zvcik6CisKIDIwMTMtMTEtMTMg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciBpbXByb3ZlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjk2OSw2ICsyOTY5LDcgQEAgc2V0KFdlYkNv
cmVUZXN0U3VwcG9ydF9TT1VSQ0VTCiAKICAgICB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3Bw
CiAgICAgdGVzdGluZy9JbnRlcm5hbHMuY3BwCisgICAgdGVzdGluZy9KU0ludGVybmFsc0N1c3Rv
bS5jcHAKICkKIAogc2V0KFdlYkNvcmVUZXN0U3VwcG9ydF9MSUJSQVJJRVMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODI0LDYgKzgyNCw3IEBAIF9fWk43V2ViQ29yZTIy
SFRNTFBsdWdJbkltYWdlRWxlbWVudDI0cmUKIF9fWk43V2ViQ29yZTIySFRNTFBsdWdJbkltYWdl
RWxlbWVudDI5c2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW5FYgogX19aTjdXZWJDb3JlMjJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzMTRzaGFyZWRGZWF0dXJlc0V2CiBfX1pON1dlYkNvcmUyMlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQyNmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzRXYKK19fWk43
V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDJ2bUV2CiBfX1pON1dlYkNvcmUyMlN0b3Jh
Z2VFdmVudERpc3BhdGNoZXIzNGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5T
XzlQYWdlR3JvdXBFUktOM1dURjZWZWN0b3JJTlMzXzZSZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5T
M18xNUNyYXNoT25PdmVyZmxvd0VFRVJLTlMzXzZTdHJpbmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJp
dHlPcmlnaW5FCiBfX1pON1dlYkNvcmUyMlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdFUDhOU1N0cmlu
Z1A1TlNVUkwKIF9fWk43V2ViQ29yZTIyY291bnRlclZhbHVlRm9yRWxlbWVudEVQTlNfN0VsZW1l
bnRFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBw
b3J0LnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjeHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc1Niw2ICs3NTYsNjggQEAKICAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2
NCciPg0KICAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KICAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0ZXN0aW5nXEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCI+
DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVy
Pg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+
DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj4NCisgICAgICA8L1ByZWNvbXBp
bGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPg0KKyAgICAgIDwv
UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj4NCisg
ICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCci
Pg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dh
cm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwv
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdz
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fp
cm98V2luMzInIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7JShEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
X1dpbkNhaXJvfHg2NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWdTdWZmaXh8V2luMzInIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7JShEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnU3VmZml4fHg2NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVT
cGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPEZvcmNl
ZEluY2x1ZGVGaWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+DQorICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZv
cmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAgICAgIDxG
b3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVz
Pg0KKyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj4NCisgICAgICA8L0ZvcmNlZElu
Y2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj4NCisgICAgICA8
L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+DQor
ICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
Pg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVy
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn
Ij4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRl
ciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2lu
Q2Fpcm98V2luMzInIj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVj
b21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisg
ICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRl
cj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRI
ZWFkZXI+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPjQwNjU7NDI3Mzs0NTY1
OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj40MDY1OzQyNzM7NDU2NTs0
NzAxOzQ3MDI7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj40MDY1OzQy
NzM7NDU2NTs0NzAxOzQ3MDI7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPg0KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyI+
NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNh
YmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMy
JyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9E
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3Mg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2
NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwv
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4N
CisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVz
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn
Ij4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZp
bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9X
aW5DYWlyb3xXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAgICAgIDxG
b3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVz
Pg0KKyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+DQorICAgICAgPC9Gb3JjZWRJbmNs
dWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+DQorICAgICAgPC9Gb3Jj
ZWRJbmNsdWRlRmlsZXM+DQorICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHRlc3RpbmdcanNcV2ViQ29yZVRlc3RTdXBwb3J0LmNwcCI+DQogICAgICAgPFByZWNv
bXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8V2luMzInIj4NCiAgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvai5maWx0
ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
VGVzdFN1cHBvcnQudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cdGVzdGluZ1xJbnRlcm5hbFNldHRpbmdzLmNwcCI+DQogICAgICAgPEZpbHRlcj50ZXN0
aW5nPC9GaWx0ZXI+DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHRlc3RpbmdcSlNJbnRlcm5hbHNDdXN0b20uY3BwIj4NCisgICAgICA8RmlsdGVyPnRlc3Rp
bmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cdGVzdGluZ1xqc1xXZWJDb3JlVGVzdFN1cHBvcnQuY3BwIj4NCiAgICAgICA8RmlsdGVyPnRl
c3Rpbmc8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5MjM3
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02Mjg3LDYgKzYyODcsNyBAQAogCQlGRTlFODlGQzE2RTJEQzA1MDBB
OTA4RjggLyogT3JpZ2luTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU5RTg5RkExNkUyREMwNDAwQTkwOEY4IC8qIE9yaWdpbkxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUFEN0Q4NzE2
QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUFEN0Q4NTE2QzMzOUVFMDBE
NDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgKi87IH07CiAJCUZFQUQ3RDg4
MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUFEN0Q4NjE2QzMzOUVFMDBE
NDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oICovOyB9OworCQlGRUFGNUY5ODE4
MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBRjVGOTcxODM0N0U4MDAwMTI2RjIxIC8q
IEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRkVBRjY2NTQxNjc5NzAzMjAwNjJEMEM1
IC8qIERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUFGNjY1MzE2Nzk3MDA3MDA2MkQwQzUgLyogRGF0YWJhc2VTZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUIyNkQy
ODE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCMjZEMjcxNjdBOEYyQTAwRkREMjZCIC8q
IERhdGFiYXNlU2VydmVyLmNwcCAqLzsgfTsKIAkJRkVCQzVGMzExNkJEMENDMzAwNjU5QkQzIC8q
IERhdGFiYXNlQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRUJDNUYyRjE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmNwcCAqLzsg
fTsKQEAgLTEzNDYwLDYgKzEzNDYxLDcgQEAKIAkJRkU5RTg5RkExNkUyREMwNDAwQTkwOEY4IC8q
IE9yaWdpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3JpZ2luTG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUFEN0Q4NTE2QzMzOUVFMDBENDY3
MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVBRDdEODYxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5z
YWN0aW9uQmFja2VuZFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RUFGNUY5NzE4MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnRlcm5hbHNDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUFGNjY1MzE2Nzk3MDA3MDA2MkQwQzUgLyogRGF0
YWJhc2VTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VT
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCMjZEMjcxNjdBOEYyQTAw
RkREMjZCIC8qIERhdGFiYXNlU2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERhdGFiYXNlU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVCQzVGMkYxNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZUJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3NTIsNiArMTQ3NTQsNyBAQAogCQk0MTdEQTRDRDEzNzM0
MjA0MDA3QzU3RkIgLyogdGVzdGluZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJRkVBRjVGOTcxODM0N0U4MDAwMTI2RjIxIC8qIEpTSW50ZXJuYWxzQ3Vz
dG9tLmNwcCAqLywKIAkJCQk0MTgxNUMxQjEzODMxOTYzMDA1N0FBQTQgLyoganMgKi8sCiAJCQkJ
NDE3REE0Q0YxMzczNDMyNjAwN0M1N0ZCIC8qIEludGVybmFscy5jcHAgKi8sCiAJCQkJNDE3REE0
Q0UxMzczNDMyNjAwN0M1N0ZCIC8qIEludGVybmFscy5oICovLApAQCAtMjU0ODEsNiArMjU0ODQs
NyBAQAogCQkJCUE3QkY3RURGMTRDOTE3NUEwMDE0NDg5RCAvKiBJbnRlcm5hbFNldHRpbmdzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzRTI5RTVFMTY3QThBMTkwMDU4NkQzRCAvKiBJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxN0RBNzFEMTM3MzVE
RkEwMDdDNTdGQiAvKiBKU0ludGVybmFscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRUFGNUY5
ODE4MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc0MEI1QTcxNEM5MzVBRjAwQTc3RkE0IC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1M0VEM0ZERTE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NDBCNTk3MTRDOTM1
QUYwMEE3N0ZBNCAvKiBKU01hbGxvY1N0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNTkyMzcpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEz
OCw2ICsxMzgsOSBAQAogICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZEJlZ2luRnJhbWUoKTsKICAg
ICB2b2lkIGVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcmFtZSgpOwogCisgICAgLy8gQ2FsbGluZyBz
Y3JpcHRCb3VuZHNGb3JGdW5jdGlvbigpIHdpdGggbnVsbCBnZXRzIHRoZSBib3VuZHMgZm9yIHRo
ZSBzY3JpcHQgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgW0N1c3RvbV0gRE9NU3RyaW5nIHNj
cmlwdEJvdW5kc0ZvcihhbnkgZnVuY09yTnVsbCk7CisKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBi
b29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcgZnJvbSwgbG9uZyBsZW5ndGgpOwogICAgIFtS
YWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3JhbW1hck1hcmtlcihsb25nIGZyb20sIGxvbmcg
bGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc0F1dG9jb3JyZWN0ZWRN
YXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSlNJbnRlcm5hbHNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTSW50ZXJuYWxzLmgiCisKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSlNDOjpKU1ZhbHVlIEpTSW50ZXJuYWxzOjpzY3JpcHRCb3VuZHNGb3Io
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTQzo6SlNWYWx1ZSBzY3JpcHQgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICByZXR1cm4g
dm0uc2NyaXB0Qm91bmRzRm9yKGV4ZWMsIHNjcmlwdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTI3MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTExLTEzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1u
IGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3NjcmlwdC1zdGFydC1l
bmQtbG9jYXRpb25zLmpzOiBBZGRlZC4KKwogMjAxMy0xMS0xMyAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlvdXQgVGVzdCBhbmltYXRpb25zL3Jl
c3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWwgaXMgZmxha3kKSW5kZXg6IExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5k
LWxvY2F0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODMgQEAK
K3Byb2dyYW0geyA3OjkgLSAxODoxIH0KK3Byb2dyYW0geyAxOjEgLSAzNDg6MSB9CitmdW5jdGlv
biAiZjAiIHsgMTo5MSAtIDE6MjUzIH0KK2Z1bmN0aW9uICJmMGEiIHsgMToxMjAgLSAxOjI0NCB9
CitmdW5jdGlvbiAiZjBiIiB7IDE6MTUwIC0gMToyMzUgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQor
ZnVuY3Rpb24gIngwIiB7IDE6Mjg1IC0gMTo0NzQgfQorZnVuY3Rpb24gIngwYSIgeyAxOjMxOSAt
IDE6NDY0IH0KK2Z1bmN0aW9uICJ4MGIiIHsgMTozNTUgLSAxOjQ1NCB9CitldmFsIHsgMToxIC0g
MTo2MSB9CitmdW5jdGlvbiAiZjEiIHsgOToyMiAtIDk6MTIwIH0KK2V2YWwgeyAxOjEgLSAxOjYx
IH0KK2Z1bmN0aW9uICJmMiIgeyAxMjoyMiAtIDE2OjUgfQorZnVuY3Rpb24gImYyYSIgeyAxNDoy
NCAtIDE0OjEyMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZjMiIHsgMTk6MjIg
LSAzMTo1IH0KK2Z1bmN0aW9uICJmM2EiIHsgMjE6MjQgLSAyOTo5IH0KK2Z1bmN0aW9uICJmM2Ii
IHsgMjM6MjggLSAyNzoxMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZjQiIHsg
MzQ6MjIgLSAzNDo3NSB9CitmdW5jdGlvbiAiZjRhIiB7IDM0OjUxIC0gMzQ6NTIgfQorZnVuY3Rp
b24gImY1IiB7IDM2OjIyIC0gMzY6MTYwIH0KK2Z1bmN0aW9uICJmNWEiIHsgMzY6NTEgLSAzNjox
NTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImY2IiB7IDM4OjIyIC0gMzg6MjAw
IH0KK2Z1bmN0aW9uICJmNmEiIHsgMzg6NTEgLSAzODoxOTAgfQorZnVuY3Rpb24gImY2YiIgeyAz
ODo4MSAtIDM4OjE4MCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZmkxIiB7IDQz
OjI3IC0gNDM6MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTIiIHsgNDY6
MjcgLSA1MDo5IH0KK2Z1bmN0aW9uICJmaTJhIiB7IDQ4OjI5IC0gNDg6MTI5IH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTMiIHsgNTM6MjcgLSA2NTo5IH0KK2Z1bmN0aW9uICJm
aTNhIiB7IDU1OjI5IC0gNjM6MTMgfQorZnVuY3Rpb24gImZpM2IiIHsgNTc6MzMgLSA2MToxNyB9
CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZmk0IiB7IDY4OjI3IC0gNjg6ODQgfQor
ZnVuY3Rpb24gImZpNGEiIHsgNjg6NTggLSA2ODo1OSB9CitmdW5jdGlvbiAiZmk1IiB7IDcwOjI3
IC0gNzA6MTY5IH0KK2Z1bmN0aW9uICJmaTVhIiB7IDcwOjU4IC0gNzA6MTU4IH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTYiIHsgNzI6MjcgLSA3MjoyMTIgfQorZnVuY3Rpb24g
ImZpNmEiIHsgNzI6NTggLSA3MjoyMDEgfQorZnVuY3Rpb24gImZpNmIiIHsgNzI6OTAgLSA3Mjox
OTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gIngxIiB7IDc3OjI4IC0gNzc6MTI2
IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4MiIgeyA4MDoyOCAtIDg0OjUgfQor
ZnVuY3Rpb24gIngyYSIgeyA4MjozMCAtIDgyOjEyOSB9CitldmFsIHsgMToxIC0gMTo2MSB9Citm
dW5jdGlvbiAieDMiIHsgODc6MjggLSA5OTo1IH0KK2Z1bmN0aW9uICJ4M2EiIHsgODk6MzAgLSA5
Nzo5IH0KK2Z1bmN0aW9uICJ4M2IiIHsgOTE6MzQgLSA5NToxMyB9CitldmFsIHsgMToxIC0gMTo2
MSB9CitmdW5jdGlvbiAieDQiIHsgMTAyOjI4IC0gMTAyOjg3IH0KK2Z1bmN0aW9uICJ4NGEiIHsg
MTAyOjYzIC0gMTAyOjY0IH0KK2Z1bmN0aW9uICJ4NSIgeyAxMDQ6MjggLSAxMDQ6MTcyIH0KK2Z1
bmN0aW9uICJ4NWEiIHsgMTA0OjYzIC0gMTA0OjE2MiB9CitldmFsIHsgMToxIC0gMTo2MSB9Citm
dW5jdGlvbiAieDYiIHsgMTA2OjI4IC0gMTA2OjIxOCB9CitmdW5jdGlvbiAieDZhIiB7IDEwNjo2
MyAtIDEwNjoyMDggfQorZnVuY3Rpb24gIng2YiIgeyAxMDY6OTkgLSAxMDY6MTk4IH0KK2V2YWwg
eyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTEiIHsgMTExOjMzIC0gMTExOjEzMiB9CitldmFs
IHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieGkyIiB7IDExNDozMyAtIDExODo5IH0KK2Z1bmN0
aW9uICJ4aTJhIiB7IDExNjozNSAtIDExNjoxMzUgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVu
Y3Rpb24gInhpMyIgeyAxMjE6MzMgLSAxMzM6OSB9CitmdW5jdGlvbiAieGkzYSIgeyAxMjM6MzUg
LSAxMzE6MTMgfQorZnVuY3Rpb24gInhpM2IiIHsgMTI1OjM5IC0gMTI5OjE3IH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTQiIHsgMTM2OjMzIC0gMTM2Ojk2IH0KK2Z1bmN0aW9u
ICJ4aTRhIiB7IDEzNjo3MCAtIDEzNjo3MSB9CitmdW5jdGlvbiAieGk1IiB7IDEzODozMyAtIDEz
ODoxODEgfQorZnVuY3Rpb24gInhpNWEiIHsgMTM4OjcwIC0gMTM4OjE3MCB9CitldmFsIHsgMTox
IC0gMTo2MSB9CitmdW5jdGlvbiAieGk2IiB7IDE0MDozMyAtIDE0MDoyMzAgfQorZnVuY3Rpb24g
InhpNmEiIHsgMTQwOjcwIC0gMTQwOjIxOSB9CitmdW5jdGlvbiAieGk2YiIgeyAxNDA6MTA4IC0g
MTQwOjIwOCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiIiB7IDE0Njo1OCAtIDE1
MTo1IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9u
ICJnZjEiIHsgMTYwOjE5IC0gMTYwOjExOCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlv
biAiZ2YyIiB7IDE2MzoxOSAtIDE2NzoxIH0KK2Z1bmN0aW9uICJnZjJhIiB7IDE2NToyMSAtIDE2
NToxMjEgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImdmMyIgeyAxNzA6MTkgLSAx
ODI6MSB9CitmdW5jdGlvbiAiZ2YzYSIgeyAxNzI6MjEgLSAxODA6NSB9CitmdW5jdGlvbiAiZ2Yz
YiIgeyAxNzQ6MjUgLSAxNzg6OSB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ2Y0
IiB7IDE4NToxOSAtIDE4NTo3NiB9CitmdW5jdGlvbiAiZ2Y0YSIgeyAxODU6NTAgLSAxODU6NTEg
fQorZnVuY3Rpb24gImdmNSIgeyAxODc6MTkgLSAxODc6MTYxIH0KK2Z1bmN0aW9uICJnZjVhIiB7
IDE4Nzo1MCAtIDE4NzoxNTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImdmNiIg
eyAxODk6MTkgLSAxODk6MjA0IH0KK2Z1bmN0aW9uICJnZjZhIiB7IDE4OTo1MCAtIDE4OToxOTMg
fQorZnVuY3Rpb24gImdmNmIiIHsgMTg5OjgyIC0gMTg5OjE4MiB9CitldmFsIHsgMToxIC0gMTo2
MSB9CitmdW5jdGlvbiAiZ2ZpMSIgeyAxOTQ6MjQgLSAxOTQ6MTI0IH0KK2V2YWwgeyAxOjEgLSAx
OjYxIH0KK2Z1bmN0aW9uICJnZmkyIiB7IDE5NzoyNCAtIDIwMTo1IH0KK2Z1bmN0aW9uICJnZmky
YSIgeyAxOTk6MjYgLSAxOTk6MTI3IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJn
ZmkzIiB7IDIwNDoyNCAtIDIxNjo1IH0KK2Z1bmN0aW9uICJnZmkzYSIgeyAyMDY6MjYgLSAyMTQ6
OSB9CitmdW5jdGlvbiAiZ2ZpM2IiIHsgMjA4OjMwIC0gMjEyOjEzIH0KK2V2YWwgeyAxOjEgLSAx
OjYxIH0KK2Z1bmN0aW9uICJnZmk0IiB7IDIxOToyNCAtIDIxOTo4NSB9CitmdW5jdGlvbiAiZ2Zp
NGEiIHsgMjE5OjU3IC0gMjE5OjU4IH0KK2Z1bmN0aW9uICJnZmk1IiB7IDIyMToyNCAtIDIyMTox
NzAgfQorZnVuY3Rpb24gImdmaTVhIiB7IDIyMTo1NyAtIDIyMToxNTggfQorZXZhbCB7IDE6MSAt
IDE6NjEgfQorZnVuY3Rpb24gImdmaTYiIHsgMjIzOjI0IC0gMjIzOjIxNiB9CitmdW5jdGlvbiAi
Z2ZpNmEiIHsgMjIzOjU3IC0gMjIzOjIwNCB9CitmdW5jdGlvbiAiZ2ZpNmIiIHsgMjIzOjkxIC0g
MjIzOjE5MiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ3gxIiB7IDIyODoyNSAt
IDIyODoxMjQgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4MiIgeyAyMzE6MjUg
LSAyMzU6MSB9CitmdW5jdGlvbiAiZ3gyYSIgeyAyMzM6MjcgLSAyMzM6MTI3IH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJneDMiIHsgMjM4OjI1IC0gMjUwOjEgfQorZnVuY3Rpb24g
Imd4M2EiIHsgMjQwOjI3IC0gMjQ4OjUgfQorZnVuY3Rpb24gImd4M2IiIHsgMjQyOjMxIC0gMjQ2
OjkgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4NCIgeyAyNTM6MjUgLSAyNTM6
ODggfQorZnVuY3Rpb24gImd4NGEiIHsgMjUzOjYyIC0gMjUzOjYzIH0KK2Z1bmN0aW9uICJneDUi
IHsgMjU1OjI1IC0gMjU1OjE3MyB9CitmdW5jdGlvbiAiZ3g1YSIgeyAyNTU6NjIgLSAyNTU6MTYy
IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJneDYiIHsgMjU3OjI1IC0gMjU3OjIy
MiB9CitmdW5jdGlvbiAiZ3g2YSIgeyAyNTc6NjIgLSAyNTc6MjExIH0KK2Z1bmN0aW9uICJneDZi
IiB7IDI1NzoxMDAgLSAyNTc6MjAwIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJn
eGkxIiB7IDI2MjozMCAtIDI2MjoxMzAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
Imd4aTIiIHsgMjY1OjMwIC0gMjY5OjUgfQorZnVuY3Rpb24gImd4aTJhIiB7IDI2NzozMiAtIDI2
NzoxMzMgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4aTMiIHsgMjcyOjMwIC0g
Mjg0OjUgfQorZnVuY3Rpb24gImd4aTNhIiB7IDI3NDozMiAtIDI4Mjo5IH0KK2Z1bmN0aW9uICJn
eGkzYiIgeyAyNzY6MzYgLSAyODA6MTMgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
Imd4aTQiIHsgMjg3OjMwIC0gMjg3Ojk3IH0KK2Z1bmN0aW9uICJneGk0YSIgeyAyODc6NjkgLSAy
ODc6NzAgfQorZnVuY3Rpb24gImd4aTUiIHsgMjg5OjMwIC0gMjg5OjE4MiB9CitmdW5jdGlvbiAi
Z3hpNWEiIHsgMjg5OjY5IC0gMjg5OjE3MCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlv
biAiZ3hpNiIgeyAyOTE6MzAgLSAyOTE6MjM0IH0KK2Z1bmN0aW9uICJneGk2YSIgeyAyOTE6Njkg
LSAyOTE6MjIyIH0KK2Z1bmN0aW9uICJneGk2YiIgeyAyOTE6MTA5IC0gMjkxOjIxMCB9CitldmFs
IHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiIiB7IDI5ODo1NiAtIDMwMzoxIH0KK2V2YWwgeyAx
OjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEgLSAxNjo3IH0KK2Z1bmN0aW9uICJlZjMiIHsgMzoyMCAt
IDE0OjUgfQorZnVuY3Rpb24gImVmM2EiIHsgNToyNSAtIDEyOjkgfQorZnVuY3Rpb24gImVmM2Ii
IHsgNzoyOSAtIDEwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEgLSAxOjI0
MSB9CitmdW5jdGlvbiAiZXgzIiB7IDE6NjQgLSAxOjIzMyB9CitmdW5jdGlvbiAiZXgzYSIgeyAx
Ojk1IC0gMToyMjMgfQorZnVuY3Rpb24gImV4M2IiIHsgMToxMjcgLSAxOjIxMyB9CitldmFsIHsg
MToxIC0gMTo2MSB9CitldmFsIHsgMToxIC0gMTc6OCB9CitmdW5jdGlvbiAiZWZpMyIgeyA0OjIx
IC0gMTU6NSB9CitmdW5jdGlvbiAiZWZpM2EiIHsgNjoyNiAtIDEzOjkgfQorZnVuY3Rpb24gImVm
aTNiIiB7IDg6MzAgLSAxMToxMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitldmFsIHsgMToxIC0g
MToyNTAgfQorZnVuY3Rpb24gImV4aTMiIHsgMTo2NSAtIDE6MjQxIH0KK2Z1bmN0aW9uICJleGkz
YSIgeyAxOjk4IC0gMToyMzAgfQorZnVuY3Rpb24gImV4aTNiIiB7IDE6MTMyIC0gMToyMTkgfQor
ZXZhbCB7IDE6MSAtIDE6NjEgfQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5k
LWxvY2F0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQt
c3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
ZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorCisgICAgLy8gQ29u
dmVuaWVuY2UgZnVuY3Rpb24gc28gdGhhdCBzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1s
b2NhdGlvbnMuanMKKyAgICAvLyBjYW4gYmUgbGVzcyB2ZXJib3NlIGZvciBjYXNlcyB3aGVyZSB3
ZSBoYXZlIGEgZnVuY3Rpb24gd2hvc2UgYm91bmRzIHdlCisgICAgLy8gd2FudCB0byBwcmludC4K
KyAgICBmdW5jdGlvbiBib3VuZHMoZnVuYykgeworICAgICAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnNjcmlwdEJvdW5kc0ZvcihmdW5jKSk7CisgICAgfQorCisgICAgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMiPjwvc2NyaXB0PiAK
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMv
c2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVu
ZC1sb2NhdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDcgQEAKK3ZhciB2YWx1
ZSA9IDEwOyB2YXIgc3VtID0gMTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNG
b3IobnVsbCkpOyBmdW5jdGlvbiBmMCgpIHsgYm91bmRzKGYwKTsgZnVuY3Rpb24gZjBhKCkgeyBi
b3VuZHMoZjBhKTsgZnVuY3Rpb24gZjBiKCkgeyBib3VuZHMoZjBiKTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0g
ZjBiKCk7IH0gZjBhKCk7IH0gZjAoKTsgIHZhciB4MCA9IGZ1bmN0aW9uKGtleSkgeyBib3VuZHMo
eDApO3ZhciB4MGEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHgwYSk7IHZhciB4MGIgPSBmdW5jdGlv
bigpIHsgYm91bmRzKHgwYik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IHgwYigpOyB9
OyB4MGEoKTsgfTsgeDAoKTsKKworZnVuY3Rpb24gZ2xvYmFsRnVuYygpIHsKKyAgICB2YXIgYXJy
YXkgPSBbMl07CisgICAgdmFyIHN1bSA9IDA7CisgICAgdmFyIHZhbHVlID0gNTsKKworICAgIC8v
IEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIGZ1bmN0aW9uIGYxKGtl
eSkgeyBib3VuZHMoZjEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWco
d2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgZjEoKTsK
KworICAgIGZ1bmN0aW9uIGYyKGtleSkgeworICAgICAgICBib3VuZHMoZjIpOworICAgICAgICBm
dW5jdGlvbiBmMmEoKSB7IGJvdW5kcyhmMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2
YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9
CisgICAgICAgIGYyYSgpOworICAgIH0KKyAgICBmMigpOworCisgICAgZnVuY3Rpb24gZjMoa2V5
KSB7CisgICAgICAgIGJvdW5kcyhmMyk7CisgICAgICAgIGZ1bmN0aW9uIGYzYSgpIHsKKyAgICAg
ICAgICAgIGJvdW5kcyhmM2EpOworICAgICAgICAgICAgZnVuY3Rpb24gZjNiKCkgeworICAgICAg
ICAgICAgICAgIGJvdW5kcyhmM2IpOworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3Vt
ICo9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZjNiKCk7CisgICAgICAgIH0KKyAgICAgICAgZjNhKCk7CisgICAgfQorICAg
IGYzKCk7CisKKyAgICBmdW5jdGlvbiBmNChrZXkpIHsgYm91bmRzKGY0KTsgZnVuY3Rpb24gZjRh
KCkge307IGJvdW5kcyhmNGEpOyBmNGEoKTsgfQorICAgIGY0KCk7CisgICAgZnVuY3Rpb24gZjUo
a2V5KSB7IGJvdW5kcyhmNSk7IGZ1bmN0aW9uIGY1YSgpIHsgYm91bmRzKGY1YSk7IHN1bSArPSB2
YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJv
dW5kc0ZvcihudWxsKSk7Jyk7IH07IGY1YSgpOyB9CisgICAgZjUoKTsKKyAgICBmdW5jdGlvbiBm
NihrZXkpIHsgYm91bmRzKGY2KTsgZnVuY3Rpb24gZjZhKCkgeyBib3VuZHMoZjZhKTsgZnVuY3Rp
b24gZjZiKCkgeyBib3VuZHMoZjZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7
IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZjZi
KCk7IH07IGY2YSgpOyB9CisgICAgZjYoKTsKKworICAgIC8vIEluZGVudGVkIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZmkxKGtl
eSkgeyBib3VuZHMoZmkxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICBm
aTEoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTIoa2V5KSB7CisgICAgICAgICAgICBib3VuZHMo
ZmkyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZpMmEoKSB7IGJvdW5kcyhmaTJhKTsgc3VtICs9
IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0
Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICAgICAgZmkyYSgpOworICAgICAgICB9Cisg
ICAgICAgIGZpMigpOworCisgICAgICAgIGZ1bmN0aW9uIGZpMyhrZXkpIHsKKyAgICAgICAgICAg
IGJvdW5kcyhmaTMpOworICAgICAgICAgICAgZnVuY3Rpb24gZmkzYSgpIHsKKyAgICAgICAgICAg
ICAgICBib3VuZHMoZmkzYSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmkzYigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm91bmRzKGZpM2IpOworICAgICAgICAgICAgICAgICAgICBzdW0g
Kz0gdmFsdWU7IHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9
IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpM2IoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZpM2EoKTsKKyAgICAgICAgfQorICAgICAgICBmaTMoKTsKKworICAg
ICAgICBmdW5jdGlvbiBmaTQoa2V5KSB7IGJvdW5kcyhmaTQpOyBmdW5jdGlvbiBmaTRhKCkge307
IGJvdW5kcyhmaTRhKTsgZmk0YSgpOyB9CisgICAgICAgIGZpNCgpOworICAgICAgICBmdW5jdGlv
biBmaTUoa2V5KSB7IGJvdW5kcyhmaTUpOyBmdW5jdGlvbiBmaTVhKCkgeyBib3VuZHMoZmk1YSk7
IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNWEoKTsgfQorICAgICAgICBmaTUoKTsK
KyAgICAgICAgZnVuY3Rpb24gZmk2KGtleSkgeyBib3VuZHMoZmk2KTsgZnVuY3Rpb24gZmk2YSgp
IHsgYm91bmRzKGZpNmEpOyBmdW5jdGlvbiBmaTZiKCkgeyBib3VuZHMoZmk2Yik7IHN1bSArPSB2
YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJv
dW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNmIoKTsgfTsgZmk2YSgpOyB9CisgICAgICAgIGZpNigp
OworICAgIH0KKworICAgIC8vIEZ1bmN0aW9uIGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246Cisg
ICAgdmFyIHgxID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4MSk7IHN1bSArPSB2YWx1ZTsgZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0Zvcihu
dWxsKSk7Jyk7IH0KKyAgICB4MSgpOworCisgICAgdmFyIHgyID0gZnVuY3Rpb24oa2V5KSB7Cisg
ICAgICAgIGJvdW5kcyh4Mik7CisgICAgICAgIHZhciB4MmEgPSBmdW5jdGlvbigpIHsgYm91bmRz
KHgyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICAgICAgeDJhKCk7CisgICAg
fQorICAgIHgyKCk7CisKKyAgICB2YXIgeDMgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgYm91
bmRzKHgzKTsKKyAgICAgICAgdmFyIHgzYSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYm91
bmRzKHgzYSk7CisgICAgICAgICAgICB2YXIgeDNiID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgYm91bmRzKHgzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOworICAgICAg
ICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3Jp
cHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeDNiKCk7
CisgICAgICAgIH0KKyAgICAgICAgeDNhKCk7CisgICAgfQorICAgIHgzKCk7CisKKyAgICB2YXIg
eDQgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg0KTsgdmFyIHg0YSA9IGZ1bmN0aW9uKCkge307
IGJvdW5kcyh4NGEpOyB4NGEoKTsgfQorICAgIHg0KCk7CisgICAgdmFyIHg1ID0gZnVuY3Rpb24o
a2V5KSB7IGJvdW5kcyh4NSk7IHZhciB4NWEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHg1YSk7IHN1
bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNj
cmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IHg1YSgpOyB9CisgICAgeDUoKTsKKyAgICB2YXIg
eDYgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg2KTsgdmFyIHg2YSA9IGZ1bmN0aW9uKCkgeyBi
b3VuZHMoeDZhKTsgdmFyIHg2YiA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoeDZiKTsgc3VtICs9IHZh
bHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsnKTsgfTsgeDZiKCk7IH07IHg2YSgpOyB9CisgICAgeDYoKTsKKworICAg
IC8vIEluZGVudGVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246CisgICAgewor
ICAgICAgICB2YXIgeGkxID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4aTEpOyBzdW0gKz0gdmFs
dWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3Vu
ZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgIHhpMSgpOworCisgICAgICAgIHZhciB4aTIgPSBm
dW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGJvdW5kcyh4aTIpOworICAgICAgICAgICAgdmFy
IHhpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHhpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1
bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkp
OycpOyB9CisgICAgICAgICAgICB4aTJhKCk7CisgICAgICAgIH0KKyAgICAgICAgeGkyKCk7CisK
KyAgICAgICAgdmFyIHhpMyA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAgYm91bmRzKHhp
Myk7CisgICAgICAgICAgICB2YXIgeGkzYSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGJvdW5kcyh4aTNhKTsKKyAgICAgICAgICAgICAgICB2YXIgeGkzYiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICBib3VuZHMoeGkzYik7CisgICAgICAgICAgICAgICAgICAgIHN1
bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsn
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeGkzYigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgeGkzYSgpOworICAgICAgICB9CisgICAgICAgIHhpMygpOworCisg
ICAgICAgIHZhciB4aTQgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHhpNCk7IHZhciB4aTRhID0g
ZnVuY3Rpb24oKSB7fTsgYm91bmRzKHhpNGEpOyB4aTRhKCk7IH0KKyAgICAgICAgeGk0KCk7Cisg
ICAgICAgIHZhciB4aTUgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHhpNSk7IHZhciB4aTVhID0g
ZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsg
eGk1YSgpOyB9CisgICAgICAgIHhpNSgpOworICAgICAgICB2YXIgeGk2ID0gZnVuY3Rpb24oa2V5
KSB7IGJvdW5kcyh4aTYpOyB2YXIgeGk2YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoeGk2YSk7IHZh
ciB4aTZiID0gZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdz
dW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwp
KTsnKTsgfTsgeGk2YigpOyB9OyB4aTZhKCk7IH0KKyAgICAgICAgeGk2KCk7CisgICAgfQorCisg
ICAgLy8gQW5ub3ltb3VzIGZ1bmN0aW9uIGluIGEgZnVuY3Rpb246CisgICAgdmFyIGZvckVhY2gg
PSBbIF0uZm9yRWFjaDsKKyAgICB2YXIgYm91bmRGb3JFYWNoID0gZm9yRWFjaC5iaW5kKGFycmF5
LCBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRC
b3VuZHNGb3IobnVsbCkpOworICAgICAgICBzdW0gKz0gdmFsdWU7CisgICAgICAgIHN1bSAqPSB2
YWx1ZTsKKyAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgfSk7CisgICAgYm91bmRGb3JFYWNoKCk7
CisKK30KK2dsb2JhbEZ1bmMoKTsKKworZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisKKy8vIEdsb2JhbCBmdW5jdGlv
biBkZWNsYXJhdGlvbnM6CitmdW5jdGlvbiBnZjEoa2V5KSB7IGJvdW5kcyhnZjEpOyBzdW0gKz0g
dmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRC
b3VuZHNGb3IobnVsbCkpOycpOyB9CitnZjEoKTsKKworZnVuY3Rpb24gZ2YyKGtleSkgeworICAg
IGJvdW5kcyhnZjIpOworICAgIGZ1bmN0aW9uIGdmMmEoKSB7IGJvdW5kcyhnZjJhKTsgc3VtICs9
IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0
Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgIGdmMmEoKTsKK30KK2dmMigpOworCitmdW5jdGlv
biBnZjMoa2V5KSB7CisgICAgYm91bmRzKGdmMyk7CisgICAgZnVuY3Rpb24gZ2YzYSgpIHsKKyAg
ICAgICAgYm91bmRzKGdmM2EpOworICAgICAgICBmdW5jdGlvbiBnZjNiKCkgeworICAgICAgICAg
ICAgYm91bmRzKGdmM2IpOworICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7
CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
c2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgfQorICAgICAgICBnZjNiKCk7Cisg
ICAgfQorICAgIGdmM2EoKTsKK30KK2dmMygpOworCitmdW5jdGlvbiBnZjQoa2V5KSB7IGJvdW5k
cyhnZjQpOyBmdW5jdGlvbiBnZjRhKCkge307IGJvdW5kcyhnZjRhKTsgZ2Y0YSgpOyB9CitnZjQo
KTsKK2Z1bmN0aW9uIGdmNShrZXkpIHsgYm91bmRzKGdmNSk7IGZ1bmN0aW9uIGdmNWEoKSB7IGJv
dW5kcyhnZjVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2Y1YSgpOyB9CitnZjUo
KTsKK2Z1bmN0aW9uIGdmNihrZXkpIHsgYm91bmRzKGdmNik7IGZ1bmN0aW9uIGdmNmEoKSB7IGJv
dW5kcyhnZjZhKTsgZnVuY3Rpb24gZ2Y2YigpIHsgYm91bmRzKGdmNmIpOyBzdW0gKz0gdmFsdWU7
IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNG
b3IobnVsbCkpOycpOyB9OyBnZjZiKCk7IH07IGdmNmEoKTsgfQorZ2Y2KCk7CisKKy8vIEluZGVu
dGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgoreworICAgIGZ1bmN0aW9u
IGdmaTEoa2V5KSB7IGJvdW5kcyhnZmkxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQor
ICAgIGdmaTEoKTsKKworICAgIGZ1bmN0aW9uIGdmaTIoa2V5KSB7CisgICAgICAgIGJvdW5kcyhn
ZmkyKTsKKyAgICAgICAgZnVuY3Rpb24gZ2ZpMmEoKSB7IGJvdW5kcyhnZmkyYSk7IHN1bSArPSB2
YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJv
dW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICAgICAgZ2ZpMmEoKTsKKyAgICB9CisgICAgZ2ZpMigp
OworCisgICAgZnVuY3Rpb24gZ2ZpMyhrZXkpIHsKKyAgICAgICAgYm91bmRzKGdmaTMpOworICAg
ICAgICBmdW5jdGlvbiBnZmkzYSgpIHsKKyAgICAgICAgICAgIGJvdW5kcyhnZmkzYSk7CisgICAg
ICAgICAgICBmdW5jdGlvbiBnZmkzYigpIHsKKyAgICAgICAgICAgICAgICBib3VuZHMoZ2ZpM2Ip
OworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAg
ICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRC
b3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2ZpM2IoKTsK
KyAgICAgICAgfQorICAgICAgICBnZmkzYSgpOworICAgIH0KKyAgICBnZmkzKCk7CisKKyAgICBm
dW5jdGlvbiBnZmk0KGtleSkgeyBib3VuZHMoZ2ZpNCk7IGZ1bmN0aW9uIGdmaTRhKCkge307IGJv
dW5kcyhnZmk0YSk7IGdmaTRhKCk7IH0KKyAgICBnZmk0KCk7CisgICAgZnVuY3Rpb24gZ2ZpNShr
ZXkpIHsgYm91bmRzKGdmaTUpOyBmdW5jdGlvbiBnZmk1YSgpIHsgYm91bmRzKGdmaTVhKTsgc3Vt
ICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2Ny
aXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2ZpNWEoKTsgfQorICAgIGdmaTUoKTsKKyAgICBm
dW5jdGlvbiBnZmk2KGtleSkgeyBib3VuZHMoZ2ZpNik7IGZ1bmN0aW9uIGdmaTZhKCkgeyBib3Vu
ZHMoZ2ZpNmEpOyBmdW5jdGlvbiBnZmk2YigpIHsgYm91bmRzKGdmaTZiKTsgc3VtICs9IHZhbHVl
OyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsnKTsgfTsgZ2ZpNmIoKTsgfTsgZ2ZpNmEoKTsgfQorICAgIGdmaTYoKTsKK30K
KworLy8gRnVuY3Rpb24gZXhwcmVzc2lvbnMgaW4gYSBmdW5jdGlvbjoKK3ZhciBneDEgPSBmdW5j
dGlvbihrZXkpIHsgYm91bmRzKGd4MSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KK2d4
MSgpOworCit2YXIgZ3gyID0gZnVuY3Rpb24oa2V5KSB7CisgICAgYm91bmRzKGd4Mik7CisgICAg
dmFyIGd4MmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4MmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwo
J3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVs
bCkpOycpOyB9CisgICAgZ3gyYSgpOworfQorZ3gyKCk7CisKK3ZhciBneDMgPSBmdW5jdGlvbihr
ZXkpIHsKKyAgICBib3VuZHMoZ3gzKTsKKyAgICB2YXIgZ3gzYSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBib3VuZHMoZ3gzYSk7CisgICAgICAgIHZhciBneDNiID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBib3VuZHMoZ3gzYik7CisgICAgICAgICAgICBzdW0gKz0gdmFsdWU7CisgICAgICAg
ICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgfQorICAgICAgICBneDNiKCk7CisgICAgfQorICAg
IGd4M2EoKTsKK30KK2d4MygpOworCit2YXIgZ3g0ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyhn
eDQpOyB2YXIgZ3g0YSA9IGZ1bmN0aW9uKCkge307IGJvdW5kcyhneDRhKTsgZ3g0YSgpOyB9Citn
eDQoKTsKK3ZhciBneDUgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKGd4NSk7IHZhciBneDVhID0g
ZnVuY3Rpb24oKSB7IGJvdW5kcyhneDVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsg
Z3g1YSgpOyB9CitneDUoKTsKK3ZhciBneDYgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKGd4Nik7
IHZhciBneDZhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneDZhKTsgdmFyIGd4NmIgPSBmdW5jdGlv
bigpIHsgYm91bmRzKGd4NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVi
dWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBneDZiKCk7
IH07IGd4NmEoKTsgfQorZ3g2KCk7CisKKy8vIEluZGVudGVkIGZ1bmN0aW9uIGV4cHJlc3Npb25z
IGluIGEgZnVuY3Rpb246Cit7CisgICAgdmFyIGd4aTEgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRz
KGd4aTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgZ3hpMSgpOworCisgICAg
dmFyIGd4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgYm91bmRzKGd4aTIpOworICAgICAg
ICB2YXIgZ3hpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4aTJhKTsgc3VtICs9IHZhbHVlOyBl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9y
KG51bGwpKTsnKTsgfQorICAgICAgICBneGkyYSgpOworICAgIH0KKyAgICBneGkyKCk7CisKKyAg
ICB2YXIgZ3hpMyA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICBib3VuZHMoZ3hpMyk7CisgICAg
ICAgIHZhciBneGkzYSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYm91bmRzKGd4aTNhKTsK
KyAgICAgICAgICAgIHZhciBneGkzYiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGJv
dW5kcyhneGkzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7
CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBneGkzYigpOworICAgICAgICB9CisgICAgICAgIGd4aTNhKCk7CisgICAgfQorICAgIGd4aTMo
KTsKKworICAgIHZhciBneGk0ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyhneGk0KTsgdmFyIGd4
aTRhID0gZnVuY3Rpb24oKSB7fTsgYm91bmRzKGd4aTRhKTsgZ3hpNGEoKTsgfQorICAgIGd4aTQo
KTsKKyAgICB2YXIgZ3hpNSA9IGZ1bmN0aW9uKGtleSkgeyBib3VuZHMoZ3hpNSk7IHZhciBneGk1
YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hpNWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycp
OyB9OyBneGk1YSgpOyB9CisgICAgZ3hpNSgpOworICAgIHZhciBneGk2ID0gZnVuY3Rpb24oa2V5
KSB7IGJvdW5kcyhneGk2KTsgdmFyIGd4aTZhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneGk2YSk7
IHZhciBneGk2YiA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hpNmIpOyBzdW0gKz0gdmFsdWU7IGV2
YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3Io
bnVsbCkpOycpOyB9OyBneGk2YigpOyB9OyBneGk2YSgpOyB9CisgICAgZ3hpNigpOworfQorCisv
LyBHbG9iYWwgYW5ub3ltb3VzIGZ1bmN0aW9uOgordmFyIGFycmF5ID0gWzJdOwordmFyIGdmb3JF
YWNoID0gWyBdLmZvckVhY2g7Cit2YXIgZ2JvdW5kRm9yRWFjaCA9IGdmb3JFYWNoLmJpbmQoYXJy
YXksIGZ1bmN0aW9uKGtleSkgeworICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91
bmRzRm9yKG51bGwpKTsKKyAgICBzdW0gKz0gdmFsdWU7CisgICAgc3VtICo9IHZhbHVlOworICAg
IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNG
b3IobnVsbCkpOycpOworfSk7CitnYm91bmRGb3JFYWNoKCk7CisKK2V2YWwoIiBcbiIgKworIiAg
ICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7XG4iICsKKyIg
ICAgZnVuY3Rpb24gZWYzKCkge1xuIiArCisiICAgICAgICBib3VuZHMoZWYzKTtcbiIgKworIiAg
ICAgICAgZnVuY3Rpb24gZWYzYSgpIHtcbiIgKworIiAgICAgICAgICAgIGJvdW5kcyhlZjNhKTtc
biIgKworIiAgICAgICAgICAgIGZ1bmN0aW9uIGVmM2IoKSB7XG4iICsKKyIgICAgICAgICAgICAg
ICAgYm91bmRzKGVmM2IpO1xuIiArCisiICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1
ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpO1xuIiAr
CisiICAgICAgICAgICAgfVxuIiArCisiICAgICAgICAgICAgZWYzYigpO1xuIiArCisiICAgICAg
ICB9XG4iICsKKyIgICAgICAgIGVmM2EoKTtcbiIgKworIiAgICB9XG4iICsKKyJcbiIgKworImVm
MygpOyIKKyk7CisKK2V2YWwoIiBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0Zv
cihudWxsKSk7IGZ1bmN0aW9uIGV4MygpIHsgYm91bmRzKGV4Myk7IGZ1bmN0aW9uIGV4M2EoKSB7
IGJvdW5kcyhleDNhKTsgZnVuY3Rpb24gZXgzYigpIHsgYm91bmRzKGV4M2IpOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsn
KTsgfSBleDNiKCk7IH0gZXgzYSgpOyB9IGV4MygpOyIpOworCit7CisgICAgZXZhbCgiIFxuIiAr
CisgICAgICAgICAiICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51
bGwpKTtcbiIgKworICAgICAgICAgIiAgICAvLyBUZXN0IGluZGVudGVkIGZ1bmN0aW9uIHdpdGgg
aW5uZXIgZnVuY3Rpb25zLiBcbiIgKworICAgICAgICAgIiAgICBmdW5jdGlvbiBlZmkzKCkge1xu
IiArCisgICAgICAgICAiICAgICAgICBib3VuZHMoZWZpMyk7XG4iICsKKyAgICAgICAgICIgICAg
ICAgIGZ1bmN0aW9uIGVmaTNhKCkge1xuIiArCisgICAgICAgICAiICAgICAgICAgICAgYm91bmRz
KGVmaTNhKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgIGZ1bmN0aW9uIGVmaTNiKCkge1xu
IiArCisgICAgICAgICAiICAgICAgICAgICAgICAgIGJvdW5kcyhlZmkzYik7XG4iICsKKyAgICAg
ICAgICIgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7XG4iICsKKyAgICAgICAgICIgICAgICAg
ICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBlZmkzYigpO1xuIiArCisgICAgICAg
ICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgIGVmaTNhKCk7XG4iICsKKyAgICAg
ICAgICIgICAgfVxuIiArCisgICAgICAgICAiXG4iICsKKyAgICAgICAgICJlZmkzKCk7IgorICAg
ICAgICApOworCisgICAgZXZhbCgiIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsgZnVuY3Rpb24gZXhpMygpIHsgYm91bmRzKGV4aTMpOyBmdW5jdGlvbiBleGkz
YSgpIHsgYm91bmRzKGV4aTNhKTsgZnVuY3Rpb24gZXhpM2IoKSB7IGJvdW5kcyhleGkzYik7IGV2
YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3Io
bnVsbCkpOycpOyB9IGV4aTNiKCk7IH0gZXhpM2EoKTsgfSBleGkzKCk7Iik7Cit9Cg==
</data>
<flag name="commit-queue"
          id="239944"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216894</attachid>
            <date>2013-11-13 20:31:10 -0800</date>
            <delta_ts>2013-11-14 09:45:52 -0800</delta_ts>
            <desc>patch 3.</desc>
            <filename>bug-124245.patch</filename>
            <type>text/plain</type>
            <size>77245</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEzLTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6ZnVuY3Rpb25FbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
cmVjb3JkUGFyc2UpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1u
KToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWls
ZGVyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgor
ICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25C
b2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Ob2RlOjpzdGFydENvbHVtbik6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbmRD
b2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAo
SlNDOjpFdmFsTm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbklu
Zm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6
CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4
Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0Q29kZUJsb2NrKToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJv
bUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4
ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0
RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1
dGFibGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnJlY29y
ZFBhcnNlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpHZXRDYWxsZXJDb2RlQmxvY2tG
dW5jdG9yOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6R2V0Q2Fs
bGVyQ29kZUJsb2NrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkdldENhbGxl
ckNvZGVCbG9ja0Z1bmN0b3I6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlZNOjpzY3JpcHRC
b3VuZHNGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0xMS0xMyAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBBUk02NCBidWlsZCBh
ZnRlciByZWNlbnQgSmF2YVNjcmlwdENvcmUgY2hhbmdlcwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQwLDEwICsxNjQwLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5s
aW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvblN0YXJ0
Q29sdW1uKCk7CiAgICAgICAgIHN0YXJ0Q29sdW1uICs9ICh1bmxpbmtlZEV4ZWN1dGFibGUtPmZp
cnN0TGluZU9mZnNldCgpID8gMSA6IG93bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25F
bmRDb2x1bW4oKTsKKyAgICAgICAgZW5kQ29sdW1uICs9ICFsaW5lQ291bnQgPyBzdGFydENvbHVt
biA6IDE7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5s
aW5rZWRFeGVjdXRhYmxlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VM
ZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3Vy
Y2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxl
bmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1
bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFy
dENvbHVtbik7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZp
cnN0TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
ICAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBl
eGVjdXRhYmxlKTsKICAgICB9CiAKQEAgLTE2NTQsMTAgKzE2NTYsMTIgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUg
PSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExp
bmVPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPmZ1bmN0aW9uU3RhcnRDb2x1bW4oKTsKICAgICAgICAgc3RhcnRDb2x1bW4gKz0gKHVu
bGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCkgPyAxIDogb3duZXJFeGVjdXRhYmxl
LT5zdGFydENvbHVtbigpKTsKKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRF
eGVjdXRhYmxlLT5mdW5jdGlvbkVuZENvbHVtbigpOworICAgICAgICBlbmRDb2x1bW4gKz0gIWxp
bmVDb3VudCA/IHN0YXJ0Q29sdW1uIDogMTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CiAgICAg
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVu
Z3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0
YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExp
bmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVu
bGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0
Q29sdW1uLCBlbmRDb2x1bW4pOwogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFibGUpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTQgQEAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuYwogICAgICwgbV9saW5lQ291bnQobm9k
ZS0+bGFzdExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQogICAgICwgbV9mdW5jdGlvblN0YXJ0
T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uU3RhcnQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAg
ICwgbV9mdW5jdGlvblN0YXJ0Q29sdW1uKG5vZGUtPnN0YXJ0Q29sdW1uKCkpCisgICAgLCBtX2Z1
bmN0aW9uRW5kQ29sdW1uKG5vZGUtPmVuZENvbHVtbigpKQogICAgICwgbV9zdGFydE9mZnNldChu
b2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCiAgICAg
LCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKICAgICAsIG1fZmVhdHVy
ZXMobm9kZS0+ZmVhdHVyZXMoKSkKICAgICAsIG1fZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xl
KG5vZGUtPmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKQogeworICAgIGlmICghbV9saW5l
Q291bnQpCisgICAgICAgIG1fZnVuY3Rpb25FbmRDb2x1bW4gLT0gbV9mdW5jdGlvblN0YXJ0Q29s
dW1uOwogfQogCiBzaXplX3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNv
dW50KCkgY29uc3QKQEAgLTEyNCw4ICsxMjcsOSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlu
a2VkRnVuY3Rpb25FeGVjCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1f
Zmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0
ICsgbV9zdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fZnVuY3Rpb25T
dGFydENvbHVtbiArIDE7IC8vIHN0YXJ0Q29sdW1uIHNob3VsZCBzdGFydCBmcm9tIDEsIG5vdCAw
LgorICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IG1fZnVuY3Rpb25FbmRDb2x1bW4gKyAoIW1fbGlu
ZUNvdW50ID8gc3RhcnRDb2x1bW4gOiAxKTsKICAgICBTb3VyY2VDb2RlIGNvZGUoc291cmNlLnBy
b3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJz
dExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVh
dGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0
YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUodm0sIGNv
ZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291bnQsIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4pOwogfQogCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
T2JqZWN0KiogZXhjZXB0aW9uKQpAQCAtMjA0LDYgKzIwOCw3IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSoKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFs
c2UpCiAgICAgLCBtX2ZpcnN0TGluZSgwKQogICAgICwgbV9saW5lQ291bnQoMCkKKyAgICAsIG1f
ZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgICwgbV9mZWF0dXJlcygwKQogICAgICwgbV9jb2RlVHlw
ZShjb2RlVHlwZSkKICAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9u
U3RhcnRPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0Q29sdW1uOyB9CisgICAgdW5zaWduZWQgZnVuY3Rpb25F
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRW5kQ29sdW1uOyB9CiAgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CiAgICAg
dW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KIApAQCAt
MTYyLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAg
dW5zaWduZWQgbV9mdW5jdGlvblN0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25T
dGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uRW5kQ29sdW1uOwogICAgIHVuc2ln
bmVkIG1fc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CiAKQEAgLTQ0
MSwxOCArNDQzLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAogICAgICAgICBp
bnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogCi0gICAgdm9pZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGluZUNvdW50KQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxp
bmVDb3VudCwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKICAgICAgICAgbV9mZWF0dXJlcyA9
IGZlYXR1cmVzOwogICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRW
YXJpYWJsZXM7CiAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICBtX2xp
bmVDb3VudCA9IGxpbmVDb3VudDsKKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAg
ICAgfQogCiAgICAgQ29kZUZlYXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXM7IH0KICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxlczsgfQogICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsK
QEAgLTQ5Miw2ICs0OTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlh
YmxlcyA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlczsKICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
OSArMjgzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJv
ZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExv
Y2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV92bSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAg
ICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fdm0sIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBp
bnQgZnVuY3Rpb25TdGFydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE1ICsxMTQsMTYgQEAgU3RhdGVtZW50Tm9k
ZSogU2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5s
aW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK2lubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVz
LCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVt
bikKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9n
cmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2Rl
OjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBu
ZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVt
biwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291
cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5v
ZGUgPSBuZXcgUHJvZ3JhbU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFy
dENvbHVtbiwgZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1
cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNT
RVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVt
b3ZlTGFzdCgpOwpAQCAtMTMzLDE0ICsxMzQsMTUgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4g
UHJvZ3JhbU5vZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZh
bE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpF
dmFsTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmll
clNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFs
Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VF
bGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVu
Y1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAg
OiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51
bUNvbnN0YW50cykKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVz
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoVk0qIHZt
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAg
ICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUodm0sIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxO
b2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
ZW5kQ29sdW1uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+
bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7
CkBAIC0xNzksMTUgKzE4MSwxNyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFt
ZXRlcnMoCiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLWlubGluZSBGdW5j
dGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVuY3Rp
b25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCiAgICAgOiBTY29wZU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0
cmljdENvbnRleHQpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9l
bmRDb2x1bW4oZW5kQ29sdW1uKQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVu
Y3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlv
blN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0
aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZh
cmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3Rh
cnRDb2x1bW4pCisgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiB7CiB9CiAKQEAgLTIwNSwx
NCArMjA5LDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMKICAg
ICBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZN
KiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0q
IHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25C
b2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0
cmljdENvbnRleHQpOworICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29u
dGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9k
ZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3Jl
YXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2Rl
ID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBz
dGFydENvbHVtbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiAsIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9k
ZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsMzMgKzE0NjgsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25O
b2RlID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVh
dGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
cm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgeyByZXR1cm4gbV9zdGFy
dENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnRDb2x1bW47IH0KKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRDb2x1bW47IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJT
dGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYs
IENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgT1ZFUlJJ
REU7CiAKICAgICAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKKyAgICAgICAgdW5zaWduZWQg
bV9lbmRDb2x1bW47CiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3Bl
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9u
Tm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZh
clN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICB1bnNpZ25lZCBz
dGFydENvbHVtbigpIHsgcmV0dXJuIDE7IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Nv
cGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShW
TSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZp
ZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKKyAgICAgICAgRXZhbE5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBPVkVSUklERTsKKworICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9Owog
CiAgICAgY2xhc3MgRnVuY3Rpb25QYXJhbWV0ZXJzIDogcHVibGljIFJlZkNvdW50ZWQ8RnVuY3Rp
b25QYXJhbWV0ZXJzPiB7CkBAIC0xNTE5LDggKzE1MjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAg
ICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIGJvb2wgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25z
dCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAg
c3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAg
ICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5z
aXplKCk7IH0KQEAgLTE1NDAsMTIgKzE1NDUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQgZnVuY3Rpb25TdGFydCkgeyBtX2Z1bmN0aW9uU3Rh
cnQgPSBmdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBlbmRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CkBAIC0xNTUzLDYgKzE1NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBp
bnQgbV9mdW5jdGlvblN0YXJ0OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOworICAg
ICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY0V4cHJO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2MiwxMyArMTE2Miwx
NiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgIG5leHQoKTsKIAotICAgIGlmICht
YXRjaChDTE9TRUJSQUNFKSkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHN0cmljdE1v
ZGUoKSk7CisgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIHVuc2lnbmVkIGVu
ZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1l
bnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAg
ICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIo
Y29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShw
YXJzZVNvdXJjZUVsZW1lbnRzPENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIpLCAiQ2Fu
bm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIpOwotICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29s
dW1uLCBzdHJpY3RNb2RlKCkpOworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1u
KCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsK
IH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBh
cnNlTW9kZSBtb2RlKQpAQCAtMTIzMiw4ICsxMjM1LDExIEBAIHRlbXBsYXRlIDxGdW5jdGlvblJl
cXVpcmVtZW50cyByZXF1aXJlbWUKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBj
YWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogICAgICAg
ICBBU1NFUlQoZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0
YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBpZiAoZW5k
TG9jYXRpb24ubGluZSA9PSBib2R5U3RhcnRMaW5lKQorICAgICAgICAgICAgYm9keUVuZENvbHVt
biA9IGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zm
c2V0OwogCi0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RN
b2RlKTsKKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIGVuZExvY2F0aW9uLCBib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hl
ZEluZm8tPnN0cmljdE1vZGUpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVz
dG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZG
YWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFi
bGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDAsMTMgKzkwMCwxNSBAQCBQYXNzUmVm
UHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+
IHJlc3VsdDsKICAgICBpZiAobV9zb3VyY2VFbGVtZW50cykgewogICAgICAgICBKU1Rva2VuTG9j
YXRpb24gZW5kTG9jYXRpb247Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5s
YXN0TGluZU51bWJlcigpOworICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGlu
ZU51bWJlcigpOwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGVuZExvY2F0aW9uLnN0YXJ0T2Zm
c2V0ID0gbV9sZXhlci0+Y3VycmVudE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1
bW4gPSBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCArIDE7CiAgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX3ZtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3NvdXJjZUVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVu
Y0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCkBAIC05MTQsNyArOTE2LDcgQEAgUGFzc1JlZlB0cjxQ
YXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKm1fc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9mZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQ29u
c3RhbnRzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBt
X2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9s
ZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
bV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xleGVyLT5saW5lTnVtYmVyKCksIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4g
cmVwYXJzaW5nIGEgZnVuY3Rpb24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8vIHJl
cG9ydGVkIHRoZSBlcnJvciB3aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBl
dmFsIGNvZGUuIFNvIGlmIHdlJ3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsx
NTMsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwg
RXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRl
RnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgYm9vbCkgeyByZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHko
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQs
IGJvb2wpIHsgcmV0dXJuIDE7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50LCBpbnQp
IHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNy
ZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsOCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAg
ICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0ganNDYXN0PFVubGlu
a2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7
CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlu
a2VkQ29kZS0+Zmlyc3RMaW5lKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gc291
cmNlLmZpcnN0TGluZSgpID8gc291cmNlLnN0YXJ0Q29sdW1uKCkgOiAwOwotICAgICAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtl
ZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5s
aW5rZWRDb2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4pOworICAgICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4gPSB1bmxpbmtlZENvZGUtPmVuZENvbHVtbigpOworICAgICAgICBleGVjdXRhYmxl
LT5yZWNvcmRQYXJzZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUt
Pmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRD
b2RlLT5saW5lQ291bnQoKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIHJldHVy
biB1bmxpbmtlZENvZGU7CiAgICAgfQogCkBAIC05NCwxMCArOTUsMTEgQEAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZAogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3Zl
KGFkZFJlc3VsdC5pdGVyYXRvcik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBleGVj
dXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0Nh
cHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5l
KCksIHJvb3ROb2RlLT5zdGFydENvbHVtbigpKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHJvb3ROb2RlLT5zdGFy
dENvbHVtbigpLCByb290Tm9kZS0+ZW5kQ29sdW1uKCkpOwogCiAgICAgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlKiB1bmxpbmtlZENvZGUgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0s
IGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOwotICAgIHVubGlua2VkQ29kZS0+cmVjb3Jk
UGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCByb290Tm9kZS0+bGluZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5s
YXN0TGluZSgpIC0gcm9vdE5vZGUtPmxpbmVObygpKTsKKyAgICB1bmxpbmtlZENvZGUtPnJlY29y
ZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoKSwgcm9vdE5vZGUtPmxpbmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+
bGFzdExpbmUoKSAtIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmVuZENvbHVtbigpKTsK
KwogICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcih2bSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdn
ZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRl
KCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU5MjM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MCw3ICsxODAsOCBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6CiAgICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhlYXAuaXNE
ZWZlcnJlZCgpKTsKLSAgICAKKyAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0gVUlOVF9NQVgpOwor
CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CkBAIC0y
MDksNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Ogog
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KICAgICAg
ICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKICAgICAg
ICAgICAgICp2bSwgZXhlY3V0YWJsZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7Ci0gICAgcmVjb3JkUGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1
bW4oKSk7IAorICAgIHJlY29yZFBhcnNlKGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxl
LT5mZWF0dXJlcygpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCksIGVuZENv
bHVtbigpKTsgCiAgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewogICAgICAgICBleGNlcHRp
b24gPSB2bS0+dGhyb3dFeGNlcHRpb24oCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwKQEAgLTM2Miw3ICszNjMsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogCiAKIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIkZ1bmN0aW9uRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogCi1GdW5jdGlv
bkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1
bW4pCitGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbikKICAgICA6IFNjcmlwdEV4ZWN1dGFi
bGUodm0uZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2VkRXhl
Y3V0YWJsZSh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogewpAQCAtMzcxLDYgKzM3Miw3
IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICBtX2ZpcnN0
TGluZSA9IGZpcnN0TGluZTsKICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9zdGFy
dENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwogfQog
CiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01NzAs
OSArNTcyLDEwIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAg
ICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZEZ1bmN0
aW9uLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZS5zdGFydE9mZnNldCgpICsgdW5saW5rZWRGdW5jdGlvbi0+c3RhcnRPZmZzZXQoKTsKICAgICB1
bnNpZ25lZCBzdGFydENvbHVtbiA9IHNvdXJjZS5zdGFydENvbHVtbigpOworICAgIHVuc2lnbmVk
IGVuZENvbHVtbiA9IHVubGlua2VkRnVuY3Rpb24tPmZ1bmN0aW9uRW5kQ29sdW1uKCkgKyAxOwog
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0
aCgpOwogICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0
YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENv
bHVtbik7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVu
Y3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0
aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVt
biwgZW5kQ29sdW1uKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJp
bmcoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMTU5MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTggQEAgcHVibGljOgog
ICAgICAgICAKICAgICBDb2RlQmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCkgY29uc3Q7CiAKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5
cGU7CisgICAgfQogICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGVUeXBlOwogICAgIH0KKyAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBQcm9ncmFt
RXhlY3V0YWJsZVR5cGU7CisgICAgfQogCiAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0
CiAgICAgewpAQCAtMzU1LDYgKzM2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShz
b3VyY2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1v
ZGVGZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAs
IG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTM2Myw2ICszNzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZmVhdHVy
ZXMoaXNJblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgICwg
bV9uZXZlcklubGluZShmYWxzZSkKKyAgICAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKICAg
ICB7CiAgICAgfQogCkBAIC0zNzgsNiArMzg4LDcgQEAgcHVibGljOgogICAgIGludCBsaW5lTm8o
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZTsgfQogICAgIGludCBsYXN0TGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQogICAgIGJvb2wgdXNlc0FyZ3VtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlOyB9CkBAIC0z
OTUsMTMgKzQwNiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1
cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uKQorICAgIHZvaWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29s
IGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgewogICAgICAgICBtX2Zl
YXR1cmVzID0gZmVhdHVyZXM7CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXND
YXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAg
ICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKICAgICAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0
Q29sdW1uOworICAgICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKKyAgICAgICAg
bV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAgICAgfQogCiAgICAgdm9pZCBpbnN0YWxsQ29kZShD
b2RlQmxvY2sqKTsKQEAgLTQzNyw2ICs0NTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fZmly
c3RMaW5lOwogICAgIGludCBtX2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47
CisgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiB9OwogCiBjbGFzcyBFdmFsRXhlY3V0YWJsZSA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTU0OSw5ICs1NjMsOSBAQCBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTY3Jp
cHRFeGVjdXRhYmxlIEJhc2U7CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVh
dGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQg
bGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKQorICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1
dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5l
LCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbikKICAgICB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1
bmN0aW9uRXhlY3V0YWJsZSh2bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGlu
ZSwgbGFzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0
YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAg
ICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CiAgICAgfQpAQCAtNjM5LDcgKzY1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
Q29kZSgpOwogCiBwcml2YXRlOgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGlu
ZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKTsKIAogICAgIGJvb2wgaXNDb21waWxpbmco
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE1OTIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzU0LDQgKzc1NCw4MiBAQCB2b2lkIFZNOjpkdW1wUmVnRXhwVHJhY2UoKQog
fQogI2VuZGlmCiAKK2NsYXNzIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgeworcHVibGljOgor
ICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IoKQorICAgICAgICA6IG1faXRlcmF0aW9ucygw
KQorICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgeworICAgIH0KKworICAgIFN0YWNrVmlz
aXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAg
ICAgICAgKyttX2l0ZXJhdGlvbnM7CisgICAgICAgIGlmIChtX2l0ZXJhdGlvbnMgPCAyKQorICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisKKyAgICAgICAgbV9jb2Rl
QmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6RG9uZTsKKyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faXRlcmF0aW9uczsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworSlNWYWx1ZSBWTTo6c2NyaXB0Qm91bmRz
Rm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzY3JpcHQpCit7CisgICAgQVNTRVJUKGV4ZWMg
PT0gdG9wQ2FsbEZyYW1lKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlOworCisg
ICAgaWYgKHNjcmlwdC5pc051bGwoKSkgeworICAgICAgICBHZXRDYWxsZXJDb2RlQmxvY2tGdW5j
dG9yIGl0ZXI7CisgICAgICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gaXRlci5jb2RlQmxvY2soKTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7IAorCisgICAgfSBlbHNlIGlmIChzY3JpcHQuaXNG
dW5jdGlvbigpKSB7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmNPYmogPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KHNjcmlwdC50b09iamVjdChleGVjKSk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBmdW5j
T2JqLT5qc0V4ZWN1dGFibGUoKTsKKworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0TGluZSA9IGV4ZWN1dGFibGUtPmxpbmVObygp
OworICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKTsK
KyAgICB1bnNpZ25lZCBlbmRMaW5lID0gZXhlY3V0YWJsZS0+bGFzdExpbmUoKTsKKyAgICB1bnNp
Z25lZCBlbmRDb2x1bW4gPSBleGVjdXRhYmxlLT5lbmRDb2x1bW4oKTsKKworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRhYmxl
KCkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlY3V0YWJsZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIFN0
cmluZyBpbmZlcnJlZE5hbWUgPSBmdW5jRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCkuc3RyaW5n
KCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoImZ1bmN0aW9uIFwiIik7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaW5mZXJyZWROYW1lKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIiKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoZXhlY3V0YWJsZS0+aXNFdmFsRXhlY3V0YWJsZSgpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiZXZhbCIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5pc1Byb2dyYW1FeGVjdXRhYmxlKCkpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgicHJvZ3JhbSIpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmVzdWx0LmFwcGVuZCgiIHsgIik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihzdGFydExpbmUp
OworICAgIHJlc3VsdC5hcHBlbmQoIjoiKTsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXJ0
Q29sdW1uKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgLSAiKTsKKyAgICByZXN1bHQuYXBwZW5kTnVt
YmVyKGVuZExpbmUpOworICAgIHJlc3VsdC5hcHBlbmQoIjoiKTsKKyAgICByZXN1bHQuYXBwZW5k
TnVtYmVyKGVuZENvbHVtbik7CisgICAgcmVzdWx0LmFwcGVuZCgiIH0iKTsKKworICAgIHJldHVy
biBKU1ZhbHVlKGpzU3RyaW5nKGV4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAxNTkyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NjAsNiArNDYwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb2RlKCk7CiAKKyAgICAgICAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXM6CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgc2NyaXB0Qm91bmRzRm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
c2NyaXB0KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MjczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMTEtMTMgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0cmFja2luZyBvZiBlbmRDb2x1
bW4gZm9yIEV4ZWN1dGFibGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI0MjQ1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1s
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjeHByb2o6Cisg
ICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qLmZpbHRl
cnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0pTSW50ZXJuYWxz
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0ludGVybmFsczo6c2NyaXB0
Qm91bmRzRm9yKToKKwogMjAxMy0xMS0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyIGltcHJvdmVtZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1OTIz
NykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
OTY5LDYgKzI5NjksNyBAQCBzZXQoV2ViQ29yZVRlc3RTdXBwb3J0X1NPVVJDRVMKIAogICAgIHRl
c3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKICAgICB0ZXN0aW5nL0ludGVybmFscy5jcHAKKyAg
ICB0ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAogKQogCiBzZXQoV2ViQ29yZVRlc3RTdXBw
b3J0X0xJQlJBUklFUwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1OTIzNykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04MjQs
NiArODI0LDcgQEAgX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjRyZQogX19a
TjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjlzZXRJc1ByaW1hcnlTbmFwc2hvdHRl
ZFBsdWdJbkViCiBfX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMxNHNoYXJlZEZl
YXR1cmVzRXYKIF9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDI2Y2FuU3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNFdgorX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0
MnZtRXYKIF9fWk43V2ViQ29yZTIyU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjM0ZGlzcGF0Y2hMb2Nh
bFN0b3JhZ2VFdmVudHNUb0ZyYW1lc0VSTlNfOVBhZ2VHcm91cEVSS04zV1RGNlZlY3RvcklOUzNf
NlJlZlB0cklOU181RnJhbWVFRUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFUktOUzNfNlN0
cmluZ0VTRV9TRV9TRV9QTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTIyVVJMV2l0
aFVzZXJUeXBlZFN0cmluZ0VQOE5TU3RyaW5nUDVOU1VSTAogX19aTjdXZWJDb3JlMjJjb3VudGVy
VmFsdWVGb3JFbGVtZW50RVBOU183RWxlbWVudEUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlVGVzdFN1cHBvcnQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjeHByb2oJKHJl
dmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
VGVzdFN1cHBvcnQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzU2LDYgKzc1Niw2OCBAQAog
ICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+DQogICAgICAgPC9Gb3JjZWRJbmNsdWRlRmls
ZXM+DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHRlc3Rp
bmdcSlNJbnRlcm5hbHNDdXN0b20uY3BwIj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0K
KyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQor
ICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xX
aW4zMiciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdf
V2luQ2Fpcm98eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8UHJl
Y29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4N
CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcw
MjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQor
ICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUo
RGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAg
ICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7
NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+
DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+NDA2NTs0MjczOzQ1NjU7
NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPjQwNjU7NDI3Mzs0
NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+NDA2NTs0Mjcz
OzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgICA8L0ZvcmNl
ZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQorICAgICAgPC9Gb3Jj
ZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+DQor
ICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJv
fHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAgICAgIDxGb3JjZWRJbmNs
dWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z1N1ZmZpeHxXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0KKyAgICAgIDxG
b3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisg
ICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4N
CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+
DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPg0KKyAgICAgIDwvUHJlY29t
cGlsZWRIZWFkZXI+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj4NCisgICAg
ICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj4N
CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0
JyI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgICA8RGlzYWJsZVNwZWNpZmlj
V2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfFdpbjMyJyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUoRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAgICA8RGlzYWJsZVNwZWNpZmlj
V2FybmluZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfHg2NCciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVjaWZpY1dhcm5p
bmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVTcGVjaWZpY1dh
cm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZV9XaW5DYWlyb3xXaW4zMiciPjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMjslKERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQorICAgICAgPERpc2FibGVT
cGVjaWZpY1dhcm5pbmdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7JShEaXNh
YmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAgIDxE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj40MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDI7JShE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KKyAgICAg
IDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+NDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyOyUo
RGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCisgICAg
ICA8Rm9yY2VkSW5jbHVkZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVzPg0K
KyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KKyAgICAgIDwvRm9yY2VkSW5jbHVkZUZpbGVz
Pg0KKyAgICAgIDxGb3JjZWRJbmNsdWRlRmlsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+DQorICAgICAgPC9Gb3Jj
ZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyI+DQor
ICAgICAgPC9Gb3JjZWRJbmNsdWRlRmlsZXM+DQorICAgICAgPEZvcmNlZEluY2x1ZGVGaWxlcyBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2lu
MzInIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgICA8Rm9yY2VkSW5jbHVk
ZUZpbGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVj
dGlvbnx4NjQnIj4NCisgICAgICA8L0ZvcmNlZEluY2x1ZGVGaWxlcz4NCisgICAgPC9DbENvbXBp
bGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGVzdGluZ1xqc1xXZWJDb3JlVGVzdFN1
cHBvcnQuY3BwIj4NCiAgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KICAgICAgIDwvUHJlY29t
cGlsZWRIZWFkZXI+DQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmVUZXN0U3VwcG9ydC52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
VGVzdFN1cHBvcnQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0ZXN0aW5nXEludGVybmFsU2V0dGluZ3Mu
Y3BwIj4NCiAgICAgICA8RmlsdGVyPnRlc3Rpbmc8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGVzdGluZ1xKU0ludGVybmFsc0N1c3RvbS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+dGVzdGluZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0ZXN0aW5nXGpzXFdlYkNvcmVUZXN0U3VwcG9y
dC5jcHAiPg0KICAgICAgIDxGaWx0ZXI+dGVzdGluZzwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGls
ZT4NCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTkyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYyODcsNiArNjI4Nyw3
IEBACiAJCUZFOUU4OUZDMTZFMkRDMDUwMEE5MDhGOCAvKiBPcmlnaW5Mb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTlFODlGQTE2RTJEQzA0MDBB
OTA4RjggLyogT3JpZ2luTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlv
bkJhY2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFQUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRT
eW5jLmNwcCAqLzsgfTsKIAkJRkVBRDdEODgxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0
aW9uQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFQUQ3RDg2MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRT
eW5jLmggKi87IH07CisJCUZFQUY1Rjk4MTgzNDdFODAwMDEyNkYyMSAvKiBKU0ludGVybmFsc0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUFGNUY5NzE4MzQ3RTgwMDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICovOyB9Owog
CQlGRUFGNjY1NDE2Nzk3MDMyMDA2MkQwQzUgLyogRGF0YWJhc2VTZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQUY2NjUzMTY3OTcwMDcwMDYy
RDBDNSAvKiBEYXRhYmFzZVNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFQjI2RDI4MTY3QThGMkEwMEZERDI2QiAvKiBEYXRhYmFzZVNl
cnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwICovOyB9OwogCQlG
RUJDNUYzMTE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQkM1RjJGMTZCRDBDQzMwMDY1OUJE
MyAvKiBEYXRhYmFzZUJhc2UuY3BwICovOyB9OwpAQCAtMTM0NjAsNiArMTM0NjEsNyBAQAogCQlG
RTlFODlGQTE2RTJEQzA0MDBBOTA4RjggLyogT3JpZ2luTG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcmlnaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFQUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5j
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9u
QmFja2VuZFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUFEN0Q4NjE2
QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQUY1Rjk3MTgzNDdFODAwMDEyNkYyMSAvKiBKU0lu
dGVybmFsc0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0ludGVybmFsc0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQUY2
NjUzMTY3OTcwMDcwMDYyRDBDNSAvKiBEYXRhYmFzZVNlcnZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VTZXJ2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUJDNUYyRjE2QkQwQ0MzMDA2NTlCRDMgLyog
RGF0YWJhc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGFiYXNlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDc1Miw2ICsx
NDc1NCw3IEBACiAJCTQxN0RBNENEMTM3MzQyMDQwMDdDNTdGQiAvKiB0ZXN0aW5nICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRUFGNUY5NzE4MzQ3RTgw
MDAxMjZGMjEgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICovLAogCQkJCTQxODE1QzFCMTM4MzE5
NjMwMDU3QUFBNCAvKiBqcyAqLywKIAkJCQk0MTdEQTRDRjEzNzM0MzI2MDA3QzU3RkIgLyogSW50
ZXJuYWxzLmNwcCAqLywKIAkJCQk0MTdEQTRDRTEzNzM0MzI2MDA3QzU3RkIgLyogSW50ZXJuYWxz
LmggKi8sCkBAIC0yNTQ4MSw2ICsyNTQ4NCw3IEBACiAJCQkJQTdCRjdFREYxNEM5MTc1QTAwMTQ0
ODlEIC8qIEludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTNFMjlFNUUx
NjdBOEExOTAwNTg2RDNEIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE3REE3MUQxMzczNURGQTAwN0M1N0ZCIC8qIEpTSW50ZXJuYWxzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFQUY1Rjk4MTgzNDdFODAwMDEyNkYyMSAvKiBKU0ludGVybmFs
c0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzQwQjVBNzE0QzkzNUFGMDBBNzdGQTQg
LyogSlNJbnRlcm5hbFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzRUQzRkRFMTY3
QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc0MEI1OTcxNEM5MzVBRjAwQTc3RkE0IC8qIEpTTWFsbG9jU3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwJKHJldmlzaW9uIDE1OTIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw5IEBACiAgICAgdm9pZCBlbWl0SW5z
cGVjdG9yRGlkQmVnaW5GcmFtZSgpOwogICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZENhbmNlbEZy
YW1lKCk7CiAKKyAgICAvLyBDYWxsaW5nIHNjcmlwdEJvdW5kc0ZvcigpIHdpdGggbnVsbCBnZXRz
IHRoZSBib3VuZHMgZm9yIHRoZSBzY3JpcHQgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgW0N1
c3RvbV0gRE9NU3RyaW5nIHNjcmlwdEJvdW5kc0ZvcihhbnkgZnVuY09yTnVsbCk7CisKICAgICBb
UmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcgZnJvbSwgbG9u
ZyBsZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3JhbW1hck1hcmtl
cihsb25nIGZyb20sIGxvbmcgbGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFu
IGhhc0F1dG9jb3JyZWN0ZWRNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSlNJbnRlcm5hbHNDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTSW50ZXJu
YWxzLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNDOjpKU1ZhbHVlIEpTSW50ZXJuYWxz
OjpzY3JpcHRCb3VuZHNGb3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNDOjpWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNWYWx1ZSBzY3JpcHQgPSBleGVjLT5hcmd1bWVu
dCgwKTsKKyAgICByZXR1cm4gdm0uc2NyaXB0Qm91bmRzRm9yKGV4ZWMsIHNjcmlwdCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTI3MykKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEz
LTExLTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgdHJh
Y2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxv
Y2F0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3Rh
cnQtZW5kLWxvY2F0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRl
c3RzL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmpzOiBBZGRlZC4KKwogMjAxMy0xMS0xMyAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlvdXQg
VGVzdCBhbmltYXRpb25zL3Jlc3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWwgaXMgZmxha3kKSW5k
ZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQt
bG9jYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2Rv
bS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxODMgQEAKK3Byb2dyYW0geyA3OjkgLSAxODoxIH0KK3Byb2dyYW0geyAxOjEg
LSAzNDg6MSB9CitmdW5jdGlvbiAiZjAiIHsgMTo5MSAtIDE6MjUzIH0KK2Z1bmN0aW9uICJmMGEi
IHsgMToxMjAgLSAxOjI0NCB9CitmdW5jdGlvbiAiZjBiIiB7IDE6MTUwIC0gMToyMzUgfQorZXZh
bCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gIngwIiB7IDE6Mjg1IC0gMTo0NzQgfQorZnVuY3Rp
b24gIngwYSIgeyAxOjMxOSAtIDE6NDY0IH0KK2Z1bmN0aW9uICJ4MGIiIHsgMTozNTUgLSAxOjQ1
NCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZjEiIHsgOToyMiAtIDk6MTIwIH0K
K2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmMiIgeyAxMjoyMiAtIDE2OjUgfQorZnVu
Y3Rpb24gImYyYSIgeyAxNDoyNCAtIDE0OjEyMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5j
dGlvbiAiZjMiIHsgMTk6MjIgLSAzMTo1IH0KK2Z1bmN0aW9uICJmM2EiIHsgMjE6MjQgLSAyOTo5
IH0KK2Z1bmN0aW9uICJmM2IiIHsgMjM6MjggLSAyNzoxMyB9CitldmFsIHsgMToxIC0gMTo2MSB9
CitmdW5jdGlvbiAiZjQiIHsgMzQ6MjIgLSAzNDo3NSB9CitmdW5jdGlvbiAiZjRhIiB7IDM0OjUx
IC0gMzQ6NTIgfQorZnVuY3Rpb24gImY1IiB7IDM2OjIyIC0gMzY6MTYwIH0KK2Z1bmN0aW9uICJm
NWEiIHsgMzY6NTEgLSAzNjoxNTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImY2
IiB7IDM4OjIyIC0gMzg6MjAwIH0KK2Z1bmN0aW9uICJmNmEiIHsgMzg6NTEgLSAzODoxOTAgfQor
ZnVuY3Rpb24gImY2YiIgeyAzODo4MSAtIDM4OjE4MCB9CitldmFsIHsgMToxIC0gMTo2MSB9Citm
dW5jdGlvbiAiZmkxIiB7IDQzOjI3IC0gNDM6MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1
bmN0aW9uICJmaTIiIHsgNDY6MjcgLSA1MDo5IH0KK2Z1bmN0aW9uICJmaTJhIiB7IDQ4OjI5IC0g
NDg6MTI5IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTMiIHsgNTM6MjcgLSA2
NTo5IH0KK2Z1bmN0aW9uICJmaTNhIiB7IDU1OjI5IC0gNjM6MTMgfQorZnVuY3Rpb24gImZpM2Ii
IHsgNTc6MzMgLSA2MToxNyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZmk0IiB7
IDY4OjI3IC0gNjg6ODQgfQorZnVuY3Rpb24gImZpNGEiIHsgNjg6NTggLSA2ODo1OSB9CitmdW5j
dGlvbiAiZmk1IiB7IDcwOjI3IC0gNzA6MTY5IH0KK2Z1bmN0aW9uICJmaTVhIiB7IDcwOjU4IC0g
NzA6MTU4IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJmaTYiIHsgNzI6MjcgLSA3
MjoyMTIgfQorZnVuY3Rpb24gImZpNmEiIHsgNzI6NTggLSA3MjoyMDEgfQorZnVuY3Rpb24gImZp
NmIiIHsgNzI6OTAgLSA3MjoxOTAgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gIngx
IiB7IDc3OjI4IC0gNzc6MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4MiIg
eyA4MDoyOCAtIDg0OjUgfQorZnVuY3Rpb24gIngyYSIgeyA4MjozMCAtIDgyOjEyOSB9CitldmFs
IHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDMiIHsgODc6MjggLSA5OTo1IH0KK2Z1bmN0aW9u
ICJ4M2EiIHsgODk6MzAgLSA5Nzo5IH0KK2Z1bmN0aW9uICJ4M2IiIHsgOTE6MzQgLSA5NToxMyB9
CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDQiIHsgMTAyOjI4IC0gMTAyOjg3IH0K
K2Z1bmN0aW9uICJ4NGEiIHsgMTAyOjYzIC0gMTAyOjY0IH0KK2Z1bmN0aW9uICJ4NSIgeyAxMDQ6
MjggLSAxMDQ6MTcyIH0KK2Z1bmN0aW9uICJ4NWEiIHsgMTA0OjYzIC0gMTA0OjE2MiB9CitldmFs
IHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieDYiIHsgMTA2OjI4IC0gMTA2OjIxOCB9CitmdW5j
dGlvbiAieDZhIiB7IDEwNjo2MyAtIDEwNjoyMDggfQorZnVuY3Rpb24gIng2YiIgeyAxMDY6OTkg
LSAxMDY6MTk4IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTEiIHsgMTExOjMz
IC0gMTExOjEzMiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieGkyIiB7IDExNDoz
MyAtIDExODo5IH0KK2Z1bmN0aW9uICJ4aTJhIiB7IDExNjozNSAtIDExNjoxMzUgfQorZXZhbCB7
IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gInhpMyIgeyAxMjE6MzMgLSAxMzM6OSB9CitmdW5jdGlv
biAieGkzYSIgeyAxMjM6MzUgLSAxMzE6MTMgfQorZnVuY3Rpb24gInhpM2IiIHsgMTI1OjM5IC0g
MTI5OjE3IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJ4aTQiIHsgMTM2OjMzIC0g
MTM2Ojk2IH0KK2Z1bmN0aW9uICJ4aTRhIiB7IDEzNjo3MCAtIDEzNjo3MSB9CitmdW5jdGlvbiAi
eGk1IiB7IDEzODozMyAtIDEzODoxODEgfQorZnVuY3Rpb24gInhpNWEiIHsgMTM4OjcwIC0gMTM4
OjE3MCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAieGk2IiB7IDE0MDozMyAtIDE0
MDoyMzAgfQorZnVuY3Rpb24gInhpNmEiIHsgMTQwOjcwIC0gMTQwOjIxOSB9CitmdW5jdGlvbiAi
eGk2YiIgeyAxNDA6MTA4IC0gMTQwOjIwOCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlv
biAiIiB7IDE0Njo1OCAtIDE1MTo1IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEg
LSAxOjYxIH0KK2Z1bmN0aW9uICJnZjEiIHsgMTYwOjE5IC0gMTYwOjExOCB9CitldmFsIHsgMTox
IC0gMTo2MSB9CitmdW5jdGlvbiAiZ2YyIiB7IDE2MzoxOSAtIDE2NzoxIH0KK2Z1bmN0aW9uICJn
ZjJhIiB7IDE2NToyMSAtIDE2NToxMjEgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
ImdmMyIgeyAxNzA6MTkgLSAxODI6MSB9CitmdW5jdGlvbiAiZ2YzYSIgeyAxNzI6MjEgLSAxODA6
NSB9CitmdW5jdGlvbiAiZ2YzYiIgeyAxNzQ6MjUgLSAxNzg6OSB9CitldmFsIHsgMToxIC0gMTo2
MSB9CitmdW5jdGlvbiAiZ2Y0IiB7IDE4NToxOSAtIDE4NTo3NiB9CitmdW5jdGlvbiAiZ2Y0YSIg
eyAxODU6NTAgLSAxODU6NTEgfQorZnVuY3Rpb24gImdmNSIgeyAxODc6MTkgLSAxODc6MTYxIH0K
K2Z1bmN0aW9uICJnZjVhIiB7IDE4Nzo1MCAtIDE4NzoxNTAgfQorZXZhbCB7IDE6MSAtIDE6NjEg
fQorZnVuY3Rpb24gImdmNiIgeyAxODk6MTkgLSAxODk6MjA0IH0KK2Z1bmN0aW9uICJnZjZhIiB7
IDE4OTo1MCAtIDE4OToxOTMgfQorZnVuY3Rpb24gImdmNmIiIHsgMTg5OjgyIC0gMTg5OjE4MiB9
CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiZ2ZpMSIgeyAxOTQ6MjQgLSAxOTQ6MTI0
IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJnZmkyIiB7IDE5NzoyNCAtIDIwMTo1
IH0KK2Z1bmN0aW9uICJnZmkyYSIgeyAxOTk6MjYgLSAxOTk6MTI3IH0KK2V2YWwgeyAxOjEgLSAx
OjYxIH0KK2Z1bmN0aW9uICJnZmkzIiB7IDIwNDoyNCAtIDIxNjo1IH0KK2Z1bmN0aW9uICJnZmkz
YSIgeyAyMDY6MjYgLSAyMTQ6OSB9CitmdW5jdGlvbiAiZ2ZpM2IiIHsgMjA4OjMwIC0gMjEyOjEz
IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJnZmk0IiB7IDIxOToyNCAtIDIxOTo4
NSB9CitmdW5jdGlvbiAiZ2ZpNGEiIHsgMjE5OjU3IC0gMjE5OjU4IH0KK2Z1bmN0aW9uICJnZmk1
IiB7IDIyMToyNCAtIDIyMToxNzAgfQorZnVuY3Rpb24gImdmaTVhIiB7IDIyMTo1NyAtIDIyMTox
NTggfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImdmaTYiIHsgMjIzOjI0IC0gMjIz
OjIxNiB9CitmdW5jdGlvbiAiZ2ZpNmEiIHsgMjIzOjU3IC0gMjIzOjIwNCB9CitmdW5jdGlvbiAi
Z2ZpNmIiIHsgMjIzOjkxIC0gMjIzOjE5MiB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlv
biAiZ3gxIiB7IDIyODoyNSAtIDIyODoxMjQgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rp
b24gImd4MiIgeyAyMzE6MjUgLSAyMzU6MSB9CitmdW5jdGlvbiAiZ3gyYSIgeyAyMzM6MjcgLSAy
MzM6MTI3IH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJneDMiIHsgMjM4OjI1IC0g
MjUwOjEgfQorZnVuY3Rpb24gImd4M2EiIHsgMjQwOjI3IC0gMjQ4OjUgfQorZnVuY3Rpb24gImd4
M2IiIHsgMjQyOjMxIC0gMjQ2OjkgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24gImd4
NCIgeyAyNTM6MjUgLSAyNTM6ODggfQorZnVuY3Rpb24gImd4NGEiIHsgMjUzOjYyIC0gMjUzOjYz
IH0KK2Z1bmN0aW9uICJneDUiIHsgMjU1OjI1IC0gMjU1OjE3MyB9CitmdW5jdGlvbiAiZ3g1YSIg
eyAyNTU6NjIgLSAyNTU6MTYyIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2Z1bmN0aW9uICJneDYi
IHsgMjU3OjI1IC0gMjU3OjIyMiB9CitmdW5jdGlvbiAiZ3g2YSIgeyAyNTc6NjIgLSAyNTc6MjEx
IH0KK2Z1bmN0aW9uICJneDZiIiB7IDI1NzoxMDAgLSAyNTc6MjAwIH0KK2V2YWwgeyAxOjEgLSAx
OjYxIH0KK2Z1bmN0aW9uICJneGkxIiB7IDI2MjozMCAtIDI2MjoxMzAgfQorZXZhbCB7IDE6MSAt
IDE6NjEgfQorZnVuY3Rpb24gImd4aTIiIHsgMjY1OjMwIC0gMjY5OjUgfQorZnVuY3Rpb24gImd4
aTJhIiB7IDI2NzozMiAtIDI2NzoxMzMgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorZnVuY3Rpb24g
Imd4aTMiIHsgMjcyOjMwIC0gMjg0OjUgfQorZnVuY3Rpb24gImd4aTNhIiB7IDI3NDozMiAtIDI4
Mjo5IH0KK2Z1bmN0aW9uICJneGkzYiIgeyAyNzY6MzYgLSAyODA6MTMgfQorZXZhbCB7IDE6MSAt
IDE6NjEgfQorZnVuY3Rpb24gImd4aTQiIHsgMjg3OjMwIC0gMjg3Ojk3IH0KK2Z1bmN0aW9uICJn
eGk0YSIgeyAyODc6NjkgLSAyODc6NzAgfQorZnVuY3Rpb24gImd4aTUiIHsgMjg5OjMwIC0gMjg5
OjE4MiB9CitmdW5jdGlvbiAiZ3hpNWEiIHsgMjg5OjY5IC0gMjg5OjE3MCB9CitldmFsIHsgMTox
IC0gMTo2MSB9CitmdW5jdGlvbiAiZ3hpNiIgeyAyOTE6MzAgLSAyOTE6MjM0IH0KK2Z1bmN0aW9u
ICJneGk2YSIgeyAyOTE6NjkgLSAyOTE6MjIyIH0KK2Z1bmN0aW9uICJneGk2YiIgeyAyOTE6MTA5
IC0gMjkxOjIxMCB9CitldmFsIHsgMToxIC0gMTo2MSB9CitmdW5jdGlvbiAiIiB7IDI5ODo1NiAt
IDMwMzoxIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0KK2V2YWwgeyAxOjEgLSAxNjo3IH0KK2Z1bmN0
aW9uICJlZjMiIHsgMzoyMCAtIDE0OjUgfQorZnVuY3Rpb24gImVmM2EiIHsgNToyNSAtIDEyOjkg
fQorZnVuY3Rpb24gImVmM2IiIHsgNzoyOSAtIDEwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjYxIH0K
K2V2YWwgeyAxOjEgLSAxOjI0MSB9CitmdW5jdGlvbiAiZXgzIiB7IDE6NjQgLSAxOjIzMyB9Citm
dW5jdGlvbiAiZXgzYSIgeyAxOjk1IC0gMToyMjMgfQorZnVuY3Rpb24gImV4M2IiIHsgMToxMjcg
LSAxOjIxMyB9CitldmFsIHsgMToxIC0gMTo2MSB9CitldmFsIHsgMToxIC0gMTc6OCB9CitmdW5j
dGlvbiAiZWZpMyIgeyA0OjIxIC0gMTU6NSB9CitmdW5jdGlvbiAiZWZpM2EiIHsgNjoyNiAtIDEz
OjkgfQorZnVuY3Rpb24gImVmaTNiIiB7IDg6MzAgLSAxMToxMyB9CitldmFsIHsgMToxIC0gMTo2
MSB9CitldmFsIHsgMToxIC0gMToyNTAgfQorZnVuY3Rpb24gImV4aTMiIHsgMTo2NSAtIDE6MjQx
IH0KK2Z1bmN0aW9uICJleGkzYSIgeyAxOjk4IC0gMToyMzAgfQorZnVuY3Rpb24gImV4aTNiIiB7
IDE6MTMyIC0gMToyMTkgfQorZXZhbCB7IDE6MSAtIDE6NjEgfQorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2Rv
bS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gc28gdGhhdCBzY3JpcHQtdGVzdHMv
c2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKKyAgICAvLyBjYW4gYmUgbGVzcyB2ZXJib3Nl
IGZvciBjYXNlcyB3aGVyZSB3ZSBoYXZlIGEgZnVuY3Rpb24gd2hvc2UgYm91bmRzIHdlCisgICAg
Ly8gd2FudCB0byBwcmludC4KKyAgICBmdW5jdGlvbiBib3VuZHMoZnVuYykgeworICAgICAgICBk
ZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihmdW5jKSk7CisgICAgfQorCisg
ICAgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOworCis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlv
bnMuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxv
Y2F0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVz
dHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNDcgQEAKK3ZhciB2YWx1ZSA9IDEwOyB2YXIgc3VtID0gMTsgZGVidWcod2luZG93LmludGVy
bmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOyBmdW5jdGlvbiBmMCgpIHsgYm91bmRzKGYwKTsg
ZnVuY3Rpb24gZjBhKCkgeyBib3VuZHMoZjBhKTsgZnVuY3Rpb24gZjBiKCkgeyBib3VuZHMoZjBi
KTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5k
c0ZvcihudWxsKSk7Jyk7IH0gZjBiKCk7IH0gZjBhKCk7IH0gZjAoKTsgIHZhciB4MCA9IGZ1bmN0
aW9uKGtleSkgeyBib3VuZHMoeDApO3ZhciB4MGEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHgwYSk7
IHZhciB4MGIgPSBmdW5jdGlvbigpIHsgYm91bmRzKHgwYik7IHN1bSArPSB2YWx1ZTsgZXZhbCgn
c3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxs
KSk7Jyk7IH07IHgwYigpOyB9OyB4MGEoKTsgfTsgeDAoKTsKKworZnVuY3Rpb24gZ2xvYmFsRnVu
YygpIHsKKyAgICB2YXIgYXJyYXkgPSBbMl07CisgICAgdmFyIHN1bSA9IDA7CisgICAgdmFyIHZh
bHVlID0gNTsKKworICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgor
ICAgIGZ1bmN0aW9uIGYxKGtleSkgeyBib3VuZHMoZjEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1
bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkp
OycpOyB9CisgICAgZjEoKTsKKworICAgIGZ1bmN0aW9uIGYyKGtleSkgeworICAgICAgICBib3Vu
ZHMoZjIpOworICAgICAgICBmdW5jdGlvbiBmMmEoKSB7IGJvdW5kcyhmMmEpOyBzdW0gKz0gdmFs
dWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3Vu
ZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgIGYyYSgpOworICAgIH0KKyAgICBmMigpOworCisg
ICAgZnVuY3Rpb24gZjMoa2V5KSB7CisgICAgICAgIGJvdW5kcyhmMyk7CisgICAgICAgIGZ1bmN0
aW9uIGYzYSgpIHsKKyAgICAgICAgICAgIGJvdW5kcyhmM2EpOworICAgICAgICAgICAgZnVuY3Rp
b24gZjNiKCkgeworICAgICAgICAgICAgICAgIGJvdW5kcyhmM2IpOworICAgICAgICAgICAgICAg
IHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZjNiKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZjNhKCk7CisgICAgfQorICAgIGYzKCk7CisKKyAgICBmdW5jdGlvbiBmNChrZXkpIHsgYm91bmRz
KGY0KTsgZnVuY3Rpb24gZjRhKCkge307IGJvdW5kcyhmNGEpOyBmNGEoKTsgfQorICAgIGY0KCk7
CisgICAgZnVuY3Rpb24gZjUoa2V5KSB7IGJvdW5kcyhmNSk7IGZ1bmN0aW9uIGY1YSgpIHsgYm91
bmRzKGY1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGY1YSgpOyB9CisgICAgZjUo
KTsKKyAgICBmdW5jdGlvbiBmNihrZXkpIHsgYm91bmRzKGY2KTsgZnVuY3Rpb24gZjZhKCkgeyBi
b3VuZHMoZjZhKTsgZnVuY3Rpb24gZjZiKCkgeyBib3VuZHMoZjZiKTsgc3VtICs9IHZhbHVlOyBl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9y
KG51bGwpKTsnKTsgfTsgZjZiKCk7IH07IGY2YSgpOyB9CisgICAgZjYoKTsKKworICAgIC8vIElu
ZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHsKKyAgICAg
ICAgZnVuY3Rpb24gZmkxKGtleSkgeyBib3VuZHMoZmkxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdz
dW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwp
KTsnKTsgfQorICAgICAgICBmaTEoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTIoa2V5KSB7Cisg
ICAgICAgICAgICBib3VuZHMoZmkyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZpMmEoKSB7IGJv
dW5kcyhmaTJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICAgICAgZmky
YSgpOworICAgICAgICB9CisgICAgICAgIGZpMigpOworCisgICAgICAgIGZ1bmN0aW9uIGZpMyhr
ZXkpIHsKKyAgICAgICAgICAgIGJvdW5kcyhmaTMpOworICAgICAgICAgICAgZnVuY3Rpb24gZmkz
YSgpIHsKKyAgICAgICAgICAgICAgICBib3VuZHMoZmkzYSk7CisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gZmkzYigpIHsKKyAgICAgICAgICAgICAgICAgICAgYm91bmRzKGZpM2IpOworICAgICAg
ICAgICAgICAgICAgICBzdW0gKz0gdmFsdWU7IHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJv
dW5kc0ZvcihudWxsKSk7Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZp
M2IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpM2EoKTsKKyAgICAgICAgfQorICAg
ICAgICBmaTMoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTQoa2V5KSB7IGJvdW5kcyhmaTQpOyBm
dW5jdGlvbiBmaTRhKCkge307IGJvdW5kcyhmaTRhKTsgZmk0YSgpOyB9CisgICAgICAgIGZpNCgp
OworICAgICAgICBmdW5jdGlvbiBmaTUoa2V5KSB7IGJvdW5kcyhmaTUpOyBmdW5jdGlvbiBmaTVh
KCkgeyBib3VuZHMoZmk1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNWEoKTsg
fQorICAgICAgICBmaTUoKTsKKyAgICAgICAgZnVuY3Rpb24gZmk2KGtleSkgeyBib3VuZHMoZmk2
KTsgZnVuY3Rpb24gZmk2YSgpIHsgYm91bmRzKGZpNmEpOyBmdW5jdGlvbiBmaTZiKCkgeyBib3Vu
ZHMoZmk2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IGZpNmIoKTsgfTsgZmk2YSgp
OyB9CisgICAgICAgIGZpNigpOworICAgIH0KKworICAgIC8vIEZ1bmN0aW9uIGV4cHJlc3Npb25z
IGluIGEgZnVuY3Rpb246CisgICAgdmFyIHgxID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4MSk7
IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICB4MSgpOworCisgICAgdmFyIHgyID0g
ZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGJvdW5kcyh4Mik7CisgICAgICAgIHZhciB4MmEgPSBm
dW5jdGlvbigpIHsgYm91bmRzKHgyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAg
ICAgICAgeDJhKCk7CisgICAgfQorICAgIHgyKCk7CisKKyAgICB2YXIgeDMgPSBmdW5jdGlvbihr
ZXkpIHsKKyAgICAgICAgYm91bmRzKHgzKTsKKyAgICAgICAgdmFyIHgzYSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgYm91bmRzKHgzYSk7CisgICAgICAgICAgICB2YXIgeDNiID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgYm91bmRzKHgzYik7CisgICAgICAgICAgICAgICAgc3Vt
ICs9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgeDNiKCk7CisgICAgICAgIH0KKyAgICAgICAgeDNhKCk7CisgICAgfQorICAg
IHgzKCk7CisKKyAgICB2YXIgeDQgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg0KTsgdmFyIHg0
YSA9IGZ1bmN0aW9uKCkge307IGJvdW5kcyh4NGEpOyB4NGEoKTsgfQorICAgIHg0KCk7CisgICAg
dmFyIHg1ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4NSk7IHZhciB4NWEgPSBmdW5jdGlvbigp
IHsgYm91bmRzKHg1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3
aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH07IHg1YSgpOyB9Cisg
ICAgeDUoKTsKKyAgICB2YXIgeDYgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKHg2KTsgdmFyIHg2
YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoeDZhKTsgdmFyIHg2YiA9IGZ1bmN0aW9uKCkgeyBib3Vu
ZHMoeDZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgeDZiKCk7IH07IHg2YSgpOyB9
CisgICAgeDYoKTsKKworICAgIC8vIEluZGVudGVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGluIGEg
ZnVuY3Rpb246CisgICAgeworICAgICAgICB2YXIgeGkxID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5k
cyh4aTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgIHhpMSgpOworCisg
ICAgICAgIHZhciB4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGJvdW5kcyh4aTIp
OworICAgICAgICAgICAgdmFyIHhpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKHhpMmEpOyBzdW0g
Kz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3Jp
cHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgICAgICAgICB4aTJhKCk7CisgICAgICAgIH0K
KyAgICAgICAgeGkyKCk7CisKKyAgICAgICAgdmFyIHhpMyA9IGZ1bmN0aW9uKGtleSkgeworICAg
ICAgICAgICAgYm91bmRzKHhpMyk7CisgICAgICAgICAgICB2YXIgeGkzYSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGJvdW5kcyh4aTNhKTsKKyAgICAgICAgICAgICAgICB2YXIgeGkz
YiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBib3VuZHMoeGkzYik7CisgICAg
ICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAg
ICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0
Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
eGkzYigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeGkzYSgpOworICAgICAgICB9Cisg
ICAgICAgIHhpMygpOworCisgICAgICAgIHZhciB4aTQgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRz
KHhpNCk7IHZhciB4aTRhID0gZnVuY3Rpb24oKSB7fTsgYm91bmRzKHhpNGEpOyB4aTRhKCk7IH0K
KyAgICAgICAgeGk0KCk7CisgICAgICAgIHZhciB4aTUgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRz
KHhpNSk7IHZhciB4aTVhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTVhKTsgc3VtICs9IHZhbHVl
OyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsnKTsgfTsgeGk1YSgpOyB9CisgICAgICAgIHhpNSgpOworICAgICAgICB2YXIg
eGk2ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyh4aTYpOyB2YXIgeGk2YSA9IGZ1bmN0aW9uKCkg
eyBib3VuZHMoeGk2YSk7IHZhciB4aTZiID0gZnVuY3Rpb24oKSB7IGJvdW5kcyh4aTZiKTsgc3Vt
ICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2Ny
aXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgeGk2YigpOyB9OyB4aTZhKCk7IH0KKyAgICAgICAg
eGk2KCk7CisgICAgfQorCisgICAgLy8gQW5ub3ltb3VzIGZ1bmN0aW9uIGluIGEgZnVuY3Rpb246
CisgICAgdmFyIGZvckVhY2ggPSBbIF0uZm9yRWFjaDsKKyAgICB2YXIgYm91bmRGb3JFYWNoID0g
Zm9yRWFjaC5iaW5kKGFycmF5LCBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZGVidWcod2luZG93
LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOworICAgICAgICBzdW0gKz0gdmFsdWU7
CisgICAgICAgIHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgfSk7Cisg
ICAgYm91bmRGb3JFYWNoKCk7CisKK30KK2dsb2JhbEZ1bmMoKTsKKworZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisK
Ky8vIEdsb2JhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnM6CitmdW5jdGlvbiBnZjEoa2V5KSB7IGJv
dW5kcyhnZjEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CitnZjEoKTsKKworZnVuY3Rp
b24gZ2YyKGtleSkgeworICAgIGJvdW5kcyhnZjIpOworICAgIGZ1bmN0aW9uIGdmMmEoKSB7IGJv
dW5kcyhnZjJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgIGdmMmEoKTsKK30K
K2dmMigpOworCitmdW5jdGlvbiBnZjMoa2V5KSB7CisgICAgYm91bmRzKGdmMyk7CisgICAgZnVu
Y3Rpb24gZ2YzYSgpIHsKKyAgICAgICAgYm91bmRzKGdmM2EpOworICAgICAgICBmdW5jdGlvbiBn
ZjNiKCkgeworICAgICAgICAgICAgYm91bmRzKGdmM2IpOworICAgICAgICAgICAgc3VtICs9IHZh
bHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgfQor
ICAgICAgICBnZjNiKCk7CisgICAgfQorICAgIGdmM2EoKTsKK30KK2dmMygpOworCitmdW5jdGlv
biBnZjQoa2V5KSB7IGJvdW5kcyhnZjQpOyBmdW5jdGlvbiBnZjRhKCkge307IGJvdW5kcyhnZjRh
KTsgZ2Y0YSgpOyB9CitnZjQoKTsKK2Z1bmN0aW9uIGdmNShrZXkpIHsgYm91bmRzKGdmNSk7IGZ1
bmN0aW9uIGdmNWEoKSB7IGJvdW5kcyhnZjVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0g
dmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsg
fTsgZ2Y1YSgpOyB9CitnZjUoKTsKK2Z1bmN0aW9uIGdmNihrZXkpIHsgYm91bmRzKGdmNik7IGZ1
bmN0aW9uIGdmNmEoKSB7IGJvdW5kcyhnZjZhKTsgZnVuY3Rpb24gZ2Y2YigpIHsgYm91bmRzKGdm
NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBnZjZiKCk7IH07IGdmNmEoKTsgfQor
Z2Y2KCk7CisKKy8vIEluZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9u
OgoreworICAgIGZ1bmN0aW9uIGdmaTEoa2V5KSB7IGJvdW5kcyhnZmkxKTsgc3VtICs9IHZhbHVl
OyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsnKTsgfQorICAgIGdmaTEoKTsKKworICAgIGZ1bmN0aW9uIGdmaTIoa2V5KSB7
CisgICAgICAgIGJvdW5kcyhnZmkyKTsKKyAgICAgICAgZnVuY3Rpb24gZ2ZpMmEoKSB7IGJvdW5k
cyhnZmkyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7IH0KKyAgICAgICAgZ2ZpMmEoKTsK
KyAgICB9CisgICAgZ2ZpMigpOworCisgICAgZnVuY3Rpb24gZ2ZpMyhrZXkpIHsKKyAgICAgICAg
Ym91bmRzKGdmaTMpOworICAgICAgICBmdW5jdGlvbiBnZmkzYSgpIHsKKyAgICAgICAgICAgIGJv
dW5kcyhnZmkzYSk7CisgICAgICAgICAgICBmdW5jdGlvbiBnZmkzYigpIHsKKyAgICAgICAgICAg
ICAgICBib3VuZHMoZ2ZpM2IpOworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9
IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZ2ZpM2IoKTsKKyAgICAgICAgfQorICAgICAgICBnZmkzYSgpOworICAgIH0KKyAg
ICBnZmkzKCk7CisKKyAgICBmdW5jdGlvbiBnZmk0KGtleSkgeyBib3VuZHMoZ2ZpNCk7IGZ1bmN0
aW9uIGdmaTRhKCkge307IGJvdW5kcyhnZmk0YSk7IGdmaTRhKCk7IH0KKyAgICBnZmk0KCk7Cisg
ICAgZnVuY3Rpb24gZ2ZpNShrZXkpIHsgYm91bmRzKGdmaTUpOyBmdW5jdGlvbiBnZmk1YSgpIHsg
Ym91bmRzKGdmaTVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2ZpNWEoKTsgfQor
ICAgIGdmaTUoKTsKKyAgICBmdW5jdGlvbiBnZmk2KGtleSkgeyBib3VuZHMoZ2ZpNik7IGZ1bmN0
aW9uIGdmaTZhKCkgeyBib3VuZHMoZ2ZpNmEpOyBmdW5jdGlvbiBnZmk2YigpIHsgYm91bmRzKGdm
aTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfTsgZ2ZpNmIoKTsgfTsgZ2ZpNmEoKTsg
fQorICAgIGdmaTYoKTsKK30KKworLy8gRnVuY3Rpb24gZXhwcmVzc2lvbnMgaW4gYSBmdW5jdGlv
bjoKK3ZhciBneDEgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRzKGd4MSk7IHN1bSArPSB2YWx1ZTsg
ZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0Zv
cihudWxsKSk7Jyk7IH0KK2d4MSgpOworCit2YXIgZ3gyID0gZnVuY3Rpb24oa2V5KSB7CisgICAg
Ym91bmRzKGd4Mik7CisgICAgdmFyIGd4MmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4MmEpOyBz
dW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5z
Y3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9CisgICAgZ3gyYSgpOworfQorZ3gyKCk7CisKK3Zh
ciBneDMgPSBmdW5jdGlvbihrZXkpIHsKKyAgICBib3VuZHMoZ3gzKTsKKyAgICB2YXIgZ3gzYSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBib3VuZHMoZ3gzYSk7CisgICAgICAgIHZhciBneDNiID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBib3VuZHMoZ3gzYik7CisgICAgICAgICAgICBzdW0g
Kz0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsKKyAgICAgICAgfQorICAgICAgICBn
eDNiKCk7CisgICAgfQorICAgIGd4M2EoKTsKK30KK2d4MygpOworCit2YXIgZ3g0ID0gZnVuY3Rp
b24oa2V5KSB7IGJvdW5kcyhneDQpOyB2YXIgZ3g0YSA9IGZ1bmN0aW9uKCkge307IGJvdW5kcyhn
eDRhKTsgZ3g0YSgpOyB9CitneDQoKTsKK3ZhciBneDUgPSBmdW5jdGlvbihrZXkpIHsgYm91bmRz
KGd4NSk7IHZhciBneDVhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneDVhKTsgc3VtICs9IHZhbHVl
OyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0Qm91bmRz
Rm9yKG51bGwpKTsnKTsgfTsgZ3g1YSgpOyB9CitneDUoKTsKK3ZhciBneDYgPSBmdW5jdGlvbihr
ZXkpIHsgYm91bmRzKGd4Nik7IHZhciBneDZhID0gZnVuY3Rpb24oKSB7IGJvdW5kcyhneDZhKTsg
dmFyIGd4NmIgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwo
J3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVs
bCkpOycpOyB9OyBneDZiKCk7IH07IGd4NmEoKTsgfQorZ3g2KCk7CisKKy8vIEluZGVudGVkIGZ1
bmN0aW9uIGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246Cit7CisgICAgdmFyIGd4aTEgPSBmdW5j
dGlvbihrZXkpIHsgYm91bmRzKGd4aTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1
ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9Cisg
ICAgZ3hpMSgpOworCisgICAgdmFyIGd4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgYm91
bmRzKGd4aTIpOworICAgICAgICB2YXIgZ3hpMmEgPSBmdW5jdGlvbigpIHsgYm91bmRzKGd4aTJh
KTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5h
bHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsnKTsgfQorICAgICAgICBneGkyYSgpOworICAgIH0K
KyAgICBneGkyKCk7CisKKyAgICB2YXIgZ3hpMyA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICBi
b3VuZHMoZ3hpMyk7CisgICAgICAgIHZhciBneGkzYSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgYm91bmRzKGd4aTNhKTsKKyAgICAgICAgICAgIHZhciBneGkzYiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGJvdW5kcyhneGkzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZh
bHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBk
ZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBneGkzYigpOworICAgICAgICB9CisgICAgICAgIGd4aTNhKCk7
CisgICAgfQorICAgIGd4aTMoKTsKKworICAgIHZhciBneGk0ID0gZnVuY3Rpb24oa2V5KSB7IGJv
dW5kcyhneGk0KTsgdmFyIGd4aTRhID0gZnVuY3Rpb24oKSB7fTsgYm91bmRzKGd4aTRhKTsgZ3hp
NGEoKTsgfQorICAgIGd4aTQoKTsKKyAgICB2YXIgZ3hpNSA9IGZ1bmN0aW9uKGtleSkgeyBib3Vu
ZHMoZ3hpNSk7IHZhciBneGk1YSA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hpNWEpOyBzdW0gKz0g
dmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRC
b3VuZHNGb3IobnVsbCkpOycpOyB9OyBneGk1YSgpOyB9CisgICAgZ3hpNSgpOworICAgIHZhciBn
eGk2ID0gZnVuY3Rpb24oa2V5KSB7IGJvdW5kcyhneGk2KTsgdmFyIGd4aTZhID0gZnVuY3Rpb24o
KSB7IGJvdW5kcyhneGk2YSk7IHZhciBneGk2YiA9IGZ1bmN0aW9uKCkgeyBib3VuZHMoZ3hpNmIp
OyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFs
cy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9OyBneGk2YigpOyB9OyBneGk2YSgpOyB9Cisg
ICAgZ3hpNigpOworfQorCisvLyBHbG9iYWwgYW5ub3ltb3VzIGZ1bmN0aW9uOgordmFyIGFycmF5
ID0gWzJdOwordmFyIGdmb3JFYWNoID0gWyBdLmZvckVhY2g7Cit2YXIgZ2JvdW5kRm9yRWFjaCA9
IGdmb3JFYWNoLmJpbmQoYXJyYXksIGZ1bmN0aW9uKGtleSkgeworICAgIGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsKKyAgICBzdW0gKz0gdmFsdWU7CisgICAg
c3VtICo9IHZhbHVlOworICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOworfSk7CitnYm91bmRGb3JFYWNoKCk7CisK
K2V2YWwoIiBcbiIgKworIiAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0Zv
cihudWxsKSk7XG4iICsKKyIgICAgZnVuY3Rpb24gZWYzKCkge1xuIiArCisiICAgICAgICBib3Vu
ZHMoZWYzKTtcbiIgKworIiAgICAgICAgZnVuY3Rpb24gZWYzYSgpIHtcbiIgKworIiAgICAgICAg
ICAgIGJvdW5kcyhlZjNhKTtcbiIgKworIiAgICAgICAgICAgIGZ1bmN0aW9uIGVmM2IoKSB7XG4i
ICsKKyIgICAgICAgICAgICAgICAgYm91bmRzKGVmM2IpO1xuIiArCisiICAgICAgICAgICAgICAg
IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5zY3JpcHRCb3VuZHNG
b3IobnVsbCkpOycpO1xuIiArCisiICAgICAgICAgICAgfVxuIiArCisiICAgICAgICAgICAgZWYz
YigpO1xuIiArCisiICAgICAgICB9XG4iICsKKyIgICAgICAgIGVmM2EoKTtcbiIgKworIiAgICB9
XG4iICsKKyJcbiIgKworImVmMygpOyIKKyk7CisKK2V2YWwoIiBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7IGZ1bmN0aW9uIGV4MygpIHsgYm91bmRzKGV4Myk7
IGZ1bmN0aW9uIGV4M2EoKSB7IGJvdW5kcyhleDNhKTsgZnVuY3Rpb24gZXgzYigpIHsgYm91bmRz
KGV4M2IpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMuc2NyaXB0
Qm91bmRzRm9yKG51bGwpKTsnKTsgfSBleDNiKCk7IH0gZXgzYSgpOyB9IGV4MygpOyIpOworCit7
CisgICAgZXZhbCgiIFxuIiArCisgICAgICAgICAiICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
c2NyaXB0Qm91bmRzRm9yKG51bGwpKTtcbiIgKworICAgICAgICAgIiAgICAvLyBUZXN0IGluZGVu
dGVkIGZ1bmN0aW9uIHdpdGggaW5uZXIgZnVuY3Rpb25zLiBcbiIgKworICAgICAgICAgIiAgICBm
dW5jdGlvbiBlZmkzKCkge1xuIiArCisgICAgICAgICAiICAgICAgICBib3VuZHMoZWZpMyk7XG4i
ICsKKyAgICAgICAgICIgICAgICAgIGZ1bmN0aW9uIGVmaTNhKCkge1xuIiArCisgICAgICAgICAi
ICAgICAgICAgICAgYm91bmRzKGVmaTNhKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgIGZ1
bmN0aW9uIGVmaTNiKCkge1xuIiArCisgICAgICAgICAiICAgICAgICAgICAgICAgIGJvdW5kcyhl
ZmkzYik7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnNjcmlwdEJvdW5kc0ZvcihudWxsKSk7Jyk7XG4iICsK
KyAgICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBlZmkz
YigpO1xuIiArCisgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgIGVm
aTNhKCk7XG4iICsKKyAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAiXG4iICsKKyAgICAg
ICAgICJlZmkzKCk7IgorICAgICAgICApOworCisgICAgZXZhbCgiIGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMuc2NyaXB0Qm91bmRzRm9yKG51bGwpKTsgZnVuY3Rpb24gZXhpMygpIHsgYm91bmRzKGV4
aTMpOyBmdW5jdGlvbiBleGkzYSgpIHsgYm91bmRzKGV4aTNhKTsgZnVuY3Rpb24gZXhpM2IoKSB7
IGJvdW5kcyhleGkzYik7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFs
cy5zY3JpcHRCb3VuZHNGb3IobnVsbCkpOycpOyB9IGV4aTNiKCk7IH0gZXhpM2EoKTsgfSBleGkz
KCk7Iik7Cit9Cg==
</data>
<flag name="commit-queue"
          id="239951"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216952</attachid>
            <date>2013-11-14 09:45:52 -0800</date>
            <delta_ts>2013-11-14 12:03:21 -0800</delta_ts>
            <desc>patch 4: work in progress.</desc>
            <filename>bug-124245b.patch</filename>
            <type>text/plain</type>
            <size>74240</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mjc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDEzLTExLTE0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpcyBuZWVkZWQg
c28gdGhhdCB3ZSBjYW4gZmFpbCBxdWlja2x5IHdoZW4gY2hlY2tpbmcgaWYgd2UKKyAgICAgICAg
bmVlZCB0byBzZXQgYSBicmVha3BvaW50IGluIGEgQ29kZUJsb2NrIHdoZW4gd2UgaW1wbGVtZW50
IGJ5dGVjb2RlIGxldmVsCisgICAgICAgIGJyZWFrcG9pbnRzIGxhdGVyLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6bGluayk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisgICAgICAg
ICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmZ1bmN0aW9uRW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OnJlY29yZFBhcnNlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmVuZENvbHVtbik6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbE5v
ZGU6OkV2YWxOb2RlKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAoSlNDOjpQ
cm9ncmFtTm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OnN0YXJ0Q29s
dW1uKToKKyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uQm9keU5vZGU6OmVuZENvbHVtbik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbkJvZHkpOgorICAgICAgICAoSlNDOjo6
OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAg
IChKU0M6Ojo6cGFyc2UpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAg
ICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgICog
cnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldENvZGVC
bG9jayk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZhbEV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAg
ICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OlNjcmlwdEV4ZWN1dGFibGUpOgorICAgICAgICAo
SlNDOjpTY3JpcHRFeGVjdXRhYmxlOjplbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpTY3JpcHRF
eGVjdXRhYmxlOjpyZWNvcmRQYXJzZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y3JlYXRlKToKKwogMjAxMy0xMS0xMyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxl
LmNvbT4KIAogICAgICAgICBDaGFuZ2UgY2FsbFRvSmF2YVNjcmlwdCB0aHVuayBpbnRvIGFuIG9m
ZmxpbmUgYXNzZW1ibGVkIHN0dWIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3
IEBACiAJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJMEYyNEU1NEQxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmggKi87IH07CiAJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25X
cmFwcGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07
Ci0JCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3NDkw
MEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLzsgfTsKKwkJMEYyNEU1NEYxN0VFMjc0OTAw
QUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3Rl
clNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmNwcCAqLzsgfTsKIAkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0
Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CiAJCTBGMjRFNTUyMTdFRTI3
NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAv
KiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKQEAgLTEwMDksNyArMTAwOSw3IEBA
CiAJCUE3QkRBRUM5MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JEQUVDMzE3
RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oICovOyB9OwogCQlBN0JE
QUVDQTE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkRBRUM0MTdGNEVBMTQwMEY2MTQw
QyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovOyB9OwogCQlBN0JEQUVDQjE3RjRFQTE0MDBGNjE0
MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0JEQUVDNTE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9y
LmggKi87IH07Ci0JCUE3QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdGaWx0cmF0aW9uUmVz
dWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JG
RjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oICovOyB9OworCQlB
N0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCRkYzQkYxNzk4Njg5NDAw
MDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNT
Y3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdDMEM0
QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZi5jcHAgKi87IH07CiAJCUE3QzFFOEU0MTEyRTcyRUYwMEEzN0Y5OCAvKiBKSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcCAqLzsgfTsKQEAgLTEyMTksOSArMTIxOSw5IEBACiAJCUMyRjBGMkQxMTZCQUVF
RTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3Ry
dWN0dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyog
Q29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkZDOUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJG
Q0FFMTAxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKLQkJQzJGQ0FFMTExN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5oICovOyB9OworCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGQ0FF
MTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRTE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLzsgfTsKLQkJQzJGQ0FF
MTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEYxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovOyB9OworCQlDMkZDQUUxMzE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRjE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0
cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJE
NDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0
QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE2OCw2ICs0MTY4LDEwIEBACiAJ
CQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2NUMwMjg1RDE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJl
Z2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIg
LyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJGQ0FFMTExN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1
MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzNTE3QURCNUYzMDA1
QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDE3NSw3ICs0MTc5LDYg
QEAKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFy
cmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUM3
MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QkRBRUM5MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJy
YXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTgsNyArNDMwMSw2IEBACiAJCQkJQTc5
ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAv
KiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTcz
OEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMx
NjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC00NzY4LDcgKzQ3NzAsNiBAQAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVD
RDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyog
U3Ryb25nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyog
U3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg0LDcgKzQ3ODUsNiBAQAogCQkJ
CUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3Rl
clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBMkMxN0MxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRl
c3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3
RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5
N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAx
NTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY0MCwxMCArMTY0MCwxMiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVy
RXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNl
dCgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHVubGlua2VkRXhlY3V0YWJsZS0+
ZnVuY3Rpb25TdGFydENvbHVtbigpOwogICAgICAgICBzdGFydENvbHVtbiArPSAodW5saW5rZWRF
eGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKSA/IDEgOiBvd25lckV4ZWN1dGFibGUtPnN0YXJ0
Q29sdW1uKCkpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmZ1bmN0aW9uRW5kQ29sdW1uKCk7CisgICAgICAgIGVuZENvbHVtbiArPSAhbGluZUNvdW50
ID8gc3RhcnRDb2x1bW4gOiAxOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJj
ZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5z
aWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsK
ICAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZz
ZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4pOwotICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgq
bV92bSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxp
bmVDb3VudCwgc3RhcnRDb2x1bW4pOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV92bSwgY29kZSwgdW5saW5rZWRF
eGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCwgc3RhcnRDb2x1bW4s
IGVuZENvbHVtbik7CiAgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CiAgICAgfQogCkBAIC0xNjU0LDEwICsxNjU2LDEyIEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgdW5zaWdu
ZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8oKSArIHVubGlua2VkRXhlY3V0
YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0g
dW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvblN0YXJ0Q29sdW1uKCk7CiAgICAgICAgIHN0YXJ0
Q29sdW1uICs9ICh1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpID8gMSA6IG93
bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSk7CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVt
biA9IHVubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25FbmRDb2x1bW4oKTsKKyAgICAgICAgZW5k
Q29sdW1uICs9ICFsaW5lQ291bnQgPyBzdGFydENvbHVtbiA6IDE7CiAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0ICsgdW5saW5rZWRFeGVjdXRhYmxlLT5zdGFydE9m
ZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSB1bmxpbmtlZEV4ZWN1dGFi
bGUtPnNvdXJjZUxlbmd0aCgpOwogICAgICAgICBTb3VyY2VDb2RlIGNvZGUobV9zb3VyY2UsIHN0
YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENv
bHVtbik7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKCptX3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0
TGluZSwgZmlyc3RMaW5lICsgbGluZUNvdW50LCBzdGFydENvbHVtbik7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCpt
X3ZtLCBjb2RlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbGlu
ZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKICAgICAgICAgbV9mdW5jdGlvbkV4cHJz
W2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBleGVjdXRhYmxlKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSIsIDAs
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpIH07
CitKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6c19pbmZvID0geyAiVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUiLCAwLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogY29uc3QgQ2xh
c3NJbmZvIFVubGlua2VkQ29kZUJsb2NrOjpzX2luZm8gPSB7ICJVbmxpbmtlZENvZGVCbG9jayIs
IDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRDb2RlQmxvY2spIH07CiBjb25z
dCBDbGFzc0luZm8gVW5saW5rZWRHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2Vk
R2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShVbmxpbmtlZEdsb2JhbENvZGVCbG9jaykgfTsKIGNvbnN0IENsYXNzSW5mbyBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrKSB9OwpAQCAtOTMsMTEgKzkzLDE0IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpVbmxpbmtlZEZ1bmMKICAgICAsIG1fbGluZUNvdW50KG5vZGUtPmxhc3RMaW5lKCkgLSBub2Rl
LT5maXJzdExpbmUoKSkKICAgICAsIG1fZnVuY3Rpb25TdGFydE9mZnNldChub2RlLT5mdW5jdGlv
blN0YXJ0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKICAgICAsIG1fZnVuY3Rpb25TdGFydENv
bHVtbihub2RlLT5zdGFydENvbHVtbigpKQorICAgICwgbV9mdW5jdGlvbkVuZENvbHVtbihub2Rl
LT5lbmRDb2x1bW4oKSkKICAgICAsIG1fc3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCkuc3RhcnRP
ZmZzZXQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAgICwgbV9zb3VyY2VMZW5ndGgobm9k
ZS0+c291cmNlKCkubGVuZ3RoKCkpCiAgICAgLCBtX2ZlYXR1cmVzKG5vZGUtPmZlYXR1cmVzKCkp
CiAgICAgLCBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZShub2RlLT5mdW5jdGlvbk5hbWVJ
c0luU2NvcGVUb2dnbGUoKSkKIHsKKyAgICBpZiAoIW1fbGluZUNvdW50KQorICAgICAgICBtX2Z1
bmN0aW9uRW5kQ29sdW1uIC09IG1fZnVuY3Rpb25TdGFydENvbHVtbjsKIH0KIAogc2l6ZV90IFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0ZXJDb3VudCgpIGNvbnN0CkBAIC0xMjQs
OCArMTI3LDkgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlYwogICAg
IHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVPZmZzZXQgKyBtX2ZpcnN0TGluZU9mZnNldDsKICAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIG1fc3RhcnRPZmZzZXQ7CiAg
ICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBtX2Z1bmN0aW9uU3RhcnRDb2x1bW4gKyAxOyAvLyBz
dGFydENvbHVtbiBzaG91bGQgc3RhcnQgZnJvbSAxLCBub3QgMC4KKyAgICB1bnNpZ25lZCBlbmRD
b2x1bW4gPSBtX2Z1bmN0aW9uRW5kQ29sdW1uICsgKCFtX2xpbmVDb3VudCA/IHN0YXJ0Q29sdW1u
IDogMSk7CiAgICAgU291cmNlQ29kZSBjb2RlKHNvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNl
dCwgc3RhcnRPZmZzZXQgKyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7
Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBjb2RlLCB0aGlzLCBm
aXJzdExpbmUsIGZpcnN0TGluZSArIG1fbGluZUNvdW50LCBzdGFydENvbHVtbik7CisgICAgcmV0
dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBjb2RlLCB0aGlzLCBmaXJzdExpbmUs
IGZpcnN0TGluZSArIG1fbGluZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKIH0KIAog
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpm
cm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERl
YnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCoqIGV4Y2VwdGlvbikK
QEAgLTIwNCw2ICsyMDgsNyBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0qCiAgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQogICAgICwgbV9maXJzdExp
bmUoMCkKICAgICAsIG1fbGluZUNvdW50KDApCisgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkK
ICAgICAsIG1fZmVhdHVyZXMoMCkKICAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCiAgICAgLCBt
X2FycmF5UHJvZmlsZUNvdW50KDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KICAgICB1bnNpZ25lZCBmdW5jdGlvblN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0OyB9CiAgICAg
dW5zaWduZWQgZnVuY3Rpb25TdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25T
dGFydENvbHVtbjsgfQorICAgIHVuc2lnbmVkIGZ1bmN0aW9uRW5kQ29sdW1uKCkgY29uc3QgeyBy
ZXR1cm4gbV9mdW5jdGlvbkVuZENvbHVtbjsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQogICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0
aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CiAKQEAgLTE2Miw2ICsxNjMsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwogICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25T
dGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uU3RhcnRDb2x1bW47CisgICAgdW5z
aWduZWQgbV9mdW5jdGlvbkVuZENvbHVtbjsKICAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0Owog
ICAgIHVuc2lnbmVkIG1fc291cmNlTGVuZ3RoOwogCkBAIC00NDEsMTggKzQ0MywyMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50
JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAotICAgIHZv
aWQgcmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFy
aWFibGVzLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxpbmVDb3VudCkKKyAgICB2b2lk
IHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlh
YmxlcywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQgLCB1bnNpZ25lZCBl
bmRDb2x1bW4pCiAgICAgewogICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAgICAgICAg
IG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAg
bV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50
OworICAgICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsKICAgICB9CiAKICAgICBDb2RlRmVh
dHVyZXMgY29kZUZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlczsgfQogICAgIGJv
b2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1cmVkVmFy
aWFibGVzOyB9CiAgICAgdW5zaWduZWQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dExpbmU7IH0KICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVD
b3VudDsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29s
dW1uOyB9CiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVjdHVy
ZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYpOwpAQCAtNDkyLDYgKzQ5Niw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKICAgICB1bnNp
Z25lZCBtX2ZpcnN0TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKyAgICB1bnNpZ25l
ZCBtX2VuZENvbHVtbjsKIAogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIENvZGVU
eXBlIG1fY29kZVR5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw5ICsyODMsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSog
Y3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IGJvb2wgaW5TdHJpY3RDb250ZXh0KQorICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0
aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX3ZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c3RhcnRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBGdW5jdGlvbkJv
ZHlOb2RlOjpjcmVhdGUobV92bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29s
dW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRG
dW5jdGlvblN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvblN0YXJ0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE1OTI3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTUgKzExNCwxNiBAQCBTdGF0ZW1lbnROb2RlKiBTY29wZU5vZGU6OnNpbmds
ZVN0YXRlbWVuCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgUHJvZ3JhbU5vZGU6OlBy
b2dyYW1Ob2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDogU2Nv
cGVOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwg
dmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25z
dGFudHMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9lbmRDb2x1
bW4oZW5kQ29sdW1uKQogewogfQogCi1QYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9k
ZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQorUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZWF0ZShWTSogdm0sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwg
U291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3Rh
Y2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQogewotICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9kZSh2bSwg
c3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBjaGlsZHJlbiwgdmFyU3Rh
Y2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpOworICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gbm9kZSA9IG5ldyBQcm9ncmFtTm9k
ZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4s
IGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJj
ZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5s
YXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0xMzMs
MTQgKzEzNCwxNSBAQCBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKFZNKiB2bSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlh
YmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKFZNKiB2bSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0
dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAgICA6IFNjb3BlTm9kZSh2bSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorICAgICwg
bV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogewogfQogCi1QYXNzUmVmUHRyPEV2YWxOb2RlPiBFdmFs
Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1Jl
ZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNl
dCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxFdmFsTm9kZT4g
bm9kZSA9IG5ldyBFdmFsTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0
dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZh
bE5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBlbmRDb2x1bW4sIGNoaWxkcmVu
LCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJl
cywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBu
b2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTE3OSwxNSArMTgxLDE3
IEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygKICAgICAgICAgcGF0
dGVybnMoKVtpXS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0
aW9uQm9keU5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCBib29sIGluU3RyaWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlv
bkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICA6IFNjb3BlTm9k
ZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCkKICAgICAs
IG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCisgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4p
CiB7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2
bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK2lubGluZSBG
dW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNr
LCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDog
U2NvcGVOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hp
bGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywg
bnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKKyAgICAsIG1f
ZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIApAQCAtMjA1LDE0ICsyMDksMTQgQEAgdm9pZCBG
dW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKFBhcwogICAgIG1fZnVuY3Rpb25OYW1lSXNJ
blNjb3BlVG9nZ2xlID0gZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlOwogfQogCi1GdW5jdGlv
bkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9u
Qm9keU5vZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCiB7Ci0gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExv
Y2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAg
cmV0dXJuIG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKIH0KIAotUGFzc1Jl
ZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29k
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxG
dW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBm
dW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMp
CiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVuY3Rpb25Cb2R5
Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZl
YXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2Rl
ID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBz
dGFydENvbHVtbiwgZW5kQ29sdW1uICwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNh
cHR1cmVkVmFyaWFibGVzLCBzb3VyY2VDb2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAog
ICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2Fy
ZW5hLnJlbW92ZUxhc3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJ
KHJldmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ2OCwzMyArMTQ2OCwzOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBQcm9ncmFtTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJ
ZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUo
Vk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKLSAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4oKSB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQor
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsg
fQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IGZhbHNlOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMpOworICAgICAgICBQcm9ncmFtTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFj
ayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBPVkVSUklERTsKIAogICAgICAgICB1bnNp
Z25lZCBtX3N0YXJ0Q29sdW1uOworICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9
OwogCiAgICAgY2xhc3MgRXZhbE5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2YWxOb2RlPiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQsIFNv
dXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0
YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOwogCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgeyByZXR1
cm4gMTsgfQorICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDE7
IH0KKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxz
ZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV2YWxOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIFNvdXJjZUVsZW1lbnRz
KiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBFdmFsTm9k
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBG
dW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIE9WRVJSSURFOworCisg
ICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlv
blBhcmFtZXRlcnMgOiBwdWJsaWMgUmVmQ291bnRlZDxGdW5jdGlvblBhcmFtZXRlcnM+IHsKQEAg
LTE1MTksOCArMTUyNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uQm9k
eU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIEZ1bmN0aW9u
Qm9keU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpc1N0cmlj
dE1vZGUpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVh
dGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sq
LCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5
Tm9kZSogY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1
bW4sIGJvb2wgaXNTdHJpY3RNb2RlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRl
bnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogICAgICAgICBzaXplX3QgcGFyYW1ldGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfQpAQCAtMTU0MCwx
MiArMTU0NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRGdW5jdGlvblN0
YXJ0KGludCBmdW5jdGlvblN0YXJ0KSB7IG1fZnVuY3Rpb25TdGFydCA9IGZ1bmN0aW9uU3RhcnQ7
IH0KICAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9u
U3RhcnQ7IH0KICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0Q29sdW1uOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kQ29sdW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1
bmN0aW9uID0gdHJ1ZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUo
Vk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1
bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZN
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAgICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKQEAg
LTE1NTMsNiArMTU1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8RnVuY3Rp
b25QYXJhbWV0ZXJzPiBtX3BhcmFtZXRlcnM7CiAgICAgICAgIGludCBtX2Z1bmN0aW9uU3RhcnQ7
CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CisgICAgICAgIHVuc2lnbmVkIG1fZW5k
Q29sdW1uOwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAko
cmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYyLDEzICsxMTYyLDE2IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW8KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHRv
a2VuQ29sdW1uKCk7CiAgICAgbmV4dCgpOwogCi0gICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKQot
ICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwg
dG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICBpZiAobWF0
Y2goQ0xPU0VCUkFDRSkpIHsKKyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1
bW4oKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9k
ZSgpKTsKKyAgICB9CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVu
dERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PFZNKj4obV92
bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHM8
Q2hlY2tGb3JTdHJpY3RNb2RlPihib2R5QnVpbGRlciksICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0
aGlzIGZ1bmN0aW9uIik7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0
YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHN0cmljdE1vZGUoKSk7
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKKyAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBz
dGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOwogfQogCiBzdGF0aWMgY29uc3Qg
Y2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCkBAIC0x
MjMyLDggKzEyMzUsMTEgQEAgdGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVt
ZQogICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCA9IGNhY2hlZEluZm8tPmNsb3NlQnJh
Y2VPZmZzZXQ7CiAgICAgICAgIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IGNhY2hlZElu
Zm8tPmNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIEFTU0VSVChlbmRMb2NhdGlv
bi5zdGFydE9mZnNldCA+PSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICB1
bnNpZ25lZCBib2R5RW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgIGlmIChlbmRMb2NhdGlvbi5saW5lID09IGJv
ZHlTdGFydExpbmUpCisgICAgICAgICAgICBib2R5RW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3Rh
cnRPZmZzZXQgLSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAgICAgYm9k
eSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9u
LCBib2R5U3RhcnRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOworICAgICAgICBib2R5
ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IGJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7
CiAgICAgICAgIAogICAgICAgICBmdW5jdGlvblNjb3BlLT5yZXN0b3JlRnJvbVNvdXJjZVByb3Zp
ZGVyQ2FjaGUoY2FjaGVkSW5mbyk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0
aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pLCAiUGFyc2VyIGVy
cm9yIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9u
IDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkwMCwxMyArOTAwLDE1IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyPExleGVyVHlwZT4KICAgICBSZWZQdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmICht
X3NvdXJjZUVsZW1lbnRzKSB7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBlbmRMb2NhdGlvbjsK
LSAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxhc3RMaW5lTnVtYmVyKCk7Cisg
ICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CiAgICAgICAg
IGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IG1fbGV4ZXItPmN1cnJlbnRMaW5lU3RhcnRP
ZmZzZXQoKTsKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJy
ZW50T2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0
YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0ICsgMTsKICAgICAgICAgcmVz
dWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKG1fdm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydENvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbHVt
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/
ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRpb25zLT5kYXRh
IDogMCwKQEAgLTkxNCw3ICs5MTYsNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxM
ZXhlclR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICBy
ZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdFRva2VuRW5kUG9zaXRp
b24ubGluZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0
YXJ0T2Zmc2V0KCkpOworICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5l
KCksIG1fbGV4ZXItPmxpbmVOdW1iZXIoKSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xl
eGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlv
biwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAgICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdo
ZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2Un
cmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5o
CShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRh
eENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHB1YmxpYzoKICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25kaXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyBy
ZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWdu
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVz
c2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBib29sKSB7IHJl
dHVybiAxOyB9CisgICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCkgeyByZXR1cm4gMTsg
fQogICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQsIGludCkgeyB9CiAgICAgaW50IGNyZWF0
ZUFyZ3VtZW50cygpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKGludCkg
eyByZXR1cm4gMTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw4IEBAIFVubGlu
a2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2QKICAgICAgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGUgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4o
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jZWxsLmdldCgpKTsKICAgICAgICAgdW5zaWduZWQg
Zmlyc3RMaW5lID0gc291cmNlLmZpcnN0TGluZSgpICsgdW5saW5rZWRDb2RlLT5maXJzdExpbmUo
KTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBzb3VyY2UuZmlyc3RMaW5lKCkgPyBz
b3VyY2Uuc3RhcnRDb2x1bW4oKSA6IDA7Ci0gICAgICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNl
KHVubGlua2VkQ29kZS0+Y29kZUZlYXR1cmVzKCksIHVubGlua2VkQ29kZS0+aGFzQ2FwdHVyZWRW
YXJpYWJsZXMoKSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyB1bmxpbmtlZENvZGUtPmxpbmVDb3Vu
dCgpLCBzdGFydENvbHVtbik7CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlua2Vk
Q29kZS0+ZW5kQ29sdW1uKCk7CisgICAgICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHVubGlu
a2VkQ29kZS0+Y29kZUZlYXR1cmVzKCksIHVubGlua2VkQ29kZS0+aGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoKSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyB1bmxpbmtlZENvZGUtPmxpbmVDb3VudCgpLCBz
dGFydENvbHVtbiwgZW5kQ29sdW1uKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKICAg
ICB9CiAKQEAgLTk0LDEwICs5NSwxMSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNo
ZTo6Z2V0Q29kCiAgICAgICAgIG1fc291cmNlQ29kZS5yZW1vdmUoYWRkUmVzdWx0Lml0ZXJhdG9y
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNl
KHJvb3ROb2RlLT5mZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwg
cm9vdE5vZGUtPmxpbmVObygpLCByb290Tm9kZS0+bGFzdExpbmUoKSwgcm9vdE5vZGUtPnN0YXJ0
Q29sdW1uKCkpOworICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJl
cygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxpbmVObygp
LCByb290Tm9kZS0+bGFzdExpbmUoKSwgcm9vdE5vZGUtPnN0YXJ0Q29sdW1uKCksIHJvb3ROb2Rl
LT5lbmRDb2x1bW4oKSk7CiAKICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29k
ZSA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZ2bSwgZXhlY3V0YWJsZS0+ZXhlY3V0
YWJsZUluZm8oKSk7Ci0gICAgdW5saW5rZWRDb2RlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVh
dHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5l
Tm8oKSAtIHNvdXJjZS5maXJzdExpbmUoKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCkgLSByb290Tm9k
ZS0+bGluZU5vKCkpOworICAgIHVubGlua2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZl
YXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGlu
ZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5v
ZGUtPmxpbmVObygpLCByb290Tm9kZS0+ZW5kQ29sdW1uKCkpOworCiAgICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHZt
LCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9k
ZSkpKTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICByb290Tm9kZS0+
ZGVzdHJveURhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw4IEBA
IFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICBWTSogdm0gPSBz
Y29wZS0+dm0oKTsKIAogICAgIEFTU0VSVCh2bS0+aGVhcC5pc0RlZmVycmVkKCkpOwotICAgIAor
ICAgIEFTU0VSVChlbmRDb2x1bW4oKSAhPSBVSU5UX01BWCk7CisKICAgICBpZiAoY2xhc3NJbmZv
KCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBFdmFsRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKQEAgLTIwOSw3ICsyMTAsNyBAQCBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPQogICAgICAgICBleGVjdXRhYmxlLT5tX3Vu
bGlua2VkRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKAogICAgICAgICAgICAgKnZtLCBleGVjdXRh
YmxlLT5tX3NvdXJjZSwga2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsK
LSAgICByZWNvcmRQYXJzZShleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVy
ZXMoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFi
bGVzKCksIGxpbmVObygpLCBsYXN0TGluZSgpLCBzdGFydENvbHVtbigpKTsgCisgICAgcmVjb3Jk
UGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmZlYXR1cmVzKCksIGV4ZWN1
dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5l
Tm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1bW4oKSwgZW5kQ29sdW1uKCkpOyAKICAgICBpZiAo
IXVubGlua2VkQ29kZUJsb2NrKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IHZtLT50aHJvd0V4Y2Vw
dGlvbigKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLApAQCAtMzYyLDcg
KzM2Myw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiAKIAogY29u
c3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRnVuY3Rpb25FeGVj
dXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShGdW5jdGlvbkV4ZWN1dGFibGUpIH07CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUs
IHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbikKK0Z1bmN0aW9uRXhlY3V0
YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25l
ZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2bS5mdW5jdGlvbkV4ZWN1
dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJ
blN0cmljdENvbnRleHQoKSkKICAgICAsIG1fdW5saW5rZWRFeGVjdXRhYmxlKHZtLCB0aGlzLCB1
bmxpbmtlZEV4ZWN1dGFibGUpCiB7CkBAIC0zNzEsNiArMzcyLDcgQEAgRnVuY3Rpb25FeGVjdXRh
YmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVgogICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwog
ICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKICAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1
bW47CisgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiB9CiAKIHZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTU3MCw5ICs1NzIsMTAgQEAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OgogICAgIHVuc2lnbmVkIGZpcnN0TGlu
ZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkRnVuY3Rpb24tPmZpcnN0TGluZU9mZnNl
dCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCkgKyB1
bmxpbmtlZEZ1bmN0aW9uLT5zdGFydE9mZnNldCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
ID0gc291cmNlLnN0YXJ0Q29sdW1uKCk7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5r
ZWRGdW5jdGlvbi0+ZnVuY3Rpb25FbmRDb2x1bW4oKSArIDE7CiAgICAgdW5zaWduZWQgc291cmNl
TGVuZ3RoID0gdW5saW5rZWRGdW5jdGlvbi0+c291cmNlTGVuZ3RoKCk7CiAgICAgU291cmNlQ29k
ZSBmdW5jdGlvblNvdXJjZShzb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zm
c2V0ICsgc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICByZXR1cm4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZnVuY3Rpb25Tb3VyY2UsIHVu
bGlua2VkRnVuY3Rpb24sIGZpcnN0TGluZSwgdW5saW5rZWRGdW5jdGlvbi0+bGluZUNvdW50KCks
IHN0YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZnVuY3Rpb25Tb3VyY2UsIHVubGlua2VkRnVuY3Rpb24sIGZpcnN0TGluZSwgdW5s
aW5rZWRGdW5jdGlvbi0+bGluZUNvdW50KCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOwogfQog
CiBTdHJpbmcgRnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZygpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNTky
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDEwICs5MywxOCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIENvZGVC
bG9ja0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIAorICAgIGJv
b2wgaXNFdmFsRXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkudHlwZSgpID09IEV2YWxFeGVjdXRhYmxlVHlwZTsKKyAgICB9CiAgICAgYm9v
bCBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpID09IEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU7CiAgICAgfQor
ICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKKyAg
ICB9CiAKICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKICAgICB7CkBAIC0zNTUsNiAr
MzYzLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgLCBt
X2ZlYXR1cmVzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiAwKQogICAg
ICAgICAsIG1fbmV2ZXJJbmxpbmUoZmFsc2UpCisgICAgICAgICwgbV9lbmRDb2x1bW4oVUlOVF9N
QVgpCiAgICAgewogICAgIH0KIApAQCAtMzYzLDYgKzM3Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4
dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNl
KQorICAgICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgIHsKICAgICB9CiAKQEAgLTM3
OCw2ICszODgsNyBAQCBwdWJsaWM6CiAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIG1f
Zmlyc3RMaW5lOyB9CiAgICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGlu
ZTsgfQogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENv
bHVtbjsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29s
dW1uOyB9CiAKICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAm
IEV2YWxGZWF0dXJlOyB9CiAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9mZWF0dXJlcyAmIEFyZ3VtZW50c0ZlYXR1cmU7IH0KQEAgLTM5NSwxMyArNDA2LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgdm9pZCByZWNvcmRQYXJz
ZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBm
aXJzdExpbmUsIGludCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4pCisgICAgdm9pZCBy
ZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJs
ZXMsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbikKICAgICB7CiAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsK
ICAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOwog
ICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKICAgICAgICAgbV9sYXN0TGluZSA9IGxh
c3RMaW5lOwogICAgICAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CisgICAgICAgIEFT
U0VSVChlbmRDb2x1bW4gIT0gVUlOVF9NQVgpOworICAgICAgICBtX2VuZENvbHVtbiA9IGVuZENv
bHVtbjsKICAgICB9CiAKICAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVCbG9jayopOwpAQCAtNDM3
LDYgKzQ1MCw3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9maXJzdExpbmU7CiAgICAgaW50IG1f
bGFzdExpbmU7CiAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX2Vu
ZENvbHVtbjsKIH07CiAKIGNsYXNzIEV2YWxFeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1
dGFibGUgewpAQCAtNTQ5LDkgKzU2Myw5IEBAIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1
YmxpYyBTY3JpcHQKIHB1YmxpYzoKICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsK
IAotICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhl
Y3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQg
c3RhcnRDb2x1bW4pCisgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
dW5saW5rZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5l
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPih2bS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKHZt
LCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgc3RhcnRD
b2x1bW4pOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLmhlYXApKSBGdW5jdGlv
bkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGxh
c3RMaW5lLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKICAgICAgICAgZXhlY3V0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICB9CkBAIC02
MzksNyArNjUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGlu
ZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4pOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZp
cnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4pOwogCiAgICAgYm9vbCBpc0NvbXBpbGluZygpCiAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU5Mjc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMTQgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0cmFja2luZyBvZiBlbmRDb2x1bW4gZm9yIEV4
ZWN1dGFibGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI0MjQ1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3Q6IGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCisKKyAgICAg
ICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ieXRlY29kZTogQWRkZWQuCisgICAgICAgICogRm9yd2Fy
ZGluZ0hlYWRlcnMvYnl0ZWNvZGUvQ29kZUJsb2NrLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3I6OkdldENhbGxlckNvZGVCbG9ja0Z1bmN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yOjpjb2Rl
QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YSk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5pZGw6CisKIDIwMTMtMTEtMTQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgRklMVEVSX1RZUEVfQ0FTVFMgZm9yIGNoaWxkIGZp
bHRlciBjbGFzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1OTI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04MjQsNiAr
ODI0LDcgQEAgX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjRyZQogX19aTjdX
ZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VFbGVtZW50MjlzZXRJc1ByaW1hcnlTbmFwc2hvdHRlZFBs
dWdJbkViCiBfX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMxNHNoYXJlZEZlYXR1
cmVzRXYKIF9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDI2Y2FuU3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNFdgorX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MnZt
RXYKIF9fWk43V2ViQ29yZTIyU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjM0ZGlzcGF0Y2hMb2NhbFN0
b3JhZ2VFdmVudHNUb0ZyYW1lc0VSTlNfOVBhZ2VHcm91cEVSS04zV1RGNlZlY3RvcklOUzNfNlJl
ZlB0cklOU181RnJhbWVFRUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFUktOUzNfNlN0cmlu
Z0VTRV9TRV9TRV9QTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTIyVVJMV2l0aFVz
ZXJUeXBlZFN0cmluZ0VQOE5TU3RyaW5nUDVOU1VSTAogX19aTjdXZWJDb3JlMjJjb3VudGVyVmFs
dWVGb3JFbGVtZW50RVBOU183RWxlbWVudEUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0NvZGVC
bG9ja19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0NvZGVCbG9ja19oCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQ29kZUJsb2NrLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHJldmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOCBAQAogI2luY2x1ZGUg
IlR5cGVDb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCkBAIC0xNTgsNiArMTYw
LDEzIEBACiAjaW5jbHVkZSAiTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaCIKICNlbmRpZgog
Cit1c2luZyBKU0M6OkNvZGVCbG9jazsKK3VzaW5nIEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOwor
dXNpbmcgSlNDOjpKU0Z1bmN0aW9uOwordXNpbmcgSlNDOjpKU1ZhbHVlOwordXNpbmcgSlNDOjpT
Y3JpcHRFeGVjdXRhYmxlOwordXNpbmcgSlNDOjpTdGFja1Zpc2l0b3I7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEyNTIsNiArMTI2MSw4
NiBAQCB2b2lkIEludGVybmFsczo6ZW1pdEluc3BlY3RvckRpZENhbmNlbEZyCiAjZW5kaWYKIH0K
IAorY2xhc3MgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2Fs
bGVyQ29kZUJsb2NrRnVuY3RvcigpCisgICAgICAgIDogbV9pdGVyYXRpb25zKDApCisgICAgICAg
ICwgbV9jb2RlQmxvY2soMCkKKyAgICB7CisgICAgfQorCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0
dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICArK21f
aXRlcmF0aW9uczsKKyAgICAgICAgaWYgKG1faXRlcmF0aW9ucyA8IDIpCisgICAgICAgICAgICBy
ZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKworICAgICAgICBtX2NvZGVCbG9jayA9IHZp
c2l0b3ItPmNvZGVCbG9jaygpOworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwor
ICAgIH0KKworICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9pdGVyYXRpb25zOworICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7Cit9OworCitTdHJpbmcgSW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YShT
Y3JpcHRWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNKiB2bSA9IGNvbnRleHREb2N1bWVudCgp
LT52bSgpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdm0tPnRvcENhbGxGcmFtZTsKKyAg
ICBKU0M6OkpTVmFsdWUgY29kZSA9IHZhbHVlLmpzVmFsdWUoKTsKKyAgICBTY3JpcHRFeGVjdXRh
YmxlKiBleGVjdXRhYmxlOworCisgICAgaWYgKCFjb2RlIHx8IGNvZGUuaXNOdWxsKCkgfHwgY29k
ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgaXRl
cjsKKyAgICAgICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBpdGVyLmNvZGVCbG9jaygpOworICAgICAgICBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsgCisKKyAgICB9IGVsc2UgaWYgKGNvZGUuaXNGdW5jdGlvbigp
KSB7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmNPYmogPSBKU0M6OmpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY29kZS50b09iamVjdChleGVjKSk7CisgICAgICAgIGV4ZWN1dGFibGUgPSBmdW5jT2JqLT5q
c0V4ZWN1dGFibGUoKTsKKworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
KyAgICB1bnNpZ25lZCBzdGFydExpbmUgPSBleGVjdXRhYmxlLT5saW5lTm8oKTsKKyAgICB1bnNp
Z25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnN0YXJ0Q29sdW1uKCk7CisgICAgdW5zaWdu
ZWQgZW5kTGluZSA9IGV4ZWN1dGFibGUtPmxhc3RMaW5lKCk7CisgICAgdW5zaWduZWQgZW5kQ29s
dW1uID0gZXhlY3V0YWJsZS0+ZW5kQ29sdW1uKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKKworICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CisgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBTdHJpbmcgaW5mZXJy
ZWROYW1lID0gZnVuY0V4ZWN1dGFibGUtPmluZmVycmVkTmFtZSgpLnN0cmluZygpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCJmdW5jdGlvbiBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGlu
ZmVycmVkTmFtZSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzRXZhbEV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoImV2YWwiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoZXhlY3V0YWJsZS0+aXNQcm9ncmFtRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoInByb2dyYW0iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBl
bmQoIiB7ICIpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhcnRMaW5lKTsKKyAgICByZXN1
bHQuYXBwZW5kKCI6Iik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihzdGFydENvbHVtbik7Cisg
ICAgcmVzdWx0LmFwcGVuZCgiIC0gIik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRMaW5l
KTsKKyAgICByZXN1bHQuYXBwZW5kKCI6Iik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRD
b2x1bW4pOworICAgIHJlc3VsdC5hcHBlbmQoIiB9Iik7CisKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Cit9CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IFN0
cmluZyYgZXZlbnRUeXBlLCBib29sIGNoYXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgZGlzY2hhcmdpbmdUaW1lLCBkb3VibGUgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAg
LTE4MCw2ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbWl0SW5zcGVjdG9yRGlkQmVnaW5G
cmFtZSgpOwogICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZENhbmNlbEZyYW1lKCk7CiAKKyAgICBT
dHJpbmcgcGFyc2VyTWV0YURhdGEoU2NyaXB0VmFsdWUgPSBTY3JpcHRWYWx1ZSgpKTsKKwogICAg
IGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBib29sIGhhc0dyYW1tYXJNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhhc0F1dG9jb3JyZWN0ZWRNYXJrZXIoaW50IGZyb20s
IGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHJldmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw5IEBACiAgICAgdm9p
ZCBlbWl0SW5zcGVjdG9yRGlkQmVnaW5GcmFtZSgpOwogICAgIHZvaWQgZW1pdEluc3BlY3RvckRp
ZENhbmNlbEZyYW1lKCk7CiAKKyAgICAvLyBDYWxsaW5nIHNjcmlwdEJvdW5kc0ZvcigpIHdpdGgg
bnVsbCBnZXRzIHRoZSBib3VuZHMgZm9yIHRoZSBzY3JpcHQgb2YgdGhlIGN1cnJlbnQgc2NvcGUu
CisgICAgRE9NU3RyaW5nIHBhcnNlck1ldGFEYXRhKG9wdGlvbmFsIGFueSBmdW5jT3JOdWxsKTsK
KwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzU3BlbGxpbmdNYXJrZXIobG9uZyBm
cm9tLCBsb25nIGxlbmd0aCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBoYXNHcmFt
bWFyTWFya2VyKGxvbmcgZnJvbSwgbG9uZyBsZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25d
IGJvb2xlYW4gaGFzQXV0b2NvcnJlY3RlZE1hcmtlcihsb25nIGZyb20sIGxvbmcgbGVuZ3RoKTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1OTI3OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTExLTE0ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBF
eGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNDI0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3NjcmlwdC1zdGFydC1lbmQtbG9j
YXRpb25zLmpzOiBBZGRlZC4KKwogMjAxMy0xMS0xMyAgVmljdG9yIENvc3RhbiAgPGNvc3RhbkBn
bWFpbC5jb20+CiAKICAgICAgICAgQmxvYiBjb25zdHJ1Y3RvciBhY2NlcHRzIGEgc2VxdWVuY2Ug
KGFycmF5LWxpa2Ugb2JqZWN0KSBhcyBmaXJzdCBhcmcuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9k
b20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1s
b2NhdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgzIEBACitw
cm9ncmFtIHsgNzo5IC0gMTg6MSB9Citwcm9ncmFtIHsgMToxIC0gMzQ4OjEgfQorZnVuY3Rpb24g
ImYwIiB7IDE6ODYgLSAxOjIzNyB9CitmdW5jdGlvbiAiZjBhIiB7IDE6MTEzIC0gMToyMjggfQor
ZnVuY3Rpb24gImYwYiIgeyAxOjE0MSAtIDE6MjE5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1
bmN0aW9uICJ4MCIgeyAxOjI2OSAtIDE6NDQ3IH0KK2Z1bmN0aW9uICJ4MGEiIHsgMTozMDEgLSAx
OjQzNyB9CitmdW5jdGlvbiAieDBiIiB7IDE6MzM1IC0gMTo0MjcgfQorZXZhbCB7IDE6MSAtIDE6
NTYgfQorZnVuY3Rpb24gImYxIiB7IDk6MjIgLSA5OjExMyB9CitldmFsIHsgMToxIC0gMTo1NiB9
CitmdW5jdGlvbiAiZjIiIHsgMTI6MjIgLSAxNjo1IH0KK2Z1bmN0aW9uICJmMmEiIHsgMTQ6MjQg
LSAxNDoxMTYgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImYzIiB7IDE5OjIyIC0g
MzE6NSB9CitmdW5jdGlvbiAiZjNhIiB7IDIxOjI0IC0gMjk6OSB9CitmdW5jdGlvbiAiZjNiIiB7
IDIzOjI4IC0gMjc6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImY0IiB7IDM0
OjIyIC0gMzQ6NzEgfQorZnVuY3Rpb24gImY0YSIgeyAzNDo0OSAtIDM0OjUwIH0KK2Z1bmN0aW9u
ICJmNSIgeyAzNjoyMiAtIDM2OjE1MSB9CitmdW5jdGlvbiAiZjVhIiB7IDM2OjQ5IC0gMzY6MTQx
IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmNiIgeyAzODoyMiAtIDM4OjE4OSB9
CitmdW5jdGlvbiAiZjZhIiB7IDM4OjQ5IC0gMzg6MTc5IH0KK2Z1bmN0aW9uICJmNmIiIHsgMzg6
NzcgLSAzODoxNjkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpMSIgeyA0Mzoy
NyAtIDQzOjExOSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZmkyIiB7IDQ2OjI3
IC0gNTA6OSB9CitmdW5jdGlvbiAiZmkyYSIgeyA0ODoyOSAtIDQ4OjEyMiB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitmdW5jdGlvbiAiZmkzIiB7IDUzOjI3IC0gNjU6OSB9CitmdW5jdGlvbiAiZmkz
YSIgeyA1NToyOSAtIDYzOjEzIH0KK2Z1bmN0aW9uICJmaTNiIiB7IDU3OjMzIC0gNjE6MTcgfQor
ZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpNCIgeyA2ODoyNyAtIDY4OjgwIH0KK2Z1
bmN0aW9uICJmaTRhIiB7IDY4OjU2IC0gNjg6NTcgfQorZnVuY3Rpb24gImZpNSIgeyA3MDoyNyAt
IDcwOjE2MCB9CitmdW5jdGlvbiAiZmk1YSIgeyA3MDo1NiAtIDcwOjE0OSB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitmdW5jdGlvbiAiZmk2IiB7IDcyOjI3IC0gNzI6MjAxIH0KK2Z1bmN0aW9uICJm
aTZhIiB7IDcyOjU2IC0gNzI6MTkwIH0KK2Z1bmN0aW9uICJmaTZiIiB7IDcyOjg2IC0gNzI6MTc5
IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJ4MSIgeyA3NzoyOCAtIDc3OjExOSB9
CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAieDIiIHsgODA6MjggLSA4NDo1IH0KK2Z1
bmN0aW9uICJ4MmEiIHsgODI6MzAgLSA4MjoxMjIgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVu
Y3Rpb24gIngzIiB7IDg3OjI4IC0gOTk6NSB9CitmdW5jdGlvbiAieDNhIiB7IDg5OjMwIC0gOTc6
OSB9CitmdW5jdGlvbiAieDNiIiB7IDkxOjM0IC0gOTU6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYg
fQorZnVuY3Rpb24gIng0IiB7IDEwMjoyOCAtIDEwMjo4MyB9CitmdW5jdGlvbiAieDRhIiB7IDEw
Mjo2MSAtIDEwMjo2MiB9CitmdW5jdGlvbiAieDUiIHsgMTA0OjI4IC0gMTA0OjE2MyB9CitmdW5j
dGlvbiAieDVhIiB7IDEwNDo2MSAtIDEwNDoxNTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVu
Y3Rpb24gIng2IiB7IDEwNjoyOCAtIDEwNjoyMDcgfQorZnVuY3Rpb24gIng2YSIgeyAxMDY6NjEg
LSAxMDY6MTk3IH0KK2Z1bmN0aW9uICJ4NmIiIHsgMTA2Ojk1IC0gMTA2OjE4NyB9CitldmFsIHsg
MToxIC0gMTo1NiB9CitmdW5jdGlvbiAieGkxIiB7IDExMTozMyAtIDExMToxMjUgfQorZXZhbCB7
IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gInhpMiIgeyAxMTQ6MzMgLSAxMTg6OSB9CitmdW5jdGlv
biAieGkyYSIgeyAxMTY6MzUgLSAxMTY6MTI4IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0
aW9uICJ4aTMiIHsgMTIxOjMzIC0gMTMzOjkgfQorZnVuY3Rpb24gInhpM2EiIHsgMTIzOjM1IC0g
MTMxOjEzIH0KK2Z1bmN0aW9uICJ4aTNiIiB7IDEyNTozOSAtIDEyOToxNyB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitmdW5jdGlvbiAieGk0IiB7IDEzNjozMyAtIDEzNjo5MiB9CitmdW5jdGlvbiAi
eGk0YSIgeyAxMzY6NjggLSAxMzY6NjkgfQorZnVuY3Rpb24gInhpNSIgeyAxMzg6MzMgLSAxMzg6
MTcyIH0KK2Z1bmN0aW9uICJ4aTVhIiB7IDEzODo2OCAtIDEzODoxNjEgfQorZXZhbCB7IDE6MSAt
IDE6NTYgfQorZnVuY3Rpb24gInhpNiIgeyAxNDA6MzMgLSAxNDA6MjE5IH0KK2Z1bmN0aW9uICJ4
aTZhIiB7IDE0MDo2OCAtIDE0MDoyMDggfQorZnVuY3Rpb24gInhpNmIiIHsgMTQwOjEwNCAtIDE0
MDoxOTcgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIiIgeyAxNDY6NTggLSAxNTE6
NSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAi
Z2YxIiB7IDE2MDoxOSAtIDE2MDoxMTEgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24g
ImdmMiIgeyAxNjM6MTkgLSAxNjc6MSB9CitmdW5jdGlvbiAiZ2YyYSIgeyAxNjU6MjEgLSAxNjU6
MTE0IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJnZjMiIHsgMTcwOjE5IC0gMTgy
OjEgfQorZnVuY3Rpb24gImdmM2EiIHsgMTcyOjIxIC0gMTgwOjUgfQorZnVuY3Rpb24gImdmM2Ii
IHsgMTc0OjI1IC0gMTc4OjkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImdmNCIg
eyAxODU6MTkgLSAxODU6NzIgfQorZnVuY3Rpb24gImdmNGEiIHsgMTg1OjQ4IC0gMTg1OjQ5IH0K
K2Z1bmN0aW9uICJnZjUiIHsgMTg3OjE5IC0gMTg3OjE1MiB9CitmdW5jdGlvbiAiZ2Y1YSIgeyAx
ODc6NDggLSAxODc6MTQxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJnZjYiIHsg
MTg5OjE5IC0gMTg5OjE5MyB9CitmdW5jdGlvbiAiZ2Y2YSIgeyAxODk6NDggLSAxODk6MTgyIH0K
K2Z1bmN0aW9uICJnZjZiIiB7IDE4OTo3OCAtIDE4OToxNzEgfQorZXZhbCB7IDE6MSAtIDE6NTYg
fQorZnVuY3Rpb24gImdmaTEiIHsgMTk0OjI0IC0gMTk0OjExNyB9CitldmFsIHsgMToxIC0gMTo1
NiB9CitmdW5jdGlvbiAiZ2ZpMiIgeyAxOTc6MjQgLSAyMDE6NSB9CitmdW5jdGlvbiAiZ2ZpMmEi
IHsgMTk5OjI2IC0gMTk5OjEyMCB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ2Zp
MyIgeyAyMDQ6MjQgLSAyMTY6NSB9CitmdW5jdGlvbiAiZ2ZpM2EiIHsgMjA2OjI2IC0gMjE0Ojkg
fQorZnVuY3Rpb24gImdmaTNiIiB7IDIwODozMCAtIDIxMjoxMyB9CitldmFsIHsgMToxIC0gMTo1
NiB9CitmdW5jdGlvbiAiZ2ZpNCIgeyAyMTk6MjQgLSAyMTk6ODEgfQorZnVuY3Rpb24gImdmaTRh
IiB7IDIxOTo1NSAtIDIxOTo1NiB9CitmdW5jdGlvbiAiZ2ZpNSIgeyAyMjE6MjQgLSAyMjE6MTYx
IH0KK2Z1bmN0aW9uICJnZmk1YSIgeyAyMjE6NTUgLSAyMjE6MTQ5IH0KK2V2YWwgeyAxOjEgLSAx
OjU2IH0KK2Z1bmN0aW9uICJnZmk2IiB7IDIyMzoyNCAtIDIyMzoyMDUgfQorZnVuY3Rpb24gImdm
aTZhIiB7IDIyMzo1NSAtIDIyMzoxOTMgfQorZnVuY3Rpb24gImdmaTZiIiB7IDIyMzo4NyAtIDIy
MzoxODEgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4MSIgeyAyMjg6MjUgLSAy
Mjg6MTE3IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneDIiIHsgMjMxOjI1IC0g
MjM1OjEgfQorZnVuY3Rpb24gImd4MmEiIHsgMjMzOjI3IC0gMjMzOjEyMCB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitmdW5jdGlvbiAiZ3gzIiB7IDIzODoyNSAtIDI1MDoxIH0KK2Z1bmN0aW9uICJn
eDNhIiB7IDI0MDoyNyAtIDI0ODo1IH0KK2Z1bmN0aW9uICJneDNiIiB7IDI0MjozMSAtIDI0Njo5
IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneDQiIHsgMjUzOjI1IC0gMjUzOjg0
IH0KK2Z1bmN0aW9uICJneDRhIiB7IDI1Mzo2MCAtIDI1Mzo2MSB9CitmdW5jdGlvbiAiZ3g1IiB7
IDI1NToyNSAtIDI1NToxNjQgfQorZnVuY3Rpb24gImd4NWEiIHsgMjU1OjYwIC0gMjU1OjE1MyB9
CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3g2IiB7IDI1NzoyNSAtIDI1NzoyMTEg
fQorZnVuY3Rpb24gImd4NmEiIHsgMjU3OjYwIC0gMjU3OjIwMCB9CitmdW5jdGlvbiAiZ3g2YiIg
eyAyNTc6OTYgLSAyNTc6MTg5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneGkx
IiB7IDI2MjozMCAtIDI2MjoxMjMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4
aTIiIHsgMjY1OjMwIC0gMjY5OjUgfQorZnVuY3Rpb24gImd4aTJhIiB7IDI2NzozMiAtIDI2Nzox
MjYgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4aTMiIHsgMjcyOjMwIC0gMjg0
OjUgfQorZnVuY3Rpb24gImd4aTNhIiB7IDI3NDozMiAtIDI4Mjo5IH0KK2Z1bmN0aW9uICJneGkz
YiIgeyAyNzY6MzYgLSAyODA6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4
aTQiIHsgMjg3OjMwIC0gMjg3OjkzIH0KK2Z1bmN0aW9uICJneGk0YSIgeyAyODc6NjcgLSAyODc6
NjggfQorZnVuY3Rpb24gImd4aTUiIHsgMjg5OjMwIC0gMjg5OjE3MyB9CitmdW5jdGlvbiAiZ3hp
NWEiIHsgMjg5OjY3IC0gMjg5OjE2MSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAi
Z3hpNiIgeyAyOTE6MzAgLSAyOTE6MjIzIH0KK2Z1bmN0aW9uICJneGk2YSIgeyAyOTE6NjcgLSAy
OTE6MjExIH0KK2Z1bmN0aW9uICJneGk2YiIgeyAyOTE6MTA1IC0gMjkxOjE5OSB9CitldmFsIHsg
MToxIC0gMTo1NiB9CitmdW5jdGlvbiAiIiB7IDI5ODo1NiAtIDMwMzoxIH0KK2V2YWwgeyAxOjEg
LSAxOjU2IH0KK2V2YWwgeyAxOjEgLSAxNjo3IH0KK2Z1bmN0aW9uICJlZjMiIHsgMzoyMCAtIDE0
OjUgfQorZnVuY3Rpb24gImVmM2EiIHsgNToyNSAtIDEyOjkgfQorZnVuY3Rpb24gImVmM2IiIHsg
NzoyOSAtIDEwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2V2YWwgeyAxOjEgLSAxOjIyNSB9
CitmdW5jdGlvbiAiZXgzIiB7IDE6NTkgLSAxOjIxNyB9CitmdW5jdGlvbiAiZXgzYSIgeyAxOjg4
IC0gMToyMDcgfQorZnVuY3Rpb24gImV4M2IiIHsgMToxMTggLSAxOjE5NyB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitldmFsIHsgMToxIC0gMTc6OCB9CitmdW5jdGlvbiAiZWZpMyIgeyA0OjIxIC0g
MTU6NSB9CitmdW5jdGlvbiAiZWZpM2EiIHsgNjoyNiAtIDEzOjkgfQorZnVuY3Rpb24gImVmaTNi
IiB7IDg6MzAgLSAxMToxMyB9CitldmFsIHsgMToxIC0gMTo1NiB9CitldmFsIHsgMToxIC0gMToy
MzQgfQorZnVuY3Rpb24gImV4aTMiIHsgMTo2MCAtIDE6MjI1IH0KK2Z1bmN0aW9uICJleGkzYSIg
eyAxOjkxIC0gMToyMTQgfQorZnVuY3Rpb24gImV4aTNiIiB7IDE6MTIzIC0gMToyMDMgfQorZXZh
bCB7IDE6MSAtIDE6NTYgfQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxv
Y2F0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3Rh
cnQtZW5kLWxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvZG9t
L3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorCisgICAgLy8gQ29udmVu
aWVuY2UgZnVuY3Rpb24gc28gdGhhdCBzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2Nh
dGlvbnMuanMKKyAgICAvLyBjYW4gYmUgbGVzcyB2ZXJib3NlIGZvciBjYXNlcyB3aGVyZSB3ZSBo
YXZlIGEgZnVuY3Rpb24gd2hvc2UgYm91bmRzIHdlCisgICAgLy8gd2FudCB0byBkdW1wLgorICAg
IGZ1bmN0aW9uIGR1bXAoZnVuYykgeworICAgICAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBh
cnNlck1ldGFEYXRhKGZ1bmMpKTsKKyAgICB9CisKKyAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnBhcnNlck1ldGFEYXRhKCkpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0
LWVuZC1sb2NhdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3Njcmlw
dC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDcgQEAKK3ZhciB2YWx1ZSA9IDEwOyB2YXIg
c3VtID0gMTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsgZnVuY3Rp
b24gZjAoKSB7IGR1bXAoZjApOyBmdW5jdGlvbiBmMGEoKSB7IGR1bXAoZjBhKTsgZnVuY3Rpb24g
ZjBiKCkgeyBkdW1wKGYwYik7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfSBmMGIoKTsgfSBmMGEoKTsgfSBmMCgpOyAgdmFy
IHgwID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoeDApO3ZhciB4MGEgPSBmdW5jdGlvbigpIHsgZHVt
cCh4MGEpOyB2YXIgeDBiID0gZnVuY3Rpb24oKSB7IGR1bXAoeDBiKTsgc3VtICs9IHZhbHVlOyBl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7Jyk7IH07IHgwYigpOyB9OyB4MGEoKTsgfTsgeDAoKTsKKworZnVuY3Rpb24gZ2xvYmFsRnVu
YygpIHsKKyAgICB2YXIgYXJyYXkgPSBbMl07CisgICAgdmFyIHN1bSA9IDA7CisgICAgdmFyIHZh
bHVlID0gNTsKKworICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgor
ICAgIGZ1bmN0aW9uIGYxKGtleSkgeyBkdW1wKGYxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0K
KyAgICBmMSgpOworCisgICAgZnVuY3Rpb24gZjIoa2V5KSB7CisgICAgICAgIGR1bXAoZjIpOwor
ICAgICAgICBmdW5jdGlvbiBmMmEoKSB7IGR1bXAoZjJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdz
dW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7
IH0KKyAgICAgICAgZjJhKCk7CisgICAgfQorICAgIGYyKCk7CisKKyAgICBmdW5jdGlvbiBmMyhr
ZXkpIHsKKyAgICAgICAgZHVtcChmMyk7CisgICAgICAgIGZ1bmN0aW9uIGYzYSgpIHsKKyAgICAg
ICAgICAgIGR1bXAoZjNhKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGYzYigpIHsKKyAgICAgICAg
ICAgICAgICBkdW1wKGYzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0g
dmFsdWU7CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZjNiKCk7CisgICAgICAgIH0KKyAgICAgICAgZjNhKCk7CisgICAgfQorICAgIGYzKCk7CisK
KyAgICBmdW5jdGlvbiBmNChrZXkpIHsgZHVtcChmNCk7IGZ1bmN0aW9uIGY0YSgpIHt9OyBkdW1w
KGY0YSk7IGY0YSgpOyB9CisgICAgZjQoKTsKKyAgICBmdW5jdGlvbiBmNShrZXkpIHsgZHVtcChm
NSk7IGZ1bmN0aW9uIGY1YSgpIHsgZHVtcChmNWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsg
ZjVhKCk7IH0KKyAgICBmNSgpOworICAgIGZ1bmN0aW9uIGY2KGtleSkgeyBkdW1wKGY2KTsgZnVu
Y3Rpb24gZjZhKCkgeyBkdW1wKGY2YSk7IGZ1bmN0aW9uIGY2YigpIHsgZHVtcChmNmIpOyBzdW0g
Kz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJz
ZXJNZXRhRGF0YSgpKTsnKTsgfTsgZjZiKCk7IH07IGY2YSgpOyB9CisgICAgZjYoKTsKKworICAg
IC8vIEluZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHsK
KyAgICAgICAgZnVuY3Rpb24gZmkxKGtleSkgeyBkdW1wKGZpMSk7IHN1bSArPSB2YWx1ZTsgZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkp
OycpOyB9CisgICAgICAgIGZpMSgpOworCisgICAgICAgIGZ1bmN0aW9uIGZpMihrZXkpIHsKKyAg
ICAgICAgICAgIGR1bXAoZmkyKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZpMmEoKSB7IGR1bXAo
ZmkyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAgICAgICBmaTJhKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZmkyKCk7CisKKyAgICAgICAgZnVuY3Rpb24gZmkzKGtleSkgeworICAg
ICAgICAgICAgZHVtcChmaTMpOworICAgICAgICAgICAgZnVuY3Rpb24gZmkzYSgpIHsKKyAgICAg
ICAgICAgICAgICBkdW1wKGZpM2EpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpM2IoKSB7
CisgICAgICAgICAgICAgICAgICAgIGR1bXAoZmkzYik7CisgICAgICAgICAgICAgICAgICAgIHN1
bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpM2IoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpM2EoKTsKKyAgICAgICAgfQorICAgICAgICBmaTMoKTsKKworICAgICAg
ICBmdW5jdGlvbiBmaTQoa2V5KSB7IGR1bXAoZmk0KTsgZnVuY3Rpb24gZmk0YSgpIHt9OyBkdW1w
KGZpNGEpOyBmaTRhKCk7IH0KKyAgICAgICAgZmk0KCk7CisgICAgICAgIGZ1bmN0aW9uIGZpNShr
ZXkpIHsgZHVtcChmaTUpOyBmdW5jdGlvbiBmaTVhKCkgeyBkdW1wKGZpNWEpOyBzdW0gKz0gdmFs
dWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRh
RGF0YSgpKTsnKTsgfTsgZmk1YSgpOyB9CisgICAgICAgIGZpNSgpOworICAgICAgICBmdW5jdGlv
biBmaTYoa2V5KSB7IGR1bXAoZmk2KTsgZnVuY3Rpb24gZmk2YSgpIHsgZHVtcChmaTZhKTsgZnVu
Y3Rpb24gZmk2YigpIHsgZHVtcChmaTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGZpNmIo
KTsgfTsgZmk2YSgpOyB9CisgICAgICAgIGZpNigpOworICAgIH0KKworICAgIC8vIEZ1bmN0aW9u
IGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246CisgICAgdmFyIHgxID0gZnVuY3Rpb24oa2V5KSB7
IGR1bXAoeDEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgIHgxKCk7CisKKyAgICB2YXIg
eDIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZHVtcCh4Mik7CisgICAgICAgIHZhciB4MmEg
PSBmdW5jdGlvbigpIHsgZHVtcCh4MmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1
ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgICAg
ICB4MmEoKTsKKyAgICB9CisgICAgeDIoKTsKKworICAgIHZhciB4MyA9IGZ1bmN0aW9uKGtleSkg
eworICAgICAgICBkdW1wKHgzKTsKKyAgICAgICAgdmFyIHgzYSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgZHVtcCh4M2EpOworICAgICAgICAgICAgdmFyIHgzYiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGR1bXAoeDNiKTsKKyAgICAgICAgICAgICAgICBzdW0gKz0gdmFsdWU7
CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeDNi
KCk7CisgICAgICAgIH0KKyAgICAgICAgeDNhKCk7CisgICAgfQorICAgIHgzKCk7CisKKyAgICB2
YXIgeDQgPSBmdW5jdGlvbihrZXkpIHsgZHVtcCh4NCk7IHZhciB4NGEgPSBmdW5jdGlvbigpIHt9
OyBkdW1wKHg0YSk7IHg0YSgpOyB9CisgICAgeDQoKTsKKyAgICB2YXIgeDUgPSBmdW5jdGlvbihr
ZXkpIHsgZHVtcCh4NSk7IHZhciB4NWEgPSBmdW5jdGlvbigpIHsgZHVtcCh4NWEpOyBzdW0gKz0g
dmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJN
ZXRhRGF0YSgpKTsnKTsgfTsgeDVhKCk7IH0KKyAgICB4NSgpOworICAgIHZhciB4NiA9IGZ1bmN0
aW9uKGtleSkgeyBkdW1wKHg2KTsgdmFyIHg2YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKHg2YSk7IHZh
ciB4NmIgPSBmdW5jdGlvbigpIHsgZHVtcCh4NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsg
eDZiKCk7IH07IHg2YSgpOyB9CisgICAgeDYoKTsKKworICAgIC8vIEluZGVudGVkIGZ1bmN0aW9u
IGV4cHJlc3Npb25zIGluIGEgZnVuY3Rpb246CisgICAgeworICAgICAgICB2YXIgeGkxID0gZnVu
Y3Rpb24oa2V5KSB7IGR1bXAoeGkxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7
IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICAgICAg
eGkxKCk7CisKKyAgICAgICAgdmFyIHhpMiA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAg
ZHVtcCh4aTIpOworICAgICAgICAgICAgdmFyIHhpMmEgPSBmdW5jdGlvbigpIHsgZHVtcCh4aTJh
KTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5h
bHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICAgICAgICAgIHhpMmEoKTsKKyAgICAgICAg
fQorICAgICAgICB4aTIoKTsKKworICAgICAgICB2YXIgeGkzID0gZnVuY3Rpb24oa2V5KSB7Cisg
ICAgICAgICAgICBkdW1wKHhpMyk7CisgICAgICAgICAgICB2YXIgeGkzYSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGR1bXAoeGkzYSk7CisgICAgICAgICAgICAgICAgdmFyIHhpM2Ig
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgZHVtcCh4aTNiKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRh
RGF0YSgpKTsnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeGkzYigpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgeGkzYSgpOworICAgICAgICB9CisgICAgICAgIHhp
MygpOworCisgICAgICAgIHZhciB4aTQgPSBmdW5jdGlvbihrZXkpIHsgZHVtcCh4aTQpOyB2YXIg
eGk0YSA9IGZ1bmN0aW9uKCkge307IGR1bXAoeGk0YSk7IHhpNGEoKTsgfQorICAgICAgICB4aTQo
KTsKKyAgICAgICAgdmFyIHhpNSA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKHhpNSk7IHZhciB4aTVh
ID0gZnVuY3Rpb24oKSB7IGR1bXAoeGk1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyB4aTVh
KCk7IH0KKyAgICAgICAgeGk1KCk7CisgICAgICAgIHZhciB4aTYgPSBmdW5jdGlvbihrZXkpIHsg
ZHVtcCh4aTYpOyB2YXIgeGk2YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKHhpNmEpOyB2YXIgeGk2YiA9
IGZ1bmN0aW9uKCkgeyBkdW1wKHhpNmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1
ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgeGk2Yigp
OyB9OyB4aTZhKCk7IH0KKyAgICAgICAgeGk2KCk7CisgICAgfQorCisgICAgLy8gQW5ub3ltb3Vz
IGZ1bmN0aW9uIGluIGEgZnVuY3Rpb246CisgICAgdmFyIGZvckVhY2ggPSBbIF0uZm9yRWFjaDsK
KyAgICB2YXIgYm91bmRGb3JFYWNoID0gZm9yRWFjaC5iaW5kKGFycmF5LCBmdW5jdGlvbihrZXkp
IHsKKyAgICAgICAgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsKKyAg
ICAgICAgc3VtICs9IHZhbHVlOworICAgICAgICBzdW0gKj0gdmFsdWU7CisgICAgICAgIGV2YWwo
J3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsn
KTsKKyAgICB9KTsKKyAgICBib3VuZEZvckVhY2goKTsKKworfQorZ2xvYmFsRnVuYygpOworCitl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7Jyk7CisKKy8vIEdsb2JhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnM6CitmdW5jdGlvbiBnZjEo
a2V5KSB7IGR1bXAoZ2YxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KK2dmMSgpOworCitmdW5j
dGlvbiBnZjIoa2V5KSB7CisgICAgZHVtcChnZjIpOworICAgIGZ1bmN0aW9uIGdmMmEoKSB7IGR1
bXAoZ2YyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ2YyYSgpOworfQorZ2YyKCk7
CisKK2Z1bmN0aW9uIGdmMyhrZXkpIHsKKyAgICBkdW1wKGdmMyk7CisgICAgZnVuY3Rpb24gZ2Yz
YSgpIHsKKyAgICAgICAgZHVtcChnZjNhKTsKKyAgICAgICAgZnVuY3Rpb24gZ2YzYigpIHsKKyAg
ICAgICAgICAgIGR1bXAoZ2YzYik7CisgICAgICAgICAgICBzdW0gKz0gdmFsdWU7IHN1bSAqPSB2
YWx1ZTsKKyAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgfQorICAgICAgICBnZjNiKCk7Cisg
ICAgfQorICAgIGdmM2EoKTsKK30KK2dmMygpOworCitmdW5jdGlvbiBnZjQoa2V5KSB7IGR1bXAo
Z2Y0KTsgZnVuY3Rpb24gZ2Y0YSgpIHt9OyBkdW1wKGdmNGEpOyBnZjRhKCk7IH0KK2dmNCgpOwor
ZnVuY3Rpb24gZ2Y1KGtleSkgeyBkdW1wKGdmNSk7IGZ1bmN0aW9uIGdmNWEoKSB7IGR1bXAoZ2Y1
YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBnZjVhKCk7IH0KK2dmNSgpOworZnVuY3Rpb24g
Z2Y2KGtleSkgeyBkdW1wKGdmNik7IGZ1bmN0aW9uIGdmNmEoKSB7IGR1bXAoZ2Y2YSk7IGZ1bmN0
aW9uIGdmNmIoKSB7IGR1bXAoZ2Y2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBnZjZiKCk7
IH07IGdmNmEoKTsgfQorZ2Y2KCk7CisKKy8vIEluZGVudGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
cyBpbiBhIGZ1bmN0aW9uOgoreworICAgIGZ1bmN0aW9uIGdmaTEoa2V5KSB7IGR1bXAoZ2ZpMSk7
IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ2ZpMSgpOworCisgICAgZnVuY3Rpb24gZ2Zp
MihrZXkpIHsKKyAgICAgICAgZHVtcChnZmkyKTsKKyAgICAgICAgZnVuY3Rpb24gZ2ZpMmEoKSB7
IGR1bXAoZ2ZpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgICAgICBnZmkyYSgpOwor
ICAgIH0KKyAgICBnZmkyKCk7CisKKyAgICBmdW5jdGlvbiBnZmkzKGtleSkgeworICAgICAgICBk
dW1wKGdmaTMpOworICAgICAgICBmdW5jdGlvbiBnZmkzYSgpIHsKKyAgICAgICAgICAgIGR1bXAo
Z2ZpM2EpOworICAgICAgICAgICAgZnVuY3Rpb24gZ2ZpM2IoKSB7CisgICAgICAgICAgICAgICAg
ZHVtcChnZmkzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7
CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2Zp
M2IoKTsKKyAgICAgICAgfQorICAgICAgICBnZmkzYSgpOworICAgIH0KKyAgICBnZmkzKCk7CisK
KyAgICBmdW5jdGlvbiBnZmk0KGtleSkgeyBkdW1wKGdmaTQpOyBmdW5jdGlvbiBnZmk0YSgpIHt9
OyBkdW1wKGdmaTRhKTsgZ2ZpNGEoKTsgfQorICAgIGdmaTQoKTsKKyAgICBmdW5jdGlvbiBnZmk1
KGtleSkgeyBkdW1wKGdmaTUpOyBmdW5jdGlvbiBnZmk1YSgpIHsgZHVtcChnZmk1YSk7IHN1bSAr
PSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNl
ck1ldGFEYXRhKCkpOycpOyB9OyBnZmk1YSgpOyB9CisgICAgZ2ZpNSgpOworICAgIGZ1bmN0aW9u
IGdmaTYoa2V5KSB7IGR1bXAoZ2ZpNik7IGZ1bmN0aW9uIGdmaTZhKCkgeyBkdW1wKGdmaTZhKTsg
ZnVuY3Rpb24gZ2ZpNmIoKSB7IGR1bXAoZ2ZpNmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsg
Z2ZpNmIoKTsgfTsgZ2ZpNmEoKTsgfQorICAgIGdmaTYoKTsKK30KKworLy8gRnVuY3Rpb24gZXhw
cmVzc2lvbnMgaW4gYSBmdW5jdGlvbjoKK3ZhciBneDEgPSBmdW5jdGlvbihrZXkpIHsgZHVtcChn
eDEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorZ3gxKCk7CisKK3ZhciBneDIgPSBmdW5jdGlv
bihrZXkpIHsKKyAgICBkdW1wKGd4Mik7CisgICAgdmFyIGd4MmEgPSBmdW5jdGlvbigpIHsgZHVt
cChneDJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICBneDJhKCk7Cit9CitneDIoKTsK
KwordmFyIGd4MyA9IGZ1bmN0aW9uKGtleSkgeworICAgIGR1bXAoZ3gzKTsKKyAgICB2YXIgZ3gz
YSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkdW1wKGd4M2EpOworICAgICAgICB2YXIgZ3gzYiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZHVtcChneDNiKTsKKyAgICAgICAgICAgIHN1bSAr
PSB2YWx1ZTsKKyAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgfQorICAgICAgICBneDNiKCk7
CisgICAgfQorICAgIGd4M2EoKTsKK30KK2d4MygpOworCit2YXIgZ3g0ID0gZnVuY3Rpb24oa2V5
KSB7IGR1bXAoZ3g0KTsgdmFyIGd4NGEgPSBmdW5jdGlvbigpIHt9OyBkdW1wKGd4NGEpOyBneDRh
KCk7IH0KK2d4NCgpOwordmFyIGd4NSA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKGd4NSk7IHZhciBn
eDVhID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3g1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9
IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBn
eDVhKCk7IH0KK2d4NSgpOwordmFyIGd4NiA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKGd4Nik7IHZh
ciBneDZhID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3g2YSk7IHZhciBneDZiID0gZnVuY3Rpb24oKSB7
IGR1bXAoZ3g2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBneDZiKCk7IH07IGd4NmEoKTsg
fQorZ3g2KCk7CisKKy8vIEluZGVudGVkIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGluIGEgZnVuY3Rp
b246Cit7CisgICAgdmFyIGd4aTEgPSBmdW5jdGlvbihrZXkpIHsgZHVtcChneGkxKTsgc3VtICs9
IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2Vy
TWV0YURhdGEoKSk7Jyk7IH0KKyAgICBneGkxKCk7CisKKyAgICB2YXIgZ3hpMiA9IGZ1bmN0aW9u
KGtleSkgeworICAgICAgICBkdW1wKGd4aTIpOworICAgICAgICB2YXIgZ3hpMmEgPSBmdW5jdGlv
bigpIHsgZHVtcChneGkyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAgIGd4aTJh
KCk7CisgICAgfQorICAgIGd4aTIoKTsKKworICAgIHZhciBneGkzID0gZnVuY3Rpb24oa2V5KSB7
CisgICAgICAgIGR1bXAoZ3hpMyk7CisgICAgICAgIHZhciBneGkzYSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgZHVtcChneGkzYSk7CisgICAgICAgICAgICB2YXIgZ3hpM2IgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBkdW1wKGd4aTNiKTsKKyAgICAgICAgICAgICAgICBzdW0g
Kz0gdmFsdWU7IHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBneGkzYigpOworICAgICAgICB9CisgICAgICAgIGd4aTNhKCk7
CisgICAgfQorICAgIGd4aTMoKTsKKworICAgIHZhciBneGk0ID0gZnVuY3Rpb24oa2V5KSB7IGR1
bXAoZ3hpNCk7IHZhciBneGk0YSA9IGZ1bmN0aW9uKCkge307IGR1bXAoZ3hpNGEpOyBneGk0YSgp
OyB9CisgICAgZ3hpNCgpOworICAgIHZhciBneGk1ID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoZ3hp
NSk7IHZhciBneGk1YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGd4aTVhKTsgc3VtICs9IHZhbHVlOyBl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7Jyk7IH07IGd4aTVhKCk7IH0KKyAgICBneGk1KCk7CisgICAgdmFyIGd4aTYgPSBmdW5jdGlv
bihrZXkpIHsgZHVtcChneGk2KTsgdmFyIGd4aTZhID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3hpNmEp
OyB2YXIgZ3hpNmIgPSBmdW5jdGlvbigpIHsgZHVtcChneGk2Yik7IHN1bSArPSB2YWx1ZTsgZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkp
OycpOyB9OyBneGk2YigpOyB9OyBneGk2YSgpOyB9CisgICAgZ3hpNigpOworfQorCisvLyBHbG9i
YWwgYW5ub3ltb3VzIGZ1bmN0aW9uOgordmFyIGFycmF5ID0gWzJdOwordmFyIGdmb3JFYWNoID0g
WyBdLmZvckVhY2g7Cit2YXIgZ2JvdW5kRm9yRWFjaCA9IGdmb3JFYWNoLmJpbmQoYXJyYXksIGZ1
bmN0aW9uKGtleSkgeworICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7CisgICAgc3VtICs9IHZhbHVlOworICAgIHN1bSAqPSB2YWx1ZTsKKyAgICBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7Cit9
KTsKK2dib3VuZEZvckVhY2goKTsKKworZXZhbCgiIFxuIiArCisiICAgIGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7XG4iICsKKyIgICAgZnVuY3Rpb24gZWYzKCkge1xu
IiArCisiICAgICAgICBkdW1wKGVmMyk7XG4iICsKKyIgICAgICAgIGZ1bmN0aW9uIGVmM2EoKSB7
XG4iICsKKyIgICAgICAgICAgICBkdW1wKGVmM2EpO1xuIiArCisiICAgICAgICAgICAgZnVuY3Rp
b24gZWYzYigpIHtcbiIgKworIiAgICAgICAgICAgICAgICBkdW1wKGVmM2IpO1xuIiArCisiICAg
ICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5w
YXJzZXJNZXRhRGF0YSgpKTsnKTtcbiIgKworIiAgICAgICAgICAgIH1cbiIgKworIiAgICAgICAg
ICAgIGVmM2IoKTtcbiIgKworIiAgICAgICAgfVxuIiArCisiICAgICAgICBlZjNhKCk7XG4iICsK
KyIgICAgfVxuIiArCisiXG4iICsKKyJlZjMoKTsiCispOworCitldmFsKCIgZGVidWcod2luZG93
LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsgZnVuY3Rpb24gZXgzKCkgeyBkdW1wKGV4Myk7
IGZ1bmN0aW9uIGV4M2EoKSB7IGR1bXAoZXgzYSk7IGZ1bmN0aW9uIGV4M2IoKSB7IGR1bXAoZXgz
Yik7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRh
RGF0YSgpKTsnKTsgfSBleDNiKCk7IH0gZXgzYSgpOyB9IGV4MygpOyIpOworCit7CisgICAgZXZh
bCgiIFxuIiArCisgICAgICAgICAiICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0
YURhdGEoKSk7XG4iICsKKyAgICAgICAgICIgICAgLy8gVGVzdCBpbmRlbnRlZCBmdW5jdGlvbiB3
aXRoIGlubmVyIGZ1bmN0aW9ucy4gXG4iICsKKyAgICAgICAgICIgICAgZnVuY3Rpb24gZWZpMygp
IHtcbiIgKworICAgICAgICAgIiAgICAgICAgZHVtcChlZmkzKTtcbiIgKworICAgICAgICAgIiAg
ICAgICAgZnVuY3Rpb24gZWZpM2EoKSB7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBkdW1w
KGVmaTNhKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgIGZ1bmN0aW9uIGVmaTNiKCkge1xu
IiArCisgICAgICAgICAiICAgICAgICAgICAgICAgIGR1bXAoZWZpM2IpO1xuIiArCisgICAgICAg
ICAiICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgIH1c
biIgKworICAgICAgICAgIiAgICAgICAgICAgIGVmaTNiKCk7XG4iICsKKyAgICAgICAgICIgICAg
ICAgIH1cbiIgKworICAgICAgICAgIiAgICAgICAgZWZpM2EoKTtcbiIgKworICAgICAgICAgIiAg
ICB9XG4iICsKKyAgICAgICAgICJcbiIgKworICAgICAgICAgImVmaTMoKTsiCisgICAgICAgICk7
CisKKyAgICBldmFsKCIgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsg
ZnVuY3Rpb24gZXhpMygpIHsgZHVtcChleGkzKTsgZnVuY3Rpb24gZXhpM2EoKSB7IGR1bXAoZXhp
M2EpOyBmdW5jdGlvbiBleGkzYigpIHsgZHVtcChleGkzYik7IGV2YWwoJ3N1bSArPSB2YWx1ZTsg
ZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfSBleGkzYigpOyB9
IGV4aTNhKCk7IH0gZXhpMygpOyIpOworfQo=
</data>
<flag name="commit-queue"
          id="240015"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216963</attachid>
            <date>2013-11-14 11:27:37 -0800</date>
            <delta_ts>2013-11-18 18:48:42 -0800</delta_ts>
            <desc>patch 5: fixes export bug that the Window build revealed, but still a work in progress.</desc>
            <filename>bug-124245b.patch</filename>
            <type>text/plain</type>
            <size>76065</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxMy0xMS0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHRyYWNraW5nIG9mIGVuZENvbHVtbiBmb3IgRXhlY3V0YWJsZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQyNDUuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgbmVlZGVk
IHNvIHRoYXQgd2UgY2FuIGZhaWwgcXVpY2tseSB3aGVuIGNoZWNraW5nIGlmIHdlCisgICAgICAg
IG5lZWQgdG8gc2V0IGEgYnJlYWtwb2ludCBpbiBhIENvZGVCbG9jayB3aGVuIHdlIGltcGxlbWVu
dCBieXRlY29kZSBsZXZlbAorICAgICAgICBicmVha3BvaW50cyBsYXRlci4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmspOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpmdW5jdGlvbkVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpyZWNvcmRQYXJzZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjplbmRDb2x1bW4pOgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgICogcGFy
c2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkV2YWxO
b2RlOjpFdmFsTm9kZSk6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OnN0YXJ0Q29sdW1uKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbU5vZGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjpzdGFydENv
bHVtbik6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjplbmRDb2x1bW4pOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkJvZHlOb2RlOjplbmRDb2x1bW4pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjo6OnBhcnNlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6
OjpwYXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAg
ICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRDb2Rl
QmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRh
YmxlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc0V2YWxFeGVjdXRhYmxlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzUHJvZ3JhbUV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKEpTQzo6U2NyaXB0
RXhlY3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSk6CisKKzIwMTMtMTEtMTQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCB0cmFja2luZyBvZiBlbmRDb2x1bW4gZm9yIEV4ZWN1dGFibGVzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MjQ1Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hh
bmdlIGlzIG5lZWRlZCBzbyB0aGF0IHdlIGNhbiBmYWlsIHF1aWNrbHkgd2hlbiBjaGVja2luZyBp
ZiB3ZQorICAgICAgICBuZWVkIHRvIHNldCBhIGJyZWFrcG9pbnQgaW4gYSBDb2RlQmxvY2sgd2hl
biB3ZSBpbXBsZW1lbnQgYnl0ZWNvZGUgbGV2ZWwKKyAgICAgICAgYnJlYWtwb2ludHMgbGF0ZXIu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpsaW5rKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnVuY3Rpb25FbmRDb2x1bW4pOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6cmVjb3JkUGFyc2UpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVp
bGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkJvZHkpOgor
ICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQ
cm9ncmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFy
c2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpzdGFydENvbHVtbik6Cisg
ICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFs
Tm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW5kQ29sdW1uKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENo
ZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5
KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6Z2V0Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFs
RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVj
dXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJs
ZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmVuZENvbHVtbik6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnJlY29yZFBhcnNlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorCiAyMDEzLTExLTE0ICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTkyNzYpOiByYnAg
cmVnaXN0ZXIgb3ZlcndyaXR0ZW4gaW4gV2luIDY0IHZlcnNpb24gb2YgY2FsbFRvSmF2YXNjcmlw
dCBzdHViCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5Mjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQAogCQkwRjI0RTU0
QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBK
SVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovOyB9Owog
CQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ3MTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oICovOyB9OwotCQkwRjI0RTU0RjE3
RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVt
cFJlZ2lzdGVyU2V0LmggKi87IH07CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1w
UmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1MDE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAg
Ki87IH07CiAJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyog
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmggKi87IH07CkBAIC0xMDA5LDcgKzEwMDksNyBAQAogCQlBN0JEQUVDOTE3
RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCREFFQzMxN0Y0RUExNDAwRjYxNDBD
IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuaCAqLzsgfTsKIAkJQTdCREFFQ0ExN0Y0RUExNDAw
RjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JEQUVDNDE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0
ZXJhdG9yLmNwcCAqLzsgfTsKIAkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovOyB9OwotCQlB
N0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCRkYzQkYxNzk4Njg5NDAw
MDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLzsgfTsKKwkJQTdCRkYzQzAxNzk4Njg5
NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkZGM0JGMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdG
aWx0cmF0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMEM0
QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzBDNEFEMTY4MTA2N0UwMDE3
MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3Bw
ICovOyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi87
IH07CkBAIC0xMjE5LDkgKzEyMTksOSBAQAogCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyog
U3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmNwcCAqLzsgfTsKIAkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJG
QzlCRDIxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkNBRTEwMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5jcHAgKi87IH07Ci0JCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBC
eXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
aCAqLzsgfTsKKwkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FF
MEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkNBRTEyMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07Ci0JCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKKwkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGRTE4
QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERGN0FCRDQxMUY2MEVEMjAwMTA4
RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxNjgsNiArNDE2OCwxMCBAQAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QURE
MTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTEzMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQxNzUsNyArNDE3OSw2IEBACiAJCQkJQTdBOEFG
MzcxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25z
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDNzE3RjRFQTE0MDBGNjE0
MEMgLyogQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JE
QUVDOTE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00Mjk4LDcgKzQzMDEsNiBAQAogCQkJCUE3OTg2RDU3MTdBMEJCMUUw
MEE5NUREMCAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlv
blJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4
OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0
RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLApAQCAtNDc2OCw3ICs0
NzcwLDYgQEAKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
dHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAw
QjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzJGQ0FFMTMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtNDc4NCw3ICs0Nzg1LDYgQEAKIAkJCQlDMkRGNDQzMDE3MDdB
QzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZC
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4
NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8q
IFRodW5rR2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NDAsMTAgKzE2NDAsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogbwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxp
bmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uU3RhcnRD
b2x1bW4oKTsKICAgICAgICAgc3RhcnRDb2x1bW4gKz0gKHVubGlua2VkRXhlY3V0YWJsZS0+Zmly
c3RMaW5lT2Zmc2V0KCkgPyAxIDogb3duZXJFeGVjdXRhYmxlLT5zdGFydENvbHVtbigpKTsKKyAg
ICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvbkVu
ZENvbHVtbigpOworICAgICAgICBlbmRDb2x1bW4gKz0gIWxpbmVDb3VudCA/IHN0YXJ0Q29sdW1u
IDogMTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxp
bmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxl
bmd0aCA9IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVuZ3RoKCk7CiAgICAgICAgIFNvdXJj
ZUNvZGUgY29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVu
Z3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVu
bGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0
Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmly
c3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOwog
ICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4
ZWN1dGFibGUpOwogICAgIH0KIApAQCAtMTY1NCwxMCArMTY1NiwxMiBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9
IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGlu
ZU9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHVubGlua2VkRXhlY3V0
YWJsZS0+ZnVuY3Rpb25TdGFydENvbHVtbigpOwogICAgICAgICBzdGFydENvbHVtbiArPSAodW5s
aW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKSA/IDEgOiBvd25lckV4ZWN1dGFibGUt
PnN0YXJ0Q29sdW1uKCkpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB1bmxpbmtlZEV4
ZWN1dGFibGUtPmZ1bmN0aW9uRW5kQ29sdW1uKCk7CisgICAgICAgIGVuZENvbHVtbiArPSAhbGlu
ZUNvdW50ID8gc3RhcnRDb2x1bW4gOiAxOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IHNvdXJjZU9mZnNldCArIHVubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZzZXQoKTsKICAgICAg
ICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5n
dGgoKTsKICAgICAgICAgU291cmNlQ29kZSBjb2RlKG1fc291cmNlLCBzdGFydE9mZnNldCwgc3Rh
cnRPZmZzZXQgKyBzb3VyY2VMZW5ndGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4pOwotICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNy
ZWF0ZSgqbV92bSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGlu
ZSArIGxpbmVDb3VudCwgc3RhcnRDb2x1bW4pOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV92bSwgY29kZSwgdW5s
aW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCwgc3RhcnRD
b2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0s
IG93bmVyRXhlY3V0YWJsZSwgZXhlY3V0YWJsZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDExICs5MywxNCBAQCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jCiAgICAgLCBtX2xpbmVDb3VudChub2Rl
LT5sYXN0TGluZSgpIC0gbm9kZS0+Zmlyc3RMaW5lKCkpCiAgICAgLCBtX2Z1bmN0aW9uU3RhcnRP
ZmZzZXQobm9kZS0+ZnVuY3Rpb25TdGFydCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0KCkpCiAgICAg
LCBtX2Z1bmN0aW9uU3RhcnRDb2x1bW4obm9kZS0+c3RhcnRDb2x1bW4oKSkKKyAgICAsIG1fZnVu
Y3Rpb25FbmRDb2x1bW4obm9kZS0+ZW5kQ29sdW1uKCkpCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KG5v
ZGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKICAgICAs
IG1fc291cmNlTGVuZ3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQogICAgICwgbV9mZWF0dXJl
cyhub2RlLT5mZWF0dXJlcygpKQogICAgICwgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUo
bm9kZS0+ZnVuY3Rpb25OYW1lSXNJblNjb3BlVG9nZ2xlKCkpCiB7CisgICAgaWYgKCFtX2xpbmVD
b3VudCkKKyAgICAgICAgbV9mdW5jdGlvbkVuZENvbHVtbiAtPSBtX2Z1bmN0aW9uU3RhcnRDb2x1
bW47CiB9CiAKIHNpemVfdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291
bnQoKSBjb25zdApAQCAtMTI0LDggKzEyNyw5IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5r
ZWRGdW5jdGlvbkV4ZWMKICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBsaW5lT2Zmc2V0ICsgbV9m
aXJzdExpbmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQg
KyBtX3N0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gbV9mdW5jdGlvblN0
YXJ0Q29sdW1uICsgMTsgLy8gc3RhcnRDb2x1bW4gc2hvdWxkIHN0YXJ0IGZyb20gMSwgbm90IDAu
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gbV9mdW5jdGlvbkVuZENvbHVtbiArICghbV9saW5l
Q291bnQgPyBzdGFydENvbHVtbiA6IDEpOwogICAgIFNvdXJjZUNvZGUgY29kZShzb3VyY2UucHJv
dmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZpcnN0
TGluZSwgc3RhcnRDb2x1bW4pOwotICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0
ZSh2bSwgY29kZSwgdGhpcywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCwgc3Rh
cnRDb2x1bW4pOworICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgY29k
ZSwgdGhpcywgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBtX2xpbmVDb3VudCwgc3RhcnRDb2x1bW4s
IGVuZENvbHVtbik7CiB9CiAKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
RXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNP
YmplY3QqKiBleGNlcHRpb24pCkBAIC0yMDQsNiArMjA4LDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6
OlVubGlua2VkQ29kZUJsb2NrKFZNKgogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxz
ZSkKICAgICAsIG1fZmlyc3RMaW5lKDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQorICAgICwgbV9l
bmRDb2x1bW4oVUlOVF9NQVgpCiAgICAgLCBtX2ZlYXR1cmVzKDApCiAgICAgLCBtX2NvZGVUeXBl
KGNvZGVUeXBlKQogICAgICwgbV9hcnJheVByb2ZpbGVDb3VudCgwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9CiAgICAg
dW5zaWduZWQgZnVuY3Rpb25TdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25T
dGFydE9mZnNldDsgfQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnRDb2x1bW4oKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uU3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBmdW5jdGlvbkVu
ZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25FbmRDb2x1bW47IH0KICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KICAgICB1
bnNpZ25lZCBzb3VyY2VMZW5ndGgoKSB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQogCkBAIC0x
NjIsNiArMTYzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKICAgICB1
bnNpZ25lZCBtX2Z1bmN0aW9uU3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9mdW5jdGlvblN0
YXJ0Q29sdW1uOworICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25FbmRDb2x1bW47CiAgICAgdW5zaWdu
ZWQgbV9zdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKIApAQCAtMTg2
LDcgKzE4OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdz
OwogCi0gICAgREVDTEFSRV9JTkZPOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiB9OwogCiBz
dHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewpAQCAtNDQxLDE4ICs0NDMsMjAgQEAgcHVi
bGljOgogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCiAgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGlu
dCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAKLSAgICB2
b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZh
cmlhYmxlcywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQpCisgICAgdm9p
ZCByZWNvcmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJp
YWJsZXMsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50ICwgdW5zaWduZWQg
ZW5kQ29sdW1uKQogICAgIHsKICAgICAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOwogICAgICAg
ICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFzQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAg
IG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICBtX2xpbmVDb3VudCA9IGxpbmVDb3Vu
dDsKKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAgICAgfQogCiAgICAgQ29kZUZl
YXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KICAgICBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZh
cmlhYmxlczsgfQogICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RMaW5lOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q291bnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENv
bHVtbjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mKTsKQEAgLTQ5Miw2ICs0OTYsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgdW5z
aWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CisgICAgdW5zaWdu
ZWQgbV9lbmRDb2x1bW47CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBDb2Rl
VHlwZSBtX2NvZGVUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgJKHJldmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsOSArMjgzLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5j
dGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBG
dW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUobV92bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHN0YXJ0Q29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25C
b2R5Tm9kZTo6Y3JlYXRlKG1fdm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOwogICAgIH0KIAogICAgIHZvaWQgc2V0
RnVuY3Rpb25TdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgZnVuY3Rpb25TdGFydCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxNTky
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDE1ICsxMTQsMTYgQEAgU3RhdGVtZW50Tm9kZSogU2NvcGVOb2RlOjpzaW5n
bGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvZ3JhbU5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIFByb2dyYW1Ob2RlOjpQ
cm9ncmFtTm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKK2lubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3Rh
Y2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAgICA6IFNj
b3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29u
c3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKKyAgICAsIG1fZW5kQ29s
dW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5v
ZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUoVk0qIHZtLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKIHsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUodm0s
IHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgY2hpbGRyZW4sIHZhclN0
YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJlcywgbnVt
Q29uc3RhbnRzKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5v
ZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1u
LCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFibGVzLCBzb3Vy
Y2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPm1fYXJlbmEu
bGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpAQCAtMTMz
LDE0ICsxMzQsMTUgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5vZGU6OmNyZQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShWTSogdm0sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3Rh
Y2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJp
YWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQoraW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShWTSogdm0sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmRMb2NhdGlvbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVy
U2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTY29wZU5vZGUodm0sIHN0
YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKKyAgICAs
IG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAotUGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZh
bE5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQsIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NS
ZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24s
IHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0
dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBSZWZQdHI8RXZhbE5vZGU+
IG5vZGUgPSBuZXcgRXZhbE5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBjaGls
ZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVh
dHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3IEV2
YWxOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgZW5kQ29sdW1uLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cyk7CiAKICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0g
bm9kZSk7CiAgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CkBAIC0xNzksMTUgKzE4MSwx
NyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoCiAgICAgICAgIHBh
dHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5j
dGlvbkJvZHlOb2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgYm9vbCBpblN0cmljdENvbnRleHQpCitpbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rp
b25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCiAgICAgOiBTY29wZU5v
ZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpblN0cmljdENvbnRleHQpCiAgICAg
LCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSog
dm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRz
KiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ss
IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitpbmxpbmUg
RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShWTSogdm0sIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAgICA6
IFNjb3BlTm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNo
aWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMs
IG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCisgICAgLCBt
X2VuZENvbHVtbihlbmRDb2x1bW4pCiB7CiB9CiAKQEAgLTIwNSwxNCArMjA5LDE0IEBAIHZvaWQg
RnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMKICAgICBtX2Z1bmN0aW9uTmFtZUlz
SW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsKIH0KIAotRnVuY3Rp
b25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCitGdW5jdGlv
bkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoVk0qIHZtLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJp
Y3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAg
IHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CiB9CiAKLVBhc3NS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNo
aWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRl
bnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8
RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayog
ZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNl
Q29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0gbmV3IEZ1bmN0aW9uQm9k
eU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgY2hpbGRy
ZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2VDb2RlLCBm
ZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9k
ZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c3RhcnRDb2x1bW4sIGVuZENvbHVtbiAsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBj
YXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAK
ICAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CiAgICAgbm9kZS0+bV9h
cmVuYS5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsMzMgKzE0NjgsMzggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzRnVuY3Rpb25Ob2RlID0gZmFsc2U7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCi0gICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQorICAgICAg
ICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0K
KyAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFZNKiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50
aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3Rh
Y2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50
IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgT1ZFUlJJREU7CiAKICAgICAgICAgdW5z
aWduZWQgbV9zdGFydENvbHVtbjsKKyAgICAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAgICAg
fTsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbE5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIHsgcmV0
dXJuIDE7IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAx
OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29s
dW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFs
c2U7CiAKICAgICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShWTSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50
cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRXZhbE5v
ZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwg
RnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBPVkVSUklERTsKKwor
ICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rp
b25QYXJhbWV0ZXJzIDogcHVibGljIFJlZkNvdW50ZWQ8RnVuY3Rpb25QYXJhbWV0ZXJzPiB7CkBA
IC0xNTE5LDggKzE1MjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJv
ZHlOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlv
bkJvZHlOb2RlKiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIGJvb2wgaXNTdHJp
Y3RNb2RlKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3Jl
YXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNr
KiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9k
eU5vZGUqIGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29s
dW1uLCBib29sIGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE1NDAs
MTIgKzE1NDUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0RnVuY3Rpb25T
dGFydChpbnQgZnVuY3Rpb25TdGFydCkgeyBtX2Z1bmN0aW9uU3RhcnQgPSBmdW5jdGlvblN0YXJ0
OyB9CiAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlv
blN0YXJ0OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydENvbHVtbjsgfQorICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJl
dHVybiBtX2VuZENvbHVtbjsgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNG
dW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbkJvZHlOb2Rl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAg
ICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBG
dW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShW
TSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBJ
ZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CkBA
IC0xNTUzLDYgKzE1NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPEZ1bmN0
aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBpbnQgbV9mdW5jdGlvblN0YXJ0
OwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOworICAgICAgICB1bnNpZ25lZCBtX2Vu
ZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY0V4cHJOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJ
KHJldmlzaW9uIDE1OTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2MiwxMyArMTE2MiwxNiBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB0
b2tlbkNvbHVtbigpOwogICAgIG5leHQoKTsKIAotICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgaWYgKG1h
dGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29s
dW1uKCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExv
Y2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1v
ZGUoKSk7CisgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1l
bnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxWTSo+KG1f
dm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRz
PENoZWNrRm9yU3RyaWN0TW9kZT4oYm9keUJ1aWxkZXIpLCAiQ2Fubm90IHBhcnNlIGJvZHkgb2Yg
dGhpcyBmdW5jdGlvbiIpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShz
dGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBzdHJpY3RNb2RlKCkp
OworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CisgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwg
c3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKIH0KIAogc3RhdGljIGNvbnN0
IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBhcnNlTW9kZSBtb2RlKQpAQCAt
MTIzMiw4ICsxMjM1LDExIEBAIHRlbXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJl
bWUKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJy
YWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBjYWNoZWRJ
bmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICBBU1NFUlQoZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
dW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gZW5kTG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0OworICAgICAgICBpZiAoZW5kTG9jYXRpb24ubGluZSA9PSBi
b2R5U3RhcnRMaW5lKQorICAgICAgICAgICAgYm9keUVuZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0
YXJ0T2Zmc2V0IC0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJv
ZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgYm9keVN0YXJ0Q29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgYm9k
eSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9u
LCBib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmljdE1vZGUp
OwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92
aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5j
dGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNlciBl
cnJvciIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lv
biAxNTkyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDAsMTMgKzkwMCwxNSBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBh
cnNlcjxMZXhlclR5cGU+CiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKICAgICBpZiAo
bV9zb3VyY2VFbGVtZW50cykgewogICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247
Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpOwor
ICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGluZU51bWJlcigpOwogICAgICAg
ICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0
T2Zmc2V0KCk7CiAgICAgICAgIGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0ID0gbV9sZXhlci0+Y3Vy
cmVudE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSBlbmRMb2NhdGlvbi5z
dGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCArIDE7CiAgICAgICAgIHJl
c3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZShtX3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRDb2x1bW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2x1
bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZUVsZW1lbnRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMg
PyAmbV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0
YSA6IDAsCkBAIC05MTQsNyArOTE2LDcgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8
TGV4ZXJUeXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLCBtX2xhc3RUb2tlbkVuZFBvc2l0
aW9uLmxpbmUsIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9sZXhlci0+Y3VycmVudExpbmVT
dGFydE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGlu
ZSgpLCBtX2xleGVyLT5saW5lTnVtYmVyKCksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSwgbV9s
ZXhlci0+Y3VycmVudExpbmVTdGFydE9mZnNldCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyBXZSBjYW4gbmV2ZXIgc2VlIGEgc3ludGF4IGVycm9yIHdoZW4gcmVwYXJzaW5nIGEgZnVuY3Rp
b24sIHNpbmNlIHdlIHNob3VsZCBoYXZlCiAgICAgICAgIC8vIHJlcG9ydGVkIHRoZSBlcnJvciB3
aGVuIHBhcnNpbmcgdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSBvciBldmFsIGNvZGUuIFNvIGlmIHdl
J3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsg
cmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2ln
blJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJl
c3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7
IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgYm9vbCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wpIHsgcmV0dXJuIDE7
IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVh
dGVBcmd1bWVudHMoKSB7IHJldHVybiAxOyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQp
IHsgcmV0dXJuIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29k
ZUNhY2hlLmNwcAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsOCBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAgICAgICAgIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+
KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgICAgIHVuc2lnbmVk
IGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkQ29kZS0+Zmlyc3RMaW5l
KCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gc291cmNlLmZpcnN0TGluZSgpID8g
c291cmNlLnN0YXJ0Q29sdW1uKCkgOiAwOwotICAgICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZSh1bmxpbmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRDb2RlLT5saW5lQ291
bnQoKSwgc3RhcnRDb2x1bW4pOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB1bmxpbmtl
ZENvZGUtPmVuZENvbHVtbigpOworICAgICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxp
bmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFi
bGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRDb2RlLT5saW5lQ291bnQoKSwg
c3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGU7CiAg
ICAgfQogCkBAIC05NCwxMCArOTUsMTEgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2Fj
aGU6OmdldENvZAogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3ZlKGFkZFJlc3VsdC5pdGVyYXRv
cik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJz
ZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHJvb3ROb2RlLT5zdGFy
dENvbHVtbigpKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVy
ZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8o
KSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHJvb3ROb2RlLT5zdGFydENvbHVtbigpLCByb290Tm9k
ZS0+ZW5kQ29sdW1uKCkpOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENv
ZGUgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0sIGV4ZWN1dGFibGUtPmV4ZWN1
dGFibGVJbmZvKCkpOwotICAgIHVubGlua2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZl
YXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGlu
ZU5vKCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5v
ZGUtPmxpbmVObygpKTsKKyAgICB1bmxpbmtlZENvZGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5m
ZWF0dXJlcygpLCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxp
bmVObygpIC0gc291cmNlLmZpcnN0TGluZSgpLCByb290Tm9kZS0+bGFzdExpbmUoKSAtIHJvb3RO
b2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmVuZENvbHVtbigpKTsKKwogICAgIE93blB0cjxCeXRl
Y29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2
bSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgcm9vdE5vZGUt
PmRlc3Ryb3lEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsOCBA
QCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgVk0qIHZtID0g
c2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhlYXAuaXNEZWZlcnJlZCgpKTsKLSAgICAK
KyAgICBBU1NFUlQoZW5kQ29sdW1uKCkgIT0gVUlOVF9NQVgpOworCiAgICAgaWYgKGNsYXNzSW5m
bygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CkBAIC0yMDksNyArMjEwLDcgQEAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KICAgICAgICAgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKICAgICAgICAgICAgICp2bSwgZXhlY3V0
YWJsZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7
Ci0gICAgcmVjb3JkUGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPmZlYXR1
cmVzKCksIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1bW4oKSk7IAorICAgIHJlY29y
ZFBhcnNlKGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCBleGVj
dXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGlu
ZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCksIGVuZENvbHVtbigpKTsgCiAgICAgaWYg
KCF1bmxpbmtlZENvZGVCbG9jaykgewogICAgICAgICBleGNlcHRpb24gPSB2bS0+dGhyb3dFeGNl
cHRpb24oCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwKQEAgLTM2Miw3
ICszNjMsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogCiAKIGNv
bnN0IENsYXNzSW5mbyBGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uRXhl
Y3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoRnVuY3Rpb25FeGVjdXRhYmxlKSB9OwogCi1GdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0
aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5l
LCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4pCitGdW5jdGlvbkV4ZWN1
dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWdu
ZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbikKICAgICA6IFNjcmlwdEV4ZWN1dGFibGUodm0uZnVuY3Rpb25FeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmlz
SW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2VkRXhlY3V0YWJsZSh2bSwgdGhpcywg
dW5saW5rZWRFeGVjdXRhYmxlKQogewpAQCAtMzcxLDYgKzM3Miw3IEBAIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsK
ICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29s
dW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01NzAsOSArNTcyLDEwIEBAIEZ1bmN0
aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAgICB1bnNpZ25lZCBmaXJzdExp
bmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZEZ1bmN0aW9uLT5maXJzdExpbmVPZmZz
ZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpICsg
dW5saW5rZWRGdW5jdGlvbi0+c3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVt
biA9IHNvdXJjZS5zdGFydENvbHVtbigpOworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlu
a2VkRnVuY3Rpb24tPmZ1bmN0aW9uRW5kQ29sdW1uKCkgKyAxOwogICAgIHVuc2lnbmVkIHNvdXJj
ZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgpOwogICAgIFNvdXJjZUNv
ZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9m
ZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgcmV0dXJu
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1
bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgp
LCBzdGFydENvbHVtbik7CisgICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGZ1bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVu
bGlua2VkRnVuY3Rpb24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKIH0K
IAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTU5
Mjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTggQEAgcHVibGljOgogICAgICAgICAKICAgICBDb2Rl
QmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAKKyAgICBi
b29sIGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7CisgICAgfQogICAgIGJv
b2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0K
KyAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU7Cisg
ICAgfQogCiAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAgICAgewpAQCAtMzU1LDYg
KzM2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICwg
bV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAg
ICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAsIG1fZW5kQ29sdW1uKFVJTlRf
TUFYKQogICAgIHsKICAgICB9CiAKQEAgLTM2Myw2ICszNzIsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRl
eHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgICwgbV9uZXZlcklubGluZShmYWxz
ZSkKKyAgICAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKICAgICB7CiAgICAgfQogCkBAIC0z
NzgsNiArMzg4LDcgQEAgcHVibGljOgogICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiBt
X2ZpcnN0TGluZTsgfQogICAgIGludCBsYXN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdExp
bmU7IH0KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRD
b2x1bW47IH0KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENv
bHVtbjsgfQogCiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMg
JiBFdmFsRmVhdHVyZTsgfQogICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlOyB9CkBAIC0zOTUsMTMgKzQwNiwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZvaWQgcmVjb3JkUGFy
c2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQg
Zmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKQorICAgIHZvaWQg
cmVjb3JkUGFyc2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFi
bGVzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgewogICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7
CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsK
ICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAgICAgIG1fbGFzdExpbmUgPSBs
YXN0TGluZTsKICAgICAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgICAgICBB
U1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRD
b2x1bW47CiAgICAgfQogCiAgICAgdm9pZCBpbnN0YWxsQ29kZShDb2RlQmxvY2sqKTsKQEAgLTQz
Nyw2ICs0NTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fZmlyc3RMaW5lOwogICAgIGludCBt
X2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CisgICAgdW5zaWduZWQgbV9l
bmRDb2x1bW47CiB9OwogCiBjbGFzcyBFdmFsRXhlY3V0YWJsZSA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRhYmxlIHsKQEAgLTU0OSw5ICs1NjMsOSBAQCBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgOiBw
dWJsaWMgU2NyaXB0CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7
CiAKLSAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4
ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uKQorICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSYg
dm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IHVubGlua2VkRXhlY3V0YWJsZSwgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsYXN0TGlu
ZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbikKICAgICB7Ci0gICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZSh2
bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUsIHN0YXJ0
Q29sdW1uKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPih2bS5oZWFwKSkgRnVuY3Rp
b25FeGVjdXRhYmxlKHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBs
YXN0TGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAgICAgICAgIGV4ZWN1dGFibGUtPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgfQpAQCAt
NjM5LDcgKzY1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCiBwcml2YXRl
OgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExp
bmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBj
b25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBm
aXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uKTsKIAogICAgIGJvb2wgaXNDb21waWxpbmcoKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE1OTI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEzLTExLTE0ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBF
eGVjdXRhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNDI0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0OiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbAorCisgICAg
ICAgICogRm9yd2FyZGluZ0hlYWRlcnMvYnl0ZWNvZGU6IEFkZGVkLgorICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL2J5dGVjb2RlL0NvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5j
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3I6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6R2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3Rvcjo6Y29k
ZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGFyc2VyTWV0YURhdGEpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuaWRsOgorCiAyMDEzLTExLTE0ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIEZJTFRFUl9UWVBFX0NBU1RTIGZvciBjaGlsZCBm
aWx0ZXIgY2xhc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTkyNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODI0LDYg
KzgyNCw3IEBAIF9fWk43V2ViQ29yZTIySFRNTFBsdWdJbkltYWdlRWxlbWVudDI0cmUKIF9fWk43
V2ViQ29yZTIySFRNTFBsdWdJbkltYWdlRWxlbWVudDI5c2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQ
bHVnSW5FYgogX19aTjdXZWJDb3JlMjJSdW50aW1lRW5hYmxlZEZlYXR1cmVzMTRzaGFyZWRGZWF0
dXJlc0V2CiBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQyNmNhblN1c3BlbmRB
Y3RpdmVET01PYmplY3RzRXYKK19fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDJ2
bUV2CiBfX1pON1dlYkNvcmUyMlN0b3JhZ2VFdmVudERpc3BhdGNoZXIzNGRpc3BhdGNoTG9jYWxT
dG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5TXzlQYWdlR3JvdXBFUktOM1dURjZWZWN0b3JJTlMzXzZS
ZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRVJLTlMzXzZTdHJp
bmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUyMlVSTFdpdGhV
c2VyVHlwZWRTdHJpbmdFUDhOU1N0cmluZ1A1TlNVUkwKIF9fWk43V2ViQ29yZTIyY291bnRlclZh
bHVlRm9yRWxlbWVudEVQTlNfN0VsZW1lbnRFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9Db2Rl
QmxvY2tfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9Db2RlQmxvY2tfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0NvZGVCbG9jay5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDggQEAKICNpbmNsdWRl
ICJUeXBlQ29udmVyc2lvbnMuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KIApAQCAtMTU4LDYgKzE2
MCwxMyBAQAogI2luY2x1ZGUgIk1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmgiCiAjZW5kaWYK
IAordXNpbmcgSlNDOjpDb2RlQmxvY2s7Cit1c2luZyBKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTsK
K3VzaW5nIEpTQzo6SlNGdW5jdGlvbjsKK3VzaW5nIEpTQzo6SlNWYWx1ZTsKK3VzaW5nIEpTQzo6
U2NyaXB0RXhlY3V0YWJsZTsKK3VzaW5nIEpTQzo6U3RhY2tWaXNpdG9yOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xMjUyLDYgKzEyNjEs
ODYgQEAgdm9pZCBJbnRlcm5hbHM6OmVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcgogI2VuZGlmCiB9
CiAKK2NsYXNzIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgeworcHVibGljOgorICAgIEdldENh
bGxlckNvZGVCbG9ja0Z1bmN0b3IoKQorICAgICAgICA6IG1faXRlcmF0aW9ucygwKQorICAgICAg
ICAsIG1fY29kZUJsb2NrKDApCisgICAgeworICAgIH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3Rh
dHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgKytt
X2l0ZXJhdGlvbnM7CisgICAgICAgIGlmIChtX2l0ZXJhdGlvbnMgPCAyKQorICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisKKyAgICAgICAgbV9jb2RlQmxvY2sgPSB2
aXNpdG9yLT5jb2RlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faXRlcmF0aW9uczsKKyAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOworfTsKKworU3RyaW5nIEludGVybmFsczo6cGFyc2VyTWV0YURhdGEo
U2NyaXB0VmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSogdm0gPSBjb250ZXh0RG9jdW1lbnQo
KS0+dm0oKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHZtLT50b3BDYWxsRnJhbWU7Cisg
ICAgSlNDOjpKU1ZhbHVlIGNvZGUgPSB2YWx1ZS5qc1ZhbHVlKCk7CisgICAgU2NyaXB0RXhlY3V0
YWJsZSogZXhlY3V0YWJsZTsKKworICAgIGlmICghY29kZSB8fCBjb2RlLmlzTnVsbCgpIHx8IGNv
ZGUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yIGl0
ZXI7CisgICAgICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gaXRlci5jb2RlQmxvY2soKTsKKyAgICAgICAgZXhlY3V0YWJsZSA9IGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCk7IAorCisgICAgfSBlbHNlIGlmIChjb2RlLmlzRnVuY3Rpb24o
KSkgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jT2JqID0gSlNDOjpqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNvZGUudG9PYmplY3QoZXhlYykpOworICAgICAgICBleGVjdXRhYmxlID0gZnVuY09iai0+
anNFeGVjdXRhYmxlKCk7CisKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJsZS0+bGluZU5vKCk7CisgICAgdW5z
aWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFydENvbHVtbigpOworICAgIHVuc2ln
bmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgpOworICAgIHVuc2lnbmVkIGVuZENv
bHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkgeworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjdXRhYmxlID0gcmVpbnRlcnByZXRfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgU3RyaW5nIGluZmVy
cmVkTmFtZSA9IGZ1bmNFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKS5zdHJpbmcoKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiZnVuY3Rpb24gXCIiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChp
bmZlcnJlZE5hbWUpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc0V2YWxFeGVjdXRhYmxlKCkpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCJldmFsIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKGV4ZWN1dGFibGUtPmlzUHJvZ3JhbUV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCJwcm9ncmFtIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBw
ZW5kKCIgeyAiKTsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKHN0YXJ0TGluZSk7CisgICAgcmVz
dWx0LmFwcGVuZCgiOiIpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoc3RhcnRDb2x1bW4pOwor
ICAgIHJlc3VsdC5hcHBlbmQoIiAtICIpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoZW5kTGlu
ZSk7CisgICAgcmVzdWx0LmFwcGVuZCgiOiIpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoZW5k
Q29sdW1uKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgfSIpOworCisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOworfQorCiB2b2lkIEludGVybmFsczo6c2V0QmF0dGVyeVN0YXR1cyhjb25zdCBT
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjaGFyZ2luZywgZG91YmxlIGNoYXJnaW5nVGltZSwgZG91
YmxlIGRpc2NoYXJnaW5nVGltZSwgZG91YmxlIGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTU5Mjc1KQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRl
IDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC0xODAsNiArMTgxLDggQEAgcHVibGljOgogICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZEJlZ2lu
RnJhbWUoKTsKICAgICB2b2lkIGVtaXRJbnNwZWN0b3JEaWRDYW5jZWxGcmFtZSgpOwogCisgICAg
U3RyaW5nIHBhcnNlck1ldGFEYXRhKFNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWUoKSk7CisKICAg
ICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgYm9vbCBoYXNHcmFtbWFyTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBoYXNBdXRvY29ycmVjdGVkTWFya2VyKGludCBmcm9t
LCBpbnQgbGVuZ3RoLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNTkyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsOSBAQAogICAgIHZv
aWQgZW1pdEluc3BlY3RvckRpZEJlZ2luRnJhbWUoKTsKICAgICB2b2lkIGVtaXRJbnNwZWN0b3JE
aWRDYW5jZWxGcmFtZSgpOwogCisgICAgLy8gQ2FsbGluZyBzY3JpcHRCb3VuZHNGb3IoKSB3aXRo
IG51bGwgZ2V0cyB0aGUgYm91bmRzIGZvciB0aGUgc2NyaXB0IG9mIHRoZSBjdXJyZW50IHNjb3Bl
LgorICAgIERPTVN0cmluZyBwYXJzZXJNZXRhRGF0YShvcHRpb25hbCBhbnkgZnVuY09yTnVsbCk7
CisKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhc1NwZWxsaW5nTWFya2VyKGxvbmcg
ZnJvbSwgbG9uZyBsZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzR3Jh
bW1hck1hcmtlcihsb25nIGZyb20sIGxvbmcgbGVuZ3RoKTsKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSBib29sZWFuIGhhc0F1dG9jb3JyZWN0ZWRNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNTkyNzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0xMS0xNCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHRyYWNraW5nIG9mIGVuZENvbHVtbiBmb3Ig
RXhlY3V0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQyNDUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxv
Y2F0aW9ucy5qczogQWRkZWQuCisKIDIwMTMtMTEtMTMgIFZpY3RvciBDb3N0YW4gIDxjb3N0YW5A
Z21haWwuY29tPgogCiAgICAgICAgIEJsb2IgY29uc3RydWN0b3IgYWNjZXB0cyBhIHNlcXVlbmNl
IChhcnJheS1saWtlIG9iamVjdCkgYXMgZmlyc3QgYXJnLgpJbmRleDogTGF5b3V0VGVzdHMvanMv
ZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQt
bG9jYXRpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAor
cHJvZ3JhbSB7IDc6OSAtIDE4OjEgfQorcHJvZ3JhbSB7IDE6MSAtIDM0ODoxIH0KK2Z1bmN0aW9u
ICJmMCIgeyAxOjg2IC0gMToyMzcgfQorZnVuY3Rpb24gImYwYSIgeyAxOjExMyAtIDE6MjI4IH0K
K2Z1bmN0aW9uICJmMGIiIHsgMToxNDEgLSAxOjIxOSB9CitldmFsIHsgMToxIC0gMTo1NiB9Citm
dW5jdGlvbiAieDAiIHsgMToyNjkgLSAxOjQ0NyB9CitmdW5jdGlvbiAieDBhIiB7IDE6MzAxIC0g
MTo0MzcgfQorZnVuY3Rpb24gIngwYiIgeyAxOjMzNSAtIDE6NDI3IH0KK2V2YWwgeyAxOjEgLSAx
OjU2IH0KK2Z1bmN0aW9uICJmMSIgeyA5OjIyIC0gOToxMTMgfQorZXZhbCB7IDE6MSAtIDE6NTYg
fQorZnVuY3Rpb24gImYyIiB7IDEyOjIyIC0gMTY6NSB9CitmdW5jdGlvbiAiZjJhIiB7IDE0OjI0
IC0gMTQ6MTE2IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmMyIgeyAxOToyMiAt
IDMxOjUgfQorZnVuY3Rpb24gImYzYSIgeyAyMToyNCAtIDI5OjkgfQorZnVuY3Rpb24gImYzYiIg
eyAyMzoyOCAtIDI3OjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmNCIgeyAz
NDoyMiAtIDM0OjcxIH0KK2Z1bmN0aW9uICJmNGEiIHsgMzQ6NDkgLSAzNDo1MCB9CitmdW5jdGlv
biAiZjUiIHsgMzY6MjIgLSAzNjoxNTEgfQorZnVuY3Rpb24gImY1YSIgeyAzNjo0OSAtIDM2OjE0
MSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZjYiIHsgMzg6MjIgLSAzODoxODkg
fQorZnVuY3Rpb24gImY2YSIgeyAzODo0OSAtIDM4OjE3OSB9CitmdW5jdGlvbiAiZjZiIiB7IDM4
Ojc3IC0gMzg6MTY5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmaTEiIHsgNDM6
MjcgLSA0MzoxMTkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpMiIgeyA0Njoy
NyAtIDUwOjkgfQorZnVuY3Rpb24gImZpMmEiIHsgNDg6MjkgLSA0ODoxMjIgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpMyIgeyA1MzoyNyAtIDY1OjkgfQorZnVuY3Rpb24gImZp
M2EiIHsgNTU6MjkgLSA2MzoxMyB9CitmdW5jdGlvbiAiZmkzYiIgeyA1NzozMyAtIDYxOjE3IH0K
K2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmaTQiIHsgNjg6MjcgLSA2ODo4MCB9Citm
dW5jdGlvbiAiZmk0YSIgeyA2ODo1NiAtIDY4OjU3IH0KK2Z1bmN0aW9uICJmaTUiIHsgNzA6Mjcg
LSA3MDoxNjAgfQorZnVuY3Rpb24gImZpNWEiIHsgNzA6NTYgLSA3MDoxNDkgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpNiIgeyA3MjoyNyAtIDcyOjIwMSB9CitmdW5jdGlvbiAi
Zmk2YSIgeyA3Mjo1NiAtIDcyOjE5MCB9CitmdW5jdGlvbiAiZmk2YiIgeyA3Mjo4NiAtIDcyOjE3
OSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAieDEiIHsgNzc6MjggLSA3NzoxMTkg
fQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIngyIiB7IDgwOjI4IC0gODQ6NSB9Citm
dW5jdGlvbiAieDJhIiB7IDgyOjMwIC0gODI6MTIyIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1
bmN0aW9uICJ4MyIgeyA4NzoyOCAtIDk5OjUgfQorZnVuY3Rpb24gIngzYSIgeyA4OTozMCAtIDk3
OjkgfQorZnVuY3Rpb24gIngzYiIgeyA5MTozNCAtIDk1OjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2
IH0KK2Z1bmN0aW9uICJ4NCIgeyAxMDI6MjggLSAxMDI6ODMgfQorZnVuY3Rpb24gIng0YSIgeyAx
MDI6NjEgLSAxMDI6NjIgfQorZnVuY3Rpb24gIng1IiB7IDEwNDoyOCAtIDEwNDoxNjMgfQorZnVu
Y3Rpb24gIng1YSIgeyAxMDQ6NjEgLSAxMDQ6MTUzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1
bmN0aW9uICJ4NiIgeyAxMDY6MjggLSAxMDY6MjA3IH0KK2Z1bmN0aW9uICJ4NmEiIHsgMTA2OjYx
IC0gMTA2OjE5NyB9CitmdW5jdGlvbiAieDZiIiB7IDEwNjo5NSAtIDEwNjoxODcgfQorZXZhbCB7
IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gInhpMSIgeyAxMTE6MzMgLSAxMTE6MTI1IH0KK2V2YWwg
eyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJ4aTIiIHsgMTE0OjMzIC0gMTE4OjkgfQorZnVuY3Rp
b24gInhpMmEiIHsgMTE2OjM1IC0gMTE2OjEyOCB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5j
dGlvbiAieGkzIiB7IDEyMTozMyAtIDEzMzo5IH0KK2Z1bmN0aW9uICJ4aTNhIiB7IDEyMzozNSAt
IDEzMToxMyB9CitmdW5jdGlvbiAieGkzYiIgeyAxMjU6MzkgLSAxMjk6MTcgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZnVuY3Rpb24gInhpNCIgeyAxMzY6MzMgLSAxMzY6OTIgfQorZnVuY3Rpb24g
InhpNGEiIHsgMTM2OjY4IC0gMTM2OjY5IH0KK2Z1bmN0aW9uICJ4aTUiIHsgMTM4OjMzIC0gMTM4
OjE3MiB9CitmdW5jdGlvbiAieGk1YSIgeyAxMzg6NjggLSAxMzg6MTYxIH0KK2V2YWwgeyAxOjEg
LSAxOjU2IH0KK2Z1bmN0aW9uICJ4aTYiIHsgMTQwOjMzIC0gMTQwOjIxOSB9CitmdW5jdGlvbiAi
eGk2YSIgeyAxNDA6NjggLSAxNDA6MjA4IH0KK2Z1bmN0aW9uICJ4aTZiIiB7IDE0MDoxMDQgLSAx
NDA6MTk3IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICIiIHsgMTQ2OjU4IC0gMTUx
OjUgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24g
ImdmMSIgeyAxNjA6MTkgLSAxNjA6MTExIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9u
ICJnZjIiIHsgMTYzOjE5IC0gMTY3OjEgfQorZnVuY3Rpb24gImdmMmEiIHsgMTY1OjIxIC0gMTY1
OjExNCB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ2YzIiB7IDE3MDoxOSAtIDE4
MjoxIH0KK2Z1bmN0aW9uICJnZjNhIiB7IDE3MjoyMSAtIDE4MDo1IH0KK2Z1bmN0aW9uICJnZjNi
IiB7IDE3NDoyNSAtIDE3ODo5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJnZjQi
IHsgMTg1OjE5IC0gMTg1OjcyIH0KK2Z1bmN0aW9uICJnZjRhIiB7IDE4NTo0OCAtIDE4NTo0OSB9
CitmdW5jdGlvbiAiZ2Y1IiB7IDE4NzoxOSAtIDE4NzoxNTIgfQorZnVuY3Rpb24gImdmNWEiIHsg
MTg3OjQ4IC0gMTg3OjE0MSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ2Y2IiB7
IDE4OToxOSAtIDE4OToxOTMgfQorZnVuY3Rpb24gImdmNmEiIHsgMTg5OjQ4IC0gMTg5OjE4MiB9
CitmdW5jdGlvbiAiZ2Y2YiIgeyAxODk6NzggLSAxODk6MTcxIH0KK2V2YWwgeyAxOjEgLSAxOjU2
IH0KK2Z1bmN0aW9uICJnZmkxIiB7IDE5NDoyNCAtIDE5NDoxMTcgfQorZXZhbCB7IDE6MSAtIDE6
NTYgfQorZnVuY3Rpb24gImdmaTIiIHsgMTk3OjI0IC0gMjAxOjUgfQorZnVuY3Rpb24gImdmaTJh
IiB7IDE5OToyNiAtIDE5OToxMjAgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImdm
aTMiIHsgMjA0OjI0IC0gMjE2OjUgfQorZnVuY3Rpb24gImdmaTNhIiB7IDIwNjoyNiAtIDIxNDo5
IH0KK2Z1bmN0aW9uICJnZmkzYiIgeyAyMDg6MzAgLSAyMTI6MTMgfQorZXZhbCB7IDE6MSAtIDE6
NTYgfQorZnVuY3Rpb24gImdmaTQiIHsgMjE5OjI0IC0gMjE5OjgxIH0KK2Z1bmN0aW9uICJnZmk0
YSIgeyAyMTk6NTUgLSAyMTk6NTYgfQorZnVuY3Rpb24gImdmaTUiIHsgMjIxOjI0IC0gMjIxOjE2
MSB9CitmdW5jdGlvbiAiZ2ZpNWEiIHsgMjIxOjU1IC0gMjIxOjE0OSB9CitldmFsIHsgMToxIC0g
MTo1NiB9CitmdW5jdGlvbiAiZ2ZpNiIgeyAyMjM6MjQgLSAyMjM6MjA1IH0KK2Z1bmN0aW9uICJn
Zmk2YSIgeyAyMjM6NTUgLSAyMjM6MTkzIH0KK2Z1bmN0aW9uICJnZmk2YiIgeyAyMjM6ODcgLSAy
MjM6MTgxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneDEiIHsgMjI4OjI1IC0g
MjI4OjExNyB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3gyIiB7IDIzMToyNSAt
IDIzNToxIH0KK2Z1bmN0aW9uICJneDJhIiB7IDIzMzoyNyAtIDIzMzoxMjAgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4MyIgeyAyMzg6MjUgLSAyNTA6MSB9CitmdW5jdGlvbiAi
Z3gzYSIgeyAyNDA6MjcgLSAyNDg6NSB9CitmdW5jdGlvbiAiZ3gzYiIgeyAyNDI6MzEgLSAyNDY6
OSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3g0IiB7IDI1MzoyNSAtIDI1Mzo4
NCB9CitmdW5jdGlvbiAiZ3g0YSIgeyAyNTM6NjAgLSAyNTM6NjEgfQorZnVuY3Rpb24gImd4NSIg
eyAyNTU6MjUgLSAyNTU6MTY0IH0KK2Z1bmN0aW9uICJneDVhIiB7IDI1NTo2MCAtIDI1NToxNTMg
fQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImd4NiIgeyAyNTc6MjUgLSAyNTc6MjEx
IH0KK2Z1bmN0aW9uICJneDZhIiB7IDI1Nzo2MCAtIDI1NzoyMDAgfQorZnVuY3Rpb24gImd4NmIi
IHsgMjU3Ojk2IC0gMjU3OjE4OSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3hp
MSIgeyAyNjI6MzAgLSAyNjI6MTIzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJn
eGkyIiB7IDI2NTozMCAtIDI2OTo1IH0KK2Z1bmN0aW9uICJneGkyYSIgeyAyNjc6MzIgLSAyNjc6
MTI2IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneGkzIiB7IDI3MjozMCAtIDI4
NDo1IH0KK2Z1bmN0aW9uICJneGkzYSIgeyAyNzQ6MzIgLSAyODI6OSB9CitmdW5jdGlvbiAiZ3hp
M2IiIHsgMjc2OjM2IC0gMjgwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJn
eGk0IiB7IDI4NzozMCAtIDI4Nzo5MyB9CitmdW5jdGlvbiAiZ3hpNGEiIHsgMjg3OjY3IC0gMjg3
OjY4IH0KK2Z1bmN0aW9uICJneGk1IiB7IDI4OTozMCAtIDI4OToxNzMgfQorZnVuY3Rpb24gImd4
aTVhIiB7IDI4OTo2NyAtIDI4OToxNjEgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24g
Imd4aTYiIHsgMjkxOjMwIC0gMjkxOjIyMyB9CitmdW5jdGlvbiAiZ3hpNmEiIHsgMjkxOjY3IC0g
MjkxOjIxMSB9CitmdW5jdGlvbiAiZ3hpNmIiIHsgMjkxOjEwNSAtIDI5MToxOTkgfQorZXZhbCB7
IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIiIgeyAyOTg6NTYgLSAzMDM6MSB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitldmFsIHsgMToxIC0gMTY6NyB9CitmdW5jdGlvbiAiZWYzIiB7IDM6MjAgLSAx
NDo1IH0KK2Z1bmN0aW9uICJlZjNhIiB7IDU6MjUgLSAxMjo5IH0KK2Z1bmN0aW9uICJlZjNiIiB7
IDc6MjkgLSAxMDoxMyB9CitldmFsIHsgMToxIC0gMTo1NiB9CitldmFsIHsgMToxIC0gMToyMjUg
fQorZnVuY3Rpb24gImV4MyIgeyAxOjU5IC0gMToyMTcgfQorZnVuY3Rpb24gImV4M2EiIHsgMTo4
OCAtIDE6MjA3IH0KK2Z1bmN0aW9uICJleDNiIiB7IDE6MTE4IC0gMToxOTcgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZXZhbCB7IDE6MSAtIDE3OjggfQorZnVuY3Rpb24gImVmaTMiIHsgNDoyMSAt
IDE1OjUgfQorZnVuY3Rpb24gImVmaTNhIiB7IDY6MjYgLSAxMzo5IH0KK2Z1bmN0aW9uICJlZmkz
YiIgeyA4OjMwIC0gMTE6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZXZhbCB7IDE6MSAtIDE6
MjM0IH0KK2Z1bmN0aW9uICJleGkzIiB7IDE6NjAgLSAxOjIyNSB9CitmdW5jdGlvbiAiZXhpM2Ei
IHsgMTo5MSAtIDE6MjE0IH0KK2Z1bmN0aW9uICJleGkzYiIgeyAxOjEyMyAtIDE6MjAzIH0KK2V2
YWwgeyAxOjEgLSAxOjU2IH0KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1s
b2NhdGlvbnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXN0
YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2Rv
bS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKworICAgIC8vIENvbnZl
bmllbmNlIGZ1bmN0aW9uIHNvIHRoYXQgc2NyaXB0LXRlc3RzL3NjcmlwdC1zdGFydC1lbmQtbG9j
YXRpb25zLmpzCisgICAgLy8gY2FuIGJlIGxlc3MgdmVyYm9zZSBmb3IgY2FzZXMgd2hlcmUgd2Ug
aGF2ZSBhIGZ1bmN0aW9uIHdob3NlIGJvdW5kcyB3ZQorICAgIC8vIHdhbnQgdG8gZHVtcC4KKyAg
ICBmdW5jdGlvbiBkdW1wKGZ1bmMpIHsKKyAgICAgICAgZGVidWcod2luZG93LmludGVybmFscy5w
YXJzZXJNZXRhRGF0YShmdW5jKSk7CisgICAgfQorCisgICAgZGVidWcod2luZG93LmludGVybmFs
cy5wYXJzZXJNZXRhRGF0YSgpKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmpzIj48L3NjcmlwdD4gCis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3NjcmlwdC1zdGFy
dC1lbmQtbG9jYXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9zY3Jp
cHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25z
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ3IEBACit2YXIgdmFsdWUgPSAxMDsgdmFy
IHN1bSA9IDE7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7IGZ1bmN0
aW9uIGYwKCkgeyBkdW1wKGYwKTsgZnVuY3Rpb24gZjBhKCkgeyBkdW1wKGYwYSk7IGZ1bmN0aW9u
IGYwYigpIHsgZHVtcChmMGIpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0gZjBiKCk7IH0gZjBhKCk7IH0gZjAoKTsgIHZh
ciB4MCA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKHgwKTt2YXIgeDBhID0gZnVuY3Rpb24oKSB7IGR1
bXAoeDBhKTsgdmFyIHgwYiA9IGZ1bmN0aW9uKCkgeyBkdW1wKHgwYik7IHN1bSArPSB2YWx1ZTsg
ZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRh
KCkpOycpOyB9OyB4MGIoKTsgfTsgeDBhKCk7IH07IHgwKCk7CisKK2Z1bmN0aW9uIGdsb2JhbEZ1
bmMoKSB7CisgICAgdmFyIGFycmF5ID0gWzJdOworICAgIHZhciBzdW0gPSAwOworICAgIHZhciB2
YWx1ZSA9IDU7CisKKyAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBmdW5jdGlvbjoK
KyAgICBmdW5jdGlvbiBmMShrZXkpIHsgZHVtcChmMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3Vt
ICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9
CisgICAgZjEoKTsKKworICAgIGZ1bmN0aW9uIGYyKGtleSkgeworICAgICAgICBkdW1wKGYyKTsK
KyAgICAgICAgZnVuY3Rpb24gZjJhKCkgeyBkdW1wKGYyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgn
c3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycp
OyB9CisgICAgICAgIGYyYSgpOworICAgIH0KKyAgICBmMigpOworCisgICAgZnVuY3Rpb24gZjMo
a2V5KSB7CisgICAgICAgIGR1bXAoZjMpOworICAgICAgICBmdW5jdGlvbiBmM2EoKSB7CisgICAg
ICAgICAgICBkdW1wKGYzYSk7CisgICAgICAgICAgICBmdW5jdGlvbiBmM2IoKSB7CisgICAgICAg
ICAgICAgICAgZHVtcChmM2IpOworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9
IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGYzYigpOworICAgICAgICB9CisgICAgICAgIGYzYSgpOworICAgIH0KKyAgICBmMygpOwor
CisgICAgZnVuY3Rpb24gZjQoa2V5KSB7IGR1bXAoZjQpOyBmdW5jdGlvbiBmNGEoKSB7fTsgZHVt
cChmNGEpOyBmNGEoKTsgfQorICAgIGY0KCk7CisgICAgZnVuY3Rpb24gZjUoa2V5KSB7IGR1bXAo
ZjUpOyBmdW5jdGlvbiBmNWEoKSB7IGR1bXAoZjVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07
IGY1YSgpOyB9CisgICAgZjUoKTsKKyAgICBmdW5jdGlvbiBmNihrZXkpIHsgZHVtcChmNik7IGZ1
bmN0aW9uIGY2YSgpIHsgZHVtcChmNmEpOyBmdW5jdGlvbiBmNmIoKSB7IGR1bXAoZjZiKTsgc3Vt
ICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFy
c2VyTWV0YURhdGEoKSk7Jyk7IH07IGY2YigpOyB9OyBmNmEoKTsgfQorICAgIGY2KCk7CisKKyAg
ICAvLyBJbmRlbnRlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBmdW5jdGlvbjoKKyAgICB7
CisgICAgICAgIGZ1bmN0aW9uIGZpMShrZXkpIHsgZHVtcChmaTEpOyBzdW0gKz0gdmFsdWU7IGV2
YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgp
KTsnKTsgfQorICAgICAgICBmaTEoKTsKKworICAgICAgICBmdW5jdGlvbiBmaTIoa2V5KSB7Cisg
ICAgICAgICAgICBkdW1wKGZpMik7CisgICAgICAgICAgICBmdW5jdGlvbiBmaTJhKCkgeyBkdW1w
KGZpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgICAgICAgICAgZmkyYSgpOworICAg
ICAgICB9CisgICAgICAgIGZpMigpOworCisgICAgICAgIGZ1bmN0aW9uIGZpMyhrZXkpIHsKKyAg
ICAgICAgICAgIGR1bXAoZmkzKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZpM2EoKSB7CisgICAg
ICAgICAgICAgICAgZHVtcChmaTNhKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaTNiKCkg
eworICAgICAgICAgICAgICAgICAgICBkdW1wKGZpM2IpOworICAgICAgICAgICAgICAgICAgICBz
dW0gKz0gdmFsdWU7IHN1bSAqPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZXZhbCgnc3Vt
ICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaTNiKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmaTNhKCk7CisgICAgICAgIH0KKyAgICAgICAgZmkzKCk7CisKKyAgICAg
ICAgZnVuY3Rpb24gZmk0KGtleSkgeyBkdW1wKGZpNCk7IGZ1bmN0aW9uIGZpNGEoKSB7fTsgZHVt
cChmaTRhKTsgZmk0YSgpOyB9CisgICAgICAgIGZpNCgpOworICAgICAgICBmdW5jdGlvbiBmaTUo
a2V5KSB7IGR1bXAoZmk1KTsgZnVuY3Rpb24gZmk1YSgpIHsgZHVtcChmaTVhKTsgc3VtICs9IHZh
bHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0
YURhdGEoKSk7Jyk7IH07IGZpNWEoKTsgfQorICAgICAgICBmaTUoKTsKKyAgICAgICAgZnVuY3Rp
b24gZmk2KGtleSkgeyBkdW1wKGZpNik7IGZ1bmN0aW9uIGZpNmEoKSB7IGR1bXAoZmk2YSk7IGZ1
bmN0aW9uIGZpNmIoKSB7IGR1bXAoZmk2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBmaTZi
KCk7IH07IGZpNmEoKTsgfQorICAgICAgICBmaTYoKTsKKyAgICB9CisKKyAgICAvLyBGdW5jdGlv
biBleHByZXNzaW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHZhciB4MSA9IGZ1bmN0aW9uKGtleSkg
eyBkdW1wKHgxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICB4MSgpOworCisgICAgdmFy
IHgyID0gZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIGR1bXAoeDIpOworICAgICAgICB2YXIgeDJh
ID0gZnVuY3Rpb24oKSB7IGR1bXAoeDJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICAg
ICAgeDJhKCk7CisgICAgfQorICAgIHgyKCk7CisKKyAgICB2YXIgeDMgPSBmdW5jdGlvbihrZXkp
IHsKKyAgICAgICAgZHVtcCh4Myk7CisgICAgICAgIHZhciB4M2EgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGR1bXAoeDNhKTsKKyAgICAgICAgICAgIHZhciB4M2IgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBkdW1wKHgzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVl
OworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHgz
YigpOworICAgICAgICB9CisgICAgICAgIHgzYSgpOworICAgIH0KKyAgICB4MygpOworCisgICAg
dmFyIHg0ID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoeDQpOyB2YXIgeDRhID0gZnVuY3Rpb24oKSB7
fTsgZHVtcCh4NGEpOyB4NGEoKTsgfQorICAgIHg0KCk7CisgICAgdmFyIHg1ID0gZnVuY3Rpb24o
a2V5KSB7IGR1bXAoeDUpOyB2YXIgeDVhID0gZnVuY3Rpb24oKSB7IGR1bXAoeDVhKTsgc3VtICs9
IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2Vy
TWV0YURhdGEoKSk7Jyk7IH07IHg1YSgpOyB9CisgICAgeDUoKTsKKyAgICB2YXIgeDYgPSBmdW5j
dGlvbihrZXkpIHsgZHVtcCh4Nik7IHZhciB4NmEgPSBmdW5jdGlvbigpIHsgZHVtcCh4NmEpOyB2
YXIgeDZiID0gZnVuY3Rpb24oKSB7IGR1bXAoeDZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07
IHg2YigpOyB9OyB4NmEoKTsgfQorICAgIHg2KCk7CisKKyAgICAvLyBJbmRlbnRlZCBmdW5jdGlv
biBleHByZXNzaW9ucyBpbiBhIGZ1bmN0aW9uOgorICAgIHsKKyAgICAgICAgdmFyIHhpMSA9IGZ1
bmN0aW9uKGtleSkgeyBkdW1wKHhpMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAg
IHhpMSgpOworCisgICAgICAgIHZhciB4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAg
IGR1bXAoeGkyKTsKKyAgICAgICAgICAgIHZhciB4aTJhID0gZnVuY3Rpb24oKSB7IGR1bXAoeGky
YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAgICAgICB4aTJhKCk7CisgICAgICAg
IH0KKyAgICAgICAgeGkyKCk7CisKKyAgICAgICAgdmFyIHhpMyA9IGZ1bmN0aW9uKGtleSkgewor
ICAgICAgICAgICAgZHVtcCh4aTMpOworICAgICAgICAgICAgdmFyIHhpM2EgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBkdW1wKHhpM2EpOworICAgICAgICAgICAgICAgIHZhciB4aTNi
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGR1bXAoeGkzYik7CisgICAgICAg
ICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0
YURhdGEoKSk7Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHhpM2IoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhpM2EoKTsKKyAgICAgICAgfQorICAgICAgICB4
aTMoKTsKKworICAgICAgICB2YXIgeGk0ID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoeGk0KTsgdmFy
IHhpNGEgPSBmdW5jdGlvbigpIHt9OyBkdW1wKHhpNGEpOyB4aTRhKCk7IH0KKyAgICAgICAgeGk0
KCk7CisgICAgICAgIHZhciB4aTUgPSBmdW5jdGlvbihrZXkpIHsgZHVtcCh4aTUpOyB2YXIgeGk1
YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKHhpNWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2
YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgeGk1
YSgpOyB9CisgICAgICAgIHhpNSgpOworICAgICAgICB2YXIgeGk2ID0gZnVuY3Rpb24oa2V5KSB7
IGR1bXAoeGk2KTsgdmFyIHhpNmEgPSBmdW5jdGlvbigpIHsgZHVtcCh4aTZhKTsgdmFyIHhpNmIg
PSBmdW5jdGlvbigpIHsgZHVtcCh4aTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IHhpNmIo
KTsgfTsgeGk2YSgpOyB9CisgICAgICAgIHhpNigpOworICAgIH0KKworICAgIC8vIEFubm95bW91
cyBmdW5jdGlvbiBpbiBhIGZ1bmN0aW9uOgorICAgIHZhciBmb3JFYWNoID0gWyBdLmZvckVhY2g7
CisgICAgdmFyIGJvdW5kRm9yRWFjaCA9IGZvckVhY2guYmluZChhcnJheSwgZnVuY3Rpb24oa2V5
KSB7CisgICAgICAgIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Cisg
ICAgICAgIHN1bSArPSB2YWx1ZTsKKyAgICAgICAgc3VtICo9IHZhbHVlOworICAgICAgICBldmFs
KCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7
Jyk7CisgICAgfSk7CisgICAgYm91bmRGb3JFYWNoKCk7CisKK30KK2dsb2JhbEZ1bmMoKTsKKwor
ZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRh
KCkpOycpOworCisvLyBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zOgorZnVuY3Rpb24gZ2Yx
KGtleSkgeyBkdW1wKGdmMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CitnZjEoKTsKKworZnVu
Y3Rpb24gZ2YyKGtleSkgeworICAgIGR1bXAoZ2YyKTsKKyAgICBmdW5jdGlvbiBnZjJhKCkgeyBk
dW1wKGdmMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93
LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgIGdmMmEoKTsKK30KK2dmMigp
OworCitmdW5jdGlvbiBnZjMoa2V5KSB7CisgICAgZHVtcChnZjMpOworICAgIGZ1bmN0aW9uIGdm
M2EoKSB7CisgICAgICAgIGR1bXAoZ2YzYSk7CisgICAgICAgIGZ1bmN0aW9uIGdmM2IoKSB7Cisg
ICAgICAgICAgICBkdW1wKGdmM2IpOworICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0g
dmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7CisgICAgICAgIH0KKyAgICAgICAgZ2YzYigpOwor
ICAgIH0KKyAgICBnZjNhKCk7Cit9CitnZjMoKTsKKworZnVuY3Rpb24gZ2Y0KGtleSkgeyBkdW1w
KGdmNCk7IGZ1bmN0aW9uIGdmNGEoKSB7fTsgZHVtcChnZjRhKTsgZ2Y0YSgpOyB9CitnZjQoKTsK
K2Z1bmN0aW9uIGdmNShrZXkpIHsgZHVtcChnZjUpOyBmdW5jdGlvbiBnZjVhKCkgeyBkdW1wKGdm
NWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ2Y1YSgpOyB9CitnZjUoKTsKK2Z1bmN0aW9u
IGdmNihrZXkpIHsgZHVtcChnZjYpOyBmdW5jdGlvbiBnZjZhKCkgeyBkdW1wKGdmNmEpOyBmdW5j
dGlvbiBnZjZiKCkgeyBkdW1wKGdmNmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1
ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ2Y2Yigp
OyB9OyBnZjZhKCk7IH0KK2dmNigpOworCisvLyBJbmRlbnRlZCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMgaW4gYSBmdW5jdGlvbjoKK3sKKyAgICBmdW5jdGlvbiBnZmkxKGtleSkgeyBkdW1wKGdmaTEp
OyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFs
cy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgIGdmaTEoKTsKKworICAgIGZ1bmN0aW9uIGdm
aTIoa2V5KSB7CisgICAgICAgIGR1bXAoZ2ZpMik7CisgICAgICAgIGZ1bmN0aW9uIGdmaTJhKCkg
eyBkdW1wKGdmaTJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICAgICAgZ2ZpMmEoKTsK
KyAgICB9CisgICAgZ2ZpMigpOworCisgICAgZnVuY3Rpb24gZ2ZpMyhrZXkpIHsKKyAgICAgICAg
ZHVtcChnZmkzKTsKKyAgICAgICAgZnVuY3Rpb24gZ2ZpM2EoKSB7CisgICAgICAgICAgICBkdW1w
KGdmaTNhKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGdmaTNiKCkgeworICAgICAgICAgICAgICAg
IGR1bXAoZ2ZpM2IpOworICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVl
OworICAgICAgICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdm
aTNiKCk7CisgICAgICAgIH0KKyAgICAgICAgZ2ZpM2EoKTsKKyAgICB9CisgICAgZ2ZpMygpOwor
CisgICAgZnVuY3Rpb24gZ2ZpNChrZXkpIHsgZHVtcChnZmk0KTsgZnVuY3Rpb24gZ2ZpNGEoKSB7
fTsgZHVtcChnZmk0YSk7IGdmaTRhKCk7IH0KKyAgICBnZmk0KCk7CisgICAgZnVuY3Rpb24gZ2Zp
NShrZXkpIHsgZHVtcChnZmk1KTsgZnVuY3Rpb24gZ2ZpNWEoKSB7IGR1bXAoZ2ZpNWEpOyBzdW0g
Kz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJz
ZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ2ZpNWEoKTsgfQorICAgIGdmaTUoKTsKKyAgICBmdW5jdGlv
biBnZmk2KGtleSkgeyBkdW1wKGdmaTYpOyBmdW5jdGlvbiBnZmk2YSgpIHsgZHVtcChnZmk2YSk7
IGZ1bmN0aW9uIGdmaTZiKCkgeyBkdW1wKGdmaTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07
IGdmaTZiKCk7IH07IGdmaTZhKCk7IH0KKyAgICBnZmk2KCk7Cit9CisKKy8vIEZ1bmN0aW9uIGV4
cHJlc3Npb25zIGluIGEgZnVuY3Rpb246Cit2YXIgZ3gxID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAo
Z3gxKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KK2d4MSgpOworCit2YXIgZ3gyID0gZnVuY3Rp
b24oa2V5KSB7CisgICAgZHVtcChneDIpOworICAgIHZhciBneDJhID0gZnVuY3Rpb24oKSB7IGR1
bXAoZ3gyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ3gyYSgpOworfQorZ3gyKCk7
CisKK3ZhciBneDMgPSBmdW5jdGlvbihrZXkpIHsKKyAgICBkdW1wKGd4Myk7CisgICAgdmFyIGd4
M2EgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZHVtcChneDNhKTsKKyAgICAgICAgdmFyIGd4M2Ig
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGR1bXAoZ3gzYik7CisgICAgICAgICAgICBzdW0g
Kz0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5p
bnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7CisgICAgICAgIH0KKyAgICAgICAgZ3gzYigp
OworICAgIH0KKyAgICBneDNhKCk7Cit9CitneDMoKTsKKwordmFyIGd4NCA9IGZ1bmN0aW9uKGtl
eSkgeyBkdW1wKGd4NCk7IHZhciBneDRhID0gZnVuY3Rpb24oKSB7fTsgZHVtcChneDRhKTsgZ3g0
YSgpOyB9CitneDQoKTsKK3ZhciBneDUgPSBmdW5jdGlvbihrZXkpIHsgZHVtcChneDUpOyB2YXIg
Z3g1YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGd4NWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsg
Z3g1YSgpOyB9CitneDUoKTsKK3ZhciBneDYgPSBmdW5jdGlvbihrZXkpIHsgZHVtcChneDYpOyB2
YXIgZ3g2YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGd4NmEpOyB2YXIgZ3g2YiA9IGZ1bmN0aW9uKCkg
eyBkdW1wKGd4NmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ3g2YigpOyB9OyBneDZhKCk7
IH0KK2d4NigpOworCisvLyBJbmRlbnRlZCBmdW5jdGlvbiBleHByZXNzaW9ucyBpbiBhIGZ1bmN0
aW9uOgoreworICAgIHZhciBneGkxID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoZ3hpMSk7IHN1bSAr
PSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNl
ck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ3hpMSgpOworCisgICAgdmFyIGd4aTIgPSBmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgZHVtcChneGkyKTsKKyAgICAgICAgdmFyIGd4aTJhID0gZnVuY3Rp
b24oKSB7IGR1bXAoZ3hpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVi
dWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgICAgICBneGky
YSgpOworICAgIH0KKyAgICBneGkyKCk7CisKKyAgICB2YXIgZ3hpMyA9IGZ1bmN0aW9uKGtleSkg
eworICAgICAgICBkdW1wKGd4aTMpOworICAgICAgICB2YXIgZ3hpM2EgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGR1bXAoZ3hpM2EpOworICAgICAgICAgICAgdmFyIGd4aTNiID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgZHVtcChneGkzYik7CisgICAgICAgICAgICAgICAgc3Vt
ICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZ3hpM2IoKTsKKyAgICAgICAgfQorICAgICAgICBneGkzYSgp
OworICAgIH0KKyAgICBneGkzKCk7CisKKyAgICB2YXIgZ3hpNCA9IGZ1bmN0aW9uKGtleSkgeyBk
dW1wKGd4aTQpOyB2YXIgZ3hpNGEgPSBmdW5jdGlvbigpIHt9OyBkdW1wKGd4aTRhKTsgZ3hpNGEo
KTsgfQorICAgIGd4aTQoKTsKKyAgICB2YXIgZ3hpNSA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKGd4
aTUpOyB2YXIgZ3hpNWEgPSBmdW5jdGlvbigpIHsgZHVtcChneGk1YSk7IHN1bSArPSB2YWx1ZTsg
ZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRh
KCkpOycpOyB9OyBneGk1YSgpOyB9CisgICAgZ3hpNSgpOworICAgIHZhciBneGk2ID0gZnVuY3Rp
b24oa2V5KSB7IGR1bXAoZ3hpNik7IHZhciBneGk2YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGd4aTZh
KTsgdmFyIGd4aTZiID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3hpNmIpOyBzdW0gKz0gdmFsdWU7IGV2
YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgp
KTsnKTsgfTsgZ3hpNmIoKTsgfTsgZ3hpNmEoKTsgfQorICAgIGd4aTYoKTsKK30KKworLy8gR2xv
YmFsIGFubm95bW91cyBmdW5jdGlvbjoKK3ZhciBhcnJheSA9IFsyXTsKK3ZhciBnZm9yRWFjaCA9
IFsgXS5mb3JFYWNoOwordmFyIGdib3VuZEZvckVhY2ggPSBnZm9yRWFjaC5iaW5kKGFycmF5LCBm
dW5jdGlvbihrZXkpIHsKKyAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRh
KCkpOworICAgIHN1bSArPSB2YWx1ZTsKKyAgICBzdW0gKj0gdmFsdWU7CisgICAgZXZhbCgnc3Vt
ICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOwor
fSk7CitnYm91bmRGb3JFYWNoKCk7CisKK2V2YWwoIiBcbiIgKworIiAgICBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpO1xuIiArCisiICAgIGZ1bmN0aW9uIGVmMygpIHtc
biIgKworIiAgICAgICAgZHVtcChlZjMpO1xuIiArCisiICAgICAgICBmdW5jdGlvbiBlZjNhKCkg
e1xuIiArCisiICAgICAgICAgICAgZHVtcChlZjNhKTtcbiIgKworIiAgICAgICAgICAgIGZ1bmN0
aW9uIGVmM2IoKSB7XG4iICsKKyIgICAgICAgICAgICAgICAgZHVtcChlZjNiKTtcbiIgKworIiAg
ICAgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
cGFyc2VyTWV0YURhdGEoKSk7Jyk7XG4iICsKKyIgICAgICAgICAgICB9XG4iICsKKyIgICAgICAg
ICAgICBlZjNiKCk7XG4iICsKKyIgICAgICAgIH1cbiIgKworIiAgICAgICAgZWYzYSgpO1xuIiAr
CisiICAgIH1cbiIgKworIlxuIiArCisiZWYzKCk7IgorKTsKKworZXZhbCgiIGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7IGZ1bmN0aW9uIGV4MygpIHsgZHVtcChleDMp
OyBmdW5jdGlvbiBleDNhKCkgeyBkdW1wKGV4M2EpOyBmdW5jdGlvbiBleDNiKCkgeyBkdW1wKGV4
M2IpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0
YURhdGEoKSk7Jyk7IH0gZXgzYigpOyB9IGV4M2EoKTsgfSBleDMoKTsiKTsKKworeworICAgIGV2
YWwoIiBcbiIgKworICAgICAgICAgIiAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1l
dGFEYXRhKCkpO1xuIiArCisgICAgICAgICAiICAgIC8vIFRlc3QgaW5kZW50ZWQgZnVuY3Rpb24g
d2l0aCBpbm5lciBmdW5jdGlvbnMuIFxuIiArCisgICAgICAgICAiICAgIGZ1bmN0aW9uIGVmaTMo
KSB7XG4iICsKKyAgICAgICAgICIgICAgICAgIGR1bXAoZWZpMyk7XG4iICsKKyAgICAgICAgICIg
ICAgICAgIGZ1bmN0aW9uIGVmaTNhKCkge1xuIiArCisgICAgICAgICAiICAgICAgICAgICAgZHVt
cChlZmkzYSk7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBmdW5jdGlvbiBlZmkzYigpIHtc
biIgKworICAgICAgICAgIiAgICAgICAgICAgICAgICBkdW1wKGVmaTNiKTtcbiIgKworICAgICAg
ICAgIiAgICAgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICB9
XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICBlZmkzYigpO1xuIiArCisgICAgICAgICAiICAg
ICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgIGVmaTNhKCk7XG4iICsKKyAgICAgICAgICIg
ICAgfVxuIiArCisgICAgICAgICAiXG4iICsKKyAgICAgICAgICJlZmkzKCk7IgorICAgICAgICAp
OworCisgICAgZXZhbCgiIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7
IGZ1bmN0aW9uIGV4aTMoKSB7IGR1bXAoZXhpMyk7IGZ1bmN0aW9uIGV4aTNhKCkgeyBkdW1wKGV4
aTNhKTsgZnVuY3Rpb24gZXhpM2IoKSB7IGR1bXAoZXhpM2IpOyBldmFsKCdzdW0gKz0gdmFsdWU7
IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0gZXhpM2IoKTsg
fSBleGkzYSgpOyB9IGV4aTMoKTsiKTsKK30K
</data>
<flag name="commit-queue"
          id="240021"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217262</attachid>
            <date>2013-11-18 18:48:42 -0800</date>
            <delta_ts>2013-11-19 12:06:44 -0800</delta_ts>
            <desc>patch 6: addressed all feedback + many bug fixes.</desc>
            <filename>bug-124245c.patch</filename>
            <type>text/plain</type>
            <size>124859</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NDc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBA
QAorMjAxMy0xMS0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHRyYWNraW5nIG9mIGVuZENvbHVtbiBmb3IgRXhlY3V0YWJsZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQyNDUuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gRml4ZWQgY29tcHV0YXRpb24g
b2YgY29sdW1ucyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgc3RhcnRDb2x1bW4gZnJvbQorICAg
ICAgICAgICA8c2NyaXB0PiB0YWdzLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIG9ubHkgY29tcHV0aW5n
IHRoZSBjb2x1bW4gcmVsYXRpdmUKKyAgICAgICAgICAgdG8gdGhlIGNoYXIgYWZ0ZXIgdGhlIDxz
Y3JpcHQ+IHRhZy4gTm93LCB0aGUgY29sdW1uIG51bWJlciB0aGF0IEpTQworICAgICAgICAgICBj
b21wdXRlcyBpcyBhbHdheXMgdGhlIGNvbHVtbiBudW1iZXIgeW91J2xsIHNlZSB3aGVuIHZpZXdp
bmcgdGhlIHNvdXJjZQorICAgICAgICAgICBpbiBhIHRleHQgZWRpdG9yIChhc3N1bWluZyB0aGUg
Zmlyc3QgY29sdW1uIHBvc2l0aW9uIGlzIDEsIG5vdCAwKS4KKworICAgICAgICAyLiBQcmV2aW91
c2x5LCB1bmxpbmtlZEV4ZWN1dGFibGVzIGtlcHQgdGhlIGEgYmFzZS0xIHN0YXJ0Q29sdW1uIGZv
cgorICAgICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZXMgYW5kIEV2YWxFeGVjdXRhYmxlcywgYnV0
IHVzZXMgYmFzZS0wIGNvbHVtbnMgZm9yCisgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZXMu
IFRoaXMgaGFzIGJlZW4gZml4ZWQgc28gdGhhdCB0aGV5IGFsbCB1c2UgYmFzZS0wCisgICAgICAg
ICAgIGNvbHVtbnMuIFdoZW4gdGhlIGV4ZWN1dGFibGUgZ2V0cyBsaW5rZWQsIHRoZSBjb2x1bW4g
aXMgYWRqdXN0ZWQgaW50bworICAgICAgICAgICBhIGJhc2UtMSB2YWx1ZS4KKworICAgICAgICAz
LiBJbiB0aGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUsIHJlbmFtZWQgbV9mdW5jdGlvblN0
YXJ0T2Zmc2V0IHRvCisgICAgICAgICAgIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCBiZWNh
dXNlIGl0IGFjdHVhbGx5IHBvaW50cyB0byB0aGUgc3RhcnQKKyAgICAgICAgICAgY29sdW1uIGlu
IHRoZSBuYW1lIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorCisgICAgICAgICAg
IFNpbWlsYXJseSwgcmVuYW1lZCBtX2Z1bmN0aW9uU3RhcnRDb2x1bW4gdG8gbV91bmxpbmtlZEJv
ZHlTdGFydENvbHVtbgorICAgICAgICAgICBiZWNhdXNlIGl0IHBvaW50cyB0byB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIGluIHRoZSBmdW5jdGlvbiBib2R5LiBUaGlzIGlzCisgICAgICAgICAgIHVzdWFs
bHkgJ3snIGV4Y2VwdCBmb3IgZnVuY3Rpb25zIGNyZWF0ZWQgZnJvbSAiZ2xvYmFsIGNvZGUiIHdo
aWNoCisgICAgICAgICAgIGV4Y2x1ZGVzIGl0cyBicmFjZXMuIFNlZSBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmZyb21HbG9iYWxDb2RlKCkuCisKKyAgICAgICAgICAgICAgIFRoZSBleGNsdXNpb24gb2Yg
YnJhY2VzIGZvciB0aGUgZ2xvYmFsIGNvZGUgY2FzZSBpcyBuZWVkZWQgc28gdGhhdAorICAgICAg
ICAgICBjb21wdXRlZCBzdGFydCBhbmQgZW5kIGNvbHVtbnMgd2lsbCBtb3JlIHJlYWRpbHkgbWFw
IHRvIHdoYXQgYSBKUworICAgICAgICAgICBkZXZlbG9wZXIgd291bGQgZXhwZWN0IHRoZW0gdG8g
YmUuIE90aGVyd2lzZSwgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUKKyAgICAgICAgICAgZnVuY3Rp
b24gc291cmNlIHdpbGwgbm90IGJlIDEgKGluY2x1ZGVzIHByZXBlbmRlZCBjaGFyYWN0ZXJzIGFk
ZGVkIGluCisgICAgICAgICAgIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRW5hYmxlZENo
ZWNrKCkpLgorCisgICAgICAgICAgIEFsc28sIHNpbWlsYXJseSwgYSBtX3VubGlua2VkQm9keUVu
ZENvbHVtbiBoYXMgYmVlbiBhZGRlZCB0byB0cmFjayB0aGUKKyAgICAgICAgICAgZW5kIGNvbHVt
biBvZiB0aGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuCisKKyAgICAgICAgNC4gRm9yIHVu
bGlua2VkIGV4ZWN1dGFibGVzLCBlbmQgY29sdW1uIHZhbHVlcyBhcmUgZWl0aGVyOgorICAgICAg
ICAgICBhLiBSZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgbGluZSBpZiAobGFzdCBs
aW5lICE9IGZpcnN0IGxpbmUpLgorICAgICAgICAgICBiLiBSZWxhdGl2ZSB0byB0aGUgc3RhcnQg
Y29sdW1uIHBvc2l0aW9uIGlmIChsYXN0IGxpbmUgPT0gZmlyc3QgbGluZSkuCisKKyAgICAgICAg
ICAgVGhlIHNlY29uZCBjYXNlIGlzIG5lZWRlZCBzbyB0aGF0IHdlIGNhbiBhZGQgYW4gYXBwcm9w
cmlhdGUgdG8gdGhlIGVuZAorICAgICAgICAgICBjb2x1bW4gdmFsdWUgKGp1c3QgbGlrZSB3ZSBk
byBmb3IgdGhlIHN0YXJ0IGNvbHVtbikgd2hlbiB3ZSBsaW5rIHRoZQorICAgICAgICAgICBleGVj
dXRhYmxlLgorCisgICAgICAgIDUuIFRoaXMgaXMgbm90IG5ldyB0byB0aGlzIHBhdGNoLCBidXQg
aXQgd29ydGggbm90aW5nIHRoYXQgdGhlIGxpbmVDb3VudAorICAgICAgICAgICB2YWx1ZXMgdXNl
ZCB0aHJvdWdoIHRoaXMgcGF0Y2ggaGFzIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKyAgICAgICAg
ICAgLSBhIGxpbmVDb3VudCBvZiAwIG1lYW5zIHRoZSBzb3VyY2UgZm9yIHRoaXMgY29kZSBibG9j
ayBpcyBvbiAxIGxpbmUuCisgICAgICAgICAgIC0gYSBsaW5lQ291bnQgb2YgTiBtZWFucyB0aGVy
ZSBhcmUgTiArIGwgbGluZXMgb2Ygc291cmNlLgorCisgICAgICAgICAgIFRoaXMgaW50ZXJwcmV0
YXRpb24gaXMgamFua3ksIGJ1dCB3YXMgcHJlc2VudCBiZWZvcmUgdGhpcyBwYXRjaC4gV2UgY2Fu
CisgICAgICAgICAgIGNsZWFuIHRoYXQgdXAgbGF0ZXIgaW4gYSBub3RoZXIgcGF0Y2guCisKKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgIC0gSW4gb3JkZXIgdG8gaW1wbGVtZW50IFdlYkNvcmU6OkludGVybmFsczo6cGFyc2VyTWV0
YURhdGEoKSwgd2UgbmVlZCB0bworICAgICAgICAgIG1vdmUgc29tZSBzZWVtaW5nbHkgdW5yZWxh
dGVkIGhlYWRlciBmaWxlcyBmcm9tIHRoZSBQcm9qZWN0IHNlY3Rpb24gdG8KKyAgICAgICAgICB0
aGUgUHJpdmF0ZSBzZWN0aW9uIHNvIHRoYXQgdGhleSBjYW4gYmUgI2luY2x1ZGUnZCBieSB0aGUg
Zm9yd2FyZGluZworICAgICAgICAgIENvZGVCbG9jay5oIGZyb20gV2ViQ29yZS4KKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJj
ZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAtIG1faXNG
cm9tR2xvYmFsQ29kZSBpcyBuZWVkZWQgdG8gc3VwcG9ydCB0aGUgZXhjbHVzaW9uIG9mIHRoZSBv
cGVuIGJyYWNlIC8KKyAgICAgICAgICBwcmVwZW5kZWQgY29kZSBmb3IgZnVuY3Rpb25zIGNyZWF0
ZWQgZnJvbSAiZ2xvYmFsIGNvZGUiLgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6bGluayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Ojpmcm9tR2xvYmFsQ29kZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZEZ1bmN0aW9uTmFt
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlu
a2VkQm9keVN0YXJ0Q29sdW1uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OnVubGlua2VkQm9keUVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpyZWNvcmRQYXJzZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpyZWNvcmRQYXJzZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpl
bmRDb2x1bW4pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHBh
cnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmN0
aW9uQm9keSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnNldEZ1bmN0aW9uTmFtZVN0YXJ0
KToKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjo6OnNoaWZ0TGlu
ZVRlcm1pbmF0b3IpOgorICAgICAgICAtIFJlbW92ZWQgYW4gdW51c2VkIFNvdXJjZUNvZGUgTGV4
ZXI8VD46OnNvdXJjZUNvZGUoKSBmdW5jdGlvbi4KKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuaDoK
KyAgICAgICAgKEpTQzo6TGV4ZXI6OnBvc2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkKToKKyAgICAg
ICAgKEpTQzo6TGV4ZXI6OnByZXZUZXJtaW5hdG9yKToKKyAgICAgICAgLSBBZGRlZCB0cmFja2lu
ZyBvZiBtX3Bvc2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkIGluIHRoZSBMZXhlciB0byBlbmFibGUg
dXMKKyAgICAgICAgICB0byBleGNsdWRlIHRoZSBjbG9zZSBicmFjZSAvIGFwcGVuZGVkIGNvZGUg
Zm9yIGZ1bmN0aW9ucyBjcmVhdGVkIGZyb20gImdsb2JhbAorICAgICAgICAgIGNvZGUiLgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9n
cmFtTm9kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uQm9keU5vZGU6OnNldEVuZFBvc2l0aW9uKToKKyAgICAgICAgLSBzZXRFbmRQb3NpdGlv
bigpIGlzIG5lZWRlZCB0byBmaXhlZCB1cCB0aGUgZW5kIHBvc2l0aW9uIHNvIHRoYXQgd2UgY2Fu
CisgICAgICAgICAgZXhjbHVkZSB0aGUgY2xvc2UgYnJhY2UgLyBhcHBlbmRlZCBjb2RlIGZvciBm
dW5jdGlvbnMgY3JlYXRlZCBmcm9tICJnbG9iYWwKKyAgICAgICAgICBjb2RlIi4KKyAgICAgICAg
KiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OnN0YXJ0Q29sdW1u
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6
OkV2YWxOb2RlOjpzdGFydENvbHVtbik6CisgICAgICAgIChKU0M6OkV2YWxOb2RlOjplbmRDb2x1
bW4pOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpzZXRGdW5jdGlvbk5hbWVTdGFy
dCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OmZ1bmN0aW9uTmFtZVN0YXJ0KToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZW5kQ29sdW1uKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwb3NpdGlvbkJlZm9yZUxhc3RMaW5lRmVlZCk6
CisgICAgICAgIChKU0M6Ojo6cGFyc2UpOgorICAgICAgICAtIFN1YnRyYWN0ZWQgMSBmcm9tIHN0
YXJ0Q29sdW1uIGhlcmUgdG8ga2VlcCB0aGUgbm9kZSBjb2x1bW4gdmFsdWVzIGNvbnNpc3RlbnRs
eQorICAgICAgICAgIGJhc2UtMC4gU2VlIG5vdGUgMiBhYm92ZS4KKyAgICAgICAgKEpTQzo6cGFy
c2UpOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0p
OgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRh
eENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNr
ZXI6OnNldEZ1bmN0aW9uTmFtZVN0YXJ0KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0R2xvYmFsQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUNhY2hlOjpnZXRFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpn
ZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZSk6CisgICAgICAgICogcnVudGltZS9D
b2RlQ2FjaGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAo
SlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFsRXhl
Y3V0YWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRh
YmxlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmVuZENvbHVtbik6CisgICAgICAgIChK
U0M6OlNjcmlwdEV4ZWN1dGFibGU6OnJlY29yZFBhcnNlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmJvZHlFeGNsdWRlc0JyYWNlcyk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjppbnNlcnRTZW1pY29sb25JZk5lZWRlZCk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlUHJvZ3JhbUNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKToK
KwogMjAxMy0xMS0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBUk02NCBDUkFTSDogRGVidWcgYnVpbGRzIGNyYXNoIGluIGVtaXRQb2ludGVyVmFsaWRh
dGlvbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5NDQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQAogCQkwRjI0RTU0
QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBK
SVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovOyB9Owog
CQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ3MTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oICovOyB9OwotCQkwRjI0RTU0RjE3
RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVt
cFJlZ2lzdGVyU2V0LmggKi87IH07CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1w
UmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1MDE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAg
Ki87IH07CiAJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyog
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmggKi87IH07CkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCQlBN0JEQUVDOTE3
RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCREFFQzMxN0Y0RUExNDAwRjYxNDBD
IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuaCAqLzsgfTsKIAkJQTdCREFFQ0ExN0Y0RUExNDAw
RjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JEQUVDNDE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0
ZXJhdG9yLmNwcCAqLzsgfTsKIAkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovOyB9OwotCQlB
N0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCRkYzQkYxNzk4Njg5NDAw
MDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLzsgfTsKKwkJQTdCRkYzQzAxNzk4Njg5
NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QkZGM0JGMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdG
aWx0cmF0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDMEM0
QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzBDNEFEMTY4MTA2N0UwMDE3
MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3Bw
ICovOyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi87
IH07CkBAIC0xMjIyLDkgKzEyMjIsOSBAQAogCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyog
U3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmNwcCAqLzsgfTsKIAkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJG
QzlCRDIxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkNBRTEwMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlQmFzaWNCbG9jay5jcHAgKi87IH07Ci0JCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBC
eXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
aCAqLzsgfTsKKwkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FF
MEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkNBRTEyMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07Ci0JCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKKwkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGRTE4
QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERGN0FCRDQxMUY2MEVEMjAwMTA4
RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxNzcsNiArNDE3NywxMCBAQAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QURE
MTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTEzMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQxODQsNyArNDE4OCw2IEBACiAJCQkJQTdBOEFG
MzcxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25z
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDNzE3RjRFQTE0MDBGNjE0
MEMgLyogQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JE
QUVDOTE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00MzA3LDcgKzQzMTAsNiBAQAogCQkJCUE3OTg2RDU3MTdBMEJCMUUw
MEE5NUREMCAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlv
blJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4
OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0
RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLApAQCAtNDc3OSw3ICs0
NzgxLDYgQEAKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
dHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAw
QjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzJGQ0FFMTMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtNDc5NSw3ICs0Nzk2LDYgQEAKIAkJCQlDMkRGNDQzMDE3MDdB
QzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZC
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4
NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQTJDMTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8q
IFRodW5rR2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5NDQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCw3ICsxMTQsNyBAQCBDU3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xz
KCkgCiAgICAgdW5zaWduZWQgdW5saW5rZWRTdGFydE9mZnNldCA9IHVubGlua2VkLT5zdGFydE9m
ZnNldCgpOwogICAgIHVuc2lnbmVkIGxpbmtlZFN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291
cmNlKCkuc3RhcnRPZmZzZXQoKTsKICAgICBpbnQgZGVsdGEgPSBsaW5rZWRTdGFydE9mZnNldCAt
IHVubGlua2VkU3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgcmFuZ2VTdGFydCA9IGRlbHRhICsg
dW5saW5rZWQtPmZ1bmN0aW9uU3RhcnRPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCByYW5nZVN0YXJ0
ID0gZGVsdGEgKyB1bmxpbmtlZC0+dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCgpOwogICAgIHVu
c2lnbmVkIHJhbmdlRW5kID0gZGVsdGEgKyB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKSArIHVubGlu
a2VkLT5zb3VyY2VMZW5ndGgoKTsKICAgICByZXR1cm4gdG9DU3RyaW5nKAogICAgICAgICAiZnVu
Y3Rpb24gIiwKQEAgLTE2MzgsMTIgKzE2MzgsMTQgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKICAg
ICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQo
KTsKICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8o
KSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7Ci0gICAgICAgIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvblN0YXJ0Q29sdW1u
KCk7Ci0gICAgICAgIHN0YXJ0Q29sdW1uICs9ICh1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGlu
ZU9mZnNldCgpID8gMSA6IG93bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSk7CisgICAgICAg
IGJvb2wgc3RhcnRDb2x1bW5Jc09uT3duZXJTdGFydExpbmUgPSAhdW5saW5rZWRFeGVjdXRhYmxl
LT5maXJzdExpbmVPZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxp
bmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQm9keVN0YXJ0Q29sdW1uKCkgKyAoc3RhcnRDb2x1bW5J
c09uT3duZXJTdGFydExpbmUgPyBvd25lckV4ZWN1dGFibGUtPnN0YXJ0Q29sdW1uKCkgOiAxKTsK
KyAgICAgICAgYm9vbCBlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID0gIWxpbmVDb3VudDsKKyAgICAg
ICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRFeGVjdXRhYmxlLT51bmxpbmtlZEJvZHlF
bmRDb2x1bW4oKSArIChlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID8gc3RhcnRDb2x1bW4gOiAxKTsK
ICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzb3VyY2VPZmZzZXQgKyB1bmxpbmtlZEV4
ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9
IHVubGlua2VkRXhlY3V0YWJsZS0+c291cmNlTGVuZ3RoKCk7CiAgICAgICAgIFNvdXJjZUNvZGUg
Y29kZShtX3NvdXJjZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoLCBm
aXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2Vk
RXhlY3V0YWJsZSwgZmlyc3RMaW5lLCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1u
KTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gRnVuY3Rpb25FeGVj
dXRhYmxlOjpjcmVhdGUoKm1fdm0sIGNvZGUsIHVubGlua2VkRXhlY3V0YWJsZSwgZmlyc3RMaW5l
LCBmaXJzdExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOwogICAgICAg
ICBtX2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIGV4ZWN1dGFi
bGUpOwogICAgIH0KIApAQCAtMTY1MiwxMiArMTY1NCwxNCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkp
OwogICAgICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVD
b3VudCgpOwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxp
bmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKLSAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uU3RhcnRD
b2x1bW4oKTsKLSAgICAgICAgc3RhcnRDb2x1bW4gKz0gKHVubGlua2VkRXhlY3V0YWJsZS0+Zmly
c3RMaW5lT2Zmc2V0KCkgPyAxIDogb3duZXJFeGVjdXRhYmxlLT5zdGFydENvbHVtbigpKTsKKyAg
ICAgICAgYm9vbCBzdGFydENvbHVtbklzT25Pd25lclN0YXJ0TGluZSA9ICF1bmxpbmtlZEV4ZWN1
dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9
IHVubGlua2VkRXhlY3V0YWJsZS0+dW5saW5rZWRCb2R5U3RhcnRDb2x1bW4oKSArIChzdGFydENv
bHVtbklzT25Pd25lclN0YXJ0TGluZSA/IG93bmVyRXhlY3V0YWJsZS0+c3RhcnRDb2x1bW4oKSA6
IDEpOworICAgICAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50Owor
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2Vk
Qm9keUVuZENvbHVtbigpICsgKGVuZENvbHVtbklzT25TdGFydExpbmUgPyBzdGFydENvbHVtbiA6
IDEpOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHNvdXJjZU9mZnNldCArIHVubGlu
a2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgc291cmNlTGVu
Z3RoID0gdW5saW5rZWRFeGVjdXRhYmxlLT5zb3VyY2VMZW5ndGgoKTsKICAgICAgICAgU291cmNl
Q29kZSBjb2RlKG1fc291cmNlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBzb3VyY2VMZW5n
dGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4pOwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV92bSwgY29kZSwgdW5s
aW5rZWRFeGVjdXRhYmxlLCBmaXJzdExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCwgc3RhcnRD
b2x1bW4pOworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV92bSwgY29kZSwgdW5saW5rZWRFeGVjdXRhYmxlLCBmaXJz
dExpbmUsIGZpcnN0TGluZSArIGxpbmVDb3VudCwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7CiAg
ICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgZXhl
Y3V0YWJsZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTQ0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGdlbmVyYQogICAgIGlmIChleGVjdXRhYmxlLT5mb3JjZVVzZXNBcmd1bWVudHMoKSkKICAg
ICAgICAgYm9keS0+c2V0VXNlc0FyZ3VtZW50cygpOwogICAgIGJvZHktPmZpbmlzaFBhcnNpbmco
ZXhlY3V0YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUt
PmZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSgpKTsKLSAgICBleGVjdXRhYmxlLT5yZWNvcmRQ
YXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5
LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CisgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFy
c2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSk7CiAgICAg
CiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhib2R5
LT5uZWVkc0FjdGl2YXRpb24oKSwgYm9keS0+dXNlc0V2YWwoKSwgYm9keS0+aXNTdHJpY3RNb2Rl
KCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkpOwogICAgIE93blB0cjxCeXRlY29kZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2bSwgYm9keS5n
ZXQoKSwgcmVzdWx0LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKQEAgLTgwLDE5ICs4
MCwyMSBAQCB1bnNpZ25lZCBVbmxpbmtlZENvZGVCbG9jazo6YWRkT3JGaW5kQ29uCiAgICAgcmV0
dXJuIGFkZENvbnN0YW50KHYpOwogfQogCi1VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5
Tm9kZSogbm9kZSwgYm9vbCBpc0Zyb21HbG9iYWxDb2RlKQogICAgIDogQmFzZSgqdm0sIHN0cnVj
dHVyZSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMobm9kZS0+Y2FwdHVyZWRWYXJpYWJs
ZUNvdW50KCkpCiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhub2RlLT51c2VzQXJndW1lbnRz
KCkpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzU3RyaWN0TW9kZSgpKQogICAg
ICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhub2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKQor
ICAgICwgbV9pc0Zyb21HbG9iYWxDb2RlKGlzRnJvbUdsb2JhbENvZGUpCiAgICAgLCBtX25hbWUo
bm9kZS0+aWRlbnQoKSkKICAgICAsIG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgp
KQogICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkKICAgICAsIG1fZmlyc3RM
aW5lT2Zmc2V0KG5vZGUtPmZpcnN0TGluZSgpIC0gc291cmNlLmZpcnN0TGluZSgpKQogICAgICwg
bV9saW5lQ291bnQobm9kZS0+bGFzdExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQotICAgICwg
bV9mdW5jdGlvblN0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uU3RhcnQoKSAtIHNvdXJjZS5zdGFy
dE9mZnNldCgpKQotICAgICwgbV9mdW5jdGlvblN0YXJ0Q29sdW1uKG5vZGUtPnN0YXJ0Q29sdW1u
KCkpCisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQobm9kZS0+ZnVuY3Rpb25OYW1l
U3RhcnQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQorICAgICwgbV91bmxpbmtlZEJvZHlTdGFy
dENvbHVtbihub2RlLT5zdGFydENvbHVtbigpKQorICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1
bW4obV9saW5lQ291bnQgPyBub2RlLT5lbmRDb2x1bW4oKSA6IG5vZGUtPmVuZENvbHVtbigpIC0g
bm9kZS0+c3RhcnRDb2x1bW4oKSkKICAgICAsIG1fc3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCku
c3RhcnRPZmZzZXQoKSAtIHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAgICwgbV9zb3VyY2VMZW5n
dGgobm9kZS0+c291cmNlKCkubGVuZ3RoKCkpCiAgICAgLCBtX2ZlYXR1cmVzKG5vZGUtPmZlYXR1
cmVzKCkpCkBAIC0xMjMsMTYgKzEyNSwyMCBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2Vk
RnVuY3Rpb25FeGVjCiB7CiAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZU9mZnNldCArIG1f
Zmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlT2Zmc2V0
ICsgbV9zdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fZnVuY3Rpb25T
dGFydENvbHVtbiArIDE7IC8vIHN0YXJ0Q29sdW1uIHNob3VsZCBzdGFydCBmcm9tIDEsIG5vdCAw
LgorICAgIGJvb2wgc3RhcnRDb2x1bW5Jc09uRmlyc3RTb3VyY2VMaW5lID0gIW1fZmlyc3RMaW5l
T2Zmc2V0OworICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gbV91bmxpbmtlZEJvZHlTdGFydENv
bHVtbiArIChzdGFydENvbHVtbklzT25GaXJzdFNvdXJjZUxpbmUgPyBzb3VyY2Uuc3RhcnRDb2x1
bW4oKSA6IDEpOworICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFtX2xpbmVDb3Vu
dDsKKyAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSBtX3VubGlua2VkQm9keUVuZENvbHVtbiArIChl
bmRDb2x1bW5Jc09uU3RhcnRMaW5lID8gc3RhcnRDb2x1bW4gOiAxKTsKICAgICBTb3VyY2VDb2Rl
IGNvZGUoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIG1fc291
cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKLSAgICByZXR1cm4gRnVuY3Rpb25F
eGVjdXRhYmxlOjpjcmVhdGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsg
bV9saW5lQ291bnQsIHN0YXJ0Q29sdW1uKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUodm0sIGNvZGUsIHRoaXMsIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgbV9saW5lQ291
bnQsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOwogfQogCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQogewogICAgIFBhcnNlckVycm9yIGVy
cm9yOwotICAgIENvZGVDYWNoZSogY29kZUNhY2hlID0gZXhlYy0+dm0oKS5jb2RlQ2FjaGUoKTsK
LSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVDYWNoZS0+
Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+dm0oKSwgbmFtZSwgc291
cmNlLCBlcnJvcik7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQ2FjaGUqIGNv
ZGVDYWNoZSA9IHZtLmNvZGVDYWNoZSgpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gY29kZUNhY2hlLT5nZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFs
Q29kZSh2bSwgbmFtZSwgc291cmNlLCBlcnJvcik7CiAKICAgICBpZiAoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5oYXNEZWJ1Z2dlcigpKQogICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2UucHJvdmlkZXIo
KSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOwpAQCAtMjA0LDYgKzIxMCw3IEBAIFVu
bGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSoKICAgICAsIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGluZSgwKQogICAgICwgbV9saW5lQ291
bnQoMCkKKyAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAgICwgbV9mZWF0dXJlcygwKQog
ICAgICwgbV9jb2RlVHlwZShjb2RlVHlwZSkKICAgICAsIG1fYXJyYXlQcm9maWxlQ291bnQoMCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCShyZXZpc2lvbiAxNTk0NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsOSBA
QCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpCiBwdWJsaWM6CiAgICAg
ZnJpZW5kIGNsYXNzIENvZGVDYWNoZTsKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0
YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlKQorICAgIHN0YXRpYyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlLCBib29sIGlzRnJvbUdsb2JhbENvZGUgPSBm
YWxzZSkKICAgICB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Pih2bS0+aGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSk7CisgICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkpIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1
Y3R1cmUuZ2V0KCksIHNvdXJjZSwgbm9kZSwgaXNGcm9tR2xvYmFsQ29kZSk7CiAgICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAg
ICAgfQpAQCAtMTAzLDggKzEwMyw5IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGZpcnN0TGlu
ZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0OyB9CiAgICAgdW5zaWdu
ZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KLSAgICB1bnNpZ25l
ZCBmdW5jdGlvblN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0T2Zm
c2V0OyB9Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25TdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25TdGFydENvbHVtbjsgfQorICAgIHVuc2lnbmVkIHVubGlua2VkRnVuY3Rpb25O
YW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQ7IH0K
KyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlTdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRCb2R5U3RhcnRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQogICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQogICAg
IHVuc2lnbmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CiAKQEAg
LTEyNiwxMSArMTI3LDEwIEBAIHB1YmxpYzoKIAogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFy
YW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogCi0gICAgdm9pZCByZWNv
cmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVG
ZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKICAgICB7CiAgICAg
ICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKICAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOwotICAgICAgICBtX2xpbmVDb3VudCA9IGxhc3RMaW5l
IC0gZmlyc3RMaW5lOwogICAgIH0KIAogICAgIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9mb3JjZVVzZXNBcmd1bWVudHM7IH0KQEAgLTE0Myw3ICsxNDMsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKLSAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBGdW5jdGlvbkJvZHlOb2RlKik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5Tm9kZSos
IGJvb2wgaXNGcm9tR2xvYmFsQ29kZSk7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAKQEAgLTE1MSw2
ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHMgOiAxOwog
ICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzIDogMTsKKyAgICBib29sIG1faXNGcm9tR2xvYmFsQ29kZSA6IDE7CiAKICAgICBJ
ZGVudGlmaWVyIG1fbmFtZTsKICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpAQCAtMTYw
LDggKzE2MSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9w
YXJhbWV0ZXJzOwogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVk
IG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25TdGFydE9mZnNldDsKLSAgICB1
bnNpZ25lZCBtX2Z1bmN0aW9uU3RhcnRDb2x1bW47CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEZ1
bmN0aW9uTmFtZVN0YXJ0OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5U3RhcnRDb2x1bW47
CisgICAgdW5zaWduZWQgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CiAgICAgdW5zaWduZWQgbV9z
dGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKIApAQCAtMTg2LDcgKzE4
OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOwogCi0g
ICAgREVDTEFSRV9JTkZPOworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiB9OwogCiBzdHJ1Y3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewpAQCAtNDQxLDE4ICs0NDMsMjIgQEAgcHVibGljOgog
ICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIGludCYgZGl2b3QsCiAgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5k
T2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAKLSAgICB2b2lkIHJl
Y29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxl
cywgdW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQpCisgICAgdm9pZCByZWNv
cmRQYXJzZShDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMs
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGluZUNvdW50LCB1bnNpZ25lZCBlbmRDb2x1
bW4pCiAgICAgewogICAgICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAgICAgICAgIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZhcmlhYmxlczsKICAgICAgICAgbV9maXJz
dExpbmUgPSBmaXJzdExpbmU7CiAgICAgICAgIG1fbGluZUNvdW50ID0gbGluZUNvdW50OworICAg
ICAgICAvLyBGb3IgdGhlIFVubGlua2VkQ29kZUJsb2NrLCBzdGFydENvbHVtbiBpcyBhbHdheXMg
MC4KKyAgICAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47CiAgICAgfQogCiAgICAgQ29kZUZl
YXR1cmVzIGNvZGVGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXM7IH0KICAgICBi
b29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZh
cmlhYmxlczsgfQogICAgIHVuc2lnbmVkIGZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RMaW5lOyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q291bnQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kQ29sdW1uOyB9CiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0
cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYpOwpAQCAtNDkyLDYgKzQ5
OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKICAg
ICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKKyAgICB1
bnNpZ25lZCBtX2VuZENvbHVtbjsKIAogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAg
IENvZGVUeXBlIG1fY29kZVR5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTk0NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNTQsOCArMjI1NCw4IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGUKICAgICAvLyBJZiB0aGVyZSBpcyBubyByZXR1cm4gd2UgbXVzdCBhdXRv
bWF0aWNhbGx5IGluc2VydCBvbmUuCiAgICAgaWYgKCFyZXR1cm5Ob2RlKSB7CiAgICAgICAgIFJl
Z2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/IGdlbmVyYXRvci50aGlz
UmVnaXN0ZXIoKSA6IGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgQVNTRVJUKChzdGFydE9mZnNldCgpIC0gIDEpID49IGxpbmVTdGFydE9mZnNldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBsYXN0TGlu
ZSgpLCBzdGFydE9mZnNldCgpIC0gMSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgICAgICBBU1NF
UlQoc3RhcnRPZmZzZXQoKSA+PSBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgc3RhcnRPZmZz
ZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFJldHVybihy
MCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMTU5NDQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MywxNCArMjgz
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5j
dGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9k
ZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCiAgICAgewotICAg
ICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fdm0sIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShtX3ZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2Nh
dGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKICAgICB9CiAK
LSAgICB2b2lkIHNldEZ1bmN0aW9uU3RhcnQoRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IGZ1
bmN0aW9uU3RhcnQpCisgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWVTdGFydChGdW5jdGlvbkJvZHlO
b2RlKiBib2R5LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQpCiAgICAgewotICAgICAgICBib2R5LT5z
ZXRGdW5jdGlvblN0YXJ0KGZ1bmN0aW9uU3RhcnQpOworICAgICAgICBib2R5LT5zZXRGdW5jdGlv
bk5hbWVTdGFydChmdW5jdGlvbk5hbWVTdGFydCk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
IDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGNvbnN0
IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSwgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zm
c2V0LCBpbnQgYm9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lLCB1bnNpZ25lZCBib2R5U3Rh
cnRDb2x1bW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2
aXNpb24gMTU5NDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxOCw2ICs2MTgsNyBAQCB2b2lkIExleGVyPFQ+OjpzaGlmdExp
bmVUZXJtaW5hdG9yKCkKIHsKICAgICBBU1NFUlQoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQp
KTsKIAorICAgIG1fcG9zaXRpb25CZWZvcmVMYXN0TGluZUZlZWQgPSBjdXJyZW50UG9zaXRpb24o
KTsKICAgICBUIHByZXYgPSBtX2N1cnJlbnQ7CiAgICAgc2hpZnQoKTsKIApAQCAtMTg1MywxNCAr
MTg1NCw2IEBAIHZvaWQgTGV4ZXI8VD46OmNsZWFyKCkKICAgICBtX2lzUmVwYXJzaW5nID0gZmFs
c2U7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotU291cmNlQ29kZSBMZXhlcjxUPjo6c291
cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSwgdW5z
aWduZWQgc3RhcnRDb2x1bW4pCi17Ci0gICAgQVNTRVJUKG1fc291cmNlLT5wcm92aWRlcigpLT5z
b3VyY2UoKVtvcGVuQnJhY2VdID09ICd7Jyk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT5wcm92aWRl
cigpLT5zb3VyY2UoKVtjbG9zZUJyYWNlXSA9PSAnfScpOwotICAgIHJldHVybiBTb3VyY2VDb2Rl
KG1fc291cmNlLT5wcm92aWRlcigpLCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExp
bmUsIHN0YXJ0Q29sdW1uKTsKLX0KLQogLy8gSW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3JzIG9m
IExleGVyIHdlIG5lZWQgaW5zdGVhZCBvZiBwdXR0aW5nIG1vc3Qgb2YgdGhpcyBmaWxlIGluIExl
eGVyLmgKIHRlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKIHRlbXBsYXRlIGNsYXNzIExleGVy
PFVDaGFyPjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9u
IDE1OTQ0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biBKU1RleHRQb3NpdGlvbihtX2xpbmVOdW1iZXIsIGN1cnJlbnRPZmZzZXQoKSwgY3VycmVudExp
bmVTdGFydE9mZnNldCgpKTsKICAgICB9CisgICAgSlNUZXh0UG9zaXRpb24gcG9zaXRpb25CZWZv
cmVMYXN0TGluZUZlZWQoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uQmVmb3JlTGFzdExpbmVG
ZWVkOyB9CiAgICAgdm9pZCBzZXRMYXN0TGluZU51bWJlcihpbnQgbGFzdExpbmVOdW1iZXIpIHsg
bV9sYXN0TGluZU51bWJlciA9IGxhc3RMaW5lTnVtYmVyOyB9CiAgICAgaW50IGxhc3RMaW5lTnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQogICAgIGJvb2wgcHJldlRl
cm1pbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0b3I7IH0KLSAgICBTb3VyY2VDb2Rl
IHNvdXJjZUNvZGUoaW50IG9wZW5CcmFjZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUs
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKICAgICBib29sIHNjYW5SZWdFeHAoY29uc3QgSWRlbnRp
ZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFncywgVUNoYXIgcGF0dGVyblBy
ZWZpeCA9IDApOwogICAgIGJvb2wgc2tpcFJlZ0V4cCgpOwogCkBAIC0yMjcsNiArMjI3LDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBUKiBtX2NvZGVFbmQ7CiAgICAgY29uc3QgVCogbV9jb2RlU3Rh
cnRQbHVzT2Zmc2V0OwogICAgIGNvbnN0IFQqIG1fbGluZVN0YXJ0OworICAgIEpTVGV4dFBvc2l0
aW9uIG1fcG9zaXRpb25CZWZvcmVMYXN0TGluZUZlZWQ7CiAgICAgYm9vbCBtX2lzUmVwYXJzaW5n
OwogICAgIGJvb2wgbV9hdExpbmVTdGFydDsKICAgICBib29sIG1fZXJyb3I7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTU5NDQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCwxNSArMTE0LDE2IEBAIFN0YXRlbWVudE5vZGUqIFNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW4K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUo
Vk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitpbmxpbmUg
UHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlm
aWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTY29wZU5vZGUodm0s
IHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJTdGFjaywg
ZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKICAg
ICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCisgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1
bW4pCiB7CiB9CiAKLVBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmVhdGUo
Vk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVm
UHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAg
UmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKHZtLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCAgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7
CisgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKHZtLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgY2hpbGRyZW4s
IHZhclN0YWNrLCBmdW5jU3RhY2ssICBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlLCBmZWF0dXJl
cywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBu
b2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKQEAgLTEzMywxNCArMTM0LDE1
IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmUKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLWlubGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlv
blN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cykKK2lubGluZSBFdmFsTm9kZTo6RXZhbE5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24s
IHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayog
dmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIDogU2NvcGVOb2RlKHZtLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2Fw
dHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCisgICAgLCBtX2VuZENvbHVt
bihlbmRDb2x1bW4pCiB7CiB9CiAKLVBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVh
dGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVu
dGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPEV2YWxO
b2RlPiBFdmFsTm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFy
dExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCiB7Ci0gICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3
IEV2YWxOb2RlKHZtLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0
YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpOworICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZSh2bSwg
c3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGVuZENvbHVtbiwgY2hpbGRyZW4sIHZhclN0YWNr
LCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25z
dGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAg
IG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwpAQCAtMTc5LDE1ICsxODEsMTcgQEAgRnVuY3Rp
b25QYXJhbWV0ZXJzOjp+RnVuY3Rpb25QYXJhbWV0ZXJzKAogICAgICAgICBwYXR0ZXJucygpW2ld
LT5kZXJlZigpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9k
ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIGJvb2wgaW5T
dHJpY3RDb250ZXh0KQoraW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUo
Vk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIDogU2NvcGVOb2RlKHZtLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KQogICAgICwgbV9zdGFydENv
bHVtbihzdGFydENvbHVtbikKKyAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KIAot
aW5saW5lIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoVk0qIHZtLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVy
U2V0JiBjYXB0dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQoraW5saW5lIEZ1bmN0aW9uQm9k
eU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoVk0qIHZtLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZp
ZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTY29wZU5vZGUo
dm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFu
dHMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQorICAgICwgbV9lbmRDb2x1bW4o
ZW5kQ29sdW1uKQogewogfQogCkBAIC0yMDUsMTQgKzIwOSwxNCBAQCB2b2lkIEZ1bmN0aW9uQm9k
eU5vZGU6OmZpbmlzaFBhcnNpbmcoUGFzCiAgICAgbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dn
bGUgPSBmdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGU7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGUq
IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorRnVuY3Rpb25Cb2R5Tm9kZSog
RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKFZNKiB2bSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkK
IHsKLSAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBzdGFydENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4gbmV3
IEZ1bmN0aW9uQm9keU5vZGUodm0sIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOwogfQogCi1QYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
U3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQm
IGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitQYXNzUmVmUHRyPEZ1bmN0aW9uQm9k
eU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShWTSogdm0sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAgICBS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKHZtLCBz
dGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGNoaWxkcmVuLCB2YXJTdGFj
aywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51
bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcgRnVu
Y3Rpb25Cb2R5Tm9kZSh2bSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4gLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJp
YWJsZXMsIHNvdXJjZUNvZGUsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJU
KG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3Zl
TGFzdCgpOwpAQCAtMjIxLDQgKzIyNSwxMCBAQCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+
IEZ1bmN0aW9uQm9kCiAgICAgcmV0dXJuIG5vZGUucmVsZWFzZSgpOwogfQogCit2b2lkIEZ1bmN0
aW9uQm9keU5vZGU6OnNldEVuZFBvc2l0aW9uKEpTVGV4dFBvc2l0aW9uIHBvc2l0aW9uKQorewor
ICAgIG1fbGFzdExpbmUgPSBwb3NpdGlvbi5saW5lOworICAgIG1fZW5kQ29sdW1uID0gcG9zaXRp
b24ub2Zmc2V0IC0gcG9zaXRpb24ubGluZVN0YXJ0T2Zmc2V0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE1
OTQ0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNDb250aW51ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHByaXZhdGU6
CisgICAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgbV9sYXN0TGluZTsKICAgICB9OwogCkBAIC0x
NDY4LDMzICsxNDY4LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1Ob2Rl
IDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
cm9ncmFtTm9kZT4gY3JlYXRlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBT
b3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVu
Y3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigp
IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZENv
bHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBQcm9ncmFtTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgU291cmNlRWxlbWVudHMq
LCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNl
Q29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIFByb2dyYW1O
b2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIE9WRVJSSURFOwogCiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47Cisg
ICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAgIH07CiAKICAgICBjbGFzcyBFdmFsTm9k
ZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNGdW5jdGlvbk5vZGUgPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RXZhbE5vZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFj
ayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENv
ZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEV2YWxOb2RlPiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVtbiwgU291
cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0Jiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKLSAg
ICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSB7IHJldHVybiAxOyB9CisgICAgICAgIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
ICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2NvcGVJc0Z1bmN0aW9uID0gZmFsc2U7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBFdmFsTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0
YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwg
Q29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgRXZhbE5vZGUoVk0qLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBPVkVSUklERTsKKworICAgICAgICB1
bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25QYXJhbWV0
ZXJzIDogcHVibGljIFJlZkNvdW50ZWQ8RnVuY3Rpb25QYXJhbWV0ZXJzPiB7CkBAIC0xNTE5LDgg
KzE1MjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDog
cHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc0Z1bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2Rl
KiBjcmVhdGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIGJvb2wgaXNTdHJpY3RNb2RlKTsK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKFZNKiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQs
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQm9keU5vZGUqIGNy
ZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29s
IGlzU3RyaWN0TW9kZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+IGNyZWF0ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1u
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJT
ZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsK
IAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE1MzcsMjIgKzE1NDIs
MjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZnVuY3Rpb25OYW1lSXNJblNjb3Bl
KCkgeyByZXR1cm4gbV9mdW5jdGlvbk5hbWVJc0luU2NvcGVUb2dnbGUgPT0gRnVuY3Rpb25OYW1l
SXNJblNjb3BlOyB9CiAgICAgICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSBmdW5jdGlv
bk5hbWVJc0luU2NvcGVUb2dnbGUoKSB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRv
Z2dsZTsgfQogCi0gICAgICAgIHZvaWQgc2V0RnVuY3Rpb25TdGFydChpbnQgZnVuY3Rpb25TdGFy
dCkgeyBtX2Z1bmN0aW9uU3RhcnQgPSBmdW5jdGlvblN0YXJ0OyB9Ci0gICAgICAgIGludCBmdW5j
dGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvblN0YXJ0OyB9CisgICAgICAgIHZv
aWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50IGZ1bmN0aW9uTmFtZVN0YXJ0KSB7IG1fZnVuY3Rp
b25OYW1lU3RhcnQgPSBmdW5jdGlvbk5hbWVTdGFydDsgfQorICAgICAgICBpbnQgZnVuY3Rpb25O
YW1lU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZVN0YXJ0OyB9CiAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQor
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsg
fQorCisgICAgICAgIHZvaWQgc2V0RW5kUG9zaXRpb24oSlNUZXh0UG9zaXRpb24pOwogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCBib29sIGluU3RyaWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoVk0qLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlv
blN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFZNKiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0
KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25T
dGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAg
IElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CiAgICAgICAgIEZ1bmN0aW9uTmFtZUlzSW5TY29w
ZVRvZ2dsZSBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZTsKICAgICAgICAgUmVmUHRyPEZ1
bmN0aW9uUGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwotICAgICAgICBpbnQgbV9mdW5jdGlvblN0
YXJ0OworICAgICAgICBpbnQgbV9mdW5jdGlvbk5hbWVTdGFydDsKICAgICAgICAgdW5zaWduZWQg
bV9zdGFydENvbHVtbjsKKyAgICAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAgICAgfTsKIAog
ICAgIGNsYXNzIEZ1bmNFeHByTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk0NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNjIsMTMgKzExNjIsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RnVuY3RpbwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKICAgICBu
ZXh0KCk7CiAKLSAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0
YXJ0Q29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewor
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOworICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlv
bigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgIH0KICAgICBE
ZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOwogICAgIG1fc3Rh
dGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlC
dWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7
CiAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50czxDaGVja0ZvclN0cmljdE1vZGU+
KGJvZHlCdWlsZGVyKSwgIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iKTsKLSAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5M
b2NhdGlvbigpLCBzdGFydENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICB1bnNpZ25lZCBlbmRD
b2x1bW4gPSB0b2tlbkNvbHVtbigpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
Qm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1
bW4sIHN0cmljdE1vZGUoKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5j
dGlvbk1vZGUoRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKQEAgLTExOTAsNyArMTE5Myw3IEBAIHRl
bXBsYXRlIDxGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWUKIHsKICAgICBBdXRvUG9wU2Nv
cGVSZWYgZnVuY3Rpb25TY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgZnVuY3Rpb25TY29w
ZS0+c2V0SXNGdW5jdGlvbigpOwotICAgIGludCBmdW5jdGlvblN0YXJ0ID0gbV90b2tlbi5tX2xv
Y2F0aW9uLnN0YXJ0T2Zmc2V0OworICAgIGludCBmdW5jdGlvbk5hbWVTdGFydCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5zdGFydE9mZnNldDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBsYXN0RnVuY3Rp
b25OYW1lID0gbV9sYXN0RnVuY3Rpb25OYW1lOwogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IG51
bGxwdHI7CiAgICAgaWYgKG1hdGNoKElERU5UKSkgewpAQCAtMTIzMSwxNiArMTIzNCwyMSBAQCB0
ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lCiAgICAgICAgIGVuZExvY2F0
aW9uLmxpbmUgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZTsKICAgICAgICAgZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBl
bmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0
YXJ0T2Zmc2V0OworCisgICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9IChlbmRM
b2NhdGlvbi5saW5lID09IGJvZHlTdGFydExpbmUpOwogICAgICAgICBBU1NFUlQoZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
dW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZENvbHVtbklzT25TdGFydExpbmUgPworICAgICAg
ICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRP
ZmZzZXQgOgorICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rp
b25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBib2R5U3RhcnRDb2x1bW4sIGNhY2hl
ZEluZm8tPnN0cmljdE1vZGUpOworICAgICAgICBib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlv
bkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGJvZHlTdGFydENvbHVtbiwgYm9keUVu
ZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIAogICAgICAgICBmdW5j
dGlvblNjb3BlLT5yZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUoY2FjaGVkSW5mbyk7CiAg
ICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpO
ZWVkc0ZyZWVWYXJpYWJsZUluZm8pLCAiUGFyc2VyIGVycm9yIik7CiAgICAgICAgIAogICAgICAg
ICBjbG9zZUJyYWNlT2Zmc2V0ID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZU9mZnNldDsKIAotICAg
ICAgICBjb250ZXh0LnNldEZ1bmN0aW9uU3RhcnQoYm9keSwgZnVuY3Rpb25TdGFydCk7CisgICAg
ICAgIGNvbnRleHQuc2V0RnVuY3Rpb25OYW1lU3RhcnQoYm9keSwgZnVuY3Rpb25OYW1lU3RhcnQp
OwogICAgICAgICBtX3Rva2VuID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7CiAKICAg
ICAgICAgbV9sZXhlci0+c2V0T2Zmc2V0KG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQsIG1f
dG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwpAQCAtMTI3MCw3ICsxMjc4LDcgQEAg
dGVtcGxhdGUgPEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZQogICAgIGludCBmdW5jdGlv
bkxlbmd0aCA9IGNsb3NlQnJhY2VPZmZzZXQgLSBvcGVuQnJhY2VPZmZzZXQ7CiAgICAgaWYgKFRy
ZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlICYmIG1fZnVuY3Rpb25DYWNoZSAmJiBmdW5j
dGlvbkxlbmd0aCA+IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUpIHsKICAgICAgICAgU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICAg
ICAgcGFyYW1ldGVycy5mdW5jdGlvblN0YXJ0ID0gZnVuY3Rpb25TdGFydDsKKyAgICAgICAgcGFy
YW1ldGVycy5mdW5jdGlvbk5hbWVTdGFydCA9IGZ1bmN0aW9uTmFtZVN0YXJ0OwogICAgICAgICBw
YXJhbWV0ZXJzLmNsb3NlQnJhY2VMaW5lID0gY2xvc2VCcmFjZUxpbmU7CiAgICAgICAgIHBhcmFt
ZXRlcnMuY2xvc2VCcmFjZU9mZnNldCA9IGNsb3NlQnJhY2VPZmZzZXQ7CiAgICAgICAgIHBhcmFt
ZXRlcnMuY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNldCA9IGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZz
ZXQ7CkBAIC0xMjc4LDcgKzEyODYsNyBAQCB0ZW1wbGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMg
cmVxdWlyZW1lCiAgICAgICAgIG5ld0luZm8gPSBTb3VyY2VQcm92aWRlckNhY2hlSXRlbTo6Y3Jl
YXRlKHBhcmFtZXRlcnMpOwogCiAgICAgfQotICAgIGNvbnRleHQuc2V0RnVuY3Rpb25TdGFydChi
b2R5LCBmdW5jdGlvblN0YXJ0KTsKKyAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0KGJv
ZHksIGZ1bmN0aW9uTmFtZVN0YXJ0KTsKICAgICAKICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShm
dW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNl
ciBlcnJvciIpOwogICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0UsICJFeHBlY3RlZCBhIGNsb3Np
bmcgJ30nIGFmdGVyIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIGJvZHkiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTU5NDQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDE0LDYgKzQxNCw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2Vk
Tm9kZT4KICAgICBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKFBhcnNlckVycm9yJik7CiAK
KyAgICBKU1RleHRQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZUxhc3RMaW5lRmVlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGV4ZXItPnBvc2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkKCk7IH0KKwogcHJpdmF0
ZToKICAgICBzdHJ1Y3QgQWxsb3dJbk92ZXJyaWRlIHsKICAgICAgICAgQWxsb3dJbk92ZXJyaWRl
KFBhcnNlciogcGFyc2VyKQpAQCAtODgxLDcgKzg4Myw4IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyVHlwZT4KICAgICBlcnJNc2cgPSBTdHJpbmcoKTsKIAogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBzdGFydExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0gICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4gPSBtX3NvdXJjZS0+c3RhcnRDb2x1bW4oKTsKKyAgICBBU1NFUlQobV9zb3Vy
Y2UtPnN0YXJ0Q29sdW1uKCkgPiAwKTsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IG1fc291
cmNlLT5zdGFydENvbHVtbigpIC0gMTsKIAogICAgIFN0cmluZyBwYXJzZUVycm9yID0gcGFyc2VJ
bm5lcigpOwogCkBAIC05MDAsMTMgKzkwMywxNSBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBh
cnNlcjxMZXhlclR5cGU+CiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKICAgICBpZiAo
bV9zb3VyY2VFbGVtZW50cykgewogICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247
Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpOwor
ICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sZXhlci0+bGluZU51bWJlcigpOwogICAgICAg
ICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0
T2Zmc2V0KCk7CiAgICAgICAgIGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0ID0gbV9sZXhlci0+Y3Vy
cmVudE9mZnNldCgpOworICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSBlbmRMb2NhdGlvbi5z
dGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgcmVzdWx0
ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKG1fdm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dENvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbHVtbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZt
X3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDog
MCwKQEAgLTkxNCw3ICs5MTksNyBAQCBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhl
clR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1Db25zdGFudHMpOwotICAgICAgICByZXN1
bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdFRva2VuRW5kUG9zaXRpb24u
bGluZSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0
T2Zmc2V0KCkpOworICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCks
IG1fbGV4ZXItPmxpbmVOdW1iZXIoKSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdl
IGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJyb3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlvbiwg
c2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAgICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4g
cGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9ncmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUK
QEAgLTk0NCwxNyArOTQ5LDIzIEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVy
VHlwZT4KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci1QYXNzUmVmUHRyPFBhcnNl
ZE5vZGU+IHBhcnNlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvblBh
cmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTUGFyc2VyU3Ry
aWN0bmVzcyBzdHJpY3RuZXNzLCBKU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgUGFyc2VyRXJyb3Im
IGVycm9yKQorUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShWTSogdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgSlNUZXh0UG9zaXRpb24qIHBvc2l0aW9u
QmVmb3JlTGFzdExpbmVGZWVkID0gMCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiUGFyc2luZyIpOwogCiAgICAgQVNTRVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNl
KCkuaXNOdWxsKCkpOwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0
KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIHBh
cmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOwotICAgICAgICByZXR1cm4g
cGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yKTsKKyAgICAgICAgUmVmUHRyPFBhcnNlZE5v
ZGU+IHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvcik7CisgICAgICAgIGlm
IChwb3NpdGlvbkJlZm9yZUxhc3RMaW5lRmVlZCkKKyAgICAgICAgICAgICpwb3NpdGlvbkJlZm9y
ZUxhc3RMaW5lRmVlZCA9IHBhcnNlci5wb3NpdGlvbkJlZm9yZUxhc3RMaW5lRmVlZCgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAgICAgUGFyc2VyPExleGVyPFVD
aGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBh
cnNlck1vZGUpOwotICAgIHJldHVybiBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IpOwor
ICAgIFJlZlB0cjxQYXJzZWROb2RlPiByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4o
ZXJyb3IpOworICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3RMaW5lRmVlZCkKKyAgICAgICAgKnBv
c2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdExpbmVG
ZWVkKCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oCShyZXZpc2lvbiAxNTk0NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgewotICAgIHVuc2lnbmVkIGZ1bmN0aW9uU3RhcnQ7
CisgICAgdW5zaWduZWQgZnVuY3Rpb25OYW1lU3RhcnQ7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFj
ZUxpbmU7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZU9mZnNldDsKICAgICB1bnNpZ25lZCBjbG9z
ZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiB0b2tlbjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0IDogMzE7
CisgICAgdW5zaWduZWQgZnVuY3Rpb25OYW1lU3RhcnQgOiAzMTsKICAgICBib29sIG5lZWRzRnVs
bEFjdGl2YXRpb24gOiAxOwogICAgIAogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lIDogMzE7
CkBAIC0xMDcsNyArMTA3LDcgQEAgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92aWRl
ckNhYwogfQogCiBpbmxpbmUgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OlNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtKGNvbnN0IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQotICAgIDogZnVuY3Rpb25TdGFydChwYXJhbWV0ZXJzLmZ1bmN0aW9uU3Rh
cnQpCisgICAgOiBmdW5jdGlvbk5hbWVTdGFydChwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZVN0YXJ0
KQogICAgICwgbmVlZHNGdWxsQWN0aXZhdGlvbihwYXJhbWV0ZXJzLm5lZWRzRnVsbEFjdGl2YXRp
b24pCiAgICAgLCBjbG9zZUJyYWNlTGluZShwYXJhbWV0ZXJzLmNsb3NlQnJhY2VMaW5lKQogICAg
ICwgdXNlc0V2YWwocGFyYW1ldGVycy51c2VzRXZhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxNTk0NDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUzLDggKzE1Myw4IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25k
aXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rp
b25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAg
IGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBib29sKSB7IHJldHVybiAxOyB9Ci0gICAgdm9pZCBzZXRGdW5j
dGlvblN0YXJ0KGludCwgaW50KSB7IH0KKyAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29s
KSB7IHJldHVybiAxOyB9CisgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWVTdGFydChpbnQsIGludCkg
eyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3Jl
YXRlQXJndW1lbnRzKGludCkgeyByZXR1cm4gMTsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZVNwcmVhZEV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTU5NDQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
MTcgKzc1LDIwIEBAIHRlbXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkRXYKIH07
CiAKIHRlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFi
bGVUeXBlPgotVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldENvZGVCbG9jayhW
TSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCitVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0R2xvYmFsQ29kZUJsb2NrKFZNJiB2bSwg
RXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQ
YXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBy
b2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBTb3Vy
Y2VDb2RlS2V5IGtleSA9IFNvdXJjZUNvZGVLZXkoc291cmNlLCBTdHJpbmcoKSwgQ2FjaGVUeXBl
czxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwgc3RyaWN0bmVzcyk7CiAgICAgQ29k
ZUNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9zb3VyY2VDb2RlLmFkZChrZXksIFNv
dXJjZUNvZGVWYWx1ZSgpKTsKICAgICBib29sIGNhbkNhY2hlID0gZGVidWdnZXJNb2RlID09IERl
YnVnZ2VyT2ZmICYmIHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9mZjsKICAgICBpZiAoIWFkZFJl
c3VsdC5pc05ld0VudHJ5ICYmIGNhbkNhY2hlKSB7Ci0gICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogdW5saW5rZWRDb2RlID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZpcnN0
TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkQ29kZS0+Zmlyc3RMaW5lKCk7Ci0g
ICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gc291cmNlLmZpcnN0TGluZSgpID8gc291cmNl
LnN0YXJ0Q29sdW1uKCkgOiAwOwotICAgICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZSh1bmxp
bmtlZENvZGUtPmNvZGVGZWF0dXJlcygpLCB1bmxpbmtlZENvZGUtPmhhc0NhcHR1cmVkVmFyaWFi
bGVzKCksIGZpcnN0TGluZSwgZmlyc3RMaW5lICsgdW5saW5rZWRDb2RlLT5saW5lQ291bnQoKSwg
c3RhcnRDb2x1bW4pOwotICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlOworICAgICAgICBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0PFVubGlua2VkQ29k
ZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7CisgICAg
ICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkQ29k
ZUJsb2NrLT5maXJzdExpbmUoKTsKKyAgICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPmxpbmVDb3VudCgpOworICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9
IHVubGlua2VkQ29kZUJsb2NrLT5zdGFydENvbHVtbigpICsgc291cmNlLnN0YXJ0Q29sdW1uKCk7
CisgICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9ICFsaW5lQ291bnQ7CisgICAg
ICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHVubGlua2VkQ29kZUJsb2NrLT5lbmRDb2x1bW4oKSAr
IChlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID8gc3RhcnRDb2x1bW4gOiAxKTsKKyAgICAgICAgZXhl
Y3V0YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRDb2RlQmxvY2stPmNvZGVGZWF0dXJlcygpLCB1
bmxpbmtlZENvZGVCbG9jay0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgZmlyc3RMaW5lLCBmaXJz
dExpbmUgKyBsaW5lQ291bnQsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOworICAgICAgICByZXR1
cm4gdW5saW5rZWRDb2RlQmxvY2s7CiAgICAgfQogCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNo
ZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwpAQCAtOTQs
MTEgKzk3LDE3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2QKICAg
ICAgICAgbV9zb3VyY2VDb2RlLnJlbW92ZShhZGRSZXN1bHQuaXRlcmF0b3IpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZl
YXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGlu
ZU5vKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpLCByb290Tm9kZS0+c3RhcnRDb2x1bW4oKSk7Cisg
ICAgdW5zaWduZWQgbGluZUNvdW50ID0gcm9vdE5vZGUtPmxhc3RMaW5lKCkgLSByb290Tm9kZS0+
bGluZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSByb290Tm9kZS0+c3RhcnRDb2x1
bW4oKSArIDE7CisgICAgYm9vbCBlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID0gIWxpbmVDb3VudDsK
KyAgICB1bnNpZ25lZCB1bmxpbmtlZEVuZENvbHVtbiA9IHJvb3ROb2RlLT5lbmRDb2x1bW4oKTsK
KyAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB1bmxpbmtlZEVuZENvbHVtbiArIChlbmRDb2x1bW5J
c09uU3RhcnRMaW5lID8gc3RhcnRDb2x1bW4gOiAxKTsKKyAgICBleGVjdXRhYmxlLT5yZWNvcmRQ
YXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVz
KCksIHJvb3ROb2RlLT5saW5lTm8oKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4pOwogCi0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGUg
PSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0sIGV4ZWN1dGFibGUtPmV4ZWN1dGFi
bGVJbmZvKCkpOwotICAgIHVubGlua2VkQ29kZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1
cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCByb290Tm9kZS0+bGluZU5v
KCkgLSBzb3VyY2UuZmlyc3RMaW5lKCksIHJvb3ROb2RlLT5sYXN0TGluZSgpIC0gcm9vdE5vZGUt
PmxpbmVObygpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3Iodm0sIHJvb3ROb2RlLmdldCgpLCB1bmxpbmtlZENv
ZGUsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSkpOworICAgIFVubGlua2VkQ29kZUJsb2Nr
VHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgm
dm0sIGV4ZWN1dGFibGUtPmV4ZWN1dGFibGVJbmZvKCkpOworICAgIHVubGlua2VkQ29kZUJsb2Nr
LT5yZWNvcmRQYXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVk
VmFyaWFibGVzKCksIHJvb3ROb2RlLT5saW5lTm8oKSAtIHNvdXJjZS5maXJzdExpbmUoKSwgbGlu
ZUNvdW50LCB1bmxpbmtlZEVuZENvbHVtbik7CisKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3Iodm0sIHJvb3ROb2Rl
LmdldCgpLCB1bmxpbmtlZENvZGVCbG9jaywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7
CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ry
b3lEYXRhKCk7CiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25l
KSB7CkBAIC0xMDgsMjEgKzExNywyMSBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNo
ZTo6Z2V0Q29kCiAKICAgICBpZiAoIWNhbkNhY2hlKSB7CiAgICAgICAgIG1fc291cmNlQ29kZS5y
ZW1vdmUoYWRkUmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsK
KyAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogICAgIH0KIAotICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZSwgbV9z
b3VyY2VDb2RlLmFnZSgpKTsKLSAgICByZXR1cm4gdW5saW5rZWRDb2RlOworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2Nr
LCBtX3NvdXJjZUNvZGUuYWdlKCkpOworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKIH0K
IAogVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxv
Y2soVk0mIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQogewotICAgIHJldHVybiBnZXRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2
bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVy
TW9kZSwgZXJyb3IpOworICAgIHJldHVybiBnZXRHbG9iYWxDb2RlQmxvY2s8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RuZXNzLCBkZWJ1Z2dl
ck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwogfQogCiBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IENvZGVDYWNoZTo6Z2V0RXZhbENvZGVCbG9jayhWTSYgdm0sIEV2YWxFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0bmVzcyBzdHJp
Y3RuZXNzLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJN
b2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgcmV0dXJuIGdldENvZGVCbG9jazxVbmxp
bmtlZEV2YWxDb2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRl
YnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmV0dXJuIGdldEdsb2JhbENv
ZGVCbG9jazxVbmxpbmtlZEV2YWxDb2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0
cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiB9CiAKIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZy
b21HbG9iYWxDb2RlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCkBAIC0xMzIsNyArMTQxLDggQEAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVDYWNoZTo6ZwogICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogCi0gICAgUmVm
UHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KCZ2bSwgc291cmNl
LCAwLCBJZGVudGlmaWVyKCksIEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VQcm9ncmFtQ29kZSwgZXJy
b3IpOworICAgIEpTVGV4dFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkOworICAg
IFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBhcnNlPFByb2dyYW1Ob2RlPigmdm0sIHNv
dXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlUHJvZ3JhbUNvZGUs
IGVycm9yLCAmcG9zaXRpb25CZWZvcmVMYXN0TGluZUZlZWQpOwogICAgIGlmICghcHJvZ3JhbSkg
ewogICAgICAgICBBU1NFUlQoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUp
OwogICAgICAgICBtX3NvdXJjZUNvZGUucmVtb3ZlKGFkZFJlc3VsdC5pdGVyYXRvcik7CkBAIC0x
NDcsMTAgKzE1NywxMSBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpn
CiAgICAgQVNTRVJUKGZ1bmNFeHByKTsKICAgICBSRUxFQVNFX0FTU0VSVChmdW5jRXhwci0+aXNG
dW5jRXhwck5vZGUoKSk7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19jYXN0
PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOworICAgIGJvZHktPnNldEVuZFBvc2l0
aW9uKHBvc2l0aW9uQmVmb3JlTGFzdExpbmVGZWVkKTsKICAgICBBU1NFUlQoYm9keSk7CiAgICAg
QVNTRVJUKGJvZHktPmlkZW50KCkuaXNOdWxsKCkpOwogCi0gICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpjcmVhdGUoJnZtLCBzb3VyY2UsIGJvZHkpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKCZ2bSwgc291cmNlLCBib2R5LCB0cnVlKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPm1f
bmFtZVZhbHVlLnNldCh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBqc1N0cmluZygmdm0sIG5hbWUu
c3RyaW5nKCkpKTsKIAogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTb3VyY2VDb2Rl
VmFsdWUodm0sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9zb3VyY2VDb2RlLmFnZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCShyZXZpc2lvbiAxNTk0
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgQ29kZUNhY2hlKCk7CiAK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRh
YmxlVHlwZT4gCi0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxvY2soVk0mLCBF
eGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOworICAgIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogZ2V0R2xvYmFsQ29kZUJsb2NrKFZNJiwgRXhlY3V0YWJsZVR5cGUqLCBjb25z
dCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVy
TW9kZSwgUGFyc2VyRXJyb3ImKTsKIAogICAgIENvZGVDYWNoZU1hcCBtX3NvdXJjZUNvZGU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJ
KHJldmlzaW9uIDE1OTQ0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDkgQEAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwog
CiAgICAgQVNTRVJUKHZtLT5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0gICAgCisgICAgQVNTRVJUKHN0
YXJ0Q29sdW1uKCkgIT0gVUlOVF9NQVgpOworICAgIEFTU0VSVChlbmRDb2x1bW4oKSAhPSBVSU5U
X01BWCk7CisKICAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkg
ewogICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0
YWJsZSo+KHRoaXMpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxs
KTsKQEAgLTIwOSw3ICsyMTEsNyBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0
YWJsZTo6CiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sg
PQogICAgICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9y
KAogICAgICAgICAgICAgKnZtLCBleGVjdXRhYmxlLT5tX3NvdXJjZSwga2luZCwgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKLSAgICByZWNvcmRQYXJzZShleGVjdXRhYmxlLT5t
X3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4
ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVObygpLCBsYXN0TGluZSgpLCBz
dGFydENvbHVtbigpKTsgCisgICAgcmVjb3JkUGFyc2UoZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4
ZWN1dGFibGUtPmZlYXR1cmVzKCksIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5o
YXNDYXB0dXJlZFZhcmlhYmxlcygpLCBsaW5lTm8oKSwgbGFzdExpbmUoKSwgc3RhcnRDb2x1bW4o
KSwgZW5kQ29sdW1uKCkpOyAKICAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7CiAgICAgICAg
IGV4Y2VwdGlvbiA9IHZtLT50aHJvd0V4Y2VwdGlvbigKICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLApAQCAtMzYyLDE1ICszNjQsMTkgQEAgdm9pZCBQcm9ncmFtRXhlY3V0
YWJsZTo6ZGVzdHJveShKU0NlbGwqIAogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJsZSkgfTsK
IAotRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4
ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uKQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExp
bmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgYm9keUV4
Y2x1ZGVzQnJhY2VzKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2bS5mdW5jdGlvbkV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0
cmljdENvbnRleHQoKSkKICAgICAsIG1fdW5saW5rZWRFeGVjdXRhYmxlKHZtLCB0aGlzLCB1bmxp
bmtlZEV4ZWN1dGFibGUpCisgICAgLCBtX2JvZHlFeGNsdWRlc0JyYWNlcyhib2R5RXhjbHVkZXNC
cmFjZXMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7CiAgICAgQVNT
RVJUKHNvdXJjZS5sZW5ndGgoKSk7CiAgICAgbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CiAgICAg
bV9sYXN0TGluZSA9IGxhc3RMaW5lOworICAgIEFTU0VSVChzdGFydENvbHVtbiAhPSBVSU5UX01B
WCk7CisgICAgQVNTRVJUKGVuZENvbHVtbiAhPSBVSU5UX01BWCk7CiAgICAgbV9zdGFydENvbHVt
biA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOwogfQogCiB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC00NTQsMTYgKzQ2
MCwxNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHCiAgICAgQVNT
RVJUKCZnbG9iYWxPYmplY3QtPnZtKCkgPT0gJnZtKTsKIAogICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSAwOwotICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gZ2xv
YmFsT2JqZWN0LT5jcmVhdGVQcm9ncmFtQ29kZUJsb2NrKGNhbGxGcmFtZSwgdGhpcywgJmV4Y2Vw
dGlvbik7CisgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9
IGdsb2JhbE9iamVjdC0+Y3JlYXRlUHJvZ3JhbUNvZGVCbG9jayhjYWxsRnJhbWUsIHRoaXMsICZl
eGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBleGNlcHRpb247
CiAKLSAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5zZXQodm0sIHRoaXMsIHVubGlua2Vk
Q29kZSk7CisgICAgbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suc2V0KHZtLCB0aGlzLCB1bmxp
bmtlZENvZGVCbG9jayk7CiAKICAgICBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplciBvcHRpbWl6
ZXIodm0sIGdsb2JhbE9iamVjdCk7CiAKLSAgICBjb25zdCBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s6OlZhcmlhYmxlRGVjbGF0aW9ucyYgdmFyaWFibGVEZWNsYXJhdGlvbnMgPSB1bmxpbmtlZENv
ZGUtPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7Ci0gICAgY29uc3QgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVjbGFyYXRpb25zID0gdW5saW5r
ZWRDb2RlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOworICAgIGNvbnN0IFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jazo6VmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xhcmF0aW9ucyA9IHVu
bGlua2VkQ29kZUJsb2NrLT52YXJpYWJsZURlY2xhcmF0aW9ucygpOworICAgIGNvbnN0IFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jazo6RnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0
aW9ucyA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUgPSBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQuZ2V0KCk7CkBAIC01NjQs
MTUgKzU3MCwyNyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogCiBG
dW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlKiBleGVjLCBEZWJ1Z2dlciogZGVidWdnZXIs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNPYmplY3QqKiBleGNlcHRpb24pCiB7Ci0gICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb24gPSBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUobmFtZSwgZXhlYywgZGVidWdnZXIsIHNv
dXJjZSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIXVubGlua2VkRnVuY3Rpb24pCisgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShuYW1lLCBleGVjLCBkZWJ1Z2dlciwgc291cmNl
LCBleGNlcHRpb24pOworICAgIGlmICghdW5saW5rZWRFeGVjdXRhYmxlKQogICAgICAgICByZXR1
cm4gMDsKLSAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxp
bmtlZEZ1bmN0aW9uLT5maXJzdExpbmVPZmZzZXQoKTsKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dCA9IHNvdXJjZS5zdGFydE9mZnNldCgpICsgdW5saW5rZWRGdW5jdGlvbi0+c3RhcnRPZmZzZXQo
KTsKLSAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHNvdXJjZS5zdGFydENvbHVtbigpOwotICAg
IHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IHVubGlua2VkRnVuY3Rpb24tPnNvdXJjZUxlbmd0aCgp
OwotICAgIFNvdXJjZUNvZGUgZnVuY3Rpb25Tb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0
T2Zmc2V0LCBzdGFydE9mZnNldCArIHNvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVt
bik7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1
bmN0aW9uU291cmNlLCB1bmxpbmtlZEZ1bmN0aW9uLCBmaXJzdExpbmUsIHVubGlua2VkRnVuY3Rp
b24tPmxpbmVDb3VudCgpLCBzdGFydENvbHVtbik7CisgICAgdW5zaWduZWQgbGluZUNvdW50ID0g
dW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQoKTsKKyAgICB1bnNpZ25lZCBmaXJzdExpbmUg
PSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNl
dCgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCkgKyB1
bmxpbmtlZEV4ZWN1dGFibGUtPnN0YXJ0T2Zmc2V0KCk7CisKKyAgICAvLyBXZSBkb24ndCBoYXZl
IGFueSBvd25lciBleGVjdXRhYmxlLiBUaGUgc291cmNlIHN0cmluZyBpcyBlZmZlY3RpdmVseSBs
aWtlIGEgZ2xvYmFsCisgICAgLy8gc3RyaW5nIChsaWtlIGluIHRoZSBoYW5kbGluZyBvZiBldmFs
KS4gSGVuY2UsIHRoZSBzdGFydENvbHVtbiBpcyBhbHdheXMgMS4KKyAgICB1bnNpZ25lZCBzdGFy
dENvbHVtbiA9IDE7CisgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gdW5saW5rZWRFeGVjdXRh
YmxlLT5zb3VyY2VMZW5ndGgoKTsKKyAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAh
bGluZUNvdW50OworICAgIC8vIFRoZSB1bmxpbmtlZEJvZHlFbmRDb2x1bW4gaXMgYmFzZWQtMC4g
SGVuY2UsIHdlIG5lZWQgdG8gYWRkIDEgdG8gaXQuIEJ1dCBpZiB0aGUKKyAgICAvLyBlbmRDb2x1
bW4gaXMgb24gdGhlIHN0YXJ0TGluZSwgdGhlbiB3ZSBuZWVkIHRvIHN1YnRyYWN0IGJhY2sgdGhl
IGFkanVzdG1lbnQgZm9yCisgICAgLy8gdGhlIG9wZW4gYnJhY2UgcmVzdWx0aW5nIGluIGFuIGFk
anVzdG1lbnQgb2YgMC4KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW5FeGNsdWRpbmdCcmFjZXMgPSB1
bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQm9keUVuZENvbHVtbigpICsgKGVuZENvbHVtbklz
T25TdGFydExpbmUgPyAwIDogMSk7CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXRFeGNsdWRpbmdP
cGVuQnJhY2UgPSBzdGFydE9mZnNldCArIDE7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0RXhjbHVk
aW5nQ2xvc2VCcmFjZSA9IHN0YXJ0T2Zmc2V0ICsgc291cmNlTGVuZ3RoIC0gMTsKKyAgICBTb3Vy
Y2VDb2RlIGJvZHlTb3VyY2Uoc291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0RXhjbHVkaW5n
T3BlbkJyYWNlLCBlbmRPZmZzZXRFeGNsdWRpbmdDbG9zZUJyYWNlLCBmaXJzdExpbmUsIHN0YXJ0
Q29sdW1uKTsKKworICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLT52
bSgpLCBib2R5U291cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgZmlyc3RMaW5l
ICsgbGluZUNvdW50LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uRXhjbHVkaW5nQnJhY2VzLCB0cnVl
KTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNp
b24gMTU5NDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTggQEAgcHVibGljOgogICAgICAgICAKICAg
ICBDb2RlQmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAK
KyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7CisgICAgfQog
ICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwog
ICAgIH0KKyAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBQcm9ncmFtRXhlY3V0YWJsZVR5
cGU7CisgICAgfQogCiAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAgICAgewpAQCAt
MzU1LDYgKzM2Myw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAg
ICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDog
MCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAsIG1fc3RhcnRDb2x1
bW4oVUlOVF9NQVgpCisgICAgICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCiAgICAgewogICAg
IH0KIApAQCAtMzYzLDYgKzM3Myw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVG
ZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAsIG1f
c3RhcnRDb2x1bW4oVUlOVF9NQVgpCisgICAgICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCiAg
ICAgewogICAgIH0KIApAQCAtMzc4LDYgKzM5MCw3IEBAIHB1YmxpYzoKICAgICBpbnQgbGluZU5v
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0KICAgICBpbnQgbGFzdExpbmUoKSBjb25z
dCB7IHJldHVybiBtX2xhc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CisgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29u
c3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KIAogICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KICAgICBib29sIHVzZXNBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQpAQCAt
Mzk1LDEzICs0MDgsMTYgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0
dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFy
dENvbHVtbikKKyAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9v
bCBoYXNDYXB0dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCB1bnNp
Z25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIHsKICAgICAgICAgbV9m
ZWF0dXJlcyA9IGZlYXR1cmVzOwogICAgICAgICBtX2hhc0NhcHR1cmVkVmFyaWFibGVzID0gaGFz
Q2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAg
ICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CisgICAgICAgIEFTU0VSVChzdGFydENvbHVtbiAh
PSBVSU5UX01BWCk7CiAgICAgICAgIG1fc3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKKyAgICAg
ICAgQVNTRVJUKGVuZENvbHVtbiAhPSBVSU5UX01BWCk7CisgICAgICAgIG1fZW5kQ29sdW1uID0g
ZW5kQ29sdW1uOwogICAgIH0KIAogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CkBA
IC00MzcsNiArNDUzLDcgQEAgcHJvdGVjdGVkOgogICAgIGludCBtX2ZpcnN0TGluZTsKICAgICBp
bnQgbV9sYXN0TGluZTsKICAgICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOworICAgIHVuc2lnbmVk
IG1fZW5kQ29sdW1uOwogfTsKIAogY2xhc3MgRXZhbEV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0YWJsZSB7CkBAIC01NDksOSArNTY2LDkgQEAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxl
IDogcHVibGljIFNjcmlwdAogcHVibGljOgogICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBC
YXNlOwogCi0gICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5r
ZWRFeGVjdXRhYmxlLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNp
Z25lZCBzdGFydENvbHVtbikKKyAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUo
Vk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFz
dExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgYm9k
eUV4Y2x1ZGVzQnJhY2VzID0gZmFsc2UpCiAgICAgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1
dGFibGU+KHZtLmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgdW5saW5rZWRF
eGVjdXRhYmxlLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBzdGFydENvbHVtbik7CisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0uaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgc291
cmNlLCB1bmxpbmtlZEV4ZWN1dGFibGUsIGZpcnN0TGluZSwgbGFzdExpbmUsIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4sIGJvZHlFeGNsdWRlc0JyYWNlcyk7CiAgICAgICAgIGV4ZWN1dGFibGUtPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgfQpAQCAt
NjM4LDggKzY1NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCisgICAg
Ym9vbCBib2R5RXhjbHVkZXNCcmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2JvZHlFeGNsdWRlc0Jy
YWNlczsgfQorCiBwcml2YXRlOgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGlu
ZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGJvZHlFeGNsdWRlc0JyYWNlcyk7
CiAKICAgICBib29sIGlzQ29tcGlsaW5nKCkKICAgICB7CkBAIC02NTgsNiArNjc3LDcgQEAgcHJp
dmF0ZToKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fdW5s
aW5rZWRFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tGb3JDYWxsOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3Q7CisgICAgYm9vbCBtX2JvZHlFeGNsdWRlc0JyYWNlczsKIH07CiAKIGlubGluZSBi
b29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1
bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE1OTQ0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Myw5ICs5Myw5IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZh
bEUKICAgICAvLyBXZSBhbHNvIG5lZWQgXG4gYmVmb3JlIHRoZSBjbG9zaW5nIH0gdG8gaGFuZGxl
IC8vIGNvbW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZQogICAgIFN0cmluZyBwcm9n
cmFtOwogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcHJvZ3JhbSA9IEFTQ0lJTGl0
ZXJhbCgiKGZ1bmN0aW9uKCkgeyBcbn0pIik7CisgICAgICAgIHByb2dyYW0gPSBBU0NJSUxpdGVy
YWwoIihmdW5jdGlvbigpIHtcbn0pIik7CiAgICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPT0gMSkK
LSAgICAgICAgcHJvZ3JhbSA9IG1ha2VTdHJpbmcoIihmdW5jdGlvbigpIHsgIiwgYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksICJcbn0pIik7CisgICAgICAgIHByb2dyYW0g
PSBtYWtlU3RyaW5nKCIoZnVuY3Rpb24oKSB7IiwgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyksICJcbn0pIik7CiAgICAgZWxzZSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oIik7CkBA
IC0xMDQsNyArMTA0LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFs
RQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAg
fQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikgeyAiKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIpIHsiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoYXJncy5hdChh
cmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG59KSIpOwogICAgICAgICBwcm9ncmFtID0gYnVpbGRlci50
b1N0cmluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTU5NDQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw4ICs4NSwxMSBAQCBDYWxsVHlwZSBGdW5jdGlvblByb3RvdHlwZTo6Z2V0Q2FsbERhdGEo
CiAvLyBGdW5jdGlvbnMKIAogLy8gQ29tcGF0aWJpbGl0eSBoYWNrIGZvciB0aGUgT3B0aW1vc3Qg
SmF2YVNjcmlwdCBsaWJyYXJ5LiAoU2VlIDxyZGFyOi8vcHJvYmxlbS82NTk1MDQwPi4pCi1zdGF0
aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZOZWVkZWQoU3RyaW5nJiBmdW5jdGlvbkJv
ZHkpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZOZWVkZWQoU3RyaW5nJiBm
dW5jdGlvbkJvZHksIGJvb2wgYm9keUV4Y2x1ZGVzQnJhY2VzKQogeworICAgIGlmIChib2R5RXhj
bHVkZXNCcmFjZXMpCisgICAgICAgIGZ1bmN0aW9uQm9keSA9IG1ha2VTdHJpbmcoInsgIiwgZnVu
Y3Rpb25Cb2R5LCAifSIpOworCiAgICAgQVNTRVJUKGZ1bmN0aW9uQm9keVswXSA9PSAneycpOwog
ICAgIEFTU0VSVChmdW5jdGlvbkJvZHlbZnVuY3Rpb25Cb2R5Lmxlbmd0aCgpIC0gMV0gPT0gJ30n
KTsKIApAQCAtMTA5LDcgKzExMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Qcm8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUoZXhlYyksICIoKSB7
XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICBTdHJpbmcgc291
cmNlU3RyaW5nID0gZXhlY3V0YWJsZS0+c291cmNlKCkudG9TdHJpbmcoKTsKLSAgICAgICAgaW5z
ZXJ0U2VtaWNvbG9uSWZOZWVkZWQoc291cmNlU3RyaW5nKTsKKyAgICAgICAgaW5zZXJ0U2VtaWNv
bG9uSWZOZWVkZWQoc291cmNlU3RyaW5nLCBleGVjdXRhYmxlLT5ib2R5RXhjbHVkZXNCcmFjZXMo
KSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5hbWUoZXhlYyksICIoIiwgZXhlY3V0YWJs
ZS0+cGFyYW1TdHJpbmcoKSwgIikgIiwgc291cmNlU3RyaW5nKSk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTk0NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOCw3ICs3MzgsNyBAQCBVbmxpbmtlZFBy
b2dyYW1Db2RlQmxvY2sqIEpTR2xvYmFsT2JqZWN0CiAgICAgSlNQYXJzZXJTdHJpY3RuZXNzIHN0
cmljdG5lc3MgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBK
U1BhcnNlTm9ybWFsOwogICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBoYXNEZWJ1Z2dl
cigpID8gRGVidWdnZXJPbiA6IERlYnVnZ2VyT2ZmOwogICAgIFByb2ZpbGVyTW9kZSBwcm9maWxl
ck1vZGUgPSBoYXNQcm9maWxlcigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOwotICAgIFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+
Z2V0UHJvZ3JhbUNvZGVCbG9jayh2bSgpLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2Uo
KSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAgICBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gdm0oKS5jb2RlQ2Fj
aGUoKS0+Z2V0UHJvZ3JhbUNvZGVCbG9jayh2bSgpLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5z
b3VyY2UoKSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsK
IAogICAgIGlmIChoYXNEZWJ1Z2dlcigpKQogICAgICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJz
ZWQoY2FsbEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xp
bmUsIGVycm9yLm1fbWVzc2FnZSk7CkBAIC03NDgsNyArNzQ4LDcgQEAgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIHVubGlua2VkQ29kZTsKKyAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7
CiB9CiAKIFVubGlua2VkRXZhbENvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZUV2YWxD
b2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxl
KQpAQCAtNzU3LDcgKzc1Nyw3IEBAIFVubGlua2VkRXZhbENvZGVCbG9jayogSlNHbG9iYWxPYmpl
Y3Q6OmMKICAgICBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcyA9IGV4ZWN1dGFibGUtPmlz
U3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWw7CiAgICAgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IGhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdn
ZXJPZmY7CiAgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGhhc1Byb2ZpbGVyKCkgPyBQ
cm9maWxlck9uIDogUHJvZmlsZXJPZmY7Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGUgPSB2bSgpLmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIGV4ZWN1
dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHBy
b2ZpbGVyTW9kZSwgZXJyb3IpOworICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSB2bSgpLmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIGV4ZWN1
dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHBy
b2ZpbGVyTW9kZSwgZXJyb3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCiAgICAgICAgIGRl
YnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnBy
b3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKQEAgLTc2Nyw3ICs3Njcs
NyBAQCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFsT2JqZWN0OjpjCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiB1bmxpbmtlZENvZGU7CisgICAgcmV0dXJuIHVu
bGlua2VkQ29kZUJsb2NrOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE1OTQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEzLTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRh
Ymxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
NDI0NS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0OiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuaHRtbAorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvYnl0ZWNvZGU6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL2J5dGVjb2RlL0NvZGVCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yOjpHZXRDYWxsZXJDb2RlQmxvY2tGdW5jdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoV2ViQ29yZTo6R2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3Rvcjo6Y29kZUJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGFyc2VyTWV0YURhdGEpOgorICAgICAg
ICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRs
OgorCiAyMDEzLTExLTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTU5NDMwLgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE1OTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04MjQsNiArODI0LDcgQEAgX19aTjdXZWJDb3JlMjJI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50MjRyZQogX19aTjdXZWJDb3JlMjJIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50MjlzZXRJc1ByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbkViCiBfX1pON1dlYkNvcmUyMlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMxNHNoYXJlZEZlYXR1cmVzRXYKIF9fWk43V2ViQ29yZTIyU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDI2Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHNFdgorX19aTjdX
ZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MnZtRXYKIF9fWk43V2ViQ29yZTIyU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlcjM0ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lc0VSTlNf
OVBhZ2VHcm91cEVSS04zV1RGNlZlY3RvcklOUzNfNlJlZlB0cklOU181RnJhbWVFRUVMbTBFTlMz
XzE1Q3Jhc2hPbk92ZXJmbG93RUVFUktOUzNfNlN0cmluZ0VTRV9TRV9TRV9QTlNfMTRTZWN1cml0
eU9yaWdpbkUKIF9fWk43V2ViQ29yZTIyVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0VQOE5TU3RyaW5n
UDVOU1VSTAogX19aTjdXZWJDb3JlMjJjb3VudGVyVmFsdWVGb3JFbGVtZW50RVBOU183RWxlbWVu
dEUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0NvZGVCbG9ja19oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0NvZGVCbG9ja19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29kZUJsb2NrLmg+Cisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE1
OTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsNiArOTUsOCBAQAogI2luY2x1ZGUgIlR5cGVDb252ZXJzaW9ucy5oIgogI2lu
Y2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisj
aW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1ZmZlci5oPgogCkBAIC0xNTgsNiArMTYwLDEzIEBACiAjaW5jbHVkZSAiTW9ja01l
ZGlhUGxheWVyTWVkaWFTb3VyY2UuaCIKICNlbmRpZgogCit1c2luZyBKU0M6OkNvZGVCbG9jazsK
K3VzaW5nIEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOwordXNpbmcgSlNDOjpKU0Z1bmN0aW9uOwor
dXNpbmcgSlNDOjpKU1ZhbHVlOwordXNpbmcgSlNDOjpTY3JpcHRFeGVjdXRhYmxlOwordXNpbmcg
SlNDOjpTdGFja1Zpc2l0b3I7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKQEAgLTEyNTIsNiArMTI2MSw4NiBAQCB2b2lkIEludGVybmFsczo6ZW1p
dEluc3BlY3RvckRpZENhbmNlbEZyCiAjZW5kaWYKIH0KIAorY2xhc3MgR2V0Q2FsbGVyQ29kZUJs
b2NrRnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyQ29kZUJsb2NrRnVuY3RvcigpCisg
ICAgICAgIDogbV9pdGVyYXRpb25zKDApCisgICAgICAgICwgbV9jb2RlQmxvY2soMCkKKyAgICB7
CisgICAgfQorCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0
b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICArK21faXRlcmF0aW9uczsKKyAgICAgICAgaWYg
KG1faXRlcmF0aW9ucyA8IDIpCisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKKworICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOworICAg
ICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKworcHJpdmF0ZToKKyAg
ICBpbnQgbV9pdGVyYXRpb25zOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCitT
dHJpbmcgSW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YShTY3JpcHRWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU0M6OlZNKiB2bSA9IGNvbnRleHREb2N1bWVudCgpLT52bSgpOworICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gdm0tPnRvcENhbGxGcmFtZTsKKyAgICBKU0M6OkpTVmFsdWUgY29kZSA9IHZh
bHVlLmpzVmFsdWUoKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlOworCisgICAg
aWYgKCFjb2RlIHx8IGNvZGUuaXNOdWxsKCkgfHwgY29kZS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIEdldENhbGxlckNvZGVCbG9ja0Z1bmN0b3IgaXRlcjsKKyAgICAgICAgZXhlYy0+aXRlcmF0
ZShpdGVyKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpdGVyLmNvZGVCbG9jaygp
OworICAgICAgICBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsgCisK
KyAgICB9IGVsc2UgaWYgKGNvZGUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgIEpTRnVuY3Rpb24q
IGZ1bmNPYmogPSBKU0M6OmpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29kZS50b09iamVjdChleGVjKSk7
CisgICAgICAgIGV4ZWN1dGFibGUgPSBmdW5jT2JqLT5qc0V4ZWN1dGFibGUoKTsKKworICAgIH0g
ZWxzZQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICB1bnNpZ25lZCBzdGFydExpbmUg
PSBleGVjdXRhYmxlLT5saW5lTm8oKTsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1
dGFibGUtPnN0YXJ0Q29sdW1uKCk7CisgICAgdW5zaWduZWQgZW5kTGluZSA9IGV4ZWN1dGFibGUt
Pmxhc3RMaW5lKCk7CisgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gZXhlY3V0YWJsZS0+ZW5kQ29s
dW1uKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgIGlmIChleGVjdXRhYmxl
LT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworICAgICAgICBTdHJpbmcgaW5mZXJyZWROYW1lID0gZnVuY0V4ZWN1dGFibGUt
PmluZmVycmVkTmFtZSgpLnN0cmluZygpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJmdW5jdGlv
biBcIiIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGluZmVycmVkTmFtZSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIlwiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUt
PmlzRXZhbEV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImV2YWwiKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+aXNQcm9ncmFt
RXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInByb2dyYW0iKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoIiB7ICIpOworICAgIHJlc3VsdC5h
cHBlbmROdW1iZXIoc3RhcnRMaW5lKTsKKyAgICByZXN1bHQuYXBwZW5kKCI6Iik7CisgICAgcmVz
dWx0LmFwcGVuZE51bWJlcihzdGFydENvbHVtbik7CisgICAgcmVzdWx0LmFwcGVuZCgiIC0gIik7
CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRMaW5lKTsKKyAgICByZXN1bHQuYXBwZW5kKCI6
Iik7CisgICAgcmVzdWx0LmFwcGVuZE51bWJlcihlbmRDb2x1bW4pOworICAgIHJlc3VsdC5hcHBl
bmQoIiB9Iik7CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKIHZvaWQgSW50
ZXJuYWxzOjpzZXRCYXR0ZXJ5U3RhdHVzKGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBib29sIGNo
YXJnaW5nLCBkb3VibGUgY2hhcmdpbmdUaW1lLCBkb3VibGUgZGlzY2hhcmdpbmdUaW1lLCBkb3Vi
bGUgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvbnRleHREb2N1bWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShy
ZXZpc2lvbiAxNTk0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8
cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTE4MCw2ICsxODEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBlbWl0SW5zcGVjdG9yRGlkQmVnaW5GcmFtZSgpOwogICAgIHZvaWQgZW1pdElu
c3BlY3RvckRpZENhbmNlbEZyYW1lKCk7CiAKKyAgICBTdHJpbmcgcGFyc2VyTWV0YURhdGEoU2Ny
aXB0VmFsdWUgPSBTY3JpcHRWYWx1ZSgpKTsKKwogICAgIGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIo
aW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhhc0dyYW1t
YXJNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29s
IGhhc0F1dG9jb3JyZWN0ZWRNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgsIEV4Y2VwdGlvbkNv
ZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDE1
OTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDYgKzEzOCw5IEBACiAgICAgdm9pZCBlbWl0SW5zcGVjdG9yRGlkQmVnaW5G
cmFtZSgpOwogICAgIHZvaWQgZW1pdEluc3BlY3RvckRpZENhbmNlbEZyYW1lKCk7CiAKKyAgICAv
LyBDYWxsaW5nIHNjcmlwdEJvdW5kc0ZvcigpIHdpdGggbnVsbCBnZXRzIHRoZSBib3VuZHMgZm9y
IHRoZSBzY3JpcHQgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgRE9NU3RyaW5nIHBhcnNlck1l
dGFEYXRhKG9wdGlvbmFsIGFueSBmdW5jT3JOdWxsKTsKKwogICAgIFtSYWlzZXNFeGNlcHRpb25d
IGJvb2xlYW4gaGFzU3BlbGxpbmdNYXJrZXIobG9uZyBmcm9tLCBsb25nIGxlbmd0aCk7CiAgICAg
W1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBoYXNHcmFtbWFyTWFya2VyKGxvbmcgZnJvbSwgbG9u
ZyBsZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzQXV0b2NvcnJlY3Rl
ZE1hcmtlcihsb25nIGZyb20sIGxvbmcgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NTk0NzUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDEzLTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgdHJhY2tpbmcgb2YgZW5kQ29sdW1uIGZvciBFeGVjdXRhYmxlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI0NS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hw
cm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbjoKKyAgICAgICAg
LSBBZGRlZCBhbiBleHBvcnRlZCBzeW1ib2wgdG8gbWFrZSB0aGUgV2luMzIgYnVpbGQgaGFwcHku
IFRoZSBXaW42NCBzeW1ib2wKKyAgICAgICAgICBpcyBjdXJyZW50bHkgYSBjb3B5IG9mIHRoZSBX
aW4zMiBvbmUuIEl0J2xsIG5lZWQgdG8gYmUgdXBkYXRlZCBpZiB0aGUKKyAgICAgICAgICBtYW5n
bGVkIHN5bWJvbCBpcyBkaWZmZXJlbnQgZm9yIFdpbjY0LgorCiAyMDEzLTExLTE4ICBSeXVhbiBD
aG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGQgRVdlYktp
dENvbmZpZy5jbWFrZSBhbmQgRVdlYktpdDJDb25maWcuY21ha2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVm
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhw
b3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluCShyZXZpc2lvbiAxNTk0NDcpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRF
eHBvcnRzLmRlZi5pbgkod29ya2luZyBjb3B5KQpAQCAtNDYyLDMgKzQ2Miw0IEBAIEVYUE9SVFMK
ICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP3N0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luQEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlQFdlYkNvcmVAQFFBRV9OUEJWU2VjdXJpdHlPcmlnaW5AMkBf
SkBaLCA/c3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW5AQXBwbGljYXRpb25DYWNoZVN0b3JhZ2VA
V2ViQ29yZUBAUUVBQV9OUEVCVlNlY3VyaXR5T3JpZ2luQDJAX0pAWikKICAgICAgICAgc3ltYm9s
V2l0aFBvaW50ZXIoP2NhY2hlU3RvcmFnZUBXZWJDb3JlQEBZQUFBVkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlQDFAWFosID9jYWNoZVN0b3JhZ2VAV2ViQ29yZUBAWUFBRUFWQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2VAMUBYWikKICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP3NldERlZmF1bHRPcmln
aW5RdW90YUBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZUBXZWJDb3JlQEBRQUVYX0pAWiwgP3NldERl
ZmF1bHRPcmlnaW5RdW90YUBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZUBXZWJDb3JlQEBRRUFBWF9K
QFopCisgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD92bUBTY3JpcHRFeGVjdXRpb25Db250ZXh0
QFdlYkNvcmVAQFFBRVBBVlZNQEpTQ0BAWFosID92bUBTY3JpcHRFeGVjdXRpb25Db250ZXh0QFdl
YkNvcmVAQFFBRVBBVlZNQEpTQ0BAWFopClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU5NDc1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMTEtMTggIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0cmFja2luZyBvZiBlbmRDb2x1bW4gZm9yIEV4ZWN1
dGFibGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0MjQ1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9ldmVudHMvd2luZG93LW9uZXJyb3IyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBp
bnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvc2V0QnJlYWtwb2ludC1hY3Rpb25zLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlv
bnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3Rh
cnQtZW5kLWxvY2F0aW9ucy5qczogQWRkZWQuCisgICAgICAgICoganMvZG9tL3N0YWNrLXRyYWNl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9kb20vc3RhY2stdHJhY2UuaHRtbDoKKyAgICAg
ICAgLSBDaGFuZ2VkIHRhYnMgdG8gc3BhY2VzLiBUaGUgdGFicyB3ZXJlIG1ha2luZyBpdCBoYXJk
IHRvIHZpc3VhbGx5IGNvbmZpcm0KKyAgICAgICAgICB0aGUgZXhlY3RlZCBjb2x1bW4gdmFsdWVz
IGZvciAyIGZ1bmN0aW9ucy4KKwogMjAxMy0xMS0xOCAgU2FtdWVsIFdoaXRlICA8c2FtdWVsX3do
aXRlQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQWRkIGFiaWxpdHkgdG8gZmV0Y2ggb25seSB2
aXNpYmxlIHRhYmxlIHJvd3MuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy93aW5kb3ct
b25lcnJvcjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3dpbmRvdy1vbmVycm9yMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1OTQ0NykKKysrIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3dpbmRvdy1vbmVycm9yMi1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiBUZXN0IHRoYXQgdW5jYXVnaHQgZXhjZXB0aW9ucyB3
aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSB3aW5kb3cub25lcnJvciBoYW5kbGVyLiBCdWcgODUxOS4K
IAogTWFpbiBmcmFtZSB3aW5kb3cub25lcnJvcjogRXJyb3I6IElubGluZSBzY3JpcHQgZXhjZXB0
aW9uIGF0IHdpbmRvdy1vbmVycm9yMi5odG1sLCBsaW5lOiAzNCwgY29sdW1uOiA0NwotTWFpbiBm
cmFtZSB3aW5kb3cub25lcnJvcjogRXhjZXB0aW9uIGluIG9ubG9hZCBhdCB3aW5kb3ctb25lcnJv
cjIuaHRtbCwgbGluZTogMiwgY29sdW1uOiAxNTAKK01haW4gZnJhbWUgd2luZG93Lm9uZXJyb3I6
IEV4Y2VwdGlvbiBpbiBvbmxvYWQgYXQgd2luZG93LW9uZXJyb3IyLmh0bWwsIGxpbmU6IDIsIGNv
bHVtbjogNjYKIE1haW4gZnJhbWUgd2luZG93Lm9uZXJyb3I6IEVycm9yOiBFeGNlcHRpb24gaW4g
c2V0VGltZW91dCBhdCB3aW5kb3ctb25lcnJvcjIuaHRtbCwgbGluZTogMjksIGNvbHVtbjogNDcK
IApJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldEJyZWFr
cG9pbnQtYWN0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5z
cGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldEJyZWFrcG9pbnQtYWN0aW9ucy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDE1OTQ0NykKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9k
ZWJ1Z2dlci9zZXRCcmVha3BvaW50LWFjdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNCwxMSArMTQsMTEgQEAgaW5zaWRlIGJyZWFrcG9pbnRBY3Rpb25zIGE6KDIpIGI6KDEy
KQogaW5zaWRlIGJyZWFrcG9pbnRBY3Rpb25zIGE6KDIpIGI6KFtvYmplY3QgT2JqZWN0XSkKIFJ1
bm5pbmcgYnJlYWtwb2ludEFjdGlvbnMgdG8gdHJpZ2dlcmluZyB0aGUgYnJlYWtwb2ludCBhY3Rp
b25zCiBpbnNpZGUgYnJlYWtwb2ludEFjdGlvbnMgYTooMTIpIGI6KFtvYmplY3QgT2JqZWN0XSkK
LVBBU1M6IENvbnNvbGUgTWVzc2FnZTogeyJzb3VyY2UiOiJqYXZhc2NyaXB0IiwibGV2ZWwiOiJs
b2ciLCJ0ZXh0IjoibG9nLWFjdGlvbi1iZWZvcmUiLCJsb2NhdGlvbiI6ImJyZWFrcG9pbnQuanM6
MTk6MSJ9CitQQVNTOiBDb25zb2xlIE1lc3NhZ2U6IHsic291cmNlIjoiamF2YXNjcmlwdCIsImxl
dmVsIjoibG9nIiwidGV4dCI6ImxvZy1hY3Rpb24tYmVmb3JlIiwibG9jYXRpb24iOiJicmVha3Bv
aW50LmpzOjE5OjIifQogUEFTUzogQ29uc29sZSBNZXNzYWdlOiB7InNvdXJjZSI6ImNvbnNvbGUt
YXBpIiwibGV2ZWwiOiJsb2ciLCJ0ZXh0IjoiZXZhbC1hY3Rpb24iLCJsb2NhdGlvbiI6Ij8/Pzox
OjI2IiwicGFyYW1ldGVycyI6W3sidHlwZSI6InN0cmluZyJ9LHsidHlwZSI6Im51bWJlciJ9LHsi
dHlwZSI6Im9iamVjdCJ9XX0KLVBBU1M6IENvbnNvbGUgTWVzc2FnZTogeyJzb3VyY2UiOiJqYXZh
c2NyaXB0IiwibGV2ZWwiOiJsb2ciLCJ0ZXh0IjoibG9nLWFjdGlvbi1hZnRlciIsImxvY2F0aW9u
IjoiYnJlYWtwb2ludC5qczoxOToxIn0KK1BBU1M6IENvbnNvbGUgTWVzc2FnZTogeyJzb3VyY2Ui
OiJqYXZhc2NyaXB0IiwibGV2ZWwiOiJsb2ciLCJ0ZXh0IjoibG9nLWFjdGlvbi1hZnRlciIsImxv
Y2F0aW9uIjoiYnJlYWtwb2ludC5qczoxOToyIn0KIGluc2lkZSBicmVha3BvaW50QWN0aW9ucyBh
OigxMDApIGI6KFtvYmplY3QgSFRNTEJvZHlFbGVtZW50XSkKLVBBU1M6IENvbnNvbGUgTWVzc2Fn
ZTogeyJzb3VyY2UiOiJqYXZhc2NyaXB0IiwibGV2ZWwiOiJsb2ciLCJ0ZXh0IjoibG9nLWFjdGlv
bi1iZWZvcmUiLCJsb2NhdGlvbiI6ImJyZWFrcG9pbnQuanM6MTk6MSJ9CitQQVNTOiBDb25zb2xl
IE1lc3NhZ2U6IHsic291cmNlIjoiamF2YXNjcmlwdCIsImxldmVsIjoibG9nIiwidGV4dCI6Imxv
Zy1hY3Rpb24tYmVmb3JlIiwibG9jYXRpb24iOiJicmVha3BvaW50LmpzOjE5OjIifQogUEFTUzog
Q29uc29sZSBNZXNzYWdlOiB7InNvdXJjZSI6ImNvbnNvbGUtYXBpIiwibGV2ZWwiOiJsb2ciLCJ0
ZXh0IjoiZXZhbC1hY3Rpb24iLCJsb2NhdGlvbiI6Ij8/PzoxOjI2IiwicGFyYW1ldGVycyI6W3si
dHlwZSI6InN0cmluZyJ9LHsidHlwZSI6Im51bWJlciJ9LHsidHlwZSI6Im9iamVjdCIsInN1YnR5
cGUiOiJub2RlIn1dfQotUEFTUzogQ29uc29sZSBNZXNzYWdlOiB7InNvdXJjZSI6ImphdmFzY3Jp
cHQiLCJsZXZlbCI6ImxvZyIsInRleHQiOiJsb2ctYWN0aW9uLWFmdGVyIiwibG9jYXRpb24iOiJi
cmVha3BvaW50LmpzOjE5OjEifQorUEFTUzogQ29uc29sZSBNZXNzYWdlOiB7InNvdXJjZSI6Imph
dmFzY3JpcHQiLCJsZXZlbCI6ImxvZyIsInRleHQiOiJsb2ctYWN0aW9uLWFmdGVyIiwibG9jYXRp
b24iOiJicmVha3BvaW50LmpzOjE5OjIifQogCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc2Ny
aXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlv
bnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACitwcm9ncmFt
IHsgNzo5IC0gMTk6MSB9Citwcm9ncmFtIHsgMjE6OSAtIDIxOjUwIH0KK3Byb2dyYW0geyAyMTo2
OCAtIDIxOjEwOSB9Citwcm9ncmFtIHsgMjM6OSAtIDIzOjUwIH0KK3Byb2dyYW0geyAyMzo2OCAt
IDIzOjEwOSB9Citwcm9ncmFtIHsgMjU6OSAtIDI2OjEgfQorcHJvZ3JhbSB7IDI3OjEzIC0gMjg6
MSB9CitmdW5jdGlvbiAiaGYxIiB7IDMwOjI0IC0gMzA6MzggfQorZnVuY3Rpb24gImhmMiIgeyAz
MToyOCAtIDMxOjQyIH0KK2Z1bmN0aW9uICJoZjMiIHsgMzI6MzIgLSAzMjo0NiB9CitmdW5jdGlv
biAiaGY0IiB7IDM0OjI0IC0gMzY6OSB9CitmdW5jdGlvbiAiaGY1IiB7IDM3OjI4IC0gMzk6OSB9
CitmdW5jdGlvbiAiaGY2IiB7IDQwOjMyIC0gNDI6OSB9CitmdW5jdGlvbiAiaGY3IiB7IDQ1OjE2
IC0gNDc6NSB9CitmdW5jdGlvbiAiaGY4IiB7IDQ5OjM1IC0gNDk6NDUgfQorZnVuY3Rpb24gImhm
OSIgeyA0OTo5NyAtIDQ5OjEwNyB9CisKK3Byb2dyYW0geyAxOjEgLSA0NzQ6MSB9CisKKyAgT24g
Zmlyc3QgbGluZToKK2Z1bmN0aW9uICJmMCIgeyAxOjExNSAtIDE6MjY2IH0KK2Z1bmN0aW9uICJm
MGEiIHsgMToxNDIgLSAxOjI1NyB9CitmdW5jdGlvbiAiZjBiIiB7IDE6MTcwIC0gMToyNDggfQor
ZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIngwIiB7IDE6Mjk4IC0gMTo0NzYgfQorZnVu
Y3Rpb24gIngwYSIgeyAxOjMzMCAtIDE6NDY2IH0KK2Z1bmN0aW9uICJ4MGIiIHsgMTozNjQgLSAx
OjQ1NiB9CitldmFsIHsgMToxIC0gMTo1NiB9CisKKyAgRnVuY3Rpb25zIERlY2xhcmF0aW9ucyBp
biBhIGZ1bmN0aW9uOgorZnVuY3Rpb24gImYxIiB7IDk6MjIgLSA5OjExMyB9CitldmFsIHsgMTox
IC0gMTo1NiB9CitmdW5jdGlvbiAiZjIiIHsgMTI6MjIgLSAxNjo1IH0KK2Z1bmN0aW9uICJmMmEi
IHsgMTQ6MjQgLSAxNDoxMTYgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImYzIiB7
IDE5OjIyIC0gMzE6NSB9CitmdW5jdGlvbiAiZjNhIiB7IDIxOjI0IC0gMjk6OSB9CitmdW5jdGlv
biAiZjNiIiB7IDIzOjI4IC0gMjc6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24g
ImY0IiB7IDM0OjIyIC0gMzQ6NzEgfQorZnVuY3Rpb24gImY0YSIgeyAzNDo0OSAtIDM0OjUwIH0K
K2Z1bmN0aW9uICJmNSIgeyAzNjoyMiAtIDM2OjE1MSB9CitmdW5jdGlvbiAiZjVhIiB7IDM2OjQ5
IC0gMzY6MTQxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmNiIgeyAzODoyMiAt
IDM4OjE4OSB9CitmdW5jdGlvbiAiZjZhIiB7IDM4OjQ5IC0gMzg6MTc5IH0KK2Z1bmN0aW9uICJm
NmIiIHsgMzg6NzcgLSAzODoxNjkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorCisgIEluZGVudGVk
IEZ1bmN0aW9ucyBEZWNsYXJhdGlvbnMgaW4gYSBmdW5jdGlvbjoKK2Z1bmN0aW9uICJmaTEiIHsg
NDM6MjcgLSA0MzoxMTkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpMiIgeyA0
NjoyNyAtIDUwOjkgfQorZnVuY3Rpb24gImZpMmEiIHsgNDg6MjkgLSA0ODoxMjIgfQorZXZhbCB7
IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpMyIgeyA1MzoyNyAtIDY1OjkgfQorZnVuY3Rpb24g
ImZpM2EiIHsgNTU6MjkgLSA2MzoxMyB9CitmdW5jdGlvbiAiZmkzYiIgeyA1NzozMyAtIDYxOjE3
IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJmaTQiIHsgNjg6MjcgLSA2ODo4MCB9
CitmdW5jdGlvbiAiZmk0YSIgeyA2ODo1NiAtIDY4OjU3IH0KK2Z1bmN0aW9uICJmaTUiIHsgNzA6
MjcgLSA3MDoxNjAgfQorZnVuY3Rpb24gImZpNWEiIHsgNzA6NTYgLSA3MDoxNDkgfQorZXZhbCB7
IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImZpNiIgeyA3MjoyNyAtIDcyOjIwMSB9CitmdW5jdGlv
biAiZmk2YSIgeyA3Mjo1NiAtIDcyOjE5MCB9CitmdW5jdGlvbiAiZmk2YiIgeyA3Mjo4NiAtIDcy
OjE3OSB9CitldmFsIHsgMToxIC0gMTo1NiB9CisKKyAgRnVuY3Rpb25zIEV4cHJlc3Npb25zIGlu
IGEgZnVuY3Rpb246CitmdW5jdGlvbiAieDEiIHsgNzc6MjggLSA3NzoxMTkgfQorZXZhbCB7IDE6
MSAtIDE6NTYgfQorZnVuY3Rpb24gIngyIiB7IDgwOjI4IC0gODQ6NSB9CitmdW5jdGlvbiAieDJh
IiB7IDgyOjMwIC0gODI6MTIyIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJ4MyIg
eyA4NzoyOCAtIDk5OjUgfQorZnVuY3Rpb24gIngzYSIgeyA4OTozMCAtIDk3OjkgfQorZnVuY3Rp
b24gIngzYiIgeyA5MTozNCAtIDk1OjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9u
ICJ4NCIgeyAxMDI6MjggLSAxMDI6ODMgfQorZnVuY3Rpb24gIng0YSIgeyAxMDI6NjEgLSAxMDI6
NjIgfQorZnVuY3Rpb24gIng1IiB7IDEwNDoyOCAtIDEwNDoxNjMgfQorZnVuY3Rpb24gIng1YSIg
eyAxMDQ6NjEgLSAxMDQ6MTUzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJ4NiIg
eyAxMDY6MjggLSAxMDY6MjA3IH0KK2Z1bmN0aW9uICJ4NmEiIHsgMTA2OjYxIC0gMTA2OjE5NyB9
CitmdW5jdGlvbiAieDZiIiB7IDEwNjo5NSAtIDEwNjoxODcgfQorZXZhbCB7IDE6MSAtIDE6NTYg
fQorCisgIEluZGVudGVkIEZ1bmN0aW9ucyBFeHByZXNzaW9ucyBpbiBhIGZ1bmN0aW9uOgorZnVu
Y3Rpb24gInhpMSIgeyAxMTE6MzMgLSAxMTE6MTI1IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1
bmN0aW9uICJ4aTIiIHsgMTE0OjMzIC0gMTE4OjkgfQorZnVuY3Rpb24gInhpMmEiIHsgMTE2OjM1
IC0gMTE2OjEyOCB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAieGkzIiB7IDEyMToz
MyAtIDEzMzo5IH0KK2Z1bmN0aW9uICJ4aTNhIiB7IDEyMzozNSAtIDEzMToxMyB9CitmdW5jdGlv
biAieGkzYiIgeyAxMjU6MzkgLSAxMjk6MTcgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rp
b24gInhpNCIgeyAxMzY6MzMgLSAxMzY6OTIgfQorZnVuY3Rpb24gInhpNGEiIHsgMTM2OjY4IC0g
MTM2OjY5IH0KK2Z1bmN0aW9uICJ4aTUiIHsgMTM4OjMzIC0gMTM4OjE3MiB9CitmdW5jdGlvbiAi
eGk1YSIgeyAxMzg6NjggLSAxMzg6MTYxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9u
ICJ4aTYiIHsgMTQwOjMzIC0gMTQwOjIxOSB9CitmdW5jdGlvbiAieGk2YSIgeyAxNDA6NjggLSAx
NDA6MjA4IH0KK2Z1bmN0aW9uICJ4aTZiIiB7IDE0MDoxMDQgLSAxNDA6MTk3IH0KK2V2YWwgeyAx
OjEgLSAxOjU2IH0KKworICBBbm9ueW1vdXMgRnVuY3Rpb24gRGVjbGFyYXRpb24gaW4gYSBmdW5j
dGlvbjoKK2Z1bmN0aW9uICIiIHsgMTQ2OjU4IC0gMTUxOjUgfQorZXZhbCB7IDE6MSAtIDE6NTYg
fQorCisgIEdsb2JhbCBldmFsOgorZXZhbCB7IDE6MSAtIDE6NTYgfQorCisgIEdsb2JhbCBGdW5j
dGlvbnMgRGVjbGFyYXRpb25zOgorZnVuY3Rpb24gImdmMSIgeyAxNjE6MTkgLSAxNjE6MTExIH0K
K2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJnZjIiIHsgMTY0OjE5IC0gMTY4OjEgfQor
ZnVuY3Rpb24gImdmMmEiIHsgMTY2OjIxIC0gMTY2OjExNCB9CitldmFsIHsgMToxIC0gMTo1NiB9
CitmdW5jdGlvbiAiZ2YzIiB7IDE3MToxOSAtIDE4MzoxIH0KK2Z1bmN0aW9uICJnZjNhIiB7IDE3
MzoyMSAtIDE4MTo1IH0KK2Z1bmN0aW9uICJnZjNiIiB7IDE3NToyNSAtIDE3OTo5IH0KK2V2YWwg
eyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJnZjQiIHsgMTg2OjE5IC0gMTg2OjcyIH0KK2Z1bmN0
aW9uICJnZjRhIiB7IDE4Njo0OCAtIDE4Njo0OSB9CitmdW5jdGlvbiAiZ2Y1IiB7IDE4ODoxOSAt
IDE4ODoxNTIgfQorZnVuY3Rpb24gImdmNWEiIHsgMTg4OjQ4IC0gMTg4OjE0MSB9CitldmFsIHsg
MToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ2Y2IiB7IDE5MDoxOSAtIDE5MDoxOTMgfQorZnVuY3Rp
b24gImdmNmEiIHsgMTkwOjQ4IC0gMTkwOjE4MiB9CitmdW5jdGlvbiAiZ2Y2YiIgeyAxOTA6Nzgg
LSAxOTA6MTcxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KKworICBJbmRlbnRlZCBHbG9iYWwgRnVu
Y3Rpb25zIERlY2xhcmF0aW9uczoKK2Z1bmN0aW9uICJnZmkxIiB7IDE5NToyNCAtIDE5NToxMTcg
fQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImdmaTIiIHsgMTk4OjI0IC0gMjAyOjUg
fQorZnVuY3Rpb24gImdmaTJhIiB7IDIwMDoyNiAtIDIwMDoxMjAgfQorZXZhbCB7IDE6MSAtIDE6
NTYgfQorZnVuY3Rpb24gImdmaTMiIHsgMjA1OjI0IC0gMjE3OjUgfQorZnVuY3Rpb24gImdmaTNh
IiB7IDIwNzoyNiAtIDIxNTo5IH0KK2Z1bmN0aW9uICJnZmkzYiIgeyAyMDk6MzAgLSAyMTM6MTMg
fQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gImdmaTQiIHsgMjIwOjI0IC0gMjIwOjgx
IH0KK2Z1bmN0aW9uICJnZmk0YSIgeyAyMjA6NTUgLSAyMjA6NTYgfQorZnVuY3Rpb24gImdmaTUi
IHsgMjIyOjI0IC0gMjIyOjE2MSB9CitmdW5jdGlvbiAiZ2ZpNWEiIHsgMjIyOjU1IC0gMjIyOjE0
OSB9CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ2ZpNiIgeyAyMjQ6MjQgLSAyMjQ6
MjA1IH0KK2Z1bmN0aW9uICJnZmk2YSIgeyAyMjQ6NTUgLSAyMjQ6MTkzIH0KK2Z1bmN0aW9uICJn
Zmk2YiIgeyAyMjQ6ODcgLSAyMjQ6MTgxIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KKworICBHbG9i
YWwgRnVuY3Rpb25zIEV4cHJlc3Npb25zOgorZnVuY3Rpb24gImd4MSIgeyAyMjk6MjUgLSAyMjk6
MTE3IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneDIiIHsgMjMyOjI1IC0gMjM2
OjEgfQorZnVuY3Rpb24gImd4MmEiIHsgMjM0OjI3IC0gMjM0OjEyMCB9CitldmFsIHsgMToxIC0g
MTo1NiB9CitmdW5jdGlvbiAiZ3gzIiB7IDIzOToyNSAtIDI1MToxIH0KK2Z1bmN0aW9uICJneDNh
IiB7IDI0MToyNyAtIDI0OTo1IH0KK2Z1bmN0aW9uICJneDNiIiB7IDI0MzozMSAtIDI0Nzo5IH0K
K2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneDQiIHsgMjU0OjI1IC0gMjU0Ojg0IH0K
K2Z1bmN0aW9uICJneDRhIiB7IDI1NDo2MCAtIDI1NDo2MSB9CitmdW5jdGlvbiAiZ3g1IiB7IDI1
NjoyNSAtIDI1NjoxNjQgfQorZnVuY3Rpb24gImd4NWEiIHsgMjU2OjYwIC0gMjU2OjE1MyB9Citl
dmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3g2IiB7IDI1ODoyNSAtIDI1ODoyMTEgfQor
ZnVuY3Rpb24gImd4NmEiIHsgMjU4OjYwIC0gMjU4OjIwMCB9CitmdW5jdGlvbiAiZ3g2YiIgeyAy
NTg6OTYgLSAyNTg6MTg5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KKworICBJbmRlbnRlZCBGdW5j
dGlvbnMgRGVjbGFyYXRpb25zOgorZnVuY3Rpb24gImd4aTEiIHsgMjYzOjMwIC0gMjYzOjEyMyB9
CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3hpMiIgeyAyNjY6MzAgLSAyNzA6NSB9
CitmdW5jdGlvbiAiZ3hpMmEiIHsgMjY4OjMyIC0gMjY4OjEyNiB9CitldmFsIHsgMToxIC0gMTo1
NiB9CitmdW5jdGlvbiAiZ3hpMyIgeyAyNzM6MzAgLSAyODU6NSB9CitmdW5jdGlvbiAiZ3hpM2Ei
IHsgMjc1OjMyIC0gMjgzOjkgfQorZnVuY3Rpb24gImd4aTNiIiB7IDI3NzozNiAtIDI4MToxMyB9
CitldmFsIHsgMToxIC0gMTo1NiB9CitmdW5jdGlvbiAiZ3hpNCIgeyAyODg6MzAgLSAyODg6OTMg
fQorZnVuY3Rpb24gImd4aTRhIiB7IDI4ODo2NyAtIDI4ODo2OCB9CitmdW5jdGlvbiAiZ3hpNSIg
eyAyOTA6MzAgLSAyOTA6MTczIH0KK2Z1bmN0aW9uICJneGk1YSIgeyAyOTA6NjcgLSAyOTA6MTYx
IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICJneGk2IiB7IDI5MjozMCAtIDI5Mjoy
MjMgfQorZnVuY3Rpb24gImd4aTZhIiB7IDI5Mjo2NyAtIDI5MjoyMTEgfQorZnVuY3Rpb24gImd4
aTZiIiB7IDI5MjoxMDUgLSAyOTI6MTk5IH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KKworICBBbm9u
eW1vdXMgR2xvYmFsIEZ1bmN0aW9uIERlY2xhcmF0aW9uczoKK2Z1bmN0aW9uICIiIHsgMjk5OjU2
IC0gMzA0OjEgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorCisgIEZ1bmN0aW9uIERlY2xhcmF0aW9u
cyBpbiBhbiBldmFsOgorZXZhbCB7IDE6MSAtIDE2OjcgfQorZnVuY3Rpb24gImVmMSIgeyAzOjIw
IC0gMTQ6NSB9CitmdW5jdGlvbiAiZWYxYSIgeyA1OjI1IC0gMTI6OSB9CitmdW5jdGlvbiAiZWYx
YiIgeyA3OjI5IC0gMTA6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZXZhbCB7IDE6MSAtIDE6
MjI1IH0KK2Z1bmN0aW9uICJlZjIiIHsgMTo1OSAtIDE6MjE3IH0KK2Z1bmN0aW9uICJlZjJhIiB7
IDE6ODggLSAxOjIwNyB9CitmdW5jdGlvbiAiZWYyYiIgeyAxOjExOCAtIDE6MTk3IH0KK2V2YWwg
eyAxOjEgLSAxOjU2IH0KK2V2YWwgeyAxOjEgLSAxNzo4IH0KK2Z1bmN0aW9uICJlZmkxIiB7IDQ6
MjEgLSAxNTo1IH0KK2Z1bmN0aW9uICJlZmkxYSIgeyA2OjI2IC0gMTM6OSB9CitmdW5jdGlvbiAi
ZWZpMWIiIHsgODozMCAtIDExOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2V2YWwgeyAxOjEg
LSAxOjIzNCB9CitmdW5jdGlvbiAiZWZpMiIgeyAxOjYwIC0gMToyMjUgfQorZnVuY3Rpb24gImVm
aTJhIiB7IDE6OTEgLSAxOjIxNCB9CitmdW5jdGlvbiAiZWZpMmIiIHsgMToxMjMgLSAxOjIwMyB9
CitldmFsIHsgMToxIC0gMTo1NiB9CisKKyAgRnVuY3Rpb24gRXhwcmVzc2lvbnMgaW4gYW4gZXZh
bDoKK2V2YWwgeyAxOjEgLSAxNjo3IH0KK2Z1bmN0aW9uICJleDEiIHsgMzoyNiAtIDE0OjUgfQor
ZnVuY3Rpb24gImV4MWEiIHsgNTozMSAtIDEyOjkgfQorZnVuY3Rpb24gImV4MWIiIHsgNzozNSAt
IDEwOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KK2V2YWwgeyAxOjEgLSAxOjI0NiB9CitmdW5j
dGlvbiAiZXgyIiB7IDE6NjUgLSAxOjIzNyB9CitmdW5jdGlvbiAiZXgyYSIgeyAxOjEwMCAtIDE6
MjI2IH0KK2Z1bmN0aW9uICJleDJiIiB7IDE6MTM2IC0gMToyMTUgfQorZXZhbCB7IDE6MSAtIDE6
NTYgfQorZXZhbCB7IDE6MSAtIDE3OjggfQorZnVuY3Rpb24gImV4aTEiIHsgNDoyNyAtIDE1OjUg
fQorZnVuY3Rpb24gImV4aTFhIiB7IDY6MzIgLSAxMzo5IH0KK2Z1bmN0aW9uICJleGkxYiIgeyA4
OjM2IC0gMTE6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZXZhbCB7IDE6MSAtIDE6MjU1IH0K
K2Z1bmN0aW9uICJleGkyIiB7IDE6NjYgLSAxOjI0NSB9CitmdW5jdGlvbiAiZXhpMmEiIHsgMTox
MDMgLSAxOjIzMyB9CitmdW5jdGlvbiAiZXhpMmIiIHsgMToxNDEgLSAxOjIyMSB9CitldmFsIHsg
MToxIC0gMTo1NiB9CisKKyAgbmV3IEZ1bmN0aW9uIE9iamVjdDoKK2Z1bmN0aW9uICIiIHsgMTox
IC0gMToyMjggfQorZnVuY3Rpb24gIm5mMWEiIHsgMTo2MCAtIDE6MjE5IH0KK2Z1bmN0aW9uICJu
ZjFiIiB7IDE6OTAgLSAxOjIwOSB9CitmdW5jdGlvbiAibmYxYyIgeyAxOjEyMCAtIDE6MTk5IH0K
K2V2YWwgeyAxOjEgLSAxOjU2IH0KK2Z1bmN0aW9uICIiIHsgMToxIC0gMTc6OCB9CitmdW5jdGlv
biAibmYyYSIgeyA0OjIxIC0gMTU6NSB9CitmdW5jdGlvbiAibmYyYiIgeyA2OjI1IC0gMTM6OSB9
CitmdW5jdGlvbiAibmYyYyIgeyA4OjI5IC0gMTE6MTMgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQor
ZnVuY3Rpb24gIiIgeyAxOjEgLSAxOjIyOCB9CitmdW5jdGlvbiAibmYxYSIgeyAxOjYwIC0gMToy
MTkgfQorZnVuY3Rpb24gIm5mMWIiIHsgMTo5MCAtIDE6MjA5IH0KK2Z1bmN0aW9uICJuZjFjIiB7
IDE6MTIwIC0gMToxOTkgfQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIiIgeyAxOjEg
LSAxOjIzNyB9CitmdW5jdGlvbiAibmZpMWEiIHsgMTo2MSAtIDE6MjI3IH0KK2Z1bmN0aW9uICJu
ZmkxYiIgeyAxOjkzIC0gMToyMTYgfQorZnVuY3Rpb24gIm5maTFjIiB7IDE6MTI1IC0gMToyMDUg
fQorZXZhbCB7IDE6MSAtIDE6NTYgfQorZnVuY3Rpb24gIiIgeyAxOjEgLSAxNzo4IH0KK2Z1bmN0
aW9uICJuZjJhIiB7IDQ6MjEgLSAxNTo1IH0KK2Z1bmN0aW9uICJuZjJiIiB7IDY6MjUgLSAxMzo5
IH0KK2Z1bmN0aW9uICJuZjJjIiB7IDg6MjkgLSAxMToxMyB9CitldmFsIHsgMToxIC0gMTo1NiB9
CitmdW5jdGlvbiAiIiB7IDE6MSAtIDE3OjkgfQorZnVuY3Rpb24gIm5maTJhIiB7IDQ6MjIgLSAx
NTo1IH0KK2Z1bmN0aW9uICJuZmkyYiIgeyA2OjI2IC0gMTM6OSB9CitmdW5jdGlvbiAibmZpMmMi
IHsgODozMCAtIDExOjEzIH0KK2V2YWwgeyAxOjEgLSAxOjU2IH0KKworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL2RvbS9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC1zdGFydC1lbmQtbG9jYXRpb25zLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gc28gdGhhdCBzY3JpcHQtdGVz
dHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMKKyAgICAvLyBjYW4gYmUgbGVzcyB2ZXJi
b3NlIGZvciBjYXNlcyB3aGVyZSB3ZSBoYXZlIGEgZnVuY3Rpb24gd2hvc2UgYm91bmRzIHdlCisg
ICAgLy8gd2FudCB0byBkdW1wLgorICAgIGZ1bmN0aW9uIGR1bXAoZnVuYykgeworICAgICAgICBk
ZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKGZ1bmMpKTsKKyAgICB9CisKKyAg
ICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOworCisgICAgdmFyIGR1
bW15ID0gNTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PmRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFy
c2VyTWV0YURhdGEoKSk7PC9zY3JpcHQ+IDxzY3JpcHQ+ZGVidWcod2luZG93LmludGVybmFscy5w
YXJzZXJNZXRhRGF0YSgpKTs8L3NjcmlwdD4gCisKKzxzY3JpcHQ+ZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTs8L3NjcmlwdD4gPHNjcmlwdD5kZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOzwvc2NyaXB0PgorCis8c2NyaXB0PmRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Cis8L3NjcmlwdD4KKyAgICA8c2NyaXB0PmRl
YnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Cis8L3NjcmlwdD4KKworPHNj
cmlwdD5mdW5jdGlvbiBoZjEoKSB7IGR1bW15ICs9IDU7IH0gaGYxKCk7IGR1bXAoaGYxKTs8L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PmZ1bmN0aW9uIGhmMigpIHsgZHVtbXkgKz0gNTsgfSBoZjIoKTsg
ZHVtcChoZjIpOyA8L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD5mdW5jdGlvbiBoZjMoKSB7IGR1
bW15ICs9IDU7IH0gaGYzKCk7IGR1bXAoaGYzKTsgPC9zY3JpcHQ+CisKKzxzY3JpcHQ+ZnVuY3Rp
b24gaGY0KCkgeworICAgICAgICAgICAgZHVtbXkgKz0gNTsgCisgICAgICAgIH0gaGY0KCk7IGR1
bXAoaGY0KTs8L3NjcmlwdD4KKyAgICA8c2NyaXB0PmZ1bmN0aW9uIGhmNSgpIHsKKyAgICAgICAg
ICAgIGR1bW15ICs9IDU7IAorICAgICAgICB9IGhmNSgpOyBkdW1wKGhmNSk7PC9zY3JpcHQ+Cisg
ICAgICAgIDxzY3JpcHQ+ZnVuY3Rpb24gaGY2KCkgeworICAgICAgICAgICAgZHVtbXkgKz0gNTsg
CisgICAgICAgIH0gaGY2KCk7IGR1bXAoaGY2KTs8L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0
aW9uIGhmNygpIHsKKyAgICAgICAgZHVtbXkgKz0gNTsgCisgICAgfSBoZjcoKTsgZHVtcChoZjcp
Ozwvc2NyaXB0PgorCis8c2NyaXB0PnZhciB2ID0gMTsgZnVuY3Rpb24gaGY4KCkgeyB2ICs9IDU7
IH0gaGY4KCk7IGR1bXAoaGY4KTs8L3NjcmlwdD4gPHNjcmlwdD5mdW5jdGlvbiBoZjkoKSB7IHYg
Kz0gNTsgfSBoZjkoKTsgZHVtcChoZjkpOyBkZWJ1ZygiIik7PC9zY3JpcHQ+CisKKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvc2NyaXB0LXN0YXJ0LWVuZC1sb2NhdGlvbnMuanMiPjwvc2NyaXB0
PiAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9zdGFjay10cmFj
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRy
YWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU5NDQ3KQorKysgTGF5b3V0VGVzdHMvanMvZG9t
L3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEz
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKICAgICAyICAgZ2xv
YmFsIGNvZGUgYXQgc3RhY2stdHJhY2UuanM6NDc6MTgKIAogLS0+IFN0YWNrIFRyYWNlOgotICAg
IDAgICBodG1sSW5uZXIgYXQgc3RhY2stdHJhY2UuaHRtbDoxMDozOQorICAgIDAgICBodG1sSW5u
ZXIgYXQgc3RhY2stdHJhY2UuaHRtbDoxMDo1MQogICAgIDEgICBzY3JpcHRlcklubmVyIGF0IHN0
YWNrLXRyYWNlLmpzOjMyOjM3CiAgICAgMiAgIGdsb2JhbCBjb2RlIGF0IHN0YWNrLXRyYWNlLmpz
OjQ5OjIwCiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgaHRtbElubmVyIGF0IHN0YWNrLXRy
YWNlLmh0bWw6MTA6MzkKLSAgICAxICAgaHRtbE91dGVyIGF0IHN0YWNrLXRyYWNlLmh0bWw6MTE6
MzMKKyAgICAwICAgaHRtbElubmVyIGF0IHN0YWNrLXRyYWNlLmh0bWw6MTA6NTEKKyAgICAxICAg
aHRtbE91dGVyIGF0IHN0YWNrLXRyYWNlLmh0bWw6MTE6NDUKICAgICAyICAgc2NyaXB0ZXJPdXRl
ciBhdCBzdGFjay10cmFjZS5qczozMzozNwogICAgIDMgICBnbG9iYWwgY29kZSBhdCBzdGFjay10
cmFjZS5qczo1MDoyMAogCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vc3RhY2stdHJhY2UuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vc3RhY2stdHJhY2UuaHRtbAkocmV2
aXNpb24gMTU5NDQ3KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIDwvaGVhZD4KIAogPGJvZHk+Ci0JPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Ci0JPHAgaWQ9ImNvbnNvbGUiPjwvcD4KLQk8c2NyaXB0PmZ1bmN0
aW9uIGh0bWxJbm5lcigpIHsgdGhyb3cgbmV3IEVycm9yKCJFcnJvciBpbiBIVE1MIik7IH08L3Nj
cmlwdD4KLQk8c2NyaXB0PmZ1bmN0aW9uIGh0bWxPdXRlcigpIHsgaHRtbElubmVyKCk7IH08L3Nj
cmlwdD4KLQk8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNlLmpzIj48L3Njcmlw
dD4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKyAgICA8cCBpZD0iY29uc29sZSI+PC9w
PgorICAgIDxzY3JpcHQ+ZnVuY3Rpb24gaHRtbElubmVyKCkgeyB0aHJvdyBuZXcgRXJyb3IoIkVy
cm9yIGluIEhUTUwiKTsgfTwvc2NyaXB0PgorICAgIDxzY3JpcHQ+ZnVuY3Rpb24gaHRtbE91dGVy
KCkgeyBodG1sSW5uZXIoKTsgfTwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvc3RhY2stdHJhY2UuanMiPjwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3NjcmlwdC1z
dGFydC1lbmQtbG9jYXRpb25zLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvZG9t
L3NjcmlwdC10ZXN0cy9zY3JpcHQtc3RhcnQtZW5kLWxvY2F0aW9ucy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ3MyBAQAordmFyIHZhbHVlID0gMTA7IHZhciBzdW0gPSAxOyBkZWJ1Zyh3
aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOyBkZWJ1ZygiXG4gIE9uIGZpcnN0IGxp
bmU6Iik7IGZ1bmN0aW9uIGYwKCkgeyBkdW1wKGYwKTsgZnVuY3Rpb24gZjBhKCkgeyBkdW1wKGYw
YSk7IGZ1bmN0aW9uIGYwYigpIHsgZHVtcChmMGIpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0gZjBiKCk7IH0gZjBhKCk7
IH0gZjAoKTsgIHZhciB4MCA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKHgwKTt2YXIgeDBhID0gZnVu
Y3Rpb24oKSB7IGR1bXAoeDBhKTsgdmFyIHgwYiA9IGZ1bmN0aW9uKCkgeyBkdW1wKHgwYik7IHN1
bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBh
cnNlck1ldGFEYXRhKCkpOycpOyB9OyB4MGIoKTsgfTsgeDBhKCk7IH07IHgwKCk7CisKK2Z1bmN0
aW9uIGdsb2JhbEZ1bmMoKSB7CisgICAgdmFyIGFycmF5ID0gWzJdOworICAgIHZhciBzdW0gPSAw
OworICAgIHZhciB2YWx1ZSA9IDU7CisKKyAgICBkZWJ1ZygiXG4gIEZ1bmN0aW9ucyBEZWNsYXJh
dGlvbnMgaW4gYSBmdW5jdGlvbjoiKTsKKyAgICBmdW5jdGlvbiBmMShrZXkpIHsgZHVtcChmMSk7
IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZjEoKTsKKworICAgIGZ1bmN0aW9uIGYyKGtl
eSkgeworICAgICAgICBkdW1wKGYyKTsKKyAgICAgICAgZnVuY3Rpb24gZjJhKCkgeyBkdW1wKGYy
YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAgIGYyYSgpOworICAgIH0KKyAgICBm
MigpOworCisgICAgZnVuY3Rpb24gZjMoa2V5KSB7CisgICAgICAgIGR1bXAoZjMpOworICAgICAg
ICBmdW5jdGlvbiBmM2EoKSB7CisgICAgICAgICAgICBkdW1wKGYzYSk7CisgICAgICAgICAgICBm
dW5jdGlvbiBmM2IoKSB7CisgICAgICAgICAgICAgICAgZHVtcChmM2IpOworICAgICAgICAgICAg
ICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAgICAgIGV2YWwoJ3N1
bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYzYigpOworICAgICAgICB9CisgICAgICAgIGYz
YSgpOworICAgIH0KKyAgICBmMygpOworCisgICAgZnVuY3Rpb24gZjQoa2V5KSB7IGR1bXAoZjQp
OyBmdW5jdGlvbiBmNGEoKSB7fTsgZHVtcChmNGEpOyBmNGEoKTsgfQorICAgIGY0KCk7CisgICAg
ZnVuY3Rpb24gZjUoa2V5KSB7IGR1bXAoZjUpOyBmdW5jdGlvbiBmNWEoKSB7IGR1bXAoZjVhKTsg
c3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
cGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGY1YSgpOyB9CisgICAgZjUoKTsKKyAgICBmdW5jdGlv
biBmNihrZXkpIHsgZHVtcChmNik7IGZ1bmN0aW9uIGY2YSgpIHsgZHVtcChmNmEpOyBmdW5jdGlv
biBmNmIoKSB7IGR1bXAoZjZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRl
YnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGY2YigpOyB9OyBm
NmEoKTsgfQorICAgIGY2KCk7CisKKyAgICBkZWJ1ZygiXG4gIEluZGVudGVkIEZ1bmN0aW9ucyBE
ZWNsYXJhdGlvbnMgaW4gYSBmdW5jdGlvbjoiKTsKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGZp
MShrZXkpIHsgZHVtcChmaTEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVi
dWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgICAgICBmaTEo
KTsKKworICAgICAgICBmdW5jdGlvbiBmaTIoa2V5KSB7CisgICAgICAgICAgICBkdW1wKGZpMik7
CisgICAgICAgICAgICBmdW5jdGlvbiBmaTJhKCkgeyBkdW1wKGZpMmEpOyBzdW0gKz0gdmFsdWU7
IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0
YSgpKTsnKTsgfQorICAgICAgICAgICAgZmkyYSgpOworICAgICAgICB9CisgICAgICAgIGZpMigp
OworCisgICAgICAgIGZ1bmN0aW9uIGZpMyhrZXkpIHsKKyAgICAgICAgICAgIGR1bXAoZmkzKTsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGZpM2EoKSB7CisgICAgICAgICAgICAgICAgZHVtcChmaTNh
KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaTNiKCkgeworICAgICAgICAgICAgICAgICAg
ICBkdW1wKGZpM2IpOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdmFsdWU7IHN1bSAqPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmaTNiKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaTNhKCk7
CisgICAgICAgIH0KKyAgICAgICAgZmkzKCk7CisKKyAgICAgICAgZnVuY3Rpb24gZmk0KGtleSkg
eyBkdW1wKGZpNCk7IGZ1bmN0aW9uIGZpNGEoKSB7fTsgZHVtcChmaTRhKTsgZmk0YSgpOyB9Cisg
ICAgICAgIGZpNCgpOworICAgICAgICBmdW5jdGlvbiBmaTUoa2V5KSB7IGR1bXAoZmk1KTsgZnVu
Y3Rpb24gZmk1YSgpIHsgZHVtcChmaTVhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFs
dWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGZpNWEo
KTsgfQorICAgICAgICBmaTUoKTsKKyAgICAgICAgZnVuY3Rpb24gZmk2KGtleSkgeyBkdW1wKGZp
Nik7IGZ1bmN0aW9uIGZpNmEoKSB7IGR1bXAoZmk2YSk7IGZ1bmN0aW9uIGZpNmIoKSB7IGR1bXAo
Zmk2Yik7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBmaTZiKCk7IH07IGZpNmEoKTsgfQorICAg
ICAgICBmaTYoKTsKKyAgICB9CisKKyAgICBkZWJ1ZygiXG4gIEZ1bmN0aW9ucyBFeHByZXNzaW9u
cyBpbiBhIGZ1bmN0aW9uOiIpOworICAgIHZhciB4MSA9IGZ1bmN0aW9uKGtleSkgeyBkdW1wKHgx
KTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5h
bHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICB4MSgpOworCisgICAgdmFyIHgyID0gZnVu
Y3Rpb24oa2V5KSB7CisgICAgICAgIGR1bXAoeDIpOworICAgICAgICB2YXIgeDJhID0gZnVuY3Rp
b24oKSB7IGR1bXAoeDJhKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH0KKyAgICAgICAgeDJhKCk7
CisgICAgfQorICAgIHgyKCk7CisKKyAgICB2YXIgeDMgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAg
ICAgZHVtcCh4Myk7CisgICAgICAgIHZhciB4M2EgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGR1bXAoeDNhKTsKKyAgICAgICAgICAgIHZhciB4M2IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBkdW1wKHgzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOworICAgICAg
ICAgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJz
ZXJNZXRhRGF0YSgpKTsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHgzYigpOworICAg
ICAgICB9CisgICAgICAgIHgzYSgpOworICAgIH0KKyAgICB4MygpOworCisgICAgdmFyIHg0ID0g
ZnVuY3Rpb24oa2V5KSB7IGR1bXAoeDQpOyB2YXIgeDRhID0gZnVuY3Rpb24oKSB7fTsgZHVtcCh4
NGEpOyB4NGEoKTsgfQorICAgIHg0KCk7CisgICAgdmFyIHg1ID0gZnVuY3Rpb24oa2V5KSB7IGR1
bXAoeDUpOyB2YXIgeDVhID0gZnVuY3Rpb24oKSB7IGR1bXAoeDVhKTsgc3VtICs9IHZhbHVlOyBl
dmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7Jyk7IH07IHg1YSgpOyB9CisgICAgeDUoKTsKKyAgICB2YXIgeDYgPSBmdW5jdGlvbihrZXkp
IHsgZHVtcCh4Nik7IHZhciB4NmEgPSBmdW5jdGlvbigpIHsgZHVtcCh4NmEpOyB2YXIgeDZiID0g
ZnVuY3Rpb24oKSB7IGR1bXAoeDZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7
IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IHg2YigpOyB9
OyB4NmEoKTsgfQorICAgIHg2KCk7CisKKyAgICBkZWJ1ZygiXG4gIEluZGVudGVkIEZ1bmN0aW9u
cyBFeHByZXNzaW9ucyBpbiBhIGZ1bmN0aW9uOiIpOworICAgIHsKKyAgICAgICAgdmFyIHhpMSA9
IGZ1bmN0aW9uKGtleSkgeyBkdW1wKHhpMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAg
ICAgIHhpMSgpOworCisgICAgICAgIHZhciB4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAg
ICAgIGR1bXAoeGkyKTsKKyAgICAgICAgICAgIHZhciB4aTJhID0gZnVuY3Rpb24oKSB7IGR1bXAo
eGkyYSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgICAgICAgICB4aTJhKCk7CisgICAg
ICAgIH0KKyAgICAgICAgeGkyKCk7CisKKyAgICAgICAgdmFyIHhpMyA9IGZ1bmN0aW9uKGtleSkg
eworICAgICAgICAgICAgZHVtcCh4aTMpOworICAgICAgICAgICAgdmFyIHhpM2EgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBkdW1wKHhpM2EpOworICAgICAgICAgICAgICAgIHZhciB4
aTNiID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGR1bXAoeGkzYik7CisgICAg
ICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsgc3VtICo9IHZhbHVlOworICAgICAgICAgICAg
ICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2Vy
TWV0YURhdGEoKSk7Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHhpM2Io
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhpM2EoKTsKKyAgICAgICAgfQorICAgICAg
ICB4aTMoKTsKKworICAgICAgICB2YXIgeGk0ID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoeGk0KTsg
dmFyIHhpNGEgPSBmdW5jdGlvbigpIHt9OyBkdW1wKHhpNGEpOyB4aTRhKCk7IH0KKyAgICAgICAg
eGk0KCk7CisgICAgICAgIHZhciB4aTUgPSBmdW5jdGlvbihrZXkpIHsgZHVtcCh4aTUpOyB2YXIg
eGk1YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKHhpNWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSAr
PSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsg
eGk1YSgpOyB9CisgICAgICAgIHhpNSgpOworICAgICAgICB2YXIgeGk2ID0gZnVuY3Rpb24oa2V5
KSB7IGR1bXAoeGk2KTsgdmFyIHhpNmEgPSBmdW5jdGlvbigpIHsgZHVtcCh4aTZhKTsgdmFyIHhp
NmIgPSBmdW5jdGlvbigpIHsgZHVtcCh4aTZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0gKz0g
dmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IHhp
NmIoKTsgfTsgeGk2YSgpOyB9CisgICAgICAgIHhpNigpOworICAgIH0KKworICAgIGRlYnVnKCJc
biAgQW5vbnltb3VzIEZ1bmN0aW9uIERlY2xhcmF0aW9uIGluIGEgZnVuY3Rpb246Iik7CisgICAg
dmFyIGZvckVhY2ggPSBbIF0uZm9yRWFjaDsKKyAgICB2YXIgYm91bmRGb3JFYWNoID0gZm9yRWFj
aC5iaW5kKGFycmF5LCBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsKKyAgICAgICAgc3VtICs9IHZhbHVlOworICAgICAgICBz
dW0gKj0gdmFsdWU7CisgICAgICAgIGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93Lmlu
dGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsKKyAgICB9KTsKKyAgICBib3VuZEZvckVhY2go
KTsKKworfQorZ2xvYmFsRnVuYygpOworCitkZWJ1ZygiXG4gIEdsb2JhbCBldmFsOiIpOworZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkp
OycpOworCitkZWJ1ZygiXG4gIEdsb2JhbCBGdW5jdGlvbnMgRGVjbGFyYXRpb25zOiIpOworZnVu
Y3Rpb24gZ2YxKGtleSkgeyBkdW1wKGdmMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CitnZjEo
KTsKKworZnVuY3Rpb24gZ2YyKGtleSkgeworICAgIGR1bXAoZ2YyKTsKKyAgICBmdW5jdGlvbiBn
ZjJhKCkgeyBkdW1wKGdmMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVi
dWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAgIGdmMmEoKTsK
K30KK2dmMigpOworCitmdW5jdGlvbiBnZjMoa2V5KSB7CisgICAgZHVtcChnZjMpOworICAgIGZ1
bmN0aW9uIGdmM2EoKSB7CisgICAgICAgIGR1bXAoZ2YzYSk7CisgICAgICAgIGZ1bmN0aW9uIGdm
M2IoKSB7CisgICAgICAgICAgICBkdW1wKGdmM2IpOworICAgICAgICAgICAgc3VtICs9IHZhbHVl
OyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7CisgICAgICAgIH0KKyAgICAgICAg
Z2YzYigpOworICAgIH0KKyAgICBnZjNhKCk7Cit9CitnZjMoKTsKKworZnVuY3Rpb24gZ2Y0KGtl
eSkgeyBkdW1wKGdmNCk7IGZ1bmN0aW9uIGdmNGEoKSB7fTsgZHVtcChnZjRhKTsgZ2Y0YSgpOyB9
CitnZjQoKTsKK2Z1bmN0aW9uIGdmNShrZXkpIHsgZHVtcChnZjUpOyBmdW5jdGlvbiBnZjVhKCkg
eyBkdW1wKGdmNWEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2lu
ZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ2Y1YSgpOyB9CitnZjUoKTsK
K2Z1bmN0aW9uIGdmNihrZXkpIHsgZHVtcChnZjYpOyBmdW5jdGlvbiBnZjZhKCkgeyBkdW1wKGdm
NmEpOyBmdW5jdGlvbiBnZjZiKCkgeyBkdW1wKGdmNmIpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1
bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsg
fTsgZ2Y2YigpOyB9OyBnZjZhKCk7IH0KK2dmNigpOworCitkZWJ1ZygiXG4gIEluZGVudGVkIEds
b2JhbCBGdW5jdGlvbnMgRGVjbGFyYXRpb25zOiIpOworeworICAgIGZ1bmN0aW9uIGdmaTEoa2V5
KSB7IGR1bXAoZ2ZpMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3
aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ2ZpMSgpOworCisg
ICAgZnVuY3Rpb24gZ2ZpMihrZXkpIHsKKyAgICAgICAgZHVtcChnZmkyKTsKKyAgICAgICAgZnVu
Y3Rpb24gZ2ZpMmEoKSB7IGR1bXAoZ2ZpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2
YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAg
ICAgICBnZmkyYSgpOworICAgIH0KKyAgICBnZmkyKCk7CisKKyAgICBmdW5jdGlvbiBnZmkzKGtl
eSkgeworICAgICAgICBkdW1wKGdmaTMpOworICAgICAgICBmdW5jdGlvbiBnZmkzYSgpIHsKKyAg
ICAgICAgICAgIGR1bXAoZ2ZpM2EpOworICAgICAgICAgICAgZnVuY3Rpb24gZ2ZpM2IoKSB7Cisg
ICAgICAgICAgICAgICAgZHVtcChnZmkzYik7CisgICAgICAgICAgICAgICAgc3VtICs9IHZhbHVl
OyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2ZpM2IoKTsKKyAgICAgICAgfQorICAgICAgICBnZmkzYSgpOworICAgIH0K
KyAgICBnZmkzKCk7CisKKyAgICBmdW5jdGlvbiBnZmk0KGtleSkgeyBkdW1wKGdmaTQpOyBmdW5j
dGlvbiBnZmk0YSgpIHt9OyBkdW1wKGdmaTRhKTsgZ2ZpNGEoKTsgfQorICAgIGdmaTQoKTsKKyAg
ICBmdW5jdGlvbiBnZmk1KGtleSkgeyBkdW1wKGdmaTUpOyBmdW5jdGlvbiBnZmk1YSgpIHsgZHVt
cChnZmk1YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cu
aW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBnZmk1YSgpOyB9CisgICAgZ2ZpNSgp
OworICAgIGZ1bmN0aW9uIGdmaTYoa2V5KSB7IGR1bXAoZ2ZpNik7IGZ1bmN0aW9uIGdmaTZhKCkg
eyBkdW1wKGdmaTZhKTsgZnVuY3Rpb24gZ2ZpNmIoKSB7IGR1bXAoZ2ZpNmIpOyBzdW0gKz0gdmFs
dWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRh
RGF0YSgpKTsnKTsgfTsgZ2ZpNmIoKTsgfTsgZ2ZpNmEoKTsgfQorICAgIGdmaTYoKTsKK30KKwor
ZGVidWcoIlxuICBHbG9iYWwgRnVuY3Rpb25zIEV4cHJlc3Npb25zOiIpOwordmFyIGd4MSA9IGZ1
bmN0aW9uKGtleSkgeyBkdW1wKGd4MSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CitneDEoKTsK
KwordmFyIGd4MiA9IGZ1bmN0aW9uKGtleSkgeworICAgIGR1bXAoZ3gyKTsKKyAgICB2YXIgZ3gy
YSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGd4MmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2
YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfQorICAg
IGd4MmEoKTsKK30KK2d4MigpOworCit2YXIgZ3gzID0gZnVuY3Rpb24oa2V5KSB7CisgICAgZHVt
cChneDMpOworICAgIHZhciBneDNhID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGR1bXAoZ3gzYSk7
CisgICAgICAgIHZhciBneDNiID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkdW1wKGd4M2Ip
OworICAgICAgICAgICAgc3VtICs9IHZhbHVlOworICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworICAgICAg
ICB9CisgICAgICAgIGd4M2IoKTsKKyAgICB9CisgICAgZ3gzYSgpOworfQorZ3gzKCk7CisKK3Zh
ciBneDQgPSBmdW5jdGlvbihrZXkpIHsgZHVtcChneDQpOyB2YXIgZ3g0YSA9IGZ1bmN0aW9uKCkg
e307IGR1bXAoZ3g0YSk7IGd4NGEoKTsgfQorZ3g0KCk7Cit2YXIgZ3g1ID0gZnVuY3Rpb24oa2V5
KSB7IGR1bXAoZ3g1KTsgdmFyIGd4NWEgPSBmdW5jdGlvbigpIHsgZHVtcChneDVhKTsgc3VtICs9
IHZhbHVlOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2Vy
TWV0YURhdGEoKSk7Jyk7IH07IGd4NWEoKTsgfQorZ3g1KCk7Cit2YXIgZ3g2ID0gZnVuY3Rpb24o
a2V5KSB7IGR1bXAoZ3g2KTsgdmFyIGd4NmEgPSBmdW5jdGlvbigpIHsgZHVtcChneDZhKTsgdmFy
IGd4NmIgPSBmdW5jdGlvbigpIHsgZHVtcChneDZiKTsgc3VtICs9IHZhbHVlOyBldmFsKCdzdW0g
Kz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07
IGd4NmIoKTsgfTsgZ3g2YSgpOyB9CitneDYoKTsKKworZGVidWcoIlxuICBJbmRlbnRlZCBGdW5j
dGlvbnMgRGVjbGFyYXRpb25zOiIpOworeworICAgIHZhciBneGkxID0gZnVuY3Rpb24oa2V5KSB7
IGR1bXAoZ3hpMSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5k
b3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9CisgICAgZ3hpMSgpOworCisgICAg
dmFyIGd4aTIgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZHVtcChneGkyKTsKKyAgICAgICAg
dmFyIGd4aTJhID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3hpMmEpOyBzdW0gKz0gdmFsdWU7IGV2YWwo
J3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsn
KTsgfQorICAgICAgICBneGkyYSgpOworICAgIH0KKyAgICBneGkyKCk7CisKKyAgICB2YXIgZ3hp
MyA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICBkdW1wKGd4aTMpOworICAgICAgICB2YXIgZ3hp
M2EgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGR1bXAoZ3hpM2EpOworICAgICAgICAgICAg
dmFyIGd4aTNiID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZHVtcChneGkzYik7Cisg
ICAgICAgICAgICAgICAgc3VtICs9IHZhbHVlOyBzdW0gKj0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFE
YXRhKCkpOycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ3hpM2IoKTsKKyAgICAgICAg
fQorICAgICAgICBneGkzYSgpOworICAgIH0KKyAgICBneGkzKCk7CisKKyAgICB2YXIgZ3hpNCA9
IGZ1bmN0aW9uKGtleSkgeyBkdW1wKGd4aTQpOyB2YXIgZ3hpNGEgPSBmdW5jdGlvbigpIHt9OyBk
dW1wKGd4aTRhKTsgZ3hpNGEoKTsgfQorICAgIGd4aTQoKTsKKyAgICB2YXIgZ3hpNSA9IGZ1bmN0
aW9uKGtleSkgeyBkdW1wKGd4aTUpOyB2YXIgZ3hpNWEgPSBmdW5jdGlvbigpIHsgZHVtcChneGk1
YSk7IHN1bSArPSB2YWx1ZTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9OyBneGk1YSgpOyB9CisgICAgZ3hpNSgpOworICAg
IHZhciBneGk2ID0gZnVuY3Rpb24oa2V5KSB7IGR1bXAoZ3hpNik7IHZhciBneGk2YSA9IGZ1bmN0
aW9uKCkgeyBkdW1wKGd4aTZhKTsgdmFyIGd4aTZiID0gZnVuY3Rpb24oKSB7IGR1bXAoZ3hpNmIp
OyBzdW0gKz0gdmFsdWU7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFs
cy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfTsgZ3hpNmIoKTsgfTsgZ3hpNmEoKTsgfQorICAgIGd4
aTYoKTsKK30KKworZGVidWcoIlxuICBBbm9ueW1vdXMgR2xvYmFsIEZ1bmN0aW9uIERlY2xhcmF0
aW9uczoiKTsKK3ZhciBhcnJheSA9IFsyXTsKK3ZhciBnZm9yRWFjaCA9IFsgXS5mb3JFYWNoOwor
dmFyIGdib3VuZEZvckVhY2ggPSBnZm9yRWFjaC5iaW5kKGFycmF5LCBmdW5jdGlvbihrZXkpIHsK
KyAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOworICAgIHN1bSAr
PSB2YWx1ZTsKKyAgICBzdW0gKj0gdmFsdWU7CisgICAgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1
Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOworfSk7CitnYm91bmRGb3JF
YWNoKCk7CisKK2RlYnVnKCJcbiAgRnVuY3Rpb24gRGVjbGFyYXRpb25zIGluIGFuIGV2YWw6Iik7
CitldmFsKCIgXG4iICsKKyIgICAgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0
YSgpKTtcbiIgKworIiAgICBmdW5jdGlvbiBlZjEoKSB7XG4iICsKKyIgICAgICAgIGR1bXAoZWYx
KTtcbiIgKworIiAgICAgICAgZnVuY3Rpb24gZWYxYSgpIHtcbiIgKworIiAgICAgICAgICAgIGR1
bXAoZWYxYSk7XG4iICsKKyIgICAgICAgICAgICBmdW5jdGlvbiBlZjFiKCkge1xuIiArCisiICAg
ICAgICAgICAgICAgIGR1bXAoZWYxYik7XG4iICsKKyIgICAgICAgICAgICAgICAgZXZhbCgnc3Vt
ICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpO1xu
IiArCisiICAgICAgICAgICAgfVxuIiArCisiICAgICAgICAgICAgZWYxYigpO1xuIiArCisiICAg
ICAgICB9XG4iICsKKyIgICAgICAgIGVmMWEoKTtcbiIgKworIiAgICB9XG4iICsKKyJcbiIgKwor
ImVmMSgpOyIKKyk7CisKK2V2YWwoIiBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFE
YXRhKCkpOyBmdW5jdGlvbiBlZjIoKSB7IGR1bXAoZWYyKTsgZnVuY3Rpb24gZWYyYSgpIHsgZHVt
cChlZjJhKTsgZnVuY3Rpb24gZWYyYigpIHsgZHVtcChlZjJiKTsgZXZhbCgnc3VtICs9IHZhbHVl
OyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpOyB9IGVmMmIoKTsg
fSBlZjJhKCk7IH0gZWYyKCk7Iik7CisKK3sKKyAgICBldmFsKCIgXG4iICsKKyAgICAgICAgICIg
ICAgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTtcbiIgKworICAgICAg
ICAgIiAgICAvLyBUZXN0IGluZGVudGVkIGZ1bmN0aW9uIHdpdGggaW5uZXIgZnVuY3Rpb25zLiBc
biIgKworICAgICAgICAgIiAgICBmdW5jdGlvbiBlZmkxKCkge1xuIiArCisgICAgICAgICAiICAg
ICAgICBkdW1wKGVmaTEpO1xuIiArCisgICAgICAgICAiICAgICAgICBmdW5jdGlvbiBlZmkxYSgp
IHtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgIGR1bXAoZWZpMWEpO1xuIiArCisgICAgICAg
ICAiICAgICAgICAgICAgZnVuY3Rpb24gZWZpMWIoKSB7XG4iICsKKyAgICAgICAgICIgICAgICAg
ICAgICAgICAgZHVtcChlZmkxYik7XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICAgICAgZXZh
bCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkp
OycpO1xuIiArCisgICAgICAgICAiICAgICAgICAgICAgfVxuIiArCisgICAgICAgICAiICAgICAg
ICAgICAgZWZpMWIoKTtcbiIgKworICAgICAgICAgIiAgICAgICAgfVxuIiArCisgICAgICAgICAi
ICAgICAgICBlZmkxYSgpO1xuIiArCisgICAgICAgICAiICAgIH1cbiIgKworICAgICAgICAgIlxu
IiArCisgICAgICAgICAiZWZpMSgpOyIKKyAgICAgICAgKTsKKworICAgIGV2YWwoIiBkZWJ1Zyh3
aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOyBmdW5jdGlvbiBlZmkyKCkgeyBkdW1w
KGVmaTIpOyBmdW5jdGlvbiBlZmkyYSgpIHsgZHVtcChlZmkyYSk7IGZ1bmN0aW9uIGVmaTJiKCkg
eyBkdW1wKGVmaTJiKTsgZXZhbCgnc3VtICs9IHZhbHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxz
LnBhcnNlck1ldGFEYXRhKCkpOycpOyB9IGVmaTJiKCk7IH0gZWZpMmEoKTsgfSBlZmkyKCk7Iik7
Cit9CisKK2RlYnVnKCJcbiAgRnVuY3Rpb24gRXhwcmVzc2lvbnMgaW4gYW4gZXZhbDoiKTsKK2V2
YWwoIiBcbiIgKworIiAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkp
O1xuIiArCisiICAgIHZhciBleDEgPSBmdW5jdGlvbigpIHtcbiIgKworIiAgICAgICAgZHVtcChl
eDEpO1xuIiArCisiICAgICAgICB2YXIgZXgxYSA9IGZ1bmN0aW9uKCkge1xuIiArCisiICAgICAg
ICAgICAgZHVtcChleDFhKTtcbiIgKworIiAgICAgICAgICAgIHZhciBleDFiID0gZnVuY3Rpb24o
KSB7XG4iICsKKyIgICAgICAgICAgICAgICAgZHVtcChleDFiKTtcbiIgKworIiAgICAgICAgICAg
ICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0
YURhdGEoKSk7Jyk7XG4iICsKKyIgICAgICAgICAgICB9XG4iICsKKyIgICAgICAgICAgICBleDFi
KCk7XG4iICsKKyIgICAgICAgIH1cbiIgKworIiAgICAgICAgZXgxYSgpO1xuIiArCisiICAgIH1c
biIgKworIlxuIiArCisiZXgxKCk7IgorKTsKKworZXZhbCgiIGRlYnVnKHdpbmRvdy5pbnRlcm5h
bHMucGFyc2VyTWV0YURhdGEoKSk7IHZhciBleDIgPSBmdW5jdGlvbigpIHsgZHVtcChleDIpOyB2
YXIgZXgyYSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGV4MmEpOyB2YXIgZXgyYiA9IGZ1bmN0aW9uKCkg
eyBkdW1wKGV4MmIpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMu
cGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGV4MmIoKTsgfTsgZXgyYSgpOyB9OyBleDIoKTsiKTsK
KworeworICAgIGV2YWwoIiBcbiIgKworICAgICAgICAgIiAgICBkZWJ1Zyh3aW5kb3cuaW50ZXJu
YWxzLnBhcnNlck1ldGFEYXRhKCkpO1xuIiArCisgICAgICAgICAiICAgIC8vIFRlc3QgaW5kZW50
ZWQgZnVuY3Rpb24gd2l0aCBpbm5lciBmdW5jdGlvbnMuIFxuIiArCisgICAgICAgICAiICAgIHZh
ciBleGkxID0gZnVuY3Rpb24oKSB7XG4iICsKKyAgICAgICAgICIgICAgICAgIGR1bXAoZXhpMSk7
XG4iICsKKyAgICAgICAgICIgICAgICAgIHZhciBleGkxYSA9IGZ1bmN0aW9uKCkge1xuIiArCisg
ICAgICAgICAiICAgICAgICAgICAgZHVtcChleGkxYSk7XG4iICsKKyAgICAgICAgICIgICAgICAg
ICAgICB2YXIgZXhpMWIgPSBmdW5jdGlvbigpIHtcbiIgKworICAgICAgICAgIiAgICAgICAgICAg
ICAgICBkdW1wKGV4aTFiKTtcbiIgKworICAgICAgICAgIiAgICAgICAgICAgICAgICBldmFsKCdz
dW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7
XG4iICsKKyAgICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAgICAgICAg
ICBleGkxYigpO1xuIiArCisgICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgICIgICAg
ICAgIGV4aTFhKCk7XG4iICsKKyAgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICAiXG4iICsK
KyAgICAgICAgICJleGkxKCk7IgorICAgICAgICApOworCisgICAgZXZhbCgiIGRlYnVnKHdpbmRv
dy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7IHZhciBleGkyID0gZnVuY3Rpb24oKSB7IGR1
bXAoZXhpMik7IHZhciBleGkyYSA9IGZ1bmN0aW9uKCkgeyBkdW1wKGV4aTJhKTsgdmFyIGV4aTJi
ID0gZnVuY3Rpb24oKSB7IGR1bXAoZXhpMmIpOyBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7IH07IGV4aTJiKCk7IH07IGV4aTJh
KCk7IH07IGV4aTIoKTsiKTsKK30KKworZGVidWcoIlxuICBuZXcgRnVuY3Rpb24gT2JqZWN0OiIp
OwordmFyIG5mMVN0ciA9CisiIGRlYnVnKHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEo
KSk7IGZ1bmN0aW9uIG5mMWEoKSB7IGR1bXAobmYxYSk7IGZ1bmN0aW9uIG5mMWIoKSB7IGR1bXAo
bmYxYik7IGZ1bmN0aW9uIG5mMWMoKSB7IGR1bXAobmYxYyk7IGV2YWwoJ3N1bSArPSB2YWx1ZTsg
ZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfSBuZjFjKCk7IH0g
bmYxYigpOyB9IG5mMWEoKTsiOwordmFyIG5mMSA9IG5ldyBGdW5jdGlvbigiYSIsICJiIiwgbmYx
U3RyKTsKK25mMSgpOworCit2YXIgbmYyU3RyID0KKyIgXG4iICsKKyIgICAgZGVidWcod2luZG93
LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTtcbiIgKworIiAgICAvLyBUZXN0IGluZGVudGVk
IGZ1bmN0aW9uIHdpdGggaW5uZXIgZnVuY3Rpb25zLiBcbiIgKworIiAgICBmdW5jdGlvbiBuZjJh
KCkge1xuIiArCisiICAgICAgICBkdW1wKG5mMmEpO1xuIiArCisiICAgICAgICBmdW5jdGlvbiBu
ZjJiKCkge1xuIiArCisiICAgICAgICAgICAgZHVtcChuZjJiKTtcbiIgKworIiAgICAgICAgICAg
IGZ1bmN0aW9uIG5mMmMoKSB7XG4iICsKKyIgICAgICAgICAgICAgICAgZHVtcChuZjJjKTtcbiIg
KworIiAgICAgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdpbmRvdy5pbnRl
cm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7XG4iICsKKyIgICAgICAgICAgICB9XG4iICsKKyIg
ICAgICAgICAgICBuZjJjKCk7XG4iICsKKyIgICAgICAgIH1cbiIgKworIiAgICAgICAgbmYyYigp
O1xuIiArCisiICAgIH1cbiIgKworIlxuIiArCisibmYyYSgpOyI7Cit2YXIgbmYyID0gbmV3IEZ1
bmN0aW9uKCJhIiwgImIiLCBuZjJTdHIpOworbmYyKCk7CisKK3sKKyAgICAvLyBuZmkxXzAgaGFz
IGFuIGlkZW50aWNhbCBzY3JpcHQgc3RyaW5nIGFzIG5mMSBleGNlcHQgd2UgaW5kZW50ZWQgaXQg
aGVyZS4KKyAgICB2YXIgbmZpMV8wID0gbmV3IEZ1bmN0aW9uKCJhIiwgImIiLCAiIGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7IGZ1bmN0aW9uIG5mMWEoKSB7IGR1bXAo
bmYxYSk7IGZ1bmN0aW9uIG5mMWIoKSB7IGR1bXAobmYxYik7IGZ1bmN0aW9uIG5mMWMoKSB7IGR1
bXAobmYxYyk7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVybmFscy5wYXJz
ZXJNZXRhRGF0YSgpKTsnKTsgfSBuZjFjKCk7IH0gbmYxYigpOyB9IG5mMWEoKTsiKTsKKyAgICBu
ZmkxXzAoKTsKKworICAgIHZhciBuZmkxID0gbmV3IEZ1bmN0aW9uKCJhIiwgImIiLCAiIGRlYnVn
KHdpbmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7IGZ1bmN0aW9uIG5maTFhKCkgeyBk
dW1wKG5maTFhKTsgZnVuY3Rpb24gbmZpMWIoKSB7IGR1bXAobmZpMWIpOyBmdW5jdGlvbiBuZmkx
YygpIHsgZHVtcChuZmkxYyk7IGV2YWwoJ3N1bSArPSB2YWx1ZTsgZGVidWcod2luZG93LmludGVy
bmFscy5wYXJzZXJNZXRhRGF0YSgpKTsnKTsgfSBuZmkxYygpOyB9IG5maTFiKCk7IH0gbmZpMWEo
KTsiKTsKKyAgICBuZmkxKCk7CisKKyAgICAvLyBuZmkyXzAgaGFzIGFuIGlkZW50aWNhbCBzY3Jp
cHQgc3RyaW5nIGFzIG5mMiBleGNlcHQgd2UgaW5kZW50ZWQgaXQgaGVyZS4KKyAgICB2YXIgbmZp
Ml8wID0gbmV3IEZ1bmN0aW9uKCJhIiwgImIiLAorICAgICAgICAiIFxuIiArCisgICAgICAgICIg
ICAgZGVidWcod2luZG93LmludGVybmFscy5wYXJzZXJNZXRhRGF0YSgpKTtcbiIgKworICAgICAg
ICAiICAgIC8vIFRlc3QgaW5kZW50ZWQgZnVuY3Rpb24gd2l0aCBpbm5lciBmdW5jdGlvbnMuIFxu
IiArCisgICAgICAgICIgICAgZnVuY3Rpb24gbmYyYSgpIHtcbiIgKworICAgICAgICAiICAgICAg
ICBkdW1wKG5mMmEpO1xuIiArCisgICAgICAgICIgICAgICAgIGZ1bmN0aW9uIG5mMmIoKSB7XG4i
ICsKKyAgICAgICAgIiAgICAgICAgICAgIGR1bXAobmYyYik7XG4iICsKKyAgICAgICAgIiAgICAg
ICAgICAgIGZ1bmN0aW9uIG5mMmMoKSB7XG4iICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBk
dW1wKG5mMmMpO1xuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgZXZhbCgnc3VtICs9IHZh
bHVlOyBkZWJ1Zyh3aW5kb3cuaW50ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpOycpO1xuIiArCisg
ICAgICAgICIgICAgICAgICAgICB9XG4iICsKKyAgICAgICAgIiAgICAgICAgICAgIG5mMmMoKTtc
biIgKworICAgICAgICAiICAgICAgICB9XG4iICsKKyAgICAgICAgIiAgICAgICAgbmYyYigpO1xu
IiArCisgICAgICAgICIgICAgfVxuIiArCisgICAgICAgICJcbiIgKworICAgICAgICAibmYyYSgp
OyIKKyAgICApOworICAgIG5maTJfMCgpOworCisgICAgdmFyIG5maTIgPSBuZXcgRnVuY3Rpb24o
ImEiLCAiYiIsCisgICAgICAgICIgXG4iICsKKyAgICAgICAgIiAgICBkZWJ1Zyh3aW5kb3cuaW50
ZXJuYWxzLnBhcnNlck1ldGFEYXRhKCkpO1xuIiArCisgICAgICAgICIgICAgLy8gVGVzdCBpbmRl
bnRlZCBmdW5jdGlvbiB3aXRoIGlubmVyIGZ1bmN0aW9ucy4gXG4iICsKKyAgICAgICAgIiAgICBm
dW5jdGlvbiBuZmkyYSgpIHtcbiIgKworICAgICAgICAiICAgICAgICBkdW1wKG5maTJhKTtcbiIg
KworICAgICAgICAiICAgICAgICBmdW5jdGlvbiBuZmkyYigpIHtcbiIgKworICAgICAgICAiICAg
ICAgICAgICAgZHVtcChuZmkyYik7XG4iICsKKyAgICAgICAgIiAgICAgICAgICAgIGZ1bmN0aW9u
IG5maTJjKCkge1xuIiArCisgICAgICAgICIgICAgICAgICAgICAgICAgZHVtcChuZmkyYyk7XG4i
ICsKKyAgICAgICAgIiAgICAgICAgICAgICAgICBldmFsKCdzdW0gKz0gdmFsdWU7IGRlYnVnKHdp
bmRvdy5pbnRlcm5hbHMucGFyc2VyTWV0YURhdGEoKSk7Jyk7XG4iICsKKyAgICAgICAgIiAgICAg
ICAgICAgIH1cbiIgKworICAgICAgICAiICAgICAgICAgICAgbmZpMmMoKTtcbiIgKworICAgICAg
ICAiICAgICAgICB9XG4iICsKKyAgICAgICAgIiAgICAgICAgbmZpMmIoKTtcbiIgKworICAgICAg
ICAiICAgIH1cbiIgKworICAgICAgICAiXG4iICsKKyAgICAgICAgIm5maTJhKCk7IgorICAgICk7
CisgICAgbmZpMigpOworfQorZGVidWcoIiIpOwo=
</data>
<flag name="review"
          id="240364"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>